summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Translate')
l---------Translate1
-rw-r--r--Translate/.eslintrc.json7
-rw-r--r--Translate/.mailmap64
-rw-r--r--Translate/.phan/config.php51
-rw-r--r--Translate/.phan/stubs/languagedetector.php54
-rw-r--r--Translate/.phan/stubs/metayaml.php38
-rw-r--r--Translate/.phan/stubs/namespaces.php12
-rw-r--r--Translate/.phan/stubs/spyc.php18
-rw-r--r--Translate/.phpcs.xml59
-rw-r--r--Translate/.stylelintrc.json9
-rw-r--r--Translate/.svgo.config.js55
-rw-r--r--Translate/CODE_OF_CONDUCT.md1
-rw-r--r--Translate/COPYING346
-rw-r--r--Translate/Doxyfile65
-rw-r--r--Translate/Gruntfile.js41
-rw-r--r--Translate/HISTORY793
-rw-r--r--Translate/Message.php208
-rw-r--r--Translate/MessageCollection.php1053
-rw-r--r--Translate/MessageGroupConfigurationParser.php166
-rw-r--r--Translate/MessageGroups.php855
-rw-r--r--Translate/MetaYamlSchemaExtender.php25
-rw-r--r--Translate/README36
-rw-r--r--Translate/RELEASE-NOTES32
-rw-r--r--Translate/Translate.alias.php1158
-rw-r--r--Translate/Translate.i18n.magic.php19
-rw-r--r--Translate/TranslateEditAddons.php296
-rw-r--r--Translate/TranslateHooks.php1029
-rw-r--r--Translate/TranslateUtils.php593
-rw-r--r--Translate/composer.json89
-rw-r--r--Translate/data/group-yaml-schema.yaml138
-rw-r--r--Translate/data/plural-cldr.json884
-rw-r--r--Translate/data/plural-gettext.txt131
-rw-r--r--Translate/data/xliff-core-1.2-transitional.xsd2261
-rw-r--r--Translate/data/xliff-template.xml7
-rw-r--r--Translate/extension.json1402
-rw-r--r--Translate/ffs/AmdFFS.php174
-rw-r--r--Translate/ffs/AndroidXmlFFS.php212
-rw-r--r--Translate/ffs/AppleFFS.php235
-rw-r--r--Translate/ffs/AppleInfoPlistFfs.php52
-rw-r--r--Translate/ffs/DtdFFS.php107
-rw-r--r--Translate/ffs/FFS.php109
-rw-r--r--Translate/ffs/FlatPhpFFS.php145
-rw-r--r--Translate/ffs/GettextFFS.php690
-rw-r--r--Translate/ffs/GettextParseException.php12
-rw-r--r--Translate/ffs/GettextPluralException.php12
-rw-r--r--Translate/ffs/IniFFS.php112
-rw-r--r--Translate/ffs/JavaFFS.php268
-rw-r--r--Translate/ffs/JavaScriptFFS.php222
-rw-r--r--Translate/ffs/JsonFFS.php174
-rw-r--r--Translate/ffs/PremadeIntuitionTextdomains.php87
-rw-r--r--Translate/ffs/PremadeMediawikiExtensionGroups.php328
-rw-r--r--Translate/ffs/SimpleFFS.php379
-rw-r--r--Translate/ffs/XliffFFS.php192
-rw-r--r--Translate/ffs/YamlFFS.php202
-rw-r--r--Translate/hooks.txt126
-rw-r--r--Translate/i18n/api/af.json8
-rw-r--r--Translate/i18n/api/ar.json150
-rw-r--r--Translate/i18n/api/as.json8
-rw-r--r--Translate/i18n/api/ast.json127
-rw-r--r--Translate/i18n/api/awa.json8
-rw-r--r--Translate/i18n/api/ban.json9
-rw-r--r--Translate/i18n/api/bcl.json12
-rw-r--r--Translate/i18n/api/be-tarask.json10
-rw-r--r--Translate/i18n/api/bg.json76
-rw-r--r--Translate/i18n/api/blk.json9
-rw-r--r--Translate/i18n/api/bn.json14
-rw-r--r--Translate/i18n/api/bs.json120
-rw-r--r--Translate/i18n/api/ca.json48
-rw-r--r--Translate/i18n/api/ce.json12
-rw-r--r--Translate/i18n/api/ckb.json8
-rw-r--r--Translate/i18n/api/cs.json19
-rw-r--r--Translate/i18n/api/cu.json8
-rw-r--r--Translate/i18n/api/da.json32
-rw-r--r--Translate/i18n/api/de.json152
-rw-r--r--Translate/i18n/api/diq.json28
-rw-r--r--Translate/i18n/api/en.json175
-rw-r--r--Translate/i18n/api/eo.json32
-rw-r--r--Translate/i18n/api/es.json131
-rw-r--r--Translate/i18n/api/eu.json20
-rw-r--r--Translate/i18n/api/fa.json73
-rw-r--r--Translate/i18n/api/fi.json62
-rw-r--r--Translate/i18n/api/fit.json8
-rw-r--r--Translate/i18n/api/fr.json188
-rw-r--r--Translate/i18n/api/fy.json18
-rw-r--r--Translate/i18n/api/gl.json122
-rw-r--r--Translate/i18n/api/gu.json11
-rw-r--r--Translate/i18n/api/he.json176
-rw-r--r--Translate/i18n/api/hi.json177
-rw-r--r--Translate/i18n/api/hr.json11
-rw-r--r--Translate/i18n/api/hu.json104
-rw-r--r--Translate/i18n/api/hy.json8
-rw-r--r--Translate/i18n/api/hyw.json8
-rw-r--r--Translate/i18n/api/ia.json173
-rw-r--r--Translate/i18n/api/id.json115
-rw-r--r--Translate/i18n/api/io.json11
-rw-r--r--Translate/i18n/api/is.json25
-rw-r--r--Translate/i18n/api/it.json66
-rw-r--r--Translate/i18n/api/ja.json108
-rw-r--r--Translate/i18n/api/ka.json16
-rw-r--r--Translate/i18n/api/kab.json37
-rw-r--r--Translate/i18n/api/kjp.json8
-rw-r--r--Translate/i18n/api/kk-cyrl.json20
-rw-r--r--Translate/i18n/api/km.json8
-rw-r--r--Translate/i18n/api/ko.json46
-rw-r--r--Translate/i18n/api/ksh.json81
-rw-r--r--Translate/i18n/api/ksw.json9
-rw-r--r--Translate/i18n/api/ku-latn.json14
-rw-r--r--Translate/i18n/api/lb.json47
-rw-r--r--Translate/i18n/api/li.json60
-rw-r--r--Translate/i18n/api/lki.json10
-rw-r--r--Translate/i18n/api/lt.json43
-rw-r--r--Translate/i18n/api/lv.json31
-rw-r--r--Translate/i18n/api/mk.json175
-rw-r--r--Translate/i18n/api/mnw.json8
-rw-r--r--Translate/i18n/api/ms.json10
-rw-r--r--Translate/i18n/api/mt.json8
-rw-r--r--Translate/i18n/api/my.json26
-rw-r--r--Translate/i18n/api/nap.json9
-rw-r--r--Translate/i18n/api/nb.json175
-rw-r--r--Translate/i18n/api/nds-nl.json8
-rw-r--r--Translate/i18n/api/ne.json16
-rw-r--r--Translate/i18n/api/nl.json50
-rw-r--r--Translate/i18n/api/nn.json8
-rw-r--r--Translate/i18n/api/oc.json20
-rw-r--r--Translate/i18n/api/pdc.json9
-rw-r--r--Translate/i18n/api/pl.json52
-rw-r--r--Translate/i18n/api/pnb.json11
-rw-r--r--Translate/i18n/api/ps.json26
-rw-r--r--Translate/i18n/api/pt-br.json173
-rw-r--r--Translate/i18n/api/pt.json178
-rw-r--r--Translate/i18n/api/qqq.json183
-rw-r--r--Translate/i18n/api/qu.json8
-rw-r--r--Translate/i18n/api/ro.json12
-rw-r--r--Translate/i18n/api/roa-tara.json69
-rw-r--r--Translate/i18n/api/ru.json99
-rw-r--r--Translate/i18n/api/sa.json14
-rw-r--r--Translate/i18n/api/sah.json11
-rw-r--r--Translate/i18n/api/scn.json18
-rw-r--r--Translate/i18n/api/sd.json22
-rw-r--r--Translate/i18n/api/sdc.json18
-rw-r--r--Translate/i18n/api/sh.json29
-rw-r--r--Translate/i18n/api/shn.json8
-rw-r--r--Translate/i18n/api/skr-arab.json9
-rw-r--r--Translate/i18n/api/sl.json12
-rw-r--r--Translate/i18n/api/smn.json9
-rw-r--r--Translate/i18n/api/sms.json18
-rw-r--r--Translate/i18n/api/sq.json10
-rw-r--r--Translate/i18n/api/sr-ec.json30
-rw-r--r--Translate/i18n/api/sv.json111
-rw-r--r--Translate/i18n/api/sw.json18
-rw-r--r--Translate/i18n/api/ta.json11
-rw-r--r--Translate/i18n/api/te.json8
-rw-r--r--Translate/i18n/api/tg-cyrl.json8
-rw-r--r--Translate/i18n/api/th.json17
-rw-r--r--Translate/i18n/api/ti.json15
-rw-r--r--Translate/i18n/api/tl.json10
-rw-r--r--Translate/i18n/api/tly.json9
-rw-r--r--Translate/i18n/api/tr.json182
-rw-r--r--Translate/i18n/api/tt-cyrl.json9
-rw-r--r--Translate/i18n/api/uk.json179
-rw-r--r--Translate/i18n/api/vec.json9
-rw-r--r--Translate/i18n/api/vi.json10
-rw-r--r--Translate/i18n/api/wa.json8
-rw-r--r--Translate/i18n/api/yi.json20
-rw-r--r--Translate/i18n/api/yue.json13
-rw-r--r--Translate/i18n/api/zgh.json12
-rw-r--r--Translate/i18n/api/zh-hans.json149
-rw-r--r--Translate/i18n/api/zh-hant.json177
-rw-r--r--Translate/i18n/core/ab.json8
-rw-r--r--Translate/i18n/core/abs.json8
-rw-r--r--Translate/i18n/core/ace.json44
-rw-r--r--Translate/i18n/core/acm.json8
-rw-r--r--Translate/i18n/core/ady-cyrl.json8
-rw-r--r--Translate/i18n/core/aeb-arab.json8
-rw-r--r--Translate/i18n/core/aeb-latn.json9
-rw-r--r--Translate/i18n/core/af.json302
-rw-r--r--Translate/i18n/core/aln.json58
-rw-r--r--Translate/i18n/core/alt.json9
-rw-r--r--Translate/i18n/core/am.json26
-rw-r--r--Translate/i18n/core/ami.json9
-rw-r--r--Translate/i18n/core/an.json29
-rw-r--r--Translate/i18n/core/ang.json9
-rw-r--r--Translate/i18n/core/ann.json8
-rw-r--r--Translate/i18n/core/anp.json8
-rw-r--r--Translate/i18n/core/ar.json404
-rw-r--r--Translate/i18n/core/arc.json79
-rw-r--r--Translate/i18n/core/arn.json12
-rw-r--r--Translate/i18n/core/arq.json11
-rw-r--r--Translate/i18n/core/ary.json19
-rw-r--r--Translate/i18n/core/arz.json148
-rw-r--r--Translate/i18n/core/as.json151
-rw-r--r--Translate/i18n/core/ast.json364
-rw-r--r--Translate/i18n/core/atj.json14
-rw-r--r--Translate/i18n/core/av.json15
-rw-r--r--Translate/i18n/core/avk.json8
-rw-r--r--Translate/i18n/core/awa.json81
-rw-r--r--Translate/i18n/core/az.json186
-rw-r--r--Translate/i18n/core/azb.json296
-rw-r--r--Translate/i18n/core/ba.json159
-rw-r--r--Translate/i18n/core/ban-bali.json9
-rw-r--r--Translate/i18n/core/ban.json230
-rw-r--r--Translate/i18n/core/bar.json32
-rw-r--r--Translate/i18n/core/bbc-latn.json8
-rw-r--r--Translate/i18n/core/bci.json8
-rw-r--r--Translate/i18n/core/bcl.json15
-rw-r--r--Translate/i18n/core/be-tarask.json329
-rw-r--r--Translate/i18n/core/be.json454
-rw-r--r--Translate/i18n/core/bg.json344
-rw-r--r--Translate/i18n/core/bgn.json12
-rw-r--r--Translate/i18n/core/bho.json42
-rw-r--r--Translate/i18n/core/bjn.json23
-rw-r--r--Translate/i18n/core/blk.json79
-rw-r--r--Translate/i18n/core/bn.json424
-rw-r--r--Translate/i18n/core/bnn.json12
-rw-r--r--Translate/i18n/core/bo.json34
-rw-r--r--Translate/i18n/core/bpy.json8
-rw-r--r--Translate/i18n/core/bqi.json8
-rw-r--r--Translate/i18n/core/br.json331
-rw-r--r--Translate/i18n/core/bs.json340
-rw-r--r--Translate/i18n/core/btm.json8
-rw-r--r--Translate/i18n/core/bto.json8
-rw-r--r--Translate/i18n/core/bug.json13
-rw-r--r--Translate/i18n/core/bxr.json9
-rw-r--r--Translate/i18n/core/ca.json375
-rw-r--r--Translate/i18n/core/cak.json8
-rw-r--r--Translate/i18n/core/cdo.json10
-rw-r--r--Translate/i18n/core/ce.json293
-rw-r--r--Translate/i18n/core/ceb.json10
-rw-r--r--Translate/i18n/core/ch.json9
-rw-r--r--Translate/i18n/core/ckb.json259
-rw-r--r--Translate/i18n/core/cnr-latn.json8
-rw-r--r--Translate/i18n/core/cop.json8
-rw-r--r--Translate/i18n/core/cpx.json8
-rw-r--r--Translate/i18n/core/crh-latn.json14
-rw-r--r--Translate/i18n/core/cs.json351
-rw-r--r--Translate/i18n/core/csb.json10
-rw-r--r--Translate/i18n/core/cu.json19
-rw-r--r--Translate/i18n/core/cv.json36
-rw-r--r--Translate/i18n/core/cy.json201
-rw-r--r--Translate/i18n/core/da.json352
-rw-r--r--Translate/i18n/core/dag.json29
-rw-r--r--Translate/i18n/core/de-ch.json12
-rw-r--r--Translate/i18n/core/de-formal.json24
-rw-r--r--Translate/i18n/core/de.json465
-rw-r--r--Translate/i18n/core/din.json10
-rw-r--r--Translate/i18n/core/diq.json309
-rw-r--r--Translate/i18n/core/dsb.json316
-rw-r--r--Translate/i18n/core/dtp.json10
-rw-r--r--Translate/i18n/core/dty.json17
-rw-r--r--Translate/i18n/core/ee.json44
-rw-r--r--Translate/i18n/core/el.json364
-rw-r--r--Translate/i18n/core/en-gb.json13
-rw-r--r--Translate/i18n/core/en.json451
-rw-r--r--Translate/i18n/core/eo.json360
-rw-r--r--Translate/i18n/core/es.json405
-rw-r--r--Translate/i18n/core/et.json322
-rw-r--r--Translate/i18n/core/eu.json233
-rw-r--r--Translate/i18n/core/ext.json12
-rw-r--r--Translate/i18n/core/fa.json468
-rw-r--r--Translate/i18n/core/fat.json8
-rw-r--r--Translate/i18n/core/ff.json9
-rw-r--r--Translate/i18n/core/fi.json407
-rw-r--r--Translate/i18n/core/fit.json235
-rw-r--r--Translate/i18n/core/fo.json269
-rw-r--r--Translate/i18n/core/fon.json8
-rw-r--r--Translate/i18n/core/fr.json487
-rw-r--r--Translate/i18n/core/frc.json15
-rw-r--r--Translate/i18n/core/frp.json272
-rw-r--r--Translate/i18n/core/frr.json14
-rw-r--r--Translate/i18n/core/fur.json210
-rw-r--r--Translate/i18n/core/fy.json447
-rw-r--r--Translate/i18n/core/ga.json23
-rw-r--r--Translate/i18n/core/gaa.json8
-rw-r--r--Translate/i18n/core/gcr.json12
-rw-r--r--Translate/i18n/core/gd.json8
-rw-r--r--Translate/i18n/core/gl.json347
-rw-r--r--Translate/i18n/core/gld.json11
-rw-r--r--Translate/i18n/core/glk.json9
-rw-r--r--Translate/i18n/core/gom-deva.json11
-rw-r--r--Translate/i18n/core/gom-latn.json20
-rw-r--r--Translate/i18n/core/gor.json8
-rw-r--r--Translate/i18n/core/got.json8
-rw-r--r--Translate/i18n/core/gpe.json8
-rw-r--r--Translate/i18n/core/grc.json49
-rw-r--r--Translate/i18n/core/gsw.json220
-rw-r--r--Translate/i18n/core/gu.json191
-rw-r--r--Translate/i18n/core/guc.json8
-rw-r--r--Translate/i18n/core/gur.json8
-rw-r--r--Translate/i18n/core/guw.json15
-rw-r--r--Translate/i18n/core/gv.json12
-rw-r--r--Translate/i18n/core/ha.json21
-rw-r--r--Translate/i18n/core/hak.json15
-rw-r--r--Translate/i18n/core/haw.json15
-rw-r--r--Translate/i18n/core/he.json456
-rw-r--r--Translate/i18n/core/hi.json456
-rw-r--r--Translate/i18n/core/hif-latn.json8
-rw-r--r--Translate/i18n/core/hil.json10
-rw-r--r--Translate/i18n/core/hr.json401
-rw-r--r--Translate/i18n/core/hrx.json8
-rw-r--r--Translate/i18n/core/hsb.json319
-rw-r--r--Translate/i18n/core/hsn.json8
-rw-r--r--Translate/i18n/core/ht.json318
-rw-r--r--Translate/i18n/core/hu.json394
-rw-r--r--Translate/i18n/core/hy.json82
-rw-r--r--Translate/i18n/core/hyw.json34
-rw-r--r--Translate/i18n/core/ia.json423
-rw-r--r--Translate/i18n/core/id.json438
-rw-r--r--Translate/i18n/core/ie.json14
-rw-r--r--Translate/i18n/core/ig.json55
-rw-r--r--Translate/i18n/core/ilo.json314
-rw-r--r--Translate/i18n/core/inh.json29
-rw-r--r--Translate/i18n/core/io.json198
-rw-r--r--Translate/i18n/core/is.json295
-rw-r--r--Translate/i18n/core/it.json402
-rw-r--r--Translate/i18n/core/ja.json414
-rw-r--r--Translate/i18n/core/jam.json38
-rw-r--r--Translate/i18n/core/jbo.json28
-rw-r--r--Translate/i18n/core/jut.json9
-rw-r--r--Translate/i18n/core/jv.json328
-rw-r--r--Translate/i18n/core/ka.json224
-rw-r--r--Translate/i18n/core/kaa.json104
-rw-r--r--Translate/i18n/core/kab.json224
-rw-r--r--Translate/i18n/core/kbd-cyrl.json14
-rw-r--r--Translate/i18n/core/kbp.json8
-rw-r--r--Translate/i18n/core/kcg.json9
-rw-r--r--Translate/i18n/core/kea.json105
-rw-r--r--Translate/i18n/core/khw.json9
-rw-r--r--Translate/i18n/core/kiu.json19
-rw-r--r--Translate/i18n/core/kjp.json86
-rw-r--r--Translate/i18n/core/kk-arab.json34
-rw-r--r--Translate/i18n/core/kk-cyrl.json280
-rw-r--r--Translate/i18n/core/kk-latn.json36
-rw-r--r--Translate/i18n/core/kl.json11
-rw-r--r--Translate/i18n/core/km.json268
-rw-r--r--Translate/i18n/core/kn.json100
-rw-r--r--Translate/i18n/core/ko.json423
-rw-r--r--Translate/i18n/core/kr.json8
-rw-r--r--Translate/i18n/core/krc.json11
-rw-r--r--Translate/i18n/core/kri.json9
-rw-r--r--Translate/i18n/core/krl.json15
-rw-r--r--Translate/i18n/core/ks-arab.json20
-rw-r--r--Translate/i18n/core/ks-deva.json9
-rw-r--r--Translate/i18n/core/ksh.json323
-rw-r--r--Translate/i18n/core/ksw.json41
-rw-r--r--Translate/i18n/core/ku-latn.json194
-rw-r--r--Translate/i18n/core/kum.json8
-rw-r--r--Translate/i18n/core/kw.json9
-rw-r--r--Translate/i18n/core/ky.json61
-rw-r--r--Translate/i18n/core/la.json14
-rw-r--r--Translate/i18n/core/lad.json8
-rw-r--r--Translate/i18n/core/lag.json11
-rw-r--r--Translate/i18n/core/lb.json377
-rw-r--r--Translate/i18n/core/lbe.json8
-rw-r--r--Translate/i18n/core/lez.json8
-rw-r--r--Translate/i18n/core/lfn.json20
-rw-r--r--Translate/i18n/core/lg.json26
-rw-r--r--Translate/i18n/core/li.json93
-rw-r--r--Translate/i18n/core/lij.json64
-rw-r--r--Translate/i18n/core/lki.json146
-rw-r--r--Translate/i18n/core/lld.json8
-rw-r--r--Translate/i18n/core/lmo.json41
-rw-r--r--Translate/i18n/core/ln.json13
-rw-r--r--Translate/i18n/core/lo.json11
-rw-r--r--Translate/i18n/core/lrc.json70
-rw-r--r--Translate/i18n/core/lt.json312
-rw-r--r--Translate/i18n/core/ltg.json29
-rw-r--r--Translate/i18n/core/lus.json161
-rw-r--r--Translate/i18n/core/luz.json8
-rw-r--r--Translate/i18n/core/lv.json237
-rw-r--r--Translate/i18n/core/lzh.json152
-rw-r--r--Translate/i18n/core/lzz.json14
-rw-r--r--Translate/i18n/core/mad.json8
-rw-r--r--Translate/i18n/core/mag.json8
-rw-r--r--Translate/i18n/core/mai.json11
-rw-r--r--Translate/i18n/core/map-bms.json47
-rw-r--r--Translate/i18n/core/mg.json18
-rw-r--r--Translate/i18n/core/mhr.json11
-rw-r--r--Translate/i18n/core/min.json25
-rw-r--r--Translate/i18n/core/mk.json451
-rw-r--r--Translate/i18n/core/ml.json277
-rw-r--r--Translate/i18n/core/mn.json11
-rw-r--r--Translate/i18n/core/mnc.json15
-rw-r--r--Translate/i18n/core/mni.json12
-rw-r--r--Translate/i18n/core/mnw.json24
-rw-r--r--Translate/i18n/core/mo.json54
-rw-r--r--Translate/i18n/core/mos.json8
-rw-r--r--Translate/i18n/core/mr.json307
-rw-r--r--Translate/i18n/core/mrh.json12
-rw-r--r--Translate/i18n/core/ms-arab.json24
-rw-r--r--Translate/i18n/core/ms.json327
-rw-r--r--Translate/i18n/core/mt.json166
-rw-r--r--Translate/i18n/core/mui.json8
-rw-r--r--Translate/i18n/core/mwl.json18
-rw-r--r--Translate/i18n/core/my.json283
-rw-r--r--Translate/i18n/core/myv.json61
-rw-r--r--Translate/i18n/core/mzn.json8
-rw-r--r--Translate/i18n/core/nah.json48
-rw-r--r--Translate/i18n/core/nan.json13
-rw-r--r--Translate/i18n/core/nap.json12
-rw-r--r--Translate/i18n/core/nb.json454
-rw-r--r--Translate/i18n/core/nds-nl.json46
-rw-r--r--Translate/i18n/core/nds.json26
-rw-r--r--Translate/i18n/core/ne.json234
-rw-r--r--Translate/i18n/core/nia.json38
-rw-r--r--Translate/i18n/core/niu.json8
-rw-r--r--Translate/i18n/core/nl-informal.json8
-rw-r--r--Translate/i18n/core/nl.json398
-rw-r--r--Translate/i18n/core/nmz.json9
-rw-r--r--Translate/i18n/core/nn.json314
-rw-r--r--Translate/i18n/core/nod.json8
-rw-r--r--Translate/i18n/core/nqo.json11
-rw-r--r--Translate/i18n/core/nso.json17
-rw-r--r--Translate/i18n/core/ny.json8
-rw-r--r--Translate/i18n/core/nyn.json8
-rw-r--r--Translate/i18n/core/nys.json8
-rw-r--r--Translate/i18n/core/oc.json342
-rw-r--r--Translate/i18n/core/ojb.json12
-rw-r--r--Translate/i18n/core/olo.json13
-rw-r--r--Translate/i18n/core/om.json18
-rw-r--r--Translate/i18n/core/or.json100
-rw-r--r--Translate/i18n/core/os.json16
-rw-r--r--Translate/i18n/core/pa.json212
-rw-r--r--Translate/i18n/core/pam.json10
-rw-r--r--Translate/i18n/core/pap.json8
-rw-r--r--Translate/i18n/core/pcd.json10
-rw-r--r--Translate/i18n/core/pcm.json9
-rw-r--r--Translate/i18n/core/pdc.json53
-rw-r--r--Translate/i18n/core/pfl.json210
-rw-r--r--Translate/i18n/core/pl.json430
-rw-r--r--Translate/i18n/core/pms.json261
-rw-r--r--Translate/i18n/core/pnb.json83
-rw-r--r--Translate/i18n/core/prg.json8
-rw-r--r--Translate/i18n/core/ps.json227
-rw-r--r--Translate/i18n/core/pt-br.json438
-rw-r--r--Translate/i18n/core/pt.json457
-rw-r--r--Translate/i18n/core/pwn.json8
-rw-r--r--Translate/i18n/core/qqq.json487
-rw-r--r--Translate/i18n/core/qu.json259
-rw-r--r--Translate/i18n/core/rej.json8
-rw-r--r--Translate/i18n/core/rif.json10
-rw-r--r--Translate/i18n/core/rki.json8
-rw-r--r--Translate/i18n/core/rm.json33
-rw-r--r--Translate/i18n/core/rmc.json8
-rw-r--r--Translate/i18n/core/rn.json8
-rw-r--r--Translate/i18n/core/ro.json323
-rw-r--r--Translate/i18n/core/roa-tara.json417
-rw-r--r--Translate/i18n/core/rsk.json8
-rw-r--r--Translate/i18n/core/rtm.json8
-rw-r--r--Translate/i18n/core/ru.json491
-rw-r--r--Translate/i18n/core/rue.json172
-rw-r--r--Translate/i18n/core/rw.json8
-rw-r--r--Translate/i18n/core/ryu.json8
-rw-r--r--Translate/i18n/core/sa.json96
-rw-r--r--Translate/i18n/core/sah.json172
-rw-r--r--Translate/i18n/core/sat.json11
-rw-r--r--Translate/i18n/core/saz.json9
-rw-r--r--Translate/i18n/core/sc.json12
-rw-r--r--Translate/i18n/core/scn.json145
-rw-r--r--Translate/i18n/core/sco.json273
-rw-r--r--Translate/i18n/core/sd.json338
-rw-r--r--Translate/i18n/core/sdc.json24
-rw-r--r--Translate/i18n/core/sdh.json8
-rw-r--r--Translate/i18n/core/se.json23
-rw-r--r--Translate/i18n/core/ses.json8
-rw-r--r--Translate/i18n/core/sgs.json19
-rw-r--r--Translate/i18n/core/sh.json16
-rw-r--r--Translate/i18n/core/shi.json8
-rw-r--r--Translate/i18n/core/shn.json9
-rw-r--r--Translate/i18n/core/shy-latn.json10
-rw-r--r--Translate/i18n/core/si.json234
-rw-r--r--Translate/i18n/core/sje.json87
-rw-r--r--Translate/i18n/core/sk.json311
-rw-r--r--Translate/i18n/core/skr-arab.json78
-rw-r--r--Translate/i18n/core/sl.json379
-rw-r--r--Translate/i18n/core/sli.json8
-rw-r--r--Translate/i18n/core/smn.json136
-rw-r--r--Translate/i18n/core/sms.json165
-rw-r--r--Translate/i18n/core/so.json35
-rw-r--r--Translate/i18n/core/sq.json35
-rw-r--r--Translate/i18n/core/sr-ec.json400
-rw-r--r--Translate/i18n/core/sr-el.json355
-rw-r--r--Translate/i18n/core/sro.json8
-rw-r--r--Translate/i18n/core/ss.json10
-rw-r--r--Translate/i18n/core/stq.json85
-rw-r--r--Translate/i18n/core/sty.json8
-rw-r--r--Translate/i18n/core/su.json58
-rw-r--r--Translate/i18n/core/sv.json469
-rw-r--r--Translate/i18n/core/sw.json88
-rw-r--r--Translate/i18n/core/sxu.json8
-rw-r--r--Translate/i18n/core/syl.json8
-rw-r--r--Translate/i18n/core/szl.json13
-rw-r--r--Translate/i18n/core/szy.json23
-rw-r--r--Translate/i18n/core/ta.json200
-rw-r--r--Translate/i18n/core/tay.json13
-rw-r--r--Translate/i18n/core/tcy.json58
-rw-r--r--Translate/i18n/core/tdd.json9
-rw-r--r--Translate/i18n/core/te.json241
-rw-r--r--Translate/i18n/core/tet.json22
-rw-r--r--Translate/i18n/core/tg-cyrl.json166
-rw-r--r--Translate/i18n/core/tg-latn.json30
-rw-r--r--Translate/i18n/core/th.json356
-rw-r--r--Translate/i18n/core/ti.json186
-rw-r--r--Translate/i18n/core/tk.json202
-rw-r--r--Translate/i18n/core/tl.json222
-rw-r--r--Translate/i18n/core/tly.json40
-rw-r--r--Translate/i18n/core/tn.json9
-rw-r--r--Translate/i18n/core/tok.json11
-rw-r--r--Translate/i18n/core/tr.json454
-rw-r--r--Translate/i18n/core/tru.json10
-rw-r--r--Translate/i18n/core/trv.json9
-rw-r--r--Translate/i18n/core/tt-cyrl.json211
-rw-r--r--Translate/i18n/core/tt-latn.json11
-rw-r--r--Translate/i18n/core/tum.json9
-rw-r--r--Translate/i18n/core/tw.json10
-rw-r--r--Translate/i18n/core/tyv.json14
-rw-r--r--Translate/i18n/core/tzm.json27
-rw-r--r--Translate/i18n/core/udm.json16
-rw-r--r--Translate/i18n/core/ug-arab.json231
-rw-r--r--Translate/i18n/core/ug-latn.json11
-rw-r--r--Translate/i18n/core/uk.json473
-rw-r--r--Translate/i18n/core/ur.json254
-rw-r--r--Translate/i18n/core/uz.json273
-rw-r--r--Translate/i18n/core/vec.json80
-rw-r--r--Translate/i18n/core/vep.json133
-rw-r--r--Translate/i18n/core/vi.json435
-rw-r--r--Translate/i18n/core/vmw.json8
-rw-r--r--Translate/i18n/core/vo.json73
-rw-r--r--Translate/i18n/core/vro.json8
-rw-r--r--Translate/i18n/core/wa.json217
-rw-r--r--Translate/i18n/core/war.json8
-rw-r--r--Translate/i18n/core/wls.json8
-rw-r--r--Translate/i18n/core/wo.json8
-rw-r--r--Translate/i18n/core/wuu.json10
-rw-r--r--Translate/i18n/core/xal.json26
-rw-r--r--Translate/i18n/core/xh.json10
-rw-r--r--Translate/i18n/core/xmf.json156
-rw-r--r--Translate/i18n/core/xsy.json8
-rw-r--r--Translate/i18n/core/yi.json320
-rw-r--r--Translate/i18n/core/yo.json8
-rw-r--r--Translate/i18n/core/yrl.json416
-rw-r--r--Translate/i18n/core/yue.json80
-rw-r--r--Translate/i18n/core/za.json11
-rw-r--r--Translate/i18n/core/zgh.json42
-rw-r--r--Translate/i18n/core/zh-hans.json477
-rw-r--r--Translate/i18n/core/zh-hant.json437
-rw-r--r--Translate/i18n/core/zh-hk.json8
-rw-r--r--Translate/i18n/pagetranslation/abs.json8
-rw-r--r--Translate/i18n/pagetranslation/ace.json8
-rw-r--r--Translate/i18n/pagetranslation/ady-cyrl.json9
-rw-r--r--Translate/i18n/pagetranslation/aeb-latn.json8
-rw-r--r--Translate/i18n/pagetranslation/af.json79
-rw-r--r--Translate/i18n/pagetranslation/alt.json8
-rw-r--r--Translate/i18n/pagetranslation/ami.json8
-rw-r--r--Translate/i18n/pagetranslation/an.json8
-rw-r--r--Translate/i18n/pagetranslation/ang.json8
-rw-r--r--Translate/i18n/pagetranslation/ann.json9
-rw-r--r--Translate/i18n/pagetranslation/anp.json8
-rw-r--r--Translate/i18n/pagetranslation/ar.json219
-rw-r--r--Translate/i18n/pagetranslation/arc.json9
-rw-r--r--Translate/i18n/pagetranslation/arq.json8
-rw-r--r--Translate/i18n/pagetranslation/ary.json8
-rw-r--r--Translate/i18n/pagetranslation/arz.json40
-rw-r--r--Translate/i18n/pagetranslation/as.json39
-rw-r--r--Translate/i18n/pagetranslation/ast.json205
-rw-r--r--Translate/i18n/pagetranslation/atj.json12
-rw-r--r--Translate/i18n/pagetranslation/av.json16
-rw-r--r--Translate/i18n/pagetranslation/avk.json8
-rw-r--r--Translate/i18n/pagetranslation/awa.json10
-rw-r--r--Translate/i18n/pagetranslation/az.json71
-rw-r--r--Translate/i18n/pagetranslation/azb.json130
-rw-r--r--Translate/i18n/pagetranslation/ba.json28
-rw-r--r--Translate/i18n/pagetranslation/ban-bali.json8
-rw-r--r--Translate/i18n/pagetranslation/ban.json10
-rw-r--r--Translate/i18n/pagetranslation/bar.json36
-rw-r--r--Translate/i18n/pagetranslation/bbc-latn.json8
-rw-r--r--Translate/i18n/pagetranslation/bcc.json9
-rw-r--r--Translate/i18n/pagetranslation/bci.json8
-rw-r--r--Translate/i18n/pagetranslation/bcl.json82
-rw-r--r--Translate/i18n/pagetranslation/be-tarask.json226
-rw-r--r--Translate/i18n/pagetranslation/be.json272
-rw-r--r--Translate/i18n/pagetranslation/bg.json50
-rw-r--r--Translate/i18n/pagetranslation/bgn.json8
-rw-r--r--Translate/i18n/pagetranslation/bho.json8
-rw-r--r--Translate/i18n/pagetranslation/bjn.json17
-rw-r--r--Translate/i18n/pagetranslation/blk.json11
-rw-r--r--Translate/i18n/pagetranslation/bm.json11
-rw-r--r--Translate/i18n/pagetranslation/bn.json108
-rw-r--r--Translate/i18n/pagetranslation/bo.json20
-rw-r--r--Translate/i18n/pagetranslation/bqi.json8
-rw-r--r--Translate/i18n/pagetranslation/br.json126
-rw-r--r--Translate/i18n/pagetranslation/bs.json203
-rw-r--r--Translate/i18n/pagetranslation/btm.json8
-rw-r--r--Translate/i18n/pagetranslation/bug.json8
-rw-r--r--Translate/i18n/pagetranslation/bxr.json8
-rw-r--r--Translate/i18n/pagetranslation/ca.json142
-rw-r--r--Translate/i18n/pagetranslation/cdo.json8
-rw-r--r--Translate/i18n/pagetranslation/ce.json57
-rw-r--r--Translate/i18n/pagetranslation/ceb.json8
-rw-r--r--Translate/i18n/pagetranslation/ckb.json38
-rw-r--r--Translate/i18n/pagetranslation/cnr-latn.json8
-rw-r--r--Translate/i18n/pagetranslation/co.json8
-rw-r--r--Translate/i18n/pagetranslation/crh-latn.json21
-rw-r--r--Translate/i18n/pagetranslation/cs.json139
-rw-r--r--Translate/i18n/pagetranslation/csb.json8
-rw-r--r--Translate/i18n/pagetranslation/cu.json14
-rw-r--r--Translate/i18n/pagetranslation/cy.json52
-rw-r--r--Translate/i18n/pagetranslation/da.json183
-rw-r--r--Translate/i18n/pagetranslation/dag.json8
-rw-r--r--Translate/i18n/pagetranslation/de-formal.json16
-rw-r--r--Translate/i18n/pagetranslation/de.json277
-rw-r--r--Translate/i18n/pagetranslation/din.json8
-rw-r--r--Translate/i18n/pagetranslation/diq.json52
-rw-r--r--Translate/i18n/pagetranslation/dsb.json141
-rw-r--r--Translate/i18n/pagetranslation/dty.json8
-rw-r--r--Translate/i18n/pagetranslation/ee.json9
-rw-r--r--Translate/i18n/pagetranslation/el.json214
-rw-r--r--Translate/i18n/pagetranslation/en-gb.json12
-rw-r--r--Translate/i18n/pagetranslation/en.json269
-rw-r--r--Translate/i18n/pagetranslation/eo.json121
-rw-r--r--Translate/i18n/pagetranslation/es.json240
-rw-r--r--Translate/i18n/pagetranslation/et.json162
-rw-r--r--Translate/i18n/pagetranslation/eu.json46
-rw-r--r--Translate/i18n/pagetranslation/fa.json275
-rw-r--r--Translate/i18n/pagetranslation/ff.json9
-rw-r--r--Translate/i18n/pagetranslation/fi.json226
-rw-r--r--Translate/i18n/pagetranslation/fit.json28
-rw-r--r--Translate/i18n/pagetranslation/fo.json12
-rw-r--r--Translate/i18n/pagetranslation/fr.json297
-rw-r--r--Translate/i18n/pagetranslation/frp.json105
-rw-r--r--Translate/i18n/pagetranslation/frr.json8
-rw-r--r--Translate/i18n/pagetranslation/fur.json26
-rw-r--r--Translate/i18n/pagetranslation/fy.json266
-rw-r--r--Translate/i18n/pagetranslation/ga.json13
-rw-r--r--Translate/i18n/pagetranslation/gaa.json8
-rw-r--r--Translate/i18n/pagetranslation/gcr.json8
-rw-r--r--Translate/i18n/pagetranslation/gd.json8
-rw-r--r--Translate/i18n/pagetranslation/gl.json203
-rw-r--r--Translate/i18n/pagetranslation/gld.json8
-rw-r--r--Translate/i18n/pagetranslation/glk.json8
-rw-r--r--Translate/i18n/pagetranslation/gn.json8
-rw-r--r--Translate/i18n/pagetranslation/gom-deva.json8
-rw-r--r--Translate/i18n/pagetranslation/gom-latn.json15
-rw-r--r--Translate/i18n/pagetranslation/gor.json8
-rw-r--r--Translate/i18n/pagetranslation/got.json8
-rw-r--r--Translate/i18n/pagetranslation/grc.json9
-rw-r--r--Translate/i18n/pagetranslation/gsw.json127
-rw-r--r--Translate/i18n/pagetranslation/gu.json42
-rw-r--r--Translate/i18n/pagetranslation/guc.json8
-rw-r--r--Translate/i18n/pagetranslation/gur.json8
-rw-r--r--Translate/i18n/pagetranslation/guw.json8
-rw-r--r--Translate/i18n/pagetranslation/gv.json8
-rw-r--r--Translate/i18n/pagetranslation/ha.json18
-rw-r--r--Translate/i18n/pagetranslation/hak.json8
-rw-r--r--Translate/i18n/pagetranslation/he.json275
-rw-r--r--Translate/i18n/pagetranslation/hi.json270
-rw-r--r--Translate/i18n/pagetranslation/hif-latn.json8
-rw-r--r--Translate/i18n/pagetranslation/hr.json105
-rw-r--r--Translate/i18n/pagetranslation/hrx.json8
-rw-r--r--Translate/i18n/pagetranslation/hsb.json143
-rw-r--r--Translate/i18n/pagetranslation/hsn.json8
-rw-r--r--Translate/i18n/pagetranslation/ht.json62
-rw-r--r--Translate/i18n/pagetranslation/hu.json236
-rw-r--r--Translate/i18n/pagetranslation/hy.json19
-rw-r--r--Translate/i18n/pagetranslation/hyw.json10
-rw-r--r--Translate/i18n/pagetranslation/ia.json249
-rw-r--r--Translate/i18n/pagetranslation/id.json265
-rw-r--r--Translate/i18n/pagetranslation/ie.json14
-rw-r--r--Translate/i18n/pagetranslation/ig.json24
-rw-r--r--Translate/i18n/pagetranslation/ilo.json8
-rw-r--r--Translate/i18n/pagetranslation/inh.json11
-rw-r--r--Translate/i18n/pagetranslation/io.json43
-rw-r--r--Translate/i18n/pagetranslation/is.json185
-rw-r--r--Translate/i18n/pagetranslation/it.json227
-rw-r--r--Translate/i18n/pagetranslation/ja.json252
-rw-r--r--Translate/i18n/pagetranslation/jam.json32
-rw-r--r--Translate/i18n/pagetranslation/jbo.json15
-rw-r--r--Translate/i18n/pagetranslation/jut.json8
-rw-r--r--Translate/i18n/pagetranslation/jv.json164
-rw-r--r--Translate/i18n/pagetranslation/ka.json101
-rw-r--r--Translate/i18n/pagetranslation/kab.json61
-rw-r--r--Translate/i18n/pagetranslation/kbd-cyrl.json11
-rw-r--r--Translate/i18n/pagetranslation/kbp.json8
-rw-r--r--Translate/i18n/pagetranslation/kcg.json9
-rw-r--r--Translate/i18n/pagetranslation/khw.json8
-rw-r--r--Translate/i18n/pagetranslation/kiu.json10
-rw-r--r--Translate/i18n/pagetranslation/kjp.json16
-rw-r--r--Translate/i18n/pagetranslation/kk-cyrl.json126
-rw-r--r--Translate/i18n/pagetranslation/km.json32
-rw-r--r--Translate/i18n/pagetranslation/kn.json35
-rw-r--r--Translate/i18n/pagetranslation/ko.json219
-rw-r--r--Translate/i18n/pagetranslation/krc.json9
-rw-r--r--Translate/i18n/pagetranslation/krl.json10
-rw-r--r--Translate/i18n/pagetranslation/ks-arab.json8
-rw-r--r--Translate/i18n/pagetranslation/ks-deva.json8
-rw-r--r--Translate/i18n/pagetranslation/ksh.json194
-rw-r--r--Translate/i18n/pagetranslation/ksw.json8
-rw-r--r--Translate/i18n/pagetranslation/ku-latn.json59
-rw-r--r--Translate/i18n/pagetranslation/kum.json8
-rw-r--r--Translate/i18n/pagetranslation/kw.json8
-rw-r--r--Translate/i18n/pagetranslation/ky.json23
-rw-r--r--Translate/i18n/pagetranslation/lad.json8
-rw-r--r--Translate/i18n/pagetranslation/lag.json10
-rw-r--r--Translate/i18n/pagetranslation/lb.json196
-rw-r--r--Translate/i18n/pagetranslation/lbe.json8
-rw-r--r--Translate/i18n/pagetranslation/lfn.json11
-rw-r--r--Translate/i18n/pagetranslation/lg.json9
-rw-r--r--Translate/i18n/pagetranslation/li.json8
-rw-r--r--Translate/i18n/pagetranslation/lij.json8
-rw-r--r--Translate/i18n/pagetranslation/lki.json65
-rw-r--r--Translate/i18n/pagetranslation/lld.json8
-rw-r--r--Translate/i18n/pagetranslation/lmo.json8
-rw-r--r--Translate/i18n/pagetranslation/lo.json10
-rw-r--r--Translate/i18n/pagetranslation/lrc.json17
-rw-r--r--Translate/i18n/pagetranslation/lt.json144
-rw-r--r--Translate/i18n/pagetranslation/ltg.json11
-rw-r--r--Translate/i18n/pagetranslation/luz.json8
-rw-r--r--Translate/i18n/pagetranslation/lv.json58
-rw-r--r--Translate/i18n/pagetranslation/lzh.json12
-rw-r--r--Translate/i18n/pagetranslation/lzz.json8
-rw-r--r--Translate/i18n/pagetranslation/mad.json8
-rw-r--r--Translate/i18n/pagetranslation/mai.json8
-rw-r--r--Translate/i18n/pagetranslation/mg.json9
-rw-r--r--Translate/i18n/pagetranslation/min.json11
-rw-r--r--Translate/i18n/pagetranslation/mk.json267
-rw-r--r--Translate/i18n/pagetranslation/ml.json66
-rw-r--r--Translate/i18n/pagetranslation/mn.json11
-rw-r--r--Translate/i18n/pagetranslation/mnc.json8
-rw-r--r--Translate/i18n/pagetranslation/mni.json8
-rw-r--r--Translate/i18n/pagetranslation/mnw.json8
-rw-r--r--Translate/i18n/pagetranslation/mo.json8
-rw-r--r--Translate/i18n/pagetranslation/mr.json122
-rw-r--r--Translate/i18n/pagetranslation/mrh.json13
-rw-r--r--Translate/i18n/pagetranslation/ms-arab.json26
-rw-r--r--Translate/i18n/pagetranslation/ms.json160
-rw-r--r--Translate/i18n/pagetranslation/mt.json21
-rw-r--r--Translate/i18n/pagetranslation/mwl.json10
-rw-r--r--Translate/i18n/pagetranslation/my.json112
-rw-r--r--Translate/i18n/pagetranslation/myv.json15
-rw-r--r--Translate/i18n/pagetranslation/mzn.json8
-rw-r--r--Translate/i18n/pagetranslation/nah.json14
-rw-r--r--Translate/i18n/pagetranslation/nan.json8
-rw-r--r--Translate/i18n/pagetranslation/nap.json10
-rw-r--r--Translate/i18n/pagetranslation/nb.json271
-rw-r--r--Translate/i18n/pagetranslation/nds-nl.json12
-rw-r--r--Translate/i18n/pagetranslation/ne.json32
-rw-r--r--Translate/i18n/pagetranslation/nia.json8
-rw-r--r--Translate/i18n/pagetranslation/nl.json232
-rw-r--r--Translate/i18n/pagetranslation/nn.json101
-rw-r--r--Translate/i18n/pagetranslation/nqo.json12
-rw-r--r--Translate/i18n/pagetranslation/nys.json8
-rw-r--r--Translate/i18n/pagetranslation/oc.json63
-rw-r--r--Translate/i18n/pagetranslation/ojb.json8
-rw-r--r--Translate/i18n/pagetranslation/olo.json8
-rw-r--r--Translate/i18n/pagetranslation/om.json8
-rw-r--r--Translate/i18n/pagetranslation/or.json20
-rw-r--r--Translate/i18n/pagetranslation/pa.json14
-rw-r--r--Translate/i18n/pagetranslation/pam.json13
-rw-r--r--Translate/i18n/pagetranslation/pap.json8
-rw-r--r--Translate/i18n/pagetranslation/pcd.json8
-rw-r--r--Translate/i18n/pagetranslation/pdc.json14
-rw-r--r--Translate/i18n/pagetranslation/pfl.json124
-rw-r--r--Translate/i18n/pagetranslation/pl.json255
-rw-r--r--Translate/i18n/pagetranslation/pms.json126
-rw-r--r--Translate/i18n/pagetranslation/pnb.json19
-rw-r--r--Translate/i18n/pagetranslation/prg.json8
-rw-r--r--Translate/i18n/pagetranslation/ps.json69
-rw-r--r--Translate/i18n/pagetranslation/pt-br.json249
-rw-r--r--Translate/i18n/pagetranslation/pt.json276
-rw-r--r--Translate/i18n/pagetranslation/pwn.json8
-rw-r--r--Translate/i18n/pagetranslation/qqq.json295
-rw-r--r--Translate/i18n/pagetranslation/qu.json11
-rw-r--r--Translate/i18n/pagetranslation/rej.json8
-rw-r--r--Translate/i18n/pagetranslation/rm.json14
-rw-r--r--Translate/i18n/pagetranslation/rmc.json8
-rw-r--r--Translate/i18n/pagetranslation/ro.json97
-rw-r--r--Translate/i18n/pagetranslation/roa-tara.json118
-rw-r--r--Translate/i18n/pagetranslation/ru.json290
-rw-r--r--Translate/i18n/pagetranslation/rue.json27
-rw-r--r--Translate/i18n/pagetranslation/rw.json8
-rw-r--r--Translate/i18n/pagetranslation/ryu.json8
-rw-r--r--Translate/i18n/pagetranslation/sa.json40
-rw-r--r--Translate/i18n/pagetranslation/sah.json26
-rw-r--r--Translate/i18n/pagetranslation/sat.json9
-rw-r--r--Translate/i18n/pagetranslation/saz.json9
-rw-r--r--Translate/i18n/pagetranslation/sc.json9
-rw-r--r--Translate/i18n/pagetranslation/scn.json65
-rw-r--r--Translate/i18n/pagetranslation/sco.json138
-rw-r--r--Translate/i18n/pagetranslation/sd.json28
-rw-r--r--Translate/i18n/pagetranslation/sdc.json8
-rw-r--r--Translate/i18n/pagetranslation/sdh.json8
-rw-r--r--Translate/i18n/pagetranslation/se.json8
-rw-r--r--Translate/i18n/pagetranslation/ses.json8
-rw-r--r--Translate/i18n/pagetranslation/sgs.json8
-rw-r--r--Translate/i18n/pagetranslation/sh.json13
-rw-r--r--Translate/i18n/pagetranslation/shi.json9
-rw-r--r--Translate/i18n/pagetranslation/shn.json9
-rw-r--r--Translate/i18n/pagetranslation/shy-latn.json8
-rw-r--r--Translate/i18n/pagetranslation/si.json114
-rw-r--r--Translate/i18n/pagetranslation/sje.json11
-rw-r--r--Translate/i18n/pagetranslation/sk.json47
-rw-r--r--Translate/i18n/pagetranslation/skr-arab.json26
-rw-r--r--Translate/i18n/pagetranslation/sl.json269
-rw-r--r--Translate/i18n/pagetranslation/sli.json8
-rw-r--r--Translate/i18n/pagetranslation/smn.json30
-rw-r--r--Translate/i18n/pagetranslation/sms.json45
-rw-r--r--Translate/i18n/pagetranslation/so.json9
-rw-r--r--Translate/i18n/pagetranslation/sq.json17
-rw-r--r--Translate/i18n/pagetranslation/sr-ec.json183
-rw-r--r--Translate/i18n/pagetranslation/sr-el.json156
-rw-r--r--Translate/i18n/pagetranslation/stq.json8
-rw-r--r--Translate/i18n/pagetranslation/sty.json8
-rw-r--r--Translate/i18n/pagetranslation/su.json26
-rw-r--r--Translate/i18n/pagetranslation/sv.json241
-rw-r--r--Translate/i18n/pagetranslation/sw.json16
-rw-r--r--Translate/i18n/pagetranslation/sxu.json8
-rw-r--r--Translate/i18n/pagetranslation/szl.json9
-rw-r--r--Translate/i18n/pagetranslation/szy.json11
-rw-r--r--Translate/i18n/pagetranslation/ta.json92
-rw-r--r--Translate/i18n/pagetranslation/tay.json8
-rw-r--r--Translate/i18n/pagetranslation/tcy.json46
-rw-r--r--Translate/i18n/pagetranslation/te.json54
-rw-r--r--Translate/i18n/pagetranslation/tg-cyrl.json13
-rw-r--r--Translate/i18n/pagetranslation/th.json76
-rw-r--r--Translate/i18n/pagetranslation/ti.json21
-rw-r--r--Translate/i18n/pagetranslation/tk.json32
-rw-r--r--Translate/i18n/pagetranslation/tl.json132
-rw-r--r--Translate/i18n/pagetranslation/tly.json13
-rw-r--r--Translate/i18n/pagetranslation/tr.json271
-rw-r--r--Translate/i18n/pagetranslation/trv.json8
-rw-r--r--Translate/i18n/pagetranslation/tt-cyrl.json42
-rw-r--r--Translate/i18n/pagetranslation/tw.json8
-rw-r--r--Translate/i18n/pagetranslation/tzm.json19
-rw-r--r--Translate/i18n/pagetranslation/udm.json8
-rw-r--r--Translate/i18n/pagetranslation/ug-arab.json72
-rw-r--r--Translate/i18n/pagetranslation/uk.json282
-rw-r--r--Translate/i18n/pagetranslation/ur.json78
-rw-r--r--Translate/i18n/pagetranslation/uz.json15
-rw-r--r--Translate/i18n/pagetranslation/vec.json11
-rw-r--r--Translate/i18n/pagetranslation/vep.json36
-rw-r--r--Translate/i18n/pagetranslation/vi.json201
-rw-r--r--Translate/i18n/pagetranslation/vmw.json8
-rw-r--r--Translate/i18n/pagetranslation/vo.json11
-rw-r--r--Translate/i18n/pagetranslation/vro.json8
-rw-r--r--Translate/i18n/pagetranslation/wa.json8
-rw-r--r--Translate/i18n/pagetranslation/war.json8
-rw-r--r--Translate/i18n/pagetranslation/wls.json8
-rw-r--r--Translate/i18n/pagetranslation/wo.json8
-rw-r--r--Translate/i18n/pagetranslation/wuu.json9
-rw-r--r--Translate/i18n/pagetranslation/xmf.json41
-rw-r--r--Translate/i18n/pagetranslation/xsy.json8
-rw-r--r--Translate/i18n/pagetranslation/yi.json131
-rw-r--r--Translate/i18n/pagetranslation/yo.json9
-rw-r--r--Translate/i18n/pagetranslation/yrl.json108
-rw-r--r--Translate/i18n/pagetranslation/yue.json11
-rw-r--r--Translate/i18n/pagetranslation/zgh.json11
-rw-r--r--Translate/i18n/pagetranslation/zh-hans.json289
-rw-r--r--Translate/i18n/pagetranslation/zh-hant.json243
-rw-r--r--Translate/i18n/pagetranslation/zh-hk.json9
-rw-r--r--Translate/i18n/sandbox/af.json16
-rw-r--r--Translate/i18n/sandbox/ar.json55
-rw-r--r--Translate/i18n/sandbox/ast.json52
-rw-r--r--Translate/i18n/sandbox/ban.json8
-rw-r--r--Translate/i18n/sandbox/be.json53
-rw-r--r--Translate/i18n/sandbox/bg.json17
-rw-r--r--Translate/i18n/sandbox/blk.json10
-rw-r--r--Translate/i18n/sandbox/bn.json51
-rw-r--r--Translate/i18n/sandbox/br.json14
-rw-r--r--Translate/i18n/sandbox/bs.json53
-rw-r--r--Translate/i18n/sandbox/ce.json41
-rw-r--r--Translate/i18n/sandbox/ckb.json8
-rw-r--r--Translate/i18n/sandbox/cs.json19
-rw-r--r--Translate/i18n/sandbox/cy.json30
-rw-r--r--Translate/i18n/sandbox/da.json24
-rw-r--r--Translate/i18n/sandbox/de-ch.json8
-rw-r--r--Translate/i18n/sandbox/de.json56
-rw-r--r--Translate/i18n/sandbox/diq.json28
-rw-r--r--Translate/i18n/sandbox/dsb.json51
-rw-r--r--Translate/i18n/sandbox/el.json18
-rw-r--r--Translate/i18n/sandbox/en-gb.json8
-rw-r--r--Translate/i18n/sandbox/en.json56
-rw-r--r--Translate/i18n/sandbox/eo.json18
-rw-r--r--Translate/i18n/sandbox/es.json54
-rw-r--r--Translate/i18n/sandbox/et.json10
-rw-r--r--Translate/i18n/sandbox/eu.json26
-rw-r--r--Translate/i18n/sandbox/fa.json61
-rw-r--r--Translate/i18n/sandbox/fi.json56
-rw-r--r--Translate/i18n/sandbox/fit.json12
-rw-r--r--Translate/i18n/sandbox/fr.json66
-rw-r--r--Translate/i18n/sandbox/fy.json54
-rw-r--r--Translate/i18n/sandbox/gl.json54
-rw-r--r--Translate/i18n/sandbox/gu.json33
-rw-r--r--Translate/i18n/sandbox/he.json52
-rw-r--r--Translate/i18n/sandbox/hi.json55
-rw-r--r--Translate/i18n/sandbox/hr.json14
-rw-r--r--Translate/i18n/sandbox/hsb.json50
-rw-r--r--Translate/i18n/sandbox/hu.json46
-rw-r--r--Translate/i18n/sandbox/hy.json9
-rw-r--r--Translate/i18n/sandbox/hyw.json8
-rw-r--r--Translate/i18n/sandbox/ia.json52
-rw-r--r--Translate/i18n/sandbox/id.json52
-rw-r--r--Translate/i18n/sandbox/ie.json8
-rw-r--r--Translate/i18n/sandbox/io.json10
-rw-r--r--Translate/i18n/sandbox/is.json14
-rw-r--r--Translate/i18n/sandbox/it.json51
-rw-r--r--Translate/i18n/sandbox/ja.json55
-rw-r--r--Translate/i18n/sandbox/ka.json38
-rw-r--r--Translate/i18n/sandbox/kaa.json8
-rw-r--r--Translate/i18n/sandbox/kab.json29
-rw-r--r--Translate/i18n/sandbox/kjp.json9
-rw-r--r--Translate/i18n/sandbox/kk-cyrl.json37
-rw-r--r--Translate/i18n/sandbox/km.json9
-rw-r--r--Translate/i18n/sandbox/ko.json59
-rw-r--r--Translate/i18n/sandbox/ksh.json51
-rw-r--r--Translate/i18n/sandbox/ksw.json11
-rw-r--r--Translate/i18n/sandbox/ku-latn.json12
-rw-r--r--Translate/i18n/sandbox/lag.json9
-rw-r--r--Translate/i18n/sandbox/lb.json48
-rw-r--r--Translate/i18n/sandbox/lki.json39
-rw-r--r--Translate/i18n/sandbox/lrc.json16
-rw-r--r--Translate/i18n/sandbox/lt.json46
-rw-r--r--Translate/i18n/sandbox/lv.json12
-rw-r--r--Translate/i18n/sandbox/mk.json52
-rw-r--r--Translate/i18n/sandbox/mnw.json8
-rw-r--r--Translate/i18n/sandbox/mr.json53
-rw-r--r--Translate/i18n/sandbox/ms.json51
-rw-r--r--Translate/i18n/sandbox/mt.json10
-rw-r--r--Translate/i18n/sandbox/my.json47
-rw-r--r--Translate/i18n/sandbox/nb.json53
-rw-r--r--Translate/i18n/sandbox/ne.json14
-rw-r--r--Translate/i18n/sandbox/nl.json58
-rw-r--r--Translate/i18n/sandbox/oc.json17
-rw-r--r--Translate/i18n/sandbox/pl.json46
-rw-r--r--Translate/i18n/sandbox/pnb.json8
-rw-r--r--Translate/i18n/sandbox/ps.json34
-rw-r--r--Translate/i18n/sandbox/pt-br.json55
-rw-r--r--Translate/i18n/sandbox/pt.json56
-rw-r--r--Translate/i18n/sandbox/qqq.json60
-rw-r--r--Translate/i18n/sandbox/qu.json8
-rw-r--r--Translate/i18n/sandbox/ro.json32
-rw-r--r--Translate/i18n/sandbox/roa-tara.json52
-rw-r--r--Translate/i18n/sandbox/ru.json58
-rw-r--r--Translate/i18n/sandbox/sa.json13
-rw-r--r--Translate/i18n/sandbox/sah.json8
-rw-r--r--Translate/i18n/sandbox/scn.json13
-rw-r--r--Translate/i18n/sandbox/sco.json48
-rw-r--r--Translate/i18n/sandbox/sd.json40
-rw-r--r--Translate/i18n/sandbox/se.json8
-rw-r--r--Translate/i18n/sandbox/sh.json33
-rw-r--r--Translate/i18n/sandbox/sk.json13
-rw-r--r--Translate/i18n/sandbox/skr-arab.json10
-rw-r--r--Translate/i18n/sandbox/sl.json9
-rw-r--r--Translate/i18n/sandbox/smn.json11
-rw-r--r--Translate/i18n/sandbox/sms.json12
-rw-r--r--Translate/i18n/sandbox/sq.json8
-rw-r--r--Translate/i18n/sandbox/sr-ec.json27
-rw-r--r--Translate/i18n/sandbox/sr-el.json17
-rw-r--r--Translate/i18n/sandbox/sv.json56
-rw-r--r--Translate/i18n/sandbox/sw.json8
-rw-r--r--Translate/i18n/sandbox/ta.json8
-rw-r--r--Translate/i18n/sandbox/tcy.json19
-rw-r--r--Translate/i18n/sandbox/te.json9
-rw-r--r--Translate/i18n/sandbox/th.json19
-rw-r--r--Translate/i18n/sandbox/ti.json12
-rw-r--r--Translate/i18n/sandbox/tok.json8
-rw-r--r--Translate/i18n/sandbox/tr.json54
-rw-r--r--Translate/i18n/sandbox/tt-cyrl.json25
-rw-r--r--Translate/i18n/sandbox/tyv.json8
-rw-r--r--Translate/i18n/sandbox/uk.json60
-rw-r--r--Translate/i18n/sandbox/vi.json54
-rw-r--r--Translate/i18n/sandbox/wa.json8
-rw-r--r--Translate/i18n/sandbox/yi.json16
-rw-r--r--Translate/i18n/sandbox/yo.json8
-rw-r--r--Translate/i18n/sandbox/zh-hans.json62
-rw-r--r--Translate/i18n/sandbox/zh-hant.json60
-rw-r--r--Translate/i18n/search/af.json8
-rw-r--r--Translate/i18n/search/ar.json36
-rw-r--r--Translate/i18n/search/ary.json32
-rw-r--r--Translate/i18n/search/as.json8
-rw-r--r--Translate/i18n/search/ast.json32
-rw-r--r--Translate/i18n/search/atj.json8
-rw-r--r--Translate/i18n/search/az.json22
-rw-r--r--Translate/i18n/search/azb.json12
-rw-r--r--Translate/i18n/search/be-tarask.json21
-rw-r--r--Translate/i18n/search/be.json33
-rw-r--r--Translate/i18n/search/bg.json26
-rw-r--r--Translate/i18n/search/bjn.json8
-rw-r--r--Translate/i18n/search/blk.json10
-rw-r--r--Translate/i18n/search/bn.json36
-rw-r--r--Translate/i18n/search/br.json34
-rw-r--r--Translate/i18n/search/bs.json32
-rw-r--r--Translate/i18n/search/ca.json32
-rw-r--r--Translate/i18n/search/ce.json30
-rw-r--r--Translate/i18n/search/ckb.json13
-rw-r--r--Translate/i18n/search/cs.json31
-rw-r--r--Translate/i18n/search/cu.json9
-rw-r--r--Translate/i18n/search/cv.json8
-rw-r--r--Translate/i18n/search/da.json29
-rw-r--r--Translate/i18n/search/de.json32
-rw-r--r--Translate/i18n/search/diq.json37
-rw-r--r--Translate/i18n/search/dsb.json20
-rw-r--r--Translate/i18n/search/ee.json9
-rw-r--r--Translate/i18n/search/el.json31
-rw-r--r--Translate/i18n/search/en.json32
-rw-r--r--Translate/i18n/search/eo.json34
-rw-r--r--Translate/i18n/search/es.json35
-rw-r--r--Translate/i18n/search/et.json27
-rw-r--r--Translate/i18n/search/eu.json21
-rw-r--r--Translate/i18n/search/fa.json36
-rw-r--r--Translate/i18n/search/fi.json33
-rw-r--r--Translate/i18n/search/fit.json22
-rw-r--r--Translate/i18n/search/fo.json20
-rw-r--r--Translate/i18n/search/fr.json41
-rw-r--r--Translate/i18n/search/fy.json34
-rw-r--r--Translate/i18n/search/gcr.json8
-rw-r--r--Translate/i18n/search/gl.json32
-rw-r--r--Translate/i18n/search/gom-deva.json8
-rw-r--r--Translate/i18n/search/gom-latn.json8
-rw-r--r--Translate/i18n/search/gu.json21
-rw-r--r--Translate/i18n/search/he.json32
-rw-r--r--Translate/i18n/search/hi.json35
-rw-r--r--Translate/i18n/search/hr.json30
-rw-r--r--Translate/i18n/search/hsb.json22
-rw-r--r--Translate/i18n/search/hu.json30
-rw-r--r--Translate/i18n/search/hy.json16
-rw-r--r--Translate/i18n/search/ia.json32
-rw-r--r--Translate/i18n/search/id.json32
-rw-r--r--Translate/i18n/search/ig.json8
-rw-r--r--Translate/i18n/search/ilo.json20
-rw-r--r--Translate/i18n/search/inh.json11
-rw-r--r--Translate/i18n/search/io.json21
-rw-r--r--Translate/i18n/search/is.json30
-rw-r--r--Translate/i18n/search/it.json35
-rw-r--r--Translate/i18n/search/ja.json36
-rw-r--r--Translate/i18n/search/ka.json21
-rw-r--r--Translate/i18n/search/kaa.json8
-rw-r--r--Translate/i18n/search/kab.json29
-rw-r--r--Translate/i18n/search/kea.json32
-rw-r--r--Translate/i18n/search/kiu.json11
-rw-r--r--Translate/i18n/search/kjp.json19
-rw-r--r--Translate/i18n/search/kk-cyrl.json31
-rw-r--r--Translate/i18n/search/km.json30
-rw-r--r--Translate/i18n/search/kn.json12
-rw-r--r--Translate/i18n/search/ko.json35
-rw-r--r--Translate/i18n/search/krc.json9
-rw-r--r--Translate/i18n/search/krl.json10
-rw-r--r--Translate/i18n/search/ksh.json31
-rw-r--r--Translate/i18n/search/ksw.json15
-rw-r--r--Translate/i18n/search/ku-latn.json22
-rw-r--r--Translate/i18n/search/lag.json10
-rw-r--r--Translate/i18n/search/lb.json30
-rw-r--r--Translate/i18n/search/lfn.json8
-rw-r--r--Translate/i18n/search/lki.json24
-rw-r--r--Translate/i18n/search/lkt.json8
-rw-r--r--Translate/i18n/search/lrc.json17
-rw-r--r--Translate/i18n/search/lt.json28
-rw-r--r--Translate/i18n/search/lv.json15
-rw-r--r--Translate/i18n/search/lzh.json8
-rw-r--r--Translate/i18n/search/mk.json32
-rw-r--r--Translate/i18n/search/mnw.json9
-rw-r--r--Translate/i18n/search/mr.json29
-rw-r--r--Translate/i18n/search/ms.json20
-rw-r--r--Translate/i18n/search/mt.json8
-rw-r--r--Translate/i18n/search/mwl.json9
-rw-r--r--Translate/i18n/search/my.json31
-rw-r--r--Translate/i18n/search/nah.json10
-rw-r--r--Translate/i18n/search/nb.json33
-rw-r--r--Translate/i18n/search/ne.json36
-rw-r--r--Translate/i18n/search/nl.json36
-rw-r--r--Translate/i18n/search/nn.json29
-rw-r--r--Translate/i18n/search/oc.json24
-rw-r--r--Translate/i18n/search/olo.json10
-rw-r--r--Translate/i18n/search/om.json9
-rw-r--r--Translate/i18n/search/pl.json37
-rw-r--r--Translate/i18n/search/pms.json17
-rw-r--r--Translate/i18n/search/pnb.json9
-rw-r--r--Translate/i18n/search/ps.json22
-rw-r--r--Translate/i18n/search/pt-br.json36
-rw-r--r--Translate/i18n/search/pt.json37
-rw-r--r--Translate/i18n/search/qqq.json38
-rw-r--r--Translate/i18n/search/qu.json12
-rw-r--r--Translate/i18n/search/ro.json21
-rw-r--r--Translate/i18n/search/roa-tara.json32
-rw-r--r--Translate/i18n/search/ru.json39
-rw-r--r--Translate/i18n/search/rue.json8
-rw-r--r--Translate/i18n/search/sa.json11
-rw-r--r--Translate/i18n/search/scn.json15
-rw-r--r--Translate/i18n/search/sco.json20
-rw-r--r--Translate/i18n/search/sd.json32
-rw-r--r--Translate/i18n/search/se.json9
-rw-r--r--Translate/i18n/search/shn.json8
-rw-r--r--Translate/i18n/search/shy-latn.json8
-rw-r--r--Translate/i18n/search/sk.json31
-rw-r--r--Translate/i18n/search/sl.json31
-rw-r--r--Translate/i18n/search/smj.json8
-rw-r--r--Translate/i18n/search/smn.json21
-rw-r--r--Translate/i18n/search/sms.json17
-rw-r--r--Translate/i18n/search/sq.json8
-rw-r--r--Translate/i18n/search/sr-ec.json37
-rw-r--r--Translate/i18n/search/sr-el.json26
-rw-r--r--Translate/i18n/search/sv.json34
-rw-r--r--Translate/i18n/search/szy.json11
-rw-r--r--Translate/i18n/search/tay.json8
-rw-r--r--Translate/i18n/search/tcy.json11
-rw-r--r--Translate/i18n/search/te.json12
-rw-r--r--Translate/i18n/search/tg-cyrl.json9
-rw-r--r--Translate/i18n/search/th.json26
-rw-r--r--Translate/i18n/search/ti.json23
-rw-r--r--Translate/i18n/search/tr.json39
-rw-r--r--Translate/i18n/search/tt-cyrl.json19
-rw-r--r--Translate/i18n/search/udm.json8
-rw-r--r--Translate/i18n/search/uk.json36
-rw-r--r--Translate/i18n/search/uz.json25
-rw-r--r--Translate/i18n/search/vec.json9
-rw-r--r--Translate/i18n/search/vi.json31
-rw-r--r--Translate/i18n/search/wa.json8
-rw-r--r--Translate/i18n/search/xmf.json26
-rw-r--r--Translate/i18n/search/yi.json30
-rw-r--r--Translate/i18n/search/yue.json8
-rw-r--r--Translate/i18n/search/zgh.json19
-rw-r--r--Translate/i18n/search/zh-hans.json37
-rw-r--r--Translate/i18n/search/zh-hant.json35
-rw-r--r--Translate/messagegroups/AggregateMessageGroup.php172
-rw-r--r--Translate/messagegroups/FileBasedMessageGroup.php292
-rw-r--r--Translate/messagegroups/MediaWikiExtensionMessageGroup.php40
-rw-r--r--Translate/messagegroups/MessageGroup.php164
-rw-r--r--Translate/messagegroups/MessageGroupBase.php346
-rw-r--r--Translate/messagegroups/MessageGroupOld.php321
-rw-r--r--Translate/messagegroups/RecentAdditionsMessageGroup.php49
-rw-r--r--Translate/messagegroups/RecentMessageGroup.php155
-rw-r--r--Translate/messagegroups/SandboxMessageGroup.php157
-rw-r--r--Translate/messagegroups/WikiMessageGroup.php86
-rw-r--r--Translate/messagegroups/WikiPageMessageGroup.php208
-rw-r--r--Translate/messagegroups/WorkflowStatesMessageGroup.php75
-rw-r--r--Translate/messagegroups/loaders/AggregateMessageGroupLoader.php161
-rw-r--r--Translate/messagegroups/loaders/CachedMessageGroupLoader.php25
-rw-r--r--Translate/messagegroups/loaders/FileBasedMessageGroupLoader.php195
-rw-r--r--Translate/messagegroups/loaders/MessageGroupLoader.php32
-rw-r--r--Translate/messagegroups/loaders/TranslatablePageMessageGroupStore.php181
-rw-r--r--Translate/messagegroups/loaders/WorkflowStatesMessageGroupLoader.php39
-rw-r--r--Translate/package-lock.json8315
-rw-r--r--Translate/package.json17
-rw-r--r--Translate/resources/.eslintrc.json21
-rw-r--r--Translate/resources/css/ext.translate.codemirror.css5
-rw-r--r--Translate/resources/css/ext.translate.css10
-rw-r--r--Translate/resources/css/ext.translate.dropdownmenu.css13
-rw-r--r--Translate/resources/css/ext.translate.edit.documentation.less14
-rw-r--r--Translate/resources/css/ext.translate.editor.css553
-rw-r--r--Translate/resources/css/ext.translate.groupselector.less146
-rw-r--r--Translate/resources/css/ext.translate.language.selector.css24
-rw-r--r--Translate/resources/css/ext.translate.loader.css51
-rw-r--r--Translate/resources/css/ext.translate.messagerenamedialog.less53
-rw-r--r--Translate/resources/css/ext.translate.messagetable.less283
-rw-r--r--Translate/resources/css/ext.translate.navitoggle.css56
-rw-r--r--Translate/resources/css/ext.translate.pagemode.css110
-rw-r--r--Translate/resources/css/ext.translate.proofread.css179
-rw-r--r--Translate/resources/css/ext.translate.quickedit.css45
-rw-r--r--Translate/resources/css/ext.translate.special.aggregategroups.css103
-rw-r--r--Translate/resources/css/ext.translate.special.managegroups.css165
-rw-r--r--Translate/resources/css/ext.translate.special.managetranslatorsandbox.css290
-rw-r--r--Translate/resources/css/ext.translate.special.pagemigration.css72
-rw-r--r--Translate/resources/css/ext.translate.special.pagepreparation.css11
-rw-r--r--Translate/resources/css/ext.translate.special.pagetranslation.css26
-rw-r--r--Translate/resources/css/ext.translate.special.searchtranslations.css167
-rw-r--r--Translate/resources/css/ext.translate.special.supportedlanguages.css26
-rw-r--r--Translate/resources/css/ext.translate.special.translate.css190
-rw-r--r--Translate/resources/css/ext.translate.special.translations.css7
-rw-r--r--Translate/resources/css/ext.translate.statsbar.css38
-rw-r--r--Translate/resources/css/ext.translate.statstable.less60
-rw-r--r--Translate/resources/css/ext.translate.tag.languages.less98
-rw-r--r--Translate/resources/css/ext.translate.translationstats.graphbuilder.less91
-rw-r--r--Translate/resources/css/ext.translate.workflowselector.css54
-rw-r--r--Translate/resources/images/action-edit.svg4
-rw-r--r--Translate/resources/images/add.svg23
-rw-r--r--Translate/resources/images/check-small.svg4
-rw-r--r--Translate/resources/images/check-sprite-ltr.svg15
-rw-r--r--Translate/resources/images/check-sprite-rtl.svg15
-rw-r--r--Translate/resources/images/close.svg5
-rw-r--r--Translate/resources/images/collapse.svg7
-rw-r--r--Translate/resources/images/contract-ltr.svg6
-rw-r--r--Translate/resources/images/contract-rtl.svg6
-rw-r--r--Translate/resources/images/edit-mark.svg4
-rw-r--r--Translate/resources/images/ellipsis.svg9
-rw-r--r--Translate/resources/images/expand-ltr.svg6
-rw-r--r--Translate/resources/images/expand-rtl.svg6
-rw-r--r--Translate/resources/images/expand.svg7
-rw-r--r--Translate/resources/images/history.svg8
-rw-r--r--Translate/resources/images/label-clock.svg5
-rw-r--r--Translate/resources/images/label-error.svg4
-rw-r--r--Translate/resources/images/label-flag.svg4
-rw-r--r--Translate/resources/images/label-pen.svg4
-rw-r--r--Translate/resources/images/label-tick.svg4
-rw-r--r--Translate/resources/images/language.svg7
-rw-r--r--Translate/resources/images/loading.gifbin0 -> 10771 bytes
-rw-r--r--Translate/resources/images/loading.svg7
-rw-r--r--Translate/resources/images/outdated-ltr.svg6
-rw-r--r--Translate/resources/images/outdated-rtl.svg6
-rw-r--r--Translate/resources/images/paste.svg7
-rw-r--r--Translate/resources/images/plus_darkgray.svg4
-rw-r--r--Translate/resources/images/prog-1.pngbin0 -> 236 bytes
-rw-r--r--Translate/resources/images/prog-2.pngbin0 -> 317 bytes
-rw-r--r--Translate/resources/images/prog-3.pngbin0 -> 315 bytes
-rw-r--r--Translate/resources/images/prog-4.pngbin0 -> 308 bytes
-rw-r--r--Translate/resources/images/prog-5.pngbin0 -> 236 bytes
-rw-r--r--Translate/resources/images/project.svg13
-rw-r--r--Translate/resources/images/remove.svg23
-rw-r--r--Translate/resources/images/search.svg7
-rw-r--r--Translate/resources/images/switch.svg5
-rw-r--r--Translate/resources/images/translate-ltr.svg5
-rw-r--r--Translate/resources/images/translate-rtl.svg5
-rw-r--r--Translate/resources/images/trash_darkgray.svg4
-rw-r--r--Translate/resources/images/user-small.svg7
-rw-r--r--Translate/resources/images/view-list-hi.svg4
-rw-r--r--Translate/resources/images/view-list.svg4
-rw-r--r--Translate/resources/images/view-page-hi.svg4
-rw-r--r--Translate/resources/images/view-page.svg4
-rw-r--r--Translate/resources/images/view-proofread-hi.svg4
-rw-r--r--Translate/resources/images/view-proofread.svg4
-rw-r--r--Translate/resources/js/LanguagesMultiselectWidget.js122
-rw-r--r--Translate/resources/js/ext.translate.base.js232
-rw-r--r--Translate/resources/js/ext.translate.dropdownmenu.js12
-rw-r--r--Translate/resources/js/ext.translate.edit.documentation.js46
-rw-r--r--Translate/resources/js/ext.translate.editor.helpers.js757
-rw-r--r--Translate/resources/js/ext.translate.editor.js1452
-rw-r--r--Translate/resources/js/ext.translate.editor.shortcuts.js69
-rw-r--r--Translate/resources/js/ext.translate.groupselector.js614
-rw-r--r--Translate/resources/js/ext.translate.messagerenamedialog.js324
-rw-r--r--Translate/resources/js/ext.translate.messagetable.js975
-rw-r--r--Translate/resources/js/ext.translate.navitoggle.js44
-rw-r--r--Translate/resources/js/ext.translate.pagemode.js140
-rw-r--r--Translate/resources/js/ext.translate.pagetranslation.uls.js20
-rw-r--r--Translate/resources/js/ext.translate.parsers.js80
-rw-r--r--Translate/resources/js/ext.translate.proofread.js288
-rw-r--r--Translate/resources/js/ext.translate.recentgroups.js31
-rw-r--r--Translate/resources/js/ext.translate.selecttoinput.js36
-rw-r--r--Translate/resources/js/ext.translate.special.aggregategroups.js449
-rw-r--r--Translate/resources/js/ext.translate.special.importtranslations.js20
-rw-r--r--Translate/resources/js/ext.translate.special.managegroups.js470
-rw-r--r--Translate/resources/js/ext.translate.special.managetranslatorsandbox.js762
-rw-r--r--Translate/resources/js/ext.translate.special.operatorsuggest.js39
-rw-r--r--Translate/resources/js/ext.translate.special.pagemigration.js534
-rw-r--r--Translate/resources/js/ext.translate.special.pagepreparation.js419
-rw-r--r--Translate/resources/js/ext.translate.special.pagetranslation.js54
-rw-r--r--Translate/resources/js/ext.translate.special.searchtranslations.js401
-rw-r--r--Translate/resources/js/ext.translate.special.translate.js454
-rw-r--r--Translate/resources/js/ext.translate.special.translationstats.js127
-rw-r--r--Translate/resources/js/ext.translate.statsbar.js187
-rw-r--r--Translate/resources/js/ext.translate.storage.js42
-rw-r--r--Translate/resources/js/ext.translate.translationstats.embedded.js83
-rw-r--r--Translate/resources/js/ext.translate.translationstats.graphbuilder.js345
-rw-r--r--Translate/resources/js/ext.translate.workflowselector.js164
-rw-r--r--Translate/resources/js/jquery.ajaxdispatcher.js66
-rw-r--r--Translate/resources/lib/Chart.js/Chart.css47
-rw-r--r--Translate/resources/lib/Chart.js/Chart.js16151
-rw-r--r--Translate/resources/lib/jquery.autosize.js288
-rw-r--r--Translate/resources/src/.eslintrc.json5
-rw-r--r--Translate/resources/src/ext.translate.special.languagestats/entity.selector.css8
-rw-r--r--Translate/resources/src/ext.translate.special.languagestats/entity.selector.js149
-rw-r--r--Translate/resources/src/ext.translate.special.languagestats/index.js275
-rw-r--r--Translate/resources/src/ext.translate.specialTranslationStash/index.css82
-rw-r--r--Translate/resources/src/ext.translate.specialTranslationStash/index.js255
-rw-r--r--Translate/resources/src/ext.translate.specialTranslationStash/storage.js52
-rw-r--r--Translate/resources/src/ve-translate/.eslintrc.json5
-rw-r--r--Translate/resources/src/ve-translate/ve.ce.MWTranslateAnnotationNode.js31
-rw-r--r--Translate/resources/src/ve-translate/ve.dm.MWTranslateAnnotationNode.js58
-rw-r--r--Translate/resources/src/ve-translate/ve.ui.MWTranslateAnnotationContextItem.js64
-rw-r--r--Translate/scripts/TranslateCliLogger.php23
-rw-r--r--Translate/scripts/TranslateStatsOutput.php25
-rw-r--r--Translate/scripts/__bootstrap.php19
-rw-r--r--Translate/scripts/backport.php6
-rw-r--r--Translate/scripts/characterEditStats.php144
-rw-r--r--Translate/scripts/cleanupTranslationProgressStats.php6
-rw-r--r--Translate/scripts/clearGroupSyncCache.php6
-rw-r--r--Translate/scripts/completeExternalTranslation.php6
-rw-r--r--Translate/scripts/createCheckIndex.php169
-rw-r--r--Translate/scripts/createMessageIndex.php35
-rw-r--r--Translate/scripts/deleteEqualTranslations.php6
-rw-r--r--Translate/scripts/expand-groupspec.php58
-rw-r--r--Translate/scripts/export-rename-language.php150
-rw-r--r--Translate/scripts/export.php6
-rw-r--r--Translate/scripts/exportTtmServerDump.php6
-rw-r--r--Translate/scripts/fallbacks-graph.php91
-rw-r--r--Translate/scripts/findUnsynchronizedDefinitions.php6
-rw-r--r--Translate/scripts/fuzzy.php5
-rw-r--r--Translate/scripts/groupStatistics.php671
-rw-r--r--Translate/scripts/importTranslationsFromCsv.php5
-rw-r--r--Translate/scripts/languageeditstats.php109
-rw-r--r--Translate/scripts/migrate-schema2.php72
-rw-r--r--Translate/scripts/moveTranslatableBundle.php6
-rw-r--r--Translate/scripts/moveTranslatablePage.php12
-rw-r--r--Translate/scripts/plural-comparison.php162
-rw-r--r--Translate/scripts/poimport.php322
-rw-r--r--Translate/scripts/populateFuzzy.php107
-rw-r--r--Translate/scripts/processMessageChanges.php196
-rw-r--r--Translate/scripts/queryGroupSyncCache.php6
-rw-r--r--Translate/scripts/refresh-translatable-pages.php77
-rw-r--r--Translate/scripts/syncTranslatableBundleStatus.php6
-rw-r--r--Translate/scripts/test-mt.php93
-rw-r--r--Translate/scripts/translator-stats-process.php120
-rw-r--r--Translate/scripts/translator-stats.php130
-rw-r--r--Translate/scripts/ttmserver-export.php319
-rw-r--r--Translate/scripts/updateTranslatorActivity.php6
-rw-r--r--Translate/scripts/yaml-tests.php95
-rw-r--r--Translate/sonar-project.properties4
-rw-r--r--Translate/sql/abstractSchemaChanges/patch-revtag-unique-to-pk.json82
-rw-r--r--Translate/sql/abstractSchemaChanges/patch-translate_messageindex-unique-to-pk.json43
-rw-r--r--Translate/sql/abstractSchemaChanges/patch-translate_tmt-unique-to-pk.json59
-rw-r--r--Translate/sql/mysql/patch-revtag-unique-to-pk.sql7
-rw-r--r--Translate/sql/mysql/patch-translate_messageindex-unique-to-pk.sql7
-rw-r--r--Translate/sql/mysql/patch-translate_tmt-unique-to-pk.sql7
-rw-r--r--Translate/sql/mysql/revtag.sql8
-rw-r--r--Translate/sql/mysql/translate_cache-alter-varbinary.sql30
-rw-r--r--Translate/sql/mysql/translate_cache.sql8
-rw-r--r--Translate/sql/mysql/translate_groupreviews.sql6
-rw-r--r--Translate/sql/mysql/translate_groupstats.sql10
-rw-r--r--Translate/sql/mysql/translate_messageindex.sql5
-rw-r--r--Translate/sql/mysql/translate_metadata.sql6
-rw-r--r--Translate/sql/mysql/translate_reviews.sql6
-rw-r--r--Translate/sql/mysql/translate_sections.sql8
-rw-r--r--Translate/sql/mysql/translate_stash.sql8
-rw-r--r--Translate/sql/mysql/translate_tm.sql24
-rw-r--r--Translate/sql/mysql/translate_translatable_bundles.sql10
-rw-r--r--Translate/sql/postgres/patch-revtag-unique-to-pk.sql7
-rw-r--r--Translate/sql/postgres/patch-translate_messageindex-unique-to-pk.sql7
-rw-r--r--Translate/sql/postgres/patch-translate_tmt-unique-to-pk.sql7
-rw-r--r--Translate/sql/postgres/tables-generated.sql129
-rw-r--r--Translate/sql/sqlite/patch-revtag-unique-to-pk.sql16
-rw-r--r--Translate/sql/sqlite/patch-translate_messageindex-unique-to-pk.sql14
-rw-r--r--Translate/sql/sqlite/patch-translate_tmt-unique-to-pk.sql14
-rw-r--r--Translate/sql/sqlite/revtag.sql9
-rw-r--r--Translate/sql/sqlite/translate_cache.sql9
-rw-r--r--Translate/sql/sqlite/translate_groupreviews.sql6
-rw-r--r--Translate/sql/sqlite/translate_groupstats.sql11
-rw-r--r--Translate/sql/sqlite/translate_messageindex.sql5
-rw-r--r--Translate/sql/sqlite/translate_metadata.sql6
-rw-r--r--Translate/sql/sqlite/translate_reviews.sql6
-rw-r--r--Translate/sql/sqlite/translate_sections.sql9
-rw-r--r--Translate/sql/sqlite/translate_stash.sql8
-rw-r--r--Translate/sql/sqlite/translate_tm.sql22
-rw-r--r--Translate/sql/sqlite/translate_translatable_bundles.sql11
-rw-r--r--Translate/sql/tables.json415
-rw-r--r--Translate/sql/translate_reviews-patch-01-primary-key.sql3
-rw-r--r--Translate/src/Cache/PersistentCache.php31
-rw-r--r--Translate/src/Cache/PersistentCacheEntry.php76
-rw-r--r--Translate/src/Cache/PersistentDatabaseCache.php194
-rw-r--r--Translate/src/Diagnostics/DeleteEqualTranslationsMaintenanceScript.php150
-rw-r--r--Translate/src/Diagnostics/FindUnsynchronizedDefinitionsMaintenanceScript.php116
-rw-r--r--Translate/src/Diagnostics/FuzzyTranslationsMaintenanceScript.php245
-rw-r--r--Translate/src/Diagnostics/SyncTranslatableBundleStatusMaintenanceScript.php240
-rw-r--r--Translate/src/Jobs/GenericTranslateJob.php71
-rw-r--r--Translate/src/MessageBundleTranslation/Hooks.php147
-rw-r--r--Translate/src/MessageBundleTranslation/MalformedBundle.php40
-rw-r--r--Translate/src/MessageBundleTranslation/MessageBundle.php84
-rw-r--r--Translate/src/MessageBundleTranslation/MessageBundleContent.php192
-rw-r--r--Translate/src/MessageBundleTranslation/MessageBundleContentHandler.php43
-rw-r--r--Translate/src/MessageBundleTranslation/MessageBundleMessageGroup.php231
-rw-r--r--Translate/src/MessageBundleTranslation/MessageBundleMessageGroupLoader.php114
-rw-r--r--Translate/src/MessageBundleTranslation/MessageBundleMetadata.php49
-rw-r--r--Translate/src/MessageBundleTranslation/MessageBundleStore.php194
-rw-r--r--Translate/src/MessageBundleTranslation/UpdateMessageBundleJob.php141
-rw-r--r--Translate/src/MessageGroupProcessing/AggregateGroupsActionApi.php275
-rw-r--r--Translate/src/MessageGroupProcessing/AggregateGroupsSpecialPage.php315
-rw-r--r--Translate/src/MessageGroupProcessing/CsvTranslationImporter.php249
-rw-r--r--Translate/src/MessageGroupProcessing/DeleteTranslatableBundleJob.php133
-rw-r--r--Translate/src/MessageGroupProcessing/GroupReviewActionApi.php119
-rw-r--r--Translate/src/MessageGroupProcessing/ImportTranslationsFromCsv.php146
-rw-r--r--Translate/src/MessageGroupProcessing/ManageMessageGroupsActionApi.php339
-rw-r--r--Translate/src/MessageGroupProcessing/MessageGroupReview.php81
-rw-r--r--Translate/src/MessageGroupProcessing/MoveTranslatableBundleJob.php66
-rw-r--r--Translate/src/MessageGroupProcessing/PageDeleteLogger.php73
-rw-r--r--Translate/src/MessageGroupProcessing/PageMoveLogger.php49
-rw-r--r--Translate/src/MessageGroupProcessing/QueryManageMessageGroupsActionApi.php144
-rw-r--r--Translate/src/MessageGroupProcessing/QueryMessageGroupsActionApi.php341
-rw-r--r--Translate/src/MessageGroupProcessing/RevTagStore.php149
-rw-r--r--Translate/src/MessageGroupProcessing/SubpageListBuilder.php159
-rw-r--r--Translate/src/MessageGroupProcessing/TranslatableBundle.php95
-rw-r--r--Translate/src/MessageGroupProcessing/TranslatableBundleFactory.php93
-rw-r--r--Translate/src/MessageGroupProcessing/TranslatableBundleLogFormatter.php110
-rw-r--r--Translate/src/MessageGroupProcessing/TranslatableBundleStatus.php10
-rw-r--r--Translate/src/MessageGroupProcessing/TranslatableBundleStatusStore.php110
-rw-r--r--Translate/src/MessageGroupProcessing/TranslatableBundleStore.php22
-rw-r--r--Translate/src/MessageGroupProcessing/TranslatablePageStore.php201
-rw-r--r--Translate/src/MessageLoading/QueryMessageCollectionActionApi.php330
-rw-r--r--Translate/src/MessageLoading/QueryMessageTranslationsActionApi.php102
-rw-r--r--Translate/src/MessageProcessing/ArrayFlattener.php288
-rw-r--r--Translate/src/MessageProcessing/StringMangler.php66
-rw-r--r--Translate/src/MessageProcessing/StringMatcher.php207
-rw-r--r--Translate/src/MessageProcessing/TranslateReplaceTitle.php69
-rw-r--r--Translate/src/MessageSync/MessageSourceChange.php553
-rw-r--r--Translate/src/PageTranslation/DeleteTranslatableBundleSpecialPage.php458
-rw-r--r--Translate/src/PageTranslation/Hooks.php1666
-rw-r--r--Translate/src/PageTranslation/ImpossiblePageMove.php27
-rw-r--r--Translate/src/PageTranslation/InvalidPageTitleRename.php15
-rw-r--r--Translate/src/PageTranslation/MigrateTranslatablePageSpecialPage.php84
-rw-r--r--Translate/src/PageTranslation/MoveTranslatableBundleMaintenanceScript.php285
-rw-r--r--Translate/src/PageTranslation/MoveTranslatableBundleSpecialPage.php429
-rw-r--r--Translate/src/PageTranslation/PageMoveCollection.php144
-rw-r--r--Translate/src/PageTranslation/PageMoveOperation.php61
-rw-r--r--Translate/src/PageTranslation/PageTitleRenamer.php105
-rw-r--r--Translate/src/PageTranslation/PageTranslationSpecialPage.php1312
-rw-r--r--Translate/src/PageTranslation/ParserOutput.php109
-rw-r--r--Translate/src/PageTranslation/ParsingFailure.php42
-rw-r--r--Translate/src/PageTranslation/PrepareTranslatablePageSpecialPage.php75
-rw-r--r--Translate/src/PageTranslation/RenderTranslationPageJob.php169
-rw-r--r--Translate/src/PageTranslation/Section.php34
-rw-r--r--Translate/src/PageTranslation/TestingParsingPlaceholderFactory.php19
-rw-r--r--Translate/src/PageTranslation/TranslatableBundleMover.php373
-rw-r--r--Translate/src/PageTranslation/TranslatablePage.php586
-rw-r--r--Translate/src/PageTranslation/TranslatablePageInsertablesSuggester.php43
-rw-r--r--Translate/src/PageTranslation/TranslatablePageParser.php216
-rw-r--r--Translate/src/PageTranslation/TranslatablePageStatus.php37
-rw-r--r--Translate/src/PageTranslation/TranslateExt.php18
-rw-r--r--Translate/src/PageTranslation/TranslationPage.php118
-rw-r--r--Translate/src/PageTranslation/TranslationUnit.php314
-rw-r--r--Translate/src/PageTranslation/TranslationUnitIssue.php46
-rw-r--r--Translate/src/PageTranslation/TranslationUnitReader.php17
-rw-r--r--Translate/src/PageTranslation/TranslationUnitStore.php58
-rw-r--r--Translate/src/PageTranslation/TranslationUnitStoreFactory.php42
-rw-r--r--Translate/src/PageTranslation/TranslationVariable.php38
-rw-r--r--Translate/src/PageTranslation/UpdateTranslatablePageJob.php178
-rw-r--r--Translate/src/ServiceWiring.php227
-rw-r--r--Translate/src/Services.php160
-rw-r--r--Translate/src/Statistics/ActiveLanguagesSpecialPage.php382
-rw-r--r--Translate/src/Statistics/CleanupTranslationProgressStatsMaintenanceScript.php85
-rw-r--r--Translate/src/Statistics/LanguageStatsSpecialPage.php526
-rw-r--r--Translate/src/Statistics/MessageGroupStatsSpecialPage.php483
-rw-r--r--Translate/src/Statistics/ProgressStatsTableFactory.php38
-rw-r--r--Translate/src/Statistics/QueryLanguageStatsActionApi.php96
-rw-r--r--Translate/src/Statistics/QueryMessageGroupStatsActionApi.php122
-rw-r--r--Translate/src/Statistics/QueryStatsActionApi.php114
-rw-r--r--Translate/src/Statistics/QueryTranslationStatsActionApi.php84
-rw-r--r--Translate/src/Statistics/ReviewPerLanguageStats.php110
-rw-r--r--Translate/src/Statistics/StatisticsUnavailable.php14
-rw-r--r--Translate/src/Statistics/StatsTable.php341
-rw-r--r--Translate/src/Statistics/TranslatePerLanguageStats.php194
-rw-r--r--Translate/src/Statistics/TranslateRegistrationStats.php25
-rw-r--r--Translate/src/Statistics/TranslationStatsBase.php77
-rw-r--r--Translate/src/Statistics/TranslationStatsDataProvider.php246
-rw-r--r--Translate/src/Statistics/TranslationStatsGraphOptions.php110
-rw-r--r--Translate/src/Statistics/TranslationStatsInterface.php66
-rw-r--r--Translate/src/Statistics/TranslationStatsSpecialPage.php250
-rw-r--r--Translate/src/Statistics/TranslatorActivity.php150
-rw-r--r--Translate/src/Statistics/TranslatorActivityQuery.php123
-rw-r--r--Translate/src/Statistics/UpdateTranslatorActivityJob.php38
-rw-r--r--Translate/src/Statistics/UpdateTranslatorActivityMaintenanceScript.php25
-rw-r--r--Translate/src/Synchronization/BackportTranslationsMaintenanceScript.php306
-rw-r--r--Translate/src/Synchronization/ClearGroupSyncCacheMaintenanceScript.php83
-rw-r--r--Translate/src/Synchronization/CompleteExternalTranslationMaintenanceScript.php93
-rw-r--r--Translate/src/Synchronization/DisplayGroupSynchronizationInfo.php261
-rw-r--r--Translate/src/Synchronization/ExportTranslationsMaintenanceScript.php434
-rw-r--r--Translate/src/Synchronization/ExportTranslationsSpecialPage.php347
-rw-r--r--Translate/src/Synchronization/ExternalMessageSourceStateImporter.php273
-rw-r--r--Translate/src/Synchronization/GroupSynchronizationCache.php489
-rw-r--r--Translate/src/Synchronization/GroupSynchronizationResponse.php66
-rw-r--r--Translate/src/Synchronization/ImportTranslationsSpecialPage.php232
-rw-r--r--Translate/src/Synchronization/ManageGroupSynchronizationCacheActionApi.php138
-rw-r--r--Translate/src/Synchronization/ManageGroupsSpecialPage.php1115
-rw-r--r--Translate/src/Synchronization/MessageUpdateParameter.php99
-rw-r--r--Translate/src/Synchronization/MessageWebImporter.php608
-rw-r--r--Translate/src/Synchronization/QueryGroupSyncCacheMaintenanceScript.php97
-rw-r--r--Translate/src/SystemUsers/FuzzyBot.php25
-rw-r--r--Translate/src/SystemUsers/TranslateUserManager.php25
-rw-r--r--Translate/src/TranslatorInterface/Aid/CurrentTranslationAid.php39
-rw-r--r--Translate/src/TranslatorInterface/Aid/DocumentationAid.php35
-rw-r--r--Translate/src/TranslatorInterface/Aid/EditSummariesAid.php75
-rw-r--r--Translate/src/TranslatorInterface/Aid/GettextDocumentationAid.php81
-rw-r--r--Translate/src/TranslatorInterface/Aid/GroupsAid.php15
-rw-r--r--Translate/src/TranslatorInterface/Aid/InOtherLanguagesAid.php80
-rw-r--r--Translate/src/TranslatorInterface/Aid/InsertablesAid.php55
-rw-r--r--Translate/src/TranslatorInterface/Aid/MachineTranslationAid.php100
-rw-r--r--Translate/src/TranslatorInterface/Aid/MessageDefinitionAid.php23
-rw-r--r--Translate/src/TranslatorInterface/Aid/QueryAggregatorAwareTranslationAid.php69
-rw-r--r--Translate/src/TranslatorInterface/Aid/SupportAid.php87
-rw-r--r--Translate/src/TranslatorInterface/Aid/TTMServerAid.php221
-rw-r--r--Translate/src/TranslatorInterface/Aid/TranslationAid.php80
-rw-r--r--Translate/src/TranslatorInterface/Aid/TranslationAidDataProvider.php149
-rw-r--r--Translate/src/TranslatorInterface/Aid/TranslationAidsActionApi.php154
-rw-r--r--Translate/src/TranslatorInterface/Aid/UnsupportedTranslationAid.php20
-rw-r--r--Translate/src/TranslatorInterface/Aid/UpdatedDefinitionAid.php91
-rw-r--r--Translate/src/TranslatorInterface/EntitySearch.php249
-rw-r--r--Translate/src/TranslatorInterface/Insertable/CombinedInsertablesSuggester.php31
-rw-r--r--Translate/src/TranslatorInterface/Insertable/HtmlTagInsertablesSuggester.php28
-rw-r--r--Translate/src/TranslatorInterface/Insertable/Insertable.php48
-rw-r--r--Translate/src/TranslatorInterface/Insertable/InsertableFactory.php48
-rw-r--r--Translate/src/TranslatorInterface/Insertable/InsertablesSuggester.php19
-rw-r--r--Translate/src/TranslatorInterface/Insertable/MediaWikiInsertablesSuggester.php42
-rw-r--r--Translate/src/TranslatorInterface/Insertable/NumericalParameterInsertablesSuggester.php31
-rw-r--r--Translate/src/TranslatorInterface/Insertable/RegexInsertablesSuggester.php124
-rw-r--r--Translate/src/TranslatorInterface/Insertable/UrlInsertablesSuggester.php28
-rw-r--r--Translate/src/TranslatorInterface/LegacyInterfaceHookHandler.php84
-rw-r--r--Translate/src/TranslatorInterface/LegacyTranslationAids.php159
-rw-r--r--Translate/src/TranslatorInterface/MessageTable.php90
-rw-r--r--Translate/src/TranslatorInterface/ReviewTranslationActionApi.php174
-rw-r--r--Translate/src/TranslatorInterface/TranslateSpecialPage.php466
-rw-r--r--Translate/src/TranslatorInterface/TranslationEntitySearchActionApi.php72
-rw-r--r--Translate/src/TranslatorInterface/TranslationHelperException.php17
-rw-r--r--Translate/src/TranslatorInterface/TranslationsSpecialPage.php279
-rw-r--r--Translate/src/TranslatorSandbox/ManageTranslatorSandboxSpecialPage.php223
-rw-r--r--Translate/src/TranslatorSandbox/StashedTranslation.php48
-rw-r--r--Translate/src/TranslatorSandbox/TranslationStashActionApi.php161
-rw-r--r--Translate/src/TranslatorSandbox/TranslationStashReader.php20
-rw-r--r--Translate/src/TranslatorSandbox/TranslationStashSpecialPage.php223
-rw-r--r--Translate/src/TranslatorSandbox/TranslationStashStorage.php67
-rw-r--r--Translate/src/TranslatorSandbox/TranslationStashWriter.php17
-rw-r--r--Translate/src/TranslatorSandbox/TranslatorSandboxActionApi.php267
-rw-r--r--Translate/src/TtmServer/ExportTtmServerDumpMaintenanceScript.php193
-rw-r--r--Translate/src/TtmServer/SearchTranslationsActionApi.php165
-rw-r--r--Translate/src/TtmServer/SearchTranslationsSpecialPage.php614
-rw-r--r--Translate/src/TtmServer/ServiceCreationFailure.php14
-rw-r--r--Translate/src/TtmServer/TtmServerActionApi.php122
-rw-r--r--Translate/src/TtmServer/TtmServerFactory.php91
-rw-r--r--Translate/src/Utilities/BaseMaintenanceScript.php21
-rw-r--r--Translate/src/Utilities/ConfigHelper.php53
-rw-r--r--Translate/src/Utilities/GettextPlural.php201
-rw-r--r--Translate/src/Utilities/HTMLJsSelectToInputField.php70
-rw-r--r--Translate/src/Utilities/JsSelectToInput.php101
-rw-r--r--Translate/src/Utilities/LanguagesMultiselectWidget.php33
-rw-r--r--Translate/src/Utilities/ParallelExecutor.php54
-rw-r--r--Translate/src/Utilities/ParsingPlaceholderFactory.php23
-rw-r--r--Translate/src/Utilities/SmartFormatPlural.php64
-rw-r--r--Translate/src/Utilities/StringComparators/SimpleStringComparator.php27
-rw-r--r--Translate/src/Utilities/StringComparators/StringComparator.php18
-rw-r--r--Translate/src/Utilities/UnicodePlural.php191
-rw-r--r--Translate/src/Validation/CheckTranslationActionApi.php87
-rw-r--r--Translate/src/Validation/MessageValidator.php24
-rw-r--r--Translate/src/Validation/ValidationIssue.php54
-rw-r--r--Translate/src/Validation/ValidationIssues.php53
-rw-r--r--Translate/src/Validation/ValidationResult.php102
-rw-r--r--Translate/src/Validation/ValidationRunner.php385
-rw-r--r--Translate/src/Validation/ValidatorFactory.php113
-rw-r--r--Translate/src/Validation/Validators/BraceBalanceValidator.php55
-rw-r--r--Translate/src/Validation/Validators/EscapeCharacterValidator.php89
-rw-r--r--Translate/src/Validation/Validators/GettextNewlineValidator.php47
-rw-r--r--Translate/src/Validation/Validators/GettextPluralValidator.php106
-rw-r--r--Translate/src/Validation/Validators/InsertableRegexValidator.php78
-rw-r--r--Translate/src/Validation/Validators/InsertableRubyVariableValidator.php16
-rw-r--r--Translate/src/Validation/Validators/IosVariableValidator.php21
-rw-r--r--Translate/src/Validation/Validators/MatchSetValidator.php64
-rw-r--r--Translate/src/Validation/Validators/MediaWikiLinkValidator.php72
-rw-r--r--Translate/src/Validation/Validators/MediaWikiPageNameValidator.php39
-rw-r--r--Translate/src/Validation/Validators/MediaWikiParameterValidator.php15
-rw-r--r--Translate/src/Validation/Validators/MediaWikiPluralValidator.php162
-rw-r--r--Translate/src/Validation/Validators/MediaWikiTimeListValidator.php81
-rw-r--r--Translate/src/Validation/Validators/NewlineValidator.php100
-rw-r--r--Translate/src/Validation/Validators/NotEmptyValidator.php28
-rw-r--r--Translate/src/Validation/Validators/NumericalParameterValidator.php15
-rw-r--r--Translate/src/Validation/Validators/PrintfValidator.php16
-rw-r--r--Translate/src/Validation/Validators/PythonInterpolationValidator.php16
-rw-r--r--Translate/src/Validation/Validators/ReplacementValidator.php52
-rw-r--r--Translate/src/Validation/Validators/SmartFormatPluralValidator.php110
-rw-r--r--Translate/src/Validation/Validators/UnicodePluralValidator.php110
-rw-r--r--Translate/src/WebService/ApertiumWebService.php107
-rw-r--r--Translate/src/WebService/CaighdeanWebService.php98
-rw-r--r--Translate/src/WebService/CxserverWebService.php100
-rw-r--r--Translate/src/WebService/GoogleTranslateWebService.php131
-rw-r--r--Translate/src/WebService/MicrosoftWebService.php163
-rw-r--r--Translate/src/WebService/QueryAggregator.php87
-rw-r--r--Translate/src/WebService/QueryAggregatorAware.php16
-rw-r--r--Translate/src/WebService/RESTBaseWebService.php94
-rw-r--r--Translate/src/WebService/RemoteTTMServerWebService.php65
-rw-r--r--Translate/src/WebService/TranslationQuery.php94
-rw-r--r--Translate/src/WebService/TranslationQueryResponse.php55
-rw-r--r--Translate/src/WebService/TranslationWebService.php335
-rw-r--r--Translate/src/WebService/TranslationWebServiceConfigurationException.php18
-rw-r--r--Translate/src/WebService/TranslationWebServiceException.php17
-rw-r--r--Translate/src/WebService/TranslationWebServiceInvalidInputException.php20
-rw-r--r--Translate/src/WebService/YandexWebService.php114
-rw-r--r--Translate/tests/generateRandomSandboxData.php113
-rw-r--r--Translate/tests/parser/translateParserTests-knownFailures.json21
-rw-r--r--Translate/tests/parser/translateParserTests.txt106
-rw-r--r--Translate/tests/phpunit/Cache/PersistentDatabaseCacheTest.php353
-rw-r--r--Translate/tests/phpunit/ElasticSearchTTMServerTest.php37
-rw-r--r--Translate/tests/phpunit/ExclusionInclusionListTest.php86
-rw-r--r--Translate/tests/phpunit/FakeTTMServerTest.php26
-rw-r--r--Translate/tests/phpunit/HookDocTest.php157
-rw-r--r--Translate/tests/phpunit/Makefile12
-rw-r--r--Translate/tests/phpunit/MessageCollectionTest.php109
-rw-r--r--Translate/tests/phpunit/MessageGroupBaseTest.php247
-rw-r--r--Translate/tests/phpunit/MessageGroupProcessing/ManageMessageGroupsActionApiTest.php224
-rw-r--r--Translate/tests/phpunit/MessageGroupProcessing/MessageGroupReviewTest.php30
-rw-r--r--Translate/tests/phpunit/MessageGroupProcessing/QueryManageMessageGroupsActionApiTest.php117
-rw-r--r--Translate/tests/phpunit/MessageGroupProcessing/QueryMessageGroupsActionApiTest.php162
-rw-r--r--Translate/tests/phpunit/MessageGroupStatesUpdaterJobTest.php225
-rw-r--r--Translate/tests/phpunit/MessageGroupsTest.php97
-rw-r--r--Translate/tests/phpunit/MessageIndexTest.php262
-rw-r--r--Translate/tests/phpunit/MessageLoading/QueryMessageCollectionActionApiTest.php68
-rw-r--r--Translate/tests/phpunit/MessageProcessing/CsvTranslationImporterTest.php123
-rw-r--r--Translate/tests/phpunit/MessageProcessing/StringMatcherTest.php112
-rw-r--r--Translate/tests/phpunit/PageTranslation/HooksTest.php232
-rw-r--r--Translate/tests/phpunit/PageTranslation/PageTitleRenamerTest.php162
-rw-r--r--Translate/tests/phpunit/PageTranslation/TranslationPageTest.php154
-rw-r--r--Translate/tests/phpunit/ServicesTest.php30
-rw-r--r--Translate/tests/phpunit/Statistics/TranslatorActivityTest.php148
-rw-r--r--Translate/tests/phpunit/Synchronization/GroupSynchronizationCacheTest.php370
-rw-r--r--Translate/tests/phpunit/Synchronization/MessageWebImporterTest.php69
-rw-r--r--Translate/tests/phpunit/TTMServerMessageUpdateJobTest.php302
-rw-r--r--Translate/tests/phpunit/TranslateHooksTest.php91
-rw-r--r--Translate/tests/phpunit/TranslateSandboxTest.php128
-rw-r--r--Translate/tests/phpunit/TranslateUtilsTest.php46
-rw-r--r--Translate/tests/phpunit/TranslateYamlTest.php83
-rw-r--r--Translate/tests/phpunit/TranslationFuzzyUpdaterTest.php98
-rw-r--r--Translate/tests/phpunit/TranslatorInterface/Aid/TranslationAidDataProviderTest.php67
-rw-r--r--Translate/tests/phpunit/TranslatorInterface/EntitySearchTest.php224
-rw-r--r--Translate/tests/phpunit/TranslatorInterface/ReviewTranslationActionApiTest.php160
-rw-r--r--Translate/tests/phpunit/TranslatorSandbox/TranslationStashStorageTest.php43
-rw-r--r--Translate/tests/phpunit/Validation/ValidationRunnerTest.php279
-rw-r--r--Translate/tests/phpunit/Validation/Validators/MediaWikiPluralValidatorTest.php120
-rw-r--r--Translate/tests/phpunit/WikiPageMessageGroupTest.php45
-rw-r--r--Translate/tests/phpunit/data/AppleFFSTest1.strings30
-rw-r--r--Translate/tests/phpunit/data/AppleInfoPlistFfsTest1.strings6
-rw-r--r--Translate/tests/phpunit/data/Example-result.i18n.php55
-rw-r--r--Translate/tests/phpunit/data/Example.i18n.php47
-rw-r--r--Translate/tests/phpunit/data/IniFFSTest1.ini8
-rw-r--r--Translate/tests/phpunit/data/IniFFSTest2.ini6
-rw-r--r--Translate/tests/phpunit/data/MediaWikiExtensionTest-conf2.yaml42
-rw-r--r--Translate/tests/phpunit/data/MediaWikiExtensionTest-conf3.yaml25
-rw-r--r--Translate/tests/phpunit/data/MediaWikiExtensionTest-conf4.yaml25
-rw-r--r--Translate/tests/phpunit/data/MessageLoaderGroups.yaml7
-rw-r--r--Translate/tests/phpunit/data/MixedSourceLanguageGroups.yaml31
-rw-r--r--Translate/tests/phpunit/data/ParentGroups.yaml95
-rw-r--r--Translate/tests/phpunit/data/ValidatorGroup.yaml16
-rw-r--r--Translate/tests/phpunit/data/csv-to-import/invalid-code.csv5
-rw-r--r--Translate/tests/phpunit/data/csv-to-import/invalid-csv.csv5
-rw-r--r--Translate/tests/phpunit/data/csv-to-import/invalid-unit.csv4
-rw-r--r--Translate/tests/phpunit/data/csv-to-import/valid.csv4
-rw-r--r--Translate/tests/phpunit/data/jsontest_fi.json7
-rw-r--r--Translate/tests/phpunit/data/mediawiki-extensions.txt18
-rw-r--r--Translate/tests/phpunit/data/messageindexdata.ser1
-rw-r--r--Translate/tests/phpunit/data/minimal.xlf19
-rw-r--r--Translate/tests/phpunit/data/pythontest.py13
-rw-r--r--Translate/tests/phpunit/data/validation-exclusion-list.php13
-rw-r--r--Translate/tests/phpunit/ffs/AmdFFSTest.php117
-rw-r--r--Translate/tests/phpunit/ffs/AndroidXmlFFSTest.php153
-rw-r--r--Translate/tests/phpunit/ffs/AppleFFSTest.php113
-rw-r--r--Translate/tests/phpunit/ffs/AppleInfoPlistFfsTest.php74
-rw-r--r--Translate/tests/phpunit/ffs/DtdFFSTest.php53
-rw-r--r--Translate/tests/phpunit/ffs/GettextFFSTest.php265
-rw-r--r--Translate/tests/phpunit/ffs/IniFFSTest.php66
-rw-r--r--Translate/tests/phpunit/ffs/JavaFFSTest.php88
-rw-r--r--Translate/tests/phpunit/ffs/JsonFFSTest.php136
-rw-r--r--Translate/tests/phpunit/ffs/MediaWikiExtensionsTest.php46
-rw-r--r--Translate/tests/phpunit/ffs/XliffFFSTest.php48
-rw-r--r--Translate/tests/phpunit/helpers/TranslatablePageTestTrait.php64
-rw-r--r--Translate/tests/phpunit/messagegroups/AggregateMessageGroupLoaderTest.php36
-rw-r--r--Translate/tests/phpunit/messagegroups/FileBasedMessageGroupLoaderTest.php84
-rw-r--r--Translate/tests/phpunit/messagegroups/MessageGroupLoaderTest.php56
-rw-r--r--Translate/tests/phpunit/messagegroups/TranslatablePageMessageGroupStoreTest.php89
-rw-r--r--Translate/tests/phpunit/mocks/MockCacheMessageGroupLoader.php21
-rw-r--r--Translate/tests/phpunit/mocks/MockCustomInsertableSuggester.php10
-rw-r--r--Translate/tests/phpunit/mocks/MockFileBasedMessageGroup.php23
-rw-r--r--Translate/tests/phpunit/mocks/MockMessageCollectionForExport.php41
-rw-r--r--Translate/tests/phpunit/mocks/MockValidators.php31
-rw-r--r--Translate/tests/phpunit/mocks/MockWikiMessageGroup.php74
-rw-r--r--Translate/tests/phpunit/tag/PageTranslationParserTest.php90
-rw-r--r--Translate/tests/phpunit/tag/PageTranslationTaggingTest.php144
-rw-r--r--Translate/tests/phpunit/tag/TranslatablePageIntegrationTest.php40
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/FailDoubleOpen.ptfile3
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/FailDoubleOpenNowrap.ptfile3
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/FailEmptySection.ptfile4
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/FailMultipleSectionMarkers.ptfile5
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/FailNotAtomic.ptfile5
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/FailSectionMarkerPlace.ptfile3
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/FailTags.ptfile7
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/FailTags2.ptfile10
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/FailUnclosed.ptfile2
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/HeaderSection.ptfile7
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/HeaderSection.ptsource7
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/HeaderSection.pttarget4
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/Inline.ptfile1
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/Inline.ptsource1
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/Inline.pttarget1
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/LoneHeader.ptfile5
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/LoneHeader.ptsource6
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/Nowiki.ptfile3
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/Nowiki.pttarget3
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/NowikiInside.ptfile4
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/NowikiInside.pttarget3
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/NowikiOnly.ptfile1
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/NowikiOnly.pttest5
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/Simple.ptfile3
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/Simple.ptsource4
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/Simple.pttarget1
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/Simple.pttest3
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/SimpleWithMarker.ptfile4
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/SimpleWithMarker.pttarget1
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/Variables.ptfile6
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/Variables.pttarget4
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/Whitespace.ptfile17
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/Whitespace.ptsource19
-rw-r--r--Translate/tests/phpunit/tag/pagetranslation/Whitespace.pttarget14
-rw-r--r--Translate/tests/phpunit/unit/Makefile9
-rw-r--r--Translate/tests/phpunit/unit/MessageBundleTranslation/MessageBundleContentTest.php236
-rw-r--r--Translate/tests/phpunit/unit/MessageGroupProcessing/TranslatableBundleStatusStoreTest.php73
-rw-r--r--Translate/tests/phpunit/unit/MessageProcessing/ArrayFlattenerTest.php273
-rw-r--r--Translate/tests/phpunit/unit/PageTranslation/ParserOutputTest.php100
-rw-r--r--Translate/tests/phpunit/unit/PageTranslation/SectionTest.php23
-rw-r--r--Translate/tests/phpunit/unit/PageTranslation/TranslatablePageInsertablesSuggesterTest.php41
-rw-r--r--Translate/tests/phpunit/unit/PageTranslation/TranslatablePageParserTest.php312
-rw-r--r--Translate/tests/phpunit/unit/PageTranslation/TranslatablePageStoreTest.php131
-rw-r--r--Translate/tests/phpunit/unit/PageTranslation/TranslatablePageTest.php115
-rw-r--r--Translate/tests/phpunit/unit/PageTranslation/TranslationUnitIssueTest.php44
-rw-r--r--Translate/tests/phpunit/unit/PageTranslation/TranslationUnitTest.php509
-rw-r--r--Translate/tests/phpunit/unit/Synchronization/MessageUpdateParameterTest.php98
-rw-r--r--Translate/tests/phpunit/unit/TranslatorInterface/Insertable/CombinedInsertablesSuggesterTest.php90
-rw-r--r--Translate/tests/phpunit/unit/TranslatorInterface/Insertable/HtmlTagInsertablesSuggesterTest.php88
-rw-r--r--Translate/tests/phpunit/unit/TranslatorInterface/Insertable/InsertableFactoryTest.php56
-rw-r--r--Translate/tests/phpunit/unit/TranslatorInterface/Insertable/MediaWikiInsertablesSuggesterTest.php48
-rw-r--r--Translate/tests/phpunit/unit/TranslatorInterface/Insertable/NumericalParameterInsertablesSuggesterTest.php39
-rw-r--r--Translate/tests/phpunit/unit/TranslatorInterface/Insertable/RegexInsertablesSuggesterTest.php70
-rw-r--r--Translate/tests/phpunit/unit/TranslatorInterface/Insertable/UrlInsertablesSuggesterTest.php99
-rw-r--r--Translate/tests/phpunit/unit/TtmServer/TtmServerFactoryTest.php72
-rw-r--r--Translate/tests/phpunit/unit/Utilities/GettextPluralTest.php142
-rw-r--r--Translate/tests/phpunit/unit/Utilities/ParsingPlaceholderFactoryTest.php24
-rw-r--r--Translate/tests/phpunit/unit/Utilities/SmartFormatPluralTest.php40
-rw-r--r--Translate/tests/phpunit/unit/Utilities/UnicodePluralTest.php170
-rw-r--r--Translate/tests/phpunit/unit/Validation/Validators/BaseValidatorTestCase.php39
-rw-r--r--Translate/tests/phpunit/unit/Validation/Validators/BraceBalanceValidatorTest.php45
-rw-r--r--Translate/tests/phpunit/unit/Validation/Validators/EscapeCharacterValidatorTest.php68
-rw-r--r--Translate/tests/phpunit/unit/Validation/Validators/GettextNewlineValidatorTest.php45
-rw-r--r--Translate/tests/phpunit/unit/Validation/Validators/GettextPluralValidatorTest.php54
-rw-r--r--Translate/tests/phpunit/unit/Validation/Validators/InsertableRegexValidatorTest.php42
-rw-r--r--Translate/tests/phpunit/unit/Validation/Validators/InsertableRubyVariableValidatorTest.php38
-rw-r--r--Translate/tests/phpunit/unit/Validation/Validators/IosVariableValidatorTest.php38
-rw-r--r--Translate/tests/phpunit/unit/Validation/Validators/MatchSetValidatorTest.php49
-rw-r--r--Translate/tests/phpunit/unit/Validation/Validators/MediaWikiLinkValidatorTest.php40
-rw-r--r--Translate/tests/phpunit/unit/Validation/Validators/MediaWikiPageNameValidatorTest.php38
-rw-r--r--Translate/tests/phpunit/unit/Validation/Validators/MediaWikiParameterValidatorTest.php53
-rw-r--r--Translate/tests/phpunit/unit/Validation/Validators/MediaWikiTimeListValidatorTest.php60
-rw-r--r--Translate/tests/phpunit/unit/Validation/Validators/NewlineValidatorTest.php45
-rw-r--r--Translate/tests/phpunit/unit/Validation/Validators/NotEmptyValidatorTest.php45
-rw-r--r--Translate/tests/phpunit/unit/Validation/Validators/NumericalParameterValidatorTest.php45
-rw-r--r--Translate/tests/phpunit/unit/Validation/Validators/PrintfValidatorTest.php62
-rw-r--r--Translate/tests/phpunit/unit/Validation/Validators/PythonInterpolationValidatorTest.php45
-rw-r--r--Translate/tests/phpunit/unit/Validation/Validators/ReplacementValidatorTest.php47
-rw-r--r--Translate/tests/phpunit/unit/Validation/Validators/SmartFormatPluralValidatorTest.php75
-rw-r--r--Translate/tests/phpunit/unit/Validation/Validators/UnicodePluralValidatorTest.php45
-rw-r--r--Translate/tests/phpunit/unit/utils/MessageSourceChangeTest.php224
-rw-r--r--Translate/tests/phpunit/utils/MessageGroupCacheTest.php47
-rw-r--r--Translate/tests/phpunit/utils/MessageGroupStatsTest.php72
-rw-r--r--Translate/tests/phpunit/utils/MessageGroupWANCacheTest.php93
-rw-r--r--Translate/tests/qunit/.eslintrc.json7
-rw-r--r--Translate/tests/qunit/ext.translate.parsers.test.js33
-rw-r--r--Translate/tests/qunit/ext.translate.special.pagemigration.test.js130
-rw-r--r--Translate/ttmserver/CrossLanguageTranslationSearchQuery.php159
-rw-r--r--Translate/ttmserver/DatabaseTTMServer.php288
-rw-r--r--Translate/ttmserver/ElasticSearchTTMServer.php864
-rw-r--r--Translate/ttmserver/Exceptions.php4
-rw-r--r--Translate/ttmserver/FakeTTMServer.php63
-rw-r--r--Translate/ttmserver/FuzzyLikeThis.php213
-rw-r--r--Translate/ttmserver/Interfaces.php161
-rw-r--r--Translate/ttmserver/RemoteTTMServer.php32
-rw-r--r--Translate/ttmserver/TTMServer.php185
-rw-r--r--Translate/ttmserver/TTMServerMessageUpdateJob.php301
-rw-r--r--Translate/utils/ExternalMessageSourceStateComparator.php433
-rw-r--r--Translate/utils/MessageChangeStorage.php152
-rw-r--r--Translate/utils/MessageGroupCache.php288
-rw-r--r--Translate/utils/MessageGroupStates.php36
-rw-r--r--Translate/utils/MessageGroupStatesUpdaterJob.php162
-rw-r--r--Translate/utils/MessageGroupStats.php665
-rw-r--r--Translate/utils/MessageGroupStatsRebuildJob.php85
-rw-r--r--Translate/utils/MessageGroupWANCache.php168
-rw-r--r--Translate/utils/MessageHandle.php293
-rw-r--r--Translate/utils/MessageIndex.php777
-rw-r--r--Translate/utils/MessageIndexException.php10
-rw-r--r--Translate/utils/MessageIndexRebuildJob.php83
-rw-r--r--Translate/utils/MessageUpdateJob.php346
-rw-r--r--Translate/utils/PHPVariableLoader.php29
-rw-r--r--Translate/utils/TranslateLogFormatter.php88
-rw-r--r--Translate/utils/TranslateMetadata.php251
-rw-r--r--Translate/utils/TranslatePreferences.php68
-rw-r--r--Translate/utils/TranslateRcFilter.php252
-rw-r--r--Translate/utils/TranslateSandbox.php318
-rw-r--r--Translate/utils/TranslateSandboxEmailJob.php38
-rw-r--r--Translate/utils/TranslateToolbox.php42
-rw-r--r--Translate/utils/TranslateYaml.php186
-rw-r--r--Translate/utils/TranslationStats.php61
-rw-r--r--Translate/utils/lc.php42
1776 files changed, 190149 insertions, 1 deletions
diff --git a/Translate b/Translate
deleted file mode 120000
index 842c1fd2..00000000
--- a/Translate
+++ /dev/null
@@ -1 +0,0 @@
-MLEB/Translate \ No newline at end of file
diff --git a/Translate/.eslintrc.json b/Translate/.eslintrc.json
new file mode 100644
index 00000000..6acf3068
--- /dev/null
+++ b/Translate/.eslintrc.json
@@ -0,0 +1,7 @@
+{
+ "root": true,
+ "extends": [
+ "wikimedia/server",
+ "wikimedia/mediawiki"
+ ]
+}
diff --git a/Translate/.mailmap b/Translate/.mailmap
new file mode 100644
index 00000000..3e7e435a
--- /dev/null
+++ b/Translate/.mailmap
@@ -0,0 +1,64 @@
+Abijeet Patro <abijeetpatro@gmail.com>
+Adam Wight <adam.wight@wikimedia.de> <awight@wikimedia.org>
+Alangi Derick <alangiderick@gmail.com>
+Amir E. Aharoni <amir.aharoni@mail.huji.ac.il>
+Amir E. Aharoni <amir.aharoni@mail.huji.ac.il> <amire80@users.mediawiki.org>
+Amir Sarabadani <ladsgroup@gmail.com> <Ladsgroup@gmail.com>
+Antoine Musso <hashar@free.fr>
+Antoine Musso <hashar@free.fr> <hashar@users.mediawiki.org>
+Aryeh Gregor <ayg@aryeh.name> <simetrical@users.mediawiki.org>
+Brian Wolff <bawolff+wn@gmail.com> <bawolff@users.mediawiki.org>
+Brion Vibber <brion@wikimedia.org>
+Brion Vibber <brion@wikimedia.org> <brion@pobox.com>
+Brion Vibber <brion@wikimedia.org> <brion@users.mediawiki.org>
+Chad Horohoe <chadh@wikimedia.org>
+Chad Horohoe <chadh@wikimedia.org> <demon@users.mediawiki.org>
+Daniel Kinzler <dkinzler@wikimedia.org>
+Daniel Kinzler <dkinzler@wikimedia.org> <daniel.kinzler@wikimedia.de>
+David Causse <dcausse@wikimedia.org>
+Federico Leva <federicoleva@tiscali.it>
+Florian Schmidt <florian.schmidt.stargatewissen@gmail.com>
+Harry Burt <jarry1250@gmail.com>
+James D. Forrester <jforrester@wikimedia.org>
+Joel Sahleen <jsahleen@wikimedia.org>
+Justin Du <justin.d128@gmail.com>
+Kunal Grover <kunalgrover05@gmail.com>
+Kunal Mehta <legoktm@debian.org>
+Kunal Mehta <legoktm@debian.org> <legoktm@member.fsf.org>
+Kunal Mehta <legoktm@debian.org> <legoktm.wikipedia@gmail.com>
+Kunal Mehta <legoktm@debian.org> <legoktm@gmail.com>
+MarcoAurelio <strigiwm@gmail.com> <maurelio@tools.wmflabs.org>
+Marius Hoch <hoo@online.de>
+Matthew Walker <mwalker@wikimedia.org>
+Max Semenik <maxsem.wiki@gmail.com>
+Max Semenik <maxsem.wiki@gmail.com> <maxsem@users.mediawiki.org>
+Niklas Laxström <niklas.laxstrom@gmail.com>
+Niklas Laxström <niklas.laxstrom@gmail.com> <nikerabbit@users.mediawiki.org>
+Omid Hezaveh <ommmmid@gmail.com>
+Omid Hezaveh <ommmmid@gmail.com> <omid.hezaveh@futurice.com>
+Pau Giner <pginer@wikimedia.org>
+Pau Giner <pginer@wikimedia.org> <pau.giner@gmail.com>
+Raimond Spekking <raimond.spekking@gmail.com>
+Raimond Spekking <raimond.spekking@gmail.com> <raymond@users.mediawiki.org>
+Roan Kattouw <roan.kattouw@gmail.com>
+Roan Kattouw <roan.kattouw@gmail.com> <catrope@users.mediawiki.org>
+Santhosh Thottingal <santhosh.thottingal@gmail.com>
+Santhosh Thottingal <santhosh.thottingal@gmail.com> <santhosh@users.mediawiki.org>
+Siebrand Mazeland <siebrand@kitano.nl>
+Siebrand Mazeland <siebrand@kitano.nl> <s.mazeland@xs4all.nl>
+Siebrand Mazeland <siebrand@kitano.nl> <siebrand@users.mediawiki.org>
+Siebrand Mazeland <siebrand@kitano.nl> <siebrand@wikimedia.org>
+Tim Starling <tstarling@wikimedia.org>
+Tim Starling <tstarling@wikimedia.org> <tstarling@users.mediawiki.org>
+Timo Tijhof <krinklemail@gmail.com>
+Timo Tijhof <krinklemail@gmail.com> <ttijhof@wikimedia.org>
+Umherirrender <umherirrender_de.wp@web.de>
+Yifei He <eflyjason@gmail.com>
+Yuki Shira <shirayuking@gmail.com>
+[BOT] Translation updater bot <l10n-bot@translatewiki.net>
+[BOT] jenkins-bot <jenkins-bot@gerrit.wikimedia.org>
+[BOT] jenkins-bot <jenkins-bot@gerrit.wikimedia.org> <jenkins-bot@wikimedia.org>
+[BOT] libraryupgrader <tools.libraryupgrader@tools.wmflabs.org>
+paladox <thomasmulhall410@yahoo.com>
+seb35 <seb35wikipedia@gmail.com>
+Željko Filipin <zeljko.filipin@gmail.com>
diff --git a/Translate/.phan/config.php b/Translate/.phan/config.php
new file mode 100644
index 00000000..9e3ab293
--- /dev/null
+++ b/Translate/.phan/config.php
@@ -0,0 +1,51 @@
+<?php
+
+$cfg = require __DIR__ . '/../vendor/mediawiki/mediawiki-phan-config/src/config.php';
+
+// These are too spammy for now. TODO enable
+$cfg['null_casts_as_any_type'] = true;
+$cfg['scalar_implicit_cast'] = true;
+
+$cfg['file_list'] = array_merge(
+ $cfg['file_list'],
+ [
+ 'Message.php',
+ 'MessageCollection.php',
+ 'MessageGroupConfigurationParser.php',
+ 'MessageGroups.php',
+ 'MetaYamlSchemaExtender.php',
+ 'TranslateEditAddons.php',
+ 'TranslateHooks.php',
+ 'TranslateUtils.php',
+ ]
+);
+
+$cfg['directory_list'] = array_merge(
+ $cfg['directory_list'],
+ [
+ 'ffs',
+ 'messagegroups',
+ 'scripts',
+ 'src',
+ 'ttmserver',
+ 'utils',
+ '../../extensions/AbuseFilter',
+ '../../extensions/AdminLinks',
+ '../../extensions/cldr',
+ '../../extensions/Elastica',
+ '../../extensions/TranslationNotifications',
+ ]
+);
+
+$cfg['exclude_analysis_directory_list'] = array_merge(
+ $cfg['exclude_analysis_directory_list'],
+ [
+ '../../extensions/AbuseFilter',
+ '../../extensions/AdminLinks',
+ '../../extensions/cldr',
+ '../../extensions/Elastica',
+ '../../extensions/TranslationNotifications',
+ ]
+);
+
+return $cfg;
diff --git a/Translate/.phan/stubs/languagedetector.php b/Translate/.phan/stubs/languagedetector.php
new file mode 100644
index 00000000..bde412fb
--- /dev/null
+++ b/Translate/.phan/stubs/languagedetector.php
@@ -0,0 +1,54 @@
+<?php
+
+/**
+ * stub for crodas/LanguageDetector
+ * @phpcs:disable MediaWiki.Files.ClassMatchesFilename
+ */
+
+namespace LanguageDetector;
+
+class Learn {
+
+ public function __construct( Config $config ) {
+ }
+
+ /**
+ * @param callable $callback
+ * return self
+ */
+ public function addStepCallback( $callback ) {
+ }
+
+ /**
+ * @param string $label
+ * @param string $text
+ */
+ public function addSample( $label, $text ) {
+ }
+
+ public function clear() {
+ }
+
+ public function save( AbstractFormat $output ) {
+ }
+
+}
+
+class Config {
+
+ /** @param bool $use */
+ public function useMb( $use ) {
+ }
+
+}
+
+abstract class AbstractFormat {
+
+ /**
+ * @param string $path
+ * @return self
+ */
+ public static function initFormatByPath( $path ) {
+ }
+
+}
diff --git a/Translate/.phan/stubs/metayaml.php b/Translate/.phan/stubs/metayaml.php
new file mode 100644
index 00000000..c5521779
--- /dev/null
+++ b/Translate/.phan/stubs/metayaml.php
@@ -0,0 +1,38 @@
+<?php
+
+/**
+ * stub for suggested romaricdrigon/metayaml
+ * @phpcs:disable MediaWiki.Files.ClassMatchesFilename
+ */
+
+namespace RomaricDrigon\MetaYaml;
+
+class MetaYaml {
+
+ public function __construct( array $schema, $validate = false ) {
+ }
+
+ /** @return bool */
+ public function validateSchema() {
+ }
+
+ /** @return array */
+ public function getSchema() {
+ }
+
+ /**
+ * @param array $data
+ * @return bool
+ */
+ public function validate( array $data ) {
+ }
+
+ /**
+ * @param array $keys
+ * @param bool $unfold_all
+ * @return array
+ */
+ public function getDocumentationForNode( array $keys = [], $unfold_all = false ) {
+ }
+
+}
diff --git a/Translate/.phan/stubs/namespaces.php b/Translate/.phan/stubs/namespaces.php
new file mode 100644
index 00000000..9a6c8a05
--- /dev/null
+++ b/Translate/.phan/stubs/namespaces.php
@@ -0,0 +1,12 @@
+<?php
+
+/**
+ * namespace constant defined in extension.json of Translate extension
+ */
+define( 'NS_TRANSLATIONS', 1198 );
+define( 'NS_TRANSLATIONS_TALK', 1199 );
+
+/**
+ * namespace constant defined in translatewiki.net config
+ */
+define( 'NS_INTUITION', 1240 );
diff --git a/Translate/.phan/stubs/spyc.php b/Translate/.phan/stubs/spyc.php
new file mode 100644
index 00000000..27253438
--- /dev/null
+++ b/Translate/.phan/stubs/spyc.php
@@ -0,0 +1,18 @@
+<?php
+
+/**
+ * https://www.php.net/manual/en/yaml.constants.php
+ */
+define( 'YAML_UTF8_ENCODING', 1 );
+
+/**
+ * stub for suggested mustangostang/spyc
+ * @phpcs:disable MediaWiki.Files,MediaWiki.NamingConventions
+ */
+
+/**
+ * @param string $string
+ * @return array
+ */
+function spyc_load( $string ) {
+}
diff --git a/Translate/.phpcs.xml b/Translate/.phpcs.xml
new file mode 100644
index 00000000..0611ff75
--- /dev/null
+++ b/Translate/.phpcs.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0"?>
+<ruleset>
+ <rule ref="./vendor/mediawiki/mediawiki-codesniffer/MediaWiki">
+ <exclude name="Generic.Files.OneObjectStructurePerFile.MultipleFound" />
+ <exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationPrivate" />
+ <exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationProtected"/>
+ <exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationPublic" />
+ <exclude name="MediaWiki.Commenting.FunctionComment.WrongStyle" />
+ <exclude name="MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationPrivate" />
+ <exclude name="MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationProtected" />
+ <exclude name="MediaWiki.Commenting.PropertyDocumentation.MissingVar" />
+ <exclude name="MediaWiki.Commenting.PropertyDocumentation.WrongStyle" />
+ <exclude name="MediaWiki.PHPUnit.AssertEmpty.AssertEmptyUsed" />
+ <exclude name="MediaWiki.Usage.ExtendClassUsage.FunctionConfigUsage" />
+ <exclude name="MediaWiki.WhiteSpace.SpaceBeforeSingleLineComment.NewLineComment" />
+ </rule>
+ <rule ref="Generic.Files.LineLength">
+ <exclude-pattern>Translate\.alias\.php</exclude-pattern>
+ <exclude-pattern>Translate\.i18n\.magic\.php</exclude-pattern>
+ <exclude-pattern>*/tests/phpunit/data/Example*\.php</exclude-pattern>
+ </rule>
+ <rule ref="MediaWiki.NamingConventions.ValidGlobalName">
+ <properties>
+ <property name="ignoreList" type="array" value="$IP" />
+ </properties>
+ </rule>
+ <!-- New code uses parameter and return type hints. Repeating them in tags adds no additional value. -->
+ <rule ref="MediaWiki.Commenting.FunctionComment.MissingParamTag">
+ <exclude-pattern>*/src/*</exclude-pattern>
+ <exclude-pattern>*/tests/*</exclude-pattern>
+ </rule>
+ <!-- Same as above. No idea why it is named without "Tag". -->
+ <rule ref="MediaWiki.Commenting.FunctionComment.MissingReturn">
+ <exclude-pattern>*/src/*</exclude-pattern>
+ <exclude-pattern>*/tests/*</exclude-pattern>
+ </rule>
+ <rule ref="MediaWiki.Files.ClassMatchesFilename.NotMatch">
+ <exclude-pattern>tests/|ttmserver/|scripts/|Message\.php</exclude-pattern>
+ </rule>
+ <file>.</file>
+ <arg name="extensions" value="php"/>
+ <arg name="encoding" value="UTF-8"/>
+
+ <!-- See https://github.com/slevomat/coding-standard#sniffs-included-in-this-standard -->
+ <config name="installed_paths" value="../../slevomat/coding-standard"/>
+ <rule ref="SlevomatCodingStandard.ControlStructures.RequireNullCoalesceOperator" />
+ <rule ref="SlevomatCodingStandard.ControlStructures.UselessIfConditionWithReturn" />
+ <rule ref="SlevomatCodingStandard.ControlStructures.UselessTernaryOperator" />
+ <rule ref="SlevomatCodingStandard.Classes.PropertySpacing">
+ <properties>
+ <property name="minLinesCountBeforeWithComment" value="0"/>
+ <property name="maxLinesCountBeforeWithComment" value="0"/>
+ <property name="minLinesCountBeforeWithoutComment" value="0"/>
+ <property name="maxLinesCountBeforeWithoutComment" value="0"/>
+ </properties>
+ </rule>
+ <rule ref="SlevomatCodingStandard.Commenting.RequireOneLineDocComment" />
+ <rule ref="SlevomatCodingStandard.Whitespaces.DuplicateSpaces" />
+</ruleset>
diff --git a/Translate/.stylelintrc.json b/Translate/.stylelintrc.json
new file mode 100644
index 00000000..2bfd6522
--- /dev/null
+++ b/Translate/.stylelintrc.json
@@ -0,0 +1,9 @@
+{
+ "extends": "stylelint-config-wikimedia",
+ "rules": {
+ "selector-max-id": null,
+ "declaration-no-important": null,
+ "no-descending-specificity": null,
+ "declaration-property-unit-disallowed-list": null
+ }
+}
diff --git a/Translate/.svgo.config.js b/Translate/.svgo.config.js
new file mode 100644
index 00000000..e2abffbd
--- /dev/null
+++ b/Translate/.svgo.config.js
@@ -0,0 +1,55 @@
+/**
+ * SVGO Configuration
+ * Recommended options from:
+ * https://www.mediawiki.org/wiki/Manual:Coding_conventions/SVG#Exemplified_safe_configuration
+ */
+const { extendDefaultPlugins } = require( 'svgo' );
+module.exports = {
+ multipass: true,
+ plugins: extendDefaultPlugins( [
+ {
+ name: 'cleanupIDs',
+ active: false
+ },
+ {
+ name: 'removeDesc',
+ active: false
+ },
+ {
+ name: 'removeRasterImages',
+ active: true
+ },
+ {
+ name: 'removeTitle',
+ active: false
+ },
+ {
+ name: 'removeViewBox',
+ active: false
+ },
+ {
+ // If the SVG doesn't start with an XML declaration, then its MIME type will
+ // be detected as "text/plain" rather than "image/svg+xml" by libmagic and,
+ // consequently, MediaWiki's CSSMin CSS minifier. libmagic's default database
+ // currently requires that SVGs contain an XML declaration:
+ // https://github.com/threatstack/libmagic/blob/master/magic/Magdir/sgml#L5
+ name: 'removeXMLProcInst',
+ active: false
+ },
+ {
+ name: 'sortAttrs',
+ active: true
+ }
+ ] ),
+
+ // Configure the indent (default 4 spaces) used by `--pretty` here:
+ // @see https://github.com/svg/svgo/blob/master/lib/svgo/js2svg.js#L6 for more config options
+ //
+ // Unfortunately EOL cannot be configured, SVGO uses the platform's EOL marker.
+ // On non-unix systems the linebreaks will be normalized to LF (unix) only at git commit,
+ // assuming `core.autocrlf` is 'true' (default) or 'input'.
+ js2svg: {
+ indent: "\t",
+ pretty: true,
+ }
+}
diff --git a/Translate/CODE_OF_CONDUCT.md b/Translate/CODE_OF_CONDUCT.md
new file mode 100644
index 00000000..498acf76
--- /dev/null
+++ b/Translate/CODE_OF_CONDUCT.md
@@ -0,0 +1 @@
+The development of this software is covered by a [Code of Conduct](https://www.mediawiki.org/wiki/Special:MyLanguage/Code_of_Conduct).
diff --git a/Translate/COPYING b/Translate/COPYING
new file mode 100644
index 00000000..e1df7522
--- /dev/null
+++ b/Translate/COPYING
@@ -0,0 +1,346 @@
+The license text below "----" applies to all files within this distribution, other
+than those that are in a directory which contains files named "LICENSE" or
+"COPYING", or a subdirectory thereof. For those files, the license text contained in
+said file overrides any license information contained in directories of smaller depth.
+Alternative licenses are typically used for software that is provided by external
+parties, and merely packaged with this software for convenience.
+----
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/Translate/Doxyfile b/Translate/Doxyfile
new file mode 100644
index 00000000..65c46edf
--- /dev/null
+++ b/Translate/Doxyfile
@@ -0,0 +1,65 @@
+# Doxyfile 1.9.1
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+PROJECT_NAME = "Translate extension for MediaWiki"
+OUTPUT_DIRECTORY = docs
+JAVADOC_AUTOBRIEF = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+EXTRACT_STATIC = YES
+EXTRACT_LOCAL_CLASSES = YES
+HIDE_IN_BODY_DOCS = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+QUIET = YES
+WARN_IF_UNDOCUMENTED = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the input files
+#---------------------------------------------------------------------------
+
+INPUT = README ./
+FILE_PATTERNS = *.php
+RECURSIVE = YES
+EXCLUDE_PATTERNS = */vendor/*
+EXCLUDE_PATTERNS += */docs/*
+EXCLUDE_PATTERNS += */node_modules/*
+EXCLUDE_PATTERNS += */tests/*
+
+#---------------------------------------------------------------------------
+# Configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+SOURCE_BROWSER = YES
+SOURCE_TOOLTIPS = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+GENERATE_HTML = YES
+HTML_OUTPUT = php
+DISABLE_INDEX = YES
+GENERATE_TREEVIEW = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+GENERATE_LATEX = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+CALL_GRAPH = YES
+DOT_MULTI_TARGETS = YES
diff --git a/Translate/Gruntfile.js b/Translate/Gruntfile.js
new file mode 100644
index 00000000..c8ce6a0a
--- /dev/null
+++ b/Translate/Gruntfile.js
@@ -0,0 +1,41 @@
+'use strict';
+
+module.exports = function ( grunt ) {
+ const conf = grunt.file.readJSON( 'extension.json' );
+
+ grunt.loadNpmTasks( 'grunt-eslint' );
+ grunt.loadNpmTasks( 'grunt-banana-checker' );
+ grunt.loadNpmTasks( 'grunt-stylelint' );
+
+ grunt.initConfig( {
+ eslint: {
+ options: {
+ cache: true,
+ fix: grunt.option( 'fix' )
+ },
+ all: [
+ '**/*.{js,json}',
+ '!resources/lib/**',
+ '!{vendor,node_modules}/**'
+ ]
+ },
+ stylelint: {
+ all: [
+ '**/*.css',
+ '**/*.less',
+ '!node_modules/**',
+ '!vendor/**',
+ '!resources/lib/**'
+ ]
+ },
+ // eslint-disable-next-line compat/compat
+ banana: Object.assign( conf.MessagesDirs, {
+ options: {
+ requireLowerCase: 'initial'
+ }
+ } )
+ } );
+
+ grunt.registerTask( 'test', [ 'eslint', 'banana', 'stylelint' ] );
+ grunt.registerTask( 'default', 'test' );
+};
diff --git a/Translate/HISTORY b/Translate/HISTORY
new file mode 100644
index 00000000..4777fc1e
--- /dev/null
+++ b/Translate/HISTORY
@@ -0,0 +1,793 @@
+For newer recent changes, please refer the MediaWiki Language Extension Bundle
+release announcements or the git log.
+ https://www.mediawiki.org/wiki/MediaWiki_Language_Extension_Bundle
+
+== Change log ==
+* 2012-11-11
+- Dynamic message groups are now shown in list=messagecollection WebAPI.
+* 2012-11-10
+- Add RecentAdditionsMessageGroup:
+ Like RecentMessageGroup, but instead of proofreading
+ you can translate new message as they come in. Make this
+ view the home page of your browser, for example.
+* 2012-11-09
+- Unbalanced translate tags on translatable pages now fail gracefully again.
+* 2012-11-08
+- MediaWiki 1.19 or later is now required: support for 1.18 was dropped.
+* 2012-11-06
+- Add prop=revision to list=messagecollection WebAPI.
+* 2012-11-05
+- Avoid fatal errors with empty aggregate groups
+* 2012-10-29
+- Add support for Yandex machine translation service.
+* 2012-10-29
+- Sort order of the statistics tables is now included in the URL to make it linkable.
+ Enhances both LanguageStats and MessageGroupStats.
+* 2012-10-24
+- The lists of messages are now rendered faster and with less memory.
+ For a table of 5000 messages in Special:Translate, from 175M to 12M.
+- Better performance also for proofreading and page moves.
+* 2012-10-22
+- Ignored messages are no longer exported.
+ Except for source language or message documentation
+* 2012-10-21
+- Dropdown items on Special:AggregateGroups are now sorted alphabetically.
+* 2012-10-21
+- MediaWiki i18n now with modern support format: MediaWikiExtensionFFS.
+- You should check your config so that the second parameter
+ to the PremadeMediawikiExtensionsGroups constructor is correct.
+- Label and desc of message groups now have $context parameter.
+* 2012-10-18
+- Fixed infinite loop in MediaWikiMessageChecker with unbalanced
+ {{PLURAL}} in translations which gave fatal error on editing.
+* 2012-10-18
+- The page translation languages lists no longer overlaps other elements.
+* 2012-10-18
+- Added framework for key generation algorithms in GettextFFS.
+ Can be invoked in YAML config; backwards compatibility preserved.
+* 2012-10-16
+- Narayam now works in translation editors.
+* 2012-10-10
+- Inline translation editor is now the default.
+* 2012-10-08
+- New JsonFFS and related changes. Useful for jquery.i18n.
+* 2012-10-04
+- Added the concept of events in several places.
+ Useful for future CentralNotice integration.
+* 2012-10-02
+- Page translation is now enabled by default.
+ Still restricted by user group rights, which are not set by default.
+* 2012-09-22
+- Framework for automatic group workflow state changes.
+* 2012-09-21
+- Added collection of stats of proofread messages.
+* 2012-09-20
+- Added checker for too many or redundant plural forms in MediaWiki translations.
+* 2012-09-17
+- New script to create pretty graphs of MediaWiki language fallbacks.
+- Also rewritten plural-comparison.php.
+- Performance fixes to reduce timeouts when translating.
+* 2012-09-07
+- Special:ManageMessageGroups now shows new messages
+ conflicting with existing pages in the wiki as changes.
+* 2012-09-05
+- Completed integration with the new TranslateSvg extension.
+* 2012-08-31
+- Interface usability: for page translation, export tab now
+ shows the wikitext source of the translatable page.
+* 2012-08-19
+- Added support for AndroidXml (Android apps' string.xml).
+* 2012-08-19
+- $wgTranslateRcFilterDefault can be used to show
+ translation changes in the RecentChanges by default.
+* 2012-08-17
+- Fixes to avoid double counting of messages in statistics.
+* 2012-08-07
+- Deleting a translatable page no longer deletes
+ translatable pages which are subpages of it.
+* 2012-08-02
+- Page translation no longer reuses deleted translation unit identifiers.
+* 2012-08-02
+- Special:ManageMessageGroups is now more efficient,
+ able to manage groups with more than 10 000 messages.
+* 2012-08-02
+- GettextFFS now handles messages ending in \ better
+* 2012-07-30
+- Restored compatibility with MediaWiki 1.18.
+* 2012-07-29
+- Dollar signs ($) can now be used in translatable pages without problems.
+* 2012-07-26
+- Introduction of and many improvements to
+ Solr TTMServer (translation memory).
+* 2012-07-09
+- Special:TranslationStats now has a date picker to easily fill
+ starting date field; it replaces the manual input of all the zeros.
+* 2012-07-02
+- Special:MessageGroupStats now doesn't show
+ languages under 2 % of translation by default.
+* 2012-06-27
+- Fixed fatal errors in Special:MessageGroupStats
+* 2012-06-21
+- Fixed recent incompatibility with MW 1.19.
+- Improved hiding of excluded groups on Special:LanguageStats.
+* 2012-06-11
+- Allow setting message group state for a group only for specific user right.
+ This redefines $wgTranslateWorkflowStates to hold the rights required for
+ a state transition.
+- Allow excluding and including languages in YAML configuration. YAML
+ files will have new top level section called LANGUAGES. LANGUAGES can have
+ optional subsections whitelist and blacklist, which take an array of language
+ codes. If a subsection is not specified, the white/blacklist value will
+ default to *, meaning all known languages. Whitelist overrides blacklist.
+* 2012-06-04
+- Show the priority languages in Special:Translate.
+* 2012-06-03
+- Option skipgroup added to export.php to filter wildcard groups.
+* 2012-06-02
+- $wgTranslateDisablePreSaveTransform added to make the disabling of PST for
+ message pages configurable, so that mediawiki.org etc. isn't broken.
+* 2012-05-29
+- Implemented and used convertWhiteSpaceToHTML in JavaScript.
+- Dynamic groups are ignored in Special:MessageGroupStats.
+* 2012-05-18
+- Fatal error on Special:AggregateGroups fixed.
+- Sort aggregates and their subgroups on Special:AggregateGroups.
+- Outdated caches were not recreated when file and wiki state matched.
+- Page translation icons are now 264dpi.
+- Unnecessary token check removed from Special:AggregateGroups.
+* 2012-05-14
+- Made link appearance in <languages/> bar saner for edge cases. Links to
+ existing, but untranslated pages are not shown as red anymore.
+- Fixed bug where fields for new aggregate groups on Special:AggregateGroups
+ were sometimes pre-filled.
+- When translation editor is open, a warning is displayed when trying to leave
+ the page.
+- OpenLayersFFS was removed.
+- Administrative pages are now links in tabs.
+* 2012-05-10
+- Fix to prevent page protection from confusing page translation feature.
+* 2012-05-09
+- Decimals on Special:LanguageStats and Special:MessageGroupStats were removed
+ for improved readability.
+* 2012-05-08
+- processMessageChanges was updated to reduce the number of false positives of
+ changed or deleted messages.
+- Deprecated languages are no longer displayed in the language selector on
+ Special:Translate.
+* 2012-05-07
+- FFS.php was split into several files.
+* 2012-05-03
+- $wgTranslateDelayedMessageIndexRebuild was added. If you have lots of message
+ groups, especially file based ones, and the message index rebuilding gets
+ slow, set this to true to delay the rebuilding via JobQueue. This only makes
+ sense if you have configured jobs to be processed outside of requests via cron
+ or similar.
+- API tokens are provided in a saner way now.
+- "ignore" option was added to Special:ManageMessageGroups (regression fixed).
+* 2012-04-30
+- Comparison of fuzzied translations was improved.
+* 2012-04-25
+- Special:ManageMessageGroups was improved so that the update process takes less
+ time. scripts/processMessageChanges.php should be run from the command line.
+ This stages all required changes. After that, the stated changes can be
+ assessed on Special:ManageMessageGroups. Processing takes place using the
+ job queue.
+* 2012-04-16
+- TMessage::setTag renamed to TMessage::addTag.
+* 2012-04-11
+- Option codemaponly added to export.php to so that only code mapped languages
+ can be exported.
+- Script autoexport.php was removed. Use export.php.
+* 2012-04-10
+- New MessageIndex backends: database and cdb.
+- Fixed an out of memory issue with page translation feature on MW 1.18 and
+ older.
+* 2012-04-05
+- JavaFFS was made more robust.
+* 2012-04-03
+- Profiling updates for message index related function calls.
+- Exception on diff pages fixed.
+* 2012-04-02
+- Improved metadata handling when renaming and deleting translatable pages.
+* 2012-03-27
+- Switch "hours" added to export.php.
+- Bug fix for inline editor to remove the "untranslated" class.
+* 2012-03-26
+- Deleting an aggregate group must be confirmed.
+* 2012-03-24
+- list-mwext-i18n-files.php was simplified.
+* 2012-03-22
+- $wgTranslateAddMWExtensionGroups was removed.
+- Messages are loaded using parent::getDefinitions() to allow decoupling
+ MediaWiki message groups from live wiki code.
+* 2012-03-21
+- ext.translate.special.languagestats.js no longer uses onclick.
+- Some issues with overcounting because of aggregate groups were resolved.
+* 2012-03-20
+- ext.translate.special.pagetranslation.js made more reusable: The generic
+ autocompletion funcionality is in ext.translate.multiselectautocomplete.js and
+ ext.translate.special.pagetranslation.js only apply it to
+ Special:PageTranslation.
+* 2012-03-19
+- Group ID prefix for aggregate groups through Special:AggregateGroup was
+ updated from "ag-" to "agg-".
+* 2012-03-16
+- A bug was fixed when renaming a translatable page with priority languages.
+- Plural rules were updates to CLDR 21.0.
+- More validations added to Special:AggregateGroup input.
+* 2012-03-14
+- Adding and removing a group from an aggregate group is now logged.
+* 2012-03-13
+- Removed groupprefix option from export.php and sync-group.php. Use * wildcard
+ with group option.
+- Page translation widget was made more easily reusable.
+- sync-group.php can now find the timestamp for git checkouts.
+- export.php no longer requires definitionFile when using gettext post processing
+ with ppgettext.
+* 2012-03-12
+- Special:LanguageStats group collapsing now supports nested subgroups.
+* 2012-03-11
+- Support for shared TTMServer databases was added.
+- Suggestions from different TTMServers are now grouped.
+- Output of TTMServer api module has changed.
+- TTMServer configs can override the link symbol by adding value for symbol in
+ the config.
+* 2012-03-07
+- $wgTranslateGroupStructure is no longer used. If you are using aggregate
+ message groups, you can remove the old settings and everything still works as
+ expected. If you are not yet using aggregate message groups, you should do
+ that to not confuse users.
+- Gettext file were not shown in translation editor when using recent
+ translations task.
+- New Special page AggregateGroups where translation administrator can group
+ pages into subgroups.
+* 2012-03-06
+- Translation administrator can now suggest languages translatable page should
+ be primarily translated into with a note or preventing other language
+ translations.
+* 2012-03-05
+- Support for using remote TTMServers via API interface added.
+- Support for tmserver was removed. Translate comes with TTMServer enabled by
+ default. To bootstrap it with current translations, run php
+ scripts/ttmserver-export.php.
+- Message documentation was not shown when translating for subgroups nested more
+ than one level deep.
+- Special:TranslationStats can now graph review and reviewer activity.
+* 2012-03-02
+- Encourage/discourage changes of translatable pages are now logged.
+* 2012-03-01
+- Added upper length for translation memory suggestions because of performance
+ concerns.
+* 2012-02-29
+- Configuring wgMainCache is no longer necessary. Translate extension will use
+ any available caching mechanism automatically when needed.
+- Support for Google Translate was removed, as the free service is no more.
+- Special:LanguageStats' default value derived from current interface language
+ now works also for anonymous users (only relevant when using
+ LanguageSelector).
+* 2012-02-24
+- Help link is no longer added twice in Special:SupportedLanguages.
+* 2012-02-21
+- Gettext headers can now be customised with Translate:GettextFFS:headerFields
+ hook. Less headers are modified by default.
+- Message index no longer goes into recursive loop on some cases when creating
+ the index the first time.
+- Improved the position of help links in Monobook skin.
+* 2012-02-19
+- MediaWiki 1.18 or later is now required.
+- Group description of translatable pages can be extended by adding content to
+ [[MediaWiki:Tp-custom-<group id>]].
+* 2012-02-13
+- Updated some deprecated function calls
+- New translation memory called TTMServer comes with the extension and is
+ enabled by default.
+* 2012-02-11
+- Some missing action- messages added.
+* 2012-02-10
+- New tabbed task-based UI on Special:Translate.
+* 2012-02-06
+- API module for message group stats written by Tim Gerundt.
+* 2012-02-01
+- Missing JavaScript dependency added to messagetable.
+- No more logging state changes where the state didn't actually change.
+- Allow syntax like
+ {{Special:MessageGroupStats|group=page-Main/sub|suppresscomplete=1}}.
+* 2012-01-31
+- export.php: switch "grouptrail" renamed to "groupprefix" and switch "groups".
+ was dropped. "group" now takes a comma separated list of groups IDs, too.
+- sync-group.php: switch "groupprefix" added.
+- Double counting of messages when adding message groups and aggregate groups to
+ another aggregate group was partially resolved.
+- Messages for translatable pages for which translation is discouraged, are no
+ longer added to aggregate message groups to avoid mismatches in statistics.
+- Special:MessageGroupStats now works for group IDs with spaces.
+- Updates were made for the translation memory service, to avoid serving
+ incorrect or outdated suggestions.
+* 2012-01-30
+- Statictics issues introduced recently were resolved.
+- "lang" attributes were added to Special:SupportedLanguages.
+- [[Special:Translate/groupname]] links for translatable pages with spaces or
+ colons in them are now possible. For page "Some page" it is:
+ [[Special:Translate/page-Some_page]].
+- The JavaScript translation editor now shows the code browser and gettext
+ comments when translating aggregate message groups.
+- Logging was added group statistics caching to determine if cache purges happen
+ too often.
+* 2012-01-29
+- Update functionality for the translation memory was added.
+* 2012-01-28
+- Code readability improvements were made.
+- A translation memory service was added, including a bootstrap script.
+* 2012-01-22
+- Message groups are no longer forced to implement getBools. getTags is the
+ official way to do this.
+- getDefinitions was added to the MessageGroupInterface.
+- The public $namespaces variable in MessageGroup was removed.
+* 2012-01-20
+- Browser compatibility updates were made in CSS.
+* 2012-01-19
+- Deprecated hook LanguageGetMagic was removed.
+* 2012-01-16
+- Help icons linking to documentation at
+ https://www.mediawiki.org/Help:Extension:Translate or sub pages were added to
+ extension functionality.
+- Backward compatibility with MediaWiki 1.18 was restored.
+* 2012-01-13
+- export.php has a switch "no-fuzzy" that will filter out fuzzy messages for
+ file based message groups.
+- Special:PageTranslation has now better error checking for invalid and
+ duplicate translation unit names.
+- Special pages have now help links.
+- Images were moved to a resources sub folder.
+* 2012-01-11
+- Translate page group id prefix was changed from page| to page-. Some old
+ links need to be updated, some still work.
+* 2012-01-10
+- Translate extension no longer unconditionally suppresses edit intros
+- Fixed compatibility issue with logs on < MW 1.18
+* 2012-01-06
+- Fixes to the sizing of the translation editor dialog
+* 2012-01-05
+- Fixed a fatal error that sometimes occurred when translation page title used
+ GRAMMAR and the page was viewed with English UI.
+* 2012-01-04
+- The summary row in Special:LanguageStats and Special:MessageGroupStats is no
+ longer sorted with rest of the rows.
+- There is now new message group for recent translations intented for reviewing
+ new translations
+- Fixed a bug that prevented changing workflow state of page translation
+ message group
+* 2012-01-02
+- Special:MyLanguage can now be used with language subpage to use that as the
+ default fallback instead of untranslated version
+- The flash of unstylized content effect is reduced
+- FuzzyBot user was not always created, leading to missing log entries
+ for example
+- export.php fixed after it was broken due to recent refactorings
+* 2011-12-26
+- Added {{#translationdialog:title}} for creating a link to the translation
+ dialog
+* 2011-12-25
+- Made the extension work without legacy JavaScript globals
+- PythonSingleFFS now respects codemap
+* 2011-12-23
+- Translatable pages can now be discouraged, meaning that they won't show up in
+ the usually places so that translators don't translate them needlessy.
+* 2011-11-06
+- Rewrote Special:ImportTranslations JavaScript so that it actually works
+- Fixed compatibility with MW 1.17 in JavaScript
+* 2011-11-04
+- The 'no translations' RC filter options was lost when navigating
+- Made MessageCache more robust
+- fuzzy.php can now take optional namespace prefix for each message
+* 2011-10-30
+- The script referenced at 2011-08-26 is now included in the source
+- Fixed compatibility with MW 1.17
+* 2011-10-28
+- New configuration variable $wgTranslatePermissionUrl
+- Message review feature, available to users in translate-proofr group
+- Message collections can now have properties and allow filtering on them
+ This is still work in progress and is likely to get improvements over time
+* 2011-10-14
+- New API module: messagetranslations
+* 2011-10-12
+- Multiple bug fixes and improvements to translatable page moving feature
+* 2011-10-07
+- $wgTranslateNewsletterPreference was introduced (default: false). Setting this
+ to true, will once again add the "Do not send me e-mail newsletters"
+ preference.
+* 2011-10-03
+- MessageIndex can now be stored in object cache (default) or in a file.
+- Fixed an error that sometimes prevented translating messages that had
+ been renamed
+* 2011-10-01
+- Changed index on translate_sections database table
+- Fixed escaping in PythonSingleFFS parser
+- Fixed a bug in getSourceLanguage for certain message group classes
+* 2011-09-29
+- Groups folder was cleaned. See groups/README for more information.
+- Fixed PHP notice when marking page for Translation with MW 1.19
+- Fixed a bug in RubyYamlFFS::unflattenPlural, added unit tests
+* 2011-09-28
+- Special:AdvancedTranslate is not enabled by default anymore
+- Special:TranslationChanges was removed
+- Started taking PHP code out of the groups/ folder anticipating Wikimedia
+ review. Later we will move all content of the groups folder elsewhere to
+ reduce the number of changes of changes to the Translate extension
+ considerably.
+* 2011-09-26
+- Special:SupportedLanguages can now show site specific messages in
+ supportedlanguages-localsummary message
+* 2011-09-23
+- Change log up to date
+* 2011-09-21
+- It is now possible to nest AggregateMessageGroups
+* 2011-09-19
+- New statistics backend considered stable
+- Special:MessageGroupStatistics
+- Translations that were recognized as redirect by MediaWiki no longer cause PHP notices
+- Made groupStatistics.php script more efficient
+* 2011-09-16
+- Languages are now sorted correctly on Special:LanguageStats for groups > 10k messages
+- It is now possible to specify starting point for graphs in Special:TranslationStats
+* 2011-09-15
+- All code is now using the MessageHandle class
+- ArrayMemoryCache removed due to new Statistics backend
+- New database table translate_groupstats
+* 2011-09-14
+- Sql files moved to a subfolder
+* 2011-09-13
+- Magic words exporter is no longer compatible with MediaWiki <=1.15
+* 2011-09-11
+- Log message for translatable page deletion was incorrect
+- Made page translation log compatible with the new logging system
+* 2011-09-06
+- If magic-export.php does not find a header, output a basic header rather than exitting
+* 2011-09-02
+- Fixed table border display issue on chrome for rtl messages
+- Everything converted to use ResoureLoader framework
+- js directory renamed to resources
+- Officially dropped support for MediaWiki 1.16
+* 2011-09-01
+- Message definition changes were not always displayed for fuzzy messages
+- Dropped embedded jQuery ui
+* 2011-08-31
+- Fixed issues with protocol relative urls
+* 2011-08-30
+- Special page TranslationChanges disabled, pending for removal
+- Got rid of MSG constants
+- Introduces TranslateHooks class
+- Removed efTranslateCheckPT() - please make sure you run update.php when needed
+* 2011-08-29
+- Message and rtl related fixes
+* 2011-08-26
+- revtag_type table is now obsolete - run scripts/migrate-schema2.php to update schema
+ the wiki will continue working even if this script is not run immediately
+* 2011-08-22
+- Partial update to CLDR and Gettext plural forms
+* 2011-08-18
+- Made compatible with new fallback method in MW
+* 2011-08-05
+- Translate will use MW page content language feature is available
+* 2011-08-02
+- Do not export TRANSLATE_FUZZY in PythonSingleFFS class
+* 2011-07-23
+- Many rtl related fixes, some only used when MW supports them
+* 2011-07-15
+- Collapsible javascript caused errors with older MWs
+* 2011-07-11
+- Rtl and font related fixes
+- Special:SupportLanguages is now listed on Special:SpecialPages
+- Google suggestions should obey the group source language
+- Update limit selector values. Either people want to show a little by default, or they want to see all of them.
+* 2011-07-10
+- Added some phpunit tests
+* 2011-07-09
+- Rtl fixes
+- Groups can now have source language different from wiki content language
+- action=purge on Special:LanguageStats clears cached stats
+* 2011-07-01
+- Fixed ResourceLoader issue with certain MW versions
+* 2011-06-30
+- Rtl and language tagging fixes
+* 2011-06-26
+- Marking pages for translation the first time works again
+* 2011-06-24
+- Updated bundled spyc library to the latest version
+* 2011-06-22
+- Fixed page translation marking related bug
+* 2011-06-20
+- Improved the UI of Special:ManageMessageGroups somewhat
+* 2011-06-17
+- Page translation now generates hidden markup-less source page versions
+* 2011-06-09
+- Added language cloud to Special:SupportedLanguages
+* 2011-06-08
+- Mark this page for translation link was not always shown
+* 2011-06-07
+- Restored compatibility with MW 1.16
+* 2011-06-05
+- Varios fixes to translatable/translation page deletion
+- Gettext documentation counts against translated messages for message documentation language
+* 2011-06-04
+- Added a special page that allows deleting translatable pages or parts of them.
+- Hack for making Special:MyLanguage links red if target doesn't exists
+* 2011-06-03
+- Handle Chihuahua skin
+* 2011-06-02
+- New hook which tries to do the right thing for subpagelist when viewing translatable pages
+* 2011-04-25
+- Javascript and rtl fixes
+* 2011-04-22
+- With recent MW, the extension now provides form for searching in translations only
+ Can also limit to certain language only
+* 2011-04-18
+- Show the ajax editor also for users without rights, as it contains useful information
+- Fixed compatibility issue with CologneBlue skin
+* 2011-04-16
+- Improve style loading to avoid page flash
+* 2011-04-13
+- Splitted Translate.css into smaller files
+* 2011-04-04
+- Updated gettext plural rule for cy
+- Fixed usability issue with summary field
+- Updated spyc from upstream repo
+- Armenian (hy) needs plural in some cases. MediaWiki already has it, also add to gettext
+- Don't use syck-pecl for dumping, the output is horrible
+- In translation dialog, made input elements grow automatically.
+* 2011-04-03
+- Updated plural data for new CLDR
+* 2011-03-16
+- Added ask question button also in the basic editor (still needs javascript to work :(
+* 2011-03-14
+- Fixed message group caching for single file based message groups.
+- Hooked diff pages to provide more information about the message.
+ Useful for those who follow recent changes feeds in review purposes
+- New class MessageHandle
+* 2011-03-11
+- In Special:ManageMessageGroups - don't expose actions to users who are not allowed to do them
+- Encourage translators to ask for help with a button
+* 2011-03-08
+- Added support for pecl syck, which is magnitudes faster and uses less memory.
+ Like all the other supported yaml implementations, this one has its own bugs that need to be worked around.
+* 2011-03-06
+- Speed and memory improvements to Special:LangugeStats
+* 2011-02-28
+- Special:LanguageStats: Fix IE-bug. Element creation must have valid syntax, does not accept shortcuts
+* 2011-02-01
+- Allow TRANSLATE_FUZZY to be redefined to a nonstandard value in LocalSettings.php
+* 2011-01-24
+- Moved all Special*.php files to specials/ folder. Update autoloader to match
+* 2011-01-22
+- Fixed character escpaing in Python FFS writer.
+* 2011-01-19
+- Improved suport for multi-line messages in OpenLayers FFS
+* 2011-01-17
+- Use the new ArticlePrepareTextForEdit hook to disable pre-save transformation on all message pages except for the message documentation language.
+* 2011-01-15
+- Read authors from python message files.
+* 2011-01-05
+- Use the new jquery.colorUtil to make the brightness 30% higher when cells are hovered on Special:LanguageStats
+
+=== 2010 ===
+
+* 2010-12-31
+- Use new hook to translate message documentation language code
+- Some improvements to Special:Translations: display language name, enable sorting, display count
+* 2010-12-24
+- Last bits of mw-js conventions
+* 2010-12-10
+- Transform translated page titles
+* 2010-11-05
+- Renamed TranslatePage to SpecialTranslate to follow the naming pattern
+- ViewUntranslated task was showing wrong table header
+* 2010-10-24
+- Support for Microsoft Translator
+* 2010-10-06
+- Fixed two bugs in translatable pages parsing which caused non-translatable pages to be considered as tagged
+- Performance improvements and bug fixes to message group cache
+* 2010-10-02
+- Fixed huge text in translation dialog
+* 2010-09-30
+- Fix X-POT-Import-date formatting
+* 2010-09-29
+- Lots of code cleanup related to message groups
+* 2010-09-27
+- Added parameter 'skip' to make it possible to export * but not 'en' and 'qqq' for example.
+* 2010-09-26
+- Allow translation of titles of translatable pages
+- Avoid Fatal when someone tries to export AggregateMessageGroup
+* 2010-09-25
+- First Api Query Module messagecollection
+* 2010-08-23
+- Fixed multiple bugs in Special:TranslationStats
+* 2010-08-20
+- Documentation updated a lot, added doxygen spec file.
+* 2010-06-12
+- Removed $wgGoogleApiKey, $wgTranslateTM and $wgTranslateApertium
+- You need to migrate to $wgTranslateTranslationServices
+- Page translation has been improved a lot
+- translation memory suggestions can now be loaded asynchronously
+* 2010-03-27
+- Improvements to js edit, like save and open next
+* 2010-02-24
+- Dropped $wgTranslateCssLocation. In MW 1.16 and later you can use $wgExtensionAssetsPath
+* 2010-01-24
+- Support for Apertium machine translation service
+- Fixed issue with jQuery and Vector skin
+* 2010-01-22
+- Support for using Google's translation api as a source for tm suggestions
+- Interface element for copying tm suggestion into text area
+* 2010-01-16 Translation memory suggestions are aggregated intelligently to save space
+ There is link back to the original message in tm suggestions
+ tm-export superceded dump-tm
+
+=== Changes in version 12 ===
+- Page translation
+- New fuzzy system, should be faster now
+- Edit are consistently filled when starting translation
+
+=== Changes in version 11 ===
+* 2009-05-09
+- Support added for OpenLayers
+- Page translation feature updated. Not backwards compatible
+* 2009-04-28 Tweaks for new preferences system
+* 2009-04-27 Updated preferences handling; only show when relevant
+* 2009-04-24 Updated preferences handling to work with MediaWiki 1.15a r49790 and up
+* 2009-04-23 Link added to message group in the source message fieldset description
+* 2009-04-15 Added class 'mw-sp-translate-[id]' to all message groups on Special:Translate
+* 2009-04-04:2 Support added for NOCC
+* 2009-04-04:1 PhpVariables Mantis header inconsistency fixed
+* 2009-03-29 Table header on Special:LanguageStats suppressed when all translations are complete
+
+=== Changes in version 10 ===
+* 2009-03-24 Also 2 decimals for fuzzy in Special:LanguageStats
+* 2009-03-23 Localised number formatting in Special:LanguageStats
+* 2009-02-22
+- Intro suppressed
+- message documentation no longer show warnings
+- improved keeping track of the language that is being translated in
+* 2009-02-14 Export header for MantisBT updated
+* 2009-01-18:1 Bug in autoexport fixed. Provides realiable output again
+* 2009-01-17:2 Content translation was disabled
+* 2009-01-17:1 Headers in gettext files no longer multiply
+* 2009-01-15 Support structure for Commonist added
+* 2009-01-11:4 Export time checks for special page aliases and updated FreeCol problematic checks
+* 2009-01-11:3 Skip optionals and ignored messages in previous/next to avoid accidental translations
+* 2009-01-11:2 wgMaxShellMemory increased for sync-group.php to avoid out of memory issues
+* 2009-01-11:1 New options added to and performance improvements for autoexport.php
+* 2008-12-31 XHTML fixes in Special:LanguageStats
+* 2008-12-18 Special:TranslationStats allow passing a language parameter now and uses fontconfig if available
+* 2008-12-16 Miscellaneous problematic checks updated
+* 2008-12-15:2 Export headers for MantisBT updated
+* 2008-12-15:1 task to display untranslation optional messages was added
+* 2008-12-07 bug in export to file in web interface caused empty translations to be exported
+* 2008-11-30:1 added Special:LanguageStats for real-time translation statistics
+* 2008-11-24:2 fallback messages in the edit screen now have an edit link
+* 2008-11-24:1 added Special:Translations to show all translations of a message
+* 2008-09-09:1 add message checks for Mantis
+* 2008-09-07 add support for Mantis
+* 2008-09-05 add languageeditstats.php to provide a top list of edits per language
+* 2008-09-05 add import for groups containing "." like core-1.13
+* 2008-08-08:1 experimental sync-group to import external changes and keep them in sync
+* 2008-08-04:1 add "Other translations" link to Special:Prefexindex in sidebar toolbox
+* 2008-07-29:2 support for variables and purging and fallbacks in page translation
+* 2008-07-29:1 bug fixes and enhanced magic word support for AdvancedTranslate
+* 2008-07-26:2 proper parents for branched messages
+* 2008-07-26:1
+ - improved speed and memory usage
+ - experimental <translate> tag for wikipage translation
+* 2008-07-17:1
+- simple form to generate graphs
+- scale and count parameters for graphs
+* 2008-07-15:2 new check for unaltered namespaces in pagename messages of MediaWiki
+* 2008-07-15:1
+ - improved message checks
+ - can now work for meta groups too
+ - fixed messages not shown in the list anymore, but script still needed to find
+ the broken ones
+* 2008-07-13:2 group filter for graphs
+* 2008-07-13:1 experimental alias-export for extensions
+* 2008-07-08:1 simple edit stats with phplot
+* 2008-07-05:1 fuzzy.php was ignoring the namespace
+* 2008-07-04:2
+ - use an existing hook for quick links
+ - possible fix for Windows
+* 2008-07-04:1 poimport uses correct namespace
+* 2008-07-01:1
+ - Fix gettext message name snippets: filter / and trim after trailing
+ - Load normal comments from gettext files
+ - Quick links for viewing, using a private hook
+* 2008-06-30:3 Check for unknown vars for mediawiki type
+* 2008-06-30:2 Checks for missing and unknown variables for FreeCol
+* 2008-06-30:1 More contrast in the new default page for Special translate
+* 2008-06-29:2 Branched core messages now load translations from trunk files too
+
+=== Changes in version 9 ===
+* Released 2008-06-29
+* (bug 12955) Numbers should be localized in Translate extension
+* Support branches for core messages
+* fuzzy.php got support for --comment and --skiplanguages
+* untranslated is now the default task
+* truncate very long message names in table view
+* show definition closer to edit area
+* show the group of message when editing
+* branched core messages should now export properly
+* $wgTranslateBlacklist added to prevent edits to certain language/group combinations
+* new exporters
+* changed the way of adding MediaWiki extensions
+* support for having messages in namespaces other than NS_MEDIAWIKi
+* try to load qqq from files if not found from the database
+* added $wgTranslateAuthorBlacklist
+* new options to groupStatistics.php: --fuzzy and --skipzero
+* fuzzy respects now $wgTranslateMessageNamespaces
+* freecol not added by default
+* Messages keys can now start with capital letter, but have to be unique after normalising case and spaces
+* poimport will no longer replace translation in database with empty string
+* Support for exporting very basic Xliff files (no import yet)
+* Task for listing problematic messages
+* CreateCheckIndex.php maintenance script for creating a list of problematic messsages
+* Aliases for special pages
+* improvements to Special:Magic and support for translating special page aliases for extensions
+* more generic check framework
+* new front page for Special:Translate
+* desc and descmsg support for mediawiki extension group definitions
+
+=== Changes in version 8 ===
+* Released 2008-02-06
+* export.php for even faster exporting (only core messages supported currently)
+* Message groups can now have description or notes for translations
+* Enhanced edit view with fieldsets and message documentation
+* New variable $wgTranslateDocumentationLanguageCode
+* Fixed Special:Magic form submission and selector bug
+* --skiplanguages option for groupStatistics.php
+* Force keys to lower case in serialised index to avoid misses due to case
+* Changed fuzzy.php to assume location of commandline.inc, so that it can be run from any location
+* Preserve whitespace also in Special:Translate table
+* Run checks on editing view (current translation or submitted translation in preview) and display them to user
+* Fixed a bug where empty text area would be filled with current translation even after first page load
+* Don't fuzzy Documentation language
+* Export task was erronously outputting as plain
+* New variable $wgTranslateCC for adding custom groups
+* WikiMessageGroup class, which is easy to use class for defining a message group for wiki's custom user interface elements
+* Array keys in $wgTranslateEC and $wgTranslateAC are now used for alphabetical sorting only. MessageGroup::$id and MessageGroup::getId() are used for everything else.
+* Export documentation messages as "extracted comments" in po export
+* Import fuzzy messages as fuzzy in po import
+* Experimental support for some extensions in export.php
+* export.php can now export most supported groups
+* autoexport.php helper
+* Content-Disposition header for po export
+* Link to Special:Translate added in Special:Version
+* Possibility to add comments when editing with Special:magic
+
+=== Changes in version 7 ===
+* Released 2007-12-29
+* New HTMLSelector class
+* Cleaned user interface of Special:Translate
+* Special:TranslationChanges remembers hours option
+* Removed for a while unused setting $wgTranslateTryLoad
+* TranslateTasks::getTask returns null for invalid keys instead of throwing en error
+* New member function TranslateTask::plainOutput - Tasks can use it to request plain text output
+* Add css as a separate file instead of adding it to request output and new setting for it: $wgTranslateCssLocation
+* Filled readme for old changes a bit
+* Experimental po import
+* groupStatistics.php for creating statistics for groups
+
+=== Changes in version 6 ===
+* Released 2007-12-21
+* New classes MessageCollection and TMessage
+* Experimental po export
+* MessageGroup::fillBools has changed to getBools and usage changed a little
+* New member function MessageGroup::isMeta
+* Lots of new extensions supported
+
+=== Changes in version 5 ===
+* Released 2007-11-14
+* CreateMessageIndex.php which creates serialised index of message key -> group
+
+=== Changes in version 4 ===
+* New "task-based" interface
+* Paging of messages
+* Separation of translation and interface language
+* New mediawiki extensions available for translation
+* Support for extensions which use splitted i18n files
diff --git a/Translate/Message.php b/Translate/Message.php
new file mode 100644
index 00000000..7cd7f711
--- /dev/null
+++ b/Translate/Message.php
@@ -0,0 +1,208 @@
+<?php
+/**
+ * Classes for message objects TMessage, ThinMessage and FatMessage.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @copyright Copyright © 2008-2010, Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * Interface for message objects used by MessageCollection.
+ */
+abstract class TMessage {
+ /** @var string Message display key. */
+ protected $key;
+ /** @var string Message definition. */
+ protected $definition;
+ /** @var string Committed in-file translation. */
+ protected $infile;
+ /** @var string[] Message tags. */
+ protected $tags = [];
+ /** @var array Message properties. */
+ protected $props = [];
+ /** @var string[] Message reviewers. */
+ protected $reviewers = [];
+
+ /**
+ * Creates new message object.
+ *
+ * @param string $key Unique key identifying this message.
+ * @param string $definition The authoritave definition of this message.
+ */
+ public function __construct( $key, $definition ) {
+ $this->key = $key;
+ $this->definition = $definition;
+ }
+
+ /**
+ * Get the message key.
+ * @return string
+ */
+ public function key() {
+ return $this->key;
+ }
+
+ /**
+ * Get the message definition.
+ * @return string
+ */
+ public function definition() {
+ return $this->definition;
+ }
+
+ /**
+ * Get the message translation.
+ * @return ?string
+ */
+ abstract public function translation();
+
+ /**
+ * Set the committed translation.
+ * @param string $text
+ */
+ public function setInfile( $text ) {
+ $this->infile = $text;
+ }
+
+ /**
+ * Returns the committed translation.
+ * @return ?string
+ */
+ public function infile() {
+ return $this->infile;
+ }
+
+ /**
+ * Add a tag for this message.
+ * @param string $tag
+ */
+ public function addTag( $tag ) {
+ $this->tags[] = $tag;
+ }
+
+ /**
+ * Check if this message has a given tag.
+ * @param string $tag
+ * @return bool
+ */
+ public function hasTag( $tag ) {
+ return in_array( $tag, $this->tags, true );
+ }
+
+ /**
+ * Return all tags for this message;
+ * @return string[]
+ */
+ public function getTags() {
+ return $this->tags;
+ }
+
+ public function setProperty( $key, $value ) {
+ $this->props[$key] = $value;
+ }
+
+ public function appendProperty( $key, $value ) {
+ if ( !isset( $this->props[$key] ) ) {
+ $this->props[$key] = [];
+ }
+ $this->props[$key][] = $value;
+ }
+
+ public function getProperty( $key ) {
+ return $this->props[$key] ?? null;
+ }
+
+ /**
+ * Get all the available property names.
+ * @return array
+ * @since 2013-01-17
+ */
+ public function getPropertyNames() {
+ return array_keys( $this->props );
+ }
+}
+
+/**
+ * %Message object which is based on database result row. Hence the name thin.
+ * Needs fields rev_user_text and those that are needed for loading revision
+ * text.
+ */
+class ThinMessage extends TMessage {
+ // This maps properties to fields in the database result row
+ protected static $propertyMap = [
+ 'last-translator-text' => 'rev_user_text',
+ 'last-translator-id' => 'rev_user',
+ ];
+ /** @var stdClass Database Result Row */
+ protected $row;
+ /** @var string Stored translation. */
+ protected $translation;
+
+ /**
+ * Set the database row this message is based on.
+ * @param stdClass $row Database Result Row
+ */
+ public function setRow( $row ) {
+ $this->row = $row;
+ }
+
+ /**
+ * Set the current translation of this message.
+ * @param string $text
+ */
+ public function setTranslation( $text ) {
+ $this->translation = $text;
+ }
+
+ /** @inheritDoc */
+ public function translation() {
+ if ( !isset( $this->row ) ) {
+ return $this->infile();
+ }
+
+ return $this->translation;
+ }
+
+ // Re-implemented
+ public function getProperty( $key ) {
+ if ( !isset( self::$propertyMap[$key] ) ) {
+ return parent::getProperty( $key );
+ }
+
+ $field = self::$propertyMap[$key];
+
+ return $this->row->$field ?? null;
+ }
+
+ // Re-implemented
+ public function getPropertyNames() {
+ return array_merge( parent::getPropertyNames(), array_keys( self::$propertyMap ) );
+ }
+}
+
+/**
+ * %Message object where you can directly set the translation.
+ * Hence the name fat. Authors are not supported.
+ */
+class FatMessage extends TMessage {
+ /** @var string Stored translation. */
+ protected $translation;
+
+ /**
+ * Set the current translation of this message.
+ * @param string $text
+ */
+ public function setTranslation( $text ) {
+ $this->translation = $text;
+ }
+
+ public function translation() {
+ if ( $this->translation === null ) {
+ return $this->infile;
+ }
+
+ return $this->translation;
+ }
+}
diff --git a/Translate/MessageCollection.php b/Translate/MessageCollection.php
new file mode 100644
index 00000000..f28d34ab
--- /dev/null
+++ b/Translate/MessageCollection.php
@@ -0,0 +1,1053 @@
+<?php
+/**
+ * This file contains classes that implements message collections.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @copyright Copyright © 2007-2011, Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Extension\Translate\MessageGroupProcessing\RevTagStore;
+use MediaWiki\Extension\Translate\SystemUsers\FuzzyBot;
+use MediaWiki\MediaWikiServices;
+use MediaWiki\Revision\RevisionRecord;
+use MediaWiki\Revision\SlotRecord;
+
+/**
+ * Core message collection class.
+ *
+ * Message collection is collection of messages of one message group in one
+ * language. It handles loading of the messages in one huge batch, and also
+ * stores information that can be used to filter the collection in different
+ * ways.
+ */
+class MessageCollection implements ArrayAccess, Iterator, Countable {
+ /**
+ * The queries can get very large because each message title is specified
+ * individually. Very large queries can confuse the database query planner.
+ * Queries are split into multiple separate queries having at most this many
+ * items.
+ */
+ private const MAX_ITEMS_PER_QUERY = 2000;
+
+ /** @var string Language code. */
+ public $code;
+ /** @var MessageDefinitions */
+ private $definitions = null;
+ /** @var array array( %Message key => translation, ... ) */
+ private $infile = [];
+ // Keys and messages.
+
+ /** @var array array( %Message display key => database key, ... ) */
+ protected $keys = [];
+ /** @var array array( %Message String => TMessage, ... ) */
+ protected $messages = [];
+ /** @var array */
+ private $reverseMap;
+ // Database resources
+
+ /** @var ?Traversable Stored message existence and fuzzy state. */
+ private $dbInfo;
+ /** @var ?Traversable Stored translations in database. */
+ private $dbData;
+ /** @var ?Traversable Stored reviews in database. */
+ private $dbReviewData;
+ /**
+ * Tags, copied to thin messages
+ * tagtype => keys
+ * @var array[]
+ */
+ protected $tags = [];
+ /**
+ * Properties, copied to thin messages
+ * @var array[]
+ */
+ private $properties = [];
+ /** @var string[] Authors. */
+ private $authors = [];
+
+ /**
+ * Constructors. Use newFromDefinitions() instead.
+ * @param string $code Language code.
+ */
+ public function __construct( $code ) {
+ $this->code = $code;
+ }
+
+ /**
+ * Construct a new message collection from definitions.
+ * @param MessageDefinitions $definitions
+ * @param string $code Language code.
+ * @return self
+ */
+ public static function newFromDefinitions( MessageDefinitions $definitions, $code ) {
+ $collection = new self( $code );
+ $collection->definitions = $definitions;
+ $collection->resetForNewLanguage( $code );
+
+ return $collection;
+ }
+
+ /** @return string */
+ public function getLanguage() {
+ return $this->code;
+ }
+
+ // Data setters
+
+ /**
+ * Set translation from file, as opposed to translation which only exists
+ * in the wiki because they are not exported and committed yet.
+ * @param string[] $messages Array of translations indexed by display key.
+ */
+ public function setInFile( array $messages ) {
+ $this->infile = $messages;
+ }
+
+ /**
+ * Set message tags.
+ * @param string $type Tag type, usually ignored or optional.
+ * @param string[] $keys List of display keys.
+ */
+ public function setTags( $type, array $keys ) {
+ $this->tags[$type] = $keys;
+ }
+
+ /**
+ * Returns list of available message keys. This is affected by filtering.
+ * @return array List of database keys indexed by display keys (TitleValue).
+ */
+ public function keys() {
+ return $this->keys;
+ }
+
+ /**
+ * Returns list of TitleValues of messages that are used in this collection after filtering.
+ * @return TitleValue[]
+ * @since 2011-12-28
+ */
+ public function getTitles() {
+ return array_values( $this->keys );
+ }
+
+ /**
+ * Returns list of message keys that are used in this collection after filtering.
+ * @return string[]
+ * @since 2011-12-28
+ */
+ public function getMessageKeys() {
+ return array_keys( $this->keys );
+ }
+
+ /**
+ * Returns stored message tags.
+ * @param string $type Tag type, usually optional or ignored.
+ * @return string[] List of keys with given tag.
+ */
+ public function getTags( $type ) {
+ return $this->tags[$type] ?? [];
+ }
+
+ /**
+ * Lists all translators that have contributed to the latest revisions of
+ * each translation. Causes translations to be loaded from the database.
+ * Is not affected by filters.
+ * @return string[] List of usernames.
+ */
+ public function getAuthors() {
+ $this->loadTranslations();
+
+ $authors = array_flip( $this->authors );
+
+ foreach ( $this->messages as $m ) {
+ // Check if there are authors
+ /** @var TMessage $m */
+ $author = $m->getProperty( 'last-translator-text' );
+
+ if ( $author === null ) {
+ continue;
+ }
+
+ if ( !isset( $authors[$author] ) ) {
+ $authors[$author] = 1;
+ } else {
+ $authors[$author]++;
+ }
+ }
+
+ # arsort( $authors, SORT_NUMERIC );
+ ksort( $authors );
+ $fuzzyBot = FuzzyBot::getName();
+ $filteredAuthors = [];
+ foreach ( $authors as $author => $edits ) {
+ if ( $author !== $fuzzyBot ) {
+ $filteredAuthors[] = $author;
+ }
+ }
+
+ return $filteredAuthors;
+ }
+
+ /**
+ * Add external authors (usually from the file).
+ * @param string[] $authors List of authors.
+ * @param string $mode Either append or set authors.
+ * @throws MWException If invalid $mode given.
+ */
+ public function addCollectionAuthors( $authors, $mode = 'append' ) {
+ switch ( $mode ) {
+ case 'append':
+ $authors = array_merge( $this->authors, $authors );
+ break;
+ case 'set':
+ break;
+ default:
+ throw new MWException( "Invalid mode $mode" );
+ }
+
+ $this->authors = array_unique( $authors );
+ }
+
+ // Data modifiers
+
+ /**
+ * Loads all message data. Must be called before accessing the messages
+ * with ArrayAccess or iteration.
+ */
+ public function loadTranslations() {
+ // Performance optimization: Instead of building conditions based on key in every
+ // method, build them once and pass it on to each of them.
+ $dbr = TranslateUtils::getSafeReadDB();
+ $titleConds = $this->getTitleConds( $dbr );
+
+ $this->loadData( $this->keys, $titleConds );
+ $this->loadInfo( $this->keys, $titleConds );
+ $this->loadReviewInfo( $this->keys, $titleConds );
+ $this->initMessages();
+ }
+
+ /**
+ * Some statistics scripts for example loop the same collection over every
+ * language. This is a shortcut which keeps tags and definitions.
+ * @param string $code
+ */
+ public function resetForNewLanguage( $code ) {
+ $this->code = $code;
+ $this->keys = $this->fixKeys();
+ $this->dbInfo = [];
+ $this->dbData = [];
+ $this->dbReviewData = [];
+ $this->messages = null;
+ $this->infile = [];
+ $this->authors = [];
+
+ unset( $this->tags['fuzzy'] );
+ $this->reverseMap = null;
+ }
+
+ /**
+ * For paging messages. One can count messages before and after slice.
+ * @param string $offset
+ * @param int $limit
+ * @return array Offsets that can be used for paging backwards and forwards
+ * @since String offests and return value since 2013-01-10
+ */
+ public function slice( $offset, $limit ) {
+ $indexes = array_keys( $this->keys );
+
+ if ( $offset === '' ) {
+ $offset = 0;
+ }
+
+ // Handle string offsets
+ if ( !ctype_digit( (string)$offset ) ) {
+ $pos = array_search( $offset, array_keys( $this->keys ), true );
+ // Now offset is always an integer, suitable for array_slice
+ $offset = $pos !== false ? $pos : count( $this->keys );
+ }
+
+ // False means that cannot go back or forward
+ $backwardsOffset = $forwardsOffset = false;
+ // Backwards paging uses numerical indexes, see below
+
+ // Can only skip this if no offset has been provided or the
+ // offset is zero. (offset - limit ) > 1 does not work, because
+ // users can end in offest=2, limit=5 and can't see the first
+ // two messages. That's also why it is capped into zero with
+ // max(). And finally make the offsets to be strings even if
+ // they are numbers in this case.
+ if ( $offset > 0 ) {
+ $backwardsOffset = (string)( max( 0, $offset - $limit ) );
+ }
+
+ // Forwards paging uses keys. If user opens view Untranslated,
+ // translates some messages and then clicks next, the first
+ // message visible in the page is the first message not shown
+ // in the previous page (unless someone else translated it at
+ // the same time). If we used integer offsets, we would skip
+ // same number of messages that were translated, because they
+ // are no longer in the list. For backwards paging this is not
+ // such a big issue, so it still uses integer offsets, because
+ // we would need to also implement "direction" to have it work
+ // correctly.
+ if ( isset( $indexes[$offset + $limit] ) ) {
+ $forwardsOffset = $indexes[$offset + $limit];
+ }
+
+ $this->keys = array_slice( $this->keys, $offset, $limit, true );
+
+ return [ $backwardsOffset, $forwardsOffset, $offset ];
+ }
+
+ /**
+ * Filters messages based on some condition. Some filters cause data to be
+ * loaded from the database. PAGEINFO: existence and fuzzy tags.
+ * TRANSLATIONS: translations for every message. It is recommended to first
+ * filter with messages that do not need those. It is recommended to add
+ * translations from file with addInfile, and it is needed for changed
+ * filter to work.
+ *
+ * @param string $type
+ * - fuzzy: messages with fuzzy tag (PAGEINFO)
+ * - optional: messages marked for optional.
+ * - ignored: messages which are not for translation.
+ * - hastranslation: messages which have translation (be if fuzzy or not)
+ * (PAGEINFO, *INFILE).
+ * - translated: messages which have translation which is not fuzzy
+ * (PAGEINFO, *INFILE).
+ * - changed: translation in database differs from infile.
+ * (INFILE, TRANSLATIONS)
+ * @param bool $condition Whether to return messages which do not satisfy
+ * the given filter condition (true), or only which do (false).
+ * @param mixed|null $value Value for properties filtering.
+ * @throws MWException If given invalid filter name.
+ */
+ public function filter( $type, $condition = true, $value = null ) {
+ if ( !in_array( $type, self::getAvailableFilters(), true ) ) {
+ throw new MWException( "Unknown filter $type" );
+ }
+ $this->applyFilter( $type, $condition, $value );
+ }
+
+ /** @return array */
+ public static function getAvailableFilters() {
+ return [
+ 'fuzzy',
+ 'optional',
+ 'ignored',
+ 'hastranslation',
+ 'changed',
+ 'translated',
+ 'reviewer',
+ 'last-translator',
+ ];
+ }
+
+ /**
+ * Really apply a filter. Some filters need multiple conditions.
+ * @param string $filter Filter name.
+ * @param bool $condition Whether to return messages which do not satisfy
+ * @param mixed $value Value for properties filtering.
+ * the given filter condition (true), or only which do (false).
+ * @throws MWException
+ */
+ protected function applyFilter( $filter, $condition, $value ) {
+ $keys = $this->keys;
+ if ( $filter === 'fuzzy' ) {
+ $keys = $this->filterFuzzy( $keys, $condition );
+ } elseif ( $filter === 'hastranslation' ) {
+ $keys = $this->filterHastranslation( $keys, $condition );
+ } elseif ( $filter === 'translated' ) {
+ $fuzzy = $this->filterFuzzy( $keys, false );
+ $hastranslation = $this->filterHastranslation( $keys, false );
+ // Fuzzy messages are not counted as translated messages
+ $translated = $this->filterOnCondition( $hastranslation, $fuzzy );
+ $keys = $this->filterOnCondition( $keys, $translated, $condition );
+ } elseif ( $filter === 'changed' ) {
+ $keys = $this->filterChanged( $keys, $condition );
+ } elseif ( $filter === 'reviewer' ) {
+ $keys = $this->filterReviewer( $keys, $condition, $value );
+ } elseif ( $filter === 'last-translator' ) {
+ $keys = $this->filterLastTranslator( $keys, $condition, $value );
+ } else {
+ // Filter based on tags.
+ if ( !isset( $this->tags[$filter] ) ) {
+ if ( $filter !== 'optional' && $filter !== 'ignored' ) {
+ throw new MWException( "No tagged messages for custom filter $filter" );
+ }
+ $keys = $this->filterOnCondition( $keys, [], $condition );
+ } else {
+ $taggedKeys = array_flip( $this->tags[$filter] );
+ $keys = $this->filterOnCondition( $keys, $taggedKeys, $condition );
+ }
+ }
+
+ $this->keys = $keys;
+ }
+
+ /** @internal For MessageGroupStats */
+ public function filterUntranslatedOptional(): void {
+ $optionalKeys = array_flip( $this->tags['optional'] ?? [] );
+ // Convert plain message keys to array<string,TitleValue>
+ $optional = $this->filterOnCondition( $this->keys, $optionalKeys, false );
+ // Then get reduce that list to those which have no translation. Ensure we don't
+ // accidentally populate the info cache with too few keys.
+ $this->loadInfo( $this->keys );
+ $untranslatedOptional = $this->filterHastranslation( $optional, true );
+ // Now remove that list from the full list
+ $this->keys = $this->filterOnCondition( $this->keys, $untranslatedOptional );
+ }
+
+ /**
+ * Filters list of keys with other list of keys according to the condition.
+ * In other words, you have a list of keys, and you have determined list of
+ * keys that have some feature. Now you can either take messages that are
+ * both in the first list and the second list OR are in the first list but
+ * are not in the second list (conditition = false and true respectively).
+ * What makes this more complex is that second list of keys might not be a
+ * subset of the first list of keys.
+ * @param string[] $keys List of keys to filter.
+ * @param string[] $condKeys Second list of keys for filtering.
+ * @param bool $condition True (default) to return keys which are on first
+ * but not on the second list, false to return keys which are on both.
+ * second.
+ * @return string[] Filtered keys.
+ */
+ protected function filterOnCondition( array $keys, array $condKeys, $condition = true ) {
+ if ( $condition === true ) {
+ // Delete $condKeys from $keys
+ foreach ( array_keys( $condKeys ) as $key ) {
+ unset( $keys[$key] );
+ }
+ } else {
+ // Keep the keys which are in $condKeys
+ foreach ( array_keys( $keys ) as $key ) {
+ if ( !isset( $condKeys[$key] ) ) {
+ unset( $keys[$key] );
+ }
+ }
+ }
+
+ return $keys;
+ }
+
+ /**
+ * Filters list of keys according to whether the translation is fuzzy.
+ * @param string[] $keys List of keys to filter.
+ * @param bool $condition True to filter away fuzzy translations, false
+ * to filter non-fuzzy translations.
+ * @return string[] Filtered keys.
+ */
+ protected function filterFuzzy( array $keys, $condition ) {
+ $this->loadInfo( $keys );
+
+ $origKeys = [];
+ if ( $condition === false ) {
+ $origKeys = $keys;
+ }
+
+ foreach ( $this->dbInfo as $row ) {
+ if ( $row->rt_type !== null ) {
+ unset( $keys[$this->rowToKey( $row )] );
+ }
+ }
+
+ if ( $condition === false ) {
+ $keys = array_diff( $origKeys, $keys );
+ }
+
+ return $keys;
+ }
+
+ /**
+ * Filters list of keys according to whether they have a translation.
+ * @param string[] $keys List of keys to filter.
+ * @param bool $condition True to filter away translated, false
+ * to filter untranslated.
+ * @return string[] Filtered keys.
+ */
+ protected function filterHastranslation( array $keys, $condition ) {
+ $this->loadInfo( $keys );
+
+ $origKeys = [];
+ if ( $condition === false ) {
+ $origKeys = $keys;
+ }
+
+ foreach ( $this->dbInfo as $row ) {
+ unset( $keys[$this->rowToKey( $row )] );
+ }
+
+ // Check also if there is something in the file that is not yet in the database
+ foreach ( array_keys( $this->infile ) as $inf ) {
+ unset( $keys[$inf] );
+ }
+
+ // Remove the messages which do not have a translation from the list
+ if ( $condition === false ) {
+ $keys = array_diff( $origKeys, $keys );
+ }
+
+ return $keys;
+ }
+
+ /**
+ * Filters list of keys according to whether the current translation
+ * differs from the commited translation.
+ * @param string[] $keys List of keys to filter.
+ * @param bool $condition True to filter changed translations, false
+ * to filter unchanged translations.
+ * @return string[] Filtered keys.
+ */
+ protected function filterChanged( array $keys, $condition ) {
+ $this->loadData( $keys );
+
+ $origKeys = [];
+ if ( $condition === false ) {
+ $origKeys = $keys;
+ }
+
+ $revStore = MediaWikiServices::getInstance()->getRevisionStore();
+ $infileRows = [];
+ foreach ( $this->dbData as $row ) {
+ $mkey = $this->rowToKey( $row );
+ if ( isset( $this->infile[$mkey] ) ) {
+ $infileRows[] = $row;
+ }
+ }
+
+ $revisions = $revStore->newRevisionsFromBatch( $infileRows, [
+ 'slots' => [ SlotRecord::MAIN ],
+ 'content' => true
+ ] )->getValue();
+ foreach ( $infileRows as $row ) {
+ /** @var RevisionRecord|null $rev */
+ $rev = $revisions[$row->rev_id];
+ if ( $rev ) {
+ /** @var TextContent $content */
+ $content = $rev->getContent( SlotRecord::MAIN );
+ if ( $content ) {
+ $mkey = $this->rowToKey( $row );
+ if ( $this->infile[$mkey] === $content->getText() ) {
+ // Remove unchanged messages from the list
+ unset( $keys[$mkey] );
+ }
+ }
+ }
+ }
+
+ // Remove the messages which have changed from the original list
+ if ( $condition === false ) {
+ $keys = $this->filterOnCondition( $origKeys, $keys );
+ }
+
+ return $keys;
+ }
+
+ /**
+ * Filters list of keys according to whether the user has accepted them.
+ * @param string[] $keys List of keys to filter.
+ * @param bool $condition True to remove translatations $user has accepted,
+ * false to get only translations accepted by $user.
+ * @param int $user Userid
+ * @return string[] Filtered keys.
+ */
+ protected function filterReviewer( array $keys, $condition, $user ) {
+ $this->loadReviewInfo( $keys );
+ $origKeys = $keys;
+
+ /* This removes messages from the list which have certain
+ * reviewer (among others) */
+ $userId = (int)$user;
+ foreach ( $this->dbReviewData as $row ) {
+ if ( $user === null || (int)$row->trr_user === $userId ) {
+ unset( $keys[$this->rowToKey( $row )] );
+ }
+ }
+
+ if ( $condition === false ) {
+ $keys = array_diff( $origKeys, $keys );
+ }
+
+ return $keys;
+ }
+
+ /**
+ * @param string[] $keys List of keys to filter.
+ * @param bool $condition True to remove translatations where last translator is $user
+ * false to get only last translations done by others.
+ * @param int $user Userid
+ * @return string[] Filtered keys.
+ */
+ protected function filterLastTranslator( array $keys, $condition, $user ) {
+ $this->loadData( $keys );
+ $origKeys = $keys;
+
+ $user = (int)$user;
+ foreach ( $this->dbData as $row ) {
+ if ( (int)$row->rev_user === $user ) {
+ unset( $keys[$this->rowToKey( $row )] );
+ }
+ }
+
+ if ( $condition === false ) {
+ $keys = array_diff( $origKeys, $keys );
+ }
+
+ return $keys;
+ }
+
+ /**
+ * Takes list of keys and converts them into database format.
+ * @return array ( string => string ) Array of keys in database format indexed by display format.
+ */
+ protected function fixKeys() {
+ $newkeys = [];
+
+ $pages = $this->definitions->getPages();
+ foreach ( $pages as $key => $baseTitle ) {
+ $newkeys[$key] = new TitleValue(
+ $baseTitle->getNamespace(),
+ $baseTitle->getDBkey() . '/' . $this->code
+ );
+ }
+
+ return $newkeys;
+ }
+
+ /**
+ * Loads existence and fuzzy state for given list of keys.
+ * @param string[] $keys List of keys in database format.
+ * @param string[]|null $titleConds Database query condition based on current keys.
+ */
+ protected function loadInfo( array $keys, ?array $titleConds = null ) {
+ if ( $this->dbInfo !== [] ) {
+ return;
+ }
+
+ if ( !count( $keys ) ) {
+ $this->dbInfo = new EmptyIterator();
+ return;
+ }
+
+ $dbr = TranslateUtils::getSafeReadDB();
+ $tables = [ 'page', 'revtag' ];
+ $fields = [ 'page_namespace', 'page_title', 'rt_type' ];
+ $joins = [ 'revtag' =>
+ [
+ 'LEFT JOIN',
+ [ 'page_id=rt_page', 'page_latest=rt_revision', 'rt_type' => RevTagStore::FUZZY_TAG ]
+ ]
+ ];
+
+ $titleConds = $titleConds ?? $this->getTitleConds( $dbr );
+ $iterator = new AppendIterator();
+ foreach ( $titleConds as $conds ) {
+ $iterator->append( $dbr->select( $tables, $fields, $conds, __METHOD__, [], $joins ) );
+ }
+
+ $this->dbInfo = $iterator;
+
+ // Populate and cache reverse map now, since if call to initMesages is delayed (e.g. a
+ // filter that calls loadData() is used, or ::slice is used) the reverse map will not
+ // contain all the entries that are present in our $iterator and will throw notices.
+ $this->getReverseMap();
+ }
+
+ /**
+ * Loads reviewers for given messages.
+ * @param string[] $keys List of keys in database format.
+ * @param string[]|null $titleConds Database query condition based on current keys.
+ */
+ protected function loadReviewInfo( array $keys, ?array $titleConds = null ) {
+ if ( $this->dbReviewData !== [] ) {
+ return;
+ }
+
+ if ( !count( $keys ) ) {
+ $this->dbReviewData = new EmptyIterator();
+ return;
+ }
+
+ $dbr = TranslateUtils::getSafeReadDB();
+ $tables = [ 'page', 'translate_reviews' ];
+ $fields = [ 'page_namespace', 'page_title', 'trr_user' ];
+ $joins = [ 'translate_reviews' =>
+ [
+ 'JOIN',
+ [ 'page_id=trr_page', 'page_latest=trr_revision' ]
+ ]
+ ];
+
+ $titleConds = $titleConds ?? $this->getTitleConds( $dbr );
+ $iterator = new AppendIterator();
+ foreach ( $titleConds as $conds ) {
+ $iterator->append( $dbr->select( $tables, $fields, $conds, __METHOD__, [], $joins ) );
+ }
+
+ $this->dbReviewData = $iterator;
+
+ // Populate and cache reverse map now, since if call to initMesages is delayed (e.g. a
+ // filter that calls loadData() is used, or ::slice is used) the reverse map will not
+ // contain all the entries that are present in our $iterator and will throw notices.
+ $this->getReverseMap();
+ }
+
+ /**
+ * Loads translation for given list of keys.
+ * @param string[] $keys List of keys in database format.
+ * @param string[]|null $titleConds Database query condition based on current keys.
+ */
+ protected function loadData( array $keys, ?array $titleConds = null ) {
+ if ( $this->dbData !== [] ) {
+ return;
+ }
+
+ if ( !count( $keys ) ) {
+ $this->dbData = new EmptyIterator();
+ return;
+ }
+
+ $dbr = TranslateUtils::getSafeReadDB();
+ $revisionStore = MediaWikiServices::getInstance()->getRevisionStore();
+ $revQuery = $revisionStore->getQueryInfo( [ 'page' ] );
+ $tables = $revQuery['tables'];
+ $fields = $revQuery['fields'];
+ $joins = $revQuery['joins'];
+
+ $titleConds = $titleConds ?? $this->getTitleConds( $dbr );
+ $iterator = new AppendIterator();
+ foreach ( $titleConds as $conds ) {
+ $conds = [ 'page_latest = rev_id', $conds ];
+ $iterator->append( $dbr->select( $tables, $fields, $conds, __METHOD__, [], $joins ) );
+ }
+
+ $this->dbData = $iterator;
+
+ // Populate and cache reverse map now, since if call to initMesages is delayed (e.g. a
+ // filter that calls loadData() is used, or ::slice is used) the reverse map will not
+ // contain all the entries that are present in our $iterator and will throw notices.
+ $this->getReverseMap();
+ }
+
+ /**
+ * Of the current set of keys, construct database query conditions.
+ * @since 2011-12-28
+ * @param \Wikimedia\Rdbms\IDatabase $db
+ * @return string[]
+ */
+ protected function getTitleConds( $db ) {
+ $titles = $this->getTitles();
+ $chunks = array_chunk( $titles, self::MAX_ITEMS_PER_QUERY );
+ $results = [];
+
+ foreach ( $chunks as $titles ) {
+ // Array of array( namespace, pagename )
+ $byNamespace = [];
+ foreach ( $titles as $title ) {
+ $namespace = $title->getNamespace();
+ $pagename = $title->getDBkey();
+ $byNamespace[$namespace][] = $pagename;
+ }
+
+ $conds = [];
+ foreach ( $byNamespace as $namespaces => $pagenames ) {
+ $cond = [
+ 'page_namespace' => $namespaces,
+ 'page_title' => $pagenames,
+ ];
+
+ $conds[] = $db->makeList( $cond, LIST_AND );
+ }
+
+ $results[] = $db->makeList( $conds, LIST_OR );
+ }
+
+ return $results;
+ }
+
+ /**
+ * Given two-dimensional map of namespace and pagenames, this uses
+ * database fields page_namespace and page_title as keys and returns
+ * the value for those indexes.
+ * @since 2011-12-23
+ * @param stdClass $row
+ * @return string|null
+ */
+ protected function rowToKey( $row ) {
+ $map = $this->getReverseMap();
+ if ( isset( $map[$row->page_namespace][$row->page_title] ) ) {
+ return $map[$row->page_namespace][$row->page_title];
+ } else {
+ wfWarn( "Got unknown title from the database: {$row->page_namespace}:{$row->page_title}" );
+
+ return null;
+ }
+ }
+
+ /**
+ * Creates a two-dimensional map of namespace and pagenames.
+ * @since 2011-12-23
+ * @return array
+ */
+ public function getReverseMap() {
+ if ( isset( $this->reverseMap ) ) {
+ return $this->reverseMap;
+ }
+
+ $map = [];
+ /** @var TitleValue $title */
+ foreach ( $this->keys as $mkey => $title ) {
+ $map[$title->getNamespace()][$title->getDBkey()] = $mkey;
+ }
+
+ $this->reverseMap = $map;
+ return $this->reverseMap;
+ }
+
+ /**
+ * Constructs all TMessages from the data accumulated so far.
+ * Usually there is no need to call this method directly.
+ */
+ public function initMessages() {
+ if ( $this->messages !== null ) {
+ return;
+ }
+
+ $messages = [];
+ $definitions = $this->definitions->getDefinitions();
+ $revStore = MediaWikiServices::getInstance()->getRevisionStore();
+ $queryFlags = TranslateUtils::shouldReadFromPrimary() ? $revStore::READ_LATEST : 0;
+ foreach ( array_keys( $this->keys ) as $mkey ) {
+ $messages[$mkey] = new ThinMessage( $mkey, $definitions[$mkey] );
+ }
+
+ if ( $this->dbData !== null ) {
+ $slotRows = $revStore->getContentBlobsForBatch(
+ $this->dbData, [ SlotRecord::MAIN ], $queryFlags
+ )->getValue();
+
+ foreach ( $this->dbData as $row ) {
+ $mkey = $this->rowToKey( $row );
+ if ( !isset( $messages[$mkey] ) ) {
+ continue;
+ }
+ $messages[$mkey]->setRow( $row );
+ $messages[$mkey]->setProperty( 'revision', $row->page_latest );
+
+ if ( isset( $slotRows[$row->rev_id][SlotRecord::MAIN] ) ) {
+ $slot = $slotRows[$row->rev_id][SlotRecord::MAIN];
+ $messages[$mkey]->setTranslation( $slot->blob_data );
+ }
+ }
+ }
+
+ if ( $this->dbInfo !== null ) {
+ $fuzzy = [];
+ foreach ( $this->dbInfo as $row ) {
+ if ( $row->rt_type !== null ) {
+ $fuzzy[] = $this->rowToKey( $row );
+ }
+ }
+
+ $this->setTags( 'fuzzy', $fuzzy );
+ }
+
+ // Copy tags if any.
+ foreach ( $this->tags as $type => $keys ) {
+ foreach ( $keys as $mkey ) {
+ if ( isset( $messages[$mkey] ) ) {
+ $messages[$mkey]->addTag( $type );
+ }
+ }
+ }
+
+ // Copy properties if any.
+ foreach ( $this->properties as $type => $keys ) {
+ foreach ( $keys as $mkey => $value ) {
+ if ( isset( $messages[$mkey] ) ) {
+ $messages[$mkey]->setProperty( $type, $value );
+ }
+ }
+ }
+
+ // Copy infile if any.
+ foreach ( $this->infile as $mkey => $value ) {
+ if ( isset( $messages[$mkey] ) ) {
+ $messages[$mkey]->setInfile( $value );
+ }
+ }
+
+ foreach ( $this->dbReviewData as $row ) {
+ $mkey = $this->rowToKey( $row );
+ if ( !isset( $messages[$mkey] ) ) {
+ continue;
+ }
+ $messages[$mkey]->appendProperty( 'reviewers', $row->trr_user );
+ }
+
+ // Set the status property
+ foreach ( $messages as $obj ) {
+ if ( $obj->hasTag( 'fuzzy' ) ) {
+ $obj->setProperty( 'status', 'fuzzy' );
+ } elseif ( is_array( $obj->getProperty( 'reviewers' ) ) ) {
+ $obj->setProperty( 'status', 'proofread' );
+ } elseif ( $obj->translation() !== null ) {
+ $obj->setProperty( 'status', 'translated' );
+ } else {
+ $obj->setProperty( 'status', 'untranslated' );
+ }
+ }
+
+ $this->messages = $messages;
+ }
+
+ /**
+ * ArrayAccess methods. @{
+ * @param mixed $offset
+ * @return bool
+ */
+ public function offsetExists( $offset ): bool {
+ return isset( $this->keys[$offset] );
+ }
+
+ /**
+ * @param mixed $offset
+ * @return ?TMessage
+ */
+ public function offsetGet( $offset ): ?TMessage {
+ return $this->messages[$offset] ?? null;
+ }
+
+ /**
+ * @param mixed $offset
+ * @param mixed $value
+ */
+ public function offsetSet( $offset, $value ): void {
+ $this->messages[$offset] = $value;
+ }
+
+ /** @param mixed $offset */
+ public function offsetUnset( $offset ): void {
+ unset( $this->keys[$offset] );
+ }
+
+ /** @} */
+
+ /**
+ * Fail fast if trying to access unknown properties. @{
+ * @param string $name
+ * @throws MWException
+ * @return never
+ */
+ public function __get( $name ) {
+ throw new MWException( __METHOD__ . ": Trying to access unknown property $name" );
+ }
+
+ /**
+ * Fail fast if trying to access unknown properties.
+ * @param string $name
+ * @param mixed $value
+ * @throws MWException
+ * @return never
+ */
+ public function __set( $name, $value ) {
+ throw new MWException( __METHOD__ . ": Trying to modify unknown property $name" );
+ }
+
+ /** @} */
+
+ /**
+ * Iterator method. @{
+ */
+ public function rewind(): void {
+ reset( $this->keys );
+ }
+
+ #[\ReturnTypeWillChange]
+ public function current() {
+ if ( !count( $this->keys ) ) {
+ return false;
+ }
+
+ // @phan-suppress-next-line PhanTypeArraySuspiciousNullable
+ return $this->messages[key( $this->keys )];
+ }
+
+ public function key(): ?string {
+ return key( $this->keys );
+ }
+
+ public function next(): void {
+ next( $this->keys );
+ }
+
+ public function valid(): bool {
+ return isset( $this->messages[key( $this->keys )] );
+ }
+
+ public function count(): int {
+ return count( $this->keys() );
+ }
+
+ /** @} */
+}
+
+/**
+ * Wrapper for message definitions, just to beauty the code.
+ *
+ * API totally changed in 2011-12-28
+ */
+class MessageDefinitions {
+ /** @var int|false */
+ private $namespace;
+ /** @var string[] */
+ private $messages;
+ /** @var Title[] */
+ private $pages;
+
+ /**
+ * @param string[] $messages
+ * @param int|false $namespace
+ */
+ public function __construct( array $messages, $namespace = false ) {
+ $this->namespace = $namespace;
+ $this->messages = $messages;
+ }
+
+ /** @return string[] */
+ public function getDefinitions() {
+ return $this->messages;
+ }
+
+ /** @return Title[] List of title indexed by message key. */
+ public function getPages() {
+ $namespace = $this->namespace;
+ if ( $this->pages !== null ) {
+ return $this->pages;
+ }
+
+ $pages = [];
+ foreach ( array_keys( $this->messages ) as $key ) {
+ if ( $namespace === false ) {
+ // pages are in format ex. "8:jan"
+ [ $tns, $tkey ] = explode( ':', $key, 2 );
+ $title = Title::makeTitleSafe( $tns, $tkey );
+ } else {
+ $title = Title::makeTitleSafe( $namespace, $key );
+ }
+
+ if ( !$title ) {
+ wfWarn( "Invalid title ($namespace:)$key" );
+ continue;
+ }
+
+ $pages[$key] = $title;
+ }
+
+ $this->pages = $pages;
+
+ return $this->pages;
+ }
+}
diff --git a/Translate/MessageGroupConfigurationParser.php b/Translate/MessageGroupConfigurationParser.php
new file mode 100644
index 00000000..089eecac
--- /dev/null
+++ b/Translate/MessageGroupConfigurationParser.php
@@ -0,0 +1,166 @@
+<?php
+/**
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Extension\Translate\MessageProcessing\StringMatcher;
+
+/**
+ * Utility class to parse and validate message group configurations.
+ * @since 2014.01
+ */
+class MessageGroupConfigurationParser {
+ private $baseSchema;
+
+ public function __construct() {
+ // Don't perform validations if library not available
+ if ( class_exists( RomaricDrigon\MetaYaml\MetaYaml::class ) ) {
+ $this->baseSchema = $this->getBaseSchema();
+ }
+ }
+
+ /**
+ * Easy to use function to get valid group configurations from YAML. Those not matching
+ * schema will be ignored, if schema validation is enabled.
+ *
+ * @param string $data Yaml
+ * @param callable|null $callback Optional callback which is called on errors. Parameters are
+ * document index, processed configuration and error message.
+ * @return array Group configurations indexed by message group id.
+ */
+ public function getHopefullyValidConfigurations( $data, $callback = null ) {
+ if ( !is_callable( $callback ) ) {
+ $callback = static function ( $unused1, $unused2, $unused3 ) {
+ /*noop*/
+ };
+ }
+
+ $documents = self::getDocumentsFromYaml( $data );
+ $configurations = self::parseDocuments( $documents );
+ $groups = [];
+
+ if ( is_array( $this->baseSchema ) ) {
+ foreach ( $configurations as $index => $config ) {
+ try {
+ $this->validate( $config );
+ $groups[$config['BASIC']['id']] = $config;
+ } catch ( Exception $e ) {
+ $callback( $index, $config, $e->getMessage() );
+ }
+ }
+ } else {
+ foreach ( $configurations as $index => $config ) {
+ if ( isset( $config['BASIC']['id'] ) ) {
+ $groups[$config['BASIC']['id']] = $config;
+ } else {
+ $callback( $index, $config, 'id is missing' );
+ }
+ }
+ }
+
+ return $groups;
+ }
+
+ /**
+ * Given a Yaml string, returns the non-empty documents as an array.
+ *
+ * @param string $data
+ * @return string[]
+ */
+ public function getDocumentsFromYaml( $data ) {
+ return preg_split( "/^---$/m", $data, -1, PREG_SPLIT_NO_EMPTY );
+ }
+
+ /**
+ * Returns group configurations from YAML documents. If there is document containing template,
+ * it will be merged with other configurations.
+ *
+ * @param array $documents
+ * @return array[][] Unvalidated group configurations
+ */
+ public function parseDocuments( array $documents ) {
+ $groups = [];
+ $template = [];
+
+ foreach ( $documents as $document ) {
+ $document = TranslateYaml::loadString( $document );
+
+ if ( isset( $document['TEMPLATE'] ) ) {
+ $template = $document['TEMPLATE'];
+ } else {
+ $groups[] = $document;
+ }
+ }
+
+ if ( $template ) {
+ foreach ( $groups as $i => $group ) {
+ $groups[$i] = self::mergeTemplate( $template, $group );
+ // Little hack to allow aggregate groups to be defined in same file with other groups.
+ if ( $groups[$i]['BASIC']['class'] === AggregateMessageGroup::class ) {
+ unset( $groups[$i]['FILES'] );
+ }
+ }
+ }
+
+ return $groups;
+ }
+
+ public function getBaseSchema() {
+ return TranslateYaml::load( __DIR__ . '/data/group-yaml-schema.yaml' );
+ }
+
+ /**
+ * Validates group configuration against schema.
+ *
+ * @param array $config
+ * @throws Exception If configuration is not valid.
+ */
+ public function validate( array $config ) {
+ $schema = $this->baseSchema;
+
+ foreach ( $config as $section ) {
+ if ( !isset( $section['class'] ) ) {
+ continue;
+ }
+
+ $class = $section['class'];
+
+ // FIXME: UGLY HACK: StringMatcher is now under a namespace so use the fully prefixed
+ // class to check if it has the getExtraSchema method
+ if ( $class === 'StringMatcher' ) {
+ $class = StringMatcher::class;
+ }
+
+ // There is no sane way to check whether *class* implements interface in PHP
+ if ( !is_callable( [ $class, 'getExtraSchema' ] ) ) {
+ continue;
+ }
+
+ $extra = call_user_func( [ $class, 'getExtraSchema' ] );
+ $schema = array_replace_recursive( $schema, $extra );
+ }
+
+ $schema = new RomaricDrigon\MetaYaml\MetaYaml( $schema );
+ $schema->validate( $config );
+ }
+
+ /**
+ * Merges a document template (base) to actual definition (specific)
+ * @param array $base
+ * @param array $specific
+ * @return array
+ */
+ public static function mergeTemplate( array $base, array $specific ) {
+ foreach ( $specific as $key => $value ) {
+ if ( is_array( $value ) && isset( $base[$key] ) && is_array( $base[$key] ) ) {
+ $base[$key] = self::mergeTemplate( $base[$key], $value );
+ } else {
+ $base[$key] = $value;
+ }
+ }
+
+ return $base;
+ }
+}
diff --git a/Translate/MessageGroups.php b/Translate/MessageGroups.php
new file mode 100644
index 00000000..d8f8a618
--- /dev/null
+++ b/Translate/MessageGroups.php
@@ -0,0 +1,855 @@
+<?php
+/**
+ * This file contains a class for working with message groups.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @author Siebrand Mazeland
+ * @copyright Copyright © 2008-2013, Niklas Laxström, Siebrand Mazeland
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Extension\Translate\MessageProcessing\StringMatcher;
+use MediaWiki\MediaWikiServices;
+
+/**
+ * Factory class for accessing message groups individually by id or
+ * all of them as an list.
+ * @todo Clean up the mixed static/member method interface.
+ */
+class MessageGroups {
+ /** @var string[]|null Cache for message group priorities */
+ private static $prioritycache;
+ /** @var MessageGroup[]|null Map of (group ID => MessageGroup) */
+ private $groups;
+ /** @var MessageGroupLoader[]|null */
+ private $groupLoaders;
+ /** @var WANObjectCache|null */
+ private $cache;
+
+ /**
+ * Tracks the current cache version. Update this when there are incompatible changes
+ * with the last version of the cache to force a new key to be used. The older cache
+ * will automatically expire and be cleared off.
+ * @var int
+ */
+ private const CACHE_VERSION = 4;
+
+ /**
+ * Initialises the list of groups
+ */
+ protected function init() {
+ if ( is_array( $this->groups ) ) {
+ return; // groups already initialized
+ }
+
+ $value = $this->getCachedGroupDefinitions();
+ $groups = $value['cc'];
+
+ foreach ( $this->getGroupLoaders() as $loader ) {
+ $groups += $loader->getGroups();
+ }
+ $this->initGroupsFromDefinitions( $groups );
+ }
+
+ /**
+ * @param bool|string $recache Either "recache" or false
+ * @return array
+ */
+ protected function getCachedGroupDefinitions( $recache = false ) {
+ global $wgAutoloadClasses;
+
+ $regenerator = function () {
+ global $wgAutoloadClasses;
+
+ $groups = $deps = $autoload = [];
+ // This constructs the list of all groups from multiple different sources.
+ // When possible, a cache dependency is created to automatically recreate
+ // the cache when configuration changes. Currently used by other extensions
+ // such as Banner Messages and test cases to load message groups.
+ Hooks::run( 'TranslatePostInitGroups', [ &$groups, &$deps, &$autoload ] );
+ // Register autoloaders for this request, both values modified by reference
+ self::appendAutoloader( $autoload, $wgAutoloadClasses );
+
+ $value = [
+ 'ts' => wfTimestamp( TS_MW ),
+ 'cc' => $groups,
+ 'autoload' => $autoload
+ ];
+ $wrapper = new DependencyWrapper( $value, $deps );
+ $wrapper->initialiseDeps();
+
+ return $wrapper; // save the new value to cache
+ };
+
+ $cache = $this->getCache();
+ /** @var DependencyWrapper $wrapper */
+ $wrapper = $cache->getWithSetCallback(
+ $this->getCacheKey(),
+ $cache::TTL_DAY,
+ $regenerator,
+ [
+ 'lockTSE' => 30, // avoid stampedes (mutex)
+ 'checkKeys' => [ $this->getCacheKey() ],
+ 'touchedCallback' => static function ( $value ) {
+ return ( $value instanceof DependencyWrapper && $value->isExpired() )
+ ? time() // treat value as if it just expired (for "lockTSE")
+ : null;
+ },
+ 'minAsOf' => $recache ? INF : $cache::MIN_TIMESTAMP_NONE, // "miss" on recache
+ ]
+ );
+
+ $value = $wrapper->getValue();
+ self::appendAutoloader( $value['autoload'], $wgAutoloadClasses );
+
+ return $value;
+ }
+
+ /**
+ * Expand process cached groups to objects
+ *
+ * @param array $groups Map of (group ID => mixed)
+ */
+ protected function initGroupsFromDefinitions( $groups ) {
+ foreach ( $groups as $id => $mixed ) {
+ if ( !is_object( $mixed ) ) {
+ $groups[$id] = call_user_func( $mixed, $id );
+ }
+ }
+
+ $this->groups = $groups;
+ }
+
+ /**
+ * Immediately update the cache.
+ *
+ * @since 2015.04
+ */
+ public function recache() {
+ // Purge the value from all datacenters
+ $cache = $this->getCache();
+ $cache->touchCheckKey( $this->getCacheKey() );
+
+ $this->clearProcessCache();
+
+ foreach ( $this->getCacheGroupLoaders() as $cacheLoader ) {
+ $cacheLoader->recache();
+ }
+
+ // Reload the cache value and update the local datacenter
+ $value = $this->getCachedGroupDefinitions( 'recache' );
+ $groups = $value['cc'];
+
+ foreach ( $this->getGroupLoaders() as $loader ) {
+ $groups += $loader->getGroups();
+ }
+
+ $this->initGroupsFromDefinitions( $groups );
+ }
+
+ /**
+ * Manually reset group cache.
+ *
+ * Use when automatic dependency tracking fails.
+ */
+ public static function clearCache() {
+ $self = self::singleton();
+
+ $cache = $self->getCache();
+ $cache->delete( $self->getCacheKey(), 1 );
+
+ foreach ( $self->getCacheGroupLoaders() as $cacheLoader ) {
+ $cacheLoader->clearCache();
+ }
+
+ $self->clearProcessCache();
+ }
+
+ /**
+ * Manually reset the process cache.
+ *
+ * This is helpful for long running scripts where the process cache might get stale
+ * even though the global cache is updated.
+ * @since 2016.08
+ */
+ public function clearProcessCache() {
+ $this->groups = null;
+ $this->groupLoaders = null;
+
+ self::$prioritycache = null;
+ }
+
+ protected function getCache(): WANObjectCache {
+ if ( $this->cache === null ) {
+ return MediaWikiServices::getInstance()->getMainWANObjectCache();
+ } else {
+ return $this->cache;
+ }
+ }
+
+ /**
+ * Override cache, for example during tests.
+ *
+ * @param WANObjectCache|null $cache
+ */
+ public function setCache( WANObjectCache $cache = null ) {
+ $this->cache = $cache;
+ }
+
+ /**
+ * Returns the cache key.
+ *
+ * @return string
+ */
+ public function getCacheKey(): string {
+ return $this->getCache()->makeKey( 'translate-groups', 'v' . self::CACHE_VERSION );
+ }
+
+ /**
+ * Safely merges first array to second array, throwing warning on duplicates and removing
+ * duplicates from the first array.
+ * @param array &$additions Things to append
+ * @param array &$to Where to append
+ */
+ protected static function appendAutoloader( array &$additions, array &$to ) {
+ foreach ( $additions as $class => $file ) {
+ if ( isset( $to[$class] ) && $to[$class] !== $file ) {
+ $msg = "Autoload conflict for $class: {$to[$class]} !== $file";
+ trigger_error( $msg, E_USER_WARNING );
+ continue;
+ }
+
+ $to[$class] = $file;
+ }
+ }
+
+ /**
+ * Loads and returns group loaders. Group loaders must implement MessageGroupLoader
+ * and may additionally implement CachedMessageGroupLoader
+ * @return MessageGroupLoader[]
+ */
+ protected function getGroupLoaders() {
+ if ( $this->groupLoaders !== null ) {
+ return $this->groupLoaders;
+ }
+
+ $cache = $this->getCache();
+
+ $groupLoaderInstances = $this->groupLoaders = [];
+
+ // Initialize the dependencies
+ $deps = [
+ 'database' => TranslateUtils::getSafeReadDB(),
+ 'cache' => $cache
+ ];
+
+ Hooks::run( 'TranslateInitGroupLoaders', [ &$groupLoaderInstances, $deps ] );
+
+ if ( $groupLoaderInstances === [] ) {
+ return $this->groupLoaders;
+ }
+
+ foreach ( $groupLoaderInstances as $loader ) {
+ if ( !$loader instanceof MessageGroupLoader ) {
+ throw new InvalidArgumentException(
+ "MessageGroupLoader - $loader must implement the " .
+ "MessageGroupLoader interface."
+ );
+ }
+
+ $this->groupLoaders[] = $loader;
+ }
+
+ return $this->groupLoaders;
+ }
+
+ /**
+ * Returns group loaders that implement the CachedMessageGroupLoader
+ *
+ * @return CachedMessageGroupLoader[]
+ */
+ protected function getCacheGroupLoaders() {
+ // @phan-suppress-next-line PhanTypeMismatchReturn
+ return array_filter( $this->getGroupLoaders(), static function ( $groupLoader ) {
+ return $groupLoader instanceof CachedMessageGroupLoader;
+ } );
+ }
+
+ /**
+ * Fetch a message group by id.
+ *
+ * @param string $id Message group id.
+ * @return MessageGroup|null if it doesn't exist.
+ */
+ public static function getGroup( $id ) {
+ $groups = self::singleton()->getGroups();
+ $id = self::normalizeId( $id );
+
+ if ( isset( $groups[$id] ) ) {
+ return $groups[$id];
+ }
+
+ if ( (string)$id !== '' && $id[0] === '!' ) {
+ $dynamic = self::getDynamicGroups();
+ if ( isset( $dynamic[$id] ) ) {
+ return new $dynamic[$id];
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Fixes the id and resolves aliases.
+ *
+ * @param string $id
+ * @return string
+ * @since 2016.01
+ */
+ public static function normalizeId( $id ) {
+ /* Translatable pages use spaces, but MW occasionally likes to
+ * normalize spaces to underscores */
+ if ( strpos( $id, 'page-' ) === 0 ) {
+ $id = strtr( $id, '_', ' ' );
+ }
+
+ global $wgTranslateGroupAliases;
+ if ( isset( $wgTranslateGroupAliases[$id] ) ) {
+ $id = $wgTranslateGroupAliases[$id];
+ }
+
+ return $id;
+ }
+
+ /**
+ * @param string $id
+ * @return bool
+ */
+ public static function exists( $id ) {
+ return (bool)self::getGroup( $id );
+ }
+
+ /**
+ * Check if a particular aggregate group label exists
+ * @param string $name
+ * @return bool
+ */
+ public static function labelExists( $name ) {
+ $loader = AggregateMessageGroupLoader::getInstance();
+ $labels = array_map( static function ( MessageGroupBase $g ) {
+ return $g->getLabel();
+ }, $loader->loadAggregateGroups() );
+ return in_array( $name, $labels, true );
+ }
+
+ /**
+ * Get all enabled message groups.
+ * @return MessageGroup[] Map of (string => MessageGroup)
+ */
+ public static function getAllGroups() {
+ return self::singleton()->getGroups();
+ }
+
+ /**
+ * We want to de-emphasize time sensitive groups like news for 2009.
+ * They can still exist in the system, but should not appear in front
+ * of translators looking to do some useful work.
+ *
+ * @param MessageGroup|string $group Message group ID
+ * @return string Message group priority
+ * @since 2011-12-12
+ */
+ public static function getPriority( $group ) {
+ if ( self::$prioritycache === null ) {
+ self::$prioritycache = [];
+ // Abusing this table originally intended for other purposes
+ $db = wfGetDB( DB_REPLICA );
+ $table = 'translate_groupreviews';
+ $fields = [ 'tgr_group', 'tgr_state' ];
+ $conds = [ 'tgr_lang' => '*priority' ];
+ $res = $db->select( $table, $fields, $conds, __METHOD__ );
+ foreach ( $res as $row ) {
+ self::$prioritycache[$row->tgr_group] = $row->tgr_state;
+ }
+ }
+
+ if ( $group instanceof MessageGroup ) {
+ $id = $group->getId();
+ } else {
+ $id = self::normalizeId( $group );
+ }
+
+ return self::$prioritycache[$id] ?? '';
+ }
+
+ /**
+ * Sets the message group priority.
+ *
+ * @param MessageGroup|string $group Message group
+ * @param string $priority Priority (empty string to unset)
+ * @since 2013-03-01
+ */
+ public static function setPriority( $group, $priority = '' ) {
+ if ( $group instanceof MessageGroup ) {
+ $id = $group->getId();
+ } else {
+ $id = self::normalizeId( $group );
+ }
+
+ // FIXME: This assumes prioritycache has been populated
+ self::$prioritycache[$id] = $priority;
+
+ $dbw = wfGetDB( DB_PRIMARY );
+ $table = 'translate_groupreviews';
+ $row = [
+ 'tgr_group' => $id,
+ 'tgr_lang' => '*priority',
+ 'tgr_state' => $priority,
+ ];
+
+ if ( $priority === '' ) {
+ unset( $row['tgr_state'] );
+ $dbw->delete( $table, $row, __METHOD__ );
+ } else {
+ $index = [ 'tgr_group', 'tgr_lang' ];
+ $dbw->replace( $table, [ $index ], $row, __METHOD__ );
+ }
+ }
+
+ /**
+ * @since 2011-12-28
+ * @param MessageGroup $group
+ * @return bool
+ */
+ public static function isDynamic( MessageGroup $group ) {
+ $id = $group->getId();
+
+ return ( $id[0] ?? null ) === '!';
+ }
+
+ /**
+ * Returns a list of message groups that share (certain) messages
+ * with this group.
+ * @since 2011-12-25; renamed in 2012-12-10 from getParentGroups.
+ * @param MessageGroup $group
+ * @return string[]
+ */
+ public static function getSharedGroups( MessageGroup $group ) {
+ // Take the first message, get a handle for it and check
+ // if that message belongs to other groups. Those are the
+ // parent aggregate groups. Ideally we loop over all keys,
+ // but this should be enough.
+ $keys = array_keys( $group->getDefinitions() );
+ $title = Title::makeTitle( $group->getNamespace(), $keys[0] );
+ $handle = new MessageHandle( $title );
+ $ids = $handle->getGroupIds();
+ foreach ( $ids as $index => $id ) {
+ if ( $id === $group->getId() ) {
+ unset( $ids[$index] );
+ break;
+ }
+ }
+
+ return $ids;
+ }
+
+ /**
+ * Returns a list of parent message groups. If message group exists
+ * in multiple places in the tree, multiple lists are returned.
+ * @since 2012-12-10
+ * @param MessageGroup $targetGroup
+ * @return array[]
+ */
+ public static function getParentGroups( MessageGroup $targetGroup ) {
+ $ids = self::getSharedGroups( $targetGroup );
+ if ( $ids === [] ) {
+ return [];
+ }
+
+ $targetId = $targetGroup->getId();
+
+ /* Get the group structure. We will be using this to find which
+ * of our candidates are top-level groups. Prefilter it to only
+ * contain aggregate groups. */
+ $structure = self::getGroupStructure();
+ foreach ( $structure as $index => $group ) {
+ if ( $group instanceof MessageGroup ) {
+ unset( $structure[$index] );
+ } else {
+ $structure[$index] = array_shift( $group );
+ }
+ }
+
+ /* Now that we have all related groups, use them to find all paths
+ * from top-level groups to target group with any number of subgroups
+ * in between. */
+ $paths = [];
+
+ /* This function recursively finds paths to the target group */
+ $pathFinder = static function ( &$paths, $group, $targetId, $prefix = '' )
+ use ( &$pathFinder ) {
+ if ( $group instanceof AggregateMessageGroup ) {
+ foreach ( $group->getGroups() as $subgroup ) {
+ $subId = $subgroup->getId();
+ if ( $subId === $targetId ) {
+ $paths[] = $prefix;
+ continue;
+ }
+
+ $pathFinder( $paths, $subgroup, $targetId, "$prefix|$subId" );
+ }
+ }
+ };
+
+ // Iterate over the top-level groups only
+ foreach ( $ids as $id ) {
+ // First, find a top level groups
+ $group = self::getGroup( $id );
+
+ // Quick escape for leaf groups
+ if ( !$group instanceof AggregateMessageGroup ) {
+ continue;
+ }
+
+ foreach ( $structure as $rootGroup ) {
+ /** @var MessageGroup $rootGroup */
+ if ( $rootGroup->getId() === $group->getId() ) {
+ // Yay we found a top-level group
+ $pathFinder( $paths, $rootGroup, $targetId, $id );
+ break; // No we have one or more paths appended into $paths
+ }
+ }
+ }
+
+ // And finally explode the strings
+ return array_map( static function ( string $pathString ): array {
+ return explode( '|', $pathString );
+ }, $paths );
+ }
+
+ /** @return self */
+ public static function singleton() {
+ static $instance;
+ if ( !$instance instanceof self ) {
+ $instance = new self();
+ }
+
+ return $instance;
+ }
+
+ /**
+ * Get all enabled non-dynamic message groups.
+ *
+ * @return MessageGroup[] Map of (group ID => MessageGroup)
+ */
+ public function getGroups() {
+ $this->init();
+
+ return $this->groups;
+ }
+
+ /**
+ * Get message groups for corresponding message group ids.
+ *
+ * @param string[] $ids Group IDs
+ * @param bool $skipMeta Skip aggregate message groups
+ * @return MessageGroup[]
+ * @since 2012-02-13
+ */
+ public static function getGroupsById( array $ids, $skipMeta = false ) {
+ $groups = [];
+ foreach ( $ids as $id ) {
+ $group = self::getGroup( $id );
+
+ if ( $group !== null ) {
+ if ( $skipMeta && $group->isMeta() ) {
+ continue;
+ } else {
+ $groups[$id] = $group;
+ }
+ } else {
+ wfDebug( __METHOD__ . ": Invalid message group id: $id\n" );
+ }
+ }
+
+ return $groups;
+ }
+
+ /**
+ * If the list of message group ids contains wildcards, this function will match
+ * them against the list of all supported message groups and return matched
+ * message group ids.
+ * @param string[]|string $ids
+ * @return string[]
+ * @since 2012-02-13
+ */
+ public static function expandWildcards( $ids ) {
+ $all = [];
+
+ $ids = (array)$ids;
+ foreach ( $ids as $index => $id ) {
+ // Fast path, no wildcards
+ if ( strcspn( $id, '*?' ) === strlen( $id ) ) {
+ $g = self::getGroup( $id );
+ if ( $g ) {
+ $all[] = $g->getId();
+ }
+ unset( $ids[$index] );
+ }
+ }
+
+ if ( $ids === [] ) {
+ return $all;
+ }
+
+ // Slow path for the ones with wildcards
+ $matcher = new StringMatcher( '', $ids );
+ foreach ( self::getAllGroups() as $id => $_ ) {
+ if ( $matcher->matches( $id ) ) {
+ $all[] = $id;
+ }
+ }
+
+ return $all;
+ }
+
+ /**
+ * Contents on these groups changes on a whim.
+ * @since 2011-12-28
+ * @return array
+ */
+ public static function getDynamicGroups() {
+ return [
+ '!recent' => 'RecentMessageGroup',
+ '!additions' => 'RecentAdditionsMessageGroup',
+ '!sandbox' => 'SandboxMessageGroup',
+ ];
+ }
+
+ /**
+ * Get only groups of specific type (class).
+ * @phan-template T
+ * @param string $type Class name of wanted type
+ * @phan-param class-string<T> $type
+ * @return MessageGroup[] Map of (group ID => MessageGroupBase)
+ * @phan-return array<T&MessageGroup>
+ * @since 2012-04-30
+ */
+ public static function getGroupsByType( $type ) {
+ $groups = self::getAllGroups();
+ foreach ( $groups as $id => $group ) {
+ if ( !$group instanceof $type ) {
+ unset( $groups[$id] );
+ }
+ }
+
+ // @phan-suppress-next-line PhanTypeMismatchReturn
+ return $groups;
+ }
+
+ /**
+ * Returns a tree of message groups. First group in each subgroup is
+ * the aggregate group. Groups can be nested infinitely, though in practice
+ * other code might not handle more than two (or even one) nesting levels.
+ * One group can exist multiple times in different parts of the tree.
+ * In other words: [Group1, Group2, [AggGroup, Group3, Group4]]
+ *
+ * @throws MWException If cyclic structure is detected.
+ * @return array Map of (group ID => MessageGroup or recursive array)
+ */
+ public static function getGroupStructure() {
+ $groups = self::getAllGroups();
+
+ // Determine the top level groups of the tree
+ $tree = $groups;
+ /** @var MessageGroup $o */
+ foreach ( $groups as $id => $o ) {
+ if ( !$o->exists() ) {
+ unset( $groups[$id], $tree[$id] );
+ continue;
+ }
+
+ if ( $o instanceof AggregateMessageGroup ) {
+ foreach ( $o->getGroups() as $sid => $so ) {
+ unset( $tree[$sid] );
+ }
+ }
+ }
+
+ usort( $tree, [ self::class, 'groupLabelSort' ] );
+
+ /* Now we have two things left in $tree array:
+ * - solitaries: top-level non-aggregate message groups
+ * - top-level aggregate message groups */
+ foreach ( $tree as $index => $group ) {
+ if ( $group instanceof AggregateMessageGroup ) {
+ $tree[$index] = self::subGroups( $group );
+ }
+ }
+
+ /* Essentially we are done now. Cyclic groups can cause part of the
+ * groups not be included at all, because they have all unset each
+ * other in the first loop. So now we check if there are groups left
+ * over. */
+ $used = [];
+ array_walk_recursive(
+ $tree,
+ static function ( MessageGroup $group ) use ( &$used ) {
+ $used[$group->getId()] = true;
+ }
+ );
+ $unused = array_diff_key( $groups, $used );
+ if ( $unused ) {
+ foreach ( $unused as $index => $group ) {
+ if ( !$group instanceof AggregateMessageGroup ) {
+ unset( $unused[$index] );
+ }
+ }
+
+ // Only list the aggregate groups, other groups cannot cause cycles
+ $participants = implode( ', ', array_keys( $unused ) );
+ throw new MWException( "Found cyclic aggregate message groups: $participants" );
+ }
+
+ return $tree;
+ }
+
+ /**
+ * Sorts groups by label value
+ * @param MessageGroup $a
+ * @param MessageGroup $b
+ * @return int
+ */
+ public static function groupLabelSort( $a, $b ) {
+ $al = $a->getLabel();
+ $bl = $b->getLabel();
+
+ return strcasecmp( $al, $bl );
+ }
+
+ /**
+ * Like getGroupStructure but start from one root which must be an
+ * AggregateMessageGroup.
+ *
+ * @param AggregateMessageGroup $parent
+ * @param string[] &$childIds Flat list of child group IDs [returned]
+ * @param string $fname Calling method name; used to identify recursion [optional]
+ * @throws MWException
+ * @return array
+ * @since Public since 2012-11-29
+ */
+ public static function subGroups(
+ AggregateMessageGroup $parent,
+ array &$childIds = [],
+ $fname = 'caller'
+) {
+ static $recursionGuard = [];
+
+ $pid = $parent->getId();
+ if ( isset( $recursionGuard[$pid] ) ) {
+ $tid = $pid;
+ $path = [ $tid ];
+ do {
+ $tid = $recursionGuard[$tid];
+ $path[] = $tid;
+ // Until we have gone full cycle
+ } while ( $tid !== $pid );
+ $path = implode( ' > ', $path );
+ throw new MWException( "Found cyclic aggregate message groups: $path" );
+ }
+
+ // We don't care about the ids.
+ $tree = array_values( $parent->getGroups() );
+ usort( $tree, [ self::class, 'groupLabelSort' ] );
+ // Expand aggregate groups (if any left) after sorting to form a tree
+ foreach ( $tree as $index => $group ) {
+ if ( $group instanceof AggregateMessageGroup ) {
+ $sid = $group->getId();
+ $recursionGuard[$pid] = $sid;
+ $tree[$index] = self::subGroups( $group, $childIds, __METHOD__ );
+ unset( $recursionGuard[$pid] );
+
+ $childIds[$sid] = 1;
+ }
+ }
+
+ // Parent group must be first item in the array
+ array_unshift( $tree, $parent );
+
+ if ( $fname !== __METHOD__ ) {
+ // Move the IDs from the keys to the value for final return
+ $childIds = array_values( $childIds );
+ }
+
+ return $tree;
+ }
+
+ /**
+ * Checks whether all the message groups have the same source language.
+ * @param array $groups A list of message groups objects.
+ * @return string Language code if the languages are the same, empty string otherwise.
+ * @since 2013.09
+ */
+ public static function haveSingleSourceLanguage( array $groups ) {
+ $seen = '';
+
+ foreach ( $groups as $group ) {
+ $language = $group->getSourceLanguage();
+ if ( $seen === '' ) {
+ $seen = $language;
+ } elseif ( $language !== $seen ) {
+ return '';
+ }
+ }
+
+ return $seen;
+ }
+
+ /**
+ * Filters out messages that should not be translated under normal
+ * conditions.
+ *
+ * @param MessageHandle $handle Handle for the translation target.
+ * @param string $targetLanguage
+ * @return bool
+ * @since 2013.10
+ */
+ public static function isTranslatableMessage( MessageHandle $handle, string $targetLanguage ): bool {
+ static $cache = [];
+
+ if ( !$handle->isValid() ) {
+ return false;
+ }
+
+ $group = $handle->getGroup();
+ $groupId = $group->getId();
+ $cacheKey = "$groupId:$targetLanguage";
+
+ if ( !isset( $cache[$cacheKey] ) ) {
+ $supportedLanguages = TranslateUtils::getLanguageNames( 'en' );
+ $inclusionList = $group->getTranslatableLanguages() ?? $supportedLanguages;
+
+ $included = isset( $inclusionList[$targetLanguage] );
+ $excluded = TranslateMetadata::isExcluded( $groupId, $targetLanguage );
+
+ $cache[$cacheKey] = [
+ 'relevant' => $included && !$excluded,
+ 'tags' => [],
+ ];
+
+ $groupTags = $group->getTags();
+ foreach ( [ 'ignored', 'optional' ] as $tag ) {
+ if ( isset( $groupTags[$tag] ) ) {
+ foreach ( $groupTags[$tag] as $key ) {
+ // TODO: ucfirst should not be here
+ $cache[$cacheKey]['tags'][ucfirst( $key )] = true;
+ }
+ }
+ }
+ }
+
+ return $cache[$cacheKey]['relevant'] &&
+ !isset( $cache[$cacheKey]['tags'][ucfirst( $handle->getKey() )] );
+ }
+}
diff --git a/Translate/MetaYamlSchemaExtender.php b/Translate/MetaYamlSchemaExtender.php
new file mode 100644
index 00000000..b1fc5cd5
--- /dev/null
+++ b/Translate/MetaYamlSchemaExtender.php
@@ -0,0 +1,25 @@
+<?php
+
+/**
+ * Message groups are usually configured in YAML, though the actual storage format does not matter,
+ * because they are parsed to PHP arrays anyway. The configuration consists of sections, and in some
+ * section there is key 'class' which defines the class implementing that part of behavior. These
+ * classes can take custom parameters, so in essense our configuration format is open-ended. To
+ * implement proper validation, those classes can extend the schema runtime by implementing this
+ * interface. Validation is implemented with the MetaYaml library.
+ *
+ * Because neither is_a nor instanceof accept class names, validation code will check directly
+ * whether this method exists, whether the class implements the interface or not.
+ *
+ * @see https://github.com/romaricdrigon/MetaYaml
+ * @see https://www.mediawiki.org/wiki/Help:Extension:Translate/Group_configuration
+ * @since 2014.01
+ */
+interface MetaYamlSchemaExtender {
+ /**
+ * Return a data structure that will be merged with the base schema. It is not possible to remove
+ * things.
+ * @return array
+ */
+ public static function getExtraSchema();
+}
diff --git a/Translate/README b/Translate/README
new file mode 100644
index 00000000..2d629a53
--- /dev/null
+++ b/Translate/README
@@ -0,0 +1,36 @@
+The Translate extension makes MediaWiki a powerful tool to translate every
+kind of text. It's used especially to translate software user interfaces and
+to manage multilingual wikis in a sensible way.
+
+== Copying ==
+See http://www.gnu.org/licenses/gpl2.html
+
+== Installation ==
+For a very very quick start add the following to LocalSettings.php:
+
+ wfLoadExtension( 'Translate' );
+ $wgGroupPermissions['user']['translate'] = true;
+ $wgGroupPermissions['user']['translate-messagereview'] = true;
+ $wgGroupPermissions['sysop']['pagetranslation'] = true;
+
+More documentation is at
+ https://www.mediawiki.org/wiki/Help:Extension:Translate
+ https://www.mediawiki.org/wiki/Help:Extension:Translate/Installation
+ https://www.mediawiki.org/wiki/Help:Extension:Translate/Configuration
+
+== Contributing ==
+To translate this extension go to https://translatewiki.net and sign up.
+
+To contribute features, fixes and code maintenance, please see
+* https://www.mediawiki.org/wiki/Special:MyLanguage/How_to_become_a_MediaWiki_hacker
+* https://www.mediawiki.org/wiki/Special:MyLanguage/Code_of_Conduct
+* https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Getting_started_with_development
+
+There is also a dedicated Translate and translatewiki.net development
+environment, see
+* https://gerrit.wikimedia.org/r/plugins/gitiles/translatewiki/+/refs/heads/master/puppet/README
+
+Known bugs and feature requests are collected and reported at
+ https://phabricator.wikimedia.org/tag/mediawiki-extensions-translate/
+
+You can chat with the developers at #wikimedia-language on Libera Chat IRC.
diff --git a/Translate/RELEASE-NOTES b/Translate/RELEASE-NOTES
new file mode 100644
index 00000000..5561010a
--- /dev/null
+++ b/Translate/RELEASE-NOTES
@@ -0,0 +1,32 @@
+== Translate 2022.10 ==
+Released at 2022-10-28.
+
+=== Noteworthy changes ===
+* ['''SECURITY'''] Adds missing block checks to various pages and API
+({{phab|T302479}}, {{gerrit|838940}})
+* Prevent deletion of translated pages through the API. ({{phab|T319135}},
+{{gerrit|837234}})
+* Do not hide errors during translation save, when displaying validation errors
+({{gerrit|833346}})
+* Periodically update edit summary time displayed in translation user interface
+({{phab|T308719}}, {{gerrit|826301}})
+* Block translations from user blocked from editing translatable bundle
+({{phab|T317594}}, {{gerrit|831651}})
+* Ensure first group is visible immediately on Special:AggregateGroups
+({{phab|T315174}}, {{gerrit|822723}})
+* Mark new keys added to a MessageBundle as fuzzy ({{phab|T317038}}, {{gerrit|831226}})
+* Edit summaries: Reduce number of edit summaries on translation user interface
+to 3 ({{phab|T308720}}, {{gerrit|830878}})
+* Add anchor for source version of heading on translation pages
+({{phab|T62544}}, {{gerrit|826995}})
+* Wrap summary text on previous edit summaries ({{phab|T308720}}, {{gerrit|822035}})
+* Make Insertable without post content to replace selection
+({{phab|T114101}}, {{gerrit|822193}})
+* Add support for Elastica extension 7.1.5 ({{phab|T309581}}, {{gerrit|828050}})
+* Fix title not appearing in fieldset legend when deleting translatable bundles
+({{phab|T314447}}, {{gerrit|820011}})
+* Add feature to save description for a message bundle
+({{phab|T311503}}, {{gerrit|811878}})
+* Tux: Decrease time to display validation warnings to 1 second
+({{phab|T164306}}, {{gerrit|843405}})
+* Improve the way we store statuses for translatable bundles. ({{phab|T141961}})
diff --git a/Translate/Translate.alias.php b/Translate/Translate.alias.php
new file mode 100644
index 00000000..67ee7576
--- /dev/null
+++ b/Translate/Translate.alias.php
@@ -0,0 +1,1158 @@
+<?php
+/**
+ * Aliases for special pages of Translate extension.
+ *
+ * @file
+ * @license GPL-2.0-or-later
+ */
+
+$specialPageAliases = [];
+
+/** English (English) */
+$specialPageAliases['en'] = [
+ 'AggregateGroups' => [ 'AggregateGroups' ],
+ 'ImportTranslations' => [ 'ImportTranslations' ],
+ 'ExportTranslations' => [ 'ExportTranslations' ],
+ 'LanguageStats' => [ 'LanguageStats' ],
+ 'ManageMessageGroups' => [ 'ManageMessageGroups' ],
+ 'ManageTranslatorSandbox' => [ 'ManageTranslatorSandbox', 'TranslateSandbox' ],
+ 'MessageGroupStats' => [ 'MessageGroupStats' ],
+ 'PageTranslation' => [ 'PageTranslation' ],
+ 'PageTranslationDeletePage' => [ 'PageTranslationDeletePage' ],
+ 'SearchTranslations' => [ 'SearchTranslations' ],
+ 'SupportedLanguages' => [ 'ActiveLanguages', 'SupportedLanguages' ],
+ 'Translate' => [ 'Translate' ],
+ 'TranslationStash' => [ 'TranslationStash' ],
+ 'TranslationStats' => [ 'TranslationStats', 'TranslationStatistics' ],
+ 'Translations' => [ 'Translations' ],
+ 'PageMigration' => [ 'PageMigration' ],
+ 'PagePreparation' => [ 'PagePreparation' ],
+];
+
+/** Afrikaans (Afrikaans) */
+$specialPageAliases['af'] = [
+ 'LanguageStats' => [ 'TaalStatsistieke' ],
+ 'PageTranslation' => [ 'BladsyVertaling' ],
+ 'Translate' => [ 'Vertaal' ],
+ 'TranslationStats' => [ 'VertaalStatistieke' ],
+ 'Translations' => [ 'Vertalings' ],
+];
+
+/** Arabic (العربية) */
+$specialPageAliases['ar'] = [
+ 'AggregateGroups' => [ 'مجموعات_مجمعة' ],
+ 'ImportTranslations' => [ 'استيراد_الترجمات' ],
+ 'LanguageStats' => [ 'إحصاءات_اللغات' ],
+ 'ManageMessageGroups' => [ 'التحكم_بمجموعات_الرسائل' ],
+ 'ManageTranslatorSandbox' => [ 'التحكم_بملعب_المترجم', 'ملعب_الترجمة' ],
+ 'MessageGroupStats' => [ 'إحصاءات_مجموعات_الرسائل' ],
+ 'PageTranslation' => [ 'ترجمة_صفحة' ],
+ 'PageTranslationDeletePage' => [ 'صفحة_حذف_ترجمة_الصفحة' ],
+ 'SearchTranslations' => [ 'بحث_الترجمات' ],
+ 'SupportedLanguages' => [ 'اللغات_المدعومة' ],
+ 'Translate' => [ 'ترجمة' ],
+ 'TranslationStash' => [ 'ستاش_الترجمة' ],
+ 'TranslationStats' => [ 'إحصاءات_الترجمة' ],
+ 'Translations' => [ 'ترجمات' ],
+ 'PageMigration' => [ 'هجرة_الصفحة' ],
+ 'PagePreparation' => [ 'تحضير_الصفحة' ],
+];
+
+/** Aramaic (ܐܪܡܝܐ) */
+$specialPageAliases['arc'] = [
+ 'PageTranslation' => [ 'ܬܘܪܓܡܐ_ܕܦܐܬܐ' ],
+ 'SupportedLanguages' => [ 'ܠܫܢ̈ܐ_ܣܡܝܟ̈ܐ' ],
+ 'Translate' => [ 'ܬܪܓܡ' ],
+ 'Translations' => [ 'ܬܘܪ̈ܓܡܐ' ],
+];
+
+/** Egyptian Arabic (مصرى) */
+$specialPageAliases['arz'] = [
+ 'AggregateGroups' => [ 'مجموعات_متجمعه' ],
+ 'ImportTranslations' => [ 'استوراد_الترجمات' ],
+ 'LanguageStats' => [ 'احصائيات_اللغات' ],
+ 'ManageMessageGroups' => [ 'التحكم_بمجموعات_الرسايل' ],
+ 'ManageTranslatorSandbox' => [ 'التحكم_بسبوره_المترجم', 'سبوره_الترجمه' ],
+ 'MessageGroupStats' => [ 'احصاءات_مجموعات_الرسايل' ],
+ 'PageTranslation' => [ 'ترجمة_صفحه' ],
+ 'PageTranslationDeletePage' => [ 'صفحه_حذف_ترجمه_الصفحه' ],
+ 'SearchTranslations' => [ 'تدوير_الترجمات' ],
+ 'SupportedLanguages' => [ 'اللغات_المتدعمه' ],
+ 'Translate' => [ 'ترجمه' ],
+ 'TranslationStash' => [ 'ستاش_الترجمه' ],
+ 'TranslationStats' => [ 'احصائيات_الترجمه' ],
+ 'Translations' => [ 'ترجمات' ],
+ 'PageMigration' => [ 'هجره_الصفحه' ],
+];
+
+/** Assamese (অসমীয়া) */
+$specialPageAliases['as'] = [
+ 'ImportTranslations' => [ 'অনুবাদ_আমদানি_কৰক' ],
+ 'LanguageStats' => [ 'ভাষাৰ_পৰিসংখ্যা' ],
+ 'MessageGroupStats' => [ 'বাৰ্তাৰ_গোট_পৰিসংখ্যা' ],
+ 'PageTranslation' => [ 'পৃষ্ঠা_অনুবাদ' ],
+ 'SupportedLanguages' => [ 'সমৰ্থিত_ভাষাসমূহ' ],
+ 'Translate' => [ 'অনুবাদ_কৰক' ],
+ 'TranslationStats' => [ 'অনুবাদ_পৰিসংখ্যা' ],
+ 'Translations' => [ 'অনুবাদসমূহ' ],
+];
+
+/** Asturian (asturianu) */
+$specialPageAliases['ast'] = [
+ 'Translate' => [ 'Traducir' ],
+];
+
+/** Avaric (авар) */
+$specialPageAliases['av'] = [
+ 'AggregateGroups' => [ 'Агрегированные_группы' ],
+ 'ImportTranslations' => [ 'Импорт_переводов' ],
+ 'LanguageStats' => [ 'Статистика_языка' ],
+ 'ManageMessageGroups' => [ 'Управление_группами_сообщений' ],
+ 'MessageGroupStats' => [ 'Статистика_группы_сообщений' ],
+ 'PageTranslation' => [ 'Перевод_страниц' ],
+ 'PageTranslationDeletePage' => [ 'Удаление_переводимой_страницы' ],
+ 'SearchTranslations' => [ 'Поиск_переводов' ],
+ 'SupportedLanguages' => [ 'Поддерживаемые_языки' ],
+ 'Translate' => [ 'Перевести' ],
+ 'TranslationStats' => [ 'Статистика_переводов' ],
+ 'Translations' => [ 'Переводы' ],
+];
+
+/** Azerbaijani (azərbaycanca) */
+$specialPageAliases['az'] = [
+ 'PageTranslation' => [ 'SəhifəTərcüməsi' ],
+ 'Translations' => [ 'Tərcümələr' ],
+];
+
+/** South Azerbaijani (تۆرکجه) */
+$specialPageAliases['azb'] = [
+ 'PageTranslation' => [ 'صحیفه_چئویرمه‌سی' ],
+ 'Translations' => [ 'چئویرمه‌لر' ],
+];
+
+/** Bashkir (башҡортса) */
+$specialPageAliases['ba'] = [
+ 'Translate' => [ 'Translate' ],
+ 'Translations' => [ 'Translations' ],
+];
+
+/** Southern Balochi (بلوچی مکرانی) */
+$specialPageAliases['bcc'] = [
+ 'Translate' => [ 'ترجمه' ],
+];
+
+/** Bulgarian (български) */
+$specialPageAliases['bg'] = [
+ 'Translate' => [ 'Превеждане' ],
+ 'Translations' => [ 'Преводи' ],
+];
+
+/** Western Balochi (بلوچی رخشانی) */
+$specialPageAliases['bgn'] = [
+ 'AggregateGroups' => [ 'گروپ_ئآنی_جم' ],
+ 'ImportTranslations' => [ 'ترجمه_ئانی_درون_بررّگ' ],
+ 'LanguageStats' => [ 'زبان_ئانی_سرجم' ],
+ 'ManageMessageGroups' => [ 'پیامی_گروپ_ئانی_مدیریت' ],
+ 'ManageTranslatorSandbox' => [ 'ترجمه_ئی_تمرین_ئی_تاکدیمی_مدیریت' ],
+ 'MessageGroupStats' => [ 'پیام_ی_گروپ_ئی_سرجم' ],
+ 'PageTranslation' => [ 'ترجمه_ئی_تاکدیم' ],
+ 'PageTranslationDeletePage' => [ 'تاکدیمی_پاک_کورتین' ],
+ 'SearchTranslations' => [ 'ترجمه_ئانی_گشتین' ],
+ 'SupportedLanguages' => [ 'پُشتیوانی_بوته_ئین_زبانان' ],
+ 'Translate' => [ 'ترجمه' ],
+ 'TranslationStats' => [ 'ترجمه_ئانی_سرجم' ],
+ 'Translations' => [ 'ترجمه_ئان' ],
+ 'PageMigration' => [ 'تاکدیمی_لَڑ_و_بار' ],
+];
+
+/** Banjar (Bahasa Banjar) */
+$specialPageAliases['bjn'] = [
+ 'ImportTranslations' => [ 'Impor_tarjamahan' ],
+ 'LanguageStats' => [ 'Statistik_bahasa' ],
+ 'PageTranslation' => [ 'Tarjamahan_tungkaran' ],
+ 'Translate' => [ 'Tarjamahakan' ],
+ 'TranslationStats' => [ 'Statistik_tarjamahan' ],
+ 'Translations' => [ 'Tarjamahan' ],
+];
+
+/** Bengali (বাংলা) */
+$specialPageAliases['bn'] = [
+ 'AggregateGroups' => [ 'সমষ্টিগত_গোষ্ঠীসমূহ' ],
+ 'ImportTranslations' => [ 'অনুবাদ_আমদানি' ],
+ 'ExportTranslations' => [ 'অনুবাদ_রপ্তানি' ],
+ 'LanguageStats' => [ 'ভাষার_পরিসংখ্যান' ],
+ 'ManageMessageGroups' => [ 'বার্তার_গোষ্ঠী_পরিচালনা' ],
+ 'ManageTranslatorSandbox' => [ 'অনুবাদকের_খেলাঘর_পরিচালনা', 'অনুবাদের_খেলাঘর' ],
+ 'MessageGroupStats' => [ 'বার্তা_দলের_পরিসংখ্যান' ],
+ 'PageTranslation' => [ 'পাতা_অনুবাদ' ],
+ 'PageTranslationDeletePage' => [ 'পাতা_অনুবাদের_পাতা_অপসারণ' ],
+ 'SearchTranslations' => [ 'অনুবাদ_অনুসন্ধান' ],
+ 'SupportedLanguages' => [ 'সমর্থিত_ভাষা' ],
+ 'Translate' => [ 'অনুবাদ' ],
+ 'TranslationStash' => [ 'অনুবাদের_স্টাশ' ],
+ 'TranslationStats' => [ 'অনুবাদের_পরিসংখ্যান' ],
+ 'Translations' => [ 'অনুবাদসমূহ' ],
+ 'PageMigration' => [ 'পাতা_অভিপ্রায়ণ', 'পৃষ্ঠা_অভিপ্রায়ণ' ],
+ 'PagePreparation' => [ 'পাতা_প্রস্তুতি', 'পৃষ্ঠা_প্রস্তুতি' ],
+];
+
+/** Breton (brezhoneg) */
+$specialPageAliases['br'] = [
+ 'ImportTranslations' => [ 'EnporzhiañTroidigezhioù' ],
+ 'LanguageStats' => [ 'StadegoùYezh' ],
+ 'PageTranslation' => [ 'TroidigezhPajenn' ],
+ 'SupportedLanguages' => [ 'Yezhoùskoret' ],
+ 'Translate' => [ 'Treiñ' ],
+ 'TranslationStats' => [ 'StadegoùTreiñ' ],
+ 'Translations' => [ 'Troidigezhioù' ],
+];
+
+/** Bosnian (bosanski) */
+$specialPageAliases['bs'] = [
+ 'ImportTranslations' => [ 'UvozPrijevoda' ],
+ 'ExportTranslations' => [ 'IzvozPrijevoda' ],
+ 'LanguageStats' => [ 'StatistikeJezika' ],
+ 'PageTranslation' => [ 'PrijevodStranice' ],
+ 'Translate' => [ 'Prevedi' ],
+ 'TranslationStats' => [ 'StatistikePrevoda' ],
+ 'Translations' => [ 'Prijevodi' ],
+];
+
+/** буряад (буряад) */
+$specialPageAliases['bxr'] = [
+ 'PageTranslation' => [ 'Хуудаһанай_оршуулга' ],
+ 'SupportedLanguages' => [ 'Дэмжэдэг_хэлэн' ],
+ 'Translate' => [ 'Оршуулха' ],
+ 'Translations' => [ 'Оршуулганууд' ],
+];
+
+/** Min Dong Chinese (Mìng-dĕ̤ng-ngṳ̄) */
+$specialPageAliases['cdo'] = [
+ 'ImportTranslations' => [ '導底翻譯' ],
+ 'LanguageStats' => [ '語言統計' ],
+ 'ManageMessageGroups' => [ '管理信息組' ],
+ 'MessageGroupStats' => [ '信息組統計' ],
+ 'PageTranslation' => [ '頁面翻譯' ],
+ 'SupportedLanguages' => [ '支持其語言' ],
+ 'Translate' => [ '翻譯' ],
+ 'TranslationStats' => [ '翻譯統計' ],
+];
+
+/** Chechen (нохчийн) */
+$specialPageAliases['ce'] = [
+ 'AggregateGroups' => [ 'Агрегированни_тобанаш' ],
+ 'ImportTranslations' => [ 'Гоч_йинарш_импорт_яр' ],
+ 'LanguageStats' => [ 'Меттан_статистика' ],
+ 'ManageMessageGroups' => [ 'Хаамийн_тобанийн_урхалла_дар' ],
+ 'MessageGroupStats' => [ 'Хаамийн_тобанийн_статистика' ],
+ 'PageTranslation' => [ 'АгӀонаш_гоч_яр' ],
+ 'PageTranslationDeletePage' => [ 'Гоч_еш_йолу_агӀо_дӀаяккхар' ],
+ 'SearchTranslations' => [ 'Гоч_йинарш_лахар' ],
+ 'SupportedLanguages' => [ 'Ловш_долу_меттанаш' ],
+ 'Translate' => [ 'Гоч_де' ],
+ 'TranslationStats' => [ 'Гочдаран_статистика' ],
+ 'Translations' => [ 'Гоч_дарш' ],
+];
+
+/** Cebuano (Cebuano) */
+$specialPageAliases['ceb'] = [
+ 'Translate' => [ 'Hubara' ],
+];
+
+/** Czech (čeština) */
+$specialPageAliases['cs'] = [
+ 'Translate' => [ 'Přeložit' ],
+];
+
+/** Danish (dansk) */
+$specialPageAliases['da'] = [
+ 'PageTranslation' => [ 'Sideoversættelse' ],
+ 'Translate' => [ 'Oversæt' ],
+];
+
+/** German (Deutsch) */
+$specialPageAliases['de'] = [
+ 'AggregateGroups' => [ 'Zusammenfassende_Nachrichtengruppen' ],
+ 'ImportTranslations' => [ 'Übersetzungen_importieren' ],
+ 'LanguageStats' => [ 'Sprachstatistiken' ],
+ 'ManageMessageGroups' => [ 'Nachrichtengruppen_verwalten' ],
+ 'ManageTranslatorSandbox' => [ 'Übersetzerspielwiese_verwalten' ],
+ 'MessageGroupStats' => [ 'Nachrichtengruppenstatistiken' ],
+ 'PageTranslation' => [ 'Übersetzung_von_Seiten' ],
+ 'PageTranslationDeletePage' => [ 'Löschseite_für_Übersetzungen' ],
+ 'SearchTranslations' => [ 'Übersetzungen_suchen' ],
+ 'SupportedLanguages' => [ 'Unterstützte_Sprachen' ],
+ 'Translate' => [ 'Übersetzen' ],
+ 'TranslationStash' => [ 'Übersetzungsversteck' ],
+ 'TranslationStats' => [ 'Übersetzungsstatistik' ],
+ 'Translations' => [ 'Übersetzungen' ],
+ 'PageMigration' => [ 'Seitenmigration' ],
+ 'PagePreparation' => [ 'Seitenvorbereitung' ],
+];
+
+/** Zazaki (Zazaki) */
+$specialPageAliases['diq'] = [
+ 'AggregateGroups' => [ 'GrubéAggregate' ],
+ 'ImportTranslations' => [ 'AçarnayışaZerrefi' ],
+ 'LanguageStats' => [ 'İstatistikêZıwani' ],
+ 'ManageMessageGroups' => [ 'GrubanéMesacanİdareke' ],
+ 'ManageTranslatorSandbox' => [ 'İdareyaQumdorAçarnayış', 'QumdorAçarnayış' ],
+ 'MessageGroupStats' => [ 'İstatistikêGrubaMesacan' ],
+ 'PageTranslation' => [ 'Açarnayışê_Pele' ],
+ 'PageTranslationDeletePage' => [ 'PerraAçarnayışéPerraBesternayış' ],
+ 'SearchTranslations' => [ 'AçarnayışaCıgeyreyış' ],
+ 'SupportedLanguages' => [ 'ZıwanêkeDestegnênê' ],
+ 'Translate' => [ 'Açarnayış' ],
+ 'TranslationStash' => [ 'AçarnayışiNımnanyış' ],
+ 'TranslationStats' => [ 'İstatistikêAçarnayışi' ],
+ 'Translations' => [ 'Açarnayoği' ],
+];
+
+/** Lower Sorbian (dolnoserbski) */
+$specialPageAliases['dsb'] = [
+ 'LanguageStats' => [ 'Rěcne statistiki' ],
+ 'Translate' => [ 'Přełožiś' ],
+ 'TranslationStats' => [ 'Statistika pśełožkow' ],
+ 'Translations' => [ 'Pśełožki' ],
+];
+
+/** Divehi (ދިވެހިބަސް) */
+$specialPageAliases['dv'] = [
+ 'Translate' => [ 'ތަރުޖަމާކުރައްވާ' ],
+ 'Translations' => [ 'ތަރުޖަމާތައް' ],
+];
+
+/** Greek (Ελληνικά) */
+$specialPageAliases['el'] = [
+ 'AggregateGroups' => [ 'ΣυγκεντρωτικέςΟμάδες' ],
+ 'ImportTranslations' => [ 'ΕισαγωγήΜεταφράσεων' ],
+ 'LanguageStats' => [ 'ΣτατιστικάΓλώσσας' ],
+ 'ManageMessageGroups' => [ 'ΔιαχείρισηΟμάδωνΜηνυμάτων' ],
+ 'ManageTranslatorSandbox' => [ 'ΔιαχείρισηΑμμοδοχείουΜεταφραστή', 'ΑμμοδοχείοΜετάφρασης' ],
+ 'MessageGroupStats' => [ 'ΣτατιστικάΟμάδαςΜηνυμάτων' ],
+ 'PageTranslation' => [ 'ΜετάφρασηΣελίδας' ],
+ 'PageTranslationDeletePage' => [ 'ΔιαγραφήΣελίδαςΜετάφρασηςΣελίδων' ],
+ 'SearchTranslations' => [ 'ΑναζήτησηΜεταφράσεων' ],
+ 'SupportedLanguages' => [ 'ΥποστηριζόμενεςΓλώσσες' ],
+ 'Translate' => [ 'Μετάφραση' ],
+ 'TranslationStats' => [ 'ΣτατιστικάΜετάφρασης' ],
+ 'Translations' => [ 'Μεταφράσεις' ],
+];
+
+/** Esperanto (Esperanto) */
+$specialPageAliases['eo'] = [
+ 'ImportTranslations' => [ 'Enporti_tradukojn', 'Importi_tradukojn' ],
+ 'LanguageStats' => [ 'Lingvaj_statistikoj' ],
+ 'SearchTranslations' => [ 'Serĉi_tradukojn' ],
+ 'SupportedLanguages' => [ 'Subtenataj_lingvoj' ],
+ 'Translate' => [ 'Traduki' ],
+ 'TranslationStats' => [ 'Statistikol_pri_tradukado' ],
+ 'Translations' => [ 'Tradukoj' ],
+];
+
+/** Spanish (español) */
+$specialPageAliases['es'] = [
+ 'SupportedLanguages' => [ 'IdiomasAdmitidos' ],
+ 'Translate' => [ 'Traducir' ],
+ 'Translations' => [ 'Traducciones' ],
+];
+
+/** Persian (فارسی) */
+$specialPageAliases['fa'] = [
+ 'AggregateGroups' => [ 'جمع_گروه‌ها' ],
+ 'ImportTranslations' => [ 'درون‌بری_ترجمه‌ها' ],
+ 'LanguageStats' => [ 'آمار_زبان‌ها' ],
+ 'ManageMessageGroups' => [ 'مدیریت_گروه‌های_پیغام' ],
+ 'ManageTranslatorSandbox' => [ 'مدیریت_صفحهٔ_تمرین_ترجمه', 'صفحهٔ_تمرین_ترجمه' ],
+ 'MessageGroupStats' => [ 'آمار_گروه_پیغام' ],
+ 'PageTranslation' => [ 'ترجمه_صفحه' ],
+ 'PageTranslationDeletePage' => [ 'صفحه_حذف_ترجمه_صفحه' ],
+ 'SearchTranslations' => [ 'جستجوی_ترجمه‌ها' ],
+ 'SupportedLanguages' => [ 'زبان‌های_پشتیبانی‌شده' ],
+ 'Translate' => [ 'ترجمه' ],
+ 'TranslationStats' => [ 'آمار_ترجمه‌ها' ],
+ 'Translations' => [ 'ترجمه‌ها' ],
+ 'PageMigration' => [ 'مهاجرت_صفحه' ],
+];
+
+/** Finnish (suomi) */
+$specialPageAliases['fi'] = [
+ 'ImportTranslations' => [ 'Käännösten_tuonti' ],
+ 'LanguageStats' => [ 'Kielitilastot' ],
+ 'ManageMessageGroups' => [ 'Viestiryhmien_hallinta' ],
+ 'PageTranslation' => [ 'Sivujen_kääntäminen' ],
+ 'SupportedLanguages' => [ 'Tuetut_kielet' ],
+ 'Translate' => [ 'Käännä' ],
+ 'TranslationStats' => [ 'Käännöstilastot' ],
+ 'Translations' => [ 'Käännökset' ],
+];
+
+/** French (français) */
+$specialPageAliases['fr'] = [
+ 'LanguageStats' => [ 'StatistiquesDesLangues', 'Statistiques_des_langues' ],
+ 'Translate' => [ 'Traduire' ],
+ 'TranslationStats' => [ 'StatistiquesDesTraductions', 'Statistiques_des_traductions' ],
+ 'Translations' => [ 'Traductions' ],
+];
+
+/** Arpitan (arpetan) */
+$specialPageAliases['frp'] = [
+ 'LanguageStats' => [ 'Statistiques_de_les_lengoues', 'StatistiquesDeLesLengoues' ],
+ 'Translate' => [ 'Traduire' ],
+ 'TranslationStats' => [ 'Statistiques_de_traduccion', 'StatistiquesDeTraduccion' ],
+ 'Translations' => [ 'Traduccions' ],
+];
+
+/** Western Frisian (Frysk) */
+$specialPageAliases['fy'] = [
+ 'ImportTranslations' => [ 'OersettingsYmportearje' ],
+ 'LanguageStats' => [ 'Taalstatistiken' ],
+ 'PageTranslation' => [ 'Sideoersetting' ],
+ 'SearchTranslations' => [ 'OersettingsSykje' ],
+ 'Translate' => [ 'Oersette' ],
+ 'Translations' => [ 'Oersettings' ],
+];
+
+/** Galician (galego) */
+$specialPageAliases['gl'] = [
+ 'ImportTranslations' => [ 'Importar_traducións' ],
+ 'LanguageStats' => [ 'Estatísticas_da_lingua' ],
+ 'PageTranslation' => [ 'Tradución_de_páxinas' ],
+ 'Translate' => [ 'Traducir' ],
+ 'TranslationStats' => [ 'Estatísticas_da_tradución' ],
+ 'Translations' => [ 'Traducións' ],
+];
+
+/** Swiss German (Alemannisch) */
+$specialPageAliases['gsw'] = [
+ 'ImportTranslations' => [ 'Übersetzige_importiere' ],
+ 'LanguageStats' => [ 'Sprochstatischtik' ],
+ 'ManageMessageGroups' => [ 'Noochrichtegruppe_verwalte' ],
+ 'MessageGroupStats' => [ 'Noochrichtegruppestatistike' ],
+ 'PageTranslation' => [ 'Übersetzig_vo_Syte' ],
+ 'PageTranslationDeletePage' => [ 'Löschsyte_für_Übersetzige' ],
+ 'SupportedLanguages' => [ 'Sprooche_wo_unterstützt_werde' ],
+ 'Translate' => [ 'Ibersetze' ],
+ 'TranslationStats' => [ 'Ibersetzigsstatischtik' ],
+ 'Translations' => [ 'Ibersetzige' ],
+];
+
+/** Hebrew (עברית) */
+$specialPageAliases['he'] = [
+ 'AggregateGroups' => [ 'קבוצות_משולבות' ],
+ 'ImportTranslations' => [ 'ייבוא_תרגומים' ],
+ 'LanguageStats' => [ 'סטטיסטיקות_שפה' ],
+ 'ManageMessageGroups' => [ 'ניהול_קבוצות_הודעות' ],
+ 'ManageTranslatorSandbox' => [ 'ניהול_ארגז_חול_של_מתרגמים' ],
+ 'MessageGroupStats' => [ 'סטטיסטיקות_של_קבוצות_הודעות' ],
+ 'PageTranslation' => [ 'תרגום_דף' ],
+ 'PageTranslationDeletePage' => [ 'מחיקת_דף_מתורגם' ],
+ 'SearchTranslations' => [ 'חיפוש_תרגומים' ],
+ 'SupportedLanguages' => [ 'שפות_נתמכות' ],
+ 'Translate' => [ 'תרגום' ],
+ 'TranslationStash' => [ 'מחסן_תרגומים' ],
+ 'TranslationStats' => [ 'סטטיסטיקות_תרגום' ],
+ 'Translations' => [ 'תרגומים' ],
+ 'PageMigration' => [ 'המרת_דף' ],
+ 'PagePreparation' => [ 'הכנת_דף' ],
+];
+
+/** Hindi (हिन्दी) */
+$specialPageAliases['hi'] = [
+ 'Translate' => [ 'अनुवाद' ],
+];
+
+/** Croatian (hrvatski) */
+$specialPageAliases['hr'] = [
+ 'Translate' => [ 'Prevedi' ],
+];
+
+/** Upper Sorbian (hornjoserbsce) */
+$specialPageAliases['hsb'] = [
+ 'ImportTranslations' => [ 'Přełožki_importować' ],
+ 'LanguageStats' => [ 'Rěčne_statistiki' ],
+ 'PageTranslation' => [ 'Přełožowanje_stronow' ],
+ 'SearchTranslations' => [ 'Přełožki_pytać' ],
+ 'SupportedLanguages' => [ 'Podpěrane_rěče' ],
+ 'Translate' => [ 'Přełožić' ],
+ 'TranslationStats' => [ 'Statistika_přełožkow' ],
+ 'Translations' => [ 'Přełožki' ],
+];
+
+/** Haitian (Kreyòl ayisyen) */
+$specialPageAliases['ht'] = [
+ 'ImportTranslations' => [ 'EnpòteTradiksyon' ],
+ 'LanguageStats' => [ 'EstatistikLang' ],
+ 'ManageMessageGroups' => [ 'GereGwoupMesaj' ],
+ 'PageTranslation' => [ 'TradiksyonPaj' ],
+ 'SupportedLanguages' => [ 'LangSipòte' ],
+ 'Translate' => [ 'Tradui' ],
+ 'TranslationStats' => [ 'EstatistikTradiksyon' ],
+ 'Translations' => [ 'TradiksyonYo' ],
+];
+
+/** Hungarian (magyar) */
+$specialPageAliases['hu'] = [
+ 'LanguageStats' => [ 'Nyelvi_statisztika' ],
+ 'Translate' => [ 'Fordítás' ],
+ 'TranslationStats' => [ 'Fordítási_statisztika' ],
+ 'Translations' => [ 'Fordítások' ],
+];
+
+/** Interlingua (interlingua) */
+$specialPageAliases['ia'] = [
+ 'ImportTranslations' => [ 'Importar_traductiones' ],
+ 'LanguageStats' => [ 'Statisticas_de_linguas' ],
+ 'ManageMessageGroups' => [ 'Gerer_gruppos_de_messages' ],
+ 'MessageGroupStats' => [ 'Statisticas_de_gruppos_de_messages' ],
+ 'PageTranslation' => [ 'Traduction_de_paginas' ],
+ 'PageTranslationDeletePage' => [ 'Deler_pagina_traducite' ],
+ 'SupportedLanguages' => [ 'Linguas_supportate' ],
+ 'Translate' => [ 'Traducer' ],
+ 'TranslationStats' => [ 'Statisticas_de_traduction' ],
+ 'Translations' => [ 'Traductiones' ],
+];
+
+/** Indonesian (Bahasa Indonesia) */
+$specialPageAliases['id'] = [
+ 'ImportTranslations' => [ 'Impor_terjemahan', 'ImporTerjemahan' ],
+ 'LanguageStats' => [ 'Statistik_bahasa', 'StatistikBahasa' ],
+ 'ManageMessageGroups' => [ 'Kelola_pesan_grup', 'KelolaPesanGrup' ],
+ 'MessageGroupStats' => [ 'Statistik_pesan_grup', 'StatistikPesanGrup' ],
+ 'PageTranslation' => [ 'Terjemahan_halaman', 'TerjemahanHalaman' ],
+ 'SearchTranslations' => [ 'Cari_terjemahan', 'CariTerjemahan' ],
+ 'SupportedLanguages' => [ 'Bahasa_yang_didukung', 'BahasaDidukung' ],
+ 'Translate' => [ 'Terjemahkan' ],
+ 'TranslationStats' => [ 'Statistik_terjemahan', 'StatistikTerjemahan' ],
+ 'Translations' => [ 'Terjemahan' ],
+];
+
+/** Icelandic (íslenska) */
+$specialPageAliases['is'] = [
+ 'Translate' => [ 'Þýða' ],
+];
+
+/** Italian (italiano) */
+$specialPageAliases['it'] = [
+ 'AggregateGroups' => [ 'GruppiAggregati' ],
+ 'ImportTranslations' => [ 'ImportaTraduzioni' ],
+ 'LanguageStats' => [ 'StatisticheLingua' ],
+ 'ManageMessageGroups' => [ 'GestisciGruppiMessaggio' ],
+ 'MessageGroupStats' => [ 'StatisticheGruppiMessaggio' ],
+ 'PageTranslation' => [ 'TraduzionePagina' ],
+ 'SearchTranslations' => [ 'CercaTraduzioni' ],
+ 'SupportedLanguages' => [ 'LingueSupportate' ],
+ 'Translate' => [ 'Traduci' ],
+ 'TranslationStats' => [ 'StatisticheTraduzione' ],
+ 'Translations' => [ 'Traduzioni' ],
+];
+
+/** Japanese (日本語) */
+$specialPageAliases['ja'] = [
+ 'AggregateGroups' => [ '集約群' ],
+ 'ImportTranslations' => [ '翻訳取り込み', '翻訳インポート' ],
+ 'LanguageStats' => [ '言語統計' ],
+ 'ManageMessageGroups' => [ 'メッセージ群の管理' ],
+ 'ManageTranslatorSandbox' => [ '翻訳者サンドボックスの管理' ],
+ 'MessageGroupStats' => [ 'メッセージグループ統計' ],
+ 'PageTranslation' => [ 'ページ翻訳' ],
+ 'PageTranslationDeletePage' => [ 'ページ翻訳削除ページ' ],
+ 'SearchTranslations' => [ '翻訳の検索' ],
+ 'SupportedLanguages' => [ 'サポートしている言語' ],
+ 'Translate' => [ '翻訳' ],
+ 'TranslationStats' => [ '翻訳統計' ],
+ 'Translations' => [ '翻訳結果' ],
+];
+
+/** Georgian (ქართული) */
+$specialPageAliases['ka'] = [
+ 'LanguageStats' => [ 'ენის_სტატისტიკა' ],
+ 'SupportedLanguages' => [ 'მხარდაჭერილი_ენები' ],
+ 'Translate' => [ 'თარგმნა' ],
+ 'TranslationStats' => [ 'თარგმნის_სტატისტიკა' ],
+ 'Translations' => [ 'თარგმანები' ],
+];
+
+/** Khmer (ភាសាខ្មែរ) */
+$specialPageAliases['km'] = [
+ 'ImportTranslations' => [ 'ការបកប្រែនាំចូល' ],
+ 'LanguageStats' => [ 'ស្ថិតិភាសា' ],
+ 'ManageMessageGroups' => [ 'គ្រប់គ្រងក្រុមសារ' ],
+ 'PageTranslation' => [ 'ការបកប្រែទំព័រ' ],
+ 'SupportedLanguages' => [ 'ភាសាដែលអាចប្រើបាន' ],
+ 'Translate' => [ 'បកប្រែ' ],
+ 'TranslationStats' => [ 'ស្ថិតិការបកប្រែ' ],
+ 'Translations' => [ 'ការបកប្រែ' ],
+];
+
+/** Korean (한국어) */
+$specialPageAliases['ko'] = [
+ 'AggregateGroups' => [ '집계그룹' ],
+ 'ImportTranslations' => [ '번역가져오기' ],
+ 'LanguageStats' => [ '언어통계' ],
+ 'ManageMessageGroups' => [ '메시지그룹관리' ],
+ 'ManageTranslatorSandbox' => [ '번역자연습장관리', '번역연습장' ],
+ 'MessageGroupStats' => [ '메시지그룹통계' ],
+ 'PageTranslation' => [ '문서번역' ],
+ 'PageTranslationDeletePage' => [ '문서번역삭제문서' ],
+ 'SearchTranslations' => [ '번역검색', '번역찾기' ],
+ 'SupportedLanguages' => [ '지원하는언어' ],
+ 'Translate' => [ '번역' ],
+ 'TranslationStash' => [ '비공개번역' ],
+ 'TranslationStats' => [ '번역통계' ],
+ 'Translations' => [ '번역목록' ],
+ 'PageMigration' => [ '문서이주' ],
+];
+
+/** Colognian (Ripoarisch) */
+$specialPageAliases['ksh'] = [
+ 'LanguageStats' => [ 'Shtatistike_vu_de_Shprooche' ],
+ 'Translate' => [ 'Övversäze' ],
+ 'TranslationStats' => [ 'Statistik vun fun de Övversäzung', 'Övversäzungszahle', 'Statistik vun fun de Övversäzong', 'Övversäzongszahle' ],
+ 'Translations' => [ 'Övversätzunge' ],
+];
+
+/** Kurdish (Latin script) (Kurdî (latînî)‎) */
+$specialPageAliases['ku-latn'] = [
+ 'Translate' => [ 'Wergerîne' ],
+ 'Translations' => [ 'Werger' ],
+];
+
+/** Cornish (kernowek) */
+$specialPageAliases['kw'] = [
+ 'ImportTranslations' => [ 'YmperthiTreylyansow' ],
+ 'LanguageStats' => [ 'StatystygyonYeth' ],
+ 'PageTranslation' => [ 'TreylyansFolennow' ],
+ 'SupportedLanguages' => [ 'YethowSkoodhys' ],
+ 'Translate' => [ 'Treylya' ],
+ 'TranslationStats' => [ 'StatystygronTreylya' ],
+ 'Translations' => [ 'Treylyansow' ],
+];
+
+/** Luxembourgish (Lëtzebuergesch) */
+$specialPageAliases['lb'] = [
+ 'ImportTranslations' => [ 'Iwwersetzungen_importéieren' ],
+ 'LanguageStats' => [ 'Sproochestatistiken' ],
+ 'ManageMessageGroups' => [ 'Gruppe_vu_Message_geréieren' ],
+ 'ManageTranslatorSandbox' => [ 'Iwwersetzungssandkëscht_geréieren' ],
+ 'MessageGroupStats' => [ 'Statistike_vun_de_Gruppe_vu_Messagen' ],
+ 'PageTranslation' => [ 'Säiten-Iwwersetzung' ],
+ 'PageTranslationDeletePage' => [ 'Läschsäit_fir_Iwwersetzungen' ],
+ 'SearchTranslations' => [ 'Iwwersetzunge_sichen' ],
+ 'SupportedLanguages' => [ 'Ënnerstetzt_Sproochen' ],
+ 'Translate' => [ 'Iwwersetzen' ],
+ 'TranslationStats' => [ 'Iwwersetzungsstatistiken' ],
+ 'Translations' => [ 'Iwwersetzungen' ],
+ 'PageMigration' => [ 'Säite-Migratioun' ],
+ 'PagePreparation' => [ 'Säitevirbereedung' ],
+];
+
+/** Lombard (lumbaart) */
+$specialPageAliases['lmo'] = [
+ 'Translate' => [ 'Volta' ],
+ 'Translations' => [ 'Tradüzion' ],
+];
+
+/** Lithuanian (lietuvių) */
+$specialPageAliases['lt'] = [
+ 'PageTranslation' => [ 'Puslapio_vertimas' ],
+ 'Translate' => [ 'Vertimas' ],
+];
+
+/** Literary Chinese (文言) */
+$specialPageAliases['lzh'] = [
+ 'Translate' => [ '譯' ],
+];
+
+/** Macedonian (македонски) */
+$specialPageAliases['mk'] = [
+ 'AggregateGroups' => [ 'ЗбирниГрупи' ],
+ 'ImportTranslations' => [ 'УвезиПреводи' ],
+ 'LanguageStats' => [ 'СтатистикиЗаЈазик' ],
+ 'ManageMessageGroups' => [ 'РаководењеСоГрупиНаПораки' ],
+ 'ManageTranslatorSandbox' => [ 'РаководиПреведувачкиПесочник' ],
+ 'MessageGroupStats' => [ 'СтатистикиЗаГупиПораки' ],
+ 'PageTranslation' => [ 'ПреводНаСтраницата' ],
+ 'PageTranslationDeletePage' => [ 'ПреводНаСтраницаИзбришиСтраница' ],
+ 'SearchTranslations' => [ 'ПребарајПреводи' ],
+ 'SupportedLanguages' => [ 'ПоддржаниЈазици' ],
+ 'Translate' => [ 'Преведување' ],
+ 'TranslationStash' => [ 'ПреведувачкиСклад' ],
+ 'TranslationStats' => [ 'СтатистикиЗаПреведување' ],
+ 'Translations' => [ 'Преводи' ],
+ 'PageMigration' => [ 'СелењеСтраници' ],
+ 'PagePreparation' => [ 'ПодготовнаНаСтраници' ],
+];
+
+/** Malayalam (മലയാളം) */
+$specialPageAliases['ml'] = [
+ 'ImportTranslations' => [ 'പരിഭാഷാ_ഇറക്കുമതി' ],
+ 'LanguageStats' => [ 'ഭാഷാസ്ഥിതിവിവരം' ],
+ 'ManageMessageGroups' => [ 'സന്ദേശസംഘങ്ങളുടെകൈകാര്യം' ],
+ 'MessageGroupStats' => [ 'സന്ദേശഗണസ്ഥിതിവിവരം' ],
+ 'PageTranslation' => [ 'താളിന്റെപരിഭാഷ' ],
+ 'SearchTranslations' => [ 'പരിഭാഷകളിൽതിരയുക' ],
+ 'SupportedLanguages' => [ 'പിന്തുണയുള്ളഭാഷകൾ' ],
+ 'Translate' => [ 'പരിഭാഷ' ],
+ 'TranslationStats' => [ 'പരിഭാഷാസ്ഥിതിവിവരം' ],
+ 'Translations' => [ 'പരിഭാഷകൾ' ],
+];
+
+/** Marathi (मराठी) */
+$specialPageAliases['mr'] = [
+ 'ImportTranslations' => [ 'भाषांतराआयात' ],
+ 'LanguageStats' => [ 'भाषासांख्यिकी' ],
+ 'PageTranslation' => [ 'पृष्ठभाषांतर', 'पृष्ठअनुवाद' ],
+ 'SearchTranslations' => [ 'अनुवाद_शोधा' ],
+ 'Translate' => [ 'भाषांतर' ],
+ 'TranslationStats' => [ 'भाषांतरसांख्यिकी' ],
+ 'Translations' => [ 'भाषांतरणे' ],
+];
+
+/** Malay (Bahasa Melayu) */
+$specialPageAliases['ms'] = [
+ 'Translate' => [ 'Terjemah' ],
+ 'Translations' => [ 'Terjemahan' ],
+];
+
+/** Maltese (Malti) */
+$specialPageAliases['mt'] = [
+ 'LanguageStats' => [ 'StatistikaLingwa' ],
+ 'PageTranslation' => [ 'TraduzzjoniPaġna' ],
+ 'Translate' => [ 'Traduzzjoni' ],
+ 'TranslationStats' => [ 'StatistikaTraduzzjoni' ],
+ 'Translations' => [ 'Traduzzjonijiet' ],
+];
+
+/** Mirandese (Mirandés) */
+$specialPageAliases['mwl'] = [
+ 'Translate' => [ 'Traduzir' ],
+ 'TranslationStats' => [ 'Stado de la traduçon' ],
+ 'Translations' => [ 'Traduçones' ],
+];
+
+/** Erzya (эрзянь) */
+$specialPageAliases['myv'] = [
+ 'Translate' => [ 'Ютавтомс' ],
+ 'TranslationStats' => [ 'ЮтавтомадоСтатистика' ],
+];
+
+/** Nāhuatl (Nāhuatl) */
+$specialPageAliases['nah'] = [
+ 'Translate' => [ 'Tlahtōlcuepāz', 'Traducir' ],
+];
+
+/** Norwegian Bokmål (norsk bokmål) */
+$specialPageAliases['nb'] = [
+ 'AggregateGroups' => [ 'Samlingsgrupper' ],
+ 'ImportTranslations' => [ 'Importer_oversettelser' ],
+ 'LanguageStats' => [ 'Språkstatistikk' ],
+ 'ManageMessageGroups' => [ 'Behandle_meldingsgrupper' ],
+ 'MessageGroupStats' => [ 'Meldingsgruppestatistikk' ],
+ 'PageTranslation' => [ 'Sideoversettelse' ],
+ 'SearchTranslations' => [ 'Søk_i_oversettelser' ],
+ 'SupportedLanguages' => [ 'Støttede_språk' ],
+ 'Translate' => [ 'Oversett' ],
+ 'TranslationStats' => [ 'Oversettelsesstatistikk' ],
+ 'Translations' => [ 'Oversettelser' ],
+];
+
+/** Low German (Plattdüütsch) */
+$specialPageAliases['nds'] = [
+ 'Translate' => [ 'Översetten' ],
+];
+
+/** Low Saxon (Netherlands) (Nedersaksies) */
+$specialPageAliases['nds-nl'] = [
+ 'AggregateGroups' => [ 'Samen-evoegden_groepen' ],
+ 'ImportTranslations' => [ 'Vertalingen_invoeren' ],
+ 'LanguageStats' => [ 'Taalstaotistieken' ],
+ 'ManageMessageGroups' => [ 'Berichtengroepen_beheren' ],
+ 'ManageTranslatorSandbox' => [ 'Vertalers_zaandkule_beheren' ],
+ 'PageTranslation' => [ 'Ziedvertaling' ],
+ 'PageTranslationDeletePage' => [ 'Ziedvertaling_zied_vortdoon' ],
+ 'SearchTranslations' => [ 'Vertalingen_zeuken' ],
+ 'SupportedLanguages' => [ 'Ondersteunde_talen' ],
+ 'Translate' => [ 'Vertalen' ],
+ 'TranslationStats' => [ 'Vertaalstaotistieken' ],
+ 'Translations' => [ 'Vertalingen' ],
+];
+
+/** Dutch (Nederlands) */
+$specialPageAliases['nl'] = [
+ 'AggregateGroups' => [ 'SamengevoegdeGroepen' ],
+ 'ImportTranslations' => [ 'VertalingenImporteren' ],
+ 'LanguageStats' => [ 'Taalstatistieken' ],
+ 'ManageMessageGroups' => [ 'BerichtengroepenBeheren' ],
+ 'ManageTranslatorSandbox' => [ 'VertalerszandbakBeheren' ],
+ 'MessageGroupStats' => [ 'Berichtengroepstatistieken' ],
+ 'PageTranslation' => [ 'Paginavertaling' ],
+ 'PageTranslationDeletePage' => [ 'PaginavertalingpaginaVerwijderen' ],
+ 'SearchTranslations' => [ 'VertalingenZoeken' ],
+ 'SupportedLanguages' => [ 'OndersteundeTalen' ],
+ 'Translate' => [ 'Vertalen' ],
+ 'TranslationStats' => [ 'Vertaalstatistieken', 'Vertalingsstatistieken' ],
+ 'Translations' => [ 'Vertalingen' ],
+ 'PageMigration' => [ 'PaginaMigreren' ],
+];
+
+/** Norwegian Nynorsk (norsk nynorsk) */
+$specialPageAliases['nn'] = [
+ 'Translate' => [ 'Set_om' ],
+ 'Translations' => [ 'Omsetjingar' ],
+];
+
+/** Occitan (occitan) */
+$specialPageAliases['oc'] = [
+ 'Translate' => [ 'Traduire', 'Tradusir' ],
+ 'Translations' => [ 'Traduccions', 'Reviradas' ],
+];
+
+/** Oriya (ଓଡ଼ିଆ) */
+$specialPageAliases['or'] = [
+ 'Translate' => [ 'ଅନୁବାଦ' ],
+ 'Translations' => [ 'ଅନୁବାଦସମୂହ' ],
+];
+
+/** Punjabi (ਪੰਜਾਬੀ) */
+$specialPageAliases['pa'] = [
+ 'PageTranslation' => [ 'ਸਫ਼ੇ_ਦਾ_ਉਲਥਾ', 'ਸਫ਼ੇ_ਦਾ_ਤਰਜਮਾ' ],
+ 'Translate' => [ 'ਉਲਥਾਓ', 'ਤਰਜਮਾ_ਕਰੋ' ],
+];
+
+/** Polish (polski) */
+$specialPageAliases['pl'] = [
+ 'AggregateGroups' => [ 'Grupy_zbiorcze' ],
+ 'ImportTranslations' => [ 'Import_tłumaczeń' ],
+ 'LanguageStats' => [ 'Statystyka_językowa' ],
+ 'ManageMessageGroups' => [ 'Zarządzanie_grupami_komunikatów' ],
+ 'PageTranslation' => [ 'Tłumaczenie_strony' ],
+ 'SupportedLanguages' => [ 'Wspierane_języki' ],
+ 'Translate' => [ 'Przetłumacz' ],
+ 'TranslationStats' => [ 'Statystyki_tłumaczenia' ],
+ 'Translations' => [ 'Tłumaczenia' ],
+ 'PageMigration' => [ 'Migracja_strony' ],
+ 'PagePreparation' => [ 'Przygotowanie_strony' ],
+];
+
+/** Pashto (پښتو) */
+$specialPageAliases['ps'] = [
+ 'Translate' => [ 'ژباړل' ],
+ 'Translations' => [ 'ژباړې' ],
+];
+
+/** Portuguese (português) */
+$specialPageAliases['pt'] = [
+ 'ImportTranslations' => [ 'Importar_traduções' ],
+ 'LanguageStats' => [ 'Estatísticas_de_línguas' ],
+ 'PageTranslation' => [ 'Tradução_de_páginas' ],
+ 'Translate' => [ 'Traduzir' ],
+ 'TranslationStats' => [ 'Estatísticas_de_traduções' ],
+ 'Translations' => [ 'Traduções' ],
+];
+
+/** Brazilian Portuguese (português do Brasil) */
+$specialPageAliases['pt-br'] = [
+ 'Translate' => [ 'Traduzir' ],
+ 'TranslationStats' => [ 'Estado_da_tradução', 'Status_da_tradução' ],
+];
+
+/** Quechua (Runa Simi) */
+$specialPageAliases['qu'] = [
+ 'ManageTranslatorSandbox' => [ 'TikranaPukllana' ],
+ 'Translate' => [ 'Tikray' ],
+];
+
+/** Romanian (română) */
+$specialPageAliases['ro'] = [
+ 'ImportTranslations' => [ 'Importare_traduceri' ],
+ 'LanguageStats' => [ 'Statistici_limbă' ],
+ 'PageTranslation' => [ 'Traducere_pagină' ],
+ 'Translate' => [ 'Traducere' ],
+ 'TranslationStats' => [ 'Statistici_traduceri' ],
+ 'Translations' => [ 'Traduceri' ],
+];
+
+/** Russian (русский) */
+$specialPageAliases['ru'] = [
+ 'AggregateGroups' => [ 'Агрегированные_группы' ],
+ 'ImportTranslations' => [ 'Импорт_переводов' ],
+ 'LanguageStats' => [ 'Статистика_языка' ],
+ 'ManageMessageGroups' => [ 'Управление_группами_сообщений' ],
+ 'MessageGroupStats' => [ 'Статистика_группы_сообщений' ],
+ 'PageTranslation' => [ 'Перевод_страниц' ],
+ 'PageTranslationDeletePage' => [ 'Удаление_переводимой_страницы' ],
+ 'SearchTranslations' => [ 'Поиск_переводов' ],
+ 'SupportedLanguages' => [ 'Поддерживаемые_языки' ],
+ 'Translate' => [ 'Перевести' ],
+ 'TranslationStats' => [ 'Статистика_переводов' ],
+ 'Translations' => [ 'Переводы' ],
+];
+
+/** Sanskrit (संस्कृतम्) */
+$specialPageAliases['sa'] = [
+ 'LanguageStats' => [ 'भाषासांख्यिकी' ],
+ 'Translate' => [ 'भाषांतर' ],
+ 'TranslationStats' => [ 'भाषांतरसांख्यिकी' ],
+ 'Translations' => [ 'भाषांतरानि' ],
+];
+
+/** Sicilian (sicilianu) */
+$specialPageAliases['scn'] = [
+ 'AggregateGroups' => [ 'GruppiAggregati' ],
+ 'ImportTranslations' => [ 'ImportaTraduzioni' ],
+ 'LanguageStats' => [ 'StatisticheLingua' ],
+ 'ManageMessageGroups' => [ 'GestisciGruppiMessaggio' ],
+ 'MessageGroupStats' => [ 'MessaggioGruppoStat' ],
+ 'PageTranslation' => [ 'TraduzionePagina' ],
+ 'SupportedLanguages' => [ 'LingueSupportate' ],
+ 'Translate' => [ 'Traduci' ],
+ 'TranslationStats' => [ 'StatisticheTraduzione' ],
+ 'Translations' => [ 'Traduzioni' ],
+];
+
+/** Sinhala (සිංහල) */
+$specialPageAliases['si'] = [
+ 'Translate' => [ 'පරිවර්තනය' ],
+];
+
+/** Slovak (slovenčina) */
+$specialPageAliases['sk'] = [
+ 'LanguageStats' => [ 'ŠtatistikyJazykov' ],
+ 'PageTranslation' => [ 'PrekladStránky' ],
+ 'Translate' => [ 'Preložiť' ],
+ 'TranslationStats' => [ 'ŠtatistikyPrekladov' ],
+ 'Translations' => [ 'Preklady' ],
+];
+
+/** Albanian (shqip) */
+$specialPageAliases['sq'] = [
+ 'Translate' => [ 'Përkthe' ],
+];
+
+/** Serbian (Cyrillic script) (српски (ћирилица)) */
+$specialPageAliases['sr-ec'] = [
+ 'AggregateGroups' => [ 'Спојене_групе' ],
+ 'ImportTranslations' => [ 'Увоз_превода' ],
+ 'ExportTranslations' => [ 'Извоз_превода' ],
+ 'LanguageStats' => [ 'Статистика_језика' ],
+ 'ManageMessageGroups' => [ 'Управљање_групама_порука' ],
+ 'ManageTranslatorSandbox' => [ 'Управљање_песком_преводиоца', 'Песак_за_преводе' ],
+ 'MessageGroupStats' => [ 'Статистике_група_превода' ],
+ 'PageTranslation' => [ 'Превод_странице' ],
+ 'PageTranslationDeletePage' => [ 'Обриши_страницу_превода' ],
+ 'SearchTranslations' => [ 'Претрага_превода' ],
+ 'SupportedLanguages' => [ 'Подржани_језици' ],
+ 'Translate' => [ 'Преведи' ],
+ 'TranslationStash' => [ 'Складиште_превода' ],
+ 'TranslationStats' => [ 'Статистика_превода' ],
+ 'Translations' => [ 'Преводи' ],
+ 'PageMigration' => [ 'Сеоба_странице' ],
+ 'PagePreparation' => [ 'Припрема_странице' ],
+];
+
+/** Serbian (Latin script) (srpski (latinica)) */
+$specialPageAliases['sr-el'] = [
+ 'AggregateGroups' => [ 'Spojene_grupe' ],
+ 'ImportTranslations' => [ 'Uvoz_prevoda' ],
+ 'ExportTranslations' => [ 'Izvoz_prevoda' ],
+ 'LanguageStats' => [ 'Statistika_jezika' ],
+ 'ManageMessageGroups' => [ 'Upravljanje_grupama_poruka' ],
+ 'ManageTranslatorSandbox' => [ 'Upravljanje_peskom_prevodioca', 'Pesak_za_prevode' ],
+ 'MessageGroupStats' => [ 'Statistike_grupa_prevoda' ],
+ 'PageTranslation' => [ 'Prevod_stranice' ],
+ 'PageTranslationDeletePage' => [ 'Obriši_stranicu_prevoda' ],
+ 'SearchTranslations' => [ 'Pretraga_prevoda' ],
+ 'SupportedLanguages' => [ 'Podržani_jezici' ],
+ 'Translate' => [ 'Prevedi' ],
+ 'TranslationStash' => [ 'Skladište_prevoda' ],
+ 'TranslationStats' => [ 'Statistika_prevoda' ],
+ 'Translations' => [ 'Prevodi' ],
+ 'PageMigration' => [ 'Seoba_stranice' ],
+ 'PagePreparation' => [ 'Priprema_stranice' ],
+];
+
+/** Sundanese (Basa Sunda) */
+$specialPageAliases['su'] = [
+ 'LanguageStats' => [ 'StatBasa' ],
+ 'Translate' => [ 'Tarjamah' ],
+ 'TranslationStats' => [ 'StatTarjamah' ],
+ 'Translations' => [ 'Tarjamahan' ],
+];
+
+/** Swedish (svenska) */
+$specialPageAliases['sv'] = [
+ 'ImportTranslations' => [ 'Importera_översättningar' ],
+ 'LanguageStats' => [ 'Språkstatistik' ],
+ 'Translate' => [ 'Översätt' ],
+ 'TranslationStats' => [ 'Översättningsstatistik' ],
+ 'Translations' => [ 'Översättningar' ],
+ 'PageMigration' => [ 'Sidmigrering' ],
+];
+
+/** Swahili (Kiswahili) */
+$specialPageAliases['sw'] = [
+ 'Translate' => [ 'Tafsiri' ],
+ 'TranslationStats' => [ 'TakwimuzaTafsiri' ],
+ 'Translations' => [ 'Tafsiri' ],
+];
+
+/** Telugu (తెలుగు) */
+$specialPageAliases['te'] = [
+ 'ImportTranslations' => [ 'అనువాదాలదిగుమతి' ],
+ 'LanguageStats' => [ 'భాషాలెక్కలు' ],
+ 'PageTranslation' => [ 'పేజిఅనువాదము' ],
+ 'Translate' => [ 'అనువాదం' ],
+ 'TranslationStats' => [ 'అనువాదలెక్కలు' ],
+ 'Translations' => [ 'అనువాదాలు' ],
+];
+
+/** Thai (ไทย) */
+$specialPageAliases['th'] = [
+ 'LanguageStats' => [ 'สถิติภาษา' ],
+ 'SupportedLanguages' => [ 'ภาษาที่รองรับ' ],
+ 'Translate' => [ 'แปล' ],
+ 'TranslationStats' => [ 'สถิติการแปล' ],
+ 'Translations' => [ 'การแปล' ],
+];
+
+/** Tagalog (Tagalog) */
+$specialPageAliases['tl'] = [
+ 'LanguageStats' => [ 'Mga_estadistika_ng_wika' ],
+ 'Translate' => [ 'Isalinwika' ],
+ 'TranslationStats' => [ 'Mga_estadistika_ng_salinwika' ],
+ 'Translations' => [ 'Mga_salinwika' ],
+];
+
+/** Turkish (Türkçe) */
+$specialPageAliases['tr'] = [
+ 'AggregateGroups' => [ 'GruplarıBirleştirme' ],
+ 'ImportTranslations' => [ 'ÇevirileriİçeAktar' ],
+ 'LanguageStats' => [ 'Dilİstatistikleri' ],
+ 'ManageMessageGroups' => [ 'MesajGruplarınıYönet', 'İletiGruplarınıYönet' ],
+ 'MessageGroupStats' => [ 'MesajGrubuİstatistikleri', 'İletiGrubuİstatistikleri' ],
+ 'PageTranslation' => [ 'SayfaÇevirisi' ],
+ 'PageTranslationDeletePage' => [ 'SayfaÇevirisiSayfaSilme' ],
+ 'SupportedLanguages' => [ 'DesteklenenDiller' ],
+ 'Translate' => [ 'Çevir', 'Çeviri' ],
+ 'TranslationStats' => [ 'Çeviriİstatistikleri' ],
+ 'Translations' => [ 'Çeviriler' ],
+];
+
+/** Tatar (Cyrillic script) (татарча) */
+$specialPageAliases['tt-cyrl'] = [
+ 'LanguageStats' => [ 'Телләр_хисабы' ],
+ 'PageTranslation' => [ 'Битне_тәрҗемә_итү' ],
+ 'Translate' => [ 'Тәрҗемә' ],
+ 'TranslationStats' => [ 'Тәрҗемәләр_хисабы' ],
+ 'Translations' => [ 'Тәрҗемәләр' ],
+];
+
+/** Tuvinian (тыва дыл) */
+$specialPageAliases['tyv'] = [
+ 'PageTranslation' => [ 'Арын_очулгазы' ],
+ 'PageTranslationDeletePage' => [ 'Очулдуругда_арынны_казыыр' ],
+ 'SearchTranslations' => [ 'Очулгалар_дилээр' ],
+ 'SupportedLanguages' => [ 'Дөгүмнээн_дылдар' ],
+ 'Translate' => [ 'Очулдурар' ],
+ 'TranslationStats' => [ 'Очулга_статистиказы' ],
+ 'Translations' => [ 'Очулгалар' ],
+];
+
+/** Ukrainian (українська) */
+$specialPageAliases['uk'] = [
+ 'AggregateGroups' => [ 'Агреговані_групи', 'Агрегированные_группы' ],
+ 'ImportTranslations' => [ 'Імпорт_перекладів', 'Импорт_переводов' ],
+ 'LanguageStats' => [ 'Статистика_мови', 'Статистика_языка' ],
+ 'ManageMessageGroups' => [ 'Керування_групами_повідомлень', 'Управление_группами_сообщений' ],
+ 'MessageGroupStats' => [ 'Статистика_групи_повідомлень', 'Статистика_группы_сообщений' ],
+ 'PageTranslation' => [ 'Переклад', 'Перевод_страниц' ],
+ 'PageTranslationDeletePage' => [ 'Вилучення_перекладабельної_сторінки', 'Удаление_переводимой_страницы' ],
+ 'SearchTranslations' => [ 'Пошук_перекладів', 'Поиск_переводов' ],
+ 'SupportedLanguages' => [ 'Підтримувані_мови', 'Поддерживаемые_языки' ],
+ 'Translate' => [ 'Перекласти', 'Перевести' ],
+ 'TranslationStats' => [ 'Статистика_перекладів', 'Статистика_переводов' ],
+ 'Translations' => [ 'Переклади', 'Переводы' ],
+];
+
+/** Venetian (vèneto) */
+$specialPageAliases['vec'] = [
+ 'Translate' => [ 'Tradusi' ],
+ 'Translations' => [ 'Tradussioni' ],
+];
+
+/** Vietnamese (Tiếng Việt) */
+$specialPageAliases['vi'] = [
+ 'ImportTranslations' => [ 'Nhập_bản_dịch' ],
+ 'LanguageStats' => [ 'Thống_kê_ngôn_ngữ' ],
+ 'ManageMessageGroups' => [ 'Quản_lý_nhóm_thông_điệp', 'Quản_lý_nhóm', 'Quản_lí_nhóm_thông_điệp', 'Quản_lí_nhóm' ],
+ 'ManageTranslatorSandbox' => [ 'Quản_lý_chỗ_thử_biên_dịch', 'Quản_lí_chỗ_thử_biên_dịch' ],
+ 'MessageGroupStats' => [ 'Thống_kê_nhóm_thông_điệp', 'Thống_kê_nhóm' ],
+ 'PageTranslation' => [ 'Dịch_trang', 'Biên_dịch_trang' ],
+ 'SearchTranslations' => [ 'Tìm_kiếm_bản_dịch' ],
+ 'SupportedLanguages' => [ 'Ngôn_ngữ_đuọc_hỗ_trợ' ],
+ 'Translate' => [ 'Dịch', 'Biên_dịch' ],
+ 'TranslationStats' => [ 'Thống_kê_biên_dịch' ],
+ 'Translations' => [ 'Bản_dịch' ],
+ 'PagePreparation' => [ 'Sửa_soạn_trang' ],
+];
+
+/** Wolof (Wolof) */
+$specialPageAliases['wo'] = [
+ 'Translate' => [ 'Tekki' ],
+];
+
+/** Yiddish (ייִדיש) */
+$specialPageAliases['yi'] = [
+ 'Translate' => [ 'פֿארטײַטש' ],
+];
+
+/** Cantonese (粵語) */
+$specialPageAliases['yue'] = [
+ 'Translate' => [ '譯' ],
+];
+
+/** Chinese (中文) */
+$specialPageAliases['zh'] = [
+ 'Translate' => [ '翻译', '翻譯' ],
+];
+
+/** Simplified Chinese (中文(简体)) */
+$specialPageAliases['zh-hans'] = [
+ 'AggregateGroups' => [ '信息组总计' ],
+ 'ImportTranslations' => [ '导入翻译' ],
+ 'LanguageStats' => [ '语言统计' ],
+ 'ManageMessageGroups' => [ '信息组管理' ],
+ 'ManageTranslatorSandbox' => [ '管理译者沙盒' ],
+ 'MessageGroupStats' => [ '信息组状态' ],
+ 'PageTranslation' => [ '页面翻译' ],
+ 'PageTranslationDeletePage' => [ '页面翻译删除页面' ],
+ 'SearchTranslations' => [ '搜索翻译' ],
+ 'SupportedLanguages' => [ '支持的语言' ],
+ 'Translate' => [ '翻译' ],
+ 'TranslationStash' => [ '翻译隐藏' ],
+ 'TranslationStats' => [ '翻译统计' ],
+ 'Translations' => [ '译文' ],
+ 'PageMigration' => [ '页面迁移' ],
+ 'PagePreparation' => [ '页面预备' ],
+];
+
+/** Traditional Chinese (中文(繁體)) */
+$specialPageAliases['zh-hant'] = [
+ 'AggregateGroups' => [ '集合群組' ],
+ 'ImportTranslations' => [ '匯入翻譯' ],
+ 'LanguageStats' => [ '語言統計' ],
+ 'ManageMessageGroups' => [ '管理訊息群組' ],
+ 'ManageTranslatorSandbox' => [ '管理翻譯人員沙盒' ],
+ 'MessageGroupStats' => [ '訊息群組統計' ],
+ 'PageTranslation' => [ '頁面翻譯' ],
+ 'PageTranslationDeletePage' => [ '頁面翻譯刪除頁面' ],
+ 'SearchTranslations' => [ '搜尋翻譯' ],
+ 'SupportedLanguages' => [ '支援的語言' ],
+ 'Translate' => [ '翻譯' ],
+ 'TranslationStash' => [ '翻譯儲藏庫' ],
+ 'TranslationStats' => [ '翻譯統計' ],
+ 'Translations' => [ '翻譯清單' ],
+ 'PageMigration' => [ '頁面轉移' ],
+ 'PagePreparation' => [ '頁面準備' ],
+];
diff --git a/Translate/Translate.i18n.magic.php b/Translate/Translate.i18n.magic.php
new file mode 100644
index 00000000..891c11e7
--- /dev/null
+++ b/Translate/Translate.i18n.magic.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Internationalisation file for magic words in the Translate extension
+ *
+ * @file
+ * @ingroup Extensions
+ */
+
+$magicWords = [];
+
+/** English (English) */
+$magicWords['en'] = [
+ 'translation' => [ 0, 'translation' ],
+];
+
+/** Urdu (اردو) */
+$magicWords['ur'] = [
+ 'translation' => [ 0, 'ترجمہ', 'translation' ],
+];
diff --git a/Translate/TranslateEditAddons.php b/Translate/TranslateEditAddons.php
new file mode 100644
index 00000000..e9b26e85
--- /dev/null
+++ b/Translate/TranslateEditAddons.php
@@ -0,0 +1,296 @@
+<?php
+/**
+ * Tools for edit page view to aid translators. This implements the so called
+ * old style editing, which extends the normal edit page.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @author Siebrand Mazeland
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Extension\Translate\MessageGroupProcessing\RevTagStore;
+use MediaWiki\Extension\Translate\PageTranslation\Hooks as PageTranslationHooks;
+use MediaWiki\Extension\Translate\Services;
+use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\Revision\RevisionRecord;
+use MediaWiki\Storage\EditResult;
+use MediaWiki\User\UserIdentity;
+
+/**
+ * Various editing enhancements to the edit page interface.
+ * Partly succeeded by the new ajax-enhanced editor but kept for compatibility.
+ * Also has code that is still relevant, like the hooks on save.
+ */
+class TranslateEditAddons {
+ /**
+ * Prevent translations to non-translatable languages for the group
+ * Hook: getUserPermissionsErrorsExpensive
+ *
+ * @param Title $title
+ * @param User $user
+ * @param string $action
+ * @param mixed &$result
+ * @return bool
+ */
+ public static function disallowLangTranslations( Title $title, User $user,
+ $action, &$result
+ ) {
+ if ( $action !== 'edit' ) {
+ return true;
+ }
+
+ $handle = new MessageHandle( $title );
+ if ( !$handle->isValid() ) {
+ return true;
+ }
+
+ if ( $user->isAllowed( 'translate-manage' ) ) {
+ return true;
+ }
+
+ $group = $handle->getGroup();
+ $languages = $group->getTranslatableLanguages();
+ $langCode = $handle->getCode();
+ if ( $languages !== null && $langCode && !isset( $languages[$langCode] ) ) {
+ $result = [ 'translate-language-disabled' ];
+ return false;
+ }
+
+ $groupId = $group->getId();
+ $checks = [
+ $groupId,
+ strtok( $groupId, '-' ),
+ '*'
+ ];
+
+ $disabledLanguages = Services::getInstance()->getConfigHelper()->getDisabledTargetLanguages();
+ foreach ( $checks as $check ) {
+ if ( isset( $disabledLanguages[$check][$langCode] ) ) {
+ $reason = $disabledLanguages[$check][$langCode];
+ $result = [ 'translate-page-disabled', $reason ];
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Runs message checks, adds tp:transver tags and updates statistics.
+ *
+ * Hook: PageSaveComplete
+ * @param WikiPage $wikiPage
+ * @param UserIdentity $userIdentity
+ * @param string $summary
+ * @param int $flags
+ * @param RevisionRecord $revisionRecord
+ * @param EditResult $editResult
+ * @return true
+ */
+ public static function onSaveComplete(
+ WikiPage $wikiPage,
+ UserIdentity $userIdentity,
+ string $summary,
+ int $flags,
+ RevisionRecord $revisionRecord,
+ EditResult $editResult
+ ) {
+ global $wgEnablePageTranslation;
+
+ $content = $wikiPage->getContent();
+
+ if ( !$content instanceof TextContent ) {
+ // Screw it, not interested
+ return true;
+ }
+
+ $text = $content->getText();
+ $title = $wikiPage->getTitle();
+ $handle = new MessageHandle( $title );
+
+ if ( !$handle->isValid() ) {
+ return true;
+ }
+
+ // Update it.
+ $revId = $revisionRecord->getId();
+
+ $fuzzy = self::checkNeedsFuzzy( $handle, $text );
+ self::updateFuzzyTag( $title, $revId, $fuzzy );
+
+ $group = $handle->getGroup();
+ // Update translation stats - source language should always be up to date
+ if ( $handle->getCode() !== $group->getSourceLanguage() ) {
+ // This will update in-process cache immediately, but the value is saved
+ // to the database in a deferred update. See MessageGroupStats::queueUpdates.
+ // In case an error happens before that, the stats may be stale, but that
+ // would be fixed by the next update or purge.
+ MessageGroupStats::clear( $handle );
+ }
+
+ // This job asks for stats, however the updated stats are written in a deferred update.
+ // To make it less likely that the job would be executed before the updated stats are
+ // written, create the job inside a deferred update too.
+ DeferredUpdates::addCallableUpdate(
+ static function () use ( $handle ) {
+ MessageGroupStatesUpdaterJob::onChange( $handle );
+ }
+ );
+
+ $user = User::newFromIdentity( $userIdentity );
+
+ if ( $fuzzy === false ) {
+ Hooks::run( 'Translate:newTranslation', [ $handle, $revId, $text, $user ] );
+ }
+
+ TTMServer::onChange( $handle );
+
+ if ( $wgEnablePageTranslation && $handle->isPageTranslation() ) {
+ // Updates for translatable pages only
+ $minor = $flags & EDIT_MINOR;
+ PageTranslationHooks::onSectionSave( $wikiPage, $user, $content,
+ $summary, $minor, $flags, $handle );
+ }
+
+ return true;
+ }
+
+ /**
+ * Returns true if message is fuzzy, OR fails checks OR fails validations (error OR warning).
+ * @param MessageHandle $handle
+ * @param string $text
+ * @return bool
+ */
+ protected static function checkNeedsFuzzy( MessageHandle $handle, $text ) {
+ // Docs are exempt for checks
+ if ( $handle->isDoc() ) {
+ return false;
+ }
+
+ // Check for explicit tag.
+ if ( MessageHandle::hasFuzzyString( $text ) ) {
+ return true;
+ }
+
+ // Not all groups have validators
+ $group = $handle->getGroup();
+ $validator = $group->getValidator();
+
+ // no validator set
+ if ( !$validator ) {
+ return false;
+ }
+
+ $code = $handle->getCode();
+ $key = $handle->getKey();
+ $en = $group->getMessage( $key, $group->getSourceLanguage() );
+ $message = new FatMessage( $key, $en );
+ // Take the contents from edit field as a translation.
+ $message->setTranslation( $text );
+ if ( $message->definition() === null ) {
+ // This should NOT happen, but add a check since it seems to be happening
+ // See: https://phabricator.wikimedia.org/T255669
+ LoggerFactory::getInstance( 'Translate' )->warning(
+ 'Message definition is empty! Title: {title}, group: {group}, key: {key}',
+ [
+ 'title' => $handle->getTitle()->getPrefixedText(),
+ 'group' => $group->getId(),
+ 'key' => $key
+ ]
+ );
+ return false;
+ }
+
+ $validationResult = $validator->quickValidate( $message, $code );
+ return $validationResult->hasIssues();
+ }
+
+ /**
+ * @param Title $title
+ * @param int $revision
+ * @param bool $fuzzy Whether to fuzzy or not
+ * @return bool Whether status changed
+ */
+ protected static function updateFuzzyTag( Title $title, $revision, $fuzzy ) {
+ $dbw = wfGetDB( DB_PRIMARY );
+
+ $conds = [
+ 'rt_page' => $title->getArticleID(),
+ 'rt_type' => RevTagStore::FUZZY_TAG,
+ 'rt_revision' => $revision
+ ];
+
+ // Replace the existing fuzzy tag, if any
+ if ( $fuzzy !== false ) {
+ $index = array_keys( $conds );
+ $dbw->replace( 'revtag', [ $index ], $conds, __METHOD__ );
+ } else {
+ $dbw->delete( 'revtag', $conds, __METHOD__ );
+ }
+
+ return (bool)$dbw->affectedRows();
+ }
+
+ /**
+ * Adds tag which identifies the revision of source message at that time.
+ * This is used to show diff against current version of source message
+ * when updating a translation.
+ * Hook: Translate:newTranslation
+ * @param MessageHandle $handle
+ * @param int $revision
+ * @param string $text
+ * @param User $user
+ * @return bool
+ */
+ public static function updateTransverTag( MessageHandle $handle, $revision,
+ $text, User $user
+ ) {
+ if ( $user->isAllowed( 'bot' ) ) {
+ return false;
+ }
+
+ $group = $handle->getGroup();
+
+ $title = $handle->getTitle();
+ $name = $handle->getKey() . '/' . $group->getSourceLanguage();
+ $definitionTitle = Title::makeTitleSafe( $title->getNamespace(), $name );
+ if ( !$definitionTitle || !$definitionTitle->exists() ) {
+ return true;
+ }
+
+ $definitionRevision = $definitionTitle->getLatestRevID();
+
+ $dbw = wfGetDB( DB_PRIMARY );
+
+ $conds = [
+ 'rt_page' => $title->getArticleID(),
+ 'rt_type' => RevTagStore::TRANSVER_PROP,
+ 'rt_revision' => $revision,
+ 'rt_value' => $definitionRevision,
+ ];
+ $index = [ 'rt_type', 'rt_page', 'rt_revision' ];
+ $dbw->replace( 'revtag', [ $index ], $conds, __METHOD__ );
+
+ return true;
+ }
+
+ /**
+ * Hook: ArticlePrepareTextForEdit
+ * @param WikiPage $wikiPage
+ * @param ParserOptions $popts
+ * @return bool
+ */
+ public static function disablePreSaveTransform( WikiPage $wikiPage, ParserOptions $popts ) {
+ global $wgTranslateUsePreSaveTransform;
+
+ if ( !$wgTranslateUsePreSaveTransform ) {
+ $handle = new MessageHandle( $wikiPage->getTitle() );
+ if ( $handle->isMessageNamespace() && !$handle->isDoc() ) {
+ $popts->setPreSaveTransform( false );
+ }
+ }
+
+ return true;
+ }
+}
diff --git a/Translate/TranslateHooks.php b/Translate/TranslateHooks.php
new file mode 100644
index 00000000..6bd0c095
--- /dev/null
+++ b/Translate/TranslateHooks.php
@@ -0,0 +1,1029 @@
+<?php
+/**
+ * Contains class with basic non-feature specific hooks.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Config\ServiceOptions;
+use MediaWiki\Extension\AbuseFilter\Variables\VariableHolder;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\DeleteTranslatableBundleJob;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\MoveTranslatableBundleJob;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\RevTagStore;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\TranslatableBundleLogFormatter;
+use MediaWiki\Extension\Translate\PageTranslation\DeleteTranslatableBundleSpecialPage;
+use MediaWiki\Extension\Translate\PageTranslation\Hooks;
+use MediaWiki\Extension\Translate\PageTranslation\MigrateTranslatablePageSpecialPage;
+use MediaWiki\Extension\Translate\PageTranslation\PageTranslationSpecialPage;
+use MediaWiki\Extension\Translate\PageTranslation\PrepareTranslatablePageSpecialPage;
+use MediaWiki\Extension\Translate\PageTranslation\RenderTranslationPageJob;
+use MediaWiki\Extension\Translate\PageTranslation\UpdateTranslatablePageJob;
+use MediaWiki\Extension\Translate\SystemUsers\FuzzyBot;
+use MediaWiki\Extension\Translate\SystemUsers\TranslateUserManager;
+use MediaWiki\Extension\Translate\TranslatorSandbox\ManageTranslatorSandboxSpecialPage;
+use MediaWiki\Extension\Translate\TranslatorSandbox\TranslationStashActionApi;
+use MediaWiki\Extension\Translate\TranslatorSandbox\TranslationStashSpecialPage;
+use MediaWiki\Extension\Translate\TranslatorSandbox\TranslatorSandboxActionApi;
+use MediaWiki\MediaWikiServices;
+use MediaWiki\Revision\Hook\RevisionRecordInsertedHook;
+use MediaWiki\Revision\RevisionLookup;
+use Wikimedia\Rdbms\ILoadBalancer;
+
+/**
+ * Hooks for Translate extension.
+ *
+ * Main subsystems, like page translation, should have their own hook handler.
+ *
+ * Most of the hooks on this class are still old style static functions, but new new hooks should
+ * use the new style hook handlers with interfaces.
+ */
+class TranslateHooks implements RevisionRecordInsertedHook {
+ /**
+ * Any user of this list should make sure that the tables
+ * actually exist, since they may be optional
+ *
+ * @var array
+ */
+ private static $userMergeTables = [
+ 'translate_stash' => 'ts_user',
+ 'translate_reviews' => 'trr_user',
+ ];
+ /** @var RevisionLookup */
+ private $revisionLookup;
+ /** @var ILoadBalancer */
+ private $loadBalancer;
+
+ public function __construct( RevisionLookup $revisionLookup, ILoadBalancer $loadBalancer ) {
+ $this->revisionLookup = $revisionLookup;
+ $this->loadBalancer = $loadBalancer;
+ }
+
+ /**
+ * Do late setup that depends on configuration.
+ */
+ public static function setupTranslate() {
+ global $wgHooks, $wgTranslateYamlLibrary;
+
+ /*
+ * Text that will be shown in translations if the translation is outdated.
+ * Must be something that does not conflict with actual content.
+ */
+ if ( !defined( 'TRANSLATE_FUZZY' ) ) {
+ define( 'TRANSLATE_FUZZY', '!!FUZZY!!' );
+ }
+
+ if ( $wgTranslateYamlLibrary === null ) {
+ $wgTranslateYamlLibrary = function_exists( 'yaml_parse' ) ? 'phpyaml' : 'spyc';
+ }
+
+ $wgHooks['PageSaveComplete'][] = [ TranslateEditAddons::class, 'onSaveComplete' ];
+
+ // Page translation setup check and init if enabled.
+ global $wgEnablePageTranslation;
+ if ( $wgEnablePageTranslation ) {
+ // Special page and the right to use it
+ global $wgSpecialPages, $wgAvailableRights;
+ $wgSpecialPages['PageTranslation'] = [
+ 'class' => PageTranslationSpecialPage::class,
+ 'services' => [
+ 'LanguageNameUtils',
+ 'LanguageFactory',
+ 'Translate:TranslationUnitStoreFactory',
+ 'Translate:TranslatablePageParser',
+ 'LinkBatchFactory',
+ 'JobQueueGroup',
+ 'DBLoadBalancer',
+ 'Translate:MessageIndex'
+ ]
+ ];
+ $wgSpecialPages['PageTranslationDeletePage'] = [
+ 'class' => DeleteTranslatableBundleSpecialPage::class,
+ 'services' => [
+ 'MainObjectStash',
+ 'PermissionManager',
+ 'Translate:TranslatableBundleFactory',
+ 'Translate:SubpageListBuilder',
+ 'JobQueueGroup',
+ ]
+ ];
+
+ // right-pagetranslation action-pagetranslation
+ $wgAvailableRights[] = 'pagetranslation';
+
+ $wgSpecialPages['PageMigration'] = MigrateTranslatablePageSpecialPage::class;
+ $wgSpecialPages['PagePreparation'] = PrepareTranslatablePageSpecialPage::class;
+
+ global $wgActionFilteredLogs, $wgLogActionsHandlers, $wgLogTypes;
+
+ // log-description-pagetranslation log-name-pagetranslation logentry-pagetranslation-mark
+ // logentry-pagetranslation-unmark logentry-pagetranslation-moveok
+ // logentry-pagetranslation-movenok logentry-pagetranslation-deletefok
+ // logentry-pagetranslation-deletefnok logentry-pagetranslation-deletelok
+ // logentry-pagetranslation-deletelnok logentry-pagetranslation-encourage
+ // logentry-pagetranslation-discourage logentry-pagetranslation-prioritylanguages
+ // logentry-pagetranslation-associate logentry-pagetranslation-dissociate
+ $wgLogTypes[] = 'pagetranslation';
+ $wgLogActionsHandlers['pagetranslation/mark'] = TranslatableBundleLogFormatter::class;
+ $wgLogActionsHandlers['pagetranslation/unmark'] = TranslatableBundleLogFormatter::class;
+ $wgLogActionsHandlers['pagetranslation/moveok'] = TranslatableBundleLogFormatter::class;
+ $wgLogActionsHandlers['pagetranslation/movenok'] = TranslatableBundleLogFormatter::class;
+ $wgLogActionsHandlers['pagetranslation/deletelok'] = TranslatableBundleLogFormatter::class;
+ $wgLogActionsHandlers['pagetranslation/deletefok'] = TranslatableBundleLogFormatter::class;
+ $wgLogActionsHandlers['pagetranslation/deletelnok'] = TranslatableBundleLogFormatter::class;
+ $wgLogActionsHandlers['pagetranslation/deletefnok'] = TranslatableBundleLogFormatter::class;
+ $wgLogActionsHandlers['pagetranslation/encourage'] = TranslatableBundleLogFormatter::class;
+ $wgLogActionsHandlers['pagetranslation/discourage'] = TranslatableBundleLogFormatter::class;
+ $wgLogActionsHandlers['pagetranslation/prioritylanguages'] = TranslatableBundleLogFormatter::class;
+ $wgLogActionsHandlers['pagetranslation/associate'] = TranslatableBundleLogFormatter::class;
+ $wgLogActionsHandlers['pagetranslation/dissociate'] = TranslatableBundleLogFormatter::class;
+ $wgActionFilteredLogs['pagetranslation'] = [
+ 'mark' => [ 'mark' ],
+ 'unmark' => [ 'unmark' ],
+ 'move' => [ 'moveok', 'movenok' ],
+ 'delete' => [ 'deletefok', 'deletefnok', 'deletelok', 'deletelnok' ],
+ 'encourage' => [ 'encourage' ],
+ 'discourage' => [ 'discourage' ],
+ 'prioritylanguages' => [ 'prioritylanguages' ],
+ 'aggregategroups' => [ 'associate', 'dissociate' ],
+ ];
+
+ $wgLogTypes[] = 'messagebundle';
+ $wgLogActionsHandlers['messagebundle/moveok'] = TranslatableBundleLogFormatter::class;
+ $wgLogActionsHandlers['messagebundle/movenok'] = TranslatableBundleLogFormatter::class;
+ $wgLogActionsHandlers['messagebundle/deletefok'] = TranslatableBundleLogFormatter::class;
+ $wgLogActionsHandlers['messagebundle/deletefnok'] = TranslatableBundleLogFormatter::class;
+ $wgActionFilteredLogs['messagebundle'] = [
+ 'move' => [ 'moveok', 'movenok' ],
+ 'delete' => [ 'deletefok', 'deletefnok' ],
+ ];
+
+ global $wgJobClasses;
+ $wgJobClasses['RenderTranslationPageJob'] = RenderTranslationPageJob::class;
+ // Remove after MLEB 2022.10 release
+ $wgJobClasses['TranslateRenderJob'] = RenderTranslationPageJob::class;
+ // Remove after MLEB 2022.07 release
+ $wgJobClasses['TranslatableBundleMoveJob'] = MoveTranslatableBundleJob::class;
+ $wgJobClasses['MoveTranslatableBundleJob'] = MoveTranslatableBundleJob::class;
+ // Remove after MLEB 2022.07 release
+ $wgJobClasses['TranslatableBundleDeleteJob'] = DeleteTranslatableBundleJob::class;
+ $wgJobClasses['DeleteTranslatableBundleJob'] = DeleteTranslatableBundleJob::class;
+
+ $wgJobClasses['UpdateTranslatablePageJob'] = UpdateTranslatablePageJob::class;
+ // Remove after MLEB 2022.10 release
+ $wgJobClasses['TranslationsUpdateJob'] = UpdateTranslatablePageJob::class;
+
+ // Namespaces
+ global $wgNamespacesWithSubpages, $wgNamespaceProtection;
+ global $wgTranslateMessageNamespaces;
+
+ $wgNamespacesWithSubpages[NS_TRANSLATIONS] = true;
+ $wgNamespacesWithSubpages[NS_TRANSLATIONS_TALK] = true;
+
+ // Standard protection and register it for filtering
+ $wgNamespaceProtection[NS_TRANSLATIONS] = [ 'translate' ];
+ $wgTranslateMessageNamespaces[] = NS_TRANSLATIONS;
+
+ /// Page translation hooks
+
+ /// Register our CSS and metadata
+ $wgHooks['BeforePageDisplay'][] = [ Hooks::class, 'onBeforePageDisplay' ];
+
+ // Disable VE
+ $wgHooks['VisualEditorBeforeEditor'][] = [ Hooks::class, 'onVisualEditorBeforeEditor' ];
+
+ // Check syntax for \<translate>
+ $wgHooks['MultiContentSave'][] = [ Hooks::class, 'tpSyntaxCheck' ];
+ $wgHooks['EditFilterMergedContent'][] =
+ [ Hooks::class, 'tpSyntaxCheckForEditContent' ];
+
+ // Add transtag to page props for discovery
+ $wgHooks['PageSaveComplete'][] = [ Hooks::class, 'addTranstagAfterSave' ];
+
+ $wgHooks['RevisionRecordInserted'][] = [ Hooks::class, 'updateTranstagOnNullRevisions' ];
+
+ // Register different ways to show language links
+ $wgHooks['ParserFirstCallInit'][] = [ self::class, 'setupParserHooks' ];
+ $wgHooks['LanguageLinks'][] = [ Hooks::class, 'addLanguageLinks' ];
+ $wgHooks['SkinTemplateGetLanguageLink'][] = [ Hooks::class, 'formatLanguageLink' ];
+
+ // Strip \<translate> tags etc. from source pages when rendering
+ $wgHooks['ParserBeforeInternalParse'][] = [ Hooks::class, 'renderTagPage' ];
+ // Strip \<translate> tags etc. from source pages when preprocessing
+ $wgHooks['ParserBeforePreprocess'][] = [ Hooks::class, 'preprocessTagPage' ];
+ $wgHooks['ParserOutputPostCacheTransform'][] =
+ [ Hooks::class, 'onParserOutputPostCacheTransform' ];
+
+ $wgHooks['BeforeParserFetchTemplateRevisionRecord'][] =
+ [ Hooks::class, 'fetchTranslatableTemplateAndTitle' ];
+
+ // Set the page content language
+ $wgHooks['PageContentLanguage'][] = [ Hooks::class, 'onPageContentLanguage' ];
+
+ // Prevent editing of certain pages in translations namespace
+ $wgHooks['getUserPermissionsErrorsExpensive'][] =
+ [ Hooks::class, 'onGetUserPermissionsErrorsExpensive' ];
+ // Prevent editing of translation pages directly
+ $wgHooks['getUserPermissionsErrorsExpensive'][] =
+ [ Hooks::class, 'preventDirectEditing' ];
+
+ // Our custom header for translation pages
+ $wgHooks['ArticleViewHeader'][] = [ Hooks::class, 'translatablePageHeader' ];
+
+ // Edit notice shown on translatable pages
+ $wgHooks['TitleGetEditNotices'][] = [ Hooks::class, 'onTitleGetEditNotices' ];
+
+ // Custom move page that can move all the associated pages too
+ $wgHooks['SpecialPage_initList'][] = [ Hooks::class, 'replaceMovePage' ];
+ // Locking during page moves
+ $wgHooks['getUserPermissionsErrorsExpensive'][] =
+ [ Hooks::class, 'lockedPagesCheck' ];
+ // Disable action=delete
+ $wgHooks['ArticleConfirmDelete'][] = [ Hooks::class, 'disableDelete' ];
+
+ // Replace subpage logic behavior
+ $wgHooks['SkinSubPageSubtitle'][] = [ Hooks::class, 'replaceSubtitle' ];
+
+ // Replaced edit tab with translation tab for translation pages
+ $wgHooks['SkinTemplateNavigation::Universal'][] = [ Hooks::class, 'translateTab' ];
+
+ // Update translated page when translation unit is moved
+ $wgHooks['PageMoveComplete'][] = [ Hooks::class, 'onMovePageTranslationUnits' ];
+
+ // Update translated page when translation unit is deleted
+ $wgHooks['ArticleDeleteComplete'][] = [ Hooks::class, 'onDeleteTranslationUnit' ];
+ }
+
+ global $wgTranslateUseSandbox;
+ if ( $wgTranslateUseSandbox ) {
+ global $wgSpecialPages, $wgAvailableRights, $wgDefaultUserOptions;
+
+ $wgSpecialPages['ManageTranslatorSandbox'] = [
+ 'class' => ManageTranslatorSandboxSpecialPage::class,
+ 'services' => [
+ 'Translate:TranslationStashReader',
+ 'UserOptionsLookup'
+ ],
+ 'args' => [
+ static function () {
+ return new ServiceOptions(
+ ManageTranslatorSandboxSpecialPage::CONSTRUCTOR_OPTIONS,
+ MediaWikiServices::getInstance()->getMainConfig()
+ );
+ }
+ ]
+ ];
+ $wgSpecialPages['TranslationStash'] = [
+ 'class' => TranslationStashSpecialPage::class,
+ 'services' => [
+ 'LanguageNameUtils',
+ 'Translate:TranslationStashReader',
+ 'UserOptionsLookup',
+ 'LanguageFactory',
+ ],
+ 'args' => [
+ static function () {
+ return new ServiceOptions(
+ TranslationStashSpecialPage::CONSTRUCTOR_OPTIONS,
+ MediaWikiServices::getInstance()->getMainConfig()
+ );
+ }
+ ]
+ ];
+ $wgDefaultUserOptions['translate-sandbox'] = '';
+ // right-translate-sandboxmanage action-translate-sandboxmanage
+ $wgAvailableRights[] = 'translate-sandboxmanage';
+
+ $wgHooks['GetPreferences'][] = [ TranslateSandbox::class, 'onGetPreferences' ];
+ $wgHooks['UserGetRights'][] = [ TranslateSandbox::class, 'enforcePermissions' ];
+ $wgHooks['ApiCheckCanExecute'][] = [ TranslateSandbox::class, 'onApiCheckCanExecute' ];
+
+ global $wgLogTypes, $wgLogActionsHandlers;
+ // log-name-translatorsandbox log-description-translatorsandbox
+ $wgLogTypes[] = 'translatorsandbox';
+ // logentry-translatorsandbox-promoted logentry-translatorsandbox-rejected
+ $wgLogActionsHandlers['translatorsandbox/promoted'] = 'TranslateLogFormatter';
+ $wgLogActionsHandlers['translatorsandbox/rejected'] = 'TranslateLogFormatter';
+
+ // This is no longer used for new entries since 2016.07.
+ // logentry-newusers-tsbpromoted
+ $wgLogActionsHandlers['newusers/tsbpromoted'] = 'LogFormatter';
+
+ global $wgJobClasses;
+ $wgJobClasses['TranslateSandboxEmailJob'] = 'TranslateSandboxEmailJob';
+
+ global $wgAPIModules;
+ $wgAPIModules['translationstash'] = [
+ 'class' => TranslationStashActionApi::class,
+ 'services' => [
+ 'DBLoadBalancer',
+ 'UserFactory'
+ ]
+ ];
+ $wgAPIModules['translatesandbox'] = [
+ 'class' => TranslatorSandboxActionApi::class,
+ 'services' => [
+ 'UserFactory',
+ 'UserNameUtils',
+ 'UserOptionsManager',
+ 'WikiPageFactory',
+ 'UserOptionsLookup'
+ ],
+ 'args' => [
+ static function () {
+ return new ServiceOptions(
+ TranslatorSandboxActionApi::CONSTRUCTOR_OPTIONS,
+ MediaWikiServices::getInstance()->getMainConfig()
+ );
+ }
+ ]
+ ];
+ }
+
+ global $wgNamespaceRobotPolicies;
+ $wgNamespaceRobotPolicies[NS_TRANSLATIONS] = 'noindex';
+
+ // If no service has been configured, we use a built-in fallback.
+ global $wgTranslateTranslationDefaultService,
+ $wgTranslateTranslationServices;
+ if ( $wgTranslateTranslationDefaultService === true ) {
+ $wgTranslateTranslationDefaultService = 'TTMServer';
+ if ( !isset( $wgTranslateTranslationServices['TTMServer'] ) ) {
+ $wgTranslateTranslationServices['TTMServer'] = [
+ 'database' => false, // Passed to wfGetDB
+ 'cutoff' => 0.75,
+ 'type' => 'ttmserver',
+ 'public' => false,
+ ];
+ }
+ }
+
+ $wgHooks['SidebarBeforeOutput'][] = [ TranslateToolbox::class, 'toolboxAllTranslations' ];
+ }
+
+ /**
+ * Hook: UserGetReservedNames
+ * Prevents anyone from registering or logging in as FuzzyBot
+ *
+ * @param array &$names
+ */
+ public static function onUserGetReservedNames( array &$names ) {
+ $names[] = FuzzyBot::getName();
+ $names[] = TranslateUserManager::getName();
+ }
+
+ /**
+ * Used for setting an AbuseFilter variable.
+ *
+ * @param VariableHolder &$vars
+ * @param Title $title
+ * @param User $user
+ */
+ public static function onAbuseFilterAlterVariables(
+ &$vars, Title $title, User $user
+ ) {
+ $handle = new MessageHandle( $title );
+
+ // Only set this variable if we are in a proper namespace to avoid
+ // unnecessary overhead in non-translation pages
+ if ( $handle->isMessageNamespace() ) {
+ $vars->setLazyLoadVar(
+ 'translate_source_text',
+ 'translate-get-source',
+ [ 'handle' => $handle ]
+ );
+ $vars->setLazyLoadVar(
+ 'translate_target_language',
+ 'translate-get-target-language',
+ [ 'handle' => $handle ]
+ );
+ }
+ }
+
+ /**
+ * Computes the translate_source_text and translate_target_language AbuseFilter variables
+ * @param string $method
+ * @param VariableHolder $vars
+ * @param array $parameters
+ * @param null &$result
+ * @return bool
+ */
+ public static function onAbuseFilterComputeVariable( $method, $vars, $parameters, &$result ) {
+ if ( $method !== 'translate-get-source' && $method !== 'translate-get-target-language' ) {
+ return true;
+ }
+
+ $handle = $parameters['handle'];
+ $value = '';
+ if ( $handle->isValid() ) {
+ if ( $method === 'translate-get-source' ) {
+ $group = $handle->getGroup();
+ $value = $group->getMessage( $handle->getKey(), $group->getSourceLanguage() );
+ } else {
+ $value = $handle->getCode();
+ }
+ }
+
+ $result = $value;
+
+ return false;
+ }
+
+ /**
+ * Register AbuseFilter variables provided by Translate.
+ * @param array &$builderValues
+ */
+ public static function onAbuseFilterBuilder( array &$builderValues ) {
+ // Uses: 'abusefilter-edit-builder-vars-translate-source-text'
+ // and 'abusefilter-edit-builder-vars-translate-target-language'
+ $builderValues['vars']['translate_source_text'] = 'translate-source-text';
+ $builderValues['vars']['translate_target_language'] = 'translate-target-language';
+ }
+
+ /**
+ * Hook: ParserFirstCallInit
+ * Registers \<languages> tag with the parser.
+ *
+ * @param Parser $parser
+ */
+ public static function setupParserHooks( Parser $parser ) {
+ // For nice language list in-page
+ $parser->setHook( 'languages', [ Hooks::class, 'languages' ] );
+ }
+
+ /**
+ * Hook: LoadExtensionSchemaUpdates
+ *
+ * @param DatabaseUpdater $updater
+ */
+ public static function schemaUpdates( DatabaseUpdater $updater ) {
+ $dir = __DIR__ . '/sql';
+ $dbType = $updater->getDB()->getType();
+
+ if ( $dbType === 'mysql' || $dbType === 'sqlite' ) {
+ $updater->addExtensionTable(
+ 'translate_sections',
+ "{$dir}/{$dbType}/translate_sections.sql"
+ );
+ $updater->addExtensionTable(
+ 'revtag',
+ "{$dir}/{$dbType}/revtag.sql"
+ );
+ $updater->addExtensionTable(
+ 'translate_groupstats',
+ "{$dir}/{$dbType}/translate_groupstats.sql"
+ );
+ $updater->addExtensionTable(
+ 'translate_reviews',
+ "{$dir}/{$dbType}/translate_reviews.sql"
+ );
+ $updater->addExtensionTable(
+ 'translate_groupreviews',
+ "{$dir}/{$dbType}/translate_groupreviews.sql"
+ );
+ $updater->addExtensionTable(
+ 'translate_tms',
+ "{$dir}/{$dbType}/translate_tm.sql"
+ );
+ $updater->addExtensionTable(
+ 'translate_metadata',
+ "{$dir}/{$dbType}/translate_metadata.sql"
+ );
+ $updater->addExtensionTable(
+ 'translate_messageindex',
+ "{$dir}/{$dbType}/translate_messageindex.sql"
+ );
+ $updater->addExtensionTable(
+ 'translate_stash',
+ "{$dir}/{$dbType}/translate_stash.sql"
+ );
+ $updater->addExtensionTable(
+ 'translate_translatable_bundles',
+ "{$dir}/${dbType}/translate_translatable_bundles.sql"
+ );
+
+ // 1.32 - This also adds a PRIMARY KEY
+ $updater->addExtensionUpdate( [
+ 'renameIndex',
+ 'translate_reviews',
+ 'trr_user_page_revision',
+ 'PRIMARY',
+ false,
+ "$dir/translate_reviews-patch-01-primary-key.sql",
+ true
+ ] );
+
+ $updater->addExtensionTable(
+ 'translate_cache',
+ "{$dir}/{$dbType}/translate_cache.sql"
+ );
+
+ if ( $dbType === 'mysql' ) {
+ // 1.38
+ $updater->modifyExtensionField(
+ 'translate_cache',
+ 'tc_key',
+ "{$dir}/{$dbType}/translate_cache-alter-varbinary.sql"
+ );
+ }
+ } elseif ( $dbType === 'postgres' ) {
+ $updater->addExtensionTable(
+ 'translate_sections',
+ "{$dir}/{$dbType}/tables-generated.sql"
+ );
+ $updater->addExtensionUpdate( [
+ 'changeField', 'translate_cache', 'tc_exptime', 'TIMESTAMPTZ', 'th_timestamp::timestamp with time zone'
+ ] );
+ }
+
+ // 1.39
+ $updater->dropExtensionIndex(
+ 'translate_messageindex',
+ 'tmi_key',
+ "{$dir}/{$dbType}/patch-translate_messageindex-unique-to-pk.sql"
+ );
+ $updater->dropExtensionIndex(
+ 'translate_tmt',
+ 'tms_sid_lang',
+ "{$dir}/{$dbType}/patch-translate_tmt-unique-to-pk.sql"
+ );
+ $updater->dropExtensionIndex(
+ 'revtag',
+ 'rt_type_page_revision',
+ "{$dir}/{$dbType}/patch-revtag-unique-to-pk.sql"
+ );
+ }
+
+ /**
+ * Hook: ParserTestTables
+ * @param array &$tables
+ */
+ public static function parserTestTables( array &$tables ) {
+ $tables[] = 'revtag';
+ $tables[] = 'translate_groupstats';
+ $tables[] = 'translate_messageindex';
+ $tables[] = 'translate_stash';
+ }
+
+ /**
+ * Hook: PageContentLanguage
+ * Set the correct page content language for translation units.
+ *
+ * @param Title $title
+ * @param Language|StubUserLang|string &$pageLang
+ */
+ public static function onPageContentLanguage( Title $title, &$pageLang ) {
+ $handle = new MessageHandle( $title );
+ if ( $handle->isMessageNamespace() ) {
+ $pageLang = $handle->getEffectiveLanguage();
+ }
+ }
+
+ /**
+ * Hook: LanguageGetTranslatedLanguageNames
+ * Hook: TranslateSupportedLanguages
+ * @param array &$names
+ * @param string $code
+ */
+ public static function translateMessageDocumentationLanguage( array &$names, $code ) {
+ global $wgTranslateDocumentationLanguageCode;
+ if ( $wgTranslateDocumentationLanguageCode ) {
+ // Special case the autonyms
+ if (
+ $wgTranslateDocumentationLanguageCode === $code ||
+ $code === null
+ ) {
+ $code = 'en';
+ }
+
+ $names[$wgTranslateDocumentationLanguageCode] =
+ wfMessage( 'translate-documentation-language' )->inLanguage( $code )->plain();
+ }
+ }
+
+ /**
+ * Hook: SpecialSearchProfiles
+ * @param array &$profiles
+ */
+ public static function searchProfile( array &$profiles ) {
+ global $wgTranslateMessageNamespaces;
+ $insert = [];
+ $insert['translation'] = [
+ 'message' => 'translate-searchprofile',
+ 'tooltip' => 'translate-searchprofile-tooltip',
+ 'namespaces' => $wgTranslateMessageNamespaces,
+ ];
+
+ // Insert translations before 'all'
+ $index = array_search( 'all', array_keys( $profiles ) );
+
+ // Or just at the end if all is not found
+ if ( $index === false ) {
+ wfWarn( '"all" not found in search profiles' );
+ $index = count( $profiles );
+ }
+
+ $profiles = array_merge(
+ array_slice( $profiles, 0, $index ),
+ $insert,
+ array_slice( $profiles, $index )
+ );
+ }
+
+ /**
+ * Hook: SpecialSearchProfileForm
+ * @param SpecialSearch $search
+ * @param string &$form
+ * @param string $profile
+ * @param string $term
+ * @param array $opts
+ * @return bool
+ */
+ public static function searchProfileForm(
+ SpecialSearch $search,
+ &$form,
+ $profile,
+ $term,
+ array $opts
+ ) {
+ if ( $profile !== 'translation' ) {
+ return true;
+ }
+
+ if ( TTMServer::primary() instanceof SearchableTTMServer ) {
+ $href = SpecialPage::getTitleFor( 'SearchTranslations' )
+ ->getFullUrl( [ 'query' => $term ] );
+ $form = Html::successBox(
+ $search->msg( 'translate-searchprofile-note', $href )->parse(),
+ 'plainlinks'
+ );
+
+ return false;
+ }
+
+ if ( !$search->getSearchEngine()->supports( 'title-suffix-filter' ) ) {
+ return false;
+ }
+
+ $hidden = '';
+ foreach ( $opts as $key => $value ) {
+ $hidden .= Html::hidden( $key, $value );
+ }
+
+ $context = $search->getContext();
+ $code = $context->getLanguage()->getCode();
+ $selected = $context->getRequest()->getVal( 'languagefilter' );
+
+ $languages = TranslateUtils::getLanguageNames( $code );
+ ksort( $languages );
+
+ $selector = new XmlSelect( 'languagefilter', 'languagefilter' );
+ $selector->setDefault( $selected );
+ $selector->addOption( wfMessage( 'translate-search-nofilter' )->text(), '-' );
+ foreach ( $languages as $code => $name ) {
+ $selector->addOption( "$code - $name", $code );
+ }
+
+ $selector = $selector->getHTML();
+
+ $label = Xml::label(
+ wfMessage( 'translate-search-languagefilter' )->text(),
+ 'languagefilter'
+ ) . '&#160;';
+ $params = [ 'id' => 'mw-searchoptions' ];
+
+ $form = Xml::fieldset( false, false, $params ) .
+ $hidden . $label . $selector .
+ Html::closeElement( 'fieldset' );
+
+ return false;
+ }
+
+ /**
+ * Hook: SpecialSearchSetupEngine
+ * @param SpecialSearch $search
+ * @param string $profile
+ * @param SearchEngine $engine
+ */
+ public static function searchProfileSetupEngine(
+ SpecialSearch $search,
+ $profile,
+ SearchEngine $engine
+ ) {
+ if ( $profile !== 'translation' ) {
+ return;
+ }
+
+ $context = $search->getContext();
+ $selected = $context->getRequest()->getVal( 'languagefilter' );
+ if ( $selected !== '-' && $selected ) {
+ $engine->setFeatureData( 'title-suffix-filter', "/$selected" );
+ $search->setExtraParam( 'languagefilter', $selected );
+ }
+ }
+
+ /**
+ * Hook: ParserAfterTidy
+ * @param Parser $parser
+ * @param string &$html
+ */
+ public static function preventCategorization( Parser $parser, &$html ) {
+ $handle = new MessageHandle( $parser->getTitle() );
+ if ( $handle->isMessageNamespace() && !$handle->isDoc() ) {
+ $parserOutput = $parser->getOutput();
+ $parserOutput->setExtensionData( 'translate-fake-categories',
+ $parserOutput->getCategories() );
+ if ( method_exists( $parserOutput, 'setCategories' ) ) { // 1.38+
+ $parserOutput->setCategories( [] );
+ } else {
+ $parserOutput->setCategoryLinks( [] );
+ }
+ }
+ }
+
+ /**
+ * Hook: OutputPageParserOutput
+ * @param OutputPage $outputPage
+ * @param ParserOutput $parserOutput
+ */
+ public static function showFakeCategories( OutputPage $outputPage, ParserOutput $parserOutput ) {
+ $fakeCategories = $parserOutput->getExtensionData( 'translate-fake-categories' );
+ if ( $fakeCategories ) {
+ $outputPage->setCategoryLinks( $fakeCategories );
+ }
+ }
+
+ /**
+ * Hook: MakeGlobalVariablesScript
+ *
+ * Adds $wgTranslateDocumentationLanguageCode to ResourceLoader configuration
+ * when Special:Translate is shown.
+ * @param array &$vars
+ * @param OutputPage $out
+ */
+ public static function addConfig( array &$vars, OutputPage $out ) {
+ $title = $out->getTitle();
+ [ $alias, ] = MediaWikiServices::getInstance()
+ ->getSpecialPageFactory()->resolveAlias( $title->getText() );
+
+ if ( $title->isSpecialPage()
+ && ( $alias === 'Translate'
+ || $alias === 'TranslationStash'
+ || $alias === 'SearchTranslations' )
+ ) {
+ global $wgTranslateDocumentationLanguageCode, $wgTranslatePermissionUrl,
+ $wgTranslateUseSandbox;
+ $vars['TranslateRight'] = $out->getUser()->isAllowed( 'translate' );
+ $vars['TranslateMessageReviewRight'] =
+ $out->getUser()->isAllowed( 'translate-messagereview' );
+ $vars['DeleteRight'] = $out->getUser()->isAllowed( 'delete' );
+ $vars['TranslateManageRight'] = $out->getUser()->isAllowed( 'translate-manage' );
+ $vars['wgTranslateDocumentationLanguageCode'] = $wgTranslateDocumentationLanguageCode;
+ $vars['wgTranslatePermissionUrl'] = $wgTranslatePermissionUrl;
+ $vars['wgTranslateUseSandbox'] = $wgTranslateUseSandbox;
+ }
+ }
+
+ /**
+ * Hook: AdminLinks
+ * @param ALTree $tree
+ */
+ public static function onAdminLinks( ALTree $tree ) {
+ global $wgTranslateUseSandbox;
+
+ if ( $wgTranslateUseSandbox ) {
+ $sectionLabel = wfMessage( 'adminlinks_users' )->text();
+ $row = $tree->getSection( $sectionLabel )->getRow( 'main' );
+ $row->addItem( ALItem::newFromSpecialPage( 'TranslateSandbox' ) );
+ }
+ }
+
+ /**
+ * Hook: MergeAccountFromTo
+ * For UserMerge extension.
+ *
+ * @param User $oldUser
+ * @param User $newUser
+ */
+ public static function onMergeAccountFromTo( User $oldUser, User $newUser ) {
+ $dbw = wfGetDB( DB_PRIMARY );
+
+ // Update the non-duplicate rows, we'll just delete
+ // the duplicate ones later
+ foreach ( self::$userMergeTables as $table => $field ) {
+ if ( $dbw->tableExists( $table, __METHOD__ ) ) {
+ $dbw->update(
+ $table,
+ [ $field => $newUser->getId() ],
+ [ $field => $oldUser->getId() ],
+ __METHOD__,
+ [ 'IGNORE' ]
+ );
+ }
+ }
+ }
+
+ /**
+ * Hook: DeleteAccount
+ * For UserMerge extension.
+ *
+ * @param User $oldUser
+ */
+ public static function onDeleteAccount( User $oldUser ) {
+ $dbw = wfGetDB( DB_PRIMARY );
+
+ // Delete any remaining rows that didn't get merged
+ foreach ( self::$userMergeTables as $table => $field ) {
+ if ( $dbw->tableExists( $table, __METHOD__ ) ) {
+ $dbw->delete(
+ $table,
+ [ $field => $oldUser->getId() ],
+ __METHOD__
+ );
+ }
+ }
+ }
+
+ /**
+ * Hook: AbortEmailNotification
+ *
+ * False aborts the email.
+ * @param User $editor
+ * @param Title $title
+ * @param RecentChange $rc
+ * @return bool
+ */
+ public static function onAbortEmailNotificationReview(
+ User $editor,
+ Title $title,
+ RecentChange $rc
+ ) {
+ if ( $rc->getAttribute( 'rc_log_type' ) === 'translationreview' ) {
+ return false;
+ }
+ }
+
+ /**
+ * Hook: TitleIsAlwaysKnown
+ * Make Special:MyLanguage links red if the target page doesn't exist.
+ * A bit hacky because the core code is not so flexible.
+ *
+ * @param Title $target
+ * @param bool &$isKnown
+ * @return bool
+ */
+ public static function onTitleIsAlwaysKnown( Title $target, &$isKnown ) {
+ if ( !$target->inNamespace( NS_SPECIAL ) ) {
+ return true;
+ }
+
+ [ $name, $subpage ] = MediaWikiServices::getInstance()
+ ->getSpecialPageFactory()->resolveAlias( $target->getDBkey() );
+ if ( $name !== 'MyLanguage' ) {
+ return true;
+ }
+
+ if ( (string)$subpage === '' ) {
+ return true;
+ }
+
+ $realTarget = Title::newFromText( $subpage );
+ if ( !$realTarget || !$realTarget->exists() ) {
+ $isKnown = false;
+
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Hook: ParserFirstCallInit
+ * @param Parser $parser
+ */
+ public static function setupTranslateParserFunction( Parser $parser ) {
+ $parser->setFunctionHook( 'translation', [ self::class, 'translateRenderParserFunction' ] );
+ }
+
+ /**
+ * @param Parser $parser
+ * @return string
+ */
+ public static function translateRenderParserFunction( Parser $parser ) {
+ $pageTitle = $parser->getTitle();
+
+ $handle = new MessageHandle( $pageTitle );
+ $code = $handle->getCode();
+ if ( Language::isKnownLanguageTag( $code ) ) {
+ return '/' . $code;
+ }
+ return '';
+ }
+
+ /**
+ * Runs the configured validator to ensure that the message meets the required criteria.
+ * Hook: EditFilterMergedContent
+ * @param IContextSource $context
+ * @param Content $content
+ * @param Status $status
+ * @param string $summary
+ * @param User $user
+ * @return bool true if message is valid, false otherwise.
+ */
+ public static function validateMessage( IContextSource $context, Content $content,
+ Status $status, $summary, User $user
+ ) {
+ if ( !$content instanceof TextContent ) {
+ // Not interested
+ return true;
+ }
+
+ $text = $content->getText();
+ $title = $context->getTitle();
+ $handle = new MessageHandle( $title );
+
+ if ( !$handle->isValid() ) {
+ return true;
+ }
+
+ // Don't bother validating if FuzzyBot or translation admin are saving.
+ if ( $user->isAllowed( 'translate-manage' ) || $user->equals( FuzzyBot::getUser() ) ) {
+ return true;
+ }
+
+ // Check the namespace, and perform validations for all messages excluding documentation.
+ if ( $handle->isMessageNamespace() && !$handle->isDoc() ) {
+ $group = $handle->getGroup();
+
+ if ( method_exists( $group, 'getMessageContent' ) ) {
+ // @phan-suppress-next-line PhanUndeclaredMethod
+ $definition = $group->getMessageContent( $handle );
+ } else {
+ $definition = $group->getMessage( $handle->getKey(), $group->getSourceLanguage() );
+ }
+
+ $message = new FatMessage( $handle->getKey(), $definition );
+ $message->setTranslation( $text );
+
+ $messageValidator = $group->getValidator();
+ if ( !$messageValidator ) {
+ return true;
+ }
+
+ $validationResponse = $messageValidator->validateMessage( $message, $handle->getCode() );
+ if ( $validationResponse->hasErrors() ) {
+ $status->fatal( new ApiRawMessage(
+ $context->msg( 'translate-syntax-error' )->parse(),
+ 'translate-validation-failed',
+ [
+ 'validation' => [
+ 'errors' => $validationResponse->getDescriptiveErrors( $context ),
+ 'warnings' => $validationResponse->getDescriptiveWarnings( $context )
+ ]
+ ]
+ ) );
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /** @inheritDoc */
+ public function onRevisionRecordInserted( $revisionRecord ): void {
+ $parentId = $revisionRecord->getParentId();
+ if ( $parentId === 0 || $parentId === null ) {
+ // No parent, bail out.
+ return;
+ }
+
+ $prevRev = $this->revisionLookup->getRevisionById( $parentId );
+ if ( !$prevRev || !$revisionRecord->hasSameContent( $prevRev ) ) {
+ // Not a null revision, bail out.
+ return;
+ }
+
+ // List of tags that should be copied over when updating
+ // tp:tag and tp:mark handling is in Hooks::updateTranstagOnNullRevisions.
+ $tagsToCopy = [ RevTagStore::FUZZY_TAG, RevTagStore::TRANSVER_PROP ];
+
+ $db = $this->loadBalancer->getConnectionRef( DB_PRIMARY );
+ $db->insertSelect(
+ 'revtag',
+ 'revtag',
+ [
+ 'rt_type' => 'rt_type',
+ 'rt_page' => 'rt_page',
+ 'rt_revision' => $revisionRecord->getId(),
+ 'rt_value' => 'rt_value',
+
+ ],
+ [
+ 'rt_type' => $tagsToCopy,
+ 'rt_revision' => $parentId,
+ ],
+ __METHOD__
+ );
+ }
+}
diff --git a/Translate/TranslateUtils.php b/Translate/TranslateUtils.php
new file mode 100644
index 00000000..83fa2a97
--- /dev/null
+++ b/Translate/TranslateUtils.php
@@ -0,0 +1,593 @@
+<?php
+/**
+ * This file contains classes with static helper functions for other classes.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Extension\Translate\PageTranslation\Hooks as PageTranslationHooks;
+use MediaWiki\MediaWikiServices;
+use MediaWiki\Revision\RevisionRecord;
+use MediaWiki\Revision\SlotRecord;
+
+/**
+ * Essentially random collection of helper functions, similar to GlobalFunctions.php.
+ */
+class TranslateUtils {
+ /**
+ * Does quick normalisation of message name so that in can be looked from the
+ * database.
+ * @param string $message Name of the message
+ * @param string $code Language code in lower case and with dash as delimiter
+ * @param int $ns Namespace constant
+ * @return string The normalised title as a string.
+ */
+ public static function title( $message, $code, $ns = NS_MEDIAWIKI ) {
+ // Cache some amount of titles for speed.
+ static $cache = [];
+ $key = $ns . ':' . $message;
+
+ if ( !isset( $cache[$key] ) ) {
+ $cache[$key] = Title::capitalize( $message, $ns );
+ }
+
+ if ( $code ) {
+ return $cache[$key] . '/' . $code;
+ } else {
+ return $cache[$key];
+ }
+ }
+
+ /**
+ * Splits page name into message key and language code.
+ * @param string $text
+ * @return array ( string, string ) Key and language code.
+ * @todo Handle names without slash.
+ */
+ public static function figureMessage( $text ) {
+ $pos = strrpos( $text, '/' );
+ $code = substr( $text, $pos + 1 );
+ $key = substr( $text, 0, $pos );
+
+ return [ $key, $code ];
+ }
+
+ /**
+ * Loads page content *without* side effects.
+ * @param string $key Message key.
+ * @param string $language Language code.
+ * @param int $namespace Namespace number.
+ * @return string|null The contents or null.
+ */
+ public static function getMessageContent( $key, $language, $namespace = NS_MEDIAWIKI ) {
+ $title = self::title( $key, $language, $namespace );
+ $data = self::getContents( [ $title ], $namespace );
+
+ return $data[$title][0] ?? null;
+ }
+
+ /**
+ * Fetches contents for pagenames in given namespace without side effects.
+ *
+ * @param string|string[] $titles Database page names.
+ * @param int $namespace The number of the namespace.
+ * @return array ( string => array ( string, string ) ) Tuples of page
+ * text and last author indexed by page name.
+ */
+ public static function getContents( $titles, $namespace ) {
+ $dbr = wfGetDB( DB_REPLICA );
+ $revStore = MediaWikiServices::getInstance()->getRevisionStore();
+ $titleContents = [];
+
+ $query = $revStore->getQueryInfo( [ 'page', 'user' ] );
+ $rows = $dbr->select(
+ $query['tables'],
+ $query['fields'],
+ [
+ 'page_namespace' => $namespace,
+ 'page_title' => $titles,
+ 'page_latest=rev_id',
+ ],
+ __METHOD__,
+ [],
+ $query['joins']
+ );
+
+ $revisions = $revStore->newRevisionsFromBatch( $rows, [
+ 'slots' => true,
+ 'content' => true
+ ] )->getValue();
+
+ foreach ( $rows as $row ) {
+ /** @var RevisionRecord|null $rev */
+ $rev = $revisions[$row->rev_id];
+ if ( $rev ) {
+ /** @var TextContent $content */
+ $content = $rev->getContent( SlotRecord::MAIN );
+ if ( $content ) {
+ $titleContents[$row->page_title] = [
+ $content->getText(),
+ $row->rev_user_text
+ ];
+ }
+ }
+ }
+
+ $rows->free();
+
+ return $titleContents;
+ }
+
+ /**
+ * Returns the content for a given title and adds the fuzzy tag if requested.
+ * @param Title $title
+ * @param bool $addFuzzy Add the fuzzy tag if appropriate.
+ * @return string|null
+ */
+ public static function getContentForTitle( Title $title, $addFuzzy = false ): ?string {
+ $store = MediaWikiServices::getInstance()->getRevisionStore();
+ $revision = $store->getRevisionByTitle( $title );
+
+ if ( $revision === null ) {
+ return null;
+ }
+
+ $content = $revision->getContent( SlotRecord::MAIN );
+ $wiki = ( $content instanceof TextContent ) ? $content->getText() : null;
+
+ // Either unexpected content type, or the revision content is hidden
+ if ( $wiki === null ) {
+ return null;
+ }
+
+ if ( $addFuzzy ) {
+ $handle = new MessageHandle( $title );
+ if ( $handle->isFuzzy() ) {
+ $wiki = TRANSLATE_FUZZY . str_replace( TRANSLATE_FUZZY, '', $wiki );
+ }
+ }
+
+ return $wiki;
+ }
+
+ /**
+ * Fetches recent changes for titles in given namespaces
+ *
+ * @param int $hours Number of hours.
+ * @param bool $bots Should bot edits be included.
+ * @param null|int[] $ns List of namespace IDs.
+ * @param string[] $extraFields List of extra columns to fetch.
+ * @return array List of recent changes.
+ */
+ public static function translationChanges(
+ $hours = 24, $bots = false, $ns = null, array $extraFields = []
+ ) {
+ global $wgTranslateMessageNamespaces;
+
+ $dbr = wfGetDB( DB_REPLICA );
+
+ $hours = (int)$hours;
+ $cutoff_unixtime = time() - ( $hours * 3600 );
+ $cutoff = $dbr->timestamp( $cutoff_unixtime );
+
+ $conds = [
+ 'rc_timestamp >= ' . $dbr->addQuotes( $cutoff ),
+ 'rc_namespace' => $ns ?: $wgTranslateMessageNamespaces,
+ ];
+ if ( $bots ) {
+ $conds['rc_bot'] = 0;
+ }
+
+ $res = $dbr->select(
+ [ 'recentchanges', 'actor' ],
+ array_merge( [
+ 'rc_namespace', 'rc_title', 'rc_timestamp',
+ 'rc_user_text' => 'actor_name',
+ ], $extraFields ),
+ $conds,
+ __METHOD__,
+ [],
+ [ 'actor' => [ 'JOIN', 'actor_id=rc_actor' ] ]
+ );
+ $rows = iterator_to_array( $res );
+
+ // Calculate 'lang', then sort by it and rc_timestamp
+ foreach ( $rows as &$row ) {
+ $pos = strrpos( $row->rc_title, '/' );
+ $row->lang = $pos === false ? $row->rc_title : substr( $row->rc_title, $pos + 1 );
+ }
+ unset( $row );
+
+ usort( $rows, static function ( $a, $b ) {
+ $x = strcmp( $a->lang, $b->lang );
+ if ( !$x ) {
+ // descending order
+ $x = strcmp(
+ wfTimestamp( TS_MW, $b->rc_timestamp ),
+ wfTimestamp( TS_MW, $a->rc_timestamp )
+ );
+ }
+ return $x;
+ } );
+
+ return $rows;
+ }
+
+ /* Some other helpers for output */
+
+ /**
+ * Returns a localised language name.
+ * @param string $code Language code.
+ * @param null|string $language Language code of the language that the name should be in.
+ * @return string Best-effort localisation of wanted language name.
+ */
+ public static function getLanguageName( $code, $language = 'en' ) {
+ $languages = self::getLanguageNames( $language );
+ return $languages[$code] ?? $code;
+ }
+
+ /**
+ * Returns a language selector.
+ * @param string $language Language code of the language the names should be localised to.
+ * @param string $selectedId The language code that is selected by default.
+ * @return string
+ */
+ public static function languageSelector( $language, $selectedId ) {
+ $selector = self::getLanguageSelector( $language );
+ $selector->setDefault( $selectedId );
+ $selector->setAttribute( 'id', 'language' );
+ $selector->setAttribute( 'name', 'language' );
+
+ return $selector->getHTML();
+ }
+
+ /**
+ * Standard language selector in Translate extension.
+ * @param string $language Language code of the language the names should be localised to.
+ * @param bool $labelOption
+ * @return XmlSelect
+ */
+ public static function getLanguageSelector( $language, $labelOption = false ) {
+ $languages = self::getLanguageNames( $language );
+ ksort( $languages );
+
+ $selector = new XmlSelect();
+ if ( $labelOption !== false ) {
+ $selector->addOption( $labelOption, '-' );
+ }
+
+ foreach ( $languages as $code => $name ) {
+ $selector->addOption( "$code - $name", $code );
+ }
+
+ return $selector;
+ }
+
+ /**
+ * Get translated language names for the languages generally supported for
+ * translation in the current wiki. Message groups can have further
+ * exclusions.
+ * @param null|string $code
+ * @return array ( language code => language name )
+ */
+ public static function getLanguageNames( $code ) {
+ $languageNames = MediaWikiServices::getInstance()->getLanguageNameUtils()->getLanguageNames( $code );
+
+ $deprecatedCodes = LanguageCode::getDeprecatedCodeMapping();
+ foreach ( array_keys( $deprecatedCodes ) as $deprecatedCode ) {
+ unset( $languageNames[ $deprecatedCode ] );
+ }
+
+ Hooks::run( 'TranslateSupportedLanguages', [ &$languageNames, $code ] );
+
+ return $languageNames;
+ }
+
+ /**
+ * Returns the primary group message belongs to.
+ * @param int $namespace
+ * @param string $key
+ * @return string|null Group id or null.
+ */
+ public static function messageKeyToGroup( $namespace, $key ) {
+ $groups = self::messageKeyToGroups( $namespace, $key );
+
+ return count( $groups ) ? $groups[0] : null;
+ }
+
+ /**
+ * Returns the all the groups message belongs to.
+ * @param int $namespace
+ * @param string $key
+ * @return string[] Possibly empty list of group ids.
+ */
+ public static function messageKeyToGroups( $namespace, $key ) {
+ $mi = MessageIndex::singleton()->retrieve();
+ $normkey = self::normaliseKey( $namespace, $key );
+
+ if ( isset( $mi[$normkey] ) ) {
+ return (array)$mi[$normkey];
+ } else {
+ return [];
+ }
+ }
+
+ /**
+ * Converts page name and namespace to message index format.
+ * @param int $namespace
+ * @param string $key
+ * @return string
+ */
+ public static function normaliseKey( $namespace, $key ) {
+ $key = lcfirst( $key );
+
+ return strtr( "$namespace:$key", ' ', '_' );
+ }
+
+ /**
+ * Constructs a fieldset with contents.
+ * @param string $legend Raw html.
+ * @param string $contents Raw html.
+ * @param array $attributes Html attributes for the fieldset.
+ * @return string Html.
+ */
+ public static function fieldset( $legend, $contents, array $attributes = [] ) {
+ return Xml::openElement( 'fieldset', $attributes ) .
+ Xml::tags( 'legend', null, $legend ) . $contents .
+ Xml::closeElement( 'fieldset' );
+ }
+
+ /**
+ * Escapes the message, and does some mangling to whitespace, so that it is
+ * preserved when outputted as-is to html page. Line feeds are converted to
+ * \<br /> and occurrences of leading and trailing and multiple consecutive
+ * spaces to non-breaking spaces.
+ *
+ * This is also implemented in JavaScript in ext.translate.quickedit.
+ *
+ * @param string $message Plain text string.
+ * @return string Text string that is ready for outputting.
+ */
+ public static function convertWhiteSpaceToHTML( $message ) {
+ $msg = htmlspecialchars( $message );
+ $msg = preg_replace( '/^ /m', '&#160;', $msg );
+ $msg = preg_replace( '/ $/m', '&#160;', $msg );
+ $msg = preg_replace( '/ /', '&#160; ', $msg );
+ $msg = str_replace( "\n", '<br />', $msg );
+
+ return $msg;
+ }
+
+ /**
+ * Construct the web address to given asset.
+ * @param string $path Path to the resource relative to extensions root directory.
+ * @return string Full or partial web path.
+ */
+ public static function assetPath( $path ) {
+ global $wgExtensionAssetsPath;
+ return "$wgExtensionAssetsPath/Translate/$path";
+ }
+
+ /**
+ * Gets the path for cache files
+ * @param string $filename
+ * @return string Full path.
+ * @throws MWException If cache directory is not configured.
+ */
+ public static function cacheFile( $filename ) {
+ global $wgTranslateCacheDirectory, $wgCacheDirectory;
+
+ if ( $wgTranslateCacheDirectory !== false ) {
+ $dir = $wgTranslateCacheDirectory;
+ } elseif ( $wgCacheDirectory !== false ) {
+ $dir = $wgCacheDirectory;
+ } else {
+ throw new MWException( "\$wgCacheDirectory must be configured" );
+ }
+
+ return "$dir/$filename";
+ }
+
+ /**
+ * Returns a random string that can be used as placeholder in strings.
+ * @return string
+ * @since 2012-07-31
+ */
+ public static function getPlaceholder() {
+ static $i = 0;
+
+ return "\x7fUNIQ" . dechex( mt_rand( 0, 0x7fffffff ) ) .
+ dechex( mt_rand( 0, 0x7fffffff ) ) . '-' . $i++;
+ }
+
+ /**
+ * Get URLs for icons if available.
+ * @param MessageGroup $g
+ * @param int $size Length of the edge of a bounding box to fit the icon.
+ * @return null|array
+ * @since 2013-04-01
+ */
+ public static function getIcon( MessageGroup $g, $size ) {
+ $icon = $g->getIcon();
+ if ( substr( $icon, 0, 7 ) !== 'wiki://' ) {
+ return null;
+ }
+
+ $formats = [];
+
+ $filename = substr( $icon, 7 );
+ $file = MediaWikiServices::getInstance()->getRepoGroup()->findFile( $filename );
+ if ( !$file ) {
+ wfWarn( "Unknown message group icon file $icon" );
+
+ return null;
+ }
+
+ if ( $file->isVectorized() ) {
+ $formats['vector'] = $file->getFullUrl();
+ }
+
+ $formats['raster'] = $file->createThumb( $size, $size );
+
+ return $formats;
+ }
+
+ /**
+ * Get a DB handle suitable for read and read-for-write cases
+ *
+ * @return \Wikimedia\Rdbms\IDatabase Primary for HTTP POST, CLI, DB already changed;
+ * replica otherwise
+ */
+ public static function getSafeReadDB() {
+ $lb = MediaWikiServices::getInstance()->getDBLoadBalancer();
+ $index = self::shouldReadFromPrimary() ? DB_PRIMARY : DB_REPLICA;
+
+ return $lb->getConnectionRef( $index );
+ }
+
+ /**
+ * Check whether primary should be used for reads to avoid reading stale data.
+ *
+ * @return bool
+ */
+ public static function shouldReadFromPrimary() {
+ $lb = MediaWikiServices::getInstance()->getDBLoadBalancer();
+ // Parsing APIs need POST for payloads but are read-only, so avoid spamming
+ // the primary then. No good way to check this at the moment...
+ if ( PageTranslationHooks::$renderingContext ) {
+ return false;
+ }
+
+ return PHP_SAPI === 'cli' ||
+ RequestContext::getMain()->getRequest()->wasPosted() ||
+ $lb->hasOrMadeRecentPrimaryChanges();
+ }
+
+ /**
+ * Get an URL that points to an editor for this message handle.
+ * @param MessageHandle $handle
+ * @return string Domain relative URL
+ * @since 2017.10
+ */
+ public static function getEditorUrl( MessageHandle $handle ) {
+ if ( !$handle->isValid() ) {
+ return $handle->getTitle()->getLocalURL( [ 'action' => 'edit' ] );
+ }
+
+ $title = MediaWikiServices::getInstance()
+ ->getSpecialPageFactory()->getPage( 'Translate' )->getPageTitle();
+ return $title->getFullURL( [
+ 'showMessage' => $handle->getInternalKey(),
+ 'group' => $handle->getGroup()->getId(),
+ 'language' => $handle->getCode(),
+ ] );
+ }
+
+ /**
+ * Serialize the given value
+ * @param mixed $value
+ * @return string
+ */
+ public static function serialize( $value ) {
+ return serialize( $value );
+ }
+
+ /**
+ * Deserialize the given string
+ * @param string $str
+ * @param array|null $opts
+ * @return mixed
+ */
+ public static function deserialize( $str, $opts = [ 'allowed_classes' => false ] ) {
+ return unserialize( $str, $opts );
+ }
+
+ /**
+ * @return string
+ * @since 2020.05
+ */
+ public static function getVersion(): string {
+ // Avoid parsing JSON multiple time per request
+ static $version = null;
+ if ( $version === null ) {
+ $version = json_decode( file_get_contents( __DIR__ . '/extension.json' ) )->version;
+ }
+ return $version;
+ }
+
+ /**
+ * Checks if the namespace that the title belongs to allows subpages
+ *
+ * @internal - For internal use only
+ * @param Title $title
+ * @return bool
+ */
+ public static function allowsSubpages( Title $title ): bool {
+ $mwInstance = MediaWikiServices::getInstance();
+ $namespaceInfo = $mwInstance->getNamespaceInfo();
+ return $namespaceInfo->hasSubpages( $title->getNamespace() );
+ }
+
+ /**
+ * Checks whether a language code is supported for translation at the wiki level.
+ * Note that it is possible that message groups define other language codes which
+ * are not supported by the wiki, in which case this function would return false
+ * for those.
+ *
+ * @param string $code
+ * @return bool
+ */
+ public static function isSupportedLanguageCode( string $code ): bool {
+ $all = self::getLanguageNames( null );
+ return isset( $all[ $code ] );
+ }
+
+ public static function getTextFromTextContent( ?Content $content ): string {
+ if ( !$content ) {
+ throw new UnexpectedValueException( 'Expected $content to be TextContent, got null instead.' );
+ }
+
+ if ( $content instanceof TextContent ) {
+ return $content->getText();
+ }
+
+ throw new UnexpectedValueException( 'Expected $content to be TextContent, but got ' . get_class( $content ) );
+ }
+
+ /**
+ * Returns all translations of a given message.
+ * @param MessageHandle $handle Language code is ignored.
+ * @return array ( string => array ( string, string ) ) Tuples of page
+ * text and last author indexed by page name.
+ * @since 2012-12-18
+ */
+ public static function getTranslations( MessageHandle $handle ): array {
+ $namespace = $handle->getTitle()->getNamespace();
+ $base = $handle->getKey();
+
+ $dbr = MediaWikiServices::getInstance()
+ ->getDBLoadBalancer()
+ ->getConnection( DB_REPLICA );
+
+ $titles = $dbr->newSelectQueryBuilder()
+ ->select( 'page_title' )
+ ->from( 'page' )
+ ->where( [
+ 'page_namespace' => $namespace,
+ 'page_title ' . $dbr->buildLike( "$base/", $dbr->anyString() ),
+ ] )
+ ->caller( __METHOD__ )
+ ->orderBy( 'page_title' )
+ ->fetchFieldValues();
+
+ if ( $titles === [] ) {
+ return [];
+ }
+
+ $pageInfo = self::getContents( $titles, $namespace );
+
+ return $pageInfo;
+ }
+}
diff --git a/Translate/composer.json b/Translate/composer.json
new file mode 100644
index 00000000..4f5641a8
--- /dev/null
+++ b/Translate/composer.json
@@ -0,0 +1,89 @@
+{
+ "name": "mediawiki/translate",
+ "type": "mediawiki-extension",
+ "description": "The only standard solution to translate any kind of text with an avant-garde web interface within MediaWiki, including your documentation and software",
+ "keywords": [
+ "MediaWiki",
+ "Translation",
+ "l10n",
+ "i18n",
+ "g11n",
+ "m17n",
+ "localization",
+ "internationalization",
+ "translatewiki.net"
+ ],
+ "homepage": "https://www.mediawiki.org/wiki/Extension:Translate",
+ "license": "GPL-2.0-or-later",
+ "authors": [
+ {
+ "name": "Niklas Laxström",
+ "email": "niklas.laxstrom@gmail.com",
+ "role": "Lead nitpicker"
+ },
+ {
+ "name": "Siebrand Mazeland",
+ "email": "siebrand@kitano.nl",
+ "role": "Ex-maintainer, ex-product manager"
+ },
+ {
+ "name": "Santhosh Thottingal",
+ "email": "santhosh.thottingal@gmail.com",
+ "role": "Ex-developer"
+ },
+ {
+ "name": "Amir E. Aharoni",
+ "email": "amir.aharoni@mail.huji.ac.il",
+ "role": "Ex-developer"
+ },
+ {
+ "name": "Abijeet Patro",
+ "email": "abijeetpatro@gmail.com",
+ "role": "Maintainer"
+ }
+ ],
+ "support": {
+ "issues": "https://phabricator.wikimedia.org/tag/mediawiki-extensions-translate/",
+ "irc": "irc://irc.libera.chat/wikimedia-language",
+ "forum": "https://www.mediawiki.org/wiki/Extension_talk:Translate",
+ "wiki": "https://www.mediawiki.org/wiki/Extension:Translate",
+ "docs": "https://www.mediawiki.org/wiki/Help:Extension:Translate"
+ },
+ "require": {
+ "php": ">=7.2",
+ "composer/installers": ">=1.0.1",
+ "mustangostang/spyc": "^0.6.3"
+ },
+ "require-dev": {
+ "mediawiki/mediawiki-codesniffer": "39.0.0",
+ "mediawiki/mediawiki-phan-config": "0.12.0",
+ "mediawiki/minus-x": "1.1.1",
+ "php-parallel-lint/php-console-highlighter": "1.0.0",
+ "php-parallel-lint/php-parallel-lint": "1.3.2",
+ "slevomat/coding-standard": "^6.4"
+ },
+ "suggest": {
+ "mediawiki/babel": "Users can easily indicate their language proficiency on their user page",
+ "mediawiki/translation-notifications": "Manage communication with translators",
+ "romaricdrigon/metayaml": "If you want to validate message group configurations"
+ },
+ "scripts": {
+ "fix": [
+ "minus-x fix .",
+ "phpcbf"
+ ],
+ "test": [
+ "parallel-lint . --exclude vendor --exclude node_modules --no-progress",
+ "@phpcs",
+ "minus-x check ."
+ ],
+ "phan": "phan -d . --long-progress-bar",
+ "phpcs": "phpcs -p -s --cache"
+ },
+ "config": {
+ "allow-plugins": {
+ "composer/installers": true,
+ "dealerdirect/phpcodesniffer-composer-installer": true
+ }
+ }
+}
diff --git a/Translate/data/group-yaml-schema.yaml b/Translate/data/group-yaml-schema.yaml
new file mode 100644
index 00000000..06186b00
--- /dev/null
+++ b/Translate/data/group-yaml-schema.yaml
@@ -0,0 +1,138 @@
+# HOW-TO: https://github.com/romaricdrigon/MetaYaml#how-to-write-a-schema
+root:
+ _type: array
+ _children:
+ BASIC:
+ _type: array
+ _required: true
+ _children:
+ class:
+ _type: text
+ _not_empty: true
+ codeBrowser:
+ _type: text
+ description:
+ _type: text
+ icon:
+ _type: text
+ id:
+ _type: text
+ _not_empty: true
+ label:
+ _type: text
+ _not_empty: true
+ meta:
+ _type: boolean
+ namespace:
+ _type: text
+ sourcelanguage:
+ _type: text
+ _description: defaults to "en"
+ projectPage:
+ _type: text
+ _description: Title of the page that explains the group
+ translatorCategory:
+ _type: text
+ _description: Name of the category for translators of this group
+ support:
+ _type: array
+ _description: Configuration for the ask for more information link
+ _children:
+ url:
+ _type: text
+ page:
+ _type: text
+ params:
+ _type: array
+ _children: []
+ _ignore_extra_keys: true
+ MANGLER:
+ _type: array
+ _children:
+ class:
+ _type: text
+ _not_empty: true
+ INSERTABLES:
+ _type: prototype
+ _prototype:
+ _type: array
+ _children:
+ class:
+ _type: text
+ params:
+ _type: choice
+ _choices:
+ 1:
+ _type: array
+ _children: []
+ _ignore_extra_keys: true
+ 2:
+ _type: text
+ VALIDATORS:
+ _type: prototype
+ _prototype:
+ _type: array
+ _children:
+ id:
+ _type: text
+ _not_empty: true
+ _description: ID of a pre-defined validator. Required if "class" is not specified
+ class:
+ _type: text
+ _not_empty: true
+ _description: Custom validator class. Required if "id" is not specified
+ enforce:
+ _type: boolean
+ insertable:
+ _type: boolean
+ params:
+ _type: choice
+ _choices:
+ 1:
+ _type: array
+ _children: []
+ _ignore_extra_keys: true
+ 2:
+ _type: text
+ keymatch:
+ _type: array
+ _description: 'Specify the message keys for which this validation should be run. *DEPRECATED*: Use "include" instead'
+ _children: []
+ _ignore_extra_keys: true
+ include:
+ _type: array
+ _description: Specify the message keys for which this validation should be run
+ _children: []
+ _ignore_extra_keys: true
+ exclude:
+ _type: array
+ _description: Specify the message keys for which this validation should not be run
+ _children: []
+ _ignore_extra_keys: true
+ TAGS:
+ _type: prototype
+ _prototype:
+ _type: prototype
+ _max_items: 99999 # default is 200, which is too little
+ _prototype:
+ _type: text
+ AUTOLOAD:
+ _type: array
+ _ignore_extra_keys: true
+ _children: []
+ GROUPS:
+ _type: prototype
+ _min_items: 1
+ _prototype:
+ _type: text
+ LANGUAGES:
+ _type: array
+ _children:
+ include:
+ _type: prototype
+ _prototype:
+ _type: text
+ exclude:
+ _type: prototype
+ _prototype:
+ _type: text
diff --git a/Translate/data/plural-cldr.json b/Translate/data/plural-cldr.json
new file mode 100644
index 00000000..5c01af21
--- /dev/null
+++ b/Translate/data/plural-cldr.json
@@ -0,0 +1,884 @@
+{
+ "supplemental": {
+ "version": {
+ "_number": "$Revision: 14885 $",
+ "_unicodeVersion": "12.1.0",
+ "_cldrVersion": "35.1"
+ },
+ "plurals-type-cardinal": {
+ "af": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ak": {
+ "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000",
+ "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "am": {
+ "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04",
+ "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ar": {
+ "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000",
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000",
+ "pluralRule-count-few": "n % 100 = 3..10 @integer 3~10, 103~110, 1003, … @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 103.0, 1003.0, …",
+ "pluralRule-count-many": "n % 100 = 11..99 @integer 11~26, 111, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …",
+ "pluralRule-count-other": " @integer 100~102, 200~202, 300~302, 400~402, 500~502, 600, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ars": {
+ "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000",
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000",
+ "pluralRule-count-few": "n % 100 = 3..10 @integer 3~10, 103~110, 1003, … @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 103.0, 1003.0, …",
+ "pluralRule-count-many": "n % 100 = 11..99 @integer 11~26, 111, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …",
+ "pluralRule-count-other": " @integer 100~102, 200~202, 300~302, 400~402, 500~502, 600, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "as": {
+ "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04",
+ "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "asa": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ast": {
+ "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "az": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "be": {
+ "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …",
+ "pluralRule-count-few": "n % 10 = 2..4 and n % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 2.0, 3.0, 4.0, 22.0, 23.0, 24.0, 32.0, 33.0, 102.0, 1002.0, …",
+ "pluralRule-count-many": "n % 10 = 0 or n % 10 = 5..9 or n % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …",
+ "pluralRule-count-other": " @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …"
+ },
+ "bem": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "bez": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "bg": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "bh": {
+ "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000",
+ "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "bm": {
+ "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "bn": {
+ "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04",
+ "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "bo": {
+ "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "br": {
+ "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11,71,91 @integer 1, 21, 31, 41, 51, 61, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 81.0, 101.0, 1001.0, …",
+ "pluralRule-count-two": "n % 10 = 2 and n % 100 != 12,72,92 @integer 2, 22, 32, 42, 52, 62, 82, 102, 1002, … @decimal 2.0, 22.0, 32.0, 42.0, 52.0, 62.0, 82.0, 102.0, 1002.0, …",
+ "pluralRule-count-few": "n % 10 = 3..4,9 and n % 100 != 10..19,70..79,90..99 @integer 3, 4, 9, 23, 24, 29, 33, 34, 39, 43, 44, 49, 103, 1003, … @decimal 3.0, 4.0, 9.0, 23.0, 24.0, 29.0, 33.0, 34.0, 103.0, 1003.0, …",
+ "pluralRule-count-many": "n != 0 and n % 1000000 = 0 @integer 1000000, … @decimal 1000000.0, 1000000.00, 1000000.000, …",
+ "pluralRule-count-other": " @integer 0, 5~8, 10~20, 100, 1000, 10000, 100000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, …"
+ },
+ "brx": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "bs": {
+ "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …",
+ "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …",
+ "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ca": {
+ "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ce": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ceb": {
+ "pluralRule-count-one": "v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9 @integer 0~3, 5, 7, 8, 10~13, 15, 17, 18, 20, 21, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.3, 0.5, 0.7, 0.8, 1.0~1.3, 1.5, 1.7, 1.8, 2.0, 2.1, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …",
+ "pluralRule-count-other": " @integer 4, 6, 9, 14, 16, 19, 24, 26, 104, 1004, … @decimal 0.4, 0.6, 0.9, 1.4, 1.6, 1.9, 2.4, 2.6, 10.4, 100.4, 1000.4, …"
+ },
+ "cgg": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "chr": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ckb": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "cs": {
+ "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
+ "pluralRule-count-few": "i = 2..4 and v = 0 @integer 2~4",
+ "pluralRule-count-many": "v != 0 @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …",
+ "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …"
+ },
+ "cy": {
+ "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000",
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000",
+ "pluralRule-count-few": "n = 3 @integer 3 @decimal 3.0, 3.00, 3.000, 3.0000",
+ "pluralRule-count-many": "n = 6 @integer 6 @decimal 6.0, 6.00, 6.000, 6.0000",
+ "pluralRule-count-other": " @integer 4, 5, 7~20, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "da": {
+ "pluralRule-count-one": "n = 1 or t != 0 and i = 0,1 @integer 1 @decimal 0.1~1.6",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 2.0~3.4, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "de": {
+ "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "dsb": {
+ "pluralRule-count-one": "v = 0 and i % 100 = 1 or f % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …",
+ "pluralRule-count-two": "v = 0 and i % 100 = 2 or f % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, … @decimal 0.2, 1.2, 2.2, 3.2, 4.2, 5.2, 6.2, 7.2, 10.2, 100.2, 1000.2, …",
+ "pluralRule-count-few": "v = 0 and i % 100 = 3..4 or f % 100 = 3..4 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.3, 0.4, 1.3, 1.4, 2.3, 2.4, 3.3, 3.4, 4.3, 4.4, 5.3, 5.4, 6.3, 6.4, 7.3, 7.4, 10.3, 100.3, 1000.3, …",
+ "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "dv": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "dz": {
+ "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ee": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "el": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "en": {
+ "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "eo": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "es": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "et": {
+ "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "eu": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "fa": {
+ "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04",
+ "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ff": {
+ "pluralRule-count-one": "i = 0,1 @integer 0, 1 @decimal 0.0~1.5",
+ "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "fi": {
+ "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "fil": {
+ "pluralRule-count-one": "v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9 @integer 0~3, 5, 7, 8, 10~13, 15, 17, 18, 20, 21, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.3, 0.5, 0.7, 0.8, 1.0~1.3, 1.5, 1.7, 1.8, 2.0, 2.1, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …",
+ "pluralRule-count-other": " @integer 4, 6, 9, 14, 16, 19, 24, 26, 104, 1004, … @decimal 0.4, 0.6, 0.9, 1.4, 1.6, 1.9, 2.4, 2.6, 10.4, 100.4, 1000.4, …"
+ },
+ "fo": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "fr": {
+ "pluralRule-count-one": "i = 0,1 @integer 0, 1 @decimal 0.0~1.5",
+ "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "fur": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "fy": {
+ "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ga": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000",
+ "pluralRule-count-few": "n = 3..6 @integer 3~6 @decimal 3.0, 4.0, 5.0, 6.0, 3.00, 4.00, 5.00, 6.00, 3.000, 4.000, 5.000, 6.000, 3.0000, 4.0000, 5.0000, 6.0000",
+ "pluralRule-count-many": "n = 7..10 @integer 7~10 @decimal 7.0, 8.0, 9.0, 10.0, 7.00, 8.00, 9.00, 10.00, 7.000, 8.000, 9.000, 10.000, 7.0000, 8.0000, 9.0000, 10.0000",
+ "pluralRule-count-other": " @integer 0, 11~25, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "gd": {
+ "pluralRule-count-one": "n = 1,11 @integer 1, 11 @decimal 1.0, 11.0, 1.00, 11.00, 1.000, 11.000, 1.0000",
+ "pluralRule-count-two": "n = 2,12 @integer 2, 12 @decimal 2.0, 12.0, 2.00, 12.00, 2.000, 12.000, 2.0000",
+ "pluralRule-count-few": "n = 3..10,13..19 @integer 3~10, 13~19 @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 3.00",
+ "pluralRule-count-other": " @integer 0, 20~34, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "gl": {
+ "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "gsw": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "gu": {
+ "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04",
+ "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "guw": {
+ "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000",
+ "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "gv": {
+ "pluralRule-count-one": "v = 0 and i % 10 = 1 @integer 1, 11, 21, 31, 41, 51, 61, 71, 101, 1001, …",
+ "pluralRule-count-two": "v = 0 and i % 10 = 2 @integer 2, 12, 22, 32, 42, 52, 62, 72, 102, 1002, …",
+ "pluralRule-count-few": "v = 0 and i % 100 = 0,20,40,60,80 @integer 0, 20, 40, 60, 80, 100, 120, 140, 1000, 10000, 100000, 1000000, …",
+ "pluralRule-count-many": "v != 0 @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …",
+ "pluralRule-count-other": " @integer 3~10, 13~19, 23, 103, 1003, …"
+ },
+ "ha": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "haw": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "he": {
+ "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
+ "pluralRule-count-two": "i = 2 and v = 0 @integer 2",
+ "pluralRule-count-many": "v = 0 and n != 0..10 and n % 10 = 0 @integer 20, 30, 40, 50, 60, 70, 80, 90, 100, 1000, 10000, 100000, 1000000, …",
+ "pluralRule-count-other": " @integer 0, 3~17, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "hi": {
+ "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04",
+ "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "hr": {
+ "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …",
+ "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …",
+ "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "hsb": {
+ "pluralRule-count-one": "v = 0 and i % 100 = 1 or f % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …",
+ "pluralRule-count-two": "v = 0 and i % 100 = 2 or f % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, … @decimal 0.2, 1.2, 2.2, 3.2, 4.2, 5.2, 6.2, 7.2, 10.2, 100.2, 1000.2, …",
+ "pluralRule-count-few": "v = 0 and i % 100 = 3..4 or f % 100 = 3..4 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.3, 0.4, 1.3, 1.4, 2.3, 2.4, 3.3, 3.4, 4.3, 4.4, 5.3, 5.4, 6.3, 6.4, 7.3, 7.4, 10.3, 100.3, 1000.3, …",
+ "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "hu": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "hy": {
+ "pluralRule-count-one": "i = 0,1 @integer 0, 1 @decimal 0.0~1.5",
+ "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ia": {
+ "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "id": {
+ "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ig": {
+ "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ii": {
+ "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "in": {
+ "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "io": {
+ "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "is": {
+ "pluralRule-count-one": "t = 0 and i % 10 = 1 and i % 100 != 11 or t != 0 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1~1.6, 10.1, 100.1, 1000.1, …",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "it": {
+ "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "iu": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000",
+ "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "iw": {
+ "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
+ "pluralRule-count-two": "i = 2 and v = 0 @integer 2",
+ "pluralRule-count-many": "v = 0 and n != 0..10 and n % 10 = 0 @integer 20, 30, 40, 50, 60, 70, 80, 90, 100, 1000, 10000, 100000, 1000000, …",
+ "pluralRule-count-other": " @integer 0, 3~17, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ja": {
+ "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "jbo": {
+ "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "jgo": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ji": {
+ "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "jmc": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "jv": {
+ "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "jw": {
+ "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ka": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "kab": {
+ "pluralRule-count-one": "i = 0,1 @integer 0, 1 @decimal 0.0~1.5",
+ "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "kaj": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "kcg": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "kde": {
+ "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "kea": {
+ "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "kk": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "kkj": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "kl": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "km": {
+ "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "kn": {
+ "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04",
+ "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ko": {
+ "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ks": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ksb": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ksh": {
+ "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000",
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ku": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "kw": {
+ "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000",
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-two": "n % 100 = 2,22,42,62,82 or n%1000 = 0 and n%100000=1000..20000,40000,60000,80000 or n!=0 and n%1000000=100000@integer 2, 22, 42, 62, 82, 102, 122, 142, 1002, … @decimal 2.0, 22.0, 42.0, 62.0, 82.0, 102.0, 122.0, 142.0, 1002.0, …",
+ "pluralRule-count-few": "n % 100 = 3,23,43,63,83 @integer 3, 23, 43, 63, 83, 103, 123, 143, 1003, … @decimal 3.0, 23.0, 43.0, 63.0, 83.0, 103.0, 123.0, 143.0, 1003.0, …",
+ "pluralRule-count-many": "n != 1 and n % 100 = 1,21,41,61,81 @integer 21, 41, 61, 81, 101, 121, 141, 161, 1001, … @decimal 21.0, 41.0, 61.0, 81.0, 101.0, 121.0, 141.0, 161.0, 1001.0, …",
+ "pluralRule-count-other": " @integer 4~19, 100, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ky": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "lag": {
+ "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000",
+ "pluralRule-count-one": "i = 0,1 and n != 0 @integer 1 @decimal 0.1~1.6",
+ "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "lb": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "lg": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "lkt": {
+ "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ln": {
+ "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000",
+ "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "lo": {
+ "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "lt": {
+ "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11..19 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …",
+ "pluralRule-count-few": "n % 10 = 2..9 and n % 100 != 11..19 @integer 2~9, 22~29, 102, 1002, … @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 22.0, 102.0, 1002.0, …",
+ "pluralRule-count-many": "f != 0 @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …",
+ "pluralRule-count-other": " @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "lv": {
+ "pluralRule-count-zero": "n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19 @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …",
+ "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.0, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …",
+ "pluralRule-count-other": " @integer 2~9, 22~29, 102, 1002, … @decimal 0.2~0.9, 1.2~1.9, 10.2, 100.2, 1000.2, …"
+ },
+ "mas": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "mg": {
+ "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000",
+ "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "mgo": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "mk": {
+ "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.2~1.0, 1.2~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ml": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "mn": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "mo": {
+ "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
+ "pluralRule-count-few": "v != 0 or n = 0 or n % 100 = 2..19 @integer 0, 2~16, 102, 1002, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …",
+ "pluralRule-count-other": " @integer 20~35, 100, 1000, 10000, 100000, 1000000, …"
+ },
+ "mr": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ms": {
+ "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "mt": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-few": "n = 0 or n % 100 = 2..10 @integer 0, 2~10, 102~107, 1002, … @decimal 0.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0, 102.0, 1002.0, …",
+ "pluralRule-count-many": "n % 100 = 11..19 @integer 11~19, 111~117, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …",
+ "pluralRule-count-other": " @integer 20~35, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "my": {
+ "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "nah": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "naq": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000",
+ "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "nb": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "nd": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ne": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "nl": {
+ "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "nn": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "nnh": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "no": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "nqo": {
+ "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "nr": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "nso": {
+ "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000",
+ "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ny": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "nyn": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "om": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "or": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "os": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "pa": {
+ "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000",
+ "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "pap": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "pl": {
+ "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
+ "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …",
+ "pluralRule-count-many": "v = 0 and i != 1 and i % 10 = 0..1 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 12..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …",
+ "pluralRule-count-other": " @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "prg": {
+ "pluralRule-count-zero": "n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19 @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …",
+ "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.0, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …",
+ "pluralRule-count-other": " @integer 2~9, 22~29, 102, 1002, … @decimal 0.2~0.9, 1.2~1.9, 10.2, 100.2, 1000.2, …"
+ },
+ "ps": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "pt": {
+ "pluralRule-count-one": "i = 0..1 @integer 0, 1 @decimal 0.0~1.5",
+ "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "pt-PT": {
+ "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "rm": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ro": {
+ "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
+ "pluralRule-count-few": "v != 0 or n = 0 or n % 100 = 2..19 @integer 0, 2~16, 102, 1002, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …",
+ "pluralRule-count-other": " @integer 20~35, 100, 1000, 10000, 100000, 1000000, …"
+ },
+ "rof": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "root": {
+ "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ru": {
+ "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, …",
+ "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …",
+ "pluralRule-count-many": "v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …",
+ "pluralRule-count-other": " @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "rwk": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "sah": {
+ "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "saq": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "sc": {
+ "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "scn": {
+ "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "sd": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "sdh": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "se": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000",
+ "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "seh": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ses": {
+ "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "sg": {
+ "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "sh": {
+ "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …",
+ "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …",
+ "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "shi": {
+ "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04",
+ "pluralRule-count-few": "n = 2..10 @integer 2~10 @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 2.00, 3.00, 4.00, 5.00, 6.00, 7.00, 8.00",
+ "pluralRule-count-other": " @integer 11~26, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~1.9, 2.1~2.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "si": {
+ "pluralRule-count-one": "n = 0,1 or i = 0 and f = 1 @integer 0, 1 @decimal 0.0, 0.1, 1.0, 0.00, 0.01, 1.00, 0.000, 0.001, 1.000, 0.0000, 0.0001, 1.0000",
+ "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.2~0.9, 1.1~1.8, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "sk": {
+ "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
+ "pluralRule-count-few": "i = 2..4 and v = 0 @integer 2~4",
+ "pluralRule-count-many": "v != 0 @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …",
+ "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …"
+ },
+ "sl": {
+ "pluralRule-count-one": "v = 0 and i % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, …",
+ "pluralRule-count-two": "v = 0 and i % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, …",
+ "pluralRule-count-few": "v = 0 and i % 100 = 3..4 or v != 0 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …",
+ "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …"
+ },
+ "sma": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000",
+ "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "smi": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000",
+ "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "smj": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000",
+ "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "smn": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000",
+ "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "sms": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000",
+ "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "sn": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "so": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "sq": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "sr": {
+ "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …",
+ "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …",
+ "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ss": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ssy": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "st": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "sv": {
+ "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "sw": {
+ "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "syr": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ta": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "te": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "teo": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "th": {
+ "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ti": {
+ "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000",
+ "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "tig": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "tk": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "tl": {
+ "pluralRule-count-one": "v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9 @integer 0~3, 5, 7, 8, 10~13, 15, 17, 18, 20, 21, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.3, 0.5, 0.7, 0.8, 1.0~1.3, 1.5, 1.7, 1.8, 2.0, 2.1, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …",
+ "pluralRule-count-other": " @integer 4, 6, 9, 14, 16, 19, 24, 26, 104, 1004, … @decimal 0.4, 0.6, 0.9, 1.4, 1.6, 1.9, 2.4, 2.6, 10.4, 100.4, 1000.4, …"
+ },
+ "tn": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "to": {
+ "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "tr": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ts": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "tzm": {
+ "pluralRule-count-one": "n = 0..1 or n = 11..99 @integer 0, 1, 11~24 @decimal 0.0, 1.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0",
+ "pluralRule-count-other": " @integer 2~10, 100~106, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ug": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "uk": {
+ "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, …",
+ "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …",
+ "pluralRule-count-many": "v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …",
+ "pluralRule-count-other": " @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ur": {
+ "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "uz": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "ve": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "vi": {
+ "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "vo": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "vun": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "wa": {
+ "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000",
+ "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "wae": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "wo": {
+ "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "xh": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "xog": {
+ "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "yi": {
+ "pluralRule-count-one": "i = 1 and v = 0 @integer 1",
+ "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "yo": {
+ "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "yue": {
+ "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "zh": {
+ "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ },
+ "zu": {
+ "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04",
+ "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"
+ }
+ }
+ }
+}
diff --git a/Translate/data/plural-gettext.txt b/Translate/data/plural-gettext.txt
new file mode 100644
index 00000000..e3800aea
--- /dev/null
+++ b/Translate/data/plural-gettext.txt
@@ -0,0 +1,131 @@
+ach nplurals=2; plural=(n > 1);
+af nplurals=2; plural=(n != 1);
+ak nplurals=2; plural=(n > 1);
+am nplurals=2; plural=(n > 1);
+ar nplurals=6; plural=(n == 0) ? 0 : ( (n == 1) ? 1 : ( (n == 2) ? 2 : ( (n%100 >= 3 && n%100 <= 10) ? 3 : ( (n%100 >= 11 && n%100 <= 99) ? 4 : 5 ) ) ) );
+arn nplurals=2; plural=(n > 1);
+ast nplurals=2; plural=(n != 1);
+ay nplurals=1; plural=0;
+az nplurals=2; plural=(n != 1);
+be nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= 2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );
+bg nplurals=2; plural=(n != 1);
+bn nplurals=2; plural=(n != 1);
+bo nplurals=1; plural=0;
+br nplurals=2; plural=(n > 1);
+bs nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= 2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );
+ca nplurals=2; plural=(n != 1);
+cgg nplurals=1; plural=0;
+cs nplurals=3; plural=(n == 1) ? 0 : ( (n >= 2 && n <= 4) ? 1 : 2 );
+csb nplurals=3; plural=(n == 1) ? 0 : ( (n%10 >= 2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );
+cy nplurals=6; plural=(n == 0) ? 0 : ( (n == 1) ? 1 : ( (n == 2) ? 2 : ( (n == 3) ? 3 : ( (n == 6) ? 4 : 5 ) ) ) );
+da nplurals=2; plural=(n != 1);
+de nplurals=2; plural=(n != 1);
+dz nplurals=1; plural=0;
+el nplurals=2; plural=(n != 1);
+en nplurals=2; plural=(n != 1);
+en-gb nplurals=2; plural=(n != 1);
+eo nplurals=2; plural=(n != 1);
+es nplurals=2; plural=(n != 1);
+et nplurals=2; plural=(n != 1);
+eu nplurals=2; plural=(n != 1);
+fa nplurals=1; plural=0;
+fi nplurals=2; plural=(n != 1);
+fil nplurals=2; plural=(n > 1);
+fo nplurals=2; plural=(n != 1);
+fr nplurals=2; plural=(n > 1);
+fur nplurals=2; plural=(n != 1);
+fy nplurals=2; plural=(n != 1);
+ga nplurals=5; plural=(n == 1) ? 0 : ( (n == 2) ? 1 : ( (n < 7) ? 2 : ( (n < 11) ? 3 : 4 ) ) );
+gd nplurals=4; plural=(n == 1 || n == 11) ? 0 : (n == 2 || n == 12) ? 1 : (n > 2 && n < 20) ? 2 : 3;
+gl nplurals=2; plural=(n != 1);
+gu nplurals=2; plural=(n != 1);
+gun nplurals=2; plural=(n > 1);
+ha nplurals=2; plural=(n != 1);
+he nplurals=2; plural=(n != 1);
+hi nplurals=2; plural=(n != 1);
+hr nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= 2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );
+hu nplurals=2; plural=(n != 1);
+hy nplurals=2; plural=(n != 1);
+ia nplurals=2; plural=(n != 1);
+id nplurals=1; plural=0;
+is nplurals=2; plural=(n != 1);
+it nplurals=2; plural=(n != 1);
+ja nplurals=1; plural=0;
+jbo nplurals=1; plural=0;
+jv nplurals=2; plural=(n != 0);
+ka nplurals=1; plural=0;
+kk nplurals=1; plural=0;
+km nplurals=1; plural=0;
+kn nplurals=2; plural=(n != 1);
+ko nplurals=1; plural=0;
+ku nplurals=2; plural=(n != 1);
+kw nplurals=4; plural=(n == 1) ? 0 : ( (n == 2) ? 1 : ( (n == 3) ? 2 : 3 ) );
+ky nplurals=1; plural=0;
+lb nplurals=2; plural=(n != 1);
+ln nplurals=2; plural=(n > 1);
+lo nplurals=1; plural=0;
+lt nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= 2 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );
+lv nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n != 0) ? 1 : 2 );
+mai nplurals=2; plural=(n != 1);
+mfe nplurals=2; plural=(n > 1);
+mg nplurals=2; plural=(n > 1);
+mi nplurals=2; plural=(n > 1);
+mk nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;
+ml nplurals=2; plural=(n != 1);
+mn nplurals=2; plural=(n != 1);
+mnk nplurals=3; plural=(n == 0) ? 0 : n == 1 ? 1 : 2;
+mr nplurals=2; plural=(n != 1);
+ms nplurals=1; plural=0;
+mt nplurals=4; plural=(n == 1) ? 0 : ( (n == 0 || (n%100 > 1 && n%100 < 11)) ? 1 : ( (n%100 > 10 && n%100 < 20) ? 2 : 3 ) );
+nah nplurals=2; plural=(n != 1);
+nap nplurals=2; plural=(n != 1);
+nb nplurals=2; plural=(n != 1);
+ne nplurals=2; plural=(n != 1);
+nl nplurals=2; plural=(n != 1);
+nn nplurals=2; plural=(n != 1);
+no nplurals=2; plural=(n != 1);
+nso nplurals=2; plural=(n > 1);
+oc nplurals=2; plural=(n > 1);
+or nplurals=2; plural=(n != 1);
+pa nplurals=2; plural=(n != 1);
+pap nplurals=2; plural=(n != 1);
+pl nplurals=3; plural=(n == 1) ? 0 : ( (n%10 >= 2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );
+pms nplurals=2; plural=(n != 1);
+ps nplurals=2; plural=(n != 1);
+pt nplurals=2; plural=(n != 1);
+pt-br nplurals=2; plural=(n > 1);
+rm nplurals=2; plural=(n != 1);
+ro nplurals=3; plural=(n == 1) ? 0 : ( (n == 0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2 );
+ru nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= 2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );
+sco nplurals=2; plural=(n != 1);
+si nplurals=2; plural=(n != 1);
+sk nplurals=3; plural=(n == 1) ? 0 : ( (n >= 2 && n <= 4) ? 1 : 2 );
+sl nplurals=4; plural=(n%100 == 1) ? 0 : ( (n%100 == 2) ? 1 : ( (n%100 == 3 || n%100 == 4) ? 2 : 3 ) );
+so nplurals=2; plural=(n != 1);
+sq nplurals=2; plural=(n != 1);
+sr nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= 2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );
+sr-ec nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= 2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );
+sr-el nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= 2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );
+su nplurals=1; plural=0;
+sv nplurals=2; plural=(n != 1);
+sw nplurals=2; plural=(n != 1);
+ta nplurals=2; plural=(n != 1);
+te nplurals=2; plural=(n != 1);
+tg nplurals=2; plural=(n != 1);
+th nplurals=1; plural=0;
+ti nplurals=2; plural=(n > 1);
+tk nplurals=2; plural=(n != 1);
+tr nplurals=1; plural=0;
+tt nplurals=1; plural=0;
+ug nplurals=1; plural=0;
+uk nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= 2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );
+ur nplurals=2; plural=(n != 1);
+uz nplurals=1; plural=0;
+vi nplurals=1; plural=0;
+wa nplurals=2; plural=(n > 1);
+wo nplurals=1; plural=0;
+yo nplurals=2; plural=(n != 1);
+zh nplurals=1; plural=0;
+zh-hans nplurals=1; plural=0;
+zh-hant nplurals=1; plural=0;
+zh-tw nplurals=1; plural=0;
diff --git a/Translate/data/xliff-core-1.2-transitional.xsd b/Translate/data/xliff-core-1.2-transitional.xsd
new file mode 100644
index 00000000..850cfb87
--- /dev/null
+++ b/Translate/data/xliff-core-1.2-transitional.xsd
@@ -0,0 +1,2261 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+May-19-2004:
+- Changed the <choice> for ElemType_header, moving minOccurs="0" maxOccurs="unbounded" from its elements
+to <choice> itself.
+- Added <choice> for ElemType_trans-unit to allow "any order" for <context-group>, <count-group>, <prop-group>, <note>, and
+<alt-trans>.
+
+Oct-2005
+- updated version info to 1.2
+- equiv-trans attribute to <trans-unit> element
+- merged-trans attribute for <group> element
+- Add the <seg-source> element as optional in the <trans-unit> and <alt-trans> content models, at the same level as <source>
+- Create a new value "seg" for the mtype attribute of the <mrk> element
+- Add mid as an optional attribute for the <alt-trans> element
+
+Nov-14-2005
+- Changed name attribute for <context-group> from required to optional
+- Added extension point at <xliff>
+
+Jan-9-2006
+- Added alttranstype type attribute to <alt-trans>, and values
+
+Jan-10-2006
+- Corrected error with overwritten purposeValueList
+- Corrected name="AttrType_Version", attribute should have been "name"
+
+-->
+<xsd:schema xmlns:xlf="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="urn:oasis:names:tc:xliff:document:1.2" xml:lang="en">
+ <!-- Import for xml:lang and xml:space -->
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"/>
+ <!-- Attributes Lists -->
+ <xsd:simpleType name="XTend">
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="x-[^\s]+"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="context-typeValueList">
+ <xsd:annotation>
+ <xsd:documentation>Values for the attribute 'context-type'.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="database">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a database content.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="element">
+ <xsd:annotation>
+ <xsd:documentation>Indicates the content of an element within an XML document.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="elementtitle">
+ <xsd:annotation>
+ <xsd:documentation>Indicates the name of an element within an XML document.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="linenumber">
+ <xsd:annotation>
+ <xsd:documentation>Indicates the line number from the sourcefile (see context-type="sourcefile") where the &lt;source&gt; is found.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="numparams">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a the number of parameters contained within the &lt;source&gt;.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="paramnotes">
+ <xsd:annotation>
+ <xsd:documentation>Indicates notes pertaining to the parameters in the &lt;source&gt;.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="record">
+ <xsd:annotation>
+ <xsd:documentation>Indicates the content of a record within a database.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="recordtitle">
+ <xsd:annotation>
+ <xsd:documentation>Indicates the name of a record within a database.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="sourcefile">
+ <xsd:annotation>
+ <xsd:documentation>Indicates the original source file in the case that multiple files are merged to form the original file from which the XLIFF file is created. This differs from the original &lt;file&gt; attribute in that this sourcefile is one of many that make up that file.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="count-typeValueList">
+ <xsd:annotation>
+ <xsd:documentation>Values for the attribute 'count-type'.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base="xsd:NMTOKEN">
+ <xsd:enumeration value="num-usages">
+ <xsd:annotation>
+ <xsd:documentation>Indicates the count units are items that are used X times in a certain context; example: this is a reusable text unit which is used 42 times in other texts.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="repetition">
+ <xsd:annotation>
+ <xsd:documentation>Indicates the count units are translation units existing already in the same document.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="total">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a total count.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="InlineDelimitersValueList">
+ <xsd:annotation>
+ <xsd:documentation>Values for the attribute 'ctype' when used other elements than &lt;ph&gt; or &lt;x&gt;.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base="xsd:NMTOKEN">
+ <xsd:enumeration value="bold">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a run of bolded text.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="italic">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a run of text in italics.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="underlined">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a run of underlined text.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="link">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a run of hyper-text.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="InlinePlaceholdersValueList">
+ <xsd:annotation>
+ <xsd:documentation>Values for the attribute 'ctype' when used with &lt;ph&gt; or &lt;x&gt;.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base="xsd:NMTOKEN">
+ <xsd:enumeration value="image">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a inline image.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="pb">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a page break.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="lb">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a line break.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="mime-typeValueList">
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="(text|multipart|message|application|image|audio|video|model)(/.+)*"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="datatypeValueList">
+ <xsd:annotation>
+ <xsd:documentation>Values for the attribute 'datatype'.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base="xsd:NMTOKEN">
+ <xsd:enumeration value="asp">
+ <xsd:annotation>
+ <xsd:documentation>Indicates Active Server Page data.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="c">
+ <xsd:annotation>
+ <xsd:documentation>Indicates C source file data.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="cdf">
+ <xsd:annotation>
+ <xsd:documentation>Indicates Channel Definition Format (CDF) data.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="cfm">
+ <xsd:annotation>
+ <xsd:documentation>Indicates ColdFusion data.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="cpp">
+ <xsd:annotation>
+ <xsd:documentation>Indicates C++ source file data.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="csharp">
+ <xsd:annotation>
+ <xsd:documentation>Indicates C-Sharp data.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="cstring">
+ <xsd:annotation>
+ <xsd:documentation>Indicates strings from C, ASM, and driver files data.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="csv">
+ <xsd:annotation>
+ <xsd:documentation>Indicates comma-separated values data.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="database">
+ <xsd:annotation>
+ <xsd:documentation>Indicates database data.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="documentfooter">
+ <xsd:annotation>
+ <xsd:documentation>Indicates portions of document that follows data and contains metadata.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="documentheader">
+ <xsd:annotation>
+ <xsd:documentation>Indicates portions of document that precedes data and contains metadata.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="filedialog">
+ <xsd:annotation>
+ <xsd:documentation>Indicates data from standard UI file operations dialogs (e.g., Open, Save, Save As, Export, Import).</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="form">
+ <xsd:annotation>
+ <xsd:documentation>Indicates standard user input screen data.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="html">
+ <xsd:annotation>
+ <xsd:documentation>Indicates HyperText Markup Language (HTML) data - document instance.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="htmlbody">
+ <xsd:annotation>
+ <xsd:documentation>Indicates content within an HTML document’s &lt;body&gt; element.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="ini">
+ <xsd:annotation>
+ <xsd:documentation>Indicates Windows INI file data.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="interleaf">
+ <xsd:annotation>
+ <xsd:documentation>Indicates Interleaf data.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="javaclass">
+ <xsd:annotation>
+ <xsd:documentation>Indicates Java source file data (extension '.java').</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="javapropertyresourcebundle">
+ <xsd:annotation>
+ <xsd:documentation>Indicates Java property resource bundle data.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="javalistresourcebundle">
+ <xsd:annotation>
+ <xsd:documentation>Indicates Java list resource bundle data.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="javascript">
+ <xsd:annotation>
+ <xsd:documentation>Indicates JavaScript source file data.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="jscript">
+ <xsd:annotation>
+ <xsd:documentation>Indicates JScript source file data.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="layout">
+ <xsd:annotation>
+ <xsd:documentation>Indicates information relating to formatting.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="lisp">
+ <xsd:annotation>
+ <xsd:documentation>Indicates LISP source file data.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="margin">
+ <xsd:annotation>
+ <xsd:documentation>Indicates information relating to margin formats.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="menufile">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a file containing menu.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="messagefile">
+ <xsd:annotation>
+ <xsd:documentation>Indicates numerically identified string table.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="mif">
+ <xsd:annotation>
+ <xsd:documentation>Indicates Maker Interchange Format (MIF) data.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="mimetype">
+ <xsd:annotation>
+ <xsd:documentation>Indicates that the datatype attribute value is a MIME Type value and is defined in the mime-type attribute.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="mo">
+ <xsd:annotation>
+ <xsd:documentation>Indicates GNU Machine Object data.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="msglib">
+ <xsd:annotation>
+ <xsd:documentation>Indicates Message Librarian strings created by Novell's Message Librarian Tool.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="pagefooter">
+ <xsd:annotation>
+ <xsd:documentation>Indicates information to be displayed at the bottom of each page of a document.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="pageheader">
+ <xsd:annotation>
+ <xsd:documentation>Indicates information to be displayed at the top of each page of a document.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="parameters">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a list of property values (e.g., settings within INI files or preferences dialog).</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="pascal">
+ <xsd:annotation>
+ <xsd:documentation>Indicates Pascal source file data.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="php">
+ <xsd:annotation>
+ <xsd:documentation>Indicates Hypertext Preprocessor data.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="plaintext">
+ <xsd:annotation>
+ <xsd:documentation>Indicates plain text file (no formatting other than, possibly, wrapping).</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="po">
+ <xsd:annotation>
+ <xsd:documentation>Indicates GNU Portable Object file.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="report">
+ <xsd:annotation>
+ <xsd:documentation>Indicates dynamically generated user defined document. e.g. Oracle Report, Crystal Report, etc.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="resources">
+ <xsd:annotation>
+ <xsd:documentation>Indicates Windows .NET binary resources.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="resx">
+ <xsd:annotation>
+ <xsd:documentation>Indicates Windows .NET Resources.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="rtf">
+ <xsd:annotation>
+ <xsd:documentation>Indicates Rich Text Format (RTF) data.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="sgml">
+ <xsd:annotation>
+ <xsd:documentation>Indicates Standard Generalized Markup Language (SGML) data - document instance.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="sgmldtd">
+ <xsd:annotation>
+ <xsd:documentation>Indicates Standard Generalized Markup Language (SGML) data - Document Type Definition (DTD).</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="svg">
+ <xsd:annotation>
+ <xsd:documentation>Indicates Scalable Vector Graphic (SVG) data.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="vbscript">
+ <xsd:annotation>
+ <xsd:documentation>Indicates VisualBasic Script source file.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="warning">
+ <xsd:annotation>
+ <xsd:documentation>Indicates warning message.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="winres">
+ <xsd:annotation>
+ <xsd:documentation>Indicates Windows (Win32) resources (i.e. resources extracted from an RC script, a message file, or a compiled file).</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="xhtml">
+ <xsd:annotation>
+ <xsd:documentation>Indicates Extensible HyperText Markup Language (XHTML) data - document instance.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="xml">
+ <xsd:annotation>
+ <xsd:documentation>Indicates Extensible Markup Language (XML) data - document instance.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="xmldtd">
+ <xsd:annotation>
+ <xsd:documentation>Indicates Extensible Markup Language (XML) data - Document Type Definition (DTD).</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="xsl">
+ <xsd:annotation>
+ <xsd:documentation>Indicates Extensible Stylesheet Language (XSL) data.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="xul">
+ <xsd:annotation>
+ <xsd:documentation>Indicates XUL elements.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="mtypeValueList">
+ <xsd:annotation>
+ <xsd:documentation>Values for the attribute 'mtype'.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base="xsd:NMTOKEN">
+ <xsd:enumeration value="abbrev">
+ <xsd:annotation>
+ <xsd:documentation>Indicates the marked text is an abbreviation.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="abbreviated-form">
+ <xsd:annotation>
+ <xsd:documentation>ISO-12620 2.1.8: A term resulting from the omission of any part of the full term while designating the same concept.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="abbreviation">
+ <xsd:annotation>
+ <xsd:documentation>ISO-12620 2.1.8.1: An abbreviated form of a simple term resulting from the omission of some of its letters (e.g. 'adj.' for 'adjective').</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="acronym">
+ <xsd:annotation>
+ <xsd:documentation>ISO-12620 2.1.8.4: An abbreviated form of a term made up of letters from the full form of a multiword term strung together into a sequence pronounced only syllabically (e.g. 'radar' for 'radio detecting and ranging').</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="appellation">
+ <xsd:annotation>
+ <xsd:documentation>ISO-12620: A proper-name term, such as the name of an agency or other proper entity.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="collocation">
+ <xsd:annotation>
+ <xsd:documentation>ISO-12620 2.1.18.1: A recurrent word combination characterized by cohesion in that the components of the collocation must co-occur within an utterance or series of utterances, even though they do not necessarily have to maintain immediate proximity to one another.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="common-name">
+ <xsd:annotation>
+ <xsd:documentation>ISO-12620 2.1.5: A synonym for an international scientific term that is used in general discourse in a given language.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="datetime">
+ <xsd:annotation>
+ <xsd:documentation>Indicates the marked text is a date and/or time.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="equation">
+ <xsd:annotation>
+ <xsd:documentation>ISO-12620 2.1.15: An expression used to represent a concept based on a statement that two mathematical expressions are, for instance, equal as identified by the equal sign (=), or assigned to one another by a similar sign.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="expanded-form">
+ <xsd:annotation>
+ <xsd:documentation>ISO-12620 2.1.7: The complete representation of a term for which there is an abbreviated form.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="formula">
+ <xsd:annotation>
+ <xsd:documentation>ISO-12620 2.1.14: Figures, symbols or the like used to express a concept briefly, such as a mathematical or chemical formula.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="head-term">
+ <xsd:annotation>
+ <xsd:documentation>ISO-12620 2.1.1: The concept designation that has been chosen to head a terminological record.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="initialism">
+ <xsd:annotation>
+ <xsd:documentation>ISO-12620 2.1.8.3: An abbreviated form of a term consisting of some of the initial letters of the words making up a multiword term or the term elements making up a compound term when these letters are pronounced individually (e.g. 'BSE' for 'bovine spongiform encephalopathy').</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="international-scientific-term">
+ <xsd:annotation>
+ <xsd:documentation>ISO-12620 2.1.4: A term that is part of an international scientific nomenclature as adopted by an appropriate scientific body.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="internationalism">
+ <xsd:annotation>
+ <xsd:documentation>ISO-12620 2.1.6: A term that has the same or nearly identical orthographic or phonemic form in many languages.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="logical-expression">
+ <xsd:annotation>
+ <xsd:documentation>ISO-12620 2.1.16: An expression used to represent a concept based on mathematical or logical relations, such as statements of inequality, set relationships, Boolean operations, and the like.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="materials-management-unit">
+ <xsd:annotation>
+ <xsd:documentation>ISO-12620 2.1.17: A unit to track object.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="name">
+ <xsd:annotation>
+ <xsd:documentation>Indicates the marked text is a name.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="near-synonym">
+ <xsd:annotation>
+ <xsd:documentation>ISO-12620 2.1.3: A term that represents the same or a very similar concept as another term in the same language, but for which interchangeability is limited to some contexts and inapplicable in others.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="part-number">
+ <xsd:annotation>
+ <xsd:documentation>ISO-12620 2.1.17.2: A unique alphanumeric designation assigned to an object in a manufacturing system.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="phrase">
+ <xsd:annotation>
+ <xsd:documentation>Indicates the marked text is a phrase.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="phraseological-unit">
+ <xsd:annotation>
+ <xsd:documentation>ISO-12620 2.1.18: Any group of two or more words that form a unit, the meaning of which frequently cannot be deduced based on the combined sense of the words making up the phrase.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="protected">
+ <xsd:annotation>
+ <xsd:documentation>Indicates the marked text should not be translated.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="romanized-form">
+ <xsd:annotation>
+ <xsd:documentation>ISO-12620 2.1.12: A form of a term resulting from an operation whereby non-Latin writing systems are converted to the Latin alphabet.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="seg">
+ <xsd:annotation>
+ <xsd:documentation>Indicates that the marked text represents a segment.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="set-phrase">
+ <xsd:annotation>
+ <xsd:documentation>ISO-12620 2.1.18.2: A fixed, lexicalized phrase.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="short-form">
+ <xsd:annotation>
+ <xsd:documentation>ISO-12620 2.1.8.2: A variant of a multiword term that includes fewer words than the full form of the term (e.g. 'Group of Twenty-four' for 'Intergovernmental Group of Twenty-four on International Monetary Affairs').</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="sku">
+ <xsd:annotation>
+ <xsd:documentation>ISO-12620 2.1.17.1: Stock keeping unit, an inventory item identified by a unique alphanumeric designation assigned to an object in an inventory control system.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="standard-text">
+ <xsd:annotation>
+ <xsd:documentation>ISO-12620 2.1.19: A fixed chunk of recurring text.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="symbol">
+ <xsd:annotation>
+ <xsd:documentation>ISO-12620 2.1.13: A designation of a concept by letters, numerals, pictograms or any combination thereof.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="synonym">
+ <xsd:annotation>
+ <xsd:documentation>ISO-12620 2.1.2: Any term that represents the same or a very similar concept as the main entry term in a term entry.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="synonymous-phrase">
+ <xsd:annotation>
+ <xsd:documentation>ISO-12620 2.1.18.3: Phraseological unit in a language that expresses the same semantic content as another phrase in that same language.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="term">
+ <xsd:annotation>
+ <xsd:documentation>Indicates the marked text is a term.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="transcribed-form">
+ <xsd:annotation>
+ <xsd:documentation>ISO-12620 2.1.11: A form of a term resulting from an operation whereby the characters of one writing system are represented by characters from another writing system, taking into account the pronunciation of the characters converted.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="transliterated-form">
+ <xsd:annotation>
+ <xsd:documentation>ISO-12620 2.1.10: A form of a term resulting from an operation whereby the characters of an alphabetic writing system are represented by characters from another alphabetic writing system.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="truncated-term">
+ <xsd:annotation>
+ <xsd:documentation>ISO-12620 2.1.8.5: An abbreviated form of a term resulting from the omission of one or more term elements or syllables (e.g. 'flu' for 'influenza').</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="variant">
+ <xsd:annotation>
+ <xsd:documentation>ISO-12620 2.1.9: One of the alternate forms of a term.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="restypeValueList">
+ <xsd:annotation>
+ <xsd:documentation>Values for the attribute 'restype'.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base="xsd:NMTOKEN">
+ <xsd:enumeration value="auto3state">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a Windows RC AUTO3STATE control.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="autocheckbox">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a Windows RC AUTOCHECKBOX control.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="autoradiobutton">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a Windows RC AUTORADIOBUTTON control.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="bedit">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a Windows RC BEDIT control.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="bitmap">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a bitmap, for example a BITMAP resource in Windows.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="button">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a button object, for example a BUTTON control Windows.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="caption">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a caption, such as the caption of a dialog box.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="cell">
+ <xsd:annotation>
+ <xsd:documentation>Indicates the cell in a table, for example the content of the &lt;td&gt; element in HTML.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="checkbox">
+ <xsd:annotation>
+ <xsd:documentation>Indicates check box object, for example a CHECKBOX control in Windows.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="checkboxmenuitem">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a menu item with an associated checkbox.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="checkedlistbox">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a list box, but with a check-box for each item.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="colorchooser">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a color selection dialog.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="combobox">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a combination of edit box and listbox object, for example a COMBOBOX control in Windows.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="comboboxexitem">
+ <xsd:annotation>
+ <xsd:documentation>Indicates an initialization entry of an extended combobox DLGINIT resource block. (code 0x1234).</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="comboboxitem">
+ <xsd:annotation>
+ <xsd:documentation>Indicates an initialization entry of a combobox DLGINIT resource block (code 0x0403).</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="component">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a UI base class element that cannot be represented by any other element.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="contextmenu">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a context menu.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="ctext">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a Windows RC CTEXT control.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="cursor">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a cursor, for example a CURSOR resource in Windows.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="datetimepicker">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a date/time picker.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="defpushbutton">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a Windows RC DEFPUSHBUTTON control.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="dialog">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a dialog box.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="dlginit">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a Windows RC DLGINIT resource block.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="edit">
+ <xsd:annotation>
+ <xsd:documentation>Indicates an edit box object, for example an EDIT control in Windows.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="file">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a filename.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="filechooser">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a file dialog.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="fn">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a footnote.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="font">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a font name.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="footer">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a footer.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="frame">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a frame object.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="grid">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a XUL grid element.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="groupbox">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a groupbox object, for example a GROUPBOX control in Windows.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="header">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a header item.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="heading">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a heading, such has the content of &lt;h1&gt;, &lt;h2&gt;, etc. in HTML.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="hedit">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a Windows RC HEDIT control.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="hscrollbar">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a horizontal scrollbar.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="icon">
+ <xsd:annotation>
+ <xsd:documentation>Indicates an icon, for example an ICON resource in Windows.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="iedit">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a Windows RC IEDIT control.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="keywords">
+ <xsd:annotation>
+ <xsd:documentation>Indicates keyword list, such as the content of the Keywords meta-data in HTML, or a K footnote in WinHelp RTF.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="label">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a label object.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="linklabel">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a label that is also a HTML link (not necessarily a URL).</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="list">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a list (a group of list-items, for example an &lt;ol&gt; or &lt;ul&gt; element in HTML).</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="listbox">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a listbox object, for example an LISTBOX control in Windows.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="listitem">
+ <xsd:annotation>
+ <xsd:documentation>Indicates an list item (an entry in a list).</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="ltext">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a Windows RC LTEXT control.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="menu">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a menu (a group of menu-items).</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="menubar">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a toolbar containing one or more tope level menus.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="menuitem">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a menu item (an entry in a menu).</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="menuseparator">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a XUL menuseparator element.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="message">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a message, for example an entry in a MESSAGETABLE resource in Windows.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="monthcalendar">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a calendar control.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="numericupdown">
+ <xsd:annotation>
+ <xsd:documentation>Indicates an edit box beside a spin control.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="panel">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a catch all for rectangular areas.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="popupmenu">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a standalone menu not necessarily associated with a menubar.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="pushbox">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a pushbox object, for example a PUSHBOX control in Windows.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="pushbutton">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a Windows RC PUSHBUTTON control.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="radio">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a radio button object.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="radiobuttonmenuitem">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a menuitem with associated radio button.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="rcdata">
+ <xsd:annotation>
+ <xsd:documentation>Indicates raw data resources for an application.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="row">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a row in a table.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="rtext">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a Windows RC RTEXT control.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="scrollpane">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a user navigable container used to show a portion of a document.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="separator">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a generic divider object (e.g. menu group separator).</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="shortcut">
+ <xsd:annotation>
+ <xsd:documentation>Windows accelerators, shortcuts in resource or property files.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="spinner">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a UI control to indicate process activity but not progress.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="splitter">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a splitter bar.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="state3">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a Windows RC STATE3 control.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="statusbar">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a window for providing feedback to the users, like 'read-only', etc.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="string">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a string, for example an entry in a STRINGTABLE resource in Windows.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="tabcontrol">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a layers of controls with a tab to select layers.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="table">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a display and edits regular two-dimensional tables of cells.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="textbox">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a XUL textbox element.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="togglebutton">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a UI button that can be toggled to on or off state.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="toolbar">
+ <xsd:annotation>
+ <xsd:documentation>Indicates an array of controls, usually buttons.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="tooltip">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a pop up tool tip text.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="trackbar">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a bar with a pointer indicating a position within a certain range.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="tree">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a control that displays a set of hierarchical data.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="uri">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a URI (URN or URL).</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="userbutton">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a Windows RC USERBUTTON control.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="usercontrol">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a user-defined control like CONTROL control in Windows.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="var">
+ <xsd:annotation>
+ <xsd:documentation>Indicates the text of a variable.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="versioninfo">
+ <xsd:annotation>
+ <xsd:documentation>Indicates version information about a resource like VERSIONINFO in Windows.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="vscrollbar">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a vertical scrollbar.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="window">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a graphical window.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="size-unitValueList">
+ <xsd:annotation>
+ <xsd:documentation>Values for the attribute 'size-unit'.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base="xsd:NMTOKEN">
+ <xsd:enumeration value="byte">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a size in 8-bit bytes.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="char">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a size in Unicode characters.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="col">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a size in columns. Used for HTML text area.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="cm">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a size in centimeters.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="dlgunit">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a size in dialog units, as defined in Windows resources.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="em">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a size in 'font-size' units (as defined in CSS).</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="ex">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a size in 'x-height' units (as defined in CSS).</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="glyph">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a size in glyphs. A glyph is considered to be one or more combined Unicode characters that represent a single displayable text character. Sometimes referred to as a 'grapheme cluster'</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="in">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a size in inches.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="mm">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a size in millimeters.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="percent">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a size in percentage.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="pixel">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a size in pixels.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="point">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a size in point.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="row">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a size in rows. Used for HTML text area.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="stateValueList">
+ <xsd:annotation>
+ <xsd:documentation>Values for the attribute 'state'.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base="xsd:NMTOKEN">
+ <xsd:enumeration value="final">
+ <xsd:annotation>
+ <xsd:documentation>Indicates the terminating state.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="needs-adaptation">
+ <xsd:annotation>
+ <xsd:documentation>Indicates only non-textual information needs adaptation.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="needs-l10n">
+ <xsd:annotation>
+ <xsd:documentation>Indicates both text and non-textual information needs adaptation.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="needs-review-adaptation">
+ <xsd:annotation>
+ <xsd:documentation>Indicates only non-textual information needs review.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="needs-review-l10n">
+ <xsd:annotation>
+ <xsd:documentation>Indicates both text and non-textual information needs review.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="needs-review-translation">
+ <xsd:annotation>
+ <xsd:documentation>Indicates that only the text of the item needs to be reviewed.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="needs-translation">
+ <xsd:annotation>
+ <xsd:documentation>Indicates that the item needs to be translated.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="new">
+ <xsd:annotation>
+ <xsd:documentation>Indicates that the item is new. For example, translation units that were not in a previous version of the document.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="signed-off">
+ <xsd:annotation>
+ <xsd:documentation>Indicates that changes are reviewed and approved.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="translated">
+ <xsd:annotation>
+ <xsd:documentation>Indicates that the item has been translated.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="state-qualifierValueList">
+ <xsd:annotation>
+ <xsd:documentation>Values for the attribute 'state-qualifier'.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base="xsd:NMTOKEN">
+ <xsd:enumeration value="exact-match">
+ <xsd:annotation>
+ <xsd:documentation>Indicates an exact match. An exact match occurs when a source text of a segment is exactly the same as the source text of a segment that was translated previously.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="fuzzy-match">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a fuzzy match. A fuzzy match occurs when a source text of a segment is very similar to the source text of a segment that was translated previously (e.g. when the difference is casing, a few changed words, white-space discripancy, etc.).</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="id-match">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a match based on matching IDs (in addition to matching text).</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="leveraged-glossary">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a translation derived from a glossary.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="leveraged-inherited">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a translation derived from existing translation.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="leveraged-mt">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a translation derived from machine translation.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="leveraged-repository">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a translation derived from a translation repository.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="leveraged-tm">
+ <xsd:annotation>
+ <xsd:documentation>Indicates a translation derived from a translation memory.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="mt-suggestion">
+ <xsd:annotation>
+ <xsd:documentation>Indicates the translation is suggested by machine translation.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="rejected-grammar">
+ <xsd:annotation>
+ <xsd:documentation>Indicates that the item has been rejected because of incorrect grammar.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="rejected-inaccurate">
+ <xsd:annotation>
+ <xsd:documentation>Indicates that the item has been rejected because it is incorrect.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="rejected-length">
+ <xsd:annotation>
+ <xsd:documentation>Indicates that the item has been rejected because it is too long or too short.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="rejected-spelling">
+ <xsd:annotation>
+ <xsd:documentation>Indicates that the item has been rejected because of incorrect spelling.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="tm-suggestion">
+ <xsd:annotation>
+ <xsd:documentation>Indicates the translation is suggested by translation memory.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="unitValueList">
+ <xsd:annotation>
+ <xsd:documentation>Values for the attribute 'unit'.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base="xsd:NMTOKEN">
+ <xsd:enumeration value="word">
+ <xsd:annotation>
+ <xsd:documentation>Refers to words.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="page">
+ <xsd:annotation>
+ <xsd:documentation>Refers to pages.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="trans-unit">
+ <xsd:annotation>
+ <xsd:documentation>Refers to &lt;trans-unit&gt; elements.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="bin-unit">
+ <xsd:annotation>
+ <xsd:documentation>Refers to &lt;bin-unit&gt; elements.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="glyph">
+ <xsd:annotation>
+ <xsd:documentation>Refers to glyphs.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="item">
+ <xsd:annotation>
+ <xsd:documentation>Refers to &lt;trans-unit&gt; and/or &lt;bin-unit&gt; elements.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="instance">
+ <xsd:annotation>
+ <xsd:documentation>Refers to the occurrences of instances defined by the count-type value.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="character">
+ <xsd:annotation>
+ <xsd:documentation>Refers to characters.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="line">
+ <xsd:annotation>
+ <xsd:documentation>Refers to lines.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="sentence">
+ <xsd:annotation>
+ <xsd:documentation>Refers to sentences.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="paragraph">
+ <xsd:annotation>
+ <xsd:documentation>Refers to paragraphs.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="segment">
+ <xsd:annotation>
+ <xsd:documentation>Refers to segments.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="placeable">
+ <xsd:annotation>
+ <xsd:documentation>Refers to placeables (inline elements).</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="priorityValueList">
+ <xsd:annotation>
+ <xsd:documentation>Values for the attribute 'priority'.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base="xsd:positiveInteger">
+ <xsd:enumeration value="1">
+ <xsd:annotation>
+ <xsd:documentation>Highest priority.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="2">
+ <xsd:annotation>
+ <xsd:documentation>High priority.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="3">
+ <xsd:annotation>
+ <xsd:documentation>High priority, but not as important as 2.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="4">
+ <xsd:annotation>
+ <xsd:documentation>High priority, but not as important as 3.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="5">
+ <xsd:annotation>
+ <xsd:documentation>Medium priority, but more important than 6.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="6">
+ <xsd:annotation>
+ <xsd:documentation>Medium priority, but less important than 5.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="7">
+ <xsd:annotation>
+ <xsd:documentation>Low priority, but more important than 8.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="8">
+ <xsd:annotation>
+ <xsd:documentation>Low priority, but more important than 9.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="9">
+ <xsd:annotation>
+ <xsd:documentation>Low priority.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="10">
+ <xsd:annotation>
+ <xsd:documentation>Lowest priority.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="reformatValueYesNo">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="yes">
+ <xsd:annotation>
+ <xsd:documentation>This value indicates that all properties can be reformatted. This value must be used alone.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="no">
+ <xsd:annotation>
+ <xsd:documentation>This value indicates that no properties should be reformatted. This value must be used alone.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="reformatValueList">
+ <xsd:list>
+ <xsd:simpleType>
+ <xsd:union memberTypes="xlf:XTend">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="coord">
+ <xsd:annotation>
+ <xsd:documentation>This value indicates that all information in the coord attribute can be modified.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="coord-x">
+ <xsd:annotation>
+ <xsd:documentation>This value indicates that the x information in the coord attribute can be modified.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="coord-y">
+ <xsd:annotation>
+ <xsd:documentation>This value indicates that the y information in the coord attribute can be modified.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="coord-cx">
+ <xsd:annotation>
+ <xsd:documentation>This value indicates that the cx information in the coord attribute can be modified.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="coord-cy">
+ <xsd:annotation>
+ <xsd:documentation>This value indicates that the cy information in the coord attribute can be modified.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="font">
+ <xsd:annotation>
+ <xsd:documentation>This value indicates that all the information in the font attribute can be modified.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="font-name">
+ <xsd:annotation>
+ <xsd:documentation>This value indicates that the name information in the font attribute can be modified.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="font-size">
+ <xsd:annotation>
+ <xsd:documentation>This value indicates that the size information in the font attribute can be modified.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="font-weight">
+ <xsd:annotation>
+ <xsd:documentation>This value indicates that the weight information in the font attribute can be modified.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="css-style">
+ <xsd:annotation>
+ <xsd:documentation>This value indicates that the information in the css-style attribute can be modified.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="style">
+ <xsd:annotation>
+ <xsd:documentation>This value indicates that the information in the style attribute can be modified.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="ex-style">
+ <xsd:annotation>
+ <xsd:documentation>This value indicates that the information in the exstyle attribute can be modified.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:union>
+ </xsd:simpleType>
+ </xsd:list>
+ </xsd:simpleType>
+ <xsd:simpleType name="purposeValueList">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="information">
+ <xsd:annotation>
+ <xsd:documentation>Indicates that the context is informational in nature, specifying for example, how a term should be translated. Thus, should be displayed to anyone editing the XLIFF document.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="location">
+ <xsd:annotation>
+ <xsd:documentation>Indicates that the context-group is used to specify where the term was found in the translatable source. Thus, it is not displayed.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="match">
+ <xsd:annotation>
+ <xsd:documentation>Indicates that the context information should be used during translation memory lookups. Thus, it is not displayed.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="alttranstypeValueList">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="proposal">
+ <xsd:annotation>
+ <xsd:documentation>Represents a translation proposal from a translation memory or other resource.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="previous-version">
+ <xsd:annotation>
+ <xsd:documentation>Represents a previous version of the target element.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="rejected">
+ <xsd:annotation>
+ <xsd:documentation>Represents a rejected version of the target element.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="reference">
+ <xsd:annotation>
+ <xsd:documentation>Represents a translation to be used for reference purposes only, for example from a related product or a different language.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ <xsd:enumeration value="accepted">
+ <xsd:annotation>
+ <xsd:documentation>Represents a proposed translation that was used for the translation of the trans-unit, possibly modified.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:enumeration>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <!-- Other Types -->
+ <xsd:complexType name="ElemType_ExternalReference">
+ <xsd:choice>
+ <xsd:element ref="xlf:internal-file"/>
+ <xsd:element ref="xlf:external-file"/>
+ </xsd:choice>
+ </xsd:complexType>
+ <xsd:simpleType name="AttrType_purpose">
+ <xsd:list>
+ <xsd:simpleType>
+ <xsd:union memberTypes="xlf:purposeValueList xlf:XTend"/>
+ </xsd:simpleType>
+ </xsd:list>
+ </xsd:simpleType>
+ <xsd:simpleType name="AttrType_datatype">
+ <xsd:union memberTypes="xlf:datatypeValueList xlf:XTend"/>
+ </xsd:simpleType>
+ <xsd:simpleType name="AttrType_restype">
+ <xsd:union memberTypes="xlf:restypeValueList xlf:XTend"/>
+ </xsd:simpleType>
+ <xsd:simpleType name="AttrType_alttranstype">
+ <xsd:union memberTypes="xlf:alttranstypeValueList xlf:XTend"/>
+ </xsd:simpleType>
+ <xsd:simpleType name="AttrType_context-type">
+ <xsd:union memberTypes="xlf:context-typeValueList xlf:XTend"/>
+ </xsd:simpleType>
+ <xsd:simpleType name="AttrType_state">
+ <xsd:union memberTypes="xlf:stateValueList xlf:XTend"/>
+ </xsd:simpleType>
+ <xsd:simpleType name="AttrType_state-qualifier">
+ <xsd:union memberTypes="xlf:state-qualifierValueList xlf:XTend"/>
+ </xsd:simpleType>
+ <xsd:simpleType name="AttrType_count-type">
+ <xsd:union memberTypes="xlf:restypeValueList xlf:count-typeValueList xlf:datatypeValueList xlf:stateValueList xlf:state-qualifierValueList xlf:XTend"/>
+ </xsd:simpleType>
+ <xsd:simpleType name="AttrType_InlineDelimiters">
+ <xsd:union memberTypes="xlf:InlineDelimitersValueList xlf:XTend"/>
+ </xsd:simpleType>
+ <xsd:simpleType name="AttrType_InlinePlaceholders">
+ <xsd:union memberTypes="xlf:InlinePlaceholdersValueList xlf:XTend"/>
+ </xsd:simpleType>
+ <xsd:simpleType name="AttrType_size-unit">
+ <xsd:union memberTypes="xlf:size-unitValueList xlf:XTend"/>
+ </xsd:simpleType>
+ <xsd:simpleType name="AttrType_mtype">
+ <xsd:union memberTypes="xlf:mtypeValueList xlf:XTend"/>
+ </xsd:simpleType>
+ <xsd:simpleType name="AttrType_unit">
+ <xsd:union memberTypes="xlf:unitValueList xlf:XTend"/>
+ </xsd:simpleType>
+ <xsd:simpleType name="AttrType_priority">
+ <xsd:union memberTypes="xlf:priorityValueList"/>
+ </xsd:simpleType>
+ <xsd:simpleType name="AttrType_reformat">
+ <xsd:union memberTypes="xlf:reformatValueYesNo xlf:reformatValueList"/>
+ </xsd:simpleType>
+ <xsd:simpleType name="AttrType_YesNo">
+ <xsd:restriction base="xsd:NMTOKEN">
+ <xsd:enumeration value="yes"/>
+ <xsd:enumeration value="no"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="AttrType_Position">
+ <xsd:restriction base="xsd:NMTOKEN">
+ <xsd:enumeration value="open"/>
+ <xsd:enumeration value="close"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="AttrType_assoc">
+ <xsd:restriction base="xsd:NMTOKEN">
+ <xsd:enumeration value="preceding"/>
+ <xsd:enumeration value="following"/>
+ <xsd:enumeration value="both"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="AttrType_annotates">
+ <xsd:restriction base="xsd:NMTOKEN">
+ <xsd:enumeration value="source"/>
+ <xsd:enumeration value="target"/>
+ <xsd:enumeration value="general"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="AttrType_Coordinates">
+ <xsd:annotation>
+ <xsd:documentation>Values for the attribute 'coord'.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="(-?\d+|#);(-?\d+|#);(-?\d+|#);(-?\d+|#)"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="AttrType_Version">
+ <xsd:annotation>
+ <xsd:documentation>Version values: 1.0 and 1.1 are allowed for backward compatibility.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="1.2"/>
+ <xsd:enumeration value="1.1"/>
+ <xsd:enumeration value="1.0"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <!-- Groups -->
+ <xsd:group name="ElemGroup_TextContent">
+ <xsd:choice>
+ <xsd:element ref="xlf:g"/>
+ <xsd:element ref="xlf:bpt"/>
+ <xsd:element ref="xlf:ept"/>
+ <xsd:element ref="xlf:ph"/>
+ <xsd:element ref="xlf:it"/>
+ <xsd:element ref="xlf:mrk"/>
+ <xsd:element ref="xlf:x"/>
+ <xsd:element ref="xlf:bx"/>
+ <xsd:element ref="xlf:ex"/>
+ </xsd:choice>
+ </xsd:group>
+ <xsd:attributeGroup name="AttrGroup_TextContent">
+ <xsd:attribute name="id" type="xsd:string" use="required"/>
+ <xsd:attribute name="ts" type="xsd:string" use="optional"/>
+ <xsd:attribute name="xid" type="xsd:string" use="optional"/>
+ <xsd:attribute name="equiv-text" type="xsd:string" use="optional"/>
+ <xsd:anyAttribute namespace="##any" processContents="skip"/>
+ </xsd:attributeGroup>
+ <!-- XLIFF Structure -->
+ <xsd:element name="xliff">
+ <xsd:complexType>
+ <xsd:sequence maxOccurs="unbounded">
+ <xsd:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="skip"/>
+ <xsd:element ref="xlf:file"/>
+ </xsd:sequence>
+ <xsd:attribute name="version" type="xlf:AttrType_Version" use="required"/>
+ <xsd:attribute ref="xml:lang" use="optional"/>
+ <xsd:anyAttribute namespace="##any" processContents="skip"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="file">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element minOccurs="0" ref="xlf:header"/>
+ <xsd:element ref="xlf:body"/>
+ </xsd:sequence>
+ <xsd:attribute name="original" type="xsd:string" use="required"/>
+ <xsd:attribute name="source-language" type="xsd:language" use="required"/>
+ <xsd:attribute name="datatype" type="xlf:AttrType_datatype" use="required"/>
+ <xsd:attribute name="tool-id" type="xsd:string" use="optional"/>
+ <xsd:attribute default="manual" name="tool" type="xsd:string" use="optional"/>
+ <xsd:attribute name="date" type="xsd:dateTime" use="optional"/>
+ <xsd:attribute ref="xml:space" use="optional"/>
+ <xsd:attribute name="ts" type="xsd:string" use="optional"/>
+ <xsd:attribute name="category" type="xsd:string" use="optional"/>
+ <xsd:attribute name="target-language" type="xsd:language" use="optional"/>
+ <xsd:attribute name="product-name" type="xsd:string" use="optional"/>
+ <xsd:attribute name="product-version" type="xsd:string" use="optional"/>
+ <xsd:attribute name="build-num" type="xsd:string" use="optional"/>
+ <xsd:anyAttribute namespace="##any" processContents="skip"/>
+ </xsd:complexType>
+ <xsd:unique name="U_group_id">
+ <xsd:selector xpath=".//xlf:group"/>
+ <xsd:field xpath="@id"/>
+ </xsd:unique>
+ <xsd:key name="K_unit_id">
+ <xsd:selector xpath=".//xlf:trans-unit|.//xlf:bin-unit"/>
+ <xsd:field xpath="@id"/>
+ </xsd:key>
+ <xsd:keyref name="KR_unit_id" refer="xlf:K_unit_id">
+ <xsd:selector xpath=".//bpt|.//ept|.//it|.//ph|.//g|.//x|.//bx|.//ex|.//sub"/>
+ <xsd:field xpath="@xid"/>
+ </xsd:keyref>
+ <xsd:key name="K_tool-id">
+ <xsd:selector xpath="xlf:header/xlf:tool"/>
+ <xsd:field xpath="@tool-id"/>
+ </xsd:key>
+ <xsd:keyref name="KR_file_tool-id" refer="xlf:K_tool-id">
+ <xsd:selector xpath="."/>
+ <xsd:field xpath="@tool-id"/>
+ </xsd:keyref>
+ <xsd:keyref name="KR_phase_tool-id" refer="xlf:K_tool-id">
+ <xsd:selector xpath="xlf:header/xlf:phase-group/xlf:phase"/>
+ <xsd:field xpath="@tool-id"/>
+ </xsd:keyref>
+ <xsd:keyref name="KR_alt-trans_tool-id" refer="xlf:K_tool-id">
+ <xsd:selector xpath=".//xlf:trans-unit/xlf:alt-trans"/>
+ <xsd:field xpath="@tool-id"/>
+ </xsd:keyref>
+ <xsd:key name="K_count-group_name">
+ <xsd:selector xpath=".//xlf:count-group"/>
+ <xsd:field xpath="@name"/>
+ </xsd:key>
+ <xsd:unique name="U_context-group_name">
+ <xsd:selector xpath=".//xlf:context-group"/>
+ <xsd:field xpath="@name"/>
+ </xsd:unique>
+ <xsd:key name="K_phase-name">
+ <xsd:selector xpath="xlf:header/xlf:phase-group/xlf:phase"/>
+ <xsd:field xpath="@phase-name"/>
+ </xsd:key>
+ <xsd:keyref name="KR_phase-name" refer="xlf:K_phase-name">
+ <xsd:selector xpath=".//xlf:count|.//xlf:trans-unit|.//xlf:target|.//bin-unit|.//bin-target"/>
+ <xsd:field xpath="@phase-name"/>
+ </xsd:keyref>
+ <xsd:unique name="U_uid">
+ <xsd:selector xpath=".//xlf:external-file"/>
+ <xsd:field xpath="@uid"/>
+ </xsd:unique>
+ </xsd:element>
+ <xsd:element name="header">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element minOccurs="0" name="skl" type="xlf:ElemType_ExternalReference"/>
+ <xsd:element minOccurs="0" ref="xlf:phase-group"/>
+ <xsd:choice maxOccurs="unbounded" minOccurs="0">
+ <xsd:element name="glossary" type="xlf:ElemType_ExternalReference"/>
+ <xsd:element name="reference" type="xlf:ElemType_ExternalReference"/>
+ <xsd:element ref="xlf:count-group"/>
+ <xsd:element ref="xlf:prop-group"/>
+ <xsd:element ref="xlf:note"/>
+ <xsd:element ref="xlf:tool"/>
+ </xsd:choice>
+ <xsd:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="skip"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="internal-file">
+ <xsd:complexType>
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:attribute name="form" type="xsd:string"/>
+ <xsd:attribute name="crc" type="xsd:NMTOKEN"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="external-file">
+ <xsd:complexType>
+ <xsd:attribute name="href" type="xsd:string" use="required"/>
+ <xsd:attribute name="crc" type="xsd:NMTOKEN"/>
+ <xsd:attribute name="uid" type="xsd:NMTOKEN"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="note">
+ <xsd:complexType>
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:attribute ref="xml:lang" use="optional"/>
+ <xsd:attribute default="1" name="priority" type="xlf:AttrType_priority" use="optional"/>
+ <xsd:attribute name="from" type="xsd:string" use="optional"/>
+ <xsd:attribute default="general" name="annotates" type="xlf:AttrType_annotates" use="optional"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="phase-group">
+ <xsd:complexType>
+ <xsd:sequence maxOccurs="unbounded">
+ <xsd:element ref="xlf:phase"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="phase">
+ <xsd:complexType>
+ <xsd:sequence maxOccurs="unbounded" minOccurs="0">
+ <xsd:element ref="xlf:note"/>
+ </xsd:sequence>
+ <xsd:attribute name="phase-name" type="xsd:string" use="required"/>
+ <xsd:attribute name="process-name" type="xsd:string" use="required"/>
+ <xsd:attribute name="company-name" type="xsd:string" use="optional"/>
+ <xsd:attribute name="tool-id" type="xsd:string" use="optional"/>
+ <xsd:attribute name="tool" type="xsd:string" use="optional"/>
+ <xsd:attribute name="date" type="xsd:dateTime" use="optional"/>
+ <xsd:attribute name="job-id" type="xsd:string" use="optional"/>
+ <xsd:attribute name="contact-name" type="xsd:string" use="optional"/>
+ <xsd:attribute name="contact-email" type="xsd:string" use="optional"/>
+ <xsd:attribute name="contact-phone" type="xsd:string" use="optional"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="count-group">
+ <xsd:complexType>
+ <xsd:sequence maxOccurs="unbounded" minOccurs="0">
+ <xsd:element ref="xlf:count"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="count">
+ <xsd:complexType>
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:attribute name="count-type" type="xlf:AttrType_count-type" use="optional"/>
+ <xsd:attribute name="phase-name" type="xsd:string" use="optional"/>
+ <xsd:attribute default="word" name="unit" type="xlf:AttrType_unit" use="optional"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="context-group">
+ <xsd:complexType>
+ <xsd:sequence maxOccurs="unbounded">
+ <xsd:element ref="xlf:context"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="optional"/>
+ <xsd:attribute name="crc" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute name="purpose" type="xlf:AttrType_purpose" use="optional"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="context">
+ <xsd:complexType>
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:attribute name="context-type" type="xlf:AttrType_context-type" use="required"/>
+ <xsd:attribute default="no" name="match-mandatory" type="xlf:AttrType_YesNo" use="optional"/>
+ <xsd:attribute name="crc" type="xsd:NMTOKEN" use="optional"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="prop-group">
+ <xsd:complexType>
+ <xsd:sequence maxOccurs="unbounded">
+ <xsd:element ref="xlf:prop"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="optional"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="prop">
+ <xsd:complexType>
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:attribute name="prop-type" type="xsd:string" use="required"/>
+ <xsd:attribute ref="xml:lang" use="optional"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="tool">
+ <xsd:complexType mixed="true">
+ <xsd:sequence>
+ <xsd:any namespace="##any" processContents="skip" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="tool-id" type="xsd:string" use="required"/>
+ <xsd:attribute name="tool-name" type="xsd:string" use="required"/>
+ <xsd:attribute name="tool-version" type="xsd:string" use="optional"/>
+ <xsd:attribute name="tool-company" type="xsd:string" use="optional"/>
+ <xsd:anyAttribute namespace="##any" processContents="skip"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="body">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded" minOccurs="0">
+ <xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:group"/>
+ <xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:trans-unit"/>
+ <xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:bin-unit"/>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="group">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:sequence>
+ <xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:context-group"/>
+ <xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:count-group"/>
+ <xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:prop-group"/>
+ <xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:note"/>
+ <xsd:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="skip"/>
+ </xsd:sequence>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:group"/>
+ <xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:trans-unit"/>
+ <xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:bin-unit"/>
+ </xsd:choice>
+ </xsd:sequence>
+ <xsd:attribute name="id" type="xsd:string" use="optional"/>
+ <xsd:attribute name="datatype" type="xlf:AttrType_datatype" use="optional"/>
+ <xsd:attribute default="default" ref="xml:space" use="optional"/>
+ <xsd:attribute name="ts" type="xsd:string" use="optional"/>
+ <xsd:attribute name="restype" type="xlf:AttrType_restype" use="optional"/>
+ <xsd:attribute name="resname" type="xsd:string" use="optional"/>
+ <xsd:attribute name="extradata" type="xsd:string" use="optional"/>
+ <xsd:attribute name="extype" type="xsd:string" use="optional"/>
+ <xsd:attribute name="help-id" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute name="menu" type="xsd:string" use="optional"/>
+ <xsd:attribute name="menu-option" type="xsd:string" use="optional"/>
+ <xsd:attribute name="menu-name" type="xsd:string" use="optional"/>
+ <xsd:attribute name="coord" type="xlf:AttrType_Coordinates" use="optional"/>
+ <xsd:attribute name="font" type="xsd:string" use="optional"/>
+ <xsd:attribute name="css-style" type="xsd:string" use="optional"/>
+ <xsd:attribute name="style" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute name="exstyle" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute default="yes" name="translate" type="xlf:AttrType_YesNo" use="optional"/>
+ <xsd:attribute default="yes" name="reformat" type="xlf:AttrType_reformat" use="optional"/>
+ <xsd:attribute default="pixel" name="size-unit" type="xlf:AttrType_size-unit" use="optional"/>
+ <xsd:attribute name="maxwidth" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute name="minwidth" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute name="maxheight" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute name="minheight" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute name="maxbytes" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute name="minbytes" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute name="charclass" type="xsd:string" use="optional"/>
+ <xsd:attribute default="no" name="merged-trans" type="xlf:AttrType_YesNo" use="optional"/>
+ <xsd:anyAttribute namespace="##any" processContents="skip"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="trans-unit">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="xlf:source"/>
+ <xsd:element minOccurs="0" ref="xlf:seg-source"/>
+ <xsd:element minOccurs="0" ref="xlf:target"/>
+ <xsd:choice maxOccurs="unbounded" minOccurs="0">
+ <xsd:element ref="xlf:context-group"/>
+ <xsd:element ref="xlf:count-group"/>
+ <xsd:element ref="xlf:prop-group"/>
+ <xsd:element ref="xlf:note"/>
+ <xsd:element ref="xlf:alt-trans"/>
+ </xsd:choice>
+ <xsd:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="skip"/>
+ </xsd:sequence>
+ <xsd:attribute name="id" type="xsd:string" use="required"/>
+ <xsd:attribute name="approved" type="xlf:AttrType_YesNo" use="optional"/>
+ <xsd:attribute default="yes" name="translate" type="xlf:AttrType_YesNo" use="optional"/>
+ <xsd:attribute default="yes" name="reformat" type="xlf:AttrType_reformat" use="optional"/>
+ <xsd:attribute default="default" ref="xml:space" use="optional"/>
+ <xsd:attribute name="datatype" type="xlf:AttrType_datatype" use="optional"/>
+ <xsd:attribute name="ts" type="xsd:string" use="optional"/>
+ <xsd:attribute name="phase-name" type="xsd:string" use="optional"/>
+ <xsd:attribute name="restype" type="xlf:AttrType_restype" use="optional"/>
+ <xsd:attribute name="resname" type="xsd:string" use="optional"/>
+ <xsd:attribute name="extradata" type="xsd:string" use="optional"/>
+ <xsd:attribute name="extype" type="xsd:string" use="optional"/>
+ <xsd:attribute name="help-id" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute name="menu" type="xsd:string" use="optional"/>
+ <xsd:attribute name="menu-option" type="xsd:string" use="optional"/>
+ <xsd:attribute name="menu-name" type="xsd:string" use="optional"/>
+ <xsd:attribute name="coord" type="xlf:AttrType_Coordinates" use="optional"/>
+ <xsd:attribute name="font" type="xsd:string" use="optional"/>
+ <xsd:attribute name="css-style" type="xsd:string" use="optional"/>
+ <xsd:attribute name="style" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute name="exstyle" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute default="pixel" name="size-unit" type="xlf:AttrType_size-unit" use="optional"/>
+ <xsd:attribute name="maxwidth" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute name="minwidth" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute name="maxheight" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute name="minheight" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute name="maxbytes" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute name="minbytes" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute name="charclass" type="xsd:string" use="optional"/>
+ <xsd:attribute default="yes" name="merged-trans" type="xlf:AttrType_YesNo" use="optional"/>
+ <xsd:anyAttribute namespace="##any" processContents="skip"/>
+ </xsd:complexType>
+ <xsd:unique name="U_tu_segsrc_mid">
+ <xsd:selector xpath="./xlf:seg-source/xlf:mrk"/>
+ <xsd:field xpath="@mid"/>
+ </xsd:unique>
+ <xsd:keyref name="KR_tu_segsrc_mid" refer="xlf:U_tu_segsrc_mid">
+ <xsd:selector xpath="./xlf:target/xlf:mrk|./xlf:alt-trans"/>
+ <xsd:field xpath="@mid"/>
+ </xsd:keyref>
+ </xsd:element>
+ <xsd:element name="source">
+ <xsd:complexType mixed="true">
+ <xsd:group maxOccurs="unbounded" minOccurs="0" ref="xlf:ElemGroup_TextContent"/>
+ <xsd:attribute ref="xml:lang" use="optional"/>
+ <xsd:attribute name="ts" type="xsd:string" use="optional"/>
+ <xsd:anyAttribute namespace="##any" processContents="skip"/>
+ </xsd:complexType>
+ <xsd:unique name="U_source_bpt_rid">
+ <xsd:selector xpath=".//xlf:bpt"/>
+ <xsd:field xpath="@rid"/>
+ </xsd:unique>
+ <xsd:keyref name="KR_source_ept_rid" refer="xlf:U_source_bpt_rid">
+ <xsd:selector xpath=".//xlf:ept"/>
+ <xsd:field xpath="@rid"/>
+ </xsd:keyref>
+ <xsd:unique name="U_source_bx_rid">
+ <xsd:selector xpath=".//xlf:bx"/>
+ <xsd:field xpath="@rid"/>
+ </xsd:unique>
+ <xsd:keyref name="KR_source_ex_rid" refer="xlf:U_source_bx_rid">
+ <xsd:selector xpath=".//xlf:ex"/>
+ <xsd:field xpath="@rid"/>
+ </xsd:keyref>
+ </xsd:element>
+ <xsd:element name="seg-source">
+ <xsd:complexType mixed="true">
+ <xsd:group maxOccurs="unbounded" minOccurs="0" ref="xlf:ElemGroup_TextContent"/>
+ <xsd:attribute ref="xml:lang" use="optional"/>
+ <xsd:attribute name="ts" type="xsd:string" use="optional"/>
+ <xsd:anyAttribute namespace="##any" processContents="skip"/>
+ </xsd:complexType>
+ <xsd:unique name="U_segsrc_bpt_rid">
+ <xsd:selector xpath=".//xlf:bpt"/>
+ <xsd:field xpath="@rid"/>
+ </xsd:unique>
+ <xsd:keyref name="KR_segsrc_ept_rid" refer="xlf:U_segsrc_bpt_rid">
+ <xsd:selector xpath=".//xlf:ept"/>
+ <xsd:field xpath="@rid"/>
+ </xsd:keyref>
+ <xsd:unique name="U_segsrc_bx_rid">
+ <xsd:selector xpath=".//xlf:bx"/>
+ <xsd:field xpath="@rid"/>
+ </xsd:unique>
+ <xsd:keyref name="KR_segsrc_ex_rid" refer="xlf:U_segsrc_bx_rid">
+ <xsd:selector xpath=".//xlf:ex"/>
+ <xsd:field xpath="@rid"/>
+ </xsd:keyref>
+ </xsd:element>
+ <xsd:element name="target">
+ <xsd:complexType mixed="true">
+ <xsd:group maxOccurs="unbounded" minOccurs="0" ref="xlf:ElemGroup_TextContent"/>
+ <xsd:attribute name="state" type="xlf:AttrType_state" use="optional"/>
+ <xsd:attribute name="state-qualifier" type="xlf:AttrType_state-qualifier" use="optional"/>
+ <xsd:attribute name="phase-name" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute ref="xml:lang" use="optional"/>
+ <xsd:attribute name="ts" type="xsd:string" use="optional"/>
+ <xsd:attribute name="restype" type="xlf:AttrType_restype" use="optional"/>
+ <xsd:attribute name="resname" type="xsd:string" use="optional"/>
+ <xsd:attribute name="coord" type="xlf:AttrType_Coordinates" use="optional"/>
+ <xsd:attribute name="font" type="xsd:string" use="optional"/>
+ <xsd:attribute name="css-style" type="xsd:string" use="optional"/>
+ <xsd:attribute name="style" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute name="exstyle" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute default="yes" name="equiv-trans" type="xlf:AttrType_YesNo" use="optional"/>
+ <xsd:anyAttribute namespace="##any" processContents="skip"/>
+ </xsd:complexType>
+ <xsd:unique name="U_target_bpt_rid">
+ <xsd:selector xpath=".//xlf:bpt"/>
+ <xsd:field xpath="@rid"/>
+ </xsd:unique>
+ <xsd:keyref name="KR_target_ept_rid" refer="xlf:U_target_bpt_rid">
+ <xsd:selector xpath=".//xlf:ept"/>
+ <xsd:field xpath="@rid"/>
+ </xsd:keyref>
+ <xsd:unique name="U_target_bx_rid">
+ <xsd:selector xpath=".//xlf:bx"/>
+ <xsd:field xpath="@rid"/>
+ </xsd:unique>
+ <xsd:keyref name="KR_target_ex_rid" refer="xlf:U_target_bx_rid">
+ <xsd:selector xpath=".//xlf:ex"/>
+ <xsd:field xpath="@rid"/>
+ </xsd:keyref>
+ </xsd:element>
+ <xsd:element name="alt-trans">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element minOccurs="0" ref="xlf:source"/>
+ <xsd:element minOccurs="0" ref="xlf:seg-source"/>
+ <xsd:element maxOccurs="unbounded" ref="xlf:target"/>
+ <xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:context-group"/>
+ <xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:prop-group"/>
+ <xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:note"/>
+ <xsd:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="skip"/>
+ </xsd:sequence>
+ <xsd:attribute name="match-quality" type="xsd:string" use="optional"/>
+ <xsd:attribute name="tool-id" type="xsd:string" use="optional"/>
+ <xsd:attribute name="tool" type="xsd:string" use="optional"/>
+ <xsd:attribute name="crc" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute ref="xml:lang" use="optional"/>
+ <xsd:attribute name="origin" type="xsd:string" use="optional"/>
+ <xsd:attribute name="datatype" type="xlf:AttrType_datatype" use="optional"/>
+ <xsd:attribute default="default" ref="xml:space" use="optional"/>
+ <xsd:attribute name="ts" type="xsd:string" use="optional"/>
+ <xsd:attribute name="restype" type="xlf:AttrType_restype" use="optional"/>
+ <xsd:attribute name="resname" type="xsd:string" use="optional"/>
+ <xsd:attribute name="extradata" type="xsd:string" use="optional"/>
+ <xsd:attribute name="extype" type="xsd:string" use="optional"/>
+ <xsd:attribute name="help-id" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute name="menu" type="xsd:string" use="optional"/>
+ <xsd:attribute name="menu-option" type="xsd:string" use="optional"/>
+ <xsd:attribute name="menu-name" type="xsd:string" use="optional"/>
+ <xsd:attribute name="mid" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute name="coord" type="xlf:AttrType_Coordinates" use="optional"/>
+ <xsd:attribute name="font" type="xsd:string" use="optional"/>
+ <xsd:attribute name="css-style" type="xsd:string" use="optional"/>
+ <xsd:attribute name="style" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute name="exstyle" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute name="phase-name" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute default="proposal" name="alttranstype" type="xlf:AttrType_alttranstype" use="optional"/>
+ <xsd:anyAttribute namespace="##any" processContents="skip"/>
+ </xsd:complexType>
+ <xsd:unique name="U_at_segsrc_mid">
+ <xsd:selector xpath="./xlf:seg-source/xlf:mrk"/>
+ <xsd:field xpath="@mid"/>
+ </xsd:unique>
+ <xsd:keyref name="KR_at_segsrc_mid" refer="xlf:U_at_segsrc_mid">
+ <xsd:selector xpath="./xlf:target/xlf:mrk"/>
+ <xsd:field xpath="@mid"/>
+ </xsd:keyref>
+ </xsd:element>
+ <xsd:element name="bin-unit">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="xlf:bin-source"/>
+ <xsd:element minOccurs="0" ref="xlf:bin-target"/>
+ <xsd:choice maxOccurs="unbounded" minOccurs="0">
+ <xsd:element ref="xlf:context-group"/>
+ <xsd:element ref="xlf:count-group"/>
+ <xsd:element ref="xlf:prop-group"/>
+ <xsd:element ref="xlf:note"/>
+ <xsd:element ref="xlf:trans-unit"/>
+ </xsd:choice>
+ <xsd:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="skip"/>
+ </xsd:sequence>
+ <xsd:attribute name="id" type="xsd:string" use="required"/>
+ <xsd:attribute name="mime-type" type="xlf:mime-typeValueList" use="required"/>
+ <xsd:attribute name="approved" type="xlf:AttrType_YesNo" use="optional"/>
+ <xsd:attribute default="yes" name="translate" type="xlf:AttrType_YesNo" use="optional"/>
+ <xsd:attribute default="yes" name="reformat" type="xlf:AttrType_reformat" use="optional"/>
+ <xsd:attribute name="ts" type="xsd:string" use="optional"/>
+ <xsd:attribute name="restype" type="xlf:AttrType_restype" use="optional"/>
+ <xsd:attribute name="resname" type="xsd:string" use="optional"/>
+ <xsd:attribute name="phase-name" type="xsd:string" use="optional"/>
+ <xsd:anyAttribute namespace="##any" processContents="skip"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="bin-source">
+ <xsd:complexType>
+ <xsd:choice>
+ <xsd:element ref="xlf:internal-file"/>
+ <xsd:element ref="xlf:external-file"/>
+ </xsd:choice>
+ <xsd:attribute name="ts" type="xsd:string" use="optional"/>
+ <xsd:anyAttribute namespace="##any" processContents="skip"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="bin-target">
+ <xsd:complexType>
+ <xsd:choice>
+ <xsd:element ref="xlf:internal-file"/>
+ <xsd:element ref="xlf:external-file"/>
+ </xsd:choice>
+ <xsd:attribute name="mime-type" type="xlf:mime-typeValueList" use="optional"/>
+ <xsd:attribute name="ts" type="xsd:string" use="optional"/>
+ <xsd:attribute name="state" type="xlf:AttrType_state" use="optional"/>
+ <xsd:attribute name="state-qualifier" type="xlf:AttrType_state-qualifier" use="optional"/>
+ <xsd:attribute name="phase-name" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute name="restype" type="xlf:AttrType_restype" use="optional"/>
+ <xsd:attribute name="resname" type="xsd:string" use="optional"/>
+ <xsd:anyAttribute namespace="##any" processContents="skip"/>
+ </xsd:complexType>
+ </xsd:element>
+ <!-- Element for inline codes -->
+ <xsd:element name="g">
+ <xsd:complexType mixed="true">
+ <xsd:group maxOccurs="unbounded" minOccurs="0" ref="xlf:ElemGroup_TextContent"/>
+ <xsd:attribute name="ctype" type="xlf:AttrType_InlineDelimiters" use="optional"/>
+ <xsd:attribute default="yes" name="clone" type="xlf:AttrType_YesNo" use="optional"/>
+ <xsd:attributeGroup ref="xlf:AttrGroup_TextContent"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="x">
+ <xsd:complexType>
+ <xsd:attribute name="ctype" type="xlf:AttrType_InlinePlaceholders" use="optional"/>
+ <xsd:attribute default="yes" name="clone" type="xlf:AttrType_YesNo" use="optional"/>
+ <xsd:attributeGroup ref="xlf:AttrGroup_TextContent"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="bx">
+ <xsd:complexType>
+ <xsd:attribute name="rid" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute name="ctype" type="xlf:AttrType_InlineDelimiters" use="optional"/>
+ <xsd:attribute default="yes" name="clone" type="xlf:AttrType_YesNo" use="optional"/>
+ <xsd:attributeGroup ref="xlf:AttrGroup_TextContent"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="ex">
+ <xsd:complexType>
+ <xsd:attribute name="rid" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attributeGroup ref="xlf:AttrGroup_TextContent"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="ph">
+ <xsd:complexType mixed="true">
+ <xsd:sequence maxOccurs="unbounded" minOccurs="0">
+ <xsd:element ref="xlf:sub"/>
+ </xsd:sequence>
+ <xsd:attribute name="ctype" type="xlf:AttrType_InlinePlaceholders" use="optional"/>
+ <xsd:attribute name="crc" type="xsd:string" use="optional"/>
+ <xsd:attribute name="assoc" type="xlf:AttrType_assoc" use="optional"/>
+ <xsd:attributeGroup ref="xlf:AttrGroup_TextContent"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="bpt">
+ <xsd:complexType mixed="true">
+ <xsd:sequence maxOccurs="unbounded" minOccurs="0">
+ <xsd:element ref="xlf:sub"/>
+ </xsd:sequence>
+ <xsd:attribute name="rid" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute name="ctype" type="xlf:AttrType_InlineDelimiters" use="optional"/>
+ <xsd:attribute name="crc" type="xsd:string" use="optional"/>
+ <xsd:attributeGroup ref="xlf:AttrGroup_TextContent"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="ept">
+ <xsd:complexType mixed="true">
+ <xsd:sequence maxOccurs="unbounded" minOccurs="0">
+ <xsd:element ref="xlf:sub"/>
+ </xsd:sequence>
+ <xsd:attribute name="rid" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute name="crc" type="xsd:string" use="optional"/>
+ <xsd:attributeGroup ref="xlf:AttrGroup_TextContent"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="it">
+ <xsd:complexType mixed="true">
+ <xsd:sequence maxOccurs="unbounded" minOccurs="0">
+ <xsd:element ref="xlf:sub"/>
+ </xsd:sequence>
+ <xsd:attribute name="pos" type="xlf:AttrType_Position" use="required"/>
+ <xsd:attribute name="rid" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute name="ctype" type="xlf:AttrType_InlineDelimiters" use="optional"/>
+ <xsd:attribute name="crc" type="xsd:string" use="optional"/>
+ <xsd:attributeGroup ref="xlf:AttrGroup_TextContent"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="sub">
+ <xsd:complexType mixed="true">
+ <xsd:group maxOccurs="unbounded" minOccurs="0" ref="xlf:ElemGroup_TextContent"/>
+ <xsd:attribute name="datatype" type="xlf:AttrType_datatype" use="optional"/>
+ <xsd:attribute name="ctype" type="xlf:AttrType_InlineDelimiters" use="optional"/>
+ <xsd:attribute name="xid" type="xsd:string" use="optional"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="mrk">
+ <xsd:complexType mixed="true">
+ <xsd:group maxOccurs="unbounded" minOccurs="0" ref="xlf:ElemGroup_TextContent"/>
+ <xsd:attribute name="mtype" type="xlf:AttrType_mtype" use="required"/>
+ <xsd:attribute name="mid" type="xsd:NMTOKEN" use="optional"/>
+ <xsd:attribute name="comment" type="xsd:string" use="optional"/>
+ <xsd:attribute name="ts" type="xsd:string" use="optional"/>
+ <xsd:anyAttribute namespace="##any" processContents="skip"/>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema>
diff --git a/Translate/data/xliff-template.xml b/Translate/data/xliff-template.xml
new file mode 100644
index 00000000..ddbd89cd
--- /dev/null
+++ b/Translate/data/xliff-template.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+ <file source-language="en" datatype="plaintext" original="unknown">
+ <body>
+ </body>
+ </file>
+</xliff>
diff --git a/Translate/extension.json b/Translate/extension.json
new file mode 100644
index 00000000..22b274cd
--- /dev/null
+++ b/Translate/extension.json
@@ -0,0 +1,1402 @@
+{
+ "name": "Translate",
+ "type": "specialpage",
+ "author": [
+ "Niklas Laxström",
+ "Siebrand Mazeland",
+ "Santhosh Thottingal",
+ "Amir E. Aharoni",
+ "Abijeet Patro",
+ "..."
+ ],
+ "version": "2022-10-21 [https://www.mediawiki.org/wiki/MLEB MLEB 2022.10]",
+ "url": "https://www.mediawiki.org/wiki/Extension:Translate",
+ "descriptionmsg": "translate-desc",
+ "namemsg": "translate-extensionname",
+ "license-name": "GPL-2.0-or-later",
+ "requires": {
+ "MediaWiki": ">= 1.37.2",
+ "extensions": {
+ "UniversalLanguageSelector": "*"
+ }
+ },
+ "callback": "TranslateHooks::setupTranslate",
+ "load_composer_autoloader": true,
+ "ServiceWiringFiles": [
+ "src/ServiceWiring.php"
+ ],
+ "namespaces": [
+ {
+ "id": 1198,
+ "constant": "NS_TRANSLATIONS",
+ "name": "Translations"
+ },
+ {
+ "id": 1199,
+ "constant": "NS_TRANSLATIONS_TALK",
+ "name": "Translations_talk"
+ }
+ ],
+ "ExtensionMessagesFiles": {
+ "TranslateAlias": "Translate.alias.php",
+ "TranslateMagic": "Translate.i18n.magic.php"
+ },
+ "MessagesDirs": {
+ "PageTranslation": [
+ "i18n/pagetranslation"
+ ],
+ "Translate": [
+ "i18n/core"
+ ],
+ "TranslateApi": [
+ "i18n/api"
+ ],
+ "TranslateSandbox": [
+ "i18n/sandbox"
+ ],
+ "TranslateSearch": [
+ "i18n/search"
+ ]
+ },
+ "ContentHandlers": {
+ "translate-messagebundle": "\\MediaWiki\\Extension\\Translate\\MessageBundleTranslation\\MessageBundleContentHandler"
+ },
+ "AutoloadClasses": {
+ "AggregateMessageGroup": "messagegroups/AggregateMessageGroup.php",
+ "AggregateMessageGroupLoader": "messagegroups/loaders/AggregateMessageGroupLoader.php",
+ "AmdFFS": "ffs/AmdFFS.php",
+ "AndroidXmlFFS": "ffs/AndroidXmlFFS.php",
+ "AppleFFS": "ffs/AppleFFS.php",
+ "AppleInfoPlistFfs": "ffs/AppleInfoPlistFfs.php",
+ "CachedMessageGroupLoader": "messagegroups/loaders/CachedMessageGroupLoader.php",
+ "CachedMessageIndex": "utils/MessageIndex.php",
+ "CDBMessageIndex": "utils/MessageIndex.php",
+ "CrossLanguageTranslationSearchQuery": "ttmserver/CrossLanguageTranslationSearchQuery.php",
+ "DatabaseMessageIndex": "utils/MessageIndex.php",
+ "DatabaseTTMServer": "ttmserver/DatabaseTTMServer.php",
+ "DtdFFS": "ffs/DtdFFS.php",
+ "ElasticSearchTTMServer": "ttmserver/ElasticSearchTTMServer.php",
+ "ExternalMessageSourceStateComparator": "utils/ExternalMessageSourceStateComparator.php",
+ "FakeTTMServer": "ttmserver/FakeTTMServer.php",
+ "FatMessage": "Message.php",
+ "FFS": "ffs/FFS.php",
+ "FileBasedMessageGroup": "messagegroups/FileBasedMessageGroup.php",
+ "FileBasedMessageGroupLoader": "messagegroups/loaders/FileBasedMessageGroupLoader.php",
+ "FlatPhpFFS": "ffs/FlatPhpFFS.php",
+ "FuzzyLikeThis": "ttmserver/FuzzyLikeThis.php",
+ "GettextFFS": "ffs/GettextFFS.php",
+ "GettextParseException": "ffs/GettextParseException.php",
+ "GettextPluralException": "ffs/GettextPluralException.php",
+ "HashMessageIndex": "utils/MessageIndex.php",
+ "IniFFS": "ffs/IniFFS.php",
+ "JavaFFS": "ffs/JavaFFS.php",
+ "JavaScriptFFS": "ffs/JavaScriptFFS.php",
+ "JsonFFS": "ffs/JsonFFS.php",
+ "MediaWikiExtensionMessageGroup": "messagegroups/MediaWikiExtensionMessageGroup.php",
+ "MessageChangeStorage": "utils/MessageChangeStorage.php",
+ "MessageCollection": "MessageCollection.php",
+ "MessageDefinitions": "MessageCollection.php",
+ "MessageGroup": "messagegroups/MessageGroup.php",
+ "MessageGroupBase": "messagegroups/MessageGroupBase.php",
+ "MessageGroupCache": "utils/MessageGroupCache.php",
+ "MessageGroupConfigurationParser": "MessageGroupConfigurationParser.php",
+ "MessageGroupLoader": "messagegroups/loaders/MessageGroupLoader.php",
+ "MessageGroupOld": "messagegroups/MessageGroupOld.php",
+ "MessageGroups": "MessageGroups.php",
+ "MessageGroupStates": "utils/MessageGroupStates.php",
+ "MessageGroupStatesUpdaterJob": "utils/MessageGroupStatesUpdaterJob.php",
+ "MessageGroupStats": "utils/MessageGroupStats.php",
+ "MessageGroupStatsRebuildJob": "utils/MessageGroupStatsRebuildJob.php",
+ "MessageGroupWANCache": "utils/MessageGroupWANCache.php",
+ "MessageHandle": "utils/MessageHandle.php",
+ "MessageIndex": "utils/MessageIndex.php",
+ "MessageIndexException": "utils/MessageIndexException.php",
+ "MessageIndexRebuildJob": "utils/MessageIndexRebuildJob.php",
+ "MessageUpdateJob": "utils/MessageUpdateJob.php",
+ "MetaYamlSchemaExtender": "MetaYamlSchemaExtender.php",
+ "PHPVariableLoader": "utils/PHPVariableLoader.php",
+ "PremadeIntuitionTextdomains": "ffs/PremadeIntuitionTextdomains.php",
+ "PremadeMediawikiExtensionGroups": "ffs/PremadeMediawikiExtensionGroups.php",
+ "ReadableTTMServer": "ttmserver/Interfaces.php",
+ "RecentAdditionsMessageGroup": "messagegroups/RecentAdditionsMessageGroup.php",
+ "RecentMessageGroup": "messagegroups/RecentMessageGroup.php",
+ "RemoteTTMServer": "ttmserver/RemoteTTMServer.php",
+ "SandboxMessageGroup": "messagegroups/SandboxMessageGroup.php",
+ "SearchableTTMServer": "ttmserver/Interfaces.php",
+ "SerializedMessageIndex": "utils/MessageIndex.php",
+ "SimpleFFS": "ffs/SimpleFFS.php",
+ "ThinMessage": "Message.php",
+ "TMessage": "Message.php",
+ "TranslatablePageMessageGroupStore": "messagegroups/loaders/TranslatablePageMessageGroupStore.php",
+ "TranslateCliLogger": "scripts/TranslateCliLogger.php",
+ "TranslateEditAddons": "TranslateEditAddons.php",
+ "TranslateHooks": "TranslateHooks.php",
+ "TranslateLogFormatter": "utils/TranslateLogFormatter.php",
+ "TranslateMetadata": "utils/TranslateMetadata.php",
+ "TranslatablePage": "src/PageTranslation/TranslatablePage.php",
+ "MediaWiki\\Extension\\Translate\\PageTranslation\\TranslatablePage": "src/PageTranslation/TranslatablePage.php",
+ "TranslatePreferences": "utils/TranslatePreferences.php",
+ "TranslateRcFilter": "utils/TranslateRcFilter.php",
+ "TranslateSandbox": "utils/TranslateSandbox.php",
+ "TranslateSandboxEmailJob": "utils/TranslateSandboxEmailJob.php",
+ "TranslateStatsOutput": "scripts/TranslateStatsOutput.php",
+ "TranslateToolbox": "utils/TranslateToolbox.php",
+ "TranslateUtils": "TranslateUtils.php",
+ "TranslateYaml": "utils/TranslateYaml.php",
+ "TranslationStats": "utils/TranslationStats.php",
+ "TTMServer": "ttmserver/TTMServer.php",
+ "TTMServerException": "ttmserver/Exceptions.php",
+ "TTMServerMessageUpdateJob": "ttmserver/TTMServerMessageUpdateJob.php",
+ "WikiMessageGroup": "messagegroups/WikiMessageGroup.php",
+ "WikiPageMessageGroup": "messagegroups/WikiPageMessageGroup.php",
+ "WorkflowStatesMessageGroup": "messagegroups/WorkflowStatesMessageGroup.php",
+ "WorkflowStatesMessageGroupLoader": "messagegroups/loaders/WorkflowStatesMessageGroupLoader.php",
+ "WritableTTMServer": "ttmserver/Interfaces.php",
+ "XliffFFS": "ffs/XliffFFS.php",
+ "YamlFFS": "ffs/YamlFFS.php"
+ },
+ "AutoloadNamespaces": {
+ "MediaWiki\\Extension\\Translate\\": "src/"
+ },
+ "TestAutoloadClasses": {
+ "AnotherMockTranslateValidator": "tests/phpunit/mocks/MockValidators.php",
+ "BaseValidatorTestCase": "tests/phpunit/unit/Validation/Validators/BaseValidatorTestCase.php",
+ "MockCacheMessageGroupLoader": "tests/phpunit/mocks/MockCacheMessageGroupLoader.php",
+ "MockCustomInsertableSuggester": "tests/phpunit/mocks/MockCustomInsertableSuggester.php",
+ "MockFileBasedMessageGroup": "tests/phpunit/mocks/MockFileBasedMessageGroup.php",
+ "MockMessageCollectionForExport": "tests/phpunit/mocks/MockMessageCollectionForExport.php",
+ "MockTranslateValidator": "tests/phpunit/mocks/MockValidators.php",
+ "MockWikiMessageGroup": "tests/phpunit/mocks/MockWikiMessageGroup.php",
+ "MockWikiValidationMessageGroup": "tests/phpunit/mocks/MockWikiMessageGroup.php",
+ "TranslatablePageTestTrait": "tests/phpunit/helpers/TranslatablePageTestTrait.php"
+ },
+ "TestAutoloadNamespaces": {
+ "MediaWiki\\Extension\\Translate\\": "tests/phpunit/unit/"
+ },
+ "Hooks": {
+ "LoadExtensionSchemaUpdates": "TranslateHooks::schemaUpdates",
+ "ParserTestTables": "TranslateHooks::parserTestTables",
+ "PageContentLanguage": "TranslateHooks::onPageContentLanguage",
+ "EditPage::showEditForm:initial": "legacyInterface",
+ "AlternateEdit": "legacyInterface",
+ "getUserPermissionsErrorsExpensive": "TranslateEditAddons::disallowLangTranslations",
+ "LanguageGetTranslatedLanguageNames": "TranslateHooks::translateMessageDocumentationLanguage",
+ "TranslateSupportedLanguages": "TranslateHooks::translateMessageDocumentationLanguage",
+ "ArticlePrepareTextForEdit": "TranslateEditAddons::disablePreSaveTransform",
+ "ParserFirstCallInit": "TranslateHooks::setupTranslateParserFunction",
+ "UserGetReservedNames": "TranslateHooks::onUserGetReservedNames",
+ "ParserAfterTidy": "TranslateHooks::preventCategorization",
+ "OutputPageParserOutput": "TranslateHooks::showFakeCategories",
+ "Translate:newTranslation": "TranslateEditAddons::updateTransverTag",
+ "SkinTemplateNavigation::Universal": [
+ "MediaWiki\\Extension\\Translate\\TranslatorInterface\\TranslateSpecialPage::tabify",
+ "MediaWiki\\Extension\\Translate\\Synchronization\\ManageGroupsSpecialPage::tabify"
+ ],
+ "GetPreferences": "TranslatePreferences::translationAssistLanguages",
+ "ChangesListSpecialPageQuery": "TranslateRcFilter::translationFilter",
+ "SpecialRecentChangesPanel": "TranslateRcFilter::translationFilterForm",
+ "ChangesListSpecialPageStructuredFilters": "TranslateRcFilter::onChangesListSpecialPageStructuredFilters",
+ "AbortEmailNotification": "TranslateHooks::onAbortEmailNotificationReview",
+ "ArticleDeleteComplete": "TTMServer::onDelete",
+ "TranslateEventMessageMembershipChange": "TTMServer::onGroupChange",
+ "ArticleContentOnDiff": "legacyInterface",
+ "SpecialSearchProfiles": "TranslateHooks::searchProfile",
+ "SpecialSearchProfileForm": "TranslateHooks::searchProfileForm",
+ "SpecialSearchSetupEngine": "TranslateHooks::searchProfileSetupEngine",
+ "TitleIsAlwaysKnown": "TranslateHooks::onTitleIsAlwaysKnown",
+ "MakeGlobalVariablesScript": "TranslateHooks::addConfig",
+ "TranslateEventTranslationReview": [
+ "MessageGroupStats::clear",
+ "MessageGroupStatesUpdaterJob::onChange"
+ ],
+ "TranslateInitGroupLoaders": [
+ "TranslatablePageMessageGroupStore::registerLoader",
+ "WorkflowStatesMessageGroupLoader::registerLoader",
+ "AggregateMessageGroupLoader::registerLoader",
+ "FileBasedMessageGroupLoader::registerLoader",
+ "MediaWiki\\Extension\\Translate\\MessageBundleTranslation\\Hooks::onTranslateInitGroupLoaders"
+ ],
+ "AdminLinks": "TranslateHooks::onAdminLinks",
+ "MergeAccountFromTo": "TranslateHooks::onMergeAccountFromTo",
+ "DeleteAccount": "TranslateHooks::onDeleteAccount",
+ "AbuseFilterAlterVariables": "TranslateHooks::onAbuseFilterAlterVariables",
+ "AbuseFilter-computeVariable": "TranslateHooks::onAbuseFilterComputeVariable",
+ "AbuseFilter-builder": "TranslateHooks::onAbuseFilterBuilder",
+ "EditFilterMergedContent": [
+ "TranslateHooks::validateMessage",
+ "messageBundle"
+ ],
+ "PageSaveComplete": "messageBundle",
+ "RevisionRecordInserted": "main"
+ },
+ "HookHandlers": {
+ "main": {
+ "class": "TranslateHooks",
+ "services": [
+ "RevisionLookup",
+ "DBLoadBalancer"
+ ]
+ },
+ "legacyInterface": {
+ "class": "MediaWiki\\Extension\\Translate\\TranslatorInterface\\LegacyInterfaceHookHandler",
+ "services": [
+ "LanguageFactory"
+ ]
+ },
+ "messageBundle": {
+ "factory": "MediaWiki\\Extension\\Translate\\MessageBundleTranslation\\Hooks::getInstance"
+ }
+ },
+ "SpecialPages": {
+ "Translate": {
+ "class": "\\MediaWiki\\Extension\\Translate\\TranslatorInterface\\TranslateSpecialPage",
+ "services": [
+ "ContentLanguage",
+ "LanguageFactory",
+ "LanguageNameUtils"
+ ]
+ },
+ "Translations": {
+ "class": "\\MediaWiki\\Extension\\Translate\\TranslatorInterface\\TranslationsSpecialPage",
+ "services": [
+ "ContentLanguage",
+ "LanguageNameUtils"
+ ]
+ },
+ "TranslationStats": {
+ "class": "\\MediaWiki\\Extension\\Translate\\Statistics\\TranslationStatsSpecialPage",
+ "services": [
+ "Translate:TranslationStatsDataProvider"
+ ]
+ },
+ "LanguageStats": {
+ "class": "\\MediaWiki\\Extension\\Translate\\Statistics\\LanguageStatsSpecialPage",
+ "services": [
+ "LinkBatchFactory",
+ "Translate:ProgressStatsTableFactory",
+ "LanguageNameUtils",
+ "JobQueueGroup",
+ "DBLoadBalancer"
+ ]
+ },
+ "MessageGroupStats": {
+ "class": "\\MediaWiki\\Extension\\Translate\\Statistics\\MessageGroupStatsSpecialPage",
+ "services": [
+ "Translate:ProgressStatsTableFactory",
+ "JobQueueGroup",
+ "DBLoadBalancer"
+ ]
+ },
+ "ImportTranslations": {
+ "class": "\\MediaWiki\\Extension\\Translate\\Synchronization\\ImportTranslationsSpecialPage",
+ "services": [
+ "MainObjectStash"
+ ]
+ },
+ "ExportTranslations": {
+ "class": "\\MediaWiki\\Extension\\Translate\\Synchronization\\ExportTranslationsSpecialPage",
+ "services": [
+ "TitleFormatter",
+ "Parser"
+ ]
+ },
+ "ManageMessageGroups": {
+ "class": "\\MediaWiki\\Extension\\Translate\\Synchronization\\ManageGroupsSpecialPage",
+ "services": [
+ "ContentLanguage",
+ "NamespaceInfo",
+ "RevisionLookup",
+ "Translate:GroupSynchronizationCache",
+ "JobQueueGroup",
+ "Translate:MessageIndex"
+ ]
+ },
+ "SupportedLanguages": {
+ "class": "\\MediaWiki\\Extension\\Translate\\Statistics\\ActiveLanguagesSpecialPage",
+ "services": [
+ "MainConfig",
+ "Translate:TranslatorActivity",
+ "LanguageNameUtils",
+ "DBLoadBalancer",
+ "Translate:ConfigHelper",
+ "ContentLanguage",
+ "Translate:ProgressStatsTableFactory"
+ ]
+ },
+ "AggregateGroups": {
+ "class": "\\MediaWiki\\Extension\\Translate\\MessageGroupProcessing\\AggregateGroupsSpecialPage",
+ "services": [
+ "LinkBatchFactory"
+ ]
+ },
+ "SearchTranslations": {
+ "class": "\\MediaWiki\\Extension\\Translate\\TtmServer\\SearchTranslationsSpecialPage",
+ "services": [
+ "Translate:TtmServerFactory"
+ ]
+ }
+ },
+ "APIListModules": {
+ "messagecollection": {
+ "class": "MediaWiki\\Extension\\Translate\\MessageLoading\\QueryMessageCollectionActionApi",
+ "services": [
+ "Translate:ConfigHelper",
+ "LanguageNameUtils",
+ "DBLoadBalancer"
+ ]
+ }
+ },
+ "APIMetaModules": {
+ "languagestats": {
+ "class": "\\MediaWiki\\Extension\\Translate\\Statistics\\QueryLanguageStatsActionApi",
+ "services": [
+ "JobQueueGroup"
+ ]
+ },
+ "managemessagegroups": "MediaWiki\\Extension\\Translate\\MessageGroupProcessing\\QueryManageMessageGroupsActionApi",
+ "messagegroups": {
+ "class": "MediaWiki\\Extension\\Translate\\MessageGroupProcessing\\QueryMessageGroupsActionApi",
+ "services": [
+ "HookContainer"
+ ]
+ },
+ "messagegroupstats": {
+ "class": "\\MediaWiki\\Extension\\Translate\\Statistics\\QueryMessageGroupStatsActionApi",
+ "services": [
+ "JobQueueGroup"
+ ]
+ },
+ "messagetranslations": "MediaWiki\\Extension\\Translate\\MessageLoading\\QueryMessageTranslationsActionApi"
+ },
+ "APIModules": {
+ "aggregategroups": {
+ "class": "MediaWiki\\Extension\\Translate\\MessageGroupProcessing\\AggregateGroupsActionApi",
+ "services": [
+ "JobQueueGroup"
+ ]
+ },
+ "groupreview": {
+ "class": "MediaWiki\\Extension\\Translate\\MessageGroupProcessing\\GroupReviewActionApi",
+ "services": [
+ "LanguageNameUtils",
+ "Translate:MessageGroupReview"
+ ]
+ },
+ "managemessagegroups": "\\MediaWiki\\Extension\\Translate\\MessageGroupProcessing\\ManageMessageGroupsActionApi",
+ "translationaids": "\\MediaWiki\\Extension\\Translate\\TranslatorInterface\\Aid\\TranslationAidsActionApi",
+ "translationentitysearch": {
+ "class": "\\MediaWiki\\Extension\\Translate\\TranslatorInterface\\TranslationEntitySearchActionApi",
+ "services": [
+ "Translate:EntitySearch"
+ ]
+ },
+ "translationreview": {
+ "class": "\\MediaWiki\\Extension\\Translate\\TranslatorInterface\\ReviewTranslationActionApi",
+ "services": [
+ "RevisionLookup",
+ "TitleFormatter",
+ "DBLoadBalancer"
+ ]
+ },
+ "translationcheck": "\\MediaWiki\\Extension\\Translate\\Validation\\CheckTranslationActionApi",
+ "translationstats": "\\MediaWiki\\Extension\\Translate\\Statistics\\QueryTranslationStatsActionApi",
+ "managegroupsynchronizationcache": {
+ "class": "\\MediaWiki\\Extension\\Translate\\Synchronization\\ManageGroupSynchronizationCacheActionApi",
+ "services": [
+ "Translate:GroupSynchronizationCache"
+ ]
+ },
+ "ttmserver": {
+ "class": "\\MediaWiki\\Extension\\Translate\\TtmServer\\TtmServerActionApi",
+ "services": [
+ "Translate:TtmServerFactory",
+ "MainConfig"
+ ]
+ },
+ "searchtranslations": {
+ "class": "\\MediaWiki\\Extension\\Translate\\TtmServer\\SearchTranslationsActionApi",
+ "services": [
+ "MainConfig",
+ "Translate:TtmServerFactory"
+ ]
+ }
+ },
+ "JobClasses": {
+ "MessageGroupStatesUpdaterJob": "MessageGroupStatesUpdaterJob",
+ "MessageGroupStatsRebuildJob": "MessageGroupStatsRebuildJob",
+ "MessageIndexRebuildJob": "MessageIndexRebuildJob",
+ "MessageUpdateJob": "MessageUpdateJob",
+ "TTMServerMessageUpdateJob": "TTMServerMessageUpdateJob",
+ "UpdateMessageBundle": "\\MediaWiki\\Extension\\Translate\\MessageBundleTranslation\\UpdateMessageBundleJob",
+ "UpdateTranslatorActivity": "\\MediaWiki\\Extension\\Translate\\Statistics\\UpdateTranslatorActivityJob"
+ },
+ "LogTypes": [
+ "translationreview"
+ ],
+ "LogActionsHandlers": {
+ "translationreview/message": "TranslateLogFormatter",
+ "translationreview/group": "TranslateLogFormatter"
+ },
+ "ActionFilteredLogs": {
+ "translationreview": {
+ "message": [
+ "message"
+ ],
+ "group": [
+ "group"
+ ]
+ }
+ },
+ "ResourceFileModulePaths": {
+ "localBasePath": "",
+ "remoteExtPath": "Translate"
+ },
+ "ResourceModules": {
+ "ext.translate": {
+ "styles": "resources/css/ext.translate.css",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.base": {
+ "scripts": "resources/js/ext.translate.base.js",
+ "dependencies": [
+ "mediawiki.api",
+ "mediawiki.util"
+ ],
+ "messages": [
+ "translate-js-support-unsaved-warning"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.dropdownmenu": {
+ "styles": "resources/css/ext.translate.dropdownmenu.css",
+ "scripts": "resources/js/ext.translate.dropdownmenu.js",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.specialpages.styles": {
+ "styles": [
+ "resources/css/ext.translate.special.aggregategroups.css",
+ "resources/css/ext.translate.special.managegroups.css",
+ "resources/css/ext.translate.special.pagemigration.css",
+ "resources/css/ext.translate.special.pagepreparation.css",
+ "resources/css/ext.translate.special.pagetranslation.css",
+ "resources/css/ext.translate.special.searchtranslations.css",
+ "resources/css/ext.translate.special.supportedlanguages.css",
+ "resources/css/ext.translate.special.translations.css"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.loader": {
+ "styles": "resources/css/ext.translate.loader.css",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.messagetable": {
+ "scripts": "resources/js/ext.translate.messagetable.js",
+ "styles": "resources/css/ext.translate.messagetable.less",
+ "dependencies": [
+ "ext.translate.base",
+ "ext.translate.loader",
+ "ext.translate.parsers",
+ "mediawiki.Uri",
+ "mediawiki.jqueryMsg",
+ "mediawiki.util"
+ ],
+ "messages": [
+ "api-error-badtoken",
+ "api-error-emptypage",
+ "api-error-unknownerror",
+ "tpt-unknown-page",
+ "translate-edit-title",
+ "tux-edit",
+ "tux-empty-list-all",
+ "tux-empty-list-all-guide",
+ "tux-empty-list-other",
+ "tux-empty-list-other-action",
+ "tux-empty-list-other-guide",
+ "tux-empty-list-other-link",
+ "tux-empty-list-translated",
+ "tux-empty-list-translated-action",
+ "tux-empty-list-translated-guide",
+ "tux-empty-no-messages-to-display",
+ "tux-empty-no-outdated-messages",
+ "tux-empty-nothing-new-to-proofread",
+ "tux-empty-nothing-to-proofread",
+ "tux-empty-show-optional-messages",
+ "tux-empty-there-are-optional",
+ "tux-empty-you-can-help-providing",
+ "tux-empty-you-can-review-already-proofread",
+ "tux-message-filter-advanced-button",
+ "tux-message-filter-result",
+ "tux-messagetable-loading-messages",
+ "tux-messagetable-more-messages",
+ "tux-status-fuzzy",
+ "tux-status-optional",
+ "tux-status-proofread",
+ "tux-status-translated"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.pagetranslation.uls": {
+ "scripts": "resources/js/ext.translate.pagetranslation.uls.js",
+ "dependencies": [
+ "ext.uls.mediawiki",
+ "mediawiki.util"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.edit.documentation": {
+ "dependencies": [
+ "oojs-ui-core",
+ "oojs-ui-widgets",
+ "oojs-ui-windows"
+ ],
+ "messages": [
+ "tps-edit-sourcepage-ve-warning-title",
+ "tps-edit-sourcepage-ve-warning-text",
+ "tps-edit-sourcepage-ve-warning-button"
+ ],
+ "scripts": [
+ "resources/js/ext.translate.edit.documentation.js"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.edit.documentation.styles": {
+ "styles": [
+ "resources/css/ext.translate.edit.documentation.less"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.parsers": {
+ "scripts": "resources/js/ext.translate.parsers.js",
+ "dependencies": [
+ "mediawiki.util"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.quickedit": {
+ "styles": "resources/css/ext.translate.quickedit.css",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.selecttoinput": {
+ "scripts": "resources/js/ext.translate.selecttoinput.js",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.special.languagestats": {
+ "packageFiles": [
+ "resources/src/ext.translate.special.languagestats/index.js",
+ "resources/src/ext.translate.special.languagestats/entity.selector.js"
+ ],
+ "messages": [
+ "translate-langstats-collapse",
+ "translate-langstats-collapseall",
+ "translate-langstats-expand",
+ "translate-langstats-expandall",
+ "translate-tes-server-error",
+ "translate-tes-group-not-found",
+ "translate-tes-type-to-search"
+ ],
+ "dependencies": [
+ "jquery.tablesorter",
+ "mediawiki.api",
+ "oojs-ui-widgets"
+ ],
+ "styles": "resources/src/ext.translate.special.languagestats/entity.selector.css",
+ "targets": [
+ "desktop"
+ ]
+ },
+ "ext.translate.messagerenamedialog": {
+ "dependencies": [
+ "oojs-ui-core",
+ "oojs-ui-widgets",
+ "oojs-ui-windows"
+ ],
+ "messages": [
+ "translate-smg-rename-select",
+ "translate-smg-rename-cancel",
+ "translate-smg-rename-search",
+ "translate-smg-rename-select-err",
+ "translate-smg-rename-no-msg"
+ ],
+ "scripts": [
+ "resources/js/ext.translate.messagerenamedialog.js"
+ ],
+ "styles": [
+ "resources/css/ext.translate.messagerenamedialog.less"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.groupselector": {
+ "styles": "resources/css/ext.translate.groupselector.less",
+ "scripts": "resources/js/ext.translate.groupselector.js",
+ "dependencies": [
+ "ext.translate.base",
+ "ext.translate.loader",
+ "ext.translate.statsbar",
+ "jquery.ui",
+ "mediawiki.jqueryMsg"
+ ],
+ "messages": [
+ "translate-msggroupselector-search-all",
+ "translate-msggroupselector-search-placeholder",
+ "translate-msggroupselector-search-recent",
+ "translate-msggroupselector-view-subprojects"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.editor": {
+ "scripts": [
+ "resources/js/ext.translate.storage.js",
+ "resources/lib/jquery.autosize.js",
+ "resources/js/ext.translate.editor.helpers.js",
+ "resources/js/ext.translate.editor.js",
+ "resources/js/ext.translate.editor.shortcuts.js",
+ "resources/js/ext.translate.pagemode.js",
+ "resources/js/ext.translate.proofread.js"
+ ],
+ "styles": [
+ "resources/css/ext.translate.editor.css",
+ "resources/css/ext.translate.pagemode.css",
+ "resources/css/ext.translate.proofread.css"
+ ],
+ "dependencies": [
+ "ext.translate.base",
+ "ext.translate.dropdownmenu",
+ "jquery.makeCollapsible",
+ "jquery.textSelection",
+ "mediawiki.Uri",
+ "mediawiki.api",
+ "mediawiki.jqueryMsg",
+ "mediawiki.language",
+ "mediawiki.user",
+ "mediawiki.util",
+ "mediawiki.editfont.styles",
+ "user.options"
+ ],
+ "messages": [
+ "translate-edit-askpermission",
+ "translate-edit-nopermission",
+ "tux-editor-add-desc",
+ "tux-editor-ask-help",
+ "tux-editor-cancel-button-label",
+ "tux-editor-close-tooltip",
+ "tux-editor-collapse-tooltip",
+ "tux-editor-confirm-button-label",
+ "tux-editor-discard-changes-button-label",
+ "tux-editor-doc-editor-cancel",
+ "tux-editor-doc-editor-placeholder",
+ "tux-editor-doc-editor-save",
+ "tux-editor-edit-desc",
+ "tux-editor-expand-tooltip",
+ "tux-editor-in-other-languages",
+ "tux-editor-loading",
+ "tux-editor-loading-failed",
+ "tux-editor-message-desc-less",
+ "tux-editor-message-desc-more",
+ "tux-editor-message-tools-show-editor",
+ "tux-editor-message-tools-delete",
+ "tux-editor-message-tools-history",
+ "tux-editor-message-tools-translations",
+ "tux-editor-message-tools-linktothis",
+ "tux-editor-n-uses",
+ "tux-editor-need-more-help",
+ "tux-editor-outdated-notice",
+ "tux-editor-outdated-notice-diff-link",
+ "tux-editor-paste-original-button-label",
+ "tux-editor-placeholder-documentation",
+ "tux-editor-placeholder-language",
+ "tux-editor-editsummary-placeholder",
+ "tux-editor-proofread-button-label",
+ "tux-editor-save-button-label",
+ "tux-editor-save-failed",
+ "tux-editor-shortcut-info",
+ "tux-editor-skip-button-label",
+ "tux-editor-suggestions-title",
+ "tux-editor-latest-updates-title",
+ "tux-editor-changes-without-summary",
+ "tux-editor-all-changes",
+ "tux-editor-tm-match",
+ "tux-proofread-action-tooltip",
+ "tux-proofread-edit-label",
+ "tux-proofread-translated-by-self",
+ "tux-session-expired",
+ "tux-status-saving",
+ "tux-status-translated",
+ "tux-status-unsaved",
+ "tux-save-unknown-error",
+ "tux-notices-hide",
+ "tux-notices-more",
+ "spamprotectiontext"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.special.managetranslatorsandbox.styles": {
+ "styles": "resources/css/ext.translate.special.managetranslatorsandbox.css",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.special.pagemigration": {
+ "scripts": [
+ "resources/js/jquery.ajaxdispatcher.js",
+ "resources/js/ext.translate.special.pagemigration.js"
+ ],
+ "dependencies": [
+ "mediawiki.api",
+ "mediawiki.Title",
+ "mediawiki.ui",
+ "mediawiki.ui.button"
+ ],
+ "messages": [
+ "pm-add-icon-hover-text",
+ "pm-delete-icon-hover-text",
+ "pm-extra-units-warning",
+ "pm-langcode-missing",
+ "pm-old-translations-missing",
+ "pm-page-does-not-exist",
+ "pm-pagename-missing",
+ "pm-pagetitle-invalid",
+ "pm-pagetitle-missing",
+ "pm-swap-icon-hover-text",
+ "pm-on-import-message-text",
+ "pm-on-save-message-text",
+ "pm-savepages-button-label",
+ "pm-cancel-button-label",
+ "pm-pagetitle-not-translatable",
+ "pm-translation-unit-fetch-failed",
+ "tpt-unknown-page"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.special.pagepreparation": {
+ "scripts": "resources/js/ext.translate.special.pagepreparation.js",
+ "dependencies": [
+ "mediawiki.util",
+ "mediawiki.Title",
+ "mediawiki.diff.styles",
+ "mediawiki.api",
+ "mediawiki.jqueryMsg",
+ "mediawiki.ui"
+ ],
+ "messages": [
+ "pp-already-prepared-message",
+ "pp-diff-error",
+ "pp-pagename-missing",
+ "pp-prepare-message",
+ "pp-save-button-label",
+ "pp-save-message"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.special.searchtranslations": {
+ "scripts": "resources/js/ext.translate.special.searchtranslations.js",
+ "dependencies": [
+ "ext.translate.editor",
+ "ext.translate.groupselector",
+ "ext.uls.mediawiki",
+ "mediawiki.Uri",
+ "mediawiki.language"
+ ],
+ "messages": [
+ "translate-search-more-groups-info",
+ "translate-search-more-languages-info"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.special.translate": {
+ "scripts": [
+ "resources/js/ext.translate.recentgroups.js",
+ "resources/js/ext.translate.workflowselector.js",
+ "resources/js/ext.translate.special.translate.js"
+ ],
+ "styles": "resources/css/ext.translate.workflowselector.css",
+ "skinScripts": {
+ "vector": "resources/js/ext.translate.navitoggle.js"
+ },
+ "skinStyles": {
+ "vector": "resources/css/ext.translate.navitoggle.css"
+ },
+ "dependencies": [
+ "ext.translate.base",
+ "ext.translate.dropdownmenu",
+ "ext.translate.editor",
+ "ext.translate.groupselector",
+ "ext.translate.messagetable",
+ "jquery.uls.data",
+ "mediawiki.Uri",
+ "mediawiki.api",
+ "mediawiki.jqueryMsg",
+ "mediawiki.storage"
+ ],
+ "messages": [
+ "tpt-discouraged-language-content",
+ "tpt-discouraged-language-force-content",
+ "tpt-discouraged-language-force-header",
+ "tpt-discouraged-language-header",
+ "tpt-discouraged-translation-header",
+ "tpt-discouraged-translation-content",
+ "tux-editor-proofreading-hide-own-translations",
+ "tux-editor-proofreading-show-own-translations",
+ "translate-workflow-set-doing",
+ "translate-workflow-state-",
+ "translate-workflowstatus",
+ "translate-tag-page-wikipage-desc"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.special.translate.styles": {
+ "styles": [
+ "resources/css/ext.translate.special.translate.css",
+ "resources/css/ext.translate.language.selector.css"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.specialTranslationStash": {
+ "packageFiles": [
+ "resources/src/ext.translate.specialTranslationStash/index.js",
+ "resources/src/ext.translate.specialTranslationStash/storage.js"
+ ],
+ "styles": [
+ "resources/src/ext.translate.specialTranslationStash/index.css",
+ "resources/css/ext.translate.language.selector.css"
+ ],
+ "dependencies": [
+ "ext.translate.editor",
+ "ext.translate.messagetable",
+ "ext.uls.mediawiki",
+ "mediawiki.api",
+ "mediawiki.language"
+ ],
+ "messages": [
+ "translate-translationstash-skip-button-label",
+ "translate-translationstash-translations",
+ "tsb-limit-reached-body",
+ "tsb-limit-reached-title"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.special.translationstats": {
+ "packageFiles": [
+ "resources/js/ext.translate.special.translationstats.js"
+ ],
+ "dependencies": [
+ "ext.translate.translationstats.graphbuilder.js",
+ "mediawiki.widgets.datetime"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.translationstats.embedded": {
+ "packageFiles": [
+ "resources/js/ext.translate.translationstats.embedded.js"
+ ],
+ "dependencies": [
+ "ext.translate.translationstats.graphbuilder.js"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.translationstats.graphbuilder.js": {
+ "scripts": [
+ "resources/js/ext.translate.translationstats.graphbuilder.js",
+ "resources/lib/Chart.js/Chart.js"
+ ],
+ "dependencies": [
+ "mediawiki.api",
+ "mediawiki.language"
+ ],
+ "styles": [
+ "resources/lib/Chart.js/Chart.css",
+ "resources/css/ext.translate.translationstats.graphbuilder.less"
+ ],
+ "messages": [
+ "translate-statsf-count-edits",
+ "translate-statsf-count-users",
+ "translate-statsf-count-registrations",
+ "translate-statsf-count-reviews",
+ "translate-statsf-count-reviewers",
+ "translate-statsf-scale-years",
+ "translate-statsf-scale-months",
+ "translate-statsf-scale-weeks",
+ "translate-statsf-scale-days",
+ "translate-statsf-scale-hours",
+ "translate-statsf-unknown-error",
+ "translate-statsf-error-message",
+ "translate-statsf-graph-alt-text-info",
+ "translate-statsf-alt-text"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.statsbar": {
+ "styles": "resources/css/ext.translate.statsbar.css",
+ "scripts": "resources/js/ext.translate.statsbar.js",
+ "messages": [
+ "translate-statsbar-tooltip",
+ "translate-statsbar-tooltip-with-fuzzy"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.statstable": {
+ "styles": "resources/css/ext.translate.statstable.less",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.tag.languages": {
+ "class": "ResourceLoaderLessVarFileModule",
+ "styles": "resources/css/ext.translate.tag.languages.less",
+ "targets": [
+ "desktop",
+ "mobile"
+ ],
+ "lessMessages": [
+ "tpt-languages-separator"
+ ]
+ },
+ "ext.translate.special.aggregategroups": {
+ "scripts": "resources/js/ext.translate.special.aggregategroups.js",
+ "dependencies": [
+ "jquery.ui",
+ "mediawiki.api",
+ "mediawiki.util"
+ ],
+ "messages": [
+ "tpt-aggregategroup-add",
+ "tpt-aggregategroup-edit-description",
+ "tpt-aggregategroup-edit-name",
+ "tpt-aggregategroup-remove-confirm",
+ "tpt-aggregategroup-update",
+ "tpt-aggregategroup-update-cancel",
+ "tpt-aggregategroup-expand-all-groups",
+ "tpt-aggregategroup-collapse-all-groups",
+ "tpt-aggregategroup-expand-group",
+ "tpt-aggregategroup-collapse-group",
+ "tpt-invalid-group"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.special.importtranslations": {
+ "scripts": "resources/js/ext.translate.special.importtranslations.js",
+ "dependencies": [
+ "jquery.ui"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.special.managetranslatorsandbox": {
+ "scripts": "resources/js/ext.translate.special.managetranslatorsandbox.js",
+ "dependencies": [
+ "ext.translate.loader",
+ "ext.uls.mediawiki",
+ "jquery.ui",
+ "mediawiki.api",
+ "mediawiki.jqueryMsg",
+ "mediawiki.language",
+ "moment"
+ ],
+ "messages": [
+ "tsb-accept-all-button-label",
+ "tsb-accept-button-label",
+ "tsb-reject-confirmation",
+ "tsb-accept-confirmation",
+ "tsb-all-languages-button-label",
+ "tsb-didnt-make-any-translations",
+ "tsb-no-requests-from-new-users",
+ "tsb-older-requests",
+ "tsb-reject-all-button-label",
+ "tsb-reject-button-label",
+ "tsb-reminder-failed",
+ "tsb-reminder-link-text",
+ "tsb-reminder-sending",
+ "tsb-reminder-sent",
+ "tsb-reminder-sent-new",
+ "tsb-request-count",
+ "tsb-selected-count",
+ "tsb-translations-current",
+ "tsb-translations-source",
+ "tsb-translations-user",
+ "tsb-user-posted-a-comment"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.special.searchtranslations.operatorsuggest": {
+ "scripts": "resources/js/ext.translate.special.operatorsuggest.js",
+ "dependencies": [
+ "jquery.ui"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.special.pagetranslation": {
+ "packageFiles": [
+ "resources/js/ext.translate.special.pagetranslation.js",
+ "resources/js/LanguagesMultiselectWidget.js"
+ ],
+ "dependencies": [
+ "mediawiki.Uri",
+ "mediawiki.api",
+ "mediawiki.ui.button",
+ "mediawiki.widgets",
+ "oojs-ui-widgets",
+ "user.options"
+ ],
+ "targets": [
+ "desktop"
+ ]
+ },
+ "ext.translate.special.managegroups": {
+ "dependencies": [
+ "ext.translate.messagerenamedialog"
+ ],
+ "messages": [
+ "translate-smg-rename-new",
+ "translate-smg-rename-rename",
+ "translate-smg-rename-dialog-title",
+ "translate-smg-loading",
+ "translate-smg-group-action-resolve",
+ "translate-smg-unknown-error",
+ "percent"
+ ],
+ "scripts": [
+ "resources/js/ext.translate.special.managegroups.js"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.ve": {
+ "messages": [
+ "visualeditor-annotations-translate-start",
+ "visualeditor-annotations-translate-end",
+ "visualeditor-annotations-translate-description",
+ "visualeditor-annotations-tvar-start",
+ "visualeditor-annotations-tvar-end",
+ "visualeditor-annotations-tvar-description"
+ ],
+ "scripts": [
+ "resources/src/ve-translate/ve.ce.MWTranslateAnnotationNode.js",
+ "resources/src/ve-translate/ve.dm.MWTranslateAnnotationNode.js",
+ "resources/src/ve-translate/ve.ui.MWTranslateAnnotationContextItem.js"
+ ],
+ "dependencies": [
+ "ext.visualEditor.mwcore"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.translate.codemirror": {
+ "styles": [
+ "resources/css/ext.translate.codemirror.css"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ }
+ },
+ "QUnitTestModule": {
+ "localBasePath": "",
+ "remoteExtPath": "Translate",
+ "scripts": [
+ "tests/qunit/ext.translate.parsers.test.js",
+ "tests/qunit/ext.translate.special.pagemigration.test.js"
+ ],
+ "dependencies": [
+ "ext.translate.parsers",
+ "ext.translate.special.pagemigration"
+ ]
+ },
+ "config": {
+ "PageTranslationLanguageList": {
+ "value": "tag-only",
+ "description": "How language list for translatable pages is shown. Allowed values:\n * tag-only: Only display languages with the <languages /> tag.\n * sidebar-only: Display languages as interlanguage links only and ignore the tag even if present on the page.\n * sidebar-fallback: Display languages as interlanguage links if no tag is on the page.\n * sidebar-always: Display languages as interlanguage links and also in tag if it is present on the page.\n @since 2018.07",
+ "public": true
+ },
+ "TranslateDocumentationLanguageCode": {
+ "value": false,
+ "description": "Language code for message documentation. Suggested values are qqq or info. If set to false (default), message documentation feature is disabled.",
+ "public": true
+ },
+ "TranslateUserManagerName": {
+ "value": "TranslateUserManager",
+ "description": "Name of the system user that will be used to create the sandbox users in the system.",
+ "public": true
+ },
+ "TranslateFuzzyBotName": {
+ "value": "FuzzyBot",
+ "description": "Name of the bot which will invalidate translations and do maintenance for page translation feature. Also used for importing messages from external sources.",
+ "public": true
+ },
+ "TranslateLanguageFallbacks": {
+ "value": [],
+ "description": "Default values for list of languages to show translators as an aid when translating. Each user can override this setting in their preferences.\n\nExample: LanguageFallbacks['fi'] = 'sv' or LanguageFallbacks['sv'] = [ 'da', 'no', 'nn' ].",
+ "public": true
+ },
+ "TranslateSupportUrl": {
+ "value": false,
+ "description": "Experimental support since 2011-03-11 for an 'Ask' help button. Might change into a hook later on. This is an array with keys page, url and params: page is a title of a local wiki page; url is an URL to use as is (e.g. an issue tracker submission form) which will override the page if set; params is an array of key-value pairs of request params -- each param value can contain the variable %MESSAGE% which will be replaced with the full page name.",
+ "public": true
+ },
+ "TranslateSupportUrlNamespace": {
+ "value": [],
+ "description": "Like $wgTranslateSupportUrl, but for a specific namespace. Each $wgTranslateSupportUrl-like array needs to be the value assigned to the numerical ID of a namespace of the wiki. Since 2015-09.",
+ "public": true,
+ "merge_strategy": "array_plus"
+ },
+ "TranslatePermissionUrl": {
+ "value": "Project:Translator",
+ "description": "When unprivileged users open a translation editor, they will see a message stating that a special permission is needed for translating messages. If this variable is defined, there is a button which will take the user to that page to ask for permission. The target needs to be reiterated with the second variable to have the same result with sandbox enabled where users can't enter the sandbox.",
+ "public": true
+ },
+ "EnablePageTranslation": {
+ "value": true,
+ "description": "Enable page translation feature.\n\nPage translation feature allows structured translation of wiki pages with simple markup and automatic tracking of changes. See https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration",
+ "public": true
+ },
+ "TranslatePageTranslationULS": {
+ "value": false,
+ "description": "If set to true, when a user selects an interface language via ULS (Universal Language Selector), if the current page is a translatable page or a translation page then the user is also redirected to the corresponding translation page in the selected language.\n\n The language of the translation pages visited afterwards will still depend on the links followed (it will be the interface language only if the links use the Special:MyLanguage syntax).\n\nSince 2013-03-10.",
+ "public": true
+ },
+ "TranslateKeepOutdatedTranslations": {
+ "value": true,
+ "description": "If set to true, when a translated page has some units marked as outdated, the outdated translation will be shown. If set to false, the original updated unit in the original language will be shown.\n\nChanging this setting requires the following script to be run to take effect on existing changes: scripts/refresh-translatable-pages.php\n\n Since 2016.12.",
+ "public": true
+ },
+ "TranslateDisabledTargetLanguages": {
+ "value": [],
+ "description": "Two-dimensional array of languages that cannot be translated. Input can be exact group name, first part before '-' or '*' for all. Second dimension should be language code mapped to reason for disabling. Reason is parsed as wikitext.\n\nExample:\n'TranslateDisabledTargetLanguages': { '*': { 'en': 'English is the source language.' }, 'core': { 'mul': 'Not a real language.' }, 'ext': { 'mul': 'Not a real language.'} }",
+ "public": true
+ },
+ "TranslateValidationExclusionFile": {
+ "value": false,
+ "description": "File containing validations that are to be skipped. See https://gerrit.wikimedia.org/g/translatewiki/+/master/groups/validation-exclusion-list.php for example.",
+ "public": true
+ },
+ "TranslateAuthorExclusionList": {
+ "value": [],
+ "description": "Two-dimensional array of rules that exclude certain authors from appearing in the exports. This is useful for keeping bots and people doing maintenance work in translations not to appear besides real translators everywhere.\n\nRules are arrays, where first element is type: included or excluded. The inclusion list always overrules the exclusion list. Second element should be a valid pattern that can be given a preg_match(). It will be matched against string of format 'group-id;language;author name', without quotes.\n\nAs an example, this rule would ignore all authors whose name ends in a bot for all languages and all groups:\n'TranslateAuthorExclusionList': [ [ 'black', '/^.*;.*;.*Bot$/Ui' ] ]",
+ "public": true
+ },
+ "TranslateMessageNamespaces": {
+ "value": [],
+ "description": "List of namespace that contain messages. No talk namespaces. See https://www.mediawiki.org/wiki/Help:Extension:Translate/Group_configuration",
+ "public": true
+ },
+ "TranslateGroupRoot": {
+ "value": "/var/www/externals",
+ "description": "Location in the filesystem to which paths are relative in custom groups.",
+ "public": true
+ },
+ "TranslateGroupFiles": {
+ "value": [],
+ "description": "The newest and recommended way of adding custom groups is YAML files.",
+ "public": true
+ },
+ "TranslateWorkflowStates": {
+ "value": false,
+ "description": "List of possible message group review workflow states and properties for each state. The currently supported properties are 'color', the color that is used for displaying the state in the tables, and 'right', the additional right that is needed to set the state. Users who have the translate-groupreview right can set this in Special:Translate. The state is visible in Special:Translate, Special:MessageGroupStats and Special:LanguageStats. If the value is false, the workflow states feature is disabled. State name can be up to 32 characters maximum.\n\nExample:\n'TranslateWorkflowStates': {\n\n'new': { 'color': 'FF0000' },\n'needs_proofreading': { 'color': '0000FF' },\n'ready': { 'color': 'FFFF00'},\n'published': { 'color': '00FF00', 'right': 'centralnotice-admin' }\n}",
+ "public": true
+ },
+ "TranslateGroupAliases": {
+ "value": [],
+ "description": "Map from deprecated group IDs to their current ID. Example value: { 'core': 'mediawiki-core' }",
+ "public": true
+ },
+ "TranslateCacheDirectory": {
+ "value": false,
+ "description": "Set location of cache files. Defaults to $wgCacheDirectory.",
+ "public": true
+ },
+ "TranslateMessageIndex": {
+ "value": "DatabaseMessageIndex",
+ "description": "Configures how the message index is stored. Possible values are 'DatabaseMessageIndex', 'SerializedMessageIndex', and 'CDBMessageIndex'. The last two backends need $wgCacheDirectory to be functional.",
+ "public": true
+ },
+ "TranslateUseSandbox": {
+ "value": false,
+ "description": "Whether to allow users to sign up via a sandbox. Sandboxed users cannot do much until approved and thus they can be get rid of easily. This only works with MediaWiki 1.27 and newer, and only if registration is configured to not use account creation providers which give REDIRECT or UI responses or require any other field than the default username/password/email.",
+ "public": true
+ },
+ "TranslateSandboxPromotedGroup": {
+ "value": false,
+ "description": "To which group the translators are promoted. If left at false, they will just be removed from sandbox and become normal users.",
+ "public": true
+ },
+ "TranslateSandboxLimit": {
+ "value": 20,
+ "description": "Maximum number of translations a user can make in the sandbox.",
+ "public": true
+ },
+ "TranslateUsePreSaveTransform": {
+ "value": false,
+ "description": "Pre-save transform for message pages. MediaWiki does this by default (including for pages in the MediaWiki-namespace). By setting this to false it allows users to put untransformed syntax such as '~~~~' into a page without having them be transformed upon save.",
+ "public": true
+ },
+ "TranslateRcFilterDefault": {
+ "value": "filter",
+ "description": "Default action for the RecentChanges filter, which makes it possible to filter translations away or show them only. Possible values: 'noaction', 'only', 'filter', 'site'.",
+ "public": true
+ },
+ "TranslateYamlLibrary": {
+ "value": null,
+ "description": "Currently supported YAML drivers are phpyaml, spyc and syck.\n\nFor phpyaml see https://secure.php.net/manual/en/book.yaml.php.\nFor syck we're shelling out to perl. So you need at least perl 5.8 (find out what you have by running `perl -v`), and to install these modules from CPAN: YAML::Syck, PHP::Serialization, and File::Slurp.\n\nYou should be able to do this with: `for module in 'YAML::Syck' 'PHP::Serialization' 'File::Slurp'; do cpanp -i $module; done`\n\nFor the shell to work, you also need an en.UTF-8 locale installed on your system. add a line `en.UTF-8` to your /etc/locale.gen or uncomment an existing one and run locale-gen if you do not have it already.\n\nphpyaml is the fastest and based on libyaml so the output should be most compatible. spyc output format is least compatible. syck is slowest but almost as good as phpyaml. spyc needs to be installed using composer. See https://www.mediawiki.org/wiki/Composer",
+ "public": true
+ },
+ "TranslateTranslationDefaultService": {
+ "value": true,
+ "description": "Name of the default translation memory service. This service must accept updates.\n\nIf left as the default `true`, the extension will fallback to TTMServer. If `$wgTranslateTranslationServices` is also unconfigured, built-in values will be used to configure the TTMServer.\n\nIf set to `false`, no translation memory will be used.",
+ "public": true
+ },
+ "TranslateTranslationServices": {
+ "value": [],
+ "description": "Define various web services that provide translation suggestions.\n\nTranslation memories are documented in our main documentation. See https://www.mediawiki.org/wiki/Help:Extension:Translate/Translation_memories\n\nFor Apertium, you should get an API key. See http://wiki.apertium.org/wiki/Apertium_web_service\n\nYandex translation helper also provides langlimit option to limit total number of suggestions (set to 0 to get all possible translations) and langorder array to sort languages. Yandex translate engine is based on wordnet, generated from search index, so number of indexed websites should be a good heuristic to define the default language order.\n\nThe machine translation services are provided with the following information: server ip address; versions of MediaWiki and Translate extension; source text to translate; private API key if provided",
+ "public": true
+ },
+ "TranslateStatsProviders": {
+ "value": {
+ "edits": "MediaWiki\\Extension\\Translate\\Statistics\\TranslatePerLanguageStats",
+ "users": "MediaWiki\\Extension\\Translate\\Statistics\\TranslatePerLanguageStats",
+ "reviews": "MediaWiki\\Extension\\Translate\\Statistics\\ReviewPerLanguageStats",
+ "reviewers": "MediaWiki\\Extension\\Translate\\Statistics\\ReviewPerLanguageStats",
+ "registrations": "MediaWiki\\Extension\\Translate\\Statistics\\TranslateRegistrationStats"
+ },
+ "description": "Add, disable or overwrite default stats type providers.",
+ "public": true
+ },
+ "TranslateGroupSynchronizationCache": {
+ "value": false,
+ "description": "If true, enables the group synchronization cache that keeps track of FileBasedMessageGroups messages currently being processed via MessageUpdateJob",
+ "public": true
+ },
+ "TranslatePageMoveLimit": {
+ "value": 500,
+ "description": "If set, displays a warning and does not allow user to move translatable pages having more subpages than this value",
+ "public": true
+ },
+ "TranslateEnableMessageBundleIntegration": {
+ "value": false,
+ "description": "Enable experiment message bundle integration",
+ "public": true
+ }
+ },
+ "attributes": {
+ "CodeMirror": {
+ "TagModes": {
+ "translate": "text/mediawiki",
+ "tvar": "text/mediawiki"
+ },
+ "PluginModules": [
+ "ext.translate.codemirror"
+ ]
+ }
+ },
+ "DefaultUserOptions": {
+ "translate": 0,
+ "translate-editlangs": "default",
+ "translate-recent-groups": ""
+ },
+ "AvailableRights": [
+ "translate",
+ "translate-import",
+ "translate-manage",
+ "translate-messagereview",
+ "translate-groupreview"
+ ],
+ "GrantPermissions": {
+ "editpage": {
+ "translate": true
+ }
+ },
+ "ParsoidModules": [
+ "MediaWiki\\Extension\\Translate\\PageTranslation\\TranslateExt"
+ ],
+ "manifest_version": 2
+} \ No newline at end of file
diff --git a/Translate/ffs/AmdFFS.php b/Translate/ffs/AmdFFS.php
new file mode 100644
index 00000000..36c1677a
--- /dev/null
+++ b/Translate/ffs/AmdFFS.php
@@ -0,0 +1,174 @@
+<?php
+/**
+ * Support for the AMD i18n message file format (used by require.js and Dojo). See:
+ * http://requirejs.org/docs/api.html#i18n
+ *
+ * A limitation is that it only accepts json compatible structures inside the define
+ * wrapper function. For example the following example is not ok since there are no
+ * quotation marks around the keys:
+ * define({
+ * key1: "somevalue",
+ * key2: "anothervalue"
+ * });
+ *
+ * Instead it should look like:
+ * define({
+ * "key1": "somevalue",
+ * "key2": "anothervalue"
+ * });
+ *
+ * It also supports the top-level bundle with a root construction and language indicators.
+ * The following example will give the same messages as above:
+ * define({
+ * "root": {
+ * "key1": "somevalue",
+ * "key2": "anothervalue"
+ * },
+ * "sv": true
+ * });
+ *
+ * Note that it does not support exporting with the root construction, there is only support
+ * for reading it. However, this is not a serious limitation as Translatewiki doesn't export
+ * the base language.
+ *
+ * @file
+ * @author Matthias Palmér
+ * @copyright Copyright © 2011-2015, MetaSolutions AB
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * AmdFFS implements a message format where messages are encoded
+ * as key-value pairs in JSON objects wrapped in a define call.
+ *
+ * @ingroup FFS
+ * @since 2015.02
+ */
+class AmdFFS extends SimpleFFS {
+
+ /**
+ * @param string $data
+ * @return bool
+ */
+ public static function isValid( $data ) {
+ $data = self::extractMessagePart( $data );
+ return is_array( FormatJson::decode( $data, /*as array*/true ) );
+ }
+
+ public function getFileExtensions() {
+ return [ '.js' ];
+ }
+
+ /**
+ * @param string $data
+ * @return array Parsed data.
+ */
+ public function readFromVariable( $data ) {
+ $authors = self::extractAuthors( $data );
+ $data = self::extractMessagePart( $data );
+ $messages = (array)FormatJson::decode( $data, /*as array*/true );
+ $metadata = [];
+
+ // Take care of regular language bundles, as well as the root bundle.
+ if ( isset( $messages['root'] ) ) {
+ $messages = $this->group->getMangler()->mangleArray( $messages['root'] );
+ } else {
+ $messages = $this->group->getMangler()->mangleArray( $messages );
+ }
+
+ return [
+ 'MESSAGES' => $messages,
+ 'AUTHORS' => $authors,
+ 'METADATA' => $metadata,
+ ];
+ }
+
+ /**
+ * @param MessageCollection $collection
+ * @return string
+ */
+ protected function writeReal( MessageCollection $collection ) {
+ $messages = [];
+ $mangler = $this->group->getMangler();
+
+ /** @var TMessage $m */
+ foreach ( $collection as $key => $m ) {
+ $value = $m->translation();
+ if ( $value === null ) {
+ continue;
+ }
+
+ if ( $m->hasTag( 'fuzzy' ) ) {
+ $value = str_replace( TRANSLATE_FUZZY, '', $value );
+ }
+
+ $key = $mangler->unmangle( $key );
+ $messages[$key] = $value;
+ }
+
+ // Do not create empty files
+ if ( !count( $messages ) ) {
+ return '';
+ }
+ $header = $this->header( $collection->code, $collection->getAuthors() );
+ return $header . FormatJson::encode( $messages, "\t", FormatJson::UTF8_OK ) . ");\n";
+ }
+
+ /**
+ * @param string $data
+ * @return string of JSON
+ */
+ private static function extractMessagePart( $data ) {
+ // Find the start and end of the data section (enclosed in the define function call).
+ $dataStart = strpos( $data, 'define(' ) + 6;
+ $dataEnd = strrpos( $data, ')' );
+
+ // Strip everything outside of the data section.
+ return substr( $data, $dataStart + 1, $dataEnd - $dataStart - 1 );
+ }
+
+ /**
+ * @param string $data
+ * @return array
+ */
+ private static function extractAuthors( $data ) {
+ preg_match_all( '~\n \* - (.+)~', $data, $result );
+ return $result[1];
+ }
+
+ /**
+ * @param string $code
+ * @param array $authors
+ * @return string
+ */
+ private function header( $code, $authors ) {
+ global $wgSitename;
+
+ $name = TranslateUtils::getLanguageName( $code );
+ $authorsList = $this->authorsList( $authors );
+
+ return <<<EOT
+/**
+ * Messages for $name
+ * Exported from $wgSitename
+ *
+{$authorsList}
+ */
+define(
+EOT;
+ }
+
+ /**
+ * @param string[] $authors
+ * @return string
+ */
+ private function authorsList( array $authors ) {
+ if ( $authors === [] ) {
+ return '';
+ }
+
+ $prefix = ' * - ';
+ $authorList = implode( "\n$prefix", $authors );
+ return " * Translators:\n$prefix$authorList";
+ }
+}
diff --git a/Translate/ffs/AndroidXmlFFS.php b/Translate/ffs/AndroidXmlFFS.php
new file mode 100644
index 00000000..75e9ddaa
--- /dev/null
+++ b/Translate/ffs/AndroidXmlFFS.php
@@ -0,0 +1,212 @@
+<?php
+/**
+ * Support for XML translation format used by Android.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Extension\Translate\MessageProcessing\ArrayFlattener;
+
+/**
+ * Support for XML translation format used by Android.
+ * @since 2012-08-19
+ * @ingroup FFS
+ */
+class AndroidXmlFFS extends SimpleFFS {
+ /** @var ArrayFlattener */
+ private $flattener;
+
+ public function __construct( FileBasedMessageGroup $group ) {
+ parent::__construct( $group );
+ $this->flattener = $this->getFlattener();
+ }
+
+ public function supportsFuzzy() {
+ return 'yes';
+ }
+
+ public function getFileExtensions() {
+ return [ '.xml' ];
+ }
+
+ /**
+ * @param string $data
+ * @return array Parsed data.
+ */
+ public function readFromVariable( $data ) {
+ $reader = new SimpleXMLElement( $data );
+
+ $messages = [];
+ $mangler = $this->group->getMangler();
+
+ $regexBacktrackLimit = ini_get( 'pcre.backtrack_limit' );
+ ini_set( 'pcre.backtrack_limit', 10 );
+
+ /** @var SimpleXMLElement $element */
+ foreach ( $reader as $element ) {
+ $key = (string)$element['name'];
+
+ if ( $element->getName() === 'string' ) {
+ $value = $this->readElementContents( $element );
+ } elseif ( $element->getName() === 'plurals' ) {
+ $forms = [];
+ foreach ( $element as $item ) {
+ $forms[(string)$item['quantity']] = $this->readElementContents( $item );
+ }
+ $value = $this->flattener->flattenCLDRPlurals( $forms );
+ } else {
+ wfDebug( __METHOD__ . ': Unknown XML element name.' );
+ continue;
+ }
+
+ if ( isset( $element['fuzzy'] ) && (string)$element['fuzzy'] === 'true' ) {
+ $value = TRANSLATE_FUZZY . $value;
+ }
+
+ $messages[$key] = $value;
+ }
+
+ ini_set( 'pcre.backtrack_limit', $regexBacktrackLimit );
+
+ return [
+ 'AUTHORS' => $this->scrapeAuthors( $data ),
+ 'MESSAGES' => $mangler->mangleArray( $messages ),
+ ];
+ }
+
+ protected function scrapeAuthors( $string ) {
+ if ( !preg_match( '~<!-- Authors:\n((?:\* .*\n)*)-->~', $string, $match ) ) {
+ return [];
+ }
+
+ $authors = $matches = [];
+ preg_match_all( '~\* (.*)~', $match[ 1 ], $matches );
+ foreach ( $matches[1] as $author ) {
+ // PHP7: \u{2011}
+ $authors[] = str_replace( "\xE2\x80\x91\xE2\x80\x91", '--', $author );
+ }
+ return $authors;
+ }
+
+ protected function readElementContents( $element ): string {
+ $elementStr = (string)$element;
+
+ // Convert string of format \uNNNN (eg: \u1234) to symbols
+ $converted = preg_replace_callback(
+ '/(?<!\\\\)(?:\\\\{2})*+\\K\\\\u([0-9A-Fa-f]{4,6})+/',
+ static function ( array $matches ) {
+ return IntlChar::chr( hexdec( $matches[1] ) );
+ },
+ $elementStr
+ );
+
+ return stripcslashes( $converted );
+ }
+
+ protected function formatElementContents( $contents ) {
+ // Kudos to the brilliant person who invented this braindead file format
+ $escaped = addcslashes( $contents, '"\'\\' );
+ if ( substr( $escaped, 0, 1 ) === '@' ) {
+ // '@' at beginning of string refers to another string by name.
+ // Add backslash to escape it too.
+ $escaped = '\\' . $escaped;
+ }
+ // All html entities seen would be inserted by translators themselves.
+ // Treat them as plain text.
+ $escaped = str_replace( '&', '&amp;', $escaped );
+
+ // Newlines must be escaped
+ $escaped = str_replace( "\n", '\n', $escaped );
+ return $escaped;
+ }
+
+ protected function doAuthors( MessageCollection $collection ) {
+ $authors = $collection->getAuthors();
+ $authors = $this->filterAuthors( $authors, $collection->code );
+
+ if ( !$authors ) {
+ return '';
+ }
+
+ $output = "\n<!-- Authors:\n";
+
+ foreach ( $authors as $author ) {
+ // Since -- is not allowed in XML comments, we rewrite them to
+ // U+2011 (non-breaking hyphen). PHP7: \u{2011}
+ $author = str_replace( '--', "\xE2\x80\x91\xE2\x80\x91", $author );
+ $output .= "* $author\n";
+ }
+
+ $output .= "-->\n";
+
+ return $output;
+ }
+
+ protected function writeReal( MessageCollection $collection ) {
+ global $wgTranslateDocumentationLanguageCode;
+
+ $collection->filter( 'hastranslation', false );
+ if ( count( $collection ) === 0 ) {
+ return '';
+ }
+
+ $template = '<?xml version="1.0" encoding="utf-8"?>';
+ $template .= $this->doAuthors( $collection );
+ $template .= '<resources></resources>';
+
+ $writer = new SimpleXMLElement( $template );
+
+ if ( $collection->getLanguage() === $wgTranslateDocumentationLanguageCode ) {
+ $writer->addAttribute(
+ 'tools:ignore',
+ 'all',
+ 'http://schemas.android.com/tools'
+ );
+ }
+
+ $mangler = $this->group->getMangler();
+ /** @var TMessage $m */
+ foreach ( $collection as $key => $m ) {
+ $key = $mangler->unmangle( $key );
+
+ $value = $m->translation();
+ $value = str_replace( TRANSLATE_FUZZY, '', $value );
+
+ $plurals = $this->flattener->unflattenCLDRPlurals( '', $value );
+
+ if ( $plurals === false ) {
+ $element = $writer->addChild( 'string', $this->formatElementContents( $value ) );
+ } else {
+ $element = $writer->addChild( 'plurals' );
+ foreach ( $plurals as $quantity => $content ) {
+ $item = $element->addChild( 'item', $this->formatElementContents( $content ) );
+ $item->addAttribute( 'quantity', $quantity );
+ }
+ }
+
+ $element->addAttribute( 'name', $key );
+ // This is non-standard
+ if ( $m->hasTag( 'fuzzy' ) ) {
+ $element->addAttribute( 'fuzzy', 'true' );
+ }
+ }
+
+ // Make the output pretty with DOMDocument
+ $dom = new DOMDocument( '1.0' );
+ $dom->formatOutput = true;
+ $dom->loadXML( $writer->asXML() );
+
+ return $dom->saveXML();
+ }
+
+ protected function getFlattener() {
+ $flattener = new ArrayFlattener( '', true );
+ return $flattener;
+ }
+
+ public function isContentEqual( $a, $b ) {
+ return $this->flattener->compareContent( $a, $b );
+ }
+}
diff --git a/Translate/ffs/AppleFFS.php b/Translate/ffs/AppleFFS.php
new file mode 100644
index 00000000..1e118678
--- /dev/null
+++ b/Translate/ffs/AppleFFS.php
@@ -0,0 +1,235 @@
+<?php
+
+/**
+ * AppleFFS class implements support for Apple .strings files.
+ * This class reads and writes only UTF-8 files.
+ *
+ * This class has not yet been battle-tested, so beware.
+ *
+ * @author Brion Vibber <bvibber@wikimedia.org>
+ *
+ * @ingroup FFS
+ * @since 2014.02
+ */
+class AppleFFS extends SimpleFFS {
+ public function supportsFuzzy() {
+ return 'write';
+ }
+
+ public function getFileExtensions() {
+ return [ '.strings' ];
+ }
+
+ /**
+ * @param string $data
+ * @return array Parsed data.
+ * @throws MWException
+ */
+ public function readFromVariable( $data ) {
+ $lines = explode( "\n", $data );
+ $authors = $messages = [];
+ $linecontinuation = false;
+
+ $value = '';
+ foreach ( $lines as $line ) {
+ $line = trim( $line );
+ if ( $linecontinuation ) {
+ if ( strpos( $line, '*/' ) !== false ) {
+ $linecontinuation = false;
+ }
+ } else {
+ if ( $line === '' ) {
+ continue;
+ }
+
+ if ( substr( $line, 0, 2 ) === '//' ) {
+ // Single-line comment
+ $match = [];
+ $ok = preg_match( '~//\s*Author:\s*(.*)~', $line, $match );
+ if ( $ok ) {
+ $authors[] = $match[1];
+ }
+ continue;
+ }
+
+ if ( substr( $line, 0, 2 ) === '/*' ) {
+ if ( strpos( $line, '*/', 2 ) === false ) {
+ $linecontinuation = true;
+ }
+ continue;
+ }
+
+ list( $key, $value ) = static::readRow( $line );
+ $messages[$key] = $value;
+ }
+ }
+
+ $messages = $this->group->getMangler()->mangleArray( $messages );
+
+ return [
+ 'AUTHORS' => $authors,
+ 'MESSAGES' => $messages,
+ ];
+ }
+
+ /**
+ * Parses non-empty strings file row to key and value.
+ * Can be overridden by child classes.
+ * @param string $line
+ * @throws MWException
+ * @return array array( string $key, string $val )
+ */
+ public static function readRow( $line ) {
+ $match = [];
+ if ( preg_match( '/^"((?:\\\"|[^"])*)"\s*=\s*"((?:\\\"|[^"])*)"\s*;\s*$/', $line, $match ) ) {
+ $key = self::unescapeString( $match[1] );
+ $value = self::unescapeString( $match[2] );
+ if ( $key === '' ) {
+ throw new MWException( "Empty key in line $line" );
+ }
+ return [ $key, $value ];
+ } else {
+ throw new MWException( "Unrecognized line format: $line" );
+ }
+ }
+
+ /**
+ * @param MessageCollection $collection
+ * @return string
+ */
+ protected function writeReal( MessageCollection $collection ) {
+ $header = $this->doHeader( $collection );
+ $header .= $this->doAuthors( $collection );
+ $header .= "\n";
+
+ $output = '';
+ $mangler = $this->group->getMangler();
+
+ /** @var TMessage $m */
+ foreach ( $collection as $key => $m ) {
+ $value = $m->translation();
+ $value = str_replace( TRANSLATE_FUZZY, '', $value );
+
+ if ( $value === '' ) {
+ continue;
+ }
+
+ // Just to give an overview of translation quality.
+ if ( $m->hasTag( 'fuzzy' ) ) {
+ $output .= "// Fuzzy\n";
+ }
+
+ $key = $mangler->unmangle( $key );
+ $output .= static::writeRow( $key, $value );
+ }
+
+ if ( $output ) {
+ $data = $header . $output;
+ } else {
+ $data = $header;
+ }
+
+ return $data;
+ }
+
+ /**
+ * Writes well-formed properties file row with key and value.
+ * Can be overridden by child classes.
+ * @param string $key
+ * @param string $value
+ * @return string
+ */
+ public static function writeRow( $key, $value ) {
+ return self::quoteString( $key ) . ' = ' . self::quoteString( $value ) . ';' . "\n";
+ }
+
+ /**
+ * Quote and escape Obj-C-style strings for .strings format.
+ *
+ * @param string $str
+ * @return string
+ */
+ protected static function quoteString( $str ) {
+ return '"' . self::escapeString( $str ) . '"';
+ }
+
+ /**
+ * Escape Obj-C-style strings; use backslash-escapes etc.
+ *
+ * @param string $str
+ * @return string
+ */
+ protected static function escapeString( $str ) {
+ $str = addcslashes( $str, '\\"' );
+ $str = str_replace( "\n", '\\n', $str );
+ return $str;
+ }
+
+ /**
+ * Unescape Obj-C-style strings; can include backslash-escapes
+ *
+ * @todo support \UXXXX
+ *
+ * @param string $str
+ * @return string
+ */
+ protected static function unescapeString( $str ) {
+ return stripcslashes( $str );
+ }
+
+ /**
+ * @param MessageCollection $collection
+ * @return string
+ */
+ protected function doHeader( MessageCollection $collection ) {
+ if ( isset( $this->extra['header'] ) ) {
+ $output = $this->extra['header'];
+ } else {
+ global $wgSitename;
+
+ $code = $collection->code;
+ $name = TranslateUtils::getLanguageName( $code );
+ $native = TranslateUtils::getLanguageName( $code, $code );
+ $output = "// Messages for $name ($native)\n";
+ $output .= "// Exported from $wgSitename\n";
+ }
+
+ return $output;
+ }
+
+ /**
+ * @param MessageCollection $collection
+ * @return string
+ */
+ protected function doAuthors( MessageCollection $collection ) {
+ $output = '';
+ $authors = $collection->getAuthors();
+ $authors = $this->filterAuthors( $authors, $collection->code );
+
+ foreach ( $authors as $author ) {
+ $output .= "// Author: $author\n";
+ }
+
+ return $output;
+ }
+
+ public static function getExtraSchema() {
+ $schema = [
+ 'root' => [
+ '_type' => 'array',
+ '_children' => [
+ 'FILES' => [
+ '_type' => 'array',
+ '_children' => [
+ 'header' => [
+ '_type' => 'text',
+ ],
+ ]
+ ]
+ ]
+ ]
+ ];
+
+ return $schema;
+ }
+}
diff --git a/Translate/ffs/AppleInfoPlistFfs.php b/Translate/ffs/AppleInfoPlistFfs.php
new file mode 100644
index 00000000..42ded4ae
--- /dev/null
+++ b/Translate/ffs/AppleInfoPlistFfs.php
@@ -0,0 +1,52 @@
+<?php
+
+/**
+ * AppleInfoPlistFfs extends the AppleFFS class and implements support for
+ * Apple InfoPlist .strings files.
+ *
+ * This class reads and writes only UTF-8 files.
+ *
+ * @ingroup FFS
+ * @since 2020.03
+ */
+class AppleInfoPlistFfs extends AppleFFS {
+ /**
+ * Parses non-empty strings file row to key and value.
+ * @param string $line
+ * @throws RuntimeException
+ * @return array array( string $key, string $val )
+ */
+ public static function readRow( $line ) {
+ $match = [];
+ // InfoPList file does not use quoted keys, allows only basic characters without spaces
+ // as keys.
+ if ( preg_match( '/([A-Za-z ]*)\s*=\s*"((?:\\\"|[^"])*)"\s*;\s*$/', $line, $match ) ) {
+ // trimming to allow beginning and ending spaces but these will be removed
+ // during exports.
+ $key = parent::unescapeString( trim( $match[1] ) );
+ $value = parent::unescapeString( $match[2] );
+
+ if ( $key === '' ) {
+ throw new RuntimeException( "Empty or invalid key in line: $line" );
+ }
+
+ if ( strpos( $key, ' ' ) !== false ) {
+ throw new RuntimeException( "Key with space found in line: $line" );
+ }
+
+ return [ $key, $value ];
+ } else {
+ throw new RuntimeException( "Unrecognized line format: $line." );
+ }
+ }
+
+ /**
+ * Writes well-formed properties file row with key and value.
+ * @param string $key
+ * @param string $value
+ * @return string
+ */
+ public static function writeRow( $key, $value ) {
+ return $key . ' = ' . parent::quoteString( $value ) . ';' . "\n";
+ }
+}
diff --git a/Translate/ffs/DtdFFS.php b/Translate/ffs/DtdFFS.php
new file mode 100644
index 00000000..3d23eed9
--- /dev/null
+++ b/Translate/ffs/DtdFFS.php
@@ -0,0 +1,107 @@
+<?php
+/**
+ * Implements FFS for DTD file format.
+ *
+ * @file
+ * @author Guillaume Duhamel
+ * @author Niklas Laxström
+ * @author Siebrand Mazeland
+ * @copyright Copyright © 2009-2010, Guillaume Duhamel, Niklas Laxström, Siebrand Mazeland
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * File format support for DTD.
+ *
+ * @ingroup FFS
+ */
+class DtdFFS extends SimpleFFS {
+ public function getFileExtensions() {
+ return [ '.dtd' ];
+ }
+
+ /**
+ * @param string $data
+ * @return array Parsed data.
+ */
+ public function readFromVariable( $data ) {
+ preg_match_all( ',# Author: ([^\n]+)\n,', $data, $matches );
+ $authors = $matches[1];
+
+ preg_match_all( ',<!ENTITY[ ]+([^ ]+)\s+"([^"]+)"[^>]*>,', $data, $matches );
+ list( , $keys, $messages ) = $matches;
+ $messages = array_combine(
+ $keys,
+ array_map(
+ static function ( $message ) {
+ return html_entity_decode( $message, ENT_QUOTES );
+ },
+ $messages
+ )
+ );
+
+ $messages = $this->group->getMangler()->mangleArray( $messages );
+
+ return [
+ 'AUTHORS' => $authors,
+ 'MESSAGES' => $messages,
+ ];
+ }
+
+ protected function writeReal( MessageCollection $collection ) {
+ $collection->loadTranslations();
+
+ $header = "<!--\n";
+ $header .= $this->doHeader( $collection );
+ $header .= $this->doAuthors( $collection );
+ $header .= "-->\n";
+
+ $output = '';
+ $mangler = $this->group->getMangler();
+
+ /** @var TMessage $m */
+ foreach ( $collection as $key => $m ) {
+ $key = $mangler->unmangle( $key );
+ $trans = $m->translation();
+ $trans = str_replace( TRANSLATE_FUZZY, '', $trans );
+
+ if ( $trans === '' ) {
+ continue;
+ }
+
+ $trans = str_replace( '"', '&quot;', $trans );
+ $output .= "<!ENTITY $key \"$trans\">\n";
+ }
+
+ if ( $output ) {
+ return $header . $output;
+ }
+
+ return false;
+ }
+
+ protected function doHeader( MessageCollection $collection ) {
+ global $wgSitename;
+
+ $code = $collection->code;
+ $name = TranslateUtils::getLanguageName( $code );
+ $native = TranslateUtils::getLanguageName( $code, $code );
+
+ $output = "# Messages for $name ($native)\n";
+ $output .= "# Exported from $wgSitename\n\n";
+
+ return $output;
+ }
+
+ protected function doAuthors( MessageCollection $collection ) {
+ $output = '';
+ $authors = $collection->getAuthors();
+ $authors = $this->filterAuthors( $authors, $collection->code );
+
+ foreach ( $authors as $author ) {
+ $output .= "# Author: $author\n";
+ }
+
+ return $output;
+ }
+}
diff --git a/Translate/ffs/FFS.php b/Translate/ffs/FFS.php
new file mode 100644
index 00000000..2c89f736
--- /dev/null
+++ b/Translate/ffs/FFS.php
@@ -0,0 +1,109 @@
+<?php
+/**
+ * File format support classes.
+ *
+ * These classes handle parsing and generating various different
+ * file formats where translation messages are stored.
+ *
+ * @file
+ * @defgroup FFS File format support
+ * @author Niklas Laxström
+ * @copyright Copyright © 2008-2013, Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * Interface for file system support classes.
+ * @ingroup FFS
+ */
+interface FFS {
+ public function __construct( FileBasedMessageGroup $group );
+
+ /**
+ * Set the file's location in the system
+ * @param string $target Filesystem path for exported files.
+ */
+ public function setWritePath( $target );
+
+ /**
+ * Get the file's location in the system
+ * @return string
+ */
+ public function getWritePath();
+
+ /**
+ * Will parse messages, authors, and any custom data from the file
+ * and return it in associative array with keys like \c AUTHORS and
+ * \c MESSAGES.
+ * @param string $code Language code.
+ * @return array|bool Parsed data or false on failure.
+ */
+ public function read( $code );
+
+ /**
+ * Same as read(), but takes the data as a parameter. The caller
+ * is supposed to know in what language the translations are.
+ * @param string $data Formatted messages.
+ * @return array Parsed data.
+ */
+ public function readFromVariable( $data );
+
+ /**
+ * Writes to the location provided with setWritePath and group specific
+ * directory structure. Exports translations included in the given
+ * collection with any special handling needed.
+ * @param MessageCollection $collection
+ */
+ public function write( MessageCollection $collection );
+
+ /**
+ * Quick shortcut for getting the plain exported data.
+ * Same as write(), but returns the output instead of writing it into
+ * a file.
+ * @param MessageCollection $collection
+ * @return string
+ */
+ public function writeIntoVariable( MessageCollection $collection );
+
+ /**
+ * Query the capabilities of this FFS. Allowed values are:
+ * - yes
+ * - write (ignored on read)
+ * - no (stripped on write)
+ * @return string
+ * @since 2013-03-05
+ */
+ public function supportsFuzzy();
+
+ /**
+ * Checks whether two strings are equal. Sometimes same content might
+ * have multiple representations. The main case are inline plurals,
+ * which in some formats require expansion at export time.
+ *
+ * @param string $a
+ * @param string $b
+ * @return bool
+ * @since 2016.11
+ */
+ public function isContentEqual( $a, $b );
+
+ /**
+ * Return the commonly used file extensions for these formats.
+ * Include the dot.
+ * @return string[]
+ * @since 2013-04
+ */
+ public function getFileExtensions();
+
+ /**
+ * Allows to skip writing the export output into a file. This is useful
+ * to skip updates that would only update irrelevant parts, such as the
+ * timestamp of the export.
+ *
+ * @param string $a The existing content.
+ * @param string $b The new export content.
+ * @return bool
+ * @since 2017.04
+ */
+ public function shouldOverwrite( $a, $b );
+}
diff --git a/Translate/ffs/FlatPhpFFS.php b/Translate/ffs/FlatPhpFFS.php
new file mode 100644
index 00000000..f0eeef96
--- /dev/null
+++ b/Translate/ffs/FlatPhpFFS.php
@@ -0,0 +1,145 @@
+<?php
+/**
+ * PHP variables file format handler.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @author Siebrand Mazeland
+ * @copyright Copyright © 2008-2010, Niklas Laxström, Siebrand Mazeland
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * Implements file format support for PHP files which consist of multiple
+ * variable assignments.
+ */
+class FlatPhpFFS extends SimpleFFS implements MetaYamlSchemaExtender {
+ public function getFileExtensions() {
+ return [ '.php' ];
+ }
+
+ /**
+ * @param string $data
+ * @return array Parsed data.
+ */
+ public function readFromVariable( $data ) {
+ # Authors first
+ $matches = [];
+ preg_match_all( '/^ \* @author\s+(.+)$/m', $data, $matches );
+ $authors = $matches[1];
+
+ # Then messages
+ $matches = [];
+ $regex = '/^\$(.*?)\s*=\s*[\'"](.*?)[\'"];.*?$/mus';
+ preg_match_all( $regex, $data, $matches, PREG_SET_ORDER );
+ $messages = [];
+
+ foreach ( $matches as $_ ) {
+ $legal = Title::legalChars();
+ $key = preg_replace_callback( "/([^$legal]|\\\\)/u",
+ static function ( $m ) {
+ return '\x' . dechex( ord( $m[0] ) );
+ },
+ $_[1]
+ );
+ $value = str_replace( [ "\'", "\\\\" ], [ "'", "\\" ], $_[2] );
+ $messages[$key] = $value;
+ }
+
+ $messages = $this->group->getMangler()->mangleArray( $messages );
+
+ return [
+ 'AUTHORS' => $authors,
+ 'MESSAGES' => $messages,
+ ];
+ }
+
+ protected function writeReal( MessageCollection $collection ) {
+ $output = $this->extra['header'] ?? "<?php\n";
+ $output .= $this->doHeader( $collection );
+
+ $mangler = $this->group->getMangler();
+
+ /** @var TMessage $item */
+ foreach ( $collection as $item ) {
+ $key = $mangler->unmangle( $item->key() );
+ $key = stripcslashes( $key );
+
+ $value = $item->translation();
+ if ( $value === null ) {
+ continue;
+ }
+
+ $value = str_replace( TRANSLATE_FUZZY, '', $value );
+ $value = addcslashes( $value, "'" );
+
+ $output .= "\$$key = '$value';\n";
+ }
+
+ return $output;
+ }
+
+ protected function doHeader( MessageCollection $collection ) {
+ global $wgServer, $wgTranslateDocumentationLanguageCode;
+
+ $code = $collection->code;
+ $name = TranslateUtils::getLanguageName( $code );
+ $native = TranslateUtils::getLanguageName( $code, $code );
+
+ if ( $wgTranslateDocumentationLanguageCode ) {
+ $docu = "\n * See the $wgTranslateDocumentationLanguageCode 'language' for " .
+ 'message documentation incl. usage of parameters';
+ } else {
+ $docu = '';
+ }
+
+ $authors = $this->doAuthors( $collection );
+
+ $output = <<<PHP
+/** $name ($native)
+ * $docu
+ * To improve a translation please visit $wgServer
+ *
+ * @ingroup Language
+ * @file
+ *
+$authors */
+
+
+PHP;
+
+ return $output;
+ }
+
+ protected function doAuthors( MessageCollection $collection ) {
+ $output = '';
+ $authors = $collection->getAuthors();
+ $authors = $this->filterAuthors( $authors, $collection->code );
+
+ foreach ( $authors as $author ) {
+ $output .= " * @author $author\n";
+ }
+
+ return $output;
+ }
+
+ public static function getExtraSchema() {
+ $schema = [
+ 'root' => [
+ '_type' => 'array',
+ '_children' => [
+ 'FILES' => [
+ '_type' => 'array',
+ '_children' => [
+ 'header' => [
+ '_type' => 'text',
+ ],
+ ]
+ ]
+ ]
+ ]
+ ];
+
+ return $schema;
+ }
+}
diff --git a/Translate/ffs/GettextFFS.php b/Translate/ffs/GettextFFS.php
new file mode 100644
index 00000000..c824b4aa
--- /dev/null
+++ b/Translate/ffs/GettextFFS.php
@@ -0,0 +1,690 @@
+<?php
+/**
+ * Gettext file format handler for both old and new style message groups.
+ *
+ * @author Niklas Laxström
+ * @author Siebrand Mazeland
+ * @copyright Copyright © 2008-2010, Niklas Laxström, Siebrand Mazeland
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+use MediaWiki\Extension\Translate\MessageProcessing\StringMangler;
+use MediaWiki\Extension\Translate\Utilities\GettextPlural;
+use MediaWiki\Logger\LoggerFactory;
+
+/**
+ * New-style FFS class that implements support for gettext file format.
+ * @ingroup FFS
+ */
+class GettextFFS extends SimpleFFS implements MetaYamlSchemaExtender {
+ private $allowPotMode = false;
+ protected $offlineMode = false;
+
+ public function supportsFuzzy() {
+ return 'yes';
+ }
+
+ public function getFileExtensions() {
+ return [ '.pot', '.po' ];
+ }
+
+ /** @param bool $value */
+ public function setOfflineMode( $value ) {
+ $this->offlineMode = $value;
+ }
+
+ /** @inheritDoc */
+ public function read( $code ) {
+ // This is somewhat hacky, but pot mode should only ever be used for the source language.
+ // See https://phabricator.wikimedia.org/T230361
+ $this->allowPotMode = $this->getGroup()->getSourceLanguage() === $code;
+
+ try {
+ return parent::read( $code );
+ } finally {
+ $this->allowPotMode = false;
+ }
+ }
+
+ /**
+ * @param string $data
+ * @return array
+ */
+ public function readFromVariable( $data ) {
+ # Authors first
+ $matches = [];
+ preg_match_all( '/^#\s*Author:\s*(.*)$/m', $data, $matches );
+ $authors = $matches[1];
+
+ # Then messages and everything else
+ $parsedData = $this->parseGettext( $data );
+ $parsedData['AUTHORS'] = $authors;
+
+ foreach ( $parsedData['MESSAGES'] as $key => $value ) {
+ if ( $value === '' ) {
+ unset( $parsedData['MESSAGES'][$key] );
+ }
+ }
+
+ return $parsedData;
+ }
+
+ public function parseGettext( $data ) {
+ $mangler = $this->group->getMangler();
+ $useCtxtAsKey = $this->extra['CtxtAsKey'] ?? false;
+ $keyAlgorithm = 'simple';
+ if ( isset( $this->extra['keyAlgorithm'] ) ) {
+ $keyAlgorithm = $this->extra['keyAlgorithm'];
+ }
+
+ return self::parseGettextData( $data, $useCtxtAsKey, $mangler, $keyAlgorithm, $this->allowPotMode );
+ }
+
+ /**
+ * Parses gettext file as string into internal representation.
+ * @param string $data
+ * @param bool $useCtxtAsKey Whether to create message keys from the context
+ * or use msgctxt (non-standard po-files)
+ * @param StringMangler $mangler
+ * @param string $keyAlgorithm Key generation algorithm, see generateKeyFromItem
+ * @param bool $allowPotMode
+ * @throws MWException
+ * @return array
+ */
+ public static function parseGettextData(
+ $data,
+ $useCtxtAsKey,
+ StringMangler $mangler,
+ $keyAlgorithm,
+ bool $allowPotMode
+ ) {
+ $potmode = false;
+
+ // Normalise newlines, to make processing easier
+ $data = str_replace( "\r\n", "\n", $data );
+
+ /* Delimit the file into sections, which are separated by two newlines.
+ * We are permissive and accept more than two. This parsing method isn't
+ * efficient wrt memory, but was easy to implement */
+ $sections = preg_split( '/\n{2,}/', $data );
+
+ /* First one isn't an actual message. We'll handle it specially below */
+ $headerSection = array_shift( $sections );
+ /* Since this is the header section, we are only interested in the tags
+ * and msgid is empty. Somewhere we should extract the header comments
+ * too */
+ $match = self::expectKeyword( 'msgstr', $headerSection );
+ if ( $match !== null ) {
+ $headerBlock = self::formatForWiki( $match, 'trim' );
+ $headers = self::parseHeaderTags( $headerBlock );
+
+ // Check for pot-mode by checking if the header is fuzzy
+ $flags = self::parseFlags( $headerSection );
+ if ( in_array( 'fuzzy', $flags, true ) ) {
+ $potmode = $allowPotMode;
+ }
+ } else {
+ $message = "Gettext file header was not found:\n\n$data";
+ throw new GettextParseException( $message );
+ }
+
+ $template = [];
+ $messages = [];
+
+ // Extract some metadata from headers for easier use
+ $metadata = [];
+ if ( isset( $headers['X-Language-Code'] ) ) {
+ $metadata['code'] = $headers['X-Language-Code'];
+ }
+
+ if ( isset( $headers['X-Message-Group'] ) ) {
+ $metadata['group'] = $headers['X-Message-Group'];
+ }
+
+ /* At this stage we are only interested how many plurals forms we should
+ * be expecting when parsing the rest of this file. */
+ $pluralCount = false;
+ if ( $potmode ) {
+ $pluralCount = 2;
+ } elseif ( isset( $headers['Plural-Forms'] ) ) {
+ $pluralCount = $metadata['plural'] = GettextPlural::getPluralCount( $headers['Plural-Forms'] );
+ }
+
+ $metadata['plural'] = $pluralCount;
+
+ // Then parse the messages
+ foreach ( $sections as $section ) {
+ $item = self::parseGettextSection( $section, $pluralCount );
+ if ( $item === false ) {
+ continue;
+ }
+
+ if ( $useCtxtAsKey ) {
+ if ( !isset( $item['ctxt'] ) ) {
+ error_log( "ctxt missing for: $section" );
+ continue;
+ }
+ $key = $item['ctxt'];
+ } else {
+ $key = self::generateKeyFromItem( $item, $keyAlgorithm );
+ }
+
+ $key = $mangler->mangle( $key );
+ $messages[$key] = $potmode ? $item['id'] : $item['str'];
+ $template[$key] = $item;
+ }
+
+ return [
+ 'MESSAGES' => $messages,
+ 'EXTRA' => [
+ 'TEMPLATE' => $template,
+ 'METADATA' => $metadata,
+ 'HEADERS' => $headers,
+ ],
+ ];
+ }
+
+ public static function parseGettextSection( $section, $pluralCount ) {
+ if ( trim( $section ) === '' ) {
+ return false;
+ }
+
+ /* These inactive sections are of no interest to us. Multiline mode
+ * is needed because there may be flags or other annoying stuff
+ * before the commented out sections.
+ */
+ if ( preg_match( '/^#~/m', $section ) ) {
+ return false;
+ }
+
+ $item = [
+ 'ctxt' => false,
+ 'id' => '',
+ 'str' => '',
+ 'flags' => [],
+ 'comments' => [],
+ ];
+
+ $match = self::expectKeyword( 'msgid', $section );
+ if ( $match !== null ) {
+ $item['id'] = self::formatForWiki( $match );
+ } else {
+ throw new MWException( "Unable to parse msgid:\n\n$section" );
+ }
+
+ $match = self::expectKeyword( 'msgctxt', $section );
+ if ( $match !== null ) {
+ $item['ctxt'] = self::formatForWiki( $match );
+ }
+
+ $pluralMessage = false;
+ $match = self::expectKeyword( 'msgid_plural', $section );
+ if ( $match !== null ) {
+ $pluralMessage = true;
+ $plural = self::formatForWiki( $match );
+ $item['id'] = GettextPlural::flatten( [ $item['id'], $plural ] );
+ }
+
+ if ( $pluralMessage ) {
+ $pluralMessageText = self::processGettextPluralMessage( $pluralCount, $section );
+
+ // Keep the translation empty if no form has translation
+ if ( $pluralMessageText !== '' ) {
+ $item['str'] = $pluralMessageText;
+ }
+ } else {
+ $match = self::expectKeyword( 'msgstr', $section );
+ if ( $match !== null ) {
+ $item['str'] = self::formatForWiki( $match );
+ } else {
+ throw new MWException( "Unable to parse msgstr:\n\n$section" );
+ }
+ }
+
+ // Parse flags
+ $flags = self::parseFlags( $section );
+ foreach ( $flags as $key => $flag ) {
+ if ( $flag === 'fuzzy' ) {
+ $item['str'] = TRANSLATE_FUZZY . $item['str'];
+ unset( $flags[$key] );
+ }
+ }
+ $item['flags'] = $flags;
+
+ // Rest of the comments
+ $matches = [];
+ if ( preg_match_all( '/^#(.?) (.*)$/m', $section, $matches, PREG_SET_ORDER ) ) {
+ foreach ( $matches as $match ) {
+ if ( $match[1] !== ',' && strpos( $match[1], '[Wiki]' ) !== 0 ) {
+ $item['comments'][$match[1]][] = $match[2];
+ }
+ }
+ }
+
+ return $item;
+ }
+
+ public static function processGettextPluralMessage( $pluralCount, $section ) {
+ $actualForms = [];
+
+ for ( $i = 0; $i < $pluralCount; $i++ ) {
+ $match = self::expectKeyword( "msgstr\\[$i\\]", $section );
+
+ if ( $match !== null ) {
+ $actualForms[] = self::formatForWiki( $match );
+ } else {
+ $actualForms[] = '';
+ error_log( "Plural $i not found, expecting total of $pluralCount for $section" );
+ }
+ }
+
+ if ( array_sum( array_map( 'strlen', $actualForms ) ) > 0 ) {
+ return GettextPlural::flatten( $actualForms );
+ } else {
+ return '';
+ }
+ }
+
+ public static function parseFlags( $section ) {
+ $matches = [];
+ if ( preg_match( '/^#,(.*)$/mu', $section, $matches ) ) {
+ return array_map( 'trim', explode( ',', $matches[1] ) );
+ } else {
+ return [];
+ }
+ }
+
+ public static function expectKeyword( $name, $section ) {
+ /* Catches the multiline textblock that comes after keywords msgid,
+ * msgstr, msgid_plural, msgctxt.
+ */
+ $poformat = '".*"\n?(^".*"$\n?)*';
+
+ $matches = [];
+ if ( preg_match( "/^$name\s($poformat)/mx", $section, $matches ) ) {
+ return $matches[1];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Generates unique key for each message. Changing this WILL BREAK ALL
+ * existing pages!
+ * @param array $item As returned by parseGettextSection
+ * @param string $algorithm Algorithm used to generate message keys: simple or legacy
+ * @return string
+ */
+ public static function generateKeyFromItem( array $item, $algorithm = 'simple' ) {
+ $lang = Language::factory( 'en' );
+
+ if ( $item['ctxt'] === '' ) {
+ /* Messages with msgctxt as empty string should be different
+ * from messages without any msgctxt. To avoid BC break make
+ * the empty ctxt a special case */
+ $hash = sha1( $item['id'] . 'MSGEMPTYCTXT' );
+ } else {
+ $hash = sha1( $item['ctxt'] . $item['id'] );
+ }
+
+ if ( $algorithm === 'simple' ) {
+ $hash = substr( $hash, 0, 6 );
+ $snippet = $lang->truncateForDatabase( $item['id'], 30, '' );
+ $snippet = str_replace( ' ', '_', trim( $snippet ) );
+ } else { // legacy
+ $legalChars = Title::legalChars();
+ $snippet = $item['id'];
+ $snippet = preg_replace( "/[^$legalChars]/", ' ', $snippet );
+ $snippet = preg_replace( "/[:&%\/_]/", ' ', $snippet );
+ $snippet = preg_replace( '/ {2,}/', ' ', $snippet );
+ $snippet = $lang->truncateForDatabase( $snippet, 30, '' );
+ $snippet = str_replace( ' ', '_', trim( $snippet ) );
+ }
+
+ return "$hash-$snippet";
+ }
+
+ /**
+ * This parses the Gettext text block format. Since trailing whitespace is
+ * not allowed in MediaWiki pages, the default action is to append
+ * \-character at the end of the message. You can also choose to ignore it
+ * and use the trim action instead.
+ * @param string $data
+ * @param string $whitespace
+ * @throws MWException
+ * @return string
+ */
+ public static function formatForWiki( $data, $whitespace = 'mark' ) {
+ $quotePattern = '/(^"|"$\n?)/m';
+ $data = preg_replace( $quotePattern, '', $data );
+ $data = stripcslashes( $data );
+
+ if ( preg_match( '/\s$/', $data ) ) {
+ if ( $whitespace === 'mark' ) {
+ $data .= '\\';
+ } elseif ( $whitespace === 'trim' ) {
+ $data = rtrim( $data );
+ } else {
+ // @todo Only triggered if there is trailing whitespace
+ throw new MWException( 'Unknown action for whitespace' );
+ }
+ }
+
+ return $data;
+ }
+
+ public static function parseHeaderTags( $headers ) {
+ $tags = [];
+ foreach ( explode( "\n", $headers ) as $line ) {
+ if ( strpos( $line, ':' ) === false ) {
+ error_log( __METHOD__ . ": $line" );
+ }
+ [ $key, $value ] = explode( ':', $line, 2 );
+ $tags[trim( $key )] = trim( $value );
+ }
+
+ return $tags;
+ }
+
+ protected function writeReal( MessageCollection $collection ) {
+ // FIXME: this should be the source language
+ $pot = $this->read( 'en' ) ?? [];
+ $code = $collection->code;
+ $template = $this->read( $code ) ?? [];
+ $output = $this->doGettextHeader( $collection, $template['EXTRA'] ?? [] );
+
+ $pluralRule = GettextPlural::getPluralRule( $code );
+ if ( !$pluralRule ) {
+ $pluralRule = GettextPlural::getPluralRule( 'en' );
+ LoggerFactory::getInstance( 'Translate' )->warning(
+ "T235180: Missing Gettext plural rule for '{languagecode}'",
+ [ 'languagecode' => $code ]
+ );
+ }
+ $pluralCount = GettextPlural::getPluralCount( $pluralRule );
+
+ /** @var TMessage $m */
+ foreach ( $collection as $key => $m ) {
+ $transTemplate = $template['EXTRA']['TEMPLATE'][$key] ?? [];
+ $potTemplate = $pot['EXTRA']['TEMPLATE'][$key] ?? [];
+
+ $output .= $this->formatMessageBlock( $key, $m, $transTemplate, $potTemplate, $pluralCount );
+ }
+
+ return $output;
+ }
+
+ protected function doGettextHeader( MessageCollection $collection, $template ) {
+ global $wgSitename;
+
+ $code = $collection->code;
+ $name = TranslateUtils::getLanguageName( $code );
+ $native = TranslateUtils::getLanguageName( $code, $code );
+ $authors = $this->doAuthors( $collection );
+ if ( isset( $this->extra['header'] ) ) {
+ $extra = "# --\n" . $this->extra['header'];
+ } else {
+ $extra = '';
+ }
+
+ $output = <<<PHP
+# Translation of {$this->group->getLabel()} to $name ($native)
+# Exported from $wgSitename
+#
+$authors$extra
+PHP;
+
+ // Make sure there is no empty line before msgid
+ $output = trim( $output ) . "\n";
+
+ $specs = $template['HEADERS'] ?? [];
+
+ $timestamp = wfTimestampNow();
+ $specs['PO-Revision-Date'] = self::formatTime( $timestamp );
+ if ( $this->offlineMode ) {
+ $specs['POT-Creation-Date'] = self::formatTime( $timestamp );
+ } elseif ( $this->group instanceof MessageGroupBase ) {
+ $specs['X-POT-Import-Date'] = self::formatTime( wfTimestamp( TS_MW, $this->getPotTime() ) );
+ }
+ $specs['Content-Type'] = 'text/plain; charset=UTF-8';
+ $specs['Content-Transfer-Encoding'] = '8bit';
+ $specs['Language'] = LanguageCode::bcp47( $this->group->mapCode( $code ) );
+ Hooks::run( 'Translate:GettextFFS:headerFields', [ &$specs, $this->group, $code ] );
+ $specs['X-Generator'] = $this->getGenerator();
+
+ if ( $this->offlineMode ) {
+ $specs['X-Language-Code'] = $code;
+ $specs['X-Message-Group'] = $this->group->getId();
+ }
+
+ $specs['Plural-Forms'] = GettextPlural::getPluralRule( $code )
+ ?: GettextPlural::getPluralRule( 'en' );
+
+ $output .= 'msgid ""' . "\n";
+ $output .= 'msgstr ""' . "\n";
+ $output .= '""' . "\n";
+
+ foreach ( $specs as $k => $v ) {
+ $output .= self::escape( "$k: $v\n" ) . "\n";
+ }
+
+ $output .= "\n";
+
+ return $output;
+ }
+
+ protected function doAuthors( MessageCollection $collection ) {
+ $output = '';
+ $authors = $collection->getAuthors();
+ $authors = $this->filterAuthors( $authors, $collection->code );
+
+ foreach ( $authors as $author ) {
+ $output .= "# Author: $author\n";
+ }
+
+ return $output;
+ }
+
+ /**
+ * @param string $key
+ * @param TMessage $m
+ * @param array $trans
+ * @param array $pot
+ * @param int $pluralCount
+ * @return string
+ */
+ protected function formatMessageBlock( $key, $m, $trans, $pot, $pluralCount ) {
+ $header = $this->formatDocumentation( $key );
+ $content = '';
+
+ $comments = self::chainGetter( 'comments', $pot, $trans, [] );
+ foreach ( $comments as $type => $typecomments ) {
+ foreach ( $typecomments as $comment ) {
+ $header .= "#$type $comment\n";
+ }
+ }
+
+ $flags = self::chainGetter( 'flags', $pot, $trans, [] );
+ $flags = array_merge( $m->getTags(), $flags );
+
+ if ( $this->offlineMode ) {
+ $content .= 'msgctxt ' . self::escape( $key ) . "\n";
+ } else {
+ $ctxt = self::chainGetter( 'ctxt', $pot, $trans, false );
+ if ( $ctxt !== false ) {
+ $content .= 'msgctxt ' . self::escape( $ctxt ) . "\n";
+ }
+ }
+
+ $msgid = $m->definition();
+ $msgstr = $m->translation();
+ if ( strpos( $msgstr, TRANSLATE_FUZZY ) !== false ) {
+ $msgstr = str_replace( TRANSLATE_FUZZY, '', $msgstr );
+ // Might by fuzzy infile
+ $flags[] = 'fuzzy';
+ }
+
+ if ( GettextPlural::hasPlural( $msgid ) ) {
+ $forms = GettextPlural::unflatten( $msgid, 2 );
+ $content .= 'msgid ' . self::escape( $forms[0] ) . "\n";
+ $content .= 'msgid_plural ' . self::escape( $forms[1] ) . "\n";
+
+ try {
+ $forms = GettextPlural::unflatten( $msgstr, $pluralCount );
+ foreach ( $forms as $index => $form ) {
+ $content .= "msgstr[$index] " . self::escape( $form ) . "\n";
+ }
+ } catch ( GettextPluralException $e ) {
+ $flags[] = 'invalid-plural';
+ for ( $i = 0; $i < $pluralCount; $i++ ) {
+ $content .= "msgstr[$i] \"\"\n";
+ }
+ }
+ } else {
+ $content .= 'msgid ' . self::escape( $msgid ) . "\n";
+ $content .= 'msgstr ' . self::escape( $msgstr ) . "\n";
+ }
+
+ if ( $flags ) {
+ sort( $flags );
+ $header .= '#, ' . implode( ', ', array_unique( $flags ) ) . "\n";
+ }
+
+ $output = $header ?: "#\n";
+ $output .= $content . "\n";
+
+ return $output;
+ }
+
+ /**
+ * @param string $key
+ * @param array $a
+ * @param array $b
+ * @param mixed $default
+ * @return mixed
+ */
+ protected static function chainGetter( $key, $a, $b, $default ) {
+ return $a[$key] ?? $b[$key] ?? $default;
+ }
+
+ protected static function formatTime( $time ) {
+ $lang = Language::factory( 'en' );
+
+ return $lang->sprintfDate( 'xnY-xnm-xnd xnH:xni:xns+0000', $time );
+ }
+
+ protected function getPotTime() {
+ $cache = $this->group->getMessageGroupCache( $this->group->getSourceLanguage() );
+
+ return $cache->exists() ? $cache->getTimestamp() : wfTimestampNow();
+ }
+
+ protected function getGenerator() {
+ return 'MediaWiki ' . SpecialVersion::getVersion() .
+ '; Translate ' . TranslateUtils::getVersion();
+ }
+
+ protected function formatDocumentation( $key ) {
+ global $wgTranslateDocumentationLanguageCode;
+
+ if ( !$this->offlineMode ) {
+ return '';
+ }
+
+ $code = $wgTranslateDocumentationLanguageCode;
+ if ( !$code ) {
+ return '';
+ }
+
+ $documentation = TranslateUtils::getMessageContent( $key, $code, $this->group->getNamespace() );
+ if ( !is_string( $documentation ) ) {
+ return '';
+ }
+
+ $lines = explode( "\n", $documentation );
+ $out = '';
+ foreach ( $lines as $line ) {
+ $out .= "#. [Wiki] $line\n";
+ }
+
+ return $out;
+ }
+
+ protected static function escape( $line ) {
+ // There may be \ as a last character, for keeping trailing whitespace
+ $line = preg_replace( '/(\s)\\\\$/', '\1', $line );
+ $line = addcslashes( $line, '\\"' );
+ $line = str_replace( "\n", '\n', $line );
+ $line = '"' . $line . '"';
+
+ return $line;
+ }
+
+ public function shouldOverwrite( $a, $b ) {
+ $regex = '/^"(.+)-Date: \d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d\+\d\d\d\d\\\\n"$/m';
+
+ $a = preg_replace( $regex, '', $a );
+ $b = preg_replace( $regex, '', $b );
+
+ return $a !== $b;
+ }
+
+ public static function getExtraSchema() {
+ $schema = [
+ 'root' => [
+ '_type' => 'array',
+ '_children' => [
+ 'FILES' => [
+ '_type' => 'array',
+ '_children' => [
+ 'header' => [
+ '_type' => 'text',
+ ],
+ 'keyAlgorithm' => [
+ '_type' => 'enum',
+ '_values' => [ 'simple', 'legacy' ],
+ ],
+ 'CtxtAsKey' => [
+ '_type' => 'boolean',
+ ],
+ ]
+ ]
+ ]
+ ]
+ ];
+
+ return $schema;
+ }
+
+ public function isContentEqual( $a, $b ) {
+ if ( $a === $b ) {
+ return true;
+ }
+
+ try {
+ $parsedA = GettextPlural::parsePluralForms( $a );
+ $parsedB = GettextPlural::parsePluralForms( $b );
+
+ // if they have the different number of plural forms, just fail
+ if ( count( $parsedA[1] ) !== count( $parsedB[1] ) ) {
+ return false;
+ }
+
+ } catch ( GettextPluralException $e ) {
+ // Something failed, invalid syntax?
+ return false;
+ }
+
+ $expectedPluralCount = count( $parsedA[1] );
+
+ // GettextPlural::unflatten() will return an empty array when $expectedPluralCount is 0
+ // So if they do not have translations and are different strings, they are not equal
+ if ( $expectedPluralCount === 0 ) {
+ return false;
+ }
+
+ return GettextPlural::unflatten( $a, $expectedPluralCount )
+ === GettextPlural::unflatten( $b, $expectedPluralCount );
+ }
+}
diff --git a/Translate/ffs/GettextParseException.php b/Translate/ffs/GettextParseException.php
new file mode 100644
index 00000000..9d840d63
--- /dev/null
+++ b/Translate/ffs/GettextParseException.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * @author Michael Holloway
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+/**
+ * Exception thrown when a Gettext file could not be parsed, such as when missing required headers.
+ */
+class GettextParseException extends MWException {
+}
diff --git a/Translate/ffs/GettextPluralException.php b/Translate/ffs/GettextPluralException.php
new file mode 100644
index 00000000..d1a15e0f
--- /dev/null
+++ b/Translate/ffs/GettextPluralException.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+/**
+ * Identifies Gettext plural exceptions.
+ */
+class GettextPluralException extends MWException {
+}
diff --git a/Translate/ffs/IniFFS.php b/Translate/ffs/IniFFS.php
new file mode 100644
index 00000000..0c2591a4
--- /dev/null
+++ b/Translate/ffs/IniFFS.php
@@ -0,0 +1,112 @@
+<?php
+/**
+ * Support for ini message file format.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @copyright Copyright © 2012-2013, Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * IniFFS currently parses and generates flat ini files with language
+ * code as header key.
+ *
+ * @ingroup FFS
+ * @since 2012-11-19
+ */
+class IniFFS extends SimpleFFS {
+ public static function isValid( $data ) {
+ $conf = [
+ 'BASIC' => [ 'class' => FileBasedMessageGroup::class, 'namespace' => 8 ],
+ 'FILES' => []
+ ];
+ /** @var FileBasedMessageGroup $group */
+ $group = MessageGroupBase::factory( $conf );
+ '@phan-var FileBasedMessageGroup $group';
+
+ $ffs = new self( $group );
+ $parsed = $ffs->readFromVariable( $data );
+
+ return (bool)count( $parsed['MESSAGES'] );
+ }
+
+ public function supportsFuzzy() {
+ return 'write';
+ }
+
+ public function getFileExtensions() {
+ return [ '.ini' ];
+ }
+
+ /**
+ * @param string $data
+ * @return array Parsed data.
+ */
+ public function readFromVariable( $data ) {
+ $authors = [];
+ preg_match_all( '/^; Author: (.*)$/m', $data, $matches, PREG_SET_ORDER );
+ foreach ( $matches as $match ) {
+ $authors[] = $match[1];
+ }
+
+ // Remove comments
+ $data = preg_replace( '/^\s*;.*$/m', '', $data );
+ // Make sure values are quoted, PHP barks on stuff like ?{}|&~![()^
+ $data = preg_replace( '/(^.+?=\s*)([^\'"].+)$/m', '\1"\2"', $data );
+
+ $messages = parse_ini_string( $data );
+ if ( is_array( $messages ) ) {
+ $messages = $this->group->getMangler()->mangleArray( $messages );
+ } else {
+ $messages = null;
+ }
+
+ return [
+ 'MESSAGES' => $messages,
+ 'AUTHORS' => $authors,
+ ];
+ }
+
+ protected function writeReal( MessageCollection $collection ) {
+ $output = '';
+ $mangler = $this->group->getMangler();
+
+ /** @var TMessage $m */
+ foreach ( $collection as $key => $m ) {
+ $value = $m->translation();
+ if ( $value === null ) {
+ continue;
+ }
+
+ $comment = '';
+
+ if ( $m->hasTag( 'fuzzy' ) ) {
+ $value = str_replace( TRANSLATE_FUZZY, '', $value );
+ $comment = "; Fuzzy\n";
+ }
+
+ $key = $mangler->unmangle( $key );
+ $output .= "$comment$key = $value\n";
+ }
+
+ // Do not create empty files
+ if ( $output === '' ) {
+ return '';
+ }
+
+ global $wgSitename;
+ // Accumulator
+ $header = "; Exported from $wgSitename\n";
+
+ $authors = $collection->getAuthors();
+ $authors = $this->filterAuthors( $authors, $collection->getLanguage() );
+ foreach ( $authors as $author ) {
+ $header .= "; Author: $author\n";
+ }
+
+ $header .= '[' . $collection->getLanguage() . "]\n";
+
+ return $header . $output;
+ }
+}
diff --git a/Translate/ffs/JavaFFS.php b/Translate/ffs/JavaFFS.php
new file mode 100644
index 00000000..768a2716
--- /dev/null
+++ b/Translate/ffs/JavaFFS.php
@@ -0,0 +1,268 @@
+<?php
+
+/**
+ * JavaFFS class implements support for Java properties files.
+ * This class reads and writes only utf-8 files. Java projects
+ * need to run native2ascii on them before using them.
+ *
+ * This class adds a new item into FILES section of group configuration:
+ * \c keySeparator which defaults to '='.
+ * @ingroup FFS
+ */
+class JavaFFS extends SimpleFFS implements MetaYamlSchemaExtender {
+ public function supportsFuzzy() {
+ return 'write';
+ }
+
+ public function getFileExtensions() {
+ return [ '.properties' ];
+ }
+
+ protected $keySeparator = '=';
+
+ /** @param FileBasedMessageGroup $group */
+ public function __construct( FileBasedMessageGroup $group ) {
+ parent::__construct( $group );
+
+ if ( isset( $this->extra['keySeparator'] ) ) {
+ $this->keySeparator = $this->extra['keySeparator'];
+ }
+ }
+
+ /**
+ * @param string $data
+ * @return array Parsed data.
+ * @throws MWException
+ */
+ public function readFromVariable( $data ) {
+ $data = self::fixNewLines( $data );
+ $lines = array_map( 'ltrim', explode( "\n", $data ) );
+ $authors = $messages = [];
+ $linecontinuation = false;
+
+ $key = '';
+ $value = '';
+ foreach ( $lines as $line ) {
+ if ( $linecontinuation ) {
+ $linecontinuation = false;
+ $valuecont = $line;
+ $valuecont = str_replace( '\n', "\n", $valuecont );
+ $value .= $valuecont;
+ } else {
+ if ( $line === '' ) {
+ continue;
+ }
+
+ if ( $line[0] === '#' || $line[0] === '!' ) {
+ $match = [];
+ $ok = preg_match( '/#\s*Author:\s*(.*)/', $line, $match );
+
+ if ( $ok ) {
+ $authors[] = $match[1];
+ }
+
+ continue;
+ }
+
+ if ( strpos( $line, $this->keySeparator ) === false ) {
+ throw new MWException( "Line without separator '{$this->keySeparator}': $line." );
+ }
+
+ list( $key, $value ) = self::readRow( $line, $this->keySeparator );
+ if ( $key === '' ) {
+ throw new MWException( "Empty key in line $line." );
+ }
+ }
+
+ // @todo This doesn't handle the pathological case of even number of trailing \
+ if ( strlen( $value ) && $value[strlen( $value ) - 1] === "\\" ) {
+ $value = substr( $value, 0, strlen( $value ) - 1 );
+ $linecontinuation = true;
+ } else {
+ $messages[$key] = ltrim( $value );
+ }
+ }
+
+ $messages = $this->group->getMangler()->mangleArray( $messages );
+
+ return [
+ 'AUTHORS' => $authors,
+ 'MESSAGES' => $messages,
+ ];
+ }
+
+ /**
+ * @param MessageCollection $collection
+ * @return string
+ */
+ protected function writeReal( MessageCollection $collection ) {
+ $header = $this->doHeader( $collection );
+ $header .= $this->doAuthors( $collection );
+ $header .= "\n";
+
+ $output = '';
+ $mangler = $this->group->getMangler();
+
+ /** @var TMessage $m */
+ foreach ( $collection as $key => $m ) {
+ $value = $m->translation();
+ $value = str_replace( TRANSLATE_FUZZY, '', $value );
+
+ if ( $value === '' ) {
+ continue;
+ }
+
+ // Just to give an overview of translation quality.
+ if ( $m->hasTag( 'fuzzy' ) ) {
+ $output .= "# Fuzzy\n";
+ }
+
+ $key = $mangler->unmangle( $key );
+ $output .= self::writeRow( $key, $this->keySeparator, $value );
+ }
+
+ if ( $output ) {
+ return $header . $output;
+ }
+
+ return '';
+ }
+
+ /**
+ * Writes well-formed properties file row with key and value.
+ * @param string $key
+ * @param string $sep
+ * @param string $value
+ * @return string
+ * @since 2012-03-28
+ */
+ public static function writeRow( $key, $sep, $value ) {
+ /* Keys containing the separator need escaping. Also escape comment
+ * characters, though strictly they would only need escaping when
+ * they are the first character. Plus the escape character itself. */
+ $key = addcslashes( $key, "#!$sep\\" );
+ // Make sure we do not slip newlines trough... it would be fatal.
+ $value = str_replace( "\n", '\\n', $value );
+
+ return "$key$sep$value\n";
+ }
+
+ /**
+ * Parses non-empty properties file row to key and value.
+ * @param string $line
+ * @param string $sep
+ * @return string[]
+ * @since 2012-03-28
+ */
+ public static function readRow( $line, $sep ) {
+ if ( strpos( $line, '\\' ) === false ) {
+ /* Nothing appears to be escaped in this line.
+ * Just read the key and the value. */
+ list( $key, $value ) = explode( $sep, $line, 2 );
+ } else {
+ /* There might be escaped separators in the key.
+ * Using slower method to find the separator. */
+
+ /* Make the key default to empty instead of value, because
+ * empty key causes error on callers, while empty value
+ * wouldn't. */
+ $key = '';
+ $value = $line;
+
+ /* Find the first unescaped separator. Example:
+ * First line is the string being read, second line is the
+ * value of $escaped after having read the above character.
+ *
+ * ki\ts\\s\=a = koira
+ * 0010010010000
+ * ^ Not separator because $escaped was true
+ * ^ Split the string into key and value here
+ */
+
+ $len = strlen( $line );
+ $escaped = false;
+ for ( $i = 0; $i < $len; $i++ ) {
+ $char = $line[$i];
+ if ( $char === '\\' ) {
+ $escaped = !$escaped;
+ } elseif ( $escaped ) {
+ $escaped = false;
+ } elseif ( $char === $sep ) {
+ $key = substr( $line, 0, $i );
+ // Excluding the separator character from the value
+ $value = substr( $line, $i + 1 );
+ break;
+ }
+ }
+ }
+
+ /* We usually don't want to expand things like \t in values since
+ * translators cannot easily input those. But in keys we do.
+ * \n is exception we do handle in values. */
+ $key = trim( $key );
+ $key = stripcslashes( $key );
+ $value = ltrim( $value );
+ $value = str_replace( '\n', "\n", $value );
+
+ return [ $key, $value ];
+ }
+
+ /**
+ * @param MessageCollection $collection
+ * @return string
+ */
+ protected function doHeader( MessageCollection $collection ) {
+ if ( isset( $this->extra['header'] ) ) {
+ $output = $this->extra['header'];
+ } else {
+ global $wgSitename;
+
+ $code = $collection->code;
+ $name = TranslateUtils::getLanguageName( $code );
+ $native = TranslateUtils::getLanguageName( $code, $code );
+ $output = "# Messages for $name ($native)\n";
+ $output .= "# Exported from $wgSitename\n";
+ }
+
+ return $output;
+ }
+
+ /**
+ * @param MessageCollection $collection
+ * @return string
+ */
+ protected function doAuthors( MessageCollection $collection ) {
+ $output = '';
+ $authors = $collection->getAuthors();
+ $authors = $this->filterAuthors( $authors, $collection->code );
+
+ foreach ( $authors as $author ) {
+ $output .= "# Author: $author\n";
+ }
+
+ return $output;
+ }
+
+ public static function getExtraSchema() {
+ $schema = [
+ 'root' => [
+ '_type' => 'array',
+ '_children' => [
+ 'FILES' => [
+ '_type' => 'array',
+ '_children' => [
+ 'header' => [
+ '_type' => 'text',
+ ],
+ 'keySeparator' => [
+ '_type' => 'text',
+ ],
+ ]
+ ]
+ ]
+ ]
+ ];
+
+ return $schema;
+ }
+}
diff --git a/Translate/ffs/JavaScriptFFS.php b/Translate/ffs/JavaScriptFFS.php
new file mode 100644
index 00000000..8770d5a8
--- /dev/null
+++ b/Translate/ffs/JavaScriptFFS.php
@@ -0,0 +1,222 @@
+<?php
+
+/**
+ * Generic file format support for JavaScript formatted files.
+ * @ingroup FFS
+ */
+abstract class JavaScriptFFS extends SimpleFFS {
+ public function getFileExtensions() {
+ return [ '.js' ];
+ }
+
+ /**
+ * Message keys format.
+ *
+ * @param string $key
+ *
+ * @return string
+ */
+ abstract protected function transformKey( $key );
+
+ /**
+ * Header of message file.
+ *
+ * @param string $code
+ * @param string[] $authors
+ */
+ abstract protected function header( $code, array $authors );
+
+ /**
+ * Footer of message file.
+ */
+ abstract protected function footer();
+
+ /**
+ * @param string $data
+ * @return array Parsed data.
+ */
+ public function readFromVariable( $data ) {
+ /* Parse authors list */
+ $authors = preg_replace( "#/\* Translators\:\n(.*?)\n \*/(.*)#s", '$1', $data );
+ if ( $authors === $data ) {
+ $authors = [];
+ } else {
+ $authors = array_map(
+ static function ( $author ) {
+ // Each line should look like " * - Translatorname"
+ return substr( $author, 6 );
+ },
+ explode( "\n", $authors )
+ );
+ }
+
+ /* Pre-processing of messages */
+
+ /**
+ * Find the start and end of the data section (enclosed in curly braces).
+ */
+ $dataStart = strpos( $data, '{' );
+ $dataEnd = strrpos( $data, '}' );
+
+ /**
+ * Strip everything outside of the data section.
+ */
+ $data = substr( $data, $dataStart + 1, $dataEnd - $dataStart - 1 );
+
+ /**
+ * Strip comments.
+ */
+ $data = preg_replace( '#^(\s*?)//(.*?)$#m', '', $data );
+
+ /**
+ * Replace message endings with double quotes.
+ */
+ $data = preg_replace( "#\'\,\n#", "\",\n", $data );
+
+ /**
+ * Strip excess whitespace.
+ */
+ $data = trim( $data );
+
+ /**
+ * Per-key message processing.
+ */
+
+ /**
+ * Break in to segments.
+ */
+ $data = explode( "\",\n", $data );
+
+ $messages = [];
+ foreach ( $data as $segment ) {
+ /**
+ * Add back trailing quote, removed by explosion.
+ */
+ $segment .= '"';
+
+ /**
+ * Concatenate separated strings.
+ */
+ $segment = preg_replace( '/"\s*\+\s*"/', '', $segment );
+
+ list( $key, $value ) = preg_split( '/:\s*[\'"]/', $segment, 2 );
+
+ /**
+ * Strip excess whitespace from key and value, then quotation marks.
+ */
+ $key = trim( trim( $key ), "'\"" );
+ $value = trim( trim( $value ), "'\"" );
+
+ /**
+ * Unescape any JavaScript string syntax and append to message array.
+ */
+ $messages[$key] = self::unescapeJsString( $value );
+ }
+
+ $messages = $this->group->getMangler()->mangleArray( $messages );
+
+ return [
+ 'AUTHORS' => $authors,
+ 'MESSAGES' => $messages
+ ];
+ }
+
+ /**
+ * @param MessageCollection $collection
+ * @return string
+ */
+ public function writeReal( MessageCollection $collection ) {
+ $header = $this->header( $collection->code, $collection->getAuthors() );
+
+ $mangler = $this->group->getMangler();
+
+ /**
+ * Get and write messages.
+ */
+ $body = '';
+ /** @var TMessage $message */
+ foreach ( $collection as $message ) {
+ if ( strlen( $message->translation() ) === 0 ) {
+ continue;
+ }
+
+ $key = $mangler->unmangle( $message->key() );
+ $key = $this->transformKey( self::escapeJsString( $key ) );
+
+ $translation = self::escapeJsString( $message->translation() );
+
+ $body .= "\t{$key}: \"{$translation}\",\n";
+ }
+
+ if ( strlen( $body ) === 0 ) {
+ return false;
+ }
+
+ /**
+ * Strip last comma, re-add trailing newlines.
+ */
+ $body = substr( $body, 0, -2 );
+ $body .= "\n";
+
+ return $header . $body . $this->footer();
+ }
+
+ /**
+ * @param string[] $authors
+ * @return string
+ */
+ protected function authorsList( array $authors ) {
+ if ( $authors === [] ) {
+ return '';
+ }
+
+ $authorsList = '';
+ foreach ( $authors as $author ) {
+ $authorsList .= " * - $author\n";
+ }
+
+ // Remove trailing newline, and return.
+ return substr( " * Translators:\n$authorsList", 0, -1 );
+ }
+
+ // See ECMA 262 section 7.8.4 for string literal format
+ private static $pairs = [
+ "\\" => "\\\\",
+ "\"" => "\\\"",
+ "'" => "\\'",
+ "\n" => "\\n",
+ "\r" => "\\r",
+
+ // To avoid closing the element or CDATA section.
+ '<' => "\\x3c",
+ '>' => "\\x3e",
+
+ // To avoid any complaints about bad entity refs.
+ '&' => "\\x26",
+
+ /*
+ * Work around https://bugzilla.mozilla.org/show_bug.cgi?id=274152
+ * Encode certain Unicode formatting chars so affected
+ * versions of Gecko do not misinterpret our strings;
+ * this is a common problem with Farsi text.
+ */
+ "\xe2\x80\x8c" => "\\u200c", // ZERO WIDTH NON-JOINER
+ "\xe2\x80\x8d" => "\\u200d", // ZERO WIDTH JOINER
+ ];
+
+ /**
+ * @param string $string
+ * @return string
+ */
+ protected static function escapeJsString( $string ) {
+ return strtr( $string, self::$pairs );
+ }
+
+ /**
+ * @param string $string
+ * @return string
+ */
+ protected static function unescapeJsString( $string ) {
+ return strtr( $string, array_flip( self::$pairs ) );
+ }
+}
diff --git a/Translate/ffs/JsonFFS.php b/Translate/ffs/JsonFFS.php
new file mode 100644
index 00000000..f84ee789
--- /dev/null
+++ b/Translate/ffs/JsonFFS.php
@@ -0,0 +1,174 @@
+<?php
+/**
+ * Support for JSON message file format.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Extension\Translate\MessageProcessing\ArrayFlattener;
+
+/**
+ * JsonFFS implements a message format where messages are encoded
+ * as key-value pairs in JSON objects. The format is extended to
+ * support author information under the special @metadata key.
+ *
+ * @ingroup FFS
+ * @since 2012-09-21
+ */
+class JsonFFS extends SimpleFFS {
+ /** @var ArrayFlattener */
+ private $flattener;
+
+ /**
+ * @param string $data
+ * @return bool
+ */
+ public static function isValid( $data ) {
+ return is_array( FormatJson::decode( $data, /*as array*/true ) );
+ }
+
+ /** @param FileBasedMessageGroup $group */
+ public function __construct( FileBasedMessageGroup $group ) {
+ parent::__construct( $group );
+ $this->flattener = $this->getFlattener();
+ }
+
+ public function getFileExtensions() {
+ return [ '.json' ];
+ }
+
+ /**
+ * @param string $data
+ * @return array Parsed data.
+ */
+ public function readFromVariable( $data ) {
+ $messages = (array)FormatJson::decode( $data, /*as array*/true );
+ $authors = [];
+ $metadata = [];
+
+ if ( isset( $messages['@metadata']['authors'] ) ) {
+ $authors = (array)$messages['@metadata']['authors'];
+ unset( $messages['@metadata']['authors'] );
+ }
+
+ if ( isset( $messages['@metadata'] ) ) {
+ $metadata = $messages['@metadata'];
+ }
+
+ unset( $messages['@metadata'] );
+
+ if ( $this->flattener ) {
+ $messages = $this->flattener->flatten( $messages );
+ }
+
+ $messages = $this->group->getMangler()->mangleArray( $messages );
+
+ return [
+ 'MESSAGES' => $messages,
+ 'AUTHORS' => $authors,
+ 'EXTRA' => [ 'METADATA' => $metadata ],
+ ];
+ }
+
+ /**
+ * @param MessageCollection $collection
+ * @return string
+ */
+ protected function writeReal( MessageCollection $collection ) {
+ $template = $this->read( $collection->getLanguage() ) ?: [];
+ $authors = $this->filterAuthors( $collection->getAuthors(), $collection->getLanguage() );
+ $messages = [];
+
+ /** @var TMessage $m */
+ foreach ( $collection as $key => $m ) {
+ $value = $m->translation();
+ if ( $value === null ) {
+ continue;
+ }
+
+ if ( $m->hasTag( 'fuzzy' ) ) {
+ $value = str_replace( TRANSLATE_FUZZY, '', $value );
+ }
+
+ $messages[$key] = $value;
+ }
+
+ // Do not create files without translations
+ if ( $messages === [] ) {
+ return '';
+ }
+
+ $template['MESSAGES'] = $messages;
+ $template['AUTHORS'] = $authors;
+
+ return $this->generateFile( $template );
+ }
+
+ public function generateFile( array $template ): string {
+ $messages = $template['MESSAGES'];
+ $authors = $template['AUTHORS'];
+
+ if ( $this->flattener ) {
+ $messages = $this->flattener->unflatten( $messages );
+ }
+
+ $mangler = $this->group->getMangler();
+ $messages = $mangler->unmangleArray( $messages );
+
+ if ( $this->extra['includeMetadata'] ?? true ) {
+ $metadata = $template['EXTRA']['METADATA'] ?? [];
+ $metadata['authors'] = $authors;
+
+ $messages = [ '@metadata' => $metadata ] + $messages;
+ }
+
+ return FormatJson::encode( $messages, "\t", FormatJson::ALL_OK ) . "\n";
+ }
+
+ protected function getFlattener() {
+ if ( !isset( $this->extra['nestingSeparator'] ) ) {
+ return null;
+ }
+
+ $parseCLDRPlurals = $this->extra['parseCLDRPlurals'] ?? false;
+ $flattener = new ArrayFlattener( $this->extra['nestingSeparator'], $parseCLDRPlurals );
+
+ return $flattener;
+ }
+
+ public function isContentEqual( $a, $b ) {
+ if ( $this->flattener ) {
+ return $this->flattener->compareContent( $a, $b );
+ } else {
+ return parent::isContentEqual( $a, $b );
+ }
+ }
+
+ public static function getExtraSchema() {
+ $schema = [
+ 'root' => [
+ '_type' => 'array',
+ '_children' => [
+ 'FILES' => [
+ '_type' => 'array',
+ '_children' => [
+ 'nestingSeparator' => [
+ '_type' => 'text',
+ ],
+ 'parseCLDRPlurals' => [
+ '_type' => 'boolean',
+ ],
+ 'includeMetadata' => [
+ '_type' => 'boolean',
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+
+ return $schema;
+ }
+}
diff --git a/Translate/ffs/PremadeIntuitionTextdomains.php b/Translate/ffs/PremadeIntuitionTextdomains.php
new file mode 100644
index 00000000..0b23c49f
--- /dev/null
+++ b/Translate/ffs/PremadeIntuitionTextdomains.php
@@ -0,0 +1,87 @@
+<?php
+/**
+ * Class for Intuition for Translatewiki.net
+ *
+ * @file
+ * @author Niklas Laxström
+ * @author Krinkle
+ * @copyright Copyright © 2008-2013, Niklas Laxström
+ * @copyright Copyright © 2011, Krinkle
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * Support for tools using Intuition at the Toolserver and Wikimedia Labs.
+ */
+class PremadeIntuitionTextdomains extends PremadeMediawikiExtensionGroups {
+ protected $groups;
+ protected $idPrefix = 'tsint-';
+
+ protected function getDefaultNamespace() {
+ return NS_INTUITION;
+ }
+
+ protected function processGroups( $groups ) {
+ $fixedGroups = [];
+ foreach ( $groups as $g ) {
+ $name = $g['name'];
+ $sanitizedName = preg_replace( '/\s+/', '', strtolower( $name ) );
+
+ $id = $g['id'] ?? $this->idPrefix . $sanitizedName;
+
+ // Canonical names for Intuition text-domains are lowercase
+ // eg. "MyTool" -> "mytool/en.json"
+ $file = $g['file'] ?? "$sanitizedName/%CODE%.json";
+
+ $descmsg = $g['descmsg'] ?? "$id-desc";
+
+ $newgroup = [
+ 'name' => 'Intuition - ' . $name,
+ 'file' => $file,
+ 'descmsg' => $descmsg,
+ ];
+
+ // Prefix is required, if not customized use the sanitized name
+ if ( !isset( $g['prefix'] ) ) {
+ $g['prefix'] = "$sanitizedName-";
+ }
+
+ // All messages are prefixed with their groupname
+ $g['mangle'] = [ '*' ];
+
+ // Prevent E_NOTICE undefined index.
+ // PremadeMediawikiExtensionGroups::factory should probably check this better instead
+ if ( !isset( $g['ignored'] ) ) {
+ $g['ignored'] = [];
+ }
+
+ if ( !isset( $g['optional'] ) ) {
+ $g['optional'] = [];
+ }
+
+ $g['format'] = 'json';
+
+ $copyvars = [
+ 'aliasfile',
+ 'desc',
+ 'format',
+ 'ignored',
+ 'magicfile',
+ 'mangle',
+ 'optional',
+ 'prefix',
+ 'var',
+ ];
+
+ foreach ( $copyvars as $var ) {
+ if ( isset( $g[$var] ) ) {
+ $newgroup[$var] = $g[$var];
+ }
+ }
+
+ $fixedGroups[$id] = $newgroup;
+ }
+
+ return $fixedGroups;
+ }
+}
diff --git a/Translate/ffs/PremadeMediawikiExtensionGroups.php b/Translate/ffs/PremadeMediawikiExtensionGroups.php
new file mode 100644
index 00000000..2af4eb97
--- /dev/null
+++ b/Translate/ffs/PremadeMediawikiExtensionGroups.php
@@ -0,0 +1,328 @@
+<?php
+/**
+ * Classes for %MediaWiki extension translation.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Extension\Translate\MessageProcessing\StringMatcher;
+use MediaWiki\Extension\Translate\TranslatorInterface\Insertable\MediaWikiInsertablesSuggester;
+
+/**
+ * Class which handles special definition format for %MediaWiki extensions and skins.
+ */
+class PremadeMediawikiExtensionGroups {
+ /** @var string */
+ protected $idPrefix = 'ext-';
+ /** @var int */
+ protected $namespace;
+ /**
+ * @var string
+ * @see __construct
+ */
+ protected $path;
+ /**
+ * @var string
+ * @see __construct
+ */
+ protected $definitionFile;
+
+ /**
+ * @param string $def Absolute path to the definition file. See
+ * tests/data/mediawiki-extensions.txt for example.
+ * @param string $path General prefix to the file locations without
+ * the extension specific part. Should start with %GROUPROOT%/ or
+ * otherwise export path will be wrong. The export path is
+ * constructed by replacing %GROUPROOT%/ with target directory.
+ */
+ public function __construct( $def, $path ) {
+ $this->definitionFile = $def;
+ $this->path = rtrim( $path, '/' );
+ }
+
+ /**
+ * Get the default namespace. Subclasses can override this.
+ *
+ * @return int
+ */
+ protected function getDefaultNamespace() {
+ return NS_MEDIAWIKI;
+ }
+
+ /**
+ * Get the namespace ID
+ *
+ * @return int
+ */
+ protected function getNamespace() {
+ if ( $this->namespace === null ) {
+ $this->namespace = $this->getDefaultNamespace();
+ }
+ return $this->namespace;
+ }
+
+ /**
+ * How to prefix message group ids.
+ *
+ * @since 2012-03-22
+ * @param string $value
+ */
+ public function setGroupPrefix( $value ) {
+ $this->idPrefix = $value;
+ }
+
+ /**
+ * Which namespace holds the messages.
+ *
+ * @since 2012-03-22
+ * @param int $value
+ */
+ public function setNamespace( $value ) {
+ $this->namespace = $value;
+ }
+
+ /**
+ * Hook: TranslatePostInitGroups
+ * @param array &$list
+ * @param array &$deps
+ * @return true
+ */
+ public function register( array &$list, array &$deps ) {
+ $groups = $this->parseFile();
+ $groups = $this->processGroups( $groups );
+ foreach ( $groups as $id => $g ) {
+ $list[$id] = $this->createMessageGroup( $id, $g );
+ }
+
+ $deps[] = new FileDependency( $this->definitionFile );
+
+ return true;
+ }
+
+ /**
+ * Creates MediaWikiExtensionMessageGroup objects from parsed data.
+ * @param string $id unique group id already prefixed
+ * @param array $info array of group info
+ * @return MediaWikiExtensionMessageGroup
+ */
+ protected function createMessageGroup( $id, $info ) {
+ $conf = [];
+ $conf['BASIC']['class'] = MediaWikiExtensionMessageGroup::class;
+ $conf['BASIC']['id'] = $id;
+ $conf['BASIC']['namespace'] = $this->getNamespace();
+ $conf['BASIC']['label'] = $info['name'];
+
+ if ( isset( $info['desc'] ) ) {
+ $conf['BASIC']['description'] = $info['desc'];
+ } else {
+ $conf['BASIC']['descriptionmsg'] = $info['descmsg'];
+ }
+
+ $conf['FILES']['class'] = JsonFFS::class;
+ $conf['FILES']['sourcePattern'] = $this->path . '/' . $info['file'];
+
+ // @todo Find a better way
+ if ( isset( $info['aliasfile'] ) ) {
+ $conf['FILES']['aliasFileSource'] = $this->path . '/' . $info['aliasfile'];
+ $conf['FILES']['aliasFile'] = $info['aliasfile'];
+ }
+ if ( isset( $info['magicfile'] ) ) {
+ $conf['FILES']['magicFileSource'] = $this->path . '/' . $info['magicfile'];
+ $conf['FILES']['magicFile'] = $info['magicfile'];
+ }
+
+ if ( isset( $info['prefix'] ) ) {
+ $conf['MANGLER']['class'] = StringMatcher::class;
+ $conf['MANGLER']['prefix'] = $info['prefix'];
+ $conf['MANGLER']['patterns'] = $info['mangle'];
+
+ $mangler = new StringMatcher( $info['prefix'], $info['mangle'] );
+ if ( isset( $info['ignored'] ) ) {
+ $info['ignored'] = $mangler->mangleList( $info['ignored'] );
+ }
+ if ( isset( $info['optional'] ) ) {
+ $info['optional'] = $mangler->mangleList( $info['optional'] );
+ }
+ }
+
+ $conf['VALIDATORS'] = [
+ [ 'id' => 'BraceBalance' ],
+ [ 'id' => 'MediaWikiLink' ],
+ [ 'id' => 'MediaWikiPageName' ],
+ [ 'id' => 'MediaWikiParameter' ],
+ [ 'id' => 'MediaWikiPlural' ],
+ ];
+
+ $conf['INSERTABLES'] = [
+ [ 'class' => MediaWikiInsertablesSuggester::class ]
+ ];
+
+ if ( isset( $info['optional'] ) ) {
+ $conf['TAGS']['optional'] = $info['optional'];
+ }
+ if ( isset( $info['ignored'] ) ) {
+ $conf['TAGS']['ignored'] = $info['ignored'];
+ }
+
+ if ( isset( $info['languages'] ) ) {
+ $conf['LANGUAGES'] = [
+ 'include' => [],
+ 'exclude' => [],
+ ];
+
+ foreach ( $info['languages'] as $tagSpec ) {
+ if ( preg_match( '/^([+-])?(.+)$/', $tagSpec, $m ) ) {
+ list( , $sign, $tag ) = $m;
+ if ( $sign === '+' ) {
+ $conf['LANGUAGES']['include'][] = $tag;
+ } elseif ( $sign === '-' ) {
+ $conf['LANGUAGES']['exclude'][] = $tag;
+ } else {
+ $conf['LANGUAGES']['exclude'] = '*';
+ $conf['LANGUAGES']['include'][] = $tag;
+ }
+ }
+ }
+ }
+
+ // @phan-suppress-next-line PhanTypeMismatchReturnSuperType
+ return MessageGroupBase::factory( $conf );
+ }
+
+ protected function parseFile() {
+ $defines = file_get_contents( $this->definitionFile );
+ $linefeed = '(\r\n|\n)';
+ $sections = array_map(
+ 'trim',
+ preg_split( "/$linefeed{2,}/", $defines, -1, PREG_SPLIT_NO_EMPTY )
+ );
+ $groups = [];
+
+ foreach ( $sections as $section ) {
+ $lines = array_map( 'trim', preg_split( "/$linefeed/", $section ) );
+ $newgroup = [];
+
+ foreach ( $lines as $line ) {
+ if ( $line === '' || $line[0] === '#' ) {
+ continue;
+ }
+
+ if ( strpos( $line, '=' ) === false ) {
+ if ( empty( $newgroup['name'] ) ) {
+ $newgroup['name'] = $line;
+ } else {
+ throw new MWException( 'Trying to define name twice: ' . $line );
+ }
+ } else {
+ list( $key, $value ) = array_map( 'trim', explode( '=', $line, 2 ) );
+ switch ( $key ) {
+ case 'aliasfile':
+ case 'desc':
+ case 'descmsg':
+ case 'file':
+ case 'id':
+ case 'magicfile':
+ case 'var':
+ $newgroup[$key] = $value;
+ break;
+ case 'optional':
+ case 'ignored':
+ case 'languages':
+ $values = array_map( 'trim', explode( ',', $value ) );
+ if ( !isset( $newgroup[$key] ) ) {
+ $newgroup[$key] = [];
+ }
+ $newgroup[$key] = array_merge( $newgroup[$key], $values );
+ break;
+ case 'prefix':
+ list( $prefix, $messages ) = array_map(
+ 'trim',
+ explode( '|', $value, 2 )
+ );
+ if ( isset( $newgroup['prefix'] ) && $newgroup['prefix'] !== $prefix ) {
+ throw new MWException(
+ "Only one prefix supported: {$newgroup['prefix']} !== $prefix"
+ );
+ }
+ $newgroup['prefix'] = $prefix;
+
+ if ( !isset( $newgroup['mangle'] ) ) {
+ $newgroup['mangle'] = [];
+ }
+
+ $messages = array_map( 'trim', explode( ',', $messages ) );
+ $newgroup['mangle'] = array_merge( $newgroup['mangle'], $messages );
+ break;
+ default:
+ throw new MWException( 'Unknown key:' . $key );
+ }
+ }
+ }
+
+ if ( count( $newgroup ) ) {
+ if ( empty( $newgroup['name'] ) ) {
+ throw new MWException( "Name missing\n" . print_r( $newgroup, true ) );
+ }
+ $groups[] = $newgroup;
+ }
+ }
+
+ return $groups;
+ }
+
+ protected function processGroups( $groups ) {
+ $fixedGroups = [];
+ foreach ( $groups as $g ) {
+ $name = $g['name'];
+
+ $id = $g['id'] ?? $this->idPrefix . preg_replace( '/\s+/', '', strtolower( $name ) );
+
+ if ( !isset( $g['file'] ) ) {
+ $file = preg_replace( '/\s+/', '', "$name/i18n/%CODE%.json" );
+ } else {
+ $file = $g['file'];
+ }
+
+ $descmsg = $g['descmsg'] ?? str_replace( $this->idPrefix, '', $id ) . '-desc';
+
+ $newgroup = [
+ 'name' => $name,
+ 'file' => $file,
+ 'descmsg' => $descmsg,
+ ];
+
+ $copyvars = [
+ 'aliasfile',
+ 'desc',
+ 'ignored',
+ 'languages',
+ 'magicfile',
+ 'mangle',
+ 'optional',
+ 'prefix',
+ 'var',
+ ];
+
+ foreach ( $copyvars as $var ) {
+ if ( isset( $g[$var] ) ) {
+ $newgroup[$var] = $g[$var];
+ }
+ }
+
+ // Mark some fixed form optional messages automatically
+ if ( !isset( $newgroup['optional' ] ) ) {
+ $newgroup['optional'] = [];
+ }
+
+ // Mark extension name and skin names optional.
+ $newgroup['optional'][] = '*-extensionname';
+ $newgroup['optional'][] = 'skinname-*';
+
+ $fixedGroups[$id] = $newgroup;
+ }
+
+ return $fixedGroups;
+ }
+}
diff --git a/Translate/ffs/SimpleFFS.php b/Translate/ffs/SimpleFFS.php
new file mode 100644
index 00000000..44cd456e
--- /dev/null
+++ b/Translate/ffs/SimpleFFS.php
@@ -0,0 +1,379 @@
+<?php
+/**
+ * File format support classes.
+ *
+ * @file
+ * @author Niklas Laxström
+ */
+
+/**
+ * A very basic FFS module that implements some basic functionality and
+ * a simple binary based file format.
+ * Other FFS classes can extend SimpleFFS and override suitable methods.
+ * @ingroup FFS
+ */
+
+use MediaWiki\Extension\Translate\Services;
+use UtfNormal\Validator;
+
+class SimpleFFS implements FFS {
+ public function supportsFuzzy() {
+ return 'no';
+ }
+
+ public function getFileExtensions() {
+ return [];
+ }
+
+ /** @var FileBasedMessageGroup */
+ protected $group;
+ protected $writePath;
+ /**
+ * Stores the FILES section of the YAML configuration,
+ * which can be accessed for extra FFS class specific options.
+ */
+ protected $extra;
+
+ private const RECORD_SEPARATOR = "\0";
+ private const PART_SEPARATOR = "\0\0\0\0";
+
+ public function __construct( FileBasedMessageGroup $group ) {
+ $this->setGroup( $group );
+ $conf = $group->getConfiguration();
+ $this->extra = $conf['FILES'];
+ }
+
+ /** @param FileBasedMessageGroup $group */
+ public function setGroup( FileBasedMessageGroup $group ) {
+ $this->group = $group;
+ }
+
+ /** @return FileBasedMessageGroup */
+ public function getGroup() {
+ return $this->group;
+ }
+
+ /** @param string $writePath */
+ public function setWritePath( $writePath ) {
+ $this->writePath = $writePath;
+ }
+
+ /** @return string */
+ public function getWritePath() {
+ return $this->writePath;
+ }
+
+ /**
+ * Returns true if the file for this message group in a given language
+ * exists. If no $code is given, the groups source language is assumed.
+ * NB: Some formats store all languages in the same file, and then this
+ * function will return true even if there are no translations to that
+ * language.
+ *
+ * @param string|bool $code
+ * @return bool
+ */
+ public function exists( $code = false ) {
+ if ( $code === false ) {
+ $code = $this->group->getSourceLanguage();
+ }
+
+ $filename = $this->group->getSourceFilePath( $code );
+ if ( $filename === null ) {
+ return false;
+ }
+
+ return file_exists( $filename );
+ }
+
+ /**
+ * Reads messages from the file in a given language and returns an array
+ * of AUTHORS, MESSAGES and possibly other properties.
+ *
+ * @param string $code Language code.
+ * @return array|bool False if the file does not exist
+ * @throws MWException if the file is not readable or has bad encoding
+ */
+ public function read( $code ) {
+ if ( !$this->isGroupFfsReadable() ) {
+ return [];
+ }
+
+ if ( !$this->exists( $code ) ) {
+ return false;
+ }
+
+ $filename = $this->group->getSourceFilePath( $code );
+ $input = file_get_contents( $filename );
+ if ( $input === false ) {
+ throw new MWException( "Unable to read file $filename." );
+ }
+
+ if ( !StringUtils::isUtf8( $input ) ) {
+ throw new MWException( "Contents of $filename are not valid utf-8." );
+ }
+
+ $input = Validator::cleanUp( $input );
+
+ // Strip BOM mark
+ $input = ltrim( $input, "\u{FEFF}" );
+
+ try {
+ return $this->readFromVariable( $input );
+ } catch ( Exception $e ) {
+ throw new MWException( "Parsing $filename failed: " . $e->getMessage() );
+ }
+ }
+
+ /**
+ * Parse the message data given as a string in the SimpleFFS format
+ * and return it as an array of AUTHORS and MESSAGES.
+ *
+ * @param string $data
+ * @return array Parsed data.
+ * @throws MWException
+ */
+ public function readFromVariable( $data ) {
+ $parts = explode( self::PART_SEPARATOR, $data );
+
+ if ( count( $parts ) !== 2 ) {
+ throw new MWException( 'Wrong number of parts.' );
+ }
+
+ list( $authorsPart, $messagesPart ) = $parts;
+ $authors = explode( self::RECORD_SEPARATOR, $authorsPart );
+ $messages = [];
+
+ foreach ( explode( self::RECORD_SEPARATOR, $messagesPart ) as $line ) {
+ if ( $line === '' ) {
+ continue;
+ }
+
+ $lineParts = explode( '=', $line, 2 );
+
+ if ( count( $lineParts ) !== 2 ) {
+ throw new MWException( "Wrong number of parts in line $line." );
+ }
+
+ list( $key, $message ) = $lineParts;
+ $key = trim( $key );
+ $messages[$key] = $message;
+ }
+
+ $messages = $this->group->getMangler()->mangleArray( $messages );
+
+ return [
+ 'AUTHORS' => $authors,
+ 'MESSAGES' => $messages,
+ ];
+ }
+
+ /**
+ * Write the collection to file.
+ *
+ * @param MessageCollection $collection
+ * @throws MWException
+ */
+ public function write( MessageCollection $collection ) {
+ $writePath = $this->writePath;
+
+ if ( $writePath === null ) {
+ throw new MWException( 'Write path is not set.' );
+ }
+
+ if ( !file_exists( $writePath ) ) {
+ throw new MWException( "Write path '$writePath' does not exist." );
+ }
+
+ if ( !is_writable( $writePath ) ) {
+ throw new MWException( "Write path '$writePath' is not writable." );
+ }
+
+ $targetFile = $writePath . '/' . $this->group->getTargetFilename( $collection->code );
+
+ $targetFileExists = file_exists( $targetFile );
+
+ if ( $targetFileExists ) {
+ $this->tryReadSource( $targetFile, $collection );
+ } else {
+ $sourceFile = $this->group->getSourceFilePath( $collection->code );
+ $this->tryReadSource( $sourceFile, $collection );
+ }
+
+ $output = $this->writeReal( $collection );
+ if ( !$output ) {
+ return;
+ }
+
+ // Some file formats might have changing parts, such as timestamp.
+ // This allows the file handler to skip updating files, where only
+ // the timestamp would change.
+ if ( $targetFileExists ) {
+ $oldContent = $this->tryReadFile( $targetFile );
+ if ( !$this->shouldOverwrite( $oldContent, $output ) ) {
+ return;
+ }
+ }
+
+ wfMkdirParents( dirname( $targetFile ), null, __METHOD__ );
+ file_put_contents( $targetFile, $output );
+ }
+
+ /**
+ * Read a collection and return it as a SimpleFFS formatted string.
+ *
+ * @param MessageCollection $collection
+ * @return string
+ */
+ public function writeIntoVariable( MessageCollection $collection ) {
+ $sourceFile = $this->group->getSourceFilePath( $collection->code );
+ $this->tryReadSource( $sourceFile, $collection );
+
+ return $this->writeReal( $collection );
+ }
+
+ /**
+ * @param MessageCollection $collection
+ * @return string
+ */
+ protected function writeReal( MessageCollection $collection ) {
+ $output = '';
+
+ $authors = $collection->getAuthors();
+ $authors = $this->filterAuthors( $authors, $collection->code );
+
+ $output .= implode( self::RECORD_SEPARATOR, $authors );
+ $output .= self::PART_SEPARATOR;
+
+ $mangler = $this->group->getMangler();
+
+ /** @var TMessage $m */
+ foreach ( $collection as $key => $m ) {
+ $key = $mangler->unmangle( $key );
+ $trans = $m->translation();
+ $output .= "$key=$trans" . self::RECORD_SEPARATOR;
+ }
+
+ return $output;
+ }
+
+ /**
+ * This tries to pick up external authors in the source files so that they
+ * are not lost if those authors are not among those who have translated in
+ * the wiki.
+ *
+ * @todo Get rid of this
+ * @param string $filename
+ * @param MessageCollection $collection
+ */
+ protected function tryReadSource( $filename, MessageCollection $collection ) {
+ if ( !$this->isGroupFfsReadable() ) {
+ return;
+ }
+
+ $sourceText = $this->tryReadFile( $filename );
+
+ // No need to do anything in SimpleFFS if it's false,
+ // it only reads author data from it.
+ if ( $sourceText !== false ) {
+ $sourceData = $this->readFromVariable( $sourceText );
+
+ if ( isset( $sourceData['AUTHORS'] ) ) {
+ $collection->addCollectionAuthors( $sourceData['AUTHORS'] );
+ }
+ }
+ }
+
+ /**
+ * Read the contents of $filename and return it as a string.
+ * Return false if the file doesn't exist.
+ * Throw an exception if the file isn't readable
+ * or if the reading fails strangely.
+ *
+ * @param string $filename
+ * @return bool|string
+ * @throws MWException
+ */
+ protected function tryReadFile( $filename ) {
+ if ( !$filename ) {
+ return false;
+ }
+
+ if ( !file_exists( $filename ) ) {
+ return false;
+ }
+
+ if ( !is_readable( $filename ) ) {
+ throw new MWException( "File $filename is not readable." );
+ }
+
+ $data = file_get_contents( $filename );
+ if ( $data === false ) {
+ throw new MWException( "Unable to read file $filename." );
+ }
+
+ return $data;
+ }
+
+ /**
+ * Remove excluded authors.
+ *
+ * @param array $authors
+ * @param string $code
+ * @return array
+ */
+ public function filterAuthors( array $authors, $code ) {
+ $groupId = $this->group->getId();
+ $configHelper = Services::getInstance()->getConfigHelper();
+
+ foreach ( $authors as $i => $v ) {
+ if ( $configHelper->isAuthorExcluded( $groupId, $code, $v ) ) {
+ unset( $authors[$i] );
+ }
+ }
+
+ return array_values( $authors );
+ }
+
+ /**
+ * Replaces all Windows and Mac line endings with Unix line endings.
+ * This is needed in some file types.
+ *
+ * @param string $data
+ * @return string
+ */
+ public static function fixNewLines( $data ) {
+ $data = str_replace( "\r\n", "\n", $data );
+ $data = str_replace( "\r", "\n", $data );
+
+ return $data;
+ }
+
+ public function isContentEqual( $a, $b ) {
+ return $a === $b;
+ }
+
+ public function shouldOverwrite( $a, $b ) {
+ return true;
+ }
+
+ /**
+ * Check if the file format of the current group is readable by the file
+ * format system. This might happen if we are trying to export a JsonFFS
+ * or WikiPageMessage group to a GettextFFS
+ * @return bool
+ */
+ public function isGroupFfsReadable(): bool {
+ try {
+ $ffs = $this->group->getFFS();
+ } catch ( RunTimeException $e ) {
+ if ( $e->getCode() === FileBasedMessageGroup::NO_FFS_CLASS ) {
+ return false;
+ }
+
+ throw $e;
+ }
+
+ return get_class( $ffs ) === get_class( $this );
+ }
+}
diff --git a/Translate/ffs/XliffFFS.php b/Translate/ffs/XliffFFS.php
new file mode 100644
index 00000000..dfae7d3f
--- /dev/null
+++ b/Translate/ffs/XliffFFS.php
@@ -0,0 +1,192 @@
+<?php
+/**
+ * Partial support for the Xliff translation format.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * Partial support for the Xliff translation format.
+ * @since 2013-04
+ * @ingroup FFS
+ */
+class XliffFFS extends SimpleFFS {
+ public static function isValid( $data ) {
+ $doc = new DomDocument( '1.0' );
+ $doc->loadXML( $data );
+
+ $errors = libxml_get_errors();
+ if ( $errors ) {
+ return false;
+ }
+
+ if ( strpos( $data, 'version="1.2">' ) !== false ) {
+ $schema = __DIR__ . '/../data/xliff-core-1.2-transitional.xsd';
+ if ( !$doc->schemaValidate( $schema ) ) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ public function getFileExtensions() {
+ return [ '.xlf', '.xliff', '.xml' ];
+ }
+
+ /**
+ * @param string $data
+ * @param string $element
+ * @return array Parsed data.
+ */
+ public function readFromVariable( $data, $element = 'target' ) {
+ $messages = [];
+ $mangler = $this->group->getMangler();
+
+ $reader = new SimpleXMLElement( $data );
+ $reader->registerXPathNamespace(
+ 'xliff',
+ 'urn:oasis:names:tc:xliff:document:1.2'
+ );
+
+ $items = array_merge(
+ $reader->xpath( '//trans-unit' ),
+ $reader->xpath( '//xliff:trans-unit' )
+ );
+
+ foreach ( $items as $item ) {
+ /** @var SimpleXMLElement $source */
+ $source = $item->$element;
+
+ if ( !$source ) {
+ continue;
+ }
+
+ $key = (string)$item['id'];
+
+ /* In case there are tags inside the element, preserve
+ * them. */
+ $dom = new DOMDocument( '1.0' );
+ $dom->loadXML( $source->asXML() );
+ $value = self::getInnerXml( $dom->documentElement );
+
+ /* This might not be 100% according to the spec, but
+ * for now if there is explicit approved=no, mark it
+ * as fuzzy, but don't do that if the attribute is not
+ * set */
+ if ( (string)$source['state'] === 'needs-l10n' ) {
+ $value = TRANSLATE_FUZZY . $value;
+ }
+
+ // Strip CDATA if present
+ $value = preg_replace( '/<!\[CDATA\[(.*?)\]\]>/s', '\1', $value );
+
+ $messages[$key] = $value;
+ }
+
+ return [
+ 'MESSAGES' => $mangler->mangleArray( $messages ),
+ ];
+ }
+
+ /**
+ * @param string $code Language code.
+ * @return array|bool
+ * @throws MWException
+ */
+ public function read( $code ) {
+ if ( !$this->exists( $code ) ) {
+ return false;
+ }
+
+ $filename = $this->group->getSourceFilePath( $code );
+ $input = file_get_contents( $filename );
+ if ( $input === false ) {
+ throw new MWException( "Unable to read file $filename." );
+ }
+
+ $element = $code === $this->group->getSourceLanguage() ? 'source' : 'target';
+
+ return $this->readFromVariable( $input, $element );
+ }
+
+ /**
+ * Gets the html inside en element without the element itself.
+ *
+ * @param DOMElement $node
+ * @return string
+ */
+ public static function getInnerXml( DOMElement $node ) {
+ $text = '';
+ foreach ( $node->childNodes as $child ) {
+ $text .= $child->ownerDocument->saveXML( $child );
+ }
+
+ return $text;
+ }
+
+ protected function writeReal( MessageCollection $collection ) {
+ $mangler = $this->group->getMangler();
+
+ $template = new DomDocument( '1.0' );
+ $template->preserveWhiteSpace = false;
+ $template->formatOutput = true;
+
+ // Try to use the definition file as template
+ $sourceLanguage = $this->group->getSourceLanguage();
+ $sourceFile = $this->group->getSourceFilePath( $sourceLanguage );
+ if ( file_exists( $sourceFile ) ) {
+ $template->load( $sourceFile );
+ } else {
+ // Else use standard template
+ $template->load( __DIR__ . '/../data/xliff-template.xml' );
+ }
+
+ $list = $template->getElementsByTagName( 'body' )->item( 0 );
+ $list->nodeValue = null;
+
+ /** @var TMessage $m */
+ foreach ( $collection as $key => $m ) {
+ $key = $mangler->unmangle( $key );
+
+ $value = $m->translation();
+ $value = str_replace( TRANSLATE_FUZZY, '', $value );
+
+ // @todo Support placeholder tags etc.
+ $source = $template->createDocumentFragment();
+ $source->appendXML( htmlspecialchars( $m->definition() ) );
+
+ $target = $template->createDocumentFragment();
+ $target->appendXML( htmlspecialchars( $value ) );
+
+ $sourceElement = $template->createElement( 'source' );
+ $sourceElement->appendChild( $source );
+
+ $targetElement = $template->createElement( 'target' );
+ $targetElement->appendChild( $target );
+ if ( $m->getProperty( 'status' ) === 'fuzzy' ) {
+ $targetElement->setAttribute( 'state', 'needs-l10n' );
+ }
+ if ( $m->getProperty( 'status' ) === 'proofread' ) {
+ $targetElement->setAttribute( 'state', 'signed-off' );
+ }
+
+ $transUnit = $template->createElement( 'trans-unit' );
+ $transUnit->setAttribute( 'id', $key );
+ $transUnit->appendChild( $sourceElement );
+ $transUnit->appendChild( $targetElement );
+
+ $list->appendChild( $transUnit );
+ }
+
+ $template->encoding = 'UTF-8';
+
+ return $template->saveXML();
+ }
+
+ public function supportsFuzzy() {
+ return 'yes';
+ }
+}
diff --git a/Translate/ffs/YamlFFS.php b/Translate/ffs/YamlFFS.php
new file mode 100644
index 00000000..897e34ee
--- /dev/null
+++ b/Translate/ffs/YamlFFS.php
@@ -0,0 +1,202 @@
+<?php
+
+use MediaWiki\Extension\Translate\MessageProcessing\ArrayFlattener;
+
+/**
+ * Implements support for message storage in YAML format.
+ *
+ * This class adds new key into FILES section: \c codeAsRoot.
+ * If it is set to true, all messages will under language code.
+ * @ingroup FFS
+ */
+class YamlFFS extends SimpleFFS implements MetaYamlSchemaExtender {
+ /** @var ArrayFlattener */
+ private $flattener;
+
+ /** @param FileBasedMessageGroup $group */
+ public function __construct( FileBasedMessageGroup $group ) {
+ parent::__construct( $group );
+ $this->flattener = $this->getFlattener();
+ }
+
+ public function getFileExtensions() {
+ return [ '.yaml', '.yml' ];
+ }
+
+ /**
+ * @param string $data
+ * @return array Parsed data.
+ */
+ public function readFromVariable( $data ) {
+ // Authors first.
+ $matches = [];
+ preg_match_all( '/^#\s*Author:\s*(.*)$/m', $data, $matches );
+ $authors = $matches[1];
+
+ // Then messages.
+ $messages = TranslateYaml::loadString( $data ) ?? [];
+
+ // Some groups have messages under language code
+ if ( isset( $this->extra['codeAsRoot'] ) ) {
+ $messages = array_shift( $messages ) ?? [];
+ }
+
+ $messages = $this->flatten( $messages );
+ $messages = $this->group->getMangler()->mangleArray( $messages );
+ foreach ( $messages as &$value ) {
+ $value = rtrim( $value, "\n" );
+ }
+
+ return [
+ 'AUTHORS' => $authors,
+ 'MESSAGES' => $messages,
+ ];
+ }
+
+ /**
+ * @param MessageCollection $collection
+ * @return string
+ */
+ protected function writeReal( MessageCollection $collection ) {
+ $output = $this->doHeader( $collection );
+ $output .= $this->doAuthors( $collection );
+
+ $mangler = $this->group->getMangler();
+
+ $messages = [];
+
+ /** @var TMessage $m */
+ foreach ( $collection as $key => $m ) {
+ $key = $mangler->unmangle( $key );
+ $value = $m->translation();
+ $value = str_replace( TRANSLATE_FUZZY, '', $value );
+
+ if ( $value === '' ) {
+ continue;
+ }
+
+ $messages[$key] = $value;
+ }
+
+ if ( !count( $messages ) ) {
+ return false;
+ }
+
+ $messages = $this->unflatten( $messages );
+
+ // Some groups have messages under language code.
+ if ( isset( $this->extra['codeAsRoot'] ) ) {
+ $code = $this->group->mapCode( $collection->code );
+ $messages = [ $code => $messages ];
+ }
+
+ $output .= TranslateYaml::dump( $messages );
+
+ return $output;
+ }
+
+ /**
+ * @param MessageCollection $collection
+ * @return string
+ */
+ protected function doHeader( MessageCollection $collection ) {
+ global $wgSitename;
+ global $wgTranslateYamlLibrary;
+
+ $code = $collection->code;
+ $name = TranslateUtils::getLanguageName( $code );
+ $native = TranslateUtils::getLanguageName( $code, $code );
+ $output = "# Messages for $name ($native)\n";
+ $output .= "# Exported from $wgSitename\n";
+
+ if ( isset( $wgTranslateYamlLibrary ) ) {
+ $output .= "# Export driver: $wgTranslateYamlLibrary\n";
+ }
+
+ return $output;
+ }
+
+ /**
+ * @param MessageCollection $collection
+ * @return string
+ */
+ protected function doAuthors( MessageCollection $collection ) {
+ $output = '';
+ $authors = $collection->getAuthors();
+ $authors = $this->filterAuthors( $authors, $collection->code );
+
+ foreach ( $authors as $author ) {
+ $output .= "# Author: $author\n";
+ }
+
+ return $output;
+ }
+
+ /**
+ * Obtains object used to flatten and unflatten arrays. In this implementation
+ * we use the ArrayFlattener class which also supports CLDR pluralization rules.
+ *
+ * @return ArrayFlattener with flatten, unflatten methods
+ */
+ protected function getFlattener() {
+ $nestingSeparator = $this->extra['nestingSeparator'] ?? '.';
+ $parseCLDRPlurals = $this->extra['parseCLDRPlurals'] ?? false;
+
+ // Instantiate helper class for flattening and unflattening nested arrays
+ return new ArrayFlattener( $nestingSeparator, $parseCLDRPlurals );
+ }
+
+ /**
+ * Flattens multidimensional array by using the path to the value as key
+ * with each individual key separated by a dot.
+ *
+ * @param array $messages
+ *
+ * @return array
+ */
+ protected function flatten( $messages ) {
+ return $this->flattener->flatten( $messages );
+ }
+
+ /**
+ * Performs the reverse operation of flatten. Each dot (or custom separator)
+ * in the key starts a new subarray in the final array.
+ *
+ * @param array $messages
+ *
+ * @return array
+ */
+ protected function unflatten( $messages ) {
+ return $this->flattener->unflatten( $messages );
+ }
+
+ public function isContentEqual( $a, $b ) {
+ return $this->flattener->compareContent( $a, $b );
+ }
+
+ public static function getExtraSchema() {
+ $schema = [
+ 'root' => [
+ '_type' => 'array',
+ '_children' => [
+ 'FILES' => [
+ '_type' => 'array',
+ '_children' => [
+ 'codeAsRoot' => [
+ '_type' => 'boolean',
+ ],
+ 'nestingSeparator' => [
+ '_type' => 'text',
+ ],
+ 'parseCLDRPlurals' => [
+ '_type' => 'boolean',
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+
+ return $schema;
+ }
+}
diff --git a/Translate/hooks.txt b/Translate/hooks.txt
new file mode 100644
index 00000000..8f99aef3
--- /dev/null
+++ b/Translate/hooks.txt
@@ -0,0 +1,126 @@
+This document describes how event hooks work in the Translate extension;
+how to add hooks for an event; and how to run hooks for an event.
+
+For a more comprehensive guide to hooks, navigate to your root MediaWiki
+directory, and then find /docs/hooks.txt.
+
+== Rationale ==
+
+Hooks allow us to decouple optionally-run code from code that is run for
+everyone. It allows MediaWiki hackers, third-party developers and local
+administrators to define code that will be run at certain points in the mainline
+code, and to modify the data run by that mainline code. Hooks can keep mainline
+code simple, and make it easier to write extensions. Hooks are a principled
+alternative to local patches.
+
+== Writing hooks ==
+
+=== PHP hooks ===
+For a guide to PHP hooks, navigate to your root MediaWiki
+directory, and then find docs/hooks.txt.
+
+=== JavaScript hooks ===
+JavaScript hooks for the Translate extension use the standard mw.hook API provided
+by MediaWiki.
+
+Hooks are prefixed with mw.translate as a convention.
+
+== Events and parameters ==
+
+This is a list of known events and parameters; please add to it if you're going
+to add events to the Translate extension.
+
+<!--
+Post processing step to format in wiki
+^;([^ ]+): >>> ;<nowiki>\1</nowiki>:
+-->
+
+=== PHP events ===
+
+;TranslateBeforeAddModules: Provides an opportunity to load extra modules
+ array &$modules: List of resource loader module names
+
+;TranslateEventMessageMembershipChange: When group gets new messages or loses messages
+ MessageHandle $handle
+ array $old Previous groups
+ array $new Current groups
+
+;TranslateEventMessageGroupStateChange: Event triggered when a message group workflow state is changed in a language
+ MessageGroup $group: Message group instance
+ string $code: Language code
+ string $oldState
+ string $newState
+
+;TranslateEventTranslationReview: Event triggered when a translation is proofread
+ MessageHandle $handle
+
+;TranslateGetAPIMessageGroupsParameterList: Allows extra parameters to be added to the action=query&meta=messagegroups module
+ array &$params: An associative array of possible parameters (name => details; see ApiQueryMessageGroups.php for correct spacing)
+
+;TranslateGetAPIMessageGroupsPropertyDescs: Allows extra properties to be added to captured by action=query&meta=messagegroups&mgprop=foo|bar|bat module
+ array &$properties: An associative array of properties, name => description (which is ignored).
+
+;TranslateGetSpecialTranslateOptions: Provides an opportunity for overriding task values
+ array &$defaults: Associative array of default values
+ array &$nondefaults: Associative array of nondefault (override) values
+
+;Translate:GettextFFS:headerFields: Allows customizing headers of exported Gettext files per group. Certain X-headers nor Plural-Forms cannot be customized.
+ array &$headers: List of prefilled headers. You can remove, change or add new headers.
+ MessageGroup $group: Message group instance
+ string $code: Language code
+
+;Translate:newTranslation: Event triggered when non-fuzzy translation has been made
+ MessageHandle $handle
+ int $revisionId
+ string $text: Content of the new translation
+ User $user: User who created or changed the translation
+
+;TranslatePostInitGroups: Hook to register new message groups to Translate. Manual cache clear may be needed to have this hook executed.
+ array &$groups: Map of message group id to message group instance
+ array &$deps: List of dependencies as supported by DependencyWrapper class from MediaWiki
+ array &$autoload: List of autoloaded classes. Key is the name of the class and value is filename.
+
+;TranslateInitGroupLoaders: Hook to register new message group loaders that can then load MessageGroups for translation purpose.
+ array &$groupLoader: List of message group loader class names that implement the MessageGroupLoader
+
+;TranslatePrefillTranslation: Provides an opportunity for a new translation to start not from as a carte blanche (the default) but from some prefilled string
+ string|null &$translation: The translation string as it stands, or null for new translations
+ MessageHandle $handle: The current MessageHandle object
+
+;TranslateProcessAPIMessageGroupsProperties: Allows extra property requests to be acted upon, and the new properties returned
+ array &$a: Associative array of the properties of $group that will be returned
+ array $props: Associative array ($name => true) of properties the user has specifically requested
+ array $params: Parameter input by the user (unprefixed name => value)
+ MessageGroup $g: The group in question
+
+;TranslateSupportedLanguages: Allows removing languages from language selectors. For adding $wgExtraLanguage names is recommended.
+ array &$list: List of languages indexed by language code
+ string $language: Language code of the language of which language names are in
+
+;Translate:modifyMessageGroupStates: Allow hooks to change workflow states depending on the group's ID.
+ string $groupId: ID of the current message group.
+ array &$conf: Workflow states, can be modified.
+
+=== JavaScript events ===
+
+;mw.translate.editor.afterSubmit: Provides an opportunity to modify a Translate translation form immediately after it is submitted
+ jQuery form: The form that has just been submitted
+
+;mw.translate.editor.afterEditorShown: Provides an opportunity to manipulate the editing interface once it's shown
+ jQuery translateEditor.$editor: The current translation-editing form
+
+;mw.translate.editor.beforeSubmit: Provides an opportunity to modify a Translate translation form immediately before it is submitted
+ jQuery form: The form being submitted
+
+;mw.translate.messagetable.formatMessageBeforeTable: Provides an opportunity to manipulate the display of translation strings (messages) in the main table
+ object message: The message object, with a range of useful (and manipulable) properties
+
+;mw.translate.editor.showTranslationHelpers: Provides an opportunity to handle custom translation helpers
+ object result.helpers: JSON subset focusing on the helpers returned e.g. result.helpers.definition
+ jQuery translateEditor.$editor: The current translation-editing form
+
+;mw.translate.translationView.stateChange: Returns the new state of the group after the state changes (i.e. after the message group or target language changes)
+ object stateInfo: The new state object, with info on message group, language and message list
+
+;wikipage.content: See this hook in MediaWiki core. Fired for message documentation in the translation editor.
+ jQuery $content
diff --git a/Translate/i18n/api/af.json b/Translate/i18n/api/af.json
new file mode 100644
index 00000000..f3d874ae
--- /dev/null
+++ b/Translate/i18n/api/af.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Naudefj"
+ ]
+ },
+ "apihelp-query+messagecollection-example-1": "Lys van ondersteunde tale"
+}
diff --git a/Translate/i18n/api/ar.json b/Translate/i18n/api/ar.json
new file mode 100644
index 00000000..ad4f0f88
--- /dev/null
+++ b/Translate/i18n/api/ar.json
@@ -0,0 +1,150 @@
+{
+ "@metadata": {
+ "authors": [
+ "Meno25",
+ "ديفيد",
+ "محمد أحمد عبد الفتاح"
+ ]
+ },
+ "apihelp-aggregategroups-description": "إدارة مجموعات الرسائل المجمعة.\n\nأنت يمكنك إضافة وإزالة مجموعات الرسائل المجمعة وجعل مجموعات الرسائل مقترنة أو غير مقترنة بها (واحدة كل مرة).",
+ "apihelp-aggregategroups-summary": "إدارة مجموعات الرسائل المجمعة.",
+ "apihelp-aggregategroups-extended-description": "يمكنك إضافة مجموعات رسائل مجمعة وإزالتها، وإقران مجموعات رسائل أو فصلها عنها (واحدة تلو الأخرى).",
+ "apihelp-aggregategroups-param-do": "ما ينبغي عمله مع مجموعة الرسائل المجمعة.",
+ "apihelp-aggregategroups-param-aggregategroup": "رقم مجموعة الرسائل المجمعة.",
+ "apihelp-aggregategroups-param-group": "معرف مجموعة الرسائل.",
+ "apihelp-aggregategroups-param-groupname": "اسم مجموعة الرسائل المجمعة.",
+ "apihelp-aggregategroups-param-groupdescription": "وصف مجموعة الرسائل المجمعة.",
+ "apihelp-aggregategroups-example-1": "اجعل المجموعة مقترنة",
+ "apihelp-groupreview-description": "اضبط حالات عمل مجموعات الرسائل.",
+ "apihelp-groupreview-summary": "تعيين حالات سير عمل مجموعة الرسائل.",
+ "apihelp-groupreview-param-group": "مجموعة الرسائل.",
+ "apihelp-groupreview-param-language": "كود اللغة.",
+ "apihelp-groupreview-param-state": "الحالة الجديدة للمجموعة.",
+ "apihelp-groupreview-example-1": "علم على حالة الترجمة الألمانية لمجموعة الرسائل \"group-Example\" كجاهزة",
+ "apihelp-query+languagestats-description": "استعلم عن إحصاءات اللغة.",
+ "apihelp-query+languagestats-summary": "إحصائيات لغة الاستعلام.",
+ "apihelp-query+languagestats-param-language": "كود اللغة.",
+ "apihelp-query+languagestats-example-1": "قائمة إحصاءات إكمال الترجمة للفنلندية",
+ "apihelp-query+messagecollection-description": "استعلم MessageCollection حول الترجمات.",
+ "apihelp-query+managemessagegroups-summary": "إحضار عمليات إعادة تسمية محتملة لرسالة في مجموعة أثناء عمليات الاستيراد",
+ "apihelp-query+managemessagegroups-description": "إحضار عمليات إعادة تسمية محتملة لرسالة في مجموعة أثناء عمليات الاستيراد",
+ "apihelp-query+managemessagegroups-param-groupId": "معرف المجموعة",
+ "apihelp-query+managemessagegroups-param-messageKey": "مفتاح الرسالة",
+ "apihelp-query+managemessagegroups-param-changesetName": "تغيير اسم المجموعة - الافتراضي / غير المراقب / ميدياويكي إلخ",
+ "apihelp-query+managemessagegroups-example-1": "إحضار عمليات إعادة تسمية ممكنة للمفتاح المحدد في المجموعة المحددة",
+ "apihelp-query+messagecollection-summary": "استعلام MessageCollection حول الترجمات.",
+ "apihelp-query+messagecollection-param-group": "مجموعة الرسائل.",
+ "apihelp-query+messagecollection-param-language": "كود اللغة.",
+ "apihelp-query+messagecollection-param-limit": "كم عدد الرسائل ليتم عرضها (بعد الفلترة).",
+ "apihelp-query+messagecollection-param-offset": "عدد صحيح أو مفتاح الإزاحة للبدء.",
+ "apihelp-query+messagecollection-param-filter": "فلاتر مموعات الرسائل. استخدم <kbd>!</kbd> لنفي الشرط. على سبيل المثال <kbd>!fuzzy</kbd> تعني اعرض فقط كل الرسائل ال non-fuzzy. الفلاتر يتم تطبيقها بالترتيب المعطى.\n;fuzzy:الرسائل بالوسم fuzzy.\n;optional:الرسائل التي ينبغي أن تتم ترجمتها فقط لو أن التغييرات ضرورية.\n;ignored:الرسائل التي لا ينبغي أن تتم ترجمتها أبدا.\n;hastranslation:الرسائل التي لديها ترجمة بغض النظر عما إذا كانت fuzzy أم لا.\n;translated:الرسائل التي لديها ترجمة ليست fuzzy.\n;changed:الرسائل التي تمت ترجمتها أو تغييرها منذ آخر تصدير.\n;reviewer&#58;N:الرسائل حيث رقم المستخدم <kbd>N</kbd> ضمن المراجعين.\n;last-translator&#58;N:الرسائل حيث رقم المستخدم <kbd>N</kbd> هو آخر مترجم.",
+ "apihelp-query+messagecollection-param-prop": "أي الخصائص للحصول عليها:\n;definition:تعريف الرسالة.\n;translation:الترجمة الحالية (بدون سلسلة الحروف $1، استخدم الوسوم للتحقق من الترجمات غير المحدثة أو المكسورة).\n;tags:وسوم الرسالة، مثل optional, ignored و fuzzy.\n;properties:خصائص الرسالة، مثل status, revision, last-translator. يمكن أن تختلف بين الرسائل.\n;revision:<span class=\"deprecated\">Deprecated!</span> استخدم $2prop=properties.",
+ "apihelp-query+messagecollection-example-1": "قائمة اللغات المدعومة",
+ "apihelp-query+messagecollection-example-2": "قائمة بتعريفات الرسائل غير الاختيارية للمجموعة \"page-Example\"",
+ "apihelp-query+messagecollection-example-3": "قائمة بالرسائل الاختيارية بالفنلندية مع الوسوم للمجموعة \"page-Example\"",
+ "apihelp-query+messagecollection-example-4": "المزيد من المعلومات حول آخر مراجعات الترجمة للمجموعة \"page-Example\"",
+ "apihelp-query+messagegroups-description": "إرجاع المعلومات حول مجموعات الرسائل.\n\nلاحظ أن معامل uselang يؤثر على خرج الأجزاء المعتمدة على اللغة.",
+ "apihelp-query+messagegroups-summary": "إرجاع المعلومات حول مجموعات الرسائل.",
+ "apihelp-query+messagegroups-extended-description": "لاحظ أن الوسيط uselang يؤثر على إخراج الأجزاء المعتمدة على اللغة.",
+ "apihelp-query+messagegroups-param-depth": "عند استخدام صيغة الشجرة، حدد العمق لهذا العدد من المستويات. القيمة 0 تعني أنه لا توجد مجموعات فرعية معروضة. لو أن الحد تم الوصول إليه، فالخرج يحتوي على قيمة \"groupcount\"، والتي تحدد عدد الأبناء المباشرين.",
+ "apihelp-query+messagegroups-param-filter": "فقط أرجع الرسائل ذوات الأرقام التي تطابق واحدا أو أكثر من المدخلات المعطاة (case-insensitive, separated by pipes, * wildcard).",
+ "apihelp-query+messagegroups-param-format": "في صيغة الشجرة مجموعات الرسائل يمكن أن تتواجد في أماكن متعددة من الشجرة.",
+ "apihelp-query+messagegroups-param-iconsize": "الحجم المفضل لأيقونة المجموعة بالراستر.",
+ "apihelp-query+messagegroups-param-prop": "أي المعلومات المتعلقة بالترجمة للحصول عليها:\n;id:ضمن رقم المجموعة.\n;label:ضمن علامة المجموعة.\n;description:ضمن وصف المجموعة.\n;class:ضمن اسم الكلاس للمجموعة.\n;namespace:ضمن نطاق المجموعة. ليس كل المجموعات تنتمي لنطاق وحيد.\n;exists:ضمن خاصية وجود محسوبة ذاتيا للمجموعة.\n;icon:ضمن مسار لأيقونة المجموعة.\n;priority:ضمن حالة الأولوية مثل discouraged.\n;prioritylangs:ضمن اللغات المفضلة. لو غير مضبوط، فهذا يرجع false.\n;priorityforce:ضمن حالة الأولوية - هو إعداد لغات الأولوية إجباري.\n;workflowstates:ضمن حالات العمل لمجموعة الرسائل.",
+ "apihelp-query+messagegroups-param-root": "عند استخدام صيغة الشجرة، بدلا من البدء من المستوى الأعلى ابدأ من مجموعة الرسائل المعطاة، والت يجب أن تكون مجموعة رسائل مجمعة. عند استخدام الصيغة المسطحة فقط المجموعة المحددة يتم إرجاعها.",
+ "apihelp-query+messagegroups-example-1": "أظهر مجموعات الرسائل",
+ "apihelp-query+messagegroupstats-description": "استعلم عن إحصاءات مجموعة الرسائل.",
+ "apihelp-query+messagegroupstats-summary": "استعلم عن مجموعة الرسائل.",
+ "apihelp-query+messagegroupstats-param-group": "معرف مجموعة الرسائل.",
+ "apihelp-query+messagegroupstats-example-1": "قائمة بإحصاءات إكمال الترجمة للمجموعة \"page-Example\"",
+ "apihelp-query+messagetranslations-description": "استعلم في كل الترجمات عن رسالة واحدة.",
+ "apihelp-query+messagetranslations-summary": "الاستعلام عن كل الترجمات لرسالة واحدة.",
+ "apihelp-query+messagetranslations-param-title": "العنوان الكامل لرسالة معروفة.",
+ "apihelp-query+messagetranslations-example-1": "قائمة بالترجمات في الويكي عن \"MediaWiki:January\"",
+ "apihelp-managemessagegroups-description": "أضف رسالة إعادة تسمية لرسالة موجودة أو رسالة جديدة في المجموعة أثناء الاستيراد",
+ "apihelp-managemessagegroups-summary": "أضف رسالة إعادة تسمية لرسالة موجودة أو رسالة جديدة في المجموعة أثناء الاستيراد",
+ "apihelp-managemessagegroups-param-groupId": "معرف المجموعة",
+ "apihelp-managemessagegroups-param-renameMessageKey": "مفتاح الرسالة المستهدفة تجري إعادة تسميته",
+ "apihelp-managemessagegroups-param-messageKey": "استبدال مفتاح الرسالة",
+ "apihelp-managemessagegroups-param-operation": "العملية التي يتعين القيام بها. القيم المحتملة - إعادة تسمية / جديد",
+ "apihelp-managemessagegroups-param-changesetName": "تغيير اسم المجموعة - الافتراضي / غير المراقب / ميدياويكي إلخ",
+ "apihelp-managemessagegroups-param-changesetModified": "الطابع الزمني ليونيكس عندما تم تعديل آخر مجموعة تغييرات، إذا تم تعديل مجموعة التغييرات بعد هذا، فسوف ترمي API خطأ.",
+ "apihelp-translatesandbox-description": "سجل الدخول وأدر المستخدمين في الملعب.",
+ "apihelp-translatesandbox-summary": "سجل الدخول وأدر المستخدمين في الملعب.",
+ "apihelp-translatesandbox-param-do": "ما يجب فعله.",
+ "apihelp-translatesandbox-param-userid": "أرقام المستخدمين للمستخدمين الذين تتم إدارتهم. استخدم 0 للإنشاء.",
+ "apihelp-translatesandbox-param-username": "اسم المستخدم عند إنشاء مستخدم.",
+ "apihelp-translatesandbox-param-password": "كلمة السر عند إنشاء المستخدم.",
+ "apihelp-translatesandbox-param-email": "البريد الإلكتروني عند إنشاء المستخدم.",
+ "apihelp-translationaids-description": "استعلم عن كل مساعدات الترجمة.",
+ "apihelp-translationaids-summary": "الاستعلام عن كل الترجمات.",
+ "apihelp-translationaids-param-title": "العنوان الكامل لرسالة معروفة.",
+ "apihelp-translationaids-param-group": "مجموعة الرسائل التي تنتمي الرسالة إليها. لو فارغة إذا سيتم استخدام المجموعة الأساسية.",
+ "apihelp-translationaids-param-prop": "ما هي مساعدات الترجمة للتضمين.",
+ "apihelp-translationaids-example-1": "اعرض المساعدات ل[[MediaWiki:January/fi]]",
+ "apihelp-translationreview-description": "علم على الترجمات كمراجعة.",
+ "apihelp-translationreview-summary": "علم مارك كمراجعة.",
+ "apihelp-translationreview-param-revision": "رقم المراجعة لمراجعتها.",
+ "apihelp-translationreview-example-1": "مراجعة المراجعة 1",
+ "apihelp-translationstash-description": "أضف الترجمات للستاش.",
+ "apihelp-translationstash-summary": "أضف ترجمات إلى stash.",
+ "apihelp-translationstash-param-subaction": "الفعل.",
+ "apihelp-translationstash-param-title": "عنوان صفحة وحدة الترجمة.",
+ "apihelp-translationstash-param-translation": "الترجمة بواسطة المستخدم.",
+ "apihelp-translationstash-param-metadata": "كائن JSON.",
+ "apihelp-translationstash-param-username": "اختياريا المستخدم للحصول على الستاش الخاص به. فقط المستخدمون المخولون يمكنهم عمل هذا.",
+ "apihelp-translationstash-example-1": "أضف ترجمة للستاش ل[[MediaWiki:Jan/fi]]",
+ "apihelp-translationstash-example-2": "استعلم الستاش",
+ "apihelp-ttmserver-description": "استعلم عن الاقتراحات من ذاكرات الترجمة.",
+ "apihelp-ttmserver-summary": "استعلم عن الاقتراحات من ذاكرات الترجمة.",
+ "apihelp-ttmserver-param-service": "أي من خدمات الترجمة المتوفرة يتم استخدامها",
+ "apihelp-ttmserver-param-sourcelanguage": "كود اللغة للنص المصدر.",
+ "apihelp-ttmserver-param-targetlanguage": "كود اللغة للاقتراح.",
+ "apihelp-ttmserver-param-text": "النص لإيجاد الاقتراحات له.",
+ "apihelp-ttmserver-example-1": "الحصول على الاقتراحات لترجمة \"Help\" من الإنجليزية للألمانية",
+ "apihelp-searchtranslations-description": "ابحث في الترجمات.",
+ "apihelp-searchtranslations-summary": "بحث في الترجمات.",
+ "apihelp-searchtranslations-param-service": "أي من خدمات الترجمة المتوفرة يتم استخدامها.",
+ "apihelp-searchtranslations-param-query": "سلسلة الحروف للبحث عنها.",
+ "apihelp-searchtranslations-param-sourcelanguage": "كود اللغة للنص المصدر.",
+ "apihelp-searchtranslations-param-language": "كود اللغة للبحث في سلسلة الحروف عنه.",
+ "apihelp-searchtranslations-param-group": "رقم المجموعة للبحث عن سلسلة الحروف فيه.",
+ "apihelp-searchtranslations-param-filter": "فلتر حالة ترجمة الرسائل.",
+ "apihelp-searchtranslations-param-match": "طابق أي/كل كلمات البحث.",
+ "apihelp-searchtranslations-param-case": "بحث حساس (غير حساس) لحالة الحروف.",
+ "apihelp-searchtranslations-param-offset": "الإزاحة للترجمات.",
+ "apihelp-searchtranslations-param-limit": "حجم النتيجة.",
+ "apihelp-searchtranslations-example-1": "اعرض الترجمات للغة.",
+ "apihelp-searchtranslations-example-2": "اعرض الرسائل غير المترجمة التي تطابق الاستعلام في اللغة المصدر.",
+ "apihelp-translationcheck-description": "التحقق من صحة المدخلات المترجمة ضد مدققي الرسائل.",
+ "apihelp-translationcheck-summary": "التحقق من صحة الترجمات.",
+ "apihelp-translationcheck-param-title": "عنوان الصفحة بالنطاق ورمز اللغة.",
+ "apihelp-translationcheck-param-translation": "ترجمة للتحقق.",
+ "apierror-translate-changeset-modified": "تم تعديل مجموعة التغييرات بواسطة مستخدم أو عملية أخرى، لا يمكن حفظ تغييراتك لأنها قد تتجاوز تغييراتها، يُرجَى تحديث الصفحة لرؤية آخر التغييرات.",
+ "apierror-translate-duplicateaggregategroup": "مجموعة الرسائل موجودة بالفعل",
+ "apierror-translate-fuzzymessage": "لا يمكن مراجعة الترجمات الضبابية",
+ "apierror-translate-groupreviewdisabled": "مراجعة مجموعة الرسائل غير مستخدمة.",
+ "apierror-translate-invalidaggregategroup": "مجموعة رسائل مجمعة غير صالحة",
+ "apierror-translate-invalidaggregategroupname": "اسم مجموعة رسائل مجمعة غير صالح",
+ "apierror-translate-invalidgroup": "المجموعة غير موجودة أو غير صالحة",
+ "apierror-translate-invalidstate": "الحالة المطلوبة غير صالحة.",
+ "apierror-translate-invalidlanguage": "اللغة المطلوبة غير صالحة.",
+ "apierror-translate-invalidupdate": "تحديث غير صالح",
+ "apierror-translate-language-disabled": "الترجمة إلى $1 معطلة.",
+ "apierror-translate-language-disabled-reason": "الترجمة إلى $1 معطلة:$2",
+ "apierror-translate-nodynamicgroups": "مجموعات الرسائل الديناميكية غير مدعومة هنا",
+ "apierror-translate-nomessagefortitle": "العنوان لا يتوافق مع رسالة قابلة للترجمة",
+ "apierror-translate-notranslationservices": "لم يتم تكوين أية خدمات ترجمة عامة; يحتاج إداري الويكي إلى تعيين <var>$wgTranslateTranslationServices</var> بشكل مناسب قبل استخدام هذه الميزة.",
+ "apierror-translate-owntranslation": "لا يمكن مراجعة الترجمات الخاصة",
+ "apierror-translate-sandboxdisabled": "ميزة الملعب ليست قيد الاستخدام",
+ "apierror-translate-smg-nochanges": "لا توجد تغييرات لمعالجتها.",
+ "apierror-translate-unknownmessage": "رسالة غير معروفة",
+ "apierror-translate-invalid-changeset-name": "تم تمرير اسم ملف مجموعة التغييرات غير صالح - $1",
+ "apierror-translate-invalid-operation": "عملية غير صالحة: $1، قيم صالحة - $2.",
+ "apierror-translate-addition-key-invalid": "لم يتم العثور على مفتاح الرسالة الذي تم تمريره للإضافة في قائمة الرسائل التي تمت إعادة تسميتها للغة المصدر.",
+ "apierror-translate-rename-msg-new": "يمكن فقط إضافة الرسائل المعادة تسميتها كرسائل جديدة.",
+ "apierror-translate-rename-key-invalid": "لم يتم العثور على مفاتيح الرسائل التي تم تمريرها لإعادة التسمية في قائمة التغييرات للغة المصدر.",
+ "apierror-translate-rename-state-invalid": "تجب إضافة إحدى الرسائل التي تم تمريرها لإعادة التسمية مؤخرا وحذف الرسالة الأخر، الحالات الحالية، الإضافة: $1 والحذف: $2.",
+ "apiwarn-translate-alreadyreviewedbyyou": "تم تعليمها كمراجعة من قبلك",
+ "apiwarn-translate-language-disabled-source": "لغة المصدر لهذه المجموعة هي $1; يُرجَى تحديد لغة أخرى للترجمة إليها."
+}
diff --git a/Translate/i18n/api/as.json b/Translate/i18n/api/as.json
new file mode 100644
index 00000000..31981ba8
--- /dev/null
+++ b/Translate/i18n/api/as.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ajay Das"
+ ]
+ },
+ "apihelp-query+messagegroupstats-param-suppressempty": "যিবোৰ ভাষাত কোনো অনুবাদ নাই সেইবোৰ প্ৰদৰ্শন নকৰিব"
+}
diff --git a/Translate/i18n/api/ast.json b/Translate/i18n/api/ast.json
new file mode 100644
index 00000000..4b3813fd
--- /dev/null
+++ b/Translate/i18n/api/ast.json
@@ -0,0 +1,127 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fitoschido",
+ "Xuacu"
+ ]
+ },
+ "apihelp-aggregategroups-description": "Xestionar grupos de mensaxes agregaos.\n\nPues amestar y desaniciar grupos de mensaxes agregaos y asociar o disociar grupos de mensaxes d'ellos (unu de cada vez).",
+ "apihelp-aggregategroups-summary": "Alministrar grupos de mensaxes agregaos.",
+ "apihelp-aggregategroups-extended-description": "Pues amestar y desaniciar grupos de mensaxes agregaos y asociar o disociar grupos de mensaxes d'ellos (unu de cada vez).",
+ "apihelp-aggregategroups-param-do": "Qué facer col grupu de mensaxes agregaos.",
+ "apihelp-aggregategroups-param-aggregategroup": "ID del grupu de mensaxes agregaos.",
+ "apihelp-aggregategroups-param-group": "ID del grupu de mensaxes.",
+ "apihelp-aggregategroups-param-groupname": "Nome del grupu de mensaxes agregaos.",
+ "apihelp-aggregategroups-param-groupdescription": "Descripción del grupu de mensaxes agregaos.",
+ "apihelp-aggregategroups-example-1": "Asociar un grupu",
+ "apihelp-groupreview-description": "Configurar los estaos del fluxu de trabayu del grupu de mensaxes.",
+ "apihelp-groupreview-summary": "Configurar los estaos del fluxu de trabayu del grupu de mensaxes.",
+ "apihelp-groupreview-param-group": "Grupu de mensaxes.",
+ "apihelp-groupreview-param-language": "Códigu de llingua.",
+ "apihelp-groupreview-param-state": "El nuevu estáu pal grupu.",
+ "apihelp-groupreview-example-1": "Marcar l'estáu de la traducción al alemán del grupu de mensaxes «grupu-Exemplu» como preparáu",
+ "apihelp-query+languagestats-description": "Consultar les estadístiques de llingua.",
+ "apihelp-query+languagestats-summary": "Consultar les estadístiques de llingua.",
+ "apihelp-query+languagestats-param-language": "Códigu de llingua.",
+ "apihelp-query+languagestats-example-1": "Llista d'estadístiques de completáu de traducciones pal finés.",
+ "apihelp-query+messagecollection-description": "Consultar MessageCollection sobro les traducciones.",
+ "apihelp-query+messagecollection-summary": "Consultar MessageCollection sobro les traducciones.",
+ "apihelp-query+messagecollection-param-group": "Grupu de mensaxes.",
+ "apihelp-query+messagecollection-param-language": "Códigu de llingua.",
+ "apihelp-query+messagecollection-param-limit": "Cantidá de mensaxes a amosar (después de filtriar).",
+ "apihelp-query+messagecollection-param-offset": "Enteru o ralura de clave pa principiar.",
+ "apihelp-query+messagecollection-param-filter": "Filtros de coleiciones de mensaxes. Usa <kbd>!</kbd> pa negar la condición. Por exemplu, <kbd>!fuzzy</kbd> quier dicir facer sólo la llista de tolos mensaxes non aproximaos. Los filtros aplíquense nel orde dau.\n;fuzzy:Mensaxes cola etiqueta fuzzy (aproximao).\n;optional:Mensaxes que tienen de traducise sólo si los cambios son necesarios.\n;ignored:Mensaxes que nunca se traducen.\n;hastranslation:Mensaxes que tienen una traducción seya aproximada o non.\n;translated:Mensaxes que tienen una traducción que nun ye aproximada.\n;changed:Mensaxes traducíos o cambiaos dende la última esportación.\n;reviewer&#58;N:Mensaxes onde'l númberu d'usuariu <kbd>N</kbd> ta ente los revisores.\n;last-translator&#58;N:Mensaxes onde'l númberu d'usuariu <kbd>N</kbd> ye l'últimu traductor.",
+ "apihelp-query+messagecollection-param-prop": "Qué propiedaes obtener:\n;definition:Definición del mensaxe.\n;translation:Traducción actual (sin cadena de testu $1 si hai dalguna, usa les etiquetes pa buscar traducciones anticuaes o frañaes)\n;tags:Etiquetes del mensaxe, como opcional, inoráu y aproximáu.\n;properties:Propiedaes del mensaxe, como estáu, revisión, últimu traductor. Pue variar ente mensaxes.\n;revision:<span class=\"deprecated\">¡Anticuáu!</span> Usa $2prop=properties.",
+ "apihelp-query+messagecollection-example-1": "Llista de llingües con encontu",
+ "apihelp-query+messagecollection-example-2": "Llista de definiciones obligatories de mensaxes del grupu «page-Exemplu»",
+ "apihelp-query+messagecollection-example-3": "Llista de mensaxes opcionales en finlandés con etiquetes pal grupu «page-Exemplu»",
+ "apihelp-query+messagecollection-example-4": "Más información tocante a les últimes revisiones de traducciones pal grupu «page-Exemplu»",
+ "apihelp-query+messagegroups-description": "Devuelve información sobro grupos de mensaxes.\n\nTen en cuenta que'l parámetru «uselang» afeuta a la salida de les partes dependientes de la llingua.",
+ "apihelp-query+messagegroups-summary": "Devolver información de los grupos de mensaxes.",
+ "apihelp-query+messagegroups-extended-description": "Alvierte que'l parámetru uselang afeuta a la salida de les páxines dependientes de la llingua.",
+ "apihelp-query+messagegroups-param-depth": "Al utilizar el formatu d'árbol, llendar la fondura a esta cantidá de niveles. El valor 0 significa que nun s'amuesen subgrupos. Si se llega a la llende, el resultáu incluye un valor de \"cuenta de grupos\", qu'indica'l númberu de fíos direutos.",
+ "apihelp-query+messagegroups-param-filter": "Devolver sólo mensaxes con IDs que casen con una o más de les entraes daes (sin diferenciar mayúscules, separaos por barres verticales, * ye'l comodín).",
+ "apihelp-query+messagegroups-param-format": "Nel formatu d'árbol, los grupos de mensaxes pueden existir en múltiples llugares del árbol.",
+ "apihelp-query+messagegroups-param-iconsize": "Tamañu preferíu del iconu rasterizáu del grupu.",
+ "apihelp-query+messagegroups-param-prop": "Que información de la traducción algamar:\n;id:Incluye la ID del grupu.\n;label:Incluye la etiqueta del grupu.\n;description:Incluye la descripción del grupu.\n;class:Incluye'l nome de clase del grupu.\n;namespace:Incluye l'espaciu de nomes del grupu. Non tolos grupos pertenecen a un únicu espaciu de nomes.\n;exists:Incluye la propiedá auto-calculada d'esistencia del grupu.\n;icon:Incluye les URL al iconu del grupu.\n;priority:Incluye l'estáu de prioridá como desaconseyao.\n;prioritylangs:Incluye les llingües preferíes. Si nun tien nengún valor, devuelve falso.\n;priorityforce:Incluye l'estáu de prioridá - ye la configuración de prioridá de llingües forzada.\n;workflowstates:Incluye los estaos del fluxu de trabayu pa los mensaxes del grupu.",
+ "apihelp-query+messagegroups-param-root": "Al usar el formatu d'árbol, en llugar de principiar pol nivel superior, principiar pol grupu de mensaxes indicáu, que tien de ser un grupu de mensaxes agregáu. Al usar el formatu planu sólo se devuelve'l grupu especificáu.",
+ "apihelp-query+messagegroups-example-1": "Amosar grupos de mensaxes",
+ "apihelp-query+messagegroupstats-description": "Consultar les estadístiques del grupu de mensaxes.",
+ "apihelp-query+messagegroupstats-summary": "Consultar les estadístiques del grupu de mensaxes.",
+ "apihelp-query+messagegroupstats-param-group": "ID del grupu de mensaxes.",
+ "apihelp-query+messagegroupstats-example-1": "Llista d'estadístiques d'acabamientu de traducciones pal grupu \"page-Example\"",
+ "apihelp-query+messagetranslations-description": "Consultar toles traducciones pa un únicu mensaxe.",
+ "apihelp-query+messagetranslations-summary": "Consultar toles traducciones pa un únicu mensaxe.",
+ "apihelp-query+messagetranslations-param-title": "Títulu completu d'un mensaxe conocíu.",
+ "apihelp-query+messagetranslations-example-1": "Llista de traducciones na wiki pa \"MediaWiki:January\"",
+ "apihelp-translatesandbox-description": "Rexistrar y xestionar usuarios aislaos (en \"sandbox\").",
+ "apihelp-translatesandbox-summary": "Rexistrar y xestionar usuarios aisllaos (en \"sandbox\").",
+ "apihelp-translatesandbox-param-do": "Qué facer.",
+ "apihelp-translatesandbox-param-userid": "IDs de los usuarios que tan siendo xestionaos. Usa 0 pa les creaciones.",
+ "apihelp-translatesandbox-param-username": "Nome d'usuariu al crear l'usuariu.",
+ "apihelp-translatesandbox-param-password": "Contraseña al crear l'usuariu.",
+ "apihelp-translatesandbox-param-email": "Corréu electrónicu al crear l'usuariu.",
+ "apihelp-translationaids-description": "Consultar toles ayudes a la traducción.",
+ "apihelp-translationaids-summary": "Consultar toles ayudes a la traducción.",
+ "apihelp-translationaids-param-title": "Títulu completu d'un mensaxe conocíu.",
+ "apihelp-translationaids-param-group": "Grupu de mensaxes al que pertenez el mensaxe. Si ta vacío, usase'l grupu primariu.",
+ "apihelp-translationaids-param-prop": "Qué ayudes a la traducción incluir.",
+ "apihelp-translationaids-example-1": "Ver les ayudes pa [[MediaWiki:January/fi]]",
+ "apihelp-translationreview-description": "Marcar les traducciones como revisaes.",
+ "apihelp-translationreview-summary": "Marcar les traducciones como revisaes.",
+ "apihelp-translationreview-param-revision": "El númberu de revisión a revisar.",
+ "apihelp-translationreview-example-1": "Revisar revisión 1",
+ "apihelp-translationstash-description": "Amestar traducciones a la reserva.",
+ "apihelp-translationstash-summary": "Amestar traducciones a la reserva.",
+ "apihelp-translationstash-param-subaction": "Aición.",
+ "apihelp-translationstash-param-title": "Títulu de la páxina de la unidá de traducción.",
+ "apihelp-translationstash-param-translation": "Traducción fecha pol usuariu.",
+ "apihelp-translationstash-param-metadata": "Oxetu JSON.",
+ "apihelp-translationstash-param-username": "Opcionalmente, l'usuariu del que coyer la reserva. Esto sólo pueden facelo los usuarios privilexaos.",
+ "apihelp-translationstash-example-1": "Amestar una traducción a la reserva pa [[MediaWiki:Jan/fi]]",
+ "apihelp-translationstash-example-2": "Consultar la reserva",
+ "apihelp-ttmserver-description": "Consultar les suxerencies de les memories de traducción.",
+ "apihelp-ttmserver-summary": "Consultar les suxerencies de les memories de traducción.",
+ "apihelp-ttmserver-param-service": "Que servicios de traducción usar d'ente los disponibles.",
+ "apihelp-ttmserver-param-sourcelanguage": "El códigu de llingua del testu fonte.",
+ "apihelp-ttmserver-param-targetlanguage": "El códigu de llingua de la suxerencia.",
+ "apihelp-ttmserver-param-text": "El testu pal qu'alcontrar suxerencies.",
+ "apihelp-ttmserver-example-1": "Recibir suxerencies pa traducir «Help» del inglés al finés",
+ "apihelp-searchtranslations-description": "Buscar traducciones.",
+ "apihelp-searchtranslations-summary": "Buscar traducciones.",
+ "apihelp-searchtranslations-param-service": "Que servicios de traducción usar d'ente los disponibles.",
+ "apihelp-searchtranslations-param-query": "La cadena que buscar.",
+ "apihelp-searchtranslations-param-sourcelanguage": "El códigu de llingua del testu fonte.",
+ "apihelp-searchtranslations-param-language": "El códigu de llingua pal que buscar la cadena.",
+ "apihelp-searchtranslations-param-group": "La id de grupu nel que buscar la cadena.",
+ "apihelp-searchtranslations-param-filter": "Filtru d'estáu de traducción del mensaxe",
+ "apihelp-searchtranslations-param-match": "Coincide con cualquier/toles palabres de busca.",
+ "apihelp-searchtranslations-param-case": "Coincidir (o non) les mayúscules.",
+ "apihelp-searchtranslations-param-offset": "Desplazamientu pa les traducciones.",
+ "apihelp-searchtranslations-param-limit": "Tamañu del resultáu.",
+ "apihelp-searchtranslations-example-1": "Amosar les traducciones de la llingua.",
+ "apihelp-searchtranslations-example-2": "Amosar los mensaxes sin traducir que casen cola consulta na llingua orixinal",
+ "apihelp-translationcheck-description": "Validar la entrada de traducción dada escontra comprobadores de mensaxes.",
+ "apihelp-translationcheck-summary": "Validar traducciones.",
+ "apihelp-translationcheck-param-title": "Títulu de páxina con espaciu de nomes y códigu de llingua.",
+ "apihelp-translationcheck-param-translation": "La traducción a validar.",
+ "apierror-translate-duplicateaggregategroup": "El grupu de mensaxes yá existe",
+ "apierror-translate-fuzzymessage": "Nun pueden revisase les traducciones aproximaes",
+ "apierror-translate-groupreviewdisabled": "La revisión del grupu de mensaxes nun ta n'usu.",
+ "apierror-translate-invalidaggregategroup": "Grupu de mensaxes agregaos inválidu",
+ "apierror-translate-invalidaggregategroupname": "Nome de grupu de mensaxes agregaos inválidu",
+ "apierror-translate-invalidgroup": "El grupu nun esiste o nun ye válidu",
+ "apierror-translate-invalidstate": "L'estáu solicitáu nun ye válidu.",
+ "apierror-translate-invalidlanguage": "La llingua solicitada ye inválida.",
+ "apierror-translate-invalidupdate": "Anovamientu inválidu",
+ "apierror-translate-language-disabled": "La traducción a $1 ta desactivada",
+ "apierror-translate-language-disabled-reason": "La traducción a $1 ta desactivada: $2",
+ "apierror-translate-nodynamicgroups": "Nun s'almiten equí los grupos de mensaxes dinámicos",
+ "apierror-translate-nomessagefortitle": "El títulu nun casa con un mensaxe traducible",
+ "apierror-translate-notranslationservices": "Nun se configuró nengún serviciu públicu de traducciones. L'alministrador de la wiki tien de configurar <var>$wgTranslateTranslationServices</var> afechiscamente pa poder utilizar esta función.",
+ "apierror-translate-owntranslation": "Nun pueden revisase les traducciones propies",
+ "apierror-translate-sandboxdisabled": "La función de zona de pruebes nun ta n'usu",
+ "apierror-translate-unknownmessage": "Mensaxe desconocíu",
+ "apiwarn-translate-alreadyreviewedbyyou": "Yá ta marcada como revisada por ti",
+ "apiwarn-translate-language-disabled-source": "L'idioma orixinal d'esti grupu ye $1. Escueye otru idioma al que traducir."
+}
diff --git a/Translate/i18n/api/awa.json b/Translate/i18n/api/awa.json
new file mode 100644
index 00000000..a02ceb5c
--- /dev/null
+++ b/Translate/i18n/api/awa.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "1AnuraagPandey"
+ ]
+ },
+ "apihelp-query+messagecollection-example-1": "कुल समर्थित भाषा कय सुची"
+}
diff --git a/Translate/i18n/api/ban.json b/Translate/i18n/api/ban.json
new file mode 100644
index 00000000..c1d89aac
--- /dev/null
+++ b/Translate/i18n/api/ban.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chinamoonroll"
+ ]
+ },
+ "apihelp-query+languagestats-description": "Statistik basa kuéri",
+ "apihelp-query+languagestats-summary": "Statistik basa kuéri"
+}
diff --git a/Translate/i18n/api/bcl.json b/Translate/i18n/api/bcl.json
new file mode 100644
index 00000000..dda24d75
--- /dev/null
+++ b/Translate/i18n/api/bcl.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Geopoet"
+ ]
+ },
+ "apihelp-query+messagecollection-example-2": "Listahan kan bakong opsyonal na mga pakahulugan nin mensahe para sa grupo \"pahina-Ehemplo\"",
+ "apihelp-query+messagecollection-example-3": "Listahan kan opsyonal na mga mensahe sa Finnish na igwang mga marka para sa grupo \"pahina-Ehemplo\"",
+ "apihelp-query+messagecollection-example-4": "Kadagdagan na impormasyon manunungod sa pinakahuring rebisyon sa dinakit-taramon para sa grupo \"pahina-Ehemplo\"",
+ "apihelp-query+messagegroupstats-example-1": "Listahan nin estadistika kan nakumpleto nang dinakit-taramon para sa grupo \"pahina-Ehemplo\"",
+ "apihelp-query+messagetranslations-example-1": "Listahan kan mga dinakit-taramon sa laog kan wiki para sa \"MediaWiki:Enero\""
+}
diff --git a/Translate/i18n/api/be-tarask.json b/Translate/i18n/api/be-tarask.json
new file mode 100644
index 00000000..b2255872
--- /dev/null
+++ b/Translate/i18n/api/be-tarask.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Renessaince"
+ ]
+ },
+ "apihelp-translationreview-description": "Пазначыць пераклады як правераныя.",
+ "apihelp-translationreview-summary": "Пазначыць пераклады як правераныя.",
+ "apierror-translate-nomessagefortitle": "Загаловак не адпавядае перакладному паведамленьню"
+}
diff --git a/Translate/i18n/api/bg.json b/Translate/i18n/api/bg.json
new file mode 100644
index 00000000..ca75b301
--- /dev/null
+++ b/Translate/i18n/api/bg.json
@@ -0,0 +1,76 @@
+{
+ "@metadata": {
+ "authors": [
+ "MuratTheTurkish",
+ "StanProg",
+ "Vlad5250"
+ ]
+ },
+ "apihelp-aggregategroups-description": "Управление на обобщените групи съобщения.\n\nМожете да добавяте и премахвате обобщени групи съобщения и да асоциирате или отделяте групи от съобщения от тях (една по една).",
+ "apihelp-aggregategroups-summary": "Управление на обобщени групи съобщения.",
+ "apihelp-aggregategroups-extended-description": "Можете да добавяте и премахвате обобщени групи съобщения и да асоциирате или отделяте групи от съобщения от тях (една по една).",
+ "apihelp-aggregategroups-param-do": "Какво да правим с обобщената група съобщения.",
+ "apihelp-aggregategroups-param-aggregategroup": "ID на обобщената група съобщения.",
+ "apihelp-aggregategroups-param-group": "ID на група съобщения.",
+ "apihelp-aggregategroups-param-groupname": "Название на обобщената групата съобщения.",
+ "apihelp-aggregategroups-param-groupdescription": "Описание на обобщената група съобщения.",
+ "apihelp-aggregategroups-example-1": "Асоцииране на група",
+ "apihelp-groupreview-description": "Задаване състояния на работния процес на групата съобщения.",
+ "apihelp-groupreview-summary": "Задаване състояния на работния процес на групата съобщения.",
+ "apihelp-groupreview-param-group": "Група съобщения.",
+ "apihelp-groupreview-param-language": "Езиков код.",
+ "apihelp-groupreview-param-state": "Новото състояние на групата.",
+ "apihelp-groupreview-example-1": "Отбелязване на състоянието на немския превод за групата съобщения „група-Пример“ като готов",
+ "apihelp-query+languagestats-description": "Статистика за езика на заявките.",
+ "apihelp-query+languagestats-summary": "Статистика за езика на заявките.",
+ "apihelp-query+languagestats-param-language": "Езиков код.",
+ "apihelp-query+languagestats-example-1": "Списък със статистически данни за завършване на превода за фински",
+ "apihelp-query+messagecollection-description": "Заявка MessageCollection за преводите.",
+ "apihelp-query+managemessagegroups-summary": "Извличане на възможни преименувания на съобщение в група по време на внясяне",
+ "apihelp-query+managemessagegroups-description": "Извличане на възможни преименувания на съобщение в група по време на внасяне",
+ "apihelp-query+managemessagegroups-param-groupId": "Идентификатор на групата",
+ "apihelp-query+managemessagegroups-param-messageKey": "Ключ за съобщение",
+ "apihelp-query+managemessagegroups-param-changesetName": "Промяна името на набора – По подразбиране / Необслужено / MediaWiki и др.",
+ "apihelp-query+managemessagegroups-example-1": "Извличане на възможни преименувания за дадения ключ в дадената група.",
+ "apihelp-query+messagecollection-summary": "Извършване на заявка MessageCollection за преводите.",
+ "apihelp-query+messagecollection-param-group": "Група съобщения.",
+ "apihelp-query+messagecollection-param-language": "Езиков код.",
+ "apihelp-query+messagecollection-param-limit": "Колко съобщения да бъдат показани (след филтриране).",
+ "apihelp-query+messagecollection-param-offset": "Цяло число или ключ от който да се започне.",
+ "apihelp-query+messagecollection-example-1": "Списък на поддържаните езици",
+ "apihelp-query+messagecollection-example-2": "Списък на задължителните дефиниции на съобщения за група „page-Example“",
+ "apihelp-query+messagecollection-example-4": "Повече информация за най-новите версии на превода за групата „page-Example“",
+ "apihelp-query+messagegroups-summary": "Връщане на информация за групи съобщения.",
+ "apihelp-query+messagegroups-example-1": "Показване на групите съобщения",
+ "apihelp-query+messagegroupstats-description": "Заявка към статистиката на група съобщения.",
+ "apihelp-query+messagegroupstats-summary": "Заявка към статистиката на група съобщения.",
+ "apihelp-query+messagegroupstats-param-group": "ID на група съобщения.",
+ "apihelp-query+messagetranslations-example-1": "Списък на преводи в уикито за „MediaWiki:January“",
+ "apihelp-translatesandbox-description": "Регистрация и управление на потребители в пясъчника.",
+ "apihelp-translatesandbox-summary": "Регистрация и управление на потребители в пясъчника.",
+ "apihelp-translatesandbox-param-username": "Потребителско име при създаване на потребителя.",
+ "apihelp-translatesandbox-param-password": "Парола при създаване на потребителя.",
+ "apihelp-translatesandbox-param-email": "Е-поща при създаване на потребителя.",
+ "apihelp-translationreview-description": "Отбелязване на преводите като проверени.",
+ "apihelp-translationreview-summary": "Отбелязване на преводите като проверени.",
+ "apihelp-translationreview-example-1": "Оценка на редакция 1",
+ "apihelp-translationstash-param-subaction": "Действие.",
+ "apihelp-translationstash-param-title": "Заглавие на страницата на преводната единица.",
+ "apihelp-translationstash-param-translation": "Превод, направен от потребителя.",
+ "apihelp-translationstash-param-metadata": "JSON-обект.",
+ "apihelp-searchtranslations-description": "Търсене на преводи.",
+ "apihelp-searchtranslations-summary": "Търсене на преводи.",
+ "apihelp-searchtranslations-param-limit": "Размер на резултата.",
+ "apihelp-searchtranslations-example-1": "Показване на преводи на този език.",
+ "apihelp-translationcheck-summary": "Потвърждаване на преводи.",
+ "apihelp-translationcheck-param-translation": "Превод за потвърждение.",
+ "apierror-translate-duplicateaggregategroup": "Групата съобщения вече съществува",
+ "apierror-translate-invalidgroup": "Групата не съществува или е невалидна",
+ "apierror-translate-invalidstate": "Заявеното състояние е невалидно.",
+ "apierror-translate-invalidlanguage": "Езиковият код $1 е невалиден.",
+ "apierror-translate-invalidupdate": "Невалидно обновяване",
+ "apierror-translate-language-disabled": "Превеждането на $1 е деактивирано.",
+ "apierror-translate-language-disabled-reason": "Превеждането на $1 е деактивирано: $2",
+ "apierror-translate-owntranslation": "Не можете да проверявате свои преводи",
+ "apierror-translate-unknownmessage": "Неизвестно съобщение"
+}
diff --git a/Translate/i18n/api/blk.json b/Translate/i18n/api/blk.json
new file mode 100644
index 00000000..d4f5420e
--- /dev/null
+++ b/Translate/i18n/api/blk.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "咽頭べさ"
+ ]
+ },
+ "apihelp-groupreview-param-group": "မဲက်သေ့စွုမ်ꩻစွိုꩻ",
+ "apihelp-query+messagecollection-param-group": "မဲက်သေ့စွုမ်ꩻစွိုꩻ"
+}
diff --git a/Translate/i18n/api/bn.json b/Translate/i18n/api/bn.json
new file mode 100644
index 00000000..5687e420
--- /dev/null
+++ b/Translate/i18n/api/bn.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aftabuzzaman",
+ "আফতাবুজ্জামান"
+ ]
+ },
+ "apihelp-query+languagestats-param-language": "ভাষা কোড।",
+ "apihelp-searchtranslations-summary": "অনুবাদ অনুসন্ধান করে।",
+ "apierror-translate-invalidlanguage": "ভাষা কোড $1 বৈধ নয়।",
+ "apierror-translate-language-disabled": "$1-এ অনুবাদ নিষ্ক্রিয় করা হয়েছে।",
+ "apierror-translate-language-disabled-reason": "$1-এ অনুবাদ নিষ্ক্রিয় করা হয়েছে: $2",
+ "apierror-translate-unknownmessage": "অজানা বার্তা"
+}
diff --git a/Translate/i18n/api/bs.json b/Translate/i18n/api/bs.json
new file mode 100644
index 00000000..1236f560
--- /dev/null
+++ b/Translate/i18n/api/bs.json
@@ -0,0 +1,120 @@
+{
+ "@metadata": {
+ "authors": [
+ "Srdjan m",
+ "Srđan"
+ ]
+ },
+ "apihelp-aggregategroups-description": "Upravljanje zbirnim grupama poruka.\n\nMožete dodavati i uklanjati zbirne grupe poruka i pridruživati ili odstranjivati iz zbirnih poruka (jednu po jednu).",
+ "apihelp-aggregategroups-summary": "Upravljaj zbirnim grupama poruka.",
+ "apihelp-aggregategroups-extended-description": "Možete dodavati i uklanjati zbirne grupe poruka i pridruživati ili odstranjivati grupe poruka iz njih (jednu po jednu).",
+ "apihelp-aggregategroups-param-do": "Šta raditi sa zbirnom grupom poruka.",
+ "apihelp-aggregategroups-param-aggregategroup": "ID zbirne grupe poruka.",
+ "apihelp-aggregategroups-param-group": "ID grupe poruka.",
+ "apihelp-aggregategroups-param-groupname": "Naziv zbirne grupe poruka.",
+ "apihelp-aggregategroups-param-groupdescription": "Opis zbirne grupe poruka.",
+ "apihelp-aggregategroups-example-1": "Pridruži grupu",
+ "apihelp-groupreview-description": "Postavi stanja radnog toka za grupe poruka.",
+ "apihelp-groupreview-summary": "Postavi stanja radnog toka za grupe poruka.",
+ "apihelp-groupreview-param-group": "Grupa poruka.",
+ "apihelp-groupreview-param-language": "Jezički kôd.",
+ "apihelp-groupreview-param-state": "Novo stanje grupe.",
+ "apihelp-groupreview-example-1": "Označi stanje njemačkog prijevoda grupa poruka \"group-Example\" spremnim",
+ "apihelp-query+languagestats-description": "Upit jezičkih statistika.",
+ "apihelp-query+languagestats-summary": "Ispitaj jezičke statistike.",
+ "apihelp-query+languagestats-param-language": "Jezički kôd.",
+ "apihelp-query+languagestats-example-1": "Spisak statistika dovršenosti prijevoda na finski",
+ "apihelp-query+messagecollection-description": "Izvrši upit Zbirci podataka o prijevodima.",
+ "apihelp-query+messagecollection-summary": "Izvrši upit Zbirci podataka o prijevodima.",
+ "apihelp-query+messagecollection-param-group": "Grupa poruka.",
+ "apihelp-query+messagecollection-param-language": "Jezički kôd.",
+ "apihelp-query+messagecollection-param-limit": "Koliko poruka prikazati (nakon filtriranja).",
+ "apihelp-query+messagecollection-param-offset": "Cijeli broj ili odstupanje s ključem za početak.",
+ "apihelp-query+messagecollection-param-filter": "Filteri za prikupljanje poruka. Koristite <kbd>!</kbd> za negaciju nekog uslova. Naprimjer, <kbd>!fuzzy</kbd> znači da treba ispisati sve poruke koje nisu zastarjele. Filteri se primjenjuju po ukazanom redoslijedu.\n;fuzzy:Zastarjele poruke (s oznakom \"fuzzy\").\n;optional:Poruke koje treba prevoditi samo ako je potrebna promjena.\n;ignored:Poruke koje se nikad ne prevode.\n;hastranslation:Poruke koje imaju prijevod bez obzira je li zastario.\n;translated:Poruke koje imaju prijevod koji nije zastario.\n;changed:Poruke koje su prevedene ili izmijenjene od posljednjeg izvoza.\n;reviewer&#58;N:Poruke koje među pregledavačima imaju korisnika s brojem <kbd>N</kbd>.\n;last-translator&#58;N:Poruke čiji je posljednji prevodilac korisnik s brojem <kbd>N</kbd>.",
+ "apihelp-query+messagecollection-param-prop": "Koja svojstva treba dati:\n;definition:Definicija poruke.\n;translation:Trenutni prijevod (bez niza $1 ako ga ima, koristite oznake da biste provjerili ima li zastarjelih ili pokvarenih prijevoda).\n;tags:Oznake poruka, kao što su optional, ignored i fuzzy.\n;properties:Svojstva poruka, kao što su status, revision, last-translator. Može se razlikovati od poruke do poruke.\n;revision:<span class=\"deprecated\">Zastarjelo!</span> Koristite $2prop=properties.",
+ "apihelp-query+messagecollection-example-1": "Spisak podržanih jezika",
+ "apihelp-query+messagecollection-example-2": "Spisak neobaveznih definicija poruka za grupu \"page-Example\"",
+ "apihelp-query+messagecollection-example-3": "Spisak neobaveznih poruka na finskom s oznakama za grupu \"page-Example\"",
+ "apihelp-query+messagecollection-example-4": "Više informacija o najnovijim izmjenama grupe \"page-Example\"",
+ "apihelp-query+messagegroups-description": "Daj informacije za grupe poruka.\n\nImajte na umu da parametar \"uselang\" utiče na ispis jezički-zavisnih dijelova.",
+ "apihelp-query+messagegroups-summary": "Daj informacije za grupe poruka.",
+ "apihelp-query+messagegroups-extended-description": "Imajte na umu da parametar \"uselang\" utiče za ispis dijelova koji ovise o jeziku.",
+ "apihelp-query+messagegroups-param-depth": "Kad se koristi format \"stablo\", ograniči dubinu na ovoliko nivoa. Vrijednost 0 znači da se neće prikazati nijedna podgrupa. Ako se dostigne granica, na ispisu će se prikazati vrijednost \"groupcount\", koja navodi koliko je neposrednih podgrupa.",
+ "apihelp-query+messagegroups-param-filter": "Daj samo poruke s ID-ovima koji odgovaraju jednom ili više zadanih unosa (ne razlikuju se mala i velika slova, razdvaja se uspravnom crtom, džoker *).",
+ "apihelp-query+messagegroups-param-format": "U formatu \"stablo\", grupe poruka mogu biti na više mjesta u stablu.",
+ "apihelp-query+messagegroups-param-iconsize": "Željena veličina rasterizirane ikone grupe.",
+ "apihelp-query+messagegroups-param-prop": "Koje informacije u vezi s prijevodom treba dati:\n;id:Uključi ID grupe.\n;label:Uključi oznaku grupe.\n;description:Uključi opis grupe.\n;class:Uključi ime klase grupe.\n;namespace:Uključi imenski prostor grupe. Ne pripadaju sve grupe jednom imenskom prostoru.\n;exists:Uključi samokalkulirano svojstvo postojanja grupe.\n;icon:Uključi URL-ove ka ikoni grupe.\n;priority:Uključi prioritetni status, kao što je \"nepreporučeno\".\n;prioritylangs:Uključi prioritetne jezike. Ako nije postavljeno, povratna vrijednost će biti \"false\".\n;priorityforce:Uključi prioritetni status – ovo je forsirana postavka prioritetnih jezika.\n;workflowstates:Uključi stanja radnog toka za grupu poruka.",
+ "apihelp-query+messagegroups-param-root": "Kad se koristi format \"stablo\", umjesto da se započne od najvišeg nivoa, započni od date grupe poruka, koja mora biti zbirna. Kad se koristi ravni format, prikazat će se samo navedena grupa.",
+ "apihelp-query+messagegroups-example-1": "Prikaži grupe poruka",
+ "apihelp-query+messagegroupstats-description": "Ispitaj statistike grupa poruka.",
+ "apihelp-query+messagegroupstats-summary": "Ispitaj statistike grupa poruka.",
+ "apihelp-query+messagegroupstats-param-group": "ID grupe poruka.",
+ "apihelp-query+messagegroupstats-example-1": "Spisak statistike dovršenosti prijevoda za grupu \"page-Example\"",
+ "apihelp-query+messagetranslations-description": "Ispitaj sve prijevode jedne poruke.",
+ "apihelp-query+messagetranslations-summary": "Ispitaj sve prijevode jedne poruke.",
+ "apihelp-query+messagetranslations-param-title": "Cijeli naziv poznate poruke.",
+ "apihelp-query+messagetranslations-example-1": "Spisak prijevoda na wikiju za \"MediaWiki:January\"",
+ "apihelp-translatesandbox-description": "Registracija i upravljanje korisnicima u pješčaniku.",
+ "apihelp-translatesandbox-summary": "Registracija i upravljanje korisnicima u pješčaniku.",
+ "apihelp-translatesandbox-param-do": "Šta uraditi.",
+ "apihelp-translatesandbox-param-userid": "Korisnički ID-ovi korisnika kojima se upravlja. Koristite 0 za stvaranja.",
+ "apihelp-translatesandbox-param-username": "Korisničko ime pri stvaranju korisnika.",
+ "apihelp-translatesandbox-param-password": "Lozinka pri stvaranju korisnika.",
+ "apihelp-translatesandbox-param-email": "E-pošta pri stvaranju korisnika.",
+ "apihelp-translationaids-description": "Ispitaj sva prevodilačka pomagala.",
+ "apihelp-translationaids-summary": "Ispitaj sva prevodilačka pomagala.",
+ "apihelp-translationaids-param-title": "Cijeli naziv poznate poruke.",
+ "apihelp-translationaids-param-group": "Kojoj grupi pripada poruka. Ako je prazno, koristit će se glavna grupa.",
+ "apihelp-translationaids-param-prop": "Koja prevodilačka pomagala uključiti.",
+ "apihelp-translationaids-example-1": "Prikaži pomagala za [[MediaWiki:January/fi]]",
+ "apihelp-translationreview-description": "Označi prijevode pregledanim.",
+ "apihelp-translationreview-summary": "Označi prijevode pregledanim.",
+ "apihelp-translationreview-param-revision": "Broj izmjene za pregled.",
+ "apihelp-translationreview-example-1": "Pregledaj izmjenu 1",
+ "apihelp-translationstash-description": "Dodaj prijevode u skladište.",
+ "apihelp-translationstash-summary": "Dodaj prijevode u skladište.",
+ "apihelp-translationstash-param-subaction": "Radnja.",
+ "apihelp-translationstash-param-title": "Naziv stranice prevodilačke jedinice.",
+ "apihelp-translationstash-param-translation": "Korisnikovi prijevodi.",
+ "apihelp-translationstash-param-metadata": "JSON-objekt.",
+ "apihelp-translationstash-param-username": "Ili korisnik čije skladište treba preuzeti. Ovo mogu raditi samo ovlašteni korisnici.",
+ "apihelp-translationstash-example-1": "Dodaj prijevod u skladište za [[MediaWiki:Jan/fi]]",
+ "apihelp-translationstash-example-2": "Ispitaj skladište",
+ "apihelp-ttmserver-description": "Ispitaj prijedloge iz zapamćenih prijevoda.",
+ "apihelp-ttmserver-summary": "Ispitaj prijedloge iz zapamćenih prijevoda.",
+ "apihelp-ttmserver-param-service": "Koju od dostupnih usluga za prijevod koristiti.",
+ "apihelp-ttmserver-param-sourcelanguage": "Jezički kôd izvornog teksta.",
+ "apihelp-ttmserver-param-targetlanguage": "Jezički kôd prijedloga.",
+ "apihelp-ttmserver-param-text": "Za koji tekst naći prijedloge.",
+ "apihelp-ttmserver-example-1": "Daj prijedloge za prevođenje \"Help\" s engleskog na finski",
+ "apihelp-searchtranslations-description": "Pretraži prijevode.",
+ "apihelp-searchtranslations-summary": "Pretraži prijevode.",
+ "apihelp-searchtranslations-param-service": "Koju od dostupnih usluga za prijevod koristiti.",
+ "apihelp-searchtranslations-param-query": "Niz koji treba tražiti.",
+ "apihelp-searchtranslations-param-sourcelanguage": "Jezički kôd izvornog teksta.",
+ "apihelp-searchtranslations-param-language": "Koji jezički kôd tražiti u nizu.",
+ "apihelp-searchtranslations-param-group": "ID grupe koju treba tražiti u nizu.",
+ "apihelp-searchtranslations-param-filter": "Filter za status prijevoda.",
+ "apihelp-searchtranslations-param-match": "Poklapanje bilo kojih/svih riječi.",
+ "apihelp-searchtranslations-param-case": "Pretraga koja (ne) razlikuje velika i mala slova.",
+ "apihelp-searchtranslations-param-offset": "Odstup za prijevode.",
+ "apihelp-searchtranslations-param-limit": "Veličina rezultata.",
+ "apihelp-searchtranslations-example-1": "Prikaži prijevode na ovaj jezik.",
+ "apihelp-searchtranslations-example-2": "Prikaži neprevedene poruke koji odgovaraju upitu na izvornom jeziku.",
+ "apierror-translate-duplicateaggregategroup": "Grupa poruka već postoji",
+ "apierror-translate-fuzzymessage": "Ne možete pregledati zastarjele prijevode",
+ "apierror-translate-groupreviewdisabled": "Pregled grupe poruka nije u upotrebi.",
+ "apierror-translate-invalidaggregategroup": "Neispravna grupa zbirnih poruka",
+ "apierror-translate-invalidaggregategroupname": "Neispravni naziv za grupu zbirnih poruka",
+ "apierror-translate-invalidgroup": "Grupa ne postoji ili nije ispravna",
+ "apierror-translate-invalidstate": "Traženo stanje nije ispravno.",
+ "apierror-translate-invalidupdate": "Neispravno ažuriranje",
+ "apierror-translate-language-disabled": "Prijevod na ovaj jezik je onemogućen",
+ "apierror-translate-nodynamicgroups": "Dinamičke grupe poruka ovdje nisu podržane",
+ "apierror-translate-nomessagefortitle": "Naslov ne odgovara prevodivoj poruci",
+ "apierror-translate-owntranslation": "Ne možete pregledati vlastite prijevode",
+ "apierror-translate-sandboxdisabled": "Funkcija pijeska nije u upotrebi",
+ "apierror-translate-unknownmessage": "Nepoznata poruka",
+ "apiwarn-translate-alreadyreviewedbyyou": "Već ste je označili pregledanom",
+ "apiwarn-translate-language-disabled-source": "Izvorni jezik ove grupe je $1. Izaberite jezik na koji želite prevoditi."
+}
diff --git a/Translate/i18n/api/ca.json b/Translate/i18n/api/ca.json
new file mode 100644
index 00000000..89490a05
--- /dev/null
+++ b/Translate/i18n/api/ca.json
@@ -0,0 +1,48 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alvaro Vidal-Abarca",
+ "Fitoschido",
+ "Jlrb+",
+ "Jmarchn"
+ ]
+ },
+ "apihelp-aggregategroups-example-1": "Associar un grup",
+ "apihelp-groupreview-param-language": "Codi d'idioma.",
+ "apihelp-query+languagestats-param-language": "Codi d'idioma.",
+ "apihelp-query+managemessagegroups-summary": "Cerca possibles rebateigs per a un missatge en un grup durant les importacions",
+ "apihelp-query+managemessagegroups-description": "Cerca possibles rebateigs per a un missatge en un grup durant les importacions",
+ "apihelp-query+managemessagegroups-param-groupId": "Id del grup",
+ "apihelp-query+managemessagegroups-param-messageKey": "Clau de missatge",
+ "apihelp-query+managemessagegroups-param-changesetName": "Canvia el nom del conjunt - Per defecte / No atès / MediaWiki etc.",
+ "apihelp-query+managemessagegroups-example-1": "Cerca possibles rebateigs per a la clau donada en el grup donat.",
+ "apihelp-query+messagecollection-param-group": "Grup de missatges.",
+ "apihelp-query+messagecollection-param-language": "Codi d'idioma.",
+ "apihelp-query+messagecollection-param-limit": "Quantitat de missatges a mostrar (després de filtrar).",
+ "apihelp-query+messagecollection-example-1": "Llista d'idiomes suportats",
+ "apihelp-query+messagetranslations-description": "Consulta totes les traduccions per a un sol missatge.",
+ "apihelp-query+messagetranslations-param-title": "El títol complet d'un missatge conegut.",
+ "apihelp-managemessagegroups-description": "Afegeix un missatge com a rebateig d'un missatge existent o d'un missatge nou en el grup durant les importacions",
+ "apihelp-managemessagegroups-summary": "Afegeix un missatge com a rebateig d'un missatge existent o d'un missatge nou en el grup durant les importacions",
+ "apihelp-managemessagegroups-param-groupId": "Id del grup",
+ "apihelp-managemessagegroups-param-renameMessageKey": "S'està rebatejant la clau de missatge objectiu",
+ "apihelp-managemessagegroups-param-messageKey": "Clau de missatge de substitució",
+ "apihelp-managemessagegroups-param-operation": "Operació a ser executada. Possibles valors: renomena / nou",
+ "apihelp-managemessagegroups-param-changesetName": "Canvia el nom del conjunt - Per defecte / No atès / MediaWiki etc.",
+ "apihelp-managemessagegroups-param-changesetModified": "Segell de temps Unix de la darrera modificació del conjunt de canvis. Si el conjunt de canvis s'ha modificat posteriorment, l'API donarà error.",
+ "apihelp-translatesandbox-param-do": "Què fer.",
+ "apihelp-translatesandbox-param-username": "Nom d'usuari a l'hora de crear l'usuari.",
+ "apihelp-translationaids-description": "Consulta totes les ajudes de traducció.",
+ "apihelp-translationstash-param-metadata": "Objecte JSON.",
+ "apihelp-ttmserver-param-targetlanguage": "El codi d'idioma de la proposta.",
+ "apihelp-ttmserver-param-text": "El text per trobar suggeriments.",
+ "apihelp-ttmserver-example-1": "Obtenir suggeriments per a la traducció de \"Ajuda\" de l'anglès al finès",
+ "apierror-translate-changeset-modified": "Un altre usuari o procés ha modificat aquest conjunt de canvis. Els teus canvis no es poden desar perquè eliminaria els seus canvis. Refresca la pàgina per a veure els darrers canvis.",
+ "apierror-translate-smg-nochanges": "No hi ha cap canvi per a processar.",
+ "apierror-translate-invalid-changeset-name": "Ha passat un conjunt de canvis amb nom no vàlid - $1",
+ "apierror-translate-invalid-operation": "Operació no vàlida: $1. Valors vàlids - $2.",
+ "apierror-translate-addition-key-invalid": "El missatge clau passat per a afegir no s'ha trobat en la llista de missatges de la llengua font.",
+ "apierror-translate-rename-msg-new": "Només els missatges rebatejats es poden afegir com a nous missatges",
+ "apierror-translate-rename-key-invalid": "No s'han trobat les claus de missatge passades per a rebateig en la llista de canvis per a la llengua font.",
+ "apierror-translate-rename-state-invalid": "Cal tornar a afegir un dels missatges acceptats per a rebateig i esborrar l'altre. Estats actuals - afegir: $1 i esborrar $2"
+}
diff --git a/Translate/i18n/api/ce.json b/Translate/i18n/api/ce.json
new file mode 100644
index 00000000..191abcac
--- /dev/null
+++ b/Translate/i18n/api/ce.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Умар"
+ ]
+ },
+ "apihelp-groupreview-param-language": "Меттан код.",
+ "apihelp-query+languagestats-param-language": "Меттан код.",
+ "apihelp-query+messagecollection-param-group": "Хаамийн тоба.",
+ "apihelp-query+messagecollection-param-language": "Меттан код.",
+ "apihelp-translationstash-param-subaction": "Дийраш."
+}
diff --git a/Translate/i18n/api/ckb.json b/Translate/i18n/api/ckb.json
new file mode 100644
index 00000000..8393c2a4
--- /dev/null
+++ b/Translate/i18n/api/ckb.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Épine"
+ ]
+ },
+ "apiwarn-translate-language-disabled-source": "سەرچاوەی زمانی ئەم گرووپە $1ە. تکایە زمانێکی تر ھەڵبژێرە بۆ وەرگێڕان بۆی."
+}
diff --git a/Translate/i18n/api/cs.json b/Translate/i18n/api/cs.json
new file mode 100644
index 00000000..45f93fda
--- /dev/null
+++ b/Translate/i18n/api/cs.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Adam N.",
+ "Mormegil",
+ "Vks",
+ "Want"
+ ]
+ },
+ "apihelp-groupreview-param-group": "Skupina zpráv.",
+ "apihelp-groupreview-param-language": "Kód jazyka.",
+ "apihelp-groupreview-param-state": "Nový stav pro skupinu.",
+ "apihelp-query+languagestats-param-language": "Kód jazyka.",
+ "apihelp-query+messagecollection-param-group": "Skupina zpráv.",
+ "apihelp-query+messagecollection-param-language": "Kód jazyka.",
+ "apihelp-query+messagegroups-example-1": "Zobrazit skupinu zpráv",
+ "apihelp-translationstash-param-subaction": "Akce.",
+ "apihelp-translationstash-param-metadata": "JSON objekt."
+}
diff --git a/Translate/i18n/api/cu.json b/Translate/i18n/api/cu.json
new file mode 100644
index 00000000..100bb1a6
--- /dev/null
+++ b/Translate/i18n/api/cu.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "NR Deblocked"
+ ]
+ },
+ "apierror-translate-invalidlanguage": "​Кодъ​ ​ѧ҆зы́ка​ $1 недѣйстви́теленъ."
+}
diff --git a/Translate/i18n/api/da.json b/Translate/i18n/api/da.json
new file mode 100644
index 00000000..ba2cfbe5
--- /dev/null
+++ b/Translate/i18n/api/da.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Saederup92"
+ ]
+ },
+ "apihelp-aggregategroups-param-group": "Beskedgruppe-ID.",
+ "apihelp-groupreview-param-group": "Beskedgruppe.",
+ "apihelp-groupreview-param-language": "Sprogkode.",
+ "apihelp-query+languagestats-param-language": "Sprogkode.",
+ "apihelp-query+managemessagegroups-param-messageKey": "Beskednøgle",
+ "apihelp-query+messagecollection-param-group": "Beskedgruppe.",
+ "apihelp-query+messagecollection-param-language": "Sprogkode.",
+ "apihelp-query+messagecollection-example-1": "Liste over understøttede sprog",
+ "apihelp-query+messagegroups-example-1": "Vis beskedgrupper",
+ "apihelp-query+messagegroupstats-param-group": "Beskedgruppe-ID.",
+ "apihelp-query+messagetranslations-param-title": "Den fulde titel af en kendt besked.",
+ "apihelp-translatesandbox-param-username": "Brugernavn når ny bruger oprettes.",
+ "apihelp-translatesandbox-param-password": "Kodeord når ny bruger oprettes.",
+ "apihelp-translationaids-param-title": "Den fulde titel af en kendt besked.",
+ "apihelp-translationstash-param-subaction": "Handling.",
+ "apihelp-translationstash-param-metadata": "JSON-objekt.",
+ "apihelp-searchtranslations-description": "Søg i oversættelser.",
+ "apihelp-searchtranslations-summary": "Søg i oversættelser.",
+ "apihelp-searchtranslations-param-query": "Strengen der skal søges efter.",
+ "apihelp-searchtranslations-param-limit": "Resultatets størrelse.",
+ "apihelp-searchtranslations-example-1": "Vis oversættelser for sproget.",
+ "apierror-translate-invalidupdate": "Ugyldig opdatering",
+ "apierror-translate-language-disabled": "Oversættelser til $1 er deaktiveret.",
+ "apierror-translate-language-disabled-reason": "Oversættelser til $1 er deaktiveret: $2",
+ "apierror-translate-unknownmessage": "Ukendt besked"
+}
diff --git a/Translate/i18n/api/de.json b/Translate/i18n/api/de.json
new file mode 100644
index 00000000..d372acff
--- /dev/null
+++ b/Translate/i18n/api/de.json
@@ -0,0 +1,152 @@
+{
+ "@metadata": {
+ "authors": [
+ "Brettchenweber",
+ "Colfin 96",
+ "Ljonka",
+ "Metalhead64",
+ "Predatorix",
+ "Seewolf",
+ "SorkDE"
+ ]
+ },
+ "apihelp-aggregategroups-description": "Du kannst aggregierte Nachrichtengruppen hinzufügen und entfernen und Nachrichtengruppen damit verknüpfen oder davon trennen (eine nach der anderen).",
+ "apihelp-aggregategroups-summary": "Verwaltet zusammengefasste Nachrichtengruppen.",
+ "apihelp-aggregategroups-extended-description": "Du kannst aggregierte Nachrichtengruppen hinzufügen und entfernen und Nachrichtengruppen damit verknüpfen oder davon trennen (eine nach der anderen).",
+ "apihelp-aggregategroups-param-do": "Was mit der zusammengefassten Nachrichtengruppe getan werden soll.",
+ "apihelp-aggregategroups-param-aggregategroup": "Kennung der zusammengefassten Nachrichtengruppe.",
+ "apihelp-aggregategroups-param-group": "Nachrichtengruppenkennung.",
+ "apihelp-aggregategroups-param-groupname": "Name der zusammengefassten Nachrichtengruppe.",
+ "apihelp-aggregategroups-param-groupdescription": "Beschreibung der zusammengefassten Nachrichtengruppe.",
+ "apihelp-aggregategroups-example-1": "Verknüpft eine Gruppe",
+ "apihelp-groupreview-description": "Nachrichtengruppen-Workflow-Status festlegen.",
+ "apihelp-groupreview-summary": "Nachrichtengruppen-Workflow-Status festlegen.",
+ "apihelp-groupreview-param-group": "Nachrichtengruppe.",
+ "apihelp-groupreview-param-language": "Sprachcode.",
+ "apihelp-groupreview-param-state": "Der neue Status für die Gruppe.",
+ "apihelp-groupreview-example-1": "Markiere den Status der deutschen Übersetzung für die Nachrichtengruppe \"group-Example\" als fertig",
+ "apihelp-query+languagestats-description": "Ruft Sprachstatistiken ab.",
+ "apihelp-query+languagestats-summary": "Ruft Sprachstatistiken ab.",
+ "apihelp-query+languagestats-param-language": "Sprachcode.",
+ "apihelp-query+languagestats-param-group": "Nachrichtengruppen-ID.",
+ "apihelp-query+languagestats-example-1": "Listet Übersetzungsvervollständigungsstatistiken für Finnisch auf.",
+ "apihelp-query+languagestats-example-2": "Liste der Übersetzungsabschlussstatistiken für Finnisch für Gruppe A",
+ "apihelp-query+messagecollection-description": "Ruft die Nachrichtensammlung über Übersetzungen ab.",
+ "apihelp-query+managemessagegroups-summary": "Abrufen möglicher Umbenennungen für eine Nachricht in einer Gruppe während des Imports",
+ "apihelp-query+managemessagegroups-description": "Abrufen möglicher Umbenennungen für eine Nachricht in einer Gruppe während des Imports",
+ "apihelp-query+managemessagegroups-param-groupId": "Gruppen-ID",
+ "apihelp-query+managemessagegroups-param-messageKey": "Nachrichten-Schlüssel",
+ "apihelp-query+managemessagegroups-example-1": "Holt mögliche Umbenennungen für den angegebenen Schlüssel in der angegebenen Gruppe.",
+ "apihelp-query+messagecollection-summary": "Ruft MessageCollection über Übersetzungen ab.",
+ "apihelp-query+messagecollection-param-group": "Nachrichtengruppe.",
+ "apihelp-query+messagecollection-param-language": "Sprachcode.",
+ "apihelp-query+messagecollection-param-limit": "Wie viele Nachrichten angezeigt werden sollen (nach der Filterung).",
+ "apihelp-query+messagecollection-param-offset": "Ganzzahl oder Schlüsselversatz für den Start.",
+ "apihelp-query+messagecollection-example-1": "Liste unterstützter Sprachen",
+ "apihelp-query+messagecollection-example-2": "Listet nicht-optionale Nachrichtendefinitionen für die Gruppe „page-Example“ auf",
+ "apihelp-query+messagecollection-example-3": "Listet optionale Nachrichten in Finnisch mit Markierungen für die Gruppe „page-Example“ auf",
+ "apihelp-query+messagecollection-example-4": "Weitere Informationen über die aktuellsten Übersetzungsversionen für die Gruppe „page-Example“",
+ "apihelp-query+messagegroups-summary": "Gibt Informationen über Nachrichtengruppen zurück.",
+ "apihelp-query+messagegroups-extended-description": "Beachten Sie, dass der uselang-Parameter die Ausgabe von sprachabhängigen Teilen beeinflusst.",
+ "apihelp-query+messagegroups-param-format": "Im Baumformat können Nachrichtengruppen an mehreren Orten im Baum vorhanden sein.",
+ "apihelp-query+messagegroups-param-iconsize": "Bevorzugte Größe des Rastergruppensymbols.",
+ "apihelp-query+messagegroups-param-languageFilter": "Gibt nur Nachrichtengruppen zurück, die in die angegebene Sprache übersetzt werden können.",
+ "apihelp-query+messagegroups-example-1": "Nachrichtengruppen anzeigen",
+ "apihelp-query+messagegroupstats-description": "Ruft Statistiken zu Nachrichtengruppen ab.",
+ "apihelp-query+messagegroupstats-summary": "Ruft Statistiken zu Nachrichtengruppen ab.",
+ "apihelp-query+messagegroupstats-param-group": "Nachrichtengruppenkennung.",
+ "apihelp-query+messagegroupstats-param-suppresscomplete": "Keine Sprachen anzeigen, zu denen die Übersetzungen fertiggestellt wurden",
+ "apihelp-query+messagegroupstats-param-suppressempty": "Keine Sprachen anzeigen, zu denen noch keine Übersetzungen fertiggestellt wurden",
+ "apihelp-query+messagegroupstats-example-1": "Liste von Übersetzungs-Vollständigkeits-Statistiken für die Gruppe „page-Example“",
+ "apihelp-query+messagetranslations-description": "Ruft alle Übersetzungen für eine einzelne Nachricht ab.",
+ "apihelp-query+messagetranslations-summary": "Ruft alle Übersetzungen für eine einzelne Nachricht ab.",
+ "apihelp-query+messagetranslations-param-title": "Vollständiger Titel einer bekannten Nachricht.",
+ "apihelp-query+messagetranslations-example-1": "Liste der Übersetzungen im Wiki für „MediaWiki:January“",
+ "apihelp-managemessagegroups-description": "Hinzufügen einer Nachricht als Umbenennung einer vorhandenen Nachricht oder einer neuen Nachricht in der Gruppe während des Imports",
+ "apihelp-managemessagegroups-summary": "Hinzufügen einer Nachricht als Umbenennung einer vorhandenen Nachricht oder einer neuen Nachricht in der Gruppe während des Imports",
+ "apihelp-managemessagegroups-param-groupId": "Gruppen-ID",
+ "apihelp-managemessagegroups-param-operation": "Der auszuführende Vorgang. Mögliche Werte: rename / new",
+ "apihelp-managegroupsynchronizationcache-description": "Verwaltung des Gruppensynchronisations-Caches.",
+ "apihelp-managegroupsynchronizationcache-summary": "Verwaltung des Gruppensynchronisations-Caches.",
+ "apihelp-managegroupsynchronizationcache-param-operation": "Der auszuführende Vorgang. Mögliche Werte: resolve",
+ "apihelp-translatesandbox-description": "Registriert und verwaltet Spielwiesenbenutzer.",
+ "apihelp-translatesandbox-summary": "Registriert und verwaltet Spielwiesen-Benutzer.",
+ "apihelp-translatesandbox-param-do": "Was ist zu tun?",
+ "apihelp-translatesandbox-param-userid": "Kennungen der zu verwaltenden Benutzer. 0 für Erstellungen verwenden.",
+ "apihelp-translatesandbox-param-username": "Benutzername beim Erstellen des Benutzers.",
+ "apihelp-translatesandbox-param-password": "Passwort beim Erstellen des Benutzers.",
+ "apihelp-translatesandbox-param-email": "E-Mail beim Erstellen des Benutzers.",
+ "apihelp-translationaids-description": "Ruft alle Übersetzungshilfen ab.",
+ "apihelp-translationaids-summary": "Ruft alle Übersetzungshilfen ab.",
+ "apihelp-translationaids-param-title": "Vollständiger Titel einer bekannten Nachricht.",
+ "apihelp-translationaids-param-prop": "Die einzuschließenden Übersetzungshelfer.",
+ "apihelp-translationaids-example-1": "Hilfen für [[MediaWiki:January/fi]] anzeigen",
+ "apihelp-translationreview-description": "Markiert Übersetzungen als überprüft.",
+ "apihelp-translationreview-summary": "Markiert Übersetzungen als überprüft.",
+ "apihelp-translationreview-param-revision": "Die zu überprüfende Versionsnummer.",
+ "apihelp-translationreview-example-1": "Überprüft die Version 1",
+ "apihelp-translationstash-description": "Fügt Übersetzungen dem Speicher hinzu.",
+ "apihelp-translationstash-summary": "Fügt Übersetzungen dem Speicher hinzu.",
+ "apihelp-translationstash-param-subaction": "Aktion.",
+ "apihelp-translationstash-param-title": "Titel der Übersetzungseinheitsseite.",
+ "apihelp-translationstash-param-translation": "Übersetzung erstellt vom Benutzer.",
+ "apihelp-translationstash-param-metadata": "JSON-Objekt.",
+ "apihelp-translationstash-example-1": "Fügt eine Übersetzung zum Übersetzungsspeicher für [[MediaWiki:Jan/fi]] hinzu",
+ "apihelp-translationstash-example-2": "Ruft den Speicher ab.",
+ "apihelp-ttmserver-description": "Frage Vorschläge aus den gespeicherten Übersetzungen ab.",
+ "apihelp-ttmserver-summary": "Ruft Vorschläge von den Übersetzungsspeichern ab.",
+ "apihelp-ttmserver-param-service": "Welche der verfügbaren Übersetzungsdienste verwendet werden sollen.",
+ "apihelp-ttmserver-param-sourcelanguage": "Der Sprachcode des Quelltextes.",
+ "apihelp-ttmserver-param-targetlanguage": "Der Sprachcode des Vorschlags.",
+ "apihelp-ttmserver-param-text": "Der Text, für den Vorschläge gefunden werden sollen.",
+ "apihelp-ttmserver-example-1": "Erhalte Vorschläge für die Übersetzung von \"Help\" aus dem Englischen ins Finnische",
+ "apihelp-searchtranslations-description": "Übersetzungen suchen.",
+ "apihelp-searchtranslations-summary": "Sucht nach Übersetzungen.",
+ "apihelp-searchtranslations-param-service": "Welcher der verfügbaren Übersetzungsdienste genutzt werden sollte.",
+ "apihelp-searchtranslations-param-query": "Die Zeichenfolge, nach der gesucht werden soll.",
+ "apihelp-searchtranslations-param-sourcelanguage": "Der Sprachcode des Quelltextes.",
+ "apihelp-searchtranslations-param-language": "Der Sprachcode, in dem die Zeichenfolge gesucht werden soll.",
+ "apihelp-searchtranslations-param-group": "Die Gruppenkennung, in der die Zeichenfolge gesucht werden soll.",
+ "apihelp-searchtranslations-param-filter": "Nachrichtenübersetzungsstatusfilter.",
+ "apihelp-searchtranslations-param-match": "Nach allen Wörtern suchen.",
+ "apihelp-searchtranslations-param-case": "Suche (un)abhängig von Groß- und Kleinschreibung.",
+ "apihelp-searchtranslations-param-offset": "Versatz für die Übersetzungen.",
+ "apihelp-searchtranslations-param-limit": "Größe des Ergebnisses.",
+ "apihelp-searchtranslations-example-1": "Übersetzungen für die Sprache anzeigen.",
+ "apihelp-searchtranslations-example-2": "Zeigt nicht übersetzte Nachrichten an, die der Anfrage in der Quellsprache entsprechen.",
+ "apihelp-translationcheck-summary": "Validiert Übersetzungen.",
+ "apihelp-translationcheck-param-title": "Seitentitel mit Namensraum und Sprachcode.",
+ "apihelp-translationcheck-param-translation": "Die zu validierende Übersetzung.",
+ "apihelp-translationstats-param-start": "Starting date from which to fetch translation statistics. Defaults to current date minus the number of <var>days</var>.",
+ "apihelp-translationstats-example-1": "Anzahl der Bearbeitungen in den letzten 30 Tagen für alle Gruppen und Sprachen abrufen",
+ "apihelp-translationstats-example-2": "Abrufen der Anzahl der Bearbeitungen der letzten 30 Tage, für die Sprachen Englisch und Französisch.",
+ "apierror-translate-duplicateaggregategroup": "Die Nachrichtengruppe ist bereits vorhanden",
+ "apierror-translate-fuzzymessage": "Veraltete Übersetzungen können nicht überprüft werden",
+ "apierror-translate-groupreviewdisabled": "Die Nachrichtengruppenüberprüfung ist nicht in Verwendung.",
+ "apierror-translate-invalidaggregategroup": "Ungültige zusammengefasste Nachrichtengruppe",
+ "apierror-translate-invalidaggregategroupname": "Ungültiger zusammengefasster Nachrichtengruppenname",
+ "apierror-translate-invalidgroup": "Die Gruppe ist nicht vorhanden oder ist ungültig",
+ "apierror-translate-invalidstate": "Der angeforderte Status ist ungültig.",
+ "apierror-translate-invalidlanguage": "Der Sprachcode $1 ist nicht gültig.",
+ "apierror-translate-invalidupdate": "Ungültige Aktualisierung",
+ "apierror-translate-language-disabled": "Übersetzungen nach $1 sind deaktiviert.",
+ "apierror-translate-language-disabled-reason": "Übersetzungen nach $1 sind deaktiviert: $2",
+ "apierror-translate-nodynamicgroups": "Dynamische Nachrichtengruppen werden hier nicht unterstützt",
+ "apierror-translate-nomessagefortitle": "Der Titel entspricht nicht einer übersetzbaren Nachricht",
+ "apierror-translate-notranslationservices": "Es wurden keine öffentlichen Übersetzungsdienste konfiguriert. Der Administrator des Wikis muss <var>$wgTranslateTranslationServices</var> passend festlegen, bevor diese Funktion verwendet werden kann.",
+ "apierror-translate-owntranslation": "Eigene Übersetzungen können nicht überprüft werden",
+ "apierror-translate-sandboxdisabled": "Die Spielwiesenfunktion ist nicht in Verwendung",
+ "apierror-translate-smg-nochanges": "Es gibt keine zu verarbeitenden Änderungen.",
+ "apierror-translate-unknownmessage": "Unbekannte Nachricht",
+ "apierror-translate-invalid-operation": "Ungültige Operation: $1. Gültige Werte - $2.",
+ "apierror-translate-rename-msg-new": "Nur umbenannte Nachrichten können als neue Nachrichten hinzugefügt werden.",
+ "apierror-translate-rename-key-invalid": "Die zur Umbenennung übergebenen Nachrichtenschlüssel wurden in der Liste der Änderungen für die Ausgangssprache nicht gefunden.",
+ "apierror-translate-rename-state-invalid": "Eine der zur Umbenennung übergebenen Nachrichten sollte neu hinzugefügt und die andere gelöscht werden. Aktuelle Zustände - Hinzufügen: $1 und Löschen: $2.",
+ "apiwarn-translate-alreadyreviewedbyyou": "Von dir bereits als überprüft markiert",
+ "apiwarn-translate-language-disabled-source": "Die Quellsprache dieser Nachrichtengruppe ist $1. Bitte wähle eine andere Sprache zur Übersetzung aus.",
+ "apiwarn-translate-language-targetlang-variant-of-source": "<strong>Du übersetzt in <bdi>$1</bdi>.</strong> Es ist eine Variante von <bdi>$2</bdi>, die bereits die Ausgangssprache dieser Nachrichten ist. Stelle sicher, dass die ausgewählte Sprache richtig ist, und berücksichtige die Unterschiede zwischen den Sprachvarianten, um eine gute Übersetzung zu erzielen.",
+ "apierror-translate-operation-error": "Es ist ein Fehler bei der Verarbeitung der Anfrage aufgetreten. Fehler: $1",
+ "apihelp-translationentitysearch-summary": "Suche nach Nachrichtengruppen und Nachrichten",
+ "apihelp-translationentitysearch-param-query": "Suchanfrage",
+ "apihelp-translationentitysearch-param-limit": "Maximale Anzahl der Suchergebnisse"
+}
diff --git a/Translate/i18n/api/diq.json b/Translate/i18n/api/diq.json
new file mode 100644
index 00000000..9e48428d
--- /dev/null
+++ b/Translate/i18n/api/diq.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kumkumuk",
+ "Mirzali"
+ ]
+ },
+ "apihelp-aggregategroups-param-group": "Kamiya Gruba mesacan",
+ "apihelp-aggregategroups-param-groupname": "Namey gruba mesacê aredi.",
+ "apihelp-aggregategroups-param-groupdescription": "Akerdena gruba mesacê aredi",
+ "apihelp-aggregategroups-example-1": "Gruba Verlisansi",
+ "apihelp-groupreview-param-group": "Gruba mesaca.",
+ "apihelp-groupreview-param-language": "Kodê zıwani.",
+ "apihelp-groupreview-param-state": "Qandê gruber dewleta newi.",
+ "apihelp-query+languagestats-description": "Perseya istatistikanê zıwani.",
+ "apihelp-query+languagestats-param-language": "Kodê zıwani.",
+ "apihelp-query+languagestats-example-1": "Lisya temam biyayışê istatistikané açarnayışanê Finki",
+ "apihelp-query+messagecollection-description": "Heqdê MessagesCollection i persi",
+ "apihelp-query+managemessagegroups-param-messageKey": "Kılitê mesaci",
+ "apihelp-query+messagecollection-param-group": "Gruba mesaca.",
+ "apihelp-query+messagecollection-param-language": "Kodê zıwani.",
+ "apihelp-translatesandbox-param-do": "Çıçi.",
+ "apihelp-translationstash-param-subaction": "Kerdış.",
+ "apihelp-translationstash-param-metadata": "JSON çi.",
+ "apihelp-searchtranslations-description": "Açarnayışan cı geyre.",
+ "apihelp-searchtranslations-param-limit": "Ebadê neticeyi.",
+ "apihelp-searchtranslations-example-1": "Qandê zıwani açarnayışan bımocne."
+}
diff --git a/Translate/i18n/api/en.json b/Translate/i18n/api/en.json
new file mode 100644
index 00000000..817546dd
--- /dev/null
+++ b/Translate/i18n/api/en.json
@@ -0,0 +1,175 @@
+{
+ "@metadata": {
+ "authors": [
+ ]
+ },
+ "apihelp-aggregategroups-description": "Manage aggregate message groups.\n\nYou can add and remove aggregate message groups and associate or dissociate message groups from them (one at a time).",
+ "apihelp-aggregategroups-summary": "Manage aggregate message groups.",
+ "apihelp-aggregategroups-extended-description": "You can add and remove aggregate message groups and associate or dissociate message groups from them (one at a time).",
+ "apihelp-aggregategroups-param-do": "What to do with aggregate message group.",
+ "apihelp-aggregategroups-param-aggregategroup": "Aggregate message group ID.",
+ "apihelp-aggregategroups-param-group": "Message group ID.",
+ "apihelp-aggregategroups-param-groupname": "Aggregate message group name.",
+ "apihelp-aggregategroups-param-groupdescription": "Aggregate message group description.",
+ "apihelp-aggregategroups-example-1": "Associate a group",
+ "apihelp-groupreview-description": "Set message group workflow states.",
+ "apihelp-groupreview-summary": "Set message group workflow states.",
+ "apihelp-groupreview-param-group": "Message group.",
+ "apihelp-groupreview-param-language": "Language code.",
+ "apihelp-groupreview-param-state": "The new state for the group.",
+ "apihelp-groupreview-example-1": "Mark the state of the German translation for the message group \"group-Example\" as ready",
+ "apihelp-query+languagestats-description": "Query language stats.",
+ "apihelp-query+languagestats-summary": "Query language stats.",
+ "apihelp-query+languagestats-param-language": "Language code.",
+ "apihelp-query+languagestats-param-group": "Message group ID.",
+ "apihelp-query+languagestats-example-1": "List of translation completion statistics for Finnish",
+ "apihelp-query+languagestats-example-2": "List of translation completion statistics for Finnish for group A",
+ "apihelp-query+messagecollection-description": "Query MessageCollection about translations.",
+ "apihelp-query+managemessagegroups-summary": "Fetch possible renames for a message in a group during imports",
+ "apihelp-query+managemessagegroups-description": "Fetch possible renames for a message in a group during imports",
+ "apihelp-query+managemessagegroups-param-groupId": "Group Id",
+ "apihelp-query+managemessagegroups-param-messageKey": "Message key",
+ "apihelp-query+managemessagegroups-param-changesetName": "Change set name - Default / Unattended / MediaWiki etc.",
+ "apihelp-query+managemessagegroups-example-1": "Fetch possible renames for the given key in the given group.",
+ "apihelp-query+messagecollection-summary": "Query MessageCollection about translations.",
+ "apihelp-query+messagecollection-param-group": "Message group.",
+ "apihelp-query+messagecollection-param-language": "Language code.",
+ "apihelp-query+messagecollection-param-limit": "How many messages to show (after filtering).",
+ "apihelp-query+messagecollection-param-offset": "Integer or key offset for start.",
+ "apihelp-query+messagecollection-param-filter": "Message collection filters. Use <kbd>!</kbd> to negate condition. For example <kbd>!fuzzy</kbd> means list only all non-fuzzy messages. Filters are applied in the order given.\n;fuzzy:Messages with fuzzy tag.\n;optional:Messages which should be translated only if changes are necessary.\n;ignored:Messages which are never translated.\n;hastranslation:Messages which have a translation regardless if it is fuzzy or not.\n;translated:Messages which have a translation which is not fuzzy.\n;changed:Messages which have been translated or changed since last export.\n;reviewer&#58;N:Messages where the user number <kbd>N</kbd> is among reviewers.\n;last-translator&#58;N:Messages where the user number <kbd>N</kbd> is the last translator.",
+ "apihelp-query+messagecollection-param-prop": "Which properties to get:\n;definition:Message definition.\n;translation:Current translation (without $1 string if any, use the tags to check for outdated or broken translations).\n;tags:Message tags, like optional, ignored and fuzzy.\n;properties:Message properties, like status, revision, last-translator. Can vary between messages.\n;revision:<span class=\"deprecated\">Deprecated!</span> Use $2prop=properties.",
+ "apihelp-query+messagecollection-example-1": "List of supported languages",
+ "apihelp-query+messagecollection-example-2": "List of non-optional message definitions for the group \"page-Example\"",
+ "apihelp-query+messagecollection-example-3": "List of optional messages in Finnish with tags for the group \"page-Example\"",
+ "apihelp-query+messagecollection-example-4": "More information about latest translation revisions for the group \"page-Example\"",
+ "apihelp-query+messagegroups-description": "Return information about message groups.\n\nNote that the uselang parameter affects the output of language dependent parts.",
+ "apihelp-query+messagegroups-summary": "Return information about message groups.",
+ "apihelp-query+messagegroups-extended-description": "Note that the uselang parameter affects the output of language dependent parts.",
+ "apihelp-query+messagegroups-param-depth": "When using the tree format, limit the depth to this many levels. Value 0 means that no subgroups are shown. If the limit is reached, the output includes a \"groupcount\" value, which states the number of direct children.",
+ "apihelp-query+messagegroups-param-filter": "Only return messages with IDs that match one or more of the inputs given (case-insensitive, separated by pipes, * wildcard).",
+ "apihelp-query+messagegroups-param-format": "In the tree format message groups can exist in multiple places in the tree.",
+ "apihelp-query+messagegroups-param-iconsize": "Preferred size of rasterised group icon.",
+ "apihelp-query+messagegroups-param-prop": "What translation-related information to get:\n;id:Include ID of the group.\n;label:Include label of the group.\n;description:Include description of the group.\n;class:Include class name of the group.\n;namespace:Include namespace of the group. Not all groups belong to a single namespace.\n;exists:Include self-calculated existence property of the group.\n;icon:Include URLs to icon of the group.\n;priority:Include priority status like discouraged.\n;prioritylangs:Include preferred languages. If not set, this returns false.\n;priorityforce:Include priority status - is the priority languages setting forced.\n;workflowstates:Include the workflow states for the message group.",
+ "apihelp-query+messagegroups-param-root": "When using the tree format, instead of starting from top level start from the given message group, which must be an aggregate message group. When using flat format only the specified group is returned.",
+ "apihelp-query+messagegroups-param-languageFilter": "Only return message groups that can be translated to the given language.",
+ "apihelp-query+messagegroups-example-1": "Show message groups",
+ "apihelp-query+messagegroupstats-description": "Query message group stats.",
+ "apihelp-query+messagegroupstats-summary": "Query message group stats.",
+ "apihelp-query+messagegroupstats-param-group": "Message group ID.",
+ "apihelp-query+messagegroupstats-param-suppresscomplete": "Do not display languages which have completed translation",
+ "apihelp-query+messagegroupstats-param-suppressempty": "Do not display languages which do not have any translations",
+ "apihelp-query+messagegroupstats-example-1": "List of translation completion statistics for the group \"page-Example\"",
+ "apihelp-query+messagetranslations-description": "Query all translations for a single message.",
+ "apihelp-query+messagetranslations-summary": "Query all translations for a single message.",
+ "apihelp-query+messagetranslations-param-title": "Full title of a known message.",
+ "apihelp-query+messagetranslations-example-1": "List of translations in the wiki for \"MediaWiki:January\"",
+ "apihelp-managemessagegroups-description": "Add a message as a rename of an existing message or a new message in the group during imports",
+ "apihelp-managemessagegroups-summary": "Add a message as a rename of an existing message or a new message in the group during imports",
+ "apihelp-managemessagegroups-param-groupId": "Group Id",
+ "apihelp-managemessagegroups-param-renameMessageKey": "Target message key being renamed",
+ "apihelp-managemessagegroups-param-messageKey": "Replacement message key",
+ "apihelp-managemessagegroups-param-operation": "The operation to be performed. Possible values: rename / new",
+ "apihelp-managemessagegroups-param-changesetName": "Change set name - Default / Unattended / MediaWiki etc.",
+ "apihelp-managemessagegroups-param-changesetModified": "Unix timestamp of when the changeset was last modified. If the changeset has been modified after this the API will throw an error.",
+ "apihelp-managegroupsynchronizationcache-description": "Manage group synchronization cache.",
+ "apihelp-managegroupsynchronizationcache-summary": "Manage group synchronization cache.",
+ "apihelp-managegroupsynchronizationcache-param-operation": "The operation to be performed. Possible values: resolve",
+ "apihelp-managegroupsynchronizationcache-param-title": "Message title being marked as resolved",
+ "apihelp-managegroupsynchronizationcache-param-group": "Group Id of the message being resolved",
+ "apihelp-translatesandbox-description": "Signup and manage sandboxed users.",
+ "apihelp-translatesandbox-summary": "Signup and manage sandboxed users.",
+ "apihelp-translatesandbox-param-do": "What to do.",
+ "apihelp-translatesandbox-param-userid": "User IDs of the users being managed. Use 0 for creations.",
+ "apihelp-translatesandbox-param-username": "Username when creating user.",
+ "apihelp-translatesandbox-param-password": "Password when creating user.",
+ "apihelp-translatesandbox-param-email": "Email when creating user.",
+ "apihelp-translationaids-description": "Query all translations aids.",
+ "apihelp-translationaids-summary": "Query all translations aids.",
+ "apihelp-translationaids-param-title": "Full title of a known message.",
+ "apihelp-translationaids-param-group": "Message group the message belongs to. If empty then primary group is used.",
+ "apihelp-translationaids-param-prop": "Which translation helpers to include.",
+ "apihelp-translationaids-example-1": "Show aids for [[MediaWiki:January/fi]]",
+ "apihelp-translationreview-description": "Mark translations reviewed.",
+ "apihelp-translationreview-summary": "Mark translations reviewed.",
+ "apihelp-translationreview-param-revision": "The revision number to review.",
+ "apihelp-translationreview-example-1": "Review revision 1",
+ "apihelp-translationstash-description": "Add translations to stash.",
+ "apihelp-translationstash-summary": "Add translations to stash.",
+ "apihelp-translationstash-param-subaction": "Action.",
+ "apihelp-translationstash-param-title": "Title of the translation unit page.",
+ "apihelp-translationstash-param-translation": "Translation made by the user.",
+ "apihelp-translationstash-param-metadata": "JSON object.",
+ "apihelp-translationstash-param-username": "Optionally the user whose stash to get. Only privileged users can do this.",
+ "apihelp-translationstash-example-1": "Add a translation to the stash for [[MediaWiki:Jan/fi]]",
+ "apihelp-translationstash-example-2": "Query the stash",
+ "apihelp-ttmserver-description": "Query suggestions from translation memories.",
+ "apihelp-ttmserver-summary": "Query suggestions from translation memories.",
+ "apihelp-ttmserver-param-service": "Which of the available translation services to use.",
+ "apihelp-ttmserver-param-sourcelanguage": "The language code of the source text.",
+ "apihelp-ttmserver-param-targetlanguage": "The language code of the suggestion.",
+ "apihelp-ttmserver-param-text": "The text to find suggestions for.",
+ "apihelp-ttmserver-example-1": "Get suggestions for translating \"Help\" from English to Finnish",
+ "apihelp-searchtranslations-description": "Search translations.",
+ "apihelp-searchtranslations-summary": "Search translations.",
+ "apihelp-searchtranslations-param-service": "Which of the available translation services to use.",
+ "apihelp-searchtranslations-param-query": "The string to search for.",
+ "apihelp-searchtranslations-param-sourcelanguage": "The language code of the source text.",
+ "apihelp-searchtranslations-param-language": "The language code to search string for.",
+ "apihelp-searchtranslations-param-group": "The group ID to search string in.",
+ "apihelp-searchtranslations-param-filter": "Message translation status filter.",
+ "apihelp-searchtranslations-param-match": "Match any/all search words.",
+ "apihelp-searchtranslations-param-case": "Case (in)sensitive search.",
+ "apihelp-searchtranslations-param-offset": "Offset for the translations.",
+ "apihelp-searchtranslations-param-limit": "Size of the result.",
+ "apihelp-searchtranslations-example-1": "Show translations for the language.",
+ "apihelp-searchtranslations-example-2": "Show untranslated messages matching the query in the source language.",
+ "apihelp-translationcheck-description": "Validate given translation input against configured message validators.",
+ "apihelp-translationcheck-summary": "Validate translations.",
+ "apihelp-translationcheck-param-title": "Page title with namespace and language code.",
+ "apihelp-translationcheck-param-translation": "The translation to validate.",
+ "apihelp-translationstats-description": "Fetch translation statistics related to translation edits, active translations, new users, translation reviews and reviewers.",
+ "apihelp-translationstats-summary": "Fetch translation statistics",
+ "apihelp-translationstats-param-count": "Type of statistics being requested",
+ "apihelp-translationstats-param-days": "Number of days to fetch statistics for",
+ "apihelp-translationstats-param-group": "List of groups to fetch statistics for.",
+ "apihelp-translationstats-param-language": "List of languages to fetch statistics for.",
+ "apihelp-translationstats-param-scale": "Scale of the translation statistics",
+ "apihelp-translationstats-param-start": "Starting date from which to fetch translation statistics. Defaults to current date minus the number of <var>days</var>.",
+ "apihelp-translationstats-example-1": "Fetch edit count for the last 30 days, for all groups and languages",
+ "apihelp-translationstats-example-2": "Fetch edit count for the last 30 days, for languages English and French.",
+ "apierror-translate-changeset-modified": "The changeset has been modified by another user or process. Your changes cannot be saved as it might override their changes. Please refresh the page to see the latest changes.",
+ "apierror-translate-duplicateaggregategroup": "Message group already exists",
+ "apierror-translate-fuzzymessage": "Cannot review fuzzy translations",
+ "apierror-translate-groupreviewdisabled": "Message group review not in use.",
+ "apierror-translate-invalidaggregategroup": "Invalid aggregate message group",
+ "apierror-translate-invalidaggregategroupname": "Invalid aggregate message group name",
+ "apierror-translate-invalidfilter": "$1",
+ "apierror-translate-invalidgroup": "Group does not exist or invalid",
+ "apierror-translate-invalidstate": "The requested state is invalid.",
+ "apierror-translate-invalidlanguage": "Language code $1 is not valid.",
+ "apierror-translate-invalidupdate": "Invalid update",
+ "apierror-translate-language-disabled": "Translation to $1 is disabled.",
+ "apierror-translate-language-disabled-reason": "Translation to $1 is disabled: $2",
+ "apierror-translate-nodynamicgroups": "Dynamic message groups are not supported here",
+ "apierror-translate-nomessagefortitle": "Title does not correspond to a translatable message",
+ "apierror-translate-notranslationservices": "No public translation services have been configured. The wiki administrator needs to set <var>$wgTranslateTranslationServices</var> appropriately before this feature can be used.",
+ "apierror-translate-owntranslation": "Cannot review own translations",
+ "apierror-translate-sandboxdisabled": "Sandbox feature is not in use",
+ "apierror-translate-sandbox-invalidparam": "$1",
+ "apierror-translate-smg-nochanges": "There are no changes to process.",
+ "apierror-translate-unknownmessage": "Unknown message",
+ "apierror-translate-invalid-changeset-name": "Invalid changeset file name passed - $1",
+ "apierror-translate-invalid-operation": "Invalid operation: $1. Valid values - $2.",
+ "apierror-translate-addition-key-invalid": "Message key passed for addition was not found in the renamed message list for source language.",
+ "apierror-translate-rename-msg-new": "Only renamed messages can be added as new messages.",
+ "apierror-translate-rename-key-invalid": "Message keys passed for rename were not found in the list of changes for the source language.",
+ "apierror-translate-rename-state-invalid": "One of the message passed for rename should be newly added, and the other one deleted. Current states - addition: $1 and deletion: $2.",
+ "apiwarn-translate-alreadyreviewedbyyou": "Already marked as reviewed by you",
+ "apiwarn-translate-language-disabled-source": "The source language of this group is $1. Please select another language to translate into.",
+ "apiwarn-translate-language-targetlang-variant-of-source": "<strong>You are translating into <bdi>$1</bdi>.</strong> It is a variant of <bdi>$2</bdi>, which is already the source language of these messages. Make sure the selected language is correct, and consider the differences across the language variants to provide a good translation.",
+ "apierror-translate-operation-error": "There was an error while processing the request. Error: $1",
+ "apihelp-translationentitysearch-summary": "Search for message groups and messages",
+ "apihelp-translationentitysearch-param-entitytype": "Entity type being queried",
+ "apihelp-translationentitysearch-param-query": "Search query",
+ "apihelp-translationentitysearch-param-limit": "Maximum number of search results"
+}
diff --git a/Translate/i18n/api/eo.json b/Translate/i18n/api/eo.json
new file mode 100644
index 00000000..a08402d0
--- /dev/null
+++ b/Translate/i18n/api/eo.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mirin"
+ ]
+ },
+ "apihelp-aggregategroups-param-group": "Identigilo de mesaĝgrupo.",
+ "apihelp-aggregategroups-example-1": "Asocii grupon",
+ "apihelp-groupreview-param-group": "Mesaĝgrupo.",
+ "apihelp-groupreview-param-language": "Lingvokodo.",
+ "apihelp-groupreview-param-state": "La nova staton de la grupo.",
+ "apihelp-query+languagestats-param-language": "Lingvokodo.",
+ "apihelp-query+messagecollection-param-group": "Mesaĝgrupo.",
+ "apihelp-query+messagecollection-param-language": "Lingvokodo.",
+ "apihelp-query+messagecollection-example-1": "Listo de subtenataj lingvoj",
+ "apihelp-query+messagegroups-param-iconsize": "Preferata grando de bildigita grupa ikono.",
+ "apihelp-query+messagegroups-example-1": "Montri mesaĝgrupojn",
+ "apihelp-query+messagegroupstats-param-group": "Identigilo de mesaĝgrupo.",
+ "apihelp-query+messagetranslations-param-title": "Kompleta titolo de konata mesaĝo.",
+ "apihelp-translatesandbox-param-do": "Kion fari.",
+ "apihelp-translationreview-description": "Marki tradukojn kiel reviziitajn.",
+ "apihelp-translationreview-summary": "Marki tradukojn kiel reviziitajn.",
+ "apihelp-translationstash-param-subaction": "Ago.",
+ "apihelp-translationstash-param-title": "Titolo de la paĝo de traduka unuo.",
+ "apihelp-translationstash-param-translation": "Traduko farita de la uzanto.",
+ "apihelp-translationstash-param-metadata": "JSON-objekto.",
+ "apihelp-searchtranslations-param-limit": "Grando de la rezulto.",
+ "apihelp-searchtranslations-example-1": "Montri tradukojn por la lingvo.",
+ "apierror-translate-invalidupdate": "Ne valida ĝisdatigo",
+ "apierror-translate-unknownmessage": "Nekonata mesaĝo",
+ "apiwarn-translate-alreadyreviewedbyyou": "Jam markita kiel reviziita de vi"
+}
diff --git a/Translate/i18n/api/es.json b/Translate/i18n/api/es.json
new file mode 100644
index 00000000..bbfcd555
--- /dev/null
+++ b/Translate/i18n/api/es.json
@@ -0,0 +1,131 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bruno44101",
+ "Canaan9801",
+ "Csbotero",
+ "Dgstranz",
+ "Fitoschido",
+ "Jakeukalane",
+ "Lemondoge",
+ "Macofe",
+ "MarcoAurelio",
+ "Tiberius1701"
+ ]
+ },
+ "apihelp-aggregategroups-description": "Administrar grupos de mensajes agregados.\n\nPuedes agregar y quitar grupos de mensajes agregados, y asociar o disociar a ellos grupos de mensajes (uno a la vez).",
+ "apihelp-aggregategroups-param-do": "Qué hacer con el grupo de mensajes agregados.",
+ "apihelp-aggregategroups-param-aggregategroup": "Identificador del grupo de mensajes agregado.",
+ "apihelp-aggregategroups-param-group": "Identificador del grupo de mensajes.",
+ "apihelp-aggregategroups-param-groupname": "Nombre del grupo de mensajes agregado.",
+ "apihelp-aggregategroups-param-groupdescription": "Descripción del grupo de mensajes agregado.",
+ "apihelp-aggregategroups-example-1": "Asociar un grupo",
+ "apihelp-groupreview-description": "Establecer los estados de flujo de trabajo de los grupos de mensajes.",
+ "apihelp-groupreview-param-group": "Grupo de mensajes.",
+ "apihelp-groupreview-param-language": "Código de idioma.",
+ "apihelp-groupreview-param-state": "El estado nuevo para el grupo.",
+ "apihelp-groupreview-example-1": "Marcar como leído el estado de la traducción al alemán del grupo de mensajes \"group-Example\"",
+ "apihelp-query+languagestats-description": "Consultar estadísticas de idioma.",
+ "apihelp-query+languagestats-summary": "Consultar las estadísticas del idioma.",
+ "apihelp-query+languagestats-param-language": "Código de idioma.",
+ "apihelp-query+languagestats-example-1": "Lista de estadísticas de traducciones completadas en finés.",
+ "apihelp-query+messagecollection-description": "Consultar a MessageCollection acerca de las traducciones.",
+ "apihelp-query+managemessagegroups-param-groupId": "Identificador de grupo",
+ "apihelp-query+managemessagegroups-param-messageKey": "Clave de mensaje",
+ "apihelp-query+managemessagegroups-example-1": "Mostrar renombramientos posibles para la clave dada en el grupo dado.",
+ "apihelp-query+messagecollection-param-group": "Grupo de mensajes.",
+ "apihelp-query+messagecollection-param-language": "Código de idioma.",
+ "apihelp-query+messagecollection-param-limit": "El número de mensajes que mostrar (después de filtrar).",
+ "apihelp-query+messagecollection-example-1": "Lista de idiomas admitidos",
+ "apihelp-query+messagecollection-example-2": "Lista de definiciones obligatorias de mensajes del grupo \"page-Example\"",
+ "apihelp-query+messagecollection-example-3": "Lista de mensajes opcionales en finlandés con etiquetas para el grupo \"page-Example\"",
+ "apihelp-query+messagecollection-example-4": "Más información acerca de las últimas revisiones de traducción para el grupo \"page-Example\"",
+ "apihelp-query+messagegroups-description": "Devolver información sobre grupos de mensajes.\n\nNota que el parámetro \"uselang\" afecta la salida de las partes dependientes del idioma.",
+ "apihelp-query+messagegroups-param-depth": "Cuando se utiliza el formato de árbol, limitar la profundidad a esta cantidad de niveles. El valor 0 significa que no se muestran subgrupos. Si se alcanza el límite, el resultado incluye un valor de \"cuenta de grupal\", que indica el número de hijos directos.",
+ "apihelp-query+messagegroups-param-root": "Cuando se utiliza el formato de árbol, en lugar de partir de nivel superior empezar desde el mensaje del grupo, que debe ser un agregado de mensaje de grupo. Cuando se utiliza plano formato de sólo el grupo especificado se devuelve.",
+ "apihelp-query+messagegroups-example-1": "Mostrar grupos de mensajes",
+ "apihelp-query+messagegroupstats-description": "Consultar estadísticas del grupo de mensajes.",
+ "apihelp-query+messagegroupstats-summary": "Consultar las estadísticas del grupo de mensajes.",
+ "apihelp-query+messagegroupstats-param-group": "Identificador del grupo de mensajes.",
+ "apihelp-query+messagegroupstats-param-suppressempty": "No mostrar los idiomas que no tienen ninguna traducción",
+ "apihelp-query+messagegroupstats-example-1": "Lista de estadísticas de finalización de traducciones para el grupo \"page-Example\"",
+ "apihelp-query+messagetranslations-description": "Consultar todas las traducciones para un único mensaje.",
+ "apihelp-query+messagetranslations-summary": "Consulta todas las traducciones de un solo mensaje.",
+ "apihelp-query+messagetranslations-param-title": "Título completo de un mensaje conocido.",
+ "apihelp-query+messagetranslations-example-1": "Lista de traducciones en la wiki de \"MediaWiki:January\"",
+ "apihelp-managemessagegroups-param-groupId": "Identificador de grupo",
+ "apihelp-managemessagegroups-param-renameMessageKey": "Se está renombrando la clave de mensaje específica",
+ "apihelp-managemessagegroups-param-messageKey": "Clave de mensaje de reemplazo",
+ "apihelp-managemessagegroups-param-operation": "La operación que se realizará. Valores posibles: rename, new",
+ "apihelp-managemessagegroups-param-changesetModified": "Una marca horaria de la última vez que el conjunto de cambios fue modificado. Si el conjunto de cambios ha sido modificado después, el API mostrará un error.",
+ "apihelp-translatesandbox-description": "Registrar y gestionar usuarios aislados (en \"sandbox\").",
+ "apihelp-translatesandbox-param-do": "Lo que hacer",
+ "apihelp-translatesandbox-param-userid": "Identificadores de los usuarios que se gestionan. Usa 0 para las creaciones.",
+ "apihelp-translatesandbox-param-username": "Nombre de usuario al crear el usuario.",
+ "apihelp-translatesandbox-param-password": "Contraseña al crear el usuario.",
+ "apihelp-translatesandbox-param-email": "Correo electrónico al crear el usuario.",
+ "apihelp-translationaids-description": "Consultar todas las asistencias de traducciones.",
+ "apihelp-translationaids-summary": "Consultar todas las ayudas de traducción.",
+ "apihelp-translationaids-param-title": "Título completo de un mensaje conocido.",
+ "apihelp-translationaids-param-group": "Grupo de mensajes al que pertenece el mensaje. Si está vacío se usa el grupo primario.",
+ "apihelp-translationaids-param-prop": "Cuáles asistentes de traducción incluir.",
+ "apihelp-translationaids-example-1": "Mostrar ayuda para [[MediaWiki:January/fi]]",
+ "apihelp-translationreview-description": "Marcar traducciones como revisadas.",
+ "apihelp-translationreview-summary": "Marcar traducciones como revisadas.",
+ "apihelp-translationreview-param-revision": "El número de revisión que revisar.",
+ "apihelp-translationreview-example-1": "Revisar revisión 1",
+ "apihelp-translationstash-description": "Añadir traducciones al almacén provisional.",
+ "apihelp-translationstash-summary": "Añadir traducciones al almacén provisional.",
+ "apihelp-translationstash-param-subaction": "Acción",
+ "apihelp-translationstash-param-title": "Título de la página de la unidad de traducción.",
+ "apihelp-translationstash-param-translation": "Traducción realizada por el usuario.",
+ "apihelp-translationstash-param-metadata": "Objeto JSON.",
+ "apihelp-translationstash-param-username": "Opcionalmente, el usuario cuyo almacén provisional se debe obtener. Esto solo lo pueden realizar usuarios privilegiados.",
+ "apihelp-translationstash-example-1": "Añadir una traducción al almacén provisional de [[MediaWiki:Jan/fi]]",
+ "apihelp-translationstash-example-2": "Consultar el almacén provisional",
+ "apihelp-ttmserver-description": "Consultar sugerencias de memorias de traducción.",
+ "apihelp-ttmserver-summary": "Consultar sugerencias de memorias de traducción.",
+ "apihelp-ttmserver-param-service": "Qué servicios de traducción disponibles usar.",
+ "apihelp-ttmserver-param-sourcelanguage": "El código de idioma del texto fuente.",
+ "apihelp-ttmserver-param-targetlanguage": "El código de idioma de la sugerencia.",
+ "apihelp-ttmserver-param-text": "El texto para el cual buscar sugerencias.",
+ "apihelp-ttmserver-example-1": "Obtener sugerencias para traducir «Help» del inglés al finés",
+ "apihelp-searchtranslations-description": "Buscar traducciones.",
+ "apihelp-searchtranslations-summary": "Buscar en las traducciones.",
+ "apihelp-searchtranslations-param-service": "Qué servicios de traducción disponibles usar.",
+ "apihelp-searchtranslations-param-query": "La cadena que buscar.",
+ "apihelp-searchtranslations-param-sourcelanguage": "El código de idioma del texto fuente.",
+ "apihelp-searchtranslations-param-language": "Código de idioma para el cual buscar la cadena.",
+ "apihelp-searchtranslations-param-group": "El identificador de grupo en el que buscar la cadena.",
+ "apihelp-searchtranslations-param-filter": "Filtro de estado de traducción de mensajes.",
+ "apihelp-searchtranslations-param-match": "Coincide con cualquier/todas las palabras de búsqueda.",
+ "apihelp-searchtranslations-param-case": "Búsqueda que distingue (o no) el uso de mayúsculas.",
+ "apihelp-searchtranslations-param-offset": "Desfase para las traducciones.",
+ "apihelp-searchtranslations-param-limit": "Tamaño del resultado.",
+ "apihelp-searchtranslations-example-1": "Mostrar las traducciones para el idioma.",
+ "apihelp-searchtranslations-example-2": "Mostrar mensajes sin traducir que coincidan con la consulta en el idioma de origen.",
+ "apihelp-translationcheck-summary": "Validar traducciones.",
+ "apihelp-translationcheck-param-title": "Título de página con espacio de nombres y código de idioma.",
+ "apihelp-translationcheck-param-translation": "La traducción que validar.",
+ "apierror-translate-changeset-modified": "Otro usuario o proceso ha modificado el conjunto de cambios. No puede guardar tus cambios porque puede anular sus cambios. Por favor actualiza la página para ver los últimos cambios.",
+ "apierror-translate-duplicateaggregategroup": "El grupo de mensajes ya existe",
+ "apierror-translate-fuzzymessage": "No se pueden revisar las traducciones imprecisas",
+ "apierror-translate-invalidgroup": "El grupo no existe o no es válido",
+ "apierror-translate-invalidstate": "El estado solicitado no es válido.",
+ "apierror-translate-invalidlanguage": "El idioma solicitado no es válido.",
+ "apierror-translate-invalidupdate": "Actualización no válida",
+ "apierror-translate-language-disabled": "Se ha desactivado la traducción al $1.",
+ "apierror-translate-language-disabled-reason": "Se ha desactivado la traducción al $1: $2",
+ "apierror-translate-nodynamicgroups": "No se admiten aquí los grupos de mensajes dinámicos",
+ "apierror-translate-nomessagefortitle": "El título no se corresponde con un mensaje traducible",
+ "apierror-translate-notranslationservices": "No se ha configurado ningún servicio público de traducciones. Los administradores de la wiki deben configurar <var>$wgTranslateTranslationServices</var> adecuadamente para poder utilizar esta función.",
+ "apierror-translate-owntranslation": "No se pueden revisar las traducciones propias",
+ "apierror-translate-smg-nochanges": "No hay ningún cambio que procesar.",
+ "apierror-translate-unknownmessage": "Mensaje desconocido",
+ "apierror-translate-invalid-changeset-name": "Ha pasado un conjunto de cambios de nombre de archivo no válido - $1",
+ "apiwarn-translate-alreadyreviewedbyyou": "Ya la marcaste como revisada",
+ "apiwarn-translate-language-disabled-source": "El idioma original de este grupo es el $1. Selecciona otro idioma al cual traducir.",
+ "apihelp-translationentitysearch-summary": "Buscar mensajes y grupos de mensajes",
+ "apihelp-translationentitysearch-param-query": "Consulta de búsqueda",
+ "apihelp-translationentitysearch-param-limit": "Número máximo de resultados de búsqueda"
+}
diff --git a/Translate/i18n/api/eu.json b/Translate/i18n/api/eu.json
new file mode 100644
index 00000000..2fc1c108
--- /dev/null
+++ b/Translate/i18n/api/eu.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sator",
+ "Subi"
+ ]
+ },
+ "apihelp-aggregategroups-param-group": "Mezu-taldearen IDa",
+ "apihelp-groupreview-param-language": "Hizkuntza-kodea.",
+ "apihelp-query+languagestats-param-language": "Hizkuntza-kodea.",
+ "apihelp-query+messagecollection-param-language": "Hizkuntza-kodea.",
+ "apihelp-query+messagecollection-example-1": "Onartutako hizkuntzen zerrenda",
+ "apihelp-query+messagegroups-example-1": "Erakutsi mezu-taldeak",
+ "apihelp-translatesandbox-param-do": "Egin beharrekoa.",
+ "apihelp-translationstash-param-subaction": "Ekintza.",
+ "apihelp-translationstash-param-translation": "Erabiltzaileak egindako itzulpena.",
+ "apihelp-translationstash-param-metadata": "JSON objektua.",
+ "apihelp-searchtranslations-description": "Itzulpenak bilatu",
+ "apierror-translate-unknownmessage": "Mezu ezezaguna"
+}
diff --git a/Translate/i18n/api/fa.json b/Translate/i18n/api/fa.json
new file mode 100644
index 00000000..a24befb6
--- /dev/null
+++ b/Translate/i18n/api/fa.json
@@ -0,0 +1,73 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alireza Ivaz",
+ "Beginneruser",
+ "Huji",
+ "Jeeputer",
+ "Ladsgroup",
+ "Reza1615"
+ ]
+ },
+ "apihelp-aggregategroups-description": "مدیریت گروه‌های پیام انبوه.\n\nشما می توانید گروه‌های پیام انبوه را بیفزایید یا حذف کنید یا گروه‌های پیام را به آن‌ها متصل یا جدا کنید (در هر زمان یکی).",
+ "apihelp-aggregategroups-summary": "مدیریت گروه‌های پیام انبوه",
+ "apihelp-aggregategroups-param-do": "با گروه پیام انبوه چه کنیم.",
+ "apihelp-aggregategroups-param-aggregategroup": "شناسهٔ گروه پیام انبوه.",
+ "apihelp-aggregategroups-param-group": "شناسهٔ گروه پیام.",
+ "apihelp-aggregategroups-param-groupname": "نام گروه پیام انبوه.",
+ "apihelp-aggregategroups-param-groupdescription": "توضیحات گروه پیام انبوه.",
+ "apihelp-aggregategroups-example-1": "متصل کردن یک گروه",
+ "apihelp-groupreview-description": "تنظیم وضعیت گردش‌کار گروه پیام.",
+ "apihelp-groupreview-summary": "تنظیم وضعیت‌های گردش‌کار گروه پیام.",
+ "apihelp-groupreview-param-group": "گروه پیام.",
+ "apihelp-groupreview-param-language": "کد زبان.",
+ "apihelp-groupreview-param-state": "وضعیت جدید برای گروه.",
+ "apihelp-query+languagestats-description": "پرسمان آمار زبان.",
+ "apihelp-query+languagestats-summary": "پرسمان آمار زبان.",
+ "apihelp-query+languagestats-param-language": "کد زبان.",
+ "apihelp-query+languagestats-param-group": "شناسهٔ گروه پیام.",
+ "apihelp-query+managemessagegroups-summary": "واکشی تغییرنام‌های ممکن برای یک پیام در یک گروه درطی درون‌ریزی",
+ "apihelp-query+managemessagegroups-param-groupId": "شناسۀ گروه",
+ "apihelp-query+managemessagegroups-param-messageKey": "کلید پیام",
+ "apihelp-query+messagecollection-param-group": "گروه پیام‌.",
+ "apihelp-query+messagecollection-param-language": "کد زبان.",
+ "apihelp-query+messagecollection-param-limit": "شمار پیام‌ها برای نمایش (پس از پالایش).",
+ "apihelp-query+messagecollection-example-1": "فهرست زبان‌های پشتیبانی شده",
+ "apihelp-query+messagegroups-summary": "بازگردانی اطلاعات درباره گروه‌های پیام",
+ "apihelp-query+messagegroups-example-1": "نمایش گروه‌های پیام",
+ "apihelp-query+messagegroupstats-param-group": "شناسهٔ گروه پیام.",
+ "apihelp-query+messagetranslations-param-title": "عنوان کامل یک پیام شناخته شده.",
+ "apihelp-managemessagegroups-param-groupId": "شناسۀ گروه",
+ "apihelp-translatesandbox-param-do": "چه کاری برای انجام دادن هست.",
+ "apihelp-translatesandbox-param-email": "رایانامه هنگام ایجاد حساب",
+ "apihelp-translationaids-param-title": "عنوان کامل پیام‌های شناخته‌شده.",
+ "apihelp-translationaids-param-group": "گروه پیامی که این پیام متعلق به آن است. اگر خالی باشد، گروه اولیه استفاده خواهد شد.",
+ "apihelp-translationreview-description": "علامت‌گذاری ترجمه‌ها به‌عنوان بازبینی‌شده.",
+ "apihelp-translationreview-summary": "علامت‌گذاری ترجمه‌ها به‌عنوان بازبینی‌شده",
+ "apihelp-translationreview-param-revision": "شمارهٔ نسخه برای بازبینی.",
+ "apihelp-translationreview-example-1": "بازبینی نسخه ۱",
+ "apihelp-translationstash-param-subaction": "فعالیت.",
+ "apihelp-translationstash-param-metadata": "شی JSON.",
+ "apihelp-ttmserver-param-sourcelanguage": "کد زبان متن مبدأ",
+ "apihelp-ttmserver-param-targetlanguage": "کد زبان پیشنهاد.",
+ "apihelp-ttmserver-param-text": "متن برای یافتن پیشنهادات",
+ "apihelp-searchtranslations-description": "جستجوی ترجمه‌ها.",
+ "apihelp-searchtranslations-summary": "جستجوی ترجمه‌ها.",
+ "apihelp-searchtranslations-param-query": "رشته برای جستجو.",
+ "apihelp-searchtranslations-param-limit": "اندازۀ نتیجه.",
+ "apihelp-translationcheck-summary": "اعتبارسنجی ترجمه‌ها.",
+ "apihelp-translationcheck-param-translation": "ترجمه‌ برای اعتبارسنجی.",
+ "apierror-translate-duplicateaggregategroup": "گروه پیام پیش از این وجود دارد.",
+ "apierror-translate-invalidgroup": "گروه وجود ندارد یا نامعتبر است.",
+ "apierror-translate-invalidstate": "وضعیت درخواستی نامعتبر است.",
+ "apierror-translate-invalidlanguage": "کد زبان $1 معتبر نیست.",
+ "apierror-translate-invalidupdate": "به‌روزرسانی نامعتبر",
+ "apierror-translate-language-disabled": "ترجمه روی $1 غیرفعال شده‌است.",
+ "apierror-translate-language-disabled-reason": "ترجمه روی $1 غیرفعال شده‌است: $2",
+ "apierror-translate-owntranslation": "نمی‌توانید ترجمه‌های خودتان را بازبینی کنید",
+ "apierror-translate-unknownmessage": "پیام ناشناخته",
+ "apiwarn-translate-alreadyreviewedbyyou": "ازقبل به عنوان بازبینی‌شده توسط شما علامت‌گذاری شده است",
+ "apihelp-translationentitysearch-summary": "جستجوی گروه‌های پیام و پیام‌ها",
+ "apihelp-translationentitysearch-param-query": "پرسمان جستجو",
+ "apihelp-translationentitysearch-param-limit": "حداکثر تعداد نتایج جستجو"
+}
diff --git a/Translate/i18n/api/fi.json b/Translate/i18n/api/fi.json
new file mode 100644
index 00000000..594cc938
--- /dev/null
+++ b/Translate/i18n/api/fi.json
@@ -0,0 +1,62 @@
+{
+ "@metadata": {
+ "authors": [
+ "MITO",
+ "Nike",
+ "Nwme",
+ "Pyscowicz",
+ "Valtlait"
+ ]
+ },
+ "apihelp-aggregategroups-param-group": "Viestiryhmän tunnus.",
+ "apihelp-aggregategroups-param-groupname": "Kokoelmaviestiryhmän nimi.",
+ "apihelp-aggregategroups-param-groupdescription": "Kokoelmaviestiryhmän kuvaus.",
+ "apihelp-aggregategroups-example-1": "Liitä ryhmä",
+ "apihelp-groupreview-description": "Asettaa viestiryhmien työnkulkutilan.",
+ "apihelp-groupreview-param-group": "Viestiryhmä.",
+ "apihelp-groupreview-param-language": "Kielikoodi.",
+ "apihelp-groupreview-param-state": "Viestiryhmän uusi tila.",
+ "apihelp-groupreview-example-1": "Merkitsee saksankielisen käännöksen viestiryhmälle ”group-Example” valmiiksi",
+ "apihelp-query+languagestats-description": "Hakee kielitilastoja.",
+ "apihelp-query+languagestats-param-language": "Kielikoodi.",
+ "apihelp-query+languagestats-example-1": "Luettelo käännösten kattavuustilastoista suomeksi",
+ "apihelp-query+managemessagegroups-param-groupId": "Ryhmätunnus",
+ "apihelp-query+managemessagegroups-param-messageKey": "Viestin avain",
+ "apihelp-query+messagecollection-param-group": "Viestiryhmä.",
+ "apihelp-query+messagecollection-param-language": "Kielikoodi.",
+ "apihelp-query+messagecollection-param-limit": "Kuinka monta viestiä näytetään (suotimien jälkeen).",
+ "apihelp-query+messagecollection-example-1": "Palauttaa luettelon tuetuista kielistä",
+ "apihelp-query+messagegroups-example-1": "Näytä viestiryhmät",
+ "apihelp-query+messagegroupstats-param-group": "Viestiryhmän tunnus.",
+ "apihelp-query+messagegroupstats-param-suppressempty": "Älä näytä kieliä, joilla ei ole käännöksiä",
+ "apihelp-translatesandbox-param-do": "Mitä tehdä.",
+ "apihelp-translatesandbox-param-username": "Käyttäjimi käyttäjää luodessa",
+ "apihelp-translatesandbox-param-password": "Salasana käyttäjää luodessa",
+ "apihelp-translatesandbox-param-email": "Sähköpostiosoite käyttäjää luodessa",
+ "apihelp-translationreview-description": "Merkitse käännökset tarkastetuiksi.",
+ "apihelp-translationstash-param-metadata": "JSON-objekti.",
+ "apihelp-translationstash-param-username": "Käyttäjä, jonka kätkö ladataan. Vain erioikeutetut käyttäjät voivat lukea toisten kätköjä.",
+ "apihelp-ttmserver-param-sourcelanguage": "Lähdetekstin kielikoodi.",
+ "apihelp-ttmserver-param-targetlanguage": "Ehdotuksen kielikoodi.",
+ "apihelp-searchtranslations-description": "Etsi käännöksiä.",
+ "apihelp-searchtranslations-summary": "Hae käännöksiä.",
+ "apihelp-searchtranslations-param-sourcelanguage": "Lähdetekstin kielikoodi.",
+ "apihelp-searchtranslations-param-limit": "Tuloksen koko.",
+ "apihelp-searchtranslations-example-1": "Näytä käännökset kielelle.",
+ "apihelp-translationcheck-summary": "Vahvista käännökset.",
+ "apihelp-translationcheck-param-title": "Sivun otsikko nimiavaruudella ja kielikoodilla.",
+ "apihelp-translationcheck-param-translation": "Vahvistettavat käännökset.",
+ "apierror-translate-duplicateaggregategroup": "Viestiryhmä on jo olemassa",
+ "apierror-translate-invalidgroup": "Ryhmä ei ole olemassa tai se on virheellinen",
+ "apierror-translate-invalidlanguage": "Kielikoodi $1 ei ole kelvollinen.",
+ "apierror-translate-invalidupdate": "Virheellinen päivitys",
+ "apierror-translate-language-disabled": "Kääntäminen kielelle $1 ei ole mahdollista.",
+ "apierror-translate-language-disabled-reason": "Kääntäminen kielelle $1 ei ole mahdollista: $2",
+ "apierror-translate-nodynamicgroups": "Dynaamisiä viestiryhmiä ei tueta täällä",
+ "apierror-translate-nomessagefortitle": "Otsikko ei vastaa käännettävää viestiä",
+ "apierror-translate-owntranslation": "Ei voida tarkistaa omia käännöksiä",
+ "apierror-translate-sandboxdisabled": "Hiekkalaatikko-ominaisuus ei ole käytössä",
+ "apierror-translate-unknownmessage": "Tuntematon viesti",
+ "apiwarn-translate-language-disabled-source": "Tämän ryhmän lähdekieli on $1. Valitse toinen kieli käännöksille.",
+ "apihelp-translationentitysearch-param-limit": "Hakutulosten maksimimäärä"
+}
diff --git a/Translate/i18n/api/fit.json b/Translate/i18n/api/fit.json
new file mode 100644
index 00000000..d4ffd4c7
--- /dev/null
+++ b/Translate/i18n/api/fit.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Pyscowicz"
+ ]
+ },
+ "apierror-translate-nomessagefortitle": "Otsikko ei vastaa käänettävää viestiä"
+}
diff --git a/Translate/i18n/api/fr.json b/Translate/i18n/api/fr.json
new file mode 100644
index 00000000..303f288e
--- /dev/null
+++ b/Translate/i18n/api/fr.json
@@ -0,0 +1,188 @@
+{
+ "@metadata": {
+ "authors": [
+ "ALDO CP",
+ "Derugon",
+ "Djiboun",
+ "DreZhsh",
+ "Eneelk",
+ "Gomoko",
+ "Hpetit",
+ "McDutchie",
+ "Pathe",
+ "Sacamol",
+ "Thibaut120094",
+ "TomT0m",
+ "Urhixidur",
+ "Verdy p",
+ "Wladek92"
+ ]
+ },
+ "apihelp-aggregategroups-description": "Gérer les groupes de messages agrégés.\n\nVous pouvez ajouter et supprimer des groupes de messages agrégés, les associer les uns aux autres ou les dissocier les uns des autres (un à la fois).",
+ "apihelp-aggregategroups-summary": "Gérer des groupes de messages agrégés.",
+ "apihelp-aggregategroups-extended-description": "Vous pouvez ajouter et supprimer des groupes de messages agrégés et leur associer ou dissocier des groupes de messages (un par un).",
+ "apihelp-aggregategroups-param-do": "Que faire avec le groupe de messages agrégés.",
+ "apihelp-aggregategroups-param-aggregategroup": "ID du groupe de messages agrégés.",
+ "apihelp-aggregategroups-param-group": "ID du groupe de messages.",
+ "apihelp-aggregategroups-param-groupname": "Nom du groupe de messages agrégés.",
+ "apihelp-aggregategroups-param-groupdescription": "Description du groupe de messages agrégés.",
+ "apihelp-aggregategroups-example-1": "Associer un groupe",
+ "apihelp-groupreview-description": "Définir les états de transition du groupe de messages.",
+ "apihelp-groupreview-summary": "Définir les états de transition du groupe de messages.",
+ "apihelp-groupreview-param-group": "Groupe de messages.",
+ "apihelp-groupreview-param-language": "Code de langue.",
+ "apihelp-groupreview-param-state": "Le nouvel état pour le groupe.",
+ "apihelp-groupreview-example-1": "Marquer l’état de la traduction allemande du groupe de messages « group-Example » comme prêt",
+ "apihelp-query+languagestats-description": "Demander les statistiques de langue.",
+ "apihelp-query+languagestats-summary": "Demander les statistiques de langue.",
+ "apihelp-query+languagestats-param-language": "Code de langue.",
+ "apihelp-query+languagestats-param-group": "Identifiant du groupe de messages.",
+ "apihelp-query+languagestats-example-1": "Liste de statistiques des traductions terminées pour le finnois",
+ "apihelp-query+languagestats-example-2": "Liste de statistiques des traductions terminées en finnois pour le groupe A",
+ "apihelp-query+messagecollection-description": "Interroger MessageCollection sur les traductions.",
+ "apihelp-query+managemessagegroups-summary": "Récupérer les renommages possibles pour un message dans un groupe durant les importations",
+ "apihelp-query+managemessagegroups-description": "Récupérer les renommages possibles pour un message dans un groupe durant les importations",
+ "apihelp-query+managemessagegroups-param-groupId": "Id du groupe",
+ "apihelp-query+managemessagegroups-param-messageKey": "Clef du message",
+ "apihelp-query+managemessagegroups-param-changesetName": "Modifier le nom de l’ensemble : Défaut / Inattendu / MediaWiki / etc.",
+ "apihelp-query+managemessagegroups-example-1": "Récupérer les renommages possibles pour la clef donnée dans le groupe donné.",
+ "apihelp-query+messagecollection-summary": "Rechercher des traductions dans MessageCollection.",
+ "apihelp-query+messagecollection-param-group": "Groupe de messages.",
+ "apihelp-query+messagecollection-param-language": "Code de langue.",
+ "apihelp-query+messagecollection-param-limit": "Combien de messages à afficher (après filtrage).",
+ "apihelp-query+messagecollection-param-offset": "Entier ou clé de décalage du début.",
+ "apihelp-query+messagecollection-param-filter": "Filtres sur les collections de messages. Utilisez <kbd>!</kbd> pour nier la condition. Par exemple <kbd>!fuzzy</kbd> signifie uniquement la liste de tous les messages non-flous. Les filtres sont appliqués dans l'ordre indiqué.\n; fuzzy\n: messages flous (approximatifs), c.-à-d. avec étiquette fuzzy.\n; optional\n: messages qui ne doivent être traduits que si des changements sont nécessaires.\n; ignored\n: messages qui ne sont jamais traduits.\n; hastranslation\n: messages qui ont une traduction peu importe si elle est floue ou pas.\n; translated\n: messages qui ont une traduction non floue.\n; changed\n: messages qui ont été traduits ou changés depuis la dernière exportation.\n; reviewer&#58;N\n: messages dont l’utilisateur numéro <kbd>N</kbd> est l’un des relecteurs.\n; last-translator&#58;N\n: messages dont l’utilisateur numéro <kbd>N</kbd> est le dernier traducteur.",
+ "apihelp-query+messagecollection-param-prop": "Quelles propriétés obtenir :\n; definition\n: la définition du message.\n; translation\n: la traduction actuelle (sans la chaîne $1 si elle est présente, utiliser les étiquettes pour vérifier les traductions désuètes ou cassées).\n; tags\n: les balises du message, telles que ''optional'' (facultatif), ''ignored'' (ignoré) et ''fuzzy'' (flou).\n; properties\n: les propriétés du message, telles que ''state'' (état), ''revision'' (révision), ''last-translator'' (dernier traducteur). Peut varier suivant les messages.\n; revision\n: <span class=\"deprecated\">Désuet !</span> utiliser $2prop=propriétés.",
+ "apihelp-query+messagecollection-example-1": "Liste des langues prises en charge",
+ "apihelp-query+messagecollection-example-2": "Liste des définitions de messages non facultatifs pour le groupe « page-Example »",
+ "apihelp-query+messagecollection-example-3": "Liste des messages facultatifs en finnois, avec les balises pour le groupe « page-Example »",
+ "apihelp-query+messagecollection-example-4": "Davantage d’informations sur les dernières révisions de traduction pour le groupe « page-Example »",
+ "apihelp-query+messagegroups-description": "Retourne des informations sur les groupes de messages.\n\nNotez que le paramètre <tt>uselang</tt> modifie la sortie des éléments qui dépendent de la langue.",
+ "apihelp-query+messagegroups-summary": "Renvoie des informations concernant les groupes de messages.",
+ "apihelp-query+messagegroups-extended-description": "Soyez conscient que le paramètre « uselang » modifie la sortie des éléments qui dépendent de la langue.",
+ "apihelp-query+messagegroups-param-depth": "Lors de l’utilisation sous forme d’arbre, limiter la profondeur à ces différents niveaux. La valeur 0 signifie qu’aucun des sous-groupes n’est présenté. Si la limite est atteinte, la sortie inclut une valeur « groupcount » qui indique le nombre d’enfants directs.",
+ "apihelp-query+messagegroups-param-filter": "Seuls seront retournés les messages avec un ID correspondant à l’une ou plusieurs des entrées fournies (insensibles à la casse, séparées par des barres verticale (<tt>|</tt>), caractère générique <tt>*</tt>).",
+ "apihelp-query+messagegroups-param-format": "Dans la présentation sous forme d’arbre, les groupes de messages peuvent exister en plusieurs endroits de l’arborescence.",
+ "apihelp-query+messagegroups-param-iconsize": "La taille préférée de l'icône pixelisée du groupe.",
+ "apihelp-query+messagegroups-param-prop": "Quelles informations relatives à la traduction obtenir :\n; id\n: indique l’ID du groupe.\n; label\n: indique l’étiquette du groupe.\n; description\n: indique la description du groupe.\n; class\n: indique le nom de classe du groupe.\n; namespace\n: indique l’espace de noms du groupe. Tous les groupes n’appartiennent pas forcément à un unique espace de noms.\n; exists\n: indique une propriété auto-calculée d’existence du groupe.\n; icon\n: indique des URL vers l’icône du groupe.\n; priority\n: indique l’état de priorité (par ex., 'découragé').\n; prioritylangs\n: indique les langues prioritaires. Si non renseigné, ceci retourne false.\n; priorityforce\n: indique l’état de priorité — les langues prioritaires sont-elles forcées ?\n; workflowstates\n: indique les états du processus pour le groupe de messages.",
+ "apihelp-query+messagegroups-param-root": "En utilisant le format arborescent, partir du groupe de message fourni qui doit être un groupe de messages agrégés, au lieu de démarrer depuis le plus haut niveau. En utilisant le format plat, seul le groupe spécifié est renvoyé.",
+ "apihelp-query+messagegroups-param-languageFilter": "Renvoie uniquement les groupes de messages qui peuvent être traduits dans la langue donnée.",
+ "apihelp-query+messagegroups-example-1": "Affiche les groupes de messages",
+ "apihelp-query+messagegroupstats-description": "Demande de statistiques de groupe de messages.",
+ "apihelp-query+messagegroupstats-summary": "Demander les statistiques des groupes de messages.",
+ "apihelp-query+messagegroupstats-param-group": "Identifiant du groupe de messages.",
+ "apihelp-query+messagegroupstats-param-suppresscomplete": "Ne pas afficher les langues qui ont achevé leur traduction",
+ "apihelp-query+messagegroupstats-param-suppressempty": "Ne pas afficher les langues qui n’ont aucune traduction",
+ "apihelp-query+messagegroupstats-example-1": "Liste des statistiques d’achèvement des traductions pour le groupe « page-Example »",
+ "apihelp-query+messagetranslations-description": "Demande l’ensemble des traductions pour un seul message.",
+ "apihelp-query+messagetranslations-summary": "Recherche toutes les traductions d’un unique message.",
+ "apihelp-query+messagetranslations-param-title": "Titre complet d’un message connu.",
+ "apihelp-query+messagetranslations-example-1": "Liste des traductions du wiki pour «MediaWiki:January»",
+ "apihelp-managemessagegroups-description": "Ajouter un message comme renommage d’un message existant ou un nouveau message dans le groupe durant les importations",
+ "apihelp-managemessagegroups-summary": "Ajouter un message comme renommage d’un message existant ou un nouveau message dans le groupe durant les importations",
+ "apihelp-managemessagegroups-param-groupId": "Id du groupe",
+ "apihelp-managemessagegroups-param-renameMessageKey": "Clef du message cible à renommer",
+ "apihelp-managemessagegroups-param-messageKey": "Clef du message de remplacement",
+ "apihelp-managemessagegroups-param-operation": "L’opération à effectuer. Valeurs possibles : renommer / nouveau",
+ "apihelp-managemessagegroups-param-changesetName": "Modifier le nom de l’ensemble : Défaut / Inattendu / MediaWiki / etc.",
+ "apihelp-managemessagegroups-param-changesetModified": "Horodatage Unix du moment où l’ensemble de modifications a été modifié en dernier. S’il a été modifié après cela, l’API lèvera une erreur.",
+ "apihelp-managegroupsynchronizationcache-description": "Gérer le cache de synchronisation des groupes.",
+ "apihelp-managegroupsynchronizationcache-summary": "Gérer le cache de synchronisation des groupes.",
+ "apihelp-managegroupsynchronizationcache-param-operation": "L’opération à effectuer. Valeurs possibles : résoudre",
+ "apihelp-managegroupsynchronizationcache-param-title": "Titre du message en cours de marquage comme résolu",
+ "apihelp-managegroupsynchronizationcache-param-group": "Identifiant du groupe pour le message en cours de résolution",
+ "apihelp-translatesandbox-description": "Inscrivez-vous et gérez les utilisateurs du bac à sable.",
+ "apihelp-translatesandbox-summary": "Inscrivez-vous et gérez les utilisateurs du bac à sable.",
+ "apihelp-translatesandbox-param-do": "Que faire.",
+ "apihelp-translatesandbox-param-userid": "IDs des utilisateurs gérés. Utiliser 0 pour les créations.",
+ "apihelp-translatesandbox-param-username": "Nom d’utilisateur lors de la création d’un utilisateur.",
+ "apihelp-translatesandbox-param-password": "Mot de passe lors de la création d’un utilisateur.",
+ "apihelp-translatesandbox-param-email": "Courriel lors de la création d’un utilisateur.",
+ "apihelp-translationaids-description": "Recherche toutes les aides à la traduction.",
+ "apihelp-translationaids-summary": "Rechercher toutes les aides à la traduction.",
+ "apihelp-translationaids-param-title": "Titre complet d’un message connu.",
+ "apihelp-translationaids-param-group": "Le groupe de messages auquel appartient le message. S’il est vide, alors le groupe principal est utilisé.",
+ "apihelp-translationaids-param-prop": "Quelles aides à la traduction inclure.",
+ "apihelp-translationaids-example-1": "Afficher les aides pour [[MediaWiki:January/fi]]",
+ "apihelp-translationreview-description": "Marquer les traductions comme relues.",
+ "apihelp-translationreview-summary": "Marquer les traductions relues.",
+ "apihelp-translationreview-param-revision": "Le numéro de révision à relire.",
+ "apihelp-translationreview-example-1": "Relire la révision 1",
+ "apihelp-translationstash-description": "Ajouter des traductions à la réserve.",
+ "apihelp-translationstash-summary": "Mettre des traductions en réserve.",
+ "apihelp-translationstash-param-subaction": "Action.",
+ "apihelp-translationstash-param-title": "Titre de la page d’unité de traduction.",
+ "apihelp-translationstash-param-translation": "Traduction faite par l’utilisateur.",
+ "apihelp-translationstash-param-metadata": "Objet JSON.",
+ "apihelp-translationstash-param-username": "Facultativement, l’utilisateur dont il faut récupérer la réserve. Seuls les utilisateurs privilégiés peuvent faire cela.",
+ "apihelp-translationstash-example-1": "Ajouter une traduction à la réserve pour [[MediaWiki:Jan/fi]]",
+ "apihelp-translationstash-example-2": "Interroger la réserve",
+ "apihelp-ttmserver-description": "Rechercher des suggestions à partir de l’historique des traductions.",
+ "apihelp-ttmserver-summary": "Rechercher des suggestions à partir de l’historique des traductions.",
+ "apihelp-ttmserver-param-service": "Quels services de traduction disponibles utiliser.",
+ "apihelp-ttmserver-param-sourcelanguage": "Le code de langue du texte de la source.",
+ "apihelp-ttmserver-param-targetlanguage": "Le code de langue de la suggestion.",
+ "apihelp-ttmserver-param-text": "Le texte pour lequel on cherche des suggestions.",
+ "apihelp-ttmserver-example-1": "Obtenir des suggestions pour traduire « Help » de l’anglais en finnois",
+ "apihelp-searchtranslations-description": "Rechercher des traductions.",
+ "apihelp-searchtranslations-summary": "Rechercher des traductions.",
+ "apihelp-searchtranslations-param-service": "Quels services de traduction disponibles utiliser.",
+ "apihelp-searchtranslations-param-query": "La chaîne à rechercher.",
+ "apihelp-searchtranslations-param-sourcelanguage": "Le code de langue du texte de la source.",
+ "apihelp-searchtranslations-param-language": "Le code de langue pour lequel rechercher la chaîne.",
+ "apihelp-searchtranslations-param-group": "L’ID de groupe où rechercher la chaîne.",
+ "apihelp-searchtranslations-param-filter": "Filtre d’état de traduction de message.",
+ "apihelp-searchtranslations-param-match": "Correspondance avec n’importe quel ou tous les mots de la recherche.",
+ "apihelp-searchtranslations-param-case": "Recherche insensible/sensible à la casse.",
+ "apihelp-searchtranslations-param-offset": "Décalage pour les traductions.",
+ "apihelp-searchtranslations-param-limit": "Taille du résultat.",
+ "apihelp-searchtranslations-example-1": "Afficher les traductions pour la langue.",
+ "apihelp-searchtranslations-example-2": "Afficher les messages non traduits correspondant à la demande dans la langue source.",
+ "apihelp-translationcheck-description": "Valider la saisie de la traduction fournie d’après les validateurs de message configurés.",
+ "apihelp-translationcheck-summary": "Valider les traductions.",
+ "apihelp-translationcheck-param-title": "Titre de page avec espace de noms et code langue.",
+ "apihelp-translationcheck-param-translation": "La traduction à valider.",
+ "apihelp-translationstats-description": "Récupérer les statistiques de traduction liées aux modifications de traduction, aux traductions actives, aux nouveaux utilisateurs, aux relectures de traductions et aux relecteurs.",
+ "apihelp-translationstats-summary": "Récupérer les statistiques de traduction",
+ "apihelp-translationstats-param-count": "Type de statistiques demandées",
+ "apihelp-translationstats-param-days": "Nombre de jours pour lesquels récupérer les statistiques",
+ "apihelp-translationstats-param-group": "Liste des groupes pour lesquels récupérer les statistiques.",
+ "apihelp-translationstats-param-language": "Liste des langues pour lesquelles récupérer les statistiques.",
+ "apihelp-translationstats-param-scale": "Échelle des statistiques de traduction",
+ "apihelp-translationstats-param-start": "Date à partir de laquelle récupérer les statistiques de traduction. Par défaut, la date courante moins le nombre de jours (<var>days</var>).",
+ "apihelp-translationstats-example-1": "Récupérer le nombre de modifications pour les 30 derniers jours, pour tous les groupes et toutes les langues",
+ "apihelp-translationstats-example-2": "Récupérer les nombres de modification pour les 30 derniers jours, pour les langues anglais et français.",
+ "apierror-translate-changeset-modified": "L’ensemble de modifications a été modifié par un autre utilisateur ou processus. Vos modifications ne peuvent pas être enregistrées car elles pourraient écraser les leurs. Veuille rafraîchir la page pour voir les dernières modifications.",
+ "apierror-translate-duplicateaggregategroup": "Le groupe de messages existe déjà",
+ "apierror-translate-fuzzymessage": "Impossible de relire des traductions floues ou approximatives (''fuzzy'')",
+ "apierror-translate-groupreviewdisabled": "La revue du groupe de message n’est pas utilisée.",
+ "apierror-translate-invalidaggregategroup": "Groupe de messages agrégés non-valide",
+ "apierror-translate-invalidaggregategroupname": "Nom du groupe de messages agrégés non-valide",
+ "apierror-translate-invalidgroup": "Le groupe n’existe pas ou n’est pas valide",
+ "apierror-translate-invalidstate": "L’état demandé n’est pas valide.",
+ "apierror-translate-invalidlanguage": "Le code de langue $1 n’est pas valide.",
+ "apierror-translate-invalidupdate": "Mise à jour non valide",
+ "apierror-translate-language-disabled": "La traduction en $1 est désactivée.",
+ "apierror-translate-language-disabled-reason": "La traduction en $1 est désactivée : $2",
+ "apierror-translate-nodynamicgroups": "Les groupes de messages dynamiques ne sont pas pris en charge ici",
+ "apierror-translate-nomessagefortitle": "Le titre ne correspond pas à un message traductible",
+ "apierror-translate-notranslationservices": "Aucun service de traduction public n’a été configuré. L’administrateur du wiki doit convenablement positionner <var>$wgTranslateTranslationServices</var> avant que cette fonctionnalité puisse être utilisée.",
+ "apierror-translate-owntranslation": "Impossible de relire ses propres traductions",
+ "apierror-translate-sandboxdisabled": "Les fonctions du bac à sable ne sont pas utilisées",
+ "apierror-translate-smg-nochanges": "Il n’y a aucune modification à effectuer.",
+ "apierror-translate-unknownmessage": "Message inconnu",
+ "apierror-translate-invalid-changeset-name": "Nom du fichier d’ensemble de changements passé non valide : $1",
+ "apierror-translate-invalid-operation": "Opération non valide : $1. Valeurs valides : $2.",
+ "apierror-translate-addition-key-invalid": "La clef de message passée pour ajout n’a pas été trouvée dans la liste de message renommée pour la langue source.",
+ "apierror-translate-rename-msg-new": "Seuls les messages renommés peuvent être ajoutés comme nouveaux messages.",
+ "apierror-translate-rename-key-invalid": "Les clefs de message passées pour renommage n’ont pas été trouvées dans la liste des modifications pour la langue source.",
+ "apierror-translate-rename-state-invalid": "Un des messages passés pour renommage devrait être nouvellement ajouté et l’autre supprimé. États actuels – ajout de : $1 et suppression de : $2.",
+ "apiwarn-translate-alreadyreviewedbyyou": "Déjà marqué comme ayant été relu par vous",
+ "apiwarn-translate-language-disabled-source": "La langue source de ce groupe est $1. Veuillez sélectionner une autre langue vers laquelle traduire.",
+ "apiwarn-translate-language-targetlang-variant-of-source": "<strong>Vous traduisez en <bdi>$1</bdi>.</strong> C’est une variante des messages en <bdi> $2</bdi>, qui est déjà la langue source de tels messages. Assurez-vous que la langue sélectionnée est correcte et tenez compte des différences entre les variantes linguistiques pour fournir une bonne traduction.",
+ "apierror-translate-operation-error": "Une erreur est survenue lors du traitement de la requête. Erreur : $1",
+ "apihelp-translationentitysearch-summary": "Rechercher des groupes de message et des messages",
+ "apihelp-translationentitysearch-param-entitytype": "Type d’entité demandé",
+ "apihelp-translationentitysearch-param-query": "Requête de recherche",
+ "apihelp-translationentitysearch-param-limit": "Nombre maximal de résultats de recherche"
+}
diff --git a/Translate/i18n/api/fy.json b/Translate/i18n/api/fy.json
new file mode 100644
index 00000000..964625bc
--- /dev/null
+++ b/Translate/i18n/api/fy.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "PiefPafPier",
+ "Robin van der Vliet",
+ "Robin0van0der0vliet"
+ ]
+ },
+ "apihelp-groupreview-param-group": "Berjochtegroep.",
+ "apihelp-groupreview-param-language": "Taalkoade.",
+ "apihelp-query+languagestats-param-language": "Taalkoade.",
+ "apihelp-query+messagecollection-param-group": "Berjochtegroep.",
+ "apihelp-query+messagecollection-param-language": "Taalkoade.",
+ "apihelp-translationstash-param-subaction": "Hanneling.",
+ "apierror-translate-language-disabled": "Oersetten yn it $1 is útskeakele.",
+ "apierror-translate-language-disabled-reason": "Oersetten yn it $1 is útskeakele: $2",
+ "apiwarn-translate-language-disabled-source": "De boarnetaal fan dizze groep is $1. Kies in oare taal om yn oer te setten."
+}
diff --git a/Translate/i18n/api/gl.json b/Translate/i18n/api/gl.json
new file mode 100644
index 00000000..1349c89c
--- /dev/null
+++ b/Translate/i18n/api/gl.json
@@ -0,0 +1,122 @@
+{
+ "@metadata": {
+ "authors": [
+ "ArenaL5",
+ "Banjo",
+ "Elisardojm",
+ "Iváns",
+ "Maria zaos",
+ "Toliño"
+ ]
+ },
+ "apihelp-aggregategroups-description": "Xestionar grupos de mensaxes agregados.\n\nPode engadir e eliminar grupos de mensaxes agregados, e asociar ou disociar a eles grupos de mensaxes (un de cada vez).",
+ "apihelp-aggregategroups-param-do": "Que facer co grupo de mensaxes agregados.",
+ "apihelp-aggregategroups-param-aggregategroup": "Identificador do grupo de mensaxes agregados.",
+ "apihelp-aggregategroups-param-group": "Identificador do grupo de mensaxes.",
+ "apihelp-aggregategroups-param-groupname": "Nome do grupo de mensaxes agregado.",
+ "apihelp-aggregategroups-param-groupdescription": "Descrición do grupo de mensaxes agregado.",
+ "apihelp-aggregategroups-example-1": "Asociar un grupo",
+ "apihelp-groupreview-description": "Establecer os estados de fluxo de traballo dos grupos de mensaxes.",
+ "apihelp-groupreview-summary": "Establecer os estados de fluxo de traballo dos grupos de mensaxes.",
+ "apihelp-groupreview-param-group": "Grupo de mensaxes.",
+ "apihelp-groupreview-param-language": "Código da lingua.",
+ "apihelp-groupreview-param-state": "Novo estado para o grupo.",
+ "apihelp-groupreview-example-1": "Marcar o estado da tradución alemán do grupo de mensaxes \"grupo-Exemplo\" como listo",
+ "apihelp-query+languagestats-description": "Consultar estatísticas de idioma.",
+ "apihelp-query+languagestats-summary": "Consultar estatísticas de idioma.",
+ "apihelp-query+languagestats-param-language": "Código da lingua.",
+ "apihelp-query+languagestats-example-1": "Lista de estatíticas de traducións completadas en finés.",
+ "apihelp-query+messagecollection-description": "Consultar MessageCollection sobre traducións.",
+ "apihelp-query+messagecollection-summary": "Consultar MessageCollection sobre traducións.",
+ "apihelp-query+messagecollection-param-group": "Grupo de mensaxes.",
+ "apihelp-query+messagecollection-param-language": "Código da lingua.",
+ "apihelp-query+messagecollection-param-limit": "Número de mensaxes a amosar (despois de filtrar).",
+ "apihelp-query+messagecollection-param-offset": "Enteiro ou desprazamento clave para comezar.",
+ "apihelp-query+messagecollection-param-filter": "Filtros de coleccións de mensaxes. Use <kbd>!</kbd> para negar a condición. Por exemplo, <kbd>!fuzzy</kbd> quere dicir que se listen só todas as mensaxes non confusas. Os filtros aplícanse na orde dada.\n;fuzzy:Mensaxes coa etiqueta fuzzy (confuso).\n;optional:Mensaxes que deben ser traducido só se son necesarios cambios.\n;ignored:Mensaxes que nunca son traducidos.\n;hastranslation:Mensaxes que teñen unha tradución sen ter en conta se é confusa ou non.\n;translated:Mensaxes que teñen unha tradución que non é confusa.\n;changed:Mensaxes que foron traducidos ou cambiados desde a última exportación.\n;reviewer&#58;N:Mensaxes onde o número de usuario <kbd>N</kbd> está entre os revisores.\n;last-translator&#58;N:Mensaxes onde o número de usuario <kbd>N</kbd> é o último tradutor.",
+ "apihelp-query+messagecollection-param-prop": "Que propiedades obter:\n;definition:Definición da mensaxe.\n;translation:Tradución actual (sen cadea de texto $1 se hai algunha, usando as etiquetas para marcar traducións anticuadas ou rotas)\n;tags:Etiquetas da mensaxe, como opcional, ignorado e confuso.\n;properties:Propiedades da mensaxe, como estado, revisión, último tradutor. Pode variar entre mensaxes.\n;revision:<span class=\"deprecated\">Obsoleto!</span> Use $2prop=properties.",
+ "apihelp-query+messagecollection-example-1": "Lista de idiomas admitidos",
+ "apihelp-query+messagecollection-example-2": "Lista de definicións de mensaxes obrigatorias do grupo \"page-Example\"",
+ "apihelp-query+messagecollection-example-3": "Lista de mensaxes opcionais en finlandés con etiquetas para o grupo \"page-Example\"",
+ "apihelp-query+messagecollection-example-4": "Máis información acerca das últimas revisións de tradución para o grupo \"page-Example\"",
+ "apihelp-query+messagegroups-description": "Devolver información sobre grupos de mensaxes.\n\nTeña en conta que o parámetro \"uselang\" afecta á saída das partes dependentes do idioma.",
+ "apihelp-query+messagegroups-summary": "Devolver información sobre grupos de mensaxes.",
+ "apihelp-query+messagegroups-param-depth": "Candos se usa o formato en árbore, limitar a profundidade ós seus niveis. O valor 0 indica que non se amosan subgrupos. Se o límite é alcanzado, a saída inclúe un valor \"groupcount\" (conta de grupos) que indica o número de fillos directos.",
+ "apihelp-query+messagegroups-param-filter": "Só devolver mensaxes con identificadores que se correspondan cunha ou máis das entradas indicadas (sen diferenciar maiúsculas e minúsculas, separados por barras verticais, comodín *).",
+ "apihelp-query+messagegroups-param-format": "Nos grupos de mensaxes en forma de árbore poden existir en múltiples lugares na árbore.",
+ "apihelp-query+messagegroups-param-iconsize": "Tamaño preferido da icona de grupo rasterizada.",
+ "apihelp-query+messagegroups-param-prop": "Que información obter sobre a tradución:\n;id:Inclúe o identificador do grupo.\n;label:Inclúe a etiqueta do grupo.\n;description:Inclúe a descrición do grupo.\n;class:Inclúe o nome de clase do grupo.\n;namespace:Inclúe o espazo de nomes do grupo. Non todos os grupos pertencen a un único espazo de nomes.\n;exists:Inclúe a propiedade de existencia auto-calculada do grupo.\n;icon:Inclúe as URLs á icona do grupo.\n;priority:Inclúe o estado de prioridade como discouraged.\n;prioritylangs:Inclúe linguas preferidas. Se non ten valor, devolve falso.\n;priorityforce:Inclúe o estado de prioridade - se a configuración de prioridade de linguas está activo.\n;workflowstates:Inclúe os estados do fluxo de traballo para as mensaxes do grupo.",
+ "apihelp-query+messagegroups-param-root": "Cando se usa o formato en árbore, no canto de comezar dende o nivel superior comezar dende o grupo de mensaxes indicado, que debe ser un grupo de mensaxes agregado. Cando se usa o formato plano só se devolve o grupo especificado.",
+ "apihelp-query+messagegroups-example-1": "Amosar grupos de mensaxes",
+ "apihelp-query+messagegroupstats-description": "Consultar estatísticas do grupo de mensaxes.",
+ "apihelp-query+messagegroupstats-summary": "Consultar estatísticas do grupo de mensaxes.",
+ "apihelp-query+messagegroupstats-param-group": "Identificador do grupo de mensaxes.",
+ "apihelp-query+messagegroupstats-example-1": "Lista de estatísticas de finalización de traducións para o grupo \"páxina-Exemplo\"",
+ "apihelp-query+messagetranslations-description": "Consultar todas as traducións para unha única mensaxe.",
+ "apihelp-query+messagetranslations-summary": "Consultar todas as traducións para unha única mensaxe.",
+ "apihelp-query+messagetranslations-param-title": "Título completo dunha mensaxe coñecida.",
+ "apihelp-query+messagetranslations-example-1": "Lista de traducións na wiki para \"MediaWiki:January\"",
+ "apihelp-translatesandbox-description": "Rexistrar e xestionar usuarios illados (en \"sandbox\").",
+ "apihelp-translatesandbox-summary": "Rexistrar e xestionar usuarios illados (en \"sandbox\").",
+ "apihelp-translatesandbox-param-do": "Que facer.",
+ "apihelp-translatesandbox-param-userid": "Identificadores de usuario dos usuarios a xestionar. Use 0 para creacións.",
+ "apihelp-translatesandbox-param-username": "Nome de usuario ó crear o usuario.",
+ "apihelp-translatesandbox-param-password": "Contrasinal ó crear o usuario.",
+ "apihelp-translatesandbox-param-email": "Correo electrónico ó crear o usuario.",
+ "apihelp-translationaids-description": "Consultar todas as asistencias de traducións.",
+ "apihelp-translationaids-summary": "Consultar todas as asistencias de traducións.",
+ "apihelp-translationaids-param-title": "Título completo dunha mensaxe coñecida.",
+ "apihelp-translationaids-param-group": "Grupo de mensaxes ó que pertence a mensaxe. Se está baleiro úsase o grupo primario.",
+ "apihelp-translationaids-param-prop": "Que asistentes de tradución incluír.",
+ "apihelp-translationaids-example-1": "Amosar axudas para [[MediaWiki:January/fi]]",
+ "apihelp-translationreview-description": "Marcar traducións como revisadas.",
+ "apihelp-translationreview-summary": "Marcar traducións como revisadas.",
+ "apihelp-translationreview-param-revision": "Número de revisión a revisar.",
+ "apihelp-translationreview-example-1": "Revisar revisión 1",
+ "apihelp-translationstash-description": "Engadir traducións á reserva.",
+ "apihelp-translationstash-summary": "Engadir traducións á reserva.",
+ "apihelp-translationstash-param-subaction": "Acción.",
+ "apihelp-translationstash-param-title": "Título da páxina da unidade de tradución.",
+ "apihelp-translationstash-param-translation": "Tradución realizada polo usuario.",
+ "apihelp-translationstash-param-metadata": "Obxecto JSON.",
+ "apihelp-translationstash-param-username": "Opcionalmente a reserva do usuario que coller. Isto só o poden facer usuarios privilexiados.",
+ "apihelp-translationstash-example-1": "Engadir unha tradución á reserva para [[MediaWiki:Jan/fi]]",
+ "apihelp-translationstash-example-2": "Consultar a reserva",
+ "apihelp-ttmserver-description": "Consultar as suxestións da memoria de tradución.",
+ "apihelp-ttmserver-summary": "Consultar as suxestións da memoria de tradución.",
+ "apihelp-ttmserver-param-service": "Que servizos de tradución usar, entre os dispoñibles.",
+ "apihelp-ttmserver-param-sourcelanguage": "O código de lingua do texto fonte.",
+ "apihelp-ttmserver-param-targetlanguage": "O código de lingua da suxestión.",
+ "apihelp-ttmserver-param-text": "Texto para o cal procurar suxestións.",
+ "apihelp-ttmserver-example-1": "Obter suxestións para traducir \"Help\" do inglés ao finés",
+ "apihelp-searchtranslations-description": "Procurar nas traducións.",
+ "apihelp-searchtranslations-summary": "Procurar nas traducións.",
+ "apihelp-searchtranslations-param-service": "O servizo de tradución a utilizar.",
+ "apihelp-searchtranslations-param-query": "A cadea a procurar.",
+ "apihelp-searchtranslations-param-sourcelanguage": "O código de lingua do texto fonte.",
+ "apihelp-searchtranslations-param-language": "O código da lingua na que procurar a cadea.",
+ "apihelp-searchtranslations-param-group": "O identificador do grupo no que procurar a cadea.",
+ "apihelp-searchtranslations-param-filter": "Filtro do estado de tradución das mensaxes.",
+ "apihelp-searchtranslations-param-match": "Coincide con calquera/todas as palabras de procura.",
+ "apihelp-searchtranslations-param-case": "Procura sensible/non sensible a maiúsculas.",
+ "apihelp-searchtranslations-param-offset": "Desprazamento para as traducións.",
+ "apihelp-searchtranslations-param-limit": "Tamaño do resultado.",
+ "apihelp-searchtranslations-example-1": "Amosar as traducións para a lingua.",
+ "apihelp-searchtranslations-example-2": "Amosar as mensaxes non traducidas que coincidan coa pescuda na lingua de orixe.",
+ "apihelp-translationcheck-summary": "Validar traducións.",
+ "apihelp-translationcheck-param-translation": "A tradución a validar.",
+ "apierror-translate-duplicateaggregategroup": "O grupo de mensaxes xa existe",
+ "apierror-translate-groupreviewdisabled": "A revisión do grupo de mensaxes non está en uso.",
+ "apierror-translate-invalidaggregategroup": "Grupo de mensaxes agregadas non válido",
+ "apierror-translate-invalidaggregategroupname": "Nome do grupo de mensaxes agregadas non válido",
+ "apierror-translate-invalidgroup": "O grupo non existe ou non é válido",
+ "apierror-translate-invalidstate": "O estado solicitado non é válido.",
+ "apierror-translate-invalidlanguage": "A lingua solicitada non é válida.",
+ "apierror-translate-invalidupdate": "Actualización non válida",
+ "apierror-translate-language-disabled": "A tradución a $1 está desactivada",
+ "apierror-translate-nodynamicgroups": "Aquí non están admitidos os grupos de mensaxes dinámicas",
+ "apierror-translate-nomessagefortitle": "O título non se corresponde cunha mensaxe traducible",
+ "apierror-translate-owntranslation": "Non pode revisar as súas traducións",
+ "apierror-translate-sandboxdisabled": "A función de zona de probas non está en uso",
+ "apierror-translate-unknownmessage": "Mensaxe descoñecida",
+ "apiwarn-translate-alreadyreviewedbyyou": "Xa marcada como revisada por vostede"
+}
diff --git a/Translate/i18n/api/gu.json b/Translate/i18n/api/gu.json
new file mode 100644
index 00000000..553f884a
--- /dev/null
+++ b/Translate/i18n/api/gu.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "NehalDaveND"
+ ]
+ },
+ "apihelp-query+messagecollection-param-group": "સંદેશ જૂથો",
+ "apihelp-query+messagecollection-param-language": "ભાષાસંહિતા:",
+ "apihelp-translatesandbox-param-do": "શું કરવું.",
+ "apihelp-translationstash-param-subaction": "ક્રિયા"
+}
diff --git a/Translate/i18n/api/he.json b/Translate/i18n/api/he.json
new file mode 100644
index 00000000..c5ca98c2
--- /dev/null
+++ b/Translate/i18n/api/he.json
@@ -0,0 +1,176 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "Guycn2",
+ "המקיסט"
+ ]
+ },
+ "apihelp-aggregategroups-description": "ניהול קבוצות הודעות משולבות.\n\nאפשר להוסיף ולהסיר קבוצות משולבות ולשייך אליהן קבוצות הודעות או להסיר אותן (אחת‏־אחת).",
+ "apihelp-aggregategroups-summary": "ניהול קבוצות הודעות משולבות.",
+ "apihelp-aggregategroups-extended-description": "באפשרותך להוסיף ולהסיר הודעות בקבוצות משולבות. בנוסף, ניתן לשייך הודעות לקבוצות אלו או לבטל שיוך של הודעות אליהן (הודעה אחת בכל פעם).",
+ "apihelp-aggregategroups-param-do": "מה לעשות עם קבוצות ההודעות המשולבת.",
+ "apihelp-aggregategroups-param-aggregategroup": "מזהה קבוצת ההודעות המשולבת.",
+ "apihelp-aggregategroups-param-group": "מזהה קבוצת הודעות.",
+ "apihelp-aggregategroups-param-groupname": "שם קבוצת ההודעות המשולבת.",
+ "apihelp-aggregategroups-param-groupdescription": "תיאור קבוצת ההודעות המשולבת.",
+ "apihelp-aggregategroups-example-1": "שיוך קבוצה",
+ "apihelp-groupreview-description": "הגדרת מצבי זרימת עבודה של קבוצת הודעות.",
+ "apihelp-groupreview-summary": "הגדרת מצבי זרימת עבודה של קבוצת הודעות.",
+ "apihelp-groupreview-param-group": "קבוצת הודעות.",
+ "apihelp-groupreview-param-language": "קוד השפה.",
+ "apihelp-groupreview-param-state": "המצב החדש עבור הקבוצה.",
+ "apihelp-groupreview-example-1": "לסמן את המצב של התרגום לגרמנית של קבוצת ההודעות \"group-Example\" כמוכן",
+ "apihelp-query+languagestats-description": "לעשות שאילתה על סטטיסטיקות של שפה.",
+ "apihelp-query+languagestats-summary": "ביצוע שאילתה על סטטיסטיקות של שפה.",
+ "apihelp-query+languagestats-param-language": "קוד השפה.",
+ "apihelp-query+languagestats-param-group": "מזהה קבוצת הודעות.",
+ "apihelp-query+languagestats-example-1": "רשימת סטטיסטיקות השלמות תרגומים עבור פינית",
+ "apihelp-query+languagestats-example-2": "רשימת הסטטיסטיקה של השלמת תרגום לפינית עבור הקבוצה A",
+ "apihelp-query+messagecollection-description": "לעשות שאילתה ל־MessageCollection על תרגומים.",
+ "apihelp-query+managemessagegroups-summary": "אחזור שינויי שם אפשריים עבור הודעה בקבוצה בעת פעולות יבוא",
+ "apihelp-query+managemessagegroups-description": "אחזור שינויי שם אפשריים עבור הודעה בקבוצה בעת פעולות יבוא",
+ "apihelp-query+managemessagegroups-param-groupId": "מזהה קבוצה",
+ "apihelp-query+managemessagegroups-param-messageKey": "מפתח הודעה",
+ "apihelp-query+managemessagegroups-param-changesetName": "שינוי שם הערכה – ברירת מחדל / בלתי־מפוקח / מדיה־ויקי וכו'",
+ "apihelp-query+managemessagegroups-example-1": "אחזור שינויי שם אפשררים עבור המפתח הנתון בקבוצה הנתונה.",
+ "apihelp-query+messagecollection-summary": "שאילתה של MessageCollection על תרגומים.",
+ "apihelp-query+messagecollection-param-group": "קבוצת הודעות.",
+ "apihelp-query+messagecollection-param-language": "קוד השפה.",
+ "apihelp-query+messagecollection-param-limit": "כמה הודעות להציג (אחרי סינון).",
+ "apihelp-query+messagecollection-param-offset": "מספר שלם או היסט מפתח להתחלה.",
+ "apihelp-query+messagecollection-param-filter": "מסנני אוסף הודעות. יש להשתמש ב־<kbd>!</kbd> כדי לשלול תנאי. למשל, <kbd dir=\"ltr\">!fuzzy</kbd> אומר להביא רשימה רק של הודעות לא פסולות. המסננים מוּחלים לפי הסדר שבו נכתבו.\n;fuzzy:הודעות עם תג fuzzy (פסולות).\n;optional:הודעות שצריך לתרגם רק אם דרוש בהם שינוי.\n;ignored:הודעות שלעולם אין צורך לתרגם.\n;hastranslation:הודעות שיש להן תרגום, אם הוא פסול ואם לא.\n;translated:הודעות שיש להן תרגום שאינו פסול.\n;changed:הודעות שתורגמו או שונו מאז היצוא האחרון.\n;reviewer&#58;N:הודעות שבהן משתמש מספר <kbd>N</kbd> הוא אחד מהסוקרים.\n;last-translator&#58;N:הודעות שבהן משתמש מספר <kbd>N</kbd> הוא המתרגם האחרון.",
+ "apihelp-query+messagecollection-param-prop": "אילו מאפיינים לקבל:\n;definition:הגדרת ההודעה.\n;translation:התרגום הנוכחי (ללא מחרוזת $1 אם יש כזאת, להשתמש בתגים כדי לבדוק תרגומים מיושנים או מקולקלים).\n;tags:תגי הודעה, כמו optional‏, ignored ו־fuzzy.\n;properties:מאפייני הודעה, כמו status‏, revision‏, last-translator. יכול להיות שונה בהודעות שונות.\n;revision:<span class=\"deprecated\">מיושן!</span> השתמשו ב־$2prop=properties.",
+ "apihelp-query+messagecollection-example-1": "רשימת שפות נתמכות",
+ "apihelp-query+messagecollection-example-2": "רשימת הגדרות הודעות לא אופציונליות עבור הקבוצה \"page-Example\"",
+ "apihelp-query+messagecollection-example-3": "רשימת הודעות אופציונליות בפינית עם תגים עבור הקבוצה \"page-Example\"",
+ "apihelp-query+messagecollection-example-4": "יותר מידע על סקירות התרגום האחרונות עבור הקבוצה \"page-Example\"",
+ "apihelp-query+messagegroups-description": "החזרת מידע על קבוצות הודעות.\n\nשימו לב שהפרמטר uselang משפיע על הפלט של החלקים שתלויים בשפה.",
+ "apihelp-query+messagegroups-summary": "החזרת מידע על קבוצות של הודעות.",
+ "apihelp-query+messagegroups-extended-description": "יש לשים לב לכך שהפרמטר uselang משפיע על הפלט של החלקים התלויים בשפה.",
+ "apihelp-query+messagegroups-param-depth": "בעת שימוש בתסדיר עץ, להגביל את העומק למספר כזה של רמות. ערך 0 אומר שלא תוצג שום תת־קבוצה. כשמושגת ההגבלה, הפלט כולל ערך \"groupcount\", שמציין את מספר הילדים הישיר.",
+ "apihelp-query+messagegroups-param-filter": "להחזיר רק הודעות עם מזים שמתאימים לאחד מהקלטים שניתנו (אינו תלוי־רישיות, מופרד בתווי '|', תו־כול *).",
+ "apihelp-query+messagegroups-param-format": "בתסדיר עץ קבוצות הודעות יכולות להתקיים במקומות מרובים בעץ.",
+ "apihelp-query+messagegroups-param-iconsize": "גודל מועדף של סמל קבוצה רשתי.",
+ "apihelp-query+messagegroups-param-prop": "איזה מידע על תרגום לקבל:\n;id:לכלול את המזהה של הקבוצה.\n;label:לכלול את התווית של הקבוצה.\n;description:לכלול את התיאור של הקבוצה.\n;class:לכלול את שם המחלקה של הקבוצה.\n;namespace:לכלול את מרחב השם של הקבוצה. לא כל הקבוצות שייכות למרחב שם אחד.\n;exists:לכלול את מאפיים הקיום המחושב עצמית של הקבוצה.\n;icon:לכלול את ה־URL־ים לסמל של הקבוצה.\n;priority:לכלול מצב עדיפות, כמו \"לא מומלץ\".\n;prioritylangs:לכלול שפות מועדפות. אם זה לא מוגדר, יוחזר false.\n;priorityforce:לכלול מצב עדיפות – האם השפות המועדפות כפויות.\n;workflowstates:לכלול את מצבי זרימת העבודה עבור קבוצת ההודעות.",
+ "apihelp-query+messagegroups-param-root": "בעת שימוש בתסדיר עץ, במקום להתחיל מהרמה העליונה, להתחיל מקבוצת ההודעות הנתונה, שצריכה להיות קבוצת הודעות משולבת. בעת שימוש בתסדיר שטוח רק הקבוצה שצוינה תוחזר.",
+ "apihelp-query+messagegroups-param-languageFilter": "להחזיר רק קבוצות הודעות שאפשר לתרגם לשפה הנתונה.",
+ "apihelp-query+messagegroups-example-1": "להציג קבוצות הודעות",
+ "apihelp-query+messagegroupstats-description": "לעשות שאילתה של סטטיסטיקת קבוצת הודעות.",
+ "apihelp-query+messagegroupstats-summary": "לבצע שאילתה על סטטיסטיקות של קבוצת הודעות.",
+ "apihelp-query+messagegroupstats-param-group": "מזהה קבוצת הודעות.",
+ "apihelp-query+messagegroupstats-param-suppresscomplete": "לא להציג שפות עם תרגום מלא",
+ "apihelp-query+messagegroupstats-param-suppressempty": "לא להציג שפות ללא שום תרגום",
+ "apihelp-query+messagegroupstats-example-1": "רשימה של סטטיסטיקת השלמת תרגומים עבור הקבוצה \"page-Example\"",
+ "apihelp-query+messagetranslations-description": "שאילתה של כל התרגומים של הודעה אחת.",
+ "apihelp-query+messagetranslations-summary": "שאילתה על כל התרגומים של הודעה אחת.",
+ "apihelp-query+messagetranslations-param-title": "כותרת שלמה של הודעה ידועה.",
+ "apihelp-query+messagetranslations-example-1": "רשימת תרגומים בוויקי עבור \"MediaWiki:January\"",
+ "apihelp-managemessagegroups-description": "הוספת הודעה בתור שינוי שם של הודעה קיימת או של הודעה חדשה בקבוצה בעת פעולות יבוא",
+ "apihelp-managemessagegroups-summary": "הוספת הודעה בתור שינוי שם של הודעה קיימת או של הודעה חדשה בקבוצה בעת פעולות יבוא",
+ "apihelp-managemessagegroups-param-groupId": "מזהה קבוצה",
+ "apihelp-managemessagegroups-param-renameMessageKey": "מפתח הודעת היעד ששמה משתנה",
+ "apihelp-managemessagegroups-param-messageKey": "מפתח ההודעה המחליפה",
+ "apihelp-managemessagegroups-param-operation": "איזו פעולה לבצע. ערכים אפשריים: rename / new",
+ "apihelp-managemessagegroups-param-changesetName": "שינוי שם הערכה – ברירת מחדל / בלתי־מפוקח / מדיה־ויקי וכו'",
+ "apihelp-managemessagegroups-param-changesetModified": "חותם־זמן של יוניקס של מתי ערכת השינויים שונתה בפעם האחרונה. אם ערכת השינויים שונתה אחרי זה, ה־API יזרוק שגיאה.",
+ "apihelp-managegroupsynchronizationcache-description": "ניהול מטמון סנכרון קבוצות.",
+ "apihelp-managegroupsynchronizationcache-summary": "ניהול מטמון סנכרון קבוצות.",
+ "apihelp-managegroupsynchronizationcache-param-operation": "איזו פעולה לבצע. ערכים אפשריים: resolve",
+ "apihelp-managegroupsynchronizationcache-param-title": "כותרת ההודעה שמוסמנת בתור פתורה",
+ "apihelp-managegroupsynchronizationcache-param-group": "מזהה הקבוצה של ההודעה שמסומנת בתור פתורה",
+ "apihelp-translatesandbox-description": "רישום וניהול משתמשים בארגז חול.",
+ "apihelp-translatesandbox-summary": "רישום וניהול משתמשים בארגז חול.",
+ "apihelp-translatesandbox-param-do": "מה לעשות.",
+ "apihelp-translatesandbox-param-userid": "מזהי משתמשים של המשתמשים המנוהלים. יש להשתם ב־0 בשביל יצירה.",
+ "apihelp-translatesandbox-param-username": "שם משתמש בעת יצירת משתמש.",
+ "apihelp-translatesandbox-param-password": "סיסמה בעת יצירת משתמש.",
+ "apihelp-translatesandbox-param-email": "דואל אלקטרוני בעת יצירת משתמש.",
+ "apihelp-translationaids-description": "שאילתה על כל עזרי התרגום.",
+ "apihelp-translationaids-summary": "שאילתה על כל עזרי התרגום.",
+ "apihelp-translationaids-param-title": "כותרת מלאה של הודעה ידועה.",
+ "apihelp-translationaids-param-group": "לאיזו קבוצת הודעות ההודעה שייכת. אם זה ריק, תשמש הקבוצה הראשית.",
+ "apihelp-translationaids-param-prop": "אילו עזרי תרגום לכלול.",
+ "apihelp-translationaids-example-1": "הצגת עזרים עבור [[MediaWiki:January/fi]]",
+ "apihelp-translationreview-description": "סימון תרגומים בתור נסקרים.",
+ "apihelp-translationreview-summary": "סימון תרגומים בתור נסקרים.",
+ "apihelp-translationreview-param-revision": "מספר הגרסה לסקירה.",
+ "apihelp-translationreview-example-1": "סקירת גרסה 1",
+ "apihelp-translationstash-description": "הוספת תרגומים למחסן.",
+ "apihelp-translationstash-summary": "הוספת תרגומים למחסן.",
+ "apihelp-translationstash-param-subaction": "פעולה.",
+ "apihelp-translationstash-param-title": "כותרת דף יחידת התרגום.",
+ "apihelp-translationstash-param-translation": "תרגומים שעשה המשתמש.",
+ "apihelp-translationstash-param-metadata": "עצם JSON.",
+ "apihelp-translationstash-param-username": "לא חובה - המשתמש שיתקבל המחסן שלו. רק בעלי הרשאות יכולים לעשות את זה.",
+ "apihelp-translationstash-example-1": "הוספת למחסן של התרגום של [[MediaWiki:Jan/fi]].",
+ "apihelp-translationstash-example-2": "שאילתה למחסן",
+ "apihelp-ttmserver-description": "שאילתת הצעות מזיכרון תרגום.",
+ "apihelp-ttmserver-summary": "שאילתה על הצעות מזיכרון התרגום.",
+ "apihelp-ttmserver-param-service": "באיזה משירותי התרגום הזמינים להשתמש.",
+ "apihelp-ttmserver-param-sourcelanguage": "קוד השפה של טקסט המקור.",
+ "apihelp-ttmserver-param-targetlanguage": "קוד השפה של ההצעה.",
+ "apihelp-ttmserver-param-text": "עבור איזה טקסט למצוא הצעות.",
+ "apihelp-ttmserver-example-1": "קבלת הצעות לתרגום המחרוזת \"Help\" מאנגלית לפינית",
+ "apihelp-searchtranslations-description": "חיפוש תרגומים.",
+ "apihelp-searchtranslations-summary": "חפש תרגומים",
+ "apihelp-searchtranslations-param-service": "באילו משירותי התרגום הזמינים להשתמש.",
+ "apihelp-searchtranslations-param-query": "איזו מחרוזת לחפש.",
+ "apihelp-searchtranslations-param-sourcelanguage": "קוד השפה של טקסט המקור.",
+ "apihelp-searchtranslations-param-language": "קוד השפה לחיפוש מחרוזת.",
+ "apihelp-searchtranslations-param-group": "מזהה הקבוצה שבה צריך לחפש מחרוזת.",
+ "apihelp-searchtranslations-param-filter": "מסנן מצב תרגום הודעה.",
+ "apihelp-searchtranslations-param-match": "להתאים מילים כלשהם או את כל המילים.",
+ "apihelp-searchtranslations-param-case": "חיפוש תלוי־רישיות או לאו.",
+ "apihelp-searchtranslations-param-offset": "היסט לתרגומים.",
+ "apihelp-searchtranslations-param-limit": "גודל התוצאה.",
+ "apihelp-searchtranslations-example-1": "הצגת תרגומים בשפה.",
+ "apihelp-searchtranslations-example-2": "הצגת הודעות לא מתורגמות שמתאימות לשאילתה בשפת המקור.",
+ "apihelp-translationcheck-description": "בדיקת תרגום נתון מול בודקי תקינות ההודעות המוגדרים.",
+ "apihelp-translationcheck-summary": "אימות תרגומים.",
+ "apihelp-translationcheck-param-title": "שם הדף עם מרחב השם וקוד השפה.",
+ "apihelp-translationcheck-param-translation": "התרגום שיאומת.",
+ "apihelp-translationstats-description": "אחזור סטטיסטיקות תרגום שקשורות לעריכת תרגומים, תרגומים פעילים, משתמשים חדשים, סקירות תרגומים, וסוקרים.",
+ "apihelp-translationstats-summary": "אחזור סטטיסטיקת תרגום",
+ "apihelp-translationstats-param-count": "סוג הסטטיסטיקה המבוקשת",
+ "apihelp-translationstats-param-days": "מספר הימים שצריך לאחזר סטטיסטיקה עבורם",
+ "apihelp-translationstats-param-group": "רשימת הקבוצות שצריך לאחזר סטטיסטיקה עבורן.",
+ "apihelp-translationstats-param-language": "רשימת השפות שצריך לאחזר סטטיסטיקה עבורן.",
+ "apihelp-translationstats-param-scale": "סדר הגודל של סטטיסטיקות התרגום",
+ "apihelp-translationstats-param-start": "תאריך ההתחלה שאחזור סטטיסטיקות התרגום יתחיל ממנו. ברירת המחדל היא התאריך הנוכחי מינוס מספר ה־<var>days</var>.",
+ "apihelp-translationstats-example-1": "אחזור מניין העריכות עבור 30 הימים האחרונים, עבור כל הקבוצות והשפות",
+ "apihelp-translationstats-example-2": "אחזור מניין העריכות עבור 30 הימים האחרונים, עבור אנגלית וצרפתית.",
+ "apierror-translate-changeset-modified": "ערכת השינויים שונתה על־ידי משתמש או תהליך אחר. אי־אפשר לשמור את השינויים שלך כי הם יכולים לדרוס את השינויים שלהם. נא לרענן את הדף כדי לראות את השינויים האחרונים.",
+ "apierror-translate-duplicateaggregategroup": "קבוצת ההודעות כבר קיימת",
+ "apierror-translate-fuzzymessage": "לא ניתן לסקור תרגומים שאינם מעודכנים",
+ "apierror-translate-groupreviewdisabled": "סקירת קבוצת ההודעות אינה בשימוש.",
+ "apierror-translate-invalidaggregategroup": "קבוצת הודעות משולבת בלתי־תקינה",
+ "apierror-translate-invalidaggregategroupname": "שם קבוצת הודעות משולבת בלתי־תקין",
+ "apierror-translate-invalidgroup": "הקבוצה אינה קיימת או בלתי־תקינה",
+ "apierror-translate-invalidstate": "השם המבוקש אינו תקין.",
+ "apierror-translate-invalidlanguage": "קוד השפה $1 אינו תקין.",
+ "apierror-translate-invalidupdate": "עדכון בלתי־תקין",
+ "apierror-translate-language-disabled": "התרגום לשפה $1 מבוטל.",
+ "apierror-translate-language-disabled-reason": "התרגום לשפה $1 מבוטל: $2",
+ "apierror-translate-nodynamicgroups": "קבוצת הודעות דינמיות אינן נתמכות כאן",
+ "apierror-translate-nomessagefortitle": "הכותרת אינה מתאימה לשום לתרגום",
+ "apierror-translate-notranslationservices": "לא הוגדרו שירותי תרגום ציבוריים. מנהל אתר הוויקי צריך להגדיר את <var dir=\"ltr\">$wgTranslateTranslationServices</var> באופן תקין כדי שניתן יהיה להשתמש בתכונה זו.",
+ "apierror-translate-owntranslation": "לא ניתן לסקור את ההודעות של עצמך",
+ "apierror-translate-sandboxdisabled": "ארגז החול אינו בשימוש",
+ "apierror-translate-smg-nochanges": "אין עוד שינויים שצריך לעבד.",
+ "apierror-translate-unknownmessage": "הודעה בלתי־ידועה",
+ "apierror-translate-invalid-changeset-name": "הועבר שם ערכת שינויים בלתי־תקין – $1",
+ "apierror-translate-invalid-operation": "פעולה בלתי־תקינה: $1. ערכים תקינים – $2.",
+ "apierror-translate-addition-key-invalid": "מפתח ההודעה שהועבר להוספה לא נמצא ברשימת ההודעות ששמן שוּנה עבור שפת המקור.",
+ "apierror-translate-rename-msg-new": "אפשר להוסיף רק הודעות ששמן שוּנה בתור הודעת חדשות.",
+ "apierror-translate-rename-key-invalid": "מפתח ההודעה שהועבר לשינוי שם לא נמצאו ברשימת השינויים עבור שפת המקור.",
+ "apierror-translate-rename-state-invalid": "אחת מההודעות שהועברו לשינוי שם אמורה להתווסף מחדש, והאחרת צריכה להימחק. מצבים נוכחיים – הוספה: $1 ומחיקה: $2.",
+ "apiwarn-translate-alreadyreviewedbyyou": "כבר סומנה בתור הודעה הודעה שנסקרה על־ידיך",
+ "apiwarn-translate-language-disabled-source": "שפת המקור של הקבוצה הזאת היא $1. נא לבחור שפה אחרת לתרגום.",
+ "apiwarn-translate-language-targetlang-variant-of-source": "<strong>ניסית לתרגם לשפה <bdi>$1</bdi>.</strong> זהו הגוון של השפה <bdi>$2</bdi>, שהיא כבר שפת המקור של ההודעות האלו. נא לוודא שהשפה שנבחרה נכונה, ולשקול את ההבדלים בין הגווני השפה כדי לספק תרגום טוב.",
+ "apierror-translate-operation-error": "אירעה שגיאה בעת עיבוד הבקשה. שגיאה: $1",
+ "apihelp-translationentitysearch-summary": "חיפוש קבוצות הודעות והודעות",
+ "apihelp-translationentitysearch-param-entitytype": "סוג הישות שהשאילתה מתייחסת אליה",
+ "apihelp-translationentitysearch-param-query": "שאילתת חיפוש",
+ "apihelp-translationentitysearch-param-limit": "מספר מרבי של תוצאות חיפוש"
+}
diff --git a/Translate/i18n/api/hi.json b/Translate/i18n/api/hi.json
new file mode 100644
index 00000000..c561ed20
--- /dev/null
+++ b/Translate/i18n/api/hi.json
@@ -0,0 +1,177 @@
+{
+ "@metadata": {
+ "authors": [
+ "Abijeet Patro",
+ "NehalDaveND",
+ "Saurmandal",
+ "Sfic",
+ "ThisIsACreeper0101"
+ ]
+ },
+ "apihelp-aggregategroups-description": "स्थायी संदेश समूहों को प्रबंधित करें।\n\nआप स्थायी संदेश समूह जोड़ या हटा सकते हैं और उनसे संदेश समूह जोड़ या हटा सकते हैं (एक बार में एक)।",
+ "apihelp-aggregategroups-summary": "स्थायी संदेश समूहों को प्रबंधित करें।",
+ "apihelp-aggregategroups-extended-description": "आप स्थायी संदेश समूह जोड़ या हटा सकते हैं और उनसे संदेश समूह जोड़ या हटा सकते हैं (एक बार में एक)।",
+ "apihelp-aggregategroups-param-do": "स्थायी संदेश समूह से क्या करें।",
+ "apihelp-aggregategroups-param-aggregategroup": "स्थायी संदेश समूह की ID।",
+ "apihelp-aggregategroups-param-group": "संदेश समूह की ID।",
+ "apihelp-aggregategroups-param-groupname": "स्थायी संदेश समूह का नाम।",
+ "apihelp-aggregategroups-param-groupdescription": "स्थायी संदेश समूह का विवरण।",
+ "apihelp-aggregategroups-example-1": "समूह जोड़ें",
+ "apihelp-groupreview-description": "संदेश समूह की कार्यप्रवाह स्थिति जोड़ें।",
+ "apihelp-groupreview-summary": "संदेश समूह की कार्यप्रवाह स्थिति जोड़ें।",
+ "apihelp-groupreview-param-group": "संदेश समूह।",
+ "apihelp-groupreview-param-language": "भाषा कोड।",
+ "apihelp-groupreview-param-state": "समूह की नई स्थिति।",
+ "apihelp-groupreview-example-1": "संदेश समूह \"group-Example\" के जर्मन अनुवाद की स्थिति को तैयार के रूप में चिह्नित करें",
+ "apihelp-query+languagestats-description": "भाषा सांख्यिकी क्वेरी करें।",
+ "apihelp-query+languagestats-summary": "भाषा सांख्यिकी क्वेरी करें।",
+ "apihelp-query+languagestats-param-language": "भाषा कोड।",
+ "apihelp-query+languagestats-param-group": "संदेश समूह ID।",
+ "apihelp-query+languagestats-example-1": "फ़िनिश के लिए अनुवाद समाप्ति की स्थिति",
+ "apihelp-query+languagestats-example-2": "समूह 'क' के लिए फ़िनिश भाषा की अनुवाद पूर्णता सांख्यिकी",
+ "apihelp-query+messagecollection-description": "अनुवादों के बारे में MessageCollection क्वेरी करें।",
+ "apihelp-query+managemessagegroups-summary": "आयात के समय संदेश के समूह में संदेश के संभव स्थानांतरणों को खोजें",
+ "apihelp-query+managemessagegroups-description": "आयात के समय संदेश के समूह में संदेश के संभव स्थानांतरणों को खोजें",
+ "apihelp-query+managemessagegroups-param-groupId": "समूह की ID",
+ "apihelp-query+managemessagegroups-param-messageKey": "संदेश कोड",
+ "apihelp-query+managemessagegroups-param-changesetName": "सेट का नाम बदलें - डिफॉल्ट / अनानुरक्षित / मीडियाविकि आदि",
+ "apihelp-query+managemessagegroups-example-1": "आयात के समय समूह में कोड के संभव स्थानांतरणों को खोजें।",
+ "apihelp-query+messagecollection-summary": "अनुवादों के बारे में MessageCollection क्वेरी करें।",
+ "apihelp-query+messagecollection-param-group": "संदेश समूह।",
+ "apihelp-query+messagecollection-param-language": "भाषा कोड।",
+ "apihelp-query+messagecollection-param-limit": "कितने संदेश दिखाएँ (छाँटने के बाद)।",
+ "apihelp-query+messagecollection-param-offset": "शुरुआत के लिए इंटीजर या की ऑफ़सेट।",
+ "apihelp-query+messagecollection-param-filter": "संदेश समूह फिल्टर। शर्त जोड़ने के लिए <kbd>!</kbd> का इस्तेमाल करें। उदाहरणस्वरूप, <kbd>!fuzzy</kbd> का मतलब है कि सिर्फ गैर-फज़ी संदेश। फिल्टर इस क्रम में जोड़े जाते हैं।\n;fuzzy:फज़ी टैग वाले संदेश।\n;optional:संदेश जिन्हें बदलाव की आवश्यकता होने पर ही अनुवादित किया जाना चाहिए।\n;ignored:संदेश जिन्हें अनुवादित नहीं किया जाता है।\n;hastranslation:संदेश जो अनुवादित हैं, चाहे वे फज़ी हो या ना हो।\n;translated:संदेश जो अनुलादित हैं, मगर फज़ी नहीं हैं।\n;changed:संदेश जिन्हें आखिरी एक्सपोर्ट के बाद अनुवादित किया या बदला गया है।\n;reviewer&#58;N:संदेश जहाँ सदस्य संख्या <kbd>N</kbd> जाँचकर्ताओं में से है।\n;last-translator&#58;N:संदेश जहाँ सदस्य संख्या <kbd>N</kbd> आखिरी अनुवादक है।",
+ "apihelp-query+messagecollection-param-prop": "कौन-से गुणधर्म लाने हैं:\n; definition: संदेश की परिभाषा।\n; translation: वर्तमान अनुवाद (किसी $1 स्ट्रिंग के बिना, कालग्रस्त या टूटे हुए अनुवादों को ढूँढ़ने के लिए टैग्स का उपयोग करें)।\n; tags: मैसेज टैग्स, जैसे वैकल्पिक, अनदेखा किया गया, या फ़ज़ी।\n; properties: संदेश के गुणधर्म, जैसे स्थिति, अवतरण, आखिरी-अनुवादक। संदेशों के बीच बदल सकता है।\n; revision: <span class=\"deprecated\">कालग्रस्त!</span> $2prop=properties का इस्तेमाल करें।",
+ "apihelp-query+messagecollection-example-1": "समर्थित भाषाओं की सूची",
+ "apihelp-query+messagecollection-example-2": "समूह \"page-Example\" में गैर-वैकल्पिक संदेशों की परिभाषाओं की सूची",
+ "apihelp-query+messagecollection-example-3": "फिनिश में \"page-Example\" समूह के टैग वाले वैकल्पिक संदेश",
+ "apihelp-query+messagecollection-example-4": "समूह \"page-Example\" के आखिरी अनुवाद संस्करणों के बारे में अधिक जानकारी",
+ "apihelp-query+messagegroups-description": "संदेश समूहों के बारे में जानकारी लौटाएँ।\n\nध्यान रखें कि uselang पैरामीटर भाषा-अधीन हिस्सों के आउटपुट को बदल सकता है।",
+ "apihelp-query+messagegroups-summary": "संदेश समूहों के बारे में जानकारी लौटाएँ",
+ "apihelp-query+messagegroups-extended-description": "ध्यान रखें कि uselang पैरामीटर भाषा-अधीन हिस्सों के आउटपुट को बदल सकता है।",
+ "apihelp-query+messagegroups-param-depth": "वृक्ष फॉर्मेट का इस्तेमाल करते समय, गहराई को कई लेवलों तक ही रखें। वैल्यू 0 का मतलब है कि कोई उपसमूह नहीं दिखाया जाता है। अगर सीमा पर कर दी जाती है, आउटपुट में एक \"groupcount\" वेल्यू आ जाता है, जो कि सीधे चाइल्डों की संख्या का बोध कराता है।",
+ "apihelp-query+messagegroups-param-filter": "दिए गए इनपुट्स (केस-असंवेदनशील, पाइप्स से अलग किए हुए, * वाइल्डकार्ड) में से किसी एक से मेल खाने वाले ID वाले संदेश लौटाएँ।",
+ "apihelp-query+messagegroups-param-format": "वृक्ष प्रारूप में संदेश समूह वृक्ष में अलग-अलग जगहों पर रह सकते हैं।",
+ "apihelp-query+messagegroups-param-iconsize": "रैस्टर समूह आईकॉन का अधिमानित आकार।",
+ "apihelp-query+messagegroups-param-prop": "अनुवाद से जुड़ी कौन-सी जानकारी प्राप्त करनी है:\n;id:समूह की ID।\n;label:समूह का लेबल दर्ज करें।\n;description:समूह का विवरण दर्ज करें।\n;class:समूह के वर्ग का नाम दर्ज करें।\n;namespace:समूह का नामस्थान दर्ज करें। सभी समूह किसी एक नामस्थान में नहीं हैं।\n;exists:समूह के नापे गए अस्तित्व गुणधर्म को दर्ज करें।\n;icon:समूह के आईकॉन्स पर URL दर्ज करें।\n;priority:हतोत्साहित जैसे आवश्यकता स्थिति को दर्ज करें।\n;prioritylangs:अधिमानित भाषाएँ दर्ज करें। सेट न करने पर यह false लौटाता है।\n;priorityforce:आवश्यकता स्थिति को दर्ज करें - आवश्यक भाषाओं का ही सेटिंग है मगर इसे ज़बरदस्ती जोड़ा जाता है।\n;workflowstates:संदेश समूह के कार्यप्रवाह स्थिति को दर्ज करें।",
+ "apihelp-query+messagegroups-param-root": "वृक्ष फॉर्मेट का इस्तेमाल करते समय ऊपर से शुरू करने के बजाय चुने गए संदेश-समूह से शुरुआत करें, जिसे एक स्थायी संदेश-समूह होना होगा। साधारण फॉर्मेट का इस्तेमाल करते समय सिर्फ निर्दिष्ट समूह ही लौटाया जाता है।",
+ "apihelp-query+messagegroups-param-languageFilter": "दिए गए भाषा में अनुवाद करने योग्य संदेश लौटाएँ।",
+ "apihelp-query+messagegroups-example-1": "संदेश समूहों को क्वेरी करें",
+ "apihelp-query+messagegroupstats-description": "संदेश समूहों के आँकड़ों को क्वेरी करें।",
+ "apihelp-query+messagegroupstats-summary": "संदेश समूहों के आँकड़ों को क्वेरी करें।",
+ "apihelp-query+messagegroupstats-param-group": "संदेश-समूह की ID।",
+ "apihelp-query+messagegroupstats-param-suppresscomplete": "जिन भाषाओं का अनुवाद पूर्ण हो चुका है उन्हें न दिखाएँ",
+ "apihelp-query+messagegroupstats-param-suppressempty": "जिन भाषाओं का अनुवाद नहीं है उन्हें न दिखाएँ",
+ "apihelp-query+messagegroupstats-example-1": "\"page-Example\" समूह की अनुवाद सांख्यिकी",
+ "apihelp-query+messagetranslations-description": "किसी संदेश के लिए सभी अनुवादों को क्वेरी करें।",
+ "apihelp-query+messagetranslations-summary": "किसी संदेश के लिए सभी अनुवादों को क्वेरी करें।",
+ "apihelp-query+messagetranslations-param-title": "ज्ञात संदेश का पूर्ण शीर्षक।",
+ "apihelp-query+messagetranslations-example-1": "\"MediaWiki:January\" के लिए विकि पर अनुवादों की सूची",
+ "apihelp-managemessagegroups-description": "आयात के समय किसी मौजूदा संदेश के स्थानांतरण के रूप में या फिर समूह में नए संदेश के रूप में एक नया संदेश जोड़ें",
+ "apihelp-managemessagegroups-summary": "आयात के समय किसी मौजूदा संदेश के स्थानांतरण के रूप में या फिर समूह में नए संदेश के रूप में एक नया संदेश जोड़ें",
+ "apihelp-managemessagegroups-param-groupId": "समूह की ID",
+ "apihelp-managemessagegroups-param-renameMessageKey": "नाम बदलने के लिए लक्ष्य संदेश कुँजी",
+ "apihelp-managemessagegroups-param-messageKey": "बदला गया संदेश कुँजी",
+ "apihelp-managemessagegroups-param-operation": "करने के लिए कार्य। संभव वैल्यू: स्थानांतरण / नया",
+ "apihelp-managemessagegroups-param-changesetName": "बदलाव सेट का नाम - डिफॉल्ट / अनानुरक्षित / मीडियाविकि आदि",
+ "apihelp-managemessagegroups-param-changesetModified": "जब बदलाव-सेट को आखिरी बार संपादित किया गया था, उसका यूनिक्स समयछाप। अगर बदलाव-सेट को इसके बाद संपादित किया गया है, API त्रुटि दिखाएगी।",
+ "apihelp-managegroupsynchronizationcache-description": "समूह तादात्मय कैश प्रबंधित करें।",
+ "apihelp-managegroupsynchronizationcache-summary": "समूह तादात्मय कैश प्रबंधित करें।",
+ "apihelp-managegroupsynchronizationcache-param-operation": "करने के लिए कार्य। संभव वैल्यू: ठीक करें",
+ "apihelp-managegroupsynchronizationcache-param-title": "संदेश के शीर्षक को ठीक किए गए के रूप में चिह्नित किया जा रहा है",
+ "apihelp-managegroupsynchronizationcache-param-group": "ठीक किए जा रहे संदेश का समूह ID",
+ "apihelp-translatesandbox-description": "प्रयोगपृष्ठ सदस्यों को साइन-अप और प्रबंधित करें।",
+ "apihelp-translatesandbox-summary": "प्रयोगपृष्ठ सदस्यों को साइन-अप और प्रबंधित करें।",
+ "apihelp-translatesandbox-param-do": "क्या करें।",
+ "apihelp-translatesandbox-param-userid": "प्रबंधित किए जा रहे सदस्यों के सदस्य ID। सृष्टियों के लिए 0 का उपयोग करें।",
+ "apihelp-translatesandbox-param-username": "सदस्य को बनाते समय सदस्यनाम।",
+ "apihelp-translatesandbox-param-password": "सदस्य को बनाते समय पासवर्ड।",
+ "apihelp-translatesandbox-param-email": "सदस्य को बनाते समय ईमेल।",
+ "apihelp-translationaids-description": "सभी अनुवाद सहायताओं को क्वेरी करें।",
+ "apihelp-translationaids-summary": "सभी अनुवाद सहायताओं को क्वेरी करें।",
+ "apihelp-translationaids-param-title": "ज्ञात संदेश का पूरा नाम।",
+ "apihelp-translationaids-param-group": "संदेश समूह जिसमें संदेश है। अगर खाली है, इसे प्राथमिक समूह में डाला जाता है।",
+ "apihelp-translationaids-param-prop": "कौन से अनुवाद सहायक जोड़ने हैं।",
+ "apihelp-translationaids-example-1": "[[MediaWiki:January/fi]] के लिए सहायता दिखाएँ",
+ "apihelp-translationreview-description": "अनुवादों को निरीक्षित के रूप में चिह्नित करें।",
+ "apihelp-translationreview-summary": "अनुवादों को निरीक्षित के रूप में चिह्नित करें।",
+ "apihelp-translationreview-param-revision": "निरीक्षित करने के लिए अवतरण की संख्या।",
+ "apihelp-translationreview-example-1": "अवलोकन अवतरण 1",
+ "apihelp-translationstash-description": "स्टैश पर अनुवाद जोड़ें।",
+ "apihelp-translationstash-summary": "स्टैश पर अनुवाद जोड़ें।",
+ "apihelp-translationstash-param-subaction": "क्रिया।",
+ "apihelp-translationstash-param-title": "अनुवाद इकाई पृष्ठ का शीर्षक।",
+ "apihelp-translationstash-param-translation": "सदस्य द्वारा किया गया अनुवाद।",
+ "apihelp-translationstash-param-metadata": "JSON ऑब्जेक्ट।",
+ "apihelp-translationstash-param-username": "वैकल्पिक रूप से, वह सदस्य जिसका स्टैश प्राप्त करना है। सिर्फ अधिकार वाले सदस्य ही यह कर सकते हैं।",
+ "apihelp-translationstash-example-1": "[[MediaWiki:Jan/fi]] के स्टैश पर अनुवाद जोड़ें",
+ "apihelp-translationstash-example-2": "स्टैश को क्वेरी करें",
+ "apihelp-ttmserver-description": "अनुवाद स्मृति से सुझाव क्वेरी करें।",
+ "apihelp-ttmserver-summary": "अनुवाद स्मृति से सुझाव क्वेरी करें।",
+ "apihelp-ttmserver-param-service": "उपलब्ध अनुवाद सेवाओं में से किसका उपयोग करें।",
+ "apihelp-ttmserver-param-sourcelanguage": "स्रोत पाठ की भाषा कोड।",
+ "apihelp-ttmserver-param-targetlanguage": "सुझाव की भाषा कोड।",
+ "apihelp-ttmserver-param-text": "जिसके लिए सुझाव ढूँढ़ना है, वह पाठ।",
+ "apihelp-ttmserver-example-1": "अंग्रेज़ी से फ़िनिश में \"Help\" को अनुवादित करने में मदद पाएँ",
+ "apihelp-searchtranslations-description": "अनुवाद खोजें।",
+ "apihelp-searchtranslations-summary": "अनुवाद खोजें।",
+ "apihelp-searchtranslations-param-service": "उपलब्ध अनुवाद सेवाओं में से किसका उपयोग करें।",
+ "apihelp-searchtranslations-param-query": "खोजने के लिए स्ट्रिंग।",
+ "apihelp-searchtranslations-param-sourcelanguage": "स्रोत के भाषा का स्रोत टेक्स्ट।",
+ "apihelp-searchtranslations-param-language": "खोजने के लिए स्ट्रिंग का भाषा कोड।",
+ "apihelp-searchtranslations-param-group": "स्ट्रिंग को खोजने के लिए समूह की ID।",
+ "apihelp-searchtranslations-param-filter": "संदेश अनुवाद स्थिति फ़िल्टर।",
+ "apihelp-searchtranslations-param-match": "कोई/सभी खोज शब्दों से मेल खाएँ।",
+ "apihelp-searchtranslations-param-case": "केस (अ)संवेदनशील खोज।",
+ "apihelp-searchtranslations-param-offset": "अनुवादों के लिए ऑफ़सेट।",
+ "apihelp-searchtranslations-param-limit": "परिणाम का आकार।",
+ "apihelp-searchtranslations-example-1": "भाषा के अनुवाद दिखाएँ।",
+ "apihelp-searchtranslations-example-2": "स्रोत भाषा में क्वेरी से मेल खा रहे अनानुवादित संदेश दिखाएँ।",
+ "apihelp-translationcheck-description": "कॉन्फिगर किए गए संदेश सत्यापनकर्ताओं के खिलाफ़, दिए गए अनुवाद इनपुट को सत्यापित करें।",
+ "apihelp-translationcheck-summary": "अनुवादों को सत्यापित करें।",
+ "apihelp-translationcheck-param-title": "नामस्थान और भाषा कोड सहित पृष्ठ का नाम।",
+ "apihelp-translationcheck-param-translation": "सत्यापित करने के लिए अनुवाद।",
+ "apihelp-translationstats-description": "अनुवाद संपादनों, सक्रिय अनुवादों, नए सदस्यों, अनुवाद निरीक्षणों और निरीक्षकों से संबंधित अनुवाद सांख्यिकी लाएँ।",
+ "apihelp-translationstats-summary": "अनुवाद सांख्यिकी लाएँ",
+ "apihelp-translationstats-param-count": "अनुरोधित सांख्यिकी का प्रकार",
+ "apihelp-translationstats-param-days": "सांख्यिकी लाने के लिए दिनों की संख्या",
+ "apihelp-translationstats-param-group": "सांख्यिकी लाने के लिए समूहों की सूची।",
+ "apihelp-translationstats-param-language": "सांख्यिकी लाने के लिए भाषाओं की सूची।",
+ "apihelp-translationstats-param-scale": "अनुवाद सांख्यिकी का पैमाना",
+ "apihelp-translationstats-param-start": "शुरुआती दिनांक जिसके बाद से अनुवाद सांख्यिकी लाने हैं। वर्तमान दिनांक से <var>days</var> की संख्या घटाने पर आने वाले दिनांक पर डिफॉल्ट करता है।",
+ "apihelp-translationstats-example-1": "पिछले 30 दिनों के संपादनों की मात्रा लाएँ, सभी समूहों और भाषाओं के लिए।",
+ "apihelp-translationstats-example-2": "अंग्रेज़ी और फ्रांसिसी भाषाओं के लिए पिछले 30 दिनों में संपादनों की मात्रा लाएँ",
+ "apierror-translate-changeset-modified": "बदलाव-सेट को किसी दूसरे सदस्य या प्रक्रिया द्वारा बदला गया है। आपके बदलावों को प्रकाशित नहीं किया जा सकता क्योंकि इससे उनके बदलाव ओवर्राइड हो सकते हैं। आखिरी बदलाव देखने के लिए पृष्ठ को दोबारा लोड करें।",
+ "apierror-translate-duplicateaggregategroup": "संदेश समूह पहले से ही मौजूद है",
+ "apierror-translate-fuzzymessage": "फ़ज़ी के अनुवादों को निरीक्षित नहीं कर सकते",
+ "apierror-translate-groupreviewdisabled": "संदेश समूह निरीक्षण का उपयोग नहीं किया जा रहा है।",
+ "apierror-translate-invalidaggregategroup": "अमान्य स्थायी संदेश समूह",
+ "apierror-translate-invalidaggregategroupname": "स्थायी संदेश समूह का अमान्य नाम",
+ "apierror-translate-invalidgroup": "समूह मौजूद नहीं है या फिर अमान्य है",
+ "apierror-translate-invalidstate": "अनुरोधित स्थिति अमान्य है।",
+ "apierror-translate-invalidlanguage": "भाषा कोड $1 अमान्य है।",
+ "apierror-translate-invalidupdate": "अमान्य अद्यतन",
+ "apierror-translate-language-disabled": "$1 में अनुवाद को अक्षम किया गया है।",
+ "apierror-translate-language-disabled-reason": "$1 में अनुवाद को अक्षम किया गया है: $2",
+ "apierror-translate-nodynamicgroups": "डायनामिक संदेश समूह यहाँ समर्थित नहीं हैं",
+ "apierror-translate-nomessagefortitle": "शीर्षक किसी अनुवाद-योग्य संदेश का हिस्सा नहीं है",
+ "apierror-translate-notranslationservices": "किसी सार्वजनिक अनुवाद सेवा को कॉन्फिगर नहीं किया गया है। इस सुविधा का उपयोग करने से पहले विकि के प्रबंधक को ठीक से <var>$wgTranslateTranslationServices</var> को सेट करना होगा।",
+ "apierror-translate-owntranslation": "अपने अनुवादों को निरीक्षित नहीं कर सकते",
+ "apierror-translate-sandboxdisabled": "प्रयोगपृष्ठ सुविधा का उपयोग नहीं किया जा रहा है",
+ "apierror-translate-smg-nochanges": "प्रोसेस करने के लिए कोई बदलाव नहीं है।",
+ "apierror-translate-unknownmessage": "अज्ञात संदेश",
+ "apierror-translate-invalid-changeset-name": "बदलाव सेट के फाइल का अमान्य नाम पास किया गया - $1",
+ "apierror-translate-invalid-operation": "अमान्य कार्य: $1। मान्य वैल्यू - $2।",
+ "apierror-translate-addition-key-invalid": "जोड़ने के लिए पास की गई संदेश कुँजी स्रोत भाषा के स्थानांतरित संदेश सूची में नहीं पाई गई।",
+ "apierror-translate-rename-msg-new": "सिर्फ स्थानांतरित संदेशों के ही नए संदशों के रूप में जोड़ा जा सकता है।",
+ "apierror-translate-rename-key-invalid": "स्थानांतरण के लिए पास की गई संदेश कुँजी स्रोत भाषा के स्थानांतरित संदेश सूची में नहीं पाई गई।",
+ "apierror-translate-rename-state-invalid": "स्थानांतरण के लिए पास किए गए संदेशों में से एक को नए संदेश के रूप में जोड़ा जाएगा, और दूसरे को हटा दिया जाएगा। वर्तमान स्थितियाँ - जोड़ना: $1 और हटाना: $2।",
+ "apiwarn-translate-alreadyreviewedbyyou": "आप द्वारा पहले से ही निरीक्षित के रूप में चिह्नित",
+ "apiwarn-translate-language-disabled-source": "इस समूह के स्रोत की भाषा $1 है। इसे अनुवादित करने के लिए कोई दूसरी भाषा चुनें।",
+ "apierror-translate-operation-error": "अनुरोध को प्रोसेस करते समय एक त्रुटि आई। त्रुटि: $1",
+ "apihelp-translationentitysearch-summary": "संदेश समूह और संदेश खोजें",
+ "apihelp-translationentitysearch-param-entitytype": "सत्ते के प्रकार को क्वेरी की जा रही है",
+ "apihelp-translationentitysearch-param-query": "खोज क्वेरी",
+ "apihelp-translationentitysearch-param-limit": "अधिकतम परिणाम संख्या"
+}
diff --git a/Translate/i18n/api/hr.json b/Translate/i18n/api/hr.json
new file mode 100644
index 00000000..a3cc4b2e
--- /dev/null
+++ b/Translate/i18n/api/hr.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bugoslav"
+ ]
+ },
+ "apierror-translate-language-disabled": "Onemogućeno je prevođenje na jezik: $1.",
+ "apierror-translate-language-disabled-reason": "Onemogućeno je prevođenje na sljedeći jezik: $1; razlog: $2",
+ "apierror-translate-nomessagefortitle": "Naslov ne odgovara prevodivoj poruci",
+ "apiwarn-translate-language-disabled-source": "Izvorni jezik ove grupe je $1. Molimo Vas, izaberite drugi jezik na koji želite prevoditi."
+}
diff --git a/Translate/i18n/api/hu.json b/Translate/i18n/api/hu.json
new file mode 100644
index 00000000..037d81cb
--- /dev/null
+++ b/Translate/i18n/api/hu.json
@@ -0,0 +1,104 @@
+{
+ "@metadata": {
+ "authors": [
+ "Tacsipacsi"
+ ]
+ },
+ "apihelp-aggregategroups-description": "Összesített üzenetcsoportok kezelése.\n\nHozzá tudsz adni és el tudsz távolítani összesített üzenetcsoportokat, és hozzájuk tudsz adni vagy el tudsz távolítani belőlük üzenetcsoportokat (egyszerre egyet).",
+ "apihelp-aggregategroups-summary": "Összesített üzenetcsoportok kezelése.",
+ "apihelp-aggregategroups-extended-description": "Összesített üzenetcsoportok hozzáadása és eltávolítása, illetve üzenetcsoportok hozzáadása egy összesített csoporthoz vagy eltávolítása onnan (egyszerre egy).",
+ "apihelp-aggregategroups-param-do": "Mit csináljon az összesített üzenetcsoporttal.",
+ "apihelp-aggregategroups-param-aggregategroup": "Összesített üzenetcsoport azonosítója.",
+ "apihelp-aggregategroups-param-group": "Üzenetcsoport azonosítója.",
+ "apihelp-aggregategroups-param-groupname": "Összesített üzenetcsoport neve.",
+ "apihelp-aggregategroups-param-groupdescription": "Összesített üzenetcsoport leírása.",
+ "apihelp-aggregategroups-example-1": "Üzenetcsoport hozzáadása",
+ "apihelp-groupreview-param-group": "Üzenetcsoport.",
+ "apihelp-groupreview-param-language": "Nyelvkód.",
+ "apihelp-groupreview-param-state": "A csoport új állapota.",
+ "apihelp-groupreview-example-1": "A „group-Example” csoport német fordításának állapota késznek jelölése",
+ "apihelp-query+languagestats-description": "Nyelvi statisztika lekérdezése.",
+ "apihelp-query+languagestats-summary": "Nyelvi statisztika lekérdezése.",
+ "apihelp-query+languagestats-param-language": "Nyelvkód.",
+ "apihelp-query+languagestats-example-1": "A finn fordítások készültségi fokainak listája",
+ "apihelp-query+messagecollection-description": "MessageCollection lekérése a fordításokról.",
+ "apihelp-query+messagecollection-summary": "MessageCollection lekérése a fordításokról.",
+ "apihelp-query+messagecollection-param-group": "Üzenetcsoport.",
+ "apihelp-query+messagecollection-param-language": "Nyelvkód.",
+ "apihelp-query+messagecollection-param-limit": "Mennyi üzenetet mutasson (szűrés után).",
+ "apihelp-query+messagecollection-example-1": "Támogatott nyelvek listája",
+ "apihelp-query+messagegroups-summary": "Információk lekérése üzenetcsoportokról.",
+ "apihelp-query+messagegroups-extended-description": "A <var>uselang</var> paraméterrel befolyásolható a nyelvfüggő részek kimenete.",
+ "apihelp-query+messagegroups-param-depth": "A fa formátum használatakor a fa mélységének korlátozása ennyi szintre. A 0 jelenti csak a legfelső szint megjelenítését. A limit elérésekor a kimenet tartalmaz egy <code>groupcount</code> értéket, a közvetlen gyerekek számát.",
+ "apihelp-query+messagegroups-param-filter": "Csak a megadott azonosítójú üzenetek lekérése (a kis- és nagybetűk nem különbözőek, a * helyettesítő karakter).",
+ "apihelp-query+messagegroups-param-format": "A fa formátumban egyes üzenetcsoportok többször is szerepelhetnek a fában.",
+ "apihelp-query+messagegroups-param-iconsize": "A raszterizált ikon preferált mérete.",
+ "apihelp-query+messagegroups-param-root": "A fa formátum használatakor a legfelső szint helyett kezdés ettől az üzenetcsoporttól, aminek egy összesített csoportnak kell lennie. A lapos formátum használatakor csak az adott csoport visszaadása.",
+ "apihelp-query+messagegroups-example-1": "Üzenetcsoportok megjelenítése",
+ "apihelp-query+messagegroupstats-description": "Üzenetcsoport-statisztika lekérdezése.",
+ "apihelp-query+messagegroupstats-summary": "Üzenetcsoport-statisztika lekérdezése.",
+ "apihelp-query+messagegroupstats-param-group": "Üzenetcsoport azonosítója.",
+ "apihelp-query+messagetranslations-description": "Egy üzenet összes fordításának lekérdezése.",
+ "apihelp-query+messagetranslations-summary": "Egy üzenet összes fordításának lekérdezése.",
+ "apihelp-query+messagetranslations-param-title": "Egy ismert üzenet teljes címe.",
+ "apihelp-query+messagetranslations-example-1": "A „MediaWiki:January” fordításainak listázása a wikin.",
+ "apihelp-translatesandbox-param-do": "A végrehajtandó művelet.",
+ "apihelp-translatesandbox-param-userid": "A kezelendő felhasználók azonosítói, 0 a létrehozáshoz.",
+ "apihelp-translatesandbox-param-username": "Felhasználónév felhasználó létrehozásakor.",
+ "apihelp-translatesandbox-param-password": "Jelszó felhasználó létrehozásakor.",
+ "apihelp-translatesandbox-param-email": "E-mail-cím felhasználó létrehozásakor.",
+ "apihelp-translationaids-description": "Az összes fordítási segítség lekérdezése.",
+ "apihelp-translationaids-summary": "Az összes fordítási segítség lekérdezése.",
+ "apihelp-translationaids-param-title": "Egy ismert üzenet teljes címe.",
+ "apihelp-translationaids-param-group": "Üzenetcsoport, amihez az üzenet tartozik. Ha üres, az alapértelmezett üzenetcsoport lesz használva.",
+ "apihelp-translationaids-param-prop": "A befoglalandó fordítási segítségek.",
+ "apihelp-translationaids-example-1": "Segítségek megjelenítése a [[MediaWiki:January/fi]] üzenethez",
+ "apihelp-translationreview-description": "Fordítások átnézettnek jelölése.",
+ "apihelp-translationreview-summary": "Fordítások átnézettnek jelölése.",
+ "apihelp-translationreview-param-revision": "Az átnézettnek jelölendő változat azonosítója.",
+ "apihelp-translationreview-example-1": "Az 1. lapváltozat átnézettnek jelölése",
+ "apihelp-translationstash-param-subaction": "Művelet.",
+ "apihelp-translationstash-param-title": "A fordítási egység lapcíme.",
+ "apihelp-translationstash-param-translation": "A felhasználó fordítása.",
+ "apihelp-translationstash-param-metadata": "JSON-objektum.",
+ "apihelp-ttmserver-description": "Javaslatok lekérdezése a fordítási memóriából.",
+ "apihelp-ttmserver-summary": "Javaslatok lekérdezése a fordítási memóriából.",
+ "apihelp-ttmserver-param-sourcelanguage": "A forrásszöveg nyelvkódja.",
+ "apihelp-ttmserver-param-targetlanguage": "A javaslat nyelve.",
+ "apihelp-ttmserver-param-text": "A fordítandó szöveg.",
+ "apihelp-ttmserver-example-1": "Javaslatok lekérése a „Help” angolról finnre fordításához.",
+ "apihelp-searchtranslations-description": "Fordítások keresése.",
+ "apihelp-searchtranslations-summary": "Fordítások keresése.",
+ "apihelp-searchtranslations-param-query": "A keresendő szöveg.",
+ "apihelp-searchtranslations-param-sourcelanguage": "A forrásszöveg nyelvkódja.",
+ "apihelp-searchtranslations-param-language": "A keresendő nyelv kódja.",
+ "apihelp-searchtranslations-param-group": "Keresés ebben a csoportazonosítójú csoportban.",
+ "apihelp-searchtranslations-param-filter": "Az üzenet fordítási állapotának szűrése.",
+ "apihelp-searchtranslations-param-match": "Az összes/bármely szó keresése.",
+ "apihelp-searchtranslations-param-case": "Kis- és nagybetűk megkülönböztetése.",
+ "apihelp-searchtranslations-param-limit": "Az eredmény mérete.",
+ "apihelp-searchtranslations-example-1": "Fordítások megjelenítése a nyelvre.",
+ "apihelp-searchtranslations-example-2": "Lefordítatlan üzenetek megjelenítése, amik illeszkednek a lekérdezésre a forrásnyelven.",
+ "apihelp-translationcheck-description": "A megadott fordítás érvényesítése a konfigurált üzenetérvényesítőkkel.",
+ "apihelp-translationcheck-summary": "Fordítások ellenőrzése.",
+ "apihelp-translationcheck-param-title": "Lapcím névtérrel és nyelvkóddal.",
+ "apihelp-translationcheck-param-translation": "Az érvényesítendő fordítás.",
+ "apierror-translate-duplicateaggregategroup": "Az üzenetcsoport már létezik",
+ "apierror-translate-groupreviewdisabled": "Az üzenetcsoport-ellenőrzés nincs használatban.",
+ "apierror-translate-invalidaggregategroup": "Érvénytelen összesített üzenetcsoport",
+ "apierror-translate-invalidaggregategroupname": "Érvénytelen név összesített üzenetcsoportnak",
+ "apierror-translate-invalidgroup": "A csoport nem létezik vagy érvénytelen",
+ "apierror-translate-invalidstate": "A kért állapot érvénytelen.",
+ "apierror-translate-invalidlanguage": "A(z) $1 nyelvkód érvénytelen.",
+ "apierror-translate-invalidupdate": "Érvénytelen frissítés",
+ "apierror-translate-language-disabled": "$1 nyelvre a fordítás le van tiltva.",
+ "apierror-translate-language-disabled-reason": "$1 nyelvre a fordítás le van tiltva: $2",
+ "apierror-translate-nodynamicgroups": "A dinamikus üzenetcsoportok itt nem támogatottak",
+ "apierror-translate-nomessagefortitle": "A cím nem tartozik egy lefordítható üzenethez",
+ "apierror-translate-notranslationservices": "Nincs beállítva nyilvános fordítási szolgáltatás. A wiki rendszergazdájának be kell állítania megfelelően a <var>$wgTranslateTranslationServices</var> változót, mielőtt ez a funkció használható lenne.",
+ "apierror-translate-owntranslation": "Nem lehet ellenőrizni saját fordításokat",
+ "apierror-translate-sandboxdisabled": "A homokozófunkció nincs használatban",
+ "apierror-translate-unknownmessage": "Ismeretlen üzenet",
+ "apiwarn-translate-alreadyreviewedbyyou": "Már megjelölted átnézettként",
+ "apiwarn-translate-language-disabled-source": "Ennek az üzenetcsoportnak a forrásnyelve $1. Válassz egy másik nyelvet a fordításhoz."
+}
diff --git a/Translate/i18n/api/hy.json b/Translate/i18n/api/hy.json
new file mode 100644
index 00000000..83e49f1b
--- /dev/null
+++ b/Translate/i18n/api/hy.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Սերգեյ Սաֆարյան"
+ ]
+ },
+ "apihelp-groupreview-param-group": "Հաղորդագրությունների խումբ։"
+}
diff --git a/Translate/i18n/api/hyw.json b/Translate/i18n/api/hyw.json
new file mode 100644
index 00000000..661e27cf
--- /dev/null
+++ b/Translate/i18n/api/hyw.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kareyac"
+ ]
+ },
+ "apihelp-translationstash-param-subaction": "Գործողություն"
+}
diff --git a/Translate/i18n/api/ia.json b/Translate/i18n/api/ia.json
new file mode 100644
index 00000000..b27e073b
--- /dev/null
+++ b/Translate/i18n/api/ia.json
@@ -0,0 +1,173 @@
+{
+ "@metadata": {
+ "authors": [
+ "McDutchie"
+ ]
+ },
+ "apihelp-aggregategroups-description": "Gerer le gruppos de messages aggregate.\n\nTu pote adder e mover gruppos de messages aggregate e associar o dissociar gruppos de messages a illos (un al vice).",
+ "apihelp-aggregategroups-summary": "Gerer gruppos de messages aggregate.",
+ "apihelp-aggregategroups-extended-description": "Tu pote adder e remover gruppos de messages aggregate e associar o dissociar gruppos de messages a illos (un al vice).",
+ "apihelp-aggregategroups-param-do": "Que facer con le gruppo de messages aggregate.",
+ "apihelp-aggregategroups-param-aggregategroup": "ID del gruppo de messages aggregate.",
+ "apihelp-aggregategroups-param-group": "ID del gruppo de messages.",
+ "apihelp-aggregategroups-param-groupname": "Nomine del gruppo de messages aggregate.",
+ "apihelp-aggregategroups-param-groupdescription": "Description del gruppo de messages aggregate.",
+ "apihelp-aggregategroups-example-1": "Associar un gruppo",
+ "apihelp-groupreview-description": "Definir le statos de fluxo de travalio del gruppos de messages.",
+ "apihelp-groupreview-summary": "Definir le statos de fluxo de travalio del gruppos de messages.",
+ "apihelp-groupreview-param-group": "Gruppo de messages.",
+ "apihelp-groupreview-param-language": "Codice de lingua.",
+ "apihelp-groupreview-param-state": "Le nove stato pro le gruppo.",
+ "apihelp-groupreview-example-1": "Marcar le stato del traduction in germano pro le gruppo de messages \"group-Example\" como preste",
+ "apihelp-query+languagestats-description": "Consultar statisticas de lingua.",
+ "apihelp-query+languagestats-summary": "Consultar statisticas de lingua.",
+ "apihelp-query+languagestats-param-language": "Codice de lingua.",
+ "apihelp-query+languagestats-param-group": "ID del gruppo de messages.",
+ "apihelp-query+languagestats-example-1": "Lista de statisticas de completion de traduction pro finnese",
+ "apihelp-query+languagestats-example-2": "Lista de statisticas de completion de traduction in finnese pro le gruppo A",
+ "apihelp-query+messagecollection-description": "Consultar MessageCollection sur traductiones.",
+ "apihelp-query+managemessagegroups-summary": "Obtener possibile renominationes pro un message in un gruppo durante importationes",
+ "apihelp-query+managemessagegroups-description": "Obtener possibile renominationes pro un message in un gruppo durante importationes",
+ "apihelp-query+managemessagegroups-param-groupId": "ID del gruppo",
+ "apihelp-query+managemessagegroups-param-messageKey": "Clave del message",
+ "apihelp-query+managemessagegroups-param-changesetName": "Nomine del gruppo de modificationes: Predefinition, Non surveliate, MediaWiki, etc.",
+ "apihelp-query+managemessagegroups-example-1": "Obtener possibile renominationes pro le clave indicate in le gruppo indicate.",
+ "apihelp-query+messagecollection-summary": "Consultar MessageCollection sur traductiones.",
+ "apihelp-query+messagecollection-param-group": "Gruppo de messages.",
+ "apihelp-query+messagecollection-param-language": "Codice de lingua.",
+ "apihelp-query+messagecollection-param-limit": "Numero de messages a monstrar (post filtration).",
+ "apihelp-query+messagecollection-param-offset": "Numero integre o position del clave pro le initio.",
+ "apihelp-query+messagecollection-param-filter": "Filtros de collection de messages. Usa <kbd>!</kbd> pro negar un condition. Per exemplo, <kbd>!fuzzy</kbd> significa listar solmente le messages non marcate con FUZZY. Le filtros se applica in le ordine fornite.\n;fuzzy:Messages con le etiquetta FUZZY.\n;optional:Messages que solmente debe esser traducite si modificationes es necessari.\n;ignored:Messages que nunquam es traducite.\n;hastranslation:Messages que ha un traduction, marcate o non con le etiquetta FUZZY.\n;translated:Messages que ha un traduction non marcate con le etiquetta FUZZY.\n;changed:Messages que ha essite traducite o alterate post le ultime exportation.\n;reviewer&#58;N:Messages ubi le usator numero <kbd>N</kbd> es inter le revisores.\n;last-translator&#58;N:Messages ubi le usator numero <kbd>N</kbd> es le ultime traductor.",
+ "apihelp-query+messagecollection-param-prop": "Que proprietates obtener:\n;definition:Definition del message.\n;translation:Traduction actual (sin catena de texto $1 si existe, usa le etiquettas pro cercar traductiones obsolete o incorrecte)\n;tags:Etiquettas del message, como \"optional\", \"ignored\" e \"fuzzy\".\n;properties:Proprietates del message, como \"status\", \"revision\", \"last-translator\". Pote variar inter messages.\n;revision:<span class=\"deprecated\">Obsolete!</span> Usa $2prop=properties.",
+ "apihelp-query+messagecollection-example-1": "Lista de linguas supportate",
+ "apihelp-query+messagecollection-example-2": "Lista de definitiones de messages non-optional pro le gruppo \"page-Example\"",
+ "apihelp-query+messagecollection-example-3": "Lista de messages optional in finnese con etiquettas pro le gruppo \"page-Example\"",
+ "apihelp-query+messagecollection-example-4": "Plus information sur le ultime versiones de traduction pro le gruppo \"page-Example\"",
+ "apihelp-query+messagegroups-description": "Retorna information sur gruppos de messages.\n\nNota que le parametro \"uselang\" affecta le reproduction de partes dependente de lingua.",
+ "apihelp-query+messagegroups-summary": "Retorna information sur gruppos de messages.",
+ "apihelp-query+messagegroups-extended-description": "Nota que le parametro \"uselang\" affecta le reproduction de partes dependente de lingua.",
+ "apihelp-query+messagegroups-param-depth": "Quando se usa le formato de arbore, limitar le profunditate a iste numero de nivellos. Le valor 0 significa que non se monstra subgruppos. Si le limite es attingite, le resultato include un valor \"groupcount\", que indica le numero de filios directe.",
+ "apihelp-query+messagegroups-param-filter": "Solmente retorna messages con IDs que corresponde a un o plus del entratas fornite (sin differentiar majusculas e minusculas, separate per barras vertical, * es metacharacter).",
+ "apihelp-query+messagegroups-param-format": "In le formato de arbore, gruppos de messages pote exister in plure locos in le arbore.",
+ "apihelp-query+messagegroups-param-iconsize": "Dimension preferite del icone de gruppo rasterisate.",
+ "apihelp-query+messagegroups-param-prop": "Qual information obtener sur le traduction:\n;id:Includer le ID del gruppo.\n;label:Includer le etiquetta del gruppo.\n;description:Includer le description del gruppo.\n;class:Includer le nomine de classe del gruppo.\n;namespace:Includer le spatio de nomines del gruppo. Non tote le gruppos pertine a un unic spatio de nomines.\n;exists:Includer le proprietate de existentia auto-calculate del gruppo.\n;icon:Includer le adresses URL del icone del gruppo.\n;priority:Includer le stato de prioritate, p.ex. \"discouraged\" (discoragiate).\n;prioritylangs:Includer le linguas preferite. Si non definite, isto retorna false.\n;priorityforce:Includer le stato de prioritate - si le configuration de linguas de prioritate es fortiate.\n;workflowstates:Includer le statos de fluxo de labor pro le gruppo de messages.",
+ "apihelp-query+messagegroups-param-root": "Quando se usa le formato de arbore, in loco de partir del nivello superior, partir del gruppo de messages indicate, le qual debe esser un gruppo de messages aggregate. Quando se usa le formato platte, solmente le gruppo indicate se retorna.",
+ "apihelp-query+messagegroups-param-languageFilter": "Solmente restituer gruppos de messages que pote esser traducite in le lingua date.",
+ "apihelp-query+messagegroups-example-1": "Monstrar gruppos de messages",
+ "apihelp-query+messagegroupstats-description": "Consultar statisticas del gruppo de messages.",
+ "apihelp-query+messagegroupstats-summary": "Consultar statisticas del gruppo de messages.",
+ "apihelp-query+messagegroupstats-param-group": "ID del gruppo de messages.",
+ "apihelp-query+messagegroupstats-param-suppresscomplete": "Non monstrar linguas con traduction complete",
+ "apihelp-query+messagegroupstats-param-suppressempty": "Non monstrar linguas sin traductiones",
+ "apihelp-query+messagegroupstats-example-1": "Lista de statisticas de finalisation de traductiones pro le gruppo \"page-Example\"",
+ "apihelp-query+messagetranslations-description": "Consultar tote le traductiones de un sol message.",
+ "apihelp-query+messagetranslations-summary": "Consultar tote le traductiones de un sol message.",
+ "apihelp-query+messagetranslations-param-title": "Titulo complete de un message cognoscite.",
+ "apihelp-query+messagetranslations-example-1": "Lista de traductiones in le wiki de \"MediaWiki:January\"",
+ "apihelp-managemessagegroups-description": "Adder un message como un renomination de un message existente o un nove message in le gruppo durante importationes",
+ "apihelp-managemessagegroups-summary": "Adder un message como un renomination de un message existente o un nove message in le gruppo durante importationes",
+ "apihelp-managemessagegroups-param-groupId": "ID del gruppo",
+ "apihelp-managemessagegroups-param-renameMessageKey": "Clave del message a renominar",
+ "apihelp-managemessagegroups-param-messageKey": "Clave del message de reimplaciamento",
+ "apihelp-managemessagegroups-param-operation": "Le operation a exequer. Valores possibile: rename / new",
+ "apihelp-managemessagegroups-param-changesetName": "Nomine del gruppo de modificationes: Predefinition, Non surveliate, MediaWiki, etc.",
+ "apihelp-managemessagegroups-param-changesetModified": "Data e hora Unix del ultime modification del gruppo de modificationes. Si le gruppo de modificationes ha essite modificate post isto, le API levara un error.",
+ "apihelp-managegroupsynchronizationcache-description": "Gerer le cache de synchronisation de gruppos.",
+ "apihelp-managegroupsynchronizationcache-summary": "Gerer le cache de synchronisation de gruppos.",
+ "apihelp-managegroupsynchronizationcache-param-operation": "Le operation a exequer. Valores possibile: resolve",
+ "apihelp-managegroupsynchronizationcache-param-title": "Titulo del message a marcar como resolvite",
+ "apihelp-managegroupsynchronizationcache-param-group": "ID del gruppo del message a marcar como resolvite",
+ "apihelp-translatesandbox-description": "Inscription e gestion de usatores in cassa a sablo.",
+ "apihelp-translatesandbox-summary": "Inscription e gestion de usatores in cassa a sablo.",
+ "apihelp-translatesandbox-param-do": "Lo que facer.",
+ "apihelp-translatesandbox-param-userid": "IDs del usatores a gerer. Usa 0 pro crear.",
+ "apihelp-translatesandbox-param-username": "Nomine de usator al momento de creation del usator.",
+ "apihelp-translatesandbox-param-password": "Contrasigno quando se crea un usator.",
+ "apihelp-translatesandbox-param-email": "Adresse de e-mail quando se crea un usator.",
+ "apihelp-translationaids-description": "Consultar tote le adjutas de traduction.",
+ "apihelp-translationaids-summary": "Consultar tote le adjutas de traduction.",
+ "apihelp-translationaids-param-title": "Titulo complete de un message cognoscite.",
+ "apihelp-translationaids-param-group": "Le gruppo de messages al qual le message pertine. Si es vacue, le gruppo primari se usa.",
+ "apihelp-translationaids-param-prop": "Qual adjutas de traduction a includer.",
+ "apihelp-translationaids-example-1": "Monstrar adjutas pro [[MediaWiki:January/fi]]",
+ "apihelp-translationreview-description": "Marcar traductiones como revidite.",
+ "apihelp-translationreview-summary": "Marcar traductiones como revidite.",
+ "apihelp-translationreview-param-revision": "Le numero del version a revider.",
+ "apihelp-translationreview-example-1": "Revider version 1",
+ "apihelp-translationstash-description": "Adder traductiones al reserva.",
+ "apihelp-translationstash-summary": "Adder traductiones al reserva.",
+ "apihelp-translationstash-param-subaction": "Action.",
+ "apihelp-translationstash-param-title": "Titulo del pagina del unitate de traduction.",
+ "apihelp-translationstash-param-translation": "Traduction facite per le usator.",
+ "apihelp-translationstash-param-metadata": "Objecto JSON.",
+ "apihelp-translationstash-param-username": "Optionalmente, le usator cuje reserva obtener. Solmente usatores privilegiate pote facer isto.",
+ "apihelp-translationstash-example-1": "Adder un traduction al reserva pro [[MediaWiki:Jan/fi]]",
+ "apihelp-translationstash-example-2": "Consultar le reserva",
+ "apihelp-ttmserver-description": "Consultar suggestiones de memorias de traduction.",
+ "apihelp-ttmserver-summary": "Consultar suggestiones de memorias de traduction.",
+ "apihelp-ttmserver-param-service": "Qual del servicios de traduction disponibile usar.",
+ "apihelp-ttmserver-param-sourcelanguage": "Le codice de lingua del texto original.",
+ "apihelp-ttmserver-param-targetlanguage": "Le codice de lingua del suggestion.",
+ "apihelp-ttmserver-param-text": "Le texto pro le qual cercar suggestiones.",
+ "apihelp-ttmserver-example-1": "Obtener suggestiones pro traducer \"Help\" del anglese al finnese",
+ "apihelp-searchtranslations-description": "Cercar traductiones.",
+ "apihelp-searchtranslations-summary": "Cercar traductiones.",
+ "apihelp-searchtranslations-param-service": "Qual del servicios de traduction disponibile usar.",
+ "apihelp-searchtranslations-param-query": "Le texto a cercar.",
+ "apihelp-searchtranslations-param-sourcelanguage": "Le codice de lingua del texto original.",
+ "apihelp-searchtranslations-param-language": "Le codice de lingua del texto a cercar.",
+ "apihelp-searchtranslations-param-group": "Le ID del gruppo in le qual cercar le texto.",
+ "apihelp-searchtranslations-param-filter": "Filtro de stato de traduction de messages.",
+ "apihelp-searchtranslations-param-match": "Trovar qualcunque parola a cercar o tote le parolas a cercar.",
+ "apihelp-searchtranslations-param-case": "Recerca (non) sensibile al differentia inter majusculas e minusculas.",
+ "apihelp-searchtranslations-param-offset": "Position de initio pro le traductiones.",
+ "apihelp-searchtranslations-param-limit": "Dimension del resultato.",
+ "apihelp-searchtranslations-example-1": "Monstrar traductiones pro le lingua.",
+ "apihelp-searchtranslations-example-2": "Monstrar messages non traducite que corresponde al consulta in le lingua original.",
+ "apihelp-translationcheck-description": "Validar le entrata de traduction fornite contra le validatores de messages configurate.",
+ "apihelp-translationcheck-summary": "Validar traductiones.",
+ "apihelp-translationcheck-param-title": "Titulo de pagina con spatio de nomines e codice de lingua.",
+ "apihelp-translationcheck-param-translation": "Le traduction a validar.",
+ "apihelp-translationstats-description": "Obtener statisticas de traduction associate a modificationes de traduction, traductiones active, nove usatores, revisiones de traduction e revisores.",
+ "apihelp-translationstats-summary": "Obtener statisticas de traduction",
+ "apihelp-translationstats-param-count": "Typo de statisticas a requestar",
+ "apihelp-translationstats-param-days": "Numero de dies pro le quales obtener statisticas",
+ "apihelp-translationstats-param-group": "Lista del gruppos pro le quales obtener statisticas.",
+ "apihelp-translationstats-param-language": "Lista del linguas pro le quales obtener statisticas.",
+ "apihelp-translationstats-param-scale": "Scala del statisticas de traduction",
+ "apihelp-translationstats-param-start": "Data de initio a partir del qual obtener le statisticas de traduction. Predefinite al data actual minus le numero de <var>days</var>.",
+ "apihelp-translationstats-example-1": "Obtener le numero de modificationes pro le ultime 30 dies, pro tote le gruppos e linguas",
+ "apihelp-translationstats-example-2": "Obtener le numero de modificationes pro le ultime 30 dies, pro le linguas anglese e francese.",
+ "apierror-translate-changeset-modified": "Un altere usator o processo ha modificate le gruppo de modificationes. Tu cambiamentos non pote esser salveguardate perque illos pote supplantar le sues. Per favor refresca le pagina pro vider le ultime cambiamentos.",
+ "apierror-translate-duplicateaggregategroup": "Le gruppo de messages jam existe.",
+ "apierror-translate-fuzzymessage": "Impossibile revider traductiones marcate como \"fuzzy\".",
+ "apierror-translate-groupreviewdisabled": "Le revision de gruppos de messages non es in uso.",
+ "apierror-translate-invalidaggregategroup": "Gruppo de messages aggregate non valide.",
+ "apierror-translate-invalidaggregategroupname": "Nomine de gruppo de messages aggregate non valide.",
+ "apierror-translate-invalidgroup": "Le gruppo non existe o non es valide.",
+ "apierror-translate-invalidstate": "Le stato requestate non es valide.",
+ "apierror-translate-invalidlanguage": "Le codice de lingua $1 non es valide.",
+ "apierror-translate-invalidupdate": "Actualisation invalide.",
+ "apierror-translate-language-disabled": "Le traduction in $1 es disactivate.",
+ "apierror-translate-language-disabled-reason": "Le traduction in $1 es disactivate: $2",
+ "apierror-translate-nodynamicgroups": "Le gruppos de messages dynamic non es supportate hic.",
+ "apierror-translate-nomessagefortitle": "Le titulo non corresponde a un message traducibile.",
+ "apierror-translate-notranslationservices": "Nulle servicios de traduction public ha essite configurate. Le administrator del wiki debe configurar <var>$wgTranslateTranslationServices</var> correctemente ante que iste function pote esser usate.",
+ "apierror-translate-owntranslation": "Impossibile revider proprie traductiones.",
+ "apierror-translate-sandboxdisabled": "Le function de cassa a sablo non es in uso.",
+ "apierror-translate-smg-nochanges": "Il non ha cambiamentos a processar.",
+ "apierror-translate-unknownmessage": "Message incognite.",
+ "apierror-translate-invalid-changeset-name": "Ha essite passate un nomine de file del gruppo de modificationes non valide: $1",
+ "apierror-translate-invalid-operation": "Operation non valide: $1. Valores valide: $2.",
+ "apierror-translate-addition-key-invalid": "Le clave de message passate pro addition non ha essite trovate in le lista de messages renominate pro le lingua de origine.",
+ "apierror-translate-rename-msg-new": "Solo messages renominate pote esser addite como nove messages.",
+ "apierror-translate-rename-key-invalid": "Le claves de message passate pro renomination non ha essite trovate in le lista de cambiamentos pro le lingua de origine.",
+ "apierror-translate-rename-state-invalid": "Un del messages passate pro renomination debe esser novemente addite e le altere debe esser delite. Statos actual: addition: $1 e deletion: $2.",
+ "apiwarn-translate-alreadyreviewedbyyou": "Ja marcate como revidite per te",
+ "apiwarn-translate-language-disabled-source": "Le lingua de origine de iste gruppo es $1. Per favor selige un altere lingua in le qual traducer.",
+ "apierror-translate-operation-error": "Occurreva un error durante le tractamento del requesta. Error: $1",
+ "apihelp-translationentitysearch-summary": "Cercar messages e gruppos de messages",
+ "apihelp-translationentitysearch-param-entitytype": "Le typo de entitate que se consulta",
+ "apihelp-translationentitysearch-param-query": "Consulta de recerca",
+ "apihelp-translationentitysearch-param-limit": "Numero maxime de resultatos del recerca"
+}
diff --git a/Translate/i18n/api/id.json b/Translate/i18n/api/id.json
new file mode 100644
index 00000000..d1caa9c9
--- /dev/null
+++ b/Translate/i18n/api/id.json
@@ -0,0 +1,115 @@
+{
+ "@metadata": {
+ "authors": [
+ "Daud I.F. Argana",
+ "Gombang"
+ ]
+ },
+ "apihelp-aggregategroups-summary": "Kelola kelompok pesan agregat.",
+ "apihelp-aggregategroups-param-aggregategroup": "ID kelompok pesan agregat.",
+ "apihelp-aggregategroups-param-group": "ID kelompok pesan.",
+ "apihelp-aggregategroups-param-groupname": "Nama kelompok pesan agregat.",
+ "apihelp-aggregategroups-param-groupdescription": "Deskripsi kelompok pesan agregat.",
+ "apihelp-groupreview-param-group": "Kelompok pesan.",
+ "apihelp-groupreview-param-language": "Kode bahasa.",
+ "apihelp-query+languagestats-description": "Statistik bahasa kueri.",
+ "apihelp-query+languagestats-summary": "Statistik bahasa kueri.",
+ "apihelp-query+languagestats-param-language": "Kode bahasa.",
+ "apihelp-query+languagestats-example-1": "Daftar statistik kelengkapan terjemahan untuk bahasa Finlandia",
+ "apihelp-query+messagecollection-description": "Kueri MessageCollection mengenai terjemahan.",
+ "apihelp-query+managemessagegroups-param-groupId": "Id kelompok",
+ "apihelp-query+managemessagegroups-param-messageKey": "Kunci pesan",
+ "apihelp-query+messagecollection-summary": "Kueri MessageCollection mengenai terjemahan.",
+ "apihelp-query+messagecollection-param-group": "Kelompok pesan.",
+ "apihelp-query+messagecollection-param-language": "Kode bahasa.",
+ "apihelp-query+messagecollection-param-limit": "Berapa banyak pesan yang ditampilkan (setelah penyaringan).",
+ "apihelp-query+messagecollection-example-1": "Daftar bahasa yang didukung",
+ "apihelp-query+messagecollection-example-4": "Informasi lebih lanjut mengenai revisi terjemahan terkini untuk kelompok \"page-Example\"",
+ "apihelp-query+messagegroups-example-1": "Tampilkan kelompok pesan",
+ "apihelp-query+messagegroupstats-description": "Kueri statistik kelompok pesan.",
+ "apihelp-query+messagegroupstats-summary": "Kueri statistik kelompok pesan.",
+ "apihelp-query+messagegroupstats-param-group": "ID kelompok pesan.",
+ "apihelp-query+messagegroupstats-example-1": "Daftar statistik kelengkapan terjemahan untuk kelompok \"page-Example\"",
+ "apihelp-query+messagetranslations-description": "Kueri semua terjemahan untuk sebuah pesan.",
+ "apihelp-query+messagetranslations-summary": "Kueri semua terjemahan untuk sebuah pesan.",
+ "apihelp-query+messagetranslations-param-title": "Judul lengkap dari pesan yang diketahui.",
+ "apihelp-query+messagetranslations-example-1": "Daftar terjemahan di wiki untuk \"MediaWiki:January\"",
+ "apihelp-managemessagegroups-param-groupId": "Id kelompok",
+ "apihelp-managemessagegroups-param-renameMessageKey": "Kunci pesan tujuan yang diubah namanya",
+ "apihelp-managemessagegroups-param-messageKey": "Kunci pesan pengganti",
+ "apihelp-managemessagegroups-param-operation": "Operasi yang dilakukan. Nilai-nilai yang mungkin: - rename / new",
+ "apihelp-translatesandbox-param-userid": "ID pengguna dari pengguna yang sedang dikelola. Gunakan 0 untuk pembuatan.",
+ "apihelp-translatesandbox-param-username": "Nama pengguna ketika membuat pengguna.",
+ "apihelp-translatesandbox-param-password": "Kata sandi ketika membuat pengguna.",
+ "apihelp-translatesandbox-param-email": "Surel ketika membuat pengguna.",
+ "apihelp-translationaids-description": "Kueri semua bantuan terjemahan.",
+ "apihelp-translationaids-summary": "Kueri semua bantuan terjemahan.",
+ "apihelp-translationaids-param-title": "Judul lengkap dari pesan yang diketahui.",
+ "apihelp-translationaids-param-group": "Kelompok pesan pemilik pesan tersebut. Jika kosong maka kelompok utama digunakan.",
+ "apihelp-translationaids-param-prop": "Pembantu terjemahan mana yang dimasukkan.",
+ "apihelp-translationaids-example-1": "Tampilkan bantuan untuk [[MediaWiki:January/fi]]",
+ "apihelp-translationreview-description": "Tandai terjemahan sebagai telah ditinjau.",
+ "apihelp-translationreview-summary": "Tandai terjemahan sebagai telah ditinjau.",
+ "apihelp-translationreview-param-revision": "Nomor revisi untuk ditinjau.",
+ "apihelp-translationreview-example-1": "Tinjau revisi 1",
+ "apihelp-translationstash-description": "Tambahkan terjemahan ke kotak pasir.",
+ "apihelp-translationstash-summary": "Tambahkan terjemahan ke kotak pasir.",
+ "apihelp-translationstash-param-subaction": "Tindakan.",
+ "apihelp-translationstash-param-title": "Judul halaman satuan terjemahan.",
+ "apihelp-translationstash-param-translation": "Terjemahan yang dibuat oleh pengguna.",
+ "apihelp-translationstash-param-metadata": "Objek JSON.",
+ "apihelp-translationstash-example-1": "Tambahakan terjemahan ke kotak pasir untuk [[MediaWiki:Jan/fi]]",
+ "apihelp-translationstash-example-2": "Kueri kotak pasir",
+ "apihelp-ttmserver-description": "Kueri saran dari memori terjemahan.",
+ "apihelp-ttmserver-summary": "Kueri saran dari memori terjemahan.",
+ "apihelp-ttmserver-param-service": "Layanan terjemahan tersedia mana yang digunakan.",
+ "apihelp-ttmserver-param-sourcelanguage": "Kode bahasa teks sumber.",
+ "apihelp-ttmserver-param-targetlanguage": "Kode bahasa saran.",
+ "apihelp-ttmserver-param-text": "Teks yang dicarikan saran",
+ "apihelp-ttmserver-example-1": "Dapatkan saran untuk menerjemahkan \"Help\" dari bahasa Inggris ke bahasa Finlandia",
+ "apihelp-searchtranslations-description": "Cari terjemahan.",
+ "apihelp-searchtranslations-summary": "Cari terjemahan.",
+ "apihelp-searchtranslations-param-service": "Layanan terjemahan tersedia mana yang digunakan.",
+ "apihelp-searchtranslations-param-query": "String yang dicari.",
+ "apihelp-searchtranslations-param-sourcelanguage": "Kode bahasa teks sumber.",
+ "apihelp-searchtranslations-param-language": "Kode bahasa tempat mencari string.",
+ "apihelp-searchtranslations-param-group": "ID kelompok tempat mencari string.",
+ "apihelp-searchtranslations-param-filter": "Filter status terjemahan pesan.",
+ "apihelp-searchtranslations-param-match": "Cocok dengan salah satu/semua kata pencarian.",
+ "apihelp-searchtranslations-param-case": "Pencarian (tidak) peka kapital.",
+ "apihelp-searchtranslations-param-limit": "Ukuran hasil.",
+ "apihelp-searchtranslations-example-1": "Tampilkan terjemahan untuk bahasanya.",
+ "apihelp-searchtranslations-example-2": "Tampilkan pesan tidak diterjemahkan yang cocok dengan kueri di bahasa sumber.",
+ "apihelp-translationcheck-summary": "Validasi terjemahan.",
+ "apihelp-translationcheck-param-title": "Judul halaman dengan ruang nama dan kode bahasa.",
+ "apihelp-translationcheck-param-translation": "Terjemahan yang divalidasi.",
+ "apihelp-translationstats-description": "Ambil statistik terjemahan yang berkaitan dengan suntingan terjemahan, terjemahan yang aktif, pengguna baru, tinjauan terjemahan dan peninjau.",
+ "apihelp-translationstats-summary": "Ambil statistik terjemahan",
+ "apihelp-translationstats-param-count": "Tipe statistik yang diminta",
+ "apihelp-translationstats-param-days": "Banyak hari yang diambil statistiknya",
+ "apihelp-translationstats-param-group": "Daftar kelompok yang diambil statistiknya.",
+ "apihelp-translationstats-param-language": "Daftar bahasa yang diambil statistiknya.",
+ "apihelp-translationstats-example-1": "Ambil banyak suntingan pada 30 hari terakhir, untuk semua kelompok dan bahasa",
+ "apihelp-translationstats-example-2": "Ambil banyak suntingan pada 30 hari terakhir, untuk bahasa Inggris dan Prancis.",
+ "apierror-translate-duplicateaggregategroup": "Kelompok pesan sudah ada",
+ "apierror-translate-groupreviewdisabled": "Tinjauan kelompok pesan tidak sedang digunakan.",
+ "apierror-translate-invalidaggregategroup": "Kelompok pesan agregat tidak valid",
+ "apierror-translate-invalidaggregategroupname": "Nama kelompok pesan agregat tidak valid",
+ "apierror-translate-invalidgroup": "Kelompok tidak ada atau tidak valid",
+ "apierror-translate-invalidlanguage": "Kode bahasa $1 tidak valid.",
+ "apierror-translate-invalidupdate": "Pembaruan tidak valid",
+ "apierror-translate-language-disabled": "Terjemahan ke $1 dimatikan.",
+ "apierror-translate-language-disabled-reason": "Terjemahan ke $1 dimatikan: $2",
+ "apierror-translate-nodynamicgroups": "Kelompok pesan dinamis tidak didukung di sini",
+ "apierror-translate-notranslationservices": "Tidak ada layanan terjemahan publik yang dikonfigurasi. Administrator wiki perlu mengatur <var>$wgTranslateTranslationServices</var> dengan benar sebelum fitur ini bisa digunakan.",
+ "apierror-translate-owntranslation": "Tidak bisa meninjau terjemahan sendiri",
+ "apierror-translate-sandboxdisabled": "Fitur kotak pasir tidak sedang digunakan",
+ "apierror-translate-smg-nochanges": "Tidak ada perubahan yang dapat diproses.",
+ "apierror-translate-unknownmessage": "Pesan tidak dikenal",
+ "apierror-translate-invalid-operation": "Operasi tidak valid: $1. Nilai-nilai yang valid - $2.",
+ "apiwarn-translate-alreadyreviewedbyyou": "Sudah ditandai sebagai tertinjau oleh Anda",
+ "apiwarn-translate-language-disabled-source": "Bahasa sumber dari kelompok ini adalah $1. Tolong pilih bahasa lain sebagai tujuan terjemahan.",
+ "apihelp-translationentitysearch-summary": "Mencari kelompok pesan dan pesan",
+ "apihelp-translationentitysearch-param-query": "Mencari kueri",
+ "apihelp-translationentitysearch-param-limit": "Banyak hasil pencarian maksimal"
+}
diff --git a/Translate/i18n/api/io.json b/Translate/i18n/api/io.json
new file mode 100644
index 00000000..aeb4a040
--- /dev/null
+++ b/Translate/i18n/api/io.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joao Xavier"
+ ]
+ },
+ "apihelp-groupreview-param-language": "Linguala kodexo.",
+ "apihelp-translationstash-param-subaction": "Agado.",
+ "apihelp-translationstash-example-1": "Adjuntez tradukuro a rezervajo por [[MediaWiki:Jan/fi]]",
+ "apiwarn-translate-alreadyreviewedbyyou": "Vu ja indikis kom revizita"
+}
diff --git a/Translate/i18n/api/is.json b/Translate/i18n/api/is.json
new file mode 100644
index 00000000..55221e12
--- /dev/null
+++ b/Translate/i18n/api/is.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "MyraMidnight",
+ "Sveinn í Felli"
+ ]
+ },
+ "apihelp-groupreview-param-group": "Þýðingahópur.",
+ "apihelp-groupreview-param-language": "Tungumálakóði.",
+ "apihelp-query+languagestats-param-language": "Tungumálakóði.",
+ "apihelp-query+messagecollection-param-group": "Þýðingahópur.",
+ "apihelp-query+messagecollection-param-language": "Tungumálakóði.",
+ "apihelp-query+messagecollection-param-limit": "Hversu mörg skilaboð viltu sjá (eftir síun).",
+ "apihelp-query+messagecollection-example-1": "Listi yfir studd tungumál",
+ "apihelp-query+messagetranslations-param-title": "Heildartitill á þekktum skilaboðum.",
+ "apihelp-translatesandbox-param-do": "Hvað skal gera.",
+ "apihelp-translatesandbox-param-username": "Notendanafn við sköpun notanda.",
+ "apihelp-translatesandbox-param-password": "Lykilorð við sköpun notanda.",
+ "apihelp-translatesandbox-param-email": "Netfang við sköpun notanda.",
+ "apihelp-translationaids-param-title": "Heildartitill á þekktum skilaboðum.",
+ "apihelp-translationstash-param-subaction": "Aðgerð.",
+ "apihelp-searchtranslations-description": "Leita í þýðingum",
+ "apihelp-searchtranslations-summary": "Leita í þýðingum",
+ "apierror-translate-unknownmessage": "Ókunn skilaboð"
+}
diff --git a/Translate/i18n/api/it.json b/Translate/i18n/api/it.json
new file mode 100644
index 00000000..ed8578aa
--- /dev/null
+++ b/Translate/i18n/api/it.json
@@ -0,0 +1,66 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ajeje Brazorf",
+ "Anto",
+ "Beta16",
+ "F. Cosoleto",
+ "Ricordisamoa",
+ "Statix64",
+ "Valerio Bozzolan"
+ ]
+ },
+ "apihelp-aggregategroups-description": "Gestisci gruppi di messaggi aggregati.\n\nPuoi aggiungere e rimuovere gruppi di messaggi aggregati e associare o dissociare i gruppi di messaggi l'uno dall'altro (uno alla volta).",
+ "apihelp-aggregategroups-param-do": "Cosa fare il gruppo messaggi aggregato.",
+ "apihelp-aggregategroups-param-aggregategroup": "ID gruppo messaggi aggregato.",
+ "apihelp-aggregategroups-param-group": "ID gruppo messaggi.",
+ "apihelp-aggregategroups-param-groupname": "Nome gruppo messaggi aggregato.",
+ "apihelp-aggregategroups-param-groupdescription": "Descrizione gruppo messaggi aggregato.",
+ "apihelp-aggregategroups-example-1": "Associa un gruppo",
+ "apihelp-groupreview-param-group": "Gruppo di messaggi.",
+ "apihelp-groupreview-param-language": "Codice lingua.",
+ "apihelp-groupreview-param-state": "Il nuovo stato per il gruppo.",
+ "apihelp-groupreview-example-1": "Imposta lo stato della traduzione in tedesco per il gruppo messaggi \"group-Example\" come pronto",
+ "apihelp-query+languagestats-param-language": "Codice lingua.",
+ "apihelp-query+languagestats-example-1": "Elenco delle statistiche di completamento traduzione per il finlandese",
+ "apihelp-query+messagecollection-param-group": "Gruppo di messaggi.",
+ "apihelp-query+messagecollection-param-language": "Codice lingua.",
+ "apihelp-query+messagecollection-param-limit": "Il numero di messaggi da visualizzare (dopo applicazione del filtro).",
+ "apihelp-query+messagecollection-example-1": "Elenco delle lingue supportate",
+ "apihelp-query+messagegroups-summary": "Restituisce informazioni sui gruppi di messaggi.",
+ "apihelp-query+messagegroups-example-1": "Mostra gruppi di messaggi",
+ "apihelp-query+messagegroupstats-param-group": "ID gruppo messaggi.",
+ "apihelp-query+messagegroupstats-param-suppressempty": "Non mostrare le lingue che non hanno alcuna traduzione",
+ "apihelp-query+messagetranslations-summary": "Interroga tutte le traduzioni per un singolo messaggio.",
+ "apihelp-query+messagetranslations-param-title": "Titolo completo di un messaggio conosciuto.",
+ "apihelp-translatesandbox-param-do": "Che cosa fare.",
+ "apihelp-translationaids-param-title": "Titolo completo di un messaggio conosciuto.",
+ "apihelp-translationstash-param-subaction": "Azione.",
+ "apihelp-translationstash-param-metadata": "Oggetto JSON.",
+ "apihelp-ttmserver-param-service": "Quale dei disponibili servizi di traduzione usare.",
+ "apihelp-ttmserver-param-sourcelanguage": "Il codice della lingua del testo di partenza.",
+ "apihelp-ttmserver-param-targetlanguage": "Il codice della lingua del suggerimento.",
+ "apihelp-ttmserver-param-text": "Testo per il quale trovare suggerimenti.",
+ "apihelp-ttmserver-example-1": "Ottieni suggerimenti per la traduzione di \"help\" dall'inglese al finlandese",
+ "apihelp-searchtranslations-description": "Cerca traduzioni.",
+ "apihelp-searchtranslations-summary": "Cerca traduzioni.",
+ "apihelp-searchtranslations-param-limit": "Dimensione del risultato.",
+ "apihelp-searchtranslations-example-1": "Mostra le traduzioni per la lingua.",
+ "apierror-translate-duplicateaggregategroup": "Il gruppo messaggi esiste già",
+ "apierror-translate-fuzzymessage": "Non puoi revisionare traduzioni da aggiornare",
+ "apierror-translate-groupreviewdisabled": "Revisione gruppo messaggi non in uso.",
+ "apierror-translate-invalidaggregategroup": "Gruppo messaggi aggregati non valido",
+ "apierror-translate-invalidaggregategroupname": "Nome del gruppo messaggi aggregati non valido",
+ "apierror-translate-invalidgroup": "Gruppo non esistente o non valido",
+ "apierror-translate-invalidstate": "Lo stato richiesto non è valido.",
+ "apierror-translate-invalidlanguage": "Il codice lingua $1 non è valido.",
+ "apierror-translate-invalidupdate": "Aggiornamento non valido",
+ "apierror-translate-language-disabled": "Le traduzioni in $1 sono disabilitate.",
+ "apierror-translate-nodynamicgroups": "I gruppi messaggi dinamici non sono supportati qui",
+ "apierror-translate-nomessagefortitle": "Il titolo non corrisponde a un messaggio traducibile",
+ "apierror-translate-owntranslation": "Non puoi revisionare le tue traduzioni",
+ "apierror-translate-sandboxdisabled": "La funzione Sandbox non è in uso",
+ "apierror-translate-unknownmessage": "Messaggio sconosciuto",
+ "apiwarn-translate-alreadyreviewedbyyou": "Già contrassegnata come revisionata da te",
+ "apihelp-translationentitysearch-param-limit": "Numero massimo di risultati della ricerca"
+}
diff --git a/Translate/i18n/api/ja.json b/Translate/i18n/api/ja.json
new file mode 100644
index 00000000..85f533ef
--- /dev/null
+++ b/Translate/i18n/api/ja.json
@@ -0,0 +1,108 @@
+{
+ "@metadata": {
+ "authors": [
+ "Funa-enpitu",
+ "Omotecho",
+ "RYOUMA1117",
+ "Shirayuki",
+ "Sujiniku"
+ ]
+ },
+ "apihelp-aggregategroups-description": "メッセージ群の集計は追加もしくは削除の対象で、メッセージ群を関連付けまたは分離できます(処理は一度に1件ずつ)。",
+ "apihelp-aggregategroups-summary": "メッセージ群の集計を管理。",
+ "apihelp-aggregategroups-extended-description": "メッセージ群の集計は追加もしくは削除の対象で、メッセージ群を関連付けまたは分離できます(処理は一度に1件ずつ)。",
+ "apihelp-aggregategroups-param-do": "メッセージ群の集計とは。",
+ "apihelp-aggregategroups-param-aggregategroup": "メッセージ群IDを集計。",
+ "apihelp-aggregategroups-param-group": "メッセージ群の ID。",
+ "apihelp-aggregategroups-param-groupname": "メッセージ群名を集計。",
+ "apihelp-aggregategroups-param-groupdescription": "メッセージ群の説明をまとめる。",
+ "apihelp-aggregategroups-example-1": "メッセージ群を関連付ける",
+ "apihelp-groupreview-description": "メッセージ群のワークフローの状態を設定。",
+ "apihelp-groupreview-summary": "メッセージ群のワークフローの状態を設定。",
+ "apihelp-groupreview-param-group": "メッセージ群。",
+ "apihelp-groupreview-param-language": "言語コード。",
+ "apihelp-groupreview-param-state": "メッセージ群の新しい状態。",
+ "apihelp-groupreview-example-1": "メッセージ群「group-Example」に対するドイツ語翻訳の状態を準備完了に設定",
+ "apihelp-query+languagestats-description": "クエリ言語統計。",
+ "apihelp-query+languagestats-summary": "クエリ言語統計。",
+ "apihelp-query+languagestats-param-language": "言語コード。",
+ "apihelp-query+languagestats-example-1": "フィンランド語の翻訳完了の統計一覧",
+ "apihelp-query+messagecollection-description": "翻訳に関する MessageCollection のクエリを実行。",
+ "apihelp-query+managemessagegroups-param-changesetName": "セット名の変更 - 既定 / 無人 / MediaWiki など。",
+ "apihelp-query+messagecollection-summary": "翻訳に関する MessageCollection のクエリを実行。",
+ "apihelp-query+messagecollection-param-group": "メッセージ群。",
+ "apihelp-query+messagecollection-param-language": "言語コード。",
+ "apihelp-query+messagecollection-param-limit": "表示するメッセージ件数(絞り込み後)",
+ "apihelp-query+messagecollection-example-1": "サポートする言語一覧",
+ "apihelp-query+messagecollection-example-2": "「group-Example」グループにおける必須メッセージ定義の一覧",
+ "apihelp-query+messagecollection-example-3": "「group-Example」グループにタグ付けされたフィンランド語の選択メッセージの一覧",
+ "apihelp-query+messagecollection-example-4": "「group-Example」グループにおける翻訳の最近の更新の詳細",
+ "apihelp-query+messagegroups-description": "メッセージ群に関して返す情報。\n\n利用者言語のパラメーターは言語依存の部分の出力に影響を与えますのでご注意ください。",
+ "apihelp-query+messagegroups-summary": "メッセージ群に関する情報を返す。",
+ "apihelp-query+messagegroups-extended-description": "利用者言語のパラメーターは言語依存の部分の出力に影響を与えますのでご注意ください。",
+ "apihelp-query+messagegroups-param-format": "樹状構造の場合、メッセージグループは樹状の複数の場所に存在できます。",
+ "apihelp-query+messagegroups-param-iconsize": "ラスター化したグループアイコンの最適なサイズ。",
+ "apihelp-query+messagegroups-example-1": "メッセージ群の表示",
+ "apihelp-query+messagegroupstats-description": "メッセージ群の統計クエリを実行。",
+ "apihelp-query+messagegroupstats-summary": "クエリメッセージ群の統計。",
+ "apihelp-query+messagegroupstats-param-group": "メッセージ群の ID。",
+ "apihelp-query+messagegroupstats-example-1": "「page-Example」グループの翻訳完了統計の一覧",
+ "apihelp-query+messagetranslations-description": "単一のメッセージに対するすべての翻訳をクエリする。",
+ "apihelp-query+messagetranslations-summary": "単一のメッセージに対するすべての翻訳をクエリする。",
+ "apihelp-query+messagetranslations-example-1": "\"MediaWiki:January\"に対するウィキ上の翻訳一覧",
+ "apihelp-managemessagegroups-param-changesetName": "セット名の変更 - 既定 / 無人 / MediaWiki など。",
+ "apihelp-translatesandbox-description": "サインアップしてサンドボックス利用者を管理。",
+ "apihelp-translatesandbox-summary": "サインアップしてサンドボックス利用者を管理。",
+ "apihelp-translatesandbox-param-userid": "管理対象の利用者の利用者ID。作成には「0」を使います。",
+ "apihelp-translatesandbox-param-username": "利用者を作成する時の利用者名。",
+ "apihelp-translatesandbox-param-password": "利用者を作成する時のパスワード。",
+ "apihelp-translatesandbox-param-email": "利用者を作成するときにメールを送信。",
+ "apihelp-translationaids-description": "すべての翻訳補助機能をクエリする。",
+ "apihelp-translationaids-summary": "すべての翻訳補助機能をクエリする。",
+ "apihelp-translationaids-param-group": "メッセージが属するメッセージ群。空欄の場合は親群を採用。",
+ "apihelp-translationaids-param-prop": "採用する翻訳ヘルパーの指定。",
+ "apihelp-translationreview-description": "翻訳を査読済みにする。",
+ "apihelp-translationreview-summary": "翻訳を査読済みにする。",
+ "apihelp-translationreview-param-revision": "査読対象の版番号。",
+ "apihelp-translationstash-param-translation": "この利用者が手がけた翻訳。",
+ "apihelp-translationstash-param-metadata": "JSON オブジェクト。",
+ "apihelp-ttmserver-param-service": "利用できる翻訳サービスから選択。",
+ "apihelp-ttmserver-param-sourcelanguage": "翻訳原文の言語コード。",
+ "apihelp-ttmserver-param-targetlanguage": "翻訳原文の言語コード。",
+ "apihelp-ttmserver-param-text": "翻訳原文を探す文字列。",
+ "apihelp-ttmserver-example-1": "フィンランド語",
+ "apihelp-searchtranslations-description": "翻訳の検索",
+ "apihelp-searchtranslations-summary": "翻訳を検索する。",
+ "apihelp-searchtranslations-param-service": "利用できる翻訳サービスから選択。",
+ "apihelp-searchtranslations-param-query": "検索する文字列。",
+ "apihelp-searchtranslations-param-sourcelanguage": "翻訳原文の言語コード。",
+ "apihelp-searchtranslations-param-language": "文字列を検索する言語コード。",
+ "apihelp-searchtranslations-param-group": "文字列を検索するグループID。",
+ "apihelp-searchtranslations-param-filter": "メッセージの翻訳状態のフィルタ。",
+ "apihelp-searchtranslations-param-match": "任意/すべて の検索ワードのマッチ",
+ "apihelp-searchtranslations-param-case": "大文字小文字を識別 (しない)。",
+ "apihelp-searchtranslations-param-limit": "詮索結果のサイズ。",
+ "apihelp-searchtranslations-example-1": "選択言語の翻訳を表示。",
+ "apihelp-searchtranslations-example-2": "翻訳原文の言語クエリと対照して未翻訳のメッセージを表示。",
+ "apihelp-translationcheck-summary": "翻訳を検証する。",
+ "apihelp-translationcheck-param-title": "名前空間と言語コードとページ名。",
+ "apihelp-translationcheck-param-translation": "検証対象の翻訳。",
+ "apierror-translate-duplicateaggregategroup": "メッセージ群はすでに存在します",
+ "apierror-translate-groupreviewdisabled": "メッセージ群の査読は未使用です。",
+ "apierror-translate-invalidaggregategroup": "無効なメッセージ群の集計",
+ "apierror-translate-invalidaggregategroupname": "無効なメッセージ群の集計の名前",
+ "apierror-translate-invalidgroup": "存在しないもしくは無効なグループ",
+ "apierror-translate-invalidstate": "要求された状態は無効です。",
+ "apierror-translate-invalidlanguage": "言語コード$1は無効です。",
+ "apierror-translate-invalidupdate": "更新が無効です",
+ "apierror-translate-language-disabled": "$1への翻訳はできません。",
+ "apierror-translate-language-disabled-reason": "$1への翻訳はできません。$2",
+ "apierror-translate-nodynamicgroups": "動的メッセージ群はここではサポートしていません",
+ "apierror-translate-nomessagefortitle": "題名が翻訳可能なメッセージと対応しません",
+ "apierror-translate-owntranslation": "自分の翻訳の査読はできません",
+ "apierror-translate-sandboxdisabled": "サンドボックスの機能は使用できません",
+ "apierror-translate-smg-nochanges": "処理する変更はありません。",
+ "apierror-translate-invalid-operation": "無効な操作:$1。有効な値 - $2。",
+ "apiwarn-translate-alreadyreviewedbyyou": "あなたの査読済みと記録があります",
+ "apiwarn-translate-language-disabled-source": "このメッセージ群の翻訳原文の言語は$1です。翻訳するには別の言語を選択してください。"
+}
diff --git a/Translate/i18n/api/ka.json b/Translate/i18n/api/ka.json
new file mode 100644
index 00000000..c77c32da
--- /dev/null
+++ b/Translate/i18n/api/ka.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "David1010",
+ "MIKHEIL"
+ ]
+ },
+ "apihelp-aggregategroups-param-group": "შეტყობინების ჯგუფის ID.",
+ "apihelp-groupreview-param-group": "შეტყობინების ჯგუფი.",
+ "apihelp-groupreview-param-language": "ენის კოდი.",
+ "apihelp-query+languagestats-param-language": "ენის კოდი.",
+ "apihelp-query+messagecollection-param-group": "შეტყობინების ჯგუფი.",
+ "apihelp-query+messagecollection-param-language": "ენის კოდი.",
+ "apihelp-query+messagecollection-example-1": "ხელმისაწვდომ ენათა სია",
+ "apihelp-ttmserver-param-targetlanguage": "შემოთავაზების ენის კოდი."
+}
diff --git a/Translate/i18n/api/kab.json b/Translate/i18n/api/kab.json
new file mode 100644
index 00000000..9a0e09a4
--- /dev/null
+++ b/Translate/i18n/api/kab.json
@@ -0,0 +1,37 @@
+{
+ "@metadata": {
+ "authors": [
+ "Belkacem77"
+ ]
+ },
+ "apihelp-groupreview-param-group": "Agraw n yiznan.",
+ "apihelp-groupreview-param-language": "Tangalt n tutlayt.",
+ "apihelp-query+languagestats-description": "Asuter n tidaddanin n tutlayt.",
+ "apihelp-query+languagestats-summary": "Asuter n tidaddanin n tutlayt.",
+ "apihelp-query+languagestats-param-language": "Tangalt n tutlayt.",
+ "apihelp-query+messagecollection-param-group": "Agraw n yiznan.",
+ "apihelp-query+messagecollection-param-language": "Tangalt n tutlayt.",
+ "apihelp-query+messagecollection-example-1": "Tabdart n tutlayin yettwasefraken",
+ "apihelp-query+messagegroups-example-1": "Sken igrawen n yiznan",
+ "apihelp-query+messagetranslations-param-title": "Azwel ummid n yizen yettwassnen.",
+ "apihelp-query+messagetranslations-example-1": "Abdart n tsuqilin deg uwiki i \"MediaWiki:Yennayer\"",
+ "apihelp-translatesandbox-param-do": "Acu ara txedmeḍ.",
+ "apihelp-translatesandbox-param-userid": "Isulay n iseqdacen yettwasefraken. Seqdec 0 i tmerna.",
+ "apihelp-translatesandbox-param-username": "Ismawen n iseqdacen di tmerna n useqdac.",
+ "apihelp-translatesandbox-param-password": "Awal uffir di tmerna n useqdac.",
+ "apihelp-translatesandbox-param-email": "Imayl di tmerna n useqdac.",
+ "apihelp-translationaids-description": "Anadai n tallelt n tsuqilt",
+ "apihelp-translationaids-summary": "Anadi n tallelt n tsuqilt.",
+ "apihelp-translationaids-param-title": "Azwel ummid n yizen yettwassnen.",
+ "apihelp-translationaids-param-group": "Agraw n yiznan aniɣer ittekka yizen. Ma d ilem, ihi agraw agejdan yettwaseqdec.",
+ "apihelp-translationaids-param-prop": "Anta tallelt n tsuqilt ara yeddun.",
+ "apihelp-ttmserver-param-sourcelanguage": "Tangalt n tutlayt n uḍris n uɣbalu.",
+ "apihelp-searchtranslations-description": "Nadi tisuqilin.",
+ "apihelp-searchtranslations-param-service": "Anwa imeẓla n tsuqilt yellan ara tesqedceḍ.",
+ "apihelp-searchtranslations-param-sourcelanguage": "Tangalt n tutlayt n uḍris n uɣbalu.",
+ "apihelp-searchtranslations-param-filter": "Imzizdeg n waddad n tsuqilt n yizen.",
+ "apihelp-searchtranslations-example-1": "Sken tisuqilin i tutlayt.",
+ "apierror-translate-fuzzymessage": "Ur tezmireḍ ara ad alseḍ taɣuri n tsuqilt ur yemmiden ara",
+ "apierror-translate-language-disabled": "Tasuqilt ar tutlayt-agi tensa",
+ "apierror-translate-owntranslation": "Ur tezmireḍ ara ad alseḍ taɣuri n tsuqilt i teggid"
+}
diff --git a/Translate/i18n/api/kjp.json b/Translate/i18n/api/kjp.json
new file mode 100644
index 00000000..c35733e8
--- /dev/null
+++ b/Translate/i18n/api/kjp.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Rul1902"
+ ]
+ },
+ "apihelp-query+messagecollection-param-group": "ပ်ုယုံ့ဆ်ုပြိုင့်ကုံလွာဲ"
+}
diff --git a/Translate/i18n/api/kk-cyrl.json b/Translate/i18n/api/kk-cyrl.json
new file mode 100644
index 00000000..ac33f3dd
--- /dev/null
+++ b/Translate/i18n/api/kk-cyrl.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "Arystanbek"
+ ]
+ },
+ "apihelp-query+languagestats-param-language": "Тіл коды",
+ "apihelp-query+messagecollection-param-group": "Хабарлама тобы.",
+ "apihelp-query+messagecollection-param-language": "Тіл коды.",
+ "apihelp-query+messagecollection-param-limit": "Қанша хабарлама көрсету (сүзгілеуден кейін).",
+ "apihelp-query+messagegroups-example-1": "Хабарлама топтарфн көрсету",
+ "apihelp-query+messagegroupstats-param-group": "Хабарлама топ сәйкестендіогіші.",
+ "apihelp-translatesandbox-param-username": "Қатысушы есімі қатысушы бастау кезінде.",
+ "apihelp-translatesandbox-param-password": "Құптя сөз қатысушы пайдалану кезінде.",
+ "apihelp-translatesandbox-param-email": "Е-почта қатысушы бастау кезінде.",
+ "apihelp-translationstash-param-subaction": "Әрекет",
+ "apihelp-translationstash-param-title": "Аударма бірлік бетінің тақырыбы.",
+ "apihelp-translationstash-param-translation": "Қатысушы арқылы жасадған аудармалар.",
+ "apihelp-translationstash-param-metadata": "JSON обьект."
+}
diff --git a/Translate/i18n/api/km.json b/Translate/i18n/api/km.json
new file mode 100644
index 00000000..0d184366
--- /dev/null
+++ b/Translate/i18n/api/km.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "គីមស៊្រុន"
+ ]
+ },
+ "apihelp-query+languagestats-param-language": "កូដ​ភាសា។"
+}
diff --git a/Translate/i18n/api/ko.json b/Translate/i18n/api/ko.json
new file mode 100644
index 00000000..ec5e1fde
--- /dev/null
+++ b/Translate/i18n/api/ko.json
@@ -0,0 +1,46 @@
+{
+ "@metadata": {
+ "authors": [
+ "LiteHell",
+ "Revi",
+ "Ykhwong",
+ "아라"
+ ]
+ },
+ "apihelp-aggregategroups-param-group": "메시지 그룹 ID.",
+ "apihelp-groupreview-param-group": "메시지 그룹.",
+ "apihelp-groupreview-param-language": "언어 코드.",
+ "apihelp-query+languagestats-param-language": "언어 코드입니다.",
+ "apihelp-query+languagestats-param-group": "메시지 그룹 ID입니다.",
+ "apihelp-query+managemessagegroups-param-groupId": "그룹 Id",
+ "apihelp-query+managemessagegroups-param-messageKey": "메시지 키",
+ "apihelp-query+messagecollection-param-group": "메시지 그룹.",
+ "apihelp-query+messagecollection-param-language": "언어 코드.",
+ "apihelp-query+messagecollection-example-1": "지원하는 언어 목록",
+ "apihelp-query+messagegroups-summary": "메시지 그룹에 관한 정보를 반환합니다.",
+ "apihelp-query+messagegroupstats-param-group": "메시지 그룹 ID입니다.",
+ "apihelp-managemessagegroups-param-groupId": "그룹 Id",
+ "apihelp-translationreview-summary": "번역을 검토한 것으로 표시합니다.",
+ "apihelp-ttmserver-param-targetlanguage": "제안의 언어 코드입니다.",
+ "apihelp-searchtranslations-description": "번역을 검색합니다.",
+ "apihelp-searchtranslations-summary": "번역을 검색합니다.",
+ "apihelp-searchtranslations-param-query": "검색할 문자열입니다.",
+ "apihelp-searchtranslations-param-limit": "결과의 크기입니다.",
+ "apihelp-translationcheck-summary": "번역을 확인합니다.",
+ "apihelp-translationcheck-param-title": "이름공간과 언어 코드가 있는 문서 제목입니다.",
+ "apihelp-translationcheck-param-translation": "확인할 번역입니다.",
+ "apierror-translate-duplicateaggregategroup": "메시지 그룹이 이미 존재합니다",
+ "apierror-translate-invalidgroup": "그룹이 존재하지 않거나 잘못되었습니다",
+ "apierror-translate-invalidlanguage": "$1 언어 코드는 유효하지 않습니다.",
+ "apierror-translate-invalidupdate": "유효하지 않은 업데이트",
+ "apierror-translate-language-disabled": "$1로의 번역이 비활성화되어 있습니다.",
+ "apierror-translate-language-disabled-reason": "$1로의 번역이 비활성화되어 있습니다: $2",
+ "apierror-translate-nomessagefortitle": "제목이 번역 가능한 메시지와 일치하지 않습니다",
+ "apierror-translate-notranslationservices": "공용 번역 서비스가 구성되지 않았습니다. 위키 관리자는 <var>$wgTranslateTranslationServices</var>를 적절하게 설정해야 이 기능을 사용할 수 있습니다.",
+ "apierror-translate-sandboxdisabled": "연습장 기능을 사용하고 있지 않습니다",
+ "apierror-translate-unknownmessage": "알 수 없는 메시지",
+ "apiwarn-translate-language-disabled-source": "이 그룹의 원본 언어는 $1입니다. 번역 결과물에 쓰일 다른 언어를 선택해 주십시오.",
+ "apihelp-translationentitysearch-summary": "메시지 그룹 및 메시지 검색",
+ "apihelp-translationentitysearch-param-query": "검색 쿼리",
+ "apihelp-translationentitysearch-param-limit": "검색 결과 최대 수"
+}
diff --git a/Translate/i18n/api/ksh.json b/Translate/i18n/api/ksh.json
new file mode 100644
index 00000000..b3d83d11
--- /dev/null
+++ b/Translate/i18n/api/ksh.json
@@ -0,0 +1,81 @@
+{
+ "@metadata": {
+ "authors": [
+ "Purodha"
+ ]
+ },
+ "apihelp-aggregategroups-description": "Sammeljroppe verwallde.\n\nMer kann Sammeljropp fott schmiiße un aanlähje, un Nohreeschtejroppe eruß nämme un eren donn, äver blohß immer ein op eijmohl.",
+ "apihelp-aggregategroups-param-do": "Wat wells De met dä Dä Sammeljropp jedonn han?",
+ "apihelp-aggregategroups-param-aggregategroup": "Dä Sammeljropp iehre Kännong.",
+ "apihelp-aggregategroups-param-group": "Dä Nohreeschtejropp iehr Kännong.",
+ "apihelp-aggregategroups-param-groupname": "Dä Sammeljropp iehre Nahme.",
+ "apihelp-aggregategroups-param-groupdescription": "Dä Sammeljropp iehre Beschrievong.",
+ "apihelp-aggregategroups-example-1": "Donn en Jropp zohoodene",
+ "apihelp-groupreview-description": "Donn för en Sammeljropp dä iehre Zohschtänd för et Beärbeide faßlähje.",
+ "apihelp-groupreview-param-group": "De Nohreeschtejrop.",
+ "apihelp-groupreview-param-language": "Et Shprohcheköözel.",
+ "apihelp-groupreview-param-state": "Der neue Zohschtand för di Jropp.",
+ "apihelp-groupreview-example-1": "Makehr, dat de Jropp „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">group-Example</code>“ parraht för Deutsch wöhr.",
+ "apihelp-query+languagestats-description": "Frohch noh de Schtateßeke vun de Schprohche.",
+ "apihelp-query+languagestats-param-language": "Et Shprohcheköözel.",
+ "apihelp-query+languagestats-example-1": "En Lesß met de Schtateßteke för Finnesch",
+ "apihelp-query+messagecollection-description": "Frohch noh de Övversäzonge en dä Jropp <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">MessageCollection</code>.",
+ "apihelp-query+messagecollection-param-group": "De Nohreeschtejrop.",
+ "apihelp-query+messagecollection-param-language": "Et Shprohcheköözel.",
+ "apihelp-query+messagecollection-param-limit": "Wi vill vun de ußjesöhk Täxte un Nohreeschte sull aanjezeisch wääde?",
+ "apihelp-query+messagecollection-param-offset": "Nommer udder Övverschreff vum Täx udder dä Nohreescht, vun woh aanfange.",
+ "apihelp-query+messagecollection-param-filter": "Message collection filters. Use ! to negate condition. För e Beijschpell bedügg <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">!fuzzy</kbd> dt mer blohß alle di - list non-fuzzy messages. Filters kumme zom drahre en däsällve Reihjefollesch wi se aanjejovve sin.\n;<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">fuzzy</kbd>:Messages with fuzzy Makkehrong.\n;<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">optional</kbd>:Messages which should be translated blohß wann Änderonge nühdesch sin.\n;<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">ignored</kbd>:Messages which are nimmohls övversaz.\n;<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">hastranslation</kbd>:Messages which have a translation regardless if it is fuzzy or not.\n;<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">translated</kbd>:Messages which have a translation which is not fuzzy.\n;<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">changed</kbd>:Messages which has been translated or changed since last export.\n;<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">reviewer&#58;</kbd>#:Messages where given user ID # is among reviewers.\n;<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">last-translator&#58</kbd>;#:Messages where given user ID # is the last Övversäzer.\n<!-- \nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-query%2Bmessagecollection-param-filter/en\n-->",
+ "apihelp-query+messagecollection-param-prop": "Wat för en Eijeschaffte ze holle:\n;definition:De definition vun däm Täxt udder dä Nohreesch.\n;translation:De aktoälle Övversäzong (without $1 string if any, use the tags to check for övverhöllte udder kappodde Övversäzonge).\n;tags:tags vun Täxte udder Nohreeschte, wi optional, ignored and fuzzy.\n;properties:Eijeschaffte vun Täxte udder Nohreeschte, wi status, revision, last-translator. Kann sesch zwesche de einzel Täxte un Nohreeschte ongerscheide.\n;revision:<span class=\"deprecated\">Deprecated!</span> Nemm $2prop=properties.\n<!-- \nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-query%2Bmessagegroups-param-prop/ksh \n-->",
+ "apihelp-query+messagecollection-example-1": "Leß med ongerschtöz Schprohche",
+ "apihelp-query+messagecollection-example-2": "Donn de nühdejje Täxte un Nohreeschte en dä Jropp „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">page-Example</code>“ opleste. <!--\nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-query%2Bmessagecollection-example-4/ksh\n-->",
+ "apihelp-query+messagecollection-example-3": "Donn de nit esu nühdejje fennesche Täxte un Nohreeschte en dä Jropp „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">page-Example</code>“ opleste. <!--\nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-query%2Bmessagecollection-example-4/ksh\n-->",
+ "apihelp-query+messagecollection-example-4": "Mih Aanjahbe övver de neuste Övversäzonge vun dä Täxte un Nohreeschte en dä Jropp „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">page-Example</code>“.",
+ "apihelp-query+messagegroups-description": "Jiv Enfommazjuhne övver Jroppe vun Täxte un Nohreeschte us.\n\nObacht: Dä Parramehter <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">uselang</code> hädd ene Enfloss op di Aandeile, di vun de Schprohch afhange.",
+ "apihelp-query+messagegroups-param-depth": "Em Boumfommaht bejränz dat de Dehfe vun dä Leß. Dä Wäät 0 bedügg, dat kein Ongerjroppe jezeijsch wähde. If the limit is reached, a prop groupcount is added and it states the number of direct children. <!-- https://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-query%2Bmessagegroups-param-depth/en\n-->",
+ "apihelp-query+messagegroups-param-filter": "Jiv blohß Täxte un Nohreeschte us, dänne ier Kännonge op eine vun heh dä Ennjahbe paße. Jruhß- un Kleinschrevv es derbei ejahl, * schteiht för en onjenante Zahl onjenante Zeische, zwesche de Kännonge küdd et „|“-Zeijsche.",
+ "apihelp-query+messagegroups-param-format": "Em Boum-Fommaht künne Nohreeschtejroppe mieh wie eijmohl, alsu aan ongerscheidlejje Schtälle em Boum, opdouche.",
+ "apihelp-query+messagegroups-param-prop": "Wat för en Aanjahbe em Zersammehang med Övversäzonge ze holle:\n;id:Donn de Kännong vun dä Jropp derbei.\n;label:Include label vun dä Jropp.\n;description:Include description vun dä Jropp.\n;class:Include class name vun dä Jropp.\n;namespace:Include Appachtemang vun dä Jropp. Not all groups belong to a single Appachtemang.\n;exists:Include self-calculated existence Eijeschaff vun dä Jropp.\n;icon:Include URLs to icon vun dä Jropp.\n;priority:Include priority status like discouraged.\n;prioritylangs:Include preferred Schprohche. If not set, this returns false.\n;priorityforce:Include priority status - is the priority Schprohchesetting forced.\n;workflowstates:Include the workflow states vun dä Jropp vun Täxte un Nohreeschte.\n<!-- \nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-query%2Bmessagegroups-param-prop/ksh\n-->",
+ "apihelp-query+messagegroups-param-root": "Em Boumfommaht moß dat heh en Sammeljopp sin un doh vun bejennt de Leß.\nEm flache Fommahd wehd jenou di anjejovve Jropp ußjejovve.",
+ "apihelp-query+messagegroups-example-1": "Nohreeschtejroppe aanzeije",
+ "apihelp-query+messagegroupstats-description": "Frohch noh de Schtateßeke övver de Nohreeschtejroppe.",
+ "apihelp-query+messagegroupstats-param-group": "Dä Nohreeschtejropp iehr Kännong.",
+ "apihelp-query+messagegroupstats-example-1": "Donn de Schtatesteke övver de fähdejje Övversäzonge vun dä Täxte un Nohreeschte en dä Jropp „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">page-Example</code>“ opleste. <!--\nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-query%2Bmessagecollection-example-4/ksh\n-->",
+ "apihelp-query+messagetranslations-description": "Frohch noh alle Övversäzonge för ene beschtemmpte Täx uddder en beschtemmpte Nohreesch.",
+ "apihelp-query+messagetranslations-param-title": "De kumplätte Övverschreff vun ene bikannte Nohreesch udder enem bikanne Täx.",
+ "apihelp-query+messagetranslations-example-1": "De Leß met de Övversäzonge em Wikki för „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">MediaWiki:January</code>“",
+ "apihelp-translatesandbox-description": "Aanmällde un Sandkeß_Metmaacher verwallde.",
+ "apihelp-translatesandbox-param-do": "Wat sulle mer donn?",
+ "apihelp-translatesandbox-param-userid": "De Kännonge vun dä Metmaacher zom Verwallde. Nemm 0 beim Aanlähje.",
+ "apihelp-translatesandbox-param-username": "Der Nahme, wann ene Metmaacher neu aanjelaht weed.",
+ "apihelp-translatesandbox-param-password": "Et Paßwoot, wann ene Metmaacher neu aanjelaht weed.",
+ "apihelp-translatesandbox-param-email": "De Adräß för de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">e-mail</i> wann ene Metmaacher aanjelaht weed.",
+ "apihelp-translationaids-description": "Frohch alle Zoote Hölper vum Övversäze.",
+ "apihelp-translationaids-param-title": "De kumplätte Övverschreff vun ene bikannte Nohreesch udder enem bikanne Täx.",
+ "apihelp-translationaids-param-group": "Di Jropp, woh dä Täx udder de Nohreesch dren es.\nDe primary group <!--\nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-translationaids-param-group/ksh\n--> weed jenumme, wann se läddesch es.",
+ "apihelp-translationaids-param-prop": "Wat fö wälsche vun dä Hölper beim Övversäze derbei donn?",
+ "apihelp-translationaids-example-1": "Zeisch Hölp för „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[MediaWiki:January/fi]]</code>“",
+ "apihelp-translationreview-description": "Makehr di Övversäzong als nohjelohrt.",
+ "apihelp-translationreview-param-revision": "De Nommer vun dä Väsjohn zom Nohjelohre.",
+ "apihelp-translationreview-example-1": "Lohr de Nommer 1 noh.",
+ "apihelp-translationstash-description": "Donn Övversäzonge en the stash\n<!-- \nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-translationstash-description/en_and_MediaWiki:Apihelp-translationstash-example-2/en_and_MediaWiki:Apihelp-translationstash-example-1/en_and_MediaWiki:Apihelp-translationstash-param-username/en\n-->",
+ "apihelp-translationstash-param-subaction": "Vörjang udder Opdraacht.",
+ "apihelp-translationstash-param-title": "Övverschreff vun dä Sigg för de Övversäzongeijnheijd.",
+ "apihelp-translationstash-param-translation": "Övversäzonge vun däm Metmaacher.",
+ "apihelp-translationstash-param-metadata": "Et <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"JavaScript Object Notation\">JSON<i>-Objäk",
+ "apihelp-translationstash-param-username": "Optionally the user whose stash to get. Only privileged users can do this.\n<!-- \nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-translationstash-description/en_and_MediaWiki:Apihelp-translationstash-example-2/en_and_MediaWiki:Apihelp-translationstash-example-1/en_and_MediaWiki:Apihelp-translationstash-param-username/en\n-->",
+ "apihelp-translationstash-example-1": "Add a translation to the stash for [[MediaWiki:Jan/fi]]\n<!-- \nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-translationstash-description/en_and_MediaWiki:Apihelp-translationstash-example-2/en_and_MediaWiki:Apihelp-translationstash-example-1/en_and_MediaWiki:Apihelp-translationstash-param-username/en\n-->",
+ "apihelp-translationstash-example-2": "befrohch the stash\n<!-- \nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-translationstash-description/en_and_MediaWiki:Apihelp-translationstash-example-2/en_and_MediaWiki:Apihelp-translationstash-example-1/en_and_MediaWiki:Apihelp-translationstash-param-username/en\n-->",
+ "apihelp-ttmserver-description": "Frohch noh Vörschlähsch uß de Övversäzongsjedääschneße.",
+ "apihelp-ttmserver-param-service": "Wällsche Övversäzongsdeens jenumme wääde sull.",
+ "apihelp-ttmserver-param-sourcelanguage": "Dat Schprohcheköözel vun dämm Quälltäx.",
+ "apihelp-ttmserver-param-targetlanguage": "Dat Schprohcheköözel vun dämm Vörschlaach.",
+ "apihelp-ttmserver-param-text": "Dä Täx för Vörschlähsch för ze fenge.",
+ "apihelp-ttmserver-example-1": "Donn Vörschlähsch holle för „Hölp“ us em Änglesche en et Fennesche ze övversäze.",
+ "apihelp-searchtranslations-description": "Övversäzonge söhke.",
+ "apihelp-searchtranslations-param-query": "Der Täx, dä jesöhk wähde sull.",
+ "apihelp-searchtranslations-param-language": "Et Köözel för di Schprohch för dä Täx dren ze söhke.",
+ "apihelp-searchtranslations-param-group": "De Kännong för di Jropp för dä Täx dren ze söhke.",
+ "apihelp-searchtranslations-param-match": "Jehdes udder öhnds e Woot fenge.",
+ "apihelp-searchtranslations-param-offset": "De Nommer för der Bejenn vun dä Leß vun de Övversäzonge.",
+ "apihelp-searchtranslations-example-1": "Donn de Övversäzonge för heh di Schprohch aanzeije"
+}
diff --git a/Translate/i18n/api/ksw.json b/Translate/i18n/api/ksw.json
new file mode 100644
index 00000000..027c832f
--- /dev/null
+++ b/Translate/i18n/api/ksw.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "SawJaemin"
+ ]
+ },
+ "apihelp-searchtranslations-description": "ကွၢ်ဃုတၢ်ကျိာ်ထံ.",
+ "apihelp-searchtranslations-summary": "ကွၢ်ဃုတၢ်ကျိာ်ထံ."
+}
diff --git a/Translate/i18n/api/ku-latn.json b/Translate/i18n/api/ku-latn.json
new file mode 100644
index 00000000..b31e90e6
--- /dev/null
+++ b/Translate/i18n/api/ku-latn.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bikarhêner",
+ "George Animal"
+ ]
+ },
+ "apihelp-groupreview-param-language": "Koda ziman.",
+ "apihelp-query+languagestats-param-language": "Koda ziman.",
+ "apihelp-query+messagecollection-param-group": "Koma peyamê.",
+ "apihelp-query+messagecollection-param-language": "Koda zimanê.",
+ "apihelp-query+messagegroups-example-1": "Komên peyaman nîşan bide",
+ "apihelp-searchtranslations-description": "Li wergeran bigere."
+}
diff --git a/Translate/i18n/api/lb.json b/Translate/i18n/api/lb.json
new file mode 100644
index 00000000..77b483f0
--- /dev/null
+++ b/Translate/i18n/api/lb.json
@@ -0,0 +1,47 @@
+{
+ "@metadata": {
+ "authors": [
+ "Robby"
+ ]
+ },
+ "apihelp-groupreview-param-language": "Sproochcode.",
+ "apihelp-query+languagestats-param-language": "Sproochcode.",
+ "apihelp-query+messagecollection-param-language": "Sproochcode.",
+ "apihelp-query+messagecollection-example-1": "Lëscht vun den ënnerstëtzte Sproochen",
+ "apihelp-query+messagecollection-example-4": "Méi Informatioun iwwer déi lescht Iwwersetzungsversioun fir de Grupp \"Beispill-Säit\"",
+ "apihelp-query+messagegroups-param-format": "Am Baamformat kënne Gruppe vu Messagen op verschiddene Plazen am Bam existéieren.",
+ "apihelp-query+messagegroupstats-param-suppresscomplete": "Sproochen net weisen déi komplett iwwersat sinn",
+ "apihelp-query+messagetranslations-param-title": "Kompletten Titel vun engem bekannte Message.",
+ "apihelp-query+messagetranslations-example-1": "Lëscht vun Iwwersetzungen an der Wiki fir \"MediaWiki:January\"",
+ "apihelp-translatesandbox-param-do": "Wat maachen.",
+ "apihelp-translationaids-description": "All Iwwersetzungshëllefen ofruffen.",
+ "apihelp-translationaids-param-title": "Kompletten Titel vun engem bekannte Message.",
+ "apihelp-translationreview-description": "Iwwersetzungen als nogekuckt markéieren.",
+ "apihelp-translationreview-summary": "Nogekuckt Iwwersetzunge markéieren.",
+ "apihelp-translationreview-param-revision": "D'Nummer vun der Versioun fir nozekucken.",
+ "apihelp-translationreview-example-1": "Versioun 1 nokucken",
+ "apihelp-translationstash-param-subaction": "Aktioun.",
+ "apihelp-translationstash-param-translation": "Iwwersetzung vum Benotzer.",
+ "apihelp-translationstash-param-metadata": "JSON-Objet.",
+ "apihelp-ttmserver-param-sourcelanguage": "De Sproochcode vum Quelltext.",
+ "apihelp-ttmserver-param-targetlanguage": "De Sproochcode vum Virschlag.",
+ "apihelp-searchtranslations-description": "Iwwersetzunge sichen.",
+ "apihelp-searchtranslations-summary": "Iwwersetzunge sichen.",
+ "apihelp-searchtranslations-param-service": "Wat fir ee vun den disponibelen Iwwersetzungsservicer benotzt gi soll.",
+ "apihelp-searchtranslations-param-query": "D'Zeechen no deene gesicht gi soll.",
+ "apihelp-searchtranslations-param-limit": "Gréisst vum Resultat",
+ "apihelp-searchtranslations-example-1": "Iwwersetzunge fir d'Sprooch weisen.",
+ "apihelp-translationcheck-summary": "Iwwersetzunge validéieren.",
+ "apihelp-translationcheck-param-translation": "D'Iwweersetzung fir ze validéieren.",
+ "apihelp-translationstats-summary": "Statistike vun der Iwwersetzung ofruffen",
+ "apierror-translate-duplicateaggregategroup": "De Grupp vu Message gëtt et schonn",
+ "apierror-translate-fuzzymessage": "Fuzzy Iwwersetzunge kënnen net nogekuckt ginn",
+ "apierror-translate-invalidlanguage": "Déi gefrot Sprooch ass net valabel.",
+ "apierror-translate-invalidupdate": "Net valabel Datum",
+ "apierror-translate-language-disabled": "Iwwersetzung op $1 ass ausgeschalt.",
+ "apierror-translate-language-disabled-reason": "Iwwersetzung op $1 ass desaktivéiert: $2",
+ "apierror-translate-owntranslation": "Eegen Iwwersetzunge kënnen net nogekuckt ginn",
+ "apierror-translate-sandboxdisabled": "Sandkëscht-Funktioun gëtt net benotzt",
+ "apierror-translate-unknownmessage": "Onbekannte Message",
+ "apiwarn-translate-alreadyreviewedbyyou": "Scho markéiert wéi wann et vun Iech nogekuckt ass"
+}
diff --git a/Translate/i18n/api/li.json b/Translate/i18n/api/li.json
new file mode 100644
index 00000000..50676ffd
--- /dev/null
+++ b/Translate/i18n/api/li.json
@@ -0,0 +1,60 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ooswesthoesbes"
+ ]
+ },
+ "apihelp-aggregategroups-param-group": "Berichgroep-id.",
+ "apihelp-groupreview-param-group": "Berichgroep.",
+ "apihelp-groupreview-param-language": "Spraokcode.",
+ "apihelp-query+languagestats-description": "Queryspraokstattestieke.",
+ "apihelp-query+languagestats-summary": "Queryspraokstattestieke.",
+ "apihelp-query+languagestats-param-language": "Spraokcode.",
+ "apihelp-query+messagecollection-param-group": "Berichgroep.",
+ "apihelp-query+messagecollection-param-language": "Spraokcode.",
+ "apihelp-query+messagecollection-param-limit": "Wieväöl te tuine berichte (nao filter).",
+ "apihelp-query+messagecollection-example-1": "Lies van óngerstäönde spraoke",
+ "apihelp-query+messagegroups-example-1": "Tuin berichtegruup",
+ "apihelp-query+messagegroupstats-param-group": "Berichgroep-id.",
+ "apihelp-query+messagegroupstats-example-1": "Liest mit euverzèttingsstattestieke veur de groep \"page-Example\"",
+ "apihelp-query+messagetranslations-description": "Vraog alle euverzèttinge veur ei berich op.",
+ "apihelp-query+messagetranslations-summary": "Vraog alle euverzèttinge veur ei berich op.",
+ "apihelp-query+messagetranslations-param-title": "Gansen titel van e bekand berich.",
+ "apihelp-query+messagetranslations-example-1": "Lies mit euverzèttinge in de wiki veur \"MediaWiki:January\"",
+ "apihelp-translatesandbox-description": "Sjrief dich in en behieër zandjbakgebroekers.",
+ "apihelp-translatesandbox-summary": "Sjrief dich in en behieër zandjbakgebroekers.",
+ "apihelp-translatesandbox-param-do": "Waat te doon.",
+ "apihelp-translatesandbox-param-userid": "Gebroeker-id's van gebroekers die waere behieërd. Gebroek 0 veur aanmake.",
+ "apihelp-translatesandbox-param-username": "Gebroekersnaam bie 't aanmake.",
+ "apihelp-translatesandbox-param-password": "Wachwaord bie 't aanmake van de gebroeker.",
+ "apihelp-translatesandbox-param-email": "E-mailadres bie 't aanmake van de gebroeker.",
+ "apihelp-translationaids-description": "Vraog alle euverzèttingshölpmiddele op.",
+ "apihelp-translationaids-summary": "Vraog alle euverzèttingshölpmiddele op.",
+ "apihelp-translationaids-param-title": "Gansen titel van e bekand berich.",
+ "apihelp-translationaids-example-1": "Tuin hölpmiddele veur [[MediaWiki:January/fi]]",
+ "apihelp-translationreview-description": "Markeer euverzèttinge es proofgelaeze.",
+ "apihelp-translationreview-summary": "Markeer euverzèttinge es proofgelaeze.",
+ "apihelp-translationreview-param-revision": "Proof te laeze bewirkingsnómmer.",
+ "apihelp-translationreview-example-1": "Laes bewirking 1 proof",
+ "apihelp-translationstash-description": "Veug euverzètte tou aan stash.",
+ "apihelp-translationstash-summary": "Veug euverzètte tou aan stash.",
+ "apihelp-translationstash-param-subaction": "Hanjeling.",
+ "apihelp-translationstash-param-title": "Naam van de euverzèttingseinheidspagina.",
+ "apihelp-translationstash-param-translation": "Euverzètting gemaak door de gebroeker.",
+ "apihelp-translationstash-param-metadata": "JSON-veurwerp.",
+ "apihelp-searchtranslations-description": "Doorzeuk euverzèttinge.",
+ "apihelp-searchtranslations-summary": "Doorzeuk euverzèttinge.",
+ "apihelp-searchtranslations-param-query": "De te zeuke string.",
+ "apihelp-searchtranslations-param-sourcelanguage": "De spraokcode veur de brónteks.",
+ "apihelp-searchtranslations-param-language": "De spraokcode veur de string van te zeuke.",
+ "apihelp-searchtranslations-param-group": "De groep-id veur de string van te zeuke.",
+ "apihelp-searchtranslations-param-limit": "Gruuedje van 't rizzeltaot.",
+ "apihelp-searchtranslations-example-1": "Tuin euverzèttinge veur de spraok.",
+ "apihelp-searchtranslations-example-2": "Tuin óneuvergezatje berichte die euvereinkómme mit de query in de brónspraok.",
+ "apierror-translate-invalidupdate": "Óngeljigen update",
+ "apierror-translate-language-disabled": "Euverzètte nao dees spraok is oetgezatj",
+ "apierror-translate-owntranslation": "Kan gein eige euverzèttinge prooflaeze",
+ "apierror-translate-sandboxdisabled": "Zandjbak-óngerdeil weurt neet gebroek",
+ "apierror-translate-unknownmessage": "Ónbekand berich",
+ "apiwarn-translate-alreadyreviewedbyyou": "Al gemarkeerd es proofgelaeze door dich"
+}
diff --git a/Translate/i18n/api/lki.json b/Translate/i18n/api/lki.json
new file mode 100644
index 00000000..5233acd0
--- /dev/null
+++ b/Translate/i18n/api/lki.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hosseinblue"
+ ]
+ },
+ "apihelp-groupreview-param-language": "کد زوون.",
+ "apihelp-query+languagestats-param-language": "کد زوون.",
+ "apihelp-query+messagecollection-example-1": "لیست زوونةل پشتیبانی بی"
+}
diff --git a/Translate/i18n/api/lt.json b/Translate/i18n/api/lt.json
new file mode 100644
index 00000000..80d41701
--- /dev/null
+++ b/Translate/i18n/api/lt.json
@@ -0,0 +1,43 @@
+{
+ "@metadata": {
+ "authors": [
+ "Eitvys200",
+ "Tomasdd"
+ ]
+ },
+ "apihelp-groupreview-param-language": "Kalbos kodas.",
+ "apihelp-query+languagestats-param-language": "Kalbos kodas.",
+ "apihelp-query+messagecollection-param-group": "Pranešimo grupė.",
+ "apihelp-query+messagecollection-param-language": "Kalbos kodas.",
+ "apihelp-query+messagecollection-example-1": "Palaikomų kalbų sąrašas",
+ "apihelp-translatesandbox-param-do": "Ką daryti.",
+ "apihelp-translatesandbox-param-username": "Vartotojo vardas, kai kuriamas vartotojas.",
+ "apihelp-translatesandbox-param-password": "Slaptažodis, kai kuriamas vartotojas.",
+ "apihelp-translatesandbox-param-email": "El. paštas, kai kuriamas vartotojas.",
+ "apihelp-translationaids-param-title": "Pilnas žinomos žinutės pavadinimas.",
+ "apihelp-translationaids-param-prop": "Kuriuos vertimo pagalbininkus įtraukti.",
+ "apihelp-translationreview-description": "Pažymėti vertimus peržiūrėtais.",
+ "apihelp-translationstash-param-subaction": "Veiksmas.",
+ "apihelp-translationstash-param-translation": "Vertimas atliktas vartotojo.",
+ "apihelp-translationstash-param-metadata": "JSON objektas.",
+ "apihelp-ttmserver-param-service": "Kurią iš galimų vertimų paslaugų naudoti.",
+ "apihelp-ttmserver-param-sourcelanguage": "Šaltinio teksto kalbos kodas.",
+ "apihelp-ttmserver-param-targetlanguage": "Siūlymo kalbos kodas.",
+ "apihelp-ttmserver-param-text": "Tekstas, kuriam rasti pasiūlymus.",
+ "apihelp-ttmserver-example-1": "Gauti pasiūlymus verčiant „Help“ iš anglų k. į suomių k.",
+ "apihelp-searchtranslations-description": "Ieškoti vertimų.",
+ "apihelp-searchtranslations-summary": "Ieškoti vertimų.",
+ "apihelp-searchtranslations-param-service": "Kurią iš galimų vertimų paslaugų naudoti.",
+ "apihelp-searchtranslations-param-sourcelanguage": "Šaltinio teksto kalbos kodas.",
+ "apihelp-searchtranslations-param-filter": "Pranešimo vertimo būsenos filtras.",
+ "apihelp-searchtranslations-param-limit": "Rezultato dydis.",
+ "apihelp-searchtranslations-example-1": "Rodyti kalbos vertimus.",
+ "apierror-translate-duplicateaggregategroup": "Pranešimo grupė jau egzistuoja",
+ "apierror-translate-invalidlanguage": "Kalbos kodas $1 yra neteisingas.",
+ "apierror-translate-invalidupdate": "Negalimas atnaujinimas",
+ "apierror-translate-language-disabled": "Vertimas į $1 yra išjungtas.",
+ "apierror-translate-owntranslation": "Negalima peržiūrėti savo paties vertimų",
+ "apierror-translate-sandboxdisabled": "Smėlio dėžės funkcija nenaudojama",
+ "apierror-translate-unknownmessage": "Nežinomas pranešimas",
+ "apiwarn-translate-alreadyreviewedbyyou": "Jau pažymėtas kaip peržiūrėtas jūsų"
+}
diff --git a/Translate/i18n/api/lv.json b/Translate/i18n/api/lv.json
new file mode 100644
index 00000000..7ae9c01e
--- /dev/null
+++ b/Translate/i18n/api/lv.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Papuass"
+ ]
+ },
+ "apihelp-aggregategroups-param-group": "Ziņojumu grupas ID.",
+ "apihelp-aggregategroups-example-1": "Piesaistīt grupu",
+ "apihelp-groupreview-param-group": "Ziņojumu grupa.",
+ "apihelp-groupreview-param-language": "Valodas kods.",
+ "apihelp-query+languagestats-param-language": "Valodas kods.",
+ "apihelp-query+managemessagegroups-param-groupId": "Grupas Id",
+ "apihelp-query+messagecollection-param-group": "Ziņojumu grupa.",
+ "apihelp-query+messagecollection-param-language": "Valodas kods.",
+ "apihelp-query+messagecollection-example-1": "Atbalstīto valodu saraksts",
+ "apihelp-query+messagegroups-example-1": "Rādīt ziņojumu grupas",
+ "apihelp-query+messagegroupstats-param-group": "Ziņojumu grupas ID.",
+ "apihelp-managemessagegroups-param-groupId": "Grupas Id",
+ "apihelp-translatesandbox-param-do": "Ko darīt.",
+ "apihelp-translationstash-param-subaction": "Darbība.",
+ "apihelp-translationstash-param-title": "Tulkošanas vienības lapas nosaukums.",
+ "apihelp-translationstash-param-metadata": "JSON objekts.",
+ "apihelp-searchtranslations-description": "Meklēt tulkojumus.",
+ "apihelp-searchtranslations-summary": "Meklēt tulkojumus.",
+ "apihelp-searchtranslations-param-limit": "Rezultāta izmērs.",
+ "apihelp-searchtranslations-example-1": "Rādīt tulkojumus valodai.",
+ "apihelp-translationcheck-summary": "Validēt tulkojumus.",
+ "apierror-translate-invalidlanguage": "Valodas kods $1 ir nederīgs.",
+ "apierror-translate-owntranslation": "Savus tulkojumus nevar pārlasīt",
+ "apierror-translate-sandboxdisabled": "Smilšu kastes iespēja netiek izmantota"
+}
diff --git a/Translate/i18n/api/mk.json b/Translate/i18n/api/mk.json
new file mode 100644
index 00000000..d5aefd92
--- /dev/null
+++ b/Translate/i18n/api/mk.json
@@ -0,0 +1,175 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bjankuloski06",
+ "Vlad5250"
+ ]
+ },
+ "apihelp-aggregategroups-description": "Раководење со насобрани групи пораки.\n\nМожете да додавате или отстранувате насобрани групи пораки и да ги придружувате во или отстранувате од збировите (една по една).",
+ "apihelp-aggregategroups-summary": "Управување со насобрани групи пораки.",
+ "apihelp-aggregategroups-extended-description": "Можете да додавате или отстранувате насобрани групи пораки и да ги придружувате во или отстранувате од збировите (една по една).",
+ "apihelp-aggregategroups-param-do": "Што да се прави во насобрана група пораки.",
+ "apihelp-aggregategroups-param-aggregategroup": "Назнака на насобраната група пораки.",
+ "apihelp-aggregategroups-param-group": "Назнака на групата пораки.",
+ "apihelp-aggregategroups-param-groupname": "Назив на насобраната групата пораки.",
+ "apihelp-aggregategroups-param-groupdescription": "Опис на насобраната група пораки.",
+ "apihelp-aggregategroups-example-1": "Придружи група.",
+ "apihelp-groupreview-description": "Задај состојби на разработеност на групата пораки.",
+ "apihelp-groupreview-summary": "Задај состојби на разработеност на групата пораки.",
+ "apihelp-groupreview-param-group": "Група пораки.",
+ "apihelp-groupreview-param-language": "Јазичен код.",
+ "apihelp-groupreview-param-state": "Новата состојба на групата.",
+ "apihelp-groupreview-example-1": "Означи ја состојбата на германскиот превод на групата пораки „група-Пример“ како готов",
+ "apihelp-query+languagestats-description": "Статистики за јазикот на барањето.",
+ "apihelp-query+languagestats-summary": "Статистики за јазикот на барањето.",
+ "apihelp-query+languagestats-param-language": "Јазичен код.",
+ "apihelp-query+languagestats-param-group": "Назнака на групата пораки.",
+ "apihelp-query+languagestats-example-1": "Список на статистики за потполноста на преводите на фински",
+ "apihelp-query+languagestats-example-2": "Список на статистики за потполноста на преводите на фински за група А",
+ "apihelp-query+messagecollection-description": "Побарај преводи од Збирка пораки",
+ "apihelp-query+managemessagegroups-summary": "Дај можни преименувања за порака во група при увезување",
+ "apihelp-query+managemessagegroups-description": "Дај можни преименувања за порака во група при увезување",
+ "apihelp-query+managemessagegroups-param-groupId": "Назнака на групата",
+ "apihelp-query+managemessagegroups-param-messageKey": "Клуч на пораката",
+ "apihelp-query+managemessagegroups-param-changesetName": "Назив на промените — По основно / Незгрижена / МедијаВики итн.",
+ "apihelp-query+managemessagegroups-example-1": "Дај можни преименувања за дадениот клуч во дадената група.",
+ "apihelp-query+messagecollection-summary": "Побарај преводи од Збирка пораки",
+ "apihelp-query+messagecollection-param-group": "Група пораки.",
+ "apihelp-query+messagecollection-param-language": "Јазичен код.",
+ "apihelp-query+messagecollection-param-limit": "Колку страници да се прикажат (по филтрирањето).",
+ "apihelp-query+messagecollection-param-offset": "Цел број или отстапување со клуч за почетокот.",
+ "apihelp-query+messagecollection-param-filter": "Филтри за собирање пораки. Користете <kbd>!</kbd> за да одрекнете некој услов. На пример, <kbd>!fuzzy</kbd> значи да се испишат сите пораки што не се неисправни. Филтрите се применуваат по укажаниот редослед.\n;fuzzy: Неисправни пораки (со ознака „fuzzy“).\n;optional: Пораки што треба да се преведат само ако се потребни промени.\n;ignored: Пораки што никогаш не се преведуваат.\n;hastranslation: Пораки што имаат превод без оглед дали се неисправни.\n;translated: Пораки што имаат превод кој не е неисправен.\n;changed: Пораки преведени или изменети од последната пријава.\n;reviewer&#58;N: Пораки каде корисникот со број <kbd>N</kbd> е меѓу оценувачите.\n;last-translator&#58;N: Пораки каде корисникот со број <kbd>N</kbd> е последниот преведувач.",
+ "apihelp-query+messagecollection-param-prop": "Кои својства да се дадат:\n;definition: Определба на пораката.\n;translation: Тековен превод (без низата $1, ако ја има, користеет ги ознаките за да проверите дали има застарени или расипани преводи).\n;tags: Ознаки за пораката, како незадолжителна, занемарена или неисправна (fuzzy).\n;properties: Својства на пораката како статус, преработка, последен преведувач. Може да се разликува од порака до порака.\n;revision: <span class=\"deprecated\">Застарено!</span> Користете $2prop=properties.",
+ "apihelp-query+messagecollection-example-1": "Список на поддржани јазици",
+ "apihelp-query+messagecollection-example-2": "Список на определби на задолжителните пораки за групата „page-Example“",
+ "apihelp-query+messagecollection-example-3": "Список на незадолжителни пораки на фински со ознаки за групата „page-Example“",
+ "apihelp-query+messagecollection-example-4": "Повеќе информации за најновите преработки на преводот за групата „page-Example“",
+ "apihelp-query+messagegroups-description": "Дај информации за групите пораки.\n\nИмајте на ум дека параметарот „uselang“ влијае врз јазично-зависните делови.",
+ "apihelp-query+messagegroups-summary": "Дај информации за групи пораки.",
+ "apihelp-query+messagegroups-extended-description": "Имајте на ум дека параметарот „uselang“ го засега изводот на јазично зависните делови.",
+ "apihelp-query+messagegroups-param-depth": "Кога го користите форматот „дрво“, ограничете ја длабочината на олку нивоа. Вредноста 0 значи дека нема да се покажат подгрупи. Ако се достигне границата, во изводот ќе има и вредност „groupcount“, која ќе го наведе бројот на непосредни подгрупи.",
+ "apihelp-query+messagegroups-param-filter": "Давај само пораки со назнаки што одговараат на еден или повеќе зададени вносови (не разликува голема/мала буква, одделете со исправени црти, џокер *)",
+ "apihelp-query+messagegroups-param-format": "Во форматот „дрво“, групите пораки можат да постојат на повеќе места во дрвото.",
+ "apihelp-query+messagegroups-param-iconsize": "Претпочитана големина на растеризираната икона на групата.",
+ "apihelp-query+messagegroups-param-prop": "Кои преводни информации да се дадат:\n;id: Вклучи назнака на групата.\n;label: Вклучи натпис на групата.\n;description: Вклучи опис на групата.\n;class: Вклучи име на класата на групата.\n;namespace: Вклучи именски простор на групата. Не сите групи припаѓаат на еден именски простор.\n;exists: Вклучи самопресметано својство за постоење на групата.\n;icon: Вклучи URL-адреси за иконата на групата.\n;priority: Вклучи статус на предност (како на пр. „непрепорачано“).\n;prioritylangs: Вклучи претпочитани јазици. Ако не е зададено, се дава дека е неточно.\n;priorityforce: Вклучи статус на предност — дали е наметната поставката за јазици што имаат предност.\n;workflowstates: Вклучи ги работните состојби за групата пораки.",
+ "apihelp-query+messagegroups-param-root": "Кога се користи форматот „дрво“, наместо да се започне од најгоното ниво, започни од дадената група пораки, која мора да биде насобрана. Кога се користи рамен формат, ќе се даде само укажаната група.",
+ "apihelp-query+messagegroups-param-languageFilter": "Давај само групи пораки кои можат да се преведат на даден јазик.",
+ "apihelp-query+messagegroups-example-1": "Прикажи групи пораки",
+ "apihelp-query+messagegroupstats-description": "Побарај статистики за група пораки.",
+ "apihelp-query+messagegroupstats-summary": "Побарај статистики за група пораки.",
+ "apihelp-query+messagegroupstats-param-group": "Назнака на групата пораки.",
+ "apihelp-query+messagegroupstats-param-suppresscomplete": "Не прикажувај јазици со наполно завршен превод",
+ "apihelp-query+messagegroupstats-param-suppressempty": "Не прикажувај јазици што немаат почнато со преведување",
+ "apihelp-query+messagegroupstats-example-1": "Список на статистики за потполност на преводите за групата „page-Example“",
+ "apihelp-query+messagetranslations-description": "Побарај ги сите преводи на една порака.",
+ "apihelp-query+messagetranslations-summary": "Побарај ги сите преводи на една порака.",
+ "apihelp-query+messagetranslations-param-title": "Целосен наслов на позната порака.",
+ "apihelp-query+messagetranslations-example-1": "Список на преводи во викито за „MediaWiki:January“",
+ "apihelp-managemessagegroups-description": "Додај порака како преименување на постоечка порака или нова порака во групата при увезување",
+ "apihelp-managemessagegroups-summary": "Додај порака како преименување на постоечка порака или нова порака во групата при увезување",
+ "apihelp-managemessagegroups-param-groupId": "Назнака на групата",
+ "apihelp-managemessagegroups-param-renameMessageKey": "Клуч на целната порака што се преименува",
+ "apihelp-managemessagegroups-param-messageKey": "Клуч на пораката што заменува",
+ "apihelp-managemessagegroups-param-operation": "Задачата што треба да се изврши. Можни вредности: преименувај / нова",
+ "apihelp-managemessagegroups-param-changesetName": "Назив на промените — По основно / Незгрижена / МедијаВики итн.",
+ "apihelp-managemessagegroups-param-changesetModified": "Време и датум по Уникс на последната измена на промената. Ако е изменета по ова време, извршникот ќе даде грешка.",
+ "apihelp-managegroupsynchronizationcache-description": "Раководење со меѓускладот на групното усогласување.",
+ "apihelp-managegroupsynchronizationcache-summary": "Раководење со меѓускладот на групното усогласување.",
+ "apihelp-managegroupsynchronizationcache-param-operation": "Задачата што треба да се изврши. Можни вредности: реши",
+ "apihelp-managegroupsynchronizationcache-param-title": "Насловот на пораката означена како решена",
+ "apihelp-managegroupsynchronizationcache-param-group": "Групна назнака на пораката што се решава",
+ "apihelp-translatesandbox-description": "Зачленување и управување со корисници во песочникот.",
+ "apihelp-translatesandbox-summary": "Зачленување и управување со корисници во песочникот.",
+ "apihelp-translatesandbox-param-do": "Што да се прави.",
+ "apihelp-translatesandbox-param-userid": "Кориснички назнаки на корисниците што се раководени. Користете 0 за создавања.",
+ "apihelp-translatesandbox-param-username": "Корисничко име при создавање на корисникот.",
+ "apihelp-translatesandbox-param-password": "Лозинка при создавање на корисникот.",
+ "apihelp-translatesandbox-param-email": "Е-пошта при создавање на корисникот.",
+ "apihelp-translationaids-description": "Барај по сите преводни помагала.",
+ "apihelp-translationaids-summary": "Барај по сите преводни помагала.",
+ "apihelp-translationaids-param-title": "Целосен наслов на позната порака.",
+ "apihelp-translationaids-param-group": "На која група припаѓа пораката. Ако е празно, тогаш се користи главната група.",
+ "apihelp-translationaids-param-prop": "Кои преводни помагала да се вклучат.",
+ "apihelp-translationaids-example-1": "Прикажи помагала за [[MediaWiki:January/fi]]",
+ "apihelp-translationreview-description": "Означи ги преводите како проверени.",
+ "apihelp-translationreview-summary": "Означи ги преводите како проверени.",
+ "apihelp-translationreview-param-revision": "Број на преработката за проверување.",
+ "apihelp-translationreview-example-1": "Оцени преработка 1",
+ "apihelp-translationstash-description": "Додај преводи во складот.",
+ "apihelp-translationstash-summary": "Додај преводи во складот.",
+ "apihelp-translationstash-param-subaction": "Дејство.",
+ "apihelp-translationstash-param-title": "Наслов на страницата на преводната единица.",
+ "apihelp-translationstash-param-translation": "Превод направен од корисникот.",
+ "apihelp-translationstash-param-metadata": "JSON-објект.",
+ "apihelp-translationstash-param-username": "Или пак, корисникот чиј склад треба да се даде. Ова можат да го прават само привилегирани корисници.",
+ "apihelp-translationstash-example-1": "Додај превод во складот за [[MediaWiki:Jan/fi]]",
+ "apihelp-translationstash-example-2": "Побарај во складот",
+ "apihelp-ttmserver-description": "Побарај предлози од преводните помнила.",
+ "apihelp-ttmserver-summary": "Побарај предлози од преводните помнила.",
+ "apihelp-ttmserver-param-service": "Која од расположивите преводни служби да се користи.",
+ "apihelp-ttmserver-param-sourcelanguage": "Јазичниот код на изворниот текст.",
+ "apihelp-ttmserver-param-targetlanguage": "Јазичниот код на предлогот.",
+ "apihelp-ttmserver-param-text": "За кој текст да се најдат предлози.",
+ "apihelp-ttmserver-example-1": "Дај предлози за преведување на „Help“ од англиски на фински",
+ "apihelp-searchtranslations-description": "Пребарајте преводи.",
+ "apihelp-searchtranslations-summary": "Пребарајте преводи.",
+ "apihelp-searchtranslations-param-service": "Која од расположивите преводни служби да се користи.",
+ "apihelp-searchtranslations-param-query": "Низата што треба да се побара.",
+ "apihelp-searchtranslations-param-sourcelanguage": "Јазичниот код на изворниот текст.",
+ "apihelp-searchtranslations-param-language": "На кој јазичен код се бара низата.",
+ "apihelp-searchtranslations-param-group": "Назнака на групата во која се бара низата.",
+ "apihelp-searchtranslations-param-filter": "Филтер за статус на преводи.",
+ "apihelp-searchtranslations-param-match": "Најди соодветства на било кој/сите зборови",
+ "apihelp-searchtranslations-param-case": "Пребарување што разликува големи/мали букви",
+ "apihelp-searchtranslations-param-offset": "Отстап за преводите.",
+ "apihelp-searchtranslations-param-limit": "Големина на исходот.",
+ "apihelp-searchtranslations-example-1": "Прикажи преводи на овој јазик.",
+ "apihelp-searchtranslations-example-2": "Приказ на непреведени статии што одвораваат на бараното на изворниот јазик.",
+ "apihelp-translationcheck-description": "Потврди даден преводен внос според поставените проверувачи на пораки.",
+ "apihelp-translationcheck-summary": "Потврди преводи.",
+ "apihelp-translationcheck-param-title": "Наслов на страницата со именски простор и јазичен код.",
+ "apihelp-translationcheck-param-translation": "Превод за потврда.",
+ "apihelp-translationstats-description": "Дај преводни статистики поврзани со преводните уредувања, активните преводи, новитре корисници, преводните оценувачи и оценувачите.",
+ "apihelp-translationstats-summary": "Дај преводни статистики",
+ "apihelp-translationstats-param-count": "Кој вид на статистика се бара",
+ "apihelp-translationstats-param-days": "За колку дена се бара статистика",
+ "apihelp-translationstats-param-group": "Список на групи за кои се бара статистика.",
+ "apihelp-translationstats-param-language": "Список на јазици за кои се бара статистика.",
+ "apihelp-translationstats-param-scale": "Размер на преводните статистики",
+ "apihelp-translationstats-param-start": "Од кој датум да почнува статистиката. По основно е денешниот датум минус бројот на <var>days</var>.",
+ "apihelp-translationstats-example-1": "Дај број на уредувања во последните 30 дена за сите групи и јазици",
+ "apihelp-translationstats-example-2": "Дај број на уредувања во последните 30 дена за јазиците англиски и француски.",
+ "apierror-translate-changeset-modified": "Промените се изменети од друг корисник или постапка. Вашите промени не можат да се зачуваат бидејќи ќе ги заменат нив. Превчитајте ја страницата за да ги видите најновите промени.",
+ "apierror-translate-duplicateaggregategroup": "Групата пораки веќе постои",
+ "apierror-translate-fuzzymessage": "Не можете да проверувате застарени пораки",
+ "apierror-translate-groupreviewdisabled": "Проверката на групи пораки не е во употреба.",
+ "apierror-translate-invalidaggregategroup": "Неважечка група збирни пораки",
+ "apierror-translate-invalidaggregategroupname": "Неважечки назив за групата збирни пораки",
+ "apierror-translate-invalidgroup": "Групата не постои или е неважечка",
+ "apierror-translate-invalidstate": "Побараната состојба е неважечка.",
+ "apierror-translate-invalidlanguage": "Јазичниот код $1 е неважечки.",
+ "apierror-translate-invalidupdate": "Неважечка поднова",
+ "apierror-translate-language-disabled": "Преведувањето на $1 е оневозможено.",
+ "apierror-translate-language-disabled-reason": "Преведувањето на $1 е оневозможено: $2",
+ "apierror-translate-nodynamicgroups": "Динамичките групи пораки не се поддржани овде",
+ "apierror-translate-nomessagefortitle": "Насловот не соодветствува на преводлива порака",
+ "apierror-translate-notranslationservices": "Нема поставено јавни преводни служби. Администраторот на викито треба соодветно да го постави <var>$wgTranslateTranslationServices</var> пред да може да се користи оваа можност.",
+ "apierror-translate-owntranslation": "Не можете да проверувате свои преводи",
+ "apierror-translate-sandboxdisabled": "Песочничката функција не е во употреба",
+ "apierror-translate-smg-nochanges": "Нема промени за обработка.",
+ "apierror-translate-unknownmessage": "Непозната порака",
+ "apierror-translate-invalid-changeset-name": "Дадена неважечка податотека на промените — $1",
+ "apierror-translate-invalid-operation": "Неважечка операција: $1. Допуштени вредности — $2.",
+ "apierror-translate-addition-key-invalid": "Клучот на пораката дадена за додавање не е најден во списокот на преименуваните пораки за изворниот јазик.",
+ "apierror-translate-rename-msg-new": "Само преименувани пораки можат да се додаваат како нови.",
+ "apierror-translate-rename-key-invalid": "Клучевите на пораките дадени за преименување не се пронајдени на списокот на промени за изворниот јазик.",
+ "apierror-translate-rename-state-invalid": "Една од пораките дадени за преименување треба да биде новододадена, а другата — избришана. Тековни состојби — додавање: $1 и бришење: $2.",
+ "apiwarn-translate-alreadyreviewedbyyou": "Веќе ја имате означено како проверена",
+ "apiwarn-translate-language-disabled-source": "Изворниот јазик на оваа група е $1. Изберете на кој јазик сакате да преведувате.",
+ "apiwarn-translate-language-targetlang-variant-of-source": "<strong>Преведувате на <bdi>$1</bdi>.</strong> Тој е варијанта на <bdi>$2</bdi>, кој веќе е изворниот јазик на овие пораки. Внимавајте избраниот јазик да биде точен, и имајте ги на ум разликите меѓу јазичните варијанти за да направите добар превод.",
+ "apierror-translate-operation-error": "Се јави грешка при обработката на барањето. Грешка: $1",
+ "apihelp-translationentitysearch-summary": "Пребарување за групи пораки и пораки",
+ "apihelp-translationentitysearch-param-entitytype": "Вид на единицата што се бара",
+ "apihelp-translationentitysearch-param-query": "Побарување",
+ "apihelp-translationentitysearch-param-limit": "Највеќе ставки во исходот"
+}
diff --git a/Translate/i18n/api/mnw.json b/Translate/i18n/api/mnw.json
new file mode 100644
index 00000000..20d65bc7
--- /dev/null
+++ b/Translate/i18n/api/mnw.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "咽頭べさ"
+ ]
+ },
+ "apihelp-searchtranslations-summary": "ဂၠာဲ ကၠာဲလဝ်ဘာသာဂမၠိုင်။"
+}
diff --git a/Translate/i18n/api/ms.json b/Translate/i18n/api/ms.json
new file mode 100644
index 00000000..ded66322
--- /dev/null
+++ b/Translate/i18n/api/ms.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Anakmalaysia"
+ ]
+ },
+ "apihelp-query+languagestats-param-language": "Kod bahasa.",
+ "apihelp-query+messagecollection-example-1": "Senarai bahasa yang disokong",
+ "apihelp-translationstats-param-language": "Senarai bahasa untuk dikumpulkan statistik."
+}
diff --git a/Translate/i18n/api/mt.json b/Translate/i18n/api/mt.json
new file mode 100644
index 00000000..f228533d
--- /dev/null
+++ b/Translate/i18n/api/mt.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "ToniSant"
+ ]
+ },
+ "apierror-translate-rename-msg-new": "Messaġġi b'isem mibdul biss jistgħu jiġu miżjuda bħala messaġġi ġodda."
+}
diff --git a/Translate/i18n/api/my.json b/Translate/i18n/api/my.json
new file mode 100644
index 00000000..579354ed
--- /dev/null
+++ b/Translate/i18n/api/my.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dr Lotus Black"
+ ]
+ },
+ "apihelp-groupreview-param-group": "မက်ဆေ့အုပ်စု",
+ "apihelp-groupreview-param-language": "ဘာသာစကားကုဒ်",
+ "apihelp-query+languagestats-param-language": "ဘာသာစကားကုဒ်",
+ "apihelp-query+messagecollection-param-group": "မက်ဆေ့အုပ်စု",
+ "apihelp-query+messagecollection-param-language": "ဘာသာစကားကုဒ်",
+ "apihelp-query+messagecollection-example-1": "ထောက်ပံ့ထားသော ဘာသားစကားများ၏ စာရင်း",
+ "apihelp-query+messagegroups-example-1": "မက်ဆေ့အုပ်စုများကို ပြရန်",
+ "apihelp-query+messagegroupstats-param-group": "မက်ဆေ့အုပ်စု အိုင်ဒီ",
+ "apihelp-translationstash-param-translation": "အသုံးပြုသူ လုပ်ဆောင်သော ဘာသာပြန်ဆိုမှု။",
+ "apihelp-searchtranslations-description": "ဘာသာပြန်များ ရှာဖွေရန်။",
+ "apihelp-searchtranslations-summary": "ဘာသာပြန်များ ရှာဖွေရန်။",
+ "apihelp-searchtranslations-example-1": "ဘာသာစကားအတွက် ဘာသာပြန်များကို ပြရန်။",
+ "apierror-translate-duplicateaggregategroup": "မက်ဆေ့အုပ်စု ရှိနှင့်ပြီးဖြစ်သည်",
+ "apierror-translate-language-disabled": "$1 သို့ ဘာသာပြန်ခြင်းကို ပိတ်ထားသည်။",
+ "apierror-translate-language-disabled-reason": "$1 သို့ ဘာသာပြန်ခြင်းကို ပိတ်ထားသည်: $2",
+ "apierror-translate-owntranslation": "ကိုယ်ပိုင်ဘာသာပြန်များကို ပြန်လည်မဆန်းစစ်နိုင်ပါ",
+ "apierror-translate-unknownmessage": "အမည်မသိ မက်ဆေ့",
+ "apiwarn-translate-alreadyreviewedbyyou": "သင်မှ ပြန်လည်ဆန်းစစ်ပြီးဖြစ်ကြောင်း လုပ်ဆောင်နှင့်ပြီးသားဖြစ်သည်",
+ "apiwarn-translate-language-disabled-source": "ဤအုပ်စု၏ ရင်းမြစ်ဘာသာစကားမှာ $1 ဖြစ်သည်။ ကျေးဇူးပြု၍ ဘာသာပြန်ရန် အခြားဘာသာစကားကို ရွေးချယ်ပါ။"
+}
diff --git a/Translate/i18n/api/nap.json b/Translate/i18n/api/nap.json
new file mode 100644
index 00000000..9f138829
--- /dev/null
+++ b/Translate/i18n/api/nap.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "C.R."
+ ]
+ },
+ "apihelp-aggregategroups-description": "Ggistisce 'e mmasciate 'e gruppe accucchiate.\n\nPutite azzeccà o luvà accucchiate messagegroups e gruppe 'e mmasciata accucchiate o squagliate 'a chiste (uno 'a vota).",
+ "apihelp-aggregategroups-param-do": "Che s'adda fa cu nu gruppo 'e mmasciate accucchiate."
+}
diff --git a/Translate/i18n/api/nb.json b/Translate/i18n/api/nb.json
new file mode 100644
index 00000000..3477320e
--- /dev/null
+++ b/Translate/i18n/api/nb.json
@@ -0,0 +1,175 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jon Harald Søby",
+ "Kingu"
+ ]
+ },
+ "apihelp-aggregategroups-description": "Behandle aggregatmeldingsgrupper.\n\nDu kan legge til og fjerne aggregatmeldingsgrupper og assosiere eller disassosiere meldingsgrupper fra dem (én av gangen).",
+ "apihelp-aggregategroups-summary": "Behandle aggregatmeldingsgrupper.",
+ "apihelp-aggregategroups-extended-description": "Du kan legge til og fjerne aggregatmeldingsgrupper og assosiere eller disassosiere meldingsgrupeer fra dem (én av gangen).",
+ "apihelp-aggregategroups-param-do": "Hva som skal gjøres med aggregatmeldingsgruppa.",
+ "apihelp-aggregategroups-param-aggregategroup": "ID for aggregatmeldingsgruppe.",
+ "apihelp-aggregategroups-param-group": "Meldingsgruppe-ID.",
+ "apihelp-aggregategroups-param-groupname": "Navn på aggregatmeldingsgruppe.",
+ "apihelp-aggregategroups-param-groupdescription": "Beskrivelse for aggregatmeldingsgruppe.",
+ "apihelp-aggregategroups-example-1": "Assosier ei gruppe",
+ "apihelp-groupreview-description": "Sett arbeidsflytstilstander for meldingsgruppe.",
+ "apihelp-groupreview-summary": "Sett arbeidsflytstilstander for meldingsgruppe.",
+ "apihelp-groupreview-param-group": "Beskjedgruppe.",
+ "apihelp-groupreview-param-language": "Språkkode.",
+ "apihelp-groupreview-param-state": "Gruppas nye tilstand.",
+ "apihelp-groupreview-example-1": "Merk tilstanden for den tyske oversettelsen av meldingsgruppa «group-Example» som klar",
+ "apihelp-query+languagestats-description": "Spør om språkstatistikk.",
+ "apihelp-query+languagestats-summary": "Spør om språkstatistikk.",
+ "apihelp-query+languagestats-param-language": "Språkkode.",
+ "apihelp-query+languagestats-param-group": "Meldingsgruppe-ID.",
+ "apihelp-query+languagestats-example-1": "Liste over statistikk for fullførte oversettelser til finsk",
+ "apihelp-query+languagestats-example-2": "Liste over oversettelsesstatistikk for finsk for gruppe A",
+ "apihelp-query+messagecollection-description": "Spør MessageCollection om oversettelser.",
+ "apihelp-query+managemessagegroups-summary": "Hent mulige omdøpinger for en melding i en gruppe under import",
+ "apihelp-query+managemessagegroups-description": "Hent mulige omdøpinger for en melding i en gruppe under import",
+ "apihelp-query+managemessagegroups-param-groupId": "Gruppe-ID",
+ "apihelp-query+managemessagegroups-param-messageKey": "Meldingsnøkkel",
+ "apihelp-query+managemessagegroups-param-changesetName": "Endre settnavn – Default / Unattended / MediaWiki osv.",
+ "apihelp-query+managemessagegroups-example-1": "Hent mulige omdøpinger for den gitte nøkkelen i den gitte gruppa.",
+ "apihelp-query+messagecollection-summary": "Spør MessageCollection om oversettelser.",
+ "apihelp-query+messagecollection-param-group": "Beskjedgruppe.",
+ "apihelp-query+messagecollection-param-language": "Språkkode.",
+ "apihelp-query+messagecollection-param-limit": "Hvor mange beskjeder som skal vises (etter filtrering).",
+ "apihelp-query+messagecollection-param-offset": "Heltall eller nøkkeloffset til å begynne med.",
+ "apihelp-query+messagecollection-param-filter": "Filtre for beskjedsamlinger. Bruk <kbd>!</kbd> for å få motsatt av den gitte effekten. For eksempel betyr <kbd>!fuzzy</kbd> alle beskjeder som ikke er fuzzy. Filtre brukes i den rekkefølgen som blir gitt.\n;fuzzy:Beskjeder med fuzzy-tagg.\n;optional:Beskjeder som kun bør oversettes om det er nødvendig å endre dem.\n;ignored:Beskjeder som aldri oversettes.\n;hastranslation:Beskjeder som har en oversettelse uavhengig av om den er fuzzy eller ikke.\n;translated:Beskjeder som har en oversettelse som ikke er fuzzy.\n;changed:Beskjeder som har blitt oversatt eller endret siden forrige eksport.\n;reviewer&#58;N: Beskjeder der bruker nummer <kbd>N</kbd> er blant godkjennerne.\n;last-translator&#58;N:Beskjeder der bruker nummer <kbd>N</kbd> er siste oversetter.",
+ "apihelp-query+messagecollection-param-prop": "Hvilke egenskaper som skal hentes:\n;definition:Beskjeddefinisjonen.\n;translation:Den gjeldende oversettelsen (uten $1-streng om det er noen, bruk taggene for å sjekke utdaterte eller ugyldige oversettelser).\n;tags:Beskjedtagger, som optional, ignored og fuzzy.\n;properties:Beskjedegenskaper, som status, revision, last-translator. Kan variere mellom beskjeder.\n;revision:<span class=\"deprecated\">Foreldet!</span> Bruk $2prop=properties.",
+ "apihelp-query+messagecollection-example-1": "Liste over støttede språk",
+ "apihelp-query+messagecollection-example-2": "Liste over ikke-valgfrie beskjeddefinisjoner for gruppa «page-Example»",
+ "apihelp-query+messagecollection-example-3": "Liste over valgfrie beskjeder på finsk med tagger for gruppa «page-Example»",
+ "apihelp-query+messagecollection-example-4": "Mer informasjon om de siste oversettelsesrevisjonene for gurppa «page-Example»",
+ "apihelp-query+messagegroups-description": "Returnerer informasjon om beskjedgrupper.\n\nMerk at parameteren uselang påvirker resultatet i språkavhengige deler.",
+ "apihelp-query+messagegroups-summary": "Returnerer informasjon om beskjedgrupper.",
+ "apihelp-query+messagegroups-extended-description": "Merk at parameteren uselang påvirker resultatet i språkavhengige deler.",
+ "apihelp-query+messagegroups-param-depth": "Når du bruker treformatet, begrens dybden til så mange nivåer. Verdien 0 betyr at ingen undergrupper vises. Hvis grensa nås vil resultatet inkludere en «groupcount»-verdi, som viser antall direkte barn.",
+ "apihelp-query+messagegroups-param-filter": "Bare returner beskjeder med ID-er som matcher én eller flere av de gitte innputtene (uavhengig av små og store bokstaver, atskilt med vertikalstreker, * som jokertegn).",
+ "apihelp-query+messagegroups-param-format": "I treformatet kan beskjedgrupper eksistere på flere steder i treet.",
+ "apihelp-query+messagegroups-param-iconsize": "Foretrukket størrelse for rasterisert gruppeikon.",
+ "apihelp-query+messagegroups-param-prop": "Hvilken oversettelsesrelatert informasjon som skal hentes:\n;id:Inkluder gruppas ID.\n;label:Inkluder gruppas etikett.\n;description:Inkluder gruppas beskrivelse.\n;class:Inkluder gruppas klasse.\n;namespace:Inkluder gruppas navnerom. Ikke alle grupper hører til ett enkelt navnerom.\n;exists:Inkluder selv-utregnet eksistensegenskap for gruppa.\n;icon:Inkluder URL-er til gruppas ikon.\n;priority:Inkluder prioritetsstatus, som f.eks. frarådet.\n;prioritylangs:Inkluder foretrukne språk. Om det ikke er satt returnerer denne false.\n;priorityforce:Inkluder prioritetsstatus – er innstillingen for prioriterte språk påtvunget?\n;workflowstates:Inkluder arbeidsflyttilstanden for beskjedgruppa.",
+ "apihelp-query+messagegroups-param-root": "Under bruk av treformatet: I stedet for å starte fra toppnivået, start fra den gitte meldingsgruppa, som må være en aggregatgruppe. Når du bruker flatt format vil bare den gitte gruppa returneres.",
+ "apihelp-query+messagegroups-param-languageFilter": "Kun returner meldingsgrupper som kan oversettes til det gitte språket.",
+ "apihelp-query+messagegroups-example-1": "Vis beskjedgrupper",
+ "apihelp-query+messagegroupstats-description": "Kjør spørring på meldingsgruppestatistikk.",
+ "apihelp-query+messagegroupstats-summary": "Kjør spørring på meldingsgruppestatistikk.",
+ "apihelp-query+messagegroupstats-param-group": "Meldingsgruppe-ID.",
+ "apihelp-query+messagegroupstats-param-suppresscomplete": "Ikke vis språk som har fullført denne oversettelsen",
+ "apihelp-query+messagegroupstats-param-suppressempty": "Ikke vis språk som ikke har noen oversettelser",
+ "apihelp-query+messagegroupstats-example-1": "List opp oversettelsesfullføringsstatistikk for gruppa «page-Example»",
+ "apihelp-query+messagetranslations-description": "Spør om alle oversettelser av en enkelt beskjed.",
+ "apihelp-query+messagetranslations-summary": "Spør om alle oversettelser av en enkelt beskjed.",
+ "apihelp-query+messagetranslations-param-title": "Den hele tittelen til en kjent beskjed.",
+ "apihelp-query+messagetranslations-example-1": "List opp oversettelser i wikien for «MediaWiki:January»",
+ "apihelp-managemessagegroups-description": "Legg til en beskjed som en omdøping av en eksisterende beskjed eller en ny beskjed i gruppa under import",
+ "apihelp-managemessagegroups-summary": "Legg til en beskjed som en omdøping av en eksisterende beskjed eller en ny beskjed i gruppa under import",
+ "apihelp-managemessagegroups-param-groupId": "Gruppe-ID",
+ "apihelp-managemessagegroups-param-renameMessageKey": "Målbeskjednøkkelen blir omdøpt",
+ "apihelp-managemessagegroups-param-messageKey": "Erstatningsbeskjednøkkel",
+ "apihelp-managemessagegroups-param-operation": "Operasjonen som skal utføres. Mulige verdier: rename / new",
+ "apihelp-managemessagegroups-param-changesetName": "Endre settnavn – Default / Unattended / MediaWiki osv.",
+ "apihelp-managemessagegroups-param-changesetModified": "Unix-tidsstempel for når endringssettet sist ble endret. Hvis endringssettet har blitt endret etter dette vil API-et gi en feilmelding.",
+ "apihelp-managegroupsynchronizationcache-description": "Behandle mellomlager for gruppersynkronisering.",
+ "apihelp-managegroupsynchronizationcache-summary": "Behandle mellomlager for gruppesynkronisering.",
+ "apihelp-managegroupsynchronizationcache-param-operation": "Operasjonen som skal utføres. Mulige verdier: resolve",
+ "apihelp-managegroupsynchronizationcache-param-title": "Meldingstittel som markeres som løst",
+ "apihelp-managegroupsynchronizationcache-param-group": "Gruppe-ID for meldingen som løses",
+ "apihelp-translatesandbox-description": "Registrering og behandling av sandkassebrukere.",
+ "apihelp-translatesandbox-summary": "Registrering og behandling av sandkassebrukere.",
+ "apihelp-translatesandbox-param-do": "Hva som skal gjøres.",
+ "apihelp-translatesandbox-param-userid": "Bruker-ID-ene til brukerne som behandles. Bruk 0 for opprettelser.",
+ "apihelp-translatesandbox-param-username": "Brukernavn når ny bruker opprettes.",
+ "apihelp-translatesandbox-param-password": "Passord når ny bruker opprettes.",
+ "apihelp-translatesandbox-param-email": "Epost når ny bruker opprettes.",
+ "apihelp-translationaids-description": "Spør mot alle oversettelseshjelpemilder.",
+ "apihelp-translationaids-summary": "Spør mot alle oversettelseshjelpemidler.",
+ "apihelp-translationaids-param-title": "Den hele tittelen til en kjent beskjed.",
+ "apihelp-translationaids-param-group": "Meldingsgruppe meldingsgruppa hører til. Om den er tom vil primærgruppa brukes.",
+ "apihelp-translationaids-param-prop": "Hvilke oversettelseshjelpemidler som skal inkluderes.",
+ "apihelp-translationaids-example-1": "Vis hjelp for [[MediaWiki:January/fi]]",
+ "apihelp-translationreview-description": "Mark oversettelser som godkjent.",
+ "apihelp-translationreview-summary": "Merk oversettelser som godkjent.",
+ "apihelp-translationreview-param-revision": "Revisjonsnummeret som skal godkjennes.",
+ "apihelp-translationreview-example-1": "Godkjenn revisjon 1",
+ "apihelp-translationstash-description": "Legg til oversettelser til stashen.",
+ "apihelp-translationstash-summary": "Legg til oversettelser til stashen.",
+ "apihelp-translationstash-param-subaction": "Handling.",
+ "apihelp-translationstash-param-title": "Tittelen på sida med oversettelsesenheter.",
+ "apihelp-translationstash-param-translation": "Oversettelse gjort av brukeren.",
+ "apihelp-translationstash-param-metadata": "JSON-objekt.",
+ "apihelp-translationstash-param-username": "Brukeren hvis stash skal hentes. Bare priviligerte brukere kan gjøre dette.",
+ "apihelp-translationstash-example-1": "Legg til en oversettelse for stashen for [[MediaWiki:Jan/fi]]",
+ "apihelp-translationstash-example-2": "Spørring mot stashen",
+ "apihelp-ttmserver-description": "Spørringsforslag fra oversettelsesminner.",
+ "apihelp-ttmserver-summary": "Spør mot forslag fra oversettelsesminner.",
+ "apihelp-ttmserver-param-service": "Hvilken av de tilgjengelige oversettelsestjenestene som skal brukes.",
+ "apihelp-ttmserver-param-sourcelanguage": "Språkkoden til kildeteksten.",
+ "apihelp-ttmserver-param-targetlanguage": "Språkkoden til forslaget.",
+ "apihelp-ttmserver-param-text": "Teksten det skal finnes forslag for.",
+ "apihelp-ttmserver-example-1": "Hent forslag for å oversette «Help» fra engelsk til finsk",
+ "apihelp-searchtranslations-description": "Søk i oversettelser.",
+ "apihelp-searchtranslations-summary": "Søk i oversettelser.",
+ "apihelp-searchtranslations-param-service": "Hvilken av de tilgjengelige oversettelsestjenestene som skal brukes.",
+ "apihelp-searchtranslations-param-query": "Strengen det skal søkes etter.",
+ "apihelp-searchtranslations-param-sourcelanguage": "Språkkoden til kildeteksten.",
+ "apihelp-searchtranslations-param-language": "Språkkoden strengen skal søkes etter i.",
+ "apihelp-searchtranslations-param-group": "Gruppe-ID-en strengen skal søkes etter i.",
+ "apihelp-searchtranslations-param-filter": "Filter for meldingsoversettelsesstatus.",
+ "apihelp-searchtranslations-param-match": "Match alle søkeord.",
+ "apihelp-searchtranslations-param-case": "Om søket skal ta hensyn til store og små bokstaver.",
+ "apihelp-searchtranslations-param-offset": "Forskyvning for oversettelsene.",
+ "apihelp-searchtranslations-param-limit": "Resultatets størrelse.",
+ "apihelp-searchtranslations-example-1": "Vis oversettelser for språket.",
+ "apihelp-searchtranslations-example-2": "Vis uoversatte beskjeder som matcher spørringen på målspråket.",
+ "apihelp-translationcheck-description": "Valider gitt oversettelsesinndata mot konfigurerte beskjedvalidatorer.",
+ "apihelp-translationcheck-summary": "Valider oversettelser.",
+ "apihelp-translationcheck-param-title": "Sidetittel med navnerom og språkkode.",
+ "apihelp-translationcheck-param-translation": "Oversettelsen som skal valideres.",
+ "apihelp-translationstats-description": "Hent oversettelsesstatistikk som gjelder oversettelsesredigeringer, aktive oversettere, nye brukere og korrekturlesere.",
+ "apihelp-translationstats-summary": "Hent oversettelsesstatistikk",
+ "apihelp-translationstats-param-count": "Type statistikk som skal hentes",
+ "apihelp-translationstats-param-days": "Antall dager deg skal hentes statistikk for",
+ "apihelp-translationstats-param-group": "Liste over grupper det skal hentes statistikk for.",
+ "apihelp-translationstats-param-language": "Liste over språk det skal hentes stastikk for.",
+ "apihelp-translationstats-param-scale": "Skala for oversettelsesstatistikken",
+ "apihelp-translationstats-param-start": "Datoen det skal hentes oversettelsesstatistikk fra. Standard er nåværende dato minus antall dager (<var>days</var>).",
+ "apihelp-translationstats-example-1": "Hent antall redigeringer for de siste 30 dagene, for alle grupper og språk",
+ "apihelp-translationstats-example-2": "Hent antall redigeringer for de siste 30 dagene, for språkene engelsk og fransk.",
+ "apierror-translate-changeset-modified": "Endringssettet har blitt endret av en annen bruker eller prosess. Endringene dine kan ikke lagres siden det kan overskrive deres endringer. Oppdater siden for å se de siste endringene.",
+ "apierror-translate-duplicateaggregategroup": "Meldingsgruppa finnes allerede",
+ "apierror-translate-fuzzymessage": "Kan ikke vurdere foreldede oversettelser",
+ "apierror-translate-groupreviewdisabled": "Beskjedgruppevurdering er ikke i bruk.",
+ "apierror-translate-invalidaggregategroup": "Ugyldig aggregatmeldingsgruppe",
+ "apierror-translate-invalidaggregategroupname": "Ugyldig navn på aggregatmeldingsgruppe",
+ "apierror-translate-invalidgroup": "Gruppa finnes ikke eller er ugyldig",
+ "apierror-translate-invalidstate": "Den forespurte tilstanden er ugyldig.",
+ "apierror-translate-invalidlanguage": "Språkkoden $1 er ugyldig.",
+ "apierror-translate-invalidupdate": "Ugyldig oppdatering",
+ "apierror-translate-language-disabled": "Oversettelse til $1 er slått av.",
+ "apierror-translate-language-disabled-reason": "Oversettelse til $1 er slått av: $2",
+ "apierror-translate-nodynamicgroups": "Dynamiske beskjedgrupper støttes ikke her",
+ "apierror-translate-nomessagefortitle": "Tittelen samsvarer ikke med en oversettbar melding",
+ "apierror-translate-notranslationservices": "Ingen offentlige oversettelsestjenester har blitt satt opp. Wikiadministratoren må sette <var>$wgTranslateTranslationServices</var> før denne funksjonen kan brukes.",
+ "apierror-translate-owntranslation": "Kan ikke vurdere egne oversettelser",
+ "apierror-translate-sandboxdisabled": "Sandkassefunksjonen er ikke i bruk",
+ "apierror-translate-smg-nochanges": "Det er ingen endringer å prosessere.",
+ "apierror-translate-unknownmessage": "Ukjent melding",
+ "apierror-translate-invalid-changeset-name": "Ugyldig endringssettfilnavn gitt – $1",
+ "apierror-translate-invalid-operation": "Ugyldig operasjon: $1. Gyldige verdier – $2.",
+ "apierror-translate-addition-key-invalid": "Beskjednøkkel gitt for tillegg ble ikke funnet i den omdøpte beskjedlisten for kildespråket.",
+ "apierror-translate-rename-msg-new": "Bare omdøpte beskjeder kan legges til som nye beskjeder.",
+ "apierror-translate-rename-key-invalid": "Beskjednøkler gitt for omdøping ble ikke funnet i listen over endringer for kildespråket.",
+ "apierror-translate-rename-state-invalid": "En av beskjedene som ble gitt for omdøping bør være lagt til som ny, og den andre slettet. Nåværende statuser – tillegg: $1 og sletting: $2.",
+ "apiwarn-translate-alreadyreviewedbyyou": "Allerede merket som vurdert av deg",
+ "apiwarn-translate-language-disabled-source": "Kildespråket for denne gruppa er $1. Velg et annet språk å oversette til.",
+ "apiwarn-translate-language-targetlang-variant-of-source": "<strong>Du oversetter til <bdi>$1</bdi>.</strong> Det er en variant av <bdi>$2</bdi>, som allerede er kildespråket for disse beskjedene. Sørg for at det valgte språket er riktig, og vurder forskjellene mellom disse språkvariantene for å gjøre en god oversettelse.",
+ "apierror-translate-operation-error": "En feil oppsto under prosesseringen av forespørselen. Feil: $1",
+ "apihelp-translationentitysearch-summary": "Søk etter meldingsgrupper og meldinger",
+ "apihelp-translationentitysearch-param-entitytype": "Entitetstype det spørres etter",
+ "apihelp-translationentitysearch-param-query": "Søkeord",
+ "apihelp-translationentitysearch-param-limit": "Maksimalt antall søkeresultater"
+}
diff --git a/Translate/i18n/api/nds-nl.json b/Translate/i18n/api/nds-nl.json
new file mode 100644
index 00000000..6d699b65
--- /dev/null
+++ b/Translate/i18n/api/nds-nl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Servien"
+ ]
+ },
+ "apihelp-translationstash-param-subaction": "Handeling."
+}
diff --git a/Translate/i18n/api/ne.json b/Translate/i18n/api/ne.json
new file mode 100644
index 00000000..4f339487
--- /dev/null
+++ b/Translate/i18n/api/ne.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "NehalDaveND",
+ "Nirjal stha"
+ ]
+ },
+ "apihelp-groupreview-param-group": "सन्देश समूह",
+ "apihelp-groupreview-param-language": "भाषाकोड",
+ "apihelp-query+languagestats-param-language": "भाषाकोड",
+ "apihelp-query+messagecollection-param-group": "सन्देश समूह",
+ "apihelp-query+messagecollection-param-language": "भाषाकोड",
+ "apihelp-translatesandbox-param-do": "के गर्न",
+ "apihelp-translationstash-param-subaction": "क्रिया",
+ "apihelp-ttmserver-param-targetlanguage": "सुझावको भाषा कोड ।"
+}
diff --git a/Translate/i18n/api/nl.json b/Translate/i18n/api/nl.json
new file mode 100644
index 00000000..6f86fbab
--- /dev/null
+++ b/Translate/i18n/api/nl.json
@@ -0,0 +1,50 @@
+{
+ "@metadata": {
+ "authors": [
+ "Elroy",
+ "Mainframe98",
+ "Mar(c)",
+ "McDutchie",
+ "Robin van der Vliet",
+ "Robin0van0der0vliet",
+ "Siebrand",
+ "Sjoerddebruin"
+ ]
+ },
+ "apihelp-aggregategroups-description": "Samengestelde berichtgroepen beheren.\n\nJe kunt samengestelde berichtgroepen toevoegen en verwijderen. Verder kun je berichtgroepen eraan koppelen of ontkoppelen (één per keer).",
+ "apihelp-aggregategroups-summary": "Samengestelde berichtgroepen beheren.",
+ "apihelp-aggregategroups-param-group": "Berichtgroeps-id.",
+ "apihelp-aggregategroups-example-1": "Groep koppelen",
+ "apihelp-groupreview-param-group": "Berichtgroep.",
+ "apihelp-groupreview-param-language": "Taalcode.",
+ "apihelp-query+languagestats-param-language": "Taalcode.",
+ "apihelp-query+messagecollection-param-group": "Berichtgroep.",
+ "apihelp-query+messagecollection-param-language": "Taalcode.",
+ "apihelp-query+messagecollection-example-1": "Lijst van ondersteunde talen",
+ "apihelp-query+messagecollection-example-2": "Lijst met niet-optionele berichtdefinities voor de groep \"page-Example\"",
+ "apihelp-query+messagecollection-example-3": "Lijst met optionele berichten in het Fins met labels voor de groep \"page-Example\"",
+ "apihelp-query+messagecollection-example-4": "Meer informatie over de nieuwste vertaalde versies voor de groep \"page-Example\"",
+ "apihelp-query+messagegroups-example-1": "Berichtgroepen weergeven",
+ "apihelp-query+messagegroupstats-example-1": "Lijst met vertalingsstatistieken voor de groep \"page-Example\"",
+ "apihelp-query+messagetranslations-example-1": "Lijst met vertalingen in de wiki voor \"MediaWiki:January\"",
+ "apihelp-translationstash-param-subaction": "Handeling.",
+ "apihelp-translationstash-param-metadata": "JSON-object.",
+ "apihelp-ttmserver-param-sourcelanguage": "De taalcode van de brontekst.",
+ "apihelp-ttmserver-param-targetlanguage": "De taalcode van de suggestie.",
+ "apihelp-searchtranslations-description": "Vertalingen doorzoeken.",
+ "apihelp-searchtranslations-summary": "Vertalingen doorzoeken.",
+ "apihelp-searchtranslations-example-1": "Toon de vertalingen voor de taal.",
+ "apihelp-translationcheck-summary": "Vertalingen controleren.",
+ "apihelp-translationcheck-param-translation": "Te controleren vertaling.",
+ "apierror-translate-duplicateaggregategroup": "Berichtgroep bestaat al",
+ "apierror-translate-invalidgroup": "Groep bestaat niet of is ongeldig",
+ "apierror-translate-invalidlanguage": "De taalcode $1 is ongeldig.",
+ "apierror-translate-invalidupdate": "Ongeldige vernieuwing",
+ "apierror-translate-language-disabled": "Vertalen naar $1 is uitgeschakeld",
+ "apierror-translate-language-disabled-reason": "Vertalen naar $1 is uitgeschakeld: $2",
+ "apierror-translate-notranslationservices": "Er is geen vertaaldienst ingesteld. De wikibeheerder moet <var>$wgTranslateTranslationServices</var> instellen voor dat deze functie kan worden gebruikt.",
+ "apierror-translate-sandboxdisabled": "De zandboxfunctionaliteit wordt niet gebruikt",
+ "apierror-translate-unknownmessage": "Onbekend bericht",
+ "apiwarn-translate-alreadyreviewedbyyou": "Al door uw als gecontroleerd gemarkeerd",
+ "apiwarn-translate-language-disabled-source": "De brontaal van deze groep is $1. Kies een andere taal om naar te vertalen."
+}
diff --git a/Translate/i18n/api/nn.json b/Translate/i18n/api/nn.json
new file mode 100644
index 00000000..18bfd44f
--- /dev/null
+++ b/Translate/i18n/api/nn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Njardarlogar"
+ ]
+ },
+ "apiwarn-translate-language-disabled-source": "Kjeldespråket til denne gruppa er $1. Vel eit anna språk å setja om til."
+}
diff --git a/Translate/i18n/api/oc.json b/Translate/i18n/api/oc.json
new file mode 100644
index 00000000..b31bee23
--- /dev/null
+++ b/Translate/i18n/api/oc.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cedric31"
+ ]
+ },
+ "apihelp-groupreview-param-language": "Còdi de lenga.",
+ "apihelp-query+languagestats-param-language": "Còdi de lenga.",
+ "apihelp-query+messagecollection-description": "Requèsta MessageCollection sus las traduccions.",
+ "apihelp-query+messagecollection-param-language": "Còdi de lenga.",
+ "apihelp-query+messagetranslations-description": "Demanda l'ensemble de las traduccions per un sol messatge.",
+ "apihelp-query+messagetranslations-example-1": "Lista de las traduccions del wiki per «MediaWiki:genièr»",
+ "apihelp-translationaids-description": "Recèrca totas las ajudas a la traduccion.",
+ "apihelp-translationreview-description": "Marcar las traduccions coma repassadas.",
+ "apihelp-translationstash-description": "Apondre de traduccions a la resèrva.",
+ "apihelp-ttmserver-example-1": "Obténer de suggestions per traduire \"Ajuda\" de l'anglés cap al finés",
+ "apihelp-searchtranslations-description": "Recercar de traduccions.",
+ "apihelp-searchtranslations-param-offset": "Decalatge per las traduccions.",
+ "apihelp-searchtranslations-example-1": "Afichar las traduccions per la lenga."
+}
diff --git a/Translate/i18n/api/pdc.json b/Translate/i18n/api/pdc.json
new file mode 100644
index 00000000..8802cc37
--- /dev/null
+++ b/Translate/i18n/api/pdc.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Xqt"
+ ]
+ },
+ "apihelp-groupreview-param-language": "Schprooche-Code",
+ "apihelp-query+languagestats-param-language": "Schprooche-Code."
+}
diff --git a/Translate/i18n/api/pl.json b/Translate/i18n/api/pl.json
new file mode 100644
index 00000000..80a9f730
--- /dev/null
+++ b/Translate/i18n/api/pl.json
@@ -0,0 +1,52 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chrumps"
+ ]
+ },
+ "apihelp-aggregategroups-summary": "Zarządzaj grupami zbiorczymi komunikatów.",
+ "apihelp-aggregategroups-param-groupname": "Nazwa zbiorczej grupy komunikatów.",
+ "apihelp-aggregategroups-param-groupdescription": "Opis zbiorczej grupy komunikatów.",
+ "apihelp-groupreview-param-group": "Grupa komunikatów.",
+ "apihelp-groupreview-param-language": "Kod języka.",
+ "apihelp-query+languagestats-param-language": "Kod języka.",
+ "apihelp-query+messagecollection-param-group": "Grupa komunikatów.",
+ "apihelp-query+messagecollection-param-language": "Kod języka.",
+ "apihelp-query+messagecollection-param-limit": "Liczba komunikatów do pokazania (po filtrowaniu).",
+ "apihelp-query+messagecollection-example-1": "Lista obsługiwanych języków",
+ "apihelp-query+messagegroups-param-iconsize": "Preferowany rozmiar zrasteryzowanej grupy ikon.",
+ "apihelp-query+messagegroups-example-1": "Pokaż grupy komunikatów",
+ "apihelp-translatesandbox-param-username": "Nazwa użytkownika podczas tworzenia użytkownika.",
+ "apihelp-translatesandbox-param-password": "Hasło podczas tworzenia użytkownika.",
+ "apihelp-translatesandbox-param-email": "E-mail podczas tworzenia użytkownika.",
+ "apihelp-translationreview-description": "Oznacz tłumaczenia jako przejrzane.",
+ "apihelp-translationreview-summary": "Oznacz tłumaczenia jako przejrzane.",
+ "apihelp-translationstash-param-subaction": "Działanie.",
+ "apihelp-translationstash-param-title": "Tytuł strony jednostki tłumaczeniowej.",
+ "apihelp-translationstash-param-translation": "Tłumaczenia wykonane przez użytkownika.",
+ "apihelp-translationstash-param-metadata": "Obiekt JSON.",
+ "apihelp-ttmserver-param-sourcelanguage": "Kod języka tekstu źródłowego.",
+ "apihelp-searchtranslations-description": "Wyszukiwanie tłumaczeń.",
+ "apihelp-searchtranslations-param-query": "Łańcuch znaków do wyszukania.",
+ "apihelp-searchtranslations-param-sourcelanguage": "Kod języka tekstu źródłowego.",
+ "apihelp-searchtranslations-param-language": "Kod języka do wyszukiwania ciąg znaków.",
+ "apihelp-searchtranslations-param-limit": "Rozmiar wyniku.",
+ "apihelp-searchtranslations-example-1": "Pokaż tłumaczenia dla języka.",
+ "apihelp-translationcheck-param-title": "Tytuł strony z przestrzenią nazw i kodem języka.",
+ "apihelp-translationcheck-param-translation": "Tłumaczenie do sprawdzenia poprawności.",
+ "apierror-translate-duplicateaggregategroup": "Grupa komunikatów już istnieje",
+ "apierror-translate-groupreviewdisabled": "Przeglądanie grup komunikatów nie jest używane.",
+ "apierror-translate-invalidaggregategroup": "Nieprawidłowa zbiorcza grupa komunikatów",
+ "apierror-translate-invalidaggregategroupname": "Nieprawidłowa nazwa zbiorczej grupy komunikatów",
+ "apierror-translate-invalidgroup": "Grupa nie istnieje lub jest nieprawidłowa",
+ "apierror-translate-invalidupdate": "Nieprawidłowa aktualizacja",
+ "apierror-translate-language-disabled": "Tłumaczenie na $1 jest wyłączone.",
+ "apierror-translate-language-disabled-reason": "Tłumaczenie na $1 jest wyłączone: $2",
+ "apierror-translate-nodynamicgroups": "Dynamiczne grupy komunikatów nie są tutaj obsługiwane",
+ "apierror-translate-nomessagefortitle": "Tytuł nie odpowiada komunikatowi do tłumaczenia",
+ "apierror-translate-owntranslation": "Nie można przeglądać własnych tłumaczeń",
+ "apierror-translate-sandboxdisabled": "Funkcja brudnopisu nie jest używana",
+ "apierror-translate-unknownmessage": "Nieznany komunikat",
+ "apiwarn-translate-alreadyreviewedbyyou": "Już oznaczono jako przejrzane przez ciebie",
+ "apiwarn-translate-language-disabled-source": "Językiem źródłowym tej grupy jest $1. Wybierz inny język, na który chcesz tłumaczyć."
+}
diff --git a/Translate/i18n/api/pnb.json b/Translate/i18n/api/pnb.json
new file mode 100644
index 00000000..c053be2c
--- /dev/null
+++ b/Translate/i18n/api/pnb.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Abbas dhothar"
+ ]
+ },
+ "apihelp-groupreview-param-language": "بولی کوڈ",
+ "apihelp-query+languagestats-description": "بولی کوڈ",
+ "apihelp-query+languagestats-param-language": "بولی کوڈ",
+ "apihelp-query+messagecollection-param-language": "بولی کوڈ"
+}
diff --git a/Translate/i18n/api/ps.json b/Translate/i18n/api/ps.json
new file mode 100644
index 00000000..30add5b4
--- /dev/null
+++ b/Translate/i18n/api/ps.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ahmed-Najib-Biabani-Ibrahimkhel"
+ ]
+ },
+ "apihelp-aggregategroups-param-do": "د پيغام ډلې راغونډولو سره څه کولی شو.",
+ "apihelp-aggregategroups-param-aggregategroup": "د پيغام ډلې پېژند راغونډول.",
+ "apihelp-aggregategroups-param-group": "د پيغام ډلې پېژند.",
+ "apihelp-aggregategroups-param-groupname": "د پيغام ډلې نوم راغونډول.",
+ "apihelp-aggregategroups-param-groupdescription": "د پيغام ډلې څرگندونه راغونډول.",
+ "apihelp-aggregategroups-example-1": "يوه ډله اړوندول",
+ "apihelp-groupreview-param-group": "پيغام ډله.",
+ "apihelp-groupreview-param-language": "د ژبې کوډ.",
+ "apihelp-query+languagestats-param-language": "د ژبې کوډ.",
+ "apihelp-query+messagecollection-param-group": "پيغام ډله.",
+ "apihelp-query+messagecollection-param-language": "د ژبې کوډ.",
+ "apihelp-query+messagecollection-example-1": "د ملاتړو ژبو لړليک",
+ "apihelp-query+messagegroups-example-1": "پيغام ډلې ښکاره کول",
+ "apihelp-query+messagegroupstats-param-group": "د پيغام ډلې پېژند.",
+ "apihelp-translatesandbox-param-do": "څه کولی شم.",
+ "apihelp-translationstash-param-subaction": "کړنه.",
+ "apihelp-searchtranslations-description": "ژباړې پلټل.",
+ "apihelp-searchtranslations-param-limit": "د پايلې کچه.",
+ "apihelp-searchtranslations-example-1": "د ټاکلې ژبې ژباړې ښکاره کول."
+}
diff --git a/Translate/i18n/api/pt-br.json b/Translate/i18n/api/pt-br.json
new file mode 100644
index 00000000..70a4d0a4
--- /dev/null
+++ b/Translate/i18n/api/pt-br.json
@@ -0,0 +1,173 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dianakc",
+ "Eduardo Addad de Oliveira",
+ "Eduardoaddad",
+ "Felipe L. Ewald",
+ "Mordecool",
+ "Svjatysberega",
+ "TheEduGobi"
+ ]
+ },
+ "apihelp-aggregategroups-description": "Gerencie grupos de mensagens agregadas.\n\nVocê pode adicionar e remover grupos de mensagens agregadas e associar ou dissociar grupos de mensagens deles (um de cada vez).",
+ "apihelp-aggregategroups-summary": "Gerencie grupos de mensagens agregadas.",
+ "apihelp-aggregategroups-extended-description": "Você pode adicionar e remover grupos de mensagens agregados e associar ou dissociar grupos de mensagens deles (um de cada vez).",
+ "apihelp-aggregategroups-param-do": "O que fazer com o grupo de mensagens agregadas.",
+ "apihelp-aggregategroups-param-aggregategroup": "ID agregada do grupo de mensagens.",
+ "apihelp-aggregategroups-param-group": "ID do grupo de mensagens.",
+ "apihelp-aggregategroups-param-groupname": "Agregar grupo de mensagens por nome.",
+ "apihelp-aggregategroups-param-groupdescription": "Descrição agregada do grupo de mensagens.",
+ "apihelp-aggregategroups-example-1": "Associar um grupo",
+ "apihelp-groupreview-description": "Defina estados de fluxo de trabalho do grupo de mensagens.",
+ "apihelp-groupreview-summary": "Defina estados de fluxo de trabalho do grupo de mensagens.",
+ "apihelp-groupreview-param-group": "Grupo de mensagens.",
+ "apihelp-groupreview-param-language": "Código da linguagem.",
+ "apihelp-groupreview-param-state": "O novo estado para o grupo.",
+ "apihelp-groupreview-example-1": "Marque o estado da tradução alemã para o grupo de mensagens \"group-Example\" como preparado",
+ "apihelp-query+languagestats-description": "Consultar estatísticas de idioma.",
+ "apihelp-query+languagestats-summary": "Consultar estatísticas de idioma.",
+ "apihelp-query+languagestats-param-language": "Código da linguagem.",
+ "apihelp-query+languagestats-example-1": "Lista de estatísticas de conclusão de tradução para finlandês",
+ "apihelp-query+messagecollection-description": "Consultar MessageCollection sobre traduções.",
+ "apihelp-query+managemessagegroups-summary": "Buscar possíveis renomeados para uma mensagem em um grupo durante as importações",
+ "apihelp-query+managemessagegroups-description": "Buscar possíveis renomeados para uma mensagem em um grupo durante as importações",
+ "apihelp-query+managemessagegroups-param-groupId": "ID do grupo",
+ "apihelp-query+managemessagegroups-param-messageKey": "Chave de mensagem",
+ "apihelp-query+managemessagegroups-param-changesetName": "Alterar nome do conjunto - Padrão / Autônomo / MediaWiki etc.",
+ "apihelp-query+managemessagegroups-example-1": "Buscar possíveis renomeações para a chave especificada no grupo especificado.",
+ "apihelp-query+messagecollection-summary": "Consultar MessageCollection sobre traduções.",
+ "apihelp-query+messagecollection-param-group": "Grupo de mensagens.",
+ "apihelp-query+messagecollection-param-language": "Código da linguagem.",
+ "apihelp-query+messagecollection-param-limit": "Quantas mensagem mostrar (após a filtragem).",
+ "apihelp-query+messagecollection-param-offset": "Inteiro ou deslocamento da chave para o início.",
+ "apihelp-query+messagecollection-param-filter": "Filtros de cobrança de mensagens. Use <kbd>!</Kbd> para negar a condição. Por exemplo, <kbd>!fuzzy</kbd> significa listar apenas todas as mensagens não difusas. Os filtros são aplicados na ordem indicada.\n;fuzzy:Mensagens com tag fuzzy.\n;opcional:Mensagens que devem ser traduzidas somente se forem necessárias alterações.\n;ignoradas:Mensagens que nunca são traduzidas.\n;hastranslation:Mensagens que têm uma tradução, independentemente se for difusa ou não.\n;traduzido:Mensagens que têm uma tradução que não é difusa.\n;alterada:Mensagens que foram traduzidas ou alteradas desde a última exportação.\n;reviewer&#58;N:Mensagens onde o número de usuário <kbd>N</kbd> está entre os revisores.\n;last-translator&#58;N:Mensagens onde o número de usuário <kbd>N</kbd> é o último tradutor.",
+ "apihelp-query+messagecollection-param-prop": "Quais propriedades obter:\n;definição:Definição da mensagem.\n;tradução:Tradução atual (sem a string $1, se houver, use as tags para verificar traduções desatualizadas ou quebradas).\n;tags:Tags de mensagens, como opcionais, ignorado e fuzzy.\n;properties:Propriedades da mensagem, como status, revisão, último tradutor. Pode variar entre as mensagens.\n;revision:<span class=\"deprecated\">Obsoleto!</span> Use $2prop=properties.",
+ "apihelp-query+messagecollection-example-1": "Lista de idiomas suportados",
+ "apihelp-query+messagecollection-example-2": "Lista de definições de mensagens não-opcionais para o grupo \"page-Example\"",
+ "apihelp-query+messagecollection-example-3": "Lista de mensagens opcionais em finlandês com tags para o grupo \"page-Example\"",
+ "apihelp-query+messagecollection-example-4": "Mais informações sobre revisões de tradução mais recentes para o grupo \"page-Example\"",
+ "apihelp-query+messagegroups-description": "Retorna informações sobre grupos de mensagens.\n\nNote que o parâmetro uselang afeta a saída de partes dependentes do idioma.",
+ "apihelp-query+messagegroups-summary": "Retorna informações sobre grupos de mensagens.",
+ "apihelp-query+messagegroups-extended-description": "Observe que o parâmetro uselang afeta a saída de partes dependentes do idioma.",
+ "apihelp-query+messagegroups-param-depth": "Ao usar o formato da árvore, limite a profundidade para esses vários níveis. O valor 0 significa que nenhum subgrupo é mostrado. Se o limite for atingido, a saída inclui um valor de \"goupcount\", que indica o número de crianças diretas.",
+ "apihelp-query+messagegroups-param-filter": "Somente retornar mensagens com IDs que correspondem a uma ou mais das entradas fornecidas (sem diferenciação de maiúsculas e minúsculas, separadas por pipes, * curinga).",
+ "apihelp-query+messagegroups-param-format": "No formato da árvore, os grupos de mensagens podem existir em vários lugares na árvore.",
+ "apihelp-query+messagegroups-param-iconsize": "Tamanho preferido do ícone do grupo rasterizado.",
+ "apihelp-query+messagegroups-param-prop": "Qual informação relacionada à tradução para obter:\n;id:Incluir ID do grupo.\n;rótulo:Incluir rótulo do grupo.\n;descrição:Incluir descrição do grupo.\n;classe:Incluir nome da classe do grupo.\n;namespace:Incluir espaço nominal do grupo. Nem todos os grupos pertencem a um único espaço nominal.\n;existe:Incluir propriedade de existência auto-calculada do grupo.\n;ícone:Incluir URLs para o ícone do grupo.\n;prioridade:incluir status de prioridade como desencorajado.\n;prioritylangs:Incluir idiomas preferenciais. Se não for definido, isso retorna false.\n;priorityforce:Incluir status de prioridade - é a configuração de idioma de prioridade forçada.\n;workflowstates:Inclua os estados de fluxo de trabalho para o grupo de mensagens.",
+ "apihelp-query+messagegroups-param-root": "Ao usar o formato da árvore, em vez de começar do início do nível superior do grupo de mensagens fornecido, que deve ser um grupo de mensagens agregado. Ao usar apenas o formato plano, o grupo especificado é retornado.",
+ "apihelp-query+messagegroups-example-1": "Mostrar grupos de mensagens",
+ "apihelp-query+messagegroupstats-description": "Consultar estatísticas do grupo de mensagens.",
+ "apihelp-query+messagegroupstats-summary": "Consultar estatísticas do grupo de mensagens.",
+ "apihelp-query+messagegroupstats-param-group": "ID do grupo de mensagens.",
+ "apihelp-query+messagegroupstats-example-1": "Lista de estatísticas de conclusão de tradução para o grupo \"page-Example\"",
+ "apihelp-query+messagetranslations-description": "Consultar todas as traduções para uma única mensagem.",
+ "apihelp-query+messagetranslations-summary": "Consultar todas as traduções para uma única mensagem.",
+ "apihelp-query+messagetranslations-param-title": "Título completo de uma mensagem conhecida.",
+ "apihelp-query+messagetranslations-example-1": "Lista de traduções na wiki para \"MediaWiki:January\"",
+ "apihelp-managemessagegroups-description": "Adicione uma mensagem como renomear uma mensagem existente ou uma nova mensagem no grupo durante as importações",
+ "apihelp-managemessagegroups-summary": "Adicione uma mensagem como renomear uma mensagem existente ou uma nova mensagem no grupo durante as importações",
+ "apihelp-managemessagegroups-param-groupId": "ID do grupo",
+ "apihelp-managemessagegroups-param-renameMessageKey": "Chave de mensagem de destino sendo renomeada",
+ "apihelp-managemessagegroups-param-messageKey": "Chave de mensagem de substituição",
+ "apihelp-managemessagegroups-param-operation": "A operação a ser executada. Valores possíveis: renomear / novo",
+ "apihelp-managemessagegroups-param-changesetName": "Alterar nome do conjunto - Padrão / Autônomo / MediaWiki etc.",
+ "apihelp-managemessagegroups-param-changesetModified": "Registro de data e hora do Unix de quando o conjunto de alterações foi modificado pela última vez. Se o conjunto de alterações tiver sido modificado depois disso, a API lançará um erro.",
+ "apihelp-managegroupsynchronizationcache-description": "Gerenciar cache de sincronização de grupo.",
+ "apihelp-managegroupsynchronizationcache-summary": "Gerenciar cache de sincronização de grupo.",
+ "apihelp-managegroupsynchronizationcache-param-operation": "A operação a ser executada. Valores possíveis: resolve",
+ "apihelp-managegroupsynchronizationcache-param-title": "Título da mensagem sendo marcado como resolvido",
+ "apihelp-managegroupsynchronizationcache-param-group": "ID do grupo da mensagem sendo resolvida",
+ "apihelp-translatesandbox-description": "Inscreva-se e gerencie usuários da sandbox.",
+ "apihelp-translatesandbox-summary": "Inscreva-se e gerencie usuários da sandbox.",
+ "apihelp-translatesandbox-param-do": "O que fazer.",
+ "apihelp-translatesandbox-param-userid": "IDs de usuários dos usuários que estão sendo gerenciados. Use 0 para criações.",
+ "apihelp-translatesandbox-param-username": "Nome de usuário ao criar usuário.",
+ "apihelp-translatesandbox-param-password": "Senha ao criar usuário.",
+ "apihelp-translatesandbox-param-email": "E-mail ao criar usuário.",
+ "apihelp-translationaids-description": "Consultar todas as ajudas de tradução.",
+ "apihelp-translationaids-summary": "Consultar todas as ajudas de tradução.",
+ "apihelp-translationaids-param-title": "Título completo de uma mensagem conhecida.",
+ "apihelp-translationaids-param-group": "O grupo de mensagens à qual a mensagem pertence. Se estiver vazio, o grupo primário é usado.",
+ "apihelp-translationaids-param-prop": "Que ajudantes de tradução incluir.",
+ "apihelp-translationaids-example-1": "Mostrar ajudas para [[MediaWiki:January/fi]]",
+ "apihelp-translationreview-description": "Marcar traduções revisadas.",
+ "apihelp-translationreview-summary": "Marcar traduções revisadas.",
+ "apihelp-translationreview-param-revision": "O número da revisão a ser revisado.",
+ "apihelp-translationreview-example-1": "Revisar revisão 1",
+ "apihelp-translationstash-description": "Adicione traduções para o stash.",
+ "apihelp-translationstash-summary": "Adicione traduções para o stash.",
+ "apihelp-translationstash-param-subaction": "Ação.",
+ "apihelp-translationstash-param-title": "Título da página da unidade de tradução.",
+ "apihelp-translationstash-param-translation": "Tradução feita pelo usuário.",
+ "apihelp-translationstash-param-metadata": "Objeto JSON.",
+ "apihelp-translationstash-param-username": "Opcionalmente, o usuário cujo stash obter. Somente os usuários privilegiados podem fazer isso.",
+ "apihelp-translationstash-example-1": "Adiciona uma tradução ao stash para [[MediaWiki:Jan/fi]]",
+ "apihelp-translationstash-example-2": "Consulta o stash",
+ "apihelp-ttmserver-description": "Consultar sugestões das memórias de tradução.",
+ "apihelp-ttmserver-summary": "Consultar sugestões das memórias de tradução.",
+ "apihelp-ttmserver-param-service": "Qual dos serviços de tradução disponíveis para usar.",
+ "apihelp-ttmserver-param-sourcelanguage": "O código de idioma do texto original.",
+ "apihelp-ttmserver-param-targetlanguage": "O código de idioma da sugestão.",
+ "apihelp-ttmserver-param-text": "O texto para o qual encontrar sugestões.",
+ "apihelp-ttmserver-example-1": "Obtenha sugestões para traduzir \"Help\" do inglês para o finlandês",
+ "apihelp-searchtranslations-description": "Pesquisar traduções.",
+ "apihelp-searchtranslations-summary": "Pesquisar traduções.",
+ "apihelp-searchtranslations-param-service": "Qual dos serviços de tradução disponíveis para usar.",
+ "apihelp-searchtranslations-param-query": "A string pela qual procurar.",
+ "apihelp-searchtranslations-param-sourcelanguage": "O código de idioma do texto original.",
+ "apihelp-searchtranslations-param-language": "O código de idioma para o qual procurar string.",
+ "apihelp-searchtranslations-param-group": "O ID do grupo para pesquisar a string.",
+ "apihelp-searchtranslations-param-filter": "Filtro de status da tradução de mensagens.",
+ "apihelp-searchtranslations-param-match": "Corresponder qualquer/todas as palavras da pesquisa.",
+ "apihelp-searchtranslations-param-case": "Pesquisa caso (não)sensitiva.",
+ "apihelp-searchtranslations-param-offset": "Offset para as traduções.",
+ "apihelp-searchtranslations-param-limit": "Tamanho do resultado.",
+ "apihelp-searchtranslations-example-1": "Mostrar traduções para o idioma.",
+ "apihelp-searchtranslations-example-2": "Mostre mensagens não traduzidas correspondentes à consulta no idioma de origem.",
+ "apihelp-translationcheck-description": "Valide a entrada de conversão fornecida em relação aos validadores de mensagens configurados.",
+ "apihelp-translationcheck-summary": "Validar traduções.",
+ "apihelp-translationcheck-param-title": "Título de página com espaço nominal e código de língua.",
+ "apihelp-translationcheck-param-translation": "A tradução para validar.",
+ "apihelp-translationstats-description": "Obtenha estatísticas de tradução relacionadas a edições de tradução, traduções ativas, novos usuários, revisões de tradução e revisores.",
+ "apihelp-translationstats-summary": "Obter estatísticas de tradução",
+ "apihelp-translationstats-param-count": "Tipo de estatística solicitada",
+ "apihelp-translationstats-param-days": "Número de dias para buscar estatísticas para",
+ "apihelp-translationstats-param-group": "Lista de grupos para os quais buscar estatísticas.",
+ "apihelp-translationstats-param-language": "Lista de idiomas para os quais buscar estatísticas.",
+ "apihelp-translationstats-param-scale": "Escala das estatísticas de tradução",
+ "apihelp-translationstats-param-start": "Data de início a partir da qual buscar estatísticas de tradução. O padrão é a data atual menos o número de 'dias'.",
+ "apihelp-translationstats-example-1": "Obter contagem de edições dos últimos 30 dias, para todos os grupos e idiomas",
+ "apihelp-translationstats-example-2": "Obtenha a contagem de edições dos últimos 30 dias, para os idiomas inglês e francês.",
+ "apierror-translate-changeset-modified": "O conjunto de alterações foi modificado por outro usuário ou processo. Suas alterações não podem ser salvas, pois podem substituir as alterações. Atualize a página para ver as alterações mais recentes.",
+ "apierror-translate-duplicateaggregategroup": "Grupo de mensagens já existe",
+ "apierror-translate-fuzzymessage": "Não é possível revisar as traduções imprecisas",
+ "apierror-translate-groupreviewdisabled": "Revisão do grupo de mensagens não está em uso.",
+ "apierror-translate-invalidaggregategroup": "Grupo de mensagens agregadas inválido",
+ "apierror-translate-invalidaggregategroupname": "Nome do grupo de mensagens agregado inválido",
+ "apierror-translate-invalidgroup": "O grupo não existe ou é inválido",
+ "apierror-translate-invalidstate": "O estado solicitado é inválido.",
+ "apierror-translate-invalidlanguage": "O código de idioma $1 não é válido.",
+ "apierror-translate-invalidupdate": "Atualização inválida",
+ "apierror-translate-language-disabled": "A tradução para $1 foi impossibilitada.",
+ "apierror-translate-language-disabled-reason": "A tradução para $1 foi impossibilitada: $2",
+ "apierror-translate-nodynamicgroups": "Os grupos de mensagens dinâmicas não são suportados aqui",
+ "apierror-translate-nomessagefortitle": "O título não corresponde a uma mensagem traduzível",
+ "apierror-translate-notranslationservices": "Não foram configurados serviços públicos de tradução. O administrador da wiki precisa de definir <var>$wgTranslateTranslationServices</var> devidamente para esta funcionalidade poder ser usada.",
+ "apierror-translate-owntranslation": "Não é possível revisar as próprias traduções",
+ "apierror-translate-sandboxdisabled": "O recurso sandbox não está em uso",
+ "apierror-translate-smg-nochanges": "Não há alterações a processar.",
+ "apierror-translate-unknownmessage": "Mensagem desconhecida",
+ "apierror-translate-invalid-changeset-name": "Nome do arquivo do conjunto de alterações inválido passado - $1",
+ "apierror-translate-invalid-operation": "Operação inválida: $1. Valores válidos - $2.",
+ "apierror-translate-addition-key-invalid": "A chave da mensagem passada para adição não foi encontrada na lista de mensagens renomeadas para o idioma de origem.",
+ "apierror-translate-rename-msg-new": "Somente mensagens renomeadas podem ser adicionadas como novas mensagens.",
+ "apierror-translate-rename-key-invalid": "As chaves de mensagem transmitidas para renomear não foram encontradas na lista de alterações no idioma de origem.",
+ "apierror-translate-rename-state-invalid": "Uma das mensagens passadas para renomear deve ser adicionada recentemente e a outra excluída. Estados atuais - adição: $1 e exclusão: $2.",
+ "apiwarn-translate-alreadyreviewedbyyou": "Já marcado como revisado por você",
+ "apiwarn-translate-language-disabled-source": "O idioma de origem deste grupo é $1. Selecione outro idioma, para a qual irá traduzir, por favor.",
+ "apierror-translate-operation-error": "Ocorreu um erro ao processar o pedido. Erro: $1",
+ "apihelp-translationentitysearch-summary": "Pesquise grupos de mensagens e mensagens",
+ "apihelp-translationentitysearch-param-query": "Consulta de pesquisa",
+ "apihelp-translationentitysearch-param-limit": "Número máximo de resultados da pesquisa"
+}
diff --git a/Translate/i18n/api/pt.json b/Translate/i18n/api/pt.json
new file mode 100644
index 00000000..874ed78b
--- /dev/null
+++ b/Translate/i18n/api/pt.json
@@ -0,0 +1,178 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fúlvio",
+ "Hamilton Abreu",
+ "Mansil",
+ "Mansil alfalb",
+ "Vitorvicentevalente"
+ ]
+ },
+ "apihelp-aggregategroups-description": "Administrar grupos de mensagens agregadas.\n\nPode adicionar e remover grupos de mensagens agregadas e associar-lhes ou desassociar-lhes grupos de mensagens (um de cada vez).",
+ "apihelp-aggregategroups-summary": "Administrar grupos de mensagens agregadas.",
+ "apihelp-aggregategroups-extended-description": "Pode adicionar e remover grupos de mensagens agregadas e associar-lhes ou desassociar-lhes grupos de mensagens (um de cada vez).",
+ "apihelp-aggregategroups-param-do": "O que fazer com o grupo de mensagens agregadas.",
+ "apihelp-aggregategroups-param-aggregategroup": "Identificador do grupo de mensagens agregadas.",
+ "apihelp-aggregategroups-param-group": "Identificador do grupo de mensagens.",
+ "apihelp-aggregategroups-param-groupname": "Nome do grupo agregador de mensagens.",
+ "apihelp-aggregategroups-param-groupdescription": "Descrição do grupo agregador de mensagens.",
+ "apihelp-aggregategroups-example-1": "Associar um grupo",
+ "apihelp-groupreview-description": "Definir estados do fluxo de trabalho dos grupos de mensagens.",
+ "apihelp-groupreview-summary": "Definir estados do fluxo de trabalho dos grupos de mensagens.",
+ "apihelp-groupreview-param-group": "Grupo de mensagens.",
+ "apihelp-groupreview-param-language": "Código de língua.",
+ "apihelp-groupreview-param-state": "O novo estado do grupo.",
+ "apihelp-groupreview-example-1": "Marcar o estado da tradução para alemão do grupo de mensagens \"group-Example\" como pronta",
+ "apihelp-query+languagestats-description": "Consultar estatísticas de línguas.",
+ "apihelp-query+languagestats-summary": "Consultar estatísticas de línguas.",
+ "apihelp-query+languagestats-param-language": "Código de língua.",
+ "apihelp-query+languagestats-param-group": "Identificador do grupo de mensagens.",
+ "apihelp-query+languagestats-example-1": "Lista das estatísticas de finalização de traduções para finlandês",
+ "apihelp-query+languagestats-example-2": "Lista das estatísticas de finalização da tradução para finlandês do grupo A",
+ "apihelp-query+messagecollection-description": "Consultar MessageCollection sobre traduções.",
+ "apihelp-query+managemessagegroups-summary": "Obter possíveis alterações do nome para uma mensagem de um grupo durante as importações",
+ "apihelp-query+managemessagegroups-description": "Obter possíveis alterações do nome para uma mensagem de um grupo durante as importações",
+ "apihelp-query+managemessagegroups-param-groupId": "Identificador de grupo",
+ "apihelp-query+managemessagegroups-param-messageKey": "Chave de mensagem",
+ "apihelp-query+managemessagegroups-param-changesetName": "Alterar nome do conjunto - Padrão / Não vigiado / MediaWiki, etc.",
+ "apihelp-query+managemessagegroups-example-1": "Obter possíveis alterações do nome para a chave especificada no grupo especificado.",
+ "apihelp-query+messagecollection-summary": "Consultar MessageCollection sobre traduções.",
+ "apihelp-query+messagecollection-param-group": "Grupo de mensagens.",
+ "apihelp-query+messagecollection-param-language": "Código de língua.",
+ "apihelp-query+messagecollection-param-limit": "Número de mensagens a serem mostradas (após filtragem).",
+ "apihelp-query+messagecollection-param-offset": "Número inteiro ou posição da chave de início.",
+ "apihelp-query+messagecollection-param-filter": "Filtros de recolha de mensagens. Use <kbd>!</kbd> para negar uma condição. Por exemplo, <kbd>!fuzzy</kbd> significa listar só as mensagens não sinalizadas com FUZZY. Os filtros são aplicados na ordem fornecida.\n;fuzzy:Mensagens com a etiqueta FUZZY.\n;optional:Mensagens que só devem ser traduzidas se forem necessárias mudanças.\n;ignored:Mensagens que nunca são traduzidas.\n;hastranslation:Mensagens que têm uma tradução, sinalizada ou não com a etiqueta FUZZY.\n;translated:Mensagens que têm uma tradução não sinalizada com a etiqueta FUZZY.\n;changed:Mensagens que foram traduzidas ou alteradas desde a última exportação.\n;reviewer&#58;N:Mensagens onde o utilizador nº <kbd>N</kbd> está entre os revisores.\n;last-translator&#58;N:Mensagens onde o utilizador nº <kbd>N</kbd> é o último tradutor.",
+ "apihelp-query+messagecollection-param-prop": "As propriedades que serão obtidas:\n;definition:Definição da mensagem.\n;translation:Tradução atual (sem o texto $1, se existir, usar as etiquetas para verificar se as traduções são antigas ou incorretas).\n;tags:Etiquetas da mensagem, como \"optional\" (opcional), \"ignored\" (ignorada) e \"fuzzy\".\n;properties:Propriedades da mensagem, como \"status\" (estado), \"revision\" (revisão), \"last-translator\" (último tradutor). Pode variar entre mensagens.\n;revision:<span class=\"deprecated\">Obsoleto!</span> Usar $2prop=properties.",
+ "apihelp-query+messagecollection-example-1": "Lista de línguas suportadas.",
+ "apihelp-query+messagecollection-example-2": "Lista de definições obrigatórias de mensagens do grupo \"page-Example\"",
+ "apihelp-query+messagecollection-example-3": "Lista de mensagens opcionais em finlandês com etiquetas para o grupo \"page-Example\"",
+ "apihelp-query+messagecollection-example-4": "Mais informação sobre as últimas revisões de traduções para o grupo \"page-Example\"",
+ "apihelp-query+messagegroups-description": "Devolver informação sobre grupos de mensagens.\n\nNota que o parâmetro \"uselang\" afeta o resultado das partes dependentes da língua.",
+ "apihelp-query+messagegroups-summary": "Devolver informação sobre grupos de mensagens.",
+ "apihelp-query+messagegroups-extended-description": "Nota que o parâmetro \"uselang\" afeta o resultado das partes dependentes da língua.",
+ "apihelp-query+messagegroups-param-depth": "Quando for usado o formato de árvore, limitar a profundidade a esta quantidade de níveis. O valor 0 significa que não serão mostrados subgrupos. Se o limite for atingido, o resultado inclui um valor de \"contagem de grupo\", que indica o número de filhos diretos.",
+ "apihelp-query+messagegroups-param-filter": "Só devolver mensagens com identificadores que correspondam a uma ou mais das entradas fornecidas (sem diferenciar maiúsculas e minúsculas, separados por barras verticais, * como carácter de substituição).",
+ "apihelp-query+messagegroups-param-format": "Em forma de árvore, os grupos de mensagens podem existir em mais do que um lugar na árvore.",
+ "apihelp-query+messagegroups-param-iconsize": "Tamanho preferido do ícone de grupo em formato ''raster''.",
+ "apihelp-query+messagegroups-param-prop": "Que informação será obtida sobre a tradução:\n;id:Incluir o identificador do grupo.\n;label:Incluir a etiqueta do grupo.\n;description:Incluir a descrição do grupo.\n;class:Incluir o nome de classe do grupo.\n;namespace:Incluir o espaço nominal do grupo. Nem todos os grupos pertencem a um único espaço nominal.\n;exists:Incluir a propriedade de existência autocalculada do grupo.\n;icon:Incluir URL para ícone do grupo.\n;priority:Incluir o estado de prioridade, como desencorajado.\n;prioritylangs:Incluir línguas preferidas. Se não estiver definido, devolve \"false\" (falso).\n;priorityforce:Incluir o estado da prioridade - se a definição de prioridade de línguas é forçada.\n;workflowstates:Incluir os estados do fluxo de trabalho do grupo de mensagens.",
+ "apihelp-query+messagegroups-param-root": "Quando for usado o formato de árvore, em vez de começar pelo nível de topo, começar pelo grupo de mensagens fornecido, que tem de ser um grupo agregador de mensagens. Quando for usado o formato simples só é devolvido o grupo especificado.",
+ "apihelp-query+messagegroups-param-languageFilter": "Devolver apenas grupos de mensagens que podem ser traduzidos para a língua especificada.",
+ "apihelp-query+messagegroups-example-1": "Mostrar grupos de mensagens",
+ "apihelp-query+messagegroupstats-description": "Consultar estatísticas do grupo de mensagens.",
+ "apihelp-query+messagegroupstats-summary": "Consultar estatísticas do grupo de mensagens.",
+ "apihelp-query+messagegroupstats-param-group": "Identificador do grupo de mensagens.",
+ "apihelp-query+messagegroupstats-param-suppresscomplete": "Ocultar línguas com traduções completas",
+ "apihelp-query+messagegroupstats-param-suppressempty": "Ocultar línguas sem traduções",
+ "apihelp-query+messagegroupstats-example-1": "Lista das estatísticas de finalização de traduções para o grupo \"page-Example\"",
+ "apihelp-query+messagetranslations-description": "Consultar todas as traduções de uma única mensagem.",
+ "apihelp-query+messagetranslations-summary": "Consultar todas as traduções de uma única mensagem.",
+ "apihelp-query+messagetranslations-param-title": "Título completo de uma mensagem conhecida.",
+ "apihelp-query+messagetranslations-example-1": "Lista de traduções na wiki de \"MediaWiki:January\"",
+ "apihelp-managemessagegroups-description": "Adicionar uma mensagem como alteração do nome de uma mensagem existente ou como mensagem nova no grupo durante as importações",
+ "apihelp-managemessagegroups-summary": "Adicionar uma mensagem como alteração do nome de uma mensagem existente ou como mensagem nova no grupo durante as importações",
+ "apihelp-managemessagegroups-param-groupId": "Identificador de grupo",
+ "apihelp-managemessagegroups-param-renameMessageKey": "Chave de mensagem, a ser alterada",
+ "apihelp-managemessagegroups-param-messageKey": "Chave de mensagem de substituição",
+ "apihelp-managemessagegroups-param-operation": "A operação a ser realizada. Valores possíveis: rename (alterar nome) / new (novo)",
+ "apihelp-managemessagegroups-param-changesetName": "Nome do conjunto de alterações - Default (Padrão) / Unattended (Autónomo) / MediaWiki, etc.",
+ "apihelp-managemessagegroups-param-changesetModified": "Data e hora Unix da última modificação do conjunto de alterações. Se o conjunto tiver sido modificado depois desta data e hora a API gera um erro.",
+ "apihelp-managegroupsynchronizationcache-description": "Gerir a cache de sincronização de grupos.",
+ "apihelp-managegroupsynchronizationcache-summary": "Gerir a cache de sincronização de grupos.",
+ "apihelp-managegroupsynchronizationcache-param-operation": "A operação a ser realizada. Valores possíveis: resolve (obter)",
+ "apihelp-managegroupsynchronizationcache-param-title": "Título da mensagem a ser marcada como obtida",
+ "apihelp-managegroupsynchronizationcache-param-group": "Identificação do grupo de mensagens que está a ser obtido",
+ "apihelp-translatesandbox-description": "Registar e gerir os utilizadores em teste.",
+ "apihelp-translatesandbox-summary": "Registar e gerir os utilizadores em teste.",
+ "apihelp-translatesandbox-param-do": "O que fazer.",
+ "apihelp-translatesandbox-param-userid": "Identificadores dos utilizadores a serem geridos. Use 0 para criá-los.",
+ "apihelp-translatesandbox-param-username": "Nome de utilizador ao criá-lo.",
+ "apihelp-translatesandbox-param-password": "Palavra-passe ao criar o utilizador.",
+ "apihelp-translatesandbox-param-email": "Correio eletrónico ao criar o utilizador.",
+ "apihelp-translationaids-description": "Consultar todos os auxiliares de tradução.",
+ "apihelp-translationaids-summary": "Consultar todos os auxiliares de tradução.",
+ "apihelp-translationaids-param-title": "Título completo de uma mensagem conhecida.",
+ "apihelp-translationaids-param-group": "Grupo de mensagens ao qual a mensagem pertence. Se vazio, será usado o grupo principal.",
+ "apihelp-translationaids-param-prop": "Os auxiliares de tradução a serem incluídos.",
+ "apihelp-translationaids-example-1": "Mostrar auxílios para [[MediaWiki:January/fi]]",
+ "apihelp-translationreview-description": "Marcar as traduções como revistas.",
+ "apihelp-translationreview-summary": "Marcar as traduções como revistas.",
+ "apihelp-translationreview-param-revision": "O número da revisão a ser revista.",
+ "apihelp-translationreview-example-1": "Revisar a revisão 1",
+ "apihelp-translationstash-description": "Adicionar traduções à área temporária.",
+ "apihelp-translationstash-summary": "Adicionar traduções à área temporária.",
+ "apihelp-translationstash-param-subaction": "Ação.",
+ "apihelp-translationstash-param-title": "Título da página da unidade de tradução.",
+ "apihelp-translationstash-param-translation": "Tradução realizada pelo utilizador.",
+ "apihelp-translationstash-param-metadata": "Objeto JSON.",
+ "apihelp-translationstash-param-username": "Opcionalmente, o utilizador cuja área temporária de traduções será obtida. Só os utilizadores privilegiados podem fazer isto.",
+ "apihelp-translationstash-example-1": "Adicionar à área temporária de traduções uma tradução para [[MediaWiki:Jan/fi]]",
+ "apihelp-translationstash-example-2": "Consultar a área temporária de traduções",
+ "apihelp-ttmserver-description": "Consultar as sugestões das memórias de tradução.",
+ "apihelp-ttmserver-summary": "Consultar as sugestões das memórias de tradução.",
+ "apihelp-ttmserver-param-service": "Que serviços de tradução disponíveis usar.",
+ "apihelp-ttmserver-param-sourcelanguage": "O código de língua do texto de origem.",
+ "apihelp-ttmserver-param-targetlanguage": "O código de língua da sugestão.",
+ "apihelp-ttmserver-param-text": "O texto para o qual procurar sugestões.",
+ "apihelp-ttmserver-example-1": "Obter sugestões para traduzir \"Help\" de inglês para finlandês",
+ "apihelp-searchtranslations-description": "Pesquisar nas traduções.",
+ "apihelp-searchtranslations-summary": "Pesquisar nas traduções.",
+ "apihelp-searchtranslations-param-service": "Que serviços de tradução disponíveis usar.",
+ "apihelp-searchtranslations-param-query": "O texto a pesquisar.",
+ "apihelp-searchtranslations-param-sourcelanguage": "O código de língua do texto de origem.",
+ "apihelp-searchtranslations-param-language": "O código da língua na qual pesquisar o texto.",
+ "apihelp-searchtranslations-param-group": "O identificador do grupo no qual pesquisar o texto.",
+ "apihelp-searchtranslations-param-filter": "Filtro do estado de tradução de mensagens.",
+ "apihelp-searchtranslations-param-match": "Coincide com qualquer ou todos os termos de pesquisa.",
+ "apihelp-searchtranslations-param-case": "Pesquisa com ou sem distinção de maiúsculas e minúsculas.",
+ "apihelp-searchtranslations-param-offset": "Posição de início para as traduções.",
+ "apihelp-searchtranslations-param-limit": "Tamanho do resultado.",
+ "apihelp-searchtranslations-example-1": "Mostrar as traduções para a língua.",
+ "apihelp-searchtranslations-example-2": "Mostrar as mensagens não traduzidas que coincidam com a consulta na língua de origem.",
+ "apihelp-translationcheck-description": "Validar a tradução indicada contra as validações de mensagens configuradas.",
+ "apihelp-translationcheck-summary": "Validar traduções.",
+ "apihelp-translationcheck-param-title": "Título de página com espaço nominal e código de língua.",
+ "apihelp-translationcheck-param-translation": "A tradução para ser validada.",
+ "apihelp-translationstats-description": "Obter estatísticas de tradução relacionadas com edições de traduções, traduções ativas, novos utilizadores, revisões de traduções e revisores.",
+ "apihelp-translationstats-summary": "Obter estatísticas de tradução",
+ "apihelp-translationstats-param-count": "Tipo das estatísticas pedidas",
+ "apihelp-translationstats-param-days": "Número de dias de estatísticas a obter",
+ "apihelp-translationstats-param-group": "Lista dos grupos para os quais obter estatísticas.",
+ "apihelp-translationstats-param-language": "Lista das línguas para as quais obter estatísticas.",
+ "apihelp-translationstats-param-scale": "Escala das estatísticas de tradução",
+ "apihelp-translationstats-param-start": "Data de início desde a qual obter estatísticas de tradução. Por omissão, é a data atual menos <var>days</var>, o número de dias.",
+ "apihelp-translationstats-example-1": "Obter a contagem de edições dos últimos 30 dias, para todos os grupos e línguas",
+ "apihelp-translationstats-example-2": "Obter a contagem de edições dos últimos 30 dias, nas línguas inglês e françês",
+ "apierror-translate-changeset-modified": "O conjunto de alterações foi modificado por outro utilizador ou processo. As suas alterações não podem ser gravadas porque podem substituir as alterações do mesmo. Atualize a página para ver as alterações mais recentes, por favor.",
+ "apierror-translate-duplicateaggregategroup": "O grupo de mensagens já existe",
+ "apierror-translate-fuzzymessage": "Não se pode rever traduções sinalizadas com FUZZY",
+ "apierror-translate-groupreviewdisabled": "A revisão de grupos de mensagens não está em uso.",
+ "apierror-translate-invalidaggregategroup": "O grupo agregador de mensagens é inválido",
+ "apierror-translate-invalidaggregategroupname": "O nome do grupo agregador de mensagens é inválido",
+ "apierror-translate-invalidgroup": "O grupo não existe ou é inválido",
+ "apierror-translate-invalidstate": "O estado pedido é inválido.",
+ "apierror-translate-invalidlanguage": "O código de língua $1 não é válido.",
+ "apierror-translate-invalidupdate": "Atualização inválida",
+ "apierror-translate-language-disabled": "A tradução para $1 foi impossibilitada.",
+ "apierror-translate-language-disabled-reason": "A tradução para $1 foi impossibilitada: $2",
+ "apierror-translate-nodynamicgroups": "Não são suportados aqui grupos de mensagens dinâmicos",
+ "apierror-translate-nomessagefortitle": "O título não corresponde a uma mensagem traduzível",
+ "apierror-translate-notranslationservices": "Não foram configurados serviços públicos de tradução. O administrador da wiki precisa de definir <var>$wgTranslateTranslationServices</var> devidamente para esta funcionalidade poder ser usada.",
+ "apierror-translate-owntranslation": "Não pode rever as suas traduções",
+ "apierror-translate-sandboxdisabled": "A função de utilizadores em teste não está a ser usada",
+ "apierror-translate-smg-nochanges": "Não há alterações para processar.",
+ "apierror-translate-unknownmessage": "Mensagem desconhecida",
+ "apierror-translate-invalid-changeset-name": "Foi passado um nome de ficheiro do conjunto de alterações inválido - $1",
+ "apierror-translate-invalid-operation": "Operação inválida: $1. Valores válidos - $2.",
+ "apierror-translate-addition-key-invalid": "A chave de mensagem passada para adição não foi encontrada na lista de mensagens da língua de origem cujo nome foi alterado.",
+ "apierror-translate-rename-msg-new": "Só mensagens cujo nome foi alterado podem ser adicionadas como mensagens novas.",
+ "apierror-translate-rename-key-invalid": "As chaves de mensagem passadas para alteração de nome não foram encontradas na lista de alterações da língua de origem.",
+ "apierror-translate-rename-state-invalid": "Uma das mensagens passadas para alteração de nome deve ser adicionada de raiz e a outra eliminada. Estados atuais - adição: $1 e eliminação: $2.",
+ "apiwarn-translate-alreadyreviewedbyyou": "Já marcada como revista por si",
+ "apiwarn-translate-language-disabled-source": "A língua de origem deste grupo é $1. Selecione outra língua, para a qual irá traduzir, por favor.",
+ "apiwarn-translate-language-targetlang-variant-of-source": "<strong>Está a traduzir para <bdi>$1</bdi>.</strong> É uma variante de <bdi>$2</bdi>, que já é a língua de origem destas mensagens. Verifique que a língua selecionada está correta e considere as diferenças entre as variantes da língua para fornecer uma boa tradução.",
+ "apierror-translate-operation-error": "Ocorreu um erro ao processar o pedido. Erro: $1",
+ "apihelp-translationentitysearch-summary": "Pesquisar grupos de mensagens e mensagens",
+ "apihelp-translationentitysearch-param-entitytype": "Tipo de entidade que está a ser consultado",
+ "apihelp-translationentitysearch-param-query": "Consulta de pesquisa",
+ "apihelp-translationentitysearch-param-limit": "Número máximo de resultados de pesquisa"
+}
diff --git a/Translate/i18n/api/qqq.json b/Translate/i18n/api/qqq.json
new file mode 100644
index 00000000..af774b55
--- /dev/null
+++ b/Translate/i18n/api/qqq.json
@@ -0,0 +1,183 @@
+{
+ "@metadata": {
+ "authors": [
+ "Abijeet Patro",
+ "Amire80",
+ "Liuxinyu970226",
+ "Nemo bis",
+ "Purodha",
+ "Raymond",
+ "Robby",
+ "Umherirrender"
+ ]
+ },
+ "apihelp-aggregategroups-description": "{{doc-apihelp-description|aggregategroups}}",
+ "apihelp-aggregategroups-summary": "{{doc-apihelp-summary|aggregategroups}}",
+ "apihelp-aggregategroups-extended-description": "{{doc-apihelp-extended-description|aggregategroups}}",
+ "apihelp-aggregategroups-param-do": "{{doc-apihelp-param|aggregategroups|do}}",
+ "apihelp-aggregategroups-param-aggregategroup": "{{doc-apihelp-param|aggregategroups|aggregategroup}}",
+ "apihelp-aggregategroups-param-group": "{{doc-apihelp-param|aggregategroups|group}}",
+ "apihelp-aggregategroups-param-groupname": "{{doc-apihelp-param|aggregategroups|groupname}}",
+ "apihelp-aggregategroups-param-groupdescription": "{{doc-apihelp-param|aggregategroups|groupdescription}}",
+ "apihelp-aggregategroups-example-1": "{{doc-apihelp-example|aggregategroups}}",
+ "apihelp-groupreview-description": "{{doc-apihelp-description|groupreview}}",
+ "apihelp-groupreview-summary": "{{doc-apihelp-summary|groupreview}}",
+ "apihelp-groupreview-param-group": "{{doc-apihelp-param|groupreview|group}}",
+ "apihelp-groupreview-param-language": "{{doc-apihelp-param|groupreview|language}}\n{{Identical|Language code}}",
+ "apihelp-groupreview-param-state": "{{doc-apihelp-param|groupreview|state}}",
+ "apihelp-groupreview-example-1": "{{doc-apihelp-example|groupreview}}",
+ "apihelp-query+languagestats-description": "{{doc-apihelp-description|query+languagestats}}",
+ "apihelp-query+languagestats-summary": "{{doc-apihelp-summary|query+languagestats}}",
+ "apihelp-query+languagestats-param-language": "{{doc-apihelp-param|query+languagestats|language}}\n{{Identical|Language code}}",
+ "apihelp-query+languagestats-param-group": "{{doc-apihelp-param|query+languagestats|group}}",
+ "apihelp-query+languagestats-example-1": "{{doc-apihelp-example|query+languagestats}}",
+ "apihelp-query+languagestats-example-2": "{{doc-apihelp-example|query+languagestats}}",
+ "apihelp-query+messagecollection-description": "{{doc-apihelp-description|query+messagecollection}}",
+ "apihelp-query+managemessagegroups-summary": "{{doc-apihelp-summary|query+managemessagegroups}}",
+ "apihelp-query+managemessagegroups-description": "{{doc-apihelp-description|query+managemessagegroups}}",
+ "apihelp-query+managemessagegroups-param-groupId": "{{doc-apihelp-param|query+managemessagegroups|groupId}}",
+ "apihelp-query+managemessagegroups-param-messageKey": "{{doc-apihelp-param|query+managemessagegroups|messageKey}}",
+ "apihelp-query+managemessagegroups-param-changesetName": "{{doc-apihelp-param|query+managemessagegroups|changesetName}}",
+ "apihelp-query+managemessagegroups-example-1": "{{doc-apihelp-example|query+managemessagegroups}}",
+ "apihelp-query+messagecollection-summary": "{{doc-apihelp-summary|query+messagecollection}}",
+ "apihelp-query+messagecollection-param-group": "{{doc-apihelp-param|query+messagecollection|group}}",
+ "apihelp-query+messagecollection-param-language": "{{doc-apihelp-param|query+messagecollection|language}}\n{{Identical|Language code}}",
+ "apihelp-query+messagecollection-param-limit": "{{doc-apihelp-param|query+messagecollection|limit}}",
+ "apihelp-query+messagecollection-param-offset": "{{doc-apihelp-param|query+messagecollection|offset}}",
+ "apihelp-query+messagecollection-param-filter": "Copy \"&amp;#58;N\", which appears twice towards the end as is. It is the character \":\", which cannot be used because it would be considered markup.\n\n{{doc-apihelp-param|query+messagecollection|filter}}",
+ "apihelp-query+messagecollection-param-prop": "{{doc-apihelp-param|query+messagecollection|prop}}\n{{doc-important|You can translate the word \"Deprecated\", but please do not alter the <code><nowiki>class=\"deprecated\"</nowiki></code> attribute}}",
+ "apihelp-query+messagecollection-example-1": "{{doc-apihelp-example|query+messagecollection}}",
+ "apihelp-query+messagecollection-example-2": "{{doc-apihelp-example|query+messagecollection}}",
+ "apihelp-query+messagecollection-example-3": "{{doc-apihelp-example|query+messagecollection}}",
+ "apihelp-query+messagecollection-example-4": "{{doc-apihelp-example|query+messagecollection}}",
+ "apihelp-query+messagegroups-description": "{{doc-apihelp-description|query+messagegroups}}",
+ "apihelp-query+messagegroups-summary": "{{doc-apihelp-summary|query+messagegroups}}",
+ "apihelp-query+messagegroups-extended-description": "{{doc-apihelp-extended-description|query+messagegroups}}",
+ "apihelp-query+messagegroups-param-depth": "{{doc-apihelp-param|query+messagegroups|depth}}",
+ "apihelp-query+messagegroups-param-filter": "{{doc-apihelp-param|query+messagegroups|filter}}",
+ "apihelp-query+messagegroups-param-format": "{{doc-apihelp-param|query+messagegroups|format}}",
+ "apihelp-query+messagegroups-param-iconsize": "{{doc-apihelp-param|query+messagegroups|iconsize}}",
+ "apihelp-query+messagegroups-param-prop": "{{doc-apihelp-param|query+messagegroups|prop}}\nSee the [[mw:Help:Extension:Translate/Message group states|description of ''states'']].",
+ "apihelp-query+messagegroups-param-root": "{{doc-apihelp-param|query+messagegroups|root}}",
+ "apihelp-query+messagegroups-param-languageFilter": "{{doc-apihelp-param|query+messagegroups|languageFilter}}",
+ "apihelp-query+messagegroups-example-1": "{{doc-apihelp-example|query+messagegroups}}",
+ "apihelp-query+messagegroupstats-description": "{{doc-apihelp-description|query+messagegroupstats}}",
+ "apihelp-query+messagegroupstats-summary": "{{doc-apihelp-summary|query+messagegroupstats}}",
+ "apihelp-query+messagegroupstats-param-group": "{{doc-apihelp-param|query+messagegroupstats|group}}",
+ "apihelp-query+messagegroupstats-param-suppresscomplete": "{{doc-apihelp-param|query+messagegroupstats|nocomplete}}",
+ "apihelp-query+messagegroupstats-param-suppressempty": "{{doc-apihelp-param|query+messagegroupstats|noempty}}",
+ "apihelp-query+messagegroupstats-example-1": "{{doc-apihelp-example|query+messagegroupstats}}",
+ "apihelp-query+messagetranslations-description": "{{doc-apihelp-description|query+messagetranslations}}",
+ "apihelp-query+messagetranslations-summary": "{{doc-apihelp-summary|query+messagetranslations}}",
+ "apihelp-query+messagetranslations-param-title": "{{doc-apihelp-param|query+messagetranslations|title}}",
+ "apihelp-query+messagetranslations-example-1": "Don't translate \"MediaWiki:January\".\n\n{{doc-apihelp-example|query+messagetranslations}}",
+ "apihelp-managemessagegroups-description": "{{doc-apihelp-description|managemessagegroups}}",
+ "apihelp-managemessagegroups-summary": "{{doc-apihelp-summary|managemessagegroups}}",
+ "apihelp-managemessagegroups-param-groupId": "{{doc-apihelp-param|managemessagegroups|groupId}}",
+ "apihelp-managemessagegroups-param-renameMessageKey": "{{doc-apihelp-param|managemessagegroups|renameMessageKey}}",
+ "apihelp-managemessagegroups-param-messageKey": "{{doc-apihelp-param|managemessagegroups|messageKey}}",
+ "apihelp-managemessagegroups-param-operation": "{{doc-apihelp-param|managemessagegroups|operation}}",
+ "apihelp-managemessagegroups-param-changesetName": "{{doc-apihelp-param|managemessagegroups|changesetName}}",
+ "apihelp-managemessagegroups-param-changesetModified": "{{doc-apihelp-param|managemessagegroups|changesetModified}}",
+ "apihelp-managegroupsynchronizationcache-description": "{{doc-apihelp-description|managegroupsynchronizationcache}}",
+ "apihelp-managegroupsynchronizationcache-summary": "{{doc-apihelp-summary|managegroupsynchronizationcache}}",
+ "apihelp-managegroupsynchronizationcache-param-operation": "{{doc-apihelp-param|managegroupsynchronizationcache|operation}}",
+ "apihelp-managegroupsynchronizationcache-param-title": "{{doc-apihelp-param|managegroupsynchronizationcache|title}}",
+ "apihelp-managegroupsynchronizationcache-param-group": "{{doc-apihelp-param|managegroupsynchronizationcache|group}}",
+ "apihelp-translatesandbox-description": "{{doc-apihelp-description|translatesandbox}}",
+ "apihelp-translatesandbox-summary": "{{doc-apihelp-summary|translatesandbox}}",
+ "apihelp-translatesandbox-param-do": "{{doc-apihelp-param|translatesandbox|do}}",
+ "apihelp-translatesandbox-param-userid": "{{doc-apihelp-param|translatesandbox|userid}}",
+ "apihelp-translatesandbox-param-username": "{{doc-apihelp-param|translatesandbox|username}}",
+ "apihelp-translatesandbox-param-password": "{{doc-apihelp-param|translatesandbox|password}}",
+ "apihelp-translatesandbox-param-email": "{{doc-apihelp-param|translatesandbox|email}}",
+ "apihelp-translationaids-description": "{{doc-apihelp-description|translationaids}}",
+ "apihelp-translationaids-summary": "{{doc-apihelp-summary|translationaids}}",
+ "apihelp-translationaids-param-title": "{{doc-apihelp-param|translationaids|title}}",
+ "apihelp-translationaids-param-group": "{{doc-apihelp-param|translationaids|group}}\n\nThe term \"primary group\" is explained at https://www.mediawiki.org/wiki/Help:Extension:Translate/Glossary\nas \"primary message group\".",
+ "apihelp-translationaids-param-prop": "{{doc-apihelp-param|translationaids|prop}}",
+ "apihelp-translationaids-example-1": "Don't translate \"<nowiki>[[MediaWiki:January/fi]]</nowiki>\".\n\n{{doc-apihelp-example|translationaids}}",
+ "apihelp-translationreview-description": "{{doc-apihelp-description|translationreview}}",
+ "apihelp-translationreview-summary": "{{doc-apihelp-summary|translationreview}}",
+ "apihelp-translationreview-param-revision": "{{doc-apihelp-param|translationreview|revision}}",
+ "apihelp-translationreview-example-1": "{{doc-apihelp-example|translationreview}}",
+ "apihelp-translationstash-description": "See the [[mw:Help:Extension:Translate/Glossary|glossary item for \"stash\"]].\n----\n{{doc-apihelp-description|translationstash}}",
+ "apihelp-translationstash-summary": "See the [[mw:Help:Extension:Translate/Glossary|glossary item for \"stash\"]].\n----\n{{doc-apihelp-summary|translationstash}}",
+ "apihelp-translationstash-param-subaction": "{{doc-apihelp-param|translationstash|subaction}}\n{{Identical|Action}}",
+ "apihelp-translationstash-param-title": "See the [[mw:Help:Extension:Translate/Glossary|Translate glossary]] for a definition.\n----\n{{doc-apihelp-param|translationstash|title}}",
+ "apihelp-translationstash-param-translation": "{{doc-apihelp-param|translationstash|translation}}",
+ "apihelp-translationstash-param-metadata": "{{doc-apihelp-param|translationstash|metadata}}",
+ "apihelp-translationstash-param-username": "See the [[mw:Help:Extension:Translate/Glossary|glossary item for \"stash\"]].\n----\n{{doc-apihelp-param|translationstash|username}}\nThe stash is also called [[mw:Translation_UX/Specification#Translation_sandbox|sandbox]].",
+ "apihelp-translationstash-example-1": "See the [[mw:Help:Extension:Translate/Glossary|glossary item for \"stash\"]].\n----\n{{doc-apihelp-example|translationstash}}\nThe stash is also called [[mw:Translation_UX/Specification#Translation_sandbox|sandbox]].",
+ "apihelp-translationstash-example-2": "See the [[mw:Help:Extension:Translate/Glossary|glossary item for \"stash\"]].\n----\n{{doc-apihelp-example|translationstash}}\nThe stash is also called [[mw:Translation_UX/Specification#Translation_sandbox|sandbox]].",
+ "apihelp-ttmserver-description": "{{doc-apihelp-description|ttmserver}}",
+ "apihelp-ttmserver-summary": "{{doc-apihelp-summary|ttmserver}}",
+ "apihelp-ttmserver-param-service": "{{doc-apihelp-param|ttmserver|service}}",
+ "apihelp-ttmserver-param-sourcelanguage": "{{doc-apihelp-param|ttmserver|sourcelanguage}}",
+ "apihelp-ttmserver-param-targetlanguage": "{{doc-apihelp-param|ttmserver|targetlanguage}}",
+ "apihelp-ttmserver-param-text": "{{doc-apihelp-param|ttmserver|text}}",
+ "apihelp-ttmserver-example-1": "{{doc-apihelp-example|ttmserver}}",
+ "apihelp-searchtranslations-description": "{{doc-apihelp-description|searchtranslations}}",
+ "apihelp-searchtranslations-summary": "{{doc-apihelp-summary|searchtranslations}}",
+ "apihelp-searchtranslations-param-service": "{{doc-apihelp-param|searchtranslations|service}}",
+ "apihelp-searchtranslations-param-query": "{{doc-apihelp-param|searchtranslations|query}}",
+ "apihelp-searchtranslations-param-sourcelanguage": "{{doc-apihelp-param|searchtranslations|sourcelanguage}}",
+ "apihelp-searchtranslations-param-language": "{{doc-apihelp-param|searchtranslations|language}}",
+ "apihelp-searchtranslations-param-group": "{{doc-apihelp-param|searchtranslations|group}}",
+ "apihelp-searchtranslations-param-filter": "{{doc-apihelp-param|searchtranslations|filter}}",
+ "apihelp-searchtranslations-param-match": "{{doc-apihelp-param|searchtranslations|match}}",
+ "apihelp-searchtranslations-param-case": "{{doc-apihelp-param|searchtranslations|case}}",
+ "apihelp-searchtranslations-param-offset": "{{doc-apihelp-param|searchtranslations|offset}}",
+ "apihelp-searchtranslations-param-limit": "{{doc-apihelp-param|searchtranslations|limit}}",
+ "apihelp-searchtranslations-example-1": "{{doc-apihelp-example|searchtranslations}}",
+ "apihelp-searchtranslations-example-2": "{{doc-apihelp-example|searchtranslations}}",
+ "apihelp-translationcheck-description": "{{doc-apihelp-description|translationcheck}}",
+ "apihelp-translationcheck-summary": "{{doc-apihelp-summary|translationcheck}}",
+ "apihelp-translationcheck-param-title": "{{doc-apihelp-param|translationcheck|title}}",
+ "apihelp-translationcheck-param-translation": "{{doc-apihelp-param|translationcheck|translation}}",
+ "apihelp-translationstats-description": "{{doc-apihelp-description|translationstats}}",
+ "apihelp-translationstats-summary": "{{doc-apihelp-summary|translationstats}}",
+ "apihelp-translationstats-param-count": "{{doc-apihelp-param|translationstats|count}}",
+ "apihelp-translationstats-param-days": "{{doc-apihelp-param|translationstats|days}}",
+ "apihelp-translationstats-param-group": "{{doc-apihelp-param|translationstats|group}}",
+ "apihelp-translationstats-param-language": "{{doc-apihelp-param|translationstats|language}}",
+ "apihelp-translationstats-param-scale": "{{doc-apihelp-param|translationstats|scale}}\n\n\"Scale\" here refers to the time period - days, months.",
+ "apihelp-translationstats-param-start": "{{doc-apihelp-param|translationstats|start}}",
+ "apihelp-translationstats-example-1": "{{doc-apihelp-example|translationstats}}",
+ "apihelp-translationstats-example-2": "{{doc-apihelp-example|translationstats}}",
+ "apierror-translate-changeset-modified": "{{doc-apierror}}",
+ "apierror-translate-duplicateaggregategroup": "{{doc-apierror}}",
+ "apierror-translate-fuzzymessage": "{{doc-apierror}}",
+ "apierror-translate-groupreviewdisabled": "{{doc-apierror}}",
+ "apierror-translate-invalidaggregategroup": "{{doc-apierror}}",
+ "apierror-translate-invalidaggregategroupname": "{{doc-apierror}}",
+ "apierror-translate-invalidfilter": "{{notranslate}}\n{{doc-apierror}}\n\nParameters:\n* $1 - Filter provided",
+ "apierror-translate-invalidgroup": "{{doc-apierror}}",
+ "apierror-translate-invalidstate": "{{doc-apierror}}",
+ "apierror-translate-invalidlanguage": "{{doc-apierror}}\n\nParameters:\n* $1 - language code",
+ "apierror-translate-invalidupdate": "{{doc-apierror}}",
+ "apierror-translate-language-disabled": "{{doc-apierror}}",
+ "apierror-translate-language-disabled-reason": "{{doc-apierror}}\n\nParameters:\n* $1 - language name\n* $2 - reason, probably in English",
+ "apierror-translate-nodynamicgroups": "{{doc-apierror}}",
+ "apierror-translate-nomessagefortitle": "{{doc-apierror}}",
+ "apierror-translate-notranslationservices": "{{doc-apierror}}",
+ "apierror-translate-owntranslation": "{{doc-apierror}}",
+ "apierror-translate-sandboxdisabled": "{{doc-apierror}}",
+ "apierror-translate-sandbox-invalidparam": "{{notranslate}}\n{{doc-apierror}}\n\nParameters:\n* $1 - Exception message, probably in English",
+ "apierror-translate-smg-nochanges": "{{doc-apierror}}",
+ "apierror-translate-unknownmessage": "{{doc-apierror}}",
+ "apierror-translate-invalid-changeset-name": "{{doc-apierror}} \n\nParameters:\n* $1 - Changeset file name passed in the request",
+ "apierror-translate-invalid-operation": "{{doc-apierror}}\n\nParameters:\n* $1 - Operation value passed in request.\n* $2 - Comma separated list of valid values.",
+ "apierror-translate-addition-key-invalid": "{{doc-apierror}}",
+ "apierror-translate-rename-msg-new": "{{doc-apierror}}",
+ "apierror-translate-rename-key-invalid": "{{doc-apierror}}",
+ "apierror-translate-rename-state-invalid": "'{{doc-apierror}}\n\nParameters:\n* $1 - State of the message being added as the replacement.\n$2 - State of the message being replaced.",
+ "apiwarn-translate-alreadyreviewedbyyou": "{{doc-apierror}}",
+ "apiwarn-translate-language-disabled-source": "{{doc-apierror}}\n\nParameters:\n* $1 - language name",
+ "apiwarn-translate-language-targetlang-variant-of-source": "{{doc-apierror}}\n\nParameters:\n* $1 - target language name, $2 - source language name",
+ "apierror-translate-operation-error": "{{doc-apierror}}\n\nParameters:\n* $1 - exception message",
+ "apihelp-translationentitysearch-summary": "{{doc-apihelp-summary|translationentitysearch}}",
+ "apihelp-translationentitysearch-param-entitytype": "{{doc-apihelp-param|translationentitysearch|entitytype}}",
+ "apihelp-translationentitysearch-param-query": "{{doc-apihelp-param|translationentitysearch|query}}",
+ "apihelp-translationentitysearch-param-limit": "{{doc-apihelp-param|translationentitysearch|limit}}"
+}
diff --git a/Translate/i18n/api/qu.json b/Translate/i18n/api/qu.json
new file mode 100644
index 00000000..8afa62c5
--- /dev/null
+++ b/Translate/i18n/api/qu.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "AlimanRuna"
+ ]
+ },
+ "apihelp-searchtranslations-summary": "T'ikrasqakunapi maskay."
+}
diff --git a/Translate/i18n/api/ro.json b/Translate/i18n/api/ro.json
new file mode 100644
index 00000000..973bd8cc
--- /dev/null
+++ b/Translate/i18n/api/ro.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "NGC 54"
+ ]
+ },
+ "apihelp-query+messagecollection-example-1": "Lista limbilor suportate",
+ "apihelp-query+messagetranslations-example-1": "Lista traducerilor în wiki pentru „MediaWiki:January”",
+ "apihelp-searchtranslations-description": "Căutare traduceri.",
+ "apihelp-searchtranslations-summary": "Căutare traduceri.",
+ "apihelp-searchtranslations-param-limit": "Mărimea relutatului."
+}
diff --git a/Translate/i18n/api/roa-tara.json b/Translate/i18n/api/roa-tara.json
new file mode 100644
index 00000000..42f1994c
--- /dev/null
+++ b/Translate/i18n/api/roa-tara.json
@@ -0,0 +1,69 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joetaras"
+ ]
+ },
+ "apihelp-aggregategroups-description": "Gestisce gruppe de messàgge aggregate.\n\nPuè aggiungere e luà gruppe de messàgge aggregate e associà o luà le gruppe de messàgge l'une da l'otre (une a vote).",
+ "apihelp-aggregategroups-summary": "Gestisce gruppe de messàgge aggregate.",
+ "apihelp-aggregategroups-extended-description": "Puè aggiungere e luà gruppe de messàgge aggregate e associà o luà le gruppe de messàgge l'une da l'otre (une a vote).",
+ "apihelp-aggregategroups-param-do": "Ce puè ffà cu 'u gruppe de messàgge aggregate.",
+ "apihelp-aggregategroups-param-aggregategroup": "ID d'u gruppe de messàgge aggregate.",
+ "apihelp-aggregategroups-param-group": "ID d'u gruppe de messàgge.",
+ "apihelp-aggregategroups-param-groupname": "Nome d'u gruppe de messàgge aggregate.",
+ "apihelp-aggregategroups-param-groupdescription": "Descrizione d'u gruppe de messàgge aggregate.",
+ "apihelp-aggregategroups-example-1": "Associe 'nu gruppe",
+ "apihelp-groupreview-description": "'Mboste 'state d'u flusse d'u gruppe de messàgge.",
+ "apihelp-groupreview-summary": "'Mboste 'state d'u flusse d'u gruppe de messàgge.",
+ "apihelp-groupreview-param-group": "Gruppe de messàgge.",
+ "apihelp-groupreview-param-language": "Codece d'a Lènghe.",
+ "apihelp-groupreview-param-state": "'U state nuève pu gruppe.",
+ "apihelp-groupreview-example-1": "'Mboste 'u state d'a traduziune jndr'à 'u tedesche (d'a Germanie) pu gruppe de messàgge \"group-Example\" cumme pronde",
+ "apihelp-query+languagestats-description": "Statisteche de le 'nderrogaziune d'a lènghe.",
+ "apihelp-query+languagestats-summary": "Statisteche de le 'nderrogaziune d'a lènghe.",
+ "apihelp-query+languagestats-param-language": "Codece d'a Lènghe.",
+ "apihelp-query+languagestats-example-1": "Elenghe de le statisteche de combletamende d'a traduzione pu finlandese",
+ "apihelp-query+messagecollection-description": "'Nderroghe MessageCollection sus a le traduziune.",
+ "apihelp-query+managemessagegroups-summary": "Pigghie le renomenaminde possibbele pe 'nu messàgge jndr'à 'nu gruppe durante le 'mbortaziune",
+ "apihelp-query+managemessagegroups-description": "Pigghie le renomenaminde possibbele pe 'nu messàgge jndr'à 'nu gruppe durante le 'mbortaziune",
+ "apihelp-query+managemessagegroups-param-groupId": "ID d'u gruppe",
+ "apihelp-query+managemessagegroups-param-messageKey": "Chiave d'u messàgge",
+ "apihelp-query+messagecollection-summary": "'Nderroghe MessageCollection sus a le traduziune.",
+ "apihelp-query+messagecollection-param-group": "Gruppe de messàgge.",
+ "apihelp-query+messagecollection-param-language": "Codece d'a Lènghe.",
+ "apihelp-query+messagecollection-param-limit": "Quanda messàgge da 'ndrucà (apprisse 'u filtre).",
+ "apihelp-query+messagecollection-param-offset": "Indere o distanze d'a chiave pe accumenzà.",
+ "apihelp-query+messagecollection-example-1": "Elenghe de le lènghe supportate",
+ "apihelp-query+messagegroups-summary": "Torne le 'mbormaziune sus a le gruppe de messàgge.",
+ "apihelp-query+messagegroups-example-1": "'Ndruche le gruppe de messàgge",
+ "apihelp-query+messagegroupstats-description": "'Nderroghe le statisteche de le gruppe de messàgge.",
+ "apihelp-query+messagegroupstats-summary": "'Nderroghe le statisteche de le gruppe de messàgge.",
+ "apihelp-query+messagegroupstats-param-group": "ID d'u gruppe de messàgge.",
+ "apihelp-query+messagegroupstats-example-1": "Elenghe de le statisteche de combletamende de le traduziune pu gruppe \"page-Example\"",
+ "apihelp-query+messagetranslations-description": "'Nderroghe tutte le traduziune pe 'nu messàgge singole.",
+ "apihelp-query+messagetranslations-param-title": "Titole comblete de 'nu messàgge canusciute.",
+ "apihelp-translatesandbox-param-do": "Ce ste da fà.",
+ "apihelp-translatesandbox-param-username": "Nome de l'utende quanne stoche a ccreje 'n'utende.",
+ "apihelp-translatesandbox-param-password": "Passuord quanne stoche a ccreje 'n'utende.",
+ "apihelp-translatesandbox-param-email": "Email quanne stoche a ccreje 'n'utende.",
+ "apihelp-translationaids-description": "'Nderroghe tutte le aijute de traduziune.",
+ "apihelp-translationaids-summary": "'Nderroghe tutte le aijute de traduziune.",
+ "apihelp-translationaids-param-title": "Titole comblete de 'nu messàgge canusciute.",
+ "apihelp-translationreview-description": "Signe le traduziune cumme reviste.",
+ "apihelp-translationreview-summary": "Signe le traduziune cumme reviste.",
+ "apihelp-translationstash-description": "Aggiunge le traduziune a 'a scorte.",
+ "apihelp-translationstash-summary": "Aggiunge le traduziune a 'a scorte.",
+ "apihelp-translationstash-param-subaction": "Azione.",
+ "apihelp-translationstash-param-title": "Titole d'a pàgene de aunità d'a traduzione.",
+ "apihelp-translationstash-param-metadata": "Oggette JSON.",
+ "apihelp-searchtranslations-param-limit": "Dimenzione d'u resultate.",
+ "apihelp-searchtranslations-example-1": "Fà 'ndrucà le traduziune pa lènghe.",
+ "apierror-translate-invalidupdate": "Aggiornamente invalide",
+ "apierror-translate-language-disabled": "'A traduzione jndr'à $1 jè disabbilitate.",
+ "apierror-translate-nodynamicgroups": "Le gruppe de messàgge dinamece non ge sò supportate aqquà",
+ "apierror-translate-nomessagefortitle": "Quiste non ge corresponne a 'nu messàgge traducibbile",
+ "apierror-translate-owntranslation": "Non ge puè revisionà le traduziune tune",
+ "apierror-translate-sandboxdisabled": "'A funzione Sandbox non ge s'ause",
+ "apierror-translate-unknownmessage": "Messàgge scanusciute",
+ "apiwarn-translate-alreadyreviewedbyyou": "Già signate cumme revisionate da te"
+}
diff --git a/Translate/i18n/api/ru.json b/Translate/i18n/api/ru.json
new file mode 100644
index 00000000..9ca70dde
--- /dev/null
+++ b/Translate/i18n/api/ru.json
@@ -0,0 +1,99 @@
+{
+ "@metadata": {
+ "authors": [
+ "Diman Russkov",
+ "Kaganer",
+ "Kareyac",
+ "Movses",
+ "Okras",
+ "Ole Yves",
+ "Putnik",
+ "Stjn",
+ "Дмитрий",
+ "ЛосЯш",
+ "Туллук"
+ ]
+ },
+ "apihelp-aggregategroups-description": "Вы можете добавлять и удалять агрегированные группы сообщений, группировать и разгруппировывать сообщения в них (по одному за раз) .",
+ "apihelp-aggregategroups-summary": "Управлять агрегированными группами сообщений.",
+ "apihelp-aggregategroups-extended-description": "Вы можете добавлять и удалять агрегированные группы сообщений, ассоциировать и диссоциировать сообщения в них (по одному за раз).",
+ "apihelp-aggregategroups-param-do": "Что нужно сделать с агрегированной группой сообщений.",
+ "apihelp-aggregategroups-param-aggregategroup": "ID агрегированной группы сообщений",
+ "apihelp-aggregategroups-param-group": "ID группы сообщений",
+ "apihelp-aggregategroups-param-groupname": "Название агрегированной группы сообщений.",
+ "apihelp-aggregategroups-param-groupdescription": "Описание агрегированной группы сообщений.",
+ "apihelp-aggregategroups-example-1": "Ассоциировать группу",
+ "apihelp-groupreview-description": "Задать состояния рабочего процесса группы сообщений.",
+ "apihelp-groupreview-summary": "Задать состояния рабочего процесса группы сообщений.",
+ "apihelp-groupreview-param-group": "Группа сообщений.",
+ "apihelp-groupreview-param-language": "Код языка.",
+ "apihelp-groupreview-param-state": "Новое состояние группы.",
+ "apihelp-groupreview-example-1": "Задать состояние немецкого перевода для группы сообщений «group-Example» как готовое",
+ "apihelp-query+languagestats-description": "Запросить статистику языка.",
+ "apihelp-query+languagestats-summary": "Запросить статистику языка.",
+ "apihelp-query+languagestats-param-language": "Код языка.",
+ "apihelp-query+languagestats-example-1": "Список статистики завершённости перевода для финского.",
+ "apihelp-query+messagecollection-description": "Запросить MessageCollection о переводах.",
+ "apihelp-query+managemessagegroups-param-groupId": "Идентификатор группы",
+ "apihelp-query+managemessagegroups-param-messageKey": "Ключ сообщения",
+ "apihelp-query+messagecollection-summary": "Запросить MessageCollection о переводах.",
+ "apihelp-query+messagecollection-param-group": "Группа сообщений.",
+ "apihelp-query+messagecollection-param-language": "Код языка.",
+ "apihelp-query+messagecollection-param-limit": "Сколько сообщений показывать (после фильтрации).",
+ "apihelp-query+messagecollection-param-offset": "Целое число или ключ, с которого следует начать.",
+ "apihelp-query+messagecollection-example-1": "Список поддерживаемых языков",
+ "apihelp-query+messagecollection-example-2": "Список обязательных определений сообщений для группы «page-Example»",
+ "apihelp-query+messagecollection-example-3": "Список необязательных сообщений на финском языке с метками для группы «page-Example»",
+ "apihelp-query+messagecollection-example-4": "Больше информации о последних версиях перевода для группы «page-Example»",
+ "apihelp-query+messagegroups-description": "Получить информацию о группах сообщений.\n\nУчтите, что параметр uselang влияет на вывод языкозависимых частей.",
+ "apihelp-query+messagegroups-summary": "Получить информацию о группах сообщений.",
+ "apihelp-query+messagegroups-extended-description": "Учтите, что параметр uselang влияет на вывод языкозависимых частей.",
+ "apihelp-query+messagegroups-example-1": "Показать группы сообщений",
+ "apihelp-query+messagegroupstats-description": "Запросить статистику группы сообщений",
+ "apihelp-query+messagegroupstats-summary": "Запросить статистику группы сообщений.",
+ "apihelp-query+messagegroupstats-param-group": "ID группы сообщений.",
+ "apihelp-query+messagetranslations-description": "Запросить все переводы для одного сообщения.",
+ "apihelp-query+messagetranslations-summary": "Запросить все переводы для одного сообщения.",
+ "apihelp-query+messagetranslations-param-title": "Полный заголовок известного сообщения.",
+ "apihelp-query+messagetranslations-example-1": "Список переводов в вики для «MediaWiki:January»",
+ "apihelp-managemessagegroups-param-groupId": "Идентификатор группы",
+ "apihelp-translatesandbox-description": "Зарегистрировать и управлять пользователями в песочнице.",
+ "apihelp-translatesandbox-summary": "Зарегистрировать и управлять пользователями в песочнице.",
+ "apihelp-translatesandbox-param-do": "Что делать.",
+ "apihelp-translatesandbox-param-username": "Имя учётной записи при её создании.",
+ "apihelp-translatesandbox-param-password": "Пароль при создании учётной записи.",
+ "apihelp-translatesandbox-param-email": "Электронная почта при создании учётной записи.",
+ "apihelp-translationaids-description": "Запросить всю справку по переводу.",
+ "apihelp-translationaids-summary": "Запросить всю справку по переводу.",
+ "apihelp-translationaids-param-title": "Полный заголовок известного сообщения.",
+ "apihelp-translationaids-param-prop": "Каких помощников перевода следует включить.",
+ "apihelp-translationaids-example-1": "Показать справку по [[MediaWiki:January/fi]]",
+ "apihelp-translationreview-description": "Пометить переводы как проверенные.",
+ "apihelp-translationreview-summary": "Пометить переводы как проверенные.",
+ "apihelp-translationreview-param-revision": "Номер версии для проверки.",
+ "apihelp-translationreview-example-1": "Проверить версию 1",
+ "apihelp-translationstash-param-subaction": "Действие.",
+ "apihelp-translationstash-param-translation": "Перевод, сделанный участником.",
+ "apihelp-translationstash-param-metadata": "Объект JSON.",
+ "apihelp-ttmserver-param-sourcelanguage": "Код языка исходного текста.",
+ "apihelp-searchtranslations-description": "Поиск переводов.",
+ "apihelp-searchtranslations-summary": "Поиск переводов.",
+ "apihelp-searchtranslations-param-service": "Какие из доступных сервисов перевода следует использовать.",
+ "apihelp-searchtranslations-param-query": "Строка для поиска.",
+ "apihelp-searchtranslations-param-sourcelanguage": "Код языка исходного текста.",
+ "apihelp-searchtranslations-param-language": "Языковой код, на котором следует искать строку.",
+ "apihelp-searchtranslations-param-group": "Идентификатор группы, в которой следует искать строку.",
+ "apihelp-searchtranslations-param-filter": "Фильтр статуса перевода сообщения.",
+ "apihelp-searchtranslations-param-limit": "Размер результата.",
+ "apihelp-searchtranslations-example-1": "Показать переводы на язык.",
+ "apihelp-searchtranslations-example-2": "Показать непереведённые сообщения, соответствующие запросу на исходном языке.",
+ "apierror-translate-invalidupdate": "Недопустимое обновление.",
+ "apierror-translate-language-disabled": "Перевод на $1 отключён.",
+ "apierror-translate-language-disabled-reason": "Перевод на $1 отключён: $2",
+ "apierror-translate-nodynamicgroups": "Динамические группы сообщений здесь не поддерживаются.",
+ "apierror-translate-nomessagefortitle": "Заголовок не соответствует переводимому сообщению.",
+ "apierror-translate-owntranslation": "Не может проверять собственные переводы",
+ "apierror-translate-sandboxdisabled": "Функция песочницы не используется.",
+ "apierror-translate-unknownmessage": "Неизвестное сообщение",
+ "apiwarn-translate-alreadyreviewedbyyou": "Уже отмечены как просмотренные Вами"
+}
diff --git a/Translate/i18n/api/sa.json b/Translate/i18n/api/sa.json
new file mode 100644
index 00000000..67807d56
--- /dev/null
+++ b/Translate/i18n/api/sa.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "NehalDaveND"
+ ]
+ },
+ "apihelp-groupreview-param-group": "सन्देशसमूहः",
+ "apihelp-groupreview-param-language": "भाषाकूटः",
+ "apihelp-query+languagestats-param-language": "भाषाकूटः",
+ "apihelp-query+messagecollection-param-group": "सन्देशसमूहः",
+ "apihelp-query+messagecollection-param-language": "भाषाकूटः",
+ "apihelp-translatesandbox-param-do": "किं करणीयम् ।",
+ "apihelp-translationstash-param-subaction": "क्रिया ।"
+}
diff --git a/Translate/i18n/api/sah.json b/Translate/i18n/api/sah.json
new file mode 100644
index 00000000..b144e33b
--- /dev/null
+++ b/Translate/i18n/api/sah.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "HalanTul",
+ "Туллук"
+ ]
+ },
+ "apihelp-aggregategroups-description": "Биллэриилэр бөлөхтөрүн оҥоруоххун сөп, кинилэри бөлөхтүөххүн эбэтэр тус туспа араарыаххын сөп (биири биир кэмҥэ)",
+ "apihelp-groupreview-param-group": "Этиилэр бөлөхтөрө.",
+ "apihelp-query+messagecollection-param-group": "Этиилэр бөлөхтөрө."
+}
diff --git a/Translate/i18n/api/scn.json b/Translate/i18n/api/scn.json
new file mode 100644
index 00000000..6069f7a8
--- /dev/null
+++ b/Translate/i18n/api/scn.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ajeje Brazorf"
+ ]
+ },
+ "apihelp-groupreview-param-language": "Còdici dâ lingua.",
+ "apihelp-query+languagestats-param-language": "Còdici dâ lingua.",
+ "apihelp-query+messagecollection-param-group": "Gruppu di missaggi.",
+ "apihelp-query+messagecollection-param-language": "Còdici dâ lingua.",
+ "apihelp-query+messagegroups-example-1": "Ammustra li gruppi di missaggi",
+ "apihelp-query+messagegroupstats-param-group": "ID gruppu di missaggi.",
+ "apihelp-managemessagegroups-param-groupId": "ID dû gruppu",
+ "apihelp-translationstash-param-subaction": "Azzioni.",
+ "apierror-translate-duplicateaggregategroup": "Lu gruppu di missaggi già esisti",
+ "apierror-translate-invalidlanguage": "Lu còdici lingua $1 nun è vàliddu.",
+ "apierror-translate-unknownmessage": "Missaggiu scanusciutu"
+}
diff --git a/Translate/i18n/api/sd.json b/Translate/i18n/api/sd.json
new file mode 100644
index 00000000..839c777b
--- /dev/null
+++ b/Translate/i18n/api/sd.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mehtab ahmed"
+ ]
+ },
+ "apihelp-groupreview-param-group": "نياپو گروھ.",
+ "apihelp-groupreview-param-language": "ٻوليءَ جو ڪوڊ.",
+ "apihelp-query+managemessagegroups-param-messageKey": "نياپي جي ڪنجي",
+ "apihelp-query+messagecollection-param-group": "نياپو گروھ.",
+ "apihelp-query+messagecollection-param-language": "ٻوليءَ جو ڪوڊ.",
+ "apihelp-query+messagecollection-example-1": "سلھاڙيل ٻولين جي فھرست",
+ "apihelp-query+messagegroups-example-1": "نياپو گروھَ ڏيکاريو",
+ "apihelp-query+messagetranslations-param-title": "ڪنھن ڄاتل نياپي جو پورو عنوان.",
+ "apihelp-searchtranslations-description": "ترجما ڳوليو.",
+ "apihelp-searchtranslations-summary": "ترجما ڳوليو.",
+ "apihelp-searchtranslations-param-limit": "نتيجي جي ماپ.",
+ "apihelp-translationcheck-summary": "ترجمن جي پڪ ڪريو.",
+ "apihelp-translationcheck-param-translation": "پڪ ڪرڻ لاءِ ترجمو.",
+ "apierror-translate-unknownmessage": "اڻڄاتل نياپو",
+ "apihelp-translationentitysearch-param-limit": "ڳولا نتيجن جو وڌ۾وڌ انگ"
+}
diff --git a/Translate/i18n/api/sdc.json b/Translate/i18n/api/sdc.json
new file mode 100644
index 00000000..6190b4e9
--- /dev/null
+++ b/Translate/i18n/api/sdc.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "F Samaritani",
+ "Jun Misugi"
+ ]
+ },
+ "apihelp-groupreview-param-group": "Gruppu d'imbasciaddi.",
+ "apihelp-groupreview-param-language": "Còditzi di linga.",
+ "apihelp-query+languagestats-param-language": "Còditzi di linga.",
+ "apihelp-query+languagestats-param-group": "Gruppu d'imbasciaddi.",
+ "apihelp-query+messagecollection-param-group": "Gruppu d'imbasciaddi.",
+ "apihelp-query+messagecollection-param-language": "Còditzi di linga.",
+ "apihelp-query+messagecollection-example-1": "Erencu di linghi susthiniddi",
+ "apihelp-query+messagegroups-example-1": "Visuarizza gruppi d'imbasciaddi",
+ "apihelp-searchtranslations-description": "Tzercha traduzioni.",
+ "apihelp-searchtranslations-summary": "Tzercha traduzioni."
+}
diff --git a/Translate/i18n/api/sh.json b/Translate/i18n/api/sh.json
new file mode 100644
index 00000000..2d30ec65
--- /dev/null
+++ b/Translate/i18n/api/sh.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Vlad5250"
+ ]
+ },
+ "apihelp-aggregategroups-description": "Upravljanje zbirnim grupama poruka.\n\nMožete dodavati i uklanjati zbirne grupe poruka i pridruživati ili odstranjivati iz zbirnih poruka (jednu po jednu).",
+ "apihelp-aggregategroups-summary": "Upravljanje zbirnim grupama poruka.",
+ "apihelp-aggregategroups-extended-description": "Možete dodavati i uklanjati zbirne grupe poruka i pridruživati ili odstranjivati grupe poruka iz njih (jednu po jednu).",
+ "apihelp-aggregategroups-param-do": "Šta raditi u zbirnoj grupi poruka.",
+ "apihelp-aggregategroups-param-aggregategroup": "Naznaka zbirne grupe poruka.",
+ "apihelp-aggregategroups-param-group": "Naznaka grupe poruka.",
+ "apihelp-aggregategroups-param-groupname": "Naziv zbirne grupe poruka.",
+ "apihelp-aggregategroups-param-groupdescription": "Opis zbirne grupe poruka.",
+ "apihelp-aggregategroups-example-1": "Pridruži grupu",
+ "apihelp-groupreview-description": "Postavi stanja radnog toka za grupe poruka.",
+ "apihelp-groupreview-summary": "Postavi stanja radnog toka za grupe poruka.",
+ "apihelp-groupreview-param-group": "Grupa poruka.",
+ "apihelp-groupreview-param-language": "Kod jezika.",
+ "apihelp-groupreview-param-state": "Novo stanje grupe.",
+ "apihelp-groupreview-example-1": "Označi stanje njemačkog prijevoda grupa poruka \"group-Example\" spremnim",
+ "apihelp-query+languagestats-description": "Upit jezičkih statistika.",
+ "apihelp-query+languagestats-summary": "Ispitaj jezičke statistike.",
+ "apihelp-query+languagestats-param-language": "Kod jezika.",
+ "apihelp-query+languagestats-param-group": "Naznaka grupe poruka.",
+ "apihelp-query+languagestats-example-1": "Spisak statistika dovršenosti prijevoda na finski",
+ "apihelp-managemessagegroups-param-changesetName": "Naziv skupa promjena — Zadano / Bez nadzora / MediaWiki itd.",
+ "apihelp-managemessagegroups-param-changesetModified": "Unix vremenska oznaka kada je promjena posljednji put modificirana. Ako nakon toga je izmijenjena, izvršnik će izbaciti pogrešku."
+}
diff --git a/Translate/i18n/api/shn.json b/Translate/i18n/api/shn.json
new file mode 100644
index 00000000..24b855ff
--- /dev/null
+++ b/Translate/i18n/api/shn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Saimawnkham"
+ ]
+ },
+ "apierror-translate-rename-msg-new": "ၸိူဝ်းပဵၼ် ၶေႃႈၵႂၢမ်းလိၵ်ႈမႂ်ႇ ဢၼ်မႄးပၼ်ၸိုဝ်ႈဝႆႉၼၼ်ႉၵူၺ်း တေၸၢင်ႈ ထႅမ်သႂ်ႇလႆႈ ၼင်ႇ ၶေႃႈၵႂၢမ်းလိၵ်ႈမႂ်ႇ။"
+}
diff --git a/Translate/i18n/api/skr-arab.json b/Translate/i18n/api/skr-arab.json
new file mode 100644
index 00000000..7cf0fd8f
--- /dev/null
+++ b/Translate/i18n/api/skr-arab.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Saraiki"
+ ]
+ },
+ "apihelp-query+languagestats-param-language": "زبان دا کوڈ۔",
+ "apihelp-query+messagecollection-param-language": "زبان دا کوڈ۔"
+}
diff --git a/Translate/i18n/api/sl.json b/Translate/i18n/api/sl.json
new file mode 100644
index 00000000..628ca983
--- /dev/null
+++ b/Translate/i18n/api/sl.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Eleassar"
+ ]
+ },
+ "apihelp-groupreview-param-language": "Oznaka jezika.",
+ "apihelp-query+languagestats-param-language": "Oznaka jezika.",
+ "apihelp-query+messagecollection-param-language": "Oznaka jezika.",
+ "apiwarn-translate-language-disabled-source": "Izvirni jezik te skupine je $1. Izberite drugi jezik, v katerega želite prevesti.",
+ "apiwarn-translate-language-targetlang-variant-of-source": "<strong>Prevajate v <bdi>$1</bdi>.</strong> To je različica <bdi>$2</bdi>, ki je že izvorni jezik teh sporočil. Prepričajte se, da je izbrani jezik pravilen, in upoštevajte razlike med jezikovnimi različicami, da zagotovite dober prevod."
+}
diff --git a/Translate/i18n/api/smn.json b/Translate/i18n/api/smn.json
new file mode 100644
index 00000000..ae0e360d
--- /dev/null
+++ b/Translate/i18n/api/smn.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Seipinne"
+ ]
+ },
+ "apihelp-groupreview-param-group": "Viestâjuávkku.",
+ "apihelp-query+messagecollection-param-group": "Viestâjuávkku."
+}
diff --git a/Translate/i18n/api/sms.json b/Translate/i18n/api/sms.json
new file mode 100644
index 00000000..97261ffd
--- /dev/null
+++ b/Translate/i18n/api/sms.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Yupik"
+ ]
+ },
+ "apihelp-groupreview-param-group": "Saakkjoukk.",
+ "apihelp-groupreview-param-language": "Ǩiõllkoodd.",
+ "apihelp-query+languagestats-param-language": "Ǩiõllkoodd.",
+ "apihelp-query+messagecollection-param-group": "Saakkjoukk.",
+ "apihelp-query+messagecollection-param-language": "Ǩiõllkoodd.",
+ "apihelp-query+messagecollection-example-1": "Listt tuärjjuum ǩiõlin",
+ "apihelp-ttmserver-param-sourcelanguage": "Käivvteeʹkst ǩiõllkoodd.",
+ "apihelp-searchtranslations-description": "Ooʒʒ jåårǥlõõzzid.",
+ "apihelp-searchtranslations-summary": "Ooʒʒ jåårǥlõõzzid.",
+ "apihelp-searchtranslations-param-sourcelanguage": "Käivvteeʹkst ǩiõllkoodd.",
+ "apihelp-translationstats-summary": "Ooʒʒ jåårǥlâʹttemstatistiikkid"
+}
diff --git a/Translate/i18n/api/sq.json b/Translate/i18n/api/sq.json
new file mode 100644
index 00000000..21d8aa10
--- /dev/null
+++ b/Translate/i18n/api/sq.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bjakupi"
+ ]
+ },
+ "apierror-translate-language-disabled": "Perkthimi ne $1 eshte pa-mundesuar.",
+ "apierror-translate-language-disabled-reason": "Perkthimi ne $1 eshte i pamundesuar:$2",
+ "apiwarn-translate-language-disabled-source": "Gjuha baze e ketij grupi eshte $1. Ju lutemi perzgjidhni gjuhen per te perkthyer ne ate gjuhe."
+}
diff --git a/Translate/i18n/api/sr-ec.json b/Translate/i18n/api/sr-ec.json
new file mode 100644
index 00000000..21c6b37f
--- /dev/null
+++ b/Translate/i18n/api/sr-ec.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "Acamicamacaraca",
+ "BadDog",
+ "Milicevic01",
+ "Obsuser"
+ ]
+ },
+ "apihelp-aggregategroups-param-group": "ID групе порука",
+ "apihelp-aggregategroups-param-groupname": "Име збирне групе порука",
+ "apihelp-aggregategroups-param-groupdescription": "Опис збирне групе порука",
+ "apihelp-aggregategroups-example-1": "Придруживање групи",
+ "apihelp-groupreview-param-group": "Група порука",
+ "apihelp-groupreview-param-language": "Језички код.",
+ "apihelp-query+languagestats-description": "Статистика траженог језика",
+ "apihelp-query+languagestats-summary": "Статистика траженог језика",
+ "apihelp-query+languagestats-param-language": "Језички код.",
+ "apihelp-query+messagecollection-param-group": "Група порука.",
+ "apihelp-query+messagecollection-param-language": "Језички код.",
+ "apihelp-query+messagecollection-example-1": "Списак подржаних језика",
+ "apihelp-managemessagegroups-param-groupId": "ID групе",
+ "apihelp-translationstash-param-subaction": "Радња",
+ "apierror-translate-smg-nochanges": "Нема измена за обраду.",
+ "apierror-translate-unknownmessage": "Непозната порука",
+ "apierror-translate-invalid-changeset-name": "Дато је неважеће име датотеке скупа измена — $1",
+ "apierror-translate-invalid-operation": "Неважећа вредност: $1. Важеће вредности: $2.",
+ "apiwarn-translate-language-disabled-source": "Изворни језик ове групе је $1. Изаберите други за превођење.",
+ "apihelp-translationentitysearch-param-limit": "Максимални број резултата претраге"
+}
diff --git a/Translate/i18n/api/sv.json b/Translate/i18n/api/sv.json
new file mode 100644
index 00000000..8d5cade1
--- /dev/null
+++ b/Translate/i18n/api/sv.json
@@ -0,0 +1,111 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bengtsson96",
+ "Dan Koehl",
+ "Josve05a",
+ "Lokal Profil",
+ "Sabelöga",
+ "Victorsa",
+ "WikiPhoenix"
+ ]
+ },
+ "apihelp-aggregategroups-description": "Hantera aggregerade meddelandegrupper.\n\nDu kan lägga till och ta bort aggregerade meddelandegrupper och associera eller sluta associera meddelandegrupper från dem (en i taget).",
+ "apihelp-aggregategroups-summary": "Hantera aggregerade meddelandegrupper.",
+ "apihelp-aggregategroups-extended-description": "Du kan lägga till och ta bort aggregerade meddelandegrupper och associera eller sluta associera meddelandegrupper från dem (en i taget).",
+ "apihelp-aggregategroups-param-do": "Vad ska man göra med aggregerade meddelandegrupper.",
+ "apihelp-aggregategroups-param-aggregategroup": "Aggregerad meddelandegrupp-ID.",
+ "apihelp-aggregategroups-param-group": "Meddelandegrupp-ID.",
+ "apihelp-aggregategroups-param-groupname": "Namn på aggregerat meddelandegrupp.",
+ "apihelp-aggregategroups-param-groupdescription": "Beskrivning aggregerad meddelandegrupp.",
+ "apihelp-aggregategroups-example-1": "Associera en grupp",
+ "apihelp-groupreview-description": "Ställ in arbetsflödestatus för meddelandegrupp.",
+ "apihelp-groupreview-summary": "Ställ in arbetsflödestatus för meddelandegrupp.",
+ "apihelp-groupreview-param-group": "Meddelandegrupp.",
+ "apihelp-groupreview-param-language": "Språkkod.",
+ "apihelp-groupreview-param-state": "Gruppens nya status.",
+ "apihelp-groupreview-example-1": "Markera statusen för den tyska översättningen av gruppen \"group-Example\" som redo",
+ "apihelp-query+languagestats-description": "Statistik för sökfrågespråk.",
+ "apihelp-query+languagestats-summary": "Statistik för sökfrågespråk.",
+ "apihelp-query+languagestats-param-language": "Språkkod.",
+ "apihelp-query+languagestats-example-1": "Lista över statistik över slutförda översättningar till finska",
+ "apihelp-query+messagecollection-description": "Fråga MessageCollection om översättningar.",
+ "apihelp-query+managemessagegroups-summary": "Hämta möjliga namnbyten för ett meddelande i en grupp under importering",
+ "apihelp-query+managemessagegroups-description": "Hämta möjliga namnbyten för ett meddelande i en grupp under importering",
+ "apihelp-query+managemessagegroups-param-groupId": "Grupp-ID",
+ "apihelp-query+managemessagegroups-param-messageKey": "Meddelandenyckel",
+ "apihelp-query+managemessagegroups-param-changesetName": "Ändra uppsättningsnamn - Standard / Oövervakad /MediaWiki osv.",
+ "apihelp-query+managemessagegroups-example-1": "Hämta möjliga namnbyten för angiven nyckel i angiven grupp.",
+ "apihelp-query+messagecollection-summary": "Fråga MessageCollection om översättningar.",
+ "apihelp-query+messagecollection-param-group": "Meddelandegrupp.",
+ "apihelp-query+messagecollection-param-language": "Språkkod.",
+ "apihelp-query+messagecollection-param-limit": "Hur många meddelanden som visas (efter filtrering).",
+ "apihelp-query+messagecollection-param-offset": "Heltal eller nyckelförskjutning för att starta.",
+ "apihelp-query+messagecollection-example-1": "Lista över språk som stöds",
+ "apihelp-query+messagecollection-example-3": "List över valfria meddelanden på finska med märken i gruppen \"page-Example\"",
+ "apihelp-query+messagegroups-param-prop": "Vilken översättningsrelaterad information som ska hämtas:\n;id:Inkluderar gruppens ID.\n;label:Inkluderar gruppens etikett.\n;description:Inkluderar gruppens beskrivning.\n;class:Inkluderar gruppens klassnamn.\n;namespace:Inkluderar gruppens namnrymd. Inte alla grupper tillhör samma namnrymd.\n;exists:Inkluderar gruppens egenuträknade existensegenskap.\n;icon:Inkluderar URL:er till gruppens ikoner.\n;priority:Inkluderar prioriteringsgrupper som avrådd.\n;prioritylangs:Inkluderar föredragna språk. Har den inte angetts returneras false.\n;priorityforce:Inkluderar prioriteringsstatus - är prioriteringsspråken inställning framtvingad.\n;workflowstates:Inkluderar meddelandegruppens arbetsflödesstatus.",
+ "apihelp-query+messagegroups-example-1": "Visa meddelandegrupper",
+ "apihelp-query+messagegroupstats-description": "Statistik för att fråga meddelandegrupp.",
+ "apihelp-query+messagegroupstats-summary": "Statistik för att fråga meddelandegrupp.",
+ "apihelp-query+messagegroupstats-param-group": "Meddelandegrupp-ID.",
+ "apihelp-query+messagetranslations-example-1": "Lista över översättningar i wikin för \"MediaWiki:January\"",
+ "apihelp-managemessagegroups-param-groupId": "Grupp-ID",
+ "apihelp-managemessagegroups-param-changesetName": "Ändra uppsättningsnamn - Standard / Oövervakad /MediaWiki osv.",
+ "apihelp-translatesandbox-description": "Registrera och hantera sandlådeanvändare.",
+ "apihelp-translatesandbox-summary": "Registrera och hantera sandlådeanvändare.",
+ "apihelp-translatesandbox-param-do": "Vad som ska göras.",
+ "apihelp-translatesandbox-param-username": "Användarnamn när du skapar en användare.",
+ "apihelp-translatesandbox-param-password": "Lösenord när du skapar en användare.",
+ "apihelp-translatesandbox-param-email": "E-post när du skapar en användare.",
+ "apihelp-translationaids-param-title": "Fullständig titel på ett känt meddelande.",
+ "apihelp-translationaids-param-prop": "Vilka översättningshjälpmedel som ska inkluderas.",
+ "apihelp-translationaids-example-1": "Visa hjälp för [[MediaWiki:January/fi]]",
+ "apihelp-translationreview-description": "Markera översättningar som granskade.",
+ "apihelp-translationreview-summary": "Markera översättningar som granskade.",
+ "apihelp-translationreview-param-revision": "Sidversionsnumret att granska.",
+ "apihelp-translationreview-example-1": "Granska sidversion 1",
+ "apihelp-translationstash-param-subaction": "Åtgärd.",
+ "apihelp-translationstash-param-title": "Översättningsenhetssidans titel.",
+ "apihelp-translationstash-param-translation": "Översättning som gjorts av användaren.",
+ "apihelp-translationstash-param-metadata": "JSON-objekt.",
+ "apihelp-ttmserver-description": "Förfråga förslag från översättningsminnen.",
+ "apihelp-ttmserver-param-service": "Vilken av de tillgängliga översättningstjänsterna som bör användas.",
+ "apihelp-ttmserver-param-sourcelanguage": "Källtextens språkkod.",
+ "apihelp-ttmserver-param-targetlanguage": "Förslagets språkkod.",
+ "apihelp-ttmserver-param-text": "Texten att hitta förslag på.",
+ "apihelp-ttmserver-example-1": "Få förslag för att översätta \"Hjälp\" från engelska till finska",
+ "apihelp-searchtranslations-description": "Sök översättningar.",
+ "apihelp-searchtranslations-summary": "Sök översättningar.",
+ "apihelp-searchtranslations-param-service": "Vilka tillgängliga översättningstjänster att använda.",
+ "apihelp-searchtranslations-param-query": "Strängen att söka efter.",
+ "apihelp-searchtranslations-param-sourcelanguage": "Källtextens språkkod.",
+ "apihelp-searchtranslations-param-match": "Matcha något/alla sökord.",
+ "apihelp-searchtranslations-param-case": "Skiftläges(o)känslig sökning.",
+ "apihelp-searchtranslations-param-limit": "Resultatets storlek.",
+ "apihelp-searchtranslations-example-1": "Visa översättningar för språket.",
+ "apihelp-searchtranslations-example-2": "Visa oöversatta meddelanden som överensstämmer förfrågan i källkoden.",
+ "apihelp-translationcheck-summary": "Validera översättningar.",
+ "apihelp-translationcheck-param-title": "Sidtitel med namnrymd och språkkod.",
+ "apihelp-translationcheck-param-translation": "Översättningen att validera.",
+ "apierror-translate-duplicateaggregategroup": "Meddelandegruppen finns redan",
+ "apierror-translate-fuzzymessage": "Kan inte granska föråldrade översättningar",
+ "apierror-translate-groupreviewdisabled": "Granskning av meddelandegrupp är inte i bruk.",
+ "apierror-translate-invalidaggregategroup": "Ogiltig aggregerad meddelandegrupp",
+ "apierror-translate-invalidaggregategroupname": "Ogiltigt namn på meddelandegrupp",
+ "apierror-translate-invalidgroup": "Gruppen finns inte eller är ogiltig",
+ "apierror-translate-invalidstate": "Den begärda statusen är ogiltig.",
+ "apierror-translate-invalidlanguage": "Språkkoden $1 är inte giltigt.",
+ "apierror-translate-invalidupdate": "Ogiltig uppdatering",
+ "apierror-translate-language-disabled": "Översättning till $1 är inaktiverat.",
+ "apierror-translate-language-disabled-reason": "Översättning till $1 är inaktiverat: $2",
+ "apierror-translate-nodynamicgroups": "Dynamiska meddelandegrupper stöds inte här",
+ "apierror-translate-nomessagefortitle": "Titeln motsvarar inget översättbart meddelande",
+ "apierror-translate-notranslationservices": "Inga offentliga översättningstjänster har konfigurerats. Wikiadministratörerna behöver ändra set <var>$wgTranslateTranslationServices</var> på lämpligt sätt innan denna funktion kan användas.",
+ "apierror-translate-owntranslation": "Kan inte granska egna översättningar",
+ "apierror-translate-sandboxdisabled": "Sandlådefunktionen är inte i bruk",
+ "apierror-translate-smg-nochanges": "Det finns inga ändringar att bearbeta.",
+ "apierror-translate-unknownmessage": "Okänt meddelande",
+ "apiwarn-translate-alreadyreviewedbyyou": "Har redan markerats som granskad av dig",
+ "apiwarn-translate-language-disabled-source": "Den här gruppens källspråk är $1. Välj ett annat språk att översätta till.",
+ "apierror-translate-operation-error": "Ett fel uppstod när begäran bearbetades. Fel: $1"
+}
diff --git a/Translate/i18n/api/sw.json b/Translate/i18n/api/sw.json
new file mode 100644
index 00000000..5c60ad58
--- /dev/null
+++ b/Translate/i18n/api/sw.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Edwingudfriend",
+ "Wangombe"
+ ]
+ },
+ "apihelp-translationstats-description": "Leta takwimu za tafsiri zinazohusiana na ubadilishaji wa tafsiri, tafsiri inayotumika, watumiaji wapya, hakiki za tafsiri na wakaguzi.",
+ "apihelp-translationstats-summary": "Leta takwimu za tafsiri",
+ "apihelp-translationstats-param-count": "Aina ya takwimu zinazoombwa",
+ "apihelp-translationstats-param-days": "Idadi ya siku za kuleta takwimu za",
+ "apihelp-translationstats-param-group": "Orodha ya vikundi vya kuleta takwimu za.",
+ "apihelp-translationstats-param-language": "Orodha ya lugha za kuleta takwimu za.",
+ "apihelp-translationstats-param-scale": "Kiwango cha takwimu za tafsiri",
+ "apihelp-translationstats-param-start": "Tarehe ya kuanzia ambapo tutachukua takwimu za tafsiri. Chaguo-msingi hadi tarehe ya sasa ukiondoa idadi ya <var>days</var>.",
+ "apihelp-translationstats-example-1": "Leta hesabu ya hariri kwa siku 30 zilizopita, kwa vikundi na lugha zote",
+ "apihelp-translationstats-example-2": "Leta hesabu ya hariri kwa siku 30 zilizopita, kwa lugha za Kiingereza na Kifaransa."
+}
diff --git a/Translate/i18n/api/ta.json b/Translate/i18n/api/ta.json
new file mode 100644
index 00000000..9508e3ed
--- /dev/null
+++ b/Translate/i18n/api/ta.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Rakeshonwiki",
+ "Siddhan"
+ ]
+ },
+ "apihelp-aggregategroups-description": "மொத்த தகவல்களின் தொகுதியை நிர்வகி.\n\nநீங்கள் மொத்த தகவல்களின் தொகுதியை சேர்க்க மற்றும் நீக்க முடியம், மேலும் தகவல்களின் தொகுதியை இணைக்க அல்லது துண்டிக்க முடியும்(ஒவ்வொன்றாக)",
+ "apihelp-query+managemessagegroups-param-changesetName": "அமைப்பின் பெயரை மாற்றவும் - இயல்புநிலை / கவனிக்கப்படாத / மீடியாவிக்கி போன்றவை.",
+ "apihelp-managemessagegroups-param-changesetName": "அமைப்பின் பெயரை மாற்றவும் - இயல்புநிலை / கவனிக்கப்படாத / மீடியாவிக்கி போன்றவை"
+}
diff --git a/Translate/i18n/api/te.json b/Translate/i18n/api/te.json
new file mode 100644
index 00000000..6e51bf22
--- /dev/null
+++ b/Translate/i18n/api/te.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chaduvari"
+ ]
+ },
+ "apihelp-query+languagestats-param-group": "సందేశాల సమూహం ఐడీ."
+}
diff --git a/Translate/i18n/api/tg-cyrl.json b/Translate/i18n/api/tg-cyrl.json
new file mode 100644
index 00000000..6ed6e571
--- /dev/null
+++ b/Translate/i18n/api/tg-cyrl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "ToJack"
+ ]
+ },
+ "apihelp-aggregategroups-param-group": "ID гурӯҳҳои паёмҳо"
+}
diff --git a/Translate/i18n/api/th.json b/Translate/i18n/api/th.json
new file mode 100644
index 00000000..c99b278a
--- /dev/null
+++ b/Translate/i18n/api/th.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Octahedron80"
+ ]
+ },
+ "apihelp-aggregategroups-param-group": "ไอดีกลุ่มข้อความ",
+ "apihelp-groupreview-param-group": "กลุ่มข้อความ",
+ "apihelp-groupreview-param-language": "รหัสภาษา",
+ "apihelp-query+languagestats-param-language": "รหัสภาษา",
+ "apihelp-query+messagecollection-param-group": "กลุ่มข้อความ",
+ "apihelp-query+messagecollection-param-language": "รหัสภาษา",
+ "apihelp-query+messagecollection-example-1": "รายชื่อภาษาที่รองรับ",
+ "apihelp-query+messagegroups-example-1": "แสดงกลุ่มข้อความ",
+ "apihelp-query+messagegroupstats-param-group": "ไอดีกลุ่มข้อความ",
+ "apihelp-searchtranslations-description": "ค้นหาการแปล"
+}
diff --git a/Translate/i18n/api/ti.json b/Translate/i18n/api/ti.json
new file mode 100644
index 00000000..0bb04097
--- /dev/null
+++ b/Translate/i18n/api/ti.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joanmp17"
+ ]
+ },
+ "apihelp-groupreview-param-language": "ኮድ ቋንቋ።",
+ "apihelp-query+languagestats-param-language": "ኮድ ቋንቋ።",
+ "apihelp-query+messagecollection-param-language": "ኮድ ቋንቋ።",
+ "apierror-translate-language-disabled": "ትርጉም ናብ $1 ተሰንኪሉ ኣሎ።",
+ "apierror-translate-language-disabled-reason": "ትርጉም ናብ $1 ተሰንኪሉ ኣሎ፦ $2",
+ "apierror-translate-owntranslation": "ናይ ገዛእ ርእስኻ ትርጉማት ክግምግም ኣይክእልን እዩ",
+ "apierror-translate-unknownmessage": "ዘይተፈልጠ መልእኽቲ",
+ "apiwarn-translate-language-disabled-source": "እቲ መበቆላዊ ቋንቋ ናይዛ ጉጅለ $1 እዩ። ናብ ካልእ ክትርጎም ዝኽእል ካልእ ቋንቋ ምረጽ።"
+}
diff --git a/Translate/i18n/api/tl.json b/Translate/i18n/api/tl.json
new file mode 100644
index 00000000..c513c064
--- /dev/null
+++ b/Translate/i18n/api/tl.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Emem.calist",
+ "Jojit fb",
+ "Leeheonjin"
+ ]
+ },
+ "apierror-translate-language-disabled": "Ang pagsasaling wika sa $1 ay naka-'disabled'"
+}
diff --git a/Translate/i18n/api/tly.json b/Translate/i18n/api/tly.json
new file mode 100644
index 00000000..84c21822
--- /dev/null
+++ b/Translate/i18n/api/tly.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Patriot Kur"
+ ]
+ },
+ "apihelp-groupreview-param-group": "Nomə qrup.",
+ "apihelp-query+messagegroupstats-param-group": "Nomə qrup ID."
+}
diff --git a/Translate/i18n/api/tr.json b/Translate/i18n/api/tr.json
new file mode 100644
index 00000000..619ff998
--- /dev/null
+++ b/Translate/i18n/api/tr.json
@@ -0,0 +1,182 @@
+{
+ "@metadata": {
+ "authors": [
+ "Arystanbek",
+ "BaRaN6161 TURK",
+ "Can",
+ "Hedda",
+ "Joseph",
+ "MuratTheTurkish",
+ "Rapsar",
+ "SaldırganSincap",
+ "Sayginer",
+ "Vito Genovese"
+ ]
+ },
+ "apihelp-aggregategroups-description": "Toplu mesaj gruplarını yönetin.\n\nToplu mesaj gruplarını ekleyebilir, kaldırabilir, ilişkilendirebilir veya birbirinden ayırabilirsiniz (tek seferde bir defa).",
+ "apihelp-aggregategroups-summary": "Toplu mesaj gruplarını yönetin.",
+ "apihelp-aggregategroups-extended-description": "Toplu mesaj gruplarını ekleyebilir, kaldırabilir, (tek seferde bir defa olmak üzere) ilişkilendirebilir veya birbirinden ayırabilirsiniz.",
+ "apihelp-aggregategroups-param-do": "Toplu mesaj grubuyla ne yapmalı.",
+ "apihelp-aggregategroups-param-aggregategroup": "Toplu mesaj grubu kimliği.",
+ "apihelp-aggregategroups-param-group": "Mesaj grup kimliği.",
+ "apihelp-aggregategroups-param-groupname": "Toplu mesaj grubu adı.",
+ "apihelp-aggregategroups-param-groupdescription": "Toplu mesaj grubu açıklama.",
+ "apihelp-aggregategroups-example-1": "Bir grubu ilişkilendirin",
+ "apihelp-groupreview-description": "Mesaj grubu iş akışı durumlarını ayarlayın.",
+ "apihelp-groupreview-summary": "Mesaj grubu iş akışı durumlarını ayarlayın.",
+ "apihelp-groupreview-param-group": "Mesaj grubu.",
+ "apihelp-groupreview-param-language": "Dil kodu.",
+ "apihelp-groupreview-param-state": "Grup için yeni bir durum.",
+ "apihelp-groupreview-example-1": "\"group-Example\" mesaj grubunun Almanca çevirisinin durumunu hazır olarak işaretleyin.",
+ "apihelp-query+languagestats-description": "Sorgu dili istatistikleri.",
+ "apihelp-query+languagestats-summary": "Sorgu dili istatistikleri.",
+ "apihelp-query+languagestats-param-language": "Dil kodu.",
+ "apihelp-query+languagestats-param-group": "Mesaj grup kimliği.",
+ "apihelp-query+languagestats-example-1": "Fince çeviri tamamlama istatistikleri listesi",
+ "apihelp-query+languagestats-example-2": "A grubu için Fince için çeviri tamamlama istatistikleri listesi",
+ "apihelp-query+messagecollection-description": "Çevirilerle ilgili MessageCollection'ı sorgulayın.",
+ "apihelp-query+managemessagegroups-summary": "İçe aktarma sırasında bir gruptaki bir mesajın olası adlarını alın",
+ "apihelp-query+managemessagegroups-description": "İçe aktarma sırasında bir gruptaki bir mesajın olası adlarını alın",
+ "apihelp-query+managemessagegroups-param-groupId": "Grup Kimliği",
+ "apihelp-query+managemessagegroups-param-messageKey": "Mesaj anahtarı",
+ "apihelp-query+managemessagegroups-param-changesetName": "Küme adını değiştir - Varsayılan / Katılımsız / MediaWiki vb.",
+ "apihelp-query+managemessagegroups-example-1": "Verilen grupta verilen anahtar için olası adlar getirin.",
+ "apihelp-query+messagecollection-summary": "Çevirilerle ilgili MessageCollection'ı sorgulayın.",
+ "apihelp-query+messagecollection-param-group": "Mesaj grubu.",
+ "apihelp-query+messagecollection-param-language": "Dil kodu.",
+ "apihelp-query+messagecollection-param-limit": "(Filtrelemeden sonra) kaç tane mesaj gösterilecek.",
+ "apihelp-query+messagecollection-param-offset": "Başlangıç için tam sayı ya da anahtar ofset",
+ "apihelp-query+messagecollection-param-filter": "Mesaj toplama filtreleri. Durumu olumsuzlamak için <kbd>!</kbd> kullanın. Örneğin, <kbd>!fuzzy</kbd>, yalnızca tüm bulanık olmayan mesajları listeleme anlamına gelir. Filtreler verilen sıraya göre uygulanır.\n;fuzzy:Fuzzy etiketli mesajlar.\n;optional:Yalnızca değişiklik yapılması gerekiyorsa çevrilmesi gereken mesajlar.\n;ignored:Asla çevrilmeyen mesajlar.\n;hastranslation:Fuzzy olup olmadığına bakılmaksızın çevirisi olan mesajlar.\n;translated:Fuzzy olmayan bir çevirisi olan iletiler.\n;changed:Son aktarımdan bu yana çevrilmiş veya değiştirilmiş iletiler.\n;reviewer&#58;N:<kbd>N</kbd> kullanıcı numarasının gözden geçirenler arasında olduğu iletiler.\n;last-translator&#58;N:<kbd>N</kbd> kullanıcı numarasının son çevirmen olduğu mesajlar.",
+ "apihelp-query+messagecollection-param-prop": "Hangi özellikleri elde etmek için:\n;definition:Mesaj tanımı\n;translation:Geçerli çeviri (varsa $1 dize olmadan, eski veya bozuk çevirileri denetlemek için etiketleri kullanın).\n;tags:İsteğe bağlı, yok sayılmış ve fuzzy gibi ileti etiketleri.\n;properties:Durum özellikleri, revizyon, son tercüman gibi mesaj özellikleri. Mesajlar arasında değişebilir.\n;revision:<span class=\"deprecated\">Kaldırıldı!</span> $2prop=properties kullanın.",
+ "apihelp-query+messagecollection-example-1": "Desteklenen dillerin listesi",
+ "apihelp-query+messagecollection-example-2": "\"page-Example\" grubu için isteğe bağlı olmayan mesaj tanımlarının listesi",
+ "apihelp-query+messagecollection-example-3": "Fince isteğe bağlı iletilerin listesi \"page-Example\" grubunun etiketli listesi",
+ "apihelp-query+messagecollection-example-4": "\"page-Example\" grubu için en son çeviri revizyonları hakkında daha fazla bilgi",
+ "apihelp-query+messagegroups-description": "Mesaj grupları hakkında bilgi verir.\n\nUselang parametresinin dile bağlı bölümlerin çıkışına etkilediğini unutmayın.",
+ "apihelp-query+messagegroups-summary": "Mesaj grupları hakkında bilgi verir.",
+ "apihelp-query+messagegroups-extended-description": "Uselang parametresinin dile bağlı bölümlerin çıkışına etkilediğini unutmayın.",
+ "apihelp-query+messagegroups-param-depth": "Ağaç biçimi kullanırken, derinliği bu kadar seviyeyle sınırlandırın. 0 değeri, hiçbir alt grubun gösterilmediği anlamına gelir. Sınıra ulaşıldığında, çıktı doğrudan çocuk sayısını belirten bir \"groupcount\" değeri içerir.",
+ "apihelp-query+messagegroups-param-filter": "Yalnızca verilen girdilerden bir veya daha fazlasıyla eşleşen kimliğe sahip iletileri döndürün (büyük/küçük harf duyarsız, dikey çizgi, * joker karakter).",
+ "apihelp-query+messagegroups-param-format": "Ağaç biçiminde, mesaj grupları ağaçta birden çok yerde bulunabilir.",
+ "apihelp-query+messagegroups-param-iconsize": "Rasterleştirilmiş grup simgesinin tercih edilen boyutu.",
+ "apihelp-query+messagegroups-param-prop": "Çeviri ile ilgili hangi bilgileri alırsınız:\n;id:Grubun kimliğini ekleyin.\n;label:Grubun etiketini ekleyin.\n;description:Grubun açıklamasını ekleyin.\n;class:Grubun sınıf adını ekleyin.\n;namespace:Grubun ad alanını ekleyin. Tüm gruplar tek bir ad alanına ait değildir.\n;exists:Grubun kendi kendine hesaplanan varlık özelliğini ekleyin.\n;icon:URL'leri grubun simgesine ekleyin.\n;priority:Cesareti kırılmış gibi öncelikli durumu ekleyin.\n;prioritylangs:Tercih edilen dilleri dahil edin. Ayarlanmazsa, bu false değerini döndürür.\n;priorityforce:Öncelik durumunu dahil et - öncelikli dil ayarı zorunludur.\n;workflowstates:İleti grubu için iş akışı durumlarını ekleyin.",
+ "apihelp-query+messagegroups-param-root": "Ağaç biçimini kullanırken, üst düzeyden başlamak yerine, birleştirilmiş bir ileti grubu olması gereken belirli mesaj grubundan başlayın. Düz biçim kullanıldığında yalnızca belirtilen grup döndürülür.",
+ "apihelp-query+messagegroups-param-languageFilter": "Yalnızca belirtilen dile çevrilebilen mesajı gruplarını döndürün.",
+ "apihelp-query+messagegroups-example-1": "Mesaj gruplarını göster",
+ "apihelp-query+messagegroupstats-description": "Sorgu mesajı grup istatistikleri.",
+ "apihelp-query+messagegroupstats-summary": "Sorgu mesajı grup istatistikleri.",
+ "apihelp-query+messagegroupstats-param-group": "Mesaj grup kimliği.",
+ "apihelp-query+messagegroupstats-param-suppresscomplete": "Çevirisi tamamlanmış dilleri görüntüleme",
+ "apihelp-query+messagegroupstats-param-suppressempty": "Hiç çevirisi olmayan dilleri görüntüleme",
+ "apihelp-query+messagegroupstats-example-1": "\"page-Example\" grubu için çeviri tamamlama istatistiklerinin listesi",
+ "apihelp-query+messagetranslations-description": "Tek bir mesaj için tüm çevirileri sorgulayın.",
+ "apihelp-query+messagetranslations-summary": "Tek bir mesaj için tüm çevirileri sorgulayın.",
+ "apihelp-query+messagetranslations-param-title": "Bilinen bir mesajın tam başlığı.",
+ "apihelp-query+messagetranslations-example-1": "\"MediaWiki:January\" için vikideki çevirilerin listesi",
+ "apihelp-managemessagegroups-description": "İçe aktarma sırasında mevcut bir mesajın adını veya grupta yeni bir mesajı yeniden adlandırın",
+ "apihelp-managemessagegroups-summary": "İçe aktarma sırasında mevcut bir mesajın adını veya grupta yeni bir mesajı yeniden adlandırın",
+ "apihelp-managemessagegroups-param-groupId": "Grup Kimliği",
+ "apihelp-managemessagegroups-param-renameMessageKey": "Hedef mesaj anahtarı yeniden adlandırılıyor",
+ "apihelp-managemessagegroups-param-messageKey": "Yedek mesaj tuşu",
+ "apihelp-managemessagegroups-param-operation": "Yapılacak işlem. Olası değerler: rename / new",
+ "apihelp-managemessagegroups-param-changesetName": "Ayarlanan adı değiştir - Varsayılan / Katılımsız / MediaWiki vb.",
+ "apihelp-managemessagegroups-param-changesetModified": "Değişiklik kümesinin en son ne zaman değiştirildiğinin Unix zaman damgası. Değişiklik kümesi bundan sonra değiştirildiyse, API hata verir.",
+ "apihelp-managegroupsynchronizationcache-description": "Grup senkronizasyon önbelleğini yönetin.",
+ "apihelp-managegroupsynchronizationcache-summary": "Grup senkronizasyon önbelleğini yönetin.",
+ "apihelp-managegroupsynchronizationcache-param-operation": "Gerçekleştirilecek işlem. Olası değerler: resolve",
+ "apihelp-managegroupsynchronizationcache-param-title": "Çözüldü olarak işaretlenen mesaj başlığı",
+ "apihelp-managegroupsynchronizationcache-param-group": "Çözümlenen mesajın grup kimliği",
+ "apihelp-translatesandbox-description": "Üye olun ve sanal alan kullanıcılarını yönetin.",
+ "apihelp-translatesandbox-summary": "Deneme tahtası olan kullanıcılarını kaydedin ve yönetin.",
+ "apihelp-translatesandbox-param-do": "Ne yapmalı.",
+ "apihelp-translatesandbox-param-userid": "Yönetilen kullanıcıların kullanıcı kimlikleri. Oluşumlar için 0 kullanın.",
+ "apihelp-translatesandbox-param-username": "Kullanıcı oluştururken kullanıcı adı.",
+ "apihelp-translatesandbox-param-password": "Kullanıcı oluştururken parola.",
+ "apihelp-translatesandbox-param-email": "Kullanıcı oluşturma e-posta.",
+ "apihelp-translationaids-description": "Tüm çevirileri sorgulamanıza yardımcı olur.",
+ "apihelp-translationaids-summary": "Tüm çevirileri sorgulamanıza yardımcı olur.",
+ "apihelp-translationaids-param-title": "Bilinen bir mesajın tam başlığı.",
+ "apihelp-translationaids-param-group": "Mesaj grubuna ait mesaj. Boşsa birincil grup kullanılır.",
+ "apihelp-translationaids-param-prop": "Çeviri eklemek için yardımcılar.",
+ "apihelp-translationaids-example-1": "[[MediaWiki:January/fi]] için yardımları göster",
+ "apihelp-translationreview-description": "Mark çeviriler yapılmıştır.",
+ "apihelp-translationreview-summary": "Çevirileri incelendi işaretleyin.",
+ "apihelp-translationreview-param-revision": "İncelenecek revizyon numarası.",
+ "apihelp-translationreview-example-1": "Revizyon 1'i inceleyin",
+ "apihelp-translationstash-description": "Çeviriler saklamak için ekleyin.",
+ "apihelp-translationstash-summary": "Çeviri saklamaları ekle.",
+ "apihelp-translationstash-param-subaction": "Eylem.",
+ "apihelp-translationstash-param-title": "Çeviri birimi sayfasının başlığı.",
+ "apihelp-translationstash-param-translation": "Çeviri kullanıcı tarafından yapılmış.",
+ "apihelp-translationstash-param-metadata": "JSON nesnesi.",
+ "apihelp-translationstash-param-username": "İsteğe bağlı olarak stash almak için kullanıcı. Bunu yalnızca ayrıcalıklı kullanıcılar yapabilir.",
+ "apihelp-translationstash-example-1": "[[MediaWiki:Jan/fi]] için saklama bir çeviri ekleyin",
+ "apihelp-translationstash-example-2": "Sorgu zula",
+ "apihelp-ttmserver-description": "Çeviri anılar sorgu önerileri.",
+ "apihelp-ttmserver-summary": "Çeviri anılarından gelen önerileri sorgulayın.",
+ "apihelp-ttmserver-param-service": "Kullanılabilecek çeviri hizmetlerinden hangisini kullanmalısınız.",
+ "apihelp-ttmserver-param-sourcelanguage": "Kaynak metnin dil kodu.",
+ "apihelp-ttmserver-param-targetlanguage": "Önerinin dil kodu.",
+ "apihelp-ttmserver-param-text": "Önerileri bulunacak metin.",
+ "apihelp-ttmserver-example-1": "\"Help\" ile İngilizce'den Fince'ye çevirmek için öneriler alın",
+ "apihelp-searchtranslations-description": "Çevirileri arayın.",
+ "apihelp-searchtranslations-summary": "Çevirileri arayın.",
+ "apihelp-searchtranslations-param-service": "Kullanılabilecek çeviri hizmetlerinden hangisi kullanılacaktır.",
+ "apihelp-searchtranslations-param-query": "Aranacak dize.",
+ "apihelp-searchtranslations-param-sourcelanguage": "Kaynak metnin dil kodu.",
+ "apihelp-searchtranslations-param-language": "Dizede aranacak dil kodu.",
+ "apihelp-searchtranslations-param-group": "Dizginin aranacağı grup kimliği.",
+ "apihelp-searchtranslations-param-filter": "İleti çeviri durum filtresi.",
+ "apihelp-searchtranslations-param-match": "Tüm arama sözcüklerini eşleştirin.",
+ "apihelp-searchtranslations-param-case": "Büyük/küçük harf duyarlı arama.",
+ "apihelp-searchtranslations-param-offset": "Çeviriler için ofset.",
+ "apihelp-searchtranslations-param-limit": "Sonucun boyutu.",
+ "apihelp-searchtranslations-example-1": "Dil için çevirileri gösterin.",
+ "apihelp-searchtranslations-example-2": "Kaynak dilde sorguyla eşleşen çevrilmemiş iletileri göster.",
+ "apihelp-translationcheck-description": "Verilen çeviri girişini yapılandırılmış mesaj doğrulayıcılarına göre doğrulayın.",
+ "apihelp-translationcheck-summary": "Çevirileri doğrulayın.",
+ "apihelp-translationcheck-param-title": "Ad alanı ve dil kodu içeren sayfa başlığı.",
+ "apihelp-translationcheck-param-translation": "Doğrulanacak çeviri.",
+ "apihelp-translationstats-description": "Çeviri düzenlemeleri, etkin çeviriler, yeni kullanıcılar, çeviri incelemeleri ve inceleyiciler ile ilgili çeviri istatistiklerini alın.",
+ "apihelp-translationstats-summary": "Çeviri istatistiklerini getirin",
+ "apihelp-translationstats-param-count": "İstenen istatistik türü",
+ "apihelp-translationstats-param-days": "İstatistiklerin alınacağı gün sayısı",
+ "apihelp-translationstats-param-group": "İstatistiklerin alınacağı grupların listesi.",
+ "apihelp-translationstats-param-language": "İstatistiklerin alınacağı dillerin listesi.",
+ "apihelp-translationstats-param-scale": "Çeviri istatistiklerinin ölçeği",
+ "apihelp-translationstats-param-start": "Çeviri istatistiklerinin alınacağı başlangıç tarihi. Geçerli tarih eksi <var>days</var> sayısı için varsayılandır.",
+ "apihelp-translationstats-example-1": "Tüm gruplar ve diller için son 30 güne ait düzenleme sayısını getirin",
+ "apihelp-translationstats-example-2": "İngilizce ve Fransızca dilleri için son 30 güne ait düzenleme sayısını getir.",
+ "apierror-translate-changeset-modified": "Değişiklik kümesi başka bir kullanıcı veya işlem tarafından değiştirildi. Yaptığınız değişiklikler, değişikliklerini geçersiz kılabileceği için kaydedilemiyor. En son değişiklikleri görmek için lütfen sayfayı yenileyin.",
+ "apierror-translate-duplicateaggregategroup": "Mesaj grubu zaten var",
+ "apierror-translate-fuzzymessage": "Fuzzy çevirileri incelenemiyor",
+ "apierror-translate-groupreviewdisabled": "Mesaj grubu incelemesi kullanılmıyor.",
+ "apierror-translate-invalidaggregategroup": "Geçersiz toplu mesaj grubu",
+ "apierror-translate-invalidaggregategroupname": "Geçersiz toplu mesaj grubu adı",
+ "apierror-translate-invalidgroup": "Grup mevcut değil veya geçersiz",
+ "apierror-translate-invalidstate": "İstenen durum geçersiz.",
+ "apierror-translate-invalidlanguage": "$1 dil kodu geçersiz.",
+ "apierror-translate-invalidupdate": "Geçersiz güncelleme",
+ "apierror-translate-language-disabled": "$1 çevirisi devre dışı.",
+ "apierror-translate-language-disabled-reason": "$1 çevirisi devre dışı: $2",
+ "apierror-translate-nodynamicgroups": "Dinamik mesaj grupları burada desteklenmiyor",
+ "apierror-translate-nomessagefortitle": "Başlık çevrilebilir bir iletiye karşılık gelmiyor",
+ "apierror-translate-notranslationservices": "Hiçbir genel çeviri hizmeti yapılandırılmadı. Viki hizmetlisi, bu özelliğin kullanılabilmesi için önce <var>$wgTranslateTranslationServices</var> ayarını doğru yapması gerekir.",
+ "apierror-translate-owntranslation": "Kendi çevirileri incelemiyor",
+ "apierror-translate-sandboxdisabled": "Deneme tahtası özelliği kullanımda değil",
+ "apierror-translate-smg-nochanges": "İşlenecek değişiklik yok.",
+ "apierror-translate-unknownmessage": "Bilinmeyen mesaj",
+ "apierror-translate-invalid-changeset-name": "Geçersiz değişiklik kümesi dosya adı geçti - $1",
+ "apierror-translate-invalid-operation": "Geçersiz işlem: $1. Geçerli değerler - $2.",
+ "apierror-translate-addition-key-invalid": "Ekleme için iletilen mesaj anahtarı, kaynak dil için yeniden adlandırılmış mesaj listesinde bulunamadı.",
+ "apierror-translate-rename-msg-new": "Yalnızca yeniden adlandırılan mesajlar yeni mesaj olarak eklenebilir.",
+ "apierror-translate-rename-key-invalid": "Yeniden adlandırma için iletilen mesaj anahtarları, kaynak dil için yapılan değişiklikler listesinde bulunamadı.",
+ "apierror-translate-rename-state-invalid": "Yeniden adlandırma için iletilen iletilerden biri yeni eklenmeli ve diğeri silinmelidir. Mevcut durumlar - ek: $1 ve silme: $2.",
+ "apiwarn-translate-alreadyreviewedbyyou": "Zaten sizin tarafınızdan incelenmiş olarak işaretlendi",
+ "apiwarn-translate-language-disabled-source": "Bu grubun kaynak dili $1. Lütfen çevrilecek başka bir dil seçin.",
+ "apierror-translate-operation-error": "İstek işlenirken bir hata oluştu. Hata: $1",
+ "apihelp-translationentitysearch-summary": "Mesaj gruplarını ve mesajları arayın",
+ "apihelp-translationentitysearch-param-entitytype": "Varlık türü sorgulanıyor",
+ "apihelp-translationentitysearch-param-query": "Arama sorgusu",
+ "apihelp-translationentitysearch-param-limit": "Maksimum arama sonucu sayısı"
+}
diff --git a/Translate/i18n/api/tt-cyrl.json b/Translate/i18n/api/tt-cyrl.json
new file mode 100644
index 00000000..13e3395d
--- /dev/null
+++ b/Translate/i18n/api/tt-cyrl.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ерней",
+ "Ильнар"
+ ]
+ },
+ "apihelp-groupreview-param-group": "Хәбәрләр тупламы."
+}
diff --git a/Translate/i18n/api/uk.json b/Translate/i18n/api/uk.json
new file mode 100644
index 00000000..47725ff4
--- /dev/null
+++ b/Translate/i18n/api/uk.json
@@ -0,0 +1,179 @@
+{
+ "@metadata": {
+ "authors": [
+ "Base",
+ "DDPAT",
+ "Dars",
+ "Ice bulldog",
+ "Piramidion",
+ "Ypryima",
+ "Ата"
+ ]
+ },
+ "apihelp-aggregategroups-description": "Керування агрегованими групами повідомлень.\n\nВи можете додавати або вилучати агреговані групи повідомлень та додавати чи вилучати повідомлення з них (одне за раз).",
+ "apihelp-aggregategroups-summary": "Керування агрегованими групами повідомлень.",
+ "apihelp-aggregategroups-extended-description": "Ви можете додавати або вилучати агреговані групи повідомлень та додавати чи вилучати повідомлення з них (одне за раз).",
+ "apihelp-aggregategroups-param-do": "Що робити з агрегованою групою повідомлень.",
+ "apihelp-aggregategroups-param-aggregategroup": "Ідентифікатор агрегованої групи повідомлень.",
+ "apihelp-aggregategroups-param-group": "Ідентифікатор групи повідомлень.",
+ "apihelp-aggregategroups-param-groupname": "Назва агрегованої групи повідомлень.",
+ "apihelp-aggregategroups-param-groupdescription": "Опис агрегованої групи повідомлень.",
+ "apihelp-aggregategroups-example-1": "Додати до групи",
+ "apihelp-groupreview-description": "Встановити повідомлення робочого процесу групи.",
+ "apihelp-groupreview-summary": "Встановити повідомлення робочого процесу групи.",
+ "apihelp-groupreview-param-group": "Група повідомлень.",
+ "apihelp-groupreview-param-language": "Мовний код.",
+ "apihelp-groupreview-param-state": "Новий стан для групи",
+ "apihelp-groupreview-example-1": "Позначити стан німецького перекладу групи повідомлень «group-Example» як «готово»",
+ "apihelp-query+languagestats-description": "Запитати мовну статистику.",
+ "apihelp-query+languagestats-summary": "Запитати мовну статистику.",
+ "apihelp-query+languagestats-param-language": "Код мови.",
+ "apihelp-query+languagestats-param-group": "Ідентифікатор групи повідомлень.",
+ "apihelp-query+languagestats-example-1": "Перелічити статистику завершеності перекладу фінською",
+ "apihelp-query+languagestats-example-2": "Перелічити статистику завершеності перекладу фінською для групи A",
+ "apihelp-query+messagecollection-description": "Запитати MessageCollection про переклади.",
+ "apihelp-query+managemessagegroups-summary": "Отримати можливі перейменування для повідомлення в групі протягом імпортувань",
+ "apihelp-query+managemessagegroups-description": "Отримати можливі перейменування для повідомлення в групі протягом імпортувань",
+ "apihelp-query+managemessagegroups-param-groupId": "Ідентифікатор групи",
+ "apihelp-query+managemessagegroups-param-messageKey": "Ключ повідомлення",
+ "apihelp-query+managemessagegroups-param-changesetName": "Назва набору змін — За замовчуванням/Без змін/MediaWiki тощо.",
+ "apihelp-query+managemessagegroups-example-1": "Отримати можливі перейменування для заданого ключа в заданій групі",
+ "apihelp-query+messagecollection-summary": "Запитати MessageCollection про переклади.",
+ "apihelp-query+messagecollection-param-group": "Група повідомлень.",
+ "apihelp-query+messagecollection-param-language": "Код мови.",
+ "apihelp-query+messagecollection-param-limit": "Скільки повідомлень показувати (після фільтрації)",
+ "apihelp-query+messagecollection-param-offset": "Цілочислове зміщення або його ключ для початку.",
+ "apihelp-query+messagecollection-param-filter": "Фільтри збірок повідомлень. Використовуйте <kbd>!</kbd>, щоб відкинути умову. Наприклад, <kbd>!fuzzy</kbd> означатиме виведення списку лише не застарілих повідомлень. Фільтри застосовуються у поданому порядку.\n;fuzzy:Повідомлення з міткою застарілості.\n;optional:Повідомлення, які треба перекладати, лише зміни необхідні.\n;ignored:Повідомлення, які не перекладаються.\n;hastranslation:Повідомлення, для яких є переклад не залежно від того, застарілий чи ні.\n;translated:Повідомлення, які мають актуальні переклади.\n;changed:Повідомлення, які було перекладено чи змінено з часу попереднього звіту.\n;reviewer&#58;N:Повідомлення, які перевіряв користувач номер <kbd>N</kbd>.\n;last-translator&#58;N:Повідомлення, для яких користувач номер <kbd>N</kbd> є останнім перекладачем.",
+ "apihelp-query+messagecollection-param-prop": "Які властивості отримати:\n;definition:Повідомлення.\n;translation:Поточний переклад (без рядка $1, якщо є, використати теґи для перевірки застарілих чи поламаних перекладів).\n;tags:Теґи повідомлення, наприклад optional, ignored чи fuzzy.\n;properties:Властивості повідомлення: status, revision, last-translator. Можуть відрізнятися у різних повідомлень.\n;revision:<span class=\"deprecated\">Застаріло!</span> Використати $2prop=properties.",
+ "apihelp-query+messagecollection-example-1": "Список підтримуваних мов",
+ "apihelp-query+messagecollection-example-2": "Список не додаткових повідомлень для групи «page-Example»",
+ "apihelp-query+messagecollection-example-3": "Список додаткових повідомлень фінською мовою з тегами для групи «page-Example»",
+ "apihelp-query+messagecollection-example-4": "Більше інформації про останні версії перекладів для групи «page-Example»",
+ "apihelp-query+messagegroups-description": "Видати інформацію про групи повідомлень.\n\nЗверніть увагу, що параметр uselang впливає на результати частин, що залежать від мови.",
+ "apihelp-query+messagegroups-summary": "Вивести інформацію про групи повідомлень.",
+ "apihelp-query+messagegroups-extended-description": "Зверніть увагу, що параметр uselang впливає на результат відображення частин, які залежать від мови.",
+ "apihelp-query+messagegroups-param-depth": "При використанні формату дерева, обмежити глибину до такої кількості рівнів. Значення 0 означає, що жодні підгрупи не відображаються. Якщо ліміту досягнуто, результат включає значення «groupcount», яке містить кількість безпосередніх підгруп.",
+ "apihelp-query+messagegroups-param-filter": "Видавати лише повідомлення з ідентифікаторами, які відповідають одному або кільком поданим характеристикам (без урахування регістру, розділені вертикальною рискою, байдужий символ *).",
+ "apihelp-query+messagegroups-param-format": "У деревоподібному форматі групи повідомлень можуть існувати в декількох місцях дерева.",
+ "apihelp-query+messagegroups-param-iconsize": "Бажаний розмір растеризованої іконки групи.",
+ "apihelp-query+messagegroups-param-prop": "Яку інформацію, пов'язану з перекладами, отримати:\n;id:Включити ідентифікатор групи.\n;label:Включити мітку групи.\n;description:Включити опис групи.\n;class:Включити назву класу групи.\n;namespace:Включити простір назв групи. Не всі групи належать до одного простору назв.\n;exists:Включити самообраховану властивість існування групи.\n;icon:Включити URL-адреси іконки групи.\n;priority:Включити статус пріоритетності, наприклад, заборонені.\n;prioritylangs:Включити пріоритетні мови. Якщо не вказані, параметр виводиться як хибний.\n;priorityforce:Включити статус пріоритетності — чи вказані пріоритетні мови примусово.\n;workflowstates:Включити робочий стан для груп повідомлень.",
+ "apihelp-query+messagegroups-param-root": "При використанні деревоподібного формату, замість починати від верхнього, почати з даної групи повідомлень, яка має бути агрегованою групою повідомлень. При використанні плоского формату видається лише зазначена група.",
+ "apihelp-query+messagegroups-param-languageFilter": "Повертати тільки ті групи повідомлень, які можна перекласти на цю мову.",
+ "apihelp-query+messagegroups-example-1": "Показати групи повідомлень",
+ "apihelp-query+messagegroupstats-description": "Зробити запит на статистику групи повідомлень.",
+ "apihelp-query+messagegroupstats-summary": "Зробити запит на статистику групи повідомлень.",
+ "apihelp-query+messagegroupstats-param-group": "Ідентифікатор групи повідомлень.",
+ "apihelp-query+messagegroupstats-param-suppresscomplete": "Не показувати мови, які мають завершені переклади",
+ "apihelp-query+messagegroupstats-param-suppressempty": "Не показувати мови, які не мають жодного перекладу",
+ "apihelp-query+messagegroupstats-example-1": "Список статистики завершеності перекладів для групи «page-Example»",
+ "apihelp-query+messagetranslations-description": "Зробити запит на всі переклади одного повідомлення.",
+ "apihelp-query+messagetranslations-summary": "Зробити запит на всі переклади одного повідомлення.",
+ "apihelp-query+messagetranslations-param-title": "Повна назва відомого повідомлення.",
+ "apihelp-query+messagetranslations-example-1": "Список перекладів у вікі для «MediaWiki:January»",
+ "apihelp-managemessagegroups-description": "Додати повідомлення як перейменування існуючого повідомлення, або як нове повідомлення в групі протягом імпортувань",
+ "apihelp-managemessagegroups-summary": "Додати повідомлення як перейменування існуючого повідомлення, або як нове повідомлення в групі протягом імпортувань",
+ "apihelp-managemessagegroups-param-groupId": "Ідентифікатор групи",
+ "apihelp-managemessagegroups-param-renameMessageKey": "Ключ цільового повідомлення, перейменування якого здійснюється",
+ "apihelp-managemessagegroups-param-messageKey": "Заміна для ключа повідомлення",
+ "apihelp-managemessagegroups-param-operation": "Операція, яку слід виконати. Можливі значення: rename / new",
+ "apihelp-managemessagegroups-param-changesetName": "Назва набору змін — За замовчуванням/Без змін/MediaWiki тощо.",
+ "apihelp-managemessagegroups-param-changesetModified": "Мітка часу Unix-формату, коли була остання модифікація набору змін. Якщо модифікація набору змін сталася після цього, API видасть помилку.",
+ "apihelp-managegroupsynchronizationcache-description": "Керувати кешем групової синхронізації.",
+ "apihelp-managegroupsynchronizationcache-summary": "Керувати кешем групової синхронізації.",
+ "apihelp-managegroupsynchronizationcache-param-operation": "Операція, яку слід виконати. Можливі значення: resolve",
+ "apihelp-managegroupsynchronizationcache-param-title": "Заголовок повідомлення позначено як вирішене",
+ "apihelp-managegroupsynchronizationcache-param-group": "Ідентифікатор групи повідомлення, яке вирішується",
+ "apihelp-translatesandbox-description": "Зареєструватися й управляти користувачами в пісочниці.",
+ "apihelp-translatesandbox-summary": "Зареєструватися й управляти користувачами в пісочниці.",
+ "apihelp-translatesandbox-param-do": "Що робити.",
+ "apihelp-translatesandbox-param-userid": "Ідентифікатори користувачів, управління якими здійснюється. Використайте 0 для створюваних.",
+ "apihelp-translatesandbox-param-username": "Ім'я користувача при створенні користувача.",
+ "apihelp-translatesandbox-param-password": "Пароль при створенні користувача.",
+ "apihelp-translatesandbox-param-email": "Електронна пошта при створенні користувача.",
+ "apihelp-translationaids-description": "Зробити запит на усі підказки перекладу.",
+ "apihelp-translationaids-summary": "Зробити запит на усі підказки перекладу.",
+ "apihelp-translationaids-param-title": "Повна назва відомого повідомлення.",
+ "apihelp-translationaids-param-group": "Група повідомлень, до якої належить повідомлення. Якщо порожня, то буде використано первинну групу.",
+ "apihelp-translationaids-param-prop": "Яких помічників перекладу включати.",
+ "apihelp-translationaids-example-1": "Показати підказки для [[MediaWiki:January/fi]]",
+ "apihelp-translationreview-description": "Позначити переклади як перевірені.",
+ "apihelp-translationreview-summary": "Позначити переклади як перевірені.",
+ "apihelp-translationreview-param-revision": "Номер версії для перевірки.",
+ "apihelp-translationreview-example-1": "Перевірка версій",
+ "apihelp-translationstash-description": "Додати переклади у стеш.",
+ "apihelp-translationstash-summary": "Додати переклади у сховок.",
+ "apihelp-translationstash-param-subaction": "Дія.",
+ "apihelp-translationstash-param-title": "Заголовок сторінки блоку перекладу.",
+ "apihelp-translationstash-param-translation": "Переклад, зроблений користувачем.",
+ "apihelp-translationstash-param-metadata": "JSON об'єкт",
+ "apihelp-translationstash-param-username": "Необов'язково, користувач, чий стеш отримати. Лише привілейовані користувачі можуть це робити.",
+ "apihelp-translationstash-example-1": "Додати переклад у стеш для [[MediaWiki:Jan/fi]]",
+ "apihelp-translationstash-example-2": "Зробити запит на стеш",
+ "apihelp-ttmserver-description": "Зробити запит на пропозиції з пам'яті перекладів",
+ "apihelp-ttmserver-summary": "Зробити запит на пропозиції з пам'яті перекладів",
+ "apihelp-ttmserver-param-service": "Який з доступних сервісів перекладу використати.",
+ "apihelp-ttmserver-param-sourcelanguage": "Код мови вихідного тексту.",
+ "apihelp-ttmserver-param-targetlanguage": "Код мови пропозиції.",
+ "apihelp-ttmserver-param-text": "Текст, для якого знайти пропозиції.",
+ "apihelp-ttmserver-example-1": "Отримати пропозиції для перекладу «Help» з англійської на фінську",
+ "apihelp-searchtranslations-description": "Пошук перекладів.",
+ "apihelp-searchtranslations-summary": "Пошук перекладів.",
+ "apihelp-searchtranslations-param-service": "Який з доступних сервісів перекладу використати.",
+ "apihelp-searchtranslations-param-query": "Рядок для пошуку.",
+ "apihelp-searchtranslations-param-sourcelanguage": "Код мови вихідного тексту.",
+ "apihelp-searchtranslations-param-language": "Код мови, для якої шукати рядок.",
+ "apihelp-searchtranslations-param-group": "ID групи, в якій шукати рядок.",
+ "apihelp-searchtranslations-param-filter": "Фільтр стану перекладу повідомлення.",
+ "apihelp-searchtranslations-param-match": "Відповідність одного із/всіх пошукових слів.",
+ "apihelp-searchtranslations-param-case": "Пошук (не)чутливий до регістру.",
+ "apihelp-searchtranslations-param-offset": "Зміщення для перекладів.",
+ "apihelp-searchtranslations-param-limit": "Розмір результату.",
+ "apihelp-searchtranslations-example-1": "Показати переклади для мови.",
+ "apihelp-searchtranslations-example-2": "Показати запит на подібні неперекладені збіги мовою оригіналу.",
+ "apihelp-translationcheck-description": "Перевірити введений переклад за допомогою налаштованих засобів перевірки повідомлень.",
+ "apihelp-translationcheck-summary": "Перевірити переклади.",
+ "apihelp-translationcheck-param-title": "Назва сторінки з простором назв та кодом мови.",
+ "apihelp-translationcheck-param-translation": "Переклад, який слід перевірити.",
+ "apihelp-translationstats-description": "Отримати статистику перекладів, що стосується редагувань перекладів, активних перекладачів, нових користувачів, перевірок перегляду та перевяльників.",
+ "apihelp-translationstats-summary": "Отримати статистику перекладів",
+ "apihelp-translationstats-param-count": "Типи статистики, що підлягають запиту",
+ "apihelp-translationstats-param-days": "Число днів за які запитати статистику",
+ "apihelp-translationstats-param-group": "Перелік груп для яких запитати статистику.",
+ "apihelp-translationstats-param-language": "Перелік мов для яких запитати статистику.",
+ "apihelp-translationstats-param-scale": "Масштаб статистики перекладів",
+ "apihelp-translationstats-param-start": "Дата з починаючи з якої запитати статистику перекладів. За замовчуванням — поточна дата мінус число значення <var>days</var>.",
+ "apihelp-translationstats-example-1": "Отримати число редагувань за останні 30 днів для всіх груп та мов",
+ "apihelp-translationstats-example-2": "Отримати число редагувань за останні 30 днів для англійської та французької мов.",
+ "apierror-translate-changeset-modified": "Набір змін модифіковано іншим користувачем чи процесом. Ваші зміни не можна зберегти, оскільки це може перезаписати їхні зміни. Будь ласка, перезавантажте сторінку, щоб побачити останні зміни.",
+ "apierror-translate-duplicateaggregategroup": "Група повідомлень вже існує",
+ "apierror-translate-fuzzymessage": "Не вдалося переглянути застарілі переклади",
+ "apierror-translate-groupreviewdisabled": "Група повідомлень не використовується.",
+ "apierror-translate-invalidaggregategroup": "Недійсна загальна група повідомлень",
+ "apierror-translate-invalidaggregategroupname": "Недійсна назва загальної групи повідомлень",
+ "apierror-translate-invalidgroup": "Група не існує або є недійсною",
+ "apierror-translate-invalidstate": "Запитуваний стан недійсний.",
+ "apierror-translate-invalidlanguage": "Код мови $1 недійсний.",
+ "apierror-translate-invalidupdate": "Недійсне оновлення",
+ "apierror-translate-language-disabled": "Переклад мовою «$1» вимкнено",
+ "apierror-translate-language-disabled-reason": "Переклад мовою «$1» вимкнено: $2",
+ "apierror-translate-nodynamicgroups": "Динамічні групи повідомлень не підтримуються тут",
+ "apierror-translate-nomessagefortitle": "Назва не відповідає перекладному повідомленню",
+ "apierror-translate-notranslationservices": "Не налаштовано ще жодного публічного сервісу перекладу. Адміністратор цієї вікі повинен належним чином налаштувати <var>$wgTranslateTranslationServices</var>, перш ніж цю функцію можна буде використовувати.",
+ "apierror-translate-owntranslation": "Не вдалося перевірити власні переклади",
+ "apierror-translate-sandboxdisabled": "Функція пісочниці не використовується",
+ "apierror-translate-smg-nochanges": "Немає змін процесу.",
+ "apierror-translate-unknownmessage": "Невідоме повідомлення",
+ "apierror-translate-invalid-changeset-name": "Подано недійсну назву файлу набору змін — $1",
+ "apierror-translate-invalid-operation": "Недійсна операція: $1. Дійсні значення — $2.",
+ "apierror-translate-addition-key-invalid": "Ключ повідомлення, поданий для додавання, не знайдено в списку перейменованих повідомлень для цільової мови.",
+ "apierror-translate-rename-msg-new": "Лише перейменовані повідомлення можна додавати як нові повідомлення.",
+ "apierror-translate-rename-key-invalid": "Ключі повідомлень, подані для перейменування, не знайдено в списку змін для цільової мови.",
+ "apierror-translate-rename-state-invalid": "Одне з повідомлень, подане для перейменування, має бути доданим заново, а інше — вилученим. Поточні стани — додавання: $1 і вилучення: $2.",
+ "apiwarn-translate-alreadyreviewedbyyou": "Вже позначено Вами як перевірено",
+ "apiwarn-translate-language-disabled-source": "Вихідна мова цієї групи — $1. Будь ласка, виберіть іншу мову для перекладу.",
+ "apierror-translate-operation-error": "Під час обробки запиту сталася помилка. Помилка: $1",
+ "apihelp-translationentitysearch-summary": "Пошук груп повідомлень і повідомлень",
+ "apihelp-translationentitysearch-param-entitytype": "Тип сутності, який запитується",
+ "apihelp-translationentitysearch-param-query": "Пошуковий запит",
+ "apihelp-translationentitysearch-param-limit": "Максимальна кількість результатів пошуку"
+}
diff --git a/Translate/i18n/api/vec.json b/Translate/i18n/api/vec.json
new file mode 100644
index 00000000..2162532d
--- /dev/null
+++ b/Translate/i18n/api/vec.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fierodelveneto"
+ ]
+ },
+ "apihelp-groupreview-param-group": "Grupo de mesaji",
+ "apihelp-query+messagecollection-param-group": "Grupo de mesaji"
+}
diff --git a/Translate/i18n/api/vi.json b/Translate/i18n/api/vi.json
new file mode 100644
index 00000000..2f969087
--- /dev/null
+++ b/Translate/i18n/api/vi.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "KhangND",
+ "Minh Nguyen"
+ ]
+ },
+ "apihelp-query+messagegroups-param-depth": "Khi sử dụng định dạng cây, giới hạn chiều cao đến các cấp độ. Giá trị 0 nghĩa là không nhóm con nào được hiển thị. Nếu đạt tới giới hạn, kết quả xuất sẽ bao gồm giá trị “groupcount” (số nhóm), tức số lượng con trực tiếp.",
+ "apihelp-ttmserver-param-sourcelanguage": "Mã ngôn ngữ của văn bản nguồn."
+}
diff --git a/Translate/i18n/api/wa.json b/Translate/i18n/api/wa.json
new file mode 100644
index 00000000..fdbd140e
--- /dev/null
+++ b/Translate/i18n/api/wa.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Srtxg"
+ ]
+ },
+ "apihelp-query+messagecollection-example-1": "Djivêye des lingaedjes sopoirtés"
+}
diff --git a/Translate/i18n/api/yi.json b/Translate/i18n/api/yi.json
new file mode 100644
index 00000000..80ff6e60
--- /dev/null
+++ b/Translate/i18n/api/yi.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "פוילישער"
+ ]
+ },
+ "apihelp-groupreview-param-group": "מעלדונג גרופע",
+ "apihelp-groupreview-param-language": "שפראַך קאד.",
+ "apihelp-query+languagestats-param-language": "שפראַך קאד.",
+ "apihelp-query+messagecollection-param-language": "שפראַך-קאד.",
+ "apihelp-query+messagecollection-example-1": "ליסטע פֿון אונטערגשטיצטע שפראכן",
+ "apihelp-translatesandbox-param-do": "וואס צו טון.",
+ "apihelp-ttmserver-param-sourcelanguage": "שפראך-קאד פון דעם קוואלטעקסט.",
+ "apihelp-searchtranslations-description": "זוכן איבערזעצונגען",
+ "apihelp-searchtranslations-summary": "זוכן איבערזעצונגען",
+ "apihelp-searchtranslations-param-sourcelanguage": "שפראך-קאד פון דעם קוואלטעקסט.",
+ "apihelp-searchtranslations-example-1": "ווייזן איבערזעצונגען פאר דער שפראך.",
+ "apihelp-searchtranslations-example-2": "ווייז נישט-איבערגעזעצטע מעלדונגען וואס פאסן צו דער פֿראגע אין דער קוואלשפראך.",
+ "apiwarn-translate-language-disabled-source": "די קוואלשפראך פֿאר דער דאזיקער גרופע איז $1. זייט אזוי גוט און וויילט אן אנדער שפראך איבערצוזעצן דערצו."
+}
diff --git a/Translate/i18n/api/yue.json b/Translate/i18n/api/yue.json
new file mode 100644
index 00000000..882bddd0
--- /dev/null
+++ b/Translate/i18n/api/yue.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hello903hello"
+ ]
+ },
+ "apihelp-aggregategroups-param-group": "訊息組ID。",
+ "apihelp-groupreview-param-group": "訊息組。",
+ "apihelp-query+messagecollection-param-group": "訊息組。",
+ "apihelp-translatesandbox-param-do": "要做乜。",
+ "apihelp-translationreview-example-1": "複審修訂版本1",
+ "apihelp-translationcheck-summary": "驗證翻譯。"
+}
diff --git a/Translate/i18n/api/zgh.json b/Translate/i18n/api/zgh.json
new file mode 100644
index 00000000..16fdde9c
--- /dev/null
+++ b/Translate/i18n/api/zgh.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Brahim-essaidi"
+ ]
+ },
+ "apihelp-aggregategroups-param-group": "ⴰⵎⵙⵢⵉⵙⵙⵏ ⵏ ⵜⵔⴰⴱⴱⵓⵜ ⵏ ⵜⵓⵣⵉⵏⵉⵏ",
+ "apihelp-groupreview-param-group": "ⵜⴰⵔⴰⴱⴱⵓⵜ ⵏ ⵜⵓⵣⵉⵏⵉⵏ.",
+ "apihelp-query+messagecollection-param-group": "ⵜⴰⵔⴰⴱⴱⵓⵜ ⵏ ⵜⵓⵣⵉⵏⵉⵏ.",
+ "apihelp-query+messagegroupstats-param-group": "ⴰⵎⵙⵢⵉⵙⵙⵏ ⵏ ⵜⵔⴰⴱⴱⵓⵜ ⵏ ⵜⵓⵣⵉⵏⵉⵏ",
+ "apierror-translate-duplicateaggregategroup": "ⵜⴰⵔⴰⴱⴱⵓⵜ ⵏ ⵜⵓⵣⵉⵏⵉⵏ ⵜⵍⵍⴰ ⵢⴰⴷ"
+}
diff --git a/Translate/i18n/api/zh-hans.json b/Translate/i18n/api/zh-hans.json
new file mode 100644
index 00000000..07402804
--- /dev/null
+++ b/Translate/i18n/api/zh-hans.json
@@ -0,0 +1,149 @@
+{
+ "@metadata": {
+ "authors": [
+ "GuoPC",
+ "HERAN",
+ "LNDDYL",
+ "Lakejason0",
+ "Liuxinyu970226",
+ "Tr jason",
+ "TsuyaMarisa",
+ "VulpesVulpes825",
+ "Xiplus",
+ "Yfdyh000"
+ ]
+ },
+ "apihelp-aggregategroups-description": "管理聚合消息组。\n\n您可以添加和移除聚合消息组,以及从组中关联或分离消息(一次一个)。",
+ "apihelp-aggregategroups-summary": "管理聚合消息组。",
+ "apihelp-aggregategroups-extended-description": "您可以添加和移除聚合消息组,以及从组中关联或分离消息(一次一个)。",
+ "apihelp-aggregategroups-param-do": "想要操作哪个聚合消息组。",
+ "apihelp-aggregategroups-param-aggregategroup": "聚合消息组ID。",
+ "apihelp-aggregategroups-param-group": "消息组ID。",
+ "apihelp-aggregategroups-param-groupname": "聚合消息组的名称。",
+ "apihelp-aggregategroups-param-groupdescription": "聚合消息组的描述。",
+ "apihelp-aggregategroups-example-1": "关联一个群组",
+ "apihelp-groupreview-description": "设置信息组工作流状态。",
+ "apihelp-groupreview-summary": "设置信息组工作流状态。",
+ "apihelp-groupreview-param-group": "信息组。",
+ "apihelp-groupreview-param-language": "语言代码。",
+ "apihelp-groupreview-param-state": "组的新状态。",
+ "apihelp-groupreview-example-1": "将用于消息组“group-Example”的德语翻译状态标记为已就绪",
+ "apihelp-query+languagestats-description": "查询语言状态。",
+ "apihelp-query+languagestats-summary": "查询语言状态。",
+ "apihelp-query+languagestats-param-language": "语言代码。",
+ "apihelp-query+languagestats-param-group": "消息组 ID。",
+ "apihelp-query+languagestats-example-1": "芬兰语的翻译完成统计列表",
+ "apihelp-query+messagecollection-description": "查询有关翻译的MessageCollection。",
+ "apihelp-query+managemessagegroups-summary": "在导入期间为组中的消息获取可能的重命名",
+ "apihelp-query+managemessagegroups-description": "在导入期间为组中的消息获取可能的重命名",
+ "apihelp-query+managemessagegroups-param-groupId": "群组ID",
+ "apihelp-query+managemessagegroups-param-messageKey": "消息键",
+ "apihelp-query+messagecollection-summary": "查询有关翻译的MessageCollection。",
+ "apihelp-query+messagecollection-param-group": "信息组。",
+ "apihelp-query+messagecollection-param-language": "语言代码。",
+ "apihelp-query+messagecollection-param-limit": "显示的消息数量(过滤后)。",
+ "apihelp-query+messagecollection-param-offset": "起始的整数或键值。",
+ "apihelp-query+messagecollection-param-filter": "消息集合过滤器。使用<kbd>!</kbd>否定条件。例如<kbd>!fuzzy</kbd>意思是只列出所有未过期消息。过滤器以特定顺序应用。\n;fuzzy:带fuzzy标签的消息。\n;optional:只应在需要更改时翻译的消息。\n;ignored:不应翻译的消息。\n;hastranslation:无论过期与否,带翻译的消息。\n;translated:带有未过期翻译的消息。\n;changed:自从上次导出之日起,已翻译或更改的消息。\n;reviewer&#58;N:当用户数字<kbd>N</kbd>在复核者之间时的消息。\n;last-translator&#58;N:当用户数字<kbd>N</kbd>是最终翻译者时的消息。",
+ "apihelp-query+messagecollection-param-prop": "要获取的属性:\n;definition:信息定义。\n;translation:当前翻译(如果有则不带$1字符串,使用标签以检查已过时或损坏的翻译)。\n;tags:信息标签,例如可选、已忽略和过时。\n;properties:信息属性,例如状态、修订、最后翻译者。可在信息间变化。\n;revision:<span class=\"deprecated\">已弃用!</span>请改用$2prop=properties。",
+ "apihelp-query+messagecollection-example-1": "支持的语言列表",
+ "apihelp-query+messagecollection-example-2": "定义用于组“page-Example”的非可选消息列表",
+ "apihelp-query+messagecollection-example-3": "芬兰语中的可选消息列表,带有用于“page-Example”组的标签",
+ "apihelp-query+messagecollection-example-4": "更多有关“page-Example”组最近翻译修订的信息",
+ "apihelp-query+messagegroups-description": "返回有关消息组的信息。\n\n注意uselang参数会影响语言相关部分的输出。",
+ "apihelp-query+messagegroups-summary": "返回有关消息组的信息。",
+ "apihelp-query+messagegroups-extended-description": "注意uselang测试影响语言依赖部分的输出。",
+ "apihelp-query+messagegroups-param-depth": "当使用树形格式时,限制深度至如此多水平。值0意味着不会显示子组。如果达到限制,输出会包含一个“groupcount”值,它指出直系子组的数值。",
+ "apihelp-query+messagegroups-param-filter": "只返回匹配一个或更多输入内容的ID的消息(不区分大小写,以逗号分隔,* 通配符)。",
+ "apihelp-query+messagegroups-param-format": "在树格式信息组可以存在于树中的多个位置。",
+ "apihelp-query+messagegroups-param-iconsize": "栅格化群组图标的首选大小。",
+ "apihelp-query+messagegroups-param-prop": "要获得的有关翻译的信息:\n;id:包含组ID。\n;label:包含组标签。\n;description:包含组描述。\n;class:包含组分类名。\n;namespace:包含组命名空间。不是所有组都属于单一命名空间。\n;exists:包含自计算的组实际属性。\n;icon:包含至URL的组图标。\n;priority:包含优先状态,例如劝阻。\n;prioritylangs:包含首选语言。如果未设置,这将返回否。\n;priorityforce:包含优先状态——优先语言是否被强制设置。\n;workflowstates:包含用于消息组的工作流状态。",
+ "apihelp-query+messagegroups-param-root": "何时使用树形格式,而不是从来自指定信息组最高级开始,那样必须是一个聚合信息组。当使用单调格式时只有指定组被返回。",
+ "apihelp-query+messagegroups-param-languageFilter": "只能返回可以将其转换为给定语言的消息组。",
+ "apihelp-query+messagegroups-example-1": "显示信息组",
+ "apihelp-query+messagegroupstats-description": "查询信息组状态。",
+ "apihelp-query+messagegroupstats-summary": "查询信息组状态。",
+ "apihelp-query+messagegroupstats-param-group": "信息组ID。",
+ "apihelp-query+messagegroupstats-example-1": "用于“page-Example”组的翻译完成统计列表",
+ "apihelp-query+messagetranslations-description": "查询单个信息的所有翻译。",
+ "apihelp-query+messagetranslations-summary": "查询单个信息的所有翻译。",
+ "apihelp-query+messagetranslations-param-title": "已知消息的完整标题。",
+ "apihelp-query+messagetranslations-example-1": "Wiki中用于“MediaWiki:January”的翻译列表",
+ "apihelp-managemessagegroups-param-groupId": "群组ID",
+ "apihelp-translatesandbox-description": "注册和管理沙盒化用户。",
+ "apihelp-translatesandbox-summary": "注册和管理沙盒化用户。",
+ "apihelp-translatesandbox-param-do": "要干什么。",
+ "apihelp-translatesandbox-param-userid": "要管理的用户的用户ID。0用于创建者。",
+ "apihelp-translatesandbox-param-username": "创建用户时的用户名。",
+ "apihelp-translatesandbox-param-password": "创建用户时的密码。",
+ "apihelp-translatesandbox-param-email": "创建用户时发送电子邮件。",
+ "apihelp-translationaids-description": "查询所有翻译帮助。",
+ "apihelp-translationaids-summary": "查询所有翻译帮助。",
+ "apihelp-translationaids-param-title": "已知消息的完整标题。",
+ "apihelp-translationaids-param-group": "信息属于哪个信息组。如果为空则使用首要组。",
+ "apihelp-translationaids-param-prop": "包含的翻译助手。",
+ "apihelp-translationaids-example-1": "显示[[MediaWiki:January/fi]]的建议",
+ "apihelp-translationreview-description": "标记该翻译为已复核。",
+ "apihelp-translationreview-summary": "标记该翻译为已复核。",
+ "apihelp-translationreview-param-revision": "要复核的修订版本号。",
+ "apihelp-translationreview-example-1": "复核修订版本1",
+ "apihelp-translationstash-description": "将译文放在藏匿处。",
+ "apihelp-translationstash-summary": "将译文放在藏匿处。",
+ "apihelp-translationstash-param-subaction": "操作。",
+ "apihelp-translationstash-param-title": "翻译单位页面的标题。",
+ "apihelp-translationstash-param-translation": "由用户做出的翻译。",
+ "apihelp-translationstash-param-metadata": "JSON对象。",
+ "apihelp-translationstash-param-username": "要获取的随机用户的藏匿。只有特权用户可以做这件事。",
+ "apihelp-translationstash-example-1": "加入[[MediaWiki:Jan/fi]]的一次翻译至藏匿处",
+ "apihelp-translationstash-example-2": "查询藏匿",
+ "apihelp-ttmserver-description": "从翻译记忆库查询建议。",
+ "apihelp-ttmserver-summary": "从翻译记忆库查询建议。",
+ "apihelp-ttmserver-param-service": "哪些翻译服务可供使用。",
+ "apihelp-ttmserver-param-sourcelanguage": "原始文本的语言代码。",
+ "apihelp-ttmserver-param-targetlanguage": "建议的语言代码。",
+ "apihelp-ttmserver-param-text": "用于寻找建议的文本。",
+ "apihelp-ttmserver-example-1": "获取有关将“Help”从英语翻译成芬兰语的建议",
+ "apihelp-searchtranslations-description": "搜索译文。",
+ "apihelp-searchtranslations-summary": "搜索译文。",
+ "apihelp-searchtranslations-param-service": "哪些翻译服务可供使用。",
+ "apihelp-searchtranslations-param-query": "要搜索的字符串。",
+ "apihelp-searchtranslations-param-sourcelanguage": "原始文本的语言代码。",
+ "apihelp-searchtranslations-param-language": "要搜索字符串的语言代码。",
+ "apihelp-searchtranslations-param-group": "要搜索字符串的组id。",
+ "apihelp-searchtranslations-param-filter": "消息译文状态过滤器。",
+ "apihelp-searchtranslations-param-match": "匹配任何/所有搜索词。",
+ "apihelp-searchtranslations-param-case": "(不)区分大小写的搜索。",
+ "apihelp-searchtranslations-param-offset": "用于译文的偏移。",
+ "apihelp-searchtranslations-param-limit": "结果的大小。",
+ "apihelp-searchtranslations-example-1": "显示用于语言的翻译。",
+ "apihelp-searchtranslations-example-2": "显示在原始语言中匹配查询未翻译信息。",
+ "apihelp-translationcheck-description": "验证提供的翻译是否符合所设置的消息验证器的要求。",
+ "apihelp-translationcheck-summary": "验证翻译。",
+ "apihelp-translationcheck-param-title": "带命名空间和语言代码的页面标题。",
+ "apihelp-translationcheck-param-translation": "要验证的翻译。",
+ "apierror-translate-duplicateaggregategroup": "消息组已存在",
+ "apierror-translate-fuzzymessage": "不能复核模糊翻译",
+ "apierror-translate-groupreviewdisabled": "未使用消息组复核。",
+ "apierror-translate-invalidaggregategroup": "无效的聚合消息组",
+ "apierror-translate-invalidaggregategroupname": "无效的聚合消息组名称",
+ "apierror-translate-invalidgroup": "组不存在或无效",
+ "apierror-translate-invalidstate": "请求的状态无效。",
+ "apierror-translate-invalidlanguage": "语言代码$1无效。",
+ "apierror-translate-invalidupdate": "无效更新",
+ "apierror-translate-language-disabled": "至$1的翻译已禁用。",
+ "apierror-translate-language-disabled-reason": "至$1的翻译已禁用:$2",
+ "apierror-translate-nodynamicgroups": "动态消息组在此不支持",
+ "apierror-translate-nomessagefortitle": "标题与可翻译消息不一致",
+ "apierror-translate-notranslationservices": "未配置公开翻译服务。在此功能可以使用前,wiki管理员需要适当设置<var>$wgTranslateTranslationServices</var>。",
+ "apierror-translate-owntranslation": "不能复核自己的翻译",
+ "apierror-translate-sandboxdisabled": "未使用沙盒功能",
+ "apierror-translate-smg-nochanges": "没有要处理的更改。",
+ "apierror-translate-unknownmessage": "未知消息",
+ "apierror-translate-invalid-changeset-name": "传入了无效的更改集文件名 - $1",
+ "apierror-translate-invalid-operation": "操作无效:$1。有效值 - $2。",
+ "apiwarn-translate-alreadyreviewedbyyou": "已被您标记为已复核",
+ "apiwarn-translate-language-disabled-source": "此组的原始语言是$1。请选择另一语言进行翻译。",
+ "apierror-translate-operation-error": "处理请求时出现错误。错误:$1",
+ "apihelp-translationentitysearch-summary": "搜索消息组和消息",
+ "apihelp-translationentitysearch-param-query": "搜索查询",
+ "apihelp-translationentitysearch-param-limit": "最大搜索结果数量"
+}
diff --git a/Translate/i18n/api/zh-hant.json b/Translate/i18n/api/zh-hant.json
new file mode 100644
index 00000000..477ea683
--- /dev/null
+++ b/Translate/i18n/api/zh-hant.json
@@ -0,0 +1,177 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kly",
+ "LNDDYL",
+ "Liuxinyu970226",
+ "Weather Top Wizard",
+ "Winston Sung"
+ ]
+ },
+ "apihelp-aggregategroups-description": "管理集合訊息群組。\n\n您可以添加或移除集合訊息群組,以及從其中來關聯或取消關聯訊息群組(每一次一個)。",
+ "apihelp-aggregategroups-summary": "管理集合訊息群組。",
+ "apihelp-aggregategroups-extended-description": "您可以添加或移除集合訊息群組,以及從其中來關聯或取消關聯訊息群組(每一次一個)。",
+ "apihelp-aggregategroups-param-do": "要與集合訊息群組做的項目。",
+ "apihelp-aggregategroups-param-aggregategroup": "集合訊息群組 ID。",
+ "apihelp-aggregategroups-param-group": "訊息群組 ID。",
+ "apihelp-aggregategroups-param-groupname": "集合訊息群組名稱。",
+ "apihelp-aggregategroups-param-groupdescription": "集合訊息群組描述。",
+ "apihelp-aggregategroups-example-1": "關聯群組",
+ "apihelp-groupreview-description": "設定訊息群組的工作流狀態。",
+ "apihelp-groupreview-summary": "設定訊息群組的工作流狀態。",
+ "apihelp-groupreview-param-group": "訊息群組。",
+ "apihelp-groupreview-param-language": "語言代碼。",
+ "apihelp-groupreview-param-state": "群組的新狀態。",
+ "apihelp-groupreview-example-1": "標記訊息群組「group-Example」的德語翻譯狀態為就緒",
+ "apihelp-query+languagestats-description": "查詢語言統計。",
+ "apihelp-query+languagestats-summary": "查詢語言統計。",
+ "apihelp-query+languagestats-param-language": "語言代碼。",
+ "apihelp-query+languagestats-param-group": "訊息群組 ID。",
+ "apihelp-query+languagestats-example-1": "芬蘭語的翻譯完成統計狀態清單",
+ "apihelp-query+languagestats-example-2": "群組 A 芬蘭語的翻譯完成統計狀態清單",
+ "apihelp-query+messagecollection-description": "查詢有關翻譯的 MessageCollection。",
+ "apihelp-query+managemessagegroups-summary": "在導入過程中取得訊息群組裡可能的重新命名",
+ "apihelp-query+managemessagegroups-description": "在導入過程中取得訊息群組裡可能的重新命名",
+ "apihelp-query+managemessagegroups-param-groupId": "群組 ID",
+ "apihelp-query+managemessagegroups-param-messageKey": "訊息鍵",
+ "apihelp-query+managemessagegroups-param-changesetName": "更改設定名稱 - 預設/未留意/MediaWiki 其它",
+ "apihelp-query+managemessagegroups-example-1": "索取在指定群組裡指定鍵可能會有的重新命名。",
+ "apihelp-query+messagecollection-summary": "查詢有關翻譯的 MessageCollection。",
+ "apihelp-query+messagecollection-param-group": "訊息群組。",
+ "apihelp-query+messagecollection-param-language": "語言代碼。",
+ "apihelp-query+messagecollection-param-limit": "要顯示的訊息多寡(在篩選後)。",
+ "apihelp-query+messagecollection-param-offset": "起始的整數或鍵值偏差。",
+ "apihelp-query+messagecollection-param-filter": "訊息集合篩選。使用 <kbd>!</kbd> 來使條件無效。例如 <kbd>!fuzzy</kbd> 代表僅列出未過時的訊息。篩選是以指定的排序來套用。\n;fuzzy:帶有模糊標籤的訊息。\n;optional:僅在需要更改時翻譯的訊息。\n;ignored:不需翻譯的訊息。\n;hastranslation:有被翻譯到的訊息,無論是否為模糊翻譯。\n;translated:有被翻譯到且非模糊翻譯的訊息。\n;changed:自上一次匯出時,有被翻譯或更改的訊息。\n;reviewer&#58;N:在複審員裡使用者編號為 <kbd>N</kbd> 的訊息。\n;last-translator&#58;N:最後一位翻譯者之使用者編號為 <kbd>N</kbd> 的訊息。",
+ "apihelp-query+messagecollection-param-prop": "要取得的參數:\n;definition:訊息定義。\n;translation:目前翻譯(若不帶有 $1 字串,使用標籤來檢查舊有或損壞翻譯)。\n;tags:訊息標籤,像是可選用、已忽略和模糊翻譯。\n;properties:訊息參數,像是狀態、修訂、最後的翻譯者。可在訊息間變動。\n;revision:<span class=\"deprecated\">已棄用!</span>請改用 $2prop=properties。",
+ "apihelp-query+messagecollection-example-1": "支援語言清單",
+ "apihelp-query+messagecollection-example-2": "群組「group-Example」的非選用群組定義清單",
+ "apihelp-query+messagecollection-example-3": "用於群組「group-Example」,芬蘭語中帶標籤的選用群組清單",
+ "apihelp-query+messagecollection-example-4": "更多有關群組「group-Example」最新翻譯修訂的資訊",
+ "apihelp-query+messagegroups-description": "回傳有關訊息群組的資訊。\n\n請注意 uselang 參數會影響語言相依部份的輸出內容。",
+ "apihelp-query+messagegroups-summary": "回傳有關訊息群組的資訊。",
+ "apihelp-query+messagegroups-extended-description": "請注意 uselang 參數會影響語言相依部份的輸出內容。",
+ "apihelp-query+messagegroups-param-depth": "當使用樹狀格式,會限制到這樣多層級的深度。值 0 代表著不會顯示子群組。如果已達到限制,輸出內容會包含一個「groupcount」值,此代表著直系子組的數目。",
+ "apihelp-query+messagegroups-param-filter": "僅回傳符合一個或多個所提供輸入內容的帶 ID 訊息(不區分大小寫、以豎線符號分隔、* 萬用字元)。",
+ "apihelp-query+messagegroups-param-format": "樹狀格式訊息群組可存在於樹狀的多個位置裡。",
+ "apihelp-query+messagegroups-param-iconsize": "點陣化群組圖標首選尺寸大小。",
+ "apihelp-query+messagegroups-param-prop": "要取得的翻譯相關資訊:\n;id:包含群組的 ID。\n;label:包含群組的標籤。\n;description:包含群組的描述。\n;class:包含群組的類別名稱。\n;namespace:包含群組的命名空間。並非所有群組都屬於單一命名空間。\n;exists:包含自我估計的群組存有屬性。\n;icon:包含至群組圖標的 URL。\n;priority:包含的優先狀態,例如像是不建議。\n;prioritylangs:包含首選的語言。若未設定,則回傳 false。\n;priorityforce:包含的優先狀態 - 優先語言是否被強制設定。\n;workflowstates:包含群組訊息的工作流狀態。",
+ "apihelp-query+messagegroups-param-root": "當使用樹狀格式時,不要從所提供訊息群組起始的最高層級來開始,這必須是個集合訊息群組。當使用平面格式時僅會回傳指定群組。",
+ "apihelp-query+messagegroups-param-languageFilter": "僅返回可被所指定語言翻譯的訊息群組。",
+ "apihelp-query+messagegroups-example-1": "顯示訊息群組",
+ "apihelp-query+messagegroupstats-description": "查詢訊息群組統計。",
+ "apihelp-query+messagegroupstats-summary": "查詢訊息群組統計。",
+ "apihelp-query+messagegroupstats-param-group": "訊息群組 ID。",
+ "apihelp-query+messagegroupstats-param-suppresscomplete": "不顯示全部已翻譯的語言",
+ "apihelp-query+messagegroupstats-param-suppressempty": "不顯示全部未翻譯的語言",
+ "apihelp-query+messagegroupstats-example-1": "針對「page-Example」群組的翻譯完成度統計清單",
+ "apihelp-query+messagetranslations-description": "查詢單一訊息的所有翻譯。",
+ "apihelp-query+messagetranslations-summary": "查詢單一訊息的所有翻譯。",
+ "apihelp-query+messagetranslations-param-title": "已知訊息的完整標題。",
+ "apihelp-query+messagetranslations-example-1": "Wiki 裡用於「MediaWiki:January」的翻譯清單",
+ "apihelp-managemessagegroups-description": "在群組匯入期間,以新訊息或是現有訊息重新命名來添加",
+ "apihelp-managemessagegroups-summary": "在群組匯入期間,以新訊息或是現有訊息重新命名來添加",
+ "apihelp-managemessagegroups-param-groupId": "群組 ID",
+ "apihelp-managemessagegroups-param-renameMessageKey": "目標訊息鍵被重新命名",
+ "apihelp-managemessagegroups-param-messageKey": "更換訊息鍵",
+ "apihelp-managemessagegroups-param-operation": "要執行的操作。可能的值:rename / new",
+ "apihelp-managemessagegroups-param-changesetName": "更改設定名稱 - 預設/未留意/MediaWiki 其它。",
+ "apihelp-managemessagegroups-param-changesetModified": "變更集在上一次變動的 Unix 時間戳記。若變更集是在此 API 之後修改,會拋出錯誤資訊。",
+ "apihelp-managegroupsynchronizationcache-description": "訊息群組同步快取。",
+ "apihelp-managegroupsynchronizationcache-summary": "訊息群組同步快取。",
+ "apihelp-managegroupsynchronizationcache-param-operation": "要執行的操作。可能的值:resolve",
+ "apihelp-managegroupsynchronizationcache-param-title": "訊息標題被標記成已解決",
+ "apihelp-managegroupsynchronizationcache-param-group": "訊息已解決的群組 ID",
+ "apihelp-translatesandbox-description": "註冊並管理沙盒使用者。",
+ "apihelp-translatesandbox-summary": "註冊並管理沙盒使用者。",
+ "apihelp-translatesandbox-param-do": "要做什麼。",
+ "apihelp-translatesandbox-param-userid": "要管理的使用者 ID。0 用於創建。",
+ "apihelp-translatesandbox-param-username": "建立使用者時的使用者名稱。",
+ "apihelp-translatesandbox-param-password": "建立使用者時的密碼。",
+ "apihelp-translatesandbox-param-email": "建立使用者時發送電子郵件。",
+ "apihelp-translationaids-description": "查詢所有翻譯協助。",
+ "apihelp-translationaids-summary": "查詢所有翻譯協助。",
+ "apihelp-translationaids-param-title": "已知訊息的完整標題。",
+ "apihelp-translationaids-param-group": "訊息所屬於訊息群組。若為空則使用主群組。",
+ "apihelp-translationaids-param-prop": "要包含的翻譯助手。",
+ "apihelp-translationaids-example-1": "顯示 [[MediaWiki:January/fi]] 的協助",
+ "apihelp-translationreview-description": "標記翻譯為已審核。",
+ "apihelp-translationreview-summary": "標記翻譯為已審核。",
+ "apihelp-translationreview-param-revision": "要審查的修訂號碼。",
+ "apihelp-translationreview-example-1": "審查修訂 1",
+ "apihelp-translationstash-description": "添加翻譯至暫存區。",
+ "apihelp-translationstash-summary": "添加翻譯至暫存區。",
+ "apihelp-translationstash-param-subaction": "操作。",
+ "apihelp-translationstash-param-title": "翻譯單元頁面的標題。",
+ "apihelp-translationstash-param-translation": "由使用者所做出的翻譯。",
+ "apihelp-translationstash-param-metadata": "JSON 物件。",
+ "apihelp-translationstash-param-username": "選用的暫存區取得使用者。僅帶有特定權限的使用者可以執行此操作。",
+ "apihelp-translationstash-example-1": "添加翻譯到 [[MediaWiki:Jan/fi]] 的暫存區",
+ "apihelp-translationstash-example-2": "查詢暫存區",
+ "apihelp-ttmserver-description": "從翻譯記憶查詢建議。",
+ "apihelp-ttmserver-summary": "從翻譯記憶查詢建議。",
+ "apihelp-ttmserver-param-service": "可供使用的翻譯服務。",
+ "apihelp-ttmserver-param-sourcelanguage": "原始文字的語言代碼。",
+ "apihelp-ttmserver-param-targetlanguage": "建議的語言代碼。",
+ "apihelp-ttmserver-param-text": "用於尋找建議的文字。",
+ "apihelp-ttmserver-example-1": "取得將「Help」從英語翻譯成芬蘭語的建議",
+ "apihelp-searchtranslations-description": "搜尋翻譯。",
+ "apihelp-searchtranslations-summary": "搜尋翻譯。",
+ "apihelp-searchtranslations-param-service": "可供使用的翻譯服務。",
+ "apihelp-searchtranslations-param-query": "欲搜尋的字串。",
+ "apihelp-searchtranslations-param-sourcelanguage": "原始文字的語言碼。",
+ "apihelp-searchtranslations-param-language": "要搜尋字串的語言代碼。",
+ "apihelp-searchtranslations-param-group": "要搜尋字串的群組 ID。",
+ "apihelp-searchtranslations-param-filter": "訊息翻譯狀態篩選器。",
+ "apihelp-searchtranslations-param-match": "符合任何/所有搜尋文字。",
+ "apihelp-searchtranslations-param-case": "(不)區分大小寫搜尋。",
+ "apihelp-searchtranslations-param-offset": "翻譯偏差",
+ "apihelp-searchtranslations-param-limit": "結果的大小。",
+ "apihelp-searchtranslations-example-1": "顯示用於語言的翻譯。",
+ "apihelp-searchtranslations-example-2": "顯示在來源語言裡符合查詢的尚未翻譯訊息。",
+ "apihelp-translationcheck-description": "驗證提供的翻譯輸入內容是否符合所設置的訊息驗證要求。",
+ "apihelp-translationcheck-summary": "驗證翻譯。",
+ "apihelp-translationcheck-param-title": "帶有命名空間與語言代碼的頁面標題。",
+ "apihelp-translationcheck-param-translation": "要驗證的翻譯。",
+ "apihelp-translationstats-description": "取得與翻譯編輯、有效翻譯、新的使用者、翻譯審查與審查者相關的翻譯統計內容。",
+ "apihelp-translationstats-summary": "取得翻譯統計",
+ "apihelp-translationstats-param-count": "要求統計的類型",
+ "apihelp-translationstats-param-days": "要取得統計的天數",
+ "apihelp-translationstats-param-group": "要取得統計內容的群組清單。",
+ "apihelp-translationstats-param-language": "要取得統計內容的語言清單。",
+ "apihelp-translationstats-param-scale": "翻譯統計比例",
+ "apihelp-translationstats-param-start": "要取得翻譯統計的開始日期。預設為目前日期減去「<var>days</var>」。",
+ "apihelp-translationstats-example-1": "取得所有群組與語言在最近 30 天的編輯計數",
+ "apihelp-translationstats-example-2": "取得英語與法語在最近 30 天的編輯計數",
+ "apierror-translate-changeset-modified": "變更集已被作者用戶或程序給變更。因您的變更可能會覆蓋掉它們的變更,所以無法保存。請重新整理頁面來查看最新一次的變更內容。",
+ "apierror-translate-duplicateaggregategroup": "訊息群組已存在",
+ "apierror-translate-fuzzymessage": "不能審查模糊翻譯",
+ "apierror-translate-groupreviewdisabled": "未使用訊息群組審查。",
+ "apierror-translate-invalidaggregategroup": "無效集合訊息群組",
+ "apierror-translate-invalidaggregategroupname": "無效集合訊息群組名稱",
+ "apierror-translate-invalidgroup": "群組不存在或無效",
+ "apierror-translate-invalidstate": "請求的狀態無效。",
+ "apierror-translate-invalidlanguage": "語言代碼 $1 無效。",
+ "apierror-translate-invalidupdate": "無效更新",
+ "apierror-translate-language-disabled": "對$1的翻譯已停用。",
+ "apierror-translate-language-disabled-reason": "對$1的翻譯已停用:$2",
+ "apierror-translate-nodynamicgroups": "在此不支援動態訊息群組",
+ "apierror-translate-nomessagefortitle": "標題與可翻譯訊息不一致",
+ "apierror-translate-notranslationservices": "未設置開放翻譯服務。在此功能可使用前,Wiki 管理員需適當設定 <var>$wgTranslateTranslationServices</var>。",
+ "apierror-translate-owntranslation": "不能審核自己的翻譯",
+ "apierror-translate-sandboxdisabled": "未使用沙盒功能",
+ "apierror-translate-smg-nochanges": "沒有需要處理的更動。",
+ "apierror-translate-unknownmessage": "未知訊息",
+ "apierror-translate-invalid-changeset-name": "傳遞無效的變更集檔案名稱 - $1",
+ "apierror-translate-invalid-operation": "無效操作:$1。有效值 - $2。",
+ "apierror-translate-addition-key-invalid": "在來源語言的重新命名訊息清單裡找不到用於附加的傳遞訊息鍵。",
+ "apierror-translate-rename-msg-new": "僅有被重新命名的訊息可以添加成新訊息。",
+ "apierror-translate-rename-key-invalid": "在來源語言的更改清單裡找不到用於重新命名的傳遞訊息鍵。",
+ "apierror-translate-rename-state-invalid": "傳遞用於重新命名的訊息裡其中一個得重新添加,而另一個應刪除。目前狀態 - 添加:$1,刪除:$2。",
+ "apiwarn-translate-alreadyreviewedbyyou": "已由您標記為已審核",
+ "apiwarn-translate-language-disabled-source": "此群組的來源語言是$1。請選擇其它的語言來翻譯。",
+ "apierror-translate-operation-error": "當處理請求時發生錯誤。錯誤:$1",
+ "apihelp-translationentitysearch-summary": "搜尋訊息群組與訊息",
+ "apihelp-translationentitysearch-param-entitytype": "被查詢的實體類型",
+ "apihelp-translationentitysearch-param-query": "搜尋query",
+ "apihelp-translationentitysearch-param-limit": "搜尋結果數量上限"
+}
diff --git a/Translate/i18n/core/ab.json b/Translate/i18n/core/ab.json
new file mode 100644
index 00000000..24f72b48
--- /dev/null
+++ b/Translate/i18n/core/ab.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fraxinus.cs"
+ ]
+ },
+ "translate-documentation-language": "Аацҳамҭа документациа"
+}
diff --git a/Translate/i18n/core/abs.json b/Translate/i18n/core/abs.json
new file mode 100644
index 00000000..53e3d5db
--- /dev/null
+++ b/Translate/i18n/core/abs.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Anok kutai jang"
+ ]
+ },
+ "translate-documentation-language": "Dokumentasi pasang"
+}
diff --git a/Translate/i18n/core/ace.json b/Translate/i18n/core/ace.json
new file mode 100644
index 00000000..d06c143e
--- /dev/null
+++ b/Translate/i18n/core/ace.json
@@ -0,0 +1,44 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ayie7791",
+ "Rachmat.Wahidi",
+ "Rachmat04",
+ "Si Gam Acèh"
+ ]
+ },
+ "translate": "Teujeumah",
+ "translate-desc": "[[Special:Translate|Laman kusuih]] keu neuteujeumah MediaWiki ngön nyang la'én",
+ "translate-taction-translate": "Teujeumah",
+ "translate-taction-proofread": "Kalön",
+ "translate-taction-lstats": "Keunira bahsa",
+ "translate-taction-mstats": "Keunira kawan peusan",
+ "translate-taction-disabled": "Buet nyoe geupeumaté ban wiki nyoe.",
+ "translate-page-no-such-language": "Bahsa nyang neupiléh hana sah.",
+ "translate-page-no-such-group": "Kawan nyang neupiléh hana sah.",
+ "translate-page-disabled": "Teujeumah kawan peusan nyoe u bahsa nyoe ka geupeumaté. Dalèh:\n\n<em>$1</em>",
+ "translate-language-disabled": "Teujeumah u bahsa nyoe ka geupeumaté.",
+ "translate-page-settings-legend": "Atô",
+ "translate-page-group": "Kawan",
+ "translate-page-language": "Bahsa",
+ "translate-page-limit": "Ceuë",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|peusan|peusan}} saboh laman",
+ "translate-submit": "Cok",
+ "translate-page-navigation-legend": "Keumudoë",
+ "translate-page-showing": "Peleumah bandum peusan nibak $1 u $2 nibak $3.",
+ "translate-page-showing-all": "Peuleumah $1 {{PLURAL:$1|peusan|peusan}}.",
+ "translate-page-showing-none": "Hana peusan nyang jeuet tapeudeuh.",
+ "translate-next": "Laman u keue",
+ "translate-prev": "Laman u likôt",
+ "translate-page-description-legend": "Hareutoe bhah kawan nyoe",
+ "translate-page-edit": "peusaneut",
+ "translate-optional": "(teunamah)",
+ "translate-ignored": "(hana peuhiröe)",
+ "translate-edit-title": "Peusaneut \"$1\"",
+ "translate-edit-definition": "Hareutoe peusan",
+ "translate-edit-contribute": "peuneugöt",
+ "translate-edit-information": "Hareutoe bhah peusan ($1)",
+ "translate-manage-import-new": "Peusan barô $1",
+ "translate-documentation-language": "Dokumentasi peusan",
+ "tux-editor-message-tools-delete": "Sampôh"
+}
diff --git a/Translate/i18n/core/acm.json b/Translate/i18n/core/acm.json
new file mode 100644
index 00000000..4ef8ed34
--- /dev/null
+++ b/Translate/i18n/core/acm.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ahmedadeljaff"
+ ]
+ },
+ "translate-documentation-language": "وثق الرساله"
+}
diff --git a/Translate/i18n/core/ady-cyrl.json b/Translate/i18n/core/ady-cyrl.json
new file mode 100644
index 00000000..38f7eef0
--- /dev/null
+++ b/Translate/i18n/core/ady-cyrl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bedynokue.nart"
+ ]
+ },
+ "translate-documentation-language": "Тхыгъэм и къэбар"
+}
diff --git a/Translate/i18n/core/aeb-arab.json b/Translate/i18n/core/aeb-arab.json
new file mode 100644
index 00000000..2569f5e1
--- /dev/null
+++ b/Translate/i18n/core/aeb-arab.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Csisc"
+ ]
+ },
+ "tux-proofread-edit-label": "بدّل"
+}
diff --git a/Translate/i18n/core/aeb-latn.json b/Translate/i18n/core/aeb-latn.json
new file mode 100644
index 00000000..ae841e91
--- /dev/null
+++ b/Translate/i18n/core/aeb-latn.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Csisc",
+ "GeekEmad"
+ ]
+ },
+ "translate-documentation-language": "Id-dokümoñtesyoñ mtēģ il-mēssāj"
+}
diff --git a/Translate/i18n/core/af.json b/Translate/i18n/core/af.json
new file mode 100644
index 00000000..e0bad68e
--- /dev/null
+++ b/Translate/i18n/core/af.json
@@ -0,0 +1,302 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ansumang",
+ "Arnobarnard",
+ "Byeboer",
+ "Fwolff",
+ "Joris Darlington Quarshie",
+ "Naudefj",
+ "SPQRobin",
+ "පසිඳු කාවින්ද"
+ ]
+ },
+ "translate": "Vertaal",
+ "translate-desc": "[[Special:Translate|Spesiale bladsy]] om MediaWiki en meer te vertaal",
+ "translate-taction-translate": "Vertaal",
+ "translate-taction-proofread": "Proeflees",
+ "translate-taction-lstats": "Taalstatistieke",
+ "translate-taction-mstats": "Boodskapgroep-statistieke",
+ "translate-taction-export": "Eksporteer",
+ "translate-taction-disabled": "Die aksie is afgeskakel op hierdie wiki.",
+ "translate-page-no-such-language": "Gespesifiseerde taal is ongeldig.",
+ "translate-page-no-such-group": "Die gespesifiseerde groep bestaan nie.",
+ "translate-page-disabled": "Vertalings in die taal vir hierdie groep is gedeaktiveer. Rede:\n\n<em>$1</em>",
+ "translate-language-disabled": "Vertaling van die taal is gedeaktiveer.",
+ "translate-page-settings-legend": "Instellings",
+ "translate-page-group": "Groep",
+ "translate-page-language": "Taal",
+ "translate-page-limit": "Limiet",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|boodskap|boodskappe}} per bladsy",
+ "translate-submit": "Gaan haal",
+ "translate-page-navigation-legend": "Navigasie",
+ "translate-page-showing": "Wys boodskappe van $1 tot $2 uit $3.",
+ "translate-page-showing-all": "Wys $1 {{PLURAL:$1|boodskap|boodskappe}}.",
+ "translate-page-showing-none": "Geen boodskappe om te wys nie.",
+ "translate-next": "Volgende bladsy",
+ "translate-prev": "Vorige bladsy",
+ "translate-page-description-legend": "Inligting oor hierdie groep",
+ "translate-page-description-hasoptional-open": "Wys opsionele boodskappe.",
+ "translate-page-edit": "wysig",
+ "translate-optional": "(opsioneel)",
+ "translate-ignored": "(geïgnoreer)",
+ "translate-edit-title": "Wysig \"$1\"",
+ "translate-edit-definition": "Boodskap se definisie",
+ "translate-edit-contribute": "wysig",
+ "translate-edit-no-information": "''Die boodskap het geen dokumentasie nie.''\n''As u weet waar die boodskap gebruik word, kan u ander gebruikers help deur dokumentasie by te voeg.''",
+ "translate-edit-information": "Inligting oor boodskap ($1)",
+ "translate-edit-warnings": "Waarskuwings oor onvoltooide vertalings",
+ "translate-edit-tmmatch-source": "Bronteks vir vertaling: $1",
+ "translate-edit-tmmatch": "$1% ooreenkoms",
+ "translate-edit-nopermission": "U moet toestemming verkry alvorens u boodskappe kan vertaal.",
+ "translate-edit-askpermission": "Vra vir toestemming",
+ "translate-checks-parameters": "Die volgende {{PLURAL:$2|parameter word|parameters word}} nie gebruik nie:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "Die volgende {{PLURAL:$2|parameter|parameters}} is onbekend:\n<strong>$1</strong>",
+ "translate-checks-balance": "Daar is 'n onewe {{PLURAL:$2|aantal hakkies|aantal hakkies}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "Die volgende {{PLURAL:$2|verwysing is|verwysings is}} problematies:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "Die volgende {{PLURAL:$2|verwysing is weg|$2 verwysings is weg}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Die definisie bevat <nowiki>{{PLURAL:}}</nowiki>, maar die vertaling nie.",
+ "translate-checks-pagename": "Naamspasie het verander van die definisie",
+ "translate-checks-format": "Hierdie vertaling wyk af van die bronboodskap of het 'n ongeldige sintaks: $1",
+ "translate-checks-escape": "Die volgende ontsnapping {{PLURAL:$2|karakter|karakters}} kan toevallig wees:<strong>$1</strong>.{{MEERVOUD:$4|'n geldige ontsnapkarakter is|geldige ontsnapkarakter bevat:}} $3",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> het 'n ongeldige indeling.",
+ "translate-checks-fudforum-syntax": "Gebruik <nowiki>$1</nowiki> i.p.v. <nowiki>$2</nowiki> vir hierdie projek.",
+ "translate-pref-editassistlang": "Hulptale:",
+ "prefs-translate": "Vertalings opsies",
+ "translate-pref-editassistlang-help": "Komma-geskeide lys van taalkodes.\nVertaling van 'n boodskap in hierdie tale word vertoon wanneer u vertaal.\nDie versteklys van tale hang van u taal af.",
+ "translate-pref-editassistlang-bad": "Ongeldige taalkode in die lys:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Wysig via die vertaalkoppelvlak",
+ "right-translate-manage": "Bestuur boodskapgroepe",
+ "action-translate-manage": "bestuur boodskapgroepe",
+ "right-translate-import": "Vertalings van buite die stelsel importeer",
+ "action-translate-import": "Vertalings van buite die stelsel importeer",
+ "right-translate-messagereview": "Review vertalings",
+ "right-translate-groupreview": "Verander werkvloei-status van boodskapgroepe",
+ "translate-rc-translation-filter": "Filter vertalings:",
+ "translate-rc-translation-filter-no": "Doen niks nie",
+ "translate-rc-translation-filter-only": "Wys slegs vertalings",
+ "translate-rc-translation-filter-filter": "Filtreer vertalings uit",
+ "translate-rc-translation-filter-site": "Slegs veranderinge aan werfboodskappe",
+ "translationstats": "Vertaalstatistieke",
+ "translate-stats-edits": "Wysigings",
+ "translate-stats-users": "Vertalers",
+ "translate-stats-registrations": "Registrasies",
+ "translate-stats-reviews": "Beoordelings",
+ "translate-stats-reviewers": "Beoordelaars",
+ "translate-statsf-intro": "U kan eenvoudige statistiek vanaf hierdie vorm genereer.\nAlle waardes het hoër en laer limiete.",
+ "translate-statsf-options": "Grafiekopsies",
+ "translate-statsf-width": "Breedte in pixels:",
+ "translate-statsf-height": "Hoogte in pixels:",
+ "translate-statsf-days": "Periode in dae:",
+ "translate-statsf-start": "Begindatum:",
+ "translate-statsf-scale": "Granulariteit:",
+ "translate-statsf-scale-months": "Maande",
+ "translate-statsf-scale-weeks": "Weke",
+ "translate-statsf-scale-days": "Dae",
+ "translate-statsf-scale-hours": "Ure",
+ "translate-statsf-count": "Eenheid:",
+ "translate-statsf-count-edits": "Aantal wysigings",
+ "translate-statsf-count-users": "Aktiewe vertalers",
+ "translate-statsf-count-registrations": "Nuwe gebruikers",
+ "translate-statsf-count-reviews": "Gekontroleerde vertalings",
+ "translate-statsf-count-reviewers": "Beoordelaars",
+ "translate-statsf-language": "Kommageskeide lys van taalkodes:",
+ "translate-statsf-group": "Kommageskeide lys van groepkodes:",
+ "translate-statsf-submit": "Voorskou",
+ "translate-tag-page-desc": "Vertaling van die wikibladsy [[$2|$1]].",
+ "translate-sidebar-alltrans": "In ander tale",
+ "translations": "Alle vertalings",
+ "translations-summary": "Voer die naam van 'n boodskap in om alle beskikbare vertalings daarvan te sien.",
+ "translate-translations-no-message": "\"$1\" is nie 'n vertaalbare boodskap nie",
+ "translate-translations-none": "Daar is geen vertalings vir \"$1\"",
+ "translate-translations-count": "Daar is {{PLURAL:$1|een vertaling|$1 vertalings}}.",
+ "translate-translations-fieldset-title": "Boodskap",
+ "translate-translations-messagename": "Naam:",
+ "translate-translations-project": "Projek:",
+ "translate-translations-including-no-param": "Verskaf asseblief 'n geldige boodskapnaam as subbladsy-parameter",
+ "translate-translations-history-short": "g",
+ "languagestats": "Taalstatistieke",
+ "languagestats-summary": "Op hierdie bladsy word vertaalstatistieke vir alle boodskapgroepe van 'n taal weergegee.",
+ "languagestats-stats-for": "Vertaalstatistieke vir $1 ($2).",
+ "languagestats-recenttranslations": "onlangse vertalings",
+ "translate-langstats-incomplete": "Sommige statistieke op hierdie bladsy is onvolledig. Herlaai om meer volledige statistieke te kry.",
+ "translate-langstats-expand": "wys",
+ "translate-langstats-collapse": "versteek",
+ "translate-langstats-expandall": "wys alles",
+ "translate-langstats-collapseall": "versteek alles",
+ "translate-language-code": "Taalkode",
+ "translate-language-code-field-name": "Taalkode:",
+ "translate-suppress-complete": "Verberg volledig vertaalde boodskapgroepe",
+ "translate-ls-noempty": "Onderdruk heeltemal onvertaalde boodskapgroepe",
+ "translate-language": "Taal",
+ "translate-total": "Boodskappe",
+ "translate-untranslated": "Onvertaal",
+ "translate-percentage-complete": "Vertaald",
+ "translate-percentage-fuzzy": "Verouderd",
+ "translate-languagestats-overall": "Alle boodskapgroepe saam",
+ "translate-ls-submit": "Wys statistieke",
+ "translate-ls-column-group": "Boodskapgroep",
+ "translate-mgs-pagename": "Boodskap groep statistieke",
+ "translate-mgs-fieldset": "Wys voorkeure",
+ "translate-mgs-group": "Boodskapgroep:",
+ "translate-mgs-nocomplete": "Versteek volledig vertaalde tale",
+ "translate-mgs-noempty": "Versteek tale sonder enige vertalings",
+ "translate-mgs-submit": "Wys statistieke",
+ "translate-mgs-column-language": "Taal",
+ "translate-mgs-totals": "Alle tale saam",
+ "translate-mgs-invalid-group": "De opgegewe groep \"$1\" bestaan nie.",
+ "translate-mgs-nothing": "Niks om te wys vir die versoek statistieke nie.",
+ "supportedlanguages": "Ondersteunde tale",
+ "supportedlanguages-colorlegend": "Sleutel vir die kleure: laaste vertaling $1 dae gelede.",
+ "supportedlanguages-translators": "{{PLURAL:$2|Vertaler|Vertalers}}: $1",
+ "supportedlanguages-recenttranslations": "onlangse vertalings",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|taal|tale}} in totaal.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|wysiging|wysigings}} - laaste wysiging {{PLURAL:$3|gister|$3 dae gelede}}",
+ "translate-jssti-add": "Voeg by lys",
+ "managemessagegroups": "Beheer boodskapgroepe",
+ "translate-smg-notallowed": "U mag nie hierdie handeling uitvoer nie.",
+ "translate-smg-nochanges": "Daar is geen wysigings om te verwerk nie.",
+ "translate-smg-submit": "Dien wysigings vir verwerking in",
+ "translate-smg-left": "Inhoud in wiki",
+ "translate-smg-right": "Inkomende wysigings",
+ "translate-manage-import-diff": "Boodskap $1 | Handeling: $2",
+ "translate-manage-import-new": "Nuwe boodskap $1",
+ "translate-manage-import-deleted": "Verwyderde boodskap $1",
+ "translate-manage-action-import": "Importeer",
+ "translate-manage-action-conflict": "Importeer en merk as \"fuzzy\"",
+ "translate-manage-action-ignore": "Ignoreer",
+ "translate-manage-action-fuzzy": "Importeer en merk vertalings as \"fuzzy\"",
+ "translate-manage-nochanges": "Daar is geen veranderinge in die boodskapdefinisies vir hierdie groep nie.",
+ "translate-manage-nochanges-other": "Daar was geen wysigings vir die taal nie. Gebruik die onderstaande skakel om terug te keer na die groep se detail besonderhede.",
+ "translate-manage-inconsistent": "'n Teenstrydigheid is in die versoek bespeur.\nKontroleer die veranderinge en probeer weer.\nBesonderhede: $1.",
+ "translate-manage-toolong": "Die maksimum verwerkingstyd van $1 {{PLURAL:$1|sekonde|sekondes}} is oorskry.\nDien die opdrag asseblief weer in.",
+ "translate-manage-import-summary": "Besig met die importering van 'n nuwe weergawe vanuit 'n eksterne bron",
+ "translate-manage-import-ignore": "Slaan boodskap $1 oor.",
+ "translate-manage-conflict-summary": "Besig met die importering van 'n nuwe weergawe vanuit 'n eksterne bron.\nKontroleer die wysiging.",
+ "translate-manage-submit": "Voer uit",
+ "translate-manage-import-ok": "Nuwe weergawe van die bladsy $1 is gelaai.",
+ "translate-manage-import-done": "Klaar!",
+ "importtranslations": "Importeer vertalings",
+ "translate-import-from-local": "Lokale lêer oplaai:",
+ "translate-import-load": "Laai lêer",
+ "translate-import-err-dl-failed": "Kon nie die lêer gaan haal nie: $1",
+ "translate-import-err-ul-failed": "Die oplaai van die lêer was onsuksesvol",
+ "translate-import-err-invalid-title": "Die gespesifiseerde lêernaam <nowiki>$1</nowiki> is ongeldig.",
+ "translate-import-err-no-such-file": "Die lêer <nowiki>$1</nowiki> bestaan nie of is nie na die bediener opgelaai nie.",
+ "translate-import-err-stale-group": "Die boodskapgroep waaraan die lêer behoort bestaan ​​nie.",
+ "translate-import-err-no-headers": "Die lêer bevat nie goed gevormde gettext soos deur die \"Translate\"-uitbreiding vereis word nie.\nDit is nie moontlik om die groep en taal uit die lêer te bepaal nie.",
+ "translate-js-support-unsaved-warning": "U het ongestoorde vertalings.",
+ "translate-gs-pos": "Pos.",
+ "translate-gs-code": "Kode",
+ "translate-gs-continent": "Kontinent",
+ "translate-gs-speakers": "Sprekers",
+ "translate-gs-score": "Punte",
+ "translate-gs-multiple": "Meerdere",
+ "translate-gs-count": "Aantal",
+ "translate-gs-total": "Totaal",
+ "translate-gs-avgscore": "Gem. punte",
+ "translate-documentation-language": "Boodskapbeskrywing",
+ "translate-searchprofile": "Vertalings",
+ "translate-searchprofile-tooltip": "Soek in alle vertalings",
+ "translate-searchprofile-note": "Die [$1 vertalingssoekfunsie] bied meer opsies.",
+ "translate-search-languagefilter": "Filtreer volgens taal:",
+ "translate-search-nofilter": "Geen filter",
+ "log-name-translationreview": "Vertaling review log",
+ "log-description-translationreview": "Logboek met alle kontroles van vertalings en boodskapgroepe.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|het}} die vertaling $3 aanvaar",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|het}} die status van vertalings in die \"$4\" van $3 gewysig van \"$6\" na \"$7\"",
+ "group-translate-sandboxed": "Aspirant vertalers",
+ "group-translate-sandboxed-member": "{{GENDER:$1|aspirant vertaler}}",
+ "translate-workflow-state-": "(nie gesetel)",
+ "translate-workflowstatus": "Status: $1",
+ "translate-workflow-set-doing": "Besig om te stel...",
+ "translate-stats-workflow": "Status",
+ "translate-dynagroup-recent-label": "onlangse vertalings",
+ "translate-dynagroup-additions-label": "Onlangse toevoegings",
+ "translate-dynagroup-additions-desc": "Hierdie boodskapgroep wys nuwe en gewysigde boodskappe:",
+ "translate-msggroupselector-projects": "Boodskapgroep",
+ "translate-msggroupselector-search-placeholder": "Soek groepe",
+ "translate-msggroupselector-search-all": "Alle",
+ "translate-msggroupselector-search-recent": "Onlangs",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|subgroep|subgroepe}}",
+ "tux-languageselector": "Vertaal na",
+ "tux-tab-all": "Alle",
+ "tux-tab-untranslated": "Onvertaald",
+ "tux-tab-outdated": "Verouderd",
+ "tux-tab-translated": "Vertaald",
+ "tux-tab-unproofread": "Ongekontroleerd",
+ "tux-edit": "Wysig",
+ "tux-status-optional": "Opsioneel",
+ "tux-status-fuzzy": "Verouderd",
+ "tux-status-proofread": "Gekontroleerd",
+ "tux-status-translated": "Vertaald",
+ "tux-status-saving": "Stoor...",
+ "tux-status-unsaved": "Ongestoor",
+ "tux-editor-paste-original-button-label": "Bronteks invoeg",
+ "tux-editor-discard-changes-button-label": "Kanselleer veranderings",
+ "tux-editor-save-button-label": "Stoor vertaling",
+ "tux-editor-skip-button-label": "Slaan oor na volgende",
+ "tux-editor-cancel-button-label": "Kanselleer",
+ "tux-editor-confirm-button-label": "Bevestig vertaling",
+ "tux-editor-shortcut-info": "Druk \"$1\" om te stoor of \"$2\" om na die volgende boodskap te gaan",
+ "tux-editor-edit-desc": "Wysig beskrywing",
+ "tux-editor-add-desc": "Voeg beskrywing by",
+ "tux-editor-suggestions-title": "Voorstelle",
+ "tux-editor-in-other-languages": "In ander tale",
+ "tux-editor-need-more-help": "Meer hulp nodig?",
+ "tux-editor-ask-help": "Vra vir meer inligting",
+ "tux-editor-tm-match": "$1% ooreenkoms",
+ "tux-notices-more": "{{PLURAL:$1|$1 meer}}",
+ "tux-notices-hide": "versteek",
+ "tux-editor-save-failed": "Die stoor van die vertaling het gefaal: $1",
+ "tux-editor-n-uses": "{{PLURAL:$1|Een|$1}} keer gebruik",
+ "tux-editor-message-desc-more": "Wys meer",
+ "tux-editor-message-desc-less": "Wys minder",
+ "tux-editor-clear-translated": "Versteek vertalings",
+ "tux-editor-proofreading-mode": "Proeflees",
+ "tux-editor-translate-mode": "Lys",
+ "tux-editor-proofreading-hide-own-translations": "Versteek u vertalings",
+ "tux-editor-proofreading-show-own-translations": "Wys u vertalings",
+ "tux-proofread-action-tooltip": "Aanvaar vertaling",
+ "tux-proofread-edit-label": "Wysig",
+ "tux-editor-page-mode": "Bladsy",
+ "tux-editor-outdated-notice": "Die vertaling moet moontlik bygewerk word.",
+ "tux-editor-outdated-notice-diff-link": "Wys verskille",
+ "tux-editor-doc-editor-placeholder": "Boodskapbeskrywing",
+ "tux-editor-doc-editor-save": "Stoor dokumentatsie",
+ "tux-editor-doc-editor-cancel": "Kanselleer",
+ "tux-messagetable-more-messages": "Nog {{PLURAL:$1|een boodskap|$1 boodskappe}}",
+ "tux-messagetable-loading-messages": "Besig met laai van {{PLURAL:$1|boodskap|boodskappe}}...",
+ "tux-message-filter-placeholder": "Filtreer lys",
+ "tux-message-filter-result": "{{PLURAL:$1|Een resultaat|$1 resultate}} gevind vir \"$2\"",
+ "tux-message-filter-advanced-button": "Uitgebreide soektog",
+ "tux-message-filter-optional-messages-label": "Opsionele boodskappe",
+ "tux-proofread-translated-by-self": "Deur u vertaal",
+ "tux-empty-list-all": "Die boodskapgroep is leeg",
+ "tux-empty-list-all-guide": "Kies 'n ander boodskapgroep om te vertaal",
+ "tux-translate-page-no-such-group": "'''Die opgegewe groep bestaan nie.''' Kies 'n ander boodskapgroep.",
+ "tux-empty-list-translated": "Geen vertaalde boodskappe nie",
+ "tux-empty-list-translated-guide": "U kan help vertaal",
+ "tux-empty-list-translated-action": "Vertaal",
+ "tux-empty-no-messages-to-display": "Daar is geen boodskappe om te wys nie.",
+ "tux-empty-there-are-optional": "Daar is opsionele boodskappe wat nie gelys is nie",
+ "tux-empty-show-optional-messages": "Wys opsionele boodskappe",
+ "tux-empty-no-outdated-messages": "Geen verouderde boodskappe nie",
+ "tux-empty-nothing-to-proofread": "Daar is niks om te proeflees nie",
+ "tux-empty-you-can-help-providing": "U kan met die vertaling help",
+ "tux-empty-nothing-new-to-proofread": "Daar is niks nuuts om te proeflees nie",
+ "tux-empty-you-can-review-already-proofread": "U kan die vertalings wat ander gebruikers geproeflees het kontroleer.",
+ "tux-empty-list-other": "Niks om te vertaal nie",
+ "tux-empty-list-other-action": "Proeflees vertalings",
+ "tux-empty-list-other-link": "Wys alle boodskappe",
+ "tux-editor-close-tooltip": "Sluit",
+ "tux-editor-expand-tooltip": "Vou oop",
+ "tux-editor-collapse-tooltip": "Vou toe",
+ "tux-editor-message-tools-history": "Geskiedenis",
+ "tux-editor-message-tools-translations": "Alle vertalings",
+ "tux-editor-loading": "Besig om te laai...",
+ "translate-search-more-languages-info": "Nog $1 {{PLURAL:$1|taal|tale}}",
+ "translate-statsbar-tooltip": "$1% vertaal, $2% geproeflees",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% vertaal, $2% geproeflees, $3% verouderd",
+ "translate-search-more-groups-info": "nog $1 groep{{PLURAL:$1||e}}"
+}
diff --git a/Translate/i18n/core/aln.json b/Translate/i18n/core/aln.json
new file mode 100644
index 00000000..4a67e5ba
--- /dev/null
+++ b/Translate/i18n/core/aln.json
@@ -0,0 +1,58 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mdupont"
+ ]
+ },
+ "translate-page-no-such-language": "Gjuha e specifikuara ishte i pavlefshëm.",
+ "translate-page-no-such-group": "Grupi specifikuara ishte i pavlefshëm.",
+ "translate-page-disabled": "Përkthime të kësaj gjuhe në këtë grup kanë qenë të paaftë. Reason:<em>$1</em>",
+ "translate-page-settings-legend": "Paneli i punëve",
+ "translate-page-group": "Grup",
+ "translate-page-language": "Gjuhë",
+ "translate-page-limit": "Limit",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|mesazh|mesazhe}} për faqe",
+ "translate-submit": "Lëshoj",
+ "translate-page-navigation-legend": "Navigation",
+ "translate-page-showing": "Duke treguar mesazhe nga $1 tek $2 prej $3.",
+ "translate-page-showing-all": "Showing $1 {{PLURAL:$1|mesazh|mesazhe}}.",
+ "translate-page-showing-none": "Nuk ka mesazhe për të treguar.",
+ "translate-next": "Faqja tjeter",
+ "translate-prev": "Faqja e mëparshme",
+ "translate-page-description-legend": "Informata për grupin e",
+ "translate-page-edit": "redaktoj",
+ "translate-optional": "(Optional)",
+ "translate-ignored": "(Injorohen)",
+ "translate-edit-definition": "përkufizim Mesazh",
+ "translate-edit-contribute": "kontribuoj",
+ "translate-edit-no-information": "''Ky mesazh nuk ka asnjë dokumentacion. Nëse ju e dini se ku apo se si ky mesazh është përdorur, ju mund të ndihmoni përkthyes të tjerë duke dokumentacionin në këtë mesazh.''",
+ "translate-edit-information": "Informacion rreth mesazh \"$2\" ($1)",
+ "translate-edit-warnings": "Paralajmërimet për përkthime të plota",
+ "translate-edit-tmmatch": "ndeshje $1%",
+ "translate-manage-import-diff": "Mesazhi $1 | Veprimi: $2",
+ "translate-manage-import-new": "mesazh i ri $1",
+ "translate-manage-import-deleted": "Deleted mesazh $1",
+ "translate-manage-action-import": "Import",
+ "translate-manage-action-conflict": "Import dhe fuzzy",
+ "translate-manage-action-ignore": "Shpërfill",
+ "translate-manage-action-fuzzy": "Import dhe fuzzy përkthime",
+ "translate-manage-nochanges": "Nuk ka ndryshime në përkufizimet mesazh për këtë grup.",
+ "translate-manage-nochanges-other": "Nuk ka pasur ndryshime për këtë gjuhë. Përdorni lidhjen më poshtë për të parë detajet e kthimit të grupit.",
+ "translate-manage-inconsistent": "mospërputhje zbuluar në kërkesë. Ju lutem kontrolloni për ndryshime dhe të provoni përsëri. Details: $1.",
+ "translate-manage-toolong": "Përpunimit kohë maksimale prej $1 {{PLURAL:$1|sekonda|dytë}} tejkalohen. Ju lutemi të rikthejë formën për të vazhduar të përpunimit.",
+ "translate-manage-import-summary": "Importimi i një version të ri nga burimet e jashtme",
+ "translate-manage-import-ignore": "Skipping mesazh $1.",
+ "translate-manage-conflict-summary": "Importimi i një version të ri nga burimi i jashtëm. Ju lutem kontrolloni.",
+ "translate-manage-submit": "Kryej",
+ "translate-manage-intro-other": "Më poshtë është lista e ndryshimeve të përkthimit në gjuhën e $1. Ju lutemi të shqyrtuar ndryshimet dhe të zgjidhni një veprim që ju doni të bëni për çdo përkthim. Nëse ju vendosni të injorojë ndryshime, ata do të kapërcehet në eksportin e ardhshme.",
+ "translate-manage-import-ok": "version i importuar i ri i faqes $1.",
+ "translate-manage-import-done": "Të gjitha të bërë!",
+ "importtranslations": "Përkthime Import",
+ "translate-import-from-local": "upload lokale file:",
+ "translate-import-load": "Ngarko foto",
+ "translate-import-err-dl-failed": "Në pamundësi për të shkoj të marr file: $1",
+ "translate-import-err-ul-failed": "File upload nuk ishte i suksesshëm",
+ "translate-import-err-invalid-title": "Me kusht që emri i file <nowiki> $1 </nowiki> ishte e pavlefshme.",
+ "translate-import-err-no-such-file": "Skedar <nowiki> $1 </nowiki> nuk ekziston ose nuk ka qenë i ngarkuar në nivel lokal.",
+ "translate-import-err-no-headers": "File nuk është formuar edhe një fotografi gettext në extension format Translate: Në pamundësi për të përcaktuar grupin e gjuhës nga headers file."
+}
diff --git a/Translate/i18n/core/alt.json b/Translate/i18n/core/alt.json
new file mode 100644
index 00000000..4ead02e6
--- /dev/null
+++ b/Translate/i18n/core/alt.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Батыр Комдошев"
+ ]
+ },
+ "languagestats": "Тилдиҥ статистиказы",
+ "translate-documentation-language": "Јетирӱлердиҥ документациязы"
+}
diff --git a/Translate/i18n/core/am.json b/Translate/i18n/core/am.json
new file mode 100644
index 00000000..77773b89
--- /dev/null
+++ b/Translate/i18n/core/am.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "BaRaN6161 TURK",
+ "Codex Sinaiticus",
+ "Elfalem"
+ ]
+ },
+ "translate": "ማስተርጐሚያ",
+ "translate-taction-translate": "ተርጉም",
+ "translate-page-settings-legend": "ምርጫዎች",
+ "translate-page-group": "ስብስባ",
+ "translate-page-language": "ቋንቋ",
+ "translate-page-limit": "ውሳኔ",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|መልዕክት|መልዕክት}} በየገጹ",
+ "translate-submit": "ይታይ",
+ "translate-page-showing-all": "$1 {{PLURAL:$1|መልዕክት ይታያል|መልዕክቶች ይታያሉ}}።",
+ "translate-next": "የሚቀጥለው ገጽ",
+ "translate-page-edit": "አርም",
+ "translate-edit-definition": "የመልዕክቱ ትርጉም",
+ "translate-edit-contribute": "ለመሣተፍ",
+ "translate-edit-no-information": "''ይኸው መልእክት ምንም መረጃ የለውም።\nመልዕክቱ በየት ወይም እንዴት እንደሚጠቀም ዕውቀት ካለዎ፣ መረጃ በመጨምር ሌሎች አስተርጓሚዎች ሊረዱ ይችላሉ።''",
+ "translate-edit-information": "መረጃ ስለዚሁ መልእክት ($1)",
+ "translate-sidebar-alltrans": "ይኸው መልዕክት በሌሎች ልሳናት",
+ "translate-language": "ቋንቋ"
+}
diff --git a/Translate/i18n/core/ami.json b/Translate/i18n/core/ami.json
new file mode 100644
index 00000000..ed16b531
--- /dev/null
+++ b/Translate/i18n/core/ami.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "Vickylin77s"
+ ]
+ },
+ "translate-documentation-language": "pitahapinangan to lihaf a codad"
+}
diff --git a/Translate/i18n/core/an.json b/Translate/i18n/core/an.json
new file mode 100644
index 00000000..786a573a
--- /dev/null
+++ b/Translate/i18n/core/an.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Juanpabl",
+ "Willtron"
+ ]
+ },
+ "translate": "Traducir",
+ "translate-page-no-such-language": "O codigo de idioma furnito no ye valido",
+ "translate-page-no-such-group": "A colla de mensaches especificata no ye correuta.",
+ "translate-page-settings-legend": "Achustes",
+ "translate-page-group": "Colla",
+ "translate-page-language": "Luenga",
+ "translate-page-limit": "Limite",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|mensache|mensaches}} por pachina",
+ "translate-submit": "Ir a escar-los",
+ "translate-page-navigation-legend": "Navego",
+ "translate-page-showing": "Amostrando os mensaches $1 a $2 d'un total de $3.",
+ "translate-page-showing-all": "Amostrando $1 {{PLURAL:$1|mensache|mensaches}}.",
+ "translate-page-showing-none": "No bi ha garra mensache ta amostrar.",
+ "translate-next": "Pachina siguient",
+ "translate-prev": "Pachina anterior",
+ "translate-page-description-legend": "Información sobre a colla de mensaches",
+ "translate-page-edit": "editar",
+ "translate-optional": "(opcional)",
+ "translate-ignored": "(no considerato)",
+ "translate-translations-fieldset-title": "Mensache",
+ "translate-documentation-language": "Documentación d'o mensache"
+}
diff --git a/Translate/i18n/core/ang.json b/Translate/i18n/core/ang.json
new file mode 100644
index 00000000..d01e5bdf
--- /dev/null
+++ b/Translate/i18n/core/ang.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gott wisst",
+ "Heahwrita"
+ ]
+ },
+ "translate-documentation-language": "Ærendgewrita amearcung"
+}
diff --git a/Translate/i18n/core/ann.json b/Translate/i18n/core/ann.json
new file mode 100644
index 00000000..865b45b4
--- /dev/null
+++ b/Translate/i18n/core/ann.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Katelem"
+ ]
+ },
+ "translate-checks-replacement": "Sa $2 kpan̄asi $1"
+}
diff --git a/Translate/i18n/core/anp.json b/Translate/i18n/core/anp.json
new file mode 100644
index 00000000..efb62c3f
--- /dev/null
+++ b/Translate/i18n/core/anp.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Angpradesh"
+ ]
+ },
+ "translate-documentation-language": "सन्देश दस्तावेज़ीकरण"
+}
diff --git a/Translate/i18n/core/ar.json b/Translate/i18n/core/ar.json
new file mode 100644
index 00000000..eefd8713
--- /dev/null
+++ b/Translate/i18n/core/ar.json
@@ -0,0 +1,404 @@
+{
+ "@metadata": {
+ "authors": [
+ "Abanima",
+ "Alnokta",
+ "Asma",
+ "BAB ZAA",
+ "Basharh",
+ "Gagnabil",
+ "Hhaboh162002",
+ "Maroen1990",
+ "Meno25",
+ "Michel Bakni",
+ "Mido",
+ "Mr. Ibrahem",
+ "OsamaK",
+ "Ouda",
+ "Tala Ali",
+ "ترجمان05",
+ "ديفيد",
+ "روخو",
+ "زكريا",
+ "لطرش أحمد الهاشمي",
+ "لطرش احمد الهاشمي",
+ "محمد أحمد عبد الفتاح"
+ ]
+ },
+ "translate": "ترجمة",
+ "translate-extensionname": "ترجمة",
+ "translate-desc": "[[Special:Translate|صفحة خاصة]] لترجمة ميدياويكي وما بعده",
+ "translate-fuzzybot-desc": "هذا حساب نظام خاص يستخدمه [https://www.mediawiki.org/wiki/Extension:Translate امتداد ترجمة] ميدياويكي ومستخدم للحفاظ على الترجمات،\nهذا الحساب جزء من برنامج ميدياويكي وليس مملوك لأي مستخدم.",
+ "translate-taskui-export-to-file": "صدر في صيغة أصلية",
+ "translate-taskui-export-as-po": "تصدير للترجمة بدون إنترنت",
+ "translate-taction-translate": "ترجم",
+ "translate-taction-proofread": "راجع",
+ "translate-taction-lstats": "إحصاءات اللغة",
+ "translate-taction-mstats": "إحصاءات مجموعة الرسائل",
+ "translate-taction-export": "صدّر",
+ "translate-taction-disabled": "هذا التصرف معطل على هذا الويكي.",
+ "translate-page-no-such-language": "لم تكن اللغة المحددة صحيحة.",
+ "translate-page-no-such-group": "المجموعة المحددة غير صحيحة.",
+ "translate-page-disabled": "الترجمات إلى هذه اللغة في هذه المجموعة تم تعطيلها. السبب:\n\n<em>$1</em>",
+ "translate-language-disabled": "الترجمات إلى هذه اللغة غير مفعلة.",
+ "translate-page-settings-legend": "الإعدادات",
+ "translate-page-group": "المجموعة",
+ "translate-page-language": "اللغة",
+ "translate-page-limit": "الحد",
+ "translate-page-limit-option": "{{PLURAL:$1||رسالة واحدة|رسالتان|$1 رسالات|$1 رسالة}} للصفحة",
+ "translate-submit": "اجلب",
+ "translate-page-navigation-legend": "التصفح",
+ "translate-page-showing": "عرض الرسائل من $1 إلى $2 ل $3.",
+ "translate-page-showing-all": "عرض {{PLURAL:$1||رسالة واحدة|رسالتين|$1 رسائل|$1 رسالة}}.",
+ "translate-page-showing-none": "لا رسائل للعرض.",
+ "translate-next": "الصفحة التالية",
+ "translate-prev": "الصفحة السابقة",
+ "translate-page-description-legend": "معلومات حول المجموعة",
+ "translate-page-description-hasoptional": "مجموعة الرسائل هذه تحتوي على رسائل اختيارية.\n\nيجب أن تترجم الرسائل الاختيارية فقط حينما تكون لغتك لها متطلبات خاصة\n\nمثل عدم استخدام مسافات أو الترجمة الحرفية لأسماء العلم. $1",
+ "translate-page-description-hasoptional-open": "إظهار الرسائل الاختيارية.",
+ "translate-page-edit": "عدل",
+ "translate-optional": "(اختياري)",
+ "translate-ignored": "(متجاهل)",
+ "translate-edit-title": "عدل \"$1\"",
+ "translate-edit-definition": "تعريف الرسالة",
+ "translate-edit-contribute": "ساهم",
+ "translate-edit-no-information": "<em>ليس لهذه الرسالة توثيق.\nإذا كنت تعرف أين أو كيف تستخدم هذه الرسالة، يمكنك مساعدة المترجمين الآخرين بإضافة توثيق إلى هذه الرسالة.</em>",
+ "translate-edit-information": "معلومات عن الرسالة ($1)",
+ "translate-edit-warnings": "التحذيرات الخاصة بالترجمات غير المكتملة",
+ "translate-edit-tmmatch-source": "نص المصدر للترجمة: $1",
+ "translate-edit-tmmatch": "$1% مطابقة",
+ "translate-edit-nopermission": "تحتاج صلاحيات الترجمة لترجمة الرسائل.",
+ "translate-edit-askpermission": "احصل على الإذن",
+ "exporttranslations": "تصدير الترجمات",
+ "translate-export-form-format": "الصيغة",
+ "translate-export-invalid-format": "من فضلك حدد صيغة صحيحة.",
+ "translate-export-not-supported": "تصدير الترجمات غير مدعوم.",
+ "translate-export-format-notsupported": "صيغة التصدير المحددة لا تدعمها مجموعة الرسائل.",
+ "translate-checks-parameters": "{{PLURAL:$2||المحدد التالي غير مستخدم|المحددان التاليان غير مستخدمان|المحددات التالية غير مستخدمة}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2||المحدد التالي غير معروف|المحددان التاليان غير معروفان|المحددات التالية غير معروفة}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "يوجد عدد غير زوجي من {{PLURAL:$2|الأقواس}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2||الوصلة التالية|الوصلتان التاليتان|ال$2 وصلات التالية|ال$2 وصلة التالية}} بها مشاكل:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2||الوصلة التالية مفقودة|الوصلتان التاليتان مفقودتان|ال$2 وصلات التالية مفقودة|ال$2 وصلة التالية مفقودة}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "التعريف يستخدم <nowiki>{{PLURAL:}}</nowiki> لكن الترجمة لا.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> تم إعطاؤه {{PLURAL:$1|استمارة واحدة|$1 استمارات}} لكن {{PLURAL:$2|فقط استمارة واحدة|$2 استمارات}} مدعومة (باستثناء استمارات 0= و 1=).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> لديها استمارات مزدوجة في النهاية. <nowiki>{{PLURAL:$1|sheep|sheep}}</nowiki> ينبغي أن تتم كتابتها ك <nowiki>{{PLURAL:$1|sheep}}</nowiki>.",
+ "translate-checks-gettext-plural-missing": "يجب أن تحتوي هذه الترجمة على <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-unsupported": "هذه الرسالة لا تدعم <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-count": "<nowiki>{{PLURAL:GETTEXT|}}</nowiki> يقبل بالضبط $1 {{PLURAL:$1|صيغة الجمع|صيغ الجمع}}، حاليا $2 {{PLURAL:$2|صيغة|صيغ}} جمع معطاة.",
+ "translate-checks-smartformat-plural-missing": "يجب أن تحتوي هذه الترجمة على متغير $1.",
+ "translate-checks-smartformat-plural-unsupported": "هذه الرسالة لا تدعم صيغة الجمع على المتغير $1.",
+ "translate-checks-smartformat-plural-count": "عدد غير صحيح من أشكال الجمع في <strong>$3</strong>، يجب أن تحتوي على $1 {{PLURAL:$1|صيغة|صيغ}} جمع، حاليا توجد $2 {{PLURAL:$2|صيغة|صيغ}} جمع معطاه.",
+ "translate-checks-unicode-plural-missing": "يجب أن تحتوي هذه الترجمة على <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-unsupported": "هذه الرسالة لا تدعم <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-invalid": "يجب أن تكون أشكال الجمع بصيغة $1، هذه الترجمة تحتوي على $2.",
+ "translate-checks-pagename": "النطاق تغير من التعريف",
+ "translate-checks-format": "هذه الترجمة لا تتبع التعريف أو تحتوي على صياغة خاطئة: $1",
+ "translate-checks-escape": "{{PLURAL:$2|الحرف|الحروف}} التالية ربما تكون حدثت بالصدفة: <strong>$1</strong>. {{PLURAL:$4|حرف الهروب الصحيح هو|حروف الهروب الصحيحة تتضمن:}} $3.",
+ "translate-checks-parametersnotequal": "عدد المتغيرات هو {{PLURAL:$1|$1}}؛ ينبغي أن يكون {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> صيغته غير صحيحة.",
+ "translate-checks-fudforum-syntax": "استخدم <nowiki>$1</nowiki> بدلًا من <nowiki>$2</nowiki> في هذا المشروع.",
+ "translate-checks-newline-missing-start": "هناك {{PLURAL:$1|سطر جديد يفتقد|سطور جديدة تفتقد}} $1 {{PLURAL:$1|حرف|أحرف}} في بداية الترجمة.",
+ "translate-checks-newline-missing-end": "هناك {{PLURAL:$1|سطر جديد يفتقد|سطور جديدة تفتقد}} $1 {{PLURAL:$1|حرف|أحرف}} في نهاية الترجمة.",
+ "translate-checks-newline-extra-start": "هناك {{PLURAL:$1|سطر إضافي يفتقد|سطور إضافية تفتقد}} $1 {{PLURAL:$1|حرف|أحرف}} في بداية الترجمة.",
+ "translate-checks-newline-extra-end": "هناك {{PLURAL:$1|سطر إضافي يفتقد|سطور إضافية تفتقد}} $1 {{PLURAL:$1|حرف|أحرف}} في نهاية الترجمة.",
+ "translate-checks-value-not-present": "يجب أن تكون الترجمة مساوية {{PLURAL:$1|1=|لإحدى القيم التالية:}} $1.",
+ "translate-pref-editassistlang": "لغات المساعدة:",
+ "prefs-translate": "خيارات الترجمة",
+ "translate-pref-editassistlang-help": "قائمة برموز اللغات مفصولة بفواصل.\nتُعرض ترجمة الرسالة بهذه اللغات عندما تترجم.\nقائمة اللغات المبدئية تعتمد على لغتك.",
+ "translate-pref-editassistlang-bad": "رمز لغة غير صالح في القائمة:\n<nowiki>$1</nowiki>.",
+ "right-translate": "التعديل باستخدام واجهة الترجمة",
+ "action-translate": "التعديل باستخدام واجهة الترجمة",
+ "right-translate-manage": "إدارة مجموعات الرسائل",
+ "action-translate-manage": "إدارة مجموعات الرسائل",
+ "right-translate-import": "استيراد الترجمات من الخارج",
+ "action-translate-import": "استيراد الترجمات من الخارج",
+ "right-translate-messagereview": "مراجعة الترجمات",
+ "action-translate-messagereview": "مراجعة الترجمات",
+ "right-translate-groupreview": "غير حالة العمل لمجموعات الرسائل",
+ "action-translate-groupreview": "غير حالة العمل لمجموعات الرسائل",
+ "translate-rcfilters-translations": "ترجمات",
+ "translate-rcfilters-translations-only-label": "ترجمات",
+ "translate-rcfilters-translations-only-desc": "غيره إلى الصفحات المترجمة.",
+ "translate-rcfilters-translations-filter-label": "لا ترجمات",
+ "translate-rcfilters-translations-filter-desc": "كافة التغييرات التي ليست ترجمات.",
+ "translate-rcfilters-translations-site-label": "رسائل الموقع",
+ "translate-rcfilters-translations-site-desc": "تخصيص رسائل الموقع داخل اسم نطاق ميدياويكي.",
+ "translate-rc-translation-filter": "رشّح الترجمات:",
+ "translate-rc-translation-filter-no": "لا تفعل شيئا",
+ "translate-rc-translation-filter-only": "اعرض الترجمات فقط",
+ "translate-rc-translation-filter-filter": "أزل الترجمات",
+ "translate-rc-translation-filter-site": "التغييرات لرسائل الموقع فقط",
+ "translationstats": "إحصاءات الترجمة",
+ "translate-stats-edits": "التعديلات",
+ "translate-stats-users": "المترجمون",
+ "translate-stats-registrations": "التسجيلات",
+ "translate-stats-reviews": "المراجعات",
+ "translate-stats-reviewers": "المراجعون",
+ "translate-statsf-intro": "يمكنك توليد إحصاءات بسيطة مستخدما هذا النموذج.\nكل القيم لها حدود قصوى ودنيا.",
+ "translate-statsf-options": "خيارات الرسم البياني",
+ "translate-statsf-width": "العرض بالبكسل:",
+ "translate-statsf-height": "الارتفاع بالبكسل:",
+ "translate-statsf-days": "فترة زمنية باليوم:",
+ "translate-statsf-start": "تاريخ البداية:",
+ "translate-statsf-scale": "التدريج:",
+ "translate-statsf-scale-months": "أشهر",
+ "translate-statsf-scale-weeks": "أسابيع",
+ "translate-statsf-scale-days": "أيام",
+ "translate-statsf-scale-hours": "ساعات",
+ "translate-statsf-count": "قياس:",
+ "translate-statsf-count-edits": "عدد التعديلات",
+ "translate-statsf-count-users": "المترجمون النشطون",
+ "translate-statsf-count-registrations": "مستخدمون جدد",
+ "translate-statsf-count-reviews": "مراجعات الترجمة",
+ "translate-statsf-count-reviewers": "المراجعون",
+ "translate-statsf-language": "قائمة بأكواد اللغات مفصولة بفاصلة:",
+ "translate-statsf-group": "قائمة بأكواد المجموعات مفصولة بفاصلة:",
+ "translate-statsf-submit": "عرض مسبق",
+ "translate-tag-page-desc": "ترجمة صفحة الويكي [[$2|$1]] من $3 ($4).",
+ "translate-sidebar-alltrans": "بلغات أخرى",
+ "translations": "كل الترجمات",
+ "translations-summary": "أدخل اسم رسالة أسفله لعرض كل الترجمات المتوفرة.",
+ "translate-translations-no-message": "\"$1\" ليست رسالة قابلة للترجمة",
+ "translate-translations-none": "لا يوجد ترجمات ل\"$1\"",
+ "translate-translations-count": "عثر على {{PLURAL:$1|ترجمة واحدة|$1 ترجمة}}.",
+ "translate-translations-fieldset-title": "الرسالة",
+ "translate-translations-messagename": "الاسم:",
+ "translate-translations-project": "المشروع:",
+ "translate-translations-including-no-param": "من فضلك حدد مفتاح رسالة صحيح في متغير الصفحة الفرعية",
+ "translate-translations-history-short": "ت",
+ "languagestats": "إحصاءات اللغة",
+ "languagestats-summary": "هذه الصفحة تعرض إحصاءات الترجمة لكل مجموعات الرسائل للغة.",
+ "messagegroupstats-summary": "تظهر هذه الصفحة إحصاءات مجموعة الرسائل.",
+ "languagestats-stats-for": "إحصاءات الترجمة للغة $1 ($2).",
+ "languagestats-recenttranslations": "ترجمات حديثة",
+ "translate-langstats-incomplete": "بعض الإحصاءات الموجودة على هذه الصفحة غير مكتملة. يرجى إعادة تحميل الصفحة للحصول على مزيد من الإحصاءات.",
+ "translate-langstats-expand": "وسع",
+ "translate-langstats-collapse": "اطو",
+ "translate-langstats-expandall": "وسّع الكل",
+ "translate-langstats-collapseall": "اطوِ الكل",
+ "translate-language-code": "رمز اللغة",
+ "translate-language-code-field-name": "رمز اللغة:",
+ "translate-suppress-complete": "تخطَ مجموعات الرسائل المترجمة كليا",
+ "translate-ls-noempty": "تخطَ مجموعات الرسائل غير المترجمة كليا",
+ "translate-language": "اللغة",
+ "translate-total": "الرسائل",
+ "translate-untranslated": "غير مترجمة",
+ "translate-percentage-complete": "مكتملة",
+ "translate-percentage-fuzzy": "غير محدثة",
+ "translate-percentage-proofread": "مراجعة",
+ "translate-languagestats-overall": "جميع مجموعات الرسائل معا",
+ "translate-ls-submit": "أظهر الإحصاءات",
+ "translate-ls-column-group": "مجموعة الرسائل",
+ "translate-mgs-pagename": "إحصاءات مجموعة الرسائل",
+ "translate-mgs-fieldset": "عرض التفضيلات",
+ "translate-mgs-group": "مجموعة الرسائل:",
+ "translate-mgs-nocomplete": "لا تعرض اللغات التي تحتوي على ترجمات مكتملة",
+ "translate-mgs-noempty": "لا تعرض اللغات التي لا تحتوي على أية ترجمة",
+ "translate-mgs-submit": "أظهر الإحصاءات",
+ "translate-mgs-column-language": "اللغة",
+ "translate-mgs-totals": "كل $1 {{PLURAL:$1|لغة|لغات}} سويا",
+ "translate-mgs-invalid-group": "المجموعة المحددة $1 ليست موجودة.",
+ "translate-mgs-nothing": "لا يوجد شيء يعرض للإحصاءات المطلوبة.",
+ "translate-tes-type-to-search": "اكتب لبدء البحث",
+ "supportedlanguages": "اللغات المدعومة",
+ "supportedlanguages-summary": "تظهر هذه الصفحة قائمة بكل اللغات التي يدعمها {{SITENAME}}،\nمع أسماء المترجمين الذين يعملون على هذه اللغة.\nكلما ظهر اسم المترجم بخط أكبر، كان عدد تعديلاته أكثر.\nويشير لون الخط السفلي إلى حداثة نشاط المترجم هنا.",
+ "supportedlanguages-colorlegend": "مفتاح الألوان: آخر ترجمة منذ $1 يوم.",
+ "supportedlanguages-sqlite-error": "SQLite غير مدعوم",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|مترجم|مترجمة}}|مترجمون}}: $1",
+ "supportedlanguages-recenttranslations": "الترجمات الأخيرة",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|لغة|لغات}} إجمالا.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|تعديل|تعديلات}} - آخر تعديل منذ $3 {{PLURAL:$3|يوم|أيام}}",
+ "abusefilter-edit-builder-vars-translate-source-text": "النص المصدر لوحدة الترجمة",
+ "abusefilter-edit-builder-vars-translate-target-language": "اللغة الهدف للترجمة",
+ "translate-jssti-add": "أضف إلى القائمة",
+ "managemessagegroups": "إدارة مجموعة الرسائل",
+ "translate-smg-notallowed": "غير مسموح لك بتنفيذ هذا التصرف.",
+ "translate-smg-nochanges": "لا توجد تغييرات لمعالجتها.",
+ "translate-smg-submit": "إرسال التغييرات للمعالجة",
+ "translate-smg-submitted": "تعريفات الرسائل تم تحديثها. التغييرات تتم معالجتها في الخلفية.",
+ "translate-smg-submitted-with-failure": "فشل تحديث الرسالة {{PLURAL:$1|تعريف الرسالة|تعريفات الرسائل}} {{PLURAL:$1|للمجموعة|للمجموعات}} التالية: $2. $3",
+ "translate-smg-submitted-others-processing": "تتم معالجة تعريفات الرسائل للمجموعات الأخرى في الخلفية.",
+ "translate-smg-more": "ستكون هناك المزيد من التغييرات للعملية بعد إرسال هذه التغييرات.",
+ "translate-smg-left": "محتوى الرسائل في الويكي",
+ "translate-smg-right": "التغييرات القادمة",
+ "translate-smg-rename-select": "تحديد",
+ "translate-smg-rename-cancel": "إلغاء",
+ "translate-smg-rename-search": "البحث عن رسالة مطابقة...",
+ "translate-smg-rename-select-err": "يُرجَى اختيار رسالة لإعادة تسميتها",
+ "translate-smg-rename-no-msg": "لا توجد رسائل.",
+ "translate-smg-rename-new": "أضف ... جديدا",
+ "translate-smg-rename-rename": "إضافة كإعادة تسمية ...",
+ "translate-smg-rename-dialog-title": "حدد إعادة تسمية مطابقة ل$1",
+ "translate-smg-changeset-modified": "تم تعديل مجموعة التغييرات بواسطة مستخدم أو عملية أخرى، لا يمكن حفظ تغييراتك لأنها قد تتجاوز تغييراتها، تُرجَى إعادة تحميل الصفحة لرؤية آخر التغييرات.",
+ "translate-smg-group-message-action-history": "تاريخ",
+ "translate-smg-group-message-message-other-langs": "اللغات الأخرى:",
+ "translate-manage-import-diff": "الرسالة $1 | الإجراءات: $2",
+ "translate-manage-import-new": "رسالة جديدة $1",
+ "translate-manage-import-deleted": "رسالة محذوفة $1",
+ "translate-manage-action-import": "استورد",
+ "translate-manage-action-conflict": "استورد وضبّب",
+ "translate-manage-action-ignore": "تجاهل",
+ "translate-manage-action-fuzzy": "استورد وضبّب الترجمات",
+ "translate-manage-action-rename-fuzzy": "إعادة تسمية والترجمات الغامضة",
+ "translate-manage-action-rename": "إعادة تسمية",
+ "translate-manage-action-ignore-change": "تجاهل تغيير الترجمة",
+ "translate-manage-nochanges": "لا توجد أي تغييرات في تعاريف رسائل هذه المجموعة.",
+ "translate-manage-nochanges-other": "لا توجد أي تغييرات على هذه اللغة.\nاستخدام الوصلة أدناه للرجوع إلى عرض تفاصيل المجموعة.",
+ "translate-manage-inconsistent": "كشف عدم توافق في الطلب.\nمن فضلك تحقق من التغييرات وحاول مجددا.\nالتفاصيل: $1.",
+ "translate-manage-toolong": "زمن المعالجة الأقصى ل$1 {{PLURAL:$1|second|seconds}} تم تجاوزه.\nمن فضلك أعد تنفيذ التموذج لإكمال المعالجة.",
+ "translate-manage-import-summary": "استيراد نسخة جديدة من مصدر خارجي",
+ "translate-manage-import-ignore": "تجاوز الرسالة $1.",
+ "translate-manage-import-rename-summary": "إعادة تسمية في مصدر خارجي",
+ "translate-manage-conflict-summary": "استيراد نسخة جديدة من مصدر خارجي.\nمن فضلك تحقق.",
+ "translate-manage-submit": "نفّذ",
+ "translate-manage-intro-other": "بالأسفل قائمة بتغييرات الترجمة في لغة $1.\nمن فضلك راجع التغييرات واختر فعلا تريد فعله لكل ترجمة.\nلو اخترت تجاهل التغييرات، فهذا الفعل مؤقت فقط.",
+ "translate-manage-import-ok": "استوردت: $1",
+ "translate-manage-import-done": "استيراد كامل!",
+ "importtranslations": "استورد ترجمات",
+ "translate-import-from-local": "رفع ملف محلي:",
+ "translate-import-load": "حمّل الملف",
+ "translate-import-err-dl-failed": "تعذّر جلب الملف:\n$1",
+ "translate-import-err-ul-failed": "فشل رفع الملف",
+ "translate-import-err-invalid-title": "اسم الملف المعطى <nowiki>$1</nowiki> غير صالح.",
+ "translate-import-err-no-such-file": "الملف <nowiki>$1</nowiki> غير موجود أو لم يرفع محليًا.",
+ "translate-import-err-stale-group": "مجموعة الرسائل المنتمية إلى هذا الملف غير موجود.",
+ "translate-import-err-no-headers": "الملف ليس ملف Gettext صحيح بصيغة امتداد الترجمة:\nغير قادر على تحديد المجموعة واللغة من مقدمة الملف.",
+ "translate-js-support-unsaved-warning": "لديك ترجمات غير محفوظة.",
+ "translate-gs-pos": "الترتيب",
+ "translate-gs-code": "الرمز",
+ "translate-gs-continent": "القارة",
+ "translate-gs-speakers": "الناطقون",
+ "translate-gs-score": "الدرجة",
+ "translate-gs-multiple": "عديدة",
+ "translate-gs-count": "العدد",
+ "translate-gs-total": "المجموع",
+ "translate-gs-avgscore": "معدل الدرجات",
+ "translate-documentation-language": "توثيق الرسالة",
+ "translate-searchprofile": "ترجمات",
+ "translate-searchprofile-tooltip": "البحث عن كل الترجمات",
+ "translate-searchprofile-note": "المزيد من خيارات البحث متوفرة مع [$1 بحث الترجمة].",
+ "translate-search-languagefilter": "فلترة حسب اللغة",
+ "translate-search-nofilter": "لا فلترة",
+ "log-name-translationreview": "سجل مراجعة الترجمة",
+ "log-description-translationreview": "سجل كل مراجعات الترجمة ورسائل المجموعات.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|راجع|راجعت}} الترجمة $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|غير|غيرت}} حالة ترجمات $4 ل$3 من $6 إلى $7",
+ "group-translate-sandboxed": "مترجمون غير موافق عليهم",
+ "group-translate-sandboxed-member": "{{GENDER:$1|مترجم غير موافق عليه|مترجمة غير موافق عليها}}",
+ "right-translate-sandboxmanage": "إدارة المستخدمين في الملعب",
+ "action-translate-sandboxmanage": "إدارة المستخدمين في الملعب",
+ "right-translate-sandboxaction": "نفذ الأفعال في القائمة البيضاء للمستخدمين في الملعب",
+ "action-translate-sandboxaction": "نفذ الأفعال في القائمة البيضاء للمستخدمين في الملعب",
+ "translate-workflow-state-": "(إلغاء المحدد)",
+ "translate-workflowstatus": "الحالة: $1",
+ "translate-workflow-set-doing": "إعداد...",
+ "translate-workflow-autocreated-summary": "إنشاء تلقائي للصفحة لحالة العمل $1",
+ "translate-stats-workflow": "الحالة",
+ "translate-workflowgroup-label": "حالات العمل",
+ "translate-workflowgroup-desc": "مجموعة الرسائل هذه تعرض حالات عمل الترجمة.\nالحالات معرفة في متغير الضبط $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "أحدث الترجمات",
+ "translate-dynagroup-recent-desc": "تظهر مجموعة الرسائل هذه كل الترجمات الحديثة لهذه اللغة. مفيدة لمهام المراجعة.",
+ "translate-dynagroup-additions-label": "الإضافات الأخيرة",
+ "translate-dynagroup-additions-desc": "تعرض مجموعة الرسائل هذه الرسائل الجديدة والمغيرة.",
+ "translate-msggroupselector-projects": "مجموعة الرسائل",
+ "translate-msggroupselector-search-placeholder": "ابحث عن المجموعات",
+ "translate-msggroupselector-search-all": "الكل",
+ "translate-msggroupselector-search-recent": "الأخيرة",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|مجموعة فرعية|مجموعات فرعية}}",
+ "tux-languageselector": "ترجم إلى",
+ "tux-tab-all": "الكل",
+ "tux-tab-untranslated": "غير المترجمة",
+ "tux-tab-outdated": "غير المحدثة",
+ "tux-tab-translated": "المترجمة",
+ "tux-tab-unproofread": "غير المراجعة",
+ "tux-edit": "عدل",
+ "tux-status-optional": "اختيارية",
+ "tux-status-fuzzy": "غير محدثة",
+ "tux-status-proofread": "رُوجِعت",
+ "tux-status-translated": "تُرجمت",
+ "tux-status-saving": "...جاري النشر",
+ "tux-status-unsaved": "غير منشورة",
+ "tux-save-unknown-error": "خطأ غير معروف حدث.",
+ "tux-editor-placeholder-language": "ترجمتك ب$1",
+ "tux-editor-editsummary-placeholder": "اشرح تغييراتك (اختياري)",
+ "tux-editor-paste-original-button-label": "الصق النص المصدر",
+ "tux-editor-discard-changes-button-label": "تجاهل التغييرات",
+ "tux-editor-save-button-label": "حفظ الترجمة",
+ "tux-editor-skip-button-label": "تخط إلى التالية",
+ "tux-editor-cancel-button-label": "ألغ",
+ "tux-editor-confirm-button-label": "أكد الترجمة",
+ "tux-editor-proofread-button-label": "قبول الترجمة",
+ "tux-editor-shortcut-info": "اضغط على \"$1\" للتأكيد والانتقال إلى الرسالة التالية، أو \"$2\" للتخطي، أو \"$4\" لتقديم ملخص أو اضغط على \"$3\" لمشاهدة اختصارات أخرى.",
+ "tux-editor-edit-desc": "عدل التوثيق",
+ "tux-editor-add-desc": "إضافة توثيق",
+ "tux-editor-suggestions-title": "اقتراحات",
+ "tux-editor-latest-updates-title": "آخر التحديثات",
+ "tux-editor-changes-without-summary": "$1 {{PLURAL:$1|تحديثات|تحديث}} بدون ملخص",
+ "tux-editor-all-changes": "كل التغييرات",
+ "tux-editor-in-other-languages": "بلغات أخرى",
+ "tux-editor-need-more-help": "تحتاج إلى مزيد من المساعدة؟",
+ "tux-editor-ask-help": "اطلب المزيد من المعلومات",
+ "tux-editor-tm-match": "مطابقة بنسبة %$1",
+ "tux-notices-more": "{{PLURAL:$1|لا تنبيه|تنبيه واحد|تنبيهان|$1 تنبيهات|$1 تنبيه}}",
+ "tux-notices-hide": "أخف",
+ "tux-editor-save-failed": "تعذر حفظ الترجمة: $1",
+ "tux-editor-n-uses": "مستخدمة {{PLURAL:$1|ولا مرة|مرة واحدة|مرتين|$1 مرات|$1 مرة}}",
+ "tux-editor-message-desc-more": "أظهر المزيد",
+ "tux-editor-message-desc-less": "أظهر أقل",
+ "tux-editor-clear-translated": "أخف المترجمة",
+ "tux-editor-proofreading-mode": "مراجعة",
+ "tux-editor-translate-mode": "قائمة",
+ "tux-editor-proofreading-hide-own-translations": "أخف ترجماتك",
+ "tux-editor-proofreading-show-own-translations": "أظهر ترجماتك",
+ "tux-proofread-action-tooltip": "قبول الترجمة",
+ "tux-proofread-edit-label": "عدل",
+ "tux-editor-page-mode": "صفحة",
+ "tux-editor-outdated-notice": "قد تحتاج هذه الترجمة إلى تحديث.",
+ "tux-editor-outdated-notice-diff-link": "أظهر الفروق",
+ "tux-editor-doc-editor-placeholder": "توثيق الرسالة",
+ "tux-editor-doc-editor-save": "حفظ التوثيق",
+ "tux-editor-doc-editor-cancel": "ألغ",
+ "tux-messagetable-more-messages": "{{PLURAL:$1|رسالة أخرى|رسالتان أخرتان|$1 رسائل أخرى|$1 رسالة أخرى}}",
+ "tux-messagetable-loading-messages": "جار تحميل {{PLURAL:$1|الرسالة|الرسائل}}...",
+ "tux-message-filter-placeholder": "صفِّ القائمة",
+ "tux-message-filter-result": "وجد {{PLURAL:$1|لا نتائج|نتيجة واحدة|نتيجتين اثنين|$1 نتائج|$1 نتيجة}} في البحث عن \"$2\"",
+ "tux-message-filter-advanced-button": "بحث متقدم",
+ "tux-message-filter-optional-messages-label": "الرسائل الاختيارية",
+ "tux-proofread-translated-by-self": "ترجمتها أنت",
+ "tux-empty-list-all": "مجموعة الرسائل هذه فارغة",
+ "tux-empty-list-all-guide": "اختر مجموعة رسائل أخرى للترجمة",
+ "tux-translate-page-no-such-group": "<strong>المجموعة المختارة غير موجودة.</strong> اختر مجموعة رسائل أخرى.",
+ "tux-empty-list-translated": "لا رسائل مترجمة",
+ "tux-empty-list-translated-guide": "يمكنك المساعدة في الترجمة",
+ "tux-empty-list-translated-action": "ترجم",
+ "tux-empty-no-messages-to-display": "لا رسائل للعرض.",
+ "tux-empty-there-are-optional": "توجد رسائل اختيارية لا تظهر في القائمة",
+ "tux-empty-show-optional-messages": "أظهر الرسائل الاختيارية",
+ "tux-empty-no-outdated-messages": "لا توجد رسائل غير محدثة",
+ "tux-empty-nothing-to-proofread": "لا شيء لمراجعته",
+ "tux-empty-you-can-help-providing": "يمكنك المساعدة بإضافة ترجمات جديدة",
+ "tux-empty-nothing-new-to-proofread": "لا شيء جديد لمراجعته",
+ "tux-empty-you-can-review-already-proofread": "يمكنك مراجعة الترجمات التي راجعها آخرون بالفعل.",
+ "tux-empty-list-other": "لا شيء لترجمته",
+ "tux-empty-list-other-guide": "يمكنك المساعدة بمراجعة الترجمات الموجودة.",
+ "tux-empty-list-other-action": "راجع الترجمات",
+ "tux-empty-list-other-link": "أظهر كل الرسائل",
+ "tux-editor-close-tooltip": "أغلق",
+ "tux-editor-expand-tooltip": "وسع",
+ "tux-editor-collapse-tooltip": "اطو",
+ "tux-editor-message-tools-show-editor": "عرض في محرر الويكي",
+ "tux-editor-message-tools-history": "تاريخ",
+ "tux-editor-message-tools-delete": "احذف",
+ "tux-editor-message-tools-translations": "كل الترجمات",
+ "tux-editor-message-tools-linktothis": "وصلة لهذه الرسالة",
+ "tux-editor-loading": "تحميل...",
+ "tux-editor-loading-failed": "أخفق تحميل مساعدات الترجمة: $1",
+ "translate-search-more-languages-info": "{{PLURAL:$1|لغة واحدة أخرى|لغتان أخريان|$1 لغات أخرى|$1 لغة أخرى}}",
+ "translate-statsbar-tooltip": "$1% مترجمة، $2% مراجعة",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% مترجمة، $2% مراجعة، $3% غير محدثة",
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|مجموعة|مجموعات}} أخرى",
+ "translate-syntax-error": "تحتوي الترجمة على أخطاء في بناء الجملة",
+ "tux-session-expired": "أنت لم تعد مسجل الدخول. من فضلك سجل الدخول في لسان منفصل. أو يمكنك عمل نسخة من الترجمات غير المحفوظة، تسجيل الدخول، العودة لهذه الصفحة وإدخال ترجماتك مجددا.",
+ "tux-nojs": "هذه الأداة لا تعمل بدون جافا سكريبت. الجافا سكريبت معطلة، فشلت في العمل، أو هذا المتصفح غير مدعوم.",
+ "specialpages-group-translation": "ترجمة"
+}
diff --git a/Translate/i18n/core/arc.json b/Translate/i18n/core/arc.json
new file mode 100644
index 00000000..41c602a8
--- /dev/null
+++ b/Translate/i18n/core/arc.json
@@ -0,0 +1,79 @@
+{
+ "@metadata": {
+ "authors": [
+ "Basharh"
+ ]
+ },
+ "translate": "ܬܪܓܡ",
+ "translate-desc": "[[Special:Translate|ܦܐܬܐ ܕܝܠܢܝܬܐ]] ܠܬܘܪܓܡܐ ܕܡܝܕܝܐܘܝܩܝ ܘܒܬܪ ܗܟܢ",
+ "translate-taction-translate": "ܬܪܓܡ",
+ "translate-taction-proofread": "ܬܢܝ",
+ "translate-taction-lstats": "ܚܒܝܫܘܬ ܡܢܝܢܐ ܕܠܫܢܐ",
+ "translate-taction-mstats": "ܚܒܝܫܘܬ ܡܢܝܢܐ ܕܟܢܘܫܬܐ ܕܐܓܪ̈ܬܐ",
+ "translate-taction-export": "ܐܦܩ",
+ "translate-page-settings-legend": "ܛܘܝܒ̈ܐ",
+ "translate-page-group": "ܟܢܘܫܬܐ",
+ "translate-page-language": "ܠܫܢܐ",
+ "translate-page-limit": "ܦܣܝܩܐ",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|ܐܓܪܬܐ|ܐܓܪ̈ܬܐ}} ܠܟܠ ܦܐܬܐ",
+ "translate-submit": "ܐܫܟܚ",
+ "translate-page-navigation-legend": "ܐܠܦܪܘܬܐ",
+ "translate-page-showing": "ܚܘܘܝܐ ܕܐܓܪ̈ܬܐ ܡܢ $1 ܥܕܡܐ ܠ $2 ܡܢ $3.",
+ "translate-page-showing-all": "ܚܘܘܝܐ ܕ $1 {{PLURAL:$1|ܐܓܪܬܐ|ܐܓܪ̈ܬܐ}}.",
+ "translate-page-showing-none": "ܠܝܬ ܐܓܪ̈ܬܐ ܠܚܘܘܝܐ.",
+ "translate-next": "ܦܐܬܐ ܕܒܬܪ",
+ "translate-prev": "ܦܐܬܐ ܕܩܕܡ",
+ "translate-page-description-legend": "ܝܕ̈ܥܬܐ ܥܠ ܟܢܘܫܬܐ",
+ "translate-page-edit": "ܫܚܠܦ",
+ "translate-optional": "(ܨܒܝܢܝܐ)",
+ "translate-edit-title": "ܫܚܠܦ \"$1\"",
+ "translate-edit-definition": "ܬܘܚܡܐ ܕܐܓܪܬܐ",
+ "translate-edit-contribute": "ܫܘܬܦ",
+ "translate-edit-information": "ܝܕ̈ܥܬܐ ܥܠ ܦܐܬܐ ($1)",
+ "translate-edit-warnings": "ܙܘܗܪ̈ܐ ܥܠ ܬܘܪ̈ܓܡܐ ܠܐ ܓܡܝܪ̈ܐ",
+ "translate-edit-tmmatch": "$1% ܠܚܡܐ",
+ "translate-edit-askpermission": "ܫܩܘܠ ܦܣܣܐ",
+ "prefs-translate": "ܓܒܝܬ̈ܐ ܕܬܘܪܓܡܐ",
+ "translate-rc-translation-filter-only": "ܚܘܝ ܬܘܪ̈ܓܡܐ ܒܠܚܘܕ",
+ "translationstats": "ܚܒܝܫܘܬ ܡܢܝܢܐ ܕܬܘܪܓܡܐ",
+ "translate-stats-edits": "ܫܘܚܠܦ̈ܐ",
+ "translate-stats-users": "ܬܪ̈ܓܡܢܐ",
+ "translate-statsf-scale-days": "ܝܘܡܬ̈ܐ",
+ "translate-statsf-scale-hours": "ܫܥܬ̈ܐ",
+ "translate-statsf-count-edits": "ܡܢܝܢܐ ܕܫܘܚܠܦ̈ܐ",
+ "translate-statsf-count-users": "ܬܪ̈ܓܡܢܐ ܙܪ̄ܝܙܐ",
+ "translate-statsf-submit": "ܚܝܪܐ ܩܕܡܝܐ",
+ "translate-sidebar-alltrans": "ܒܠܫܢ̈ܐ ܐܚܪ̈ܢܐ",
+ "translations": "ܟܠ ܬܪ̈ܓܡܝܬܐ",
+ "translate-translations-fieldset-title": "ܐܓܪܬܐ",
+ "translate-translations-messagename": "ܫܡܐ",
+ "translate-translations-project": "ܬܪܡܝܬܐ:",
+ "translate-translations-history-short": "ܬ",
+ "languagestats": "ܚܒܝܫܘܬ ܡܢܝܢܐ ܕܠܫܢܐ",
+ "languagestats-summary": "ܦܐܬܐ ܗܕܐ ܬܓܠܚ ܚܒܝܫܘܬ ܡܢܝܢܐ ܕܬܘܪܓܡܐ ܠܟܢܘܫܬܐ ܕܟܠ ܐܓܪ̈ܬܐ ܕܠܫܢܐ.",
+ "languagestats-stats-for": "ܚܒܝܫܘܬ ܡܢܝܢܐ ܕܠܫܢܐ $1 ($2).",
+ "languagestats-recenttranslations": "ܬܘܪ̈ܓܡܐ ܚܕ̈ܬܐ",
+ "translate-langstats-expand": "ܐܪܘܚ",
+ "translate-langstats-collapse": "ܩܡܘܛ",
+ "translate-langstats-expandall": "ܐܪܘܚ ܟܠ",
+ "translate-langstats-collapseall": "ܩܡܘܛ ܟܠ",
+ "translate-language-code": "ܪܡܙܐ ܕܠܫܢܐ",
+ "translate-language-code-field-name": "ܪܡܙܐ ܕܠܫܢܐ:",
+ "translate-language": "ܠܫܢܐ",
+ "translate-total": "ܐܓܪ̈ܬܐ",
+ "translate-untranslated": "ܠܐ ܬܘܪ̈ܓܡܐ",
+ "translate-percentage-complete": "ܓܡܝܪܐ",
+ "translate-percentage-fuzzy": "ܠܐ ܚܘܕܬܐ",
+ "translate-ls-submit": "ܚܘܝ ܚܒܝܫܘܬ ܡܢܝܢܐ",
+ "translate-ls-column-group": "ܟܢܘܫܬܐ ܕܐܓܪ̈ܬܐ",
+ "translate-mgs-pagename": "ܚܒܝܫܘܬ ܡܢܝܢܐ ܕܟܢܘܫܬܐ ܕܐܓܪ̈ܬܐ",
+ "supportedlanguages": "ܠܫܢ̈ܐ ܣܡܝܟ̈ܐ",
+ "translate-jssti-add": "ܐܘܣܦ ܠܡܟܬܒܘܬܐ",
+ "managemessagegroups": "ܕܒܘܪܝܐ ܕܟܢܘܫܬܐ ܕܐܓܪ̈ܬܐ",
+ "translate-manage-import-new": "ܐܓܪܬܐ ܚܕܬܐ $1",
+ "translate-manage-import-deleted": "ܐܓܪܬܐ ܫܝܦܬܐ $1",
+ "translate-js-support-unsaved-warning": "ܐܝܬ ܠܟ ܬܘܪ̈ܓܡܐ ܠܐ ܠܒܝܟ̈ܐ.",
+ "translate-documentation-language": "ܐܓܪܬܐ ܕܐܫܛܪܘܬܐ",
+ "translate-searchprofile": "ܬܘܪ̈ܓܡܐ",
+ "tux-notices-hide": "ܛܫܝ"
+}
diff --git a/Translate/i18n/core/arn.json b/Translate/i18n/core/arn.json
new file mode 100644
index 00000000..517160d0
--- /dev/null
+++ b/Translate/i18n/core/arn.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Manke ruLpa",
+ "Poquil"
+ ]
+ },
+ "translate-page-showing": "adkintun mensajes del $1 al $2 de $3",
+ "translate-page-showing-all": "adkintun $1 {{PLURAL:$1|message|messages}}.",
+ "translate-edit-contribute": "ñma",
+ "translate-documentation-language": "Werkün ñi eltukawün"
+}
diff --git a/Translate/i18n/core/arq.json b/Translate/i18n/core/arq.json
new file mode 100644
index 00000000..7c5566cc
--- /dev/null
+++ b/Translate/i18n/core/arq.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Oldstoneage"
+ ]
+ },
+ "translate-documentation-language": "التوتاق تاع الميساج",
+ "translate-dynagroup-recent-desc": "هاد الباكيّة تاع الميساجات تورّي كامل الطرجمات الجديدة ف هاد اللوغة. واش راه الموهم كامل فل خديمات تاع المراجعة.",
+ "tux-empty-you-can-help-providing": "تنجم تعاون و تزيد شي طرجمات جديدة",
+ "tux-empty-nothing-new-to-proofread": "ما كاين حتا حاجة جديدة باش تراجعها"
+}
diff --git a/Translate/i18n/core/ary.json b/Translate/i18n/core/ary.json
new file mode 100644
index 00000000..ba23c557
--- /dev/null
+++ b/Translate/i18n/core/ary.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "Enzoreg",
+ "Ideophagous",
+ "Reda Benkhadra",
+ "SADIQUI"
+ ]
+ },
+ "translate-langstats-collapse": "طوي",
+ "supportedlanguages": "تّوتيق",
+ "translate-manage-import-new": "Méṣaj jdid $1",
+ "translate-manage-import-deleted": "Méṣaj memḫi $1",
+ "translate-documentation-language": "توثيق الرسالة",
+ "translate-msggroupselector-search-all": "كلشي",
+ "tux-tab-all": "كلشي",
+ "tux-editor-collapse-tooltip": "طوي"
+}
diff --git a/Translate/i18n/core/arz.json b/Translate/i18n/core/arz.json
new file mode 100644
index 00000000..2414974e
--- /dev/null
+++ b/Translate/i18n/core/arz.json
@@ -0,0 +1,148 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ghaly",
+ "Meno25",
+ "Ouda",
+ "Ramsis II"
+ ]
+ },
+ "translate": "ترجمة",
+ "translate-desc": "[[Special:Translate|صفحه خاصة]] لترجمه الميدياويكى وما بعده",
+ "translate-taction-lstats": "إحصاءات اللغه",
+ "translate-page-no-such-language": "لم تكن اللغه المحدده صحيحه.",
+ "translate-page-no-such-group": "المجموعه المحدده غير صحيحه.",
+ "translate-page-disabled": "الترجمات إلى هذه اللغه فى هذه المجموعه تم تعطيلها. السبب:\n\n<em>$1</em>",
+ "translate-page-settings-legend": "الإعدادات",
+ "translate-page-group": "المجموعة",
+ "translate-page-language": "اللغة",
+ "translate-page-limit": "الحد",
+ "translate-page-limit-option": "{{PLURAL:$1||رساله واحدة|رسالتان|$1 رسالات|$1 رسالة}} للصفحة",
+ "translate-submit": "اجلب",
+ "translate-page-navigation-legend": "الإبحار",
+ "translate-page-showing": "عرض الرسائل من $1 إلى $2 ل $3.",
+ "translate-page-showing-all": "عرض {{PLURAL:$1||رساله واحدة|رسالتين|$1 رسائل|$1 رسالة}}.",
+ "translate-page-showing-none": "لا رسائل للعرض.",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "الصفحه التالية",
+ "translate-prev": "الصفحه السابقة",
+ "translate-page-description-legend": "معلومات حول المجموعة",
+ "translate-page-edit": "عدل",
+ "translate-optional": "(اختياري)",
+ "translate-ignored": "(متجاهل)",
+ "translate-edit-definition": "تعريف الرسالة",
+ "translate-edit-contribute": "ساهم",
+ "translate-edit-no-information": "''ليس لهذه الرساله توثيق.\nإذا كنت تعرف أين أو كيف يتم استخدام هذه الرساله، فيمكنك مساعده المترجمين الآخرين بإضافه توثيق إلى هذه الرساله.''",
+ "translate-edit-information": "معلومات عن الرساله ($1)",
+ "translate-edit-warnings": "التحذيرات حول الترجمات غير المكتملة",
+ "translate-edit-tmmatch-source": "نص المصدر للترجمه: $1",
+ "translate-edit-tmmatch": "$1% مطابقة",
+ "translate-checks-parameters": "{{PLURAL:$2||المحدد التالى غير مستخدم|المحددان التاليان غير مستخدمان|المحددات التاليه غير مستخدمة}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2||المحدد التالى غير معروف|المحددان التاليان غير معروفان|المحددات التاليه غير معروفة}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "يوجد عدد غير زوجى من {{PLURAL:$2|الأقواس}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2||الوصله التالية|الوصلتان التاليتان|ال$2 وصلات التالية|ال$2 وصله التالية}} بها مشاكل:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2||الوصله التاليه مفقودة|الوصلتان التاليتان مفقودتان|ال$2 وصلات التاليه مفقودة|ال$2 وصله التاليه مفقودة}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "التعريف يستخدم <nowiki>{{PLURAL:}}</nowiki> لكن الترجمه لا.",
+ "translate-checks-pagename": "النطاق تغير من التعريف",
+ "translate-checks-format": "هذه الترجمه لا تتبع التعريف أو لديها صياغه خاطئة: $1",
+ "translate-checks-escape": "عمليات الهروب التاليه ربما تكون حدثت بالصدفة: <strong>$1</strong>",
+ "translate-checks-fudforum-syntax": "استخدم <nowiki>$1</nowiki> بدلًا من <nowiki>$2</nowiki> فى هذا المشروع.",
+ "translate-pref-editassistlang": "لغات المساعد:",
+ "prefs-translate": "خيارات الترجمة",
+ "translate-pref-editassistlang-help": "قائمه برموز اللغات مفصوله بفواصل.\nتُعرض ترجمه الرساله بهذه اللغات عندما تترجم.\nقائمه اللغات المبدئيه تعتمد على لغتك.",
+ "translate-pref-editassistlang-bad": "رمز لغه غير صالح فى القائمة:\n<nowiki>$1</nowiki>.",
+ "right-translate": "التعديل باستخدام واجهه الترجمة",
+ "right-translate-manage": "إدارة مجموعات الرسايل",
+ "action-translate-manage": "إدارة مجموعات الرسايل",
+ "right-translate-import": "استيراد الترجمات من الخارج",
+ "action-translate-import": "استيراد الترجمات من بره",
+ "right-translate-messagereview": "مراجعة الترجمات",
+ "translate-rc-translation-filter": "رشّح الترجمات:",
+ "translate-rc-translation-filter-no": "لا تفعل شيئا",
+ "translate-rc-translation-filter-only": "اعرض الترجمات فقط",
+ "translate-rc-translation-filter-filter": "أزل الترجمات",
+ "translate-rc-translation-filter-site": "التغييرات لرسائل الموقع فقط",
+ "translationstats": "إحصاءات الترجمة",
+ "translate-stats-edits": "تعديلات",
+ "translate-stats-users": "المترجمون",
+ "translate-statsf-intro": "يمكنك توليد إحصاءات بسيطه بهذه الاستماره. كل القيم لها حدود عليا وسفلى.",
+ "translate-statsf-options": "خيارات الرسم",
+ "translate-statsf-width": "العرض بالبكسل:",
+ "translate-statsf-height": "الارتفاع بالبكسل:",
+ "translate-statsf-days": "فتره زمنيه باليوم:",
+ "translate-statsf-start": "تاريخ البدايه:",
+ "translate-statsf-scale": "التدريج:",
+ "translate-statsf-scale-months": "شهور",
+ "translate-statsf-scale-weeks": "اسابيع",
+ "translate-statsf-scale-days": "أيام",
+ "translate-statsf-scale-hours": "ساعات",
+ "translate-statsf-count": "قياس:",
+ "translate-statsf-count-edits": "عدد التعديلات",
+ "translate-statsf-count-users": "المترجمون النشطون",
+ "translate-statsf-count-registrations": "يوزرز جداد",
+ "translate-statsf-language": "قائمه بأكواد اللغات مفصوله بفاصلة:",
+ "translate-statsf-group": "قائمه بأكواد المجموعات مفصوله بفاصلة:",
+ "translate-statsf-submit": "عاين",
+ "translate-tag-page-desc": "ترجمة صفحة الويكى [[$2|$1]] من $3 ($4).",
+ "translate-sidebar-alltrans": "بلغات أخرى",
+ "translations": "كل الترجمات",
+ "translations-summary": "أدخل اسم رساله أسفله لعرض كل الترجمات المتوفره.",
+ "translate-translations-no-message": "\"$1\" ليست رساله قابله للترجمة",
+ "translate-translations-none": "لا يوجد ترجمات ل\"$1\"",
+ "translate-translations-fieldset-title": "الرسالة",
+ "translate-translations-messagename": "الاسم:",
+ "translate-translations-project": "المشروع:",
+ "translate-translations-including-no-param": "من فضلك حدد مفتاح رساله صحيح فى معامل الصفحه الفرعية",
+ "translate-translations-history-short": "ت",
+ "languagestats": "إحصاءات اللغة",
+ "languagestats-summary": "هذه الصفحه تعرض إحصاءات الترجمه لكل مجموعات الرسائل للغه.",
+ "translate-language-code": "رمز اللغة",
+ "translate-language-code-field-name": "رمز اللغة:",
+ "translate-suppress-complete": "تخطَ مجموعات الرسائل المترجمه كليا",
+ "translate-language": "اللغة:",
+ "translate-total": "الرسائل",
+ "translate-untranslated": "غير المترجمة",
+ "translate-percentage-complete": "المكتمل",
+ "translate-percentage-fuzzy": "غير المحدث",
+ "supportedlanguages-portallink": "[$1] $2 - $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|مترجم|مترجمه}}|مترجمين}}: $1",
+ "translate-jssti-add": "أضف إلى القائمة",
+ "translate-manage-import-diff": "الرساله $1 | الإجراءات: $2",
+ "translate-manage-import-new": "رساله جديده $1",
+ "translate-manage-import-deleted": "رساله محذوفه $1",
+ "translate-manage-action-import": "استورد",
+ "translate-manage-action-conflict": "استورد وضبّب",
+ "translate-manage-action-ignore": "تجاهل",
+ "translate-manage-action-fuzzy": "استورد وضبّب الترجمات",
+ "translate-manage-nochanges": "لا توجد أى تغييرات فى تعاريف رسائل هذه المجموعه.",
+ "translate-manage-nochanges-other": "لا توجد أى تغييرات على هذه اللغه.\nاستخدام الوصله أدناه للرجوع إلى عرض تفاصيل المجموعه.",
+ "translate-manage-inconsistent": "كشف عدم توافق فى الطلب.\nمن فضلك تحقق من التغييرات وحاول مجددا.\nالتفاصيل: $1.",
+ "translate-manage-toolong": "زمن المعالجه الأقصى ل$1 {{PLURAL:$1|second|seconds}} تم تجاوزه.\nمن فضلك أعد تنفيذ التموذج لإكمال المعالجه.",
+ "translate-manage-import-summary": "استيراد نسخه جديده من مصدر خارجي",
+ "translate-manage-import-ignore": "تجاوز الرساله $1.",
+ "translate-manage-conflict-summary": "استيراد نسخه جديده من مصدر خارجى.\nمن فضلك تحقق.",
+ "translate-manage-submit": "نفّذ",
+ "translate-manage-intro-other": "بالأسفل قائمه بتغييرات الترجمه فى لغه $1.\nمن فضلك راجع التغييرات واختر فعلا تريد فعله لكل ترجمه.\nلو اخترت تجاهل التغييرات، ستتم الكتابه عليها عند التصدير التالى.",
+ "translate-manage-import-ok": "استوردت: $1",
+ "translate-manage-import-done": "استيراد كامل!",
+ "importtranslations": "استورد ترجمات",
+ "translate-import-from-local": "رفع ملف محلي:",
+ "translate-import-load": "حمّل الملف",
+ "translate-import-err-dl-failed": "تعذّر جلب الملف:\n$1",
+ "translate-import-err-ul-failed": "فشل رفع الملف",
+ "translate-import-err-invalid-title": "اسم الملف المعطى <nowiki>$1</nowiki> غير صالح.",
+ "translate-import-err-no-such-file": "الملف <nowiki>$1</nowiki> غير موجود أو لم يرفع محليًا.",
+ "translate-import-err-no-headers": "الملف ليس ملف Gettext صحيح بصيغه امتداد الترجمة:\nغير قادر على تحديد المجموعه واللغه من مقدمه الملف.",
+ "translate-gs-pos": "الترتيب",
+ "translate-gs-code": "الرمز",
+ "translate-gs-continent": "القارة",
+ "translate-gs-speakers": "الناطقون",
+ "translate-gs-score": "الدرجة",
+ "translate-gs-multiple": "عديدة",
+ "translate-gs-count": "العدد",
+ "translate-gs-total": "المجموع",
+ "translate-gs-avgscore": "معدل الدرجات",
+ "translate-documentation-language": "رسالة التوثيق",
+ "translate-searchprofile": "ترجمات"
+}
diff --git a/Translate/i18n/core/as.json b/Translate/i18n/core/as.json
new file mode 100644
index 00000000..38280938
--- /dev/null
+++ b/Translate/i18n/core/as.json
@@ -0,0 +1,151 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bishnu Saikia",
+ "Chaipau",
+ "Dibya Dutta",
+ "Gahori",
+ "Gitartha.bordoloi",
+ "Jaminianurag",
+ "Nilamdyuti",
+ "Simbu123",
+ "Xqt"
+ ]
+ },
+ "translate": "অনুবাদ কৰক",
+ "translate-extensionname": "অনুবাদ কৰক",
+ "translate-desc": "মিডিয়াৱিকি আৰু অন্য ভাঙনিৰ কাৰণে [[Special:Translate|বিশেষ পৃষ্ঠা]]",
+ "translate-taction-translate": "অনুবাদ কৰক",
+ "translate-taction-proofread": "পুনৰীক্ষণ",
+ "translate-taction-lstats": "ভাষাৰ পৰিসংখ্যা",
+ "translate-taction-mstats": "বাৰ্তা গোটৰ পৰিসংখ্যা",
+ "translate-taction-export": "ৰপ্তানি কৰক",
+ "translate-taction-disabled": "এই ৱিকিত এই কাৰ্য নিষ্ক্ৰিয় কৰা হৈছে।",
+ "translate-page-no-such-language": "উ্ল্লেখিত ভাষা পোৱা নগ’ল",
+ "translate-page-no-such-group": "উল্লেখিত গোটটো অবৈধ।",
+ "translate-language-disabled": "এই ভাষালৈ ভাঙনি কাৰ্য অৱৰোধ কৰা হৈছে।",
+ "translate-page-settings-legend": "চেটিং",
+ "translate-page-group": "গোট",
+ "translate-page-language": "ভাষা",
+ "translate-page-limit": "সীমা",
+ "translate-page-limit-option": "প্ৰতি পৃষ্ঠাত $1টা {{PLURAL:$1|বাৰ্তা}}",
+ "translate-submit": "দেখুৱাওক",
+ "translate-page-navigation-legend": "দিকদৰ্শন",
+ "translate-page-showing": "$3টা বাৰ্তাৰ ভিতৰত $1-ৰ পৰা $2-লৈ দেখুৱাওক",
+ "translate-page-showing-all": "$1টা {{PLURAL:$1|বাৰ্তা|বাৰ্তা}} দেখুউৱা হৈছে",
+ "translate-page-showing-none": "দেখুৱাবলৈ একো বাৰ্তা নাই",
+ "translate-next": "পৰৱৰ্তী পৃষ্ঠা",
+ "translate-prev": "পূৰ্বৱৰ্তী পৃষ্ঠা",
+ "translate-page-description-legend": "এই গোটটোৰ বিষয়ে সবিশেষ",
+ "translate-page-description-hasoptional-open": "বৈকল্পিক বাৰ্তাসমূহ দেখুৱাওক",
+ "translate-page-edit": "সম্পাদনা",
+ "translate-optional": "(বিকল্পিত)",
+ "translate-ignored": "(উপেক্ষিত)",
+ "translate-edit-title": "\"$1\" সম্পাদন কৰক",
+ "translate-edit-definition": "বাৰ্তাৰ সংজ্ঞা",
+ "translate-edit-contribute": "বৰঙণি",
+ "translate-edit-information": "বাৰ্তাটোৰৰ বিষয়ে সবিশেষ ($1)",
+ "translate-edit-warnings": "অসমাপ্ত ভাঙনিৰ বিষয়ে সতৰ্ক বানী",
+ "translate-edit-tmmatch-source": "অনুবাদৰ উৎস পাঠ্য: $1",
+ "translate-edit-tmmatch": "$1% ৰজিতা খাইছে",
+ "translate-edit-nopermission": "ভাঙনি কৰিবৰ বাবে আপুনি ভাঙনি অনুমতি লোৱাটো বাঞ্চনীয়।",
+ "translate-edit-askpermission": "অনুমতি লওক",
+ "translate-pref-editassistlang": "সহযোগী ভাষাসমূহ:",
+ "prefs-translate": "ভাঙনি বিকল্পসমূহ",
+ "right-translate-manage": "বাৰ্তা গোট ব্যৱস্থাপনা",
+ "action-translate-manage": "বাৰ্তা গোট ব্যৱস্থাপনা",
+ "right-translate-messagereview": "ভাঙনিসমূহ পুনৰীক্ষণ কৰক",
+ "translate-rc-translation-filter": "ভাঙনিবোৰ ছেকক",
+ "translate-rc-translation-filter-no": "একো নকৰিব",
+ "translate-rc-translation-filter-only": "কেৱল ভাঙনিসমূহ দেখোৱাওঁক",
+ "translate-rc-translation-filter-filter": "ভাঙনিবোৰ ছেকক",
+ "translationstats": "ভাঙনি পৰিসংখ্যা",
+ "translate-stats-edits": "সম্পাদনাসমূহ",
+ "translate-stats-users": "অনুবাদকসকল",
+ "translate-stats-registrations": "পঞ্জীয়নসমূহ",
+ "translate-stats-reviews": "নিৰীক্ষকসকল",
+ "translate-stats-reviewers": "নিৰীক্ষকসকল",
+ "translate-statsf-options": "গ্ৰাফৰ বিকল্প",
+ "translate-statsf-start": "আৰম্ভৰ তাৰিখ:",
+ "translate-statsf-scale-months": "মাহ",
+ "translate-statsf-scale-weeks": "সপ্তাহ",
+ "translate-statsf-scale-days": "দিন",
+ "translate-statsf-scale-hours": "ঘন্টা",
+ "translate-statsf-count": "পৰিমাণ:",
+ "translate-statsf-count-edits": "সম্পাদনাসমূহৰ সংখ্যা",
+ "translate-statsf-count-users": "সক্ৰিয় অনুবাদকসকল",
+ "translate-statsf-count-registrations": "নতুন সদস্যসকল",
+ "translate-statsf-count-reviews": "ভাঙনি পুনৰীক্ষণ",
+ "translate-statsf-count-reviewers": "নিৰীক্ষকসকল",
+ "translate-statsf-submit": "খচৰা চাওক",
+ "translate-tag-page-desc": "[[$2|$1]] ৱিকি পৃষ্ঠাৰ ভাঙনি।",
+ "translate-sidebar-alltrans": "আন ভাষাত",
+ "translations": "সকলোবোৰ ভাঙনি",
+ "translate-translations-none": "\"$1\"ৰ বাবে কোনো ভাঙনি কৰিব লগা কাম নাই",
+ "translate-translations-count": "{{PLURAL:$1|এটা ভাঙনি|$1 ভাঙনি}} পোৱা গৈছে",
+ "translate-translations-fieldset-title": "বাৰ্তা",
+ "translate-translations-messagename": "নাম:",
+ "translate-translations-project": "প্ৰকল্প:",
+ "translate-translations-history-short": "ই",
+ "languagestats": "ভাষাৰ পৰিসংখ্যা",
+ "messagegroupstats-summary": "এই পৃষ্ঠাখনে বাৰ্তা গোটসমুহৰ পৰিসংখ্যা দেখুৱাইছে।",
+ "languagestats-stats-for": "$1 ($2)’ৰ বাবে ভাঙনি পৰিসংখ্যা",
+ "languagestats-recenttranslations": "শেহতীয়া ভাঙনিসমূহ",
+ "translate-langstats-expand": "বহলাওক",
+ "translate-langstats-collapse": "সংকোচ কৰক",
+ "translate-langstats-expandall": "সকলো বহলাওক",
+ "translate-langstats-collapseall": "সকলো সংকোচ কৰক",
+ "translate-language-code": "ভাষা কোড",
+ "translate-language-code-field-name": "ভাষা কোড:",
+ "translate-language": "ভাষা",
+ "translate-total": "বাৰ্তাসমূহ",
+ "translate-untranslated": "ভাঙনি নোহোৱা",
+ "translate-percentage-complete": "সম্পন্ন",
+ "translate-percentage-fuzzy": "আওপুৰণি",
+ "translate-languagestats-overall": "সকলো বাৰ্তা গোট একেলগে দেখুৱাওক",
+ "translate-ls-submit": "পৰিসংখ্যা দেখুৱাওক",
+ "translate-ls-column-group": "বাৰ্তা গোট",
+ "translate-mgs-pagename": "বাৰ্তা গোটৰ পৰিসংখ্যা",
+ "translate-mgs-fieldset": "পছন্দসমূহ প্ৰদৰ্শন কৰক",
+ "translate-mgs-group": "বাৰ্তা গোট:",
+ "translate-mgs-nocomplete": "যিবোৰ ভাষাৰ ভাঙনি শেষ হৈছে সেইবোৰ দেখুৱাব নালাগে",
+ "translate-mgs-noempty": "যিবোৰ ভাষাৰ ভাঙনি শেষ হৈছে সেইবোৰ দেখুৱাব নালাগে",
+ "translate-mgs-submit": "পৰিসংখ্যা দেখুৱাওক",
+ "translate-mgs-column-language": "ভাষাসমূহ",
+ "translate-mgs-totals": "একেলগে সকলোবোৰ ভাষা",
+ "translate-mgs-invalid-group": "উল্লেখ কৰা গোট $1 ৰ অস্বিত্ব নাই।",
+ "supportedlanguages": "সমৰ্থন থকা ভাষাসমূহ",
+ "supportedlanguages-translators": "{{PLURAL:$2|অনুবাদক|অনুবাদকসকল}}: $1",
+ "supportedlanguages-recenttranslations": "শেহতীয়া ভাঙনিসমূহ",
+ "supportedlanguages-count": "$1 মুঠ {{PLURAL:$1|ভাষা}}",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|সম্পাদন}} - শেষ সম্পাদন $3 {{PLURAL:$3|দিন}} আগতে",
+ "translate-jssti-add": "তালিকাত যোগ দিয়ক",
+ "managemessagegroups": "বাৰ্তা গোটৰ ব্যৱস্থাপনা",
+ "translate-smg-notallowed": "আপোনাক এই কাৰ্য কৰিবলৈ অনুমতি দিয়া নাই",
+ "translate-manage-import-diff": "বাৰ্তা $1 | কাৰ্য : $2",
+ "translate-manage-import-new": "নতুন বাৰ্তা $1",
+ "translate-manage-import-deleted": "বিলোপ কৰা বাৰ্তাসমূহ $1",
+ "translate-manage-action-import": "আমদানি",
+ "translate-manage-action-ignore": "আওকান কৰক",
+ "importtranslations": "ভাঙনিসমূহ আমদানী কৰক",
+ "translate-import-from-local": "স্থানীয় ফাইল আপল’ড:",
+ "translate-import-load": "ফাইল ল’ড কৰক",
+ "translate-import-err-dl-failed": "ফাইল অৰ্জন কৰা নহ'ল:\n$1",
+ "translate-gs-code": "কোড",
+ "translate-gs-continent": "উপমহাদেশ",
+ "translate-gs-speakers": "বক্তা",
+ "translate-gs-score": "নম্বৰ",
+ "translate-gs-count": "গণনা",
+ "translate-gs-total": "মুঠ",
+ "translate-gs-avgscore": "গড় নম্বৰ",
+ "translate-documentation-language": "বাৰ্তা নথিকৰণ",
+ "translate-searchprofile": "ভাঙনিসমূহ",
+ "log-name-translationreview": "ভাঙনি পুনৰীক্ষণ অভিলেখ",
+ "translate-workflowstatus": "স্থিতি: $1",
+ "translate-workflow-set-doing": "পছন্দসমূহ . . .",
+ "translate-stats-workflow": "স্থিতি",
+ "translate-dynagroup-recent-label": "শেহতীয়া ভাঙনিসমূহ",
+ "tux-languageselector": "অনুবাদ কৰক:",
+ "tux-editor-placeholder-language": "$1 ভাষাত আপোনাৰ অনুবাদ",
+ "tux-editor-proofreading-mode": "পুনঃৰীক্ষণ"
+}
diff --git a/Translate/i18n/core/ast.json b/Translate/i18n/core/ast.json
new file mode 100644
index 00000000..7a9a90d7
--- /dev/null
+++ b/Translate/i18n/core/ast.json
@@ -0,0 +1,364 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "Esbardu",
+ "Fitoschido",
+ "Xuacu"
+ ]
+ },
+ "translate": "Traducir",
+ "translate-desc": "[[Special:Translate|Páxina especial]] pa traducir MediaWiki y más",
+ "translate-fuzzybot-desc": "Esta ye una cuenta especial del sistema qu'usa la [https://www.mediawiki.org/wiki/Extension:Translate estensión Translate] de MediaWiki que s'utiliza pa caltener les traducciones.\nEsta cuenta ye parte del software MediaWiki y nun pertenez a nengún usuariu.",
+ "translate-taskui-export-to-file": "Esportar en formatu nativu",
+ "translate-taskui-export-as-po": "Esportar pa traducir ensin conexón",
+ "translate-taction-translate": "Traducir",
+ "translate-taction-proofread": "Revisar",
+ "translate-taction-lstats": "Estadístiques de llingua",
+ "translate-taction-mstats": "Estadístiques del grupu de mensaxes",
+ "translate-taction-export": "Esportar",
+ "translate-taction-disabled": "Esta aición ta desactivada nesta wiki.",
+ "translate-page-no-such-language": "La llingua especificada nun foi válida.",
+ "translate-page-no-such-group": "El grupu especificáu nun foi válidu.",
+ "translate-page-disabled": "Desactivaronse les traducciones a esta llingua nesti grupu. Motivu:\n\n<em>$1</em>",
+ "translate-language-disabled": "La traducción a esta llingua ta desactivada.",
+ "translate-page-settings-legend": "Configuración",
+ "translate-page-group": "Grupu",
+ "translate-page-language": "Llingua",
+ "translate-page-limit": "Llímite",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|mensaxe|mensaxes}} por páxina",
+ "translate-submit": "Amosar",
+ "translate-page-navigation-legend": "Navegación",
+ "translate-page-showing": "Amosando mensaxes del $1 al $2 de $3.",
+ "translate-page-showing-all": "Amosando $1 {{PLURAL:$1|mensaxe|mensaxes}}.",
+ "translate-page-showing-none": "Nun hai mensaxes qu'amosar.",
+ "translate-next": "Páxina siguiente",
+ "translate-prev": "Páxina anterior",
+ "translate-page-description-legend": "Información del grupu",
+ "translate-page-description-hasoptional": "Esti grupu de mensaxes contien mensaxes opcionales.\nLos mensaxes opcionales sólo deberíen traducise cuando la llingua tenga necesidaes especiales,\ncomo nun usar espacios o pa treslliterar nomes propios. $1",
+ "translate-page-description-hasoptional-open": "Amosar los mensaxes opcionales.",
+ "translate-page-edit": "editar",
+ "translate-optional": "(opcional)",
+ "translate-ignored": "(inoráu)",
+ "translate-edit-title": "Editar \"$1\"",
+ "translate-edit-definition": "Definición del mensaxe",
+ "translate-edit-contribute": "contribuyir",
+ "translate-edit-no-information": "<em>Esti mensaxe nun tien documentación. Si sabe ú o cómo s'usa esti mensaxe, pue ayudar a otros traductores amestando documentación a esti mensaxe.</em>",
+ "translate-edit-information": "Información tocante a esti mensaxe ($1)",
+ "translate-edit-warnings": "Avisos sobre traducciones incompletes",
+ "translate-edit-tmmatch-source": "Testu orixinal de la traducción: $1",
+ "translate-edit-tmmatch": "$1 % de coincidencia",
+ "translate-edit-nopermission": "Necesita permisu de traducción pa traducir mensaxes.",
+ "translate-edit-askpermission": "Pidir permisu",
+ "exporttranslations": "Esportar traducciones",
+ "translate-export-form-format": "Formatu",
+ "translate-export-invalid-format": "Especifica un formatu válidu.",
+ "translate-export-not-supported": "Nun s'almite la esportación de traducciones.",
+ "translate-export-format-notsupported": "El formatu d'esportación especificáu nun s'almite pol grupu de mensaxes.",
+ "translate-checks-parameters": "{{PLURAL:$2|El siguiente parámetru nun s'usa|Los siguientes parámetros nun s'usen}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|El siguiente parámetru ye desconocíu|Los siguientes parámetros son desconocíos}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "Hai un númberu impar de {{PLURAL:$2|paréntesis|paréntesis}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|El siguiente enllaz ye problemáticu|Los siguientes enllaces son problemáticos}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Falta l'enllaz|Falten los $2 enllaces}} darréu:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "La definición usa <nowiki>{{PLURAL:}}</nowiki> pero la traducción non.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> se {{PLURAL:$1|dio una forma|dieron $1 formes}}, pero namái {{PLURAL:$2|tien sofitu una forma|tienen sofitu $2 formes}} (sacante les formes 0= y 1=).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> tien formes duplicaes al final. <nowiki>{{PLURAL:$1|llunes|llunes}}</nowiki> tien d'escribise asina: <nowiki>{{PLURAL:$1|llunes}}</nowiki>.",
+ "translate-checks-gettext-plural-missing": "Esta traducción tien de contener <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-unsupported": "Esti mensaxe nun tien encontu pa <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-count": "<nowiki>{{PLURAL:GETTEXT|}}</nowiki> aceuta exautamente $1 {{PLURAL:$1|forma plural|formes plurales}}. Anguaño {{PLURAL:$2|dióse $2 forma plural|diéronse $2 formes plurales}}.",
+ "translate-checks-smartformat-plural-missing": "Esta traducción tien de tener plural na variable $1.",
+ "translate-checks-smartformat-plural-unsupported": "Esti mensaxe nun almite plurales na variable $1.",
+ "translate-checks-smartformat-plural-count": "Númberu incorreutu de formes plurales en <strong>$3</strong>. Tien de tener $1 {{PLURAL:$1|forma plural|formes plurales}}. Anguaño {{PLURAL:$2|dióse $2 forma plural|diéronse $2 formes plurales}}.",
+ "translate-checks-unicode-plural-missing": "Esta traducción tien de tener <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-unsupported": "Esti mensaxe nun tien encontu pa <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-invalid": "Les formes plurales tendríen de definise como $1. Esta traducción contien $2.",
+ "translate-checks-pagename": "Espaciu de nomes camudáu dende la definición",
+ "translate-checks-format": "Esta traducción nun sigue la definición o tien una sintaxis non válida: $1",
+ "translate-checks-escape": "{{PLURAL:$2|El siguiente caráuter d'escape pue ser accidental|Los $2 siguientes caráuteres d'escape puen ser accidentales}}: <strong>$1</strong>. {{PLURAL:$4|Un caráuter d'escape válidu ye|Los caráuteres d'escape válidos incluyen:}} $3.",
+ "translate-checks-parametersnotequal": "El númberu de parámetros ye {{PLURAL:$1|$1}}; tendría de ser {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> tien un formatu incorreutu.",
+ "translate-checks-fudforum-syntax": "Usa <nowiki>$1</nowiki> en llugar de <nowiki>$2</nowiki> nesti proyeutu.",
+ "translate-checks-newline-missing-start": "Hai $1 {{PLURAL:$1|carácter|carácteres}} de saltu de llinia que {{PLURAL:$1|falta|falten}} al principiu de la traducción.",
+ "translate-checks-newline-missing-end": "Hai $1 {{PLURAL:$1|carácter|carácteres}} de saltu de llinia que {{PLURAL:$1|falta|falten}} al final de la traducción.",
+ "translate-checks-newline-extra-start": "Hai $1 {{PLURAL:$1|carácter|carácteres}} de saltu de llinia {{PLURAL:$1|sobrante|sobrantes}} al principiu de la traducción.",
+ "translate-checks-newline-extra-end": "Hai $1 {{PLURAL:$1|carácter|carácteres}} de saltu de llinia {{PLURAL:$1|sobrante|sobrantes}} al final de la traducción.",
+ "translate-checks-value-not-present": "La traducción tien de ser igual a {{PLURAL:$1|1=|unu de los valores siguientes:}} $1.",
+ "translate-pref-editassistlang": "Llingües d'ayuda:",
+ "prefs-translate": "Opciones de traducción",
+ "translate-pref-editassistlang-help": "Llista de códigos de llingua separaos por comes.\nCuando traduces s'amuesen les traducciones d'un mensaxe nestes llingües.\nLa llista predeterminada de llingües depende de la to llingua.",
+ "translate-pref-editassistlang-bad": "Códigu de llingua inválidu na llista:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Editar usando la interfaz de traducción",
+ "action-translate": "editar usando la interfaz de traducción",
+ "right-translate-manage": "Xestionar los grupos de mensaxes",
+ "action-translate-manage": "xestionar los grupos de mensaxes",
+ "right-translate-import": "Importar les traducciones ensin conexón",
+ "action-translate-import": "Importar les traducciones ensin conexón",
+ "right-translate-messagereview": "Revisar les traducciones",
+ "action-translate-messagereview": "revisar traducciones",
+ "right-translate-groupreview": "Camudar l'estáu d'organización del trabayu de los grupos de mensaxes",
+ "action-translate-groupreview": "camudar l'estáu del fluxu de trabayu de los grupos de mensaxes",
+ "translate-rcfilters-translations": "Traducciones",
+ "translate-rcfilters-translations-only-label": "Traducciones",
+ "translate-rcfilters-translations-only-desc": "Cambeos nes páxines traducíes.",
+ "translate-rcfilters-translations-filter-label": "Nun son traducciones",
+ "translate-rcfilters-translations-filter-desc": "Tolos cambeos que nun son traducciones.",
+ "translate-rcfilters-translations-site-label": "Mensaxes del sitiu",
+ "translate-rcfilters-translations-site-desc": "Personalizaciones de los mensaxes del sitiu nel espaciu de nomes MediaWiki.",
+ "translate-rc-translation-filter": "Filtrar traducciones:",
+ "translate-rc-translation-filter-no": "Nun facer nada",
+ "translate-rc-translation-filter-only": "Amosar traducciones namái",
+ "translate-rc-translation-filter-filter": "Filtrar traducciones",
+ "translate-rc-translation-filter-site": "Cambeos de los mensaxes del sitiu namái",
+ "translationstats": "Estadístiques de traducción",
+ "translate-stats-edits": "Ediciones",
+ "translate-stats-users": "Traductores",
+ "translate-stats-registrations": "Rexistros",
+ "translate-stats-reviews": "Revisiones",
+ "translate-stats-reviewers": "Revisores",
+ "translate-statsf-intro": "Pues xenerar estadístiques cencielles con esti formulariu. Tolos valores tienen llímites superiores y inferiores.",
+ "translate-statsf-options": "Opciones del gráficu",
+ "translate-statsf-width": "Anchura en píxeles:",
+ "translate-statsf-height": "Altura en píxeles:",
+ "translate-statsf-days": "Data de comienzu:",
+ "translate-statsf-start": "Data de comienzu:",
+ "translate-statsf-scale": "Granularidá:",
+ "translate-statsf-scale-months": "Meses",
+ "translate-statsf-scale-weeks": "Selmanes",
+ "translate-statsf-scale-days": "Díes",
+ "translate-statsf-scale-hours": "Hores",
+ "translate-statsf-count": "Midida:",
+ "translate-statsf-count-edits": "Númberu d'ediciones",
+ "translate-statsf-count-users": "Traductores activos",
+ "translate-statsf-count-registrations": "Nuevos usuarios",
+ "translate-statsf-count-reviews": "Revisiones de les traducciones",
+ "translate-statsf-count-reviewers": "Revisores",
+ "translate-statsf-language": "Llista de códigos de llingua separtaos por comes:",
+ "translate-statsf-group": "Llista de códigos de grupu separtaos por comes:",
+ "translate-statsf-submit": "Vista previa",
+ "translate-tag-page-desc": "Traducción de la páxina wiki [[$2|$1]] dende'l $3 ($4).",
+ "translate-sidebar-alltrans": "Otres llingües",
+ "translations": "Toles traducciones",
+ "translations-summary": "Escribi abaxo'l nome d'un mensaxe pa ver toles traducciones disponibles.",
+ "translate-translations-no-message": "\"$1\" nun ye un mensaxe traducible",
+ "translate-translations-none": "Nun hai traducciones pa \"$1\"",
+ "translate-translations-count": "{{PLURAL:$1|S'alcontró una traducción|S'alcontraron $1 traducciones}}.",
+ "translate-translations-fieldset-title": "Mensaxe",
+ "translate-translations-messagename": "Nome:",
+ "translate-translations-project": "Proyeutu:",
+ "translate-translations-including-no-param": "Por favor, conseña una clave de mensaxe válida nel parámetru de subpáxina",
+ "translate-translations-history-short": "h",
+ "languagestats": "Estadístiques de llingua",
+ "languagestats-summary": "Esta páxina amuesa les estadístiques de traducción de tolos grupos de mensaxes d'una llingua.",
+ "messagegroupstats-summary": "Esta páxina amuesa les estadístiques del grupu de mensaxes.",
+ "languagestats-stats-for": "Estadístiques de traducción pal $1 ($2).",
+ "languagestats-recenttranslations": "traducciones recientes",
+ "translate-langstats-incomplete": "Dalgunes estadístiques d'esta páxina tan incompletes. Recargala pa ver más estadístiques.",
+ "translate-langstats-expand": "espander",
+ "translate-langstats-collapse": "anubrir",
+ "translate-langstats-expandall": "espander too",
+ "translate-langstats-collapseall": "anubrir too",
+ "translate-language-code": "Códigu de llingua",
+ "translate-language-code-field-name": "Códigu de llingua:",
+ "translate-suppress-complete": "Anubrir los grupos de mensaxes completamente traducíos",
+ "translate-ls-noempty": "Anubrir los grupos de mensaxes completamente ensin traducir",
+ "translate-language": "Llingua",
+ "translate-total": "Mensaxes",
+ "translate-untranslated": "Ensin traducir",
+ "translate-percentage-complete": "Completu",
+ "translate-percentage-fuzzy": "Anticuaos",
+ "translate-percentage-proofread": "Revisao",
+ "translate-languagestats-overall": "Tolos grupos de mensaxes xuntos",
+ "translate-ls-submit": "Amosar estadístiques",
+ "translate-ls-column-group": "Grupu de mensaxes",
+ "translate-mgs-pagename": "Estadístiques del grupu de mensaxes",
+ "translate-mgs-fieldset": "Preferencies de vista",
+ "translate-mgs-group": "Grupu de mensaxes:",
+ "translate-mgs-nocomplete": "Nun amosar les llingües cola traducción completa",
+ "translate-mgs-noempty": "Nun amosar les llingües que nun tengan traducción dala",
+ "translate-mgs-submit": "Amosar estadístiques",
+ "translate-mgs-column-language": "Llingua",
+ "translate-mgs-totals": "{{PLURAL:$1|La llingua|Toles $1 llingües}} en xunto",
+ "translate-mgs-invalid-group": "El grupu $1 especificáu nun esiste.",
+ "translate-mgs-nothing": "Nada qu'amosar pa les estadístiques que se pidieron.",
+ "supportedlanguages": "Llingües sofitaes",
+ "supportedlanguages-summary": "Esta páxina amuesa la llista de toles llingües que sofita {{SITENAME}}, xunto colos nomes de los traductores que trabayen nelles.\nCuantes más traducciones tenga feches un traductor, más grande apaecerá'l so nome.\nEl color del solliniáu indica'l tiempu que fai dende qu'un traductor tuvo activu equí.",
+ "supportedlanguages-colorlegend": "Lleenda del color: Cabera traducción hai $1 díes.",
+ "supportedlanguages-sqlite-error": "Nun hai encontu pa SQLite",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Traductor|Traductora}}|Traductores}}: $1",
+ "supportedlanguages-recenttranslations": "traducciones recientes",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|llingua|llingües}} en total.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|edición|ediciones}}; cabera edición hai $3 {{PLURAL:$3|día|díes}}",
+ "abusefilter-edit-builder-vars-translate-source-text": "Testu d'orixe de la unidá de traducción",
+ "abusefilter-edit-builder-vars-translate-target-language": "Llingua de destín de la traducción",
+ "translate-jssti-add": "Amestar a la llista",
+ "managemessagegroups": "Xestión de grupos de mensaxes",
+ "translate-smg-notallowed": "Nun tienes permisu pa executar esta aición.",
+ "translate-smg-nochanges": "Nun hai cambios que procesar.",
+ "translate-smg-submit": "Unviar cambios pa procesamientu",
+ "translate-smg-submitted": "S'anovaron les definiciones de los mensaxes. Los cambios tan procesandose'n segundu planu.",
+ "translate-smg-more": "Habrá más cambios a procesar dempués d'unviar estos.",
+ "translate-smg-left": "Conteníu del mensaxe nel wiki",
+ "translate-smg-right": "Cambios entrantes",
+ "translate-smg-rename-select": "Seleicionar",
+ "translate-smg-rename-cancel": "Encaboxar",
+ "translate-manage-import-diff": "Mensaxe $1 | Aiciones: $2",
+ "translate-manage-import-new": "Mensaxe nuevu $1",
+ "translate-manage-import-deleted": "Mensaxe desaniciáu $1",
+ "translate-manage-action-import": "Importar",
+ "translate-manage-action-conflict": "Importar y marcar pa revisar",
+ "translate-manage-action-ignore": "Inorar",
+ "translate-manage-action-fuzzy": "Importar y marcar les traducciones pa revisar",
+ "translate-manage-nochanges": "Nun hai cambeos nes definiciones de los mensaxes d'esti grupu.",
+ "translate-manage-nochanges-other": "Nun hebo cambios nesta llingua.\nUsa l'enllaz d'abaxo pa volver a la vista de detalles del grupu.",
+ "translate-manage-inconsistent": "Se detectó una inconsistencia na solicitú.\nPor favor revisa los cambios y vuelve a probar.\nDetalles: $1.",
+ "translate-manage-toolong": "Pasose'l tiempu máximu de procesamentu de $1 {{PLURAL:$1|segundu|segundos}}.\nVuelvi a unviar el formulariu pa continuar procesandolu.",
+ "translate-manage-import-summary": "Importando una versión nueva d'una fonte esterna",
+ "translate-manage-import-ignore": "Saltando'l mensaxe $1.",
+ "translate-manage-conflict-summary": "Importando una versión nueva d'una fonte esterna.\nPor favor, compruebala.",
+ "translate-manage-submit": "Executar",
+ "translate-manage-intro-other": "Debaxo ta la llista de cambios nes traducciones de la llingua $1.\nPor favor, revise los cambios y escueya l'aición que quier facer pa cada anovamientu.\nSi escueye inorar los cambios, esta aición ye sólo temporal.",
+ "translate-manage-import-ok": "Importada: $1",
+ "translate-manage-import-done": "¡Importación completada!",
+ "importtranslations": "Importar traducciones",
+ "translate-import-from-local": "Xubir un ficheru llocal:",
+ "translate-import-load": "Xubir ficheru",
+ "translate-import-err-dl-failed": "Nun se pudo obtener el ficheru:\n$1",
+ "translate-import-err-ul-failed": "Falló la xuba del ficheru",
+ "translate-import-err-invalid-title": "El nome de ficheru proporcionáu \"<nowiki>$1</nowiki>\" nun ye válidu.",
+ "translate-import-err-no-such-file": "El ficheru \"<nowiki>$1</nowiki>\" nun esiste o nun se xubió de mou llocal.",
+ "translate-import-err-stale-group": "El grupu de mensaxes al que pertenez esti ficheru nun esiste.",
+ "translate-import-err-no-headers": "El ficheru nun ye un ficheru Gettext bien formáu nel formatu d'estensión Translate:\nNun se puen determinar el grupu y la llingua a partir de les testeres del ficheru.",
+ "translate-js-support-unsaved-warning": "Tienes traducciones ensin guardar.",
+ "translate-gs-pos": "Pos.",
+ "translate-gs-code": "Códigu",
+ "translate-gs-continent": "Continente",
+ "translate-gs-speakers": "Falantes",
+ "translate-gs-score": "Pesu",
+ "translate-gs-multiple": "Múltiple",
+ "translate-gs-count": "Recuentu",
+ "translate-gs-total": "Total",
+ "translate-gs-avgscore": "Pesu mediu",
+ "translate-documentation-language": "Documentación del mensaxe",
+ "translate-searchprofile": "Traducciones",
+ "translate-searchprofile-tooltip": "Guetar en toles traducciones",
+ "translate-searchprofile-note": "Hai más opciones de busca disponibles con [$1 busca de traducciones].",
+ "translate-search-languagefilter": "Peñerar por llingua:",
+ "translate-search-nofilter": "Ensin peñera",
+ "log-name-translationreview": "Rexistru de revisión de la traducción",
+ "log-description-translationreview": "Rexistru de toles revisiones de les traducciones y grupos de mensaxes.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|revisó}} la traducción $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|camudó}} l'estáu de les traducciones al $4 del grupu de mensaxes $3 de $6 a $7",
+ "group-translate-sandboxed": "Traductores ensin aprobar",
+ "group-translate-sandboxed-member": "{{GENDER:$1|traductor|traductora}} ensin aprobar",
+ "right-translate-sandboxmanage": "Alministrar los usuarios de la zona de pruebes",
+ "action-translate-sandboxmanage": "alministrar los usuarios de la zona de pruebes",
+ "right-translate-sandboxaction": "Executar aiciones de la llista blanca pa los usuarios de la zona de pruebes",
+ "action-translate-sandboxaction": "executar aiciones de la llista blanca pa los usuarios de la zona de pruebes",
+ "translate-workflow-state-": "(desactiváu)",
+ "translate-workflowstatus": "Estáu: $1",
+ "translate-workflow-set-doing": "Activando...",
+ "translate-workflow-autocreated-summary": "Creación automática de la páxina pal estáu \"$1\" del fluxu de trabayu",
+ "translate-stats-workflow": "Estáu",
+ "translate-workflowgroup-label": "Estaos del fluxu de trabayu",
+ "translate-workflowgroup-desc": "Esti grupu de mensaxes amuesa los estaos del fluxu de trabayu de traducción.\nLos estaos se definen na variable de configuración $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Traducciones recientes",
+ "translate-dynagroup-recent-desc": "Esti grupu de mensaxes amuesa toles traducciones más nueves nesta llingua.\nYe enforma afayadizo pa les xeres de revisión.",
+ "translate-dynagroup-additions-label": "Novedaes",
+ "translate-dynagroup-additions-desc": "Esti grupu de mensaxes amuesa los mensaxes nuevos y camudaos.",
+ "translate-msggroupselector-projects": "Grupu de mensaxes",
+ "translate-msggroupselector-search-placeholder": "Guetar nos grupos",
+ "translate-msggroupselector-search-all": "Toos",
+ "translate-msggroupselector-search-recent": "De recién",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|subgrupu|subgrupos}}",
+ "tux-languageselector": "Traducir al",
+ "tux-tab-all": "Toos",
+ "tux-tab-untranslated": "Ensin traducir",
+ "tux-tab-outdated": "Anticuaos",
+ "tux-tab-translated": "Traducíos",
+ "tux-tab-unproofread": "Ensin revisar",
+ "tux-edit": "Editar",
+ "tux-status-optional": "Opcional",
+ "tux-status-fuzzy": "Anticuada",
+ "tux-status-proofread": "Revisao",
+ "tux-status-translated": "Traducíu",
+ "tux-status-saving": "Guardando...",
+ "tux-status-unsaved": "Ensin guardar",
+ "tux-save-unknown-error": "Hebo un error desconocíu.",
+ "tux-editor-editsummary-placeholder": "Resume opcional",
+ "tux-editor-paste-original-button-label": "Apegar el testu fonte",
+ "tux-editor-discard-changes-button-label": "Descartar los cambeos",
+ "tux-editor-save-button-label": "Guardar la traducción",
+ "tux-editor-skip-button-label": "Saltar a la siguiente",
+ "tux-editor-cancel-button-label": "Encaboxar",
+ "tux-editor-confirm-button-label": "Confirmar la traducción",
+ "tux-editor-proofread-button-label": "Marcar como revisao",
+ "tux-editor-shortcut-info": "Pulsia «$1» pa confirmar y dir al siguiente mensaxe, «$2» pa saltar «$4» p'apurrir un resume o primi «$3» pa ver otros atayos.",
+ "tux-editor-edit-desc": "Editar la documentación",
+ "tux-editor-add-desc": "Amestar la documentación",
+ "tux-editor-suggestions-title": "Suxerencies",
+ "tux-editor-in-other-languages": "N'otres llingües",
+ "tux-editor-need-more-help": "¿Necesites más ayuda?",
+ "tux-editor-ask-help": "Pidir más información",
+ "tux-editor-tm-match": "$1% de coincidencia",
+ "tux-notices-more": "{{PLURAL:$1|$1 más}}",
+ "tux-notices-hide": "anubrir",
+ "tux-editor-save-failed": "Falló guardar la traducción: $1",
+ "tux-editor-n-uses": "usada $1 {{PLURAL:$1|vez|veces}}",
+ "tux-editor-message-desc-more": "Ver más",
+ "tux-editor-message-desc-less": "Ver menos",
+ "tux-editor-clear-translated": "Anubrir traducíos",
+ "tux-editor-proofreading-mode": "Revisar",
+ "tux-editor-translate-mode": "Llista",
+ "tux-editor-proofreading-hide-own-translations": "Anubrir les tos traducciones",
+ "tux-editor-proofreading-show-own-translations": "Amosar les tos traducciones",
+ "tux-proofread-action-tooltip": "Marcar como revisao",
+ "tux-proofread-edit-label": "Editar",
+ "tux-editor-page-mode": "Páxina",
+ "tux-editor-outdated-notice": "Esta traducción puede necesitar anovase.",
+ "tux-editor-outdated-notice-diff-link": "Amosar les diferencies",
+ "tux-editor-doc-editor-placeholder": "Documentación del mensaxe",
+ "tux-editor-doc-editor-save": "Guardar documentación",
+ "tux-editor-doc-editor-cancel": "Encaboxar",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|mensaxe|mensaxes}} más",
+ "tux-messagetable-loading-messages": "Cargando $1 {{PLURAL:$1|mensaxe|mensaxes}}...",
+ "tux-message-filter-placeholder": "Peñerar llista",
+ "tux-message-filter-result": "{{PLURAL:$1|Alcontrose un resultáu|Alcontraronse $1 resultaos}} pa \"$2\"",
+ "tux-message-filter-advanced-button": "Gueta avanzada",
+ "tux-message-filter-optional-messages-label": "Mensaxes opcionales",
+ "tux-proofread-translated-by-self": "Traducío por ti",
+ "tux-empty-list-all": "Esti grupu de mensaxes ta baleru",
+ "tux-empty-list-all-guide": "Seleicione un grupu de mensaxes diferente pa traducir",
+ "tux-translate-page-no-such-group": "<strong>El grupu indicáu nun esiste.</strong> Seleicione un grupu de mensaxes distintu.",
+ "tux-empty-list-translated": "Nun hai mensaxes traducíos",
+ "tux-empty-list-translated-guide": "Pue ayudar cola traducción",
+ "tux-empty-list-translated-action": "Traducir",
+ "tux-empty-no-messages-to-display": "Nun hai dengún mensaxe qu'amosar.",
+ "tux-empty-there-are-optional": "Hai mensaxes opcionales que nun s'amuesen na llista",
+ "tux-empty-show-optional-messages": "Ver los mensaxes opcionales",
+ "tux-empty-no-outdated-messages": "Nun hai mensaxes anticuaos",
+ "tux-empty-nothing-to-proofread": "Nun hai nada pa revisar",
+ "tux-empty-you-can-help-providing": "Pue ayudar amestando traducciones nueves",
+ "tux-empty-nothing-new-to-proofread": "Nun hai nada nuevo pa revisar",
+ "tux-empty-you-can-review-already-proofread": "Pue revisar les traducciones que yá revisaron otres persones.",
+ "tux-empty-list-other": "Nun hai ren que traducir",
+ "tux-empty-list-other-guide": "Puedes ayudar a revisar les traducciones qu'esisten",
+ "tux-empty-list-other-action": "Revisar les traducciones",
+ "tux-empty-list-other-link": "Ver tolos mensaxes",
+ "tux-editor-close-tooltip": "Zarrar",
+ "tux-editor-expand-tooltip": "Espander",
+ "tux-editor-collapse-tooltip": "Plegar",
+ "tux-editor-message-tools-show-editor": "Amosar nel editor wiki",
+ "tux-editor-message-tools-history": "Historial",
+ "tux-editor-message-tools-delete": "Desaniciar",
+ "tux-editor-message-tools-translations": "Toles traducciones",
+ "tux-editor-message-tools-linktothis": "Enllaz a esti mensaxe",
+ "tux-editor-loading": "Cargando...",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|llingua|llingües}} más",
+ "translate-statsbar-tooltip": "$1% traducíos, $2% revisaos",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% traducíos, $2% revisaos, $3% anticuaos",
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|grupu|grupos}} más",
+ "translate-syntax-error": "La traducción contien errores sintácticos",
+ "tux-session-expired": "La sesión zarróse yá. Anicia sesión n'una llingüeta aparte. Alternativamente, copia les traducciones ensin guardar, anicia sesión, vuelvi a esta páxina y escribi les traducciones otra vuelta.",
+ "tux-nojs": "Esta ferramienta nun funciona sin JavaScript. JavaScript ta desactiváu, nun funcionó, o nun hai encontu pa esti restolador.",
+ "specialpages-group-translation": "Traducción"
+}
diff --git a/Translate/i18n/core/atj.json b/Translate/i18n/core/atj.json
new file mode 100644
index 00000000..b5c7d0d3
--- /dev/null
+++ b/Translate/i18n/core/atj.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Benoit Rochon",
+ "Jeannette Coocoo"
+ ]
+ },
+ "translate-page-settings-legend": "Ke actain",
+ "translate-langstats-expand": "otamirota",
+ "translate-documentation-language": "E itatcitcikatek",
+ "tux-editor-page-mode": "Masinhikan",
+ "tux-message-filter-advanced-button": "Awocamec nantona",
+ "tux-editor-message-tools-delete": "Wepina"
+}
diff --git a/Translate/i18n/core/av.json b/Translate/i18n/core/av.json
new file mode 100644
index 00000000..186a7eaa
--- /dev/null
+++ b/Translate/i18n/core/av.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gazimagomedov",
+ "Omarov M.",
+ "Аль-Гимравий"
+ ]
+ },
+ "translate-total": "Ругьелал",
+ "translate-untranslated": "Таржама гьабичӀел",
+ "translate-mgs-group": "Ругьелазул группа:",
+ "translate-manage-submit": "ТӀубазабизе",
+ "translate-documentation-language": "Баяналъул документация",
+ "translate-msggroupselector-projects": "Ругьелазул группа"
+}
diff --git a/Translate/i18n/core/avk.json b/Translate/i18n/core/avk.json
new file mode 100644
index 00000000..74bad8dd
--- /dev/null
+++ b/Translate/i18n/core/avk.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Axel xadolik"
+ ]
+ },
+ "translate-documentation-language": "Staksafa valdigara"
+}
diff --git a/Translate/i18n/core/awa.json b/Translate/i18n/core/awa.json
new file mode 100644
index 00000000..59ec30a3
--- /dev/null
+++ b/Translate/i18n/core/awa.json
@@ -0,0 +1,81 @@
+{
+ "@metadata": {
+ "authors": [
+ "1AnuraagPandey",
+ "Ajeetsinghawadhi",
+ "Nawabji"
+ ]
+ },
+ "translate": "अनुवाद करा जाय",
+ "translate-extensionname": "अनुबाद करा जाय",
+ "translate-desc": "[[Special:Translate| खास पन्ना]] मीडीयाविकि कै अनुबादन खत्तिर",
+ "translate-taskui-export-to-file": "मूल स्वरूप में निर्यात करा जाय",
+ "translate-taskui-export-as-po": "ऑफ़लाइन अनुवाद खत्तिर निर्यात करा जाय",
+ "translate-taction-translate": "अनुवाद करा जाय",
+ "translate-taction-proofread": "समीक्षा",
+ "translate-taction-lstats": "भाषा कै आँकड़ा",
+ "translate-taction-mstats": "भाषा-समूह आँकड़ा",
+ "translate-taction-export": "निर्यात",
+ "translate-taction-disabled": "एह विकी पै ई काम रोका गय है।",
+ "translate-page-settings-legend": "सेटिङ्ग",
+ "translate-page-group": "ग्रुप",
+ "translate-page-language": "भाषा",
+ "translate-page-limit": "सीमा",
+ "translate-page-navigation-legend": "नैविगेशन",
+ "translate-next": "अगला पन्ना",
+ "translate-prev": "पिछलका पन्ना",
+ "translate-page-edit": "सम्पादन करा जाय",
+ "translate-edit-title": "सम्पादन \"$1\"",
+ "translate-edit-definition": "संदेश परिभाषा",
+ "translate-edit-contribute": "योगदान",
+ "translate-pref-editassistlang": "सहायक भाषा:",
+ "translate-sidebar-alltrans": "दुसर भाषा में",
+ "translate-translations-count": "मिला {{PLURAL:$1|एक अनुबाद|$1 अनुबाद}}.",
+ "languagestats": "भाषा कै आँकड़ा",
+ "languagestats-summary": "इ पन्ना भाषा कय कुल सन्देश समुह कय अनुवाद आकलन देखावत है ।",
+ "languagestats-stats-for": "$1 ($2) कय खत्तीर अनुवाद आकँडा।",
+ "languagestats-recenttranslations": "नँवा अनुवाद",
+ "translate-language-code": "भाषा कय कोड",
+ "translate-language-code-field-name": "भाषा कय कोड:",
+ "translate-percentage-fuzzy": "पुरान होइ चुका",
+ "supportedlanguages": "सक्रिय भासा",
+ "supportedlanguages-sqlite-error": "SQLite सपोर्ट नाइ हय",
+ "supportedlanguages-recenttranslations": "नँवा अनुवाद",
+ "supportedlanguages-count": "कुल $1 {{PLURAL:$1|भाषा|भाषा}} ।",
+ "abusefilter-edit-builder-vars-translate-target-language": "अनुवाद कै उद्देस भासा",
+ "translate-jssti-add": "लिस्ट मा जोड़ैं",
+ "managemessagegroups": "सन्देस ग्रुप मैनेजमेंट",
+ "translate-smg-notallowed": "आप यहि कर्य काम का नाय चलाय सकतें।",
+ "translate-smg-nochanges": "प्रोसेस करय की ताईं कवनो बदलाव नाइ है।",
+ "translate-smg-submit": "प्रोसेस करय के बरे बदलाव जमा करैं",
+ "translate-smg-rename-cancel": "रद्द",
+ "translate-smg-rename-no-msg": "एक्कव संदेस नही मिला",
+ "translate-smg-group-message-message-other-langs": "अउर भासा:",
+ "translate-documentation-language": "मैसेज डकुमेन्टेशन",
+ "translate-msggroupselector-search-all": "सगरौ",
+ "tux-tab-all": "सगरौ",
+ "tux-tab-outdated": "पुरान होइ चुका",
+ "tux-tab-translated": "अनुवाद होय चुका",
+ "tux-status-fuzzy": "पुरान होइ चुका",
+ "tux-status-translated": "अनुवाद होय चुका",
+ "tux-editor-editsummary-placeholder": "बैकल्पिक सार",
+ "tux-editor-skip-button-label": "छोड़यँ औ आगे जायँ",
+ "tux-editor-in-other-languages": "दुसर भाषा में",
+ "tux-notices-hide": "लुकुवावा",
+ "tux-editor-clear-translated": "जिनकै अनुवाद होइ चुका उनका लुकुवावा",
+ "tux-editor-proofreading-hide-own-translations": "आपन अनुबाद लुकुवावा",
+ "tux-editor-page-mode": "पन्ना",
+ "tux-editor-outdated-notice": "एह अनुवाद का शायद अपडेट करय कै जरूरत है।",
+ "tux-message-filter-placeholder": "सूची का फिल्टर करैं",
+ "tux-message-filter-result": "मिला $1 {{PLURAL:$1|परिनाम}} \"$2\" के बरे",
+ "tux-message-filter-advanced-button": "उन्नत खोज",
+ "tux-message-filter-optional-messages-label": "बैकल्पिक संदेस",
+ "tux-proofread-translated-by-self": "आप द्वारा कीन गा अनुवाद",
+ "tux-empty-list-translated": "एक्कव अनुवाद कीन गा सनेश नाय न",
+ "tux-empty-there-are-optional": "लिस्ट मा नाय देखावा गा बैकल्पिक संदेस हैं",
+ "tux-empty-no-outdated-messages": "एक्कव पुरान संदेस नाइ ना",
+ "tux-empty-you-can-review-already-proofread": "आप वहू अनुबाद कै समीक्षा कइ सकत हैं जिनकै समीक्षा दूसर केहू पहिलेन कइ चुका है ।",
+ "tux-empty-list-other-guide": "आप मौजूदा अनुबाद कै समीक्षा करय म मदद कइ सकत हैं",
+ "translate-statsbar-tooltip": "$1% अनुवाद भा, $2% समीक्षा होइ गै",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% अनुवाद कीन गा, $2% समीक्षा कीन गय, $3% पुरान"
+}
diff --git a/Translate/i18n/core/az.json b/Translate/i18n/core/az.json
new file mode 100644
index 00000000..fd60adbf
--- /dev/null
+++ b/Translate/i18n/core/az.json
@@ -0,0 +1,186 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cekli829",
+ "Irada",
+ "Khan27",
+ "NMW03",
+ "Toghrul Rahimli",
+ "Vesely35",
+ "Wertuose"
+ ]
+ },
+ "translate": "Tərcümə et",
+ "translate-desc": "MediaViki və əlavələrini tərcümə etmək üçün [[Special:Translate|Xüsusi səhifə]]",
+ "translate-taskui-export-to-file": "Yerli formatda ixrac et",
+ "translate-taction-translate": "Tərcümə et",
+ "translate-taction-proofread": "Yoxla",
+ "translate-taction-lstats": "Dil statistikaları",
+ "translate-taction-mstats": "Mesaj qrupu statistikaları",
+ "translate-taction-export": "İxrac et",
+ "translate-taction-disabled": "Bu hərəkət bu vikidə istifadə oluna bilməz.",
+ "translate-page-no-such-language": "Göstərilən dil etibarsızdır.",
+ "translate-page-no-such-group": "Göstərilən qrup etibarsızdır.",
+ "translate-page-disabled": "Qrupdakı bu dilə tərcümələr etibarsızdır.\nSəbəb:\n\n<em>$1</em></em>",
+ "translate-language-disabled": "Bu dilə tərcümə etibarsızdır.",
+ "translate-page-settings-legend": "Tənzimləmələr",
+ "translate-page-group": "Qrup",
+ "translate-page-language": "Dil",
+ "translate-page-limit": "Limit",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|xəbər|xəbəri}} səhifədə göstər",
+ "translate-submit": "Seç",
+ "translate-page-navigation-legend": "Naviqasiya",
+ "translate-page-showing": "$3 mesajdan $1 ilə $2 arasında olanlar göstərilir.",
+ "translate-page-showing-all": "$1 sayda {{PLURAL:$1|mesaj|mesaj}} göstərilir.",
+ "translate-page-showing-none": "Göstəriləcək mesaj yoxdur.",
+ "translate-next": "Növbəti səhifə",
+ "translate-prev": "Əvvəlki səhifə",
+ "translate-page-description-legend": "Qrup haqqında məlumat",
+ "translate-page-description-hasoptional-open": "İstənilən mesajları göstər.",
+ "translate-page-edit": "redaktə et",
+ "translate-optional": "(məcburi deyil)",
+ "translate-ignored": "(sayılmayan)",
+ "translate-edit-title": "Redaktə et \"$1\"",
+ "translate-edit-definition": "Mesaj təsviri",
+ "translate-edit-contribute": "töhfə ver",
+ "translate-edit-no-information": "<em>Bu mesajın təsviri yoxdur.\nƏgər bu mesajın harada və necə istifadə edildiyini bilirsinizsə, onda bu mesaj üçün bir sənədləşmə əlavə edərək digər tərcüməçilərə kömək ola bilərsiniz.</em>",
+ "translate-edit-information": "Mesaj haqqında məlumat(lar) ($1)",
+ "translate-edit-warnings": "Yarımçıq tərcümələr haqqında xəbərdarlıqlar",
+ "translate-edit-tmmatch-source": "Tərcümə mənbəsi mətni: $1",
+ "translate-edit-tmmatch": "$1% oxşar",
+ "translate-edit-nopermission": "Mesajları tərcümə etmək üçün tərcüməçi hüquqlarınız olmalıdır.",
+ "translate-edit-askpermission": "İcazə al",
+ "translate-checks-parameters": "Aşağıdakı {{PLURAL:$2|parametrdən|parametrlərdən}} istifadə edilmir:\n<strong>$1</strong>",
+ "translate-checks-pagename": "Anlayışdakı ad sahəsi dəyişdirilib",
+ "translate-pref-editassistlang": "Köməkçi dillər:",
+ "prefs-translate": "Tərcümə seçimləri",
+ "translate-pref-editassistlang-bad": "Siyahıdakı etibarsız dil kodu:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Tərcümə interfeysindən istifadə edərək redaktə et",
+ "right-translate-manage": "Mesaj qruplarını idarə et",
+ "action-translate-manage": "mesaj qruplarını idarə et",
+ "right-translate-import": "Xətdə olmayan tərcümələri içəri köçür",
+ "action-translate-import": "xətdə olmayan tərcümələri içəri köçür",
+ "right-translate-messagereview": "Tərcümələri gözdən keçir",
+ "right-translate-groupreview": "Mesaj qruplarının iş axını vəziyyətini dəyişdir",
+ "translate-rc-translation-filter": "Tərcümələri filtirlə:",
+ "translate-rc-translation-filter-no": "Heç bir şey etmə",
+ "translate-rc-translation-filter-only": "Təkcə tərcümələri göstər",
+ "translate-rc-translation-filter-site": "Təkcə sayt mesajlarını dəyişdir",
+ "translationstats": "Tərcümə statistikaları",
+ "translate-stats-edits": "Redaktələr",
+ "translate-stats-users": "Tərcüməçilər",
+ "translate-stats-registrations": "Qeydiyyatlar",
+ "translate-stats-reviews": "Yoxlamalar",
+ "translate-stats-reviewers": "İncələyənlər",
+ "translate-statsf-options": "Qrafik seçimləri",
+ "translate-statsf-width": "Eni piksel olaraq:",
+ "translate-statsf-height": "Hündürlük piksel olaraq:",
+ "translate-statsf-days": "Gün olaraq müddət:",
+ "translate-statsf-start": "Başlanğıc tarixi:",
+ "translate-statsf-scale": "Məlumat:",
+ "translate-statsf-scale-months": "Aylar",
+ "translate-statsf-scale-weeks": "Həftələr",
+ "translate-statsf-scale-days": "Günlər",
+ "translate-statsf-scale-hours": "Saatlar",
+ "translate-statsf-count": "Ölçü:",
+ "translate-statsf-count-edits": "Redaktələrin sayı:",
+ "translate-statsf-count-users": "Aktiv tərcüməçilər",
+ "translate-statsf-count-registrations": "Yeni istifadəçilər",
+ "translate-statsf-count-reviews": "Tərcümə qiymətləndirmələri",
+ "translate-statsf-count-reviewers": "İncələyənlər",
+ "translate-statsf-language": "Dil kodlarının vergül ilə ayrılmış siyahısı:",
+ "translate-statsf-group": "Qrup kodlarının vergül ilə ayrılmış siyahısı:",
+ "translate-statsf-submit": "Ön izləmə",
+ "translate-tag-page-desc": "[[$2|$1]] viki-səhifəsinin $3 ($4) dilindən tərcüməsi.",
+ "translate-sidebar-alltrans": "Başqa dillərdə",
+ "translations": "Bütün tərcümələr",
+ "translate-translations-no-message": "\"$1\" tərcümə oluna bilməyən mesajdır",
+ "translate-translations-none": "\"$1\" üçün tərcümə yoxdur.",
+ "translate-translations-count": "{{PLURAL:$1|Bir tərcümə|$1 tərcümə}} tapıldı.",
+ "translate-translations-fieldset-title": "Mesaj",
+ "translate-translations-messagename": "Ad:",
+ "translate-translations-project": "Layihə:",
+ "translate-translations-history-short": "t",
+ "languagestats": "Dil statistikaları",
+ "languagestats-stats-for": "$1 üçün tərcümə statistikası ($2).",
+ "languagestats-recenttranslations": "son tərcümələr",
+ "translate-langstats-expand": "genişləndir",
+ "translate-langstats-collapse": "gizlə",
+ "translate-langstats-expandall": "hamısını genişləndir",
+ "translate-langstats-collapseall": "hamısını gizlət",
+ "translate-language-code": "Dil kodu",
+ "translate-language-code-field-name": "Dil kodu:",
+ "translate-suppress-complete": "Tərcümə olunmuş mesaj qruplarını gətir",
+ "translate-ls-noempty": "Tam tərcümə edilməyən mesaj qruplarını gizlə",
+ "translate-language": "Dil",
+ "translate-total": "Mesajlar",
+ "translate-untranslated": "Tərcümə edilməyən",
+ "translate-percentage-complete": "Tamamlanma",
+ "translate-percentage-fuzzy": "Köhnələn",
+ "translate-languagestats-overall": "Bütün mesaj qrupları ilə birlikdə",
+ "translate-ls-submit": "Statistikaları göstər",
+ "translate-ls-column-group": "Mesaj qrupu",
+ "translate-mgs-pagename": "Mesaj qrupu statistikaları",
+ "translate-mgs-fieldset": "İstinadlar ekranı",
+ "translate-mgs-group": "Mesaj qrupu:",
+ "translate-mgs-nocomplete": "Tərcümələri tamamlanmış dilləri göstərmə",
+ "translate-mgs-noempty": "Hər hansı bir tərcüməsi olmayan dilləri göstərmə",
+ "translate-mgs-submit": "Statistikaları göstər",
+ "translate-mgs-column-language": "Dil",
+ "translate-mgs-totals": "Bütün $1 {{PLURAL:$1|dillər}} birlikdə",
+ "supportedlanguages": "Aktiv dillər",
+ "supportedlanguages-colorlegend": "Rəng üçün açıqlama: Son tərcümə $1 gün əvvəl.",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|tərcüməçi}}|tərcüməçi}}: $1",
+ "supportedlanguages-recenttranslations": "son tərcümələr",
+ "supportedlanguages-count": "Ümumi olaraq $1 {{PLURAL:$1|dil}}.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|redaktə}} - son redaktə $3 {{PLURAL:$3|gün}} əvvəl",
+ "translate-jssti-add": "Siyahıya əlavə et",
+ "managemessagegroups": "Mesaj qrupu idarəsi",
+ "translate-smg-notallowed": "Bu əməliyyatı yerinə yetirmək üçün icazəniz yoxdur.",
+ "translate-smg-nochanges": "Emal etmək üçün dəyişiklik yoxdur.",
+ "translate-smg-submit": "Emal etmək üçün dəyişiklikləri göndərin",
+ "translate-smg-submitted": "Mesaj anlayışları yeniləndi. Dəyişikliklər arxa planda emal olunur.",
+ "translate-smg-left": "Vikidə mesaj məzmunu",
+ "translate-smg-right": "Gələn dəyişikliklər",
+ "translate-manage-import-diff": "Mesaj $1 | Hərəkət: $2",
+ "translate-manage-import-new": "Yeni mesaj $1",
+ "translate-manage-import-deleted": "Silinmiş mesaj $1",
+ "translate-manage-action-ignore": "İqnor et",
+ "translate-gs-code": "Kod",
+ "translate-gs-score": "Hesab",
+ "translate-gs-multiple": "Çoxlu",
+ "translate-gs-count": "Sayı",
+ "translate-gs-total": "Ümumi",
+ "translate-documentation-language": "Mesaj sənədləşməsi",
+ "translate-searchprofile": "Tərcümələr",
+ "translate-searchprofile-tooltip": "Bütün tərcümələrdə axtar",
+ "translate-msggroupselector-projects": "Mesaj qrupu",
+ "translate-msggroupselector-search-placeholder": "Qrupları axtar",
+ "translate-msggroupselector-search-all": "Hamısı",
+ "translate-msggroupselector-search-recent": "Yaxındakı",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|altqrup|altqrup}}",
+ "tux-languageselector": "Tərcümə et",
+ "tux-tab-all": "Hamısı",
+ "tux-tab-untranslated": "Tərcümə edilməyən",
+ "tux-tab-outdated": "Köhnələn",
+ "tux-tab-translated": "Tərcümə edilən",
+ "tux-edit": "Redaktə et",
+ "tux-status-optional": "Məcburi deyil",
+ "tux-status-fuzzy": "Köhnələn",
+ "tux-status-proofread": "Yoxlanıldı",
+ "tux-status-translated": "Tərcümə edilən",
+ "tux-status-saving": "Yayımlanır...",
+ "tux-status-unsaved": "Yayımlanmadı",
+ "tux-editor-paste-original-button-label": "Mənbə mətn yapışdır",
+ "tux-editor-save-button-label": "Tərcüməni yayımla",
+ "tux-editor-skip-button-label": "Sonrakına keç",
+ "tux-editor-confirm-button-label": "Tərcüməni təsdiq edin",
+ "tux-editor-shortcut-info": "Yaddaşda saxlamaq üçün \"$1\", növbəti mesaja keçmək üçün \"$2\", digər qısayolları açmaq üçün \"$3\" düyməsini basın.",
+ "tux-editor-edit-desc": "Sənədləşdirməni redaktə et",
+ "tux-editor-suggestions-title": "Təkliflər",
+ "tux-editor-need-more-help": "Daha çox köməyə ehtiyacınız var?",
+ "tux-editor-ask-help": "Daha ətraflı",
+ "tux-editor-message-desc-more": "Daha ətraflı",
+ "tux-editor-outdated-notice": "Ola bilsin ki, bu tərcümənin yenilənməsinə ehtiyac var.",
+ "tux-editor-outdated-notice-diff-link": "Fərqləri göstər"
+}
diff --git a/Translate/i18n/core/azb.json b/Translate/i18n/core/azb.json
new file mode 100644
index 00000000..dced39cd
--- /dev/null
+++ b/Translate/i18n/core/azb.json
@@ -0,0 +1,296 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alp Er Tunqa",
+ "Calak",
+ "E THP",
+ "Ebrahimi-amir",
+ "Ilğım",
+ "Koroğlu",
+ "Mousa",
+ "Reza1615"
+ ]
+ },
+ "translate": "ترجومه ائت",
+ "translate-desc": "مئدیاویکی و سونرانی چئویرمک اوچون [[Special:Translate|اؤزل صحیفه]]",
+ "translate-taskui-export-to-file": "دوغما فورمت‌ده چیخارت",
+ "translate-taskui-export-as-po": "آفلاین چئویرمک اوچون چیخارت",
+ "translate-taction-translate": "چئویرمه",
+ "translate-taction-proofread": "یئنی‌دن باخیش",
+ "translate-taction-lstats": "دیل آماری",
+ "translate-taction-mstats": "مئساژ قروپ آماری",
+ "translate-taction-export": "ائشیگه آپارماق",
+ "translate-taction-disabled": "بو ویکی‌ده بو ایش باغلانیب‌دیر.",
+ "translate-page-no-such-language": "بللندیریلمیش دیل گئچرسیزدیر.",
+ "translate-page-no-such-group": "بللندیریلمیش قروپ گئچرسیزدیر.",
+ "translate-page-disabled": "بو دیل‌ده بو گروپون چئویرمه‌سی باغلانیب‌دیر.\nدلیل:\n\n<em>$1</em>",
+ "translate-language-disabled": "بو دیله چئویرمک باغلانیب‌دیر.",
+ "translate-page-settings-legend": "تنظیملر",
+ "translate-page-group": "گروه",
+ "translate-page-language": "دیل",
+ "translate-page-limit": "سینیر",
+ "translate-page-limit-option": "صحیفه‌ده {{PLURAL:$1|بیر|$1}} مئساژ",
+ "translate-submit": "گتیر",
+ "translate-page-navigation-legend": "دولانماق",
+ "translate-page-showing": "$3 مئساژ ایچینده $1-دن $2-ه گؤستریلیر.",
+ "translate-page-showing-all": "{{PLURAL:$1|بیر|$1}} مئساژ گؤستریلیر.",
+ "translate-page-showing-none": "گؤسترمک اوچون بیر مئساژ یوخدور.",
+ "translate-next": "سونراکی صفحه",
+ "translate-prev": "قاباقکی صحیفه",
+ "translate-page-description-legend": "بو قروپ اوچون بیلگیلر",
+ "translate-page-description-hasoptional": "بو مئساژ گروپوندا، ایستگه باغلی مئساژلار واردیر.\nایستگه باغلی مئساژلار یالنیز دیلین خاص شرطلری اولاندا چئویرمه‌لی‌دیرلر، مثلاً اگر دیل‌ده سؤزجوک آراسی بوشلوق یوخدور، یا بعضی آدلار گرک چئویریله. $1",
+ "translate-page-description-hasoptional-open": "ایستگه باغلی مئساژلاری گؤستر.",
+ "translate-page-edit": "دَییشدیر",
+ "translate-optional": "(ایستگه باغلی)",
+ "translate-ignored": "(یوخ ساییلمیش)",
+ "translate-edit-title": "«$1»-ی دَییشدیر",
+ "translate-edit-definition": "مئساژ تانیتیمی",
+ "translate-edit-contribute": "چالیشماق",
+ "translate-edit-no-information": "''بو مئساژ اوچون سندلندیرمه یوخدور.''\n''اگر سیز بیلیرسیز بو مئساژ نئجه ایشلنیب‌دیر، بو مئساژی سندلندیرمک‌له، آیری ترجومه‌چیلره یاردیم ائده بیلرسیز.''",
+ "translate-edit-information": "مئساژ اوچون بیلگیلر ($1)",
+ "translate-edit-warnings": "قورتاریلمامیش چئویرمه‌لره گؤره ایخطار",
+ "translate-edit-tmmatch-source": "چئویرمک قایناق یازی‌سی: $1",
+ "translate-edit-tmmatch": "$1٪ تطبیق",
+ "translate-edit-nopermission": "سیز مئساژلاری چئویرمک اوچون ایجازه‌یه احتیاجیز واردیر.",
+ "translate-edit-askpermission": "ایجازه ایسته‌یین",
+ "translate-checks-parameters": "بو {{PLURAL:$2|پارامِتر ایشلدیلمه‌ییب‌دیر|پارامِترلر ایشلدیلمه‌ییب‌دیلر}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "بو {{PLURAL:$2|پارامِتر تانینماییب‌دیر|پارامِترلر تانینماییب‌دیلار}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "{{PLURAL:$2|پارانتز|پارانتزلر}} سایی جوت دئییل:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "بو {{PLURAL:$2|باغلانتی ایشکال‌لی‌دیر|باغلانتیلار ایشکال‌لی‌دیلار}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "بو {{PLURAL:$2|باغلانتی یوخدور|باغلانتیلار یوخدولار}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "قایناق‌دا <nowiki>{{PLURAL:}}</nowiki> ایشلنیب‌دیر، اما چئویرمه‌ده یوخ.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> اوچون {{PLURAL:$1|بیر|$1}} فورم وئریلیب‌دیر اما {{PLURAL:$2|یالنیز بیر|$2}} فورم دستکلنیر (0= و 1= فورملارینی چیخاراق).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> سونوندا عینی فورملار وئریلیب‌دیر. <nowiki>{{PLURAL:$1|قویون|قویون}}</nowiki> گرک <nowiki>{{PLURAL:$1|قویون}}</nowiki> کیمی یازیلا.",
+ "translate-checks-pagename": "آدفضاسی قایناق‌لا فرقلی‌دیر",
+ "translate-checks-format": "بو چئویرمه قایناق کیمی دئییل یادا یانلیش سینتکسی واردیر: $1",
+ "translate-checks-escape": "بو قاچیشلار تصادوفی اولا بیلرلر: <strong>$1</strong>",
+ "translate-checks-parametersnotequal": "پارامِتر سایی {{PLURAL:$1|$1}}-دیر؛ گرک {{PLURAL:$2|$2}} اولا.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> پیس فورم‌دادیر.",
+ "translate-checks-fudforum-syntax": "بو پروژه‌ده <nowiki>$2</nowiki> یئرینه <nowiki>$1</nowiki>-ی ایشلدین.",
+ "translate-pref-editassistlang": "کؤمکچی دیل‌لر:",
+ "prefs-translate": "چئویرمک سئچمه‌لری",
+ "translate-pref-editassistlang-help": "کاما ایله آیریلمیش دیل کودلاری.\nسیز چئویرنده، بو دیل‌ده مئساژلارین چئویرمه‌لری گؤستریلر.\nدیل‌لری ایلک لیستی، سیزین دیل‌لرینیزه باغلی‌دیر.",
+ "translate-pref-editassistlang-bad": "لیست‌ده گئچرسیز دیل کودو واردیر:\n<nowiki>$1</nowiki>.",
+ "right-translate": "چئویرمک آرا-اوزو ایله دَییشدیر",
+ "right-translate-manage": "مئساژ گروپلارینی ایداره ائت",
+ "action-translate-manage": "مئساژ گروپلارینی ایداره ائت",
+ "right-translate-import": "آفلاین چئویرمه‌لری گیردیر",
+ "action-translate-import": "آفلاین چئویرمه‌لری گیردیر",
+ "right-translate-messagereview": "چئویرمه‌لری گؤزدن گئچیت",
+ "right-translate-groupreview": "مئساژ گروپلارینین ایش-آخیم وضعیتینی دَییشدیر",
+ "translate-rc-translation-filter": "چئویرمه‌لری فیلترله:",
+ "translate-rc-translation-filter-no": "هئچ ایش گؤرمه",
+ "translate-rc-translation-filter-only": "یالنیز چئویرمه‌لری گؤستر",
+ "translate-rc-translation-filter-filter": "چئویرمه‌لری گؤسترمه",
+ "translate-rc-translation-filter-site": "یالنیز سایت مئساژلارینا اولان دَییشیکلیکلری گؤستر",
+ "translationstats": "چئویرمک آماری",
+ "translate-stats-edits": "دَییشدیرمه‌لر",
+ "translate-stats-users": "ترجومه‌چیلر",
+ "translate-stats-registrations": "آد یازدیرمالار",
+ "translate-stats-reviews": "گؤزدن گئچیتمه‌لر",
+ "translate-stats-reviewers": "گؤزدن گئچیردنلر",
+ "translate-statsf-intro": "بو فورم ایله ساده آمارلار یارادا بیلرسینیز.\nبوتون دَیَرلرین یوخاری و آشاغی سینیرلاری واردیر.",
+ "translate-statsf-options": "گراف سئچمه‌لری",
+ "translate-statsf-width": "پیکسِل‌ده انی:",
+ "translate-statsf-height": "پیکسِل‌ده بویو:",
+ "translate-statsf-days": "گون‌ده واختی:",
+ "translate-statsf-start": "باشلاما تاریخی:",
+ "translate-statsf-scale": "ظرافتی:",
+ "translate-statsf-scale-months": "آیلار",
+ "translate-statsf-scale-weeks": "هفته‌لر",
+ "translate-statsf-scale-days": "گونلر",
+ "translate-statsf-scale-hours": "ساعاتلار",
+ "translate-statsf-count": "اؤلچو:",
+ "translate-statsf-count-edits": "دَییشیکلیکلر سایی",
+ "translate-statsf-count-users": "فعال چئویرنلر",
+ "translate-statsf-count-registrations": "یئنی ایستیفاده‌چیلر",
+ "translate-statsf-count-reviews": "چئویرمک گؤزدن گئچیتمه‌لری",
+ "translate-statsf-count-reviewers": "گؤزدن گئچیردنلر",
+ "translate-statsf-language": "کاما ایله آیریلمیش دیل کودلار لیستی:",
+ "translate-statsf-group": "کاما ایله آیریلمیش قروپ کودلاری لیستی:",
+ "translate-statsf-submit": "اؤن‌گؤستریش",
+ "translate-tag-page-desc": "[[$2|$1]] ویکی صحیفه‌سی چئویرمه‌سی.",
+ "translate-sidebar-alltrans": "آیری دیل‌لرده",
+ "translations": "بوتون چئویرمه‌لر",
+ "translations-summary": "آشاغیدا بوتون ال‌ده اولان چئویرمه‌لری گؤسترمک اوچون مئساژ آدینی وئرین.",
+ "translate-translations-no-message": "«$1» بیر چئویریله بیلن مئساژ دئییل",
+ "translate-translations-none": "«$1» اوچون چئویرمه یوخدور",
+ "translate-translations-count": "{{PLURAL:$1|بیر|$1}} چئویرمه تاپیلدی.",
+ "translate-translations-fieldset-title": "مئساژ",
+ "translate-translations-messagename": "آد:",
+ "translate-translations-project": "پروژه:",
+ "translate-translations-including-no-param": "لوطفاً آلت‌صحیفه پارامِترینده بیر گئچرلی مئساژ آچاری بیلیندیرین.",
+ "translate-translations-history-short": "گ",
+ "languagestats": "دیل آماری",
+ "languagestats-summary": "بو صحیفه بیر دیلده اولان بوتون مئساژ گروپلاری اوچون چئویرمه آمارینی گؤسترر.",
+ "languagestats-stats-for": "$1 اوچون چئویرمه آماری ($2).",
+ "languagestats-recenttranslations": "سون چئویرمه‌لر",
+ "translate-langstats-incomplete": "بو صحیفه‌ده بعضی آمارلار باشا چاتمامیش‌دیلار. لوطفاً چوخ آمار اله گتیرمک اوچون یئنی‌دن یوکله‌یین.",
+ "translate-langstats-expand": "گئنیشلندیر",
+ "translate-langstats-collapse": "گیزلت",
+ "translate-langstats-expandall": "هامی‌سینی گؤستر",
+ "translate-langstats-collapseall": "هامیسینی گیزلت",
+ "translate-language-code": "دیلین کودو",
+ "translate-language-code-field-name": "دیلین کودو:",
+ "translate-suppress-complete": "بوتونلوکله چئویریلمیش مئساژ گروپلارینی گیزلت",
+ "translate-ls-noempty": "بوتونلوکله چئویریلمه‌میش مئساژ گروپلارینی گیزلت",
+ "translate-language": "دیل",
+ "translate-total": "مئساژلار",
+ "translate-untranslated": "چئویریلمه‌میش",
+ "translate-percentage-complete": "ایره‌لیلیش",
+ "translate-percentage-fuzzy": "تاریخی گئچمیش",
+ "translate-languagestats-overall": "بوتون مئساژ گروپلاری بیرلیکده",
+ "translate-ls-submit": "آماری گؤستر",
+ "translate-ls-column-group": "مئساژ گروپو",
+ "translate-mgs-pagename": "مئساژ قروپ آماری",
+ "translate-mgs-fieldset": "گؤسترمک سئچمه‌لری",
+ "translate-mgs-group": "مئساژ گروپو:",
+ "translate-mgs-nocomplete": "چئویرمه‌لری قورتاریلمیش دیل‌لری گؤسترمه",
+ "translate-mgs-noempty": "هئچ چئویرمه‌سی اولمایان دیل‌لری گؤسترمه",
+ "translate-mgs-submit": "آماری گؤستر",
+ "translate-mgs-column-language": "دیل",
+ "translate-mgs-totals": "بوتون دیل‌لر بیرلیک‌ده",
+ "translate-mgs-invalid-group": "بیلیندیریلمیش $1 گروپو یوخدور.",
+ "translate-mgs-nothing": "ایسته‌نیلمیش آمار اوچون گؤسترمه‌لی بیر شئی یوخدور.",
+ "supportedlanguages": "ساپورتلانان دیل‌لر",
+ "supportedlanguages-summary": "بو صحیفه {{SITENAME}}-ده دستکلنن بوتون دیل‌لرین لیستینی،\nهر دیل‌ده چالیشان چئویرن‌لرله بیرلیک‌ده گؤستریر.\nنه قدر بیر چئویرن چوخ چالیشماسی اولسا، اونون آدی یئکه‌رک گؤرسنیر.\nآلت‌خطی‌نین رنگی، چئویرنین نه قدر یاخین زامان‌دا بوردا چالیشقان اولماغینی گؤستریر.",
+ "supportedlanguages-colorlegend": "رنگ اوچون توضیح: سون چئویرمک $1 گون قاباق.",
+ "supportedlanguages-translators": "{{PLURAL:$2|بیر|$2}} چئویرن: $1",
+ "supportedlanguages-recenttranslations": "سون چئویرمه‌لر",
+ "supportedlanguages-count": "توپلام‌دا {{PLURAL:$1|بیر|$1}} دیل.",
+ "supportedlanguages-activity": "$1: {{PLURAL:$2|بیر|$2}} دَییشکلیک - سون دَییشیکلیک {{PLURAL:$3|بیر|$3}} گون قاباق",
+ "translate-jssti-add": "لیسته آرتیر",
+ "managemessagegroups": "مئساژ قروپ ایداره‌سی",
+ "translate-smg-notallowed": "سیز بو ایشی گؤرمگه ایجازه‌نیز یوخدور.",
+ "translate-smg-nochanges": "ایشله‌مک اوچون بیر دَییشیکلیک یوخدور.",
+ "translate-smg-submit": "دَییشیکلیکلری ایشله‌مگه گؤندر",
+ "translate-smg-submitted": "مئساژ قایناقلاری گؤونجل‌لنیب‌دیلر. دَییشیکلیکلر آرخادا بررسی اولونورلار.",
+ "translate-smg-left": "ویکی‌ده مئساژ محتویاتی",
+ "translate-smg-right": "قاباغا گلن دَییشیکلیکلر",
+ "translate-manage-import-diff": "مئساژ $1 | ایش: $2",
+ "translate-manage-import-new": "یئنی مئساژ: $1",
+ "translate-manage-import-deleted": "سیلینمیش مئساژ $1",
+ "translate-manage-action-import": "ایچری گتیر",
+ "translate-manage-action-conflict": "ایچری گتیر و موبهم نیشانلا",
+ "translate-manage-action-ignore": "یوخ سای",
+ "translate-manage-action-fuzzy": "چئویرمه‌لری ایچری گتیر و موبهم نیشانلا",
+ "translate-manage-nochanges": "بو قروپ اوچون قایناق مئساژلاردا بیر دَییشیکلیک یوخدور.",
+ "translate-manage-nochanges-other": "بو دیل اوچون بیر دَییشیکلیک یوخدور.\nآشاغیداکی باغلانتی‌نی قروپ بیلگیلری گؤرونتوسونه قاییتماغا ایشلده بیلرسینیز.",
+ "translate-manage-inconsistent": "ایستک‌ده توتارسیزلیق تاپیلدی.\nلوطفاً دَییشیکلیکلری یوخلایین و یئنی‌دن چالیشین.\nبیلگیلر: $1.",
+ "translate-manage-toolong": "{{PLURAL:$1|بیر|$1}} ثانیه ان چون ایشلتمه سینیری آشدی.\nلوطفاً ایشلتماغین قالانی‌نی گئتمک اوچون فورمو یئنی‌دن گؤندرین.",
+ "translate-manage-import-summary": "ائشیک قایناق‌دان بیر یئنی نوسخه ایچری گتیریلیر",
+ "translate-manage-conflict-summary": "ائشیک قایناق‌دان بیر یئنی نوسخه ایچری گتیریلیر.\nلوطفاً یوخلایین.",
+ "importtranslations": "چئویرمه‌لری ایچری گتیر",
+ "translate-import-from-local": "یئرلی فایل یوکله:",
+ "translate-import-load": "یئرلی فایل",
+ "translate-import-err-dl-failed": "فایل گتیریلنمه‌دی:\n$1",
+ "translate-import-err-ul-failed": "فایل اوغورلا یوکله‌نیلدی",
+ "translate-import-err-invalid-title": "وئریلمیش فایل آدی <nowiki>$1</nowiki> گئچرسیز ایدی.",
+ "translate-import-err-no-such-file": "<nowiki>$1</nowiki> فایلی یوخدور یادا یئرلی یوکلنیلمه‌ییب‌دیر.",
+ "translate-import-err-stale-group": "بو فایل اونا عاید اولان مئساژ گروپو یوخدور.",
+ "translate-import-err-no-headers": "فایلین ترجومه اوزانتی فورمتینده دوزگون Gettext فورمو یوخدور.\nفایل باشلیقلاریندان دیل و مئساژ گروپونو بیلمک اولمور.",
+ "translate-js-support-unsaved-warning": "سیزین قئید ائدیلمه‌میش چئویرمه‌لرینیز واردیر.",
+ "translate-gs-pos": "یئر",
+ "translate-gs-code": "کود",
+ "translate-gs-continent": "قاره",
+ "translate-gs-speakers": "دانیشانلار",
+ "translate-gs-score": "امتیاز",
+ "translate-gs-multiple": "چوخلو",
+ "translate-gs-count": "سایی",
+ "translate-gs-total": "توپلام",
+ "translate-gs-avgscore": "اورتا امتیاز",
+ "translate-documentation-language": "مئساژ سندلندیرمه‌سی",
+ "translate-searchprofile": "چئویرمه‌لر",
+ "translate-searchprofile-tooltip": "بوتون چئویرمه‌لردن آختار",
+ "translate-search-languagefilter": "دیل ایله فیلترله:",
+ "translate-search-nofilter": "فیلتر یوخ",
+ "log-name-translationreview": "چئویرمه گؤزدن گئچیتمک قئیدلری",
+ "log-description-translationreview": "بوتون چئویرمه‌لر و مئساژ گروپلاری گؤزدن گئچیتمک قئیدلری.",
+ "logentry-translationreview-message": "$1، $3 چئویرمه‌سینی {{GENDER:$2|قبول ائتدی}}",
+ "logentry-translationreview-group": "$1، $3-ین $4 ترجومه‌لرینین وضعیتی‌نی $6-دن $7-ه {{GENDER:$2|دَییشدیردی}}",
+ "translate-workflow-state-": "(وئریلمه‌میش)",
+ "translate-workflowstatus": "وضعیت: $1",
+ "translate-workflow-set-doing": "تنظیم‌لنیر...",
+ "translate-workflow-autocreated-summary": "$1 وضعیتی ایش-آخیمی اوچون اوتوماتیک صحیفه یاراتما",
+ "translate-stats-workflow": "وضعیت",
+ "translate-workflowgroup-label": "ایش-آخیمی وضعیتلری",
+ "translate-workflowgroup-desc": "بو مئساژ گروپو، چئویرمه ایش-آخیمی وضعیتلرینی گؤستریر.\nوضعیتلر، $wgTranslateWorkflowStates تنظیملر دَیَرینده تانینیبلار.",
+ "translate-dynagroup-recent-label": "سون چئویرمه‌لر",
+ "translate-dynagroup-recent-desc": "بو مئساژ قروپو، بو دیلین بوتون سون چئویرمه‌لرینی گؤستریر.\nتصحیح ائتمه ایشلرینه ایشه گلن‌دیر.",
+ "translate-dynagroup-additions-label": "سون آرتیرمالار",
+ "translate-dynagroup-additions-desc": "بو مئساژ گروپو، یئنی و دَییشدیریلمیش مئساژلاری گؤستریر.",
+ "translate-msggroupselector-projects": "مئساژ قروپو",
+ "translate-msggroupselector-search-placeholder": "گروپلاری آختار",
+ "translate-msggroupselector-search-all": "هامیسی",
+ "translate-msggroupselector-search-recent": "سوْن",
+ "translate-msggroupselector-view-subprojects": "{{PLURAL:$1|بیر|$1}} آلت‌گروپ",
+ "tux-languageselector": "بونا چئویرمک",
+ "tux-tab-all": "هامیسی",
+ "tux-tab-untranslated": "چئویریلمه‌میش",
+ "tux-tab-outdated": "تاریخی گئچمیش",
+ "tux-tab-translated": "چئویریلمیش",
+ "tux-tab-unproofread": "تصحیح ائدیلمه‌میش",
+ "tux-edit": "دَییشدیر",
+ "tux-status-optional": "ایستگه باغلی",
+ "tux-status-fuzzy": "تاریخی گئچمیش",
+ "tux-status-proofread": "یئنی‌دن باخیش",
+ "tux-status-translated": "چئویریلمیش",
+ "tux-status-saving": "قئید ائدیلیر...",
+ "tux-status-unsaved": "قئید ائدیلمه‌میش",
+ "tux-editor-paste-original-button-label": "قایناق یازی‌نی یاپیشدیرین",
+ "tux-editor-discard-changes-button-label": "دَییشدیرمه‌لری رد ائت",
+ "tux-editor-save-button-label": "چئویرمه‌نی قئید ائت",
+ "tux-editor-skip-button-label": "سونراکینا آتلان",
+ "tux-editor-confirm-button-label": "چئویرمه‌نی دوغرولا",
+ "tux-editor-shortcut-info": "قئید ائتمک اوچون «$1»-ی و سونراکینا آتلانماق اوچون «$2»-ی وورون.",
+ "tux-editor-edit-desc": "آچیقلامانی دَییشدیر",
+ "tux-editor-add-desc": "آچیقلاما آرتیر",
+ "tux-editor-suggestions-title": "اؤنریلر",
+ "tux-editor-in-other-languages": "آیری دیل‌لرده",
+ "tux-editor-need-more-help": "آرتیق یاردیم گرکلی‌دیر؟",
+ "tux-editor-ask-help": "داها بیلگی ایسته",
+ "tux-editor-tm-match": "$1٪ تطبیق",
+ "tux-notices-more": "{{PLURAL:$1|$1 داها}}",
+ "tux-notices-hide": "گیزلت",
+ "tux-editor-save-failed": "چئویرمه‌نی قئید ائتمک اولمادی: $1",
+ "tux-editor-n-uses": "$1 {{PLURAL:$1|دفعه}} ایشلدیلیب",
+ "tux-editor-message-desc-more": "آرتیق گؤر",
+ "tux-editor-message-desc-less": "آز گؤر",
+ "tux-editor-clear-translated": "چئویریلمیشی گیزلت",
+ "tux-editor-proofreading-mode": "تصحیح ائت",
+ "tux-editor-translate-mode": "لیست",
+ "tux-editor-proofreading-hide-own-translations": "اؤز چئویرمه‌لرینیزی گیزلت",
+ "tux-editor-proofreading-show-own-translations": "اؤز چئویرمه‌لرینیزی گؤستر",
+ "tux-proofread-action-tooltip": "چئویرمه‌نی قبول ائت",
+ "tux-proofread-edit-label": "دَییشدیر",
+ "tux-editor-page-mode": "صفحه",
+ "tux-editor-outdated-notice": "بو چئویرمه‌نی گونجل‌له‌مک گرکلی اولا بیلر.",
+ "tux-editor-outdated-notice-diff-link": "فرقلری گؤستر",
+ "tux-editor-doc-editor-placeholder": "مئساژ سندلندیرمه‌سی",
+ "tux-editor-doc-editor-save": "سندلندیرمه‌نی قئید ائت",
+ "tux-editor-doc-editor-cancel": "وازگئچ",
+ "tux-messagetable-more-messages": "$1 داها {{PLURAL:$1|مئساژ}}",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|مئساژ|مئساژلار}} یوکله‌نیلیر...",
+ "tux-message-filter-placeholder": "لیستی فیلترله",
+ "tux-message-filter-result": "«$2» اوچون $1 {{PLURAL:$1|نتیجه}} تاپیلدی",
+ "tux-message-filter-advanced-button": "گلیشمیش آختاریش",
+ "tux-message-filter-optional-messages-label": "ایستگه باغلی مئساژلار",
+ "tux-proofread-translated-by-self": "سیز ایله چئویریلمیش",
+ "tux-empty-list-all": "بو مئساژ قروپو بوش‌دور",
+ "tux-empty-list-all-guide": "بیر آیری مئساژ قروپو چئویرمک اوچون سئچین",
+ "tux-translate-page-no-such-group": "'''بلیرتلنمیش مئساژ قروپو یوخدور.''' لوطفاً آیریسین سئچین.",
+ "tux-empty-list-translated": "هئچ چئویریلمیش مئساژ یوخدور",
+ "tux-empty-list-translated-guide": "سیز چئویرمگه یاردیم ائده بیلرسینیز",
+ "tux-empty-list-translated-action": "چئویر",
+ "tux-empty-list-other": "چئویرمگه بیر شئی یوخدور",
+ "tux-empty-list-other-guide": "سیز قاباقجادان چئویرلمیشلری تصحیح ائتمگه یاردیم ائده بیلرسینیز",
+ "tux-empty-list-other-action": "چئویرمه‌لری تصحیح ائت",
+ "tux-empty-list-other-link": "بوتون مئساژلاری گؤستر",
+ "tux-editor-close-tooltip": "باغلا",
+ "tux-editor-expand-tooltip": "گئنیشلندیر",
+ "tux-editor-collapse-tooltip": "ییغیشلاندیر",
+ "tux-editor-loading": "یوکلنیر...",
+ "translate-search-more-languages-info": "$1 داها {{PLURAL:$1|دیل}}",
+ "translate-statsbar-tooltip": "$1٪ چئویریلیب، $2٪ تصحیح ائدیلیب",
+ "translate-statsbar-tooltip-with-fuzzy": "$1٪ چئویریلیب، $2٪ تصحیح ائدیلیب، $3٪ کؤهنه‌لنیب"
+}
diff --git a/Translate/i18n/core/ba.json b/Translate/i18n/core/ba.json
new file mode 100644
index 00000000..b1aac5e7
--- /dev/null
+++ b/Translate/i18n/core/ba.json
@@ -0,0 +1,159 @@
+{
+ "@metadata": {
+ "authors": [
+ "Assele",
+ "Haqmar",
+ "Roustammr",
+ "Ансар",
+ "Вильданова Гюзель",
+ "Ләйсән",
+ "Рустам Нурыев"
+ ]
+ },
+ "translate": "Тәржемә",
+ "translate-desc": "MediaWiki һәм башка программалар тәржемә итеү өсөн [[Special:Translate|Махсус бит]]",
+ "translate-page-no-such-language": "Тел коды дөрөҫ түгел.",
+ "translate-page-no-such-group": "Төркөм дөрөҫ күрһәтелмәгән.",
+ "translate-page-disabled": "Һайланған төркөмдә был телгә тәржемә итеү мөмкин түгел. Сәбәбе:\n<em>$1</em>",
+ "translate-page-settings-legend": "Шарттар",
+ "translate-page-group": "Төркөм",
+ "translate-page-language": "Тел",
+ "translate-page-limit": "Сикләү",
+ "translate-page-limit-option": " $1 битенә {{PLURAL:$1|хат}}",
+ "translate-submit": "Сығарырға",
+ "translate-page-navigation-legend": "Төп йүнәлештәр",
+ "translate-page-showing": "$3 яҙманан $1 - $2 эсендәгеһе сығарылған.",
+ "translate-page-showing-all": "$1 {{PLURAL:$1|хат}} күрһәтелгән.",
+ "translate-page-showing-none": "Яҙмалар юҡ.",
+ "translate-next": "Киләһе бит",
+ "translate-prev": "Алдағы бит",
+ "translate-page-description-legend": "Төркөм тураһында мәғлүмәт",
+ "translate-page-edit": "үҙгәртергә",
+ "translate-optional": "(мөһим түгел)",
+ "translate-ignored": "(иғтибарға алынмай)",
+ "translate-edit-title": "Мөхәрирләү \"$1\"",
+ "translate-edit-definition": "Яҙманың билдәләмәһе",
+ "translate-edit-contribute": "үҙгәртергә",
+ "translate-edit-no-information": "''Был яҙманың тасуирламаһы юҡ. Әгәр ҙә һеҙ был яҙманың ҡайҙа һәм нисек ҡулланылғанын белһәгеҙ, был яҙмаға тасуирлама өҫтәп, бүтән тәржемәселәргә ярҙам итә алаһығыҙ.''",
+ "translate-edit-information": "Яҙма тураһында мәғлүмәт ($1)",
+ "translate-edit-warnings": "Тулы булмаған тәржемәләр тураһында иҫкәртеү",
+ "translate-edit-tmmatch": "$1% тап килеү",
+ "translate-checks-parameters": "Түбәндәге {{PLURAL:$2|1=параметр|параметрҙар}} ҡулланылмай:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "Түбәндәге {{PLURAL:$2|1=параметр|параметрҙар}} билдәһеҙ:\n<strong>$1</strong>",
+ "translate-checks-balance": "Уң һәм һул {{PLURAL:$2|1=йәйә|йәйә}} һаны парлы түгел:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "Түбәндәге {{PLURAL:$2|1=һылтанма|$2 һылтанмалар}} ҡыйынлыҡтар тыуҙыра.\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "Түбәндәге {{PLURAL:$2|1=һылтанма|$2 һылтанмалар}} кәрәк:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Сығанаҡ <nowiki>{{PLURAL:}}</nowiki> ҡуллана, ә тәржемә ҡулланмай.",
+ "translate-checks-pagename": "Исемдәр арауығының билдәләмәһе үҙгәргән",
+ "translate-checks-format": "Был тәржемә билдәләмәһе менән тап килмәй йәки синтаксик хаталары бар: $1",
+ "translate-checks-fudforum-syntax": "Был проектта <nowiki>$2</nowiki> урынына <nowiki>$1</nowiki> ҡулланырға.",
+ "translate-pref-editassistlang": "Ярҙамсы телдәр:",
+ "prefs-translate": "Тәржемә көйләүҙәре",
+ "translate-pref-editassistlang-help": "Ошо телдәргә тәржемәләр яҙмаларҙы үҙгәрткән ваҡытта күрһәтеләсәк.\nҒәҙәттәге исемлек һеҙ һайлаған телгә бәйле.",
+ "translate-pref-editassistlang-bad": "Исемлектәге тел коды дөрөҫ түгел:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Тәржемә интерфейсы ярҙамында үҙгәртеү",
+ "right-translate-manage": "Тәржемә төркөмдәрен мөхәррирләү",
+ "right-translate-import": "Offline тәржемәләрҙе индереү",
+ "translate-rc-translation-filter": "Тәржемәләрҙе һайлап алырға:",
+ "translate-rc-translation-filter-no": "Барыһы ла",
+ "translate-rc-translation-filter-only": "Тәржемәләр генә",
+ "translate-rc-translation-filter-filter": "Тәржемәләрҙән башҡалар",
+ "translate-rc-translation-filter-site": "Cайттың система яҙмалары ғына",
+ "translationstats": "Тәржемәләр статистикаһы",
+ "translate-stats-edits": "Үҙгәртеүҙәр",
+ "translate-stats-users": "Тәржемәселәр",
+ "translate-stats-registrations": "Теркәүҙәр",
+ "translate-statsf-intro": "Был формала ябай статистика рәсеме ҡарарға мөмкин.\nСтатистика сиктәрен бөтә параметрҙар буйынса билдәләргә була.",
+ "translate-statsf-options": "Рәсемде көйләү",
+ "translate-statsf-width": "Киңлек (пикселдарҙа)",
+ "translate-statsf-height": "Бейеклек (пикселдарҙа)",
+ "translate-statsf-days": "Ваҡыт арауығы (көндәрҙә)",
+ "translate-statsf-start": "Ваҡыт арауығы (көндәрҙә)",
+ "translate-statsf-scale": "Ентеклелек дәрәжәһе",
+ "translate-statsf-scale-months": "Айҙар",
+ "translate-statsf-scale-weeks": "Аҙналар",
+ "translate-statsf-scale-days": "Көндәр",
+ "translate-statsf-scale-hours": "Сәғәттәр",
+ "translate-statsf-count": "Үлсәм",
+ "translate-statsf-count-edits": "Үҙгәртеүҙәр һаны",
+ "translate-statsf-count-users": "Әүҙем тәржемәселәр һаны",
+ "translate-statsf-count-registrations": "Яңы ҡатнашыусылар",
+ "translate-statsf-language": "Тел кодтары өтөр аша:",
+ "translate-statsf-group": "Төркөм кодтары өтөр аша:",
+ "translate-statsf-submit": "Ҡарап сығырға",
+ "translate-tag-page-desc": "[[$2|$1]] вики-битенең тәржемәһе",
+ "translate-sidebar-alltrans": "Башҡа телдәрҙә",
+ "translations": "Бөтә тәржемәләр",
+ "translations-summary": "Бөтә мөмкин булған телдәрҙә тәржемәләр сығарыр өсөн, яҙманың исемен керетегеҙ.",
+ "translate-translations-no-message": "\"$1\" - тәржемә ителә торған яҙма түгел",
+ "translate-translations-none": "\"$1\" өсөн тәржемәләр юҡ",
+ "translate-translations-count": "{{PLURAL:$1|1=Бер тәржемә|$1 тәржемә}} табылды.",
+ "translate-translations-fieldset-title": "Яҙма",
+ "translate-translations-messagename": "Исем",
+ "translate-translations-project": "Проект:",
+ "translate-translations-including-no-param": "Зинһар, эске биттең параметры рәүешендә яҙманың асҡысын күрһәтегеҙ",
+ "translate-translations-history-short": "т",
+ "languagestats": "Тел статистикаһы",
+ "languagestats-summary": "Был биттә бөтә төркөмдәр өсөн һайланған телдә тәржемәләр статистикаһы күрһәтелгән.",
+ "languagestats-stats-for": "$1 теле өсөн тәржемәләр статистикаһы ($2).",
+ "languagestats-recenttranslations": "яңыраҡ эшләнгән тәржемәләр",
+ "translate-langstats-expand": "асырға",
+ "translate-langstats-collapse": "төрөргә",
+ "translate-langstats-expandall": "барыһын да асырға",
+ "translate-langstats-collapseall": "барыһын да төрөргә",
+ "translate-language-code": "Тел коды",
+ "translate-language-code-field-name": "Тел коды:",
+ "translate-suppress-complete": "Тулыһынса тәржемә ителгән төркөмдәрҙе күрһәтмәҫкә",
+ "translate-language": "Тел",
+ "translate-total": "Яҙмалар",
+ "translate-untranslated": "Тәржемә ителмәгәндәр",
+ "translate-percentage-complete": "Тәржемә ителгәндәр",
+ "translate-percentage-fuzzy": "Иҫкергән",
+ "supportedlanguages": "Ҡулланылған телдәр",
+ "supportedlanguages-summary": "Был биттә {{SITENAME}} проектында ҡулланылған телдәр һәм был телдәр өҫтөндә эшләүсе тәржемәселәр исемлеге килтерелгән.\nӘгәр ниндәйҙер тел тураһында тулыраҡ мәғлүмәт алырға теләһәгеҙ, шул телдең порталы һылтанмаһына баҫығыҙ.\nБерәй тәржемәсе исеменә баҫһағыҙ, шул тәржемәсенең битенә эләгерһегеҙ.\n\nӘгәр ниндәй ҙә булһа тел исемлектә килтерелмәгән икән, һеҙ ошо телгә локалләштереүҙе \"[[Translating:Process|Яңы тел]]\" битендә башлай алаһығыҙ.\n\nӘгәр һеҙ ниндәй ҙә булһа телгә тәржемә итәһегеҙ һәм һеҙҙең исемегеҙ тәржемәселәр исемлегендә юҡ икән, зинһар, исемегеҙҙе был телдең [[:Category:Languages|порталында]] тәржемәселәр исемлегенә өҫтәгеҙ.\nҺеҙҙең көйләүҙәрегеҙҙәге тел порталына һылтанманы менюла табырға була.",
+ "supportedlanguages-translators": "{{PLURAL:$2|1=Тәржемәсе|Тәржемәселәр}}: $1",
+ "supportedlanguages-recenttranslations": "яңыраҡ эшләнгән тәржемәләр",
+ "translate-jssti-add": "Исемлеккә өҫтәргә",
+ "managemessagegroups": "Яҙмалар төркөмдәре менән идара итеү",
+ "translate-manage-import-diff": "$1 яҙмаһы: $2",
+ "translate-manage-import-new": "Яңы яҙма: $1",
+ "translate-manage-import-deleted": "Юйылған яҙма: $1",
+ "translate-manage-action-import": "Тейәргә",
+ "translate-manage-action-conflict": "Индереү һәм хаталар",
+ "translate-manage-action-ignore": "Иғтибарһыҙ ҡалдырырға",
+ "translate-manage-action-fuzzy": "Индереү һәм хаталы тәржемәләр",
+ "translate-manage-nochanges": "Был төркөм өсөн яҙма билдәмәләрендә бер үҙгәреш тә юҡ.",
+ "translate-manage-nochanges-other": "Был телдә бер ниндәй ҙә үҙгәрештәр юҡ.\nТөркөм тураһында мәғләмәт битенә ҡайтыу өсөн түбәндәге һылтанмаға баҫығыҙ.",
+ "translate-manage-inconsistent": "Һорауҙа тап килмәүҙәр бар.\nЗинһар үҙгәрештәрҙе тикшерегеҙ һәм ҡабатлап ҡарағыҙ.\nЕнтеклерәк: $1.",
+ "translate-manage-toolong": "$1 һорауында мөмкин булған үтәү ваҡыты — {{PLURAL:$1|1=секунд|секунд}} үтте.\nДауам итеү өсөн, форма мәғлүмәтен ҡабаттан ебәрегеҙ, зинһар.",
+ "translate-manage-import-summary": "Тышҡы сығанаҡтан яңы өлгө индереү",
+ "translate-manage-import-ignore": "$1 яҙмаһын ҡалдырыу.",
+ "translate-manage-conflict-summary": "Тышҡы сығанаҡтан яңы өлгө индереү.\nЗинһар, тикшерегеҙ.",
+ "translate-manage-submit": "Үтәргә",
+ "translate-manage-intro-other": "Түбәндә — $1 теленә тәржемә үҙгәрештәре исемлеге.\nҺәр тәржемә өсөн үҙгәрештәрҙе тикшерегеҙ һәм был тәржемә менән ни эшләргә теләгәнегеҙҙе һайлағыҙ, зинһар.\nӘгәр һеҙ үҙгәрештәрҙе иғтибарһыҙ ҡалдырһағыҙ, улар икенсе сығарыуға күсереләсәк.",
+ "translate-manage-import-ok": "$1 битенең яңы өлгөһө индерелгән.",
+ "translate-manage-import-done": "Барыһы ла үтәлде!",
+ "importtranslations": "Тәржемәләрҙе индереү",
+ "translate-import-from-local": "Урындағы файлды индерергә:",
+ "translate-import-load": "Файлды индерергә:",
+ "translate-import-err-dl-failed": "Файлды индереү мөмкин түгел:\n$1",
+ "translate-import-err-ul-failed": "Файлды индереп булманы",
+ "translate-import-err-invalid-title": "Күрһәтелгән файл исеме <nowiki>$1</nowiki> дөрөҫ түгел.",
+ "translate-import-err-no-such-file": "Файл <nowiki>$1</nowiki> юҡ йәки урында индерелмәгән.",
+ "translate-import-err-stale-group": "Был файлға ҡараған яҙмалар төркөмө юҡ.",
+ "translate-import-err-no-headers": "Файл —Translate киңәйеүе форматында дөрөҫ Gettext-файл түгел:\nФайлдың башлыҡтарынан төркөмдө һәм телде билдәләп булмай.",
+ "translate-gs-pos": "Урын",
+ "translate-gs-code": "Код",
+ "translate-gs-continent": "Донъя өлөшө",
+ "translate-gs-speakers": "Һөйләшеүселәр",
+ "translate-gs-score": "Билдә",
+ "translate-gs-multiple": "Бер нисә",
+ "translate-gs-count": "Һан",
+ "translate-gs-total": "Барыһы",
+ "translate-gs-avgscore": "Уртаса билдә",
+ "translate-documentation-language": "Яҙмалар документтары",
+ "translate-searchprofile": "Тәржемәләр",
+ "translate-search-languagefilter": "Тел буйынса фильтр:",
+ "translate-search-nofilter": "Фильтрһыҙ",
+ "tux-nojs": "Был ҡорал JavaScript-һыҙ эшләмәй."
+}
diff --git a/Translate/i18n/core/ban-bali.json b/Translate/i18n/core/ban-bali.json
new file mode 100644
index 00000000..670e0b4f
--- /dev/null
+++ b/Translate/i18n/core/ban-bali.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chinamoonroll"
+ ]
+ },
+ "supportedlanguages": "ᬪᬲᬳᬓ᭄ᬢᬶᬧ᭄",
+ "translate-documentation-language": "ᬤᭀᬓᬸᬫᬾᬦ᭄ᬢᬲᬶᬲᬾᬯᬮ"
+}
diff --git a/Translate/i18n/core/ban.json b/Translate/i18n/core/ban.json
new file mode 100644
index 00000000..632ac0cc
--- /dev/null
+++ b/Translate/i18n/core/ban.json
@@ -0,0 +1,230 @@
+{
+ "@metadata": {
+ "authors": [
+ "Carma citrawati",
+ "Chinamoonroll",
+ "Joseagush",
+ "NoiX180"
+ ]
+ },
+ "translate": "Pangalihan Basa",
+ "translate-extensionname": "Pangalihan Basa",
+ "translate-desc": "[[Special:Translate|Kaca kusus]] antuk nyalinin basa MediaWiki miwah sané liyanan",
+ "translate-fuzzybot-desc": "Niki akun sistem kusus sané kaanggén olij [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate éksténsi Pangalihan Basa] MediaWiki antuk ngalola pangalihan basa. Akun puniki pahan saking piranti lunak MediaWiki miwah nénten kaduénang olih sapa sang anganggé.",
+ "translate-taskui-export-to-file": "Ékspor ring format sujati",
+ "translate-taskui-export-as-po": "Ékspor antuk pangalih basa luring",
+ "translate-taction-translate": "Pangalihan Basa",
+ "translate-taction-proofread": "Turéksa",
+ "translate-taction-lstats": "Statistik basa",
+ "translate-taction-mstats": "Statistik seka sewala",
+ "translate-taction-export": "Ékspor",
+ "translate-taction-disabled": "Parilaksana puniki kapademang ring wiki puniki.",
+ "translate-page-no-such-language": "Basa sané kanikayang tan patut.",
+ "translate-page-no-such-group": "Seka sané kapilih nénten patut.",
+ "translate-page-disabled": "Pangalihan basa seka séwala nuju basa puniki sampun kapademang.\nHawanan:\n\n<em>$1</em>",
+ "translate-language-disabled": "Pangalih basa nuju basa puniki sampun kapademang.",
+ "translate-page-settings-legend": "Setélan",
+ "translate-page-group": "Seka",
+ "translate-page-language": "Basa",
+ "translate-page-limit": "Wates",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|séwala}} per kaca",
+ "translate-submit": "Ambil",
+ "translate-page-navigation-legend": "Navigasi",
+ "translate-page-showing": "Nyingakang séwala saking $1 nganti $2 saking $3.",
+ "translate-page-showing-all": "Ngédéngang $1 {{PLURAL:$1|séwala}}.",
+ "translate-page-showing-none": "Nénten wénten séwala sané kasinahang",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "Kaca salanturnyané",
+ "translate-prev": "Kaca sadurungnyané",
+ "translate-page-description-legend": "Pidarta indik golongané",
+ "translate-page-description-hasoptional-open": "Sinahang séwala dadi-dadi.",
+ "translate-page-edit": "uah",
+ "translate-optional": "(dadi-dadi)",
+ "translate-ignored": "(bangyang)",
+ "translate-edit-title": "Uah \"$1\"",
+ "translate-edit-definition": "Dépinisi séwala",
+ "translate-edit-contribute": "pituut",
+ "translate-edit-information": "Pidarta indik séwala ($1)",
+ "translate-edit-warnings": "Paingetan indik pangalihan basa durung jangkep",
+ "translate-edit-tmmatch-source": "Téks wit pangalihan basa: $1",
+ "translate-edit-tmmatch": "$1% pateh",
+ "translate-edit-askpermission": "Tunas lugra",
+ "exporttranslations": "Ékspor pangalihan basa",
+ "translate-export-form-format": "Pormat",
+ "translate-export-not-supported": "Ékspor pangalihan basa tan kadukung.",
+ "translate-checks-replacement": "Anggén $2 nénten ja $1.",
+ "translate-pref-editassistlang": "Basa panunjang:",
+ "prefs-translate": "Opsi pangalihan basa",
+ "right-translate": "Uah nganggé antarmuka pangalihan basa",
+ "action-translate": "uah nganggén antarmuka pangalihan basa",
+ "right-translate-manage": "Kalola seka séwala",
+ "action-translate-manage": "kalola seka séwala",
+ "right-translate-import": "Impor pangalihan basa luring",
+ "action-translate-import": "impor pangalihan basa luring",
+ "right-translate-messagereview": "Turéksa pangalihan basa",
+ "action-translate-messagereview": "turéksa pangalihan basa",
+ "translate-rcfilters-translations": "Pangalihan Basa",
+ "translate-rcfilters-translations-only-label": "Pangalihan Basa",
+ "translate-rcfilters-translations-only-desc": "Pagentosan nuju kaca kaalih basa.",
+ "translate-rcfilters-translations-filter-label": "Nénten panglihan basa",
+ "translate-rcfilters-translations-site-label": "Séwala situs",
+ "translate-rc-translation-filter": "Saring pangalihan basa:",
+ "translate-rc-translation-filter-only": "Sinahang wantah pangalihan basa",
+ "translationstats": "Statistik pangalihan basa",
+ "translate-stats-edits": "Uahan",
+ "translate-stats-users": "Pangalih Basa",
+ "translate-stats-registrations": "Pendaptaran",
+ "translate-stats-reviews": "Turéksan",
+ "translate-stats-reviewers": "Sang nuréksa",
+ "translate-statsf-options": "Opsi bagan",
+ "translate-statsf-width": "Linggah ring piksel:",
+ "translate-statsf-height": "Tegeh ring piksel:",
+ "translate-statsf-days": "Periode kala ring rahina:",
+ "translate-statsf-start": "Tanggal ngawitin:",
+ "translate-statsf-scale": "Granularitas:",
+ "translate-statsf-scale-years": "Warsa",
+ "translate-statsf-scale-months": "Sasih",
+ "translate-statsf-scale-weeks": "Pekan",
+ "translate-statsf-scale-days": "Rahina",
+ "translate-statsf-scale-hours": "Jam",
+ "translate-statsf-count": "Ukuran:",
+ "translate-statsf-count-edits": "Akéh uahan",
+ "translate-statsf-count-users": "Pangalih basa aktip",
+ "translate-statsf-count-registrations": "Sang anganggé anyar",
+ "translate-statsf-count-reviews": "Turéka pangalihan basa",
+ "translate-statsf-count-reviewers": "Panuréksa",
+ "translate-statsf-submit": "Pracingak",
+ "translate-tag-page-desc": "Alih basa saking kaca wiki [[$2|$1]] ring basa $3 ($4).",
+ "translate-sidebar-alltrans": "Ring basa lianan",
+ "translations": "Sinamian pangalihan basa",
+ "translate-translations-count": "Katemu {{PLURAL:$1|asiki pangalihan basa|$1 pangalihan basa}}.",
+ "translate-translations-fieldset-title": "Séwala",
+ "translate-translations-messagename": "Aran:",
+ "translate-translations-project": "Proyék:",
+ "translate-translations-history-short": "l",
+ "languagestats": "Statistik basa",
+ "languagestats-summary": "Kaca puniki nyinahang statistik panyalinan antuk sinamian seka séwala ring satunggil basa katentu.",
+ "languagestats-recenttranslations": "pangalihan basa mangkin",
+ "translate-language-code": "Kode basa",
+ "translate-language-code-field-name": "Kode basa:",
+ "translate-language": "Basa",
+ "translate-total": "Séwala",
+ "translate-untranslated": "Durung kaalih basa",
+ "translate-percentage-complete": "Puput",
+ "translate-percentage-fuzzy": "Kaliwat masan",
+ "translate-percentage-proofread": "Katuréksa",
+ "translate-languagestats-overall": "Samian seka séwala sarengan",
+ "translate-ls-submit": "Sinahang statistik",
+ "translate-ls-column-group": "Seka séwala",
+ "translate-mgs-pagename": "Statistik seka sewala",
+ "translate-mgs-group": "Seka séwala:",
+ "translate-mgs-submit": "Sinahang statistik",
+ "translate-mgs-column-language": "Basa",
+ "supportedlanguages": "Basa aktip",
+ "supportedlanguages-portallink": "[$1] $2 - $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-sqlite-error": "SQLite tan kadukung",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Pangalih Basa}}|Pangalih Basa}}: $1",
+ "supportedlanguages-recenttranslations": "pangalihan basa mangkin",
+ "supportedlanguages-count": "Akéh nyané wénten $1 {{PLURAL:$1|basa}}.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|uahan}} - uahan untat $3 {{PLURAL:$3|rahina}} sané ungkur",
+ "translate-jssti-add": "Weweh nuju lis",
+ "translate-smg-rename-select": "Pilih",
+ "translate-smg-rename-cancel": "Wangdé",
+ "translate-smg-rename-new": "Weweh dados anyar...",
+ "translate-smg-rename-rename": "Weweh dados karanin malih saking...",
+ "translate-smg-strong-sync-help": "Wantuan",
+ "translate-smg-group-message-action-history": "Lelintihan",
+ "translate-smg-group-action-resolve": "Cihna dados katuréksa",
+ "translate-smg-group-message-tag-outdated": "Kaliwat masan",
+ "translate-smg-group-message-tag-rename": "Gentos aran",
+ "translate-smg-group-message-message-other-langs": "Basa liyanan:",
+ "translate-smg-loading": "Ngamuat...",
+ "translate-manage-import-new": "Besen anyar $1",
+ "translate-manage-action-import": "Impor",
+ "translate-manage-action-conflict": "Impor miwah cauh",
+ "translate-manage-action-fuzzy": "Impor miwah pangalihan basa cauh",
+ "translate-manage-action-rename": "Gentos aran",
+ "translate-manage-import-summary": "Ngimpor vérsi anyar saking wit jaba",
+ "translate-manage-conflict-summary": "Ngimpor vérsi anyar saking wit jaba.\nDurus turéksa",
+ "translate-manage-import-ok": "Kaimpor: $1",
+ "translate-manage-import-done": "Impor puput!",
+ "importtranslations": "Impor pangalihan basa",
+ "translate-gs-pos": "Pos.",
+ "translate-gs-code": "Kode",
+ "translate-gs-continent": "Banua",
+ "translate-gs-speakers": "Panutur",
+ "translate-gs-score": "Biji",
+ "translate-gs-multiple": "Makéh",
+ "translate-gs-count": "Akéh",
+ "translate-gs-total": "Total",
+ "translate-gs-avgscore": "Rerata biji",
+ "translate-documentation-language": "Dokuméntasi séwala",
+ "translate-search-languagefilter": "Saring mawit basa:",
+ "translate-workflowstatus": "Indik: $1",
+ "translate-msggroupselector-projects": "Seka séwala",
+ "translate-msggroupselector-search-placeholder": "Rereh seka",
+ "translate-msggroupselector-search-all": "Sinamian",
+ "translate-msggroupselector-search-recent": "Mangkin",
+ "tux-languageselector": "Pangalihan basa nuju",
+ "tux-tab-all": "Sinamian",
+ "tux-tab-untranslated": "Durung kaalih basa",
+ "tux-tab-outdated": "Kaliwat masan",
+ "tux-tab-translated": "Kaalih basa",
+ "tux-tab-unproofread": "Durung katuréksa",
+ "tux-edit": "Uah",
+ "tux-status-optional": "Dadi-dadi",
+ "tux-status-fuzzy": "Kaliwat masan",
+ "tux-status-proofread": "Katuréksa",
+ "tux-status-translated": "Kaalih basa",
+ "tux-status-saving": "Nyobyahang...",
+ "tux-status-unsaved": "Durung kasobyahang",
+ "tux-editor-editsummary-placeholder": "Terangang uahan ragané (opsional)",
+ "tux-editor-paste-original-button-label": "Témplék wit téks",
+ "tux-editor-discard-changes-button-label": "Kutang uahan",
+ "tux-editor-save-button-label": "Sobyahang alih basa",
+ "tux-editor-skip-button-label": "Liwatin nuju salanturné",
+ "tux-editor-cancel-button-label": "Wangdé",
+ "tux-editor-confirm-button-label": "Konpirmasi alih basa",
+ "tux-editor-proofread-button-label": "Cihna dados katuréksa",
+ "tux-editor-edit-desc": "Uah dokuméntasi",
+ "tux-editor-latest-updates-title": "Uahan pinih untat",
+ "tux-editor-all-changes": "Makejang uahan",
+ "tux-editor-in-other-languages": "Ring basa lianan",
+ "tux-editor-need-more-help": "Ngarereh wantuan malih?",
+ "tux-editor-ask-help": "Matakén antuk inpormasi langkung",
+ "tux-editor-tm-match": "$1% pateh",
+ "tux-notices-hide": "engkebang",
+ "tux-editor-n-uses": "kaanggén {{PLURAL:$1|ping}} $1",
+ "tux-editor-message-desc-more": "Cingak malih",
+ "tux-editor-clear-translated": "Engkebang sané sampun sampun kaalih basa",
+ "tux-editor-proofreading-mode": "Turéksa",
+ "tux-editor-translate-mode": "Lis",
+ "tux-editor-proofreading-hide-own-translations": "Engkebang pangalihan basa Ida",
+ "tux-proofread-action-tooltip": "Cihna dados katuréksa",
+ "tux-proofread-edit-label": "Uah",
+ "tux-editor-page-mode": "Kaca",
+ "tux-editor-doc-editor-cancel": "Wangdé",
+ "tux-message-filter-placeholder": "Saring lis",
+ "tux-message-filter-advanced-button": "Rerehan lantur",
+ "tux-message-filter-optional-messages-label": "Séwala opsional",
+ "tux-proofread-translated-by-self": "Kaalih basa olih Ida",
+ "tux-empty-list-translated-guide": "Ida prasida ngawantu ngalihang basa",
+ "tux-empty-list-translated-action": "Pangalihan Basa",
+ "tux-empty-no-outdated-messages": "Tén wénten besen kuna",
+ "tux-empty-you-can-help-providing": "Ida prasida ngawantu nyadiayang pangalihan basa anyar",
+ "tux-empty-you-can-review-already-proofread": "Ragané prasida nuréksa pangalihan basa sané katuréksa olih jadma liyanan.",
+ "tux-empty-list-other-guide": "Ida prasida ngawantu turéksa pangalihan basa sané sampun wénten",
+ "tux-empty-list-other-link": "Sinahang makasami séwala",
+ "tux-editor-close-tooltip": "Sineb",
+ "tux-editor-message-tools-history": "Lelintihan",
+ "tux-editor-message-tools-delete": "Usap",
+ "tux-editor-message-tools-translations": "Sinamian pangalihan basa",
+ "tux-editor-loading": "Ngamuat...",
+ "translate-statsbar-tooltip": "$1% sampun kaalih basa, $2% sampun katuréksa",
+ "specialpages-group-translation": "Pangalihan Basa",
+ "translate-messagebundle-error-key-too-long": "Sereg \"$1\" bes lantang",
+ "translate-messagebundle-error-key-invalid-characters": "Sereg \"$1\" medaging karakter sané nénten kalugra",
+ "translate-messagebundle-error-invalid-value": "Sereg \"$1\" nénten madaging aji string",
+ "translate-messagebundle-error-empty-value": "Sereg \"$1\" nénten ngelah aji"
+}
diff --git a/Translate/i18n/core/bar.json b/Translate/i18n/core/bar.json
new file mode 100644
index 00000000..13577d66
--- /dev/null
+++ b/Translate/i18n/core/bar.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bua333",
+ "Joe Watzmo",
+ "Mucalexx"
+ ]
+ },
+ "translate": "Ibasetzn",
+ "translate-desc": "Dagänzd a [[Special:Translate|Speziaalseiten]] zan Ywersétzen vah d' MediaWiki-Systémnoochrichtner und dénen eanerre weidern Auhwendunger.",
+ "translate-taction-translate": "Ibasetzn",
+ "translate-taction-proofread": "Korrekdualesen",
+ "translate-taction-lstats": "Statistikn zua Sproch",
+ "translate-taction-mstats": "Statistikn zua Nochrichtngruppm",
+ "translate-taction-export": "Exportian",
+ "translate-taction-disabled": "De Aktion is in em Wiki deaktiviad.",
+ "translate-page-language": "Sprooch",
+ "translate-page-limit": "Limit",
+ "translate-submit": "Hoin",
+ "translate-edit-information": "Informazión zur da Systémnoochricht ($1)",
+ "translationstats": "Staatistiken zua d' Ywersétzungen",
+ "translate-sidebar-alltrans": "Auf åndre Sproochen",
+ "translations": "Olle Ywersetzungen",
+ "languagestats": "Staatistiken zur Sprooch",
+ "translate-langstats-expandall": "olle auskloppm",
+ "translate-language": "Sprooch",
+ "supportedlanguages-recenttranslations": "Aktuelle Ywersétzungen",
+ "translate-searchprofile": "Ywersétzungen",
+ "translate-searchprofile-tooltip": "Suach in Iwasetzunga",
+ "tux-editor-expand-tooltip": "Auskloppn",
+ "tux-editor-collapse-tooltip": "eikloppn"
+}
diff --git a/Translate/i18n/core/bbc-latn.json b/Translate/i18n/core/bbc-latn.json
new file mode 100644
index 00000000..26402d07
--- /dev/null
+++ b/Translate/i18n/core/bbc-latn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Salomo Christian Hutajulu"
+ ]
+ },
+ "translate-documentation-language": "Dokumentasi ni tona"
+}
diff --git a/Translate/i18n/core/bci.json b/Translate/i18n/core/bci.json
new file mode 100644
index 00000000..82b4cb56
--- /dev/null
+++ b/Translate/i18n/core/bci.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kjeanclaude"
+ ]
+ },
+ "translate-documentation-language": "Ndè i sou floua"
+}
diff --git a/Translate/i18n/core/bcl.json b/Translate/i18n/core/bcl.json
new file mode 100644
index 00000000..59ef8cb2
--- /dev/null
+++ b/Translate/i18n/core/bcl.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Filipinayzd",
+ "Geopoet"
+ ]
+ },
+ "translate": "Sangliân",
+ "translate-submit": "Kûanón",
+ "translate-next": "Sunod na páhina",
+ "translate-prev": "Nakaaging páhina",
+ "translate-optional": "(opsyonal)",
+ "translate-documentation-language": "Dokumentasyon kan mensahe",
+ "tux-session-expired": "Ika dae na tabi nakalaog. Pakilaog na sana sa sarong separadong tab. Sa alternatibong paagi, humimo nin sarong kopya kan dae pa natatagamang mga dakit-taramon, maglaog, magbalik sa pahinang ini asin ilaog giraray an saimong dinakit-taramon."
+}
diff --git a/Translate/i18n/core/be-tarask.json b/Translate/i18n/core/be-tarask.json
new file mode 100644
index 00000000..d3676a33
--- /dev/null
+++ b/Translate/i18n/core/be-tarask.json
@@ -0,0 +1,329 @@
+{
+ "@metadata": {
+ "authors": [
+ "EugeneZelenko",
+ "Jim-by",
+ "Red Winged Duck",
+ "Renessaince",
+ "Shirayuki",
+ "Wizardist",
+ "Zedlik"
+ ]
+ },
+ "translate": "Пераклад",
+ "translate-extensionname": "Перакласьці",
+ "translate-desc": "[[Special:Translate|Спэцыяльная старонка]] для перакладу MediaWiki і іншых праграмаў",
+ "translate-taskui-export-to-file": "Экспартаваць у родным фармаце",
+ "translate-taskui-export-as-po": "Экспартаваць для оф-лайнавага перакладу",
+ "translate-taction-translate": "Пераклад",
+ "translate-taction-proofread": "Вычытка",
+ "translate-taction-lstats": "Статыстыка па мове",
+ "translate-taction-mstats": "Статыстыка груп паведамленьняў",
+ "translate-taction-export": "Экспарт",
+ "translate-taction-disabled": "Гэтае дзеяньне выключанае ў гэтай вікі.",
+ "translate-page-no-such-language": "Пададзеная няслушная мова.",
+ "translate-page-no-such-group": "Пададзеная няслушная група.",
+ "translate-page-disabled": "Пераклады на гэту мову ў гэтай групе былі адключаны. Прычына:\n\n<em>$1</em>",
+ "translate-language-disabled": "Пераклад на гэтую мову адключаны.",
+ "translate-page-settings-legend": "Парамэтры",
+ "translate-page-group": "Група",
+ "translate-page-language": "Мова",
+ "translate-page-limit": "Ліміт",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|паведамленьне|паведамленьні|паведамленьняў}} на старонцы",
+ "translate-submit": "Паказаць",
+ "translate-page-navigation-legend": "Навігацыя",
+ "translate-page-showing": "Паказаныя паведамленьні з $1 да $2 з $3.",
+ "translate-page-showing-all": "{{PLURAL:$1|Паказанае $1 паведамленьне|Паказаныя $1 паведамленьні|Паказаныя $1 паведамленьняў}}.",
+ "translate-page-showing-none": "Няма паведамленьняў для паказу.",
+ "translate-next": "Наступная старонка",
+ "translate-prev": "Папярэдняя старонка",
+ "translate-page-description-legend": "Інфармацыя пра групу",
+ "translate-page-description-hasoptional": "Гэтая група паведамленьняў утрымлівае неабавязковыя паведамленьні.\nНеабавязковыя паведамленьні мусяць перакладацца толькі ў тым выпадку, калі Вашая мова мае асаблівыя патрабаваньні, кшталту напісаньня без прагалаў, ці трансьлітарацыі ўласных імёнаў ці назваў. $1",
+ "translate-page-description-hasoptional-open": "Паказаць неабавязковыя паведамленьні.",
+ "translate-page-edit": "рэдагаваць",
+ "translate-optional": "(неабавязковае)",
+ "translate-ignored": "(ігнараванае)",
+ "translate-edit-title": "Рэдагаваньне «$1»",
+ "translate-edit-definition": "Тэкст паведамленьня",
+ "translate-edit-contribute": "рэдагаваць",
+ "translate-edit-no-information": "<em>Гэтае паведамленьне ня мае дакумэнтацыі.\nКалі Вы ведаеце, дзе ці як выкарыстоўваецца гэтае паведамленьне, то Вы можаце дапамагчы іншым перакладчыкам, дадаўшы дакумэнтацыю да гэтага паведамленьня.</em>",
+ "translate-edit-information": "Інфармацыя пра паведамленьне ($1)",
+ "translate-edit-warnings": "Папярэджаньне аб няпоўных перакладах",
+ "translate-edit-tmmatch-source": "Тэкст крыніцы перакладу: $1",
+ "translate-edit-tmmatch": "$1% супадзеньне",
+ "translate-edit-nopermission": "Для перакладу паведамленьняў неабходныя правы перакладніка.",
+ "translate-edit-askpermission": "Атрымаць дазвол",
+ "exporttranslations": "Экспарт перакладаў",
+ "translate-export-form-format": "Фармат",
+ "translate-checks-parameters": "{{PLURAL:$2|1=Наступны парамэтар не выкарыстоўваецца|Наступныя парамэтры не выкарыстоўваюцца}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|1=Невядомы парамэтар|Невядомыя парамэтры}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "Няпарная колькасьць {{PLURAL:$2|дужкі|дужак|дужак}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|1=Праблематычная спасылка|Праблематычныя спасылкі}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Адсутнічае наступная $2 спасылка|Адсутнічаюць наступныя $2 спасылкі|Адсутнічаюць наступныя $2 спасылак}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Крынічны тэкст выкарыстоўвае <nowiki>{{PLURAL:}}</nowiki>, а пераклад — не.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> быў выкарыстаны {{PLURAL:$1|1=з адной формай|з $1 формамі}}, але {{PLURAL:$2|падтрымліваецца $2 форма|падтрымліваюцца $2 формы|падтрымліваюцца $2 формаў}} (за выняткам формаў 0= і 1=).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> мае аднолькавыя формы на канцы. <nowiki>{{PLURAL:$1|мэтро|мэтро}}</nowiki> мусіць быць замененае на <nowiki>{{PLURAL:$1|мэтро}}</nowiki>.",
+ "translate-checks-pagename": "Прастора назваў зьмененая ў крынічным тэксьце",
+ "translate-checks-format": "Гэты пераклад няслушна перакладае крынічны тэкст альбо ўтрымлівае сынтаксычныя памылкі: $1",
+ "translate-checks-escape": "{{PLURAL:$2|Гэты мадыфікацыйны сымбаль можа быць выпадковым|Гэтыя мадыфікацыйныя сымбалі могуць быць выпадковымі}}: <strong>$1</strong>. {{PLURAL:$4|Патрэбны мадыфікацыйны сымбаль —|Патрэбныя мадыфікацыйныя сымбалі ўключаюць}} $3.",
+ "translate-checks-parametersnotequal": "Колькасьць парамэтраў — {{PLURAL:$1|$1}}, а мусіць быць — $2.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> няслушны.",
+ "translate-checks-fudforum-syntax": "Выкарыстоўваць <nowiki>$1</nowiki> замест <nowiki>$2</nowiki> у гэтым праекце.",
+ "translate-pref-editassistlang": "Дапаможныя мовы:",
+ "prefs-translate": "Налады перакладу",
+ "translate-pref-editassistlang-help": "Падзелены коскамі сьпіс кодаў моў.\nПераклады паведамленьняў на гэтыя мовы паказваюцца ў працэсе перакладаньня.\nСьпіс перадвызначаных моў залежыць ад Вашай мовы.",
+ "translate-pref-editassistlang-bad": "Няслушны код мовы ў сьпісе:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Рэдагаваньне з выкарыстаньнем інтэрфэйсу перакладу",
+ "right-translate-manage": "кіраваньне групамі перакладаў",
+ "action-translate-manage": "кіраваньне групамі перакладаў",
+ "right-translate-import": "імпартаваньне вонкавых перакладаў",
+ "action-translate-import": "імпартаваньне выкананых у оф-лайне перакладаў",
+ "right-translate-messagereview": "рэцэнзаваньне перакладаў",
+ "action-translate-messagereview": "рэцэнзаваньне перакладаў",
+ "right-translate-groupreview": "зьмена стану апрацоўкі групаў паведамленьняў",
+ "translate-rcfilters-translations": "Пераклады",
+ "translate-rcfilters-translations-only-label": "Пераклады",
+ "translate-rcfilters-translations-filter-label": "Не пераклады",
+ "translate-rc-translation-filter": "Фільтраваць пераклады:",
+ "translate-rc-translation-filter-no": "Не",
+ "translate-rc-translation-filter-only": "Паказваць толькі пераклады",
+ "translate-rc-translation-filter-filter": "Схаваць пераклады",
+ "translate-rc-translation-filter-site": "Толькі сыстэмныя паведамленьні",
+ "translationstats": "Статыстыка перакладаў",
+ "translate-stats-edits": "Рэдагаваньні",
+ "translate-stats-users": "Перакладчыкі",
+ "translate-stats-registrations": "Рэгістрацыі",
+ "translate-stats-reviews": "Вычыткі",
+ "translate-stats-reviewers": "Правяраючыя",
+ "translate-statsf-intro": "Гэта форма дапаможа Вам стварыць просты графік. Для ўсіх значэньняў можна задаць ніжнюю і верхнюю мяжу.",
+ "translate-statsf-options": "Парамэтры графіка",
+ "translate-statsf-width": "Шырыня ў піксэлях:",
+ "translate-statsf-height": "Вышыня ў піксэлях:",
+ "translate-statsf-days": "Пэрыяд часу ў днях:",
+ "translate-statsf-start": "Дата пачатку:",
+ "translate-statsf-scale": "Ступень структураваньня зьменаў:",
+ "translate-statsf-scale-months": "Месяцы",
+ "translate-statsf-scale-weeks": "Тыдні",
+ "translate-statsf-scale-days": "Дні",
+ "translate-statsf-scale-hours": "Гадзіны",
+ "translate-statsf-count": "Адзінка вымярэньня:",
+ "translate-statsf-count-edits": "Колькасьць рэдагаваньняў",
+ "translate-statsf-count-users": "Актыўныя перакладчыкі",
+ "translate-statsf-count-registrations": "Новыя ўдзельнікі",
+ "translate-statsf-count-reviews": "Вычыткі перакладаў",
+ "translate-statsf-count-reviewers": "Правяраючыя",
+ "translate-statsf-language": "Сьпіс кодаў моваў, падзеленых коскамі:",
+ "translate-statsf-group": "Сьпіс групаў кодаў, падзелены коскамі:",
+ "translate-statsf-submit": "Папярэдні прагляд",
+ "translate-tag-page-desc": "Пераклад вікі-старонкі [[$2|$1]] з $3 ($4).",
+ "translate-sidebar-alltrans": "На іншых мовах",
+ "translations": "Усе пераклады",
+ "translations-summary": "Увядзіце ўнізе назву паведамленьня, каб паглядзець усе даступныя пераклады.",
+ "translate-translations-no-message": "Паведамленьне «$1» нельга перакласьці",
+ "translate-translations-none": "Няма перакладаў для «$1»",
+ "translate-translations-count": "{{PLURAL:$1|Знойдзены $1 пераклад|Знойдзеныя $1 пераклады|Знойдзеныя $1 перакладаў}}.",
+ "translate-translations-fieldset-title": "Паведамленьне",
+ "translate-translations-messagename": "Назва:",
+ "translate-translations-project": "Праект:",
+ "translate-translations-including-no-param": "Калі ласка, пазначце слушны ключ паведамленьня ў парамэтры падстаронкі",
+ "translate-translations-history-short": "г",
+ "languagestats": "Моўная статыстыка",
+ "languagestats-summary": "Гэта старонка паказвае статыстыку перакладаў для ўсіх групаў паведамленьняў для мовы.",
+ "languagestats-stats-for": "Статыстыка перакладаў для $1 ($2).",
+ "languagestats-recenttranslations": "апошнія пераклады",
+ "translate-langstats-incomplete": "Некаторыя статыстычныя зьвесткі на старонцы няпоўныя. Для атрыманьня апошніх зьвестак трэба абнавіць старонку.",
+ "translate-langstats-expand": "разгарнуць",
+ "translate-langstats-collapse": "згарнуць",
+ "translate-langstats-expandall": "разгарнуць усе",
+ "translate-langstats-collapseall": "згарнуць усе",
+ "translate-language-code": "Код мовы",
+ "translate-language-code-field-name": "Код мовы:",
+ "translate-suppress-complete": "Схаваць цалкам перакладзеныя групы паведамленьняў",
+ "translate-ls-noempty": "Схаваць зусім не перакладзеныя групы паведамленьняў",
+ "translate-language": "Мова",
+ "translate-total": "Паведамленьні",
+ "translate-untranslated": "Неперакладзеныя",
+ "translate-percentage-complete": "Перакладзеныя",
+ "translate-percentage-fuzzy": "Састарэлыя",
+ "translate-languagestats-overall": "Усе паведамленьні групаў разам",
+ "translate-ls-submit": "Паказаць статыстыку",
+ "translate-ls-column-group": "Група паведамленьняў",
+ "translate-mgs-pagename": "Статыстыка груп паведамленьняў",
+ "translate-mgs-fieldset": "Налады паказу",
+ "translate-mgs-group": "Група паведамленьняў:",
+ "translate-mgs-nocomplete": "Не паказваць мовы, пераклад на якія цалкам скончаны",
+ "translate-mgs-noempty": "Не паказваць мовы, для якіх няма ніякіх перакладаў",
+ "translate-mgs-submit": "Паказаць статыстыку",
+ "translate-mgs-column-language": "Мова",
+ "translate-mgs-totals": "Усе $1 {{PLURAL:$1|мова|мовы|моваў}} разам",
+ "translate-mgs-invalid-group": "Пазначаная група «$1» не існуе.",
+ "translate-mgs-nothing": "Па вашым запыце статыстыка адсутнічае.",
+ "supportedlanguages": "Актыўныя мовы",
+ "supportedlanguages-summary": "На гэтай старонцы пададзены сьпіс актыўных моваў, падтрымваных у {{SITENAME}},\nразам з імёнамі перакладчыкаў, якія перакладаюць на гэтыя мовы.\nТым большым выглядае імя перакладчыка, чым больш перакладаў ён зрабіў.\nКолер падкрэсьленьня сьведчыць, як даўно перакладчык быў актыўны.",
+ "supportedlanguages-colorlegend": "Значэньне колеру: апошні пераклад выкананы $1 дзень/дні/дзён таму.",
+ "supportedlanguages-translators": "{{PLURAL:$2|1={{GENDER:$3|Перакладчык|Перакладчыца}}|Перакладчыкі}}: $1",
+ "supportedlanguages-recenttranslations": "апошнія пераклады",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|мова|мовы|моваў}} агулам.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|рэдагаваньне|рэдагаваньні|рэдагаваньняў}}, апошняе — $3 {{PLURAL:$3|дзень|дні|дзён}} таму",
+ "translate-jssti-add": "Дадаць у сьпіс",
+ "managemessagegroups": "Кіраваньне групамі паведамленьняў",
+ "translate-smg-notallowed": "Вам не дазволена выканаць гэтае дзеяньне.",
+ "translate-smg-nochanges": "Няма зьменаў для апрацоўкі.",
+ "translate-smg-submit": "Даслаць зьмены для апрацоўкі",
+ "translate-smg-submitted": "Апісаньні паведамленьняў былі абноўленыя. Зьмены зараз апрацоўваюцца ў тле.",
+ "translate-smg-left": "Зьмест паведамленьня ў вікі",
+ "translate-smg-right": "Уваходныя зьмены",
+ "translate-manage-import-diff": "Паведамленьне $1 | Дзеяньні: $2",
+ "translate-manage-import-new": "Новае паведамленьне $1",
+ "translate-manage-import-deleted": "Выдаленае паведамленьне $1",
+ "translate-manage-action-import": "Імпарт",
+ "translate-manage-action-conflict": "Імпарт і недакладнасьць",
+ "translate-manage-action-ignore": "Ігнараваньне",
+ "translate-manage-action-fuzzy": "Імпарт і недакладныя пераклады",
+ "translate-manage-nochanges": "Няма ніякіх зьменаў у вызначэньнях паведамленьняў для гэтай групы.",
+ "translate-manage-nochanges-other": "Няма ніякіх зьменаў для гэтай мовы.\nВыкарыстоўвайце спасылкай ніжэй для вяртаньня да прагляду падрабязнасьцяў групы.",
+ "translate-manage-inconsistent": "Выяўлена несупадзеньне ў запыце.\nКалі ласка, праверце зьмены і паспрабуйце зноў. Падрабязнасьці: $1.",
+ "translate-manage-toolong": "Перавышаны максымальны час апрацоўкі у $1 {{PLURAL:$1|сэкунду|сэкунды|сэкундаў}}.\nКалі ласка, адпраўце форму ізноў для працягу апрацоўкі.",
+ "translate-manage-import-summary": "Імпартаваньне новай вэрсіі з вонкавай крыніцы",
+ "translate-manage-import-ignore": "Пропуск паведамленьня $1.",
+ "translate-manage-conflict-summary": "Імпартаваньне новай вэрсіі з вонкавай крыніцы. Калі ласка, праверце яе.",
+ "translate-manage-submit": "Выканаць",
+ "translate-manage-intro-other": "Ніжэй пададзены сьпіс зьменаў у перакладах для мовы $1.\nКалі ласка, праглядзіце зьмены і выберыце пажаданае дзеяньне для кожнага абнаўленьня.\nКалі вы праігнаруеце зьмены, гэта будзе мець толькі часовы эфэкт.",
+ "translate-manage-import-ok": "Імпартаваная: $1.",
+ "translate-manage-import-done": "Імпарт выкананы!",
+ "importtranslations": "Імпарт перакладаў",
+ "translate-import-from-local": "Загрузіць лякальны файл:",
+ "translate-import-load": "Загрузіць файл",
+ "translate-import-err-dl-failed": "Немагчыма загрузіць файл:\n$1",
+ "translate-import-err-ul-failed": "Не атрымалася загрузіць файл",
+ "translate-import-err-invalid-title": "Пададзеная назва файла <nowiki>$1</nowiki> — няслушная.",
+ "translate-import-err-no-such-file": "Файл <nowiki>$1</nowiki> не існуе альбо не загружаны лякальна.",
+ "translate-import-err-stale-group": "Група паведамленьняў, да якой належыць гэты файл, не існуе.",
+ "translate-import-err-no-headers": "Файл не зьяўляецца слушным файлам Gettext у фармаце пашырэньня Translate:\nНемагчыма вызначыць групу і мову з загалоўку файла.",
+ "translate-js-support-unsaved-warning": "Вы маеце неапублікаваныя пераклады.",
+ "translate-gs-pos": "Пазыцыя",
+ "translate-gs-code": "Код",
+ "translate-gs-continent": "Кантынэнт",
+ "translate-gs-speakers": "Носьбітаў",
+ "translate-gs-score": "Адзнака",
+ "translate-gs-multiple": "Некалькі",
+ "translate-gs-count": "Колькасьць",
+ "translate-gs-total": "Усяго",
+ "translate-gs-avgscore": "Сярэдняя адзнака",
+ "translate-documentation-language": "дакумэнтацыя паведамленьня",
+ "translate-searchprofile": "Пераклады",
+ "translate-searchprofile-tooltip": "Шукаць па ўсіх перакладах",
+ "translate-search-languagefilter": "Мова паведамленьняў:",
+ "translate-search-nofilter": "любая",
+ "log-name-translationreview": "Журнал рэцэнзіяў перакладаў",
+ "log-description-translationreview": "Журнал усіх рэцэнзіяў перакладаў і групаў паведамленьняў.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|ухваліў|ухваліла}} пераклад $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|зьмяніў|зьмяніла}} стан перакладу $3 з $6 на $7 для мовы $4",
+ "group-translate-sandboxed": "Незацьверджаныя перакладчыкі",
+ "group-translate-sandboxed-member": "{{GENDER:$1|незацьверджаны перакладчык|непацьверджаная перакладчыца}}",
+ "right-translate-sandboxmanage": "кіраваць удзельнікамі ў пясочніцы",
+ "action-translate-sandboxmanage": "кіраваць удзельнікамі ў пясочніцы",
+ "right-translate-sandboxaction": "Ажыцьцяўляць дазволеныя дзеяньні адносна ўдзельнікаў у пясочніцы",
+ "action-translate-sandboxaction": "ажыцьцяўляць дазволеныя дзеяньні адносна ўдзельнікаў у пясочніцы",
+ "translate-workflow-state-": "(не зададзена)",
+ "translate-workflowstatus": "Статус: $1",
+ "translate-workflow-set-doing": "Адпраўка…",
+ "translate-workflow-autocreated-summary": "Аўтаматычнае стварэньне старонкі стану перакладу «$1»",
+ "translate-stats-workflow": "Статус",
+ "translate-workflowgroup-label": "Станы перакладаў",
+ "translate-workflowgroup-desc": "Гэтая група паведамленьняў зьмяшчае пераклады станаў перакладаў.\nСтаны вызначаныя ў зьменнай канфігурацыі $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Апошнія пераклады",
+ "translate-dynagroup-recent-desc": "Гэтая група паведамленьняў зьмяшчае ўсе апошнія пераклады на гэтую мову.\nКарысьней усяго для вычыткі.",
+ "translate-dynagroup-additions-label": "Апошнія дапаўненьні",
+ "translate-dynagroup-additions-desc": "Гэтая група зьмяшчае новыя і зьмененыя паведамленьні.",
+ "translate-msggroupselector-projects": "Група паведамленьняў",
+ "translate-msggroupselector-search-placeholder": "Шукаць групы",
+ "translate-msggroupselector-search-all": "Усе",
+ "translate-msggroupselector-search-recent": "Апошнія",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|падгрупа|падгрупы|падгрупаў}}",
+ "tux-languageselector": "Пераклад на мову",
+ "tux-tab-all": "Усе",
+ "tux-tab-untranslated": "Неперакладзеныя",
+ "tux-tab-outdated": "Састарэлыя",
+ "tux-tab-translated": "Перакладзеныя",
+ "tux-tab-unproofread": "Ня ўхваленае",
+ "tux-edit": "Рэдагаваць",
+ "tux-status-optional": "Неабавязковае",
+ "tux-status-fuzzy": "Састарэлае",
+ "tux-status-proofread": "Ухваленае",
+ "tux-status-translated": "Перакладзенае",
+ "tux-status-saving": "Публікацыя…",
+ "tux-status-unsaved": "Не апублікавана",
+ "tux-editor-paste-original-button-label": "Уставіць крынічны тэкст",
+ "tux-editor-discard-changes-button-label": "Скасаваць зьмены",
+ "tux-editor-save-button-label": "Апублікаваць пераклад",
+ "tux-editor-skip-button-label": "Да наступнага",
+ "tux-editor-cancel-button-label": "Скасаваць",
+ "tux-editor-confirm-button-label": "Зацьвердзіць пераклад",
+ "tux-editor-shortcut-info": "Націсьніце «$1», каб пацьвердзіць і перайсьці да наступнага паведамленьня, «$2», каб прапусьціць, «$4», каб увесьці апісаньне ці ўтрымлівайце «$3», каб пабачыць іншыя скароты.",
+ "tux-editor-edit-desc": "Зьмяніць дакумэнтацыю",
+ "tux-editor-add-desc": "Дадаць дакумэнтацыю",
+ "tux-editor-suggestions-title": "Прапановы",
+ "tux-editor-latest-updates-title": "Апошнія абнаўленьні",
+ "tux-editor-changes-without-summary": "$1 {{PLURAL:$1|абнаўленьне|абнаўленьні|абнаўленьняў}} без апісаньня",
+ "tux-editor-all-changes": "Усе зьмены",
+ "tux-editor-in-other-languages": "На іншых мовах",
+ "tux-editor-need-more-help": "Патрэбная дапамога?",
+ "tux-editor-ask-help": "Спытайце ў нас",
+ "tux-editor-tm-match": "$1% супадзеньне",
+ "tux-notices-more": "{{PLURAL:$1|Яшчэ $1}}",
+ "tux-notices-hide": "схаваць",
+ "tux-editor-save-failed": "Не ўдалося апублікаваць пераклад: $1",
+ "tux-editor-n-uses": "выкарыстаны $1 {{PLURAL:$1|раз|разы|разоў}}",
+ "tux-editor-message-desc-more": "Болей",
+ "tux-editor-message-desc-less": "Меней",
+ "tux-editor-clear-translated": "Схаваць перакладзеныя",
+ "tux-editor-proofreading-mode": "Вычытка",
+ "tux-editor-translate-mode": "Сьпіс",
+ "tux-editor-proofreading-hide-own-translations": "Схаваць вашыя пераклады",
+ "tux-editor-proofreading-show-own-translations": "Паказаць вашыя пераклады",
+ "tux-proofread-action-tooltip": "Ухваліць",
+ "tux-proofread-edit-label": "Рэдагаваць",
+ "tux-editor-page-mode": "Старонка",
+ "tux-editor-outdated-notice": "Гэтаму перакладу, магчыма, патрабуецца абнаўленьне.",
+ "tux-editor-outdated-notice-diff-link": "Паказаць розьніцу",
+ "tux-editor-doc-editor-placeholder": "Дакумэнтацыя паведамленьня",
+ "tux-editor-doc-editor-save": "Апублікаваць дакумэнтацыю",
+ "tux-editor-doc-editor-cancel": "Скасаваць",
+ "tux-messagetable-more-messages": "Яшчэ $1 {{PLURAL:$1|паведамленьне|паведамленьні|паведамленьняў}}",
+ "tux-messagetable-loading-messages": "Загрузка {{PLURAL:$1|1=паведамленьня|паведамленьняў}}…",
+ "tux-message-filter-placeholder": "Адфільтраваць сьпіс",
+ "tux-message-filter-result": "$1 {{PLURAL:$1|вынік|вынікі|вынікаў}} на запыт «$2»",
+ "tux-message-filter-advanced-button": "Пашыраны пошук",
+ "tux-message-filter-optional-messages-label": "Неабавязковыя паведамленьні",
+ "tux-proofread-translated-by-self": "Перакладзена вамі",
+ "tux-empty-list-all": "Гэтая група паведамленьняў пустая",
+ "tux-empty-list-all-guide": "Выберыце для перакладу іншую групу паведамленьняў",
+ "tux-translate-page-no-such-group": "<strong>Запытаная група не існуе.</strong> Выберыце іншую групу паведамленьняў.",
+ "tux-empty-list-translated": "Няма перакладзеных паведамленьняў",
+ "tux-empty-list-translated-guide": "Вы можаце дапамагчы зь перакладам",
+ "tux-empty-list-translated-action": "Перакласьці",
+ "tux-empty-no-messages-to-display": "Няма паведамленьняў да адлюстраваньня.",
+ "tux-empty-there-are-optional": "Маюцца неабавязковыя паведамленьні, не паказаныя ў сьпісе",
+ "tux-empty-show-optional-messages": "Паказаць неабавязковыя паведамленьні",
+ "tux-empty-no-outdated-messages": "Састарэлых паведамленьняў няма",
+ "tux-empty-nothing-to-proofread": "Няма што вычытваць",
+ "tux-empty-you-can-help-providing": "Вы можаце дапамагчы новымі перакладамі",
+ "tux-empty-nothing-new-to-proofread": "Няма што новага вычытваць",
+ "tux-empty-you-can-review-already-proofread": "Вы можаце правяраць пераклады, ужо ўхваленыя іншымі.",
+ "tux-empty-list-other": "Няма што перакладаць",
+ "tux-empty-list-other-guide": "Вы можаце дапамагчы вычыткай зробленых перакладаў",
+ "tux-empty-list-other-action": "Вычытаць пераклады",
+ "tux-empty-list-other-link": "Паказаць усе паведамленьні",
+ "tux-editor-close-tooltip": "Закрыць",
+ "tux-editor-expand-tooltip": "Разгарнуць",
+ "tux-editor-collapse-tooltip": "Згарнуць",
+ "tux-editor-message-tools-history": "Гісторыя",
+ "tux-editor-message-tools-translations": "Усе пераклады",
+ "tux-editor-loading": "Загрузка...",
+ "tux-editor-loading-failed": "Памылка загрузкі падказак перакладу: $1",
+ "translate-search-more-languages-info": "Яшчэ на $1 {{PLURAL:$1|мове|мовах}}",
+ "translate-statsbar-tooltip": "$1% перакладзена, $2% вычытана",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% перакладзена, $2% вычытана, $3% састарэла",
+ "translate-search-more-groups-info": "Яшчэ $1 {{PLURAL:$1|група|групы|груп}}"
+}
diff --git a/Translate/i18n/core/be.json b/Translate/i18n/core/be.json
new file mode 100644
index 00000000..305846e1
--- /dev/null
+++ b/Translate/i18n/core/be.json
@@ -0,0 +1,454 @@
+{
+ "@metadata": {
+ "authors": [
+ "Artsiom91",
+ "Chadyka",
+ "Irus",
+ "Maksim L.",
+ "Mikalai Udodau",
+ "Nemo bis",
+ "No Sleep till Krupki",
+ "Plaga med",
+ "Tomato Cream",
+ "ZlyiLev",
+ "Дзяніс Тутэйшы",
+ "Чаховіч Уладзіслаў"
+ ]
+ },
+ "translate": "Пераклад",
+ "translate-extensionname": "Перакласці",
+ "translate-desc": "[[Special:Translate|Адмысловая старонка]] для перакладу MediaWiki і іншых праграм",
+ "translate-fuzzybot-desc": "Гэта спецыяльны сістэмны ўліковы запіс, які выкарыстоўваецца [https://www.mediawiki.org/wiki/Extension:Translate/be пашырэннем перакладу] MediaWiki для задач падтрымкі перакладаў.\nГэты ўліковы запіс з’яўляецца часткай праграмнага забеспячэння MediaWiki і не належыць ніякаму ўдзельніку.",
+ "translate-taskui-export-to-file": "Экспарт у родным фармаце",
+ "translate-taskui-export-as-po": "Экспарт для афлайнавага перакладу",
+ "translate-taskui-export-as-csv": "Экспарт у фармаце CSV",
+ "translate-export-csv-message-title": "Назва перакладнага паведамлення",
+ "translate-export-csv-definition": "Фармулёўка паведамлення",
+ "translate-taction-translate": "Пераклад",
+ "translate-taction-proofread": "Вычытка",
+ "translate-taction-lstats": "Моўная статыстыка",
+ "translate-taction-mstats": "Статыстыкі групы паведамленняў",
+ "translate-taction-export": "Экспарт",
+ "translate-taction-disabled": "Гэта дзеянне адключана ў гэтай вікі.",
+ "translate-page-no-such-language": "Перададзены няслушны код мовы",
+ "translate-page-no-such-group": "Няслушна ўказана група.",
+ "translate-page-disabled": "У гэтым раздзеле пераклады на даную мову адключаны. Прычына:\n\n<em>$1</em>",
+ "translate-language-disabled": "Магчымасць перакладу на гэту мову адключана.",
+ "translate-page-settings-legend": "Параметры",
+ "translate-page-group": "Група",
+ "translate-page-language": "Мова",
+ "translate-page-limit": "Абмежаванне",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|паведамленне|паведамленні|паведамленняў}} на старонку",
+ "translate-submit": "Вывесці",
+ "translate-page-navigation-legend": "Навігацыя",
+ "translate-page-showing": "Паказаны паведамленні з $1 па $2 (з $3).",
+ "translate-page-showing-all": "Паказана $1 {{PLURAL:$1|паведамленне|паведамленні|паведамленняў}}.",
+ "translate-page-showing-none": "Няма паведамленняў для паказу.",
+ "translate-next": "Наступная старонка",
+ "translate-prev": "Папярэдняя старонка",
+ "translate-page-description-legend": "Інфармацыя пра групу",
+ "translate-page-description-hasoptional": "У гэтай групе ўтрымліваюцца дадатковыя паведамленні.\nДадатковыя паведамленні перакладаюцца толькі ў тых выпадках, калі ваша мова прад'яўляе нейкія дадатковыя патрабаванні, — напрыклад, калі дзесьці не павінны выкарыстоўвацца прабелы, ці пры транслітарацыі уласных імёнаў. $1",
+ "translate-page-description-hasoptional-open": "Паказваць дадатковыя паведамленні.",
+ "translate-page-edit": "правіць",
+ "translate-optional": "(неабавязковае)",
+ "translate-ignored": "(ігнаруемае)",
+ "translate-edit-title": "Правіць «$1»",
+ "translate-edit-definition": "Фармулёўка паведамлення",
+ "translate-edit-contribute": "правіць",
+ "translate-edit-no-information": "<em>Гэта паведамленне не мае апісання. Калі вы ведаеце, дзе ці як гэта паведамленне выкарыстоўваецца, то можаце дапамагчы іншым перакладчыкам, дадаўшы да яго апісанне.</em>",
+ "translate-edit-information": "Інфармацыя пра паведамленне ($1)",
+ "translate-edit-warnings": "Папярэджанні пра няпоўныя пераклады",
+ "translate-edit-tmmatch-source": "Тэкст зыходнага паведамлення для перакладу: $1",
+ "translate-edit-tmmatch": "$1% адпаведнасць",
+ "translate-edit-nopermission": "Для перакладу паведамленняў вам трэба атрымаць правы перакладчыка.",
+ "translate-edit-askpermission": "Атрымаць дазвол",
+ "exporttranslations": "Экспарт перакладаў",
+ "translate-export-form-format": "Фармат",
+ "translate-export-invalid-format": "Калі ласка, укажыце слушны фармат.",
+ "translate-export-not-supported": "Экспарт перакладаў не падтрымліваецца.",
+ "translate-export-format-notsupported": "Указаны фармат экспарту не падтрымліваецца групай паведамленняў.",
+ "translate-export-group-too-large": "Выбрана група паведамленняў занадта вялікая. Выберыце групу паведамленняў, у якой менш за $1 {{PLURAL:$1|паведамленне|паведамленні|паведамленняў}} або звярніцеся да адміністратара перакладу па параду.",
+ "translate-checks-parameters": "{{PLURAL:$2|Наступны параметр не выкарыстоўваецца|Наступныя параметры не выкарыстоўваюцца}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Невядомы параметр|Невядомыя параметры}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "Няпарная колькасць {{PLURAL:$2|дужак}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Наступная спасылка выклікае праблемы|Наступныя спасылкі выклікаюць праблемы}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Адсутнічае $2 спасылка|Адсутнічаюць $2 спасылкі|Адсутнічаюць $2 спасылак}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Арыгінал выкарыстоўвае <nowiki>{{PLURAL:}}</nowiki>, а пераклад — не.",
+ "translate-checks-plural-forms": "Выразу <nowiki>{{PLURAL:}}</nowiki> {{PLURAL:$1|была дадзена адна форма|былі дадзены $1 формы|былі дадзены $1 формаў}}, але {{PLURAL:$2|падтрымліваецца толькі адна форма|падтрымліваюцца $2 формы|падтрымліваюцца $2 формаў}} (акрамя формаў 0= і 1=).",
+ "translate-checks-plural-dupe": "У канцы выразу <nowiki>{{PLURAL:}}</nowiki> дзве аднолькавых формы. Замест <nowiki>{{PLURAL:$1|паліто|паліто}}</nowiki> лепш напісаць <nowiki>{{PLURAL:$1|паліто}}</nowiki>.",
+ "translate-checks-gettext-plural-missing": "Гэты пераклад павінен змяшчаць <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-unsupported": "Гэта паведамленне не падтрымлівае <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-count": "<nowiki>{{PLURAL:GETTEXT|}}</nowiki> прымае роўна $1 {{PLURAL:$1|форму|формы|формаў}} множнага ліку. У цяперашні час дадзена $1 {{PLURAL:$2|форма|формы|формаў}} множнага ліку.",
+ "translate-checks-smartformat-plural-missing": "Гэты пераклад павінен змяшчаць plural на зменнай $1.",
+ "translate-checks-smartformat-plural-unsupported": "Гэта паведамленне не падтрымлівае plural на зменнай $1.",
+ "translate-checks-smartformat-plural-count": "Няправільная колькасць форм множнага ліку ў выразе <strong>$3</strong>. Выраз павінен змяшчаць $1 {{PLURAL:$1|форму|формы|формаў}} множнага ліку. У цяперашні час дадзена $1 {{PLURAL:$2|форма|формы|формаў}} множнага ліку.",
+ "translate-checks-unicode-plural-missing": "Гэты пераклад павінен змяшчаць <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-unsupported": "Гэта паведамленне не падтрымлівае <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-invalid": "Формы множнага ліку павінны быць вызначаны як $1. Гэты пераклад змяшчае $2.",
+ "translate-checks-pagename": "Змянілася вызначэнне прасторы назваў",
+ "translate-checks-format": "Гэты пераклад не адпавядае вызначэнню ці ўтрымлівае сінтаксічную памылку: $1",
+ "translate-checks-escape": "{{PLURAL:$2|Гэты мадыфікацыйны сімвал можа быць выпадковым|Гэтыя мадыфікацыйныя сімвалы могуць быць выпадковымі}}: <strong>$1</strong>. {{PLURAL:$4|Слушны мадыфікацыйны сімвал —|Слушныя мадыфікацыйныя сімвалы ўключаюць}} $3.",
+ "translate-checks-parametersnotequal": "Колькасць параметраў — $1, а {{PLURAL:$2|павінен|павінна}} быць — $2.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> няслушна сфарміраваны.",
+ "translate-checks-fudforum-syntax": "Выкарыстоўваць у гэтым праекце <nowiki>$1</nowiki> замест <nowiki>$2</nowiki>.",
+ "translate-checks-newline-missing-start": "{{PLURAL:$1|Адсутнічае $1 сімвал|Адсутнічаюць $1 сімвалы|Адсутнічаюць $1 сімвалаў}} новага радка ў пачатку перакладу.",
+ "translate-checks-newline-missing-end": "{{PLURAL:$1|Адсутнічае $1 сімвал|Адсутнічаюць $1 сімвалы|Адсутнічаюць $1 сімвалаў}} новага радка ў канцы перакладу.",
+ "translate-checks-newline-extra-start": "Ёсць $1 {{PLURAL:$1|дадатковы сімвал|дадатковыя сімвалы|дадатковых сімвалаў}} новага радка ў пачатку перакладу.",
+ "translate-checks-newline-extra-end": "Ёсць $1 {{PLURAL:$1|дадатковы сімвал|дадатковыя сімвалы|дадатковых сімвалаў}} новага радка ў канцы перакладу.",
+ "translate-checks-value-not-present": "The translation must be equal to {{PLURAL:$1|1=|one of the following values:}} $1.\n\nПераклад павінен быць {{PLURAL:$1|1=роўным|роўны аднаму з наступных значэнняў:}} $1.",
+ "translate-checks-replacement": "Выкарыстоўвайце $2 замест $1.",
+ "translate-checks-empty": "Пераклад без зместу або толькі с прабеламі не дапускаецца.",
+ "translate-pref-editassistlang": "Дапаможныя мовы:",
+ "prefs-translate": "Параметры перакладу",
+ "translate-pref-editassistlang-help": "Падзелены коскамі спіс кодаў моў.\nПераклады на гэтыя мовы будуць указаны пры праўцы паведамленняў.\nСпіс па змоўчанні залежыць ад вашай мовы.",
+ "translate-pref-editassistlang-bad": "Няслушны моўны код у спісе:\n<nowiki>$1</nowiki>.",
+ "right-translate": "праўка з выкарыстаннем інтэрфейсу перакладу",
+ "action-translate": "праўка з выкарыстаннем інтэрфейсу перакладу",
+ "right-translate-manage": "кіраванне групамі паведамленняў",
+ "action-translate-manage": "кіраванне групамі паведамленняў",
+ "right-translate-import": "імпартаванне перакладаў, зробленых у афлайне",
+ "action-translate-import": "імпарт перакладаў, зробленых у афлайне",
+ "right-translate-messagereview": "дадгляд перакладаў",
+ "action-translate-messagereview": "вычытка перакладаў",
+ "right-translate-groupreview": "змяняць стан апрацоўкі груп паведамленняў",
+ "action-translate-groupreview": "змяняць стан апрацоўкі груп паведамленняў",
+ "translate-rcfilters-translations": "Пераклады",
+ "translate-rcfilters-translations-only-label": "Пераклады",
+ "translate-rcfilters-translations-only-desc": "Змены ў перакладзеных старонках.",
+ "translate-rcfilters-translations-filter-label": "Не пераклады",
+ "translate-rcfilters-translations-filter-desc": "Усе змены, якія не з’яўляюцца перакладамі",
+ "translate-rcfilters-translations-site-label": "Паведамленні сайта",
+ "translate-rcfilters-translations-site-desc": "Пераазначэнне паведамленняў сайта ў прасторы назваў MediaWiki.",
+ "translate-rc-translation-filter": "Фільтраваць пераклады:",
+ "translate-rc-translation-filter-no": "Без абмежаванняў",
+ "translate-rc-translation-filter-only": "Паказаць толькі пераклады",
+ "translate-rc-translation-filter-filter": "Схаваць пераклады",
+ "translate-rc-translation-filter-site": "Толькі сістэмныя паведамленні сайта",
+ "translationstats": "Статыстыка перакладаў",
+ "translate-stats-edits": "Правак",
+ "translate-stats-users": "Перакладчыкі",
+ "translate-stats-registrations": "Рэгістрацыі",
+ "translate-stats-reviews": "Праверкі",
+ "translate-stats-reviewers": "Рэцэнзенты",
+ "translate-statsf-intro": "Гэта форма дапаможа вам стварыць зручны графік. Для ўсіх значэнняў можна задаць верхнюю і ніжнюю мяжу.",
+ "translate-statsf-options": "Параметры графіка",
+ "translate-statsf-width": "Шырыня ў пікселах:",
+ "translate-statsf-height": "Вышыня ў пікселах:",
+ "translate-statsf-days": "Перыяд часу ў днях:",
+ "translate-statsf-start": "Дата пачатку:",
+ "translate-statsf-scale": "Ступень дэталізацыі:",
+ "translate-statsf-scale-years": "Гады",
+ "translate-statsf-scale-months": "Месяцы",
+ "translate-statsf-scale-weeks": "Тыдні",
+ "translate-statsf-scale-days": "Дні",
+ "translate-statsf-scale-hours": "Гадзіны",
+ "translate-statsf-count": "Мера:",
+ "translate-statsf-count-edits": "Колькасць правак",
+ "translate-statsf-count-users": "Дзеючых перакладчыкаў",
+ "translate-statsf-count-registrations": "Новыя ўдзельнікі",
+ "translate-statsf-count-reviews": "Рэцэнзенты перакладу",
+ "translate-statsf-count-reviewers": "Рэцэнзенты",
+ "translate-statsf-language": "Падзелены коскамі спіс кодаў моваў:",
+ "translate-statsf-group": "Падзелены коскамі спіс кодаў групаў:",
+ "translate-statsf-submit": "Перадпаказ",
+ "translate-statsf-unknown-error": "Адбылася невядомая памылка.",
+ "translate-statsf-error-message": "Адбылася памылка падчас загрузкі графіка: $1",
+ "translate-statsf-graph-alt-text-info": "Тэкставая альтэрнатыва для статыстыкі перакладу знаходзіцца ў табліцы з дадзенымі ніжэй.",
+ "translate-statsf-alt-text": "Гэта тэкставая альтэрнатыва для статыстыкі перакладу.",
+ "translate-statsf-embed": "Код, каб уставіць графік статыстыкі перакладу на іншыя старонкі.",
+ "translate-tag-page-desc": "Пераклад вікі-старонкі [[$2|$1]] з $3 ($4).",
+ "translate-tag-page-wikipage-desc": "[[$1|Пераклад]] вікі-старонкі [[$2]] з мовы <bdi>$3</bdi> ($4) на мову <bdi>$5</bdi> ($6)",
+ "translate-sidebar-alltrans": "На іншых мовах",
+ "translations": "Усе пераклады",
+ "translations-summary": "Увядзіце назву паведамлення ніжэй, каб паглядзець усе даступныя пераклады.",
+ "translate-translations-no-message": "Паведамленне «$1» нельга перакласці",
+ "translate-translations-none": "Няма перакладаў для «$1»",
+ "translate-translations-count": "{{PLURAL:$1|Знойдзены $1 пераклад|Знойдзеныя $1 пераклады|Знойдзеныя $1 перакладаў}}.",
+ "translate-translations-fieldset-title": "Паведамленне",
+ "translate-translations-messagename": "Назва:",
+ "translate-translations-project": "Праект:",
+ "translate-translations-including-no-param": "Калі ласка, укажыце слушны ключ паведамлення ў параметрах падстаронкі",
+ "translate-translations-history-short": "гіст",
+ "languagestats": "Моўная статыстыка",
+ "languagestats-summary": "Гэтая старонка адлюстроўвае статыстыку перакладаў для ўсіх груп паведамленняў дадзенай мовы.",
+ "messagegroupstats-summary": "Старонка адлюстроўвае статыстыку груп паведамленняў.",
+ "languagestats-stats-for": "Статыстыка перакладаў на мову $1 ($2).",
+ "languagestats-recenttranslations": "апошнія пераклады",
+ "translate-langstats-incomplete": "Некаторыя статыстычныя звесткі на гэтай старонцы няпоўныя. Калі ласка, абнавіце старонку для атрымання апошніх звестак.",
+ "translate-langstats-expand": "разгарнуць",
+ "translate-langstats-collapse": "згарнуць",
+ "translate-langstats-expandall": "разгарнуць усё",
+ "translate-langstats-collapseall": "згарнуць усё",
+ "translate-language-code": "Код мовы",
+ "translate-language-code-field-name": "Код мовы:",
+ "translate-suppress-complete": "Схаваць цалкам перакладзеныя групы паведамленняў",
+ "translate-ls-noempty": "Схаваць зусім не перакладзеныя групы паведамленняў",
+ "translate-language": "Мова",
+ "translate-total": "Паведамленні",
+ "translate-untranslated": "Неперакладзеныя",
+ "translate-percentage-complete": "Перакладзеныя",
+ "translate-percentage-fuzzy": "Састарэлыя",
+ "translate-percentage-proofread": "Дагледжаныя",
+ "translate-languagestats-overall": "Усе групы паведамленняў разам",
+ "translate-ls-submit": "Паказаць статыстыку",
+ "translate-ls-column-group": "Група паведамленняў",
+ "translate-mgs-pagename": "Статыстыка груп паведамленняў",
+ "translate-mgs-fieldset": "Налады адлюстравання",
+ "translate-mgs-group": "Група паведамленняў:",
+ "translate-mgs-nocomplete": "Не паказваць мовы, пераклад на якія цалкам скончаны",
+ "translate-mgs-noempty": "Не паказваць мовы, на якія няма ніводнага перакладу",
+ "translate-mgs-submit": "Паказаць статыстыку",
+ "translate-mgs-column-language": "Мова",
+ "translate-mgs-totals": "Усе $1 {{PLURAL:$1|мова|мовы|моваў}} разам",
+ "translate-mgs-invalid-group": "Пазначаная група $1 не існуе.",
+ "translate-mgs-nothing": "Няма што паказаць для запытанай статыстыкі.",
+ "translate-tes-server-error": "Не ўдалося атрымаць пошукавыя прапановы",
+ "translate-tes-group-not-found": "Няма адпаведных вынікаў",
+ "translate-tes-type-to-search": "Напішыце, каб пачаць пошук",
+ "supportedlanguages": "Падтрымваныя мовы",
+ "supportedlanguages-summary": "На старонцы паказаны спіс падтрымваных праектам {{SITENAME}} моў\nразам з імёнамі тых, хто тут працуе над перакладамі на гэтыя мовы.\nІмя перакладчыка адлюстроўваецца тым буйней, чым болей правак ён зрабіў.\nКолер падкрэслення дае зразумець як даўно перакладчык здзяйсняў тут што-небудзь.",
+ "supportedlanguages-colorlegend": "Значэнне колеру: апошні пераклад выкананы $1 дзён таму.",
+ "supportedlanguages-sqlite-error": "SQLite не падтрымліваецца",
+ "supportedlanguages-postgres-error": "PostgreSQL не падтрымліваецца",
+ "supportedlanguages-translators": "{{PLURAL:$2|1={{GENDER:$3|Перакладчык|Перакладчыца}}|Перакладчыкі}}: $1",
+ "supportedlanguages-recenttranslations": "апошнія пераклады",
+ "supportedlanguages-count": "Усяго $1 {{PLURAL:$1|мова|мовы|моў}}.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|праўка|праўкі|правак}}, апошняя — $3 {{PLURAL:$3|дзень|дні|дзён}} таму",
+ "translate-supportedlanguages-cached": "Гэтая інфармацыя была кэшаваная $1 таму.",
+ "translate-activelanguages-invalid-code": "Код мовы «$1» невядомы ці не ўключаны для перакладу.",
+ "abusefilter-edit-builder-vars-translate-source-text": "Зыходны тэкст элемента перакладу",
+ "abusefilter-edit-builder-vars-translate-target-language": "Мэтавая мова для перакладу",
+ "translate-jssti-add": "Дадаць у спіс",
+ "managemessagegroups": "Кіраванне групамі паведамленняў",
+ "translate-smg-notallowed": "Вам не дазволена выканаць гэтае дзеянне.",
+ "translate-smg-nochanges": "Няма зменаў для апрацоўкі.",
+ "translate-smg-submit": "Даслаць змены для апрацоўкі",
+ "translate-smg-submitted": "Апісанні паведамленняў былі абноўленыя. Змены зараз апрацоўваюцца ў тле.",
+ "translate-smg-submitted-with-failure": "Не атрымалася абнавіць {{PLURAL:$1|вызначэнне паведамлення|вызначэнні паведамленняў}} для {{PLURAL:$1|наступнай групы|наступных групаў}} - $2. $3",
+ "translate-smg-submitted-others-processing": "Апісанні паведамленняў для іншых групаў зараз апрацоўваюцца ў тле.",
+ "translate-smg-more": "Яшчэ некалькі змяненняў будуць апрацаваны пасля адпраўкі гэтых.",
+ "translate-smg-left": "Змест паведамлення ў вікі",
+ "translate-smg-right": "Уваходныя змены",
+ "translate-smg-rename-select": "Выбраць",
+ "translate-smg-rename-cancel": "Адмена",
+ "translate-smg-rename-search": "Шукаць прыдатнае паведамленне...",
+ "translate-smg-rename-select-err": "Калі ласка, выберыце паведамленне для перайменавання",
+ "translate-smg-rename-no-msg": "Не ўдалося знайсці паведамленняў.",
+ "translate-smg-rename-new": "Дадаць як новае...",
+ "translate-smg-rename-rename": "Дадаць як перайменаванне...",
+ "translate-smg-rename-dialog-title": "Выбраць прыдатнае перайменаванне для $1",
+ "translate-smg-changeset-modified": "Набор зменаў быў зменены іншым удзельнікам або працэсам. Вашы змены нельга апублікаваць, бо гэта можа перазапісаць іх змены. Калі ласка, перазагрузіце старонку, каб убачыць апошнія змены.",
+ "translate-smg-no-groups-in-sync": "Цяпер няма групаў у сінхранізацыі",
+ "translate-smg-strong-sync-help": "Даведка",
+ "translate-smg-groups-in-sync": "Групы ў сінхранізацыі цяпер",
+ "translate-smg-groups-in-sync-list": "Спіс групаў, якія апрацоўваюцца зараз у тле:",
+ "translate-smg-groups-with-error-title": "Групы, у якіх адбыліся памылкі падчас сінхранізацыі",
+ "translate-smg-groups-with-error-desc": "Спіс групаў і іх паведамленняў, у якіх адбыліся памылкі падчас сінхранізацыі:",
+ "translate-smg-group-with-error-summary": "$1 {{PLURAL:$1|паведамленне|паведамленні|паведамленняў}} з памылкамі:",
+ "translate-smg-group-message-action-history": "Гісторыя",
+ "translate-smg-group-action-resolve": "Пазначыць як вырашанае",
+ "translate-smg-group-sync-error-warn": "У гэтай групе адбылася памылка падчас сінхранізацыі. Калі ласка, выправіце памылкі перад апрацоўкай гэтай групы.",
+ "translate-smg-group-message-tag-outdated": "Састарэлае",
+ "translate-smg-group-message-tag-rename": "Перайменаванне",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|Бірка|Біркі}}:",
+ "translate-smg-group-message-message-content": "Змест:",
+ "translate-smg-group-message-message-target": "Мэта:",
+ "translate-smg-group-message-message-replacement": "Замена:",
+ "translate-smg-group-message-message-other-langs": "Іншыя мовы:",
+ "translate-smg-loading": "Загрузка...",
+ "translate-smg-unknown-error": "Адбылася невядомая памылка падчас апрацоўкі вашага запыту.",
+ "translate-manage-import-diff": "Паведамленне $1 | Дзеянні: $2",
+ "translate-manage-import-new": "Новае паведамленне $1",
+ "translate-manage-import-deleted": "Выдаленае паведамленне $1",
+ "translate-manage-action-import": "Імпартаваць",
+ "translate-manage-action-conflict": "Імпартаваць і пазначыць як састарэлае",
+ "translate-manage-action-ignore": "Ігнараваць",
+ "translate-manage-action-fuzzy": "Імпартаваць і пазначыць пераклады як састарэлыя",
+ "translate-manage-action-rename-fuzzy": "Перайменаваць і пазначыць пераклады як састарэлыя",
+ "translate-manage-action-rename": "Перайменаваць",
+ "translate-manage-action-ignore-change": "Ігнараваць змяненне перакладу",
+ "translate-manage-nochanges": "Няма ніякіх зменаў у вызначэннях паведамленьняў для гэтай групы.",
+ "translate-manage-nochanges-other": "Няма ніякіх зьменаў для гэтай мовы.\nВыкарыстоўвайце спасылку ніжэй для вяртання да прагляду падрабязнасьцяў групы.",
+ "translate-manage-inconsistent": "Выяўлена непаслядоўнасць ў запыце. Калі ласка, пашукайце змены і паспрабуйце зноў. Падрабязнасці: $1.",
+ "translate-manage-toolong": "Перавышаны максымальны час апрацоўкі ў $1 {{PLURAL:$1|сэкунду|сэкунды|сэкундаў}}.\nКалі ласка, адпраўце форму ізноў для працягу апрацоўкі.",
+ "translate-manage-import-summary": "Імпартаванне новай вэрсіі з вонкавай крыніцы",
+ "translate-manage-import-ignore": "Прапуск паведамлення $1.",
+ "translate-manage-import-rename-summary": "Перайменавана ў вонкавай крыніцы",
+ "translate-manage-conflict-summary": "Імпартаванне новай вэрсіі з вонкавай крыніцы. Калі ласка, праверце яе.",
+ "translate-manage-submit": "Выканаць",
+ "translate-manage-intro-other": "Ніжэй пададзены спіс зменаў у перакладах на мову $1.\nКалі ласка, праглядзіце змены і выберыце пажаданае дзеянне для кожнага абнаўлення.\nКалі вы рашыце ігнараваць змены, гэта дзеянне будзе мець толькі часовы эфект.",
+ "translate-manage-import-ok": "Імпартаваны: $1",
+ "translate-manage-import-done": "Імпарт выкананы!",
+ "translate-manage-empty-content": "Змест пусты",
+ "translate-manage-key-reused": "Гэтае паведамленне ўжо існуе ў вікі. Праверце, можа хтосьці выпадкова спрабуе выкарыстацца старым ключом.",
+ "translate-manage-source-message-not-found": "Не ўдалося знайсці вызначэнне паведамлення",
+ "importtranslations": "Імпарт перакладаў",
+ "translate-import-from-local": "Загрузіць лакальны файл:",
+ "translate-import-load": "Загрузіць файл",
+ "translate-import-err-dl-failed": "Немагчыма падцягнуць файл:\n$1",
+ "translate-import-err-ul-failed": "Не атрымалася загрузіць файл",
+ "translate-import-err-invalid-title": "Пададзеная назва файла <nowiki>$1</nowiki> — няслушная.",
+ "translate-import-err-no-such-file": "Файл <nowiki>$1</nowiki> не існуе альбо не загружаны лакальна.",
+ "translate-import-err-stale-group": "Група паведамленняў, да якой належыць гэты файл, не існуе.",
+ "translate-import-err-no-headers": "Файл не з’яўляецца слушным файлам Gettext у фармаце пашырэння Translate:\nнемагчыма вызначыць групу паведамленняў і мову з загалоўку файла.",
+ "translate-js-support-unsaved-warning": "Вы маеце неапублікаваныя пераклады.",
+ "translate-gs-pos": "Пазіцыя",
+ "translate-gs-code": "Код",
+ "translate-gs-continent": "Кантынент",
+ "translate-gs-speakers": "Носьбітаў",
+ "translate-gs-score": "Адзнака",
+ "translate-gs-multiple": "Некалькі",
+ "translate-gs-count": "Колькасць",
+ "translate-gs-total": "Усяго",
+ "translate-gs-avgscore": "Сярэдняя адзнака",
+ "translate-documentation-language": "Дакументацыя паведамлення",
+ "translate-searchprofile": "Пераклады",
+ "translate-searchprofile-tooltip": "Шукаць ва ўсіх перакладах",
+ "translate-searchprofile-note": "Дадатковыя параметры пошуку даступныя з [$1 пошукам перакладаў].",
+ "translate-search-languagefilter": "Фільтраваць па мовам:",
+ "translate-search-nofilter": "Без фільтрацыі",
+ "log-name-translationreview": "Журнал вычыткі перакладаў",
+ "log-description-translationreview": "Журнал усіх вычытак перакладаў і групаў паведамленьняў.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|вычытаў|вычытала}} пераклад $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|змяніў|змяніла}} стан перакладу старонкі $3 з «$6» на «$7» для мовы $4",
+ "group-translate-sandboxed": "Не зацверджаныя перакладчыкі",
+ "group-translate-sandboxed-member": "не {{GENDER:$1|зацверджаны перакладчык|зацверджаная перакладчыца}}",
+ "right-translate-sandboxmanage": "Кіраваць удзельнікамі ў пясочніцы",
+ "action-translate-sandboxmanage": "кіраваць удзельнікамі ў пясочніцы",
+ "right-translate-sandboxaction": "Ажыццяўляць дзеянні, дазволеныя ўдзельнікам у пясочніцы",
+ "action-translate-sandboxaction": "ажыццяўляць дзеянні, дазволеныя ўдзельнікам у пясочніцы",
+ "translate-workflow-state-": "(не зададзена)",
+ "translate-workflowstatus": "Стан: $1",
+ "translate-workflow-set-doing": "Вызначэнне...",
+ "translate-workflow-autocreated-summary": "Аўтаматычнае стварэнне старонкі стану працоўнага працэсу «$1»",
+ "translate-stats-workflow": "Статус",
+ "translate-workflowgroup-label": "Станы працоўнага працэсу",
+ "translate-workflowgroup-desc": "Гэтая група паведамленняў паказвае станы працоўнага працэсу перакладу.\nСтаны вызначаюцца ў канфігурацыйнай зменнай $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Апошнія пераклады",
+ "translate-dynagroup-recent-desc": "Гэтая група паведамленняў змяшчае ўсе апошнія пераклады на гэтую мову.\nНайбольш зручны рэжым для вычыткі.",
+ "translate-dynagroup-additions-label": "Апошнія дапаўненні",
+ "translate-dynagroup-additions-desc": "Гэтая група паказвае новыя і змененыя паведамленні.",
+ "translate-msggroupselector-projects": "Група паведамленняў",
+ "translate-msggroupselector-search-placeholder": "Шукаць групы",
+ "translate-msggroupselector-search-all": "Усе",
+ "translate-msggroupselector-search-recent": "Апошнія",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|падгрупа|падгрупы|падгрупаў}}",
+ "tux-languageselector": "Перакласці на:",
+ "tux-select-target-language": "Мэтавая мова для перакладу",
+ "tux-tab-all": "Усе",
+ "tux-tab-untranslated": "Неперакладзеныя",
+ "tux-tab-outdated": "Састарэлыя",
+ "tux-tab-translated": "Перакладзеныя",
+ "tux-tab-unproofread": "Не вычытаныя",
+ "tux-edit": "Правіць",
+ "tux-status-optional": "Неабавязковае",
+ "tux-status-fuzzy": "Састарэлае",
+ "tux-status-proofread": "Вычытанае",
+ "tux-status-translated": "Перакладзенае",
+ "tux-status-saving": "Публікацыя...",
+ "tux-status-unsaved": "Не апублікаванае",
+ "tux-save-unknown-error": "Адбылася невядомая памылка.",
+ "tux-editor-placeholder-documentation": "Дадаць дакументацыю паведамлення",
+ "tux-editor-placeholder-language": "Ваш пераклад ($1)",
+ "tux-editor-editsummary-placeholder": "Растлумачце вашы змены (неабавязкова)",
+ "tux-editor-paste-original-button-label": "Уставіць крынічны тэкст",
+ "tux-editor-discard-changes-button-label": "Адмяніць змены",
+ "tux-editor-save-button-label": "Апублікаваць пераклад",
+ "tux-editor-skip-button-label": "Да наступнага",
+ "tux-editor-cancel-button-label": "Адмена",
+ "tux-editor-confirm-button-label": "Зацвердзіць пераклад",
+ "tux-editor-proofread-button-label": "Пазначыць як вычытаны",
+ "tux-editor-shortcut-info": "Націсніце «$1», каб пацвердзіць і перайсці да наступнага паведамлення, «$2», каб прапусціць, «$4», каб увесці апісанне ці ўтрымлівайце «$3», каб пабачыць іншыя скароты.",
+ "tux-editor-edit-desc": "Правіць дакументацыю",
+ "tux-editor-add-desc": "Дадаць дакументацыю",
+ "tux-editor-suggestions-title": "Прапановы",
+ "tux-editor-latest-updates-title": "Апошнія абнаўленні",
+ "tux-editor-changes-without-summary": "$1 {{PLURAL:$1|абнаўленне|абнаўлення|абнаўленняў}} без тлумачэння",
+ "tux-editor-all-changes": "Усе змены",
+ "tux-editor-in-other-languages": "На іншых мовах",
+ "tux-editor-need-more-help": "Патрэбна дадатковая дапамога?",
+ "tux-editor-ask-help": "Запытайце дадатковую інфармацыю",
+ "tux-editor-tm-match": "Супадае на $1%",
+ "tux-notices-more": "{{PLURAL:$1|Яшчэ $1}}",
+ "tux-notices-hide": "схаваць",
+ "tux-editor-save-failed": "Не атрымалася апублікаваць пераклад: $1",
+ "tux-editor-n-uses": "выкарыстаны $1 {{PLURAL:$1|раз|разы|разоў}}",
+ "tux-editor-message-desc-more": "Праглядзець больш",
+ "tux-editor-message-desc-less": "Глядзець менш",
+ "tux-editor-clear-translated": "Схаваць перакладзеныя",
+ "tux-editor-proofreading-mode": "Вычытка",
+ "tux-editor-translate-mode": "Спіс",
+ "tux-editor-proofreading-hide-own-translations": "Схаваць вашыя пераклады",
+ "tux-editor-proofreading-show-own-translations": "Паказаць вашыя пераклады",
+ "tux-proofread-action-tooltip": "Пазначыць як вычытаны",
+ "tux-proofread-edit-label": "Правіць",
+ "tux-editor-page-mode": "Старонка",
+ "tux-editor-outdated-notice": "Гэтаму перакладу, магчыма, патрабуецца абнаўленне.",
+ "tux-editor-outdated-notice-diff-link": "Паказаць адрозненні",
+ "tux-editor-doc-editor-placeholder": "Дакументацыя паведамлення",
+ "tux-editor-doc-editor-save": "Апублікаваць дакументацыю",
+ "tux-editor-doc-editor-cancel": "Адмена",
+ "tux-messagetable-more-messages": "Яшчэ $1 {{PLURAL:$1|паведамленне|паведамленні|паведамленняў}}",
+ "tux-messagetable-loading-messages": "Загрузка {{PLURAL:$1|1=паведамлення|паведамленняў}}...",
+ "tux-message-filter-placeholder": "Адфільтраваць спіс",
+ "tux-message-filter-result": "$1 {{PLURAL:$1|вынік|вынікі|вынікаў}} на запыт «$2»",
+ "tux-message-filter-advanced-button": "Пашыраны пошук",
+ "tux-message-filter-optional-messages-label": "Неабавязковыя паведамленні",
+ "tux-proofread-translated-by-self": "Перакладзена вамі",
+ "tux-empty-list-all": "Гэтая група паведамленняў пустая",
+ "tux-empty-list-all-guide": "Выберыце іншую групу паведамленняў для перакладу",
+ "tux-translate-page-no-such-group": "<strong>Запытаная група не існуе.</strong> Выберыце іншую групу паведамленьняў.",
+ "tux-empty-list-translated": "Няма перакладзеных паведамленняў",
+ "tux-empty-list-translated-guide": "Вы можаце дапамагчы перакласці",
+ "tux-empty-list-translated-action": "Перакласці",
+ "tux-empty-no-messages-to-display": "Няма паведамленьняў да адлюстравання.",
+ "tux-empty-there-are-optional": "Існуюць неабавязковыя паведамленні, не паказаныя ў спісе",
+ "tux-empty-show-optional-messages": "Паказаць неабавязковыя паведамленні",
+ "tux-empty-no-outdated-messages": "Няма састарэлых паведамленняў",
+ "tux-empty-nothing-to-proofread": "Няма што вычытваць",
+ "tux-empty-you-can-help-providing": "Вы можаце дапамагчы новымі перакладамі",
+ "tux-empty-nothing-new-to-proofread": "Няма што новага вычытваць",
+ "tux-empty-you-can-review-already-proofread": "Вы можаце правяраць пераклады, ужо вычытаныя іншымі.",
+ "tux-empty-list-other": "Няма што перакладаць",
+ "tux-empty-list-other-guide": "Вы можаце дапамагчы вычыткай існуючых перакладаў",
+ "tux-empty-list-other-action": "Вычытаць пераклады",
+ "tux-empty-list-other-link": "Паказаць усе паведамленні",
+ "tux-editor-close-tooltip": "Закрыць",
+ "tux-editor-expand-tooltip": "Разгарнуць",
+ "tux-editor-collapse-tooltip": "Згарнуць",
+ "tux-editor-message-tools-show-editor": "Паказаць у рэдактары вікі-тэксту",
+ "tux-editor-message-tools-history": "Гісторыя",
+ "tux-editor-message-tools-delete": "Выдаліць",
+ "tux-editor-message-tools-translations": "Усе пераклады",
+ "tux-editor-message-tools-linktothis": "Спасылка на гэтае паведамленне",
+ "tux-editor-loading": "Загрузка...",
+ "tux-editor-loading-failed": "Не атрымалася загрузіць падказкі перакладу: $1",
+ "translate-search-more-languages-info": "Яшчэ $1 {{PLURAL:$1|мова|мовы|моваў}}",
+ "translate-statsbar-tooltip": "$1% перакладзена, $2% вычытана",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% перакладзена, $2% вычытана, $3% састарэла",
+ "translate-search-more-groups-info": "Яшчэ $1 {{PLURAL:$1|група|групы|групаў}}",
+ "translate-syntax-error": "У перакладзе ёсць сінтаксічныя памылкі.",
+ "tux-session-expired": "Вы больш не ў сістэме. Калі ласка, увайдзіце ў асобнай укладцы браўзера. Апроч таго, зрабіце копію незахаваных перакладаў, увайдзіце ў сістэму, вярніцеся на гэтую старонку і зноў увядзіце свае пераклады.",
+ "tux-nojs": "Інструмент не працуе без JavaScript. JavaScript адключаны, не працуе або не падтрымваецца браўзерам.",
+ "specialpages-group-translation": "Пераклад",
+ "content-model-translate-messagebundle": "Перакладны пакет паведамленняў",
+ "translate-messagebundle-validation-error": "Няслушны набор паведамленняў: $1",
+ "translate-messagebundle-error-parsing": "Памылка пры апрацоўцы JSON: $1",
+ "translate-messagebundle-error-invalid-array": "Набор паведамленняў павінен быць аб’ектам JSON. Атрыманы тып $1",
+ "translate-messagebundle-error-key-empty": "Набор паведамленняў не можа змяшчаць пусты ключ",
+ "translate-messagebundle-error-key-too-long": "Ключ «$1» занадта доўгі",
+ "translate-messagebundle-error-key-invalid-characters": "Ключ «$1» змяшчае забароненыя сімвалы",
+ "translate-messagebundle-error-invalid-value": "Ключ «$1» не змяшчае радок",
+ "translate-messagebundle-error-empty-value": "Ключ «$1» не змяшчае значэнне",
+ "translate-messagebundle-error-metadata-type": "Метададзеныя павінны быць масівам",
+ "translate-messagebundle-error-invalid-metadata": "Раздзел метададзеных змяшчае невядомы ключ: «$1». Падтрымліваюцца ключы $2.",
+ "translate-messagebundle-error-invalid-sourcelanguage": "Код зыходнай мовы «$1» не падтрымліваецца.",
+ "translate-messagebundle-error-invalid-prioritylanguage": "{{PLURAL:$2|Няслушны код прыярытэтнай мовы ў|Няслушныя коды прыярытэтных моваў у}} метададзеных: $1",
+ "translate-messagebundle-error-invalid-prioritylanguage-format": "Няслушны фармат прыярытэтнай мовы ў метададзеных. Прыярытэтныя мовы павінны быць масівам радкоў.",
+ "translate-messagebundle-group-description": "Паведамленні з набору паведамленняў, вызначанага на старонцы [[$2|$1]].",
+ "translate-messagebundle-change-sourcelanguage": "Устанаўліваецца зыходная мова набору паведамленняў у адпаведнасці з метададзенымі.",
+ "translate-messagebundle-sourcelanguage-changed": "Зыходную мову набору паведамленняў нельга змяніць пасля яго стварэння.",
+ "log-action-filter-translationreview": "Від дзеяння:",
+ "log-action-filter-translationreview-message": "Агляд асобных перакладных паведамленняў",
+ "log-action-filter-translationreview-group": "Змены ў стане ходу перакладаў"
+}
diff --git a/Translate/i18n/core/bg.json b/Translate/i18n/core/bg.json
new file mode 100644
index 00000000..234e41ad
--- /dev/null
+++ b/Translate/i18n/core/bg.json
@@ -0,0 +1,344 @@
+{
+ "@metadata": {
+ "authors": [
+ "DCLXVI",
+ "Kareyac",
+ "ShockD",
+ "Spiritia",
+ "StanProg",
+ "Ted Masters",
+ "Vlad5250",
+ "Vodnokon4e",
+ "පසිඳු කාවින්ද"
+ ]
+ },
+ "translate": "Превеждане",
+ "translate-desc": "[[Special:Translate|Специална страница]] за превеждане на МедияУики и други",
+ "translate-fuzzybot-desc": "Това е служебна системна сметка, която се използва от разширението [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate Превеждане] на МедияУики за поддържане на преводи.\nТази сметка е част от MediaWiki и не е собственост на никой потребител.",
+ "translate-taskui-export-to-file": "Експортиране в собствен формат",
+ "translate-taskui-export-as-po": "Експортиране за офлайн превод",
+ "translate-export-csv-definition": "Дефиниция на съобщението",
+ "translate-taction-translate": "Превеждане",
+ "translate-taction-proofread": "Проверка",
+ "translate-taction-lstats": "Езикови статистики",
+ "translate-taction-mstats": "Статистики за групи съобщения",
+ "translate-taction-export": "Експортиране",
+ "translate-taction-disabled": "Действието е изключено в това уики.",
+ "translate-page-no-such-language": "Избраният език е невалиден.",
+ "translate-page-no-such-group": "Избраната група е невалидна.",
+ "translate-page-disabled": "Преводите на този език в тази група са изключени.\nПричина:\n\n<em>$1</em>",
+ "translate-language-disabled": "Преводът на този език е изключен.",
+ "translate-page-settings-legend": "Настройки",
+ "translate-page-group": "Група:",
+ "translate-page-language": "Език:",
+ "translate-page-limit": "Ограничение",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|съобщение|съобщения}} на страница",
+ "translate-submit": "Извличане",
+ "translate-page-navigation-legend": "Навигация",
+ "translate-page-showing": "Показани са съобщения от $1 до $2 от общо $3.",
+ "translate-page-showing-all": "{{PLURAL:$1|Показано е 1 съобщение|Показани са $1 съобщения}}.",
+ "translate-page-showing-none": "Няма съобщения, които да бъдат показани.",
+ "translate-next": "Следваща страница",
+ "translate-prev": "Предишна страница",
+ "translate-page-description-legend": "Информация за групата",
+ "translate-page-description-hasoptional": "Тази група от съобщение съдържа незадължителни съобщения.\nНезадължителните съобщения трябва да се превеждат само, ако вашия език има специални нужди, както транслитерация на имена или неупотреба на празни интервали. $1",
+ "translate-page-description-hasoptional-open": "Показване на допълнителни съобщения.",
+ "translate-page-edit": "редактиране",
+ "translate-optional": "(незадължително)",
+ "translate-ignored": "(пренебрегнато)",
+ "translate-edit-title": "Редактиране на „$1“",
+ "translate-edit-definition": "Дефиниция на съобщението",
+ "translate-edit-contribute": "принос",
+ "translate-edit-no-information": "<em>За това съобщение няма документация.\nАко знаете къде и как се използва, можете да помогнете на останалите преводачи, като добавите документация за съобщението.</em>",
+ "translate-edit-information": "Информация за съобщението ($1)",
+ "translate-edit-warnings": "Предупреждения за непълни преводи",
+ "translate-edit-tmmatch-source": "Изходен текст за превода: $1",
+ "translate-edit-tmmatch": "$1% съвпадение",
+ "translate-edit-nopermission": "За превеждане на съобщения са необходими права на преводач.",
+ "translate-edit-askpermission": "Получаване на позволение",
+ "exporttranslations": "Експортиране на преводи",
+ "translate-export-form-format": "Формат",
+ "translate-export-invalid-format": "Моля, посочете валиден формат.",
+ "translate-export-not-supported": "Експортирането на превод не се поддържа.",
+ "translate-export-format-notsupported": "Указаният формат на експортиране не се поддържа от групата съобщения.",
+ "translate-checks-parameters": "{{PLURAL:$2|Следният параметър не се използва|Следните параметри не се използват}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Следният параметър е непознат|Следните параметри са непознати}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "Съобщението съдържа нечетен брой {{PLURAL:$2|скоби}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Следната препратка е проблемна|Следните $2 препратки са проблемни}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Липсва следната препратка|Липсват следните $2 препратки}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Оригиналното съобщение използва <nowiki>{{PLURAL:}}</nowiki>, а преводът — не.",
+ "translate-checks-pagename": "Променена е дефиницията на именното пространство",
+ "translate-checks-format": "Този превод не е съгласно дефиницията или има невалиден синтаксис: $1",
+ "translate-checks-fudforum-syntax": "Използвайте <nowiki>$1</nowiki> вместо <nowiki>$2</nowiki> в този проект.",
+ "translate-pref-editassistlang": "Помощни езици:",
+ "prefs-translate": "Настройки на превеждането",
+ "right-translate": "Редактиране чрез интерфейса за превод",
+ "action-translate": "редактиране чрез интерфейса за превод",
+ "right-translate-manage": "Управление на групи съобщения",
+ "action-translate-manage": "управление на групи съобщения",
+ "right-translate-import": "Внасяне на офлайн преводи",
+ "action-translate-import": "внасяне на офлайн превод",
+ "right-translate-messagereview": "Проверка на преводи",
+ "action-translate-messagereview": "проверка на преводи",
+ "right-translate-groupreview": "Промяна на състоянието на работния поток на групите съобщения",
+ "action-translate-groupreview": "промяна на състоянието на работния поток на групите съобщения",
+ "translate-rcfilters-translations": "Преводи",
+ "translate-rcfilters-translations-only-label": "Преводи",
+ "translate-rcfilters-translations-only-desc": "Промени от преведни страници.",
+ "translate-rcfilters-translations-filter-label": "Непреводи",
+ "translate-rcfilters-translations-filter-desc": "Всички промени, които не са преводи.",
+ "translate-rcfilters-translations-site-label": "Съобщения от сайта",
+ "translate-rcfilters-translations-site-desc": "Персонализации на съобщения от сайта в именното пространство MediaWiki.",
+ "translate-rc-translation-filter": "Филтриране на преводите:",
+ "translate-rc-translation-filter-no": "Без действие",
+ "translate-rc-translation-filter-only": "Само на преводите",
+ "translate-rc-translation-filter-filter": "Филтриране на преводите",
+ "translate-rc-translation-filter-site": "Промени само в съобщенията за сайта",
+ "translationstats": "Статистика за преводите",
+ "translate-stats-edits": "Редакции",
+ "translate-stats-users": "Преводачи",
+ "translate-stats-registrations": "Регистрации",
+ "translate-stats-reviews": "Проверки",
+ "translate-stats-reviewers": "Рецензенти",
+ "translate-statsf-intro": "Формулярът по-долу служи за генериране на статистика. Всички възможности имат минимални и максимални стойности.",
+ "translate-statsf-options": "Графични настройки",
+ "translate-statsf-width": "Ширина в пиксели:",
+ "translate-statsf-height": "Височина в пиксели:",
+ "translate-statsf-days": "Период в дни:",
+ "translate-statsf-start": "Начална дата:",
+ "translate-statsf-scale": "Прецизност:",
+ "translate-statsf-scale-years": "Години",
+ "translate-statsf-scale-months": "Месеци",
+ "translate-statsf-scale-weeks": "Седмици",
+ "translate-statsf-scale-days": "Дни",
+ "translate-statsf-scale-hours": "Часове",
+ "translate-statsf-count": "Мярка:",
+ "translate-statsf-count-edits": "Брой редакции",
+ "translate-statsf-count-users": "Активни преводачи",
+ "translate-statsf-count-registrations": "Нови потребители",
+ "translate-statsf-count-reviews": "Проверявания на преводи",
+ "translate-statsf-count-reviewers": "Рецензенти",
+ "translate-statsf-language": "Списък с езикови кодове, разделени със запетаи:",
+ "translate-statsf-group": "Списък с групови кодове, разделени със запетаи:",
+ "translate-statsf-submit": "Преглед",
+ "translate-statsf-unknown-error": "Възникна неизвестна грешка.",
+ "translate-tag-page-desc": "Превод на страницата [[$2|$1]] от $3 ($4).",
+ "translate-sidebar-alltrans": "На други езици",
+ "translations": "Всички преводи",
+ "translations-summary": "Въведете име на съобщение, за да видите наличните му преводи на всички езици.",
+ "translate-translations-no-message": "Съобщение „$1“ не е достъпно за превод",
+ "translate-translations-none": "Не съществуват преводи за „$1“",
+ "translate-translations-count": "{{PLURAL:$1|Открит е $1 превод|Открити са $1 превода}}.",
+ "translate-translations-fieldset-title": "Съобщение",
+ "translate-translations-messagename": "Име:",
+ "translate-translations-project": "Проект:",
+ "translate-translations-including-no-param": "Посочете валиден ключ на съобщението в параметъра на подстраницата",
+ "translate-translations-history-short": "и",
+ "languagestats": "Езикови статистики",
+ "languagestats-summary": "Тази страница показва статистиките за преводите на всички групи съобщения за езика.",
+ "messagegroupstats-summary": "На страницата са показани статистики за групи съобщения.",
+ "languagestats-stats-for": "Статистики за преводите на $1 ($2).",
+ "languagestats-recenttranslations": "последни преводи",
+ "translate-langstats-incomplete": "Някои от статистиките на тази страница са непълни. Моля, презаредете страницата за получаване на по-подробни данни.",
+ "translate-langstats-expand": "разгръщане",
+ "translate-langstats-collapse": "свиване",
+ "translate-langstats-expandall": "разгръщане на всички",
+ "translate-langstats-collapseall": "свиване на всички",
+ "translate-language-code": "Езиков код",
+ "translate-language-code-field-name": "Езиков код:",
+ "translate-suppress-complete": "Скриване на изцяло преведените групи съобщения",
+ "translate-ls-noempty": "Скриване на изцяло непреведените групи съобщения",
+ "translate-language": "Език",
+ "translate-total": "Съобщения",
+ "translate-untranslated": "Непреведени",
+ "translate-percentage-complete": "Завършени",
+ "translate-percentage-fuzzy": "Остарели",
+ "translate-percentage-proofread": "Проверени",
+ "translate-languagestats-overall": "Съобщения за всички групи",
+ "translate-ls-submit": "Показване на статистики",
+ "translate-ls-column-group": "Група съобщения",
+ "translate-mgs-pagename": "Статистика за групата съобщения",
+ "translate-mgs-fieldset": "Визуални настройки",
+ "translate-mgs-group": "Група съобщения:",
+ "translate-mgs-nocomplete": "Скриване на езици с напълно завършен превод",
+ "translate-mgs-noempty": "Скриване на езици без започнат превод",
+ "translate-mgs-submit": "Показване на статистики",
+ "translate-mgs-column-language": "Език",
+ "translate-mgs-totals": "{{PLURAL:$1|Всеки език|Всички $1 езици заедно}}",
+ "translate-mgs-invalid-group": "Посочената група $1 не съществува.",
+ "supportedlanguages": "Активни езици",
+ "supportedlanguages-sqlite-error": "SQLite не е поддържан",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Преводач|Преводачка}}|Преводачи}}: $1",
+ "supportedlanguages-recenttranslations": "последни преводи",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|език|езици}} общо.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|редакция|редакции}} - последната преди $3 {{PLURAL:$3|ден|дни}}",
+ "abusefilter-edit-builder-vars-translate-source-text": "Изходен текст на преводната единица",
+ "translate-jssti-add": "Добавяне към списъка",
+ "managemessagegroups": "Управление на групи съобщения",
+ "translate-smg-notallowed": "Не ви е позволено да извършите това действие.",
+ "translate-smg-nochanges": "Няма промени за обработка.",
+ "translate-smg-submit": "Изпращане на промени за обработка",
+ "translate-smg-left": "Съдържание на съобщението в уикито",
+ "translate-smg-right": "Предстоящи промени",
+ "translate-smg-rename-select": "Избиране",
+ "translate-smg-rename-cancel": "Отказ",
+ "translate-smg-rename-search": "Търсене на съответстващо съобщение...",
+ "translate-smg-rename-select-err": "Моля, изберете съобщение за преименуване",
+ "translate-smg-rename-no-msg": "Няма намерени съобщения.",
+ "translate-smg-rename-new": "Добавяне като ново...",
+ "translate-smg-rename-rename": "Добавяне като преименуване на...",
+ "translate-smg-strong-sync-help": "Помощ",
+ "translate-smg-group-message-action-history": "История",
+ "translate-smg-group-action-resolve": "Отбелязване като разрешено",
+ "translate-smg-group-message-tag-outdated": "Неактуални",
+ "translate-smg-group-message-tag-rename": "Преименуване",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|Етикет|Етикети}}:",
+ "translate-smg-group-message-message-content": "Съдържание:",
+ "translate-smg-group-message-message-target": "Цел:",
+ "translate-smg-group-message-message-replacement": "Замяна:",
+ "translate-smg-group-message-message-other-langs": "Други езици:",
+ "translate-smg-loading": "Зареждане...",
+ "translate-smg-unknown-error": "Възникна неизвестна грешка при обработката на вашата заявка.",
+ "translate-manage-import-diff": "Съобщение $1 | Действия: $2",
+ "translate-manage-import-new": "Ново съобщение $1",
+ "translate-manage-import-deleted": "Изтрито съобщение $1",
+ "translate-manage-action-import": "Внасяне",
+ "translate-manage-action-ignore": "Пренебрегване",
+ "translate-manage-action-rename": "Преименуване",
+ "translate-manage-action-ignore-change": "Игнориране на промяната на превода",
+ "translate-manage-nochanges": "Няма промени в дефинициите на съобщенията за тази група.",
+ "translate-manage-import-summary": "Внасяне на нова версия от външен източник",
+ "translate-manage-conflict-summary": "Внасяне на нова версия от външен източник.\nМоля, проверете.",
+ "translate-manage-submit": "Изпълняване",
+ "translate-manage-intro-other": "По-долу е даден списък на промените по превода на $1.\nМоля, прегледайте промените и изберете желаното действие за всяка промяна.\nАко изберете да игнорирате промените, то това ще бъде временно действие.",
+ "translate-manage-import-ok": "Внесено: $1",
+ "translate-manage-import-done": "Внасянето завърши!",
+ "translate-manage-source-message-not-found": "Не е намерена дефиницията на съобщението",
+ "importtranslations": "Внасяне на преводи",
+ "translate-import-from-local": "Локално качване на файл:",
+ "translate-import-load": "Зареждане на файла",
+ "translate-import-err-ul-failed": "Качването на файла не беше успешно",
+ "translate-import-err-invalid-title": "Посоченото име на файла <nowiki>$1</nowiki> е невалидно.",
+ "translate-import-err-no-such-file": "Файлът <nowiki>$1</nowiki> не съществува или не е бил качен локално.",
+ "translate-import-err-stale-group": "Файлът принадлежи на несъществуваща група съобщения.",
+ "translate-js-support-unsaved-warning": "Имате непубликувани преводи.",
+ "translate-gs-pos": "Място",
+ "translate-gs-code": "Код",
+ "translate-gs-continent": "Континент",
+ "translate-gs-multiple": "Повече",
+ "translate-gs-count": "Брой",
+ "translate-gs-total": "Общо",
+ "translate-documentation-language": "Документация на съобщението",
+ "translate-searchprofile": "Преводи",
+ "translate-searchprofile-tooltip": "Търсене във всички преводи",
+ "translate-searchprofile-note": "Повече възможности за търсене ще намерите на [$1 търсенето на преводи].",
+ "translate-search-languagefilter": "Филтриране по език:",
+ "translate-search-nofilter": "Без филтриране",
+ "log-name-translationreview": "Дневник на проверките на преводи",
+ "log-description-translationreview": "Дневник на всички проверки на преводи и групи съобщения.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|провери}} превод $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|промени}} състоянието на преводите на $3 на $4 език от „$6“ на „$7“",
+ "group-translate-sandboxed": "Неодобрени преводачи",
+ "group-translate-sandboxed-member": "{{GENDER:$1|неодобрен преводач}}",
+ "translate-workflow-state-": "(незададен)",
+ "translate-workflowstatus": "Статус: $1",
+ "translate-workflow-set-doing": "Задаване...",
+ "translate-workflow-autocreated-summary": "Автоматично създаване на страница за състояние на работния поток $1",
+ "translate-stats-workflow": "Статут",
+ "translate-workflowgroup-label": "Състояния на работния процес",
+ "translate-workflowgroup-desc": "Тази група съобщения показва работното състояние на преводите.\nСъстоянията се определят с променливата $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Последни преводи",
+ "translate-dynagroup-recent-desc": "Тази група съобщения показва всички скорошни преводи на избрания език.\nНай-често се използва при проверка на преводи.",
+ "translate-dynagroup-additions-label": "Последни допълнения",
+ "translate-dynagroup-additions-desc": "Тази група съобщения показва нови и изменени съобщения.",
+ "translate-msggroupselector-projects": "Група съобщения",
+ "translate-msggroupselector-search-placeholder": "Търсене на групи",
+ "translate-msggroupselector-search-all": "Всички",
+ "translate-msggroupselector-search-recent": "Последни",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|подгрупа|подгрупи}}",
+ "tux-languageselector": "Превеждане на",
+ "tux-tab-all": "Всички",
+ "tux-tab-untranslated": "Непреведени",
+ "tux-tab-outdated": "Неактуални",
+ "tux-tab-translated": "Преведени",
+ "tux-tab-unproofread": "Непроверени",
+ "tux-edit": "Редактиране",
+ "tux-status-optional": "Незадължително",
+ "tux-status-fuzzy": "Неактуален",
+ "tux-status-proofread": "Проверени",
+ "tux-status-translated": "Преведено",
+ "tux-status-saving": "Публикуване...",
+ "tux-status-unsaved": "Непубликувано",
+ "tux-save-unknown-error": "Възникна неизвестна грешка.",
+ "tux-editor-editsummary-placeholder": "Обяснете направените от Вас промени (незадължително)",
+ "tux-editor-discard-changes-button-label": "Отхвърляне на промени",
+ "tux-editor-save-button-label": "Публикуване на превода",
+ "tux-editor-skip-button-label": "Направо към следващото",
+ "tux-editor-cancel-button-label": "Отказ",
+ "tux-editor-confirm-button-label": "Потвърждаване на превода",
+ "tux-editor-proofread-button-label": "Отбелязване като проверено",
+ "tux-editor-edit-desc": "Редактиране на документация",
+ "tux-editor-add-desc": "Добавяне на документация",
+ "tux-editor-suggestions-title": "Предложения",
+ "tux-editor-latest-updates-title": "Последни актуализации",
+ "tux-editor-changes-without-summary": "$1 {{PLURAL:$1|актуализация|актуализации}} без резюме",
+ "tux-editor-all-changes": "Всички промени",
+ "tux-editor-in-other-languages": "На други езици",
+ "tux-editor-need-more-help": "Нуждаете се от допълнителна помощ?",
+ "tux-editor-ask-help": "Поискайте още информация",
+ "tux-editor-tm-match": "$1% съвпадение",
+ "tux-notices-more": "{{PLURAL:$1|$1 още}}",
+ "tux-notices-hide": "скриване",
+ "tux-editor-n-uses": "използвано $1 {{PLURAL:$1|път|пъти}}",
+ "tux-editor-message-desc-more": "Виж още",
+ "tux-editor-message-desc-less": "Показване компактно",
+ "tux-editor-clear-translated": "Скриване на преведените",
+ "tux-editor-proofreading-mode": "Проверка",
+ "tux-editor-translate-mode": "Списък",
+ "tux-editor-proofreading-hide-own-translations": "Скриване на вашите преводи",
+ "tux-editor-proofreading-show-own-translations": "Показване на вашите преводи",
+ "tux-proofread-action-tooltip": "Отбелязване като проверено",
+ "tux-proofread-edit-label": "Редактиране",
+ "tux-editor-page-mode": "Страница",
+ "tux-editor-outdated-notice-diff-link": "Показване на разликите",
+ "tux-editor-doc-editor-placeholder": "Документация на съобщението",
+ "tux-editor-doc-editor-save": "Публикуване на документацията",
+ "tux-editor-doc-editor-cancel": "Отказ",
+ "tux-messagetable-more-messages": "Още $1 {{PLURAL:$1|съобщение|съобщения}}",
+ "tux-messagetable-loading-messages": "Зареждане на {{PLURAL:$1|съобщение|съобщения}}...",
+ "tux-message-filter-placeholder": "Филтриране на списъка",
+ "tux-message-filter-advanced-button": "Разширено търсене",
+ "tux-message-filter-optional-messages-label": "Незадължителни съобщения",
+ "tux-proofread-translated-by-self": "Преведено от Вас",
+ "tux-empty-list-all": "Тази група съобщения е празна",
+ "tux-empty-list-all-guide": "Изберете друга група съобщения за превеждане",
+ "tux-translate-page-no-such-group": "<strong>Посочената група съобщения не съществува.</strong> Изберете друга.",
+ "tux-empty-list-translated": "Няма преведени съобщения",
+ "tux-empty-list-translated-guide": "Можете да помогнете с превода",
+ "tux-empty-list-translated-action": "Превеждане",
+ "tux-empty-no-messages-to-display": "Няма съобщения за показване.",
+ "tux-empty-show-optional-messages": "Показване на допълнителните съобщения",
+ "tux-empty-no-outdated-messages": "Няма неактуални съобщения",
+ "tux-empty-nothing-to-proofread": "Няма нищо за проверка",
+ "tux-empty-you-can-help-providing": "Можете да помогнете с нови преводи",
+ "tux-empty-nothing-new-to-proofread": "Няма нищо ново за проверка",
+ "tux-empty-you-can-review-already-proofread": "Можете да проверите преводите, които вече са проверени от други.",
+ "tux-empty-list-other": "Няма нищо за превеждане",
+ "tux-empty-list-other-guide": "Можете да помогнете с проверката на съществуващите преводи",
+ "tux-empty-list-other-action": "Проверка на преводите",
+ "tux-empty-list-other-link": "Показване на всички съобщения",
+ "tux-editor-close-tooltip": "Затваряне",
+ "tux-editor-expand-tooltip": "Разгръщане",
+ "tux-editor-collapse-tooltip": "Свиване",
+ "tux-editor-message-tools-show-editor": "Показване в уики редактор",
+ "tux-editor-message-tools-history": "История",
+ "tux-editor-message-tools-delete": "Изтриване",
+ "tux-editor-message-tools-translations": "Всички преводи",
+ "tux-editor-message-tools-linktothis": "Връзка към това съобщение",
+ "tux-editor-loading": "Зареждане...",
+ "translate-search-more-languages-info": "още $1 {{PLURAL:$1|език|езика}}",
+ "translate-statsbar-tooltip": "$1% преведени, $2% проверени",
+ "translate-search-more-groups-info": "още $1 {{PLURAL:$1|група|групи}}",
+ "tux-nojs": "Този инструмент не работи без JavaScript. JavaScript е деактивиран, не работи или не се поддържа от браузъра.",
+ "specialpages-group-translation": "Превод"
+}
diff --git a/Translate/i18n/core/bgn.json b/Translate/i18n/core/bgn.json
new file mode 100644
index 00000000..b6c21054
--- /dev/null
+++ b/Translate/i18n/core/bgn.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Baloch Afghanistan",
+ "Ibrahim khashrowdi"
+ ]
+ },
+ "translate-sidebar-alltrans": "بِه دیگه زباناني تا",
+ "translate-documentation-language": "پیامی مستندان",
+ "translate-msggroupselector-search-all": "موچین",
+ "tux-tab-all": "موچین"
+}
diff --git a/Translate/i18n/core/bho.json b/Translate/i18n/core/bho.json
new file mode 100644
index 00000000..357dc0fc
--- /dev/null
+++ b/Translate/i18n/core/bho.json
@@ -0,0 +1,42 @@
+{
+ "@metadata": {
+ "authors": [
+ "Anshumangupta21",
+ "Nepaboy",
+ "SatyamMishra"
+ ]
+ },
+ "translate": "अनुवादन करीं",
+ "translate-desc": "[[Special:Translate| विशेष पन्ना]] मीडीयाविकि के अनुवादन खातिर",
+ "translate-taskui-export-to-file": "मूल स्वरूप में निर्यात करीं",
+ "translate-taskui-export-as-po": "ऑफ़लाइन अनुवाद के खातिर निर्यात करीं",
+ "translate-taction-translate": "अनुवाद करीं",
+ "translate-taction-proofread": "सुधार करीं",
+ "translate-taction-lstats": "ई भाषा के आंकड़ा",
+ "translate-taction-mstats": "ई संदेश समूह के आंकड़ा",
+ "translate-taction-export": "निर्यात",
+ "translate-taction-disabled": "ई विकि पर ई कार्य के असमर्थ करल बा",
+ "translate-page-no-such-language": "विस्तृत भाषा अमान्य बा",
+ "translate-page-no-such-group": "विस्तृत समूह अमान्य बा",
+ "translate-page-disabled": "ई भाषा के ई समूह में अनुवाद बंद करल बा। कारण: \"$1\"",
+ "translate-language-disabled": "ई भाषा में अनुवाद बंद करल बा।",
+ "translate-page-settings-legend": "सेटिंग्स",
+ "translate-page-group": "समूह",
+ "translate-page-language": "भाषा",
+ "translate-page-limit": "सीमा",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|संदेश|संदेश}} प्रती पन्ना",
+ "translate-submit": "ढूंढीं",
+ "translate-page-navigation-legend": "परिभ्रमण",
+ "translate-page-showing": "Showing messages from $1 to $2 of $3.",
+ "translate-page-showing-none": "दिखावे खातिर कउनो सन्देश नईखे बा",
+ "translate-next": "अगला पन्ना",
+ "translate-prev": "पिछलका पन्ना",
+ "translate-page-description-legend": "ई समूह के बारे मे जानकारी",
+ "translate-page-edit": "सम्पादन करीं",
+ "translate-edit-definition": "संदेश परिभाषा",
+ "translate-edit-contribute": "योगदान करीं",
+ "translate-edit-tmmatch": "$1% मिलान",
+ "translate-edit-askpermission": "अनुमती खातिर अनुरोध करीं",
+ "translate-documentation-language": "संदेस परलेखन",
+ "tux-editor-message-tools-delete": "मिटाईं"
+}
diff --git a/Translate/i18n/core/bjn.json b/Translate/i18n/core/bjn.json
new file mode 100644
index 00000000..2f7d94eb
--- /dev/null
+++ b/Translate/i18n/core/bjn.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ezagren"
+ ]
+ },
+ "translate-extensionname": "Tarjamahan",
+ "exporttranslations": "Ékspor tarjamahan",
+ "prefs-translate": "Pilihan tarjamahan",
+ "right-translate-messagereview": "Mamariksa tarjamahan",
+ "translate-rcfilters-translations": "Tarjamahan",
+ "translationstats": "Statistik panarjamahan",
+ "translations": "Samunyaan tarjamahan",
+ "languagestats-recenttranslations": "tarjamahan wayahini",
+ "translate-mgs-fieldset": "Tampaiakan kakatujuan",
+ "translate-tes-group-not-found": "Kadada hasil nang rasuk",
+ "supportedlanguages-recenttranslations": "tarjamahan damini",
+ "translate-manage-nochanges-other": "Kadada paubahan pada basa ini.\nPakai tautan ini gasan babulik ka tampaian rincian galambang.",
+ "importtranslations": "Impur tarjamahan",
+ "translate-documentation-language": "Dokuméntasi pasan",
+ "translate-searchprofile": "Tarjamahan",
+ "tux-notices-hide": "suhukakan"
+}
diff --git a/Translate/i18n/core/blk.json b/Translate/i18n/core/blk.json
new file mode 100644
index 00000000..c6811d75
--- /dev/null
+++ b/Translate/i18n/core/blk.json
@@ -0,0 +1,79 @@
+{
+ "@metadata": {
+ "authors": [
+ "Khun Kt",
+ "Ninjastrikers",
+ "咽頭べさ"
+ ]
+ },
+ "translate-taction-translate": "ပြန်ႏဘာႏသာႏ",
+ "translate-taction-proofread": "ထွားစဲစ်ချာ",
+ "translate-taction-lstats": "ဘာႏသာႏငဝ်းငွါ စာႏရင်ꩻ",
+ "translate-taction-mstats": "မဲက်သေ့စွုမ်ꩻစွိုꩻစာႏရင်ꩻ",
+ "translate-taction-export": "ဒင်ႏပသာ",
+ "translate-edit-definition": "လိတ်မဲက်သေ့ အဓိပ္ပာယ်ႏအွောန်ႏထွော့ချက်",
+ "translate-edit-information": "လိတ်မဲက်သေ့ခရာႏ သꩻတင်ꩻအချက်လက် ($1)",
+ "prefs-translate": "ပြန်ႏဘာႏသာႏ လွိုက်ရွေꩻခရာႏဖုံႏ",
+ "translate-rcfilters-translations": "ဘာႏသာႏပြန်ႏဖုံႏ",
+ "translate-rcfilters-translations-filter-label": "ဘာႏသာႏပြန်ႏဖိုင်ႏအဝ်ႏတဝ်း",
+ "translationstats": "ဘာႏသာႏပြန်ႏမုꩻစာႏရင်ꩻချုတ်",
+ "translate-stats-users": "ကေားပြန်ႏဘာႏသာႏသားဖိုင်ႏ",
+ "translate-stats-reviewers": "ကေားစဲစ်ထွားချာသား",
+ "translate-statsf-intro": "ထေပြန်ႏနွောင်ꩻဒျာႏ စာႏရင်ꩻရိုꩻရိုꩻ တောမ်ႏပုင်ႏစံႏယိုသွူ။ တန်ႏငိုꩻဖိုင်ႏနဝ်ꩻ အွောန်ႏထွော့ချက် ကီလ့ဖိုင်ႏအဝ်ႏသွူ။",
+ "translate-statsf-days": "အခိန်ႏကာႏလ တောမ်ႏမွူးနီꩻအနေႏ:",
+ "translate-statsf-start": "မာꩻစဒါႏမွူးနီꩻ:",
+ "translate-statsf-scale": "စဲင်းသျင်ꩻမွေး:",
+ "translate-statsf-scale-years": "နေင်ႏဖိုင်ႏ",
+ "translate-statsf-scale-weeks": "ပတ်",
+ "translate-statsf-count": "အဒွေါင်ႏတဆွာꩻ:",
+ "translate-statsf-count-edits": "မွဉ်းဖျင်မုꩻဆေ့ꩻအာ",
+ "translate-statsf-count-users": "သောင်ႏသာဒါႏ ဘာႏသာႏပြန်ႏသားဖိုင်ႏ",
+ "translate-statsf-count-registrations": "ကေားသုင်ꩻသား လိုꩻတသာဖိုင်ႏ",
+ "translate-statsf-count-reviews": "စဲစ်ထွားချာ ဘာႏသာႏပြန်ႏဖိုင်ႏ",
+ "translate-statsf-count-reviewers": "ကေားစဲစ်ထွားချာသား",
+ "translate-statsf-language": "အွောန်ႏခါႏခါꩻဒါႏကော်မာ အစွိုꩻကိုဒ်ဖိုင်ႏစာႏရင်ꩻ:",
+ "translate-statsf-group": "အွောန်ႏခါႏခါꩻဒါႏကော်မာ အစွိုꩻကိုဒ်ဖိုင်ႏစာႏရင်ꩻ:",
+ "translate-sidebar-alltrans": "တွမ်ႏဘာႏသာႏလင်ဖုံႏအကို",
+ "languagestats": "ဘာႏသာႏငဝ်းငွါ စာႏရင်ꩻ",
+ "languagestats-recenttranslations": "ဘာႏသာႏပြန်ႏ ယိုခါကျာꩻဖိုင်ႏ",
+ "translate-total": "မဲက်သေ့ဖိုင်ႏ",
+ "translate-untranslated": "ပြန်ႏဗာႏဒွိုန်းဘာႏသာႏ",
+ "translate-percentage-fuzzy": "ထဲ့ဆုဲင်ꩻထိုꩻခေတ်",
+ "translate-ls-column-group": "မဲက်သေ့စွုမ်ꩻစွိုꩻ",
+ "translate-mgs-pagename": "မဲက်သေ့စွုမ်ꩻစွိုꩻစာႏရင်ꩻ",
+ "translate-mgs-group": "မဲက်သေ့စွုမ်ꩻစွိုꩻ:",
+ "supportedlanguages": "သက်မွန်ဒါႏ ဘာႏသာႏငဝ်းငွါဖိုင်ႏ",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|ကေားပြန်ႏဘာႏသာႏသား}}|ကေားပြန်ႏဘာႏသာႏသားဖိုင်ႏ}}: $1",
+ "supportedlanguages-recenttranslations": "ဘာႏသာႏပြန်ႏ ယိုခါကျာꩻဖိုင်ႏ",
+ "translate-jssti-add": "ထဲမ်သော့ꩻ စာႏရင်ꩻထျꩻ",
+ "managemessagegroups": "စီႏမံႏဖန်းဖြယ် လိတ်မဲက်သေ့အစွိုꩻ",
+ "translate-smg-group-message-tag-outdated": "ထဲ့ဆုဲင်ꩻထိုꩻခေတ်",
+ "translate-documentation-language": "လိတ်လာႏ စေးလာႏစေးဖွူꩻ",
+ "translate-searchprofile": "ဘာႏသာႏပြန်ႏဖုံႏ",
+ "translate-dynagroup-recent-label": "ဘာႏသာႏပြန်ႏ ယိုခါကျာꩻဖိုင်ႏ",
+ "translate-msggroupselector-projects": "မဲက်သေ့စွုမ်ꩻစွိုꩻ",
+ "tux-languageselector": "အီႏပြန်ႏဒါႏဘာႏသာႏနဝ်ꩻ",
+ "tux-tab-untranslated": "ပြန်ႏဗာႏဒွိုန်းဘာႏသာႏ",
+ "tux-tab-outdated": "ထဲ့ဆုဲင်ꩻထိုꩻခေတ်",
+ "tux-tab-translated": "ပြန်ႏခါꩻဒါႏဘာႏသာႏ",
+ "tux-status-fuzzy": "ထဲ့ဆုဲင်ꩻထိုꩻခေတ်",
+ "tux-status-translated": "ပြန်ႏခါꩻဒါႏဘာႏသာႏ",
+ "tux-save-unknown-error": "သေတဝ်းအကျောင်ꩻခရာႏ အမာႏတဗာႏ ထွာထိုꩻသွူ။",
+ "tux-editor-editsummary-placeholder": "ခြုဲင်းနယ်သွော့ နာꩻပြောင်ꩻလုဲင်ႏမုꩻဖိုင်ႏ (သော့ꩻတဝ်းလဲ့လꩻဒျာႏ)",
+ "tux-editor-paste-original-button-label": "ထူႏပွာꩻဗိုန် လိတ်ယာႏအရွီးခိုႏ",
+ "tux-editor-discard-changes-button-label": "မာꩻတဝ်းဒွုမ် ပြောင်ꩻလုဲင်ႏမုꩻဖိုင်ႏ",
+ "tux-editor-save-button-label": "သိမ်ꩻဘာႏသာႏပြန်ႏယို",
+ "tux-editor-skip-button-label": "ကာႏငါလွေꩻ ထဲင်းတဗာႏ",
+ "tux-editor-shortcut-info": "သိမ်ꩻတာႏ နျꩻသွော့ \"$1\" တဝ်းလဲ့ ကာႏငါထိုꩻ ထဲင်းတဗာႏ၊ နျꩻသွော့ \"$2\" တဝ်းလဲ့ အွဥ်ႏနယ်အအဲဥ်ႏတာႏ နျꩻသွော့ \"$4\" တဝ်းလဲ့ အမုဲင်ဒွောင်းအလင်တာႏ နျꩻသွော \"$3\"။",
+ "tux-editor-edit-desc": "မွဉ်းဖျင် လိတ်စေးလာႏ",
+ "tux-editor-suggestions-title": "ဖေႏကျံႏညဏ်ႏမုꩻဖိုင်ႏ",
+ "tux-editor-in-other-languages": "တွမ်ႏဘာႏသာႏလင်ဖုံႏအကို",
+ "tux-editor-need-more-help": "အဝ်ႏလိုႏထဲင်းယင်းနေ အကူႏညီႏ?",
+ "tux-editor-ask-help": "ရီထဲင်းယင်း အချက်လက်တာႏ",
+ "tux-editor-save-failed": "ဒင်ႏထင်ႏ ဘာႏသာႏပြန်ႏမုꩻ အောင်ႏမျင်ႏတဝ်း: $1",
+ "tux-editor-message-desc-more": "ထွားသမ်းထဲင်း",
+ "tux-editor-clear-translated": "ပလို့ꩻ ပြန်ႏထွူဒါႏဘာႏသာႏ",
+ "tux-editor-proofreading-mode": "ထွားစဲစ်ချာ",
+ "tux-editor-outdated-notice": "ဘာႏသာႏပြန်ႏယိုနဝ်ꩻ အဝ်ႏလိုႏဒါႏ မွဉ်းဖျင်မုꩻနဝ်ꩻသွူ။",
+ "tux-message-filter-result": "\"$2\" အတာႏ {{PLURAL:$1|လꩻလဒ်|မော့ꩻလဲဉ်းဒျာႏ လꩻလဒ်}} $1 ဖိုင်ႏသွူ"
+}
diff --git a/Translate/i18n/core/bn.json b/Translate/i18n/core/bn.json
new file mode 100644
index 00000000..d838f31b
--- /dev/null
+++ b/Translate/i18n/core/bn.json
@@ -0,0 +1,424 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aftab1995",
+ "Aftabuzzaman",
+ "Aishik Rehman",
+ "Anubhab91",
+ "Bellayet",
+ "Gahori",
+ "Hirok Raja",
+ "Leemon2010",
+ "R4356th",
+ "Tauhid16",
+ "Zaheen",
+ "আজিজ",
+ "আফতাবুজ্জামান",
+ "মোঃ মারুফ হাসান24"
+ ]
+ },
+ "translate": "অনুবাদ",
+ "translate-extensionname": "অনুবাদ",
+ "translate-desc": "মিডিয়াউইকি এবং এর বাইরের অনুবাদের জন্য [[Special:Translate|বিশেষ পাতা]]",
+ "translate-fuzzybot-desc": "অনুবাদ রক্ষণাবেক্ষণের জন্য, এটি মিডিয়াউইকির [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate অনুবাদ এক্সটেনশন] দ্বারা ব্যবহৃত একটি বিশেষ সিস্টেম অ্যাকাউন্ট।\nএই অ্যাকাউন্টটি মিডিয়াউইকি সফটওয়্যারের অংশ এবং এটি কোনো ব্যবহারকারীর মালিকানাধীন নয়।",
+ "translate-taskui-export-to-file": "স্থানীয় ফরম্যাটে আমদানী করুন।",
+ "translate-taskui-export-as-po": "অফলাইন অনুবাদের জন্য আমদানি করুন",
+ "translate-taskui-export-as-csv": "CSV আকারে রপ্তানি করুন",
+ "translate-export-csv-message-title": "অনুবাদ বার্তা শিরোনাম",
+ "translate-export-csv-definition": "বার্তার সংজ্ঞা",
+ "translate-taction-translate": "অনুবাদ",
+ "translate-taction-proofread": "পর্যালোচনা",
+ "translate-taction-lstats": "ভাষার পরিসংখ্যান",
+ "translate-taction-mstats": "বার্তা দলের পরিসংখ্যান",
+ "translate-taction-export": "রপ্তানি",
+ "translate-taction-disabled": "এই উইকিতে এই কাজ নিস্ক্রিয় রয়েছে।",
+ "translate-page-no-such-language": "নির্দিস্টকৃত ভাষাটি অবৈধ ছিল।",
+ "translate-page-no-such-group": "নির্দিস্টকৃত সংঘটি অবৈধ ছিল।",
+ "translate-page-disabled": "এই দলে এই ভাষাটির অনুবাদ অক্ষম করা হয়েছে।\nকারণ:\n\n<em>$1</em>",
+ "translate-language-disabled": "এই ভাষায় অনুবাদ নিষ্ক্রিয় করা হয়েছে।",
+ "translate-page-settings-legend": "সেটিং",
+ "translate-page-group": "দল",
+ "translate-page-language": "ভাষা",
+ "translate-page-limit": "সীমা",
+ "translate-page-limit-option": "পাতা প্রতি $1টি {{PLURAL:$1|বার্তা}}",
+ "translate-submit": "বের করো",
+ "translate-page-navigation-legend": "পরিভ্রমণ",
+ "translate-page-showing": "$3টি বার্তার মধ্যে $1 থেকে $2টি বার্তা দেখানো হচ্ছে।",
+ "translate-page-showing-all": "$1টি {{PLURAL:$1|বার্তা}} দেখানো হচ্ছে।",
+ "translate-page-showing-none": "প্রদর্শনের জন্য কোন বার্তা নাই।",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "পরবর্তী পাতা",
+ "translate-prev": "পূর্ববর্তী পাতা",
+ "translate-page-description-legend": "দলের তথ্য",
+ "translate-page-description-hasoptional": "এই বার্তা দলে ঐচ্ছিক বার্তা রয়েছে।\nঐচ্ছিক বার্তাগুলি আপনার ভাষায় বিশেষ প্রয়োজনীয়তা থাকলে তবেই অনুবাদ করা উচিত,\nযেমন ফাঁকাস্থান ব্যবহার না করা অথবা নামবাচক বিশেষ্যের প্রতিবর্ণীকরণ করা। $1",
+ "translate-page-description-hasoptional-open": "ঐচ্ছিক বার্তাগুলি দেখান।",
+ "translate-page-edit": "সম্পাদনা",
+ "translate-optional": "(ঐচ্ছিক)",
+ "translate-ignored": "(উপেক্ষিত)",
+ "translate-edit-title": "\"$1\" সম্পাদনা করুন",
+ "translate-edit-definition": "বার্তার সংজ্ঞা",
+ "translate-edit-contribute": "অবদান",
+ "translate-edit-no-information": "<em>এই বার্তাটির কোন নথি নেই।\nআপনি যদি জানেন এই বার্তাটি কোথায় বা কিভাবে ব্যবহার করা হয়েছে, আপনি এই বার্তায় নথি যোগ করে অন্যান্য অনুবাদকদের সাহায্য করতে পারেন।</em>",
+ "translate-edit-information": "বার্তা সম্পর্কে তথ্য ($1)",
+ "translate-edit-warnings": "অসম্পূর্ণ অনুবাদের ওপর সতর্কবার্তা",
+ "translate-edit-tmmatch-source": "অনুবাদের জন্য উৎস পাঠ্য: $1",
+ "translate-edit-tmmatch": "{{formatnum:$1}}% মিল রয়েছে",
+ "translate-edit-nopermission": "বার্তা অনুবাদ করতে আপনার অনুবাদ অধিকার প্রয়োজন।",
+ "translate-edit-askpermission": "অনুমতি পান",
+ "exporttranslations": "অনুবাদসমূহ আমদানি",
+ "translate-export-form-format": "বিন্যাস",
+ "translate-export-invalid-format": "দয়া করে একটি বৈধ বিন্যাস উল্লেখ করুন।",
+ "translate-export-not-supported": "অনুবাদ রপ্তানি সমর্থিত নয়।",
+ "translate-export-format-notsupported": "নির্দিষ্ট রপ্তানি বিন্যাস বার্তা দল দ্বারা সমর্থিত নয়।",
+ "translate-export-group-too-large": "চয়নকৃত বার্তা দলটি খুব বড়৷ এমন বার্তা দল চয়ন করুন যেখানে $1টির কম {{PLURAL:$1|বার্তা}} রয়েছে, অথবা পরামর্শের জন্য অনুবাদ প্রশাসকের সাথে যোগাযোগ করুন।",
+ "translate-checks-parameters": "নিম্নলিখিত {{PLURAL:$2|প্যারামিটারটি|প্যারামিটারসমূহ}} ব্যবহার করা হয়নি:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "নিম্নলিখিত {{PLURAL:$2|প্যারামিটারটি|প্যারামিটারসমূহ}} অজানা:\n<strong>$1</strong>",
+ "translate-checks-balance": "সঠিক পরিমাণে {{PLURAL:$2|বন্ধনী}} দেয়া হয়নি:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "নিম্নলিখিত {{PLURAL:$2|সংযোগটি|$2টি সংযোগ}} সমস্যাসঙ্কুল:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "নিম্নলিখিত {{PLURAL:$2|সংযোগটি|$2টি সংযোগ}} অনুপস্থিত:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "সংজ্ঞা <nowiki>{{PLURAL:}}</nowiki> ব্যবহার করেছে কিন্তু অনুবাদ তা করে নি।",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki>-এর শেষে অনুরূপ ফরম রয়েছে। <nowiki>{{PLURAL:$1|ভেড়া|ভেড়া}}</nowiki> কে <nowiki>{{PLURAL:$1|ভেড়া}}</nowiki> হিসাবে লিখতে হবে।",
+ "translate-checks-gettext-plural-missing": "এই অনুবাদে অবশ্যই <nowiki>{{PLURAL:GETTEXT|}}</nowiki> থাকতে হবে।",
+ "translate-checks-gettext-plural-unsupported": "এই বার্তা <nowiki>{{PLURAL:GETTEXT|}}</nowiki> সমর্থন করে না।",
+ "translate-checks-unicode-plural-missing": "এই অনুবাদে অবশ্যই <nowiki>{{PLURAL|}}</nowiki> থাকতে হবে।",
+ "translate-checks-unicode-plural-unsupported": "এই বার্তা <nowiki>{{PLURAL|}}</nowiki> সমর্থন করে না।",
+ "translate-checks-pagename": "নামস্থান সংজ্ঞা থেকে পরিবর্তিত হয়েছে",
+ "translate-checks-format": "এই অনুবাদটি সংজ্ঞা অনুসরে হয়নি বা অবৈধ শব্দবিন্যাস রয়েছে: $1",
+ "translate-checks-parametersnotequal": "অনুবাদে ব্যবহৃত প্যারামিটার হচ্ছে {{PLURAL:$1|$1}}টি; হওয়া উচিত {{PLURAL:$2|$2}}টি।",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> সঠিক নয়।",
+ "translate-checks-fudforum-syntax": "এই প্রকল্পে <nowiki>$2</nowiki>-এর পরিবর্তে <nowiki>$1</nowiki> ব্যবহার করুন।",
+ "translate-checks-newline-missing-start": "অনুবাদটির শুরুতে নতুন লাইনের $1টি {{PLURAL:$1|অক্ষর}} অনুপস্থিত রয়েছে।",
+ "translate-checks-newline-missing-end": "অনুবাদটির শেষে নতুন লাইনের $1টি {{PLURAL:$1|অক্ষর}} অনুপস্থিত রয়েছে।",
+ "translate-checks-newline-extra-start": "অনুবাদটির শুরুতে নতুন লাইনের $1টি {{PLURAL:$1|অক্ষর}} অতিরিক্ত রয়েছে।",
+ "translate-checks-newline-extra-end": "অনুবাদটির শেষে নতুন লাইনের $1টি {{PLURAL:$1|অক্ষর}} অতিরিক্ত রয়েছে।",
+ "translate-checks-value-not-present": "অনুবাদ অবশ্যই নিম্নলিখিত {{PLURAL:$1|1=|মানগুলির যেকোনও একটির}} সমান হতে হবে: $1।",
+ "translate-checks-replacement": "$1 এর পরিবর্তে $2 ব্যবহার করুন।",
+ "translate-checks-empty": "কোন বিষয়বস্তু ছাড়া অথবা শুধুমাত্র ফাঁকাস্থান সহ অনুবাদ গ্রহণযোগ্য নয়।",
+ "translate-pref-editassistlang": "সহযোগী ভাষা:",
+ "prefs-translate": "অনুবাদ অপশন",
+ "translate-pref-editassistlang-help": "কমা দ্বারা পৃথক করা ভাষার কোডের তালিকা। আপনি অনুবাদ করার সময় এই ভাষাগুলিতে বার্তার অনুবাদ থাকলে তা প্রদর্শিত হবে। ভাষাগুলির পূর্বনির্ধারিত তালিকা আপনার ভাষার উপর নির্ভর করে।",
+ "translate-pref-editassistlang-bad": "তালিকায় অবৈধ ভাষা কোড:\n<nowiki> $1</nowiki>।",
+ "right-translate": "অনুবাদ ইন্টারফেস ব্যবহার করে সম্পাদনা",
+ "action-translate": "অনুবাদ ইন্টারফেস ব্যবহার করে সম্পাদনা করার",
+ "right-translate-manage": "বার্তা দল ব্যবস্থাপনা",
+ "action-translate-manage": "বার্তা দল ব্যবস্থাপনা",
+ "right-translate-import": "অফলাইন অনুবাদ আমদানি",
+ "action-translate-import": "অফলাইন অনুবাদ আমদানি করার",
+ "right-translate-messagereview": "অনুবাদ পর্যালোচনা",
+ "action-translate-messagereview": "অনুবাদ পর্যালোচনা করার",
+ "right-translate-groupreview": "বার্তা দলের কর্মপ্রবাহ অবস্থার পরিবর্তন করুন",
+ "action-translate-groupreview": "বার্তা দলের কর্মপ্রবাহ অবস্থার পরিবর্তন করুন",
+ "translate-rcfilters-translations": "অনুবাদ",
+ "translate-rcfilters-translations-only-label": "অনুবাদসমূহ",
+ "translate-rcfilters-translations-only-desc": "অনূদিত পাতায় পরিবর্তনসমূহ।",
+ "translate-rcfilters-translations-filter-label": "অনুবাদ নয়",
+ "translate-rcfilters-translations-filter-desc": "অনুবাদ নয় এমন সমস্ত পরিবর্তন।",
+ "translate-rcfilters-translations-site-label": "সাইটের বার্তাসমূহ",
+ "translate-rcfilters-translations-site-desc": "মিডিয়াউইকি নামস্থানে সাইট বার্তার স্বনির্ধারণ।",
+ "translate-rc-translation-filter": "অনুবাদ পরিশোধক:",
+ "translate-rc-translation-filter-no": "কিছু করা হবে না",
+ "translate-rc-translation-filter-only": "শুধুমাত্র অনুবাদ দেখান",
+ "translate-rc-translation-filter-filter": "অনুবাদ দেখাবেন না",
+ "translate-rc-translation-filter-site": "শুধুমাত্র সাইটের বার্তার পরিবর্তনগুলি",
+ "translationstats": "অনুবাদের পরিসংখ্যান",
+ "translate-stats-edits": "সম্পাদনাসমূহ",
+ "translate-stats-users": "অনুবাদক",
+ "translate-stats-registrations": "নিবন্ধন",
+ "translate-stats-reviews": "পর্যালোচনাসমূহ",
+ "translate-stats-reviewers": "নিরীক্ষকগণ",
+ "translate-statsf-intro": "আপনি এই ফর্মের মাধ্যমে সাধারণ পরিসংখ্যান তৈরি করতে পারেন।\nসমস্ত মানের উচ্চ এবং নিম্ন সীমা রয়েছে।",
+ "translate-statsf-options": "গ্রাফ অপশন",
+ "translate-statsf-width": "পিক্সেলে প্রস্থ:",
+ "translate-statsf-height": "পিক্সেলে উচ্চতা:",
+ "translate-statsf-days": "দিন হিসেবে সময়কাল:",
+ "translate-statsf-start": "শুরুর তারিখ:",
+ "translate-statsf-scale-years": "বছর",
+ "translate-statsf-scale-months": "মাস",
+ "translate-statsf-scale-weeks": "সপ্তাহ",
+ "translate-statsf-scale-days": "দিন",
+ "translate-statsf-scale-hours": "ঘণ্টা",
+ "translate-statsf-count": "মাপ:",
+ "translate-statsf-count-edits": "সম্পাদনা সংখ্যা",
+ "translate-statsf-count-users": "সক্রিয় অনুবাদক",
+ "translate-statsf-count-registrations": "নতুন ব্যবহারকারী",
+ "translate-statsf-count-reviews": "অনুবাদ নিরীক্ষকগণ",
+ "translate-statsf-count-reviewers": "নিরীক্ষকগণ",
+ "translate-statsf-submit": "প্রাকদর্শন",
+ "translate-statsf-unknown-error": "একটি অজানা ত্রুটি ঘটেছে।",
+ "translate-statsf-error-message": "গ্রাফটি লোড করার সময় একটি ত্রুটি হয়েছে: $1",
+ "translate-tag-page-desc": "$3 ($4) থেকে [[$2|$1]] উইকি পাতার অনুবাদ।",
+ "translate-tag-page-wikipage-desc": "<bdi>$3</bdi> ($4) থেকে <bdi>$5</bdi> ($6) ভাষায় [[$2]] উইকি পাতাটির [[$1|অনুবাদ]]",
+ "translate-sidebar-alltrans": "অন্যান্য ভাষায়",
+ "translations": "সমস্ত অনুবাদ",
+ "translations-summary": "সমস্ত উপলব্ধ অনুবাদ দেখার জন্য নিচে একটি বার্তার নাম লিখুন।",
+ "translate-translations-no-message": "\"$1\" অনুবাদযোগ্য বার্তা নয়",
+ "translate-translations-none": "\"$1\"-এর জন্য কোন অনুবাদ নেই",
+ "translate-translations-count": "{{PLURAL:$1|একটি অনুবাদ|$1টি অনুবাদ}} পাওয়া গেছে।",
+ "translate-translations-fieldset-title": "বার্তা",
+ "translate-translations-messagename": "নাম:",
+ "translate-translations-project": "প্রকল্প:",
+ "translate-translations-history-short": "ই",
+ "languagestats": "ভাষার পরিসংখ্যান",
+ "languagestats-summary": "এই পাতাটিতে একটি ভাষার সমস্ত বার্তা দলের অনুবাদ পরিসংখ্যান দেখানো হয়।",
+ "messagegroupstats-summary": "এই পাতাটি বার্তা গোষ্ঠীর পরিসংখ্যান দেখায়।",
+ "languagestats-stats-for": "$1 অনুবাদের পরিসংখ্যান ($2)।",
+ "languagestats-recenttranslations": "সাম্প্রতিক অনুবাদ",
+ "translate-langstats-incomplete": "এই পাতার কিছু পরিসংখ্যান অসম্পূর্ণ। আরও পরিসংখ্যান পেতে অনুগ্রহ করে পুনরায় লোড করুন।",
+ "translate-langstats-expand": "প্রসারণ",
+ "translate-langstats-collapse": "সংকোচন",
+ "translate-langstats-expandall": "সব প্রসারিত করুন",
+ "translate-langstats-collapseall": "সব সংকুচিত করুন",
+ "translate-language-code": "ভাষার কোড",
+ "translate-language-code-field-name": "ভাষার কোড:",
+ "translate-suppress-complete": "সম্পূর্ণ অনুবাদকৃত বার্তা গোষ্ঠীগুলি লুকান",
+ "translate-ls-noempty": "সম্পূর্ণ অনুবাদহীন বার্তা গোষ্ঠীগুলি লুকান",
+ "translate-language": "ভাষা",
+ "translate-total": "বার্তা",
+ "translate-untranslated": "অনুবাদ হয়নি",
+ "translate-percentage-complete": "সম্পন্ন",
+ "translate-percentage-fuzzy": "পুরাতন",
+ "translate-percentage-proofread": "পর্যালোচিত",
+ "translate-languagestats-overall": "সমস্ত বার্তা দল একসাথে",
+ "translate-ls-submit": "পরিসংখ্যান দেখান",
+ "translate-ls-column-group": "বার্তা দল",
+ "translate-mgs-pagename": "বার্তা দলের পরিসংখ্যান",
+ "translate-mgs-fieldset": "প্রদর্শন পছন্দসমূহ",
+ "translate-mgs-group": "বার্তা দল:",
+ "translate-mgs-nocomplete": "অনুবাদ সম্পূর্ণ হওয়া ভাষাগুলি প্রদর্শন করবেন না",
+ "translate-mgs-noempty": "কোন অনুবাদ না থাকা ভাষাগুলি প্রদর্শন করবেন না",
+ "translate-mgs-submit": "পরিসংখ্যান দেখান",
+ "translate-mgs-column-language": "ভাষা",
+ "translate-mgs-totals": "একসাথে $1টি {{PLURAL:$1|ভাষায়}}।",
+ "translate-mgs-invalid-group": "নির্দিষ্টকৃত $1 দলটি বিদ্যমান নেই।",
+ "translate-mgs-nothing": "অনুরোধকৃত পরিসংখ্যানের জন্য দেখানোর মতো কিছুই নেই।",
+ "translate-tes-server-error": "অনুসন্ধান পরামর্শ আনয়ন ব্যর্থ হয়েছে",
+ "translate-tes-group-not-found": "কোনও সাদৃশ্যপূর্ণ ফলাফল নেই",
+ "translate-tes-type-to-search": "অনুসন্ধান শুরু করতে কিছু লিখুন",
+ "supportedlanguages": "সক্রিয় ভাষাসমূহ",
+ "supportedlanguages-colorlegend": "রঙের ব্যাখ্যা: সর্বশেষ অনুবাদ $1 দিন আগে।",
+ "supportedlanguages-portallink": "[$1] $2 - $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-sqlite-error": "SQLite সমর্থিত নয়",
+ "supportedlanguages-postgres-error": "PostgreSQL সমর্থিত নয়",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|অনুবাদক}}|অনুবাদকগণ}}: $1",
+ "supportedlanguages-recenttranslations": "সাম্প্রতিক অনুবাদ",
+ "supportedlanguages-count": "সর্বমোট $1টি {{PLURAL:$1|ভাষায়}}।",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|টি সম্পাদনা}} - সর্বশেষ সম্পাদনা $3 {{PLURAL:$3|দিন}} আগে",
+ "translate-supportedlanguages-cached": "এই তথ্য $1 আগে ক্যাশে করা হয়েছে।",
+ "translate-activelanguages-invalid-code": "\"$1\" একটি অজানা ভাষা কোড বা অনুবাদের জন্য সক্রিয় নয়৷",
+ "abusefilter-edit-builder-vars-translate-source-text": "অনুবাদ ইউনিটের উৎস পাঠ্য",
+ "abusefilter-edit-builder-vars-translate-target-language": "অনুবাদের জন্য লক্ষ্যভাষা",
+ "translate-jssti-add": "তালিকায় যোগ করুন",
+ "managemessagegroups": "বার্তা দল ব্যবস্থাপনা",
+ "translate-smg-notallowed": "আপনাকে এই কর্ম সঞ্চালনের অনুমতি দেওয়া হয়নি।",
+ "translate-smg-nochanges": "প্রক্রিয়ার কোন পরিবর্তন নেই।",
+ "translate-smg-submit": "প্রক্রিয়াকরণের জন্য পরিবর্তন জমা দিন",
+ "translate-smg-submitted": "বার্তার সংজ্ঞা হালনাগাদ করা হয়েছে। পরিবর্তনগুলি পটভূমিতে প্রক্রিয়া করা হচ্ছে৷",
+ "translate-smg-submitted-with-failure": "নিম্নলিখিত {{PLURAL:$1|দলের|দলগুলোর}} বার্তা {{PLURAL:$1|সংজ্ঞা}} হালনাগাদকরণ ব্যর্থ হয়েছে - $2। $3",
+ "translate-smg-submitted-others-processing": "অন্যান্য দলের বার্তা সংজ্ঞা পটভূমিতে প্রক্রিয়া করা হচ্ছে।",
+ "translate-smg-more": "এই পরিবর্তনগুলি জমা দেওয়ার পরে প্রক্রিয়াতে আরও পরিবর্তন হবে৷",
+ "translate-smg-left": "উইকিতে বার্তা বিষয়বস্তু",
+ "translate-smg-rename-select": "নির্বাচন করুন",
+ "translate-smg-rename-cancel": "বাতিল",
+ "translate-smg-rename-search": "সাদৃশ্যপূর্ণ বার্তার জন্য অনুসন্ধান করুন...",
+ "translate-smg-rename-select-err": "পুনঃনামকরণের জন্য একটি বার্তা নির্বাচন করুন",
+ "translate-smg-rename-no-msg": "কোন বার্তা পাওয়া যায়নি।",
+ "translate-smg-rename-new": "নতুন হিসেবে যোগ করুন...",
+ "translate-smg-strong-sync-help": "সাহায্য",
+ "translate-smg-group-message-action-history": "ইতিহাস",
+ "translate-smg-group-action-resolve": "মিমাংসিত বলে চিহ্নিত করুন",
+ "translate-smg-group-sync-error-warn": "সিঙ্ক্রোনাইজেশনের সময় এই দলের একটি ত্রুটি হয়। এই দল প্রক্রিয়াকরণের আগে ত্রুটিটি ঠিক করুন।",
+ "translate-smg-group-message-tag-outdated": "পুরাতন",
+ "translate-smg-group-message-tag-rename": "পুনঃনামকরণ",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|ট্যাগ}}:",
+ "translate-smg-group-message-message-content": "বিষয়বস্তু:",
+ "translate-smg-group-message-message-target": "লক্ষ্য:",
+ "translate-smg-group-message-message-replacement": "প্রতিস্থাপন:",
+ "translate-smg-group-message-message-other-langs": "অন্যান্য ভাষা:",
+ "translate-smg-loading": "লোড করা হচ্ছে...",
+ "translate-manage-import-diff": "$1 বার্তা | কর্ম: $2",
+ "translate-manage-import-new": "নতুন বার্তা $1",
+ "translate-manage-import-deleted": "অপসারিত বার্তা $1",
+ "translate-manage-action-import": "আমদানি",
+ "translate-manage-action-conflict": "আমদানিকৃত ও অস্পষ্ট",
+ "translate-manage-action-ignore": "উপেক্ষা",
+ "translate-manage-action-fuzzy": "আমদানিকৃত এবং অস্পষ্ট অনুবাদ",
+ "translate-manage-action-rename-fuzzy": "পুনঃনামকরণ এবং অস্পষ্ট অনুবাদ",
+ "translate-manage-action-rename": "পুনঃনামকরণ",
+ "translate-manage-action-ignore-change": "অনুবাদের পরিবর্তন উপেক্ষা করুন",
+ "translate-manage-nochanges": "এই দলের বার্তা সংজ্ঞায় কোন পরিবর্তন নেই।",
+ "translate-manage-nochanges-other": "এই ভাষার জন্য কোন পরিবর্তন হয়নি।\nদলের বিশদ বিবরণে ফিরে যেতে নীচের সংযোগটি ব্যবহার করুন।",
+ "translate-manage-inconsistent": "অনুরোধে অসঙ্গতি শনাক্ত করা হয়েছে।\nঅনুগ্রহ করে পরিবর্তনসমূহ পরীক্ষা করুন এবং আবার চেষ্টা করুন।\nবিশদ বিবরণ: $1।",
+ "translate-manage-toolong": "প্রক্রিয়াকরণের সর্বোচ্চ সময় $1 {{PLURAL:$1|সেকেন্ড}} অতিক্রম করেছে।\nপ্রক্রিয়াকরণ চালিয়ে যেতে দয়া করে ফর্মটি আবার জমা দিন৷",
+ "translate-manage-import-summary": "বাহ্যিক উৎস থেকে একটি নতুন সংস্করণ আমদানি করা হয়েছে",
+ "translate-manage-import-ignore": "$1 বার্তা এড়িয়ে যাওয়া হচ্ছে।",
+ "translate-manage-import-rename-summary": "বাহ্যিক উৎসে পুনঃনামকরণ করা হয়েছে",
+ "translate-manage-conflict-summary": "বাহ্যিক উৎস থেকে একটি নতুন সংস্করণ আমদানি করা হয়েছে।\nপরীক্ষা করুন।",
+ "translate-manage-submit": "কার্যকর করুন",
+ "translate-manage-import-ok": "আমদানিকৃত: $1",
+ "translate-manage-import-done": "আমদানি সম্পন্ন!",
+ "translate-manage-empty-content": "খালি বিষয়বস্তু",
+ "translate-manage-source-message-not-found": "বার্তা সংজ্ঞা পাওয়া যায়নি",
+ "importtranslations": "অনুবাদসমূহ আমদানি করুন",
+ "translate-import-from-local": "স্থানীয় পাতা আপলোড:",
+ "translate-import-load": "ফাইল লোড কর",
+ "translate-import-err-dl-failed": "ফাইলটি আনতে অক্ষম: $1",
+ "translate-import-err-ul-failed": "ফাইল আপলোড ব্যর্থ হয়েছে",
+ "translate-import-err-invalid-title": "প্রদত্ত ফাইলের নাম<nowiki> $1</nowiki> অবৈধ।",
+ "translate-import-err-no-such-file": "ফাইল <nowiki>$1</nowiki> বিদ্যমান নেই বা স্থানীয়ভাবে আপলোড করা হয়নি।",
+ "translate-import-err-stale-group": "এই ফাইলটি যে বার্তা দলের অন্তর্গত সেটি বিদ্যমান নয়।",
+ "translate-js-support-unsaved-warning": "আপনার অপ্রকাশিত অনুবাদ রয়েছে।",
+ "translate-gs-pos": "নং",
+ "translate-gs-code": "কোড",
+ "translate-gs-continent": "উপমহাদেশ",
+ "translate-gs-speakers": "বক্তা",
+ "translate-gs-score": "স্কোর",
+ "translate-gs-multiple": "একাধিক",
+ "translate-gs-count": "গণনা",
+ "translate-gs-total": "সর্বমোট",
+ "translate-gs-avgscore": "গড় স্কোর",
+ "translate-documentation-language": "বার্তার নথি",
+ "translate-searchprofile": "অনুবাদসমূহ",
+ "translate-searchprofile-tooltip": "সমস্ত অনুবাদ থেকে অনুসন্ধান করুন",
+ "translate-searchprofile-note": "[$1 অনুবাদ অনুসন্ধানে] আরও অনুসন্ধান বিকল্প পাওয়া যাবে।",
+ "translate-search-languagefilter": "ভাষা অনুযায়ী ছাঁকনি:",
+ "translate-search-nofilter": "ছাঁকনিহীন",
+ "log-name-translationreview": "অনুবাদ নিরীক্ষণ লগ",
+ "logentry-translationreview-message": "$1 $3 অনুবাদ {{GENDER:$2|পর্যালোচনা করেছেন}}",
+ "group-translate-sandboxed": "অননুমোদিত অনুবাদকগণ",
+ "group-translate-sandboxed-member": "{{GENDER:$1|অননুমোদিত অনুবাদক}}",
+ "right-translate-sandboxaction": "খেলাঘর ব্যবহারকারীদের জন্য অনুমোদিত কার্যনির্বাহ করা",
+ "action-translate-sandboxaction": "খেলাঘর ব্যবহারকারীদের জন্য অনুমোদিত কার্যনির্বাহ করার",
+ "translate-workflow-state-": "(অনির্ধারিত)",
+ "translate-workflowstatus": "অবস্থা: $1",
+ "translate-workflow-set-doing": "নির্ধারণ করা হচ্ছে...",
+ "translate-workflow-autocreated-summary": "কর্মপ্রবাহ অবস্থা $1-এর জন্য স্বয়ংক্রিয় পাতা সৃষ্টিকরণ",
+ "translate-stats-workflow": "অবস্থা",
+ "translate-workflowgroup-label": "কর্মপ্রবাহ অবস্থা",
+ "translate-workflowgroup-desc": "এই বার্তা দলটি অনুবাদের কর্মপ্রবাহ অবস্থা প্রদর্শন করে।\nঅবস্থাগুলো কনফিগারেশন ভেরিয়েবল $wgTranslateWorkflowStates-এ সংজ্ঞায়িত করা হয়েছে।",
+ "translate-dynagroup-recent-label": "সাম্প্রতিক অনুবাদ",
+ "translate-dynagroup-recent-desc": "এই বার্তা দলটি এই ভাষায় সাম্প্রতিক সমস্ত অনুবাদ প্রদর্শন করে৷",
+ "translate-dynagroup-additions-label": "সাম্প্রতিক সংযোজন",
+ "translate-dynagroup-additions-desc": "এই বার্তার দল নতুন এবং পরিবর্তিত বার্তাগুলি দেখায়।",
+ "translate-msggroupselector-projects": "বার্তা দল",
+ "translate-msggroupselector-search-placeholder": "দল অনুসন্ধান",
+ "translate-msggroupselector-search-all": "সমস্ত",
+ "translate-msggroupselector-search-recent": "সাম্প্রতিক",
+ "translate-msggroupselector-view-subprojects": "$1টি {{PLURAL:$1|উপদল}}",
+ "tux-languageselector": "অনুবাদের ভাষা",
+ "tux-select-target-language": "অনুবাদের জন্য লক্ষ্যভাষা",
+ "tux-tab-all": "সকল",
+ "tux-tab-untranslated": "অনুবাদ হয়নি",
+ "tux-tab-outdated": "পুরাতন",
+ "tux-tab-translated": "অনূদিত",
+ "tux-tab-unproofread": "অপর্যালোচিত",
+ "tux-edit": "সম্পাদনা",
+ "tux-status-optional": "ঐচ্ছিক",
+ "tux-status-fuzzy": "বর্তমানে অপ্রচলিত",
+ "tux-status-proofread": "পর্যালোচিত",
+ "tux-status-translated": "অনূদিত",
+ "tux-status-saving": "প্রকাশ করা হচ্ছে...",
+ "tux-status-unsaved": "অপ্রকাশিত",
+ "tux-save-unknown-error": "অজানা ত্রুটি দেখা দিয়েছে।",
+ "tux-editor-placeholder-documentation": "বার্তার নথি যোগ করুন",
+ "tux-editor-placeholder-language": "$1 ভাষায় আপনার অনুবাদ",
+ "tux-editor-editsummary-placeholder": "আপনার পরিবর্তনসমূহের ব্যাখ্যা দিন (ঐচ্ছিক)",
+ "tux-editor-paste-original-button-label": "উৎস পাঠ্য যোগ করুন",
+ "tux-editor-discard-changes-button-label": "পরিবর্তন বাতিল করুন",
+ "tux-editor-save-button-label": "অনুবাদ প্রকাশ করুন",
+ "tux-editor-skip-button-label": "এড়িয়ে পরবর্তীতে যান",
+ "tux-editor-cancel-button-label": "বাতিল",
+ "tux-editor-confirm-button-label": "অনুবাদ নিশ্চিত করুন",
+ "tux-editor-proofread-button-label": "পর্যালোচিত হিসেবে চিহ্নিত করুন",
+ "tux-editor-shortcut-info": "সংরক্ষণ করতে ও পরবর্তী বার্তায় যেতে \"$1\" চাপুন, এড়িয়ে যেতে \"$2\" চাপুন, সারাংশ প্রদান করতে \"$4\" চাপুন বা অন্যান্য শর্টকাট দেখতে \"$3\" চাপুন।",
+ "tux-editor-edit-desc": "নথি সম্পাদনা",
+ "tux-editor-add-desc": "নথি যোগ করুন",
+ "tux-editor-suggestions-title": "পরামর্শসমূহ",
+ "tux-editor-latest-updates-title": "সর্বশেষ হালনাগাদ",
+ "tux-editor-changes-without-summary": "সারাংশ ছাড়া $1 বার {{PLURAL:$1|হালনাগাদ}}",
+ "tux-editor-all-changes": "সকল পরিবর্তন",
+ "tux-editor-in-other-languages": "অন্যান্য ভাষায়",
+ "tux-editor-need-more-help": "আরও সাহায্যের প্রয়োজন?",
+ "tux-editor-ask-help": "আরও তথ্যের জন্য জিজ্ঞাসা করুন",
+ "tux-editor-tm-match": "{{formatnum:$1}}% মিল রয়েছে",
+ "tux-notices-more": "{{PLURAL:$1|আরও $1টি}}",
+ "tux-notices-hide": "আড়ালে রাখো",
+ "tux-editor-save-failed": "অনুবাদ প্রকাশকরণ ব্যর্থ হয়েছে: $1",
+ "tux-editor-n-uses": "$1 {{PLURAL:$1|বার}} ব্যবহৃত হয়েছে",
+ "tux-editor-message-desc-more": "আরও দেখান",
+ "tux-editor-message-desc-less": "কম দেখান",
+ "tux-editor-clear-translated": "অনূদিত আড়াল করুন",
+ "tux-editor-proofreading-mode": "পর্যালোচনা",
+ "tux-editor-translate-mode": "তালিকা",
+ "tux-editor-proofreading-hide-own-translations": "আপনার অনুবাদসমূহ আড়াল করুন",
+ "tux-editor-proofreading-show-own-translations": "আপনার অনুবাদসমূহ প্রদর্শন করুন",
+ "tux-proofread-action-tooltip": "পর্যালোচিত হিসেবে চিহ্নিত করুন",
+ "tux-proofread-edit-label": "সম্পাদনা",
+ "tux-editor-page-mode": "পাতা",
+ "tux-editor-outdated-notice": "এই অনুবাদটি হালনাগাদ করার প্রয়োজন হতে পারে।",
+ "tux-editor-outdated-notice-diff-link": "পার্থক্য দেখান",
+ "tux-editor-doc-editor-placeholder": "বার্তার নথি",
+ "tux-editor-doc-editor-save": "নথি প্রকাশ করুন",
+ "tux-editor-doc-editor-cancel": "বাতিল",
+ "tux-messagetable-more-messages": "আরও {{formatnum:$1}}টি {{PLURAL:$1|বার্তা}}",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|বার্তা}} লোড হচ্ছে...",
+ "tux-message-filter-placeholder": "তালিকা ছাঁকুন:",
+ "tux-message-filter-result": "\"$2\"-এর জন্য $1টি {{PLURAL:$1|ফলাফল}} পাওয়া গেছে",
+ "tux-message-filter-advanced-button": "উন্নত অনুসন্ধান",
+ "tux-message-filter-optional-messages-label": "ঐচ্ছিক বার্তাগুলি",
+ "tux-proofread-translated-by-self": "আপনার দ্বারা অনূদিত",
+ "tux-empty-list-all": "এই বার্তা দলটি খালি",
+ "tux-empty-list-all-guide": "অনুবাদ করতে একটি ভিন্ন বার্তা দল নির্বাচন করুন",
+ "tux-translate-page-no-such-group": "<strong>নির্দেশিত দল বিদ্যমান নয়।</strong> একটি ভিন্ন বার্তা দল নির্বাচন করুন।",
+ "tux-empty-list-translated": "কোনো অনূদিত বার্তা নেই",
+ "tux-empty-list-translated-guide": "আপনি অনুবাদে সাহায্য করতে পারেন",
+ "tux-empty-list-translated-action": "অনুবাদ",
+ "tux-empty-no-messages-to-display": "প্রদর্শন করার বার্তা নেই।",
+ "tux-empty-there-are-optional": "এখানে কিছু ঐচ্ছিক বার্তা রয়েছে যেগুলো তালিকাভুক্ত করা হয়নি",
+ "tux-empty-show-optional-messages": "ঐচ্ছিক বার্তাগুলি দেখান",
+ "tux-empty-no-outdated-messages": "কোন পুরাতন বার্তা নেই",
+ "tux-empty-nothing-to-proofread": "পর্যালোচনা করার কিছু নেই",
+ "tux-empty-you-can-help-providing": "আপনি নতুন অনুবাদ প্রদান করে সাহায্য করতে পারেন",
+ "tux-empty-nothing-new-to-proofread": "পর্যালোচনা করার মত নতুন কিছু নেই",
+ "tux-empty-you-can-review-already-proofread": "আপনি অন্যদের দ্বারা ইতিমধ্যে পর্যালোচিত অনুবাদগুলি পর্যালোচনা করতে পারেন।",
+ "tux-empty-list-other": "অনুবাদ করার মতো কিছু নেই",
+ "tux-empty-list-other-guide": "আপনি বিদ্যমান অনুবাদ পর্যালোচনা করে সাহায্য করতে পারেন",
+ "tux-empty-list-other-action": "অনুবাদ পর্যালোচনা",
+ "tux-empty-list-other-link": "সব বার্তা দেখান",
+ "tux-editor-close-tooltip": "বন্ধ",
+ "tux-editor-expand-tooltip": "প্রসারণ",
+ "tux-editor-collapse-tooltip": "সংকোচন",
+ "tux-editor-message-tools-show-editor": "উইকি সম্পাদকে দেখান",
+ "tux-editor-message-tools-history": "ইতিহাস",
+ "tux-editor-message-tools-delete": "অপসারণ",
+ "tux-editor-message-tools-translations": "সমস্ত অনুবাদ",
+ "tux-editor-message-tools-linktothis": "এই বার্তায় সংযোগ",
+ "tux-editor-loading": "লোড করা হচ্ছে...",
+ "tux-editor-loading-failed": "অনুবাদ সহায়তাগুলি লোড করা ব্যর্থ হয়েছে: $1",
+ "translate-search-more-languages-info": "আরও $1টি {{PLURAL:$1|ভাষা}}",
+ "translate-statsbar-tooltip": "{{formatnum:$1}}% অনূদিত, {{formatnum:$2}}% পর্যালোচিত",
+ "translate-statsbar-tooltip-with-fuzzy": "{{formatnum:$1}}% অনূদিত, {{formatnum:$2}}% পর্যালোচিত, {{formatnum:$3}}% মেয়াদোত্তীর্ণ",
+ "translate-search-more-groups-info": "আরও $1টি {{PLURAL:$1|দল}}",
+ "translate-syntax-error": "অনুবাদে শব্দবিন্যাস ত্রুটি রয়েছে",
+ "tux-session-expired": "আপনি এখন আর প্রবেশ অবস্থায় নন৷ অনুগ্রহ করে একটি পৃথক ট্যাবে গিয়ে প্রবেশ করুন৷ অথবা, অসংরক্ষিত অনুবাদগুলোর একটি অনুলিপি তৈরি করুন, প্রবেশ করুন, এই পৃষ্ঠায় ফিরে আসুন এবং আপনার অনুবাদগুলো আবার লিখুন৷",
+ "tux-nojs": "এই সরঞ্জামটি জাভাস্ক্রিপ্ট ছাড়া কাজ করে না। জাভাস্ক্রিপ্ট অক্ষম আছে, তাই কাজ করতে ব্যর্থ হয়েছে, বা এই ব্রাউজারটি অসমর্থিত।",
+ "specialpages-group-translation": "অনুবাদ",
+ "content-model-translate-messagebundle": "অনুবাদযোগ্য বার্তা গুচ্ছ",
+ "translate-messagebundle-validation-error": "অবৈধ বার্তা গুচ্ছ: $1",
+ "translate-messagebundle-error-key-empty": "বার্তাগুচ্ছে কোনও খালি কী থাকা কাম্য নয়",
+ "translate-messagebundle-error-key-too-long": "কী \"$1\" খুব দীর্ঘ৷",
+ "translate-messagebundle-error-key-invalid-characters": "কী \"$1\"-এ অননুমোদিত অক্ষর রয়েছে৷",
+ "translate-messagebundle-error-invalid-value": "কী \"$1\"-এ স্ট্রিং মান নেই৷",
+ "translate-messagebundle-error-empty-value": "কী \"$1\"-এর কোন মান নেই৷",
+ "translate-messagebundle-error-metadata-type": "অধিউপাত্ত অবশ্যই সুবিন্যস্ত হতে হবে।",
+ "translate-messagebundle-error-invalid-metadata": "অধিউপাত্ত অংশে একটি অজানা কী রয়েছে: \"$1\"৷ সমর্থিত কীগুলি হল $2৷",
+ "translate-messagebundle-error-invalid-sourcelanguage": "উৎস ভাষা কোড \"$1\" সমর্থিত নয়৷",
+ "translate-messagebundle-error-invalid-prioritylanguage": "অধিউপাত্তে ভুল অগ্রাধিকার ভাষার {{PLURAL:$2|কোড}}: $1",
+ "translate-messagebundle-error-invalid-prioritylanguage-format": "অধিউপাত্তে ভুল অগ্রাধিকার ভাষার বিন্যাস। অগ্রাধিকারের ভাষাগুলি অবশ্যই সুবিন্যস্ত স্ট্রিঙের হতে হবে৷",
+ "translate-messagebundle-group-description": "বার্তা গুচ্ছের বার্তাসমূহ [[$2|$1]] পাতায় সজ্ঞায়িত করা হয়েছে।",
+ "translate-messagebundle-change-sourcelanguage": "অধিউপাত্ত অনুযায়ী বার্তা গুচ্ছের উৎস ভাষা নির্ধারণ করা হচ্ছে।",
+ "translate-messagebundle-sourcelanguage-changed": "বার্তা গুচ্ছ তৈরি হয়ে গেলে এর উৎস ভাষা পরিবর্তন করা যাবে না।",
+ "log-action-filter-translationreview": "কাজের ধরন:",
+ "log-action-filter-translationreview-message": "স্বতন্ত্র অনুবাদ বার্তার পর্যালোচনা",
+ "log-action-filter-translationreview-group": "অনুবাদ অগ্রগতির অবস্থার পরিবর্তন"
+}
diff --git a/Translate/i18n/core/bnn.json b/Translate/i18n/core/bnn.json
new file mode 100644
index 00000000..4ed08f68
--- /dev/null
+++ b/Translate/i18n/core/bnn.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Akamycoco"
+ ]
+ },
+ "translate-page-edit": "Kapha mapatas",
+ "translate-edit-title": "Kapha mapatas \"$1\"",
+ "translate-stats-edits": "Kapha mapatas",
+ "tux-edit": "Kapha mapatas",
+ "tux-proofread-edit-label": "Kapha mapatas"
+}
diff --git a/Translate/i18n/core/bo.json b/Translate/i18n/core/bo.json
new file mode 100644
index 00000000..514fcd4f
--- /dev/null
+++ b/Translate/i18n/core/bo.json
@@ -0,0 +1,34 @@
+{
+ "@metadata": {
+ "authors": [
+ "Freeyak",
+ "Phurbutsering"
+ ]
+ },
+ "translate": "ཡིག་སྒྱུར།",
+ "translate-page-disabled": "སྡེ་ཁག་འདིའི་ནང་དུ་སྐད་རིགས་འདིའི་ཡིག་སྒྱུར་ནུས་མེད་ཆགས་འདུག \nརྒྱུ་མཚན་ནི། <em>$1</em>",
+ "translate-page-settings-legend": "སྒྲིག་བཀོད།",
+ "translate-page-group": "སྡེ་ཁག",
+ "translate-page-language": "སྐད་རིགས།",
+ "translate-page-limit": "གྲངས་ཚད།",
+ "translate-page-limit-option": "ངོས་རེར་{{PLURAL:$1|ཚིག་|ཚིག་}} $1 རེ།",
+ "translate-submit": "མངགས།",
+ "translate-page-navigation-legend": "ཕྱོགས་འཁྲིད།",
+ "translate-page-showing": "ཚིག་ $3 ལས་ $1 ནས $2 བར་བསྟན་ཡོད།",
+ "translate-page-showing-all": "{{PLURAL:$1|བརྡ་འཕྲིན་|བརྡ་འཕྲིན་}} $1 བསྟན་ཡོད།",
+ "translate-page-showing-none": "བསྟན་བྱའི་ཚིག་མི་འདུག",
+ "translate-next": "ཤོག་ངོས་རྗེས་མ།",
+ "translate-prev": "ཤོག་ངོས་གོང་མ།",
+ "translate-page-description-legend": "སྡེ་ཁག་ཆ་འཕྲིན།",
+ "translate-page-edit": "རྩོམ་སྒྲིག",
+ "translate-optional": "(འདེམས་ཚན་ཅན།)",
+ "translate-ignored": "(སྣང་མེད་བྱས་པ།)",
+ "translate-edit-title": "\"$1\"ལ་རྩོམ་སྒྲིག་བྱེད་པ།",
+ "translate-rc-translation-filter-no": "ཅི་ཡང་མི་བྱེད།",
+ "translate-statsf-scale-months": "ཟླ་བ།",
+ "translate-statsf-scale-weeks": "བདུན་ཕྲག",
+ "translate-statsf-scale-days": "ཉི་མ།",
+ "translate-statsf-scale-hours": "དུས་ཚོད།",
+ "translate-translations-fieldset-title": "བརྡ་འཕྲིན།",
+ "translate-translations-messagename": "མིང་།"
+}
diff --git a/Translate/i18n/core/bpy.json b/Translate/i18n/core/bpy.json
new file mode 100644
index 00000000..9198040c
--- /dev/null
+++ b/Translate/i18n/core/bpy.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Usingha"
+ ]
+ },
+ "translate": "অনুবাদ করিক"
+}
diff --git a/Translate/i18n/core/bqi.json b/Translate/i18n/core/bqi.json
new file mode 100644
index 00000000..b72ca009
--- /dev/null
+++ b/Translate/i18n/core/bqi.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mogoeilor"
+ ]
+ },
+ "translate-documentation-language": "سٱنٱڌسازی سی پٱیغوم"
+}
diff --git a/Translate/i18n/core/br.json b/Translate/i18n/core/br.json
new file mode 100644
index 00000000..7a7ba188
--- /dev/null
+++ b/Translate/i18n/core/br.json
@@ -0,0 +1,331 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fohanno",
+ "Fulup",
+ "Gwendal",
+ "Huñvreüs",
+ "Y-M D"
+ ]
+ },
+ "translate": "Treiñ",
+ "translate-extensionname": "Treiñ",
+ "translate-desc": "[[Special:Translate|Pajenn dibar]] evit treiñ MediaWiki ha pelloc'h",
+ "translate-taskui-export-to-file": "Ezporzhiañ er furmad orin",
+ "translate-taskui-export-as-po": "Ezporzhiañ evit treiñ ezlinenn",
+ "translate-taction-translate": "Treiñ",
+ "translate-taction-proofread": "Adwelet",
+ "translate-taction-lstats": "Stadegoù yezh",
+ "translate-taction-mstats": "Stadegoù ar strollad kemennadennoù",
+ "translate-taction-export": "Ezporzhiañ",
+ "translate-taction-disabled": "Diweredekaat eo an oberiadenn-mañ war ar wiki-mañ.",
+ "translate-page-no-such-language": "Merket ez eus bet ur c'hod yezh direizh",
+ "translate-page-no-such-group": "Merket ez eus bet ur strollad direizh.",
+ "translate-page-disabled": "Harpet eo bet an troidigezhioù er yezh-mañ evit ar strollad-mañ.\nAbeg :\n\n<em>$1</em>",
+ "translate-language-disabled": "Diweredekaet eo an treiñ evit ar yezh-mañ.",
+ "translate-page-settings-legend": "Arventennoù",
+ "translate-page-group": "Strollad",
+ "translate-page-language": "Yezh",
+ "translate-page-limit": "Bevenn",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|gemennadenn|kemennadenn}} dre bajenn",
+ "translate-submit": "Klask",
+ "translate-page-navigation-legend": "Merdeiñ",
+ "translate-page-showing": "O tiskouez kemennadennoù adal $1 betek $2 diwar $3.",
+ "translate-page-showing-all": "War wel $1 {{PLURAL:$1|gemennadenn|kemennadenn}}",
+ "translate-page-showing-none": "Netra da ziskouez.",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "Pajenn war-lerc'h",
+ "translate-prev": "Pajenn gent",
+ "translate-page-description-legend": "Titouroù diwar-benn ar strollad",
+ "translate-page-description-hasoptional": "Kemennadennoù diret zo er strollad kemennadennoù-mañ.\nNe zlefe ar c'hemennadennoù diret bezañ troet nemet pa vez ezhommoù dibar gant ho yezh evel pa vez arabat ober gant esaouennoù pe evit treuzlizherennañ anvioù divoutin. $1",
+ "translate-page-description-hasoptional-open": "Diskouez ar c'hemennadennoù diret.",
+ "translate-page-edit": "kemmañ",
+ "translate-optional": "(diret)",
+ "translate-ignored": "(laosket a-gostez)",
+ "translate-edit-title": "Kemmañ \"$1\"",
+ "translate-edit-definition": "Termenadur ar gemennadenn",
+ "translate-edit-contribute": "kemer perzh",
+ "translate-edit-no-information": "''N'eus tamm titour ebet diwar-benn ar gemennadenn-mañ. Ma ouzit pelec'h pe benaos emañ da vezañ implijet e c'hallit harpañ troourien all en ur ouzhpennañ titouroù diwar he fenn.''",
+ "translate-edit-information": "Titouroù diwar-benn ar gemennadenn ($1)",
+ "translate-edit-warnings": "Kemennoù-diwall diwar-benn an troidigezhioù diglok",
+ "translate-edit-tmmatch-source": "Testenn orin da dreiñ : $1",
+ "translate-edit-tmmatch": "$1% kenglotañ",
+ "translate-edit-nopermission": "Ret eo deoc'h kaout gwirioù treiñ a-raok gallout treiñ kemennadennoù.",
+ "translate-edit-askpermission": "Kaout an aotre",
+ "exporttranslations": "Ezporzhiañ an troidigezhioù",
+ "translate-export-form-format": "Furmad",
+ "translate-export-invalid-format": "Spisaat ur furmad reizh",
+ "translate-export-not-supported": "N'eo ket skoret an ezporzhiañ troidigezhioù.",
+ "translate-checks-parameters": "Ne vez ket graet gant an {{PLURAL:$2|arventenn|arventennoù}} da-heul : <strong>$1</strong>",
+ "translate-checks-parameters-unknown": "Dianav eo an {{PLURAL:$2|arventenn|arventennoù}} da-heul :\n<strong>$1</strong>",
+ "translate-checks-balance": "Ampar eo an niver a {{PLURAL:$2|grommelloù|grommelloù}} : <strong>$1</strong>",
+ "translate-checks-links": "Kudennek eo al {{PLURAL:$2|liamm|liammoù}} da-heul : <strong>$1</strong>",
+ "translate-checks-links-missing": "Mankout a ra {{PLURAL:$2|al liamm|an $2 liamm}} da-heul :\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Ober a ra an termenadur gant <nowiki>{{PLURAL:}}</nowiki> padal an droidigezh ne ra ket.",
+ "translate-checks-pagename": "Esaouenn anv disheñvel ouzh hini an termenadur",
+ "translate-checks-format": "Ne glot ket an droidigezh-mañ gant an termenadur pe faziek eo an ereadurezh anezhi : $1",
+ "translate-checks-escape": "Dre fazi e c'hall bezañ an diflipadennoù da-heul : <strong>$1</strong>",
+ "translate-checks-parametersnotequal": "{{PLURAL:$1|$1}} eo an niver a arventennoù pa zlefe bezañ {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "Stummet fall eo <nowiki>$1</nowiki>.",
+ "translate-checks-fudforum-syntax": "Ober gant <nowiki>$1</nowiki> e-lec'h <nowiki>$2</nowiki> er raktres-mañ.",
+ "translate-pref-editassistlang": "Yezhoù skoazell :",
+ "prefs-translate": "Dibarzhioù treiñ",
+ "translate-pref-editassistlang-help": "Roll kodoù yezh dispartiet dre ur skej.\nDiskwelet eo an droidigezh er yezhoù-se pa vezit o treiñ ur gemennadenn.\nCheñch a ra roll dre ziouer ar yezhoù-se diouzh ar yezh a rit ganti.",
+ "translate-pref-editassistlang-bad": "Kod yezh direizh el listenn :\n<nowiki>$1</nowiki>.",
+ "right-translate": "Kemmañ en ur ober gant an etrefas treiñ",
+ "right-translate-manage": "Merañ ar strolladoù kemennadennoù",
+ "action-translate-manage": "Merañ ar strolladoù kemennadennoù",
+ "right-translate-import": "Enporzhiañ an troidigezhioù ezlinenn",
+ "action-translate-import": "Enporzhiañ troidigezhioù ezlinenn",
+ "right-translate-messagereview": "Adwelet an troidigezhioù",
+ "action-translate-messagereview": "Adwelet an troidigezhioù",
+ "right-translate-groupreview": "Kemmañ stad lusk labour ar strolladoù kemennadennoù",
+ "translate-rcfilters-translations": "Troidigezhioù",
+ "translate-rcfilters-translations-only-label": "Troidigezhioù",
+ "translate-rcfilters-translations-only-desc": "Kemmoù graet er pajennoù troet.",
+ "translate-rcfilters-translations-filter-label": "Ket troidigezhioù",
+ "translate-rcfilters-translations-filter-desc": "An holl gemmoù n'int ket troidigezhioù",
+ "translate-rcfilters-translations-site-label": "Kemmadennoù al lec'hienn",
+ "translate-rc-translation-filter": "Silañ an troidigezhioù :",
+ "translate-rc-translation-filter-no": "Na ober seurt ebet",
+ "translate-rc-translation-filter-only": "Diskouez an troidigezhioù hepken",
+ "translate-rc-translation-filter-filter": "Lakaat an troidigezhioù er-maez",
+ "translate-rc-translation-filter-site": "Kemmoù da gemennoù al lec'hienn hepken",
+ "translationstats": "Stadegoù treiñ",
+ "translate-stats-edits": "Kemmoù",
+ "translate-stats-users": "Troerien",
+ "translate-stats-registrations": "Enskrivadurioù",
+ "translate-stats-reviews": "Adweladennoù",
+ "translate-stats-reviewers": "Reizherien",
+ "translate-statsf-intro": "Stadegoù eeun a c'hallit krouiñ gant ar furmskrid-mañ.\nBevennoù izel hag uhel zo d'an holl dalvoudoù.",
+ "translate-statsf-options": "Dibarzhioù ar grafik",
+ "translate-statsf-width": "Ledander e piksel :",
+ "translate-statsf-height": "Uhelder e piksel",
+ "translate-statsf-days": "Deiziad kregiñ :",
+ "translate-statsf-start": "Deiziad kregiñ:",
+ "translate-statsf-scale": "Greunerezh :",
+ "translate-statsf-scale-months": "Mizioù",
+ "translate-statsf-scale-weeks": "Sizhunvezhioù",
+ "translate-statsf-scale-days": "Deizioù",
+ "translate-statsf-scale-hours": "Eurioù",
+ "translate-statsf-count": "Muzul :",
+ "translate-statsf-count-edits": "Niver a gemmoù",
+ "translate-statsf-count-users": "Troerien oberiant",
+ "translate-statsf-count-registrations": "Implijerien nevez",
+ "translate-statsf-count-reviews": "Adweladennoù troidigezhioù",
+ "translate-statsf-count-reviewers": "Reizherien",
+ "translate-statsf-language": "Roll kodoù yezh, dispartiet gant skejoù :",
+ "translate-statsf-group": "Roll kodoù strolladoù, dispartiet gant skejoù :",
+ "translate-statsf-submit": "Rakwelet",
+ "translate-tag-page-desc": "Troidigezh ar bajenn wiki [[$2|$1]] adalek $3 ($4).",
+ "translate-sidebar-alltrans": "E yezhoù all",
+ "translations": "An holl droidigezhioù",
+ "translations-summary": "Merkit anv ur c'hemenn bennak amañ evit gwelet an holl droidigezhioù hegerz.",
+ "translate-translations-no-message": "N'haller ket treiñ \"$1\"",
+ "translate-translations-none": "N'eus troidigezh ebet evit \"$1\"",
+ "translate-translations-count": "Bez' ez eus {{PLURAL:$1|un droidigezh|$1 troidigezh}}.",
+ "translate-translations-fieldset-title": "Kemenn",
+ "translate-translations-messagename": "Anv :",
+ "translate-translations-project": "Raktres :",
+ "translate-translations-including-no-param": "Merkit un alc'hwez kemennadenn reizh en arventenn ispajenn",
+ "translate-translations-history-short": "h",
+ "languagestats": "Stadegoù yezh",
+ "languagestats-summary": "Diskouez a ra ar bajenn-mañ ar stadegoù treiñ evit an holl strolladoù kemennadennoù en ur yezh bennak.",
+ "messagegroupstats-summary": "Diskouez a ra ar bajenn-mañ stadegoù ar strolladoù kemennadennoù",
+ "languagestats-stats-for": "Stadegoù an droidigezh evit $1 ($2).",
+ "languagestats-recenttranslations": "troidigezhioù diwezhañ",
+ "translate-langstats-incomplete": "Diglok eo darn eus stadegoù ar bajenn-mañ. Ret eo hec'h adkargañ evit kaout stadegoù all.",
+ "translate-langstats-expand": "dispakañ",
+ "translate-langstats-collapse": "pakañ",
+ "translate-langstats-expandall": "Dispakañ pep tra",
+ "translate-langstats-collapseall": "Pakañ pep tra",
+ "translate-language-code": "Kod yezh",
+ "translate-language-code-field-name": "Kod yezh :",
+ "translate-suppress-complete": "Arabat diskouez ar strolladoù kemennadennoù zo bet troet penn-da-benn.",
+ "translate-ls-noempty": "Arabat diskouez ar strolladoù kemennadennoù n'int ket bet troet",
+ "translate-language": "Yezh",
+ "translate-total": "Kemennadennoù",
+ "translate-untranslated": "Didro",
+ "translate-percentage-complete": "Echu",
+ "translate-percentage-fuzzy": "Dispredet",
+ "translate-percentage-proofread": "Adlennet",
+ "translate-languagestats-overall": "An holl strolladoù kemennadennoù war un dro",
+ "translate-ls-submit": "Diskouez ar stadegoù",
+ "translate-ls-column-group": "Strollad kemennadennoù",
+ "translate-mgs-pagename": "Stadegoù ar strollad kemennadennoù",
+ "translate-mgs-fieldset": "Diskwel ar penndibaboù",
+ "translate-mgs-group": "Strollad kemennadennoù :",
+ "translate-mgs-nocomplete": "Arabat diskouez ar yezhoù eo klok an troidigezhioù evito",
+ "translate-mgs-noempty": "Arabat diskouez ar yezhoù n'eus ket a droidigezhioù evito",
+ "translate-mgs-submit": "Diskouez ar stadegoù",
+ "translate-mgs-column-language": "Yezh",
+ "translate-mgs-totals": "An holl {{PLURAL:$1|yezhoù}} asambles",
+ "translate-mgs-invalid-group": "N'eus ket eus ar strollad $1 merket.",
+ "translate-mgs-nothing": "N'eus netra ebet da ziskouez o klotañ gant ar stadegoù goulennet.",
+ "supportedlanguages": "Yezhoù gweredekaet",
+ "supportedlanguages-summary": "Diskouez a ra ar bajenn-mañ roll ar yezhoù oberiant e {{SITENAME}} a-gevret gant roll an droerien a labour warno.\nSeul vrasoc'h anv ar troer, seul vui a droidigezhioù zo bet kaset da benn gantañ.\nLiv an islinennañ a verk pegen nevez zo eo bet oberiant an droerien amañ.",
+ "supportedlanguages-colorlegend": "Alc'hwez evit al liv : Troidigezh ziwezhañ, $1 devezh zo.",
+ "supportedlanguages-portallink": "[$1] $2 - $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-sqlite-error": "N'eo ket skoret SQLite",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Troer|Troerez}}|Troerien}}: $1",
+ "supportedlanguages-recenttranslations": "troidigezhioù ziwezhañ",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|yezh|yezh}} en holl.",
+ "supportedlanguages-activity": "$1 : $2 {{PLURAL:$2|c'hemm|kemm}} - kemm diwezhañ $3 {{PLURAL:$3|devezh|devezh}} zo",
+ "translate-supportedlanguages-cached": "Krubuilhet eo bet an titouroù-mañ $1 zo.",
+ "translate-jssti-add": "Ouzhpennañ d'ar roll",
+ "managemessagegroups": "Merañ ar strollad kemennadennoù",
+ "translate-smg-notallowed": "N'oc'h ket aotreet da gas an oberiadenn-mañ da benn.",
+ "translate-smg-nochanges": "N'eus netra da gemmañ.",
+ "translate-smg-submit": "Kas ar c'hemmoù ma vo pledet ganto",
+ "translate-smg-submitted": "Hizivaet eo bet termenadurioù an troidigezhioù. Plediñ a reer gant ar c'hemmoù en drekleur.",
+ "translate-smg-rename-select": "Diuzañ",
+ "translate-smg-rename-cancel": "Nullañ",
+ "translate-manage-import-diff": "Kemennadenn $1 | Oberoù : $2",
+ "translate-manage-import-new": "Kemennadenn nevez $1",
+ "translate-manage-import-deleted": "Kemennadenn diverket $1",
+ "translate-manage-action-import": "Enporzhiañ",
+ "translate-manage-action-conflict": "Enporzhiañ ha merkañ evel strafuilhet",
+ "translate-manage-action-ignore": "Lezel a-gostez",
+ "translate-manage-action-fuzzy": "Enporzhiañ an troidigezhioù hag o merkañ evel strafuilhet.",
+ "translate-manage-action-rename": "Adenvel",
+ "translate-manage-nochanges": "N'eus bet kemm ebet e termenadurioù kemennadennoù ar strollad-mañ",
+ "translate-manage-nochanges-other": "N'eus bet kemm ebet gant ar yezh-mañ.\nGrit gant al liamm a-is da zistreiñ d'ar gwel dre ar munud evit ar strollad",
+ "translate-manage-inconsistent": "Merzet ez eus bet un disdalc'h er reked.\nGwiriit ha kemmoù zo bet ha klaskit en-dro.\nMunudoù : $1.",
+ "translate-manage-toolong": "Aet eur dreist d'an termen pellañ a $1 {{PLURAL:$1|eilenn|eilenn}}.\nAdkasit ar furmskrid evit kenderc'hel gant an tretiñ.",
+ "translate-manage-import-summary": "Enporzhiañ ur stumm nevez adalek ur vammenn ziavaez.",
+ "translate-manage-import-ignore": "Lezel ar gemennadenn $1 a-gostez.",
+ "translate-manage-conflict-summary": "Enporzhiañ ur stumm nevez adalek ur vammenn ziavaez.\nGwiriit mar plij.",
+ "translate-manage-submit": "Erounit",
+ "translate-manage-intro-other": "A-is emañ roll ar c'hemmoù treiñ er yezh $1.\nGwiriit anezho ha dibabit ar pezh a fell deoc'h ober evit pep kemm.\nMa tibabit chom hep kemer ar c'hemmoù e kont, ne dalvezo an ober-mañ nemet evit ur mare.",
+ "translate-manage-import-ok": "Enporzhiet : $1",
+ "translate-manage-import-done": "Enporzhiañ aet betek penn !",
+ "importtranslations": "Enporzhiañ an troidigezhioù",
+ "translate-import-from-local": "Enporzhiañ ur restr lec'hel :",
+ "translate-import-load": "Kargañ ar restr",
+ "translate-import-err-dl-failed": "Dibosupl kerc'hat ar restr :\n$1",
+ "translate-import-err-ul-failed": "C'hwitet eo bet enporzhiañ ar restr",
+ "translate-import-err-invalid-title": "Direizh e oa anv ar restr spisaet <nowiki>$1</nowiki>.",
+ "translate-import-err-no-such-file": "N'eus ket eus ar restr <nowiki>$1</nowiki> pe neuze n'eo ket bet pellgaset ent lec'hel.",
+ "translate-import-err-stale-group": "Ar restr-mañ zo en ur strollad kemennadennoù n'eus ket anezhañ.",
+ "translate-import-err-no-headers": "N'eo ket ar restr ur restr ''Gettext'' stummet mat er furmad gortozet gant an astenn ''Translate'' :\nDibosupl eo didermeniñ ar strollad hag ar yezh adalek talbennoù ar restr.",
+ "translate-js-support-unsaved-warning": "Chom a ra troidigezhioù n'int ket bet embannet ganeoc'h.",
+ "translate-gs-pos": "Lec'h.",
+ "translate-gs-code": "Kod",
+ "translate-gs-continent": "Kevandir",
+ "translate-gs-speakers": "Yezherien",
+ "translate-gs-score": "Skor",
+ "translate-gs-multiple": "Lies",
+ "translate-gs-count": "Kont",
+ "translate-gs-total": "Hollad",
+ "translate-gs-avgscore": "Skor keitat",
+ "translate-documentation-language": "Titouroù a-zivout ar gemennadenn",
+ "translate-searchprofile": "Troidigezhioù",
+ "translate-searchprofile-tooltip": "Klask en holl droidigezhioù",
+ "translate-search-languagefilter": "Sil dre yezh :",
+ "translate-search-nofilter": "Tamm sil ebet",
+ "log-name-translationreview": "Marilh adlenn an troidigezhioù",
+ "log-description-translationreview": "Marilh holl adlennadennoù an troidigezhioù hag ar strolladoù kemennadennoù.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|en|he}} deus adwelet troidigezh $3",
+ "group-translate-sandboxed": "Troerien nann-aprouet",
+ "group-translate-sandboxed-member": "{{GENDER:$1|troer nann-aprouet|troerez nann-aprouet}}",
+ "translate-workflow-state-": "(diweredekaet)",
+ "translate-workflowstatus": "Statud: $1",
+ "translate-workflow-set-doing": "O weredekaat...",
+ "translate-workflow-autocreated-summary": "Krouidigezh emgefre ar bajenn evit stad al lusk labour $1",
+ "translate-stats-workflow": "Statud",
+ "translate-workflowgroup-label": "Stad an argerzh labour",
+ "translate-workflowgroup-desc": "Diskouez a ra ar strollad kemennadennoù-mañ stad lusk labour an troidigezhioù.\nTermenet eo ar stadoù en argemenn gefluniañ $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Troidigezhioù diwezhañ",
+ "translate-dynagroup-recent-desc": "Diskouez a ra ar strollad kemennadennoù-mañ an holl droidigezhioù diwezhañ evit ar yezh-mañ.\nTalvoudus evit al labour reizhañ.",
+ "translate-dynagroup-additions-label": "Ouzhpennadennoù diwezhañ",
+ "translate-dynagroup-additions-desc": "Diskouez a ra ar strollad kemennadennoù-mañ ar c'hemennadennoù nevez pe ar re bet kemmet.",
+ "translate-msggroupselector-projects": "Strollad kemennadennoù",
+ "translate-msggroupselector-search-placeholder": "Klask strolladoù",
+ "translate-msggroupselector-search-all": "An holl",
+ "translate-msggroupselector-search-recent": "Nevez",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|isstrollad}}",
+ "tux-languageselector": "Treiñ e",
+ "tux-tab-all": "An holl",
+ "tux-tab-untranslated": "Didro",
+ "tux-tab-outdated": "Dispredet",
+ "tux-tab-translated": "Troet",
+ "tux-tab-unproofread": "Anwiriet",
+ "tux-edit": "Kemmañ",
+ "tux-status-optional": "Diret",
+ "tux-status-fuzzy": "Dispredet",
+ "tux-status-proofread": "Adwelet",
+ "tux-status-translated": "Troet",
+ "tux-status-saving": "Oc'h embann...",
+ "tux-status-unsaved": "Hep embann",
+ "tux-save-unknown-error": "C'hoarvezet ez eus ur fazi dianav.",
+ "tux-editor-paste-original-button-label": "Pegañ an destenn orin",
+ "tux-editor-discard-changes-button-label": "Dilezel ar c'hemmoù",
+ "tux-editor-save-button-label": "Embann an droidigezh",
+ "tux-editor-skip-button-label": "Mont d'an hini war-lerc'h",
+ "tux-editor-cancel-button-label": "Nullañ",
+ "tux-editor-confirm-button-label": "Kadarnaat an droidigezh",
+ "tux-editor-shortcut-info": "Pouezit war \"$1\" evit kadarnaat ha mont d'ar gemennadenn war-lerc'h, \"$2\" evit lezel a-gostez, \"$4\" evit reiñ un diverradenn pe dalc’hit \"$3\" pouezet evit gwelout berrdroc’hoù all.",
+ "tux-editor-edit-desc": "Kemmañ an teuliadur",
+ "tux-editor-add-desc": "Ouzhpennañ un teuliadur",
+ "tux-editor-suggestions-title": "Kinnigoù",
+ "tux-editor-in-other-languages": "E yezhoù all",
+ "tux-editor-need-more-help": "Ezhomm sikour ?",
+ "tux-editor-ask-help": "Goulenn resisadurioù",
+ "tux-editor-tm-match": "$1% kenglotañ",
+ "tux-notices-more": "{{PLURAL:$1|$1 ouzhpenn}}",
+ "tux-notices-hide": "kuzhat",
+ "tux-editor-save-failed": "C'hwitet eo bet embann an droidigezh : $1",
+ "tux-editor-n-uses": "implijet $1 {{PLURAL:$1|wezh|gwezh}}",
+ "tux-editor-message-desc-more": "Gwelet muioc'h",
+ "tux-editor-message-desc-less": "Gwelet nebeutoc'h",
+ "tux-editor-clear-translated": "Kuzhat ar re bet troet",
+ "tux-editor-proofreading-mode": "Adwelet",
+ "tux-editor-translate-mode": "Roll",
+ "tux-editor-proofreading-hide-own-translations": "Kuzhat ho troidigezhioù",
+ "tux-editor-proofreading-show-own-translations": "Diskouez ho troidigezhioù",
+ "tux-proofread-action-tooltip": "Merkañ evel adlennet",
+ "tux-proofread-edit-label": "Kemmañ",
+ "tux-editor-page-mode": "Pajenn",
+ "tux-editor-outdated-notice": "Marteze eo dav nevesaat an droidigezh-mañ.",
+ "tux-editor-outdated-notice-diff-link": "Diskouez ar c'hemmoù",
+ "tux-editor-doc-editor-placeholder": "Titouroù a-zivout ar gemennadenn",
+ "tux-editor-doc-editor-save": "Embann an teuliadur",
+ "tux-editor-doc-editor-cancel": "Nullañ",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|gemennadenn|kemennadenn}} ouzhpenn",
+ "tux-messagetable-loading-messages": "O kargañ ar {{PLURAL:$1|gemennadenn|c'hemennadennoù}}...",
+ "tux-message-filter-placeholder": "Roll silañ",
+ "tux-message-filter-result": "Kavet $1 {{PLURAL:$1|disoc'h}} evit \"$2\"",
+ "tux-message-filter-advanced-button": "Klask araokaet",
+ "tux-message-filter-optional-messages-label": "Kemennadennoù diret",
+ "tux-proofread-translated-by-self": "Troet ganeoc'h",
+ "tux-empty-list-all": "Goullo eo ar strollad kemennadennoù-mañ",
+ "tux-empty-list-all-guide": "Dibab ur strollad kemennadennoù all da dreiñ",
+ "tux-translate-page-no-such-group": "<strong>N'eus ket eus ar strollad merket.</strong> Dibab ur strollad kemennadennoù all.",
+ "tux-empty-list-translated": "Kemennadenn ebet bet troet",
+ "tux-empty-list-translated-guide": "Hor skoazellañ gant an treiñ a c'hallit ober",
+ "tux-empty-list-translated-action": "Treiñ",
+ "tux-empty-no-messages-to-display": "Kemennadenn ebet da ziskwel.",
+ "tux-empty-show-optional-messages": "Diskouez ar c'hemennadennoù diret",
+ "tux-empty-no-outdated-messages": "N'eus kemennadenn dispredet ebet",
+ "tux-empty-nothing-to-proofread": "Netra da adwelet",
+ "tux-empty-you-can-help-providing": "Gellout a rit sikour o kinnig troidigezhioù nevez",
+ "tux-empty-nothing-new-to-proofread": "Netra nevez da adwelet",
+ "tux-empty-list-other": "Netra da dreiñ",
+ "tux-empty-list-other-guide": "Gallout a rit skoazellañ en un adlenn an troidigezhioù bet kaset da benn c'hoazh",
+ "tux-empty-list-other-action": "Adwelet an troidigezhioù",
+ "tux-empty-list-other-link": "Diskouez an holl gemennadennoù",
+ "tux-editor-close-tooltip": "Serriñ",
+ "tux-editor-expand-tooltip": "Dispakañ",
+ "tux-editor-collapse-tooltip": "Pakañ",
+ "tux-editor-message-tools-history": "Istor",
+ "tux-editor-message-tools-delete": "Dilemel",
+ "tux-editor-message-tools-translations": "An holl droidigezhioù",
+ "tux-editor-message-tools-linktothis": "Liamm war-zu ar gemennadenn-mañ",
+ "tux-editor-loading": "O kargañ...",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|yezh}} ouzhpenn",
+ "translate-statsbar-tooltip": "$1% troet, $2% adwelet",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% troet, $2% adwelet, $3% dispredet",
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|strollad}} ouzhpenn",
+ "specialpages-group-translation": "Troidigezh"
+}
diff --git a/Translate/i18n/core/bs.json b/Translate/i18n/core/bs.json
new file mode 100644
index 00000000..f9e9db44
--- /dev/null
+++ b/Translate/i18n/core/bs.json
@@ -0,0 +1,340 @@
+{
+ "@metadata": {
+ "authors": [
+ "CERminator",
+ "DzWiki",
+ "Edinwiki",
+ "KWiki",
+ "Obsuser",
+ "Palapa",
+ "Semso98",
+ "Srdjan m",
+ "Srđan"
+ ]
+ },
+ "translate": "Prijevod",
+ "translate-desc": "[[Special:Translate|Posebna stranica]] za prevođenje MediaWiki i još mnogo više",
+ "translate-taskui-export-to-file": "Izvezi u izvornom formatu",
+ "translate-taskui-export-as-po": "Izvezi za vanmrežno prevođenje",
+ "translate-taction-translate": "Prijevod",
+ "translate-taction-proofread": "Pregledaj",
+ "translate-taction-lstats": "Statistike jezika",
+ "translate-taction-mstats": "Statistika grupe",
+ "translate-taction-export": "Izvoz",
+ "translate-taction-disabled": "Radnja je onemogućena na ovom wikiju.",
+ "translate-page-no-such-language": "Navedeni jezik ne postoji.",
+ "translate-page-no-such-group": "Navedena grupa ne postoji.",
+ "translate-page-disabled": "Prijevodi na ovaj jezik u ovoj grupi su onemogućeni. Razlog:\n\n<em>$1</em>",
+ "translate-language-disabled": "Prijevod na ovaj jezik je onemogućen.",
+ "translate-page-settings-legend": "Postavke",
+ "translate-page-group": "Grupa",
+ "translate-page-language": "Jezik",
+ "translate-page-limit": "Ograničenja",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|poruka|poruke|poruka}} po stranici",
+ "translate-submit": "Dobavi",
+ "translate-page-navigation-legend": "Navigacija",
+ "translate-page-showing": "Prikazane su poruke od $1 do $2 iz $3.",
+ "translate-page-showing-all": "Prikaz $1 {{PLURAL:$1|poruke|poruke|poruka}}.",
+ "translate-page-showing-none": "Nema poruka za prikaz.",
+ "translate-next": "sljedeća stranica",
+ "translate-prev": "Prethodna stranica",
+ "translate-page-description-legend": "Informacije o ovoj grupi",
+ "translate-page-description-hasoptional": "Ova grupa sadrži neobavezne poruke.\nNeobavezne poruke treba prevoditi samo kad Vaš jezik ima posebne potrebe;\nnaprimjer, ako ne treba koristiti razmake ili ako treba preslovljavati imena. $1",
+ "translate-page-description-hasoptional-open": "Prikaži neobavezne poruke.",
+ "translate-page-edit": "uredi",
+ "translate-optional": "(opcionalno)",
+ "translate-ignored": "(zanemareno)",
+ "translate-edit-title": "Uređivanje \"$1\"",
+ "translate-edit-definition": "Definicija poruke",
+ "translate-edit-contribute": "doprinesi",
+ "translate-edit-no-information": "<em>Ova poruka nema pripadajuće dokumentacije.\nAko znate gdje ili kako se ova poruka koristi, možete pomoći drugim prevodiocima tako što ćete dodati dokumentaciju za ovu poruku.</em>",
+ "translate-edit-information": "Informacije o poruci ($1)",
+ "translate-edit-warnings": "Upozorenja o nepotpunim prijevodima",
+ "translate-edit-tmmatch-source": "Izvorni tekst: $1",
+ "translate-edit-tmmatch": "$1% slaganja",
+ "translate-edit-nopermission": "Trebaju Vam prevodilačka prava da biste prevodili poruke.",
+ "translate-edit-askpermission": "Zatraži dozvolu",
+ "exporttranslations": "Izvoz prijevoda",
+ "translate-export-form-format": "Format",
+ "translate-export-invalid-format": "Navedite ispravan format.",
+ "translate-export-not-supported": "Izvoz prijevoda nije podržan.",
+ "translate-export-format-notsupported": "Grupa poruka ne podržava navedeni izvozni format.",
+ "translate-checks-parameters": "Sljedeći {{PLURAL:$2|parametar nije iskorišten|parametri nisu iskorišteni}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "Sljedeći {{PLURAL:$2|parametar je nepoznat|parametri su nepoznati}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "Neparan broj {{PLURAL:$2|zagrada}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Sljedeći link je problematičan|Sljedeća $2 linka su problematični|Sljedećih $2 linkova je problematično}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Sljedeći link|Sljedeća $2 linka|Sljedeći $2 linkova}} nedostaje:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Definicija poruke koristi <nowiki>{{PLURAL:}}</nowiki> ali ga nema u prijevodu.",
+ "translate-checks-plural-forms": "U <nowiki>{{PLURAL:}}</nowiki> {{PLURAL:$1|je upisan jedan oblik|su upisana $1 oblika|je upisano $1 oblika}}, ali on {{PLURAL:$2|podržava samo jedan|podržava samo $2}} (izuzimajući oblike 0= i 1=).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> ima duplicirane oblike na kraju. <nowiki>{{PLURAL:$1|vrata|vrata}}</nowiki> trebalo bi pisati kao <nowiki>{{PLURAL:$1|vrata}}</nowiki>.",
+ "translate-checks-pagename": "Imenski prostor je promijenjen u odnosu na definiciju",
+ "translate-checks-format": "Ovaj prijevod nije usklađen sa definicijom ili nema validnu sintaksu: $1",
+ "translate-checks-escape": "Sljedeće escape-sekvence mogle bi biti slučajne: <strong>$1</strong>",
+ "translate-checks-parametersnotequal": "Broj parametara iznosi {{PLURAL:$1|$1}}; trebao bi biti {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> je pogrešno upisano.",
+ "translate-checks-fudforum-syntax": "Koristite nowiki>$1</nowiki>umjesto <nowiki>$2</nowiki> u ovom projektu.",
+ "translate-pref-editassistlang": "Pomoćni jezici:",
+ "prefs-translate": "Opcije prevođenja",
+ "translate-pref-editassistlang-help": "Spisak kodova jezika razdvojenih zarezom.\nPrijevod neke poruke na ovim jezicima prikazuje se dok prevodite.\nPretpostavljeni spisak jezika zavisi od Vašeg jezika.",
+ "translate-pref-editassistlang-bad": "Nevaljan kod jezika u spisku:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Uređivanje korištenjem prevodilačkog interfejsa",
+ "right-translate-manage": "Upravljanje grupama poruka",
+ "action-translate-manage": "upravljate grupama poruka",
+ "right-translate-import": "Uvoz vanmrežnih prijevoda",
+ "action-translate-import": "uvozite vanmrežne prijevode",
+ "right-translate-messagereview": "Pregled prijevoda",
+ "action-translate-messagereview": "pregledavate prijevode",
+ "right-translate-groupreview": "Mijenjanje stanja radnog toka za grupe poruka",
+ "action-translate-groupreview": "mijenjate stanje radnog toka za grupe poruka",
+ "translate-rc-translation-filter": "Izdvoji prevode:",
+ "translate-rc-translation-filter-no": "Ne čini ništa",
+ "translate-rc-translation-filter-only": "Prikaži samo prijevode",
+ "translate-rc-translation-filter-filter": "Ne prikazuj prijevode",
+ "translate-rc-translation-filter-site": "Promjene samo na porukama sajta",
+ "translationstats": "Statistike prijevoda",
+ "translate-stats-edits": "uređivanja",
+ "translate-stats-users": "Prevodioci",
+ "translate-stats-registrations": "Registracije",
+ "translate-stats-reviews": "Pregledi",
+ "translate-stats-reviewers": "Pregledavači",
+ "translate-statsf-intro": "Možete generisati jednostavnu statistiku uz pomoć ovog obrasca. Sve vrijednosti imaju gornja i donja ograničenja.",
+ "translate-statsf-options": "Postavke grafikona",
+ "translate-statsf-width": "Širina u pikselima:",
+ "translate-statsf-height": "Visina u pikselima:",
+ "translate-statsf-days": "Vremenski period u danima:",
+ "translate-statsf-start": "Početni datum:",
+ "translate-statsf-scale": "Granularnost:",
+ "translate-statsf-scale-months": "Mjeseci",
+ "translate-statsf-scale-weeks": "Sedmice",
+ "translate-statsf-scale-days": "dani",
+ "translate-statsf-scale-hours": "sati",
+ "translate-statsf-count": "Mjerenje:",
+ "translate-statsf-count-edits": "Broj izmjena",
+ "translate-statsf-count-users": "Aktivni prevodioci",
+ "translate-statsf-count-registrations": "Novi korisnici",
+ "translate-statsf-count-reviews": "Pregledi prijevoda",
+ "translate-statsf-count-reviewers": "Pregledavači",
+ "translate-statsf-language": "Spisak jezičnih kodova razdvojenih zarezom:",
+ "translate-statsf-group": "Spisak kodova grupa razdvojenih zarezima:",
+ "translate-statsf-submit": "Pregled",
+ "translate-tag-page-desc": "Prijevod wiki stranice [[$2|$1]] sa $3 ($4).",
+ "translate-sidebar-alltrans": "Na drugim jezicima",
+ "translations": "Svi prijevodi",
+ "translations-summary": "Unesite naziv poruke ispod da bi prikazali sve dostupne prijevode.",
+ "translate-translations-no-message": "\"$1\" je poruka koja se ne može prevoditi",
+ "translate-translations-none": "Ne postoje prijevodi za \"$1\"",
+ "translate-translations-count": "{{PLURAL:$1|Pronađen jedan prijevod|Pronađeno $1 prijevoda}}.",
+ "translate-translations-fieldset-title": "Poruka",
+ "translate-translations-messagename": "Naziv:",
+ "translate-translations-project": "Projekt:",
+ "translate-translations-including-no-param": "Molimo odredite validni ključ poruke u parametru podstranice",
+ "translate-translations-history-short": "h",
+ "languagestats": "Statistike jezika",
+ "languagestats-summary": "Ova stranica prikazuje statistike prijevoda za sve grupe poruka na određenom jeziku.",
+ "messagegroupstats-summary": "Ova stranica prikazuje statistike o grupi poruka.",
+ "languagestats-stats-for": "Statistike prevoda za $1 ($2).",
+ "languagestats-recenttranslations": "nedavni prijevodi",
+ "translate-langstats-incomplete": "Neke statistike navedene na stranici su nepotpune. Ponovo učitajte stranicu da dobijete potpuni pregled.",
+ "translate-langstats-expand": "proširi",
+ "translate-langstats-collapse": "sakrij",
+ "translate-langstats-expandall": "raširi sve",
+ "translate-langstats-collapseall": "sakrij sve",
+ "translate-language-code": "Kod jezika",
+ "translate-language-code-field-name": "Kod jezika:",
+ "translate-suppress-complete": "Sakrij potpuno prevedene grupe poruka",
+ "translate-ls-noempty": "Ne prikazuj potpuno prevedene grupe poruka",
+ "translate-language": "Jezik",
+ "translate-total": "Poruke",
+ "translate-untranslated": "Neprevedeno",
+ "translate-percentage-complete": "Završeno",
+ "translate-percentage-fuzzy": "Zastarjelo",
+ "translate-languagestats-overall": "Sve grupe poruka zajedno",
+ "translate-ls-submit": "Prikaži statistiku",
+ "translate-ls-column-group": "Grupa poruka",
+ "translate-mgs-pagename": "Statistika grupe",
+ "translate-mgs-fieldset": "Postavke prikaza",
+ "translate-mgs-group": "Grupa poruka:",
+ "translate-mgs-nocomplete": "Ne prikazuj jezike s potpunim prijevodom",
+ "translate-mgs-noempty": "Ne prikazuj jezike bez ikakvih prijevoda",
+ "translate-mgs-submit": "Prikaži statistiku",
+ "translate-mgs-column-language": "Jezik",
+ "translate-mgs-totals": "Svi jezici zajedno",
+ "translate-mgs-invalid-group": "Navedena grupa $1 ne postoji.",
+ "translate-mgs-nothing": "Nema se šta prikazati za zahtijevane statistike.",
+ "supportedlanguages": "Podržani jezici",
+ "supportedlanguages-summary": "Ova stranica prikazuje sve jezike koji podržavaju {{SITENAME}},\nkao i imena prevodilaca koji rade na tim jezicima.\nVeličina korisničkih imena prevodilaca zavisi od toga koliko je ko poruka preveo.\nBoja linije kojom su podvučena imena naznačava koliko je prevodilac aktivan u posljednje vrijeme.",
+ "supportedlanguages-colorlegend": "Legenda za boju: Posljednji prijevod izvršen prije $1 dana.",
+ "supportedlanguages-portallink": "[$1] $2 – $3",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Prevodilac|Prevoditeljica}}|Prevodioci}}: $1",
+ "supportedlanguages-recenttranslations": "nedavni prijevodi",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|jezik|jezika}} ukupno.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|izmjena|izmjene}} - posljednja izmjena prije $3 {{PLURAL:$3|dan|dana}}",
+ "abusefilter-edit-builder-vars-translate-source-text": "Izvorni tekst prevodilačke jedinice",
+ "translate-jssti-add": "Dodaj na spisak",
+ "managemessagegroups": "Upravljanje grupama poruka",
+ "translate-smg-notallowed": "Nije Vam dozvoljeno da izvršite ovu radnju.",
+ "translate-smg-nochanges": "Nema izmjena koje treba obraditi.",
+ "translate-smg-submit": "Proslijedi izmjene za obradu",
+ "translate-smg-submitted": "Definicije poruka su ažurirane. Izmjene se obrađuju u pozadini.",
+ "translate-smg-more": "Bit će još izmjena za obradu nakon što podnesete ove.",
+ "translate-smg-left": "Sadržaj poruke na wikiju",
+ "translate-smg-right": "Predstojeće izmjene",
+ "translate-manage-import-diff": "Poruka $1 | Akcije: $2",
+ "translate-manage-import-new": "Nova poruka $1",
+ "translate-manage-import-deleted": "Obrisana poruka $1",
+ "translate-manage-action-import": "Uvezi",
+ "translate-manage-action-conflict": "Uvezi i označi kao zastarjelo",
+ "translate-manage-action-ignore": "Zanemeri",
+ "translate-manage-action-fuzzy": "Uvezi prijevode i označi ih zastarjelim",
+ "translate-manage-nochanges": "Nema promjena u definicijama poruka u ovoj grupi.",
+ "translate-manage-nochanges-other": "Nema promjena za ovaj jezik.\nUpotrijebite link ispod za povratak na pregled detalja grupe.",
+ "translate-manage-inconsistent": "Otkrivene nedosljednosti u zahtjevu.\nProvjerite izmjene i pokušajte ponovo.\nDetalji: $1.",
+ "translate-manage-toolong": "Isteklo je maksimalno vrijeme za obradu od $1 {{PLURAL:$1|sekunde|sekunde|sekundi}}.\nMolimo ponovo pošaljite obrazac za nastavak obrade.",
+ "translate-manage-import-summary": "Uvozim novu verziju iz vanjskog izvora",
+ "translate-manage-import-ignore": "Preskaćem poruku $1.",
+ "translate-manage-conflict-summary": "Uvozi se nova verzija iz vanjskog izvora. Molimo provjerite.",
+ "translate-manage-submit": "Izvrši",
+ "translate-manage-intro-other": "Ispod je spisak izmjena prijevoda na $1 jezik.\nPregledajte izmjene i izaberite radnju koju želite poduzeti za svaki prijevod.\nAko izaberete zanemariti izmjene, ta će radnja biti samo privremena.",
+ "translate-manage-import-ok": "Uvezeno: $1.",
+ "translate-manage-import-done": "Uvoz završen!",
+ "importtranslations": "Uvoz prijevoda",
+ "translate-import-from-local": "Postavljanje lokalne datoteke:",
+ "translate-import-load": "Učitaj datoteku",
+ "translate-import-err-dl-failed": "Nije moguće uvesti datoteku:\n$1",
+ "translate-import-err-ul-failed": "Postavljanje datoteke nije uspjelo",
+ "translate-import-err-invalid-title": "Navedeno ime datoteke <nowiki>$1</nowiki> je bilo nevaljano.",
+ "translate-import-err-no-such-file": "Datoteka <nowiki>$1</nowiki> ne postoji ili nije postavljena lokalno.",
+ "translate-import-err-stale-group": "Grupa poruka kojoj ova datoteka pripada ne postoji.",
+ "translate-import-err-no-headers": "Datoteka nije dobro formiran Gettext datoteka u formatu proširenja Translate:\nNe mogu da odredim grupu i jezik iz zaglavlja datoteke.",
+ "translate-js-support-unsaved-warning": "Imate nesačuvanih prijevoda.",
+ "translate-gs-pos": "Mj.",
+ "translate-gs-code": "Kôd",
+ "translate-gs-continent": "Kontinent",
+ "translate-gs-speakers": "Govornici",
+ "translate-gs-score": "Rezultat",
+ "translate-gs-multiple": "Više",
+ "translate-gs-count": "Broj",
+ "translate-gs-total": "Ukupno",
+ "translate-gs-avgscore": "Prosj. rezultat",
+ "translate-documentation-language": "Dokumentacija poruke",
+ "translate-searchprofile": "Prijevodi",
+ "translate-searchprofile-tooltip": "Traženje iz svih prevoda",
+ "translate-searchprofile-note": "Dostupno je više opcija za pretragu na [$1 pretrazi prijevoda].",
+ "translate-search-languagefilter": "Filtriranje po jeziku:",
+ "translate-search-nofilter": "Bez filtriranja",
+ "log-name-translationreview": "Zapisnik pregleda prijevoda",
+ "log-description-translationreview": "Zapisnik svih pregleda prijevoda i grupa poruka.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|potvrdio|potvrdila}} je prijevod $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|promijenio|promijenila}} je stanje $4 prijevoda $3 sa $6 na $7",
+ "group-translate-sandboxed": "Neodobreni prevodioci",
+ "group-translate-sandboxed-member": "{{GENDER:$1|neodobreni prevodilac|neodobrena prevoditeljica}}",
+ "right-translate-sandboxmanage": "Upravljanje korisnicima u pješčaniku",
+ "action-translate-sandboxmanage": "upravljate korisnicima u pješčaniku",
+ "right-translate-sandboxaction": "Vršenje radnji na bijeloj listi za korisnike u pješčaniku",
+ "action-translate-sandboxaction": "vršite radnje na bijeloj listi za korisnike u pješčaniku",
+ "translate-workflow-state-": "(nepostavljen)",
+ "translate-workflowstatus": "Status: $1",
+ "translate-workflow-set-doing": "Postavljam...",
+ "translate-workflow-autocreated-summary": "Automatsko stvaranje stranice za radno stanje $1",
+ "translate-stats-workflow": "Stanje",
+ "translate-workflowgroup-label": "Radna stanja",
+ "translate-workflowgroup-desc": "Ova grupa poruka prikazuje radno stanje prijevoda.\nStanja se određuju varijablom $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Nedavni prijevodi",
+ "translate-dynagroup-recent-desc": "Ova grupa poruka prikazuje sve nedavne prijevode na ovaj jezik.\nOvo je najkorisnije za pregled prijevoda.",
+ "translate-dynagroup-additions-label": "Nedavna dodavanja",
+ "translate-dynagroup-additions-desc": "Ova grupa poruka prikazuje nove i izmijenjene poruke.",
+ "translate-msggroupselector-projects": "Grupa poruka",
+ "translate-msggroupselector-search-placeholder": "Pretraži grupe",
+ "translate-msggroupselector-search-all": "Sve",
+ "translate-msggroupselector-search-recent": "Nedavne",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|podgrupa|podgrupe}}",
+ "tux-languageselector": "Prijevod na",
+ "tux-tab-all": "Sve",
+ "tux-tab-untranslated": "Neprevedeno",
+ "tux-tab-outdated": "Zastarjelo",
+ "tux-tab-translated": "Prevedeno",
+ "tux-tab-unproofread": "Nepotvrđeno",
+ "tux-edit": "Uredi",
+ "tux-status-optional": "Neobavezno",
+ "tux-status-fuzzy": "Zastarjelo",
+ "tux-status-proofread": "Pregledano",
+ "tux-status-translated": "Prevedeno",
+ "tux-status-saving": "Čuvanje...",
+ "tux-status-unsaved": "Nesačuvano",
+ "tux-save-unknown-error": "Desila se nepoznata greška.",
+ "tux-editor-editsummary-placeholder": "Neobavezan sažetak",
+ "tux-editor-paste-original-button-label": "Zalijepi izvorni tekst",
+ "tux-editor-discard-changes-button-label": "Odbaci izmjene",
+ "tux-editor-save-button-label": "Sačuvaj prijevod",
+ "tux-editor-skip-button-label": "Pređi na sljedeću poruku",
+ "tux-editor-cancel-button-label": "Otkaži",
+ "tux-editor-confirm-button-label": "Potvrdi prijevod",
+ "tux-editor-proofread-button-label": "Označi pregledanim",
+ "tux-editor-shortcut-info": "Pritisnite \"$1\" da sačuvate, \"$2\" da pređete na sljedeću poruku, \"$4\" da upišete sažetak ili \"$3\" za druge prečice.",
+ "tux-editor-edit-desc": "Uredi dokumentaciju",
+ "tux-editor-add-desc": "Dodaj dokumentaciju",
+ "tux-editor-suggestions-title": "Prijedlozi",
+ "tux-editor-in-other-languages": "Na drugim jezicima",
+ "tux-editor-need-more-help": "Trebate pomoć?",
+ "tux-editor-ask-help": "Zatražite više informacija",
+ "tux-editor-tm-match": "$1% slaganja",
+ "tux-notices-more": "{{PLURAL:$1|još $1}}",
+ "tux-notices-hide": "sakrij",
+ "tux-editor-save-failed": "Čuvanje prijevoda nije uspjelo: $1",
+ "tux-editor-n-uses": "korišteno $1 {{PLURAL:$1|put|puta}}",
+ "tux-editor-message-desc-more": "Prikaži više",
+ "tux-editor-message-desc-less": "Prikaži manje",
+ "tux-editor-clear-translated": "Sakrij prevedeno",
+ "tux-editor-proofreading-mode": "Pregledaj",
+ "tux-editor-translate-mode": "Spisak",
+ "tux-editor-proofreading-hide-own-translations": "Sakrij moje prijevode",
+ "tux-editor-proofreading-show-own-translations": "Prikaži moje prijevode",
+ "tux-proofread-action-tooltip": "Označi pregledanim",
+ "tux-proofread-edit-label": "Uredi",
+ "tux-editor-page-mode": "Stranica",
+ "tux-editor-outdated-notice": "Možda bi trebalo ažurirati ovaj prijevod.",
+ "tux-editor-outdated-notice-diff-link": "Prikaži razlike",
+ "tux-editor-doc-editor-placeholder": "Dokumentacija poruke",
+ "tux-editor-doc-editor-save": "Sačuvaj dokumentaciju",
+ "tux-editor-doc-editor-cancel": "Otkaži",
+ "tux-messagetable-more-messages": "još $1 {{PLURAL:$1|poruka|poruke|poruka}}",
+ "tux-messagetable-loading-messages": "Učitavam {{PLURAL:$1|poruku|poruke}}...",
+ "tux-message-filter-placeholder": "Filtriraj spisak",
+ "tux-message-filter-result": "{{PLURAL:$1|Pronađen $1 rezultat|Pronađena $1 rezultata|Pronađeno $1 rezultata}} za \"$2\"",
+ "tux-message-filter-advanced-button": "Napredna pretraga",
+ "tux-message-filter-optional-messages-label": "Neobavezne poruke",
+ "tux-proofread-translated-by-self": "Vaš prijevod",
+ "tux-empty-list-all": "Ova grupa poruka je prazna",
+ "tux-empty-list-all-guide": "Izaberite drugu grupu poruka za prevođenje",
+ "tux-translate-page-no-such-group": "<strong>Naznačena grupa ne postoji.</strong> Izaberite drugu.",
+ "tux-empty-list-translated": "Nema prevedenih poruka",
+ "tux-empty-list-translated-guide": "Možete pomoći u prevođenju",
+ "tux-empty-list-translated-action": "Prevedi",
+ "tux-empty-no-messages-to-display": "Nema poruka za prikazivanje.",
+ "tux-empty-there-are-optional": "Ima neobaveznih poruka koje nisu prikazane na spisku",
+ "tux-empty-show-optional-messages": "Prikaži neobavezne poruke",
+ "tux-empty-no-outdated-messages": "Nema zastarjelih poruka",
+ "tux-empty-nothing-to-proofread": "Nema ništa za pregled",
+ "tux-empty-you-can-help-providing": "Možete pomoći pružanjem novih prijevoda",
+ "tux-empty-nothing-new-to-proofread": "Ništa novo za pregled",
+ "tux-empty-you-can-review-already-proofread": "Možete pregledati prijevode koje su drugi već pregledali.",
+ "tux-empty-list-other": "Nema ništa za prevođenje",
+ "tux-empty-list-other-guide": "Možete pomoći pregledom postojećih prijevoda",
+ "tux-empty-list-other-action": "Pregledaj prijevode",
+ "tux-empty-list-other-link": "Prikaži sve poruke",
+ "tux-editor-close-tooltip": "Zatvori",
+ "tux-editor-expand-tooltip": "Proširi",
+ "tux-editor-collapse-tooltip": "Sklopi",
+ "tux-editor-message-tools-show-editor": "Prikaži u wiki uređivaču",
+ "tux-editor-message-tools-history": "Historija",
+ "tux-editor-message-tools-delete": "Obriši",
+ "tux-editor-message-tools-translations": "Svi prijevodi",
+ "tux-editor-message-tools-linktothis": "Link ka poruci",
+ "tux-editor-loading": "Učitavam...",
+ "translate-search-more-languages-info": "još $1 {{PLURAL:$1|jezik|jezika}}",
+ "translate-statsbar-tooltip": "$1% prevedeno, $2% pregledano",
+ "translate-statsbar-tooltip-with-fuzzy": "‎$1% prevedeno, $2% pregledano, $3% zastareno",
+ "translate-search-more-groups-info": "još $1 {{PLURAL:$1|grupa|grupe|grupa}}",
+ "tux-session-expired": "Više niste prijavljeni. Prijavite se u drugoj kartici. Druga mogućnost je da prekopirate nesačuvane prijevode, prijavite se, vratite se na ovu stranicu i ponovo upišete svoje prijevode.",
+ "tux-nojs": "Ova stranica zahtijeva JavaScript."
+}
diff --git a/Translate/i18n/core/btm.json b/Translate/i18n/core/btm.json
new file mode 100644
index 00000000..1a1a6bde
--- /dev/null
+++ b/Translate/i18n/core/btm.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Simartampua"
+ ]
+ },
+ "translate-documentation-language": "Dokumentasi tona"
+}
diff --git a/Translate/i18n/core/bto.json b/Translate/i18n/core/bto.json
new file mode 100644
index 00000000..20d4a38a
--- /dev/null
+++ b/Translate/i18n/core/bto.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Filipinayzd"
+ ]
+ },
+ "translate-documentation-language": "Dokumentasyon ka mensahe"
+}
diff --git a/Translate/i18n/core/bug.json b/Translate/i18n/core/bug.json
new file mode 100644
index 00000000..966ed106
--- /dev/null
+++ b/Translate/i18n/core/bug.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kurniasan"
+ ]
+ },
+ "translate": "Tare'juma",
+ "translate-submit": "Ala",
+ "translate-page-edit": "padeccéŋ",
+ "translate-edit-no-information": "''Iyyedé méséjeë degaga dokuméntasina. Rékko idi isseŋi kotégaï na pakogaï ripaké, weddiŋi idi maŋinriŋ patare'juma laiŋë menambahkan dokumentasina.''",
+ "translate-edit-information": "Informasina iyyéde leppa ($1)",
+ "translate-statsf-submit": "Pribiu"
+}
diff --git a/Translate/i18n/core/bxr.json b/Translate/i18n/core/bxr.json
new file mode 100644
index 00000000..f6877ca4
--- /dev/null
+++ b/Translate/i18n/core/bxr.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "ОйЛ"
+ ]
+ },
+ "translate-page-language": "Хэлэн",
+ "translate-language": "Хэлэн"
+}
diff --git a/Translate/i18n/core/ca.json b/Translate/i18n/core/ca.json
new file mode 100644
index 00000000..a55403d1
--- /dev/null
+++ b/Translate/i18n/core/ca.json
@@ -0,0 +1,375 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aleator",
+ "Cedric31",
+ "Fitoschido",
+ "Galactic Thrasher",
+ "Jlrb+",
+ "Jmarchn",
+ "Jordi Roqué",
+ "Macofe",
+ "Mguix",
+ "Paucabot",
+ "Pginer",
+ "QuimGil",
+ "SMP",
+ "Sanbec",
+ "Skurz0",
+ "Ssola",
+ "Toniher",
+ "Vriullop",
+ "XVEC",
+ "පසිඳු කාවින්ද"
+ ]
+ },
+ "translate": "Tradueix",
+ "translate-extensionname": "Tradueix",
+ "translate-desc": "[[Special:Translate|Pàgina especial]] per a traduir el MediaWiki i altres coses",
+ "translate-taskui-export-to-file": "Exporta a format natiu",
+ "translate-taskui-export-as-po": "Exporta-ho per traduir-ho fora de línia",
+ "translate-taction-translate": "Tradueix",
+ "translate-taction-proofread": "Revisa",
+ "translate-taction-lstats": "Estadístiques de l'idioma",
+ "translate-taction-mstats": "Estadístiques del grup de missatges",
+ "translate-taction-export": "Exporta",
+ "translate-taction-disabled": "Aquesta acció està desactivada a aquest wiki.",
+ "translate-page-no-such-language": "L'idioma especificat no és vàlid.",
+ "translate-page-no-such-group": "El grup especificat no és vàlid.",
+ "translate-page-disabled": "Les traduccions a aquest idioma en aquest grup han estat suspeses. Motiu:\n\n<em>$1</em>",
+ "translate-language-disabled": "La traducció a aquest idioma està desactivada.",
+ "translate-page-settings-legend": "Preferències",
+ "translate-page-group": "Grup",
+ "translate-page-language": "Idioma",
+ "translate-page-limit": "Límit",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|missatge|missatges}} per pàgina",
+ "translate-submit": "Mostra",
+ "translate-page-navigation-legend": "Navegació",
+ "translate-page-showing": "S'estan mostrant missatges del $1 al $2 de $3.",
+ "translate-page-showing-all": "S'estan mostrant $1 {{PLURAL:$1|missatge|missatges}}.",
+ "translate-page-showing-none": "No hi ha missatges a mostrar.",
+ "translate-next": "Pàgina següent",
+ "translate-prev": "Pàgina anterior",
+ "translate-page-description-legend": "Informació del grup",
+ "translate-page-description-hasoptional": "Aquest grup de missatges conté missatges adicionals.\nEls missatges opcionals només s'han de traduir quan el vostre idioma tingui requeriments especials\ncom ara no fer servir espais o transliterant noms propis. $1",
+ "translate-page-description-hasoptional-open": "Mostra els missatges opcionals.",
+ "translate-page-edit": "modifica",
+ "translate-optional": "(opcional)",
+ "translate-ignored": "(ignorat)",
+ "translate-edit-title": "Edita «$1»",
+ "translate-edit-definition": "Definició del missatge",
+ "translate-edit-contribute": "contribuïu-hi",
+ "translate-edit-no-information": "<em>Aquest missatge no té documentació.\nSi sabeu on o com és usat aquest missatge podeu ajudar la resta de traductors afegint-hi la documentació.</em>",
+ "translate-edit-information": "Informació sobre el missatge ($1)",
+ "translate-edit-warnings": "Avisos de traducció incompleta",
+ "translate-edit-tmmatch-source": "Text original de la traducció: $1",
+ "translate-edit-tmmatch": "coincidència del $1%",
+ "translate-edit-nopermission": "Necessiteu permisos de traducció per a traduir missatges.",
+ "translate-edit-askpermission": "Obté permís",
+ "exporttranslations": "Exporta les traduccions",
+ "translate-export-form-format": "Format",
+ "translate-export-invalid-format": "Especifiqueu un format vàlid.",
+ "translate-export-not-supported": "L'exportació de traduccions no està admesa.",
+ "translate-checks-parameters": "{{PLURAL:$2|El paràmetre següent no s'està|Els paràmetres següents no s'estan}} usant:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|El paràmetre següent és desconegut|Els paràmetres següent són desconeguts}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "Hi ha un nombre senar de {{PLURAL:$2|parèntesis, claus i/o claudàtors|parèntesis, claus i/o claudàtors}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|L'enllaç següent és problemàtic|Els enllaços següents són problemàtics}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "No hi ha {{PLURAL:$2|l'enllaç següent|els següents $2 enllaços}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "La definició utilitza <nowiki>{{PLURAL:}}</nowiki> i en canvi la traducció no.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> es va donar {{PLURAL:$1|una forma|$1 formes}} però {{PLURAL:$2|només una forma és|$2 formes són}} compatible/s (excloent les formes 0= i 1=)",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> conté una forma duplicada al final. <nowiki>{{PLURAL:$1|atles|atles}}</nowiki> s'hauria d'escriure <nowiki>{{PLURAL:$1|atles}}</nowiki>.",
+ "translate-checks-smartformat-plural-unsupported": "Aquest missatge no admet els plurals a la variable $1.",
+ "translate-checks-pagename": "S’ha canviat l’espai de noms de la definició",
+ "translate-checks-format": "Aquesta traducció no segueix la definició o té una sintaxi invàlida: $1",
+ "translate-checks-escape": "{{PLURAL:$2|El següent caràcter d'escapament pot ser accidental|Els següents caràcters d'escapament poden ser accidentals}}: <strong>$1</strong>. {{PLURAL:$4|Un caràcter d'escapament vàlid és|Uns caràcters d'escapament vàlids inclouen:}} $3.",
+ "translate-checks-parametersnotequal": "El compte de paràmetres és {{PLURAL:$1|$1}}; hauria de ser{{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> té un format incorrecte.",
+ "translate-checks-fudforum-syntax": "Feu servir <nowiki>$1</nowiki> en comptes de <nowiki>$2</nowiki> en aquest projecte.",
+ "translate-pref-editassistlang": "Idiomes d'ajuda:",
+ "prefs-translate": "Opcions de traducció",
+ "translate-pref-editassistlang-help": "Llista separada per comes dels codis dels idiomes que vulgueu utilitzar. Quan traduïu un missatge podreu veure les seves traduccions a aquests idiomes. La llista d'idiomes per defecte depèn del vostre idioma.",
+ "translate-pref-editassistlang-bad": "Codi d'idioma incorrecte a la llista:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Editar fent servir la interfície de traducció",
+ "action-translate": "modifica fent servir la interfície de traducció",
+ "right-translate-manage": "Gestiona els grups de missatge",
+ "action-translate-manage": "Gestiona els grups de missatges",
+ "right-translate-import": "Importar traduccions fora de línia",
+ "action-translate-import": "importa les traduccions fetes fora de línia",
+ "right-translate-messagereview": "Revisa les traduccions",
+ "action-translate-messagereview": "revisa les traduccions",
+ "right-translate-groupreview": "Canvia l'estat del flux de treball dels grups de missatges",
+ "action-translate-groupreview": "canvia l'estat del flux de treball dels grups de missatges",
+ "translate-rcfilters-translations": "Traduccions",
+ "translate-rcfilters-translations-only-label": "Traduccions",
+ "translate-rcfilters-translations-only-desc": "Canvis a pàgines traduïdes.",
+ "translate-rcfilters-translations-filter-label": "No traduccions",
+ "translate-rcfilters-translations-filter-desc": "Tots els canvis que no són traduccions.",
+ "translate-rcfilters-translations-site-label": "Missatges del lloc",
+ "translate-rcfilters-translations-site-desc": "Personalitzacions dels missatges del lloc a l'espai de noms MediaWiki.",
+ "translate-rc-translation-filter": "Filtra traduccions:",
+ "translate-rc-translation-filter-no": "No facis res",
+ "translate-rc-translation-filter-only": "Mostra només traduccions",
+ "translate-rc-translation-filter-filter": "No mostris traduccions",
+ "translate-rc-translation-filter-site": "Només canvis als missatges d'aquest lloc",
+ "translationstats": "Estadístiques de traducció",
+ "translate-stats-edits": "Edicions",
+ "translate-stats-users": "Traductors",
+ "translate-stats-registrations": "Registres",
+ "translate-stats-reviews": "Revisions",
+ "translate-stats-reviewers": "Revisors",
+ "translate-statsf-intro": "Podeu generar estadístiques simples amb aquest formulari. Tots els valors tenen límit superior i inferior.",
+ "translate-statsf-options": "Opcions del gràfic",
+ "translate-statsf-width": "Amplada en píxels:",
+ "translate-statsf-height": "Alçària en píxels:",
+ "translate-statsf-days": "Data d'inici:",
+ "translate-statsf-start": "Data d'inici:",
+ "translate-statsf-scale": "Granulació:",
+ "translate-statsf-scale-years": "Anys",
+ "translate-statsf-scale-months": "Mesos",
+ "translate-statsf-scale-weeks": "Setmanes",
+ "translate-statsf-scale-days": "Dies",
+ "translate-statsf-scale-hours": "Hores",
+ "translate-statsf-count": "Mesura:",
+ "translate-statsf-count-edits": "Nombre d'edicions",
+ "translate-statsf-count-users": "Traductors actius",
+ "translate-statsf-count-registrations": "Usuaris nous",
+ "translate-statsf-count-reviews": "Revisions de traducció",
+ "translate-statsf-count-reviewers": "Revisors",
+ "translate-statsf-language": "Codis d'idiomes separats per comes:",
+ "translate-statsf-group": "Codis de grups separats per comes:",
+ "translate-statsf-submit": "Previsualització",
+ "translate-tag-page-desc": "Traducció de la pàgina wiki [[$2|$1]] des de $3 ($4).",
+ "translate-sidebar-alltrans": "En altres idiomes",
+ "translations": "Totes les traduccions",
+ "translations-summary": "Entreu a continuació un nom de missatge per a mostrar-ne totes les traduccions disponibles.",
+ "translate-translations-no-message": "«$1» no és un missatge a traduir.",
+ "translate-translations-none": "No hi ha traduccions per a «$1»",
+ "translate-translations-count": "{{PLURAL:$1|S'ha trobat una traducció|S'han trobat $1 traduccions}}.",
+ "translate-translations-fieldset-title": "Missatge",
+ "translate-translations-messagename": "Nom:",
+ "translate-translations-project": "Projecte:",
+ "translate-translations-including-no-param": "Especifiqueu una clau de missatge vàlida en el paràmetre de subpàgina",
+ "translate-translations-history-short": "h",
+ "languagestats": "Estadístiques de l'idioma",
+ "languagestats-summary": "Aquesta pàgina mostra les estadístiques de traducció per a tots els grups de missatges de cada idioma.",
+ "messagegroupstats-summary": "Aquesta pàgina mostra estadístiques del grup de missatges.",
+ "languagestats-stats-for": "Estadístiques de traducció per a l'idioma $1 ($2)",
+ "languagestats-recenttranslations": "traduccions recents",
+ "translate-langstats-incomplete": "Algunes de les estadístiques d'aquesta pàgina són incompletes. Recarregueu-la per a obtenir-ne més.",
+ "translate-langstats-expand": "amplia",
+ "translate-langstats-collapse": "tanca",
+ "translate-langstats-expandall": "amplia'ls tots",
+ "translate-langstats-collapseall": "amaga'ls tots",
+ "translate-language-code": "Codi de l'idioma",
+ "translate-language-code-field-name": "Codi d'idioma:",
+ "translate-suppress-complete": "Oculta els missatges de grups completament traduïts",
+ "translate-ls-noempty": "Oculta els missatges de grups totalment sense traduir",
+ "translate-language": "Idioma",
+ "translate-total": "Missatges",
+ "translate-untranslated": "Sense traduir",
+ "translate-percentage-complete": "Completesa",
+ "translate-percentage-fuzzy": "Desfasats",
+ "translate-percentage-proofread": "Revisat",
+ "translate-languagestats-overall": "Tots els grups de missatges junts",
+ "translate-ls-submit": "Mostra les estadístiques",
+ "translate-ls-column-group": "Grup de missatges",
+ "translate-mgs-pagename": "Estadístiques del grup de missatges",
+ "translate-mgs-fieldset": "Mostra les preferències",
+ "translate-mgs-group": "Grup de missatges:",
+ "translate-mgs-nocomplete": "No mostris els idiomes amb una traducció completa",
+ "translate-mgs-noempty": "No mostris els idiomes que no tenen cap traducció",
+ "translate-mgs-submit": "Mostra les estadístiques",
+ "translate-mgs-column-language": "Idioma",
+ "translate-mgs-totals": "{{PLURAL:$1|Tota la $1 llengua junta|Totes les $1 llengües juntes}}",
+ "translate-mgs-invalid-group": "El grup $1 especificat no existeix.",
+ "translate-mgs-nothing": "Res a mostrar per l'estadística soŀlicitada.",
+ "supportedlanguages": "Idiomes disponibles",
+ "supportedlanguages-summary": "Aquesta pàgina mostra una llista de tots els idiomes disponibles a {{SITENAME}} juntament amb els noms dels traductors que treballen en cadascun d'ells.\nEl nom del traductor apareix més gran com més traduccions hagi contribuït a fer.\nEl color del subratllat indica si el traductor ha estat actiu recentment.",
+ "supportedlanguages-colorlegend": "Llegenda per al color: La darrera traducció va ser fa $1 dies.",
+ "supportedlanguages-sqlite-error": "SQLite no està admès",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Traductor}}|Traductors}}: $1",
+ "supportedlanguages-recenttranslations": "traduccions recents",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|idioma|idiomes}} en total.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|modificació|modificacions}}, la darrera va ser fa $3 {{PLURAL:$3|dia|dies}}",
+ "abusefilter-edit-builder-vars-translate-source-text": "Text font de la unitat de traducció",
+ "translate-jssti-add": "Afegeix a la llista",
+ "managemessagegroups": "Gestió del grup de missatges",
+ "translate-smg-notallowed": "No teniu permís per dur a terme aquesta acció.",
+ "translate-smg-nochanges": "No hi ha canvis per processar.",
+ "translate-smg-submit": "Penja els canvis per al seu processament",
+ "translate-smg-submitted": "Les definicions dels missatges s'han actualitzat. Els canvis estàn sent processats al rerefons.",
+ "translate-smg-more": "Hi haurà més canvis per processar després d'enviar aquests canvis.",
+ "translate-smg-left": "Contingut del missatge al wiki",
+ "translate-smg-right": "Canvis entrants",
+ "translate-smg-rename-select": "Selecciona",
+ "translate-smg-rename-cancel": "Cancel·la",
+ "translate-smg-rename-search": "Cerca un missatge coincident...",
+ "translate-smg-rename-select-err": "Selecciona un missatge per a ser rebatejat",
+ "translate-smg-rename-no-msg": "No s'ha trobat cap missatge.",
+ "translate-smg-rename-new": "Afegeix com a nou...",
+ "translate-smg-rename-rename": "Afegeix com a nou nom de...",
+ "translate-smg-rename-dialog-title": "Selecciona un rebateig coincident per a $1",
+ "translate-smg-changeset-modified": "Un altre usuari o procés ha modificat aquest conjunt de canvis. Els vostres canvis no es poden desar perquè eliminaria els canvis de l'altre usuari. Recarregueu la pàgina per a veure els darrers canvis.",
+ "translate-manage-import-diff": "Missatge $1 | Accions: $2",
+ "translate-manage-import-new": "Nou missatge $1",
+ "translate-manage-import-deleted": "Missatge eliminat $1",
+ "translate-manage-action-import": "Importa",
+ "translate-manage-action-conflict": "Importar i marcar per revisar",
+ "translate-manage-action-ignore": "Ignora",
+ "translate-manage-action-fuzzy": "Importa i marca per revisar les traduccions",
+ "translate-manage-action-rename-fuzzy": "Rebateja i traduccions ambigües",
+ "translate-manage-action-rename": "Canvia el nom",
+ "translate-manage-action-ignore-change": "Ignora el canvi en la traducció",
+ "translate-manage-nochanges": "No hi ha canvis en les definicions dels missatges per a aquest grup.",
+ "translate-manage-nochanges-other": "No hi han canvis en aquest idioma.\n\nUtilitzeu l'enllaç de sota per tornar als detalls del grup.",
+ "translate-manage-inconsistent": "Detectada una inconsistència en la \nsol· licitud.\nSiusplau comproveu els canvis i proveu-ho una altra vegada.\nDetalls: $1 .",
+ "translate-manage-toolong": "El temps màxim de processament de $1 s'ha excedit {{PLURAL:$1|segon|segons}} \nSiusplau reintroduiu el formulari per continuar el processament.",
+ "translate-manage-import-summary": "Important una nova versió des d'una font externa",
+ "translate-manage-import-rename-summary": "Rebatejat en font externa",
+ "translate-manage-conflict-summary": "Important una nova versió des d'una font externa.\nSiusplau, comproveu-ho.",
+ "translate-manage-submit": "Executa",
+ "translate-manage-intro-other": "A continuació hi ha una llista de canvis de traducció en la llengua $1.\nReviseu els canvis i trieu una acció que voleu realitzar en cada actualització.\nSi trieu ignorar els canvis, l'acció només serà temporal.",
+ "translate-manage-import-ok": "Importat: $1",
+ "translate-manage-import-done": "S'ha completat la importació!",
+ "importtranslations": "Importa traduccions",
+ "translate-import-from-local": "Càrrega de fitxer local:",
+ "translate-import-load": "Carrega fitxer",
+ "translate-import-err-dl-failed": "No s'ha pogut obtenir el fitxer:\n$1",
+ "translate-import-err-ul-failed": "Ha fallat la càrrega de fitxer",
+ "translate-import-err-invalid-title": "El nom del fitxer <nowiki>$1</nowiki> no és vàlid.",
+ "translate-import-err-no-such-file": "El fitxer <nowiki>$1</nowiki>no existeix o no s'ha carregat localment.",
+ "translate-import-err-stale-group": "El grup de missatges al qual aquest fitxer pertany no existeix.",
+ "translate-import-err-no-headers": "Aquest no és un fitxer Gettext ben formatat en el format d’extensió del Translate:\n\nNo s’ha pogut determinar el grup de missatges i l’idioma des dels encapçalaments.",
+ "translate-js-support-unsaved-warning": "Teniu traduccions no desades.",
+ "translate-gs-pos": "Pos.",
+ "translate-gs-code": "Codi",
+ "translate-gs-continent": "Continent",
+ "translate-gs-speakers": "Parlants",
+ "translate-gs-score": "Puntuació",
+ "translate-gs-multiple": "Diversos",
+ "translate-gs-count": "Recompte",
+ "translate-gs-total": "Total",
+ "translate-gs-avgscore": "Puntuació mitjana",
+ "translate-documentation-language": "Documentació del missatge",
+ "translate-searchprofile": "Traduccions",
+ "translate-searchprofile-tooltip": "Cerca a totes les traduccions",
+ "translate-searchprofile-note": "Hi ha més opcions de cerca disponibles a la [$1 cerca de traduccions].",
+ "translate-search-languagefilter": "Filtra per idioma:",
+ "translate-search-nofilter": "Sense filtrat",
+ "log-name-translationreview": "Historial de revisió de la traducció",
+ "log-description-translationreview": "Historial de totes les revisions a les traduccions i als grups de missatges.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|ha acceptat}} la traducció $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|ha canviat}} l'estat de $4 traduccions de $3 des de $6 fins a $7",
+ "group-translate-sandboxed": "Traduccions no aprovades",
+ "group-translate-sandboxed-member": "{{GENDER:$1|no ha aprovat una traducció}}",
+ "right-translate-sandboxmanage": "Administrar els usuaris en mode sandbox",
+ "action-translate-sandboxmanage": "administrar els usuaris en mode sandbox",
+ "right-translate-sandboxaction": "Executa les accions permeses per als usuaris de la zona de proves.",
+ "action-translate-sandboxaction": "executa les accions permeses per als usuaris a la zona de proves",
+ "translate-workflow-state-": "(no especificat)",
+ "translate-workflowstatus": "Estat: $1",
+ "translate-workflow-set-doing": "Especificant...",
+ "translate-workflow-autocreated-summary": "Creació automàtica d'una pàgina per l'estat del flux de treball $1",
+ "translate-stats-workflow": "Estat",
+ "translate-workflowgroup-label": "Estats dels fluxs de treball",
+ "translate-dynagroup-recent-label": "Traduccions recents",
+ "translate-dynagroup-recent-desc": "Aquest grup de missatges mostra totes les traduccions recents a aquest idioma.\nEl més útil per a les tasques de revisió.",
+ "translate-dynagroup-additions-label": "Addicions recents",
+ "translate-dynagroup-additions-desc": "Aquest grup de missatges mostra els missatges nous i els que han estat canviats",
+ "translate-msggroupselector-projects": "Grup de missatges",
+ "translate-msggroupselector-search-placeholder": "Cerca als grups",
+ "translate-msggroupselector-search-all": "Tots",
+ "translate-msggroupselector-search-recent": "Recents",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|subgrup|subgrups}}",
+ "tux-languageselector": "Tradueix a",
+ "tux-tab-all": "Tots",
+ "tux-tab-untranslated": "Sense traduir",
+ "tux-tab-outdated": "Desfasat",
+ "tux-tab-translated": "Traduït",
+ "tux-tab-unproofread": "no revisat",
+ "tux-edit": "Edita",
+ "tux-status-optional": "Opcional",
+ "tux-status-fuzzy": "Desfasat",
+ "tux-status-proofread": "Revisat",
+ "tux-status-translated": "Traduït",
+ "tux-status-saving": "Publicant…",
+ "tux-status-unsaved": "No publicat",
+ "tux-save-unknown-error": "S'ha produït un error desconegut.",
+ "tux-editor-editsummary-placeholder": "Resum opcional",
+ "tux-editor-paste-original-button-label": "Enganxa el text original",
+ "tux-editor-discard-changes-button-label": "Descarta els canvis",
+ "tux-editor-save-button-label": "Publica la traducció",
+ "tux-editor-skip-button-label": "Vés al següent",
+ "tux-editor-cancel-button-label": "Cancel·la",
+ "tux-editor-confirm-button-label": "Confirma la traducció",
+ "tux-editor-proofread-button-label": "Marca com a revisada",
+ "tux-editor-shortcut-info": "Premeu «$1» per confirmar i anar al missatge següent, «$2» per ometre, «$4» per proporcionar un resum o «$3» per mantenir altres dreceres.",
+ "tux-editor-edit-desc": "Edita la documentació",
+ "tux-editor-add-desc": "Afegiu documentació",
+ "tux-editor-suggestions-title": "Suggeriments",
+ "tux-editor-in-other-languages": "En altres idiomes",
+ "tux-editor-need-more-help": "Necessiteu més ajuda?",
+ "tux-editor-ask-help": "Demaneu més informació",
+ "tux-editor-tm-match": "coincidència del $1%",
+ "tux-notices-more": "{{PLURAL:$1|$1 més}}",
+ "tux-notices-hide": "amaga",
+ "tux-editor-save-failed": "Error en publicar la traducció : $1",
+ "tux-editor-n-uses": "utilitzat $1 {{PLURAL:$1|vegada|vegades}}",
+ "tux-editor-message-desc-more": "Mostra'n més",
+ "tux-editor-message-desc-less": "Mostra'n menys",
+ "tux-editor-clear-translated": "Amaga els traduïts",
+ "tux-editor-proofreading-mode": "Revisió",
+ "tux-editor-translate-mode": "Llista",
+ "tux-editor-proofreading-hide-own-translations": "Amaga les meves traduccions",
+ "tux-editor-proofreading-show-own-translations": "Mostrar les meves traduccions",
+ "tux-proofread-action-tooltip": "Marca-ho com a revisat",
+ "tux-proofread-edit-label": "Edita-ho",
+ "tux-editor-page-mode": "Pàgina",
+ "tux-editor-outdated-notice": "Aquesta traducció potser necessita ser actualitzada.",
+ "tux-editor-outdated-notice-diff-link": "Mostra les diferències",
+ "tux-editor-doc-editor-placeholder": "Documetació del missatge",
+ "tux-editor-doc-editor-save": "Publica la documentació",
+ "tux-editor-doc-editor-cancel": "Cancel·la",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|missatge|missatges}} més",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|S’està carregant el missatge|S’estan carregant els missatges}}…",
+ "tux-message-filter-placeholder": "Filtra la llista",
+ "tux-message-filter-result": "Hem trobat $1 {{PLURAL:$1|resultat|resultats}} per «$2»",
+ "tux-message-filter-advanced-button": "Cerca avançada",
+ "tux-message-filter-optional-messages-label": "Missatges opcionals",
+ "tux-proofread-translated-by-self": "Traduït per tu",
+ "tux-empty-list-all": "Aquest grup de missatges és buit",
+ "tux-empty-list-all-guide": "Seleccioneu un grup de missatges diferent per traduir",
+ "tux-translate-page-no-such-group": "<strong>El grup indicat no existeix\".</strong> Seleccioneu un grup de missatges diferent.",
+ "tux-empty-list-translated": "Missatges no traduïts",
+ "tux-empty-list-translated-guide": "Podeu ajudar a traduir",
+ "tux-empty-list-translated-action": "Tradueix",
+ "tux-empty-no-messages-to-display": "No hi ha missatges a mostrar.",
+ "tux-empty-there-are-optional": "Hi ha missatges opcionals que no es mostren a la llista",
+ "tux-empty-show-optional-messages": "Mostra els missatges opcionals",
+ "tux-empty-no-outdated-messages": "No hi han missatges desfasats",
+ "tux-empty-nothing-to-proofread": "Res a revisar",
+ "tux-empty-you-can-help-providing": "Podeu ajudar enviant noves traduccions",
+ "tux-empty-nothing-new-to-proofread": "Res nou a revisar",
+ "tux-empty-you-can-review-already-proofread": "Podeu revisar les traduccions revisades per altres.",
+ "tux-empty-list-other": "Res a traduir",
+ "tux-empty-list-other-guide": "Podeu ajudar revisant traduccions existents",
+ "tux-empty-list-other-action": "Revisa les traduccions",
+ "tux-empty-list-other-link": "Mostra tots els missatges",
+ "tux-editor-close-tooltip": "Tanca",
+ "tux-editor-expand-tooltip": "Amplia",
+ "tux-editor-collapse-tooltip": "Tanca",
+ "tux-editor-message-tools-show-editor": "Mostra en l'editor wiki",
+ "tux-editor-message-tools-history": "Historial",
+ "tux-editor-message-tools-delete": "Suprimeix",
+ "tux-editor-message-tools-translations": "Totes les traduccions",
+ "tux-editor-message-tools-linktothis": "Enllaç a aquest missatge",
+ "tux-editor-loading": "S'està carregant…",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|idioma|idiomes}} més",
+ "translate-statsbar-tooltip": "$1% traduït, $2% revisat",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% traduït, $2 % revisat, $3% desfasat",
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|grup|grups}} més",
+ "translate-syntax-error": "La traducció conté errors de sintaxi",
+ "tux-session-expired": "Jo no teniu la sessió iniciada. Inicieu la sessió en una altra pestanya. Alternativament, feu una còpia de les traduccions no desades, inicieu la sessió, torneu a la pàgina i torneu a introduir les traduccions.",
+ "tux-nojs": "Aquesta eina no funciona sense JavaScript. El JavaScript està inhabilitat, no funciona o el navegador no el permet.",
+ "specialpages-group-translation": "Traducció"
+}
diff --git a/Translate/i18n/core/cak.json b/Translate/i18n/core/cak.json
new file mode 100644
index 00000000..b78954d4
--- /dev/null
+++ b/Translate/i18n/core/cak.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chocoj"
+ ]
+ },
+ "translate-documentation-language": "Ruwujil ri taqom"
+}
diff --git a/Translate/i18n/core/cdo.json b/Translate/i18n/core/cdo.json
new file mode 100644
index 00000000..b39bb1e3
--- /dev/null
+++ b/Translate/i18n/core/cdo.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Davidzdh",
+ "唐吉訶德的侍從"
+ ]
+ },
+ "translate-pref-editassistlang-help": "使逗號來分隔語言代碼。敆汝翻譯其辰候,會同時顯示茲幾隻語言其訊息。 預設會使汝其語言。",
+ "translate-documentation-language": "Séng-sék suók-mìng-cṳ̄"
+}
diff --git a/Translate/i18n/core/ce.json b/Translate/i18n/core/ce.json
new file mode 100644
index 00000000..161a367f
--- /dev/null
+++ b/Translate/i18n/core/ce.json
@@ -0,0 +1,293 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sasan700",
+ "Исмаил Садуев",
+ "Умар"
+ ]
+ },
+ "translate": "Гоч",
+ "translate-extensionname": "Гочйан",
+ "translate-desc": "[[Special:Translate|Белхан агӀо]] MediaWiki гочйан а, кхин программийн а",
+ "translate-taskui-export-to-file": "Шин форматехь экспорт",
+ "translate-taskui-export-as-po": "Оффлайн гочдаран экспорт",
+ "translate-taction-translate": "Гоч",
+ "translate-taction-proofread": "Таллар",
+ "translate-taction-lstats": "Меттан статистика",
+ "translate-taction-mstats": "Тобанийн хаамийн статистика",
+ "translate-taction-export": "Экспорт",
+ "translate-taction-disabled": "ХӀара дешдерг хӀокху вики чохь дӀадайана ду.",
+ "translate-page-no-such-language": "Меттан код нийса йац",
+ "translate-page-no-such-group": "Тоба нийса билгалйина йац.",
+ "translate-page-disabled": "ХӀокху декъан чохь хӀокху меттан гочдарш дӀадайана ду. Бахьана:\n\n<em>$1</em>",
+ "translate-language-disabled": "ХӀокху матте гочйан йиш дӀайайина.",
+ "translate-page-settings-legend": "Параметраш",
+ "translate-page-group": "Тоба",
+ "translate-page-language": "Мотт",
+ "translate-page-limit": "Доза тохар",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|хаам}} агӀонга",
+ "translate-submit": "Арайаккха",
+ "translate-page-navigation-legend": "Навигаци",
+ "translate-page-showing": "Гайтина хаамаш $1 тӀера $2 кхаччалц ($3 чуьра).",
+ "translate-page-showing-all": "Ара баьккхина $1 {{PLURAL:$1|хаам}}.",
+ "translate-page-showing-none": "Гайта хаамаш бац.",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "рогӀера агӀо",
+ "translate-prev": "хьалхара агӀо",
+ "translate-page-description-legend": "Тобанах хаам",
+ "translate-page-description-hasoptional-open": "Кхин тӀе хаамаш гайта.",
+ "translate-page-edit": "хийца",
+ "translate-optional": "(тӀехь дац)",
+ "translate-ignored": "(игнорирян)",
+ "translate-edit-title": "Хийца «$1»",
+ "translate-edit-definition": "Хаам кепе балор",
+ "translate-edit-contribute": "нисйе",
+ "translate-edit-information": "Хаамах лаьцна ($1)",
+ "translate-edit-warnings": "ДӀахаийтар кхочуш гоч йин ца хилар",
+ "translate-edit-tmmatch": "$1% цхьаьнадогӀуш",
+ "translate-edit-askpermission": "Бакъо йаккха",
+ "exporttranslations": "Гочдарийн экспорт",
+ "translate-export-form-format": "Формат",
+ "translate-checks-parameters": "{{PLURAL:$2|1=Параметр лелош йац|Параметраш лелош йац}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|1=Йевзаш йоцу параметр|Йевзаш йоцу параметраш}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "Елла а, дӀакъовла а {{PLURAL:$2|къовларш}} нийса йац:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|1=Хьалхара хьажорго халонаш йо|Хьалхара хьажоргаш халонаш йо}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|$2 хьажоргаш йац}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Оригинал чохь лелош йу <nowiki>{{PLURAL:}}</nowiki>, кхузахь — йац.",
+ "translate-checks-plural-dupe": "МогӀан йуьхьигехь <nowiki>{{PLURAL:}}</nowiki> цхьатерра шиъ дош ду, <nowiki>{{PLURAL:$1|пальто|пальто}} меттан</nowiki> <nowiki>{{PLURAL:$1|пальто}} йаздича дика ду</nowiki>.",
+ "translate-pref-editassistlang": "ГӀоьнан меттанаш:",
+ "prefs-translate": "Гочдаран нисдар",
+ "translate-pref-editassistlang-help": "Меттанийн кодаш йазйан йеза йукъахь цӀоьмалг йазйеш. Хаамаш гочбечу хенахь оцу матташкахь долу гочдарш гойтура ду. Меттанаш билгалбина бацахь, хьан матте хьаьжина гойтура ду гочдар.",
+ "right-translate-manage": "Хаамийн тобанийн урхалладар",
+ "action-translate-manage": "хаамийн тобанийн урхалладар",
+ "translate-rcfilters-translations": "Гочдарш",
+ "translate-rcfilters-translations-only-label": "Гочдарш",
+ "translate-rcfilters-translations-filter-label": "Гочдарш дац",
+ "translate-rcfilters-translations-filter-desc": "Гочдарш доцу, массо хийцамаш.",
+ "translate-rcfilters-translations-site-label": "Сайтан хаам",
+ "translate-rcfilters-translations-site-desc": "Сайтан хаамийн кастомизаци MediaWiki цӀерийн меттигехь.",
+ "translate-rc-translation-filter": "Литта гочдарш:",
+ "translate-rc-translation-filter-no": "Доза доцуш",
+ "translate-rc-translation-filter-only": "Гочдарш бен ма гайта",
+ "translate-rc-translation-filter-filter": "Къайладаха гочдарш",
+ "translate-rc-translation-filter-site": "Сайтан системин хаамаш бен",
+ "translationstats": "Гочдаран статистика",
+ "translate-stats-edits": "Нисдарш",
+ "translate-stats-users": "Гочдархой",
+ "translate-stats-registrations": "ДӀаязбалар",
+ "translate-stats-reviews": "Талларш",
+ "translate-stats-reviewers": "Рецензенташ",
+ "translate-statsf-intro": "ХӀокху кепо шуна гӀо-дира ду бӀегӀийла график кхолла. Массо маьӀана кхолла мега лакхара а, лахара а доза.",
+ "translate-statsf-options": "Графика нисйар",
+ "translate-statsf-width": "Пикселшках шоралла:",
+ "translate-statsf-height": "Локхалла пикселшкахь:",
+ "translate-statsf-days": "Хан деношкахь:",
+ "translate-statsf-start": "Йолайелла хан:",
+ "translate-statsf-scale": "Детализацин барам:",
+ "translate-statsf-scale-months": "Беттанаш",
+ "translate-statsf-scale-weeks": "КӀиранаш",
+ "translate-statsf-scale-days": "Денош",
+ "translate-statsf-scale-hours": "Сахьташ",
+ "translate-statsf-count": "Дустар",
+ "translate-statsf-count-edits": "Нисдарийн дукхалла",
+ "translate-statsf-count-users": "Болх беш болу гочдархой",
+ "translate-statsf-count-registrations": "Керла декъашхой",
+ "translate-statsf-count-reviews": "Гочдаре хьажар",
+ "translate-statsf-count-reviewers": "Хьажархой",
+ "translate-statsf-submit": "Хьалххе хьажар",
+ "translate-tag-page-desc": "Вики-агӀонаш гочйар [[$2|$1]] с $3 ($4).",
+ "translate-sidebar-alltrans": "Кхечу меттанашкахь",
+ "translations": "Массо а гочдарш",
+ "translations-summary": "Лело луш долу гочдарш гучудаха йазйе хааман цӀе.",
+ "translate-translations-no-message": "«$1» гочбан луш хаам бац",
+ "translate-translations-none": "Гочдарш дац «$1»",
+ "translate-translations-count": "{{PLURAL:$1|1=Карина $1 гочдар|Карина $1 гочдарш}}.",
+ "translate-translations-fieldset-title": "Хаам",
+ "translate-translations-messagename": "ЦӀе:",
+ "translate-translations-project": "Проект:",
+ "languagestats": "Меттан статистика",
+ "languagestats-summary": "ХӀокху агӀонехь йу гочдаран статистика, хӀокху меттан массо тобанийн чуьра хаамашна.",
+ "messagegroupstats-summary": "ХӀокху агӀонгахь гойту хаамийн тобанийн статистика.",
+ "languagestats-stats-for": "Нохчийн меттан гочдаран статистика ($2).",
+ "languagestats-recenttranslations": "дукха хан йоццуш гоч динарш",
+ "translate-langstats-incomplete": "ХӀокху агӀонехь цхьа йолу статистикин хаамаш йерриге гайтина йац. Йерриге хилийта карлайаккха агӀо.",
+ "translate-langstats-expand": "схьаелла",
+ "translate-langstats-collapse": "къайлайаккха",
+ "translate-langstats-expandall": "схьайелла йерриге",
+ "translate-langstats-collapseall": "къайлайаха йерриге",
+ "translate-language-code": "Метта код",
+ "translate-language-code-field-name": "Метта код:",
+ "translate-suppress-complete": "Ма гайта йуьззина гочйина хаамийн тобанаш",
+ "translate-ls-noempty": "Ма гайта йуьззина гочйанза хаамийн тобанаш",
+ "translate-language": "Мотт",
+ "translate-total": "Хаам",
+ "translate-untranslated": "Гочйанзарш",
+ "translate-percentage-complete": "Кхочушдина",
+ "translate-percentage-fuzzy": "Ширйелларш",
+ "translate-percentage-proofread": "Теллинарш",
+ "translate-languagestats-overall": "Йерриге тобанийн хаамаш",
+ "translate-ls-submit": "Гайта статистика",
+ "translate-ls-column-group": "Хаамийн тоба",
+ "translate-mgs-pagename": "Тобанийн хаамийн статистика",
+ "translate-mgs-fieldset": "Гайта гӀирс нисбарш",
+ "translate-mgs-group": "Хаамийн тоба:",
+ "translate-mgs-nocomplete": "Гочдина даьлла меттанаш ма гайта",
+ "translate-mgs-noempty": "Гочдар хӀинца а долина доцу меттанаш ма гайта",
+ "translate-mgs-submit": "Гайта статистика",
+ "translate-mgs-column-language": "Мотт",
+ "translate-mgs-totals": "Берриге меттанаш",
+ "translate-mgs-nothing": "Гучубаха хаамаш бац.",
+ "supportedlanguages": "Ловш долу меттанаш",
+ "supportedlanguages-portallink": "[$1] $2 — $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-sqlite-error": "SQLite ловш йац",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Гочдархо}}|Гочдархой}}: $1",
+ "supportedlanguages-recenttranslations": "дукха хан йоццуш гоч динарш",
+ "supportedlanguages-count": "Бериг $1 {{PLURAL:$1|мотт}}",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|нисдар}} — тӀаьххьара нисдар $3 {{PLURAL:$3|де}} хьалха",
+ "translate-jssti-add": "ТӀетоха могӀан чу",
+ "managemessagegroups": "Хаамийн тобанийн урхалладар",
+ "translate-smg-notallowed": "Дешдерг дан хьона цало.",
+ "translate-smg-nochanges": "Кечбан хийцамаш бац.",
+ "translate-smg-submit": "ДӀабахьийта хийцамаш кечбан",
+ "translate-smg-left": "Викин хааман чулацам",
+ "translate-smg-rename-select": "Харжа",
+ "translate-smg-rename-cancel": "Йухайаккха",
+ "translate-smg-rename-no-msg": "Хаамаш цакарий.",
+ "translate-smg-rename-new": "ТӀетоха керланиг санна…",
+ "translate-smg-rename-rename": "ТӀетоха цӀе хийцинарг санна...",
+ "translate-smg-strong-sync-help": "ГӀо",
+ "translate-manage-import-new": "Керла хаам $1",
+ "translate-manage-action-import": "Импорт йан",
+ "translate-manage-action-ignore": "Тергал ца дан",
+ "translate-manage-action-rename": "ЦӀе хийца",
+ "translate-manage-submit": "Кхочушдé",
+ "translate-manage-import-ok": "Импортйина: $1",
+ "translate-manage-import-done": "Импортйина йаьлла!",
+ "importtranslations": "Гочдарийн импорт",
+ "translate-import-from-local": "Чуйаккха локалан файл:",
+ "translate-import-load": "Файл чуйаккхар",
+ "translate-import-err-dl-failed": "Цатарло чуйаккха файл:\n$1",
+ "translate-import-err-ul-failed": "Цатарло чуйаккха файл",
+ "translate-import-err-invalid-title": "Билгалйина файлан цӀе <nowiki>$1</nowiki> нийса йац.",
+ "translate-import-err-no-such-file": "Файл <nowiki>$1</nowiki> йац, йа локалан чуйаьккхина йац.",
+ "translate-js-support-unsaved-warning": "Ӏалашданза гочдарш ду.",
+ "translate-gs-pos": "Поз.",
+ "translate-gs-code": "Код",
+ "translate-gs-continent": "Дуьнена дакъа",
+ "translate-gs-speakers": "Лелораш",
+ "translate-gs-score": "Мах хадор",
+ "translate-gs-multiple": "Масех",
+ "translate-gs-count": "Дукхалла",
+ "translate-gs-total": "Йерриге",
+ "translate-gs-avgscore": "Йукъ. мах хадор",
+ "translate-documentation-language": "Хаамийн документаци",
+ "translate-searchprofile": "Гочдинарш",
+ "translate-searchprofile-tooltip": "Массо гочдарш чохь лахар",
+ "translate-search-languagefilter": "Меттаца луьттург:",
+ "translate-search-nofilter": "Литтар доцуш",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|хийцина}} «$3» агӀонан гочдар $4 мотт «$6» → «$7»",
+ "group-translate-sandboxed": "ЧӀагӀбина гочдархой",
+ "translate-workflow-state-": "(яздина дац)",
+ "translate-workflowstatus": "Статус: $1",
+ "translate-workflow-set-doing": "ДӀахӀоттош йу...",
+ "translate-stats-workflow": "Статус",
+ "translate-workflowgroup-label": "Процессан статус",
+ "translate-dynagroup-recent-label": "Дукха хан йоццуш гоч динарш",
+ "translate-dynagroup-recent-desc": "ХӀокху тобан чохь гучу йолу дукха хан йоцуш гочйина хӀокху меттан хаамаш.\n\nХӀара дӀахӀоттам пайдане бу хьажа.",
+ "translate-dynagroup-additions-label": "Дукху хан йоцуш тӀетоьхнарш",
+ "translate-dynagroup-additions-desc": "ХӀокху тобано гойту керла а, хийцам бина а хаамаш.",
+ "translate-msggroupselector-projects": "Хаамийн тоба",
+ "translate-msggroupselector-search-placeholder": "Тобанаш лахар",
+ "translate-msggroupselector-search-all": "Массо",
+ "translate-msggroupselector-search-recent": "Дукху хан йоцуш",
+ "translate-msggroupselector-view-subprojects": "{{PLURAL:$1|1=Цхьаъ бухара тоба|$1 бухара тобанаш}}",
+ "tux-languageselector": "Гочдар тӀе",
+ "tux-tab-all": "Массо",
+ "tux-tab-untranslated": "Гочйанзарш",
+ "tux-tab-outdated": "Ширйелларш",
+ "tux-tab-translated": "Гочйинарш",
+ "tux-tab-unproofread": "Талланзарш",
+ "tux-edit": "Нисдар",
+ "tux-status-optional": "ТӀехь дац",
+ "tux-status-fuzzy": "Ширйелла",
+ "tux-status-proofread": "Таллар",
+ "tux-status-translated": "Гочйина",
+ "tux-status-saving": "Публикаци…",
+ "tux-status-unsaved": "Ӏалашцайина",
+ "tux-editor-placeholder-language": "Хьан гочдар $1 маттахь",
+ "tux-editor-editsummary-placeholder": "ТӀехьйоцу коммент",
+ "tux-editor-paste-original-button-label": "Дилла дӀадолалун йоза",
+ "tux-editor-discard-changes-button-label": "Цаоьшу хийцамаш",
+ "tux-editor-save-button-label": "Ӏалашде гочдинарг",
+ "tux-editor-skip-button-label": "РогӀера",
+ "tux-editor-cancel-button-label": "Цаоьшу",
+ "tux-editor-confirm-button-label": "Бакъде гочдар",
+ "tux-editor-shortcut-info": "ТӀетаӀае «$1» Ӏалашйан йа «$2» тӀетаӀа йай дехьагӀо.",
+ "tux-editor-edit-desc": "Хийца документаци",
+ "tux-editor-add-desc": "ТӀетоха документаци",
+ "tux-editor-suggestions-title": "ДӀаалар",
+ "tux-editor-latest-updates-title": "ТӀаьххьара карлайаккхар",
+ "tux-editor-changes-without-summary": "хийцамах лаьцна хаам боцуш $1 {{PLURAL:$1|карлайаккхар}}",
+ "tux-editor-in-other-languages": "Кхечу меттанашкахь",
+ "tux-editor-need-more-help": "ГӀо оьшу?",
+ "tux-editor-ask-help": "Деха кхин тӀедиллинарг",
+ "tux-editor-tm-match": "$1% цхьаьнадогӀуш",
+ "tux-notices-more": "{{PLURAL:$1|кхин $1}}",
+ "tux-notices-hide": "къайлайаккха",
+ "tux-editor-save-failed": "Ӏалашйан цаделира: $1",
+ "tux-editor-n-uses": "{{PLURAL:$1|лелина}} $1",
+ "tux-editor-message-desc-more": "Гайта мадарра",
+ "tux-editor-message-desc-less": "Гайта компактан",
+ "tux-editor-clear-translated": "Къайлайаха гочйинарш",
+ "tux-editor-proofreading-mode": "Таллар",
+ "tux-editor-translate-mode": "МогӀа",
+ "tux-editor-proofreading-hide-own-translations": "Шен гочдарш къайладаха",
+ "tux-editor-proofreading-show-own-translations": "Шен гочдарш гайта",
+ "tux-proofread-action-tooltip": "Теллина санна билгалйе",
+ "tux-proofread-edit-label": "Хийцам бе",
+ "tux-editor-page-mode": "АгӀо",
+ "tux-editor-outdated-notice": "ХӀара гочдар карладаккха дезаш хила мега.",
+ "tux-editor-outdated-notice-diff-link": "Схьагайта башхаллонаш",
+ "tux-editor-doc-editor-placeholder": "хаамийн документаци",
+ "tux-editor-doc-editor-save": "Ӏалашйе документаци",
+ "tux-editor-doc-editor-cancel": "Цаоьшу",
+ "tux-messagetable-more-messages": "Кхин $1 {{PLURAL:$1|хаам|хаамаш}}",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|1=Гучу бокхуш бу хаам|Гучу бохуш бу хаамаш}}...",
+ "tux-message-filter-placeholder": "Литта могӀа",
+ "tux-message-filter-result": "Дахарца «$2» {{PLURAL:$1|карина}} $1 {{PLURAL:$1|хилам}}",
+ "tux-message-filter-advanced-button": "Шуьйра лахар",
+ "tux-message-filter-optional-messages-label": "Кхин тӀе хаамаш",
+ "tux-proofread-translated-by-self": "Ахьа гочйина",
+ "tux-empty-list-all": "ХӀара хаамийн тоба йаьсса йу",
+ "tux-empty-list-all-guide": "Гочйан харжа кхин хаамийн тоба",
+ "tux-translate-page-no-such-group": "<strong>Билгалйина тоба йац.</strong> Харжа кхин хаамийн тоба.",
+ "tux-empty-list-translated": "Гочбина хаамаш бац",
+ "tux-empty-list-translated-guide": "Хьуна гочйина гӀода лур ду",
+ "tux-empty-list-translated-action": "Гочйе",
+ "tux-empty-no-messages-to-display": "Гайта хаамаш бац.",
+ "tux-empty-there-are-optional": "МогӀам чохь гуш боцу кхин тӀе хаамаш бу",
+ "tux-empty-show-optional-messages": "Кхин тӀе хаамаш гайта",
+ "tux-empty-no-outdated-messages": "Шира белла хаамаш бац",
+ "tux-empty-nothing-to-proofread": "ХӀума йац талла йезаш",
+ "tux-empty-you-can-help-providing": "Хьан йиш йу гӀо дан хаамаш гочбина",
+ "tux-empty-nothing-new-to-proofread": "Керла хӀума йац, талла йезаш",
+ "tux-empty-you-can-review-already-proofread": "Хьан йиш йу цхьам гочйинарш йуха хьажа.",
+ "tux-empty-list-other": "ХӀума дац гочдан",
+ "tux-empty-list-other-guide": "Хьан йиш йу долуш долу гочдаршка хьажа",
+ "tux-empty-list-other-action": "Гочдиначарга хьажар",
+ "tux-empty-list-other-link": "Гайта берриге хаамаш",
+ "tux-editor-close-tooltip": "ДӀачӀагӀа",
+ "tux-editor-expand-tooltip": "Схьайаста",
+ "tux-editor-collapse-tooltip": "ДӀахьарчо",
+ "tux-editor-message-tools-show-editor": "Вики-йоза редактор тӀе гӀо",
+ "tux-editor-message-tools-history": "Истори",
+ "tux-editor-message-tools-delete": "ДӀайаккха",
+ "tux-editor-message-tools-translations": "Массо а гочдарш",
+ "tux-editor-message-tools-linktothis": "ХӀокху хаамна тӀе хьажорг",
+ "tux-editor-loading": "Чуйолуш…",
+ "translate-search-more-languages-info": "кхин $1 {{PLURAL:$1|мотт|меттанаш}}",
+ "translate-statsbar-tooltip": "$1% гочйинарш, $2% хьаьжнаш",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% гочйинарш, $2% хьаьжнаш, $3% шираеларш",
+ "translate-search-more-groups-info": "кхин $1 {{PLURAL:$1|тоба}}"
+}
diff --git a/Translate/i18n/core/ceb.json b/Translate/i18n/core/ceb.json
new file mode 100644
index 00000000..75cf5303
--- /dev/null
+++ b/Translate/i18n/core/ceb.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "BaRaN6161 TURK",
+ "Bentong Isles"
+ ]
+ },
+ "translate-taction-translate": "Gihubad",
+ "translate-documentation-language": "Tabang sa paghubad"
+}
diff --git a/Translate/i18n/core/ch.json b/Translate/i18n/core/ch.json
new file mode 100644
index 00000000..5265eaed
--- /dev/null
+++ b/Translate/i18n/core/ch.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gadao01",
+ "Jatrobat"
+ ]
+ },
+ "translate-page-navigation-legend": "Nabegasion"
+}
diff --git a/Translate/i18n/core/ckb.json b/Translate/i18n/core/ckb.json
new file mode 100644
index 00000000..57834332
--- /dev/null
+++ b/Translate/i18n/core/ckb.json
@@ -0,0 +1,259 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aram",
+ "Asoxor",
+ "Calak",
+ "Cwtiyar",
+ "Lost Whispers",
+ "Marmzok",
+ "Muhammed taha",
+ "Roj im",
+ "Sarchia",
+ "Épine",
+ "ئارام بکر",
+ "رزگار"
+ ]
+ },
+ "translate": "وەرگێڕان",
+ "translate-extensionname": "وەرگێڕان",
+ "translate-desc": "[[Special:Translate|پەڕەی تایبەت]] بۆ وەرگێڕانی میدیاویکی و ئەولاتر",
+ "translate-taction-translate": "وەری بگێڕەوە",
+ "translate-taction-proofread": "پێداچوونەوە",
+ "translate-taction-lstats": "ئامارەکانی زمان",
+ "translate-taction-mstats": "ئامارەکانی گرووپی پەیام",
+ "translate-taction-export": "ھەناردەی بکە",
+ "translate-page-settings-legend": "ڕێکخستنەکان",
+ "translate-page-group": "گرووپ",
+ "translate-page-language": "زمان",
+ "translate-page-limit": "سنوور",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|پەیام}} لە ھەر پەڕەیەکدا",
+ "translate-submit": "ھێنان",
+ "translate-page-navigation-legend": "ڕێدۆزی",
+ "translate-page-showing": "نیشاندانی پەیامەکانی $1 تا $2 لە کۆی $3.",
+ "translate-page-showing-all": "نیشاندانی $1 {{PLURAL:$1|پەیام|پەیام}}.",
+ "translate-page-showing-none": "ھیچ پەیامێک بۆ نیشاندان نییە",
+ "translate-next": "پەڕەی دواتر",
+ "translate-prev": "پەڕەی پێشوو",
+ "translate-page-description-legend": "زانیاری سەبارەت بە گرووپەکە",
+ "translate-page-description-hasoptional-open": "پەیامە دڵخوازانەکان نیشان بدە.",
+ "translate-page-edit": "دەستکاریی بکە",
+ "translate-optional": "(دڵخوازانه‌)",
+ "translate-ignored": "(فەرامۆشکراو)",
+ "translate-edit-title": "«$1» دەستکاری بکە",
+ "translate-edit-definition": "پێناسەی پەیام",
+ "translate-edit-contribute": "بەشداری بکە",
+ "translate-edit-information": "زانیاری سەبارت بە پەیام ($1)",
+ "translate-edit-warnings": "ئاگادارییەکان سەبارەت بە وەرگێڕانی ناتەواو",
+ "translate-edit-tmmatch": "$1% یەکسانی",
+ "translate-edit-askpermission": "ڕێپێدان وەرگرە",
+ "exporttranslations": "وەرگێرانەکان ھەناردە بکە",
+ "translate-checks-parameters": "ئەم {{PLURAL:$2|پارامەترە بەکارنەھێنراوە|پارامەترانە بەکارنەھێنراون}} :\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "ئەم {{PLURAL:$2|پارامەترە نەناسراوە|پارامەترانە نەناسراون}} :\n<strong>$1</strong>",
+ "prefs-translate": "هەڵبژاردەکانی وەرگێڕان",
+ "right-translate": "دەستکاری کردن بە کەڵک وەرگرتن لە ڕووکاری وەرگێڕانەوە",
+ "right-translate-import": "وەرگێڕانە دەرھێڵەکان ھاوردە بکە",
+ "action-translate-import": "وەرگێڕانە دەرھێڵەکان ھاوردە بکە",
+ "right-translate-messagereview": "پێداچوونەوە بۆ وەرگێڕانەکان بکە",
+ "translate-rcfilters-translations": "وەرگێڕانەکان",
+ "translate-rcfilters-translations-only-label": "وەرگێڕانەکان",
+ "translate-rc-translation-filter": "پاڵاوتنی وەرگێڕاوەکان:",
+ "translate-rc-translation-filter-no": "ھیچ مەکە",
+ "translate-rc-translation-filter-only": "ھەر وەرگێڕاوەکان نیشان بدە",
+ "translationstats": "ئاماری وەرگێڕان",
+ "translate-stats-edits": "دەستکاریەکان",
+ "translate-stats-users": "وەرگێڕەکان",
+ "translate-stats-registrations": "ناونووسکردنەکان",
+ "translate-stats-reviews": "پیاچوونەوەکان",
+ "translate-stats-reviewers": "پیاچوونەوەکارەکان",
+ "translate-statsf-options": "بژاردەکانی ھێڵکاری",
+ "translate-statsf-start": "ڕێکەوتی دەستپێکردن:",
+ "translate-statsf-scale-months": "مانگ",
+ "translate-statsf-scale-weeks": "ھەفتە",
+ "translate-statsf-scale-days": "ڕۆژ",
+ "translate-statsf-scale-hours": "کاتژمێر",
+ "translate-statsf-count": "پێوانە:",
+ "translate-statsf-count-edits": "ژمارەی دەستکارییەکان",
+ "translate-statsf-count-users": "وەرگێڕە چالاکەکان",
+ "translate-statsf-count-registrations": "بەکارھێنەرە نوێکان",
+ "translate-statsf-count-reviews": "پیاچوونەوەکانی وەرگێڕان",
+ "translate-statsf-count-reviewers": "پیاچوونەوەکارەکان",
+ "translate-statsf-submit": "پێشبینین",
+ "translate-sidebar-alltrans": "لە زمانەکانی تردا",
+ "translations": "هەموو وەرگێرانەکان",
+ "translate-translations-fieldset-title": "پەیام",
+ "translate-translations-messagename": "ناو:",
+ "translate-translations-project": "پرۆژە:",
+ "translate-translations-history-short": "م",
+ "languagestats": "ئامارەکانی زمان",
+ "languagestats-recenttranslations": "دوایین وەرگێڕانەکان",
+ "translate-langstats-expand": "بڵاویبکەوە",
+ "translate-langstats-collapse": "کۆیبکەوە",
+ "translate-langstats-expandall": "هەمووی بڵاوبکەوە",
+ "translate-langstats-collapseall": "هەمووی کۆبکەوە",
+ "translate-language-code": "کۆدی زمان",
+ "translate-language-code-field-name": "کۆدی زمان:",
+ "translate-language": "زمان",
+ "translate-total": "پەیامەکان",
+ "translate-untranslated": "وەرنەگێڕراو",
+ "translate-percentage-complete": "تەواوکراو",
+ "translate-percentage-fuzzy": "کۆن",
+ "translate-percentage-proofread": "پێداچوونەوە بۆ کراو",
+ "translate-languagestats-overall": "گشت گرووپی پەیامەکان بەیەکەوە",
+ "translate-ls-submit": "ئامارەکان پیشانبدە",
+ "translate-ls-column-group": "پەیامی گرووپ",
+ "translate-mgs-pagename": "ئامارەکانی گرووپی پەیام",
+ "translate-mgs-fieldset": "ھەڵبژاردەکانی پیشاندان",
+ "translate-mgs-group": "پەیامی گرووپ:",
+ "translate-mgs-nocomplete": "ئەو زمانانەی کە وەرگێڕانیان تەواو بووە پیشان مەدە",
+ "translate-mgs-submit": "ئامارەکان پیشانبدە",
+ "translate-mgs-column-language": "زمان",
+ "translate-mgs-totals": "ھەر $1 {{PLURAL:$1|زمانەکە}} بەیەکەوە",
+ "supportedlanguages": "زمانە چالاکەکان",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|وەرگێڕ}}|وەرگێڕەکان}}: $1",
+ "supportedlanguages-recenttranslations": "دوایین وەرگێڕانەکان",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|زمان|زمانەکان}} بەگشتی.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|دەستکاری}} - دوایین دەستکاری $3 {{PLURAL:$3|ڕۆژ}} لەمە پێش",
+ "translate-jssti-add": "زیادکردن بۆ سەر لیست",
+ "translate-smg-rename-select": "ھەڵبژێرە",
+ "translate-smg-rename-cancel": "ھەڵوەشاندنەوە",
+ "translate-smg-rename-search": "گەڕان بۆ گونجاندنی پەیام...",
+ "translate-smg-rename-select-err": "تکایە پەیامێک دیاری بکە تا دووبارە ناوی لێ بنێیتەوە",
+ "translate-smg-rename-no-msg": "ھیچ پەیامێک نەدۆزرایەوە.",
+ "translate-smg-rename-new": "وەک نوێ زیاد بکە...",
+ "translate-smg-strong-sync-help": "یارمەتی",
+ "translate-smg-group-message-action-history": "مێژوو",
+ "translate-smg-group-action-resolve": "وەک چارەسەرکراو نیشانی بدە",
+ "translate-smg-group-message-tag-outdated": "کۆن",
+ "translate-smg-group-message-tag-rename": "ناونانەوە",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|تاگ}}:",
+ "translate-smg-group-message-message-content": "ناوەڕۆک:",
+ "translate-smg-group-message-message-target": "مەبەست:",
+ "translate-smg-group-message-message-other-langs": "زمانەکانی تر:",
+ "translate-smg-loading": "بارکردن...",
+ "translate-manage-import-diff": "پەیام $1 | کردارەکان: $2",
+ "translate-manage-import-new": "پەیامی نوێ $1",
+ "translate-manage-import-deleted": "پەیامی $1 سڕدراوەتەوە",
+ "translate-manage-action-import": "هاوردن",
+ "translate-manage-action-ignore": "فەرامۆشکردن",
+ "translate-manage-action-rename": "ناونانەوە",
+ "translate-manage-import-ok": "ھاوردەکراو: $1",
+ "translate-manage-import-done": "ھاوردەکردن تەواو!",
+ "translate-manage-empty-content": "ناوەڕۆک بەتاڵە",
+ "translate-manage-source-message-not-found": "وەسفی پەیام نەدۆزرایەوە",
+ "importtranslations": "وەرگێرانەکان ھاوردە بکە",
+ "translate-js-support-unsaved-warning": "وەرگێڕانی بڵاونەکراوت ھەیە.",
+ "translate-gs-pos": "شوێن",
+ "translate-gs-code": "کۆد",
+ "translate-gs-continent": "کیشوەر",
+ "translate-gs-speakers": "قسەکەرەکان",
+ "translate-gs-score": "خاڵ",
+ "translate-gs-multiple": "جیاجیا",
+ "translate-gs-total": "سەرجەم",
+ "translate-gs-avgscore": "تێکڕای خاڵ",
+ "translate-documentation-language": "پەیامی بەڵگەنامە",
+ "translate-searchprofile": "وەرگێڕانەکان",
+ "translate-searchprofile-tooltip": "لە ھەموو وەرگێڕانەکانەوە بگەڕێ",
+ "translate-search-languagefilter": "پاڵێوەر بەپێی زمان:",
+ "translate-search-nofilter": "بێ پاڵاوتن",
+ "log-name-translationreview": "لۆگی پێداچوونەوەی وەرگێڕان",
+ "group-translate-sandboxed": "وەرگێڕە پەسەندنەکراوەکان",
+ "group-translate-sandboxed-member": "{{GENDER:$1|وەرگێڕی پەسەندنەکراو}}",
+ "translate-workflowstatus": "ڕەوش: $1",
+ "translate-workflow-set-doing": "ڕێکخستن...",
+ "translate-stats-workflow": "ڕەوش",
+ "translate-dynagroup-recent-label": "دوایین وەرگێڕانەکان",
+ "translate-dynagroup-additions-label": "دوایین زیادکردنەکان",
+ "translate-msggroupselector-projects": "پەیامی گرووپ",
+ "translate-msggroupselector-search-placeholder": "گرووپەکان بگەڕێ",
+ "translate-msggroupselector-search-all": "ھەموو",
+ "translate-msggroupselector-search-recent": "دوایین",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|ژێرگرووپ|ژێرگرووپەکان}}",
+ "tux-languageselector": "وەرگێڕان بۆ",
+ "tux-select-target-language": "زمانی مەبەست بۆ وەرگێڕان",
+ "tux-tab-all": "ھەموو",
+ "tux-tab-untranslated": "وەرنەگێڕراو",
+ "tux-tab-outdated": "کۆن",
+ "tux-tab-translated": "وەرگێڕدراو",
+ "tux-tab-unproofread": "پێداچوونەوە بۆ نەکراو",
+ "tux-edit": "دەستکاری",
+ "tux-status-optional": "ئارەزوومەندانە",
+ "tux-status-fuzzy": "کۆن",
+ "tux-status-proofread": "پێداچوونەوە بۆ کراو",
+ "tux-status-translated": "وەرگێڕدراو",
+ "tux-status-saving": "خەریکە بڵاو دەکرێتەوە...",
+ "tux-status-unsaved": "بڵاونەکراوە",
+ "tux-save-unknown-error": "ھەڵەیەکی نەزانراو ڕووی دا.",
+ "tux-editor-placeholder-documentation": "بەڵگەنامەی پەیام زیاد بکە",
+ "tux-editor-placeholder-language": "وەرگێڕانەکەت بە $1",
+ "tux-editor-editsummary-placeholder": "کورتەی ئارەزوومەندانە",
+ "tux-editor-paste-original-button-label": "دەقی بنەڕەتی دابنێ",
+ "tux-editor-discard-changes-button-label": "دەستبەرداری گۆڕانکارییەکان ببە",
+ "tux-editor-save-button-label": "وەرگێڕانەکە بڵاو بکەرەوە",
+ "tux-editor-skip-button-label": "باز بدە بۆ دواتر",
+ "tux-editor-cancel-button-label": "ھەڵوەشاندنەوە",
+ "tux-editor-confirm-button-label": "وەرگێڕانەکە پشتڕاست بکەرەوە",
+ "tux-editor-proofread-button-label": "وەک پێداچوونەوە بۆ کراو دیاریی بکە",
+ "tux-editor-edit-desc": "بەڵگەنامە دەستکاری بکە",
+ "tux-editor-add-desc": "بەڵگەنامە زیاد بکە",
+ "tux-editor-suggestions-title": "پێشنیارەکان",
+ "tux-editor-in-other-languages": "بە زمانەکانی تر",
+ "tux-editor-need-more-help": "یارمەتیی زیاترت پێویستە؟",
+ "tux-editor-ask-help": "داوای زنیاریی زیاتر بکە",
+ "tux-editor-tm-match": "$1٪ دەگونجێ",
+ "tux-notices-more": "{{PLURAL:$1|$1 زیاتر}}",
+ "tux-notices-hide": "بیشارەوە",
+ "tux-editor-save-failed": "بڵاوکردنەوەی وەرگێڕانەکە شکستی ھێنا: $1",
+ "tux-editor-n-uses": "$1 {{PLURAL:$1|جار}} بەکارھاتووە",
+ "tux-editor-message-desc-more": "زیاتر ببینە",
+ "tux-editor-message-desc-less": "کەمتر ببینە",
+ "tux-editor-clear-translated": "شاردنەوەی وەرگێڕدراوەکان",
+ "tux-editor-proofreading-mode": "پێداچوونەوە",
+ "tux-editor-translate-mode": "پێرست",
+ "tux-editor-proofreading-hide-own-translations": "وەرگێڕانەکانت بشارەوە",
+ "tux-editor-proofreading-show-own-translations": "وەرگێڕانەکانت نیشان بدە",
+ "tux-proofread-action-tooltip": "وەک پێداچوونەوە بۆ کراو دیاریی بکە",
+ "tux-proofread-edit-label": "دەستکاری",
+ "tux-editor-page-mode": "پەڕە",
+ "tux-editor-outdated-notice": "لەوانەیە پێویست بێت ئەم وەرگێڕانە نوێ بکرێتەوە.",
+ "tux-editor-outdated-notice-diff-link": "جیاوازییەکان نیشان بدە",
+ "tux-editor-doc-editor-placeholder": "بەڵگەنامەی پەیام",
+ "tux-editor-doc-editor-save": "بەڵگەنامە بڵاوبکەرەوە",
+ "tux-editor-doc-editor-cancel": "ھەڵوەشاندنەوە",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|پەیام}}ی زیاتر",
+ "tux-messagetable-loading-messages": "بارکردنی {{PLURAL:$1|پەیام|پەیامەکان}}...",
+ "tux-message-filter-placeholder": "پێڕستی پاڵێوەر",
+ "tux-message-filter-result": "$1 {{PLURAL:$1|ئاکام}} دۆزرایەوە بۆ «$2»",
+ "tux-message-filter-advanced-button": "گەڕانی پێشکەوتوو",
+ "tux-message-filter-optional-messages-label": "پەیامە ئارەزوومەندانەکان",
+ "tux-proofread-translated-by-self": "لەلایەن تۆ وەرگێڕدراوە",
+ "tux-empty-list-all": "ئەم گرووپی پەیامە بەتاڵە",
+ "tux-empty-list-translated": "پەیامە وەرنەگێڕدراوەکان",
+ "tux-empty-list-translated-guide": "دەتوانی یارمەتیی وەرگێڕان بدەیت",
+ "tux-empty-list-translated-action": "وەرگێڕان",
+ "tux-empty-no-messages-to-display": "ھیچ پەیامێک نییە تا پیشان بدرێت.",
+ "tux-empty-show-optional-messages": "پەیامە ئارەزوومەندانەکان نیشان بدە",
+ "tux-empty-no-outdated-messages": "ھیچ پەیامێکی کۆن نییە",
+ "tux-empty-nothing-to-proofread": "ھیچ بۆ پێداچوونەوە نییە",
+ "tux-empty-nothing-new-to-proofread": "ھیچی نوێ بۆ پێداچوونەوە نییە",
+ "tux-empty-list-other": "ھیچ نییە بۆ وەرگێڕان",
+ "tux-empty-list-other-guide": "دەتوانیت بە پێداچوونەوەی پەیامە وەرگێڕدراوەکان ھاوکاری بکەیت.",
+ "tux-empty-list-other-action": "پێداچوونەوە بۆ وەرگێڕانەکان بکە",
+ "tux-empty-list-other-link": "گشت پەیامەکان نیشان بدە",
+ "tux-editor-close-tooltip": "دایخە",
+ "tux-editor-expand-tooltip": "بڵاویبکەوە",
+ "tux-editor-collapse-tooltip": "کۆیبکەوە",
+ "tux-editor-message-tools-show-editor": "لە دەستکاریکەری ویکی پیشانی بدە",
+ "tux-editor-message-tools-history": "مێژوو",
+ "tux-editor-message-tools-delete": "سڕینەوە",
+ "tux-editor-message-tools-translations": "هەموو وەرگێرانەکان",
+ "tux-editor-loading": "باركردن‌ ...",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|زمان}}ی تر",
+ "translate-statsbar-tooltip": "$1% وەرگێڕدراوە, $2% پێداجوونەوەی بۆ کراوە",
+ "translate-statsbar-tooltip-with-fuzzy": "$1٪ وەرگێڕدراو، $2٪ پێداچوونەوە بۆ کراو، $3٪ کۆن",
+ "specialpages-group-translation": "وەرگێڕان",
+ "translate-messagebundle-error-key-too-long": "کلیلی «$1» زۆر درێژە",
+ "translate-messagebundle-error-key-invalid-characters": "کلیلی «$1» نووسەی ڕێپێنەدراوی تێدایە",
+ "translate-messagebundle-error-invalid-value": "کلیلی «$1» نرخی سترینگی تێدا نییە",
+ "translate-messagebundle-error-empty-value": "کلیلی «$1» ھیچ نرخێکی نییە"
+}
diff --git a/Translate/i18n/core/cnr-latn.json b/Translate/i18n/core/cnr-latn.json
new file mode 100644
index 00000000..6e588934
--- /dev/null
+++ b/Translate/i18n/core/cnr-latn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bellatrix10"
+ ]
+ },
+ "translate-documentation-language": "Dokumentacija poruke"
+}
diff --git a/Translate/i18n/core/cop.json b/Translate/i18n/core/cop.json
new file mode 100644
index 00000000..14ca883f
--- /dev/null
+++ b/Translate/i18n/core/cop.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bloomaround"
+ ]
+ },
+ "translate-documentation-language": "ⲗⲁϫⲱⲙ ⲛ̀ⲟⲩⲱ"
+}
diff --git a/Translate/i18n/core/cpx.json b/Translate/i18n/core/cpx.json
new file mode 100644
index 00000000..5c427b2c
--- /dev/null
+++ b/Translate/i18n/core/cpx.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kahin He"
+ ]
+ },
+ "translate-documentation-language": "信息说明书"
+}
diff --git a/Translate/i18n/core/crh-latn.json b/Translate/i18n/core/crh-latn.json
new file mode 100644
index 00000000..de61583a
--- /dev/null
+++ b/Translate/i18n/core/crh-latn.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "TayfunEt."
+ ]
+ },
+ "translate-page-settings-legend": "Sazlamalar",
+ "translate-page-language": "Til",
+ "translate-next": "Soñraki saife",
+ "translate-prev": "Evelki saife",
+ "translate-documentation-language": "Beyanat belgeleri",
+ "tux-editor-translate-mode": "Cedvel",
+ "tux-editor-page-mode": "Saife"
+}
diff --git a/Translate/i18n/core/cs.json b/Translate/i18n/core/cs.json
new file mode 100644
index 00000000..a920a405
--- /dev/null
+++ b/Translate/i18n/core/cs.json
@@ -0,0 +1,351 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chmee2",
+ "Clon",
+ "Danny B.",
+ "Draceane",
+ "Dvorapa",
+ "Fraxinus.cs",
+ "Ilimanaq29",
+ "Li-sung",
+ "Littledogboy",
+ "Marek Pavlica",
+ "Martin Urbanec",
+ "Matěj Grabovský",
+ "Matěj Suchánek",
+ "Mormegil",
+ "Utar",
+ "Vks"
+ ]
+ },
+ "translate": "Překládání",
+ "translate-desc": "[[Special:Translate|Speciální stránka]] zjednodušující překládání systémových hlášení MediaWiki",
+ "translate-fuzzybot-desc": "Toto je speciální systémový účet používaný [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate rozšířením MediaWiki pro překlady], používaný pro údržbu překladů.\nTento účet je součástí softwaru MediaWiki a nepatří žádnému uživateli.",
+ "translate-taskui-export-to-file": "Exportovat v nativním formátu",
+ "translate-taskui-export-as-po": "Exportovat pro off-line překlad",
+ "translate-taction-translate": "Překlad",
+ "translate-taction-proofread": "Zkontrolovat",
+ "translate-taction-lstats": "Jazykové statistiky",
+ "translate-taction-mstats": "Statistika skupin zpráv",
+ "translate-taction-export": "Export",
+ "translate-taction-disabled": "Tato akce je na této wiki zakázána.",
+ "translate-page-no-such-language": "Zadaný jazyk není platný.",
+ "translate-page-no-such-group": "Zadaná skupina byla neplatná.",
+ "translate-page-disabled": "Překlady do tohoto jazyka byly v této skupině zakázány. Zdůvodnění:\n\n<em>$1</em>",
+ "translate-language-disabled": "Překlad do tohoto jazyka je zakázán.",
+ "translate-page-settings-legend": "Nastavení",
+ "translate-page-group": "skupina",
+ "translate-page-language": "Jazyk",
+ "translate-page-limit": "s&nbsp;omezením",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|zpráva|zprávy|zpráv}} na stránce",
+ "translate-submit": "Ukázat",
+ "translate-page-navigation-legend": "Navigace",
+ "translate-page-showing": "Zobrazeny zprávy $1 až $2 z $3.",
+ "translate-page-showing-all": "{{PLURAL:$1|Zobrazena $1 zpráva|Zobrazeny $1 zprávy|Zobrazeno $1 zpráv}}.",
+ "translate-page-showing-none": "Požadavku neodpovídají žádné zprávy.",
+ "translate-next": "Další stránka",
+ "translate-prev": "Předchozí stránka",
+ "translate-page-description-legend": "Informace o skupině",
+ "translate-page-description-hasoptional": "Tato skupina zpráv obsahuje volitelné zprávy.\nVolitelné zprávy se mají překládat, pouze pokud má váš jazyk zvláštní potřeby\njako nepoužívání mezer nebo transkripce vlastních jmen. $1",
+ "translate-page-description-hasoptional-open": "Zobrazit volitelné zprávy.",
+ "translate-page-edit": "editovat",
+ "translate-optional": "(volitelné)",
+ "translate-ignored": "(ignorované)",
+ "translate-edit-title": "Editovat „$1“",
+ "translate-edit-definition": "Zdroj zprávy",
+ "translate-edit-contribute": "přispět",
+ "translate-edit-no-information": "<em>K této zprávě není dokumentace. Pokud víte, kde nebo jak se zpráva používá, můžete pomoci dalším překladatelům tím, že přidáte dokumentaci k této zprávě.</em>",
+ "translate-edit-information": "Informace o zprávě ($1)",
+ "translate-edit-warnings": "Upozornění na neúplný překlad",
+ "translate-edit-tmmatch-source": "Zdrojový text překladu: $1",
+ "translate-edit-tmmatch": "$1% shoda",
+ "translate-edit-nopermission": "K překládání zpráv potřebujete překladatelská práva.",
+ "translate-edit-askpermission": "Získat oprávnění",
+ "exporttranslations": "Exportovat překlady",
+ "translate-export-form-format": "Formát",
+ "translate-export-invalid-format": "Prosím, specifikujte platný formát.",
+ "translate-export-not-supported": "Export překladů není podporován.",
+ "translate-export-format-notsupported": "Specifikovaný formát není podporovaný touto skupinou zpráv.",
+ "translate-checks-parameters": "Následující {{PLURAL:$2|parametr není použit|parametry nejsou použity}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "Následující {{PLURAL:$2|parametr není definován|parametry nejsou definovány}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "Následující {{PLURAL:$2|typ závorek není správně spárován|typy závorek nejsou správně spárovány}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "Následující {{PLURAL:$2|odkaz je problematický|odkazy jsou problematické}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Následující odkaz|Následující $2 odkazy|Následujících $2 odkazů}} chybí:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Zdroj používá <nowiki>{{PLURAL:}}</nowiki>, ale překlad nikoliv.",
+ "translate-checks-plural-forms": "Do <nowiki>{{PLURAL:}}</nowiki> {{PLURAL:$1|byla vložena jedna varianta|byly vloženy $1 varianty|bylo vloženo $1 variant}}, ale {{PLURAL:$2|podporována je pouze jedna|podporovány jsou pouze $2|podporováno je pouze $2}} (kromě variant 0= a 1=).",
+ "translate-checks-plural-dupe": "Na konci <nowiki>{{PLURAL:}}</nowiki> jsou uvedeny duplicitní varianty. Místo <nowiki>{{PLURAL:$1|náměstí|náměstí|náměstí}}</nowiki> má být zadáno jen <nowiki>{{PLURAL:$1|náměstí}}</nowiki>.",
+ "translate-checks-pagename": "Oproti definici se změnil jmenný prostor",
+ "translate-checks-format": "Tento překlad neodpovídá definici nebo má neplatnou syntaxi: $1",
+ "translate-checks-escape": "Následující escape {{PLURAL:$2|znak možná nebyl zamýšlen|znaky možná nebyly zamýšleny}}: <strong>$1</strong>. {{PLURAL:$4|Platným escape znakem je|Platnými escape znaky jsou:}} $3.",
+ "translate-checks-parametersnotequal": "Počet parametrů je {{PLURAL:$1|$1}}; měl by být {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> má nesprávný formát.",
+ "translate-checks-fudforum-syntax": "V tomto projektu musíte namísto <nowiki>$2</nowiki> používat <nowiki>$1</nowiki>.",
+ "translate-pref-editassistlang": "Pomocné jazyky:",
+ "prefs-translate": "Nastavení pro překládání",
+ "translate-pref-editassistlang-help": "Seznam kódů jazyků oddělených čárkami.\nPřeklady zvolené zprávy do těchto jazyků jsou zobrazeny při překládání.\nImplicitní seznam (''default'') závisí na vašem jazyce.",
+ "translate-pref-editassistlang-bad": "Seznam obsahuje neplatný kód jazyka:\n<nowiki>$1</nowiki>",
+ "right-translate": "Editace překladu pomocí rozhraní ''Přeložit''",
+ "right-translate-manage": "Správa skupin zpráv",
+ "action-translate-manage": "spravovat skupiny zpráv",
+ "right-translate-import": "Importování offline překladů",
+ "action-translate-import": "importovat offline překlady",
+ "right-translate-messagereview": "Hodnocení překladů",
+ "right-translate-groupreview": "Změna stavu zpracování skupin zpráv",
+ "translate-rcfilters-translations": "Překlady",
+ "translate-rcfilters-translations-only-label": "Překlady",
+ "translate-rcfilters-translations-only-desc": "Změny překládaných stránek.",
+ "translate-rcfilters-translations-filter-label": "Bez překladů",
+ "translate-rcfilters-translations-filter-desc": "Všechny změny, které nejsou překlady.",
+ "translate-rcfilters-translations-site-label": "Systémová hlášení",
+ "translate-rcfilters-translations-site-desc": "Úpravy systémových hlášení ve jmenném prostoru MediaWiki.",
+ "translate-rc-translation-filter": "Filtr překladů:",
+ "translate-rc-translation-filter-no": "Nijak nefiltrovat",
+ "translate-rc-translation-filter-only": "Zobrazit jen překlady",
+ "translate-rc-translation-filter-filter": "Nezobrazovat překlady",
+ "translate-rc-translation-filter-site": "Pouze změny zdejších místních hlášení",
+ "translationstats": "Statistika překladů",
+ "translate-stats-edits": "Úpravy",
+ "translate-stats-users": "Překladatelé",
+ "translate-stats-registrations": "Registrace",
+ "translate-stats-reviews": "Hodnocení",
+ "translate-stats-reviewers": "Hodnotitelé",
+ "translate-statsf-intro": "Pomocí tohoto formuláře můžete tvořit jednoduché statistiky. Všechny hodnoty mají horní a spodní hranici.",
+ "translate-statsf-options": "Možnosti grafu",
+ "translate-statsf-width": "Šířka v pixelech:",
+ "translate-statsf-height": "Výška v pixelech:",
+ "translate-statsf-days": "Počáteční datum:",
+ "translate-statsf-start": "Počáteční datum:",
+ "translate-statsf-scale": "Měřítko:",
+ "translate-statsf-scale-months": "Měsíce",
+ "translate-statsf-scale-weeks": "Týdny",
+ "translate-statsf-scale-days": "Dny",
+ "translate-statsf-scale-hours": "Hodiny",
+ "translate-statsf-count": "Rozsah:",
+ "translate-statsf-count-edits": "Počet editací",
+ "translate-statsf-count-users": "Aktivní překladatelé",
+ "translate-statsf-count-registrations": "Noví uživatelé",
+ "translate-statsf-count-reviews": "Hodnocení překladů",
+ "translate-statsf-count-reviewers": "Hodnotitelé",
+ "translate-statsf-language": "Čárkami oddělený seznam kódu jazyků:",
+ "translate-statsf-group": "Čárkami oddělený seznam kódů skupin:",
+ "translate-statsf-submit": "Náhled",
+ "translate-tag-page-desc": "Překlad wiki stránky [[$2|$1]] z jazyka $3 ($4).",
+ "translate-sidebar-alltrans": "V jiných jazycích",
+ "translations": "Všechny překlady",
+ "translations-summary": "Všechny dostupné překlady zobrazíte po zadání názvu zprávy.",
+ "translate-translations-no-message": "Nelze překládat zprávu „$1“",
+ "translate-translations-none": "Neexistují žádné překlady zprávy „$1“",
+ "translate-translations-count": "{{PLURAL:$1|Nalezen jeden překlad|Nalezeny $1 překlady|Nalezeno $1 překladů}}.",
+ "translate-translations-fieldset-title": "Zpráva",
+ "translate-translations-messagename": "Název:",
+ "translate-translations-project": "Projekt:",
+ "translate-translations-including-no-param": "V parametru musíte určit platný název zprávy",
+ "translate-translations-history-short": "h",
+ "languagestats": "Jazykové statistiky",
+ "languagestats-summary": "Tato stránka zobrazuje statistiku překladů všech skupin zpráv v daném jazyce.",
+ "messagegroupstats-summary": "Tato zpráva zobrazuje statistiky skupin zpráv.",
+ "languagestats-stats-for": "Statistiky překladů pro jazyk $1 ($2).",
+ "languagestats-recenttranslations": "nedávné překlady",
+ "translate-langstats-incomplete": "Některé statistiky na této stránce jsou neúplné. Více údajů získáte obnovením stránky.",
+ "translate-langstats-expand": "rozbalit",
+ "translate-langstats-collapse": "sbalit",
+ "translate-langstats-expandall": "rozbalit vše",
+ "translate-langstats-collapseall": "sbalit vše",
+ "translate-language-code": "Kód jazyka",
+ "translate-language-code-field-name": "Kód jazyka:",
+ "translate-suppress-complete": "Skrýt úplně přeložené skupiny zpráv",
+ "translate-ls-noempty": "Skrýt úplně nepřeložené skupiny zpráv",
+ "translate-language": "Jazyk",
+ "translate-total": "Zprávy",
+ "translate-untranslated": "Nepřeložené",
+ "translate-percentage-complete": "Dokončené",
+ "translate-percentage-fuzzy": "Zastaralé",
+ "translate-percentage-proofread": "Zkontrolované",
+ "translate-languagestats-overall": "Všechny skupiny zpráv dohromady",
+ "translate-ls-submit": "Zobrazit statistiky",
+ "translate-ls-column-group": "Skupina zpráv",
+ "translate-mgs-pagename": "Statistiky skupin zpráv",
+ "translate-mgs-fieldset": "Volby zobrazení",
+ "translate-mgs-group": "Skupina zpráv:",
+ "translate-mgs-nocomplete": "Nezobrazovat jazyky s úplným překladem",
+ "translate-mgs-noempty": "Nezobrazovat jazyky neobsahující žádný překlad",
+ "translate-mgs-submit": "Zobrazit statistiky",
+ "translate-mgs-column-language": "Jazyk",
+ "translate-mgs-totals": "{{PLURAL:$1|Celkem jediný jazyk|Všechny $1 jazyky dohromady|Všech $1 jazyků dohromady|2=Oba dva jazyky dohromady}}",
+ "translate-mgs-invalid-group": "Zadaná skupina $1 neexistuje.",
+ "translate-mgs-nothing": "U požadovaných statistik není co zobrazit.",
+ "supportedlanguages": "Aktivní jazyky",
+ "supportedlanguages-summary": "Na této stránce se nachází seznam všech aktivních jazyků na {{grammar:6sg|{{SITENAME}}}}\nspolu se jmény překladatelů, kteří na jazyku pracují.\nČím více editací překladatel poskytnul, tím větší se jeho jméno zobrazuje.\nBarva podtržení znázorňuje, jak nedávno zde byl překladatel aktivní.",
+ "supportedlanguages-colorlegend": "Legenda k barvám: Poslední překlad před $1 dny.",
+ "supportedlanguages-portallink": "[$1] $2 – $3",
+ "supportedlanguages-sqlite-error": "SQLite není podporován",
+ "supportedlanguages-postgres-error": "PostgreSQL není podporován",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Překladatel|Překladatelka}}|Překladatelé}}: $1",
+ "supportedlanguages-recenttranslations": "nedávné překlady",
+ "supportedlanguages-count": "Celkem $1 {{PLURAL:$1|jazyk|jazyky|jazyků}}.",
+ "supportedlanguages-activity": "$1: $2 editace – poslední editace před $3 {{PLURAL:$3|dnem|dny}}",
+ "abusefilter-edit-builder-vars-translate-source-text": "Zdrojový text překladové jednotky",
+ "translate-jssti-add": "Přidat do seznamu",
+ "managemessagegroups": "Správa skupin zpráv",
+ "translate-smg-notallowed": "Nemáte právo provést tuto akci.",
+ "translate-smg-nochanges": "Neexistují žádné změny ke zpracování.",
+ "translate-smg-submit": "Odeslat změny ke zpracování",
+ "translate-smg-submitted": "Definice zpráv byly aktualizovány. Změny se zpracovávají na pozadí.",
+ "translate-smg-more": "Po odeslání těchto změn budou ještě další změny ke zpracování.",
+ "translate-smg-left": "Obsah zprávy ve wiki",
+ "translate-smg-right": "Příchozí změny",
+ "translate-manage-import-diff": "Zpráva $1 | Akce: $2",
+ "translate-manage-import-new": "Nová zpráva $1",
+ "translate-manage-import-deleted": "Odstraněná zpráva $1",
+ "translate-manage-action-import": "Importovat",
+ "translate-manage-action-conflict": "Naimportovat a označit jako „fuzzy“",
+ "translate-manage-action-ignore": "Ignorovat",
+ "translate-manage-action-fuzzy": "Importovat a označit překlady jako neúplné",
+ "translate-manage-nochanges": "V definici zpráv této skupiny nenastaly žádné změny.",
+ "translate-manage-nochanges-other": "Nebyly provedeny žádné změny pro tento jazyk.\nPomocí dole uvedeného odkazu se vrátíte na zobrazení Podrobnosti o skupině.",
+ "translate-manage-inconsistent": "Zjištěny nekonzistence v požadavku.\nProsím, zkontrolujte změny a zkuste to znovu.\nPodrobnosti: $1.",
+ "translate-manage-toolong": "Překročen maximální čas zpracování $1 {{PLURAL:$1|sekunda|sekundy|sekund}}.\nPro pokračování odešlete formulář ještě jednou.",
+ "translate-manage-import-summary": "Importuje se nová verze z vnějšího zdroje",
+ "translate-manage-conflict-summary": "Importuje se nová verze z vnějšího zdroje.\nProsím, zkontrolujte ji.",
+ "translate-manage-submit": "Provést",
+ "translate-manage-intro-other": "Níže je zobrazen seznam změn v překladech do jazyka $1.\nZkontrolujte změny a vyberte si, co se má pro každou aktualizaci provést.\nPokud se rozhodnete změny ignorovat, je tato akce pouze dočasná.",
+ "translate-manage-import-ok": "Naimportováno: $1",
+ "translate-manage-import-done": "Import dokončen!",
+ "importtranslations": "Import překladů",
+ "translate-import-from-local": "Načtení lokálního souboru:",
+ "translate-import-load": "Načíst soubor",
+ "translate-import-err-dl-failed": "Nepodařilo se načíst soubor:\n$1",
+ "translate-import-err-ul-failed": "Nahrávání souboru selhalo",
+ "translate-import-err-invalid-title": "Zadané jméno souboru <nowiki>$1</nowiki> není platné.",
+ "translate-import-err-no-such-file": "Soubor <nowiki>$1</nowiki> neexistuje nebo nebyl načten lokálně.",
+ "translate-import-err-stale-group": "Skupina zpráv, do které tento soubor patří, neexistuje.",
+ "translate-import-err-no-headers": "Soubor není platným souborem ve formátu Gettext pro rozšíření Translate:\nZ hlaviček souboru se nepodařilo skupinu zpráv a jazyk.",
+ "translate-js-support-unsaved-warning": "Máte nezveřejněné překlady.",
+ "translate-gs-pos": "Poř.",
+ "translate-gs-code": "Kód",
+ "translate-gs-continent": "Světadíl",
+ "translate-gs-speakers": "Mluvčích",
+ "translate-gs-score": "Skóre",
+ "translate-gs-multiple": "Vícero",
+ "translate-gs-count": "Počet",
+ "translate-gs-total": "Celkem",
+ "translate-gs-avgscore": "Prům. skóre",
+ "translate-documentation-language": "dokumentace k hlášením",
+ "translate-searchprofile": "Překlady",
+ "translate-searchprofile-tooltip": "Hledat ve všech překladech",
+ "translate-searchprofile-note": "Více možností vyhledávání je dostupné na [$1 hledání překladů].",
+ "translate-search-languagefilter": "Filtr podle jazyka:",
+ "translate-search-nofilter": "Nefiltrovat",
+ "log-name-translationreview": "Kniha hodnocení překladů",
+ "log-description-translationreview": "Protokol všech hodnocení překladů a skupin zpráv.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|zkontroloval|zkontrolovala}} překlad $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|změnil|změnila}} stav překladů stránky $3 do jazyka $4 z $6 na $7",
+ "group-translate-sandboxed": "Neschválení překladatelé",
+ "group-translate-sandboxed-member": "{{GENDER:$1|neschválený překladatel|neschválená překladatelka}}",
+ "translate-workflow-state-": "(nenastaven)",
+ "translate-workflowstatus": "Stav: $1",
+ "translate-workflow-set-doing": "Nastavuje se…",
+ "translate-stats-workflow": "Stav",
+ "translate-workflowgroup-label": "Stavy zpracování",
+ "translate-workflowgroup-desc": "Tato skupina zpráv obsahuje stavy zpracování překladů.\nStavy jsou definovány v konfigurační proměnné $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Nedávné překlady",
+ "translate-dynagroup-recent-desc": "Tato skupina zpráv zobrazuje všechny nedávné překlady do tohoto jazyka.\nUžitečné hlavně pro korektury.",
+ "translate-dynagroup-additions-label": "Nedávné přírůstky",
+ "translate-dynagroup-additions-desc": "Tato skupina zpráv zobrazuje nové a změněné zprávy.",
+ "translate-msggroupselector-projects": "Skupina zpráv",
+ "translate-msggroupselector-search-placeholder": "Hledání skupiny",
+ "translate-msggroupselector-search-all": "Všechno",
+ "translate-msggroupselector-search-recent": "Nedávné",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|podskupina|podskupiny|podskupin}}",
+ "tux-languageselector": "Překlad do jazyka",
+ "tux-tab-all": "Všechno",
+ "tux-tab-untranslated": "Nepřeložené",
+ "tux-tab-outdated": "Zastaralé",
+ "tux-tab-translated": "Přeložené",
+ "tux-tab-unproofread": "Nezkontrolované",
+ "tux-edit": "Editovat",
+ "tux-status-optional": "Volitelná",
+ "tux-status-fuzzy": "Zastaralý",
+ "tux-status-proofread": "Zkontrolovaná",
+ "tux-status-translated": "Přeložená",
+ "tux-status-saving": "Zveřejňuje se…",
+ "tux-status-unsaved": "Nezveřejněno",
+ "tux-save-unknown-error": "Došlo k neznámé chybě.",
+ "tux-editor-editsummary-placeholder": "Nepovinné shrnutí",
+ "tux-editor-paste-original-button-label": "Vložit zdrojový text",
+ "tux-editor-discard-changes-button-label": "Zahodit změny",
+ "tux-editor-save-button-label": "Zveřejnit překlad",
+ "tux-editor-skip-button-label": "Přeskočit na další",
+ "tux-editor-cancel-button-label": "Storno",
+ "tux-editor-confirm-button-label": "Potvrdit překlad",
+ "tux-editor-proofread-button-label": "Označit jako zkontrolované",
+ "tux-editor-shortcut-info": "Stiskněte „$1“ pro potvrzení a přesun na další zprávu, „$2“ pro přeskočení na další zprávu, „$4“ pro zadání shrnutí nebo přidržte „$3“ pro zobrazení dalších zkratek.",
+ "tux-editor-edit-desc": "Upravit dokumentaci",
+ "tux-editor-add-desc": "Přidat dokumentaci",
+ "tux-editor-suggestions-title": "Návrhy",
+ "tux-editor-in-other-languages": "V jiných jazycích",
+ "tux-editor-need-more-help": "Potřebujete další pomoc?",
+ "tux-editor-ask-help": "Požádejte o více informací",
+ "tux-editor-tm-match": "$1% shoda",
+ "tux-notices-more": "{{PLURAL:$1|$1 další|$1 další|$1 dalších}}",
+ "tux-notices-hide": "skrýt",
+ "tux-editor-save-failed": "Zveřejňování překladu se nezdařilo: $1",
+ "tux-editor-n-uses": "použito {{PLURAL:$1|jednou|$1krát}}",
+ "tux-editor-message-desc-more": "Zobrazit více",
+ "tux-editor-message-desc-less": "Zobrazit méně",
+ "tux-editor-clear-translated": "Skrýt přeložené",
+ "tux-editor-proofreading-mode": "Korektury",
+ "tux-editor-translate-mode": "Seznam",
+ "tux-editor-proofreading-hide-own-translations": "Skrýt moje překlady",
+ "tux-editor-proofreading-show-own-translations": "Zobrazit moje překlady",
+ "tux-proofread-action-tooltip": "Označit jako zkontrolované",
+ "tux-proofread-edit-label": "Editovat",
+ "tux-editor-page-mode": "Stránka",
+ "tux-editor-outdated-notice": "Tento překlad možná potřebuje aktualizaci.",
+ "tux-editor-outdated-notice-diff-link": "Zobrazit rozdíly",
+ "tux-editor-doc-editor-placeholder": "Dokumentace ke zprávě",
+ "tux-editor-doc-editor-save": "Zveřejnit dokumentaci",
+ "tux-editor-doc-editor-cancel": "Storno",
+ "tux-messagetable-more-messages": "Ještě $1 {{PLURAL:$1|zpráva|zprávy|zpráv}}",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|Načítá se hlášení|Načítají se hlášení}}…",
+ "tux-message-filter-placeholder": "Filtrovat seznam",
+ "tux-message-filter-result": "Pro „$2“ {{PLURAL:$1|nalezen 1 výsledek|nalezeny $1 výsledky|nalezeno $1 výsledků}}",
+ "tux-message-filter-advanced-button": "Rozšířené vyhledávání",
+ "tux-message-filter-optional-messages-label": "Volitelné zprávy",
+ "tux-proofread-translated-by-self": "Váš překlad",
+ "tux-empty-list-all": "Tato skupina zpráv je prázdná",
+ "tux-empty-list-all-guide": "Vyberte si k překladu jinou skupinu zpráv",
+ "tux-translate-page-no-such-group": "<strong>Uvedená skupina zpráv neexistuje.</strong> Zvolte jinou skupinu zpráv.",
+ "tux-empty-list-translated": "Žádné přeložené zprávy",
+ "tux-empty-list-translated-guide": "Můžete pomoci s překládáním",
+ "tux-empty-list-translated-action": "Překládat",
+ "tux-empty-no-messages-to-display": "Neexistují zprávy, které by se daly zobrazit.",
+ "tux-empty-there-are-optional": "V seznamu se nezobrazují volitelné zprávy",
+ "tux-empty-show-optional-messages": "Zobrazit volitelné zprávy",
+ "tux-empty-no-outdated-messages": "Žádné zastaralé překlady",
+ "tux-empty-nothing-to-proofread": "Není co kontrolovat",
+ "tux-empty-you-can-help-providing": "Můžete pomoci novými překlady.",
+ "tux-empty-nothing-new-to-proofread": "Nic nového ke kontrole",
+ "tux-empty-you-can-review-already-proofread": "Můžete zkontrolovat překlady, které již zkontrolovali jiní.",
+ "tux-empty-list-other": "Není co překládat",
+ "tux-empty-list-other-guide": "Můžete pomoci zkontrolovat existující překlady.",
+ "tux-empty-list-other-action": "Zkontrolovat překlady",
+ "tux-empty-list-other-link": "Zobrazit všechny zprávy",
+ "tux-editor-close-tooltip": "Zavřít",
+ "tux-editor-expand-tooltip": "Roztáhnout",
+ "tux-editor-collapse-tooltip": "Sbalit",
+ "tux-editor-message-tools-show-editor": "Zobrazit v editoru wiki",
+ "tux-editor-message-tools-history": "Historie",
+ "tux-editor-message-tools-delete": "Smazat",
+ "tux-editor-message-tools-translations": "Všechny překlady",
+ "tux-editor-message-tools-linktothis": "Odkaz na tuto zprávu",
+ "tux-editor-loading": "Načítá se…",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|další jazyk|další jazyky|dalších jazyků}}",
+ "translate-statsbar-tooltip": "$1 % přeloženo, $2 % zkontrolováno",
+ "translate-statsbar-tooltip-with-fuzzy": "$1 % přeloženo, $2 % zkontrolováno, $3 % zastaralých",
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|další skupina|další skupiny|dalších skupin}}",
+ "tux-session-expired": "Již nejste přihlášen(a). Přihlaste se prosím v jiné záložce. Anebo si okopírujte neuložené překlady, přihlaste se, vraťte se na tuto stránku a zadejte je znovu.",
+ "tux-nojs": "Tento nástroj nefunguje bez JavaScriptu. JavaScript je buď vypnut, nebo zkolaboval anebo není podporován tento prohlížeč.",
+ "specialpages-group-translation": "Překlad"
+}
diff --git a/Translate/i18n/core/csb.json b/Translate/i18n/core/csb.json
new file mode 100644
index 00000000..4f274394
--- /dev/null
+++ b/Translate/i18n/core/csb.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kaszeba"
+ ]
+ },
+ "translate": "Dolmôczë",
+ "translate-sidebar-alltrans": "W jinych jãzëkach",
+ "translate-documentation-language": "òpisënk wiadła"
+}
diff --git a/Translate/i18n/core/cu.json b/Translate/i18n/core/cu.json
new file mode 100644
index 00000000..12f82caf
--- /dev/null
+++ b/Translate/i18n/core/cu.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "NR Deblocked",
+ "ОйЛ"
+ ]
+ },
+ "translate-page-language": "ѩꙁꙑкъ",
+ "translate-page-edit": "исправлѥниѥ",
+ "translate-edit-title": "исправлѥниѥ ⁖ $1 ⁖",
+ "translate-checks-empty": "​Переводъ​ ​безꙿ​ ​содержа́нїѧ​ ​и҆лѝ​ ​только​ съ пробелами ​не​ ​допꙋскаетсѧ​.",
+ "translate-stats-edits": "мѣнꙑ",
+ "translate-translations-messagename": "имѧ :",
+ "translate-language": "ѩꙁꙑкъ",
+ "translate-mgs-column-language": "ѩꙁꙑкъ",
+ "tux-proofread-edit-label": "исправлѥниѥ",
+ "tux-editor-close-tooltip": "ꙁакрꙑи",
+ "tux-editor-message-tools-history": "їсторїꙗ"
+}
diff --git a/Translate/i18n/core/cv.json b/Translate/i18n/core/cv.json
new file mode 100644
index 00000000..9e1beea9
--- /dev/null
+++ b/Translate/i18n/core/cv.json
@@ -0,0 +1,36 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chuvash",
+ "Chuvash2014"
+ ]
+ },
+ "translate": "Куçарни",
+ "translate-taction-translate": "Куçарни",
+ "translate-next": "Урăх страницă",
+ "translate-prev": "Унчченхи страницă",
+ "translationstats": "Куçарнисен статистики",
+ "languagestats-stats-for": "$1 куçарнă статистики ($2).",
+ "languagestats-recenttranslations": "нумай пулмасть куçарнисем",
+ "translate-langstats-expand": "сар",
+ "translate-langstats-collapse": "хуп",
+ "translate-langstats-expandall": "пĕтĕмпине сар",
+ "translate-langstats-collapseall": "пĕтĕмпи хуп",
+ "translate-language-code": "Чĕлхен кодчĕ",
+ "translate-language-code-field-name": "Чĕлхен кодчĕ:",
+ "translate-untranslated": "Куçарманнисем",
+ "translate-percentage-complete": "Куçарнă",
+ "translate-percentage-fuzzy": "Кивелнĕ",
+ "translate-ls-submit": "Статистикине кăтарт",
+ "translate-mgs-submit": "Статистикине кăтарт",
+ "supportedlanguages-recenttranslations": "нумай пулмасть куçарнисем",
+ "translate-dynagroup-recent-label": "Нумай пулмасть куçарнисем",
+ "tux-languageselector": "Куçармалла",
+ "tux-tab-all": "Пурте",
+ "tux-tab-untranslated": "Куçарманнисем",
+ "tux-tab-outdated": "Кивелнисем",
+ "tux-tab-translated": "Куçарнисем",
+ "tux-tab-unproofread": "Тĕрĕслеменисем",
+ "tux-empty-list-other": "Куçармалли çук.",
+ "tux-empty-list-other-action": "Куçарнисене тĕрĕслемелли"
+}
diff --git a/Translate/i18n/core/cy.json b/Translate/i18n/core/cy.json
new file mode 100644
index 00000000..ed1398f4
--- /dev/null
+++ b/Translate/i18n/core/cy.json
@@ -0,0 +1,201 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cymrodor",
+ "Lloffiwr",
+ "Robin Owain"
+ ]
+ },
+ "translate": "Cyfieithu",
+ "translate-desc": "[[Special:Translate|Tudalen arbennig]] at ddiben cyfieithu MediaWiki a mwy",
+ "translate-taskui-export-to-file": "Allforio yn ei fformat cynhenid",
+ "translate-taskui-export-as-po": "Allforio i'w cyfieithu all-lein",
+ "translate-taction-translate": "Cyfieithu",
+ "translate-taction-proofread": "Adolygu",
+ "translate-taction-lstats": "Ystadegau rhyw iaith",
+ "translate-taction-mstats": "Ystadegau rhyw grŵp negeseuon",
+ "translate-taction-export": "Allforio",
+ "translate-taction-disabled": "Ni ellir gwneud y weithred hon ar y wici hwn.",
+ "translate-page-no-such-language": "Mae'r iaith honno'n annilys.",
+ "translate-page-no-such-group": "Mae'r grŵp hwnnw'n annilys.",
+ "translate-page-disabled": "Analluogwyd cyfieithu i'r iaith honno yn y grŵp hwn.\nRheswm:\n\n<em>$1</em>",
+ "translate-language-disabled": "Analluogwyd cyfieithu i'r iaith hon.",
+ "translate-page-settings-legend": "Gosodiadau",
+ "translate-page-group": "Grŵp",
+ "translate-page-language": "Iaith",
+ "translate-page-limit": "Terfyn",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|neges}} i'r dudalen",
+ "translate-submit": "Cyrcher",
+ "translate-page-navigation-legend": "Llywio",
+ "translate-page-showing": "Yn dangos y negeseuon rhif $1 hyd $2 ymhlith cyfanswm o $3.",
+ "translate-page-showing-all": "Yn dangos $1 {{PLURAL:$1|neges}}.",
+ "translate-page-showing-none": "Dim negeseuon i'w dangos.",
+ "translate-next": "I'r dudalen nesaf",
+ "translate-prev": "I'r dudalen gynt",
+ "translate-page-description-legend": "Gwybodaeth am y grŵp",
+ "translate-page-description-hasoptional": "Mae'r grŵp hwn yn cynnwys negeseuon opsiynol.\nDoes dim ond angen eu cyfieithu pan fod orgraff eich iaith yn gofyn am eu cyfieithu, e.e. os oes rhaid osgoi defnyddio bylchau neu wrth drawslythrennu enwau priod. $1",
+ "translate-page-description-hasoptional-open": "Dangos negeseuon opsiynol.",
+ "translate-page-edit": "golygu",
+ "translate-optional": "(dewisol)",
+ "translate-ignored": "(anwybyddwyd)",
+ "translate-edit-title": "Golygu \"$1\"",
+ "translate-edit-definition": "Y neges wreiddiol",
+ "translate-edit-contribute": "cofnodi eglurhad",
+ "translate-edit-no-information": "<em>Nid oes unrhyw wybodaeth wedi ei chofnodi am y neges hon eto.\nOs ydych yn gwybod ymhle neu ym mha fodd y defnyddir y neges hon, gallwch hwyluso gwaith y cyfieithwyr drwy gofnodi eglurhad arni.</em>",
+ "translate-edit-information": "Gwybodaeth am y neges ($1)",
+ "translate-edit-warnings": "Rhybudd am gyfieithiad anghyflawn",
+ "translate-edit-tmmatch-source": "Y testun gwreiddiol i'w gyfieithu: $1",
+ "translate-edit-tmmatch": "yn cyd-fynd $1%",
+ "translate-edit-nopermission": "Mae angen galluoedd cyfieithu arnoch i gyfieithu negeseuon.",
+ "translate-edit-askpermission": "Cael caniatâd",
+ "translate-checks-parameters": "Ni ddefnyddir y {{PLURAL:$2|paramedr|paramedr|paramedrau}} canlynol:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "Nid yw'r {{PLURAL:$2|paramedr|paramedr|paramedrau}} canlynol yn hysbys:\n<strong>$1</strong>",
+ "translate-checks-balance": "Mae nifer y {{PLURAL:$2|cromfachau}} yn odrif, fel a ganlyn:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "Ymddengys bod nam ar y {{PLURAL:$2|cyswllt|cyswllt|$2 gyswllt|$2 cyswllt|£2 chyswllt|$2 cyswllt}} canlynol:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "Mae'r {{PLURAL:$2|cyswllt|cyswllt|$2 gyswllt|$2 cyswllt|£2 chyswllt|$2 cyswllt}} canlynol yn eisiau:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Mae'r gwreiddiol yn defnyddio <nowiki>{{PLURAL:}}</nowiki> ond nid y cyfieithiad.",
+ "translate-checks-pagename": "Mae'r parth yn y cyfieithiad yn wahanol i'r parth yn y neges wreiddiol",
+ "translate-checks-format": "Nid yw'r cyfieithiad yn gydnaws â'r gwreiddiol, ynteu mae cystrawen annilys ynddo: $1",
+ "translate-pref-editassistlang": "Ieithoedd cynorthwyol:",
+ "prefs-translate": "Dewisiadau cyfieithu",
+ "translate-pref-editassistlang-help": "Rhestr coma-wahanedig o godau iaith.\nWrth gyfieithu neges, bydd cyfieithiadau ohono yn yr ieithoedd hyn i'w gweld.\nBydd y rhestr diofyn o ieithoedd yn dibynnu ar eich iaith chi.",
+ "right-translate": "Golygu gan ddefnyddio'r rhyngwyneb cyfieithu",
+ "right-translate-manage": "Rheoli grwpiau negeseuon",
+ "action-translate-manage": "rheoli grwpiau negeseuon",
+ "right-translate-import": "Mewnforio cyfieithiadau all-lein",
+ "action-translate-import": "mewnforio cyfieithiadau all-lein",
+ "right-translate-messagereview": "Adolygu cyfieithiadau",
+ "right-translate-groupreview": "Newid statws llif gwaith y grwpiau negeseuon",
+ "translate-rc-translation-filter": "Hidlo'r canlyniadau:",
+ "translate-rc-translation-filter-no": "Dim hidl",
+ "translate-rc-translation-filter-only": "Dangos cyfieithiadau'n unig",
+ "translate-rc-translation-filter-filter": "Peidio dangos cyfieithiadau",
+ "translate-rc-translation-filter-site": "Dangos newidiadau i negeseuon y wefan yn unig",
+ "translationstats": "Ystadegau cyfieithu",
+ "translate-stats-edits": "Golygiadau",
+ "translate-stats-users": "Cyfieithwyr",
+ "translate-stats-registrations": "Defnyddwyr newydd",
+ "translate-stats-reviews": "Adolygiadau",
+ "translate-stats-reviewers": "Adolygwyr",
+ "translate-statsf-intro": "Gallwch gynhyrchu ystadegau syml gyda'r ffurflen hon.\nMae gan pob gwerth derfyn uchaf ac isaf.",
+ "translate-statsf-options": "Dewisiadau'r graff",
+ "translate-statsf-width": "Lled mewn picselau:",
+ "translate-statsf-height": "Uchder mewn picselau:",
+ "translate-statsf-days": "Cyfnod mewn diwrnodau:",
+ "translate-statsf-start": "Dyddiad dechrau:",
+ "translate-statsf-scale": "Gronynnedd:",
+ "translate-statsf-scale-months": "Misoedd",
+ "translate-statsf-scale-weeks": "Wythnosau",
+ "translate-statsf-scale-days": "Diwrnodau",
+ "translate-statsf-scale-hours": "Oriau",
+ "translate-statsf-count": "Mesur:",
+ "translate-statsf-count-edits": "Nifer y golygiadau",
+ "translate-statsf-count-users": "Cyfieithwyr gweithgar",
+ "translate-statsf-count-registrations": "Defnyddwyr newydd",
+ "translate-statsf-count-reviews": "Adolygiadau o gyfieithiadau",
+ "translate-statsf-count-reviewers": "Adolygwyr",
+ "translate-statsf-language": "Rhestr coma-wahanedig o godau iaith:",
+ "translate-statsf-group": "Rhestr coma-wahanedig o godau grŵp:",
+ "translate-statsf-submit": "Rhagolwg",
+ "translate-tag-page-desc": "Cyfieithiad o dudalen wici [[$2|$1]] o $3 ($4).",
+ "translate-sidebar-alltrans": "Ieithoedd eraill",
+ "translations": "Yr holl gyfieithiadau",
+ "translations-summary": "Gosodwch enw neges isod, er mwyn gweld yr holl gyfieithiadau ohoni sydd ar gael.",
+ "translate-translations-no-message": "Nid yw \"$1\" yn neges y gellir ei chyfieithu",
+ "translate-translations-none": "Nid oes unrhyw gyfieithiadau o \"$1\" ar gael",
+ "translate-translations-count": "Cafwyd hyd i {{PLURAL:$1||un cyfieithiad|$1 gyfieithiad|$1 chyfieithiad|$1 chyfieithiad|$1 cyfieithiad}}.",
+ "translate-translations-fieldset-title": "Neges",
+ "translate-translations-messagename": "Enw:",
+ "translate-translations-project": "Prosiect:",
+ "translate-translations-history-short": "h",
+ "languagestats": "Ystadegau ieithyddol",
+ "languagestats-summary": "Mae'r dudalen hon yn dangos ystadegau cyfieithu yr holl grwpiau negeseuon ar gyfer rhyw iaith.",
+ "languagestats-stats-for": "Ystadegau cyfieithu ar gyfer $1 ($2).",
+ "languagestats-recenttranslations": "cyfieithiadau diweddar",
+ "translate-langstats-expand": "ehanger",
+ "translate-langstats-collapse": "crebacher",
+ "translate-langstats-expandall": "ehangu'r cwbl",
+ "translate-langstats-collapseall": "crebachu'r cwbl",
+ "translate-language-code": "Côd iaith",
+ "translate-language-code-field-name": "Côd iaith:",
+ "translate-suppress-complete": "Hepgor dangos y grwpiau o negeseuon sydd wedi eu llwyr gyfieithu",
+ "translate-ls-noempty": "Hepgor dangos y grwpiau o negeseuon sydd heb eu cyfieithu o gwbl",
+ "translate-language": "Iaith",
+ "translate-total": "Negeseuon",
+ "translate-untranslated": "Heb eu cyfieithu",
+ "translate-percentage-complete": "Parod",
+ "translate-percentage-fuzzy": "Ag angen diweddaru",
+ "translate-languagestats-overall": "Yr holl grwpiau negeseuon gyda'i gilydd",
+ "translate-ls-submit": "Dangoser yr ystadegau",
+ "translate-ls-column-group": "Grŵp negeseuon",
+ "translate-mgs-pagename": "Ystadegau am grŵp negeseuon",
+ "translate-mgs-fieldset": "Dewisiadau arddangos",
+ "translate-mgs-group": "Grŵp negeseuon:",
+ "translate-mgs-nocomplete": "Peidio dangos ieithoedd sydd wedi eu cyfieithu'n llwyr",
+ "translate-mgs-noempty": "Peidio dangos ieithoedd nad ydynt wedi eu cyfieithu o gwbl",
+ "translate-mgs-submit": "Dangoser yr ystadegau",
+ "translate-mgs-column-language": "Iaith",
+ "translate-mgs-totals": "Yr holl ieithoedd gyda'i gilydd",
+ "supportedlanguages": "Ieithoedd a gynhelir",
+ "supportedlanguages-summary": "Mae'r dudalen hon yn dangos rhestr yr holl ieithoedd a gynhelir gan {{SITENAME}}, ynghyd ag enwau'r cyfieithwyr sy'n gweithio ar yr iaith honno.\nYmddengys enw cyfieithydd yn fwy o faint, po fwyaf yw nifer ei gyfieithiadau.\nMae lliw y llinell o dan yr enw yn dangos pa mor ddiweddar y bu'n gweithio yma.",
+ "supportedlanguages-colorlegend": "Yr allwedd i'r lliwiau: Mae $1 diwrnod neu fwy ers y cyfieithiad diwethaf.",
+ "supportedlanguages-translators": "{{PLURAL:$2|Cyfieithydd|Cyfieithwyr}}: $1",
+ "supportedlanguages-recenttranslations": "chyfieithiadau diweddar",
+ "supportedlanguages-count": "Cynhelir $1 {{PLURAL:$1|iaith}} i gyd.",
+ "translate-jssti-add": "Ychwanegu at y rhestr",
+ "translate-manage-action-import": "Mewnforio",
+ "translate-manage-action-ignore": "Anwybyddu",
+ "translate-manage-action-fuzzy": "Mewnforio a gosod marc fuzzy",
+ "importtranslations": "Mewnforio cyfieithiadau",
+ "translate-import-from-local": "Ffeil lleol i'w llwytho:",
+ "translate-import-load": "Llwyther y ffeil",
+ "translate-import-err-dl-failed": "Heb allu nôl y ffeil:\n$1",
+ "translate-import-err-ul-failed": "Ni lwyddodd llwytho'r ffeil",
+ "translate-js-support-unsaved-warning": "Mae gennych gyfieithiadau heb eu cadw",
+ "translate-gs-pos": "Safle",
+ "translate-gs-code": "Cod",
+ "translate-gs-continent": "Cyfandir",
+ "translate-gs-speakers": "Siaradwyr",
+ "translate-gs-score": "Sgor",
+ "translate-gs-multiple": "Mwy nag un",
+ "translate-gs-count": "Nifer",
+ "translate-gs-total": "Cyfanswm",
+ "translate-gs-avgscore": "Sgôr ar gyf.",
+ "translate-documentation-language": "Nodiadau ar y neges",
+ "translate-searchprofile": "Cyfieithiadau",
+ "translate-searchprofile-tooltip": "Chwilio ymhlith yr holl gyfieithiadau",
+ "translate-search-languagefilter": "Hidlo yn ôl iaith:",
+ "translate-search-nofilter": "Dim hidlo",
+ "log-name-translationreview": "Lòg adolygu cyfieithiadau",
+ "translate-workflow-state-": "(heb ei osod)",
+ "translate-workflowstatus": "Cyflwr: $1",
+ "translate-workflow-set-doing": "Wrthi'n gosod...",
+ "translate-stats-workflow": "Cyflwr",
+ "translate-workflowgroup-label": "Cyflyrau'r llif gwaith",
+ "translate-dynagroup-recent-label": "Cyfieithiadau diweddar",
+ "translate-msggroupselector-search-all": "Oll",
+ "translate-msggroupselector-search-recent": "Diweddar",
+ "tux-tab-all": "Oll",
+ "tux-tab-untranslated": "Heb eu cyfieithu",
+ "tux-tab-outdated": "Ag angen diweddaru",
+ "tux-tab-translated": "Cyfieithwyd",
+ "tux-tab-unproofread": "Heb eu hadolygu",
+ "tux-edit": "Golygu",
+ "tux-status-optional": "Dewisol",
+ "tux-status-fuzzy": "Ag angen diweddaru",
+ "tux-status-proofread": "Adolygwyd",
+ "tux-status-translated": "Cyfieithwyd",
+ "tux-status-saving": "Wrthi'n cadw...",
+ "tux-status-unsaved": "Heb ei gadw",
+ "tux-editor-paste-original-button-label": "Gluder y testun gwreiddiol",
+ "tux-editor-discard-changes-button-label": "Rhoi'r newidiadau heibio",
+ "tux-editor-save-button-label": "Cadwer y cyfieithiad",
+ "tux-editor-skip-button-label": "Neidio i'r nesaf",
+ "tux-editor-cancel-button-label": "Canslo",
+ "tux-editor-confirm-button-label": "Cadarnheuer y cyfieithiad",
+ "tux-editor-edit-desc": "Golygu'r nodiadau",
+ "tux-editor-suggestions-title": "Awgrymiadau",
+ "tux-editor-in-other-languages": "Mewn ieithoedd eraill",
+ "tux-editor-need-more-help": "Oes angen mwy o gymorth?",
+ "tux-notices-hide": "cuddio"
+}
diff --git a/Translate/i18n/core/da.json b/Translate/i18n/core/da.json
new file mode 100644
index 00000000..1002873a
--- /dev/null
+++ b/Translate/i18n/core/da.json
@@ -0,0 +1,352 @@
+{
+ "@metadata": {
+ "authors": [
+ "Antonla",
+ "Byrial",
+ "Christian List",
+ "Emilkris33",
+ "Hylle",
+ "Jon Harald Søby",
+ "Kaare",
+ "MGA73",
+ "Nghtwlkr",
+ "Peter Alberti",
+ "Saederup92",
+ "Sarrus"
+ ]
+ },
+ "translate": "Oversæt",
+ "translate-extensionname": "Oversæt",
+ "translate-desc": "[[Special:Translate|Specialside]] til oversættelse af MediaWiki og andet",
+ "translate-taskui-export-to-file": "Eksportér i oprindeligt format",
+ "translate-taskui-export-as-po": "Eksportér til offline oversættelse",
+ "translate-taction-translate": "Oversæt",
+ "translate-taction-proofread": "Læs korrektur",
+ "translate-taction-lstats": "Sprogstatistik",
+ "translate-taction-mstats": "Statistik for beskedgruppe",
+ "translate-taction-export": "Eksportér",
+ "translate-taction-disabled": "Denne handling er deaktiveret på denne wiki.",
+ "translate-page-no-such-language": "Det angivne sprog er ugyldigt.",
+ "translate-page-no-such-group": "Den angivne gruppe er ugyldig.",
+ "translate-page-disabled": "Oversættelser til dette sprog i denne gruppe er slået fra.\nÅrsag:\n\n<em>$1</em>",
+ "translate-language-disabled": "Oversættelse til dette sprog er slået fra.",
+ "translate-page-settings-legend": "Indstillinger",
+ "translate-page-group": "Gruppe",
+ "translate-page-language": "Sprog",
+ "translate-page-limit": "Antal",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|besked|beskeder}} per side",
+ "translate-submit": "Hent",
+ "translate-page-navigation-legend": "Navigation",
+ "translate-page-showing": "Viser besked nr. $1 til $2 af i alt $3.",
+ "translate-page-showing-all": "Viser $1 {{PLURAL:$1|besked|beskeder}}.",
+ "translate-page-showing-none": "Ingen beskeder at vise.",
+ "translate-next": "Næste side",
+ "translate-prev": "Forrige side",
+ "translate-page-description-legend": "Information om gruppen",
+ "translate-page-description-hasoptional": "Denne beskedgruppe indeholder valgfrie beskeder.\nValgfrie beskeder bør kun oversættes, hvis dit sprog har særlige krav som for eksempel ikke at bruge mellemrum eller at transskribere egennavne. $1",
+ "translate-page-description-hasoptional-open": "Vis valgfrie beskeder.",
+ "translate-page-edit": "redigér",
+ "translate-optional": "(valgfri)",
+ "translate-ignored": "(ignoreres)",
+ "translate-edit-title": "Rediger \"$1\"",
+ "translate-edit-definition": "Beskeden som skal oversættes",
+ "translate-edit-contribute": "bidrag",
+ "translate-edit-no-information": "<em>Denne besked har ingen dokumentation.\nHvis du ved hvor eller hvordan denne besked bruges, kan du hjælpe andre oversættere ved at tilføje dokumentation til beskeden.</em>",
+ "translate-edit-information": "Information om beskeden ($1)",
+ "translate-edit-warnings": "Advarsler om ufuldstændige oversættelser",
+ "translate-edit-tmmatch-source": "Kildetekst til oversættelse: $1",
+ "translate-edit-tmmatch": "$1 % overensstemmelse",
+ "translate-edit-nopermission": "Du skal have oversættelsesrettigheder for at kunne oversætte besekeder.",
+ "translate-edit-askpermission": "Få tilladelse",
+ "exporttranslations": "Eksporter oversættelser",
+ "translate-export-form-format": "Format",
+ "translate-export-not-supported": "Eksportering af oversættelser understøttes ikke.",
+ "translate-checks-parameters": "Følgende {{PLURAL:$2|parameter|parametre}} bruges ikke:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "Følgende {{PLURAL:$2|parameter er ukendt|parametre er ukendte}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "Der er et ulige antal {{PLURAL:$2|parenteser|parenteser}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "Følgende {{PLURAL:$2|henvisning er problematisk|$2 henvisninger er problematiske}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "Følgende {{PLURAL:$2|henvisning|$2 henvisninger}} mangler:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Originalen bruger <nowiki>{{PLURAL:}}</nowiki>, men oversættelsen gør det ikke.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> fik {{PLURAL:$1|en form|$1 forme}}, men {{PLURAL:$2|kun en form|$2 forme}} er understøttet (fraregnet 0=- og 1=-forme).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> har en gentaget form til sidst. <nowiki>{{PLURAL:$1|får|får}}</nowiki> bør skrives som <nowiki>{{PLURAL:$1|får}}</nowiki>.",
+ "translate-checks-pagename": "Navnerum er anderledes end i originalen",
+ "translate-checks-format": "Denne oversættelse følger ikke originalen eller har ugyldig syntaks: $1",
+ "translate-checks-escape": "Følgende undvigesekvenser kan være fejltagelser: <strong>$1</strong>",
+ "translate-checks-parametersnotequal": "Antallet af parametre er {{PLURAL:$1|$1}}; det burde være {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> er fejlbehæftet.",
+ "translate-checks-fudforum-syntax": "Brug <nowiki>$1</nowiki> i stedet for <nowiki>$2</nowiki> i dette projekt.",
+ "translate-checks-replacement": "Brug $2 i stedet for $1.",
+ "translate-pref-editassistlang": "Hjælpesprog:",
+ "prefs-translate": "Oversættelsesindstillinger",
+ "translate-pref-editassistlang-help": "Kommasepareret liste med sprogkoder.\nOversættelsen af en besked til disse sprog vises når du oversætter.\nStandardlisten afhænger af dit sprog.",
+ "translate-pref-editassistlang-bad": "Ugyldig sprogkode i listen:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Redigere med oversættelsesgrænsefladen",
+ "right-translate-manage": "Administrere beskedgrupper",
+ "action-translate-manage": "administrere beskedgrupper",
+ "right-translate-import": "Importere offline oversættelser",
+ "action-translate-import": "importere offline oversættelser",
+ "right-translate-messagereview": "Læs korrektur",
+ "action-translate-messagereview": "læs korrektur",
+ "right-translate-groupreview": "Ændring af workflowstatus på meddelelsesgrupper",
+ "action-translate-groupreview": "ændre arbejdsflow statussen for beskedgrupper",
+ "translate-rcfilters-translations": "Oversættelser",
+ "translate-rcfilters-translations-only-label": "Oversættelser",
+ "translate-rcfilters-translations-only-desc": "Ændringer til oversatte sider.",
+ "translate-rcfilters-translations-filter-label": "Ikke oversættelser",
+ "translate-rcfilters-translations-filter-desc": "Alle ændringer som ikke er oversættelser.",
+ "translate-rc-translation-filter": "Filtrér oversættelser:",
+ "translate-rc-translation-filter-no": "Gør ingenting",
+ "translate-rc-translation-filter-only": "Vis kun oversættelser",
+ "translate-rc-translation-filter-filter": "Vis ikke oversættelser",
+ "translate-rc-translation-filter-site": "Vis kun systembeskeder uden sprogkode",
+ "translationstats": "Oversættelsesstatistik",
+ "translate-stats-edits": "Redigeringer",
+ "translate-stats-users": "Oversættere",
+ "translate-stats-registrations": "Registreringer",
+ "translate-stats-reviews": "Korrekturlæsninger",
+ "translate-stats-reviewers": "Korrekturlæsere",
+ "translate-statsf-intro": "Du kan generere enkle statistikker med denne formular.\nAlle værdier har øvre og nedre grænser.",
+ "translate-statsf-options": "Grafindstillinger",
+ "translate-statsf-width": "Bredde i pixels:",
+ "translate-statsf-height": "Højde i pixels:",
+ "translate-statsf-days": "Tidsperiode i dage:",
+ "translate-statsf-start": "Startdato:",
+ "translate-statsf-scale": "Tidsopløsning:",
+ "translate-statsf-scale-years": "År",
+ "translate-statsf-scale-months": "Måneder",
+ "translate-statsf-scale-weeks": "Uger",
+ "translate-statsf-scale-days": "Dage",
+ "translate-statsf-scale-hours": "Timer",
+ "translate-statsf-count": "Måling:",
+ "translate-statsf-count-edits": "Antal redigeringer",
+ "translate-statsf-count-users": "Aktive oversættere",
+ "translate-statsf-count-registrations": "Nye brugere",
+ "translate-statsf-count-reviews": "Oversættelseskorrekturlæsninger",
+ "translate-statsf-count-reviewers": "Korrekturlæsere",
+ "translate-statsf-language": "Kommasepareret liste med sprogkoder:",
+ "translate-statsf-group": "Kommasepareret liste med gruppekoder:",
+ "translate-statsf-submit": "Forhåndsvisning",
+ "translate-tag-page-desc": "Oversættelse af wikisiden [[$2|$1]] fra $3 ($4).",
+ "translate-sidebar-alltrans": "På andre sprog",
+ "translations": "Alle oversættelser",
+ "translations-summary": "Skriv navnet på en besked nedenfor for at vise alle tilgængelige oversættelser.",
+ "translate-translations-no-message": "\"$1\" er ikke en besked som kan oversættes.",
+ "translate-translations-none": "Der er ingen oversættelser af \"$1\"",
+ "translate-translations-count": "Fandt {{PLURAL:$1|en oversættelse|$1 oversættelser}}.",
+ "translate-translations-fieldset-title": "Besked",
+ "translate-translations-messagename": "Navn:",
+ "translate-translations-project": "Projekt:",
+ "translate-translations-including-no-param": "Angiv venligst en gyldig beskednøgle i undersiderparameteren",
+ "translate-translations-history-short": "h",
+ "languagestats": "Sprogstatistik",
+ "languagestats-summary": "Denne side viser oversættelsesstatistik for alle beskedgrupper for et sprog.",
+ "languagestats-stats-for": "Oversættelsesstatistik for $1 ($2).",
+ "languagestats-recenttranslations": "seneste oversættelser",
+ "translate-langstats-incomplete": "Nogle af statistikkerne på denne side er ufuldstændige. Genindlæs siden for at få yderligere statistik.",
+ "translate-langstats-expand": "fold ud",
+ "translate-langstats-collapse": "fold sammen",
+ "translate-langstats-expandall": "fold alle ud",
+ "translate-langstats-collapseall": "fold alle sammen",
+ "translate-language-code": "Sprogkode",
+ "translate-language-code-field-name": "Sprogkode:",
+ "translate-suppress-complete": "Vis ikke beskedgrupper som er fuldt oversatte",
+ "translate-ls-noempty": "Vis ikke beskedgrupper, som er helt uoversatte",
+ "translate-language": "Sprog",
+ "translate-total": "Beskeder",
+ "translate-untranslated": "Uoversatte",
+ "translate-percentage-complete": "Færdiggørelse",
+ "translate-percentage-fuzzy": "Forældede",
+ "translate-percentage-proofread": "Korrekturlæst",
+ "translate-languagestats-overall": "Alle beskedgrupper lagt sammen",
+ "translate-ls-submit": "Vis statistik",
+ "translate-ls-column-group": "Beskedgruppe",
+ "translate-mgs-pagename": "Statistik for beskedgruppe",
+ "translate-mgs-fieldset": "Visningsindstillinger",
+ "translate-mgs-group": "Beskedgruppe:",
+ "translate-mgs-nocomplete": "Vis ikke sprog, som har en komplet oversættelse",
+ "translate-mgs-noempty": "Vis ikke sprog, som ikke har nogen oversættelser",
+ "translate-mgs-submit": "Vis statistik",
+ "translate-mgs-column-language": "Sprog",
+ "translate-mgs-totals": "Alle {{PLURAL:$1|sprog}} sammenlagt",
+ "translate-mgs-invalid-group": "Den angivne gruppe, $1, findes ikke.",
+ "translate-mgs-nothing": "Der er intet at vise for den ønskede statistik.",
+ "supportedlanguages": "Aktive sprog",
+ "supportedlanguages-summary": "Denne side viser en liste over alle de sprog, der understøttes af {{SITENAME}},\nsammen med navnene på de oversættere, der arbejder på dette sprog.\n\nJo flere redigeringer, en oversætter har bidraget med, jo større skrift bruges til navnet.\nUnderstregningsfarven angiver, hvor nyligt en oversætter har været aktiv.",
+ "supportedlanguages-colorlegend": "Forklaring til farven: seneste oversættelse var for $1 dage siden.",
+ "supportedlanguages-sqlite-error": "SQLite understøttes ikke",
+ "supportedlanguages-translators": "{{PLURAL:$2|Oversætter|Oversættere}}: $1",
+ "supportedlanguages-recenttranslations": "seneste oversættelser",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|sprog|sprog}} i alt.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|redigering|redigeringer}} - seneste redigering var for $3 {{PLURAL:$3|dag|dage}} siden",
+ "translate-jssti-add": "Tilføj til listen",
+ "managemessagegroups": "Håndtering af beskedgrupper",
+ "translate-smg-notallowed": "Du har ikke tilladelse til at udføre denne handling.",
+ "translate-smg-nochanges": "Der er ingen ændringer at behandle.",
+ "translate-smg-submit": "Indsend ændringer til behandling",
+ "translate-smg-submitted": "Meddelelsesdefinitioner er opdateret. Ændringer bliver behandlet i baggrunden.",
+ "translate-smg-more": "Der vil være flere ændringer at behandle efter indsendelse af disse ændringer.",
+ "translate-smg-left": "Meddelelsesindhold i wiki",
+ "translate-smg-right": "Indkommende ændringer",
+ "translate-smg-rename-select": "Vælg",
+ "translate-smg-rename-cancel": "Annullér",
+ "translate-smg-strong-sync-help": "Hjælp",
+ "translate-smg-group-message-action-history": "Historik",
+ "translate-smg-group-message-tag-rename": "Omdøb",
+ "translate-smg-loading": "Indlæser...",
+ "translate-manage-import-diff": "Besked $1 | Handlinger: $2",
+ "translate-manage-import-new": "Ny meddelelse $1",
+ "translate-manage-import-deleted": "Slettet meddelelse $1",
+ "translate-manage-action-import": "Importér",
+ "translate-manage-action-conflict": "Importér og markér som forældet",
+ "translate-manage-action-ignore": "Ignorér",
+ "translate-manage-action-fuzzy": "Importer og markér som forældet",
+ "translate-manage-action-rename": "Omdøb",
+ "translate-manage-nochanges": "Der er ingen ændringer i meddelelsesdefinitionerne for denne gruppe.",
+ "translate-manage-nochanges-other": "Der var ingen ændringer til dette sprog.\nBrug linket nedenfor til at vende tilbage til visning af gruppedetaljer.",
+ "translate-manage-inconsistent": "Opdagede en inkonsistens i anmodningen.\nTjek venligst for ændringer og prøv igen.\nDetaljer: $1.",
+ "translate-manage-toolong": "Den maksimale udførelsestid på $1 {{PLURAL:$1|sekund|sekunder}} er overskredet.\nSend venligst formularen igen for at fortsætte behandlingen.",
+ "translate-manage-import-summary": "Importerer en ny version fra ekstern kilde",
+ "translate-manage-import-ignore": "Springer besked over $1.",
+ "translate-manage-conflict-summary": "Importerer en ny version fra en ekstern kilde.\nTjek venligst.",
+ "translate-manage-submit": "Udfør",
+ "translate-manage-intro-other": "Nedenfor er listen over ændringer af oversættelser for sproget $1.\nGennemgå venligst ændringerne og vælg en handling du ønsker at foretage for hver ændring.\nHvis du vælger at ignorere ændringer, er denne handling kun midlertidig.",
+ "translate-manage-import-ok": "Importeret: $1",
+ "translate-manage-import-done": "Import færdig!",
+ "importtranslations": "Importér oversættelser",
+ "translate-import-from-local": "Upload af lokal fil:",
+ "translate-import-load": "Indlæs fil",
+ "translate-import-err-dl-failed": "Kunne ikke hente filen:\n$1",
+ "translate-import-err-ul-failed": "Fil kunne ikke uploades",
+ "translate-import-err-invalid-title": "Det angivne filnavn <nowiki>$1</nowiki> var ugyldig.",
+ "translate-import-err-no-such-file": "Fil <nowiki>$1</nowiki> eksisterer ikke eller er ikke blevet uploadet lokalt.",
+ "translate-import-err-stale-group": "Beskedgruppen, som denne fil tilhører, findes ikke.",
+ "translate-import-err-no-headers": "Filen er ikke en velformateret Gettext-fil i Oversæt-udvidelsens format:\nKan ikke bestemme gruppe og sprog fra fil-headere.",
+ "translate-js-support-unsaved-warning": "Du har ikke-gemte oversættelser.",
+ "translate-gs-pos": "Pos.",
+ "translate-gs-code": "Kode",
+ "translate-gs-continent": "Kontinent",
+ "translate-gs-speakers": "Talere",
+ "translate-gs-score": "Point",
+ "translate-gs-multiple": "Flere",
+ "translate-gs-count": "Antal",
+ "translate-gs-total": "I alt",
+ "translate-gs-avgscore": "Gennemsnitlig point",
+ "translate-documentation-language": "oversættelsesrettesnor",
+ "translate-searchprofile": "Oversættelser",
+ "translate-searchprofile-tooltip": "Søg i alle oversættelser",
+ "translate-search-languagefilter": "Filtrer efter sprog:",
+ "translate-search-nofilter": "Ingen filtrering",
+ "log-name-translationreview": "Log for oversættelseskorrektur",
+ "log-description-translationreview": "Log over alle korrekturlæsninger af oversættelser og meddelelsesgrupper.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|korrekturlæste}} oversættelsen $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|ændrede}} status for oversættelser til $4 af $3 fra $6 til $7",
+ "group-translate-sandboxed": "Ikke-godkendte oversættere",
+ "group-translate-sandboxed-member": "{{GENDER:$1|ikke-godkendt oversætter}}",
+ "right-translate-sandboxmanage": "Administrere brugere i sandkassen",
+ "action-translate-sandboxmanage": "administrere brugere i sandkassen",
+ "right-translate-sandboxaction": "Udføre handlinger der er tilladt for brugere i sandkassen",
+ "action-translate-sandboxaction": "udføre handlinger der er tilladt for brugere i sandkassen",
+ "translate-workflow-state-": "(ikke sat)",
+ "translate-workflowstatus": "Status: $1",
+ "translate-workflow-set-doing": "Sætter ...",
+ "translate-workflow-autocreated-summary": "Automatisk oprettelse af side til workflowstatus $1",
+ "translate-stats-workflow": "Status",
+ "translate-workflowgroup-label": "Workflowstatusser",
+ "translate-workflowgroup-desc": "Denne meddelelsesgruppe viser workflowstatus for oversættelser.\nStatusserne er defineret i opsætningsvariablen $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Seneste oversættelser",
+ "translate-dynagroup-recent-desc": "Denne meddelelsesgruppe viser alle nylige oversættelser til dette sprog.\nDet er mest nyttigt til korrekturlæsningsopgaver.",
+ "translate-dynagroup-additions-label": "De seneste tilføjelser",
+ "translate-dynagroup-additions-desc": "Denne meddelelsesgruppe viser nye og ændrede meddelelser.",
+ "translate-msggroupselector-projects": "Beskedgruppe",
+ "translate-msggroupselector-search-placeholder": "Søg efter grupper",
+ "translate-msggroupselector-search-all": "Alle",
+ "translate-msggroupselector-search-recent": "Seneste",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|undergruppe|undergrupper}}",
+ "tux-languageselector": "Oversæt til",
+ "tux-tab-all": "Alle",
+ "tux-tab-untranslated": "Uoversatte",
+ "tux-tab-outdated": "Forældede",
+ "tux-tab-translated": "Oversatte",
+ "tux-tab-unproofread": "Ikke korrekturlæste",
+ "tux-edit": "Redigér",
+ "tux-status-optional": "Valgfri",
+ "tux-status-fuzzy": "Forældet",
+ "tux-status-proofread": "Korrekturlæst",
+ "tux-status-translated": "Oversat",
+ "tux-status-saving": "Offentliggør...",
+ "tux-status-unsaved": "Ikke offentliggjort",
+ "tux-save-unknown-error": "Der opstod en ukendt fejl.",
+ "tux-editor-paste-original-button-label": "Indsæt kildeteksten",
+ "tux-editor-discard-changes-button-label": "Fjern alle ændringer",
+ "tux-editor-save-button-label": "Gem oversættelse",
+ "tux-editor-skip-button-label": "Spring til næste",
+ "tux-editor-cancel-button-label": "Annullér",
+ "tux-editor-confirm-button-label": "Bekræft oversættelse",
+ "tux-editor-proofread-button-label": "Markér som korrekturlæst",
+ "tux-editor-shortcut-info": "Tryk på \"$1\" for at gemme, eller \"$2\" for at springe til næste meddelelse",
+ "tux-editor-edit-desc": "Redigér dokumentation",
+ "tux-editor-add-desc": "Tilføj dokumentation",
+ "tux-editor-suggestions-title": "Forslag",
+ "tux-editor-in-other-languages": "På andre sprog",
+ "tux-editor-need-more-help": "Brug for mere hjælp?",
+ "tux-editor-ask-help": "Anmod om yderligere oplysninger",
+ "tux-editor-tm-match": "$1% overensstemmelse",
+ "tux-notices-more": "{{PLURAL:$1|$1 flere}}",
+ "tux-notices-hide": "skjul",
+ "tux-editor-save-failed": "Kunne ikke gemme oversættelsen:$1",
+ "tux-editor-n-uses": "brugt $1 {{PLURAL:$1|gang|gange}}",
+ "tux-editor-message-desc-more": "Se mere",
+ "tux-editor-message-desc-less": "Vis færre",
+ "tux-editor-clear-translated": "Skjul oversatte",
+ "tux-editor-proofreading-mode": "Læs korrektur",
+ "tux-editor-translate-mode": "Liste",
+ "tux-editor-proofreading-hide-own-translations": "Skjul dine oversættelser",
+ "tux-editor-proofreading-show-own-translations": "Vis dine oversættelser",
+ "tux-proofread-action-tooltip": "Markér som korrekturlæst",
+ "tux-proofread-edit-label": "Redigér",
+ "tux-editor-page-mode": "Side",
+ "tux-editor-outdated-notice": "Denne oversættelse trænger måske til opdatering.",
+ "tux-editor-outdated-notice-diff-link": "Vis forskelle",
+ "tux-editor-doc-editor-placeholder": "Dokumentation for besked",
+ "tux-editor-doc-editor-save": "Gem dokumentation",
+ "tux-editor-doc-editor-cancel": "Annullér",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|mere besked|flere beskeder}}",
+ "tux-messagetable-loading-messages": "Indlæser {{PLURAL:$1|besked|beskeder}} ...",
+ "tux-message-filter-placeholder": "Filtrér liste",
+ "tux-message-filter-result": "Fandt $1 {{PLURAL:$1|resultat|resultater}} for \"$2\"",
+ "tux-message-filter-advanced-button": "Avanceret søgning",
+ "tux-message-filter-optional-messages-label": "Valgfrie beskeder",
+ "tux-proofread-translated-by-self": "Oversat af dig",
+ "tux-empty-list-all": "Denne beskedgruppe er tom",
+ "tux-empty-list-all-guide": "Vælg en anden beskedgruppe at oversætte",
+ "tux-translate-page-no-such-group": "<strong>Den angivne gruppe findes ikke.</strong> Vælg en anden beskedgruppe.",
+ "tux-empty-list-translated": "Ingen oversatte beskeder",
+ "tux-empty-list-translated-guide": "Du kan hjælpe med at oversætte",
+ "tux-empty-list-translated-action": "Oversæt",
+ "tux-empty-no-messages-to-display": "Der er ingen beskeder at vise.",
+ "tux-empty-there-are-optional": "Der er valgfrie beskeder som ikke er vist i listen",
+ "tux-empty-show-optional-messages": "Vis valgfrie beskeder",
+ "tux-empty-no-outdated-messages": "Der er ingen forældede beskeder",
+ "tux-empty-nothing-to-proofread": "Der er ikke noget at korrekturlæse",
+ "tux-empty-you-can-help-providing": "Du kan hjælpe med at lave nye oversættelser",
+ "tux-empty-nothing-new-to-proofread": "Der er intet nyt at korrekturlæse",
+ "tux-empty-you-can-review-already-proofread": "Du kan korrekturlæse oversættelser som allerede er korrekturlæst af andre.",
+ "tux-empty-list-other": "Intet at oversætte",
+ "tux-empty-list-other-guide": "Du kan hjælpe med at korrekturlæse eksisterende oversættelser",
+ "tux-empty-list-other-action": "Læs korrektur på oversættelser",
+ "tux-empty-list-other-link": "Vis alle beskeder",
+ "tux-editor-close-tooltip": "Luk",
+ "tux-editor-expand-tooltip": "Fold ud",
+ "tux-editor-collapse-tooltip": "Slå sammen",
+ "tux-editor-message-tools-show-editor": "Vis i wikieditoren",
+ "tux-editor-message-tools-history": "Historik",
+ "tux-editor-message-tools-delete": "Slet",
+ "tux-editor-message-tools-translations": "Alle oversættelser",
+ "tux-editor-message-tools-linktothis": "Link til denne besked",
+ "tux-editor-loading": "Indlæser ...",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|mere sprog|flere sprog}}",
+ "translate-statsbar-tooltip": "$1% oversatte, $2% korrekturlæste",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% oversatte, $2% korrekturlæste, $3% forældede",
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|mere gruppe|flere grupper}}",
+ "specialpages-group-translation": "Oversættelse"
+}
diff --git a/Translate/i18n/core/dag.json b/Translate/i18n/core/dag.json
new file mode 100644
index 00000000..6a1cd138
--- /dev/null
+++ b/Translate/i18n/core/dag.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Achiri Bitamsimli",
+ "Alhaj Darajaati",
+ "Chirifo",
+ "Dnshitobu",
+ "Hidrash",
+ "Mo Yumzaa",
+ "Munkaila Sulemana",
+ "Ruky Wunpini",
+ "Sir Amugi",
+ "Yakubu Fadilatu"
+ ]
+ },
+ "supportedlanguages": "Zuliya shaŋa din mali tumdi tuma.",
+ "translate-smg-group-with-error-summary": "$1{{PLURAL:$1|satarli/satara}}din mali gadama.",
+ "translate-smg-group-message-action-history": "Taarihi",
+ "translate-smg-group-message-tag-outdated": "Din lan kani",
+ "translate-smg-group-message-tag-rename": "Labi ti yuli",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|Tag|Tags}}:",
+ "translate-smg-group-message-message-content": "Din bei dini",
+ "translate-smg-group-message-message-target": "Yuli nya",
+ "translate-smg-group-message-message-replacement": "Taɣibu",
+ "translate-smg-group-message-message-other-langs": "Bali shɛŋa din pahi:",
+ "translate-manage-source-message-not-found": "Lahibali gbunni kani",
+ "translate-documentation-language": "Satarili sabisɔŋ",
+ "translate-messagebundle-error-empty-value": "Key\"$1\" ka timsim"
+}
diff --git a/Translate/i18n/core/de-ch.json b/Translate/i18n/core/de-ch.json
new file mode 100644
index 00000000..db6330de
--- /dev/null
+++ b/Translate/i18n/core/de-ch.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Filzstift",
+ "Geitost",
+ "MichaelFrey",
+ "The Evil IP address"
+ ]
+ },
+ "translate-page-description-hasoptional": "Diese Nachrichtengruppe enthält optionale Nachrichten.\nOptionale Nachrichten sollten nur dann übersetzt werden, sofern es in deiner Sprache Bedarf für sie gibt,\nwie beispielsweise die Nichtverwendung von Leerschlägen oder die Transkription von Eigennamen. $1",
+ "translate-edit-no-information": "<em>Zu dieser Nachricht ist keine Dokumentation vorhanden.\nSofern du weisst, wo und in welchem Zusammenhang sie genutzt wird, kannst du anderen Übersetzern bei ihrer Arbeit helfen, indem du eine Dokumentation hinzufügst.</em>"
+}
diff --git a/Translate/i18n/core/de-formal.json b/Translate/i18n/core/de-formal.json
new file mode 100644
index 00000000..16e09bd4
--- /dev/null
+++ b/Translate/i18n/core/de-formal.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Geitost",
+ "Imre",
+ "Kghbln",
+ "MichaelFrey",
+ "Tacsipacsi",
+ "Umherirrender"
+ ]
+ },
+ "translate-page-description-hasoptional": "Diese Nachrichtengruppe enthält optionale Nachrichten.\nOptionale Nachrichten sollten nur dann übersetzt werden, sofern es in Ihrer Sprache Bedarf für sie gibt,\nwie beispielsweise die Nichtverwendung von Leerzeichen oder die Transkription von Eigennamen. $1",
+ "translate-edit-no-information": "''Zu dieser Nachricht ist keine Dokumentation vorhanden.''\nSofern Sie wissen, wo und in welchem Zusammenhang sie genutzt wird, können Sie anderen Übersetzern bei ihrer Arbeit helfen, indem Sie eine Dokumentation hinzufügen.",
+ "translate-edit-nopermission": "Sie benötigen Übersetzerrechte, um Nachrichten übersetzen zu können.",
+ "translate-checks-fudforum-syntax": "Bitte benutzen Sie <nowiki>$1</nowiki> anstatt <nowiki>$2</nowiki> in diesem Projekt.",
+ "translate-statsf-intro": "Sie können einfache Statistiken mit diesem Formular erstellen. Alle Werte haben untere und oberere Limits.",
+ "translations-summary": "Geben Sie einen Nachrichtennamen ein, um alle verfügbaren Übersetzungen anzuzeigen.",
+ "translate-translations-including-no-param": "Bitte geben Sie einen gültigen Nachrichtennamen als Unterseitenparameter an",
+ "translate-langstats-incomplete": "Einige der Statistiken auf dieser Seite sind unvollständig. Laden Sie sie erneut, um weitere Statistiken zu erhalten.",
+ "translate-manage-nochanges-other": "Es gibt keine Änderungen für diese Sprache.\nVerwenden Sie den Verweis unten, um zur Gruppendetailübersicht zurück zu gehen.",
+ "translate-manage-inconsistent": "Es wurden Inkonsistenzen in der Anfrage festgestellt.\nBitte überprüfen Sie Ihre Änderungen und versuchen Sie es erneut.\nDetails: $1",
+ "translate-manage-toolong": "Die maximale Verarbeitungszeit von $1 {{PLURAL:$1|Sekunde|Sekunden}} ist abgelaufen.\nBitte schicken Sie das Formular noch einmal ab, um die Verarbeitung fortzusetzen.",
+ "translate-manage-intro-other": "Hier ist eine Liste von Übersetzungsänderungen der Sprache $1.\nBitte kontrollieren Sie die Änderungen und wählen Sie je eine Aktion, die Sie auf die Übersetzungen anwenden möchten.\nWenn Sie sich entscheiden, Änderungen zu ignorieren, werden sie mit dem nächsten Export überschrieben."
+}
diff --git a/Translate/i18n/core/de.json b/Translate/i18n/core/de.json
new file mode 100644
index 00000000..dd75533b
--- /dev/null
+++ b/Translate/i18n/core/de.json
@@ -0,0 +1,465 @@
+{
+ "@metadata": {
+ "authors": [
+ "Als-Holder",
+ "Brettchenweber",
+ "Geitost",
+ "Giftpflanze",
+ "Imre",
+ "Inkowik",
+ "Kghbln",
+ "Lukas9950",
+ "Lyzzy",
+ "MF-Warburg",
+ "Metalhead64",
+ "MichaelFrey",
+ "Pill",
+ "Purodha",
+ "Raimond Spekking",
+ "SVG",
+ "Sebastian Wallroth",
+ "Shirayuki",
+ "Tacsipacsi",
+ "Tbleher",
+ "The Evil IP address",
+ "Tobi 406",
+ "Umherirrender"
+ ]
+ },
+ "translate": "Übersetzen",
+ "translate-extensionname": "Translate",
+ "translate-desc": "Erweitert das Wiki um eine [[Special:Translate|Spezialseite]] zum Übersetzen von MediaWiki und weiterem",
+ "translate-fuzzybot-desc": "Dies ist ein spezielles System-Benutzerkonto, das von der MediaWiki-Softwareerweiterung [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate „Translate“] verwendet wird, um Übersetzungen zu warten.\nDieses Benutzerkonto ist Teil der MediaWiki-Software und gehört keinem Benutzer.",
+ "translate-taskui-export-to-file": "Im systemeigenen Format exportieren",
+ "translate-taskui-export-as-po": "Für die Offline-Übersetzung exportieren",
+ "translate-taskui-export-as-csv": "Im CSV-Format exportieren",
+ "translate-export-csv-message-title": "Übersetzung Nachrichtentitel",
+ "translate-export-csv-definition": "Definition der Nachricht",
+ "translate-taction-translate": "Übersetzen",
+ "translate-taction-proofread": "Überprüfen",
+ "translate-taction-lstats": "Statistiken zu Sprachen",
+ "translate-taction-mstats": "Statistiken zu Nachrichtengruppen",
+ "translate-taction-export": "Exportieren",
+ "translate-taction-disabled": "Diese Aktion ist in diesem Wiki deaktiviert.",
+ "translate-page-no-such-language": "Die angegebene Sprache ist ungültig.",
+ "translate-page-no-such-group": "Die angegebene Gruppe ist ungültig.",
+ "translate-page-disabled": "Übersetzungen in diese Sprache wurden für diese Gruppe deaktiviert.\nGrund:\n\n<em>$1</em>",
+ "translate-language-disabled": "Übersetzungen in diese Sprachen sind nicht möglich.",
+ "translate-page-settings-legend": "Einstellungen",
+ "translate-page-group": "Gruppe",
+ "translate-page-language": "Sprache",
+ "translate-page-limit": "Limit",
+ "translate-page-limit-option": "{{PLURAL:$1|Eine Nachricht|$1 Nachrichten}} pro Seite",
+ "translate-submit": "Hole",
+ "translate-page-navigation-legend": "Navigation",
+ "translate-page-showing": "Systemnachrichten $1 bis $2 von insgesamt $3",
+ "translate-page-showing-all": "{{PLURAL:$1|Eine Systemnachricht|$1 Systemnachrichten}}",
+ "translate-page-showing-none": "Es sind keine Nachrichten zur Anzeige vorhanden.",
+ "translate-next": "nächste Seite",
+ "translate-prev": "vorherige Seite",
+ "translate-page-description-legend": "Informationen über diese Gruppe",
+ "translate-page-description-hasoptional": "Diese Nachrichtengruppe enthält optionale Nachrichten.\nOptionale Nachrichten sollten nur dann übersetzt werden, sofern es in deiner Sprache Bedarf für sie gibt,\nwie beispielsweise die Nichtverwendung von Leerzeichen oder die Transkription von Eigennamen. $1",
+ "translate-page-description-hasoptional-open": "Optionale Nachrichten anzeigen.",
+ "translate-page-edit": "bearbeiten",
+ "translate-optional": "(optional)",
+ "translate-ignored": "(ignoriert)",
+ "translate-edit-title": "„$1“ bearbeiten",
+ "translate-edit-definition": "Nachricht im Original",
+ "translate-edit-contribute": "bearbeiten",
+ "translate-edit-no-information": "<em>Zu dieser Nachricht ist keine Dokumentation vorhanden.\nSofern du weißt, wo und in welchem Zusammenhang sie genutzt wird, kannst du anderen Übersetzern bei ihrer Arbeit helfen, indem du eine Dokumentation hinzufügst.</em>",
+ "translate-edit-information": "Information zur Nachricht ($1)",
+ "translate-edit-warnings": "Warnungen zu unvollständigen Übersetzungen",
+ "translate-edit-tmmatch-source": "Übersetzungsquelltext: $1",
+ "translate-edit-tmmatch": "$1 % Übereinstimmung",
+ "translate-edit-nopermission": "Du benötigst Übersetzerrechte, um Nachrichten übersetzen zu können.",
+ "translate-edit-askpermission": "Berechtigung erhalten",
+ "exporttranslations": "Übersetzungen exportieren",
+ "translate-export-form-format": "Format",
+ "translate-export-invalid-format": "Bitte ein gültiges Format angeben.",
+ "translate-export-not-supported": "Das Exportieren von Übersetzungen wird nicht unterstützt.",
+ "translate-export-format-notsupported": "Das angegebene Exportformat wird von der Nachrichtengruppe nicht unterstützt.",
+ "translate-export-group-too-large": "Die gewählte Nachrichtengruppe ist zu groß. Wähle eine Nachrichtengruppe, die weniger als $1 {{PLURAL:$1|Nachricht|Nachrichten}} enthält oder wende dich an einen Übersetzungsadministrator, um Rat zu erhalten.",
+ "translate-checks-parameters": "{{PLURAL:$2|Der folgende Parameter wird|Die folgenden Parameter werden}} nicht benutzt:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Der folgende Parameter ist|Die folgenden Parameter sind}} unbekannt:\n<strong>$1</strong>",
+ "translate-checks-balance": "Die {{PLURAL:$2|folgende Klammersetzung ist|folgenden Klammersetzungen sind}} nicht ausgeglichen:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Der folgende Link ist|Die folgenden $2 Links sind}} problematisch:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Der folgende Link fehlt|Die folgenden $2 Links fehlen}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Die Übersetzungsvorlage verwendet <nowiki>{{PLURAL:}}</nowiki>, die Übersetzung aber nicht.",
+ "translate-checks-plural-forms": "Zu <nowiki>{{PLURAL:}}</nowiki>{{PLURAL:$1|wurde eine Ausprägung|wurden $1 Ausprägungen}} angegeben. Es {{PLURAL:$2|wird allerdings nur eine Ausprägung|werden allerdings nur $2 Ausprägungen}} unterstützt (auschließlich 0= und 1= forms).",
+ "translate-checks-plural-dupe": "Zu <nowiki>{{PLURAL:}}</nowiki> wurden zwei gleiche Ausprägungen angegeben. Bspw. sollte aber <nowiki>{{PLURAL:$1|Milch|Milch}}</nowiki> als <nowiki>{{PLURAL:$1|Milch}}</nowiki> angegeben werden.",
+ "translate-checks-gettext-plural-missing": "Diese Übersetzung muss <nowiki>{{PLURAL:GETTEXT|}}</nowiki> haben.",
+ "translate-checks-gettext-plural-unsupported": "Diese Nachricht unterstützt kein <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-count": "<nowiki>{{PLURAL:GETTEXT|}}</nowiki> akzeptiert genau $1 {{PLURAL:$1|Pluralform|Pluralformen}}. Gegenwärtig {{PLURAL:$2|ist eine Pluralform|sind $2 Pluralformen}} angegeben.",
+ "translate-checks-smartformat-plural-missing": "Diese Übersetzung muss Plural in der Variable $1 verwenden.",
+ "translate-checks-smartformat-plural-unsupported": "Diese Nachricht unterstützt keinen Plural in der Variable $1.",
+ "translate-checks-smartformat-plural-count": "Falsche Anzahl an Pluralformen in <strong>$3</strong>. Notwending {{PLURAL:$1|ist eine Pluralforme|sind $2 Pluralformen}}. Gegenwärtig {{PLURAL:$2|ist eine Pluralform|sind $2 Pluralformen}} vorhanden.",
+ "translate-checks-unicode-plural-missing": "Diese Übersetzung muss <nowiki>{{PLURAL|}}</nowiki> haben.",
+ "translate-checks-unicode-plural-unsupported": "Diese Nachricht unterstützt kein <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-invalid": "Pluralformen sollten als $1 definiert sein. Diese Übersetzung enthält $2.",
+ "translate-checks-pagename": "Der Namensraum weicht von dem in der Übersetzungsvorlage ab.",
+ "translate-checks-format": "Diese Übersetzung entspricht nicht der Übersetzungsvorlage oder enthält eine ungültige Syntax: $1",
+ "translate-checks-escape": "{{PLURAL:$2|Das folgende Escape-Zeichen kann|Die folgenden Escape-Zeichen können}} versehentlich vorhanden sein: <strong>$1</strong>. {{PLURAL:$4|Ein gültiges Escape-Zeichen ist|Gültige Escape-Zeichen sind:}} $3.",
+ "translate-checks-parametersnotequal": "Die Parameteranzahl ist {{PLURAL:$1|$1}}, sollte aber {{PLURAL:$2|$2}} sein.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> ist formal ungültig.",
+ "translate-checks-fudforum-syntax": "Bitte benutze in diesem Projekt <nowiki>$1</nowiki> anstatt <nowiki>$2</nowiki>.",
+ "translate-checks-newline-missing-start": "Am Anfang der Übersetzung {{PLURAL:$1|fehlt ein|fehlen $1}} Zeilenumbruchzeichen.",
+ "translate-checks-newline-missing-end": "Am Ende der Übersetzung {{PLURAL:$1|fehlt ein|fehlen $1}} Zeilenumbruchzeichen.",
+ "translate-checks-newline-extra-start": "Am Anfang der Übersetzung {{PLURAL:$1|ist ein zusätzliches|sind $1 zusätzliche}} Zeilenumbruchzeichen.",
+ "translate-checks-newline-extra-end": "Am Ende der Übersetzung {{PLURAL:$1|ist ein zusätzliches|sind $1 zusätzliche}} Zeilenumbruchzeichen.",
+ "translate-checks-value-not-present": "Die Übersetzung muss {{PLURAL:$1|1=|einem der folgenden Werte entsprechen:}} $1.",
+ "translate-checks-replacement": "Verwende $2 anstatt $1.",
+ "translate-checks-empty": "Übersetzungen ohne Inhalt oder nur mit Leerzeichen sind nicht zulässig.",
+ "translate-pref-editassistlang": "Unterstützungssprachen:",
+ "prefs-translate": "Übersetzungsoptionen",
+ "translate-pref-editassistlang-help": "Mit Kommas getrennte Liste von Sprachcodes.\nDie Übersetzungen der Nachrichten in den gewählten Sprachen werden beim Übersetzen angezeigt.\nDie Standardliste ist abhängig von der Sprache der Benutzeroberfläche.",
+ "translate-pref-editassistlang-bad": "In der Liste ist ein ungültiger Sprachcode enthalten:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Bearbeitungen mithilfe der Übersetzungsoberfläche tätigen",
+ "action-translate": "Bearbeitungen mithilfe der Übersetzungsoberfläche zu tätigen",
+ "right-translate-manage": "Nachrichtengruppen verwalten",
+ "action-translate-manage": "Nachrichtengruppen zu verwalten",
+ "right-translate-import": "Offlineübersetzungen importieren",
+ "action-translate-import": "Offlineübersetzungen zu importieren",
+ "right-translate-messagereview": "Übersetzungen überprüfen",
+ "action-translate-messagereview": "Übersetzungen zu überprüfen",
+ "right-translate-groupreview": "Arbeitsablaufstatus von Nachrichtengruppen ändern",
+ "action-translate-groupreview": "den Workflow-Status von Nachrichtengruppen zu ändern",
+ "translate-rcfilters-translations": "Übersetzungen",
+ "translate-rcfilters-translations-only-label": "Übersetzungen",
+ "translate-rcfilters-translations-only-desc": "Änderungen an übersetzten Seiten.",
+ "translate-rcfilters-translations-filter-label": "Keine Übersetzungen",
+ "translate-rcfilters-translations-filter-desc": "Alle Änderungen, die keine Übersetzungen sind.",
+ "translate-rcfilters-translations-site-label": "Systemnachrichten der Website",
+ "translate-rcfilters-translations-site-desc": "Anpassungen an Systemnachrichten der Website im MediaWiki-Namensraum.",
+ "translate-rc-translation-filter": "Übersetzungen filtern:",
+ "translate-rc-translation-filter-no": "nichts",
+ "translate-rc-translation-filter-only": "Zeige nur Übersetzungen",
+ "translate-rc-translation-filter-filter": "Übersetzungen filtern",
+ "translate-rc-translation-filter-site": "Nur Änderungen an den Nachrichten des Wikis",
+ "translationstats": "Statistiken zu Übersetzungen",
+ "translate-stats-edits": "Bearbeitungen",
+ "translate-stats-users": "Übersetzer",
+ "translate-stats-registrations": "Registrierungen",
+ "translate-stats-reviews": "Übersetzungsprüfungen",
+ "translate-stats-reviewers": "Übersetzungsprüfer",
+ "translate-statsf-intro": "Du kannst mit diesem Formular einfache Statistiken erstellen.\nAlle Werte haben obere und untere Begrenzungen.",
+ "translate-statsf-options": "Diagrammoptionen",
+ "translate-statsf-width": "Breite in Pixel:",
+ "translate-statsf-height": "Höhe in Pixel:",
+ "translate-statsf-days": "Zeitraum in Tagen:",
+ "translate-statsf-start": "Anfangsdatum:",
+ "translate-statsf-scale": "Granularität:",
+ "translate-statsf-scale-years": "Jahre",
+ "translate-statsf-scale-months": "Monate",
+ "translate-statsf-scale-weeks": "Wochen",
+ "translate-statsf-scale-days": "Tage",
+ "translate-statsf-scale-hours": "Stunden",
+ "translate-statsf-count": "Maßstab:",
+ "translate-statsf-count-edits": "Anzahl Bearbeitungen",
+ "translate-statsf-count-users": "Aktive Übersetzer",
+ "translate-statsf-count-registrations": "Neue Benutzer",
+ "translate-statsf-count-reviews": "Übersetzungsprüfungen",
+ "translate-statsf-count-reviewers": "Übersetzungsprüfer",
+ "translate-statsf-language": "Komma-getrennte Liste der Sprachcodes:",
+ "translate-statsf-group": "Komma-getrennte Liste der Gruppencodes:",
+ "translate-statsf-submit": "Vorschau",
+ "translate-statsf-unknown-error": "Es ist ein unbekannter Fehler aufgetreten.",
+ "translate-statsf-error-message": "Beim Laden der Grafik gab es einen Fehler: $1",
+ "translate-statsf-graph-alt-text-info": "Textalternative für die Übersetzungsstatistik in der folgenden Datentabelle.",
+ "translate-statsf-alt-text": "Dies ist die Textalternative für die Übersetzungsstatistik.",
+ "translate-statsf-embed": "Code zum Einbetten des Übersetzungsstatistik-Graphen auf anderen Seiten.",
+ "translate-tag-page-desc": "Übersetzung der Wikiseite [[$2|$1]] von $3 ($4).",
+ "translate-tag-page-wikipage-desc": "[[$1|Übersetzung]] der Seite [[$2]] von <bdi>$3</bdi> ($4) in <bdi>$5</bdi> ($6)",
+ "translate-sidebar-alltrans": "In anderen Sprachen",
+ "translations": "Alle Übersetzungen",
+ "translations-summary": "Gib einen Nachrichtennamen ein, um alle verfügbaren Übersetzungen anzuzeigen.",
+ "translate-translations-no-message": "„$1“ ist keine übersetzbare Nachricht",
+ "translate-translations-none": "Keine Übersetzungen für „$1“ verfügbar",
+ "translate-translations-count": "Es {{PLURAL:$1|wurde eine Übersetzung|wurden $1 Übersetzungen}} gefunden.",
+ "translate-translations-fieldset-title": "Nachricht",
+ "translate-translations-messagename": "Name:",
+ "translate-translations-project": "Projekt:",
+ "translate-translations-including-no-param": "Bitte gib einen gültigen Nachrichtennamen als Unterseitenparameter an",
+ "translate-translations-history-short": "V",
+ "languagestats": "Statistiken zu Sprachen",
+ "languagestats-summary": "Diese Seite zeigt Statistiken zu Übersetzungen für alle Nachrichtengruppen einer Sprache.",
+ "messagegroupstats-summary": "Diese Seite zeigt Statistiken zu Nachrichtengruppen.",
+ "languagestats-stats-for": "Übersetzungsstatistik für die Sprache $1 ($2).",
+ "languagestats-recenttranslations": "Aktuelle Übersetzungen",
+ "translate-langstats-incomplete": "Einige der Statistiken auf dieser Seite sind unvollständig. Lade sie erneut, um weitere Statistiken zu erhalten.",
+ "translate-langstats-expand": "ausklappen",
+ "translate-langstats-collapse": "einklappen",
+ "translate-langstats-expandall": "alle ausklappen",
+ "translate-langstats-collapseall": "alle einklappen",
+ "translate-language-code": "Sprachcode",
+ "translate-language-code-field-name": "Sprachcode:",
+ "translate-suppress-complete": "Vollständig übersetzte Nachrichtengruppen unterdrücken",
+ "translate-ls-noempty": "Vollständig unübersetzte Nachrichtengruppen unterdrücken",
+ "translate-language": "Sprache",
+ "translate-total": "Nachrichten (insgesamt)",
+ "translate-untranslated": "Nachrichten (übersetzbar)",
+ "translate-percentage-complete": "Vollständig",
+ "translate-percentage-fuzzy": "Veraltet",
+ "translate-percentage-proofread": "Überprüft",
+ "translate-languagestats-overall": "Alle Gruppen zusammen",
+ "translate-ls-submit": "Statistiken anzeigen",
+ "translate-ls-column-group": "Systemnachrichtengruppe",
+ "translate-mgs-pagename": "Statistiken zu Nachrichtengruppen",
+ "translate-mgs-fieldset": "Einstellungen anzeigen",
+ "translate-mgs-group": "Gruppe:",
+ "translate-mgs-nocomplete": "Nicht die Sprachen anzeigen, zu denen die Übersetzungen fertiggestellt wurden",
+ "translate-mgs-noempty": "Nicht die Sprachen anzeigen, zu denen noch keine Übersetzungen fertiggestellt wurden",
+ "translate-mgs-submit": "Statistiken anzeigen",
+ "translate-mgs-column-language": "Sprache",
+ "translate-mgs-totals": "{{PLURAL:$1|Die gesamte Sprache|Alle $1 Sprachen zusammen}}",
+ "translate-mgs-invalid-group": "Die angegebene Nachrichtengruppe $1 ist nicht vorhanden.",
+ "translate-mgs-nothing": "Zu den angeforderten Statistiken gibt es keine anzuzeigenden Daten.",
+ "translate-tes-server-error": "Suchvorschläge konnten nicht abgerufen werden",
+ "translate-tes-group-not-found": "Keine passenden Ergebnisse",
+ "translate-tes-type-to-search": "Tippe, um zu suchen zu beginnen",
+ "supportedlanguages": "Aktive Sprachen",
+ "supportedlanguages-summary": "Diese Seite zeigt eine Liste aller auf {{SITENAME}} aktiven Sprachen, zusammen mit den Namen der Übersetzer, die an der jeweiligen Sprache mitgearbeitet haben.\nJe intensiver ein Übersetzer mitgearbeitet hat, desto größer wird sein Benutzername angezeigt.\nDie zur Unterstreichung des Benutzernamens genutzte Farbe zeigt an, wann der Übersetzer zuletzt aktiv mitgearbeitet hat.",
+ "supportedlanguages-colorlegend": "Legende zu den Farben: Letzte Übersetzung vor $1 Tagen.",
+ "supportedlanguages-sqlite-error": "SQLite wird nicht unterstützt",
+ "supportedlanguages-postgres-error": "PostgreSQL wird nicht unterstützt",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Übersetzer|Übersetzerin}}|Übersetzer}}: $1",
+ "supportedlanguages-recenttranslations": "Aktuelle Übersetzungen",
+ "supportedlanguages-count": "Insgesamt $1 {{PLURAL:$1|Sprache|Sprachen}}.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|Bearbeitung|Bearbeitungen}} - letzte Bearbeitung vor $3 {{PLURAL:$3|Tag|Tagen}}",
+ "translate-supportedlanguages-cached": "Diese Informationen wurden vor $1 zwischengespeichert.",
+ "translate-activelanguages-invalid-code": "Der Sprachcode „$1“ ist unbekannt oder nicht für die Übersetzung aktiviert.",
+ "abusefilter-edit-builder-vars-translate-source-text": "Quelltext der Übersetzungseinheit",
+ "abusefilter-edit-builder-vars-translate-target-language": "Zielsprache für die Übersetzung",
+ "translate-jssti-add": "Zur Liste hinzufügen",
+ "managemessagegroups": "Nachrichtengruppenverwaltung",
+ "translate-smg-notallowed": "Du bist nicht berechtigt, diese Aktion durchzuführen.",
+ "translate-smg-nochanges": "Es gibt keine zu verarbeitenden Änderungen.",
+ "translate-smg-submit": "Änderungen zum Verarbeiten übertragen",
+ "translate-smg-submitted": "Nachrichtendefinitionen wurden aktualisiert. Änderungen werden im Hintergrund verarbeitet.",
+ "translate-smg-submitted-with-failure": "Die Aktualisierung der {{PLURAL:$1|Nachrichtendefinition|Nachrichtendefinitionen}} für die {{PLURAL:$1|folgende Gruppe|folgenden Gruppe}} schlug fehl - $2. $3",
+ "translate-smg-submitted-others-processing": "Nachrichtendefintionen für andere Gruppen werden im Hintergrund verarbeitet.",
+ "translate-smg-more": "Nach dem Speichern dieser Änderungen müssen weitere Änderungen verarbeitet werden.",
+ "translate-smg-left": "Nachrichteninhalt im Wiki",
+ "translate-smg-right": "Eingegangene Änderungen",
+ "translate-smg-rename-select": "Auswählen",
+ "translate-smg-rename-cancel": "Abbrechen",
+ "translate-smg-rename-search": "Nach passender Nachricht suchen …",
+ "translate-smg-rename-select-err": "Bitte eine Nachricht zum Umbenennen auswählen",
+ "translate-smg-rename-no-msg": "Keine Nachrichten gefunden.",
+ "translate-smg-rename-new": "Hinzufügen als neu …",
+ "translate-smg-rename-rename": "Hinzufügen als Umbenennung von …",
+ "translate-smg-rename-dialog-title": "Passende Umbenennung für $1 auswählen",
+ "translate-smg-changeset-modified": "Das Änderungsset wurde von einem anderen Benutzer oder Prozess geändert. Deine Änderungen können nicht veröffentlicht werden, da sie deren Änderungen möglicherweise überschreiben. Bitte lade die Seite neu, um die neuesten Änderungen zu sehen.",
+ "translate-smg-no-groups-in-sync": "Es sind derzeit keine Gruppen in Synchronisation",
+ "translate-smg-strong-sync-help": "Hilfe",
+ "translate-smg-groups-in-sync": "Gruppen, die derzeit synchronisiert werden",
+ "translate-smg-groups-in-sync-list": "Liste der Gruppen, die gerade im Hintergrund bearbeitet werden:",
+ "translate-smg-groups-with-error-title": "Gruppen, die bei der Synchronisation Fehler hatten",
+ "translate-smg-groups-with-error-desc": "Liste der Gruppen und ihrer Nachrichten, die bei der Synchronisierung Fehler hatten:",
+ "translate-smg-group-with-error-summary": "$1 {{PLURAL:$1|Meldung|Meldungen}} mit Fehlern:",
+ "translate-smg-group-message-action-history": "Versionsgeschichte",
+ "translate-smg-group-action-resolve": "Als erledigt markieren",
+ "translate-smg-group-sync-error-warn": "Diese Gruppe hatte einen Fehler bei der Synchronisation. Bitte behebe die Fehler, bevor du diese Gruppe bearbeitest.",
+ "translate-smg-group-message-tag-outdated": "Veraltet",
+ "translate-smg-group-message-tag-rename": "Umbenennen",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|Tag|Tags}}:",
+ "translate-smg-group-message-message-content": "Inhalt:",
+ "translate-smg-group-message-message-target": "Ziel:",
+ "translate-smg-group-message-message-replacement": "Ersetzen:",
+ "translate-smg-group-message-message-other-langs": "Andere Sprachen:",
+ "translate-smg-loading": "Laden …",
+ "translate-smg-unknown-error": "Es ist ein unbekannter Fehler bei der Bearbeitung deiner Anfrage aufgetreten.",
+ "translate-manage-import-diff": "Nachricht $1 | Aktionen: $2",
+ "translate-manage-import-new": "Neue Nachricht $1",
+ "translate-manage-import-deleted": "Gelöschte Nachricht $1",
+ "translate-manage-action-import": "Importieren",
+ "translate-manage-action-conflict": "Importieren und als „zu kontrollieren“ markieren",
+ "translate-manage-action-ignore": "Ignorieren",
+ "translate-manage-action-fuzzy": "Importiere und markiere Übersetzung als „zu kontrollieren“",
+ "translate-manage-action-rename-fuzzy": "Umbenennen und Übersetzungen als fuzzy markieren",
+ "translate-manage-action-rename": "Umbenennen",
+ "translate-manage-action-ignore-change": "Änderung der Übersetzung ignorieren",
+ "translate-manage-nochanges": "Es gibt keine Änderungen an Definitionen zu Nachrichten dieser Gruppe.",
+ "translate-manage-nochanges-other": "Es gibt keine Änderungen für diese Sprache.\nVerwende den Verweis unten, um zur Gruppendetailübersicht zurück zu gehen.",
+ "translate-manage-inconsistent": "Es wurden Inkonsistenzen in der Anfrage festgestellt.\nBitte überprüfe deine Änderungen und versuche es erneut.\nDetails: $1",
+ "translate-manage-toolong": "Die maximale Verarbeitungszeit von $1 {{PLURAL:$1|Sekunde|Sekunden}} ist abgelaufen.\nBitte schicke das Formular noch einmal ab, um die Verarbeitung fortzusetzen.",
+ "translate-manage-import-summary": "Neue Version von externer Quelle importiert",
+ "translate-manage-import-ignore": "Überspringe Nachricht $1.",
+ "translate-manage-import-rename-summary": "In externer Quelle umbenannt",
+ "translate-manage-conflict-summary": "Neue Version von externer Quelle importiert.\nBitte überprüfen.",
+ "translate-manage-submit": "Ausführen",
+ "translate-manage-intro-other": "Hier ist eine Liste von Übersetzungsänderungen der Sprache $1.\nBitte kontrolliere die Änderungen und wähle je eine Aktion, die du auf die Aktualisierungen anwenden möchtest.\nWenn du dich entscheidest, Änderungen zu ignorieren, ist diese Aktion nur vorübergehend.",
+ "translate-manage-import-ok": "Importiert: $1",
+ "translate-manage-import-done": "Import abgeschlossen!",
+ "translate-manage-empty-content": "Der Inhalt ist leer",
+ "translate-manage-key-reused": "Diese Systemnachricht existiert bereits im Wiki. Prüfe auf eine versehentliche Wiederverwendung eines alten Schlüssels.",
+ "translate-manage-source-message-not-found": "Nachrichten-Definition nicht gefunden",
+ "importtranslations": "Übersetzungen importieren",
+ "translate-import-from-local": "Lokale Datei hochladen:",
+ "translate-import-load": "Datei laden",
+ "translate-import-err-dl-failed": "Datei kann nicht abgerufen werden:\n$1",
+ "translate-import-err-ul-failed": "Das Hochladen der Datei ist fehlgeschlagen",
+ "translate-import-err-invalid-title": "Der angegebene Dateiname <nowiki>$1</nowiki> war ungültig.",
+ "translate-import-err-no-such-file": "Die Datei <nowiki>$1</nowiki> existiert nicht oder wurde nicht lokal hochgeladen.",
+ "translate-import-err-stale-group": "Die Nachrichtengruppe, der diese Datei zugeordnet wurde, ist nicht vorhanden.",
+ "translate-import-err-no-headers": "Die Datei ist keine Datei im Gettext-Format der Erweiterung „Translate“:\nDie Gruppen und Sprache konnte nicht aus dem Dateikopf ermittelt werden.",
+ "translate-js-support-unsaved-warning": "Es sind nicht veröffentlichte Übersetzungen vorhanden.",
+ "translate-gs-pos": "Pos.",
+ "translate-gs-code": "Code",
+ "translate-gs-continent": "Kontinent",
+ "translate-gs-speakers": "Sprecher",
+ "translate-gs-score": "Ergebnis",
+ "translate-gs-multiple": "Mehrere",
+ "translate-gs-count": "Anzahl",
+ "translate-gs-total": "Insgesamt",
+ "translate-gs-avgscore": "Durchschnittliches Ergebnis",
+ "translate-documentation-language": "Nachrichtendokumentation",
+ "translate-searchprofile": "Übersetzungen",
+ "translate-searchprofile-tooltip": "Suche in allen Übersetzungen",
+ "translate-searchprofile-note": "Weitere Suchoptionen sind mit der [$1 Übersetzungssuche] verfügbar.",
+ "translate-search-languagefilter": "Nach Sprache filtern:",
+ "translate-search-nofilter": "Alle Sprachen",
+ "log-name-translationreview": "Übersetzungsprüfungs-Logbuch",
+ "log-description-translationreview": "Logbuch aller Übersetzungsprüfungen an Übersetzungen und Nachrichtengruppen.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|überprüfte}} die Übersetzung $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|änderte}} den Status der Übersetzungen in der Sprache „$4“ der Seite „$3“ von „$6“ in „$7“",
+ "group-translate-sandboxed": "Unbestätigte Übersetzer",
+ "group-translate-sandboxed-member": "{{GENDER:$1|Unbestätigter Übersetzer|Unbestätigte Übersetzerin}}",
+ "right-translate-sandboxmanage": "Spielwiesenbenutzer verwalten",
+ "action-translate-sandboxmanage": "Spielwiesenbenutzer zu verwalten",
+ "right-translate-sandboxaction": "Aktionen ausführen, die für Spielwiesenbenutzer erlaubt sind",
+ "action-translate-sandboxaction": "Aktionen auszuführen, die für Spielwiesenbenutzer erlaubt sind",
+ "translate-workflow-state-": "(nicht gesetzt)",
+ "translate-workflowstatus": "Status: $1",
+ "translate-workflow-set-doing": "Wird eingestellt …",
+ "translate-workflow-autocreated-summary": "Automatische Erstellung der Seite für Arbeitsablaufstatus $1",
+ "translate-stats-workflow": "Status",
+ "translate-workflowgroup-label": "Arbeitsablaufstatus",
+ "translate-workflowgroup-desc": "Diese Nachrichtengruppe zeigt die Status zum Arbeitsablauf beim Übersetzungen.\nDie Status werden mit der Konfigurationsvariablen <code lang=\"en\">$wgTranslateWorkflowStates</code> definiert.",
+ "translate-dynagroup-recent-label": "Aktuelle Übersetzungen",
+ "translate-dynagroup-recent-desc": "Diese Nachrichtengruppe zeigt alle aktuellen Übersetzungen in diese Sprache an.\nAm nützlichsten ist sie für die Aufgaben des Überprüfens.",
+ "translate-dynagroup-additions-label": "Aktuelle Ergänzungen",
+ "translate-dynagroup-additions-desc": "Diese Nachrichtengruppe zeigt neue und geänderte Nachrichten an.",
+ "translate-msggroupselector-projects": "Nachrichtengruppe",
+ "translate-msggroupselector-search-placeholder": "Gruppen durchsuchen",
+ "translate-msggroupselector-search-all": "Alle",
+ "translate-msggroupselector-search-recent": "Aktuell",
+ "translate-msggroupselector-view-subprojects": "{{PLURAL:$1|Eine Untergruppe|$1 Untergruppen}}",
+ "tux-languageselector": "Übersetzen auf",
+ "tux-select-target-language": "Zielsprache für die Übersetzung",
+ "tux-tab-all": "Alle",
+ "tux-tab-untranslated": "Nicht übersetzt",
+ "tux-tab-outdated": "Veraltet",
+ "tux-tab-translated": "Übersetzt",
+ "tux-tab-unproofread": "Ungeprüfte",
+ "tux-edit": "Bearbeiten",
+ "tux-status-optional": "Optional",
+ "tux-status-fuzzy": "Veraltet",
+ "tux-status-proofread": "Überprüft",
+ "tux-status-translated": "Übersetzt",
+ "tux-status-saving": "Veröffentlichen …",
+ "tux-status-unsaved": "Nicht veröffentlicht",
+ "tux-save-unknown-error": "Es ist ein unbekannter Fehler aufgetreten.",
+ "tux-editor-placeholder-documentation": "Nachrichtendokumentation hinzufügen",
+ "tux-editor-placeholder-language": "Deine Übersetzung in $1",
+ "tux-editor-editsummary-placeholder": "Erläutere bitte deine Änderungen (optional)",
+ "tux-editor-paste-original-button-label": "Quelltext einfügen",
+ "tux-editor-discard-changes-button-label": "Änderungen verwerfen",
+ "tux-editor-save-button-label": "Übersetzung speichern",
+ "tux-editor-skip-button-label": "Zur nächsten",
+ "tux-editor-cancel-button-label": "Abbrechen",
+ "tux-editor-confirm-button-label": "Übersetzung bestätigen",
+ "tux-editor-proofread-button-label": "Als überprüft markieren",
+ "tux-editor-shortcut-info": "Drücke „$1“ zum Bestätigen und gehe zur nächsten Nachricht, „$2“ zum Überspringen, „$4“, um eine Zusammenfassung anzugeben, oder halte „$3“ gedrückt, um andere Tastaturkürzel anzusehen.",
+ "tux-editor-edit-desc": "Dokumentation bearbeiten",
+ "tux-editor-add-desc": "Dokumentation hinzufügen",
+ "tux-editor-suggestions-title": "Vorschläge",
+ "tux-editor-latest-updates-title": "Letzte Aktualisierungen",
+ "tux-editor-changes-without-summary": "$1 {{PLURAL:$1|Aktualisierung|Aktualisierungen}} ohne Zusammenfassung",
+ "tux-editor-all-changes": "Alle Änderungen",
+ "tux-editor-in-other-languages": "In anderen Sprachen",
+ "tux-editor-need-more-help": "Wird weitere Hilfe benötigt?",
+ "tux-editor-ask-help": "Nach zusätzlichen Informationen fragen",
+ "tux-editor-tm-match": "$1 % Übereinstimmung",
+ "tux-notices-more": "{{PLURAL:$1|Eine weitere|$1 weitere}}",
+ "tux-notices-hide": "verstecken",
+ "tux-editor-save-failed": "Das Veröffentlichen der Übersetzung ist fehlgeschlagen: $1",
+ "tux-editor-n-uses": "{{PLURAL:$1|Einmal|$1-mal}} verwendet",
+ "tux-editor-message-desc-more": "Mehr ansehen",
+ "tux-editor-message-desc-less": "Weniger ansehen",
+ "tux-editor-clear-translated": "Übersetzte verstecken",
+ "tux-editor-proofreading-mode": "Überprüfen",
+ "tux-editor-translate-mode": "Liste",
+ "tux-editor-proofreading-hide-own-translations": "Deine Übersetzungen verstecken",
+ "tux-editor-proofreading-show-own-translations": "Deine Übersetzungen anzeigen",
+ "tux-proofread-action-tooltip": "Als überprüft markieren",
+ "tux-proofread-edit-label": "Bearbeiten",
+ "tux-editor-page-mode": "Seite",
+ "tux-editor-outdated-notice": "Diese Übersetzung muss eventuell aktualisiert werden.",
+ "tux-editor-outdated-notice-diff-link": "Unterschiede zeigen",
+ "tux-editor-doc-editor-placeholder": "Nachrichtendokumentation",
+ "tux-editor-doc-editor-save": "Dokumentation veröffentlichen",
+ "tux-editor-doc-editor-cancel": "Abbrechen",
+ "tux-messagetable-more-messages": "{{PLURAL:$1|Eine weitere Nachricht|$1 weitere Nachrichten}}",
+ "tux-messagetable-loading-messages": "Lade {{PLURAL:$1|Nachricht|Nachrichten}} …",
+ "tux-message-filter-placeholder": "Liste filtern",
+ "tux-message-filter-result": "{{PLURAL:$1|Ein Ergebnis|$1 Ergebnisse}} für „$2“ gefunden",
+ "tux-message-filter-advanced-button": "Erweiterte Suche",
+ "tux-message-filter-optional-messages-label": "Optionale Nachrichten",
+ "tux-proofread-translated-by-self": "Übersetzt von dir",
+ "tux-empty-list-all": "Diese Nachrichtengruppe ist leer",
+ "tux-empty-list-all-guide": "Wähle eine andere Nachrichtengruppe zum Übersetzen aus",
+ "tux-translate-page-no-such-group": "<strong>Die angegebene Gruppe ist nicht vorhanden.</strong> Bitte wähle eine andere Nachrichtengruppe aus.",
+ "tux-empty-list-translated": "Keine übersetzten Nachrichten",
+ "tux-empty-list-translated-guide": "Du kannst beim Übersetzen helfen",
+ "tux-empty-list-translated-action": "Übersetzen",
+ "tux-empty-no-messages-to-display": "Es sind keine Nachrichten zum Anzeigen vorhanden.",
+ "tux-empty-there-are-optional": "Es sind optionale Nachrichten vorhanden, die nicht in der Liste aufgeführt werden.",
+ "tux-empty-show-optional-messages": "Optionale Nachrichten anzeigen",
+ "tux-empty-no-outdated-messages": "Keine veralteten Nachrichten vorhanden",
+ "tux-empty-nothing-to-proofread": "Es sind keine Nachrichten zum Überprüfen vorhanden",
+ "tux-empty-you-can-help-providing": "Du kannst helfen, neue Übersetzungen zu erstellen.",
+ "tux-empty-nothing-new-to-proofread": "Es sind keine neuen Nachrichten zum Überprüfen vorhanden",
+ "tux-empty-you-can-review-already-proofread": "Du kannst Übersetzungen überprüfen, die bereits von anderen Benutzern überprüft wurden.",
+ "tux-empty-list-other": "Es ist nichts zum Übersetzen vorhanden",
+ "tux-empty-list-other-guide": "Du kannst beim Überprüfen vorhandener Übersetzungen helfen",
+ "tux-empty-list-other-action": "Übersetzungen überprüfen",
+ "tux-empty-list-other-link": "Alle Nachrichten anzeigen",
+ "tux-editor-close-tooltip": "Schließen",
+ "tux-editor-expand-tooltip": "Ausklappen",
+ "tux-editor-collapse-tooltip": "Einklappen",
+ "tux-editor-message-tools-show-editor": "Im Wiki-Editor anzeigen",
+ "tux-editor-message-tools-history": "Versionsgeschichte",
+ "tux-editor-message-tools-delete": "Löschen",
+ "tux-editor-message-tools-translations": "Alle Übersetzungen",
+ "tux-editor-message-tools-linktothis": "Auf diese Systemnachricht verlinken",
+ "tux-editor-loading": "Lade …",
+ "tux-editor-loading-failed": "Fehler beim Laden der Übersetzungshilfen: $1",
+ "translate-search-more-languages-info": "{{PLURAL:$1|Eine weitere Sprache|$1 weitere Sprachen}}",
+ "translate-statsbar-tooltip": "$1 % übersetzt, $2 % überprüft",
+ "translate-statsbar-tooltip-with-fuzzy": "$1 % übersetzt, $2 % überprüft, $3 % veraltet",
+ "translate-search-more-groups-info": "{{PLURAL:$1|Eine weitere Gruppe|$1 weitere Gruppen}}",
+ "translate-syntax-error": "Die Übersetzung enthält Syntaxfehler",
+ "tux-session-expired": "Du bist nicht mehr angemeldet. Bitte melde dich auf einer getrennten Registerkarte an. Alternativ kannst du eine Kopie deiner ungespeicherten Übersetzungen machen, dich anmelden, zu dieser Seite zurückkehren und deine Übersetzungen erneut eingeben.",
+ "tux-nojs": "Dieses Werkzeug funktioniert ohne JavaScript nicht. Es ist deaktiviert, funktioniert nicht oder dieser Browser wird nicht unterstützt.",
+ "specialpages-group-translation": "Übersetzung",
+ "content-model-translate-messagebundle": "Übersetzbares Nachrichtenpaket",
+ "translate-messagebundle-validation-error": "Ungültiges Nachrichtenpaket: $1",
+ "translate-messagebundle-error-parsing": "Fehler beim Parsen des JSON: $1",
+ "translate-messagebundle-error-invalid-array": "Nachrichtenpaket muss ein JSON-Objekt sein. Hat Typ $1",
+ "translate-messagebundle-error-key-empty": "Nachrichtenpaket darf keinen leeren Schlüssel enthalten",
+ "translate-messagebundle-error-key-too-long": "Schlüssel „$1“ ist zu lang",
+ "translate-messagebundle-error-key-invalid-characters": "Schlüssel „$1“ enthält unzulässige Zeichen",
+ "translate-messagebundle-error-invalid-value": "Schlüssel „$1“ enthält keinen String-Wert",
+ "translate-messagebundle-error-empty-value": "Schlüssel „$1“ hat keinen Wert",
+ "translate-messagebundle-error-metadata-type": "Die Metadaten müssen ein Array sein.",
+ "translate-messagebundle-error-invalid-metadata": "Der Metadatenabschnitt enthält einen unbekannten Schlüssel: „$1“. Unterstützte Schlüssel sind $2.",
+ "translate-messagebundle-error-invalid-sourcelanguage": "Der Quellsprachencode „$1“ wird nicht unterstützt.",
+ "translate-messagebundle-error-invalid-prioritylanguage": "{{PLURAL:$2|Ungültiger Code für Prioritätssprache|Ungültige Codes für Prioritätssprachen}} in den Metadaten: $1",
+ "translate-messagebundle-error-invalid-prioritylanguage-format": "Ungültiges Format der Prioritätssprache in den Metadaten. Prioritätssprachen müssen ein Array von Strings sein.",
+ "translate-messagebundle-group-description": "Nachrichten eines auf Seite [[$2|$1]] definierten Nachrichtenbündels.",
+ "translate-messagebundle-change-sourcelanguage": "Einstellung der Ausgangssprache des Nachrichtenbündels gemäß den Metadaten.",
+ "translate-messagebundle-sourcelanguage-changed": "Die Ausgangssprache eines Nachrichtenbündels kann nicht mehr geändert werden, sobald es erstellt worden ist.",
+ "log-action-filter-translationreview": "Typ der Aktion:",
+ "log-action-filter-translationreview-message": "Überprüfung der einzelnen Übersetzungsnachrichten",
+ "log-action-filter-translationreview-group": "Änderungen des Stands des Übersetzungsprozesses"
+}
diff --git a/Translate/i18n/core/din.json b/Translate/i18n/core/din.json
new file mode 100644
index 00000000..e41aec86
--- /dev/null
+++ b/Translate/i18n/core/din.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dinkawiki",
+ "Kumkumuk"
+ ]
+ },
+ "translate-page-edit": "cokic",
+ "translate-documentation-language": "Wɛ̈tcïgɔ̈t ë weltuɔc"
+}
diff --git a/Translate/i18n/core/diq.json b/Translate/i18n/core/diq.json
new file mode 100644
index 00000000..6099549c
--- /dev/null
+++ b/Translate/i18n/core/diq.json
@@ -0,0 +1,309 @@
+{
+ "@metadata": {
+ "authors": [
+ "1917 Ekim Devrimi",
+ "Archaeodontosaurus",
+ "Asmen",
+ "Dılmıc",
+ "Erdemaslancan",
+ "Gambollar",
+ "Gorizon",
+ "Gırd",
+ "Kumkumuk",
+ "Marmase",
+ "Mirzali",
+ "Orbot707"
+ ]
+ },
+ "translate": "Bıçarne",
+ "translate-desc": "MediaWiki u vêşi açarnayışan rê [[Special:Translate|Pela xısusi]]",
+ "translate-taskui-export-to-file": "Lokal format dı ateberd",
+ "translate-taskui-export-as-po": "Çerxteber açarnayışi ateberd",
+ "translate-taction-translate": "Bıçarne",
+ "translate-taction-proofread": "Çım berze cı",
+ "translate-taction-lstats": "İstatistikê zıwani",
+ "translate-taction-mstats": "İstatistikê gruba mesacan",
+ "translate-taction-export": "Teberdayış",
+ "translate-taction-disabled": "Ena fiil ena wiki dı dewre ra vet a.",
+ "translate-page-no-such-language": "Sılaste zıwan ravërde niyo.",
+ "translate-page-no-such-group": "Sılaste grub ravërde niya.",
+ "translate-page-disabled": "Ena grub dı çerx kerdena zıwani dewre ra vıciyabya. \n\n\nÇıkı:\n<em>$1</em>",
+ "translate-language-disabled": "Açarnayış no zıwan de dewre ra veto.",
+ "translate-page-settings-legend": "Eyari",
+ "translate-page-group": "Grube",
+ "translate-page-language": "Zıwan",
+ "translate-page-limit": "Limit",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|mesac|mesac}} biya",
+ "translate-submit": "Biya",
+ "translate-page-navigation-legend": "Pusula",
+ "translate-page-showing": "$3 mesacan ra [$1 ra $2] mocniyenê",
+ "translate-page-showing-all": "$1 {{PLURAL:$1|mesac|mesaci}} asenê.",
+ "translate-page-showing-none": "Mesaco ke bımocneyo çınyo.",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "Pela bahdoyêne",
+ "translate-prev": "Pela veri",
+ "translate-page-description-legend": "Heqa grube de melumat",
+ "translate-page-description-hasoptional-open": "Mesacanê waşteyan bımocne.",
+ "translate-page-edit": "bıvurne",
+ "translate-optional": "(opsiyonel)",
+ "translate-ignored": "(Nê hesıbneyine)",
+ "translate-edit-title": "\"$1\"i bıvurne",
+ "translate-edit-definition": "Şınasnayışê mesaci",
+ "translate-edit-contribute": "iştırak ke",
+ "translate-edit-no-information": "<em>''Wesiqay nê mesaci çıniya.\nŞıma ke zanê kamca ya zi senên no mesac gırweniyeno, şıma şenê tadaoğanê (açarnoğanê) binan rê qandê cıkerdışê wesiqa be nê mesaci ra peşti cı dê.</em>",
+ "translate-edit-information": "Heqa mesacê ($1) de melumat",
+ "translate-edit-tmmatch-source": "Metınê çımey açarnayışi: $1",
+ "translate-edit-tmmatch": "Zey $1%",
+ "translate-edit-nopermission": "Açarnayışê mesacan rê heqa icazetê açarnayışi icab kena.",
+ "translate-edit-askpermission": "İcazet bıgê",
+ "exporttranslations": "Açarnayışi ateber dı",
+ "translate-export-form-format": "Format",
+ "translate-checks-parameters": "{{PLURAL:$2|Parametreyê cêrêni nêgureniyayê|Parametreyo cêrên nêgureniyayo}}: <strong>$1</strong>",
+ "translate-checks-links": "{{PLURAL:$2|Gıra|$2 Gırey}} ceri berbata: <strong><nowiki>$1</nowiki></strong>",
+ "translate-pref-editassistlang": "Zıwanê peşti:",
+ "prefs-translate": "Opsiyonê çarnayışi",
+ "translate-pref-editassistlang-help": "Virgula abıryaye lista qodanê zıwanan. Nê zıwanan de açarnayışê yew zıwani, şıma wexteyo ke açarnayış kenê aseno. Hesabyaye lista zıwani aitê zıwanê şımaya.",
+ "right-translate-manage": "İdareyê grubanê mesacan",
+ "action-translate-manage": "idareyê grubanê mesacan",
+ "right-translate-import": "Şıma tadayışanê (çarnayışanê) teberê çerxi bıgêrê zerre (import kerê)",
+ "action-translate-import": "Şıma tadayışanê (çarnayışanê) teberê çerxi bıkırışê teber (ixrac kerê)",
+ "right-translate-messagereview": "Açarnayışan bıvinê",
+ "translate-rcfilters-translations": "Çarnayışi",
+ "translate-rcfilters-translations-only-label": "Çarnayışi",
+ "translate-rcfilters-translations-site-label": "Mesacê sitey",
+ "translate-rc-translation-filter": "Açarnayışê parzûni:",
+ "translate-rc-translation-filter-no": "Qırşê mekı",
+ "translate-rc-translation-filter-only": "Teyna tadayışan bıasne",
+ "translate-rc-translation-filter-filter": "Açarnayışan parzûn ro ke",
+ "translate-rc-translation-filter-site": "Teyna vurriyayışanê mesacê sita",
+ "translationstats": "Çarnayışê İstatistikan",
+ "translate-stats-edits": "Vurnayışi",
+ "translate-stats-users": "Çarnayoği",
+ "translate-stats-registrations": "Qeydbiyayışi",
+ "translate-stats-reviews": "Çımraraviyarnayışi",
+ "translate-stats-reviewers": "Vênayoği",
+ "translate-statsf-intro": "Ena form ra şıma şenê basit istatistiki vırazê. Ser u bın limitê herg erci est o.",
+ "translate-statsf-options": "Weçinegê grafiki",
+ "translate-statsf-width": "Hetê pikseli ra herayiye:",
+ "translate-statsf-height": "Hetê pikseli ra dergiye:",
+ "translate-statsf-days": "Hetê roce ra zeman:",
+ "translate-statsf-start": "Tarixê destpêkerdışi:",
+ "translate-statsf-scale": "Melumat:",
+ "translate-statsf-scale-months": "Aşmi",
+ "translate-statsf-scale-weeks": "Hefteyi",
+ "translate-statsf-scale-days": "Roci",
+ "translate-statsf-scale-hours": "Saeti",
+ "translate-statsf-count": "Senciye:",
+ "translate-statsf-count-edits": "Amarê vurnayışan:",
+ "translate-statsf-count-users": "Açarnayoğê aktifi",
+ "translate-statsf-count-registrations": "Kerbero newe",
+ "translate-statsf-count-reviews": "Çımraviyarnayışê çarnayışan",
+ "translate-statsf-count-reviewers": "Vênayoği",
+ "translate-statsf-submit": "Verasayış",
+ "translate-tag-page-desc": "Açarnayışê pela $3 ($4) ra [[$2|$1]] wiki",
+ "translate-sidebar-alltrans": "Zıwananê binan de",
+ "translations": "Çarnayışi pêro",
+ "translate-translations-fieldset-title": "Mesac",
+ "translate-translations-messagename": "Name:",
+ "translate-translations-project": "Proce:",
+ "translate-translations-history-short": "s",
+ "languagestats": "İstatistikê zıwani",
+ "languagestats-summary": "Ena perre qandê grubanê mesacan rê istatiskanê açarnayışê yew zıwani motnena.",
+ "messagegroupstats-summary": "Ena pele istatistikanê grubanê mesacan mocnena.",
+ "languagestats-stats-for": "Seba $1 istatistikê açarnayışi ($2).",
+ "languagestats-recenttranslations": "Tadayışê peyêni",
+ "translate-langstats-incomplete": "Tay istatistiki ena pela dı nêratneyay. İstatistikan mocnayışi rê pela newe kerê.",
+ "translate-langstats-expand": "hera kerê",
+ "translate-langstats-collapse": "teng ke",
+ "translate-langstats-expandall": "pêrıne hera kerê",
+ "translate-langstats-collapseall": "pêrıne teng kerê",
+ "translate-language-code": "Kodê zıwani",
+ "translate-language-code-field-name": "Kodê zıwani:",
+ "translate-suppress-complete": "Grubanê mesacanê ke pêro açarniyayê bınımne",
+ "translate-ls-noempty": "Grubanê mesacanê ke pêro nêaçarniyayê bınımne",
+ "translate-language": "Zıwan",
+ "translate-total": "Mesaci",
+ "translate-untranslated": "Nêaçarniyaye",
+ "translate-percentage-complete": "Qediyayış",
+ "translate-percentage-fuzzy": "Vêrde",
+ "translate-percentage-proofread": "Vineya",
+ "translate-languagestats-overall": "Grubanê mesacan ra pêro piya",
+ "translate-ls-submit": "İstatistikan bımocne",
+ "translate-ls-column-group": "Gruba mesacan",
+ "translate-mgs-pagename": "İstatistikê gruba mesacan",
+ "translate-mgs-fieldset": "Asengeyê tercihan",
+ "translate-mgs-group": "Gruba mesacan",
+ "translate-mgs-nocomplete": "Açarnayışê cı baş bıyaye zıwana mocnayış",
+ "translate-mgs-submit": "İstatistikan bımocne",
+ "translate-mgs-column-language": "Zıwan",
+ "translate-mgs-totals": "Pêroy cı $1 {{PLURAL:$1|zıwan|zıwani}}",
+ "translate-mgs-invalid-group": "Waziyaye gruba $1 çıniya",
+ "translate-mgs-nothing": "Waziyaye istatistikan rê mpcniyaye theba çıniyo",
+ "supportedlanguages": "Zıwanê ke peşti gırewta",
+ "supportedlanguages-summary": "Ena per dı lista zıwananê ke hetê {{SITENAME}}y ra qebul biyaya be namanê çarnayoğan inan mısnena. \nHem zi tewr vêşi iştirak kerdaye karbera goreya zoni rêz keno. \nAçarnayoğe ke namey cı gırdo ina zaf iştırak kerdo. \nNara kı namey cı bın de reng asena se tewr peyên vurnayışi mısneno .",
+ "supportedlanguages-colorlegend": "Asengeya Renga: açarnayışo peyên verdê $1 roca biyo",
+ "supportedlanguages-sqlite-error": "SQLite nêpheştiyêno",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Çarnoğ}}|Çarnoği}}: $1",
+ "supportedlanguages-recenttranslations": "Tadayışê peyêni",
+ "supportedlanguages-count": "Pêro $1 {{PLURAL:$1|zıwan|zıwani}}",
+ "supportedlanguages-activity": "$1: pêro piya $2 {{PLURAL:$2|vurnayış|vurnayışi}} - vurnayışo peyên $3 {{PLURAL:$3|roce|roci}} aver keriya",
+ "translate-supportedlanguages-cached": "Nê melumati $1 veri gêriyaye verhefıza",
+ "abusefilter-edit-builder-vars-translate-source-text": "Çımê metinê unitey açarnayışi",
+ "abusefilter-edit-builder-vars-translate-target-language": "Seba açarnayışi etiketê zıwani",
+ "translate-jssti-add": "Listiy miyan fi",
+ "managemessagegroups": "Hetenayışê gruba mesacan",
+ "translate-smg-notallowed": "Semeda ena herketi rê icazeta sima cina.",
+ "translate-smg-nochanges": "Theba yo kı bıvuriyo çıni yo.",
+ "translate-smg-submit": "Averşiyaene rê vırnayışan bırışe",
+ "translate-smg-left": "Wiki de zerrey mesacanaı",
+ "translate-smg-right": "Vurnayışê ameyayey",
+ "translate-smg-rename-select": "Weçine",
+ "translate-smg-rename-cancel": "Bıtexelne",
+ "translate-smg-rename-select-err": "Kerem kerên mesaco ke reyna name bo",
+ "translate-smg-rename-no-msg": "Mesac nêvineya.",
+ "translate-smg-rename-new": "Zey Newe dekere...",
+ "translate-smg-rename-rename": "Zey namey ney dekerê...",
+ "translate-manage-import-diff": "Mesace $1 | hereket: $2",
+ "translate-manage-import-new": "$1 ra yew mesaco newe",
+ "translate-manage-import-deleted": "Mesaco besternaye: $1",
+ "translate-manage-action-import": "Azare de",
+ "translate-manage-action-conflict": "A zereke u FUZZY nışan bıke",
+ "translate-manage-action-ignore": "Mehesıbne",
+ "translate-manage-action-fuzzy": "Açarnayışa azere kerê u kehan kerê",
+ "translate-manage-action-rename-fuzzy": "Açarnayışa reyna name kerê u kehan kerê",
+ "translate-manage-action-rename": "Babetna name ke",
+ "translate-manage-import-rename-summary": "Çımey teberiya reyna name biyo",
+ "translate-manage-submit": "Kay fi",
+ "translate-manage-import-ok": "Dekerdaye:$1",
+ "translate-manage-import-done": "Dekerdayış biyo temem",
+ "importtranslations": "Şıma tadayışan (çarnayışan) bıkırışê teber",
+ "translate-import-from-local": "Lokal dosya bar ke:",
+ "translate-import-load": "Dosya bar kı",
+ "translate-import-err-dl-failed": "Dosya niamiye :\n$1",
+ "translate-import-err-ul-failed": "Barkerdışê dosya nêbi",
+ "translate-js-support-unsaved-warning": "Şıma açarnayışê ho neşr nêkerdê.",
+ "translate-gs-pos": "Ca",
+ "translate-gs-code": "Kod",
+ "translate-gs-continent": "Qıta",
+ "translate-gs-speakers": "Qısekari",
+ "translate-gs-score": "Skor",
+ "translate-gs-multiple": "Zafının",
+ "translate-gs-count": "Amar",
+ "translate-gs-total": "Pêro piya",
+ "translate-gs-avgscore": "Ort. skor",
+ "translate-documentation-language": "Pelekerdışê mesacan",
+ "translate-searchprofile": "Çarnayışi",
+ "translate-searchprofile-tooltip": "Heme açarnayışan de cıgeyre",
+ "translate-searchprofile-note": "Pê [$1 vinayışê açarnayışi] ya zêde weçenegê cıgeyrayışê estê.",
+ "translate-search-languagefilter": "Gorey zıwani filtre ke:",
+ "translate-search-nofilter": "Bê filtre",
+ "log-name-translationreview": "Qeydê çımraviyarnayışê çarnayışan",
+ "log-description-translationreview": "Vatışan pêroyın açarnayış u grubanê mesaci rê qeyd kerdış",
+ "logentry-translationreview-message": "$1, $3 açarnayışi {{GENDER:$2|vineyay }}",
+ "group-translate-sandboxed": "Açarnayoğê tesdiqnêbiyayey",
+ "group-translate-sandboxed-member": "{{GENDER:$1|açarnayoğê tesdiqnêbiyayey}}",
+ "right-translate-sandboxmanage": "İdareya qumdora karberi",
+ "action-translate-sandboxmanage": "idareyê qumdora karberi",
+ "translate-workflow-state-": "(eyar ke)",
+ "translate-workflowstatus": "Weziyet: $1",
+ "translate-workflow-set-doing": "Sazêno...",
+ "translate-stats-workflow": "Weziyet",
+ "translate-workflowgroup-label": "Derışê weziyetê kari",
+ "translate-dynagroup-recent-label": "Tadayışê peyêni",
+ "translate-dynagroup-recent-desc": "Na koma mesacan nê zıwani de heme açarnayışanê neweyan mocnena. Wezifaya çımraravyarnayışi rê zaf hewla.",
+ "translate-dynagroup-additions-label": "Cıbiyayışê peyêni",
+ "translate-msggroupselector-projects": "Gruba mesacan",
+ "translate-msggroupselector-search-placeholder": "Grube bıvêne",
+ "translate-msggroupselector-search-all": "Pêro",
+ "translate-msggroupselector-search-recent": "Peyên",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|bıngrube|bıngrubi}}",
+ "tux-languageselector": "Bıçarne be",
+ "tux-tab-all": "Pêro",
+ "tux-tab-untranslated": "Nêaçarniyaye",
+ "tux-tab-outdated": "Vêrde",
+ "tux-tab-translated": "Açarniyaye",
+ "tux-tab-unproofread": "Nêvêniyayo",
+ "tux-edit": "Bıvurne",
+ "tux-status-optional": "Keyfi",
+ "tux-status-fuzzy": "Vêrde",
+ "tux-status-proofread": "Vêniya",
+ "tux-status-translated": "Açarniyaye",
+ "tux-status-saving": "Weşaniyeno...",
+ "tux-status-unsaved": "Nêweşaniyayo",
+ "tux-save-unknown-error": "Yew xetay ke nêşınasiyena biye.",
+ "tux-editor-editsummary-placeholder": "Xulasaya hesabiyayiye",
+ "tux-editor-paste-original-button-label": "Çıme metini pırone",
+ "tux-editor-discard-changes-button-label": "Vurriyayışan vece",
+ "tux-editor-save-button-label": "Açarnayışi neşr ke",
+ "tux-editor-skip-button-label": "Ravêr peyêni",
+ "tux-editor-cancel-button-label": "Bıtexelne",
+ "tux-editor-confirm-button-label": "Açarnayışi tesdiq ke",
+ "tux-editor-proofread-button-label": "Vêniyaye nişan ke",
+ "tux-editor-shortcut-info": "Seba qeydkerdışi \"$1\" ya zi ravêrdışê mesacê bini \"$2\" ya zi dayışê xulasa \"$4\" ya zi rayanê binanê kılman rê \"$3\" bıtıkne.",
+ "tux-editor-edit-desc": "Belgekerdışi bıvurne",
+ "tux-editor-add-desc": "Dokuman cı kerê",
+ "tux-editor-suggestions-title": "Teklifi",
+ "tux-editor-in-other-languages": "Zıwananê binan de",
+ "tux-editor-need-more-help": "Hewna peşti lazıma?",
+ "tux-editor-ask-help": "Tayêna vêşi melumat bıperse",
+ "tux-editor-tm-match": "Zey $1%",
+ "tux-notices-more": "{{PLURAL:$1|$1 zêde}}",
+ "tux-notices-hide": "bınımne",
+ "tux-editor-save-failed": "Qeydkerdışê çarnayışi nêbi:$1",
+ "tux-editor-n-uses": "$1 {{PLURAL:$1|raye gureno|reyi gurenê}}",
+ "tux-editor-message-desc-more": "Zêde bıvêne",
+ "tux-editor-message-desc-less": "Şenık bıvêne",
+ "tux-editor-clear-translated": "Açarnayeyan bınımne",
+ "tux-editor-proofreading-mode": "Çım berze cı",
+ "tux-editor-translate-mode": "Liste",
+ "tux-editor-proofreading-hide-own-translations": "Çarnayışanê xo nişan bınımne",
+ "tux-editor-proofreading-show-own-translations": "Çarnayışanê xo nişan bıde",
+ "tux-proofread-action-tooltip": "Çım ra raviyarnaey nışan ke",
+ "tux-proofread-edit-label": "Bıvurne",
+ "tux-editor-page-mode": "Pele",
+ "tux-editor-outdated-notice": "Rocanebiyayışê nê açarnayışi beno ke lazım bo.",
+ "tux-editor-outdated-notice-diff-link": "Ferqi bıvin",
+ "tux-editor-doc-editor-placeholder": "Pelekerdışê mesacan",
+ "tux-editor-doc-editor-save": "Dokumani neşr ke",
+ "tux-editor-doc-editor-cancel": "Bıtexelne",
+ "tux-messagetable-more-messages": "$1 tayêna {{PLURAL:$1|mesac|mesaci}}",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|Mesac bar beno|Mesaci bar benê}}...",
+ "tux-message-filter-placeholder": "Lista parzûni",
+ "tux-message-filter-result": "$1 de Qandë \"$2\" {{PLURAL:$1|netice |neticey}} vineya yê",
+ "tux-message-filter-advanced-button": "Cıgeyrayışo hera",
+ "tux-message-filter-optional-messages-label": "Mesacê keyfi",
+ "tux-proofread-translated-by-self": "Çarnayışê şıma",
+ "tux-empty-list-all": "Ena gruba mesacan venga",
+ "tux-empty-list-all-guide": "Qandê açarnayışi yewna gruba mesaci weçine",
+ "tux-empty-list-translated": "Mesacê çarnaey çıniyê",
+ "tux-empty-list-translated-guide": "Şıma şenê çarnayış de yardım kerê",
+ "tux-empty-list-translated-action": "Bıçarne",
+ "tux-empty-no-messages-to-display": "Asayışê mesacan çıniyo.",
+ "tux-empty-show-optional-messages": "Mesacanê weçıniyayan bımotne",
+ "tux-empty-no-outdated-messages": "Mesacê kehani çıniyê",
+ "tux-empty-nothing-to-proofread": "Çım ra viyarnayışi rê theba çıniyo.",
+ "tux-empty-you-can-help-providing": "Açarnayışa şıma şenê desteg bıdê marê.",
+ "tux-empty-nothing-new-to-proofread": "Qandé barıyayışi theba çıni yo",
+ "tux-empty-you-can-review-already-proofread": "Tereftê tayna karbera ra açarnayışa şıma şenê kontrol kerê",
+ "tux-empty-list-other": "Açarniyaye theba çıni yo",
+ "tux-empty-list-other-guide": "Şıma şenê çım berzê açarnayışanê mewcudan pheşti bıdê",
+ "tux-empty-list-other-action": "Vênayışê açarnayışan",
+ "tux-empty-list-other-link": "Heme mesacan bımocne",
+ "tux-editor-close-tooltip": "Kip ke",
+ "tux-editor-expand-tooltip": "Hera kerê",
+ "tux-editor-collapse-tooltip": "Teng ke",
+ "tux-editor-message-tools-show-editor": "Wiki-Editor de bımocne",
+ "tux-editor-message-tools-history": "Tarix",
+ "tux-editor-message-tools-delete": "Bestere",
+ "tux-editor-message-tools-translations": "Çarnayışi pêro",
+ "tux-editor-message-tools-linktothis": "Gıreyê nê mesaci",
+ "tux-editor-loading": "Bar beno...",
+ "tux-editor-loading-failed": "Pheştigerê açarnayışi bar nêbiyê :$1",
+ "translate-search-more-languages-info": "Vêşi $1 {{PLURAL:$1|zıwan|zıwani}}",
+ "translate-statsbar-tooltip": "%$1 açarneya, %$2 weyneya",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% açarneya, $2% weyneya, $3% kehano",
+ "translate-search-more-groups-info": "$1 tayêna {{PLURAL:$1|grube|grubi}}",
+ "translate-syntax-error": "Açarnayış xetay rêzaqısan ihtiwa keno",
+ "tux-nojs": "Ena halet bê JavaScript nêgurweyêna. JavaScript dewrê ra veto, nêguriyeno ya zi pheşti nêbeno",
+ "specialpages-group-translation": "Açarnayış"
+}
diff --git a/Translate/i18n/core/dsb.json b/Translate/i18n/core/dsb.json
new file mode 100644
index 00000000..c7377c32
--- /dev/null
+++ b/Translate/i18n/core/dsb.json
@@ -0,0 +1,316 @@
+{
+ "@metadata": {
+ "authors": [
+ "Derbeth",
+ "Dundak",
+ "Michawiki",
+ "Shirayuki"
+ ]
+ },
+ "translate": "Pśełožyś",
+ "translate-desc": "[[Special:Translate|Specialny bok]] za pśełožowanje MediaWiki a druge",
+ "translate-taskui-export-to-file": "Do systemowego formata eksportěrowaś",
+ "translate-taskui-export-as-po": "Za pśełožowanje offline eksportěrowaś",
+ "translate-taction-translate": "Pśełožyś",
+ "translate-taction-proofread": "Pśeglědaś",
+ "translate-taction-lstats": "Rěcna statistika",
+ "translate-taction-mstats": "Statistika zdźěleńskich kupkow",
+ "translate-taction-export": "Eksportěrowaś",
+ "translate-taction-disabled": "Toś ta akcija jo se na toś tom wikiju znjemóžniła.",
+ "translate-page-no-such-language": "Pódana rěc jo njepłaśiwa była.",
+ "translate-page-no-such-group": "Pódana kupka jo njepłaśiwa była.",
+ "translate-page-disabled": "Pśełožki w toś tej rěcy w toś tej kupce su se znjemóžnili. Pśicyna:\n\n<em>$1</em>",
+ "translate-language-disabled": "Pśełožowanje do toś teje rěcy jo znjemóžnjone.",
+ "translate-page-settings-legend": "Nastajenja",
+ "translate-page-group": "Kupka",
+ "translate-page-language": "Rěc",
+ "translate-page-limit": "Licba powěsćow",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|powěsć|powěsći|powěsći|powěsćow}} na bok",
+ "translate-submit": "Pokazaś",
+ "translate-page-navigation-legend": "Nawigacija",
+ "translate-page-showing": "Pokazuju se powěsći wót $1 až $2 z $3.",
+ "translate-page-showing-all": "{{PLURAL:$1|Pokazujo|Pokazujotej|Pokazuju|Pokazujo}} se $1 {{PLURAL:$1|powěsć|powěsći|powěsći|powěsćow}}.",
+ "translate-page-showing-none": "Njedaju powěsći.",
+ "translate-next": "Pśiducy bok",
+ "translate-prev": "Slědny bok",
+ "translate-page-description-legend": "Informacije wó kupce",
+ "translate-page-description-hasoptional": "Toś ta zdźěleńska kupka wopśimujo opcionalne powěźeńki.\nOpcionalne powěźeńki by měli se jano pśełožowaś, jolic twója rěc ma wósebnu pótrjebu za nje,\nkaž na pśikład njewužywanje proznych znamuškow abo transliteraciju swójskich mjenjow. $1",
+ "translate-page-description-hasoptional-open": "Opcionalne powěźeńki pokazaś.",
+ "translate-page-edit": "wobźěłaś",
+ "translate-optional": "(opcionalny)",
+ "translate-ignored": "(ignorěrowany)",
+ "translate-edit-title": "„$1“ wobźěłaś",
+ "translate-edit-definition": "Definicija powěsći",
+ "translate-edit-contribute": "pśinosowaś",
+ "translate-edit-no-information": "<em>Toś ta powěsć njama dokumentaciju. Jolic wěš, źož abo kak toś ta powěsć se wužywa, móžoš drugim pśełožowarjam pomagaś, z tym až dokumentaciju k toś tej powěsći pśidawaš.</em>",
+ "translate-edit-information": "Informacije wó powěsći ($1)",
+ "translate-edit-warnings": "Warnowanja wó njedopołnych pśełožkach",
+ "translate-edit-tmmatch-source": "Žrědłowy tekst pśełožka: $1",
+ "translate-edit-tmmatch": "$1 % makanja",
+ "translate-edit-nopermission": "Trjebaš pśełožowańske pšawa, aby mógał powěźeńki pśełožowaś.",
+ "translate-edit-askpermission": "Pšawo dostaś",
+ "translate-checks-parameters": "{{PLURAL:$2|Slědujucy parameter|Slědujucej parametra|Slědujuce parametry|Slědujucych parametrow}} se {{PLURAL:$2|njewužywa|njewužywatej|njewužywaju|njwužywa}}: <strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Slědujucy parameter jo njeznaty|Slědujucej parametra stej njeznatej|Slědujuce parametry su njeznate|Slědujucych parametrow jo njeznate}}: <strong>$1</strong>",
+ "translate-checks-balance": "Jo njerowna licba {{PLURAL:$2|spinka|spinkow}}: <strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Slědujucy wótkaz jo problematiski|Slědujucej wótkaza stej problematiskej|Slědujuce wótkaze su problematiske|Slědujucych wótkazow jo problematiske}}: <strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Slědujucy wótkaz felujo|Slědujucej $2 wótkaza felujotej|Slědujuce $2 wótkaze feluju|Slědujucych $2 wótkazow felujo}}: <strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Definicija <nowiki>{{PLURAL:}}</nowiki> wužywa, pśełožk pak nic.",
+ "translate-checks-plural-forms": "Za <nowiki>{{PLURAL:}}</nowiki> {{PLURAL:$1|jo se jadna forma pódała|stej se $1 formje pódałej|su se $1 formy pódali|jo se $1 formow pódało}}, ale {{PLURAL:$2|pódpěra se jano jadna forma|pódpěratej se $2 formje|pódpěraju se $2 formy|pódpěra se $2 formow}} (bźez formow 0= a 1=).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> ma dwě jadnuckej formje na kóńcu. <nowiki>{{PLURAL:$1|mloko|mloko}}</nowiki> měł se ako <nowiki>{{PLURAL:$1|mloko}}</nowiki> pisaś.",
+ "translate-checks-pagename": "Mjenjowy rum pśez definiciju změnjony",
+ "translate-checks-format": "Toś ten pśełožk njeslědujo definiciji abo ma njepłaśiwu syntaksu: $1",
+ "translate-checks-escape": "Slědujuce eskapowe sekwence mógu pśipadne byś: <strong>$1</strong>",
+ "translate-checks-parametersnotequal": "Licba parametrow jo {{PLURAL:$1|$1}}; to měł {{PLURAL:$2|$2}} byś.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> ma njepłaśiwu formu.",
+ "translate-checks-fudforum-syntax": "<nowiki>$1</nowiki> město <nowiki>$2</nowiki> w toś tom projekśe wužywaś.",
+ "translate-pref-editassistlang": "Pomocne rěcy:",
+ "prefs-translate": "Pśełožowańske opcije",
+ "translate-pref-editassistlang-help": "Lisćina rěcnych kodow z komu ako źěleńske znamuško.\nPśełožowanje powěźeńki w toś tych rěcach se pokazuju, gaž pśełožujoš.\nStandardna lisćina rěcow wótwisujo wót swójeje rěcy.",
+ "translate-pref-editassistlang-bad": "Njepłaśiwy rěcny kod w lisćinje:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Z pomocu pśełožowańskego pówjercha wobźěłaś",
+ "right-translate-manage": "Zdźěleńske kupki zastojaś",
+ "action-translate-manage": "zdźěleńske kupki zastojaś",
+ "right-translate-import": "Pśełožki offline importěrowaś",
+ "action-translate-import": "offline wugbane pśełožki importěrowaś",
+ "right-translate-messagereview": "Pśełožki pśeglědaś",
+ "right-translate-groupreview": "Źěłowy status zdźěleńskich kupkow změniś",
+ "translate-rc-translation-filter": "Pśełožki filtrowaś:",
+ "translate-rc-translation-filter-no": "Njecyń nic",
+ "translate-rc-translation-filter-only": "Jano pśełožki pokazaś",
+ "translate-rc-translation-filter-filter": "Pśełožki wufiltrowaś",
+ "translate-rc-translation-filter-site": "Jano změny sedłowych powěsćow",
+ "translationstats": "Statistika pśełožkow",
+ "translate-stats-edits": "Změny",
+ "translate-stats-users": "Pśełožowarje",
+ "translate-stats-registrations": "Registrěrowanja",
+ "translate-stats-reviews": "Pśeglědanja",
+ "translate-stats-reviewers": "Pséglědowarje",
+ "translate-statsf-intro": "Z toś tym formularom móžoš napóraś jadnoru statistiku. Wše gódnoty maju górjejcny a dołojcny limit.",
+ "translate-statsf-options": "Opcije grafa",
+ "translate-statsf-width": "Šyrokosć w pikselach:",
+ "translate-statsf-height": "Wusokosć w pikselach:",
+ "translate-statsf-days": "Cas w dnjach:",
+ "translate-statsf-start": "Zachopny datum:",
+ "translate-statsf-scale": "Granularita:",
+ "translate-statsf-scale-months": "Mjasece",
+ "translate-statsf-scale-weeks": "Tyźenje",
+ "translate-statsf-scale-days": "Dny",
+ "translate-statsf-scale-hours": "Goźiny",
+ "translate-statsf-count": "Měra:",
+ "translate-statsf-count-edits": "Licba změnow",
+ "translate-statsf-count-users": "Aktiwne pśełožowarje",
+ "translate-statsf-count-registrations": "Nowe wužywarje",
+ "translate-statsf-count-reviews": "Pśeglědanja pśełožkow",
+ "translate-statsf-count-reviewers": "Pséglědowarje",
+ "translate-statsf-language": "Lisćina rěcnych kodow wótźělonych pśez komu:",
+ "translate-statsf-group": "Lisćina kupkowych kodow wótźělonych pśez komu:",
+ "translate-statsf-submit": "Pśeglěd",
+ "translate-tag-page-desc": "Pśełožk wikijowego boka [[$2|$1]].",
+ "translate-sidebar-alltrans": "W drugich rěcach",
+ "translations": "Wšykne pśełožki",
+ "translations-summary": "Zapódaj dołojce zdźěleńske mě, aby wšykne k dispozciji stojece pśełožki pokazał.",
+ "translate-translations-no-message": "\"$1\" njejo zdźělenje, kótarež dajo se pśełožowaś.",
+ "translate-translations-none": "Njejsu pśełožki za \"$1\"",
+ "translate-translations-count": "{{PLURAL:$1|jaden pśełožk namakany|$1 pśełožka namkanej|$1 pśełožki namakane|$1 pśełožkow namakanych}}",
+ "translate-translations-fieldset-title": "Powěźeńka",
+ "translate-translations-messagename": "Mě:",
+ "translate-translations-project": "Projekt:",
+ "translate-translations-including-no-param": "Pódaj pšosym płaśiwy kluc powěźenki w parametrje pódboka",
+ "translate-translations-history-short": "W",
+ "languagestats": "Rěcna statistika",
+ "languagestats-summary": "Toś ten bok pokazujo pśełožkowu statistiku za wšykne zdźěleńske kupki za rěc.",
+ "languagestats-stats-for": "Pśełožowańska statistika za $1 ($2).",
+ "languagestats-recenttranslations": "nowše pśełožki",
+ "translate-langstats-incomplete": "Někotare statistiki na toś tom boku su njedopołne. Pšosym zacytaj je hyšći raz, aby dalšne statistiki dostał.",
+ "translate-langstats-expand": "pokazaś",
+ "translate-langstats-collapse": "schowaś",
+ "translate-langstats-expandall": "wšykne pokazaś",
+ "translate-langstats-collapseall": "wšykne schowaś",
+ "translate-language-code": "Rěcny kod",
+ "translate-language-code-field-name": "Rěcny kod:",
+ "translate-suppress-complete": "Dopołnje pśełožone zdźěleńske kupki pódtłocyś",
+ "translate-ls-noempty": "Dopołnje njepśełožone zdźěleńske kupki pódtłocyś",
+ "translate-language": "Rěc:",
+ "translate-total": "Zdźělenja",
+ "translate-untranslated": "Njepśełožony",
+ "translate-percentage-complete": "Dopołnjenje",
+ "translate-percentage-fuzzy": "Zestarjony",
+ "translate-languagestats-overall": "Wšykne zdźěleńske kupki dogromady",
+ "translate-ls-submit": "Statistiku pokazaś",
+ "translate-ls-column-group": "Zdźěleńska kupka",
+ "translate-mgs-pagename": "Statistika zdźěleńskich kupkow",
+ "translate-mgs-fieldset": "Nastajenja pokazaś",
+ "translate-mgs-group": "Zdźěleńska kupka:",
+ "translate-mgs-nocomplete": "Rěcy z dokóńconymi pśełožkami njezwobrazniś",
+ "translate-mgs-noempty": "Rěcy njepokazaś, kótarež njamaju pśełožki",
+ "translate-mgs-submit": "Statistiku pokazaś",
+ "translate-mgs-column-language": "Rěc",
+ "translate-mgs-totals": "Wšykne rěcy dogromady",
+ "translate-mgs-invalid-group": "Pódana kupka $1 njeeksistěrujo.",
+ "translate-mgs-nothing": "Za pominanu statistiku daty njejsu.",
+ "supportedlanguages": "Pódpěrane rěcy",
+ "supportedlanguages-summary": "Toś ten bok pokazujo lisćinu wšych rěcow, kótarež pódpěraju se pśez {{GRAMMAR:akuzatiw|{{SITENAME}}}}, gromaźe z mjenjami pśełožowarjow, kótarež pśełožuju do teje rěcy.\nMě pśełožowarja pokazujo se šym wětšo śim wěcej změnow pśełožowaŕ jo dodał.\nBarwa pódsmužkowanja pśełožowarskego mjenja pokazujo, kak aktiwny pśełožowaŕ jo njedawno był.",
+ "supportedlanguages-colorlegend": "Legenda za barwu: Slědny pśełožk pśed $1 dnjami.",
+ "supportedlanguages-translators": "{{PLURAL:$2|Pśełožowaŕ|Pśełožowarja|Pśełožowarje|Pśełožowarjow}}: $1",
+ "supportedlanguages-recenttranslations": "nejnowše pśełožki",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|rěc|rěcy|rěcy|rěcow}} dogromady.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|změna|změnje|změny|změnow}} - slědna změna pśed $3 {{PLURAL:$3|dnjom|dnjoma|dnjami|dnjami}}",
+ "translate-jssti-add": "Lisćinje pśidaś",
+ "managemessagegroups": "Zastojanje kupkow powěźeńkow",
+ "translate-smg-notallowed": "Njesmějoš toś tu akciju wuwjasć.",
+ "translate-smg-nochanges": "Njejsu žedne změny za pśeźěłanje.",
+ "translate-smg-submit": "Změny na pśeźěłowanje pósłaś",
+ "translate-smg-submitted": "Definicije powěźeńkow su se zaktualizěrowali. Změny pśeźěłuju se w slězynje.",
+ "translate-smg-more": "Pó składowanju toś tych změnow muse se dalšne změny pśeźěłaś.",
+ "translate-smg-left": "Powěsćowe wopśimjeśe we wikiju",
+ "translate-smg-right": "Dochadajuce změny",
+ "translate-manage-import-diff": "Powěźeńka $1 | akcije: $2",
+ "translate-manage-import-new": "Nowa powěźeńka $1",
+ "translate-manage-import-deleted": "Wulašowana powěźeńka $1",
+ "translate-manage-action-import": "Importěrowaś",
+ "translate-manage-action-conflict": "Importěrowaś a ako \"fuzzy\" markěrowaś",
+ "translate-manage-action-ignore": "Ignorěrowaś",
+ "translate-manage-action-fuzzy": "Pśełožki importěrowaś a ako \"fuzzy\" markěrowaś",
+ "translate-manage-nochanges": "Njejsu změny w definicijach powěźeńkow za toś tu kupku.",
+ "translate-manage-nochanges-other": "Njejsu žedne změny za toś tu rěc byli.\nWužyj slědujucy wótkaz, aby se k naglědoju kupkowych drobnostkow wrośił.",
+ "translate-manage-inconsistent": "Nadejźona inkonsistenca w napšašowanju.\nPšosym pśeglědaj za změny a wopytaj hyšći raz.\nDrobnostki: $1",
+ "translate-manage-toolong": "Maksimalny pśeźěłowański cas $1 {{PLURAL:$1|sekundy|sekundowu|sekundow|sekundow}} jo pśebyty.\nPšosym wótpósćel formular znowego, aby z pśeźěłanim pókšacował.",
+ "translate-manage-import-summary": "Nowa wersija importěrujo se z eksternego žrědła",
+ "translate-manage-import-ignore": "Powěźeńka $1 se pśeskokujo.",
+ "translate-manage-conflict-summary": "Nowa wersija importěrujo se z eksternego žrědła.\nPšosym pśeglědaś.",
+ "translate-manage-submit": "Wuwjasć",
+ "translate-manage-intro-other": "Dołojce jo lisćina pśełožkowych změnow w rěcy $1.\nPšosym pśeglědaj změny a wubjeŕ akciju, kótaruž coš za kuždy pśełožk cyniś.\nJolic ignorěrujoš změny, jo toś ta akcija jano nachylna.",
+ "translate-manage-import-ok": "Importěrowany: $1",
+ "translate-manage-import-done": "Import dokóńcony!",
+ "importtranslations": "Pśełožki importěrowaś",
+ "translate-import-from-local": "Nagraśe lokalneje dataje:",
+ "translate-import-load": "Dataju zacytaś",
+ "translate-import-err-dl-failed": "Njemóžno dataju wótwołaś:\n$1",
+ "translate-import-err-ul-failed": "Nagraśe dataje njejo wuspěšne było",
+ "translate-import-err-invalid-title": "Pódane datajowe mě <nowiki>$1</nowiki> jo njepłaśiwe było.",
+ "translate-import-err-no-such-file": "Dataja <nowiki>$1</nowiki> njeeksistěrujo abo jnejo se lokalnje nagrała.",
+ "translate-import-err-stale-group": "Kupka powěźeńkow, ku kótarejž toś ta dataja słuša, njeeksistěrujo.",
+ "translate-import-err-no-headers": "Dataja mjejp derje wuformowana dataja gettext we formaśe pśełožowańskego formata:\nNjemóžno kupku a rěc z datajowych głowow zwěsćiś.",
+ "translate-js-support-unsaved-warning": "Maš njeskłaźone pśełožki.",
+ "translate-gs-pos": "Poz.",
+ "translate-gs-code": "Kod",
+ "translate-gs-continent": "Kontinent",
+ "translate-gs-speakers": "Powědarje",
+ "translate-gs-score": "Pogódnośenje",
+ "translate-gs-multiple": "Někotare",
+ "translate-gs-count": "Licba",
+ "translate-gs-total": "Dogromady",
+ "translate-gs-avgscore": "Pśerězne pogódnośenje",
+ "translate-documentation-language": "Pokazki za pśełožowanje",
+ "translate-searchprofile": "Pśełožki",
+ "translate-searchprofile-tooltip": "We wšych pśełožkach pytaś",
+ "translate-search-languagefilter": "Pó rěcy filtrowaś:",
+ "translate-search-nofilter": "Žedne filtrowanje",
+ "log-name-translationreview": "Protokol pśełožkowych kontrolow",
+ "log-description-translationreview": "Protokol wšych kontrolow k pśełožkam a zdźěleńskim kupkam.",
+ "logentry-translationreview-message": "$1 jo pśełožk $3 ako pśeglědany {{GENDER:$2|markěrował|markěrowała}}",
+ "logentry-translationreview-group": "$1 jo status pśełožkow w rěcy $4 boka $3 wót $6 do $7 {{GENDER:$2|změnił|změniła}}",
+ "group-translate-sandboxed": "Njewobkšuśone pśełožowarje",
+ "group-translate-sandboxed-member": "{{GENDER:$1|njewobkšuśony pśełožowaŕ|njewobkśuśona pśełožowarka}}",
+ "right-translate-sandboxmanage": "Wužywarje grajkanišća zastojaś",
+ "action-translate-sandboxmanage": "wužywarje grajkanišća zastojaś",
+ "right-translate-sandboxaction": "Akcije wuwjasć, kótarež su na \"běłej lisćinje\" wužywarjow grajkanišća",
+ "action-translate-sandboxaction": "Akcije wuwjasć, kótarež su na \"běłej lisćinje\" wužywarje grajkanišća",
+ "translate-workflow-state-": "(njenastajony)",
+ "translate-workflowstatus": "Status: $1",
+ "translate-workflow-set-doing": "Nastaja se...",
+ "translate-workflow-autocreated-summary": "Awtomatiske napóranje boka za źěłowótběgowy status $1",
+ "translate-stats-workflow": "Status",
+ "translate-workflowgroup-label": "Źěłowótběgowe statuse",
+ "translate-workflowgroup-desc": "Toś ta zdźěleńska kupka pokazujo pśełožowańske źěłowótběgowe statuse.\nStatuse definěruju se w konfiguraciskej wariabli $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Nejnowše pśełožki",
+ "translate-dynagroup-recent-desc": "Toś ta zdźěleńska kupka pokazujo wšykne aktualne pśełožki do toś teje rěcy.\nJo nejwužytnjej za pśeglědowańske nadawki.",
+ "translate-dynagroup-additions-label": "Aktualne dodanki",
+ "translate-dynagroup-additions-desc": "Toś ta powěsćowa kupka pokazujo nowe a změnjone pówěźeńki.",
+ "translate-msggroupselector-projects": "Zdźěleńska kupka",
+ "translate-msggroupselector-search-placeholder": "Kupki pśepytaś",
+ "translate-msggroupselector-search-all": "Wšykne",
+ "translate-msggroupselector-search-recent": "Nejnowše",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|pódkupka|pódkupce|pódkupki|pódkupkow}}",
+ "tux-languageselector": "Pśełoźiś do",
+ "tux-tab-all": "Wšykne",
+ "tux-tab-untranslated": "Njepśełožony",
+ "tux-tab-outdated": "Zestarjony",
+ "tux-tab-translated": "Pśełožony",
+ "tux-tab-unproofread": "Njepśeglědany",
+ "tux-edit": "Wobźěłaś",
+ "tux-status-optional": "Opcionalny",
+ "tux-status-fuzzy": "Zestarjony",
+ "tux-status-proofread": "Pśeglědany",
+ "tux-status-translated": "Pśełožony",
+ "tux-status-saving": "Składujo se...",
+ "tux-status-unsaved": "Njeskładowany",
+ "tux-editor-paste-original-button-label": "Žrědłowy tekst zasajźiś",
+ "tux-editor-discard-changes-button-label": "Změny zachyśiś",
+ "tux-editor-save-button-label": "Pśełožk składowaś",
+ "tux-editor-skip-button-label": "K pśiducemu",
+ "tux-editor-cancel-button-label": "Pśetergnuś",
+ "tux-editor-confirm-button-label": "Pśełožk wobkšuśiś",
+ "tux-editor-shortcut-info": "Tłoc \"$1\", aby składował abo \"$2\", aby se k pśiducemu powěźeńce dostał abo \"$3\" za druge skrotconki.",
+ "tux-editor-edit-desc": "Dokumentaciju wobźěłaś",
+ "tux-editor-add-desc": "Dokumentaciju pśidaś",
+ "tux-editor-suggestions-title": "Naraźenja",
+ "tux-editor-in-other-languages": "W drugich rěcach",
+ "tux-editor-need-more-help": "Trjebaš wěcej pomocy?",
+ "tux-editor-ask-help": "Wó dalšne informacije pšosyś",
+ "tux-editor-tm-match": "$1 % makanja",
+ "tux-notices-more": "{{PLURAL:$1|$1 dalšne|$1dalšnej|$1dalšne|$1 dalšnych}}",
+ "tux-notices-hide": "schowaś",
+ "tux-editor-save-failed": "Pśełožk njedajo se składowaś: $1",
+ "tux-editor-n-uses": "{{PLURAL:$1|$1 raz|dwójcy|$1 raze|$1 razow}} wužyty",
+ "tux-editor-message-desc-more": "Wěcej se woglědaś",
+ "tux-editor-message-desc-less": "Mjenjej se woglědaś",
+ "tux-editor-clear-translated": "Pśełožki schowaś",
+ "tux-editor-proofreading-mode": "Pśeglědaś",
+ "tux-editor-translate-mode": "Lisćina",
+ "tux-editor-proofreading-hide-own-translations": "Twóje pśełožki schowaś",
+ "tux-editor-proofreading-show-own-translations": "Twóje pśełožki pokazaś",
+ "tux-proofread-action-tooltip": "Ako pśeglědany markěrowaś",
+ "tux-proofread-edit-label": "Wobźěłaś",
+ "tux-editor-page-mode": "Bok",
+ "tux-editor-outdated-notice": "Toś ten pśełožk musy se snaź aktualizěrowaś.",
+ "tux-editor-outdated-notice-diff-link": "Rozdźěle pokazaś",
+ "tux-editor-doc-editor-placeholder": "Dokumentacija powěźeńki",
+ "tux-editor-doc-editor-save": "Dokumentaciju składowaś",
+ "tux-editor-doc-editor-cancel": "Pśetergnuś",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|dalšna powěźeńka|dalšnej powěźeńce|dalšne powěźeńki|dalšnych powěźeńkow}}",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|Zacytujo se|Zacytujotej se|Zacytuju se|Zacytujo se}} $1 {{PLURAL:$1|powěźeńka|powěźeńce|powěźeńki|powěźeńkow}}.",
+ "tux-message-filter-placeholder": "Lisćinu filtrowaś",
+ "tux-message-filter-result": "$1 {{PLURAL:$1|wuslědk|wuslědka|wuslědki|wuslědkow}} za \"$2\" {{PLURAL:$1|namakany|namakanej|namakane}}",
+ "tux-message-filter-advanced-button": "Rozšyrjone pytanje",
+ "tux-message-filter-optional-messages-label": "Opcionalne powěźeńki",
+ "tux-proofread-translated-by-self": "Wót tebje pśełožony",
+ "tux-empty-list-all": "Toś ta zdźěleńska kupka jo prozna",
+ "tux-empty-list-all-guide": "Wubjeŕ drugu zdźěleńsku kupku za pśełožowanje",
+ "tux-translate-page-no-such-group": "<strong>Pódana skupina njeeksistěrujo.</strong> Wubjeŕ drugu zdźěleńsku kupku.",
+ "tux-empty-list-translated": "Žedne pśełožone powěźeńki",
+ "tux-empty-list-translated-guide": "Móžoš pomagaś pśełožowaś",
+ "tux-empty-list-translated-action": "Pśełožyś",
+ "tux-empty-no-messages-to-display": "Žedne powěsći za zwobraznjenje",
+ "tux-empty-there-are-optional": "Su opcionalne powěźeńki, kótarež njepokazuju se w lisćinje",
+ "tux-empty-show-optional-messages": "Opcionalne powěźeńki pokazaś",
+ "tux-empty-no-outdated-messages": "Žedne zestarjone powěźeńki",
+ "tux-empty-nothing-to-proofread": "Njejsu powěźeńki za pśeglědanje",
+ "tux-empty-you-can-help-providing": "Móžoš pomagaś, nowe pśełožki pśinosowaś",
+ "tux-empty-nothing-new-to-proofread": "Njejo nic nowe za pśeglědanje",
+ "tux-empty-you-can-review-already-proofread": "Móžoš pśełožki pśeglědaś, kótarež su južo druge pśeglědali.",
+ "tux-empty-list-other": "Njejo nic za pśełožowanje",
+ "tux-empty-list-other-guide": "Móžoš pomagaś, eksistěrujuce pśełožki pśeglědaś",
+ "tux-empty-list-other-action": "Pśełožki pśeglědaś",
+ "tux-empty-list-other-link": "Wšykne powěźeńki pokazaś",
+ "tux-editor-close-tooltip": "Zacyniś",
+ "tux-editor-expand-tooltip": "Pokazaś",
+ "tux-editor-collapse-tooltip": "Schowaś",
+ "tux-editor-message-tools-history": "Historija",
+ "tux-editor-message-tools-translations": "Wšykne pśełožki",
+ "tux-editor-loading": "Zacytujo se ...",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|dalšna rěc|dalšnej rěcy|dalšne rěcy|dalšnych rěcow}}",
+ "translate-statsbar-tooltip": "$1 % pśełožone, $2 % pśeglědane",
+ "translate-statsbar-tooltip-with-fuzzy": "$1 % pśełožone, $2 % pśeglědane, $3 % zestarjone",
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|dalšna kupka|dalšnej kupce|dalšne kupki|dalšnych kupkow}}"
+}
diff --git a/Translate/i18n/core/dtp.json b/Translate/i18n/core/dtp.json
new file mode 100644
index 00000000..24bed2b7
--- /dev/null
+++ b/Translate/i18n/core/dtp.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "FRANCIS5091"
+ ]
+ },
+ "translate-page-navigation-legend": "Popotunud",
+ "translate-next": "Bolikon sumuhut",
+ "translate-page-edit": "idito"
+}
diff --git a/Translate/i18n/core/dty.json b/Translate/i18n/core/dty.json
new file mode 100644
index 00000000..1cd31248
--- /dev/null
+++ b/Translate/i18n/core/dty.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nirajan pant",
+ "रमेश सिंह बोहरा",
+ "राम प्रसाद जोशी"
+ ]
+ },
+ "translate-edit-no-information": "<em>यै रैबारको दस्तावेजीकरण नाइथिन।\nयदि तम यो सन्देश काँ और कस्याँ प्रयोग अरीन्छ भण्णेइ कुरडी जाणन्छौ भँण्या तम येइ सन्देश को दस्तावेजीकरण थपीबर और अनुवादकअन लाई मद्दत अरी सकन्छौ।</em>",
+ "translate-edit-information": "($1) रैबारका बारेमी जानकारी",
+ "translate-stats-edits": "सम्पादनहरू",
+ "translate-stats-users": "अनुवादकहरू",
+ "translate-statsf-count-users": "सक्रिय अनुवादकहरू",
+ "translate-statsf-count-registrations": "नौला प्रयोगकर्ताहरू",
+ "translate-sidebar-alltrans": "अन्य भाषामी",
+ "translate-documentation-language": "खबर दस्तावेज"
+}
diff --git a/Translate/i18n/core/ee.json b/Translate/i18n/core/ee.json
new file mode 100644
index 00000000..865f2481
--- /dev/null
+++ b/Translate/i18n/core/ee.json
@@ -0,0 +1,44 @@
+{
+ "@metadata": {
+ "authors": [
+ "Natsubee"
+ ]
+ },
+ "translate": "Ɖe egɔme",
+ "translate-desc": "[[Special:Translate|Axa tɔxe]] na MediaWiki kple nububuwo meɖeɖe",
+ "translate-page-group": "Hame",
+ "translate-page-language": "Gbe",
+ "translate-submit": "Kɔe ve",
+ "translate-page-navigation-legend": "Mɔtabiala",
+ "translate-page-showing": "Wole duwo tso $1 vaseɖe $2 le $3 dome fiam.",
+ "translate-next": "Axa yometɔ",
+ "translate-prev": "Axa si do ŋgɔ",
+ "translate-page-edit": " trɔ asi le eŋu",
+ "translate-edit-title": "Trɔ asi le \"$1\" ŋu",
+ "translate-edit-tmmatch": "$1% sɔsɔme",
+ "translate-rc-translation-filter-no": "Megawɔ trɔtrɔ aɖeke o",
+ "translate-rc-translation-filter-only": "Fia gɔmeɖeɖewo ko",
+ "translate-rc-translation-filter-filter": "Ɖe gɔmeɖeɖewo le eme",
+ "translationstats": "Gɔmeɖeɖewo ƒe xexlẽme",
+ "translate-stats-edits": "Tɔtrɔwo",
+ "translate-stats-users": "Nyagɔmeɖelawo",
+ "translate-statsf-scale-days": "Ŋkekewo",
+ "translate-statsf-scale-hours": "Gaƒoƒowo",
+ "translate-statsf-count-edits": "Tɔtrɔwo ƒe xexlẽme",
+ "translate-statsf-submit": "Kpɔe do ŋgɔ",
+ "translate-sidebar-alltrans": "Le gbe bubuwo me",
+ "translate-translations-fieldset-title": "Du",
+ "translate-translations-messagename": "Ŋkɔ:",
+ "languagestats-summary": "Axa sia fia numeɖeɖewo ƒe xexlẽme na du hamewo katã le gbe ɖeka me.",
+ "languagestats-stats-for": "Gɔmeɖeɖewo ƒe xexlẽme na $1 ($2).",
+ "languagestats-recenttranslations": "gɔmeɖeɖe yeyewo",
+ "translate-language-code-field-name": "Gbe ƒe dzesi:",
+ "translate-suppress-complete": "Ɣla du hame siwo gɔme woɖe xoxo",
+ "translate-language": "Gbe",
+ "translate-total": "Duwo",
+ "translate-percentage-fuzzy": "Enu vayi",
+ "supportedlanguages-recenttranslations": "gɔmeɖeɖe yeyewo",
+ "translate-manage-import-new": "Du yeye $1",
+ "translate-manage-submit": "Wɔe",
+ "translate-manage-import-done": "Wo wɔ wokatã vɔ!"
+}
diff --git a/Translate/i18n/core/el.json b/Translate/i18n/core/el.json
new file mode 100644
index 00000000..c5d9e07b
--- /dev/null
+++ b/Translate/i18n/core/el.json
@@ -0,0 +1,364 @@
+{
+ "@metadata": {
+ "authors": [
+ "AK",
+ "Amire80",
+ "Consta",
+ "Crazymadlover",
+ "Dead3y3",
+ "Flyax",
+ "Geraki",
+ "Glavkos",
+ "KATRINE1992",
+ "KATRINE1993",
+ "Lou",
+ "NikosLikomitros",
+ "Nikosgranturismogt",
+ "Norhorn",
+ "Omnipaedista",
+ "Protnet",
+ "ZaDiak",
+ "Περίεργος"
+ ]
+ },
+ "translate": "Μεταφράστε",
+ "translate-desc": "[[Special:Translate|Ειδική σελίδα]] για τη μετάφραση του MediaWiki και άλλων",
+ "translate-taskui-export-to-file": "Εξαγωγή στην εγγενή μορφή",
+ "translate-taskui-export-as-po": "Εξαγωγή για μετάφραση εκτός σύνδεσης",
+ "translate-taction-translate": "Μετάφραση",
+ "translate-taction-proofread": "Θεώρηση",
+ "translate-taction-lstats": "Στατιστικά γλώσσας",
+ "translate-taction-mstats": "Στατιστικά ομάδας μηνυμάτων",
+ "translate-taction-export": "Εξαγωγή",
+ "translate-taction-disabled": "Αυτή η ενέργεια είναι απενεργοποιημένη σε αυτό wiki.",
+ "translate-page-no-such-language": "Η καθορισμένη γλώσσα δεν ήταν έγκυρη.",
+ "translate-page-no-such-group": "Η καθορισμένη ομάδα δεν ήταν έγκυρη.",
+ "translate-page-disabled": "Οι μεταφράσεις προς αυτήν τη γλώσσα έχουν απενεργοποιηθεί σε αυτήν την ομάδα. \nΑιτία: \n\n<em>$1</em>",
+ "translate-language-disabled": "Η μετάφραση στη γλώσσα αυτή είναι απενεργοποιημένη.",
+ "translate-page-settings-legend": "Ρυθμίσεις",
+ "translate-page-group": "Ομάδα",
+ "translate-page-language": "Γλώσσα",
+ "translate-page-limit": "Όριο",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|μήνυμα|μηνύματα}} ανά σελίδα",
+ "translate-submit": "Προσκόμιση",
+ "translate-page-navigation-legend": "Πλοήγηση",
+ "translate-page-showing": "Εμφάνιση μηνυμάτων από $1 έως $2 σε σύνολο $3.",
+ "translate-page-showing-all": "Εμφάνιση $1 {{PLURAL:$1|μηνύματος|μηνυμάτων}}.",
+ "translate-page-showing-none": "Δεν υπάρχουν μηνύματα για εμφάνιση.",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "Επόμενη σελίδα",
+ "translate-prev": "Προηγούμενη σελίδα",
+ "translate-page-description-legend": "Πληροφορίες σχετικά με την ομάδα",
+ "translate-page-description-hasoptional": "Αυτή η ομάδα μηνυμάτων περιέχει προαιρετικά μηνύματα.\nΤα προαιρετικά μηνύματα θα πρέπει να μεταφράζονται μόνο όταν η γλώσσα σας έχει ειδικές απαιτήσεις όπως τη μη χρήση κενών ή τη μεταγλώττιση κύριων ονομάτων. $1",
+ "translate-page-description-hasoptional-open": "Εμφάνιση προαιρετικών μηνυμάτων.",
+ "translate-page-edit": "επεξεργασία",
+ "translate-optional": "(προαιρετικά)",
+ "translate-ignored": "(αγνοημένα)",
+ "translate-edit-title": "Επεξεργασία «$1»",
+ "translate-edit-definition": "Ορισμός μηνύματος",
+ "translate-edit-contribute": "συμβάλλετε",
+ "translate-edit-no-information": "<em>Αυτό το μήνυμα δεν έχει τεκμηρίωση. \nΑν γνωρίζετε πού ή πώς χρησιμοποιείται αυτό το μήνυμα, μπορείτε να βοηθήσετε άλλους μεταφραστές προσθέτοντας τεκμηρίωση σε αυτό.</em>",
+ "translate-edit-information": "Πληροφορίες σχετικά με το μήνυμα ($1)",
+ "translate-edit-warnings": "Προειδοποιήσεις για ημιτελείς μεταφράσεις",
+ "translate-edit-tmmatch-source": "Πηγαίο κείμενο μετάφρασης: $1",
+ "translate-edit-tmmatch": "$1% αντιστοίχιση",
+ "translate-edit-nopermission": "Χρειάζεστε μεταφραστικά δικαιώματα για να μεταφράσετε μηνύματα.",
+ "translate-edit-askpermission": "Πάρετε άδεια",
+ "exporttranslations": "Εξαγωγή μεταφράσεων",
+ "translate-export-form-format": "Μορφή",
+ "translate-export-invalid-format": "Παρακαλούμε καθορίστε έγκυρη μορφή.",
+ "translate-export-not-supported": "Η εξαγωγή μετάφρασης δεν υποστηρίζεται.",
+ "translate-export-format-notsupported": "Η καθορισμένη μορφή εξαγωγής δεν υποστηρίζεται από την ομάδα μηνυμάτων.",
+ "translate-checks-parameters": "{{PLURAL:$2|Η ακόλουθη παράμετρος δεν χρησιμοποιείται|Οι ακόλουθες παράμετροι δεν χρησιμοποιούνται}}: <strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Η ακόλουθη παράμετρος|Οι ακόλουθες παράμετροι}} είναι {{PLURAL:$2|άγνωστη|άγνωστες}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "Υπάρχει ακανόνιστη ποσότητα {{PLURAL:$2|παρενθέσεων|παρενθέσεων}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Ο ακόλουθος σύνδεσμος|Οι ακόλουθοι $2 σύνδεσμοι}} είναι {{PLURAL:$2|προβληματικός|προβληματικοί}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Ο ακόλουθος σύνδεσμος απουσιάζει|Οι ακόλουθοι $2 σύνδεσμοι απουσιάζει}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Ο ορισμός χρησιμοποιεί τη συνάρτηση <nowiki>{{PLURAL:}}</nowiki> αλλά η μετάφραση όχι.",
+ "translate-checks-plural-forms": "Στη συνάρτηση <nowiki>{{PLURAL:}}</nowiki> {{PLURAL:$1|δόθηκε μια μορφή|δόθηκαν $1 μορφές}} αλλά {{PLURAL:$2|αλλά μόνο μια μορφή υποστηρίζεται|υποστηρίζονται $2 μορφές}} (εξαιρώντας τις μορφές 0= και 1=).",
+ "translate-checks-plural-dupe": "Η συνάρτηση <nowiki>{{PLURAL:}}</nowiki> έχει διπλές μορφές στο τέλος. Το <nowiki>{{PLURAL:$1|sheep|sheep}}</nowiki> πρέπει να γράφεται ως <nowiki>{{PLURAL:$1|sheep}}</nowiki>.",
+ "translate-checks-pagename": "Ο ονοματοχώρος άλλαξε σε σχέση με τον ορισμό",
+ "translate-checks-format": "Αυτή η μετάφραση δεν ακολουθεί τον ορισμό ή έχει μη έγκυρη σύνταξη: $1",
+ "translate-checks-escape": "Οι ακόλουθοι χαρακτήρες διαφυγής μπορεί να συμπτωματικοί: <strong>$1</strong>",
+ "translate-checks-parametersnotequal": "Το πλήθος των παραμέτρων είναι {{PLURAL:$1|$1}} ενώ θα έπρεπε να είναι {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "Το <nowiki>$1</nowiki> έχει λανθασμένη μορφή.",
+ "translate-checks-fudforum-syntax": "Χρήση του <nowiki>$1</nowiki> αντί του <nowiki>$2</nowiki> σε αυτό το εγχείρημα.",
+ "translate-pref-editassistlang": "Βοηθητικές γλώσσες:",
+ "prefs-translate": "Επιλογές μετάφρασης",
+ "translate-pref-editassistlang-help": "Κατάλογος κωδικών γλωσσών χωρισμένων με κόμματα.\nΗ μετάφραση ενός μηνύματος σε αυτές τις γλώσσες εμφανίζεται μόνο κατά τη διενέργεια μιας μετάφρασης.\nΗ προεπιλεγμένη λίστα των γλωσσών εξαρτάται από τη γλώσσα σου.",
+ "translate-pref-editassistlang-bad": "Μη έγκυρος κωδικός γλώσσας στον κατάλογο:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Επεξεργασία χρησιμοποιώντας την διεπαφή μετάφρασης",
+ "right-translate-manage": "Διαχείριση ομάδων μηνυμάτων",
+ "action-translate-manage": "διαχειριστείτε ομάδες μηνυμάτων",
+ "right-translate-import": "Εισαγωγή μεταφράσεων που έγιναν εκτός σύνδεσης",
+ "action-translate-import": "εισαγωγή μεταφράσεων που έγιναν εκτός σύνδεσης",
+ "right-translate-messagereview": "Θεώρηση μεταφράσεων",
+ "action-translate-messagereview": "θεωρήσετε μεταφράσεις",
+ "right-translate-groupreview": "Αλλαγή κατάστασης ροής εργασίας των ομάδων μηνυμάτων",
+ "action-translate-groupreview": "αλλάξετε την κατάσταση ροής εργασίας των ομάδων μηνυμάτων",
+ "translate-rcfilters-translations": "Μεταφράσεις",
+ "translate-rcfilters-translations-only-label": "Μεταφράσεις",
+ "translate-rcfilters-translations-only-desc": "Αλλαγές στις μεταφρασμένες σελίδες",
+ "translate-rcfilters-translations-filter-label": "Όχι μεταφράσεις",
+ "translate-rcfilters-translations-filter-desc": "Όλες οι αλλαγές που δεν αφορούν μεταφράσεις.",
+ "translate-rcfilters-translations-site-label": "Μηνύματα της ιστοσελίδας",
+ "translate-rcfilters-translations-site-desc": "Προσωποποιημένα μηνύματα στο MediaWiki",
+ "translate-rc-translation-filter": "Φιλτράρισμα μεταφράσεων:",
+ "translate-rc-translation-filter-no": "Να μη γίνει τίποτα",
+ "translate-rc-translation-filter-only": "Εμφάνιση μόνο των μεταφράσεων",
+ "translate-rc-translation-filter-filter": "Απόκρυψη μεταφράσεων",
+ "translate-rc-translation-filter-site": "Εμφάνιση μόνο των αλλαγών στα μηνύματα ιστοτόπου",
+ "translationstats": "Στατιστικά μετάφρασης",
+ "translate-stats-edits": "Επεξεργασίες",
+ "translate-stats-users": "Μεταφραστές",
+ "translate-stats-registrations": "Εγγραφές",
+ "translate-stats-reviews": "Θεωρήσεις",
+ "translate-stats-reviewers": "Θεωρητές",
+ "translate-statsf-intro": "Μπορείτε να δημιουργήσετε απλά στατιστικά με αυτή τη φόρμα. Όλες οι τιμές έχουν άνω και κάτω όρια.",
+ "translate-statsf-options": "Επιλογές γραφήματος",
+ "translate-statsf-width": "Πλάτος σε πίξελ:",
+ "translate-statsf-height": "Ύψος σε πίξελ:",
+ "translate-statsf-days": "Χρονική περίοδος σε ημέρες:",
+ "translate-statsf-start": "Ημερομηνία έναρξης:",
+ "translate-statsf-scale": "Υποδιαίρεση:",
+ "translate-statsf-scale-years": "Χρόνια",
+ "translate-statsf-scale-months": "Μήνες",
+ "translate-statsf-scale-weeks": "Εβδομάδες",
+ "translate-statsf-scale-days": "Ημέρες",
+ "translate-statsf-scale-hours": "Ώρες",
+ "translate-statsf-count": "Μετρούμενο μέγεθος:",
+ "translate-statsf-count-edits": "Αριθμός επεξεργασιών",
+ "translate-statsf-count-users": "Ενεργοί μεταφραστές",
+ "translate-statsf-count-registrations": "Νέοι χρήστες",
+ "translate-statsf-count-reviews": "Θεωρήσεις μετάφρασης",
+ "translate-statsf-count-reviewers": "Θεωρητές",
+ "translate-statsf-language": "Λίστα κωδικών γλωσσών χωρισμένη με κόμματα:",
+ "translate-statsf-group": "Λίστα κωδικών ομάδων χωρισμένη με κόμματα:",
+ "translate-statsf-submit": "Προεπισκόπηση",
+ "translate-tag-page-desc": "Μετάφραση της σελίδας wiki [[$2|$1]] από $3 ($4).",
+ "translate-sidebar-alltrans": "Σε άλλες γλώσσες",
+ "translations": "Όλες οι μεταφράσεις",
+ "translations-summary": "Εισαγάγετε ένα όνομα μηνύματος παρακάτω για εμφανιστούν όλες οι διαθέσιμες μεταφράσεις.",
+ "translate-translations-no-message": "Το «$1» δεν είναι μήνυμα προς μετάφραση",
+ "translate-translations-none": "Δεν υπάρχουν μεταφράσεις για το «$1»",
+ "translate-translations-count": "{{PLURAL:$1|Βρέθηκε μια μετάφραση|Βρέθηκαν $1 μεταφράσεις}}.",
+ "translate-translations-fieldset-title": "Μήνυμα",
+ "translate-translations-messagename": "Όνομα:",
+ "translate-translations-project": "Εγχείρημα:",
+ "translate-translations-including-no-param": "Καθορίστε ένα έγκυρο όνομα μηνύματος στην παράμετρο υποσελίδας",
+ "translate-translations-history-short": "ι",
+ "languagestats": "Στατιστικά γλώσσας",
+ "languagestats-summary": "Αυτή η σελίδα δείχνει τα στατιστικά μεταφράσεων για όλες τις ομάδες μηνυμάτων για μία γλώσσα.",
+ "messagegroupstats-summary": "Αυτή η σελίδα εμφανίζει στατιστικά ομάδων μηνυμάτων.",
+ "languagestats-stats-for": "Στατιστικά μετάφρασης για $1 ($2).",
+ "languagestats-recenttranslations": "πρόσφατες μεταφράσεις",
+ "translate-langstats-incomplete": "Μερικά από τα στατιστικά σε αυτήν τη σελίδα δεν είναι πλήρη. Παρακαλούμε επαναφορτώστε για να πάρετε περισσότερα στατιστικά.",
+ "translate-langstats-expand": "ανάπτυξη",
+ "translate-langstats-collapse": "σύμπτυξη",
+ "translate-langstats-expandall": "ανάπτυξη όλων",
+ "translate-langstats-collapseall": "σύμπτυξη όλων",
+ "translate-language-code": "Κωδικός γλώσσας",
+ "translate-language-code-field-name": "Κωδικός γλώσσας:",
+ "translate-suppress-complete": "Απόκρυψη πλήρως μεταφρασμένων ομάδων μηνυμάτων",
+ "translate-ls-noempty": "Απόκρυψη πλήρως αμετάφραστων ομάδων μηνυμάτων",
+ "translate-language": "Γλώσσα",
+ "translate-total": "Μηνύματα",
+ "translate-untranslated": "Αμετάφραστα",
+ "translate-percentage-complete": "Ολοκλήρωση",
+ "translate-percentage-fuzzy": "Παρωχημένα",
+ "translate-percentage-proofread": "Ελέγχθηκε",
+ "translate-languagestats-overall": "Όλες οι ομάδες μηνυμάτων μαζί",
+ "translate-ls-submit": "Εμφάνιση στατιστικών",
+ "translate-ls-column-group": "Ομάδα μηνυμάτων",
+ "translate-mgs-pagename": "Στατιστικά ομάδας μηνυμάτων",
+ "translate-mgs-fieldset": "Εμφάνιση προτιμήσεων",
+ "translate-mgs-group": "Ομάδα μηνυμάτων:",
+ "translate-mgs-nocomplete": "Να μην εμφανιστούν οι γλώσσες για τις οποίες έχει ολοκληρωθεί η μετάφραση",
+ "translate-mgs-noempty": "Να μην εμφανιστούν οι γλώσσες για τις οποίες δεν έχει γίνει καμιά μετάφραση",
+ "translate-mgs-submit": "Εμφάνιση στατιστικών",
+ "translate-mgs-column-language": "Γλώσσα",
+ "translate-mgs-totals": "{{PLURAL:$1|Όλη η $1 γλώσσα|Όλες οι $1 γλώσσες}} μαζί",
+ "translate-mgs-invalid-group": "Η καθορισμένη ομάδα $1 δεν υπάρχει.",
+ "translate-mgs-nothing": "Τίποτε προς εμφάνιση για τις στατιστικές που ζητήθηκαν.",
+ "supportedlanguages": "Υποστηριζόμενες γλώσσες",
+ "supportedlanguages-summary": "Αυτή η σελίδα εμφανίζει μια λίστα με όλες τις γλώσσες που υποστηρίζονται από τον ιστοχώρο {{SITENAME}},\nμαζί με τα ονόματα των μεταφραστών που δουλεύουν πάνω σε κάθε γλώσσα.\nΌσο πιο πολλές επεξεργασίες έχει συνεισφέρει ένας μεταφραστής, τόσο πιο μεγάλο εμφανίζεται το όνομά του.\nΤο χρώμα υπογράμμισης υποδεικνύει το πόσο πρόσφατα δραστηριοποιήθηκε ο κάθε μεταφραστής.",
+ "supportedlanguages-colorlegend": "Υπόμνημα για το χρώμα: Τελευταία μετάφραση $1 ημέρες πριν.",
+ "supportedlanguages-sqlite-error": "Το SQLite δεν υποστηρίζεται",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Μεταφραστής|Μεταφράστρια}}|Μεταφραστές}}: $1",
+ "supportedlanguages-recenttranslations": "πρόσφατες μεταφράσεις",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|γλώσσα|γλώσσες}} συνολικά.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|επεξεργασία|επεξεργασίες}} - τελευταία επεξεργασία $3 {{PLURAL:$3|day|days}} πριν",
+ "abusefilter-edit-builder-vars-translate-source-text": "Αρχικό κείμενο μεταφραστικής ενότητας",
+ "abusefilter-edit-builder-vars-translate-target-language": "Γλώσσα στόχος για μετάφραση",
+ "translate-jssti-add": "Προσθήκη στην λίστα",
+ "managemessagegroups": "Διαχείριση ομάδας μηνυμάτων",
+ "translate-smg-notallowed": "Δεν σας επιτρέπεται να εκτελέσετε αυτήν την ενέργεια.",
+ "translate-smg-nochanges": "Δεν υπάρχουν αλλαγές προς επεξεργασία.",
+ "translate-smg-submit": "Υποβολή αλλαγών για επεξεργασία",
+ "translate-smg-submitted": "Οι ορισμοί μηνυμάτων έχουν ενημερωθεί. Οι αλλαγές είναι υπό διεργασία στο παρασκήνιο.",
+ "translate-smg-more": "Θα υπάρχουν περισσότερες αλλαγές για διεκπεραίωση μετά την υποβολή αυτών των αλλαγών.",
+ "translate-smg-left": "Περιεχόμενο μηνύματος στο wiki",
+ "translate-smg-right": "Εισερχόμενες αλλαγές",
+ "translate-smg-rename-select": "Επιλογή",
+ "translate-smg-rename-cancel": "Άκυρο",
+ "translate-manage-import-diff": "Μήνυμα $1 | Ενέργειες: $2",
+ "translate-manage-import-new": "Νέο μήνυμα $1",
+ "translate-manage-import-deleted": "Διαγεγραμμένο μήνυμα $1",
+ "translate-manage-action-import": "Εισαγωγή",
+ "translate-manage-action-conflict": "Εισαγωγή και ασαφοποίηση",
+ "translate-manage-action-ignore": "Αγνόηση",
+ "translate-manage-action-fuzzy": "Εισαγωγή και ασαφοποίηση μεταφράσεων",
+ "translate-manage-action-rename": "Μετονομασία",
+ "translate-manage-nochanges": "Δεν υπάρχουν αλλαγές στους ορισμούς μηνυμάτων για αυτήν την ομάδα.",
+ "translate-manage-nochanges-other": "Δεν υπήρξαν μεταβολές για αυτήν τη γλώσσα.\nΧρησιμοποιήστε τον παρακάτω σύνδεσμο για να επιστρέψετε σε προβολή λεπτομερειών ομάδας.",
+ "translate-manage-inconsistent": "Εντοπίστηκε ασυνέπεια στο αίτημα.\nΠαρακαλούμε ελέγξτε για αλλαγές και προσπαθήστε ξανά.\nΛεπτομέρειες: $1.",
+ "translate-manage-toolong": "Έγινε υπέρβαση του μέγιστου χρόνου διεργασίας που είναι $1 {{PLURAL:$1|δευτερόλεπτο|δευτερόλεπτα}}.\nΠαρακαλούμε υποβάλετε ξανά την φόρμα για να συνεχιστεί η διεργασία.",
+ "translate-manage-import-summary": "Γίνεται εισαγωγή νέας έκδοσης από εξωτερική πηγή.",
+ "translate-manage-import-ignore": "Παράκαμψη του μηνύματος $1.",
+ "translate-manage-conflict-summary": "Γίνεται εισαγωγή νέας έκδοσης από εξωτερική πηγή. Παρακαλούμε να ελεγχθεί.",
+ "translate-manage-submit": "Εκτέλεση",
+ "translate-manage-intro-other": "Παρακάτω βρίσκεται η λίστα με τις αλλαγές στη μετάφραση στη γλώσσα $1.\nΠαρακαλούμε θεωρήστε τις αλλαγές και επιλέξτε ποια ενέργεια θέλετε να γίνει για κάθε ενημέρωση.\nΕάν επιλέξετε αγνόηση των αλλαγών, η συγκεκριμένη ενέργεια είναι απλώς προσωρινή.",
+ "translate-manage-import-ok": "Εισήχθει: $1",
+ "translate-manage-import-done": "Η εισαγωγή ολοκληρώθηκε!",
+ "importtranslations": "Εισαγωγή μεταφράσεων",
+ "translate-import-from-local": "Ανέβασμα τοπικού αρχείου:",
+ "translate-import-load": "Ανέβασμα αρχείου",
+ "translate-import-err-dl-failed": "Αδυναμία λήψης του αρχείου: $1",
+ "translate-import-err-ul-failed": "Το ανέβασμα του αρχείου απέτυχε",
+ "translate-import-err-invalid-title": "Το όνομα του αρχείου <nowiki>$1</nowiki> δεν ήταν έγκυρο.",
+ "translate-import-err-no-such-file": "Το αρχείο <nowiki>$1</nowiki> δεν υπάρχει ή δεν έχει φορτωθεί τοπικά.",
+ "translate-import-err-stale-group": "Η ομάδα μηνυμάτων στην οποία ανήκει αυτό το αρχείο δεν υπάρχει.",
+ "translate-import-err-no-headers": "Το αρχείο δεν είναι ένα σωστά σχηματισμένο αρχείο τύπου Gettext στη μορφή που αναγνωρίζει η επέκταση Translate:\nΑδύνατος ο προσδιορισμός ομάδας μηνυμάτων και γλώσσας από την κεφαλίδα του αρχείου.",
+ "translate-js-support-unsaved-warning": "Έχετε μη αποθηκευμένες μεταφράσεις.",
+ "translate-gs-pos": "Θέση",
+ "translate-gs-code": "Κωδικός",
+ "translate-gs-continent": "Ήπειρος",
+ "translate-gs-speakers": "Ομιλητές",
+ "translate-gs-score": "Σκορ",
+ "translate-gs-multiple": "Πολλαπλές",
+ "translate-gs-count": "Καταμέτρηση",
+ "translate-gs-total": "Σύνολο",
+ "translate-gs-avgscore": "Μέσο σκορ",
+ "translate-documentation-language": "Τεκμηρίωση μηνύματος",
+ "translate-searchprofile": "Μεταφράσεις",
+ "translate-searchprofile-tooltip": "Αναζήτηση από όλες τις μεταφράσεις",
+ "translate-searchprofile-note": "Περισσότερες επιλογές αναζήτησης είναι διαθέσιμες στην [$1 αναζήτηση μετάφρασης].",
+ "translate-search-languagefilter": "Φιλτράρισμα με βάση τη γλώσσα:",
+ "translate-search-nofilter": "Χωρίς φιλτράρισμα",
+ "log-name-translationreview": "Αρχείο καταγραφής θεωρήσεων μεταφράσεων",
+ "log-description-translationreview": "Αρχείο καταγραφής όλων των θεωρήσεων σε μεταφράσεις και ομάδες μηνυμάτων.",
+ "logentry-translationreview-message": "{{GENDER:$2|Ο|Η}} $1 θεώρησε τη μετάφραση $3",
+ "logentry-translationreview-group": "{{GENDER:$2|Ο|Η}} $1 άλλαξε την κατάσταση των μεταφράσεων στα $4 του $3 από $6 σε $7",
+ "group-translate-sandboxed": "Μη εγκεκριμένοι μεταφραστές",
+ "group-translate-sandboxed-member": "μη {{GENDER:$1|εγκεκριμένος μεταφραστής|εγκεκριμένη μεταφράστρια}}",
+ "right-translate-sandboxmanage": "Διαχείριση χρηστών αμμοδοχείου",
+ "action-translate-sandboxmanage": "διαχειριστείτε χρήστες αμμοδοχείου",
+ "right-translate-sandboxaction": "Εκτέλεση ενεργειών λευκής λίστας για χρήστες αμμοδοχείου",
+ "action-translate-sandboxaction": "εκτελέσετε ενέργειες λευκής λίστας για χρήστες αμμοδοχείου",
+ "translate-workflow-state-": "(δεν έχει οριστεί)",
+ "translate-workflowstatus": "Κατάσταση: $1",
+ "translate-workflow-set-doing": "Γίνεται ορισμός...",
+ "translate-workflow-autocreated-summary": "Αυτόματη δημιουργία σελίδας για την κατάσταση ροής εργασίας $1",
+ "translate-stats-workflow": "Κατάσταση",
+ "translate-workflowgroup-label": "Καταστάσεις ροής εργασίας",
+ "translate-workflowgroup-desc": "Αυτή η ομάδα μηνυμάτων δείχνει τις καταστάσεις ροής εργασίας της μετάφρασης.\nΟι καταστάσεις ορίζονται στη μεταβλητή ρύθμισης $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Πρόσφατες μεταφράσεις",
+ "translate-dynagroup-recent-desc": "Αυτή η ομάδα μηνυμάτων δείχνει όλες τις πρόσφατες μεταφράσεις σε αυτήν τη γλώσσα.\nΠάρα πολύ χρήσιμο για εργασίες θεώρησης.",
+ "translate-dynagroup-additions-label": "Πρόσφατες προσθήκες",
+ "translate-dynagroup-additions-desc": "Αυτή η ομάδα μηνυμάτων εμφανίζει νέα και αλλαγμένα μηνύματα.",
+ "translate-msggroupselector-projects": "Ομάδα μηνυμάτων",
+ "translate-msggroupselector-search-placeholder": "Αναζήτηση ομάδων",
+ "translate-msggroupselector-search-all": "Όλα",
+ "translate-msggroupselector-search-recent": "Πρόσφατα",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|υποομάδα|υποομάδες}}",
+ "tux-languageselector": "Μετάφραση σε",
+ "tux-tab-all": "Όλα",
+ "tux-tab-untranslated": "Αμετάφραστα",
+ "tux-tab-outdated": "Παρωχημένα",
+ "tux-tab-translated": "Μεταφρασμένα",
+ "tux-tab-unproofread": "Αθεώρητα",
+ "tux-edit": "Επεξεργασία",
+ "tux-status-optional": "Προαιρετικά",
+ "tux-status-fuzzy": "Παρωχημένο",
+ "tux-status-proofread": "Θεωρημένο",
+ "tux-status-translated": "Μεταφρασμένο",
+ "tux-status-saving": "Αποθήκευση...",
+ "tux-status-unsaved": "Μη αποθηκευμένα",
+ "tux-save-unknown-error": "Προέκυψε άγνωστο σφάλμα.",
+ "tux-editor-editsummary-placeholder": "Προαιρετική σύνοψη",
+ "tux-editor-paste-original-button-label": "Επικόλληση πηγαίου κειμένου",
+ "tux-editor-discard-changes-button-label": "Απόρριψη των αλλαγών",
+ "tux-editor-save-button-label": "Αποθήκευση μετάφρασης",
+ "tux-editor-skip-button-label": "Προχωρήστε στο επόμενο",
+ "tux-editor-cancel-button-label": "Ακύρωση",
+ "tux-editor-confirm-button-label": "Επιβεβαίωση μετάφρασης",
+ "tux-editor-proofread-button-label": "Σήμανση ως θεωρημένο",
+ "tux-editor-shortcut-info": "Πατήστε «$1» για αποθήκευση ή «$2» για μετάβαση στο επόμενο μήνυμα ή «$4» για προσθήκη σύνοψης ή «$3» για άλλες συντομεύσεις.",
+ "tux-editor-edit-desc": "Επεξεργασία τεκμηρίωσης",
+ "tux-editor-add-desc": "Προσθήκη τεκμηρίωσης",
+ "tux-editor-suggestions-title": "Προτάσεις",
+ "tux-editor-in-other-languages": "Σε άλλες γλώσσες",
+ "tux-editor-need-more-help": "Χρειάζεστε περισσότερη βοήθεια;",
+ "tux-editor-ask-help": "Ζητήστε περισσότερες πληροφορίες",
+ "tux-editor-tm-match": "$1% αντιστοίχιση",
+ "tux-notices-more": "{{PLURAL:$1|περισσότερες $1}}",
+ "tux-notices-hide": "απόκρυψη",
+ "tux-editor-save-failed": "Η αποθήκευση της μετάφρασης απέτυχε: $1",
+ "tux-editor-n-uses": "χρησιμοποιήθηκε $1 {{PLURAL:$1|φορά|φορές}}",
+ "tux-editor-message-desc-more": "Δείτε περισσότερα",
+ "tux-editor-message-desc-less": "Δείτε λιγότερα",
+ "tux-editor-clear-translated": "Απόκρυψη μεταφρασμένων",
+ "tux-editor-proofreading-mode": "Θεώρηση",
+ "tux-editor-translate-mode": "Κατάλογος",
+ "tux-editor-proofreading-hide-own-translations": "Απόκρυψη των μεταφράσεών σας",
+ "tux-editor-proofreading-show-own-translations": "Εμφάνιση των μεταφράσεών σας",
+ "tux-proofread-action-tooltip": "Σήμανση ως θεωρημένο",
+ "tux-proofread-edit-label": "Επεξεργασία",
+ "tux-editor-page-mode": "Σελίδα",
+ "tux-editor-outdated-notice": "Αυτή η μετάφραση μπορεί να χρειάζεται ενημέρωση.",
+ "tux-editor-outdated-notice-diff-link": "Εμφάνιση διαφορών",
+ "tux-editor-doc-editor-placeholder": "Τεκμηρίωση μηνύματος",
+ "tux-editor-doc-editor-save": "Αποθήκευση τεκμηρίωσης",
+ "tux-editor-doc-editor-cancel": "Ακύρωση",
+ "tux-messagetable-more-messages": "$1 ακόμη {{PLURAL:$1|μήνυμα|μηνύματα}}",
+ "tux-messagetable-loading-messages": "Γίνεται φόρτωση {{PLURAL:$1|μηνύματος|μηνυμάτων}}...",
+ "tux-message-filter-placeholder": "Φιλτράρισμα καταλόγου",
+ "tux-message-filter-result": "{{PLURAL:$1|Βρέθηκε $1 αποτέλεσμα|Βρέθηκαν $1 αποτελέσματα}} για «$2»",
+ "tux-message-filter-advanced-button": "Σύνθετη αναζήτηση",
+ "tux-message-filter-optional-messages-label": "Προαιρετική μηνύματα",
+ "tux-proofread-translated-by-self": "Μεταφρασμένο από εσάς",
+ "tux-empty-list-all": "Αυτή η ομάδα μηνυμάτων είναι κενή",
+ "tux-empty-list-all-guide": "Επιλέξτε μια διαφορετική ομάδα μηνυμάτων για μετάφραση",
+ "tux-translate-page-no-such-group": "<strong>Η αναφερόμενη ομάδα δεν υπάρχει.</strong> Επιλέξτε μια διαφορετική ομάδα μηνυμάτων.",
+ "tux-empty-list-translated": "Δεν υπάρχουν μεταφρασμένα μηνύματα",
+ "tux-empty-list-translated-guide": "Μπορείτε να βοηθήσετε στη μετάφραση",
+ "tux-empty-list-translated-action": "Μετάφραση",
+ "tux-empty-no-messages-to-display": "Δεν υπάρχουν μηνύματα προς εμφάνιση.",
+ "tux-empty-there-are-optional": "Υπάρχουν προαιρετικά μηνύματα που δεν εμφανίζονται στη λίστα",
+ "tux-empty-show-optional-messages": "Εμφάνιση προαιρετικών μηνυμάτων",
+ "tux-empty-no-outdated-messages": "Δεν υπάρχουν παρωχημένα μηνύματα",
+ "tux-empty-nothing-to-proofread": "Τίποτα προς θεώρηση",
+ "tux-empty-you-can-help-providing": "Μπορείτε να βοηθήσετε παρέχοντας νέες μεταφράσεις",
+ "tux-empty-nothing-new-to-proofread": "Τίποτα νέο προς θεώρηση",
+ "tux-empty-you-can-review-already-proofread": "Μπορείτε να θεωρήσετε μεταφράσεις που έχουν ήδη θεωρηθεί από άλλους.",
+ "tux-empty-list-other": "Δεν υπάρχει τίποτα για μετάφραση.",
+ "tux-empty-list-other-guide": "Μπορείτε να βοηθήσετε στη θεώρηση των υπαρχουσών μεταφράσεων",
+ "tux-empty-list-other-action": "Θεώρηση μεταφράσεων",
+ "tux-empty-list-other-link": "Εμφάνιση όλων των μηνυμάτων",
+ "tux-editor-close-tooltip": "Κλείσιμο",
+ "tux-editor-expand-tooltip": "Ανάπτυξη",
+ "tux-editor-collapse-tooltip": "Σύμπτυξη",
+ "tux-editor-message-tools-show-editor": "Εμφάνιση στον επεξεργαστή wiki",
+ "tux-editor-message-tools-history": "Ιστορικό",
+ "tux-editor-message-tools-delete": "Διαγραφή",
+ "tux-editor-message-tools-translations": "Όλες οι μεταφράσεις",
+ "tux-editor-message-tools-linktothis": "Σύνδεσμος προς αυτό το μήνυμα",
+ "tux-editor-loading": "Γίνεται φόρτωση...",
+ "translate-search-more-languages-info": "$1 ακόμη {{PLURAL:$1|γλώσσα|γλώσσες}}",
+ "translate-statsbar-tooltip": "$1% μεταφρασμένα, $2% θεωρημένα",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% μεταφρασμένα, $2% θεωρημένα, $3% παρωχημένα",
+ "translate-search-more-groups-info": "$1 ακόμα {{PLURAL:$1|ομάδα|ομάδες}}",
+ "tux-session-expired": "Δεν είστε πια σε σύνδεση. Παρακαλούμε συνδεθείτε σε ξεχωριστή καρτέλα. Εναλλακτικά, δημιουργήστε ένα αντίγραφο των μη αποθηκευμένων μεταφράσεων, συνδεθείτε, επιστρέψετε σε αυτή τη σελίδα και εισαγάγετε τις μεταφράσεις σας ξανά.",
+ "tux-nojs": "Αυτό το εργαλείο δεν λειτουργεί χωρίς JavaScript. Ή το JavaScript είναι απενεργοποιημένο, ή απέτυχε να δουλέψει ή αυτό το πρόγραμμα περιήγησης δεν υποστηρίζεται.",
+ "specialpages-group-translation": "Μετάφραση"
+}
diff --git a/Translate/i18n/core/en-gb.json b/Translate/i18n/core/en-gb.json
new file mode 100644
index 00000000..8c9acdf9
--- /dev/null
+++ b/Translate/i18n/core/en-gb.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chase me ladies, I'm the Cavalry",
+ "Lloffiwr",
+ "Samwilson",
+ "Shirayuki",
+ "Thehelpfulone"
+ ]
+ },
+ "supportedlanguages-summary": "This page shows a list of active languages in {{SITENAME}},\ntogether with the names of the translators working on that language.\nA translator's name appears larger, the more edits the translator has contributed.\nThe colour of an underline indicates how recently a translator has been active here.",
+ "supportedlanguages-colorlegend": "Legend for the colour: Last translation $1 days ago."
+}
diff --git a/Translate/i18n/core/en.json b/Translate/i18n/core/en.json
new file mode 100644
index 00000000..74a2e0d8
--- /dev/null
+++ b/Translate/i18n/core/en.json
@@ -0,0 +1,451 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nike",
+ "Siebrand",
+ "Amire80",
+ "Santhosh.thottingal",
+ "MarcoAurelio"
+ ]
+ },
+ "translate": "Translate",
+ "translate-extensionname": "Translate",
+ "translate-desc": "[[Special:Translate|Special page]] for translating MediaWiki and beyond",
+ "translate-fuzzybot-desc": "This is a special system account used by the MediaWiki [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate Translate extension] used to maintain translations.\nThis account is part of the MediaWiki software and it is not owned by any user.",
+ "translate-taskui-export-to-file": "Export in native format",
+ "translate-taskui-export-as-po": "Export for off-line translation",
+ "translate-taskui-export-as-csv": "Export in CSV format",
+ "translate-export-csv-message-title": "Translation message title",
+ "translate-export-csv-definition": "Message definition",
+ "translate-taction-translate": "Translate",
+ "translate-taction-proofread": "Review",
+ "translate-taction-lstats": "Language statistics",
+ "translate-taction-mstats": "Message group statistics",
+ "translate-taction-export": "Export",
+ "translate-taction-disabled": "This action is disabled on this wiki.",
+ "translate-page-no-such-language": "Specified language was invalid.",
+ "translate-page-no-such-group": "Specified group was invalid.",
+ "translate-page-disabled": "Translations to this language in this group have been disabled.\nReason:\n\n<em>$1</em>",
+ "translate-language-disabled": "Translation to this language is disabled.",
+ "translate-page-settings-legend": "Settings",
+ "translate-page-group": "Group",
+ "translate-page-language": "Language",
+ "translate-page-limit": "Limit",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|message|messages}} per page",
+ "translate-submit": "Fetch",
+ "translate-page-navigation-legend": "Navigation",
+ "translate-page-showing": "Showing messages from $1 to $2 of $3.",
+ "translate-page-showing-all": "Showing $1 {{PLURAL:$1|message|messages}}.",
+ "translate-page-showing-none": "No messages to show.",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "Next page",
+ "translate-prev": "Previous page",
+ "translate-page-description-legend": "Information about the group",
+ "translate-page-description-hasoptional": "This message group contains optional messages.\nOptional messages should only be translated when your language has special requirements\nlike not using spaces or transliterating proper names. $1",
+ "translate-page-description-hasoptional-open": "Show optional messages.",
+ "translate-page-edit": "edit",
+ "translate-optional": "(optional)",
+ "translate-ignored": "(ignored)",
+ "translate-edit-title": "Edit \"$1\"",
+ "translate-edit-definition": "Message definition",
+ "translate-edit-contribute": "contribute",
+ "translate-edit-no-information": "<em>This message has no documentation.\nIf you know where or how this message is used, you can help other translators by adding documentation to this message.</em>",
+ "translate-edit-information": "Information about message ($1)",
+ "translate-edit-warnings": "Warnings about incomplete translations",
+ "translate-edit-tmmatch-source": "Translation source text: $1",
+ "translate-edit-tmmatch": "$1% match",
+ "translate-edit-nopermission": "You need translation rights to translate messages.",
+ "translate-edit-askpermission": "Get permission",
+ "exporttranslations": "Export translations",
+ "translate-export-form-format": "Format",
+ "translate-export-invalid-format": "Please specify a valid format.",
+ "translate-export-not-supported": "Translation export is not supported.",
+ "translate-export-format-notsupported": "The specified export format is not supported by the message group.",
+ "translate-export-group-too-large": "The chosen message group is too large. Choose a message group that has fewer than $1 {{PLURAL:$1|message|messages}} or contact translation admin for advice.",
+ "translate-checks-parameters": "Following {{PLURAL:$2|parameter is|parameters are}} not used:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "Following {{PLURAL:$2|parameter is|parameters are}} unknown:\n<strong>$1</strong>",
+ "translate-checks-balance": "There is an uneven amount of {{PLURAL:$2|parenthesis|parentheses}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "Following {{PLURAL:$2|link is|$2 links are}} problematic:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "Following {{PLURAL:$2|link is|$2 links are}} missing:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Definition uses <nowiki>{{PLURAL:}}</nowiki> but translation does not.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> was given {{PLURAL:$1|one form|$1 forms}} but {{PLURAL:$2|only one form is|$2 forms are}} supported (excluding 0= and 1= forms).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> has duplicate forms at the end. <nowiki>{{PLURAL:$1|sheep|sheep}}</nowiki> should be written as <nowiki>{{PLURAL:$1|sheep}}</nowiki>.",
+ "translate-checks-gettext-plural-missing": "This translation must have <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-unsupported": "This message does not support <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-count": "<nowiki>{{PLURAL:GETTEXT|}}</nowiki> accepts exactly $1 {{PLURAL:$1|plural form|plural forms}}. Currently $2 {{PLURAL:$2|plural form is|plural forms are}} given.",
+ "translate-checks-smartformat-plural-missing": "This translation must have plural on variable $1.",
+ "translate-checks-smartformat-plural-unsupported": "This message does not support plural on variable $1.",
+ "translate-checks-smartformat-plural-count": "Incorrect number of plural forms in <strong>$3</strong>. It must have $1 {{PLURAL:$1|plural form|plural forms}}. Currently $2 {{PLURAL:$2|plural form is|plural forms are}} given.",
+ "translate-checks-unicode-plural-missing": "This translation must have <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-unsupported": "This message does not support <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-invalid": "Plural forms should be defined as $1. This translation contains $2.",
+ "translate-checks-pagename": "Namespace changed from the definition",
+ "translate-checks-format": "This translation does not follow the definition or has invalid syntax: $1",
+ "translate-checks-escape": "The following escape {{PLURAL:$2|character|characters}} may be accidental: <strong>$1</strong>. {{PLURAL:$4|A valid escape character is|Valid escape characters include:}} $3.",
+ "translate-checks-parametersnotequal": "Parameter count is {{PLURAL:$1|$1}}; should be {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> is malformed.",
+ "translate-checks-fudforum-syntax": "Use <nowiki>$1</nowiki> instead of <nowiki>$2</nowiki> in this project.",
+ "translate-checks-newline-missing-start": "There {{PLURAL:$1|is|are}} $1 missing newline {{PLURAL:$1|character|characters}} at the beginning of the translation.",
+ "translate-checks-newline-missing-end": "There {{PLURAL:$1|is|are}} $1 missing newline {{PLURAL:$1|character|characters}} at the end of the translation.",
+ "translate-checks-newline-extra-start": "There {{PLURAL:$1|is|are}} $1 extra newline {{PLURAL:$1|character|characters}} at the beginning of the translation.",
+ "translate-checks-newline-extra-end": "There {{PLURAL:$1|is|are}} $1 extra newline {{PLURAL:$1|character|characters}} at the end of the translation.",
+ "translate-checks-value-not-present": "The translation must be equal to {{PLURAL:$1|1=|one of the following values:}} $1.",
+ "translate-checks-replacement": "Use $2 instead of $1.",
+ "translate-checks-empty": "Translation with no content or only whitespace is not allowed.",
+ "translate-pref-editassistlang": "Assistant languages:",
+ "prefs-translate": "Translation options",
+ "translate-pref-editassistlang-help": "Comma separated list of language codes.\nTranslation of a message in these languages are shown when you are translating.\nThe default list of languages depends on your language.",
+ "translate-pref-editassistlang-bad": "Invalid language code in the list:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Edit using the translate interface",
+ "action-translate": "edit using the translate interface",
+ "right-translate-manage": "Manage message groups",
+ "action-translate-manage": "manage message groups",
+ "right-translate-import": "Import offline translations",
+ "action-translate-import": "import offline translations",
+ "right-translate-messagereview": "Review translations",
+ "action-translate-messagereview": "review translations",
+ "right-translate-groupreview": "Change workflow state of message groups",
+ "action-translate-groupreview": "change workflow state of message groups",
+ "translate-rcfilters-translations": "Translations",
+ "translate-rcfilters-translations-only-label": "Translations",
+ "translate-rcfilters-translations-only-desc": "Changes to translated pages.",
+ "translate-rcfilters-translations-filter-label": "Not translations",
+ "translate-rcfilters-translations-filter-desc": "All changes that are not translations.",
+ "translate-rcfilters-translations-site-label": "Site messages",
+ "translate-rcfilters-translations-site-desc": "Customizations of site messages in MediaWiki namespace.",
+ "translate-rc-translation-filter": "Filter translations:",
+ "translate-rc-translation-filter-no": "Do nothing",
+ "translate-rc-translation-filter-only": "Show translations only",
+ "translate-rc-translation-filter-filter": "Filter out translations",
+ "translate-rc-translation-filter-site": "Changes to site messages only",
+ "translationstats": "Translation statistics",
+ "translate-stats-edits": "Edits",
+ "translate-stats-users": "Translators",
+ "translate-stats-registrations": "Registrations",
+ "translate-stats-reviews": "Reviews",
+ "translate-stats-reviewers": "Reviewers",
+ "translate-statsf-intro": "You can generate simple statistics with this form.\nAll values have upper and lower limits.",
+ "translate-statsf-options": "Graph options",
+ "translate-statsf-width": "Width in pixels:",
+ "translate-statsf-height": "Height in pixels:",
+ "translate-statsf-days": "Time period in days:",
+ "translate-statsf-start": "Starting date:",
+ "translate-statsf-scale": "Granularity:",
+ "translate-statsf-scale-years": "Years",
+ "translate-statsf-scale-months": "Months",
+ "translate-statsf-scale-weeks": "Weeks",
+ "translate-statsf-scale-days": "Days",
+ "translate-statsf-scale-hours": "Hours",
+ "translate-statsf-count": "Measure:",
+ "translate-statsf-count-edits": "Number of edits",
+ "translate-statsf-count-users": "Active translators",
+ "translate-statsf-count-registrations": "New users",
+ "translate-statsf-count-reviews": "Translation reviews",
+ "translate-statsf-count-reviewers": "Reviewers",
+ "translate-statsf-language": "Comma-separated list of language codes:",
+ "translate-statsf-group": "Comma-separated list of group codes:",
+ "translate-statsf-submit": "Preview",
+ "translate-statsf-unknown-error": "An unknown error has occurred.",
+ "translate-statsf-error-message": "There was an error while loading the graph: $1",
+ "translate-statsf-graph-alt-text-info": "Text alternative for the translation statistics is in the data table below.",
+ "translate-statsf-alt-text": "This is the text alternative for the translation statistics.",
+ "translate-statsf-embed": "Code to embed the translation stats graph on other pages.",
+ "translate-tag-page-desc": "Translation of the wiki page [[$2|$1]] from $3 ($4).",
+ "translate-tag-page-wikipage-desc": "[[$1|Translation]] of the wiki page [[$2]] from <bdi>$3</bdi> ($4) to <bdi>$5</bdi> ($6)",
+ "translate-sidebar-alltrans": "In other languages",
+ "translations": "All translations",
+ "translations-summary": "Enter a message name below to show all available translations.",
+ "translate-translations-no-message": "\"$1\" is not a translatable message",
+ "translate-translations-none": "There are no translations for \"$1\"",
+ "translate-translations-count": "Found {{PLURAL:$1|one translation|$1 translations}}.",
+ "translate-translations-fieldset-title": "Message",
+ "translate-translations-messagename": "Name:",
+ "translate-translations-project": "Project:",
+ "translate-translations-including-no-param": "Please specify a valid message key in the subpage parameter",
+ "translate-translations-history-short": "h",
+ "languagestats": "Language statistics",
+ "languagestats-summary": "This page shows translation statistics for all message groups for a language.",
+ "messagegroupstats-summary": "This page shows message group statistics.",
+ "languagestats-stats-for": "Translation statistics for $1 ($2).",
+ "languagestats-recenttranslations": "recent translations",
+ "translate-langstats-incomplete": "Some of the statistics on this page are incomplete. Please reload to get more statistics.",
+ "translate-langstats-expand": "expand",
+ "translate-langstats-collapse": "collapse",
+ "translate-langstats-expandall": "expand all",
+ "translate-langstats-collapseall": "collapse all",
+ "translate-language-code": "Language code",
+ "translate-language-code-field-name": "Language code:",
+ "translate-suppress-complete": "Suppress completely translated message groups",
+ "translate-ls-noempty": "Suppress completely untranslated message groups",
+ "translate-language": "Language",
+ "translate-total": "Messages",
+ "translate-untranslated": "Untranslated",
+ "translate-percentage-complete": "Completion",
+ "translate-percentage-fuzzy": "Outdated",
+ "translate-percentage-proofread": "Reviewed",
+ "translate-languagestats-overall": "All message groups together",
+ "translate-ls-submit": "Show statistics",
+ "translate-ls-column-group": "Message group",
+ "translate-mgs-pagename": "Message group statistics",
+ "translate-mgs-fieldset": "Display preferences",
+ "translate-mgs-group": "Message group:",
+ "translate-mgs-nocomplete": "Do not display languages which have completed translation",
+ "translate-mgs-noempty": "Do not display languages which do not have any translations",
+ "translate-mgs-submit": "Show statistics",
+ "translate-mgs-column-language": "Language",
+ "translate-mgs-totals": "All $1 {{PLURAL:$1|language|languages}} together",
+ "translate-mgs-invalid-group": "The specified group $1 does not exist.",
+ "translate-mgs-nothing": "Nothing to show for requested statistics.",
+ "translate-tes-server-error": "Failed to fetch search suggestions",
+ "translate-tes-group-not-found": "No matching results",
+ "translate-tes-type-to-search": "Type to start searching",
+ "supportedlanguages": "Active languages",
+ "supportedlanguages-summary": "This page shows a list of active languages in {{SITENAME}},\ntogether with the names of the translators working on that language.\nA translator's name appears larger, the more edits the translator has contributed.\nThe color of an underline indicates how recently a translator has been active here.",
+ "supportedlanguages-colorlegend": "Legend for the color: Last translation $1 days ago.",
+ "supportedlanguages-localsummary": "",
+ "supportedlanguages-portallink": "[$1] $2 - $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-sqlite-error": "SQLite is not supported",
+ "supportedlanguages-postgres-error": "PostgreSQL is not supported",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Translator}}|Translators}}: $1",
+ "supportedlanguages-recenttranslations": "recent translations",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|language|languages}} in total.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|edit|edits}} - last edit $3 {{PLURAL:$3|day|days}} ago",
+ "translate-supportedlanguages-cached": "This information was cached $1 ago.",
+ "translate-activelanguages-invalid-code": "Language code \"$1\" is unknown or not enabled for translation.",
+ "abusefilter-edit-builder-vars-translate-source-text": "Source text of translation unit",
+ "abusefilter-edit-builder-vars-translate-target-language": "Target language for translation",
+ "translate-jssti-add": "Add to list",
+ "managemessagegroups": "Message group management",
+ "translate-smg-notallowed": "You are not allowed to execute this action.",
+ "translate-smg-nochanges": "There are no changes to process.",
+ "translate-smg-submit": "Submit changes for processing",
+ "translate-smg-submitted": "Message definitions have been updated. Changes are being processed in the background.",
+ "translate-smg-submitted-with-failure": "Updating message {{PLURAL:$1|definition|definitions}} failed for the following {{PLURAL:$1|group|groups}} - $2. $3",
+ "translate-smg-submitted-others-processing": "Message definitions for other groups are being processed in the background.",
+ "translate-smg-more": "There will be more changes to process after submitting these changes.",
+ "translate-smg-left": "Message content in wiki",
+ "translate-smg-right": "Incoming changes",
+ "translate-smg-rename-select": "Select",
+ "translate-smg-rename-cancel": "Cancel",
+ "translate-smg-rename-search": "Search for matching message...",
+ "translate-smg-rename-select-err": "Please select a message to be renamed",
+ "translate-smg-rename-no-msg": "No messages found.",
+ "translate-smg-rename-new": "Add as new...",
+ "translate-smg-rename-rename": "Add as rename of...",
+ "translate-smg-rename-dialog-title": "Select matching rename for $1",
+ "translate-smg-changeset-modified": "The changeset has been modified by another user or process. Your changes cannot be published as it might override their changes. Please reload the page to see the latest changes.",
+ "translate-smg-no-groups-in-sync": "There are no groups currently in synchronization",
+ "translate-smg-strong-sync-help": "Help",
+ "translate-smg-groups-in-sync": "Groups currently in synchronization",
+ "translate-smg-groups-in-sync-list": "List of groups currently being processed in the background:",
+ "translate-smg-groups-with-error-title": "Groups that had errors during synchronization",
+ "translate-smg-groups-with-error-desc": "List of groups and their messages that had errors during synchronization:",
+ "translate-smg-group-with-error-summary": "$1 {{PLURAL:$1|message|messages}} with errors:",
+ "translate-smg-group-message-action-history": "History",
+ "translate-smg-group-action-resolve": "Mark as resolved",
+ "translate-smg-group-sync-error-warn": "This group had an error during synchronization. Please fix the errors before processing this group.",
+ "translate-smg-group-message-tag-outdated": "Outdated",
+ "translate-smg-group-message-tag-rename": "Rename",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|Tag|Tags}}:",
+ "translate-smg-group-message-message-content": "Content:",
+ "translate-smg-group-message-message-target": "Target:",
+ "translate-smg-group-message-message-replacement": "Replacement:",
+ "translate-smg-group-message-message-other-langs": "Other languages:",
+ "translate-smg-loading": "Loading...",
+ "translate-smg-unknown-error": "There was an unknown error while processing your request.",
+ "translate-manage-import-diff": "Message $1 | Actions: $2",
+ "translate-manage-import-new": "New message $1",
+ "translate-manage-import-deleted": "Deleted message $1",
+ "translate-manage-action-import": "Import",
+ "translate-manage-action-conflict": "Import and fuzzy",
+ "translate-manage-action-ignore": "Ignore",
+ "translate-manage-action-fuzzy": "Import and fuzzy translations",
+ "translate-manage-action-rename-fuzzy": "Rename and fuzzy translations",
+ "translate-manage-action-rename": "Rename",
+ "translate-manage-action-ignore-change": "Ignore translation change",
+ "translate-manage-nochanges": "There are no changes in message definitions for this group.",
+ "translate-manage-nochanges-other": "There were no changes for this language.\nUse the link below to return to the group details view.",
+ "translate-manage-inconsistent": "Detected inconsistency in the request.\nPlease check for changes and try again.\nDetails: $1.",
+ "translate-manage-toolong": "The maximum processing time of $1 {{PLURAL:$1|second|seconds}} exceeded.\nPlease resubmit the form to continue processing.",
+ "translate-manage-import-summary": "Importing a new version from external source",
+ "translate-manage-import-ignore": "Skipping message $1.",
+ "translate-manage-import-rename-summary": "Renamed in external source",
+ "translate-manage-conflict-summary": "Importing a new version from external source.\nPlease check.",
+ "translate-manage-submit": "Execute",
+ "translate-manage-intro-other": "Below is list of translation changes in the language $1.\nPlease review the changes and choose an action you want to take for each update.\nIf you choose to ignore changes, this action is only temporary.",
+ "translate-manage-import-ok": "Imported: $1",
+ "translate-manage-import-done": "Import complete!",
+ "translate-manage-empty-content": "Content is empty",
+ "translate-manage-key-reused": "This message already exists in the wiki. Check for an accidental re-use of an old key.",
+ "translate-manage-source-message-not-found": "Message definition not found",
+ "importtranslations": "Import translations",
+ "translate-import-from-local": "Local file upload:",
+ "translate-import-load": "Load file",
+ "translate-import-err-dl-failed": "Unable to fetch the file:\n$1",
+ "translate-import-err-ul-failed": "File upload failed",
+ "translate-import-err-invalid-title": "Provided filename <nowiki>$1</nowiki> was invalid.",
+ "translate-import-err-no-such-file": "File <nowiki>$1</nowiki> does not exist or has not been uploaded locally.",
+ "translate-import-err-stale-group": "The message group this file belongs to does not exist.",
+ "translate-import-err-no-headers": "File is not a well formed Gettext file in Translate extension format:\nUnable to determine message group and language from file headers.",
+ "translate-js-support-unsaved-warning": "You have unpublished translations.",
+ "translate-gs-pos": "Pos.",
+ "translate-gs-code": "Code",
+ "translate-gs-continent": "Continent",
+ "translate-gs-speakers": "Speakers",
+ "translate-gs-score": "Score",
+ "translate-gs-multiple": "Multiple",
+ "translate-gs-count": "Count",
+ "translate-gs-total": "Total",
+ "translate-gs-avgscore": "Avg. score",
+ "translate-documentation-language": "Message documentation",
+ "translate-searchprofile": "Translations",
+ "translate-searchprofile-tooltip": "Search from all translations",
+ "translate-searchprofile-note": "More search options are available with [$1 translation search].",
+ "translate-search-languagefilter": "Filter by language:",
+ "translate-search-nofilter": "No filtering",
+ "log-name-translationreview": "Translation review log",
+ "log-description-translationreview": "Log of all reviews to translations and message groups.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|reviewed}} translation $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|changed}} the state of $4 translations of $3 from $6 to $7",
+ "group-translate-sandboxed": "Unapproved translators",
+ "group-translate-sandboxed-member": "{{GENDER:$1|unapproved translator}}",
+ "right-translate-sandboxmanage": "Manage sandboxed users",
+ "action-translate-sandboxmanage": "manage sandboxed users",
+ "right-translate-sandboxaction": "Execute actions allowed for sandboxed users",
+ "action-translate-sandboxaction": "execute actions allowed for sandboxed users",
+ "translate-workflow-state-": "(unset)",
+ "translate-workflowstatus": "State: $1",
+ "translate-workflow-set-doing": "Setting...",
+ "translate-workflow-autocreated-summary": "Automatic creation of page for workflow state $1",
+ "translate-stats-workflow": "State",
+ "translate-workflowgroup-label": "Workflow states",
+ "translate-workflowgroup-desc": "This message group shows the translation workflow states.\nThe states are defined in the configuration variable $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Recent translations",
+ "translate-dynagroup-recent-desc": "This message group shows all recent translations into this language.\nMost useful for the review tasks.",
+ "translate-dynagroup-additions-label": "Recent additions",
+ "translate-dynagroup-additions-desc": "This message group shows new and changed messages.",
+ "translate-msggroupselector-projects": "Message group",
+ "translate-msggroupselector-search-placeholder": "Search groups",
+ "translate-msggroupselector-search-all": "All",
+ "translate-msggroupselector-search-recent": "Recent",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|subgroup|subgroups}}",
+ "tux-languageselector": "Translate to",
+ "tux-select-target-language": "Target language for translation",
+ "tux-tab-all": "All",
+ "tux-tab-untranslated": "Untranslated",
+ "tux-tab-outdated": "Outdated",
+ "tux-tab-translated": "Translated",
+ "tux-tab-unproofread": "Unreviewed",
+ "tux-edit": "Edit",
+ "tux-status-optional": "Optional",
+ "tux-status-fuzzy": "Outdated",
+ "tux-status-proofread": "Reviewed",
+ "tux-status-translated": "Translated",
+ "tux-status-saving": "Publishing...",
+ "tux-status-unsaved": "Unpublished",
+ "tux-save-unknown-error": "Unknown error occurred.",
+ "tux-editor-placeholder-documentation": "Add message documentation",
+ "tux-editor-placeholder-language": "Your translation in $1",
+ "tux-editor-editsummary-placeholder": "Explain your changes (optional)",
+ "tux-editor-paste-original-button-label": "Paste source text",
+ "tux-editor-discard-changes-button-label": "Discard changes",
+ "tux-editor-save-button-label": "Publish translation",
+ "tux-editor-skip-button-label": "Skip to next",
+ "tux-editor-cancel-button-label": "Cancel",
+ "tux-editor-confirm-button-label": "Confirm translation",
+ "tux-editor-proofread-button-label": "Mark as reviewed",
+ "tux-editor-shortcut-info": "Press \"$1\" to confirm and move to the next message, \"$2\" to skip, \"$4\" to provide summary or hold \"$3\" to see other shortcuts.",
+ "tux-editor-edit-desc": "Edit documentation",
+ "tux-editor-add-desc": "Add documentation",
+ "tux-editor-suggestions-title": "Suggestions",
+ "tux-editor-latest-updates-title": "Latest updates",
+ "tux-editor-changes-without-summary": "$1 {{PLURAL:$1|update|updates}} without summary",
+ "tux-editor-all-changes": "All changes",
+ "tux-editor-in-other-languages": "In other languages",
+ "tux-editor-need-more-help": "Need more help?",
+ "tux-editor-ask-help": "Ask for more information",
+ "tux-editor-tm-match": "$1% match",
+ "tux-notices-more": "{{PLURAL:$1|$1 more}}",
+ "tux-notices-hide": "hide",
+ "tux-editor-save-failed": "Publishing the translation failed: $1",
+ "tux-editor-n-uses": "used $1 {{PLURAL:$1|time|times}}",
+ "tux-editor-message-desc-more": "View more",
+ "tux-editor-message-desc-less": "View less",
+ "tux-editor-clear-translated": "Hide translated",
+ "tux-editor-proofreading-mode": "Review",
+ "tux-editor-translate-mode": "List",
+ "tux-editor-proofreading-hide-own-translations": "Hide your translations",
+ "tux-editor-proofreading-show-own-translations": "Show your translations",
+ "tux-proofread-action-tooltip": "Mark as reviewed",
+ "tux-proofread-edit-label": "Edit",
+ "tux-editor-page-mode": "Page",
+ "tux-editor-outdated-notice": "This translation may need to be updated.",
+ "tux-editor-outdated-notice-diff-link": "Show differences",
+ "tux-editor-doc-editor-placeholder": "Message documentation",
+ "tux-editor-doc-editor-save": "Publish documentation",
+ "tux-editor-doc-editor-cancel": "Cancel",
+ "tux-messagetable-more-messages": "$1 more {{PLURAL:$1|message|messages}}",
+ "tux-messagetable-loading-messages": "Loading {{PLURAL:$1|message|messages}}...",
+ "tux-message-filter-placeholder": "Filter list",
+ "tux-message-filter-result": "Found $1 {{PLURAL:$1|result|results}} for \"$2\"",
+ "tux-message-filter-advanced-button": "Advanced search",
+ "tux-message-filter-optional-messages-label": "Optional messages",
+ "tux-proofread-translated-by-self": "Translated by you",
+ "tux-empty-list-all": "This message group is empty",
+ "tux-empty-list-all-guide": "Select a different message group to translate",
+ "tux-translate-page-no-such-group": "<strong>The indicated group does not exist.</strong> Select a different message group.",
+ "tux-empty-list-translated": "No translated messages",
+ "tux-empty-list-translated-guide": "You can help translating",
+ "tux-empty-list-translated-action": "Translate",
+ "tux-empty-no-messages-to-display": "No messages to display.",
+ "tux-empty-there-are-optional": "There are optional messages not shown in the list",
+ "tux-empty-show-optional-messages": "Show optional messages",
+ "tux-empty-no-outdated-messages": "No outdated messages",
+ "tux-empty-nothing-to-proofread": "Nothing to review",
+ "tux-empty-you-can-help-providing": "You can help providing new translations",
+ "tux-empty-nothing-new-to-proofread": "Nothing new to review",
+ "tux-empty-you-can-review-already-proofread": "You can review translations already reviewed by others.",
+ "tux-empty-list-other": "Nothing to translate",
+ "tux-empty-list-other-guide": "You can help review existing translations",
+ "tux-empty-list-other-action": "Review translations",
+ "tux-empty-list-other-link": "Show all messages",
+ "tux-editor-close-tooltip": "Close",
+ "tux-editor-expand-tooltip": "Expand",
+ "tux-editor-collapse-tooltip": "Collapse",
+ "tux-editor-message-tools-show-editor": "Show in wiki editor",
+ "tux-editor-message-tools-history": "History",
+ "tux-editor-message-tools-delete": "Delete",
+ "tux-editor-message-tools-translations": "All translations",
+ "tux-editor-message-tools-linktothis": "Link to this message",
+ "tux-editor-loading": "Loading...",
+ "tux-editor-loading-failed": "Failed to load translation aids: $1",
+ "translate-search-more-languages-info": "$1 more {{PLURAL:$1|language|languages}}",
+ "translate-statsbar-tooltip": "$1% translated, $2% reviewed",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% translated, $2% reviewed, $3% outdated",
+ "translate-search-more-groups-info": "$1 more {{PLURAL:$1|group|groups}}",
+ "translate-syntax-error": "Translation contains syntax errors",
+ "tux-session-expired": "You are no longer logged in. Please log in in a separate tab. Alternatively, make a copy of unsaved translations, log in, return to this page and enter your translations again.",
+ "tux-nojs": "This tool does not work without JavaScript. JavaScript is disabled, failed to work, or this browser is unsupported.",
+ "specialpages-group-translation": "Translation",
+ "content-model-translate-messagebundle": "Translatable message bundle",
+ "translate-messagebundle-validation-error": "Invalid message bundle: $1",
+ "translate-messagebundle-error-parsing": "Error while parsing the JSON: $1",
+ "translate-messagebundle-error-invalid-array": "Message bundle must be a JSON object. Got type $1",
+ "translate-messagebundle-error-key-empty": "Message bundle must not contain an empty key",
+ "translate-messagebundle-error-key-too-long": "Key \"$1\" is too long",
+ "translate-messagebundle-error-key-invalid-characters": "Key \"$1\" contains disallowed characters",
+ "translate-messagebundle-error-invalid-value": "Key \"$1\" does not contain string value",
+ "translate-messagebundle-error-empty-value": "Key \"$1\" does not have a value",
+ "translate-messagebundle-error-metadata-type": "Metadata must be an array.",
+ "translate-messagebundle-error-invalid-metadata": "Metadata section contains an unknown key: \"$1\". Supported keys are $2.",
+ "translate-messagebundle-error-invalid-sourcelanguage": "The source language code \"$1\" is not supported.",
+ "translate-messagebundle-error-invalid-prioritylanguage": "Invalid priority language {{PLURAL:$2|code|codes}} in metadata: $1",
+ "translate-messagebundle-error-invalid-prioritylanguage-format": "Invalid priority language format in metadata. Priority languages must be an array of strings.",
+ "translate-messagebundle-group-description": "Messages of a message bundle defined on page [[$2|$1]].",
+ "translate-messagebundle-change-sourcelanguage": "Setting source language of the message bundle as per metadata.",
+ "translate-messagebundle-sourcelanguage-changed": "The source language of a message bundle cannot be changed once it has been created.",
+ "log-action-filter-translationreview": "Type of action:",
+ "log-action-filter-translationreview-message": "Review of individual translation messages",
+ "log-action-filter-translationreview-group": "Changes in the status of the progress of translations"
+}
diff --git a/Translate/i18n/core/eo.json b/Translate/i18n/core/eo.json
new file mode 100644
index 00000000..e0c21108
--- /dev/null
+++ b/Translate/i18n/core/eo.json
@@ -0,0 +1,360 @@
+{
+ "@metadata": {
+ "authors": [
+ "AVRS",
+ "Amire80",
+ "Anakmalaysia",
+ "ArnoLagrange",
+ "Blahma",
+ "Joao Xavier",
+ "KuboF",
+ "Melancholie",
+ "Michawiki",
+ "Mihxil",
+ "Mirin",
+ "Psychoslave",
+ "Remux",
+ "Robin van der Vliet",
+ "Tlustulimu",
+ "Yekrats",
+ "YvesNevelsteen"
+ ]
+ },
+ "translate": "Tradukado",
+ "translate-desc": "[[Special:Translate|Speciala paĝo]] por traduki MediaWiki kaj alia",
+ "translate-fuzzybot-desc": "Jen speciala sistema konto uzata de la [https://www.mediawiki.org/wiki/Extension:Translate etendaĵo Translate] por mastrumi tradukojn. Jena konto estas parto de la programaro MediaVikio, kaj neniu uzanto posedas ĝin.",
+ "translate-taskui-export-to-file": "Elportu en fonta formato",
+ "translate-taskui-export-as-po": "Eksportu por eksterkonekta traduko",
+ "translate-taction-translate": "Traduki",
+ "translate-taction-proofread": "Revizii",
+ "translate-taction-lstats": "Lingvaj statistikoj",
+ "translate-taction-mstats": "Statistikoj por mesaĝgrupo",
+ "translate-taction-export": "Elporti",
+ "translate-taction-disabled": "Ĉi tiu ago estas malaktivigita sur ĉi tiu vikio.",
+ "translate-page-no-such-language": "Specifita lingvo estas nevalida.",
+ "translate-page-no-such-group": "Specifita grupo estas nevalida.",
+ "translate-page-disabled": "Tradukoj al ĉi tiu lingvo en ĉi tiu grupo estis malebligita. Kialo:\n\n<em>$1</em>",
+ "translate-language-disabled": "Tradukado en tiun ĉi lingvon estas malŝaltita.",
+ "translate-page-settings-legend": "Preferoj",
+ "translate-page-group": "Grupo",
+ "translate-page-language": "Lingvo",
+ "translate-page-limit": "Nombro de mesaĝoj",
+ "translate-page-limit-option": "po $1 {{PLURAL:$1|mesaĝo|mesaĝoj}} en paĝo",
+ "translate-submit": "Mendi",
+ "translate-page-navigation-legend": "Navigado",
+ "translate-page-showing": "Estas montrataj mesaĝoj $1 ĝis $2 el $3.",
+ "translate-page-showing-all": "Estas montrataj $1 {{PLURAL:$1|mesaĝo|mesaĝoj}}.",
+ "translate-page-showing-none": "Ne estas mesaĝoj por montri.",
+ "translate-next": "Sekva paĝo",
+ "translate-prev": "Antaŭa paĝo",
+ "translate-page-description-legend": "Informoj pri la grupo",
+ "translate-page-description-hasoptional": "Ĉi tiu mesaĝgrupo entenas opciajn mesaĝojn.\nOpciaj mesaĝoj estu tradukitaj al via lingvo se via lingvo postulas ĝin\nkiel ne uzi spacojn aŭ transliterado de personaj nomoj. $1",
+ "translate-page-description-hasoptional-open": "Montru opciajn mesaĝojn.",
+ "translate-page-edit": "redakti",
+ "translate-optional": "(nedeviga)",
+ "translate-ignored": "(ignorata)",
+ "translate-edit-title": "Redakti \"$1\"",
+ "translate-edit-definition": "Mesaĝa difino",
+ "translate-edit-contribute": "kontribui",
+ "translate-edit-no-information": "<em>Ĉi tiu mesaĝo ne havas dokumentadon. Se vi scias, kie aŭ kiel ĉi tiu mesaĝo estas uzata, vi povas helpi al aliaj tradukantoj aldonante dokumentadon al ĉi tiu mesaĝo.</em>",
+ "translate-edit-information": "Informo pri la mesaĝo ($1)",
+ "translate-edit-warnings": "Avertoj pri nekompletaj tradukoj",
+ "translate-edit-tmmatch-source": "Tradukfontateksto: $1",
+ "translate-edit-tmmatch": "$1% kongrueco",
+ "translate-edit-nopermission": "Vi bezonas havi traduk-rajtojn por traduki mesaĝojn.",
+ "translate-edit-askpermission": "Ricevi permeson",
+ "exporttranslations": "Elporti tradukojn",
+ "translate-export-form-format": "Formato",
+ "translate-export-invalid-format": "Bonvolu specifi validan aranĝon.",
+ "translate-export-not-supported": "Elportado de tradukoj ne estas subtenata.",
+ "translate-export-format-notsupported": "La mesaĝogrupo ne subtenas la specifitan elportan dosieraranĝon.",
+ "translate-checks-parameters": "{{PLURAL:$2|Jenaj parametroj ne estas uzataj|Jena parametro ne estas uzata}}: <strong>$1</strong>",
+ "translate-checks-parameters-unknown": "Jenaj {{PLURAL:$2|parametro|parametroj}} estas nekonataj:\n<strong>$1</strong>",
+ "translate-checks-balance": "Estas nepara nombro de {{PLURAL:$2|krampo|krampoj}}: <strong>$1</strong>",
+ "translate-checks-links": "{{PLURAL:$2|Jenaj ligiloj estas problemaj|Jena ligilo estas problema}}: <strong>$1</strong>",
+ "translate-checks-links-missing": "Mankas {{PLURAL:$2|jena ligilo|jenaj ligiloj}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Difino uzas <nowiki>{{PLURAL:}}</nowiki>, sed traduko ne.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> ricevis {{PLURAL:$1|unu formon|$1 formojn}}, sed {{PLURAL:$2|nur unu formo|$2 formoj}} estas subtenataj (aldone al la formoj 0= kaj 1=).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> havas ripetitajn formojn ĉe la fino. Anstataŭ <nowiki>{{PLURAL:$1|okulvitroj|okulvitroj}}</nowiki> estu skribita nur <nowiki>{{PLURAL:$1|okulvitroj}}</nowiki>.",
+ "translate-checks-pagename": "Nomspaco ŝanĝita de difino",
+ "translate-checks-format": "Ĉi tiu traduko ne sekvas la difinon aŭ havas nevalidan sintaksaĵon: $1",
+ "translate-checks-escape": "La sekvantaj markiloj <!--escapes-->povas esti akcidentaj : <strong>$1</strong>",
+ "translate-checks-parametersnotequal": "Parametronombro estas {{PLURAL:$1|$1}}; devus esti {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> estas malĝusta..",
+ "translate-checks-fudforum-syntax": "Uzu <nowiki>$1</nowiki> anstataŭ <nowiki>$2</nowiki> en ĉi tiu projekto.",
+ "translate-pref-editassistlang": "Helpaj lingvoj:",
+ "prefs-translate": "Tradukaj agordoj",
+ "translate-pref-editassistlang-help": "Listo da lingvokodoj disigitaj de komoj.\nTraduko de mesaĝo en ĉi tiuj lingvoj estas montritaj kiam vi estas tradukanta.\nLa defaŭlta lingvolisto dependas de via lingvo.",
+ "translate-pref-editassistlang-bad": "Nevalida lingva kodo en la listo:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Redakti per la traduka interfaco",
+ "action-translate": "redakti per la tradukado-fasado",
+ "right-translate-manage": "Administri grupojn de mesaĝoj",
+ "action-translate-manage": "Administri grupojn de mesaĝoj",
+ "right-translate-import": "Importi ekster-retajn tradukojn.",
+ "action-translate-import": "Importi ekster-konektajn tradukojn.",
+ "right-translate-messagereview": "Ekzameni tradukojn",
+ "action-translate-messagereview": "revizii tradukojn",
+ "right-translate-groupreview": "Ŝanĝi laborflustaton de mesaĝgrupoj",
+ "action-translate-groupreview": "ŝanĝi la laborfluan staton de mesaĝogrupoj",
+ "translate-rcfilters-translations": "Tradukoj",
+ "translate-rcfilters-translations-only-label": "Tradukoj",
+ "translate-rcfilters-translations-only-desc": "Ŝanĝoj al tradukitaj paĝoj.",
+ "translate-rcfilters-translations-filter-label": "Ne traduko",
+ "translate-rcfilters-translations-filter-desc": "Ĉiuj ŝanĝoj kiuj ne estas tradukoj.",
+ "translate-rcfilters-translations-site-label": "Retejaj mesaĝoj",
+ "translate-rcfilters-translations-site-desc": "Laŭmendigoj de retejaj mesaĝoj en MediaVikia nomspaco.",
+ "translate-rc-translation-filter": "Filtri tradukojn:",
+ "translate-rc-translation-filter-no": "Fari nenion",
+ "translate-rc-translation-filter-only": "Montri nur tradukojn",
+ "translate-rc-translation-filter-filter": "Forfiltri tradukojn",
+ "translate-rc-translation-filter-site": "Ŝanĝoj nur al mesaĝoj de la retejo",
+ "translationstats": "Statistiko pri tradukado",
+ "translate-stats-edits": "Redaktoj",
+ "translate-stats-users": "Tradukantoj",
+ "translate-stats-registrations": "Registraĵoj",
+ "translate-stats-reviews": "Provlegoj",
+ "translate-stats-reviewers": "Provlegantoj",
+ "translate-statsf-intro": "Vi povas generi simplajn statistikojn kun ĉi tiu paĝo. Ĉiuj valoroj estas limigitaj suben kaj supren.",
+ "translate-statsf-options": "Grafeaj opcioj",
+ "translate-statsf-width": "Larĝo en rastrumeroj:",
+ "translate-statsf-height": "Alto en rastrumeroj:",
+ "translate-statsf-days": "Komencodato:",
+ "translate-statsf-start": "Dato de komenco:",
+ "translate-statsf-scale": "Detaleco:",
+ "translate-statsf-scale-months": "Monatoj",
+ "translate-statsf-scale-weeks": "Semajnoj",
+ "translate-statsf-scale-days": "Tagoj",
+ "translate-statsf-scale-hours": "Horoj",
+ "translate-statsf-count": "Mezuro:",
+ "translate-statsf-count-edits": "Nombro de redaktoj",
+ "translate-statsf-count-users": "Aktivaj tradukantoj",
+ "translate-statsf-count-registrations": "Novaj uzantoj",
+ "translate-statsf-count-reviews": "Tradukprovlegoj",
+ "translate-statsf-count-reviewers": "Provlegantoj",
+ "translate-statsf-language": "Kome apartigita listo de lingvaj kodoj:",
+ "translate-statsf-group": "Kome apartigita listo de grupaj kodoj:",
+ "translate-statsf-submit": "Antaŭvido",
+ "translate-tag-page-desc": "Traduko de la vikia paĝo [[$2|$1]] el $3 ($4).",
+ "translate-sidebar-alltrans": "En aliaj lingvoj",
+ "translations": "Ĉiuj tradukoj",
+ "translations-summary": "Enigu mesaĝan nomon suben por montri ĉiujn haveblajn tradukojn.",
+ "translate-translations-no-message": "\"$1\" ne estas tradukebla mesaĝo",
+ "translate-translations-none": "Estas neniuj tradukoj por \"$1\"",
+ "translate-translations-count": "{{PLURAL:$1|Trovita unu traduko|Trovitaj $1 tradukoj}}.",
+ "translate-translations-fieldset-title": "Mesaĝo",
+ "translate-translations-messagename": "Nomo:",
+ "translate-translations-project": "Projekto:",
+ "translate-translations-including-no-param": "Bonvolu specifi validan mesaĝan ŝlosilon en la subpaĝa parametro",
+ "translate-translations-history-short": "h",
+ "languagestats": "Lingvaj statistikoj",
+ "languagestats-summary": "Ĉi tiu paĝo montras la statistikojn de tradukado por ĉiuj grupoj de mesaĝoj po iu lingvo.",
+ "messagegroupstats-summary": "Tiu paĝo montras statistikojn pri mesaĝgrupo.",
+ "languagestats-stats-for": "Tradukstatistikoj por $1 ($2)",
+ "languagestats-recenttranslations": "lastaj tradukoj",
+ "translate-langstats-incomplete": "Kelkaj el la statistikoj sur ĉi tiu paĝo estas nekompletaj. Bonvolu refreŝigi por ricevi pli da statistikoj.",
+ "translate-langstats-expand": "montri",
+ "translate-langstats-collapse": "kaŝi",
+ "translate-langstats-expandall": "montri ĉiujn",
+ "translate-langstats-collapseall": "kaŝi ĉiujn",
+ "translate-language-code": "Lingva kodo",
+ "translate-language-code-field-name": "Lingva kodo:",
+ "translate-suppress-complete": "Forigu komplete tradukitajn mesaĝgrupojn",
+ "translate-ls-noempty": "Forigu komplete netradukitajn mesaĝgrupojn",
+ "translate-language": "Lingvo",
+ "translate-total": "Mesaĝoj",
+ "translate-untranslated": "Netradukita",
+ "translate-percentage-complete": "Kompletigo",
+ "translate-percentage-fuzzy": "Malfreŝaj",
+ "translate-percentage-proofread": "Reviziita",
+ "translate-languagestats-overall": "Ĉiuj mesaĝgrupoj kune",
+ "translate-ls-submit": "Montri statistikojn",
+ "translate-ls-column-group": "Mesaĝgrupo",
+ "translate-mgs-pagename": "Statistikoj por mesaĝgrupo",
+ "translate-mgs-fieldset": "Montru preferojn",
+ "translate-mgs-group": "Mesaĝgrupo:",
+ "translate-mgs-nocomplete": "Ne montru lingvojn kiuj havas kompletan tradukon",
+ "translate-mgs-noempty": "Ne montru lingvojn kiuj havas neniun tradukon",
+ "translate-mgs-submit": "Montru statistikojn",
+ "translate-mgs-column-language": "Lingvo",
+ "translate-mgs-totals": "{{PLURAL:$1|Ĉiu $1 lingvo|Ĉiuj $1 lingvoj}} kune",
+ "translate-mgs-invalid-group": "La menciita grupo $1 ne ekzistas",
+ "translate-mgs-nothing": "Nenio estas montrebla por la petitaj statistikoj",
+ "supportedlanguages": "Subtenataj lingvoj",
+ "supportedlanguages-summary": "Ĉi tiu paĝo montras liston de ĉiuj lingvoj subtenitaj de {{SITENAME}},\nkune kun la nomoj de tradukistoj laborantaj pri tiu lingvo.\nJu pli multe kontribuis iu tradukisto, des pli granda aperas ties nomo.\nLa koloro de substreko indikas kiom da tempo pasis de kiam tradukisto esti laste aktiva ĉi tie.",
+ "supportedlanguages-colorlegend": "Kolorpriskribo: lasta traduko antaŭ $1 tagoj.",
+ "supportedlanguages-sqlite-error": "SQLite ne estas subtenata",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Tradukanto}}|Tradukantoj}}: $1",
+ "supportedlanguages-recenttranslations": "Lastatempaj tradukoj",
+ "supportedlanguages-count": "Sume $1 {{PLURAL:$1|lingvo|lingvoj}}.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|redakto|redaktoj}} - lasta redakto antaŭ $3 {{PLURAL:$3|tago|tagoj}}",
+ "abusefilter-edit-builder-vars-translate-source-text": "Fonta teksto de traduka unuo",
+ "translate-jssti-add": "Aldoni al listo",
+ "managemessagegroups": "Administrado de mesaĝgrupoj",
+ "translate-smg-notallowed": "Vi ne rajtas plenumi ĉi tiun agon.",
+ "translate-smg-nochanges": "Ne estas farendaj ŝanĝoj.",
+ "translate-smg-submit": "Proponi farendajn ŝanĝojn",
+ "translate-smg-submitted": "La difino de la mesaĝoj estis ĝisdatigitaj. Ŝanĝoj estas traktataj fontaske.",
+ "translate-smg-more": "Estos pli da traktendaj ŝanĝoj, post sendado de ĉi tiuj ŝanĝoj.",
+ "translate-smg-left": "Enhavo de la mesaĝo en la vikio",
+ "translate-smg-right": "Alvenantaj ŝanĝoj",
+ "translate-manage-import-diff": "Mesaĝo $1 | Agoj: $2",
+ "translate-manage-import-new": "Nova mesaĝo $1",
+ "translate-manage-import-deleted": "Forigita mesaĝo $1",
+ "translate-manage-action-import": "Enporti",
+ "translate-manage-action-conflict": "Importi kaj marki kiel malpreciza",
+ "translate-manage-action-ignore": "Ignori",
+ "translate-manage-action-fuzzy": "Importi tradukojn kaj marki kiel neprecizajn",
+ "translate-manage-nochanges": "Ne estas ŝanĝoj en la difino de la mesaĝoj por ĉi tiu grupo.",
+ "translate-manage-nochanges-other": "Ne estas ŝanĝoj por ĉi tiu lingvo.\nUzu la suban ligilon por reiri al la detala vido de la grupo.",
+ "translate-manage-inconsistent": "Malkoheraĵo estas trovita en ĉi tiu peto.\nBonvolu kontroli ŝanĝojn kaj provu denove.\nDetaloj : $1.",
+ "translate-manage-toolong": "La maksimuma procesdaŭro ($1 {{PLURAL:$1|sekundo|sekundoj}}) pasis.\nBonvolu resendi la formularon por plu procesigi.",
+ "translate-manage-import-summary": "Importado de nova versio el ekstera fonto",
+ "translate-manage-import-ignore": "Ignorante mesaĝon $1.",
+ "translate-manage-conflict-summary": "Importado de nova versio el ekstera fonto\nBonvolu kontroli.",
+ "translate-manage-submit": "Ekfunkcii",
+ "translate-manage-intro-other": "Sube estas listo de mesaĝŝanĝoj en la lingvo $1.\nBonvolu revizii la ŝanĝojn kaj elektu kion vi volas fari kun ĉiu traduko.\nSe vi decidas ignori ŝanĝojn, ĉi tiu ago estas nur portempa.",
+ "translate-manage-import-ok": "Importita: $1.",
+ "translate-manage-import-done": "Importo kompleta!",
+ "importtranslations": "Importi tradukojn",
+ "translate-import-from-local": "Loka dosiero alŝuti:",
+ "translate-import-load": "Ŝarĝi dosieron",
+ "translate-import-err-dl-failed": "Ne eblas akiri la dosieron:\n$1",
+ "translate-import-err-ul-failed": "Alŝuto de dosiero malsukcesis",
+ "translate-import-err-invalid-title": "La provizita dosiernomo <nowiki>$1</nowiki> estas nevalida",
+ "translate-import-err-no-such-file": "La dosiero <nowiki>$1</nowiki> ne ekzistas aŭ ne estis ŝargita ĉi-loke.",
+ "translate-import-err-stale-group": "La mesaĝgrupo al kiu apartenas ĉi tiu dosiero ne ekzistas.",
+ "translate-import-err-no-headers": "La dosiero estas ne bone formita Gettext-dosiero en la formato de la Traduk-etendaĵo:\nneeblas decidi grupon kaj lingvon el dosierkapo.",
+ "translate-js-support-unsaved-warning": "Ekzistas nekonservitaj tradukoj.",
+ "translate-gs-pos": "Poz.",
+ "translate-gs-code": "Kodo",
+ "translate-gs-continent": "Kontinento",
+ "translate-gs-speakers": "Parolantoj",
+ "translate-gs-score": "Poentaro",
+ "translate-gs-multiple": "Oblo",
+ "translate-gs-count": "Nombro",
+ "translate-gs-total": "Sumo",
+ "translate-gs-avgscore": "Avĝ poentaro",
+ "translate-documentation-language": "Mesaĝa dokumentado",
+ "translate-searchprofile": "Tradukoj",
+ "translate-searchprofile-tooltip": "Serĉi el ĉiuj tradukoj",
+ "translate-searchprofile-note": "Pliaj serĉaj opcioj estas haveblaj per [$1 traduka serĉado].",
+ "translate-search-languagefilter": "Filtrilo laŭ lingvoj:",
+ "translate-search-nofilter": "Neniu filtrado",
+ "log-name-translationreview": "Protokolo de tradukprovlego",
+ "log-description-translationreview": "Protokolo de ĉiuj tradukprovlegoj kaj de mesaĝgrupoj.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|reviziis}} tradukon $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|ŝanĝis}} la staton de $4 tradukoj de $3 el $6 al $7",
+ "group-translate-sandboxed": "Ne aprobitaj tradukantoj",
+ "group-translate-sandboxed-member": "{{GENDER:$1|ne aprobita tradukanto}}",
+ "right-translate-sandboxmanage": "Mastrumi ensablujigitajn uzantojn",
+ "action-translate-sandboxmanage": "mastrumi ensablujigitajn uzantojn",
+ "right-translate-sandboxaction": "Fari agojn permesatajn al ensablujigitaj uzantoj",
+ "action-translate-sandboxaction": "fari agojn permesatajn al ensablujigitaj uzantoj",
+ "translate-workflow-state-": "(malŝalta)",
+ "translate-workflowstatus": "Stato = $1",
+ "translate-workflow-set-doing": "Aktivado...",
+ "translate-workflow-autocreated-summary": "Aŭtomata kreado de paĝo por laborflustatuso $1",
+ "translate-stats-workflow": "Stato",
+ "translate-workflowgroup-label": "Laborflustatusoj",
+ "translate-workflowgroup-desc": "Ĉi tiu mesaĝgrupo montras la laborflustatusojn.\nLa statusoj estas difinitaj en la konfigurvariablo $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Lastatempaj tradukoj",
+ "translate-dynagroup-recent-desc": "Ĉi tiu mesaĝgrupo montras ĉiuj novajn tradukojn en ĉi tiun lingvon.\nĜi plej utilas por reviziaj taskoj.",
+ "translate-dynagroup-additions-label": "Lastaj aldonoj",
+ "translate-dynagroup-additions-desc": "Tiu ĉi mesaĝgrupo montras novajn kaj ŝanĝitajn mesaĝojn.",
+ "translate-msggroupselector-projects": "Mesaĝgrupo",
+ "translate-msggroupselector-search-placeholder": "Serĉi grupojn",
+ "translate-msggroupselector-search-all": "Ĉiuj",
+ "translate-msggroupselector-search-recent": "Lastaj",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|subgrupo|subgrupoj}}",
+ "tux-languageselector": "Traduki al",
+ "tux-tab-all": "Ĉiuj",
+ "tux-tab-untranslated": "Netradukitaj",
+ "tux-tab-outdated": "Malfreŝaj",
+ "tux-tab-translated": "Tradukitaj",
+ "tux-tab-unproofread": "Nereviziitaj",
+ "tux-edit": "Redakti",
+ "tux-status-optional": "Nedeviga",
+ "tux-status-fuzzy": "Malfreŝaj",
+ "tux-status-proofread": "Reviziita",
+ "tux-status-translated": "Tradukita",
+ "tux-status-saving": "Konservado...",
+ "tux-status-unsaved": "Nekonservita",
+ "tux-save-unknown-error": "Okazis nekonata eraro.",
+ "tux-editor-editsummary-placeholder": "Nedeviga resumo",
+ "tux-editor-paste-original-button-label": "Glui la originalan tekston",
+ "tux-editor-discard-changes-button-label": "Ignori ŝanĝojn",
+ "tux-editor-save-button-label": "Konservi tradukon",
+ "tux-editor-skip-button-label": "Salti al la sekva",
+ "tux-editor-cancel-button-label": "Nuligi",
+ "tux-editor-confirm-button-label": "Konfirmi tradukon",
+ "tux-editor-proofread-button-label": "Marki reviziita",
+ "tux-editor-shortcut-info": "Premu \"$1\" por konfirmi kaj salti al la sekva mesaĝo, aŭ \"$2\" por preterpasi, aŭ \"$4\" por resumo, aŭ longe premu \"$3\" por vidi aliajn fulmoklavojn.",
+ "tux-editor-edit-desc": "Redakti dokumentadon",
+ "tux-editor-add-desc": "Aldoni dokumentadon",
+ "tux-editor-suggestions-title": "Sugestoj",
+ "tux-editor-in-other-languages": "En aliaj lingvoj",
+ "tux-editor-need-more-help": "Ĉu vi bezonas plian helpon?",
+ "tux-editor-ask-help": "Peti pliajn informojn",
+ "tux-editor-tm-match": "$1%-a kongruo",
+ "tux-notices-more": "{{PLURAL:$1|$1 pli}}",
+ "tux-notices-hide": "kaŝi",
+ "tux-editor-save-failed": "Ne sukcesis konservi la tradukon: $1",
+ "tux-editor-n-uses": "uzita $1 {{PLURAL:$1|fojon|fojojn}}",
+ "tux-editor-message-desc-more": "Montri pli",
+ "tux-editor-message-desc-less": "Montri malpli",
+ "tux-editor-clear-translated": "Kaŝi tradukitajn",
+ "tux-editor-proofreading-mode": "Revizii",
+ "tux-editor-translate-mode": "Listo",
+ "tux-editor-proofreading-hide-own-translations": "Kaŝi viajn tradukojn",
+ "tux-editor-proofreading-show-own-translations": "Montri viajn tradukojn",
+ "tux-proofread-action-tooltip": "Marki reviziita",
+ "tux-proofread-edit-label": "Redakti",
+ "tux-editor-page-mode": "Paĝo",
+ "tux-editor-outdated-notice": "Ĉi tiu traduko eble bezonas esti ĝisdatigita.",
+ "tux-editor-outdated-notice-diff-link": "Montri diferencojn",
+ "tux-editor-doc-editor-placeholder": "Mesaĝa dokumentado",
+ "tux-editor-doc-editor-save": "Konservi dokumentadon",
+ "tux-editor-doc-editor-cancel": "Nuligi",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|plia mesaĝo|pliaj mesaĝoj}}",
+ "tux-messagetable-loading-messages": "Ŝarĝante {{PLURAL:$1|mesaĝon|mesaĝojn}}...",
+ "tux-message-filter-placeholder": "Filtri liston",
+ "tux-message-filter-result": "Trovis $1 {{PLURAL:$1|rezulton|rezultojn}} por \"$2\"",
+ "tux-message-filter-advanced-button": "Altnivela serĉo",
+ "tux-message-filter-optional-messages-label": "Nedevigaj mesaĝoj",
+ "tux-proofread-translated-by-self": "Tradukita de vi",
+ "tux-empty-list-all": "Tiu mesaĝgrupo estas malplena",
+ "tux-empty-list-all-guide": "Elekti alian mesaĝogrupon por tradukado",
+ "tux-translate-page-no-such-group": "<strong>La provizita grupo ne ekzistas.</strong> Elektu alian mesaĝogrupon.",
+ "tux-empty-list-translated": "Neniu tradukita mesaĝo",
+ "tux-empty-list-translated-guide": "Vi povas helpi tradukadon",
+ "tux-empty-list-translated-action": "Traduki",
+ "tux-empty-no-messages-to-display": "Neniu mesaĝoj por montri",
+ "tux-empty-there-are-optional": "Estas nedevigaj mesaĝoj ne montrataj en la listo",
+ "tux-empty-show-optional-messages": "Montri opciajn mesaĝojn",
+ "tux-empty-no-outdated-messages": "Neniu malnoviĝinta mesaĝo",
+ "tux-empty-nothing-to-proofread": "Nenio por revizii",
+ "tux-empty-you-can-help-providing": "Vi povas helpi per novaj tradukoj",
+ "tux-empty-nothing-new-to-proofread": "Nenio nova por revizii",
+ "tux-empty-you-can-review-already-proofread": "Vi povas revizii tradukojn jam reviziitajn de aliuloj.",
+ "tux-empty-list-other": "Nenio por traduki",
+ "tux-empty-list-other-guide": "Vi povas helpi la reviziadon de ekzistantaj tradukoj.",
+ "tux-empty-list-other-action": "Revizii tradukojn",
+ "tux-empty-list-other-link": "Montru ĉiujn mesaĝojn",
+ "tux-editor-close-tooltip": "Fermi",
+ "tux-editor-expand-tooltip": "Etendi",
+ "tux-editor-collapse-tooltip": "Maletendi",
+ "tux-editor-message-tools-show-editor": "Montri en vikia redaktilo",
+ "tux-editor-message-tools-history": "Historio",
+ "tux-editor-message-tools-delete": "Forigi",
+ "tux-editor-message-tools-translations": "Ĉiuj tradukoj",
+ "tux-editor-message-tools-linktothis": "Ligilo al ĉi tiu mesaĝo",
+ "tux-editor-loading": "Ŝarĝante...",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|plia lingvo|pliaj lingvoj}}",
+ "translate-statsbar-tooltip": "$1% tradukitaj, $2% reviziitaj",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% tradukitaj, $2% reviziitaj, $3% malfreŝaj",
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|plusa grupo|plusa grupi}}",
+ "translate-syntax-error": "Traduko enhavas sintaksajn erarojn",
+ "tux-session-expired": "Vi ne plu estas ensalutinta. Bonvolu reensaluti je alia langeton. Alternative, kopiu viajn nekonservitajn tradukojn, ensalutu, revenu ĉi tien, kaj reenigu viajn tradukojn.",
+ "tux-nojs": "Ĉi tiu ilo ne funkcias sen JavaScript. Aŭ JavaScript estas malŝaltita, aŭ Javascript misfunkciis, aŭ via TTT-legilo ne estas subtenata.",
+ "specialpages-group-translation": "Traduko"
+}
diff --git a/Translate/i18n/core/es.json b/Translate/i18n/core/es.json
new file mode 100644
index 00000000..a5f900cb
--- /dev/null
+++ b/Translate/i18n/core/es.json
@@ -0,0 +1,405 @@
+{
+ "@metadata": {
+ "authors": [
+ "-jem-",
+ "Agent",
+ "Antur",
+ "Armando-Martin",
+ "Canaan9801",
+ "Ciencia Al Poder",
+ "Crazymadlover",
+ "Dalton2",
+ "Dferg",
+ "Dgstranz",
+ "Fitoschido",
+ "Hasley",
+ "Hereñu",
+ "Imre",
+ "Indiralena",
+ "Invadinado",
+ "Jakeukalane",
+ "Joanmp17",
+ "KATRINE1992",
+ "Kobazulo",
+ "Laura Ospina",
+ "Lin linao",
+ "Locos epraix",
+ "Macofe",
+ "MarcoAurelio",
+ "MarleneR329",
+ "Ovruni",
+ "Pertile",
+ "Rodney Araujo",
+ "Sanbec",
+ "TehFrog",
+ "Tempestas",
+ "Tiberius1701",
+ "Translationista",
+ "Vivaelcelta",
+ "Wifidel"
+ ]
+ },
+ "translate": "Traducir",
+ "translate-desc": "[[Special:Translate|Página especial]] para traducir el software MediaWiki y otras extensiones",
+ "translate-fuzzybot-desc": "Esta es una cuenta especial del sistema usada por la [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate extensión de traducción] para realizar tareas de mantenimiento en las traducciones.\nEsta cuenta es parte del software de MediaWiki y no pertenece a ningún usuario.",
+ "translate-taskui-export-to-file": "Exportar en formato nativo",
+ "translate-taskui-export-as-po": "Exportar para traducir sin conexión",
+ "translate-taction-translate": "Traducir",
+ "translate-taction-proofread": "Revisar",
+ "translate-taction-lstats": "Estadísticas del idioma",
+ "translate-taction-mstats": "Estadísticas del grupo de mensajes",
+ "translate-taction-export": "Exportar",
+ "translate-taction-disabled": "Esta acción está desactivada en esta wiki.",
+ "translate-page-no-such-language": "No se especificó un idioma válido.",
+ "translate-page-no-such-group": "El grupo especificado no es válido.",
+ "translate-page-disabled": "Se han desactivado las traducciones a este idioma en este grupo.\nMotivo:\n\n<em>$1</em>",
+ "translate-language-disabled": "Se desactivó la traducción a este idioma.",
+ "translate-page-settings-legend": "Preferencias",
+ "translate-page-group": "Grupo",
+ "translate-page-language": "Idioma",
+ "translate-page-limit": "Límite",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|mensaje|mensajes}} por página",
+ "translate-submit": "Obtener",
+ "translate-page-navigation-legend": "Navegación",
+ "translate-page-showing": "Mostrando mensajes del $1 al $2 de $3.",
+ "translate-page-showing-all": "Mostrando $1 {{PLURAL:$1|mensaje|mensajes}}.",
+ "translate-page-showing-none": "No hay mensajes para mostrar.",
+ "translate-next": "Página siguiente",
+ "translate-prev": "Página anterior",
+ "translate-page-description-legend": "Información acerca del grupo",
+ "translate-page-description-hasoptional": "Este grupo de mensajes contiene mensajes opcionales.\nLos mensajes opcionales deberían traducirse solo si tu idioma tiene características especiales como no usar espacios o transliterar nombres propios. $1",
+ "translate-page-description-hasoptional-open": "Mostrar mensajes opcionales.",
+ "translate-page-edit": "editar",
+ "translate-optional": "(opcional)",
+ "translate-ignored": "(ignorado)",
+ "translate-edit-title": "Editar «$1»",
+ "translate-edit-definition": "Definición del mensaje",
+ "translate-edit-contribute": "contribuir",
+ "translate-edit-no-information": "<em>Este mensaje no tiene documentación.\nSi sabes dónde o cómo se usa este mensaje, puedes ayudar a los otros traductores añadiendo documentación a este mensaje.</em>",
+ "translate-edit-information": "Información acerca del mensaje ($1)",
+ "translate-edit-warnings": "Advertencias acerca de traducciones incompletas",
+ "translate-edit-tmmatch-source": "Texto fuente para la traducción: $1",
+ "translate-edit-tmmatch": "$1 % de coincidencia",
+ "translate-edit-nopermission": "Necesitas permisos de traducción para traducir mensajes.",
+ "translate-edit-askpermission": "Obtener permiso",
+ "exporttranslations": "Exportar traducciones",
+ "translate-export-form-format": "Formato",
+ "translate-export-invalid-format": "Especifica un formato válido.",
+ "translate-export-not-supported": "No se admite la exportación de traducción.",
+ "translate-export-format-notsupported": "El formato de exportación especificado no se admite por el grupo de mensajes.",
+ "translate-checks-parameters": "{{PLURAL:$2|Falta el parámetro siguiente|Faltan los parámetros siguientes}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Se desconoce el parámetro siguiente|Se desconocen los parámetros siguientes}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "Hay algún signo de agrupación de {{PLURAL:$2|la siguiente clase|las siguientes clases}} sin emparejar:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|El siguiente enlace es problemático|Los siguientes $2 enlaces son problemáticos}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Falta el siguiente enlace|Faltan los siguientes $2 enlaces}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "El mensaje original usa <nowiki>{{PLURAL:}}</nowiki> pero no así la traducción.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> recibió {{PLURAL:$1|una forma|$1 formas}} pero únicamente {{PLURAL:$2|se admite una forma|se admiten $2 formas}} (excluyendo las formas 0= y 1=).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> tiene formas duplicadas al final. <nowiki>{{PLURAL:$1|lunes|lunes}}</nowiki> debería escribirse así: <nowiki>{{PLURAL:$1|lunes}}</nowiki>.",
+ "translate-checks-unicode-plural-missing": "Esta traducción debe tener <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-unsupported": "Este mensaje no admite <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-pagename": "El espacio de nombres difiere del original",
+ "translate-checks-format": "Esta traducción no sigue al original o tiene sintaxis inválida: $1",
+ "translate-checks-escape": "Los siguientes escapes pueden ser accidentales: <strong>$1</strong>",
+ "translate-checks-parametersnotequal": "El número de parámetros es {{PLURAL:$1|$1}}; debería ser {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> es incorrecto.",
+ "translate-checks-fudforum-syntax": "Usar <nowiki>$1</nowiki> en lugar de <nowiki>$2</nowiki> en este proyecto.",
+ "translate-pref-editassistlang": "Idiomas auxiliares:",
+ "prefs-translate": "Opciones de traducción",
+ "translate-pref-editassistlang-help": "Lista de códigos de idiomas separados por comas.\nSe mostrarán las traducciones de los mensajes en esos idiomas mientras traduces.\nLa lista de idiomas predeterminada depende de tu idioma.",
+ "translate-pref-editassistlang-bad": "Código de idioma inválido en la lista:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Editar con la interfaz de traducción",
+ "action-translate": "editar usando la interfaz de traducción",
+ "right-translate-manage": "Administrar grupos de mensajes",
+ "action-translate-manage": "gestionar grupos de mensajes",
+ "right-translate-import": "Importar traducciones sin conexión",
+ "action-translate-import": "importar traducciones sin conexión",
+ "right-translate-messagereview": "Revisar traducciones",
+ "action-translate-messagereview": "revisar traducciones",
+ "right-translate-groupreview": "Modificar el estado del flujo de trabajo de los grupos de mensajes",
+ "translate-rcfilters-translations": "Traducciones",
+ "translate-rcfilters-translations-only-label": "Traducciones",
+ "translate-rcfilters-translations-only-desc": "Cambios en las páginas traducidas.",
+ "translate-rcfilters-translations-filter-label": "No traducciones",
+ "translate-rcfilters-translations-filter-desc": "Todos los cambios que no son traducciones.",
+ "translate-rcfilters-translations-site-label": "Mensajes del sitio",
+ "translate-rcfilters-translations-site-desc": "Personalizaciones a los mensajes del sitio en el espacio de nombres MediaWiki.",
+ "translate-rc-translation-filter": "Filtrar traducciones:",
+ "translate-rc-translation-filter-no": "No hacer nada",
+ "translate-rc-translation-filter-only": "Mostrar solo traducciones",
+ "translate-rc-translation-filter-filter": "No mostrar traducciones",
+ "translate-rc-translation-filter-site": "Solo cambios en mensajes del sitio",
+ "translationstats": "Estadísticas de traducción",
+ "translate-stats-edits": "Ediciones",
+ "translate-stats-users": "Traductores",
+ "translate-stats-registrations": "Registros",
+ "translate-stats-reviews": "Revisiones",
+ "translate-stats-reviewers": "Revisores",
+ "translate-statsf-intro": "Puedes generar estadísticas simples con este formulario.\nTodos los valores tienen límites superiores e inferiores.",
+ "translate-statsf-options": "Opciones gráficas",
+ "translate-statsf-width": "Anchura en píxeles:",
+ "translate-statsf-height": "Altura en píxeles:",
+ "translate-statsf-days": "Periodo en días:",
+ "translate-statsf-start": "Fecha de inicio:",
+ "translate-statsf-scale": "Granularidad:",
+ "translate-statsf-scale-months": "Meses",
+ "translate-statsf-scale-weeks": "Semanas",
+ "translate-statsf-scale-days": "Días",
+ "translate-statsf-scale-hours": "Horas",
+ "translate-statsf-count": "Medida:",
+ "translate-statsf-count-edits": "Número de ediciones",
+ "translate-statsf-count-users": "Traductores activos",
+ "translate-statsf-count-registrations": "Usuarios nuevos",
+ "translate-statsf-count-reviews": "Revisiones de traducción",
+ "translate-statsf-count-reviewers": "Revisores",
+ "translate-statsf-language": "Lista de códigos de idioma separados por comas:",
+ "translate-statsf-group": "Lista de códigos de grupo separados por comas:",
+ "translate-statsf-submit": "Vista previa",
+ "translate-statsf-unknown-error": "Se produjo un error desconocido.",
+ "translate-statsf-alt-text": "Esta es la alternativa de texto de las estadísticas de traducción.",
+ "translate-statsf-embed": "Código para incrustar el gráfico de estadísticas de traducción en otras páginas.",
+ "translate-tag-page-desc": "Traducción de la página wiki [[$2|$1]] del $3 ($4).",
+ "translate-sidebar-alltrans": "En otros idiomas",
+ "translations": "Todas las traducciones",
+ "translations-summary": "Escribe debajo un nombre de mensaje para ver todas las traducciones disponibles.",
+ "translate-translations-no-message": "«$1» no es un mensaje traducible",
+ "translate-translations-none": "No hay traducciones para «$1»",
+ "translate-translations-count": "Se {{PLURAL:$1|ha|han}} encontrado {{PLURAL:$1|una traducción|$1 traducciones}}.",
+ "translate-translations-fieldset-title": "Mensaje",
+ "translate-translations-messagename": "Nombre:",
+ "translate-translations-project": "Proyecto:",
+ "translate-translations-including-no-param": "Especifica una clave de mensaje válida en el parámetro de subpágina",
+ "translate-translations-history-short": "h",
+ "languagestats": "Estadísticas por idioma",
+ "languagestats-summary": "Esta página muestra las estadísticas de traducción en todos los grupos de mensajes de un idioma.",
+ "messagegroupstats-summary": "Esta página muestra las estadísticas del grupo de mensajes.",
+ "languagestats-stats-for": "Estadísticas de las traducciones en $1 ($2).",
+ "languagestats-recenttranslations": "traducciones recientes",
+ "translate-langstats-incomplete": "Algunas de las estadísticas de esta página están incompletas. Actualiza la página para obtener más estadísticas.",
+ "translate-langstats-expand": "expandir",
+ "translate-langstats-collapse": "contraer",
+ "translate-langstats-expandall": "expandir todo",
+ "translate-langstats-collapseall": "contraer todo",
+ "translate-language-code": "Código de idioma",
+ "translate-language-code-field-name": "Código de idioma:",
+ "translate-suppress-complete": "Eliminar los grupos de mensajes completamente traducidos",
+ "translate-ls-noempty": "Eliminar los grupos de mensajes sin traducción iniciada",
+ "translate-language": "Idioma",
+ "translate-total": "Mensajes",
+ "translate-untranslated": "Sin traducir",
+ "translate-percentage-complete": "Completados",
+ "translate-percentage-fuzzy": "Desactualizados",
+ "translate-percentage-proofread": "Revisados",
+ "translate-languagestats-overall": "Todos los grupos de mensajes juntos",
+ "translate-ls-submit": "Mostrar estadísticas",
+ "translate-ls-column-group": "Grupo de mensajes",
+ "translate-mgs-pagename": "Estadísticas del grupo de mensajes",
+ "translate-mgs-fieldset": "Preferencias de visualización",
+ "translate-mgs-group": "Grupo de mensajes:",
+ "translate-mgs-nocomplete": "No mostrar los idiomas cuya traducción esté completa",
+ "translate-mgs-noempty": "No mostrar los idiomas que no tienen ninguna traducción",
+ "translate-mgs-submit": "Mostrar estadísticas",
+ "translate-mgs-column-language": "Idioma",
+ "translate-mgs-totals": "$1 {{PLURAL:$1|idioma|idiomas}} en total",
+ "translate-mgs-invalid-group": "El grupo especificado $1 no existe.",
+ "translate-mgs-nothing": "No hay nada que mostrar de las estadísticas solicitadas.",
+ "translate-tes-type-to-search": "Escribe para empezar a buscar",
+ "supportedlanguages": "Idiomas activos",
+ "supportedlanguages-summary": "Esta página muestra una lista de todos los idiomas admitidos por {{SITENAME}},\njunto con los nombres de los traductores que trabajan en ese idioma.\nCuanto más haya traducido un traductor, más grande aparecerá su nombre.\nEl color del subrayado indica cuán activo es un traductor aquí.",
+ "supportedlanguages-colorlegend": "Leyenda del color: Última traducción hecha hace $1 días.",
+ "supportedlanguages-sqlite-error": "No se admite SQLite",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Traductor|Traductora}}|Traductores}}: $1",
+ "supportedlanguages-recenttranslations": "traducciones recientes",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|idioma|idiomas}} en total.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|edición|ediciones}}, última edición hace $3 {{PLURAL:$3|día|días}}",
+ "translate-supportedlanguages-cached": "Esta información se prealmacenó hace $1.",
+ "abusefilter-edit-builder-vars-translate-source-text": "Texto de origen de la unidad de traducción",
+ "translate-jssti-add": "Añadir a la lista",
+ "managemessagegroups": "Gestión de grupos de mensajes",
+ "translate-smg-notallowed": "No estás autorizado a ejecutar esta acción.",
+ "translate-smg-nochanges": "No hay cambios que procesar.",
+ "translate-smg-submit": "Enviar cambios para procesamiento",
+ "translate-smg-submitted": "Los mensajes originales han sido actualizados. Los cambios están siendo procesados en segundo plano.",
+ "translate-smg-more": "Habrá más cambios que procesar tras enviar estos cambios.",
+ "translate-smg-left": "Contenido del mensaje en la wiki",
+ "translate-smg-right": "Cambios entrantes",
+ "translate-smg-rename-select": "Seleccionar",
+ "translate-smg-rename-cancel": "Cancelar",
+ "translate-smg-rename-select-err": "Selecciona un mensaje para cambiarle el nombre",
+ "translate-smg-rename-no-msg": "No se encontró ningún mensaje.",
+ "translate-smg-rename-new": "Añadir como nuevo…",
+ "translate-smg-rename-rename": "Añadir como cambio de nombre de…",
+ "translate-smg-rename-dialog-title": "Elige un renombramiento correspondiente para $1",
+ "translate-smg-changeset-modified": "El conjunto de cambios ha sido modificado por otro usuario o proceso. Tus cambios no se pueden guardar ya que podrían anular tus cambios. Vuelve a cargar la página para ver los últimos cambios.",
+ "translate-smg-no-groups-in-sync": "No hay ningún grupo actualmente en sincronización",
+ "translate-smg-strong-sync-help": "Ayuda",
+ "translate-smg-groups-in-sync": "Grupos actualmente en sincronización",
+ "translate-manage-import-diff": "Mensaje $1 | Acciones: $2",
+ "translate-manage-import-new": "Nuevo mensaje $1",
+ "translate-manage-import-deleted": "Mensaje $1 borrado",
+ "translate-manage-action-import": "Importar",
+ "translate-manage-action-conflict": "Importar y marcar traducciones para su revisión",
+ "translate-manage-action-ignore": "Ignorar",
+ "translate-manage-action-fuzzy": "Importar y combinar traducciones",
+ "translate-manage-action-rename-fuzzy": "Importar trads. y marcarlas como provisionales",
+ "translate-manage-action-rename": "Cambiar nombre",
+ "translate-manage-action-ignore-change": "Ignorar cambio de traducción",
+ "translate-manage-nochanges": "No hay cambios en los mensajes originales para este grupo.",
+ "translate-manage-nochanges-other": "No hubo cambios en este idioma.\nUse el enlace siguiente para volver a la vista de grupo.",
+ "translate-manage-inconsistent": "Se detectaron inconsistencias en la solicitud.\nRevisa cambios y prueba nuevamente.\nDetalles: $1.",
+ "translate-manage-toolong": "Se excedió el tiempo máximo de procesamiento de $1 {{PLURAL:$1|segundo|segundos}}.\nPor favor reenvía el formulario para continuar procesando.",
+ "translate-manage-import-summary": "Importando una nueva versión desde fuente externa",
+ "translate-manage-import-ignore": "Omitiendo el mensaje $1.",
+ "translate-manage-import-rename-summary": "Nombre cambiado en fuente externa",
+ "translate-manage-conflict-summary": "Importando un nueva versión desde fuente externa.\nVerifica.",
+ "translate-manage-submit": "Ejecutar",
+ "translate-manage-intro-other": "A continuación está la lista de modificaciones de traducción en el idioma $1.\nRevísalas y elige la acción apropiada para cada una.\nSi prefieres ignorar los cambios, esta acción es sólo temporal.",
+ "translate-manage-import-ok": "Importada: $1",
+ "translate-manage-import-done": "¡Importación completa!",
+ "importtranslations": "Importar traducciones",
+ "translate-import-from-local": "Importación de archivo local:",
+ "translate-import-load": "Subir archivo",
+ "translate-import-err-dl-failed": "Imposible obtener el archivo:\n$1",
+ "translate-import-err-ul-failed": "Falló la subida del archivo",
+ "translate-import-err-invalid-title": "El nombre de archivo <nowiki>$1</nowiki> no es válido.",
+ "translate-import-err-no-such-file": "El archivo <nowiki>$1</nowiki> no existe o no ha sido subido localmente.",
+ "translate-import-err-stale-group": "El grupo de mensajes al que pertenece este archivo no existe.",
+ "translate-import-err-no-headers": "Este no es un archivo Gettext bien formado en el formato de extensión Translate:\nNo se puede determinar el grupo y el idioma a partir de las cabeceras del archivo.",
+ "translate-js-support-unsaved-warning": "Tienes traducciones sin publicar.",
+ "translate-gs-pos": "Pos.",
+ "translate-gs-code": "Código",
+ "translate-gs-continent": "Continente",
+ "translate-gs-speakers": "Hablantes",
+ "translate-gs-score": "Puntuación",
+ "translate-gs-multiple": "Múltiple",
+ "translate-gs-count": "Cantidad",
+ "translate-gs-total": "Total",
+ "translate-gs-avgscore": "Puntuación media",
+ "translate-documentation-language": "Documentación de mensaje",
+ "translate-searchprofile": "Traducciones",
+ "translate-searchprofile-tooltip": "Buscar en todas las traducciones",
+ "translate-searchprofile-note": "Hay más opciones de búsqueda disponibles en la [$1 búsqueda de traducciones].",
+ "translate-search-languagefilter": "Filtrar por idioma:",
+ "translate-search-nofilter": "Sin filtro",
+ "log-name-translationreview": "Registro de revisión de las traducciones",
+ "log-description-translationreview": "Registro de todas las revisiones de las traducciones y de los grupos de mensajes.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|revisó}} la traducción $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|cambió}} el estado de las traducciones en $4 de $3, que pasó de $6 a $7",
+ "group-translate-sandboxed": "Traductores sin aprobar",
+ "group-translate-sandboxed-member": "{{GENDER:$1|traductor|traductora}} sin aprobar",
+ "right-translate-sandboxmanage": "Gestionar usuarios de la zona de pruebas",
+ "action-translate-sandboxmanage": "gestionar usuarios de la zona de pruebas",
+ "right-translate-sandboxaction": "Ejecutar acciones permitidas para los usuarios de la zona de pruebas",
+ "action-translate-sandboxaction": "ejecutar acciones permitidas para los usuarios de la zona de pruebas",
+ "translate-workflow-state-": "(no definido)",
+ "translate-workflowstatus": "Estado: $1",
+ "translate-workflow-set-doing": "Activando...",
+ "translate-workflow-autocreated-summary": "Creación automática de la página por el estado del flujo de trabajo $1",
+ "translate-stats-workflow": "Estado",
+ "translate-workflowgroup-label": "Estados del flujo de trabajo",
+ "translate-workflowgroup-desc": "Este grupo de mensajes muestra los estados del flujo de trabajo de traducción.\nLos estados están definidos en la variable de configuración $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Traducciones recientes",
+ "translate-dynagroup-recent-desc": "Este grupo de mensajes muestra todas las traducciones recientes en este idioma.\nResulta muy útil para tareas de revisión.",
+ "translate-dynagroup-additions-label": "Adiciones recientes",
+ "translate-dynagroup-additions-desc": "Este grupo de mensajes muestra mensajes nuevos y cambiados.",
+ "translate-msggroupselector-projects": "Grupo de mensajes",
+ "translate-msggroupselector-search-placeholder": "Buscar grupos",
+ "translate-msggroupselector-search-all": "Todos",
+ "translate-msggroupselector-search-recent": "Recientes",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|subgrupo|subgrupos}}",
+ "tux-languageselector": "Traducir al",
+ "tux-tab-all": "Todos",
+ "tux-tab-untranslated": "Sin traducir",
+ "tux-tab-outdated": "Desactualizados",
+ "tux-tab-translated": "Traducidos",
+ "tux-tab-unproofread": "Sin revisar",
+ "tux-edit": "Editar",
+ "tux-status-optional": "Opcional",
+ "tux-status-fuzzy": "Desactualizada",
+ "tux-status-proofread": "Revisada",
+ "tux-status-translated": "Traducido",
+ "tux-status-saving": "Publicando...",
+ "tux-status-unsaved": "Sin publicar",
+ "tux-save-unknown-error": "Ocurrió un error desconocido.",
+ "tux-editor-placeholder-language": "Tu traducción en $1",
+ "tux-editor-editsummary-placeholder": "Resumen opcional",
+ "tux-editor-paste-original-button-label": "Pegar texto de origen",
+ "tux-editor-discard-changes-button-label": "Descartar los cambios",
+ "tux-editor-save-button-label": "Publicar la traducción",
+ "tux-editor-skip-button-label": "Ir al siguiente",
+ "tux-editor-cancel-button-label": "Cancelar",
+ "tux-editor-confirm-button-label": "Confirmar la traducción",
+ "tux-editor-proofread-button-label": "Marcar como revisada",
+ "tux-editor-shortcut-info": "Pulsa «$1» para confirmar, «$2» para ir al siguiente mensaje, «$4» para proporcionar un resumen o «$3» para ver más atajos.",
+ "tux-editor-edit-desc": "Editar la documentación",
+ "tux-editor-add-desc": "Añadir documentación",
+ "tux-editor-suggestions-title": "Sugerencias",
+ "tux-editor-all-changes": "Todos los cambios",
+ "tux-editor-in-other-languages": "En otros idiomas",
+ "tux-editor-need-more-help": "¿Necesitas más ayuda?",
+ "tux-editor-ask-help": "Pide más información",
+ "tux-editor-tm-match": "$1 % de coincidencia",
+ "tux-notices-more": "{{PLURAL:$1|$1 más}}",
+ "tux-notices-hide": "ocultar",
+ "tux-editor-save-failed": "No se pudo publicar la traducción: $1",
+ "tux-editor-n-uses": "usado $1 {{PLURAL:$1|vez|veces}}",
+ "tux-editor-message-desc-more": "Ver más",
+ "tux-editor-message-desc-less": "Ver menos",
+ "tux-editor-clear-translated": "Ocultar traducidos",
+ "tux-editor-proofreading-mode": "Revisar",
+ "tux-editor-translate-mode": "Lista",
+ "tux-editor-proofreading-hide-own-translations": "Ocultar tus traducciones",
+ "tux-editor-proofreading-show-own-translations": "Mostrar tus traducciones",
+ "tux-proofread-action-tooltip": "Marcar como revisada",
+ "tux-proofread-edit-label": "Editar",
+ "tux-editor-page-mode": "Página",
+ "tux-editor-outdated-notice": "Puede que se necesite actualizar esta traducción.",
+ "tux-editor-outdated-notice-diff-link": "Mostrar diferencias",
+ "tux-editor-doc-editor-placeholder": "Documentación de mensaje",
+ "tux-editor-doc-editor-save": "Publicar la documentación",
+ "tux-editor-doc-editor-cancel": "Cancelar",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|mensaje|mensajes}} más",
+ "tux-messagetable-loading-messages": "Cargando {{PLURAL:$1|el mensaje|los mensajes}}…",
+ "tux-message-filter-placeholder": "Filtrar lista",
+ "tux-message-filter-result": "Se {{PLURAL:$1|encontró $1 resultado|encontraron $1 resultados}} para «$2»",
+ "tux-message-filter-advanced-button": "Búsqueda avanzada",
+ "tux-message-filter-optional-messages-label": "Mensajes opcionales",
+ "tux-proofread-translated-by-self": "Traducido por ti",
+ "tux-empty-list-all": "Este grupo de mensajes está vacío",
+ "tux-empty-list-all-guide": "Selecciona otro grupo de mensajes que traducir",
+ "tux-translate-page-no-such-group": "<strong>El grupo indicado no existe.</strong> Selecciona otro grupo de mensajes.",
+ "tux-empty-list-translated": "No hay mensajes traducidos",
+ "tux-empty-list-translated-guide": "Puedes ayudar a traducir",
+ "tux-empty-list-translated-action": "Traducir",
+ "tux-empty-no-messages-to-display": "No hay mensajes que mostrar.",
+ "tux-empty-there-are-optional": "Hay mensajes opcionales que no se muestran en la lista",
+ "tux-empty-show-optional-messages": "Mostrar mensajes opcionales",
+ "tux-empty-no-outdated-messages": "No hay mensajes desactualizados",
+ "tux-empty-nothing-to-proofread": "Nada para revisar",
+ "tux-empty-you-can-help-providing": "Puedes ayudar al proporcionar traducciones nuevas",
+ "tux-empty-nothing-new-to-proofread": "Nada nuevo para revisar",
+ "tux-empty-you-can-review-already-proofread": "Puedes revisar las traducciones ya revisadas por otros.",
+ "tux-empty-list-other": "No hay nada que traducir",
+ "tux-empty-list-other-guide": "Puedes ayudar en la revisión de las traducciones existentes",
+ "tux-empty-list-other-action": "Revisar traducciones",
+ "tux-empty-list-other-link": "Mostrar todos los mensajes",
+ "tux-editor-close-tooltip": "Cerrar",
+ "tux-editor-expand-tooltip": "Expandir",
+ "tux-editor-collapse-tooltip": "Contraer",
+ "tux-editor-message-tools-show-editor": "Mostrar en el editor de wiki",
+ "tux-editor-message-tools-history": "Historial",
+ "tux-editor-message-tools-delete": "Eliminar",
+ "tux-editor-message-tools-translations": "Todas las traducciones",
+ "tux-editor-message-tools-linktothis": "Enlace hacia este mensaje",
+ "tux-editor-loading": "Cargando...",
+ "tux-editor-loading-failed": "Error al cargar las ayudas de traducción: $1",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|idioma|idiomas}} más",
+ "translate-statsbar-tooltip": "$1 % traducido, $2 % revisado",
+ "translate-statsbar-tooltip-with-fuzzy": "$1 % traducido, $2 % revisado, $3 % desactualizado",
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|grupo|grupos}} más",
+ "translate-syntax-error": "La traducción contiene errores sintácticos",
+ "tux-session-expired": "Tu sesión se ha cerrado. Inicia sesión en una pestaña aparte. Alternativamente, haz una copia de las traducciones sin guardar, inicia sesión, regresa a esta página y vuelve a escribir tus traducciones.",
+ "tux-nojs": "Esta página necesita JavaScript. JavaScript está desactivado, no funciona o no admitimos este navegador.",
+ "specialpages-group-translation": "Traducción",
+ "log-action-filter-translationreview": "Tipo de acción:",
+ "log-action-filter-translationreview-message": "Revisión de traducciones"
+}
diff --git a/Translate/i18n/core/et.json b/Translate/i18n/core/et.json
new file mode 100644
index 00000000..aeaa53f7
--- /dev/null
+++ b/Translate/i18n/core/et.json
@@ -0,0 +1,322 @@
+{
+ "@metadata": {
+ "authors": [
+ "Avjoska",
+ "Hendrik",
+ "Ker",
+ "Pikne"
+ ]
+ },
+ "translate": "Tõlkimine",
+ "translate-desc": "[[Special:Translate|Vahend]] MediaWiki ja muude sõnumite tõlkimiseks",
+ "translate-taskui-export-to-file": "Ekspordi omavormingus",
+ "translate-taskui-export-as-po": "Ekspordi võrguühenduseta tõlkimiseks",
+ "translate-taction-translate": "Tõlkimine",
+ "translate-taction-proofread": "Ülevaatus",
+ "translate-taction-lstats": "Keele arvandmed",
+ "translate-taction-mstats": "Sõnumirühma arvandmed",
+ "translate-taction-export": "Eksportimine",
+ "translate-taction-disabled": "See toiming on selles vikis keelatud.",
+ "translate-page-no-such-language": "Keelevalik oli kõlbmatu.",
+ "translate-page-no-such-group": "Rühm ei sobi.",
+ "translate-page-disabled": "Selle rühma sõnumite tõlkimine selles keeles on keelatud.\nPõhjus:\n\n<em>$1</em>",
+ "translate-language-disabled": "Sellesse keelde tõlkimine on keelatud.",
+ "translate-page-settings-legend": "Seadistused",
+ "translate-page-group": "Rühm",
+ "translate-page-language": "Keel",
+ "translate-page-limit": "Limiit",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|sõnum|sõnumit}} lehel",
+ "translate-submit": "Päring",
+ "translate-page-navigation-legend": "Navigeerimine",
+ "translate-page-showing": "Näitan sõnumeid $1 kuni $2, sõnumite koguarv on $3.",
+ "translate-page-showing-all": "Näidatakse $1 {{PLURAL:$1|sõnumit|sõnumit}}.",
+ "translate-page-showing-none": "Ei ole ühtki sõnumit, mida näidata.",
+ "translate-next": "Järgmine lehekülg",
+ "translate-prev": "Eelmine lehekülg",
+ "translate-page-description-legend": "Selle sõnumirühma teave",
+ "translate-page-description-hasoptional": "See sõnumirühm sisaldab valikulisi sõnumeid.\nValikulisi sõnumeid tuleks tõlkida vaid juhul, kui sinu keeles on erinõudeid\nnagu tühikute mittekasutamine või pärisnimede translitereerimine. $1",
+ "translate-page-description-hasoptional-open": "Näita valikulisi sõnumeid.",
+ "translate-page-edit": "muuda",
+ "translate-optional": "(valikuline)",
+ "translate-ignored": "(eiratud)",
+ "translate-edit-title": "Redigeeri sõnumit \"$1\"",
+ "translate-edit-definition": "Sõnumi kuju",
+ "translate-edit-contribute": "täienda",
+ "translate-edit-no-information": "<em>Sellel sõnumil pole dokumentatsiooni.\nKui tead, kus seda sõnumit kasutatakse, saad dokumentatsiooni lisamisega teisi tõlkijaid aidata.</em>",
+ "translate-edit-information": "Selle sõnumi teave ($1)",
+ "translate-edit-warnings": "Hoiatused puuduliku tõlke kohta",
+ "translate-edit-tmmatch-source": "Tõlke alliktekst: $1",
+ "translate-edit-tmmatch": "Vastavus: $1%",
+ "translate-edit-nopermission": "Sõnumite tõlkimiseks on vaja tõlkeõigust.",
+ "translate-edit-askpermission": "Hangi luba",
+ "exporttranslations": "Tõlgete eksport",
+ "translate-export-form-format": "Vorming",
+ "translate-checks-parameters": "{{PLURAL:$2|Järgmine parameeter|Järgmised parameetrid}} on kasutamata:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Järgmine parameeter on tundmatu|Järgmised parameetrid on tundmatud}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "{{PLURAL:$2|Sulge}} on paaritu arv:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Järgmine link on probleemne|Järgmised $2 linki on probleemsed}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Järgmine link puudub|Järgmised $2 linki puuduvad}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Määratluses on <nowiki>{{PLURAL:}}</nowiki>, aga tõlkes pole.",
+ "translate-checks-pagename": "Määratluses esinev nimeruum muudetud",
+ "translate-checks-format": "Tõlge ei lähtu määratlusest või selle süntaks on vigane: $1",
+ "translate-checks-parametersnotequal": "Parameetrite arv on {{PLURAL:$1|$1}}; peaks aga olema {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> on väärdunud.",
+ "translate-pref-editassistlang": "Tugikeeled:",
+ "prefs-translate": "Tõlkesätted",
+ "translate-pref-editassistlang-help": "Komaga eraldatud keelte loetelu.\nTõlkimisel kuvatakse sõnumi tõlge nendes keeltes.\nVaikeloetelu sõltub kasutaja keelest.",
+ "translate-pref-editassistlang-bad": "Vigane keelekood nimekirjas:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Kasutada tõlkeliidest",
+ "right-translate-manage": "Hallata sõnumirühmi",
+ "action-translate-manage": "sõnumirühmi hallata",
+ "right-translate-import": "Importida ühenduseta tehtud tõlkeid",
+ "action-translate-import": "importida ühenduseta tehtud tõlkeid",
+ "right-translate-messagereview": "Tõlkeid üle vaadata",
+ "action-translate-messagereview": "tõlkeid üle vaadata",
+ "right-translate-groupreview": "Muuta sõnumirühmade tõlketöö seisundit",
+ "translate-rcfilters-translations": "Tõlked",
+ "translate-rcfilters-translations-only-label": "Tõlked",
+ "translate-rcfilters-translations-only-desc": "Tõlgitud lehekülgedel tehtud muudatused.",
+ "translate-rcfilters-translations-filter-label": "Pole tõlked",
+ "translate-rcfilters-translations-filter-desc": "Kõik muudatused, mis pole tõlked.",
+ "translate-rcfilters-translations-site-label": "Süsteemisõnumid",
+ "translate-rcfilters-translations-site-desc": "Süsteemisõnumite kohandamine nimeruumis MediaWiki.",
+ "translate-rc-translation-filter": "Filtreeri tõlkeid:",
+ "translate-rc-translation-filter-no": "Ära filtri",
+ "translate-rc-translation-filter-only": "Näita ainult tõlkeid",
+ "translate-rc-translation-filter-filter": "Ära tõlkeid näita",
+ "translate-rc-translation-filter-site": "Ainult süsteemisõnumite muudatused",
+ "translationstats": "Tõlkimise statistika",
+ "translate-stats-edits": "Muudatusi",
+ "translate-stats-users": "Tõlkijad",
+ "translate-stats-registrations": "Registreerimisi",
+ "translate-stats-reviews": "Ülevaatamisi",
+ "translate-stats-reviewers": "Ülevaatajaid",
+ "translate-statsf-intro": "Selle vormiga saab koostada lihtsaid arvandmestikke.\nIgal väärtusel on ülem- ja alampiir.",
+ "translate-statsf-options": "Graafiku suvandid",
+ "translate-statsf-width": "Laius pikslites:",
+ "translate-statsf-height": "Kõrgus pikslites:",
+ "translate-statsf-days": "Ajavahemik päevades:",
+ "translate-statsf-start": "Alguskuupäev:",
+ "translate-statsf-scale": "Jaotised:",
+ "translate-statsf-scale-months": "Kuud",
+ "translate-statsf-scale-weeks": "Nädalad",
+ "translate-statsf-scale-days": "Päevad",
+ "translate-statsf-scale-hours": "Tunnid",
+ "translate-statsf-count": "Mõõdetav:",
+ "translate-statsf-count-edits": "Redaktsioonide arv",
+ "translate-statsf-count-users": "Aktiivsete tõlkijate arv",
+ "translate-statsf-count-registrations": "Uute kasutajate arv",
+ "translate-statsf-count-reviews": "Ülevaadatud tõlgete arv",
+ "translate-statsf-count-reviewers": "Ülevaatajate arv",
+ "translate-statsf-language": "Komaga eraldatud keelekoodide loend:",
+ "translate-statsf-group": "Komaga eraldatud rühmakoodide loend:",
+ "translate-statsf-submit": "Eelvaade",
+ "translate-tag-page-desc": "Vikilehekülje [[$2|$1]] tõlkimine $3 keelest ($4).",
+ "translate-sidebar-alltrans": "Tõlge teistes keeltes",
+ "translations": "Kõik tõlked",
+ "translations-summary": "Sisesta allapoole sõnumi nimi, et näha kõiki olemasolevaid tõlkeid.",
+ "translate-translations-no-message": "\"$1\" ei ole tõlgitav sõnum",
+ "translate-translations-none": "Sõnumi \"$1\" tõlked puuduvad.",
+ "translate-translations-count": "Leiti {{PLURAL:$1|üks tõlge|$1 tõlget}}.",
+ "translate-translations-fieldset-title": "Sõnum",
+ "translate-translations-messagename": "Nimi:",
+ "translate-translations-project": "Projekt:",
+ "translate-translations-including-no-param": "Palun määra alamlehekülje parameetriga sobiv sõnumivõti.",
+ "translate-translations-history-short": "a",
+ "languagestats": "Keele arvandmed",
+ "languagestats-summary": "Sel lehel esitatakse tõlkimise statistika kõigi sõnumirühmade jaoks antud keeles.",
+ "messagegroupstats-summary": "Siin leheküljel näidatakse sõnumirühma arvandmeid.",
+ "languagestats-stats-for": "Tõlgete arvandmed $1 keele jaoks ($2).",
+ "languagestats-recenttranslations": "viimased tõlked",
+ "translate-langstats-incomplete": "Osa arvandmetest sellel leheküljel on ebatäielikud. Palun laadi lehekülg uuesti, et veel arvandmeid hankida.",
+ "translate-langstats-expand": "näita",
+ "translate-langstats-collapse": "peida",
+ "translate-langstats-expandall": "näita kõiki",
+ "translate-langstats-collapseall": "peida kõik",
+ "translate-language-code": "Keelekood",
+ "translate-language-code-field-name": "Keelekood:",
+ "translate-suppress-complete": "Peida täielikult tõlgitud sõnumirühmad",
+ "translate-ls-noempty": "Peida täielikult tõlkimata sõnumirühmad",
+ "translate-language": "Keel",
+ "translate-total": "Sõnumeid",
+ "translate-untranslated": "Tõlkimata",
+ "translate-percentage-complete": "Tõlgitud",
+ "translate-percentage-fuzzy": "Iganenud",
+ "translate-percentage-proofread": "Üle vaadatud",
+ "translate-languagestats-overall": "Kõik sõnumirühmad kokku",
+ "translate-ls-submit": "Näita arvandmeid",
+ "translate-ls-column-group": "Sõnumirühm",
+ "translate-mgs-pagename": "Sõnumirühma arvandmed",
+ "translate-mgs-fieldset": "Kuvasätted",
+ "translate-mgs-group": "Sõnumirühm:",
+ "translate-mgs-nocomplete": "Ära näita keeli, mille tõlge on valmis",
+ "translate-mgs-noempty": "Ära näita keeli, millel pole ühtegi tõlget",
+ "translate-mgs-submit": "Näita arvandmeid",
+ "translate-mgs-column-language": "Keel",
+ "translate-mgs-totals": "{{PLURAL:$1|Ühes keeles|Kõigis $1 keeles}} kokku",
+ "translate-mgs-invalid-group": "Määratud rühma $1 pole.",
+ "translate-mgs-nothing": "Soovitud näitajate kohta pole midagi näidata.",
+ "supportedlanguages": "Aktiivsed keeled",
+ "supportedlanguages-summary": "Siin leheküljel on toodud kõik keeled, mida {{SITENAME}} aktiivselt toetab\nja neis keeltes kaastööd tegevate tõlkijate nimed.\nMida suurem on tõlkija nimi, seda rohkem muudatusi on ta teinud.\nAllkriipsu värvus näitab, kui hiljuti on tõlkija siin kaastööd teinud.",
+ "supportedlanguages-colorlegend": "Värvuslegend: Viimane tõlge $1 päeva tagasi.",
+ "supportedlanguages-portallink": "[$1] $2 – $3",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Tõlkija}}|Tõlkijad}}: $1",
+ "supportedlanguages-recenttranslations": "viimased tõlked",
+ "supportedlanguages-count": "Kokku {{PLURAL:$1|üks keel|$1 keelt}}.",
+ "supportedlanguages-activity": "$1: {{PLURAL:$2|Üks muudatus|$2 muudatust}} – viimane muudatus {{PLURAL:$3|eile|$3 päeva tagasi}}",
+ "translate-jssti-add": "Lisa loetellu",
+ "managemessagegroups": "Sõnumirühmade haldamine",
+ "translate-smg-notallowed": "Sul pole lubatud seda toimingut sooritada.",
+ "translate-smg-nochanges": "Puuduvad muudatused, mida käidelda.",
+ "translate-smg-submit": "Esita muudatused käitlemiseks",
+ "translate-smg-submitted": "Sõnumimääratlused on uuendatud. Taustprotsess käitleb parasjagu muudatusi.",
+ "translate-smg-left": "Sõnumi sisu vikis",
+ "translate-manage-import-diff": "Sõnum $1 | Toimingud: $2",
+ "translate-manage-import-new": "Uus sõnum $1",
+ "translate-manage-import-deleted": "Kustutatud sõnum $1",
+ "translate-manage-action-import": "Impordi",
+ "translate-manage-action-conflict": "Impordi ja märgi ülevaatuseks",
+ "translate-manage-action-ignore": "Eira",
+ "translate-manage-action-fuzzy": "Impordi ja märgi tõlked ülevaatuseks",
+ "translate-manage-nochanges": "Selles rühmas pole ühegi tõlke määratlust muudetud.",
+ "translate-manage-nochanges-other": "Selle keelega seotud muudatused puuduvad.\nKasuta allolevat linki rühma üksikasjade vaatesse naasmiseks.",
+ "translate-manage-inconsistent": "Palves tuvastati vastuolu.\nPalun kontrolli muudatusi ja proovi uuesti.\nÜksikasjad: $1.",
+ "translate-manage-toolong": "Töötlusaja ülempiir $1 {{PLURAL:$1|sekund|sekundit}} on ületatud.\nPalun esita vorm uuesti, et töötlemist jätkata.",
+ "translate-manage-import-summary": "Uue versiooni importimine välisallikast.",
+ "translate-manage-conflict-summary": "Uue versiooni importimine välisallikast.\nPalun kontrolli.",
+ "translate-manage-submit": "Täida",
+ "translate-manage-intro-other": "Allpool on $1 keele tõlkemuudatuste loetelu.\nPalun vaata muudatused üle ja vali iga sõnumi jaoks sobiv toiming.\nKui eirad muudatusi, on see toiming vaid ajutine.",
+ "translate-manage-import-ok": "Imporditud: $1",
+ "translate-manage-import-done": "Imporditud!",
+ "importtranslations": "Tõlgete importimine",
+ "translate-import-from-local": "Kohaliku faili üleslaadimine:",
+ "translate-import-load": "Laadi fail",
+ "translate-import-err-ul-failed": "Faili üleslaadimine ebaõnnestus",
+ "translate-import-err-invalid-title": "Toodud failinimi <nowiki>$1</nowiki> oli vigane.",
+ "translate-import-err-no-such-file": "Faili <nowiki>$1</nowiki> pole või see on üles laaditud kohalikku vikisse.",
+ "translate-import-err-stale-group": "Sõnumirühma, kuhu see fail kuulub, pole.",
+ "translate-js-support-unsaved-warning": "Osa tõlkeid on avaldamata.",
+ "translate-gs-pos": "Koht",
+ "translate-gs-code": "Kood",
+ "translate-gs-continent": "Ilmaosa",
+ "translate-gs-speakers": "Kõnelejaid",
+ "translate-gs-score": "Punkte",
+ "translate-gs-multiple": "Mitu",
+ "translate-gs-count": "Arv",
+ "translate-gs-total": "Kokku",
+ "translate-gs-avgscore": "Punkte keskmiselt",
+ "translate-documentation-language": "Sõnumi dokumentatsioon",
+ "translate-searchprofile": "Tõlked",
+ "translate-searchprofile-tooltip": "Otsi kõigist tõlgetest",
+ "translate-searchprofile-note": "Rohkem otsivalikuid on saadaval [$1 tõlkeotsingus].",
+ "translate-search-languagefilter": "Keelefilter:",
+ "translate-search-nofilter": "Filtrita",
+ "log-name-translationreview": "Tõlgete ülevaatuslogi",
+ "log-description-translationreview": "Kõigi tõlgete ja sõnumirühmade ülevaatuslogi.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|märkis ülevaadatuks}} tõlke $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|muutis}} lehekülje \"$3\" $4 tõlgete oleku: $6 → $7",
+ "translate-workflow-state-": "(määramata)",
+ "translate-workflowstatus": "Olek: $1",
+ "translate-workflow-set-doing": "Määramine...",
+ "translate-stats-workflow": "Olek",
+ "translate-dynagroup-recent-label": "Viimased tõlked",
+ "translate-dynagroup-recent-desc": "Selles rühmas on kõik viimati sellesse keelde tõlgitud sõnumid.\nSobib ennekõike tõlgete ülevaatuseks.",
+ "translate-dynagroup-additions-label": "Viimased lisandused",
+ "translate-dynagroup-additions-desc": "Selles sõnumirühmas on uued ja muudetud sõnumid.",
+ "translate-msggroupselector-projects": "Sõnumirühm",
+ "translate-msggroupselector-search-placeholder": "Otsi rühmi",
+ "translate-msggroupselector-search-all": "Kõik",
+ "translate-msggroupselector-search-recent": "Viimased",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|alamrühm|alamrühma}}",
+ "tux-languageselector": "Keel",
+ "tux-tab-all": "Kõik",
+ "tux-tab-untranslated": "Tõlkimata",
+ "tux-tab-outdated": "Iganenud",
+ "tux-tab-translated": "Tõlgitud",
+ "tux-tab-unproofread": "Ülevaatamata",
+ "tux-edit": "Redigeeri",
+ "tux-status-optional": "Valikuline",
+ "tux-status-fuzzy": "Iganenud",
+ "tux-status-proofread": "Ülevaadatud",
+ "tux-status-translated": "Tõlgitud",
+ "tux-status-saving": "Avaldamine...",
+ "tux-status-unsaved": "Avaldamata",
+ "tux-editor-placeholder-language": "Sinu tõlge ($1)",
+ "tux-editor-editsummary-placeholder": "Selgita muudatusi (valikuline)",
+ "tux-editor-paste-original-button-label": "Kleebi lähtetekst",
+ "tux-editor-discard-changes-button-label": "Hülga muudatused",
+ "tux-editor-save-button-label": "Avalda tõlge",
+ "tux-editor-skip-button-label": "Jäta vahele ja mine järgmise juurde",
+ "tux-editor-cancel-button-label": "Loobu",
+ "tux-editor-confirm-button-label": "Kinnita tõlge",
+ "tux-editor-proofread-button-label": "Märgi ülevaadatuks",
+ "tux-editor-shortcut-info": "Vajuta klahve \"$1\", et kinnitada ja et minna järgmise sõnumi juurde, \"$2\", et sõnum vahele jätta, \"$4\", et kirjutada resümee, või \"$3\", et näha teisi kiirklahve.",
+ "tux-editor-edit-desc": "Redigeeri dokumentatsiooni",
+ "tux-editor-add-desc": "Lisa dokumentatsioon",
+ "tux-editor-suggestions-title": "Pakkumused",
+ "tux-editor-latest-updates-title": "Viimased uuendused",
+ "tux-editor-changes-without-summary": "$1 resümeeta {{PLURAL:$1|uuendus|uuendust}}",
+ "tux-editor-all-changes": "Kõik muudatused",
+ "tux-editor-in-other-languages": "Teistes keeltes",
+ "tux-editor-need-more-help": "Kas vajad veel abi?",
+ "tux-editor-ask-help": "Küsi lisateavet",
+ "tux-editor-tm-match": "Vastavus $1%",
+ "tux-notices-more": "{{PLURAL:$1|$1 veel}}",
+ "tux-notices-hide": "peida",
+ "tux-editor-save-failed": "Tõlke avaldamine ebaõnnestus: $1",
+ "tux-editor-n-uses": "kasutatud {{PLURAL:$1|ühe korra|$1 korda}}",
+ "tux-editor-message-desc-more": "Vaata veel",
+ "tux-editor-message-desc-less": "Vaata vähem",
+ "tux-editor-clear-translated": "Peida tõlgitud",
+ "tux-editor-proofreading-mode": "Vaata üle",
+ "tux-editor-translate-mode": "Loend",
+ "tux-editor-proofreading-hide-own-translations": "Peida oma tõlked",
+ "tux-editor-proofreading-show-own-translations": "Näita oma tõlkeid",
+ "tux-proofread-action-tooltip": "Märgi ülevaadatuks",
+ "tux-proofread-edit-label": "Redigeeri",
+ "tux-editor-page-mode": "Lehekülg",
+ "tux-editor-outdated-notice": "Võimalik, et see tõlge vajab uuendamist.",
+ "tux-editor-outdated-notice-diff-link": "Näita erinevusi",
+ "tux-editor-doc-editor-placeholder": "Sõnumi dokumentatsioon",
+ "tux-editor-doc-editor-save": "Avalda dokumentatsioon",
+ "tux-editor-doc-editor-cancel": "Loobu",
+ "tux-messagetable-more-messages": "Veel {{PLURAL:$1|üks sõnum|$1 sõnumit}}",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|Sõnumi|Sõnumite}} laadimine...",
+ "tux-message-filter-placeholder": "Filtreeri loend",
+ "tux-message-filter-result": "Päringule \"$2\" leitud {{PLURAL:$1|üks vaste|$1 vastet}}",
+ "tux-message-filter-advanced-button": "Täpsem otsing",
+ "tux-message-filter-optional-messages-label": "Valikulised sõnumid",
+ "tux-proofread-translated-by-self": "Sinu tõlgitud",
+ "tux-empty-list-all": "See sõnumirühm on tühi",
+ "tux-empty-list-all-guide": "Vali tõlkimiseks muu sõnumirühm.",
+ "tux-translate-page-no-such-group": "<strong>Sellist sõnumirühma pole.</strong> Vali erinev sõnumirühm.",
+ "tux-empty-list-translated": "Tõlgitud sõnumid puuduvad",
+ "tux-empty-list-translated-guide": "Saad tõlkimisel aidata",
+ "tux-empty-list-translated-action": "Tõlgi",
+ "tux-empty-no-messages-to-display": "Ühtegi sõnumit pole kuvada.",
+ "tux-empty-show-optional-messages": "Näita valikulisi sõnumeid",
+ "tux-empty-no-outdated-messages": "Iganenud sõnumid puuduvad",
+ "tux-empty-nothing-to-proofread": "Midagi pole üle vaadata",
+ "tux-empty-you-can-help-providing": "Saad aidata uusi tõlkeid koostada.",
+ "tux-empty-nothing-new-to-proofread": "Midagi uut pole üle vaadata",
+ "tux-empty-you-can-review-already-proofread": "Saad üle vaadata tõlkeid, mida teised on juba üle vaadanud.",
+ "tux-empty-list-other": "Midagi pole tõlkida",
+ "tux-empty-list-other-guide": "Saad aidata olemasolevaid tõlkeid üle vaadata.",
+ "tux-empty-list-other-action": "Vaata tõlked üle",
+ "tux-empty-list-other-link": "Näita kõiki sõnumeid",
+ "tux-editor-close-tooltip": "Sule",
+ "tux-editor-expand-tooltip": "Laiem vaade",
+ "tux-editor-collapse-tooltip": "Kitsam vaade",
+ "tux-editor-message-tools-show-editor": "Näita vikitoimetis",
+ "tux-editor-message-tools-history": "Ajalugu",
+ "tux-editor-message-tools-delete": "Kustuta",
+ "tux-editor-message-tools-translations": "Kõik tõlked",
+ "tux-editor-message-tools-linktothis": "Link sellele sõnumile",
+ "tux-editor-loading": "Laadimine...",
+ "translate-search-more-languages-info": "Veel $1 {{PLURAL:$1|keel|keelt}}",
+ "translate-statsbar-tooltip": "$1% tõlgitud, $2% ülevaadatud",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% tõlgitud, $2% ülevaadatud, $3% iganenud",
+ "translate-search-more-groups-info": "Veel $1 {{PLURAL:$1|rühm|rühma}}",
+ "tux-nojs": "See tööriist ei tööta ilma JavaScriptita. JavaScript on keelatud, see ei toiminud või selle brauseri tugi puudub.",
+ "specialpages-group-translation": "Tõlkimine"
+}
diff --git a/Translate/i18n/core/eu.json b/Translate/i18n/core/eu.json
new file mode 100644
index 00000000..088df438
--- /dev/null
+++ b/Translate/i18n/core/eu.json
@@ -0,0 +1,233 @@
+{
+ "@metadata": {
+ "authors": [
+ "An13sa",
+ "Iñaki LL",
+ "Kobazulo",
+ "Mikel Ibaiba",
+ "Sator",
+ "Subi",
+ "Theklan",
+ "Xabier Armendaritz"
+ ]
+ },
+ "translate": "Itzuli",
+ "translate-desc": "[[Special:Translate|Orrialde berezia]] MediaWiki eta bestelakoak itzultzeko",
+ "translate-taction-translate": "Itzuli",
+ "translate-taction-proofread": "Zuzenketak",
+ "translate-taction-lstats": "Hizkuntza estatistikak",
+ "translate-taction-mstats": "Mezu-taldeko estatistikak",
+ "translate-taction-export": "Esportatu",
+ "translate-page-no-such-language": "Zehaztutako hizkuntza baliogabea da.",
+ "translate-page-no-such-group": "Zehaztutako taldea baligabea da.",
+ "translate-page-disabled": "Ezin da talde honetako hizkuntzako honetarako itzulpenik egin.\nArrazoia:\n\n<em>$1</em>",
+ "translate-page-settings-legend": "Hobespenak",
+ "translate-page-group": "Taldea",
+ "translate-page-language": "Hizkuntza",
+ "translate-page-limit": "Muga",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|mezu|mezu}} orriko",
+ "translate-submit": "Bilatu",
+ "translate-page-navigation-legend": "Nabigazioa",
+ "translate-page-showing": "$1-tik $2-rako mezuak ikusgai $3-tik.",
+ "translate-page-showing-all": "{{PLURAL:$1|Mezu $1|$1 mezu}} erakusten.",
+ "translate-page-showing-none": "Ez dago mezurik erakusteko.",
+ "translate-next": "Hurrengo orria",
+ "translate-prev": "Aurreko orria",
+ "translate-page-description-legend": "Taldeari buruzko informazioa",
+ "translate-page-description-hasoptional": "Mezu-talde honek hautazko mezuak ditu.\nHautazko mezuak zure hizkuntzaren berezitasunak direla-eta, espazioak ez daudenean edo izen berezien itzulpenerako bakarrik itzuli. $1",
+ "translate-page-description-hasoptional-open": "Erakutsi hautazko mezuak.",
+ "translate-page-edit": "aldatu",
+ "translate-optional": "(hautazkoa)",
+ "translate-ignored": "(ignoratua)",
+ "translate-edit-title": "\"$1\" aldatu",
+ "translate-edit-definition": "Mezuaren definizioa",
+ "translate-edit-contribute": "lagundu",
+ "translate-edit-no-information": "''Mezu honek ez du dokumentaziorik.''\n''Mezu hau non erabiltzen den badakizu, beste itzultzaileei lagundu dezakezu mezu honen dokumentazioa gehituz.''",
+ "translate-edit-information": "Mezuari buruzko informazioa ($1)",
+ "translate-edit-warnings": "Bukatu gabeko itzulpenei buruzko oharrak",
+ "translate-edit-tmmatch": "$1% bilaketa",
+ "translate-edit-askpermission": "Baimena lortu",
+ "exporttranslations": "Itzulpenak esportatu",
+ "translate-export-form-format": "Formatua",
+ "translate-export-group-too-large": "Aukeratutako mezu taldea handiegia da. Aukeratu $1 {{PLURAL:$1|mezu}} baino gutxiago dituen mezu talde bat, edo jarri harremanetan itzulpeneko administrariarekin aholkua eskatzeko.",
+ "translate-checks-fudforum-syntax": "Proiektu honetan erabili <nowiki>$1</nowiki>, <nowiki>$2</nowiki>-ren ordez.",
+ "translate-pref-editassistlang": "Hizkuntza laguntzaileak:",
+ "prefs-translate": "Itzulpen aukerak",
+ "right-translate": "Aldatu itzulpen interfazea erabiliz",
+ "right-translate-import": "Inportatu sarez kanpoko itzulpenak",
+ "right-translate-messagereview": "Itzulpenak berrikusi",
+ "translate-rc-translation-filter": "Itzulpenak iragazi:",
+ "translate-rc-translation-filter-no": "Ezer ez egin",
+ "translate-rc-translation-filter-only": "Itzulpenak bakarrik erakutsi",
+ "translate-rc-translation-filter-filter": "Itzulpenak iragazi",
+ "translationstats": "Itzulpenaren estatistikak",
+ "translate-stats-edits": "Aldaketak",
+ "translate-stats-users": "Itzultzaileak",
+ "translate-stats-registrations": "Izena-emateak",
+ "translate-stats-reviews": "Berrikuspenak",
+ "translate-stats-reviewers": "Berrikusleak",
+ "translate-statsf-options": "Aukera grafikoak",
+ "translate-statsf-width": "Zabalera pixeletan:",
+ "translate-statsf-height": "Altuera pixeletan:",
+ "translate-statsf-days": "Denbora-tartea egunetan:",
+ "translate-statsf-start": "Hasiera data:",
+ "translate-statsf-scale": "Pikortasuna:",
+ "translate-statsf-scale-months": "Hilabete",
+ "translate-statsf-scale-weeks": "Asteak",
+ "translate-statsf-scale-days": "Egunak",
+ "translate-statsf-scale-hours": "Orduak",
+ "translate-statsf-count": "Neurria:",
+ "translate-statsf-count-edits": "Aldaketa kopurua",
+ "translate-statsf-count-users": "Lanean ari diren itzultzaileak",
+ "translate-statsf-count-registrations": "Lankide berriak",
+ "translate-statsf-count-reviewers": "Berrikusleak",
+ "translate-statsf-submit": "Aurreikuspena",
+ "translate-tag-page-desc": "[[$2|$1]] wiki orrialdearen itzulpena $3(e)tik ($4).",
+ "translate-sidebar-alltrans": "Erdaretan",
+ "translations": "Itzulpen guztiak",
+ "translate-translations-no-message": "\"$1\" itzulezina den mezua da. (ezin da euskaratu)",
+ "translate-translations-none": "\"$1\"-ek ez du itzulpenik",
+ "translate-translations-count": "{{PLURAL:$1|Itzulpen bat aurkitu da|$1 itzulpen aurkitu dira}}.",
+ "translate-translations-fieldset-title": "Mezua",
+ "translate-translations-messagename": "Izena:",
+ "translate-translations-project": "Proiektua:",
+ "translate-translations-history-short": "h",
+ "languagestats": "Hizkuntza estatistikak",
+ "languagestats-summary": "Orri honetan hizkuntza bateko mezu-talde guztien itzulpen estatistikak ageri dira.",
+ "languagestats-stats-for": "$1-entzako itzulpen estatistikak($2).",
+ "languagestats-recenttranslations": "azken itzulpenak",
+ "translate-langstats-expand": "zabaldu",
+ "translate-langstats-collapse": "itxi",
+ "translate-langstats-expandall": "denak zabaldu",
+ "translate-langstats-collapseall": "denak itxi",
+ "translate-language-code": "Hizkuntza kodea",
+ "translate-language-code-field-name": "Hizkuntza kodea:",
+ "translate-suppress-complete": "Guztiz itzulitako mezu-taldeak bistatik kendu",
+ "translate-ls-noempty": "Ezkutatu itzulpen bat ere ez duten mezu-taldeak",
+ "translate-language": "Hizkuntza",
+ "translate-total": "Mezuak",
+ "translate-untranslated": "Itzuli gabe",
+ "translate-percentage-complete": "Bukatuak",
+ "translate-percentage-fuzzy": "Zaharkituak",
+ "translate-languagestats-overall": "Mezu-talde guztiak batera",
+ "translate-ls-submit": "Estatistikak erakutsi",
+ "translate-ls-column-group": "Mezu-taldea",
+ "translate-mgs-pagename": "Mezu-taldeko estatistikak",
+ "translate-mgs-fieldset": "Hobespenak erakutsi",
+ "translate-mgs-group": "Mezu-taldea:",
+ "translate-mgs-submit": "Estatistikak erakutsi",
+ "translate-mgs-column-language": "Hizkuntza",
+ "translate-mgs-totals": "{{PLURAL:$1|Hizkuntza bat|$1 hizkuntzak}} batera",
+ "supportedlanguages": "Laguntza duten hizkuntzak",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Translator}}|Itzultzaileak}}: $1",
+ "supportedlanguages-recenttranslations": "azken itzulpenak",
+ "supportedlanguages-count": "{{PLURAL:$1|Hizkutza bat|$1 hizkuntza}} guztira.",
+ "translate-jssti-add": "Zerrendara gehitu",
+ "translate-manage-import-diff": "Mezua $1 | Ekintzak: $2",
+ "translate-manage-import-new": "Mezu berria $1",
+ "translate-manage-import-deleted": "Mezu ezabatua $1",
+ "translate-manage-action-import": "Inportatu",
+ "translate-manage-action-conflict": "Inportatu eta fuzzy",
+ "translate-manage-action-ignore": "Ezikusi",
+ "translate-manage-action-fuzzy": "Inportatu eta fuzzy itzulpenak",
+ "translate-manage-submit": "Exekutatu",
+ "translate-manage-import-done": "Inportazioa egina!",
+ "importtranslations": "Itzulpenak inportatu",
+ "translate-import-load": "Fitxategia kargatu",
+ "translate-gs-pos": "Pos.",
+ "translate-gs-code": "Kodea",
+ "translate-gs-continent": "Kontinentea",
+ "translate-gs-speakers": "Hiztunak",
+ "translate-gs-score": "Puntuaketa",
+ "translate-gs-multiple": "Anitza",
+ "translate-gs-count": "Zenbaketa",
+ "translate-gs-total": "Guztira",
+ "translate-gs-avgscore": "Batazbesteko puntuazioa",
+ "translate-documentation-language": "Mezuaren dokumentazioa",
+ "translate-searchprofile": "Itzulpenak",
+ "translate-searchprofile-tooltip": "Itzulpen guztietan bilatu",
+ "translate-search-languagefilter": "Iragazi hizkuntzaren arabera:",
+ "translate-workflowstatus": "Egoera: $1",
+ "translate-stats-workflow": "Egoera",
+ "translate-dynagroup-recent-label": "Azken itzulpenak",
+ "translate-msggroupselector-projects": "Mezu-taldea",
+ "translate-msggroupselector-search-placeholder": "Bilatu taldeak",
+ "translate-msggroupselector-search-all": "Denak",
+ "translate-msggroupselector-search-recent": "Berriak",
+ "translate-msggroupselector-view-subprojects": "{{PLURAL:$1|azpitalde $1|$1 azpitalde}}",
+ "tux-languageselector": "Itzuli hizkuntza honetara",
+ "tux-tab-all": "Guztiak",
+ "tux-tab-untranslated": "Itzuli gabe",
+ "tux-tab-outdated": "Zaharkituta",
+ "tux-tab-translated": "Itzulita",
+ "tux-tab-unproofread": "Berrikusi gabe",
+ "tux-edit": "Aldatu",
+ "tux-status-optional": "Aukerakoa",
+ "tux-status-fuzzy": "Zaharkitua",
+ "tux-status-proofread": "Berrikusita",
+ "tux-status-translated": "Itzulita",
+ "tux-status-saving": "Argitaratzen...",
+ "tux-status-unsaved": "Argitaratugabea",
+ "tux-save-unknown-error": "Errore ezezaguna gertatu da.",
+ "tux-editor-editsummary-placeholder": "Hautazko laburpena",
+ "tux-editor-paste-original-button-label": "Kopiatu jatorrizko testua",
+ "tux-editor-discard-changes-button-label": "Baztertu aldaketak",
+ "tux-editor-save-button-label": "Itzulpena gorde",
+ "tux-editor-skip-button-label": "Hurrengora saltatu",
+ "tux-editor-cancel-button-label": "Utzi",
+ "tux-editor-confirm-button-label": "Berretsi itzulpena",
+ "tux-editor-proofread-button-label": "Markatu berrikusitzat",
+ "tux-editor-edit-desc": "Aldatu dokumentazioa",
+ "tux-editor-add-desc": "Gehitu dokumentazioa",
+ "tux-editor-suggestions-title": "Iradokizunak",
+ "tux-editor-in-other-languages": "Beste hizkuntzetan",
+ "tux-editor-need-more-help": "Laguntza gehiago behar duzu?",
+ "tux-editor-ask-help": "Eskatu informazio gehiago",
+ "tux-editor-tm-match": "%$1(e)ko kointzidentzia",
+ "tux-notices-more": "{{PLURAL:$1|$1 gehiago}}",
+ "tux-notices-hide": "ezkutatu",
+ "tux-editor-n-uses": "{{PLURAL:$1|Behin|$1 aldiz}} erabilia",
+ "tux-editor-message-desc-more": "Ikusi gehiago",
+ "tux-editor-message-desc-less": "Ikusi gutxiago",
+ "tux-editor-clear-translated": "Itzulitakoak ezkutatu",
+ "tux-editor-proofreading-mode": "Berrikusi",
+ "tux-editor-translate-mode": "Zerrenda",
+ "tux-editor-proofreading-hide-own-translations": "Zure itzulpenak ezkutatu",
+ "tux-editor-proofreading-show-own-translations": "Zure itzulpenak erakutsi",
+ "tux-proofread-action-tooltip": "Markatu berrikusitzat",
+ "tux-proofread-edit-label": "Aldatu",
+ "tux-editor-page-mode": "Orrialdea",
+ "tux-editor-outdated-notice": "Beharbada itzulpen hau eguneratu beharra dago.",
+ "tux-editor-outdated-notice-diff-link": "Erakutsi desberdintasunak",
+ "tux-editor-doc-editor-placeholder": "Mezuaren dokumentazioa",
+ "tux-editor-doc-editor-save": "Dokumentazioa argitaratu",
+ "tux-editor-doc-editor-cancel": "Utzi",
+ "tux-messagetable-more-messages": "{{PLURAL:$1|mezu bat|$1 mezu}} gehiago",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|Mezua|Mezuak}} kargatzen...",
+ "tux-message-filter-placeholder": "Iragazi zerrenda",
+ "tux-message-filter-result": "{{PLURAL:$1|Emaitza bat aurkitu da|$1 emaitza aurkitu dira}} \"$2\" bilaketarako",
+ "tux-message-filter-advanced-button": "Bilaketa aurreratua",
+ "tux-message-filter-optional-messages-label": "Aukerako mezuak",
+ "tux-proofread-translated-by-self": "Zeuk itzulia",
+ "tux-empty-list-all": "Mezu-talde hau hutsik dago",
+ "tux-empty-list-translated": "Itzuli gabeko mezuak",
+ "tux-empty-list-translated-guide": "Itzultzen lagun dezakezu",
+ "tux-empty-list-translated-action": "Itzuli",
+ "tux-empty-no-messages-to-display": "Ez dago mezurik erakusteko.",
+ "tux-empty-show-optional-messages": "Erakutsi aukerako mezuak",
+ "tux-empty-nothing-to-proofread": "Ez dago berrikusteko ezer",
+ "tux-empty-list-other": "Ez dago itzultzeko ezer",
+ "tux-empty-list-other-action": "Berrikusi itzulpenak",
+ "tux-empty-list-other-link": "Mezu guztiak erakutsi",
+ "tux-editor-close-tooltip": "Itxi",
+ "tux-editor-expand-tooltip": "Zabaldu",
+ "tux-editor-message-tools-show-editor": "Erakutsi wiki editorean",
+ "tux-editor-message-tools-history": "Historia",
+ "tux-editor-message-tools-delete": "Ezabatu",
+ "tux-editor-message-tools-translations": "Itzulpen guztiak",
+ "tux-editor-loading": "Kargatzen...",
+ "translate-search-more-languages-info": "{{PLURAL:$1|Hizkuntza bat|$1 hizkuntza}} gehiago",
+ "translate-statsbar-tooltip": "%$1 itzulita, %$2 berrikusita",
+ "translate-statsbar-tooltip-with-fuzzy": "%$1 itzulita, %$2 berrikusita, %$3 zeharkituta",
+ "translate-search-more-groups-info": "{{PLURAL:$1|Talde $1|$1 talde}} gehiago"
+}
diff --git a/Translate/i18n/core/ext.json b/Translate/i18n/core/ext.json
new file mode 100644
index 00000000..cd7ac819
--- /dev/null
+++ b/Translate/i18n/core/ext.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Better"
+ ]
+ },
+ "translate": "Traucil",
+ "translate-next": "Siguienti páhina",
+ "translate-prev": "Páhina anteriol",
+ "translate-optional": "(ocional)",
+ "translate-ignored": "(inorau)"
+}
diff --git a/Translate/i18n/core/fa.json b/Translate/i18n/core/fa.json
new file mode 100644
index 00000000..9c2c7f77
--- /dev/null
+++ b/Translate/i18n/core/fa.json
@@ -0,0 +1,468 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alireza Ivaz",
+ "Alirezaaa",
+ "Armin1392",
+ "Beginneruser",
+ "Calak",
+ "Dalba",
+ "Darafsh",
+ "E THP",
+ "Ebraminio",
+ "FarsiNevis",
+ "Hosseinblue",
+ "Huji",
+ "Iriman",
+ "Jeeputer",
+ "Ladsgroup",
+ "LordProfo",
+ "Mjbmr",
+ "Mohammad ebz",
+ "Omidh",
+ "Ommmmid",
+ "Reza1615",
+ "Rtemis",
+ "Sunfyre",
+ "Tofighi",
+ "Wayiran",
+ "ZxxZxxZ",
+ "جواد",
+ "درفش کاویانی"
+ ]
+ },
+ "translate": "ترجمه",
+ "translate-extensionname": "ترجمه",
+ "translate-desc": "[[Special:Translate|صفحهٔ ویژه]] برای ترجمهٔ مدیاویکی و فراتر از آن",
+ "translate-fuzzybot-desc": "این یک حساب سامانه‌ای ویژه به‌کارگرفته شده توسط [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate افزونهٔ ترجمه] مدیاویکی است که برای نگهداری ترجمه‌ها استفاده می‌شود.\nاین حساب بخشی از نرم‌افزار مدیاویکی است و متعلق به هیچ کاربری نیست.",
+ "translate-taskui-export-to-file": "برون‌بری در قالب بومی",
+ "translate-taskui-export-as-po": "برون‌بری برای ترجمهٔ برون‌خط",
+ "translate-taskui-export-as-csv": "برون‌بری در قالب CSV",
+ "translate-export-csv-message-title": "عنوان پیام ترجمه",
+ "translate-export-csv-definition": "تعریف پیام",
+ "translate-taction-translate": "ترجمه",
+ "translate-taction-proofread": "بازبینی",
+ "translate-taction-lstats": "آمار زبان",
+ "translate-taction-mstats": "آمار گروه پیام",
+ "translate-taction-export": "برون‌بری",
+ "translate-taction-disabled": "این عمل در این ویکی غیرفعال شده‌است.",
+ "translate-page-no-such-language": "زبان مشخص‌شده نامعتبر است.",
+ "translate-page-no-such-group": "گروه مشخص‌شده نامعتبر است.",
+ "translate-page-disabled": "ترجمه به این زبان در این گروه غیرفعال است.\nدلیل:\n\n<em>$1</em>",
+ "translate-language-disabled": "ترجمه به این زبان غیرفعال شده‌است.",
+ "translate-page-settings-legend": "تنظیمات",
+ "translate-page-group": "گروه",
+ "translate-page-language": "زبان",
+ "translate-page-limit": "تعداد",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|پیام|پیام‌ها}} در صفحه",
+ "translate-submit": "واکشی",
+ "translate-page-navigation-legend": "ناوبری",
+ "translate-page-showing": "نمایش پیام‌های $1 تا $2 از $3.",
+ "translate-page-showing-all": "نمایش $1 {{PLURAL:$1|پیام|پیام‌ها}}.",
+ "translate-page-showing-none": "پیامی برای نمایش وجود ندارد.",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "صفحهٔ بعدی",
+ "translate-prev": "صفحهٔ قبلی",
+ "translate-page-description-legend": "اطلاعات در مورد گروه",
+ "translate-page-description-hasoptional": "این گروه پیام‌ها شامل پیام‌های اختیاری است.\nپیام‌های اختیاری باید تنها زمانی ترجمه شوند که زبان شما شرایط ویژه‌ای نظیر استفاده نکردن از فاصله یا نویسه‌گردانی اسامی خاص داشته باشد. $1",
+ "translate-page-description-hasoptional-open": "نمایش پیام‌های اختیاری.",
+ "translate-page-edit": "ویرایش",
+ "translate-optional": "(اختیاری)",
+ "translate-ignored": "(نادیده گرفته شده)",
+ "translate-edit-title": "ویرایش «$1»",
+ "translate-edit-definition": "تعریف پیام",
+ "translate-edit-contribute": "مشارکت",
+ "translate-edit-no-information": "<em>این پیام دارای مستندات نیست.\n''اگر می‌دانید که این پیام چگونه یا در کجا استفاده می‌شود، می‌توانید با اضافه کردن مستندات به دیگر ترجمه‌کنندگان کمک کنید.</em>",
+ "translate-edit-information": "اطلاعات در مورد این پیام ($1)",
+ "translate-edit-warnings": "هشدار در مورد ترجمه‌های ناقص",
+ "translate-edit-tmmatch-source": "متن منبع ترجمه: $1",
+ "translate-edit-tmmatch": "$1٪ مطابقت",
+ "translate-edit-nopermission": "برای ترجمه پیام‌ها نیازمند اختیارات ترجمه هستید.",
+ "translate-edit-askpermission": "دریافت دسترسی",
+ "exporttranslations": "برون‌بری ترجمه‌ها",
+ "translate-export-form-format": "قالب",
+ "translate-export-invalid-format": "لطفاً یک قالب معتبر وارد کنید.",
+ "translate-export-not-supported": "برون‌بری ترجمه پشتیبانی نمی‌شود.",
+ "translate-export-format-notsupported": "قالب مشخص‌شده برای برون‌بری این گروه پیام‌ها پشتیبانی نمی‌شود.",
+ "translate-export-group-too-large": "گروه پیام انتخابی خیلی بزرگ است. یک گروه پیام که کمتر از $1 {{PLURAL:$1|پیام}} دارد را انتخاب کنید یا با مدیر ترجمه برای مشورت تماس بگیرید.",
+ "translate-checks-parameters": "این {{PLURAL:$2|پارامتر استفاده نشده‌است|پارامترها استفاده نشده‌اند}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|پارامتر|پارامترهای}} زیر {{PLURAL:$2|ناشناخته است|ناشناخته‌اند}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "تعداد {{PLURAL:$2|پرانتزها|پرانتزها}} جفت نیست:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|پیوندی که در ادامه می‌آید مشکل ساز است|پیوندهایی که در ادامه می‌آیند مشکل‌ساز هستند}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|پیوند|پیوندهای}} زیر پیدا {{PLURAL:$2|نشد|نشدند}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "تعریف از <nowiki>{{PLURAL:}}</nowiki> استفاده می‌کند اما ترجمه از آن استفاده نمی‌کند.",
+ "translate-checks-plural-forms": "{{PLURAL:$1|یک فرم|$1 فرم}} به <nowiki>{{PLURAL:}}</nowiki> داده شده اما {{PLURAL:$2|تنها یک فرم|$2 فرم}} پشتیبانی می‌شود (به جز فرم‌های 0= و 1=).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> دارای فرم‌های تکراری در انتهایش است. <nowiki>{{PLURAL:$1|گوسفند|گوسفند}}</nowiki> باید به صورت <nowiki>{{PLURAL:$1|گوسفند}}</nowiki> نوشته شود.",
+ "translate-checks-gettext-plural-missing": "این ترجمه باید <nowiki>{{PLURAL:GETTEXT|}}</nowiki> داشته باشد.",
+ "translate-checks-gettext-plural-unsupported": "این پیام <nowiki>{{PLURAL:GETTEXT|}}</nowiki> را پشتیبانی نمی‌کند.",
+ "translate-checks-gettext-plural-count": "<nowiki>{{PLURAL:GETTEXT|}}</nowiki> دقیقاً $1 {{PLURAL:$1|شکل جمع}} را پذیرفت. در حال حاضر $2 شکل جمع داده {{PLURAL:$2|شد|شدند}}.",
+ "translate-checks-smartformat-plural-missing": "این ترجمه باید روی متغییر $1 «جمع» داشته باشد.",
+ "translate-checks-smartformat-plural-unsupported": "این پیام «جمع» روی $1 را پشتیبانی نمی‌کند.",
+ "translate-checks-smartformat-plural-count": "تعداد نادرست شکل‌های جمع در <strong>$3</strong>. این باید $1 {{PLURAL:$1|شکل جمع}} داشته باشد. در حال حاضر $2 شکل جمع داده {{PLURAL:$2|شده است|شدند}}.",
+ "translate-checks-unicode-plural-missing": "این ترجمه باید <nowiki>{{PLURAL|}}</nowiki> داشته باشد.",
+ "translate-checks-unicode-plural-unsupported": "این ترجمه <nowiki>{{PLURAL|}}</nowiki> را پشتیبانی نمی‌کند.",
+ "translate-checks-unicode-plural-invalid": "شکل‌های «جمع» باید به صورت $1 تعریف شده باشد. این ترجمه شامل $2 است.",
+ "translate-checks-pagename": "فضای نام با آن چه در تعریف پیام آمده تفاوت دارد",
+ "translate-checks-format": "این ترجمه از تعریف پیام تبعیت نمی‌کند یا دارای دستور نامعتبر است: $1",
+ "translate-checks-escape": "{{PLURAL:$2|نویسه|نویسه‌های}} فراموش‌شده زیر ممکن است باعث پیشامدی شود: <strong>$1</strong>. {{PLURAL:$4|یک نویسه معتبر فراموش‌شده است|نویسه معتبر فرامواش‌شده است:}} $3.",
+ "translate-checks-parametersnotequal": "شمار پارامترها {{PLURAL:$1|$1}} تا است؛ بایستی {{PLURAL:$2|$2}} تا باشد.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> بدشکل است.",
+ "translate-checks-fudforum-syntax": "در این پروژه از <nowiki>$1</nowiki> به جای <nowiki>$2</nowiki> استفاده کنید.",
+ "translate-checks-newline-missing-start": "$1 {{PLURAL:$1|نویسه}} خط جدید فراموش شده در آغاز ترجمه وجود {{PLURAL:$1|دارد|دارند}}.",
+ "translate-checks-newline-missing-end": "$1 {{PLURAL:$1|نویسه}} خط جدید فراموش شده در انتهای ترجمه وجود {{PLURAL:$1|دارد|دارند}}.",
+ "translate-checks-newline-extra-start": "$1 {{PLURAL:$1|نویسه}} خط جدید اضافی در آغاز ترجمه وجود {{PLURAL:$1|دارد|دارند}}",
+ "translate-checks-newline-extra-end": "$1 {{PLURAL:$1|نویسه}} خط جدید فراموش شده در انتهای ترجمه وجود {{PLURAL:$1|دارد|دارند}}.",
+ "translate-checks-value-not-present": "ترجمه باید معادل با {{PLURAL:$1|۱=|یکی از مقادیر زیر:}} $1 باشد.",
+ "translate-checks-replacement": "به‌جای $1 از $2 استفاده کنید.",
+ "translate-checks-empty": "ترجمۀ بدون محتوا یا فقط فضای خالی مجاز نیست.",
+ "translate-pref-editassistlang": "زبان‌های دستیار:",
+ "prefs-translate": "گزینه‌های ترجمه",
+ "translate-pref-editassistlang-help": "فهرست کدهای زبان جدا شده با کاما.\nترجمه‌های پیام‌های این زبان‌ها در زمانی که شما ترجمه می‌کنید نمایش داده می‌شوند.\nفهرست پیش‌فرض زبان‌ها بستگی به این دارد که زبان شما چیست.",
+ "translate-pref-editassistlang-bad": "کد زبان در فهرست نامعتبر است:\n<nowiki>$1</nowiki>.",
+ "right-translate": "ویرایش با استفاده از رابط ترجمه",
+ "action-translate": "ویرایش با استفاده از رابط ترجمه",
+ "right-translate-manage": "مدیریت گروه‌های پیام",
+ "action-translate-manage": "مدیریت گروه‌های پیام",
+ "right-translate-import": "درون‌ریزی ترجمه‌های برون‌خط",
+ "action-translate-import": "درون‌ریزی ترجمه‌های برون‌خط",
+ "right-translate-messagereview": "بازبینی ترجمه‌ها",
+ "action-translate-messagereview": "بازبینی ترجمه‌ها",
+ "right-translate-groupreview": "تغییر وضعیت گردش‌کار گروه‌های پیام",
+ "action-translate-groupreview": "تغییر وضعیت گردش‌کار گروه‌های پیام‌",
+ "translate-rcfilters-translations": "ترجمه‌ها",
+ "translate-rcfilters-translations-only-label": "ترجمه‌ها",
+ "translate-rcfilters-translations-only-desc": "تغییرات به صفحه‌های ترجمه شده.",
+ "translate-rcfilters-translations-filter-label": "بدون ترجمه",
+ "translate-rcfilters-translations-filter-desc": "همۀ تغییراتی که ترجمه نیستند",
+ "translate-rcfilters-translations-site-label": "پیام‌های سایت.",
+ "translate-rcfilters-translations-site-desc": "سفارشی‌سازی‌هایی از پیام‌ها در فضای نام مدیاویکی",
+ "translate-rc-translation-filter": "پالایش ترجمه‌ها:",
+ "translate-rc-translation-filter-no": "کاری نکن",
+ "translate-rc-translation-filter-only": "تنها ترجمه‌ها را نمایش بده",
+ "translate-rc-translation-filter-filter": "ترجمه‌ها را نمایش نده",
+ "translate-rc-translation-filter-site": "تنها تغییرات پیام‌های سایت",
+ "translationstats": "آمار ترجمه",
+ "translate-stats-edits": "ویرایش‌ها",
+ "translate-stats-users": "مترجمان",
+ "translate-stats-registrations": "ثبت نام",
+ "translate-stats-reviews": "بازبینی‌ها",
+ "translate-stats-reviewers": "بازبینی‌کنندگان",
+ "translate-statsf-intro": "شما می‌توانید توسط این فرم آمارهای ساده ایجاد کنید.\nتمام مقادیر دارای حد بالا و پایین هستند.",
+ "translate-statsf-options": "گزینه‌های نمودار",
+ "translate-statsf-width": "پهنا به پیکسل:",
+ "translate-statsf-height": "بلندی به پیکسل:",
+ "translate-statsf-days": "دورهٔ زمانی بر حسب روز:",
+ "translate-statsf-start": "تاریخ شروع:",
+ "translate-statsf-scale": "ظرافت:",
+ "translate-statsf-scale-years": "سال‌",
+ "translate-statsf-scale-months": "ماه",
+ "translate-statsf-scale-weeks": "هفته",
+ "translate-statsf-scale-days": "روز",
+ "translate-statsf-scale-hours": "ساعت",
+ "translate-statsf-count": "معیار:",
+ "translate-statsf-count-edits": "شمار ویرایش‌ها",
+ "translate-statsf-count-users": "مترجمان فعال",
+ "translate-statsf-count-registrations": "کاربران تازه",
+ "translate-statsf-count-reviews": "بازبینی‌های ترجمه",
+ "translate-statsf-count-reviewers": "بازبینی‌کنندگان",
+ "translate-statsf-language": "فهرست کدهای زبان جدا شده با کاما:",
+ "translate-statsf-group": "فهرست کدهای گروه جدا شده با کاما:",
+ "translate-statsf-submit": "پیش‌نمایش",
+ "translate-statsf-unknown-error": "خطایی ناشناخته رخ داد.",
+ "translate-statsf-error-message": "هنگام بارگیری نمودار خطایی رخ داد: $1",
+ "translate-statsf-graph-alt-text-info": "جایگزین متنی برای آمار ترجمه در جدول داده‌های زیر است.",
+ "translate-statsf-alt-text": "این جایگزینی متنی برای آمارهای ترجمه است.",
+ "translate-statsf-embed": "کدی برای جاسازی نمودار آمار ترجمه روی صفحه‌های دیگر.",
+ "translate-tag-page-desc": "ترجمهٔ صفحهٔ ویکی [[$2|$1]] از $3 ($4).",
+ "translate-tag-page-wikipage-desc": "[[$1|ترجمهٔ]] صفحهٔ ویکی [[$2]] از زبان <bdi>$3</bdi> ($4) به زبان <bdi>$5</bdi> ($6)",
+ "translate-sidebar-alltrans": "در زبان‌های دیگر",
+ "translations": "همهٔ ترجمه‌ها",
+ "translations-summary": "نام یک پیام را در زیر وارد کنید تا تمام ترجمه‌های موجود را ببینید.",
+ "translate-translations-no-message": "«$1» یک پیام قابل ترجمه نیست",
+ "translate-translations-none": "ترجمه‌ای برای «$1» موجود نیست",
+ "translate-translations-count": " {{PLURAL:$1|یک ترجمه|$1 ترجمه}} پیدا شد.",
+ "translate-translations-fieldset-title": "پیام",
+ "translate-translations-messagename": "نام:",
+ "translate-translations-project": "پروژه:",
+ "translate-translations-including-no-param": "لطفاً یک کلید پیام معتبر را برای پارامتر زیرصفحه وارد کنید",
+ "translate-translations-history-short": "ت",
+ "languagestats": "آمار زبان",
+ "languagestats-summary": "این صفحه آمار ترجمه برای همهٔ گروه‌های پیام را برای یک زبان نمایش می‌دهد.",
+ "messagegroupstats-summary": "این صفحه آمار گروه پیام را نشان می‌دهد.",
+ "languagestats-stats-for": "آمار ترجمه برای $1 ($2).",
+ "languagestats-recenttranslations": "ترجمه‌های اخیر",
+ "translate-langstats-incomplete": "قسمتی از آمار این صفحه ناقص است. لطفاً صفحه را از نو بارگذاری کنید تا آماری بیشتری دریافت کنید.",
+ "translate-langstats-expand": "گسترش",
+ "translate-langstats-collapse": "نهفتن",
+ "translate-langstats-expandall": "گسترش همه",
+ "translate-langstats-collapseall": "نهفتن همه",
+ "translate-language-code": "کد زبان",
+ "translate-language-code-field-name": "کد زبان:",
+ "translate-suppress-complete": "فرونشانی گروه‌های پیامی که تماماً ترجمه شده‌اند",
+ "translate-ls-noempty": "فرونشانی گروه‌های پیامی که هیچ ترجمه‌ای نشده‌اند",
+ "translate-language": "زبان",
+ "translate-total": "پیام‌ها",
+ "translate-untranslated": "ترجمه‌نشده",
+ "translate-percentage-complete": "پیشرفت",
+ "translate-percentage-fuzzy": "تاریخ‌گذشته",
+ "translate-percentage-proofread": "بازبینی‌شده",
+ "translate-languagestats-overall": "همه گروه‌های پیام باهم",
+ "translate-ls-submit": "نمایش آمار",
+ "translate-ls-column-group": "گروه پیام‌",
+ "translate-mgs-pagename": "آمار گروه‌ پیام",
+ "translate-mgs-fieldset": "تنظیمات نمایش",
+ "translate-mgs-group": "گروه پیام‌:",
+ "translate-mgs-nocomplete": "زبان‌هایی که ترجمه را به پایان رسانده‌اند نمایش نده",
+ "translate-mgs-noempty": "زبان‌هایی که هیچ ترجمه‌ای ندارند نمایش نده",
+ "translate-mgs-submit": "نمایش آمار",
+ "translate-mgs-column-language": "زبان",
+ "translate-mgs-totals": "همهٔ {{PLURAL:$1|زبان|زبان‌ها}} با هم",
+ "translate-mgs-invalid-group": "گروه مشخص‌شدهٔ $1 وجود ندارد.",
+ "translate-mgs-nothing": "دربارهٔ آمار درخواست‌شده چیزی برای نمایش وجود ندارد.",
+ "translate-tes-server-error": "واکشی پیشنهادهای جستجو شکست خورد",
+ "translate-tes-group-not-found": "هیج نتیجه‌ای مطابق نبود",
+ "translate-tes-type-to-search": "برای شروع جستجو‌کردن، تایپ کنید",
+ "supportedlanguages": "زبان‌های فعال",
+ "supportedlanguages-summary": "این صفحه فهرستی از تمام زبان‌های فعال در {{SITENAME}} را، به‌همراه نام مترجمان در حال کارکردن در آن زبان نمایش می‌دهد.\nویرایش‌های بیشتر مترجم که مشارکت کرده، نام مترجم را بزرگتر نمایان می‌کند.\nرنگ زیرخط نشان‌می‌دهد چگونه یک مترجم اخیراً در اینجا فعال بوده است.",
+ "supportedlanguages-colorlegend": "توضیح برای رنگ: آخرین ترجمه در $1 روز پیش.",
+ "supportedlanguages-sqlite-error": "از SQLite پشتیبانی نمی‌شود",
+ "supportedlanguages-postgres-error": "PostgreSQL پشتیبانی نمی‌شود",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|مترجم}}|مترجمان}}: $1",
+ "supportedlanguages-recenttranslations": "ترجمه‌های اخیر",
+ "supportedlanguages-count": "در مجموع $1 {{PLURAL:$1|زبان|زبان}}.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|ویرایش|ویرایش}} - آخرین ویرایش $3 {{PLURAL:$3|روز|روز}} قبل",
+ "translate-supportedlanguages-cached": "این اطلاعات $1 قبل در حافظه نهان شده بود",
+ "translate-activelanguages-invalid-code": "کد زبان \"$1\" ناشناخته است یا برای ترجمه فعال نشده است.",
+ "abusefilter-edit-builder-vars-translate-source-text": "متن مبدأ از واحد ترجمه",
+ "abusefilter-edit-builder-vars-translate-target-language": "زبان هدف برای ترجمه",
+ "translate-jssti-add": "افزودن به فهرست",
+ "managemessagegroups": "مدیریت گروه‌ پیام",
+ "translate-smg-notallowed": "شما مجاز به اجرای این اقدام نیستید.",
+ "translate-smg-nochanges": "هیچ تغییری برای پردازش وجود ندارد.",
+ "translate-smg-submit": "ارسال تغییرات برای پردازش شدن",
+ "translate-smg-submitted": "تعریف پیام به روز شده است. تغییرات در پشت صحنه در حال پردازش هستند.",
+ "translate-smg-submitted-with-failure": "روزآمد کردن {{PLURAL:$1|تعریف|تعریف‌های}} پیام برای {{PLURAL:$1|گروه|گروه‌های}} - $2 شکست خورد. $3",
+ "translate-smg-submitted-others-processing": "تعریف‌های پیام برای گروه‌های دیگر در پس‌زمینه در پردازش هستند.",
+ "translate-smg-more": "پس از ارسال این تغییرات، تغییرات بیشتری برای فرایند وجود خواهند داشت.",
+ "translate-smg-left": "محتوای پیام در ویکی",
+ "translate-smg-right": "تغییرات ورودی",
+ "translate-smg-rename-select": "انتخاب",
+ "translate-smg-rename-cancel": "لغو",
+ "translate-smg-rename-search": "در حال جستجو برای پیام منطبق...",
+ "translate-smg-rename-select-err": "لطفاً یک پیام را برای تغییر نام انتخاب کنید",
+ "translate-smg-rename-no-msg": "پیامی یافت نشد",
+ "translate-smg-rename-new": "افزودن به‌عنوان جدید...",
+ "translate-smg-rename-rename": "افزودن به‌عنوان تغییر نام از...",
+ "translate-smg-rename-dialog-title": "انتخاب تغییر نام منطبق برای $1",
+ "translate-smg-changeset-modified": "مجموعهٔ تغییرات توسط کاربر یا فرآیندی دیگر اصلاح شده بود. تغییرات شما به صورتی که بتواند تغیراتشان را باطل کند نمی تواند منتشر شود. لطفاً صفحه را برای دیدن تغییرات اخیر ببینید.",
+ "translate-smg-no-groups-in-sync": "در حال حاضر هیچ گروهی در همگام‌سازی وجود ندارد",
+ "translate-smg-strong-sync-help": "راهنما",
+ "translate-smg-groups-in-sync": "گروه‌های حاضر در همگام‌سازی",
+ "translate-smg-groups-in-sync-list": "فهرست گروه‌هایی که در حال حاضر در پس‌زمینه دارند پردازش می‌شوند:",
+ "translate-smg-groups-with-error-title": "گروه‌هایی که در طی همگام‌سازی خطاهایی دارند",
+ "translate-smg-groups-with-error-desc": "فهرست گرو‌ه‌ها و پیام‌هایشان که در طی همگام‌سازی خطاهایی دارند",
+ "translate-smg-group-with-error-summary": "$1 {{PLURAL:$1|پیام}} دارای خطا:",
+ "translate-smg-group-message-action-history": "تاریخچه",
+ "translate-smg-group-action-resolve": "علامت‌گذاری به‌عنوان حل‌شده",
+ "translate-smg-group-sync-error-warn": "این گروه یک خطا در طی همگام‌سازی داشت.\nلطفاً خطا را قبل از پرادزش‌کردن این گروه درست کنید.",
+ "translate-smg-group-message-tag-outdated": "تاریخ‌گذشته",
+ "translate-smg-group-message-tag-rename": "تغییر نام",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|برچسب|برچسب‌ها}}",
+ "translate-smg-group-message-message-content": "محتوا:",
+ "translate-smg-group-message-message-target": "هدف:",
+ "translate-smg-group-message-message-replacement": "جایگزین:",
+ "translate-smg-group-message-message-other-langs": "زبان‌های دیگر:",
+ "translate-smg-loading": "در حال بارگیری...",
+ "translate-smg-unknown-error": "خطای ناشناخته‌ای در هنگام پردازش‌کردن درخواست شما وجود داشت",
+ "translate-manage-import-diff": "پیام $1 | اقدام: $2",
+ "translate-manage-import-new": "پیام تازه $1",
+ "translate-manage-import-deleted": "پیام حذف‌شده $1",
+ "translate-manage-action-import": "درون‌ریزی",
+ "translate-manage-action-conflict": "درون‌ریزی و فازی",
+ "translate-manage-action-ignore": "نادیده گرفتن",
+ "translate-manage-action-fuzzy": "درون‌ریزی و ترجمه‌های فازی",
+ "translate-manage-action-rename-fuzzy": "تغییر نام و ترجمه‌های فازی",
+ "translate-manage-action-rename": "تغییر نام",
+ "translate-manage-action-ignore-change": "نادیده‌گرفتن تغییر ترجمه",
+ "translate-manage-nochanges": "هیچ تغییری در تعریف پیام‌های این گروه وجود ندارد.",
+ "translate-manage-nochanges-other": "هیچ تغییراتی برای این زبان وجود نداشت.\nاز پیوند زیر برای بازگشت به نمایش جزئیات گروه استفاده کنید.",
+ "translate-manage-inconsistent": "در درخواست شما تناقضی شناسایی شد.\nلطفاً آن را از جهت تغییرات بررسی کنید و دوباره تلاش کنید.\nجزئیات: $1.",
+ "translate-manage-toolong": "بیشینهٔ زمان پردازش که $1 {{PLURAL:$1|ثانیه}} است سپری شد.\nلطفاً فرم را دوباره ارسال کنید تا پردازش ادامه پیدا کند.",
+ "translate-manage-import-summary": "درون‌ریزی یک نسخهٔ جدید از منبع خارجی",
+ "translate-manage-import-ignore": "رد شدن از پیام $1.",
+ "translate-manage-import-rename-summary": "در منبع خارجی تغییر نام یافت",
+ "translate-manage-conflict-summary": "درون‌ریزی یک نسخهٔ جدید از منبع خارجی.\nلطفاً بررسی کنید.",
+ "translate-manage-submit": "اجرا",
+ "translate-manage-intro-other": "فهرستی تغییرات ترجمه در زبان $1 در پایین قرار دارد.\nلطفاً این تغییرات را بازبینی کرده و عملی که می‌خواهید برای هر به‌روزرسانی انجام دهید را انتخاب کنید.\nاگر انتخاب کنید که تغییرات را نادیده بگیرید، این عمل موقت است.",
+ "translate-manage-import-ok": "درون‌ریزی‌شد: $1",
+ "translate-manage-import-done": "درون‌ریزی تکمیل شد!",
+ "translate-manage-empty-content": "محتوا خالی است",
+ "translate-manage-key-reused": "این پیام از قبل در ویکی وجود دارد. برای استفاده مجدد ناگهانی از کلید قدیمی بررسی کنید.",
+ "translate-manage-source-message-not-found": "تعریف پیام پیدا نشد",
+ "importtranslations": "درون‌ریزی ترجمه‌ها",
+ "translate-import-from-local": "بارگذاری پرونده محلی:",
+ "translate-import-load": "بارگیری پرونده",
+ "translate-import-err-dl-failed": "ناتوان از واکشی پرونده:\n$1",
+ "translate-import-err-ul-failed": "بارگذاری پرونده شکست خورد",
+ "translate-import-err-invalid-title": "نام پروندهٔ داده شده <nowiki>$1</nowiki> نامعتبر است.",
+ "translate-import-err-no-such-file": "پرونده <nowiki>$1</nowiki> وجود ندارد یا به طور محلی بارگذاری نشده است.",
+ "translate-import-err-stale-group": "گروه پیامی که این پرونده به آن تعلق دارد وجود ندارد.",
+ "translate-import-err-no-headers": "پرونده دارای قالب مناسب Gettext برای افزونهٔ ترجمه نیست:\nشناسایی گروه پیام و زبان از سرایندهای پرونده ممکن نبود.",
+ "translate-js-support-unsaved-warning": "شما ترجمه‌های منتشرنشده دارید.",
+ "translate-gs-pos": "موقعیت",
+ "translate-gs-code": "کد",
+ "translate-gs-continent": "قاره",
+ "translate-gs-speakers": "سخنرانان",
+ "translate-gs-score": "امتیاز",
+ "translate-gs-multiple": "چندگانه",
+ "translate-gs-count": "شمارش",
+ "translate-gs-total": "مجموع",
+ "translate-gs-avgscore": "میانگین نمره",
+ "translate-documentation-language": "مستندات پیام",
+ "translate-searchprofile": "ترجمه‌ها",
+ "translate-searchprofile-tooltip": "جستجو از تمامی ترجمه‌ها",
+ "translate-searchprofile-note": "گزینه‌های بیشتر جستجو از طریق [$1 جستجوی ترجمه] در دسترس هستند.",
+ "translate-search-languagefilter": "پالایش بر اساس زبان:",
+ "translate-search-nofilter": "بدون پالایش",
+ "log-name-translationreview": "سیاهه بازبینی ترجمه",
+ "log-description-translationreview": "سیاههٔ تمام بازبینی‌های ترجمه و گروه‌های پیام",
+ "logentry-translationreview-message": "$1 ترجمهٔ $3 را {{GENDER:$2|بازبینی کرد}}",
+ "logentry-translationreview-group": "$1 وضعیت $4 ترجمه‌های $3 را از $6 به $7 {{GENDER:$2|تغییر داد}}",
+ "group-translate-sandboxed": "مترجمان تأییدنشده",
+ "group-translate-sandboxed-member": "{{GENDER:$1|مترجم تأییدنشده}}",
+ "right-translate-sandboxmanage": "مدیریت کاربران محیط آزمایشی",
+ "action-translate-sandboxmanage": "مدیریت کاربران محیط آزمایشی",
+ "right-translate-sandboxaction": "اجرای اعمالی که برای کاربران آزمایشی در فهرست سفید هستند",
+ "action-translate-sandboxaction": "اقدامات اجرایی را برای کاربران محیط آزمایشی اجازه می‌دهد",
+ "translate-workflow-state-": "(تنظیم‌نشده)",
+ "translate-workflowstatus": "وضعیت: $1",
+ "translate-workflow-set-doing": "در حال تنظیم کردن ...",
+ "translate-workflow-autocreated-summary": "ایجاد خودکار صفحه برای وضعیت گردش‌کار $1",
+ "translate-stats-workflow": "وضعیت",
+ "translate-workflowgroup-label": "وضعیت گردش‌کار",
+ "translate-workflowgroup-desc": "این گروه پیام‌ وضعیت گردش‌کار ترجمه را نشان می‌دهد.\nوضعیت‌ها در متغیر پیکربندی ‎$wgTranslateWorkflowStates تعریف شده‌اند.",
+ "translate-dynagroup-recent-label": "ترجمه‌های اخیر",
+ "translate-dynagroup-recent-desc": "این گروه پیام تمام ترجمه‌های اخیر به این زبان را نمایش می‌دهد.\nبرای کارهای بازبینی خیلی کاربرد دارد.",
+ "translate-dynagroup-additions-label": "اخیراً اضافه‌شده",
+ "translate-dynagroup-additions-desc": "این گروه پیامی، پیام‌های تازه و تغییریافته را نمایش می‌دهد.",
+ "translate-msggroupselector-projects": "گروه پیام",
+ "translate-msggroupselector-search-placeholder": "جستجوی گروه‌ها",
+ "translate-msggroupselector-search-all": "همه",
+ "translate-msggroupselector-search-recent": "اخیر",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|زیرگروه|زیرگروه}}",
+ "tux-languageselector": "ترجمه به",
+ "tux-select-target-language": "زبان هدف برای ترجمه",
+ "tux-tab-all": "همه",
+ "tux-tab-untranslated": "ترجمه‌نشده",
+ "tux-tab-outdated": "تاریخ‌گذشته",
+ "tux-tab-translated": "ترجمه‌شده",
+ "tux-tab-unproofread": "بازبینی‌نشده",
+ "tux-edit": "ویرایش",
+ "tux-status-optional": "اختیاری",
+ "tux-status-fuzzy": "تاریخ‌گذشته",
+ "tux-status-proofread": "بازبینی‌شده",
+ "tux-status-translated": "ترجمه‌شده",
+ "tux-status-saving": "در حال انتشار...",
+ "tux-status-unsaved": "منتشرنشده",
+ "tux-save-unknown-error": "خطای ناشناخته رخ داد.",
+ "tux-editor-placeholder-documentation": "افزودن مستندات ترجمه",
+ "tux-editor-placeholder-language": "ترجمۀ شما به $1",
+ "tux-editor-editsummary-placeholder": "توضیح تغییرات شما (اختیاری)",
+ "tux-editor-paste-original-button-label": "چسباندن متن مبدأ",
+ "tux-editor-discard-changes-button-label": "دور ریختن تغییرات",
+ "tux-editor-save-button-label": "انتشار ترجمه",
+ "tux-editor-skip-button-label": "پرش به بعدی",
+ "tux-editor-cancel-button-label": "لغو",
+ "tux-editor-confirm-button-label": "تأیید ترجمه",
+ "tux-editor-proofread-button-label": "علامت‌گذاری به عنوان بررسی‌شده",
+ "tux-editor-shortcut-info": "برای تأیید و انتقال به پیام بعدی «$1»، برای پرش به بعدی «$2»، برای ارائه دادن خلاصه «$4» فشار دهید و یا «$3» نگه دارید تا سایر میانبرها را ببینید.",
+ "tux-editor-edit-desc": "ویرایش مستندات",
+ "tux-editor-add-desc": "افزودن مستندات",
+ "tux-editor-suggestions-title": "پیشنهادها",
+ "tux-editor-latest-updates-title": "آخرین به‌روزرسانی‌ها",
+ "tux-editor-changes-without-summary": "$1 {{PLURAL:$1|به‌روزرسانی}} بدون خلاصه",
+ "tux-editor-all-changes": "تمامی تغییرات",
+ "tux-editor-in-other-languages": "به زبان‌های دیگر",
+ "tux-editor-need-more-help": "کمک بیشتری نیاز دارید؟",
+ "tux-editor-ask-help": "درخواست برای اطلاعات بیشتر",
+ "tux-editor-tm-match": "$1٪ مطابقت",
+ "tux-notices-more": "{{PLURAL:$1|$1 بیشتر}}",
+ "tux-notices-hide": "نهفتن",
+ "tux-editor-save-failed": "انتشار یافتن ترجمه شکست خورد: $1",
+ "tux-editor-n-uses": "$1 {{PLURAL:$1|بار}} استفاده شده است",
+ "tux-editor-message-desc-more": "نمایش بیشتر",
+ "tux-editor-message-desc-less": "نمایش کمتر",
+ "tux-editor-clear-translated": "پنهان‌سازی ترجمه‌شده",
+ "tux-editor-proofreading-mode": "بازبینی",
+ "tux-editor-translate-mode": "فهرست",
+ "tux-editor-proofreading-hide-own-translations": "پنهان‌سازی ترجمه‌های شما",
+ "tux-editor-proofreading-show-own-translations": "نمایش ترجمه‌های شما",
+ "tux-proofread-action-tooltip": "علامت‌گذاری به عنوان ترجمه‌شده",
+ "tux-proofread-edit-label": "ویرایش",
+ "tux-editor-page-mode": "صفحه",
+ "tux-editor-outdated-notice": "این ترجمه ممکن است نیازمند به‌روزرسانی باشد.",
+ "tux-editor-outdated-notice-diff-link": "نمایش تفاوت‌ها",
+ "tux-editor-doc-editor-placeholder": "مستندات پیام",
+ "tux-editor-doc-editor-save": "انتشار مستندات",
+ "tux-editor-doc-editor-cancel": "لغو",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|پیام}} بیشتر",
+ "tux-messagetable-loading-messages": "بارگیری {{PLURAL:$1|پیام|پیام‌ها}}...",
+ "tux-message-filter-placeholder": "پالایش فهرست",
+ "tux-message-filter-result": "$1 {{PLURAL:$1|نتیجه}} برای «$2» یافت شد.",
+ "tux-message-filter-advanced-button": "جستجوی پیشرفته",
+ "tux-message-filter-optional-messages-label": "پیام‌های اختیاری",
+ "tux-proofread-translated-by-self": "ترجمه‌شده توسط شما",
+ "tux-empty-list-all": "این گروه پیام خالی است",
+ "tux-empty-list-all-guide": "یک گروه پیام متفاوت برای ترجمه انتخاب کنید",
+ "tux-translate-page-no-such-group": "<strong>گروه مشخص‌شده وجود ندارد.</strong> گروه پیام دیگری را انتخاب کنید.",
+ "tux-empty-list-translated": "بدون پیام ترجمه‌شده",
+ "tux-empty-list-translated-guide": "شما می‌توانید در ترجمه‌کردن کمک کنید",
+ "tux-empty-list-translated-action": "ترجمه",
+ "tux-empty-no-messages-to-display": "پیامی برای نمایش وجود ندارد.",
+ "tux-empty-there-are-optional": "پیام‌هایی اختیاری وجود دارند که در فهرست نمایش داده نشده‌اند",
+ "tux-empty-show-optional-messages": "نمایش پیام‌های اختیاری",
+ "tux-empty-no-outdated-messages": "پیام تاریخ‌گذشته‌ای نیست",
+ "tux-empty-nothing-to-proofread": "هیچ چیزی برای بازبینی وجود ندارد",
+ "tux-empty-you-can-help-providing": "شما می‌توانید با ارائه دادن ترجمه‌های تازه کمک کنید",
+ "tux-empty-nothing-new-to-proofread": "هیچ چیز جدیدی برای بازبینی وجود ندارد",
+ "tux-empty-you-can-review-already-proofread": "می‌توانید ترجمه‌های از پیش بازبینی‌شده توسط دیگران را بازبینی کنید",
+ "tux-empty-list-other": "هیچ چیزی برای ترجمه‌کردن وجود ندارد",
+ "tux-empty-list-other-guide": "شما می‎توانید به بازبینی ترجمه‎های موجود کمک کنید",
+ "tux-empty-list-other-action": "بازبینی ترجمه‌ها",
+ "tux-empty-list-other-link": "نمایش تمام پیام‌ها",
+ "tux-editor-close-tooltip": "بستن",
+ "tux-editor-expand-tooltip": "گسترش",
+ "tux-editor-collapse-tooltip": "نهفتن",
+ "tux-editor-message-tools-show-editor": "نمایش در ویرایشگر ویکی",
+ "tux-editor-message-tools-history": "تاریخچه",
+ "tux-editor-message-tools-delete": "حذف",
+ "tux-editor-message-tools-translations": "همهٔ ترجمه‌ها",
+ "tux-editor-message-tools-linktothis": "پیوند به این پیام",
+ "tux-editor-loading": "در حال بارگیری...",
+ "tux-editor-loading-failed": "بارگیری دستیار ترجمه شکست خورد: $1",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|زبان}} بیشتر",
+ "translate-statsbar-tooltip": "$1٪ ترجمه‌شده، ٪$2 بازبینی‌شده",
+ "translate-statsbar-tooltip-with-fuzzy": "$1٪ ترجمه‌شده، ٪$2 بازبینی‌شده، ٪$3 تاریخ‌گذشته",
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|گروه|گروه}} دیگر",
+ "translate-syntax-error": "ترجمه شامل خطاهای نحوی است",
+ "tux-session-expired": "شما دیگر داخل سامانه نیستید. لطفاً در یک زبانهٔ دیگر به سامانه وارد شوید. یا این که یک نسخه از ترجمه‌های ذخیره‌نشده تهیه کنید، به سامانه وارد شوید، به این صفحه بازگردید و ترجمه‌های خود را دوباره وارد کنید.",
+ "tux-nojs": "این ابزار بدون جاوااسکریپت کار نمی‌کند. جاوااسکریپت غیرفعال است، از کار افتاده است، یا توسط این مرورگر پشتیبانی نمی‌شود.",
+ "specialpages-group-translation": "ترجمه",
+ "content-model-translate-messagebundle": "بستهٔ پیام قابل‌ترجمه",
+ "translate-messagebundle-validation-error": "بستهٔ پیام نامعتبر: $1",
+ "translate-messagebundle-error-parsing": "خطای هنگام تجزیه‌کردن JSON: $1",
+ "translate-messagebundle-error-invalid-array": "بستهٔ پیام باید یک شی JSON باشد. نوع $1 می‌گیرد",
+ "translate-messagebundle-error-key-empty": "بستهٔ پیام نباید شامل یک کلید خالی باشد",
+ "translate-messagebundle-error-key-too-long": "کلید «$1» خیلی طولانی است",
+ "translate-messagebundle-error-key-invalid-characters": "کلید «$1» شامل نویسه‌های غیرمجاز است",
+ "translate-messagebundle-error-invalid-value": "کلید \"$1\" شامل مقدار رشته‌ای نیست",
+ "translate-messagebundle-error-empty-value": "کلید «$1» مقداری ندارد",
+ "translate-messagebundle-error-metadata-type": "فراداده باید یک آرایه باشد",
+ "translate-messagebundle-error-invalid-metadata": "بخش فراداده شامل یک کلید ناشناخته است: \"$1\". کلیدهای پشتیبانی‌شده $2 هستند.",
+ "translate-messagebundle-error-invalid-sourcelanguage": "شناسهٔ زبان مبدأ «$1» پشتیبانی نمی‌شود.",
+ "translate-messagebundle-error-invalid-prioritylanguage": "{{PLURAL:$2|شناسهٔ|شناسه‌های}} زبان اولویت‌دار نامعتبر در فراداده: $1",
+ "translate-messagebundle-error-invalid-prioritylanguage-format": "قالب زبان اولویت‌دار در فراداده نامعتبر است. زبان‌های اولویت‌دار باید یک آرایه از رشته‌ها باشند.",
+ "translate-messagebundle-group-description": "پیام‌های یک بستهٔ پیام روی صفحهٔ [[$2|$1]] تعریف شده است.",
+ "log-action-filter-translationreview": "نوع عمل:",
+ "log-action-filter-translationreview-message": "بازبینی پیام‌های ترجمه فردی"
+}
diff --git a/Translate/i18n/core/fat.json b/Translate/i18n/core/fat.json
new file mode 100644
index 00000000..d9929e52
--- /dev/null
+++ b/Translate/i18n/core/fat.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ebenoffen1"
+ ]
+ },
+ "translate-documentation-language": "Asɛm ntsintsimii"
+}
diff --git a/Translate/i18n/core/ff.json b/Translate/i18n/core/ff.json
new file mode 100644
index 00000000..c9125c48
--- /dev/null
+++ b/Translate/i18n/core/ff.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ibrahima",
+ "Ibrahima Malal Sarr"
+ ]
+ },
+ "translate-documentation-language": "Famminorde ɓatakuru"
+}
diff --git a/Translate/i18n/core/fi.json b/Translate/i18n/core/fi.json
new file mode 100644
index 00000000..e814d432
--- /dev/null
+++ b/Translate/i18n/core/fi.json
@@ -0,0 +1,407 @@
+{
+ "@metadata": {
+ "authors": [
+ "01miki10",
+ "Beluga",
+ "Centerlink",
+ "Cimon Avaro",
+ "Crt",
+ "Joquliina",
+ "MITO",
+ "Mediawikitranslator",
+ "Mobe",
+ "Moottori",
+ "Nedergard",
+ "Nike",
+ "Olli",
+ "Pxos",
+ "Pyscowicz",
+ "Silvonen",
+ "Str4nd",
+ "Stryn",
+ "Usp",
+ "Veikk0.ma",
+ "VezonThunder",
+ "Vililikku",
+ "Yupik",
+ "ZeiP"
+ ]
+ },
+ "translate": "Käännä",
+ "translate-extensionname": "Käännä",
+ "translate-desc": "[[Special:Translate|Toimintosivu]] MediaWikin kääntämiseen ja muutakin.",
+ "translate-fuzzybot-desc": "Tämä on erityinen järjestelmätili jota MediaWikin [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate Translate-laajennus] käyttää käännösten ylläpitoon.\nTämä tili on osa MediaWiki-ohjelmistoa ja sitä ei omista mikään käyttäjä.",
+ "translate-taskui-export-to-file": "Vie perusmuodossa",
+ "translate-taskui-export-as-po": "Vie off-line kääntämiseen soveltuvassa muodossa",
+ "translate-taction-translate": "Käännä",
+ "translate-taction-proofread": "Oikolue",
+ "translate-taction-lstats": "Kielitilastot",
+ "translate-taction-mstats": "Viestiryhmätilastot",
+ "translate-taction-export": "Vie",
+ "translate-taction-disabled": "Tämä toiminto ei ole käytössä tässä wikissä.",
+ "translate-page-no-such-language": "Tuntematon kieli.",
+ "translate-page-no-such-group": "Tuntematon ryhmä.",
+ "translate-page-disabled": "Käännökset tälle kielelle tässä ryhmässä on estetty.\nSyy:\n\n<em>$1</em>",
+ "translate-language-disabled": "Kääntäminen tälle kielelle ei ole mahdollista.",
+ "translate-page-settings-legend": "Asetukset",
+ "translate-page-group": "Ryhmä",
+ "translate-page-language": "Kieli",
+ "translate-page-limit": "Rajoitus",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|viesti|viestiä}} sivulla",
+ "translate-submit": "Hae",
+ "translate-page-navigation-legend": "Selaus",
+ "translate-page-showing": "Viestit $1–$2; yhteensä $3.",
+ "translate-page-showing-all": "Näytetään $1 {{PLURAL:$1|viesti|viestiä}}.",
+ "translate-page-showing-none": "Ei näytettäviä viestejä.",
+ "translate-next": "Seuraava sivu",
+ "translate-prev": "Edellinen sivu",
+ "translate-page-description-legend": "Tietoja ryhmästä",
+ "translate-page-description-hasoptional": "Tässä viestiryhmässä on valinnaisia viestejä.\nValinnaiset viestit on käännettävä vain kielille, joilla on erikoisvaatimuksia kuten välilyöntien puuttuminen tai erisnimien translitterointi. $1",
+ "translate-page-description-hasoptional-open": "Näytä valinnaiset viestit.",
+ "translate-page-edit": "muokkaa",
+ "translate-optional": "(valinnainen)",
+ "translate-ignored": "(ei-käännettävä)",
+ "translate-edit-title": "Muokkaa sivua $1",
+ "translate-edit-definition": "Viestin määritelmä",
+ "translate-edit-contribute": "auta dokumentoinnissa",
+ "translate-edit-no-information": "<em>Tätä viestiä ei ole dokumentoitu.\nJos tiedät missä tai miten tätä viestiä käytetään, voit auttaa muita kääntäjiä lisäämällä kommentteja tähän viestiin.</em>",
+ "translate-edit-information": "Tietoja viestistä ($1)",
+ "translate-edit-warnings": "Varoitukset virheellisestä käännöksestä",
+ "translate-edit-tmmatch-source": "Käännöksen lähdeteksti: $1",
+ "translate-edit-tmmatch": "Vastaavuus $1%",
+ "translate-edit-nopermission": "Viestien kääntämiseen tarvitaan käännösoikeudet.",
+ "translate-edit-askpermission": "Hanki lupa",
+ "exporttranslations": "Vie käännöksiä",
+ "translate-export-form-format": "Muoto",
+ "translate-export-invalid-format": "Määritä kelvollinen muoto.",
+ "translate-export-not-supported": "Käännösten vientiä ei tueta.",
+ "translate-export-format-notsupported": "Tätä viestiryhmää ei voi viedä tässä muodossa.",
+ "translate-checks-parameters": "{{PLURAL:$2|Seuraavaa parametria|Seuraavia parametreja}} ei käytetä:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Seuraava parametri on tuntematon|Seuraavat parametrit ovat tuntemattomia}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "Pariton määrä {{PLURAL:$2|sulkeita}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Seuraava linkki on ongelmallinen|Seuraavat linkit ovat ongelmallisia}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Tätä linkkiä|$2 Näitä linkkejä}} ei ole käytetty käännöksessä:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Määritelmä käyttää <nowiki>{{PLURAL:}}</nowiki>-koodia, mutta käännös ei.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki>-komennolle annettiin {{PLURAL:$1|yksi muoto|$1 muotoa}}, mutta {{PLURAL:$2|vain yhtä muotoa|$2 muotoa}} tuetaan (ei sisällä muotoja 0= ja 1=).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki>-komennon lopussa on samoja muotoja. <nowiki>{{PLURAL:$1|lampaani|lampaani}}</nowiki> tulisi kirjoittaa <nowiki>{{PLURAL:$1|lampaani}}</nowiki>.",
+ "translate-checks-gettext-plural-missing": "Käännöksen tulee sisältää <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-unsupported": "Tämä viesti ei tue <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-count": "<nowiki>{{PLURAL:GETTEXT|}}</nowiki> vaatii täsmälleen $1 {{PLURAL:$1|monikkomuodon|monikkomuotoa}}. Nyt siinä on $2 {{PLURAL:$2|monikkomuoto|monikkomuotoa}}.",
+ "translate-checks-smartformat-plural-missing": "Käännöksen pitää käyttää monikkomuotoja muuttujalla $1.",
+ "translate-checks-smartformat-plural-unsupported": "Tämä viesti ei tue monikkomuotoja muuttujalla $1.",
+ "translate-checks-unicode-plural-missing": "Käännöksen tulee sisältää <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-unsupported": "Tämä viesti ei tue <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-invalid": "Monikkomuodot tulee antaa muodossa $1. Nyt ne ovat muodossa $2.",
+ "translate-checks-pagename": "Nimiavaruus ei ole sama kuin viestin määritelmässä",
+ "translate-checks-format": "Tämä käännös ei noudata alkuperäistä tekstiä tai sillä on virheellinen syntaksi: $1",
+ "translate-checks-escape": "{{PLURAL:$2|Seuraava escape-merkki saattaa olla tahaton|Seuraavat escape-merkit saattavat olla tahattomia}}: <strong>$1</strong> {{PLURAL:$4|Kelvollinen escape-merkki on|Kelvolliset escape-merkit ovat:}} $3.",
+ "translate-checks-parametersnotequal": "Käännöksessä pitäisi olla {{PLURAL:$2|yksi muuttuja|$2 muuttujaa}}, mutta vain {{PLURAL:$1|yksi muuttuja|$1 muuttujaa}} löydettiin.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> ei ole hyvinmuotoiltu.",
+ "translate-checks-fudforum-syntax": "Käytä merkinnän <nowiki>$1</nowiki> sijasta merkintää <nowiki>$2</nowiki> tässä hankkeessa.",
+ "translate-checks-newline-missing-start": "Käännöksen alusta puuttuu $1 {{PLURAL:$1|rivinvaihto|rivinvaihtoa}}.",
+ "translate-checks-newline-missing-end": "Käännöksen lopusta puuttuu $1 {{PLURAL:$1|rivinvaihto|rivinvaihtoa}}.",
+ "translate-checks-newline-extra-start": "Käännöksen alussa on $1 {{PLURAL:$1|ylimääräinen rivinvaihto|ylimääräistä rivinvaihtoa}}.",
+ "translate-checks-newline-extra-end": "Käännöksen lopussa on $1 {{PLURAL:$1|ylimääräinen rivinvaihto|ylimääräistä rivinvaihtoa}}.",
+ "translate-checks-value-not-present": "Käännöksen täytyy olla {{PLURAL:$1|1=|yksi seuraavista vaihtoehdoista:}} $1.",
+ "translate-pref-editassistlang": "Apukielet:",
+ "prefs-translate": "Käännösasetukset",
+ "translate-pref-editassistlang-help": "Pilkuin eroteltu lista kielikoodeista.\nViestin käännökset näillä kielillä näkyvät kääntäessäsi.\nAsetuksen oletusarvoiset kielet riippuvat kielestä, jolle olet kääntämässä.",
+ "translate-pref-editassistlang-bad": "Listassa on kelpaamaton kielikoodi:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Kääntää käännöstyökalulla",
+ "action-translate": "kääntää käännöstyökalulla",
+ "right-translate-manage": "Hallinnoida viestiryhmiä",
+ "action-translate-manage": "hallita viestiryhmiä",
+ "right-translate-import": "Tuoda muilla työkaluilla tehtyjä käännöksiä",
+ "action-translate-import": "tuoda offline-käännöksiä",
+ "right-translate-messagereview": "Hyväksyä käännöksiä",
+ "action-translate-messagereview": "tarkastella käännöksiä",
+ "right-translate-groupreview": "Muuttaa viestiryhmien tilaa",
+ "action-translate-groupreview": "muuttaa viestiryhmien tilaa",
+ "translate-rcfilters-translations": "Käännökset",
+ "translate-rcfilters-translations-only-label": "Käännökset",
+ "translate-rcfilters-translations-only-desc": "Muutokset käännettyihin sivuihin.",
+ "translate-rcfilters-translations-filter-label": "Ei käännöksiä",
+ "translate-rcfilters-translations-filter-desc": "Kaikki muutokset jotka eivät ole käännöksiä.",
+ "translate-rcfilters-translations-site-label": "Sivuston viestit",
+ "translate-rcfilters-translations-site-desc": "Muokkaukset sivuston viesteihin MediaWiki-nimiavaruudessa.",
+ "translate-rc-translation-filter": "Käännösten suodatus",
+ "translate-rc-translation-filter-no": "älä suodata",
+ "translate-rc-translation-filter-only": "näytä vain käännökset",
+ "translate-rc-translation-filter-filter": "piilota käännökset",
+ "translate-rc-translation-filter-site": "vain muutokset sivuston viesteihin",
+ "translationstats": "Käännöstilastot",
+ "translate-stats-edits": "Muokkauksia",
+ "translate-stats-users": "Kääntäjiä",
+ "translate-stats-registrations": "Rekisteröintejä",
+ "translate-stats-reviews": "Oikolukuja",
+ "translate-stats-reviewers": "Oikolukijoita",
+ "translate-statsf-intro": "Voit luoda yksinkertaisia tilastoja tällä lomakkeella. Kaikilla arvoilla on ylä- ja alarajat.",
+ "translate-statsf-options": "Kuvaajan asetukset",
+ "translate-statsf-width": "Leveys pikseleinä",
+ "translate-statsf-height": "Korkeus pikseleinä",
+ "translate-statsf-days": "Aikaväli päivissä",
+ "translate-statsf-start": "Aloituspäivämäärä",
+ "translate-statsf-scale": "Mittaustarkkuus",
+ "translate-statsf-scale-years": "vuosi",
+ "translate-statsf-scale-months": "kuukausi",
+ "translate-statsf-scale-weeks": "viikko",
+ "translate-statsf-scale-days": "päivä",
+ "translate-statsf-scale-hours": "tunti",
+ "translate-statsf-count": "Mittaussuure",
+ "translate-statsf-count-edits": "muokkaukset",
+ "translate-statsf-count-users": "aktiiviset kääntäjät",
+ "translate-statsf-count-registrations": "uudet käyttäjät",
+ "translate-statsf-count-reviews": "käännösten hyväksymiset",
+ "translate-statsf-count-reviewers": "oikolukijat",
+ "translate-statsf-language": "Pilkuin erotettu lista kielikoodeista",
+ "translate-statsf-group": "Pilkuin erotettu lista ryhmäkoodeista",
+ "translate-statsf-submit": "Esikatselu",
+ "translate-tag-page-desc": "Wikisivun [[$2|$1]] käännös kielestä $3 ($4).",
+ "translate-sidebar-alltrans": "Muilla kielillä",
+ "translations": "Kaikki käännökset",
+ "translations-summary": "Kirjoita alle sen viestin nimi, jonka kaikki käännökset haluat nähdä.",
+ "translate-translations-no-message": "”$1” ei ole käännettävä viesti",
+ "translate-translations-none": "Viestillä ”$1” ei ole käännöksiä",
+ "translate-translations-count": "Yhteensä {{PLURAL:$1|yksi käännös|$1 käännöstä}}.",
+ "translate-translations-fieldset-title": "Viesti",
+ "translate-translations-messagename": "Nimi",
+ "translate-translations-project": "Hanke",
+ "translate-translations-including-no-param": "Lisää viesti alasivuparametriksi.",
+ "translate-translations-history-short": "h",
+ "languagestats": "Kielitilastot",
+ "languagestats-summary": "Tämä sivu näyttää valitun kielen käännöstilastot kaikille viestiryhmille.",
+ "messagegroupstats-summary": "Tällä sivulla on tilastoja viestiryhmistä.",
+ "languagestats-stats-for": "Käännöstilastot kielelle $1 ($2).",
+ "languagestats-recenttranslations": "tuoreet käännökset",
+ "translate-langstats-incomplete": "Jotkut tämän sivun tilastot ovat vaillinaisia. Saat lisää tilastoja lataamalla sivun uudelleen.",
+ "translate-langstats-expand": "laajenna",
+ "translate-langstats-collapse": "tiivistä",
+ "translate-langstats-expandall": "laajenna kaikki",
+ "translate-langstats-collapseall": "tiivistä kaikki",
+ "translate-language-code": "Kielikoodi",
+ "translate-language-code-field-name": "Kielikoodi",
+ "translate-suppress-complete": "Piilota kokonaan käännetyt viestiryhmät",
+ "translate-ls-noempty": "Piilota kokonaan kääntämättömät viestiryhmät",
+ "translate-language": "Kieli",
+ "translate-total": "Viestejä",
+ "translate-untranslated": "Kääntämättömiä",
+ "translate-percentage-complete": "Käännösten kattavuus",
+ "translate-percentage-fuzzy": "Vanhentuneita",
+ "translate-percentage-proofread": "Oikoluettu",
+ "translate-languagestats-overall": "Kaikki viestiryhmät yhdessä",
+ "translate-ls-submit": "Näytä tilastot",
+ "translate-ls-column-group": "Viestiryhmä",
+ "translate-mgs-pagename": "Viestiryhmätilastot",
+ "translate-mgs-fieldset": "Näyttöasetukset",
+ "translate-mgs-group": "Viestiryhmä",
+ "translate-mgs-nocomplete": "Älä näytä kieliä, joiden käännös on valmis",
+ "translate-mgs-noempty": "Älä näytä kieliä, joiden käännöstä ei ole aloitettu",
+ "translate-mgs-submit": "Näytä tilastot",
+ "translate-mgs-column-language": "Kieli",
+ "translate-mgs-totals": "Kaikki $1 {{PLURAL:$1|kieltä}} yhdessä",
+ "translate-mgs-invalid-group": "Määritettyä ryhmää $1 ei ole.",
+ "translate-mgs-nothing": "Pyydetyille tilastoille ei löydy tuloksia.",
+ "translate-tes-type-to-search": "Kirjoita aloittaaksesi haun",
+ "supportedlanguages": "Aktiiviset kielet",
+ "supportedlanguages-summary": "Tällä sivulla luetellaan kaikki kielet, joita {{SITENAME}} tukee, sekä kaikki näillä kielillä työskentelevät kääntäjät.\nKääntäjän nimi on sitä suurempi, mitä enemmän hän on tehnyt käännöksiä.\nAlleviivauksen väri kertoo, milloin kääntäjä on viimeksi kääntänyt täällä.",
+ "supportedlanguages-colorlegend": "Värin selitys: Viimeinen käännös $1 päivää sitten.",
+ "supportedlanguages-sqlite-error": "SQLite ei ole tuettu",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Kääntäjä}}|Kääntäjät}}: $1",
+ "supportedlanguages-recenttranslations": "tuoreet käännökset",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|kieli|kieltä}} yhteensä.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|muokkaus|muokkausta}} - viimeinen muokkaus $3 {{PLURAL:$3|päivä|päivää}} sitten",
+ "translate-supportedlanguages-cached": "Nämä tiedot ovat välimuistista, joka luotiin $1 sitten.",
+ "translate-activelanguages-invalid-code": "Kielikoodia \"$1\" ei tunnistettu tai sen kääntämistä ei ole otettu käyttöön.",
+ "abusefilter-edit-builder-vars-translate-source-text": "Käännösyksikön lähdeteksti",
+ "translate-jssti-add": "Lisää listaan",
+ "managemessagegroups": "Viestiryhmien hallinta",
+ "translate-smg-notallowed": "Sinulla ei ole oikeuksia suorittaa tätä toimintoa.",
+ "translate-smg-nochanges": "Ei muutoksia käsiteltäväksi.",
+ "translate-smg-submit": "Lähetä muutokset käsiteltäviksi",
+ "translate-smg-submitted": "Viestien määritelmät on päivitetty. Muutoksia käsitellään taustalla.",
+ "translate-smg-more": "Näiden muutosten tallentamisen jälkeen on myös muita käsiteltäviä muutoksia.",
+ "translate-smg-left": "Viestin nykyinen sisältö",
+ "translate-smg-right": "Tulevat muutokset",
+ "translate-smg-rename-select": "Valitse",
+ "translate-smg-rename-cancel": "Peruuta",
+ "translate-smg-rename-no-msg": "Viestejä ei löytynyt.",
+ "translate-smg-rename-new": "Lisää uutena...",
+ "translate-smg-strong-sync-help": "Ohje",
+ "translate-smg-group-message-action-history": "Historia",
+ "translate-smg-group-action-resolve": "Merkitse ratkaistuksi",
+ "translate-smg-group-message-tag-outdated": "Vanhentunut",
+ "translate-smg-group-message-tag-rename": "Nimeä uudelleen",
+ "translate-smg-group-message-message-content": "Sisältö:",
+ "translate-smg-group-message-message-target": "Kohde:",
+ "translate-smg-group-message-message-other-langs": "Muut kielet:",
+ "translate-smg-loading": "Ladataan...",
+ "translate-manage-import-diff": "Viesti $1 | Toiminnot: $2",
+ "translate-manage-import-new": "Uusi viesti $1",
+ "translate-manage-import-deleted": "Poistettu viesti $1",
+ "translate-manage-action-import": "Tuo",
+ "translate-manage-action-conflict": "Tuo ja merkitse käännökset tarkistettavaksi",
+ "translate-manage-action-ignore": "Ohita",
+ "translate-manage-action-fuzzy": "Tuo ja merkitse käännökset tarkistettavaksi",
+ "translate-manage-action-rename-fuzzy": "Uudelleennimeä ja merkitse käännökset tarkistettavaksi",
+ "translate-manage-action-rename": "Nimeä uudelleen",
+ "translate-manage-nochanges": "Tämän ryhmän viestien määritelmiin ei ole mitään muutoksia.",
+ "translate-manage-nochanges-other": "Tähän kieleen ei ollut muutoksia.\nPalaa ryhmän yksityiskohtanäkymään alla olevalla linkillä.",
+ "translate-manage-inconsistent": "Pyynnön tiedot ovat epäjohdonmukaisia.\nTarkista muutokset ja yritä uudelleen.\nYksityiskohdat: $1.",
+ "translate-manage-toolong": "$1 {{PLURAL:$1|sekunnin}} enimmäiskäsittelyaika ylittyi.\nJatka käsittelyä lähettämällä lomake uudelleen.",
+ "translate-manage-import-summary": "Tuodaan uusi versio ulkoisesta lähteestä",
+ "translate-manage-import-ignore": "Ohitetaan viesti $1.",
+ "translate-manage-conflict-summary": "Tuodaan uusi versio ulkoisesta lähteestä.\nTarkistathan.",
+ "translate-manage-submit": "Suorita",
+ "translate-manage-intro-other": "Alla on luettelo kielen $1 käännösmuutoksista.\nTarkista muutokset ja valitse toiminto, jonka haluat tehdä jokaiselle käännökselle.\nJos valitset muutosten ohittamisen, toimintoa ei tallenneta.",
+ "translate-manage-import-ok": "Tuotu: $1",
+ "translate-manage-import-done": "Tuonti valmis.",
+ "translate-manage-source-message-not-found": "Viestin määritelmää ei löytynyt",
+ "importtranslations": "Käännösten tuonti",
+ "translate-import-from-local": "Paikallinen tiedosto",
+ "translate-import-load": "Tallenna tiedosto",
+ "translate-import-err-dl-failed": "Tiedoston noutaminen epäonnistui:\n$1",
+ "translate-import-err-ul-failed": "Tiedoston lähettäminen epäonnistui",
+ "translate-import-err-invalid-title": "Annettu tiedostonnimi <nowiki>$1</nowiki> on virheellinen.",
+ "translate-import-err-no-such-file": "Tiedostoa <nowiki>$1</nowiki> ei ole tai sitä ei ole tallennettu paikallisesti.",
+ "translate-import-err-stale-group": "Tämä tiedosto kuuluu viestiryhmään, jota ei ole olemassa.",
+ "translate-import-err-no-headers": "Tiedosto ei ole kelvollisesti muotoiltu Gettext-tiedosto Translate-laajennoksen käyttämässä muodossa:\nViestiryhmä- ja kielitietoja ei löytynyt tiedoston otsakkeesta.",
+ "translate-js-support-unsaved-warning": "Kaikkia käännöksiä ei ole julkaistu.",
+ "translate-gs-pos": "Sij.",
+ "translate-gs-code": "Koodi",
+ "translate-gs-continent": "Maanosa",
+ "translate-gs-speakers": "Puhujat",
+ "translate-gs-score": "Pisteet",
+ "translate-gs-multiple": "Useita",
+ "translate-gs-count": "Määrä",
+ "translate-gs-total": "Yhteensä",
+ "translate-gs-avgscore": "Keskim. pisteet",
+ "translate-documentation-language": "Viestin dokumentaatio",
+ "translate-searchprofile": "Käännökset",
+ "translate-searchprofile-tooltip": "Hae kaikista käännöksistä",
+ "translate-searchprofile-note": "Lisää hakuvaihtoehtoja on saatavilla sivulla [$1 translation search].",
+ "translate-search-languagefilter": "Vain kielellä",
+ "translate-search-nofilter": "Ei suodatusta",
+ "log-name-translationreview": "Arvioitujen käännösten loki",
+ "log-description-translationreview": "Kaikkien käännösten ja viestiryhmien arviointiloki.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|tarkasti}} käännöksen $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|muutti}} kohteen $3 kielen $4 käännöksen tilan tilasta $6 tilaan $7",
+ "group-translate-sandboxed": "Hyväksymättömät kääntäjät",
+ "group-translate-sandboxed-member": "{{GENDER:$1|hyväksymätön kääntäjä}}",
+ "right-translate-sandboxmanage": "Hyväksyä ja hylätä hyväksymättömiä kääntäjiä",
+ "action-translate-sandboxmanage": "hyväksiä tai hylätä hyväksymättömiä käyttäjiä",
+ "right-translate-sandboxaction": "Suorittaa toimintoja, jotka on sallittu hyväksymättömille kääntäjille",
+ "action-translate-sandboxaction": "suorittaa toimintoja, jotka on sallittu hyväksymättömille kääntäjille",
+ "translate-workflow-state-": "(ei asetettu)",
+ "translate-workflowstatus": "Tila: $1",
+ "translate-workflow-set-doing": "Asetetaan...",
+ "translate-workflow-autocreated-summary": "Sivun automaattinen luonti viestiryhmätilan $1 käännökselle",
+ "translate-stats-workflow": "Tila",
+ "translate-workflowgroup-label": "Viestiryhmätila",
+ "translate-workflowgroup-desc": "Tämä viestiryhmä sisältää viestiryhmätilojen käännökset.\nTilat määritellään asetusmuuttujalla $wgTranslationWorkflowStates.",
+ "translate-dynagroup-recent-label": "Tuoreet käännökset",
+ "translate-dynagroup-recent-desc": "Tämä viestiryhmä näyttää kaikki tuoreet käännökset.\nSoveltuu hyvin käännösten tarkastamiseen.",
+ "translate-dynagroup-additions-label": "Tuoreet lisäykset",
+ "translate-dynagroup-additions-desc": "Tämä viestiryhmä näyttää uudet ja muuttuneet viestit.",
+ "translate-msggroupselector-projects": "Viestiryhmä",
+ "translate-msggroupselector-search-placeholder": "Hae ryhmiä",
+ "translate-msggroupselector-search-all": "Kaikki",
+ "translate-msggroupselector-search-recent": "Äskettäiset",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|alaryhmä|alaryhmää}}",
+ "tux-languageselector": "Kohdekieli:",
+ "tux-select-target-language": "Kohdekieli käännöstä varten",
+ "tux-tab-all": "Kaikki",
+ "tux-tab-untranslated": "Kääntämättömät",
+ "tux-tab-outdated": "Vanhentuneet",
+ "tux-tab-translated": "Käännetyt",
+ "tux-tab-unproofread": "Tarkastamattomat",
+ "tux-edit": "Muokkaa",
+ "tux-status-optional": "Valinnainen",
+ "tux-status-fuzzy": "Vanhentunut",
+ "tux-status-proofread": "Oikoluettu",
+ "tux-status-translated": "Käännetty",
+ "tux-status-saving": "Julkaistaan...",
+ "tux-status-unsaved": "Julkaisematon",
+ "tux-save-unknown-error": "Tapahtui tuntematon virhe.",
+ "tux-editor-placeholder-documentation": "Lisää käännösohjeet",
+ "tux-editor-placeholder-language": "Käännöksesi kielellä $1",
+ "tux-editor-editsummary-placeholder": "Valinnainen yhteenveto",
+ "tux-editor-paste-original-button-label": "Liitä lähdeteksti",
+ "tux-editor-discard-changes-button-label": "Hylkää muutokset",
+ "tux-editor-save-button-label": "Julkaise käännös",
+ "tux-editor-skip-button-label": "Hyppää seuraavaan",
+ "tux-editor-cancel-button-label": "Peru",
+ "tux-editor-confirm-button-label": "Hyväksy käännös",
+ "tux-editor-proofread-button-label": "Merkitse tarkastetuksi",
+ "tux-editor-shortcut-info": "Paina ”$1” hyväksyäksesi ja siirtyäksesi seuraavaan viestiin, ”$2” ohittaaksesi, ”$4” siirtyäksesi yhteenvetoon tai ”$3” näyttääksesi muut näppäinyhdistelmät.",
+ "tux-editor-edit-desc": "Muokkaa ohjeistusta",
+ "tux-editor-add-desc": "Lisää ohjeistus",
+ "tux-editor-suggestions-title": "Ehdotukset",
+ "tux-editor-all-changes": "Kaikki muutokset",
+ "tux-editor-in-other-languages": "Muilla kielillä",
+ "tux-editor-need-more-help": "Tarvitsetko lisäapua?",
+ "tux-editor-ask-help": "Pyydä lisätietoja",
+ "tux-editor-tm-match": "Vastaavuus $1%",
+ "tux-notices-more": "{{PLURAL:$1|$1 muuta}}",
+ "tux-notices-hide": "piilota",
+ "tux-editor-save-failed": "Käännöksen julkaiseminen epäonnistui: $1",
+ "tux-editor-n-uses": "$1 {{PLURAL:$1|käyttökerta|käyttökertaa}}",
+ "tux-editor-message-desc-more": "Näytä lisää",
+ "tux-editor-message-desc-less": "Näytä vähemmän",
+ "tux-editor-clear-translated": "Piilota käännetyt",
+ "tux-editor-proofreading-mode": "Oikoluku",
+ "tux-editor-translate-mode": "Luettelo",
+ "tux-editor-proofreading-hide-own-translations": "Piilota omat käännökset",
+ "tux-editor-proofreading-show-own-translations": "Näytä omat käännökset",
+ "tux-proofread-action-tooltip": "Merkitse tarkastetuksi",
+ "tux-proofread-edit-label": "Muokkaa",
+ "tux-editor-page-mode": "Sivu",
+ "tux-editor-outdated-notice": "Tämä viesti saattaa tarvita päivittämistä.",
+ "tux-editor-outdated-notice-diff-link": "Näytä muutokset",
+ "tux-editor-doc-editor-placeholder": "Ohjeistus",
+ "tux-editor-doc-editor-save": "Julkaise ohjeistus",
+ "tux-editor-doc-editor-cancel": "Peru",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|viesti|viestiä}} lisää",
+ "tux-messagetable-loading-messages": "Ladataan {{PLURAL:$1|viestiä|viestejä}}...",
+ "tux-message-filter-placeholder": "Hae listasta",
+ "tux-message-filter-result": "{{PLURAL:$1|Yksi hakutulos|$1 hakutulosta}} haulle $2",
+ "tux-message-filter-advanced-button": "Laajennettu haku",
+ "tux-message-filter-optional-messages-label": "Valinnaiset viestit",
+ "tux-proofread-translated-by-self": "Sinun kääntämäsi",
+ "tux-empty-list-all": "Tämä viestiryhmä on tyhjä",
+ "tux-empty-list-all-guide": "Valitse toinen viestiryhmä käännettäväksi",
+ "tux-translate-page-no-such-group": "<strong>Ryhmää ei löydy.</strong> Valitse toinen viestiryhmä.",
+ "tux-empty-list-translated": "Ei käännettyjä viestejä",
+ "tux-empty-list-translated-guide": "Voit auttaa kääntämällä",
+ "tux-empty-list-translated-action": "Käännä",
+ "tux-empty-no-messages-to-display": "Ei näytettäviä viestejä.",
+ "tux-empty-there-are-optional": "Saatavilla on valinnaisia viestejä, joita ei näytetä.",
+ "tux-empty-show-optional-messages": "Näytä valinnaiset viestit",
+ "tux-empty-no-outdated-messages": "Ei päivittämistä vaativia viestejä",
+ "tux-empty-nothing-to-proofread": "Ei tarkastettavaa.",
+ "tux-empty-you-can-help-providing": "Voit auttaa tekemällä uusia käännöksiä.",
+ "tux-empty-nothing-new-to-proofread": "Ei uutta tarkastettavaa.",
+ "tux-empty-you-can-review-already-proofread": "Voit tarkastaa muiden aiemmin tarkastamia käännöksiä.",
+ "tux-empty-list-other": "Ei käännettävää",
+ "tux-empty-list-other-guide": "Voit auttaa tarkastamalla käännöksiä",
+ "tux-empty-list-other-action": "Tarkasta käännöksiä",
+ "tux-empty-list-other-link": "Näytä kaikki viestit",
+ "tux-editor-close-tooltip": "Sulje",
+ "tux-editor-expand-tooltip": "Suurenna",
+ "tux-editor-collapse-tooltip": "Pienennä",
+ "tux-editor-message-tools-show-editor": "Näytä wikimuokkaimessa",
+ "tux-editor-message-tools-history": "Historia",
+ "tux-editor-message-tools-delete": "Poista",
+ "tux-editor-message-tools-translations": "Kaikki käännökset",
+ "tux-editor-message-tools-linktothis": "Linkki tähän viestiin",
+ "tux-editor-loading": "Ladataan...",
+ "tux-editor-loading-failed": "Käännösapuvälineiden lataus epäonnistui: $1",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|kieli|kieltä}} lisää",
+ "translate-statsbar-tooltip": "$1 % käännetty, $2 % tarkastettu",
+ "translate-statsbar-tooltip-with-fuzzy": "$1 % käännetty, $2 % tarkastettu, $3 % vanhentunut",
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|muu ryhmä|muuta ryhmää}}",
+ "translate-syntax-error": "Käännös sisältää syntaksivirheitä",
+ "tux-session-expired": "Et ole enää kirjautunut sisään. Kirjaudu sisään toisessä välilehdessä. Vaihtoehtoisesti voit kopioida tallentamattomat käännökset, kirjautua sisään ja palata tälle sivulle tallentamaan käännökset uudestaan.",
+ "tux-nojs": "Tämä työkalu ei toimi ilman JavaScriptiä. JavaScript on poistettu käytöstä, se ei toimi, tai tätä selainta ei tueta.",
+ "specialpages-group-translation": "Käännös",
+ "translate-messagebundle-change-sourcelanguage": "Viestinipun lähdekieli asetettu metatietojen perusteella."
+}
diff --git a/Translate/i18n/core/fit.json b/Translate/i18n/core/fit.json
new file mode 100644
index 00000000..9882f0d0
--- /dev/null
+++ b/Translate/i18n/core/fit.json
@@ -0,0 +1,235 @@
+{
+ "@metadata": {
+ "authors": [
+ "Pyscowicz"
+ ]
+ },
+ "translate": "Käänä",
+ "translate-extensionname": "Käänä",
+ "translate-desc": "[[Special:Translate|Spesiaalisivu]] MeetiaWikin kääntämiseen ja muutakin.",
+ "translate-fuzzybot-desc": "Tämä oon erityinen systeemitili jota MeetiaWikin [https://www.mediawiki.org/wiki/Extension:Translate Translate-laajennus] käythää käänösten ylläpitoon.\nTämä tili oon osa MeetiaWiki-ohjelmistoa ja sitä ei omista mikään käyttäjä.",
+ "translate-taskui-export-to-file": "Eksporteeraa perusmuodossa",
+ "translate-taskui-export-as-po": "Eksporteeraa off-line kääntämisheen soveltuvassa muodossa",
+ "translate-taction-translate": "Käänä",
+ "translate-taction-lstats": "Kielistatistiikit",
+ "translate-taction-mstats": "Viestijoukkostatistiikit",
+ "translate-taction-export": "Eksporteeraa",
+ "translate-page-no-such-group": "Tuntematon joukko.",
+ "translate-page-disabled": "Käänökset tälle kielele tässä joukossa oon blokeerattu.\nSyy:\n\n<em>$1</em>",
+ "translate-language-disabled": "Kääntäminen täle kielele ei ole mahollista.",
+ "translate-page-settings-legend": "Inställninkit",
+ "translate-page-group": "Joukko",
+ "translate-page-limit": "Rajotus",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|viesti|viestiä}} sivula",
+ "translate-page-navigation-legend": "Navikeerinki",
+ "translate-page-showing-all": "Näytethään $1 {{PLURAL:$1|viesti|viestiä}}.",
+ "translate-next": "Seuraava sivu",
+ "translate-prev": "Eelinen sivu",
+ "translate-page-description-legend": "Tietoja joukosta",
+ "translate-page-description-hasoptional": "Tässä viestijoukossa oon valinnaisia viestejä.\nValinnaiset viestit oon käänettävä vain kielile, joila oon erikoisvaatimuksia kuten välilyöntien puuttuminen tai erisnimien translitterointi. $1",
+ "translate-page-edit": "mookkaa",
+ "translate-optional": "(vapa)",
+ "translate-edit-title": "Mookkaa \"$1\"",
+ "translate-edit-contribute": "avusta tokymentoinnissa",
+ "translate-edit-no-information": "<em>Tätä viestiä ei ole tokymentoitu.\nJos tiiät missä tai miten tätä viestiä käytethään, voit auttaa muita kääntäjiä lissäämällä kommentteja tähän viestiin.</em>",
+ "translate-edit-tmmatch-source": "Käänöksen läheteksti: $1",
+ "translate-edit-nopermission": "Viestien kääntämisheen tarvithaan käänösoikeuet.",
+ "exporttranslations": "Eksporteeraa käänöksiä",
+ "translate-export-not-supported": "Käänösten eksporteerausta ei tueta.",
+ "translate-export-format-notsupported": "Määritelty eksporteerausmuoto ei tue viestijoukkoa.",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Seuraava parametri oon tuntematon|Seuraavat parametrit ovat tuntemattomia}}:\n<strong>$1</strong>",
+ "translate-checks-links": "{{PLURAL:$2|Seuraava länkki oon ongelmallinen|Seuraavat länkit ovat ongelmallisia}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Tätä länkkiä|$2 Näitä länkkejä}} ei ole käytetty käänöksessä:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki>-komennon lopussa on samoja muotoja. <nowiki>{{PLURAL:$1|lampaani|lampaani}}</nowiki> tulisi kirjottaa <nowiki>{{PLURAL:$1|lampaani}}</nowiki>.",
+ "translate-checks-gettext-plural-missing": "Käänöksen tulee sisältää <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-count": "<nowiki>{{PLURAL:GETTEXT|}}</nowiki> vaatii täsmälleen $1 {{PLURAL:$1|monikkomuodon|monikkomuotoa}}. Nyt siinä oon $2 {{PLURAL:$2|monikkomuoto|monikkomuotoa}}.",
+ "translate-checks-smartformat-plural-missing": "Käänöksen pitää käyttää monikkomuotoja muuttujalla $1.",
+ "translate-checks-unicode-plural-missing": "Käänöksen tulee sisältää <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-invalid": "Monikkomuodot tulee antaa muodossa $1. Ny ne ovat muodossa $2.",
+ "translate-checks-pagename": "Nimityhjyys ei ole sama kuin viestin määritelmässä",
+ "translate-checks-format": "Tämä käänös ei nouata alkuperästä tekstiä tai sillä oon virhèlinen syntaksi: $1",
+ "translate-checks-parametersnotequal": "Käänöksessä pitäisi olla {{PLURAL:$2|yksi parameetteri|$2 parameetteriä}}, mutta vain {{PLURAL:$1|yksi parameetteri|$1 parameetteriä}} löyettiin.",
+ "translate-checks-fudforum-syntax": "Käytä merkinnän <nowiki>$1</nowiki> sijasta merkintää <nowiki>$2</nowiki> tässä prujektissa.",
+ "translate-checks-newline-missing-start": "Käänöksen alusta puuttuu $1 {{PLURAL:$1|rivinvaihto|rivinvaihtoa}}.",
+ "translate-checks-newline-missing-end": "Käänöksen lopusta puuttuu $1 {{PLURAL:$1|rivinvaihto|rivinvaihtoa}}.",
+ "translate-checks-newline-extra-start": "Käänöksen alussa on $1 {{PLURAL:$1|ylimääräinen rivinvaihto|ylimääräistä rivinvaihtoa}}.",
+ "translate-checks-newline-extra-end": "Käänöksen lopussa on $1 {{PLURAL:$1|ylimääräinen rivinvaihto|ylimääräistä rivinvaihtoa}}.",
+ "prefs-translate": "Käännösinställninkit",
+ "translate-pref-editassistlang-help": "Pilkuin eroteltu lista kielikooteista.\nViestin käänökset näillä kielillä näkyvät kääntäessäsi.\nInställninkien oletusarvoiset kielet riippuvat kielestä, jolle olet kääntämässä.",
+ "translate-pref-editassistlang-bad": "Listassa on kelpaamaton kielikooti:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Käänthää käänöstyöneuvolla",
+ "action-translate": "käänthää käänöstyöneuvolla",
+ "right-translate-manage": "Hallinnoida viestijoukkoja",
+ "action-translate-manage": "hallita viestijoukkoja",
+ "right-translate-import": "importeerata muilla työneuvoilla tehtyjä käänöksiä",
+ "action-translate-import": "importeerata offline-käänöksiä",
+ "right-translate-messagereview": "Hyväksyä käänöksiä",
+ "action-translate-messagereview": "etukattella käänöksiä",
+ "right-translate-groupreview": "Muuttaa viestijoukkojen tilaa",
+ "action-translate-groupreview": "muuttaa viestijoukkojen tilaa",
+ "translate-rcfilters-translations": "Käänökset",
+ "translate-rcfilters-translations-only-label": "Käänökset",
+ "translate-rcfilters-translations-only-desc": "Muutokset käänettyihin sivuihin.",
+ "translate-rcfilters-translations-filter-label": "Ei käänöksiä",
+ "translate-rcfilters-translations-filter-desc": "Kaikki muutokset jokka eivät ole käänöksiä.",
+ "translate-rcfilters-translations-site-desc": "Mookkaukset sivuston viesteihin MeetiaWiki-nimityhjyyessä.",
+ "translate-rc-translation-filter": "Käänösten suodatus",
+ "translate-rc-translation-filter-only": "näytä vain käänökset",
+ "translate-rc-translation-filter-filter": "piilota käänökset",
+ "translationstats": "Käänösstatistiikit",
+ "translate-stats-edits": "Mookkauksia",
+ "translate-statsf-intro": "Voit luoda yksinkertaisia statistiikkejä tälä lomakkeela. Kaikilla arvoilla on ylä- ja alarajat.",
+ "translate-statsf-start": "Aloitustaatumi",
+ "translate-statsf-scale-months": "kuukausia",
+ "translate-statsf-scale-weeks": "viikkoja",
+ "translate-statsf-scale-days": "päiviä",
+ "translate-statsf-scale-hours": "tiimoja",
+ "translate-statsf-count-edits": "mookkaukset",
+ "translate-statsf-count-registrations": "uuet käyttäjät",
+ "translate-statsf-count-reviews": "käänösten hyväksymisiä",
+ "translate-tag-page-desc": "Wikisivun [[$2|$1]] käänös kielestä $3 ($4).",
+ "translate-sidebar-alltrans": "Muila kielilä",
+ "translations": "Kaikki käänökset",
+ "translations-summary": "Kirjota alle sen viestin nimi, jonka kaikki käänökset halvaat nähä.",
+ "translate-translations-no-message": "”$1” ei ole käänettävä viesti",
+ "translate-translations-none": "Viestillä ”$1” ei ole käänöksiä",
+ "translate-translations-count": "Kaikkians {{PLURAL:$1|yksi käänös|$1 käänöstä}}.",
+ "translate-translations-messagename": "Nimi:",
+ "translate-translations-project": "Prujekti:",
+ "translate-translations-history-short": "h",
+ "languagestats": "Kielistatistiikit",
+ "languagestats-summary": "Tämä sivu näyttää valitun kielen käänösstatistiikit kaikile viestijoukoille.",
+ "messagegroupstats-summary": "Tällä sivula on statistiikkejä viestijoukoista.",
+ "languagestats-stats-for": "Käänösstatistiikit kielele $1 ($2).",
+ "languagestats-recenttranslations": "verekset käänökset",
+ "translate-langstats-incomplete": "Jotkut tämän sivun statistiikit ovat vaillinaisia. Saat lissää statistiikkejä lattaamalla sivun uuesti.",
+ "translate-language-code": "Kielikooti",
+ "translate-language-code-field-name": "Kielikooti:",
+ "translate-suppress-complete": "Piilota kokonaan käänetyt viestijoukot",
+ "translate-ls-noempty": "Piilota kokonaan kääntämättömät viestijoukot",
+ "translate-percentage-complete": "Käänösten kattavuus",
+ "translate-languagestats-overall": "Kaikki viestijoukot yhessä",
+ "translate-ls-submit": "Näytä statistiikit",
+ "translate-ls-column-group": "Viestijoukko",
+ "translate-mgs-pagename": "Viestijoukkostatistiikit",
+ "translate-mgs-fieldset": "Näyttöinställninkit",
+ "translate-mgs-group": "Viestijoukko:",
+ "translate-mgs-nocomplete": "Älä näytä kieliä, joiden käänös on valmis",
+ "translate-mgs-noempty": "Älä näytä kieliä, joiden käänöstä ei ole alotettu",
+ "translate-mgs-submit": "Näytä statistiikit",
+ "translate-mgs-totals": "Kaikki $1 {{PLURAL:$1|kieltä}} yhessä",
+ "translate-mgs-nothing": "Pyyetyille statistiikoille ei löydy resyltaatteja.",
+ "supportedlanguages-summary": "Tällä sivula luetelhaan kaikki kielet, joita {{SITENAME}} tukee, sekä kaikki \nnäillä kielillä työskentelevät kääntäjät.\nKääntäjän nimi oon sitä suurempi, mitä enemmän hän oon tehnyt käänöksiä.\nAlleviivauksen väri kertoo, milloin kääntäjä oon viimeksi kääntänyt täällä.",
+ "supportedlanguages-colorlegend": "Värin selitys: Viimeinen käänös $1 päivää sitten.",
+ "supportedlanguages-recenttranslations": "verekset käänökset",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|mookkaus|mookkausta}} - viimeinen mookkaus $3 {{PLURAL:$3|päivä|päivää}} sitten",
+ "abusefilter-edit-builder-vars-translate-source-text": "Käännösyksikön läheteksti",
+ "translate-jssti-add": "Lissää listaan",
+ "managemessagegroups": "Viestijoukkojen hallinta",
+ "translate-smg-submit": "Lähätä muutokset käsiteltäviksi",
+ "translate-smg-more": "Näien muutosten säästämisen jälkheen oon myös muita käsiteltäviä muutoksia.",
+ "translate-smg-left": "Viestin nykynen sisältö",
+ "translate-smg-rename-select": "Valitte",
+ "translate-smg-rename-cancel": "Lopeta",
+ "translate-smg-rename-new": "Lissää uutena...",
+ "translate-manage-import-new": "Uusi viesti $1",
+ "translate-manage-import-deleted": "Otettu poies viesti $1",
+ "translate-manage-action-import": "Importeeraa",
+ "translate-manage-action-conflict": "Importeeraa ja merkitte käänökset tarkastettavaksi",
+ "translate-manage-action-fuzzy": "Importeeraa ja merkitte käänökset tarkastettavaksi",
+ "translate-manage-action-rename-fuzzy": "Uuelleennimeä ja merkitte käänökset tarkastettavaksi",
+ "translate-manage-action-rename": "Nimeä uuesti",
+ "translate-manage-import-done": "Importeeraus valmis!",
+ "importtranslations": "Käänösten eksporteeraus",
+ "translate-import-from-local": "Paikallinen fiili",
+ "translate-import-load": "Lattaa fiili",
+ "translate-import-err-dl-failed": "Fiilin noutaminen epäonnistui:\n$1",
+ "translate-import-err-ul-failed": "Fiilin lähättäminen epäonnistui",
+ "translate-import-err-invalid-title": "Annettu fiilinimi <nowiki>$1</nowiki> oon virheellinen.",
+ "translate-import-err-no-such-file": "Fiiliä <nowiki>$1</nowiki> ei ole tai sitä ei ole säästetty paikallisesti.",
+ "translate-import-err-stale-group": "Tämä fiili kuuluu viestijoukkoon, jota ei ole olemassa.",
+ "translate-import-err-no-headers": "Fiili ei ole kelvollisesti muotoiltu Gettext-fiili Translate-laajennoksen käyttämässä muodossa:\nViestijoukko- ja kielitietoja ei löytynyt fiilin otsakkeesta.",
+ "translate-js-support-unsaved-warning": "Kaikkia käänöksiä ei ole säästetty.",
+ "translate-gs-code": "Kooti",
+ "translate-documentation-language": "käänöstokymenttasuuni",
+ "translate-searchprofile": "Käänökset",
+ "translate-searchprofile-tooltip": "Hae kaikista käänöksistä",
+ "translate-searchprofile-note": "Lissää hakuvaihtoehtoja oon saatavilla sivula [$1 translation search].",
+ "log-name-translationreview": "Arvioitujen käänösten loki",
+ "log-description-translationreview": "Kaikkien käänösten ja viestijoukkojen arviointiloki.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|tarkasti}} käänöksen $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|muutti}} kohteen $3 kielen $4 käänöksen tilan tilasta $6 tilaan $7",
+ "right-translate-sandboxaction": "Suorittaa toimintoja, jokka oon sallittu hyväksymättömille kääntäjille",
+ "action-translate-sandboxaction": "suorittaa toimintoja, jokka oon sallittu hyväksymättömille kääntäjille",
+ "translate-workflow-set-doing": "Asetethaan...",
+ "translate-workflow-autocreated-summary": "Sivun automaattinen luonti viestijoukkotilan $1 käänökselle",
+ "translate-workflowgroup-desc": "Tämä viestijoukko sisältää viestijoukkotilojen käänökset.\nTilat määritellään asetusmuuttujalla $wgTranslationWorkflowStates.",
+ "translate-dynagroup-recent-label": "Tuoreet käänökset",
+ "translate-dynagroup-recent-desc": "Tämä viestijoukko näythää kaikki verekset käänökset.\nSoveltuu hyvin käänösten tarkastamiseen.",
+ "translate-dynagroup-additions-desc": "Tämä viestijoukko näyttää uuet ja muuttuneet viestit.",
+ "translate-msggroupselector-projects": "Viestijoukko",
+ "translate-msggroupselector-search-placeholder": "Hae joukkoja",
+ "translate-msggroupselector-search-recent": "Verekset",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|alajoukko|alajoukkoa}}",
+ "tux-tab-translated": "Käänetyt",
+ "tux-edit": "Mookkaa",
+ "tux-status-optional": "Vapa",
+ "tux-status-translated": "Käänetty",
+ "tux-status-saving": "Säästetään...",
+ "tux-status-unsaved": "Säästämätön",
+ "tux-editor-paste-original-button-label": "Liitä läheteksti",
+ "tux-editor-save-button-label": "Säästä käänös",
+ "tux-editor-skip-button-label": "Hyppää seuraavhaan",
+ "tux-editor-cancel-button-label": "Lopeta",
+ "tux-editor-confirm-button-label": "Hyväksy käänös",
+ "tux-editor-proofread-button-label": "Markeeraa tarkastetuksi",
+ "tux-editor-shortcut-info": "Paina ”$1” hyväksyäksesi ja siirtyäksesi seuraavaan viestiin, ”$2” ohittaaksesi, ”$4” siirtyäksesi yhteenvethoon tai ”$3” näyttääksesi muut näppäinyhistelmät.",
+ "tux-editor-edit-desc": "Mookkaa tokymenttasuunia",
+ "tux-editor-add-desc": "Lissää tokymenttasuuni",
+ "tux-editor-suggestions-title": "Ehotukset",
+ "tux-editor-in-other-languages": "Muila kielilä",
+ "tux-editor-need-more-help": "Tarvittekko lisäapua?",
+ "tux-editor-save-failed": "Käänöksen säästäminen epäonnistui: $1",
+ "tux-editor-message-desc-more": "Näytä lissää",
+ "tux-editor-clear-translated": "Piilota käänetyt",
+ "tux-editor-translate-mode": "Lista",
+ "tux-editor-proofreading-hide-own-translations": "Piilota sinun käänökset",
+ "tux-editor-proofreading-show-own-translations": "Näytä sinun käänökset",
+ "tux-proofread-action-tooltip": "Markeeraa tarkastetuksi",
+ "tux-proofread-edit-label": "Mookkaa",
+ "tux-editor-page-mode": "Sivu",
+ "tux-editor-doc-editor-placeholder": "Viestin tokymenttasuuni",
+ "tux-editor-doc-editor-save": "Säästä tokymenttasuuni",
+ "tux-editor-doc-editor-cancel": "Lopeta",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|viesti|viestiä}} lissää",
+ "tux-messagetable-loading-messages": "Ladathaan {{PLURAL:$1|viestiä|viestejä}}...",
+ "tux-message-filter-placeholder": "Hae listasta",
+ "tux-message-filter-result": "{{PLURAL:$1|Yksi hakuresyltaatti|$1 hakuresyltaattia}} haulle $2",
+ "tux-message-filter-advanced-button": "Avanseerattu haku",
+ "tux-proofread-translated-by-self": "Sinun kääntämäsi",
+ "tux-empty-list-translated": "Ei käänettyjä viestejä",
+ "tux-empty-list-translated-guide": "Voit jelpata kääntämällä",
+ "tux-empty-list-translated-action": "Käänä",
+ "tux-empty-there-are-optional": "Saatavilla oon valinnaisia viestejä, joita ei näytetä.",
+ "tux-empty-you-can-help-providing": "Voit auttaa tekemällä uusia käänöksiä.",
+ "tux-empty-you-can-review-already-proofread": "Voit tarkastaa muitten aiemmin tarkastamia käänöksiä.",
+ "tux-empty-list-other": "Ei käänettävää",
+ "tux-empty-list-other-guide": "Voit auttaa tarkastamalla käänöksiä",
+ "tux-empty-list-other-action": "Tarkasta käänöksiä",
+ "tux-editor-close-tooltip": "Sulje",
+ "tux-editor-message-tools-show-editor": "Näytä wikimookkaimessa",
+ "tux-editor-message-tools-history": "Histuuria",
+ "tux-editor-message-tools-delete": "Ota poies",
+ "tux-editor-message-tools-translations": "Kaikki käänökset",
+ "tux-editor-message-tools-linktothis": "Länkki tähän viestiin",
+ "tux-editor-loading": "Ladathaan...",
+ "tux-editor-loading-failed": "Käänösapuvälineiden lattaus epäonnistui: $1",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|kieli|kieltä}} lissää",
+ "translate-statsbar-tooltip": "$1 % käänetty, $2 % tarkastettu",
+ "translate-statsbar-tooltip-with-fuzzy": "$1 % käänetty, $2 % tarkastettu, $3 % vanhentunut",
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|muu joukko|muuta joukkoa}}",
+ "translate-syntax-error": "Käänös sisältää syntaksivirheitä",
+ "tux-session-expired": "Et ole enää lokannu sisäle. Lokkaa sisäle toisessä välilehdessä. Vaihtoehtoisesti voit kopioida säästämättömät käänökset, lokata sisäle ja palata täle sivule säästämään käänökset uuestaan.",
+ "tux-nojs": "Tämä työneuvo ei toimi ilman JavaScriptiä. JavaScript oon poistettu käytöstä, se ei toimi, tai tätä selainta ei tueta.",
+ "specialpages-group-translation": "Käänös"
+}
diff --git a/Translate/i18n/core/fo.json b/Translate/i18n/core/fo.json
new file mode 100644
index 00000000..09ba5631
--- /dev/null
+++ b/Translate/i18n/core/fo.json
@@ -0,0 +1,269 @@
+{
+ "@metadata": {
+ "authors": [
+ "EileenSanda"
+ ]
+ },
+ "translate": "Týð",
+ "translate-desc": "[[Special:Translate|Serstøk síða]] til týðing av MediaWiki og øðrum",
+ "translate-taskui-export-as-po": "Útflyt til offline týðing",
+ "translate-taction-translate": "Týð",
+ "translate-taction-proofread": "Les rættlestur",
+ "translate-taction-lstats": "Málslig hagtøl",
+ "translate-taction-mstats": "Hagtøl fyri boðbólk",
+ "translate-taction-export": "Útflyt",
+ "translate-taction-disabled": "Henda handling er ikki virkin á hesi wiki.",
+ "translate-page-no-such-language": "Nevnda málið er ógyldugt.",
+ "translate-page-no-such-group": "Nevndi bólkur var ikki í gildi.",
+ "translate-page-disabled": "Tað ber ikki til at gera týðingar til hetta málið í hesum bólki.\nOrsøk:\n\n<em>$1</em>",
+ "translate-language-disabled": "Týðing til hetta málið er sligið frá.",
+ "translate-page-settings-legend": "Innstillingar",
+ "translate-page-group": "Bólkur",
+ "translate-page-language": "Mál",
+ "translate-page-limit": "Mark",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|boð}} per síðu",
+ "translate-submit": "Heinta",
+ "translate-page-navigation-legend": "Stýring",
+ "translate-page-showing": "Vísir boð frá $1 til $2 av tilsamans $3.",
+ "translate-page-showing-all": "Vísir $1 {{PLURAL:$1|boð}}.",
+ "translate-page-showing-none": "Ongi boð at vísa.",
+ "translate-next": "Næsta síða",
+ "translate-prev": "Fyrra síða",
+ "translate-page-description-legend": "Kunning um bólkin",
+ "translate-page-description-hasoptional": "Hesin biðbólkur inniheldur valfrí boð.\nValfrí boð eiga bert at verða týdd, um títt mál setur serlig krøv sum til dømis ikki at brúka millumrúm ella um sernøvn vera umskrivaði. $1",
+ "translate-page-description-hasoptional-open": "Vís valfrí boð.",
+ "translate-page-edit": "rætta",
+ "translate-optional": "(valfrítt)",
+ "translate-ignored": "(síggj burtur frá)",
+ "translate-edit-title": "Rætta \"$1\"",
+ "translate-edit-contribute": "verð við",
+ "translate-edit-no-information": "''Hesi boðini hava onga dokumentasjón.''\n''Um tú veitst hvar ella hvussu hesi boðini verða nýtt, so kanst tú hjálpa øðrum týðarum við at viðleggja dokumentasjón til hesi boðini.''",
+ "translate-edit-information": "Kunning um boð ($1)",
+ "translate-edit-warnings": "Ávaring um ófullfíggjaðar týðingar",
+ "translate-edit-tmmatch-source": "Keldutekstur til týðingar: $1",
+ "translate-edit-tmmatch": "$1% samsvar",
+ "translate-edit-nopermission": "Tú skalt hava loyvi til at týða boð.",
+ "translate-edit-askpermission": "Bið um loyvi",
+ "translate-checks-parameters": "Fylgjandi {{PLURAL:$2|parametur er|parametur eru}} ikki brúkt:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "Fylgjandi {{PLURAL:$2|parametur er|parametur eru}} ókend:\n<strong>$1</strong>",
+ "translate-checks-balance": "Tað er ólíka mongd av {{PLURAL:$2|klombru|klombrum}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "Fylgjandi {{PLURAL:$2|leinkja er problematisk|$2 leinkjur eru problematiskar}} :\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "Fylgjandi {{PLURAL:$2|leinkja manglar|$2 leinkjur mangla}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Upprunateksturin nýtir <nowiki>{{PLURAL:}}</nowiki> meðan týðingin ikki ger tað.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> fingu {{PLURAL:$1|ein form|$1 formar}} men {{PLURAL:$2|bert ein formur verður|$2 formar verða}} stuðlaðir (0= og 1= formar ikki íroknaðir).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> hevur dupultan form í endanum. <nowiki>{{PLURAL:$1|mál|mál}}</nowiki> eigur at skrivast sum <nowiki>{{PLURAL:$1|mál}}</nowiki>.",
+ "translate-checks-pagename": "Navnarúmið er annarleiðis enn tað upprunaliga",
+ "translate-checks-format": "Henda týðing fylgir ikki tí upprunaliga ella hevur ógyldugan syntaks: $1",
+ "translate-checks-parametersnotequal": "Tal av parametrum er {{PLURAL:$1|$1}}; eigur at vera {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> er skeivt skrivað.",
+ "translate-checks-fudforum-syntax": "Nýt <nowiki>$1</nowiki> ístaðin fyri <nowiki>$2</nowiki> í hesi verkætlanini.",
+ "translate-pref-editassistlang": "Stuðlandi mál:",
+ "prefs-translate": "Møguleikar fyri týðing",
+ "translate-pref-editassistlang-help": "Listi við málkotum atskilt við komma.\nTýðing av einum boði í hesum málum vera víst, meðan tú týðir.\nStandardlistin yvir mál avhengur av tínum máli.",
+ "translate-pref-editassistlang-bad": "Ógyldug málkota í listanum:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Rætta við at nýta týðingarmarkamótið",
+ "right-translate-manage": "Stýr boðbólkum",
+ "action-translate-manage": "stýr boðbólkum",
+ "right-translate-import": "Innflyt offline týðingar",
+ "action-translate-import": "innflyt offline týðingar",
+ "right-translate-messagereview": "Rættles týðingar",
+ "translate-rc-translation-filter": "Filtrera týðingar:",
+ "translate-rc-translation-filter-no": "Ger onki",
+ "translate-rc-translation-filter-only": "Vís bert týðingar",
+ "translate-rc-translation-filter-filter": "Vís ikki týðingar",
+ "translationstats": "Týðingarhagtøl",
+ "translate-stats-edits": "Rættingar",
+ "translate-stats-users": "Týðarar",
+ "translate-stats-registrations": "Skrásetingar",
+ "translate-stats-reviews": "Rættlesingar",
+ "translate-stats-reviewers": "Rættlesarar",
+ "translate-statsf-intro": "Tú kanst gera einføld hagtøl við hesum formularinum.\nØll virði hava ovaru og niðaru mørk.",
+ "translate-statsf-width": "Breidd í pixels:",
+ "translate-statsf-height": "Hædd í pixels:",
+ "translate-statsf-days": "Tíðarskeið í døgum:",
+ "translate-statsf-start": "Byrjunardagur:",
+ "translate-statsf-scale": "Tíðarupploysn:",
+ "translate-statsf-scale-months": "Mánaðir",
+ "translate-statsf-scale-weeks": "Vikur",
+ "translate-statsf-scale-days": "Dagar",
+ "translate-statsf-scale-hours": "Tímar",
+ "translate-statsf-count": "Máting:",
+ "translate-statsf-count-edits": "Tal av rættingum",
+ "translate-statsf-count-users": "Virknir týðarar",
+ "translate-statsf-count-registrations": "Nýggir brúkarar",
+ "translate-statsf-count-reviewers": "Rættlesarar",
+ "translate-statsf-language": "Komma-atskildur listi yvir málsligar kotur:",
+ "translate-statsf-group": "Komma-sundurskildur listi yvir bólkakotur:",
+ "translate-statsf-submit": "Forskoðan",
+ "translate-tag-page-desc": "Týðing av wiki síðuni [[$2|$1]].",
+ "translate-sidebar-alltrans": "Á øðrum málum",
+ "translations": "Allar týðingar",
+ "translations-summary": "Skriva navnið á einum boðum niðanfyri fyri at vísa allar týðingar ið eru tøkar.",
+ "translate-translations-no-message": "\"$1\" er ikki eitt boð ið kann týðast",
+ "translate-translations-none": "Tað eru ongar týðingar av \"$1\"",
+ "translate-translations-count": "Fann {{PLURAL:$1|eina týðing|$1 týðingar}}.",
+ "translate-translations-fieldset-title": "Boð",
+ "translate-translations-messagename": "Navn:",
+ "translate-translations-project": "Verkætlan:",
+ "translate-translations-history-short": "s",
+ "languagestats": "Málslig hagtøl",
+ "languagestats-summary": "Henda síðan vísir týðingarhagtøl fyri allir boðbólkar fyri eitt mál.",
+ "languagestats-stats-for": "Týðingarhagtøl fyri $1 ($2).",
+ "languagestats-recenttranslations": "seinastu týðingar",
+ "translate-langstats-incomplete": "Nøkur hagtøl á hesi síðu eru ófullfíggjaði. Vinarliga uppfríska síðuna fyri at fáa fleiri hagtøl.",
+ "translate-langstats-expand": "víðka",
+ "translate-langstats-collapse": "falda saman",
+ "translate-langstats-expandall": "vís alt",
+ "translate-langstats-collapseall": "legg alt saman",
+ "translate-language-code": "Málkota",
+ "translate-language-code-field-name": "Málkota:",
+ "translate-suppress-complete": "Vís ikki boðbólkar sum eru fullkomiliga týddir",
+ "translate-ls-noempty": "Vís ikki boðbólkar sum als ikki eru týddir",
+ "translate-language": "Mál",
+ "translate-total": "Boð",
+ "translate-untranslated": "Ikki týtt",
+ "translate-percentage-complete": "Fullført",
+ "translate-percentage-fuzzy": "Foroldað",
+ "translate-languagestats-overall": "Allir boðbólkar tilsamans",
+ "translate-ls-submit": "Vís hagtøl",
+ "translate-ls-column-group": "Boðbólkur",
+ "translate-mgs-pagename": "Hagtøl fyri boðbólk",
+ "translate-mgs-fieldset": "Innstillingar fyri vísingar",
+ "translate-mgs-group": "Boðbólkur:",
+ "translate-mgs-nocomplete": "Vís ikki mál sum hava fullført týðingarnar",
+ "translate-mgs-noempty": "Vís ikki mál ið als ongar týðingar hava",
+ "translate-mgs-submit": "Vís hagtøl",
+ "translate-mgs-column-language": "Mál",
+ "translate-mgs-totals": "Øll mál tilsamans",
+ "translate-mgs-invalid-group": "Nevndi bólkurin $1 er ikki til.",
+ "translate-mgs-nothing": "Onki at vísa fyri umbidnu hagtøl.",
+ "supportedlanguages": "Stuðlaði mál",
+ "supportedlanguages-summary": "Henda síðan vísir ein lista yvir øll mál ið verða stuðlaði av {{SITENAME}},\nsaman við nøvnunum á týðarum, sum arbeiða við tí málinum.\nNavnið á einum týðara sær størri út, jú fleiri rættingar týðarin hevur gjørt.\nLiturin á linjunum undir nøvnunum vísir hvussu nýliga ein týðari hevur verið aktivur her.",
+ "supportedlanguages-colorlegend": "Frágreiðing um litin: Seinasta týðing var fyri $1 døgum síðan.",
+ "supportedlanguages-translators": "{{PLURAL:$2|Týðari|Týðarar}}: $1",
+ "supportedlanguages-recenttranslations": "seinastu týðingar",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|mál}} tilsamans.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|rætting|rættingar}} - seinasta rætting var fyri $3 {{PLURAL:$3|dagur|dagar}} síðan",
+ "translate-jssti-add": "Legg til listan",
+ "managemessagegroups": "Stýring av boðbólkum",
+ "translate-smg-notallowed": "Tú hevur ikki loyvi til at útføra hesa handling.",
+ "translate-smg-nochanges": "Tað eru ongar broytingar at arbeiða við.",
+ "translate-smg-submit": "Send broytingarnar inn til viðgerðar",
+ "translate-smg-left": "Boðsinnihald í wiki",
+ "translate-smg-right": "Innkomnar broytingar",
+ "translate-manage-import-diff": "Boð $1 | Handlingar: $2",
+ "translate-manage-import-new": "Nýggj boð $1",
+ "translate-manage-import-deleted": "Slettað boð $1",
+ "translate-manage-action-import": "Innflyt",
+ "translate-manage-action-conflict": "Innflyt og merk sum avoldað",
+ "translate-manage-action-ignore": "Síggj burtur frá",
+ "translate-manage-action-fuzzy": "Innflyt og markera sum týðingar sum avoldaðar",
+ "translate-manage-submit": "Gjøgnumfør",
+ "importtranslations": "Innflyt týðingar",
+ "translate-import-err-dl-failed": "Tað var ógjørligt at heinta fíluna:\n$1",
+ "translate-import-err-invalid-title": "Fílunavnið <nowiki>$1</nowiki> var ógyldugt.",
+ "translate-import-err-no-such-file": "Fílan <nowiki>$1</nowiki> er ikki til ella er ikki løgd út lokalt.",
+ "translate-import-err-stale-group": "Boðbólkurin sum henda fílan hoyrir til er ikki til.",
+ "translate-js-support-unsaved-warning": "Tú hevur ikki-goymdar týðingar.",
+ "translate-gs-code": "Kota",
+ "translate-gs-continent": "Kontinent",
+ "translate-gs-speakers": "Talandi",
+ "translate-gs-score": "Stig",
+ "translate-gs-multiple": "Fleiri",
+ "translate-gs-count": "Tal",
+ "translate-gs-total": "Tilsamans",
+ "translate-gs-avgscore": "Stig í meðal",
+ "translate-documentation-language": "Vegleiðing til týðing",
+ "translate-searchprofile": "Týðingar",
+ "translate-searchprofile-tooltip": "Leita í øllum týðingum",
+ "translate-search-languagefilter": "Filtrera eftir máli:",
+ "translate-search-nofilter": "Ongin filtrering",
+ "log-name-translationreview": "Loggur fyri týðingarrættlestur",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|rættlæs}} týðingina $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|broytti}} status fyri $4 týðingar hjá $3 frá $6 til $7",
+ "group-translate-sandboxed": "Ikki-góðkendir týðarar",
+ "group-translate-sandboxed-member": "{{GENDER:$1|ikki-góðkendur týðari}}",
+ "translate-dynagroup-recent-label": "Seinastu týðingar",
+ "translate-dynagroup-recent-desc": "Hesin boðbólkur vísir allar tær seinastu týðingarnar til hetta málið. Mest týðandi hjá teimum sum arbeiða við rættlestri.",
+ "translate-dynagroup-additions-desc": "Hesin boðbólkur vísir nýggj og broytt boð.",
+ "translate-msggroupselector-projects": "Boðbólkur",
+ "translate-msggroupselector-search-placeholder": "Leita eftir bólkum",
+ "translate-msggroupselector-search-all": "Alt",
+ "translate-msggroupselector-search-recent": "Seinastu",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|undirbólkur|undirbólkar}}",
+ "tux-languageselector": "Ger týðingar til",
+ "tux-tab-all": "Alt",
+ "tux-tab-untranslated": "Ikki týtt",
+ "tux-tab-outdated": "Avoldað",
+ "tux-tab-translated": "Týtt",
+ "tux-tab-unproofread": "Ikki rættlisið",
+ "tux-edit": "Rætta",
+ "tux-status-optional": "Valfrítt",
+ "tux-status-fuzzy": "Avoldað",
+ "tux-status-proofread": "Rættlisið",
+ "tux-status-translated": "Týtt",
+ "tux-status-saving": "Goymir...",
+ "tux-status-unsaved": "Ikki goymt",
+ "tux-editor-paste-original-button-label": "Innset keldutekstin",
+ "tux-editor-discard-changes-button-label": "Tak burtur broytingar",
+ "tux-editor-save-button-label": "Goym týðingar",
+ "tux-editor-skip-button-label": "Loyp til næsta",
+ "tux-editor-cancel-button-label": "Angra",
+ "tux-editor-confirm-button-label": "Vátta týðing",
+ "tux-editor-shortcut-info": "Trýst á \"$1\" fyri at goyma ella \"$2\" fyri at loypa til næstu boð",
+ "tux-editor-edit-desc": "Rætta dokumentasjón",
+ "tux-editor-add-desc": "Innset dokumentasjón",
+ "tux-editor-suggestions-title": "Uppskot",
+ "tux-editor-in-other-languages": "Á øðrum málum",
+ "tux-editor-need-more-help": "Tørvar tær meira hjálp?",
+ "tux-editor-ask-help": "Bið um meira kunning",
+ "tux-editor-tm-match": "$1% samanfall",
+ "tux-notices-more": "{{PLURAL:$1|$1 meira}}",
+ "tux-notices-hide": "fjal",
+ "tux-editor-n-uses": "brúkt $1 {{PLURAL:$1|ferð|ferðir}}",
+ "tux-editor-message-desc-more": "Vís meira",
+ "tux-editor-message-desc-less": "Vís minni",
+ "tux-editor-clear-translated": "Fjal tað sum er týtt",
+ "tux-editor-translate-mode": "Listi",
+ "tux-editor-proofreading-hide-own-translations": "Fjal tínar týðingar",
+ "tux-editor-proofreading-show-own-translations": "Vís tínar týðingar",
+ "tux-proofread-action-tooltip": "Merk sum rættlisið",
+ "tux-proofread-edit-label": "Rætta",
+ "tux-editor-page-mode": "Síða",
+ "tux-editor-outdated-notice": "Henda týðing hevur møguliga tørv á dagføring.",
+ "tux-editor-outdated-notice-diff-link": "Vís munir",
+ "tux-editor-doc-editor-cancel": "Angra",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|boð}} afturat",
+ "tux-messagetable-loading-messages": "Innlesur {{PLURAL:$1|boð}}...",
+ "tux-message-filter-result": "Fann $1 {{PLURAL:$1|úrslit}} fyri \"$2\"",
+ "tux-message-filter-optional-messages-label": "Valfrí boð",
+ "tux-proofread-translated-by-self": "Týtt av tær",
+ "tux-empty-list-all": "Hesin boðbólkur er tómur",
+ "tux-empty-list-all-guide": "Vel ein annan boðbólk at týða",
+ "tux-translate-page-no-such-group": "'''Nevndi bólkur er ikki til.''' Vel ein annan boðbólk.",
+ "tux-empty-list-translated": "Ongi týdd boð",
+ "tux-empty-list-translated-guide": "Tú kanst hjálpa við at týða",
+ "tux-empty-list-translated-action": "Týð",
+ "tux-empty-no-messages-to-display": "Ongi boð at vísa.",
+ "tux-empty-there-are-optional": "Tað eru valfrí boð sum ikki eru víst á listanum",
+ "tux-empty-show-optional-messages": "Vís valfrí boð",
+ "tux-empty-no-outdated-messages": "Ongi avoldaði boð",
+ "tux-empty-nothing-to-proofread": "Onki at rættlesa",
+ "tux-empty-you-can-help-providing": "Tú kanst hjálpa við at gera nýggjar týðingar",
+ "tux-empty-nothing-new-to-proofread": "Onki nýtt at rættlesa",
+ "tux-empty-you-can-review-already-proofread": "Tú kanst rættlesa týðingar sum longu er rættlisnar av øðrum.",
+ "tux-empty-list-other": "Onki at týða",
+ "tux-empty-list-other-guide": "Tú kanst hjálpa við at rættlesa verandi týðingar",
+ "tux-empty-list-other-action": "Rættles týðingar",
+ "tux-empty-list-other-link": "Vís øll boð",
+ "tux-editor-close-tooltip": "Lat aftur",
+ "tux-editor-expand-tooltip": "Víðka",
+ "tux-editor-collapse-tooltip": "Falda saman",
+ "tux-editor-message-tools-history": "Søga",
+ "tux-editor-message-tools-translations": "Allar týðingar",
+ "tux-editor-loading": "Innlesur...",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|mál}} afturat",
+ "translate-statsbar-tooltip": "$1% týtt, $2% rættlisið",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% týtt, $2% rættlisið, $3% avoldað",
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|bólkur|bólkar}} afturat"
+}
diff --git a/Translate/i18n/core/fon.json b/Translate/i18n/core/fon.json
new file mode 100644
index 00000000..59429ebf
--- /dev/null
+++ b/Translate/i18n/core/fon.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mahuton"
+ ]
+ },
+ "translate-documentation-language": "Sɛ́n é ná xwedó bo ná do nɔ́ bló tinmɛ lɛ é"
+}
diff --git a/Translate/i18n/core/fr.json b/Translate/i18n/core/fr.json
new file mode 100644
index 00000000..c9b679f1
--- /dev/null
+++ b/Translate/i18n/core/fr.json
@@ -0,0 +1,487 @@
+{
+ "@metadata": {
+ "authors": [
+ "Automatik",
+ "Boniface",
+ "Brunoperel",
+ "ChrisPtDe",
+ "Cquoi",
+ "Crochet.david",
+ "Dereckson",
+ "Dr Brains",
+ "DreZhsh",
+ "Epok",
+ "Florian COLLIN",
+ "Gomoko",
+ "Grondin",
+ "Guillom",
+ "Hello71",
+ "IAlex",
+ "Jean-Frédéric",
+ "Linedwell",
+ "Litlok",
+ "Louperivois",
+ "Ltrlg",
+ "McDutchie",
+ "Metroitendo",
+ "Orikrin1998",
+ "Pamputt",
+ "Peter17",
+ "PieRRoMaN",
+ "Pols12",
+ "Seb35",
+ "Sherbrooke",
+ "Shirayuki",
+ "Sumone10154",
+ "Thibaut120094",
+ "Tititou36",
+ "Urhixidur",
+ "Verdy p",
+ "Wladek92",
+ "Wyz",
+ "Yasten",
+ "Yumeki",
+ "Zcqsc06",
+ "Zetud"
+ ]
+ },
+ "translate": "Traduire",
+ "translate-extensionname": "Traduire",
+ "translate-desc": "[[Special:Translate|Page spéciale]] pour traduire MediaWiki et au-delà",
+ "translate-fuzzybot-desc": "Ceci un compte système spécial utilisé par l’[https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate extension Translate] de MediaWiki et nécessaire à la maintenance des traductions.\nCe compte fait partie du logiciel MediaWiki et n’appartient à aucun utilisateur.",
+ "translate-taskui-export-to-file": "Exporter au format natif",
+ "translate-taskui-export-as-po": "Exporter pour une traduction hors-ligne",
+ "translate-taskui-export-as-csv": "Exporter au format CSV",
+ "translate-export-csv-message-title": "Titre du message de traduction",
+ "translate-export-csv-definition": "Définition du message",
+ "translate-taction-translate": "Traduire",
+ "translate-taction-proofread": "Relecture",
+ "translate-taction-lstats": "Statistiques de langue",
+ "translate-taction-mstats": "Statistiques du groupe de messages",
+ "translate-taction-export": "Exporter",
+ "translate-taction-disabled": "Cette action est désactivée sur ce wiki.",
+ "translate-page-no-such-language": "Le code langue indiqué est incorrect.",
+ "translate-page-no-such-group": "Le groupe spécifié est incorrect.",
+ "translate-page-disabled": "Les traductions dans cette langue ont été désactivées pour ce groupe.\nMotif :\n\n<em>$1</em>",
+ "translate-language-disabled": "La traduction dans cette langue est désactivée.",
+ "translate-page-settings-legend": "Configuration",
+ "translate-page-group": "Groupe",
+ "translate-page-language": "Langue",
+ "translate-page-limit": "Limite",
+ "translate-page-limit-option": "$1 message{{PLURAL:$1||s}} par page",
+ "translate-submit": "Lister",
+ "translate-page-navigation-legend": "Navigation",
+ "translate-page-showing": "Visualisation des messages de $1 à $2 sur $3.",
+ "translate-page-showing-all": "Visualisation de $1 message{{PLURAL:$1||s}}",
+ "translate-page-showing-none": "Aucun message à visualiser.",
+ "translate-page-paging-links": "<nowiki>[</nowiki>$1<nowiki>]</nowiki> <nowiki>[</nowiki>$2<nowiki>]</nowiki>",
+ "translate-next": "Page suivante",
+ "translate-prev": "Page précédente",
+ "translate-page-description-legend": "Informations à propos du groupe",
+ "translate-page-description-hasoptional": "Ce groupe de messages contient des messages facultatifs.\nLes messages facultatifs ne devraient être traduits que quand votre langue a des exigences particulières comme ne pas utiliser d’espaces ou translittérer ou accorder les noms propres. $1",
+ "translate-page-description-hasoptional-open": "Afficher les messages facultatifs.",
+ "translate-page-edit": "modifier",
+ "translate-optional": "(facultatif)",
+ "translate-ignored": "(ignoré)",
+ "translate-edit-title": "Modifier « $1 »",
+ "translate-edit-definition": "Définition du message",
+ "translate-edit-contribute": "contribuer",
+ "translate-edit-no-information": "<em>Ce message n’est pas documenté.\nSi vous savez où ou comment il est utilisé, vous pouvez aider les autres traducteurs en créant sa documentation.</em>",
+ "translate-edit-information": "Informations concernant le message ($1)",
+ "translate-edit-warnings": "Avertissements sur les traductions incomplètes",
+ "translate-edit-tmmatch-source": "Texte source de la traduction : $1",
+ "translate-edit-tmmatch": "$1 % de correspondance",
+ "translate-edit-nopermission": "Vous devez obtenir les droits de traduction pour traduire des messages.",
+ "translate-edit-askpermission": "Obtenir la permission",
+ "exporttranslations": "Exporter des traductions",
+ "translate-export-form-format": "Format",
+ "translate-export-invalid-format": "Veuillez fournir un format valide.",
+ "translate-export-not-supported": "L’exportation des traductions n’est pas prise en charge.",
+ "translate-export-format-notsupported": "Le format d’exportation spécifié n’est pas pris en charge par le groupe de messages.",
+ "translate-export-group-too-large": "Le groupe de message choisi est trop gros. Choisir un groupe de message qui a moins de $1 {{PLURAL:$1|message|messages}} ou contacter l'administrateur de traduction pour avoir son conseil.",
+ "translate-checks-parameters": "{{PLURAL:$2|Le paramètre suivant n’est pas utilisé|Les paramètres suivants ne sont pas utilisés}} :\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Le paramètre suivant est inconnu|Les paramètres suivants sont inconnus}} :\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-balance": "Il y a un nombre impair de parenthèse{{PLURAL:$2||s}} :\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Le lien suivant pose|Les $2 liens suivants posent}} problème :\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Le lien suivant est manquant|Les $2 liens suivants sont manquants}} :\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "La définition utilise <nowiki>{{PLURAL:}}</nowiki> mais pas sa traduction.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> a reçu {{PLURAL:$1|une forme|$1 formes}} mais {{PLURAL:$2|une seule est prise|seules $2 sont prises}} en charge (hors les formes 0= et 1=).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> a des formes dupliquées en fin de liste. Par exemple, <nowiki>{{PLURAL:$1|sheep|sheep}}</nowiki> devrait être écrit ainsi : <nowiki>{{PLURAL:$1|sheep}}</nowiki>.",
+ "translate-checks-gettext-plural-missing": "Cette traduction doit contenir <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-unsupported": "Ce message ne prend pas en charge <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-count": "<nowiki>{{PLURAL:GETTEXT|}}</nowiki> accepte exactement $1 forme{{PLURAL:$1||s}} de nombre grammatical. Actuellement, $2 forme{{PLURAL:$1||s}} ont été données.",
+ "translate-checks-smartformat-plural-missing": "Cette traduction doit marquer le pluriel en fonction de la variable $1.",
+ "translate-checks-smartformat-plural-unsupported": "Ce message ne prend pas en charge le marquage du pluriel en fonction de la variable $1.",
+ "translate-checks-smartformat-plural-count": "Nombre incorrect de formes en fonction du nombre dans <strong>$3</strong>. Il devrait y avoir {{PLURAL:$1|une seule forme indiquée|$1 formes indiquées}}. Actuellement $2 {{PLURAL:$2|une seule forme est indiquée|$2 formes sont indiquées}}.",
+ "translate-checks-unicode-plural-missing": "Cette traduction doit contenir <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-unsupported": "Ce message ne prend pas en charge <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-invalid": "Les formes plurielles doivent être définies comme $1. Cette traduction contient $2.",
+ "translate-checks-pagename": "Espace de noms modifié depuis la définition",
+ "translate-checks-format": "Cette traduction ne suit pas la définition ou a une syntaxe incorrecte : $1",
+ "translate-checks-escape": "{{PLURAL:$2|Le caractère d’échappement suivant peut être accidentel|Les caractères d’échappement suivants peuvent être accidentels}} : <strong>$1</strong>. {{PLURAL:$4|Un caractère d’échappement valide est|Les caractères d’échappement valides sont :}} $3.",
+ "translate-checks-parametersnotequal": "Le nombre de paramètres est {{PLURAL:$1|$1}} ; ce devrait être {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> est mal formé.",
+ "translate-checks-fudforum-syntax": "Utiliser <nowiki>$1</nowiki> au lieu de <nowiki>$2</nowiki> dans ce projet.",
+ "translate-checks-newline-missing-start": "Il manque $1 caractère{{PLURAL:$1||s}} de saut de ligne au début de la traduction.",
+ "translate-checks-newline-missing-end": "Il manque $1 caractère{{PLURAL:$1||s }} de saut de ligne à la fin de la traduction.",
+ "translate-checks-newline-extra-start": "Il y a $1 caractère{{PLURAL:$1||s}} de saut de ligne en trop au début de la traduction.",
+ "translate-checks-newline-extra-end": "Il y a $1 caractère{{PLURAL:$1||s}} de saut de ligne en trop à la fin de la traduction.",
+ "translate-checks-value-not-present": "La traduction doit être égale à {{PLURAL:$1|1=|l’une des valeurs suivantes :}} $1.",
+ "translate-checks-replacement": "Utiliser $2 au lieu de $1.",
+ "translate-checks-empty": "Une traduction sans contenu ou avec seulement des espaces n’est pas autorisée.",
+ "translate-pref-editassistlang": "Langues d’assistance :",
+ "prefs-translate": "Options de traduction",
+ "translate-pref-editassistlang-help": "Liste de codes de langues séparés par une virgule.\nLa traduction d’un message dans ces langues est affiché quand vous êtes en train de le traduire.\nLa liste par défaut des langues varie en fonction de votre langue.",
+ "translate-pref-editassistlang-bad": "Code langue non valide dans la liste :\n<nowiki>$1</nowiki>.",
+ "right-translate": "Modifier avec l’interface de traduction",
+ "action-translate": "modifier en utilisant l’interface de traduction",
+ "right-translate-manage": "Gérer les groupes de message",
+ "action-translate-manage": "gérer les groupes de messages",
+ "right-translate-import": "Importer les traductions hors ligne",
+ "action-translate-import": "importer les traductions hors-ligne",
+ "right-translate-messagereview": "Relire les traductions",
+ "action-translate-messagereview": "relire les traductions",
+ "right-translate-groupreview": "Modifier l’état de flux de travail des groupes de messages",
+ "action-translate-groupreview": "modifier l’état du flux de travail pour les groupes de messages",
+ "translate-rcfilters-translations": "Traductions",
+ "translate-rcfilters-translations-only-label": "Traductions",
+ "translate-rcfilters-translations-only-desc": "Modifications apportées aux pages traduites.",
+ "translate-rcfilters-translations-filter-label": "Pages hors traductions",
+ "translate-rcfilters-translations-filter-desc": "Toutes les modifications qui ne sont pas des traductions.",
+ "translate-rcfilters-translations-site-label": "Messages système",
+ "translate-rcfilters-translations-site-desc": "Adaptation des messages système dans l’espace de noms MediaWiki.",
+ "translate-rc-translation-filter": "Filtrer les traductions :",
+ "translate-rc-translation-filter-no": "Ne rien faire",
+ "translate-rc-translation-filter-only": "Afficher uniquement les traductions",
+ "translate-rc-translation-filter-filter": "Exclure les traductions",
+ "translate-rc-translation-filter-site": "Uniquement les modifications de messages du site",
+ "translationstats": "Statistiques de traduction",
+ "translate-stats-edits": "Modifications",
+ "translate-stats-users": "Traducteurs",
+ "translate-stats-registrations": "Inscriptions",
+ "translate-stats-reviews": "Relectures",
+ "translate-stats-reviewers": "Relecteurs",
+ "translate-statsf-intro": "Vous pouvez générer des statistiques simples par ce formulaire.\nToutes les valeurs ont des limites supérieures et inférieures.",
+ "translate-statsf-options": "Options du graphique",
+ "translate-statsf-width": "Largeur en pixels :",
+ "translate-statsf-height": "Hauteur en pixels :",
+ "translate-statsf-days": "Durée de la période en jours :",
+ "translate-statsf-start": "Date de début :",
+ "translate-statsf-scale": "Granularité :",
+ "translate-statsf-scale-years": "Années",
+ "translate-statsf-scale-months": "Mois",
+ "translate-statsf-scale-weeks": "Semaines",
+ "translate-statsf-scale-days": "Jours",
+ "translate-statsf-scale-hours": "Heures",
+ "translate-statsf-count": "Mesure :",
+ "translate-statsf-count-edits": "Nombre de modifications",
+ "translate-statsf-count-users": "Traducteurs actifs",
+ "translate-statsf-count-registrations": "Nouveaux utilisateurs",
+ "translate-statsf-count-reviews": "Relectures de traduction",
+ "translate-statsf-count-reviewers": "Relecteurs",
+ "translate-statsf-language": "Liste de codes de langues séparés par une virgule :",
+ "translate-statsf-group": "Liste de codes de groupes séparés par une virgule :",
+ "translate-statsf-submit": "Prévisualiser",
+ "translate-statsf-unknown-error": "Une erreur inconnue s’est produite.",
+ "translate-statsf-error-message": "Il y a eu une erreur en chargeant le graphe : $1",
+ "translate-statsf-graph-alt-text-info": "Le texte alternatif pour les statistiques de traduction est dans la table de données ci-dessous.",
+ "translate-statsf-alt-text": "Ceci est le texte alternatif pour les statistiques de traduction.",
+ "translate-statsf-embed": "Code pour inclure le graphique des statistiques de traduction dans d’autres pages.",
+ "translate-tag-page-desc": "Traduction de la page wiki [[$2|$1]] depuis $3 ($4).",
+ "translate-tag-page-wikipage-desc": "[[$1|Traduction]] de la page wiki [[$2]] de <bdi>$3</bdi> ($4) en <bdi>$5</bdi> ($6)",
+ "translate-sidebar-alltrans": "Dans les autres langues",
+ "translations": "Toutes les traductions",
+ "translations-summary": "Entrez un nom de message ci-dessous pour visualiser toutes les traductions disponibles.",
+ "translate-translations-no-message": "« $1 » n’est pas un message traduisible.",
+ "translate-translations-none": "Il n’y a pas de traduction pour « $1 ».",
+ "translate-translations-count": "Il existe {{PLURAL:$1|une traduction|$1 traductions}}.",
+ "translate-translations-fieldset-title": "Message",
+ "translate-translations-messagename": "Nom :",
+ "translate-translations-project": "Projet :",
+ "translate-translations-including-no-param": "Veuillez spécifier une clé de message correcte dans le paramètre ''subpage''",
+ "translate-translations-history-short": "h",
+ "languagestats": "Statistiques de langue",
+ "languagestats-summary": "Cette page affiche les statistiques de traduction de tous les groupes de messages dans une langue donnée.",
+ "messagegroupstats-summary": "Cette page affiche les statistiques de groupe de messages.",
+ "languagestats-stats-for": "Statistiques de traduction en $1 ($2).",
+ "languagestats-recenttranslations": "traductions récentes",
+ "translate-langstats-incomplete": "Certaines statistiques sur cette page sont incomplètes. Merci de la recharger pour en obtenir davantage.",
+ "translate-langstats-expand": "développer",
+ "translate-langstats-collapse": "replier",
+ "translate-langstats-expandall": "tout développer",
+ "translate-langstats-collapseall": "tout replier",
+ "translate-language-code": "Code de langue",
+ "translate-language-code-field-name": "Code de langue :",
+ "translate-suppress-complete": "Masquer les groupes de messages entièrement traduits",
+ "translate-ls-noempty": "Masquer les groupes de messages sans aucune traduction",
+ "translate-language": "Langue",
+ "translate-total": "Messages",
+ "translate-untranslated": "Non traduits",
+ "translate-percentage-complete": "Achèvement",
+ "translate-percentage-fuzzy": "Désuets",
+ "translate-percentage-proofread": "Relu",
+ "translate-languagestats-overall": "Tous les groupes de messages ensembles",
+ "translate-ls-submit": "Afficher les statistiques",
+ "translate-ls-column-group": "Groupe de messages",
+ "translate-mgs-pagename": "Statistiques du groupe de messages",
+ "translate-mgs-fieldset": "Préférences d’affichage",
+ "translate-mgs-group": "Groupe de messages :",
+ "translate-mgs-nocomplete": "Ne pas afficher les langues dont la traduction est achevée",
+ "translate-mgs-noempty": "Ne pas afficher les langues qui n’ont aucune traduction",
+ "translate-mgs-submit": "Afficher les statistiques",
+ "translate-mgs-column-language": "Langue",
+ "translate-mgs-totals": "Ensemble de{{PLURAL:$1||s}} $1 langue{{PLURAL:$1||s}}",
+ "translate-mgs-invalid-group": "Le groupe spécifié $1 n’existe pas.",
+ "translate-mgs-nothing": "Rien à afficher pour les statistiques demandées.",
+ "translate-tes-server-error": "Échec de récupération des suggestions de recherche",
+ "translate-tes-group-not-found": "Aucun résultat correspondant",
+ "translate-tes-type-to-search": "Taper pour commencer la recherche",
+ "supportedlanguages": "Langues actives",
+ "supportedlanguages-summary": "Cette page affiche une liste des langues actives sur {{SITENAME}}, avec les noms des traducteurs et traductrices qui travaillent dans cette langue.\nLe nom d’une langue, d’un traducteur ou d’une traductrice dans cette langue apparaît en plus gros en fonction du nombre de modifications contribuées dans cette langue.\nL’accentuation de la couleur du soulignement du nom d’un traducteur ou d’une traductrice indique si ce traducteur ou cette traductrice a été actif ou active ici récemment.",
+ "supportedlanguages-colorlegend": "Légende pour la couleur : dernière traduction il y a $1 jours.",
+ "supportedlanguages-portallink": "[$1] $2 – $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-sqlite-error": "SQLite n’est pas pris en charge",
+ "supportedlanguages-postgres-error": "PostgreSQL n’est pas pris en charge",
+ "supportedlanguages-translators": "Traduct{{PLURAL:$2|{{GENDER:$3|eur|rice}}|eurs}} : $1",
+ "supportedlanguages-recenttranslations": "traductions récentes",
+ "supportedlanguages-count": "$1 langue{{PLURAL:$1||s}} en tout.",
+ "supportedlanguages-activity": "$1 : $2 modification{{PLURAL:$2||s}} — dernière modification il y a $3 jour{{PLURAL:$3||s}}",
+ "translate-supportedlanguages-cached": "Cette information a été mise en cache il y a $1.",
+ "translate-activelanguages-invalid-code": "Le code de langue « $1 » est inconnu ou non activé pour la traduction.",
+ "abusefilter-edit-builder-vars-translate-source-text": "Texte source de l’unité de traduction",
+ "abusefilter-edit-builder-vars-translate-target-language": "Langue cible pour la traduction",
+ "translate-jssti-add": "Ajouter à la liste",
+ "managemessagegroups": "Gestion des groupes de messages",
+ "translate-smg-notallowed": "Vous n’êtes pas autorisé à effectuer cette action.",
+ "translate-smg-nochanges": "Il n’y a aucune modification à traiter.",
+ "translate-smg-submit": "Soumettre les modifications pour traitement",
+ "translate-smg-submitted": "Les définitions de messages ont été mises à jour. Les modifications sont traitées en arrière-plan.",
+ "translate-smg-submitted-with-failure": "La mise à jour {{PLURAL:$1|de la définition|des définitions}} du message a échoué pour {{PLURAL:$1|le groupe suivant|les groupes suivants}} : $2. $3",
+ "translate-smg-submitted-others-processing": "Les définitions de message pour d’autres groupes sont traitées en tâche de fond.",
+ "translate-smg-more": "Il y aura d’autres modifications à effectuer après avoir envoyé ces modifications.",
+ "translate-smg-left": "Contenu du message dans le wiki",
+ "translate-smg-right": "Modifications arrivées",
+ "translate-smg-rename-select": "Sélectionner",
+ "translate-smg-rename-cancel": "Annuler",
+ "translate-smg-rename-search": "Rechercher un message correspondant...",
+ "translate-smg-rename-select-err": "Veuillez sélectionner un message à renommer",
+ "translate-smg-rename-no-msg": "Aucun message trouvé.",
+ "translate-smg-rename-new": "Ajouter comme nouveau...",
+ "translate-smg-rename-rename": "Ajouter comme renommage de...",
+ "translate-smg-rename-dialog-title": "Sélectionner le renommage correspondant pour $1",
+ "translate-smg-changeset-modified": "L’ensemble des modifications a été modifié par un autre utilisateur ou processus. Vos modifications ne peuvent pas être publiées car elles pourraient écraser ses modifications. Veuillez recharger la page pour voir les dernières modifications.",
+ "translate-smg-no-groups-in-sync": "Il n’y a aucun groupe en cours de synchronisation",
+ "translate-smg-strong-sync-help": "Aide",
+ "translate-smg-groups-in-sync": "Groupes en cours de synchronisation",
+ "translate-smg-groups-in-sync-list": "Liste des groupes actuellement traités en tâche de fond :",
+ "translate-smg-groups-with-error-title": "Groupes qui ont eu des erreurs lors de la synchronisation",
+ "translate-smg-groups-with-error-desc": "Liste des groupes et de leurs messages qui ont eu des erreurs lors de la synchronisation :",
+ "translate-smg-group-with-error-summary": "$1 message{{PLURAL:$1||s}} avec des erreurs :",
+ "translate-smg-group-message-action-history": "Historique",
+ "translate-smg-group-action-resolve": "Marquer comme résolu",
+ "translate-smg-group-sync-error-warn": "Ce groupe a eu une erreur lors de la synchronisation. Veuillez les corriger avant de traiter ce groupe.",
+ "translate-smg-group-message-tag-outdated": "Périmé",
+ "translate-smg-group-message-tag-rename": "Renommer",
+ "translate-smg-group-message-tag-label": "Balise{{PLURAL:$1||s}} :",
+ "translate-smg-group-message-message-content": "Contenu :",
+ "translate-smg-group-message-message-target": "Cible :",
+ "translate-smg-group-message-message-replacement": "Remplacement :",
+ "translate-smg-group-message-message-other-langs": "Autres langues :",
+ "translate-smg-loading": "Chargement en cours...",
+ "translate-smg-unknown-error": "Une erreur est survenue lors du traitement de votre requête.",
+ "translate-manage-import-diff": "Message $1 | Actions : $2",
+ "translate-manage-import-new": "Nouveau message $1",
+ "translate-manage-import-deleted": "Message $1 supprimé",
+ "translate-manage-action-import": "Importer",
+ "translate-manage-action-conflict": "Importer et marquer comme flou",
+ "translate-manage-action-ignore": "Ignorer",
+ "translate-manage-action-fuzzy": "Importer et marquer les traductions comme floues",
+ "translate-manage-action-rename-fuzzy": "Renommer et marquer les traductions comme floues",
+ "translate-manage-action-rename": "Renommer",
+ "translate-manage-action-ignore-change": "Ignorer la modification de traduction",
+ "translate-manage-nochanges": "Il n’y a aucune modification dans les définitions de messages de ce groupe.",
+ "translate-manage-nochanges-other": "Il n’y a eu aucune modification pour cette langue.\nUtilisez le lien ci-dessous pour revenir à la vue de détail du groupe.",
+ "translate-manage-inconsistent": "Une inconsistance a été détectée dans la requête.\nVérifiez s’il y a eu des modifications et ressayez. Détails : $1.",
+ "translate-manage-toolong": "La durée maximale du temps de traitement de $1 seconde{{PLURAL:$1||s}} a été dépassée.\nRenvoyez le formulaire pour continuer le traitement.",
+ "translate-manage-import-summary": "Importation d’une nouvelle version depuis une source externe.",
+ "translate-manage-import-ignore": "Le message $1 a été sauté.",
+ "translate-manage-import-rename-summary": "Renommé dans la source externe",
+ "translate-manage-conflict-summary": "Importation d’une nouvelle version depuis une source externe. Vérifiez s’il vous plaît.",
+ "translate-manage-submit": "Exécuter",
+ "translate-manage-intro-other": "Ci-dessous figure une liste des modifications dans la langue $1.\nRelisez les modifications et choisissez une action à effectuer pour chacune.\nSi vous décidez d’ignorer les modifications, cette action ne sera que temporaire.",
+ "translate-manage-import-ok": "Importé : $1",
+ "translate-manage-import-done": "Import terminé !",
+ "translate-manage-empty-content": "Le contenu est vide",
+ "translate-manage-key-reused": "Ce message existe déjà dans le wiki. Recherchez une réutilisation accidentelle d’une ancienne clé.",
+ "translate-manage-source-message-not-found": "Définition du message non trouvée",
+ "importtranslations": "Importer les traductions",
+ "translate-import-from-local": "Importer un fichier local :",
+ "translate-import-load": "Charger le fichier",
+ "translate-import-err-dl-failed": "Impossible d’accéder au fichier :\n$1",
+ "translate-import-err-ul-failed": "Le téléversement du fichier a échoué",
+ "translate-import-err-invalid-title": "Le nom du fichier fourni « <nowiki>$1</nowiki> » n’est pas valide.",
+ "translate-import-err-no-such-file": "Le fichier « <nowiki>$1</nowiki> » n’existe pas ou n’a pas été importé localement.",
+ "translate-import-err-stale-group": "Le groupe de messages auquel ce fichier appartient n’existe pas.",
+ "translate-import-err-no-headers": "Le fichier n’est pas un fichier ''Gettext'' bien formé dans le format attendu par l’extension ''Translate'' :\nil est impossible de déterminer le groupe et la langue depuis les entêtes du fichier.",
+ "translate-js-support-unsaved-warning": "Vous avez des traductions non publiées.",
+ "translate-gs-pos": "Rang",
+ "translate-gs-code": "Code",
+ "translate-gs-continent": "Continent",
+ "translate-gs-speakers": "Locuteurs",
+ "translate-gs-score": "Pointage",
+ "translate-gs-multiple": "Multiple",
+ "translate-gs-count": "Compte",
+ "translate-gs-total": "Total",
+ "translate-gs-avgscore": "Pointage moyen",
+ "translate-documentation-language": "Documentation du message",
+ "translate-searchprofile": "Traductions",
+ "translate-searchprofile-tooltip": "Rechercher dans toutes les traductions",
+ "translate-searchprofile-note": "Plus d’options de recherche sont disponibles avec la [$1 recherche de traductions].",
+ "translate-search-languagefilter": "Filtrer par langue :",
+ "translate-search-nofilter": "Aucun filtrage",
+ "log-name-translationreview": "Journal des relectures de traduction",
+ "log-description-translationreview": "Journal de toutes les relectures des traductions et des groupes de messages.",
+ "logentry-translationreview-message": "$1{{GENDER:$2|}} a relu la traduction $3",
+ "logentry-translationreview-group": "$1{{GENDER:$2|}} a modifié l’état des traductions en $4 de $3 de $6 à $7",
+ "group-translate-sandboxed": "Traducteurs non approuvés",
+ "group-translate-sandboxed-member": "traduct{{GENDER:$1|eur|rice}} non approuvé{{GENDER:$1||e}}",
+ "right-translate-sandboxmanage": "Gérer les utilisateurs limités au bac à sable",
+ "action-translate-sandboxmanage": "gérer les utilisateurs limités au bac à sable",
+ "right-translate-sandboxaction": "Exécuter des actions autorisées pour les utilisateurs non enregistrés",
+ "action-translate-sandboxaction": "exécuter des actions autorisées pour les utilisateurs non enregistrés",
+ "translate-workflow-state-": "(désactivé)",
+ "translate-workflowstatus": "État : $1",
+ "translate-workflow-set-doing": "Activation...",
+ "translate-workflow-autocreated-summary": "Création automatique de la page pour l’état du processus de travail $1",
+ "translate-stats-workflow": "État",
+ "translate-workflowgroup-label": "États du processus de travail",
+ "translate-workflowgroup-desc": "Ce groupe de messages montre les états du processus de travail de traduction.\nLes états sont définis dans la variable de configuration $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Traductions récentes",
+ "translate-dynagroup-recent-desc": "Ce groupe de messages montre toutes les traductions récentes faites dans cette langue.\nIl est surtout utilisé pour les tâches de relecture.",
+ "translate-dynagroup-additions-label": "Ajouts récents",
+ "translate-dynagroup-additions-desc": "Ce groupe de messages affiche les messages nouveaux et modifiés.",
+ "translate-msggroupselector-projects": "Groupe de messages",
+ "translate-msggroupselector-search-placeholder": "Rechercher des groupes",
+ "translate-msggroupselector-search-all": "Tous",
+ "translate-msggroupselector-search-recent": "Récents",
+ "translate-msggroupselector-view-subprojects": "$1 sous-groupe{{PLURAL:$1||s}}",
+ "tux-languageselector": "Traduire en",
+ "tux-select-target-language": "Langue cible pour la traduction",
+ "tux-tab-all": "Tous",
+ "tux-tab-untranslated": "Non traduits",
+ "tux-tab-outdated": "Désuets",
+ "tux-tab-translated": "Traduits",
+ "tux-tab-unproofread": "Non relus",
+ "tux-edit": "Modifier",
+ "tux-status-optional": "Facultatif",
+ "tux-status-fuzzy": "Désuet",
+ "tux-status-proofread": "Corrigé",
+ "tux-status-translated": "Traduit",
+ "tux-status-saving": "Publication en cours...",
+ "tux-status-unsaved": "Non publié",
+ "tux-save-unknown-error": "Une erreur inconnue s’est produite.",
+ "tux-editor-placeholder-documentation": "Ajouter une documentation du message",
+ "tux-editor-placeholder-language": "Votre traduction en $1",
+ "tux-editor-editsummary-placeholder": "Expliquez vos modifications (facultatif)",
+ "tux-editor-paste-original-button-label": "Coller le texte source",
+ "tux-editor-discard-changes-button-label": "Annuler les modifications",
+ "tux-editor-save-button-label": "Publier la traduction",
+ "tux-editor-skip-button-label": "Aller au suivant",
+ "tux-editor-cancel-button-label": "Annuler",
+ "tux-editor-confirm-button-label": "Confirmer la traduction",
+ "tux-editor-proofread-button-label": "Marquer comme relu",
+ "tux-editor-shortcut-info": "Appuyez sur « $1 » pour confirmer et passer au message suivant, « $2 » pour sauter, « $4 » pour fournir un résumé ou maintenir « $3 » pour voir d’autres raccourcis.",
+ "tux-editor-edit-desc": "Modifier la documentation",
+ "tux-editor-add-desc": "Ajouter une documentation",
+ "tux-editor-suggestions-title": "Suggestions",
+ "tux-editor-latest-updates-title": "Dernières modifications",
+ "tux-editor-changes-without-summary": "$1 modification{{PLURAL:$1||s}} sans résumé",
+ "tux-editor-all-changes": "Toutes les modifications",
+ "tux-editor-in-other-languages": "En d’autres langues",
+ "tux-editor-need-more-help": "Besoin d’aide ?",
+ "tux-editor-ask-help": "Demander plus d’informations",
+ "tux-editor-tm-match": "$1 % de correspondance",
+ "tux-notices-more": "{{PLURAL:$1|}}$1 de plus",
+ "tux-notices-hide": "masquer",
+ "tux-editor-save-failed": "Échec de la publication de la traduction : $1",
+ "tux-editor-n-uses": "utilisé $1 fois{{PLURAL:$1|}}",
+ "tux-editor-message-desc-more": "Voir davantage",
+ "tux-editor-message-desc-less": "Afficher moins",
+ "tux-editor-clear-translated": "Masquer la traduction",
+ "tux-editor-proofreading-mode": "Relecture",
+ "tux-editor-translate-mode": "Liste",
+ "tux-editor-proofreading-hide-own-translations": "Masquer vos traductions",
+ "tux-editor-proofreading-show-own-translations": "Afficher vos traductions",
+ "tux-proofread-action-tooltip": "Marquer comme relu",
+ "tux-proofread-edit-label": "Modifier",
+ "tux-editor-page-mode": "Page",
+ "tux-editor-outdated-notice": "Cette traduction peut nécessiter une mise à jour.",
+ "tux-editor-outdated-notice-diff-link": "Afficher les différences",
+ "tux-editor-doc-editor-placeholder": "Documentation du message",
+ "tux-editor-doc-editor-save": "Publier la documentation",
+ "tux-editor-doc-editor-cancel": "Annuler",
+ "tux-messagetable-more-messages": "$1 message{{PLURAL:$1||s}} de plus",
+ "tux-messagetable-loading-messages": "Chargement en cours {{PLURAL:$1|du message|de $1 messages}}...",
+ "tux-message-filter-placeholder": "Filtrer la liste",
+ "tux-message-filter-result": "{{PLURAL:$1|0=Aucun résultat trouvé|1=Un résultat trouvé|$1 résultats trouvés}} pour « $2 »",
+ "tux-message-filter-advanced-button": "Recherche avancée",
+ "tux-message-filter-optional-messages-label": "Messages facultatifs",
+ "tux-proofread-translated-by-self": "Traduit par vous",
+ "tux-empty-list-all": "Ce groupe de messages est vide",
+ "tux-empty-list-all-guide": "Sélectionner un groupe de messages différent à traduire",
+ "tux-translate-page-no-such-group": "<strong>Le groupe indiqué n’existe pas.</strong> Sélectionnez un autre groupe de messages.",
+ "tux-empty-list-translated": "Aucun message traduit",
+ "tux-empty-list-translated-guide": "Vous pouvez aider à traduire",
+ "tux-empty-list-translated-action": "Traduire",
+ "tux-empty-no-messages-to-display": "Aucun message à afficher.",
+ "tux-empty-there-are-optional": "Il y a des messages facultatifs n’apparaissant pas dans la liste",
+ "tux-empty-show-optional-messages": "Afficher les messages facultatifs",
+ "tux-empty-no-outdated-messages": "Aucun message désuet",
+ "tux-empty-nothing-to-proofread": "Rien à relire",
+ "tux-empty-you-can-help-providing": "Vous pouvez aider en apportant de nouvelles traductions",
+ "tux-empty-nothing-new-to-proofread": "Rien de nouveau à relire",
+ "tux-empty-you-can-review-already-proofread": "Vous pouvez relire les traductions déjà relues par d’autres.",
+ "tux-empty-list-other": "Rien à traduire",
+ "tux-empty-list-other-guide": "Vous pouvez aider à relire les traductions existantes",
+ "tux-empty-list-other-action": "Relire les traductions",
+ "tux-empty-list-other-link": "Afficher tous les messages",
+ "tux-editor-close-tooltip": "Fermer",
+ "tux-editor-expand-tooltip": "Développer",
+ "tux-editor-collapse-tooltip": "Replier",
+ "tux-editor-message-tools-show-editor": "Afficher dans l’éditeur wiki",
+ "tux-editor-message-tools-history": "Historique",
+ "tux-editor-message-tools-delete": "Supprimer",
+ "tux-editor-message-tools-translations": "Toutes les traductions",
+ "tux-editor-message-tools-linktothis": "Lien vers ce message",
+ "tux-editor-loading": "Chargement en cours...",
+ "tux-editor-loading-failed": "Échec de chargement des aides à la traduction : $1",
+ "translate-search-more-languages-info": "$1 langue{{PLURAL:$1||s}} de plus",
+ "translate-statsbar-tooltip": "$1% traduit, $2% relu",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% traduit, $2% relu, $3% désuet",
+ "translate-search-more-groups-info": "$1 groupe{{PLURAL:$1||s}} de plus",
+ "translate-syntax-error": "La traduction contient des erreurs de syntaxe",
+ "tux-session-expired": "Vous n’êtes plus connecté. Veuillez vous connecter dans un autre onglet. Sinon, faites une copie des traductions non enregistrées, connectez-vous et revenez sur cette page.",
+ "tux-nojs": "Cet outil ne fonctionne pas sans JavaScript. JavaScript est désactivé ou n’a pas pu s’exécuter, ou bien votre explorateur ne le prend pas en charge.",
+ "specialpages-group-translation": "Traduction",
+ "content-model-translate-messagebundle": "Paquet de message à traduire",
+ "translate-messagebundle-validation-error": "Paquet de message non valide : $1",
+ "translate-messagebundle-error-parsing": "Erreur lors de l’analyse du JSON : $1",
+ "translate-messagebundle-error-invalid-array": "Le paquet de message doit être un objet JSON. Type obtenu : $1.",
+ "translate-messagebundle-error-key-empty": "Le paquet de messages ne doit contenir aucune clé vide",
+ "translate-messagebundle-error-key-too-long": "La clé « $1 » est trop longue",
+ "translate-messagebundle-error-key-invalid-characters": "La clé « $1 » contient des caractères interdits",
+ "translate-messagebundle-error-invalid-value": "La clé « $1 » ne contient pas de valeur chaîne",
+ "translate-messagebundle-error-empty-value": "La clé « $1 » n’a pas de valeur",
+ "translate-messagebundle-error-metadata-type": "Les métadonnées doivent être un tableau.",
+ "translate-messagebundle-error-invalid-metadata": "La section de métadonnées contient une clé inconnue : « $1 ». Les clés prises en charge sont $2.",
+ "translate-messagebundle-error-invalid-sourcelanguage": "Le code de langue source « $1 » n’est pas pris en charge.",
+ "translate-messagebundle-error-invalid-prioritylanguage": "Code{{PLURAL:$2||s}} de langue prioritaire non valide{{PLURAL:$2||s}} dans les métadonnées : $1",
+ "translate-messagebundle-error-invalid-prioritylanguage-format": "Format de langue prioritaire non valide dans les métadonnées. Les langues prioritaires doivent être une table de chaînes.",
+ "translate-messagebundle-group-description": "Messages d'un faisceau de messages défini sur la page [[$2|$1]].",
+ "translate-messagebundle-change-sourcelanguage": "Configuration de la langue source du groupe de messages conformément aux métadonnées.",
+ "translate-messagebundle-sourcelanguage-changed": "La langue source d’un groupe de messages ne peut pas être changée une fois qu’il a été créé.",
+ "log-action-filter-translationreview": "Type d’action :",
+ "log-action-filter-translationreview-message": "Relecture des messages de traduction individuels",
+ "log-action-filter-translationreview-group": "Modifications d’état de la progression des traductions"
+}
diff --git a/Translate/i18n/core/frc.json b/Translate/i18n/core/frc.json
new file mode 100644
index 00000000..02ab71a5
--- /dev/null
+++ b/Translate/i18n/core/frc.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cedric31",
+ "RoyAlcatraz"
+ ]
+ },
+ "translate": "Tradusir",
+ "translate-submit": "Charcher",
+ "translate-next": "Page suivante",
+ "translate-prev": "Page avant",
+ "translate-optional": "(de choix)",
+ "translate-ignored": "(ignoré)",
+ "translate-language": "Langue:"
+}
diff --git a/Translate/i18n/core/frp.json b/Translate/i18n/core/frp.json
new file mode 100644
index 00000000..641f5121
--- /dev/null
+++ b/Translate/i18n/core/frp.json
@@ -0,0 +1,272 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cedric31",
+ "ChrisPtDe"
+ ]
+ },
+ "translate": "Traduire",
+ "translate-desc": "[[Special:Translate|Pâge spèciâla]] por traduire MediaWiki et en-delé",
+ "translate-taskui-export-to-file": "Èxportar u format natif",
+ "translate-taskui-export-as-po": "Èxportar por na traduccion en defôr de legne",
+ "translate-taskui-export-as-csv": "Èxportar u format CSV",
+ "translate-export-csv-message-title": "Titro du mèssâjo de traduccion",
+ "translate-export-csv-definition": "Dèfinicion du mèssâjo",
+ "translate-taction-translate": "Traduire",
+ "translate-taction-proofread": "Revêre",
+ "translate-taction-lstats": "Statistiques de lengoua",
+ "translate-taction-mstats": "Statistiques de groupo de mèssâjos",
+ "translate-taction-export": "Èxportar",
+ "translate-taction-disabled": "Cel’accion est dèsactivâye sus ceti vouiqui.",
+ "translate-page-no-such-language": "Lo code lengoua spècefiâ est fôx.",
+ "translate-page-no-such-group": "Lo groupo spècefiâ est fôx.",
+ "translate-page-disabled": "Les traduccions dens cela lengoua sont étâyes dèsactivâyes por ceti groupo.\nRêson :\n\n<em>$1</em>",
+ "translate-language-disabled": "La traduccion dens cela lengoua est dèsactivâye.",
+ "translate-page-settings-legend": "Configuracion",
+ "translate-page-group": "Groupo",
+ "translate-page-language": "Lengoua",
+ "translate-page-limit": "Limita",
+ "translate-page-limit-option": "$1 mèssâjo{{PLURAL:$1||s}} per pâge",
+ "translate-submit": "Listar",
+ "translate-page-navigation-legend": "Navegacion",
+ "translate-page-showing": "Afichâjo des mèssâjos de $1 a $2 sus $3.",
+ "translate-page-showing-all": "Afichâjo de $1 mèssâjo{{PLURAL:$1||s}}.",
+ "translate-page-showing-none": "Gins de mèssâjo a fâre vêre.",
+ "translate-next": "Pâge aprés",
+ "translate-prev": "Pâge devant",
+ "translate-page-description-legend": "Enformacions sus lo groupo",
+ "translate-page-description-hasoptional": "Ceti groupo de mèssâjos contint los mèssâjos u chouèx.\nLos mèssâjos u chouèx devriant étre traduits ren que quand voutra lengoua at des ègzigences spèciâles\ncoment pas empleyér d’èspâços ou ben la translitèracion des noms prôpros. $1",
+ "translate-page-description-hasoptional-open": "Fâre vêre los mèssâjos u chouèx.",
+ "translate-page-edit": "changiér",
+ "translate-optional": "(u chouèx)",
+ "translate-ignored": "(ignorâ)",
+ "translate-edit-title": "Changiér « $1 »",
+ "translate-edit-definition": "Dèfinicion du mèssâjo",
+ "translate-edit-contribute": "contribuar",
+ "translate-edit-no-information": "''Ceti mèssâjo est pas documentâ.''\n''Se vos sâde yô ou ben coment il est empleyê, vos pouede édiér los ôtros traductors en fassent la documentacion de ceti mèssâjo.''",
+ "translate-edit-information": "Enformacions sus lo mèssâjo ($1)",
+ "translate-edit-warnings": "Semonces sus les traduccions encomplètes",
+ "translate-edit-tmmatch-source": "Tèxto sôrsa de la traduccion : $1",
+ "translate-edit-tmmatch": "$1 % de corrèspondance",
+ "translate-edit-nopermission": "Vos dête avêr la pèrmission de traduire los mèssâjos.",
+ "translate-edit-askpermission": "Avêr la pèrmission",
+ "exporttranslations": "Èxportar de traduccions",
+ "translate-export-form-format": "Format",
+ "translate-export-invalid-format": "Se vos plét, spècefiâd un format valido.",
+ "translate-export-not-supported": "L’èxportacion de traduccions est pas recognua.",
+ "translate-export-format-notsupported": "Lo format d’èxportacion spècefiâ est pas recognu per lo groupo de mèssâjos.",
+ "translate-checks-parameters": "{{PLURAL:$2|Ceti paramètro est pas empleyê|Cetos paramètros sont pas empleyês}} :\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Ceti paramètro est encognu|Cetos paramètros sont encognus}} :\n<strong>$1</strong>",
+ "translate-checks-balance": "Y at un nombro mâl-par de parentès{{PLURAL:$2|a|es}} :\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Ceti lim est|Cetos $2 lims sont}} pas de sûr :\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Ceti lim est entrovâblo|Cetos $2 lims sont entrovâblos}} :\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "La dèfenicion emplèye <nowiki>{{PLURAL:}}</nowiki> mas pas sa traduccion.",
+ "translate-checks-gettext-plural-missing": "Cela traduccion dêt contegnir <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-unsupported": "Cél mèssâjo recognêt pas <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-pagename": "Èspâço de noms changiê dês la dèfinicion",
+ "translate-checks-format": "Ceta traduccion siut pas la dèfinicion ou ben el at na sintaxa fôssa : $1",
+ "translate-checks-escape": "Cetos èchapaments pôvont étre emprèvus : <strong>$1</strong>",
+ "translate-checks-parametersnotequal": "Lo nombro de paramètros est {{PLURAL:$1|$1}} ; cen devrêt étre {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> est fôx.",
+ "translate-checks-fudforum-syntax": "Empleyéd <nowiki>$1</nowiki> nan pas <nowiki>$2</nowiki> dens ceti projèt.",
+ "translate-pref-editassistlang": "Lengoues d’assistance :",
+ "prefs-translate": "Chouèx de traduccion",
+ "translate-pref-editassistlang-help": "Lista de codes lengoues sèparâs per na virgula.\nLa traduccion d’un mèssâjo dens cetes lengoues est montrâye quand vos éte aprés lo traduire.\nLa lista de les lengoues per dèfôt dèpend de voutra lengoua.",
+ "translate-pref-editassistlang-bad": "Code lengoua envalido dedens la lista :\n<nowiki>$1</nowiki>.",
+ "right-translate": "Changiér avouéc l’entèrface de traduccion",
+ "right-translate-manage": "Administrar los groupos de mèssâjos",
+ "action-translate-manage": "administrar los groupos de mèssâjos",
+ "right-translate-import": "Importar les traduccions en defôr de legne",
+ "action-translate-import": "importar les traduccions en defôr de legne",
+ "right-translate-messagereview": "Revêre les traduccions",
+ "action-translate-messagereview": "revêre les traduccions",
+ "right-translate-groupreview": "Changiér l’ètat du flux d’ôvra des groupos de mèssâjos",
+ "translate-rcfilters-translations": "Traduccions",
+ "translate-rcfilters-translations-only-label": "Traduccions",
+ "translate-rcfilters-translations-site-label": "Mèssâjos sistèmo",
+ "translate-rc-translation-filter": "Filtrar les traduccions :",
+ "translate-rc-translation-filter-no": "Pas ren fâre",
+ "translate-rc-translation-filter-only": "Fâre vêre ren que les traduccions",
+ "translate-rc-translation-filter-filter": "Èxcllure les traduccions",
+ "translate-rc-translation-filter-site": "Solament los changements de mèssâjos du seto",
+ "translationstats": "Statistiques de traduccion",
+ "translate-stats-edits": "Changements",
+ "translate-stats-users": "Traductors",
+ "translate-stats-registrations": "Encartâjos",
+ "translate-stats-reviews": "Rèvisions",
+ "translate-stats-reviewers": "Rèvisors",
+ "translate-statsf-intro": "Vos pouede fâre des statistiques simples avouéc ceti formulèro.\nTotes les valors ont des limites d’amont et desot.",
+ "translate-statsf-options": "Chouèx du diagramo",
+ "translate-statsf-width": "Largior en pixèls :",
+ "translate-statsf-height": "Hôtior en pixèls :",
+ "translate-statsf-days": "Temps en jorns :",
+ "translate-statsf-start": "Dâta de comencement :",
+ "translate-statsf-scale": "Granularitât :",
+ "translate-statsf-scale-years": "Ans",
+ "translate-statsf-scale-months": "Mês",
+ "translate-statsf-scale-weeks": "Semanes",
+ "translate-statsf-scale-days": "Jorns",
+ "translate-statsf-scale-hours": "Hores",
+ "translate-statsf-count": "Mesera :",
+ "translate-statsf-count-edits": "Nombro de changements",
+ "translate-statsf-count-users": "Traductors actifs",
+ "translate-statsf-count-registrations": "Novéls utilisators",
+ "translate-statsf-count-reviews": "Rèvisions de traduccion",
+ "translate-statsf-count-reviewers": "Rèvisors",
+ "translate-statsf-language": "Lista de codes lengoues sèparâs per des virgules :",
+ "translate-statsf-group": "Lista de codes de groupos sèparâs per des virgules :",
+ "translate-statsf-submit": "Prèvisualisar",
+ "translate-tag-page-desc": "Traduccion de la pâge vouiqui [[$2|$1]].",
+ "translate-sidebar-alltrans": "Dens les ôtres lengoues",
+ "translations": "Totes les traduccions",
+ "translations-summary": "Buchiéd un nom de mèssâjo ce-desot por fâre vêre totes les traduccions disponibles.",
+ "translate-translations-no-message": "« $1 » est pas un mèssâjo traduisiblo",
+ "translate-translations-none": "Y at gins de traduccion por « $1 »",
+ "translate-translations-count": "Ègziste {{PLURAL:$1|yona traduccion|$1 traduccions}}.",
+ "translate-translations-fieldset-title": "Mèssâjo",
+ "translate-translations-messagename": "Nom :",
+ "translate-translations-project": "Projèt :",
+ "translate-translations-including-no-param": "Volyéd spècifiar na cllâf de mèssâjo valida dedens lo paramètro ''sot-pâge''",
+ "translate-translations-history-short": "h",
+ "languagestats": "Statistiques de les lengoues",
+ "languagestats-summary": "Ceta pâge fât vêre les statistiques de traduccion de tôs los groupos de mèssâjos dens na lengoua balyêye.",
+ "languagestats-stats-for": "Statistiques de traduccion por $1 ($2).",
+ "languagestats-recenttranslations": "novèles traduccions",
+ "translate-langstats-incomplete": "Y at des statistiques sur ceta pâge que sont encomplètes. La volyéd rechargiér por nen obtegnir més.",
+ "translate-langstats-expand": "dèpleyér",
+ "translate-langstats-collapse": "repleyér",
+ "translate-langstats-expandall": "dèpleyér tot",
+ "translate-langstats-collapseall": "repleyér tot",
+ "translate-language-code": "Code lengoua",
+ "translate-language-code-field-name": "Code lengoua :",
+ "translate-suppress-complete": "Pas fâre vêre los groupos de mèssâjos tot traduits",
+ "translate-ls-noempty": "Pas fâre vêre los groupos de mèssâjos pas tot traduits",
+ "translate-language": "Lengoua",
+ "translate-total": "Mèssâjos",
+ "translate-untranslated": "Pas traduits",
+ "translate-percentage-complete": "Avance",
+ "translate-percentage-fuzzy": "Dèpassâs",
+ "translate-percentage-proofread": "Reviu",
+ "translate-languagestats-overall": "Tôs los groupos de mèssâjos ensemblo",
+ "translate-ls-submit": "Fâre vêre les statistiques",
+ "translate-ls-column-group": "Groupo de mèssâjos",
+ "translate-mgs-pagename": "Statistiques du groupo de mèssâjos",
+ "translate-mgs-fieldset": "Fâre vêre les prèferences",
+ "translate-mgs-group": "Groupo de mèssâjos :",
+ "translate-mgs-nocomplete": "Pas fâre vêre les lengoues qu’ont chavonâ lor traduccion",
+ "translate-mgs-noempty": "Pas fâre vêre les lengoues qu’ont gins de traduccion",
+ "translate-mgs-submit": "Fâre vêre les statistiques",
+ "translate-mgs-column-language": "Lengoua",
+ "translate-mgs-totals": "Totes les lengoues ensemblo",
+ "translate-mgs-invalid-group": "Lo groupo spècifiâ $1 ègziste pas.",
+ "translate-mgs-nothing": "Ren a fâre vêre por les statistiques demandâyes.",
+ "supportedlanguages": "Lengoues actives",
+ "supportedlanguages-summary": "Ceta pâge montre na lista de totes les lengoues recognues per {{SITENAME}},\navouéc los noms des traductors que travalyont dens cela lengoua.\nLo nom d’un traductor aparêt en ples grôs d’aprés lo nombro de changements qu’il at contribuâ.\nLa color du solegnement endique se lo traductor est étâ actif ique dês pou.",
+ "supportedlanguages-colorlegend": "Lègenda por la color : dèrriére traduccion cen fât $1 jorns.",
+ "supportedlanguages-translators": "Traducto{{PLURAL:$2|{{GENDER:$3|r|sa}}|rs}} : $1",
+ "supportedlanguages-recenttranslations": "novèles traduccions",
+ "supportedlanguages-count": "En tot $1 lengou{{PLURAL:$1|a|es}}.",
+ "supportedlanguages-activity": "$1 : $2 changement{{PLURAL:$2||s}} - dèrriér changement cen fât $3 jorn{{PLURAL:$3||s}}",
+ "translate-jssti-add": "Apondre a la lista",
+ "managemessagegroups": "Administracion du groupo des mèssâjos",
+ "translate-smg-notallowed": "Vos éte pas ôtorisâ a fâre cel’accion.",
+ "translate-smg-nochanges": "Y at gins de changement a trètar.",
+ "translate-smg-submit": "Sometre los changements por trètament",
+ "translate-smg-submitted": "Les dèfinicions des mèssâjos sont étâyes betâyes a jorn. Los changements sont trètâs en fond.",
+ "translate-smg-left": "Contegnu du mèssâjo dedens lo vouiqui",
+ "translate-smg-right": "Changements en cors de transfèrt",
+ "translate-smg-rename-select": "Chouèsir",
+ "translate-smg-rename-cancel": "Anular",
+ "translate-smg-strong-sync-help": "Éde",
+ "translate-smg-group-message-action-history": "Historico",
+ "translate-smg-group-message-tag-outdated": "Dèpassâ",
+ "translate-smg-group-message-tag-rename": "Renomar",
+ "translate-smg-group-message-tag-label": "Balis{{PLURAL:$1|a|es}} :",
+ "translate-smg-group-message-message-content": "Contegnu :",
+ "translate-smg-group-message-message-target": "Ciba :",
+ "translate-smg-group-message-message-replacement": "Remplacement :",
+ "translate-smg-group-message-message-other-langs": "Ôtres lengoues :",
+ "translate-smg-loading": "Chargement en cors...",
+ "translate-manage-import-diff": "Mèssâjo $1 | Accions : $2",
+ "translate-manage-import-new": "Mèssâjo novél $1",
+ "translate-manage-import-deleted": "Mèssâjo suprimâ $1",
+ "translate-manage-action-import": "Importar",
+ "translate-manage-action-conflict": "Importar et marcar coment troblo",
+ "translate-manage-action-ignore": "Ignorar",
+ "translate-manage-action-fuzzy": "Importar et marcar les traduccions coment trobles",
+ "translate-manage-action-rename": "Renomar",
+ "translate-manage-nochanges": "Y at gins de changement dedens les dèfinicions des mèssâjos de ceti groupo.",
+ "translate-manage-nochanges-other": "Y at avu gins de changement por ceta lengoua.\nEmpleyéd lo lim ce-desot por tornar a la vua de dètaly du groupo.",
+ "translate-manage-inconsistent": "N’enconsistence est étâye dècelâye dedens la requéta.\nVolyéd controlar s’y at avu des changements et pués tornar èprovar.\nDètalys : $1.",
+ "translate-manage-toolong": "Lo temps maximon de trètament de $1 second{{PLURAL:$1|a|es}} est étâ dèpassâ.\nVolyéd remandar lo formulèro por continuar lo trètament.",
+ "translate-manage-import-summary": "Importacion d’una novèla vèrsion dês na sôrsa de defôr",
+ "translate-manage-import-ignore": "Lo mèssâjo $1 at étâ sôtâ.",
+ "translate-manage-conflict-summary": "Importacion d’una novèla vèrsion dês na sôrsa de defôr.\nControlâd se vos plét.",
+ "translate-manage-submit": "Ègzécutar",
+ "translate-manage-import-ok": "Una novèla vèrsion de la pâge $1 at étâ importâ.",
+ "translate-manage-import-done": "Tot at étâ fêt !",
+ "importtranslations": "Importar les traduccions",
+ "translate-import-from-local": "Importar un fichiér local :",
+ "translate-import-load": "Chargiér lo fichiér",
+ "translate-import-err-dl-failed": "Empossiblo d’arrevar u fichiér :\n$1",
+ "translate-import-err-ul-failed": "Lo tèlèchargement du fichiér at pas reussi",
+ "translate-import-err-invalid-title": "Lo nom du fichiér balyê <nowiki>$1</nowiki> est envalido.",
+ "translate-import-err-no-such-file": "Lo fichiér <nowiki>$1</nowiki> ègziste pas ou ben il est pas étâ importâ localament.",
+ "translate-import-err-stale-group": "Lo groupo de mèssâjos uquint cél fichiér apartint ègziste pas.",
+ "translate-import-err-no-headers": "Lo fichiér est pas un fichiér ''gettext'' bien formâ dens lo format atendu per l’èxtension ''Translate'' :\no est empossiblo de dètèrmenar lo groupo et la lengoua dês los en-tétes du fichiér.",
+ "translate-js-support-unsaved-warning": "Vos avéd des traduccions pas encartâyes.",
+ "translate-gs-pos": "Pos.",
+ "translate-gs-code": "Code",
+ "translate-gs-continent": "Continent",
+ "translate-gs-speakers": "Parlants",
+ "translate-gs-score": "Mârca",
+ "translate-gs-multiple": "Un mouél",
+ "translate-gs-count": "Compto",
+ "translate-gs-total": "Soma",
+ "translate-gs-avgscore": "Mârca moyena",
+ "translate-documentation-language": "Documentacion du mèssâjo",
+ "translate-searchprofile": "Traduccions",
+ "translate-searchprofile-tooltip": "Rechèrchiér dens totes les traduccions",
+ "translate-search-languagefilter": "Filtrar per lengoua :",
+ "translate-search-nofilter": "Gins de filtracion",
+ "log-name-translationreview": "Jornal de les rèvisions de traduccion",
+ "log-description-translationreview": "Jornal de totes les rèvisions de les traduccions et des groupos de mèssâjos.",
+ "logentry-translationreview-message": "$1 at {{GENDER:$2|accèptâ}} la traduccion $3",
+ "translate-workflow-state-": "(dèsactivâ)",
+ "translate-workflowstatus": "Statut : $1",
+ "translate-workflow-set-doing": "En cors d’activacion...",
+ "translate-workflow-autocreated-summary": "Crèacion ôtomatica de la pâge por l’ètat du flux d’ôvra $1",
+ "translate-stats-workflow": "Statut",
+ "translate-workflowgroup-label": "Ètats du flux d’ôvra",
+ "translate-workflowgroup-desc": "Ceti groupo de mèssâjos fât vêre los ètats du flux d’ôvra de traduccion.\nLos ètats sont dèfenis dedens la variâbla de configuracion $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Novèles traduccions",
+ "translate-dynagroup-recent-desc": "Ceti groupo de mèssâjos fât vêre totes les novèles traduccions fêtes dens cela lengoua.\nIl est surtot empleyê por los travâlys de relèctura.",
+ "translate-dynagroup-additions-label": "Aponses novèles",
+ "translate-msggroupselector-projects": "Groupo de mèssâjos",
+ "translate-msggroupselector-search-placeholder": "Rechèrchiér des groupos",
+ "translate-msggroupselector-search-all": "Tôs",
+ "translate-msggroupselector-search-recent": "Novéls",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|sot-groupo|sot-groupos}}",
+ "tux-languageselector": "Lengoua",
+ "tux-tab-all": "Tôs",
+ "tux-tab-untranslated": "Pas traduits",
+ "tux-tab-outdated": "Dèpassâs",
+ "tux-tab-translated": "Traduits",
+ "tux-edit": "Changiér",
+ "tux-status-optional": "U chouèx",
+ "tux-status-fuzzy": "Dèpassâye",
+ "tux-status-proofread": "Corregiêye",
+ "tux-status-translated": "Traduit",
+ "tux-status-unsaved": "Pas encartâye",
+ "tux-editor-save-button-label": "Encartar la traduccion",
+ "tux-editor-skip-button-label": "Alar a celi d’aprés",
+ "tux-editor-edit-desc": "Changiér la dèscripcion",
+ "tux-editor-suggestions-title": "Idês",
+ "tux-editor-in-other-languages": "Dens les ôtres lengoues",
+ "tux-editor-need-more-help": "Fôta de més d’éde ?",
+ "tux-editor-ask-help": "Demandar més d’enformacions",
+ "tux-editor-tm-match": "$1 % de corrèspondance",
+ "tux-notices-more": "{{PLURAL:$1|$1 de ples}}",
+ "tux-notices-hide": "cachiér",
+ "tux-editor-save-failed": "Falyita de l’encartâjo de la traduccion : $1"
+}
diff --git a/Translate/i18n/core/frr.json b/Translate/i18n/core/frr.json
new file mode 100644
index 00000000..5a1e946a
--- /dev/null
+++ b/Translate/i18n/core/frr.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Murma174"
+ ]
+ },
+ "translate-total": "Bööden",
+ "translate-untranslated": "Bööden (tu auersaaten)",
+ "translate-percentage-complete": "Klaar",
+ "translate-percentage-fuzzy": "Ual",
+ "translate-languagestats-overall": "Böödsköölen tuup",
+ "translate-ls-column-group": "Skööl faan süsteembööden",
+ "translate-documentation-language": "Noorachten-dokumentatjuun"
+}
diff --git a/Translate/i18n/core/fur.json b/Translate/i18n/core/fur.json
new file mode 100644
index 00000000..fb676d12
--- /dev/null
+++ b/Translate/i18n/core/fur.json
@@ -0,0 +1,210 @@
+{
+ "@metadata": {
+ "authors": [
+ "Klenje"
+ ]
+ },
+ "translate": "Traduzion",
+ "translate-desc": "[[Special:Translate|Pagjine speciâl]] par tradusi MediaWiki e altris robis",
+ "translate-taskui-export-to-file": "Espuarte tal formât natîf",
+ "translate-taction-translate": "Tradûs",
+ "translate-taction-proofread": "Revision",
+ "translate-taction-lstats": "Statistichis de lenghe",
+ "translate-taction-mstats": "Statistichis dal grup di messaçs",
+ "translate-taction-export": "Espuarte",
+ "translate-page-settings-legend": "Impuestazions",
+ "translate-page-group": "Grup",
+ "translate-page-language": "Lenghe",
+ "translate-page-limit": "Limit",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|messaç|messaçs}} par pagjine",
+ "translate-submit": "Recupere",
+ "translate-page-navigation-legend": "Navigazion",
+ "translate-page-showing": "Daûr a mostrâ i messaçs di $1 a $2 su $3.",
+ "translate-page-showing-all": "Daûr a mostrâ $1 {{PLURAL:$1|messaç|messaçs}}.",
+ "translate-page-showing-none": "Nissun messaç di mostrâ.",
+ "translate-next": "Prossime pagjine",
+ "translate-prev": "Pagjine precedente",
+ "translate-page-description-legend": "Informazions sul grup",
+ "translate-page-description-hasoptional-open": "Mostre i messaçs opzionâi.",
+ "translate-page-edit": "cambie",
+ "translate-optional": "(opzionâl)",
+ "translate-ignored": "(ignorât)",
+ "translate-edit-title": "Cambie \"$1\"",
+ "translate-edit-definition": "Definizion dal messaç",
+ "translate-edit-contribute": "contribuìs",
+ "translate-edit-no-information": "''Chest messaç nol à documentazion.''\n''Se tu sâs dulà o cemût chest messaç al è doprât, tu puedis judâ altris tradutôrs zontant alc come documentazion a chest messaç.''",
+ "translate-edit-information": "Informazions sul messaç ($1)",
+ "translate-edit-warnings": "Avîs su lis traduzions no completis",
+ "translate-edit-tmmatch": "corispuint al $1%",
+ "translate-edit-nopermission": "Ti coventin i dirits di traduzion par tradusi i messaçs.",
+ "translate-edit-askpermission": "Cjapiti il permès",
+ "translate-checks-parameters": "{{PLURAL:$2|Il parametri ca sot nol è doprât|I parametris ca sot no son doprâts}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Il parametri ca sot nol è cognossût|I parametris ca sot no son cognossûts}}:\n<strong>$1</strong>",
+ "translate-checks-parametersnotequal": "Il numar di parametris al è {{PLURAL:$1|$1}}; al varès di jessi {{PLURAL:$2|$2}}.",
+ "translate-pref-editassistlang": "Assistent lenghis:",
+ "prefs-translate": "Opzions pe traduzion",
+ "translate-pref-editassistlang-bad": "Codis de lenghe no valit inte liste:\n<nowiki>$1</nowiki>.",
+ "right-translate-messagereview": "Reviôt lis traduzions",
+ "translate-rc-translation-filter": "Filtre traduzions:",
+ "translate-rc-translation-filter-no": "No stâ fâ nuie",
+ "translate-rc-translation-filter-only": "Mostre dome lis traduzions",
+ "translate-rc-translation-filter-filter": "No stâ mostrâ lis traduzions",
+ "translationstats": "Statistichis de traduzion",
+ "translate-stats-edits": "Cambiaments",
+ "translate-stats-users": "Tradutôrs",
+ "translate-stats-registrations": "Regjistrazions",
+ "translate-stats-reviews": "Revisions",
+ "translate-stats-reviewers": "Revisôrs",
+ "translate-statsf-scale-months": "Mês",
+ "translate-statsf-scale-weeks": "Setemanis",
+ "translate-statsf-scale-days": "Zornadis",
+ "translate-statsf-scale-hours": "Oris",
+ "translate-statsf-count-edits": "Numar di cambiaments",
+ "translate-statsf-count-users": "Tradutôrs atîfs",
+ "translate-statsf-count-registrations": "Gnûfs utents",
+ "translate-statsf-count-reviews": "Revisions des traduzions",
+ "translate-statsf-count-reviewers": "Revisôrs",
+ "translate-statsf-submit": "Anteprime",
+ "translate-tag-page-desc": "Traduzion de pagjine wiki [[$2|$1]].",
+ "translate-sidebar-alltrans": "In altris lenghis",
+ "translations": "Dutis lis traduzions",
+ "translate-translations-count": "{{PLURAL:$1|Cjatade une traduzion|Cjatadis $1 traduzions}}.",
+ "translate-translations-fieldset-title": "Messaç",
+ "translate-translations-messagename": "Non:",
+ "translate-translations-project": "Progjet:",
+ "languagestats": "Statistichis de lenghe",
+ "languagestats-summary": "Cheste pagjine e mostre lis statistichis di traduzion intune lenghe par ducj i grups di messaçs.",
+ "languagestats-stats-for": "Statistichis di traduzion par $1 ($2).",
+ "languagestats-recenttranslations": "traduzions recentis",
+ "translate-langstats-expand": "slargje",
+ "translate-langstats-collapse": "strenç",
+ "translate-langstats-expandall": "slargje dut",
+ "translate-langstats-collapseall": "strenç dut",
+ "translate-language-code": "Codiç de lenghe",
+ "translate-language-code-field-name": "Codiç de lenghe:",
+ "translate-suppress-complete": "Plate i grups di messaçs tradusûts fûr par fûr",
+ "translate-language": "Lenghe",
+ "translate-total": "Messaçs",
+ "translate-untranslated": "No tradusûts",
+ "translate-percentage-complete": "Completament",
+ "translate-percentage-fuzzy": "Di inzornâ",
+ "translate-languagestats-overall": "Ducj i grups di messaçs insieme",
+ "translate-ls-submit": "Mostre statistichis",
+ "translate-ls-column-group": "Grup di messaçs",
+ "translate-mgs-pagename": "Statistichis dal grup di messaçs",
+ "translate-mgs-fieldset": "Mostre lis preferencis",
+ "translate-mgs-group": "Grup di messaçs:",
+ "translate-mgs-submit": "Mostre statistichis",
+ "translate-mgs-column-language": "Lenghe",
+ "translate-mgs-totals": "Dutis lis lenghis insieme",
+ "supportedlanguages": "Lenghis supuartadis",
+ "supportedlanguages-colorlegend": "Leiende pal colôr: Ultime traduzion $1 zornadis indaûr.",
+ "supportedlanguages-translators": "{{PLURAL:$2|Tradutôr|Tradutôrs}}: $1",
+ "supportedlanguages-recenttranslations": "traduzions recentis",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|lenghe|lenghis}} in dut.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|cambiament|cambiaments}} - ultin cambiament $3 {{PLURAL:$3|zornade|zornadis}} indaûr",
+ "translate-jssti-add": "Zonte ae liste",
+ "translate-manage-import-diff": "Messaç $1 | Azions: $2",
+ "translate-manage-import-new": "Gnûf messaç $1",
+ "translate-manage-action-import": "Impuarte",
+ "translate-manage-action-ignore": "Ignore",
+ "importtranslations": "Impuarte traduzions",
+ "translate-import-load": "Cjame file",
+ "translate-js-support-unsaved-warning": "Tu âs traduzions no salvadis.",
+ "translate-gs-code": "Codiç",
+ "translate-gs-continent": "Continent",
+ "translate-gs-speakers": "Fevelants",
+ "translate-gs-score": "Punteç",
+ "translate-gs-count": "Numar di lenghis",
+ "translate-gs-total": "Totâl",
+ "translate-documentation-language": "Documentazion dal messaç",
+ "translate-searchprofile": "Traduzions",
+ "translate-searchprofile-tooltip": "Cîr jenfri dutis lis traduzions",
+ "translate-search-languagefilter": "Filtre par lenghe:",
+ "translate-search-nofilter": "Nissun filtri",
+ "log-name-translationreview": "Regjistri des revisions des traduzions",
+ "translate-workflowstatus": "Stât: $1",
+ "translate-stats-workflow": "Stât",
+ "translate-dynagroup-recent-label": "Traduzions recentis",
+ "translate-dynagroup-additions-label": "Gnovis zontis",
+ "translate-dynagroup-additions-desc": "Chest grup di messaçs al mostre i messaçs gnûfs e cambiâts.",
+ "translate-msggroupselector-projects": "Grup di messaçs",
+ "translate-msggroupselector-search-placeholder": "Cîr tai grups",
+ "translate-msggroupselector-search-all": "Ducj",
+ "translate-msggroupselector-search-recent": "Recents",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|sotgrup|sotgrups}}",
+ "tux-languageselector": "Tradûs par",
+ "tux-tab-all": "Ducj",
+ "tux-tab-untranslated": "No tradusûts",
+ "tux-tab-outdated": "Di inzornâ",
+ "tux-tab-translated": "Tradusûts",
+ "tux-tab-unproofread": "Di riviodi",
+ "tux-edit": "Cambie",
+ "tux-status-optional": "Opzionâl",
+ "tux-status-fuzzy": "Di inzornâ",
+ "tux-status-proofread": "Reviodude",
+ "tux-status-translated": "Tradusût",
+ "tux-status-saving": "Daûr a salvâ...",
+ "tux-status-unsaved": "No ancjemò salvade",
+ "tux-editor-paste-original-button-label": "Copie il test origjinâl",
+ "tux-editor-discard-changes-button-label": "Anule i cambiaments",
+ "tux-editor-save-button-label": "Salve la traduzion",
+ "tux-editor-skip-button-label": "Passe al prossim",
+ "tux-editor-cancel-button-label": "Scancele",
+ "tux-editor-confirm-button-label": "Conferme la traduzion",
+ "tux-editor-shortcut-info": "Frache \"$1\" par salvâ o \"$2\" par passâ al prossim messaç",
+ "tux-editor-edit-desc": "Cambie la documentazion",
+ "tux-editor-add-desc": "Zonte une documentazion",
+ "tux-editor-suggestions-title": "Sugjeriments",
+ "tux-editor-in-other-languages": "In altris lenghis",
+ "tux-editor-need-more-help": "Ti covential un jutori?",
+ "tux-editor-ask-help": "Domande altris informazions",
+ "tux-editor-tm-match": "corispuint al $1%",
+ "tux-notices-more": "$1 {{PLURAL:$1|altri|altris}}",
+ "tux-notices-hide": "plate",
+ "tux-editor-save-failed": "Erôr salvant la traduzion: $1",
+ "tux-editor-n-uses": "doprât $1 {{PLURAL:$1|volte|voltis}}",
+ "tux-editor-message-desc-more": "Viôt di plui",
+ "tux-editor-message-desc-less": "Viôt di mancul",
+ "tux-editor-clear-translated": "Plate tradusûts",
+ "tux-editor-proofreading-mode": "Reviôt",
+ "tux-editor-translate-mode": "Liste",
+ "tux-editor-proofreading-hide-own-translations": "Plate lis tôs traduzions",
+ "tux-editor-proofreading-show-own-translations": "Mostre lis tôs traduzions",
+ "tux-proofread-action-tooltip": "Acete la traduzion",
+ "tux-proofread-edit-label": "Cambie",
+ "tux-editor-page-mode": "Pagjine",
+ "tux-editor-outdated-notice": "Cheste traduzion e podarès vê bisugne di jessi inzornade.",
+ "tux-editor-outdated-notice-diff-link": "Mostre lis difarencis",
+ "tux-editor-doc-editor-placeholder": "Documentazion dal messaç",
+ "tux-editor-doc-editor-save": "Salve la documentazion",
+ "tux-editor-doc-editor-cancel": "Scancele",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|altri messaç|altris messaçs}}",
+ "tux-messagetable-loading-messages": "Daûr a cjamâ $1 {{PLURAL:$1|messaç|messaçs}}...",
+ "tux-message-filter-placeholder": "Filtre la liste",
+ "tux-message-filter-result": "{{PLURAL:$1|Cjatât $1 risultât|Cjatâts $1 risultâts}} par \"$2\"",
+ "tux-message-filter-advanced-button": "Ricercje avanzade",
+ "tux-message-filter-optional-messages-label": "Messaçs opzionâi",
+ "tux-proofread-translated-by-self": "Tradusût di te",
+ "tux-empty-list-all": "Chest grup di messaçs al è vueit",
+ "tux-empty-list-translated": "Nissun messaç tradusût",
+ "tux-empty-list-translated-guide": "Tu puedis judâ a tradusi",
+ "tux-empty-list-translated-action": "Tradûs",
+ "tux-empty-no-messages-to-display": "Nissun messaç di mostrâ.",
+ "tux-empty-show-optional-messages": "Mostre i messaçs opzionâi",
+ "tux-empty-no-outdated-messages": "Nissun messaç di inzornâ",
+ "tux-empty-nothing-to-proofread": "Nuie di reviodi",
+ "tux-empty-list-other": "Nuie di tradusi",
+ "tux-empty-list-other-action": "Reviôt traduzions",
+ "tux-empty-list-other-link": "Mostre ducj i messaçs",
+ "tux-editor-close-tooltip": "Siere",
+ "tux-editor-expand-tooltip": "Slargje",
+ "tux-editor-collapse-tooltip": "Strenç",
+ "tux-editor-message-tools-history": "Storic",
+ "tux-editor-message-tools-translations": "Dutis lis traduzions",
+ "tux-editor-loading": "Daûr a cjamâ…",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|altre lenghe|altris lenghis}}",
+ "translate-statsbar-tooltip": "$1% tradusût, $2% reviodût",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% tradusût, $2% reviodût, $3% di inzornâ",
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|altri grup|altris grups}}"
+}
diff --git a/Translate/i18n/core/fy.json b/Translate/i18n/core/fy.json
new file mode 100644
index 00000000..894b2b28
--- /dev/null
+++ b/Translate/i18n/core/fy.json
@@ -0,0 +1,447 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kening Aldgilles",
+ "PiefPafPier",
+ "Robin van der Vliet",
+ "Robin0van0der0vliet",
+ "Snakesteuben"
+ ]
+ },
+ "translate": "Oersette",
+ "translate-extensionname": "Oersette",
+ "translate-desc": "[[Special:Translate|Bysûndere side]] foar it oersetten fan MediaWiki en mear",
+ "translate-fuzzybot-desc": "Dit is in spesjaal systeemakkount, brûkt troch de [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate oersetútwreiding] fan MediaWiki om oersettings te ûnderhâlden.\nDit akkount is part fan 'e MediaWiki-programmatuer, en it heart net ta oan in meidogger.",
+ "translate-taskui-export-to-file": "Eksportearje yn eigen formaat",
+ "translate-taskui-export-as-po": "Eksportearje foar offline oersetten",
+ "translate-taskui-export-as-csv": "Eksportearje yn CSV-formaat",
+ "translate-export-csv-message-title": "Namme oersetberjocht",
+ "translate-export-csv-definition": "Grûntekst",
+ "translate-taction-translate": "Oersette",
+ "translate-taction-proofread": "Hifkje",
+ "translate-taction-lstats": "Taalstatistiken",
+ "translate-taction-mstats": "Berjochtegroepstatistiken",
+ "translate-taction-export": "Eksportearje",
+ "translate-taction-disabled": "Dizze hanneling is útskeakele op dizze wiki.",
+ "translate-page-no-such-language": "De opjûne taal is ûnjildich.",
+ "translate-page-no-such-group": "De opjûne groep is ûnjildich.",
+ "translate-page-disabled": "Oersettings nei dizze taal yn dizze groep binne útskeakele.\nReden:\n\n<em>$1</em>",
+ "translate-language-disabled": "Oersetten nei dizze taal is útskeakele.",
+ "translate-page-settings-legend": "Ynstellings",
+ "translate-page-group": "Groep",
+ "translate-page-language": "Taal",
+ "translate-page-limit": "Beheining",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|berjocht|berjochten}} de side",
+ "translate-submit": "Ophelje",
+ "translate-page-navigation-legend": "Navigaasje",
+ "translate-page-showing": "De berjochten $1 o/m $2 fan $3 werjûn.",
+ "translate-page-showing-all": "$1 {{PLURAL:$1|berjocht|berjochten}} werjûn.",
+ "translate-page-showing-none": "Gjin berjochten wer te jaan.",
+ "translate-next": "Side fierder",
+ "translate-prev": "Side werom",
+ "translate-page-description-legend": "Ynformaasje oer de groep",
+ "translate-page-description-hasoptional": "Dizze berjochtegroep befettet opsjonele berjochten.\nOpsjonele berjochten moatte inkeld oerset wurde at jo taal bysûndere easken stelt,\nlykas gjin spaasjes brûken of eigennammen transliterearjen. $1",
+ "translate-page-description-hasoptional-open": "Opsjonele berjochten werjaan.",
+ "translate-page-edit": "bewurkje",
+ "translate-optional": "(opsjoneel)",
+ "translate-ignored": "(negearre)",
+ "translate-edit-title": "\"$1\" bewurkje",
+ "translate-edit-definition": "Grûntekst",
+ "translate-edit-contribute": "bydrage",
+ "translate-edit-no-information": "<em>Dit berjocht hat gjin dokumintaasje.\nAt jo witte wêr't of hoe't dit berjocht brûkt wurdt, kinne jo oare oersetters helpe troch dokumintaasje oan dit berjocht ta te heakjen.</em>",
+ "translate-edit-information": "Ynformaasje oer it berjocht ($1)",
+ "translate-edit-warnings": "Warskôgings oer ûnfolsleine oersettings",
+ "translate-edit-tmmatch-source": "Grûntekst oersetting: $1",
+ "translate-edit-tmmatch": "$1% oerienkomst",
+ "translate-edit-nopermission": "Jo binne oersettersrjochten nedich om berjochten oersette te kinnen.",
+ "translate-edit-askpermission": "Tastimming krije",
+ "exporttranslations": "Oersettings eksportearje",
+ "translate-export-form-format": "Formaat",
+ "translate-export-invalid-format": "Graach in jildich formaat oanjaan.",
+ "translate-export-not-supported": "Oersettings eksportearjen wurdt net stipe.",
+ "translate-export-format-notsupported": "It oanjûne eksportformaat wurdt net stipe troch de berjochtegroep.",
+ "translate-export-group-too-large": "De keazen berjochtegroep is te grut. Kies in berjochtegroep dy't minder as $1 {{PLURAL:$1|berjocht|berjochten}} hat of gean by oersettingsbehear te riede.",
+ "translate-checks-parameters": "De neikommende {{PLURAL:$2|parameter is|parameters binne}} net brûkt:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "De neikommende {{PLURAL:$2|parameter is|parameters binne}} net witten:\n<strong>$1</strong>",
+ "translate-checks-balance": "Der is in ûneven tal heakjes fan {{PLURAL:$2|it type|de typen}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "De neikommende {{PLURAL:$2|keppeling jout|$2 keppelings jouwe}} swierrichheden:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "De neikommende {{PLURAL:$2|keppeling mist|$2 keppelings misse}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "De grûntekst brûkt <nowiki>{{PLURAL:}}</nowiki> mar de oersetting net.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> jout {{PLURAL:$1|ien foarm|$1 foarmen}}, mar der {{PLURAL:$2|wurdt inkeld ien|wurde $2}} stipe (útsein de foarmen 0= en 1=).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> hat likense foarmen oan 'e ein. <nowiki>{{PLURAL:$1|skiep|skiep}}</nowiki> moat skreaun wurde as <nowiki>{{PLURAL:$1|skiep}}</nowiki>.",
+ "translate-checks-gettext-plural-missing": "Dizze oersetting moat <nowiki>{{PLURAL:GETTEXT|}}</nowiki> hawwe.",
+ "translate-checks-gettext-plural-unsupported": "Dit berjocht stipet <nowiki>{{PLURAL:GETTEXT|}}</nowiki> net.",
+ "translate-checks-gettext-plural-count": "<nowiki>{{PLURAL:GETTEXT|}}</nowiki> freget krekt $1 {{PLURAL:$1|meartalsfoarm|meartalsfoarmen}}. $2 {{PLURAL:$2|meartalsfoarm is|meartalsfoarmen binne}} no opjûn.",
+ "translate-checks-smartformat-plural-missing": "Dizze oersetting moat meartal by fariabele $1 hawwe.",
+ "translate-checks-smartformat-plural-unsupported": "Dit berjocht stipet meartal by fariabele $1 net.",
+ "translate-checks-smartformat-plural-count": "Ferkeard tal meartalsfoarmen yn <strong>$3</strong>. It moat der $1 hawwe. $2 {{PLURAL:$2|meartalsfoarm is|meartalsfoarmen binne}} no opjûn.",
+ "translate-checks-unicode-plural-missing": "Dizze oersetting moat <nowiki>{{PLURAL|}}</nowiki> hawwe.",
+ "translate-checks-unicode-plural-unsupported": "Dit berjocht stipet <nowiki>{{PLURAL|}}</nowiki> net.",
+ "translate-checks-unicode-plural-invalid": "Meartalsfoarmen moatte skreaun wurde as $1. Dizze oersetting befettet $2.",
+ "translate-checks-pagename": "De nammeromte ferskilt fan 'e grûntekst",
+ "translate-checks-format": "Dizze oersetting folget de grûntekst net of hat ûnjildige syntaks: $1",
+ "translate-checks-escape": "{{PLURAL:$2|It neikommende ûntsnappingsteken kin|De neikommende ûntsnappingstekens kinne}} ûnbedoeld wêze: <strong>$1</strong>. {{PLURAL:$4|In jildich ûntsnappingsteken is|Jildige ûntsnappingstekens binne:}} $3.",
+ "translate-checks-parametersnotequal": "It tal parameters is {{PLURAL:$1|$1}}; moat {{PLURAL:$2|$2}} wêze.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> hat in misse foarm.",
+ "translate-checks-fudforum-syntax": "Brûk yn dit projekt <nowiki>$1</nowiki> yn stee fan <nowiki>$2</nowiki>.",
+ "translate-checks-newline-missing-start": "Der {{PLURAL:$1|mist|misse}} $1 nijrigel-{{PLURAL:$1|teken|tekens}} oan it begjin fan 'e oersetting.",
+ "translate-checks-newline-missing-end": "Der {{PLURAL:$1|mist|misse}} $1 nijrigel-{{PLURAL:$1|teken|tekens}} oan 'e ein fan 'e oersetting.",
+ "translate-checks-newline-extra-start": "Der {{PLURAL:$1|is|binne}} $1 ekstra nijrigel-{{PLURAL:$1|teken|tekens}} oan it begjin fan 'e oersetting.",
+ "translate-checks-newline-extra-end": "Der {{PLURAL:$1|is|binne}} $1 ekstra nijrigel-{{PLURAL:$1|teken|tekens}} oan 'e ein fan 'e oersetting.",
+ "translate-checks-value-not-present": "De oersetting moat lyk wêze oan {{PLURAL:$1|1=|ien fan 'e neikommende wearden:}} $1.",
+ "translate-checks-replacement": "Brûk $2 yn stee fan $1.",
+ "translate-checks-empty": "Oersetten sûnder ynhâld of mei inkeld wytromte is net tastien.",
+ "translate-pref-editassistlang": "Stypjende talen:",
+ "prefs-translate": "Oersetopsjes",
+ "translate-pref-editassistlang-help": "List fan taalkoades, skaat mei komma's.\nBerjochtoersettings yn dy talen, wurde werjûn at jo mei oersetten dwaande binne.\nDe standert talelist wurdt bepaald troch jó taal.",
+ "translate-pref-editassistlang-bad": "Unjildige taalkoade yn 'e list:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Yn de oersetomjouwing bewurkjen",
+ "action-translate": "yn de oersetomjouwing te bewurkjen",
+ "right-translate-manage": "Berjochtegroepen behearen",
+ "action-translate-manage": "berjochtegroepen te behearen",
+ "right-translate-import": "Offline oersettings ymportearjen",
+ "action-translate-import": "offline oersettings te ymportearjen",
+ "right-translate-messagereview": "Oersettings hifkjen",
+ "action-translate-messagereview": "oersettings te hifkjen",
+ "right-translate-groupreview": "De wurkstreamstatus fan berjochtegroepen feroarjen",
+ "action-translate-groupreview": "de wurkstreamstatus fan berjochtegroepen te feroarjen",
+ "translate-rcfilters-translations": "Oersettings",
+ "translate-rcfilters-translations-only-label": "Oersettings",
+ "translate-rcfilters-translations-only-desc": "Wizigings oan oersette siden.",
+ "translate-rcfilters-translations-filter-label": "Gjin oersettings",
+ "translate-rcfilters-translations-filter-desc": "Alle wizigings dy't gjin oersettings binne.",
+ "translate-rcfilters-translations-site-label": "Systeemberjochten",
+ "translate-rcfilters-translations-site-desc": "Oanpassings fan websteeberjochten yn de MediaWiki-nammeromte.",
+ "translate-rc-translation-filter": "Oersettings filterje:",
+ "translate-rc-translation-filter-no": "Neat dwaan",
+ "translate-rc-translation-filter-only": "Allinne oersettings",
+ "translate-rc-translation-filter-filter": "Oersettings weilitte",
+ "translate-rc-translation-filter-site": "Allinne lokale systeemberjochten",
+ "translationstats": "Oersetstatistiken",
+ "translate-stats-edits": "Bewurkings",
+ "translate-stats-users": "Oersetters",
+ "translate-stats-registrations": "Ynskriuwings",
+ "translate-stats-reviews": "Hifkings",
+ "translate-stats-reviewers": "Hifkers",
+ "translate-statsf-intro": "Mei dit formulier kinne jo ienfâldige statistiken generearje.\nAlle wearden hawwe boppe- en ûndergrinzen.",
+ "translate-statsf-options": "Grafykopsjes",
+ "translate-statsf-width": "Breedte yn piksels:",
+ "translate-statsf-height": "Hichte yn piksels:",
+ "translate-statsf-days": "Tiidsperioade yn dagen:",
+ "translate-statsf-start": "Begjindatum:",
+ "translate-statsf-scale": "Granulariteit:",
+ "translate-statsf-scale-years": "Jierren",
+ "translate-statsf-scale-months": "Moannen",
+ "translate-statsf-scale-weeks": "Wiken",
+ "translate-statsf-scale-days": "Dagen",
+ "translate-statsf-scale-hours": "Oeren",
+ "translate-statsf-count": "Mjitting:",
+ "translate-statsf-count-edits": "Tal bewurkings",
+ "translate-statsf-count-users": "Aktive oersetters",
+ "translate-statsf-count-registrations": "Nije meidoggers",
+ "translate-statsf-count-reviews": "Oersethifkings",
+ "translate-statsf-count-reviewers": "Hifkers",
+ "translate-statsf-language": "List fan taalkoades, skaat mei komma's:",
+ "translate-statsf-group": "List fan groepkoades, skaat mei komma's:",
+ "translate-statsf-submit": "Proefbyld",
+ "translate-statsf-unknown-error": "In ûnbekende flater die him foar.",
+ "translate-statsf-error-message": "Der gong wat mis mei it laden fan 'e grafyk: $1",
+ "translate-statsf-graph-alt-text-info": "It tekstalternatyf foar de oersetstatistiken stiet hjirûnder yn 'e datatabel.",
+ "translate-statsf-alt-text": "Dit is it tekstalternatyf foar de oersetstatistiken.",
+ "translate-statsf-embed": "Koade om de grafyk mei oersetstatistiken op oare siden yn te sluten.",
+ "translate-tag-page-desc": "Oersetting fan 'e wikiside [[$2|$1]] fan $3 ($4).",
+ "translate-tag-page-wikipage-desc": "[[$1|Oersetting]] fan 'e wikiside [[$2]] fan <bdi>$3</bdi> ($4) nei <bdi>$5</bdi> ($6)",
+ "translate-sidebar-alltrans": "Yn oare talen",
+ "translations": "Alle oersettings",
+ "translations-summary": "Typ hjirûnder in berjochtnamme, om alle beskikbere oersettings sjen te litten.",
+ "translate-translations-no-message": "\"$1\" is gjin oersetber berjocht",
+ "translate-translations-none": "Der binne gjin oersettings foar \"$1\"",
+ "translate-translations-count": "{{PLURAL:$1|Ien oersetting|$1 oersettings}} fûn.",
+ "translate-translations-fieldset-title": "Berjocht",
+ "translate-translations-messagename": "Namme:",
+ "translate-translations-project": "Projekt:",
+ "translate-translations-including-no-param": "Graach in jildige berjochtnamme as subside-parameter opjaan",
+ "translate-translations-history-short": "s",
+ "languagestats": "Taalstatistiken",
+ "languagestats-summary": "Dizze side lit foar in taal de oersetstatistiken fan alle berjochtegroepen sjen.",
+ "messagegroupstats-summary": "Dizze side lit de berjochtegroepstatistiken sjen.",
+ "languagestats-stats-for": "Oersetstatistiken foar $1 ($2).",
+ "languagestats-recenttranslations": "koartlyn oerset",
+ "translate-langstats-incomplete": "Guon fan 'e statistiken op dizze side binne ûnfolslein. Graach werlade om mear gegevens te krijen.",
+ "translate-langstats-expand": "útklappe",
+ "translate-langstats-collapse": "ynklappe",
+ "translate-langstats-expandall": "alles útklappe",
+ "translate-langstats-collapseall": "alles ynklappe",
+ "translate-language-code": "Taalkoade",
+ "translate-language-code-field-name": "Taalkoade:",
+ "translate-suppress-complete": "Folslein oersette berjochtegroepen weilitte",
+ "translate-ls-noempty": "Folslein ûnoersette berjochtegroepen weilitte",
+ "translate-language": "Taal",
+ "translate-total": "Berjochten",
+ "translate-untranslated": "Unoerset",
+ "translate-percentage-complete": "Folsleinens",
+ "translate-percentage-fuzzy": "Ferâldere",
+ "translate-percentage-proofread": "Hifke",
+ "translate-languagestats-overall": "Al de berjochtegroepen byinoar",
+ "translate-ls-submit": "Statistiken werjaan",
+ "translate-ls-column-group": "Berjochtegroep",
+ "translate-mgs-pagename": "Berjochtegroepstatistiken",
+ "translate-mgs-fieldset": "Werjeftefoarkarren",
+ "translate-mgs-group": "Berjochtegroep:",
+ "translate-mgs-nocomplete": "Folslein oersette talen weilitte",
+ "translate-mgs-noempty": "Folslein ûnoersette talen weilitte",
+ "translate-mgs-submit": "Statistiken werjaan",
+ "translate-mgs-column-language": "Taal",
+ "translate-mgs-totals": "{{PLURAL:$1|Byinoar 1 taal|Al de $1 talen byinoar}}",
+ "translate-mgs-invalid-group": "De opjûne groep $1 bestiet net.",
+ "translate-mgs-nothing": "Neat wer te jaan foar de opfrege statistiken.",
+ "translate-tes-server-error": "Syksuggestjes opheljen mislearre",
+ "translate-tes-group-not-found": "Gjin oerienkommende resultaten",
+ "translate-tes-type-to-search": "Typ om it sykjen te starten",
+ "supportedlanguages": "Talen yn bewurking",
+ "supportedlanguages-summary": "Dizze side lit in list fan alle talen sjen dy't yn bewurking binne op {{GRAMMAR:l|{{SITENAME}}}},\ntegearre mei de nammen fan 'e oersetters foar in beskate taal (nei de klik).\nHoe grutter de namme derút springt, hoe mear bydragen de oersetter levere hat.\nDe kleur fan 'e ûnderstreking jout oan, hoe lang lyn de oersetter warber west hat.",
+ "supportedlanguages-colorlegend": "Leginda foar de kleur: Lêste oersetting $1 dagen lyn.",
+ "supportedlanguages-sqlite-error": "SQLite wurdt net stipe",
+ "supportedlanguages-postgres-error": "PostgreSQL wurdt net stipe",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Oersetter|Oersetster}}|Oersetters}}: $1",
+ "supportedlanguages-recenttranslations": "koartlyn oerset",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|taal|talen}} yn totaal.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|bewurking|bewurkings}} - lêste bewurking $3 {{PLURAL:$3|dei|dagen}} lyn",
+ "translate-supportedlanguages-cached": "Dizze ynformaasje út 'e oerslach is fan $1 lyn.",
+ "translate-activelanguages-invalid-code": "De taalkoade \"$1\" is ûnbekend of foar oersetten net ynskeakele.",
+ "abusefilter-edit-builder-vars-translate-source-text": "Grûntekst fan oersetienheid",
+ "abusefilter-edit-builder-vars-translate-target-language": "Doeltaal fan oersetting",
+ "translate-jssti-add": "Oan list taheakje",
+ "managemessagegroups": "Berjochtegroepbehear",
+ "translate-smg-notallowed": "It is jo net tastien en fier dizze hanneling út.",
+ "translate-smg-nochanges": "Der binne gjin wizigings te ferwurkjen.",
+ "translate-smg-submit": "Wizigings ta ferwurking yntsjinje",
+ "translate-smg-submitted": "De grûnteksten binne bywurke. Wizigings wurde op 'e eftergrûn ferwurke.",
+ "translate-smg-submitted-with-failure": "{{PLURAL:$1|Grûntekst|Grûnteksten}} bywurkjen mislearre foar de neikommende {{PLURAL:$1|groep|groepen}} - $2. $3",
+ "translate-smg-submitted-others-processing": "De grûnteksten foar oare groepen wurde op 'e eftergrûn ferwurke.",
+ "translate-smg-more": "Der binne noch mear wizigings te ferwurkjen nei it yntsjinjen fan dit.",
+ "translate-smg-left": "Berjochtynhâld yn 'e wiki",
+ "translate-smg-right": "Ynkommende wizigings",
+ "translate-smg-rename-select": "Selektearje",
+ "translate-smg-rename-cancel": "Annulearje",
+ "translate-smg-rename-search": "Byhearrend berjocht sykje ...",
+ "translate-smg-rename-select-err": "Graach in berjocht ta omneaming selektearje",
+ "translate-smg-rename-no-msg": "Gjin berjochten fûn.",
+ "translate-smg-rename-new": "Taheakje as nij ...",
+ "translate-smg-rename-rename": "Taheakje as omneaming fan ...",
+ "translate-smg-rename-dialog-title": "Omneaming hearrend by $1 selektearje",
+ "translate-smg-changeset-modified": "De wizigingsset is oanpast troch in oare meidogger of proses. Jo wizigings kinne net fêstlein wurde, om't se dy oare teneate dwaan kinne. Graach de side werlade om de lêste feroarings te besjen.",
+ "translate-smg-no-groups-in-sync": "Der binne no gjin groepen yn syngronisaasje",
+ "translate-smg-strong-sync-help": "Help",
+ "translate-smg-groups-in-sync": "Groepen no yn syngronisaasje",
+ "translate-smg-groups-in-sync-list": "List fan groepen dy't no op 'e eftergrûn ferwurke wurde:",
+ "translate-smg-groups-with-error-title": "Groepen dy't ûnder it syngronisearjen flaters hiene",
+ "translate-smg-groups-with-error-desc": "List fan groepen en harren berjochten dy't ûnder it syngronisearjen flaters hiene:",
+ "translate-smg-group-with-error-summary": "$1 {{PLURAL:$1|berjocht|berjochten}} mei flaters:",
+ "translate-smg-group-message-action-history": "Skiednis",
+ "translate-smg-group-action-resolve": "As oplost merkbite",
+ "translate-smg-group-sync-error-warn": "Dizze groep hie in flater ûnder it syngronisearjen. Ferbetterje de flaters fóár it ferwurkjen fan dizze groep.",
+ "translate-smg-group-message-tag-outdated": "Ferâldere",
+ "translate-smg-group-message-tag-rename": "Omneaming",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|Lebel|Lebels}}:",
+ "translate-smg-group-message-message-content": "Ynhâld:",
+ "translate-smg-group-message-message-target": "Doel:",
+ "translate-smg-group-message-message-replacement": "Ferfanging:",
+ "translate-smg-group-message-message-other-langs": "Oare talen:",
+ "translate-smg-loading": "Laden ...",
+ "translate-smg-unknown-error": "Der wie in ûnbekende flater ûnder it ferwurkjen fan jo oanfraach.",
+ "translate-manage-import-diff": "Berjocht $1 | Hannelings: $2",
+ "translate-manage-import-new": "Nij berjocht $1",
+ "translate-manage-import-deleted": "Wiske berjocht $1",
+ "translate-manage-action-import": "Ymportearje",
+ "translate-manage-action-conflict": "Ymportearje en 'fuzzy' merkbite",
+ "translate-manage-action-ignore": "Negearje",
+ "translate-manage-action-fuzzy": "Ymportearje en oersettings 'fuzzy' merkbite",
+ "translate-manage-action-rename-fuzzy": "Omneame en oersettings 'fuzzy' merkbite",
+ "translate-manage-action-rename": "Omneame",
+ "translate-manage-action-ignore-change": "Oersettingswiziging negearje",
+ "translate-manage-nochanges": "Der binne gjin feroarings yn 'e grûnteksten foar dizze groep.",
+ "translate-manage-nochanges-other": "Der binne gjin feroarings foar dizze taal.\nBrûk de ferwizing hjirûnder om werom te gean nei de werjefte fan groepsgegevens.",
+ "translate-manage-inconsistent": "Ynkonsistinsje yn 'e oanfraach ûntdutsen.\nGraach neisjen ta ferbettering en nochris besykje.\nBysûnderheden: $1.",
+ "translate-manage-toolong": "Oer de maksimumferwurkingstiid fan $1 {{PLURAL:$1|sekonde|sekonden}} hinne.\nGraach it formulier op 'e nij yntsjinje om fierder te ferwurkjen.",
+ "translate-manage-import-summary": "Nije ferzje ymportearre fan boarne om utens",
+ "translate-manage-import-ignore": "Berjocht $1 oerslein.",
+ "translate-manage-import-rename-summary": "Omneamd yn boarne om utens",
+ "translate-manage-conflict-summary": "Nije ferzje ymportearre fan boarne om utens.\nGraach neisjen.",
+ "translate-manage-submit": "Utfiere",
+ "translate-manage-intro-other": "Hjirûnder stiet in list fan oersettingswizigings yn 'e taal $1.\nSjoch de wizigings nei, en kies foar alle nije ferzjes de hanneling dy't jo útfiere wolle.\nAt jo kieze om wizigings te negearjen, dan jildt dat inkeld tydlik foar no.",
+ "translate-manage-import-ok": "Ymportearre: $1",
+ "translate-manage-import-done": "Ymport slagge!",
+ "translate-manage-empty-content": "Ynhâld is leech",
+ "translate-manage-key-reused": "Dit berjocht bestiet al yn 'e wiki. Besjoch oft der in âlde namme by fersin werbrûkt is.",
+ "translate-manage-source-message-not-found": "Grûntekst net fûn",
+ "importtranslations": "Oersettings ymportearje",
+ "translate-import-from-local": "Opladen lokaal bestân:",
+ "translate-import-load": "Bestân lade",
+ "translate-import-err-dl-failed": "Bestân opheljen mislearre:\n$1",
+ "translate-import-err-ul-failed": "Bestân opladen mislearre",
+ "translate-import-err-invalid-title": "De opjûne bestânsnamme <nowiki>$1</nowiki> is ûnjildich.",
+ "translate-import-err-no-such-file": "It bestân <nowiki>$1</nowiki> bestiet net of is net lokaal opladen.",
+ "translate-import-err-stale-group": "De berjochtegroep dêr't dat bestân ta heart bestiet net.",
+ "translate-import-err-no-headers": "Dat is gjin goed Gettext-bestân yn it formaat fan 'e oersetútwreiding:\nKin de berjochtegroep en taal net fêststelle út 'e bestânskoppen.",
+ "translate-js-support-unsaved-warning": "Jo hawwe net-bewarre oersettings.",
+ "translate-gs-pos": "Plak",
+ "translate-gs-code": "Koade",
+ "translate-gs-continent": "Wrâlddiel",
+ "translate-gs-speakers": "Sprekkers",
+ "translate-gs-score": "Skoare",
+ "translate-gs-multiple": "Ferskate",
+ "translate-gs-count": "Tal",
+ "translate-gs-total": "Totaal",
+ "translate-gs-avgscore": "Middelskoare",
+ "translate-documentation-language": "Berjochtdokumintaasje",
+ "translate-searchprofile": "Oersettings",
+ "translate-searchprofile-tooltip": "Alle oersettings trochsykje",
+ "translate-searchprofile-note": "Mear sykopsjes binne beskikber mei [$1 de sykfunksje foar oersettings].",
+ "translate-search-languagefilter": "Taalfilter:",
+ "translate-search-nofilter": "Net filterje",
+ "log-name-translationreview": "Oersettingshifkloch",
+ "log-description-translationreview": "Loch fan alle hifkings oangeande oersettings en berjochtegroepen.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|hat}} de oersetting $3 hifke",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|hat}} fan 'e oersettings $4 fan $3, de status feroare fan $6 yn $7",
+ "group-translate-sandboxed": "Net-goedkarde oersetters",
+ "group-translate-sandboxed-member": "net-goedkarde {{GENDER:$1|oersetter|oersetster}}",
+ "right-translate-sandboxmanage": "Sânbakmeidoggers behearen",
+ "action-translate-sandboxmanage": "sânbakmeidoggers te behearen",
+ "right-translate-sandboxaction": "Foar sânbakmeidoggers tastiene hannelings útfieren",
+ "action-translate-sandboxaction": "foar sânbakmeidoggers tastiene hannelings út te fieren",
+ "translate-workflow-state-": "(net ynsteld)",
+ "translate-workflowstatus": "Status: $1",
+ "translate-workflow-set-doing": "Ynstellen ...",
+ "translate-workflow-autocreated-summary": "Automatysk oanmakke side foar wurkstreamstatus $1",
+ "translate-stats-workflow": "Status",
+ "translate-workflowgroup-label": "Wurkstreamstatussen",
+ "translate-workflowgroup-desc": "Dizze berjochtegroep lit de statussen fan 'e oersetwurkstream sjen.\nDe statussen wurde definiearre yn 'e konfiguraasjefariabele $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Koartlyn oerset",
+ "translate-dynagroup-recent-desc": "Dizze berjochtegroep lit al de oersettings nei dizze taal fan okkerdeis sjen.\nBenammen brûkber foar it hifkwurk.",
+ "translate-dynagroup-additions-label": "Koartlyn taheakke",
+ "translate-dynagroup-additions-desc": "Dizze berjochtegroep lit de nije en feroare berjochten sjen.",
+ "translate-msggroupselector-projects": "Berjochtegroep",
+ "translate-msggroupselector-search-placeholder": "Groepen sykje",
+ "translate-msggroupselector-search-all": "Alles",
+ "translate-msggroupselector-search-recent": "Koartlyn",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|subgroep|subgroepen}}",
+ "tux-languageselector": "Oersette nei",
+ "tux-select-target-language": "Doeltaal fan oersetting",
+ "tux-tab-all": "Alles",
+ "tux-tab-untranslated": "Unoerset",
+ "tux-tab-outdated": "Ferâldere",
+ "tux-tab-translated": "Oerset",
+ "tux-tab-unproofread": "Net-hifke",
+ "tux-edit": "Bewurkje",
+ "tux-status-optional": "Opsjoneel",
+ "tux-status-fuzzy": "Ferâldere",
+ "tux-status-proofread": "Hifke",
+ "tux-status-translated": "Oerset",
+ "tux-status-saving": "Bewarjen ...",
+ "tux-status-unsaved": "Net bewarre",
+ "tux-save-unknown-error": "In ûnbekende flater die him foar.",
+ "tux-editor-placeholder-documentation": "Heakje berjochtdokumintaasje ta",
+ "tux-editor-placeholder-language": "Jo oersetting yn it $1",
+ "tux-editor-editsummary-placeholder": "Jo wizigings taljochtsje (opsjoneel)",
+ "tux-editor-paste-original-button-label": "Grûntekst plakke",
+ "tux-editor-discard-changes-button-label": "Wizigings fuortsmite",
+ "tux-editor-save-button-label": "Oersetting bewarje",
+ "tux-editor-skip-button-label": "Oerslaan en fierder",
+ "tux-editor-cancel-button-label": "Annulearje",
+ "tux-editor-confirm-button-label": "Oersetting befêstigje",
+ "tux-editor-proofread-button-label": "As hifke merkbite",
+ "tux-editor-shortcut-info": "Druk \"$1\" ta befêstiging en folgjend berjocht, \"$2\" is oerslaan, \"$4\" gearfetting jaan, of hâld \"$3\" yndrukt foar oare fluchtoetsen.",
+ "tux-editor-edit-desc": "Dokumintaasje bewurkje",
+ "tux-editor-add-desc": "Dokumintaasje taheakje",
+ "tux-editor-suggestions-title": "Suggestjes",
+ "tux-editor-latest-updates-title": "Lêste oanpassings",
+ "tux-editor-changes-without-summary": "$1 {{PLURAL:$1|oanpassing|oanpassings}} sûnder gearfetting",
+ "tux-editor-all-changes": "Alle wizigings",
+ "tux-editor-in-other-languages": "Yn oare talen",
+ "tux-editor-need-more-help": "Mear help nedich?",
+ "tux-editor-ask-help": "Freegje mear ynformaasje",
+ "tux-editor-tm-match": "$1% oerienkomst",
+ "tux-notices-more": "{{PLURAL:$1|noch $1}}",
+ "tux-notices-hide": "ferbergje",
+ "tux-editor-save-failed": "Oersetting bewarjen mislearre: $1",
+ "tux-editor-n-uses": "$1 {{PLURAL:$1|kear}} brûkt",
+ "tux-editor-message-desc-more": "Mear sjen",
+ "tux-editor-message-desc-less": "Minder sjen",
+ "tux-editor-clear-translated": "Oerset ferbergje",
+ "tux-editor-proofreading-mode": "Hifkje",
+ "tux-editor-translate-mode": "List",
+ "tux-editor-proofreading-hide-own-translations": "Jo oersettings ferbergje",
+ "tux-editor-proofreading-show-own-translations": "Jo oersettings werjaan",
+ "tux-proofread-action-tooltip": "As hifke merkbite",
+ "tux-proofread-edit-label": "Bewurkje",
+ "tux-editor-page-mode": "Side",
+ "tux-editor-outdated-notice": "Dizze oersetting moat faaks bywurke wurde.",
+ "tux-editor-outdated-notice-diff-link": "Ferskillen werjaan",
+ "tux-editor-doc-editor-placeholder": "Berjochtdokumintaasje",
+ "tux-editor-doc-editor-save": "Dokumintaasje bewarje",
+ "tux-editor-doc-editor-cancel": "Annulearje",
+ "tux-messagetable-more-messages": "Noch $1 {{PLURAL:$1|berjocht|berjochten}}",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|Berjocht|Berjochten}} laden ...",
+ "tux-message-filter-placeholder": "List filterje",
+ "tux-message-filter-result": "$1 {{PLURAL:$1|treffer|treffers}} fûn foar \"$2\"",
+ "tux-message-filter-advanced-button": "Utwreidich sykje",
+ "tux-message-filter-optional-messages-label": "Opsjonele berjochten",
+ "tux-proofread-translated-by-self": "Oerset troch jo",
+ "tux-empty-list-all": "Dizze berjochtegroep is leech",
+ "tux-empty-list-all-guide": "Selektearje in oare berjochtegroep om oer te setten",
+ "tux-translate-page-no-such-group": "<strong>De oanjûne groep bestiet net.</strong> Selektearje in oare berjochtegroep.",
+ "tux-empty-list-translated": "Gjin oersette berjochten",
+ "tux-empty-list-translated-guide": "Jo kinne helpe mei oersetten",
+ "tux-empty-list-translated-action": "Oersette",
+ "tux-empty-no-messages-to-display": "Gjin berjochten wer te jaan.",
+ "tux-empty-there-are-optional": "Der binne opsjonele berjochten dy't net yn 'e list werjûn wurde",
+ "tux-empty-show-optional-messages": "Opsjonele berjochten werjaan",
+ "tux-empty-no-outdated-messages": "Gjin ferâldere berjochten",
+ "tux-empty-nothing-to-proofread": "Neat te hifkjen",
+ "tux-empty-you-can-help-providing": "Jo kinne helpe troch nije oersettings te jaan",
+ "tux-empty-nothing-new-to-proofread": "Neat nijs om te hifkjen",
+ "tux-empty-you-can-review-already-proofread": "Jo kinne oersettings hifkje dy't oaren ek hifke hawwe.",
+ "tux-empty-list-other": "Neat oer te setten",
+ "tux-empty-list-other-guide": "Jo kinne helpe mei hifkjen fan 'e besteande oersettings",
+ "tux-empty-list-other-action": "Oersettings hifkje",
+ "tux-empty-list-other-link": "Alle berjochten werjaan",
+ "tux-editor-close-tooltip": "Slute",
+ "tux-editor-expand-tooltip": "Utklappe",
+ "tux-editor-collapse-tooltip": "Ynklappe",
+ "tux-editor-message-tools-show-editor": "Yn wikibewurker werjaan",
+ "tux-editor-message-tools-history": "Skiednis",
+ "tux-editor-message-tools-delete": "Wiskje",
+ "tux-editor-message-tools-translations": "Alle oersettings",
+ "tux-editor-message-tools-linktothis": "Keppeling nei dit berjocht",
+ "tux-editor-loading": "Laden ...",
+ "tux-editor-loading-failed": "Laden fan oersethelpmiddels mislearre: $1",
+ "translate-search-more-languages-info": "Noch $1 {{PLURAL:$1|taal|talen}}",
+ "translate-statsbar-tooltip": "$1% oerset, $2% hifke",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% oerset, $2% hifke, $3% ferâldere",
+ "translate-search-more-groups-info": "Noch $1 {{PLURAL:$1|groep|groepen}}",
+ "translate-syntax-error": "De oersetting befettet syntaksflaters",
+ "tux-session-expired": "Jo binne net mear ynlogd. Meld jo oan yn in oar tabblêd. Of meitsje oars in kopy fan 'e net-bewarre oersettings, meld jo oan, gean werom nei dizze side en fier jo oersettings wer yn.",
+ "tux-nojs": "Dit ark wurket net sûnder JavaScript. JavaScript is útskeakele, makket flaters, of dizze webblêder wurdt net stipe.",
+ "specialpages-group-translation": "Oersetten",
+ "content-model-translate-messagebundle": "Oersetbere berjochtebondel",
+ "translate-messagebundle-validation-error": "Unjildige berjochtebondel: $1",
+ "translate-messagebundle-error-parsing": "Flater by it opdielen fan 'e JSON: $1",
+ "translate-messagebundle-error-invalid-array": "De berjochtebondel moat in JSON-objekt wêze. Krige it type $1",
+ "translate-messagebundle-error-key-empty": "De berjochtebondel mei gjin blanko namme befetsje",
+ "translate-messagebundle-error-key-too-long": "De namme \"$1\" is te lang",
+ "translate-messagebundle-error-key-invalid-characters": "De namme \"$1\" befettet net-tastiene tekens",
+ "translate-messagebundle-error-invalid-value": "De namme \"$1\" befettet gjin tekenrige as wearde",
+ "translate-messagebundle-error-empty-value": "De namme \"$1\" befettet gjin wearde",
+ "translate-messagebundle-error-metadata-type": "De metadata moat in groepsrige wêze.",
+ "translate-messagebundle-error-invalid-metadata": "It metadatapart befettet in ûnbekende namme: \"$1\". Stipe nammen binne $2.",
+ "translate-messagebundle-error-invalid-sourcelanguage": "De taalkoade fan 'e boarne \"$1\" wurdt net stipe.",
+ "translate-messagebundle-error-invalid-prioritylanguage": "Unjildige {{PLURAL:$2|koade fan taal|koades fan talen}} mei prioriteit yn 'e metadata: $1",
+ "translate-messagebundle-error-invalid-prioritylanguage-format": "Unjildige opmaak fan talen mei prioriteit yn 'e metadata. Talen mei prioriteit moatte in groepsrige fan tekenrigen wêze.",
+ "translate-messagebundle-group-description": "Berjochten fan in berjochtebondel definiearre op 'e side [[$2|$1]].",
+ "translate-messagebundle-change-sourcelanguage": "Boarnetaal fan 'e berjochtebondel ynsteld neffens metadata.",
+ "translate-messagebundle-sourcelanguage-changed": "De boarnetaal fan in berjochtebondel kin net wizige wurde nei't er al oanmakke is.",
+ "log-action-filter-translationreview": "Type fan hanneling:",
+ "log-action-filter-translationreview-message": "Hifkjen fan ôfsûnderlike oersetberjochten",
+ "log-action-filter-translationreview-group": "Statuswizigings fan 'e oersettingsfuortgong"
+}
diff --git a/Translate/i18n/core/ga.json b/Translate/i18n/core/ga.json
new file mode 100644
index 00000000..34e52f57
--- /dev/null
+++ b/Translate/i18n/core/ga.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alison",
+ "BaRaN6161 TURK",
+ "MinecraftAustralia",
+ "Moilleadóir",
+ "පසිඳු කාවින්ද"
+ ]
+ },
+ "translate-taction-translate": "Aistrigh",
+ "translate-page-settings-legend": "Sainroghanna",
+ "translate-page-group": "Ghrúpa",
+ "translate-page-language": "Teanga",
+ "translate-submit": "Faigh",
+ "translate-page-navigation-legend": "Nascleanúint",
+ "translate-statsf-scale-days": "Lae",
+ "translate-statsf-scale-hours": "Uaire",
+ "translate-statsf-submit": "Réamhamharc",
+ "translate-translations-fieldset-title": "Teachtaireacht",
+ "translate-translations-messagename": "Ainm:",
+ "translate-language": "Teanga"
+}
diff --git a/Translate/i18n/core/gaa.json b/Translate/i18n/core/gaa.json
new file mode 100644
index 00000000..6f3da63b
--- /dev/null
+++ b/Translate/i18n/core/gaa.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chivano"
+ ]
+ },
+ "translate-documentation-language": "Shiɛmɔ he saneŋmaa"
+}
diff --git a/Translate/i18n/core/gcr.json b/Translate/i18n/core/gcr.json
new file mode 100644
index 00000000..bff13ad9
--- /dev/null
+++ b/Translate/i18n/core/gcr.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "LeGuyanaisPure",
+ "Léon973"
+ ]
+ },
+ "translate-edit-contribute": "kontribiyé",
+ "translate-manage-import-new": "Mésaj nòv $1",
+ "translate-documentation-language": "Dokimantasyon di mésaj",
+ "tux-editor-save-button-label": "Anréjistré anmòrfrézaj-a"
+}
diff --git a/Translate/i18n/core/gd.json b/Translate/i18n/core/gd.json
new file mode 100644
index 00000000..96f920aa
--- /dev/null
+++ b/Translate/i18n/core/gd.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "GunChleoc"
+ ]
+ },
+ "translate-documentation-language": "Treòir eadar-theangachaidh"
+}
diff --git a/Translate/i18n/core/gl.json b/Translate/i18n/core/gl.json
new file mode 100644
index 00000000..07d413ed
--- /dev/null
+++ b/Translate/i18n/core/gl.json
@@ -0,0 +1,347 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alma",
+ "ArenaL5",
+ "Banjo",
+ "Elisardojm",
+ "Fitoschido",
+ "Gallaecio",
+ "Iváns",
+ "Toliño",
+ "Xosé"
+ ]
+ },
+ "translate": "Traducir",
+ "translate-desc": "[[Special:Translate|Páxina especial]] para traducir MediaWiki e outras extensións",
+ "translate-fuzzybot-desc": "Esta é unha conta de sistema especial usada pola extensión de [https://www.mediawiki.org/wiki/Extension:Translate Tradución] de MediaWiki para manter as traducións.\nEsta conta é parte do software MediaWiki e non pertence a ningún usuario.",
+ "translate-taskui-export-to-file": "Exportar en formato nativo",
+ "translate-taskui-export-as-po": "Exportar para traducir sen conexión",
+ "translate-taction-translate": "Traducir",
+ "translate-taction-proofread": "Revisar",
+ "translate-taction-lstats": "Estatísticas da lingua",
+ "translate-taction-mstats": "Estatísticas dos grupos de mensaxes",
+ "translate-taction-export": "Exportar",
+ "translate-taction-disabled": "A acción está desactivada neste wiki.",
+ "translate-page-no-such-language": "O código de lingua especificado non é válido.",
+ "translate-page-no-such-group": "O grupo especificado non é válido.",
+ "translate-page-disabled": "As traducións a esta lingua neste grupo están desactivadas.\nMotivo:\n\n<em>$1</em>",
+ "translate-language-disabled": "As traducións nesta lingua están desactivadas.",
+ "translate-page-settings-legend": "Configuracións",
+ "translate-page-group": "Grupo",
+ "translate-page-language": "Lingua",
+ "translate-page-limit": "Límite",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|mensaxe|mensaxes}} por páxina",
+ "translate-submit": "Amosar",
+ "translate-page-navigation-legend": "Navegación",
+ "translate-page-showing": "Amosando as mensaxes da $1 á $2, dun total de $3.",
+ "translate-page-showing-all": "Amosando {{PLURAL:$1|unha mensaxe|$1 mensaxes}}.",
+ "translate-page-showing-none": "Non hai ningunha mensaxe que amosar.",
+ "translate-next": "Páxina seguinte",
+ "translate-prev": "Páxina anterior",
+ "translate-page-description-legend": "Información acerca do grupo",
+ "translate-page-description-hasoptional": "Este grupo de mensaxes contén mensaxes opcionais.\nAs mensaxes opcionais só se deberían traducir cando a lingua teña necesidades especiais,\ncomo non empregar espazos ou para a transliteración de nomes propios. $1",
+ "translate-page-description-hasoptional-open": "Amosar as mensaxes opcionais.",
+ "translate-page-edit": "editar",
+ "translate-optional": "(opcional)",
+ "translate-ignored": "(ignorado)",
+ "translate-edit-title": "Editar \"$1\"",
+ "translate-edit-definition": "Definición da mensaxe",
+ "translate-edit-contribute": "contribuír",
+ "translate-edit-no-information": "<em>Esta mensaxe non ten documentación.\nSe sabe onde ou como se usa esta mensaxe, pode axudar aos outros tradutores engadíndolle datos.</em>",
+ "translate-edit-information": "Información acerca da mensaxe ($1)",
+ "translate-edit-warnings": "Avisos acerca de traducións incompletas",
+ "translate-edit-tmmatch-source": "Texto fonte da tradución: $1",
+ "translate-edit-tmmatch": "$1% de coincidencia",
+ "translate-edit-nopermission": "Necesita ter os dereitos de tradución para traducir mensaxes.",
+ "translate-edit-askpermission": "Obter os permisos",
+ "exporttranslations": "Exportar traducións",
+ "translate-export-form-format": "Formato",
+ "translate-export-invalid-format": "Por favor, especifique un formato válido.",
+ "translate-export-not-supported": "A exportación de traducións non está soportada.",
+ "translate-export-format-notsupported": "O grupo de mensaxes non soporta o formato de exportación especificado.",
+ "translate-checks-parameters": "{{PLURAL:$2|Non se emprega o seguinte parámetro|Non se empregan os seguintes parámetros}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Descoñécese o seguinte parámetro|Descoñécense os seguintes parámetros}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "Hai unha cantidade irregular de {{PLURAL:$2|parénteses|parénteses}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|A seguinte ligazón é problemática|As seguintes ligazóns son problemáticas}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Falta a seguinte ligazón|Faltan as seguintes $2 ligazóns}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "A definición usa <nowiki>{{PLURAL:}}</nowiki>, pero a tradución non.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> recibiu {{PLURAL:$1|unha forma|$1 formas}} de plural, pero unicamente {{PLURAL:$2|está soportada unha forma|están soportadas $2 formas}} (excluíndo as formas 0= e 1=).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> ten formas de plural duplicadas ao final. <nowiki>{{PLURAL:$1|lapis|lapis}}</nowiki> debe escribirse así: <nowiki>{{PLURAL:$1|lapis}}</nowiki>.",
+ "translate-checks-pagename": "O espazo de nomes é diferente con respecto ao presente na definición",
+ "translate-checks-format": "Esta tradución non segue a definición ou ten unha sintaxe non válida: $1",
+ "translate-checks-escape": "As seguintes secuencias de escape poden ser accidentais: <strong>$1</strong>",
+ "translate-checks-parametersnotequal": "O número de parámetros é {{PLURAL:$1|$1}}, cando {{PLURAL:$2|debe ser $2|deben ser $2}}.",
+ "translate-checks-malformed": "\"<nowiki>$1</nowiki>\" ten un formato incorrecto.",
+ "translate-checks-fudforum-syntax": "Use <nowiki>$1</nowiki> no canto de <nowiki>$2</nowiki> neste proxecto.",
+ "translate-pref-editassistlang": "Linguas axudantes:",
+ "prefs-translate": "Opcións de tradución",
+ "translate-pref-editassistlang-help": "Lista de códigos de linguas separados por comas.\nMóstranse as traducións dunha mensaxe nestas linguas cando a traduce.\nA lista de linguas por defecto depende da súa.",
+ "translate-pref-editassistlang-bad": "Código de lingua inválido:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Editar usando a interface de tradución",
+ "right-translate-manage": "Xestionar os grupos de mensaxes",
+ "action-translate-manage": "xestionar os grupos de mensaxes",
+ "right-translate-import": "Importar as traducións sen conexión",
+ "action-translate-import": "importar as traducións sen conexión",
+ "right-translate-messagereview": "Revisar as traducións",
+ "action-translate-messagereview": "revisar traducións",
+ "right-translate-groupreview": "Cambiar o estado do fluxo de traballo dos grupos de mensaxes",
+ "action-translate-groupreview": "modificar o estado do fluxo de traballo dos grupos de mensaxes",
+ "translate-rcfilters-translations": "Traducións",
+ "translate-rcfilters-translations-only-label": "Traducións",
+ "translate-rcfilters-translations-only-desc": "Cambios realizados nas páxinas traducidas.",
+ "translate-rcfilters-translations-filter-label": "Non traducións",
+ "translate-rcfilters-translations-filter-desc": "Tódolos cambios que non son traducións.",
+ "translate-rcfilters-translations-site-label": "Mensaxes de sistema",
+ "translate-rcfilters-translations-site-desc": "Personalizacións ás mensaxes de sistema no espazo de nomes MediaWiki.",
+ "translate-rc-translation-filter": "Filtrar as traducións:",
+ "translate-rc-translation-filter-no": "Non facer nada",
+ "translate-rc-translation-filter-only": "Amosar só as traducións",
+ "translate-rc-translation-filter-filter": "Amosar o que non sexan traducións",
+ "translate-rc-translation-filter-site": "Amosar só os cambios nas mensaxes do sitio",
+ "translationstats": "Estatísticas das traducións",
+ "translate-stats-edits": "Edicións",
+ "translate-stats-users": "Tradutores",
+ "translate-stats-registrations": "Rexistros",
+ "translate-stats-reviews": "Revisións",
+ "translate-stats-reviewers": "Revisores",
+ "translate-statsf-intro": "Pode xerar estatísticas de forma sinxela con este formulario. Todos os valores teñen límites máximos e mínimos.",
+ "translate-statsf-options": "Opcións da gráfica",
+ "translate-statsf-width": "Largo en píxeles:",
+ "translate-statsf-height": "Altura en píxeles:",
+ "translate-statsf-days": "Período de tempo en días:",
+ "translate-statsf-start": "Data de inicio:",
+ "translate-statsf-scale": "Escala:",
+ "translate-statsf-scale-months": "Meses",
+ "translate-statsf-scale-weeks": "Semanas",
+ "translate-statsf-scale-days": "Días",
+ "translate-statsf-scale-hours": "Horas",
+ "translate-statsf-count": "Medida:",
+ "translate-statsf-count-edits": "Número de edicións",
+ "translate-statsf-count-users": "Tradutores activos",
+ "translate-statsf-count-registrations": "Novos usuarios",
+ "translate-statsf-count-reviews": "Revisións das traducións",
+ "translate-statsf-count-reviewers": "Revisores",
+ "translate-statsf-language": "Lista de códigos de lingua (separados por comas):",
+ "translate-statsf-group": "Lista de códigos de grupos de mensaxes (separados por comas):",
+ "translate-statsf-submit": "Vista previa",
+ "translate-tag-page-desc": "Tradución da páxina wiki \"[[$2|$1]]\" en $3 ($4).",
+ "translate-sidebar-alltrans": "Noutras linguas",
+ "translations": "Todas as traducións",
+ "translations-summary": "Escriba o nome dunha mensaxe para ver todas as traducións dispoñibles.",
+ "translate-translations-no-message": "\"$1\" non é unha mensaxe que se poida traducir",
+ "translate-translations-none": "Non hai traducións da mensaxe \"$1\"",
+ "translate-translations-count": "{{PLURAL:$1|Existe unha tradución|Existen $1 traducións}}.",
+ "translate-translations-fieldset-title": "Mensaxe",
+ "translate-translations-messagename": "Nome:",
+ "translate-translations-project": "Proxecto:",
+ "translate-translations-including-no-param": "Por favor, especifique unha clave de mensaxe válida no parámetro da subpáxina",
+ "translate-translations-history-short": "h",
+ "languagestats": "Estatísticas da lingua",
+ "languagestats-summary": "Esta páxina amosa as estatísticas de tradución dos grupos de mensaxes dunha lingua.",
+ "messagegroupstats-summary": "Esta páxina amosa as estatísticas dos grupos de mensaxes.",
+ "languagestats-stats-for": "Estatísticas das traducións en $1 ($2).",
+ "languagestats-recenttranslations": "traducións recentes",
+ "translate-langstats-incomplete": "Algunhas das estatísticas desta páxina están incompletas. Recargue a páxina para ollar máis estatísticas.",
+ "translate-langstats-expand": "expandir",
+ "translate-langstats-collapse": "contraer",
+ "translate-langstats-expandall": "expandir todo",
+ "translate-langstats-collapseall": "contraer todo",
+ "translate-language-code": "Código da lingua",
+ "translate-language-code-field-name": "Código da lingua:",
+ "translate-suppress-complete": "Omitir os grupos de mensaxes completamente traducidos",
+ "translate-ls-noempty": "Omitir os grupos de mensaxes sen tradución iniciada",
+ "translate-language": "Lingua",
+ "translate-total": "Mensaxes",
+ "translate-untranslated": "Sen traducir",
+ "translate-percentage-complete": "Completadas",
+ "translate-percentage-fuzzy": "Anticuadas",
+ "translate-languagestats-overall": "Todos os grupos de mensaxes xuntos",
+ "translate-ls-submit": "Amosar as estatísticas",
+ "translate-ls-column-group": "Grupo de mensaxes",
+ "translate-mgs-pagename": "Estatísticas dos grupos de mensaxes",
+ "translate-mgs-fieldset": "Amosar as preferencias",
+ "translate-mgs-group": "Grupo de mensaxes:",
+ "translate-mgs-nocomplete": "Non amosar as linguas que teñen a tradución completa",
+ "translate-mgs-noempty": "Non amosar as linguas que non teñen ningunha tradución",
+ "translate-mgs-submit": "Amosar as estatísticas",
+ "translate-mgs-column-language": "Lingua",
+ "translate-mgs-totals": "$1 {{PLURAL:$1|lingua|linguas}} en total",
+ "translate-mgs-invalid-group": "O grupo especificado, \"$1\", non existe.",
+ "translate-mgs-nothing": "Non hai nada que amosar para as estatísticas solicitadas.",
+ "supportedlanguages": "Linguas admitidas",
+ "supportedlanguages-summary": "Esta páxina amosa unha lista de tódalas linguas soportadas por {{SITENAME}},\nasí como os nomes dos tradutores que traballan nelas.\nCantas máis contribucións fixese un usuario, máis grande aparecerá o seu nome.\nA cor do suliñado indica como de activo estivo o tradutor recentemente.",
+ "supportedlanguages-colorlegend": "Lenda das cores: Última tradución hai $1 días.",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Tradutor|Tradutora}}|Tradutores}}: $1",
+ "supportedlanguages-recenttranslations": "traducións recentes",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|lingua|linguas}} en total.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|edición|edicións}}; última edición hai $3 {{PLURAL:$3|día|días}}",
+ "abusefilter-edit-builder-vars-translate-source-text": "Texto de orixe da unidade de traducción",
+ "translate-jssti-add": "Engadir á lista",
+ "managemessagegroups": "Xestión dos grupos de mensaxes",
+ "translate-smg-notallowed": "Non che está permitido facer esta acción.",
+ "translate-smg-nochanges": "Non hai cambio ningún que procesar.",
+ "translate-smg-submit": "Enviar os cambios para procesalos",
+ "translate-smg-submitted": "Actualizáronse as definicións das mensaxes. Os cambios estanse procesando en segundo plano.",
+ "translate-smg-more": "Haberá máis modificacións que procesar despois de enviar estes cambios.",
+ "translate-smg-left": "Contido da mensaxe no wiki",
+ "translate-smg-right": "Cambios entrantes",
+ "translate-manage-import-diff": "Mensaxe $1 | Accións: $2",
+ "translate-manage-import-new": "Nova mensaxe $1",
+ "translate-manage-import-deleted": "Mensaxe borrada $1",
+ "translate-manage-action-import": "Importar",
+ "translate-manage-action-conflict": "Importar e incluír a marca fuzzy",
+ "translate-manage-action-ignore": "Ignorar",
+ "translate-manage-action-fuzzy": "Importar e incluír a marca fuzzy nas traducións",
+ "translate-manage-nochanges": "Non hai cambios nas definicións das mensaxes neste grupo.",
+ "translate-manage-nochanges-other": "Non houbo cambios nesta lingua.\nUse a ligazón de embaixo para volver á vista dos detalles do grupo.",
+ "translate-manage-inconsistent": "Detectouse unha inconsistencia na solicitude.\nPor favor, comprobe os cambios e inténteo de novo. Detalles: $1.",
+ "translate-manage-toolong": "Excedeuse do máximo tempo de procesamento de $1 {{PLURAL:$1|segundo|segundos}}.\nPor favor, reenvíe o formulario para continuar procesando.",
+ "translate-manage-import-summary": "Importando unha nova versión desde unha fonte externa",
+ "translate-manage-import-ignore": "Saltando a mensaxe $1.",
+ "translate-manage-conflict-summary": "Importando unha nova versión desde unha fonte externa. Por favor, compróbea.",
+ "translate-manage-submit": "Executar",
+ "translate-manage-intro-other": "A continuación está a lista de cambios nas traducións en $1.\nPor favor, revise os cambios e escolla a acción que quere facer para cada actualización.\nSe opta por ignorar as modificacións, esta acción é unicamente temporal.",
+ "translate-manage-import-ok": "Importada: $1",
+ "translate-manage-import-done": "Completouse a importación!",
+ "importtranslations": "Importar as traducións",
+ "translate-import-from-local": "Carga dun ficheiro local:",
+ "translate-import-load": "Cargar o ficheiro",
+ "translate-import-err-dl-failed": "Non se pode acceder ao ficheiro:\n$1",
+ "translate-import-err-ul-failed": "Fallou a suba do ficheiro",
+ "translate-import-err-invalid-title": "O nome de ficheiro proporcionado \"<nowiki>$1</nowiki>\" é inválido.",
+ "translate-import-err-no-such-file": "O ficheiro \"<nowiki>$1</nowiki>\" non existe ou non foi cargado localmente.",
+ "translate-import-err-stale-group": "O grupo de mensaxes ao que pertence este ficheiro non existe.",
+ "translate-import-err-no-headers": "O ficheiro non é un ficheiro Gettext ben formado co formato da extensión Translate:\nnon se poden determinar o grupo e a lingua a partir das cabeceiras do ficheiro.",
+ "translate-js-support-unsaved-warning": "Ten algunha tradución sen publicar.",
+ "translate-gs-pos": "Pos.",
+ "translate-gs-code": "Código",
+ "translate-gs-continent": "Continente",
+ "translate-gs-speakers": "Falantes",
+ "translate-gs-score": "Puntuación",
+ "translate-gs-multiple": "Múltiples",
+ "translate-gs-count": "Conta",
+ "translate-gs-total": "Total",
+ "translate-gs-avgscore": "Puntuación media",
+ "translate-documentation-language": "documentación das mensaxes",
+ "translate-searchprofile": "Traducións",
+ "translate-searchprofile-tooltip": "Procurar en todas as traducións",
+ "translate-searchprofile-note": "Hai dispoñibles máis opcións de procura coa [$1 procura de traducións].",
+ "translate-search-languagefilter": "Filtrar por lingua:",
+ "translate-search-nofilter": "Non filtrar",
+ "log-name-translationreview": "Rexistro de revisión das traducións",
+ "log-description-translationreview": "Rexistro de todas as revisións das traducións e dos grupos de mensaxes.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|revisou}} a tradución \"$3\"",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|modificou}} o estado das traducións en $4 de \"$3\", que pasou de ser \"$6\" a ser \"$7\"",
+ "group-translate-sandboxed": "Tradutores sen aprobar",
+ "group-translate-sandboxed-member": "{{GENDER:$1|tradutor|tradutora}} sen aprobar",
+ "right-translate-sandboxmanage": "Administrar os usuarios da zona de probas",
+ "action-translate-sandboxmanage": "administrar os usuarios da zona de probas",
+ "right-translate-sandboxaction": "Executar accións da lista branca para os usuarios da zona de probas",
+ "action-translate-sandboxaction": "executar accións da lista branca para os usuarios da zona de probas",
+ "translate-workflow-state-": "(desactivado)",
+ "translate-workflowstatus": "Estado: $1",
+ "translate-workflow-set-doing": "Activando...",
+ "translate-workflow-autocreated-summary": "Creación automática da páxina para o estado \"$1\" do fluxo de traballo",
+ "translate-stats-workflow": "Estado",
+ "translate-workflowgroup-label": "Estados do fluxo de traballo",
+ "translate-workflowgroup-desc": "Este grupo de mensaxes amosa tódalas traducións dos estados do fluxo de traballo.\nOs estados están definidos na variable de configuración $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Traducións recentes",
+ "translate-dynagroup-recent-desc": "Este grupo de mensaxes amosa tódalas traducións recentes feitas nesta lingua.\nÉ moi útil para as tarefas de revisión.",
+ "translate-dynagroup-additions-label": "Adicións recentes",
+ "translate-dynagroup-additions-desc": "Este grupo de mensaxes amosa as mensaxes novas e modificadas.",
+ "translate-msggroupselector-projects": "Grupo de mensaxes",
+ "translate-msggroupselector-search-placeholder": "Procurar nos grupos",
+ "translate-msggroupselector-search-all": "Todos",
+ "translate-msggroupselector-search-recent": "Recentes",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|subgrupo|subgrupos}}",
+ "tux-languageselector": "Traducir ao",
+ "tux-tab-all": "Todas",
+ "tux-tab-untranslated": "Sen traducir",
+ "tux-tab-outdated": "Anticuadas",
+ "tux-tab-translated": "Traducidas",
+ "tux-tab-unproofread": "Sen revisar",
+ "tux-edit": "Editar",
+ "tux-status-optional": "Opcional",
+ "tux-status-fuzzy": "Anticuada",
+ "tux-status-proofread": "Revisada",
+ "tux-status-translated": "Traducida",
+ "tux-status-saving": "Publicando...",
+ "tux-status-unsaved": "Sen publicar",
+ "tux-save-unknown-error": "Houbo un erro descoñecido.",
+ "tux-editor-editsummary-placeholder": "Resumo opcional",
+ "tux-editor-paste-original-button-label": "Pegar o texto fonte",
+ "tux-editor-discard-changes-button-label": "Descartar as modificacións",
+ "tux-editor-save-button-label": "Publicar a tradución",
+ "tux-editor-skip-button-label": "Pasar á seguinte",
+ "tux-editor-cancel-button-label": "Cancelar",
+ "tux-editor-confirm-button-label": "Confirmar a tradución",
+ "tux-editor-proofread-button-label": "Marcar como revisada",
+ "tux-editor-shortcut-info": "Prema en \"$1\" para gardar, en \"$2\" para pasar á seguinte mensaxe, en \"$4\" para proporcionar un resumo ou en \"$3\" para ver outros atallos.",
+ "tux-editor-edit-desc": "Editar a documentación",
+ "tux-editor-add-desc": "Engadir a documentación",
+ "tux-editor-suggestions-title": "Suxestións",
+ "tux-editor-in-other-languages": "Noutras linguas",
+ "tux-editor-need-more-help": "Necesita máis axuda?",
+ "tux-editor-ask-help": "Pida máis información",
+ "tux-editor-tm-match": "$1% de coincidencia",
+ "tux-notices-more": "{{PLURAL:$1|$1 máis}}",
+ "tux-notices-hide": "agochar",
+ "tux-editor-save-failed": "Houbo un erro ao publicar a tradución: $1",
+ "tux-editor-n-uses": "utilizada $1 {{PLURAL:$1|vez|veces}}",
+ "tux-editor-message-desc-more": "Ollar máis",
+ "tux-editor-message-desc-less": "Ollar menos",
+ "tux-editor-clear-translated": "Agochar as traducidas",
+ "tux-editor-proofreading-mode": "Revisar",
+ "tux-editor-translate-mode": "Lista",
+ "tux-editor-proofreading-hide-own-translations": "Agochar as súas traducións",
+ "tux-editor-proofreading-show-own-translations": "Amosar as súas traducións",
+ "tux-proofread-action-tooltip": "Marcar como revisada",
+ "tux-proofread-edit-label": "Editar",
+ "tux-editor-page-mode": "Páxina",
+ "tux-editor-outdated-notice": "Esta tradución pode necesitar unha actualización.",
+ "tux-editor-outdated-notice-diff-link": "Amosar as diferenzas",
+ "tux-editor-doc-editor-placeholder": "Documentación da mensaxe",
+ "tux-editor-doc-editor-save": "Publicar a documentación",
+ "tux-editor-doc-editor-cancel": "Cancelar",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|mensaxe|mensaxes}} máis",
+ "tux-messagetable-loading-messages": "Cargando {{PLURAL:$1|a mensaxe|as mensaxes}}...",
+ "tux-message-filter-placeholder": "Filtrar a lista",
+ "tux-message-filter-result": "{{PLURAL:$1|Atopouse $1 resultado|Atopáronse $1 resultados}} para \"$2\"",
+ "tux-message-filter-advanced-button": "Procurar",
+ "tux-message-filter-optional-messages-label": "Mensaxes opcionais",
+ "tux-proofread-translated-by-self": "Traducida por vostede",
+ "tux-empty-list-all": "Este grupo de mensaxes está baleiro",
+ "tux-empty-list-all-guide": "Seleccione un grupo de mensaxes diferente",
+ "tux-translate-page-no-such-group": "<strong>O grupo indicado non existe.</strong> Seleccione un grupo de mensaxes diferente.",
+ "tux-empty-list-translated": "Non hai mensaxes traducidas",
+ "tux-empty-list-translated-guide": "Pode axudar na tradución",
+ "tux-empty-list-translated-action": "Traducir",
+ "tux-empty-no-messages-to-display": "Non hai ningunha mensaxe que amosar.",
+ "tux-empty-there-are-optional": "Hai mensaxes opcionais non amosadas na lista",
+ "tux-empty-show-optional-messages": "Amosar as mensaxes opcionais",
+ "tux-empty-no-outdated-messages": "Non hai mensaxes anticuadas",
+ "tux-empty-nothing-to-proofread": "Non hai nada que revisar",
+ "tux-empty-you-can-help-providing": "Pode axudar achegando traducións novas",
+ "tux-empty-nothing-new-to-proofread": "Non hai nada novo que revisar",
+ "tux-empty-you-can-review-already-proofread": "Pode revisar as traducións revisadas por outras persoas.",
+ "tux-empty-list-other": "Non hai nada que traducir",
+ "tux-empty-list-other-guide": "Pode axudar na revisión das traducións existentes",
+ "tux-empty-list-other-action": "Revisar as traducións",
+ "tux-empty-list-other-link": "Amosar tódalas mensaxes",
+ "tux-editor-close-tooltip": "Pechar",
+ "tux-editor-expand-tooltip": "Expandir",
+ "tux-editor-collapse-tooltip": "Contraer",
+ "tux-editor-message-tools-show-editor": "Amosar no editor wiki",
+ "tux-editor-message-tools-history": "Historial",
+ "tux-editor-message-tools-delete": "Borrar",
+ "tux-editor-message-tools-translations": "Todas as traducións",
+ "tux-editor-message-tools-linktothis": "Ligazóns a esta mensaxe",
+ "tux-editor-loading": "Cargando...",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|lingua|linguas}} máis",
+ "translate-statsbar-tooltip": "$1% traducidas, $2% revisadas",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% traducidas, $2% revisadas, $3% desfasadas",
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|grupo|grupos}} máis",
+ "tux-session-expired": "Pechouse a súa sesión. Por favor, acceda ao sistema noutra lapela. Como alternativa, copie as traducións non gardadas, acceda ao sistema, regrese a esta páxina e insira as súas traducións de novo.",
+ "tux-nojs": "Esta ferramenta non funciona sen JavaScript. Ou JavaScript está desactivado, ou non funcionou, ou este navegador non está soportado."
+}
diff --git a/Translate/i18n/core/gld.json b/Translate/i18n/core/gld.json
new file mode 100644
index 00000000..82c9629f
--- /dev/null
+++ b/Translate/i18n/core/gld.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "RFScott"
+ ]
+ },
+ "supportedlanguages": "Активнай хэсэсэл",
+ "translate-smg-group-message-tag-rename": "Гисурэгувури",
+ "translate-manage-source-message-not-found": "Гисурэмбэ - тэй хай? Эчиэ ба̄рапу",
+ "translate-documentation-language": "Бичхэсэлбэ"
+}
diff --git a/Translate/i18n/core/glk.json b/Translate/i18n/core/glk.json
new file mode 100644
index 00000000..57e99c8d
--- /dev/null
+++ b/Translate/i18n/core/glk.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "V6rg",
+ "شیخ"
+ ]
+ },
+ "translate-documentation-language": "پىغؤمˇ سندؤن"
+}
diff --git a/Translate/i18n/core/gom-deva.json b/Translate/i18n/core/gom-deva.json
new file mode 100644
index 00000000..8015987f
--- /dev/null
+++ b/Translate/i18n/core/gom-deva.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Konknni mogi 24",
+ "Supriya kankumbikar",
+ "The Discoverer"
+ ]
+ },
+ "translate-documentation-language": "संदेश दस्तावेजीकरण",
+ "translate-searchprofile": "भाशांतरां"
+}
diff --git a/Translate/i18n/core/gom-latn.json b/Translate/i18n/core/gom-latn.json
new file mode 100644
index 00000000..a02e9489
--- /dev/null
+++ b/Translate/i18n/core/gom-latn.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "The Discoverer"
+ ]
+ },
+ "translate-page-language": "Bhas",
+ "translate-rcfilters-translations": "Onnkaram",
+ "translate-rcfilters-translations-only-label": "Onnkaram",
+ "translate-rcfilters-translations-only-desc": "Bhaxantor kelolea panak bodol",
+ "translate-rcfilters-translations-filter-label": "Bhaxantoram nhoi",
+ "translate-rcfilters-translations-filter-desc": "Soglle bodol je bhaxantor nhoi",
+ "translate-rcfilters-translations-site-label": "Sayticheo sondex",
+ "translate-rcfilters-translations-site-desc": "MediaWiki nanv-thollant sondex khaxelem korop.",
+ "translations": "Soglleo onnkaram",
+ "translate-language": "Bhas",
+ "translate-mgs-column-language": "Bhas",
+ "translate-documentation-language": "Sondexache documentacao",
+ "translate-searchprofile": "Bhaxantoram"
+}
diff --git a/Translate/i18n/core/gor.json b/Translate/i18n/core/gor.json
new file mode 100644
index 00000000..3fb8b6fa
--- /dev/null
+++ b/Translate/i18n/core/gor.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Marwan Mohamad"
+ ]
+ },
+ "translate-documentation-language": "Dokumentasi tahuli"
+}
diff --git a/Translate/i18n/core/got.json b/Translate/i18n/core/got.json
new file mode 100644
index 00000000..b674d51f
--- /dev/null
+++ b/Translate/i18n/core/got.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gothicspeaker"
+ ]
+ },
+ "translate-documentation-language": "𐍅𐌰𐌿𐍂𐌳𐌹𐍃 𐌳𐌰𐌿𐌺𐌿𐌼𐌰𐌹𐌽𐍄𐌰𐍄𐍃𐌾𐍉"
+}
diff --git a/Translate/i18n/core/gpe.json b/Translate/i18n/core/gpe.json
new file mode 100644
index 00000000..851d8e05
--- /dev/null
+++ b/Translate/i18n/core/gpe.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "DaSupremo"
+ ]
+ },
+ "translate-documentation-language": "Message documentation"
+}
diff --git a/Translate/i18n/core/grc.json b/Translate/i18n/core/grc.json
new file mode 100644
index 00000000..396a3160
--- /dev/null
+++ b/Translate/i18n/core/grc.json
@@ -0,0 +1,49 @@
+{
+ "@metadata": {
+ "authors": [
+ "Crazymadlover",
+ "Gts-tg",
+ "LeighvsOptimvsMaximvs",
+ "Omnipaedista",
+ "PastelKos"
+ ]
+ },
+ "translate": "Μεταγλωττίζειν",
+ "translate-page-settings-legend": "Ῥυθμίσεις",
+ "translate-page-group": "Ὁμάς",
+ "translate-page-language": "Γλῶττα",
+ "translate-page-limit": "Ὅριον",
+ "translate-submit": "Φόρτισις",
+ "translate-page-navigation-legend": "Πλοήγησις",
+ "translate-next": "ἡ δέλτος ἡ ἑπομένη",
+ "translate-prev": "ἡ δέλτος ἡ προτέρα",
+ "translate-page-edit": "μεταγράφειν",
+ "translate-optional": "(προαιρετικόν)",
+ "translate-ignored": "(ἠγνοημένη)",
+ "translate-edit-contribute": "συμβάλλειν",
+ "translate-rc-translation-filter-no": "Ἀπραξία",
+ "translate-stats-edits": "Μεταγραφαί",
+ "translate-stats-users": "Μεταγλωττισταί",
+ "translate-statsf-width": "Πλάτος ἐν εἰκονοστοιχείοις:",
+ "translate-statsf-height": "Ὕψος ἐν εἰκονοστοιχείοις:",
+ "translate-statsf-scale": "Κοκκιότης:",
+ "translate-statsf-scale-days": "Ἡμέραι",
+ "translate-statsf-scale-hours": "Ὧραι",
+ "translate-statsf-count": "Μέτρησις:",
+ "translate-statsf-submit": "Προθεωρεῖν",
+ "translate-sidebar-alltrans": "Ἀλλογλωσσιστί",
+ "translations": "Ἅπασαι αἱ μεταγλωττίσεις",
+ "translate-translations-fieldset-title": "Ἄγγελμα",
+ "translate-translations-messagename": "Ὄνομα:",
+ "translate-translations-project": "Ἐγχείρημα:",
+ "languagestats": "Στατιστικὰ γλώττης",
+ "translate-language-code": "Κῶδιξ γλώττης",
+ "translate-language-code-field-name": "Κῶδιξ γλώττης:",
+ "translate-language": "Γλῶττα",
+ "translate-total": "Ἀγγέλματα",
+ "translate-untranslated": "Ἀμετάφραστον",
+ "translate-percentage-complete": "Πλήρωσις",
+ "translate-percentage-fuzzy": "Ἀπηρχαιωμένη",
+ "translate-mgs-column-language": "Γλῶττα",
+ "translate-documentation-language": "Τεκμηρίωσις ἀγγέλματος"
+}
diff --git a/Translate/i18n/core/gsw.json b/Translate/i18n/core/gsw.json
new file mode 100644
index 00000000..3414c1c0
--- /dev/null
+++ b/Translate/i18n/core/gsw.json
@@ -0,0 +1,220 @@
+{
+ "@metadata": {
+ "authors": [
+ "Als-Chlämens",
+ "Als-Holder",
+ "J. 'mach' wust",
+ "Shirayuki"
+ ]
+ },
+ "translate": "Ibersetze",
+ "translate-desc": "[[Special:Translate|Spezialsyte]] fir d Ibersetzig vu MediaWiki-Syschtemnochrichte",
+ "translate-taskui-export-to-file": "Im syschtemeigene Format exportiere",
+ "translate-taskui-export-as-po": "Fir d Offline-Ibersetzig exportiere",
+ "translate-taction-translate": "Ibersetze",
+ "translate-taction-proofread": "Korrekturläse",
+ "translate-taction-lstats": "Sprochstatischtike",
+ "translate-taction-mstats": "Statischtike zu de Mäldigsgruppe",
+ "translate-taction-export": "Exportiere",
+ "translate-taction-disabled": "Die Aktion isch in däm Wiki deaktiviert.",
+ "translate-page-no-such-language": "D Syte, wu Du aagee hesch, isch nit giltig.",
+ "translate-page-no-such-group": "D Gruppe, wu Du aagee hesch, isch nit giltig.",
+ "translate-page-disabled": "Ibersetzige in däre Sproch in däre Gruppe sin deaktiviert wore. Grund:\n\n<em>$1</em>",
+ "translate-language-disabled": "Ibersetzige in die Sproche sin nit megli.",
+ "translate-page-settings-legend": "Yystellige",
+ "translate-page-group": "Gruppe",
+ "translate-page-language": "Sproch",
+ "translate-page-limit": "Gränz",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|Syschtemnochricht|Syschtemnochrichte}} pro Syte",
+ "translate-submit": "Hol",
+ "translate-page-navigation-legend": "Navigation",
+ "translate-page-showing": "Syschtemnochrichte $1 bis $2 vu insgsamt $3",
+ "translate-page-showing-all": "$1 {{PLURAL:$1|Syschtemnochricht|Syschtemnochrichte}}",
+ "translate-page-showing-none": "Kei Syschtemnochrichte wu aazeigt chenne wäre.",
+ "translate-next": "negschti Syte",
+ "translate-prev": "vorderi Syte",
+ "translate-page-description-legend": "Informatione iber die Gruppe",
+ "translate-page-description-hasoptional": "Die Mäldigsgruppe enthält optionali Mäldige.\nOptionali Mäldige sötte numme übersetzt werde, wänn's in dynrer Sprooch en Bedarf defür het, wie z.B. dass kei Läärzeiche bruucht werde oder s richtigi transliteriere vo Eigenäme. $1",
+ "translate-page-description-hasoptional-open": "Optionali Mäldige aazeige.",
+ "translate-page-edit": "bearbeite",
+ "translate-optional": "(optional)",
+ "translate-ignored": "(ignoriert)",
+ "translate-edit-title": "„$1“ bearbeite",
+ "translate-edit-definition": "Syschtemnochricht im Original",
+ "translate-edit-contribute": "bearbeite",
+ "translate-edit-no-information": "''Die Syschtemnochricht het no kei Dokumentation. Wänn Du weisch, wu un in welem Zämmehang si bruucht wird, no chasch andere Ibersetzer hälfe, wänn Du ne Dokumentation zuefiegsch.''",
+ "translate-edit-information": "Information iber d Syschtemnochricht ($1)",
+ "translate-edit-warnings": "Warnig iber uuvollständigi Ibersetzige",
+ "translate-edit-tmmatch-source": "Ibersetzigsquälltext: $1",
+ "translate-edit-tmmatch": "$1% Ibereinstimmig",
+ "translate-edit-nopermission": "Du bruchsch d Rächt zum Nochrichte ibersetze z chenne.",
+ "translate-edit-askpermission": "E Aatrag uf d Rächt stelle",
+ "translate-checks-parameters": "{{PLURAL:$2|Dää Parameter wird|Die Parameter wäre}} nit bruucht: <strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Dää Parameter isch|Die Parameter sin}} nit bekannt: <strong>$1</strong>",
+ "translate-checks-balance": "Die {{PLURAL:$2|Chlammeresetzig isch|Chlammersetzige sin}} nit uusgliche: <strong>$1</strong>",
+ "translate-checks-links": "{{PLURAL:$2|De Link isch|Die Links sin}} problematisch: <strong>$1</strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|De Link wird|Die $2 Links wäre}} vermisst:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "S Original bruucht <nowiki>{{PLURAL:}}</nowiki>, d Ibersetzig aber nit.",
+ "translate-checks-plural-forms": "Zue <nowiki>{{PLURAL:}}</nowiki>{{PLURAL:$1|isch ei Form|sin $1 Forme}} aagee wore. S {{PLURAL:$2|wird aber nume ei Form|wäre aber nume $2 Forme}} unterstitzt (uuschließli 0= un 1=).",
+ "translate-checks-plural-dupe": "Zue <nowiki>{{PLURAL:}}</nowiki> sin zwoo glychi Forme aagee wore. Bspw. sott aber <nowiki>{{PLURAL:$1|Milch|Milch}}</nowiki> as <nowiki>{{PLURAL:$1|Milch}}</nowiki> aagee wäre.",
+ "translate-checks-pagename": "Namensruum gänderet dur d Definition",
+ "translate-checks-format": "Die Ibersetzig entspricht nit dr Definition oder het e uugiltigi Syntax: $1",
+ "translate-checks-escape": "Die Escape-Sequenze chenne us Versäh vorhande syy: <strong>$1</strong>",
+ "translate-checks-parametersnotequal": "D Parameteraazahl isch {{PLURAL:$1|$1}}, sott aber {{PLURAL:$2|$2}} syy.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> isch formal nit giltig.",
+ "translate-checks-fudforum-syntax": "Bitte bruch <nowiki>$1</nowiki> statt <nowiki>$2</nowiki> in däm Projäkt.",
+ "translate-pref-editassistlang": "Hilfssproche:",
+ "prefs-translate": "Ibersetzigoptione",
+ "translate-pref-editassistlang-help": "Dur Komma trännti Lischt vu Sprochcodes.\nIbersetzige vun ere Nochricht in däne Sproche wäre aazeigt, wänn du am Ibersetze bisch.\nD Standardlischt vu Sproche hangt vu Dyyre Sproch ab.",
+ "translate-pref-editassistlang-bad": "Nit giltige Sprochcode in dr Lischt:\n<nowiki>$1</nowiki>.",
+ "right-translate": "S Ibersetze-Interfaces bruuche",
+ "right-translate-manage": "Nochrichtegruppe verwalte",
+ "action-translate-manage": "Nochrichtegruppe z verwalte",
+ "right-translate-import": "Offline-Ibersetzige importiere",
+ "action-translate-import": "Offline-Ibersetzige z importiere",
+ "right-translate-messagereview": "Übersetzige überpriefe",
+ "right-translate-groupreview": "Arbetsablaufstatus vu Nochrichtegruppe ändere",
+ "translate-rc-translation-filter": "Ibersetzige filtere:",
+ "translate-rc-translation-filter-no": "nyt",
+ "translate-rc-translation-filter-only": "Zeig nume Ibersetzige",
+ "translate-rc-translation-filter-filter": "Ibersetzige filtere",
+ "translate-rc-translation-filter-site": "Nume Änderige an Syschtemnochrichte vu dr Site",
+ "translationstats": "Ibersetzigsstatischtike",
+ "translate-stats-edits": "Bearbeitige",
+ "translate-stats-users": "Ibersetzer",
+ "translate-stats-registrations": "Regischtrierige",
+ "translate-stats-reviews": "Priefige",
+ "translate-stats-reviewers": "Priefer",
+ "translate-statsf-intro": "Du chasch eifachi Statischtike mit däm Formular aalege. Alli Wärt hän unteri un oberi Gränze.",
+ "translate-statsf-options": "Zeichnigsoptione",
+ "translate-statsf-width": "Breiti in Pixel:",
+ "translate-statsf-height": "Hechi in Pixel:",
+ "translate-statsf-days": "Start-Datum:",
+ "translate-statsf-start": "Start-Datum:",
+ "translate-statsf-scale": "Granularität:",
+ "translate-statsf-scale-months": "Monet",
+ "translate-statsf-scale-weeks": "Wuche",
+ "translate-statsf-scale-days": "Täg",
+ "translate-statsf-scale-hours": "Stunde",
+ "translate-statsf-count": "Maßstab:",
+ "translate-statsf-count-edits": "Aazahl Bearbeitige",
+ "translate-statsf-count-users": "Aktivi Ibersetzer",
+ "translate-statsf-count-registrations": "Neji Benutzer",
+ "translate-statsf-count-reviews": "Übersetzigspriefer",
+ "translate-statsf-count-reviewers": "Priefer",
+ "translate-statsf-language": "Komma-trännti Lischt vu dr Sprochcode:",
+ "translate-statsf-group": "Komma-trännti Lischt vu dr Gruppecode:",
+ "translate-statsf-submit": "Vorschou",
+ "translate-tag-page-desc": "Ibersetzig vu dr Wikisyte [[$2|$1]].",
+ "translate-sidebar-alltrans": "In andere Sproche",
+ "translations": "Alli Ibersetzige",
+ "translations-summary": "Gib e Nochrichtename yy go alli verfiegbare Ibersetzige aazeige.",
+ "translate-translations-no-message": "„$1“ isch kei ibersetzbari Nochricht",
+ "translate-translations-none": "Kei Ibersetzige fir „$1“ verfiegbar",
+ "translate-translations-count": "S {{PLURAL:$1|isch e Ibersetzig|sin $1 Ibersetzige}} gfunde wore.",
+ "translate-translations-fieldset-title": "Nochricht",
+ "translate-translations-messagename": "Name:",
+ "translate-translations-project": "Projäkt:",
+ "translate-translations-including-no-param": "Bitte gib e giltige Nochrichteschlissel as Untersyteparameter aa",
+ "translate-translations-history-short": "V",
+ "languagestats": "Sprochstatischtike",
+ "languagestats-summary": "Die Syte zeigt Ibersetzigsstatischtike fir alli Nochrichtegruppe vun ere Sproch.",
+ "languagestats-stats-for": "Ibersetzigsstatischtike fir $1 ($2).",
+ "languagestats-recenttranslations": "Aktuälli Ibersetzige",
+ "translate-langstats-incomplete": "E Deil vo de Statistike uff dere Syte sin nit vollständig. Due d Syte no emool lade, zume wyteri Statistike z erhalte.",
+ "translate-langstats-expand": "ufklappe",
+ "translate-langstats-collapse": "zueklappe",
+ "translate-langstats-expandall": "alli ufklappe",
+ "translate-langstats-collapseall": "alli zueklappe",
+ "translate-language-code": "Sprochcode",
+ "translate-language-code-field-name": "Sprochcode:",
+ "translate-suppress-complete": "Unterdruck komplett ibersetzti Nochrichtegruppe",
+ "translate-ls-noempty": "Mäldigsgruppe ussblände, wo no gar nüüt übersetzt isch",
+ "translate-language": "Sproch",
+ "translate-total": "Syschtemnochrichte",
+ "translate-untranslated": "Nit ibersetzt",
+ "translate-percentage-complete": "Vollständigkeit",
+ "translate-percentage-fuzzy": "Veraltet",
+ "translate-languagestats-overall": "Alli Systenmäldigsgruppe zämme",
+ "translate-ls-submit": "Statischtike aazeige",
+ "translate-ls-column-group": "Mäldigsgrupp",
+ "translate-mgs-pagename": "Statischtike zu de Mäldigsgruppe",
+ "translate-mgs-fieldset": "Yystellige aazeige",
+ "translate-mgs-group": "Mäldigsgrupp:",
+ "translate-mgs-nocomplete": "Sprooche nit aazeige, wo scho vollständig übersetzt sin",
+ "translate-mgs-noempty": "Sprooche ussblände, wo no gar nüüt übersetzt isch",
+ "translate-mgs-submit": "Statischtike aazeige",
+ "translate-mgs-column-language": "Sprooch",
+ "translate-mgs-totals": "Alli Sprooche zämme",
+ "translate-mgs-invalid-group": "D Mäldigsgruppe $1, wo du aagee hesch, isch nit vorhande.",
+ "translate-mgs-nothing": "Zue de Statistike, wo du aagfordret hesch, git's kei Date zum Aazeige.",
+ "supportedlanguages": "Unterstitzti Sproche",
+ "supportedlanguages-summary": "Die Syte zeigt e Lischte vu allne unterstitze Sproche uf {{SITENAME}}, zämme mit dr Näme vu dr Ibersetzer, wu an däne Sproche mitgschafft hän.\nMeh Informatione zuen ere Sproch git s bim Klick uf dr Portallink.\nDe Name vo eme Ibersetzer wird grösser dargstellt, je mee Bearbeitige de Ibersetzer gmacht het.\nD Farb, wo de Name mit unterstriche isch, zeigt aa, wänn de Ibersetzer zum letschte Mool aktiv mitgschafft het.",
+ "supportedlanguages-colorlegend": "Farblegene: Letschti Übersetzig vor $1 Dääg.",
+ "supportedlanguages-translators": "{{PLURAL:$2|Ibersetzer|Ibersetzer}}: $1",
+ "supportedlanguages-recenttranslations": "Aktuälli Ibersetzige",
+ "supportedlanguages-count": "Insgsamt $1 {{PLURAL:$1|Sprooch|Sprooche}}.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|Bearbeitig|Bearbeitige}} - letschti Bearbeitig vor $3 {{PLURAL:$3|Daag|Dääg}}",
+ "translate-jssti-add": "Zue dr Lischt zuefiege",
+ "managemessagegroups": "Nochrichtegruppeverwaltig",
+ "translate-smg-notallowed": "Du derfsch die Aktion nit uusfiere",
+ "translate-smg-nochanges": "Es git kei Änderige, wu sotte verschafft wäre.",
+ "translate-smg-submit": "Änderige zum Verschaffe ibertrage",
+ "translate-smg-submitted": "Nochrichtedefinitione sin aktualisiert wore. Änderige wären im Hintergrund verschafft.",
+ "translate-smg-left": "Nochrichteninhalt im Wiki",
+ "translate-smg-right": "Änderige, wu yygehn",
+ "translate-manage-import-diff": "Nochricht $1 | Aktione: $2",
+ "translate-manage-import-new": "Neji Nochricht $1",
+ "translate-manage-import-deleted": "Gleschti Nochricht $1",
+ "translate-manage-action-import": "Importiere",
+ "translate-manage-action-conflict": "Importiere un mit „FUZZY“ markiere",
+ "translate-manage-action-ignore": "Ignoriere",
+ "translate-manage-action-fuzzy": "Importiere un Ibersetzige mit „FUZZY“ markiere",
+ "translate-manage-nochanges": "S het kei Änderige in dr Nochrichtedefinitione vu däre Gruppe.",
+ "translate-manage-nochanges-other": "S het kei Änderige in däre Sproch.\nDruck uf dr Link unte go zue dr Gruppedetailaasicht zruckgoh.",
+ "translate-manage-inconsistent": "Inskonsischtänz in dr Aafrog entdeckt.\nBitte iberprief d Änderige un versuech s nonemol. Detail: $1.",
+ "translate-manage-toolong": "Di maximal Arbetsablauf-Zyt vu $1 Sekunde isch iberschritte wore.\nBitte schick s Format nonemol ab go mit em Arbetsablauf wytermache.",
+ "translate-manage-import-summary": "Am Importiere vun ere neje Version us ere extärne Quälle",
+ "translate-manage-import-ignore": "Am Ibergumpe vu dr Nochricht $1.",
+ "translate-manage-conflict-summary": "Am Importiere vun ere neje Version us ere extärne Quälle. Bitte iberpriefe.",
+ "translate-manage-submit": "Uusfiere",
+ "translate-manage-intro-other": "Unte het s Lischt vu Ibersetzigsänderige in dr Sproch $1.\nBitte prief d Änderige un wehl e Aktion uus, wu Du witt uusfiere fir jedi Ibersetzig.\nWänn Du Änderige witt ignoriere, wäre si bim negschte Export ußer Chraft gsetzt.",
+ "translate-manage-import-ok": "Het e neji Version vu dr Syte $1 importiert.",
+ "translate-manage-import-done": "Alles gmacht!",
+ "importtranslations": "Ibersetzige importiere",
+ "translate-import-from-local": "Datei lokal uffelade:",
+ "translate-import-load": "Datei lade",
+ "translate-import-err-dl-failed": "Datei cha nit abgruefe wäre:\n$1",
+ "translate-import-err-ul-failed": "S Uffelade vu dr Datei isch nit erfolgryych gsi",
+ "translate-import-err-invalid-title": "Dr Dateiname <nowiki>$1</nowiki>, wu Du aagee hesch, isch nit giltig gsi.",
+ "translate-import-err-no-such-file": "D Datei <nowiki>$1</nowiki> git s nit oder isch nit lokal uffeglade wore.",
+ "translate-import-err-stale-group": "D Nochrichtegruppe, wu die Datei zuegordnet woren isch, git s nit.",
+ "translate-import-err-no-headers": "D Datei isch kei Datei im Gettext-Format vu dr Erwyterig „Translate“:\nD Gruppen un Sproche hän nit us em Dateichopf chenne ermittlet wäre.",
+ "translate-js-support-unsaved-warning": "S het nit gspychereti Ibersetzige.",
+ "translate-gs-pos": "Pos.",
+ "translate-gs-code": "Code",
+ "translate-gs-continent": "Kontinänt",
+ "translate-gs-speakers": "Sprächer",
+ "translate-gs-score": "Punktzahl",
+ "translate-gs-multiple": "Mehfach",
+ "translate-gs-count": "Zellig",
+ "translate-gs-total": "Insgsamt",
+ "translate-gs-avgscore": "Durschn. Punktzahl",
+ "translate-documentation-language": "Systemnochrichtedokumentation",
+ "translate-searchprofile": "Ibersetzige",
+ "translate-searchprofile-tooltip": "In allene Übersetzige sueche",
+ "translate-search-languagefilter": "Nooch Sprooche filtre:",
+ "translate-search-nofilter": "Nit nooch Sprooche filtre",
+ "log-name-translationreview": "Übersetzigspriefer-Logbuech",
+ "log-description-translationreview": "Logbuech vo allene Übersetzigspriefige vo Übersetzige un Noochrichtegruppe.",
+ "logentry-translationreview-message": "$1 het d Übersetzig $3{{GENDER:$2|überprieft}}",
+ "translate-workflow-state-": "(nit gsetzt)",
+ "translate-workflowstatus": "Status: $1",
+ "translate-workflow-set-doing": "Am Yystelle ...",
+ "translate-workflow-autocreated-summary": "Automatisch Aalege vu dr Syte fir Arbetsablaufstatus $1",
+ "translate-stats-workflow": "Status",
+ "translate-workflowgroup-label": "Arbetsablaufstatus",
+ "translate-workflowgroup-desc": "Die Nochrichtegruppe zeigt d Status zum Arbetsablauf bi Ibersetzige.\nD Status wäre mit dr Konfigurationsvariable <code lang=\"en\">$wgTranslateWorkflowStates</code> definiert.",
+ "translate-dynagroup-recent-label": "Aktuälli Ibersetzige",
+ "translate-dynagroup-recent-desc": "Die Nochrichtegruppe zeigt alli aktuälle Ibersetzige in däre Sproch aa.\nAm nitzligschte isch si fir s Korrekturläse."
+}
diff --git a/Translate/i18n/core/gu.json b/Translate/i18n/core/gu.json
new file mode 100644
index 00000000..c229ad3a
--- /dev/null
+++ b/Translate/i18n/core/gu.json
@@ -0,0 +1,191 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ashok modhvadia",
+ "Dsvyas",
+ "KartikMistry",
+ "NehalDaveND",
+ "Vyom"
+ ]
+ },
+ "translate": "ભાષાંતર",
+ "translate-desc": "મીડિયાવિકિ અને આગળ ભાષાંતરણ માટે [[Special:Translate|ખાસ પાનું]]",
+ "translate-taction-translate": "ભાષાંતર કરો",
+ "translate-taction-proofread": "પરીક્ષણ",
+ "translate-taction-lstats": "ભાષા અંકવિવરણ",
+ "translate-taction-mstats": "સંદેશા સમૂહ અંકવિવરણ",
+ "translate-taction-export": "નિકાસ",
+ "translate-taction-disabled": "આ વિકિ પર આ ક્રિયા નિષ્ક્રીય કરેલ છે.",
+ "translate-page-no-such-language": "નિર્દેશિત ભાષા અમાન્ય છે.",
+ "translate-page-no-such-group": "નિર્દેશિત સમુહ અમાન્ય છે.",
+ "translate-page-disabled": "આ સમુહમાં આ ભાષાનો અનુવાદ નિષ્ક્રિય કરી દેવાયો છે.\n\nકારણ:\n\n<em>$1</em>",
+ "translate-language-disabled": "આ ભાષામાં ભાષાંતર નિષ્ક્રીય છે.",
+ "translate-page-settings-legend": "ગોઠવણીઓ",
+ "translate-page-group": "જૂથ",
+ "translate-page-language": "ભાષા",
+ "translate-page-limit": "અવધિ",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|સંદેશા|સંદેશાઓ}} પ્રતિ પાના",
+ "translate-submit": "મેળવો",
+ "translate-page-navigation-legend": "સંચાલન",
+ "translate-page-showing": "$3 પૈકીના $1થી $2 સંદેશાઓ બતાવ્યા છે.",
+ "translate-page-showing-all": "રજૂઆત $1 {{PLURAL:$1|સંદેશ|સંદેશાઓ}}",
+ "translate-page-showing-none": "બતાવવા માટે કોઇ સંદેશાઓ નથી.",
+ "translate-next": "પછીનું પાનું",
+ "translate-prev": "પહેલાંનું પાનું",
+ "translate-page-description-legend": "જૂથ વિશે માહિતી",
+ "translate-page-description-hasoptional-open": "વૈકલ્પિક સંદેશાઓ બતાવો.",
+ "translate-page-edit": "સંપાદન",
+ "translate-optional": "વૈકલ્પિક",
+ "translate-ignored": "ઉપેક્ષીત",
+ "translate-edit-title": "\"$1\" સંપાદન કરો",
+ "translate-edit-definition": "સંદેશ વ્યાખ્યા",
+ "translate-edit-contribute": "યોગદાન",
+ "translate-edit-no-information": "<em>આ સંદેશામાં દસ્તાવેજ નથી.\n\nજો તમે જાણતા હો કે ક્યાં અને કેવી રીતે આ સંદેશો વપરાયો છે, તો તમે આ સંદેશામાં દસ્તાવેજ ઉમેરી અને અન્ય ભાષાંતરકારોને મદદ કરી શકો છો.</em>",
+ "translate-edit-information": "સંદેશા વિશે માહિતી ($1)",
+ "translate-edit-warnings": "અધુરા ભાષાંતરો વિશે ચેતવણી",
+ "translate-edit-tmmatch-source": "ભાષાંતર સ્ત્રોત લખાણ: $1",
+ "translate-edit-tmmatch": "$1% મેળ",
+ "translate-edit-askpermission": "પરવાનગી મેળવો",
+ "exporttranslations": "ભાષાંતરો નિકાસ કરો",
+ "translate-export-form-format": "શૈલી",
+ "translate-checks-parameters": "અહીં આપેલ {{PLURAL:$2|પરિમાણ|પરિમાણો}}નો ઉપયોગ કરાયો નથી:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "અહીં આપેલ {{PLURAL:$2|પરિમાણ|પરિમાણો}} અજાણ્યા છે:\n<strong>$1</strong>",
+ "translate-checks-balance": "ત્યાં અસમાન સંખ્યાનાં {{PLURAL:$2|કૌંસ|કૌંસ}} છે:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "આપેલ {{PLURAL:$2|કડી|$2 કડીઓ}} સંદિગ્ધ છે:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "આપેલ {{PLURAL:$2|કડી|$2 કડીઓ}} ગાયબ છે:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "વ્યાખ્યા વપરાઇ <nowiki>{{PLURAL:}}</nowiki> પરંતુ ભાષાંતર નહીં.",
+ "translate-checks-format": "આ ભાષાંતર વ્યાખ્યાનું પાલન કરતું નથી કે અવૈધ વાક્યવિન્યાસ $1 ધરાવે છે:",
+ "translate-pref-editassistlang": "સહાયક ભાષાઓ:",
+ "prefs-translate": "ભાષાંતર વિકલ્પો",
+ "translate-pref-editassistlang-help": "અલ્પવિરામો વડે વિભાજીત ભાષાસંકેતોની યાદી.\n\nજ્યારે તમે ભાષાંતર કરતા હશો ત્યારે આ ભાષાઓમાં ભાષાંતરીત સંદેશાઓ જોવા મળશે.\n\nભાષાઓની ડિફોલ્ટ યાદી તમારી ભાષા પર આધારીત છે.",
+ "translate-pref-editassistlang-bad": "યાદી <nowiki>$1</nowiki> માં અમાન્ય ભાષાસંકેત.",
+ "translate-rcfilters-translations": "ભાષાંતરો",
+ "translate-rcfilters-translations-only-label": "ભાષાંતરો",
+ "translate-rc-translation-filter": "ભાષાંતરોને ચાળો:",
+ "translate-rc-translation-filter-no": "કશું નથી",
+ "translate-rc-translation-filter-only": "ફક્ત ભાષાંતરો બતાવો",
+ "translate-rc-translation-filter-site": "ફક્ત સાઇટ સંદેશાઓમાં પરિવર્તનો",
+ "translationstats": "ભાષાંતર અંક વિવરણ",
+ "translate-stats-edits": "સંપાદનો",
+ "translate-stats-users": "ભાષાંતરકર્તાઓ",
+ "translate-stats-registrations": "પંજીકરણ",
+ "translate-stats-reviews": "પરીક્ષણ",
+ "translate-stats-reviewers": "પુનરાવલોકન કરનારા",
+ "translate-statsf-intro": "તમે આ ફોર્મ વડે સરળ અંકગણતરીઓ કરી શકો છો.\n\nબધાજ મુલ્યોને ઉપલી અને નિચલી સીમાઓ છે.",
+ "translate-statsf-options": "આલેખ વિકલ્પો",
+ "translate-statsf-width": "પહોળાઇ પિક્સેલ્સમાં:",
+ "translate-statsf-height": "ઉંચાઇ પિક્સેલ્સમાં:",
+ "translate-statsf-days": "સમયગાળો દિવસોમાં:",
+ "translate-statsf-start": "આરંભ તારીખ:",
+ "translate-statsf-scale": "કણિકતા:",
+ "translate-statsf-scale-months": "મહિનાઓ",
+ "translate-statsf-scale-weeks": "અઠવાડિયાંઓ",
+ "translate-statsf-scale-days": "દિવસો",
+ "translate-statsf-scale-hours": "કલાકો",
+ "translate-statsf-count": "માપ:",
+ "translate-statsf-count-edits": "સંપાદનોની સંખ્યા",
+ "translate-statsf-count-users": "સક્રિય ભાષાંતરકારો",
+ "translate-statsf-count-registrations": "નવો સભ્ય",
+ "translate-statsf-count-reviews": "ભાષાંતર ચકાસણી",
+ "translate-statsf-count-reviewers": "પુનરાવલોકન કરનારા",
+ "translate-statsf-language": "અલ્પવિરામ વિભાજીત ભાષાસંહિતાઓની યાદી:",
+ "translate-statsf-group": "અલ્પવિરામ વિભાજીત સમુદાય સંહિતાઓની યાદી:",
+ "translate-statsf-submit": "પૂર્વદર્શન",
+ "translate-tag-page-desc": "વિકિ પાના [[$2|$1]]નું $3 ($4)થી ભાષાંતર.",
+ "translate-sidebar-alltrans": "બીજી ભાષાઓમાં",
+ "translations": "બધાં ભાષાંતરો",
+ "translate-translations-fieldset-title": "સંદેશ",
+ "translate-translations-messagename": "નામ:",
+ "translate-translations-project": "યોજના",
+ "translate-translations-history-short": "h",
+ "languagestats": "ભાષાનું અંક વિવરણ",
+ "languagestats-recenttranslations": "તાજેતરના ભાષાંતરો",
+ "translate-langstats-expand": "વિસ્તારો",
+ "translate-langstats-collapse": "સંકેલો",
+ "translate-langstats-expandall": "બધું વિસ્તારો",
+ "translate-langstats-collapseall": "બધું સંકેલો",
+ "translate-language-code": "ભાષાસંહિતા",
+ "translate-language-code-field-name": "ભાષાસંહિતા:",
+ "translate-language": "ભાષા",
+ "translate-total": "સંદેશાઓ",
+ "translate-untranslated": "અભાષાંતરીત",
+ "translate-percentage-complete": "સમાપ્તિ",
+ "translate-percentage-fuzzy": "કાલગ્રસ્ત",
+ "translate-ls-submit": "સાંખ્યિકી દેખાડો",
+ "translate-ls-column-group": "સંદેશ જૂથો",
+ "translate-mgs-pagename": "સંદેશા સમૂહ અંકવિવરણ",
+ "translate-mgs-fieldset": "સંદર્ભો દર્શાવો",
+ "translate-mgs-group": "સંદેશ જૂથ",
+ "translate-mgs-submit": "આંકડાકીય માહિતી દર્શાવો",
+ "translate-mgs-column-language": "ભાષા",
+ "supportedlanguages": "આધારિત ભાષાઓ",
+ "supportedlanguages-recenttranslations": "તાજેતરનાં ભાષાંતરો",
+ "translate-jssti-add": "સૂચિમાં ઉમેરો",
+ "translate-manage-import-new": "નવા સંદેશો $1",
+ "translate-manage-import-deleted": "દૂર કરેલ સંદેશ $1",
+ "translate-manage-action-import": "આયાત કરો",
+ "translate-manage-action-ignore": "અવગણો",
+ "importtranslations": "ભાષાંતરો આયાત કરો",
+ "translate-import-from-local": "સ્થાનિક ફાઇલ અપલોડ કરો:",
+ "translate-import-load": "ફાઇલ લાવો",
+ "translate-gs-code": "નાકો",
+ "translate-gs-continent": "સામગ્રી",
+ "translate-gs-speakers": "વક્તાઓ",
+ "translate-gs-score": "સ્કોર",
+ "translate-gs-multiple": "એકથી વધું",
+ "translate-gs-count": "ગણના",
+ "translate-gs-total": "કુલ",
+ "translate-gs-avgscore": "સ્કોર પ્રતિશત્",
+ "translate-documentation-language": "સંદેશનું દસ્તાવેજીકરણ",
+ "translate-searchprofile": "ભાષાંતરો",
+ "translate-stats-workflow": "રાજ્ય",
+ "translate-msggroupselector-search-all": "બધા",
+ "translate-msggroupselector-search-recent": "હમણાનું",
+ "tux-languageselector": "માં ભાષાંતર કરો",
+ "tux-tab-all": "બધા",
+ "tux-tab-untranslated": "અભાષાંતરીત",
+ "tux-tab-outdated": "કાલગ્રસ્ત",
+ "tux-tab-translated": "ભાષાંતરીત",
+ "tux-tab-unproofread": "પરીક્ષણરહિત",
+ "tux-edit": "ફેરફાર કરો",
+ "tux-status-optional": "વૈકલ્પિક",
+ "tux-status-fuzzy": "કાલગ્રસ્ત",
+ "tux-status-proofread": "પરીક્ષણ થયેલું",
+ "tux-status-translated": "ભાષાંતરીત",
+ "tux-status-saving": "સંગ્રહ કરે છે...",
+ "tux-status-unsaved": "અસંગ્રહિત",
+ "tux-editor-paste-original-button-label": "સ્રોત લખાણ વાપરો",
+ "tux-editor-cancel-button-label": "રદ કરો",
+ "tux-editor-confirm-button-label": "અનુવાદની ખાતરી કરો",
+ "tux-editor-suggestions-title": "સૂચન",
+ "tux-editor-in-other-languages": "અન્ય ભાષાઓમાં",
+ "tux-notices-hide": "છુપાઓ",
+ "tux-editor-clear-translated": "ભાષાંતર કરેલ છુપાવો",
+ "tux-editor-proofreading-mode": "પરીક્ષણ",
+ "tux-editor-translate-mode": "યાદી",
+ "tux-editor-proofreading-hide-own-translations": "તમારા ભાષાંતરો છુપાવો",
+ "tux-editor-proofreading-show-own-translations": "તમારા ભાષાંતરો દર્શાવો",
+ "tux-proofread-edit-label": "ફેરફાર કરો",
+ "tux-editor-page-mode": "પાનું",
+ "tux-editor-outdated-notice-diff-link": "ભેદ દર્શાવો",
+ "tux-editor-doc-editor-placeholder": "સંદેશનું દસ્તાવેજીકરણ",
+ "tux-editor-doc-editor-save": "દસ્તાવેજીકરણ સાચવો",
+ "tux-editor-doc-editor-cancel": "રદ કરો",
+ "tux-messagetable-more-messages": "$1 વધુ {{PLURAL:$1|સંદેશ|સંદેશાઓ}}",
+ "tux-messagetable-loading-messages": "લાવે છે {{PLURAL:$1|સંદેશ|સંદેશાઓ}}...",
+ "tux-empty-list-translated-action": "અનુવાદ કરો",
+ "tux-empty-nothing-new-to-proofread": "પરીક્ષણ માટે નવું કંઈ નથી",
+ "tux-empty-list-other-action": "ભાષાંતરનું પુનરાવલોકન",
+ "tux-empty-list-other-link": "બધાં સંદેશાઓ બતાવો",
+ "tux-editor-close-tooltip": "બંધ કરો",
+ "tux-editor-expand-tooltip": "વિસ્તારો",
+ "tux-editor-collapse-tooltip": "સંકેલો",
+ "tux-editor-message-tools-show-editor": "વિકિ સંપાદકમાં દર્શાવો",
+ "tux-editor-message-tools-history": "ઇતિહાસ",
+ "tux-editor-message-tools-delete": "રદ કરો",
+ "tux-editor-message-tools-translations": "બધાં ભાષાંતરો",
+ "tux-editor-message-tools-linktothis": "આ સંદેશા પરની કડી",
+ "tux-editor-loading": "લવાઇ રહ્યું છે...",
+ "translate-search-more-languages-info": "$1 વધુ {{PLURAL:$1|ભાષા|ભાષાઓ}}",
+ "translate-messagebundle-error-empty-value": "\"$1\" કળને કોઇ કિંમત નથી"
+}
diff --git a/Translate/i18n/core/guc.json b/Translate/i18n/core/guc.json
new file mode 100644
index 00000000..4070d9e4
--- /dev/null
+++ b/Translate/i18n/core/guc.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Leonfd1992"
+ ]
+ },
+ "translate-documentation-language": "Kanüliamaakalu süpülajana pütchi"
+}
diff --git a/Translate/i18n/core/gur.json b/Translate/i18n/core/gur.json
new file mode 100644
index 00000000..5b4e4e31
--- /dev/null
+++ b/Translate/i18n/core/gur.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ayire Adongo"
+ ]
+ },
+ "translate-documentation-language": "Lahibaarɛ gulesegɔ"
+}
diff --git a/Translate/i18n/core/guw.json b/Translate/i18n/core/guw.json
new file mode 100644
index 00000000..fccb3c82
--- /dev/null
+++ b/Translate/i18n/core/guw.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Anthonymodec",
+ "Gadarawamo",
+ "Misteld",
+ "Samatics"
+ ]
+ },
+ "translate-smg-strong-sync-help": "Alọgọ",
+ "translate-documentation-language": "Owẹn he yin kinkandai",
+ "content-model-translate-messagebundle": "Beplidopo wekanhlanme he sogan yin liledogbedevome",
+ "translate-messagebundle-error-key-empty": "Beplidopo wekanhlanme lo ma Dona be honhungan he jevo hen",
+ "translate-messagebundle-error-key-too-long": "Honhungan \"$1\" ton site gbau"
+}
diff --git a/Translate/i18n/core/gv.json b/Translate/i18n/core/gv.json
new file mode 100644
index 00000000..98025077
--- /dev/null
+++ b/Translate/i18n/core/gv.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "MacTire02",
+ "Shimmin Beg"
+ ]
+ },
+ "translate": "Dy hyndaa",
+ "translate-page-group": "Possan",
+ "translate-page-language": "Çhengey",
+ "translate-page-limit": "Jeoraght"
+}
diff --git a/Translate/i18n/core/ha.json b/Translate/i18n/core/ha.json
new file mode 100644
index 00000000..353b5703
--- /dev/null
+++ b/Translate/i18n/core/ha.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aliyu shaba",
+ "Amire80",
+ "Ammarpad",
+ "BaRaN6161 TURK",
+ "Gwanki"
+ ]
+ },
+ "translate": "Fassara",
+ "translate-taction-translate": "Fassara",
+ "translate-taction-proofread": "Dubawa",
+ "translate-page-language": "Yare",
+ "translate-page-limit": "Iyaka",
+ "translate-next": "Shafi na gaba",
+ "translate-prev": "Shafin baya",
+ "translate-page-description-legend": "Bayani game da Ƙungiya",
+ "supportedlanguages-summary": "Wannan shafin ya nuna harsunan da ke akwai a {{SITENAME}}, tare da sunayen masu fassara masu aiki a wannan harshen.\nSunan mai fassara zai fito babbakarin gyare-gyaren da mai fassara yayi. Kalar zanen ƙasa tana nuna iya lokacin da mai fassara ya kasance a nan.",
+ "translate-documentation-language": "Takardar saƙon"
+}
diff --git a/Translate/i18n/core/hak.json b/Translate/i18n/core/hak.json
new file mode 100644
index 00000000..a639d8a4
--- /dev/null
+++ b/Translate/i18n/core/hak.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hakka",
+ "Jetlag",
+ "唐吉訶德的侍從"
+ ]
+ },
+ "translate-page-edit": "編寫",
+ "translate-langstats-expand": "chán-khôi",
+ "translate-langstats-collapse": "chap-thia̍p",
+ "translate-documentation-language": "Sin-sit sot-mìn vùn-khien",
+ "tux-editor-expand-tooltip": "Chán-khôi",
+ "tux-editor-collapse-tooltip": "Chap-thia̍p"
+}
diff --git a/Translate/i18n/core/haw.json b/Translate/i18n/core/haw.json
new file mode 100644
index 00000000..f3e491ca
--- /dev/null
+++ b/Translate/i18n/core/haw.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "BaRaN6161 TURK",
+ "Kalani",
+ "Singularity"
+ ]
+ },
+ "translate": "Unuhi",
+ "translate-taction-translate": "Unuhi",
+ "translate-page-language": "ʻŌlelo",
+ "translate-page-navigation-legend": "Ka hoʻokele ʻana",
+ "translate-page-edit": "e hoʻololi",
+ "translate-language": "ʻŌlelo"
+}
diff --git a/Translate/i18n/core/he.json b/Translate/i18n/core/he.json
new file mode 100644
index 00000000..aa7d4a62
--- /dev/null
+++ b/Translate/i18n/core/he.json
@@ -0,0 +1,456 @@
+{
+ "@metadata": {
+ "authors": [
+ "Agbad",
+ "Amire80",
+ "Guycn1",
+ "Guycn2",
+ "Inkbug",
+ "Ofrahod",
+ "Rotemliss",
+ "Shirayuki",
+ "Steeve815",
+ "YaronSh",
+ "דגש",
+ "דגש חזק",
+ "חיים",
+ "ערן",
+ "פוילישער"
+ ]
+ },
+ "translate": "תרגום",
+ "translate-desc": "[[Special:Translate|דף מיוחד]] לתרגום מדיה־ויקי ומעבר לכך",
+ "translate-fuzzybot-desc": "זה חשבון מערכת מיוחד שמשמש את [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate ההרחבה Translate] של מדיה־ויקי כדי לטפל בתרגומים.\nהחשבון הזה הוא חלק מתוכנת מדיה־ויקי ואינו בבעלות של שום משתמש.",
+ "translate-taskui-export-to-file": "לייצא בתסדיר ילידי",
+ "translate-taskui-export-as-po": "לייצא לתרגום בלתי־מקוון",
+ "translate-taskui-export-as-csv": "יצוא בתסדיר CSV",
+ "translate-export-csv-message-title": "כותרת הודעת תרגום",
+ "translate-export-csv-definition": "הגדרת ההודעה",
+ "translate-taction-translate": "תרגום",
+ "translate-taction-proofread": "סקירה",
+ "translate-taction-lstats": "סטטיסטיקות שפה",
+ "translate-taction-mstats": "סטטיסטיקות של קבוצת ההודעות",
+ "translate-taction-export": "יצוא",
+ "translate-taction-disabled": "הפעולה הזאת אינה מופעלת בוויקי הזה",
+ "translate-page-no-such-language": "השפה שצוינה שגויה.",
+ "translate-page-no-such-group": "הקבוצה שצוינה שגויה.",
+ "translate-page-disabled": "התרגומים לשפה זו בקבוצה זו בוטלו.\nהסיבה לכך היא:\n\n<em>$1</em>",
+ "translate-language-disabled": "תרגום לשפה הזאת כבוי.",
+ "translate-page-settings-legend": "הגדרות",
+ "translate-page-group": "קבוצה",
+ "translate-page-language": "שפה",
+ "translate-page-limit": "הגבלה",
+ "translate-page-limit-option": "עד {{PLURAL:$1|הודעה אחת|$1 הודעות}} בדף",
+ "translate-submit": "הצגה",
+ "translate-page-navigation-legend": "ניווט",
+ "translate-page-showing": "מוצגות הודעות מ־$1 עד $2 מתוך $3.",
+ "translate-page-showing-all": "{{PLURAL:$1|מוצגת הודעה אחת|מוצגות $1 הודעות}}.",
+ "translate-page-showing-none": "אין הודעות להצגה.",
+ "translate-next": "לדף הבא",
+ "translate-prev": "לדף הקודם",
+ "translate-page-description-legend": "מידע על הקבוצה",
+ "translate-page-description-hasoptional": "קבוצת ההודעות הזאת מכילה הודעות אופציונליות.\nיש לתרגם הודעות אופציונליות רק אם לשפתכם יש דרישות מיוחדות\nכגון אי־שימוש ברווחים או תעתיק ייחודי של שמות פרטיים. $1",
+ "translate-page-description-hasoptional-open": "הצגת הודעות אופציונליות.",
+ "translate-page-edit": "עריכה",
+ "translate-optional": "(לא חובה)",
+ "translate-ignored": "(לא לתרגום)",
+ "translate-edit-title": "עריכת \"$1\"",
+ "translate-edit-definition": "הגדרת ההודעה",
+ "translate-edit-contribute": "לתרום תיעוד",
+ "translate-edit-no-information": "<em>להודעה זו אין תיעוד.\nאם ידוע לך היכן או כיצד משתמשים בהודעה הזאת, באפשרותך לעזור למתרגמים אחרים באמצעות הוספת תיעוד להודעה זו.</em>",
+ "translate-edit-information": "מידע על ההודעה ($1)",
+ "translate-edit-warnings": "אזהרות על תרגומים חלקיים",
+ "translate-edit-tmmatch-source": "טקסט המקור של התרגום: $1",
+ "translate-edit-tmmatch": "רמת התאמה: $1%",
+ "translate-edit-nopermission": "נדרשות הרשאות כדי לתרגם הודעות.",
+ "translate-edit-askpermission": "לקבל הרשאה",
+ "exporttranslations": "יצוא תרגומים",
+ "translate-export-form-format": "תסדיר",
+ "translate-export-invalid-format": "נא לציין תסדיר תקין.",
+ "translate-export-not-supported": "יצוא תרגומים אינו נתמך.",
+ "translate-export-format-notsupported": "תסדיר היצוא שצוין אינו נתמך על־ידי קבוצת ההודעות.",
+ "translate-export-group-too-large": "קבוצת ההודעות שנבחרה גדולה מדי. נא לבחור קבוצת הודעות עם פחות {{PLURAL:$1|מהודעה אחת|מ־$1 הודעות}} או ליצור קשר עם מנהל תרגום לייעוץ.",
+ "translate-checks-parameters": "{{PLURAL:$2|הפרמטר הבא אינו|הפרמטרים הבאים אינם}} בשימוש:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|הפרמטר הבא אינו ידוע|הפרמטרים הבאים אינם ידועים}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "מספר {{PLURAL:$2|הסוגריים|הסוגריים}} אינו מאוזן:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|הקישור הבא בעייתי|$2 הקישורים הבאים בעייתיים}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|הקישור הבא חסר|$2 הקישורים הבאים חסרים}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "ההגדרה משתמשת ב־<nowiki>{{PLURAL:}}</nowiki>, אך התרגום אינו משתמש בו.",
+ "translate-checks-plural-forms": "בביטוי <nowiki>{{PLURAL:}}</nowiki> {{PLURAL:$1|נכתבה צורה אחת|נכתבו $1 צורות}}, אבל {{PLURAL:$2|נתמכת רק צורה אחת|נתמכות $2 צורות}} (לא כולל צורות 0= וצורות 1=).",
+ "translate-checks-plural-dupe": "בביטוי <nowiki>{{PLURAL:}}</nowiki> יש צורות שחוזרות על עצמן בסוף. במקום <nowiki>{{PLURAL:$1|קילומטר|קילומטר}}</nowiki> מומלץ לכתוב <nowiki>{{PLURAL:$1|קילומטר}}</nowiki>.",
+ "translate-checks-gettext-plural-missing": "בתרגום הזה צריך להיות <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-unsupported": "התרגום הזה אינו תומך ב־<nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-count": "<nowiki>{{PLURAL:GETTEXT|}}</nowiki> מקבל {{PLURAL:$1|צורת רבים אחת|$1 צורות רבים}} בדיוק. כרגע {{PLURAL:$2|ניתנה צורת קבים|ניתנו $2 צורות רבים}}.",
+ "translate-checks-smartformat-plural-missing": "בתרגום הזה צריך להיות plural במשתנה $1.",
+ "translate-checks-smartformat-plural-unsupported": "ההודעה הזאת לא תומכת ב־plural במשתנה $1.",
+ "translate-checks-smartformat-plural-count": "מספר שגוי של צורות plural בקטע <strong>$3</strong>. {{PLURAL:$1|צריכה להיות שם צורת plural אחת|צריכות להיות שם $1 צורות plural}}. כרגע יש {{PLURAL:$2|צורת plural אחת|$2 צורות plural}}.",
+ "translate-checks-unicode-plural-missing": "התרגום הזה חייב לכלול <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-unsupported": "ההודעה הזאת אינה תומכת ב־<nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-invalid": "צורות רבים אמורות להיות מוגדרות בתור $1. התרגום הזה מכיל $2.",
+ "translate-checks-pagename": "מרחבי שם ששונו מהגדרתם",
+ "translate-checks-format": "תרגום זה אינו תואם להגדרות או שהוא בעל תחביר שגוי: $1",
+ "translate-checks-escape": "ייתכן {{PLURAL:$2|שתו החילוף הבא נכתב|שתווי החילוף הבאים נכתבו}} בשגגה: <strong>$1</strong>. {{PLURAL:$4|תו חילוף התקין הוא|תווי החילוף התקינים הם}}: $3",
+ "translate-checks-parametersnotequal": "{{PLURAL:$1|נמצא פרמטר אחד|נמצאו $1 פרמטרים}}; {{PLURAL:אמורים להיות $2|אמור להיות אחד}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> אינו תקין.",
+ "translate-checks-fudforum-syntax": "השתמשו ב־<nowiki>$1</nowiki> ולא ב־<nowiki>$2</nowiki> בפרויקט הזה.",
+ "translate-checks-newline-missing-start": "{{PLURAL:$1|חסר תו שורה חדשה אחד|חסרים $1 תווי שורה חדשה}} בתחילת התרגום.",
+ "translate-checks-newline-missing-end": "{{PLURAL:$1|חסר תו שורה חדשה אחד|חסרים $1 תווי שורה חדשה}} בסוף התרגום.",
+ "translate-checks-newline-extra-start": "{{PLURAL:$1|יש תו שורה חדשה אחד מיותר|יש $1 תווי שורה חדשה מיותרים}} בתחילת התרגום.",
+ "translate-checks-newline-extra-end": "{{PLURAL:$1|יש תו שורה חדשה אחד מיותר|יש $1 תווי שורה חדשה מיותרים}} בסוף התרגום.",
+ "translate-checks-value-not-present": "התרגום צריך להיות שווה {{PLURAL:$1|ל־$1|לאחד מהערכים הבאים: $1}}.",
+ "translate-checks-replacement": "להשתמש ב\"$2\" במקום ב\"$1\".",
+ "translate-checks-empty": "תרגום ללא תוכן או רק עם רווחים אסור.",
+ "translate-pref-editassistlang": "שפות מסייעות:",
+ "prefs-translate": "אפשרויות תרגום",
+ "translate-pref-editassistlang-help": "רשימת קודים של שפות, כאשר פסיקים מפרידים בין שפה לשפה.\nבעת תרגום של הודעה, יוצגו התרגומים של ההודעה לשפות העזר הללו.\nשפת העזר המשמשת כברירת מחדל תלויה בשפת הממשק שלך.",
+ "translate-pref-editassistlang-bad": "קוד שפה שגוי ברשימה:\n<nowiki>$1</nowiki>.",
+ "right-translate": "עריכה באמצעות ממשק התרגום",
+ "action-translate": "לערוך באמצעות ממשק תרגום",
+ "right-translate-manage": "ניהול קבוצות הודעה",
+ "action-translate-manage": "לנהל קבוצות הודעה",
+ "right-translate-import": "יבוא תרגומים לא מקוונים",
+ "action-translate-import": "לייבא תרגומים לא מקוונים",
+ "right-translate-messagereview": "סקירת תרגומים",
+ "action-translate-messagereview": "לסקור תרגומים",
+ "right-translate-groupreview": "שינוי מצב זרימת העבודה של קבוצות הודעות",
+ "action-translate-groupreview": "לשנות מצב זרימת עבודה של קבוצות הודעות",
+ "translate-rcfilters-translations": "תרגומים",
+ "translate-rcfilters-translations-only-label": "תרגומים",
+ "translate-rcfilters-translations-only-desc": "שינויים לדפים מתורגמים.",
+ "translate-rcfilters-translations-filter-label": "לא תרגומים",
+ "translate-rcfilters-translations-filter-desc": "כל השנויים שאינם תרגומים.",
+ "translate-rcfilters-translations-site-label": "הודעות אתר",
+ "translate-rcfilters-translations-site-desc": "התאמות מקומיות של הודעות אתר במרחב MediaWiki.",
+ "translate-rc-translation-filter": "סינון תרגומים:",
+ "translate-rc-translation-filter-no": "ללא סינון",
+ "translate-rc-translation-filter-only": "להציג תרגומים בלבד",
+ "translate-rc-translation-filter-filter": "לא להציג תרגומים",
+ "translate-rc-translation-filter-site": "שינויים בהודעות האתר בלבד",
+ "translationstats": "סטטיסטיקות תרגום",
+ "translate-stats-edits": "תוכירע",
+ "translate-stats-users": "םימגרתמ",
+ "translate-stats-registrations": "רישומים",
+ "translate-stats-reviews": "סקירות",
+ "translate-stats-reviewers": "סוקרים",
+ "translate-statsf-intro": "באמצעות טופס זה תוכלו ליצור סטטיסטיקות פשוטות. לכל הערכים יש ערך מקסימלי וערך מינימלי.",
+ "translate-statsf-options": "אפשרויות גרף",
+ "translate-statsf-width": "רוחב בפיקסלים:",
+ "translate-statsf-height": "אורך בפיקסלים:",
+ "translate-statsf-days": "מספר ימים:",
+ "translate-statsf-start": "תאריך תחילה:",
+ "translate-statsf-scale": "יחידת זמן:",
+ "translate-statsf-scale-years": "שנים",
+ "translate-statsf-scale-months": "חודשים",
+ "translate-statsf-scale-weeks": "שבועות",
+ "translate-statsf-scale-days": "ימים",
+ "translate-statsf-scale-hours": "שעות",
+ "translate-statsf-count": "לפי:",
+ "translate-statsf-count-edits": "מספר עריכות",
+ "translate-statsf-count-users": "מתרגמים פעילים",
+ "translate-statsf-count-registrations": "משתמשים חדשים",
+ "translate-statsf-count-reviews": "סקירות תרגום",
+ "translate-statsf-count-reviewers": "סוקרים",
+ "translate-statsf-language": "רשימת קודי שפה (מופרדים בפסיק):",
+ "translate-statsf-group": "רשימת קודי קבוצות (מופרדים בפסיק):",
+ "translate-statsf-submit": "תצוגה מקדימה",
+ "translate-statsf-unknown-error": "אירעה שגיאה בלתי־ידועה.",
+ "translate-statsf-error-message": "אירעה שגיאה בעת טעינת התרשים: $1",
+ "translate-statsf-graph-alt-text-info": "טקסט חלופי לסטטיסטיקת התרגום בטבלת הנתונים להלן.",
+ "translate-statsf-alt-text": "זה הטקסט החלופי לסטטיסטיקות התרגום.",
+ "translate-statsf-embed": "קוד להטבעת תרשים סטטיסטיקות התרגום בדפים אחרים.",
+ "translate-tag-page-desc": "תרגום של דף הוויקי [[$2|$1]] מ{{GRAMMAR:תחילית|$3}} ($4).",
+ "translate-tag-page-wikipage-desc": "[[$1|תרגום]] דף הוויקי [[$2]] מ{{GRAMMAR:תחילית|$3}} (<bdi>$4</bdi>) ל{{GRAMMAR:תחילית|$5}} (<bdi>$6</bdi>)",
+ "translate-sidebar-alltrans": "בשפות אחרות",
+ "translations": "כל התרגומים",
+ "translations-summary": "הקלידו את שם ההודעה להלן כדי להציג את כל התרגומים הזמינים.",
+ "translate-translations-no-message": "\"$1\" אינה הודעה לתרגום",
+ "translate-translations-none": "לא קיימים תרגומים עבור \"$1\"",
+ "translate-translations-count": "{{PLURAL:$1|נמצא תרגום אחד|נמצאו $1 תרגומים}}.",
+ "translate-translations-fieldset-title": "הודעה",
+ "translate-translations-messagename": "שם:",
+ "translate-translations-project": "מיזם:",
+ "translate-translations-including-no-param": "אנא ציינו שם הודעה תקין בפרמטר של דף המשנה",
+ "translate-translations-history-short": "ג״ק",
+ "languagestats": "סטטיסטיקת השפה",
+ "languagestats-summary": "הדף הזה מציג את סטטיסטיקת תרגומים עבור כל קבוצות ההודעות של שפה.",
+ "messagegroupstats-summary": "הדף הזה מציג סטטיסטיקות של קבוצות הודעות.",
+ "languagestats-stats-for": "סטטיסטיקות תרגום עבור $1 ($2).",
+ "languagestats-recenttranslations": "תרגומים אחרונים",
+ "translate-langstats-incomplete": "חלק מהסטטיסטיקות בדף הזה אינן מלאות. יש לרענן כדי לקבל עוד סטטיסטיקות.",
+ "translate-langstats-expand": "להרחיב",
+ "translate-langstats-collapse": "לצמצם",
+ "translate-langstats-expandall": "להרחיב הכול",
+ "translate-langstats-collapseall": "לצמצם הכול",
+ "translate-language-code": "קוד השפה",
+ "translate-language-code-field-name": "קוד השפה:",
+ "translate-suppress-complete": "להשמיט קבוצות הודעות שתורגמו במלואן",
+ "translate-ls-noempty": "להשמיט קבוצות הודעות שאינן מתורגמות כלל",
+ "translate-language": "שפה",
+ "translate-total": "הודעות",
+ "translate-untranslated": "לא מתורגמות",
+ "translate-percentage-complete": "התקדמות",
+ "translate-percentage-fuzzy": "לא מעודכנות",
+ "translate-percentage-proofread": "נסקרו",
+ "translate-languagestats-overall": "כל קבוצות ההודעות יחד",
+ "translate-ls-submit": "הצגת סטטיסטיקות",
+ "translate-ls-column-group": "קבוצת הודעות",
+ "translate-mgs-pagename": "סטטיסטיקת קבוצת הודעות",
+ "translate-mgs-fieldset": "הצגת העדפות",
+ "translate-mgs-group": "קבוצת הודעות:",
+ "translate-mgs-nocomplete": "לא להציג שפות עם תרגום מלא",
+ "translate-mgs-noempty": "לא להציג שפות ללא שום תרגום",
+ "translate-mgs-submit": "הצגת סטטיסטיקות",
+ "translate-mgs-column-language": "שפה",
+ "translate-mgs-totals": "{{PLURAL:$1|שפה אחת|כל $1 השפות ביחד}}",
+ "translate-mgs-invalid-group": "הקבוצה $1 אינה קיימת.",
+ "translate-mgs-nothing": "אין מה להראות עבור הסטטיסטיקות המבוקשות.",
+ "translate-tes-server-error": "אחזור הצעות חיפוש נכשל",
+ "translate-tes-group-not-found": "אין תוצאות תואמות",
+ "translate-tes-type-to-search": "יש להקליד כדי להתחיל לחפש",
+ "supportedlanguages": "שפות פעילות",
+ "supportedlanguages-summary": "הדף הזה מציג רשימה של השפות הפעילות בהאתר {{SITENAME}},\nעם שמות של מתרגמים שעובדים על אותן השפות.\nגודל שם המתרגם יחסי למספר העריכות שלו.\nצבע הקו התחתי מראה כמה זמן המתרגם פעיל כאן.",
+ "supportedlanguages-colorlegend": "מקרא לצבעים: תרגום אחרון לפני $1 ימים",
+ "supportedlanguages-sqlite-error": "אין תמיכה ב־SQLite",
+ "supportedlanguages-postgres-error": "אין תמיכה ב־PostgreSQL",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|מתרגם|מתרגמת}}|מתרגמים}}: $1",
+ "supportedlanguages-recenttranslations": "תרגומים אחרונים",
+ "supportedlanguages-count": "{{PLURAL:$1|שפה אחת|$1 שפות}} בסך הכול.",
+ "supportedlanguages-activity": "{{BIDI:$1}}: {{PLURAL:$2|עריכה אחת|$2 עריכות}} - עריכה אחרונה לפני {{PLURAL:$3|יום אחד|$3 ימים}}",
+ "translate-supportedlanguages-cached": "המידע הזה נשמר במטמון לפני $1.",
+ "translate-activelanguages-invalid-code": "קוד השפה \"$1\" אינו ידוע או אינו מופעל לתרגום",
+ "abusefilter-edit-builder-vars-translate-source-text": "טקסט המקור של יחידת התרגום",
+ "abusefilter-edit-builder-vars-translate-target-language": "שפת היעד לתרגום",
+ "translate-jssti-add": "הוספה לרשימה",
+ "managemessagegroups": "ניהול קבוצות הודעות",
+ "translate-smg-notallowed": "אין לך הרשאה לבצע פעולה זו.",
+ "translate-smg-nochanges": "אין עוד שינויים שצריך לעבד.",
+ "translate-smg-submit": "שליחת שינויים לעיבוד",
+ "translate-smg-submitted": "הגדרות ההודעות עודכנו. השינויים מעובדים ברקע.",
+ "translate-smg-submitted-with-failure": "עדכון {{PLURAL:$1|הגדרת|הגדרות}} הודעה נכשל עבור {{PLURAL:$1|הקבוצה הבאה|הקבוצות הבאות}} - $2. $3",
+ "translate-smg-submitted-others-processing": "הגדרות הודעה עבור קבוצות אחרות מעובדות ברקע.",
+ "translate-smg-more": "יהיו שינויים נוספים שיהיה צורך לעבד אחרי שליחת השינויים האלה.",
+ "translate-smg-left": "תוכן ההודעה בוויקי",
+ "translate-smg-right": "שינויים נכנסים",
+ "translate-smg-rename-select": "בחירה",
+ "translate-smg-rename-cancel": "ביטול",
+ "translate-smg-rename-search": "חיפוש הודעת מתאימה...",
+ "translate-smg-rename-select-err": "נא לבחור לאיזו הודעה לשנות את השם",
+ "translate-smg-rename-no-msg": "לא נמצאו הודעות.",
+ "translate-smg-rename-new": "להוסיף חדשה...",
+ "translate-smg-rename-rename": "להוסיף בתור שינוי שם של...",
+ "translate-smg-rename-dialog-title": "להציג שינוי שם מתאים עבור $1",
+ "translate-smg-changeset-modified": "ערכת השינויים שונתה על־ידי משתמש או תהליך אחר. השינויים שלך אינם יכולים להתפרסם כי הם יכולים לדרוס את השינויים שלהם. נא לרענן את הדף כדי לראות את השינויים האחרונים.",
+ "translate-smg-no-groups-in-sync": "אין קבוצות שמסתנכרנות כעת",
+ "translate-smg-strong-sync-help": "עזרה",
+ "translate-smg-groups-in-sync": "קבוצות שמסתנכרנות כעת",
+ "translate-smg-groups-in-sync-list": "רשימת קבוצות שמעובדות ברקע כעת:",
+ "translate-smg-groups-with-error-title": "קבוצות שהיו בהן שגיאות בעת סנכרון",
+ "translate-smg-groups-with-error-desc": "רשימת קבוצות והודעות שהיו בהן שגיאות בעת סנכרון:",
+ "translate-smg-group-with-error-summary": "{{PLURAL:$1|הודעה אחת|$1 הודעות}} עם שגיאות:",
+ "translate-smg-group-message-action-history": "היסטוריה",
+ "translate-smg-group-action-resolve": "סימון הבעיה כפתורה",
+ "translate-smg-group-sync-error-warn": "בקבוצה הזאת אירעה שגיאה בעת הסנכרון. נא לתקן את השגיאות לפני עיבוד הקבוצה הזאת.",
+ "translate-smg-group-message-tag-outdated": "לא מעודכנת",
+ "translate-smg-group-message-tag-rename": "שינוי שם",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|תג|תגים}}",
+ "translate-smg-group-message-message-content": "תוכן:",
+ "translate-smg-group-message-message-target": "יעד:",
+ "translate-smg-group-message-message-replacement": "החלפה:",
+ "translate-smg-group-message-message-other-langs": "שפות אחרות:",
+ "translate-smg-loading": "בטעינה...",
+ "translate-smg-unknown-error": "אירעה שגיאה לא ידועה בעת עיבוד בקשתך.",
+ "translate-manage-import-diff": "הודעה $1 | פעולות: $2",
+ "translate-manage-import-new": "הודעה חדשה $1",
+ "translate-manage-import-deleted": "הודעה שנמחקה $1",
+ "translate-manage-action-import": "יבוא",
+ "translate-manage-action-conflict": "לייבא ולטשטש",
+ "translate-manage-action-ignore": "להתעלם",
+ "translate-manage-action-fuzzy": "לייבא ולטשטש תרגומים",
+ "translate-manage-action-rename-fuzzy": "לשנות את השם ולסמן את התרגומים בתור לא עדכניים",
+ "translate-manage-action-rename": "שינוי שם",
+ "translate-manage-action-ignore-change": "להתעלם משינוי התרגום",
+ "translate-manage-nochanges": "אין שינויים להגדרות ההודעות עבור קבוצה זו.",
+ "translate-manage-nochanges-other": "לא היו שינויים עבור השפה הזאת.\nהשתמשו בקישור למטה כדי לחזור לתצוגת פרטי קבוצה.",
+ "translate-manage-inconsistent": "התגלה חוסר־עקביות בבקשה.\nנא לבדוק את השינויים ולנסות שוב.\nפרטים: $1",
+ "translate-manage-toolong": "זמן העיבוד המרבי של {{PLURAL:$1|שנייה אחת|$1 שניות}} תם.\nנא לשלוח מחדש את הטופס כדי להמשיך בעיבודו.",
+ "translate-manage-import-summary": "יבוא גרסה חדשה ממקור חיצוני",
+ "translate-manage-import-ignore": "מדלג על ההודעה $1.",
+ "translate-manage-import-rename-summary": "השם שוּנה במקור חיצוני",
+ "translate-manage-conflict-summary": "מייבא גרסה חדשה ממקור חיצוני.\nנא לבדוק.",
+ "translate-manage-submit": "הפעלה",
+ "translate-manage-intro-other": "להלן רשימה של שינויי תרגום ב$1.\nנא לסקור את השינויים ולבחור את הפעולה שברצונך לעשות עבור כל עדכון.\nהתעלמות מהשינויים תגרום לכך שהפעולה הזאת תהיה רק זמנית.",
+ "translate-manage-import-ok": "יובא: $1",
+ "translate-manage-import-done": "היבוא בוצע!",
+ "translate-manage-empty-content": "התוכן ריק",
+ "translate-manage-key-reused": "ההודעה הזאת כבר קיימת בוויקי. נא לבדוק אם נעשה שימוש חוזר במפתח ישן.",
+ "translate-manage-source-message-not-found": "הגדרת ההודעה לא נמצאה",
+ "importtranslations": "יבוא תרגומים",
+ "translate-import-from-local": "העלאת קובץ מקומי:",
+ "translate-import-load": "טעינת קובץ",
+ "translate-import-err-dl-failed": "לא ניתן לאחזר את הקובץ:\n$1",
+ "translate-import-err-ul-failed": "העלאת הקובץ לא עבדה",
+ "translate-import-err-invalid-title": "שם הקובץ שצוין, <nowiki>$1</nowiki>, אינו תקין.",
+ "translate-import-err-no-such-file": "הקובץ <nowiki>$1</nowiki> אינו קיים או שהוא לא הועלה באופן מקומי.",
+ "translate-import-err-stale-group": "קבוצת ההודעות שהקובץ הזה שייך אליה אינה קיימת.",
+ "translate-import-err-no-headers": "הקובץ זה אינו קובץ Gettext תקין בתסדיר שתואם להרחבה Translate:\nלא ניתן לקבוע את קבוצ ההודעות ואת השפה מכותרי הקובץ.",
+ "translate-js-support-unsaved-warning": "יש לך תרגומים שלא התפרסמו.",
+ "translate-gs-pos": "מקום",
+ "translate-gs-code": "קוד",
+ "translate-gs-continent": "יבשת",
+ "translate-gs-speakers": "דוברים",
+ "translate-gs-score": "ניקוד",
+ "translate-gs-multiple": "יותר מאחת",
+ "translate-gs-count": "סך הכול",
+ "translate-gs-total": "סה\"כ",
+ "translate-gs-avgscore": "ניקוד ממוצע",
+ "translate-documentation-language": "תיעוד הודעות",
+ "translate-searchprofile": "תרגומים",
+ "translate-searchprofile-tooltip": "חיפוש בכל התרגומים",
+ "translate-searchprofile-note": "ניתן למצוא תוצאות נוספות באמצעות [$1 חיפוש תרגומים].",
+ "translate-search-languagefilter": "סינון לפי שפה:",
+ "translate-search-nofilter": "ללא סינון",
+ "log-name-translationreview": "יומן סקירת תרגומים",
+ "log-description-translationreview": "יומן של כל הסקירות של תרגומים ושל קבוצות תרגומים.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|סקר|סקרה}} את התרגום $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|שינה|שינתה}} את המצב של התרגומים של $3 ל{{GRAMMAR:תחילית|$4}} מ$6 ל$7",
+ "group-translate-sandboxed": "מתרגמים לא מאושרים",
+ "group-translate-sandboxed-member": "{{GENDER:$1|מתרגם לא מאושר|מתרגמת לא מאושרת}}",
+ "right-translate-sandboxmanage": "ניהול משתמשים בארגז חול",
+ "action-translate-sandboxmanage": "לנהל משתמשים בארגז חול",
+ "right-translate-sandboxaction": "ביצוע פעולות שמאושרות למשתמשים שנמצאים בארגז חול",
+ "action-translate-sandboxaction": "לבצע פעולות שמאושרות למשתמשים שנמצאים בארגז חול",
+ "translate-workflow-state-": "(לא מוגדר)",
+ "translate-workflowstatus": "מצב: $1",
+ "translate-workflow-set-doing": "מתבצעת הגדרה...",
+ "translate-workflow-autocreated-summary": "יצירה אוטומטית של דף עם מצב זרימת עבודה $1",
+ "translate-stats-workflow": "מצב",
+ "translate-workflowgroup-label": "מצבי זרימת עבודה",
+ "translate-workflowgroup-desc": "קבוצת ההודעות הזאת מציגה את המצבים האפשריים של זרימת העבודה של תרגום.\nהמצבים מוגדרים במשתנה ‎$wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "תרגומים אחרונים",
+ "translate-dynagroup-recent-desc": "קבוצת ההודעות הזאת מציגה את כל התרגומים האחרונים לשפה הזאת.\nזה שימושי בעיקר לסקירה.",
+ "translate-dynagroup-additions-label": "תוספות אחרונות",
+ "translate-dynagroup-additions-desc": "קבוצת ההודעות הזאת מציגה הודעות חדשות והודעות ששונו.",
+ "translate-msggroupselector-projects": "קבוצות הודעות",
+ "translate-msggroupselector-search-placeholder": "חיפוש קבוצה",
+ "translate-msggroupselector-search-all": "הכול",
+ "translate-msggroupselector-search-recent": "אחרונות",
+ "translate-msggroupselector-view-subprojects": "הצגת {{PLURAL:$1|תת־מיזם אחד|$1 תת־מיזמים}}",
+ "tux-languageselector": "שפת היעד לתרגום:",
+ "tux-select-target-language": "שפת היעד לתרגום",
+ "tux-tab-all": "הכול",
+ "tux-tab-untranslated": "לא מתורגמות",
+ "tux-tab-outdated": "לא מעודכנות",
+ "tux-tab-translated": "מתורגמות",
+ "tux-tab-unproofread": "שלא נסקרו",
+ "tux-edit": "עריכה",
+ "tux-status-optional": "אופציונלית",
+ "tux-status-fuzzy": "לא מעודכנת",
+ "tux-status-proofread": "נסקרה",
+ "tux-status-translated": "מתורגמת",
+ "tux-status-saving": "מתפרסם...",
+ "tux-status-unsaved": "לא התפרסמה",
+ "tux-save-unknown-error": "אירעה שגיאה בלתי־ידועה.",
+ "tux-editor-placeholder-documentation": "הוספת תיעוד הודעות",
+ "tux-editor-placeholder-language": "‫התרגום שלך ל{{GRAMMAR:תחילית|$1}}‬",
+ "tux-editor-editsummary-placeholder": "נא להסביר את השינויים שלך (לא חובה)",
+ "tux-editor-paste-original-button-label": "הדבקת טקסט המקור",
+ "tux-editor-discard-changes-button-label": "זריקת שינויים",
+ "tux-editor-save-button-label": "פרסום תרגום",
+ "tux-editor-skip-button-label": "מעבר להודעה הבאה",
+ "tux-editor-cancel-button-label": "ביטול",
+ "tux-editor-confirm-button-label": "אישור תרגום",
+ "tux-editor-proofread-button-label": "לסמן שהתרגום נסקר",
+ "tux-editor-shortcut-info": "{{GENDER:|לחץ|לחצי}} על \"$1\" לאישור ומעבר להודעה הבאה, \"$2\" למעבר להודעה הבאה, \"$4\" לכתיבת תקציר או {{GENDER:|החזק|החזיקי}} \"$3\" להצגת קיצורים אחרים.",
+ "tux-editor-edit-desc": "עריכת תיעוד",
+ "tux-editor-add-desc": "הוספת תיעוד",
+ "tux-editor-suggestions-title": "הצעות",
+ "tux-editor-latest-updates-title": "עדכונים אחרונים",
+ "tux-editor-changes-without-summary": "{{PLURAL:$1|עדכון אחד|$1 עדכונים}} ללא תקציר",
+ "tux-editor-all-changes": "כל השינויים",
+ "tux-editor-in-other-languages": "בשפות אחרות",
+ "tux-editor-need-more-help": "דרושה עוד עזרה?",
+ "tux-editor-ask-help": "בקשת מידע נוסף",
+ "tux-editor-tm-match": "התאמה של $1%",
+ "tux-notices-more": "{{PLURAL:$1|עוד $1}}",
+ "tux-notices-hide": "להסתיר",
+ "tux-editor-save-failed": "פרסום התרגום נכשל: $1",
+ "tux-editor-n-uses": "שימש {{PLURAL:$1|פעם אחת|פעמיים|$1 פעמים}}",
+ "tux-editor-message-desc-more": "להציג עוד",
+ "tux-editor-message-desc-less": "להציג פחות",
+ "tux-editor-clear-translated": "הסתרת הודעות מתורגמות",
+ "tux-editor-proofreading-mode": "סקירה",
+ "tux-editor-translate-mode": "רשימה",
+ "tux-editor-proofreading-hide-own-translations": "הסתרת התרגומים שלך",
+ "tux-editor-proofreading-show-own-translations": "הצגת התרגומים שלך",
+ "tux-proofread-action-tooltip": "לסמן שההודעה נסקרה",
+ "tux-proofread-edit-label": "עריכה",
+ "tux-editor-page-mode": "דף",
+ "tux-editor-outdated-notice": "ייתכן שצריך לעדכן את התרגום הזה.",
+ "tux-editor-outdated-notice-diff-link": "הצגת שינויים",
+ "tux-editor-doc-editor-placeholder": "תיעוד הודעה",
+ "tux-editor-doc-editor-save": "פרסום התיעוד",
+ "tux-editor-doc-editor-cancel": "ביטול",
+ "tux-messagetable-more-messages": "עוד {{PLURAL:$1|הודעה אחת|$1 הודעות}}",
+ "tux-messagetable-loading-messages": "טעינת {{PLURAL:$1|הודעה|הודעות}}...",
+ "tux-message-filter-placeholder": "סינון הרשימה",
+ "tux-message-filter-result": "{{PLURAL:$1|נמצאה תוצאה אחת|נמצאו $1 תוצאות}} עבור \"$2\"",
+ "tux-message-filter-advanced-button": "חיפוש מתקדם",
+ "tux-message-filter-optional-messages-label": "הודעות אופציונליות",
+ "tux-proofread-translated-by-self": "זה תרגום שלך",
+ "tux-empty-list-all": "קבוצת ההודעות הזאת ריקה",
+ "tux-empty-list-all-guide": "נא לבחור קבוצת הודעות אחרת לתרגום",
+ "tux-translate-page-no-such-group": "<strong>הקבוצה המבוקשת אינה קיימת.</strong> נא לבחור קבוצת הודעות אחרת.",
+ "tux-empty-list-translated": "אין הודעות מתורגמות",
+ "tux-empty-list-translated-guide": "ביכולתך לעזור לתרגם",
+ "tux-empty-list-translated-action": "תרגום",
+ "tux-empty-no-messages-to-display": "אין הודעות להצגה.",
+ "tux-empty-there-are-optional": "יש הודעות אופציונליות שאינן מוצגות ברשימה",
+ "tux-empty-show-optional-messages": "הצגת הודעות אופציונליות",
+ "tux-empty-no-outdated-messages": "אין הודעות שדורשות עדכון",
+ "tux-empty-nothing-to-proofread": "אין מה לסקור",
+ "tux-empty-you-can-help-providing": "באפשרותך לעזור בכתיבת תרגומים חדשים",
+ "tux-empty-nothing-new-to-proofread": "אין שום דבר חדש לסקור",
+ "tux-empty-you-can-review-already-proofread": "אפשר לסקור תרגומים שאחרים כבר סקרו.",
+ "tux-empty-list-other": "אין מה לתרגם",
+ "tux-empty-list-other-guide": "אפשר לעזור לסקור את התרגומים הקיימים",
+ "tux-empty-list-other-action": "סקירת תרגומים",
+ "tux-empty-list-other-link": "הצגת כל ההודעות",
+ "tux-editor-close-tooltip": "סגירה",
+ "tux-editor-expand-tooltip": "הרחבה",
+ "tux-editor-collapse-tooltip": "צמצום",
+ "tux-editor-message-tools-show-editor": "הצגה בעורך ויקי",
+ "tux-editor-message-tools-history": "היסטוריה",
+ "tux-editor-message-tools-delete": "מחיקה",
+ "tux-editor-message-tools-translations": "כל התרגומים",
+ "tux-editor-message-tools-linktothis": "קישור להודעה הזאת",
+ "tux-editor-loading": "טעינה...",
+ "tux-editor-loading-failed": "טעינת עזרי תרגום לא עבדה: $1",
+ "translate-search-more-languages-info": "עוד {{PLURAL:$1|שפה אחת|$1 שפות}}",
+ "translate-statsbar-tooltip": "$1% תורגם, $2% נסקר",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% מתורגמות, $2% בדוקות, $3% לא מעודכנות",
+ "translate-search-more-groups-info": "עוד {{PLURAL:$1|קבוצה אחת|$1 קבוצות}}",
+ "translate-syntax-error": "התרגום מכיל שגיאות תחביר",
+ "tux-session-expired": "אינך נמצא בחשבון עוד. נא להיכנס בלשונית אחרת. לחלופין, יש להעתיק תרגומים שלא נשמרו, להיכנס, לחזור לדף הזה, ולהזין שוב את התרגומים שלך.",
+ "tux-nojs": "הדף הזה דורש שימוש ב־JavaScript. התמיכה ב־JavaScript כבויה, לא פעלה, או שהדפדפן הזה אינו נתמך.",
+ "specialpages-group-translation": "תרגום",
+ "content-model-translate-messagebundle": "חבילת הודעות לתרגום",
+ "translate-messagebundle-validation-error": "חבילת הודעות בלתי־תקינה: $1",
+ "translate-messagebundle-error-parsing": "שגיאת בעת פענוח JSON‏: $1",
+ "translate-messagebundle-error-invalid-array": "חבילת ההודעות חייבת להיות עצם JSON. הסוג שהתקבל הוא $1",
+ "translate-messagebundle-error-key-empty": "חבילת ההודעות צריכה לא להכיל מפתח ריק",
+ "translate-messagebundle-error-key-too-long": "המפתח \"$1\" ארוך מדי",
+ "translate-messagebundle-error-key-invalid-characters": "המפתח \"$1\" מכיל תווים בלתי־מורשים",
+ "translate-messagebundle-error-invalid-value": "המפתח \"$1\" אינו מכיל ערך מחרוזת",
+ "translate-messagebundle-error-empty-value": "במפתח \"$1\" אין ערך",
+ "translate-messagebundle-error-metadata-type": "המטא־נתונים צריכים להיות מערך.",
+ "translate-messagebundle-error-invalid-metadata": "חלק המטא־נתונים מכיל מפתח לא ידוע: \"$1\". מפתחות נתמכים הם $2.",
+ "translate-messagebundle-error-invalid-sourcelanguage": "קוד שפת המקור \"$1\" אינו נתמך.",
+ "translate-messagebundle-error-invalid-prioritylanguage": "{{PLURAL:$2|קוד שפה מועדפת בלתי־תקין|קודי שפות מועדפות בלתי־תקינים}} במטא־נתונים: $1",
+ "translate-messagebundle-error-invalid-prioritylanguage-format": "תסדיר שפה מועדפת בלתי־תקין במטא־נתונים. שפות מועדפות צריכות להיות מערך של מחרוזות.",
+ "translate-messagebundle-group-description": "הודעות מתוך חבילת הודעות שמוגדרת בדף [[$2|$1]].",
+ "translate-messagebundle-change-sourcelanguage": "הגדרת שפת המקור של חבילת ההודעות לפי המטא־נתונים.",
+ "translate-messagebundle-sourcelanguage-changed": "לא ניתן לשנות את שפת המקור של חבילת הודעות אחרי שהיא נוצרה.",
+ "log-action-filter-translationreview": "סוג הפעולה:",
+ "log-action-filter-translationreview-message": "סקירה של הודעות תרגום בודדות",
+ "log-action-filter-translationreview-group": "שינויים במצב התקדמות התרגומים"
+}
diff --git a/Translate/i18n/core/hi.json b/Translate/i18n/core/hi.json
new file mode 100644
index 00000000..50c98b2d
--- /dev/null
+++ b/Translate/i18n/core/hi.json
@@ -0,0 +1,456 @@
+{
+ "@metadata": {
+ "authors": [
+ "Abijeet Patro",
+ "Amire80",
+ "Ansumang",
+ "AnupamM",
+ "Ashishbhatnagar72",
+ "Karthi.dr",
+ "Kaustubh",
+ "Knightsofdawn",
+ "NehalDaveND",
+ "Nilesh shukla",
+ "Saurmandal",
+ "Sfic",
+ "Siddhartha Ghai",
+ "ThisIsACreeper0101",
+ "संजीव कुमार"
+ ]
+ },
+ "translate": "अनुवाद करें",
+ "translate-desc": "मीडियाविकि और दूसरे साइटों को अनुवादित करने के लिए [[Special:Translate|विशेष पृष्ठ]]",
+ "translate-fuzzybot-desc": "यह मीडियाविकि के [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate अनुवाद एक्सटेंशन] द्वारा उपयुक्त एक विशेष सिस्टम खाता है।\nयह खाता मीडियाविकि सॉफ्टवेयर का हिस्सा है और यह किसी भी सदस्य की संपत्ति नहीं।",
+ "translate-taskui-export-to-file": "असली फॉर्मेट में निर्यात करें",
+ "translate-taskui-export-as-po": "ऑफलाइन अनुवाद के लिए निर्यात करें",
+ "translate-taskui-export-as-csv": "CSV प्रारूप में निर्यात करें",
+ "translate-export-csv-message-title": "अनुवाद संदेश का शीर्षक",
+ "translate-export-csv-definition": "संदेश की व्याख्या",
+ "translate-taction-translate": "अनुवाद करें",
+ "translate-taction-proofread": "जाँचें",
+ "translate-taction-lstats": "भाषा सांख्यिकी",
+ "translate-taction-mstats": "संदेश समूहों की सांख्यिकी",
+ "translate-taction-export": "निर्यात करें",
+ "translate-taction-disabled": "इस कार्य को इस विकि पर अक्षम किया गया है।",
+ "translate-page-no-such-language": "निर्दिष्ट भाषा अमान्य है।",
+ "translate-page-no-such-group": "निर्दिष्ट समूह अमान्य है।",
+ "translate-page-disabled": "इस भाषा में अनुवादों को अक्षम किया गया है।\nकारण:\n\n<em>$1</em>",
+ "translate-language-disabled": "इस भाषा में अनुवाद को अक्षम किया गया है।",
+ "translate-page-settings-legend": "सेटिंग्स",
+ "translate-page-group": "समूह",
+ "translate-page-language": "भाषा",
+ "translate-page-limit": "सीमा",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|संदेश}} प्रति पृष्ठ",
+ "translate-submit": "खोजें",
+ "translate-page-navigation-legend": "नैविगेशन",
+ "translate-page-showing": "$3 में से $1 से $2 तक संदेश दिखाए जा रहे हैं।",
+ "translate-page-showing-all": "$1 संदेश {{PLURAL:$1|दिखाया जा रहा है|दिखाए जा रहे हैं}}।",
+ "translate-page-showing-none": "दिखने के लिए कोई संदेश नहीं।",
+ "translate-next": "अगला पृष्ठ",
+ "translate-prev": "पिछला पृष्ठ",
+ "translate-page-description-legend": "समूह के बारे में जानकारी",
+ "translate-page-description-hasoptional": "इस संदेश समूह में वैकल्पिक संदेश हैं।\nवैकल्पिक संदशों के सिर्फ तभी अनुवादित किया जाना चाहिए जब आपकी भाषा को इसकी आवश्यकता हो, जैसे रिक्त स्थानों का उपयोग न करना या फिर व्यक्तिवाचक संज्ञाओं का लिप्यतरण। $1",
+ "translate-page-description-hasoptional-open": "वैकल्पिक संदेश दिखाएँ।",
+ "translate-page-edit": "सम्पादन",
+ "translate-optional": "(वैकल्पिक)",
+ "translate-ignored": "(अवगणित)",
+ "translate-edit-title": "\"$1\" को संपादित करें",
+ "translate-edit-definition": "संदेश की व्याख्या",
+ "translate-edit-contribute": "योगदान दें",
+ "translate-edit-no-information": "<em>इस संदेश का कोई प्रलेख नहीं है।\nअगर आपको पता है कि इस संदेश का उपयोग कहाँ होता है, आप इस संदेश का प्रलेख जोड़कर दूसरे अनुवादकों की मदद कर सकते हैं।</em>",
+ "translate-edit-information": "संदेश ($1) के बारे में जानकारी",
+ "translate-edit-warnings": "अधूरे अनुवादों के बारे में चेतावनी",
+ "translate-edit-tmmatch-source": "अनुवाद का स्रोत पाठ: $1",
+ "translate-edit-tmmatch": "$1% मेल खाता है",
+ "translate-edit-nopermission": "संदेशों को अनुवादित करने के लिए आपको अनुवाद अधिकार चाहिए।",
+ "translate-edit-askpermission": "अनुमति लें",
+ "exporttranslations": "अनुवाद निर्यात करें",
+ "translate-export-form-format": "प्रारूप",
+ "translate-export-invalid-format": "कृपया एक मान्य फॉर्मेट दें।",
+ "translate-export-not-supported": "अनुवाद निर्यात असमर्थित है।",
+ "translate-export-format-notsupported": "निर्दिष्ट फॉर्मेट संदेश समूह द्वारा असमर्थित है।",
+ "translate-export-group-too-large": "चयनित संदेश समूह कुछ ज़्यादा ही बड़ा है। कोई ऐसा संदेश समूह चुनें जिसमें $1 {{PLURAL:$1|संदेश}} से कम संदेश हो, या सलाह के लिए अनुवाद प्रबंधक से संपर्क करें।",
+ "translate-checks-parameters": "{{PLURAL:$2|इस पैरामीटर|इन पैरामीटरों}} का इस्तेमाल नहीं किया गया है: <strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|यह पैरामीटर अनजान है।|ये पैरामीटर अनजान हैं}}: <strong>$1</strong>",
+ "translate-checks-balance": "{{PLURAL:$2|कोष्ठक|कोष्ठकों}} की संख्या असंतुलित है: <strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|यह कड़ी|$2 कड़ियाँ}} दिक्कत पैदा कर सकती {{PLURAL:$2|है|हैं}}: <strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|यह कड़ी|$2 कड़ियाँ}} अनुपस्थित {{PLURAL:$2|है|हैं}}: <strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "परिभाषा में <nowiki>{{PLURAL:}}</nowiki> है मगर अनुवाद में नहीं।",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> को {{PLURAL:$1|एक रूप दिया गया था|$1 रूप दिए गए थे}} मगर {{PLURAL:$2|सिर्फ एक रूप|$2 रूप}} समर्थित {{PLURAL:$2|है|हैं}} (0= और 1= रूपों को छोड़कर)।",
+ "translate-checks-plural-dupe": "आखिर में <nowiki>{{PLURAL:}}</nowiki> के नकली रूप हैं। <nowiki>{{PLURAL:$1|sheep|sheep}}</nowiki> को <nowiki>{{PLURAL:$1|sheep}}</nowiki> के रूप में लिखा जाना चाहिए।",
+ "translate-checks-gettext-plural-missing": "इस अनुवाद में <nowiki>{{PLURAL:GETTEXT|}}</nowiki> होना चाहिए।",
+ "translate-checks-gettext-plural-unsupported": "यह संदेश <nowiki>{{PLURAL:GETTEXT|}}</nowiki> का समर्थन नहीं करता है।",
+ "translate-checks-gettext-plural-count": "<nowiki>{{PLURAL:GETTEXT|}}</nowiki> बिलकुल $1 {{PLURAL:$1|plural form|plural forms}} स्वीकार करता है। वर्तमान में $2 बहुवचन {{PLURAL:$2|दिया गया है|दिए गए हैं}}।",
+ "translate-checks-smartformat-plural-missing": "अनुवाद के वेरिएबल $1 में बहुवचन होना होगा।",
+ "translate-checks-smartformat-plural-unsupported": "अनुवाद के वेरिएबल $1 में बहुवचन समर्थित नहीं है।",
+ "translate-checks-smartformat-plural-count": "<strong>$3</strong> में बहुवचनों की गलत संख्या। इसमें $1 बहुवचन {{PLURAL:$1|होना|होने}} चाहिए। वर्तमान $2 बहुवचन दर्ज {{PLURAL:$2|किया गया है|किए गए हैं}}।",
+ "translate-checks-unicode-plural-missing": "इस अनुवाद में <nowiki>{{PLURAL|}}</nowiki> होना चाहिए।",
+ "translate-checks-unicode-plural-unsupported": "यह संदेश <nowiki>{{PLURAL|}}</nowiki> का समर्थन नहीं करता है।",
+ "translate-checks-unicode-plural-invalid": "बहुवचनों को $1 के रूप में परिभाषित किया जाना चाहिए। इस अनुवाद में $2 है।",
+ "translate-checks-pagename": "परिभाषा से नामस्थान बदली गई",
+ "translate-checks-format": "यह अनुवाद परिभाषा का पालन नहीं करता या फिर इसमें अमान्य सिनटैक्स है: $1",
+ "translate-checks-escape": "{{PLURAL:$2|यह|ये}} इस्केप अक्षर आकस्मिक हो {{PLURAL:$2|सकता है|सकते हैं}}: <strong>$1</strong>। {{PLURAL:$4|एक मान्य इस्केप अक्षर है|कुछ मान्य इस्केप अक्षर हैं:}} $3।",
+ "translate-checks-parametersnotequal": "पैरामीटरों की संख्या {{PLURAL:$1|$1}} है; इसे {{PLURAL:$2|$2}} होना चाहिए।",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> विकृत है।",
+ "translate-checks-fudforum-syntax": "इस परियोजना में <nowiki>$2</nowiki> की जगह <nowiki>$1</nowiki> का उपयोग करें।",
+ "translate-checks-newline-missing-start": "अनुवाद के शुरुआत में $1 अनुपस्थित नई-पंक्ति {{PLURAL:$1|अक्षर}} {{PLURAL:$1|है|हैं}}।",
+ "translate-checks-newline-missing-end": "अनुवाद के अंत में $1 अनुपस्थित नई-पंक्ति {{PLURAL:$1|अक्षर}} {{PLURAL:$1|है|हैं}}।",
+ "translate-checks-newline-extra-start": "अनुवाद के शुरुआत में $1 अतिरिक्त नई-पंक्ति {{PLURAL:$1|अक्षर}} {{PLURAL:$1|है|हैं}}।",
+ "translate-checks-newline-extra-end": "अनुवाद के अंत में $1 अतिरिक्त नई-पंक्ति {{PLURAL:$1|अक्षर}} {{PLURAL:$1|है|हैं}}।",
+ "translate-checks-value-not-present": "अनुवाद को {{PLURAL:$1|1=|इनमें से किसी एक वैल्यू के समान होना पड़ेगा:}} $1।",
+ "translate-checks-replacement": "$2 की जगह $1 का उपयोग करें।",
+ "translate-checks-empty": "बिना किसी सामग्री, या फिर सिर्फ व्हाइटस्पेस के साथ अनुवादित नहीं किया जा सकता।",
+ "translate-pref-editassistlang": "सहायक भाषाएँ:",
+ "prefs-translate": "अनुवाद के विकल्प",
+ "translate-pref-editassistlang-help": "भाषा कोड्स की सूची जिसे कॉमा से अलग किया गया हो।\nअनुवादित करते समय इन भाषाओं में अनुवादों को दिखाया जाता है।\nभाषाओं की डिफॉल्ट सूची आपकी भाषा पर निर्भर है।",
+ "translate-pref-editassistlang-bad": "सूची में अमान्य भाषा कोड:\n<nowiki>$1</nowiki>",
+ "right-translate": "अनुवाद इंटरफेस की मदद से संपादित करें",
+ "action-translate": "अनुवाद इंटरफेस की मदद से संपादित करें",
+ "right-translate-manage": "संदेश समूहों को प्रबंधित करें",
+ "action-translate-manage": "संदेश समूहों को प्रबंधित करें",
+ "right-translate-import": "ऑफलाइन अनुवादों को आयात करें",
+ "action-translate-import": "ऑफलाइन अनुवादों को आयात करने",
+ "right-translate-messagereview": "अनुवादों को जाँचें",
+ "action-translate-messagereview": "अनुवादों को निरीक्षित करें",
+ "right-translate-groupreview": "संदेश समूहों की कार्यप्रवाह स्थिति को बदलें",
+ "action-translate-groupreview": "संदेश समूहों की कार्यप्रवाह स्थिति को बदलने",
+ "translate-rcfilters-translations": "अनुवाद",
+ "translate-rcfilters-translations-only-label": "अनुवाद",
+ "translate-rcfilters-translations-only-desc": "अनुवादित पृष्ठों पर बदलाव।",
+ "translate-rcfilters-translations-filter-label": "अनुवाद नहीं",
+ "translate-rcfilters-translations-filter-desc": "सभी बदलाव जो अनुवाद नहीं हैं।",
+ "translate-rcfilters-translations-site-label": "साइट के संदेश",
+ "translate-rcfilters-translations-site-desc": "मीडियाविकि नामस्थान पर साइट संदेशों का अनुकूलन।",
+ "translate-rc-translation-filter": "अनुवाद फ़िल्टर करें:",
+ "translate-rc-translation-filter-no": "कुछ न करें",
+ "translate-rc-translation-filter-only": "केवल अनुवाद दिखाएँ",
+ "translate-rc-translation-filter-filter": "अनुवाद छाँटें",
+ "translate-rc-translation-filter-site": "सिर्फ साइट के संदेशों पर बदलाव",
+ "translationstats": "अनुवाद के आँकड़े",
+ "translate-stats-edits": "सम्पादन",
+ "translate-stats-users": "अनुवादक",
+ "translate-stats-registrations": "पंजीकरण",
+ "translate-stats-reviews": "जाँच",
+ "translate-stats-reviewers": "पुनरीक्षक",
+ "translate-statsf-intro": "आप इस फ़ॉर्म की मदद से साधारण सांख्यिकी जनरेट कर सकते हैं।\nसभी वैल्यूओं पर अधिकतम और न्यूनतम सीमाएँ हैं।",
+ "translate-statsf-options": "ग्राफ बिकल्प",
+ "translate-statsf-width": "पिक्सेल में चौड़ाई:",
+ "translate-statsf-height": "पिक्सेल में ऊँचाई:",
+ "translate-statsf-days": "दिन में समय अवधि:",
+ "translate-statsf-start": "आरंभ तारीख:",
+ "translate-statsf-scale": "कणिकामयता (Granularity):",
+ "translate-statsf-scale-years": "वर्ष",
+ "translate-statsf-scale-months": "महीने",
+ "translate-statsf-scale-weeks": "सप्ताह",
+ "translate-statsf-scale-days": "दिन",
+ "translate-statsf-scale-hours": "घंटे",
+ "translate-statsf-count": "माप:",
+ "translate-statsf-count-edits": "संपादनों की संख्या",
+ "translate-statsf-count-users": "सक्रिय अनुवादक",
+ "translate-statsf-count-registrations": "नए सदस्य",
+ "translate-statsf-count-reviews": "अनुवादों की समीक्षाएँ",
+ "translate-statsf-count-reviewers": "पुनरीक्षक",
+ "translate-statsf-language": "भाषा कोड्स की सूची जिसे कॉमा से अलग किया गया हो:",
+ "translate-statsf-group": "समूहों की सूची जिसे कॉमा से अलग किया गया हो:",
+ "translate-statsf-submit": "पूर्वावलोकन",
+ "translate-statsf-unknown-error": "अज्ञात त्रुटि आई।",
+ "translate-statsf-error-message": "ग्राफ़ को लोड करते समय त्रुटि आई: $1",
+ "translate-statsf-graph-alt-text-info": "अनुवाद सांख्यिकी के विकल्प के रूप में मौजूद टेक्स्ट को नीचे के डेटा टेबल पर दिखाया गया है।",
+ "translate-statsf-alt-text": "यह अनुवाद सांख्यिकी के विकल्प के रूप में मौजूद टेक्स्ट है।",
+ "translate-statsf-embed": "दूसरे पृष्ठ पर अनुवाद सांख्यिकी को एम्बेड करने के लिए कोड।",
+ "translate-tag-page-desc": "$3 ($4) से [[$2|$1]] विकि पृष्ठ का अनुवाद।",
+ "translate-tag-page-wikipage-desc": "<bdi>$3</bdi> ($4) से विकि पृष्ठ [[$2]] का <bdi>$5</bdi> ($6) में [[$1|अनुवाद]]",
+ "translate-sidebar-alltrans": "अन्य भाषाओं में",
+ "translations": "सभी अनुवाद",
+ "translations-summary": "सभी उपलब्ध अनुवाद देखने के लिए नीचे किसी संदेश का नाम दर्ज करें।",
+ "translate-translations-no-message": "\"$1\" एक अनुवाद-योग्य संदेश नहीं है",
+ "translate-translations-none": "\"$1\" के लिए कोई अनुवाद नहीं है",
+ "translate-translations-count": "{{PLURAL:$1|एक अनुवाद मिला|$1 अनुवाद मिले}}।",
+ "translate-translations-fieldset-title": "संदेश",
+ "translate-translations-messagename": "नाम:",
+ "translate-translations-project": "परियोजना:",
+ "translate-translations-including-no-param": "उपपृष्ठ पैरामीटर में कृपया एक मान्य संदेश कुँजी दर्ज करें",
+ "translate-translations-history-short": "इति.",
+ "languagestats": "भाषा सांख्यिकी",
+ "languagestats-summary": "इस पृष्ठ पर किसी भाषा के सभी संदेश समूह पर अनुवाद आँकड़ों को दिखाया जाता है।",
+ "messagegroupstats-summary": "इस पृष्ठ पर संदेश समूहों की सांख्यिकी दिखाई जाती है।",
+ "languagestats-stats-for": "$1 के लिए अनुवाद सांख्यिकी ($2)।",
+ "languagestats-recenttranslations": "हाल ही में हुए अनुवाद",
+ "translate-langstats-incomplete": "इस पृष्ठ पर कुछ सांख्यिकी अधूरी है। कृपया अधिक सांख्यिकी पाने के लिए पुनः लोड करें।",
+ "translate-langstats-expand": "विस्तृत करें",
+ "translate-langstats-collapse": "छोटा करें",
+ "translate-langstats-expandall": "सब विस्तृत करें",
+ "translate-langstats-collapseall": "सब छोटा करें",
+ "translate-language-code": "भाषा कोड",
+ "translate-language-code-field-name": "भाषा कोड:",
+ "translate-suppress-complete": "पूरी तरह से अनुवादित संदेश समूहों को छिपाएँ",
+ "translate-ls-noempty": "पूरी तरह से अनानुवादित संदेश समूहों को छिपाएँ",
+ "translate-language": "भाषा",
+ "translate-total": "संदेश",
+ "translate-untranslated": "अनानुवादित",
+ "translate-percentage-complete": "समाप्ति",
+ "translate-percentage-fuzzy": "कालग्रस्त",
+ "translate-percentage-proofread": "पुनरीक्षित",
+ "translate-languagestats-overall": "सभी संदेश समूह एक साथ",
+ "translate-ls-submit": "आँकड़े दिखाएँ",
+ "translate-ls-column-group": "संदेश समूह",
+ "translate-mgs-pagename": "संदेश समूह सांख्यिकी",
+ "translate-mgs-fieldset": "प्राथमिकताएँ दिखाएँ",
+ "translate-mgs-group": "संदेश समूह:",
+ "translate-mgs-nocomplete": "जिन भाषाओं का अनुवाद पूर्ण हो चुका है उन्हें न दिखाएँ",
+ "translate-mgs-noempty": "जिन भाषाओं का अनुवाद नहीं है उन्हें न दिखाएँ",
+ "translate-mgs-submit": "आँकड़े दिखाएँ",
+ "translate-mgs-column-language": "भाषा",
+ "translate-mgs-totals": "सभी $1 {{PLURAL:$1|भाषा|भाषाएँ}} साथ में",
+ "translate-mgs-invalid-group": "निर्दिष्ट समूह $1 मौजूद नहीं है।",
+ "translate-mgs-nothing": "अनुरोध किए गए आँकड़ों में दिखाने के लिए कुछ नहीं है।",
+ "translate-tes-server-error": "खोज के सुझाव लाए न जा सके",
+ "translate-tes-group-not-found": "कोई मेल खाता परिणाम नहीं है",
+ "translate-tes-type-to-search": "खोज शुरू करने के लिए लिखें",
+ "supportedlanguages": "सक्रिय भाषाएँ",
+ "supportedlanguages-summary": "यह पृष्ठ {{SITENAME}} पर सक्रिय भाषाओं की सूची दिखाता है,\nऔर साथ में उन अनुवादकों का नाम जो इस भाषा पर काम कर रहे हैं।\nजितने संपादन अनुवादक ने किए हैं, उसका नाम उतना ही बड़ा दिखता है।\nनिम्नरेखा के रंग से पता लगता है कि अनुवादक ने आखिरी बार कब यहाँ अनुवाद किया था।",
+ "supportedlanguages-colorlegend": "रंग का चिह्न: $1 दिन पहले आखिरी अनुवाद।",
+ "supportedlanguages-sqlite-error": "SQLite का समर्थन नहीं है",
+ "supportedlanguages-postgres-error": "PostgreSQL का समर्थन नहीं है",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|अनुवादक}}}}: $1",
+ "supportedlanguages-recenttranslations": "हाल में हुए अनुवाद",
+ "supportedlanguages-count": "कुल $1 {{PLURAL:$1|भाषा|भाषाएँ}}।",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|सम्पादन}} - आखिरी सम्पादन $3 {{PLURAL:$3|दिन}} पहले",
+ "translate-supportedlanguages-cached": "इस जानकारी को $1 पहले कैश किया गया था।",
+ "translate-activelanguages-invalid-code": "भाषा कोड \"$1\" अज्ञात है या फिर इसे अनुवाद के लिए सक्षम नहीं किया गया है।",
+ "abusefilter-edit-builder-vars-translate-source-text": "अनुवाद इकाई का स्रोत टेक्स्ट",
+ "abusefilter-edit-builder-vars-translate-target-language": "अनुवाद का लक्ष्य भाषा",
+ "translate-jssti-add": "सूची में जोड़ें",
+ "managemessagegroups": "संदेश समूह प्रबंधक",
+ "translate-smg-notallowed": "आप इस कार्य को नहीं चला सकते।",
+ "translate-smg-nochanges": "प्रोसेस करने के लिए कोई बदलाव नहीं है।",
+ "translate-smg-submit": "प्रोसेस करने के लिए बदलाव प्रस्तुत करें",
+ "translate-smg-submitted": "संदेश की परिभाषाओं को बदला गया है। बैकग्राउंड में बदलावों को प्रोसेस किया जा रहा है।",
+ "translate-smg-submitted-with-failure": "{{PLURAL:$1|इस समूह|इन समूहों}} में संदेश की {{PLURAL:$1|इस परिभाषा|इन परिभाषाओं}} को बदला न जा सका - $2। $3",
+ "translate-smg-submitted-others-processing": "दूसरे समूहों के संदेश परिभाषाओं को बैकग्राउंड में प्रोसेस किया जा रहा है।",
+ "translate-smg-more": "इन बदलावों को प्रस्तुत करने के बाद प्रोसेस करने के लिए और भी बदलाव होंगे।",
+ "translate-smg-left": "विकि पर संदेश की सामग्री",
+ "translate-smg-right": "आगामी बदलाव",
+ "translate-smg-rename-select": "चुनें",
+ "translate-smg-rename-cancel": "रद्द करें",
+ "translate-smg-rename-search": "मेल खाने वाले संदेश को खोजें...",
+ "translate-smg-rename-select-err": "कृपया नाम बदलने के लिए संदेश चुनें",
+ "translate-smg-rename-no-msg": "कोई संदेश नहीं मिला।",
+ "translate-smg-rename-new": "नया जोड़ें...",
+ "translate-smg-rename-rename": "इसके स्थानांतरण के रूप में जोड़ें...",
+ "translate-smg-rename-dialog-title": "$1 के मेल खाने वाले स्थानांतरण को चुनें",
+ "translate-smg-changeset-modified": "बदलाव-सेट को किसी दूसरे सदस्य या प्रक्रिया द्वारा बदला गया है। आपके बदलावों को प्रकाशित नहीं किया जा सकता क्योंकि इससे उनके बदलाव ओवर्राइड हो सकते हैं। आखिरी बदलाव देखने के लिए पृष्ठ को दोबारा लोड करें।",
+ "translate-smg-no-groups-in-sync": "वर्तमान किसी भी समूह को तादात्मयित नहीं किया जा रहा है",
+ "translate-smg-strong-sync-help": "सहायता",
+ "translate-smg-groups-in-sync": "वर्तमान तादात्म्य में मौजूद समूह",
+ "translate-smg-groups-in-sync-list": "वर्तमान बैकग्राउंड में प्रोसेस किए जा रहे समूहों की सूची:",
+ "translate-smg-groups-with-error-title": "समूह जिनपर तादात्म्य के समय त्रुटियाँ आई",
+ "translate-smg-groups-with-error-desc": "समूह और उनके संदेशों की सूची जिनपर तादात्म्य के समय त्रुटि आई:",
+ "translate-smg-group-with-error-summary": "त्रुटियों वाले $1 {{PLURAL:$1|संदेश}}:",
+ "translate-smg-group-message-action-history": "इतिहास",
+ "translate-smg-group-action-resolve": "हल हुआ चिह्नित करें",
+ "translate-smg-group-sync-error-warn": "तादात्म्य के समय इस समूह पर एक त्रुटि आई। इस समूह को प्रोसेस करने से पहले कृपया त्रुटियों को ठीक करें।",
+ "translate-smg-group-message-tag-outdated": "कालग्रस्त",
+ "translate-smg-group-message-tag-rename": "नाम बदलें",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|टैग|टैग्स}}:",
+ "translate-smg-group-message-message-content": "सामग्री:",
+ "translate-smg-group-message-message-target": "लक्ष्य:",
+ "translate-smg-group-message-message-replacement": "प्रतिस्थापन:",
+ "translate-smg-group-message-message-other-langs": "अन्य भाषाएँ:",
+ "translate-smg-loading": "लोड हो रहा है...",
+ "translate-smg-unknown-error": "आपके अनुरोध को प्रोसेस करते समय अज्ञात त्रुटि थी।",
+ "translate-manage-import-diff": "संदेश $1 | क्रियाएँ: $2",
+ "translate-manage-import-new": "नया संदेश $1",
+ "translate-manage-import-deleted": "$1 संदेश हटाया गया",
+ "translate-manage-action-import": "आयात करें",
+ "translate-manage-action-conflict": "आयात और \"fuzzy\" करें",
+ "translate-manage-action-ignore": "अनदेखा करें",
+ "translate-manage-action-fuzzy": "अनुवादों को आयात और \"fuzzy\" करें",
+ "translate-manage-action-rename-fuzzy": "अनुवादों को स्थानांतरित और \"fuzzy\" करें",
+ "translate-manage-action-rename": "नाम बदलें",
+ "translate-manage-action-ignore-change": "अनुवाद में बदलाव को अनदेखा करें",
+ "translate-manage-nochanges": "इस समूह के संदेश परिभाषाओं में कोई बदलाव नहीं है।",
+ "translate-manage-nochanges-other": "इस भाषा में कोई बदलाव नहीं आए।\nसमूह की जानकारी पर वापस जाने के लिए नीचे की कड़ी का उपयोग करें।",
+ "translate-manage-inconsistent": "अनुरोध में असंगति का पता चला।\nबदलावों को जाँचें और दोबारा कोशिश करें।\nविस्तार: $1।",
+ "translate-manage-toolong": "प्रोसेसिंग का अधिकतम समय $1 {{PLURAL:$1|सेकंड}}, पार हो चुका है।\nप्रोसेस करते रहने के लिए कृपया फॉर्म को दोबारा प्रस्तुत करें।",
+ "translate-manage-import-summary": "बाहरी स्रोत से नए संस्करण को आयात किया जा रहा है",
+ "translate-manage-import-ignore": "संदेश $1 को छोड़ा जा रहा है।",
+ "translate-manage-import-rename-summary": "बाहरी स्रोत में स्थानांतरित किया गया है",
+ "translate-manage-conflict-summary": "बाहरी स्रोत से नए संस्करण को आयात किया जा रहा है।\nकृपया जाँचें।",
+ "translate-manage-submit": "चलाएँ",
+ "translate-manage-intro-other": "नीचे $1 भाषा के अनुवादों में बदलावों की सूची है।\nकृपया बदलावों को निरीक्षित करें और हर बदलाव के लिए प्रतिक्रिया चुनें।\nअगर आप बदलावों को अनदेखा करना चाहते हैं, यह कार्य अस्थायी होगा।",
+ "translate-manage-import-ok": "आयात किया गया: $1",
+ "translate-manage-import-done": "आयात पूर्ण हुआ!",
+ "translate-manage-empty-content": "सामग्री खाली है",
+ "translate-manage-key-reused": "यह संदेश विकि पर पहले से ही मौजूद है। पुरानी कुँजी के आकस्मिक उपयोग को जाँचें।",
+ "translate-manage-source-message-not-found": "संदेश की परिभाषा नहीं मिली",
+ "importtranslations": "अनुवाद आयात करें",
+ "translate-import-from-local": "स्थानीय फ़ाइल अपलोड:",
+ "translate-import-load": "चित्र लोड करें",
+ "translate-import-err-dl-failed": "इस फाइल को न लाया जा सका:\n$1",
+ "translate-import-err-ul-failed": "चित्र अपलोड विफल रहा",
+ "translate-import-err-invalid-title": "दर्ज किया गया फाइलनाम <nowiki>$1</nowiki> अमान्य था।",
+ "translate-import-err-no-such-file": "फाइल <nowiki>$1</nowiki> मौजूद नहीं है या फिर इसे लोकल रूप से अपलोड नहीं किया गया है।",
+ "translate-import-err-stale-group": "वह संदेश समूह मौजूद नहीं है जिसमें यह फाइल है।",
+ "translate-import-err-no-headers": "फाइल अनुवाद एक्सटेंशन के प्रारूप में एक अच्छे-से बनाया गया Gettext फाइल नहीं है:\nफाइल के हैडर से संदेश समूह और भाषा का पता नहीं लगाया जा सका।",
+ "translate-js-support-unsaved-warning": "आपके पास बिना सहेजे गए अनुवाद हैं।",
+ "translate-gs-pos": "स्थान",
+ "translate-gs-code": "कोड",
+ "translate-gs-continent": "महाद्वीप",
+ "translate-gs-speakers": "वक्ता",
+ "translate-gs-score": "अंक",
+ "translate-gs-multiple": "एकाधिक",
+ "translate-gs-count": "गणना",
+ "translate-gs-total": "कुल",
+ "translate-gs-avgscore": "औसत स्कोर",
+ "translate-documentation-language": "संदेश का प्रलेख",
+ "translate-searchprofile": "अनुवाद",
+ "translate-searchprofile-tooltip": "सभी अनुवादों में खोजें",
+ "translate-searchprofile-note": "[$1 अनुवाद खोज] से और भी खोज विकल्प उपलब्ध हैं।",
+ "translate-search-languagefilter": "भाषा के तौर पर छाँटें:",
+ "translate-search-nofilter": "न छाँटें",
+ "log-name-translationreview": "अनुवाद जाँच लॉग",
+ "log-description-translationreview": "अनुवादों और संदेश समूहों पर सभी निरीक्षणों का लॉग",
+ "logentry-translationreview-message": "$1 ने अनुवाद $3 को {{GENDER:$2|निरीक्षित किया}}",
+ "logentry-translationreview-group": "$1 ने $3 के $4 अनुवादों की स्थिति को $6 से $7 में {{GENDER:$2|बदला}}",
+ "group-translate-sandboxed": "अस्वीकृत अनुवादक",
+ "group-translate-sandboxed-member": "{{GENDER:$1|अस्वीकृत अनुवादक}}",
+ "right-translate-sandboxmanage": "प्रयोगपृष्ठ सदस्यों को प्रबंधित करें",
+ "action-translate-sandboxmanage": "प्रयोगपृष्ठ सदस्यों को प्रबंधित करने",
+ "right-translate-sandboxaction": "प्रयोगपृष्ठ सदस्यों को उपलब्ध कार्यों को चलाएँ",
+ "action-translate-sandboxaction": "प्रयोगपृष्ठ सदस्यों को उपलब्ध कार्यों को चलाने",
+ "translate-workflow-state-": "(सेट नहीं किया गया)",
+ "translate-workflowstatus": "स्थिति: $1",
+ "translate-workflow-set-doing": "सेट हो रहा है...",
+ "translate-workflow-autocreated-summary": "कार्यप्रवाह स्थिति $1 के लिए स्वचालित पृष्ठ सृष्टि",
+ "translate-stats-workflow": "स्थिति",
+ "translate-workflowgroup-label": "कार्यप्रवाह की स्थितियाँ",
+ "translate-workflowgroup-desc": "इस संदेश समूह में कार्यप्रवाह की स्थितियाँ हैं।\nस्थितियों को कॉन्फिगरेशन वेरिएबल $wgTranslateWorkflowStates पर परिभाषित किया गया है।",
+ "translate-dynagroup-recent-label": "हाल ही में हुए अनुवाद",
+ "translate-dynagroup-recent-desc": "इस संदेश समूह में इस भाषा के नवीनतम अनुवादों को सूचीबद्ध किया गया है।\nनिरीक्षण के काम आता है।",
+ "translate-dynagroup-additions-label": "हाल में जोड़े गए अनुवाद",
+ "translate-dynagroup-additions-desc": "इस संदेश समूह में नए और बदले गए संदेश दिखाए जाते हैं।",
+ "translate-msggroupselector-projects": "संदेश समूह",
+ "translate-msggroupselector-search-placeholder": "समूहों में खोजें",
+ "translate-msggroupselector-search-all": "सभी",
+ "translate-msggroupselector-search-recent": "हाल ही के",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|उपपृष्ठ}}",
+ "tux-languageselector": "अनुवाद का लक्ष्य",
+ "tux-select-target-language": "अनुवाद का लक्ष्य भाषा",
+ "tux-tab-all": "सभी",
+ "tux-tab-untranslated": "अनानुवादित",
+ "tux-tab-outdated": "कालग्रस्त",
+ "tux-tab-translated": "अनुवादित",
+ "tux-tab-unproofread": "अनिरीक्षित",
+ "tux-edit": "संपादित करें",
+ "tux-status-optional": "वैकल्पिक",
+ "tux-status-fuzzy": "कालग्रस्त",
+ "tux-status-proofread": "पुनरीक्षित",
+ "tux-status-translated": "अनुवादित",
+ "tux-status-saving": "सहेज रहा है...",
+ "tux-status-unsaved": "नहीं सहेजा गया",
+ "tux-save-unknown-error": "अज्ञात त्रुटि आई।",
+ "tux-editor-placeholder-documentation": "संदेश का प्रलेख जोड़ें",
+ "tux-editor-placeholder-language": "$1 में आपका अनुवाद",
+ "tux-editor-editsummary-placeholder": "अपने बदलावों को वर्णित करें (वैकल्पिक)",
+ "tux-editor-paste-original-button-label": "स्रोत पाठ का उपयोग करें",
+ "tux-editor-discard-changes-button-label": "परिवर्तनों को त्यागें",
+ "tux-editor-save-button-label": "अनुवाद सहेजें",
+ "tux-editor-skip-button-label": "त्यागें और आगे जाएँ",
+ "tux-editor-cancel-button-label": "रद्द करें",
+ "tux-editor-confirm-button-label": "अनुवाद को निश्चित करें",
+ "tux-editor-proofread-button-label": "निरीक्षित के रूप में चिह्नित करें",
+ "tux-editor-shortcut-info": "सुनिश्चित करके अगले संदेश पर जाने के लिए \"$1\" दबाएँ, छोड़ने के लिए \"$2\", सारांश प्रदान करने के लिए \"$4\", या दूसरे शॉर्टकट देखने के लिए \"$3\" को दबाए रखें।",
+ "tux-editor-edit-desc": "प्रलेख सम्पादित करें",
+ "tux-editor-add-desc": "प्रलेख जोड़ें",
+ "tux-editor-suggestions-title": "सुझाव",
+ "tux-editor-latest-updates-title": "नवीनतम बदलाव",
+ "tux-editor-changes-without-summary": "बिना सारांश के $1 {{PLURAL:$1|अपडेट}}",
+ "tux-editor-all-changes": "सभी बदलाव",
+ "tux-editor-in-other-languages": "अन्य भाषाओं में",
+ "tux-editor-need-more-help": "और मदद चाहिए?",
+ "tux-editor-ask-help": "और मदद माँगें",
+ "tux-editor-tm-match": "$1% मेल खाता है",
+ "tux-notices-more": "{{PLURAL:$1|$1 और}}",
+ "tux-notices-hide": "छुपाएँ",
+ "tux-editor-save-failed": "अनुवाद सहेजा न जा सका: $1",
+ "tux-editor-n-uses": "$1 {{PLURAL:$1|बार}} उपयोग किया गया",
+ "tux-editor-message-desc-more": "अधिक देखें",
+ "tux-editor-message-desc-less": "कम देखें",
+ "tux-editor-clear-translated": "अनुवादित छिपाएँ",
+ "tux-editor-proofreading-mode": "पुनरीक्षण",
+ "tux-editor-translate-mode": "सूची",
+ "tux-editor-proofreading-hide-own-translations": "अपने अनुवाद छिपाएँ",
+ "tux-editor-proofreading-show-own-translations": "अपने अनुवाद दिखाएँ",
+ "tux-proofread-action-tooltip": "निरीक्षित चिह्नित करें",
+ "tux-proofread-edit-label": "सम्पादन",
+ "tux-editor-page-mode": "पृष्ठ",
+ "tux-editor-outdated-notice": "इस अनुवाद को शायद अद्यतन की ज़रूरत है।",
+ "tux-editor-outdated-notice-diff-link": "अंतर देखें",
+ "tux-editor-doc-editor-placeholder": "संदेश प्रलेखन",
+ "tux-editor-doc-editor-save": "प्रलेखन को प्रकाशित करें",
+ "tux-editor-doc-editor-cancel": "रद्द करें",
+ "tux-messagetable-more-messages": "$1 संदेश और {{PLURAL:$1|हैं}}",
+ "tux-messagetable-loading-messages": "संदेश लोड हो {{PLURAL:$1|रहा है|रहे हैं}}...",
+ "tux-message-filter-placeholder": "सूची को छानें",
+ "tux-message-filter-result": "\"$2\" के लिए {{PLURAL:$1|$1 अंजाम मिला|$1 अंजाम मिले}}",
+ "tux-message-filter-advanced-button": "उन्नत खोज",
+ "tux-message-filter-optional-messages-label": "वैकल्पिक संदेश",
+ "tux-proofread-translated-by-self": "आप द्वारा अनुवादित",
+ "tux-empty-list-all": "यह संदेश समूह खाली है",
+ "tux-empty-list-all-guide": "अनुवादित करने के लिए कोई दूसरा संदेश समूह चुनें",
+ "tux-translate-page-no-such-group": "<strong>यह समूह मौजूद नहीं है।</strong> कृपया दूसरा संदेश समूह चुनें।",
+ "tux-empty-list-translated": "कोई अनुवादित संदेश नहीं है",
+ "tux-empty-list-translated-guide": "आप अनुवाद से मदद कर सकते हैं",
+ "tux-empty-list-translated-action": "अनुवाद करें",
+ "tux-empty-no-messages-to-display": "दिखाने के लिए कोई संदेश नहीं है।",
+ "tux-empty-there-are-optional": "इसमें वैकल्पिक संदेश हैं जिन्हें सूची पर नहीं दिखाया जा रहा",
+ "tux-empty-show-optional-messages": "वैकल्पिक संदेश देखें",
+ "tux-empty-no-outdated-messages": "कोई कालग्रस्त संदेश नहीं है",
+ "tux-empty-nothing-to-proofread": "निरीक्षित करने के लिए कुछ नहीं है",
+ "tux-empty-you-can-help-providing": "आप नए अनुवाद देकर मदद कर सकते हैं",
+ "tux-empty-nothing-new-to-proofread": "निरीक्षित करने के लिए कुछ नया नहीं है",
+ "tux-empty-you-can-review-already-proofread": "आप किसी और के निरीक्षित अनुवादों को भी निरीक्षित कर सकते हैं।",
+ "tux-empty-list-other": "अनुवादित करने के लिए कुछ नहीं है",
+ "tux-empty-list-other-guide": "आप मौजूदा अनुवादों को निरीक्षित करके मदद कर सकते हैं",
+ "tux-empty-list-other-action": "अनुवादों को निरीक्षित करें",
+ "tux-empty-list-other-link": "सभी संदेश दिखाएँ",
+ "tux-editor-close-tooltip": "बंद करें",
+ "tux-editor-expand-tooltip": "विस्तृत करें",
+ "tux-editor-collapse-tooltip": "छोटा करें",
+ "tux-editor-message-tools-show-editor": "विकि एडिटर में देखें",
+ "tux-editor-message-tools-history": "इतिहास",
+ "tux-editor-message-tools-delete": "हटाएँ",
+ "tux-editor-message-tools-translations": "सभी अनुवाद",
+ "tux-editor-message-tools-linktothis": "इस संदेश की कड़ी",
+ "tux-editor-loading": "लोड हो रहा है...",
+ "tux-editor-loading-failed": "अनुवाद सहायताओं को लोड न किया जा सका: $1",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|भाषा|भाषाएँ}} और",
+ "translate-statsbar-tooltip": "$1% अनुवादित, $2% निरीक्षित",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% को अनुवादित किया गया है, $2% को जाँचा गया है, $3% कालग्रस्त है",
+ "translate-search-more-groups-info": "$1 अधिक {{PLURAL:$1|समूह}}",
+ "translate-syntax-error": "अनुवाद में सिनटैक्स त्रुटियाँ हैं",
+ "tux-session-expired": "आप ने लॉग-इन नहीं किया है। कृपया दूसरे टैब पर लॉग इन करें। वैकल्पिक रूप से, न सहेजे गए अनुवादों की प्रतिलिपि बनाएँ, लॉग-इन करें, इस पृष्ठ पर वापस आएँ और अपने अनुवाद दोबारा दर्ज करें।",
+ "tux-nojs": "यह उपकरण बिना जावास्क्रिप्ट के काम नहीं करता। जावास्क्रिप्ट सक्षम है, इसमें कोई त्रुटि आई होगी, या फिर यह ब्राउज़र असमर्थित है।",
+ "specialpages-group-translation": "अनुवाद",
+ "content-model-translate-messagebundle": "अनुवाद-योग्य संदेशों का बंडल",
+ "translate-messagebundle-validation-error": "अमान्य संदेश बंडल: $1",
+ "translate-messagebundle-error-parsing": "JSON को पार्स करते समय त्रुटि आई: $1",
+ "translate-messagebundle-error-invalid-array": "संदेश बंडल को JSON ऑब्जेक्ट होना होगा। प्रकार $1 मिला",
+ "translate-messagebundle-error-key-empty": "संदेश बंडल में कोई खाली कुँजी नहीं होनी चाहिए",
+ "translate-messagebundle-error-key-too-long": "कुँजी \"$1\" कुछ ज़्यादा ही लंबा है",
+ "translate-messagebundle-error-key-invalid-characters": "कुँजी \"$1\" में अस्वीकृत अक्षर हैं",
+ "translate-messagebundle-error-invalid-value": "कुँजी \"$1\" में स्ट्रिंग वैल्यू नहीं है",
+ "translate-messagebundle-error-empty-value": "कुँजी \"$1\" में वैल्यू नहीं है",
+ "translate-messagebundle-error-metadata-type": "मेटाडेटा को एक ऐरे होना पड़ेगा।",
+ "translate-messagebundle-error-invalid-metadata": "मेटाडेटा अनुभाग में एक अनजान कुँजी \"$1\" है। समर्थित कुँजियाँ हैं $2।",
+ "translate-messagebundle-error-invalid-sourcelanguage": "स्रोत भाषा कोड \"$1\" समर्थित नहीं है।",
+ "translate-messagebundle-error-invalid-prioritylanguage": "मेटाडेटा में अमान्य प्राथमिक भाषा कोड {{PLURAL:$2|है|हैं}}: $1",
+ "translate-messagebundle-error-invalid-prioritylanguage-format": "मेटाडेटा में प्राथमिक भाषा का अमान्य प्रारूप है। प्राथमिक भाषाओं को स्ट्रिंग्स का एक ऐरे होना पड़ेगा।",
+ "translate-messagebundle-group-description": "संदेश बंडल के संदेशों को पृष्ठ [[$2|$1]] पर परिभाषित किया गया है।",
+ "translate-messagebundle-change-sourcelanguage": "मेटाडेटा के अनुसार संदेश बंडल का स्रोत भाषा सेट किया जा रहा है।",
+ "translate-messagebundle-sourcelanguage-changed": "संदेश बंडल के बनने के बाद इसके स्रोत भाषा को बदला नहीं जा सकता।",
+ "log-action-filter-translationreview": "कार्य का प्रकार:",
+ "log-action-filter-translationreview-message": "अनुवाद संदेशों का निरीक्षण",
+ "log-action-filter-translationreview-group": "अनुवादों की प्रगति की स्थिति में बदलाव"
+}
diff --git a/Translate/i18n/core/hif-latn.json b/Translate/i18n/core/hif-latn.json
new file mode 100644
index 00000000..57016680
--- /dev/null
+++ b/Translate/i18n/core/hif-latn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Abdul Kadir"
+ ]
+ },
+ "translate-documentation-language": "Message ke baare me jaankari"
+}
diff --git a/Translate/i18n/core/hil.json b/Translate/i18n/core/hil.json
new file mode 100644
index 00000000..cc6a1a4b
--- /dev/null
+++ b/Translate/i18n/core/hil.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jose77",
+ "Pare Mo"
+ ]
+ },
+ "translate-page-navigation-legend": "Nabigayson",
+ "translate-documentation-language": "Dokumentasyon sg mga pahatod"
+}
diff --git a/Translate/i18n/core/hr.json b/Translate/i18n/core/hr.json
new file mode 100644
index 00000000..d8776408
--- /dev/null
+++ b/Translate/i18n/core/hr.json
@@ -0,0 +1,401 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bugoslav",
+ "Dalibor Bosits",
+ "Dnik",
+ "Eleassar",
+ "Ex13",
+ "MaGa",
+ "Neptune, the Mystic",
+ "Ponor",
+ "Roberta F.",
+ "SpeedyGonsales",
+ "Tivek"
+ ]
+ },
+ "translate": "Prevedi",
+ "translate-extensionname": "Prevedi",
+ "translate-desc": "[[Special:Translate|Posebna stranica]] za prevođenje MediaWiki i izvan",
+ "translate-fuzzybot-desc": "Ovo je poseban sustavski račun koji se rabi u [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate proširenju »Prevođenje« (engl. Translate)] MediaWikija, koje se upotrebljava za održavanje prijevoda. Ovaj je račun dio softvera MediaWiki i nije u vlasništvu ijednoga suradnika.",
+ "translate-taskui-export-to-file": "Izvoz u izvornom obliku",
+ "translate-taskui-export-as-po": "Izvoz za ''off-line'' prijevod",
+ "translate-taction-translate": "Prevođenje",
+ "translate-taction-proofread": "Pregled",
+ "translate-taction-lstats": "Statistike jezika",
+ "translate-taction-mstats": "Statistike skupine poruka",
+ "translate-taction-export": "Izvoz",
+ "translate-taction-disabled": "Ova akcija je onemogućena na ovom wikiju.",
+ "translate-page-no-such-language": "Navedeni jezični kod ne postoji.",
+ "translate-page-no-such-group": "Navedena grupa je neispravna.",
+ "translate-page-disabled": "Prijevodi na ovaj jezik u ovoj grupi su onemogućeni. Razlog:\n\n<em>$1</em>",
+ "translate-language-disabled": "Prijevod na ovaj jezik je onemogućen.",
+ "translate-page-settings-legend": "Postavke",
+ "translate-page-group": "Skupina",
+ "translate-page-language": "Jezik",
+ "translate-page-limit": "Prikaži najviše",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|poruka|poruke|poruka}} po stranici",
+ "translate-submit": "Nađi",
+ "translate-page-navigation-legend": "Navigacija",
+ "translate-page-showing": "Prikazane poruke od $1 do $2 od ukupno $3.",
+ "translate-page-showing-all": "Prikazano: $1 {{PLURAL:$1|poruka|poruke|poruka}}.",
+ "translate-page-showing-none": "Nema traženih poruka.",
+ "translate-next": "Sljedeća stranica",
+ "translate-prev": "Prethodna stranica",
+ "translate-page-description-legend": "Podaci o grupi",
+ "translate-page-description-hasoptional": "Ova skupina sadržava neobvezne poruke.\nNeobvezne poruke treba prevoditi samo ukoliko Vaš jezik ima posebne potrebe;\nna primjer, ukoliko ne treba rabiti bjeline ili ukoliko treba preslovljavati imena. $1",
+ "translate-page-description-hasoptional-open": "Prikaži dodatne poruke.",
+ "translate-page-edit": "uredi",
+ "translate-optional": "(neobvezno)",
+ "translate-ignored": "(zanemareno)",
+ "translate-edit-title": "Uredi \"$1\"",
+ "translate-edit-definition": "Definicija poruke",
+ "translate-edit-contribute": "dodaj",
+ "translate-edit-no-information": "<em>Ova poruka nema dokumentacije. Ako znate gdje ili kako se koristi poruka, možete pomoći drugim prevoditeljima dodavajući dokumentaciju ovoj poruci.</em>",
+ "translate-edit-information": "Informacije o poruci ($1)",
+ "translate-edit-warnings": "Upozorenja o nepotpunim prijevodima",
+ "translate-edit-tmmatch-source": "Izvorni tekst: $1",
+ "translate-edit-tmmatch": "$1% podudarnosti",
+ "translate-edit-nopermission": "Da biste prevodili poruke, trebate imati prevoditeljska prava.",
+ "translate-edit-askpermission": "Zatraži dopuštenje",
+ "exporttranslations": "Izvoz prijevoda",
+ "translate-export-form-format": "Oblik",
+ "translate-export-invalid-format": "Navedite valjani oblik.",
+ "translate-export-not-supported": "Izvoz prijevoda nije podržan.",
+ "translate-export-format-notsupported": "Skupina poruka ne podržava navedeni izvozni format.",
+ "translate-export-group-too-large": "Odabrana grupa poruka je prevelika. Odaberite grupu poruka koja ima manje od $1 {{PLURAL:$1|poruke|poruke|poruka}} ili se za savjet obratite administratoru prijevoda.",
+ "translate-checks-parameters": "Sljedeći {{PLURAL:$2|parametar se ne koristi|parametri se ne koriste}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "Sljedeći {{PLURAL:$2|parametar je nepoznat|parametri su nepoznati}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "Nejednak broj {{PLURAL:$2|zagrada|zagrada}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Sljedeća je poveznica problematična|$2 sljedeće poveznice problematične su|$2 sljedećih poveznica su problematične}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Nedostaje sljedeća poveznica|$2 Nedostaju sljedeće poveznice}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Definicija koristi <nowiki>{{PLURAL:}}</nowiki>, ali prijevod ne.",
+ "translate-checks-plural-forms": "U <nowiki>{{PLURAL:}}</nowiki> {{PLURAL:$1|je upisan jedan oblik|su upisana $1 oblika|je upisano $1 oblika}}, ali on {{PLURAL:$2|podržava samo jedan|podržava samo $2}} (izuzimajući oblike 0= i 1=).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> ima duplicirane oblike na kraju. <nowiki>{{PLURAL:$1|škare|škare}}</nowiki> trebalo bi pisati kao <nowiki>{{PLURAL:$1|škare}}</nowiki>.",
+ "translate-checks-gettext-plural-missing": "Ovaj prijevod mora sadržavati <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-unsupported": "Ova poruka ne podržava <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-count": "<nowiki>{{PLURAL:GETTEXT|}}</nowiki> prihvaća točno $1 {{PLURAL:$1|oblik množine|oblika množine|oblika množina}}. Trenutačno {{PLURAL:$2|je naveden $2 oblik|su navedena $2 oblika|je $2 navedenih oblika}}.",
+ "translate-checks-smartformat-plural-missing": "Ovaj prijevod mora imati množinu varijable $1.",
+ "translate-checks-smartformat-plural-unsupported": "Ova poruka ne podržava množinu varijable $1.",
+ "translate-checks-smartformat-plural-count": "Netočan broj oblika množine u <strong>$3</strong>. Mora biti $1 {{PLURAL:$1|oblik|oblika}}. Trenutačno {{PLURAL:$2|je naveden $2 oblik|su navedena $2 oblika|je $2 navedenih oblika}}.",
+ "translate-checks-unicode-plural-missing": "Ovaj prijevod mora sadržavati <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-unsupported": "Ova poruka ne podržava <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-invalid": "Oblik množine bi trebao biti definiran kao $1. Ovaj prijevod sadržava $2.",
+ "translate-checks-pagename": "Imenski prostor razlikuje se od definiranog",
+ "translate-checks-format": "Ovaj prijevod ne prati definiciju ili ima krivu sintaksu: $1",
+ "translate-checks-fudforum-syntax": "Upotrijebite nowiki>$1</nowiki> umjesto <nowiki>$2</nowiki> u ovom projektu.",
+ "translate-checks-replacement": "Upotrebljavaj $2 umjesto $1.",
+ "translate-checks-empty": "Prijevod bez sadržaja ili samo s razmakom nije dopušten.",
+ "translate-pref-editassistlang": "Pomoćni jezici:",
+ "prefs-translate": "Mogućnosti prijevoda",
+ "translate-pref-editassistlang-help": "Popis jezičnih kodova odijeljen zarezima.\nPrijevod poruke na tim jezicima bit će prikazani dok prevodite.\nZadani popis jezika ovisi o vašem jeziku.",
+ "translate-pref-editassistlang-bad": "Nevaljan kôd jezika u popisu:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Uređivanje koristeći sučelje za prevođenje",
+ "action-translate": "uređivanje uz uporabu sučelja za prevođenje",
+ "right-translate-manage": "Upravljanje grupama poruka",
+ "action-translate-manage": "upravljanje skupinama poruka",
+ "right-translate-import": "Uvoz izvanmrežnih prijevoda",
+ "action-translate-import": "uvoz izvanmrežnih prijevoda",
+ "right-translate-messagereview": "Provjera prijevoda",
+ "action-translate-messagereview": "Provjeri prijevode",
+ "right-translate-groupreview": "Mijenjanje stanja radnoga tijeka za skupine poruka",
+ "action-translate-groupreview": "promijenite stanje radnoga tijeka za skupine poruka",
+ "translate-rcfilters-translations": "Prijevodi",
+ "translate-rcfilters-translations-only-label": "Prijevodi",
+ "translate-rcfilters-translations-only-desc": "Promjene stranica s prijevodima.",
+ "translate-rcfilters-translations-filter-label": "Nisu prijevodi",
+ "translate-rcfilters-translations-filter-desc": "Sva uređivanja koja nisu prijevodi.",
+ "translate-rcfilters-translations-site-label": "Poruke vezane uz prevođenje",
+ "translate-rcfilters-translations-site-desc": "Prilagođavanja poruka mrežnoga sjedišta u imenskom prostoru za prevođenje poruka.",
+ "translate-rc-translation-filter": "Filtriraj prijevode:",
+ "translate-rc-translation-filter-no": "Ne filtriraj ništa",
+ "translate-rc-translation-filter-only": "Prikaži samo prijevode",
+ "translate-rc-translation-filter-filter": "Izbaci prijevode",
+ "translate-rc-translation-filter-site": "Samo uređivanja poruka projekta",
+ "translationstats": "Statistika o prevođenju",
+ "translate-stats-edits": "Uređivanja",
+ "translate-stats-users": "Prevoditelji",
+ "translate-stats-registrations": "Prijave",
+ "translate-stats-reviews": "Provjere",
+ "translate-stats-reviewers": "Provjeravatelji",
+ "translate-statsf-intro": "Možete generirati jednostavne statistike s ovim obrascem.\nSve vrijednosti imaju gornju i donju granicu.",
+ "translate-statsf-options": "Opcije grafa",
+ "translate-statsf-width": "Širina u pikselima:",
+ "translate-statsf-height": "Visina u pikselima:",
+ "translate-statsf-days": "Vremensko razdoblje u danima:",
+ "translate-statsf-start": "Početni datum:",
+ "translate-statsf-scale": "Zrnatost:",
+ "translate-statsf-scale-years": "Godine",
+ "translate-statsf-scale-months": "Mjeseci",
+ "translate-statsf-scale-weeks": "Tjedana",
+ "translate-statsf-scale-days": "Dani",
+ "translate-statsf-scale-hours": "Sati",
+ "translate-statsf-count": "Mjera:",
+ "translate-statsf-count-edits": "Broj uređivanja",
+ "translate-statsf-count-users": "Aktivni prevoditelji",
+ "translate-statsf-count-registrations": "Novi suradnici",
+ "translate-statsf-count-reviews": "Provjere prijevoda",
+ "translate-statsf-count-reviewers": "Provjeravatelji",
+ "translate-statsf-language": "Zarezom odvojen popis jezičnih kodova:",
+ "translate-statsf-group": "Zarezom odvojen popis skupine kodova:",
+ "translate-statsf-submit": "Prikaži",
+ "translate-statsf-unknown-error": "Nepoznata pogreška.",
+ "translate-statsf-error-message": "Došlo je do pogreške pri učitavanju grafikona: $1",
+ "translate-tag-page-desc": "Prijevod wikistranice [[$2|$1]] s jezika: $3 ($4).",
+ "translate-sidebar-alltrans": "Na drugim jezicima",
+ "translations": "Svi prijevodi",
+ "translations-summary": "Unesite naziv poruke da biste vidjeli sve prijevode.",
+ "translate-translations-no-message": "\"$1\" nije poruka koja se prevodi",
+ "translate-translations-none": "Ne postoje prijevodi za \"$1\"",
+ "translate-translations-count": "{{PLURAL:$1|Pronađen $1 prijevod|Pronađena $1 prijevoda|Pronađeno $1 prijevoda}}.",
+ "translate-translations-fieldset-title": "Poruka",
+ "translate-translations-messagename": "Ime:",
+ "translate-translations-project": "Projekt:",
+ "translate-translations-including-no-param": "Molim navedite ispravan ključ poruke kao parametar podstranice",
+ "translate-translations-history-short": "h",
+ "languagestats": "Statistika jezika",
+ "languagestats-summary": "Ova stranica prikazuje statistiku prijevoda za sve grupe poruka za jezik.",
+ "messagegroupstats-summary": "Ova stranica prikazuje statistike grupa poruka.",
+ "languagestats-stats-for": "Statistika prijevoda za $1 ($2).",
+ "languagestats-recenttranslations": "nedavni prijevodi",
+ "translate-langstats-incomplete": "Neke su statistike na ovoj stranici nepotpune. Da biste dobili više statistika, molimo ponovno učitajte stranicu.",
+ "translate-langstats-expand": "proširi",
+ "translate-langstats-collapse": "sažmi",
+ "translate-langstats-expandall": "proširi sve",
+ "translate-langstats-collapseall": "sažmi sve",
+ "translate-language-code": "Jezični kôd",
+ "translate-language-code-field-name": "Jezični kôd:",
+ "translate-suppress-complete": "Izostavi potpuno prevedene grupe poruka",
+ "translate-ls-noempty": "Izostavi potpuno neprevedene grupe poruka",
+ "translate-language": "Jezik",
+ "translate-total": "Poruke",
+ "translate-untranslated": "Neprevedeno",
+ "translate-percentage-complete": "Dovršeno",
+ "translate-percentage-fuzzy": "Zastarjelo",
+ "translate-percentage-proofread": "Provjereno",
+ "translate-languagestats-overall": "Sve skupine poruka zajedno",
+ "translate-ls-submit": "Prikaži statistiku",
+ "translate-ls-column-group": "Grupa poruka",
+ "translate-mgs-pagename": "Statistika skupine poruka",
+ "translate-mgs-fieldset": "Mogućnosti prikaza",
+ "translate-mgs-group": "Grupa poruka:",
+ "translate-mgs-nocomplete": "Ne prikazuj jezike koji su u cijelosti prevedeni",
+ "translate-mgs-noempty": "Ne prikazuj jezike koji uopće nemaju prijevode",
+ "translate-mgs-submit": "Prikaži statistiku",
+ "translate-mgs-column-language": "Jezik",
+ "translate-mgs-totals": "{{PLURAL:$1|1=Jedan jezik|2=Oba jezika zajedno|Ukupno $1 jezik zajedno|Svih $1 jezika zajedno}}",
+ "translate-mgs-invalid-group": "Navedena skupina $1 ne postoji.",
+ "translate-mgs-nothing": "Nema se što prikazati za zahtijevane statistike.",
+ "translate-tes-server-error": "Nije uspjelo dohvaćanje prijedloga za pretraživanje",
+ "translate-tes-group-not-found": "Nema podudarnih rezultata",
+ "supportedlanguages": "Aktivni jezici",
+ "supportedlanguages-summary": "Ova stranica prikazuje popis svih aktivnih jezika na ovome wikiju, {{SITENAME}}, zajedno s imenima prevoditelja koji rade na tim jezicima.\nVeličina suradničkih imena prevoditelja, tj. veličina slova, ovisi od toga koliko je tko poruka preveo.\nBoja podcrtavanja ovdje označuje kolika je aktivnost prevoditeljā – prevoditeljicā.",
+ "supportedlanguages-colorlegend": "Legenda za boju: Posljednji prijevod načinjen prije $1 dana.",
+ "supportedlanguages-sqlite-error": "SQLite nije u statusu podržanoga softvera",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Prevoditelj}}|Prevoditelji}}: $1",
+ "supportedlanguages-recenttranslations": "nedavni prijevodi",
+ "supportedlanguages-count": "Ukupno $1 {{PLURAL:$1|jezik|jezika}}.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|uređivanje|uređivanja}} – posljednje uređivanje prije $3 {{PLURAL:$3|dan|dana}}",
+ "translate-supportedlanguages-cached": "Ova informacija nalazila se u međuspremniku prije: $1.",
+ "translate-activelanguages-invalid-code": "Jezični kôd \"$1\" je nepoznat ili nije omogućen za prevođenje.",
+ "abusefilter-edit-builder-vars-translate-source-text": "Izvorni tekst prijevodne jedinice",
+ "abusefilter-edit-builder-vars-translate-target-language": "Željeni jezik za prevođenje",
+ "translate-jssti-add": "Dodaj na popis",
+ "managemessagegroups": "Upravljanje skupinom poruka",
+ "translate-smg-notallowed": "Nije Vam dopušteno izvršiti ovu radnju.",
+ "translate-smg-nochanges": "Nema izmjena koje treba obraditi.",
+ "translate-smg-submit": "Proslijedi izmjene na obradbu",
+ "translate-smg-submitted": "Definicije poruka su ažurirane. Izmjene se obrađuju u pozadini.",
+ "translate-smg-submitted-with-failure": "Ažuriranje {{PLURAL:$1|poruke s definicijom definition|poruka s definicijama}} nije uspjelo za {{PLURAL:$1|sljedeću skupinu|sljedeće skupine|sljedećih skupina}} — $2. $3",
+ "translate-smg-submitted-others-processing": "Poruke s definicijama obrađuju se u pozadini.",
+ "translate-smg-more": "Bit će još izmjena za obradbu nakon što proslijedite ove.",
+ "translate-smg-left": "Sadržaj poruke na wikiju",
+ "translate-smg-right": "Predstojeće izmjene",
+ "translate-smg-rename-select": "Odaberi",
+ "translate-smg-rename-cancel": "Odustani",
+ "translate-smg-rename-search": "Pretraživanje za porukama sličnoga sadržaja...",
+ "translate-smg-rename-select-err": "Molimo Vas, odaberite poruku kojoj želite promijeniti naziv",
+ "translate-smg-rename-no-msg": "Poruke nisu nađene.",
+ "translate-smg-rename-new": "Dodati kao novu...",
+ "translate-smg-rename-rename": "Dodati kao preimenovanje...",
+ "translate-smg-rename-dialog-title": "Odabir sličnih preimenovanja za $1",
+ "translate-smg-strong-sync-help": "Pomoć",
+ "translate-smg-group-with-error-summary": "$1 {{PLURAL:$1|poruka|poruke|poruka}} s greškama:",
+ "translate-smg-group-message-action-history": "Povijest",
+ "translate-smg-group-action-resolve": "Označi riješenim",
+ "translate-smg-group-message-tag-outdated": "Zastarjelo",
+ "translate-smg-group-message-tag-rename": "Preimenuj",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|Oznaka|Oznake|Oznaka}}:",
+ "translate-smg-group-message-message-content": "Sadržaj:",
+ "translate-smg-group-message-message-target": "Cilj:",
+ "translate-smg-group-message-message-replacement": "Zamjena:",
+ "translate-smg-group-message-message-other-langs": "Drugi jezici:",
+ "translate-smg-loading": "Učitavanje...",
+ "translate-smg-unknown-error": "Došlo je do pogreške pri obradi Vašeg zahtjeva.",
+ "translate-manage-import-diff": "Poruka $1 | Radnje: $2",
+ "translate-manage-import-new": "Nova poruka $1",
+ "translate-manage-import-deleted": "Obrisana poruka $1",
+ "translate-manage-action-import": "Uvezi",
+ "translate-manage-action-conflict": "Uvezi i označi kao ''fuzzy''",
+ "translate-manage-action-ignore": "Ignoriraj",
+ "translate-manage-action-fuzzy": "Uvoz i ''fuzzy'' prijevodi",
+ "translate-manage-action-rename": "Preimenuj",
+ "translate-manage-nochanges": "Nema promjena u definicijama poruka u ovoj skupini.",
+ "translate-manage-nochanges-other": "Nema promjena za ovaj jezik.\nUpotrijebite poveznicu (ispod) za povratak na pregled detalja skupine.",
+ "translate-manage-import-summary": "Uvoz nove inačice iz vanjskog izvora",
+ "translate-manage-import-ignore": "Preskačem poruku $1.",
+ "translate-manage-import-rename-summary": "Preimenovano u vanjskom izvoru",
+ "translate-manage-conflict-summary": "Uvoz nove inačice iz vanjskog izvora.\nMolimo provjerite.",
+ "translate-manage-submit": "Izvrši",
+ "translate-manage-intro-other": "Niže je popis promijenjenih prijevoda za $1 jezik.\nProvjerite promjene i izaberite radnju koju želite poduzeti za svaku promjenu.\nAko izaberete zanemariti promjene, ta će radnja biti samo privremena.",
+ "translate-manage-import-ok": "Uvezeno: $1",
+ "translate-manage-import-done": "Uvoz završen!",
+ "translate-manage-empty-content": "Nema sadržaja",
+ "importtranslations": "Uvezi prijevode",
+ "translate-import-from-local": "Snimanje lokalne datoteke:",
+ "translate-import-load": "Učitaj datoteku",
+ "translate-import-err-dl-failed": "Nije moguće dohvatiti datoteku: $1",
+ "translate-import-err-ul-failed": "Postavljanje datoteke nije uspjelo",
+ "translate-import-err-invalid-title": "Navedeno ime datoteke <nowiki>$1</nowiki> nije bilo valjano.",
+ "translate-import-err-no-such-file": "Datoteka <nowiki>$1</nowiki> ne postoji ili još nije postavljena lokalno.",
+ "translate-js-support-unsaved-warning": "Imate neobjavljenih prijevoda.",
+ "translate-gs-pos": "Mj.",
+ "translate-gs-code": "Kôd",
+ "translate-gs-continent": "Kontinent",
+ "translate-gs-speakers": "Govornika",
+ "translate-gs-score": "Rezultat",
+ "translate-gs-multiple": "višestruki",
+ "translate-gs-count": "Broj",
+ "translate-gs-total": "Ukupno",
+ "translate-gs-avgscore": "Prosječno",
+ "translate-documentation-language": "Dokumentacija poruke",
+ "translate-searchprofile": "Prijevodi",
+ "translate-searchprofile-tooltip": "Traži iz svih prijevoda",
+ "translate-searchprofile-note": "Više mogućnosti pretraživanja dostupno je pomoću [$1 pretrage prijevoda].",
+ "translate-search-languagefilter": "Filtriranje po jeziku:",
+ "translate-search-nofilter": "Bez filtriranja",
+ "log-name-translationreview": "Evidencija pregleda prijevoda",
+ "log-description-translationreview": "Evidencija svih provjera prijevoda i skupina poruka.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|pregledao|pregledala}} je prijevod $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|promijenio|promijenila}} je stanje za $4 prijevod stranice $3 iz $6 u $7",
+ "group-translate-sandboxed": "Neodobreni prevoditelji",
+ "group-translate-sandboxed-member": "{{GENDER:$1|neodobreni prevoditelj|neodobrena prevoditeljica}}",
+ "right-translate-sandboxmanage": "Rukovođenje sa suradnicima, koji su ograničeni na pješčanike",
+ "action-translate-sandboxmanage": "rukovodi suradnicima ograničenima na pješčanike",
+ "right-translate-sandboxaction": "Izvršavanje dopuštenih radnji suradnicima ograničenim na pješčanik",
+ "action-translate-sandboxaction": "izvršavati dopuštene radnje suradnicima koji su ograničeni na uporabu pješčanika",
+ "translate-workflow-state-": "(isključeno)",
+ "translate-workflowstatus": "Stanje: $1",
+ "translate-workflow-set-doing": "Postavljam...",
+ "translate-workflow-autocreated-summary": "Automatsko stvaranje stranice za radno stanje $1",
+ "translate-stats-workflow": "Stanje",
+ "translate-workflowgroup-label": "Radna stanja",
+ "translate-dynagroup-recent-label": "Nedavni prijevodi",
+ "translate-dynagroup-recent-desc": "Ova skupina poruka prikazuje sve nedavne prijevode na ovaj jezik.\nNajkorisnije je pri provjeri prijevoda.",
+ "translate-dynagroup-additions-label": "Nedavna dodavanja",
+ "translate-dynagroup-additions-desc": "Ova grupa poruka prikazuje nove i promijenjene poruke.",
+ "translate-msggroupselector-projects": "Grupa poruka",
+ "translate-msggroupselector-search-placeholder": "Pretraga grupa",
+ "translate-msggroupselector-search-all": "Sve",
+ "translate-msggroupselector-search-recent": "Nedavne",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|podskupina|podskupine|podskupina}}",
+ "tux-languageselector": "Prijevod na",
+ "tux-select-target-language": "Željeni jezik za prevođenje",
+ "tux-tab-all": "Sve",
+ "tux-tab-untranslated": "Neprevedeno",
+ "tux-tab-outdated": "Zastarjelo",
+ "tux-tab-translated": "Prevedeno",
+ "tux-tab-unproofread": "Neprovjereno",
+ "tux-edit": "Uredi",
+ "tux-status-optional": "Neobvezno",
+ "tux-status-fuzzy": "Zastarjelo",
+ "tux-status-proofread": "Provjereno",
+ "tux-status-translated": "Prevedeno",
+ "tux-status-saving": "Objavljivanje...",
+ "tux-status-unsaved": "Neobjavljeno",
+ "tux-save-unknown-error": "Dogodila se nepoznata pogreška.",
+ "tux-editor-placeholder-documentation": "Dodaj dokumentaciju poruke",
+ "tux-editor-placeholder-language": "Vaš prijevod na $1",
+ "tux-editor-editsummary-placeholder": "Opišite Vaše izmjene (neobvezno)",
+ "tux-editor-paste-original-button-label": "Zalijepi izvorni tekst",
+ "tux-editor-discard-changes-button-label": "Zanemari izmjene",
+ "tux-editor-save-button-label": "Objavi prijevod",
+ "tux-editor-skip-button-label": "Preskoči na sljedeću poruku",
+ "tux-editor-cancel-button-label": "Otkaži",
+ "tux-editor-confirm-button-label": "Potvrdi prijevod",
+ "tux-editor-proofread-button-label": "Označi provjerenim",
+ "tux-editor-shortcut-info": "Za potvrdu i preskok na sljedeću poruku pritisnite \"$1\", za preskok pritisnite \"$2\", za upis sažetka pritisnite \"$4\" te za ostale prečace \"$3\".",
+ "tux-editor-edit-desc": "Uredi dokumentaciju",
+ "tux-editor-add-desc": "Dodaj dokumentaciju",
+ "tux-editor-suggestions-title": "Prijedlozi",
+ "tux-editor-latest-updates-title": "Zadnja ažuriranja",
+ "tux-editor-changes-without-summary": "$1 {{PLURAL:$1|ažuriranje|ažuriranja}} bez sažetka",
+ "tux-editor-all-changes": "Sve izmjene",
+ "tux-editor-in-other-languages": "Na drugim jezicima",
+ "tux-editor-need-more-help": "Trebate pomoć?",
+ "tux-editor-ask-help": "Zatražite više informacija",
+ "tux-editor-tm-match": "$1% podudarnosti",
+ "tux-notices-more": "{{PLURAL:$1|još $1}}",
+ "tux-notices-hide": "skrij",
+ "tux-editor-save-failed": "Objavljivanje prijevoda nije uspjelo: $1",
+ "tux-editor-n-uses": "upotrijebljeno $1 {{PLURAL:$1|put|puta}}",
+ "tux-editor-message-desc-more": "Prikaži više",
+ "tux-editor-message-desc-less": "Prikaži manje",
+ "tux-editor-clear-translated": "Skrij prevedeno",
+ "tux-editor-proofreading-mode": "Provjera",
+ "tux-editor-translate-mode": "Popis",
+ "tux-editor-proofreading-hide-own-translations": "Skrij moje prijevode",
+ "tux-editor-proofreading-show-own-translations": "Prikaži moje prijevode",
+ "tux-proofread-action-tooltip": "Označi provjerenim",
+ "tux-proofread-edit-label": "Uredi",
+ "tux-editor-page-mode": "Stranica",
+ "tux-editor-outdated-notice": "Ovaj prijevod možda mora biti ažuriran.",
+ "tux-editor-outdated-notice-diff-link": "Prikaži razlike",
+ "tux-editor-doc-editor-placeholder": "Dokumentacija poruke",
+ "tux-editor-doc-editor-save": "Objavi dokumentaciju",
+ "tux-editor-doc-editor-cancel": "Otkaži",
+ "tux-messagetable-more-messages": "Još $1 {{PLURAL:$1|poruka|poruke|poruka}}",
+ "tux-messagetable-loading-messages": "Učitavanje {{PLURAL:$1|poruke|poruka}}...",
+ "tux-message-filter-placeholder": "Filtriranje",
+ "tux-message-filter-result": "Ukupno $1 {{PLURAL:$1|rezultat|rezultata}} za \"$2\"",
+ "tux-message-filter-advanced-button": "Napredno pretraživanje",
+ "tux-message-filter-optional-messages-label": "Dodatne poruke",
+ "tux-proofread-translated-by-self": "Vi ste autor ovog prijevoda",
+ "tux-empty-list-all": "Ova je skupina poruka prazna",
+ "tux-empty-list-all-guide": "Izaberite drugu skupinu poruka za prevođenje",
+ "tux-translate-page-no-such-group": "<strong>Naznačena skupina ne postoji.</strong> Molimo Vas, izaberite drugu skupinu poruka.",
+ "tux-empty-list-translated": "Nema prevedenih poruka",
+ "tux-empty-list-translated-guide": "Pomozite i Vi prevodeći poruke.",
+ "tux-empty-list-translated-action": "Nastavi prevoditi",
+ "tux-empty-no-messages-to-display": "Nema poruka za prikaz.",
+ "tux-empty-there-are-optional": "Postoje neobvezne poruke koje nisu prikazane na popisu",
+ "tux-empty-show-optional-messages": "Prikaži neobvezne poruke",
+ "tux-empty-no-outdated-messages": "Nema zastarjelih poruka",
+ "tux-empty-nothing-to-proofread": "Nema ničega za provjeru",
+ "tux-empty-you-can-help-providing": "Pomozite i Vi prevodeći nove poruke",
+ "tux-empty-nothing-new-to-proofread": "Za provjeru nema novih poruka",
+ "tux-empty-you-can-review-already-proofread": "Provjeri već provjerene prijevode.",
+ "tux-empty-list-other": "Ničega za prevođenje",
+ "tux-empty-list-other-guide": "Možete pomoći provjeravanjem postojećih prijevoda",
+ "tux-empty-list-other-action": "Provjeri prijevode",
+ "tux-empty-list-other-link": "Prikaz svih poruka",
+ "tux-editor-close-tooltip": "Zatvori",
+ "tux-editor-expand-tooltip": "Proširi",
+ "tux-editor-collapse-tooltip": "Sklopi",
+ "tux-editor-message-tools-show-editor": "Prikaži u wikiuređivaču",
+ "tux-editor-message-tools-history": "Povijest izmjena",
+ "tux-editor-message-tools-delete": "Izbriši",
+ "tux-editor-message-tools-translations": "Svi prijevodi",
+ "tux-editor-message-tools-linktothis": "Poveznica na ovu poruku",
+ "tux-editor-loading": "Učitavam...",
+ "tux-editor-loading-failed": "Nije uspjelo učitavanje pomoćnih prijevoda: $1",
+ "translate-search-more-languages-info": "{{PLURAL:$1|Još jedan jezik|Još $1 druga jezika|Još $1 drugih jezika}}",
+ "translate-statsbar-tooltip": "$1 % prevedeno, $2 % pregledano",
+ "translate-statsbar-tooltip-with-fuzzy": "‎$1 % prevedeno, $2 % provjereno, $3 % zastarjelo",
+ "translate-search-more-groups-info": "još $1 {{PLURAL:$1|skupina|skupine|skupina}}",
+ "translate-syntax-error": "Prijevod sadrži sintaksne greške",
+ "tux-session-expired": "Više niste prijavljeni. Molimo Vas, prijavite se u zasebnoj kartici. Druga mogućnost je da načinite kopije nesačuvanih prijevoda, prijavite se, a potle vratite na ovu stranicu i ponovo unesete svoje prijevode.",
+ "tux-nojs": "Ovaj alat ne radi bez JavaScripta. Javascript je onemogućen, ne radi ili je preglednik nepodržan.",
+ "specialpages-group-translation": "Prevođenje",
+ "translate-messagebundle-error-invalid-sourcelanguage": "Izvorni jezični kôd \"$1\" nije podržan."
+}
diff --git a/Translate/i18n/core/hrx.json b/Translate/i18n/core/hrx.json
new file mode 100644
index 00000000..92ff4ec8
--- /dev/null
+++ b/Translate/i18n/core/hrx.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Iohanen"
+ ]
+ },
+ "translate-documentation-language": "Nochrichtedokumentation"
+}
diff --git a/Translate/i18n/core/hsb.json b/Translate/i18n/core/hsb.json
new file mode 100644
index 00000000..3477626a
--- /dev/null
+++ b/Translate/i18n/core/hsb.json
@@ -0,0 +1,319 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dundak",
+ "J budissin",
+ "Michawiki",
+ "Shirayuki"
+ ]
+ },
+ "translate": "Přełožić",
+ "translate-desc": "[[Special:Translate|Specialna strona]] za přełožowanje MediaWiki a druheho",
+ "translate-taskui-export-to-file": "Do systemoweho formata eksportować",
+ "translate-taskui-export-as-po": "Za přełožowanje offline eksportować",
+ "translate-taction-translate": "Přełožić",
+ "translate-taction-proofread": "Přepruwować",
+ "translate-taction-lstats": "Rěčna statistika",
+ "translate-taction-mstats": "Statistika zdźělenskeje skupiny",
+ "translate-taction-export": "Eksportować",
+ "translate-taction-disabled": "Tuta akcija je so na tutym wikiju znjemóžniła.",
+ "translate-page-no-such-language": "Njepłaćiwy rěčny kod podaty",
+ "translate-page-no-such-group": "Podata skupina bě njepłaćiwa.",
+ "translate-page-disabled": "Přełožki do tuteje rěče w tutej skupinje buchu znjemóžnjene. Přičina:\n\n<em>$1</em>",
+ "translate-language-disabled": "Přełožowanje do tuteje rěče je znjemóžnjene.",
+ "translate-page-settings-legend": "Nastajenja",
+ "translate-page-group": "Skupina",
+ "translate-page-language": "Rěč",
+ "translate-page-limit": "Ličba zdźělenkow",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|zdźělenka|zdźělence|zdźělenki|zdźělenkow}} na stronu",
+ "translate-submit": "Pokazać",
+ "translate-page-navigation-legend": "Nawigacija",
+ "translate-page-showing": "Zdźělenki wot $1 do $2 z $3 pokazać.",
+ "translate-page-showing-all": "{{PLURAL:$1|Pokazuje so|Pokazujetej so|Pokazuja so|Pokazuje so}} $1 {{PLURAL:$1|zdźělenka|zdźělence|zdźělenki|zdźělenkow}}.",
+ "translate-page-showing-none": "Njejsu zdźělenki, kotrež hodźa so pokazać.",
+ "translate-next": "Přichodna strona",
+ "translate-prev": "Předchadna strona",
+ "translate-page-description-legend": "Informacije wo skupinje",
+ "translate-page-description-hasoptional": "Tuta zdźělenska skupina wobsahuje opcionalne zdźělenki.\nOpcionalne zdźělenki měli so jenož přełožować, jeli twoja rěč ma wosebitu potrjebu za nje,\nkaž na přikład njewužiwanje mjezerow abo transliteraciju swójskich mjenow. $1",
+ "translate-page-description-hasoptional-open": "Opcionalne zdźělenki pokazać.",
+ "translate-page-edit": "wobdźěłać",
+ "translate-optional": "(opcionalny)",
+ "translate-ignored": "(ignorowany)",
+ "translate-edit-title": "\"$1\" wobdźěłać",
+ "translate-edit-definition": "Definicija zdźělenki",
+ "translate-edit-contribute": "přinošować",
+ "translate-edit-no-information": "<em>Tuta zdźělenka dokumentaciju nima, Jeli wěš, hdźež abo kak so tuta zdźělenka wužiwa, móžeš druhim přełožowarjam pomhać přidawajo dokumentaciju k tutej zdźělence.</em>'",
+ "translate-edit-information": "Informacije wo zdźělence ($1)",
+ "translate-edit-warnings": "Warnowanja wo njedospołnych přełožkach",
+ "translate-edit-tmmatch-source": "Žórłowy tekst přełožka: $1",
+ "translate-edit-tmmatch": "$1 % wotpowědowanja",
+ "translate-edit-nopermission": "Trjebaš přełožowanske prawa, zo by móhł zdźělenki přełožować.",
+ "translate-edit-askpermission": "Prawo dóstać",
+ "translate-checks-parameters": "{{PLURAL:$2|Slědowacy parameter|Slědowacej parametraj|Slědowace parametry|Slědowacych parametrow}} so {{PLURAL:$2|njewužiwa|njewužiwatej|njewužiwaja|njewužiwa}}: <strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Slědowacy parameter je njeznaty|Slědowacej parametraj stej njeznatej|Slědowace parametry su njeznate|Slědowacych parametrow je njeznate}}: <strong>$1</strong>",
+ "translate-checks-balance": "Je njeruna ličba {{PLURAL:$2|spinka|spinkow|spinkow|spinkow}}: <strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Slědowacy wotkaz je problematiski|Slědowacej wotkazaj stej problematiskej|Slědowace wotkazy wotkazy su problematiske|Slědowacych wotkazow je problematiske}}: <strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Slědowacy wotkaz pobrachuje|Slědowacej $2 wotkazaj pobrachujetej|Slědowace $2 wotkazy pobrachuja|Slědowacych $2 wotkazow pobrachuje}}: <strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Definicija wužiwa <nowiki>{{PLURAL:}}</nowiki>, přełožk pak nic.",
+ "translate-checks-plural-forms": "Za <nowiki>{{PLURAL:}}</nowiki> {{PLURAL:$1|je so jedna forma podała|stej so $1 formje podałoj|su so $1 formy podali|je so $1 formow podało}}, ale {{PLURAL:$2|podpěruje so jenož jedna forma|podpěrujetej so $2 formje|podpěruja so $2 formy|podpěruje so $2 formow}} (bjez formow 0= a 1=).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> ma dwě jeničkej formje na kóncu. <nowiki>{{PLURAL:$1|mloko|mloko}}</nowiki> měł so jako <nowiki>{{PLURAL:$1|mloko}}</nowiki> pisać.",
+ "translate-checks-pagename": "Mjenowy rum z definicije změnjeny",
+ "translate-checks-format": "Tutón přełožk njeslěduje definiciji abo ma njepłaćiwu syntaksu: $1",
+ "translate-checks-escape": "Slědowace eskapowe sekwency móža připadne być: <strong>$1</strong>",
+ "translate-checks-parametersnotequal": "Ličba parametrow je {{PLURAL:$1|$1}}; to měł {{PLURAL:$2|$2}} być.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> ma njepłaćiwu formu.",
+ "translate-checks-fudforum-syntax": "<nowiki>$1</nowiki> město <nowiki>$2</nowiki> w tutym projekće wužiwać.",
+ "translate-pref-editassistlang": "Pomocne rěče:",
+ "prefs-translate": "Přełožowanske opcije",
+ "translate-pref-editassistlang-help": "Lisćina rěčnych kodow z komu jako dźělatko.\nPřełožk powěsće w tutych rěčach pokazuja so, hdyž přełožuješ.\nStandardna lisćina rěčow wotwisuje wot twojeje rěče.",
+ "translate-pref-editassistlang-bad": "Njepłaćiwy rěčny kod w lisćinje:\n<nowiki>$1</nowiki>",
+ "right-translate": "Z pomocu powjercha přełožowanja wobdźěłać",
+ "right-translate-manage": "Zdźělenske skupiny zrjadować",
+ "action-translate-manage": "zdźělenske skupiny zrjadować",
+ "right-translate-import": "Offline přewjedźene přełožki importować",
+ "action-translate-import": "offline přewjedźene přełožki importować",
+ "right-translate-messagereview": "Přełožki přepruwować",
+ "right-translate-groupreview": "Dźěłowy status zdźělenskich skupinow změnić",
+ "translate-rcfilters-translations": "Přełožki",
+ "translate-rcfilters-translations-only-label": "Přełožki",
+ "translate-rc-translation-filter": "Přełožki filtrować:",
+ "translate-rc-translation-filter-no": "Ničo nječinić",
+ "translate-rc-translation-filter-only": "Jenož přełožki pokazać",
+ "translate-rc-translation-filter-filter": "Přełožki wufiltrować",
+ "translate-rc-translation-filter-site": "Jenož změny sydłowych zdźělenkow",
+ "translationstats": "Statistiki přełožkow",
+ "translate-stats-edits": "Změny",
+ "translate-stats-users": "Přełožowarjo",
+ "translate-stats-registrations": "Registrowanja",
+ "translate-stats-reviews": "Přepruwowanja",
+ "translate-stats-reviewers": "Přepruwowarjo",
+ "translate-statsf-intro": "Móžeš z tutym formularom jednoru statistiku wutworić. Wšě hódnoty maja horni a delni limit.",
+ "translate-statsf-options": "Grafiske opcije",
+ "translate-statsf-width": "Šěrokosć w pikselach:",
+ "translate-statsf-height": "Wysokosć w pikselach:",
+ "translate-statsf-days": "Doba w dnjach:",
+ "translate-statsf-start": "Spočatny datum:",
+ "translate-statsf-scale": "Granularita:",
+ "translate-statsf-scale-months": "Měsacy",
+ "translate-statsf-scale-weeks": "Njedźele",
+ "translate-statsf-scale-days": "Dny",
+ "translate-statsf-scale-hours": "Hodźiny",
+ "translate-statsf-count": "Měra:",
+ "translate-statsf-count-edits": "Ličba změnow",
+ "translate-statsf-count-users": "Aktiwni přełožowarjo",
+ "translate-statsf-count-registrations": "Nowi wužiwarjo",
+ "translate-statsf-count-reviews": "Přepruwowanja přełožkow",
+ "translate-statsf-count-reviewers": "Přepruwowarjo",
+ "translate-statsf-language": "Lisćina přez komu wotdźělenych rěčnych kodow:",
+ "translate-statsf-group": "Lisćina přez komu wotdźělenych skupinowych kodow:",
+ "translate-statsf-submit": "Přehlad",
+ "translate-tag-page-desc": "Přełožk wikijoweje strony [[$2|$1]].",
+ "translate-sidebar-alltrans": "W druhich rěčach",
+ "translations": "Wšě přełožki",
+ "translations-summary": "Zapodaj deleka zdźělenske mjeno, zo by wšě k dispoziciji stejce přełožki pokazał.",
+ "translate-translations-no-message": "\"$1\" přełožujomna zdźělenka njeje",
+ "translate-translations-none": "Přełožki za \"$1\" njejsu",
+ "translate-translations-count": "{{PLURAL:$1|jedyn přełožk namakany|$1 přełožkaj namkanej|$1 přełožki namakane|$1 přełožkow namakanych}}",
+ "translate-translations-fieldset-title": "Zdźělenka",
+ "translate-translations-messagename": "Mjeno:",
+ "translate-translations-project": "Projekt:",
+ "translate-translations-including-no-param": "Prošu podaj płaćiwy zdźělenski kluč w parametrje podstrona",
+ "translate-translations-history-short": "s",
+ "languagestats": "Rěčna statistika",
+ "languagestats-summary": "Strona pokazuje přełožowansku statistiku za wšě zdźělenske skupiny za rěč.",
+ "messagegroupstats-summary": "Tuta strona pokazuje statistiku wo skupinach powěsćow.",
+ "languagestats-stats-for": "Přełožowanska statistika za $1 ($2).",
+ "languagestats-recenttranslations": "nowše přełožki",
+ "translate-langstats-incomplete": "Někotre statistiki na tutej stronje su njedospołne. Prošu začitaj ju znowa, zo by dalše statistiki dóstał.",
+ "translate-langstats-expand": "pokazać",
+ "translate-langstats-collapse": "schować",
+ "translate-langstats-expandall": "wšě pokazać",
+ "translate-langstats-collapseall": "wšě schować",
+ "translate-language-code": "Rěčny kod",
+ "translate-language-code-field-name": "Rěčny kod:",
+ "translate-suppress-complete": "Dospołnje přełožene zdźělenske skupiny potłóčić",
+ "translate-ls-noempty": "Dospołnje njepřełožene zdźělenske skupiny potłóčić",
+ "translate-language": "Rěč:",
+ "translate-total": "Zdźělenki",
+ "translate-untranslated": "Njepřełoženy",
+ "translate-percentage-complete": "Dospołny",
+ "translate-percentage-fuzzy": "Zestarjeny",
+ "translate-languagestats-overall": "Wšě zdźělenske skupiny dohromady",
+ "translate-ls-submit": "Statistiki pokazać",
+ "translate-ls-column-group": "Zdźělenska skupina",
+ "translate-mgs-pagename": "Statistika zdźělenskeje skupiny",
+ "translate-mgs-fieldset": "Nastajenja pokazać",
+ "translate-mgs-group": "Zdźělenska skupina:",
+ "translate-mgs-nocomplete": "Rěče z dokónčenymi přełožkami njezwobraznić",
+ "translate-mgs-noempty": "Rěče, kotrež přełožki nimaja, njepokazać",
+ "translate-mgs-submit": "Statistiki pokazać",
+ "translate-mgs-column-language": "Rěč",
+ "translate-mgs-totals": "Wšě rěče dohromady",
+ "translate-mgs-invalid-group": "Podata skupina $1 njeeksistuje.",
+ "translate-mgs-nothing": "Za požadanu statistiku daty njejsu.",
+ "supportedlanguages": "Aktiwne rěče",
+ "supportedlanguages-summary": "Tuta strona pokazuje lisćinu wšěch rěčow, kotrež so přez {{GRAMMAR:akuzatiw|{{SITENAME}}}} podpěruja, hromadźe z mjenami přełožowarjow, kotřiž do teje rěče přełožuja.\nMjeno přełožowarja jewi so čim wjetšo ćim wjace změnow přełožowar je dodał.\nBarba podšmórnjenja přełožowarskeho mjena pokazuje, kak aktiwny přełožowar je njedawno był.",
+ "supportedlanguages-colorlegend": "Legenda za barbu: Posledni přełožk před $1 dnjemi.",
+ "supportedlanguages-translators": "{{PLURAL:$2|Přełožowar|Přełožowarjej|Přełožowarjo|Přełožowarjo}}: $1",
+ "supportedlanguages-recenttranslations": "najnowše přełožki",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|rěč|rěči|rěče|rěčow}} w cyłku.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|změna|změnje|změny|změnow}} - poslednja změna před $3 {{PLURAL:$3|dnjom|dnjomaj|dnjemi|dnjemi}}",
+ "translate-jssti-add": "Lisćinje přidać",
+ "managemessagegroups": "Zrjadowanje zdźělenskich skupinow",
+ "translate-smg-notallowed": "Njesměš tutu akciju wuwjesć.",
+ "translate-smg-nochanges": "Njejsu žane změny za předźěłanje.",
+ "translate-smg-submit": "Změny na předźěłowanje pósłać",
+ "translate-smg-submitted": "Definicije zdźělenkow su so zaktualizowali. Změny so w pozadku předźěłuja.",
+ "translate-smg-more": "Po składowanju tutych změnow dyrbja so dalše změny předźěłać.",
+ "translate-smg-left": "Powěsćowy wobsah we wikiju",
+ "translate-smg-right": "Dochadźace změny",
+ "translate-manage-import-diff": "Zdźělenka $1 | akcije: $2",
+ "translate-manage-import-new": "Nowa zdźělenka $1",
+ "translate-manage-import-deleted": "Wušmórnjena zdźělenka $1",
+ "translate-manage-action-import": "Importować",
+ "translate-manage-action-conflict": "Importować a fuzzy",
+ "translate-manage-action-ignore": "Ignorować",
+ "translate-manage-action-fuzzy": "Přełožki importować a jako fuzzy markěrować",
+ "translate-manage-nochanges": "Njejsu žane změny w definicijach zdźělenkow za tutu skupinu.",
+ "translate-manage-nochanges-other": "Njeběchu žane změny za tutu rěč.\nWužij slědowacy wotkaz, zo by so k přehlad skupisnkich podrobnosćow wróćił.",
+ "translate-manage-inconsistent": "W naprašowanju buchu inkonsistency zwěsćene.\nProšu pruwuj za změnami a spytaj hišće raz.\nPodrobnosće: $1",
+ "translate-manage-toolong": "Maksimalny předźěłowanski čas $1 {{PLURAL:$1|sekundy|sekundow|sekundow|sekundow}} je překročeny.\nProšu wotpósćel formular hišće raz, zo by z předźěłowanjom pokročował.",
+ "translate-manage-import-summary": "Nowa wersija so eksterneho žórła importuje",
+ "translate-manage-import-ignore": "Zdźělenka $1 so přeskakuje.",
+ "translate-manage-conflict-summary": "Nowa wersija so z eksterneho žórła importuje.\nProšu přepruwować.",
+ "translate-manage-submit": "Wuwjesć",
+ "translate-manage-intro-other": "Slěduje lisćina přełožowanskich změnow w rěči $1.\nProšu přepruwuj změny a wubjer akciju, kotruž chceš za kóždy přełožk wuwjesć.\nJeli změny ignoruješ, je tuta akcija jenož nachwilna.",
+ "translate-manage-import-ok": "Importowany: $1",
+ "translate-manage-import-done": "Import dokónčeny!",
+ "importtranslations": "Přełožki importować",
+ "translate-import-from-local": "Lokalne nahraće dataje:",
+ "translate-import-load": "Dataju začitać",
+ "translate-import-err-dl-failed": "Dataja njeda so wotwołać:\n$1",
+ "translate-import-err-ul-failed": "Nahraće dataje wuspěšne njebě",
+ "translate-import-err-invalid-title": "Podate datajowe mjeno <nowiki>$1</nowiki> bě njepłaćiwe.",
+ "translate-import-err-no-such-file": "Dataja <nowiki>$1</nowiki> njeeksistuje abo njeje so lokalnje nahrała.",
+ "translate-import-err-stale-group": "Skupina powěsćow, ke kotrejž tuta dataja słuša, njeeksistuje.",
+ "translate-import-err-no-headers": "Dataja derje sformowana dataja Gettext we formaće rozšěrjenje \"Translate\" njeje:\nNjeje móžno skupinu a rěč z hłowy dataje zwěsćić.",
+ "translate-js-support-unsaved-warning": "Maš njeskładowane přełožki.",
+ "translate-gs-pos": "Poz.",
+ "translate-gs-code": "Kod",
+ "translate-gs-continent": "Kontinent",
+ "translate-gs-speakers": "Rěčnicy",
+ "translate-gs-score": "Pohódnoćenje",
+ "translate-gs-multiple": "Wjacore",
+ "translate-gs-count": "Ličba",
+ "translate-gs-total": "Dohromady",
+ "translate-gs-avgscore": "Přerězne pohódnoćenje",
+ "translate-documentation-language": "Pokazki za přełožowanje",
+ "translate-searchprofile": "Přełožki",
+ "translate-searchprofile-tooltip": "We wšěch přełožkach pytać",
+ "translate-search-languagefilter": "Po rěči filtrować:",
+ "translate-search-nofilter": "Žane filtrowanje",
+ "log-name-translationreview": "Protokol přepruwowanjow přełožkow",
+ "log-description-translationreview": "Protokol wšěch přepruwowanjow k přełožkam a zdźělenskim skupinam.",
+ "logentry-translationreview-message": "$1 je přełožk $3 {{GENDER:$2|přepruwował|přepruwowała}}",
+ "logentry-translationreview-group": "$1 je status přełožkow w rěči $4 strony $3 wot $6 do $7 {{GENDER:$2|změnił|změniła}}",
+ "group-translate-sandboxed": "Njewobkrućeni přełožowarjo",
+ "group-translate-sandboxed-member": "{{GENDER:$1|njewobkrućeny přełožowar|njewobkrućena přełožowarka}}",
+ "right-translate-sandboxmanage": "Wužiwarjow hrajkanišća zrjadować",
+ "action-translate-sandboxmanage": "wužiwarjow hrajkanišća zrjadować",
+ "right-translate-sandboxaction": "Akcije wuwjesć, kotrež su na \"běłej lisćinje\" wužiwarjow hrajkanišća",
+ "action-translate-sandboxaction": "Akcije wuwjesć, kotrež su na \"běłej lisćinje\" wužiwarjow hrajkanišća",
+ "translate-workflow-state-": "(njenastajeny)",
+ "translate-workflowstatus": "Status: $1",
+ "translate-workflow-set-doing": "Nastaja so...",
+ "translate-workflow-autocreated-summary": "Awtomatiske wutworjenje strony za dźěłowotběžny status $1",
+ "translate-stats-workflow": "Status",
+ "translate-workflowgroup-label": "Dźěłowotběžne statusy",
+ "translate-workflowgroup-desc": "Tuta zdźělenska skupina pokazuje přełožowanske dźěłowotběžne statusy.\nStatusy definuja so w konfiguraciskej wariabli $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Najnowše přełožki",
+ "translate-dynagroup-recent-desc": "Tuta zdźělenska skupina pokazuje wšě aktualne přełožki do tuteje rěče.\nJe najwužitniša za přepruwowanske nadawki.",
+ "translate-dynagroup-additions-label": "Aktualne přidawki",
+ "translate-dynagroup-additions-desc": "Tuta zdźělenska skupina pokazuje nowe a změnjene zdźělenki.",
+ "translate-msggroupselector-projects": "Zdźělenska skupina",
+ "translate-msggroupselector-search-placeholder": "Skupiny přepytać",
+ "translate-msggroupselector-search-all": "Wšě",
+ "translate-msggroupselector-search-recent": "Najnowše",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|podskupina|podskupinje|podskupiny|podskupinow}}",
+ "tux-languageselector": "Přełožić do",
+ "tux-tab-all": "Wšě",
+ "tux-tab-untranslated": "Njepřełoženy",
+ "tux-tab-outdated": "Zestarjeny",
+ "tux-tab-translated": "Přełoženy",
+ "tux-tab-unproofread": "Njepřepruwowane",
+ "tux-edit": "Wobdźěłać",
+ "tux-status-optional": "Opcionalny",
+ "tux-status-fuzzy": "Zestarjeny",
+ "tux-status-proofread": "Přepruwowany",
+ "tux-status-translated": "Přełoženy",
+ "tux-status-saving": "Wozjewja so…",
+ "tux-status-unsaved": "Njewozjewjeny",
+ "tux-editor-paste-original-button-label": "Žórłowy tekst zasadźić",
+ "tux-editor-discard-changes-button-label": "Změny zaćisnyć",
+ "tux-editor-save-button-label": "Přełožk wozjewić",
+ "tux-editor-skip-button-label": "K přichodnemu",
+ "tux-editor-cancel-button-label": "Přetorhnyć",
+ "tux-editor-confirm-button-label": "Přełožk wobkrućić",
+ "tux-editor-shortcut-info": "Tłóč \"$1\", zo by składował abo \"$2\", zo by k přichodnej zdźělence dóšoł abo \"$3\" za druhe skrótšenki.",
+ "tux-editor-edit-desc": "Dokumentaciju wobdźěłać",
+ "tux-editor-add-desc": "Dokumentaciju přidać",
+ "tux-editor-suggestions-title": "Namjety",
+ "tux-editor-in-other-languages": "W druhich rěčach",
+ "tux-editor-need-more-help": "Trjebaš wjace pomocy?",
+ "tux-editor-ask-help": "Wo dalše informacije prosyć",
+ "tux-editor-tm-match": "$1 % wotpowědowanja",
+ "tux-notices-more": "{{PLURAL:$1|$1 dalše|$1dalšej|$1dalše|$1 dalšich}}",
+ "tux-notices-hide": "schować",
+ "tux-editor-save-failed": "Přełožk njeda so składować: $1",
+ "tux-editor-n-uses": "{{PLURAL:$1|$1 raz|dwójce|$1 razy|$1 razow}} wužity",
+ "tux-editor-message-desc-more": "Wjace sej wobhladać",
+ "tux-editor-message-desc-less": "Mjenje sej wobhladać",
+ "tux-editor-clear-translated": "Přełožki schować",
+ "tux-editor-proofreading-mode": "Přepruwować",
+ "tux-editor-translate-mode": "Lisćina",
+ "tux-editor-proofreading-hide-own-translations": "Twoje přełožki schować",
+ "tux-editor-proofreading-show-own-translations": "Twoje přełožki pokazać",
+ "tux-proofread-action-tooltip": "Jako přepruwowany markěrować",
+ "tux-proofread-edit-label": "Wobdźěłać",
+ "tux-editor-page-mode": "Strona",
+ "tux-editor-outdated-notice": "Tutón přełožk dyrbi so snano aktualizować.",
+ "tux-editor-outdated-notice-diff-link": "Rozdźěle pokazać",
+ "tux-editor-doc-editor-placeholder": "Dokumentacija zdźělenki",
+ "tux-editor-doc-editor-save": "Dokumentaciju wozjewić",
+ "tux-editor-doc-editor-cancel": "Přetorhnyć",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|dalša zdźělenka|dalšej zdźělence|dalše zdźělenki|dalšich zdźělenkow}}",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|Začituje so|Začitujetej so|Začituja so|Začituje so}} $1 {{PLURAL:$1|zdźělenka|zdźělence|zdźělenki|zdźělenkow}}.",
+ "tux-message-filter-placeholder": "Lisćinu filtrować",
+ "tux-message-filter-result": "$1 {{PLURAL:$1|wuslědk|wuslědkaj|wuslědki|wuslědkow}} za \"$2\" {{PLURAL:$1|namakany|namakanej|namakane|namakanych}}",
+ "tux-message-filter-advanced-button": "Rozšěrjene pytanje",
+ "tux-message-filter-optional-messages-label": "Opcionalne zdźělenki",
+ "tux-proofread-translated-by-self": "Wot tebje přełoženy",
+ "tux-empty-list-all": "Tuta zdźělenska skupina je prózdna",
+ "tux-empty-list-all-guide": "Wubjer druhu zdźělenku za přełožowanje",
+ "tux-translate-page-no-such-group": "<strong>Podata skupina njeeksistuje.</strong> Wubjer druhu zdźělensku skupinu.",
+ "tux-empty-list-translated": "Žane přełožene zdźělenki",
+ "tux-empty-list-translated-guide": "Móžeš pomhać přełožować",
+ "tux-empty-list-translated-action": "Přełožić",
+ "tux-empty-no-messages-to-display": "Žane powěsće za zwobraznjenje",
+ "tux-empty-there-are-optional": "Su opcionalne zdźělenki, kotrež so w lisćinje njepokazuja",
+ "tux-empty-show-optional-messages": "Opcionalne zdźělenki pokazać",
+ "tux-empty-no-outdated-messages": "Žane zestarjene powěsće",
+ "tux-empty-nothing-to-proofread": "Za přepruwowanje powěsće njejsu",
+ "tux-empty-you-can-help-providing": "Móžeš pomhać, nowe přełožki přinošować",
+ "tux-empty-nothing-new-to-proofread": "Njeje ničo nowe za přepruwowanje",
+ "tux-empty-you-can-review-already-proofread": "Móžeč přełožki přepruwować, kotrež su hižo druzy přepruwowali.",
+ "tux-empty-list-other": "Njeje ničo za přełožowanje",
+ "tux-empty-list-other-guide": "Móžeš pomhać, eksistowace přełožki přepruwować",
+ "tux-empty-list-other-action": "Přełožki přepruwować",
+ "tux-empty-list-other-link": "Wšě zdźělenki pokazać",
+ "tux-editor-close-tooltip": "Začinić",
+ "tux-editor-expand-tooltip": "Pokazać",
+ "tux-editor-collapse-tooltip": "Schować",
+ "tux-editor-message-tools-history": "Historija",
+ "tux-editor-message-tools-translations": "Wšě přełožki",
+ "tux-editor-loading": "Začituje so ...",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|dalša rěč|dalšej rěči|dalše rěče|dalšich rěčow}}",
+ "translate-statsbar-tooltip": "$1 % přełoženy, $2 % přepruwowany",
+ "translate-statsbar-tooltip-with-fuzzy": "$1 % přełoženy, $2 % přepruwowany, $3 % zestarjeny",
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|dalša skupina|dalšej skupinje|dalše skupiny|dalšich skupinow}}"
+}
diff --git a/Translate/i18n/core/hsn.json b/Translate/i18n/core/hsn.json
new file mode 100644
index 00000000..ec603c38
--- /dev/null
+++ b/Translate/i18n/core/hsn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "ChoiChong"
+ ]
+ },
+ "translate-documentation-language": "消息文档"
+}
diff --git a/Translate/i18n/core/ht.json b/Translate/i18n/core/ht.json
new file mode 100644
index 00000000..b338c204
--- /dev/null
+++ b/Translate/i18n/core/ht.json
@@ -0,0 +1,318 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "Boukman",
+ "Jvm",
+ "Kaganer",
+ "Masterches",
+ "Sociologist"
+ ]
+ },
+ "translate": "Tradui",
+ "translate-desc": "[[Special:Translate|Paj espesyal]] pou tradui MediaWiki e plis ankò.",
+ "translate-export-csv-message-title": "Tit mesaj tradiksyon",
+ "translate-export-csv-definition": "Definisyon mesaj",
+ "translate-taction-translate": "Tradui",
+ "translate-taction-proofread": "Revize",
+ "translate-taction-lstats": "Estatistik lang",
+ "translate-taction-mstats": "Estatistik gwoup mesaj",
+ "translate-page-no-such-language": "Lang ki endike a pa bon.",
+ "translate-page-no-such-group": "Gwoup ki endike a pa bon",
+ "translate-page-disabled": "Tradiksyon nan lang sa a te dezaktive pou gwoup sa.\nRezon :\n\n<em>$1</em>",
+ "translate-page-settings-legend": "Konfigirasyon",
+ "translate-page-group": "Gwoup",
+ "translate-page-language": "Lang",
+ "translate-page-limit": "Limit",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|mesaj|mesaj}} nan chak paj",
+ "translate-submit": "Ale chèche",
+ "translate-page-navigation-legend": "Navigasyon",
+ "translate-page-showing": "Montre mesaj $1 jiska $2 nan tout $3 yo.",
+ "translate-page-showing-all": "Montre $1 {{PLURAL:$1|mesaj|mesaj}}.",
+ "translate-page-showing-none": "Pa genyen pyès mesaj pou montre.",
+ "translate-next": "Paj swivan",
+ "translate-prev": "Paj presedan",
+ "translate-page-description-legend": "Enfòmasyon sou gwoup la",
+ "translate-page-description-hasoptional-open": "Montre mesaj ki pa obligatwa yo",
+ "translate-page-edit": "modifye",
+ "translate-optional": "(pa obligatwa)",
+ "translate-ignored": "(inyore)",
+ "translate-edit-title": "Modifye \"$1\"",
+ "translate-edit-definition": "Definisyon pou mesaj sa",
+ "translate-edit-contribute": "kontribiye",
+ "translate-edit-no-information": "<em>Mesaj sa pa dokimante.\nSi w konnen ki kote mesaj sa itilize, ou kapab ede lòt tradiktè lè ou ajoute dokimantasyon pou mesaj sa.</em>",
+ "translate-edit-information": "Enfòmasyon sou mesaj ($1)",
+ "translate-edit-warnings": "Avètisman sou tradiksyon ki pa konplete yo",
+ "translate-edit-tmmatch": "$1 % korespondans",
+ "translate-edit-nopermission": "Ou bezwen dwa tradiksyon pou tradui mesaj yo.",
+ "translate-edit-askpermission": "Resevwa pèmisyon",
+ "translate-export-form-format": "Fòma",
+ "translate-export-invalid-format": "Tanpri presize yon fòma ki valab.",
+ "translate-checks-parameters": "Paramèt {{PLURAL:$2|swivan|swivan yo}} pa itilize:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "Nou pa konnen paramèt {{PLURAL:$2|swivan|swivan yo}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "Genyen yon kantite {{PLURAL:$2|parantèz|parantèz}} ki enpè:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Lyen swivan an|$2 lyen swivan yo}} gen pwoblèm:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Lyen swivan an|$2 lyen swivan yo}} manke:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Definisyon itilize <nowiki>{{PLURAL:}}</nowiki> men pa tradiksyon.",
+ "translate-checks-pagename": "Espas non chanje apati definisyon an",
+ "translate-checks-format": "Tradiksyon sa a pa swiv definisyon a oubyen gen yon sentaks ki pa bon: $1",
+ "translate-checks-escape": "Echapman sa yo kapab rive pa aksidan: <strong>$1</strong>",
+ "translate-checks-fudforum-syntax": "Pito ou sèvi ak <nowiki>$1</nowiki> pase <nowiki>$2</nowiki> nan pwojè sa a.",
+ "translate-pref-editassistlang": "Lang pou sipòte:",
+ "prefs-translate": "Opsyon pou tradiksyon",
+ "translate-pref-editassistlang-help": "Lis kòd lang yo ki separe pa vigil.\nTradiksyon pou yon mesaj nan lang sa yo parèt lè w ap tradui.\nLis lang pa defo depann de lang ou an.",
+ "translate-pref-editassistlang-bad": "Kòd pou lang ki pa bon nan lis:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Itilize fenèt tradiksyon pou fè modifikasyon yo",
+ "right-translate-manage": "Jere gwoup mesaj yo",
+ "action-translate-manage": "jere gwoup mesaj yo",
+ "right-translate-import": "Chaje tradiksyon ki te fèt andeyò",
+ "action-translate-import": "chaje tradiksyon ki te fèt andeyò",
+ "right-translate-messagereview": "Revize tradiksyon yo",
+ "action-translate-messagereview": "revize tradiksyon yo",
+ "right-translate-groupreview": "Chanje eta flo travay gwoup mesaj yo",
+ "action-translate-groupreview": "chanje eta flo travay gwoup mesaj yo",
+ "translate-rcfilters-translations": "Tradiksyon yo",
+ "translate-rcfilters-translations-only-label": "Tradiksyon yo",
+ "translate-rcfilters-translations-only-desc": "Chanjman yo nan paj ki tradui yo.",
+ "translate-rcfilters-translations-filter-label": "Pa tradiksyon yo",
+ "translate-rcfilters-translations-filter-desc": "Tout chanjman ki pa tradiksyon.",
+ "translate-rcfilters-translations-site-label": "Mesaj sit yo",
+ "translate-rc-translation-filter": "Filtre tradiksyon yo :",
+ "translate-rc-translation-filter-no": "Pa fè anyen",
+ "translate-rc-translation-filter-only": "Montre tradiksyon yo sèlman",
+ "translate-rc-translation-filter-filter": "Pa montre tradiksyon yo",
+ "translate-rc-translation-filter-site": "Chanjman yo nan mesaj pou sit sa sèlman",
+ "translationstats": "Estatistik tradiksyon yo",
+ "translate-stats-edits": "Modifikasyon yo",
+ "translate-stats-users": "Tradiktè yo",
+ "translate-stats-registrations": "Enskripsyon yo",
+ "translate-stats-reviews": "Revizyon yo",
+ "translate-statsf-intro": "Ou kapab fè estatistik ki senp ak fomilè sa.\nTout valè yo gen limit anwo ak anba.",
+ "translate-statsf-options": "Opsyon yo pou grafik",
+ "translate-statsf-width": "Lajè (an piksèl):",
+ "translate-statsf-height": "Wotè (an piksèl):",
+ "translate-statsf-days": "Peryòd tan an jou:",
+ "translate-statsf-start": "Dat kòmanse :",
+ "translate-statsf-scale": "Gwosè mòso yo :",
+ "translate-statsf-scale-years": "Ane",
+ "translate-statsf-scale-months": "Mwa",
+ "translate-statsf-scale-weeks": "Semèn",
+ "translate-statsf-scale-days": "Jou",
+ "translate-statsf-scale-hours": "Èdtan",
+ "translate-statsf-count": "Mezi :",
+ "translate-statsf-count-edits": "Kantite modifikasyon yo",
+ "translate-statsf-count-users": "Tradiktè ki aktif yo",
+ "translate-statsf-count-registrations": "Nouvo itilizatè yo",
+ "translate-statsf-count-reviews": "Revizyon tradiksyon yo",
+ "translate-statsf-language": "Lis kòd pou lang yo ki separe pa yon vigil:",
+ "translate-statsf-group": "Lis kòd pou gwoup yo ki separe pa yon vigil:",
+ "translate-statsf-submit": "Previzyalizasyon",
+ "translate-tag-page-desc": "Tradiksyon pou paj [[$2|$1]].",
+ "translate-sidebar-alltrans": "Nan lòt lang yo",
+ "translations": "Tout tradiksyon yo",
+ "translations-summary": "Ekri yon non mesaj anba pou wè tout tradiksyon ki disponib yo.",
+ "translate-translations-no-message": "« $1 » pa yon mesaj ou kapab tradui",
+ "translate-translations-none": "Pa gen tradiksyon pou « $1 »",
+ "translate-translations-count": "Nou jwenn {{PLURAL:$1|yon tradiksyon|$1 tradiksyon}}.",
+ "translate-translations-fieldset-title": "Mesaj",
+ "translate-translations-messagename": "Non :",
+ "translate-translations-project": "Pwojè :",
+ "translate-translations-including-no-param": "Tanpri, bay yon kle pou mesaj ki bon nan paramèt sou-paj la",
+ "translate-translations-history-short": "i",
+ "languagestats": "Estatistik lang yo",
+ "languagestats-summary": "Paj sa a montre estatistik tradiksyon yo pou tout gwoup mesaj ki fè pati yon lang.",
+ "messagegroupstats-summary": "Paj sa a montre estatistik gwoup mesaj.",
+ "languagestats-stats-for": "Estatistik tradiksyon yo pou $1 ($2).",
+ "languagestats-recenttranslations": "tradiksyon resan yo",
+ "translate-langstats-expand": "etann",
+ "translate-langstats-collapse": "redui",
+ "translate-langstats-expandall": "etann tout",
+ "translate-langstats-collapseall": "redui tout",
+ "translate-language-code": "Kòd lang",
+ "translate-language-code-field-name": "Kòd lang :",
+ "translate-suppress-complete": "Pa montre gwoup mesaj yo ki fin tradui nèt",
+ "translate-language": "Lang",
+ "translate-total": "Mesaj",
+ "translate-untranslated": "Pa tradui",
+ "translate-percentage-complete": "Konplete",
+ "translate-percentage-fuzzy": "Ansyen",
+ "translate-ls-submit": "Montre estatistik",
+ "translate-ls-column-group": "Gwoup mesaj",
+ "translate-mgs-pagename": "Estatistik gwoup mesaj",
+ "translate-mgs-group": "Gwoup mesaj :",
+ "translate-mgs-submit": "Montre estatistik",
+ "translate-mgs-column-language": "Lang",
+ "supportedlanguages": "Lang aktif yo",
+ "supportedlanguages-summary": "Paj sa a montre yon lis lang ki aktif nan {{SITENAME}},\nansanm ak non tradiktè yo k ap travay nan lang sa a.\nNon yo parèt pi gwo pou tradiktè yo k kontribye pi.\nKoulè souliye a endike konbyen dènyèman tradiktè a te aktif isit la.",
+ "supportedlanguages-translators": "{{PLURAL:$2|Tradiktè|Tradiktè yo}}: $1",
+ "supportedlanguages-recenttranslations": "tradiksyon resan yo",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|lang}} an total.",
+ "supportedlanguages-activity": "$1 : $2 {{PLURAL:$2|modifikasyon}} – dènye modifikasyon $3 {{PLURAL:$3|jou}} de sa",
+ "abusefilter-edit-builder-vars-translate-source-text": "Tèks sous inite tradiksyon an",
+ "abusefilter-edit-builder-vars-translate-target-language": "Lang sib pou tradiksyon",
+ "translate-jssti-add": "Ajoute nan lis la",
+ "managemessagegroups": "Jesyon gwoup mesaj",
+ "translate-smg-notallowed": "Ou pa gen dwa egzekite aksyon sa a.",
+ "translate-smg-rename-select": "Chwazi",
+ "translate-smg-rename-cancel": "Anile",
+ "translate-smg-strong-sync-help": "Èd",
+ "translate-smg-group-message-action-history": "Istorik",
+ "translate-smg-group-message-tag-outdated": "Demode",
+ "translate-smg-group-message-tag-rename": "Chanje non",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|Baliz|Baliz yo}} :",
+ "translate-smg-group-message-message-content": "Kontni :",
+ "translate-smg-group-message-message-target": "Sib :",
+ "translate-smg-group-message-message-replacement": "Ranplasman :",
+ "translate-smg-group-message-message-other-langs": "Lòt lang yo :",
+ "translate-smg-loading": "Ap chaje...",
+ "translate-manage-import-diff": "Mesaj: $1 | Aksyon yo: $2",
+ "translate-manage-import-new": "Nouvo mesaj $1",
+ "translate-manage-import-deleted": "Mesaj efase $1",
+ "translate-manage-action-import": "Enpòte",
+ "translate-manage-action-conflict": "Enpòte epi make kòm flou",
+ "translate-manage-action-ignore": "Pa okipe",
+ "translate-manage-action-fuzzy": "Enpòte epi make tradiksyon yo kòm flou",
+ "translate-manage-action-rename": "Chanje non",
+ "translate-manage-nochanges": "Pa gen chanjman nan definisyon mesaj yo pou gwoup sa a.",
+ "translate-manage-nochanges-other": "Pa t gen okenn chanjman pou lang sa a.\nSèvi ak lyen ki anba pou tounen wè detay yo.",
+ "translate-manage-inconsistent": "Detekte enkonsistans nan demann lan.\nTanpri gade si gen chanjman epi eseye ankò.\nDetay: $1.",
+ "translate-manage-toolong": "Tan $1 {{PLURAL:$1|segonn|segonn}} maksimòm pou tretman an depase.\nTanpri, soumèt fòmilè ankò pou kontinye tretman.",
+ "translate-manage-import-summary": "Enpòtasyon yon nouvo vèsyon depi yon sous andeyò",
+ "translate-manage-import-ignore": "Mesaj $1 te sote.",
+ "translate-manage-conflict-summary": "Enpòtasyon yon nouvo vèsyon depi yon sous andeyò.\nTanpri verifye.",
+ "translate-manage-submit": "Ekzekite",
+ "translate-manage-intro-other": "Anba w ap jwenn yon lis chanjman nan tradiksyon pou lang $1.\nTanpri, revize chanjman yo epi chwazi kisa ou vle fè pou chak tradiksyon.\nSi ou deside pou inyore chanjman yo, y ap kraze nan pwochen ekspòtasyon.",
+ "translate-manage-import-ok": "Yon nouvo vèsyon pou paj $1 te enpòte.",
+ "translate-manage-import-done": "Fini!",
+ "importtranslations": "Enpòte tradiksyon yo",
+ "translate-import-from-local": "Televèse yon fichye local :",
+ "translate-import-load": "Chaje fichye a",
+ "translate-import-err-dl-failed": "Pa kapab jwenn fichye a :\n$1",
+ "translate-import-err-ul-failed": "Fichye pa t reyisi chaje",
+ "translate-import-err-invalid-title": "Non fichye <nowiki>$1</nowiki> pa bon.",
+ "translate-import-err-no-such-file": "Fichye <nowiki>$1</nowiki> pa egziste oubyen pa t chaje localman.",
+ "translate-import-err-no-headers": "Fichye sa pa byen fòme nan fòma Gettext pou estansyon Translate :\nPa kapab detèmine gwoup mesaj ak lang depi tèt fichye yo.",
+ "translate-js-support-unsaved-warning": "Ou gen tradiksyon ki poko pibliye.",
+ "translate-gs-pos": "Poz.",
+ "translate-gs-code": "Kòd",
+ "translate-gs-continent": "Kontinan",
+ "translate-gs-speakers": "Moun ki pale",
+ "translate-gs-score": "Nòt",
+ "translate-gs-multiple": "Plizyè",
+ "translate-gs-count": "Nonm",
+ "translate-gs-total": "Total",
+ "translate-gs-avgscore": "Mwayèn nòt",
+ "translate-documentation-language": "Dokimantasyon pou mesaj",
+ "translate-searchprofile": "Tradiksyon yo",
+ "translate-searchprofile-tooltip": "Rechèch nan tout tradiksyon",
+ "translate-searchprofile-note": "Gen plis opsyon rechèch ki disponib ak [$1 rechèch tradiksyon].",
+ "translate-search-languagefilter": "Filtre pa lang :",
+ "translate-search-nofilter": "San filtraj",
+ "translate-workflow-state-": "(pa gen okenn valè)",
+ "translate-workflowstatus": "Eta : $1",
+ "translate-workflow-set-doing": "Ap defini...",
+ "translate-workflow-autocreated-summary": "Kreyasyon otomatik paj pou eta flo travay $1",
+ "translate-stats-workflow": "Eta",
+ "translate-workflowgroup-label": "Eta flo travay yo",
+ "translate-workflowgroup-desc": "Gwoup mesaj sa a montre eta flo travay tradiksyon yo.\nAdministratè sit sa a defini eta yo nan varyab konfigirasyon $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Tradiksyon resan yo",
+ "translate-dynagroup-recent-desc": "Gwoup mesaj sa a montre tout tradiksyon resan yo nan lang sa a.\nLi pi itil pou travay revizyon yo.",
+ "translate-dynagroup-additions-label": "Adisyon resan yo",
+ "translate-dynagroup-additions-desc": "Gwoup mesaj sa a montre mesaj nouvo ak mesaj ki chanje.",
+ "translate-msggroupselector-projects": "Gwoup mesaj",
+ "translate-msggroupselector-search-placeholder": "Rechèch gwoup yo",
+ "translate-msggroupselector-search-all": "Tout",
+ "translate-msggroupselector-search-recent": "Resan",
+ "tux-languageselector": "Tradui nan",
+ "tux-select-target-language": "Lang sib pou tradiksyon",
+ "tux-tab-all": "Tout",
+ "tux-tab-untranslated": "Pa tradui",
+ "tux-tab-outdated": "Demode",
+ "tux-tab-translated": "Tradui",
+ "tux-tab-unproofread": "Pa revize",
+ "tux-edit": "Modifye",
+ "tux-status-optional": "Pa obligatwa",
+ "tux-status-fuzzy": "Demode",
+ "tux-status-proofread": "Revize",
+ "tux-status-translated": "Tradui",
+ "tux-status-saving": "Ap pibliye...",
+ "tux-status-unsaved": "Poko pibliye",
+ "tux-editor-placeholder-documentation": "Ajoute dokimantasyon mesaj",
+ "tux-editor-placeholder-language": "Tradiksyon ou a nan $1",
+ "tux-editor-editsummary-placeholder": "Eksplike chanjman ou yo (pa obligatwa)",
+ "tux-editor-paste-original-button-label": "Kole tèks sous",
+ "tux-editor-discard-changes-button-label": "Jete chanjman yo",
+ "tux-editor-save-button-label": "Pibliye tradiksyon",
+ "tux-editor-skip-button-label": "Ale nan pwochen",
+ "tux-editor-cancel-button-label": "Anile",
+ "tux-editor-confirm-button-label": "Konfime tradiksyon",
+ "tux-editor-proofread-button-label": "Make kòm revize",
+ "tux-editor-edit-desc": "Modifye dokimantasyon",
+ "tux-editor-add-desc": "Ajoute dokimantasyon",
+ "tux-editor-suggestions-title": "Sijesyon yo",
+ "tux-editor-latest-updates-title": "Dènye mizajou yo",
+ "tux-editor-changes-without-summary": "$1 {{PLURAL:$1|mizajou}} san rezime",
+ "tux-editor-all-changes": "Tout chanjman",
+ "tux-editor-in-other-languages": "Nan lòt lang yo",
+ "tux-editor-need-more-help": "Èske w bezwen plis èd ?",
+ "tux-editor-ask-help": "Mande plis enfòmasyon",
+ "tux-editor-tm-match": "$1 % korespondans",
+ "tux-notices-more": "{{PLURAL:$1|$1 plis}}",
+ "tux-notices-hide": "kache",
+ "tux-editor-n-uses": "yo itilize li $1 {{PLURAL:$1|fwa}}",
+ "tux-editor-message-desc-more": "Wè plis",
+ "tux-editor-message-desc-less": "Wè mwens",
+ "tux-editor-clear-translated": "Kache mesaj ki tradui",
+ "tux-editor-proofreading-mode": "Revize",
+ "tux-editor-translate-mode": "Lis",
+ "tux-editor-proofreading-hide-own-translations": "Kache tradiksyon ou yo",
+ "tux-editor-proofreading-show-own-translations": "Montre tradiksyon ou yo",
+ "tux-proofread-action-tooltip": "Make kòm revize",
+ "tux-proofread-edit-label": "Modifye",
+ "tux-editor-page-mode": "Paj",
+ "tux-editor-outdated-notice": "Tradiksyon sa a ka bezwen mete ajou.",
+ "tux-editor-outdated-notice-diff-link": "Montre diferans",
+ "tux-editor-doc-editor-placeholder": "Dokimantasyon pou mesaj",
+ "tux-editor-doc-editor-save": "Pibliye dokimantasyon",
+ "tux-editor-doc-editor-cancel": "Anile",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|mesaj}} ankò",
+ "tux-messagetable-loading-messages": "Ap chaje {{PLURAL:$1|mesaj|mesaj yo}}...",
+ "tux-message-filter-placeholder": "Filtre lis la",
+ "tux-message-filter-result": "Yo jwenn $1 {{PLURAL:$1|rezilta}} pou « $2 »",
+ "tux-message-filter-advanced-button": "Rechèch avanse",
+ "tux-message-filter-optional-messages-label": "Mesaj ki pa obligatwa yo",
+ "tux-proofread-translated-by-self": "Ki ou te tradui",
+ "tux-empty-list-all": "Gwoup mesaj sa a vid",
+ "tux-empty-list-all-guide": "Chwazi yon gwoup mesaj diferan pou tradui",
+ "tux-empty-list-translated": "Pa gen mesaj ki tradui",
+ "tux-empty-list-translated-guide": "Ou ka ede tradui",
+ "tux-empty-list-translated-action": "Tradui",
+ "tux-empty-no-messages-to-display": "Pa gen mesaj pou montre.",
+ "tux-empty-there-are-optional": "Gen mesaj ki pa obligatwa yo ki pa parèt nan lis la",
+ "tux-empty-show-optional-messages": "Montre mesaj ki pa obligatwa yo",
+ "tux-empty-no-outdated-messages": "Pa gen mesaj demode",
+ "tux-empty-nothing-to-proofread": "Pa gen anyen pou revize",
+ "tux-empty-you-can-help-providing": "Ou ka ede bay nouvo tradiksyon",
+ "tux-empty-nothing-new-to-proofread": "Pa gen anyen nouvo pou revize",
+ "tux-empty-you-can-review-already-proofread": "Ou ka revize tradiksyon lòt moun deja revize.",
+ "tux-empty-list-other": "Pa gen anyen pou tradui",
+ "tux-empty-list-other-guide": "Ou ka ede revize tradiksyon ki egziste deja yo",
+ "tux-empty-list-other-action": "Revize tradiksyon yo",
+ "tux-empty-list-other-link": "Montre tout mesaj yo",
+ "tux-editor-close-tooltip": "Fèmen",
+ "tux-editor-expand-tooltip": "Etann",
+ "tux-editor-collapse-tooltip": "Redui",
+ "tux-editor-message-tools-show-editor": "Montre nan editè wiki",
+ "tux-editor-message-tools-history": "Istorik",
+ "tux-editor-message-tools-delete": "Efase",
+ "tux-editor-message-tools-translations": "Tout tradiksyon yo",
+ "tux-editor-message-tools-linktothis": "Link nan mesaj sa a",
+ "tux-editor-loading": "Ap chaje...",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|lang}} ankò",
+ "translate-statsbar-tooltip": "$1 % tradui, $2 % revize",
+ "translate-statsbar-tooltip-with-fuzzy": "$1 % tradui, $2 % revize, $3 % demode",
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|gwoup}} ankò",
+ "translate-syntax-error": "Tradiksyon gen erè sentaks",
+ "tux-session-expired": "Ou pa konekte ankò. Tanpri konekte nan yon onglet separe. Altènativman, fè yon kopi tradiksyon ki pa anrejistre yo, konekte ou, retounen nan paj sa a epi antre tradiksyon ou yo ankò.",
+ "specialpages-group-translation": "Tradiksyon"
+}
diff --git a/Translate/i18n/core/hu.json b/Translate/i18n/core/hu.json
new file mode 100644
index 00000000..1af322e6
--- /dev/null
+++ b/Translate/i18n/core/hu.json
@@ -0,0 +1,394 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bencemac",
+ "Bináris",
+ "BáthoryPéter",
+ "Csega",
+ "Dani",
+ "Dj",
+ "Glanthor Reviol",
+ "Hanna Tardos",
+ "Misibacsi",
+ "Máté",
+ "Tacsipacsi",
+ "Tgr",
+ "Wilander"
+ ]
+ },
+ "translate": "Fordítás",
+ "translate-desc": "[[Special:Translate|Speciális lap]] a MediaWiki és más projektek fordítására",
+ "translate-fuzzybot-desc": "Ez egy speciális rendszerfiók, amit a MediaWiki [https://www.mediawiki.org/wiki/Extension:Translate/hu Translate kiterjesztése] használ a fordítások karbantartásához.\nEz a fiók a MediaWiki szoftver része, és nem tulajdonosa egyetlen felhasználó sem.",
+ "translate-taskui-export-to-file": "Exportálás natív formátumban",
+ "translate-taskui-export-as-po": "Exportálás offline fordításhoz",
+ "translate-taction-translate": "Fordítás",
+ "translate-taction-proofread": "Ellenőriz",
+ "translate-taction-lstats": "Nyelvi statisztika",
+ "translate-taction-mstats": "Üzenetcsoport-statisztika",
+ "translate-taction-export": "Exportálás",
+ "translate-taction-disabled": "Ez a művelet le van tiltva ebben a wikiben.",
+ "translate-page-no-such-language": "A megadott nyelv érvénytelen",
+ "translate-page-no-such-group": "A megadott csoport érvénytelen",
+ "translate-page-disabled": "Ez a csoport nem fordítható erre a nyelvre. A tiltás oka:\n\n<em>$1</em>",
+ "translate-language-disabled": "Erre a nyelvre a fordítás le van tiltva.",
+ "translate-page-settings-legend": "Beállítások",
+ "translate-page-group": "Csoport",
+ "translate-page-language": "Nyelv",
+ "translate-page-limit": "Megjelenítendő elemek",
+ "translate-page-limit-option": "$1 üzenet/oldal",
+ "translate-submit": "Megjelenítés",
+ "translate-page-navigation-legend": "Navigáció",
+ "translate-page-showing": "Üzenetek: $1–$2 (összesen $3)",
+ "translate-page-showing-all": "$1 üzenet megjelenítve",
+ "translate-page-showing-none": "Nincs a keresési feltételeknek megfelelő üzenet",
+ "translate-next": "következő",
+ "translate-prev": "előző",
+ "translate-page-description-legend": "Információk a csoportról",
+ "translate-page-description-hasoptional": "Ez az üzenetcsoport opcionális üzeneteket tartalmaz.\nAz opcionális üzeneteket csak akkor kell lefordítani, ha a nyelvnek speciális követelményei vannak, mint például a szóközök elhagyása vagy a tulajdonnevek átírása. $1",
+ "translate-page-description-hasoptional-open": "Opcionális üzenetek megjelenítése.",
+ "translate-page-edit": "szerkesztés",
+ "translate-optional": "(nem kötelező)",
+ "translate-ignored": "(figyelmen kívül hagyva)",
+ "translate-edit-title": "„$1” szerkesztése",
+ "translate-edit-definition": "Alapértelmezett érték",
+ "translate-edit-contribute": "szerkesztés",
+ "translate-edit-no-information": "''Ehhez az üzenethez még nincs leírás. Ha tudod, hogy hol vagy hogyan jelenik meg, segítheted a többi fordítót az üzenet dokumentálásával.''",
+ "translate-edit-information": "Információk az üzenetről ($1)",
+ "translate-edit-warnings": "Hiányosságok a fordításban",
+ "translate-edit-tmmatch-source": "Fordítási forrás szöveg: $1",
+ "translate-edit-tmmatch": "$1%-os egyezés",
+ "translate-edit-nopermission": "Az üzenetek fordításához fordítói jogok szükségesek.",
+ "translate-edit-askpermission": "Engedélyszerzés",
+ "exporttranslations": "Fordítások exportálása",
+ "translate-export-form-format": "Formátum",
+ "translate-export-invalid-format": "Adj meg egy érvényes formátumot.",
+ "translate-export-not-supported": "A fordítások exportálása nem támogatott.",
+ "translate-export-format-notsupported": "A megadott exportálási formátumot nem támogatja ez az üzenetcsoport.",
+ "translate-export-group-too-large": "A kiválasztott üzenetcsoport túl nagy. Válassz egy olyan üzenetcsoportot, ami kevesebb mint $1 üzenetet tartalmaz, vagy lépj kapcsolatba egy fordítási adminisztrátorral tanácsért.",
+ "translate-checks-parameters": "A következő {{PLURAL:$2|paraméter nincs|paraméterek nincsenek}} használva:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "A következő {{PLURAL:$2|paraméter ismeretlen|paraméterek ismeretlenek}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "Nem egyenlő számban vannak használva a nyitó és záró {{PLURAL:$2|zárójelek|zárójelek}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "A következő {{PLURAL:$2|link problémás|linkek problémásak}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "A következő {{PLURAL:$2|hivatkozás hiányzik|hivatkozások hiányoznak}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Az alapértelmezett változatban van <nowiki>{{PLURAL:}}</nowiki> forma, míg a fordításban nincs (magyar nyelv esetén ez nem feltétlenül probléma!).",
+ "translate-checks-plural-forms": "A <nowiki>{{PLURAL:}}</nowiki> $1 formát kapott, de csak $2 forma támogatott (0= és 1= kivételével).",
+ "translate-checks-plural-dupe": "<nowiki>A {{PLURAL:}} dupla formákat kap a végén. A $1 {{PLURAL:$1|kutya|kutya}} $1 kutya formában írandó (és még véletlenül se $1 {{PLURAL:$1|kutya|kutyák}}-ként, az felér a magyar nyelv elpusztításával :)</nowiki><!-- nyafog a smiley: tessék, itt van még egy (-->!)<nowiki>, ha az üzenetben nincs előtte szám, akkor {{PLURAL:$1|kutya|kutya}} helyett {{PLURAL:$1|kutya|kutyák}}, amennyiben máshogy megjelenik szám előtte, akkor {{PLURAL:$1|kutya}} kell.</nowiki>",
+ "translate-checks-gettext-plural-count": "A <nowiki>{{PLURAL:GETTEXT|}}</nowiki> csak pontosan $1 többes szám megadását támogatja, jelenleg $2 van megadva.",
+ "translate-checks-pagename": "A névtér nem egyezik meg a definícióval",
+ "translate-checks-format": "A fordítás nem felel meg a definíciónak, vagy érvénytelen a szintaxisa: $1",
+ "translate-checks-escape": "A következő {{PLURAL:$2|escape-karakter|escape-karakterek}} valószínűleg véletlenül {{PLURAL:$2|került|kerültek}} az üzenetbe: <strong>$1</strong>. {{PLURAL:$4|Egy érvényes escape-karakter a következő|Érvényes escape-karakterek például a következők}}: $3.",
+ "translate-checks-parametersnotequal": "A paraméterek száma a szükséges {{PLURAL:$1|$1}} helyett {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> hibás formátumú.",
+ "translate-checks-fudforum-syntax": "Használj <nowiki>$1</nowiki> formát <nowiki>$2</nowiki> helyett ebben a projektben.",
+ "translate-checks-newline-missing-start": "A fordítás elején hiányzik $1 újsor karakter.",
+ "translate-checks-newline-missing-end": "A fordítás végén hiányzik $1 újsor karakter.",
+ "translate-checks-newline-extra-start": "A fordítás elején $1 extra újsor karakter van.",
+ "translate-checks-newline-extra-end": "A fordítás végén $1 extra újsor karakter van.",
+ "translate-checks-replacement": "$1 helyett használd a következőt: $2.",
+ "translate-pref-editassistlang": "Segédnyelvek:",
+ "prefs-translate": "Fordítási beállítások",
+ "translate-pref-editassistlang-help": "Nyelvkódok vesszővel elválasztott listája.\nAz üzenetek fordításai ezeken a nyelveken jelennek meg, amikor fordítasz.\nA nyelvek alapértelmezett listája a nyelvedtől függ.",
+ "translate-pref-editassistlang-bad": "Érvénytelen nyelvkód a listában:\n<nowiki>$1</nowiki>.",
+ "right-translate": "szerkesztés a fordítói felületen keresztül",
+ "action-translate": "szerkesztés a fordítói felületen használatával",
+ "right-translate-manage": "üzenetcsoportok kezelése",
+ "action-translate-manage": "üzenetcsoportok kezelése",
+ "right-translate-import": "kapcsolat nélküli fordítások importálása",
+ "action-translate-import": "offline fordítások importálása",
+ "right-translate-messagereview": "fordítások ellenőrzése",
+ "action-translate-messagereview": "fordítások átnézése",
+ "right-translate-groupreview": "Üzenetcsoportok állapotának megváltoztatása",
+ "action-translate-groupreview": "üzenetcsoportok állapotának megváltoztatása",
+ "translate-rcfilters-translations": "Fordítások",
+ "translate-rcfilters-translations-only-label": "Fordítások",
+ "translate-rcfilters-translations-only-desc": "Lefordított lapok változtatásai.",
+ "translate-rcfilters-translations-filter-label": "Nem fordítások.",
+ "translate-rcfilters-translations-filter-desc": "Minden változtatás, ami nem fordítás.",
+ "translate-rcfilters-translations-site-label": "Rendszerüzenetek",
+ "translate-rcfilters-translations-site-desc": "A rendszerüzenetek testreszabása a MediaWiki névtérben.",
+ "translate-rc-translation-filter": "Fordítások szűrése:",
+ "translate-rc-translation-filter-no": "Ne csináljon semmit",
+ "translate-rc-translation-filter-only": "Csak a fordítások mutatása",
+ "translate-rc-translation-filter-filter": "Fordítások kihagyása",
+ "translate-rc-translation-filter-site": "Az oldal üzeneteinek változása",
+ "translationstats": "Fordítási statisztika",
+ "translate-stats-edits": "Szerkesztések",
+ "translate-stats-users": "Fordítók",
+ "translate-stats-registrations": "Regisztrációk",
+ "translate-stats-reviews": "Ellenőrzések",
+ "translate-stats-reviewers": "Lektorok",
+ "translate-statsf-intro": "A lenti űrlap segítségével egy egyszerű statisztikát generáltathatsz. Minden értéknek van alsó és felső határa.",
+ "translate-statsf-options": "Grafikon beállításai",
+ "translate-statsf-width": "Szélesség pixelekben:",
+ "translate-statsf-height": "Magasság pixelekben:",
+ "translate-statsf-days": "Időtartam napokban:",
+ "translate-statsf-start": "Kezdődátum:",
+ "translate-statsf-scale": "Időköz:",
+ "translate-statsf-scale-months": "Hónapok",
+ "translate-statsf-scale-weeks": "Hetek",
+ "translate-statsf-scale-days": "naponként",
+ "translate-statsf-scale-hours": "óránként",
+ "translate-statsf-count": "Értékek:",
+ "translate-statsf-count-edits": "Szerkesztések száma",
+ "translate-statsf-count-users": "Aktív fordítók",
+ "translate-statsf-count-registrations": "Új felhasználók",
+ "translate-statsf-count-reviews": "Fordítás ellenőrzések",
+ "translate-statsf-count-reviewers": "Lektorok",
+ "translate-statsf-language": "Nyelvkódok, vesszővel elválasztva:",
+ "translate-statsf-group": "Csoportkódok, vesszővel elválasztva:",
+ "translate-statsf-submit": "Előnézet",
+ "translate-statsf-unknown-error": "Ismeretlen hiba történt.",
+ "translate-statsf-error-message": "Hiba történt a $1 grafikon betöltése közben",
+ "translate-statsf-graph-alt-text-info": "A fordítási statisztikák szöveges alternatívája az alábbi adattáblában található.",
+ "translate-statsf-alt-text": "Fordítási statisztikák szöveges alternatívája.",
+ "translate-statsf-embed": "Kód a fordítási statisztikákat mutató ábra más oldalakra való beágyaázásához.",
+ "translate-tag-page-desc": "A(z) [[$2|$1]] lap fordítása $3 ($4) nyelvről",
+ "translate-sidebar-alltrans": "Más nyelveken",
+ "translations": "Minden fordítás",
+ "translations-summary": "Add meg az üzenet nevét az összes elérhető fordítás listázásához.",
+ "translate-translations-no-message": "„$1” egy nem lefordítható üzenet",
+ "translate-translations-none": "A(z) „$1” üzenetnek nincsenek fordításai",
+ "translate-translations-count": "{{PLURAL:$1|Egy fordítás|$1 fordítás}} található.",
+ "translate-translations-fieldset-title": "Üzenet",
+ "translate-translations-messagename": "Név:",
+ "translate-translations-project": "Projekt:",
+ "translate-translations-including-no-param": "Adj meg egy érvényes üzenetazonosítót, allapként.",
+ "translate-translations-history-short": "t",
+ "languagestats": "Nyelvi statisztika",
+ "languagestats-summary": "Ezen a lapon az egy nyelvhez tartozó összes üzenetcsoport fordítási statisztikái láthatóak.",
+ "messagegroupstats-summary": "Ezen a lapon az egyes üzenetcsoportok statisztikái láthatóak.",
+ "languagestats-stats-for": "Nyelvi statisztika a(z) $1 nyelvhez ($2).",
+ "languagestats-recenttranslations": "friss fordítások",
+ "translate-langstats-incomplete": "Ezen a lapon néhány statisztika nem teljes. Kérlek töltsd be újra az oldalt további statisztikákért.",
+ "translate-langstats-expand": "kinyit",
+ "translate-langstats-collapse": "becsuk",
+ "translate-langstats-expandall": "összes kinyitása",
+ "translate-langstats-collapseall": "összes becsukása",
+ "translate-language-code": "Nyelvkód",
+ "translate-language-code-field-name": "Nyelvkód:",
+ "translate-suppress-complete": "Teljesen lefordított üzenetcsoportok elrejtése",
+ "translate-ls-noempty": "Teljesen lefordítatlan üzenetcsoportok elrejtése",
+ "translate-language": "Nyelv",
+ "translate-total": "Üzenetek",
+ "translate-untranslated": "Lefordítatlan",
+ "translate-percentage-complete": "Készültségi fok",
+ "translate-percentage-fuzzy": "Elavult",
+ "translate-percentage-proofread": "Ellenőrizve",
+ "translate-languagestats-overall": "Valamennyi üzenetcsoport együtt",
+ "translate-ls-submit": "Statisztika megjelenítése",
+ "translate-ls-column-group": "Üzenetcsoport",
+ "translate-mgs-pagename": "Üzenetcsoport-statisztika",
+ "translate-mgs-fieldset": "Megjelenítési beállítások",
+ "translate-mgs-group": "Üzenetcsoport:",
+ "translate-mgs-nocomplete": "Ne jelenjenek meg a teljesen lefordított nyelvek",
+ "translate-mgs-noempty": "Ne jelenjenek meg azok a nyelvek, amelyeknek nincs egyetlen fordítása sem",
+ "translate-mgs-submit": "Statisztika megjelenítése",
+ "translate-mgs-column-language": "Nyelv",
+ "translate-mgs-totals": "Mind a(z) $1 nyelv együtt",
+ "translate-mgs-invalid-group": "A megadott $1 csoport nem létezik.",
+ "translate-mgs-nothing": "Nincs megjeleníthető statisztika.",
+ "supportedlanguages": "Aktív nyelvek",
+ "supportedlanguages-summary": "Ezen a lapon megtalálható a(z) {{SITENAME}} összes aktív nyelve, a nyelven dolgozó fordítók neveivel együtt.\n\nEgy fordító minél többet fordított, a neve annál nagyobb betűkkel jelenik meg. Az aláhúzás színe jelzi, hogy az adott fordító legutóbb mikor volt aktív.",
+ "supportedlanguages-colorlegend": "A színek jelentése: a legutóbbi fordítást $1 napja végezte.",
+ "supportedlanguages-sqlite-error": "Az SQLite nem támogatott",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Fordító}}|Fordítók}}: $1",
+ "supportedlanguages-recenttranslations": "friss fordítások",
+ "supportedlanguages-count": "Összesen {{PLURAL:$1|egy|$1}} nyelv.",
+ "supportedlanguages-activity": "$1: {{PLURAL:$2|egy|$2}} szerkesztés, a legutóbb {{PLURAL:$3|egy|$3}} napja szerkesztett",
+ "abusefilter-edit-builder-vars-translate-source-text": "A fordítási egység forrásszövege",
+ "abusefilter-edit-builder-vars-translate-target-language": "A fordítás célnyelve",
+ "translate-jssti-add": "Hozzáadás a listához",
+ "managemessagegroups": "Üzenetcsoportok karbantartása",
+ "translate-smg-notallowed": "Ezt a tevékenységet nem hajthatod végre.",
+ "translate-smg-nochanges": "Nincsenek feldolgozandó változtatások.",
+ "translate-smg-submit": "Változtatások elküldése feldolgozásra",
+ "translate-smg-submitted": "Az üzenet definíciók frissítése megtörtént. A változások a háttérben kerülnek feldolgozásra.",
+ "translate-smg-submitted-with-failure": "A következő {{PLURAL:$1|csoport üzenetdefiníciójának|csoportok üzenetdefinícióinak}} frissítése sikertelen: $2. $3",
+ "translate-smg-submitted-others-processing": "A többi csoport üzenetdefinícióinak feldolgozása folyik a háttérben.",
+ "translate-smg-more": "További feldolgozandó változtatások lesznek ezen módosítások elküldése után.",
+ "translate-smg-left": "Üzenet tartalom wikiben",
+ "translate-smg-right": "Bejövő változtatások",
+ "translate-smg-rename-select": "Kiválasztás",
+ "translate-smg-rename-cancel": "Mégse",
+ "translate-smg-rename-select-err": "Válassz ki egy átnevezendő üzenetet",
+ "translate-smg-rename-no-msg": "Nem találhatók üzenetek.",
+ "translate-smg-rename-new": "Hozzáadás újként…",
+ "translate-smg-changeset-modified": "A változáscsomagot egy másik felhasználó vagy folyamat módosította, így nem lehet közzétenni a módosításaidat, mert felülírnák azokat. Töltsd újra a lapot a legfrissebb változások megtekintéséhez.",
+ "translate-smg-strong-sync-help": "Súgó",
+ "translate-smg-group-message-action-history": "Történelem",
+ "translate-smg-group-message-tag-outdated": "Elavult",
+ "translate-smg-group-message-tag-rename": "Átnevezés",
+ "translate-smg-group-message-message-content": "Tartalom:",
+ "translate-smg-group-message-message-replacement": "Csere:",
+ "translate-smg-group-message-message-other-langs": "További nyelvek:",
+ "translate-manage-import-diff": "Üzenet: $1 | Műveletek: $2",
+ "translate-manage-import-new": "Új üzenet: $1",
+ "translate-manage-import-deleted": "Törölt üzenet: $1",
+ "translate-manage-action-import": "Importálás",
+ "translate-manage-action-conflict": "Importálás és elavultnak jelölés",
+ "translate-manage-action-ignore": "Figyelmen kívül hagyás",
+ "translate-manage-action-fuzzy": "Importálás és fordítások elavultnak jelölése",
+ "translate-manage-action-rename-fuzzy": "Átnevezés és fordítások elavultnak jelölése",
+ "translate-manage-action-rename": "Átnevezés",
+ "translate-manage-action-ignore-change": "Fordítás változásának ignorálása",
+ "translate-manage-nochanges": "Ebben a csoportban nem történt módosítás az üzenetek definíciójában.",
+ "translate-manage-nochanges-other": "Ennél a nyelvnél nem történtek változtatások.\nHasználd az alábbi linket a csoport adatlapjához történő visszalépéshez.",
+ "translate-manage-inconsistent": "A kérésben inkonzisztenciát észleltem.\nEllenőrizd a változtatásokat, majd próbáld újra.\nRészletek: $1.",
+ "translate-manage-toolong": "A maximális feldolgozási idő ({{PLURAL:$1|egy|$1}} másodperc) túl lett lépve.\nKüldd el újra az űrlapot a feldolgozás folytatásához.",
+ "translate-manage-import-summary": "Új változat importálása külső forrásból",
+ "translate-manage-import-ignore": "$1 üzenet átugrása.",
+ "translate-manage-import-rename-summary": "Átnevezve külső forrásban",
+ "translate-manage-conflict-summary": "Új változat importálása külső forrásból.\nEllenőrizd.",
+ "translate-manage-submit": "Végrehajtás",
+ "translate-manage-intro-other": "Alább látható a(z) $1 nyelv fordításaiban történt változtatások listája.\nEllenőrizd a változtatásokat, és válaszd ki azt a műveletet, amit alkalmazni szeretnél minden egyes frissítésre.\nHa figyelmen kívül hagyod a változtatásokat, az csak ideiglenes művelet.",
+ "translate-manage-import-ok": "Importálva: $1",
+ "translate-manage-import-done": "Importálás kész!",
+ "importtranslations": "Fordítások importálása",
+ "translate-import-from-local": "Helyi fájlfeltöltés:",
+ "translate-import-load": "Fájl betöltése",
+ "translate-import-err-dl-failed": "Nem sikerült olvasni a fájlt:\n$1",
+ "translate-import-err-ul-failed": "A fájlfeltöltés sikertelen",
+ "translate-import-err-invalid-title": "A megadott fájlnév (<nowiki>$1</nowiki>) érvénytelen.",
+ "translate-import-err-no-such-file": "A(z) <nowiki>$1</nowiki> fájl nem létezik vagy nem helyben lett feltöltve.",
+ "translate-import-err-stale-group": "A fájlhoz tartozó üzenetcsoport nem létezik.",
+ "translate-import-err-no-headers": "A fájl nem egy jól formázott Gettext-fájl a Translate-kiterjesztés formátumával:\nnem sikerült meghatározni a csoportot és a nyelvet a fájl fejlécéből.",
+ "translate-js-support-unsaved-warning": "Közzé nem tett fordításaid vannak.",
+ "translate-gs-pos": "Hely",
+ "translate-gs-code": "Kód",
+ "translate-gs-continent": "Kontinens",
+ "translate-gs-speakers": "Beszélők",
+ "translate-gs-score": "Eredmény",
+ "translate-gs-multiple": "Több",
+ "translate-gs-count": "Számláló",
+ "translate-gs-total": "Összesen",
+ "translate-gs-avgscore": "Átlagos eredmény",
+ "translate-documentation-language": "üzenetdokumentáció",
+ "translate-searchprofile": "Fordítások",
+ "translate-searchprofile-tooltip": "Keresés az összes fordítás között",
+ "translate-searchprofile-note": "További keresési opciók elérhetők a [$1 fordításkeresővel].",
+ "translate-search-languagefilter": "Szűrés nyelv szerint",
+ "translate-search-nofilter": "Nincs szűrés",
+ "log-name-translationreview": "Fordítás-ellenőrzési napló",
+ "log-description-translationreview": "Valamennyi fordítás és üzenetcsoport ellenőrzésének a naplója.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|ellenőrizte}} a fordítást: $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|megváltoztatta}} a(z) $4 lap $3 fordításainak állapotát erről: $6 erre: $7",
+ "group-translate-sandboxed": "megerősítetlen fordítók",
+ "group-translate-sandboxed-member": "{{GENDER:$1|megerősítetlen fordító}}",
+ "right-translate-sandboxmanage": "megerősítetlen fordítók kezelése",
+ "action-translate-sandboxmanage": "megerősítetlen fordítók kezelése",
+ "right-translate-sandboxaction": "megerősítetlen fordítóknak engedélyezett műveletek végrehajtása",
+ "action-translate-sandboxaction": "megerősítetlen fordítóknak engedélyezett műveletek végrehajtása",
+ "translate-workflow-state-": "(nem beállított)",
+ "translate-workflowstatus": "Állapot: $1",
+ "translate-workflow-set-doing": "Beállítás…",
+ "translate-workflow-autocreated-summary": "Automatikus lap létrehozás $1 munkafolyamat állapothoz.",
+ "translate-stats-workflow": "Állapot",
+ "translate-workflowgroup-label": "Munkafolyamat állapotok",
+ "translate-workflowgroup-desc": "Ez az üzenetcsoport tartalmazza a fordítási állapotok üzeneteit.\nAz állapotokat a $wgTranslateWorkflowStates konfigurációs változó tartalmazza.",
+ "translate-dynagroup-recent-label": "Friss fordítások",
+ "translate-dynagroup-recent-desc": "Ez az üzenetcsoport tartalmaz minden friss fordítást erre a nyelvre.\nFordítás-ellenőrzéshez hasznos.",
+ "translate-dynagroup-additions-label": "Legutóbb hozzáadva",
+ "translate-dynagroup-additions-desc": "Ez az üzenetcsoport új és megváltoztatott üzeneteket tartalmaz.",
+ "translate-msggroupselector-projects": "Üzenetcsoport",
+ "translate-msggroupselector-search-placeholder": "Csoportok keresése",
+ "translate-msggroupselector-search-all": "Mind",
+ "translate-msggroupselector-search-recent": "Legutóbbi",
+ "translate-msggroupselector-view-subprojects": "$1 alcsoport",
+ "tux-languageselector": "Fordítás erre:",
+ "tux-tab-all": "Összes",
+ "tux-tab-untranslated": "Lefordítatlan",
+ "tux-tab-outdated": "Elavult",
+ "tux-tab-translated": "Lefordítva",
+ "tux-tab-unproofread": "Nincs átnézve",
+ "tux-edit": "Szerkesztés",
+ "tux-status-optional": "Opcionális",
+ "tux-status-fuzzy": "Elavult",
+ "tux-status-proofread": "Ellenőrizve",
+ "tux-status-translated": "Lefordítva",
+ "tux-status-saving": "Közzététel…",
+ "tux-status-unsaved": "Nincs közzétéve",
+ "tux-save-unknown-error": "Ismeretlen hiba történt.",
+ "tux-editor-placeholder-documentation": "Üzenetdokumentáció hozzáadása",
+ "tux-editor-placeholder-language": "A fordításod $1 nyelvre",
+ "tux-editor-editsummary-placeholder": "Opcionális összefoglaló",
+ "tux-editor-paste-original-button-label": "Forrásszöveg beillesztése",
+ "tux-editor-discard-changes-button-label": "Változtatások elvetése",
+ "tux-editor-save-button-label": "Fordítás közzététele",
+ "tux-editor-skip-button-label": "Továbblépés a következőre",
+ "tux-editor-cancel-button-label": "Mégse",
+ "tux-editor-confirm-button-label": "Fordítás megerősítése",
+ "tux-editor-proofread-button-label": "Megjelölés átnézettként",
+ "tux-editor-shortcut-info": "Nyomd meg a „$1” billentyűkombinációt a megerősítéshez és a következő üzenetre lépéshez, az „$2”-t az üzenet kihagyásához, az „$4”-t az összefoglaló megadásához vagy tartsd lenyomva az „$3”-ot további gyorsbillentyűk megjelenítéséhez.",
+ "tux-editor-edit-desc": "Dokumentáció szerkesztése",
+ "tux-editor-add-desc": "Dokumentáció hozzáadása",
+ "tux-editor-suggestions-title": "Javaslatok",
+ "tux-editor-latest-updates-title": "Legutóbbi frissítések",
+ "tux-editor-changes-without-summary": "$1 összefoglaló nélküli {{PLURAL:$1|frissítés}}",
+ "tux-editor-all-changes": "Összes változtatás",
+ "tux-editor-in-other-languages": "Más nyelveken",
+ "tux-editor-need-more-help": "További segítségre van szükséged?",
+ "tux-editor-ask-help": "További információ kérése",
+ "tux-editor-tm-match": "$1%-os egyezés",
+ "tux-notices-more": "$1 további",
+ "tux-notices-hide": "elrejtés",
+ "tux-editor-save-failed": "A fordítás közzététele sikertelen: $1",
+ "tux-editor-n-uses": "$1 használat",
+ "tux-editor-message-desc-more": "Több",
+ "tux-editor-message-desc-less": "Kevesebb",
+ "tux-editor-clear-translated": "Lefordítottak elrejtése",
+ "tux-editor-proofreading-mode": "Átnézés",
+ "tux-editor-translate-mode": "Lista",
+ "tux-editor-proofreading-hide-own-translations": "Saját fordítások elrejtése",
+ "tux-editor-proofreading-show-own-translations": "Saját fordítások megjelenítése",
+ "tux-proofread-action-tooltip": "Megjelölés átnézettként",
+ "tux-proofread-edit-label": "Szerkesztés",
+ "tux-editor-page-mode": "Lap",
+ "tux-editor-outdated-notice": "A fordítást lehet, hogy frissíteni kell.",
+ "tux-editor-outdated-notice-diff-link": "Változtatások megjelenítése",
+ "tux-editor-doc-editor-placeholder": "Üzenetdokumentáció",
+ "tux-editor-doc-editor-save": "Dokumentáció közzététele",
+ "tux-editor-doc-editor-cancel": "Mégse",
+ "tux-messagetable-more-messages": "$1 további üzenet",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|Üzenet|Üzenetek}} betöltése…",
+ "tux-message-filter-placeholder": "Lista szűrése",
+ "tux-message-filter-result": "$1 találat van a(z) „$2” kifejezésre",
+ "tux-message-filter-advanced-button": "Speciális keresés",
+ "tux-message-filter-optional-messages-label": "Opcionális üzenetek",
+ "tux-proofread-translated-by-self": "Te fordítottad",
+ "tux-empty-list-all": "Ez az üzenetcsoport üres",
+ "tux-empty-list-all-guide": "Válassz egy másik üzenetcsoportot a fordításhoz",
+ "tux-translate-page-no-such-group": "<strong>A megadott üzenetcsoport nem létezik.</strong> Válassz egy másik üzenetcsoportot.",
+ "tux-empty-list-translated": "Nincs lefordított üzenet",
+ "tux-empty-list-translated-guide": "Segíthetsz a fordításban",
+ "tux-empty-list-translated-action": "Fordítás",
+ "tux-empty-no-messages-to-display": "Nincs megjeleníthető üzenet.",
+ "tux-empty-there-are-optional": "Vannak opcionális üzenetek, amik nem jelennek meg a listában",
+ "tux-empty-show-optional-messages": "Opcionális üzenetek megjelenítése",
+ "tux-empty-no-outdated-messages": "Nincs elavult üzenet",
+ "tux-empty-nothing-to-proofread": "Nincs átnézendő üzenet",
+ "tux-empty-you-can-help-providing": "Segíthetsz új fordításokkal",
+ "tux-empty-nothing-new-to-proofread": "Nincs új átnézendő üzenet",
+ "tux-empty-you-can-review-already-proofread": "Átnézhetsz mások által már átnézett üzeneteket.",
+ "tux-empty-list-other": "Nincs lefordítandó üzenet",
+ "tux-empty-list-other-guide": "Segíthetsz fordítások átnézésével",
+ "tux-empty-list-other-action": "Fordítások átnézése",
+ "tux-empty-list-other-link": "Összes üzenet megjelenítése",
+ "tux-editor-close-tooltip": "Bezárás",
+ "tux-editor-expand-tooltip": "Szélesebb felület",
+ "tux-editor-collapse-tooltip": "Összecsukás",
+ "tux-editor-message-tools-show-editor": "Megjelenítés wikiszerkesztőben",
+ "tux-editor-message-tools-history": "Laptörténet",
+ "tux-editor-message-tools-delete": "Törlés",
+ "tux-editor-message-tools-translations": "Összes fordítás",
+ "tux-editor-message-tools-linktothis": "Hivatkozás erre az üzenetre",
+ "tux-editor-loading": "Betöltés…",
+ "tux-editor-loading-failed": "A fordítási segítségek betöltése sikertelen: $1",
+ "translate-search-more-languages-info": "$1 további nyelv",
+ "translate-statsbar-tooltip": "$1% lefordítva, $2% átnézve",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% lefordítva, $2% átnézve, $3% elavult",
+ "translate-search-more-groups-info": "$1 további csoport",
+ "translate-syntax-error": "a fordítás szintaxisa hibás",
+ "tux-session-expired": "Már nem vagy bejelentkezve. Jelentkezz be egy másik fülön, vagy másold ki a mentetlen fordításaidat, jelentkezz be, gyere vissza erre a lapra és másold vissza a fordításaidat.",
+ "tux-nojs": "Ez az eszköz nem működik JavaScript nélkül. A JavaScript le van tiltva, nem működik, vagy ez a böngésző nem támogatott.",
+ "specialpages-group-translation": "Fordítás"
+}
diff --git a/Translate/i18n/core/hy.json b/Translate/i18n/core/hy.json
new file mode 100644
index 00000000..dbc4ce75
--- /dev/null
+++ b/Translate/i18n/core/hy.json
@@ -0,0 +1,82 @@
+{
+ "@metadata": {
+ "authors": [
+ "23artashes",
+ "Beko",
+ "Chaojoker",
+ "Kareyac",
+ "Vadgt",
+ "Դավիթ Սարոյան",
+ "Սերգեյ Սաֆարյան"
+ ]
+ },
+ "translate": "Թարգմանություն",
+ "translate-taction-translate": "Թարգմանություն",
+ "translate-taction-proofread": "Սրբագրել",
+ "translate-taction-lstats": "Լեզվի վիճակագրություն",
+ "translate-taction-mstats": "Հաղորդագրությունների խմբի վիճակագրություն",
+ "translate-taction-export": "Արտահանել",
+ "translate-page-settings-legend": "Կարգավորումներ",
+ "translate-page-group": "Խումբ",
+ "translate-page-language": "Լեզու",
+ "translate-page-limit": "Սահմանափակում",
+ "translate-page-navigation-legend": "Նավարկություն",
+ "translate-next": "Հաջորդ էջ",
+ "translate-prev": "Նախորդ էջ",
+ "translate-page-edit": "խմբագրել",
+ "translate-edit-title": "Խմբագրել \"$1\"",
+ "translate-export-form-format": "Ձևաչափ",
+ "translate-rcfilters-translations": "Թարգմանություններ",
+ "translate-rcfilters-translations-only-label": "Թարգմանություններ",
+ "translationstats": "Թարգմանության վիճակագրություն",
+ "translate-stats-edits": "Խմբագրումներ",
+ "translate-stats-users": "Թարգմանիչներ",
+ "translate-statsf-scale-years": "Տարիներ",
+ "translate-statsf-scale-months": "Ամիսներ",
+ "translate-statsf-scale-weeks": "Շաբաթներ",
+ "translate-statsf-scale-days": "Օրեր",
+ "translate-statsf-scale-hours": "Ժամեր",
+ "translate-statsf-count-registrations": "Նոր մասնակիցներ",
+ "translate-statsf-submit": "Նախադիտում",
+ "translate-sidebar-alltrans": "Այլ լեզուներով",
+ "translations": "Բոլոր թարգմանություններ",
+ "translate-translations-fieldset-title": "Հաղորդագրություն",
+ "translate-translations-project": "Նախագիծ",
+ "languagestats": "Լեզվի վիճակագրություն",
+ "translate-language-code": "Լեզվի կոդը",
+ "translate-language": "Լեզու",
+ "translate-total": "Հաղորդագրություններ",
+ "translate-mgs-pagename": "Հաղորդագրությունների խմբի վիճակագրություն",
+ "translate-mgs-column-language": "Լեզու",
+ "supportedlanguages": "Ակտիվ լեզուներ",
+ "translate-smg-rename-select": "Ընտրել",
+ "translate-smg-rename-cancel": "Չեղարկել",
+ "translate-smg-strong-sync-help": "Օգնություն",
+ "translate-smg-group-message-action-history": "Պատմություն",
+ "translate-smg-group-action-resolve": "Նշել որպես լուծված",
+ "translate-smg-group-message-message-other-langs": "Այլ լեզուներ",
+ "translate-smg-loading": "Բեռնվում է…",
+ "translate-manage-import-new": "Նոր Հաղորդագրություն $1",
+ "translate-manage-action-rename": "Վերանվանել",
+ "translate-documentation-language": "Հաղորդագրության փաստաթղթեր",
+ "translate-searchprofile": "Թարգմանություններ",
+ "tux-tab-translated": "Թարգմանված",
+ "tux-edit": "Խմբագրել",
+ "tux-status-translated": "Թարգմանված է",
+ "tux-editor-save-button-label": "Հրատարակել թարգմանությունը",
+ "tux-editor-cancel-button-label": "Չեղարկել",
+ "tux-editor-edit-desc": "Խմբագրել փաստաթղթերը",
+ "tux-editor-suggestions-title": "Առաջարկություններ",
+ "tux-notices-hide": "թաքցնել",
+ "tux-editor-message-desc-less": "Ցուցադրել ավելի սեղմ",
+ "tux-editor-translate-mode": "Ցանկ",
+ "tux-proofread-edit-label": "Խմբագրել",
+ "tux-editor-page-mode": "Էջ",
+ "tux-editor-doc-editor-cancel": "Չեղարկել",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|Հաղորդագրության|Հաղորդագրությունների}} բեռնում...",
+ "tux-message-filter-placeholder": "Զտել ցուցակը",
+ "tux-empty-list-translated-action": "Թարգմանել",
+ "tux-editor-close-tooltip": "Փակել",
+ "specialpages-group-translation": "Թարգմանություն",
+ "log-action-filter-translationreview": "Գործողության տեսակը."
+}
diff --git a/Translate/i18n/core/hyw.json b/Translate/i18n/core/hyw.json
new file mode 100644
index 00000000..2a748451
--- /dev/null
+++ b/Translate/i18n/core/hyw.json
@@ -0,0 +1,34 @@
+{
+ "@metadata": {
+ "authors": [
+ "ArmenBakkalian",
+ "Azniv Stepanian",
+ "Kareyac",
+ "Շահէն"
+ ]
+ },
+ "translate": "Թարգմանութիւն",
+ "translate-extensionname": "Թարգմանութիւն",
+ "translate-taction-translate": "Թարգմանութիւն",
+ "translate-page-settings-legend": "Կարգաւորումներ",
+ "translate-page-language": "Լեզու",
+ "translate-page-limit": "Սահման",
+ "translate-page-navigation-legend": "Նաւարկութիւն",
+ "translate-page-paging-links": "[$1][$2]",
+ "translate-next": "Յաջորդ էջը",
+ "translate-prev": "Նախորդ էջը",
+ "translate-page-edit": "Խմբագրել",
+ "translate-export-form-format": "Ձեւաւորել",
+ "translate-rcfilters-translations": "Թարգմանութիւններ",
+ "translate-stats-edits": "Խմբագրումներ",
+ "translate-stats-users": "Թարգմանիչներ",
+ "translate-statsf-scale-months": "Ամիսներ",
+ "translate-statsf-scale-weeks": "Շաբաթներ",
+ "translate-statsf-scale-days": "Օրեր",
+ "translate-statsf-scale-hours": "Ժամեր",
+ "translate-statsf-submit": "Կանխաստուգել",
+ "translate-smg-rename-cancel": "Չեղարկել",
+ "translate-smg-strong-sync-help": "Օգնութիւն",
+ "translate-documentation-language": "Հաղորդագրութեան փաստագրութիւն",
+ "tux-editor-translate-mode": "Ցանկ"
+}
diff --git a/Translate/i18n/core/ia.json b/Translate/i18n/core/ia.json
new file mode 100644
index 00000000..7e0e4c45
--- /dev/null
+++ b/Translate/i18n/core/ia.json
@@ -0,0 +1,423 @@
+{
+ "@metadata": {
+ "authors": [
+ "McDutchie"
+ ]
+ },
+ "translate": "Traducer",
+ "translate-desc": "[[Special:Translate|Pagina special]] pro traducer MediaWiki e ultra",
+ "translate-fuzzybot-desc": "Isto es un conto special de systema usate per le [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate extension Translate] de MediaWiki que es usate pro mantener traductiones.\nIste conto face parte del software MediaWiki e non pertine a un usator.",
+ "translate-taskui-export-to-file": "Exportar in formato native",
+ "translate-taskui-export-as-po": "Exportar pro traduction foras de linea",
+ "translate-taction-translate": "Traducer",
+ "translate-taction-proofread": "Revider",
+ "translate-taction-lstats": "Statisticas per lingua",
+ "translate-taction-mstats": "Statisticas per gruppo de messages",
+ "translate-taction-export": "Exportar",
+ "translate-taction-disabled": "Iste action es disactivate in iste wiki.",
+ "translate-page-no-such-language": "Le lingua specificate es invalide.",
+ "translate-page-no-such-group": "Le gruppo specificate es invalide.",
+ "translate-page-disabled": "Le traductiones in iste lingua in iste gruppo ha essite disactivate. Motivo:\n\n<em>$1</em>",
+ "translate-language-disabled": "Le traduction in iste lingua es disactivate.",
+ "translate-page-settings-legend": "Optiones",
+ "translate-page-group": "Gruppo",
+ "translate-page-language": "Lingua",
+ "translate-page-limit": "Limite",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|message|messages}} per pagina",
+ "translate-submit": "Obtener",
+ "translate-page-navigation-legend": "Navigation",
+ "translate-page-showing": "Presentation del messages $1 a $2 ex $3.",
+ "translate-page-showing-all": "Presentation de $1 {{PLURAL:$1|message|messages}}.",
+ "translate-page-showing-none": "Nulle message a presentar.",
+ "translate-next": "Pagina sequente",
+ "translate-prev": "Pagina precedente",
+ "translate-page-description-legend": "Information sur le gruppo",
+ "translate-page-description-hasoptional": "Iste gruppo de messages contine messages optional.\nLe messages optional debe solmente esser traducite si le lingua ha special exigentias,\ncomo non usar spatios o le translitteration de nomines proprie. $1",
+ "translate-page-description-hasoptional-open": "Monstrar messages optional.",
+ "translate-page-edit": "modificar",
+ "translate-optional": "(optional)",
+ "translate-ignored": "(ignorate)",
+ "translate-edit-title": "Modificar \"$1\"",
+ "translate-edit-definition": "Definition del message",
+ "translate-edit-contribute": "contribuer",
+ "translate-edit-no-information": "<em>Iste message non ha documentation.\nSi tu sape ubi o como iste message es usate, tu pote adjutar le altere traductores per adder documentation a iste message.</em>",
+ "translate-edit-information": "Information sur le message ($1)",
+ "translate-edit-warnings": "Advertimentos super traductiones incomplete",
+ "translate-edit-tmmatch-source": "Texto fonte pro traduction: $1",
+ "translate-edit-tmmatch": "$1% de correspondentia",
+ "translate-edit-nopermission": "Tu debe obtener derectos de traduction pro poter traducer messages.",
+ "translate-edit-askpermission": "Obtener autorisation",
+ "exporttranslations": "Exportar traductiones",
+ "translate-export-form-format": "Formato",
+ "translate-export-invalid-format": "Specifica un formato valide.",
+ "translate-export-not-supported": "Le exportation de traductiones non es supportate.",
+ "translate-export-format-notsupported": "Le formato de exportation specificate non es supportate per le gruppo de messages.",
+ "translate-export-group-too-large": "Le gruppo de messages seligite es troppo grande. Selige un gruppo de messages que ha minus de $1 message{{PLURAL:$1||s}} o contacta le administrator de traduction pro obtener consilio.",
+ "translate-checks-parameters": "Le sequente {{PLURAL:$2|parametro|parametros}} non es usate:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "Le sequente {{PLURAL:$2|parametro|parametros}} es incognite:\n<strong>$1</strong>",
+ "translate-checks-balance": "Il ha un numero impar de {{PLURAL:$2|parentheses|parentheses}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "Le sequente {{PLURAL:$2|ligamine|ligamines}} es problematic:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "Le sequente {{PLURAL:$2|ligamine|$2 ligamines}} es mancante:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Le definition usa <nowiki>{{PLURAL:}}</nowiki> sed non le traduction.",
+ "translate-checks-plural-forms": "Pro <nowiki>{{PLURAL:}}</nowiki> es specificate {{PLURAL:$1|un forma|$1 formas}} ma solmente {{PLURAL:$2|un forma|$2 formas}} es supportate (excludente le formas 0= e 1=).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> ha formas duplicate al fin. Per exemplo, <nowiki>{{PLURAL:$1|cosalia|cosalia}}</nowiki> debe esser scribite como <nowiki>{{PLURAL:$1|cosalia}}</nowiki>.",
+ "translate-checks-gettext-plural-missing": "Iste traduction debe continer <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-unsupported": "Iste message non supporta <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-count": "<nowiki>{{PLURAL:GETTEXT|}}</nowiki> accepta exactemente $1 forma{{PLURAL:$1||s}} plural. In iste momento, $2 forma{{PLURAL:$2||s}} plural es fornite.",
+ "translate-checks-smartformat-plural-missing": "Iste traduction debe haber plural sur le variabile $1.",
+ "translate-checks-smartformat-plural-unsupported": "Iste message non supporta plural sur le variabile $1.",
+ "translate-checks-smartformat-plural-count": "Numero incorrecte de formas plural in <strong>$3</strong>. Illo debe haber $1 forma{{PLURAL:$1||s}} plural. Actualmente es date $2 forma{{PLURAL:$2||s}} plural.",
+ "translate-checks-unicode-plural-missing": "Iste traduction debe continer <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-unsupported": "Iste message non supporta <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-invalid": "Le formas plural debe esser definite como $1. Iste traduction contine $2.",
+ "translate-checks-pagename": "Spatio de nomines cambiate ab le definition",
+ "translate-checks-format": "Iste traduction non seque le definition o ha un syntaxe invalide: $1",
+ "translate-checks-escape": "Le sequente {{PLURAL:$2|character|characteres}} de escappamento pote esser accidental: <strong>$1</strong>. {{PLURAL:$4|Un character de escappamento valide es|Le characteres de escappamento valide include:}} $3.",
+ "translate-checks-parametersnotequal": "Le numero de parametros es {{PLURAL:$1|$1}}; debe esser {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> es mal formate.",
+ "translate-checks-fudforum-syntax": "Usar <nowiki>$1</nowiki> in loco de <nowiki>$2</nowiki> in iste projecto.",
+ "translate-checks-newline-missing-start": "Manca $1 character{{PLURAL:$1||es}} de salto de linea al initio del traduction.",
+ "translate-checks-newline-missing-end": "Manca $1 character{{PLURAL:$1||es}} de salto de linea al fin del traduction.",
+ "translate-checks-newline-extra-start": "Se trova $1 character{{PLURAL:$1||es}} de salto de linea in excesso al initio del traduction.",
+ "translate-checks-newline-extra-end": "Se trova $1 character{{PLURAL:$1||es}} de salto de linea in excesso al fin del traduction.",
+ "translate-checks-value-not-present": "Le traduction debe esser equal a {{PLURAL:$1|1=|un del sequente valores:}} $1.",
+ "translate-checks-replacement": "Usa $2 in loco de $1.",
+ "translate-checks-empty": "Un traduction sin contento o con solo spatios non es permittite.",
+ "translate-pref-editassistlang": "Linguas assistente:",
+ "prefs-translate": "Optiones de traduction",
+ "translate-pref-editassistlang-help": "Lista de codices de linguas separate per commas.\nLe traductiones de un message in iste linguas es monstrate quando tu traduce.\nLe lista predefinite de linguas depende de tu lingua.",
+ "translate-pref-editassistlang-bad": "Codice de lingua invalide in le lista:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Modificar con le interfacie de traduction",
+ "action-translate": "modificar con le interfacie de traduction",
+ "right-translate-manage": "Gerer gruppos de messages",
+ "action-translate-manage": "gerer gruppos de messages",
+ "right-translate-import": "Importar traductiones foras de linea",
+ "action-translate-import": "importar traductiones foras de linea",
+ "right-translate-messagereview": "Revider traductiones",
+ "action-translate-messagereview": "revider traductiones",
+ "right-translate-groupreview": "Cambiar le stato del fluxo de travalio del gruppos de messages",
+ "action-translate-groupreview": "cambiar le stato del fluxo de travalio del gruppos de messages",
+ "translate-rcfilters-translations": "Traductiones",
+ "translate-rcfilters-translations-only-label": "Traductiones",
+ "translate-rcfilters-translations-only-desc": "Modificationes in paginas traducite.",
+ "translate-rcfilters-translations-filter-label": "Non traductiones",
+ "translate-rcfilters-translations-filter-desc": "Tote le modificationes que non es traductiones.",
+ "translate-rcfilters-translations-site-label": "Messages del sito",
+ "translate-rcfilters-translations-site-desc": "Personalisation de messages de sito in le spatio de nomines MediaWiki.",
+ "translate-rc-translation-filter": "Filtrar traductiones:",
+ "translate-rc-translation-filter-no": "Facer nihil",
+ "translate-rc-translation-filter-only": "Monstrar solmente traductiones",
+ "translate-rc-translation-filter-filter": "Non monstrar traductiones",
+ "translate-rc-translation-filter-site": "Solmente modificationes in messages del sito",
+ "translationstats": "Statisticas de traduction",
+ "translate-stats-edits": "Modificationes",
+ "translate-stats-users": "Traductores",
+ "translate-stats-registrations": "Registrationes",
+ "translate-stats-reviews": "Revisiones",
+ "translate-stats-reviewers": "Revisores",
+ "translate-statsf-intro": "Tu pote generar statisticas simple con iste formulario. Tote le valores ha limites maxime e minime.",
+ "translate-statsf-options": "Optiones de graphico",
+ "translate-statsf-width": "Latitude in pixeles:",
+ "translate-statsf-height": "Altitude in pixeles:",
+ "translate-statsf-days": "Periodo in dies:",
+ "translate-statsf-start": "Data de initio:",
+ "translate-statsf-scale": "Granularitate:",
+ "translate-statsf-scale-years": "Annos",
+ "translate-statsf-scale-months": "Menses",
+ "translate-statsf-scale-weeks": "Septimanas",
+ "translate-statsf-scale-days": "Dies",
+ "translate-statsf-scale-hours": "Horas",
+ "translate-statsf-count": "Mesura:",
+ "translate-statsf-count-edits": "Numero de modificationes",
+ "translate-statsf-count-users": "Traductores active",
+ "translate-statsf-count-registrations": "Nove usatores",
+ "translate-statsf-count-reviews": "Revisiones de traductiones",
+ "translate-statsf-count-reviewers": "Revisores",
+ "translate-statsf-language": "Lista de codices de lingua separate per commas:",
+ "translate-statsf-group": "Lista de codices de gruppo separate per commas:",
+ "translate-statsf-submit": "Previsualisar",
+ "translate-statsf-unknown-error": "Un error incognite ha occurrite.",
+ "translate-statsf-error-message": "Il occurreva un error durante le cargamento del graphico: $1",
+ "translate-statsf-graph-alt-text-info": "Le texto alternative pro le statisticas de traduction es in le tabella de datos hic infra.",
+ "translate-statsf-alt-text": "Iste es le texto alternative pro le statisticas de traduction.",
+ "translate-statsf-embed": "Codice pro incastrar le graphico de statisticas de traduction in altere paginas.",
+ "translate-tag-page-desc": "Traduction del pagina wiki [[$2|$1]] ab $3 ($4).",
+ "translate-sidebar-alltrans": "In altere linguas",
+ "translations": "Tote le traductiones",
+ "translations-summary": "Entra le nomine de un message infra pro monstrar tote le traductiones disponibile.",
+ "translate-translations-no-message": "\"$1\" non es un message traducibile",
+ "translate-translations-none": "Non existe alcun traduction pro \"$1\"",
+ "translate-translations-count": "{{PLURAL:$1|Un traduction|$1 traductiones}} trovate.",
+ "translate-translations-fieldset-title": "Message",
+ "translate-translations-messagename": "Nomine:",
+ "translate-translations-project": "Projecto:",
+ "translate-translations-including-no-param": "Per favor specifica un clave de message valide in le parametro subpagina",
+ "translate-translations-history-short": "h",
+ "languagestats": "Statisticas per lingua",
+ "languagestats-summary": "Iste pagina monstra le statisticas de traduction pro tote le gruppos de messages pro un lingua.",
+ "messagegroupstats-summary": "Iste pagina monstra statisticas pro le gruppos de messages.",
+ "languagestats-stats-for": "Statisticas de traduction pro $1 ($2).",
+ "languagestats-recenttranslations": "traductiones recente",
+ "translate-langstats-incomplete": "Alcunes del statisticas in iste pagina es incomplete. Per favor recarga pro obtener plus statisticas.",
+ "translate-langstats-expand": "displicar",
+ "translate-langstats-collapse": "plicar",
+ "translate-langstats-expandall": "displicar totes",
+ "translate-langstats-collapseall": "plicar totes",
+ "translate-language-code": "Codice de lingua",
+ "translate-language-code-field-name": "Codice de lingua:",
+ "translate-suppress-complete": "Celar le gruppos de messages completemente traducite",
+ "translate-ls-noempty": "Celar le gruppos de messages completemente sin traduction",
+ "translate-language": "Lingua",
+ "translate-total": "Messages",
+ "translate-untranslated": "Non traducite",
+ "translate-percentage-complete": "Completion",
+ "translate-percentage-fuzzy": "Obsolete",
+ "translate-percentage-proofread": "Revidite",
+ "translate-languagestats-overall": "Tote le gruppos de messages insimul",
+ "translate-ls-submit": "Monstrar statisticas",
+ "translate-ls-column-group": "Gruppo de messages",
+ "translate-mgs-pagename": "Statisticas de gruppo de messages",
+ "translate-mgs-fieldset": "Preferentias de presentation",
+ "translate-mgs-group": "Gruppo de messages:",
+ "translate-mgs-nocomplete": "Non monstrar linguas con traduction complete",
+ "translate-mgs-noempty": "Non monstrar linguas sin traductiones",
+ "translate-mgs-submit": "Monstrar statisticas",
+ "translate-mgs-column-language": "Lingua",
+ "translate-mgs-totals": "$1 {{PLURAL:$1|lingua|linguas}} in total",
+ "translate-mgs-invalid-group": "Le gruppo specificate, \"$1\", non existe.",
+ "translate-mgs-nothing": "Nihil a monstrar pro le statisticas requestate.",
+ "translate-tes-server-error": "Error obtenente suggestiones de recerca",
+ "translate-tes-group-not-found": "Nulle resultato correspondente",
+ "translate-tes-type-to-search": "Digita pro comenciar a cercar",
+ "supportedlanguages": "Linguas active",
+ "supportedlanguages-summary": "Iste pagina presenta un lista de linguas active in {{SITENAME}}, con le nomines del traductores laborante a iste lingua.\nLe nomine de un traductor appare tanto plus grande, quanto plus modificationes le traductor ha contribuite.\nLe color de un tracto de sublineamento indica quante tempore ha passate post le ultime activitate de un traductor.",
+ "supportedlanguages-colorlegend": "Legenda pro le colores: Ultime traduction $1 dies retro.",
+ "supportedlanguages-sqlite-error": "SQLite non es supportate",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Traductor|Traductrice}}|Traductores}}: $1",
+ "supportedlanguages-recenttranslations": "traductiones recente",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|lingua|linguas}} in total.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|modification|modificationes}} - ultime modification $3 {{PLURAL:$3|die|dies}} retro",
+ "translate-supportedlanguages-cached": "Iste information ha essite mittite in cache $1 retro.",
+ "translate-activelanguages-invalid-code": "Le codice de lingua \"$1\" es incognite o non activate pro traduction.",
+ "abusefilter-edit-builder-vars-translate-source-text": "Texto original del unitate de traduction",
+ "abusefilter-edit-builder-vars-translate-target-language": "Lingua de destination pro le traduction",
+ "translate-jssti-add": "Adder al lista",
+ "managemessagegroups": "Gestion de gruppos de messages",
+ "translate-smg-notallowed": "Tu non ha le permission de exequer iste action.",
+ "translate-smg-nochanges": "Il non ha cambiamentos a processar.",
+ "translate-smg-submit": "Submitter cambiamentos pro processamento",
+ "translate-smg-submitted": "Le definitiones de messages ha essite actualisate. Le cambiamentos es processate in secunde plano.",
+ "translate-smg-submitted-with-failure": "Le actualisation del definition{{PLURAL:$1||es}} de message ha fallite pro le sequente gruppo{{PLURAL:$1||s}}: $2. $3",
+ "translate-smg-submitted-others-processing": "Le definitiones de message pro altere gruppos se processa in secunde plano.",
+ "translate-smg-more": "Il haberea altere cambiamentos a processar post submitter iste cambiamentos.",
+ "translate-smg-left": "Contento del message in le wiki",
+ "translate-smg-right": "Cambiamentos entrante",
+ "translate-smg-rename-select": "Seliger",
+ "translate-smg-rename-cancel": "Cancellar",
+ "translate-smg-rename-search": "Cerca message correspondente…",
+ "translate-smg-rename-select-err": "Per favor selige un message a renominar",
+ "translate-smg-rename-no-msg": "Nulle message trovate.",
+ "translate-smg-rename-new": "Adder como nove…",
+ "translate-smg-rename-rename": "Adder como renomination de…",
+ "translate-smg-rename-dialog-title": "Selige renomination correspondente pro $1",
+ "translate-smg-changeset-modified": "Un altere usator o processo ha modificate le gruppo de modificationes. Tu cambiamentos non pote esser publicate perque illos pote supplantar le sues. Per favor recarga le pagina pro vider le ultime cambiamentos.",
+ "translate-smg-no-groups-in-sync": "Il non ha gruppos actualmente in synchronisation",
+ "translate-smg-strong-sync-help": "Adjuta",
+ "translate-smg-groups-in-sync": "Gruppos actualmente in synchronsiation",
+ "translate-smg-groups-in-sync-list": "Lista de gruppos actualmente processate in secunde plano:",
+ "translate-smg-groups-with-error-title": "Gruppos que habeva errores durante le synchronisation",
+ "translate-smg-groups-with-error-desc": "Lista de gruppos e lor messages que habeva errores durante le synchronisation:",
+ "translate-smg-group-with-error-summary": "$1 message{{PLURAL:$1||s}} con errores:",
+ "translate-smg-group-message-action-history": "Historia",
+ "translate-smg-group-action-resolve": "Marcar como resolvite",
+ "translate-smg-group-sync-error-warn": "Iste gruppo habeva un error durante le synchronisation. Per favor corrige le errores ante de processar iste gruppo.",
+ "translate-smg-group-message-tag-outdated": "Obsolete",
+ "translate-smg-group-message-tag-rename": "Renominar",
+ "translate-smg-group-message-tag-label": "Etiquetta{{PLURAL:$1||s}}:",
+ "translate-smg-group-message-message-content": "Contento:",
+ "translate-smg-group-message-message-target": "Objectivo:",
+ "translate-smg-group-message-message-replacement": "Reimplaciamento:",
+ "translate-smg-group-message-message-other-langs": "Altere linguas:",
+ "translate-smg-loading": "Cargamento…",
+ "translate-smg-unknown-error": "Un error incognite occurreva durante le processamento de tu requesta.",
+ "translate-manage-import-diff": "Message $1 | Actiones: $2",
+ "translate-manage-import-new": "Nove message $1",
+ "translate-manage-import-deleted": "Message $1 delite",
+ "translate-manage-action-import": "Importar",
+ "translate-manage-action-conflict": "Importar e marcar como \"fuzzy\"",
+ "translate-manage-action-ignore": "Ignorar",
+ "translate-manage-action-fuzzy": "Importar e marcar traductiones como \"fuzzy\"",
+ "translate-manage-action-rename-fuzzy": "Renominar e marcar le traductiones como \"fuzzy\"",
+ "translate-manage-action-rename": "Renominar",
+ "translate-manage-action-ignore-change": "Ignorar cambio de traduction",
+ "translate-manage-nochanges": "Il non ha modificationes in le definitiones del messages pro iste gruppo.",
+ "translate-manage-nochanges-other": "Il non habeva modificationes pro iste lingua.\nUsa le ligamine infra pro retornar al vista detaliate del gruppo.",
+ "translate-manage-inconsistent": "Detegeva inconsistentia in le requesta.\nVerifica per favor si il ha modificationes e reproba.\nDetalios: $1.",
+ "translate-manage-toolong": "Le durata maximal de processamento de $1 {{PLURAL:$1|secunda|secundas}} ha essite excedite.\nResubmitte per favor le formulario pro continuar le processamento.",
+ "translate-manage-import-summary": "Un nove version es importate ex un fonte externe",
+ "translate-manage-import-ignore": "Le message $1 es omittite.",
+ "translate-manage-import-rename-summary": "Renominate in fonte externe",
+ "translate-manage-conflict-summary": "Un nove version es importate ex un fonte externe.\nPer favor verifica.",
+ "translate-manage-submit": "Executar",
+ "translate-manage-intro-other": "Ci infra es un lista de modificationes de traductiones in lingua $1.\nPer favor, revide le modificationes e selige un action a prender pro cata actualisation.\nSi tu opta pro ignorar le modificationes, iste action es solmente temporari.",
+ "translate-manage-import-ok": "Importate: $1",
+ "translate-manage-import-done": "Importation complete!",
+ "translate-manage-empty-content": "Contento es vacue",
+ "translate-manage-key-reused": "Iste message ja existe in le wiki. Verifica que il non ha un re-uso accidental de un clave ancian.",
+ "translate-manage-source-message-not-found": "Definition del message non trovate",
+ "importtranslations": "Importar traductiones",
+ "translate-import-from-local": "Incargar un file local:",
+ "translate-import-load": "Cargar file",
+ "translate-import-err-dl-failed": "Impossibile obtener le file:\n$1",
+ "translate-import-err-ul-failed": "Le incargamento del file ha fallite",
+ "translate-import-err-invalid-title": "Le nomine de file <nowiki>$1</nowiki> es invalide.",
+ "translate-import-err-no-such-file": "Le file <nowiki>$1</nowiki> non existe o non ha essite incargate localmente.",
+ "translate-import-err-stale-group": "Le gruppo de messages al qual iste file pertine non existe.",
+ "translate-import-err-no-headers": "Le file non es un file Gettext ben formate in le formato del extension Translate:\nNon pote determinar le gruppo e lingua ex le capites del file.",
+ "translate-js-support-unsaved-warning": "Tu ha traductiones non publicate.",
+ "translate-gs-pos": "Pos.",
+ "translate-gs-code": "Codice",
+ "translate-gs-continent": "Continente",
+ "translate-gs-speakers": "Parlantes",
+ "translate-gs-score": "Score",
+ "translate-gs-multiple": "Multiple",
+ "translate-gs-count": "Conto",
+ "translate-gs-total": "Total",
+ "translate-gs-avgscore": "Score medie",
+ "translate-documentation-language": "documentation de messages",
+ "translate-searchprofile": "Traductiones",
+ "translate-searchprofile-tooltip": "Cercar in tote le traductiones",
+ "translate-searchprofile-note": "Plus optiones de recerca es disponibile con le [$1 recerca de traductiones].",
+ "translate-search-languagefilter": "Filtrar per lingua:",
+ "translate-search-nofilter": "Non filtrar",
+ "log-name-translationreview": "Registro de revision de traductiones",
+ "log-description-translationreview": "Registro de tote le revisiones de traductiones e gruppos de messages.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|revideva}} le traduction $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|cambiava}} le stato de $4 traductiones de $3 de $6 a $7",
+ "group-translate-sandboxed": "Traductores non approbate",
+ "group-translate-sandboxed-member": "{{GENDER:$1|traductor non approbate}}",
+ "right-translate-sandboxmanage": "Gerer usatores in cassa de sablo",
+ "action-translate-sandboxmanage": "gerer usatores in cassa de sablo",
+ "right-translate-sandboxaction": "Exequer actiones autorisate pro usatores in cassa de sablo",
+ "action-translate-sandboxaction": "exequer actiones autorisate pro usatores in cassa de sablo",
+ "translate-workflow-state-": "(non definite)",
+ "translate-workflowstatus": "Stato: $1",
+ "translate-workflow-set-doing": "Activation...",
+ "translate-workflow-autocreated-summary": "Creation automatic de pagina pro le stato de fluxo de labor $1",
+ "translate-stats-workflow": "Stato",
+ "translate-workflowgroup-label": "Statos de fluxo de labor",
+ "translate-workflowgroup-desc": "Iste gruppo de messages monstra le statos de fluxo de labor de traduction.\nLe statos es definite in le variabile de configuration $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Traductiones recente",
+ "translate-dynagroup-recent-desc": "Iste gruppo de messages monstra tote le traductiones recente in iste lingua.\nEs utile principalmente pro le revision de traductiones.",
+ "translate-dynagroup-additions-label": "Additiones recente",
+ "translate-dynagroup-additions-desc": "Iste gruppo de messages monstra le messages nove e cambiate.",
+ "translate-msggroupselector-projects": "Gruppo de messages",
+ "translate-msggroupselector-search-placeholder": "Cercar gruppos",
+ "translate-msggroupselector-search-all": "Totes",
+ "translate-msggroupselector-search-recent": "Recentes",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|subgruppo|subgruppos}}",
+ "tux-languageselector": "Traducer in",
+ "tux-select-target-language": "Lingua de destination pro le traduction",
+ "tux-tab-all": "Toto",
+ "tux-tab-untranslated": "Non traducite",
+ "tux-tab-outdated": "Obsolete",
+ "tux-tab-translated": "Traducite",
+ "tux-tab-unproofread": "Non revidite",
+ "tux-edit": "Modificar",
+ "tux-status-optional": "Optional",
+ "tux-status-fuzzy": "Obsolete",
+ "tux-status-proofread": "Revidite",
+ "tux-status-translated": "Traducite",
+ "tux-status-saving": "Publica...",
+ "tux-status-unsaved": "Non publicate",
+ "tux-save-unknown-error": "Un error incognite ha occurrite.",
+ "tux-editor-placeholder-documentation": "Adder documentation del message",
+ "tux-editor-placeholder-language": "Tu traduction in $1",
+ "tux-editor-editsummary-placeholder": "Explica tu modificationes (facultative)",
+ "tux-editor-paste-original-button-label": "Collar texto original",
+ "tux-editor-discard-changes-button-label": "Abandonar modificationes",
+ "tux-editor-save-button-label": "Publicar traduction",
+ "tux-editor-skip-button-label": "Saltar al sequente",
+ "tux-editor-cancel-button-label": "Cancellar",
+ "tux-editor-confirm-button-label": "Confirmar traduction",
+ "tux-editor-proofread-button-label": "Marcar como revidite",
+ "tux-editor-shortcut-info": "Preme \"$1\" pro confirmar e passar al sequente message, \"$2\" pro saltar, \"$4\" pro fornir un summario o tene premite \"$3\" pro vider altere claves accelerator.",
+ "tux-editor-edit-desc": "Modificar documentation",
+ "tux-editor-add-desc": "Adder documentation",
+ "tux-editor-suggestions-title": "Suggestiones",
+ "tux-editor-in-other-languages": "In altere linguas",
+ "tux-editor-need-more-help": "Require adjuta?",
+ "tux-editor-ask-help": "Demandar plus information",
+ "tux-editor-tm-match": "$1% corresponde",
+ "tux-notices-more": "$1 {{PLURAL:$1|altere|alteres}}",
+ "tux-notices-hide": "celar",
+ "tux-editor-save-failed": "Error durante le publication del traduction: $1",
+ "tux-editor-n-uses": "usate $1 {{PLURAL:$1|vice|vices}}",
+ "tux-editor-message-desc-more": "Vider plus",
+ "tux-editor-message-desc-less": "Vider minus",
+ "tux-editor-clear-translated": "Celar messages traducite",
+ "tux-editor-proofreading-mode": "Revider",
+ "tux-editor-translate-mode": "Lista",
+ "tux-editor-proofreading-hide-own-translations": "Celar traductiones tue",
+ "tux-editor-proofreading-show-own-translations": "Monstrar traductiones tue",
+ "tux-proofread-action-tooltip": "Marcar como revidite",
+ "tux-proofread-edit-label": "Modificar",
+ "tux-editor-page-mode": "Pagina",
+ "tux-editor-outdated-notice": "Iste traduction debe possibilemente esser actualisate.",
+ "tux-editor-outdated-notice-diff-link": "Monstrar differentias",
+ "tux-editor-doc-editor-placeholder": "Documentation del message",
+ "tux-editor-doc-editor-save": "Publicar documentation",
+ "tux-editor-doc-editor-cancel": "Cancellar",
+ "tux-messagetable-more-messages": "$1 altere {{PLURAL:$1|message|messages}}",
+ "tux-messagetable-loading-messages": "Carga $1 {{PLURAL:$1|message|messages}}...",
+ "tux-message-filter-placeholder": "Filtrar le lista",
+ "tux-message-filter-result": "$1 {{PLURAL:$1|resultato|resultatos}} trovate pro \"$2\"",
+ "tux-message-filter-advanced-button": "Recerca avantiate",
+ "tux-message-filter-optional-messages-label": "Messages optional",
+ "tux-proofread-translated-by-self": "Traducite per te",
+ "tux-empty-list-all": "Iste gruppo de messages es vacue",
+ "tux-empty-list-all-guide": "Selige un altere gruppo de messages a traducer",
+ "tux-translate-page-no-such-group": "<strong>Le gruppo indicate non existe.</strong> Selige un altere gruppo de messages.",
+ "tux-empty-list-translated": "Nulle message traducite",
+ "tux-empty-list-translated-guide": "Tu pote adjutar a traducer",
+ "tux-empty-list-translated-action": "Traducer",
+ "tux-empty-no-messages-to-display": "Nulle message a monstrar.",
+ "tux-empty-there-are-optional": "Il ha messages optional non monstrate in le lista",
+ "tux-empty-show-optional-messages": "Monstrar messages optional",
+ "tux-empty-no-outdated-messages": "Nulle message obsolete",
+ "tux-empty-nothing-to-proofread": "Nihil a revider",
+ "tux-empty-you-can-help-providing": "Tu pote adjutar a fornir nove traductiones",
+ "tux-empty-nothing-new-to-proofread": "Nihil de nove a revider",
+ "tux-empty-you-can-review-already-proofread": "Tu pote revider traductiones jam revidite per alteres.",
+ "tux-empty-list-other": "Nihil a traducer",
+ "tux-empty-list-other-guide": "Tu pote adjutar a revider traductiones existente",
+ "tux-empty-list-other-action": "Revider traductiones",
+ "tux-empty-list-other-link": "Monstrar tote le messages",
+ "tux-editor-close-tooltip": "Clauder",
+ "tux-editor-expand-tooltip": "Displicar",
+ "tux-editor-collapse-tooltip": "Plicar",
+ "tux-editor-message-tools-show-editor": "Monstrar in editor wiki",
+ "tux-editor-message-tools-history": "Historia",
+ "tux-editor-message-tools-delete": "Deler",
+ "tux-editor-message-tools-translations": "Tote le traductiones",
+ "tux-editor-message-tools-linktothis": "Ligamine verso iste message",
+ "tux-editor-loading": "Cargamento…",
+ "tux-editor-loading-failed": "Non poteva cargar le adjutas de traduction: $1",
+ "translate-search-more-languages-info": "$1 altere {{PLURAL:$1|lingua|linguas}}",
+ "translate-statsbar-tooltip": "$1% traducite, $2% revidite",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% traducite, $2% revidite, $3% obsolete",
+ "translate-search-more-groups-info": "$1 altere {{PLURAL:$1|gruppo|gruppos}}",
+ "translate-syntax-error": "Le traduction contine errores de syntaxe",
+ "tux-session-expired": "Le session ha essite claudite. Per favor, re-aperi session in un fenestra o scheda separate del navigator. Alternativemente, face un copia del traductiones non salveguardate, aperi session, retorna a iste pagina e re-insere le traductiones.",
+ "tux-nojs": "Iste instrumento non functiona sin JavaScript. Pote esser que JavaScript es disactivate o non functiona, o que iste navigator non es supportate.",
+ "specialpages-group-translation": "Traduction",
+ "content-model-translate-messagebundle": "Pacchetto de messages a traducer",
+ "translate-messagebundle-validation-error": "Pacchetto de messages non valide: $1",
+ "translate-messagebundle-error-invalid-array": "Le pacchetto de messages debe esser un objecto JSON. Recipeva typo $1",
+ "translate-messagebundle-error-key-empty": "Le pacchetto de messages non debe continer un clave vacue",
+ "translate-messagebundle-error-key-too-long": "Le clave \"$1\" es troppo longe",
+ "translate-messagebundle-error-key-invalid-characters": "Le clave \"$1\" contine characteres non permittite",
+ "translate-messagebundle-error-invalid-value": "Le clave \"$1\" non contine un valor de catena",
+ "translate-messagebundle-error-empty-value": "Le clave \"$1\" non ha un valor",
+ "translate-messagebundle-group-description": "Messages de un pacchetto de messages definite sur le pagina [[$2|$1]]."
+}
diff --git a/Translate/i18n/core/id.json b/Translate/i18n/core/id.json
new file mode 100644
index 00000000..4a6a36c3
--- /dev/null
+++ b/Translate/i18n/core/id.json
@@ -0,0 +1,438 @@
+{
+ "@metadata": {
+ "authors": [
+ "Anakmalaysia",
+ "Bennylin",
+ "Chinamoonroll",
+ "Daud I.F. Argana",
+ "Farras",
+ "Ilham151096",
+ "Irwangatot",
+ "IvanLanin",
+ "Iwan Novirion",
+ "Kenrick95",
+ "Meursault2004",
+ "Naval Scene",
+ "NoiX180",
+ "Rex",
+ "Uchup19",
+ "William Surya Permana",
+ "WillsonEP09",
+ "පසිඳු කාවින්ද"
+ ]
+ },
+ "translate": "Terjemahkan",
+ "translate-extensionname": "Terjemahan",
+ "translate-desc": "[[Special:Translate|Halaman istimewa]] untuk menerjemahkan MediaWiki dan lain-lain",
+ "translate-fuzzybot-desc": "Ini adalah akun sistem khusus yang digunakan oleh [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate ekstensi Terjemahan] MediaWiki untuk mengelola terjemahan. Akun ini adalah bagian dari perangkat lunak MediaWiki dan tidak dimiliki oleh pengguna mana pun.",
+ "translate-taskui-export-to-file": "Ekspor dalam format asli",
+ "translate-taskui-export-as-po": "Ekspor untuk terjemahan luring",
+ "translate-taction-translate": "Terjemahkan",
+ "translate-taction-proofread": "Tinjau",
+ "translate-taction-lstats": "Statistik bahasa",
+ "translate-taction-mstats": "Statistik kelompok pesan",
+ "translate-taction-export": "Ekspor",
+ "translate-taction-disabled": "Tindakan ini dinonaktifkan di wiki ini.",
+ "translate-page-no-such-language": "Bahasa yang dipilih tidak sah.",
+ "translate-page-no-such-group": "Kelompok yang dipilih tidak sah.",
+ "translate-page-disabled": "Penerjemahan kelompok pesan ini ke bahasa ini telah dinonaktifkan.\nAlasan:\n\n<em>$1</em>",
+ "translate-language-disabled": "Penerjemahan ke bahasa ini telah dinonaktifkan.",
+ "translate-page-settings-legend": "Pengaturan",
+ "translate-page-group": "Kelompok",
+ "translate-page-language": "Bahasa",
+ "translate-page-limit": "Batasan",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|pesan|pesan}} per halaman",
+ "translate-submit": "Ambil",
+ "translate-page-navigation-legend": "Navigasi",
+ "translate-page-showing": "Menampilkan pesan $1 hingga $2 dari $3.",
+ "translate-page-showing-all": "Menampilkan $1 {{PLURAL:$1|pesan|pesan}}.",
+ "translate-page-showing-none": "Tak ada pesan yang dapat ditampilkan.",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "Halaman selanjutnya",
+ "translate-prev": "Halaman sebelumnya",
+ "translate-page-description-legend": "Informasi mengenai kelompok",
+ "translate-page-description-hasoptional": "Kelompok pesan ini memuat pesan opsional.\nPesan opsional seharusnya hanya boleh diterjemahkan jika bahasa Anda memiliki keperluan khusus\nseperti tidak memakai spasi atau mengalihaksarakan nama umum. $1",
+ "translate-page-description-hasoptional-open": "Tampilkan pesan opsional.",
+ "translate-page-edit": "sunting",
+ "translate-optional": "(opsional)",
+ "translate-ignored": "(diabaikan)",
+ "translate-edit-title": "Sunting \"$1\"",
+ "translate-edit-definition": "Definisi pesan",
+ "translate-edit-contribute": "berkontribusi",
+ "translate-edit-no-information": "<em>Pesan ini tidak memiliki dokumentasi.\nJika Anda mengetahui di mana dan bagaimana pesan ini digunakan, Anda dapat membantu penerjemah lain dengan menambahkan dokumentasi untuk pesan ini.</em>",
+ "translate-edit-information": "Informasi mengenai pesan ($1)",
+ "translate-edit-warnings": "Peringatan mengenai terjemahan yang tak lengkap",
+ "translate-edit-tmmatch-source": "Teks sumber terjemahan: $1",
+ "translate-edit-tmmatch": "$1% sesuai",
+ "translate-edit-nopermission": "Anda memerlukan hak terjemahan untuk menerjemahkan pesan.",
+ "translate-edit-askpermission": "Minta izin",
+ "exporttranslations": "Ekspor terjemahan",
+ "translate-export-form-format": "Format",
+ "translate-export-invalid-format": "Silakan tentukan format yang sah.",
+ "translate-export-not-supported": "Ekspor terjemahan tidak didukung.",
+ "translate-export-format-notsupported": "Format ekspor yang diinginkan tidak didukung oleh kelompok pesan ini.",
+ "translate-export-group-too-large": "Kelompok pesan yang dipilih terlalu besar. Tolong pilih kelompok pesan yang memiliki lebih sedikir dari $1 {{PLURAL:$1|pesan}} atau hubungi admin terjemahan untuk nasihat.",
+ "translate-checks-parameters": "{{PLURAL:$2|Parameter|Parameter}} berikut ini tidak digunakan:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Parameter|Parameter}} berikut ini tidak dikenali:\n<strong>$1</strong>",
+ "translate-checks-balance": "Terdapat {{PLURAL:$2|tanda kurung|tanda kurung}} dengan jumlah yang tidak sama:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Pranala|Pranala}} berikut ini bermasalah:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Pranala|Pranala}} berikut ini hilang:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Definisi menggunakan <nowiki>{{PLURAL:}}</nowiki> namun terjemahannya tidak menggunakannya.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> diberikan {{PLURAL:$1|satu bentukan|$1 bentukan}}, namun {{PLURAL:$2|hanya ada satu bentukan|sebenarnya ada $2 buah bentuk}} yang didukung (selain bentukan 0= dan 1=).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> memiliki bentukan yang sama di akhir. <nowiki>{{PLURAL:$1|sheep|sheep}}</nowiki> seharusnya ditulis menjadi <nowiki>{{PLURAL:$1|sheep}}</nowiki>.",
+ "translate-checks-gettext-plural-missing": "Terjemahan ini harus memiliki <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-unsupported": "Pesan ini tidak mendukung <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-count": "<nowiki>{{PLURAL:GETTEXT|}}</nowiki> menerima tepat $1 {{PLURAL:$1|bentuk jamak}}. Saat ini diberikan $2 {{PLURAL:$2|bentuk jamak}}.",
+ "translate-checks-smartformat-plural-missing": "Terjemahan ini harus memiliki kata jamak di variabel $1.",
+ "translate-checks-smartformat-plural-unsupported": "Pesan ini tidak mendukung kata jamak di variabel $1.",
+ "translate-checks-smartformat-plural-count": "Banyak bentuk jamak yang salah di <strong>$3</strong>. Markah tersebut harus memiliki $1 {{PLURAL:$1|bentuk jamak}}. Saat ini diberikan $2 {{PLURAL:$2|bentuk jamak}}.",
+ "translate-checks-unicode-plural-missing": "Terjemahan ini harus memiliki <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-unsupported": "Pesan ini tidak mendukung <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-invalid": "Bentuk jamak seharusnya didefinisikan sebagai $1. Terjemahan ini mengandung $2.",
+ "translate-checks-pagename": "Ruang nama berubah dari definisinya",
+ "translate-checks-format": "Terjemahan ini tidak mengikuti definisi atau memiliki sintaks yang tidak sah: $1",
+ "translate-checks-escape": "{{PLURAL:$2|Karakter|Karakter-karakter}} ''escape'' berikut mungkin tidak disengaja: <strong>$1</strong>. {{PLURAL:$4|Karakter ''escape'' yang valid adalah|Karakter-karakter ''escape'' yang valid adalah:}} $3.",
+ "translate-checks-parametersnotequal": "Terdapat {{PLURAL:$1|$1}} parameter; seharusnya ada {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "Bentukan <nowiki>$1</nowiki> salah.",
+ "translate-checks-fudforum-syntax": "Gunakan <nowiki>$1</nowiki> bukan <nowiki>$2</nowiki> pada proyek ini.",
+ "translate-checks-newline-missing-start": "{{PLURAL:$1|Terdapat}} $1 {{PLURAL:$1|karakter|karakter-karakter}} garis baru yang hilang di awal terjemahan.",
+ "translate-checks-newline-missing-end": "{{PLURAL:$1|Terdapat}} $1 {{PLURAL:$1|karakter|karakter-karakter}} garis baru yang hilang di akhir terjemahan.",
+ "translate-checks-newline-extra-start": "{{PLURAL:$1|Terdapat}} $1 {{PLURAL:$1|karakter|karakter-karakter}} garis baru yang berlebih di awal terjemahan.",
+ "translate-checks-newline-extra-end": "{{PLURAL:$1|Terdapat}} $1 {{PLURAL:$1|karakter|karakter-karakter}} garis baru yang berlebih di akhir terjemahan.",
+ "translate-checks-value-not-present": "Terjemahannya harus sama dengan {{PLURAL:$1|1=|salah satu dari nilai-nilai berikut:}} $1.",
+ "translate-checks-replacement": "Gunakan $2 bukannya $1.",
+ "translate-checks-empty": "Penerjemahan tanpa konten atau hanya ruang putih tidak dibolehkan.",
+ "translate-pref-editassistlang": "Bahasa penunjang:",
+ "prefs-translate": "Opsi terjemahan",
+ "translate-pref-editassistlang-help": "Daftar kode bahasa dipisahkan koma.\nTerjemahan pesan dalam bahasa ini ditampilkan saat Anda menerjemahkan.\nDaftar bahasa baku tergantung pada bahasa Anda.",
+ "translate-pref-editassistlang-bad": "Kode bahasa tidak sah pada daftar:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Menyunting menggunakan antarmuka penerjemahan",
+ "action-translate": "menyunting menggunakan antarmuka penerjemahan",
+ "right-translate-manage": "Mengelola kelompok pesan",
+ "action-translate-manage": "mengelola kelompok pesan",
+ "right-translate-import": "Mengimpor terjemahan luring",
+ "action-translate-import": "mengimpor terjemahan luring",
+ "right-translate-messagereview": "Meninjau terjemahan",
+ "action-translate-messagereview": "meninjau terjemahan",
+ "right-translate-groupreview": "Mengubah keadaan alur kerja kelompok pesan",
+ "action-translate-groupreview": "mengubah keadaan alur kerja kelompok pesan",
+ "translate-rcfilters-translations": "Terjemahan",
+ "translate-rcfilters-translations-only-label": "Terjemahan",
+ "translate-rcfilters-translations-only-desc": "Perubahan pada halaman terjemahan.",
+ "translate-rcfilters-translations-filter-label": "Bukan terjemahan",
+ "translate-rcfilters-translations-filter-desc": "Semua perubahan yang bukan terjemahan.",
+ "translate-rcfilters-translations-site-label": "Pesan situs",
+ "translate-rcfilters-translations-site-desc": "Penyesuaian pesan situs dalam ruang nama MediaWiki.",
+ "translate-rc-translation-filter": "Saring terjemahan:",
+ "translate-rc-translation-filter-no": "Jangan lakukan apa pun",
+ "translate-rc-translation-filter-only": "Tampilkan hanya terjemahan",
+ "translate-rc-translation-filter-filter": "Jangan sertakan terjemahan",
+ "translate-rc-translation-filter-site": "Hanya perubahan ke pesan situs",
+ "translationstats": "Statistik penerjemahan",
+ "translate-stats-edits": "Suntingan",
+ "translate-stats-users": "Penerjemah",
+ "translate-stats-registrations": "Pendaftaran",
+ "translate-stats-reviews": "Tinjauan",
+ "translate-stats-reviewers": "Peninjau",
+ "translate-statsf-intro": "Anda dapat menciptakan statistik sederhana menggunakan formulir ini. Semua nilai memiliki batas atas dan bawah.",
+ "translate-statsf-options": "Opsi bagan",
+ "translate-statsf-width": "Lebar dalam piksel:",
+ "translate-statsf-height": "Tinggi dalam piksel:",
+ "translate-statsf-days": "Periode waktu dalam hari:",
+ "translate-statsf-start": "Tanggal mulai:",
+ "translate-statsf-scale": "Granularitas:",
+ "translate-statsf-scale-years": "Tahun",
+ "translate-statsf-scale-months": "Bulan",
+ "translate-statsf-scale-weeks": "Pekan",
+ "translate-statsf-scale-days": "Hari",
+ "translate-statsf-scale-hours": "Jam",
+ "translate-statsf-count": "Yang diukur:",
+ "translate-statsf-count-edits": "Jumlah suntingan",
+ "translate-statsf-count-users": "Penerjemah aktif",
+ "translate-statsf-count-registrations": "Pengguna baru",
+ "translate-statsf-count-reviews": "Tinjauan terjemahan",
+ "translate-statsf-count-reviewers": "Peninjau",
+ "translate-statsf-language": "Daftar kode bahasa dipisahkan koma:",
+ "translate-statsf-group": "Daftar kode kelompok dipisahkan koma:",
+ "translate-statsf-submit": "Pratayang",
+ "translate-statsf-unknown-error": "Terjadi galat tidak dikenal.",
+ "translate-statsf-error-message": "Terjadi kesalahan ketika memuat grafik: $1",
+ "translate-statsf-graph-alt-text-info": "Teks alternatif untuk statistik penerjemahan tersedia di tabel data di bawah.",
+ "translate-statsf-alt-text": "Ini adalah teks alternatif untuk statistik penerjemahan.",
+ "translate-statsf-embed": "Kode untuk memasukkan grafik statistik penerjemahan ke halaman lain.",
+ "translate-tag-page-desc": "Terjemahan dari halaman wiki [[$2|$1]] dalam bahasa $3 ($4).",
+ "translate-sidebar-alltrans": "Dalam bahasa lain",
+ "translations": "Semua terjemahan",
+ "translations-summary": "Masukkan sebuah nama pesan di bawah ini untuk menampilkan semua terjemahan yang tersedia.",
+ "translate-translations-no-message": "\"$1\" bukan pesan yang dapat diterjemahkan",
+ "translate-translations-none": "Tidak ada terjemahan untuk \"$1\"",
+ "translate-translations-count": "Ditemukan {{PLURAL:$1|satu terjemahan|$1 terjemahan}}.",
+ "translate-translations-fieldset-title": "Pesan",
+ "translate-translations-messagename": "Nama:",
+ "translate-translations-project": "Proyek:",
+ "translate-translations-including-no-param": "Harap gunakan kunci pesan yang sah dalam parameter subhalaman",
+ "translate-translations-history-short": "r",
+ "languagestats": "Statistik bahasa",
+ "languagestats-summary": "Halaman ini menampilkan statistik terjemahan untuk semua kelompok pesan dalam suatu bahasa tertentu.",
+ "messagegroupstats-summary": "Laman ini menampilkan statistik kelompok pesan.",
+ "languagestats-stats-for": "Statistik terjemahan untuk $1 ($2).",
+ "languagestats-recenttranslations": "terjemahan terkini",
+ "translate-langstats-incomplete": "Beberapa statistik pada halaman ini belum lengkap. Silakan muat ulang untuk mendapatkan lebih banyak statistik.",
+ "translate-langstats-expand": "luaskan",
+ "translate-langstats-collapse": "ciutkan",
+ "translate-langstats-expandall": "luaskan semua",
+ "translate-langstats-collapseall": "ciutkan semua",
+ "translate-language-code": "Kode bahasa",
+ "translate-language-code-field-name": "Kode bahasa:",
+ "translate-suppress-complete": "Sembunyikan kelompok pesan yang telah diterjemahkan sepenuhnya",
+ "translate-ls-noempty": "Sembunyikan kelompok pesan yang belum diterjemahkan sepenuhnya",
+ "translate-language": "Bahasa",
+ "translate-total": "Pesan",
+ "translate-untranslated": "Belum diterjemahkan",
+ "translate-percentage-complete": "Rampung",
+ "translate-percentage-fuzzy": "Usang",
+ "translate-percentage-proofread": "Telah ditinjau",
+ "translate-languagestats-overall": "Total keseluruhan kelompok pesan",
+ "translate-ls-submit": "Tampilkan statistik",
+ "translate-ls-column-group": "Kelompok pesan",
+ "translate-mgs-pagename": "Statistik kelompok pesan",
+ "translate-mgs-fieldset": "Tampilkan preferensi",
+ "translate-mgs-group": "Kelompok pesan:",
+ "translate-mgs-nocomplete": "Jangan tampilkan bahasa yang memiliki terjemahan lengkap",
+ "translate-mgs-noempty": "Jangan tampilkan bahasa yang tidak memiliki terjemahan",
+ "translate-mgs-submit": "Tampilkan statistik",
+ "translate-mgs-column-language": "Bahasa",
+ "translate-mgs-totals": "Total keseluruhan $1 {{PLURAL:$1|bahasa}}",
+ "translate-mgs-invalid-group": "Kelompok $1 yang dimaksud tidak ditemukan.",
+ "translate-mgs-nothing": "Tidak ada statistik yang dapat ditampilkan.",
+ "translate-tes-server-error": "Gagal memperoleh saranan pencarian",
+ "translate-tes-group-not-found": "Tidak ada hasil yang cocok",
+ "translate-tes-type-to-search": "Ketik untuk mulai mencari",
+ "supportedlanguages": "Bahasa aktif",
+ "supportedlanguages-summary": "Halaman ini menampilkan daftar bahasa yang aktif di {{SITENAME}}, beserta nama penerjemah yang mengerjakan bahasa tersebut. Nama penerjemah nampak semakin besar jika mereka telah semakin banyak memberikan kontribusi. Warna garis bawah menandakan apakah seorang penerjemah baru saja aktif di sini.",
+ "supportedlanguages-colorlegend": "Legenda warna: Terjemahan terakhir $1 hari yang lalu.",
+ "supportedlanguages-portallink": "[$1] $2 - $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-sqlite-error": "SQLite tidak didukung",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Penerjemah}}|Penerjemah}}: $1",
+ "supportedlanguages-recenttranslations": "terjemahan terkini",
+ "supportedlanguages-count": "Ada $1 {{PLURAL:$1|bahasa|bahasa}} totalnya.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|suntingan|suntingan}} - suntingan terakhir $3 {{PLURAL:$3|hari|hari}} yang lalu",
+ "translate-supportedlanguages-cached": "Informasi ini ditembolok $1 yang lalu.",
+ "translate-activelanguages-invalid-code": "Kode bahasa \"$1\" tidak dikenal atau tidak diaktifkan untuk penerjemahan.",
+ "abusefilter-edit-builder-vars-translate-source-text": "Teks sumber satuan terjemahan",
+ "abusefilter-edit-builder-vars-translate-target-language": "Bahasa tujuan penerjemahan",
+ "translate-jssti-add": "Tambah ke daftar",
+ "managemessagegroups": "Pengelolaan kelompok pesan",
+ "translate-smg-notallowed": "Anda tidak diperbolehkan untuk melakukan tindakan ini.",
+ "translate-smg-nochanges": "Tidak ada perubahan yang dapat diproses.",
+ "translate-smg-submit": "Kirim perubahan untuk diproses",
+ "translate-smg-submitted": "Definisi pesan telah diperbarui. Perubahan sedang diproses di latar.",
+ "translate-smg-submitted-with-failure": "Memperbarui {{PLURAL:$1|definisi}} pesan gagal untuk {{PLURAL:$1|kelompok|kelompok-kelompok}} berikut - $2. $3",
+ "translate-smg-submitted-others-processing": "Definisi pesan untuk kelompok lainnya sedang diproses di latar belakang.",
+ "translate-smg-more": "Akan ada perubahan lainnya untuk diproses setelah mengirimkan perubahan ini.",
+ "translate-smg-left": "Konten pesan di wiki",
+ "translate-smg-right": "Perubahan baru",
+ "translate-smg-rename-select": "Pilih",
+ "translate-smg-rename-cancel": "Batal",
+ "translate-smg-rename-search": "Mencari pesan yang cocok...",
+ "translate-smg-rename-select-err": "Tolong pilih pesan yang mau diganti namanya",
+ "translate-smg-rename-no-msg": "Tidak ditemukan pesan.",
+ "translate-smg-rename-new": "Tambahkan sebagai ... baru",
+ "translate-smg-rename-rename": "Tambahkan sebagai nama baru dari ...",
+ "translate-smg-rename-dialog-title": "Pilih nama baru yang cocok untuk $1",
+ "translate-smg-no-groups-in-sync": "Sedang tidak ada kelompok yang menjalani sinkronisasi",
+ "translate-smg-strong-sync-help": "Bantuan",
+ "translate-smg-groups-in-sync": "Kelompok yang sedang dalam sinkronisasi",
+ "translate-smg-groups-in-sync-list": "Daftar kelompok yang sedang diproses di latar belakang:",
+ "translate-smg-groups-with-error-title": "Kelompok yang mengalami galat selama sinkronisasi",
+ "translate-smg-groups-with-error-desc": "Daftar kelompok dan pesan-pesan mereka yang mengalami galat selama sinkronisasi:",
+ "translate-smg-group-with-error-summary": "$1 {{PLURAL:$1|pesan}} dengan galat:",
+ "translate-smg-group-message-action-history": "Riwayat",
+ "translate-smg-group-action-resolve": "Tandai sebagai telah diselesaikan",
+ "translate-smg-group-sync-error-warn": "Kelompok ini mengalami galat ketika sinkronisasi. Tolong perbaiki galatnya sebelum memproses kelompok ini.",
+ "translate-smg-group-message-tag-outdated": "Usang",
+ "translate-smg-group-message-tag-rename": "Ubah nama",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|''Tag''}}:",
+ "translate-smg-group-message-message-content": "Konten:",
+ "translate-smg-group-message-message-target": "Target:",
+ "translate-smg-group-message-message-replacement": "Pengganti:",
+ "translate-smg-group-message-message-other-langs": "Bahasa lain:",
+ "translate-smg-loading": "Memuat...",
+ "translate-smg-unknown-error": "Terjadi galat tidak dikenal saat memproses permintaan Anda.",
+ "translate-manage-import-diff": "Pesan $1 | Tindakan: $2",
+ "translate-manage-import-new": "Pesan baru $1",
+ "translate-manage-import-deleted": "Pesan $1 terhapus",
+ "translate-manage-action-import": "Impor",
+ "translate-manage-action-conflict": "Impor dan tandai perlu diulas",
+ "translate-manage-action-ignore": "Abaikan",
+ "translate-manage-action-fuzzy": "Impor dan tandai terjemahan perlu ditinjau",
+ "translate-manage-action-rename-fuzzy": "Ubah nama dan tandai terjemahan perlu ditinjau",
+ "translate-manage-action-rename": "Ubah nama",
+ "translate-manage-action-ignore-change": "Abaikan perubahan terjemahan",
+ "translate-manage-nochanges": "Tidak ada perubahan pada definisi pesan untuk kelompok ini.",
+ "translate-manage-nochanges-other": "Tidak ada perubahan pada bahasa ini.\nGunakan pranala berikut untuk kembali ke tampilan rincian kelompok.",
+ "translate-manage-inconsistent": "Ketidakkonsistenan terdeteksi pada permintaan.\nPeriksa ulang perubahan lalu coba kembali.\nRincian: $1.",
+ "translate-manage-toolong": "Waktu proses maksimum $1 {{PLURAL:$1|detik}} telah terlampaui.\nMohon kirimkan kembali formulir untuk melanjutkan proses.",
+ "translate-manage-import-summary": "Mengimpor versi baru dari sumber eksternal",
+ "translate-manage-import-ignore": "Lewati pesan $1.",
+ "translate-manage-import-rename-summary": "Diubah namanya di sumber eksternal",
+ "translate-manage-conflict-summary": "Mengimpor versi baru dari sumber eksternal.\nTolong diperiksa.",
+ "translate-manage-submit": "Jalankan",
+ "translate-manage-intro-other": "Di bawah ini adalah daftar perubahan terjemahan dalam bahasa $1.\nSilakan tinjau perubahan ini dan pilih tindakan yang ingin Anda lakukan untuk setiap perubahannya.\nJika Anda memilih untuk tidak mengabaikan perubahan, tindakan ini hanya bersifat sementara.",
+ "translate-manage-import-ok": "Diimpor: $1",
+ "translate-manage-import-done": "Impor selesai!",
+ "translate-manage-empty-content": "Kontennya kosong",
+ "translate-manage-key-reused": "Pesan ini sudah ada di wiki. Periksa apakah terjadi penggunaan ulang kunci lama.",
+ "translate-manage-source-message-not-found": "Definisi pesan tidak ditemukan",
+ "importtranslations": "Impor terjemahan",
+ "translate-import-from-local": "Unggah berkas lokal:",
+ "translate-import-load": "Muatkan berkas",
+ "translate-import-err-dl-failed": "Tidak dapat mengambil berkas:\n$1",
+ "translate-import-err-ul-failed": "Pengunggahan berkas gagal",
+ "translate-import-err-invalid-title": "Nama berkas <nowiki>$1</nowiki> yang diberikan tidak sah.",
+ "translate-import-err-no-such-file": "Berkas <nowiki>$1</nowiki> tidak ada atau belum diunggah secara lokal.",
+ "translate-import-err-stale-group": "Kelompok pesan dari berkas ini tidak ditemukan.",
+ "translate-import-err-no-headers": "Berkas bukan merupakan berkas Gettext dalam format pengaya Translate yang diciptakan dengan benar:\nTidak dapat menentukan kelompok pesan dan bahasa dari kop berkas.",
+ "translate-js-support-unsaved-warning": "Anda memiliki terjemahan yang belum diterbitkan.",
+ "translate-gs-pos": "Posisi",
+ "translate-gs-code": "Kode",
+ "translate-gs-continent": "Benua",
+ "translate-gs-speakers": "Penutur",
+ "translate-gs-score": "Nilai",
+ "translate-gs-multiple": "Beragam",
+ "translate-gs-count": "Jumlah",
+ "translate-gs-total": "Total",
+ "translate-gs-avgscore": "Nilai rata-rata",
+ "translate-documentation-language": "Dokumentasi pesan",
+ "translate-searchprofile": "Terjemahan",
+ "translate-searchprofile-tooltip": "Cari dari semua terjemahan",
+ "translate-searchprofile-note": "Lebih banyak opsi penelusuran tersedia dalam [$1 penelusuran terjemahan].",
+ "translate-search-languagefilter": "Saring menurut bahasa:",
+ "translate-search-nofilter": "Tanpa penyaringan",
+ "log-name-translationreview": "Log peninjauan terjemahan",
+ "log-description-translationreview": "Log semua tinjauan terjemahan dan kelompok pesan.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|telah meninjau}} terjemahan $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|mengubah}} status terjemahan $4 untuk $3 dari $6 menjadi $7",
+ "group-translate-sandboxed": "Penerjemah yang belum disetujui",
+ "group-translate-sandboxed-member": "{{GENDER:$1|penerjemah yang belum disetujui}}",
+ "right-translate-sandboxmanage": "Mengelola pengguna dalam bak pasir",
+ "action-translate-sandboxmanage": "mengelola pengguna dalam bak pasir",
+ "right-translate-sandboxaction": "Menjalankan tindakan yang diizinkan untuk pengguna dalam bak pasir",
+ "action-translate-sandboxaction": "menjalankan tindakan yang diizinkan untuk pengguna dalam bak pasir",
+ "translate-workflow-state-": "(tidak ditetapkan)",
+ "translate-workflowstatus": "Status: $1",
+ "translate-workflow-set-doing": "Menetapkan...",
+ "translate-workflow-autocreated-summary": "Pembuatan halaman otomatis untuk keadaan alur kerja $1",
+ "translate-stats-workflow": "Keadaan",
+ "translate-workflowgroup-label": "Keadaan alur kerja",
+ "translate-workflowgroup-desc": "Kelompok pesan ini menampilkan keadaan alur kerja terjemahan.\nKeadaan ini didefinisikan dalam variabel konfigurasi $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Terjemahan terkini",
+ "translate-dynagroup-recent-desc": "Kelompok pesan ini menampilkan seluruh terjemahan terkini dalam bahasa ini.\nSangat berguna saat mengerjakan tugas peninjauan.",
+ "translate-dynagroup-additions-label": "Penambahan terkini",
+ "translate-dynagroup-additions-desc": "Kelompok pesan ini menampilkan pesan yang baru dan yang telah berubah.",
+ "translate-msggroupselector-projects": "Kelompok pesan",
+ "translate-msggroupselector-search-placeholder": "Cari kelompok",
+ "translate-msggroupselector-search-all": "Semua",
+ "translate-msggroupselector-search-recent": "Terkini",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|subkelompok|subkelompok}}",
+ "tux-languageselector": "Terjemahkan ke",
+ "tux-select-target-language": "Bahasa tujuan penerjemahan",
+ "tux-tab-all": "Semua",
+ "tux-tab-untranslated": "Belum diterjemahkan",
+ "tux-tab-outdated": "Usang",
+ "tux-tab-translated": "Telah diterjemahkan",
+ "tux-tab-unproofread": "Belum ditinjau",
+ "tux-edit": "Sunting",
+ "tux-status-optional": "Opsional",
+ "tux-status-fuzzy": "Usang",
+ "tux-status-proofread": "Telah ditinjau",
+ "tux-status-translated": "Telah diterjemahkan",
+ "tux-status-saving": "Menerbitkan...",
+ "tux-status-unsaved": "Belum diterbitkan",
+ "tux-save-unknown-error": "Terjadi galat tak dikenal.",
+ "tux-editor-placeholder-documentation": "Tambahkan dokumentasi pesan",
+ "tux-editor-placeholder-language": "Terjemahan Anda dalam $1",
+ "tux-editor-editsummary-placeholder": "Ringkasan opsional",
+ "tux-editor-paste-original-button-label": "Tempel teks sumber",
+ "tux-editor-discard-changes-button-label": "Buang perubahan",
+ "tux-editor-save-button-label": "Terbitkan terjemahan",
+ "tux-editor-skip-button-label": "Lewati ke pesan selanjutnya",
+ "tux-editor-cancel-button-label": "Batal",
+ "tux-editor-confirm-button-label": "Konfirmasikan terjemahan",
+ "tux-editor-proofread-button-label": "Tandai sebagai telah ditinjau",
+ "tux-editor-shortcut-info": "Tekan \"$1\" untuk mengkonfirmasi dan pindah ke pesan selanjutnya, \"$2\" untuk melewatinya, \"$4\" untuk menyediakan ringkasan, atau tahan\"$3\" untuk melihat pintasan lainnya.",
+ "tux-editor-edit-desc": "Sunting dokumentasi",
+ "tux-editor-add-desc": "Tambah dokumentasi",
+ "tux-editor-suggestions-title": "Saran",
+ "tux-editor-in-other-languages": "Dalam bahasa lain",
+ "tux-editor-need-more-help": "Perlu bantuan lagi?",
+ "tux-editor-ask-help": "Silakan tanya",
+ "tux-editor-tm-match": "$1% sesuai",
+ "tux-notices-more": "{{PLURAL:$1|$1 lagi}}",
+ "tux-notices-hide": "sembunyikan",
+ "tux-editor-save-failed": "Gagal menerbitkan terjemahan: $1",
+ "tux-editor-n-uses": "digunakan $1 {{PLURAL:$1|kali|kali}}",
+ "tux-editor-message-desc-more": "Tampilkan selengkapnya",
+ "tux-editor-message-desc-less": "Tampilkan seperlunya",
+ "tux-editor-clear-translated": "Sembunyikan yang telah diterjemahkan",
+ "tux-editor-proofreading-mode": "Tinjauan",
+ "tux-editor-translate-mode": "Daftar",
+ "tux-editor-proofreading-hide-own-translations": "Sembunyikan terjemahan Anda",
+ "tux-editor-proofreading-show-own-translations": "Tampilkan terjemahan Anda",
+ "tux-proofread-action-tooltip": "Tandai sebagai telah ditinjau",
+ "tux-proofread-edit-label": "Sunting",
+ "tux-editor-page-mode": "Halaman",
+ "tux-editor-outdated-notice": "Terjemahan ini mungkin perlu dimutakhirkan.",
+ "tux-editor-outdated-notice-diff-link": "Tampilkan perbedaan",
+ "tux-editor-doc-editor-placeholder": "Dokumentasi pesan",
+ "tux-editor-doc-editor-save": "Terbitkan dokumentasi",
+ "tux-editor-doc-editor-cancel": "Batal",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|pesan|pesan}} lagi",
+ "tux-messagetable-loading-messages": "Memuat {{PLURAL:$1|pesan|pesan}}...",
+ "tux-message-filter-placeholder": "Saring daftar",
+ "tux-message-filter-result": "Ditemukan $1 buah {{PLURAL:$1|hasil|hasil}} untuk \"$2\"",
+ "tux-message-filter-advanced-button": "Penelusuran tingkat lanjut",
+ "tux-message-filter-optional-messages-label": "Pesan opsional",
+ "tux-proofread-translated-by-self": "Diterjemahkan oleh Anda",
+ "tux-empty-list-all": "Kelompok pesan ini kosong",
+ "tux-empty-list-all-guide": "Pilih kelompok pesan yang lain untuk menerjemahkan",
+ "tux-translate-page-no-such-group": "<strong>Kelompok yang diinginkan tidak tersedia.</strong> Pilihlah kelompok pesan yang lain.",
+ "tux-empty-list-translated": "Tidak ada pesan yang telah diterjemahkan",
+ "tux-empty-list-translated-guide": "Anda dapat membantu menerjemahkan",
+ "tux-empty-list-translated-action": "Terjemahkan",
+ "tux-empty-no-messages-to-display": "Tidak ada pesan yang dapat ditampilkan.",
+ "tux-empty-there-are-optional": "Terdapat pesan opsional yang tidak ditampilkan di dalam daftar",
+ "tux-empty-show-optional-messages": "Tampilkan pesan opsional",
+ "tux-empty-no-outdated-messages": "Tidak ada pesan usang",
+ "tux-empty-nothing-to-proofread": "Tidak ada yang perlu ditinjau",
+ "tux-empty-you-can-help-providing": "Anda dapat membantu menyediakan terjemahan baru",
+ "tux-empty-nothing-new-to-proofread": "Tidak ada pesan baru yang perlu ditinjau",
+ "tux-empty-you-can-review-already-proofread": "Anda dapat meninjau terjemahan yang sudah ditinjau oleh orang lain.",
+ "tux-empty-list-other": "Tidak ada yang perlu diterjemahkan",
+ "tux-empty-list-other-guide": "Anda dapat membantu meninjau terjemahan yang telah ada",
+ "tux-empty-list-other-action": "Tinjau terjemahan",
+ "tux-empty-list-other-link": "Tampilkan semua pesan",
+ "tux-editor-close-tooltip": "Tutup",
+ "tux-editor-expand-tooltip": "Luaskan",
+ "tux-editor-collapse-tooltip": "Ciutkan",
+ "tux-editor-message-tools-show-editor": "Tampilkan dalam penyunting wiki",
+ "tux-editor-message-tools-history": "Riwayat",
+ "tux-editor-message-tools-delete": "Hapus",
+ "tux-editor-message-tools-translations": "Semua terjemahan",
+ "tux-editor-message-tools-linktothis": "Pranala balik pesan ini",
+ "tux-editor-loading": "Memuat...",
+ "tux-editor-loading-failed": "Gagal memuat bantuan terjemahan: $1",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|bahasa|bahasa}} lagi",
+ "translate-statsbar-tooltip": "$1% telah diterjemahkan, $2% telah ditinjau",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% telah diterjemahkan, $2% telah ditinjau, $3% usang",
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|kelompok|kelompok}} lagi",
+ "translate-syntax-error": "Terjemahan mengandung kesalahan sintaksis",
+ "tux-session-expired": "Anda sudah tidak lagi masuk log. Silakan masuk log di tab yang terpisah. Atau, buatlah salinan dari terjemahan yang belum disimpan, masuk log, kembali ke halaman ini, lalu masukkan kembali terjemahan Anda.",
+ "tux-nojs": "Perkakas ini tidak dapat bekerja tanpa JavaScript. JavaScript dinonaktifkan, gagal berfungsi, atau peramban ini tidak mendukungnya.",
+ "specialpages-group-translation": "Terjemahan",
+ "translate-messagebundle-error-key-too-long": "Kunci \"$1\" terlalu panjang",
+ "translate-messagebundle-error-key-invalid-characters": "Kunci \"$1\" mengandung karakter yang tidak diperbolehkan",
+ "translate-messagebundle-error-invalid-value": "Kunci \"$1\" tidak memiliki nilai teks",
+ "translate-messagebundle-error-empty-value": "Kunci \"$1\" tidak memiliki nilai"
+}
diff --git a/Translate/i18n/core/ie.json b/Translate/i18n/core/ie.json
new file mode 100644
index 00000000..177c739f
--- /dev/null
+++ b/Translate/i18n/core/ie.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mithridates",
+ "Renan"
+ ]
+ },
+ "translate-next": "Proxim págine",
+ "translate-prev": "Págine anteriori",
+ "translate-manage-action-import": "Importar",
+ "translate-documentation-language": "Documentation de missage",
+ "tux-editor-page-mode": "Págine",
+ "tux-message-filter-advanced-button": "Sercha avansat"
+}
diff --git a/Translate/i18n/core/ig.json b/Translate/i18n/core/ig.json
new file mode 100644
index 00000000..d8905dfd
--- /dev/null
+++ b/Translate/i18n/core/ig.json
@@ -0,0 +1,55 @@
+{
+ "@metadata": {
+ "authors": [
+ "BaRaN6161 TURK",
+ "Ukabia",
+ "Uzoma Ozurumba"
+ ]
+ },
+ "translate": "Tụ̀wári ásụ̀sụ̀",
+ "translate-taction-translate": "Tugharia",
+ "translate-page-settings-legend": "Otu ihe dị",
+ "translate-page-group": "Ọtú",
+ "translate-page-language": "Ásụ̀sụ̀",
+ "translate-page-limit": "Érúrú",
+ "translate-submit": "Ga wèré",
+ "translate-page-navigation-legend": "Nturuụzọ̀",
+ "translate-page-showing-none": "Ozi adighi I zi.",
+ "translate-next": "Ihü sò",
+ "translate-page-edit": "mèzi",
+ "translate-optional": "(ichóró)",
+ "translate-ignored": "(atùfùghịrị)",
+ "translate-edit-title": "Mèzi \"$1\"",
+ "translate-edit-definition": "Mkpurụ ómárí ozi",
+ "translate-rc-translation-filter-no": "Emela ihe obulà",
+ "translate-stats-edits": "Ḿmezi",
+ "translate-stats-users": "Ndi na kuwari asụsụ na asụsụ nke ozor",
+ "translate-statsf-width": "Íbụ ime ogụgụ pixel:",
+ "translate-statsf-height": "Ógólógó ime ogụgụ pixel:",
+ "translate-statsf-scale-days": "Ubochi",
+ "translate-statsf-scale-hours": "Àmànì",
+ "translate-statsf-count": "Güo ógólógó:",
+ "translate-statsf-count-edits": "Ogụgụ orü",
+ "translate-statsf-count-users": "Ndi na su asụsụ di ngwamme",
+ "translate-sidebar-alltrans": "Nà asụ̀sụ̀ ndị ọ̀zọ",
+ "translate-translations-fieldset-title": "Ozi",
+ "translate-translations-messagename": "Áhà:",
+ "translate-translations-project": "Nzu:",
+ "translate-language": "Ásụ̀sụ̀",
+ "translate-percentage-complete": "Mmechá",
+ "translate-jssti-add": "Tinyé na ndetu",
+ "translate-manage-import-new": "Ozi ọhụrụ $1",
+ "translate-manage-import-deleted": "Ozi bakashịrị $1",
+ "translate-manage-import-done": "Omechá!",
+ "translate-gs-code": "Edemede i zonari",
+ "translate-gs-continent": "Obodo ukwu",
+ "translate-gs-speakers": "Ndi na su",
+ "translate-gs-multiple": "Onuogụgụ kachara otụ",
+ "translate-gs-total": "Òlé níle",
+ "translate-documentation-language": "Ndokọta ozi",
+ "tux-edit": "Mèzi",
+ "tux-editor-cancel-button-label": "Hapụ̀",
+ "tux-editor-in-other-languages": "Nà asụ̀sụ̀ ndị ọ̀zọ",
+ "tux-proofread-edit-label": "Mèzi",
+ "tux-editor-doc-editor-cancel": "Hapụ̀"
+}
diff --git a/Translate/i18n/core/ilo.json b/Translate/i18n/core/ilo.json
new file mode 100644
index 00000000..20ff397a
--- /dev/null
+++ b/Translate/i18n/core/ilo.json
@@ -0,0 +1,314 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joemaza",
+ "Lam-ang",
+ "Saluyot"
+ ]
+ },
+ "translate": "Ipatarus",
+ "translate-desc": "[[Special:Translate|Espesial a panid]] para iti panagipatarus ti MediaWiki ken iti labes",
+ "translate-taskui-export-to-file": "Iparuar iti patneng a pormat",
+ "translate-taskui-export-as-po": "Iruar para iti off-line a panangipatarus",
+ "translate-taction-translate": "Ipatarus",
+ "translate-taction-proofread": "Irepaso",
+ "translate-taction-lstats": "Estadistika ti pagsasao",
+ "translate-taction-mstats": "Estadistika ti grupo ti mensahe",
+ "translate-taction-export": "Iluas",
+ "translate-taction-disabled": "Nabaldado daytoy nga aramid ti daytoy a wiki.",
+ "translate-page-no-such-language": "Awan pateg ti naituding a pagsasao.",
+ "translate-page-no-such-group": "Awan pateg ti naituding a grupo.",
+ "translate-page-disabled": "Dagiti panagipatarus iti daytoy a pagsasao iti daytoy a grupo ket nabaldado.\nRason:\n\n<em>$1</em>",
+ "translate-language-disabled": "Nabaldado ti panagipatarus ti daytoy a pagsasao.",
+ "translate-page-settings-legend": "Dagiti pakayasentaran",
+ "translate-page-group": "Grupo",
+ "translate-page-language": "Pagsasao",
+ "translate-page-limit": "Patingga",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|a mensahe|kadagiti mensahe}} tunggal maysa a panid",
+ "translate-submit": "Alaen",
+ "translate-page-navigation-legend": "Panagdaliasat",
+ "translate-page-showing": "Agipakpakita kadagiti mensahe manipud iti $1 aginggana iti $2 iti $3.",
+ "translate-page-showing-all": "Agipakpakita ti $1 {{PLURAL:$1|a mensahe|a mensahe}}.",
+ "translate-page-showing-none": "Awan dagiti maiparang a mensahe.",
+ "translate-next": "Sumaruno a panid",
+ "translate-prev": "Napalabas a panid",
+ "translate-page-description-legend": "Pakaammo a maipanggep ti grupo",
+ "translate-page-description-hasoptional": "Daytoy a grupo ti mensahe ket aglaon kadagiti pagpilian a mensahe.\nDagiti pagpilian a mensahe ket maipatarus laeng kuma no ti pagsasaom ket ket addaan ti naipangruna a kammasapulan\nkasla ti saan a panagusar kadagiti pagbaetan wenno transliterasion iti maitutop a nagnagan. $1",
+ "translate-page-description-hasoptional-open": "Ipakita dagiti pagpilian a mensahe.",
+ "translate-page-edit": "urnosen",
+ "translate-optional": "(pagpilian)",
+ "translate-ignored": "(binay-an)",
+ "translate-edit-title": "Urnosen ti \"$1\"",
+ "translate-edit-definition": "Panangipalawag ti mensahe",
+ "translate-edit-contribute": "agparawad",
+ "translate-edit-no-information": "<em>Daytoy a mensahe ket awan ti dokumentasionna.\nNo ammom ti ayan wenno kasano ti pannaka-usar daytoy a mensahe, matulongam dagiti sabali nga agipatpatarus babaen ti panagnayon ti dokumentasion daytoy a mensahe.</em>",
+ "translate-edit-information": "Pakaammo a maipanggep ti mensahe ($1)",
+ "translate-edit-warnings": "Dagiti ballaag a maipanggep kadagiti saan a kompleto a patarus",
+ "translate-edit-tmmatch-source": "Teksto a taudan ti panagitarus: $1",
+ "translate-edit-tmmatch": "$1% a kapada",
+ "translate-edit-nopermission": "Masapolmo ti karbengan ti panagipatarus tapno makaipatarus kadagiti mensahe.",
+ "translate-edit-askpermission": "Mangala ti pammalubos",
+ "translate-checks-parameters": "{{PLURAL:$2|Ti sumaganad a parametro|Dagiti sumaganad a parametro}} ket saan a nausar:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Ti sumaganad a parametro|Dagiti sumaganad a parametro}} ket di ammo:\n<strong>$1</strong>",
+ "translate-checks-balance": "Adda saan nga agtumbas a bilang {{PLURAL:$2|ti parentesis|dagiti parentesis}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Ti sumaganad a silpo|Dagiti sumaganad a $2 a silpo}} ket problematiko:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Ti sumaganad a silpo|Dagiti sumaganad a $2 silpo}} ket awan:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Ti panangipalawag ket agus-usar ti <nowiki>{{PLURAL:}}</nowiki> ngem ti panangipatarus ket saan.",
+ "translate-checks-plural-forms": "Ti <nowiki>{{PLURAL:}}</nowiki> ket naikkan {{PLURAL:$1|ti maysa a porma|kadagiti $1 a porma}} ngem {{PLURAL:$2|maysa laeng a porma|$2 a porporma}} ti masuportaran (malaksid ti 0= ken 1= a porporma).",
+ "translate-checks-plural-dupe": "Ti <nowiki>{{PLURAL:}}</nowiki> ket addaan ti duplikado a porporma iti gibus. Ti <nowiki>{{PLURAL:$1|karnero|karnero}}</nowiki> ket maisurat kuma a kas <nowiki>{{PLURAL:$1|karnero}}</nowiki>.",
+ "translate-checks-pagename": "Ti nagan ti espasio ket nagbaliw manipud iti panangipalawag",
+ "translate-checks-format": "Daytoy a patarus ket saanna a suroten ti panangipalawag wenno addaan ti imbalido a gramatika:$1",
+ "translate-checks-escape": "Dagiti sumaganad a pangitalaw ket mabalin nga aksidental: <strong>$1</strong>",
+ "translate-checks-parametersnotequal": "Ti bilang ti parametro ket {{PLURAL:$1|$1}}; nasken kuma a {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "Ti <nowiki>$1</nowiki> ket nadadael.",
+ "translate-checks-fudforum-syntax": "Usaren ti <nowiki>$1</nowiki> imbes nga ti <nowiki>$2</nowiki> iti daytoy a gandat.",
+ "translate-pref-editassistlang": "Dagiti katakunaynay a pagsasao:",
+ "prefs-translate": "Dagiti pagpilian ti panagipatarus",
+ "translate-pref-editassistlang-help": "Listaan dagiti kodigo ti pagsasao nga insinsina ti koma.\nTi patarus ti mensahe kadagitoy a pagsasao ket maipakita no agipatpataruska.\nTi kasisigud a listan dagiti pagsasao ket depende iti pagsasaom.",
+ "translate-pref-editassistlang-bad": "Imbalido a kodigo ti pagsasao iti listaan:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Agurnos nga agusar ti interface ti panagipatarus",
+ "right-translate-manage": "Agtaripato kadagiti grupo ti mensahe",
+ "action-translate-manage": "agtaripato kadagiti grupo ti mensahe",
+ "right-translate-import": "Agala kadagiti offline a patarus",
+ "action-translate-import": "agala kadagiti offline a patarus",
+ "right-translate-messagereview": "Agrepaso kadagiti patarus",
+ "right-translate-groupreview": "Baliwan ti kasasaad ti ayus ti obra dagiti grupo ti mensahe",
+ "translate-rc-translation-filter": "Sagaten dagiti patarus:",
+ "translate-rc-translation-filter-no": "Saanka nga ogobra",
+ "translate-rc-translation-filter-only": "Ipakita laeng dagiti patarus",
+ "translate-rc-translation-filter-filter": "Isagat dagiti patarus",
+ "translate-rc-translation-filter-site": "Baliwan laeng kadagiti mensahe ti sitio",
+ "translationstats": "Estadistika ti patarus",
+ "translate-stats-edits": "Ur-urnos",
+ "translate-stats-users": "Agipatpatarus",
+ "translate-stats-registrations": "Dagiti rehistrasion",
+ "translate-stats-reviews": "Dagiti repaso",
+ "translate-stats-reviewers": "Dagiti agreprepaso",
+ "translate-statsf-intro": "Amin dagiti pateg ket addaan kadagiti akin-ngato ken akin-baba a patingga.",
+ "translate-statsf-options": "Dagti pagpilian ti inkuri-kur-it",
+ "translate-statsf-width": "Kaakaba kadagiti piksel:",
+ "translate-statsf-height": "Katayag kadagiti piksel:",
+ "translate-statsf-days": "Paset ti panawen kadagiti aldaw:",
+ "translate-statsf-start": "Rugi a petsa:",
+ "translate-statsf-scale": "Granularidad:",
+ "translate-statsf-scale-months": "Bulbulan",
+ "translate-statsf-scale-weeks": "Lawlawas",
+ "translate-statsf-scale-days": "Al-aldaw",
+ "translate-statsf-scale-hours": "Or-oras",
+ "translate-statsf-count": "Rukod:",
+ "translate-statsf-count-edits": "Bilang dagiti inurnos:",
+ "translate-statsf-count-users": "Dagiti aktibo nga agipatpatarus",
+ "translate-statsf-count-registrations": "Dagiti baro nga agar-aramat",
+ "translate-statsf-count-reviews": "Dagiti repaso ti panagipatarus",
+ "translate-statsf-count-reviewers": "Dagiti agreprepaso",
+ "translate-statsf-language": "Listaan dagiti kodigo ti pagsasao nga insinsina ti koma:",
+ "translate-statsf-group": "Listaan ti grupo dagiti kodigo nga insinsina ti koma:",
+ "translate-statsf-submit": "Ipadas",
+ "translate-tag-page-desc": "Patarus ti panid ti wiki ti [[$2|$1]].",
+ "translate-sidebar-alltrans": "Iti sabali a sasao",
+ "translations": "Amin a patarus",
+ "translations-summary": "Ikabil ti nagan ti mensahe dita baba tapno maipakita amin dagiti magun-od a patarus.",
+ "translate-translations-no-message": "Ti \"$1\" ket saan a maipatarus a mensahe",
+ "translate-translations-none": "Awan dagiti patarus para iti \"$1\"",
+ "translate-translations-count": "Nakabiruk {{PLURAL:$1|ti maysa a patarus|kadagiti $1 a patarus}}.",
+ "translate-translations-fieldset-title": "Mensahe",
+ "translate-translations-messagename": "Nagan:",
+ "translate-translations-project": "Gandat:",
+ "translate-translations-including-no-param": "Pangngaasi a mangibaga ti husto a tekla ti mensahe iti parametro ti subpanid",
+ "translate-translations-history-short": "p",
+ "languagestats": "Estadistika ti pagsasao",
+ "languagestats-summary": "Daytoy a panid ket mangipakita ti estadistika ti patarus para kadagiti amin a grupo para iti pagsasao.",
+ "languagestats-stats-for": "Estadistika ti patarus para iti $1 ($2).",
+ "languagestats-recenttranslations": "dagiti kinaudi a patarus",
+ "translate-langstats-incomplete": "Adda met dagiti estadistika iti daytoy a panid ket saan a kompleto. Pangngaasi nga ikarga manen tapno makaala kadagiti adu pay nga estadistika.",
+ "translate-langstats-expand": "palawaen",
+ "translate-langstats-collapse": "rebbaen",
+ "translate-langstats-expandall": "palawaen amin",
+ "translate-langstats-collapseall": "rebbaen amin",
+ "translate-language-code": "Kodigo ti pagsasao",
+ "translate-language-code-field-name": "Kodigo ti pagsasao:",
+ "translate-suppress-complete": "Pasardengen amin dagiti grupo ti mensahe a kompleto a naipatarus",
+ "translate-ls-noempty": "Pasardengen amin dagiti grupo ti mensahe a saan kompleto a naipatarus",
+ "translate-language": "Pagsasao",
+ "translate-total": "Dagiti mensahe",
+ "translate-untranslated": "Di naipatarus",
+ "translate-percentage-complete": "Pannakalpas",
+ "translate-percentage-fuzzy": "Baak",
+ "translate-languagestats-overall": "Itipon amin a grupo ti mensahe",
+ "translate-ls-submit": "Ipakita ti estadistika",
+ "translate-ls-column-group": "Grupo ti mensahe",
+ "translate-mgs-pagename": "Estadistika ti grupo ti mensahe",
+ "translate-mgs-fieldset": "Ipakita dagiti kakaykayatan",
+ "translate-mgs-group": "Grupo ti mensahe:",
+ "translate-mgs-nocomplete": "Saan nga iparang dagiti pagsasao nga addaan ti kompleto a patarus",
+ "translate-mgs-noempty": "Saan nga iparang dagiti pagsasao nga awan dagiti ania man a patarus",
+ "translate-mgs-submit": "Ipakita ti estadistika",
+ "translate-mgs-column-language": "Pagsasao",
+ "translate-mgs-totals": "Pagtiponen amin dagiti pagsasao",
+ "translate-mgs-invalid-group": "Ti nainaganan a grupo ti $1 ket awan.",
+ "translate-mgs-nothing": "Awan ti maipakita para iti nakiddaw nga estadistika.",
+ "supportedlanguages": "Dagiti nasuportaran a pagsasao",
+ "supportedlanguages-summary": "Daytoy a panid ket mangipakita ti listaan kadagiti amin a pagsasao a sinuportaran babaen ti {{SITENAME}},\na kakuyogna dagiti nagan dagiti agipatpatarus nga agob-obra iti dayta apagsasao.\nTi nagan ti agipatpatarus ket dakdakkel a maiparang, no ad-adu ti inur-nos nga inparawad ti agar-aramat.\nTi maris ti ugis iti baba ket mangibaga no kaano ti kinaaktibo ti agipatpatarus ditoy.",
+ "supportedlanguages-colorlegend": "Leyenda para iti maris: Ti naudi a patarus ket $1 ti napalabas.",
+ "supportedlanguages-translators": "{{PLURAL:$2|Agipatpatarus|Dagiti agipatpatarus}}: $1",
+ "supportedlanguages-recenttranslations": "dagiti kinaudi a patarus",
+ "supportedlanguages-count": "$1 a dagup {{PLURAL:$1|ti pagsasao|dagiti pagsasao}}.",
+ "supportedlanguages-activity": "$1: $2 nga {{PLURAL:$2|inurnos|inur-urnos}} - kinaudi nga inurnos ket $3 nga {{PLURAL:$3|aldaw|al-aldaw}} ti napalabas",
+ "translate-jssti-add": "Inayon iti listaan",
+ "managemessagegroups": "Panagtaripato ti grupo ti mensahe",
+ "translate-smg-notallowed": "Saanmo a mabalin nga aramiden daytoy a tignay.",
+ "translate-smg-nochanges": "Awan ti maproseso kadagiti binaliwan.",
+ "translate-smg-submit": "Ited dagiti binaliwan tapno maproseso",
+ "translate-smg-submitted": "Napabaro dagiti panagipalawag ti mensahe. Dagiti panagbaliw ket agdama a maproproseo iti likudan.",
+ "translate-smg-more": "Addanto pay dagiti adu a maproseo a binaliwan kalpasan ti panagited kadagitoy a binaliwan.",
+ "translate-smg-left": "Linaon a mesahe iti wiki",
+ "translate-smg-right": "Dagiti um-umay a panagbalbaliw",
+ "translate-manage-import-diff": "Mensahe $1 | Tigtignay: $2",
+ "translate-manage-import-new": "Baro a mensahe $1",
+ "translate-manage-import-deleted": "Naikkat a mensahe $1",
+ "translate-manage-action-import": "Agala",
+ "translate-manage-action-conflict": "Agala ket di nalawag",
+ "translate-manage-action-ignore": "Saan nga ikaskaso",
+ "translate-manage-action-fuzzy": "Dagiti patarus a naala ken di nalawag",
+ "translate-manage-nochanges": "Awan dagiti binalbaliwan kadagiti panagipalpalawag ti mensahe para iti daytoy a grupo.",
+ "translate-manage-nochanges-other": "Awan dagiti binalbaliwan para iti daytoy a pagsasao.\nUsaren ti silpo dita baba tapno agsubli idiay naisalaysay a panagkita ti grupo.",
+ "translate-manage-inconsistent": "Nakaduktal ti bangking iti kiddaw.\nPangaasi nga agkita kadagiti panagbalbaliw ket padasen manen.\nDagiti salaysay: $1.",
+ "translate-manage-toolong": "Ti kaaduan a panagproseso nga oras iti $1 a {{PLURAL:$1|segundo|segsegundo}} ket nalabsan.\nPangngaasi nga ited manen ti porma tapno maituloy ti panagproseso.",
+ "translate-manage-import-summary": "Agal-ala ti baro a bersion manipud iti akin-ruar a taudan",
+ "translate-manage-conflict-summary": "Agal-ala ti baro a bersion manipud iti akin-ruar a taudan.\nPangngaasi a kitaen.",
+ "translate-manage-submit": "Aramiden",
+ "translate-manage-intro-other": "Dita baba ket listaan dagiti panagbaliw ti patarus iti pagsasao ti $1.\nPangngaasi nga irepaso dagiti binaliwan ken agpili ti tignay a kayatmo nga aramiden para iti tunggal maysa pabaro.\nNo piliem a saan nga ikaskaso dagiti ibinaliwan, temporario laeng daytoy a tignay.",
+ "translate-manage-import-ok": "Nagala: $1",
+ "translate-manage-import-done": "Kompleton ti panagala!",
+ "importtranslations": "Agala kadagiti patarus",
+ "translate-import-from-local": "Lokal a panagikarga ti papeles:",
+ "translate-import-load": "Ikarga ti papeles",
+ "translate-import-err-dl-failed": "Di nakaala iti papeles:\n$1",
+ "translate-import-err-ul-failed": "Napaay ti panangikarga ti papeles",
+ "translate-import-err-invalid-title": "Ti naited a nagan ti papele iti <nowiki>$1</nowiki> ket imbalido.",
+ "translate-import-err-no-such-file": "Awan ti papeles ti<nowiki>$1</nowiki> wenno saan pay a lokal a naikarga.",
+ "translate-import-err-stale-group": "Awan ti grupo ti mensahe nga agtagikua iti daytoy a papeles.",
+ "translate-import-err-no-headers": "Ti papeles ket saan a nasayaat a naporma a papeles iti Gettext iti pormat a pagpaatiddog ti Translate:\nDi naikeddeng ti grupo ti mensahe ken pagsasao manipud kadagiti paulo ti papeles.",
+ "translate-js-support-unsaved-warning": "Adaanka kadagiti saan a naidulin a patarus.",
+ "translate-gs-pos": "Pues.",
+ "translate-gs-code": "Kodigo",
+ "translate-gs-continent": "Kontinente",
+ "translate-gs-speakers": "Dagiti agbitbitla",
+ "translate-gs-score": "Iskor",
+ "translate-gs-multiple": "Kaadu",
+ "translate-gs-count": "Bilang",
+ "translate-gs-total": "Dagup",
+ "translate-gs-avgscore": "Natimbeng nga iskor",
+ "translate-documentation-language": "Dokumentasion ti mensahe",
+ "translate-searchprofile": "Dagiti patarus",
+ "translate-searchprofile-tooltip": "Agbiruk manipud kadagiti amin a patarus",
+ "translate-search-languagefilter": "Sagaten babaen ti pagsasao:",
+ "translate-search-nofilter": "Awan panagsagat",
+ "log-name-translationreview": "Listaan ti panagrepaso ti patarus",
+ "log-description-translationreview": "Ilista amin dagiti panagrepaso kadagiti patarus ken dagiti grupo ti mensahe.",
+ "logentry-translationreview-message": "Ni $1 ket {{GENDER:$2|nagrepaso}} ti patarus ti $3",
+ "logentry-translationreview-group": "Ni $1 ket {{GENDER:$2|binaliwanna}} ti kasasaad dagiti $4 a patarus ti $3 manipud iti $6 iti $7",
+ "group-translate-sandboxed": "Dagiti di naaprobaran nga agipatpatarus",
+ "group-translate-sandboxed-member": "{{GENDER:$1|di naaprobaran nga agipatpatarus}}",
+ "right-translate-sandboxmanage": "Taripatuen dagiti naipadpadas nga agar-aramat",
+ "action-translate-sandboxmanage": "taripatuen dagiti naipadpadas nga agar-aramat",
+ "right-translate-sandboxaction": "Aramiden dagiti tignay a maipalubos kadagiti naipadpadas nga agar-aramat",
+ "action-translate-sandboxaction": "aramiden dagiti tignay a maipalubos kadagiti naipadpadas nga agar-aramat",
+ "translate-workflow-state-": "(waswasen)",
+ "translate-workflowstatus": "Kasasaad: $1",
+ "translate-workflow-set-doing": "Isadsaad...",
+ "translate-workflow-autocreated-summary": "Automatiko a pannakapartuat ti panid para iti kasasaad ti ayus ti obra ti $1",
+ "translate-stats-workflow": "Kasasaad",
+ "translate-workflowgroup-label": "Dagiti kasasaad ti ayus ti obra",
+ "translate-workflowgroup-desc": "Daytoy a grupo ti mensahe ket mangipakpakita kadagiti kasasaad ti ayus ti obra.\nDagiti kasasaad ket naipalawag iti pannakaaramid ti karuay ti $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Dagiti kinaudi a patarus",
+ "translate-dynagroup-recent-desc": "Daytoy a grupo ti mensahe ket mangipakpakita kadagiti amin a kinaudi a patarus iti daytoy a pagsasao.\nKaserbian daytoy para iti obra ti panagrepaso.",
+ "translate-dynagroup-additions-label": "Dagiti kinaudi a nainayon",
+ "translate-dynagroup-additions-desc": "Daytoy a grupo ti mensahe ket mangipakpakita kadagiti baro ken nabaliwan a mensahe.",
+ "translate-msggroupselector-projects": "Grupo ti mensahe",
+ "translate-msggroupselector-search-placeholder": "Agbiruk kadagiti grupo",
+ "translate-msggroupselector-search-all": "Amin",
+ "translate-msggroupselector-search-recent": "Kinaudi",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|a subgrupo|kadagiti subgrupo}}",
+ "tux-languageselector": "Ipatarus iti",
+ "tux-tab-all": "Amin",
+ "tux-tab-untranslated": "Di naipatarus",
+ "tux-tab-outdated": "Baak",
+ "tux-tab-translated": "Naipatarus",
+ "tux-tab-unproofread": "Di narepaso",
+ "tux-edit": "Urnosen",
+ "tux-status-optional": "Pagpilian",
+ "tux-status-fuzzy": "Baak",
+ "tux-status-proofread": "Narepaso",
+ "tux-status-translated": "Naipatarus",
+ "tux-status-saving": "Agiduldulin...",
+ "tux-status-unsaved": "Di naidulin",
+ "tux-editor-paste-original-button-label": "Ipegket ti teksto ti taudan",
+ "tux-editor-discard-changes-button-label": "Iwagsak dagiti binaliwan",
+ "tux-editor-save-button-label": "Idulin ti patarus",
+ "tux-editor-skip-button-label": "Mapan iti sumaruno",
+ "tux-editor-cancel-button-label": "Ukasen",
+ "tux-editor-confirm-button-label": "Pasingkedan ti patarus",
+ "tux-editor-shortcut-info": "Pinduten ti \"$1\" tapno maidulin wenno \"$2\" tapno mapan ti sumaruno a mensahe wenno \"$3\" para kadagiti sabali pay nga apat.",
+ "tux-editor-edit-desc": "Urnosen ti dokumentasion",
+ "tux-editor-add-desc": "Agnayon ti dokumentasion",
+ "tux-editor-suggestions-title": "Dagiti singasing",
+ "tux-editor-in-other-languages": "Iti sabali a sasao",
+ "tux-editor-need-more-help": "Makasapul pay ti adu a tulong?",
+ "tux-editor-ask-help": "Agdamag pay ti adu a pakaammo",
+ "tux-editor-tm-match": "$1% a kapada",
+ "tux-notices-more": "{{PLURAL:$1|$1 pay}}",
+ "tux-notices-hide": "ilemmeng",
+ "tux-editor-save-failed": "Napay ti panagidulin ti patarus: $1",
+ "tux-editor-n-uses": "inus-usar ti $1 {{PLURAL:$1|a beses|a besbeses}}",
+ "tux-editor-message-desc-more": "Agkita pay ti adu",
+ "tux-editor-message-desc-less": "Agkita ti basbassit",
+ "tux-editor-clear-translated": "Ilemmeng ti naipatarus",
+ "tux-editor-proofreading-mode": "Irepaso",
+ "tux-editor-translate-mode": "Listaan",
+ "tux-editor-proofreading-hide-own-translations": "Ilemmeng dagiti patarusmo",
+ "tux-editor-proofreading-show-own-translations": "Ipakita dagiti patarusmo",
+ "tux-proofread-action-tooltip": "Markaan a kas narepaso",
+ "tux-proofread-edit-label": "Urnosen",
+ "tux-editor-page-mode": "Panid",
+ "tux-editor-outdated-notice": "Daytoy a patarus ket mabalin a nasken a mapabaro.",
+ "tux-editor-outdated-notice-diff-link": "Ipakita dagiti paggiddiatan",
+ "tux-editor-doc-editor-placeholder": "Dokumentasion ti mensahe",
+ "tux-editor-doc-editor-save": "Idulin ti dokumentasion",
+ "tux-editor-doc-editor-cancel": "Ukasen",
+ "tux-messagetable-more-messages": "$1 pay a {{PLURAL:$1|mensahe|menmensahe}}",
+ "tux-messagetable-loading-messages": "Agkarkarga {{PLURAL:$1|ti mensahe|kadagiti mensahe}}...",
+ "tux-message-filter-placeholder": "Sagaten ti listaan",
+ "tux-message-filter-result": "Nakabiruk ti $1 {{PLURAL:$1|a resulta|kadagiti resulta}} para iti \"$2\"",
+ "tux-message-filter-advanced-button": "Napasayat a panagbiruk",
+ "tux-message-filter-optional-messages-label": "Dagiti pagpilian a mensahe",
+ "tux-proofread-translated-by-self": "Inpatarusmo",
+ "tux-empty-list-all": "Daytoy a grupo ti mensahe ket awan linaon",
+ "tux-empty-list-all-guide": "Agpili ti sabali nga ipatarus a grupo ti mensahe",
+ "tux-translate-page-no-such-group": "<strong>Awan ti naibaga a grupo ti mensahe.</strong> Agpili ti sabali a grupo ti mensahe.",
+ "tux-empty-list-translated": "Awan dagiti naipatarus a mensahe",
+ "tux-empty-list-translated-guide": "Makatulongka nga agipatarus",
+ "tux-empty-list-translated-action": "Ipatarus",
+ "tux-empty-no-messages-to-display": "Awan ti maiparang a mensahe.",
+ "tux-empty-there-are-optional": "Awan dagiti pagpilian a mensahe a saan a naipakita iti listaan",
+ "tux-empty-show-optional-messages": "Ipakita dagiti pagpilian a mensahe",
+ "tux-empty-no-outdated-messages": "Awan dagiti baak a mensahe",
+ "tux-empty-nothing-to-proofread": "Awan ti marepaso",
+ "tux-empty-you-can-help-providing": "Makatulongka a mangited kadagiti baro a patarus",
+ "tux-empty-nothing-new-to-proofread": "Awan ti baro a marepaso",
+ "tux-empty-you-can-review-already-proofread": "Mabalinmo ti agrepaso kadagiti patarus a rinepaso babaen dagiti sabali.",
+ "tux-empty-list-other": "Awan ti maipatarus",
+ "tux-empty-list-other-guide": "Makatulongka nga agrepaso kadagiti addan a naipatarus",
+ "tux-empty-list-other-action": "Agrepaso kadagiti patarus",
+ "tux-empty-list-other-link": "Ipakita amin dagiti mensahe",
+ "tux-editor-close-tooltip": "Irikep",
+ "tux-editor-expand-tooltip": "Palawaen",
+ "tux-editor-collapse-tooltip": "Rebbaen",
+ "tux-editor-message-tools-history": "Pakasaritaan",
+ "tux-editor-message-tools-translations": "Amin a patarus",
+ "tux-editor-loading": "Agkarkarga...",
+ "translate-search-more-languages-info": "$1 pay {{PLURAL:$1|a pagsasao|kadagiti pagsasao}}",
+ "translate-statsbar-tooltip": "$1% ti naipatarus, $2% ti narepaso",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% ti naipatarus, $2% ti narepaso, $3% ti baak",
+ "translate-search-more-groups-info": "$1 pay a {{PLURAL:$1|grupo|grupgrupo}}"
+}
diff --git a/Translate/i18n/core/inh.json b/Translate/i18n/core/inh.json
new file mode 100644
index 00000000..99d1fca9
--- /dev/null
+++ b/Translate/i18n/core/inh.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Adam-Yourist",
+ "ElizaMag",
+ "Умар"
+ ]
+ },
+ "translate": "Таржам",
+ "translate-taction-translate": "Таржам",
+ "translate-page-group": "Тоаба",
+ "translate-page-language": "Мотт",
+ "translate-rcfilters-translations": "Таржамаш",
+ "translate-rcfilters-translations-only-label": "Таржамаш",
+ "translate-rcfilters-translations-filter-label": "Таржамаш дац",
+ "translations": "Деррига таржамаш",
+ "translate-language": "Мотт",
+ "translate-ls-column-group": "Хоамий тоаба",
+ "translate-mgs-group": "Хоамий тоаба:",
+ "translate-mgs-column-language": "Мотт",
+ "translate-documentation-language": "Хоам бара документаци",
+ "translate-searchprofile": "Таржамаш",
+ "translate-msggroupselector-projects": "Хоамий тоаба",
+ "translate-msggroupselector-search-all": "Деррига",
+ "tux-languageselector": "Таржам де укх меттала",
+ "tux-tab-all": "Деррига",
+ "tux-empty-list-translated-action": "Таржам де",
+ "tux-editor-message-tools-translations": "Деррига таржамаш"
+}
diff --git a/Translate/i18n/core/io.json b/Translate/i18n/core/io.json
new file mode 100644
index 00000000..972fdbdf
--- /dev/null
+++ b/Translate/i18n/core/io.json
@@ -0,0 +1,198 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joao Xavier",
+ "Lakaoso",
+ "Malafaya",
+ "Wyvernoid"
+ ]
+ },
+ "translate": "Traduko",
+ "translate-taction-translate": "Tradukuro",
+ "translate-taction-proofread": "Revizuri",
+ "translate-taction-lstats": "Linguala statistiki",
+ "translate-taction-mstats": "Statistiki pri grupi di mesaji",
+ "translate-taction-export": "Exportacar",
+ "translate-page-no-such-language": "La linguo selektita esas nevalida.",
+ "translate-page-disabled": "Tradukuri ad ica linguo en ica grupo ne permisesas.\nMotivo:\n\n<em>$1</em>",
+ "translate-language-disabled": "Tradukuro a ca idiomo ne esas posibla.",
+ "translate-page-settings-legend": "Preferaji",
+ "translate-page-group": "Grupo",
+ "translate-page-language": "Linguo",
+ "translate-page-limit": "Limito",
+ "translate-submit": "Serchez",
+ "translate-next": "Sequanta pagino",
+ "translate-prev": "Antea pagino",
+ "translate-page-description-hasoptional": "Ca mesajo-grupo kontenas fakultativa mesaji.\nFakultativa mesaji mustas tradukesar nur se vua linguo havas specala bezoni, exemple ne uzar intervalo inter la vorti, o transliterizar propra nomi. $1",
+ "translate-page-edit": "redaktar",
+ "translate-edit-title": "Redaktar \"$1\"",
+ "translate-edit-definition": "Defino di la mesajo",
+ "translate-edit-contribute": "kontributez",
+ "translate-edit-no-information": "<em>Ica mesajo ne havas dokumentigo.\nSe vu savas ube o quale ica mesajo uzesas, vu povas helpar altra tradukuri, per la kreado di dokumentigo pri ica mesajo.</em>",
+ "translate-edit-information": "Informo pri mesajo ($1)",
+ "translate-edit-warnings": "Avizi pri nekompleta tradukuri",
+ "translate-checks-parameters": "Atencez! La sequanta {{PLURAL:$2|parametro|parametri}} ne uzesis:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "La sequanta {{PLURAL:$2|parametro|parametri}} esas nekonocata:\n<strong>$1</strong>",
+ "translate-checks-balance": "Existas neegala quanto di {{PLURAL:$2|parentezo|parentezi}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "La sequanta {{PLURAL:$2|ligilo|$2 ligili}} havas problemi:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "La sequanta {{PLURAL:$2|ligilo|$2 ligili}} mankas:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "La defino uzas <nowiki>{{PLURAL:}}</nowiki> tamen la tradukuro ne uzas ol.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> recervis {{PLURAL:$1|1 formulario|$1 formularii}}, ma {{PLURAL:$2|nur 1 formulario|$2 formularii}} suportesas (ecepte formularii 0= ed 1=).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> havas duopligita formulario fine. <nowiki>{{PLURAL:$1|datumaro|datumaro}}</nowiki> mustas esar skribita kom <nowiki>{{PLURAL:$1|datumaro}}</nowiki>.",
+ "translate-checks-gettext-plural-missing": "Ca tradukuro mustas havar <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-unsupported": "Ca mesajo ne aceptas <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-pagename": "''Namespace'' de la defino modifikesis",
+ "translate-checks-format": "Ca tradukuro ne sequas la defino o havas nevalida sintaxo: $1",
+ "translate-checks-escape": "La sequanta {{PLURAL:$2|eskapo-karaktero|eskapo-karakteri}} povas esar acidentala: <strong>$1</strong>. Valida {{PLURAL:$4|eskapo-karaktero esas |eskapo-karakteri inkluzas}}: $3.",
+ "translate-checks-parametersnotequal": "Nombrala parametro esas {{PLURAL:$1|$1}}; ol mustas esar {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> esas male formacita.",
+ "translate-checks-fudforum-syntax": "Uzez <nowiki>$1</nowiki> vice <nowiki>$2</nowiki> en ca projeto.",
+ "translate-pref-editassistlang-help": "Listo pri kodexo di lingui separata per komo (,).\nLa tradukuro di ula mesajo en ica lingui montresas dum ke vu tradukas.\nLa listo 'default' pri lingui dependas de vua propra linguo.",
+ "translate-pref-editassistlang-bad": "Linguala kodexo nevalida che la listo:\n<nowiki>$1</nowiki>.",
+ "action-translate-manage": "administrar grupo di mesaji",
+ "right-translate-import": "Importacar tradukuri facita ''offline''.",
+ "translate-rcfilters-translations": "Tradukuri",
+ "translate-rcfilters-translations-only-label": "Tradukuri",
+ "translate-rcfilters-translations-only-desc": "Chanji en tradukita pagini.",
+ "translate-rc-translation-filter-only": "Montrez nur tradukuri",
+ "translate-stats-edits": "Redakturi",
+ "translate-stats-users": "Tradukeri",
+ "translate-stats-registrations": "Enrejistruri",
+ "translate-stats-reviews": "Revizuri",
+ "translate-stats-reviewers": "Revizeri",
+ "translate-statsf-scale": "Tempo-skalo:",
+ "translate-statsf-scale-months": "Monati",
+ "translate-statsf-scale-weeks": "Semani",
+ "translate-statsf-scale-days": "Dii",
+ "translate-statsf-scale-hours": "Hori",
+ "translate-statsf-count-edits": "Quanto di redakturi",
+ "translate-statsf-count-users": "Aktiva tradukeri",
+ "translate-statsf-count-reviews": "Revizi di la tradukuri",
+ "translate-statsf-count-reviewers": "Revizeri",
+ "translate-statsf-submit": "Previdar",
+ "translate-tag-page-desc": "Tradukuro de la pagino wiki [[$2|$1]], de $3 ($4).",
+ "translate-sidebar-alltrans": "En altra lingui",
+ "translations": "Omna tradukuri",
+ "translations-summary": "Skribez la titulo di ula mesajo adinfre, por montrar omna tradukuri disponebla.",
+ "translate-translations-none": "Nula tradukuro existas por \"$1\"",
+ "translate-translations-count": "Trovita {{PLURAL:$1|1 tradukuro|$1 tradukuri}}.",
+ "translate-translations-fieldset-title": "Mesajo",
+ "translate-translations-messagename": "Nomo:",
+ "translate-translations-project": "Projeto:",
+ "languagestats": "Linguala statistiki",
+ "languagestats-summary": "Ica pagino montras statistiki pri tradukuri de omna mesajo-grupi por ula linguo specifika.",
+ "languagestats-stats-for": "Statistiki pri tradukuro $1 ($2).",
+ "languagestats-recenttranslations": "recenta tradukuri",
+ "translate-langstats-expand": "Montrez",
+ "translate-langstats-collapse": "Celez",
+ "translate-langstats-expandall": "expansar omna",
+ "translate-langstats-collapseall": "rekoliar omna",
+ "translate-language-code": "Linguala kodexo",
+ "translate-language-code-field-name": "Linguala kodexo:",
+ "translate-suppress-complete": "Supresar vidado dil grupi di mesaji komplete tradukita",
+ "translate-ls-noempty": "Supresar de la vidado la grupi di mesaji komplete sen tradukuro",
+ "translate-language": "Linguo",
+ "translate-total": "Mesaji",
+ "translate-percentage-fuzzy": "Sen aktualigo",
+ "translate-percentage-proofread": "Revizita",
+ "translate-languagestats-overall": "Omna grupi di mesaji kune",
+ "translate-ls-submit": "Montrez statistiki",
+ "translate-ls-column-group": "Grupo di mesaji",
+ "translate-mgs-pagename": "Statistiki pri la grupo di mesaji",
+ "translate-mgs-fieldset": "Montrez preferaji",
+ "translate-mgs-group": "Grupo di mesaji:",
+ "translate-mgs-column-language": "Linguo",
+ "supportedlanguages": "Suportita lingui",
+ "supportedlanguages-summary": "Ica pagino montras listo pri omna lingui suportida da {{SITENAME}}, kune la nomi di la tradukeri qui verkas en singla de la lingui.\nLa nomo dil tradukero videsas tante plu granda kam la quanto di redakti quin ilu facabas.\nLa koloro dil substrekizo indikas quan recenta esas la verko dil tradukero hike.",
+ "supportedlanguages-colorlegend": "Skalo di kolori: Lasta modifikuri dum la $1 dii.",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Tradukero}}|Tradukeri}}: $1",
+ "supportedlanguages-recenttranslations": "recenta tradukuri",
+ "supportedlanguages-count": "Entote $1 {{PLURAL:$1|linguo|lingui}}.",
+ "translate-supportedlanguages-cached": "Ca informo konservesis $1 ante nun.",
+ "managemessagegroups": "Administrado di mesajo-grupi",
+ "translate-smg-nochanges": "Existas nula modifiki por procedar.",
+ "translate-smg-left": "Kontenajo di la mesajo en la Wiki",
+ "translate-manage-action-import": "Importacar",
+ "translate-manage-import-rename-summary": "Rinomizita en extera fonto",
+ "translate-import-err-stale-group": "Ne existas la mesajo-grupo a quo ica arkivo apartenas.",
+ "translate-gs-code": "Kodexo",
+ "translate-gs-speakers": "Parolanti",
+ "translate-gs-multiple": "Multopla",
+ "translate-gs-avgscore": "Mezavalora puntizo",
+ "translate-documentation-language": "Dokumentado pri la mesajo",
+ "translate-searchprofile": "Tradukuri",
+ "translate-searchprofile-tooltip": "Serchez de omna tradukuri",
+ "log-description-translationreview": "Registro di omna tradukuro-revizuri e mesajo-grupi.",
+ "translate-workflowstatus": "Stando: $1",
+ "translate-stats-workflow": "Stando",
+ "translate-dynagroup-recent-label": "recenta tradukuri",
+ "translate-dynagroup-recent-desc": "Ica grupo di mesaji montras omna recenta tradukuri ad ica linguo.\nTo esas utila precipue por la revizo-taski.",
+ "translate-dynagroup-additions-label": "Recenta adjuntaji",
+ "translate-dynagroup-additions-desc": "Ica mesajo-grupo montras ambe la nova e la modifikita mesaji.",
+ "translate-msggroupselector-projects": "Grupo di mesaji",
+ "translate-msggroupselector-search-placeholder": "Serchez grupi",
+ "translate-msggroupselector-search-all": "Omni",
+ "translate-msggroupselector-search-recent": "Maxim recenta",
+ "tux-languageselector": "Tradukez a(d)",
+ "tux-tab-all": "Omna",
+ "tux-tab-untranslated": "Ne tradukita",
+ "tux-tab-outdated": "Sen aktualigo",
+ "tux-tab-translated": "Tradukita",
+ "tux-tab-unproofread": "Sen revizo",
+ "tux-edit": "Redaktar",
+ "tux-status-fuzzy": "Sen aktualigo",
+ "tux-save-unknown-error": "Eventis eroro nekonocata.",
+ "tux-editor-editsummary-placeholder": "Rezumo fakultativa",
+ "tux-editor-paste-original-button-label": "Kopiez l'originala texto",
+ "tux-editor-discard-changes-button-label": "Eliminar modifikuri",
+ "tux-editor-save-button-label": "Sparez la tradukuro",
+ "tux-editor-skip-button-label": "Saltez a la sequanta",
+ "tux-editor-cancel-button-label": "Nuligar",
+ "tux-editor-confirm-button-label": "Konfirmez tradukuro",
+ "tux-editor-proofread-button-label": "Indikar kom revizita",
+ "tux-editor-shortcut-info": "Kliktez \"$1\" por konservar, o \"$2\" por saltar a la sequanta mesajo, o \"$4\" por furnisar rezumo, o \"$3\" por altra plu kurta voyi tra la klavaro.",
+ "tux-editor-edit-desc": "Redaktar dokumentigo",
+ "tux-editor-add-desc": "Adjuntez dokumenti",
+ "tux-editor-suggestions-title": "Sugesti",
+ "tux-editor-in-other-languages": "En altra lingui",
+ "tux-editor-need-more-help": "Ka vu bezonas plusa helpo?",
+ "tux-editor-ask-help": "Demandez plusa informi",
+ "tux-notices-more": "{{PLURAL:$1|$1 pluse}}",
+ "tux-editor-save-failed": "Faliis pri konservar la tradukuro: $1",
+ "tux-editor-n-uses": "uzita $1 {{PLURAL:$1|foyo|foyi}}",
+ "tux-editor-message-desc-more": "Montrez pluse",
+ "tux-editor-message-desc-less": "Montrez mine",
+ "tux-editor-clear-translated": "Celar facita tradukuri",
+ "tux-editor-proofreading-mode": "Revizuri",
+ "tux-proofread-action-tooltip": "Indikar kom revizita",
+ "tux-proofread-edit-label": "Redaktar",
+ "tux-editor-page-mode": "Pagino",
+ "tux-editor-outdated-notice": "Ica tradukuro posible esas obsoleta.",
+ "tux-editor-outdated-notice-diff-link": "Montrez diferi",
+ "tux-editor-doc-editor-placeholder": "Dokumentado pri la mesajo",
+ "tux-editor-doc-editor-save": "Konservez dokumenturo",
+ "tux-editor-doc-editor-cancel": "Anular",
+ "tux-messagetable-more-messages": "$1 plusa {{PLURAL:$1|mesajo|mesaji}}",
+ "tux-messagetable-loading-messages": "Karganta {{PLURAL:$1|mesajo|mesaji}}...",
+ "tux-message-filter-placeholder": "Filtrez listo",
+ "tux-message-filter-optional-messages-label": "Fakultativa mesaji",
+ "tux-empty-list-all": "Ca mesajo-grupo esas vakua",
+ "tux-empty-list-all-guide": "Selektez diferanta mesajo-grupo por tradukar",
+ "tux-translate-page-no-such-group": "<strong>La grupo mencionita ne existas.</strong> Selektez altra diferanta grupo.",
+ "tux-empty-list-translated-action": "Tradukar",
+ "tux-empty-there-are-optional": "Existas fakultativa mesaji, ne montrata en ca listo",
+ "tux-empty-list-other": "Nulo por tradukar",
+ "tux-empty-list-other-guide": "Vu povas helpar per revizo di existanta tradukuri",
+ "tux-empty-list-other-action": "Revizar tradukuri",
+ "tux-empty-list-other-link": "Montrez omna mesaji",
+ "tux-editor-close-tooltip": "Klozez",
+ "tux-editor-message-tools-show-editor": "Montrar en la redakto-buxo dil Wiki",
+ "tux-editor-message-tools-delete": "Efacar",
+ "tux-editor-message-tools-translations": "Omna tradukuri",
+ "tux-editor-message-tools-linktothis": "Ligilo ad ica mesajo",
+ "tux-editor-loading": "Karganta...",
+ "translate-statsbar-tooltip": "$1% tradukita, $2% revizita",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% tradukita, $2% revizita, $3% desaktualigita",
+ "tux-session-expired": "Vu ne pluse esas enrejistrita. Voluntez rienirar, per altra pagino. Alternative, facez kopiuro di tradukuri ne enrejistrita, facez itere ''log in'', retrovenez a ca pagino, ed informez itere vua tradukuri.",
+ "tux-nojs": "Ca utensilo ne funcionas sen JavaScript. Sive JavaScript esas nekapabligata, sive ne funcionis, sive vua interreto-navigilo ('browser') ne suportas ol."
+}
diff --git a/Translate/i18n/core/is.json b/Translate/i18n/core/is.json
new file mode 100644
index 00000000..a6694f13
--- /dev/null
+++ b/Translate/i18n/core/is.json
@@ -0,0 +1,295 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bjarki S",
+ "Jóna Þórunn",
+ "LoveIceLang",
+ "S.Örvarr.S",
+ "Snævar",
+ "Spacebirdy",
+ "Sveinn í Felli"
+ ]
+ },
+ "translate": "Þýða",
+ "translate-extensionname": "Þýða",
+ "translate-desc": "[[Special:Translate|Kerfissíða]] til að þýða MediaWiki og önnur verkefni",
+ "translate-taskui-export-to-file": "Flytja út á innbyggðu sniði",
+ "translate-taction-translate": "Þýða",
+ "translate-taction-proofread": "Yfirferð",
+ "translate-taction-lstats": "Tölfræði tungumáls",
+ "translate-taction-mstats": "Tölfræði þýðingahópsins",
+ "translate-taction-export": "Flytja út",
+ "translate-taction-disabled": "Þessi aðgerð er óvirk á þessum wiki.",
+ "translate-page-no-such-language": "Tungumálið sem þú tilgreindir var ógilt",
+ "translate-page-no-such-group": "Hópurinn sem þú tilgreindir var ógildur.",
+ "translate-page-disabled": "Þýðingar á þessu tungumáli hafa verið óvirkjaðar.\nÁstæða:\n\n<em>$1</em>",
+ "translate-page-settings-legend": "Stillingar",
+ "translate-page-group": "Hópur",
+ "translate-page-language": "Tungumál",
+ "translate-page-limit": "Takmark",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|streng|strengi}} á hverri síðu",
+ "translate-submit": "Sækja",
+ "translate-page-navigation-legend": "Flakk",
+ "translate-page-showing": "Sýni strengi frá $1 til $2 af $3.",
+ "translate-page-showing-all": "Sýni $1 {{PLURAL:$1|streng|strengi}}.",
+ "translate-page-showing-none": "Engar meldingar til að sýna.",
+ "translate-next": "Næsta síða",
+ "translate-prev": "Fyrri síða",
+ "translate-page-description-legend": "Upplýsingar um hópinn",
+ "translate-page-description-hasoptional": "Þessi þýðingahópur inniheldur valfrjálsar þýðingastrengi.\nValfrjálsa þýðingastrengi ætti aðeins að þýða þegar tungumálið hefur sérstakar kröfur\neins og varðandi enga notkun á bilum eða umritun á nöfnum. $1",
+ "translate-page-description-hasoptional-open": "Sýna valfrjáls skilaboð",
+ "translate-page-edit": "breyta",
+ "translate-optional": "(valfrjálst)",
+ "translate-ignored": "(hunsað)",
+ "translate-edit-title": "Breyta \"$1\"",
+ "translate-edit-definition": "Útskýring á meldingu",
+ "translate-edit-contribute": "breyta",
+ "translate-edit-no-information": "<em>Þessi melding er ekki með neinar leiðbeiningar.\nEf þú veist hvar eða hvernig meldingin er notuð getur þú hjálpað öðrum þýðendum með því að bæta ábendingum við hana.</em>",
+ "translate-edit-information": "Upplýsingar um þessa meldingu ($1)",
+ "translate-edit-warnings": "Viðvaranir vegna ókláraðra þýðinga",
+ "translate-edit-tmmatch-source": "Uppruna texti þýðingarinnar: $1",
+ "translate-edit-tmmatch": "$1% samsvörun",
+ "translate-edit-nopermission": "Þú þarft þýðenda réttindi til að þýða skilaboð.",
+ "translate-edit-askpermission": "Fá réttindi",
+ "exporttranslations": "Flytja út þýðingar",
+ "translate-export-form-format": "Snið",
+ "translate-checks-parameters": "Eftirfarandi {{PLURAL:$2|færibreyta er ekki notuð|færibreytur eru ekki notaðar}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "Eftirfarandi {{PLURAL:$2|færibreyta er óþekkt|færibreytur eru óþekktar}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "Ójafn fjöldi {{PLURAL:$2|sviga}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "Eftirfarandi {{PLURAL:$2|tengill er vafasamur|$2 tenglar eru vafasamir}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "Eftirfarandi {{PLURAL:$2|tengil|$2 tengla}} vantar:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Skilgreiningin notar <nowiki>{{PLURAL:}}</nowiki> en ekki þýðingin.",
+ "translate-checks-pagename": "Nafnrýmið er annað en í skilgreiningunni.",
+ "translate-checks-format": "Þýðingin fylgir ekki skilgreiningunni eða hefur ógilda málskipan: $1",
+ "translate-checks-parametersnotequal": "Fjöldi stika er {{PLURAL:$1|$1}}, en ætti að vera {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> er ógilt.",
+ "translate-checks-fudforum-syntax": "Notaðu <nowiki>$1</nowiki> í staðinn fyrir <nowiki>$2</nowiki> í þessu verkefni.",
+ "translate-pref-editassistlang": "Aðstoðar tungumál:",
+ "prefs-translate": "Stillingar þýðinga",
+ "translate-pref-editassistlang-help": "Listi yfir tungumálakóða, aðskildir með kommu.\nSkilaboðin eru sýnd á þessum tungumálum þegar þú þýðir skilaboð.\nSjálfvirkur listi tungumála fer eftir tungumáli þínu.",
+ "translate-pref-editassistlang-bad": "Ógildur tungumálakóði í listanum:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Breyta með þýðingaviðmótinu",
+ "right-translate-manage": "Stjórna þýðingahópum",
+ "action-translate-manage": "stjórna þýðingahópum",
+ "right-translate-import": "Flytja inn utanaðkomandi þýðingar",
+ "action-translate-import": "flytja inn utanaðkomandi þýðingar",
+ "right-translate-messagereview": "Yfirfara þýðingar",
+ "action-translate-messagereview": "yfirfara þýðingar",
+ "translate-rcfilters-translations": "Þýðingar",
+ "translate-rcfilters-translations-only-label": "Þýðingar",
+ "translate-rcfilters-translations-filter-label": "Ekki þýðingar",
+ "translate-rcfilters-translations-filter-desc": "Allar breytingar sem ekki eru þýðingar.",
+ "translate-rc-translation-filter": "Sía þýðingar:",
+ "translate-rc-translation-filter-no": "Engin síun",
+ "translate-rc-translation-filter-only": "Sýna eingöngu þýðingar",
+ "translate-rc-translation-filter-filter": "Sía út þýðingar",
+ "translate-rc-translation-filter-site": "Breytingar á skilaboðum eingöngu",
+ "translationstats": "Tölfræði þýðinga",
+ "translate-stats-edits": "Breytingar",
+ "translate-stats-users": "Þýðendur",
+ "translate-stats-registrations": "Skráningar",
+ "translate-stats-reviews": "Yfirferðir",
+ "translate-stats-reviewers": "Ritstjórar",
+ "translate-statsf-intro": "Þú getur búið til einfalt línurit með þessu eyðublaði.\nÖll gildi hafa efri og neðri gildi.",
+ "translate-statsf-options": "Stillingar línuritsins",
+ "translate-statsf-width": "Breidd í dílum:",
+ "translate-statsf-height": "Hæð í dílum:",
+ "translate-statsf-start": "Upphafsdagur:",
+ "translate-statsf-scale": "Nákvæmni:",
+ "translate-statsf-scale-months": "Mánuðir",
+ "translate-statsf-scale-weeks": "Vikur",
+ "translate-statsf-scale-days": "Dagar",
+ "translate-statsf-scale-hours": "Klukkutímar",
+ "translate-statsf-count": "Mæling:",
+ "translate-statsf-count-edits": "Fjöldi breytinga",
+ "translate-statsf-count-users": "Virkir þýðendur",
+ "translate-statsf-count-registrations": "Nýjir notendur",
+ "translate-statsf-count-reviews": "Yfirferðir á þýðingum",
+ "translate-statsf-count-reviewers": "Ritstjórar",
+ "translate-statsf-language": "Listi yfir tungumálakóða, aðskildir með kommu:",
+ "translate-statsf-group": "Listi yfir hópa kóða, aðskildir með kommu:",
+ "translate-statsf-submit": "Forskoða",
+ "translate-tag-page-desc": "Þýðing á wiki síðunni [[$2|$1]] frá $3 ($4).",
+ "translate-sidebar-alltrans": "Á öðrum tungumálum",
+ "translations": "Allar þýðingar",
+ "translations-summary": "Sláðu inn heiti þýðingastrengja hér fyrir neðan til að sýna allar aðgengilegar þýðingar.",
+ "translate-translations-no-message": "Skilaboðin \"$1\" eru ekki þýðanleg",
+ "translate-translations-none": "Engar þýðingar til fyrir \"$1\"",
+ "translate-translations-count": "Fann $1 {{PLURAL:$1|þýðingu|þýðingar}}.",
+ "translate-translations-fieldset-title": "Melding",
+ "translate-translations-messagename": "Nafn:",
+ "translate-translations-project": "Verkefni:",
+ "translate-translations-including-no-param": "Vinsamlegast tilgreindu gildan lykil þýðingastrengs í viðfangi undirsíðunnar.",
+ "translate-translations-history-short": "f",
+ "languagestats": "Tölfræði tungumáls",
+ "languagestats-summary": "Þessi síða sýnir tölfræði þýðinga í öllum þýðingahópum fyrir tungumálið.",
+ "messagegroupstats-summary": "Þessi síða sýnir tölfræði þýðingahópa.",
+ "languagestats-stats-for": "Tölfræði þýðinga fyrir $1 ($2).",
+ "languagestats-recenttranslations": "nýlegar þýðingar",
+ "translate-langstats-incomplete": "Sum tölfræðin á síðunni er ónákvæm. Lestu síðuna inn aftur til að fá nákvæmari tölur.",
+ "translate-langstats-expand": "sýna",
+ "translate-langstats-collapse": "fela",
+ "translate-langstats-expandall": "sýna alla",
+ "translate-langstats-collapseall": "fela alla",
+ "translate-language-code": "Tungumálakóði",
+ "translate-language-code-field-name": "Tungumálakóði:",
+ "translate-suppress-complete": "Fela fullþýdda þýðingahópa",
+ "translate-ls-noempty": "Fela óþýdda þýðingahópa",
+ "translate-language": "Tungumál",
+ "translate-total": "Textastrengir",
+ "translate-untranslated": "Óþýtt",
+ "translate-percentage-complete": "Lokið",
+ "translate-percentage-fuzzy": "Úrelt",
+ "translate-percentage-proofread": "Yfirfarið",
+ "translate-languagestats-overall": "Allir þýðingahópar saman",
+ "translate-ls-submit": "Birta tölfræði",
+ "translate-ls-column-group": "Þýðingahópur",
+ "translate-mgs-pagename": "Tölfræði þýðingahópa",
+ "translate-mgs-fieldset": "Birtinga stillingar",
+ "translate-mgs-group": "Þýðingahópur:",
+ "translate-mgs-nocomplete": "Ekki sýna tungumál sem hafa lokið þýðingu",
+ "translate-mgs-noempty": "Ekki sýna tungumál sem hafa engar þýðingar",
+ "translate-mgs-submit": "Birta tölfræði",
+ "translate-mgs-column-language": "Tungumál",
+ "translate-mgs-totals": "Öll $1 {{PLURAL:$1|tungumál|tungumálin}} saman",
+ "translate-mgs-invalid-group": "Tilgreindi hópurinn $1 er ekki til.",
+ "translate-mgs-nothing": "Ekkert til að sýna fyrir umbeðna tölfræði.",
+ "supportedlanguages": "Virk tungumál",
+ "supportedlanguages-summary": "Þessi síða sýnir lista yfir öll virk tungumál á {{SITENAME}},\násamt nöfnum þýðenda á því tungumáli.\nStærð nafns þýðenda er í hlutfalli við breytingarfjölda hans.\nLitur undirstriksins undir nafninu gefur til kynna hversu langt sé síðan að þýðandinn hefur verið virkur.",
+ "supportedlanguages-colorlegend": "Litaskali: Síðasta þýðing fyrir $1 dögum síðan.",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Þýðandi}}|Þýðendur}}: $1",
+ "supportedlanguages-recenttranslations": "nýlegar þýðingar",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|tungumál}} alls.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|breyting|breytingar}} - síðasta breyting {{PLURAL:$3|í gær|fyrir $3 dögum}} síðan",
+ "translate-jssti-add": "Bæta við listann",
+ "managemessagegroups": "Stjórn þýðingahóps",
+ "translate-smg-notallowed": "Þú hefur ekki leyfi til að framkvæma þessa aðgerð.",
+ "translate-smg-nochanges": "Það eru engar breytingar til að vinna úr.",
+ "translate-smg-submit": "Senda breytingar til vinnslu",
+ "translate-manage-import-new": "Ný skilaboð $1",
+ "translate-manage-action-import": "Flytja inn",
+ "translate-manage-action-ignore": "Hunsa",
+ "translate-manage-import-summary": "Flytur inn nýja útgáfu úr ytri uppruna",
+ "translate-manage-submit": "Keyra",
+ "translate-manage-import-ok": "Innflutt: $1",
+ "translate-manage-import-done": "Innflutningi lokið",
+ "importtranslations": "Flytja inn þýðingar",
+ "translate-import-from-local": "Senda inn skrá af tölvunni:",
+ "translate-import-load": "Hlaða inn skrá",
+ "translate-import-err-ul-failed": "Sending skrár mistókst",
+ "translate-js-support-unsaved-warning": "Þú hefur óútgefnar þýðingar.",
+ "translate-gs-pos": "Staðs.",
+ "translate-gs-code": "Kóði",
+ "translate-gs-continent": "Heimsálfa",
+ "translate-gs-score": "Stig",
+ "translate-gs-multiple": "Margtyngt",
+ "translate-gs-count": "Fjöldi",
+ "translate-gs-total": "Samtals",
+ "translate-documentation-language": "Leiðbeiningar þýðingastrengs",
+ "translate-searchprofile": "Þýðingar",
+ "translate-searchprofile-tooltip": "Leita í öllum þýðingum",
+ "translate-search-languagefilter": "Sía eftir tungumáli:",
+ "translate-search-nofilter": "Engin sía",
+ "log-name-translationreview": "Aðtvikaskrá yfirferðar þýðinga",
+ "log-description-translationreview": "Atvikaskrá yfir allar yfirferðir á þýðingum og þýðingahópum.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|yfirfór}} þýðinguna $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|breytti}} stöðu $4 þýðinga af $3 frá $6 til $7",
+ "group-translate-sandboxed": "Ósamþykktir þýðendur",
+ "translate-workflow-state-": "(ekki sett)",
+ "translate-workflowstatus": "Staða: $1",
+ "translate-workflow-set-doing": "Set...",
+ "translate-stats-workflow": "Staða",
+ "translate-dynagroup-recent-label": "Nýlegar þýðingar",
+ "translate-msggroupselector-projects": "Þýðingahópur",
+ "translate-msggroupselector-search-placeholder": "Leita eftir hópum",
+ "translate-msggroupselector-search-all": "Allt",
+ "translate-msggroupselector-search-recent": "Nýlegt",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|undirhópur|undirhópar}}",
+ "tux-languageselector": "Þýða á",
+ "tux-tab-all": "Allar",
+ "tux-tab-untranslated": "Óþýtt",
+ "tux-tab-outdated": "Úrelt",
+ "tux-tab-translated": "Þýtt",
+ "tux-tab-unproofread": "Óyfirfarin",
+ "tux-edit": "Breyta",
+ "tux-status-optional": "Valfrjáls",
+ "tux-status-fuzzy": "Úreld",
+ "tux-status-proofread": "Yfirfarin",
+ "tux-status-translated": "Þýdd",
+ "tux-status-saving": "Gef út...",
+ "tux-status-unsaved": "Óútgefin",
+ "tux-save-unknown-error": "Óþekkt villa kom upp.",
+ "tux-editor-editsummary-placeholder": "Útskýrðu breytingarnar þínar (valfrjálst)",
+ "tux-editor-paste-original-button-label": "Líma upprunalegan texta",
+ "tux-editor-discard-changes-button-label": "Hunsa breytingar",
+ "tux-editor-save-button-label": "Gefa út þýðingu",
+ "tux-editor-skip-button-label": "Sleppa og yfir á næstu",
+ "tux-editor-cancel-button-label": "Hætta við",
+ "tux-editor-confirm-button-label": "Staðfesta þýðingu",
+ "tux-editor-proofread-button-label": "Merkja sem yfirfarið",
+ "tux-editor-shortcut-info": "Ýttu á „$1” til að staðfesta og fara áfram á næstu skilaboð, „$2” til að sleppa yfir á næstu, „$4” til að gefa skýringu eða eða haltu „$3” fyrir aðrar flýtileiðir.",
+ "tux-editor-edit-desc": "Breyta leiðbeiningum",
+ "tux-editor-add-desc": "Bæta við leiðbeiningum",
+ "tux-editor-suggestions-title": "Uppástungur",
+ "tux-editor-latest-updates-title": "Nýjustu uppfærslur",
+ "tux-editor-changes-without-summary": "$1 {{PLURAL:$1|uppfærsla|uppfærslur}} án breytingarágrips",
+ "tux-editor-all-changes": "Allar breytingar",
+ "tux-editor-in-other-languages": "Á öðrum tungumálum",
+ "tux-editor-need-more-help": "Þarftu meiri hjálp?",
+ "tux-editor-ask-help": "Spyrja um frekari upplýsingar",
+ "tux-editor-tm-match": "$1% samsvörun",
+ "tux-notices-more": "{{PLURAL:$1|$1 meira}}",
+ "tux-notices-hide": "fela",
+ "tux-editor-save-failed": "Útgáfa þýðingar mistókst: $1",
+ "tux-editor-n-uses": "notað $1 {{PLURAL:$1|sinni|sinnum}}",
+ "tux-editor-message-desc-more": "Skoða meira",
+ "tux-editor-message-desc-less": "Skoða minna",
+ "tux-editor-clear-translated": "Fela þýtt",
+ "tux-editor-proofreading-mode": "Yfirfara",
+ "tux-editor-translate-mode": "Listi",
+ "tux-editor-proofreading-hide-own-translations": "Fela þínar þýðingar",
+ "tux-editor-proofreading-show-own-translations": "Sýna þýnar þýðingar",
+ "tux-proofread-action-tooltip": "Merkja sem yfirfarið",
+ "tux-proofread-edit-label": "Breyta",
+ "tux-editor-page-mode": "Síða",
+ "tux-editor-outdated-notice": "Þessa þýðingu þyrfti kannski að uppfæra.",
+ "tux-editor-outdated-notice-diff-link": "Sýna mun",
+ "tux-editor-doc-editor-placeholder": "Leiðbeiningar þýðingastrengs",
+ "tux-editor-doc-editor-save": "Útgefa leiðbeiningar",
+ "tux-editor-doc-editor-cancel": "Hætta við",
+ "tux-messagetable-more-messages": "$1 fleiri {{PLURAL:$1|skilaboð}}",
+ "tux-messagetable-loading-messages": "Hleð {{PLURAL:$1|skilaboð}}...",
+ "tux-message-filter-placeholder": "Sía lista",
+ "tux-message-filter-result": "Fann $1 {{PLURAL:$1|niðurstöðu|niðurstöður}} fyrir \"$2\"",
+ "tux-message-filter-advanced-button": "Ítarleg leit",
+ "tux-message-filter-optional-messages-label": "Valfrjáls skilaboð",
+ "tux-proofread-translated-by-self": "Þýtt af þér",
+ "tux-empty-list-all": "Þessi þýðingahópur er tómur",
+ "tux-empty-list-all-guide": "Veldu annan þýðingahóp til að þýða",
+ "tux-translate-page-no-such-group": "<strong>Hópurinn sem þú valdir er ekki til.</strong> Veldu annan þýðingahóp.",
+ "tux-empty-list-translated": "Engin þýdd skilaboð",
+ "tux-empty-list-translated-guide": "Þú getur hjálpað við þýðingu",
+ "tux-empty-list-translated-action": "Þýða",
+ "tux-empty-no-messages-to-display": "Engin skilaboð til að sýna.",
+ "tux-empty-there-are-optional": "Það eru valfrjáls skilaboð sem ekki eru sýnd í listanum.",
+ "tux-empty-show-optional-messages": "Sýna valfrjáls skilaboð",
+ "tux-empty-no-outdated-messages": "Engin úreld skilaboð",
+ "tux-empty-nothing-to-proofread": "Ekkert til að yfirfara",
+ "tux-empty-you-can-help-providing": "Þú getur hjálpað til með nýjar þýðingar",
+ "tux-empty-list-other": "Ekkert til að þýða",
+ "tux-empty-list-other-guide": "Þú getur hjálpað til með því að yfirfara fyrirliggjandi þýðingar",
+ "tux-empty-list-other-action": "Yfirfara þýðingar",
+ "tux-empty-list-other-link": "Birta öll skilaboð",
+ "tux-editor-close-tooltip": "Loka",
+ "tux-editor-expand-tooltip": "Stækka",
+ "tux-editor-collapse-tooltip": "Fella saman",
+ "tux-editor-message-tools-history": "Breytingaskrá",
+ "tux-editor-message-tools-delete": "Eyða",
+ "tux-editor-message-tools-translations": "Allar þýðingar",
+ "tux-editor-loading": "Hleð...",
+ "translate-search-more-languages-info": "$1 annað {{PLURAL:$1|tungumál}}",
+ "translate-statsbar-tooltip": "$1% þýtt, $2% yfirfarið",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% þýtt, $2% yfirfarið, $3% úrelt",
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|hópur|hópar}} í viðbót",
+ "tux-nojs": "Þetta verkfæri virkar ekki ef slökkt er á JavaScript. JavaScript er óvirkt, það virkaði ekki, eða að þessi vafri er ekki studdur."
+}
diff --git a/Translate/i18n/core/it.json b/Translate/i18n/core/it.json
new file mode 100644
index 00000000..1656fdc4
--- /dev/null
+++ b/Translate/i18n/core/it.json
@@ -0,0 +1,402 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ajeje Brazorf",
+ "Albe Albe460",
+ "Amire80",
+ "Anto",
+ "Aushulz",
+ "Beta16",
+ "BrokenArrow",
+ "Civvì",
+ "Darth Kule",
+ "F. Cosoleto",
+ "Fringio",
+ "Gianfranco",
+ "Klutzy",
+ "Mannivu",
+ "Matteocng",
+ "McDutchie",
+ "Melos",
+ "Nemo bis",
+ "Pietrodn",
+ "Shirayuki",
+ "VittGam",
+ "Vituzzu"
+ ]
+ },
+ "translate": "Traduzione",
+ "translate-extensionname": "Traduci",
+ "translate-desc": "[[Special:Translate|Pagina speciale]] per tradurre MediaWiki e non solo",
+ "translate-taskui-export-to-file": "Esporta nel formato nativo",
+ "translate-taskui-export-as-po": "Esporta per la traduzione off-line",
+ "translate-taskui-export-as-csv": "Esporta in formato CSV",
+ "translate-taction-translate": "Traduci",
+ "translate-taction-proofread": "Revisiona",
+ "translate-taction-lstats": "Statistiche della lingua",
+ "translate-taction-mstats": "Statistiche del gruppo di messaggi",
+ "translate-taction-export": "Esporta",
+ "translate-taction-disabled": "Questa azione è disabilitata su questo wiki.",
+ "translate-page-no-such-language": "La lingua specificata non è valida.",
+ "translate-page-no-such-group": "Il gruppo specificato non è valido.",
+ "translate-page-disabled": "Le traduzioni in questa lingua per questo gruppo sono state disabilitate. Motivo:\n\n<em>$1</em>",
+ "translate-language-disabled": "Le traduzioni verso questa lingua sono disabilitate.",
+ "translate-page-settings-legend": "Impostazioni",
+ "translate-page-group": "Gruppo",
+ "translate-page-language": "Lingua",
+ "translate-page-limit": "Limite",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|messaggio|messaggi}} per pagina",
+ "translate-submit": "Ottieni",
+ "translate-page-navigation-legend": "Navigazione",
+ "translate-page-showing": "Mostrati i messaggi da $1 a $2 di $3.",
+ "translate-page-showing-all": "{{PLURAL:$1|Mostrato un messaggio|Mostrati $1 messaggi}}.",
+ "translate-page-showing-none": "Nessun messaggio da mostrare.",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "Pagina successiva",
+ "translate-prev": "Pagina precedente",
+ "translate-page-description-legend": "Informazioni sul gruppo",
+ "translate-page-description-hasoptional": "Questo gruppo di messaggi contiene dei messaggi opzionali.\nI messaggi opzionali dovrebbero essere tradotti solo quando la lingua ha dei requisiti speciali come il mancato utilizzo degli spazi o la traslitterazione dei nomi propri. $1",
+ "translate-page-description-hasoptional-open": "Mostra i messaggi opzionali.",
+ "translate-page-edit": "modifica",
+ "translate-optional": "(opzionale)",
+ "translate-ignored": "(ignorato)",
+ "translate-edit-title": "Modifica \"$1\"",
+ "translate-edit-definition": "Definizione del messaggio",
+ "translate-edit-contribute": "contribuisci",
+ "translate-edit-no-information": "<em>Questo messaggio non ha documentazione.\nSe sai dove o come è usato questo messaggio, puoi aiutare gli altri traduttori aggiungendo la documentazione a questo messaggio.</em>",
+ "translate-edit-information": "Informazioni sul messaggio ($1)",
+ "translate-edit-warnings": "Avvisi sulle traduzioni incomplete",
+ "translate-edit-tmmatch-source": "Testo di origine per la traduzione: $1",
+ "translate-edit-tmmatch": "$1&nbsp;% di corrispondenza",
+ "translate-edit-nopermission": "Hai bisogno dei diritti di traduzione per tradurre i messaggi.",
+ "translate-edit-askpermission": "Ottieni autorizzazione",
+ "exporttranslations": "Esporta traduzioni",
+ "translate-export-form-format": "Formato",
+ "translate-export-invalid-format": "Specifica un formato valido.",
+ "translate-export-not-supported": "L'esportazione delle traduzioni non è supportata.",
+ "translate-export-format-notsupported": "Il formato di esportazione specificato non è supportato dal gruppo messaggi.",
+ "translate-checks-parameters": "{{PLURAL:$2|Il seguente parametro non è stato usato|I seguenti parametri non sono stati usati}}: <strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Il seguente parametro è sconosciuto|I seguenti parametri sono sconosciuti}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "C'è un numero di {{PLURAL:$2|parentesi}} ineguale: <strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Il seguente collegamento è problematico|I seguenti $2 collegamenti sono problematici}}: <strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Il seguente collegamento è mancante|I seguenti $2 collegamenti sono mancanti}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "La definizione usa <nowiki>{{PLURAL:}}</nowiki> ma la traduzione no.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> è stato usato con {{PLURAL:$1|una forma|$1 forme}}, ma {{PLURAL:$2|è accettata solo una forma|sono accettate $2 forme}} (a parte le forme 0= e 1=).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> contiene una forma duplicata. <nowiki>{{PLURAL:$1|città|città}}</nowiki> dovrebbe essere scritto come <nowiki>{{PLURAL:$1|città}}</nowiki>.",
+ "translate-checks-gettext-plural-missing": "Questa traduzione deve avere <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-unsupported": "Questo messaggio non supporta <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-unicode-plural-missing": "Questa traduzione deve avere <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-unsupported": "Questo messaggio non supporta <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-invalid": "La forma plurale dovrebbe essere definita come $1. Questa traduzione contiene $2.",
+ "translate-checks-pagename": "Namespace cambiato rispetto alla definizione",
+ "translate-checks-format": "Questa traduzione non segue la definizione o ha una sintassi non valida: $1",
+ "translate-checks-escape": "{{PLURAL:$2|Il seguente carattere di escape potrebbe essere accidentale|I seguenti caratteri di escape potrebbero essere accidentali}}: <strong>$1</strong>. {{PLURAL:$4|Un carattere escape valido è|I caratteri escape validi sono:}} $3.",
+ "translate-checks-parametersnotequal": "Il numero dei parametri è {{PLURAL:$1|$1}}; dovrebbe essere {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> non è corretto.",
+ "translate-checks-fudforum-syntax": "In questo progetto usare <nowiki>$1</nowiki> invece di <nowiki>$2</nowiki>.",
+ "translate-checks-newline-missing-start": "{{PLURAL:$1|C'è|Ci sono}} $1 {{PLURAL:$1|carattere|caratteri}} di nuova riga mancanti all'inizio della traduzione.",
+ "translate-checks-newline-missing-end": "{{PLURAL:$1|C'è|Ci sono}} $1 {{PLURAL:$1|carattere|caratteri}} di nuova riga mancanti alla fine della traduzione.",
+ "translate-checks-newline-extra-start": "{{PLURAL:$1|C'è|Ci sono}} $1 {{PLURAL:$1|carattere|caratteri}} di nuova riga in più all'inizio della traduzione.",
+ "translate-checks-newline-extra-end": "{{PLURAL:$1|C'è|Ci sono}} $1 {{PLURAL:$1|carattere|caratteri}} di nuova riga in più alla fine della traduzione.",
+ "translate-checks-replacement": "Usa $2 anziché $1.",
+ "translate-pref-editassistlang": "Lingue di confronto:",
+ "prefs-translate": "Opzioni di traduzione",
+ "translate-pref-editassistlang-help": "Codici delle lingue separati da virgola.\nLe traduzioni di un messaggio in queste lingue sono mostrate durante la traduzione.\nL'elenco predefinito (default) delle lingue dipende dalla propria lingua.",
+ "translate-pref-editassistlang-bad": "Codice lingua non valido nell'elenco:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Modifica usando l'interfaccia di traduzione",
+ "right-translate-manage": "Gestisce gruppi di messaggi",
+ "action-translate-manage": "gestire i gruppi di messaggi",
+ "right-translate-import": "Importa traduzioni non in linea",
+ "action-translate-import": "importare le traduzioni non in linea",
+ "right-translate-messagereview": "Revisiona traduzioni",
+ "action-translate-messagereview": "revisionare traduzioni",
+ "right-translate-groupreview": "Cambia lo stato del processo di traduzione dei gruppi di messaggi",
+ "action-translate-groupreview": "cambiare lo stato del processo di traduzione dei gruppi di messaggi",
+ "translate-rcfilters-translations": "Traduzioni",
+ "translate-rcfilters-translations-only-label": "Traduzioni",
+ "translate-rcfilters-translations-only-desc": "Modifiche alle pagine tradotte.",
+ "translate-rcfilters-translations-filter-label": "Non traduzioni",
+ "translate-rcfilters-translations-filter-desc": "Tutte le modifiche che non sono traduzioni.",
+ "translate-rcfilters-translations-site-label": "Messaggi di sistema",
+ "translate-rcfilters-translations-site-desc": "Personalizzazione di messaggi di sistema nel namespace MediaWiki.",
+ "translate-rc-translation-filter": "Filtra le traduzioni:",
+ "translate-rc-translation-filter-no": "Non fare niente",
+ "translate-rc-translation-filter-only": "Mostra solo le traduzioni",
+ "translate-rc-translation-filter-filter": "Non mostrare le traduzioni",
+ "translate-rc-translation-filter-site": "Solo i cambiamenti ai messaggi del sito",
+ "translationstats": "Statistiche di traduzione",
+ "translate-stats-edits": "Modifiche",
+ "translate-stats-users": "Traduttori",
+ "translate-stats-registrations": "Registrazioni",
+ "translate-stats-reviews": "Versioni",
+ "translate-stats-reviewers": "Revisori",
+ "translate-statsf-intro": "È possibile generare semplici statistiche con questo modulo. Tutti i valori hanno limiti massimi e minimi.",
+ "translate-statsf-options": "Opzioni del grafico",
+ "translate-statsf-width": "Larghezza in pixel:",
+ "translate-statsf-height": "Altezza in pixel:",
+ "translate-statsf-days": "Periodo di tempo in giorni:",
+ "translate-statsf-start": "Data di inizio:",
+ "translate-statsf-scale": "Un punto ogni:",
+ "translate-statsf-scale-years": "Anni",
+ "translate-statsf-scale-months": "Mesi",
+ "translate-statsf-scale-weeks": "Settimana",
+ "translate-statsf-scale-days": "Giorni",
+ "translate-statsf-scale-hours": "Ore",
+ "translate-statsf-count": "Misura:",
+ "translate-statsf-count-edits": "Numero di modifiche",
+ "translate-statsf-count-users": "Traduttori attivi",
+ "translate-statsf-count-registrations": "Nuovi utenti",
+ "translate-statsf-count-reviews": "Revisioni di traduzioni",
+ "translate-statsf-count-reviewers": "Revisori",
+ "translate-statsf-language": "Elenco dei codici delle lingue separati da virgola:",
+ "translate-statsf-group": "Elenco dei codici dei gruppi separati da virgola:",
+ "translate-statsf-submit": "Anteprima",
+ "translate-statsf-unknown-error": "Si è verificato un errore sconosciuto.",
+ "translate-tag-page-desc": "Traduzione della pagina wiki [[$2|$1]] da $3 ($4).",
+ "translate-sidebar-alltrans": "In altre lingue",
+ "translations": "Tutte le traduzioni",
+ "translations-summary": "Inserire di seguito il nome di un messaggio per mostrare tutte le traduzioni presenti.",
+ "translate-translations-no-message": "\"$1\" non è un messaggio traducibile",
+ "translate-translations-none": "Non sono presenti traduzioni per \"$1\"",
+ "translate-translations-count": "{{PLURAL:$1|Trovata una traduzione|Trovate $1 traduzioni}}.",
+ "translate-translations-fieldset-title": "Messaggio",
+ "translate-translations-messagename": "Nome:",
+ "translate-translations-project": "Progetto:",
+ "translate-translations-including-no-param": "Specificare una chiave di messaggio valida nella sottopagina-parametro",
+ "translate-translations-history-short": "h",
+ "languagestats": "Statistiche della lingua",
+ "languagestats-summary": "Questa pagina mostra le statistiche delle traduzioni per tutti i gruppi di messaggi di una lingua.",
+ "messagegroupstats-summary": "Questa pagina mostra le statistiche per i gruppi di messaggi.",
+ "languagestats-stats-for": "Statistiche delle traduzioni per $1 ($2).",
+ "languagestats-recenttranslations": "traduzioni recenti",
+ "translate-langstats-incomplete": "Alcune statistiche di questa pagina sono incomplete, ricaricare la pagina per averne di più complete.",
+ "translate-langstats-expand": "espandi",
+ "translate-langstats-collapse": "comprimi",
+ "translate-langstats-expandall": "espandi tutto",
+ "translate-langstats-collapseall": "comprimi tutto",
+ "translate-language-code": "Codice lingua",
+ "translate-language-code-field-name": "Codice lingua:",
+ "translate-suppress-complete": "Nascondi i gruppi di messaggi completamente tradotti",
+ "translate-ls-noempty": "Nascondi i gruppi di messaggi non tradotti affatto",
+ "translate-language": "Lingua",
+ "translate-total": "Messaggi",
+ "translate-untranslated": "Non tradotti",
+ "translate-percentage-complete": "Completati",
+ "translate-percentage-fuzzy": "Da aggiornare",
+ "translate-languagestats-overall": "Tutti i gruppi di messaggi insieme",
+ "translate-ls-submit": "Mostra statistiche",
+ "translate-ls-column-group": "Gruppo di messaggi",
+ "translate-mgs-pagename": "Statistiche del gruppo di messaggi",
+ "translate-mgs-fieldset": "Mostra preferenze",
+ "translate-mgs-group": "Gruppo di messaggi:",
+ "translate-mgs-nocomplete": "Non visualizzare lingue che hanno la traduzione completata",
+ "translate-mgs-noempty": "Non visualizzare lingue che non hanno traduzioni",
+ "translate-mgs-submit": "Mostra statistiche",
+ "translate-mgs-column-language": "Lingua",
+ "translate-mgs-totals": "Tutte le $1 {{PLURAL:$1|lingua|lingue}} insieme",
+ "translate-mgs-invalid-group": "Il gruppo indicato $1 non esiste.",
+ "translate-mgs-nothing": "Nulla da mostrare per le statistiche richieste.",
+ "supportedlanguages": "Lingue attive",
+ "supportedlanguages-summary": "Questa pagina mostra un elenco di tutte le lingue attive in {{SITENAME}}, insieme ai nomi dei traduttori che hanno lavorato su quella lingua. Il nome di un traduttore appare di dimensioni maggiori in proporzione al numero di modifiche che ha apportato, mentre il colore della sottolineatura indica quanto tempo è passato dalla sua ultima attività.",
+ "supportedlanguages-colorlegend": "Legenda dei colori: ultima traduzione $1 giorni fa.",
+ "supportedlanguages-portallink": "[$1] $2 - $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-sqlite-error": "SQLite non è supportato",
+ "supportedlanguages-postgres-error": "PostgreSQL non è supportato",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Traduttore|Traduttrice}}|Traduttori}}: $1",
+ "supportedlanguages-recenttranslations": "traduzioni recenti",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|lingua|lingue}} in totale.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|modifica|modifiche}} - ultima modifica $3 {{PLURAL:$3|giorno|giorni}} fa",
+ "translate-activelanguages-invalid-code": "Il codice lingua \"$1\" è sconosciuto o non è abilitato per la traduzione.",
+ "abusefilter-edit-builder-vars-translate-source-text": "Testo di origine di un'unità di traduzione",
+ "abusefilter-edit-builder-vars-translate-target-language": "Lingua di destinazione per la traduzione",
+ "translate-jssti-add": "Aggiungi all'elenco",
+ "managemessagegroups": "Gestione del gruppo di messaggi",
+ "translate-smg-notallowed": "Non sei autorizzato a eseguire questa azione.",
+ "translate-smg-nochanges": "Non ci sono modifiche da elaborare.",
+ "translate-smg-submit": "Invia le modifiche per l'elaborazione",
+ "translate-smg-submitted": "Le definizioni dei messaggi sono state aggiornate. Le modifiche saranno elaborate in background.",
+ "translate-smg-more": "Ci saranno ulteriori cambiamenti da trattare dopo l'invio di queste modifiche.",
+ "translate-smg-left": "Contenuto del messaggio nel wiki",
+ "translate-smg-right": "Modifiche in arrivo",
+ "translate-smg-rename-select": "Seleziona",
+ "translate-smg-rename-cancel": "Annulla",
+ "translate-smg-rename-no-msg": "Nessun messaggio trovato.",
+ "translate-smg-rename-new": "Aggiungi come nuovo...",
+ "translate-smg-strong-sync-help": "Aiuto",
+ "translate-smg-group-with-error-summary": "$1 {{PLURAL:$1|messaggio|messaggi}} con errori:",
+ "translate-smg-group-message-tag-rename": "Rinomina",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|Etichetta|Etichette}}:",
+ "translate-smg-group-message-message-content": "Contenuto:",
+ "translate-smg-group-message-message-target": "Obiettivo:",
+ "translate-smg-group-message-message-other-langs": "Altre lingue:",
+ "translate-manage-import-diff": "Messaggio $1 | Azioni: $2",
+ "translate-manage-import-new": "Nuovo messaggio $1",
+ "translate-manage-import-deleted": "Cancellato messaggio $1",
+ "translate-manage-action-import": "Importa",
+ "translate-manage-action-conflict": "Importa e richiedi aggiornamento",
+ "translate-manage-action-ignore": "Ignora",
+ "translate-manage-action-fuzzy": "Importa e richiedi aggiornamento",
+ "translate-manage-nochanges": "Non ci sono cambiamenti nelle definizioni dei messaggi per questo gruppo.",
+ "translate-manage-nochanges-other": "Non c'era alcuna novità per questa lingua.\nUsa il collegamento sottostante per rivedere i dettagli del gruppo.",
+ "translate-manage-inconsistent": "È stata rilevata un'incoerenza nella richiesta.\nCerca i cambiamenti e riprova.\nDettagli: $1",
+ "translate-manage-toolong": "Il tempo massimo di elaborazione di $1 {{PLURAL:$1|secondo|secondi}} si è esaurito.\nInviare nuovamente il modulo per proseguire nell'elaborazione.",
+ "translate-manage-import-summary": "Importazione di una nuova versione da una fonte esterna",
+ "translate-manage-import-ignore": "Salta messaggio $1.",
+ "translate-manage-conflict-summary": "Importazione di una nuova versione da una fonte esterna.\nDa controllare.",
+ "translate-manage-submit": "Esegui",
+ "translate-manage-intro-other": "Di seguito sono elencati i cambiamenti alle traduzioni nella lingua $1.\nControlla le modifiche e scegli l'azione da eseguire per ciascun messaggio.\nSe scegli di ignorare i cambiamenti, questa azione sarà solo temporanea.",
+ "translate-manage-import-ok": "Importato: $1",
+ "translate-manage-import-done": "Importazione completa!",
+ "translate-manage-source-message-not-found": "Definizione messaggio non trovata",
+ "importtranslations": "Importa traduzioni",
+ "translate-import-from-local": "Carica file locale:",
+ "translate-import-load": "Carica file",
+ "translate-import-err-dl-failed": "Impossibile recuperare il file:\n$1",
+ "translate-import-err-ul-failed": "Caricamento del file non riuscito",
+ "translate-import-err-invalid-title": "Il nome del file <nowiki>$1</nowiki> non è valido.",
+ "translate-import-err-no-such-file": "Il file <nowiki>$1</nowiki> non esiste o non è stato caricato a livello locale.",
+ "translate-import-err-stale-group": "Il gruppo di messaggi a cui appartiene questo file non esiste.",
+ "translate-import-err-no-headers": "Il file non è un file Gettext correttamente formattato per l'estensione Translate:\nImpossibile determinare il gruppo di messaggi e la lingua dalle intestazioni del file.",
+ "translate-js-support-unsaved-warning": "Ci sono traduzioni non pubblicate.",
+ "translate-gs-pos": "Pos.",
+ "translate-gs-code": "Codice",
+ "translate-gs-continent": "Continente",
+ "translate-gs-speakers": "Diffusione",
+ "translate-gs-score": "Punteggio",
+ "translate-gs-multiple": "Più di uno",
+ "translate-gs-count": "Numero di lingue",
+ "translate-gs-total": "Totale",
+ "translate-gs-avgscore": "Punteggio medio",
+ "translate-documentation-language": "Documentazione del messaggio",
+ "translate-searchprofile": "Traduzioni",
+ "translate-searchprofile-tooltip": "Cerca in tutte le traduzioni",
+ "translate-searchprofile-note": "Opzioni di ricerca ulteriori disponibili con la [$1 ricerca di traduzioni].",
+ "translate-search-languagefilter": "Filtro per lingua",
+ "translate-search-nofilter": "Nessun filtraggio",
+ "log-name-translationreview": "Revisioni delle traduzioni",
+ "log-description-translationreview": "Registro di tutte le revisioni delle traduzioni e dei gruppi di messaggi.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|ha revisionato}} la traduzione di $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|ha cambiato}} lo stato delle traduzioni in $4 di $3 da $6 a $7",
+ "group-translate-sandboxed": "Traduttori non approvati",
+ "group-translate-sandboxed-member": "{{GENDER:$1|traduttore non approvato|traduttrice non approvata|traduttore/trice non approvato/a}}",
+ "right-translate-sandboxmanage": "Gestisce gli utenti in modalità sandbox",
+ "action-translate-sandboxmanage": "gestire gli utenti in modalità sandbox",
+ "right-translate-sandboxaction": "Esegue azioni consentite per gli utenti in modalità sandbox",
+ "action-translate-sandboxaction": "eseguire azioni consentite per gli utenti in modalità sandbox",
+ "translate-workflow-state-": "(disattivato)",
+ "translate-workflowstatus": "Stato: $1",
+ "translate-workflow-set-doing": "Modifica in corso",
+ "translate-workflow-autocreated-summary": "Creazione automatica della pagina per lo stato del flusso di lavoro $1",
+ "translate-stats-workflow": "Stato",
+ "translate-workflowgroup-label": "Stati del flusso di lavoro",
+ "translate-workflowgroup-desc": "Questo gruppo messaggi mostra gli stati del flusso di lavoro per le traduzioni.\nGli stati sono definiti nella variabile di configurazione $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Traduzioni recenti",
+ "translate-dynagroup-recent-desc": "Questo gruppo messaggi mostra tutte le ultime traduzioni in questa lingua.\nUtile per l'attività di revisione.",
+ "translate-dynagroup-additions-label": "Aggiunte recenti",
+ "translate-dynagroup-additions-desc": "Questo gruppo messaggi mostra i messaggi nuovi o modificati.",
+ "translate-msggroupselector-projects": "Gruppo di messaggi",
+ "translate-msggroupselector-search-placeholder": "Ricerca gruppi",
+ "translate-msggroupselector-search-all": "Tutti",
+ "translate-msggroupselector-search-recent": "Recenti",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|sotto-gruppo|sotto-gruppi}}",
+ "tux-languageselector": "Traduci in",
+ "tux-select-target-language": "Lingua di destinazione per la traduzione",
+ "tux-tab-all": "Tutti",
+ "tux-tab-untranslated": "Non tradotti",
+ "tux-tab-outdated": "Da aggiornare",
+ "tux-tab-translated": "Tradotti",
+ "tux-tab-unproofread": "Da revisionare",
+ "tux-edit": "Modifica",
+ "tux-status-optional": "Opzionale",
+ "tux-status-fuzzy": "Da aggiornare",
+ "tux-status-proofread": "Revisionata",
+ "tux-status-translated": "Tradotto",
+ "tux-status-saving": "Pubblicazione...",
+ "tux-status-unsaved": "Non pubblicate",
+ "tux-save-unknown-error": "Si è verificato un errore sconosciuto.",
+ "tux-editor-placeholder-documentation": "Aggiungi documentazione del messaggio",
+ "tux-editor-placeholder-language": "La tua traduzione in $1",
+ "tux-editor-editsummary-placeholder": "Spiega le tue modifiche (facoltativo)",
+ "tux-editor-paste-original-button-label": "Incolla il testo sorgente",
+ "tux-editor-discard-changes-button-label": "Ignora modifiche",
+ "tux-editor-save-button-label": "Pubblica traduzione",
+ "tux-editor-skip-button-label": "Passa al successivo",
+ "tux-editor-cancel-button-label": "Annulla",
+ "tux-editor-confirm-button-label": "Conferma traduzione",
+ "tux-editor-proofread-button-label": "Contrassegna come revisionata",
+ "tux-editor-shortcut-info": "Premi \"$1\" per confermare e passare al prossimo messaggio, \"$2\" per saltare, \"$4\" per fornire un riassunto o \"$3\" per vedere altre scorciatoie.",
+ "tux-editor-edit-desc": "Modifica documentazione",
+ "tux-editor-add-desc": "Aggiungi documentazione",
+ "tux-editor-suggestions-title": "Suggerimenti",
+ "tux-editor-latest-updates-title": "Ultimi aggiornamenti",
+ "tux-editor-all-changes": "Tutte le modifiche",
+ "tux-editor-in-other-languages": "In altre lingue",
+ "tux-editor-need-more-help": "Hai bisogno di aiuto?",
+ "tux-editor-ask-help": "Chiedi per maggiori informazioni",
+ "tux-editor-tm-match": "$1&nbsp;% di corrispondenza",
+ "tux-notices-more": "$1 {{PLURAL:$1|altro|altri}}",
+ "tux-notices-hide": "nascondi",
+ "tux-editor-save-failed": "Errore durante la pubblicazione della traduzione: $1",
+ "tux-editor-n-uses": "usato $1 {{PLURAL:$1|volta|volte}}",
+ "tux-editor-message-desc-more": "Mostra altri",
+ "tux-editor-message-desc-less": "Mostra meno",
+ "tux-editor-clear-translated": "Nascondi tradotti",
+ "tux-editor-proofreading-mode": "Revisiona",
+ "tux-editor-translate-mode": "Elenca",
+ "tux-editor-proofreading-hide-own-translations": "Nascondi le tue traduzioni",
+ "tux-editor-proofreading-show-own-translations": "Mostra le tue traduzioni",
+ "tux-proofread-action-tooltip": "Contrassegna come revisionata",
+ "tux-proofread-edit-label": "Modifica",
+ "tux-editor-page-mode": "Pagina",
+ "tux-editor-outdated-notice": "Questa traduzione deve essere aggiornata.",
+ "tux-editor-outdated-notice-diff-link": "Mostra le differenze",
+ "tux-editor-doc-editor-placeholder": "Documentazione del messaggio",
+ "tux-editor-doc-editor-save": "Pubblica documentazione",
+ "tux-editor-doc-editor-cancel": "Annulla",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|altro messaggio|altri messaggi}}",
+ "tux-messagetable-loading-messages": "Carico {{PLURAL:$1|messaggio|messaggi}}...",
+ "tux-message-filter-placeholder": "Filtra la lista",
+ "tux-message-filter-result": "{{PLURAL:$1|Trovato|Trovati}} $1 {{PLURAL:$1|risultato|risultati}} per \"$2\"",
+ "tux-message-filter-advanced-button": "Ricerca avanzata",
+ "tux-message-filter-optional-messages-label": "Messaggi opzionali",
+ "tux-proofread-translated-by-self": "Tradotto da te",
+ "tux-empty-list-all": "Questo gruppo di messaggio è vuoto",
+ "tux-empty-list-all-guide": "Selezionare un gruppo di messaggi diverso da tradurre",
+ "tux-translate-page-no-such-group": "<strong>Il gruppo indicato non esiste.</strong> Seleziona un gruppo messaggi differente.",
+ "tux-empty-list-translated": "Nessun messaggio tradotto",
+ "tux-empty-list-translated-guide": "Puoi aiutare a tradurre",
+ "tux-empty-list-translated-action": "Traduci",
+ "tux-empty-no-messages-to-display": "Nessun messaggio da visualizzare.",
+ "tux-empty-there-are-optional": "Ci sono messaggi opzionali non mostrati nell'elenco",
+ "tux-empty-show-optional-messages": "Mostra i messaggi opzionali",
+ "tux-empty-no-outdated-messages": "Nessun messaggio da aggiornare",
+ "tux-empty-nothing-to-proofread": "Non c'è nulla da revisionare",
+ "tux-empty-you-can-help-providing": "Puoi aiutare fornendo nuove traduzioni",
+ "tux-empty-nothing-new-to-proofread": "Niente di nuovo da revisionare",
+ "tux-empty-you-can-review-already-proofread": "È possibile rivedere le traduzioni già revisionate da altri.",
+ "tux-empty-list-other": "Niente da tradurre",
+ "tux-empty-list-other-guide": "Puoi aiutare a rivedere le traduzioni esistenti",
+ "tux-empty-list-other-action": "Revisiona traduzioni",
+ "tux-empty-list-other-link": "Mostra tutti i messaggi",
+ "tux-editor-close-tooltip": "Chiudi",
+ "tux-editor-expand-tooltip": "Espandi",
+ "tux-editor-collapse-tooltip": "Comprimi",
+ "tux-editor-message-tools-show-editor": "Mostra nell'editor wiki",
+ "tux-editor-message-tools-history": "Cronologia",
+ "tux-editor-message-tools-delete": "Cancella",
+ "tux-editor-message-tools-translations": "Tutte le traduzioni",
+ "tux-editor-message-tools-linktothis": "Collegamenti a questo messaggio",
+ "tux-editor-loading": "Caricamento in corso...",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|altra lingua|altre lingue}}",
+ "translate-statsbar-tooltip": "$1% tradotti, $2% revisionati",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% tradotti, $2% revisionati, $3% da aggiornare",
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|altro gruppo|altri gruppi}}",
+ "translate-syntax-error": "La traduzione contiene errori di sintassi",
+ "tux-session-expired": "Non hai effettuato l'accesso. Accedi in una scheda separata; o in alternativa copia la traduzione non salvata, accedi, ritorna in questa pagina e inserisci nuovamente la tua traduzione.",
+ "tux-nojs": "Questo strumento non funziona senza JavaScript. JavaScript potrebbe essere disattivato, non ha funzionato o questo browser non è supportato.",
+ "specialpages-group-translation": "Traduzione",
+ "translate-messagebundle-error-key-too-long": "La chiave \"$1\" è troppo lunga",
+ "translate-messagebundle-error-empty-value": "La chiave \"$1\" non ha un valore",
+ "log-action-filter-translationreview": "Tipo di azione:"
+}
diff --git a/Translate/i18n/core/ja.json b/Translate/i18n/core/ja.json
new file mode 100644
index 00000000..8b86afef
--- /dev/null
+++ b/Translate/i18n/core/ja.json
@@ -0,0 +1,414 @@
+{
+ "@metadata": {
+ "authors": [
+ "2nd-player",
+ "Aefgh39622",
+ "Afaz",
+ "Akaniji",
+ "Aotake",
+ "Fryed-peach",
+ "Gminky",
+ "Hosiryuhosi",
+ "JtFuruhata",
+ "Kkairri",
+ "Klutzy",
+ "Marine-Blue",
+ "MathXplore",
+ "Naohiro19",
+ "Ohgi",
+ "Omotecho",
+ "Otokoume",
+ "Rxy",
+ "Schu",
+ "Shirayuki",
+ "Sujiniku",
+ "TKsdik8900",
+ "Tamaki Wakita",
+ "Whym",
+ "神樂坂秀吉",
+ "青子守歌",
+ "아라"
+ ]
+ },
+ "translate": "翻訳",
+ "translate-extensionname": "翻訳",
+ "translate-desc": "MediaWiki やその他のものを翻訳するための[[Special:Translate|特別ページ]]",
+ "translate-fuzzybot-desc": "これは、MediaWikiの[https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate Translate拡張機能]が、翻訳のメンテナンスに使用する特別なシステム・アカウントです。\nこのアカウントはMediaWikiソフトウェアの一部であり、利用者によって所有されていません。",
+ "translate-taskui-export-to-file": "ネイティブ形式で書き出し",
+ "translate-taskui-export-as-po": "オフライン翻訳のために書き出し",
+ "translate-taction-translate": "翻訳",
+ "translate-taction-proofread": "査読",
+ "translate-taction-lstats": "言語別翻訳状況",
+ "translate-taction-mstats": "メッセージ群別の翻訳状況",
+ "translate-taction-export": "書き出し",
+ "translate-taction-disabled": "このウィキではこの操作は無効になっています。",
+ "translate-page-no-such-language": "言語の指定が正しくありません。",
+ "translate-page-no-such-group": "群の指定が正しくありません。",
+ "translate-page-disabled": "この群では、この言語への翻訳は停止されています。\n理由:\n\n<em>$1</em>",
+ "translate-language-disabled": "この言語への翻訳は無効になっています。",
+ "translate-page-settings-legend": "設定",
+ "translate-page-group": "群",
+ "translate-page-language": "言語",
+ "translate-page-limit": "表示数",
+ "translate-page-limit-option": "ページごとに$1{{PLURAL:$1|個のメッセージ}}",
+ "translate-submit": "取得",
+ "translate-page-navigation-legend": "ナビゲーション",
+ "translate-page-showing": "$3 件のメッセージのうち、$1 件目から $2 件目までを表示しています。",
+ "translate-page-showing-all": "$1 {{PLURAL:$1|件のメッセージ}}を表示しています。",
+ "translate-page-showing-none": "表示するメッセージがありません。",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "次のページ",
+ "translate-prev": "前のページ",
+ "translate-page-description-legend": "この群についての情報",
+ "translate-page-description-hasoptional": "このメッセージ群には省略可能なメッセージがあります。\n省略可能なメッセージは、その言語で特別な必要性 (空白の除去、固有名詞の翻字など) がある場合のみ翻訳してください。$1",
+ "translate-page-description-hasoptional-open": "省略可能なメッセージを表示する。",
+ "translate-page-edit": "編集",
+ "translate-optional": "(省略可能)",
+ "translate-ignored": "(翻訳無視)",
+ "translate-edit-title": "「$1」を編集",
+ "translate-edit-definition": "メッセージ定義",
+ "translate-edit-contribute": "編集",
+ "translate-edit-no-information": "<em>このメッセージについての説明文はありません。\nこのメッセージがどこでどのように使用されているか知っている場合は、説明文を投稿して他の翻訳者を助けてください。</em>",
+ "translate-edit-information": "メッセージについての情報 ($1)",
+ "translate-edit-warnings": "不完全な翻訳に対する警告",
+ "translate-edit-tmmatch-source": "翻訳元の文章: $1",
+ "translate-edit-tmmatch": "$1%の一致",
+ "translate-edit-nopermission": "メッセージを翻訳する権限が必要です。",
+ "translate-edit-askpermission": "権限を取得",
+ "exporttranslations": "翻訳の書き出し",
+ "translate-export-form-format": "形式",
+ "translate-export-invalid-format": "有効な形式を指定してください。",
+ "translate-export-not-supported": "翻訳の書き出しはサポートされていません。",
+ "translate-export-format-notsupported": "指定された書き出しの形式は、メッセージ群でサポートされていません。",
+ "translate-checks-parameters": "以下の{{PLURAL:$2|パラメーター}}が使用されていません:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "以下の{{PLURAL:$2|パラメーター}}が未定義です:\n<strong>$1</strong>",
+ "translate-checks-balance": "{{PLURAL:$2|括弧}}の個数が一致していません:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "以下の{{PLURAL:$2|リンク|​&#32;$2 個のリンク}}に問題点があります:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "以下の{{PLURAL:$2|リンク|​&#32;$2 個のリンク}}がありません:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "定義に<nowiki>{{PLURAL:}}</nowiki>がありますが、翻訳にはありません。",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> で {{PLURAL:$1|$1 形式}}を指定しましたが、{{PLURAL:$2|1 形式のみ|$2 形式}}に対応しています (0= 形式および 1= 形式を除く)。",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> での指定が重複しています。<nowiki>{{PLURAL:$1|sheep|sheep}}</nowiki> であれば <nowiki>{{PLURAL:$1|sheep}}</nowiki> と書いてください。",
+ "translate-checks-gettext-plural-missing": "この翻訳には<nowiki>{{PLURAL:GETTEXT|}}</nowiki>が必要です。",
+ "translate-checks-gettext-plural-unsupported": "このメッセージは<nowiki>{{PLURAL:GETTEXT|}}</nowiki>をサポートしていません。",
+ "translate-checks-gettext-plural-count": "<nowiki>{{PLURAL:GETTEXT|}}</nowiki>には正確に$1 {{PLURAL:$1|複数形|複数形}}のみ当てはまります。現在、$2 {{PLURAL:$2|複数形が|複数形が}}入力されています。",
+ "translate-checks-unicode-plural-missing": "この翻訳には<nowiki>{{PLURAL|}}</nowiki>が必要です。",
+ "translate-checks-unicode-plural-unsupported": "このメッセージは<nowiki>{{PLURAL|}}</nowiki>をサポートしていません。",
+ "translate-checks-unicode-plural-invalid": "複数形の定義は$1にする必要があります。この翻訳には$2が含まれています。",
+ "translate-checks-pagename": "名前空間が変更されており、定義と異なっています",
+ "translate-checks-format": "この翻訳は定義に沿っていない、または無効な構文を使用しています: $1",
+ "translate-checks-escape": "以下のエスケープ{{PLURAL:$2|文字列}}は偶発的なものかもしれません: <strong>$1</strong>。{{PLURAL:$4|有効なエスケープ記号}}は$3です。",
+ "translate-checks-parametersnotequal": "引数の数が{{PLURAL:$1|$1}}個ですが、{{PLURAL:$2|$2}}個である必要があります。",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> の形式に誤りがあります。",
+ "translate-checks-fudforum-syntax": "このプロジェクトでは<nowiki>$2</nowiki>の代わりに<nowiki>$1</nowiki>を使用します。",
+ "translate-checks-newline-missing-start": "翻訳の冒頭で新しい行の{{PLURAL:$1|文字列|文字列}}$1個{{PLURAL:$1|が|が}}不足しています。",
+ "translate-checks-replacement": "$1 の代わりに $2 を使用してください。",
+ "translate-pref-editassistlang": "補助言語:",
+ "prefs-translate": "翻訳設定",
+ "translate-pref-editassistlang-help": "言語コードをカンマ区切りで列挙します。\n翻訳中に、これらの言語での翻訳が表示されます。\n既定の言語一覧は、自身の言語により変化します。",
+ "translate-pref-editassistlang-bad": "無効な言語コードを含んでいます:\n<nowiki>$1</nowiki>",
+ "right-translate": "翻訳用インターフェイスを使用して編集",
+ "action-translate": "翻訳用インターフェイスを使用した編集",
+ "right-translate-manage": "メッセージ群を管理",
+ "action-translate-manage": "メッセージ群の管理",
+ "right-translate-import": "オフラインでの翻訳を取り込み",
+ "action-translate-import": "オフラインでの翻訳の取り込み",
+ "right-translate-messagereview": "翻訳を査読",
+ "action-translate-messagereview": "翻訳の査読",
+ "right-translate-groupreview": "メッセージ群のワークフローの状態を変更",
+ "action-translate-groupreview": "メッセージ群のワークフローの状態の変更",
+ "translate-rcfilters-translations": "翻訳",
+ "translate-rcfilters-translations-only-label": "翻訳",
+ "translate-rcfilters-translations-only-desc": "翻訳ページの変更。",
+ "translate-rcfilters-translations-filter-label": "翻訳ではない",
+ "translate-rcfilters-translations-filter-desc": "翻訳以外の変更",
+ "translate-rcfilters-translations-site-label": "システム メッセージ",
+ "translate-rcfilters-translations-site-desc": "MediaWiki 名前空間のシステム メッセージのカスタマイズ。",
+ "translate-rc-translation-filter": "翻訳を絞り込み:",
+ "translate-rc-translation-filter-no": "絞り込まない",
+ "translate-rc-translation-filter-only": "翻訳のみ表示",
+ "translate-rc-translation-filter-filter": "翻訳を除外",
+ "translate-rc-translation-filter-site": "サイトのメッセージの変更のみ",
+ "translationstats": "翻訳の統計",
+ "translate-stats-edits": "編集",
+ "translate-stats-users": "翻訳者",
+ "translate-stats-registrations": "登録",
+ "translate-stats-reviews": "査読",
+ "translate-stats-reviewers": "査読者",
+ "translate-statsf-intro": "このフォームで簡単な統計を生成できます。すべての数値には上限と下限があります。",
+ "translate-statsf-options": "グラフのオプション",
+ "translate-statsf-width": "幅 (ピクセル単位):",
+ "translate-statsf-height": "高さ (ピクセル単位):",
+ "translate-statsf-days": "日数:",
+ "translate-statsf-start": "開始日時:",
+ "translate-statsf-scale": "粒度:",
+ "translate-statsf-scale-months": "月",
+ "translate-statsf-scale-weeks": "週",
+ "translate-statsf-scale-days": "日",
+ "translate-statsf-scale-hours": "時間",
+ "translate-statsf-count": "尺度:",
+ "translate-statsf-count-edits": "編集回数",
+ "translate-statsf-count-users": "活動中の翻訳者",
+ "translate-statsf-count-registrations": "新しい利用者",
+ "translate-statsf-count-reviews": "翻訳査読回数",
+ "translate-statsf-count-reviewers": "査読者",
+ "translate-statsf-language": "言語コードを列挙 (カンマ区切り):",
+ "translate-statsf-group": "メッセージ群コードを列挙 (カンマ区切り):",
+ "translate-statsf-submit": "プレビュー",
+ "translate-statsf-unknown-error": "不明なエラーが発生しました。",
+ "translate-tag-page-desc": "ウィキページ [[$2|$1]] に対する $3 ($4) からの翻訳です。",
+ "translate-tag-page-wikipage-desc": "ウィキページ [[$2]] に対する <bdi>$3</bdi> ($4) から <bdi>$5</bdi> ($6) への[[$1|翻訳]]",
+ "translate-sidebar-alltrans": "他言語での翻訳",
+ "translations": "全翻訳結果",
+ "translations-summary": "既存のすべての翻訳を表示するには下欄にメッセージ名を入力してください。",
+ "translate-translations-no-message": "「$1」は翻訳対象メッセージではありません",
+ "translate-translations-none": "「$1」には翻訳がありません",
+ "translate-translations-count": "{{PLURAL:$1|$1 件の翻訳}}が見つかりました。",
+ "translate-translations-fieldset-title": "メッセージ",
+ "translate-translations-messagename": "名前:",
+ "translate-translations-project": "プロジェクト:",
+ "translate-translations-including-no-param": "下位ページ引数に有効なメッセージキーを指定してください",
+ "translate-translations-history-short": "履歴",
+ "languagestats": "言語別翻訳状況",
+ "languagestats-summary": "このページでは指定した言語におけるメッセージの翻訳状況をメッセージ群ごとに表示しています。",
+ "messagegroupstats-summary": "このページでは、メッセージ群の統計を表示します。",
+ "languagestats-stats-for": "$1 ($2) の翻訳統計です。",
+ "languagestats-recenttranslations": "最近の翻訳",
+ "translate-langstats-incomplete": "このページの統計情報の一部は不完全です。より多くの統計情報を取得するために再読み込みしてください。",
+ "translate-langstats-expand": "展開",
+ "translate-langstats-collapse": "折り畳む",
+ "translate-langstats-expandall": "すべて展開",
+ "translate-langstats-collapseall": "すべて折り畳む",
+ "translate-language-code": "言語コード",
+ "translate-language-code-field-name": "言語コード:",
+ "translate-suppress-complete": "翻訳が完了したメッセージ群を表示しない",
+ "translate-ls-noempty": "全く翻訳されていないメッセージ群を表示しない",
+ "translate-language": "言語",
+ "translate-total": "メッセージ数",
+ "translate-untranslated": "未翻訳",
+ "translate-percentage-complete": "完了",
+ "translate-percentage-fuzzy": "要更新",
+ "translate-percentage-proofread": "査読済",
+ "translate-languagestats-overall": "合計",
+ "translate-ls-submit": "統計を表示",
+ "translate-ls-column-group": "メッセージ群",
+ "translate-mgs-pagename": "メッセージ群別の翻訳状況",
+ "translate-mgs-fieldset": "表示設定",
+ "translate-mgs-group": "メッセージ群:",
+ "translate-mgs-nocomplete": "翻訳が完了した言語を表示しない",
+ "translate-mgs-noempty": "翻訳が1つもない言語を表示しない",
+ "translate-mgs-submit": "統計を表示",
+ "translate-mgs-column-language": "言語",
+ "translate-mgs-totals": "全$1{{PLURAL:$1|言語}}",
+ "translate-mgs-invalid-group": "指定された群$1は存在しません。",
+ "translate-mgs-nothing": "要求された統計には表示するものがありません。",
+ "translate-tes-group-not-found": "一致する結果がありません",
+ "supportedlanguages": "サポートしている言語",
+ "supportedlanguages-summary": "このページには、{{SITENAME}}が対応している全言語の一覧と、\nその言語で活動している翻訳者の名前を表示しています。\n翻訳者の名前は翻訳編集の数が多いほど大きく表示されます。\n下線の色はその翻訳者の最近の活動度を表しています。",
+ "supportedlanguages-colorlegend": "色の凡例: 最後の翻訳が $1 日前",
+ "supportedlanguages-portallink": "[$1] $2 - $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-sqlite-error": "SQLiteはサポートされていません",
+ "supportedlanguages-postgres-error": "PostgreSQLはサポートされていません",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|翻訳者}}|翻訳者}}: $1",
+ "supportedlanguages-recenttranslations": "最近の翻訳",
+ "supportedlanguages-count": "合計 $1 {{PLURAL:$1|言語}}",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|回の編集}}・$3 {{PLURAL:$3|日}}前に最終編集",
+ "translate-supportedlanguages-cached": "この情報は$1前にキャッシュされました。",
+ "abusefilter-edit-builder-vars-translate-source-text": "翻訳単位の原文",
+ "abusefilter-edit-builder-vars-translate-target-language": "翻訳先言語",
+ "translate-jssti-add": "追加",
+ "managemessagegroups": "メッセージ群の管理",
+ "translate-smg-notallowed": "この操作を行うことは許可されていません。",
+ "translate-smg-nochanges": "処理する変更はありません。",
+ "translate-smg-submit": "処理するために変更を送信",
+ "translate-smg-submitted": "メッセージの定義が更新されました。変更をバックグラウンドで処理しています。",
+ "translate-smg-submitted-with-failure": "以下の{{PLURAL:$1|グループ|グループ}} についてメッセージの{{PLURAL:$1|定義|定義}} に失敗しました - $2。 $3",
+ "translate-smg-more": "これらの変更を送信した後にさらに処理するべき変更があります。",
+ "translate-smg-left": "ウィキ内のメッセージ本文",
+ "translate-smg-right": "新着の差分",
+ "translate-smg-rename-select": "選択",
+ "translate-smg-rename-cancel": "中止",
+ "translate-smg-rename-search": "適合するメッセージの検索……",
+ "translate-smg-rename-select-err": "改名するメッセージを選択してください",
+ "translate-smg-rename-no-msg": "メッセージが見つかりません。",
+ "translate-smg-rename-dialog-title": "$1に適した改名を選択",
+ "translate-smg-strong-sync-help": "ヘルプ",
+ "translate-smg-groups-with-error-title": "同期の時にエラーが発生したグループ",
+ "translate-smg-group-message-action-history": "履歴",
+ "translate-smg-group-message-tag-rename": "名前を変更",
+ "translate-smg-group-message-message-content": "内容:",
+ "translate-smg-group-message-message-target": "対象:",
+ "translate-smg-group-message-message-other-langs": "その他の言語:",
+ "translate-smg-loading": "読み込み中...",
+ "translate-manage-import-diff": "メッセージ $1 | 操作: $2",
+ "translate-manage-import-new": "新しいメッセージ $1",
+ "translate-manage-import-deleted": "削除されたメッセージ $1",
+ "translate-manage-action-import": "取り込む",
+ "translate-manage-action-conflict": "取り込んで要更新にする",
+ "translate-manage-action-ignore": "無視",
+ "translate-manage-action-fuzzy": "翻訳を取り込んで要更新の印を付ける",
+ "translate-manage-action-rename-fuzzy": "改名して要更新の印を付ける",
+ "translate-manage-action-rename": "改名",
+ "translate-manage-action-ignore-change": "翻訳の変更を無視",
+ "translate-manage-nochanges": "この群のメッセージの定義には変更はありません。",
+ "translate-manage-nochanges-other": "この言語が対応すべき変更はありませんでした。\n下のリンクをクリックするとメッセージ群の詳細画面に戻ります。",
+ "translate-manage-inconsistent": "リクエスト内で矛盾を検出しました。\n変更点を確認してから、再度試してください。\n詳細: $1",
+ "translate-manage-toolong": "処理時間の最大値である$1秒を超過しました。処理を続行するにはフォームを再投稿してください。",
+ "translate-manage-import-summary": "外部ソースから新しい版を取り込み",
+ "translate-manage-import-ignore": "メッセージ $1 をスキップします。",
+ "translate-manage-import-rename-summary": "外部のソースで改名済み",
+ "translate-manage-conflict-summary": "外部ソースから新しい版を取り込み中。\n確認してください。",
+ "translate-manage-submit": "実行",
+ "translate-manage-intro-other": "以下は言語 $1 での翻訳の変更の一覧です。\nそれぞれの更新について、変更を精査して、行いたい操作を選択してください。\n変更を無視することを選択した場合、この操作は一時的なものに留まります。",
+ "translate-manage-import-ok": "取り込みました: $1",
+ "translate-manage-import-done": "取り込みました。",
+ "translate-manage-source-message-not-found": "メッセージの意味が見つかりませんでした",
+ "importtranslations": "翻訳の取り込み",
+ "translate-import-from-local": "ローカルファイルをアップロード:",
+ "translate-import-load": "ファイル読み込み",
+ "translate-import-err-dl-failed": "ファイルを取得できません:\n$1",
+ "translate-import-err-ul-failed": "ファイルのアップロードに失敗しました",
+ "translate-import-err-invalid-title": "入力したファイル名 <nowiki>$1</nowiki> は無効です。",
+ "translate-import-err-no-such-file": "ファイル <nowiki>$1</nowiki> は存在しないか、ローカルにアップロードされていません。",
+ "translate-import-err-stale-group": "このファイルが所属するメッセージ群は存在しません。",
+ "translate-import-err-no-headers": "ファイルが Translate 拡張機能の形式に正しく適応した gettext ファイルではありません。\nファイル ヘッダーからメッセージ群と言語を決定できませんでした。",
+ "translate-js-support-unsaved-warning": "公開されていない翻訳があります。",
+ "translate-gs-pos": "順位",
+ "translate-gs-code": "コード",
+ "translate-gs-continent": "大陸",
+ "translate-gs-speakers": "話者数",
+ "translate-gs-score": "点数",
+ "translate-gs-multiple": "複数",
+ "translate-gs-count": "件数",
+ "translate-gs-total": "合計",
+ "translate-gs-avgscore": "平均点",
+ "translate-documentation-language": "メッセージについての説明文",
+ "translate-searchprofile": "翻訳",
+ "translate-searchprofile-tooltip": "すべての翻訳から検索",
+ "translate-searchprofile-note": "より多くの検索設定は、[$1 翻訳検索]を通して利用することができます。",
+ "translate-search-languagefilter": "言語で絞り込み:",
+ "translate-search-nofilter": "すべて表示",
+ "log-name-translationreview": "翻訳査読記録",
+ "log-description-translationreview": "翻訳とメッセージ群に対するすべての査読の記録",
+ "logentry-translationreview-message": "$1 が $3 の翻訳を{{GENDER:$2|査読}}しました",
+ "logentry-translationreview-group": "$1 が $3 の $4 の翻訳の状態を $6 から $7 に{{GENDER:$2|変更}}",
+ "group-translate-sandboxed": "未承認の翻訳者",
+ "group-translate-sandboxed-member": "{{GENDER:$1|未承認の翻訳者}}",
+ "right-translate-sandboxmanage": "サンドボックス利用者を管理",
+ "action-translate-sandboxmanage": "サンドボックス利用者の管理",
+ "right-translate-sandboxaction": "サンドボックス利用者に許可された操作を実行",
+ "action-translate-sandboxaction": "サンドボックス利用者に許可された操作の実行",
+ "translate-workflow-state-": "(解除)",
+ "translate-workflowstatus": "進捗状況: $1",
+ "translate-workflow-set-doing": "設定中...",
+ "translate-workflow-autocreated-summary": "作業進捗状況$1のページの自動作成",
+ "translate-stats-workflow": "進捗状況",
+ "translate-workflowgroup-label": "作業進捗状況",
+ "translate-workflowgroup-desc": "このメッセージ群では翻訳作業の進捗状況を示します。\n進捗状況は、設定変数 $wgTranslateWorkflowStates で定義されています。",
+ "translate-dynagroup-recent-label": "最近の翻訳",
+ "translate-dynagroup-recent-desc": "このメッセージ群ではこの言語への最近の翻訳をすべて表示します。\n査読作業に便利です。",
+ "translate-dynagroup-additions-label": "最近の追加",
+ "translate-dynagroup-additions-desc": "このメッセージ群では新たに追加または変更されたメッセージを表示します。",
+ "translate-msggroupselector-projects": "メッセージ群",
+ "translate-msggroupselector-search-placeholder": "メッセージ群内を検索",
+ "translate-msggroupselector-search-all": "すべて",
+ "translate-msggroupselector-search-recent": "最近のもの",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|件の下位群}}を閲覧",
+ "tux-languageselector": "翻訳先",
+ "tux-tab-all": "すべて",
+ "tux-tab-untranslated": "未翻訳",
+ "tux-tab-outdated": "要更新",
+ "tux-tab-translated": "翻訳済",
+ "tux-tab-unproofread": "未査読",
+ "tux-edit": "編集",
+ "tux-status-optional": "省略可能",
+ "tux-status-fuzzy": "要更新",
+ "tux-status-proofread": "査読済",
+ "tux-status-translated": "翻訳済",
+ "tux-status-saving": "公開中...",
+ "tux-status-unsaved": "未公開",
+ "tux-save-unknown-error": "不明なエラーが発生しました。",
+ "tux-editor-placeholder-documentation": "ここにメッセージの説明文を入力",
+ "tux-editor-placeholder-language": "ここに$1訳を入力",
+ "tux-editor-editsummary-placeholder": "要約 (省略可能)",
+ "tux-editor-paste-original-button-label": "原文を貼り付け",
+ "tux-editor-discard-changes-button-label": "変更内容を破棄",
+ "tux-editor-save-button-label": "翻訳を公開",
+ "tux-editor-skip-button-label": "次へスキップ",
+ "tux-editor-cancel-button-label": "キャンセル",
+ "tux-editor-confirm-button-label": "翻訳を確認",
+ "tux-editor-proofread-button-label": "査読済の印を付ける",
+ "tux-editor-shortcut-info": "確認して次のメッセージへ移動するには「$1」を、単にスキップするには「$2」を、要約を入力するには「$4」を押してください。他のショートカットキーを表示するには「$3」を押し続けてください。",
+ "tux-editor-edit-desc": "説明文を編集",
+ "tux-editor-add-desc": "説明文を追加",
+ "tux-editor-suggestions-title": "提案",
+ "tux-editor-latest-updates-title": "最近の更新",
+ "tux-editor-changes-without-summary": "要約がない $1 件の{{PLURAL:$1|更新}}",
+ "tux-editor-all-changes": "すべての更新履歴",
+ "tux-editor-in-other-languages": "他言語での翻訳",
+ "tux-editor-need-more-help": "助けが必要ですか?",
+ "tux-editor-ask-help": "詳細について質問する",
+ "tux-editor-tm-match": "$1%の一致",
+ "tux-notices-more": "{{PLURAL:$1|他 $1 件}}",
+ "tux-notices-hide": "非表示",
+ "tux-editor-save-failed": "翻訳の公開に失敗しました: $1",
+ "tux-editor-n-uses": "$1 {{PLURAL:$1|回}}使用",
+ "tux-editor-message-desc-more": "続きを表示",
+ "tux-editor-message-desc-less": "折り畳む",
+ "tux-editor-clear-translated": "翻訳を非表示",
+ "tux-editor-proofreading-mode": "査読",
+ "tux-editor-translate-mode": "一覧",
+ "tux-editor-proofreading-hide-own-translations": "自分の翻訳を非表示",
+ "tux-editor-proofreading-show-own-translations": "自分の翻訳を表示",
+ "tux-proofread-action-tooltip": "査読済の印を付ける",
+ "tux-proofread-edit-label": "編集",
+ "tux-editor-page-mode": "ページ",
+ "tux-editor-outdated-notice": "この翻訳は修正が必要かもしれません。",
+ "tux-editor-outdated-notice-diff-link": "差分を表示",
+ "tux-editor-doc-editor-placeholder": "メッセージについての説明文",
+ "tux-editor-doc-editor-save": "説明文を公開",
+ "tux-editor-doc-editor-cancel": "キャンセル",
+ "tux-messagetable-more-messages": "他 $1 {{PLURAL:$1|件のメッセージ}}",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|メッセージ}}を読み込み中...",
+ "tux-message-filter-placeholder": "絞り込み条件を入力",
+ "tux-message-filter-result": "「$2」の検索結果 $1 {{PLURAL:$1|件}}",
+ "tux-message-filter-advanced-button": "高度な検索",
+ "tux-message-filter-optional-messages-label": "省略可能なメッセージ",
+ "tux-proofread-translated-by-self": "あなたが翻訳",
+ "tux-empty-list-all": "このメッセージ群は空です",
+ "tux-empty-list-all-guide": "翻訳する別のメッセージ群を選択してください",
+ "tux-translate-page-no-such-group": "<strong>指定したメッセージ群は存在しません。</strong>別のメッセージ群を選択してください。",
+ "tux-empty-list-translated": "翻訳済みメッセージはありません",
+ "tux-empty-list-translated-guide": "翻訳で貢献することもできます",
+ "tux-empty-list-translated-action": "翻訳",
+ "tux-empty-no-messages-to-display": "表示できるメッセージがありません。",
+ "tux-empty-there-are-optional": "省略可能なメッセージがありますが、一覧に表示されていません",
+ "tux-empty-show-optional-messages": "省略可能なメッセージを表示",
+ "tux-empty-no-outdated-messages": "要更新のメッセージはありません",
+ "tux-empty-nothing-to-proofread": "査読できるものはありません",
+ "tux-empty-you-can-help-providing": "新たに翻訳して貢献することもできます",
+ "tux-empty-nothing-new-to-proofread": "新たに査読できるものはありません",
+ "tux-empty-you-can-review-already-proofread": "他の利用者が既に査読した翻訳も、あなたは査読できます。",
+ "tux-empty-list-other": "翻訳できるものはありません",
+ "tux-empty-list-other-guide": "既存の翻訳の査読で貢献することもできます",
+ "tux-empty-list-other-action": "翻訳を査読",
+ "tux-empty-list-other-link": "全メッセージを表示",
+ "tux-editor-close-tooltip": "閉じる",
+ "tux-editor-expand-tooltip": "展開する",
+ "tux-editor-collapse-tooltip": "折り畳む",
+ "tux-editor-message-tools-show-editor": "ウィキエディターで表示",
+ "tux-editor-message-tools-history": "履歴",
+ "tux-editor-message-tools-delete": "削除",
+ "tux-editor-message-tools-translations": "全言語の翻訳",
+ "tux-editor-message-tools-linktothis": "このページへのリンク",
+ "tux-editor-loading": "読み込み中...",
+ "translate-search-more-languages-info": "他 $1 {{PLURAL:$1|言語}}",
+ "translate-statsbar-tooltip": "$1% 翻訳済、$2% 査読済",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% 翻訳済、$2% 査読済、$3% 要更新",
+ "translate-search-more-groups-info": "他 $1 {{PLURAL:$1|メッセージ群}}",
+ "translate-syntax-error": "翻訳に構文エラーが含まれています",
+ "tux-session-expired": "ログインしていない状態になっています。別のタブでログインしてください。できない場合は、未保存の翻訳をコピーしておいて、ログインして、このページに戻ってきて、翻訳ページに入り直してください。",
+ "tux-nojs": "このツールの動作には JavaScript が必要です。JavaScript が無効、作動していないもしくはブラウザーがサポートされていません。",
+ "specialpages-group-translation": "翻訳",
+ "log-action-filter-translationreview": "操作の種類:"
+}
diff --git a/Translate/i18n/core/jam.json b/Translate/i18n/core/jam.json
new file mode 100644
index 00000000..e6972bed
--- /dev/null
+++ b/Translate/i18n/core/jam.json
@@ -0,0 +1,38 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dentonius",
+ "Katxis",
+ "Yocahuna"
+ ]
+ },
+ "translate": "Chransliet",
+ "translate-desc": "[[Special:Translate|Special page]] fi chransliet MediaWiki ahn biyan",
+ "translate-page-no-such-language": "Spesifai langwij ehn invalid.",
+ "translate-page-no-such-group": "Spesifai gruup ehn invalid.",
+ "translate-page-disabled": "Chranslieshan tu dis langwij ina dis gruup disiebl.\nRiizn:\n\n<em>$1</em>",
+ "translate-page-settings-legend": "Setndem",
+ "translate-page-group": "Gruup",
+ "translate-page-language": "Langwij",
+ "translate-page-limit": "Limit",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|mechiz|mechiz}} a piej",
+ "translate-submit": "Fech",
+ "translate-page-navigation-legend": "Navigieshan",
+ "translate-page-showing": "Mechiz frahn $1 tu $2 a $3 a shuo.",
+ "translate-page-showing-all": "A shuo $1 {{PLURAL:$1|mechiz|mechiz}}.",
+ "translate-page-showing-none": "No mechiz fi shuo.",
+ "translate-next": "Nex piej",
+ "translate-prev": "Priivos piej",
+ "translate-page-description-legend": "Infamieshan bout di gruup",
+ "translate-page-edit": "edit",
+ "translate-optional": "(apshanal)",
+ "translate-ignored": "(ignuor)",
+ "translate-edit-title": "Edit \"$1\"",
+ "translate-edit-definition": "Mechiz definishan",
+ "translate-edit-contribute": "kanchribiut",
+ "translate-edit-no-information": "''Dis mechiz naa no dakiumentieshan.\nEf yu nuo we ar ou dis mechiz yuuz, yu kiahn elp ada chranslieta bai ad dakiumentieshan tu dis mechiz.''",
+ "translate-edit-information": "Infamieshan bout mechiz \"$2\" ($1)",
+ "translate-edit-warnings": "Waanin bout inkompliit chranslieshan",
+ "translate-edit-tmmatch": "$1% mach",
+ "translate-documentation-language": "Translation help"
+}
diff --git a/Translate/i18n/core/jbo.json b/Translate/i18n/core/jbo.json
new file mode 100644
index 00000000..89dd2a80
--- /dev/null
+++ b/Translate/i18n/core/jbo.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gleki",
+ "Olwe519",
+ "Xbony2"
+ ]
+ },
+ "translate-page-edit": "stika ti",
+ "translate-edit-title": "stika $1",
+ "translate-rc-translation-filter": "pagrygau lo xe fanva",
+ "translate-stats-edits": "stika",
+ "translate-stats-users": "le fanva",
+ "translate-sidebar-alltrans": "bau lo drata",
+ "translate-translations-messagename": "lo cmene",
+ "translate-translations-project": "co'a bandu",
+ "translate-translations-history-short": "c",
+ "translate-language": "lo bangu",
+ "translate-gs-total": "lo sumji",
+ "tux-edit": "stika",
+ "tux-editor-cancel-button-label": "kansele",
+ "tux-editor-in-other-languages": "bau lo drata",
+ "tux-notices-hide": "cancygau",
+ "tux-proofread-edit-label": "stika",
+ "tux-editor-page-mode": "lo papri",
+ "tux-editor-doc-editor-cancel": "kansele",
+ "tux-editor-message-tools-delete": "vimcu"
+}
diff --git a/Translate/i18n/core/jut.json b/Translate/i18n/core/jut.json
new file mode 100644
index 00000000..72f20e2d
--- /dev/null
+++ b/Translate/i18n/core/jut.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jyllanj"
+ ]
+ },
+ "translations": "Åll öwesättelse",
+ "translate-documentation-language": "Beskeddokumentasjon"
+}
diff --git a/Translate/i18n/core/jv.json b/Translate/i18n/core/jv.json
new file mode 100644
index 00000000..aa80aa07
--- /dev/null
+++ b/Translate/i18n/core/jv.json
@@ -0,0 +1,328 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bennylin",
+ "Diki Ananta",
+ "Kaganer",
+ "Meursault2004",
+ "NoiX180",
+ "Pras",
+ "Sumbukompor"
+ ]
+ },
+ "translate": "Pertal",
+ "translate-extensionname": "Pertal",
+ "translate-desc": "[[Special:Translate|Kaca mirunggan]] kanggo mertal MediaWiki lan liyané",
+ "translate-taskui-export-to-file": "Èspor nganggo format asli",
+ "translate-taskui-export-as-po": "Èspor kanggo pertalan njaban jaringan",
+ "translate-taction-translate": "Pertal",
+ "translate-taction-proofread": "Priksa",
+ "translate-taction-lstats": "Setatistik basa",
+ "translate-taction-mstats": "Setatistik golongan layang",
+ "translate-taction-export": "Èspor",
+ "translate-taction-disabled": "Tumindak iki dipatèni ing wiki iki.",
+ "translate-page-no-such-language": "Basa kang kapilih ora trep.",
+ "translate-page-no-such-group": "Golongan kang kapilih ora trep.",
+ "translate-page-disabled": "Pertalan nyang basa iki kanggo golongan iki wis dipatèni.\nAlesané:\n\n<em>$1</em>",
+ "translate-language-disabled": "Pertalan menyang basa iki dipatèni.",
+ "translate-page-settings-legend": "Setèlan",
+ "translate-page-group": "Golongan",
+ "translate-page-language": "Basa",
+ "translate-page-limit": "Wates",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|layang}} saben kaca",
+ "translate-submit": "Jupuk",
+ "translate-page-navigation-legend": "Navigasi",
+ "translate-page-showing": "Nuduhaké layang cacah $1 nganti $2 saka gunggung $3 layang.",
+ "translate-page-showing-all": "Nuduhaké $1 {{PLURAL:$1|layang}}.",
+ "translate-page-showing-none": "Ora ana layang kanggo dituduhaké.",
+ "translate-next": "Kaca sabanjuré",
+ "translate-prev": "Kaca sadurungé",
+ "translate-page-description-legend": "Katerangan ngenani golongané",
+ "translate-page-description-hasoptional": "Golongan layang iki ngemu layang-layang manasuka.\nLayang manasuka kapertal mung manawa basamu duwé kabutuhan mirunggan kaya ta ora nganggo sepasi utawa ngalihaksara jeneng. $1",
+ "translate-page-description-hasoptional-open": "Tuduhaké layang manasuka.",
+ "translate-page-edit": "besut",
+ "translate-optional": "(manasuka)",
+ "translate-ignored": "(dilirwakaké)",
+ "translate-edit-title": "Besut \"$1\"",
+ "translate-edit-definition": "Wedharaning layang",
+ "translate-edit-contribute": "nyumbang",
+ "translate-edit-no-information": "<em>Layang iki ora ana dhokumèntasiné.\nManawa kowé ngerti ana ing endi lan kapriyé layang iki kaanggo, kowé bisa ngéwangi kang mertal liyané kanthi nambahaké dhokumèntasi menyang layang iki.</em>",
+ "translate-edit-information": "Pratélan ngenani layang ($1)",
+ "translate-edit-warnings": "Pepéling bab pertalan kang durung rampung",
+ "translate-edit-tmmatch-source": "Tulisan sumber pertalan: $1",
+ "translate-edit-tmmatch": "$1% cocog",
+ "translate-edit-nopermission": "Kowé kudu duwé hak mertal saperlu mertal layang.",
+ "translate-edit-askpermission": "Nyuwun palilah",
+ "exporttranslations": "Èspor pertalan",
+ "translate-export-form-format": "Format",
+ "translate-export-invalid-format": "Sumangga isi mawa format kang trep.",
+ "translate-export-not-supported": "Èspor pertalan ora kasengkuyung.",
+ "translate-export-format-notsupported": "Format èspor kang koisèkaké ora disengkuyung golongan layangé.",
+ "translate-checks-parameters": "{{PLURAL:$2|Paramèter}} iki ora dianggo:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Paramèter}} iki ora kaweruhan:\n<strong>$1</strong>",
+ "translate-checks-balance": "Cacahing {{PLURAL:$2|pangapit|pangapit-pangapit}} ora seimbang:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Pranala|Pranala-pranala}} iki nduwèni masalah:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Pranala|Pranala-pranala}} iki ilang:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Wedharané nganggo <nowiki>{{PLURAL:}}</nowiki> nanging pertalané ora.",
+ "translate-checks-pagename": "Mandhala aran owah saka wedharané",
+ "translate-checks-format": "Pertalan iki ora manut wedharané utawa ora trep sintaksisé: $1",
+ "translate-checks-parametersnotequal": "Itungan paramèter {{PLURAL:$1|$1}}; kuduné {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> salah format.",
+ "translate-checks-fudforum-syntax": "Anggonen <nowiki>$1</nowiki> tinimbang <nowiki>$2</nowiki> ing proyèk iki.",
+ "translate-pref-editassistlang": "Basa panyengkuyung:",
+ "prefs-translate": "Pilihan pertalan",
+ "translate-pref-editassistlang-help": "Pratélan kodhe basa kang kapisah komah.\nPertalan layang ing basa iki bakal katuduhaké nalika kowé pinuju mertal.\nPratélan basa baku gumantung ing basamu.",
+ "translate-pref-editassistlang-bad": "Kodhe basa ora trep ing pratélan:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Mbesut sarana mukantara jarwan",
+ "right-translate-manage": "Kemunah golongan layang",
+ "action-translate-manage": "kemunah golongan layang",
+ "right-translate-import": "Impor pertalan njaban jaringan",
+ "action-translate-import": "impor pertalan njaban jaringan",
+ "right-translate-messagereview": "Priksa pertalan",
+ "action-translate-messagereview": "priksa pertalan",
+ "translate-rcfilters-translations": "Pertalan",
+ "translate-rcfilters-translations-only-label": "Pertalan",
+ "translate-rcfilters-translations-only-desc": "Owahan ing kaca kapertal.",
+ "translate-rcfilters-translations-filter-label": "Dudu pertalan",
+ "translate-rcfilters-translations-filter-desc": "Kabèh owahan kang dudu pertalan.",
+ "translate-rcfilters-translations-site-label": "Layang situs",
+ "translate-rc-translation-filter": "Saring pertalan:",
+ "translate-rc-translation-filter-no": "Ora difilter",
+ "translate-rc-translation-filter-only": "Tuduhaké pertalané waé",
+ "translate-rc-translation-filter-filter": "Saring kajaba pertalan",
+ "translate-rc-translation-filter-site": "Mung owah-owahan ing layang situs waé",
+ "translationstats": "Setatistik pertalan",
+ "translate-stats-edits": "Besutan",
+ "translate-stats-users": "Pamertal",
+ "translate-stats-registrations": "Pandhaftaran",
+ "translate-stats-reviews": "Pepriksan",
+ "translate-stats-reviewers": "Pamriksa",
+ "translate-statsf-intro": "Pajenengan bisa nggawé setatistik prasaja migunakaké formulir iki. Kabèh angka nduwèni wates ndhuwur lan ngisor.",
+ "translate-statsf-options": "Opsi grafik",
+ "translate-statsf-width": "Jembar jroning piksel:",
+ "translate-statsf-height": "Dhuwur jroning piksel:",
+ "translate-statsf-days": "Période wektu jroning dina:",
+ "translate-statsf-start": "Tanggal miwiti:",
+ "translate-statsf-scale": "Granularitas:",
+ "translate-statsf-scale-months": "Wulan",
+ "translate-statsf-scale-weeks": "Minggu",
+ "translate-statsf-scale-days": "Dina",
+ "translate-statsf-scale-hours": "Jam",
+ "translate-statsf-count": "Ukuran:",
+ "translate-statsf-count-edits": "Cacahing besutan",
+ "translate-statsf-count-users": "Pamertal aktif",
+ "translate-statsf-count-registrations": "Naraguna anyar",
+ "translate-statsf-count-reviews": "Pepriksan pertalan",
+ "translate-statsf-count-reviewers": "Pamriksa",
+ "translate-statsf-language": "Pratélan kodhe basa kang kapisah komah:",
+ "translate-statsf-group": "Pratélan kodhe golongan kang dipisah komah:",
+ "translate-statsf-submit": "Pratuduh",
+ "translate-tag-page-desc": "Pertalané kaca wiki [[$2|$1]] saka $3 ($4).",
+ "translate-sidebar-alltrans": "Ing basa liyané",
+ "translations": "Kabèh pertalan",
+ "translations-summary": "Isi jeneng layang ing ngisor iki kanggo nuduhaké kabèh pertalan kang ana.",
+ "translate-translations-no-message": "\"$1\" dudu layang kang bisa kapertal",
+ "translate-translations-none": "Ora ana pertalan kanggo \"$1\"",
+ "translate-translations-count": "Nemu {{PLURAL:$1|pertalan cacah 1|pertalan cacah $1}}.",
+ "translate-translations-fieldset-title": "Layang",
+ "translate-translations-messagename": "Jeneng:",
+ "translate-translations-project": "Proyèk:",
+ "translate-translations-including-no-param": "Sumangga isi kunci layang kang trep ing paramètèr anak-kacané",
+ "translate-translations-history-short": "r",
+ "languagestats": "Setatistik basa",
+ "languagestats-summary": "Kaca iki nuduhaké setatistik pertalan saka kabèh golongan layang mungguh ing sawijining basa.",
+ "messagegroupstats-summary": "Kaca iki nuduhaké setatistik golongan layang.",
+ "languagestats-stats-for": "Setatistik pertalan kanggo $1 ($2).",
+ "languagestats-recenttranslations": "pertalan mentas waé",
+ "translate-langstats-incomplete": "Sapérangan setatistik ing kaca iki ora wutuh. Sumangga ambali ngamot supaya olèh setatistik liyané.",
+ "translate-langstats-expand": "jembarna",
+ "translate-langstats-collapse": "ciyut",
+ "translate-langstats-expandall": "ambakaké kabèh",
+ "translate-langstats-collapseall": "ciyutaké kabèh",
+ "translate-language-code": "Kodhe basa",
+ "translate-language-code-field-name": "Kodhe basa:",
+ "translate-suppress-complete": "Singkiraké kabèh golongan layang kang wis kapertal",
+ "translate-ls-noempty": "Singkiraké kabèh golongan layang kang durung kapertal",
+ "translate-language": "Basa",
+ "translate-total": "Layang",
+ "translate-untranslated": "Durung kapertal",
+ "translate-percentage-complete": "Parampungan",
+ "translate-percentage-fuzzy": "Lawas",
+ "translate-languagestats-overall": "Kabèh golongan layang mesisan",
+ "translate-ls-submit": "Tuduhaké setatistik",
+ "translate-ls-column-group": "Golongan layang",
+ "translate-mgs-pagename": "Setatistik golongan layang",
+ "translate-mgs-fieldset": "Pitontonaké pilalan",
+ "translate-mgs-group": "Golongan layang:",
+ "translate-mgs-nocomplete": "Aja mitontonaké basa kang wis rampung kapertal",
+ "translate-mgs-noempty": "Aja majang basa kang durung ana pertalané",
+ "translate-mgs-submit": "Tuduhaké setatistik",
+ "translate-mgs-column-language": "Basa",
+ "translate-mgs-totals": "Kabèh $1 {{PLURAL:$1|basa|basa}}",
+ "translate-mgs-invalid-group": "Golongan $1 kang kokarsakaké ora ana.",
+ "translate-mgs-nothing": "Ora ana kang bisa katuduhaké bab setatistik kang kokarsakaké.",
+ "supportedlanguages": "Basa kang kasengkuyung",
+ "supportedlanguages-colorlegend": "Legèndha tumrap werna: Pertalan pungkasan $1 dina kapungkur.",
+ "supportedlanguages-portallink": "[$1] $2 - $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Pamertal}}|Pamertal}}: $1",
+ "supportedlanguages-recenttranslations": "pertalan mentas waé",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|basa}} kabèhé.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|besutan}} - besutan pungkasan $3 {{PLURAL:$3|dina}} kapungkur",
+ "abusefilter-edit-builder-vars-translate-source-text": "Tèks sumberé unit pertalan",
+ "translate-jssti-add": "Tambah ing pratélan",
+ "managemessagegroups": "Tata kemunah golongan layang",
+ "translate-smg-notallowed": "Kowé ora kawogan nglakokaé iki.",
+ "translate-smg-nochanges": "Ora ana owah-owahan kang bisa kaprosès.",
+ "translate-smg-submit": "Kirim owahan kanggo diprosès",
+ "translate-smg-submitted": "Wedharan layang wis dianyari. Owah-owahan lagi digarap ing latar wuri.",
+ "translate-smg-more": "Bakal ana luwih akèh owahan kang bisa kaprosès sawisé owahan-owahan iki katumpuk.",
+ "translate-smg-left": "Isiné layang ing wiki",
+ "translate-smg-right": "Owahan kang bakal teka",
+ "translate-manage-import-diff": "Layang $1 | Laku: $2",
+ "translate-manage-import-new": "Layang anyar $1",
+ "translate-manage-import-deleted": "Layang dibusak $1",
+ "translate-manage-action-import": "Impor",
+ "translate-manage-action-conflict": "Impor lan tandhai ora cetha",
+ "translate-manage-action-ignore": "Jarna",
+ "translate-manage-action-fuzzy": "Impor lan tandhani pertalan supaya kapriksa",
+ "translate-manage-nochanges": "Ora ana owah-owahan ngenani wedharan layang kanggo golongan iki.",
+ "translate-manage-nochanges-other": "Ora ana owah-owahan tumrap basa iki.\nAnggonen pranala ngisor iki kanggo bali nyang sesawangan rerincèn golongan.",
+ "translate-manage-import-summary": "Ngimpor vèrsi anyar saka sumber njaba",
+ "translate-manage-conflict-summary": "Ngimpor vèrsi anyar saka sumber njaba.\nMangga kopriksa.",
+ "translate-manage-submit": "Ayahi",
+ "translate-manage-import-ok": "Diimpor: $1",
+ "translate-manage-import-done": "Rampung ngimpor!",
+ "importtranslations": "Impor pertalan",
+ "translate-import-from-local": "Unggah barkas ing lokal:",
+ "translate-import-load": "Unggah barkas",
+ "translate-import-err-dl-failed": "Ora bisa njupuk barkas:\n$1",
+ "translate-import-err-ul-failed": "Wurung ngunggah barkas",
+ "translate-import-err-invalid-title": "Jeneng barkas <nowiki>$1</nowiki> ora trep.",
+ "translate-import-err-no-such-file": "Barkas <nowiki>$1</nowiki> ora ana utawa durung diunggah ing papan lokal.",
+ "translate-import-err-stale-group": "Golongan layangé barkas iki ora ana.",
+ "translate-import-err-no-headers": "Barkasé dudu barkas Gettext kang karipta kanthi becik nganggo format èstènsi Pertal:\nOra bisa nemtokaké golongan lan basané layang saka sesirahé barkas.",
+ "translate-js-support-unsaved-warning": "Ana pertalanmu kang durung kasimpen.",
+ "translate-gs-pos": "Pos.",
+ "translate-gs-code": "Kodhe",
+ "translate-gs-continent": "Bawana",
+ "translate-gs-speakers": "Panutur",
+ "translate-gs-score": "Biji",
+ "translate-gs-multiple": "Werna-werna",
+ "translate-gs-count": "Cacah",
+ "translate-gs-total": "Cacahé kabèh",
+ "translate-gs-avgscore": "Skor reratan",
+ "translate-documentation-language": "Dhokumèntasi layang",
+ "translate-searchprofile": "Pertalan",
+ "translate-searchprofile-tooltip": "Golèk saka kabèh pertalan",
+ "translate-searchprofile-note": "Pilihan golèkan luwih akèh cumepak mawa [$1 golèkan pertalan].",
+ "translate-search-languagefilter": "Saring miturut basa:",
+ "translate-search-nofilter": "Ora ana saringan",
+ "log-name-translationreview": "Log pepriksan pertalan",
+ "log-description-translationreview": "Log kabèh pepriksan golongan layang lan pertalan.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|mriksa}} pertalan $3",
+ "group-translate-sandboxed": "Juru pamertal kang durung katampa",
+ "group-translate-sandboxed-member": "{{GENDER:$1|juru pamertal kang durung katampa}}",
+ "right-translate-sandboxmanage": "Kemunah naraguna ing bak wedhi",
+ "action-translate-sandboxmanage": "kemunah naraguna ing bak wedhi",
+ "translate-workflow-state-": "(durung disetel)",
+ "translate-workflowstatus": "Status: $1",
+ "translate-workflow-set-doing": "Nyetèl...",
+ "translate-stats-workflow": "Status",
+ "translate-dynagroup-recent-label": "Pertalan mentas waé",
+ "translate-dynagroup-recent-desc": "Golongan layang iki nuduhaké kabèh pertalan anyar saka basa iki.\nBisa migunani banget manawa arep mriksani.",
+ "translate-dynagroup-additions-label": "Tambahan anyar",
+ "translate-dynagroup-additions-desc": "Golongan layang iki isiné layang anyar lan owahan.",
+ "translate-msggroupselector-projects": "Golongan layang",
+ "translate-msggroupselector-search-placeholder": "Golèk golongan",
+ "translate-msggroupselector-search-all": "Kabèh",
+ "translate-msggroupselector-search-recent": "Anyar",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|anak golongan}}",
+ "tux-languageselector": "Pertal menyang",
+ "tux-tab-all": "Kabèh",
+ "tux-tab-untranslated": "Durung kapertal",
+ "tux-tab-outdated": "Kadaluwarsa",
+ "tux-tab-translated": "Wis kapertal",
+ "tux-tab-unproofread": "Durung dipriksa",
+ "tux-edit": "Besut",
+ "tux-status-optional": "Manasuka",
+ "tux-status-fuzzy": "Kadaluwarsa",
+ "tux-status-proofread": "Wis dipriksa",
+ "tux-status-translated": "Wis kapertal",
+ "tux-status-saving": "Nyimpen...",
+ "tux-status-unsaved": "Durung kasimpen",
+ "tux-save-unknown-error": "Ana masalah kang ora kaweruhan.",
+ "tux-editor-editsummary-placeholder": "Ringkesan manasuka",
+ "tux-editor-paste-original-button-label": "Templèkaké tulisan sumber",
+ "tux-editor-discard-changes-button-label": "Buwang owahan",
+ "tux-editor-save-button-label": "Simpen pertalan",
+ "tux-editor-skip-button-label": "Lumpati menyang sabanjuré",
+ "tux-editor-cancel-button-label": "Wurung",
+ "tux-editor-confirm-button-label": "Iyai pertalan",
+ "tux-editor-proofread-button-label": "Tandhani manawa wis dipriksa",
+ "tux-editor-edit-desc": "Besut dhokumèntasi",
+ "tux-editor-add-desc": "Tambah dhokumèntasi",
+ "tux-editor-suggestions-title": "Pamrayogya",
+ "tux-editor-in-other-languages": "Ing basa liyané",
+ "tux-editor-need-more-help": "Butuh pitulung?",
+ "tux-editor-ask-help": "Takona supaya olèh katerangan luwih akèh",
+ "tux-editor-tm-match": "$1% cocog",
+ "tux-notices-more": "{{PLURAL:$1|$1 liyané}}",
+ "tux-notices-hide": "dhelikaké",
+ "tux-editor-save-failed": "Wurung nyimpen pertalan: $1",
+ "tux-editor-n-uses": "dianggo {{PLURAL:$1|ping}} $1",
+ "tux-editor-message-desc-more": "Tuduhaké liyané",
+ "tux-editor-message-desc-less": "Tuduhaké saperluné",
+ "tux-editor-clear-translated": "Dhelikaké kang wis kapertal",
+ "tux-editor-proofreading-mode": "Priksa",
+ "tux-editor-translate-mode": "Pratélan",
+ "tux-editor-proofreading-hide-own-translations": "Dhelikaké pertalanmu",
+ "tux-editor-proofreading-show-own-translations": "Tuduhaké pertalanmu",
+ "tux-proofread-action-tooltip": "Tandhani manawa wis dipriksa",
+ "tux-proofread-edit-label": "Besut",
+ "tux-editor-page-mode": "Kaca",
+ "tux-editor-outdated-notice": "Pertalan iki butuh dianyari.",
+ "tux-editor-outdated-notice-diff-link": "Tuduhaké béda",
+ "tux-editor-doc-editor-placeholder": "Dhokumèntasi layang",
+ "tux-editor-doc-editor-save": "Simpen dhokumèntasi",
+ "tux-editor-doc-editor-cancel": "Wurung",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|layang}} liyané",
+ "tux-messagetable-loading-messages": "Ngamot {{PLURAL:$1|layang}}...",
+ "tux-message-filter-placeholder": "Saring pratélan",
+ "tux-message-filter-result": "Tinemu $1 {{PLURAL:$1|kasil}} ngenani \"$2\"",
+ "tux-message-filter-advanced-button": "Panggolèk linuwih",
+ "tux-message-filter-optional-messages-label": "Layang manasuka",
+ "tux-proofread-translated-by-self": "Kapertal déning kowé",
+ "tux-empty-list-all": "Golongan layang iki kosong",
+ "tux-empty-list-all-guide": "Pilih golongan layang séjé saperlu kapertal",
+ "tux-translate-page-no-such-group": "<strong>Golongan kang kokarsakaké ora ana.</strong> Pilih golongan layang liyané.",
+ "tux-empty-list-translated": "Ora ana layang kang kapertal",
+ "tux-empty-list-translated-guide": "Kowé bisa ngéwangi mertal",
+ "tux-empty-list-translated-action": "Pertal",
+ "tux-empty-no-messages-to-display": "Ora ana layang kanggo dituduhaké.",
+ "tux-empty-there-are-optional": "Ana layang manasuka kang ora kapacak ing pratélan",
+ "tux-empty-show-optional-messages": "Tuduhaké layang manasuka",
+ "tux-empty-no-outdated-messages": "Ora ana layang lawas",
+ "tux-empty-nothing-to-proofread": "Ora ana kang bisa kapriksa",
+ "tux-empty-you-can-help-providing": "Kowé kena ngéwangi gawé pertalan anyar",
+ "tux-empty-nothing-new-to-proofread": "Ora ana kang anyar kang bisa kapriksa",
+ "tux-empty-you-can-review-already-proofread": "Kowé bisa mriksa pertalan kang wis dipriksa wong liya.",
+ "tux-empty-list-other": "Ora ana kang kena kapertal",
+ "tux-empty-list-other-guide": "Kowé bisa ngéwangi mriksa pertalan kang ana",
+ "tux-empty-list-other-action": "Priksa pertalan",
+ "tux-empty-list-other-link": "Tuduhaké kabèh layang",
+ "tux-editor-close-tooltip": "Tutup",
+ "tux-editor-expand-tooltip": "Jembarna",
+ "tux-editor-collapse-tooltip": "Ciyutna",
+ "tux-editor-message-tools-show-editor": "Tuduhaké ing pambesut wiki",
+ "tux-editor-message-tools-history": "Sajarah",
+ "tux-editor-message-tools-delete": "Busak",
+ "tux-editor-message-tools-translations": "Kabèh pertalan",
+ "tux-editor-loading": "Ngamot...",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|basa}} liyané",
+ "translate-statsbar-tooltip": "$1% wis kapertal, $2% wis kapriksa",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% wis kapertal, $2% wis kapriksa, $3% wis lawas",
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|golongan}} liyané",
+ "tux-session-expired": "Kowé wis ora mlebu log manèh. Mlebua log lumantar tab séjé. Utawa, turuna pertalan kang durung kasimpen, mlebua log, balia menyang kaca iki banjur isinen manèh pertalanmu.",
+ "tux-nojs": "Kaca iki butuh JavaScript."
+}
diff --git a/Translate/i18n/core/ka.json b/Translate/i18n/core/ka.json
new file mode 100644
index 00000000..4cb7aabe
--- /dev/null
+++ b/Translate/i18n/core/ka.json
@@ -0,0 +1,224 @@
+{
+ "@metadata": {
+ "authors": [
+ "BRUTE",
+ "David1010",
+ "MIKHEIL",
+ "Malafaya",
+ "Otogi",
+ "Sopho",
+ "Temuri rajavi",
+ "გიორგიმელა"
+ ]
+ },
+ "translate": "თარგმნა",
+ "translate-desc": "[[Special:Translate|სპეციალური გვერდი]] მედიავიკისა და სხვათა შეტყობინებების სათარგმნელად.",
+ "translate-taskui-export-to-file": "ექსპორტი ადგილობრივ ფორმატში",
+ "translate-taskui-export-as-po": "ექსპორტი ოფლაინური თარგმნისათვის",
+ "translate-taction-translate": "თარგმნა",
+ "translate-taction-proofread": "შემოწმება",
+ "translate-taction-lstats": "ენის სტატისტიკა",
+ "translate-taction-mstats": "შეტყობინებების ჯგუფების სტატისტიკა",
+ "translate-taction-export": "ექსპორტი",
+ "translate-page-settings-legend": "კონფიგურაცია",
+ "translate-page-group": "ჯგუფი",
+ "translate-page-language": "ენა",
+ "translate-page-limit": "ლიმიტი",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|შეტყობინება|შეტყობინება}} გვერდში",
+ "translate-submit": "აჩვენე",
+ "translate-page-navigation-legend": "ნავიგაცია",
+ "translate-page-showing-all": "აჩვენებს $1 {{PLURAL:$1|შეტყობინებას|შეტყობინებას}}.",
+ "translate-page-showing-none": "არ არის საჩვენებელი შეტყობინებები.",
+ "translate-next": "შემდეგი გვერდი",
+ "translate-prev": "წინა გვერდი",
+ "translate-page-description-legend": "ინფორმაცია ჯგუფის შესახებ",
+ "translate-page-description-hasoptional-open": "არასავალდებულო შეტყობინებების ჩვენება.",
+ "translate-page-edit": "რედაქტირება",
+ "translate-optional": "(არასავალდებულო)",
+ "translate-ignored": "(იგნორირებული)",
+ "translate-edit-title": "„$1“ რედაქტირება",
+ "translate-edit-definition": "შეტყობინების განმარტება",
+ "translate-edit-no-information": "''ამ შეტყობინებას არ აქვს დოკუმენტაცია.''\n''თუ იცით სად და როგორ გამოიყენება ეს შეტყობინება, გთხოვთ დაეხმაროთ სხვა მთარგმნელებს და დაურთოთ დოკუმენტაცია ამ შეტყობინებას.''",
+ "translate-edit-tmmatch": "$1% შესაბამისობა",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> არაკორექტულია.",
+ "translate-pref-editassistlang": "დამხმარე ენები:",
+ "prefs-translate": "თარგმნის პარამეტრები",
+ "translate-pref-editassistlang-help": "მძიმეებით გაყოფილი ენების კოდების სია. ამ ენებზე თარგმანები ნაჩვენები იქნება შეტყობინების ცვლილების დროს. სია, ნაგულისხმევად თქვენ ენაზეა დამოკიდებული.",
+ "right-translate-manage": "შეტყობინებების ჯგუფების მართვა",
+ "action-translate-manage": "შეტყობინებების ჯგუფების მართვა",
+ "right-translate-messagereview": "თარგმანების გადახედვა",
+ "translate-rc-translation-filter": "თარგმანების გაფილტვრა:",
+ "translate-rc-translation-filter-no": "არაფრის კეთება",
+ "translate-rc-translation-filter-only": "აჩვენე მხოლოდ თარგმანები",
+ "translate-rc-translation-filter-filter": "თარგმანების დამალვა",
+ "translate-rc-translation-filter-site": "საიტის შეტყობინებების ცვლილებები",
+ "translationstats": "თარგმანის სტატისტიკა",
+ "translate-stats-edits": "რედაქტირებები",
+ "translate-stats-users": "მთარგმნელები",
+ "translate-stats-registrations": "რეგისტრაციები",
+ "translate-stats-reviews": "გადახედვები",
+ "translate-stats-reviewers": "შემმოწმებლები",
+ "translate-statsf-width": "სიგანე პიქსელებში:",
+ "translate-statsf-height": "სიმაღლე პიქსელებში:",
+ "translate-statsf-days": "დროის პერიოდი დღეებში:",
+ "translate-statsf-start": "დაწყების თარიღი:",
+ "translate-statsf-scale": "დეტალიზაციის ხარისხი:",
+ "translate-statsf-scale-months": "თვე",
+ "translate-statsf-scale-weeks": "კვირა",
+ "translate-statsf-scale-days": "დღეები",
+ "translate-statsf-scale-hours": "საათები",
+ "translate-statsf-count": "ზომა:",
+ "translate-statsf-count-edits": "რედაქციების რიცხვი",
+ "translate-statsf-count-users": "აქტიური მთარგმნელები",
+ "translate-statsf-count-registrations": "ახალი მომხმარებლები",
+ "translate-statsf-count-reviews": "თარგმანის რეცენზენტები",
+ "translate-statsf-count-reviewers": "შემმოწმებლები",
+ "translate-statsf-submit": "წინასწარი გადახედვა",
+ "translate-sidebar-alltrans": "სხვა ენებზე",
+ "translations": "ყველა თარგმანი",
+ "translate-translations-no-message": "შეტყობინება \"$1\" არ ითარგმნება",
+ "translate-translations-count": "ნაპოვნია {{PLURAL:$1|ერთი თარგმანი|$1 თარგმანი}}.",
+ "translate-translations-fieldset-title": "შეტყობინება",
+ "translate-translations-messagename": "სახელი:",
+ "translate-translations-project": "პროექტი:",
+ "translate-translations-history-short": "ი",
+ "languagestats": "ენის სტატისტიკა",
+ "languagestats-summary": "ამ გვერდზე ნაჩვენებია თარგმანების სტატისტიკა ამ ენის ყველა ჯგუფის შეტყობინებისათვის.",
+ "languagestats-stats-for": "$1 ენის თარგმანების სტატისტიკა ($2).",
+ "languagestats-recenttranslations": "ბოლო თარგმანები",
+ "translate-langstats-expand": "გაშლა",
+ "translate-langstats-collapse": "ჩაკეცვა",
+ "translate-langstats-expandall": "ყველას გაშლა",
+ "translate-langstats-collapseall": "ყველას ჩაკეცვა",
+ "translate-language-code": "ენის კოდი",
+ "translate-language-code-field-name": "ენის კოდი:",
+ "translate-suppress-complete": "გამოტოვე მთლიანად თარგმნილი შეტყობინებათა ჯგუფები",
+ "translate-ls-noempty": "არ აჩვენო მთლიანად თარგმნილი შეტყობინებათა ჯგუფები",
+ "translate-language": "ენა",
+ "translate-total": "შეტყობინებები",
+ "translate-untranslated": "უთარგმნელი",
+ "translate-percentage-complete": "შესრულებული",
+ "translate-percentage-fuzzy": "მოძველებული",
+ "translate-languagestats-overall": "ყველა შეტყობინების ჯგუფი ერთად",
+ "translate-ls-submit": "სტატისტიკის ჩვენება",
+ "translate-ls-column-group": "შეტყობინების ჯგუფი",
+ "translate-mgs-pagename": "შეტყობინებების ჯგუფის სტატისტიკა",
+ "translate-mgs-group": "შეტყობინების ჯგუფი:",
+ "translate-mgs-submit": "სტატისტიკის ნახვა",
+ "translate-mgs-column-language": "ენა",
+ "translate-mgs-totals": "ყველა ენა ერთად",
+ "supportedlanguages": "მხარდაჭერილი ენები",
+ "supportedlanguages-colorlegend": "ფერადი ლეგენდა: ბოლო თარგმანი იყო $1 დღის წინ.",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|მთარგმნელი}}|მთარგმნელი}}: $1",
+ "supportedlanguages-recenttranslations": "ბოლო თარგმანები",
+ "supportedlanguages-count": "სულ $1 {{PLURAL:$1|ენა|ენა}}.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|რედაქტირება|რედაქტირება}} - ბოლო რედაქტირება $3 {{PLURAL:$3|დღის|დღის}} წინ",
+ "translate-jssti-add": "სიაში დამატება",
+ "translate-manage-import-diff": "შეტყობინება $1 | მოქმედება: $2",
+ "translate-manage-import-new": "ახალი შეტყობინება $1",
+ "translate-manage-import-deleted": "წაშლილი შეტყობინება $1",
+ "translate-manage-action-import": "იმპორტი",
+ "translate-manage-action-conflict": "იმპორტი და უზუსტობა",
+ "translate-manage-action-ignore": "იგნორირება",
+ "translate-manage-action-fuzzy": "იმპორტი და არაზუსტი თარგმანები",
+ "importtranslations": "თარგმანების იმპორტი",
+ "translate-import-from-local": "ლოკალური ფაილის ატვირთვა:",
+ "translate-import-load": "ფაილის ჩამოტვირთვა",
+ "translate-import-err-ul-failed": "ფაილის ატვირთვა ვერ მოხერხდა",
+ "translate-js-support-unsaved-warning": "თქვენ გაქვთ გამოუქვეყნებელი თარგმანები.",
+ "translate-gs-pos": "პოზ.",
+ "translate-gs-code": "კოდი",
+ "translate-gs-continent": "კონტინენტი",
+ "translate-gs-score": "შეფასება",
+ "translate-gs-multiple": "რამდენიმე",
+ "translate-gs-count": "რაოდენობა",
+ "translate-gs-total": "სულ",
+ "translate-gs-avgscore": "საშუალო შეფასება",
+ "translate-documentation-language": "შეტყობინების დოკუმენტაცია",
+ "translate-searchprofile": "თარგმანები",
+ "translate-search-languagefilter": "გაფილტვრა ენის მიხედვით:",
+ "translate-workflow-state-": "(არ არის არჩეული)",
+ "translate-workflowstatus": "სტატუსი: $1",
+ "translate-workflow-set-doing": "ყენდება...",
+ "translate-stats-workflow": "სტატუსი",
+ "translate-dynagroup-recent-label": "ბოლო თარგმანები",
+ "translate-msggroupselector-projects": "შეტყობინების ჯგუფი",
+ "translate-msggroupselector-search-placeholder": "ჯგუფების ძიება",
+ "translate-msggroupselector-search-all": "ყველა",
+ "translate-msggroupselector-search-recent": "ბოლო",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|ქვეჯგუფი|ქვეჯგუფი}}",
+ "tux-languageselector": "გადათარგმნა",
+ "tux-tab-all": "ყველა",
+ "tux-tab-untranslated": "უთარგმნელი",
+ "tux-tab-outdated": "მოძველებული",
+ "tux-tab-translated": "ნათარგმნი",
+ "tux-tab-unproofread": "შეუმოწმებელი",
+ "tux-edit": "რედაქტირება",
+ "tux-status-optional": "არასავალდებულო",
+ "tux-status-fuzzy": "მოძველებული",
+ "tux-status-proofread": "შემოწმებულია",
+ "tux-status-translated": "ნათარგმნი",
+ "tux-status-saving": "გამოქვეყნება...",
+ "tux-status-unsaved": "არ გამოქვეყნდა",
+ "tux-save-unknown-error": "დაფიქსირდა უცნობი შეცდომა.",
+ "tux-editor-paste-original-button-label": "საწყისი ტექსტის ჩასმა",
+ "tux-editor-discard-changes-button-label": "ცვლილებების გაუქმება",
+ "tux-editor-save-button-label": "თარგმანის გამოქვეყნება",
+ "tux-editor-skip-button-label": "შემდეგზე გადასვლა",
+ "tux-editor-cancel-button-label": "გაუქმება",
+ "tux-editor-confirm-button-label": "თარგმანის დადასტურება",
+ "tux-editor-shortcut-info": "დააჭირეთ „$1“-ს შესანახად ან „$2“-ს შემდეგი შეტყობინების გამოსატოვებლად ან „$3“-ს სხვა მალსახმობებისთვის",
+ "tux-editor-edit-desc": "დოკუმენტაციის რედაქტირება",
+ "tux-editor-add-desc": "დოკუმენტაციის დამატება",
+ "tux-editor-in-other-languages": "სხვა ენებზე",
+ "tux-editor-need-more-help": "დახმარება გჭირდებათ?",
+ "tux-editor-ask-help": "მოითხოვეთ დამატებითი განმარტება",
+ "tux-editor-tm-match": "შესაბამისობა $1%",
+ "tux-notices-more": "{{PLURAL:$1|კიდევ $1}}",
+ "tux-notices-hide": "დამალვა",
+ "tux-editor-message-desc-more": "იხილეთ მეტი",
+ "tux-editor-message-desc-less": "იხილეთ ნაკლები",
+ "tux-editor-clear-translated": "თარგმნილი ტექსტის დამალვა",
+ "tux-editor-proofreading-mode": "შემოწმება",
+ "tux-editor-translate-mode": "სია",
+ "tux-editor-proofreading-hide-own-translations": "თქვენი თარგმანის დამალვა",
+ "tux-editor-proofreading-show-own-translations": "თქვენი თარგმანების ჩვენება",
+ "tux-proofread-action-tooltip": "შემოწმებულად მონიშვნა",
+ "tux-proofread-edit-label": "რედაქტირება",
+ "tux-editor-page-mode": "გვერდი",
+ "tux-editor-outdated-notice": "შესაძლოა, ეს თარგმანი განახლებას საჭიროებს",
+ "tux-editor-outdated-notice-diff-link": "განსხვავებების ჩვენება",
+ "tux-editor-doc-editor-placeholder": "შეტყობინების დოკუმენტაცია",
+ "tux-editor-doc-editor-save": "დოკუმენტაციის გამოქვეყნება",
+ "tux-editor-doc-editor-cancel": "გაუქმება",
+ "tux-messagetable-more-messages": "კიდევ $1 {{PLURAL:$1|შეტყობინება|შეტყობინება}}",
+ "tux-messagetable-loading-messages": "იტვირთება {{PLURAL:$1|შეტყობინება|შეტყობინება}}...",
+ "tux-message-filter-placeholder": "ფილტრების სია",
+ "tux-message-filter-result": "ნაპოვნია $1 {{PLURAL:$1|შედეგი|შედეგი}} „$2“-თვის",
+ "tux-message-filter-advanced-button": "გაფართოებული ძიება",
+ "tux-message-filter-optional-messages-label": "არასავალდებულო შეტყობინებები",
+ "tux-proofread-translated-by-self": "თქვენი გადათარგმნილი",
+ "tux-empty-list-all": "შეტყიბინებების ჯგუფი ცარიელია",
+ "tux-empty-list-translated": "უთარგმნელი შეტყობინებები არ არის",
+ "tux-empty-list-translated-guide": "თქვენ შეგიძლიათ თარგმნაში დახმარება",
+ "tux-empty-list-translated-action": "თარგმნა",
+ "tux-empty-show-optional-messages": "არასავალდებულო შეტყობინებების ჩვენება",
+ "tux-empty-no-outdated-messages": "არ არის მოძველებული შეტყობინებები",
+ "tux-empty-nothing-to-proofread": "შესამოწმებელი არაფერია",
+ "tux-empty-nothing-new-to-proofread": "შესამოწმებელი ახალი არაფერია",
+ "tux-empty-list-other": "სათარგმნი არაფერია",
+ "tux-empty-list-other-guide": "თქვენ შეგიძლიათ გადახედოთ არსებულ თარგმანებს",
+ "tux-empty-list-other-action": "თარგმანების გადახედვა",
+ "tux-empty-list-other-link": "ყველა შეტყობინების ჩვენება",
+ "tux-editor-close-tooltip": "დახურვა",
+ "tux-editor-expand-tooltip": "გაშლა",
+ "tux-editor-collapse-tooltip": "ჩაკეცვა",
+ "tux-editor-message-tools-history": "ისტორია",
+ "tux-editor-message-tools-delete": "წაშლა",
+ "tux-editor-message-tools-translations": "ყველა თარგმანი",
+ "tux-editor-loading": "იტვირთება...",
+ "translate-search-more-languages-info": "კიდევ $1 {{PLURAL:$1|ენა|ენა}}",
+ "translate-statsbar-tooltip": "ნათარგმნი $1%, შემოწმებული $2%",
+ "translate-statsbar-tooltip-with-fuzzy": "ნათარგმნი $1%, შემოწმებული $2%, მოძველებული $3%",
+ "translate-search-more-groups-info": "კიდევ $1 {{PLURAL:$1|ჯგუფი|ჯგუფი}}"
+}
diff --git a/Translate/i18n/core/kaa.json b/Translate/i18n/core/kaa.json
new file mode 100644
index 00000000..3e98ae1e
--- /dev/null
+++ b/Translate/i18n/core/kaa.json
@@ -0,0 +1,104 @@
+{
+ "@metadata": {
+ "authors": [
+ "Atabek",
+ "Nurlan"
+ ]
+ },
+ "translate": "Awdarıw",
+ "translate-extensionname": "Awdarıw",
+ "translate-taction-translate": "Awdarıw",
+ "translate-taction-proofread": "Tekseriw",
+ "translate-taction-lstats": "Til statistikaları",
+ "translate-taction-mstats": "Xabarlamalar toparı statistikası",
+ "translate-taction-export": "Eksport",
+ "translate-page-no-such-language": "Keltirilgen til jaramsız",
+ "translate-page-no-such-group": "Keltirilgen topar jaramsız",
+ "translate-page-disabled": "Bul toparda usı tilge awdarıwlar toqtatılǵan. Sebep:\n\n<em>$1</em>",
+ "translate-page-settings-legend": "Sazlamalar",
+ "translate-page-group": "Topar",
+ "translate-page-language": "Til",
+ "translate-page-limit": "Sheklew",
+ "translate-page-limit-option": "hár bette {{PLURAL:$1|1|$1}} xabar",
+ "translate-submit": "Kórset",
+ "translate-page-navigation-legend": "Navigaciya",
+ "translate-page-showing": "Kórsetilgen xabarlar aralıǵı: $1 - $2 (barlıǵı $3).",
+ "translate-page-showing-all": "{{PLURAL:$1|1|$1}} xabar kórsetilmekte",
+ "translate-page-showing-none": "Kórsetiwge hesh qanday xabar joq.",
+ "translate-next": "Keyingi bet",
+ "translate-prev": "Aldınǵı bet",
+ "translate-page-description-legend": "Topar haqqında maǵlıwmat",
+ "translate-page-edit": "redaktorlaw",
+ "translate-optional": "(shárt emes)",
+ "translate-ignored": "(itibar berilmeytuǵın)",
+ "translate-edit-title": "$1 ózgertiw",
+ "translate-edit-definition": "Xabardıń anıqlaması",
+ "translate-edit-contribute": "úles qosıw",
+ "translate-edit-no-information": "''Bul xabardın' hu'jjet mag'lıwmatı joq. Eger siz bul xabar qayerde yamasa qalay paydalang'anın bilsen'iz, basqa awdarıwshılıwg'a usı xabardın' hu'jjet mag'lıwmatın ko'rsetip ja'rdem beriwin'iz mu'mkin.''",
+ "translate-edit-information": "Bul xabar haqqında mag'lıwmat ($1)",
+ "translate-edit-warnings": "Tolıq awdarılmaǵan xabarlar haqqında esletpeler",
+ "translate-edit-askpermission": "Ruxsat alıw",
+ "exporttranslations": "Awdarmalardı export qılıw",
+ "translate-checks-parameters": "To'mendegi parametrler qollanılmag'an: <strong>$1</strong>",
+ "translate-checks-balance": "Qawıslardın' sanı jup emes: <strong>$1</strong>",
+ "translate-checks-links": "To'mendegi siltewler jaramsız: <strong>$1</strong>",
+ "translate-checks-plural": "Anıqlamada <nowiki>{{PLURAL:}}</nowiki> paydalanılǵan, biraq awdarmada bul joq.",
+ "right-translate": "Awdarma interfeysi járdeminde ózgertiw",
+ "translate-rcfilters-translations": "Awdarmalar",
+ "translate-rcfilters-translations-only-label": "Awdarmalar",
+ "translate-stats-edits": "Redaktorlawlar",
+ "translate-stats-users": "Awdarmashılar",
+ "translate-stats-reviews": "Tekseriw",
+ "translate-stats-reviewers": "Tekseriwshiler",
+ "translate-statsf-width": "Eni (pikselde):",
+ "translate-statsf-height": "Biyikligi (pikselde):",
+ "translate-statsf-count-registrations": "Jańa paydalanıwshı",
+ "translate-statsf-count-reviews": "Awdarma tekseriwleri",
+ "translate-statsf-submit": "Kórip shıǵıw",
+ "translate-sidebar-alltrans": "Basqa tillerde",
+ "languagestats": "Til statistikaları",
+ "translate-language": "Til",
+ "translate-total": "Xabarlar",
+ "translate-untranslated": "Awdarılmaǵan",
+ "translate-percentage-complete": "Juwmaqlaw",
+ "translate-percentage-fuzzy": "Jańalawdı talap etedi",
+ "translate-mgs-pagename": "Xabarlamalar toparı statistikası",
+ "translate-mgs-column-language": "Til",
+ "supportedlanguages": "Aktiv tiller",
+ "translate-jssti-add": "Dizimge qosıw",
+ "translate-smg-rename-cancel": "Biykar etiw",
+ "translate-smg-group-message-tag-outdated": "Jańalawdı talap etedi",
+ "translate-documentation-language": "Xabar hújjetleri",
+ "translate-searchprofile": "Awdarmalar",
+ "tux-languageselector": "Mına tilge awdarıw",
+ "tux-tab-untranslated": "Awdarılmaǵan",
+ "tux-tab-outdated": "Jańalawdı talap etedi",
+ "tux-tab-translated": "Awdarılǵan",
+ "tux-tab-unproofread": "Tekserilmegen",
+ "tux-edit": "Redaktorlaw",
+ "tux-status-fuzzy": "Jańalawdı talap etedi",
+ "tux-status-proofread": "Tekserilgen",
+ "tux-status-translated": "Awdarılǵan",
+ "tux-editor-save-button-label": "Awdarmanı járiyalaw",
+ "tux-editor-skip-button-label": "Keyingisine ótiw",
+ "tux-editor-proofread-button-label": "Tekserilgen dep belgilew",
+ "tux-editor-edit-desc": "Hújjetti redaktorlaw",
+ "tux-editor-in-other-languages": "Basqa tillerde",
+ "tux-editor-clear-translated": "Awdarılǵandı jasırıw",
+ "tux-editor-proofreading-mode": "Tekseriw",
+ "tux-editor-translate-mode": "Dizim",
+ "tux-proofread-edit-label": "Redaktorlaw",
+ "tux-editor-page-mode": "Bet",
+ "tux-proofread-translated-by-self": "Siz awdardıńız",
+ "tux-empty-list-translated": "Awdarılǵan xabarlamalar joq",
+ "tux-empty-list-translated-action": "Awdarıw",
+ "tux-empty-no-outdated-messages": "Jańalawdı talap etetin xabarlar joq",
+ "tux-empty-nothing-new-to-proofread": "Tekserip shıǵıwǵa awdarma joq",
+ "tux-editor-close-tooltip": "Jabıw",
+ "tux-editor-expand-tooltip": "Keńeytiw",
+ "tux-editor-message-tools-show-editor": "Wiki redaktordan kórsetiw",
+ "tux-editor-message-tools-history": "Tariyxı",
+ "tux-editor-message-tools-delete": "Óshiriw",
+ "tux-editor-message-tools-translations": "Barlıq awdarmalar",
+ "translate-statsbar-tooltip": "$1% awdarılǵan, $2% tekserilgen"
+}
diff --git a/Translate/i18n/core/kab.json b/Translate/i18n/core/kab.json
new file mode 100644
index 00000000..dcc26af6
--- /dev/null
+++ b/Translate/i18n/core/kab.json
@@ -0,0 +1,224 @@
+{
+ "@metadata": {
+ "authors": [
+ "Belkacem77",
+ "Bilalbill",
+ "Mmistmurt"
+ ]
+ },
+ "translate": "Suqel",
+ "translate-desc": "[[Special:Translate|Asebter ameẓlu]] i tsuqilt n MediaWiki d wayen-nniḍen",
+ "translate-taskui-export-to-file": "Sifeḍ ar umasal aneṣli",
+ "translate-taskui-export-as-po": "Sifeḍ i tsuqilt war tuqqna",
+ "translate-taction-translate": "Suqel",
+ "translate-taction-proofread": "Aceggir",
+ "translate-taction-lstats": "Tidaddanin n tutlayt",
+ "translate-taction-mstats": "Tidaddanin n ugraw n yiznan",
+ "translate-taction-export": "Sifeḍ",
+ "translate-taction-disabled": "Tigawt-agi tensa ɣef uwiki-agi.",
+ "translate-page-no-such-language": "Tangalt n tutlayt yettwamlen mačči d tameɣtut.",
+ "translate-page-no-such-group": "Agraw yettwamlen mačči d ameɣtu.",
+ "translate-page-disabled": "Tisuqilin ar tutlayt-agi deg ugraw-agi nsant.\nAcuɣer:\n\n<em>$1</em>",
+ "translate-language-disabled": "Tasuqilt ar tutlayt-agi tensa.",
+ "translate-page-settings-legend": "Iɣewwaṛen",
+ "translate-page-group": "Agraw",
+ "translate-page-language": "Tutlayt",
+ "translate-page-limit": "Talast",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|n yizen|n yiznan}} deg usebter",
+ "translate-submit": "Bder",
+ "translate-page-navigation-legend": "Tunigin",
+ "translate-page-showing": "Askan n yiznan si $1 ar $2 ɣef $3.",
+ "translate-page-showing-all": "Askan n $1 n {{PLURAL:$1|yizen|yiznan}}",
+ "translate-page-showing-none": "Ulac iznan ara yettwaseknen.",
+ "translate-next": "Asebter d-iteddun",
+ "translate-prev": "Asebter yezrin",
+ "translate-page-description-legend": "Talɣut ɣef ugraw",
+ "translate-page-description-hasoptional-open": "Sken iznan ifrayanen",
+ "translate-page-edit": "ẓreg",
+ "translate-optional": "(afrayan)",
+ "translate-ignored": "(yettwazgel)",
+ "translate-edit-title": "Ẓreg \"$1\"",
+ "translate-edit-definition": "Tabadut n yizen",
+ "translate-edit-contribute": "ttekki",
+ "translate-edit-information": "Talɣef ɣef yizen ($1)",
+ "translate-edit-warnings": "Alɣu ɣef tsuqilin ur yemmiden ara",
+ "translate-edit-tmmatch-source": "Aḍris aɣbalu n tsuqilt : $1",
+ "translate-edit-tmmatch": "$1 % n umenṭaḍ",
+ "translate-edit-nopermission": "Yessefk ad tesɛuḍ izerfan n tsuqilt akken ad tsuqleḍ iznan.",
+ "translate-edit-askpermission": "Awi tasiregt",
+ "exporttranslations": "Sifeḍ tisuqilin",
+ "translate-export-form-format": "Amasal",
+ "translate-export-invalid-format": "Mudd amasal ameɣtu.",
+ "translate-export-not-supported": "Asifeḍ n tsuqilin ur yettusefrak ara.",
+ "translate-checks-fudforum-syntax": "Seqdec <nowiki>$1</nowiki> deg umḍiq n <nowiki>$2</nowiki> deg usenfaṛ-agi.",
+ "translate-pref-editassistlang": "Amarag n tutlayin:",
+ "prefs-translate": "Iɣewwaṛen n tsuqilt",
+ "translate-pref-editassistlang-bad": "Yir tangalt n tutlayt di tebdart:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Ẓreg aseqdec n ugrudem n tsuqilt",
+ "right-translate-manage": "Sefrek igrawen n tsuqlit",
+ "action-translate-manage": "sefrek igrawen n yiznan",
+ "right-translate-import": "Kter tisuqilin n war tuqqna",
+ "action-translate-import": "kter tisuqilin n war tuqqna",
+ "right-translate-messagereview": "Sleḍ tisuqilin",
+ "action-translate-messagereview": "ales taɣuri n tsuqilin",
+ "right-translate-groupreview": "Snifel addad n usuddem n igrawen n yiznan",
+ "action-translate-groupreview": "snifel addad n usuddem n umahil i yigrawen n yiznan",
+ "translate-rc-translation-filter": "Zizdeg tisuqilin",
+ "translate-rc-translation-filter-no": "Ur teg wara",
+ "translate-rc-translation-filter-only": "Sken kan tiquqilin",
+ "translate-rc-translation-filter-filter": "Zideg tisuqilin",
+ "translate-rc-translation-filter-site": "Ala asnifel n yiznan n usmel",
+ "translationstats": "Tidaddanin n tsuqilt",
+ "translate-stats-edits": "Tiẓrigin",
+ "translate-stats-users": "Imsuqal",
+ "translate-stats-registrations": "Ajerred",
+ "translate-stats-reviews": "Iceggiren",
+ "translate-stats-reviewers": "Imceggiren",
+ "translate-statsf-width": "Tehri s ipiksilen:",
+ "translate-statsf-height": "Teɣzi s ipiksilen:",
+ "translate-statsf-start": "Azemz n tazwara:",
+ "translate-statsf-scale-months": "Ayyuren",
+ "translate-statsf-scale-weeks": "Imalasen",
+ "translate-statsf-scale-days": "Ussan",
+ "translate-statsf-scale-hours": "Isragen",
+ "translate-statsf-count": "Aktal:",
+ "translate-statsf-count-edits": "Amḍan n teẓrigin",
+ "translate-statsf-count-users": "Imsuqal urmiden",
+ "translate-statsf-count-registrations": "Iseqdacen imaynuten",
+ "translate-statsf-count-reviews": "Tulsa n tɣrui n tsuqilt",
+ "translate-statsf-count-reviewers": "Imceggiren",
+ "translate-sidebar-alltrans": "S tutlayin tiyaḍ",
+ "translations": "Akk tisuqilin",
+ "translate-translations-count": "Tettwaf(ttwafent) {{PLURAL:$1|yiwet n tsuqilt|$1 n tquqilin}}.",
+ "translate-translations-fieldset-title": "Izen",
+ "translate-translations-messagename": "Isem:",
+ "translate-translations-project": "Asenfaṛ:",
+ "translate-translations-history-short": "z",
+ "languagestats": "Tidaddanin n tutlayt",
+ "languagestats-stats-for": "Tidaddanin n tsuqilt i $1 ($2).",
+ "languagestats-recenttranslations": "tisuqilin tineggura",
+ "translate-langstats-expand": "snefli",
+ "translate-langstats-collapse": "fneẓ",
+ "translate-langstats-expandall": "snefli meṛṛa",
+ "translate-langstats-collapseall": "fneẓ meṛṛa",
+ "translate-language-code": "Tangalt n tutlayt",
+ "translate-language-code-field-name": "Tangalt n tutlayt:",
+ "translate-suppress-complete": "Ffer akk igrawen n yiznan yettwasuqqlen i meṛṛa",
+ "translate-ls-noempty": "Ffer igrawen n yiznan s war tasuqilt",
+ "translate-language": "Tutlayt",
+ "translate-total": "Iznan",
+ "translate-untranslated": "Ur yettwasuqel ara",
+ "translate-percentage-complete": "Afmiḍi",
+ "translate-percentage-fuzzy": "Izri",
+ "translate-languagestats-overall": "Akk igrawen n yiznan i meṛṛa",
+ "translate-ls-submit": "Sken tidaddanin",
+ "translate-ls-column-group": "Agraw n yiznan",
+ "translate-mgs-pagename": "Tidaddanin n ugraw n yiznan",
+ "translate-mgs-fieldset": "Sken ismenyifen",
+ "translate-mgs-group": "Agraw n yiznan:",
+ "translate-mgs-submit": "Sken tidaddanin",
+ "translate-mgs-column-language": "Tutlayt",
+ "translate-mgs-totals": "Akk tutlayin i meṛṛa",
+ "supportedlanguages": "Tutlayin yettusefraken",
+ "supportedlanguages-recenttranslations": "tisuqilin tineggura",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|tutlayt|tutlayin}} s umata.",
+ "managemessagegroups": "Asefrek n ugraw n yiznan",
+ "translate-manage-import-diff": "Iznan $1 | Tiggawin: $2",
+ "translate-manage-import-new": "Izen amaynut $1",
+ "translate-manage-import-deleted": "Izen yettwakkes $1",
+ "translate-manage-action-import": "Kter",
+ "translate-manage-action-conflict": "Kter sakin creḍ d arewway",
+ "translate-manage-action-ignore": "Zgel",
+ "translate-manage-action-fuzzy": "Kter sakin creḍ tisuqilin d tirewwayin",
+ "translate-manage-import-summary": "Akter n lqem amaynut seg teɣbalut tazɣarayt",
+ "translate-manage-submit": "Selkem",
+ "translate-manage-import-ok": "Ttwaketren: $1",
+ "translate-manage-import-done": "Akter yedda!",
+ "importtranslations": "Kter tisuqilin",
+ "translate-import-from-local": "Sali afaylu adigan:",
+ "translate-import-load": "Sali afaylu",
+ "translate-import-err-dl-failed": "Ur izmir ara ad yekcem ar ufaylu:\n$1",
+ "translate-import-err-ul-failed": "Asali n ufaylu ur yeddi ara",
+ "translate-import-err-invalid-title": "Isem n ufayly yettwanefken <nowiki>$1</nowiki> mačči d ameɣtu.",
+ "translate-gs-code": "Tangalt",
+ "translate-gs-continent": "Amenẓaw",
+ "translate-gs-score": "Agmuḍ",
+ "translate-gs-count": "Amiḍan",
+ "translate-gs-total": "Amatu",
+ "translate-documentation-language": "Tasemlit n yizen",
+ "translate-searchprofile": "Tisuqilin",
+ "translate-searchprofile-tooltip": "Nadi di tsuqilin meṛṛa",
+ "translate-search-languagefilter": "Zizdeg s tytlayt:",
+ "translate-dynagroup-recent-label": "Tisuqilin tineggura",
+ "translate-msggroupselector-search-placeholder": "Nadi igrawen",
+ "translate-msggroupselector-search-all": "Akk",
+ "translate-msggroupselector-search-recent": "Melmi kan",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|asenfaṛ asnawan|isenfaṛen isnawanen}}",
+ "tux-languageselector": "Suqel ar",
+ "tux-tab-all": "Akk",
+ "tux-tab-untranslated": "Ur yettwasuqel ara",
+ "tux-tab-outdated": "Izri",
+ "tux-tab-translated": "Yettwasuqel",
+ "tux-edit": "Ẓreg",
+ "tux-status-fuzzy": "Ifat",
+ "tux-status-translated": "Yettwasuqel",
+ "tux-editor-edit-desc": "Ẓreg tasemlit",
+ "tux-editor-add-desc": "Rnu tasemlit",
+ "tux-editor-suggestions-title": "Isumar",
+ "tux-editor-in-other-languages": "S tutlayin tiyaḍ",
+ "tux-editor-need-more-help": "Tesriḍ tallelt?",
+ "tux-editor-ask-help": "Suter ugar n telɣut",
+ "tux-editor-tm-match": "$1 % n umenṭaḍ",
+ "tux-notices-more": "{{PLURAL:$1|$1 nniḍen}}",
+ "tux-notices-hide": "ffer",
+ "tux-editor-save-failed": "Asekles n tsuqilt ur yeddi ara:$1",
+ "tux-editor-n-uses": "yettwaseqdec $1 {{PLURAL:$1|n tikelt|n tikal}}",
+ "tux-editor-message-desc-more": "Sken ugar",
+ "tux-editor-message-desc-less": "Sken drus",
+ "tux-editor-clear-translated": "Ffer tasuqilt",
+ "tux-editor-proofreading-mode": "Aceggir",
+ "tux-editor-translate-mode": "Tabdart",
+ "tux-editor-proofreading-hide-own-translations": "Ffer tisuqilin-ik",
+ "tux-editor-proofreading-show-own-translations": "Sken tisuqilin-ik",
+ "tux-proofread-action-tooltip": "Creḍ yettwaɣra",
+ "tux-proofread-edit-label": "Ẓreg",
+ "tux-editor-page-mode": "Asebter",
+ "tux-editor-outdated-notice": "Tasuqilt-agi tesra aleqqem.",
+ "tux-editor-outdated-notice-diff-link": "Sken amgired",
+ "tux-editor-doc-editor-placeholder": "Tasemlit n yizen",
+ "tux-editor-doc-editor-save": "Sekles tasemlit",
+ "tux-editor-doc-editor-cancel": "Sefsex",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|n yizen|n yiznan}}-nniḍen",
+ "tux-messagetable-loading-messages": "Asali n $1 n {{PLURAL:$1|yizen|yiznan}}...",
+ "tux-message-filter-placeholder": "Zizdeg tabdart",
+ "tux-message-filter-result": "{{PLURAL:$1|0=Ula d yiwen n ugmuḍ ur yettwaf|1=Yettwaf yiwen n ugmuḍ|$1 n igmaḍ ttwafen}} i « $2 »",
+ "tux-message-filter-advanced-button": "Anadi leqqayen",
+ "tux-message-filter-optional-messages-label": "Iznan ifrayanen",
+ "tux-proofread-translated-by-self": "Tsuqleṭ",
+ "tux-empty-list-all": "Agraw-agi n yizen d ilem",
+ "tux-empty-list-all-guide": "Fren agraw n yizen-nniḍen ara tsuqleḍ",
+ "tux-empty-list-translated": "Ulac iznan yettwasuqlen",
+ "tux-empty-list-translated-guide": "Tzemreḍ ad tmuddeḍ afus di tsuqilt",
+ "tux-empty-list-translated-action": "Suqel",
+ "tux-empty-no-messages-to-display": "Ulac iznan ara d-sekneḍ.",
+ "tux-empty-show-optional-messages": "Sken iznan ifrayanen",
+ "tux-empty-no-outdated-messages": "Ilac iznan ifaten",
+ "tux-empty-nothing-to-proofread": "Ulac ayen ara teɣreḍ",
+ "tux-empty-you-can-help-providing": "Tzemreḍ ad tmuddeḍ afus di tsuqlin timaynutin",
+ "tux-empty-list-other": "Ulac acu ara tsuqleḍ.",
+ "tux-empty-list-other-guide": "Tzemreḍ ad tmuddeḍ afus di tsuqilin yellan",
+ "tux-empty-list-other-link": "Sken akk iznan",
+ "tux-editor-close-tooltip": "Mdel",
+ "tux-editor-expand-tooltip": "snefli",
+ "tux-editor-collapse-tooltip": "Fneẓ",
+ "tux-editor-message-tools-show-editor": "Sken deg umaẓeag n uwiki",
+ "tux-editor-message-tools-history": "Amazray",
+ "tux-editor-message-tools-delete": "Kkes",
+ "tux-editor-message-tools-translations": "Akk tisuqilin",
+ "tux-editor-loading": "Asali...",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|tutlayt-nniḍen|tutlayin-nniḍen}}",
+ "translate-statsbar-tooltip": "$1% tasuqilt, $2% taɣuri",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% asuqilt, $2% acegger, $3% izri",
+ "translate-search-more-groups-info": "$1 n {{PLURAL:$1|ugraw|igrawen}}-nniden",
+ "tux-nojs": "Asebter-agi yesra JavaScript."
+}
diff --git a/Translate/i18n/core/kbd-cyrl.json b/Translate/i18n/core/kbd-cyrl.json
new file mode 100644
index 00000000..a3e5ab0c
--- /dev/null
+++ b/Translate/i18n/core/kbd-cyrl.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Тамэ Балъкъэрхэ"
+ ]
+ },
+ "translate-page-settings-legend": "Теухуапхъэхэр",
+ "translate-page-group": "Гуп",
+ "translate-page-language": "Бзэ",
+ "translate-page-limit": "ФIимыхуу",
+ "translate-submit": "Къэгъэлъэгъуэн",
+ "translate-optional": "(Iэмалыншэкъым)",
+ "translate-ignored": "(щхьэщыгъэцIэфтауэ)"
+}
diff --git a/Translate/i18n/core/kbp.json b/Translate/i18n/core/kbp.json
new file mode 100644
index 00000000..7be5438e
--- /dev/null
+++ b/Translate/i18n/core/kbp.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gnangbade"
+ ]
+ },
+ "translate-documentation-language": "Tɔm kɩmamatʋ yɔɔ aseɣɖe"
+}
diff --git a/Translate/i18n/core/kcg.json b/Translate/i18n/core/kcg.json
new file mode 100644
index 00000000..ed13f522
--- /dev/null
+++ b/Translate/i18n/core/kcg.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "Kambai Akau"
+ ]
+ },
+ "translate-documentation-language": "Saailyuut ta̱m"
+}
diff --git a/Translate/i18n/core/kea.json b/Translate/i18n/core/kea.json
new file mode 100644
index 00000000..af207eef
--- /dev/null
+++ b/Translate/i18n/core/kea.json
@@ -0,0 +1,105 @@
+{
+ "@metadata": {
+ "authors": [
+ "Waldyrious"
+ ]
+ },
+ "translate": "Traduzi",
+ "translate-desc": "[[Special:Translate|Pájina spesial]] pa traduzi MediaWiki i otus projetus",
+ "translate-fuzzybot-desc": "Kel li e un konta spesial di sistema ki [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate extenson Translate] di MediaWiki ta uza pa manti tradusons. Es konta ta fazi parti di ''software'' MediaWiki i el ka sta asosiadu a ninhun uzuáriu.",
+ "translate-taskui-export-to-file": "Isporta na formatu nativu",
+ "translate-taction-translate": "Traduzi",
+ "translate-taction-proofread": "Konfirma",
+ "translate-taction-lstats": "Statístikas di traduson",
+ "translate-page-group": "Grupu",
+ "translate-page-language": "Língua",
+ "translate-page-limit": "Limiti",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|mensajen}} pur pájina",
+ "translate-page-navigation-legend": "Navegason",
+ "translate-next": "Pájina siginti",
+ "translate-prev": "Pájina anterior",
+ "translate-page-description-hasoptional-open": "Mostra mensajens opsional.",
+ "translate-page-edit": "muda",
+ "translate-optional": "(opsional)",
+ "translate-ignored": "(ignoradu)",
+ "translate-edit-title": "Muda \"$1\"",
+ "translate-edit-definition": "Difinison di mensajen",
+ "translate-edit-contribute": "kontribui",
+ "translate-edit-information": "Informason sobri es mensajen ($1)",
+ "translate-edit-tmmatch": "$1% igual",
+ "right-translate": "Muda ku interfasi di traduson",
+ "right-translate-messagereview": "Konfirma tradusons",
+ "translate-rcfilters-translations-only-desc": "Mudansas na pájinas traduzidu",
+ "translationstats": "Statístikas di traduson",
+ "translate-stats-edits": "Mudansas",
+ "translate-stats-reviews": "Konfirmasons",
+ "translate-statsf-count-edits": "Numbru di mudansas",
+ "translate-statsf-count-reviews": "Konfirmasons di tradusons",
+ "translate-sidebar-alltrans": "Na otus língua",
+ "translations": "Tudu tradusons",
+ "languagestats": "Statístikas di traduson pur língua",
+ "translate-total": "Mensajens (total)",
+ "translate-untranslated": "Sen traduson ainda",
+ "translate-percentage-complete": "Progresu",
+ "translate-percentage-fuzzy": "Dizatualizadu",
+ "translate-percentage-proofread": "Konfirmadu",
+ "translate-ls-column-group": "Grupu di mensajens",
+ "translate-mgs-group": "Grupu di mensajens:",
+ "translate-tes-group-not-found": "Ninhun rezultadu",
+ "supportedlanguages": "Línguas suportadu",
+ "managemessagegroups": "Jeston di grupu di mensajens",
+ "translate-smg-group-message-tag-outdated": "Dizatualizadu",
+ "translate-gs-total": "Total",
+ "translate-documentation-language": "Diskrison di mensajen",
+ "log-name-translationreview": "Rejistu de konfirmason di tradusons",
+ "translate-msggroupselector-projects": "Grupu di mensajens",
+ "translate-msggroupselector-search-all": "Tudu",
+ "tux-languageselector": "Traduzi pa",
+ "tux-tab-all": "Tudu",
+ "tux-tab-untranslated": "Sen traduson ainda",
+ "tux-tab-outdated": "Dizatualizadu",
+ "tux-tab-translated": "Traduzidu",
+ "tux-edit": "Muda",
+ "tux-status-optional": "Opsional",
+ "tux-status-fuzzy": "Dizatualizadu",
+ "tux-status-proofread": "Konfirmadu",
+ "tux-status-translated": "Traduzidu",
+ "tux-status-saving": "Ta publika...",
+ "tux-editor-placeholder-language": "Bu traduson na $1",
+ "tux-editor-editsummary-placeholder": "Splika bus mudansas (opsional)",
+ "tux-editor-save-button-label": "Publika traduson",
+ "tux-editor-skip-button-label": "Salta pa prósimu",
+ "tux-editor-edit-desc": "Muda dokumentason",
+ "tux-editor-latest-updates-title": "Últimus mudansas",
+ "tux-editor-all-changes": "Tudu mudansas",
+ "tux-editor-tm-match": "$1% igual",
+ "tux-notices-hide": "sukundi",
+ "tux-editor-save-failed": "Publikason di traduson ka funsiona: $1",
+ "tux-editor-clear-translated": "Sukundi mensajens traduzidu",
+ "tux-editor-proofreading-mode": "Konfirma",
+ "tux-editor-translate-mode": "Lista",
+ "tux-editor-proofreading-hide-own-translations": "Sukundi bus tradusons",
+ "tux-editor-proofreading-show-own-translations": "Mostra bus tradusons",
+ "tux-proofread-edit-label": "Muda",
+ "tux-editor-page-mode": "Pájina",
+ "tux-message-filter-placeholder": "Filtra lista",
+ "tux-message-filter-result": "$1 {{PLURAL:$1|rezultadu inkontradu}} pa \"$2\"",
+ "tux-message-filter-advanced-button": "Piskiza avansadu",
+ "tux-message-filter-optional-messages-label": "Mensajens opsional",
+ "tux-proofread-translated-by-self": "Mensajens ki bu traduzi",
+ "tux-empty-list-translated": "Ninhun mensajen traduzidu",
+ "tux-empty-list-translated-action": "Traduzi",
+ "tux-empty-there-are-optional": "Ten mensajens opsional ki ka sta mostradu na lista",
+ "tux-empty-no-outdated-messages": "Ka ten mensajens dizatualizadu",
+ "tux-empty-nothing-to-proofread": "Nada pa konfirma",
+ "tux-empty-nothing-new-to-proofread": "Nada nobu pa konfirma",
+ "tux-empty-you-can-review-already-proofread": "Bu podi konfirma tradusons ki dja foi konfirmadu pa otus.",
+ "tux-empty-list-other": "Nada pa traduzi",
+ "tux-empty-list-other-guide": "Bu podi ajuda ta konfirma tradusons ki dja foi fetu",
+ "tux-empty-list-other-action": "Konfirma tradusons",
+ "tux-empty-list-other-link": "Mostra tudu mensajens",
+ "tux-editor-message-tools-show-editor": "Abri na editor wiki",
+ "tux-editor-message-tools-translations": "Tudu tradusons",
+ "translate-statsbar-tooltip": "$1% traduzidu, $2% konfirmadu",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% traduzidu, $2% konfirmadu, $3 dizatualizadu"
+}
diff --git a/Translate/i18n/core/khw.json b/Translate/i18n/core/khw.json
new file mode 100644
index 00000000..4bd2ad2d
--- /dev/null
+++ b/Translate/i18n/core/khw.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Rachitrali"
+ ]
+ },
+ "translate": "ترجمہ کورے",
+ "translate-documentation-language": "پیغام دستاویزات"
+}
diff --git a/Translate/i18n/core/kiu.json b/Translate/i18n/core/kiu.json
new file mode 100644
index 00000000..fd1d553f
--- /dev/null
+++ b/Translate/i18n/core/kiu.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "1917 Ekim Devrimi",
+ "Erdemaslancan",
+ "Kumkumuk",
+ "Mirzali"
+ ]
+ },
+ "translate-page-settings-legend": "Eyari",
+ "translate-stats-users": "Çarnayoği",
+ "translate-tag-page-desc": "Açarnayışê pela da [[$2|$1]] wiki",
+ "translate-ls-submit": "İstatistikan bımocne",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Çarnayoğ}}|Çarnayoği}}: $1",
+ "translate-documentation-language": "Pelekerdışê mesacan",
+ "tux-editor-cancel-button-label": "Bıtexelne",
+ "tux-editor-page-mode": "Pele",
+ "tux-editor-doc-editor-cancel": "Bıtexelne"
+}
diff --git a/Translate/i18n/core/kjp.json b/Translate/i18n/core/kjp.json
new file mode 100644
index 00000000..d68969cf
--- /dev/null
+++ b/Translate/i18n/core/kjp.json
@@ -0,0 +1,86 @@
+{
+ "@metadata": {
+ "authors": [
+ "Rul1902"
+ ]
+ },
+ "translate": "ခၠယ့်လာႋဆာ်",
+ "translate-taction-translate": "ခၠယ့်လာႋ",
+ "translate-taction-lstats": "ဆ်ုခၠါင်ဘာႋသာ့ စ်ုရင့်ကါင်ကါ",
+ "translate-taction-mstats": "လိက်သုံ့ၜိင်းကုံရွာဲ စ်ုရင့်ကါင်ကါ",
+ "translate-taction-export": "မ်ုသုံ့ထင်း",
+ "translate-page-settings-legend": "အင်းတါင်ဆ်ုက်ုယိုင့်လ်ုဖး",
+ "translate-page-group": "ကုံရွာဲ",
+ "translate-page-language": "ဆ်ုခၠါင်ဘာႋသာ့",
+ "translate-page-navigation-legend": "ပ်ုယုံ့",
+ "translate-next": "လ်ုယာ့လိက်မေံၜၠါ်",
+ "translate-prev": "ၯံင်ခွိက် လိက်မေံၜၠါ်",
+ "translate-page-edit": "သံင့်ၜးၯဴ",
+ "translate-edit-title": "သံင့်ၜးၯဴ \"$1\"",
+ "translate-edit-definition": "ပ်ုယုံ့ဆ်ုခၠါင် ဆ်ုမါဏါင်းအ်ုခဝ့်ပ်ုယဝ့်",
+ "translate-edit-contribute": "ဆ်ုထ္ၜါ",
+ "translate-edit-information": "ပ်ုယုံ့ဆ်ုခၠါင်အ်ုကျံင် ဆ်ုပြိုင့်အ်ုဖၠံင်အ်ုဖၠ ($1)",
+ "translate-rcfilters-translations": "ဆ်ုခၠယ်ထသယ်လ်ုဖး",
+ "translate-rcfilters-translations-only-label": "ဆ်ုခၠယ့်ထသယ်လ်ုဖး",
+ "translationstats": "ဆ်ုခၠယ့် စ်ုရင့်ကါင်ကါ",
+ "translate-stats-edits": "ဆ်ုသံင့်ၜးၯဴလ်ုဖး",
+ "translate-stats-users": "ခၠယ့်ဏင့်ဆာႋလ်ုဖး",
+ "translate-stats-registrations": "ပ္တိင့်ဏင့်ဆာႋဏါင်း",
+ "translate-sidebar-alltrans": "အ်ုၰာႋၰံင် ဆ်ုခၠါင်ဘာႋသာ့လ်ုဖးသိုဝ်",
+ "translations": "ခၠယ့်ထလုက်ဆိင့်",
+ "translate-translations-fieldset-title": "လိက်သုံ့ၜိင်း",
+ "translate-translations-messagename": "အ်ုမၠိင်:",
+ "translate-translations-project": "ပ်ုရောဲဂျက်:",
+ "languagestats": "ဆ်ုခၠါင်ဘာႋသာ့ စ်ုရင့်ကါင်ကါ",
+ "languagestats-summary": "လိက်မေံၜၠါ်ယိုဝ် ဆ်ုခၠါင်ဘာႋသာ့လ်ုဏါင်းၯင်ႋ လိက်ၜိင်းသုံ့ကုံလွာဲလုက်ဆိင့် ဆ်ုခၠယ့်စ်ုရင့်ကါင်ကါဏှ် ဏဲဖှ်ေထဝေ့ဆေဝ်ႋလှ်။",
+ "languagestats-stats-for": "$1 ($2) အ်ုၯင်း ခၠယ့်ထသယ် စ်ုရင့်ကါင်ကါ",
+ "languagestats-recenttranslations": "လ်ုယိက်လ်ုမဝ်ႋ ဆ်ုခၠယ့်လ်ုဖး",
+ "translate-langstats-expand": "မာလာဲ",
+ "translate-langstats-collapse": "မာအိင်း",
+ "translate-langstats-expandall": "ဖၠဟ်လဲါလုက်ကာ",
+ "translate-langstats-collapseall": "သါ်သူးလုက်ကာ",
+ "translate-language-code": "ဆ်ုခၠါင်ဘာႋသာ့ၜီးၜါ်",
+ "translate-language-code-field-name": "ဆ်ုခၠါင်ဘာႋသာ့ၜီးၜါ်:",
+ "translate-suppress-complete": "ဍုဂ်ဍုဂ်ပါင်ပါင်ခၠယ့်ထ လိက်သုံ့ကုံလွာဲဏှ် မ်ုကာၜါ်ထ",
+ "translate-ls-noempty": "ခၠယ့်ထလ်ုဍုဂ်ပါင် လိက်သုံ့ကုံလွာဲဏှ် မ်ုကာၜါ်",
+ "translate-language": "ဆ်ုခၠါင်ဘာႋသာ့",
+ "translate-total": "လိက်ဆ်ုသုံ့လ်ုဖး",
+ "translate-untranslated": "လ်ုခၠယ့်ထၯး",
+ "translate-percentage-complete": "ဆ်ုၯံင်ခွိက်",
+ "translate-percentage-fuzzy": "ဆ်ုအှ်ထဝ်ႋလင်ႋခါင့်",
+ "translate-percentage-proofread": "မ်ုယောဝ်ႋထါင်",
+ "translate-ls-submit": "မ်ုဍုဂ်ဏဲ စ်ုရင့်ကါင်ကါ",
+ "translate-ls-column-group": "လိက်ဆ်ုသုံ့ကုံလွာဲ",
+ "translate-mgs-pagename": "လိက်သုံ့ၜိင်းကုံရွာဲ စ်ုရင့်ကါင်ကါ",
+ "translate-mgs-fieldset": "မ်ုဍုဂ်ဏဲ လုဲႋၯးသးလ်ုဖး",
+ "translate-mgs-group": "လိက်ဆ်ုသုံ့ကုံလွာဲ:",
+ "translate-mgs-submit": "မ်ုဍုဂ်ဏဲ စ်ုရင့်ကါင်ကါ",
+ "translate-mgs-column-language": "ဆ်ုခၠါင်ဘာႋသာ့",
+ "supportedlanguages-summary": "လိက်မေံၜၠါ်ယိုဝ် {{SITENAME}} မှ ထောက်ပံ့ထားသည့် ဘာသာစကားအားလုံး၏ စာရင်းကို ပြသထားပြီး ယင်းဘာသာစကားတွင် လုပ်ဆောင်နေသော ဘာသာပြန်သူများ၏ အမည်များကို ဖော်ပြထားသည်။ တည်းဖြတ်မှုပိုများသော ဘာသာပြန်သူများကို ပိုကြီးသောနာမည်ဖြင့် ဖော်ပြထားပြီး အောက်ခြေမျဉ်းသည် ဘာသာပြန်သူက ဤနေရာတွင် လတ်တလော မည်မျှတက်ကြွစွာ ပါဝင်ခဲ့သည်ကို ဖော်ပြသည်။",
+ "supportedlanguages-colorlegend": "အ်ုယံင့်အ်ုၯင်ႋ လိက်မါဏါင်း $1 မူႋဏီယိက်ခါ့ လင်ခါင့်ထုက် ဆ်ုခၠယ့်ဝေ့",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|ခၠယ့်ဏင့်ဆာႋ}}|ခၠယ့်ဏင့်ဆာႋလ်ုဖး}}: $1",
+ "supportedlanguages-recenttranslations": "လ်ုယိက်လ်ုမဝ်ႋ ဆ်ုခၠယ့်လ်ုဖး",
+ "supportedlanguages-count": "{{PLURAL:$1|ဆ်ုခၠါင်ဘာႋသာ့|ဆ်ုခၠါင်ဘာႋသာ့လ်ုဖး}} ကုံကံင်း $1",
+ "translate-manage-action-import": "ဆူ့ဍုဂ်သုံ့လင်",
+ "translate-documentation-language": "လိက်ၜၠာ် လိက်မါၮါင်း",
+ "translate-searchprofile": "ဆ်ုခၠယ့်ထသယ်လ်ုဖး",
+ "translate-dynagroup-recent-label": "လ်ုယိက်လ်ုမဝ်ႋ ဆ်ုခၠယ့်လ်ုဖး",
+ "translate-msggroupselector-projects": "လိက်ဆ်ုသုံ့ကုံလွာဲ",
+ "translate-msggroupselector-search-all": "လုက်ဆိင့်",
+ "tux-languageselector": "မ်ုခၠယ့်အိုဝ်ဏှ်",
+ "tux-tab-all": "လုက်ဆိင့်",
+ "tux-tab-untranslated": "လ်ုခၠယ့်ထၯး",
+ "tux-tab-outdated": "ဆ်ုအှ်ထဝ်ႋလင်ႋခါင့်",
+ "tux-tab-translated": "ဆ်ုခၠယ့်ထ",
+ "tux-edit": "သံင့်ၜးၯဴ",
+ "tux-status-fuzzy": "ဆ်ုအှ်ထဝ်ႋလင်ႋခါင့်",
+ "tux-status-translated": "ဆ်ုခၠယ့်ထ",
+ "tux-editor-in-other-languages": "အ်ုၰာႋၰံင် ဆ်ုခၠါင်ဘာႋသာ့လ်ုဖးသိုဝ်",
+ "tux-proofread-edit-label": "သံင့်ၜးၯဴ",
+ "tux-empty-list-translated-action": "မ်ုခၠယ့်အိုဝ်",
+ "tux-editor-expand-tooltip": "မာလာဲ",
+ "tux-editor-collapse-tooltip": "မာအိင်း",
+ "tux-editor-message-tools-history": "မေင်ႋစိင်",
+ "tux-editor-message-tools-delete": "ထုဂ်ဆိင့်",
+ "tux-editor-message-tools-translations": "ဆ်ုခၠယ့်လ်ုဖးလုက်ဆိင့်"
+}
diff --git a/Translate/i18n/core/kk-arab.json b/Translate/i18n/core/kk-arab.json
new file mode 100644
index 00000000..840faf35
--- /dev/null
+++ b/Translate/i18n/core/kk-arab.json
@@ -0,0 +1,34 @@
+{
+ "@metadata": {
+ "authors": [
+ "AlefZet"
+ ]
+ },
+ "translate": "اۋدارۋ",
+ "translate-page-no-such-language": "كەلتىرىلگەن ٴتىل بەلگىلەمەسى جارامسىز",
+ "translate-page-no-such-group": "ەنگىزىلگەن توب جارامسىز.",
+ "translate-page-settings-legend": "باپتاۋ",
+ "translate-page-group": "حابار توبى",
+ "translate-page-language": "ٴتىلى",
+ "translate-page-limit": "شەكتەمى",
+ "translate-page-limit-option": "بەت سايىن {{PLURAL:$1|1|$1}} حابار",
+ "translate-submit": "كەلتىر!",
+ "translate-page-navigation-legend": "باعىتتاۋ",
+ "translate-page-showing": "كورسەتىلگەن حابار اۋقىمى: $1 — $2 (نە بارلىعى $3).",
+ "translate-page-showing-all": "كورسەتىلۋى: {{PLURAL:$1|1|$1}} حابار.",
+ "translate-page-showing-none": "كورسەتىلەتىن ەش حابار جوق.",
+ "translate-next": "كەلەسى بەت",
+ "translate-prev": "الدىڭعى بەت",
+ "translate-page-description-legend": "بۇل توپ تۋرالى مالىمەت",
+ "translate-optional": "(مىندەتتى ەمەس)",
+ "translate-ignored": "(ەلەمەيتىن)",
+ "translate-edit-definition": "حاباردىڭ انىقتالىمى",
+ "translate-edit-contribute": "ۇلەس بەر",
+ "translate-edit-no-information": "''بۇل حابار قۇجاتتاماسىز. ەگەر وسى حاباردىڭ قايدا نەمەسە قالاي قولدانعانىن بىلسەڭىز, بۇل حابارعا قۇجاتتاما كەلتىرىپ, باسقا اۋدارۋشىلارعا كومەكتەسە الاسىز.''",
+ "translate-edit-information": "بۇل حابار تۋرالى مالىمەت ($1)",
+ "translate-edit-warnings": "تولىق اۋدارىلماعان حابارلار تۋرالى اڭعارتپالار",
+ "translate-checks-parameters": "كەلەسى باپتالىمدار پايدالانىلماعان: <strong>$1</strong>",
+ "translate-checks-balance": "مىندا جاقشالاردىڭ بارلىق سانى جۇپ ەمەس: <strong>$1</strong>",
+ "translate-checks-links": "كەلەسى سىلتەمەلەر جارامسىز: <strong>$1</strong>",
+ "translate-checks-plural": "انىقتالىمدا <nowiki>{{PLURAL:}} پايدالانىلعان, بىراق اۋدارمادا بۇل جوق."
+}
diff --git a/Translate/i18n/core/kk-cyrl.json b/Translate/i18n/core/kk-cyrl.json
new file mode 100644
index 00000000..bea8d1fd
--- /dev/null
+++ b/Translate/i18n/core/kk-cyrl.json
@@ -0,0 +1,280 @@
+{
+ "@metadata": {
+ "authors": [
+ "AlefZet",
+ "Arystanbek",
+ "GaiJin",
+ "Marat",
+ "Nurlan",
+ "U.ayaao.p",
+ "СеніңШешең"
+ ]
+ },
+ "translate": "Аудару",
+ "translate-extensionname": "Аудару",
+ "translate-desc": "MediaWiki және бұнан тыстарды аударуға арналған [[Special:Translate|арнайы бет]]",
+ "translate-taskui-export-to-file": "Негізгі форматын экспорттау",
+ "translate-taskui-export-as-po": "Оффлайн аударма үшін экспорттау",
+ "translate-taction-translate": "Аудару",
+ "translate-taction-proofread": "Тексеру",
+ "translate-taction-lstats": "Тіл статистикалары",
+ "translate-taction-mstats": "Хабар тобы статистикасы",
+ "translate-taction-export": "Экспорттау",
+ "translate-taction-disabled": "Бұл уикиде бұл әрекет сөндірілген.",
+ "translate-page-no-such-language": "Келтірілген тіл дұрыс емес.",
+ "translate-page-no-such-group": "Келтірілген топ дұрыс емес.",
+ "translate-page-disabled": "Осы топтағы аудармаларды бұл тілге аударуы сөндірілген. \nСебебі:\n\n<em>$1</em>",
+ "translate-language-disabled": "Бұл тілге аудару ажыратылған.",
+ "translate-page-settings-legend": "Бапталымдар",
+ "translate-page-group": "Хабар тобы",
+ "translate-page-language": "Тілі",
+ "translate-page-limit": "Шектемі",
+ "translate-page-limit-option": "бет сайын {{PLURAL:$1|хабарлама|хабарлама}}",
+ "translate-submit": "Келтір!",
+ "translate-page-navigation-legend": "Шарлау",
+ "translate-page-showing": "Көрсетілген хабар ауқымы: $1 — $2 (не барлығы $3).",
+ "translate-page-showing-all": "$1 {{PLURAL:$1|хабарлама|хабарлама}} көрсетілуде.",
+ "translate-page-showing-none": "Көрсетілетін еш хабар жоқ.",
+ "translate-next": "Келесі бет",
+ "translate-prev": "Алдыңғы бет",
+ "translate-page-description-legend": "Бұл топ туралы мәлімет",
+ "translate-page-description-hasoptional-open": "Қосымша хабарларды көрсету",
+ "translate-page-edit": "өңдеу",
+ "translate-optional": "(міндетті емес)",
+ "translate-ignored": "(елемейтін)",
+ "translate-edit-title": "«$1» аудармасын өңдеу",
+ "translate-edit-definition": "Хабар анықтауы",
+ "translate-edit-contribute": "өңдеу",
+ "translate-edit-no-information": "<em>Бұл хабар құжаттамасыз.\nЕгер бұл хабардың қайда немесе қалай қолданғанын білсеңіз, бұл хабарға құжаттама келтіру арқылы басқа аударушыларға көмектесе аласыз.</em>",
+ "translate-edit-information": "Бұл хабар туралы мәлімет ($1)",
+ "translate-edit-warnings": "Толық аударылмаған аудармалар туралы ескертулер",
+ "translate-edit-tmmatch-source": "Аударма қайнар мәтіні: $1",
+ "translate-edit-tmmatch": "$1% сәйкес келеді",
+ "translate-edit-nopermission": "Хабарламаларды аудару үшін сізге аудару құқығы қажет.",
+ "translate-edit-askpermission": "Рұқсат алу",
+ "exporttranslations": "Аудармаларды экспорттау",
+ "translate-export-form-format": "Пішім",
+ "translate-export-invalid-format": "Жарамды пішімді көрсетіңіз.",
+ "translate-checks-parameters": "Келесі {{PLURAL:$2|параметр|параметрлер}} пайдаланылмаған: \n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "Келесі {{PLURAL:$2|параметр|параметрлер}} белгісіз:\n<strong>$1</strong>",
+ "translate-checks-balance": "Мында {{PLURAL:$2|жақшаның|жақшалардың}} бүкіл саны жұп емес: \n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "Келесі {{PLURAL:$2|сілтеме|$2 сілтеме}} жарамсыз: \n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "Келесі {{PLURAL:$2|сілтемені|$2 сілтемені}} қажет етеді:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Анықталымда <nowiki>{{PLURAL:}}</nowiki> пайдаланылған, бірақ аударма жоқ.",
+ "translate-checks-pagename": "Анықтамадан есім кеңістігі өзгертілген",
+ "translate-checks-replacement": "«$1» дегеннің орнына «$2» деп жазыңыз.",
+ "translate-checks-empty": "Мазмұны жоқ немесе тек бос орыны бар аудармаға рұқсат етілмейді.",
+ "translate-pref-editassistlang": "Көмекші тілдер:",
+ "prefs-translate": "Аударма баптаулары",
+ "translate-pref-editassistlang-bad": "Тізімдегі дұрыс емес тіл коды:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Аудару интерфесін қолданып өңдеу",
+ "right-translate-manage": "Хабарлама топтарын басқару",
+ "action-translate-manage": "хабарлама топтарын басқару",
+ "right-translate-import": "Оффлайн аудармаларды импорттау",
+ "action-translate-import": "Оффлайн аудармаларды импорттау",
+ "right-translate-messagereview": "Аудармаларды тексеру",
+ "translate-rcfilters-translations": "Аудармалар",
+ "translate-rcfilters-translations-only-label": "Аудармалар",
+ "translate-rc-translation-filter": "Аудармаларды сүзгілеу:",
+ "translate-rc-translation-filter-no": "Ештеңе істемеу",
+ "translate-rc-translation-filter-only": "Тек аудармаларды көрсету",
+ "translate-rc-translation-filter-filter": "Аудармаларды сүзгілеп тастау",
+ "translate-rc-translation-filter-site": "Тек сайт хабарларының өзгерістері",
+ "translationstats": "Аударма статискасы",
+ "translate-stats-edits": "Өңдемелер",
+ "translate-stats-users": "Аудармашылар",
+ "translate-stats-registrations": "Тіркеулер",
+ "translate-stats-reviews": "Тексеріп шығулар",
+ "translate-stats-reviewers": "Тексерушілер",
+ "translate-statsf-width": "Ені (пикселмен):",
+ "translate-statsf-height": "Биіктігі (пикселмен):",
+ "translate-statsf-start": "Басталу уақыты:",
+ "translate-statsf-scale-months": "Айлар",
+ "translate-statsf-scale-weeks": "Апталар",
+ "translate-statsf-scale-days": "Күндер",
+ "translate-statsf-scale-hours": "Сағаттар",
+ "translate-statsf-count": "Мән:",
+ "translate-statsf-count-edits": "Өңдеме саны",
+ "translate-statsf-count-users": "Белсенді аудармашылар",
+ "translate-statsf-count-registrations": "Жаңа қатысушылар",
+ "translate-statsf-count-reviews": "Аударма шолулары",
+ "translate-statsf-count-reviewers": "Тексерушілер",
+ "translate-statsf-submit": "Қарап шығу",
+ "translate-sidebar-alltrans": "Басқа тілдерде",
+ "translations": "Барлық аудармалар",
+ "translations-summary": "Барлық қол жетімді аудармаларды көрсету үшін төменге хабарлама атауын енгізіңіз.",
+ "translate-translations-no-message": "«$1» аударылатын хабарлама емес",
+ "translate-translations-none": "«$1» үшін аудармалар жоқ",
+ "translate-translations-count": "{{PLURAL:$1|Бір аударма|$1 аударма}} табылды.",
+ "translate-translations-fieldset-title": "Хабарлама",
+ "translate-translations-messagename": "Атауы:",
+ "translate-translations-project": "Жоба:",
+ "translate-translations-history-short": "т",
+ "languagestats": "Тіл статистикасы",
+ "messagegroupstats-summary": "Бұл бет хабарлама тобы статистикасын көрсетеді.",
+ "languagestats-stats-for": "$1 ($2) дегеннің аударма статистикасы.",
+ "languagestats-recenttranslations": "соңғы аудармалар",
+ "translate-langstats-incomplete": "Бұл беттегі кейбір статитикалар толық емес. Көбірек статистика көру үшін қайта жүктеңіз.",
+ "translate-langstats-expand": "кеңейту",
+ "translate-langstats-collapse": "жиыру",
+ "translate-langstats-expandall": "барлығын жаю",
+ "translate-langstats-collapseall": "барлығын жиыру",
+ "translate-language-code": "Тіл коды",
+ "translate-language-code-field-name": "Тіл коды:",
+ "translate-suppress-complete": "Толығымен аударылған хабарлама топтарын жасыру",
+ "translate-ls-noempty": "Толығымен аударылмаған хабарлама топтарын жасыру",
+ "translate-language": "Тіл",
+ "translate-total": "Хабарламалар",
+ "translate-untranslated": "Аударылмаған",
+ "translate-percentage-complete": "Бітіруі",
+ "translate-percentage-fuzzy": "Жаңартуды қажет етеді",
+ "translate-languagestats-overall": "Барлық хабарлама топтары бірге",
+ "translate-ls-submit": "Статистикаларды көрсету",
+ "translate-ls-column-group": "Хабарлама тобы",
+ "translate-mgs-pagename": "Хабарлама тобы статистикаслары",
+ "translate-mgs-fieldset": "Баптауларын көрсету",
+ "translate-mgs-group": "Хабарлама тобы:",
+ "translate-mgs-nocomplete": "Толықтай аударған тілдерді көрсетпеу",
+ "translate-mgs-noempty": "Ешбір аудармалары жоқ тілдерді көрсетпеу.",
+ "translate-mgs-submit": "Статистикаларды көрсету",
+ "translate-mgs-column-language": "Тіл",
+ "translate-mgs-totals": "Барлық $1 {{PLURAL:$1|тіл}} бірге",
+ "translate-mgs-invalid-group": "Көрсетілген $1 тобы жоқ.",
+ "translate-mgs-nothing": "Сұралған статисканы көруге ештеңе жоқ.",
+ "supportedlanguages": "Белсенді тілдер",
+ "supportedlanguages-recenttranslations": "жуықтағы аудармалар",
+ "supportedlanguages-count": "Барлығы $1 {{PLURAL:$1|тіл|тіл}}.",
+ "translate-jssti-add": "Тізімге қосу",
+ "managemessagegroups": "Хабарлама тобы басқарылуы",
+ "translate-smg-nochanges": "Үрдісте ешбір өзгеріс жоқ.",
+ "translate-smg-left": "Уикидегі хабарлама контенті",
+ "translate-smg-right": "Келе жатқан өзгерістер",
+ "translate-manage-import-diff": "Хабарлама $1 | Әрекеттер: $2",
+ "translate-manage-import-new": "Жаңа хабарлама ($1)",
+ "translate-manage-import-deleted": "Жойылған хабарлама: $1",
+ "translate-manage-action-import": "Импорттау",
+ "translate-manage-action-ignore": "Елемеу",
+ "translate-manage-import-ok": "Импорталды: $1",
+ "translate-manage-import-done": "Импортау аяқталды!",
+ "importtranslations": "Импортталған аудармалар",
+ "translate-import-from-local": "Жергілікті файлды жүктеу:",
+ "translate-import-load": "Файлды оқу",
+ "translate-import-err-ul-failed": "Файлды жүктеу сәттіз болды",
+ "translate-import-err-invalid-title": "Көрсетілген <nowiki>$1</nowiki> файл атауы дұрыс емес.",
+ "translate-js-support-unsaved-warning": "Сізде жарияланбаған аудармаларыңыз бар.",
+ "translate-gs-pos": "Орын",
+ "translate-gs-code": "Код",
+ "translate-gs-continent": "Құрлық",
+ "translate-gs-speakers": "Сөйлеушілер",
+ "translate-gs-score": "Есеп",
+ "translate-gs-multiple": "Көбейту",
+ "translate-gs-count": "Санау",
+ "translate-gs-total": "Hámmesi",
+ "translate-gs-avgscore": "Орташа есеп",
+ "translate-documentation-language": "Хабарлама құжаттамасы",
+ "translate-searchprofile": "Аудармалар",
+ "translate-searchprofile-tooltip": "Барлық аудармалардан іздеу",
+ "translate-search-languagefilter": "Тілі бойынша сүзгілеу:",
+ "translate-search-nofilter": "Сүзгілеу жоқ",
+ "log-name-translationreview": "Аударманы тексеру журналы",
+ "log-description-translationreview": "Хабарлама топтары және барлық аудармаларды тексеру журналы.",
+ "logentry-translationreview-message": "$1 $3 аудармасын {{GENDER:$2|тексерді}}",
+ "group-translate-sandboxed": "Бекітілмеген аудармашылар",
+ "group-translate-sandboxed-member": "{{GENDER:$1|бекітілмеген аудармашылар}}",
+ "translate-dynagroup-recent-label": "Соңғы аудармалар",
+ "translate-dynagroup-additions-label": "Соңғы қосылғандар",
+ "translate-dynagroup-additions-desc": "Бұл хабарлама тобы жаңа және өзгертілген хабарламаларды көрсетуде",
+ "translate-msggroupselector-projects": "Хабарлама тобы",
+ "translate-msggroupselector-search-placeholder": "Топтарды іздеу",
+ "translate-msggroupselector-search-all": "Барлығы",
+ "translate-msggroupselector-search-recent": "Соңғы",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|ішкі тобы|ішкі тобы}}",
+ "tux-languageselector": "Мына тілге аудару:",
+ "tux-tab-all": "Барлығы",
+ "tux-tab-untranslated": "Аударылмаған",
+ "tux-tab-outdated": "Жаңартуды қажет етеді",
+ "tux-tab-translated": "Аударылған",
+ "tux-tab-unproofread": "Тексерілмеген",
+ "tux-edit": "Өңдеу",
+ "tux-status-optional": "Міндетті емес",
+ "tux-status-fuzzy": "Жаңартуды қажет етеді",
+ "tux-status-proofread": "Тексерілген",
+ "tux-status-translated": "Аударылған",
+ "tux-status-saving": "Жариялануда...",
+ "tux-status-unsaved": "Жарияланбады",
+ "tux-save-unknown-error": "Белгісіз қате кездесті.",
+ "tux-editor-placeholder-language": "$1 аудармаңыз",
+ "tux-editor-editsummary-placeholder": "Түйіндемесін жазыңыз (міндетті емес)",
+ "tux-editor-paste-original-button-label": "Қайнар мәтінін қою",
+ "tux-editor-discard-changes-button-label": "Өзгерістерді болдырмау",
+ "tux-editor-save-button-label": "Аударманы жариялау",
+ "tux-editor-skip-button-label": "Келесісіне өту",
+ "tux-editor-cancel-button-label": "Қажет емес",
+ "tux-editor-confirm-button-label": "Аударманы құптау",
+ "tux-editor-proofread-button-label": "Тексерілген деп белгілеу",
+ "tux-editor-shortcut-info": "Сақтап келесі хабарламаға өту үшін «$1», жай келесі хабарламаға өту үшін «$2», түйіндеме қалдыру үшін «$4», немесе басқа пернелер тіркесімін көру үшін «$3» басыңыз.",
+ "tux-editor-edit-desc": "Құжаттаманы өңдеу",
+ "tux-editor-add-desc": "Құжаттаманы қосу",
+ "tux-editor-suggestions-title": "Ұсыныстар",
+ "tux-editor-in-other-languages": "Басқа тілдерде",
+ "tux-editor-need-more-help": "Басқада көмек қажет пе?",
+ "tux-editor-ask-help": "Көбірек мәлімет сұрау",
+ "tux-editor-tm-match": "$1% сай келеді",
+ "tux-notices-more": "{{PLURAL:$1|Тағы $1}}",
+ "tux-notices-hide": "жасыру",
+ "tux-editor-save-failed": "Аударманы жариялау сәтсіз болды: $1",
+ "tux-editor-n-uses": " $1 {{PLURAL:$1|рет|рет}} қолданған",
+ "tux-editor-message-desc-more": "Көбірек көру",
+ "tux-editor-message-desc-less": "Азырақ көру",
+ "tux-editor-clear-translated": "Аударылғандарды жасыру",
+ "tux-editor-proofreading-mode": "Тексеру",
+ "tux-editor-translate-mode": "Тізім",
+ "tux-editor-proofreading-hide-own-translations": "Аударғандарымды жасыр",
+ "tux-editor-proofreading-show-own-translations": "Аударғандарымды көрсету",
+ "tux-proofread-action-tooltip": "Тексерілген деп белгілеу",
+ "tux-proofread-edit-label": "Өңдеу",
+ "tux-editor-page-mode": "Бет",
+ "tux-editor-outdated-notice": "Бұл аударма жаңартуды қажет етеді.",
+ "tux-editor-outdated-notice-diff-link": "Айырмашылығын көрсету",
+ "tux-editor-doc-editor-placeholder": "Хабарлама құжаттамасы",
+ "tux-editor-doc-editor-save": "Құжаттаманы жариялау",
+ "tux-editor-doc-editor-cancel": "Болдырмау",
+ "tux-messagetable-more-messages": "Тағы $1 {{PLURAL:$1|хабарлама}}",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|Хабарлама|Хабарламалар}} оқылып жатыр...",
+ "tux-message-filter-placeholder": "Тізімді сүзгілеу",
+ "tux-message-filter-result": "«$2» деген іздеу сұранысына $1 {{PLURAL:$1|нәтиже|нәтиже}} табылды",
+ "tux-message-filter-advanced-button": "Кеңейтілген іздеу",
+ "tux-message-filter-optional-messages-label": "Міндетті емес хабарламалар",
+ "tux-proofread-translated-by-self": "Сіз аудардыңыз",
+ "tux-empty-list-all": "Бұл хабарлама тобы бос",
+ "tux-empty-list-all-guide": "Аударуға басқа хабарлама тобын таңдау",
+ "tux-translate-page-no-such-group": "<strong>Көрсетілген топ жоқ.</strong> Басқа хабарлама тобын таңдаңыз.",
+ "tux-empty-list-translated": "Аударылған хабарлама жоқ",
+ "tux-empty-list-translated-guide": "Аударуға көмектесе аласыз",
+ "tux-empty-list-translated-action": "Аудару",
+ "tux-empty-no-messages-to-display": "Көрсетуге хабрлама жоқ.",
+ "tux-empty-there-are-optional": "Тізімде міндетті хабарламалар көрсетілмеген",
+ "tux-empty-show-optional-messages": "Қосымша хабарларды көрсету",
+ "tux-empty-no-outdated-messages": "Жаңартуды қажет ететін хабарламалар жоқ",
+ "tux-empty-nothing-to-proofread": "Тексеріп шығуға еш хабарлама жоқ",
+ "tux-empty-you-can-help-providing": "Сіз жаңа аудармалармен қамтамасыз етуге көмектесе аласыз",
+ "tux-empty-nothing-new-to-proofread": "Тексеріп шығуға ешбір хабарлама жоқ",
+ "tux-empty-you-can-review-already-proofread": "Әлдеқашан басқа қатысушылар тексерген аудармаларды тексере аласыз.",
+ "tux-empty-list-other": "Аударатын ештеңе жоқ",
+ "tux-empty-list-other-guide": "Сіз бар аудармаларды тексеруге көмектесе аласыз",
+ "tux-empty-list-other-action": "Аудармаларды тексеру",
+ "tux-empty-list-other-link": "Барлық хабарламаларды көрсету",
+ "tux-editor-close-tooltip": "Жабу",
+ "tux-editor-expand-tooltip": "Кеңейту",
+ "tux-editor-collapse-tooltip": "Жиыру",
+ "tux-editor-message-tools-show-editor": "Уикиедиторда көрсету",
+ "tux-editor-message-tools-history": "Тарихы",
+ "tux-editor-message-tools-delete": "Жою",
+ "tux-editor-message-tools-translations": "Барлық аудармалар",
+ "tux-editor-loading": "Оқып жатыр…",
+ "translate-search-more-languages-info": "Тағы $1 {{PLURAL:$1|тіл}}",
+ "translate-statsbar-tooltip": "$1% аударылған, $2% тексерілген",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% аударылған, $2% тексерілген, $3% жаңартуды қажет етеді",
+ "translate-search-more-groups-info": "Тағы $1 {{PLURAL:$1|топ}}:",
+ "tux-nojs": "Бұл құрал JavaScript-сіз жұмыс істемейді. JavaScript өшірулі, жұмыс істей алмады, немесе бұл браузерге қолдау көрсетілмейді."
+}
diff --git a/Translate/i18n/core/kk-latn.json b/Translate/i18n/core/kk-latn.json
new file mode 100644
index 00000000..0ee1bdb3
--- /dev/null
+++ b/Translate/i18n/core/kk-latn.json
@@ -0,0 +1,36 @@
+{
+ "@metadata": {
+ "authors": [
+ "AlefZet",
+ "Atabek",
+ "GaiJin"
+ ]
+ },
+ "translate": "Awdarıw",
+ "translate-page-no-such-language": "Keltirilgen til belgilemesi jaramsız",
+ "translate-page-no-such-group": "Engizilgen tob jaramsız.",
+ "translate-page-settings-legend": "Baptaw",
+ "translate-page-group": "Xabar tobı",
+ "translate-page-language": "Tili",
+ "translate-page-limit": "Şektemi",
+ "translate-page-limit-option": "bet saýın {{PLURAL:$1|1|$1}} xabar",
+ "translate-submit": "Keltir!",
+ "translate-page-navigation-legend": "Şarlaw",
+ "translate-page-showing": "Körsetilgen xabar awqımı: $1 - $2 (ne barlığı $3).",
+ "translate-page-showing-all": "Körsetilwi: {{PLURAL:$1|1|$1}} xabar.",
+ "translate-page-showing-none": "Körsetiletin eş xabar joq.",
+ "translate-next": "Kelesi bet",
+ "translate-prev": "Aldıñğı bet",
+ "translate-page-description-legend": "Bul top twralı mälimet",
+ "translate-optional": "(mindetti emes)",
+ "translate-ignored": "(elemeýtin)",
+ "translate-edit-definition": "Xabardıñ anıqtalımı",
+ "translate-edit-contribute": "üles ber",
+ "translate-edit-no-information": "''Bul xabar qujattamasız. Eger osı xabardıñ qaýda nemese qalaý qoldanğanın bilseñiz, bul xabarğa qujattama keltirip, basqa awdarwşılarğa kömektese alasız.''",
+ "translate-edit-information": "Bul xabar twralı mälimet ($1)",
+ "translate-edit-warnings": "Tolıq awdarılmağan xabarlar twralı añğartpalar",
+ "translate-checks-parameters": "Kelesi baptalımdar paýdalanılmağan: <strong>$1</strong>",
+ "translate-checks-balance": "Mında jaqşalardıñ barlıq sanı jup emes:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "Kelesi siltemeler jaramsız:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Anıqtalımda <nowiki>{{PLURAL:}}</nowiki> paýdalanılğan, biraq awdarmada bul joq."
+}
diff --git a/Translate/i18n/core/kl.json b/Translate/i18n/core/kl.json
new file mode 100644
index 00000000..361ec7a5
--- /dev/null
+++ b/Translate/i18n/core/kl.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Qaqqalik"
+ ]
+ },
+ "translate-page-language": "Oqaatsit",
+ "translate-page-navigation-legend": "Sumiissusersiuut",
+ "translate-sidebar-alltrans": "Oqaatsit allatoortut",
+ "translate-language": "Oqaatsit"
+}
diff --git a/Translate/i18n/core/km.json b/Translate/i18n/core/km.json
new file mode 100644
index 00000000..d3313653
--- /dev/null
+++ b/Translate/i18n/core/km.json
@@ -0,0 +1,268 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aefgh39622",
+ "Chhorran",
+ "Lovekhmer",
+ "Sovichet",
+ "Thearith",
+ "គីមស៊្រុន",
+ "វ័ណថារិទ្ធ"
+ ]
+ },
+ "translate": "បកប្រែ",
+ "translate-desc": "[[Special:Translate|ទំព័រ​ពិសេស]] សម្រាប់ប្រែសម្រួល​មេឌាវិគី​ និង របស់​ផ្សេងទៀត",
+ "translate-taskui-export-to-file": "នាំចេញជាទម្រង់ដើម",
+ "translate-taskui-export-as-po": "នាំចេញសម្រាប់ធ្វើការបកប្រែក្រៅបណ្ដាញ",
+ "translate-taction-translate": "បកប្រែ",
+ "translate-taction-proofread": "ផ្ទៀងផ្ទាត់ឡើងវិញ",
+ "translate-taction-lstats": "ស្ថិតិ​ភាសា",
+ "translate-taction-mstats": "ស្ថិតិក្រុមសារ",
+ "translate-taction-export": "នាំចេញ​",
+ "translate-taction-disabled": "សកម្មភាពនេះត្រូវបិទមិនអោយប្រើនៅលើវិគីនេះ។",
+ "translate-page-no-such-language": "ភាសាដែលអ្នកផ្ដល់មកមិនត្រឹមត្រូវទេ។",
+ "translate-page-no-such-group": "ក្រុមដែលអ្នកផ្ដល់មកមិនត្រឹមត្រូវទេ។",
+ "translate-page-disabled": "ការបកប្រែសម្រាប់ភាសានេះក្នុងក្រុមនេះមិនត្រូវបានអនុញ្ញាតទេ។ មូលហេតុ:\n\n<em>$1</em>",
+ "translate-language-disabled": "ការ​បក​ប្រែ​ទៅ​ភាសា​នេះ​ត្រូវ​បាន​បិទ។",
+ "translate-page-settings-legend": "ការកំណត់​ផ្សេងៗ",
+ "translate-page-group": "ក្រុម",
+ "translate-page-language": "ភាសា",
+ "translate-page-limit": "កម្រិត",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|សារ|សារ}} ក្នុងមួយទំព័រ",
+ "translate-submit": "នាំមក​បង្ហាញ",
+ "translate-page-navigation-legend": "ការណែនាំ",
+ "translate-page-showing": "កំពុងបង្ហាញ​សារ​តាមលំដាប់ ពី $1 ដល់ $2 នៃ $3 ។",
+ "translate-page-showing-all": "កំពុងបង្ហាញ $1 {{PLURAL:$1|សារ|សារ}}។",
+ "translate-page-showing-none": "មិនមានសារ​ត្រូវបង្ហាញទេ។",
+ "translate-next": "ទំព័របន្ទាប់",
+ "translate-prev": "ទំព័រមុន",
+ "translate-page-description-legend": "ព័ត៌មាន​អំពី​ក្រុម",
+ "translate-page-description-hasoptional": "ក្រុមសារនេះមានផ្ទុកសារដែលមិនសូវចាំបាច់អោយបកប្រែ។\nសារដែលមិនសូវចាំបាច់អោយបកប្រែគួរតែបកប្រែតែពេលណាត្រូវការអោយសរសេរជាពិសេសក្នុងភាសារបស់អ្នក ដូចជាការមិនប្រើចន្លោះដកឃ្លា ឬការសរសេរអោយត្រូវតាមតួអក្សរបានត្រឹមត្រូវ។ $1",
+ "translate-page-description-hasoptional-open": "បង្ហាញសារមិនសូវចាំបាច់អោយបកប្រែ",
+ "translate-page-edit": "កែប្រែ",
+ "translate-optional": "(ជម្រើស)",
+ "translate-ignored": "(បានបោះបង់)",
+ "translate-edit-title": "កែប្រែ \"$1\"",
+ "translate-edit-definition": "និយមន័យ​របស់​សារ",
+ "translate-edit-contribute": "រួមចំណែក",
+ "translate-edit-no-information": "<em>សារ​នេះ​មិន​មាន​ព័ត៌មាន​បន្ថែម​ទេ​។\nប្រសិនបើ​អ្នក​ដឹង​ពី​ទីកន្លែង និង​របៀប​ប្រើប្រាស់​សារ​នេះ អ្នក​អាច​ជួយ​អ្នក​បកប្រែ​ផ្សេងទៀត​តាមរយៈ​ការ​ដាក់​បន្ថែម​ព័ត៌មាន​ទាំងនោះ​មក​ឱ្យ​សារ​នេះ​។</em>",
+ "translate-edit-information": "ព័ត៌មាន​អំពី​សារ ($1)",
+ "translate-edit-warnings": "ការព្រមាន​អំពី​បទប្រែសម្រួលមិនពេញលេញ",
+ "translate-edit-tmmatch-source": "ការ​បក​ប្រែ​ប្រភព​អត្ថបទ៖ $1",
+ "translate-edit-tmmatch": "ត្រូវគ្នា $1%",
+ "translate-edit-nopermission": "អ្នក​ត្រូវ​ការ​សិទ្ធិ​បក​ប្រែ ដើម្បី​បក​ប្រែ​សារ។",
+ "translate-edit-askpermission": "សុំ​ការ​អនុញ្ញាត",
+ "exporttranslations": "នាំចេញការបកប្រែ",
+ "translate-export-form-format": "ទម្រង់",
+ "translate-export-invalid-format": "សូមផ្ដល់ទម្រង់ត្រឹមត្រូវមួយ។",
+ "translate-checks-parameters": "{{PLURAL:$2|ប៉ារ៉ាម៉ែត្រ|ប៉ារ៉ាម៉ែត្រ}}ខាងក្រោមនេះមិនត្រូវបានគេប្រើទេ៖\n\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|parameter is|ប៉ារ៉ាម៉ែត្រ}}ខាងក្រោមនេះមិនត្រូវបានស្គាល់ទេ៖\n<strong>$1</strong>",
+ "translate-checks-balance": "មាន{{PLURAL:$2|វង់ក្រចក|វង់ក្រចក}}​ដែលមិន​មាន​គូ៖\n\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|តំណភ្ជាប់|តំណភ្ជាប់}}ខាងក្រោមនេះ​មានបញ្ហា៖ <strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "Following {{PLURAL:$2|តំណភ្ជាប់|តំណភ្ជាប់ចំនួន $2}} ខាងក្រោមនេះបាត់៖\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "និយមន័យ​ប្រើប្រាស់ <nowiki>{{PLURAL:}}</nowiki> ប៉ុន្តែ​បទប្រែសម្រួល​មិនមាន ។",
+ "translate-checks-pagename": "លំហឈ្មោះ​ត្រូវ​បាន​ផ្លាស់ប្ដូរ​ពី​និយមន័យ",
+ "translate-checks-format": "ការបកប្រែនេះមិនគោរពតាមនិយមន័យឬមានវេយ្យាករណ៍មិនត្រឹមត្រូវ៖ $1",
+ "translate-checks-fudforum-syntax": "ប្រើ <nowiki>$1</nowiki> ជំនួសអោយ <nowiki>$2</nowiki> នៅក្នុងគំរោងនេះ។",
+ "translate-pref-editassistlang": "ភាសាជំនួយ៖",
+ "prefs-translate": "ជម្រើសទាក់ទិននឹងការបកប្រែ",
+ "translate-pref-editassistlang-help": "បញ្ជីកូដភាសាខណ្ឌចែកដោយសញ្ញាក្បៀស។\nការបកប្រែសារមួយនៅក្នុងភាសាទាំងនេះ ត្រូវបានបង្ហាញពេលដែលអ្នកកំពុងបកប្រែ។\nបញ្ចីភាសាតាមលំនាំដើម អាស្រ័យលើភាសារបស់អ្នក។",
+ "translate-pref-editassistlang-bad": "កូដភាសាមិនត្រឹមត្រូវនៅក្នុងបញ្ជីនេះ៖\n<nowiki>$1</nowiki>។",
+ "right-translate": "កែប្រែដោយប្រើអន្តរមុខបកប្រែ",
+ "right-translate-manage": "ចាត់ចែងក្រុមសារ",
+ "action-translate-manage": "ចាត់ចែងក្រុមសារ",
+ "right-translate-import": "នាំចូលការបកប្រែក្រៅបណ្ដាញ",
+ "action-translate-import": "នាំចូលការបកប្រែក្រៅបណ្ដាញ",
+ "right-translate-messagereview": "ផ្ទៀងផ្ទាត់ការបកប្រែ",
+ "action-translate-messagereview": "ផ្ទៀងផ្ទាត់ការបកប្រែ",
+ "translate-rcfilters-translations": "ការបកប្រែ",
+ "translate-rcfilters-translations-only-label": "ការបកប្រែ",
+ "translate-rc-translation-filter": "ការបកប្រែតម្រង៖",
+ "translate-rc-translation-filter-no": "កុំធ្វើអ្វីទាំងអស់",
+ "translate-rc-translation-filter-only": "បង្ហាញតែការបកប្រែប៉ុណ្ណោះ",
+ "translate-rc-translation-filter-filter": "តំរងយកតែអ្វីដែលមិនមែនជាការបកប្រែ",
+ "translate-rc-translation-filter-site": "ប្ដូរ​សារ​តំបន់បណ្ដាញ​តែប៉ុណ្ណោះ",
+ "translationstats": "ស្ថិតិបកប្រែ",
+ "translate-stats-edits": "ចំនួនកំណែប្រែក្នុងមួយថ្ងៃ",
+ "translate-stats-users": "អ្នកបកប្រែ",
+ "translate-stats-registrations": "ការចុះឈ្មោះ",
+ "translate-stats-reviews": "ពិនិត្យ​ឡើងវិញ",
+ "translate-stats-reviewers": "អ្នកពិនិត្យឡើងវិញ",
+ "translate-statsf-intro": "អ្នកអាចបង្កើតស្ថិតិសាមញ្ញដោយប្រើទំរង់បែបបទនេះ។ គ្រប់តំលៃលេខមានតំលៃកំហិតលើនិងក្រោម។",
+ "translate-statsf-options": "ជម្រើស​ក្រាហ្វិក",
+ "translate-statsf-width": "ទទឹងគិតជាភីកសែល:",
+ "translate-statsf-height": "កម្ពស់គិតជាភីកសែល",
+ "translate-statsf-days": "រយៈពេលគិតជាថ្ងៃ",
+ "translate-statsf-start": "កាលបរិច្ឆេទចាប់ផ្ដើម៖",
+ "translate-statsf-scale": "បំនែក៖",
+ "translate-statsf-scale-months": "ខែ",
+ "translate-statsf-scale-weeks": "សប្តាហ៍",
+ "translate-statsf-scale-days": "ថ្ងៃ",
+ "translate-statsf-scale-hours": "ម៉ោង",
+ "translate-statsf-count": "វាស់",
+ "translate-statsf-count-edits": "ចំនួនកំណែប្រែ",
+ "translate-statsf-count-users": "អ្នកបកប្រែសកម្ម",
+ "translate-statsf-count-registrations": "អ្នកប្រើប្រាស់ថ្មី",
+ "translate-statsf-count-reviews": "ការត្រួតពិនិត្យការបកប្រែ",
+ "translate-statsf-count-reviewers": "អ្នកត្រួតពិនិត្យឡើងវិញ",
+ "translate-statsf-language": "ចុល្លភាគ (,)-បាន​ខណ្ឌ​ចែក​បញ្ជី​កូដ​ភាសា",
+ "translate-statsf-group": "ចុល្លភាគ (,)-បាន​ខណ្ឌ​ចែក​បញ្ជី​កូដ​ក្រុម",
+ "translate-statsf-submit": "ការមើលមុន",
+ "translate-tag-page-desc": "ការបកប្រែរបស់ទំព័រវិគី [[$2|$1]] ពី $3 ($4)។",
+ "translate-sidebar-alltrans": "ជាភាសាដទៃទៀត",
+ "translations": "បំណកប្រែទាំងអស់",
+ "translations-summary": "បញ្ចូល​ឈ្មោះ​សារ​ខាងក្រោម ដើម្បី​បង្ហាញ​គ្រប់​សារ​ទាំងអស់​ដែល​អាច​ប្រែសម្រួល​បាន​។",
+ "translate-translations-no-message": "\"$1\" គឺជា​សារ​ដែល​មិនអាច​ប្រែសម្រួល​បាន",
+ "translate-translations-none": "មិនមាន​ការបកប្រែ​សម្រាប់ \"$1\"",
+ "translate-translations-count": "រកឃើញ {{PLURAL:$1|ការបកប្រែមួយ|ការបកប្រែចំនួន $1}}។",
+ "translate-translations-fieldset-title": "សារ",
+ "translate-translations-messagename": "ឈ្មោះ​៖",
+ "translate-translations-project": "គំរោង៖",
+ "translate-translations-including-no-param": "សូម​បញ្ជាក់​នូវ​កូនសោ​សារ​ត្រឹមត្រូវ នៅក្នុង​ប៉ារ៉ាម៉ែត្រ​ទំព័ររង",
+ "translate-translations-history-short": "ប",
+ "languagestats": "ស្ថិតិ​ភាសា",
+ "languagestats-summary": "ទំព័រ​នេះ​បង្ហាញ​ស្ថិតិ​នៃ​ការប្រែសម្រួល​​គ្រប់ក្រុម​សារ​ទាំងអស់​សម្រាប់​ភាសា​មួយ​។",
+ "messagegroupstats-summary": "ទំព័រនេះបង្ហាញស្ថិតិក្រុមសារ។",
+ "languagestats-stats-for": "ស្ថិតិបកប្រែសំរាប់ $1 ($2)។",
+ "languagestats-recenttranslations": "ការបកប្រែនាពេលថ្មីៗ",
+ "translate-langstats-incomplete": "ស្ថិតិខ្លះនៅលើទំព័រនេះមិនពេញលេញទេ។ សូមផ្ទុកជាថ្មីដើម្បីទទួលបានស្ថិតិបន្ថែមទៀត។",
+ "translate-langstats-expand": "ពន្លាត",
+ "translate-langstats-collapse": "បង្រួញ",
+ "translate-langstats-expandall": "ពន្លាតទាំងអស់",
+ "translate-langstats-collapseall": "បង្រួញទាំងអស់",
+ "translate-language-code": "កូដភាសា",
+ "translate-language-code-field-name": "កូដភាសា​៖",
+ "translate-suppress-complete": "លាក់ក្រុមសារដែលបានបកប្រែទាំងស្រុងហើយ",
+ "translate-ls-noempty": "លាក់ក្រុមសារដែលមិនទាន់មានការបកប្រែសោះ",
+ "translate-language": "ភាសា",
+ "translate-total": "ចំនួនសារ",
+ "translate-untranslated": "មិនទាន់បកប្រែ",
+ "translate-percentage-complete": "បកប្រែរួច",
+ "translate-percentage-fuzzy": "ហួសសម័យ",
+ "translate-languagestats-overall": "សារទាំងអស់រួមគ្នា",
+ "translate-ls-submit": "បង្ហាញស្ថិតិ",
+ "translate-ls-column-group": "ក្រុមសារ",
+ "translate-mgs-pagename": "ស្ថិតិក្រុមសារ",
+ "translate-mgs-fieldset": "ចំណង់ចំណូលចិត្តសំរាប់ការបង្ហាញ​",
+ "translate-mgs-group": "ក្រុមសារ៖",
+ "translate-mgs-nocomplete": "កុំបង្ហាញភាសាដែលបានបញ្ចប់ការបកប្រែ",
+ "translate-mgs-noempty": "កុំបង្ហាញភាសាដែលគ្មានការបកប្រែ",
+ "translate-mgs-submit": "បង្ហាញស្ថិតិ",
+ "translate-mgs-column-language": "ភាសា",
+ "translate-mgs-totals": "$1 {{PLURAL:$1|ភាសា|ភាសា}}សរុបទាំងអស់",
+ "supportedlanguages": "ភាសាដែលអាចប្រើបាន",
+ "supportedlanguages-summary": "ទំព័រនេះបង្ហាញបញ្ជីភាសាទាំងអស់ដែលគាំទ្រដោយ {{SITENAME}} រួមជាមួួយឈ្មោះអ្នកបកប្រែដែលកំពុងធ្វើការលើភាសានោះ។ ឈ្មោះអ្នកបកប្រែឃើញកាន់តែធំ មានន័យថាអ្នកប្រើប្រាស់នោះបានរួមចំណែកកែប្រែកាន់តែច្រើន។ ពណ៌បន្ទាត់គូសពីក្រោមបង្ហាញពីភាពសកម្មរបស់អ្នកបកប្រែនាពេលថ្មីៗនេះ។",
+ "supportedlanguages-colorlegend": "អត្ថន័យពណ៌៖ ការបកប្រែចុងក្រោយ $1 ថ្ងៃមុន។",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|អ្នកបកប្រែ}}|អ្នកបកប្រែ}}៖ $1",
+ "supportedlanguages-recenttranslations": "ការបកប្រែនាពេលថ្មីៗ",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|ភាសា|ភាសា}}ទាំងអស់",
+ "translate-jssti-add": "បន្ថែមទៅក្នុង​បញ្ជី​",
+ "managemessagegroups": "ការគ្រប់គ្រងក្រុមសារ",
+ "translate-manage-import-diff": "សារ $1 | សកម្មភាព៖ $2",
+ "translate-manage-import-new": "សារថ្មី $1",
+ "translate-manage-import-deleted": "សារលុបចោល $1",
+ "translate-manage-action-import": "នាំចូល",
+ "translate-manage-submit": "ប្រតិបត្តិ​",
+ "translate-manage-import-done": "នាំ​ចូល​រួច​ហើយ!",
+ "importtranslations": "នាំចូល​ការបកប្រែ​",
+ "translate-import-load": "ផ្ទុក​ឯកសារ​",
+ "translate-import-err-ul-failed": "ការផ្ទុក​ឡើង​នៃឯកសារ​ មិនបានជោគជ័យ​",
+ "translate-js-support-unsaved-warning": "អ្នកមានការបកប្រែដែលមិនទាន់បានរក្សាទុក។",
+ "translate-gs-pos": "ទីតាំង",
+ "translate-gs-code": "កូដ",
+ "translate-gs-continent": "ទ្វីប",
+ "translate-gs-speakers": "អ្នកនិយាយ",
+ "translate-gs-score": "ពិន្ទុ",
+ "translate-gs-multiple": "ច្រើនទ្វីប",
+ "translate-gs-count": "ចំនួន",
+ "translate-gs-total": "សរុប",
+ "translate-gs-avgscore": "ពិន្ទុមធ្យម",
+ "translate-documentation-language": "សេចក្ដីពន្យល់អំពីសារ",
+ "translate-searchprofile": "ការបកប្រែ",
+ "translate-searchprofile-tooltip": "ស្វែងរកពីក្នុងការបកប្រែទាំងអស់",
+ "translate-search-languagefilter": "ចម្រោះតាមភាសា៖",
+ "translate-search-nofilter": "បង្ហាញទាំងអស់",
+ "translate-msggroupselector-projects": "ក្រុមសារ",
+ "translate-msggroupselector-search-placeholder": "ស្វែងរកក្រុម",
+ "translate-msggroupselector-search-all": "ទាំង​អស់",
+ "translate-msggroupselector-search-recent": "ថ្មីៗ",
+ "tux-languageselector": "បកប្រែជា",
+ "tux-tab-all": "ទាំងអស់",
+ "tux-tab-untranslated": "មិនទាន់បកប្រែ",
+ "tux-tab-outdated": "ហួសសម័យ",
+ "tux-tab-translated": "បកប្រែរួច",
+ "tux-tab-unproofread": "មិនទាន់ផ្ទៀងផ្ទាត់",
+ "tux-edit": "កែប្រែ",
+ "tux-status-optional": "បកប្រែក៏បានមិនបកប្រែក៏បាន",
+ "tux-status-fuzzy": "ហួសសម័យ",
+ "tux-status-proofread": "ផ្ទៀងផ្ទាត់រួច",
+ "tux-status-translated": "បកប្រែរួច",
+ "tux-status-saving": "កំពុងរក្សាទុក",
+ "tux-status-unsaved": "មិនទាន់រក្សាទុក",
+ "tux-editor-editsummary-placeholder": "ចំណារពន្យល់ (ដាក់ក៏បានមិនដាក់ក៏បាន)",
+ "tux-editor-paste-original-button-label": "បិតចម្លងឃ្លាដើម",
+ "tux-editor-discard-changes-button-label": "បោះបង់បន្លាស់ប្ដូរ",
+ "tux-editor-save-button-label": "រក្សាទុកការបកប្រែ",
+ "tux-editor-skip-button-label": "រំលងទៅកាន់សារបន្ទាប់",
+ "tux-editor-cancel-button-label": "បោះបង់",
+ "tux-editor-confirm-button-label": "បញ្ជាក់ការបកប្រែ",
+ "tux-editor-shortcut-info": "ចុច \"$1\" ដើម្បីរក្សាទុកឬក៏ \"$2\" ដើម្បីរំលងទៅសារបន្ទាប់ឬក៏ \"$3\" សម្រាប់ច្នុចកាត់ផ្សេងទៀត។",
+ "tux-editor-edit-desc": "កែប្រែសេចក្ដីពន្យល់",
+ "tux-editor-add-desc": "បន្ថែមសេចក្ដីពន្យល់",
+ "tux-editor-suggestions-title": "សំណើ",
+ "tux-editor-in-other-languages": "ជាភាសាដទៃទៀត",
+ "tux-editor-need-more-help": "ត្រូវការជំនួយបន្ថែមទៀតទេ?",
+ "tux-editor-ask-help": "សួររកព័ត៌មានបន្ថែម",
+ "tux-editor-tm-match": "ត្រូវគ្នា $1%",
+ "tux-notices-more": "{{PLURAL:$1|$1 បន្ថែម}}",
+ "tux-notices-hide": "លាក់",
+ "tux-editor-save-failed": "រក្សាទុកការបកប្រែមិនបានសម្រេច៖ $1",
+ "tux-editor-n-uses": "ត្រូវបានប្រើប្រាស់ $1 {{PLURAL:$1|ដង|ដង}}",
+ "tux-editor-message-desc-more": "មើលច្រើន",
+ "tux-editor-message-desc-less": "មើលតិច",
+ "tux-editor-clear-translated": "លាក់សារដែលបកប្រែរួច",
+ "tux-editor-proofreading-mode": "ផ្ទៀងផ្ទាត់",
+ "tux-editor-translate-mode": "បញ្ជី",
+ "tux-editor-proofreading-hide-own-translations": "លាក់ការបកប្រែរបស់អ្នក",
+ "tux-editor-proofreading-show-own-translations": "បង្ហាញការបកប្រែរបស់អ្នក",
+ "tux-proofread-action-tooltip": "កត់ចំណាំថាបានផ្ទៀងផ្ទាត់រួច",
+ "tux-proofread-edit-label": "កែប្រែ",
+ "tux-editor-page-mode": "ទំព័រ",
+ "tux-editor-outdated-notice": "ការបកប្រែប្រហែលជាត្រូវការអោយបន្ទាន់សម័យ។",
+ "tux-editor-outdated-notice-diff-link": "បង្ហាញភាពខុសគ្នា",
+ "tux-editor-doc-editor-placeholder": "សេចក្ដីពន្យល់អំពីសារ",
+ "tux-editor-doc-editor-save": "រក្សាទុកសេចក្ដីពន្យល់",
+ "tux-editor-doc-editor-cancel": "បោះបង់",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|សារ|សារ}}បន្ថែម",
+ "tux-messagetable-loading-messages": "កំពុងផ្ទុក {{PLURAL:$1|សារ|សារ}}...",
+ "tux-message-filter-placeholder": "ចម្រោះបញ្ជី",
+ "tux-message-filter-result": "រកឃើញ $1 {{PLURAL:$1|លទ្ធផល|លទ្ធផល}} សម្រាប់ \"$2\"",
+ "tux-message-filter-advanced-button": "ស្វែងរកថ្នាក់ខ្ពស់",
+ "tux-message-filter-optional-messages-label": "សារបកប្រែក៏បានមិនបកប្រែក៏បាន",
+ "tux-proofread-translated-by-self": "បកប្រែដោយរូបអ្នក",
+ "tux-empty-list-all": "ក្រុមសារនេះទទេ",
+ "tux-empty-list-all-guide": "បង្ហាញក្រុមសារមួយផ្សេងទៀតសម្រាប់បកប្រែ",
+ "tux-empty-list-translated": "គ្មានសារបកប្រែរួច",
+ "tux-empty-list-translated-guide": "អ្នកអាចជួយបកប្រែ",
+ "tux-empty-list-translated-action": "បកប្រែ",
+ "tux-empty-no-messages-to-display": "គ្មានសារសម្រាប់បង្ហាញទេ។",
+ "tux-empty-no-outdated-messages": "គ្មានសារហួសសម័យទេ",
+ "tux-empty-nothing-to-proofread": "គ្មានសារដែលត្រូវផ្ទៀងផ្ទាត់ទេ",
+ "tux-empty-you-can-help-providing": "អ្នកអាចជួយផ្ដល់ការបកប្រែថ្មីៗ",
+ "tux-empty-nothing-new-to-proofread": "គ្មានសារថ្មីៗសម្រាប់ផ្ទៀងផ្ទាត់ទេ",
+ "tux-empty-you-can-review-already-proofread": "អ្នកអាចផ្ទៀងផ្ទាត់ការបកប្រែដែលអ្នកដទៃផ្ទៀងផ្ទាត់រូចហើយបាន។",
+ "tux-empty-list-other": "គ្មានសារសម្រាប់បកប្រែ",
+ "tux-empty-list-other-guide": "អ្នកអាចជួយផ្ទៀងផ្ទាត់ការបកប្រែដែលមានហើយ",
+ "tux-empty-list-other-action": "ផ្ទៀងផ្ទាត់ការបកប្រែ",
+ "tux-empty-list-other-link": "បង្ហាញសារទាំងអស់",
+ "tux-editor-close-tooltip": "បិទ",
+ "tux-editor-expand-tooltip": "ពន្លាត",
+ "tux-editor-collapse-tooltip": "បង្រួម",
+ "tux-editor-message-tools-history": "ប្រវត្តិ",
+ "tux-editor-message-tools-delete": "លុបចោល",
+ "tux-editor-message-tools-translations": "ការបកប្រែទាំងអស់",
+ "tux-editor-loading": "កំពុងផ្ទុក…",
+ "translate-search-more-languages-info": "{{PLURAL:$1|ភាសា|ភាសា}}$1បន្ថែមទៀត",
+ "translate-statsbar-tooltip": "បកប្រែរួច $1% ផ្ទៀតផ្ទាត់រួច $2%",
+ "translate-statsbar-tooltip-with-fuzzy": "បកប្រែរួច $1% ផ្ទៀតផ្ទាត់រួច $2% ហួសសម័យ $3%"
+}
diff --git a/Translate/i18n/core/kn.json b/Translate/i18n/core/kn.json
new file mode 100644
index 00000000..9dbd63ca
--- /dev/null
+++ b/Translate/i18n/core/kn.json
@@ -0,0 +1,100 @@
+{
+ "@metadata": {
+ "authors": [
+ "AVSmalnad77",
+ "Dimension10",
+ "Dipin",
+ "Munirathnam",
+ "Nayvik",
+ "Omshivaprakash",
+ "VASANTH S.N.",
+ "Yogesh",
+ "ಮಲ್ನಾಡಾಚ್ ಕೊಂಕ್ಣೊ"
+ ]
+ },
+ "translate": "ಭಾಷಾಂತರಿಸಿ",
+ "translate-desc": "[[Special:Translate|ವಿಷೇಶ ಪುಟ]]ಮೀಡಿಯಾವಿಕಿ ಮತ್ತು ಹೆಚ್ಚಿನದನ್ನು ಭಾಷಾಂತರಿಸಲು",
+ "translate-taction-translate": "ಭಾಷಾಂತರಿಸಿ",
+ "translate-taction-lstats": "ಭಾಷಾ ಅಂಕಿಅಂಶಗಳು",
+ "translate-page-no-such-language": "ಉಲ್ಲೇಖಿಸಿದ ಭಾಷೆ ಅಸ್ತಿತ್ವದಲ್ಲಿ ಇಲ್ಲ",
+ "translate-page-no-such-group": "ಉಲ್ಲೇಖಿಸಿದ ಗುಂಪು ಅಸಿಂಧುವಾಗಿತ್ತು",
+ "translate-page-disabled": "ಈ ಗುಂಪಿಗೆ ಈ ಭಾಷೆಯ ಭಾಷಾಂತರಗಳನ್ನು ಅಸಮರ್ಥಗೊಳಿಸಿದೆ. ಕಾರಣ <em>$1</em>",
+ "translate-page-settings-legend": "ವ್ಯವಸ್ಥೆಗಳು",
+ "translate-page-group": "ಗುಂಪು",
+ "translate-page-language": "ಭಾಷೆ",
+ "translate-page-limit": "ಮಿತಿ",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|ಸಂದೇಶ|ಸಂದೇಶಗಳು}} ಪ್ರತಿ ಪುಟಕ್ಕೆ",
+ "translate-submit": "ಕರೆತರು",
+ "translate-page-navigation-legend": "ಪಥ ನಿರ್ದೇಶನ",
+ "translate-page-showing": "ಒಟ್ಟು $3 ರಲ್ಲಿ $1 ರಿಂದ $2 ರ ವರೇಗಿನ ಸಂದೇಶಗಳನ್ನು ತೋರಿಸುತ್ತಿದೆ",
+ "translate-page-showing-all": "$1 {{PLURAL:$1|ಸಂದೇಶ|ಸಂದೇಶಗಳನ್ನು}} ತೋರಿಸುತ್ತಿದೆ.",
+ "translate-page-showing-none": "ತೋರಿಸಲು ಸಂದೇಶಗಳಿಲ್ಲ",
+ "translate-next": "ಮುಂದಿನ ಪುಟ",
+ "translate-prev": "ಹಿಂದಿನ ಪುಟ",
+ "translate-page-description-legend": "ಗುಂಪಿನ ಬಗ್ಗೆ ಮಾಹಿತಿ",
+ "translate-page-description-hasoptional": "ಈ ಸಂದೇಶಗಳ ಗುಂಪು ಐಚ್ಛಿಕ ಸಂದೇಶಗಳನ್ನು ಒಳಗೊಂಡಿದೆ. ಐಚ್ಛಿಕ ಸಂದೇಶಗಳು ನಿರ್ಧಿಷ್ಟ ಅಗತ್ಯಗಳಿದ್ದಾಗ ಮಾತ್ರ ಭಾಷಾಂತರಿಸಲ್ಪಡ ಬೇಕು. $1",
+ "translate-page-description-hasoptional-open": "ಐಚ್ಛಿಕ ಸಂದೇಶಗಳನ್ನು ತೋರಿಸಿ",
+ "translate-page-edit": "ಸಂಪಾದಿಸಿ",
+ "translate-optional": "(ಐಚ್ಛಿಕ)",
+ "translate-ignored": "ಕಡೆಗಣಿಸಲ್ಪಟ್ಟ",
+ "translate-edit-title": "\"$1\"ನ್ನು ಸಂಪಾದಿಸು",
+ "translate-edit-definition": "ಸಂದೇಶ ವ್ಯಾಖ್ಯೆ",
+ "translate-edit-contribute": "ನೆರವಾಗು",
+ "translate-edit-no-information": "\"ಈ ಸಂದೇಶಕ್ಕೆ ಯಾವುದೇ ದಾಖಲೆಗಳಿಲ್ಲ.\"\n\"ನಿಮಗೆ ಈ ಸಂದೇಶ ಎಲ್ಲಿಯಾದರೂ ಅಥವಾ ಹೇಗಾದರೂ ಉಪಯೋಗದಲ್ಲಿರುವುದು ತಿಳಿದಿದ್ದರೆ,ನೀವು ಇದಕ್ಕೆ ತಕ್ಕ ದಾಖಲೆಗಳನ್ನು ಸೇರಿಸಿ ಬೇರಿ ಭಾಷಾಂತರಕಾರರಿಗೆ ಸಹಾಯ ಮಾಡಬಹುದು.\"",
+ "translate-edit-information": "ಸಂದೇಶದ ಬಗ್ಗೆ ಮಾಹಿತಿ ($1)",
+ "translate-edit-warnings": "ಅಸಂಪೂರ್ಣ ಭಾಷಾಂತರದ ಬಗ್ಗೆ ಎಚ್ಚರಿಕೆ",
+ "translate-edit-tmmatch": "$1% ಹೊ೦ದಿಸಿ",
+ "translate-edit-nopermission": "ಭಾಷಾಂತರಿಸಲು ನಿಮಗೆ ಅನುಮತಿ ಬೇಕು",
+ "translate-edit-askpermission": "ಅನುಮತಿಗಾಗಿ ಕೋರಿಕೆ",
+ "translate-checks-parameters-unknown": "ಕೆಳಗಿನ {{PLURAL:$2|ಮಾನದಂಡವು|ಮಾನದಂಡಗಳು}} ಅಪರಿಚಿತ\n<strong>$1</strong>",
+ "translate-checks-links-missing": "ಈ ಕೆಳಗಿನ {{PLURAL:$2|ಕೊಂಡಿಯು|$2 ಕೊಂಡಿಗಳು}}ಕಾಣೆಯಾಗಿವೆ:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "ವ್ಯಾಖ್ಯೆಗೆ ಉಪಯೋಗ <nowiki>{{PLURAL:}}</nowiki> ಆದರೆ ಭಾಷಾಂತರಕ್ಕೆ ಅಲ್ಲ.",
+ "translate-checks-format": "ಈ ಭಾಷಾಂತರವು ವ್ಯಾಖ್ಯೆಗ ಸರಿಹೊಂದುತ್ತಿಲ್ಲ ಅಥವಾ ತಪ್ಪು ಪದವಿನ್ಯಾಸವನ್ನು ಹೊಂದಿದೆ: $1",
+ "translate-checks-escape": "ಈ ಕೆಳಗಿನ ಗಮನಕ್ಕೆ ಬಾರದಿರುವ ವಿಷಯ ಆಕಸ್ಮಿಕವಿರಬಹುದು: <strong>$1</strong>",
+ "translate-checks-fudforum-syntax": " <nowiki>$2</nowiki> ರ ಬದಲು <nowiki>$1</nowiki> ನ್ನು ಈ ಯೋಜನೆಯಲ್ಲಿ ಬಳಸಿ in this project.",
+ "translate-pref-editassistlang": "ಸಹಾಯಕ ಭಾಷೆ:",
+ "prefs-translate": "ಭಾಷಾಂತರ ಆಯ್ಕೆಗಳು",
+ "translate-pref-editassistlang-bad": "ಈ ಪಟ್ಟಿಯಲ್ಲಿರುವ ಭಾಷಾ ಸಂಕೇತ ಅಸಿಂಧು: $1",
+ "right-translate-manage": "ಸಂದೇಶ ಗುಂಪುಗಳನ್ನು ನಿಭಾಯಿಸಿ",
+ "right-translate-import": "ಸ್ಥಿರ ಸಂಪರ್ಕದಿಂದ ಭಾಷಾಂತರವನ್ನು ಆಮದು ಮಾಡಿ",
+ "translate-rc-translation-filter-no": "ಏನೂ ಮಾಡಬೇಡಿ",
+ "translate-rc-translation-filter-only": "ಭಾಷಾಂತರವನ್ನು ಮಾತ್ರಾ ತೋರಿಸಿ",
+ "translate-rc-translation-filter-filter": "ಭಾಷಾಂತರಗಳನ್ನುಶೋಧಿಸಿ",
+ "translationstats": "ಭಾಷಾಂತರ ಅಂಕೆಸಂಖ್ಯೆ",
+ "translate-stats-edits": "ಸಂಪಾದನೆಗಳು",
+ "translate-stats-users": "ಅನುವಾದಕರು",
+ "translate-statsf-width": "ಪಿಕ್ಸಲ್‌ಗಳಲ್ಲಿ ಅಗಲ:",
+ "translate-statsf-height": "ಪಿಕ್ಸಲ್‌ಗಳಲ್ಲಿ ಎತ್ತರ:",
+ "translate-statsf-start": "ಪ್ರಾರಂಭ ದಿನಾಂಕ",
+ "translate-statsf-scale-months": "ತಿಂಗಳುಗಳು",
+ "translate-statsf-scale-weeks": "ವಾರಗಳು",
+ "translate-statsf-scale-days": "ದಿನಗಳು",
+ "translate-statsf-scale-hours": "ಗಂಟೆಗಳು",
+ "translate-statsf-count": "ಅಳತೆ:",
+ "translate-statsf-count-edits": "ಸಂಪಾದನೆಗಳ ಸಂಖ್ಯೆ",
+ "translate-statsf-count-users": "ಸಕ್ರಿಯ ಭಾಷಾಂತರಕಾರರು",
+ "translate-statsf-submit": "ಮುನ್ನೋಟ",
+ "translate-tag-page-desc": "ವಿಕಿ [[$2|$1]]ಪುಟಗಳ ಅನುವಾದ.",
+ "translate-sidebar-alltrans": "ಇತರ ಭಾಷೆಗಳಲ್ಲಿ",
+ "translations": "ಎಲ್ಲಾ ಅನುವಾದಗಳು",
+ "translations-summary": "ದೊರೆಯಬಹುದಾದ ಎಲ್ಲಾ ಅನುವಾದಗಳು ಕಾಣಿಸುವಂತಗೆ ಒಂದು ಸಂದೇಶದ ಹೆಸರನ್ನು ನಮೂದಿಸಿ",
+ "translate-translations-no-message": "\"$1\"ವು ಅನುವಾದ ಮಾಡಬಹುದಾದ ಸಂದೇಶವಲ್ಲಿ",
+ "translate-translations-fieldset-title": "ಸಂದೇಶ",
+ "translate-translations-messagename": "ಹೆಸರು:",
+ "translate-translations-project": "ಯೋಜನೆ:",
+ "languagestats": "ಭಾಷಾ ಅಂಕಿಅಂಶಗಳು",
+ "translate-langstats-expand": "ಹಲವು",
+ "translate-langstats-collapse": "ಕುಸಿತ",
+ "translate-language-code": "ಭಾಷಾ ಸಂಕೇತ",
+ "translate-language-code-field-name": "ಭಾಷಾ ಸಂಕೇತ:",
+ "translate-language": "ಭಾಷೆ",
+ "translate-total": "ಸಂದೇಶಗಳು",
+ "translate-mgs-column-language": "ಭಾಷೆ",
+ "supportedlanguages": "ಸಕ್ರಿಯ ಭಾಷೆಗಳು",
+ "translate-manage-import-new": "ಹೊಸ ಸಂದೇಶ $1",
+ "translate-manage-import-done": "ಆಮದು ಮುಗಿಯಿತು!",
+ "importtranslations": "ಭಾಷಾಂತರಗಳನ್ನು ಆಮದು ಮಾಡಿ",
+ "translate-gs-total": "ಒಟ್ಟು",
+ "translate-documentation-language": "ಸಂದೇಶ ದಾಖಲೀಕರಣ",
+ "translate-dynagroup-recent-label": "ಇತ್ತೀಚಿನ ಅನುವಾದಗಳು"
+}
diff --git a/Translate/i18n/core/ko.json b/Translate/i18n/core/ko.json
new file mode 100644
index 00000000..c8909abc
--- /dev/null
+++ b/Translate/i18n/core/ko.json
@@ -0,0 +1,423 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bluehill",
+ "Bluemersen",
+ "Ellif",
+ "Ficell",
+ "Freebiekr",
+ "HDNua",
+ "Hwangjy9",
+ "Hym411",
+ "Infinity",
+ "Klutzy",
+ "Kwj2772",
+ "MemphisA5",
+ "Priviet",
+ "Revi",
+ "ToePeu",
+ "Twotwo2019",
+ "Ykhwong",
+ "관인생략",
+ "아라"
+ ]
+ },
+ "translate": "번역하기",
+ "translate-desc": "미디어위키와 다른 것들을 번역하기 위한 [[Special:Translate|특수 문서]]",
+ "translate-fuzzybot-desc": "이 계정은 미디어위키 [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate 번역 확장 기능]이 번역 문서를 관리하기 위해 사용되는 시스템 계정입니다.\n이 계정은 미디어위키 소프트웨어의 일부이며 특정 사용자에 의해 통제되지 않습니다.",
+ "translate-taskui-export-to-file": "네이티브 형식으로 내보내기",
+ "translate-taskui-export-as-po": "오프라인 번역용으로 내보내기",
+ "translate-taskui-export-as-csv": "CSV 포맷으로 내보내기",
+ "translate-export-csv-message-title": "번역 메시지 제목",
+ "translate-export-csv-definition": "메시지 정의",
+ "translate-taction-translate": "번역하기",
+ "translate-taction-proofread": "검토하기",
+ "translate-taction-lstats": "언어 통계",
+ "translate-taction-mstats": "메시지 그룹 통계",
+ "translate-taction-export": "내보내기",
+ "translate-taction-disabled": "이 동작은 이 위키에서 비활성화되어 있습니다.",
+ "translate-page-no-such-language": "지정한 언어가 잘못되었습니다.",
+ "translate-page-no-such-group": "지정한 그룹이 잘못되었습니다.",
+ "translate-page-disabled": "이 그룹에서 이 언어로의 번역이 비활성화되어 있습니다.\n이유:\n\n<em>$1</em>",
+ "translate-language-disabled": "이 언어로의 번역이 비활성화되어 있습니다.",
+ "translate-page-settings-legend": "설정",
+ "translate-page-group": "그룹",
+ "translate-page-language": "언어",
+ "translate-page-limit": "제한",
+ "translate-page-limit-option": "페이지당 {{PLURAL:$1|메시지}} $1개",
+ "translate-submit": "얻기",
+ "translate-page-navigation-legend": "둘러보기",
+ "translate-page-showing": "메시지 $3개 중 $1 - $2을(를) 보고 있습니다.",
+ "translate-page-showing-all": "{{PLURAL:$1|메시지}} $1개를 보고 있습니다.",
+ "translate-page-showing-none": "보여줄 메시지가 없습니다.",
+ "translate-next": "다음 페이지",
+ "translate-prev": "이전 페이지",
+ "translate-page-description-legend": "이 그룹에 대한 정보",
+ "translate-page-description-hasoptional": "이 메시지 그룹은 선택적 메시지를 포함합니다.\n언어에 공백을 사용하거나 적절한 이름을 번역할 수 없는 등의 특별한 요구 사항이\n있을 때에만 선택적 메시지를 번역해야 합니다. $1",
+ "translate-page-description-hasoptional-open": "선택적 메시지 보기",
+ "translate-page-edit": "편집",
+ "translate-optional": "(선택 사항)",
+ "translate-ignored": "(무시됨)",
+ "translate-edit-title": "\"$1\" 편집하기",
+ "translate-edit-definition": "메시지 정의",
+ "translate-edit-contribute": "기여",
+ "translate-edit-no-information": "이 메시지에 대한 설명문이 없습니다.\n만약 이 메시지가 어디에 어떻게 사용되는지 알고 있다면 설명문을 작성해 다른 번역자를 도와줄 수 있습니다.",
+ "translate-edit-information": "이 메시지에 대한 정보 ($1)",
+ "translate-edit-warnings": "불완전한 번역에 대한 경고",
+ "translate-edit-tmmatch-source": "번역 원본 텍스트: $1",
+ "translate-edit-tmmatch": "$1% 일치",
+ "translate-edit-nopermission": "메시지를 번역할 수 있는 번역 권한이 필요합니다.",
+ "translate-edit-askpermission": "권한 얻기",
+ "exporttranslations": "번역 내보내기",
+ "translate-export-form-format": "형식",
+ "translate-export-invalid-format": "유효한 형식을 지정해 주십시오.",
+ "translate-export-not-supported": "번역 내보내기는 지원하지 않습니다.",
+ "translate-export-format-notsupported": "지정된 내보내기 형식은 메시지 그룹에 의해 지원되지 않습니다.",
+ "translate-checks-parameters": "다음 {{PLURAL:$2|변수가}} 사용되지 않았습니다:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "다음 {{PLURAL:$2|변수를}} 알 수 없습니다:\n<strong>$1</strong>",
+ "translate-checks-balance": "열고 닫는 {{PLURAL:$2|괄호}}의 수가 일치하지 않습니다:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "다음 {{PLURAL:$2|링크|링크 $2개}}에 문제가 있습니다:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "다음 {{PLURAL:$2|링크|링크 $2개}}가 없습니다:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "메시지 원문에는 <nowiki>{{PLURAL:}}</nowiki>을 사용하지만 번역문에서는 그렇지 않습니다.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki>은 {{PLURAL:$1|양식 하나|양식 $1개}}에 주었지만 {{PLURAL:$2|양식 하나만|양식 $2개를}} 지원합니다. (0= 과 1= 양식 제외)",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki>은 끝에서 양식이 중복했습니다. <nowiki>{{PLURAL:$1|양|양}}</nowiki>은 <nowiki>{{PLURAL:$1|양}}</nowiki>으로 적어야 합니다.",
+ "translate-checks-gettext-plural-missing": "이 번역에는 <nowiki>{{PLURAL:GETTEXT|}}</nowiki>가 필수입니다.",
+ "translate-checks-gettext-plural-unsupported": "이 메시지는 <nowiki>{{PLURAL:GETTEXT|}}</nowiki>를 지원하지 않습니다.",
+ "translate-checks-smartformat-plural-missing": "이 번역은 $1 변수에 대해 복수형이어야 합니다.",
+ "translate-checks-smartformat-plural-unsupported": "이 메시지는 $1 변수에 대해 복수형을 지원하지 않습니다.",
+ "translate-checks-unicode-plural-invalid": "복수형은 $1로 정의하는 것이 좋습니다. 이 번역은 $2를 포함합니다.",
+ "translate-checks-pagename": "이름공간이 정의로부터 바뀌었습니다",
+ "translate-checks-format": "이 번역은 정의를 따르지 않거나 잘못된 구문입니다: $1",
+ "translate-checks-escape": "다음의 탈출은 실수였을 수 있습니다: <strong>$1</strong>",
+ "translate-checks-parametersnotequal": "변수 개수는 {{PLURAL:$1|$1}}개이며 {{PLURAL:$2|$2}}개여야 합니다.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki>은(는) 잘못된 형식입니다.",
+ "translate-checks-fudforum-syntax": "이 프로젝트에는 <nowiki>$2</nowiki> 대신에 <nowiki>$1</nowiki>을(를) 사용하세요.",
+ "translate-checks-replacement": "$1 대신 $2 을(를) 사용하십시오.",
+ "translate-pref-editassistlang": "보조 언어:",
+ "prefs-translate": "번역 옵션",
+ "translate-pref-editassistlang-help": "쉼표로 언어 코드 목록을 구분하세요.\n번역할 때는 해당 언어로 메시지 번역이 보입니다.\n언어의 기본 목록은 내 언어에 따라 달라집니다.",
+ "translate-pref-editassistlang-bad": "목록에서 잘못된 언어 코드가 있습니다:\n<nowiki>$1</nowiki>.",
+ "right-translate": "번역 인터페이스를 사용하여 편집",
+ "action-translate": "번역 인터페이스를 사용하여 편집할",
+ "right-translate-manage": "메시지 그룹 관리",
+ "action-translate-manage": "메시지 그룹을 관리할",
+ "right-translate-import": "오프라인 번역 가져오기",
+ "action-translate-import": "오프라인 번역을 가져올",
+ "right-translate-messagereview": "번역 검토하기",
+ "action-translate-messagereview": "번역을 검토할",
+ "right-translate-groupreview": "메시지 그룹의 작업 상태를 바꾸기",
+ "action-translate-groupreview": "메시지 그룹의 작업 상태를 바꿀",
+ "translate-rcfilters-translations": "번역",
+ "translate-rcfilters-translations-only-label": "번역",
+ "translate-rcfilters-translations-only-desc": "번역된 문서의 변경사항입니다.",
+ "translate-rcfilters-translations-filter-label": "번역이 아님",
+ "translate-rcfilters-translations-filter-desc": "번역이 아닌 모든 변경사항입니다.",
+ "translate-rcfilters-translations-site-label": "사이트 메시지",
+ "translate-rcfilters-translations-site-desc": "미디어위키 이름공간의 사이트 메시지의 사용자 지정 부분입니다.",
+ "translate-rc-translation-filter": "번역 필터:",
+ "translate-rc-translation-filter-no": "모두 보기",
+ "translate-rc-translation-filter-only": "번역만 보기",
+ "translate-rc-translation-filter-filter": "번역 빼고 보기",
+ "translate-rc-translation-filter-site": "사이트 메시지 바뀜만 보기",
+ "translationstats": "번역 통계",
+ "translate-stats-edits": "편집",
+ "translate-stats-users": "번역자",
+ "translate-stats-registrations": "등록",
+ "translate-stats-reviews": "검토",
+ "translate-stats-reviewers": "평론가",
+ "translate-statsf-intro": "이 양식으로부터 간단한 통계를 만들 수 있습니다.\n모든 값은 최고 및 최저 제한이 있습니다.",
+ "translate-statsf-options": "그래프 설정",
+ "translate-statsf-width": "픽셀 단위 너비:",
+ "translate-statsf-height": "픽셀 단위 높이:",
+ "translate-statsf-days": "기간 일 수:",
+ "translate-statsf-start": "시작 날짜:",
+ "translate-statsf-scale": "단위:",
+ "translate-statsf-scale-years": "년",
+ "translate-statsf-scale-months": "월",
+ "translate-statsf-scale-weeks": "주",
+ "translate-statsf-scale-days": "일",
+ "translate-statsf-scale-hours": "시간",
+ "translate-statsf-count": "기준:",
+ "translate-statsf-count-edits": "편집 수",
+ "translate-statsf-count-users": "활동 중인 번역자",
+ "translate-statsf-count-registrations": "새 사용자",
+ "translate-statsf-count-reviews": "번역 평론가",
+ "translate-statsf-count-reviewers": "평론가",
+ "translate-statsf-language": "언어 코드의 쉼표로 구분한 목록:",
+ "translate-statsf-group": "그룹 코드의 쉼표로 구분한 목록:",
+ "translate-statsf-submit": "미리 보기",
+ "translate-statsf-unknown-error": "알 수 없는 오류가 발생했습니다.",
+ "translate-tag-page-desc": "$3 ($4)에서의 [[$2|$1]] 위키 문서의 번역입니다.",
+ "translate-sidebar-alltrans": "다른 언어",
+ "translations": "모든 번역",
+ "translations-summary": "모든 번역을 보려면 메시지 이름을 아래에 입력하세요.",
+ "translate-translations-no-message": "\"$1\"은 번역 가능한 메시지가 아닙니다.",
+ "translate-translations-none": "$1로 번역된 메시지가 없습니다.",
+ "translate-translations-count": "{{PLURAL:$1|번역 한 개|번역 $1개}}를 찾았습니다.",
+ "translate-translations-fieldset-title": "메시지",
+ "translate-translations-messagename": "이름:",
+ "translate-translations-project": "프로젝트:",
+ "translate-translations-including-no-param": "하위 문서 변수에 올바른 메시지 키를 입력해 주십시오.",
+ "translate-translations-history-short": "역",
+ "languagestats": "언어 통계",
+ "languagestats-summary": "이 문서는 특정 언어에 대한 모든 메시지 그룹에 대한 번역 통계를 보여줍니다.",
+ "messagegroupstats-summary": "이 페이지는 메시지 그룹 통계를 보여줍니다.",
+ "languagestats-stats-for": "$1 ($2)에 대한 번역 통계",
+ "languagestats-recenttranslations": "최근 번역",
+ "translate-langstats-incomplete": "통계의 일부가 불완전합니다. 더 많은 통계를 보려면 다시 페이지를 불러오십시오.",
+ "translate-langstats-expand": "펼치기",
+ "translate-langstats-collapse": "접기",
+ "translate-langstats-expandall": "모두 펼치기",
+ "translate-langstats-collapseall": "모두 숨기기",
+ "translate-language-code": "언어 코드",
+ "translate-language-code-field-name": "언어 코드:",
+ "translate-suppress-complete": "완전히 번역된 메시지 그룹을 숨기기",
+ "translate-ls-noempty": "전혀 번역되지 않은 메시지 그룹을 숨기기",
+ "translate-language": "언어",
+ "translate-total": "메시지",
+ "translate-untranslated": "미번역",
+ "translate-percentage-complete": "완료",
+ "translate-percentage-fuzzy": "오래됨",
+ "translate-percentage-proofread": "검토됨",
+ "translate-languagestats-overall": "모든 메시지 그룹의 합계",
+ "translate-ls-submit": "통계 보기",
+ "translate-ls-column-group": "메시지 그룹",
+ "translate-mgs-pagename": "메시지 그룹에 대한 번역 통계",
+ "translate-mgs-fieldset": "표시 환경 설정",
+ "translate-mgs-group": "메시지 그룹:",
+ "translate-mgs-nocomplete": "번역이 완료된 언어는 표시하지 않기",
+ "translate-mgs-noempty": "번역이 전혀 되지 않은 언어를 표시하지 않기",
+ "translate-mgs-submit": "통계 보기",
+ "translate-mgs-column-language": "언어",
+ "translate-mgs-totals": "$1개의 모든 {{PLURAL:$1|언어}}",
+ "translate-mgs-invalid-group": "지정한 $1 그룹이 존재하지 않습니다.",
+ "translate-mgs-nothing": "요청된 통계에 대해 보여줄 것이 없습니다.",
+ "translate-tes-group-not-found": "일치하는 결과 없음",
+ "translate-tes-type-to-search": "검색을 시작하려면 입력하세요",
+ "supportedlanguages": "활성화된 언어",
+ "supportedlanguages-summary": "이 문서는 {{SITENAME}}에서 지원하는 활성화된 언어의 목록과 그 언어로 번역하는 번역자의 이름을 보여줍니다.\n번역자가 편집을 더 많이 할수록 이름이 크게 나타납니다.\n밑줄의 색깔은 번역자가 얼마나 최근에 활동했는지를 나타냅니다.",
+ "supportedlanguages-colorlegend": "색깔 범례: 마지막 번역을 한 날짜가 $1일 전.",
+ "supportedlanguages-sqlite-error": "SQLite는 지원되지 않습니다",
+ "supportedlanguages-postgres-error": "PostgreSQL는 지원되지 않습니다",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|번역자}}|번역자}}: $1",
+ "supportedlanguages-recenttranslations": "최근 번역",
+ "supportedlanguages-count": "총 {{PLURAL:$1|언어 수}}는 $1개입니다.",
+ "supportedlanguages-activity": "$1: {{PLURAL:$2|편집}} $2회 - 마지막 편집 $3{{PLURAL:$3|일}} 전",
+ "translate-activelanguages-invalid-code": "\"$1\" 언어 코드는 알 수 없거나 번역을 위해 활성화되어 있지 않습니다.",
+ "abusefilter-edit-builder-vars-translate-source-text": "번역 단위의 소스 본문",
+ "abusefilter-edit-builder-vars-translate-target-language": "번역 대상 언어",
+ "translate-jssti-add": "목록에 추가",
+ "managemessagegroups": "메시지 그룹 관리",
+ "translate-smg-notallowed": "이 작업을 실행하는 것을 허용하지 않습니다.",
+ "translate-smg-nochanges": "과정에 대한 바뀜이 없습니다.",
+ "translate-smg-submit": "과정에 대한 바뀜 전송",
+ "translate-smg-submitted": "메시지 정의가 업데이트되었습니다. 변경 사항은 백그라운드에서 처리됩니다.",
+ "translate-smg-more": "이 편집을 처리하기 위해 더 많은 변화가 있을 수 있습니다.",
+ "translate-smg-left": "위키에서 메시지 내용",
+ "translate-smg-right": "들어오는 바뀜",
+ "translate-smg-rename-select": "선택",
+ "translate-smg-rename-cancel": "취소",
+ "translate-smg-rename-search": "일치하는 메시지를 검색하는 중...",
+ "translate-smg-rename-select-err": "이름을 변경할 메시지를 선택해 주십시오",
+ "translate-smg-rename-no-msg": "메시지가 없습니다.",
+ "translate-smg-rename-new": "새 이름으로 추가...",
+ "translate-smg-rename-rename": "다른 이름으로 추가...",
+ "translate-smg-no-groups-in-sync": "현재 동기화 중인 그룹이 없습니다",
+ "translate-smg-strong-sync-help": "도움말",
+ "translate-smg-groups-in-sync": "현재 동기화 중인 그룹",
+ "translate-smg-groups-in-sync-list": "현재 백그라운드에서 처리 중인 그룹 목록:",
+ "translate-smg-groups-with-error-title": "동기화 도중 오류가 발생한 그룹",
+ "translate-smg-groups-with-error-desc": "동기화 도중 오류가 발생한 그룹 및 해당 메시지 목록:",
+ "translate-smg-group-with-error-summary": "오류가 있는 {{PLURAL:$1|메시지}} $1개",
+ "translate-smg-group-message-action-history": "역사",
+ "translate-smg-group-message-tag-outdated": "오래됨",
+ "translate-smg-group-message-tag-rename": "이름 바꾸기",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|태그}}:",
+ "translate-smg-group-message-message-content": "내용:",
+ "translate-smg-group-message-message-target": "대상:",
+ "translate-smg-group-message-message-replacement": "대체:",
+ "translate-smg-group-message-message-other-langs": "다른 언어:",
+ "translate-manage-import-diff": "메시지 $1 | 동작: $2",
+ "translate-manage-import-new": "새 메시지 $1",
+ "translate-manage-import-deleted": "메시지 $1을 삭제했습니다.",
+ "translate-manage-action-import": "가져오기",
+ "translate-manage-action-conflict": "퍼지 처리하여 가져오기",
+ "translate-manage-action-ignore": "무시",
+ "translate-manage-action-fuzzy": "번역을 가져와서 퍼지 처리",
+ "translate-manage-action-rename-fuzzy": "번역의 이름을 바꾸고 퍼지 처리",
+ "translate-manage-action-rename": "이름 바꾸기",
+ "translate-manage-action-ignore-change": "번역 변경사항 무시하기",
+ "translate-manage-nochanges": "이 그룹에 대한 메시지 정의 바뀜이 없습니다.",
+ "translate-manage-nochanges-other": "이 언어에 대한 바뀜이 없습니다.\n그룹 자세한 정보 보기로 돌아가려면 다음 링크를 사용하세요.",
+ "translate-manage-inconsistent": "요청에서 일치하지 않음을 발견했습니다.\n바뀜을 확인하고 다시 시도하세요.\n자세한 정보: $1.",
+ "translate-manage-toolong": "최대 처리 시간이 $1{{PLURAL:$1|초}} 초과했습니다.\n처리를 계속하려면 양식을 다시 전송하세요.",
+ "translate-manage-import-summary": "외부 원본에서 새 판을 가져옴",
+ "translate-manage-import-ignore": "메시지 $1을 건너뜁니다.",
+ "translate-manage-import-rename-summary": "외부 소스에서 이름 변경됨",
+ "translate-manage-conflict-summary": "외부 소스로부터 새 버전을 가져옵니다.\n확인해 주십시오.",
+ "translate-manage-submit": "실행",
+ "translate-manage-intro-other": "다음은 $1로 된 번역 바뀜 목록입니다.\n바뀜을 검토하고 각 업데이트에 대해 수행할 작업을 선택하세요.\n바뀜을 무시하기로 선택했다면 이 작업만 일시적입니다.",
+ "translate-manage-import-ok": "가져옴: $1",
+ "translate-manage-import-done": "가져오기 완료!",
+ "translate-manage-empty-content": "내용이 비었음",
+ "translate-manage-key-reused": "이 메시지는 위키에 이미 존재합니다. 오래된 키를 우연히 재사용한 것은 아닌지 확인하십시오.",
+ "translate-manage-source-message-not-found": "메시지 정의가 없습니다",
+ "importtranslations": "번역 가져오기",
+ "translate-import-from-local": "컴퓨터에 있는 파일 올리기:",
+ "translate-import-load": "파일 불러오기",
+ "translate-import-err-dl-failed": "파일을 읽을 수 없습니다:\n$1",
+ "translate-import-err-ul-failed": "파일 올리기에 실패했습니다.",
+ "translate-import-err-invalid-title": "<nowiki>$1</nowiki> 파일 이름이 올바르지 않습니다.",
+ "translate-import-err-no-such-file": "<nowiki>$1</nowiki> 파일이 없거나 이 위키에 올려지지 않았습니다.",
+ "translate-import-err-stale-group": "이 파일에 들어있는 메시지 그룹이 존재하지 않습니다.",
+ "translate-import-err-no-headers": "파일이 번역 확장 기능에 쓰이는 올바른 형식의 Gettext 파일이 아닙니다:\n파일 헤더에서 메시지 그룹과 언어를 판독할 수 없습니다.",
+ "translate-js-support-unsaved-warning": "번역을 게시하지 않았습니다.",
+ "translate-gs-pos": "순위",
+ "translate-gs-code": "코드",
+ "translate-gs-continent": "대륙",
+ "translate-gs-speakers": "말한이",
+ "translate-gs-score": "점수",
+ "translate-gs-multiple": "여러",
+ "translate-gs-count": "개수",
+ "translate-gs-total": "합계",
+ "translate-gs-avgscore": "평균 점수",
+ "translate-documentation-language": "메시지 설명문",
+ "translate-searchprofile": "번역문",
+ "translate-searchprofile-tooltip": "모든 번역에서 검색",
+ "translate-searchprofile-note": "더 많은 검색 옵션은 [$1 번역 검색]을 통해 이용할 수 있습니다.",
+ "translate-search-languagefilter": "언어에 대한 필터:",
+ "translate-search-nofilter": "필터링하지 않음",
+ "log-name-translationreview": "번역 검토 기록",
+ "log-description-translationreview": "번역과 메시지 그룹에 대한 모든 검토 기록입니다.",
+ "logentry-translationreview-message": "$1님이 $3 번역을 {{GENDER:$2|검토했습니다}}",
+ "logentry-translationreview-group": "$1님이 $3의 $4 번역의 상태를 $6에서 $7(으)로 {{GENDER:$2|바꾸었습니다}}",
+ "group-translate-sandboxed": "승인하지 않은 번역자",
+ "group-translate-sandboxed-member": "{{GENDER:$1|승인하지 않은 번역자}}",
+ "right-translate-sandboxmanage": "연습장 사용자 관리",
+ "action-translate-sandboxmanage": "연습장 사용자 관리",
+ "right-translate-sandboxaction": "연습장 사용자에게 허용된 작업을 실행",
+ "action-translate-sandboxaction": "연습장 사용자에게 허용된 작업을 실행",
+ "translate-workflow-state-": "(미설정)",
+ "translate-workflowstatus": "상태: $1",
+ "translate-workflow-set-doing": "설정 중...",
+ "translate-workflow-autocreated-summary": "$1 작업 상태에 대한 페이지가 자동으로 만듦",
+ "translate-stats-workflow": "상태",
+ "translate-workflowgroup-label": "작업 상태",
+ "translate-workflowgroup-desc": "이 메시지 그룹은 번역 작업 상태를 보여줍니다.\n상태는 $wgTranslateWorkflowStates 변수 설정에 지정됩니다.",
+ "translate-dynagroup-recent-label": "최근 번역",
+ "translate-dynagroup-recent-desc": "이 메시지 그룹은 이 언어로의 모든 최근 번역을 보여줍니다.\n검토 작업에 아주 유용합니다.",
+ "translate-dynagroup-additions-label": "최근 추가",
+ "translate-dynagroup-additions-desc": "이 메시지 그룹은 새 메시지와 바뀐 메시지를 보여줍니다.",
+ "translate-msggroupselector-projects": "메시지 그룹",
+ "translate-msggroupselector-search-placeholder": "그룹 검색",
+ "translate-msggroupselector-search-all": "모두",
+ "translate-msggroupselector-search-recent": "최근",
+ "translate-msggroupselector-view-subprojects": "{{PLURAL:$1|하위 그룹}} $1개 보기",
+ "tux-languageselector": "번역할 언어",
+ "tux-select-target-language": "번역 대상 언어",
+ "tux-tab-all": "모두",
+ "tux-tab-untranslated": "미번역",
+ "tux-tab-outdated": "오래됨",
+ "tux-tab-translated": "번역됨",
+ "tux-tab-unproofread": "검토하지 않음",
+ "tux-edit": "편집",
+ "tux-status-optional": "선택 사항",
+ "tux-status-fuzzy": "오래됨",
+ "tux-status-proofread": "검토됨",
+ "tux-status-translated": "번역됨",
+ "tux-status-saving": "게시 중...",
+ "tux-status-unsaved": "게시하지 않음",
+ "tux-save-unknown-error": "알 수 없는 오류가 발생했습니다.",
+ "tux-editor-placeholder-documentation": "메시지 설명문 추가",
+ "tux-editor-placeholder-language": "$1 번역",
+ "tux-editor-editsummary-placeholder": "변경사항 설명 (선택 사항)",
+ "tux-editor-paste-original-button-label": "원본 텍스트 붙여넣기",
+ "tux-editor-discard-changes-button-label": "바뀜 버리기",
+ "tux-editor-save-button-label": "번역 게시",
+ "tux-editor-skip-button-label": "다음으로 넘어가기",
+ "tux-editor-cancel-button-label": "취소",
+ "tux-editor-confirm-button-label": "번역 확인",
+ "tux-editor-proofread-button-label": "검토한 것으로 표시",
+ "tux-editor-shortcut-info": "확인 후 다음 메시지로 이동하려면 \"$1\"을, 건너뛰려면 \"$2\"를, 요약을 제공하려면 \"$4\"를 누르시고, 다른 단축키를 보려면 \"$3\"을 누르고 계십시오.",
+ "tux-editor-edit-desc": "설명문 편집",
+ "tux-editor-add-desc": "설명문 추가",
+ "tux-editor-suggestions-title": "제안",
+ "tux-editor-latest-updates-title": "최근 업데이트",
+ "tux-editor-changes-without-summary": "요약 없는 {{PLURAL:$1|업데이트}} $1개",
+ "tux-editor-all-changes": "모든 변경사항",
+ "tux-editor-in-other-languages": "다른 언어",
+ "tux-editor-need-more-help": "도움이 더 필요하십니까?",
+ "tux-editor-ask-help": "자세한 정보에 대한 질문",
+ "tux-editor-tm-match": "$1% 일치",
+ "tux-notices-more": "{{PLURAL:$1|$1개 더 보기}}",
+ "tux-notices-hide": "숨기기",
+ "tux-editor-save-failed": "번역을 게시하는 데 실패했습니다: $1",
+ "tux-editor-n-uses": "$1{{PLURAL:$1|번}} 쓰임",
+ "tux-editor-message-desc-more": "더 보기",
+ "tux-editor-message-desc-less": "덜 보기",
+ "tux-editor-clear-translated": "번역된 메시지 숨기기",
+ "tux-editor-proofreading-mode": "검토하기",
+ "tux-editor-translate-mode": "목록",
+ "tux-editor-proofreading-hide-own-translations": "내 번역 숨기기",
+ "tux-editor-proofreading-show-own-translations": "내 번역 보이기",
+ "tux-proofread-action-tooltip": "검토한 것으로 표시",
+ "tux-proofread-edit-label": "편집",
+ "tux-editor-page-mode": "문서",
+ "tux-editor-outdated-notice": "이 번역은 업데이트해야 합니다.",
+ "tux-editor-outdated-notice-diff-link": "차이 보기",
+ "tux-editor-doc-editor-placeholder": "메시지 설명문",
+ "tux-editor-doc-editor-save": "설명문 게시",
+ "tux-editor-doc-editor-cancel": "취소",
+ "tux-messagetable-more-messages": "다른 {{PLURAL:$1|메시지}} $1개",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|메시지}}를 불러오는 중...",
+ "tux-message-filter-placeholder": "필터 목록",
+ "tux-message-filter-result": "\"$2\"에 대한 {{PLURAL:$1|결과}} $1개를 찾았습니다",
+ "tux-message-filter-advanced-button": "고급 검색",
+ "tux-message-filter-optional-messages-label": "선택적 메시지",
+ "tux-proofread-translated-by-self": "내가 번역함",
+ "tux-empty-list-all": "이 메시지 그룹은 비어 있습니다",
+ "tux-empty-list-all-guide": "번역할 다른 메시지 그룹을 선택하세요",
+ "tux-translate-page-no-such-group": "<strong>지정한 그룹이 존재하지 않습니다.</strong> 다른 메시지 그룹을 선택하세요.",
+ "tux-empty-list-translated": "번역된 메시지가 없습니다",
+ "tux-empty-list-translated-guide": "번역을 도울 수 있습니다",
+ "tux-empty-list-translated-action": "번역",
+ "tux-empty-no-messages-to-display": "표시할 메시지가 없습니다.",
+ "tux-empty-there-are-optional": "선택적 메시지가 목록에 보이지 않습니다",
+ "tux-empty-show-optional-messages": "선택적 메시지 보기",
+ "tux-empty-no-outdated-messages": "오래된 메시지가 없습니다",
+ "tux-empty-nothing-to-proofread": "검토할 수 있는 것이 없습니다",
+ "tux-empty-you-can-help-providing": "새 번역을 제공할 수 있습니다",
+ "tux-empty-nothing-new-to-proofread": "새로 검토할 수 있는 것이 없습니다",
+ "tux-empty-you-can-review-already-proofread": "다른 사용자가 이미 검토한 번역을 검토할 수 있습니다.",
+ "tux-empty-list-other": "번역할 것이 없습니다",
+ "tux-empty-list-other-guide": "기존 번역의 검토를 도울 수 있습니다",
+ "tux-empty-list-other-action": "번역 검토하기",
+ "tux-empty-list-other-link": "모든 메시지 보기",
+ "tux-editor-close-tooltip": "닫기",
+ "tux-editor-expand-tooltip": "펼치기",
+ "tux-editor-collapse-tooltip": "접기",
+ "tux-editor-message-tools-show-editor": "위키 편집기에서 보기",
+ "tux-editor-message-tools-history": "역사",
+ "tux-editor-message-tools-delete": "삭제",
+ "tux-editor-message-tools-translations": "모든 번역",
+ "tux-editor-message-tools-linktothis": "이 메시지로 가는 링크",
+ "tux-editor-loading": "불러오는 중...",
+ "tux-editor-loading-failed": "번역 도우미를 불러오지 못했습니다: $1",
+ "translate-search-more-languages-info": "{{PLURAL:$1|언어}} $1개 더 보기",
+ "translate-statsbar-tooltip": "$1% 번역됨, $2% 검토됨",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% 번역됨, $2% 검토됨, $3% 오래됨",
+ "translate-search-more-groups-info": "{{PLURAL:$1|그룹}} $1개 더 보기",
+ "translate-syntax-error": "번역에 문법 오류가 있습니다",
+ "tux-session-expired": "로그인하고 있지 않습니다. 별도의 탭에서 로그인하세요. 대안으로, 저장하지 않은 번역을 복사하고, 로그인한 다음, 이 문서로 돌아와 다시 번역을 입력하세요.",
+ "tux-nojs": "이 도구는 자바스크립트 없이 동작하지 않습니다. 자바스크립트가 비활성화되어 있거나, 작동하지 않았거나, 이 브라우저는 지원하지 않습니다.",
+ "specialpages-group-translation": "번역",
+ "translate-messagebundle-validation-error": "유효하지 않은 메시지 번들: $1",
+ "translate-messagebundle-error-key-empty": "메시지 번들에 빈 키를 포함해서는 안 됩니다",
+ "translate-messagebundle-error-key-too-long": "\"$1\" 키가 너무 깁니다",
+ "translate-messagebundle-error-key-invalid-characters": "\"$1\" 키에 허용되지 않은 문자가 있습니다",
+ "translate-messagebundle-error-invalid-value": "\"$1\" 키에 문자열 값을 포함해서는 안 됩니다",
+ "translate-messagebundle-error-empty-value": "\"$1\" 키에 값이 없습니다",
+ "translate-messagebundle-error-metadata-type": "메타데이터는 배열이어야 합니다.",
+ "translate-messagebundle-group-description": "문서 [[$2|$1]]에 정의된 메시지 번들의 메시지입니다.",
+ "log-action-filter-translationreview": "조치 유형:"
+}
diff --git a/Translate/i18n/core/kr.json b/Translate/i18n/core/kr.json
new file mode 100644
index 00000000..420ff718
--- /dev/null
+++ b/Translate/i18n/core/kr.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mohammedbama123"
+ ]
+ },
+ "translate-documentation-language": "Katuno gunate"
+}
diff --git a/Translate/i18n/core/krc.json b/Translate/i18n/core/krc.json
new file mode 100644
index 00000000..5f7c99d7
--- /dev/null
+++ b/Translate/i18n/core/krc.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ernác",
+ "Iltever"
+ ]
+ },
+ "translate-total": "Джазылгъанла",
+ "translate-mgs-column-language": "Тил",
+ "translate-documentation-language": "Билдириуню документациясы"
+}
diff --git a/Translate/i18n/core/kri.json b/Translate/i18n/core/kri.json
new file mode 100644
index 00000000..e3a39e53
--- /dev/null
+++ b/Translate/i18n/core/kri.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jose77",
+ "Protostar"
+ ]
+ },
+ "translate-page-edit": "èdit"
+}
diff --git a/Translate/i18n/core/krl.json b/Translate/i18n/core/krl.json
new file mode 100644
index 00000000..a2db066b
--- /dev/null
+++ b/Translate/i18n/core/krl.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Flrn",
+ "Mashoi7",
+ "Varvana"
+ ]
+ },
+ "translate": "Kiännä",
+ "translate-taction-translate": "Kiännä",
+ "translate-page-navigation-legend": "Valličy",
+ "translate-documentation-language": "Viestin dokumentacija",
+ "tux-languageselector": "Kieli",
+ "tux-empty-list-translated-action": "Kiännä"
+}
diff --git a/Translate/i18n/core/ks-arab.json b/Translate/i18n/core/ks-arab.json
new file mode 100644
index 00000000..219d235e
--- /dev/null
+++ b/Translate/i18n/core/ks-arab.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "Iflaq",
+ "Rishabhbhat",
+ "Teashae"
+ ]
+ },
+ "translate": "تَرجَمہٕ",
+ "translate-extensionname": "تَرجَمہٕ",
+ "translate-taction-translate": "تَرجَمہٕ",
+ "translate-page-settings-legend": "طَرٕز",
+ "translate-page-group": "جَماعت",
+ "translate-page-language": "زَبان",
+ "translate-page-limit": "حَد",
+ "translate-prev": "پٔتِم صَفہٕ",
+ "translate-statsf-scale-hours": "گَنٛٹہٕ",
+ "translate-sidebar-alltrans": "باقؠن زَبانَن مَنٛز",
+ "translate-documentation-language": "پٲغامٕک دستاویز"
+}
diff --git a/Translate/i18n/core/ks-deva.json b/Translate/i18n/core/ks-deva.json
new file mode 100644
index 00000000..2374611e
--- /dev/null
+++ b/Translate/i18n/core/ks-deva.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Rishabhbhat"
+ ]
+ },
+ "translate-statsf-scale-hours": "गंटॖ",
+ "translate-sidebar-alltrans": "बाक़्यन ज़बानन मंज़"
+}
diff --git a/Translate/i18n/core/ksh.json b/Translate/i18n/core/ksh.json
new file mode 100644
index 00000000..7eeaa69d
--- /dev/null
+++ b/Translate/i18n/core/ksh.json
@@ -0,0 +1,323 @@
+{
+ "@metadata": {
+ "authors": [
+ "Purodha",
+ "Reedy"
+ ]
+ },
+ "translate": "Övversäze",
+ "translate-desc": "[[Special:Translate|{{int:specialpage}}]] för et Översäze fum MediaWiki sing Mäldonge un Nohreeschte, un mih.",
+ "translate-taskui-export-to-file": "Em eije Fomaat äxpoteere",
+ "translate-taskui-export-as-po": "För et Övversäze ußerhallf äxpotteere",
+ "translate-taction-translate": "Övversäze",
+ "translate-taction-proofread": "Jähjelässe",
+ "translate-taction-lstats": "Schtateßteke för en Schprohch",
+ "translate-taction-mstats": "Schtateßteke för en Nohreeschtejropp",
+ "translate-taction-export": "Äxpottehre",
+ "translate-taction-disabled": "Di Axjuhn es op heh dämm Wiki affjeschalldt.",
+ "translate-page-no-such-language": "De aanjejovve Schprohch känne mer nit.",
+ "translate-page-no-such-group": "De aanjejovve Nohreeschtejropp känne mer nit.",
+ "translate-page-disabled": "Övversezonge sen affjeschalldt för di {{int:translate-page-group}} un {{int:translate-page-language}}, weil:\n\n<em>$1</em>",
+ "translate-language-disabled": "Övversäzonge en heh di Schprohch sin afjeschalldt.",
+ "translate-page-settings-legend": "Enschtällonge för et Äxpottehre",
+ "translate-page-group": "Nohreeschtejropp:&nbsp;",
+ "translate-page-language": "De Schprohch:&nbsp;",
+ "translate-page-limit": "Ömfang:",
+ "translate-page-limit-option": "{{PLURAL:$1|Äjne Täx udder Nohreesch|$1 Täxte udder Nohreeschte|Nix aan Täxte udder Nohreeschte}} pro Sigk",
+ "translate-submit": "Lohß Jonn!",
+ "translate-page-navigation-legend": "Aanzahl",
+ "translate-page-showing": "De Nohreshte fon Nommer $1 aff, beß $2, fon ennßjesammp $3.",
+ "translate-page-showing-all": "{{PLURAL:$1|Eijn_Nohresch|$1 Nohreschte|Keijn_esu_e_Nohreschte}}.",
+ "translate-page-showing-none": "Nix för Aan_ze_zeije.",
+ "translate-page-paging-links": "[ $1 ] ↔ [ $2 ]",
+ "translate-next": "Näx Sigk",
+ "translate-prev": "Förrije Sigk",
+ "translate-page-description-legend": "Enfommazjohne övver di {{int:translate-page-group}}",
+ "translate-page-description-hasoptional": "En heh dä Jropp sinn_er 'nit esu nüüdeje' Täxte un Nohreeschte.\nDi sullte bloß övversaz wähde, wann Ding Schprohch jät besönders bruch, esu jät wi käin Zwescheräum udder anders jeschrevve Nahme. $1",
+ "translate-page-description-hasoptional-open": "Donn de 'nit esu nüüdeje' Täxte udder Nohreeschte aanzeije.",
+ "translate-page-edit": "Änndere",
+ "translate-optional": "(nit esu nüüdesch)",
+ "translate-ignored": "(övverjange)",
+ "translate-edit-title": "„$1“ ändere",
+ "translate-edit-definition": "De Ojinaal Nohreesch",
+ "translate-edit-contribute": "beijdraare",
+ "translate-edit-no-information": "<em>Mer han kein Dokementazjohn för dat Täxshtöck.</em>\n<em>Wann De weijß, wann un woh et jebruch weed, da kanns De dä anndere Övversäzer hellefe, un jet för_et ennjävve.</em>",
+ "translate-edit-information": "Ennfommazjohne övver dä Täx udder di Nohreesch ($1)",
+ "translate-edit-warnings": "Warnonge wääje unkomplätte Övversäzonge&#32;",
+ "translate-edit-tmmatch-source": "Et Ojinaal för ze Övversäzze: $1",
+ "translate-edit-tmmatch": "$1% zopaß",
+ "translate-edit-nopermission": "Do bruchs dat Rääsch, Täxte un Nohreeschte övversäze ze dörve.",
+ "translate-edit-askpermission": "Donn öm dat Rääsch froore",
+ "translate-checks-parameters": "{{PLURAL:$2|Dä Parrammeeter heh eß|Di Parrammeetere heh sen|dat Jedrißße heh iß}} nit jebruch woode: <strong>$1</strong>",
+ "translate-checks-parameters-unknown": "Hee {{PLURAL:$2|dä Parrammeeter|di Parrammeetere|dat Jedrißße}} kënne mer nit:\n<strong>$1</strong>",
+ "translate-checks-balance": "Do {{PLURAL:$2|jëijd_en Klammer nit op odder|jonn ongerscheedlish fill Klammere op un|eß Dreß}} zoh: <strong>$1</strong>",
+ "translate-checks-links": "Hee {{PLURAL:$2|dä Lengk eß|di Lengks senn|dat Jedrißße}} problemattesch: <strong>$1</strong>",
+ "translate-checks-links-missing": "Hee {{PLURAL:$2|dä Lengk fäält:|di $2 Lenks fäähle:|fäähle kei Lengks.}} <strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "De Ojjinaal-Nohreesch bruch <code><nowiki>{{PLURAL:}}</nowiki></code>, ävver de Övversäzong deijt dat nit?",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> es med {{PLURAL:$1|eine Form|$1 Forme|keine Form}} enjesaz, ävver {{PLURAL:$2|bloß ein Form weed|bloß $2 Forme wääde|kein Form weed heh}} ongerschtöz, ävver zohsäzlesch noch 0= un 1=",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> hät {{PLURAL:$1|en dubbelte Form|dubbelte Forme|kein dubbelte Forme}} aam Ängk, ävver <nowiki>{{PLURAL:$1|Metmaacher|Metmaacher|Metmaacher}}</nowiki> sullt als <nowiki>{{PLURAL:$1|Metmaacher}}</nowiki> jeschrevve wääde.",
+ "translate-checks-pagename": "Dat Appachtemang es anders wi em ojinaal Tex",
+ "translate-checks-format": "De Övversäzong paß nit zor Definizjuhn udder dä ier Süntax es nit en Ohdenong: $1",
+ "translate-checks-escape": "He de <i lang=\"en\">escapes</i> künnte esu nit jewollt sin: <strong>$1</strong>",
+ "translate-checks-parametersnotequal": "De Aanzahl Parrammeeter es {{PLURAL:$1|$1}}, sulld ävver {{PLURAL:$2|$2}} sin.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> es esu nit jöltesch.",
+ "translate-checks-fudforum-syntax": "Nemm <nowiki>$1</nowiki> aanshtatt vun <nowiki>$2</nowiki> en heh dämm Projäk.",
+ "translate-pref-editassistlang": "Schprohche för ze Hällfe:",
+ "prefs-translate": "Enshtällunge för et Övversäze",
+ "translate-pref-editassistlang-help": "En Leß met Köözelle för Schprohche.\nDe Övversäzonge en di Schprohche wääde Der jezeich, wann De aam Övversäze bes.\nWat De jezeisch kreß, wann De nix enndrähß, deiht vun dä Schprohch afhange, en di De övversaz.",
+ "translate-pref-editassistlang-bad": "En dä Leß es en onjöltesch Kööözel för en Schprohch: <code><nowiki>$1</nowiki></code>.",
+ "right-translate": "Met dä Schnettshtäll zom Övverseze ärrbeide",
+ "right-translate-manage": "Jroppe vun Täxte un Nohreeschte för et Övversäze verwallde",
+ "action-translate-manage": "Jroppe vun Täxte un Nohreeschte för et Övversäze verwallde",
+ "right-translate-import": "Övversäzunge fun Dateie empotteere",
+ "action-translate-import": "Övversäzunge fun Dateie empotteere",
+ "right-translate-messagereview": "Övversäzonge jähjelässe un aannämme",
+ "right-translate-groupreview": "Bei Jroppe vun Täxte un Nohreeschte för et Övversäze der Beärbeidongszohschtand verwallde",
+ "translate-rc-translation-filter": "Övversäzonge ußsöhke:",
+ "translate-rc-translation-filter-no": "Alles aanzeije",
+ "translate-rc-translation-filter-only": "Don blohß de Övversäzonge zeije",
+ "translate-rc-translation-filter-filter": "Don de Övversäzonge fott lohße",
+ "translate-rc-translation-filter-site": "Nor de Änderonge för heh dat Wikki",
+ "translationstats": "Schtateßteke fun de Övversäzonge",
+ "translate-stats-edits": "Änderonge",
+ "translate-stats-users": "Övversäzer",
+ "translate-stats-registrations": "Aanmäldonge",
+ "translate-stats-reviews": "Jähjejelässe Övversäzzonge",
+ "translate-stats-reviewers": "Jääjelässer",
+ "translate-statsf-intro": "Heh_met kanns de eifach Övverseeschte un Schtatistike maache. All de Zahle sen noh bovve un noh onge bejränz.",
+ "translate-statsf-options": "Ennschtällonge för et Zeischne",
+ "translate-statsf-width": "De Breed in Pixelle:",
+ "translate-statsf-height": "De Hühde in Pixelle:",
+ "translate-statsf-days": "Et Aanfangs-Dattum:",
+ "translate-statsf-start": "Et Aanfangs-Dattum:",
+ "translate-statsf-scale": "De Jenouschkeit udder Oplösung:",
+ "translate-statsf-scale-months": "Moohnde",
+ "translate-statsf-scale-weeks": "Woche",
+ "translate-statsf-scale-days": "Dare",
+ "translate-statsf-scale-hours": "Schtonde",
+ "translate-statsf-count": "Der Mohßschtaab:",
+ "translate-statsf-count-edits": "Aanzahl Änderonge",
+ "translate-statsf-count-users": "Aktiive Övversäzer",
+ "translate-statsf-count-registrations": "Neu Metmaacher",
+ "translate-statsf-count-reviews": "Jähjejelässe Övversäzzonge",
+ "translate-statsf-count-reviewers": "Jääjelässer",
+ "translate-statsf-language": "En Leß fun Köözelle för Schprohche, met Kommas dozwesche:",
+ "translate-statsf-group": "En Leß fun Köözelle för Jroppe, met Kommas dozwesche:",
+ "translate-statsf-submit": "Vöraanseech",
+ "translate-tag-page-desc": "De Övversäzong fun dä Sigg „[[$2|$1]]“ em Wikki, us dä Schprohch $3 (<code>$4</code>)",
+ "translate-sidebar-alltrans": "En ander Schprohche",
+ "translations": "Alle Övversätzonge",
+ "translations-summary": "Jif ene Name för en Nohreesch enn, öm all de Övversätzunge aanzezeije.",
+ "translate-translations-no-message": "Mer han kein Nohreesch „$1“ för ze övversetze",
+ "translate-translations-none": "Mer han kei Övversätzunge för „$1“",
+ "translate-translations-count": "{{PLURAL:$1|Ein Övversäzong|$1 Övversäzonge|Kein Övversäzong}} jefonge.",
+ "translate-translations-fieldset-title": "Nohreesch",
+ "translate-translations-messagename": "Nahme:",
+ "translate-translations-project": "Projäk:",
+ "translate-translations-including-no-param": "Jif ene jöltijje Siggetettel för di Nohreesch als Parrammehter för di Ongersigg aan",
+ "translate-translations-history-short": "V",
+ "languagestats": "Schtateßteke för di Schprohch",
+ "languagestats-summary": "Di Sigg heh zeisch Schtateßteke vun de Övversätzonge för alle Nohreeschtejroppe un för ein Schprohch aan.",
+ "messagegroupstats-summary": "Heh di Sigg zeisch Schtateßteke övver ein Nohreeschtejrop, un för alle Schprohche aan.",
+ "languagestats-stats-for": "Övversäzongsschtateßteke för $1&nbsp; ($2)",
+ "languagestats-recenttranslations": "Neuste Övversäzonge",
+ "translate-langstats-incomplete": "Ene Deil vun dä Schtatistike op heh dä Sigg sin nit kumplät. Mem di Sigg neu Laade kritt mer mih Daate aanjezeisch.",
+ "translate-langstats-expand": "opfallde",
+ "translate-langstats-collapse": "zohklappe",
+ "translate-langstats-expandall": "alle opfallde",
+ "translate-langstats-collapseall": "alle zohklappe",
+ "translate-language-code": "Donn de Enschtällonge för et Aanzeije ußwähle",
+ "translate-language-code-field-name": "Et Schprohcheköözel:&nbsp;",
+ "translate-suppress-complete": "Kumplät övversaz Nohreechtejroppe fott lohße",
+ "translate-ls-noempty": "Kumplät onövversaz Nohreechtejroppe fott lohße",
+ "translate-language": "Schprohch",
+ "translate-total": "Nohreschte",
+ "translate-untranslated": "Nit övversaz",
+ "translate-percentage-complete": "Fähdesch",
+ "translate-percentage-fuzzy": "Övverhollt",
+ "translate-languagestats-overall": "Alle Jroppe vun Täxte un Nohreeschte zosamme",
+ "translate-ls-submit": "Lohß Jonn!",
+ "translate-ls-column-group": "Nohreeschtejrop",
+ "translate-mgs-pagename": "Schtateßteke för di Nohreeschtejropp",
+ "translate-mgs-fieldset": "Donn de Enschtällonge för et Aanzeije ußwähle",
+ "translate-mgs-group": "Nohrechtejropp:",
+ "translate-mgs-nocomplete": "Donn kein Schprohche aanzeije, woh de Övversäzong kumplädd es",
+ "translate-mgs-noempty": "Donn kein Schprohche aanzeije, woh nix vun övversads es",
+ "translate-mgs-submit": "Lohß Jonn!",
+ "translate-mgs-column-language": "De Schprohch",
+ "translate-mgs-totals": "Alle Schprohche zosamme",
+ "translate-mgs-invalid-group": "De aanjejovve Jropp „$1“ jidd_et nit.",
+ "translate-mgs-nothing": "För heh di Schtatistik ham_mer nix aanzezeije.",
+ "supportedlanguages": "Ongerschtöz Schprohche",
+ "supportedlanguages-summary": "He sin alle Schprohche opjeleß, di mer {{GRAMMAR:em|{{SITENAME}}}} ongerschtöze.\nDobei schtonn de Nahme vun dä Övversäzer, di aan dä Schprohch aam ärbeide sin.\nJrühßer jeschrewwe Övversäzer han mih övversaz, wi kleiner jeschrevve.\nJröhn jeschrevve Metmaacher han köözlesch noch jet jedonn, ruud jeschrevve han länger nix mih jedonn.",
+ "supportedlanguages-colorlegend": "De Lejände för de Färve: De läzde Övversäzong es $1 Dääsch her.",
+ "supportedlanguages-portallink": "[$1] $2 — $3",
+ "supportedlanguages-portallink-nocldr": "<nowiki>[</nowiki>$1<nowiki>]</nowiki> $2",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Eine Övversäzer|Ein Övversäzerėn|Eine Övversäzer|Ein Övversäzerėn|Eine Övversäzer}}:|$2 Övversäzer:|Keine Övversäzer}} $1",
+ "supportedlanguages-recenttranslations": "neuste Övversäzunge",
+ "supportedlanguages-count": "{{PLURAL:$1|Ein Schprohch|$1 Schprohche|Kein Schprohche}} ensjesamp.",
+ "supportedlanguages-activity": "$1: {{PLURAL:$2|Ein Änderong|$2 Änderonge|Kein Änderonge}} — de lätzde wohr {{PLURAL:$3|vör einem Daach|vör $3 Dääsch|hück}}.",
+ "translate-jssti-add": "Bei de Leß dobei donn",
+ "managemessagegroups": "Jroppeverwalldong",
+ "translate-smg-notallowed": "Di Axjuhn darfs De nit ußföhre.",
+ "translate-smg-nochanges": "Et jitt kein Änderonge zum Verärbeide.",
+ "translate-smg-submit": "Änderonge zom Verärbeide övverdraare",
+ "translate-smg-submitted": "De ojinaal Täxte udder Nohreeschte sen verändert woode.\nDe Änderonge wääde em Hengerjrond verärbeidt.",
+ "translate-smg-more": "Et kumme noch mih Änderonge, wann heh di affjeschek sin.",
+ "translate-smg-left": "Wat em Wiki schteiht",
+ "translate-smg-right": "Änderonge",
+ "translate-manage-import-diff": "Övverschreff: $1 {{int:pipe-separator}} Donn: $2",
+ "translate-manage-import-new": "Neu Nohreesch $1",
+ "translate-manage-import-deleted": "Fottjeschmeße Nohreesch $1",
+ "translate-manage-action-import": "Empotteere",
+ "translate-manage-action-conflict": "Empotteere un zom Beärbeide makeere",
+ "translate-manage-action-ignore": "Övverjonn",
+ "translate-manage-action-fuzzy": "Empotteere un Översäzunge met „!<nowiki>!</nowiki>FUZZY!!“ zom Beärbeide makeere",
+ "translate-manage-nochanges": "Mer han kei Änderunge aan de faßjelaate Nohreeschte för heh di Jropp.",
+ "translate-manage-nochanges-other": "Mer hatte kei Änderunge för heh di Schprohch.\nMet dämm Lengk onge jeihß De retuur op di Sigg met de Einzelheite vun dä Jropp.",
+ "translate-manage-inconsistent": "Doh paß jät nit zosamme. Bes esu joot un looer noh Änderunge,\ndann versöhke et noch ens. De Einzelheite: $1",
+ "translate-manage-toolong": "De hühßte müjjelesche Zick för et Beärbeide vun {{PLURAL:$1|ein Sekund|$1 Sekunde|nit ens en Sekund}} es afjeloufe.\nBes esu joot, un donn dat Fomulaa noch ens affschecke, för hee wigger ze maache.",
+ "translate-manage-import-summary": "Mer sin en neu Version vun Ußerhallef aam Empoteere",
+ "translate-manage-import-ignore": "Mer sin de Nohreesch $1 aam övverjonn.",
+ "translate-manage-conflict-summary": "Mer sin en neu Version vun Ußerhallef aam Empoteere. Beß esu joot, un donn se prööfe.",
+ "translate-manage-submit": "Lohß Jonn!",
+ "translate-manage-intro-other": "He noh kütt en Leß met Änderonge aan Övversäzunge en dä Schprohch $1.\nDonn se dorschjonn, un söhk Der för jehde en Akßjuhn uß, wat De domet jemaat han wells.\nWann De entscheids, Änderunge ze övverjonn, dann es dat nor för jäds_em_Momang.",
+ "translate-manage-import-ok": "Mer han en neu Väsjohn fun dä Sigg „$1“ empotteet.",
+ "translate-manage-import-done": "Alle jedonn!",
+ "importtranslations": "Övversäzonge Empotteere",
+ "translate-import-from-local": "vun Dingem Rääschner:",
+ "translate-import-load": "Dattei lahde",
+ "translate-import-err-dl-failed": "Kunnt de Dattei nit jriife:\n$1",
+ "translate-import-err-ul-failed": "Di Dattei huhzelahde es donävve jejange",
+ "translate-import-err-invalid-title": "Dä aanjejovve Name vun dä Dattei „<nowiki>$1</nowiki>“ es nit jöltesch.",
+ "translate-import-err-no-such-file": "Di Datei „<nowiki>$1</nowiki>“ jidd_et nit, udder se es nit heh en et Wiki huhjelaade.",
+ "translate-import-err-stale-group": "De Jropp met Täxte un Nohreeschte, woh heh di Dattei bei jehüüre sull, di jidd_et jaanit.",
+ "translate-import-err-no-headers": "Di Dattei es nit em Jettäx Fommaht vum Zohsazprojramm <code lang=\"en\" xml:lang=\"en\">Translate</code>: Kunnt de Jropp un Schprohch nit uß de Koppdahte eruß krijje.",
+ "translate-js-support-unsaved-warning": "Do häß onjeschpeischerte Övversäzzonge.",
+ "translate-gs-pos": "Posizjuhn",
+ "translate-gs-code": "Afjekööz",
+ "translate-gs-continent": "Kontinänt",
+ "translate-gs-speakers": "Jekallt vun Milljuhne",
+ "translate-gs-score": "Prozänt jedonn",
+ "translate-gs-multiple": "Ongerscheidlijje",
+ "translate-gs-count": "Aanzahl",
+ "translate-gs-total": "Zosamme",
+ "translate-gs-avgscore": "Prozänt jedonn em Schnett",
+ "translate-documentation-language": "övver de Täxte un Nohreeschte",
+ "translate-searchprofile": "Övversäzonge",
+ "translate-searchprofile-tooltip": "Söhk en alle Övversäzonge",
+ "translate-search-languagefilter": "Donn en Schprohch ußwähle:",
+ "translate-search-nofilter": "Nä — all de Schprohche",
+ "log-name-translationreview": "Logbooch vum Övversäzonge Pröhve",
+ "log-description-translationreview": "Dat Logbooh hät all de Prööfunge vun Övversäzunge un Jroppe vun Nohreeschte un Täxte.",
+ "logentry-translationreview-message": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät di Övversäzong vun „$3“ jähjejelässe.",
+ "logentry-translationreview-group": "{{GENDER:$2|Dä|Et|Dä Metmaacher|De|Et}} $1 hät dä Zohschtand vun dä Övversäzong op $4 vun dä Sigg „$3“ vun „$6“ op „$7“ jesaz.",
+ "group-translate-sandboxed": "Onbeschtääteschte Övversäzer",
+ "group-translate-sandboxed-member": "Onbeschtääteschte {{GENDER:$1|Övversäzer|Övversäzerėn|Övversäzer|Övversäzerėn|Övversäzer}}",
+ "right-translate-sandboxmanage": "Onbeschtääteschte Övversäzer verwalle",
+ "action-translate-sandboxmanage": "onbeschtääteschte Övversäzer ze verwalle",
+ "right-translate-sandboxaction": "För onbeschtääteschte Övversäzer zohjelohße Saache maache",
+ "action-translate-sandboxaction": "för onbeschtääteschte Övversäzer zohjelohße Saache ze maache",
+ "translate-workflow-state-": "(nit jesaz)",
+ "translate-workflowstatus": "Der Zohschtand es: $1",
+ "translate-workflow-set-doing": "Ben am Waade&nbsp;...",
+ "translate-workflow-autocreated-summary": "Di Sigg för dä Beäbeidongszohschtand „$1“ es automattetsch aanjelaat woode.",
+ "translate-stats-workflow": "Zohstand",
+ "translate-workflowgroup-label": "Beäbeidongszohschtänd",
+ "translate-workflowgroup-desc": "Heh di Jropp vun Täxte un Nohreeschte enthält de Beäbeidongszohschtänd.\nSe wääde en dä Enschtällong <code lang=\"en\">$wgTranslateWorkflowStates</code> faßjelaat.",
+ "translate-dynagroup-recent-label": "Neuste Övversäzonge",
+ "translate-dynagroup-recent-desc": "Heh di Jropp vun Täxte un Nohreeschte hät all de neue Översäzonge in heh di Schprohch.\nDat es joht för et Jähjelässe.",
+ "translate-dynagroup-additions-label": "Köözlesch derbei jekumme",
+ "translate-dynagroup-additions-desc": "Di Jropp hät neue un veränderte Täxte un Nohreeschte.",
+ "translate-msggroupselector-projects": "Nohreeschtejrop",
+ "translate-msggroupselector-search-placeholder": "Nohrechtejropp zem Söhke",
+ "translate-msggroupselector-search-all": "All",
+ "translate-msggroupselector-search-recent": "Jöngere",
+ "translate-msggroupselector-view-subprojects": "{{PLURAL:$1|Ein Ongerjropp|$1 Ongerjroppe|Kein Ongerjroppe}}",
+ "tux-languageselector": "Övversäze noh:",
+ "tux-tab-all": "All",
+ "tux-tab-untranslated": "Nit övversaz",
+ "tux-tab-outdated": "Övverhollt",
+ "tux-tab-translated": "Övversaz",
+ "tux-tab-unproofread": "Nit jähjejelässe",
+ "tux-edit": "Ändere",
+ "tux-status-optional": "Nit nühdesch",
+ "tux-status-fuzzy": "Övverhollt",
+ "tux-status-proofread": "Jähjelässe",
+ "tux-status-translated": "Övversaz",
+ "tux-status-saving": "Ben aam Afseschere{{int:ellipsis}}",
+ "tux-status-unsaved": "Nit jeseschert",
+ "tux-editor-editsummary-placeholder": "Zesammefaßong (kann fott blihve)",
+ "tux-editor-paste-original-button-label": "Der Quälltäx enfööje",
+ "tux-editor-discard-changes-button-label": "Donn de Änderonge verjäße",
+ "tux-editor-save-button-label": "Di Övversäzong seschere",
+ "tux-editor-skip-button-label": "Jangk op de nähkßte",
+ "tux-editor-cancel-button-label": "Ophühre",
+ "tux-editor-confirm-button-label": "De Övversäzong beschtääteje",
+ "tux-editor-proofread-button-label": "Als nohjelohrt makkeere",
+ "tux-editor-shortcut-info": "Kleck op „$1“ zom Seschere udder op „$2“, öm bloß op de Nähkßte ze jonn, op „$4“, öm en Zesammefaßong enzejävve, udder op „$3“, öm op ander Afköözonge ze kumme.",
+ "tux-editor-edit-desc": "Donn de Äklierong ändere",
+ "tux-editor-add-desc": "Donn en Äklierong derbei",
+ "tux-editor-suggestions-title": "Vörschlähsch",
+ "tux-editor-in-other-languages": "En ander Schprohche",
+ "tux-editor-need-more-help": "Mih Enfommazjuhne jevällesch?",
+ "tux-editor-ask-help": "Frooch noh!",
+ "tux-editor-tm-match": "$1% zopaß",
+ "tux-notices-more": "{{PLURAL:$1|noch ein|noch $1|nix mih}}.",
+ "tux-notices-hide": "verschteische",
+ "tux-editor-save-failed": "Di Övversäzong afzeschpeischere hät nit jeflup. Der Jrond es: $1",
+ "tux-editor-n-uses": "{{PLURAL:$1|0=nit|1=eimohl|$1 Mohl}} jebruch",
+ "tux-editor-message-desc-more": "Mih aanzeije",
+ "tux-editor-message-desc-less": "Winnijer aanzeije",
+ "tux-editor-clear-translated": "Övversaz ußblände",
+ "tux-editor-proofreading-mode": "Jähjelässe",
+ "tux-editor-translate-mode": "Leß",
+ "tux-editor-proofreading-hide-own-translations": "De eije Övversäzonge ußblände",
+ "tux-editor-proofreading-show-own-translations": "De eije Övversäzonge aanzeije",
+ "tux-proofread-action-tooltip": "Donn di Övversäzong esu behallde, wi se es",
+ "tux-proofread-edit-label": "Ändere",
+ "tux-editor-page-mode": "Kumplät",
+ "tux-editor-outdated-notice": "Heh di Övversäzong künnt Verbäßeronge nüüdesch han.",
+ "tux-editor-outdated-notice-diff-link": "De Ongescheide aanzeije",
+ "tux-editor-doc-editor-placeholder": "Aanjahbe övver dä Täx udder di Nohreesch",
+ "tux-editor-doc-editor-save": "Faßhallde",
+ "tux-editor-doc-editor-cancel": "Ophühre",
+ "tux-messagetable-more-messages": "{{PLURAL:$1|1=Noch ein Nohreesch|Noch $1 Nohreeschte|0=Kein Nohreeesch mih}}",
+ "tux-messagetable-loading-messages": "Ben {{PLURAL:$1|noch ein Nohreesch|noch $1 Nohreeschte|0=kein Nohreeesch mih}} aam lahde&nbsp;&hellip;",
+ "tux-message-filter-placeholder": "Donn de Leß beschrängke",
+ "tux-message-filter-result": "{{PLURAL:$1|Eine|$1|Keine}} Träffer för „$2“",
+ "tux-message-filter-advanced-button": "Lohß jonn!",
+ "tux-message-filter-optional-messages-label": "Nidd_esu nüüdeje Täxte un Nohreeschte",
+ "tux-proofread-translated-by-self": "Sällver övversaz",
+ "tux-empty-list-all": "En heh dä Jropp vun Nohreeschte es nix dren.",
+ "tux-empty-list-all-guide": "Söhg en ander Nohreeschtejrop för zom Övversäze us",
+ "tux-translate-page-no-such-group": "<strong>Di aanjejovve Jropp jidd_et nit.</strong> Söhg en ander Nohreeschtejrop för t Övversäze us.",
+ "tux-empty-list-translated": "Nix es Övversaz",
+ "tux-empty-list-translated-guide": "Do kanns beim Övversäze metmaache.",
+ "tux-empty-list-translated-action": "Övversäze",
+ "tux-empty-no-messages-to-display": "Mer han kein Nohreeschte för aanzezeije.",
+ "tux-empty-there-are-optional": "'Nid esu nüüdeje' Täxte un Nohreeschte sin en dä Leß nit aanjezeisch",
+ "tux-empty-show-optional-messages": "'Nid esu nüüdeje' aanzeije",
+ "tux-empty-no-outdated-messages": "Nix Övverholltes doh",
+ "tux-empty-nothing-to-proofread": "Nix doh zom Jähjelässe",
+ "tux-empty-you-can-help-providing": "Do kanns metmaache un neue Övversäzonge schriive.",
+ "tux-empty-nothing-new-to-proofread": "Nix Neues doh zom Jähjelässe",
+ "tux-empty-you-can-review-already-proofread": "Do kanns Övversäzonge jähjelässe, di ald jähjejelässe woode sen.",
+ "tux-empty-list-other": "Nix zom Övversäze",
+ "tux-empty-list-other-guide": "Do kanns beim Jähjelässe metmaache.",
+ "tux-empty-list-other-action": "Övversäzonge jähjelässe",
+ "tux-empty-list-other-link": "Alles zeije!",
+ "tux-editor-close-tooltip": "Donn dat Onerfinster zom Övversäze zohmaache",
+ "tux-editor-expand-tooltip": "Donn et Ongerfinster för zem Övversäzonge enblände",
+ "tux-editor-collapse-tooltip": "Donn et Ongerfinster för zem Övversäzonge ußblände",
+ "tux-editor-message-tools-history": "Väsjohne",
+ "tux-editor-message-tools-delete": "Schmiiß fott!",
+ "tux-editor-message-tools-translations": "Alle Övversäzonge",
+ "tux-editor-loading": "Ben aam Lahde&nbsp;…",
+ "translate-search-more-languages-info": "{{PLURAL:$1|0=Söns kein Schprohch|1=Ein Schprohch mih|$1 mih Schprohche}}",
+ "translate-statsbar-tooltip": "$1% övversaz, $2% jähjejelässe",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% fähdesch övversaz, $3% övverhollt, $2% jähjejelässe",
+ "translate-search-more-groups-info": "{{PLURAL:$1|Ein Jropp|$1 Jroppe|Kein Jropp}} mih",
+ "tux-session-expired": "Do bes nit mih ennjelogg.\nBes esu johd un donn en enem extra Brauserfinster widder enlogge.\nUdder donn Ding Övversäzonge woh anders faßhallde, di noch nit em Wiki jeseschert woodte, donn neu enlogge, un jangk dann retuur op heh di Sigg, un donn Ding Övversäzonge widder erövver koppeere!",
+ "tux-nojs": "Heh di Sigg bruch JahvaSkrepp."
+}
diff --git a/Translate/i18n/core/ksw.json b/Translate/i18n/core/ksw.json
new file mode 100644
index 00000000..1ab36a97
--- /dev/null
+++ b/Translate/i18n/core/ksw.json
@@ -0,0 +1,41 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jaeminlovetaejoon",
+ "SawJaemin"
+ ]
+ },
+ "translate-taction-translate": "ကျိာ်ထံ",
+ "translate-page-showing-none": "မဲစ့းလၢဘၣ်ပာ်ဖျါတအိၣ်ဘၣ်.",
+ "translate-edit-definition": "မဲစ့းအခီပညီ",
+ "translate-edit-contribute": "ဟ့ၣ်မၤစၢၤ",
+ "translate-edit-information": "တၢ်ဂ့ၢ်တၢ်ကျိၤဘၣ်ထွဲဒီးမဲစ့း ($1)",
+ "translate-export-form-format": "ဖိမဲၣ်",
+ "translate-rcfilters-translations": "တၢ်ကျိာ်ထံတဖၣ်",
+ "translate-rcfilters-translations-only-label": "တၢ်ကျိာ်ထံတဖၣ်",
+ "translate-rcfilters-translations-filter-label": "တမ့ၢ်တၢ်ကျိာ်ထံဘၣ်",
+ "translate-rcfilters-translations-site-desc": "မံဒံာ်ယၤဝံၣ်ကံၤ အမည်ညွှန်းရှိ ဆိုဒ်မက်ဆေ့များကို စိတ်ကြိုက်ပြုပြင်မှုများ။",
+ "translate-rc-translation-filter": "တပှံၢ်တၢ်ကျိာ်ထံတဖၣ်:",
+ "translate-sidebar-alltrans": "လၢကျိာ်အဂၤ",
+ "translate-translations-none": "တၢ်ကျိာ်ထံလၢ \"$1\" တအိၣ်ဘၣ်",
+ "languagestats-recenttranslations": "တၢ်ကျိာ်ထံလဲတယံာ်ဒံးဘၣ်တဖၣ်",
+ "translate-langstats-expand": "မၤလဲၢ်ထီၣ်",
+ "translate-langstats-collapse": "မၤလီၤပှီၢ်",
+ "translate-language-code": "ကျိာ်ခိၢ်",
+ "translate-mgs-totals": "{{PLURAL:$1|ကျိာ်|ကျိာ်တဖၣ်}} ($1) ကျိာ် ခဲလၢာ်တပူၤဃီ",
+ "supportedlanguages": "ကျိာ်လၢအမူတဖၣ်",
+ "supportedlanguages-recenttranslations": "တၢ်ကျိာ်ထံတယံာ်ဒံးဘၣ်တဖၣ်",
+ "translate-smg-rename-select": "ဃုထၢ",
+ "translate-smg-strong-sync-help": "တၢ်မၤစၢၤ",
+ "translate-js-support-unsaved-warning": "နအိၣ်ဒီးတၢ်ကျိာ်ထံတဖၣ်လၢနတစဲးနုာ်ဒံးဘၣ်န့ၣ်လီၤ.",
+ "translate-documentation-language": "မဲဆ့ၣ် လံာ်တၢ်ကွဲးနီၣ်ကွဲးဃါ",
+ "translate-searchprofile": "တၢ်ကျိာ်ထံတဖၣ်",
+ "translate-dynagroup-recent-label": "တၢ်ကျိာ်ထံလၢတယံာ်ဒံးဘၣ်တဖၣ်",
+ "translate-msggroupselector-search-all": "ခဲလၢာ်",
+ "tux-languageselector": "ကျိာ်ထံလၢ",
+ "tux-tab-all": "ခဲလၢာ်",
+ "tux-editor-in-other-languages": "လၢကျိာ်အဂၤ",
+ "tux-editor-need-more-help": "လိၣ်ဘၣ်အါထီၣ်တၢ်မၤစၢၤဧါ?",
+ "tux-notices-hide": "ပာ်ဘၢ",
+ "tux-editor-collapse-tooltip": "မၤလီၤပှီၢ်"
+}
diff --git a/Translate/i18n/core/ku-latn.json b/Translate/i18n/core/ku-latn.json
new file mode 100644
index 00000000..116ad43b
--- /dev/null
+++ b/Translate/i18n/core/ku-latn.json
@@ -0,0 +1,194 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bikarhêner",
+ "George Animal",
+ "Ghybu",
+ "Gomada",
+ "Guherto"
+ ]
+ },
+ "translate": "Wergerîne",
+ "translate-taction-translate": "Wergerîne",
+ "translate-taction-proofread": "Nirxandin",
+ "translate-taction-lstats": "Statîstîkên ziman",
+ "translate-taction-mstats": "Statîstîkên koma peyamê",
+ "translate-taction-export": "Derxîne",
+ "translate-language-disabled": "Wergerandin bo vî zimanî hatiye astengkirin.",
+ "translate-page-settings-legend": "Eyar",
+ "translate-page-group": "Kom",
+ "translate-page-language": "Ziman",
+ "translate-page-limit": "Sînor",
+ "translate-submit": "Here",
+ "translate-page-navigation-legend": "Navîgasyon",
+ "translate-next": "Rûpela din",
+ "translate-prev": "Rûpela berî",
+ "translate-page-description-legend": "Agahiyên di derbarê komê de",
+ "translate-page-edit": "biguherîne",
+ "translate-optional": "(ne pêwîst)",
+ "translate-edit-title": "Biguherîne \"$1\"",
+ "translate-edit-definition": "Peyama orjînal",
+ "translate-edit-contribute": "beşdar bibe",
+ "translate-edit-information": "Agahiyên di derbarê peyamê de ($1)",
+ "translate-edit-tmmatch": "$1% lê tê",
+ "translate-edit-nopermission": "Bona tu karibî peyaman wergerînî mafên wergerandinê pêwist e.",
+ "translate-edit-askpermission": "Destûrê bistîne",
+ "translate-export-form-format": "Format",
+ "translate-pref-editassistlang": "Zimanên alîkar:",
+ "prefs-translate": "Vebijarkên wergerê",
+ "right-translate-manage": "Komên peyaman bi rêve bibe.",
+ "right-translate-messagereview": "Wergeran binirxîne",
+ "translate-rc-translation-filter": "Wergeran parzûn bike:",
+ "translate-rc-translation-filter-no": "Ti tiştî neke",
+ "translate-rc-translation-filter-only": "Tenê wergerandinan nîşan bide",
+ "translate-rc-translation-filter-filter": "Wergeran parzûn bike",
+ "translationstats": "Statîstîkên wergeran",
+ "translate-stats-edits": "Guhartin",
+ "translate-stats-users": "Wergêr",
+ "translate-stats-reviews": "Nirxandin",
+ "translate-stats-reviewers": "Nirxandêr",
+ "translate-statsf-scale-months": "Meh",
+ "translate-statsf-scale-weeks": "Hefte",
+ "translate-statsf-scale-days": "Roj",
+ "translate-statsf-scale-hours": "Saet",
+ "translate-statsf-count": "Pîvan:",
+ "translate-statsf-count-edits": "Hejmara guhertinan",
+ "translate-statsf-count-users": "Wergêrên çalak",
+ "translate-statsf-count-registrations": "Bikarhênerên nû",
+ "translate-statsf-count-reviews": "Nirxandinên wergerê",
+ "translate-statsf-count-reviewers": "Nirxandêr",
+ "translate-statsf-submit": "Pêşdîtin",
+ "translate-sidebar-alltrans": "Bi zimanên din",
+ "translations": "Hemû werger",
+ "translate-translations-no-message": "\"$1\" peyamek e ku nikare bê wergerandin",
+ "translate-translations-none": "Ji bo \"$1\" werger tune ne",
+ "translate-translations-count": "{{PLURAL:$1|wergerek hat| $1 werger hatin}} dîtin.",
+ "translate-translations-fieldset-title": "Peyam",
+ "translate-translations-messagename": "Nav:",
+ "translate-translations-project": "Proje:",
+ "translate-translations-history-short": "d",
+ "languagestats": "Statîstîkên ziman",
+ "languagestats-summary": "Ev rûpel statîstîkên wergerandinê bo hemû komên peyaman bo zimanekî nîşan dide.",
+ "messagegroupstats-summary": "Ev rûpel statîstîkên koma peyamê nîşan dide.",
+ "languagestats-stats-for": "Statîstîkên wergerê bo $1 ($2)",
+ "languagestats-recenttranslations": "wergerên dawî",
+ "translate-langstats-expand": "veke",
+ "translate-langstats-collapse": "bigre",
+ "translate-langstats-expandall": "hemûyan veke",
+ "translate-langstats-collapseall": "hemûyan bigre",
+ "translate-language-code": "Koda ziman",
+ "translate-language-code-field-name": "Koda ziman:",
+ "translate-language": "Ziman",
+ "translate-total": "Peyam",
+ "translate-untranslated": "Newergerandî",
+ "translate-percentage-fuzzy": "Kevnbûyî",
+ "translate-languagestats-overall": "Hemû komên peyaman bi hev re",
+ "translate-ls-submit": "Statistîkan nîşan bide",
+ "translate-ls-column-group": "Koma peyaman",
+ "translate-mgs-pagename": "Statîstîkên komên peyaman",
+ "translate-mgs-fieldset": "Eyarên ekranê",
+ "translate-mgs-group": "Koma peyamê:",
+ "translate-mgs-submit": "Statîstîkan nîşan bide",
+ "translate-mgs-column-language": "Ziman",
+ "translate-mgs-totals": "Hemû {{PLURAL:$1|ziman|zimanan}} bi hev re",
+ "supportedlanguages": "Zimanên aktîv",
+ "supportedlanguages-summary": "Ev rûpel lîsteya hemû zimananên aktîv yên li ser {{SITENAME}}, û wergêrên ku li ser vî zimanî dixebitin, nîşan dide.\nGava navê wergêrekî mezintir xuya dike, ev tê wê maneyê ku ew wergêr zêdetir beşdar bûye.\nRengên binxetekê çalakiya wergêrê nîşan didin.",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Wergêr}}|Wergêr}}: $1",
+ "supportedlanguages-recenttranslations": "wergerên niha",
+ "supportedlanguages-count": "Bi tevahî $1 {{PLURAL:$1|ziman}}",
+ "translate-jssti-add": "Têxe lîsteyê",
+ "managemessagegroups": "Birêvebirina komên peyaman",
+ "translate-manage-import-diff": "Peyam $1 |Çalakî: $2",
+ "translate-manage-import-new": "Mesaja nû $1",
+ "translate-manage-import-deleted": "Peyama jêbirî $1",
+ "translate-manage-action-import": "Tevlî bike",
+ "translate-manage-action-ignore": "Paşguh bike",
+ "translate-import-load": "Dosyeyê bar bike",
+ "translate-js-support-unsaved-warning": "Wergerên te yên neweşandî hene.",
+ "translate-gs-code": "Kod",
+ "translate-gs-continent": "Parzemîn",
+ "translate-gs-speakers": "Axaftvan",
+ "translate-gs-count": "Hejmar",
+ "translate-gs-total": "Hemû",
+ "translate-documentation-language": "Alikariya wergerandinê",
+ "translate-searchprofile": "Werger",
+ "log-name-translationreview": "Têketina nirxandina wergeran",
+ "logentry-translationreview-message": "$1 wergera $3 {{GENDER:$2|nirxand}}",
+ "translate-dynagroup-recent-label": "Wergerên dawî",
+ "translate-dynagroup-recent-desc": "Ev koma peyaman hemû wergerandinên dawî ber bi vî zimanî ve nîşan dide. Bo karên nirxandinê pir bikêr e.",
+ "translate-dynagroup-additions-label": "Lêzêdekirinên dawî",
+ "translate-dynagroup-additions-desc": "Ev koma peyaman peyamên nû û guhartî nîşan dide.",
+ "translate-msggroupselector-projects": "Koma peyaman",
+ "translate-msggroupselector-search-placeholder": "Li koman bigere",
+ "translate-msggroupselector-search-all": "Hemû",
+ "translate-msggroupselector-search-recent": "dawî",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|binkom}}",
+ "tux-languageselector": "Wergerîne",
+ "tux-tab-all": "Hemû",
+ "tux-tab-untranslated": "Newergerandî",
+ "tux-tab-outdated": "Kevnbûyî",
+ "tux-tab-translated": "Wergerandî",
+ "tux-tab-unproofread": "Nenirxandî",
+ "tux-edit": "Biguherîne",
+ "tux-status-fuzzy": "Kevnbûyî",
+ "tux-status-proofread": "Nirxandî",
+ "tux-status-translated": "wergerand",
+ "tux-status-saving": "Tê weşandin...",
+ "tux-status-unsaved": "Neweşandî",
+ "tux-editor-save-button-label": "Wergerê biweşîne",
+ "tux-editor-skip-button-label": "Derbasî ya din bibe",
+ "tux-editor-cancel-button-label": "Betal bike",
+ "tux-editor-confirm-button-label": "Wergerê bipesinîne",
+ "tux-editor-edit-desc": "Danasînê biguherîne",
+ "tux-editor-add-desc": "Danasînê lê zêde bike",
+ "tux-editor-suggestions-title": "Pêşniyarî",
+ "tux-editor-in-other-languages": "Bi zimanên din",
+ "tux-editor-need-more-help": "Zêdetir alîkarî hewce ye?",
+ "tux-editor-ask-help": "Ji bo agahiyên berfirehtir bipirse",
+ "tux-editor-tm-match": "$1% lê tê",
+ "tux-notices-more": "{{PLURAL:$1|zêdetir $1}}",
+ "tux-notices-hide": "veşêre",
+ "tux-editor-save-failed": "Weşandina wergerê bi ser neket:$1",
+ "tux-editor-message-desc-more": "Zêdetir bibîne",
+ "tux-editor-message-desc-less": "Kêmtir bibîne",
+ "tux-editor-clear-translated": "Yên wergerandî veşêre",
+ "tux-editor-proofreading-mode": "Nirxandin",
+ "tux-editor-translate-mode": "Lîste",
+ "tux-editor-proofreading-hide-own-translations": "Wergerên xwe veşêre",
+ "tux-editor-proofreading-show-own-translations": "Wergerên xwe nîşan bide",
+ "tux-proofread-action-tooltip": "Wek nirxandî nîşan bide",
+ "tux-proofread-edit-label": "Biguherîne",
+ "tux-editor-page-mode": "Rûpel",
+ "tux-editor-outdated-notice": "Ev werger divê bê rojanekirin.",
+ "tux-editor-outdated-notice-diff-link": "Cudahiyan nîşan bide",
+ "tux-editor-doc-editor-save": "Belgekirinê biweşîne",
+ "tux-editor-doc-editor-cancel": "Betal bike",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|peyamên}} din",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|Peyam}} tên barkirin..",
+ "tux-message-filter-placeholder": "Lîsteyê fîltre bike",
+ "tux-message-filter-result": "Bo „$2“ {{PLURAL:$1|encamek hat dîtin|$1 encam hatin dîtin}}",
+ "tux-message-filter-advanced-button": "Lêgerîna pêşketî",
+ "tux-proofread-translated-by-self": "Ji aliyê te hatiye wergerandin",
+ "tux-empty-list-all": "Ev koma peyaman vala ye",
+ "tux-empty-list-all-guide": "Komeka din a peyamê bo wergerandinê hilbijêre.",
+ "tux-empty-list-translated": "Peyamên newergerandî",
+ "tux-empty-list-translated-guide": "Tu dikarî bo wergerandinê alîkariyê bidî",
+ "tux-empty-list-translated-action": "Wergerîne",
+ "tux-empty-no-outdated-messages": "Peyamên kevnbûyî tune ne",
+ "tux-empty-you-can-review-already-proofread": "Tu dikarî wergerên ku ji aliyê kesên din ve hatine nirxandin, binirxînî.",
+ "tux-empty-list-other": "Ti tiştên ku werin wergerandin nînin",
+ "tux-empty-list-other-guide": "Tu dikarî wergerên hene binirxînî",
+ "tux-empty-list-other-action": "Wergeran binirxîne",
+ "tux-empty-list-other-link": "Hemû peyaman nîşan bide",
+ "tux-editor-close-tooltip": "Bigre",
+ "tux-editor-expand-tooltip": "Berfireh bike",
+ "tux-editor-collapse-tooltip": "Bigre",
+ "tux-editor-message-tools-history": "Dîrok",
+ "tux-editor-message-tools-delete": "Jê bibe",
+ "tux-editor-message-tools-translations": "Hemû werger",
+ "tux-editor-loading": "Tê barkirin...",
+ "translate-search-more-languages-info": "{{PLURAL:$1|Zimanekî din|$1 zimanên din}}",
+ "translate-statsbar-tooltip": "$1% wergerandî, $2% nirxandî",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% wergerandî, $2% nirxandî, $3% kevnbûyî",
+ "translate-search-more-groups-info": "{{PLURAL:$1|Komeka din|$1 komên din}}"
+}
diff --git a/Translate/i18n/core/kum.json b/Translate/i18n/core/kum.json
new file mode 100644
index 00000000..b975a1c9
--- /dev/null
+++ b/Translate/i18n/core/kum.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Arsenekoumyk"
+ ]
+ },
+ "translate-documentation-language": "Мактупну маълюматы"
+}
diff --git a/Translate/i18n/core/kw.json b/Translate/i18n/core/kw.json
new file mode 100644
index 00000000..816e4926
--- /dev/null
+++ b/Translate/i18n/core/kw.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nrowe"
+ ]
+ },
+ "translate-langstats-collapse": "diskara",
+ "translate-documentation-language": "Gweres ow treylya"
+}
diff --git a/Translate/i18n/core/ky.json b/Translate/i18n/core/ky.json
new file mode 100644
index 00000000..e722a0ae
--- /dev/null
+++ b/Translate/i18n/core/ky.json
@@ -0,0 +1,61 @@
+{
+ "@metadata": {
+ "authors": [
+ "Growingup"
+ ]
+ },
+ "translate-taction-translate": "Которуу",
+ "translate-taction-proofread": "Окуп текшерүү",
+ "translate-taction-lstats": "Тил статистикасы",
+ "translate-taction-mstats": "Билдирүүлөр тобунун статистикасы",
+ "translate-taction-export": "Экспорт",
+ "translate-page-settings-legend": "Параметрлер",
+ "translate-page-group": "Топ",
+ "translate-page-language": "Тил",
+ "translate-page-navigation-legend": "Навигация",
+ "translate-next": "кийинки барак",
+ "translate-prev": "мурунку барак",
+ "translate-sidebar-alltrans": "Башка тилдерде",
+ "translations": "Бүт котормолор",
+ "translate-translations-count": "{{PLURAL:$1|$1 котормо}} табылды.",
+ "translate-translations-fieldset-title": "Билдирүү",
+ "translate-translations-messagename": "Ат:",
+ "translate-translations-project": "Долбоор:",
+ "languagestats": "Тил статистикасы",
+ "languagestats-summary": "Бул баракта азыркы тил үчүн бүт билдирүүлөр тобунун котормо статистикасы көрсөтүлүп турат.",
+ "languagestats-stats-for": "$1 тилдин котормо статистикасы ($2).",
+ "languagestats-recenttranslations": "жакындагы котормолор",
+ "translate-langstats-expand": "жаюу",
+ "translate-langstats-collapse": "түрүү",
+ "translate-langstats-expandall": "баарын жаюу",
+ "translate-langstats-collapseall": "баарын түрүү",
+ "translate-language-code": "Тилдин коду",
+ "translate-language-code-field-name": "Тилдин коду:",
+ "translate-suppress-complete": "Толугу менен которулган билдирүүлөр тобун көрсөтпөө",
+ "translate-ls-noempty": "Толугу менен которулбаган билдирүүлөр тобун көрсөтпөө",
+ "translate-language": "Тил",
+ "translate-total": "Билдирүүлөр",
+ "translate-untranslated": "Которулбагандар",
+ "translate-percentage-complete": "Бүтүрүлдү",
+ "translate-percentage-fuzzy": "Эскирди",
+ "translate-languagestats-overall": "Бүт билдирүүлөр топтору чогуу",
+ "translate-ls-submit": "Статистиканы көрсөтүү",
+ "translate-ls-column-group": "Билдирүүлөр тобу",
+ "translate-mgs-group": "Билдирүүлөр тобу:",
+ "translate-mgs-submit": "Статистиканы көрсөтүү",
+ "translate-mgs-column-language": "Тил",
+ "supportedlanguages": "Колдолгон тилдер",
+ "supportedlanguages-translators": "{{PLURAL:$2|Котормочу|Котормочулар}}: $1",
+ "supportedlanguages-recenttranslations": "жакындагы котормолор",
+ "translate-jssti-add": "Тизмеге кошуу",
+ "translate-manage-import-new": "Жаңы билдирүү $1",
+ "translate-manage-action-import": "Импорт",
+ "importtranslations": "Котормолорду импорттоо",
+ "translate-import-load": "Файлды жүктөө",
+ "translate-gs-code": "Код",
+ "translate-searchprofile": "Котормолор",
+ "translate-msggroupselector-search-all": "Баары",
+ "tux-languageselector": "Тил",
+ "tux-tab-all": "Баары",
+ "tux-edit": "Оңдоо"
+}
diff --git a/Translate/i18n/core/la.json b/Translate/i18n/core/la.json
new file mode 100644
index 00000000..8ece934a
--- /dev/null
+++ b/Translate/i18n/core/la.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Andrew Dalby",
+ "SPQRobin",
+ "UV"
+ ]
+ },
+ "translate": "Traducere",
+ "translate-next": "Pagina proxima",
+ "translate-prev": "Pagina superior",
+ "translate-sidebar-alltrans": "Linguis aliis",
+ "translate-documentation-language": "Ut facilius convertatur"
+}
diff --git a/Translate/i18n/core/lad.json b/Translate/i18n/core/lad.json
new file mode 100644
index 00000000..275df1aa
--- /dev/null
+++ b/Translate/i18n/core/lad.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "WikiiiTranslator"
+ ]
+ },
+ "translate-documentation-language": "Mensaje de documentasyón"
+}
diff --git a/Translate/i18n/core/lag.json b/Translate/i18n/core/lag.json
new file mode 100644
index 00000000..07cc4886
--- /dev/null
+++ b/Translate/i18n/core/lag.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Baba Tabita"
+ ]
+ },
+ "translate-statsf-scale-months": "Myeeri",
+ "tux-editor-close-tooltip": "Chuunga",
+ "tux-editor-message-tools-history": "Hɨstoríya",
+ "tux-editor-message-tools-delete": "Honola"
+}
diff --git a/Translate/i18n/core/lb.json b/Translate/i18n/core/lb.json
new file mode 100644
index 00000000..732f0ed8
--- /dev/null
+++ b/Translate/i18n/core/lb.json
@@ -0,0 +1,377 @@
+{
+ "@metadata": {
+ "authors": [
+ "Les Meloures",
+ "Robby",
+ "Soued031"
+ ]
+ },
+ "translate": "Iwwersetzt",
+ "translate-extensionname": "Iwwersetzen",
+ "translate-desc": "[[Special:Translate|Spezialsäit]] fir d'Iwwersetzung vu MediaWiki-Systemmessagen a fir Aneres",
+ "translate-taskui-export-to-file": "Am native Format exportéieren",
+ "translate-taskui-export-as-po": "Exportéiere fir off-line z'iwwersetzen",
+ "translate-taskui-export-as-csv": "am CSV-Format exportéieren",
+ "translate-taction-translate": "Iwwersetzen",
+ "translate-taction-proofread": "Nokucken",
+ "translate-taction-lstats": "Sproochstatistiken",
+ "translate-taction-mstats": "Statistike vun de Gruppe vu Messagen",
+ "translate-taction-export": "Exportéieren",
+ "translate-taction-disabled": "Dës Aktioun ass op dëser Wiki ausgeschalt.",
+ "translate-page-no-such-language": "Ongëltege Sproochcode benotzt",
+ "translate-page-no-such-group": "Déi Gefrote Grupp gëtt et net.",
+ "translate-page-disabled": "Iwwersetzungen an dës Sprooch goufen an dëser Grupp ausgeschalt. Grond:\n\n<em>$1</em>",
+ "translate-language-disabled": "D'Iwwersetzung an dës Sprooch ass ausgeschalt.",
+ "translate-page-settings-legend": "Astellungen",
+ "translate-page-group": "Grupp",
+ "translate-page-language": "Sprooch",
+ "translate-page-limit": "Maximum",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|Message|Message}} pro Säit",
+ "translate-submit": "Weisen",
+ "translate-page-navigation-legend": "Navigatioun",
+ "translate-page-showing": "D'Message vu(n) $1 bis $2 vun am Ganze(n) $3 gi gewisen.",
+ "translate-page-showing-all": "$1 {{PLURAL:$1|Message gëtt|Message gi}} gewisen",
+ "translate-page-showing-none": "Kee Message fir ze weisen",
+ "translate-next": "Nächst Säit",
+ "translate-prev": "Vireg Säit",
+ "translate-page-description-legend": "Informatiounen iwwer de Grupp",
+ "translate-page-description-hasoptional": "An dësem Groupe vu Message sinn optional Messagen.\nOptional Message sollen nëmmen iwwersat gi wann Är Sprooch speziell Ufuerderungen huet wéi zum Beispill datt Espacen net benotzt ginn oder eng Transliteratioun vu speziellen Nimm. $1",
+ "translate-page-description-hasoptional-open": "Optional Message weisen.",
+ "translate-page-edit": "änneren",
+ "translate-optional": "(optional)",
+ "translate-ignored": "(ignoréiert)",
+ "translate-edit-title": "\"$1\" änneren",
+ "translate-edit-definition": "Definitioun vum Message",
+ "translate-edit-contribute": "matschaffen",
+ "translate-edit-no-information": "<em>Dëse Message huet keng Dokumentatioun.\nWann Dir wësst wou oder wéi dëse Message gebraucht gëtt, da kënnt Dir aner Iwwersetzer hëllefen an deem Dir Informatiounen iwwer dëse Message gitt.</em>",
+ "translate-edit-information": "Informatioun iwwer de Message ($1)",
+ "translate-edit-warnings": "Warnunge virun onkompletten Iwwersetzungen",
+ "translate-edit-tmmatch-source": "Quelltext fir d'Iwwersetzung: $1",
+ "translate-edit-tmmatch": "$1% Iwwereneestëmmung",
+ "translate-edit-nopermission": "Dir braucht eng Iwwersetzungsrechter fir Messagen z'iwwersetzen.",
+ "translate-edit-askpermission": "Autorisatioun kréien",
+ "exporttranslations": "Iwwersetzungen exportéieren",
+ "translate-export-form-format": "Format",
+ "translate-export-invalid-format": "Gitt wgl. e valabele Format an.",
+ "translate-export-not-supported": "Den Export vun Iwwersetzunge gëtt net ënnerstëtzt.",
+ "translate-checks-parameters": "{{PLURAL:$2|Dëse Parameter gëtt|Dës Parameter ginn}} net benotzt:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Dëse Parameter ass|Dës Parameter sinn }} onbekannt:\n<strong>$1</strong>",
+ "translate-checks-balance": "Et gëtt eng ongerued Zuel vu {{PLURAL:$2|Klammere|Klammere}} benotzt:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Dëse Link ass|Dës Linke si}} problematesch:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Dëse Link feelt|Dës $2 Linke feelen}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "D'Definitioun benotzt <nowiki>{{PLURAL:}}</nowiki> awer d'Iwwersetzung mécht dat net.",
+ "translate-checks-plural-forms": "Fir <nowiki>{{PLURAL:}}</nowiki>{{PLURAL:$1|gouf eng Form|goufen $1 Formen}} uginn. Et {{PLURAL:$2|gëtt awer nëmmen eng Form|ginn awer nëmme(n) $2 Formen}} ënnerstëtzt (ausser de Formen 0= an 1= ).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> huet zweemol déiselwecht Zeechen um Schluss. <nowiki>{{PLURAL:$1|Schof|Schof}}</nowiki> soll sou geschriwwe ginn: <nowiki>{{PLURAL:$1|Schof}}</nowiki>.",
+ "translate-checks-gettext-plural-unsupported": "Dëse Message ënnerstëtzt <nowiki>{{PLURAL:GETTEXT|}}</nowiki> net.",
+ "translate-checks-smartformat-plural-missing": "Dës Iwwersetzung muss eng Méizuel fir d'Variabel $1 hunn.",
+ "translate-checks-smartformat-plural-unsupported": "Dëse Message ënnerstëtzt d'Méizuel fir d'Variabel $1 net.",
+ "translate-checks-unicode-plural-missing": "Dës Iwwersetzung brauch <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-unsupported": "Dëse Message ënnerstëtzt <nowiki>{{PLURAL|}}</nowiki> net.",
+ "translate-checks-pagename": "Nummraum geännert duerch d'Definitioun",
+ "translate-checks-format": "Dës Iwwersetzung translation entsprecht net der Definitioun oder huet eng Syntax déi net gëlteg ass: $1",
+ "translate-checks-escape": "{{PLURAL:$2|Dëst Escape-Zeeche kann|Dës Escape-Zeeche kënnen}} ongewollt sinn: <strong>$1</strong>\n{{PLURAL:$4|E valabelt Escape-Zeechen ass |Vvalabelt Escape-Zeechen sinn (ënneraneren):}} $3.",
+ "translate-checks-parametersnotequal": "D'Zuel vun de Parameteren ass {{PLURAL:$1|$1}} et {{PLURAL:$2|dierft awer nëmmen ee sinn|missten der awer $2 sinn}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> ass formal net valabel.",
+ "translate-checks-fudforum-syntax": "<nowiki>$1</nowiki> aplaz vu(n) <nowiki>$2</nowiki> an dësem Projet benotzen.",
+ "translate-checks-newline-extra-end": "Et gëtt {{PLURAL:$1|een zousätlechen Zeilenëmbroch|$1 zousätzlech Zeilenëmbrëch}} um Ënn vun der Iwwersetzung.",
+ "translate-checks-replacement": "Benotzt $2 amplaz vu(n) $1",
+ "translate-pref-editassistlang": "Sproochen déi ënnerstëtzen:",
+ "prefs-translate": "Optioune vun der Iwwersetzung",
+ "translate-pref-editassistlang-help": "Mat Komma getrennte Lëscht vun de Sproochcoden.\nIwwersetzung vun engem Message an dës Sprooche gëtt gewisen wann Dir iwwersetzt.\nD'Standard-Lëscht vu Sproochen hànkt vun Ärer Sprooch of.",
+ "translate-pref-editassistlang-bad": "Net valabele Sproochcode an der Lëscht:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Mam Iwwersetzungs-Tool änneren",
+ "action-translate": "ännere mat der Hëllef vum Iwwersetzungs-Interface",
+ "right-translate-manage": "Message-Gruppe geréieren",
+ "action-translate-manage": "Message-Gruppe geréieren",
+ "right-translate-import": "Offline Iwwersetzungen importéieren",
+ "action-translate-import": "offline Iwwersetzungen importéieren",
+ "right-translate-messagereview": "Iwwersetzungen nokucken",
+ "action-translate-messagereview": "Iwwersetzungen nokucken",
+ "right-translate-groupreview": "De Workflow vun de Gruppe vu Messagen nokucken",
+ "translate-rcfilters-translations": "Iwwersetzungen",
+ "translate-rcfilters-translations-only-label": "Iwwersetzungen",
+ "translate-rcfilters-translations-only-desc": "Ännerungen op iwwersate Säiten.",
+ "translate-rcfilters-translations-filter-label": "Keng Iwwersetzungen",
+ "translate-rcfilters-translations-filter-desc": "All Ännerunge déi keng Iwwersetzunge sinn.",
+ "translate-rcfilters-translations-site-label": "Systemmessagen",
+ "translate-rc-translation-filter": "Iwwersetzunge filteren:",
+ "translate-rc-translation-filter-no": "Näischt maachen",
+ "translate-rc-translation-filter-only": "Nëmmen Iwwersetzunge weisen",
+ "translate-rc-translation-filter-filter": "Iwwersetzunge filteren",
+ "translate-rc-translation-filter-site": "Nëmmen Ännerunge vu Message vum Site",
+ "translationstats": "Statistike vun der Iwwersetzung",
+ "translate-stats-edits": "Ännerunge",
+ "translate-stats-users": "Iwwersetzer",
+ "translate-stats-registrations": "Umellungen",
+ "translate-stats-reviews": "Iwwerpréiwungen",
+ "translate-stats-reviewers": "Iwwerlieser",
+ "translate-statsf-intro": "Dir kënnt einfach Statistike mat dësem Formulaire generéieren.\nAll Wäerter hunn eng ënnescht an eng iewescht Limit.",
+ "translate-statsf-options": "Optioune vum Graphique",
+ "translate-statsf-width": "Breet a Pixelen:",
+ "translate-statsf-height": "Héicht a Pixelen:",
+ "translate-statsf-days": "Ufanksdatum:",
+ "translate-statsf-start": "Ufanksdatum:",
+ "translate-statsf-scale": "Granularitéit:",
+ "translate-statsf-scale-years": "Joer",
+ "translate-statsf-scale-months": "Méint",
+ "translate-statsf-scale-weeks": "Wochen",
+ "translate-statsf-scale-days": "Deeg",
+ "translate-statsf-scale-hours": "Stonnen",
+ "translate-statsf-count": "Mooss:",
+ "translate-statsf-count-edits": "Zuel vun den Ännerungen",
+ "translate-statsf-count-users": "Aktiv Iwwersetzer",
+ "translate-statsf-count-registrations": "Nei Benotzer",
+ "translate-statsf-count-reviews": "Nogekuckt Iwwersetzungen",
+ "translate-statsf-count-reviewers": "Iwwerlieser",
+ "translate-statsf-language": "Komma-getrennte Lëscht vun de Sproochcoden:",
+ "translate-statsf-group": "Komma-getrennte Lëscht vun de Gruppecoden:",
+ "translate-statsf-submit": "Kucken ouni ofzespäicheren",
+ "translate-statsf-unknown-error": "En onbekannte Feeler ass geschitt.",
+ "translate-tag-page-desc": "Iwwersetzung vun der Wiki-Säit [[$2|$1]] vu(n) $3 ($4).",
+ "translate-sidebar-alltrans": "An anere Sproochen",
+ "translations": "All Iwwersetzungen",
+ "translations-summary": "Gitt wgl. en Numm vun engem Message hei ënnendrënner an fir all disponibel Iwwersetzungen ze weisen.",
+ "translate-translations-no-message": "\"$1\" ass kee Message den iwwersat ka ginn",
+ "translate-translations-none": "Et gëtt keng Iwwersetzunge fir \"$1\"",
+ "translate-translations-count": "{{PLURAL:$1|Eng Iwwersetzung|$1 Iwwersetzunge}} fonnt.",
+ "translate-translations-fieldset-title": "Message",
+ "translate-translations-messagename": "Numm:",
+ "translate-translations-project": "Projet:",
+ "translate-translations-including-no-param": "Gitt wgl. e gëltege Code vum Message beim Parameter vun der Ënnersäit unn",
+ "translate-translations-history-short": "V",
+ "languagestats": "Sproochstatistiken",
+ "languagestats-summary": "Dës Säit weist d'Statistike vun der Iwwersetzung fir all Gruppe vu Message fir eng Sprooch.",
+ "messagegroupstats-summary": "Dës Säit weist d'Statistike vun de Gruppe vu Messagen.",
+ "languagestats-stats-for": "Iwwersetzungsstatistike fir $1 ($2).",
+ "languagestats-recenttranslations": "Rezent Iwwersetzungen",
+ "translate-langstats-incomplete": "E puer vun de Statistiken op dëser Säit sinn net komplett. Luet d'Säit nei fir méi Statistiken ze kréien.",
+ "translate-langstats-expand": "opklappen",
+ "translate-langstats-collapse": "zesummeklappen",
+ "translate-langstats-expandall": "alles opklappen",
+ "translate-langstats-collapseall": "alles zouklappen",
+ "translate-language-code": "Sproochecode",
+ "translate-language-code-field-name": "Sproochecode:",
+ "translate-suppress-complete": "Gruppe vu Messagen. déi komplett iwwersat sinn, net weisen",
+ "translate-ls-noempty": "Gruppe vu Message vun deenen nach guer näischt iwwersat ass net weisen",
+ "translate-language": "Sprooch",
+ "translate-total": "Messagen",
+ "translate-untranslated": "Net iwwersat",
+ "translate-percentage-complete": "Fäerdeg zu",
+ "translate-percentage-fuzzy": "Net à jour",
+ "translate-percentage-proofread": "Nogekuckt",
+ "translate-languagestats-overall": "All Systemmessagen zesummen",
+ "translate-ls-submit": "Statistike weisen",
+ "translate-ls-column-group": "Grupp vu Messagen",
+ "translate-mgs-pagename": "Statistike vun de Gruppe vu Messagen",
+ "translate-mgs-fieldset": "Astellunge weisen",
+ "translate-mgs-group": "Grupp vu Messagen:",
+ "translate-mgs-nocomplete": "Déi Sproochen net weisen déi komplett iwwersat sinn",
+ "translate-mgs-noempty": "Déi Sprooche fir déi et keng Iwwersetzung gëtt net weisen",
+ "translate-mgs-submit": "Statistike weisen",
+ "translate-mgs-column-language": "Sprooch",
+ "translate-mgs-totals": "All $1 {{PLURAL:$1|Sprooch|Sproochen}} zesummen",
+ "translate-mgs-invalid-group": "De spezifizéierte Grupp $1 gëtt et net.",
+ "translate-mgs-nothing": "Fir déi gefrote Statistike gëtt et näischt fir ze weisen.",
+ "translate-tes-type-to-search": "Tippt fir unzefänke mat sichen",
+ "supportedlanguages": "Aktiv Sproochen",
+ "supportedlanguages-summary": "Op dëser Säit steet eng Lëscht vun den aktive Sproochen op {{SITENAME}}, zesumme mam Numm vun den Iwwersetzer déi un där Sprooch schaffen.\nDen Numm vum Iwwersetzer ass méi grouss desto méi Iwwersetzungen de Benotzer gemaach huet.\nD'Faarf mat där den Numm vum Benotzer ënnerstrach ass weist wéi rezent dee Benotzer hei aktiv war.",
+ "supportedlanguages-colorlegend": "Erklärung vun de Faarwen: Lescht Iwwersetzung viru(n) $1 Deeg.",
+ "supportedlanguages-sqlite-error": "SQLite gëtt net ënnerstëtzt",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Iwwersetzer}}}}: $1",
+ "supportedlanguages-recenttranslations": "rezent Iwwersetzungen",
+ "supportedlanguages-count": "{{PLURAL:$1|Eng Sprooch|$1 Sproochen}} am Ganzen.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|Ännerung|Ännerungen}} - lescht Ännerung viru(n) $3 {{PLURAL:$3|Dag|Deeg}}",
+ "translate-supportedlanguages-cached": "Dës Informatioune goufe virun $1 tëschegespäichert.",
+ "translate-activelanguages-invalid-code": "De Sproochecode \"$1\" ass onbekannt oder net fir d'Iwwersetzung aktivéiert.",
+ "abusefilter-edit-builder-vars-translate-source-text": "Quelltext vun der Iwwersetzungseenheet",
+ "abusefilter-edit-builder-vars-translate-target-language": "Zilsprooch fir d'Iwwersetzung",
+ "translate-jssti-add": "Op d'Lëscht derbäisetzen",
+ "managemessagegroups": "Gestioun vun de Gruppe vu Messagen",
+ "translate-smg-notallowed": "Dir däerft dës Aktioun net maachen.",
+ "translate-smg-nochanges": "Et gëtt keng Ännerunge fir ze verschaffen.",
+ "translate-smg-submit": "Ännerunge fir ze verschaffe schécken",
+ "translate-smg-submitted": "Definitioune vun de Message goufen aktualiséiert. Ännerunge ginn am Hannergrond gemaach.",
+ "translate-smg-more": "Nom Späichere vun dësen Ännerungen mussen nach méi Ännerunge verschafft ginn.",
+ "translate-smg-left": "Inhalt vum Message op der Wiki",
+ "translate-smg-right": "Ännerungen déi erakommen",
+ "translate-smg-rename-select": "Eraussichen",
+ "translate-smg-rename-cancel": "Ofbriechen",
+ "translate-smg-rename-no-msg": "Keng Messagë fonnt.",
+ "translate-smg-strong-sync-help": "Hëllef",
+ "translate-smg-group-message-action-history": "Versiounen",
+ "translate-smg-group-action-resolve": "Als geléist markéieren",
+ "translate-smg-group-message-tag-outdated": "Vereelzt",
+ "translate-smg-group-message-tag-rename": "Ëmbenennen",
+ "translate-smg-group-message-message-content": "Inhalt:",
+ "translate-smg-group-message-message-target": "Zil:",
+ "translate-smg-group-message-message-other-langs": "Aner Sproochen:",
+ "translate-smg-loading": "Lueden...",
+ "translate-manage-import-diff": "Message $1 | Aktiounen: $2",
+ "translate-manage-import-new": "Neie Message $1",
+ "translate-manage-import-deleted": "Geläschte Message $1",
+ "translate-manage-action-import": "Importéieren",
+ "translate-manage-action-conflict": "Importéieren a mat 'FUZZY' markéieren",
+ "translate-manage-action-ignore": "Ignoréieren",
+ "translate-manage-action-fuzzy": "Iwwersetzungen importéieren a mat 'FUZZY' markéieren",
+ "translate-manage-action-rename": "Ëmbenennen",
+ "translate-manage-action-ignore-change": "Ännerung vun der Iwwersetzung ignoréieren",
+ "translate-manage-nochanges": "Et gi keng Ännerungen an den Definitioune vun de Message vun dësem Grupp.",
+ "translate-manage-nochanges-other": "Et gouf keng Ännerunge fir dës Sprooch.\nBenotzt de Link ënnendrënner fir zréck op d'Säit mat den Detailer vum Grupp ze goen.",
+ "translate-manage-inconsistent": "Inkonsistenz an der Ufro fonnt.\nKuckt wgl. no fir Ännerungen a probéiert nach eng Kéier. Detailer: $1",
+ "translate-manage-toolong": "Déi maximal Zäit vun der Beaarbechtung vun $1 {{PLURAL:$1|Sekonn|Sekonne}} gouf iwwerschratt.\nSchéckt de Formulaire wgl. nach emol fir mat der Beaarbechtung weiderzefueren.",
+ "translate-manage-import-summary": "Eng nei Versioun vun enger externer Quell gëtt importéiert",
+ "translate-manage-import-ignore": "Message $1 iwwersprangen.",
+ "translate-manage-import-rename-summary": "An externer Quell ëmbenannt",
+ "translate-manage-conflict-summary": "En nei Versioun gëtt vun enger externer Quell imortéiert. Wgl. nokucken.",
+ "translate-manage-submit": "Maachen",
+ "translate-manage-intro-other": "Ënnendrënner ass eng Lëscht vun den Ännerungen vun den Iwwersetzungen an der Sprooch $1.\nKuckt d'Ännerunge wgl. no a wielt déi Aktioun déi Dir fir déi jeeweileg Iwwersetzung wëllt.\nWann Dir decidéiert fir Ännerungen z'ignoréieren, ass dës Aktioun just temporär.",
+ "translate-manage-import-ok": "Importéiert: $1",
+ "translate-manage-import-done": "Import fäerdeg!",
+ "translate-manage-empty-content": "Den Inhalt ass eidel",
+ "importtranslations": "Iwwersetzungen importéieren",
+ "translate-import-from-local": "Fichier lokal eropgelueden:",
+ "translate-import-load": "Fichier lueden",
+ "translate-import-err-dl-failed": "De Fichier kann net erreescht ginn:\n$1",
+ "translate-import-err-ul-failed": "D'Eropluede vum Fichier huet net geklappt",
+ "translate-import-err-invalid-title": "Den Numm vum Fichier <nowiki>$1</nowiki> deen ugi gouf ass net valabel.",
+ "translate-import-err-no-such-file": "De Fichier <nowiki>$1</nowiki> gëtt et net oder gouf lokal net eropgelueden.",
+ "translate-import-err-stale-group": "De Grupp vu Messagen zu deem dëse Fichier gehéiert gëtt et net.",
+ "translate-import-err-no-headers": "De Fichier ass net am Format \"Gettext\" deen d'Erweiderung \"Translate\" brauch:\nDe Grupp an d'Sprooch konnte vun der Entête vum Fichier net bestëmmt ginn.",
+ "translate-js-support-unsaved-warning": "Dir hutt net publizéiert Iwwersetzungen.",
+ "translate-gs-pos": "Pos.",
+ "translate-gs-code": "Code",
+ "translate-gs-continent": "Kontinent",
+ "translate-gs-speakers": "Leit déi d'Sprooch schwetzen",
+ "translate-gs-score": "Score",
+ "translate-gs-multiple": "Méi",
+ "translate-gs-count": "Zuel",
+ "translate-gs-total": "Total",
+ "translate-gs-avgscore": "Duerchschnëttleche Score",
+ "translate-documentation-language": "Dokumentatioun vum Message",
+ "translate-searchprofile": "Iwwersetzungen",
+ "translate-searchprofile-tooltip": "An allen Iwwersetzunge sichen",
+ "translate-searchprofile-note": "Méi Optioune fir ze siche si mat der [$1 Iwwersetzungssich] disponibel.",
+ "translate-search-languagefilter": "Filter no der Sprooch:",
+ "translate-search-nofilter": "Kee Filter",
+ "log-name-translationreview": "Logbuch vun den nogekuckten Iwwersetzungen",
+ "log-description-translationreview": "Logbuch vun allen nogekuckten Iwwersetzungen a Gruppe vu Messagen.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|huet}} d'Iwwersetzung $3 nogekuckt",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|huet}} de Status vun der Iwwersetzung vu(n) $4 vun $3 vu(n) $6 op $7 geännert",
+ "group-translate-sandboxed": "Net-confirméiert Iwwersetzer",
+ "group-translate-sandboxed-member": "{{GENDER:$1|net-confirméierten Iwwersetzer}}",
+ "right-translate-sandboxmanage": "Benotzer vun der Sandkëscht geréieren",
+ "action-translate-sandboxmanage": "Benotzer aus der Sandkëscht ze geréieren",
+ "right-translate-sandboxaction": "Aktiounen ausféieren déi fir Sandkëschtbenotzer erlaabt sinn",
+ "translate-workflow-state-": "(net agestallt)",
+ "translate-workflowstatus": "Statut: $1",
+ "translate-workflow-set-doing": "Astellen...",
+ "translate-workflow-autocreated-summary": "Automatescht Uleeë vun der Säit fir de Statut vum Workflow $1",
+ "translate-stats-workflow": "Statut",
+ "translate-workflowgroup-label": "Etappe vum Workflow",
+ "translate-workflowgroup-desc": "Dës Grupp vu Message weist de Status am Iwwersetzungsoflaf.\nDe Status ass sou wéi an der Konfiguratiounslëscht $wgTranslateWorkflowStates definéiert.",
+ "translate-dynagroup-recent-label": "Rezent Iwwersetzungen",
+ "translate-dynagroup-recent-desc": "Dës Grupp vu Message weist all rezent Iwwersetzungen an dëser Sprooch.\nDëst ass ganz nëtzlech fir d'Aufgabe vum Nokucken.",
+ "translate-dynagroup-additions-label": "Rezent nei Message",
+ "translate-dynagroup-additions-desc": "Dës Grupp vu Message weist nei oder geännert Messagen.",
+ "translate-msggroupselector-projects": "Grupp vu Messagen",
+ "translate-msggroupselector-search-placeholder": "An de Gruppe sichen",
+ "translate-msggroupselector-search-all": "All",
+ "translate-msggroupselector-search-recent": "Rezent",
+ "translate-msggroupselector-view-subprojects": "{{PLURAL:$1|Eng Ënnergruppe|$1 Ënnergruppen}}",
+ "tux-languageselector": "Iwwersetzen op",
+ "tux-tab-all": "All",
+ "tux-tab-untranslated": "Net iwwersat",
+ "tux-tab-outdated": "Vereelzt",
+ "tux-tab-translated": "Iwwersat",
+ "tux-tab-unproofread": "Net nogekuckt",
+ "tux-edit": "Änneren",
+ "tux-status-optional": "Fakultativ",
+ "tux-status-fuzzy": "Vereelzt",
+ "tux-status-proofread": "Nogekuckt",
+ "tux-status-translated": "Iwwersat",
+ "tux-status-saving": "Verëffentlechen...",
+ "tux-status-unsaved": "Net publizéiert",
+ "tux-save-unknown-error": "En onbekannte Feeler ass geschitt.",
+ "tux-editor-placeholder-language": "Är Iwwersetzung op $1",
+ "tux-editor-editsummary-placeholder": "Resumé (fakultativ)",
+ "tux-editor-paste-original-button-label": "Quelltext drasetzen",
+ "tux-editor-discard-changes-button-label": "Ännerungen annuléieren",
+ "tux-editor-save-button-label": "Iwwersetzung publizéieren",
+ "tux-editor-skip-button-label": "Op den Nächste goen",
+ "tux-editor-cancel-button-label": "Ofbriechen",
+ "tux-editor-confirm-button-label": "Iwwersetzung confirméieren",
+ "tux-editor-proofread-button-label": "Als nogekuckt markéieren",
+ "tux-editor-shortcut-info": "Dréckt \"$1\" fir ze confirméieren an op den nächsten Text-Message ze goen, \"$2\" fir op den nächste Message ze goen, \"$4\" fir e Resumé unzeginn, oder dréckt op \"$3\" fir aner Tasturkierzel ze gesinn.",
+ "tux-editor-edit-desc": "Dokumentatioun änneren",
+ "tux-editor-add-desc": "Dokumentatioun dobäisetzen",
+ "tux-editor-suggestions-title": "Virschléi",
+ "tux-editor-all-changes": "All Ännerungen",
+ "tux-editor-in-other-languages": "An anere Sproochen",
+ "tux-editor-need-more-help": "Braucht Dir méi Hëllef?",
+ "tux-editor-ask-help": "No méi Informatioune froen",
+ "tux-editor-tm-match": "$1% Iwwereneestëmmung",
+ "tux-notices-more": "{{PLURAL:$1|$1 méi}}",
+ "tux-notices-hide": "verstoppen",
+ "tux-editor-save-failed": "D'Publizéiere vun der Iwwersetzung huet net funktionéiert: $1",
+ "tux-editor-n-uses": "gouf {{PLURAL:$1|ee mol|$1 mol}} gebraucht",
+ "tux-editor-message-desc-more": "Méi weisen",
+ "tux-editor-message-desc-less": "Manner weisen",
+ "tux-editor-clear-translated": "Déi Iwwersat verstoppen",
+ "tux-editor-proofreading-mode": "Nokucken",
+ "tux-editor-translate-mode": "Lëscht",
+ "tux-editor-proofreading-hide-own-translations": "Är Iwwersetzunge verstoppen",
+ "tux-editor-proofreading-show-own-translations": "Är Iwwersetzunge weisen",
+ "tux-proofread-action-tooltip": "Als nogekuckt markéieren",
+ "tux-proofread-edit-label": "Änneren",
+ "tux-editor-page-mode": "Säit",
+ "tux-editor-outdated-notice": "Dës Iwwersetzung muss eventuell aktualiséiert ginn.",
+ "tux-editor-outdated-notice-diff-link": "Ënnerscheeder weisen",
+ "tux-editor-doc-editor-placeholder": "Dokumentatioun vum Message",
+ "tux-editor-doc-editor-save": "Dokumentatioun pubéizéieren",
+ "tux-editor-doc-editor-cancel": "Ofbriechen",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|Message|Messagen}} méi",
+ "tux-messagetable-loading-messages": "$1 {{PLURAL:$1|Message gëtt|Message gi}} gelueden ...",
+ "tux-message-filter-placeholder": "Lëscht filteren",
+ "tux-message-filter-result": "$1 {{PLURAL:$1|Resultat|Resultater}} fonnt fir \"$2\"",
+ "tux-message-filter-advanced-button": "Erweidert Sich",
+ "tux-message-filter-optional-messages-label": "Optional Messagen",
+ "tux-proofread-translated-by-self": "Vun Iech iwwersat",
+ "tux-empty-list-all": "Dëse Grupp vu Messagen ass eidel",
+ "tux-empty-list-all-guide": "Sicht en anere Gruppe vu Messagen eraus fir z'iwwersetzen",
+ "tux-translate-page-no-such-group": "<strong>De Grupp deen ugi war gëtt et net.</strong> Sicht een anere Grupp vu Messagen eraus.",
+ "tux-empty-list-translated": "Keng iwwersate Messagen",
+ "tux-empty-list-translated-guide": "Dir kënnt beim Iwwersetzen hëllefen",
+ "tux-empty-list-translated-action": "Iwwersetzen",
+ "tux-empty-no-messages-to-display": "Keng Message fir ze weisen",
+ "tux-empty-there-are-optional": "Et gëtt optional Messagen déi an dëser Lëscht net gewise ginn",
+ "tux-empty-show-optional-messages": "Optional Message weisen",
+ "tux-empty-no-outdated-messages": "Keng vereelste Messagen",
+ "tux-empty-nothing-to-proofread": "Näischt fir nozekucken",
+ "tux-empty-you-can-help-providing": "Dir kënnt hëllefen nei Iwwersetzungen ze maachen",
+ "tux-empty-nothing-new-to-proofread": "Näischt neies fir nozekucken",
+ "tux-empty-you-can-review-already-proofread": "Dir kënnt Iwwersetzungen nokucken déi scho vun Aneren nogekuckt sinn.",
+ "tux-empty-list-other": "Näischt fir z'iwwersetzen.",
+ "tux-empty-list-other-guide": "Dir kënnt beim Nokucke vun den Iwwersetzungen hëllefen",
+ "tux-empty-list-other-action": "Iwwersetzungen nokucken",
+ "tux-empty-list-other-link": "All Message weisen",
+ "tux-editor-close-tooltip": "Zoumaachen",
+ "tux-editor-expand-tooltip": "Opklappen",
+ "tux-editor-collapse-tooltip": "Zesummeklappen",
+ "tux-editor-message-tools-show-editor": "Am Wiki-Editeur weisen",
+ "tux-editor-message-tools-history": "Versiounen",
+ "tux-editor-message-tools-delete": "Läschen",
+ "tux-editor-message-tools-translations": "All Iwwersetzungen",
+ "tux-editor-message-tools-linktothis": "Link op dëse Message",
+ "tux-editor-loading": "Lueden...",
+ "tux-editor-loading-failed": "d'Hëllef fir d'Iwwersetzunge konnt net geluede ginn: $1",
+ "translate-search-more-languages-info": "{{PLURAL:$1|Eng Sprooch|$1 Sprooche}} méi",
+ "translate-statsbar-tooltip": "$1% iwwersat, $2% nogekuckt",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% iwwersat, $2% nogekuckt, $3% vereelzt",
+ "translate-search-more-groups-info": "$1 weider {{PLURAL:$1|Grupp|Gruppen}}",
+ "translate-syntax-error": "Iwwersetzung huet Syntax-Feeler",
+ "tux-session-expired": "Dir sidd net méi ageloggt. Loggt Iech wgl. an engem separaten Tab an. Alternativ kënnt Dir och eng Kopie vun den net-gespäicherten Iwwersetzunge maachen, Iech aloggen op dës Säit zréckkommen an Är Iwwersetzungen nees aginn.",
+ "tux-nojs": "Dësen Tool funktionéiert net ouni JavaScript. JavaScript ass ausgeschalt, funktionéiert net oder dëse Browser gëtt net ënnerstëtzt.",
+ "specialpages-group-translation": "Iwwersetzung",
+ "translate-messagebundle-error-key-too-long": "Schlëssel \"$1\" ass ze laang",
+ "translate-messagebundle-error-empty-value": "Schlëssel \"$1\" huet kee Wäert"
+}
diff --git a/Translate/i18n/core/lbe.json b/Translate/i18n/core/lbe.json
new file mode 100644
index 00000000..27f401ac
--- /dev/null
+++ b/Translate/i18n/core/lbe.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Soul Train"
+ ]
+ },
+ "translate-documentation-language": "Баян бавулул документру"
+}
diff --git a/Translate/i18n/core/lez.json b/Translate/i18n/core/lez.json
new file mode 100644
index 00000000..50172ff5
--- /dev/null
+++ b/Translate/i18n/core/lez.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Soul Train"
+ ]
+ },
+ "translate-documentation-language": "Чарчин документация"
+}
diff --git a/Translate/i18n/core/lfn.json b/Translate/i18n/core/lfn.json
new file mode 100644
index 00000000..440822c4
--- /dev/null
+++ b/Translate/i18n/core/lfn.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cgboeree",
+ "Katxis",
+ "Mafcadio",
+ "Robin van der Vliet"
+ ]
+ },
+ "translate-page-language": "Lingua",
+ "translate-stats-users": "Traduores",
+ "translate-sidebar-alltrans": "En otra linguas",
+ "translate-translations-project": "Projeta:",
+ "translate-language": "Lingua",
+ "translate-mgs-column-language": "Lingua",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Traduor}}|Traduores}}: $1",
+ "translate-documentation-language": "Documentos de mesajes",
+ "tux-editor-in-other-languages": "En otra linguas",
+ "tux-message-filter-advanced-button": "Xerca avansada"
+}
diff --git a/Translate/i18n/core/lg.json b/Translate/i18n/core/lg.json
new file mode 100644
index 00000000..d6917400
--- /dev/null
+++ b/Translate/i18n/core/lg.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kizito"
+ ]
+ },
+ "translate": "Vvuunula",
+ "translate-page-settings-legend": "Entegeka",
+ "translate-page-group": "Kiti kya",
+ "translate-page-language": "Mu lulimi",
+ "translate-page-limit": "Koma ku",
+ "translate-page-limit-option": "{{PLURAL:$1|bubaka bwa mulundi|bubaka bwa mirundi}} $1 ku buli lupapula",
+ "translate-submit": "Nona",
+ "translate-page-navigation-legend": "Okulambula enfo eno",
+ "translate-page-showing": "Olaba obubaka okuva ku $1 okutuuka ku $2 ku $3 awamu.",
+ "translate-page-showing-all": "Ekiti kino kirimu {{PLURAL:$1|obubaka bwa mulundi|obubaka bwa mirundi}} $1.",
+ "translate-next": "Dda ku luddirira luno",
+ "translate-prev": "Dda ku lukulembera luno",
+ "translate-page-description-legend": "Ebifa ku kiti kino",
+ "translate-page-edit": "kyusa",
+ "translate-statsf-scale-days": "Nnaku",
+ "translate-statsf-scale-hours": "Ssaawa",
+ "translate-statsf-submit": "Kulagako",
+ "languagestats": "Ebivvuunulidwa mu lulimi",
+ "translate-language": "Lulimi"
+}
diff --git a/Translate/i18n/core/li.json b/Translate/i18n/core/li.json
new file mode 100644
index 00000000..23401b16
--- /dev/null
+++ b/Translate/i18n/core/li.json
@@ -0,0 +1,93 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aelske",
+ "Ooswesthoesbes",
+ "Pahles"
+ ]
+ },
+ "translate": "Vertale",
+ "translate-desc": "[[Special:Translate|Speciaal pagina]] veur 't euverzètte van MediaWiki en mieë",
+ "translate-taskui-export-to-file": "Veur oet in oearsprunkelike indeiling",
+ "translate-taskui-export-as-po": "Veur oet veur offline-euverzètte",
+ "translate-taction-translate": "Zèt euver",
+ "translate-taction-proofread": "Kiek nao",
+ "translate-taction-lstats": "Spraokstattestieke",
+ "translate-taction-mstats": "Berichgroepstattestieke",
+ "translate-taction-export": "Veur oet",
+ "translate-taction-disabled": "Dees hanjeling is oetgezatj op deze wiki.",
+ "translate-page-no-such-language": "De opgegaove spraokcode is óngeljig.",
+ "translate-page-no-such-group": "De opgegaove groep is óngeljig.",
+ "translate-page-disabled": "Euverzèttinge nao dees spraok zint in dees groep oetgezatj. Raeje:\n\n<em>$1</em>",
+ "translate-language-disabled": "Euverzètte nao dees spraok is oetgezatj.",
+ "translate-page-settings-legend": "Insjtellinge",
+ "translate-page-group": "Gróp",
+ "translate-page-language": "Taal",
+ "translate-page-limit": "Maximaal",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|berich|berichte}} de pagina",
+ "translate-submit": "Ophaole",
+ "translate-page-navigation-legend": "Navigatie",
+ "translate-page-showing": "De berichte $1 tot $2 van $3 waere getuind.",
+ "translate-page-showing-all": "$1 {{PLURAL:$1|berich weurt|berichte waere}} getuind.",
+ "translate-page-showing-none": "Gein berichte te tuine.",
+ "translate-next": "Volgende pazjena",
+ "translate-prev": "Veurige pazjena",
+ "translate-page-description-legend": "Informasie euver de groep",
+ "translate-page-description-hasoptional-open": "Tuin keusvrie berichte.",
+ "translate-page-edit": "bewirk",
+ "translate-optional": "(optioneel)",
+ "translate-ignored": "(euvergeslage)",
+ "translate-edit-title": "Bewirk \"$1\"",
+ "translate-edit-definition": "Berichbepaoling",
+ "translate-edit-contribute": "draag bie",
+ "translate-edit-warnings": "Waorsjoewinge euver ónjuuste euverzèttinge",
+ "translate-edit-tmmatch-source": "Brónteks veur euverzètting: $1",
+ "translate-edit-tmmatch": "$1% euvereinkóms",
+ "translate-edit-nopermission": "Doe mós euverzètrechte höbbe veur berichte de kónne euverzètte.",
+ "translate-edit-askpermission": "Krieg toustumming",
+ "exporttranslations": "Veur euverzèttinge oet",
+ "translate-export-form-format": "Indeiling",
+ "translate-rcfilters-translations": "Euverzèttinge",
+ "translate-rcfilters-translations-only-label": "Euverzèttinge",
+ "translate-rcfilters-translations-only-desc": "Verangeringe aan euvergezatje pagina's.",
+ "translate-rcfilters-translations-filter-label": "Gein euverzèttinge",
+ "translate-rcfilters-translations-filter-desc": "Alle verangeringe die gein euverzèttinge zeen.",
+ "translate-rcfilters-translations-site-label": "Systeemtekste",
+ "translate-rcfilters-translations-site-desc": "Aanpassinge aan systeemtekste in de MediaWiki-naamruumde.",
+ "translate-rc-translation-filter": "Filter euverzèttinge:",
+ "translate-rc-translation-filter-no": "Dooch nieks",
+ "translate-rc-translation-filter-only": "Tuin allein euverzèttinge",
+ "translate-rc-translation-filter-filter": "Filter euverzèttinge d'roet",
+ "translate-rc-translation-filter-site": "Allein verangeringe aan plaatselike systeemtekste",
+ "translationstats": "Euverzèttingsstattestieke",
+ "translate-stats-edits": "Bewirkinge",
+ "translate-stats-users": "Euverzètters",
+ "translate-stats-registrations": "Aanmeljinge",
+ "translate-stats-reviews": "Prooflaezinge",
+ "translate-stats-reviewers": "Prooflaezers",
+ "translate-statsf-intro": "Doe kins via dit formulier einveljige stattestieke samestèlle.\nAlle waerd höbbe 'ne limiet aan de baove- en de óngerkantj.",
+ "translate-statsf-options": "Grafiekopsjes",
+ "translate-statsf-width": "Pixelbrèdje:",
+ "translate-statsf-height": "Pixelhuuegdje:",
+ "translate-statsf-days": "Tiedsdoer kwa daag:",
+ "translate-statsf-start": "Begindatum:",
+ "translate-statsf-scale": "Granulariteit:",
+ "translate-statsf-scale-months": "Maondj",
+ "translate-statsf-scale-weeks": "Waeke",
+ "translate-statsf-scale-days": "Daag",
+ "translate-statsf-scale-hours": "Oer",
+ "translate-statsf-count": "Einheid:",
+ "translate-statsf-count-edits": "Aantaal bewirkinge",
+ "translate-statsf-count-users": "Aktief euverzètters",
+ "translate-statsf-count-registrations": "Nuuj gebroekers",
+ "translate-statsf-count-reviews": "Proofgelaeze euverzèttinge",
+ "translate-statsf-count-reviewers": "Prooflaezers",
+ "translate-statsf-language": "Lies van spraokcodes gesjèdj door komma's:",
+ "translate-statsf-group": "Lies van groepscodes gesjèdj door komma's:",
+ "translate-statsf-submit": "Veurvertuining",
+ "translate-tag-page-desc": "Euverzètting van de wikipagina [[$2|$1]] vanoet $3 ($4).",
+ "translate-sidebar-alltrans": "In anger spraoke",
+ "translations": "Alle euverzèttinge",
+ "translate-documentation-language": "Besjeidbesjrieving",
+ "tux-editor-message-tools-delete": "Sjaf eweg"
+}
diff --git a/Translate/i18n/core/lij.json b/Translate/i18n/core/lij.json
new file mode 100644
index 00000000..65b6cfe1
--- /dev/null
+++ b/Translate/i18n/core/lij.json
@@ -0,0 +1,64 @@
+{
+ "@metadata": {
+ "authors": [
+ "Giromin Cangiaxo",
+ "N. Longo"
+ ]
+ },
+ "translate": "Tradue",
+ "translate-extensionname": "Tradue",
+ "translate-desc": "[[Special:Translate|Paggina speciale]] pe tradue MediaWiki e non solo",
+ "translate-fuzzybot-desc": "Sta chì a l'è 'n'utensa speciale de scistema doeuviâ da l'[https://www.mediawiki.org/wiki/Extension:Translate estenscion de Traduçion] de MediaWiki pi-a manutençion de traduçioin.\nSt'utensa chie a fa parte do software de MediaWiki e a no l'aparten a nisciun utente.",
+ "translate-taskui-export-to-file": "Esporta into formato nativo",
+ "translate-taskui-export-as-po": "Esporta pe-a tradussion off-line",
+ "translate-taction-translate": "Traduxi",
+ "translate-taction-proofread": "Revixon-a",
+ "translate-taction-lstats": "Statisteghe da lengoa",
+ "translate-taction-mstats": "Statisteghe do groppo di messaggi",
+ "translate-taction-export": "Esporta",
+ "translate-taction-disabled": "Questa assion a l'è dizabilitâ insce questo wiki.",
+ "translate-page-no-such-language": "A lengua specificâ a no l'è vallida.",
+ "translate-page-no-such-group": "O groppo specificou o no l'è vallido.",
+ "translate-page-disabled": "E tradussioin in questa lengua pe questo groppo son stæte dizabilitæ. Raxon:\n\n<em>$1</em>",
+ "translate-language-disabled": "E tradussioin inte sta lengua son dezabilitæ.",
+ "translate-page-settings-legend": "Impostassioin",
+ "translate-page-group": "Groppo",
+ "translate-page-language": "Lengua",
+ "translate-page-limit": "Limmite",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|messaggio|messaggi}} pe paggina",
+ "translate-submit": "Otegni",
+ "translate-page-navigation-legend": "Navegaçión",
+ "translate-page-showing": "Vixoalizassion di messaggi da $1 a $2 de $3.",
+ "translate-page-showing-all": "Vixoalizassion $1 {{PLURAL:$1|messaggio|messaggi}}.",
+ "translate-page-showing-none": "Nisciun messaggio da mostrâ.",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "Paggina succesciva",
+ "translate-prev": "Paggina precedente",
+ "translate-page-description-legend": "Informassioin in sciô groppo",
+ "translate-page-edit": "modìfica",
+ "translate-optional": "(opçionâ)",
+ "translate-ignored": "(ignorou)",
+ "translate-edit-title": "Modiffica \"$1\"",
+ "translate-edit-definition": "Definission do messaggio",
+ "translate-edit-contribute": "contribuisci",
+ "translate-edit-no-information": "<em>Sto messaggio chie o no g'ha de documentassion.\nSe ti sæ dovve ò comme sto messaggio o l'è doeuviou, ti poeu agiutâ i atri tradutoî azonzendo a documentassion a sto messaggio.</em>",
+ "translate-edit-information": "Informassioin in sciô messaggio ($1)",
+ "translate-edit-warnings": "Avvixi in scê tradussioin incomplete",
+ "translate-edit-tmmatch-source": "Testo d'origgine pe-a tradussion: $1",
+ "translate-edit-tmmatch": "$1&nbsp;% de corispondensa",
+ "translate-edit-nopermission": "Pe tradue di messaggi te ghe voeu i driti de tradussion.",
+ "translate-edit-askpermission": "Otegni aotorizzassion",
+ "exporttranslations": "Esporta tradussioin",
+ "translate-export-form-format": "Formato",
+ "translate-export-invalid-format": "Speciffica un formato vallido.",
+ "translate-export-not-supported": "L'esportassion de tradussioin a no l'è amissa.",
+ "translate-export-format-notsupported": "O formato d'esportassion specificou o no l'è amisso da-o groppo messaggi.",
+ "translate-checks-parameters": "{{PLURAL:$2|O seguente parammetro o no l'è stæto doeuviou|I seguenti parammetri no son stæti doeuviæ}}: <strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|O seguente parammetro o l'è sconosciuo|I seguenti parammetri son sconosciui}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "Gh'è 'n nummero despa de {{PLURAL:$2|parentexi}}: <strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|O seguente ingancio o l'è problemattico|I seguenti $2 inganci son problemattichi}}: <strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "Gh'amanca {{PLURAL:$2|o seguente ingancio|i $2 seguenti inganci}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "La definission a l'adoeuvia <nowiki>{{PLURAL:}}</nowiki> ma a tradussion no.",
+ "languagestats": "Statisteghe da lengoa",
+ "translate-documentation-language": "Docomentaçión do mesàggio"
+}
diff --git a/Translate/i18n/core/lki.json b/Translate/i18n/core/lki.json
new file mode 100644
index 00000000..7f6d69af
--- /dev/null
+++ b/Translate/i18n/core/lki.json
@@ -0,0 +1,146 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hosseinblue",
+ "Lakzon"
+ ]
+ },
+ "translate": "چاوواشەکِردن زوون",
+ "translate-extensionname": "چاوواشەکِردن زوون",
+ "translate-desc": "[[Special:Translate|صفحهٔ ویژه‌ای]] برای ترجمهٔ مدیاویکی و فراتر از آن",
+ "translate-taskui-export-to-file": "برون‌بری در قالب بومی",
+ "translate-taskui-export-as-po": "برون‌بری برای ترجمهٔ برون‌خط",
+ "translate-taction-translate": "چاوواشەکِردن زوون",
+ "translate-taction-proofread": "دووارە دئین",
+ "translate-taction-lstats": "آمارەل زوون",
+ "translate-taction-mstats": "آمار گروه‌های پیغام",
+ "translate-taction-export": "در بِردن",
+ "translate-taction-disabled": "این عمل در این ویکی غیرفعال شده‌است.",
+ "translate-page-no-such-language": "زبان مورد نظر نامجاز است.",
+ "translate-page-no-such-group": "گروه مورد نظر نامجاز است.",
+ "translate-page-disabled": "ترجمه این زبان در این گروه غیر فعال است.\nدلیل:\n\n<em>$1</em>",
+ "translate-language-disabled": "ترجمه به این زبان غیرفعال شده‌است.",
+ "translate-page-settings-legend": "تنظیمۀل",
+ "translate-page-group": "داکووکە(گروو)",
+ "translate-page-language": "زوون",
+ "translate-page-limit": "تعداد",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|پیغام|پیغام ها}} در هر صفحه",
+ "translate-submit": "بیاور",
+ "translate-page-navigation-legend": "گشتن",
+ "translate-next": "وەڵگە تِر(هەنی)",
+ "translate-prev": "وەڵگە دؤماێن",
+ "translate-page-description-legend": "اطلاعات در مورد گروه",
+ "translate-page-description-hasoptional": "این گروه پیغام‌ها شامل پیغام‌های اختیاری است.\nپیغام‌های اختیاری باید تنها زمانی ترجمه شوند که زبان شما شرایط ویژه‌ای نظیر استفاده نکردن از فاصله یا نویسه‌گردانی اسامی خاص داشته باشد. $1",
+ "translate-page-description-hasoptional-open": "نمایش پیغام‌های اختیاری.",
+ "translate-page-edit": "دەسکاری",
+ "translate-optional": "(دڵ بخواهی)",
+ "translate-ignored": "(نادیده گرفته شده)",
+ "translate-edit-title": "دەسکاری«$1»",
+ "translate-edit-definition": "تعریف پیغام",
+ "translate-edit-contribute": "بەشاکرەل(هام بێرەل)",
+ "translate-edit-no-information": "<em>این پیغام دارای توضیحات نیست.\n''اگر می‌دانید که این پیغام چگونه یا در کجا استفاده می‌شود، می‌توانید با اضافه کردن توضیحات به دیگر ترجمه‌کنندگان کمک کنید.</em>",
+ "translate-edit-tmmatch-source": "متن منبع ترجمه: $1",
+ "translate-pref-editassistlang": "زوونةل ياري گةر:",
+ "prefs-translate": "گزینه‌های ترجمه",
+ "translate-pref-editassistlang-help": "فهرست کدهای زبان جدا شده با کاما.\nترجمه‌های پیغام‌های این زبان‌ها در زمانی که شما ترجمه می‌کنید نمایش داده می‌شوند.\nفهرست پیش‌فرض زبان‌ها بستگی به این دارد که زبان شما چیست.",
+ "translate-pref-editassistlang-bad": "کد زبان نامعتبر در فهرست:\n<nowiki>$1</nowiki>.",
+ "right-translate": "ویرایش با استفاده از رابط ترجمه",
+ "right-translate-manage": "مدیریت گروه‌های پیغام",
+ "action-translate-manage": "مدیریت گروه‌های پیغام",
+ "right-translate-import": "درون‌ریزی ترجمه‌های برون‌خط",
+ "action-translate-import": "درون‌ریزی ترجمه‌های برون‌خط",
+ "right-translate-messagereview": "دووارە دئین چاوواشەکردنەل",
+ "translate-rc-translation-filter-only": "تنها ترجمه‌ها را نمایش بده",
+ "translate-rc-translation-filter-filter": "ترجمه‌ها را نمایش نده",
+ "translate-rc-translation-filter-site": "تنها تغییرات پیغام‌های وبگاه",
+ "translationstats": "آمارەل زوون",
+ "translate-stats-edits": "دەسکاری",
+ "translate-stats-users": "چاوواشآکِرةل زوون",
+ "translate-stats-registrations": "نؤم نؤیسائن",
+ "translate-stats-reviews": "بازبینی‌ها",
+ "translate-stats-reviewers": "بازبینی‌کنندگان",
+ "translate-statsf-scale-months": "مانگةل",
+ "translate-statsf-scale-weeks": "هفتةل",
+ "translate-statsf-scale-days": "رووژةل",
+ "translate-statsf-scale-hours": "ساعتةل",
+ "translate-sidebar-alltrans": "وۀ زوونۀلئ تر",
+ "translations": "کؤل(گِشت) زوونەل چاوواشآبی",
+ "translations-summary": "نام یک پیغام را در زیر وارد کنید تا تمام ترجمه‌های موجود را ببینید.",
+ "translate-translations-fieldset-title": "پیغام",
+ "translate-translations-messagename": ":نام",
+ "translate-translations-project": "پروژه:",
+ "languagestats": "آمارەل زوون",
+ "translate-langstats-expand": "کلنگاکردن/گسترش",
+ "translate-langstats-collapse": "آشاردِن",
+ "translate-langstats-expandall": "گسترش همه",
+ "translate-langstats-collapseall": "نهفتن همه",
+ "translate-language-code": "کد زوون",
+ "translate-language-code-field-name": "کد زوون:",
+ "translate-language": "زوون",
+ "translate-total": "پیغام",
+ "translate-untranslated": "ترجمه‌نؤی",
+ "translate-percentage-complete": "پیشرفت",
+ "translate-percentage-fuzzy": "تاریخ‌ چێةسێ/گذشته",
+ "translate-languagestats-overall": "همه گروه‌های پیغام با هم",
+ "translate-ls-submit": "نمایش آمار",
+ "translate-ls-column-group": "پيغوم گرويی",
+ "translate-mgs-fieldset": "تنظیمات نمایش",
+ "translate-mgs-submit": "نمایش آمار",
+ "translate-mgs-column-language": "زوون",
+ "translate-mgs-totals": "همهٔ زبان‌ها با هم",
+ "supportedlanguages": "زوونەل پشتیووانی کِریا",
+ "supportedlanguages-summary": "این صفحه فهرستی از تمام زبان‌های پشتیبانی‌شده توسط {{SITENAME}} را به همراه نام مترجمان در حال کار در آن زبان نمایش میدهد.\nهرچه یک مترجم با ویرایش‌های بیشتری مشارکت کرده باشد، نامش بزرگتر دیده می‌شود.\nرنگ زیرخط نشان‌دهندهٔ تازگی فعالیت مترجم در اینجا است.",
+ "supportedlanguages-recenttranslations": "ترجمه‌های اخیر/ایسة",
+ "translate-manage-import-done": "وارد کردن تکمیل شد!",
+ "translate-documentation-language": "مستندات پیام",
+ "translate-searchprofile": "زوون چاوواشاکردن/تةرجؤمة",
+ "translate-searchprofile-tooltip": "جستجو از تمامی ترجمه‌ها",
+ "tux-languageselector": "چاوواشەکِردن زوون وە",
+ "tux-tab-all": "کؤل(گشت)",
+ "tux-tab-untranslated": "ترجمه‌نؤی",
+ "tux-tab-outdated": "تاریخ‌ چێةسێ/گذشته",
+ "tux-tab-translated": "ترجمه‌بیة",
+ "tux-tab-unproofread": "بازبینی‌نؤیة",
+ "tux-edit": "دەسکاری",
+ "tux-status-optional": "دڵ بخواهی",
+ "tux-status-fuzzy": "تاریخ‌ چێةسێ/گذشته",
+ "tux-status-proofread": "بازبینی‌شده",
+ "tux-status-translated": "ترجمه‌بیة",
+ "tux-status-saving": "در حال ذخیره‌سازی...",
+ "tux-status-unsaved": "ذخیره‌نشده",
+ "tux-editor-save-button-label": "چاووآشآبیەل بِیل(ذخیره کە)",
+ "tux-editor-skip-button-label": "پرش به بعدی",
+ "tux-editor-cancel-button-label": "ئآهووسانن/لغو",
+ "tux-editor-confirm-button-label": "تأیید ترجمه",
+ "tux-editor-in-other-languages": "وۀ زوونۀلئ تر",
+ "tux-editor-need-more-help": "راهنمایی بیشتر نیاز دارید؟",
+ "tux-notices-hide": "ئآشاردن-پنهان کردن",
+ "tux-editor-save-failed": "ذخیره‌سازی ترجمه نافرجام ماند:$1",
+ "tux-editor-n-uses": "{{PLURAL:$1|زمان|زمان ها}} بار استفاده شده$1",
+ "tux-editor-message-desc-more": "مشاهدهٔ بیشتر",
+ "tux-editor-message-desc-less": "مشاهدهٔ کمتر",
+ "tux-editor-clear-translated": "نهفتن ترجمه‌شده‌ها",
+ "tux-editor-proofreading-mode": "دووارە دئین",
+ "tux-editor-translate-mode": "لیست",
+ "tux-editor-proofreading-hide-own-translations": "عدم نمایش ترجمه شما",
+ "tux-editor-proofreading-show-own-translations": "نمایش ترجمه شما",
+ "tux-proofread-action-tooltip": "نشانه‌گذاری به عنوان ترجمه‌شده",
+ "tux-proofread-edit-label": "دەسکاری",
+ "tux-editor-page-mode": ":وةڵگە(پەڕە)",
+ "tux-editor-outdated-notice": "این ترجمه ممکن است نیازمند به‌روزرسانی باشد.",
+ "tux-editor-outdated-notice-diff-link": "نمایش تفاوت‌ها",
+ "tux-editor-doc-editor-placeholder": "مستندات پیام",
+ "tux-editor-doc-editor-cancel": "ئآهووسانن/لغو",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|پیام}} بیشتر",
+ "tux-empty-list-translated-action": "چاوواشەکِردن زوون",
+ "tux-empty-list-other-action": "دووارە دئین چاوواشەکردنەل",
+ "tux-empty-list-other-link": "نمایش تمام پیغام‌ها",
+ "tux-editor-close-tooltip": "ئآنیائن-بستِن",
+ "tux-editor-expand-tooltip": "کلنگاکردن/گسترش",
+ "tux-editor-collapse-tooltip": "آشاردِن",
+ "tux-editor-message-tools-history": "تاریخچه",
+ "tux-editor-message-tools-delete": "حۀذف کردن/پاک کردن",
+ "tux-editor-message-tools-translations": "کؤل(گِشت) زوونەل چاوواشآبی",
+ "tux-editor-loading": "...(loading)بارنیائن",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|زبان}} بیشتر"
+}
diff --git a/Translate/i18n/core/lld.json b/Translate/i18n/core/lld.json
new file mode 100644
index 00000000..5f1e5bff
--- /dev/null
+++ b/Translate/i18n/core/lld.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Asenoner"
+ ]
+ },
+ "translate-documentation-language": "Documentazion di messajes"
+}
diff --git a/Translate/i18n/core/lmo.json b/Translate/i18n/core/lmo.json
new file mode 100644
index 00000000..03e4c47f
--- /dev/null
+++ b/Translate/i18n/core/lmo.json
@@ -0,0 +1,41 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dakrismeno",
+ "Eafoð",
+ "Insübrich",
+ "Salvemm el lombard"
+ ]
+ },
+ "translate-page-settings-legend": "Impostazzion",
+ "translate-page-group": "Grup",
+ "translate-page-limit": "Limit",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|messagg|messagg}} per pagina",
+ "translate-submit": "Otén",
+ "translate-prev": "Pagina indree",
+ "translate-pref-editassistlang": "Assistent di lengue:",
+ "prefs-translate": "Opzion de traduzzion",
+ "translate-rc-translation-filter": "Filtra i traduzzion",
+ "translate-rc-translation-filter-no": "Fà nagot",
+ "translate-rc-translation-filter-only": "Mostra doma i traduzzion",
+ "translate-rc-translation-filter-filter": "Fa minga vedè i traduzzion",
+ "translate-rc-translation-filter-site": "Doma i cambiament a i messagg del sit",
+ "translationstats": "Statistiche de traduzzion",
+ "translate-stats-edits": "Modifeghe",
+ "translate-stats-users": "Tradutor",
+ "translate-statsf-submit": "Veduda antecipada",
+ "translate-tag-page-desc": "Traduzzion de la pagina wiki [[$2|$1]] de $3($4)",
+ "translate-sidebar-alltrans": "In alter lengov",
+ "translations": "Tute i traduzzion",
+ "translate-untranslated": "Minga tradot",
+ "translate-languagestats-overall": "Tucc i grup di messagg insema",
+ "supportedlanguages": "Lengue ative",
+ "translate-activelanguages-invalid-code": "El codes de la lengua \"$1\" l'è desconossud opur el gh'ha minga l'abilitazzion per i traduzzion.",
+ "translate-smg-strong-sync-help": "Aiut",
+ "translate-documentation-language": "Documentazzion del messagg",
+ "translate-msggroupselector-projects": "Grup de messagg",
+ "tux-select-target-language": "Lengua in la qual fà la traduzzion",
+ "tux-tab-untranslated": "Minga tradot",
+ "tux-editor-placeholder-documentation": "Sgionta la documentazzion del messagg",
+ "tux-editor-placeholder-language": "La toa traduzzion l'è $1"
+}
diff --git a/Translate/i18n/core/ln.json b/Translate/i18n/core/ln.json
new file mode 100644
index 00000000..708fbb70
--- /dev/null
+++ b/Translate/i18n/core/ln.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Eruedin",
+ "Moyogo"
+ ]
+ },
+ "translate-page-settings-legend": "Palamɛ́tɛlɛ",
+ "translate-page-language": "Lokótá",
+ "translate-page-navigation-legend": "Botamboli",
+ "translate-next": "Lonkásá na nsima",
+ "translate-page-edit": "kobɔngisa"
+}
diff --git a/Translate/i18n/core/lo.json b/Translate/i18n/core/lo.json
new file mode 100644
index 00000000..2685a1b5
--- /dev/null
+++ b/Translate/i18n/core/lo.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "BaRaN6161 TURK",
+ "Passawuth"
+ ]
+ },
+ "translate": "ແປ",
+ "translate-desc": "[[Special:Translate|ໜ້າພິເສດ]]ສຳຫຼັບແປມີເດຍວິກິແລະອື່ນ າ",
+ "translate-taction-translate": "ແປ"
+}
diff --git a/Translate/i18n/core/lrc.json b/Translate/i18n/core/lrc.json
new file mode 100644
index 00000000..f9bc084d
--- /dev/null
+++ b/Translate/i18n/core/lrc.json
@@ -0,0 +1,70 @@
+{
+ "@metadata": {
+ "authors": [
+ "Beyronvan",
+ "Mogoeilor"
+ ]
+ },
+ "translate": "والرن",
+ "translate-taction-translate": "والرن",
+ "translate-taction-proofread": "دواره دیئن",
+ "translate-taction-lstats": "آماريا زون",
+ "translate-taction-export": "وه در ديئن",
+ "translate-page-settings-legend": "تنظيمات",
+ "translate-page-group": "گرو",
+ "translate-page-language": "زون",
+ "translate-page-limit": "كران دار بيئن",
+ "translate-page-navigation-legend": "ناوگشتن",
+ "translate-page-showing-none": "هيش پيغومی سی ديئن نی",
+ "translate-next": "بلگه نيايی",
+ "translate-prev": "بلگه دمايی",
+ "translate-page-edit": "ڤیرایئشت",
+ "translate-edit-title": "ڤیرایئشت $1",
+ "translate-edit-contribute": "هومياری كردن",
+ "translate-edit-askpermission": "قول بیئتو",
+ "translate-pref-editassistlang": "زونيا ياريگر",
+ "translate-rc-translation-filter-no": "هيچی نكيد",
+ "translate-stats-edits": "ڤیرایئشتیا",
+ "translate-stats-users": "والرياريا",
+ "translate-stats-registrations": "ثوت نام",
+ "translate-statsf-scale-months": "مايا",
+ "translate-statsf-scale-weeks": "هفته يا",
+ "translate-statsf-scale-days": "روزيا",
+ "translate-statsf-scale-hours": "ساعتيا",
+ "translate-statsf-count": "انازه",
+ "translate-statsf-count-edits": "شومارە ڤیرایئشتیا:",
+ "translate-statsf-count-registrations": "كارور تازه",
+ "translate-statsf-submit": "پيش سيل",
+ "translate-sidebar-alltrans": "د زونيا هنی",
+ "translations": "كل لرسنييا",
+ "translate-translations-fieldset-title": "پيغوم",
+ "translate-translations-messagename": "نوم:",
+ "translate-translations-project": "پروجه:",
+ "translate-translations-history-short": "اچ",
+ "languagestats": "آماريا زون",
+ "languagestats-recenttranslations": "لرسنيا تازه",
+ "translate-langstats-expand": "وا كردن",
+ "translate-langstats-collapse": "جم كردن",
+ "translate-langstats-expandall": "همه نه وا كو",
+ "translate-langstats-collapseall": "همه نه كؤچك كو",
+ "translate-language-code": "رازینه زون",
+ "translate-language-code-field-name": "رازینه زون:",
+ "translate-language": "زون",
+ "translate-total": "پيغوم",
+ "translate-untranslated": "والرسه نبيه",
+ "translate-percentage-complete": "كامل كردن",
+ "translate-percentage-fuzzy": "د تاريخ در",
+ "translate-ls-column-group": "پيغوم گرويی",
+ "translate-mgs-column-language": "زون",
+ "translate-mgs-totals": "همه زونا وایک",
+ "supportedlanguages": "زونا حمایت بیه",
+ "supportedlanguages-recenttranslations": "لرسنيا تازه",
+ "translate-gs-code": "كد",
+ "translate-gs-speakers": "گپ زننه",
+ "translate-gs-score": "امتياز",
+ "translate-gs-total": "همه",
+ "translate-documentation-language": "سٱنٱدسازی سی پاٛغوم",
+ "tux-edit": "ڤیرایئشت",
+ "tux-proofread-edit-label": "ڤیرایئشت",
+ "tux-editor-message-tools-history": "ڤیرگار"
+}
diff --git a/Translate/i18n/core/lt.json b/Translate/i18n/core/lt.json
new file mode 100644
index 00000000..88960663
--- /dev/null
+++ b/Translate/i18n/core/lt.json
@@ -0,0 +1,312 @@
+{
+ "@metadata": {
+ "authors": [
+ "Eitvys200",
+ "Garas",
+ "Homo",
+ "Hugo.arg",
+ "Mantak111",
+ "Manvydasz",
+ "Perkunas",
+ "Tomasdd",
+ "Vpovilaitis",
+ "Zygimantus"
+ ]
+ },
+ "translate": "Vertimas",
+ "translate-extensionname": "Versti",
+ "translate-desc": "[[Special:Translate|Specialus puslapis]] MediaWiki vertimui ir už jos ribų",
+ "translate-taskui-export-to-file": "Eksportuoti vietinėje formate",
+ "translate-taskui-export-as-po": "Eksportuoti atsijungusiam vertimui",
+ "translate-taction-translate": "Išversti",
+ "translate-taction-proofread": "Apžvalga",
+ "translate-taction-lstats": "Kalbos statistikos",
+ "translate-taction-mstats": "Pranešimų grupės statistika",
+ "translate-taction-export": "Eksportuoti",
+ "translate-taction-disabled": "Šis veiksmas yra išjungtas šiame wiki.",
+ "translate-page-no-such-language": "Buvo nurodytas klaidingas kalbos kodas",
+ "translate-page-no-such-group": "Nurodyta nekorektiška grupė.",
+ "translate-page-disabled": "Vertimai į šią kalbą šioje grupėje buvo išjungti.\nPriežastis:\n\n<em>$1</em>",
+ "translate-language-disabled": "Vertimai į šią kalbą yra išjungtas.",
+ "translate-page-settings-legend": "Nustatymai",
+ "translate-page-group": "Grupė",
+ "translate-page-language": "Kalba",
+ "translate-page-limit": "Limitas",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|pranešimas|pranešimai|pranešimų}} puslapyje",
+ "translate-submit": "Išrinkti",
+ "translate-page-navigation-legend": "Navigacija",
+ "translate-page-showing": "Rodomi pranešimai nuo $1 iki $2 iš $3.",
+ "translate-page-showing-all": "{{PLURAL:$1|Rodomas $1 pranešimas|Rodomi $1 pranešimai|Rodoma $1 pranešimų}}.",
+ "translate-page-showing-none": "Nėra pranešimų rodymui.",
+ "translate-next": "Kitas puslapis",
+ "translate-prev": "Ankstesnis puslapis",
+ "translate-page-description-legend": "Informacija apie grupę",
+ "translate-page-description-hasoptional": "Šios pranešimų grupės yra pasirenkami pranešimai.\nPasirenkami pranešimai turėtų būti tik išversti, kai jūsų kalba turi specialių reikalavimų.\nkaip nenaudojant vietas arba tranliteruodami tikrinius vardus. $1",
+ "translate-page-description-hasoptional-open": "Rodyti pasirinktinius pranešimus.",
+ "translate-page-edit": "redaguoti",
+ "translate-optional": "(nebūtinas)",
+ "translate-ignored": "(ignoruojamas)",
+ "translate-edit-title": "Redaguoti \"$1\"",
+ "translate-edit-definition": "Pranešimo aprašymas",
+ "translate-edit-contribute": "papildyti",
+ "translate-edit-no-information": "<em>Šis pranešimas neturi dokumentacijos.\nJei žinote kur ar kaip šis pranešimas naudojamas, galite padėti kitiems vertėjams pridėdami dokumentacijos į šį pranešimą.</em>",
+ "translate-edit-information": "Informacija apie pranešimą ($1)",
+ "translate-edit-warnings": "Įspėjimai apie nepilnus vertimus",
+ "translate-edit-tmmatch-source": "Vertimo šaltinio tekstas: $1",
+ "translate-edit-tmmatch": "$1% atitinka",
+ "translate-edit-nopermission": "Jums reikia vertimo teisių, kad galėtumėte versti pranešimus.",
+ "translate-edit-askpermission": "Gauti leidimą",
+ "exporttranslations": "Eksportuoti vertimus",
+ "translate-export-form-format": "Formatas",
+ "translate-export-invalid-format": "Prašome nurodyti galiojantį formatą.",
+ "translate-export-not-supported": "Vertimų eksportavimas nepalaikomas.",
+ "translate-export-format-notsupported": "Nurodytas eksportavimo formatas yra nepalaikomas pranešimų grupės.",
+ "translate-checks-parameters": "{{PLURAL:$2|Šis $2 parametras nepanaudotas|Šie $2 parametrai nepanaudoti|Šie $2 parametrų nepanaudoti}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Šis parametras yra nežinomas|Šie parametrai yra nežinomi}}:\n<strong>$1</strong>",
+ "translate-checks-links": "{{PLURAL:$2|Ši nuoroda yra problematiška|$2 nuorodos yra problematiškos}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Šios nuorodos|šių $2 nuorodų}} trūksta:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Aprašymas naudoja <nowiki>{{PLURAL:}}</nowiki>, bet vertimas ne.",
+ "translate-pref-editassistlang": "Asistentinės kalbos:",
+ "prefs-translate": "Vertimo nustatymai",
+ "right-translate": "Redaguoti naudojant vertėjo sąsają",
+ "right-translate-manage": "Tvarkyti pranešimų grupes",
+ "action-translate-manage": "tvarkyti pranešimų grupes",
+ "right-translate-import": "Importuoti neprisijungusius vertimus",
+ "action-translate-import": "importuoti atsijungusius vertimus",
+ "right-translate-messagereview": "Peržiūrėti vertimus",
+ "action-translate-messagereview": "apžvelgti vertimus",
+ "right-translate-groupreview": "Keisti pranešimų grupių darbo eigos būseną",
+ "translate-rcfilters-translations": "Vertimai",
+ "translate-rcfilters-translations-only-label": "Vertimai",
+ "translate-rcfilters-translations-only-desc": "Keitimai išverstuose puslapiuose.",
+ "translate-rcfilters-translations-filter-label": "Ne vertimai",
+ "translate-rcfilters-translations-filter-desc": "Visi keitimai, kurie nėra vertimai.",
+ "translate-rc-translation-filter": "Perkošti vertimus:",
+ "translate-rc-translation-filter-no": "Nieko nedaryti",
+ "translate-rc-translation-filter-only": "Rodyti tik vertimus",
+ "translate-rc-translation-filter-filter": "Perkošti vertimus",
+ "translate-rc-translation-filter-site": "Tik keisti į svetainę pranešimus",
+ "translationstats": "Vertimo statistikos",
+ "translate-stats-edits": "Redagavimai",
+ "translate-stats-users": "Vertėjai",
+ "translate-stats-registrations": "Registracijos",
+ "translate-stats-reviews": "Apžvalgos",
+ "translate-stats-reviewers": "Vertintojai",
+ "translate-statsf-options": "Grafiko pasirinktys",
+ "translate-statsf-width": "Plotis pikseliais:",
+ "translate-statsf-height": "Aukštis pikseliais:",
+ "translate-statsf-days": "Laikotarpis dienomis:",
+ "translate-statsf-start": "Pradžios data:",
+ "translate-statsf-scale": "Detalumas:",
+ "translate-statsf-scale-months": "Mėnesiai",
+ "translate-statsf-scale-weeks": "Savaitės",
+ "translate-statsf-scale-days": "Dienos",
+ "translate-statsf-scale-hours": "Valandos",
+ "translate-statsf-count": "Priemonė:",
+ "translate-statsf-count-edits": "Keitimų skaičius",
+ "translate-statsf-count-users": "Aktyvus vertėjai",
+ "translate-statsf-count-registrations": "Nauji vartotojai",
+ "translate-statsf-count-reviews": "Įvertintų vertimų",
+ "translate-statsf-count-reviewers": "Vertintojai",
+ "translate-statsf-language": "Atskirti kableliais kalbų kodų sarašas:",
+ "translate-statsf-group": "Atskirti kableliais grupių kodų sąrašas:",
+ "translate-statsf-submit": "Peržiūra",
+ "translate-tag-page-desc": "Viki puslapio [[$2|$1]] vertimas iš $3 ($4).",
+ "translate-sidebar-alltrans": "Kitomis kalbomis",
+ "translations": "Visi vertimai",
+ "translations-summary": "Įveskite pranešimo pavadinimą žemiau, norėdami parodyti visus esamus vertimus.",
+ "translate-translations-no-message": "\"$1\" nėra išverčiama žinutė",
+ "translate-translations-none": "Nėra vertimų \"$1",
+ "translate-translations-count": "{{PLURAL:$1|Rastas vienas vertimas|Rasti $1 vertimai|Rastų $1 vertimų}}.",
+ "translate-translations-fieldset-title": "Pranešimas",
+ "translate-translations-messagename": "Pavadinimas:",
+ "translate-translations-project": "Projektas:",
+ "translate-translations-history-short": "val.",
+ "languagestats": "Kalbos statistikos",
+ "languagestats-summary": "Šis puslapis rodo vertimo statistikas visiems pranešimo grupėms vertimui.",
+ "messagegroupstats-summary": "Šis puslapis rodo pranešimų grupės statistiką.",
+ "languagestats-stats-for": "Vertimo statistikos $1 ($2).",
+ "languagestats-recenttranslations": "nauji vertimai",
+ "translate-langstats-incomplete": "Dalis statistikos šiame puslapyje nebaigta. Prašome įkelti iš naujo, kad gautumėte daugiau statistikos.",
+ "translate-langstats-expand": "išskleisti",
+ "translate-langstats-collapse": "suskleisti",
+ "translate-langstats-expandall": "Išskleisti visus",
+ "translate-langstats-collapseall": "Suskleisti visus",
+ "translate-language-code": "Kalbos kodas",
+ "translate-language-code-field-name": "Kalbos kodas:",
+ "translate-suppress-complete": "Slėpti visiškai išverstus pranešimų grupes",
+ "translate-ls-noempty": "Slėpti visiškai neišverstus pranešimus grupes",
+ "translate-language": "Kalba",
+ "translate-total": "Pranešimai",
+ "translate-untranslated": "Neišversti",
+ "translate-percentage-complete": "Baigta",
+ "translate-percentage-fuzzy": "Pasenę",
+ "translate-percentage-proofread": "Apžvelgta",
+ "translate-languagestats-overall": "Visos pranešimų grupės kartu",
+ "translate-ls-submit": "Rodyti statistiką",
+ "translate-ls-column-group": "Pranešimo grupė",
+ "translate-mgs-pagename": "Pranešimų grupės statistika",
+ "translate-mgs-fieldset": "Rodyti nuostatas",
+ "translate-mgs-group": "Pranešimo grupė:",
+ "translate-mgs-nocomplete": "Nerodyti kalbų kurios turi pabaigta vertimą",
+ "translate-mgs-noempty": "Nerodyti kalbų kurios neturi jokių vertimų",
+ "translate-mgs-submit": "Rodyti statistiką",
+ "translate-mgs-column-language": "Kalba",
+ "translate-mgs-totals": "Visos $1 {{PLURAL:$1|kalbos}} kartu",
+ "translate-mgs-invalid-group": "Nurodytai grupei $1 neegzistuoja.",
+ "translate-mgs-nothing": "Prašomos statistikos nėra.",
+ "supportedlanguages": "Aktyvios kalbos",
+ "supportedlanguages-colorlegend": "Legenda spalvai: Paskutinis vertimas prieš $1 dienas.",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Vertėjas|Vertėja}}|Vertėjai}}: $1",
+ "supportedlanguages-recenttranslations": "Nauji vertimai",
+ "supportedlanguages-count": "Iš viso $1 {{PLURAL:$1|kalba|kalbos|kalbų}}.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|keitimas|keitimai|keitimų}} - paskutinis keitimas yra prieš $3 {{PLURAL:$3|dieną|dienas|dienų}}",
+ "translate-jssti-add": "Pridėti į sąrašą",
+ "managemessagegroups": "Pranešimų grupės valdymas",
+ "translate-smg-notallowed": "Jums neleidžiama atlikti šio veiksmo.",
+ "translate-smg-nochanges": "Čia nėra keitimų apdorojimui",
+ "translate-smg-submit": "Pateikti pakeitimus apdorojimui",
+ "translate-smg-left": "Pranešimo turinys wiki",
+ "translate-smg-right": "Priimamus pakeitimai",
+ "translate-smg-group-message-message-other-langs": "Kitos kalbos:",
+ "translate-manage-import-diff": "Pranešimas $1 | Veiksmai: $2",
+ "translate-manage-import-new": "Naujas pranešimas $1",
+ "translate-manage-import-deleted": "Ištrintas pranešimas $1",
+ "translate-manage-action-import": "Importuoti",
+ "translate-manage-action-conflict": "Importuoti ir naujinti",
+ "translate-manage-action-ignore": "Ignoruoti",
+ "translate-manage-action-fuzzy": "Importuoti ir naujinti vertimus",
+ "translate-manage-import-summary": "Importuojama nauja versite iš išorinio šaltinio",
+ "translate-manage-import-ignore": "Praleidžiama žinutę $1.",
+ "translate-manage-conflict-summary": "Importuojama nauja versite iš išorinio šaltinio.\nPrašome patikrinti.",
+ "translate-manage-submit": "Vykdyti",
+ "translate-manage-import-ok": "Importuota: $1",
+ "translate-manage-import-done": "Importavimas užbaigtas!",
+ "importtranslations": "Importuoti vertimus",
+ "translate-import-from-local": "Vietinio failo įkėlimas:",
+ "translate-import-load": "Įkrauti failą",
+ "translate-import-err-dl-failed": "Nepavyko gauti failo:\n$1",
+ "translate-import-err-ul-failed": "Failo įkėlimas nepavyko",
+ "translate-import-err-invalid-title": "Pateiktas failo pavadinimas <nowiki>$1</nowiki> buvo negalimas.",
+ "translate-import-err-stale-group": "Pranešimų grupė, kuriai priklauso šis failas, neegzistuoja.",
+ "translate-js-support-unsaved-warning": "Jūs turite nepaskelbtų vertimų.",
+ "translate-gs-pos": "Praneš.",
+ "translate-gs-code": "Kodas",
+ "translate-gs-continent": "Turinys",
+ "translate-gs-speakers": "Garsiakalbiai",
+ "translate-gs-score": "Rezultatas",
+ "translate-gs-multiple": "Kelios",
+ "translate-gs-count": "Skaičiuoti",
+ "translate-gs-total": "Iš viso",
+ "translate-gs-avgscore": "Vidurkis",
+ "translate-documentation-language": "Pranešimo dokumentacija",
+ "translate-searchprofile": "Vertimai",
+ "translate-searchprofile-tooltip": "Ieškoti iš visų vertimų",
+ "translate-searchprofile-note": "Daugiau paieškos galimybių prieinama su [$1 vertimų paieška].",
+ "translate-search-languagefilter": "Perkošti pagal kalbą:",
+ "translate-search-nofilter": "Nėra filtravimo",
+ "log-name-translationreview": "Vertimo peržiūrėjimo žurnalas",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|peržiūrėjo}} vertimą $3",
+ "group-translate-sandboxed": "Nepatvirtinti vertėjai",
+ "group-translate-sandboxed-member": "{{GENDER:$1|nepatvirtintas vertėjas}}",
+ "right-translate-sandboxmanage": "Valdyti smėlio dėžės naudotojus",
+ "action-translate-sandboxmanage": "valdyti smėlio dėžės naudotojus",
+ "right-translate-sandboxaction": "Vykdyti smėlio dėžės naudotojams leidžiamus veiksmus",
+ "action-translate-sandboxaction": "Vykdyti smėlio dėžės naudotojams leidžiamus veiksmus",
+ "translate-workflow-state-": "(nenustatyta)",
+ "translate-workflowstatus": "Būsena: $1",
+ "translate-workflow-set-doing": "Nustatoma...",
+ "translate-stats-workflow": "Būsena",
+ "translate-dynagroup-recent-label": "Nauji vertimai",
+ "translate-dynagroup-additions-label": "Naujausi papildymai",
+ "translate-msggroupselector-projects": "Pranešimo grupė",
+ "translate-msggroupselector-search-placeholder": "Ieškoti grupes",
+ "translate-msggroupselector-search-all": "Visi",
+ "translate-msggroupselector-search-recent": "Neseni",
+ "tux-languageselector": "Išversti į",
+ "tux-tab-all": "Visi",
+ "tux-tab-untranslated": "Neišversti",
+ "tux-tab-outdated": "Pasenę",
+ "tux-tab-translated": "Išversti",
+ "tux-tab-unproofread": "Neapžvelgti",
+ "tux-edit": "Redaguoti",
+ "tux-status-optional": "Neprivaloma",
+ "tux-status-fuzzy": "Pasenę",
+ "tux-status-proofread": "Apžvelgta",
+ "tux-status-translated": "Išversta",
+ "tux-status-saving": "Publikuojama....",
+ "tux-status-unsaved": "Nepublikuota",
+ "tux-save-unknown-error": "Įvyko nežinoma klaida.",
+ "tux-editor-editsummary-placeholder": "Neprivaloma santrauka",
+ "tux-editor-paste-original-button-label": "Įklijuoti kodo tekstą",
+ "tux-editor-discard-changes-button-label": "Atsisakyti pakeitimų",
+ "tux-editor-save-button-label": "Paskelbti vertimą",
+ "tux-editor-skip-button-label": "Pereiti prie kito",
+ "tux-editor-cancel-button-label": "Atšaukti",
+ "tux-editor-confirm-button-label": "Patvirtinti vertimą",
+ "tux-editor-proofread-button-label": "Pažymėti kaip apžvelgta",
+ "tux-editor-edit-desc": "Redaguoti dokumentaciją",
+ "tux-editor-add-desc": "Pridėti dokumentaciją",
+ "tux-editor-suggestions-title": "Pasiūlymai",
+ "tux-editor-in-other-languages": "Kitomis kalbomis",
+ "tux-editor-need-more-help": "Reikia daugiau pagalbos?",
+ "tux-editor-ask-help": "Prašykite daugiau informacijos",
+ "tux-editor-tm-match": "$1% atitinka",
+ "tux-notices-more": "{{PLURAL:$1|$1 daugiau}}",
+ "tux-notices-hide": "slėpti",
+ "tux-editor-save-failed": "Vertimo paskelbti nepavyko: $1",
+ "tux-editor-n-uses": "panaudota $1 {{PLURAL:$1|kartą|kartus}}",
+ "tux-editor-message-desc-more": "Rodyti daugiau",
+ "tux-editor-message-desc-less": "Rodyti mažiau",
+ "tux-editor-clear-translated": "Slėpti išverstus",
+ "tux-editor-proofreading-mode": "Apžvalga",
+ "tux-editor-translate-mode": "Sąrašas",
+ "tux-editor-proofreading-hide-own-translations": "Slėpti savo vertimus",
+ "tux-editor-proofreading-show-own-translations": "Rodyti savo vertimus",
+ "tux-proofread-action-tooltip": "Pažymėti kaip apžvelgta",
+ "tux-proofread-edit-label": "Redaguoti",
+ "tux-editor-page-mode": "Puslapis",
+ "tux-editor-outdated-notice": "Šį vertimą gali tekti atnaujinti.",
+ "tux-editor-outdated-notice-diff-link": "Rodyti skirtumus",
+ "tux-editor-doc-editor-placeholder": "Pranešimo dokumentacija",
+ "tux-editor-doc-editor-save": "Paskelbti dokumentaciją",
+ "tux-editor-doc-editor-cancel": "Atšaukti",
+ "tux-messagetable-more-messages": "dar $1 {{PLURAL:$1|pranešimas|pranešimai}}",
+ "tux-messagetable-loading-messages": "Įkraunami {{PLURAL:$1|pranešimas|pranešimai}}...",
+ "tux-message-filter-placeholder": "Filtrų sąrašas",
+ "tux-message-filter-result": "Rastas $1 {{PLURAL:$1|rezultatas|rezultatai}} užklausai „$2“",
+ "tux-message-filter-advanced-button": "Išplėstinė paieška",
+ "tux-message-filter-optional-messages-label": "Pasirenkami pranešimai",
+ "tux-proofread-translated-by-self": "Išvertėte jūs",
+ "tux-empty-list-all": "Ši pranešimo grupė yra tuščia",
+ "tux-empty-list-all-guide": "Pasirinkti kitą pranešimų grupę vertimui",
+ "tux-empty-list-translated": "Nėra išverstų pranešimų",
+ "tux-empty-list-translated-guide": "Jūs galite padėti versti",
+ "tux-empty-list-translated-action": "Išversti",
+ "tux-empty-no-messages-to-display": "Nėra ko pranešimų rodyti.",
+ "tux-empty-there-are-optional": "Yra neprivalomų pranešimų, kurie nerodomi sąraše",
+ "tux-empty-show-optional-messages": "Rodyti pasirinktinius pranešimus",
+ "tux-empty-no-outdated-messages": "Nėra pasenusių pranešimų",
+ "tux-empty-nothing-to-proofread": "Nėra, ko apžvelgti.",
+ "tux-empty-you-can-help-providing": "Jūs galite padėti teikdamas naujus vertimus",
+ "tux-empty-nothing-new-to-proofread": "Nieko naujo apžvelgti",
+ "tux-empty-you-can-review-already-proofread": "Jūs galite peržiūrėti jau peržiūrimus kitus vertimus.",
+ "tux-empty-list-other": "Nėra, ko versti.",
+ "tux-empty-list-other-guide": "Galite peržiūrėti esamus vertimus",
+ "tux-empty-list-other-action": "Apžvelgti vertimus",
+ "tux-empty-list-other-link": "Rodyti visus pranešimus",
+ "tux-editor-close-tooltip": "Uždaryti",
+ "tux-editor-expand-tooltip": "Išplėsti",
+ "tux-editor-collapse-tooltip": "Suskleisti",
+ "tux-editor-message-tools-show-editor": "Rodyti viki redaktoriuje",
+ "tux-editor-message-tools-history": "Istorija",
+ "tux-editor-message-tools-delete": "Ištrinti",
+ "tux-editor-message-tools-translations": "Visi vertimai",
+ "tux-editor-loading": "Įkraunama...",
+ "translate-search-more-languages-info": "dar $1 {{PLURAL:$1|kalba|kalbos}}",
+ "translate-statsbar-tooltip": "$1% išversti, $2% apžvelgti",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% išversti, $2% apžvelgti, $3% pasenę",
+ "translate-search-more-groups-info": "dar $1 {{PLURAL:$1|grupė|grupės}}",
+ "tux-nojs": "Šiam puslapiui reikia JavaScript.",
+ "specialpages-group-translation": "Vertimas"
+}
diff --git a/Translate/i18n/core/ltg.json b/Translate/i18n/core/ltg.json
new file mode 100644
index 00000000..5cb091be
--- /dev/null
+++ b/Translate/i18n/core/ltg.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dark Eagle"
+ ]
+ },
+ "translate": "Puorviersšona",
+ "translate-page-group": "Grupa",
+ "translate-page-language": "Volūda",
+ "translate-page-limit": "Aprūbežuojums",
+ "translate-submit": "Paruodeit",
+ "translate-page-navigation-legend": "Navigaceja",
+ "translate-next": "Cyta puslopa",
+ "translate-page-description-legend": "Informaceja ap grupu",
+ "translate-page-edit": "pataiseit",
+ "translate-edit-title": "Pataiseit \"$1\"",
+ "translate-stats-users": "Puorvārsuoji",
+ "translate-statsf-scale-months": "Mieneši",
+ "translate-statsf-scale-weeks": "Nedeļis",
+ "translate-statsf-scale-days": "Dīnys",
+ "translate-statsf-scale-hours": "Stuņdis",
+ "translate-translations-fieldset-title": "Viestejums",
+ "translate-translations-project": "Projekts:",
+ "translate-translations-history-short": "v",
+ "languagestats": "Volūdys statistika",
+ "translate-language": "Volūda",
+ "supportedlanguages-translators": "{{PLURAL:$2|Puorvārsuojs|Puorvārsuoji}}: $1",
+ "translate-gs-continent": "Koņtinents"
+}
diff --git a/Translate/i18n/core/lus.json b/Translate/i18n/core/lus.json
new file mode 100644
index 00000000..dc7cfa98
--- /dev/null
+++ b/Translate/i18n/core/lus.json
@@ -0,0 +1,161 @@
+{
+ "@metadata": {
+ "authors": [
+ "RMizo"
+ ]
+ },
+ "translate": "Lehlinna",
+ "translate-desc": "MediaWiki leh a bâk lehlinna [[Special:Translate|Phek vohbik]]",
+ "translate-taskui-export-to-file": "Pianken ruangama thawnchhuahna",
+ "translate-taskui-export-as-po": "Rinpawna lehlin nan thawnchhuak rawh",
+ "translate-taction-translate": "Lehlinna",
+ "translate-taction-proofread": "Endikna",
+ "translate-taction-lstats": "Ţawng lepsena",
+ "translate-taction-mstats": "Thuthawn hläwm lepsena",
+ "translate-taction-export": "Thawnchhuahna",
+ "translate-page-disabled": "He hläwm hi hemi ţawnga lehlin khap a ni tawh.\nA chhan:\n<em>$1</em>",
+ "translate-page-settings-legend": "Inremdàn",
+ "translate-page-group": "Pawl",
+ "translate-page-language": "Ţawng",
+ "translate-page-limit": "Tiamchin",
+ "translate-page-limit-option": "phêk khatah thuthawn $1 {{PLURAL:$1||}} zël",
+ "translate-submit": "Pholang rawh le",
+ "translate-page-navigation-legend": "Fanzauna",
+ "translate-page-showing": "A vai $3 zinga thuthawn $1 aţanga $2 thleng pholan a ni e.",
+ "translate-page-showing-all": "Thuthawn $1 {{PLURAL:$1||}} pholan a ni.",
+ "translate-page-showing-none": "Thuthawn pholan tùr a awm tawh lo.",
+ "translate-next": "Phêk dawt",
+ "translate-prev": "Phêk hmasa",
+ "translate-page-description-legend": "Hemi pawl chungchang",
+ "translate-page-description-hasoptional": "He pawl hian thuthawn duh-thlan (lehlin kher ngai lo) a nei a.\nHeng thuthawn duh-thlante hi i ţawngin mamawh bîk, entirnan hming roman hawrawpa dah, karawl hman thiang lo, tih angte a neih chauhvin lehlin tùr a ni ang. $1",
+ "translate-page-description-hasoptional-open": "Thuthawn duh-thlan pholanna.",
+ "translate-page-edit": "siamṭhatna",
+ "translate-optional": "(duh-thlan)",
+ "translate-ignored": "(ngaihthah)",
+ "translate-edit-title": "$1 siamţha rawh",
+ "translate-edit-definition": "Thuthawn hrilhfiahna",
+ "translate-edit-contribute": "kutthawhna",
+ "translate-edit-no-information": "''He thuthawn hian sawifiahna mumal a la nei lo.''\n''He thuthawn hmanna hmun leh hmanphung hi i hriat chuan sawifiah la, letlingtute nasa takin i pui ang.''",
+ "translate-edit-information": "Thuthawn chungchang ($1)",
+ "translate-edit-warnings": "Lehlin famkim lo vaukhanna",
+ "translate-edit-tmmatch-source": "Lehlinna thu hnar: $1",
+ "translate-edit-tmmatch": "$1% inmil",
+ "translate-edit-nopermission": "Thuthawn letling tùrin phalna i neih a ngai.",
+ "translate-edit-askpermission": "Phalna dilna",
+ "translate-checks-parameters": "{{PLURAL:$2|He thil hman ngei ngei ngai|Heng thil hman ngei ngei ngaite}} hi hman a la ni lo:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|He i thil ziak|Heng i thil ziakte}} hi hriat a ni lo (a dikhlel tihna):\n<strong>$1</strong>",
+ "translate-checks-balance": "Kualkhungna hman khingbai nei lo a la awm{{PLURAL:$2||}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "A hnuaia zawmna{{PLURAL:$2||te}} khu a dikhlel:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "A hnuaia zawmna{{PLURAL:$2||te}} khu i la hmaih:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "A thu hnarin <nowiki>{{PLURAL:}}</nowiki> a hmang a, lehlinnain a hmang lo.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> kha lehkha {{PLURAL:$1|pakhat|$1}} pêk a ni a, mahsé lehkha {{PLURAL:$2|pakhat|$2}} chauh tih theih a ni (0= leh 1= lehkhate tiam lohvin).",
+ "translate-checks-pagename": "Hrilhfiahna aţang hminghmun thlâk a ni",
+ "translate-checks-format": "He lehlinna hian a thu-hnar a zui lo emaw a thu-chheh a dik lo emaw a nih hmel: $1",
+ "translate-checks-escape": "A hnuaia tlanchhiatna khu tih palh a nih hmel: <strong>$1</strong>",
+ "translate-checks-parametersnotequal": "Hmanraw zât {{PLURAL:$1|$1}}; {{PLURAL:$2|$2}} tùr.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> hi a dik lo.",
+ "translate-checks-fudforum-syntax": "He hna-hmachhawpah hian <nowiki>$2</nowki> aiah <nowiki>$1</nowiki> hmang zawk rawh",
+ "translate-pref-editassistlang": "Puitu ţawngte:",
+ "prefs-translate": "Lehlin duhdàn",
+ "translate-pref-editassistlang-bad": "Tlar zingah ţawng thurûk dik lo a awm:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Lehlinna hmelhmang hmangin siamţha rawh",
+ "right-translate-import": "Rinpawna lehlin châwkluhna",
+ "translate-rc-translation-filter-no": "Engmah ti suh",
+ "translate-rc-translation-filter-only": "Lehlinna chauh pholanna",
+ "translate-rc-translation-filter-filter": "Lehlin thlitfimna",
+ "translate-stats-edits": "Siamṭhat",
+ "translate-stats-users": "Letlingtute",
+ "translate-stats-registrations": "Inziahluh",
+ "translate-stats-reviews": "Ennawnna",
+ "translate-stats-reviewers": "Ennawntute",
+ "translate-statsf-scale-months": "Thla",
+ "translate-statsf-scale-weeks": "Chawlhkar",
+ "translate-statsf-scale-days": "Ni",
+ "translate-statsf-scale-hours": "Darkar",
+ "translate-statsf-count": "Tehna:",
+ "translate-statsf-count-edits": "Siamţhat zât",
+ "translate-statsf-count-users": "Letlingtu thawkrim",
+ "translate-statsf-count-registrations": "Hmangtu thar",
+ "translate-statsf-count-reviews": "Lehlin ennawnna",
+ "translate-statsf-count-reviewers": "Ennawntute",
+ "translate-statsf-submit": "Enchhinna",
+ "translate-tag-page-desc": "Wiki phêk [[$2|$1]] lehlinna.",
+ "translate-sidebar-alltrans": "Ţawng dangin",
+ "translations": "Lehlin zawng zawng",
+ "translations-summary": "Lehlinna awm zawng zawng tihlan nan a hnuaiah khuan thuthawn hming ziaklût rawh.",
+ "translate-translations-no-message": "\"$1\" hi thuthawn lehlin theih a ni lo",
+ "translate-translations-none": "\"$1\" lehlinna a la awm lo",
+ "translate-translations-count": "Lehlinna {{PLURAL:$1|1|$1}} hmuh a ni.",
+ "translate-translations-fieldset-title": "Thuthawn",
+ "translate-translations-messagename": "Hming:",
+ "translate-translations-project": "Hna-hmachhawp:",
+ "translate-translations-history-short": "ch",
+ "languagestats": "Ţawng lepsena",
+ "languagestats-stats-for": "$1 ţawnga lehlin lepsena ($2)",
+ "languagestats-recenttranslations": "lehlin tharte",
+ "translate-langstats-incomplete": "Lepsena ţhenkhat hi a kim lo. A dang dawn belh nan a phêk lâwt ţha rawh.",
+ "translate-langstats-expand": "pharhna",
+ "translate-langstats-collapse": "thlehna",
+ "translate-langstats-expandall": "pharh vek rawh",
+ "translate-langstats-collapseall": "thlep vek rawh",
+ "translate-language-code": "Ţawng thurûk",
+ "translate-language-code-field-name": "Ţawng thurûk:",
+ "translate-suppress-complete": "Thuthawn hläwm lehlin zawh tawh nuaibo vek rawh",
+ "translate-ls-noempty": "Thuthawn hläwm lehlin loh nuaibo vek rawh",
+ "translate-language": "Ṭawng",
+ "translate-total": "Thuthawn",
+ "translate-untranslated": "Lehlin loh",
+ "translate-percentage-complete": "Zawh chin",
+ "translate-percentage-fuzzy": "Ţhing",
+ "translate-languagestats-overall": "Thuthawn pawl zawng zawng a huhova lâkin",
+ "translate-ls-submit": "Lepsena tihlanna",
+ "translate-ls-column-group": "Thuthawn hläwm",
+ "translate-mgs-pagename": "Thuthawn hläwm lepsena",
+ "translate-mgs-fieldset": "Intàrphung duhthlanna",
+ "translate-mgs-group": "Thuthawn hläwm:",
+ "translate-mgs-nocomplete": "Lehlin kim tawhna ţawng tilang suh",
+ "translate-mgs-noempty": "Lehlin la nei lo ţawng tilang suh",
+ "translate-mgs-submit": "Lepsena tihlanna",
+ "translate-mgs-column-language": "Ṭawng",
+ "translate-mgs-totals": "Ţawng zawng zawng lâkkhâwmin",
+ "translate-mgs-invalid-group": "I hläwm sawi $1 hi a awm lo.",
+ "translate-mgs-nothing": "Lepsena pholan tùr a awm lo.",
+ "supportedlanguages": "Ţawng hman theihte",
+ "supportedlanguages-colorlegend": "Rawng chhinchhiahna: Lehlinna hnuhnung ber ni $1 kal taah",
+ "supportedlanguages-translators": "{{PLURAL:$2|Letlingtu|Letlingtute}}: $1",
+ "supportedlanguages-recenttranslations": "lehlin thar",
+ "supportedlanguages-count": "A vaiin {{PLURAL:$1|ţawng|ţawng}} $1.",
+ "supportedlanguages-activity": "$1: {{PLURAL:$2|siamţhatna|siamţhatna}} $2 - siamţhat hnuhnung ber ni $3{{PLURAL:$3||}} kal tâah",
+ "translate-jssti-add": "Tlara telhna",
+ "managemessagegroups": "Thuthawn pawl enkawlna",
+ "translate-manage-import-diff": "Thuthawn $1 | Thiltih: $2",
+ "translate-manage-import-new": "Thuthawn thar $1",
+ "translate-manage-import-deleted": "Thuthawn nuaibo $1",
+ "translate-manage-action-import": "Châwkluhna",
+ "translate-manage-action-conflict": "Châwkluhna leh phé anga chhinchhiahna",
+ "translate-manage-action-ignore": "Ngaihthahna",
+ "translate-manage-action-fuzzy": "Châwkluh leh lehlin chiang lo (phé)",
+ "translate-manage-nochanges-other": "He ţawnga tihdanglam thar a awm lo.\nHläwm chanchin inziahna phêka lêt tùrin a hnuaia zawmnaah khuan kal rawh.",
+ "translate-manage-import-ignore": "Thuthawn $1 kal kân a ni.",
+ "translate-manage-submit": "Déng raw pip!",
+ "translate-manage-import-done": "A zo ta vek mai!",
+ "translate-js-support-unsaved-warning": "Lehlinna la dahṭhat loh i nei.",
+ "translate-gs-pos": "Dinhmn.",
+ "translate-gs-code": "Thurûk",
+ "translate-gs-continent": "Khawmualpui",
+ "translate-gs-speakers": "Hmangtu",
+ "translate-gs-score": "Bùk",
+ "translate-gs-multiple": "1 aia tam",
+ "translate-gs-count": "Zât",
+ "translate-gs-total": "A vaiin",
+ "translate-gs-avgscore": "Bùk chawhrual",
+ "translate-documentation-language": "Thuthawn chhinchhiahna",
+ "translate-searchprofile": "Lehlinna",
+ "translate-searchprofile-tooltip": "Lehlinna zawng zawnga zawnna",
+ "translate-search-languagefilter": "Ţawng azira thlitfimna:",
+ "translate-search-nofilter": "Thlitfimna awm lo",
+ "log-name-translationreview": "Lehlin ennawn chhinchhiahna",
+ "translate-workflowstatus": "Dinhmun: $1",
+ "translate-workflow-set-doing": "Tinung mék...",
+ "translate-dynagroup-recent-label": "Lehlin tharte"
+}
diff --git a/Translate/i18n/core/luz.json b/Translate/i18n/core/luz.json
new file mode 100644
index 00000000..74a67d48
--- /dev/null
+++ b/Translate/i18n/core/luz.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "علی ساکی لرستانی"
+ ]
+ },
+ "translate-documentation-language": "سأنأدل ڤ مدرأکل پیوٙم"
+}
diff --git a/Translate/i18n/core/lv.json b/Translate/i18n/core/lv.json
new file mode 100644
index 00000000..f9cf4db3
--- /dev/null
+++ b/Translate/i18n/core/lv.json
@@ -0,0 +1,237 @@
+{
+ "@metadata": {
+ "authors": [
+ "GreenZeb",
+ "Kikos",
+ "Marozols",
+ "Papuass",
+ "Yyy"
+ ]
+ },
+ "translate": "Tulkošana",
+ "translate-extensionname": "Tulkošana",
+ "translate-desc": "[[Special:Translate|Īpašā lapa]] MediaWiki un citu projektu tulkošanai",
+ "translate-taction-translate": "Tulkot",
+ "translate-taction-proofread": "Pārskatīt",
+ "translate-taction-lstats": "Valodas statistika",
+ "translate-taction-mstats": "Ziņojumu grupas statistika",
+ "translate-taction-export": "Eksportēt",
+ "translate-taction-disabled": "Šī darbība ir atspējota šajā wiki.",
+ "translate-page-no-such-language": "Norādītā valoda bija nederīga.",
+ "translate-page-no-such-group": "Norādītā grupa bija nederīga.",
+ "translate-language-disabled": "Tulkošana uz šo valodu ir atspējota.",
+ "translate-page-settings-legend": "Iestatījumi",
+ "translate-page-group": "Grupa",
+ "translate-page-language": "Valoda",
+ "translate-page-limit": "Ierobežojums",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|ziņojumi|ziņojums|ziņojumi}} lapā",
+ "translate-submit": "Atlasīt",
+ "translate-page-navigation-legend": "Navigācija",
+ "translate-page-showing": "Rāda ziņojumus no $1 līdz $2 no $3.",
+ "translate-page-showing-all": "Rāda $1 {{PLURAL:$1|ziņojumus|ziņojumu|ziņojumus}}.",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "Nākamā lapa",
+ "translate-prev": "Iepriekšējā lapa",
+ "translate-page-description-legend": "Informācija par grupu",
+ "translate-page-edit": "labot",
+ "translate-optional": "(neobligāts)",
+ "translate-ignored": "(ignorēts)",
+ "translate-edit-title": "Labot \"$1\"",
+ "translate-edit-information": "Informācija par ziņojumu ($1)",
+ "translate-edit-warnings": "Brīdinājumi par nepilnīgiem tulkojumiem",
+ "translate-edit-tmmatch-source": "Tulkojuma izejas teksts: $1",
+ "translate-edit-tmmatch": "$1% atbilstība",
+ "translate-edit-nopermission": "Jums ir nepieciešamas tulkošanas tiesības, lai tulkotu ziņojumus.",
+ "translate-edit-askpermission": "Saņemt atļauju",
+ "exporttranslations": "Eksportēt tulkojumus",
+ "translate-export-form-format": "Formāts",
+ "translate-export-invalid-format": "Lūdzu norādi derīgu formātu.",
+ "translate-pref-editassistlang": "Palīgvalodas:",
+ "prefs-translate": "Tulkošanas uzstādījumi",
+ "translate-pref-editassistlang-help": "Saraksts ar valodu kodiem, kas atdalīti ar komatiem.\nNorādītajās valodās pieejamie tulkojumi būs redzami tulkošanas lapā.\nNoklusētā saraksta vērtība ir atkarīga no tavas valodas.",
+ "right-translate-manage": "Ziņojumu grupu pārvaldība",
+ "action-translate-manage": "ziņojumu grupu pārvaldība",
+ "right-translate-messagereview": "Pārskatīt tulkojumus",
+ "action-translate-messagereview": "pārskatīt tulkojumus",
+ "translate-rcfilters-translations": "Tulkojumi",
+ "translate-rcfilters-translations-only-label": "Tulkojumi",
+ "translate-rcfilters-translations-only-desc": "Izmaiņas tulkotās lapās",
+ "translate-rcfilters-translations-filter-label": "Ne tulkojumi",
+ "translate-rcfilters-translations-filter-desc": "Visas izmaiņas, kas nav tulkojumi",
+ "translate-rcfilters-translations-site-label": "Sistēmas paziņojumi",
+ "translate-rcfilters-translations-site-desc": "Sistēmas paziņojumu MediaWiki vārdtelpā pielāgotās vērtības.",
+ "translate-rc-translation-filter": "Filtrēt tulkojumus:",
+ "translate-rc-translation-filter-no": "Nedarīt neko",
+ "translate-rc-translation-filter-only": "Rādīt tikai tulkojumus",
+ "translate-rc-translation-filter-filter": "Atfiltrēt tulkojumus",
+ "translate-rc-translation-filter-site": "Tikai izmaiņas sistēmas paziņojumos",
+ "translationstats": "Tulkošanas statistika",
+ "translate-stats-edits": "Labojumi",
+ "translate-stats-users": "Tulkotāji",
+ "translate-stats-registrations": "Reģistrācijas",
+ "translate-stats-reviewers": "Pārskatītāji",
+ "translate-statsf-width": "Platums pikseļos:",
+ "translate-statsf-height": "Augstums pikseļos:",
+ "translate-statsf-days": "Laika periods dienās:",
+ "translate-statsf-start": "Sākuma datums:",
+ "translate-statsf-scale": "Granularitāte:",
+ "translate-statsf-scale-months": "Mēneši",
+ "translate-statsf-scale-weeks": "Nedēļas",
+ "translate-statsf-scale-days": "Dienas",
+ "translate-statsf-scale-hours": "Stundas",
+ "translate-statsf-count": "Metrika:",
+ "translate-statsf-count-edits": "Izmaiņu skaits",
+ "translate-statsf-count-users": "Aktīvie tulkotāji",
+ "translate-statsf-count-registrations": "Jauni lietotāji",
+ "translate-statsf-count-reviewers": "Pārskatītāji",
+ "translate-sidebar-alltrans": "Citās valodās",
+ "translations": "Visi tulkojumi",
+ "translate-translations-fieldset-title": "Ziņojums",
+ "translate-translations-messagename": "Nosaukums:",
+ "translate-translations-project": "Projekts:",
+ "translate-translations-history-short": "v",
+ "languagestats": "Valodas statistika",
+ "languagestats-summary": "Šī lapa parāda tulkojumu statistiku visām ziņojumu grupām konkrētai valodai.",
+ "languagestats-stats-for": "Tulkojuma statistika $1 ($2).",
+ "languagestats-recenttranslations": "pēdējie tulkojumi",
+ "translate-langstats-expand": "izvērst",
+ "translate-langstats-collapse": "sakļaut",
+ "translate-langstats-expandall": "izvērst visus",
+ "translate-langstats-collapseall": "sakļaut visus",
+ "translate-language-code": "Valodas kods",
+ "translate-language-code-field-name": "Valodas kods:",
+ "translate-suppress-complete": "Nerādīt pilnībā iztulkotās ierakstu grupas",
+ "translate-ls-noempty": "Nerādīt vispār netulkotās ierakstu grupas",
+ "translate-language": "Valoda",
+ "translate-total": "Ieraksti",
+ "translate-untranslated": "Neiztulkoti",
+ "translate-percentage-complete": "Pabeigtība",
+ "translate-percentage-fuzzy": "Novecojis",
+ "translate-percentage-proofread": "Pārskatīts",
+ "translate-languagestats-overall": "Visas ziņojumu grupas kopā",
+ "translate-ls-submit": "Rādīt statistiku",
+ "translate-ls-column-group": "Ziņojumu grupa",
+ "translate-mgs-pagename": "Ziņojumu grupas statistika",
+ "translate-mgs-group": "Ziņojumu grupa:",
+ "translate-mgs-submit": "Rādīt statistiku",
+ "translate-mgs-column-language": "Valoda",
+ "translate-mgs-totals": "Visas $1 {{PLURAL:$1|valodas|valoda|valodas}} kopā",
+ "supportedlanguages": "Atbalstītās valodas",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-sqlite-error": "SQLite nav atbaltīts",
+ "supportedlanguages-translators": "{{PLURAL:$2|Tulkotāji|{{GENDER:$3|Tulkotājs|Tulkotāja}}|Tulkotāji}}: $1",
+ "supportedlanguages-recenttranslations": "pēdējie tulkojumi",
+ "translate-jssti-add": "Pievienot sarakstam",
+ "translate-smg-right": "Ienākošās izmaiņas",
+ "translate-smg-rename-select": "Izvēlēties",
+ "translate-smg-rename-cancel": "Atcelt",
+ "translate-smg-rename-new": "Pievienot kā jaunu...",
+ "translate-smg-strong-sync-help": "Palīdzība",
+ "translate-manage-import-diff": "Ziņojums $1 | Darbības: $2",
+ "translate-manage-import-new": "Jauns ziņojums $1",
+ "translate-manage-action-import": "Importēt",
+ "translate-manage-action-ignore": "Ignorēt",
+ "translate-manage-action-rename": "Pārsaukt",
+ "translate-manage-action-ignore-change": "Ignorēt tulkojuma izmaiņu",
+ "translate-manage-submit": "Izpildīt",
+ "translate-manage-import-done": "Imports pabeigts!",
+ "importtranslations": "Importēt tulkojumus",
+ "translate-import-load": "Ielādēt failu",
+ "translate-import-err-ul-failed": "Faila augšupielāde neizdevās.",
+ "translate-js-support-unsaved-warning": "Tev ir nesaglabāti tulkojumi.",
+ "translate-gs-pos": "Vieta",
+ "translate-gs-code": "Kods",
+ "translate-gs-continent": "Kontinents",
+ "translate-gs-speakers": "Runātāji",
+ "translate-gs-count": "Skaits",
+ "translate-gs-total": "Kopā",
+ "translate-documentation-language": "Paziņojuma dokumentācija",
+ "translate-searchprofile": "Tulkojumi",
+ "translate-search-languagefilter": "Filtrēt pēc valodas:",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|pārskatīja}} $3 tulkojumu",
+ "group-translate-sandboxed": "Neapstiprinātie tulkotāji",
+ "group-translate-sandboxed-member": "{{GENDER:$1|neapstiprināts tulkotājs|neapstiprināta tulkotāja}}",
+ "translate-workflow-state-": "(nav uzstādīts)",
+ "translate-workflowstatus": "Stāvoklis: $1",
+ "translate-stats-workflow": "Statuss",
+ "translate-dynagroup-recent-label": "Neseni tulkojumi",
+ "translate-dynagroup-recent-desc": "Šī ziņojumu grupa parāda visus nesenos tulkojumus šajā valodā.\nTā ir visnoderīgākā pārskatīšanas uzdevumiem.",
+ "translate-dynagroup-additions-label": "Nesen pievienots",
+ "translate-msggroupselector-projects": "Ziņojumu grupa",
+ "translate-msggroupselector-search-placeholder": "Meklēt grupas",
+ "translate-msggroupselector-search-all": "Visas",
+ "translate-msggroupselector-search-recent": "Nesenās",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|apakšgrupas|apakšgrupa|apakšgrupas}}",
+ "tux-languageselector": "Tulkot uz",
+ "tux-select-target-language": "Tulkojuma mērķa valoda",
+ "tux-tab-all": "Visas",
+ "tux-tab-untranslated": "Neiztulkotās",
+ "tux-tab-outdated": "Novecojušās",
+ "tux-tab-translated": "Iztulkotās",
+ "tux-tab-unproofread": "Nepārlasītās",
+ "tux-edit": "Labot",
+ "tux-status-optional": "Papildu",
+ "tux-status-fuzzy": "Novecojušās",
+ "tux-status-proofread": "Pārlasītās",
+ "tux-status-translated": "Iztulkots",
+ "tux-status-saving": "Saglabā...",
+ "tux-status-unsaved": "Nesaglabāts",
+ "tux-save-unknown-error": "Nezināma kļūda.",
+ "tux-editor-editsummary-placeholder": "Neobligāts kopsavilkums",
+ "tux-editor-paste-original-button-label": "Iekopēt izejas tekstu",
+ "tux-editor-discard-changes-button-label": "Atmest izmaiņas",
+ "tux-editor-save-button-label": "Saglabāt tulkojumu",
+ "tux-editor-skip-button-label": "Pāriet uz nākamo",
+ "tux-editor-cancel-button-label": "Atcelt",
+ "tux-editor-confirm-button-label": "Apstiprināt tulkojumu",
+ "tux-editor-proofread-button-label": "Atzīmēt kā pārskatītu",
+ "tux-editor-shortcut-info": "Spied \"$1\", lai apstiprinātu un pārietu uz nākamo ziņojumu, \"$2\", lai izlaistu, \"$4\", lai sniegtu kopsavilkumu vai pieturi \"$3\", lai redzētu pārējās saīsnes.",
+ "tux-editor-edit-desc": "Labot dokumentāciju",
+ "tux-editor-add-desc": "Pievienot dokumentāciju",
+ "tux-editor-suggestions-title": "Ieteikumi",
+ "tux-editor-in-other-languages": "Citās valodās",
+ "tux-editor-need-more-help": "Nepieciešama papildu palīdzība?",
+ "tux-editor-ask-help": "Pieprasiet vairāk informācijas",
+ "tux-editor-tm-match": "$1% atbilstība",
+ "tux-notices-more": "{{PLURAL:$1|vēl $1}}",
+ "tux-notices-hide": "paslēpt",
+ "tux-editor-n-uses": "izmantots $1 {{PLURAL:$1|reizes|reizi|reizes}}",
+ "tux-editor-message-desc-more": "Skatīt vairāk",
+ "tux-editor-message-desc-less": "Skatīt mazāk",
+ "tux-editor-clear-translated": "Paslēpt iztulkoto",
+ "tux-editor-proofreading-mode": "Pārlasīt",
+ "tux-editor-translate-mode": "Saraksts",
+ "tux-editor-proofreading-hide-own-translations": "Paslēpt tavus tulkojumus",
+ "tux-editor-proofreading-show-own-translations": "Parādīt tavus tulkojumus",
+ "tux-proofread-action-tooltip": "Atzīmēt kā pārskatītu",
+ "tux-proofread-edit-label": "Labot",
+ "tux-editor-page-mode": "Lapa",
+ "tux-editor-outdated-notice": "Šis tulkojums, iespējams, ir jāatjaunina.",
+ "tux-editor-outdated-notice-diff-link": "Parādīt atšķirības",
+ "tux-editor-doc-editor-placeholder": "Paziņojuma dokumentācija",
+ "tux-editor-doc-editor-save": "Saglabāt dokumentāciju",
+ "tux-editor-doc-editor-cancel": "Atcelt",
+ "tux-messagetable-loading-messages": "Ielādē {{PLURAL:$1|ziņojumus|ziņojumu|ziņojumus}}...",
+ "tux-message-filter-placeholder": "Filtrēt sarakstu",
+ "tux-message-filter-advanced-button": "Izvērstā meklēšana",
+ "tux-message-filter-optional-messages-label": "Papildu ziņas",
+ "tux-empty-list-translated-guide": "Tu vari palīdzēt pārtulkot",
+ "tux-empty-list-translated-action": "Tulkot",
+ "tux-empty-no-messages-to-display": "Nav ziņu, ko parādīt.",
+ "tux-empty-list-other": "Nav nekā tulkojama",
+ "tux-empty-list-other-guide": "Tu vari palīdzēt pārskatīt esošos tulkojumus",
+ "tux-empty-list-other-action": "Pārskatīt tulkojumus",
+ "tux-empty-list-other-link": "Rādīt visus ziņojumus",
+ "tux-editor-close-tooltip": "Aizvērt",
+ "tux-editor-expand-tooltip": "Izvērst",
+ "tux-editor-collapse-tooltip": "Sakļaut",
+ "tux-editor-message-tools-history": "Vēsture",
+ "tux-editor-message-tools-delete": "Dzēst",
+ "tux-editor-message-tools-translations": "Visi tulkojumi",
+ "tux-editor-message-tools-linktothis": "Saite uz šo ziņojumu",
+ "tux-editor-loading": "Ielādē...",
+ "translate-search-more-languages-info": "vēl $1 {{PLURAL:$1|valodas|valoda|valodas}}",
+ "translate-search-more-groups-info": "vēl $1 {{PLURAL:$1|grupas|grupa|grupas}}",
+ "translate-syntax-error": "Tulkojums satur sintakses kļūdas",
+ "specialpages-group-translation": "Tulkojums"
+}
diff --git a/Translate/i18n/core/lzh.json b/Translate/i18n/core/lzh.json
new file mode 100644
index 00000000..76d80401
--- /dev/null
+++ b/Translate/i18n/core/lzh.json
@@ -0,0 +1,152 @@
+{
+ "@metadata": {
+ "authors": [
+ "Davidzdh",
+ "Itsmine",
+ "Jason924tw",
+ "Yanteng3",
+ "列维劳德"
+ ]
+ },
+ "translate": "譯",
+ "translate-desc": "譯MediaWiki訊之[[Special:Translate|特查]]",
+ "translate-taskui-export-to-file": "出匯以原格式",
+ "translate-taskui-export-as-po": "出匯以離之譯",
+ "translate-taction-translate": "譯",
+ "translate-taction-proofread": "檢校",
+ "translate-taction-lstats": "語之彙統",
+ "translate-taction-mstats": "訊息組之彙統",
+ "translate-taction-export": "出匯",
+ "translate-page-disabled": "已禁本群組譯至該語。\n註:\n\n<em>$1</em>",
+ "translate-language-disabled": "禁譯至該語。",
+ "translate-page-settings-legend": "簿註",
+ "translate-page-group": "組",
+ "translate-page-language": "語",
+ "translate-submit": "擷取",
+ "translate-page-navigation-legend": "導",
+ "translate-page-showing-all": "示$1訊。",
+ "translate-page-showing-none": "無訊可示。",
+ "translate-next": "次頁",
+ "translate-prev": "前頁",
+ "translate-page-description-legend": "述本群組",
+ "translate-page-description-hasoptional-open": "示選之訊。",
+ "translate-page-edit": "纂",
+ "translate-optional": "(選)",
+ "translate-ignored": "(略)",
+ "translate-edit-title": "始譯「$1」",
+ "translate-edit-definition": "訊之原",
+ "translate-edit-contribute": "功績",
+ "translate-edit-information": "述該訊息($1)",
+ "translate-edit-warnings": "未譯之警",
+ "translate-edit-tmmatch": "$1%符",
+ "translate-edit-nopermission": "汝須獲權方可譯訊。",
+ "translate-edit-askpermission": "獲權",
+ "right-translate-messagereview": "校譯",
+ "translate-rc-translation-filter": "濾清:",
+ "translate-rc-translation-filter-no": "無濾",
+ "translate-rc-translation-filter-only": "只示譯",
+ "translate-rc-translation-filter-filter": "無示譯",
+ "translate-rc-translation-filter-site": "只示訊",
+ "translationstats": "譯之彙統",
+ "translate-stats-edits": "纂",
+ "translate-stats-users": "譯者",
+ "translate-stats-reviews": "檢校",
+ "translate-statsf-scale-months": "月",
+ "translate-statsf-scale-weeks": "周",
+ "translate-statsf-scale-days": "日",
+ "translate-statsf-count-registrations": "新簿",
+ "translate-statsf-count-reviews": "校譯",
+ "translate-statsf-submit": "草覽",
+ "translate-sidebar-alltrans": "他山",
+ "translations": "全譯",
+ "translate-translations-fieldset-title": "訊",
+ "translate-translations-messagename": "名:",
+ "languagestats": "語之彙統",
+ "languagestats-summary": "示該語全訊息組之成度。",
+ "languagestats-stats-for": "$1 ($2) 譯之彙統。",
+ "languagestats-recenttranslations": "近譯",
+ "translate-langstats-expand": "展",
+ "translate-langstats-collapse": "摺",
+ "translate-langstats-expandall": "展全",
+ "translate-langstats-collapseall": "摺全",
+ "translate-language-code": "語之碼",
+ "translate-language-code-field-name": "語之碼:",
+ "translate-suppress-complete": "藏已全譯之訊息組",
+ "translate-ls-noempty": "藏無譯之訊息組",
+ "translate-language": "語言",
+ "translate-total": "訊",
+ "translate-untranslated": "未譯",
+ "translate-percentage-complete": "成度",
+ "translate-percentage-fuzzy": "過時",
+ "translate-ls-submit": "示彙統",
+ "translate-ls-column-group": "訊息組",
+ "translate-mgs-group": "訊息組:",
+ "translate-mgs-submit": "示彙統",
+ "translate-mgs-column-language": "語言",
+ "translate-mgs-nothing": "無彙統以示",
+ "supportedlanguages-recenttranslations": "近譯",
+ "translate-manage-import-deleted": "已刪訊 $1",
+ "translate-manage-action-import": "入匯",
+ "translate-import-load": "載檔",
+ "translate-documentation-language": "訊之檔",
+ "translate-searchprofile": "譯",
+ "translate-searchprofile-tooltip": "尋譯",
+ "log-name-translationreview": "校譯之誌",
+ "translate-dynagroup-recent-label": "近譯",
+ "translate-msggroupselector-projects": "訊息組",
+ "translate-msggroupselector-search-all": "全",
+ "translate-msggroupselector-search-recent": "近",
+ "tux-languageselector": "譯至",
+ "tux-tab-all": "全",
+ "tux-tab-untranslated": "未譯",
+ "tux-tab-outdated": "過時",
+ "tux-tab-translated": "已譯",
+ "tux-edit": "纂",
+ "tux-status-optional": "選",
+ "tux-status-fuzzy": "過時",
+ "tux-status-proofread": "已校",
+ "tux-status-translated": "已譯",
+ "tux-status-saving": "修之...",
+ "tux-editor-paste-original-button-label": "貼源文",
+ "tux-editor-save-button-label": "修譯",
+ "tux-editor-skip-button-label": "次譯",
+ "tux-editor-shortcut-info": "押「$1」存,或押「$2」譯次訊",
+ "tux-editor-edit-desc": "檔纂",
+ "tux-editor-in-other-languages": "他語之譯",
+ "tux-editor-need-more-help": "需助乎?",
+ "tux-editor-ask-help": "問更多",
+ "tux-editor-clear-translated": "藏已譯",
+ "tux-editor-proofreading-mode": "檢校",
+ "tux-editor-translate-mode": "表",
+ "tux-editor-proofreading-hide-own-translations": "藏子之譯",
+ "tux-editor-proofreading-show-own-translations": "示子之譯",
+ "tux-proofread-action-tooltip": "記為已校",
+ "tux-proofread-edit-label": "纂",
+ "tux-editor-page-mode": "頁",
+ "tux-editor-outdated-notice": "此譯須新。",
+ "tux-editor-outdated-notice-diff-link": "示辨",
+ "tux-editor-doc-editor-placeholder": "訊之檔",
+ "tux-editor-doc-editor-save": "修檔",
+ "tux-messagetable-more-messages": "$1訊",
+ "tux-messagetable-loading-messages": "載{{PLURAL:$1|訊|訊}}之……",
+ "tux-message-filter-placeholder": "濾之表",
+ "tux-message-filter-result": "$1尋含$2",
+ "tux-message-filter-advanced-button": "進尋",
+ "tux-message-filter-optional-messages-label": "選之訊",
+ "tux-proofread-translated-by-self": "子之譯",
+ "tux-empty-list-translated": "無已譯之訊",
+ "tux-empty-show-optional-messages": "示選之訊",
+ "tux-empty-no-outdated-messages": "無過時訊",
+ "tux-empty-nothing-to-proofread": "無可校",
+ "tux-empty-nothing-new-to-proofread": "無新訊可校",
+ "tux-empty-list-other": "無可譯",
+ "tux-empty-list-other-guide": "助吾校譯",
+ "tux-empty-list-other-link": "示全之訊",
+ "tux-editor-expand-tooltip": "展",
+ "tux-editor-collapse-tooltip": "摺",
+ "tux-editor-message-tools-history": "誌",
+ "tux-editor-loading": "載之……",
+ "translate-search-more-languages-info": "尚有{{PLURAL:$1|語文|語文}}$1",
+ "translate-statsbar-tooltip": "已譯$1%,已檢校$2%",
+ "translate-statsbar-tooltip-with-fuzzy": "$1%已翻,$2%檢校,$3%過時"
+}
diff --git a/Translate/i18n/core/lzz.json b/Translate/i18n/core/lzz.json
new file mode 100644
index 00000000..dc230498
--- /dev/null
+++ b/Translate/i18n/core/lzz.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bombola",
+ "Cem Rize"
+ ]
+ },
+ "translate-page-group": "Grubi",
+ "translate-page-language": "Nena",
+ "translate-stats-users": "Magoktirepe",
+ "translate-statsf-scale-days": "Ndğalepe",
+ "translate-statsf-scale-hours": "Saat'epe",
+ "translate-documentation-language": "İleti belgelemesi"
+}
diff --git a/Translate/i18n/core/mad.json b/Translate/i18n/core/mad.json
new file mode 100644
index 00000000..7ebb8317
--- /dev/null
+++ b/Translate/i18n/core/mad.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Boesenbergia"
+ ]
+ },
+ "translate-documentation-language": "Dokumèntasi pessen"
+}
diff --git a/Translate/i18n/core/mag.json b/Translate/i18n/core/mag.json
new file mode 100644
index 00000000..9bb900ac
--- /dev/null
+++ b/Translate/i18n/core/mag.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "ऐक्टिवेटेड्"
+ ]
+ },
+ "translate-documentation-language": "सन्देस परलेखन"
+}
diff --git a/Translate/i18n/core/mai.json b/Translate/i18n/core/mai.json
new file mode 100644
index 00000000..6a5bdca1
--- /dev/null
+++ b/Translate/i18n/core/mai.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Tulsi Bhagat",
+ "बिप्लब आनन्द"
+ ]
+ },
+ "languagestats-recenttranslations": "सन्निकट अनुवाद",
+ "translate-languagestats-overall": "सम्पूर्ण सन्देश-समूह एक साथ",
+ "translate-documentation-language": "सूचना दस्तावेजीकरण"
+}
diff --git a/Translate/i18n/core/map-bms.json b/Translate/i18n/core/map-bms.json
new file mode 100644
index 00000000..e1738efc
--- /dev/null
+++ b/Translate/i18n/core/map-bms.json
@@ -0,0 +1,47 @@
+{
+ "@metadata": {
+ "authors": [
+ "StefanusRA"
+ ]
+ },
+ "translate": "Terjemahna",
+ "translate-desc": "[[Special:Translate|Kaca astamiwa]] kanggo mertalna MediaWiki lan liyane",
+ "translate-taskui-export-to-file": "Ekspor nang format asli",
+ "translate-taskui-export-as-po": "Ekspor kanggo terjemahan offline",
+ "translate-taction-translate": "Terjemahna",
+ "translate-taction-proofread": "Ulas",
+ "translate-taction-mstats": "Statistik klompok pesen",
+ "translate-taction-export": "Ekspor",
+ "translate-taction-disabled": "Laku kiye dipateni nang wiki kiye.",
+ "translate-page-no-such-language": "Basa sing dipilih ora sah.",
+ "translate-page-no-such-group": "Grup sing dipilih ora sah.",
+ "translate-page-disabled": "Terjemahan ming basa kiye nang grup kiye wis dinonaktifna.\nAlesan:\n\n\n\"$1\"",
+ "translate-language-disabled": "Terjemahan ming basa kiye wis dinonaktifna.",
+ "translate-page-group": "Klompok",
+ "translate-page-limit": "Bates",
+ "translate-submit": "Jikot",
+ "translate-page-showing": "Nidokna pesen sekang $1 nganti $2 sekang total $3.",
+ "translate-page-showing-all": "Nidokna $1 {{PLURAL:$1|pesen|pesen}}.",
+ "translate-page-showing-none": "Ora ana pesen nggo ditidokna.",
+ "translate-next": "Kaca terusane",
+ "translate-prev": "Kaca sedurunge",
+ "translate-page-description-legend": "Informasi ngenani grup",
+ "translate-page-description-hasoptional-open": "Tidokna layang opsional.",
+ "translate-page-edit": "nyunting",
+ "translate-optional": "(pilihan/ora kudu)",
+ "translate-ignored": "(dilirwakna)",
+ "translate-edit-title": "Nyunting \"$1\"",
+ "translate-edit-definition": "Definisi pesen",
+ "translate-edit-contribute": "aweh kontribusi",
+ "translate-edit-no-information": "\"Pesen kiye ora duwe dokumentasi.\"\n\"Angger Rika weruh nang endi utawa kepriwe pesen kiye digunakna, Rika teyeng nulungi penerjemah liyane mawa nambahna dokumentasi ming pesen kiye.\"",
+ "translate-edit-information": "Informasi bab pesen ($1)",
+ "translate-edit-tmmatch-source": "Tèks sumber pertalan: $1",
+ "translate-edit-tmmatch": "$1% cocog",
+ "translate-edit-nopermission": "Rika perlu idin kanggo nerjemahna pesen.",
+ "translate-checks-parameters": "{{PLURAL:$2|parameter|}} kiye ora dienggo:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Parameter|Parameter-parameter}} kiye ora dikenal:\n<strong>$1</strong>",
+ "translate-checks-balance": "Ana jumlah sing ora rata sekang {{PLURAL:$2|''parenthesis''|}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|pranala|$2 pranala-pranala}} kiye nduwe masalah:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Pranala|Pranala-pranala}} kiye ilang:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> wis aweh {{PLURAL:$1|siji formulir|$1 formulir-formulir}} ningen mung {{PLURAL:$2|siji formulir|$2 formulir-formulir}} sing didukung (excluding 0= lan 1= formulir)."
+}
diff --git a/Translate/i18n/core/mg.json b/Translate/i18n/core/mg.json
new file mode 100644
index 00000000..6339c07d
--- /dev/null
+++ b/Translate/i18n/core/mg.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jagwar"
+ ]
+ },
+ "translate-page-showing": "Aseho ny hafatra avy amin'i $1 hatramin'i $2 amin'ny $3",
+ "translate-page-description-hasoptional-open": "Aseho ny hafatra tsy voatery",
+ "right-translate": "Manova ny interface fandikana",
+ "right-translate-manage": "Hitantana vondron-kafatra",
+ "right-translate-import": "Mampiditra ny fandikana na offline aza",
+ "translate-rc-translation-filter-only": "Dikanteny ihany no aseho",
+ "translate-sidebar-alltrans": "Amin'ny teny vahiny",
+ "translate-ls-submit": "Aseho ny statistika",
+ "translate-mgs-submit": "Aseho ny statistika",
+ "translate-documentation-language": "Valan-draki-kafatra",
+ "tux-edit": "Hanova"
+}
diff --git a/Translate/i18n/core/mhr.json b/Translate/i18n/core/mhr.json
new file mode 100644
index 00000000..ec8471b0
--- /dev/null
+++ b/Translate/i18n/core/mhr.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kareyac",
+ "Сай"
+ ]
+ },
+ "translate-next": "Вес лаштык",
+ "translate-prev": "Ончычсо лаштык",
+ "tux-editor-page-mode": "Лаштык"
+}
diff --git a/Translate/i18n/core/min.json b/Translate/i18n/core/min.json
new file mode 100644
index 00000000..db150853
--- /dev/null
+++ b/Translate/i18n/core/min.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ardzun",
+ "Iwan Novirion",
+ "Muhraz",
+ "Naval Scene"
+ ]
+ },
+ "translate-statsf-start": "Tanggal mulai:",
+ "translate-statsf-scale": "Granularitas:",
+ "translate-statsf-scale-months": "Bulan",
+ "translate-statsf-scale-weeks": "Pakan",
+ "translate-statsf-scale-days": "Ari",
+ "translate-statsf-scale-hours": "Jam",
+ "translate-statsf-count": "Ukuaran:",
+ "translate-statsf-count-edits": "Jumlah suntiangan",
+ "translate-statsf-count-users": "Panajamah aktip",
+ "translate-statsf-count-registrations": "Pangguno baru",
+ "translate-sidebar-alltrans": "Dalam bahaso lain",
+ "translate-documentation-language": "Dokumentasi pasan",
+ "translate-searchprofile": "Tajamahan",
+ "translate-searchprofile-tooltip": "Cari dari sado tajamahan",
+ "tux-editor-message-tools-history": "Versi"
+}
diff --git a/Translate/i18n/core/mk.json b/Translate/i18n/core/mk.json
new file mode 100644
index 00000000..74c82ae7
--- /dev/null
+++ b/Translate/i18n/core/mk.json
@@ -0,0 +1,451 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bjankuloski06",
+ "Brest",
+ "Brest2008",
+ "Dario",
+ "Vlad5250",
+ "Милан Јелисавчић"
+ ]
+ },
+ "translate": "Преведување",
+ "translate-extensionname": "Преведување",
+ "translate-desc": "[[Special:Translate|Службена страница]] за преведување на МедијаВики и други пораки",
+ "translate-fuzzybot-desc": "Ова е службена системска сметка што се користи од додатокот [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate Преведување] на МедијаВики намете за одржување на преводи.\nОваа сметка е дел од основниот програм и не е во сопственост на ниеден корисник.",
+ "translate-taskui-export-to-file": "Извези во матичен формат",
+ "translate-taskui-export-as-po": "Извези за вонмрежно преведување",
+ "translate-taskui-export-as-csv": "Извези во CSV-формат",
+ "translate-export-csv-message-title": "Наслов на поракта за преведување",
+ "translate-export-csv-definition": "Одредба на пораката",
+ "translate-taction-translate": "Преведи",
+ "translate-taction-proofread": "Провери",
+ "translate-taction-lstats": "Јазични статистики",
+ "translate-taction-mstats": "Статистики за групата",
+ "translate-taction-export": "Извези",
+ "translate-taction-disabled": "Дејството е оневозможено на ова вики.",
+ "translate-page-no-such-language": "Наведениот јазик е погрешен",
+ "translate-page-no-such-group": "Погрешно наведена група",
+ "translate-page-disabled": "Преведувањето на овој јазик во оваа група е оневозможено. Причина:\n\n<em>$1</em>",
+ "translate-language-disabled": "Преведувањето на овој јазик е оневозможено.",
+ "translate-page-settings-legend": "Нагодувања",
+ "translate-page-group": "Група",
+ "translate-page-language": "Јазик",
+ "translate-page-limit": "Највеќе до",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|порака|пораки}} по страница",
+ "translate-submit": "Филтрирај",
+ "translate-page-navigation-legend": "Прегледник",
+ "translate-page-showing": "Прикажани се пораки од $1 до $2 од вкупно $3",
+ "translate-page-showing-all": "Приказ на $1 {{PLURAL:$1|порака|пораки}}.",
+ "translate-page-showing-none": "Нема пораки за прикажување",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "Следна страница",
+ "translate-prev": "Претходна страница",
+ "translate-page-description-legend": "Информации за групата",
+ "translate-page-description-hasoptional": "Оваа група содржи незадолжителни пораки.\nНезадолжителните пораки треба да се преведуваат само кога вашиот јазик има посебни потреби како траслитерација на имиња или неупотреба на празни места. $1",
+ "translate-page-description-hasoptional-open": "Прикажи незадолжителни пораки.",
+ "translate-page-edit": "уреди",
+ "translate-optional": "(незадолжително)",
+ "translate-ignored": "(игнорирано)",
+ "translate-edit-title": "Уреди „$1“",
+ "translate-edit-definition": "Одредба на пораката",
+ "translate-edit-contribute": "придонес",
+ "translate-edit-no-information": "<em>Оваа порака нема документација.\nАко знаете каде или како се користи поракава, тогаш помогнете им на другите преведувачи додавајќи ѝ документација.</em>",
+ "translate-edit-information": "Информации за пораката ($1)",
+ "translate-edit-warnings": "Предупредувања за нецелосни преводи",
+ "translate-edit-tmmatch-source": "Изворен текст за преводот: $1",
+ "translate-edit-tmmatch": "$1% совпаѓање",
+ "translate-edit-nopermission": "Ви требаат преведувачки права за да преведувате пораки.",
+ "translate-edit-askpermission": "Побарајте дозвола",
+ "exporttranslations": "Извези преводи",
+ "translate-export-form-format": "Формат",
+ "translate-export-invalid-format": "Укажете важечки формат.",
+ "translate-export-not-supported": "Извезување на преводи не е поддржано.",
+ "translate-export-format-notsupported": "Укажаниот извозен формат не е поддржана од групата пораки.",
+ "translate-export-group-too-large": "Избраната група пораки е преголема. Изберете некоја со помалку од $1 {{PLURAL:$1|порака|пораки}} или посоветувајте се со преводен администратор.",
+ "translate-checks-parameters": "{{PLURAL:$2|Не се користи следниов параметар|Не се користат следниве параметри}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Следниов параметар е непознат|Следниве параметри се непознати}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "Непарен број на загради, {{PLURAL:$2|заграда|загради}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Следнава врска предизвикува проблеми|Следниве $2 врски предизвикуваат проблеми}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Недостасува следнава врска|$2 Недостасуваат следниве врски}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Одредбата користи <nowiki>{{PLURAL:}}</nowiki> но преводот не.",
+ "translate-checks-plural-forms": "На <nowiki>{{PLURAL:}}</nowiki> {{PLURAL:$1|му е зададен еден облик|му се зададени $1 облици}}, но {{PLURAL:$2|поддржан е само еден|поддржани се само $2}} (освен облиците 0= и 1=).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> има дуплирани облици на крајот. <nowiki>{{PLURAL:$1|деца|деца}}</nowiki> треба да се запише само како <nowiki>{{PLURAL:$1|деца}}</nowiki>.",
+ "translate-checks-gettext-plural-missing": "Овој превод мора да има <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-unsupported": "Оваа порака не го поддржува <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-count": "<nowiki>{{PLURAL:GETTEXT|}}</nowiki> прифаќа точно $1 {{PLURAL:$1|множински облик|множински облици}}. Тековно {{PLURAL:$2|е зададен|се зададени}} $2.",
+ "translate-checks-smartformat-plural-missing": "Овој превод мора да има множина во променливата $1.",
+ "translate-checks-smartformat-plural-unsupported": "Оваа порака не поддржува множина во променливата $1.",
+ "translate-checks-smartformat-plural-count": "Неисправен број на множински облици во <strong>$3</strong>. Мора да има $1 {{PLURAL:$1|облик|облици}}, а тековно {{PLURAL:$2|е зададен|се зададени}} $2.",
+ "translate-checks-unicode-plural-missing": "Овој превод мора да има <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-unsupported": "Оваа порака не го поддржува <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-invalid": "Множинските облици треба да се задаваат како $1. Овој превод содржи $2.",
+ "translate-checks-pagename": "Изменета е одредбата на именскиот простор",
+ "translate-checks-format": "Овој превод не ја следи одредбата или има неправилна синтакса: $1",
+ "translate-checks-escape": "{{PLURAL:$2|Следниов изменителен знак може да е ненамерен|Следниве изменителни знаци може да се ненамерни}}: <strong>$1</strong>. {{PLURAL:$4|Важечки е|Важечки се:}} $3.",
+ "translate-checks-parametersnotequal": "Бројот на параметри изнесува {{PLURAL:$1|$1}}, а треба да биде {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> е погрешно внесено.",
+ "translate-checks-fudforum-syntax": "Користете <nowiki>$1</nowiki> наместо <nowiki>$2</nowiki> во овој проект.",
+ "translate-checks-newline-missing-start": "{{PLURAL:$1|Недостасува|Недостасуваат}} $1 {{PLURAL:$1|знак|знаци}} за нов ред на почетокот од преводот.",
+ "translate-checks-newline-missing-end": "{{PLURAL:$1|Недостасува|Недостасуваат}} $1 {{PLURAL:$1|знак|знаци}} за нов ред на крајот од преводот.",
+ "translate-checks-newline-extra-start": "Има $1 {{PLURAL:$1|излишен знак|излишни знаци}} за нов ред на почетокот од преводот.",
+ "translate-checks-newline-extra-end": "Има $1 {{PLURAL:$1|излишен знак|излишни знаци}} за нов ред на крајот од преводот.",
+ "translate-checks-value-not-present": "Преводот мора да е еднаков на {{PLURAL:$1|1=|една од следниве вредности:}} $1.",
+ "translate-checks-replacement": "Користи $2 наместо $1.",
+ "translate-checks-empty": "Не се дозволени преводи без содржина или само со белина.",
+ "translate-pref-editassistlang": "Помошни јазици:",
+ "prefs-translate": "Нагодувања за преведување",
+ "translate-pref-editassistlang-help": "Список на јазични кодови одделени со запирка.\nПреводите на пораките на овие јазици се прикажуваат кога преведувате.\nСписокот на јазици зададен по основно зависи од вашиот јазик.",
+ "translate-pref-editassistlang-bad": "Погрешен јазичен код на списокот:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Уредување со користење на посредникот за преведување",
+ "action-translate": "уредување со посредникот за преведување",
+ "right-translate-manage": "Раководење со групи пораки",
+ "action-translate-manage": "раководење со групи пораки",
+ "right-translate-import": "Увезување на вонмрежни преводи (од сметач)",
+ "action-translate-import": "увоз на вонмрежни преводи",
+ "right-translate-messagereview": "Проверка на преводи",
+ "action-translate-messagereview": "проверка на преводи",
+ "right-translate-groupreview": "Менување на состојбата на работниот тек на групите пораки",
+ "action-translate-groupreview": "менување на состојбата на работниот тек на групите пораки",
+ "translate-rcfilters-translations": "Преводи",
+ "translate-rcfilters-translations-only-label": "Преводи",
+ "translate-rcfilters-translations-only-desc": "Промени во преведени страници.",
+ "translate-rcfilters-translations-filter-label": "Непреводи",
+ "translate-rcfilters-translations-filter-desc": "Сите промени кои не се преводи.",
+ "translate-rcfilters-translations-site-label": "Системски пораки",
+ "translate-rcfilters-translations-site-desc": "Прилагодувања на системски пораки во именскиот простор МедијаВики.",
+ "translate-rc-translation-filter": "Филтрирање на преводи:",
+ "translate-rc-translation-filter-no": "Не прави ништо",
+ "translate-rc-translation-filter-only": "Прикажи само преводи",
+ "translate-rc-translation-filter-filter": "Филтрирај преводи",
+ "translate-rc-translation-filter-site": "Промени само во пораките на мреж. место",
+ "translationstats": "Статистики за преводите",
+ "translate-stats-edits": "Уредувања",
+ "translate-stats-users": "Преведувачи",
+ "translate-stats-registrations": "Зачленувања",
+ "translate-stats-reviews": "Оценки",
+ "translate-stats-reviewers": "Оценувачи",
+ "translate-statsf-intro": "Со овој образец можете да создадете едноставен статистички преглед. Сите вредности имаат горни и долни граници.",
+ "translate-statsf-options": "Нагодувања за графиконот",
+ "translate-statsf-width": "Ширина во пиксели:",
+ "translate-statsf-height": "Висина во пиксели:",
+ "translate-statsf-days": "Временски период во денови:",
+ "translate-statsf-start": "Почетен датум:",
+ "translate-statsf-scale": "Подробност:",
+ "translate-statsf-scale-years": "Години",
+ "translate-statsf-scale-months": "Месеци",
+ "translate-statsf-scale-weeks": "Недели",
+ "translate-statsf-scale-days": "Денови",
+ "translate-statsf-scale-hours": "Часови",
+ "translate-statsf-count": "Мерка:",
+ "translate-statsf-count-edits": "Број на уредувања",
+ "translate-statsf-count-users": "Активни преведувачи",
+ "translate-statsf-count-registrations": "Нови корисници",
+ "translate-statsf-count-reviews": "Оценки на преводи",
+ "translate-statsf-count-reviewers": "Оценувачи",
+ "translate-statsf-language": "Список на јазични кодови, одвоени со запирка:",
+ "translate-statsf-group": "Список на групни кодови, одвоени со запирка:",
+ "translate-statsf-submit": "Преглед",
+ "translate-statsf-unknown-error": "Се појави непозната грешка.",
+ "translate-statsf-error-message": "Се јави грешка при вчитувањето на графикот: $1",
+ "translate-statsf-graph-alt-text-info": "Текстуална алтернативна на преводните статистики е во податочната табела подолу.",
+ "translate-statsf-alt-text": "Оваа текстуалната алтернатива за преводните статистики.",
+ "translate-statsf-embed": "Код за вметнување на градикот за преводни статистики во други страници.",
+ "translate-tag-page-desc": "Превод на викистраницата [[$2|$1]] од $3 ($4).",
+ "translate-tag-page-wikipage-desc": "[[$1|Превод]] на викистраницата [[$2]] од <bdi>$3</bdi> ($4) на <bdi>$5</bdi> ($6)",
+ "translate-sidebar-alltrans": "На други јазици",
+ "translations": "Сите преводи",
+ "translations-summary": "Внесете име на порака за приказ на сите достапни преводи.",
+ "translate-translations-no-message": "„$1“ не е порака што се преведува",
+ "translate-translations-none": "Нема преводи за „$1“",
+ "translate-translations-count": "{{PLURAL:$1|Пронајден е еден превод|Пронајдени се $1 преводи}}.",
+ "translate-translations-fieldset-title": "Порака",
+ "translate-translations-messagename": "Име:",
+ "translate-translations-project": "Проект:",
+ "translate-translations-including-no-param": "Наведете важечко клучно име на пораката во параметарот на потстраницата",
+ "translate-translations-history-short": "и",
+ "languagestats": "Статистики за јазикот",
+ "languagestats-summary": "Оваа страница прикажува статистики на превод за сите групи на пораки за одреден јазик.",
+ "messagegroupstats-summary": "На страницава се прикажани статистики за група пораки.",
+ "languagestats-stats-for": "Преводни статистики за $1 ($2).",
+ "languagestats-recenttranslations": "скорешни преводи",
+ "translate-langstats-incomplete": "Некои од статистиките на страницава се непотполни. Превчитајте ја за да добиете потполни статистики.",
+ "translate-langstats-expand": "прикажи",
+ "translate-langstats-collapse": "собери",
+ "translate-langstats-expandall": "прикажи сè",
+ "translate-langstats-collapseall": "скриј сè",
+ "translate-language-code": "Јазичен код",
+ "translate-language-code-field-name": "Јазичен код:",
+ "translate-suppress-complete": "Не прикажувај наполно преведени групи на пораки",
+ "translate-ls-noempty": "Скриј наполно непреведени групи на пораки",
+ "translate-language": "Јазик",
+ "translate-total": "Пораки",
+ "translate-untranslated": "Непреведени",
+ "translate-percentage-complete": "Потполност",
+ "translate-percentage-fuzzy": "Застарени",
+ "translate-percentage-proofread": "Проверени",
+ "translate-languagestats-overall": "Сите групи на пораки заедно",
+ "translate-ls-submit": "Дај статистики",
+ "translate-ls-column-group": "Група пораки",
+ "translate-mgs-pagename": "Статистики за групата",
+ "translate-mgs-fieldset": "Нагодувања на приказот",
+ "translate-mgs-group": "Група пораки:",
+ "translate-mgs-nocomplete": "Не прикажувај јазици со наполно завршен превод",
+ "translate-mgs-noempty": "Не прикажувај јазици што немаат почнато со преведување",
+ "translate-mgs-submit": "Статистики",
+ "translate-mgs-column-language": "Јазик",
+ "translate-mgs-totals": "{{PLURAL:$1|Сиот јазик|Сите $1 јазици заедно}}",
+ "translate-mgs-invalid-group": "Наведената група $1 не постои.",
+ "translate-mgs-nothing": "Нема што да се прикаже за побараните статистики.",
+ "translate-tes-server-error": "Не успеав да ги добијам пребарувачките предлози",
+ "translate-tes-group-not-found": "Нема ставки што одговараат",
+ "translate-tes-type-to-search": "Внесете текст за да почнете да пребарувате",
+ "supportedlanguages": "Активни јазици",
+ "supportedlanguages-summary": "На оваа страница е прикажан список на активните на {{SITENAME}},\nзаедно со имињата на преведувачите што работат на секој јазик.\nГолемината на името (т.е. буквите) на преведувачот зависи од тоа колку пораки има преведено.\nБојата на линијата со која е подвлечено името ја покажува скорешноста на неговата активност.",
+ "supportedlanguages-colorlegend": "Легенда за бојата: Последен превод извршен пред $1 дена.",
+ "supportedlanguages-portallink": "[$1] $2 - $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-sqlite-error": "SQLite не е поддржан",
+ "supportedlanguages-postgres-error": "PostgreSQL не е поддржан",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Преведувач}}|Преведувач}}: $1",
+ "supportedlanguages-recenttranslations": "скорешни преводи",
+ "supportedlanguages-count": "Вкупно $1 {{PLURAL:$1|јазик|јазици}}.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|уредување|уредувања}} - последното пред $3 {{PLURAL:$3|ден|дена}}",
+ "translate-supportedlanguages-cached": "Оваа информација е меѓускладирана пред $1.",
+ "translate-activelanguages-invalid-code": "Јазичниот код „$1“ е непознат или не е овозможен за преведување.",
+ "abusefilter-edit-builder-vars-translate-source-text": "Изворен текст на преводната единица",
+ "abusefilter-edit-builder-vars-translate-target-language": "Целен јазик за преводот",
+ "translate-jssti-add": "Додај во список",
+ "managemessagegroups": "Раководење со групи на пораки",
+ "translate-smg-notallowed": "Не ви е дозволено да ја извршите оваа постапка.",
+ "translate-smg-nochanges": "Нема измени за обработка.",
+ "translate-smg-submit": "Поднеси измени за обработка",
+ "translate-smg-submitted": "Одредбите на пораките се подновени. Измените се обработуваат во позадина.",
+ "translate-smg-submitted-with-failure": "Подновата на {{PLURAL:$1|одредба на порака|одредбите на пораки}} не успеа за {{PLURAL:$1|следнава група|следниве групи}} — $2. $3",
+ "translate-smg-submitted-others-processing": "Одредбите на пораки за други групи се обработуваат во позадина.",
+ "translate-smg-more": "Ќе има уште промени за обработка откако ќе ги поднесете овие.",
+ "translate-smg-left": "Содржина на пораката во викито",
+ "translate-smg-right": "Претстојни промени",
+ "translate-smg-rename-select": "Избери",
+ "translate-smg-rename-cancel": "Откажи",
+ "translate-smg-rename-search": "Пребарај совпадната порака...",
+ "translate-smg-rename-select-err": "Изберете порака за преименување",
+ "translate-smg-rename-no-msg": "Не пронајдов ниедна порака.",
+ "translate-smg-rename-new": "Додај како нова...",
+ "translate-smg-rename-rename": "Додај како преименување на...",
+ "translate-smg-rename-dialog-title": "Избери совпаднато преименување за $1",
+ "translate-smg-changeset-modified": "Промените се изменети од друг корисник или постапка. Вашите промени не можат да се објават бидејќи ќе ги заменат нив. Превчитајте ја страницата за да ги видите најновите промени.",
+ "translate-smg-no-groups-in-sync": "Тековно нема групи во усогласување",
+ "translate-smg-strong-sync-help": "Помош",
+ "translate-smg-groups-in-sync": "Групи тековно во усогласување",
+ "translate-smg-groups-in-sync-list": "Список на групи кои тековно се обработуваат во позадина:",
+ "translate-smg-groups-with-error-title": "Групи кои имаа грешки при усогласување",
+ "translate-smg-groups-with-error-desc": "Список на групи и нивните пораки кои имаа грешки при усогласувањето:",
+ "translate-smg-group-with-error-summary": "$1 {{PLURAL:$1|порака|пораки}} со грешки:",
+ "translate-smg-group-message-action-history": "Историја",
+ "translate-smg-group-action-resolve": "Означи како решено",
+ "translate-smg-group-sync-error-warn": "Во групава се појави грешка при усогласувањето. Поправете ги грешките пред да ја обработите.",
+ "translate-smg-group-message-tag-outdated": "Застарени",
+ "translate-smg-group-message-tag-rename": "Преименувај",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|Ознака|Ознаки}}:",
+ "translate-smg-group-message-message-content": "Содржина:",
+ "translate-smg-group-message-message-target": "Цел:",
+ "translate-smg-group-message-message-replacement": "Замена:",
+ "translate-smg-group-message-message-other-langs": "Други јазици:",
+ "translate-smg-loading": "Вчитувам...",
+ "translate-smg-unknown-error": "Се појави непозната грешка при обработката на вашето барање.",
+ "translate-manage-import-diff": "Порака $1 | Дејства: $2",
+ "translate-manage-import-new": "Нова порака $1",
+ "translate-manage-import-deleted": "Избришана порака $1",
+ "translate-manage-action-import": "Увези",
+ "translate-manage-action-conflict": "Увези и обележи како неисправно",
+ "translate-manage-action-ignore": "Занемари",
+ "translate-manage-action-fuzzy": "Увези и обележи ги преводите како неисправни",
+ "translate-manage-action-rename-fuzzy": "Преименување и обележано како неисправно",
+ "translate-manage-action-rename": "Преименување",
+ "translate-manage-action-ignore-change": "Занемари променет превод",
+ "translate-manage-nochanges": "Нема промени во одредбите на пораките за оваа група.",
+ "translate-manage-nochanges-other": "Нема за овој јазик.\nУпотребете ја врската подолу за да се вратите на прегледот на подробности за групата.",
+ "translate-manage-inconsistent": "Откриена е недоследност во барањето.\nПроверете дали има промени и обидете се повторно.\nПодробности : $1.",
+ "translate-manage-toolong": "Пречекорен е временскиот рок за обработка од {{PLURAL:$1|една секунда|$1 секунди}}.\nПоднесете го образецот одново за да продолжите со обработката.",
+ "translate-manage-import-summary": "Увезување на нова верзија од надворешен извор",
+ "translate-manage-import-ignore": "Ја прескокнувам пораката $1.",
+ "translate-manage-import-rename-summary": "Преименуван во надворешен извор",
+ "translate-manage-conflict-summary": "Увезување на нова верзија од надворешен извор.\nПроверете.",
+ "translate-manage-submit": "Изврши",
+ "translate-manage-intro-other": "Еве список на промени во преводите на јазикот $1.\nПрегледајте ги пораките и изберете го дејството што сакате да го направите за секоја поднова.\nАко изберете да ги занемарите промените, ова дејство ќе биде само привремено.",
+ "translate-manage-import-ok": "Увезена: $1",
+ "translate-manage-import-done": "Увозот е готов!",
+ "translate-manage-empty-content": "Содржината е празна",
+ "translate-manage-key-reused": "Оваа порака веќе постои на викито. Проверете да не станува збор за случајна преупотреба на стар клуч.",
+ "translate-manage-source-message-not-found": "Не пронајдов одредбата на пораката",
+ "importtranslations": "Увези преводи",
+ "translate-import-from-local": "Месно подигање на податотека:",
+ "translate-import-load": "Вчитај податотека",
+ "translate-import-err-dl-failed": "Не можам да ја преземам податотеката:\n$1",
+ "translate-import-err-ul-failed": "Подигањето на податотеката не успеа",
+ "translate-import-err-invalid-title": "Наведеното име на податотеката <nowiki>$1</nowiki> е погрешно.",
+ "translate-import-err-no-such-file": "Податотеката <nowiki>$1</nowiki> не постои или не е подигната месно.",
+ "translate-import-err-stale-group": "Податотекава припаѓа на непостоечка група пораки.",
+ "translate-import-err-no-headers": "Податотеката не е добро обликувана Gettext податотека во форматот за преведување на додатоци:\nНе можам да одредам група и јазик од насловите на податотеката.",
+ "translate-js-support-unsaved-warning": "Имате необјавени преводи.",
+ "translate-gs-pos": "Место",
+ "translate-gs-code": "Код",
+ "translate-gs-continent": "Континент",
+ "translate-gs-speakers": "Говорници",
+ "translate-gs-score": "Оцена",
+ "translate-gs-multiple": "Повеќе",
+ "translate-gs-count": "Број",
+ "translate-gs-total": "Вкупно",
+ "translate-gs-avgscore": "Средн. оцена",
+ "translate-documentation-language": "документација на пораки",
+ "translate-searchprofile": "Преводи",
+ "translate-searchprofile-tooltip": "Пребарување по сите преводи",
+ "translate-searchprofile-note": "Повеќе можности за пребарување ќе најдете на [$1 пребарувачот на преводи].",
+ "translate-search-languagefilter": "Филтрирај по јазик:",
+ "translate-search-nofilter": "Без филтрирање",
+ "log-name-translationreview": "Дневник на проверки на преводи",
+ "log-description-translationreview": "Дневник на сите проверки на преводи и групи пораки",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|го провери}} преводот $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|ја измени}} состојбата на преводите на $4 во групата $3 од $6 на $7",
+ "group-translate-sandboxed": "Неодобрени преведувачи",
+ "group-translate-sandboxed-member": "{{GENDER:$1|неодобрен преведувач}}",
+ "right-translate-sandboxmanage": "Раководење со корисници во песочник",
+ "action-translate-sandboxmanage": "раководење со корисници во песочник",
+ "right-translate-sandboxaction": "Вршење на дејства дозволени за корисници во песочникот",
+ "action-translate-sandboxaction": "вршење на дејства на дозволени за корисници во песочникот",
+ "translate-workflow-state-": "(незададен)",
+ "translate-workflowstatus": "Статус: $1",
+ "translate-workflow-set-doing": "Задавам...",
+ "translate-workflow-autocreated-summary": "Автоматско создавање на страница за работната состојба $1",
+ "translate-stats-workflow": "Состојба",
+ "translate-workflowgroup-label": "Работни состојби",
+ "translate-workflowgroup-desc": "Оваа група пораки ја прикажува работната состојба на преводите.\nСостојбите се одредуваат со променливата $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Скорешни преводи",
+ "translate-dynagroup-recent-desc": "Оваа група пораки ги прикажува сите скорешни преводи на овој јазик.\nОва е најкорисно при вршењето на прегледи.",
+ "translate-dynagroup-additions-label": "Неодамна додадени",
+ "translate-dynagroup-additions-desc": "Оваа група пораки прикажува нови и изменети пораки",
+ "translate-msggroupselector-projects": "Група пораки",
+ "translate-msggroupselector-search-placeholder": "Пребарајте групи",
+ "translate-msggroupselector-search-all": "Сите",
+ "translate-msggroupselector-search-recent": "Скорешни",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|подгрупа|подгрупи}}",
+ "tux-languageselector": "Преведи на",
+ "tux-select-target-language": "Целен јазик за преводот",
+ "tux-tab-all": "Сите",
+ "tux-tab-untranslated": "Непреведени",
+ "tux-tab-outdated": "Застарени",
+ "tux-tab-translated": "Преведени",
+ "tux-tab-unproofread": "Непроверени",
+ "tux-edit": "Уреди",
+ "tux-status-optional": "Незадолжително",
+ "tux-status-fuzzy": "Застарено",
+ "tux-status-proofread": "Проверено",
+ "tux-status-translated": "Преведено",
+ "tux-status-saving": "Објавувам...",
+ "tux-status-unsaved": "Необјавено",
+ "tux-save-unknown-error": "Се појави непозната грешка.",
+ "tux-editor-placeholder-documentation": "Додај документација на пораката",
+ "tux-editor-placeholder-language": "Вашиот превод на $1",
+ "tux-editor-editsummary-placeholder": "Објаснете ги вашите промени (незадолжително)",
+ "tux-editor-paste-original-button-label": "Вметни изворен текст",
+ "tux-editor-discard-changes-button-label": "Отфрли промени",
+ "tux-editor-save-button-label": "Објави превод",
+ "tux-editor-skip-button-label": "Прејди на следно",
+ "tux-editor-cancel-button-label": "Откажи",
+ "tux-editor-confirm-button-label": "Потврди превод",
+ "tux-editor-proofread-button-label": "Означи како проверено",
+ "tux-editor-shortcut-info": "Стиснете на „$1“ за да потврдите и да прејдете на следната порака, „$2“ за да прескокнете, „$4“ за да весете опис или држете го „$3“ за да видите други кратенки.",
+ "tux-editor-edit-desc": "Уреди документација",
+ "tux-editor-add-desc": "Додај документација",
+ "tux-editor-suggestions-title": "Предлози",
+ "tux-editor-latest-updates-title": "Последни поднови",
+ "tux-editor-changes-without-summary": "$1 {{PLURAL:$1|поднова|поднови}} без опис",
+ "tux-editor-all-changes": "Сите промени",
+ "tux-editor-in-other-languages": "На други јазици",
+ "tux-editor-need-more-help": "Ви треба повеќе помош?",
+ "tux-editor-ask-help": "Побарајте уште информации",
+ "tux-editor-tm-match": "$1% совпаѓање",
+ "tux-notices-more": "{{PLURAL:$1|уште $1}}",
+ "tux-notices-hide": "скриј",
+ "tux-editor-save-failed": "Не успеав да го објавам преводот: $1",
+ "tux-editor-n-uses": "употребено {{PLURAL:$1|еднаш|$1 пати}}",
+ "tux-editor-message-desc-more": "Погл. уште",
+ "tux-editor-message-desc-less": "Погл. помалку",
+ "tux-editor-clear-translated": "Скриј преведени",
+ "tux-editor-proofreading-mode": "Провери",
+ "tux-editor-translate-mode": "Список",
+ "tux-editor-proofreading-hide-own-translations": "Скриј мои преводи",
+ "tux-editor-proofreading-show-own-translations": "Прикажи мои преводи",
+ "tux-proofread-action-tooltip": "Означи како проверено",
+ "tux-proofread-edit-label": "Уреди",
+ "tux-editor-page-mode": "Страница",
+ "tux-editor-outdated-notice": "На преводов може да му треба поднова.",
+ "tux-editor-outdated-notice-diff-link": "Прик. разлики",
+ "tux-editor-doc-editor-placeholder": "Документација на пораката",
+ "tux-editor-doc-editor-save": "Објави документација",
+ "tux-editor-doc-editor-cancel": "Откажи",
+ "tux-messagetable-more-messages": "уште {{PLURAL:$1|една порака|$1 пораки}}",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|Ја вчитувам пораката|Ги вчитувам пораките}}...",
+ "tux-message-filter-placeholder": "Филтрирај список",
+ "tux-message-filter-result": "Пронајдов $1 {{PLURAL:$1|ставка|ставки}} за „$2“",
+ "tux-message-filter-advanced-button": "Напредно пребарување",
+ "tux-message-filter-optional-messages-label": "Незадолжителни пораки",
+ "tux-proofread-translated-by-self": "Преведено од Вас",
+ "tux-empty-list-all": "Оваа група пораки е празна",
+ "tux-empty-list-all-guide": "Изберете друга група пораки за преведување",
+ "tux-translate-page-no-such-group": "<strong>Укажаната група пораки на постои.</strong> Изберете друга.",
+ "tux-empty-list-translated": "Нема преведени пораки",
+ "tux-empty-list-translated-guide": "Можете да помогнете со преводите",
+ "tux-empty-list-translated-action": "Преведи",
+ "tux-empty-no-messages-to-display": "Нема пораки за приказ.",
+ "tux-empty-there-are-optional": "Има незадолжителни пораки што не се прикажани на списокот",
+ "tux-empty-show-optional-messages": "Прикажи незадолжителни пораки",
+ "tux-empty-no-outdated-messages": "Нема застарени пораки",
+ "tux-empty-nothing-to-proofread": "Нема ништо за проверка",
+ "tux-empty-you-can-help-providing": "Можете да помогнете со нови преводи",
+ "tux-empty-nothing-new-to-proofread": "Нема ништо ново за проверка",
+ "tux-empty-you-can-review-already-proofread": "Можете да ги прегледате преводите веќе проверени од други.",
+ "tux-empty-list-other": "Нема ништо за преведување",
+ "tux-empty-list-other-guide": "Можете да помогнете со проверката на постоечките преводи",
+ "tux-empty-list-other-action": "Провери преводи",
+ "tux-empty-list-other-link": "Прикажи ги сите пораки",
+ "tux-editor-close-tooltip": "Затвори",
+ "tux-editor-expand-tooltip": "Прикажи",
+ "tux-editor-collapse-tooltip": "Собери",
+ "tux-editor-message-tools-show-editor": "Прикажи во викиуредник",
+ "tux-editor-message-tools-history": "Историја",
+ "tux-editor-message-tools-delete": "Избриши",
+ "tux-editor-message-tools-translations": "Сите преводи",
+ "tux-editor-message-tools-linktothis": "Врска до поракава",
+ "tux-editor-loading": "Вчитувам...",
+ "tux-editor-loading-failed": "Не успеав да ги вчитам преводните помагала: $1",
+ "translate-search-more-languages-info": "уште {{PLURAL:$1|еден јазик|$1 јазици}}",
+ "translate-statsbar-tooltip": "$1% преведени, $2% проверени",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% преведени, $2% проверени, $3% застарени",
+ "translate-search-more-groups-info": "Уште {{PLURAL:$1|една група|$1 групи}}",
+ "translate-syntax-error": "Преводот содржи синтаксни грешки",
+ "tux-session-expired": "Повеќе не сте најавени. Најавете се во друго јазиче. Можете и некаде да ги прекопирате незачуваните преводи, па да се најавите и да се навратите на страницава, и потоа внесете ги преводите повторно.",
+ "tux-nojs": "Оваа алатка не работи без JavaScript. JavaScript е исклучен, не работи или прелистувачот не е поддржан.",
+ "specialpages-group-translation": "Преведување",
+ "content-model-translate-messagebundle": "Купче преводливи пораки",
+ "translate-messagebundle-validation-error": "Неважечко купче пораки: $1",
+ "translate-messagebundle-error-parsing": "Грешка при расчленувањето на JSON: $1",
+ "translate-messagebundle-error-invalid-array": "Купчето пораки мора да биде JSON-објект. Го добив видот $1",
+ "translate-messagebundle-error-key-empty": "Купчето пораки не смее да содржи празен клуч",
+ "translate-messagebundle-error-key-too-long": "Клучот „$1“ е предолг",
+ "translate-messagebundle-error-key-invalid-characters": "Клучот „$1“ содржи недозволени знаци",
+ "translate-messagebundle-error-invalid-value": "Клучот „$1“ не содржи низна вредност",
+ "translate-messagebundle-error-empty-value": "Купчето „$1“ нема вредност",
+ "translate-messagebundle-error-metadata-type": "Метаподатоците мора да бидат строј.",
+ "translate-messagebundle-error-invalid-metadata": "Одделот со метаподатоци содржи непознат клуч: „$1“. Поддржани се клучевите $2.",
+ "translate-messagebundle-error-invalid-sourcelanguage": "Изворниот јазичен код „$1“ не е поддржан.",
+ "translate-messagebundle-error-invalid-prioritylanguage": "{{PLURAL:$2|Неважечки код на приоритетен јазик|Неважечки кодови на приоритетни јазици}} во метаподатоците: $1",
+ "translate-messagebundle-error-invalid-prioritylanguage-format": "Неважечки формат на приоритетен јазик во метаподатоците. Приоритетните јазици мора да бидат строј од низи.",
+ "translate-messagebundle-group-description": "Пораки од купче дефинирани на страницата [[$2|$1]].",
+ "translate-messagebundle-change-sourcelanguage": "Задавање на изворен јазик на купчето пораки согласно метаподатоците.",
+ "translate-messagebundle-sourcelanguage-changed": "Изворниот јазик на купчето пораки не може да се смени откако ќе се создаде.",
+ "log-action-filter-translationreview": "Вид дејство:",
+ "log-action-filter-translationreview-message": "Проверка на поединечни пораки за превод",
+ "log-action-filter-translationreview-group": "Промени во напредокот на преведувањата"
+}
diff --git a/Translate/i18n/core/ml.json b/Translate/i18n/core/ml.json
new file mode 100644
index 00000000..10b14807
--- /dev/null
+++ b/Translate/i18n/core/ml.json
@@ -0,0 +1,277 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jacob.jose",
+ "Lavalsal",
+ "Praveenp",
+ "Santhosh.thottingal",
+ "Shijualex",
+ "Vssun"
+ ]
+ },
+ "translate": "വിവർത്തനം ചെയ്യുക",
+ "translate-desc": "മീഡിയവിക്കിയും മറ്റുള്ളവയും തർജ്ജമ ചെയ്യാനുള്ള [[Special:Translate|പ്രത്യേക താൾ]]",
+ "translate-taskui-export-to-file": "സഹജമായ ഫോർമാറ്റിൽ കയറ്റുമതി ചെയ്യുക",
+ "translate-taskui-export-as-po": "ഓഫ്-ലൈൻ പരിഭാഷയ്ക്കായി കയറ്റുമതി ചെയ്യുക",
+ "translate-taction-translate": "പരിഭാഷപ്പെടുത്തുക",
+ "translate-taction-proofread": "സംശോധനം ചെയ്യുക",
+ "translate-taction-lstats": "ഭാഷയുടെ സ്ഥിതിവിവരക്കണക്കുകൾ",
+ "translate-taction-mstats": "സന്ദേശ ഗണത്തിന്റെ സ്ഥിതിവിവരക്കണക്കുകൾ",
+ "translate-taction-export": "കയറ്റുമതി ചെയ്യുക",
+ "translate-taction-disabled": "ഈ വിക്കിയിൽ ഈ പ്രവൃത്തി പ്രവർത്തനരഹിതമാക്കിയിരിക്കുകയാണ്.",
+ "translate-page-no-such-language": "തിരഞ്ഞെടുത്ത ഭാഷ അസാധുവാണ്‌.",
+ "translate-page-no-such-group": "തിരഞ്ഞെടുത്ത ഗണം അസാധുവാണ്‌.",
+ "translate-page-disabled": "ഈ ഗണത്തിലുള്ള സന്ദേശങ്ങൾക്ക് ഈ ഭാഷയിലുള്ള പരിഭാഷ നിരോധിച്ചിരിക്കുന്നു. കാരണം:\n\n<em>$1</em>",
+ "translate-language-disabled": "ഈ ഭാഷയിലേയ്ക്കുള്ള പരിഭാഷ പ്രവർത്തനരഹിതമാക്കിയിരിക്കുകയാണ്.",
+ "translate-page-settings-legend": "സജ്ജീകരണങ്ങൾ",
+ "translate-page-group": "ഗണം",
+ "translate-page-language": "ഭാഷ",
+ "translate-page-limit": "പരിധി",
+ "translate-page-limit-option": "ഒരു താളിൽ $1 {{PLURAL:$1|സന്ദേശം|സന്ദേശങ്ങൾ}}",
+ "translate-submit": "എടുക്കുക",
+ "translate-page-navigation-legend": "വഴികാട്ടി",
+ "translate-page-showing": "$3 സന്ദേശങ്ങളുള്ളതിൽ $1 മുതൽ $2 വരെയുള്ളവ പ്രദർശിപ്പിച്ചിരിക്കുന്നു",
+ "translate-page-showing-all": "$1 {{PLURAL:$1|സന്ദേശം|സന്ദേശങ്ങൾ}} പ്രദർശിപ്പിക്കുന്നു.",
+ "translate-page-showing-none": "പ്രദർശിപ്പിക്കുവാൻ സന്ദേശങ്ങളില്ല.",
+ "translate-next": "അടുത്ത താൾ",
+ "translate-prev": "മുൻപത്തെ താൾ",
+ "translate-page-description-legend": "ഗണത്തെക്കുറിച്ചുള്ള വിവരങ്ങൾ",
+ "translate-page-description-hasoptional": "ഈ സന്ദേശഗണത്തിൽ ഐച്ഛിക സന്ദേശങ്ങളുണ്ട്.\nതാങ്കളുടെ ഭാഷയ്ക്ക് പ്രത്യേക ആവശ്യങ്ങളുള്ളപ്പോൾ, അതായത് ഇട നൽകിയെഴുതേണ്ടി വരികയോ സാമാന്യനാമങ്ങൾ ലിപിമാറ്റം ചെയ്യേണ്ടി വരുമ്പഴോ മറ്റോ മാത്രമേ ഐച്ഛിക സന്ദേശങ്ങൾ പരിഭാഷപ്പെടുത്തേണ്ടതുള്ളു. $1",
+ "translate-page-description-hasoptional-open": "ഐച്ഛിക സന്ദേശങ്ങൾ പ്രദർശിപ്പിക്കുക.",
+ "translate-page-edit": "തിരുത്തുക",
+ "translate-optional": "(നിർബന്ധമില്ല)",
+ "translate-ignored": "(അവഗണിച്ചിരിക്കുന്നു)",
+ "translate-edit-title": "\"$1\" തിരുത്തുക",
+ "translate-edit-definition": "സന്ദേശത്തിന്റെ നിർ‌വചനം",
+ "translate-edit-contribute": "തിരുത്തുക",
+ "translate-edit-no-information": "''ഈ സന്ദേശത്തിനു ഡോക്കുമെന്റേഷൻ ഇല്ല.\nഈ സന്ദേശം എങ്ങനെയാണു ഉപയോഗിക്കപ്പെടുന്നത് എന്ന് താങ്കൾക്ക് അറിയാമെങ്കിൽ, അതിനെകുറിച്ചുള്ള ഡോക്കുമെന്റേഷൻ ചേർത്ത് താങ്കൾക്ക് മറ്റുള്ള പരിഭാഷകർക്കു സഹായമേകാം.''",
+ "translate-edit-information": "സന്ദേശത്തെക്കുറിച്ചുള്ള വിശദീകരണം ($1)",
+ "translate-edit-warnings": "അപൂർണ്ണമായ പരിഭാഷയെക്കുറിച്ചുള്ള മുന്നറിയിപ്പ്",
+ "translate-edit-tmmatch-source": "പരിഭാഷയുടെ മൂലരൂപം: $1",
+ "translate-edit-tmmatch": "$1% പൊരുത്തപ്പെടുന്നു",
+ "translate-edit-nopermission": "ഈ സന്ദേശങ്ങൾ പരിഭാഷപ്പെടുത്താൻ താങ്കൾ അനുമതി നേടേണ്ടതുണ്ട്.",
+ "translate-edit-askpermission": "അനുമതി അഭ്യർത്ഥിക്കുക",
+ "translate-checks-parameters": "ഇനിക്കൊടുക്കുന്ന {{PLURAL:$2|ചരം|ചരങ്ങൾ}} ഉപയോഗിച്ചിട്ടില്ല:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "ഇനിക്കൊടുക്കുന്ന {{PLURAL:$2|ചരം|ചരങ്ങൾ}} വ്യക്തമല്ല:\n<strong>$1</strong>",
+ "translate-checks-balance": "{{PLURAL:$2|കോഷ്ഠകങ്ങളുടെ|കോഷ്ഠകങ്ങളുടെ}} എണ്ണം ഇരട്ടയല്ല:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "ഇനിക്കൊടുക്കുന്ന {{PLURAL:$2|കണ്ണി|$2 കണ്ണികൾ}} പ്രശ്നകാരിയാണ്:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "ഇനിക്കൊടുക്കുന്ന {{PLURAL:$2|കണ്ണി|$2 കണ്ണികൾ}} ചേർത്തിട്ടില്ല:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "നിർ‌വചനം <nowiki>{{PLURAL:}}</nowiki> ഉപയോഗിക്കുന്നു, പക്ഷെ പരിഭാഷ ഉപയോഗിക്കുന്നില്ല.",
+ "translate-checks-pagename": "നാമമേഖല നിർവ്വചനത്തിൽ നിന്നും മാറിയിരിക്കുന്നു",
+ "translate-checks-format": "ഈ പരിഭാഷ നിർവ്വചനം അനുസരിച്ചുള്ളതല്ല അല്ലെങ്കിൽ അസാധുവായ എഴുത്തുരീതി ഉൾപ്പെടുന്നു: $1",
+ "translate-checks-fudforum-syntax": "ഈ പദ്ധതിയിൽ <nowiki>$2</nowiki> എന്നതിനു പകരം <nowiki>$1</nowiki> എന്നുപയോഗിക്കുക.",
+ "translate-pref-editassistlang": "സഹായ ഭാഷകൾ:",
+ "prefs-translate": "പരിഭാഷാ ഐച്ഛികങ്ങൾ",
+ "translate-pref-editassistlang-help": "അല്പവിരാമം ഉപയോഗിച്ച് വേർപെടുത്തിയിരിക്കുന്ന ഭാഷാ കോഡുകളുടെ പട്ടിക. \nതാങ്കൾ പരിഭാഷപ്പെടുത്തുമ്പോൾ ഈ ഭാഷകളിലെ പരിഭാഷകൾ കാണിക്കുന്നതാണ്. \nസ്വതേ നൽകുന്ന പട്ടിക താങ്കളുടെ ഭാഷയെ ആശ്രയിച്ചുള്ളതായിരിക്കും",
+ "translate-pref-editassistlang-bad": "പട്ടികയിലെ അസാധുവായ ഭാഷ കോഡ്:\n<nowiki>$1</nowiki>.",
+ "right-translate": "പരിഭാഷയ്ക്കുള്ള സമ്പർക്കമുഖമുപയോഗിച്ച് തിരുത്തുക",
+ "right-translate-manage": "സന്ദേശ സഞ്ചയങ്ങളുടെ കൈകാര്യം",
+ "action-translate-manage": "സന്ദേശഗണങ്ങൾ കൈകാര്യം ചെയ്യുക",
+ "right-translate-import": "ഓഫ്‌ലൈൻ പരിഭാഷകൾ ഇറക്കുമതി ചെയ്യുക",
+ "action-translate-import": "ഓഫ്‌ലൈനായിട്ടുള്ള പരിഭാഷകൾ കയറ്റുമതി ചെയ്യുക",
+ "right-translate-messagereview": "പരിഭാഷകൾ സംശോധനം ചെയ്യുക",
+ "action-translate-messagereview": "പരിഭാഷകൾ സംശോധനം ചെയ്യുക",
+ "right-translate-groupreview": "സന്ദേശഗണങ്ങളുടെ വർക്ക്‌ഫ്ലോ സ്ഥിതിയിൽ മാറ്റം വരുത്തുക",
+ "action-translate-groupreview": "സന്ദേശഗണങ്ങളുടെ വർക്ക്‌ഫ്ലോ സ്ഥിതിയിൽ മാറ്റം വരുത്തുക",
+ "translate-rcfilters-translations": "പരിഭാഷകൾ",
+ "translate-rcfilters-translations-only-label": "പരിഭാഷകൾ",
+ "translate-rcfilters-translations-only-desc": "പരിഭാഷപ്പെടുത്തിയ താളുകളിലെ മാറ്റങ്ങൾ.",
+ "translate-rcfilters-translations-filter-label": "പരിഭാഷകൾ വേണ്ട",
+ "translate-rcfilters-translations-filter-desc": "പരിഭാഷകൾ അല്ലാത്ത എല്ലാ മാറ്റങ്ങളും.",
+ "translate-rcfilters-translations-site-label": "സൈറ്റ് സന്ദേശങ്ങൾ",
+ "translate-rcfilters-translations-site-desc": "മീഡിയവിക്കി നാമമേഖലയിലുള്ള സൈറ്റ് സന്ദേശങ്ങളിലെ മാറ്റങ്ങൾ.",
+ "translate-rc-translation-filter": "പരിഭാഷകൾ അരിച്ചെടുക്കുക:",
+ "translate-rc-translation-filter-no": "ഒന്നും ചെയ്യേണ്ടതില്ല",
+ "translate-rc-translation-filter-only": "പരിഭാഷകൾ മാത്രം പ്രദർശിപ്പിക്കുക",
+ "translate-rc-translation-filter-filter": "പരിഭാഷകൾ അരിച്ചെടുക്കുക",
+ "translate-rc-translation-filter-site": "സൈറ്റിലെ സന്ദേശങ്ങളുടെ മാറ്റങ്ങൾ മാത്രം",
+ "translationstats": "പരിഭാഷയുടെ സ്ഥിതിവിവരക്കണക്കുകൾ",
+ "translate-stats-edits": "തിരുത്തുകൾ",
+ "translate-stats-users": "പരിഭാഷകർ",
+ "translate-stats-registrations": "രജിസ്ട്രേഷനുകൾ",
+ "translate-stats-reviews": "സംശോധനങ്ങൾ",
+ "translate-stats-reviewers": "സംശോധകർ",
+ "translate-statsf-intro": "ഈ ഫോം ഉപയോഗിച്ച് താങ്കൾക്ക് ലളിതമായ സ്ഥിതിവിവരക്കണക്കുകൾ സൃഷ്ടിക്കാവുന്നതാണ്.\nഎല്ലാ വിലകൾക്കും ഉയർന്നതും താഴ്ന്തുമായ പരിധിയുണ്ട്.",
+ "translate-statsf-options": "ഗ്രാഫിന്റെ ഐച്ഛികങ്ങൾ",
+ "translate-statsf-width": "വീതി പിക്സലിൽ:",
+ "translate-statsf-height": "ഉയരം പിക്സലിൽ:",
+ "translate-statsf-days": "കാലയളവ് (ദിവസങ്ങളിൽ):",
+ "translate-statsf-start": "തുടങ്ങുന്ന തീയതി:",
+ "translate-statsf-scale": "കണികാത്മതക",
+ "translate-statsf-scale-months": "മാസങ്ങൾ",
+ "translate-statsf-scale-weeks": "ആഴ്‌‌ചകൾ",
+ "translate-statsf-scale-days": "ദിവസങ്ങൾ",
+ "translate-statsf-scale-hours": "മണിക്കൂറുകൾ",
+ "translate-statsf-count": "അളവ്:",
+ "translate-statsf-count-edits": "ആകെ തിരുത്തുകൾ",
+ "translate-statsf-count-users": "സജീവ പരിഭാഷകർ",
+ "translate-statsf-count-registrations": "പുതിയ ഉപയോക്താക്കൾ",
+ "translate-statsf-count-reviews": "പരിഭാഷാ സംശോധനകൾ",
+ "translate-statsf-count-reviewers": "സംശോധകർ",
+ "translate-statsf-language": "അല്പവിരാമത്താൽ വിഭജിക്കപ്പെട്ടിട്ടുള്ള ഭാഷാകോഡുകളുടെ പട്ടിക",
+ "translate-statsf-group": "കോഡ് ഗണങ്ങളുടെ അല്പവിരാമചിഹ്നത്താൽ വിഭജിക്കപ്പെട്ട പട്ടിക",
+ "translate-statsf-submit": "എങ്ങനെയുണ്ടെന്ന് കാണുക",
+ "translate-tag-page-desc": "$3 ($4) ഭാഷയിലെ [[$2|$1]] എന്ന വിക്കി താളിന്റെ തർജ്ജമ.",
+ "translate-sidebar-alltrans": "ഇതര ഭാഷകളിൽ",
+ "translations": "എല്ലാ തർജ്ജമകളും",
+ "translations-summary": "ലഭ്യമായ എല്ലാ പരിഭാഷകളും പ്രദർശിക്കപ്പെടാൻ താഴെ സന്ദേശത്തിന്റെ പേര് നൽകുക.",
+ "translate-translations-no-message": "\"$1\" പരിഭാഷപ്പെടുത്താവുന്ന സന്ദേശമല്ല",
+ "translate-translations-none": "\"$1\" എന്നതിന് പരിഭാഷയൊന്നും നിലവിലില്ല",
+ "translate-translations-count": "{{PLURAL:$1|ഒരു പരിഭാഷ|$1 പരിഭാഷകൾ}} കണ്ടെത്തി.",
+ "translate-translations-fieldset-title": "സന്ദേശം",
+ "translate-translations-messagename": "പേര്‌:",
+ "translate-translations-project": "പദ്ധതി:",
+ "translate-translations-including-no-param": "ദയവായി ഉപതാൾ ചരത്തിനായി സാധുവായ ഒരു സന്ദേശ ചാവി വ്യക്തമാക്കുക",
+ "translate-translations-history-short": "നാ",
+ "languagestats": "ഭാഷയുടെ സ്ഥിതിവിവരക്കണക്കുകൾ",
+ "languagestats-summary": "എല്ലാ സന്ദേശ സഞ്ചയങ്ങളുടെയും ഒരു ഭാഷയിലെ പരിഭാഷാ സ്ഥിതിവിവരം ഈ താളിൽ കാണാം.",
+ "languagestats-stats-for": "$1 ഭാഷയുടെ പരിഭാഷാ സ്ഥിതിവിവരം ($2)",
+ "languagestats-recenttranslations": "സമീപകാല പരിഭാഷകൾ",
+ "translate-langstats-incomplete": "ഈ താളിലെ ചില സ്ഥിതിവിവരക്കണക്കുകൾ അപൂർണ്ണമാണ്. കൂടുതൽ സ്ഥിതിവിവരക്കണക്കുകൾ ലഭിക്കാൻ താൾ വീണ്ടും എടുക്കുക.",
+ "translate-langstats-expand": "വികസിപ്പിക്കുക",
+ "translate-langstats-collapse": "ചുരുക്കുക",
+ "translate-langstats-expandall": "എല്ലാം വികസിപ്പിക്കുക",
+ "translate-langstats-collapseall": "എല്ലാം ചുരുക്കുക",
+ "translate-language-code": "ഭാഷയുടെ കോഡ്",
+ "translate-language-code-field-name": "ഭാഷയുടെ കോഡ്:",
+ "translate-suppress-complete": "പൂർണ്ണമായും പരിഭാഷപ്പെടുത്തിയ സന്ദേശഗണങ്ങൾ ഒതുക്കുക",
+ "translate-ls-noempty": "ഒട്ടും പരിഭാഷ ചെയ്യാത്ത സന്ദേശഗണങ്ങൾ ഒതുക്കുക",
+ "translate-language": "ഭാഷ",
+ "translate-total": "സന്ദേശങ്ങൾ",
+ "translate-untranslated": "പരിഭാഷപ്പെടുത്താത്തവ",
+ "translate-percentage-complete": "പൂർണ്ണത",
+ "translate-percentage-fuzzy": "കാലഹരണപ്പെട്ടവ",
+ "translate-languagestats-overall": "എല്ലാ സന്ദേശഗണങ്ങളും ഒരുമിച്ച്",
+ "translate-ls-submit": "സ്ഥിതിവിവരക്കണക്കുകൾ പ്രദർശിപ്പിക്കുക",
+ "translate-ls-column-group": "സന്ദേശ ഗണം",
+ "translate-mgs-pagename": "സന്ദേശ ഗണത്തിന്റെ സ്ഥിതിവിവരക്കണക്കുകൾ",
+ "translate-mgs-fieldset": "ക്രമീകരണങ്ങൾ പ്രദർശിപ്പിക്കുക",
+ "translate-mgs-group": "സന്ദേശ ഗണം:",
+ "translate-mgs-nocomplete": "പരിഭാഷ പൂർത്തിയായ ഭാഷകൾ പ്രദർശിപ്പിക്കാതിരിക്കുക",
+ "translate-mgs-submit": "സ്ഥിതിവിവരക്കണക്കുകൾ പ്രദർശിപ്പിക്കുക",
+ "translate-mgs-column-language": "ഭാഷ",
+ "translate-mgs-totals": "ഒരുമിച്ച് എല്ലാ ഭാഷകളും",
+ "supportedlanguages": "പിന്തുണയ്ക്കുന്ന ഭാഷകൾ",
+ "supportedlanguages-translators": "{{PLURAL:$2|പരിഭാഷക(ൻ)|പരിഭാഷകർ}}: $1",
+ "supportedlanguages-recenttranslations": "സമീപകാല പരിഭാഷകൾ",
+ "supportedlanguages-count": "ആകെ {{PLURAL:$1|ഒരു ഭാഷ|$1 ഭാഷകൾ}}.",
+ "translate-jssti-add": "പട്ടികയിലേക്ക് ചേർക്കുക",
+ "managemessagegroups": "സന്ദേശഗണങ്ങളുടെ മേൽനോട്ടം",
+ "translate-smg-notallowed": "ഇതു ചെയ്യാൻ താങ്കൾക്കനുവാദമില്ല",
+ "translate-manage-import-new": "പുതിയ സന്ദേശം $1",
+ "translate-manage-import-deleted": "മായ്ക്കപ്പെട്ട സന്ദേശം $1",
+ "translate-manage-action-import": "ഇറക്കുമതി ചെയ്യുക",
+ "translate-manage-action-ignore": "അവഗണിക്കുക",
+ "translate-manage-submit": "നടപ്പിലാക്കുക",
+ "translate-manage-import-ok": "$1 എന്ന താളിന്റെ പുതിയ പതിപ്പ് ഇറക്കുമതി ചെയ്തിരിക്കുന്നു.",
+ "translate-manage-import-done": "എല്ലാം ചെയ്തു!",
+ "importtranslations": "പരിഭാഷകളുടെ ഇറക്കുമതി",
+ "translate-import-from-local": "അപ്‌ലോഡ് ചെയ്യേണ്ട പ്രാദേശിക പ്രമാണം:",
+ "translate-import-load": "പ്രമാണം എടുക്കുക",
+ "translate-import-err-ul-failed": "പ്രമാണം അപ്‌ലോഡ് ചെയ്യൽ വിജയകരമല്ലായിരുന്നു",
+ "translate-js-support-unsaved-warning": "താങ്കൾ സേവ് ചെയ്യാത്ത പരിഭാഷകൾ ഉണ്ട്.",
+ "translate-gs-pos": "സ്ഥാനം",
+ "translate-gs-code": "കോഡ്",
+ "translate-gs-continent": "ഭൂഖണ്ഡം",
+ "translate-gs-speakers": "സംസാരിക്കുന്നവർ",
+ "translate-gs-score": "സ്കോർ",
+ "translate-gs-multiple": "വിവിധം",
+ "translate-gs-count": "എണ്ണം",
+ "translate-gs-total": "ആകെ",
+ "translate-gs-avgscore": "ശരാശരി സ്കോർ",
+ "translate-documentation-language": "സന്ദേശ വിവരണം",
+ "translate-searchprofile": "പരിഭാഷകൾ",
+ "translate-searchprofile-tooltip": "എല്ലാ പരിഭാഷകളിൽ നിന്നും തിരയുക",
+ "translate-search-languagefilter": "ഭാഷയനുസരിച്ച് എടുക്കുക:",
+ "log-name-translationreview": "പരിഭാഷാ സംശോധന രേഖ",
+ "translate-workflow-state-": "(സജ്ജീകരിച്ചിട്ടില്ല)",
+ "translate-workflowstatus": "സ്ഥിതി : $1",
+ "translate-workflow-set-doing": "സജ്ജീകരിക്കുന്നു...",
+ "translate-stats-workflow": "സ്ഥിതി",
+ "translate-workflowgroup-label": "വർക്ക്‌ഫ്ലോ സ്ഥിതികൾ",
+ "translate-dynagroup-recent-label": "സമീപകാല പരിഭാഷകൾ",
+ "translate-dynagroup-additions-label": "സമീപകാലത്ത് ചേർത്തവ",
+ "translate-dynagroup-additions-desc": "പുതിയതും മാറ്റം വന്നതുമായ ആയ സന്ദേശങ്ങൾ കാണിക്കുന്നു",
+ "translate-msggroupselector-projects": "സന്ദേശഗണങ്ങൾ",
+ "translate-msggroupselector-search-placeholder": "സന്ദേശഗണങ്ങൾ തിരയുക",
+ "translate-msggroupselector-search-all": "എല്ലാം",
+ "translate-msggroupselector-search-recent": "സമീപകാലം",
+ "translate-msggroupselector-view-subprojects": "{{PLURAL:$1|$1 ഉപസംരംഭം|$1 ഉപസംരംഭങ്ങൾ}}",
+ "tux-languageselector": "ഇതിലേയ്ക്ക് തർജ്ജമ ചെയ്യുക",
+ "tux-tab-all": "എല്ലാം",
+ "tux-tab-untranslated": "പരിഭാഷപ്പെടുത്താത്തവ",
+ "tux-tab-outdated": "കാലഹരണപ്പെട്ടവ",
+ "tux-tab-translated": "പരിഭാഷപ്പെടുത്തിയവ",
+ "tux-tab-unproofread": "സംശോധനം ചെയ്യാത്തവ",
+ "tux-edit": "പരിഭാഷപ്പെടുത്തുക",
+ "tux-status-optional": "ഐച്ഛികം",
+ "tux-status-fuzzy": "കാലഹരണപ്പെട്ടവ",
+ "tux-status-proofread": "സംശോധനം ചെയ്തവ",
+ "tux-status-translated": "പരിഭാഷപ്പെടുത്തി",
+ "tux-status-saving": "സേവ് ചെയ്യുന്നു...",
+ "tux-status-unsaved": "സേവ് ചെയ്തിട്ടില്ല",
+ "tux-editor-paste-original-button-label": "മൂലരൂപം ഉപയോഗിക്കുക",
+ "tux-editor-discard-changes-button-label": "മാറ്റങ്ങൾ വേണ്ടെന്നുവെയ്ക്കുക",
+ "tux-editor-save-button-label": "പരിഭാഷ സേവ് ചെയ്യുക",
+ "tux-editor-skip-button-label": "അടുത്തതിലേയ്ക്ക് പോവുക",
+ "tux-editor-cancel-button-label": "റദ്ദാക്കുക",
+ "tux-editor-confirm-button-label": "പരിഭാഷ സ്ഥിരീകരിക്കുക",
+ "tux-editor-shortcut-info": "സേവ് ചെയ്യാൻ \"$1\" അമർത്തുക, അടുത്തതിലേയ്ക്ക് പോകാൻ \"$2\" അമർത്തുക.",
+ "tux-editor-edit-desc": "വിവരണം തിരുത്തുക",
+ "tux-editor-add-desc": "വിവരണം ചേർക്കുക",
+ "tux-editor-suggestions-title": "നിർദ്ദേശങ്ങൾ",
+ "tux-editor-in-other-languages": "മറ്റു ഭാഷകളില്‍",
+ "tux-editor-need-more-help": "സഹായം ആവശ്യമാണോ?",
+ "tux-editor-ask-help": "കൂടുതല്‍ വിവരങ്ങള്‍ ചോദിക്കുക",
+ "tux-editor-tm-match": "$1% പൊരുത്തപ്പെടുന്നു",
+ "tux-notices-more": "{{PLURAL:$1|$1 എണ്ണം കൂടി}}",
+ "tux-notices-hide": "മറയ്ക്കുക",
+ "tux-editor-save-failed": "പരിഭാഷ സേവ് ചെയ്യുന്നത് പരാജയപ്പെട്ടു: $1",
+ "tux-editor-n-uses": "{{PLURAL:$1|ഒരു തവണ|$1 തവണ}} ഉപയോഗിച്ചു",
+ "tux-editor-message-desc-more": "കൂടുതൽ കാണുക",
+ "tux-editor-message-desc-less": "കുറച്ച് കാണുക",
+ "tux-editor-clear-translated": "പരിഭാഷപ്പെടുത്തിയവ മറയ്ക്കുക",
+ "tux-editor-proofreading-mode": "സംശോധനം",
+ "tux-editor-translate-mode": "പട്ടിക",
+ "tux-editor-proofreading-hide-own-translations": "താങ്കളുടെ തർജ്ജമകൾ മറയ്ക്കുക",
+ "tux-editor-proofreading-show-own-translations": "താങ്കളുടെ തർജ്ജമകൾ കാണിക്കുക",
+ "tux-proofread-action-tooltip": "സംശോധനം ചെയ്തതായി അടയാളപ്പെടുത്തുക",
+ "tux-proofread-edit-label": "തിരുത്തുക",
+ "tux-editor-page-mode": "താൾ",
+ "tux-editor-outdated-notice": "ഈ പരിഭാഷ പുതുക്കേണ്ടതാവാം",
+ "tux-editor-outdated-notice-diff-link": "വ്യത്യാസം കാണിക്കുക",
+ "tux-editor-doc-editor-placeholder": "സന്ദേശ വിവരണം",
+ "tux-editor-doc-editor-save": "വിവരണം സംരക്ഷിക്കുക",
+ "tux-editor-doc-editor-cancel": "റദ്ദാക്കുക",
+ "tux-messagetable-more-messages": "{{PLURAL:$1|ഒരു സന്ദേശം കൂടി|$1 സന്ദേശങ്ങള്‍ കൂടി}}",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|ഒരു സന്ദേശം|$1 സന്ദേശങ്ങള്‍}} എടുക്കുന്നു...",
+ "tux-message-filter-placeholder": "പട്ടിക അരിച്ചെടുക്കുക",
+ "tux-message-filter-result": "\"$2\" എന്നതിന് {{PLURAL:$1|ഒരു ഫലം|$1 ഫലങ്ങൾ}} കണ്ടെത്തി",
+ "tux-message-filter-advanced-button": "വിപുലമായ തിരച്ചില്‍",
+ "tux-message-filter-optional-messages-label": "ഐച്ഛിക സന്ദേശങ്ങൾ",
+ "tux-proofread-translated-by-self": "താങ്കൾ പരിഭാഷപ്പെടുത്തിയവ",
+ "tux-empty-list-all": "ഈ സന്ദേശഗണം ശൂന്യമാണ്",
+ "tux-empty-list-all-guide": "പരിഭാഷയ്ക്ക് വേറൊരു സന്ദേശഗണം തിരഞ്ഞെടുക്കുക",
+ "tux-empty-list-translated": "തർജ്ജമ ചെയ്ത സന്ദേശങ്ങളൊന്നുമില്ല",
+ "tux-empty-list-translated-action": "പരിഭാഷപ്പെടുത്തുക",
+ "tux-empty-show-optional-messages": "ഐച്ഛിക സന്ദേശങ്ങൾ പ്രദർശിപ്പിക്കുക",
+ "tux-empty-no-outdated-messages": "കാലഹരണപ്പെട്ട സന്ദേശങ്ങൾ ഒന്നും തന്നെയില്ല",
+ "tux-empty-nothing-to-proofread": "സംശോധനം ചെയ്യാൻ ഒന്നുമില്ല",
+ "tux-empty-you-can-help-providing": "പുതിയ പരിഭാഷകൾ സംശോധനം ചെയ്യാൻ താങ്കൾക്ക് സഹായിക്കാം",
+ "tux-empty-nothing-new-to-proofread": "സംശോധനം ചെയ്യാൻ പുതുതായൊന്നുമില്ല",
+ "tux-empty-you-can-review-already-proofread": "മറ്റുള്ളവർ സംശോധനം ചെയ്ത പരിഭാഷകൾ താങ്കൾക്ക് പരിശോധിക്കാം.",
+ "tux-empty-list-other": "പരിഭാഷപ്പെടുത്താൻ ഒന്നുമില്ല.",
+ "tux-empty-list-other-guide": "താങ്കൾക്ക് നിലവിലുള്ള പരിഭാഷകൾ സംശോധനം ചെയ്യാൻ സഹായിക്കാം",
+ "tux-empty-list-other-action": "പരിഭാഷകൾ സംശോധനം ചെയ്യുക",
+ "tux-empty-list-other-link": "എല്ലാ സന്ദേശങ്ങളും കാണിക്കുക",
+ "tux-editor-close-tooltip": "അടയ്ക്കുക",
+ "tux-editor-expand-tooltip": "വികസിപ്പിക്കുക",
+ "tux-editor-collapse-tooltip": "ചുരുക്കുക",
+ "tux-editor-message-tools-history": "നാൾവഴി",
+ "tux-editor-message-tools-translations": "എല്ലാ തർജ്ജമകളും",
+ "tux-editor-loading": "ശേഖരിക്കുന്നു...",
+ "translate-search-more-languages-info": "{{PLURAL:$1|ഒരു ഭാഷ കൂടി|$1 ഭാഷകൾ കൂടി}}",
+ "translate-statsbar-tooltip": "$1% പരിഭാഷപ്പെടുത്തിയവ, $2% സംശോധനം ചെയ്തവ",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% പരിഭാഷപ്പെടുത്തിയവ, $2% സംശോധനം ചെയ്തവ, $3% കാലഹരണപ്പെട്ടവ",
+ "translate-search-more-groups-info": "$1 {{PLURAL:$2|സംഘം|സംഘങ്ങൾ}} കൂടി"
+}
diff --git a/Translate/i18n/core/mn.json b/Translate/i18n/core/mn.json
new file mode 100644
index 00000000..70f67805
--- /dev/null
+++ b/Translate/i18n/core/mn.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chinneeb",
+ "Wisdom"
+ ]
+ },
+ "translate-page-language": "Хэл",
+ "translate-language": "Хэл",
+ "tux-session-expired": "Таны логин гарсан байна. Энэ таб -аа хаалгүй шинэ таб нэмээд логин хийчихээд хадгалаарай."
+}
diff --git a/Translate/i18n/core/mnc.json b/Translate/i18n/core/mnc.json
new file mode 100644
index 00000000..d759dcbe
--- /dev/null
+++ b/Translate/i18n/core/mnc.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Foavi33",
+ "Moon0319"
+ ]
+ },
+ "translate": "ᡠᠪᠠᠯᡳᠶᠠᠮᠪᡠᠮᠪᡳ",
+ "translate-extensionname": "ᡠᠪᠠᠯᡳᠶᠠᠮᠪᡠᠮᠪᡳ",
+ "translate-taction-translate": "ᡠᠪᠠᠯᡳᠶᠠᠮᠪᡠᠮᠪᡳ",
+ "translate-page-settings-legend": "ᡳᠨᠰᡨᡝᠯᠯᡝᠨ",
+ "translate-page-language": "ᡨᠠᠠᠯ",
+ "translate-page-limit": "ᠪᡝᡦᡝᡵᡴᡝᠨ",
+ "translate-documentation-language": "medege dangse"
+}
diff --git a/Translate/i18n/core/mni.json b/Translate/i18n/core/mni.json
new file mode 100644
index 00000000..e9fda3ba
--- /dev/null
+++ b/Translate/i18n/core/mni.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Afingba Mangang",
+ "Amire80",
+ "Awangba Mangang",
+ "Luwanglinux"
+ ]
+ },
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|ꯊꯦꯠꯄꯥ |ꯊꯦꯠꯄꯥꯁꯤꯡ}}:",
+ "translate-documentation-language": "ꯗꯣꯀꯨꯃꯦꯟꯇꯦꯁꯟꯗ ꯄꯥꯎꯖꯦꯜ ꯊꯥꯎ"
+}
diff --git a/Translate/i18n/core/mnw.json b/Translate/i18n/core/mnw.json
new file mode 100644
index 00000000..c3f5293a
--- /dev/null
+++ b/Translate/i18n/core/mnw.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Htawmonzel",
+ "咽頭べさ"
+ ]
+ },
+ "translate-taction-translate": "သွက်ကၠာဲဘာသာ",
+ "translate-edit-definition": "လိက်ဂလာန် အဓိပ္ပါဲပညပ်တဝဵု",
+ "translate-export-form-format": "ဗီုပြင်",
+ "translate-rcfilters-translations": "ကၠာဲဘာသာဂမၠိုင်",
+ "translate-stats-users": "ညးတၠကၠာဲဘာသာဂမၠိုင်",
+ "translate-statsf-scale-years": "သၞာံဂမၠိုင်",
+ "translate-statsf-count-users": "ညးတၠသုင်စောဲ ကၠာဲဘာသာဂမၠိုင်",
+ "translate-sidebar-alltrans": "နကဵု အရေဝ်ဘာသာ တၞဟ်",
+ "translate-untranslated": "ဟွံဂွံကၠာဲလဝ်ဘာသာ",
+ "supportedlanguages": "အရေဝ်ဘာသာ ထံက်ပၚ်လဝ်ဂမၠိုင်",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|ညးတၠကၠာဲဘာသာ}}|ညးတၠကၠာဲဘာသာဂမၠိုင်}}: $1",
+ "translate-documentation-language": "Message documentation",
+ "translate-searchprofile": "ကၠာဲဘာသာဂမၠိုင်",
+ "tux-tab-untranslated": "ဟွံဂွံကၠာဲလဝ်ဘာသာ",
+ "tux-tab-translated": "ကၠာဲလဝ်ဘာသာ",
+ "tux-editor-in-other-languages": "နကဵု အရေဝ်ဘာသာ တၞဟ်"
+}
diff --git a/Translate/i18n/core/mo.json b/Translate/i18n/core/mo.json
new file mode 100644
index 00000000..3b15474e
--- /dev/null
+++ b/Translate/i18n/core/mo.json
@@ -0,0 +1,54 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cybernenea11",
+ "Node ue"
+ ]
+ },
+ "translate": "Традуче",
+ "translate-desc": "[[Special:Translate|Паӂинэ спечиалэ]] пентру традучеря програмулуй МедияВики, дар ну нумай",
+ "translate-taction-translate": "Традучере",
+ "translate-taction-proofread": "Верификаре",
+ "translate-page-no-such-language": "Лимба спечификатэ есте инкоректэ.",
+ "translate-page-no-such-group": "Групул спечификат есте инвалид.",
+ "translate-page-disabled": "Посибилитатя де а традуче ачест груп ын ачастэ лимбэ а фост дезактиватэ.\nМотив:\n\n<em>$1</em>",
+ "translate-page-settings-legend": "Сетэрь:",
+ "translate-page-group": "Груп",
+ "translate-page-language": "Лимбэ",
+ "translate-page-limit": "Лимитэ",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|месаж|месаже}} пе паӂинэ",
+ "translate-submit": "Адуче",
+ "translate-page-navigation-legend": "Навигаре",
+ "translate-page-showing": "Се афишазэ месажеле де ла $1 ла $2 динтр'ун тотал де $3.",
+ "translate-page-showing-all": "Се афишазэ $1 {{PLURAL:$1|месаж|де месаже}}.",
+ "translate-next": "Паӂина урмэтоаре",
+ "translate-prev": "Паӂина антериоарэ",
+ "translate-page-description-legend": "Информаций деспре груп",
+ "translate-page-edit": "редактаре",
+ "translate-optional": "(опционал)",
+ "translate-ignored": "(игнорат)",
+ "translate-edit-title": "Редактаць «$1»",
+ "translate-edit-definition": "Дефиниция месажулуй",
+ "translate-edit-contribute": "контрибуе",
+ "translate-edit-no-information": "<em>Ачест месаж ну аре документацие.\nДакэ штиць унде сау кум есте фолосит, ый путець ажута пе чейлалць традукэторь прин адэугаря документацией сале.</em>",
+ "translate-edit-information": "Информаций деспре месаж ($1)",
+ "translate-stats-users": "Традукэторь",
+ "translate-untranslated": "Де традус",
+ "translate-ls-column-group": "Груп де месаже",
+ "translate-mgs-group": "Груп де месаже:",
+ "translate-documentation-language": "Документация месажулуй",
+ "tux-languageselector": "Традучець ын",
+ "tux-tab-all": "Тоате",
+ "tux-tab-untranslated": "Де традус",
+ "tux-tab-outdated": "Ынвеките",
+ "tux-tab-translated": "Традусе",
+ "tux-tab-unproofread": "Де верификат",
+ "tux-edit": "Редактаре",
+ "tux-status-proofread": "Верификат",
+ "tux-status-translated": "Традус",
+ "tux-editor-skip-button-label": "Урмэторул месаж",
+ "tux-editor-proofreading-mode": "Верификаре",
+ "tux-editor-translate-mode": "Листэ",
+ "tux-editor-page-mode": "Паӂинэ",
+ "tux-message-filter-placeholder": "Филтраря листей"
+}
diff --git a/Translate/i18n/core/mos.json b/Translate/i18n/core/mos.json
new file mode 100644
index 00000000..a4c79865
--- /dev/null
+++ b/Translate/i18n/core/mos.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Abdul Fatawu 352"
+ ]
+ },
+ "translate-documentation-language": "Koɛɛga gɩlsgo"
+}
diff --git a/Translate/i18n/core/mr.json b/Translate/i18n/core/mr.json
new file mode 100644
index 00000000..1745026b
--- /dev/null
+++ b/Translate/i18n/core/mr.json
@@ -0,0 +1,307 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ankitgadgil",
+ "Htt",
+ "Kaustubh",
+ "Mahitgar",
+ "Saleelk",
+ "V.narsikar",
+ "संतोष दहिवळ"
+ ]
+ },
+ "translate": "भाषांतर करा",
+ "translate-extensionname": "भाषांतर करा",
+ "translate-desc": "मिडीयाविकि आणि इतर भाषांतरे करण्याकरिता [[Special:Translate|विशेष पान]]",
+ "translate-taskui-export-to-file": "मुळ प्रारूपात निर्यात करा",
+ "translate-taskui-export-as-po": "विना-जाल भाषांतरासाठी निर्यात करा",
+ "translate-taction-translate": "भाषांतर करा",
+ "translate-taction-proofread": "परिक्षण करा",
+ "translate-taction-lstats": "भाषेची सांख्यिकी",
+ "translate-taction-mstats": "संदेश गटांची सांख्यिकी",
+ "translate-taction-export": "निर्यात करा",
+ "translate-taction-disabled": "या विकिवर या क्रियेस अनुपलब्ध केले आहे.",
+ "translate-page-no-such-language": "दिलेली भाषा अवैध आहे.",
+ "translate-page-no-such-group": "दिलेला गट अवैध आहे.",
+ "translate-page-disabled": "या गटातील या भाषेत भाषांतर अनुपलब्ध आहे.\nकारण:\n\n\n<em>$1</em>",
+ "translate-language-disabled": "या भाषेत भाषांतर करणे अक्षम करण्यात आले आहे.",
+ "translate-page-settings-legend": "रुपरेषा",
+ "translate-page-group": "गट",
+ "translate-page-language": "भाषा",
+ "translate-page-limit": "मर्यादा",
+ "translate-page-limit-option": "प्रतिपृष्ठ {{PLURAL:$1|संदेश|संदेश}}$1",
+ "translate-submit": "मिळवा",
+ "translate-page-navigation-legend": "सुचालन",
+ "translate-page-showing": "$3चे $1पासून $2पर्यंत संदेश दाखवत आहे.",
+ "translate-page-showing-all": "$1 {{PLURAL:$1|संदेश|संदेश}} दाखवत आहे .",
+ "translate-page-showing-none": "दाखविण्यासाठी संदेश नाहीत.",
+ "translate-next": "पुढील पान",
+ "translate-prev": "मागील पान",
+ "translate-page-description-legend": "गटाबद्दल माहिती",
+ "translate-page-description-hasoptional": "या संदेश गटात ऐच्छिक संदेश आहेत.\nजेंव्हा आपल्या भाषेची विशेष गरज असेल तेंव्हाच ऐच्छिक संदेशांचे भाषांतर करावे\nजसे(शब्दात) रिकामी जागा न वापरणे किंवा विशेषनाम. $1",
+ "translate-page-description-hasoptional-open": "ऐच्छिक संदेश दाखवा",
+ "translate-page-edit": "संपादन करा",
+ "translate-optional": "(वैकल्पिक)",
+ "translate-ignored": "(दुर्लक्षित)",
+ "translate-edit-title": "\"$1\"चे संपादन",
+ "translate-edit-definition": "संदेश व्याख्या",
+ "translate-edit-contribute": "योगदान करा",
+ "translate-edit-no-information": "<em>या संदेशाकरिता कोणतेही नोंदीकरण(डॉक्यूमेंटेशन) नाही. हा संदेश कुठे आणि कसा वापरला आहे हे तुम्हाला ठाऊक असेल तर, या पानाचे नोंदीकरण(डॉक्यूमेंटेशन) करून तुम्ही इतर भाषांतरकारांना मदत करू शकता.</em>",
+ "translate-edit-information": "($1) या संदेशाबद्दल माहिती",
+ "translate-edit-warnings": "अर्धवट भाषांतरांसाठीचे इशारे",
+ "translate-edit-tmmatch-source": "स्रोत मजकूराचे भाषांतर: $1",
+ "translate-edit-tmmatch": "$1% जुळते",
+ "translate-edit-nopermission": "आपणास भाषांतरासाठी 'भाषांतर अधिकार' हवेत.",
+ "translate-edit-askpermission": "परवानगी घ्या",
+ "exporttranslations": "भाषांतरे निर्यात करा",
+ "translate-checks-parameters": "खालील {{PLURAL:$2|प्राचल वापरला नाही|प्राचल वापरलेले नाहीत}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "खालील {{PLURAL:$2|प्राचल अनोळखी आहे|प्राचले अनोळखी आहेत}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "यात चुकिचे {{PLURAL:$2|गोल कंसचिन्ह आहे}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "खालील {{PLURAL:$2|दुवा त्रासदायक आहे|$2 दुवे त्रासदायक आहेत}}:\n\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "खालील {{PLURAL:$2|दुवा अनुपलब्ध आहे|$2 दुवे अनुपलब्ध आहेत}} :\n\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "व्याख्येत <nowiki>{{PLURAL:}}</nowiki>चा वापर आहे पण भाषांतरात नाही.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> {{PLURAL:$1|एक फॉर्म|$1 फॉर्म्स}}परंतु, {{PLURAL:$2|फक्त एकच फॉर्म सहाय्यीकृत आहे|$2 फॉर्म्स सहाय्यीकृत आहेत }} ( 0= व 1= फॉर्म्स वगळून).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> ला शेवटी द्विरुक्त फॉर्म्स आहेत.<nowiki>{{PLURAL:$1|sheep|sheep}}</nowiki> ला <nowiki>{{PLURAL:$1|sheep}}</nowiki>असे लिहिल्या जावयास हवे.",
+ "translate-checks-pagename": "व्याख्येपासून नामविश्व बदलले आहे",
+ "translate-checks-format": "हे भाषांतर व्याख्येचे अनुपालन करीत नाही किंवा त्यात अवैध वाक्यरचना आहे:$1",
+ "translate-checks-escape": "केवळ अनवधानाने खालील सुटलेले असू शकतात:<strong>$1</strong>",
+ "translate-checks-parametersnotequal": "प्राचल मोजणी {{PLURAL:$1|$1}} आहे; {{PLURAL:$2|$2}} हवी.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> मध्ये विकृती आहे.",
+ "translate-checks-fudforum-syntax": "या प्रकल्पात <nowiki>$2</nowiki> ऐवजी <nowiki>$1</nowiki>वापरा.",
+ "translate-pref-editassistlang": "सहायक भाषा:",
+ "prefs-translate": "भाषांतर पर्याय",
+ "translate-pref-editassistlang-help": "ही स्वल्पविरामाद्वारे विभाजित केलेली भाषासंकेतांची यादी आहे.\n\nआपण भाषांतर करीत असतांना,संदेशाचे या भाषेतील भाषांतर दाखविल्या जाते.\n\nयातील अविचल भाषा आपल्या मूळ भाषेवर आधारीत आहेत.",
+ "translate-pref-editassistlang-bad": "यादीत अवैध भाषासंकेत:\n<nowiki>$1</nowiki>.",
+ "right-translate": "भाषांतर आंतरपृष्ठ वापरून संपादन करा",
+ "right-translate-manage": "संदेशगटांचे व्यवस्थापन करा",
+ "action-translate-manage": "संदेशगटांचे व्यवस्थापन करा",
+ "right-translate-import": "जालविरहीत भाषांतरे आयात करा",
+ "action-translate-import": "जालविरहीत भाषांतरे आयात करा",
+ "right-translate-messagereview": "भाषांतरांचे पुनरावलोकन",
+ "right-translate-groupreview": "संदेश गटांची कार्यओघ स्थिती बदला",
+ "translate-rc-translation-filter": "भाषांतरांना गाळणी लावा:",
+ "translate-rc-translation-filter-no": "काहीच करू नका",
+ "translate-rc-translation-filter-only": "फक्त भाषांतरे दाखवा",
+ "translate-rc-translation-filter-filter": "भाषांतरांना गाळणी लावा",
+ "translate-rc-translation-filter-site": "फक्त संकेतस्थळाच्या संदेशातील बदल",
+ "translationstats": "भाषांतर सांख्यिकी",
+ "translate-stats-edits": "संपादने",
+ "translate-stats-users": "भाषांतरकार",
+ "translate-stats-registrations": "नोंदणीकृत",
+ "translate-stats-reviews": "पुनरावलोकने",
+ "translate-stats-reviewers": "पुनरावलोकक",
+ "translate-statsf-intro": "आपण सोपी सांख्यिकी या फॉर्मद्वारे निर्माण करू शकता.सर्व किंमतींना उच्च व निम्न मर्यादा आहेत.",
+ "translate-statsf-options": "आलेख पर्याय",
+ "translate-statsf-width": "रुंदी पिक्सेलमध्ये:",
+ "translate-statsf-height": "उंची पिक्सेलमध्ये:",
+ "translate-statsf-days": "कालावधी दिवसात:",
+ "translate-statsf-start": "सुरुवात दिनांक:",
+ "translate-statsf-scale": "कणमयता:",
+ "translate-statsf-scale-months": "महिने",
+ "translate-statsf-scale-weeks": "आठवडे",
+ "translate-statsf-scale-days": "दिवस",
+ "translate-statsf-scale-hours": "तास",
+ "translate-statsf-count": "माप:",
+ "translate-statsf-count-edits": "संपादनांची संख्या",
+ "translate-statsf-count-users": "सक्रिय भाषांतरकार",
+ "translate-statsf-count-registrations": "नविन सदस्य",
+ "translate-statsf-count-reviews": "भाषांतर पुनरावलोकन",
+ "translate-statsf-count-reviewers": "पुनरावलोकक",
+ "translate-statsf-language": "भाषा संकेतांची स्वल्पविरामाने वेगळी केलेली यादी:",
+ "translate-statsf-group": "गट संकेतांची स्वल्पविरामाने वेगळी केलेली यादी:",
+ "translate-statsf-submit": "झलक",
+ "translate-tag-page-desc": "विकिपान [[$2|$1]] चे भाषांतर.",
+ "translate-sidebar-alltrans": "इतर भाषांत",
+ "translations": "सर्व भाषांतरे",
+ "translations-summary": "सर्व उपलब्ध भाषांतरे दाखविण्यास, खाली त्या संदेशाचे नाव लिहा.",
+ "translate-translations-no-message": "\"$1\" हा भाषांतरासाठीचा संदेश नाही",
+ "translate-translations-none": "\"$1\" साठी काहीच भाषांतरे नाहीत",
+ "translate-translations-count": "{{PLURAL:$1|एक भाषांतर सापडले|$1 भाषांतरे सापडलीत}}.",
+ "translate-translations-fieldset-title": "संदेश",
+ "translate-translations-messagename": "नाव:",
+ "translate-translations-project": "प्रकल्प:",
+ "translate-translations-including-no-param": "उपपान प्राचलात एक वैध संदेश कळ नमूद करा",
+ "translate-translations-history-short": "एच",
+ "languagestats": "भाषेची सांख्यिकी",
+ "languagestats-summary": "हे पान एखाद्या भाषेसाठी असलेल्या सर्व संदेशगटांची सांख्यिकी दाखविते.",
+ "messagegroupstats-summary": "हे पान संदेश गटांची सांख्यिकी दर्शविते.",
+ "languagestats-stats-for": "$1 ($2) साठी भाषांतर सांख्यिकी.",
+ "languagestats-recenttranslations": "अलीकडील भाषांतरे",
+ "translate-langstats-incomplete": "या पानावरील काही सांख्यिकी अपूर्ण आहेत.अधिक सांख्यिकी मिळविण्यास या पानाचे पुनर्भारण करा.",
+ "translate-langstats-expand": "विस्तार करा",
+ "translate-langstats-collapse": "निपात करा",
+ "translate-langstats-expandall": "सर्वांचा विस्तार करा",
+ "translate-langstats-collapseall": "सर्वांचा निपात करा",
+ "translate-language-code": "भाषा संकेत (कोड)",
+ "translate-language-code-field-name": "भाषा संकेत (कोड):",
+ "translate-suppress-complete": "पूर्णपणे भाषांतरीत केलेले संदेश गट दाबा(सप्रेस)",
+ "translate-ls-noempty": "पूर्णपणे अभाषांतरीत संदेश गट दाबा(सप्रेस)",
+ "translate-language": "भाषा",
+ "translate-total": "संदेश",
+ "translate-untranslated": "अभाषांतरीत",
+ "translate-percentage-complete": "समाप्ती",
+ "translate-percentage-fuzzy": "कालबाह्य",
+ "translate-languagestats-overall": "सर्व संदेश गट एकत्रितपणे",
+ "translate-ls-submit": "सांख्यिकी दाखवा",
+ "translate-ls-column-group": "संदेश गट",
+ "translate-mgs-pagename": "संदेश गटांची सांख्यिकी",
+ "translate-mgs-fieldset": "दर्शविण्याचा पसंतीक्रम",
+ "translate-mgs-group": "संदेश गट:",
+ "translate-mgs-nocomplete": "भाषांतर पूर्ण झालेल्या भाषा दाखवू नका",
+ "translate-mgs-noempty": "काहीच भाषांतर नसलेल्या भाषा दाखवू नका",
+ "translate-mgs-submit": "सांख्यिकी दाखवा",
+ "translate-mgs-column-language": "भाषा",
+ "translate-mgs-totals": "सर्व भाषा एकत्रितपणे",
+ "translate-mgs-invalid-group": "नमूद केलेला गट $1 अस्तित्वात नाही.",
+ "translate-mgs-nothing": "विनंती केलेल्या सांख्यिकीबद्दल काहीच दर्शविण्याजोगे नाही.",
+ "supportedlanguages": "सहाय्यीकृत भाषा",
+ "supportedlanguages-summary": "हे पान {{SITENAME}}वरील, त्या भाषेत काम करीत असलेल्या भाषांतरकारासह,सर्व सहाय्यीकृत भाषा दाखविते.जेंव्हा एखाद्या भाषांतरकाराचे नाव जितके मोठे दिसते तितके त्याने जास्त संपादनांचे योगदान केलेले असते.त्यातील अधोरेषेचा रंग, येथे तो भाषांतरकार अलीकडे किती सक्रिय आहे हे दर्शवितो.",
+ "supportedlanguages-colorlegend": "रंगाचे विवरण:मागील भाषांतर $1 दिवसांपूर्वी.",
+ "supportedlanguages-translators": "{{PLURAL:$2|भाषांतरकार}}: $1",
+ "supportedlanguages-recenttranslations": "अलीकडील भाषांतरे",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|भाषा}} एकुण.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|संपादन|संपादने}} शेवटचे संपादन $3 {{PLURAL:$3|दिवसापूर्वी|दिवसांपूर्वी}}",
+ "translate-jssti-add": "यादीत जोडा",
+ "managemessagegroups": "संदेश गट व्यवस्थापन",
+ "translate-smg-notallowed": "आपणास हे क्रिया कार्य करण्याची परवानगी नाही.",
+ "translate-smg-nochanges": "प्रक्रिया करण्यास काहीच बदल नाहीत.",
+ "translate-smg-submit": "प्रक्रियेसाठी बदल सादर करा",
+ "translate-smg-submitted": "संदेश व्याख्या अद्यतन केलेल्या आहेत. बदल पृष्ठाआड प्रक्रियेअंतर्गत आहेत.",
+ "translate-smg-more": "हे बदल सादर केल्यावर प्रक्रिया करण्यास अधिक बदल राहतील.",
+ "translate-smg-left": "विकिमध्ये संदेशाचा आशय",
+ "translate-smg-right": "येणारे बदल",
+ "translate-manage-import-diff": "संदेश $1 | क्रिया: $2",
+ "translate-manage-import-new": "नवीन संदेश $1",
+ "translate-manage-import-deleted": "वगळलेला संदेश $1",
+ "translate-manage-action-import": "आयात करा",
+ "translate-manage-action-ignore": "दुर्लक्ष करा",
+ "translate-manage-nochanges": "या गटातील संदेशांच्या व्याख्येत काहीच बदल नाहीत.",
+ "translate-manage-nochanges-other": "या भाषेसाठी काहीच बदल नाहीत. गट तपशीलाकडे परत जाण्यास खालील दुवा वापरा.",
+ "translate-manage-inconsistent": "विनंतीत एकसंधपणा नाही. कृपया बदलासाठी तपासा व पुन्हा प्रयत्न करा.\nतपशील:$1.",
+ "translate-manage-toolong": "$1 चा जास्तीत जास्त प्रक्रिया काल{{PLURAL:$1|सेकंद}} पार झाला. कृपया, प्रक्रिया सुरू ठेवण्यास, या फॉर्मला पुन्हा सादर करा.",
+ "translate-manage-import-summary": "बाह्य स्रोतांतुन एक नविन आवृत्ती आयात करीत आहे",
+ "translate-manage-conflict-summary": "बाह्य स्रोतांतुन एक नविन आवृत्ती आयात करीत आहे.\nकृपया तपासा.",
+ "translate-manage-submit": "क्रियान्वयन",
+ "translate-manage-intro-other": "खाली $1 भाषेतील झालेल्या भाषांतरबदलांची यादी आहे.कृपया या बदलांचे पुनर्विलोकन करा व प्रत्येक अद्यतनासाठी आपण घेऊ इच्छिणारी क्रिया निवडा.\nजर आपण झालेले बदल टाळू इच्छित असाल तर ही क्रिया तात्पुरत्या स्वरुपाची आहे.",
+ "translate-manage-import-ok": "आयात केले:$1",
+ "translate-manage-import-done": "आयात पूर्ण!",
+ "importtranslations": "भाषांतरे आयात करा",
+ "translate-import-from-local": "स्थानिक संचिका अपभारण:",
+ "translate-import-load": "संचिकेचे प्रभारण करा",
+ "translate-import-err-ul-failed": "संचिका अपभारण अयशस्वी",
+ "translate-import-err-invalid-title": "दिलेले संचिकानाम<nowiki>$1</nowiki>अवैध होते.",
+ "translate-import-err-no-such-file": "संचिका<nowiki>$1</nowiki>अस्तित्वात नाही किंवा ती स्थानिकरित्या अपभारीत झालेली आहे.",
+ "translate-import-err-stale-group": "ज्या संदेशगटाची ही संचिका आहे तो अस्तित्वात नाही.",
+ "translate-js-support-unsaved-warning": "आपणापाशी, जतन न केलेली भाषांतरे आहेत.",
+ "translate-gs-code": "संकेत",
+ "translate-gs-score": "प्राप्तांक",
+ "translate-gs-multiple": "एकाधिक",
+ "translate-gs-count": "मोजणी",
+ "translate-gs-total": "एकूण",
+ "translate-gs-avgscore": "सरासरी प्राप्तांक",
+ "translate-documentation-language": "संदेश दस्ताऐवजीकरण",
+ "translate-searchprofile": "भाषांतरे",
+ "translate-searchprofile-tooltip": "सर्व भाषांतरात शोधा",
+ "translate-search-languagefilter": "भाषेनुसार गाळा:",
+ "translate-search-nofilter": "गाळणी नको",
+ "log-name-translationreview": "भाषांतर पुनरावलोकन नोंदी",
+ "log-description-translationreview": "भाषांतरे व संदेश गटातील सर्व पुनरावलोककांच्या नोंदी.",
+ "logentry-translationreview-message": "$1 ने $3 भाषांतर {{GENDER:$2|पुनर्विलोकित केले}}",
+ "group-translate-sandboxed": "अन-अनुमोदित भाषांतरकार",
+ "group-translate-sandboxed-member": "{{GENDER:$1|अन-अनुमोदित भाषांतरकार}}",
+ "translate-workflowstatus": "स्थिती:$1",
+ "translate-stats-workflow": "स्थिति",
+ "translate-workflowgroup-label": "कार्यओघ स्थिती",
+ "translate-dynagroup-recent-label": "अलीकडील भाषांतरे",
+ "translate-dynagroup-recent-desc": "हा संदेशगट या भाषेतील सर्व अलिकडील भाषांतरे दाखवितो.\n\nपुनर्विलोकन कार्यासाठी अधिक उपयोगी.",
+ "translate-dynagroup-additions-label": "अलीकडेच जोडलेले",
+ "translate-dynagroup-additions-desc": "या संदेशगटात नविन व बदललेले संदेश आहेत.",
+ "translate-msggroupselector-projects": "संदेश गट",
+ "translate-msggroupselector-search-placeholder": "गट शोधा",
+ "translate-msggroupselector-search-all": "सर्व",
+ "translate-msggroupselector-search-recent": "अलीकडील",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|उपगट}}",
+ "tux-languageselector": "या भाषेत भाषांतर करा",
+ "tux-tab-all": "सर्व",
+ "tux-tab-untranslated": "अभाषांतरीत",
+ "tux-tab-outdated": "कालबाह्य",
+ "tux-tab-translated": "भाषांतरीत",
+ "tux-tab-unproofread": "अपुनरावलोकीत",
+ "tux-edit": "संपादन करा",
+ "tux-status-optional": "वैकल्पिक",
+ "tux-status-fuzzy": "कालबाह्य",
+ "tux-status-proofread": "पुनरावलोकित",
+ "tux-status-translated": "भाषांतरीत",
+ "tux-status-saving": "जतन करीत आहे...",
+ "tux-status-unsaved": "जतन न केलेले",
+ "tux-save-unknown-error": "एक अज्ञात त्रुटी उद्भवली.",
+ "tux-editor-paste-original-button-label": "स्रोत मजकूर डकवा",
+ "tux-editor-discard-changes-button-label": "बदल हटवा",
+ "tux-editor-save-button-label": "भाषांतर जतन करा",
+ "tux-editor-skip-button-label": "पुढच्यावर सरका",
+ "tux-editor-cancel-button-label": "रद्द करा",
+ "tux-editor-confirm-button-label": "भाषांतर निश्चिती",
+ "tux-editor-shortcut-info": "जतन करण्यास \"$1\" टिचका किंवा पुढिल संदेशावर सरकण्यासाठी \"$2\" टिचका किंवा सारांश पुरविण्यासाठी \"$4\" टिचका किंवा इतर लघुपथासाठी \"$3\" टिचका.",
+ "tux-editor-edit-desc": "दस्ताऐवजीकरण संपादा",
+ "tux-editor-add-desc": "दस्ताऐवजीकरण जोडा",
+ "tux-editor-suggestions-title": "सूचना",
+ "tux-editor-in-other-languages": "इतर भाषांत",
+ "tux-editor-need-more-help": "अधिक मदत हवी?",
+ "tux-editor-ask-help": "अधिक माहिती विचारा",
+ "tux-editor-tm-match": "$1% जुळते",
+ "tux-notices-more": "{{PLURAL:$1|$1 अधिक}}",
+ "tux-notices-hide": "लपवा",
+ "tux-editor-save-failed": "भषांतर जतन करणे अयशस्वी:$1",
+ "tux-editor-n-uses": "$1 {{PLURAL:$1|वेळी}} वापरले",
+ "tux-editor-message-desc-more": "अधिक बघा",
+ "tux-editor-message-desc-less": "कमी बघा",
+ "tux-editor-clear-translated": "भाषांतरीत लपवा",
+ "tux-editor-proofreading-mode": "पुनरावलोकन",
+ "tux-editor-translate-mode": "यादी",
+ "tux-editor-proofreading-hide-own-translations": "आपली भाषांतरे लपवा",
+ "tux-editor-proofreading-show-own-translations": "आपली भाषांतरे दाखवा",
+ "tux-proofread-action-tooltip": "पुनर्विलोकित खूण करा",
+ "tux-proofread-edit-label": "संपादन करा",
+ "tux-editor-page-mode": "पान",
+ "tux-editor-outdated-notice": "या भाषांतरास अद्यतन करण्याची गरज आहे.",
+ "tux-editor-outdated-notice-diff-link": "फरक दाखवा",
+ "tux-editor-doc-editor-placeholder": "संदेश दस्ताऐवजीकरण",
+ "tux-editor-doc-editor-save": "दस्तऐवजीकरण जतन करा",
+ "tux-editor-doc-editor-cancel": "रद्द करा",
+ "tux-messagetable-more-messages": "$1 अधिक {{PLURAL:$1|संदेश}}",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|संदेशाचे|संदेशांचे}} प्रभारण करीत आहे...",
+ "tux-message-filter-placeholder": "यादी गाळा",
+ "tux-message-filter-result": "\"$2\" साठी $1 {{PLURAL:$1|निकाल}} सापडले",
+ "tux-message-filter-advanced-button": "प्रगत शोध",
+ "tux-message-filter-optional-messages-label": "ऐच्छिक संदेश",
+ "tux-proofread-translated-by-self": "आपण भाषांतरीत केलेले",
+ "tux-empty-list-all": "हा संदेश गट रिकामा आहे",
+ "tux-empty-list-all-guide": "भाषांतरासाठी दुसरा संदेश गट निवडा",
+ "tux-translate-page-no-such-group": "<strong>नमूद केलेला गट अस्तित्वात नाही.</strong> वेगळा संदेशगट निवडा.",
+ "tux-empty-list-translated": "भाषांतरीत संदेश नाहीत",
+ "tux-empty-list-translated-guide": "आपण भाषांतरास मदत करु शकता",
+ "tux-empty-list-translated-action": "भाषांतर करा",
+ "tux-empty-no-messages-to-display": "दाखविण्याजोगे काहीच संदेश नाहीत.",
+ "tux-empty-there-are-optional": "यादीत न दाखविलेले काही ऐच्छिक संदेश आहेत",
+ "tux-empty-show-optional-messages": "ऐच्छिक संदेश दाखवा",
+ "tux-empty-no-outdated-messages": "कालबाह्य संदेश नाहीत.",
+ "tux-empty-nothing-to-proofread": "पुनर्विलोकनासाठी काहीच नाही",
+ "tux-empty-you-can-help-providing": "आपण नविन भाषांतरे देण्यासाठी मदत करु शकता",
+ "tux-empty-nothing-new-to-proofread": "पुनर्विलोकनासाठी नविन काहीच नाही",
+ "tux-empty-you-can-review-already-proofread": "आपण इतरांद्वारे पुनर्विलोकित संदेशांचे पुन्हा पुनर्विलोकन करु शकता.",
+ "tux-empty-list-other": "भाषांतरासाठी काहीच नाही",
+ "tux-empty-list-other-guide": "आपण सध्याच्या भाषांतरांच्या पुनर्विलोकनासाठी मदत करु शकता",
+ "tux-empty-list-other-action": "भाषांतरांचे पुनरावलोकन",
+ "tux-empty-list-other-link": "सर्व संदेश दाखवा",
+ "tux-editor-close-tooltip": "बंद करा",
+ "tux-editor-expand-tooltip": "विस्तार करा",
+ "tux-editor-collapse-tooltip": "निपात करा",
+ "tux-editor-message-tools-history": "इतिहास",
+ "tux-editor-message-tools-translations": "सर्व भाषांतरे",
+ "tux-editor-loading": "प्रभारण करीत आहे...",
+ "translate-search-more-languages-info": "$1 अधिक{{PLURAL:$1|भाषा}}",
+ "translate-statsbar-tooltip": "$1% भाषांतरीत, $2% पुनर्विलोकित",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% भाषांतरीत, $2% पुनर्विलोकित, $3% कालबाह्य",
+ "translate-search-more-groups-info": "$1 अधिक{{PLURAL:$1|गट}}",
+ "tux-nojs": "यापानासाठी जावास्क्रिप्ट हवी."
+}
diff --git a/Translate/i18n/core/mrh.json b/Translate/i18n/core/mrh.json
new file mode 100644
index 00000000..2cc59fed
--- /dev/null
+++ b/Translate/i18n/core/mrh.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Laitei",
+ "Reihpaleituh",
+ "Teitei Para"
+ ]
+ },
+ "translate-smg-strong-sync-help": "Baona",
+ "translate-documentation-language": "Mesei châhnarahvozy",
+ "log-action-filter-translationreview": "Taohriana pho:"
+}
diff --git a/Translate/i18n/core/ms-arab.json b/Translate/i18n/core/ms-arab.json
new file mode 100644
index 00000000..13df5896
--- /dev/null
+++ b/Translate/i18n/core/ms-arab.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Tofeiku"
+ ]
+ },
+ "translate": "ترجمه",
+ "translate-extensionname": "ترجمه",
+ "translate-taction-translate": "ترجمه",
+ "translate-taction-lstats": "ستاتيستيک بهاس",
+ "translate-page-settings-legend": "تتڤن",
+ "translate-page-language": "بهاس",
+ "translate-page-navigation-legend": "ڤندو اره",
+ "translate-next": "لامن ستروسڽ",
+ "translate-page-edit": "سونتيڠ",
+ "translate-optional": "(ڤيليهن)",
+ "translate-export-form-format": "فورمت",
+ "right-translate-messagereview": "سيمق سمولا ترجمهن",
+ "translate-statsf-scale-days": "هاري",
+ "translate-statsf-count-edits": "بيلڠن سونتيڠن",
+ "translate-sidebar-alltrans": "دالم بهاس لاءين",
+ "translate-documentation-language": "ڤندوکومنن ڤسنن",
+ "tux-editor-in-other-languages": "دالم بهاس لاءين"
+}
diff --git a/Translate/i18n/core/ms.json b/Translate/i18n/core/ms.json
new file mode 100644
index 00000000..cfa96999
--- /dev/null
+++ b/Translate/i18n/core/ms.json
@@ -0,0 +1,327 @@
+{
+ "@metadata": {
+ "authors": [
+ "Anakmalaysia",
+ "Aurora",
+ "Emrrans",
+ "Kurniasan",
+ "Pizza1016",
+ "Tofeiku"
+ ]
+ },
+ "translate": "Terjemah",
+ "translate-extensionname": "Terjemah",
+ "translate-desc": "[[Special:Translate|Laman khas]] untuk menterjemah MediaWiki dan lain-lain",
+ "translate-taskui-export-to-file": "Eksport dalam format natif",
+ "translate-taskui-export-as-po": "Eksport untuk penterjemahan luar talian",
+ "translate-taction-translate": "Terjemah",
+ "translate-taction-proofread": "Semak",
+ "translate-taction-lstats": "Statistik bahasa",
+ "translate-taction-mstats": "Statistik kumpulan mesej",
+ "translate-taction-export": "Eksport",
+ "translate-taction-disabled": "Tindakan ini tidak dibenarkan di wiki ini.",
+ "translate-page-no-such-language": "Bahasa yang dinyatakan tidak sah.",
+ "translate-page-no-such-group": "Kumpulan yang dinyatakan tidak sah.",
+ "translate-page-disabled": "Penterjemahan kepada bahasa ini dalam kumpulan ini telah dimatikan.\nSebab:\n\n<em>$1</em>",
+ "translate-language-disabled": "Terjemahan kepada bahasa ini tidak dibenarkan.",
+ "translate-page-settings-legend": "Tetapan",
+ "translate-page-group": "Kumpulan",
+ "translate-page-language": "Bahasa",
+ "translate-page-limit": "Had",
+ "translate-page-limit-option": "$1 mesej selaman",
+ "translate-submit": "Ambil",
+ "translate-page-navigation-legend": "Pandu arah",
+ "translate-page-showing": "Menunjukkan $1 hingga $2 daripada $3 mesej.",
+ "translate-page-showing-all": "$1 mesej dipaparkan.",
+ "translate-page-showing-none": "Tiada mesej untuk ditunjukkan.",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "Laman berikutnya",
+ "translate-prev": "Laman sebelumnya",
+ "translate-page-description-legend": "Perihal kumpulan",
+ "translate-page-description-hasoptional": "Kumpulan mesej ini mengandungi mesej tidak wajib.\nMesej tidak wajib hanya wajar diterjemahkan jika bahasa anda mempunyai keperluan tertentu\nseperti tidak menggunakan jarak atau mengalih huruf kata nama khas. $1",
+ "translate-page-description-hasoptional-open": "Tunjukkan mesej tidak wajib.",
+ "translate-page-edit": "sunting",
+ "translate-optional": "(tidak wajib)",
+ "translate-ignored": "(tidak diendahkan)",
+ "translate-edit-title": "Sunting \"$1\"",
+ "translate-edit-definition": "Takrifan mesej",
+ "translate-edit-contribute": "sumbangkan",
+ "translate-edit-no-information": "<em>Pesanan ini tidak mempunyai pendokumenan. Jika anda tahu di mana atau bagaimana pesanan ini digunakan, anda boleh membantu para penterjemah dengan menambahkan pendokumenan kepada pesanan ini.</em>",
+ "translate-edit-information": "Maklumat mesej ($1)",
+ "translate-edit-warnings": "Amaran penterjemahan tak lengkap",
+ "translate-edit-tmmatch-source": "Teks sumber terjemahan: $1",
+ "translate-edit-tmmatch": "$1% berpadan",
+ "translate-edit-nopermission": "Anda memerlukan hak penterjemahan untuk menterjemahkan mesej.",
+ "translate-edit-askpermission": "Dapatkan izin",
+ "translate-export-form-format": "Format",
+ "translate-checks-parameters": "{{PLURAL:$2|Parameter|Parameter-parameter}} berikut tidak digunakan:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Parameter|Parameter-parameter}} berikut tidak dikenali:\n<strong>$1</strong>",
+ "translate-checks-balance": "Bilangan {{PLURAL:$2|tanda kurungan|tanda kurungan}} tidak sekata:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Pautan|$2 pautan}} yang berikut ada masalah:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Pautan|$2 pautan}} yang berikut tidak dijumpai:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Takrifan menggunakan <nowiki>{{PLURAL:}}</nowiki> tapi terjemahan pula tidak.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> diberi {{PLURAL:$1|satu bentuk|$1 bentuk}} tetapi {{PLURAL:$2|hanya satu bentuk|$2 bentuk}} disokong (kecuali bentuk 0= dad 1=).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> mempunyai bentuk pendua di hujung. <nowiki>{{PLURAL:$1|sheep|sheep}}</nowiki> sepatutnya ditulis sebagai <nowiki>{{PLURAL:$1|sheep}}</nowiki>.",
+ "translate-checks-pagename": "Ruang nama diubah dari takrifan",
+ "translate-checks-format": "Terjemahan ini tidak mematuhi takrifan atau sintaksnya tidak sah: $1",
+ "translate-checks-escape": "Lepasan-lepasan berikut mungkin dibuat secara tidak sengaja: <strong>$1</strong>",
+ "translate-checks-parametersnotequal": "Kiraan parameter ialah {{PLURAL:$1|$1}}; sepatutnya {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> cacat.",
+ "translate-checks-fudforum-syntax": "Usah gunakan <nowiki>$2</nowiki>, gunakan <nowiki>$1</nowiki> di projek ini.",
+ "translate-pref-editassistlang": "Bahasa pembantu:",
+ "prefs-translate": "Pilihan penterjemahan",
+ "translate-pref-editassistlang-help": "Senarai kod bahasa terpisah koma.\nTerjemahan mesej dalam bahasa-bahasa ini ditunjukkan apabila anda menterjemah.\nSenarai bahasa asali bergantung pada bahasa anda.",
+ "translate-pref-editassistlang-bad": "Kod bahasa tidak sah dalam senarai:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Menyunting dengan menggunakan antara muka penterjemahan",
+ "right-translate-manage": "Menguruskan kumpulan mesej",
+ "action-translate-manage": "menguruskan kumpulan mesej",
+ "right-translate-import": "Mengimport terjemahan luar talian",
+ "action-translate-import": "mengimport terjemahan luar talian",
+ "right-translate-messagereview": "Kaji semula terjemahan",
+ "right-translate-groupreview": "Mengubah keadaan alir kerja kumpulan mesej",
+ "translate-rcfilters-translations": "Terjemahan",
+ "translate-rcfilters-translations-only-label": "Terjemahan",
+ "translate-rc-translation-filter": "Tapis terjemahan:",
+ "translate-rc-translation-filter-no": "Tidak berbuat apa-apa",
+ "translate-rc-translation-filter-only": "Tunjukkan terjemahan sahaja",
+ "translate-rc-translation-filter-filter": "Tapiskan terjemahan",
+ "translate-rc-translation-filter-site": "Perubahan pada mesej tapak sahaja",
+ "translationstats": "Statistik terjemahan",
+ "translate-stats-edits": "Suntingan",
+ "translate-stats-users": "Penterjemah",
+ "translate-stats-registrations": "Pendaftaran",
+ "translate-stats-reviews": "Kajian semula",
+ "translate-stats-reviewers": "Pengkaji semula",
+ "translate-statsf-intro": "Anda boleh menjana statistik ringkas dengan borang ini.\nSemua nilai ada had maksimum dan minimun.",
+ "translate-statsf-options": "Pilihan graf",
+ "translate-statsf-width": "Lebar (piksel):",
+ "translate-statsf-height": "Tinggi (piksel):",
+ "translate-statsf-days": "Tarikh bermula:",
+ "translate-statsf-start": "Tarikh bermula:",
+ "translate-statsf-scale": "Kebutiran:",
+ "translate-statsf-scale-months": "Bulan",
+ "translate-statsf-scale-weeks": "Minggu",
+ "translate-statsf-scale-days": "Hari",
+ "translate-statsf-scale-hours": "Jam",
+ "translate-statsf-count": "Ukuran:",
+ "translate-statsf-count-edits": "Bilangan suntingan",
+ "translate-statsf-count-users": "Penterjemah aktif",
+ "translate-statsf-count-registrations": "Pengguna baru",
+ "translate-statsf-count-reviews": "Semakan terjemahan",
+ "translate-statsf-count-reviewers": "Pengkaji semula",
+ "translate-statsf-language": "Senarai kod bahasa yang diasingkan dengan tanda koma:",
+ "translate-statsf-group": "Senarai kod kumpulan yang diasingkan dengan tanda koma:",
+ "translate-statsf-submit": "Pralihat",
+ "translate-tag-page-desc": "Terjemahan laman wiki [[$2|$1]].",
+ "translate-sidebar-alltrans": "Dalam bahasa lain",
+ "translations": "Semua terjemahan",
+ "translations-summary": "Isikan nama mesej di bawah untuk memperlihatkan semua terjemahan yang disediakan.",
+ "translate-translations-no-message": "Mesej \"$1\" tidak boleh diterjemah.",
+ "translate-translations-none": "Tiada terjemahan untuk \"$1\".",
+ "translate-translations-count": "{{PLURAL:$1|satu terjemahan|$1 terjemahan}} dijumpai.",
+ "translate-translations-fieldset-title": "Mesej",
+ "translate-translations-messagename": "Nama:",
+ "translate-translations-project": "Projek:",
+ "translate-translations-including-no-param": "Sila nyatakan kunci mesej yang sah dalam parameter sublaman",
+ "translate-translations-history-short": "s",
+ "languagestats": "Statistik bahasa",
+ "languagestats-summary": "Laman ini menunjukkan statistik penterjemahan untuk semua kumpulan mesej dalam satu bahasa.",
+ "languagestats-stats-for": "Statistik penterjemahan kepada $1 ($2).",
+ "languagestats-recenttranslations": "terjemahan terbaru",
+ "translate-langstats-incomplete": "Sesetengah statistik di laman ini belum lengkap. Sila muatkan semula untuk mendapatkan lebih banyak statistik.",
+ "translate-langstats-expand": "kembangkan",
+ "translate-langstats-collapse": "lipat",
+ "translate-langstats-expandall": "tunjukkan semua",
+ "translate-langstats-collapseall": "sorokkan semua",
+ "translate-language-code": "Kod bahasa",
+ "translate-language-code-field-name": "Kod bahasa:",
+ "translate-suppress-complete": "Sorokkan kumpulan mesej yang diterjemah sepenuhnya",
+ "translate-ls-noempty": "Sorokkan kumpulan mesej yang langsung tidak diterjemah",
+ "translate-language": "Bahasa",
+ "translate-total": "Mesej",
+ "translate-untranslated": "Belum diterjemahkan",
+ "translate-percentage-complete": "Takat kelengkapan",
+ "translate-percentage-fuzzy": "Lapuk",
+ "translate-languagestats-overall": "Semua kumpulan mesej sekali",
+ "translate-ls-submit": "Tunjukkan statistik",
+ "translate-ls-column-group": "Kumpulan mesej",
+ "translate-mgs-pagename": "Statistik kumpulan mesej",
+ "translate-mgs-fieldset": "Keutamaan paparan",
+ "translate-mgs-group": "Kumpulan mesej:",
+ "translate-mgs-nocomplete": "Jangan paparkan bahasa yang sudah siap diterjemahkan",
+ "translate-mgs-noempty": "Jangan paparkan bahasa yang tiada terjemahan langsung",
+ "translate-mgs-submit": "Tunjukkan statistik",
+ "translate-mgs-column-language": "Bahasa",
+ "translate-mgs-totals": "Semua $1 {{PLURAL:$1|bahasa}} sekali",
+ "translate-mgs-invalid-group": "Kumpulan yang dinyatakan, $1 tidak wujud.",
+ "translate-mgs-nothing": "Statistik yang diminta itu tiada apa untuk ditunjukkan.",
+ "supportedlanguages": "Bahasa aktif",
+ "supportedlanguages-summary": "Laman ini menunjukkan senarai semua bahasa yang disokong oleh {{SITENAME}},\nbersama dengan nama-nama para penterjemah yang mengusahakan bahasa itu.\nSemakin besar nama penterjemah, semakin banyak suntingan yang disumbangkannya.\nWarna garis bawah menunjukkan betapa barunya seseorang penterjemah giat di sini.",
+ "supportedlanguages-colorlegend": "Petunjuk untuk warna: Terjemahan terakhir pada $1 hari yang lalu.",
+ "supportedlanguages-portallink": "[$1] $2 - $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-translators": "{{PLURAL:$2|Penterjemah|Penterjemah}}: $1",
+ "supportedlanguages-recenttranslations": "terjemahan terbaru",
+ "supportedlanguages-count": "Sejumlah $1 bahasa.",
+ "supportedlanguages-activity": "$1: $2 suntingan - suntingan terakhir pada $3 hari lalu",
+ "translate-jssti-add": "Tambahkan kepada senarai",
+ "managemessagegroups": "Pengurusan kumpulan mesej",
+ "translate-smg-notallowed": "Anda tidak dibenarkan untuk melaksanakan tindakan ini.",
+ "translate-smg-nochanges": "Tiada perubahan pada proses.",
+ "translate-smg-submit": "Serahkan perubahan untuk diproses",
+ "translate-smg-submitted": "Takrifan mesej telah dikemaskinikan. Perubahan sedang diproses di latar belakang.",
+ "translate-smg-more": "Akan terdapat lebih banyak perubahan untuk diproses setelah suntingan-suntingan ini diserahkan.",
+ "translate-smg-left": "Kandungan pesanan dalam wiki",
+ "translate-smg-right": "Perubahan baru",
+ "translate-smg-strong-sync-help": "Bantuan",
+ "translate-smg-group-message-message-other-langs": "Bahasa lain:",
+ "translate-manage-import-diff": "Mesej $1 | Tindakan: $2",
+ "translate-manage-import-new": "Mesej baru ($1)",
+ "translate-manage-import-deleted": "Mesej yang dihapuskan $1",
+ "translate-manage-action-import": "Import",
+ "translate-manage-action-conflict": "Import dan perlu disemak",
+ "translate-manage-action-ignore": "Abaikan",
+ "translate-manage-action-fuzzy": "Terjemahan yang diimport dan memerlukan semakan",
+ "translate-manage-nochanges": "Tiada perubahan dalam takrifan mesej untuk kumpulan ini.",
+ "translate-manage-nochanges-other": "Tiada perubahan untuk bahasa ini.\nGunakan pautan di bawah untuk kembali ke paparan butiran kumpulan.",
+ "translate-manage-inconsistent": "Ketakkonsistenan dikesan dalam permohonan.\nSila semak dan buat perubahan dan cuba lagi.\nButiran: $1.",
+ "translate-manage-toolong": "Tempoh pemprosesan maksimum $1 saat dilampaui.\nSila serahkan semula borang itu untuk terus memproses.",
+ "translate-manage-import-summary": "Mengimport versi baru dari sumber luaran",
+ "translate-manage-import-ignore": "Mesej $1 dilangkau.",
+ "translate-manage-conflict-summary": "Mengimport versi baru dari sumber luaran.\nSila semak.",
+ "translate-manage-submit": "Laksanakan",
+ "translate-manage-intro-other": "Berikut ialah senarai perubahan dalam bahasa $1.\nSila semak perubahan dan pilih tindakan yang anda hendak lakukan untuk setiap kemaskini.\nJika anda memilih untuk mengabaikan perubahan, maka tindakan ini hanya sementara.",
+ "translate-manage-import-ok": "Diimport: $1",
+ "translate-manage-import-done": "Pengimportan selesai!",
+ "importtranslations": "Import terjemahan",
+ "translate-import-from-local": "Muat naik fail setempat:",
+ "translate-import-load": "Muatkan fail",
+ "translate-import-err-dl-failed": "Fail tidak dapat diambil:\n$1",
+ "translate-import-err-ul-failed": "Muat naik fail tidak berjaya",
+ "translate-import-err-invalid-title": "Nama fail yang diberikan, <nowiki>$1</nowiki> tidak sah.",
+ "translate-import-err-no-such-file": "Fail <nowiki>$1</nowiki> tidak wujud atau telah dimuat naik secara setempat.",
+ "translate-import-err-stale-group": "Kumpulan mesej bagi fail ini tidak wujud.",
+ "translate-import-err-no-headers": "Fail ini bukan fail Gettext yang dibentuk dengan betul dalam format sambungan Translate:\nKumpulan dan bahasa tidak dapat ditentukan daripada pengatas fail.",
+ "translate-js-support-unsaved-warning": "Anda mempunyai terjemahan yang belum diterbit.",
+ "translate-gs-pos": "Ked.",
+ "translate-gs-code": "Kod",
+ "translate-gs-continent": "Benua",
+ "translate-gs-speakers": "Penutur",
+ "translate-gs-score": "Skor",
+ "translate-gs-multiple": "Pelbagai",
+ "translate-gs-count": "Bilangan",
+ "translate-gs-total": "Jumlah",
+ "translate-gs-avgscore": "Purata skor",
+ "translate-documentation-language": "Pendokumenan pesanan",
+ "translate-searchprofile": "Terjemahan",
+ "translate-searchprofile-tooltip": "Cari dari semua terjemahan",
+ "translate-search-languagefilter": "Tapis mengikut bahasa:",
+ "translate-search-nofilter": "Jangan tapis",
+ "log-name-translationreview": "Log semakan terjemahan",
+ "log-description-translationreview": "Log bagi semua kajian semula pada terjemahan dan kumpulan mesej.",
+ "logentry-translationreview-message": "$1 telah {{GENDER:$2|menyemak}} terjemahan $3",
+ "logentry-translationreview-group": "$1 telah {{GENDER:$2|mengubah}} status terjemahan $4 di $3 daripada $6 kepada $7",
+ "group-translate-sandboxed": "Penterjemah yang belum diluluskan",
+ "group-translate-sandboxed-member": "{{GENDER:$1|penterjemah yang belum diterjemahkan}}",
+ "right-translate-sandboxmanage": "Menguruskan pengguna-pengguna dalam kotak pasir",
+ "action-translate-sandboxmanage": "menguruskan pengguna-pengguna dalam kotak pasir",
+ "right-translate-sandboxaction": "Melaksanakan tindakan-tindakan yang disenaraiputihkan untuk pengguna yang dikotakpasirkan",
+ "action-translate-sandboxaction": "melaksanakan tindakan-tindakan yang disenaraiputihkan untuk pengguna yang dikotakpasirkan",
+ "translate-workflow-state-": "(belum ditetapkan)",
+ "translate-workflowstatus": "Status: $1",
+ "translate-workflow-set-doing": "Tetapan sedang dibuat...",
+ "translate-workflow-autocreated-summary": "Pembuatan laman secara automatik untuk keadaan alir kerja $1",
+ "translate-stats-workflow": "Status",
+ "translate-workflowgroup-label": "Keadaan alir kerja",
+ "translate-workflowgroup-desc": "Kumpulan mesej ini menunjukkan keadaan alir kerja terjemahan.\nKeadaan-keadaan ini ditakrifkan dalam pembolehubah konfigurasi $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Terjemahan terkini",
+ "translate-dynagroup-recent-desc": "Kumpulan mesej ini menunjukkan semua terjemahan terkini ke dalam bahasa ini.\nPaling berguna dengan tugas menyemak.",
+ "translate-dynagroup-additions-label": "Penambahan terbaru",
+ "translate-dynagroup-additions-desc": "Kumpulan mesej ini memaparkan mesej-mesej yang baru dan diubah.",
+ "translate-msggroupselector-projects": "Kumpulan mesej",
+ "translate-msggroupselector-search-placeholder": "Cari dalam kumpulan",
+ "translate-msggroupselector-search-all": "Semua",
+ "translate-msggroupselector-search-recent": "Terkini",
+ "translate-msggroupselector-view-subprojects": "$1 subkumpulan",
+ "tux-languageselector": "Terjemah ke",
+ "tux-tab-all": "Semua",
+ "tux-tab-untranslated": "Belum diterjemahkan",
+ "tux-tab-outdated": "Lapuk",
+ "tux-tab-translated": "Telah diterjemahkan",
+ "tux-tab-unproofread": "Belum disemak",
+ "tux-edit": "Sunting",
+ "tux-status-optional": "Pilihan",
+ "tux-status-fuzzy": "Lapuk",
+ "tux-status-proofread": "Disemak",
+ "tux-status-translated": "Diterjemahkan",
+ "tux-status-saving": "Menerbit...",
+ "tux-status-unsaved": "Belum diterbit",
+ "tux-editor-paste-original-button-label": "Tampalkan teks sumber",
+ "tux-editor-discard-changes-button-label": "Buang perubahan",
+ "tux-editor-save-button-label": "Terbit terjemahan",
+ "tux-editor-skip-button-label": "Langkau ke mesej seterusnya",
+ "tux-editor-cancel-button-label": "Batalkan",
+ "tux-editor-confirm-button-label": "Sahkan terjemahan",
+ "tux-editor-shortcut-info": "Tekan \"$1\" untuk menyimpan, \"$2\" untuk melangkau ke mesej seterusnya, atau \"$3\" untuk lain-lain pintasan.",
+ "tux-editor-edit-desc": "Sunting pendokumenan",
+ "tux-editor-add-desc": "Tambah pendokumenan",
+ "tux-editor-suggestions-title": "Cadangan",
+ "tux-editor-in-other-languages": "Dalam bahasa lain",
+ "tux-editor-need-more-help": "Perlukan lagi bantuan?",
+ "tux-editor-ask-help": "Minta keterangan lanjut",
+ "tux-editor-tm-match": "$1% berpadan",
+ "tux-notices-more": "{{PLURAL:$1|$1 lagi}}",
+ "tux-notices-hide": "sorokkan",
+ "tux-editor-save-failed": "Menerbitkan terjemahan gagal: $1",
+ "tux-editor-n-uses": "digunakan $1 kali",
+ "tux-editor-message-desc-more": "Lihat yang lain",
+ "tux-editor-message-desc-less": "Lihat kurang",
+ "tux-editor-clear-translated": "Sorokkan terjemahan",
+ "tux-editor-proofreading-mode": "Semak",
+ "tux-editor-translate-mode": "Senarai",
+ "tux-editor-proofreading-hide-own-translations": "Sorokkan terjemahan anda",
+ "tux-editor-proofreading-show-own-translations": "Paparkan terjemahan anda",
+ "tux-proofread-action-tooltip": "Tanda sebagai disemak",
+ "tux-proofread-edit-label": "Sunting",
+ "tux-editor-page-mode": "Laman",
+ "tux-editor-outdated-notice": "Terjemahan ini mungkin perlu dikemaskinikan.",
+ "tux-editor-outdated-notice-diff-link": "Tunjukkan perbezaan",
+ "tux-editor-doc-editor-placeholder": "Pendokumenan pesanan",
+ "tux-editor-doc-editor-save": "Terbit pendokumenan",
+ "tux-editor-doc-editor-cancel": "Batalkan",
+ "tux-messagetable-more-messages": "$1 lagi mesej",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|Mesej|Mesej-mesej}} sedang dimuatkan...",
+ "tux-message-filter-placeholder": "Tapis senarai",
+ "tux-message-filter-result": "$1 hasil dijumpai untuk \"$2\"",
+ "tux-message-filter-advanced-button": "Carian lanjutan",
+ "tux-message-filter-optional-messages-label": "Mesej tak wajib",
+ "tux-proofread-translated-by-self": "Terjemahan anda",
+ "tux-empty-list-all": "Kumpulan mesej ini kosong",
+ "tux-empty-list-all-guide": "Pilih kumpulan mesej yang lain untuk terjemah",
+ "tux-translate-page-no-such-group": "<strong>Kumpulan yang dinyatakan tidak wujud.</strong> Pilih kumpulan mesej yang berbeza.",
+ "tux-empty-list-translated": "Tiada mesej yang diterjemahkan",
+ "tux-empty-list-translated-guide": "Anda boleh membantu menterjemah",
+ "tux-empty-list-translated-action": "Terjemah",
+ "tux-empty-no-messages-to-display": "Tiada mesej yang ingin dipaparkan.",
+ "tux-empty-there-are-optional": "Terdapat mesej tak wajib yang tidak dinyatakan dalam senarai",
+ "tux-empty-show-optional-messages": "Paparkan mesej tak wajib",
+ "tux-empty-no-outdated-messages": "Tiada mesej yang lapuk",
+ "tux-empty-nothing-to-proofread": "Tiada apa-apa untuk disemak",
+ "tux-empty-you-can-help-providing": "Anda boleh membantu dengan membekalkan terjemahan baru",
+ "tux-empty-nothing-new-to-proofread": "Tiada apa-apa yang baru untuk disemak",
+ "tux-empty-you-can-review-already-proofread": "Anda boleh menyemak hasil-hasil terjemahan yang sudah disemak oleh orang lain.",
+ "tux-empty-list-other": "Tiada apa-apa untuk diterjemahkan",
+ "tux-empty-list-other-guide": "Anda boleh membantu menyemak hasil-hasil terjemahan sedia ada",
+ "tux-empty-list-other-action": "Semak terjemahan",
+ "tux-empty-list-other-link": "Tunjukkan semua mesej",
+ "tux-editor-close-tooltip": "Tutup",
+ "tux-editor-expand-tooltip": "Buka",
+ "tux-editor-collapse-tooltip": "Lipat",
+ "tux-editor-message-tools-history": "Sejarah",
+ "tux-editor-message-tools-translations": "Semua terjemahan",
+ "tux-editor-loading": "Sedang dimuatkan...",
+ "translate-search-more-languages-info": "$1 lagi bahasa",
+ "translate-statsbar-tooltip": "$1% diterjemah, $2% disemak",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% diterjemah, $2% disemak, $3 lapuk",
+ "translate-search-more-groups-info": "$1 lagi kumpulan"
+}
diff --git a/Translate/i18n/core/mt.json b/Translate/i18n/core/mt.json
new file mode 100644
index 00000000..2ef6c5d0
--- /dev/null
+++ b/Translate/i18n/core/mt.json
@@ -0,0 +1,166 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chrisportelli",
+ "Leli Forte",
+ "Roderick Mallia",
+ "ToniSant"
+ ]
+ },
+ "translate": "Traduzzjoni",
+ "translate-desc": "[[Special:Translate|Paġna speċjali]] biex tittraduċi lil MediaWiki u mhux biss",
+ "translate-taskui-export-to-file": "Esporta fil-format nattiv",
+ "translate-taskui-export-as-po": "Esporta għal traduzzjoni off-line",
+ "translate-taction-lstats": "Statistiki tal-lingwa",
+ "translate-taction-mstats": "Statistiki tal-grupp ta' messaġġi",
+ "translate-taction-export": "Esporta",
+ "translate-page-no-such-language": "Il-lingwa speċifikata hi invalida.",
+ "translate-page-no-such-group": "Il-grupp speċifikat huwa invalidu.",
+ "translate-page-disabled": "Traduzzjonijiet f'din il-lingwa għal dan il-grupp ġew diżabilitati.\nRaġuni:\n\n<em>$1</em>",
+ "translate-page-settings-legend": "Impostazzjonijiet",
+ "translate-page-group": "Grupp",
+ "translate-page-language": "Lingwa",
+ "translate-page-limit": "Limitu",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|messaġġ|messaġġ}} kull paġna",
+ "translate-submit": "Ikseb",
+ "translate-page-navigation-legend": "Navigazzjoni",
+ "translate-page-showing": "Qed jidhru l-messaġġi minn $1 sa $2 ta' $3",
+ "translate-page-showing-all": "Qed jidhru $1 {{PLURAL:$1|messaġġ|messaġġ}}.",
+ "translate-page-showing-none": "L-ebda messaġġ x'jintwera.",
+ "translate-next": "Paġna suċċessiva",
+ "translate-prev": "Paġna preċedenti",
+ "translate-page-description-legend": "Informazzjoni dwar il-grupp",
+ "translate-page-edit": "editja",
+ "translate-optional": "(opzjonali)",
+ "translate-ignored": "(injorat)",
+ "translate-edit-title": "Modifika ta' \"$1\"",
+ "translate-edit-definition": "Definizzjoni tal-messaġġ",
+ "translate-edit-contribute": "ikkontribwixxi",
+ "translate-edit-no-information": "''Dan il-messaġġ m'għandu l-ebda dokumentazzjoni.''\n''Jekk taf fejn jew kif jiġi wżat dan il-messaġġ, tista' tgħin lit-tradutturi l-oħra billi żżid id-dokumentazzjoni ma' dan il-messaġġ.''",
+ "translate-edit-information": "Informazzjoni dwar il-messaġġ ($1)",
+ "translate-edit-warnings": "Twissijiet dwar traduzzjonijiet mhux kompluti",
+ "translate-edit-nopermission": "Għandek bżonn l-awtorizzazzjoni sabiex tittraduċi messaġġi.",
+ "translate-edit-askpermission": "Itlob l-awtorizzazzjoni",
+ "translate-checks-parameters": "Il-{{PLURAL:$2|parametru segwnti mhuwiex użat|parametri segwenti mhumiex użati}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "Il-{{PLURAL:$2|parameteru segwenti mhuwiex magħruf|parametri segwenti mhumiex magħrufa}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "Hemm numru mhux ekwu ta' {{PLURAL:$2|parentesi|parentesi}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "Il-{{PLURAL:$2|ħolqa segwenti għandha problema|$2 ħoloq segwenti għandhom problema}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "Il-{{PLURAL:$2|ħolqa segwenti hi nieqsa|$2 ħoloq segwenti huma nieqsa}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Id-definizzjoni tuża' <nowiki>{{PLURAL:}}</nowiki> imma t-traduzzjoni le.",
+ "translate-checks-pagename": "L-ispazju tal-isem inbidel mid-definizzjoni",
+ "translate-checks-format": "Din it-traduzzjoni ma ssegwix id-definizzjoni segwenti jew għandha sintassi invalidi: $1",
+ "translate-checks-escape": "L-''escapes'' segwenti jistgħu jkunu aċċidentali: <strong>$1</strong>",
+ "translate-checks-fudforum-syntax": "Uża <nowiki>$1</nowiki> minflok <nowiki>$2</nowiki> f'dan il-proġett.",
+ "translate-pref-editassistlang": "Lingwi assistenti:",
+ "prefs-translate": "Opzjonijiet għat-traduzzjoni",
+ "translate-pref-editassistlang-help": "Kodiċi tal-lingwi separati minn virgola.\nIt-traduzzjonijiet ta' messaġġ f'dawn il-lingwi huma murija meta tkun qed tittraduċi.\nIl-lista predefinita tal-lingwi tiddependi fuq il-lingwa tiegħek.",
+ "translate-pref-editassistlang-bad": "Kodiċi tal-lingwa invalidu fil-lista:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Immodifika bl-użu tal-interfaċċa tat-traduzzjoni",
+ "right-translate-messagereview": "Irrevedi t-traduzzjonijiet",
+ "translate-rcfilters-translations": "Traduzzjonijiet",
+ "translate-rcfilters-translations-only-desc": "Modifiki fuq paġni tradotti.",
+ "translate-rcfilters-translations-filter-label": "Mhux traduzzjonijiet",
+ "translate-rcfilters-translations-filter-desc": "Il-modifiki kollha li mhumiex traduzzjonijiet.",
+ "translate-rcfilters-translations-site-label": "Messaġġi tas-sistema",
+ "translate-rcfilters-translations-site-desc": "Personalizzazzjonijiet ta' messaġġi tas-sistema fl-ispazju tal-isem MediaWiki.",
+ "translate-rc-translation-filter": "Iffilitra t-traduzzjonijiet:",
+ "translate-rc-translation-filter-no": "Tagħmel xejn",
+ "translate-rc-translation-filter-only": "Uri biss it-traduzzjonijiet",
+ "translate-rc-translation-filter-filter": "Elimina t-traduzzjonijiet",
+ "translate-rc-translation-filter-site": "Il-bidliet fil-messaġġi tas-sit biss",
+ "translationstats": "Statistika tat-traduzzjoni",
+ "translate-stats-users": "Tradutturi",
+ "translate-stats-registrations": "Reġistrazzjonijiet",
+ "translate-statsf-intro": "B'din il-formola tista' toħloq statistika sempliċi. Kull valur għandu l-limitu massimu u minimu.",
+ "translate-statsf-options": "Opzjonijiet tal-grafika",
+ "translate-statsf-width": "Wisa' f'pixels",
+ "translate-statsf-height": "Tul f'pixels:",
+ "translate-statsf-days": "Perjodu ta' żmien f'jiem:",
+ "translate-statsf-start": "Data tal-bidu:",
+ "translate-statsf-scale-months": "Xhur",
+ "translate-statsf-scale-weeks": "Ġimgħat",
+ "translate-statsf-scale-days": "Jiem",
+ "translate-statsf-scale-hours": "Sigħat",
+ "translate-statsf-count": "Miżura:",
+ "translate-statsf-count-edits": "Numru ta' modifiki:",
+ "translate-statsf-count-users": "Tradutturi attivi",
+ "translate-statsf-count-registrations": "Utenti ġodda",
+ "translate-statsf-language": "Lista tal-kodiċi tal-lingwi separati permezz ta' virgola:",
+ "translate-statsf-group": "Lista tal-kodiċi tal-lingwi separati permezz ta' virgola:",
+ "translate-statsf-submit": "Dehra proviżorja",
+ "translate-tag-page-desc": "Traduzzjoni tal-paġna wiki [[$2|$1]].",
+ "translate-sidebar-alltrans": "F'lingwi oħrajn",
+ "translations": "It-traduzzjonijiet kollha",
+ "translations-summary": "Daħħal hawn taħt isem ta' messaġġ biex turi t-traduzzjonijiet kollha disponibbli",
+ "translate-translations-no-message": "\"$1\" mhuwiex messaġġ traduċibbli",
+ "translate-translations-none": "M'hemm l-ebda traduzzjoni għal \"$1\"",
+ "translate-translations-fieldset-title": "Messaġġ",
+ "translate-translations-messagename": "Isem:",
+ "translate-translations-project": "Proġett:",
+ "languagestats": "Statistiki tal-lingwa",
+ "languagestats-summary": "Din il-paġna turi l-istatistika tat-traduzzjonijiet għall-gruppi kollha tal-messaġġi ta' lingwa.",
+ "messagegroupstats-summary": "Din il-paġna turi l-istatistiki għall-gruppi ta' messaġġi.",
+ "languagestats-stats-for": "Statistika tat-traduzzjoni għal $1 ($2).",
+ "languagestats-recenttranslations": "traduzzjonijiet riċenti",
+ "translate-langstats-expand": "espandi",
+ "translate-langstats-collapse": "aħbi",
+ "translate-langstats-expandall": "espandi kollox",
+ "translate-langstats-collapseall": "aħbi kollox",
+ "translate-language-code": "Kodiċi tal-lingwa",
+ "translate-language-code-field-name": "Kodiċi tal-lingwa:",
+ "translate-suppress-complete": "Neħħi gruppi ta' messaġġi tradotti kompletament",
+ "translate-ls-noempty": "Neħħi gruppi ta' messaġġi li mhumiex tradotti kompletament",
+ "translate-language": "Lingwa",
+ "translate-total": "Messaġġi",
+ "translate-untranslated": "Mhux tradotti",
+ "translate-percentage-complete": "Kompluti",
+ "translate-percentage-fuzzy": "Bżonn ta' aġġornament",
+ "translate-languagestats-overall": "Il-gruppi tal-messaġġi kollha ma' xulxin",
+ "translate-ls-submit": "Uri l-istatistiki",
+ "translate-ls-column-group": "Grupp ta' messaġġi",
+ "translate-mgs-pagename": "Statistiki tal-grupp ta' messaġġi",
+ "translate-mgs-fieldset": "Uri l-preferenzi",
+ "translate-mgs-group": "Grupp ta' messaġġi:",
+ "translate-mgs-nocomplete": "Turix lingwi li għandhom it-traduzzjoni lesta",
+ "translate-mgs-noempty": "Turix lingwi li m'għandhomx traduzzjonijiet",
+ "translate-mgs-submit": "Uri l-istatistiki",
+ "translate-mgs-column-language": "Lingwa",
+ "translate-mgs-totals": "Il-lingwi kollha ma' xulxin",
+ "translate-mgs-invalid-group": "Il-grupp speċifikat $1 ma jeżistix.",
+ "supportedlanguages": "Lingwi sostnuti",
+ "supportedlanguages-translators": "{{PLURAL:$2|Traduttur|Tradutturi}}: $1",
+ "supportedlanguages-recenttranslations": "traduzzjonijiet riċenti",
+ "supportedlanguages-count": "Total ta' $1 {{PLURAL:$1|lingwa|lingwi}}.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|modifika|modifiki}} - l-aħħar modifika $3 {{PLURAL:$3|ġurnata|ġranet}} ilu",
+ "translate-jssti-add": "Żid mal-lista",
+ "translate-smg-group-message-message-other-langs": "Lingwi oħra:",
+ "translate-manage-import-new": "Messaġġ ġdid $1",
+ "translate-manage-action-ignore": "Injora",
+ "importtranslations": "Importa t-traduzzjonijiet",
+ "translate-import-from-local": "Tella' fajl lokali:",
+ "translate-import-load": "Tella' fajl",
+ "translate-import-err-ul-failed": "It-tlugħ tal-fajl ma rnexxiex",
+ "translate-import-err-invalid-title": "L-isem tal-fajl <nowiki>$1</nowiki> mhuwiex validu.",
+ "translate-import-err-no-such-file": "Il-fajl <nowiki>$1</nowiki> ma jeżistix jew ma ġiex imtella fuq livell lokali.",
+ "translate-gs-pos": "Poż.",
+ "translate-gs-code": "Kodiċi",
+ "translate-gs-continent": "Kontinent",
+ "translate-gs-speakers": "Kelliema",
+ "translate-gs-score": "Punteġġ",
+ "translate-gs-multiple": "Multipla",
+ "translate-gs-count": "Numru",
+ "translate-gs-total": "Total",
+ "translate-gs-avgscore": "Medja tal-punteġġ",
+ "translate-documentation-language": "Dokumentazzjoni tal-messaġġ",
+ "translate-searchprofile": "Traduzzjonijiet",
+ "translate-searchprofile-tooltip": "Tfittxija minn kull traduzzjoni",
+ "translate-search-languagefilter": "Filtru skont il-lingwa:",
+ "translate-search-nofilter": "L-ebda filtru",
+ "translate-workflowstatus": "Stat: $1",
+ "tux-editor-in-other-languages": "F'lingwi oħra",
+ "tux-empty-list-all-guide": "Agħżel gruppi ta' messaġġi ieħor biex tittraduċi",
+ "tux-empty-list-other-guide": "Tista' tgħin tirrevedi traduzzjonijiet eżistenti",
+ "tux-empty-list-other-action": "Irrevedi t-traduzzjonijiet",
+ "tux-empty-list-other-link": "Uri l-messaġġi kollha",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|lingwa|lingwi}} oħra"
+}
diff --git a/Translate/i18n/core/mui.json b/Translate/i18n/core/mui.json
new file mode 100644
index 00000000..39164bf7
--- /dev/null
+++ b/Translate/i18n/core/mui.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jawadywn"
+ ]
+ },
+ "translate-documentation-language": "Pencatetan pesen"
+}
diff --git a/Translate/i18n/core/mwl.json b/Translate/i18n/core/mwl.json
new file mode 100644
index 00000000..cf30652f
--- /dev/null
+++ b/Translate/i18n/core/mwl.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Athena in Wonderland",
+ "MokaAkashiyaPT"
+ ]
+ },
+ "translate-taction-export": "Sportar",
+ "languagestats": "Statísticas de la lhéngua",
+ "supportedlanguages": "Lhénguas sustentadas",
+ "translate-import-load": "Cargar fexeiro",
+ "translate-documentation-language": "Decumentaçon de la mensaige",
+ "translate-searchprofile": "Traduçones",
+ "tux-editor-edit-desc": "Eiditar la decumentaçon",
+ "tux-editor-add-desc": "Poner decumentaçon",
+ "tux-editor-doc-editor-placeholder": "Decumentaçon de la mensaige",
+ "tux-editor-doc-editor-save": "Grabar decumentaçon"
+}
diff --git a/Translate/i18n/core/my.json b/Translate/i18n/core/my.json
new file mode 100644
index 00000000..e9ecf841
--- /dev/null
+++ b/Translate/i18n/core/my.json
@@ -0,0 +1,283 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dr Lotus Black",
+ "Erikoo",
+ "Ninjastrikers",
+ "Teitei Para"
+ ]
+ },
+ "translate": "ဘာသာပြန်ပါ",
+ "translate-extensionname": "ဘာသာပြန်ပါ",
+ "translate-taction-translate": "ဘာသာပြန်ရန်",
+ "translate-taction-proofread": "ပြန်လည်ဆန်းစစ်",
+ "translate-taction-lstats": "ဘာသာစကား စာရင်းအင်း",
+ "translate-taction-mstats": "မက်ဆေ့အုပ်စု စာရင်းအင်း",
+ "translate-taction-export": "တင်ပို့ရန်",
+ "translate-taction-disabled": "ဤဝီကီတွင် ဤလုပ်ဆောင်ချက်ကို ပိတ်ထားသည်။",
+ "translate-page-disabled": "ဤအုပ်စုရှိ ဤဘာသာစကားသို့ ဘာသာပြန်ခြင်းကို ပိတ်ထားပါသည်။ အကြောင်းရင်းမှာ:\n\n<em>$1</em>",
+ "translate-language-disabled": "ဤဘာသာစကားသို့ ဘာသာပြန်ခြင်းကို ပိတ်ထားသည်။",
+ "translate-page-settings-legend": "အပြင်အဆင်များ",
+ "translate-page-group": "အုပ်စု",
+ "translate-page-language": "ဘာသာစကား",
+ "translate-page-limit": "ကန့်သတ်ချက်",
+ "translate-page-limit-option": "တစ်မျက်နှာလျှင် {{PLURAL:$1|စာလုံး|စာလုံးပေါင်း}} $1",
+ "translate-submit": "ရှာဖွေပါ",
+ "translate-page-navigation-legend": "အ​ညွှန်း​",
+ "translate-page-showing-all": "{{PLURAL:$1|စာလုံး|စာလုံးပေါင်း}} $1 လုံး ရှာဖွေတွေ့ရှိသည်။",
+ "translate-page-showing-none": "ဖေါ်ပြရန် စကားလုံး မရှိပါ",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "နောက်စာမျက်နှာ",
+ "translate-prev": "ပြီးခဲ့သော စာမျက်နှာ",
+ "translate-page-description-legend": "ဤအုပ်စုအကြောင်း သတင်းအချက်အလက်",
+ "translate-page-edit": "ပြင်ဆင်ရန်",
+ "translate-optional": "(ထည့်လိုကထည့်နိုင်)",
+ "translate-ignored": "(လျစ်လျူရှု)",
+ "translate-edit-title": "\"$1\" ကိုပြင်ဆင်ရန်",
+ "translate-edit-definition": "မက်ဆေ့ အဓိပ္ပာယ်သတ်မှတ်ချက်",
+ "translate-edit-contribute": "ပံ့ပိုးရန်",
+ "translate-edit-information": "မက်ဆေ့အကြောင်း သတင်းအချက်အလက် ($1)",
+ "translate-edit-warnings": "မပြီးမြောက်သော ဘာသာပြန်များအတွက် သတိပေးချက်များ",
+ "translate-edit-tmmatch": "$1% ကိုက်ညီ",
+ "translate-edit-nopermission": "မက်ဆေ့များကို ဘာသာပြန်ရန် ဘာသာပြန် အခွင့်အရေးများ လိုအပ်ပါသည်။",
+ "translate-edit-askpermission": "ခွင့်ပြုချက် ရယူရန်",
+ "exporttranslations": "ဘာသာပြန်များကို တင်ပို့ရန်",
+ "translate-export-form-format": "ဖောမတ်",
+ "translate-checks-replacement": "$1 ၏အစား $2 ကိုသုံးပါ",
+ "translate-pref-editassistlang": "အထောက်အကူ ဘာသာစကားများ:",
+ "prefs-translate": "ဘာသာပြန် ရွေးချယ်စရာများ",
+ "translate-pref-editassistlang-help": "ကော်မာ ကြားခံထားသော ဘာသာစကားကုဒ်များစာရင်း။ ဘာသာပြန်ဆိုချိန်တွင် ဤဘာသာစကားများရှိ မက်ဆေ့တစ်ခု၏ဘာသာပြန်ကို ပြသထားပါသည်။ ဘာသာစကားများ၏ နဂိုစာရင်းသည် သင်၏ဘာသာစကားပေါ်တွင် မူတည်ပါသည်။",
+ "right-translate-manage": "မက်ဆေ့အုပ်စုများကို စီမံရန်",
+ "action-translate-manage": "မက်ဆေ့အုပ်စုများကို စီမံရန်",
+ "right-translate-import": "အော့ဖ်လိုင်းဘာသာပြန်များကို တင်သွင်းရန်",
+ "action-translate-import": "အော့ဖ်လိုင်းဘာသာပြန်များကို တင်သွင်းရန်",
+ "right-translate-messagereview": "ဘာသာပြန်များကို ပြန်လည်ဆန်းစစ်ရန်",
+ "action-translate-messagereview": "ဘာသာပြန်များကို ပြန်လည်ဆန်းစစ်ရန်",
+ "translate-rcfilters-translations": "ဘာသာပြန်များ",
+ "translate-rcfilters-translations-only-label": "ဘာသာပြန်များ",
+ "translate-rcfilters-translations-only-desc": "ဘာသာပြန် စာမျက်နှာများသို့ ပြောင်းလဲမှုများ",
+ "translate-rcfilters-translations-filter-label": "ဘာသာပြန်များ မရှိပါ",
+ "translate-rcfilters-translations-filter-desc": "ဘာသာပြန်များမဟုတ်သော အပြောင်းအလဲများအားလုံး",
+ "translate-rcfilters-translations-site-label": "ဆိုဒ် မင်ဆေ့များ",
+ "translate-rcfilters-translations-site-desc": "မီဒီယာဝီကီ အမည်ညွှန်းရှိ ဆိုဒ်မက်ဆေ့များကို စိတ်ကြိုက်ပြုပြင်မှုများ။",
+ "translate-rc-translation-filter": "ဘာသာပြန်များ စိစစ်ရန်:",
+ "translate-rc-translation-filter-no": "ဘာတစ်ခုမှ မလုပ်ဆောင်ရန်",
+ "translate-rc-translation-filter-only": "ဘာသာပြန်များကိုသာ ပြရန်",
+ "translationstats": "ဘာသာပြန်မှု စာရင်းအင်း",
+ "translate-stats-edits": "တည်းဖြတ်မှုများ",
+ "translate-stats-users": "ဘာသာပြန်သူများ",
+ "translate-stats-registrations": "မှတ်ပုံတင်ခြင်း",
+ "translate-stats-reviews": "ပြန်လည်ဆန်းစစ်မှုများ",
+ "translate-stats-reviewers": "ပြန်လည်ဆန်းစစ်သူများ",
+ "translate-statsf-intro": "ဤပုံစံဖြင့် ရိုးရှင်းသော စာရင်းအင်းကို ထုတ်ပြန်နိုင်သည်။ တန်ဖိုးအားလုံးတွင် အပေါ်အောက် ကန့်သတ်ချက်များရှိသည်။",
+ "translate-statsf-options": "ဇယား ရွေးချယ်စရာများ",
+ "translate-statsf-days": "ရက်အားဖြင့် အချိန်ကာလ:",
+ "translate-statsf-start": "စတင်သည့် ရက်စွဲ:",
+ "translate-statsf-scale": "အသေးစိတ်ကျမှု:",
+ "translate-statsf-scale-years": "ခုနှစ်များ",
+ "translate-statsf-scale-months": "လ",
+ "translate-statsf-scale-weeks": "အပတ်",
+ "translate-statsf-scale-days": "ရက်",
+ "translate-statsf-scale-hours": "နာရီ",
+ "translate-statsf-count": "အတိုင်းအတာ:",
+ "translate-statsf-count-edits": "တည်းဖြတ်မှုအရေအတွက်",
+ "translate-statsf-count-users": "တက်ကြွ ဘာသာပြန်သူများ",
+ "translate-statsf-count-registrations": "အသုံးပြုသူ အသစ်များ",
+ "translate-statsf-count-reviews": "ဘာသာပြန် ပြန်လည်ဆန်းစစ်မှုများ",
+ "translate-statsf-count-reviewers": "ပြန်လည်ဆန်းစစ်သူများ",
+ "translate-statsf-language": "ကော်မာခြားထားသော ဘာသာစကားကုဒ်များစာရင်း:",
+ "translate-statsf-group": "ကော်မာခြားထားသော အုပ်စုကုဒ်များစာရင်း:",
+ "translate-statsf-submit": "ကြိုတင်အစမ်းကြည့်ရှုရန်",
+ "translate-statsf-unknown-error": "အကြောင်းရင်းမသိရှိရသော အမှားတစ်ခု ဖြစ်ပွားခဲ့သည်။",
+ "translate-tag-page-desc": "$3 ($4) မှ [[$2|$1]] သို့ ဝီကီစာမျက်နှာ ဘာသာပြန်မှု",
+ "translate-sidebar-alltrans": "အခြား ဘာသာစကားများဖြင့်",
+ "translations": "ဘာသာပြန်မှုအားလုံး",
+ "translations-summary": "ရရှိနိုင်သော ဘာသာပြန်များအားလုံးကို ပြသရန် မက်ဆေ့အမည်ကို အောက်တွင် ရိုက်ထည့်ပါ။",
+ "translate-translations-no-message": "\"$1\" သည် ဘာသာပြန်နိုင်သော မက်ဆေ့မဟုတ်ပါ",
+ "translate-translations-none": "\"$1\" အတွက် ဘာသာပြန်များ မရှိပါ",
+ "translate-translations-count": "ဘာသာပြန်မှု {{PLURAL:$1|ခု|$1 ခု}} တွေ့ရှိခဲ့သည်။",
+ "translate-translations-fieldset-title": "မက်ဆေ့",
+ "translate-translations-messagename": "အမည်:",
+ "translate-translations-project": "ပရောဂျက်:",
+ "translate-translations-history-short": "ရာ",
+ "languagestats": "ဘာသာစကား စာရင်းအင်း",
+ "languagestats-summary": "ဤစာမျက်နှာသည် ဘာသာစကားတစ်ခုအတွက် မက်ဆေ့အုပ်စုအားလုံး၏ ဘာသာပြန်စာရင်းအင်းကို ပြသပေးသည်။",
+ "messagegroupstats-summary": "ဤစာမျက်နှာသည် မက်ဆေ့အုပ်စု စာရင်းအင်းကို ပြသပေးသည်။",
+ "languagestats-stats-for": "$1 ($2) အတွက် ဘာသာပြန်မှု စာရင်းအင်း",
+ "languagestats-recenttranslations": "လတ်တလော ဘာသာပြန်များ",
+ "translate-langstats-expand": "ချဲ့ကား",
+ "translate-langstats-collapse": "ချုံ့ရန်",
+ "translate-langstats-expandall": "အကုန်ချဲ့ရန်",
+ "translate-langstats-collapseall": "အကုန်ချုံ့ရန်",
+ "translate-language-code": "ဘာသာစကားကုဒ်",
+ "translate-language-code-field-name": "ဘာသာစကားကုဒ်:",
+ "translate-suppress-complete": "အပြည့်အစုံ ဘာသာပြန်ထားသော မက်ဆေ့အုပ်စုကို ဖုံးကွယ်ထားရန်",
+ "translate-ls-noempty": "အပြည့်အစုံ ဘာသာပြန်မထားသော မက်ဆေ့အုပ်စုကို ဖုံးကွယ်ထားရန်",
+ "translate-language": "ဘာသာစကား",
+ "translate-total": "မက်ဆေ့များ",
+ "translate-untranslated": "ဘာသာမပြန်ထားသော",
+ "translate-percentage-complete": "ပြီးမြောက်မှု",
+ "translate-percentage-fuzzy": "ခေတ်နောက်ကျနေသော",
+ "translate-percentage-proofread": "ပြန်လည်ဆန်းစစ်ပြီး",
+ "translate-languagestats-overall": "မက်ဆေ့အုပ်စုအားလုံး အတူတကွ",
+ "translate-ls-submit": "စာရင်းအင်း ပြရန်",
+ "translate-ls-column-group": "မက်ဆေ့အုပ်စု",
+ "translate-mgs-pagename": "မက်ဆေ့အုပ်စု စာရင်းအင်း",
+ "translate-mgs-fieldset": "ရွေးချယ်စရာများ ပြသရန်",
+ "translate-mgs-group": "မက်ဆေ့အုပ်စု:",
+ "translate-mgs-nocomplete": "ပြီးမြောက်အောင် ဘာသာပြန်ထားသော ဘာသာစကားများကို မပြရန်",
+ "translate-mgs-noempty": "မည်သည့် ဘာသာပြန်ထားမှမရှိသော ဘာသာစကားများကို မပြရန်",
+ "translate-mgs-submit": "စာရင်းအင်း ပြရန်",
+ "translate-mgs-column-language": "ဘာသာစကား",
+ "translate-mgs-totals": "{{PLURAL:$1|ဘာသာစကား|ဘာသာစကားများ}} $1 အားလုံး အတူတကွ",
+ "translate-mgs-nothing": "တောင်းဆိုထားသော စာရင်းအင်းအတွက် ပြစရာမရှိပါ။",
+ "supportedlanguages": "သက်ဝင်နေသော ဘာသာစကားများ",
+ "supportedlanguages-summary": "ဤစာမျက်နှာသည် {{SITENAME}} တွင် သက်ဝင်နေသည့် ဘာသာစကားများစာရင်းကို ပြသထားပြီး ယင်းဘာသာစကားတွင် လုပ်ဆောင်နေသော ဘာသာပြန်သူများ၏ အမည်များကို ဖော်ပြထားသည်။ တည်းဖြတ်မှုပိုများသော ဘာသာပြန်သူများကို ပိုကြီးသောနာမည်ဖြင့် ဖော်ပြထားပြီး အောက်ခြေမျဉ်းသည် ဘာသာပြန်သူက ဤနေရာတွင် လတ်တလော မည်မျှတက်ကြွစွာ ပါဝင်ခဲ့သည်ကို ဖော်ပြသည်။",
+ "supportedlanguages-colorlegend": "အရောင်အတွက် မှတ်စု: $1 ရက်အကြာက နောက်ဆုံး ဘာသာပြန်မှု",
+ "supportedlanguages-portallink": "[$1] $2 - $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|ဘာသာပြန်သူ}}|ဘာသာပြန်သူများ}}: $1",
+ "supportedlanguages-recenttranslations": "လတ်တလော ဘာသာပြန်များ",
+ "supportedlanguages-count": "စုစုပေါင်း {{PLURAL:$1|ဘာသာစကား|ဘာသာစကားများ}} $1",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|တည်းဖြတ်မှု|တည်းဖြတ်မှုများ}} - နောက်ဆုံးတည်းဖြတ်မှု $3 {{PLURAL:$3|ရက်|ရက်}} အကြာက",
+ "translate-supportedlanguages-cached": "ဤသတင်းအချက်အလက်သည် $1 အကြာက cached လုပ်ထားခြင်းဖြစ်သည်။",
+ "translate-jssti-add": "စာရင်းသို့ ပေါင်းထည့်ရန်",
+ "managemessagegroups": "မက်ဆေ့အုပ်စု စီမံခန့်ခွဲရေး",
+ "translate-smg-notallowed": "ဤလုပ်ဆောင်ချက်ကို စေခိုင်းရန် ခွင့်ပြုချက်မရှိပါ။",
+ "translate-smg-nochanges": "အစီစဉ်တကျလုပ်ဆောင်ရန် ပြောင်းလဲမှုများ မရှိပါ။",
+ "translate-smg-submit": "အစီစဉ်တကျဆောင်ရွက်မှုအတွက် ပြောင်းလဲမှုများ ထည့်သွင်းရန်",
+ "translate-smg-more": "ဤပြောင်းလဲမှုများကို ထည့်သွင်းပြီးပါက အစီစဉ်တကျလုပ်ဆောင်ရန် ပြောင်းလဲမှုများ ပိုများလာပါမည်။",
+ "translate-smg-left": "ဝီကီထဲရှိ မက်ဆေ့အကြောင်းအရာ",
+ "translate-smg-right": "ဝင်လာသော ပြောင်းလဲမှုများ",
+ "translate-smg-rename-select": "ရွေးချယ်",
+ "translate-smg-rename-cancel": "မလုပ်တော့ပါ",
+ "translate-smg-rename-no-msg": "မက်ဆေ့များ မတွေ့ပါ။",
+ "translate-smg-strong-sync-help": "အကူအညီ",
+ "translate-smg-group-message-action-history": "ရာဇဝင်",
+ "translate-smg-group-action-resolve": "ဖြေရှင်းပြီးဖြစ်ကြောင်း မှတ်သားရန်",
+ "translate-smg-group-message-tag-outdated": "ခေတ်နောက်ကျနေသော",
+ "translate-smg-group-message-tag-rename": "အမည်ပြန်မှည့်ရန်",
+ "translate-smg-group-message-message-other-langs": "အခြားဘာသာစကားများ:",
+ "translate-smg-loading": "ဝန်ဆွဲတင်နေသည်...",
+ "translate-manage-import-diff": "မက်ဆေ့ $1 | လုပ်ဆောင်ချက်များ: $2",
+ "translate-manage-import-new": "မက်ဆေ့ အသစ် $1",
+ "translate-manage-import-deleted": "ဖျက်ထားသော မက်ဆေ့ $1",
+ "translate-manage-action-import": "တင်သွင်းရန်",
+ "translate-manage-action-ignore": "လျစ်လျူရှု",
+ "translate-manage-action-rename": "အမည်ပြန်မှည့်ရန်",
+ "importtranslations": "ဘာသာပြန်များကို တင်သွင်းရန်",
+ "translate-js-support-unsaved-warning": "သင့်တွင် မလွှင့်တင်ရသေးသော ဘာသာပြန်များ ရှိသည်။",
+ "translate-gs-pos": "နေရာ",
+ "translate-gs-code": "ကုဒ်",
+ "translate-gs-continent": "တိုက်",
+ "translate-gs-speakers": "စကားပြောသူများ",
+ "translate-gs-score": "ရမှတ်",
+ "translate-gs-multiple": "၁ ခုထက်ပို",
+ "translate-gs-count": "အရေအတွက်",
+ "translate-gs-total": "စုစုပေါင်း",
+ "translate-gs-avgscore": "ပျမ်းမျှရမှတ်",
+ "translate-documentation-language": "စာလွှာ စာရွက်စာတမ်း",
+ "translate-searchprofile": "ဘာသာပြန်များ",
+ "translate-searchprofile-tooltip": "ဘာသာပြန်များအားလုံးမှ ရှာရန်",
+ "translate-searchprofile-note": "[$1 ဘာသာပြန် ရှာဖွေမှု]နှင့် ရှာဖွေမှု ရွေးချယ်စရာများ ပိုမိုရရှိနိုင်ပါသည်။",
+ "translate-search-languagefilter": "ဘာသာစကားအလိုက် စိစစ်ရန်:",
+ "translate-search-nofilter": "စိစစ်မှု မရှိ",
+ "log-name-translationreview": "ဘာသာပြန် ပြန်လည်ဆန်းစစ်မှု မှတ်တမ်း",
+ "log-description-translationreview": "ဘာသာပြန်များနှင့် မက်ဆေ့အုပ်စုများ၏ ပြန်လည်ဆန်းစစ်မှုများ မှတ်တမ်း",
+ "logentry-translationreview-message": "$1 က ဘာသာပြန် $3 ကို {{GENDER:$2|ပြန်လည်ဆန်းစစ်ခဲ့သည်}}",
+ "translate-stats-workflow": "အခြေနေ",
+ "translate-dynagroup-recent-label": "လတ်တလော ဘာသာပြန်များ",
+ "translate-dynagroup-recent-desc": "ဤမက်ဆေ့အုပ်စုသည် ဤဘာသာစကားသို့ မကြာသေးခင်ကပြန်ဆိုထားသော ဘာသာပြန်များအားလုံးကို ပြသထားပါသည်။ ပြန်လည်ဆန်းစစ်လုပ်ငန်းများအတွက် အသုံးဝင်ဆုံး။",
+ "translate-dynagroup-additions-label": "လတ်တလော ပေါင်းထည့်မှုများ",
+ "translate-msggroupselector-projects": "မက်ဆေ့အုပ်စု",
+ "translate-msggroupselector-search-placeholder": "အုပ်စုများ ရှာဖွေရန်",
+ "translate-msggroupselector-search-all": "အားလုံး",
+ "translate-msggroupselector-search-recent": "မကြာမီက",
+ "translate-msggroupselector-view-subprojects": "{{PLURAL:$1|အုပ်စုခွဲ|အုပ်စုခွဲများ}} $1 ခု",
+ "tux-languageselector": "ဘာသာပြန်ရန်မှာ",
+ "tux-tab-all": "အားလုံး",
+ "tux-tab-untranslated": "ဘာသာမပြန်ထားသော",
+ "tux-tab-outdated": "ခေတ်နောက်ကျနေသော",
+ "tux-tab-translated": "ဘာသာပြန်ထားသော",
+ "tux-tab-unproofread": "ပြန်လည်မဆန်းစစ်ရသော",
+ "tux-edit": "ပြင်ဆင်",
+ "tux-status-optional": "ထည့်လိုပါက",
+ "tux-status-fuzzy": "ခေတ်နောက်ကျနေသော",
+ "tux-status-proofread": "ပြန်လည်ဆန်းစစ်ပြီး",
+ "tux-status-translated": "ဘာသာပြန်ထားသော",
+ "tux-status-saving": "လွှင့်တင်နေသည်...",
+ "tux-status-unsaved": "မလွှင့်တင်ရသေးပါ",
+ "tux-save-unknown-error": "အကြောင်းရင်းမသိရှိရသော အမှားတစ်ခု ဖြစ်ပေါ်နေသည်။",
+ "tux-editor-placeholder-language": "$1သို့ သင်၏ ဘာသာပြန်ဆိုမှု",
+ "tux-editor-editsummary-placeholder": "ထည့်လိုကထည့်နိုင်သော အကျဉ်းချုပ်",
+ "tux-editor-paste-original-button-label": "ရင်းမြစ်စာသားကို မိတ္တူပွားရန်",
+ "tux-editor-discard-changes-button-label": "ပြောင်းလဲမှုများကို မလုပ်တော့ရန်",
+ "tux-editor-save-button-label": "ဘာသာပြန်ကို လွှင့်တင်ရန်",
+ "tux-editor-skip-button-label": "နောက်တစ်ခုသို့ ကျော်သွားရန်",
+ "tux-editor-cancel-button-label": "မလုပ်တော့ပါ",
+ "tux-editor-confirm-button-label": "ဘာသာပြန်ခြင်းကို အတည်ပြုရန်",
+ "tux-editor-proofread-button-label": "ပြန်လည်ဆန်းစစ်ပြီးကြောင်း မှတ်သားရန်",
+ "tux-editor-shortcut-info": "သိမ်းဆည်းရန် \"$1\" ကိုနှိပ်ပါ သို့မဟုတ် မက်ဆေ့နောက်တစ်ခုကို ကျော်သွားရန် \"$2\" ကိုနှိပ်ပါ သို့မဟုတ် အကျဉ်းချုပ်ဖော်ပြရန် \"$4\" ကိုနှိပ်ပါ သို့မဟုတ် အခြားအတိုကောက်များအတွက် \"$3\" ကိုနှိပ်ပါ။",
+ "tux-editor-edit-desc": "စာရွက်စာတမ်း ပြင်ဆင်ရန်",
+ "tux-editor-add-desc": "စာရွက်စာတမ်း ပေါင်းထည့်ရန်",
+ "tux-editor-suggestions-title": "အကြံပေးမှုများ",
+ "tux-editor-in-other-languages": "အခြား ဘာသာစကားများဖြင့်",
+ "tux-editor-need-more-help": "ထပ်ပြီး အကူအညီ လိုသေးလား?",
+ "tux-editor-ask-help": "အချက်အလက် ပိုမိုမေးမြန်းရန်",
+ "tux-editor-tm-match": "$1% ကိုက်ညီ",
+ "tux-notices-more": "{{PLURAL:$1|$1 ပို၍}}",
+ "tux-notices-hide": "ဝှက်",
+ "tux-editor-save-failed": "ဘာသာပြန်မှုကို လွှင့်တင်ရာ မအောင်မြင်ပါ: $1",
+ "tux-editor-n-uses": "$1 {{PLURAL:$1|ကြိမ်|ကြိမ်}} အသုံးပြုခဲ့သည်",
+ "tux-editor-message-desc-more": "ပိုမိုကြည့်ရှုရန်",
+ "tux-editor-message-desc-less": "နည်းနည်းကြည့်ရှုရန်",
+ "tux-editor-clear-translated": "ဘာသာပြန်ပြီးသားကို ဝှက်ရန်",
+ "tux-editor-proofreading-mode": "ပြန်လည်ဆန်းစစ်",
+ "tux-editor-translate-mode": "စာရင်း",
+ "tux-editor-proofreading-hide-own-translations": "သင်၏ဘာသာပြန်များကို ဝှက်ရန်",
+ "tux-editor-proofreading-show-own-translations": "သင်၏ဘာသာပြန်များကို ပြရန်",
+ "tux-proofread-action-tooltip": "ပြန်လည်ဆန်းစစ်ပြီးကြောင်း မှတ်သားရန်",
+ "tux-proofread-edit-label": "ပြင်ဆင်",
+ "tux-editor-page-mode": "စာမျက်နှာ",
+ "tux-editor-outdated-notice": "ဤဘာသာပြန်သည် မွမ်းမံရန် လိုအပ်နိုင်သည်။",
+ "tux-editor-outdated-notice-diff-link": "ကွဲပြားမှုများကို ပြရန်",
+ "tux-editor-doc-editor-placeholder": "စာလွှာ စာရွက်စာတမ်း",
+ "tux-editor-doc-editor-save": "စာရွက်စာတမ်း လွှင့်တင်ရန်",
+ "tux-editor-doc-editor-cancel": "မလုပ်တော့ပါ",
+ "tux-messagetable-more-messages": "ပို၍ $1 {{PLURAL:$1|မက်ဆေ့|မက်ဆေ့များ}}",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|မက်ဆေ့|မက်ဆေ့များ}}ကို ခေါ်ယူနေသည်...",
+ "tux-message-filter-placeholder": "စိစစ် စာရင်း",
+ "tux-message-filter-result": "\"$2\" အတွက် $1 {{PLURAL:$1|ရလဒ်|ရလဒ်များ}} တွေ့ရှိခဲ့သည်",
+ "tux-message-filter-advanced-button": "အဆင့်မြင့် ရှာဖွေခြင်း",
+ "tux-proofread-translated-by-self": "သင် ဘာသာပြန်ထားသည်",
+ "tux-empty-list-all": "ဤမက်ဆေ့အုပ်စုသည် ဗလာဖြစ်နေသည်",
+ "tux-empty-list-translated": "ဘာသာပြန်ထားသော မက်ဆေ့များမရှိပါ",
+ "tux-empty-list-translated-guide": "ဘာသာပြန်ခြင်းကို ကူညီနိုင်ပါသည်",
+ "tux-empty-list-translated-action": "ဘာသာပြန်ရန်",
+ "tux-empty-no-messages-to-display": "ပြသပေးရန် မက်ဆေ့များမရှိပါ",
+ "tux-empty-no-outdated-messages": "ခေတ်နောက်ကျသော မက်ဆေ့များမရှိပါ",
+ "tux-empty-nothing-to-proofread": "ပြန်လည်ဆန်းစစ်ရန် ဘာမှမရှိပါ",
+ "tux-empty-you-can-help-providing": "ဘာသာပြန်အသစ်များ ထောက်ပံ့၍ ကူညီနိုင်သည်",
+ "tux-empty-nothing-new-to-proofread": "ပြန်လည်ဆန်းစစ်ရန် အသစ်တစ်ခုမှ မရှိပါ",
+ "tux-empty-you-can-review-already-proofread": "အခြားသူများ ပြန်လည်ဆန်းစစ်ပြီးသား ဘာသာပြန်များကို ပြန်လည်ဆန်းစစ်နိုင်သည်။",
+ "tux-empty-list-other": "ဘာသာပြန်ရန် ဘာတစ်ခုမှမရှိပါ",
+ "tux-empty-list-other-guide": "ရှိနှင့်ပြီးသား ဘာသာပြန်များကို ပြန်လည်ဆန်းစစ်ခြင်းဖြင့် ကူညီနိုင်သည်",
+ "tux-empty-list-other-action": "ဘာသာပြန်များကို ပြန်လည်ဆန်းစစ်ရန်",
+ "tux-empty-list-other-link": "မက်ဆေ့အားလုံး ပြရန်",
+ "tux-editor-close-tooltip": "ပိတ်",
+ "tux-editor-expand-tooltip": "ချဲ့ရန်",
+ "tux-editor-collapse-tooltip": "ချုံ့ရန်",
+ "tux-editor-message-tools-show-editor": "ဝီကီအယ်ဒီတာတွင် ပြရန်",
+ "tux-editor-message-tools-history": "ရာဇဝင်",
+ "tux-editor-message-tools-delete": "ဖျက်ရန်",
+ "tux-editor-message-tools-translations": "ဘာသာပြန်များအားလုံး",
+ "tux-editor-message-tools-linktothis": "ဤမက်ဆေ့သို့ လင့်ခ်ချိတ်ရန်",
+ "tux-editor-loading": "ဝန်ဆွဲတင်နေသည်...",
+ "tux-editor-loading-failed": "ဘာသာပြန်အကူညီများကို ဝန်ဆွဲတင်ရန် မအောင်မြင်ခဲ့ပါ- $1",
+ "translate-search-more-languages-info": "နောက်ထပ် {{PLURAL:$1|ဘာသာစကား|ဘာသာစကားများ}} $1 ခု",
+ "translate-statsbar-tooltip": "$1% ဘာသာပြန်ပြီး၊ $2% ပြန်လည်ဆန်းစစ်ပြီး",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% ဘာသာပြန်ပြီး၊ $2% ပြန်လည်ဆန်းစစ်ပြီး၊ $3% ခေတ်နောက်ကျနေ",
+ "translate-search-more-groups-info": "ပို၍ $1 {{PLURAL:$1|အုပ်စု|အုပ်စုများ}}",
+ "tux-session-expired": "သင်သည် အကောင့်ထဲသို့ မဝင်ထားတော့ပါ။ သီးခြား tab တစ်ခုမှ အကောင့်ထဲသို့ ဝင်ပါ။ တနည်းအားဖြင့် မသိမ်းရသေးသော ဘာသာပြန်များကို မိတ္တူတစ်ခုကူးထားပြီး ဤစာမျက်နှာသို့ ပြန်လာကာ သင်၏ဘာသာပြန်များကို ထပ်မံရိုက်ထည့်ပါ။",
+ "specialpages-group-translation": "ဘာသာပြန်ခြင်း"
+}
diff --git a/Translate/i18n/core/myv.json b/Translate/i18n/core/myv.json
new file mode 100644
index 00000000..d28a7a56
--- /dev/null
+++ b/Translate/i18n/core/myv.json
@@ -0,0 +1,61 @@
+{
+ "@metadata": {
+ "authors": [
+ "Botuzhaleny-sodamo",
+ "Rueter"
+ ]
+ },
+ "translate": "Ютавтомонзо",
+ "translate-page-no-such-language": "Аравтозь келесь а маштови.",
+ "translate-page-settings-legend": "Аравтнемкат",
+ "translate-page-group": "Куро",
+ "translate-page-language": "Кель",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|пачтямне|пачтямнеть}} лопазонзо",
+ "translate-submit": "Кандомс",
+ "translate-page-showing-all": "{{PLURAL:$1|Невтеви 1 пачтямне|Невтевить $1 пачтямнеть}}.",
+ "translate-page-showing-none": "Пачтямнэть невтемс арасть",
+ "translate-next": "Седе тов ве лопа",
+ "translate-prev": "Седе икелень лопась",
+ "translate-page-description-legend": "Куродо кить-мезть",
+ "translate-page-edit": "витнемензэ-петнемензэ",
+ "translate-optional": "(мелень коряс)",
+ "translate-ignored": "(менстязь)",
+ "translate-edit-definition": "Пачтямнэнть чарькодевтемазо",
+ "translate-edit-contribute": "эсеть путовкс путомс",
+ "translate-edit-no-information": "''Те пачтямнесэнть арась чарькодевтема. Тевс нолдамодонзо содат, косо эли кода, лездак лия ютавтыцятненень. Поладт те пачтямнентень превть-арсемат.''",
+ "translate-edit-information": "Мезе содамс \"$1\" пачтямнэденть",
+ "translate-rc-translation-filter": "Сувтнемс ютавтовкстнэнь",
+ "translate-rc-translation-filter-no": "Мезеяк а теемс",
+ "translate-rc-translation-filter-only": "Ськамост ютавтовкстнэнь невтемс",
+ "translate-rc-translation-filter-filter": "Панемс ютавтовкстнэнь сувтемань пачк",
+ "translationstats": "Ютавтомадо статистика",
+ "translate-stats-edits": "Витнемат-петнемат",
+ "translate-stats-users": "Ютавтыцят",
+ "translate-statsf-width": "Пикселсэ келезэ:",
+ "translate-statsf-height": "Пикселсэ сэрезэ:",
+ "translate-statsf-scale-days": "Чить",
+ "translate-statsf-scale-hours": "Цяст",
+ "translate-statsf-count": "Онкс:",
+ "translate-statsf-count-edits": "Зяроксть витнезь-петнезь",
+ "translate-statsf-count-users": "Зяро ютавтыцятнеде",
+ "translate-statsf-language": "Ботпулосо явонь списка, косо келень кодт:",
+ "translate-statsf-group": "Ботпулосо явонь списка, косо куронь кодт:",
+ "translate-statsf-submit": "Васнянь неевтезэ",
+ "translate-tag-page-desc": "\"[[$2|$1]]\" вики лопась ютавтозь «$3 ($4)» лопасто.",
+ "translate-sidebar-alltrans": "Лия кельсэ",
+ "translations": "Весе ютавтовкст",
+ "translate-translations-no-message": "\"$1\" пачтямнэсь а йутавтови",
+ "translate-translations-none": "\"$1\" пачтямнэнть арасть ютавтовксонзо",
+ "translate-translations-fieldset-title": "Пачтямнэ",
+ "translate-translations-messagename": "Лемезэ:",
+ "languagestats": "Келень статистикат",
+ "translate-language-code": "Келень код",
+ "translate-language-code-field-name": "Келень кодось:",
+ "translate-language": "Кель",
+ "translate-total": "Пачтямнэть",
+ "translate-untranslated": "Апак ютавто",
+ "translate-percentage-fuzzy": "Таштамозь",
+ "translate-manage-action-import": "Совавтомс",
+ "translate-manage-submit": "Топавтомс",
+ "translate-documentation-language": "Пачтямнеде документация"
+}
diff --git a/Translate/i18n/core/mzn.json b/Translate/i18n/core/mzn.json
new file mode 100644
index 00000000..37d4d7b3
--- /dev/null
+++ b/Translate/i18n/core/mzn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "محک"
+ ]
+ },
+ "translate-documentation-language": "پیغوم ِمستندات"
+}
diff --git a/Translate/i18n/core/nah.json b/Translate/i18n/core/nah.json
new file mode 100644
index 00000000..a5422299
--- /dev/null
+++ b/Translate/i18n/core/nah.json
@@ -0,0 +1,48 @@
+{
+ "@metadata": {
+ "authors": [
+ "Akapochtli",
+ "Fluence",
+ "Languaeditor",
+ "Ricardo gs",
+ "Taresi",
+ "Teòtlalili"
+ ]
+ },
+ "translate": "Xitlahtolkwapa",
+ "translate-taction-translate": "Xitlahtolkwapa",
+ "translate-page-group": "Nechikolli",
+ "translate-page-language": "Tlahtolli",
+ "translate-page-navigation-legend": "Panoliztli",
+ "translate-page-showing": "Tiquintta tlahcuilōltzin īhuīcpa $1 oc $2 īmpan $3.",
+ "translate-page-showing-all": "{{PLURAL:$1|Tiquintta|Tiquintta}} $1 tlahcuilōltzin.",
+ "translate-page-showing-none": "Ahtlein ic tlatta.",
+ "translate-next": "Niman zāzanilli",
+ "translate-prev": "Achto tlahcuilolamatl",
+ "translate-page-description-legend": "Olōltechopa",
+ "translate-page-edit": "xikpatla",
+ "translate-edit-contribute": "titlapalēhuīz",
+ "translate-rcfilters-translations": "Tlahtolkwapalistli",
+ "translate-rcfilters-translations-only-label": "Tlahtolkwapalistli",
+ "translate-rc-translation-filter-no": "Ahtlein titlachīhuāz",
+ "translationstats": "Tlahtōlcuepaliztli tlapōhualli",
+ "translate-stats-edits": "Tlapatlaliztli",
+ "translate-stats-users": "Tlahtolkwapanih",
+ "translate-statsf-scale-days": "Tōnalli",
+ "translate-statsf-submit": "Achtochīhualiztli",
+ "translate-tag-page-desc": "Huiquizāzanilli ītlahtōlcuepaliz [[$2|$1]].",
+ "translate-sidebar-alltrans": "Itech occequintin tlahtoltin",
+ "translations": "Nochi tlahtolkwapalistli",
+ "translate-translations-none": "Ayāc tlahtōlcuepaliztli ic \"$1\"",
+ "translate-translations-fieldset-title": "Ehekatlahkwilolli",
+ "translate-language": "Tlahtolli",
+ "translate-mgs-column-language": "Tlahtolli",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Tlahtolcuepqui}}|Tlahtolcuepqueh}}: $1",
+ "translate-searchprofile": "Tlahtolkwapalistli",
+ "tux-languageselector": "Xitlahtolkwapa ika",
+ "tux-editor-cancel-button-label": "Xikxolewa",
+ "tux-editor-doc-editor-cancel": "Xikxolewa",
+ "tux-empty-list-translated-action": "Xitlahtolkwapa",
+ "tux-editor-message-tools-history": "Tololli",
+ "tux-editor-message-tools-delete": "Xikixpolo"
+}
diff --git a/Translate/i18n/core/nan.json b/Translate/i18n/core/nan.json
new file mode 100644
index 00000000..5b1fe65d
--- /dev/null
+++ b/Translate/i18n/core/nan.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "A-lú-mih",
+ "Ianbu",
+ "Luuva",
+ "唐吉訶德的侍從"
+ ]
+ },
+ "translate-rcfilters-translations": "Hoan-e̍k",
+ "translate-documentation-language": "訊息說明書",
+ "tux-editor-message-tools-history": "Le̍k-sú"
+}
diff --git a/Translate/i18n/core/nap.json b/Translate/i18n/core/nap.json
new file mode 100644
index 00000000..aacac836
--- /dev/null
+++ b/Translate/i18n/core/nap.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "C.R.",
+ "Finizio"
+ ]
+ },
+ "translate-taction-lstats": "Statistiche d' 'a lengua",
+ "languagestats": "Statistiche d' 'a lengua",
+ "translate-mgs-pagename": "Statistiche d' 'o gruppo 'e mmasciate",
+ "translate-documentation-language": "Documentazione r'a 'mmasciata"
+}
diff --git a/Translate/i18n/core/nb.json b/Translate/i18n/core/nb.json
new file mode 100644
index 00000000..313e9b9e
--- /dev/null
+++ b/Translate/i18n/core/nb.json
@@ -0,0 +1,454 @@
+{
+ "@metadata": {
+ "authors": [
+ "Avilena",
+ "Byrial",
+ "Danmichaelo",
+ "EdoAug",
+ "Harald Khan",
+ "Jon Harald Søby",
+ "Jsoby",
+ "Kingu",
+ "Laaknor",
+ "Nghtwlkr",
+ "Njardarlogar",
+ "Simny"
+ ]
+ },
+ "translate": "Oversett",
+ "translate-desc": "[[Special:Translate|Spesialside]] for oversettelse av MediaWiki og annet",
+ "translate-fuzzybot-desc": "Dette er en spesiell systemkonto som brukes av MediaWikis [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate Translate-utvidelse] for å vedlikeholde oversettelser.\n\nKontoen er del av programvaren, og eies ikke av noen bruker.",
+ "translate-taskui-export-to-file": "Eksporter i opprinnelig format",
+ "translate-taskui-export-as-po": "Eksporter for frakoblet oversettelse",
+ "translate-taskui-export-as-csv": "Eksporter i CSV-format",
+ "translate-export-csv-message-title": "Tittel for oversettelsesmelding",
+ "translate-export-csv-definition": "Meldingsdefinisjon",
+ "translate-taction-translate": "Oversett",
+ "translate-taction-proofread": "Korrekturles",
+ "translate-taction-lstats": "Språkstatistikk",
+ "translate-taction-mstats": "Meldingsgruppestatistikk",
+ "translate-taction-export": "Eksporter",
+ "translate-taction-disabled": "Denne handlingen er deaktivert på denne wikien.",
+ "translate-page-no-such-language": "Oppgitt språk var ugyldig.",
+ "translate-page-no-such-group": "Oppgitt gruppe var ugyldig.",
+ "translate-page-disabled": "Oversettelser til dette språket i denne gruppen har blitt deaktivert.\nÅrsak:\n\n<em>$1</em>",
+ "translate-language-disabled": "Oversetting til dette språket er slått av.",
+ "translate-page-settings-legend": "Innstillinger",
+ "translate-page-group": "Gruppe",
+ "translate-page-language": "Språk",
+ "translate-page-limit": "Grense",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|melding|meldinger}} per side",
+ "translate-submit": "Hent",
+ "translate-page-navigation-legend": "Navigasjon",
+ "translate-page-showing": "Viser meldinger fra $1 til $2 av $3.",
+ "translate-page-showing-all": "Viser {{PLURAL:$1|én melding|$1 meldinger}}.",
+ "translate-page-showing-none": "Ingen meldinger å vise.",
+ "translate-next": "Neste side",
+ "translate-prev": "Forrige side",
+ "translate-page-description-legend": "Informasjon om gruppen",
+ "translate-page-description-hasoptional": "Denne meldingsgruppen inneholder valgfrie meldinger.\nValgfrie meldinger bør kun oversettes om språket ditt har spesielle behov, som at det ikke bruker mellomrom eller man må transkribere egennavn. $1",
+ "translate-page-description-hasoptional-open": "Vis valgfrie meldinger.",
+ "translate-page-edit": "rediger",
+ "translate-optional": "(valgfri)",
+ "translate-ignored": "(ignorert)",
+ "translate-edit-title": "Rediger «$1»",
+ "translate-edit-definition": "Meldingsdefinisjon",
+ "translate-edit-contribute": "bidra",
+ "translate-edit-no-information": "<em>Denne meldingen har ingen dokumentasjon.\nOm du vet hvor eller hvordan denne meldingen brukes kan du hjelpe andre oversettere ved å legge inn dokumentasjon på denne meldingen.</em>",
+ "translate-edit-information": "Informasjon om meldingen ($1)",
+ "translate-edit-warnings": "Advarsler om ufullstendige oversettelser",
+ "translate-edit-tmmatch-source": "Kildetekst for oversettelse: $1",
+ "translate-edit-tmmatch": "samsvarer $1 %",
+ "translate-edit-nopermission": "Du må ha oversetterrettigheter for å oversette beskjeder.",
+ "translate-edit-askpermission": "Få tillatelse",
+ "exporttranslations": "Eksporter oversettelser",
+ "translate-export-form-format": "Format",
+ "translate-export-invalid-format": "Oppgi et gyldig format.",
+ "translate-export-not-supported": "Eksportering av oversettelser støttes ikke.",
+ "translate-export-format-notsupported": "Det oppgitte eksporteringsformatet støttes ikke av meldingsgruppen.",
+ "translate-export-group-too-large": "Den valgte beskjedgruppa er for stor. Velg en beskjedgruppe som har færre enn $1 {{PLURAL:$1|beskjed|beskjeder}} eller kontakt en oversettelsesadministrator for råd.",
+ "translate-checks-parameters": "Følgende {{PLURAL:$2|parameter|parametre}} brukes ikke:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "Følgende {{PLURAL:$2|parameter er ukjent|parametre er ukjente}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "Det er et ujevnt antall {{PLURAL:$2|parenteser|paranteser}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "Følgende {{PLURAL:$2|lenke er problematisk|$2 lenker er problematiske}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "Følgende {{PLURAL:$2|lenke|$2 lenker}} mangler:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Definisjonen bruker <nowiki>{{PLURAL:}}</nowiki>, men oversettelsen gjør ikke det.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> ble gitt {{PLURAL:$1|én form|$1 former}}, men kun {{PLURAL:$2|én form|$2 former}} støttes (utenom 0- og 1-former).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> har duplikatformer på slutten. <nowiki>{{PLURAL:$1|hus|hus}}</nowiki> bør skrives som <nowiki>{{PLURAL:$1|hus}}</nowiki>.",
+ "translate-checks-gettext-plural-missing": "Denne oversettelsen må ha <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-unsupported": "Denne beskjeden støtter ikke <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-count": "<nowiki>{{PLURAL:GETTEXT|}}</nowiki> godtar nøyaktig $1 {{PLURAL:$1|flertallsform|flertallsformer}}. For tiden er $2 {{PLURAL:$2|flertallsform|flertallsformer}} gitt.",
+ "translate-checks-smartformat-plural-missing": "Oversettelsen må ha flertall på variabelen $1.",
+ "translate-checks-smartformat-plural-unsupported": "Denne beskjeden støtter ikke flertall på variabelen $1.",
+ "translate-checks-smartformat-plural-count": "Galt antall flertallsformer i <strong>$3</strong>. Den må ha $1 {{PLURAL:$1|flertallsform|flertallsformer}}. For tiden er $2 {{PLURAL:$2|flertallsform|flertallsformer}} gitt.",
+ "translate-checks-unicode-plural-missing": "Oversettelsen må ha <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-unsupported": "Beskjeden støtter ikke <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-invalid": "Flertallsformer bør defineres som $1. Denne oversettelsen inneholder $2.",
+ "translate-checks-pagename": "Navnerom forandret fra definisjonen",
+ "translate-checks-format": "Denne oversettelsen følger ikke definisjonen eller har ugyldig syntaks: $1",
+ "translate-checks-escape": "Følgende {{PLURAL:$2|avbruddstegn}} kan være tilfeldige: <strong>$1</strong>. {{PLURAL:$4|Et gyldig|Gyldige}} avbruddstegn er $3.",
+ "translate-checks-parametersnotequal": "Parametertelleren er {{PLURAL:$1|$1}}; skulle vært {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> er feilaktig.",
+ "translate-checks-fudforum-syntax": "Bruk <nowiki>$1</nowiki> istedet for <nowiki>$2</nowiki> i dette prosjektet.",
+ "translate-checks-newline-missing-start": "$1 {{PLURAL:$1|linjeskift}} mangler i begynnelsen av oversettelsen.",
+ "translate-checks-newline-missing-end": "$1 {{PLURAL:$1|linjeskift}} mangler i slutten av oversettelsen.",
+ "translate-checks-newline-extra-start": "Det er $1 {{PLURAL:$1|linjeskift}} for mye i begynnelsen av oversettelsen.",
+ "translate-checks-newline-extra-end": "Det er $1 {{PLURAL:$1|linjeskift}} for mye i slutten av oversettelsen.",
+ "translate-checks-value-not-present": "Oversettelsen må være lik {{PLURAL:$1|1=|én av følgende verdier:}} $1.",
+ "translate-checks-replacement": "Bruk $2 i stedet for $1.",
+ "translate-checks-empty": "Oversettelser uten innhold eller med kun blanke tegn er ikke tillatt.",
+ "translate-pref-editassistlang": "Hjelpespråk:",
+ "prefs-translate": "Oversettelsesalternativ",
+ "translate-pref-editassistlang-help": "Kommaseparert liste over språkkoder.\nOversettelsen av en beskjed til disse språkene blir vist mens du oversetter.\nStandardlisten over språk avhenger av språket ditt.",
+ "translate-pref-editassistlang-bad": "Ugyldig språkkode i listen:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Rediger med oversettingsgrensesnittet",
+ "action-translate": "redigere med oversettelsesgrensesnittet",
+ "right-translate-manage": "Administrer meldingsgrupper",
+ "action-translate-manage": "håndtere meldingsgrupper",
+ "right-translate-import": "Importer frakoblede oversettelser",
+ "action-translate-import": "importer frakoblede oversettelser",
+ "right-translate-messagereview": "Revidere oversettelser",
+ "action-translate-messagereview": "gå gjennom oversettelser",
+ "right-translate-groupreview": "Endre arbeidsflytstatusen til meldingsgrupper",
+ "action-translate-groupreview": "endre arbeidsflytstatusen til meldingsgrupper",
+ "translate-rcfilters-translations": "Oversettelser",
+ "translate-rcfilters-translations-only-label": "Oversettelser",
+ "translate-rcfilters-translations-only-desc": "Endringer til oversatte sider.",
+ "translate-rcfilters-translations-filter-label": "Ikke oversettelser",
+ "translate-rcfilters-translations-filter-desc": "Alle endringer som ikke er oversettelser.",
+ "translate-rcfilters-translations-site-label": "Systembeskjeder",
+ "translate-rcfilters-translations-site-desc": "Tilpassinger av systembeskjedene i MediaWiki-navnerommet.",
+ "translate-rc-translation-filter": "Filtrer oversettelser:",
+ "translate-rc-translation-filter-no": "Ikke gjør noe",
+ "translate-rc-translation-filter-only": "Vis bare oversettelser",
+ "translate-rc-translation-filter-filter": "Filtrer bort oversettelser",
+ "translate-rc-translation-filter-site": "Kun endringer på nettstedsmeldinger",
+ "translationstats": "Oversettelsesstatistikk",
+ "translate-stats-edits": "Redigeringer",
+ "translate-stats-users": "Oversettere",
+ "translate-stats-registrations": "Registreringer",
+ "translate-stats-reviews": "Revideringer",
+ "translate-stats-reviewers": "Revisorer",
+ "translate-statsf-intro": "Du kan generere enkel statistikk med dette skjemaet.\nAlle verdiene har øvre og nedre grenser.",
+ "translate-statsf-options": "Grafalternativer",
+ "translate-statsf-width": "Bredde i piksler:",
+ "translate-statsf-height": "Høyde i piksler:",
+ "translate-statsf-days": "Tidsperiode i dager:",
+ "translate-statsf-start": "Startdato:",
+ "translate-statsf-scale": "Detaljnivå:",
+ "translate-statsf-scale-years": "År",
+ "translate-statsf-scale-months": "Måneder",
+ "translate-statsf-scale-weeks": "Uker",
+ "translate-statsf-scale-days": "Dager",
+ "translate-statsf-scale-hours": "Timer",
+ "translate-statsf-count": "Mål:",
+ "translate-statsf-count-edits": "Antall redigeringer",
+ "translate-statsf-count-users": "Aktive oversettere",
+ "translate-statsf-count-registrations": "Nye brukere",
+ "translate-statsf-count-reviews": "Oversettelsesrevideringer",
+ "translate-statsf-count-reviewers": "Revisorer",
+ "translate-statsf-language": "Kommaseparert liste over språkkoder:",
+ "translate-statsf-group": "Kommaseparert liste over gruppekoder:",
+ "translate-statsf-submit": "Forhåndsvisning",
+ "translate-statsf-unknown-error": "En ukjent feil har oppstått.",
+ "translate-statsf-error-message": "En feil oppsto under lasting av grafen: $1",
+ "translate-statsf-graph-alt-text-info": "Alternativ tekst for oversettelsesstatistikken finnes i datatabellen nedenfor.",
+ "translate-statsf-alt-text": "Dette er tekstalternativet for oversettelsesstatistikken.",
+ "translate-statsf-embed": "Kode for å bygge inn grafen for oversettelsesstatistikk på andre sider.",
+ "translate-tag-page-desc": "Oversettelse av wikisiden [[$2|$1]] fra $3 ($4).",
+ "translate-tag-page-wikipage-desc": "[[$1|Oversettelse]] av wikisiden [[$2]] fra <bdi>$3</bdi> ($4) til <bdi>$5</bdi> ($6)",
+ "translate-sidebar-alltrans": "På andre språk",
+ "translations": "Alle oversettelser",
+ "translations-summary": "Skriv inn et meldingsnavn nedenfor for å vise alle tilgjengelige oversettelser.",
+ "translate-translations-no-message": "«$1» er ikke en melding som kan oversettes",
+ "translate-translations-none": "Det finnes ingen oversettelser for «$1»",
+ "translate-translations-count": "Fant {{PLURAL:$1|én oversettelse|$1 oversettelser}}.",
+ "translate-translations-fieldset-title": "Melding",
+ "translate-translations-messagename": "Navn:",
+ "translate-translations-project": "Prosjekt:",
+ "translate-translations-including-no-param": "Spesifiser en gyldig meldingsnøkkel i undersideparameteren.",
+ "translate-translations-history-short": "h",
+ "languagestats": "Språkstatistikk",
+ "languagestats-summary": "Denne siden viser oversettelsesstatistikk for alle meldingsgrupper for et språk.",
+ "messagegroupstats-summary": "Denne siden viser statistikk for meldingsgrupper.",
+ "languagestats-stats-for": "Oversettelsesstatistikk for $1 ($2).",
+ "languagestats-recenttranslations": "siste oversettelser",
+ "translate-langstats-incomplete": "Noe av statistikken på denne siden er ufullstendig. Last siden på nytt for å få mer statistikk.",
+ "translate-langstats-expand": "utvid",
+ "translate-langstats-collapse": "skjul",
+ "translate-langstats-expandall": "vis alle",
+ "translate-langstats-collapseall": "skjul alle",
+ "translate-language-code": "Språkkode",
+ "translate-language-code-field-name": "Språkkode:",
+ "translate-suppress-complete": "Skjul ferdig oversatte meldingsgrupper",
+ "translate-ls-noempty": "Skjul helt uoversatte meldingsgrupper",
+ "translate-language": "Språk",
+ "translate-total": "Meldinger",
+ "translate-untranslated": "Uoversatte",
+ "translate-percentage-complete": "Ferdigstilt",
+ "translate-percentage-fuzzy": "Utdatert",
+ "translate-percentage-proofread": "Korrekturlest",
+ "translate-languagestats-overall": "Alle meldingsgrupper sammen",
+ "translate-ls-submit": "Vis statistikk",
+ "translate-ls-column-group": "Meldingsgruppe",
+ "translate-mgs-pagename": "Meldingsgruppestatistikk",
+ "translate-mgs-fieldset": "Visningsinnstillinger",
+ "translate-mgs-group": "Meldingsgruppe:",
+ "translate-mgs-nocomplete": "Ikke vis språk som har fullført denne oversettelsen",
+ "translate-mgs-noempty": "Ikke vis språk som ikke har noen oversettelser",
+ "translate-mgs-submit": "Vis statistikk",
+ "translate-mgs-column-language": "Språk",
+ "translate-mgs-totals": "{{PLURAL:$1|2=Begge|Alle}} {{PLURAL:$1|språk}} til sammen",
+ "translate-mgs-invalid-group": "Den angitte gruppen $1 finnes ikke.",
+ "translate-mgs-nothing": "Ingen av den ønskede statistikken kan vises.",
+ "translate-tes-server-error": "Kunne ikke hente søkeforslag",
+ "translate-tes-group-not-found": "Ingen treff",
+ "translate-tes-type-to-search": "Skriv for å begynne å søke",
+ "supportedlanguages": "Aktive språk",
+ "supportedlanguages-summary": "Denne siden viser en liste over alle aktive språk på {{SITENAME}}, sammen med navnene på oversetterne som jobber med det språket. Jo større en oversetters brukernavn er, jo flere bidrag har oversetteren. Fargen på understrekingen er en indikator på hvor lenge oversetteren har vært aktiv her.",
+ "supportedlanguages-colorlegend": "Fargeforklaring: Siste oversettelse for $1 dager siden.",
+ "supportedlanguages-portallink": "[$1] $2 – $3",
+ "supportedlanguages-sqlite-error": "SQLite støttes ikke",
+ "supportedlanguages-postgres-error": "PostgreSQL støttes ikke",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Oversetter}}|Oversettere}}: $1",
+ "supportedlanguages-recenttranslations": "siste oversettelser",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|språk}} totalt.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|redigering|redigeringer}} – siste redigering for $3 {{PLURAL:$3|dag|dager}} siden",
+ "translate-supportedlanguages-cached": "Denne informasjon ble mellomlagret for $1 siden.",
+ "translate-activelanguages-invalid-code": "Språkkoden «$1» er ukjent eller ikke aktivert for oversettelse.",
+ "abusefilter-edit-builder-vars-translate-source-text": "Kildeteksten til oversettelsesenheten",
+ "abusefilter-edit-builder-vars-translate-target-language": "Målspråk for oversettelse",
+ "translate-jssti-add": "Legg til i listen",
+ "managemessagegroups": "Meldingsgruppehåndtering",
+ "translate-smg-notallowed": "Du har ikke tillatelse til å utføre dette.",
+ "translate-smg-nochanges": "Det er ingen endringer å bearbeide.",
+ "translate-smg-submit": "Lagre endringer for prosessering",
+ "translate-smg-submitted": "Meldingdefinisjoner har blitt oppdatert. Endringene prosesseres i bakgrunnen.",
+ "translate-smg-submitted-with-failure": "Oppdatering av beskjeddefinisjonene feilet for {{PLURAL:$1|denne gruppa|følgende grupper}}: – $2. $3",
+ "translate-smg-submitted-others-processing": "Beskjeddefinisjoner for andre grupper prosesseres i bakgrunnen.",
+ "translate-smg-more": "Det blir flere endringer å prosessere etter at disse endringene er levert.",
+ "translate-smg-left": "Meldingsinnhold i wikien",
+ "translate-smg-right": "Kommende endringer",
+ "translate-smg-rename-select": "Velg",
+ "translate-smg-rename-cancel": "Avbryt",
+ "translate-smg-rename-search": "Søk etter matchende beskjed …",
+ "translate-smg-rename-select-err": "Velg en beskjed som skal omdøpes",
+ "translate-smg-rename-no-msg": "Ingen beskjeder funnet.",
+ "translate-smg-rename-new": "Legg til som ny …",
+ "translate-smg-rename-rename": "Legg til som omdøping av …",
+ "translate-smg-rename-dialog-title": "Velg matchende omdøping for $1",
+ "translate-smg-changeset-modified": "Endringssettet har blitt endret av en annen bruker eller prosess. Endringene dine kan ikke publiseres siden det kan overskrive deres endringer. Oppdater siden for å se de siste endringene.",
+ "translate-smg-no-groups-in-sync": "Det er ingen grupper som synkroniseres for øyeblikket.",
+ "translate-smg-strong-sync-help": "Hjelp",
+ "translate-smg-groups-in-sync": "Grupper som synkroniseres for øyeblikket",
+ "translate-smg-groups-in-sync-list": "Liste over grupper som prosesseres i bakgrunnen:",
+ "translate-smg-groups-with-error-title": "Grupper som støtte på feil under synkronisering",
+ "translate-smg-groups-with-error-desc": "Liste over grupper og deres beskjeder som hadde feil under synkronisering:",
+ "translate-smg-group-with-error-summary": "$1 {{PLURAL:$1|beskjed|beskjeder}} med feil:",
+ "translate-smg-group-message-action-history": "Historikk",
+ "translate-smg-group-action-resolve": "Merk som løst",
+ "translate-smg-group-sync-error-warn": "Denne gruppa støtte på en feil under synkronisering. Fiks feilene før gruppa prosesseres videre.",
+ "translate-smg-group-message-tag-outdated": "Utdatert",
+ "translate-smg-group-message-tag-rename": "Gi nytt navn",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|Tagg|Tagger}}:",
+ "translate-smg-group-message-message-content": "Innhold:",
+ "translate-smg-group-message-message-target": "Mål:",
+ "translate-smg-group-message-message-replacement": "Erstatning:",
+ "translate-smg-group-message-message-other-langs": "Andre språk:",
+ "translate-smg-loading": "Laster …",
+ "translate-smg-unknown-error": "Det oppsto en ukjent feil under prosesseringen av forespørselen din.",
+ "translate-manage-import-diff": "Melding $1 | Handlinger: $2",
+ "translate-manage-import-new": "Ny melding $1",
+ "translate-manage-import-deleted": "Slettet melding $1",
+ "translate-manage-action-import": "Importer",
+ "translate-manage-action-conflict": "Importer og merk for revisjon («fuzzy»)",
+ "translate-manage-action-ignore": "Ignorer",
+ "translate-manage-action-fuzzy": "Importer og merk for revisjon («fuzzy»)",
+ "translate-manage-action-rename-fuzzy": "Døp om og merk oversettelser som foreldet",
+ "translate-manage-action-rename": "Døp om",
+ "translate-manage-action-ignore-change": "Ignorer oversettelsesendring",
+ "translate-manage-nochanges": "Det er ingen endringer i meldingsdefinisjonene for denne gruppen.",
+ "translate-manage-nochanges-other": "Det var ingen forandringer for dette språket.\nBruk lenken nedenfor for å returnere til gruppedataljene.",
+ "translate-manage-inconsistent": "Fant inkonsistens i forespørselen.\nVennligst sjekk om det har vært endringer og prøv igjen.\nDetaljer: $1.",
+ "translate-manage-toolong": "Den maksimale behandlingstiden på {{PLURAL:$1|ett sekund|$1 sekund}} ble overskredet.\nVennligst send skjemaet på nytt for å fortsette behandlingen.",
+ "translate-manage-import-summary": "Importerer en ny versjon fra en ekstern kilde",
+ "translate-manage-import-ignore": "Hopper over meldingen $1.",
+ "translate-manage-import-rename-summary": "Døpt om i ekstern kilde",
+ "translate-manage-conflict-summary": "Importerer en ny versjon fra en ekstern kilde.\nVennligst sjekk.",
+ "translate-manage-submit": "Utfør",
+ "translate-manage-intro-other": "Nedenfor er en liste over endringer i oversettelsen til språket $1.\nGå gjennom endringene og velg hva du vil gjøre med hver oppdatering.\nOm du velger å ignorere endringene vil denne handlingen kun være midlertidig.",
+ "translate-manage-import-ok": "Importert: $1",
+ "translate-manage-import-done": "Importering fullført.",
+ "translate-manage-empty-content": "Innholdet er tomt",
+ "translate-manage-key-reused": "Denne beskjeden finnes allerede på wikien. Sjekk om et gammelt nøkkelnavn har blitt brukt ved en feil.",
+ "translate-manage-source-message-not-found": "Beskjeddefinisjon ikke funnet",
+ "importtranslations": "Importer oversettelser",
+ "translate-import-from-local": "Lokal filopplasting:",
+ "translate-import-load": "Last fil",
+ "translate-import-err-dl-failed": "Klarte ikke å hente filen:\n$1",
+ "translate-import-err-ul-failed": "Filopplastingen mislyktes",
+ "translate-import-err-invalid-title": "Oppgitt filnavn <nowiki>$1</nowiki> var ugyldig.",
+ "translate-import-err-no-such-file": "Filen <nowiki>$1</nowiki> finnes ikke eller har ikke blitt lastet opp lokalt.",
+ "translate-import-err-stale-group": "Meldingsgruppen som denne filen tilhører finnes ikke.",
+ "translate-import-err-no-headers": "Filen er ikke en velformatert Gettext-fil i Translate-utvidelsesformatet:\nKunne ikke fastslå gruppe og språk fra filoverskriftene.",
+ "translate-js-support-unsaved-warning": "Du har upubliserte oversettelser.",
+ "translate-gs-pos": "Pos.",
+ "translate-gs-code": "Kode",
+ "translate-gs-continent": "Kontinent",
+ "translate-gs-speakers": "Brukere",
+ "translate-gs-score": "Poeng",
+ "translate-gs-multiple": "Flere",
+ "translate-gs-count": "Antall",
+ "translate-gs-total": "Totalt",
+ "translate-gs-avgscore": "Gj.snitt score",
+ "translate-documentation-language": "Meldingsdokumentasjon",
+ "translate-searchprofile": "Oversettelser",
+ "translate-searchprofile-tooltip": "Søk i alle oversettelser",
+ "translate-searchprofile-note": "Flere søkealternativer er tilgjengelig med [$1 oversettelsessøk].",
+ "translate-search-languagefilter": "Filtrer etter språk:",
+ "translate-search-nofilter": "Ingen filtrering",
+ "log-name-translationreview": "Logg for oversettelsesrevidering",
+ "log-description-translationreview": "Logg over alle revideringer av oversettelser og meldingsgrupper.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|godtok}} oversettelsen $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|endret}} statusen på oversettelser til $4 av $3 fra $6 til $7",
+ "group-translate-sandboxed": "Ikke-godtatte oversettere",
+ "group-translate-sandboxed-member": "{{GENDER:$1|ikke-godkjent oversetter}}",
+ "right-translate-sandboxmanage": "Behandle sandkassebrukere",
+ "action-translate-sandboxmanage": "behandle sandkassebrukere",
+ "right-translate-sandboxaction": "Utføre handlinger som er tillatt for sandkassebrukere",
+ "action-translate-sandboxaction": "utføre handlinger som er tillatt for sandkassebrukere",
+ "translate-workflow-state-": "(ikke satt)",
+ "translate-workflowstatus": "Status: $1",
+ "translate-workflow-set-doing": "Setter …",
+ "translate-workflow-autocreated-summary": "Automatisk oppretting av side for arbeidsflytstatus $1",
+ "translate-stats-workflow": "Status",
+ "translate-workflowgroup-label": "Arbeidsflytstatuser",
+ "translate-workflowgroup-desc": "Denne meldingsgruppen viser arbeidsflytsstatusene for oversettelse.\nDisse statusene defineres i konfigurasjonsvariabelen $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Nylige oversettelser",
+ "translate-dynagroup-recent-desc": "Denne meldingsgruppen viser alle nylige oversettelser til dette språket.\nMest nyttig for korrekturlesningsoppgaver.",
+ "translate-dynagroup-additions-label": "Nylige tillegg",
+ "translate-dynagroup-additions-desc": "Denne meldingsgruppen viser nye og endrede meldinger.",
+ "translate-msggroupselector-projects": "Meldingsgruppe",
+ "translate-msggroupselector-search-placeholder": "Søk grupper",
+ "translate-msggroupselector-search-all": "Alle",
+ "translate-msggroupselector-search-recent": "Siste",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|undergruppe|undergrupper}}",
+ "tux-languageselector": "Oversett til",
+ "tux-select-target-language": "Målspråk for oversettelse",
+ "tux-tab-all": "Alle",
+ "tux-tab-untranslated": "Uoversatte",
+ "tux-tab-outdated": "Utdaterte",
+ "tux-tab-translated": "Oversatte",
+ "tux-tab-unproofread": "Ikke korrekturlest",
+ "tux-edit": "Rediger",
+ "tux-status-optional": "Valgfri",
+ "tux-status-fuzzy": "Utdatert",
+ "tux-status-proofread": "Korrekturlest",
+ "tux-status-translated": "Oversatt",
+ "tux-status-saving": "Publiserer …",
+ "tux-status-unsaved": "Upublisert",
+ "tux-save-unknown-error": "Ukjent feil oppsto.",
+ "tux-editor-placeholder-documentation": "Legg til meldingsdokumentasjon",
+ "tux-editor-placeholder-language": "Din oversettelse til $1",
+ "tux-editor-editsummary-placeholder": "Forklar dine endringer (valgfritt)",
+ "tux-editor-paste-original-button-label": "Lim inn kildetekst",
+ "tux-editor-discard-changes-button-label": "Tilbakestill endringer",
+ "tux-editor-save-button-label": "Publiser oversettelse",
+ "tux-editor-skip-button-label": "Hopp over til neste",
+ "tux-editor-cancel-button-label": "Avbryt",
+ "tux-editor-confirm-button-label": "Bekreft oversettelse",
+ "tux-editor-proofread-button-label": "Merk som gjennomgått",
+ "tux-editor-shortcut-info": "Trykk på «$1» for å lagre og gå videre til neste beskjed, «$2» for å hoppe over, «$4» for å angi en forklaring eller hold «$3» for andre snarveier.",
+ "tux-editor-edit-desc": "Rediger dokumentasjon",
+ "tux-editor-add-desc": "Legg til dokumentasjon",
+ "tux-editor-suggestions-title": "Forslag",
+ "tux-editor-latest-updates-title": "Siste oppdateringer",
+ "tux-editor-changes-without-summary": "$1 {{PLURAL:$1|oppdatering|oppdateringer}} uten sammendrag",
+ "tux-editor-all-changes": "Alle endringer",
+ "tux-editor-in-other-languages": "På andre språk",
+ "tux-editor-need-more-help": "Trenger du mer hjelp?",
+ "tux-editor-ask-help": "Spør etter mer informasjon",
+ "tux-editor-tm-match": "$1% samsvar",
+ "tux-notices-more": "{{PLURAL:$1|$1 flere}}",
+ "tux-notices-hide": "skjul",
+ "tux-editor-save-failed": "Publisering av oversettelsen feilet: $1",
+ "tux-editor-n-uses": "brukt $1 {{PLURAL:$1|gang|ganger}}",
+ "tux-editor-message-desc-more": "Vis mer",
+ "tux-editor-message-desc-less": "Vis mindre",
+ "tux-editor-clear-translated": "Skjul oversatte",
+ "tux-editor-proofreading-mode": "Korrekturles",
+ "tux-editor-translate-mode": "Liste",
+ "tux-editor-proofreading-hide-own-translations": "Skjul dine oversettelser",
+ "tux-editor-proofreading-show-own-translations": "Vis dine oversettelser",
+ "tux-proofread-action-tooltip": "Merk som godkjent",
+ "tux-proofread-edit-label": "Rediger",
+ "tux-editor-page-mode": "Side",
+ "tux-editor-outdated-notice": "Denne oversettelsen trenger kanskje å bli oppdatert.",
+ "tux-editor-outdated-notice-diff-link": "Vis forskjeller",
+ "tux-editor-doc-editor-placeholder": "Meldingsdokumentasjon",
+ "tux-editor-doc-editor-save": "Publiser dokumentasjon",
+ "tux-editor-doc-editor-cancel": "Avbryt",
+ "tux-messagetable-more-messages": "$1 flere {{PLURAL:$1|melding|meldinger}}",
+ "tux-messagetable-loading-messages": "Laster {{PLURAL:$1|melding|meldinger}}...",
+ "tux-message-filter-placeholder": "Filtrer liste",
+ "tux-message-filter-result": "Fant $1 {{PLURAL:$1|resultat|resultater}} for \"$2\"",
+ "tux-message-filter-advanced-button": "Avansert søk",
+ "tux-message-filter-optional-messages-label": "Valgfrie meldinger",
+ "tux-proofread-translated-by-self": "Oversatt av deg",
+ "tux-empty-list-all": "Denne meldingsgruppen er tom",
+ "tux-empty-list-all-guide": "Velg en annen meldingsgruppe å oversette",
+ "tux-translate-page-no-such-group": "<strong>Den valgte gruppen eksisterer ikke.</strong> Velg en annen meldingsgruppe.",
+ "tux-empty-list-translated": "Ingen uoversatte meldinger",
+ "tux-empty-list-translated-guide": "Du kan hjelpe til å oversette",
+ "tux-empty-list-translated-action": "Oversett",
+ "tux-empty-no-messages-to-display": "Ingen meldinger å vise.",
+ "tux-empty-there-are-optional": "Det er valgfrie meldinger som ikke vises i listen",
+ "tux-empty-show-optional-messages": "Vis valgfrie meldinger",
+ "tux-empty-no-outdated-messages": "Ingen utdaterte meldinger",
+ "tux-empty-nothing-to-proofread": "Ingenting å godkjenne",
+ "tux-empty-you-can-help-providing": "Du kan bidra med nye oversettelser",
+ "tux-empty-nothing-new-to-proofread": "Intet nytt å godkjenne",
+ "tux-empty-you-can-review-already-proofread": "Du kan godkjenne oversettelser som allerede er godkjent av andre.",
+ "tux-empty-list-other": "Ingenting å oversette",
+ "tux-empty-list-other-guide": "Du kan hjelpe til med å korrekturlese eksisterende oversettelser",
+ "tux-empty-list-other-action": "Korrekturles oversettelser",
+ "tux-empty-list-other-link": "Vis alle meldinger",
+ "tux-editor-close-tooltip": "Lukk",
+ "tux-editor-expand-tooltip": "Utvid",
+ "tux-editor-collapse-tooltip": "Skjul",
+ "tux-editor-message-tools-show-editor": "Vis i wikieditoren",
+ "tux-editor-message-tools-history": "Historikk",
+ "tux-editor-message-tools-delete": "Slett",
+ "tux-editor-message-tools-translations": "Alle oversettelser",
+ "tux-editor-message-tools-linktothis": "Lenke til denne beskjeden",
+ "tux-editor-loading": "Laster...",
+ "tux-editor-loading-failed": "Kunne ikke laste oversettelseshjelpemidler: $1",
+ "translate-search-more-languages-info": "$1 flere {{PLURAL:$1|språk}}",
+ "translate-statsbar-tooltip": "$1% oversatt, $2% korrekturlest",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% oversatt, $2% korrekturlest, $3% utdatert",
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|gruppe|grupper}} til",
+ "translate-syntax-error": "Oversettelsen har syntaksfeil",
+ "tux-session-expired": "Du er ikke lenger logget inn. Logg inn i en annen fane, eller kopier ulagrede oversettelser, logg inn og kom tilbake til denne siden og lim inn oversettelsen(e).",
+ "tux-nojs": "Dette verktøyet virker ikke uten JavaScript. JavaScript er slått av eller virket ikke, eller nettleseren din støttes ikke.",
+ "specialpages-group-translation": "Oversettelse",
+ "content-model-translate-messagebundle": "Knippe over oversettbare beskjeder",
+ "translate-messagebundle-validation-error": "Ugyldig beskjedknippe: $1",
+ "translate-messagebundle-error-parsing": "Feil under tolking av JSON: $1",
+ "translate-messagebundle-error-invalid-array": "Et beskjedknippe må være et JSON-objekt. Fant typen $1",
+ "translate-messagebundle-error-key-empty": "Beskjedknippet kan ikke inneholde en tom nøkkel",
+ "translate-messagebundle-error-key-too-long": "Nøkkelen «$1» er for lang",
+ "translate-messagebundle-error-key-invalid-characters": "Nøkkelen «$1» inneholder ikke-tillatte tegn",
+ "translate-messagebundle-error-invalid-value": "Nøkkelen «$1» inneholder ikke en strengverdi",
+ "translate-messagebundle-error-empty-value": "Nøkkelen «$1» har ingen verdi",
+ "translate-messagebundle-error-metadata-type": "Metadata må være en tabell.",
+ "translate-messagebundle-error-invalid-metadata": "Metadataseksjonen inneholder en ukjent nøkkel: «$1». Støttede nøkler er $2.",
+ "translate-messagebundle-error-invalid-sourcelanguage": "Kildespråkkoden «$1» støttes ikke.",
+ "translate-messagebundle-error-invalid-prioritylanguage": "{{PLURAL:$2|Ugyldig prioritert språkkode|Ugyldige prioriterte språkkoder}} i metadataene: $1",
+ "translate-messagebundle-error-invalid-prioritylanguage-format": "Ugyldig format for prioritert språk i metadataen. Prioriterte språk må være en tabell av strenger.",
+ "translate-messagebundle-group-description": "Beskjeder i en beskjedbunt definert på siden [[$2|$1]].",
+ "translate-messagebundle-change-sourcelanguage": "Setter kildespråk for meldingsknippet i samsvar med metadataene.",
+ "translate-messagebundle-sourcelanguage-changed": "Kildespråket til et meldingsknippe kan ikke endres etter at det har blitt opprettet.",
+ "log-action-filter-translationreview": "Handlingstype:",
+ "log-action-filter-translationreview-message": "Gjennomgang av individuelle oversettelsesmeldinger",
+ "log-action-filter-translationreview-group": "Endringer i framgangsstatusen til oversettelser"
+}
diff --git a/Translate/i18n/core/nds-nl.json b/Translate/i18n/core/nds-nl.json
new file mode 100644
index 00000000..8fc8a8d8
--- /dev/null
+++ b/Translate/i18n/core/nds-nl.json
@@ -0,0 +1,46 @@
+{
+ "@metadata": {
+ "authors": [
+ "Servien"
+ ]
+ },
+ "translate": "Oaversetten",
+ "translate-taction-proofread": "Nåkyken",
+ "translate-taction-lstats": "Språkståtistiken",
+ "translate-optional": "(optioneel)",
+ "translate-rcfilters-translations-only-label": "Oaversettingen",
+ "translate-rc-translation-filter-no": "Niks doon",
+ "translate-statsf-scale-months": "Månden",
+ "translate-statsf-submit": "Nåkyken",
+ "translate-translations-fieldset-title": "Bericht",
+ "translate-langstats-expand": "uutklappen",
+ "translate-langstats-expandall": "alles uutklappen",
+ "translate-language-code": "Språkkode",
+ "translate-language-code-field-name": "Språkkode:",
+ "translate-language": "Språke",
+ "translate-total": "Berichten",
+ "translate-untranslated": "Neet oaversetted",
+ "translate-percentage-complete": "Afhandeld",
+ "translate-percentage-fuzzy": "Verolderd",
+ "translate-percentage-proofread": "Nåkeaken",
+ "translate-mgs-fieldset": "Låt instellingen seen",
+ "translate-mgs-column-language": "Språke",
+ "translate-documentation-language": "Berichtbeskryving",
+ "translate-searchprofile": "Oaversettingen",
+ "translate-searchprofile-note": "Meyr söökoptys bint beskikbår mid de [$1 oaversettingssöökfunkty].",
+ "tux-tab-untranslated": "Neet oaversetted",
+ "tux-tab-outdated": "Verolderd",
+ "tux-tab-translated": "Oaversetted",
+ "tux-status-fuzzy": "Verolderd",
+ "tux-status-translated": "Oaversetted",
+ "tux-editor-editsummary-placeholder": "Optionele samenvatting",
+ "tux-editor-skip-button-label": "Oaverslån en volgende",
+ "tux-editor-confirm-button-label": "Oaversetting bevästigen",
+ "tux-editor-proofreading-mode": "Nåkyken",
+ "tux-editor-translate-mode": "Lyste",
+ "tux-editor-page-mode": "Syde",
+ "tux-editor-outdated-notice": "Disse oaversetting müt möägelik bywarked wörden.",
+ "tux-editor-outdated-notice-diff-link": "Verskillen bekyken",
+ "tux-message-filter-placeholder": "Lyste filteren",
+ "tux-editor-expand-tooltip": "Uutklappen"
+}
diff --git a/Translate/i18n/core/nds.json b/Translate/i18n/core/nds.json
new file mode 100644
index 00000000..b31e403c
--- /dev/null
+++ b/Translate/i18n/core/nds.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joachim Mos",
+ "Servien",
+ "Slomox"
+ ]
+ },
+ "translate": "Översetten",
+ "translate-taction-translate": "Översetten",
+ "translate-page-group": "Grupp",
+ "translate-page-language": "Spraak",
+ "translate-page-navigation-legend": "Navigatschoon",
+ "translate-next": "Nächste Siet",
+ "translate-prev": "Vörige Siet",
+ "translate-page-description-legend": "Informatschoon över de Köppel",
+ "translate-page-edit": "ännern",
+ "translate-optional": "(optschoonal)",
+ "translate-edit-title": "Ännern \"$1\"",
+ "translate-edit-information": "Informatschoon to Nochricht ($1)",
+ "translate-edit-tmmatch-source": "Översettenborntext: $1",
+ "translate-language-code": "Spraak-Code",
+ "translate-language-code-field-name": "Spraak-Code:",
+ "tux-notices-hide": "versteken",
+ "tux-proofread-edit-label": "Ännern"
+}
diff --git a/Translate/i18n/core/ne.json b/Translate/i18n/core/ne.json
new file mode 100644
index 00000000..edc71e54
--- /dev/null
+++ b/Translate/i18n/core/ne.json
@@ -0,0 +1,234 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bada Kaji",
+ "Bhawani Gautam",
+ "Bhawani Gautam Rhk",
+ "Krish Dulal",
+ "NehalDaveND",
+ "Nirajan pant",
+ "RajeshPandey",
+ "पर्वत सुबेदी",
+ "बडा काजी",
+ "बिप्लब आनन्द",
+ "राम प्रसाद जोशी",
+ "सरोज कुमार ढकाल",
+ "हिमाल सुबेदी"
+ ]
+ },
+ "translate": "अनुवाद गर्नुहोस्",
+ "translate-extensionname": "अनुवाद गर्नुहोस्",
+ "translate-desc": "मिडियाविकी तथा अन्यको अनुवादको निम्ति [[Special:Translate|विशेष पृष्ठ]]",
+ "translate-taction-translate": "अनुवाद गर्नुहोस्",
+ "translate-taction-proofread": "समीक्षा",
+ "translate-taction-lstats": "भाषा तथ्याङ्क",
+ "translate-taction-mstats": "सन्देश समूह तथ्याङ्कहरू",
+ "translate-taction-export": "निर्यात",
+ "translate-page-no-such-language": "निर्दिष्ट भाषा अमान्य थियो",
+ "translate-page-no-such-group": "निर्दिष्ट समूह अमान्य थियो",
+ "translate-page-disabled": "यस भाषामा यो समूहको अनुवाद कार्य निस्क्रिय गरिएको छ।\nकारण:\n\n<em>$1</em>",
+ "translate-language-disabled": "यस भाषामा अनुवादन अक्षम गरिएको छ।",
+ "translate-page-settings-legend": "मेरो अभिरुचिहरू",
+ "translate-page-group": "समूह",
+ "translate-page-language": "भाषा",
+ "translate-page-limit": "सीमा",
+ "translate-page-limit-option": "प्रति पृष्ठ $1 {{PLURAL:$1|सन्देश|सन्देशहरू}}",
+ "translate-submit": "छाँटेर हेर्ने",
+ "translate-page-navigation-legend": "अन्वेषण",
+ "translate-page-showing": "$3 मध्येका $1 देखि $2 सम्म सन्देशहरू देखाइँदै",
+ "translate-page-showing-all": "$1 {{PLURAL:$1|सन्देश|सन्देशहरू}} देखाइँदै।",
+ "translate-page-showing-none": "देखाउनु पर्ने सन्देश छैन।",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "अर्को पृष्ठ",
+ "translate-prev": "अघिल्लो पृष्ठ",
+ "translate-page-description-legend": "समूह बारेको जानकारी",
+ "translate-page-description-hasoptional-open": "वैकल्पिक सन्देशहरू देखाउनुहोस्।",
+ "translate-page-edit": "सम्पादन गर्नुहोस्",
+ "translate-optional": "(वैकल्पिक)",
+ "translate-ignored": "(अनदेखा गरिएको)",
+ "translate-edit-title": "\"$1\" सम्पादन गर्नुहोस्",
+ "translate-edit-definition": "सन्देश परिभाषा",
+ "translate-edit-contribute": "योगदान गर्नुहोस्",
+ "translate-edit-no-information": "''यो सन्देशको कुनैपनि दस्तावेजीकरण छैन''\n''यदि तपाईं यो सन्देश कहाँ अथवा कसरी प्रयोग गरिन्छ भन्ने कुरा जान्नु हुन्छ भने तपाईंले यसको दस्तावेजीकरण थप गरी अरू अनुवादकहरूलाई सहयोग गर्न सक्नुहुन्छ।''",
+ "translate-edit-information": "($1) सन्देशको बारेमा जानकारी",
+ "translate-edit-warnings": "चेतावनी अपूर्ण अनुवादको बारेमा",
+ "translate-edit-tmmatch": "$1% मेल",
+ "translate-edit-askpermission": "अनुमति लिनुहाेस्",
+ "exporttranslations": "अनुवाद आयात गर्नुहाेस्",
+ "translate-export-form-format": "ढाँचा",
+ "translate-export-invalid-format": "कृपया एक मान्य ढाँचा निर्दिष्ट गर्नुहोस्।",
+ "translate-export-not-supported": "अनुवाद निर्यात समर्थित छैन।",
+ "translate-export-format-notsupported": "निर्दिष्ट निर्यात ढाँचा सन्देश समूहद्वारा समर्थित छैन।",
+ "translate-checks-parameters-unknown": "निम्न {{PLURAL:$2|पैरामीटर अज्ञात हो|पैरामीटरहरु अज्ञात हुन्}} :\n<strong>$1</strong>",
+ "translate-pref-editassistlang": "सहयाेगी भाषाहरू:",
+ "prefs-translate": "अनुवाद विकल्प",
+ "right-translate-messagereview": "अनुवादहरूलाई समीक्षा गर्नुहाेस्",
+ "action-translate-messagereview": "अनुवादहरूलाई समीक्षा गर्नुहाेस्",
+ "translate-rcfilters-translations": "अनुवादहरू",
+ "translate-rcfilters-translations-only-label": "अनुवादहरू",
+ "translate-rc-translation-filter-no": "केहि नगर",
+ "translate-rc-translation-filter-only": "अनुवादहरू मात्र देखाउनुहोस्",
+ "translationstats": "अनुवाद तथ्याङ्कहरू",
+ "translate-stats-edits": "सम्पादनहरू",
+ "translate-stats-users": "अनुवादकहरू",
+ "translate-stats-registrations": "पंजीकरण",
+ "translate-stats-reviews": "समीक्षा",
+ "translate-stats-reviewers": "समीक्षकहरू",
+ "translate-statsf-options": "ग्राफ विकल्पहरू",
+ "translate-statsf-width": "चौड़ाई पिक्सलमा:",
+ "translate-statsf-height": "उचाई पिक्सलमा:",
+ "translate-statsf-days": "समयावधि दिनमा:",
+ "translate-statsf-start": "सुरु गरेको मिति:",
+ "translate-statsf-scale": "बीजमयता:",
+ "translate-statsf-scale-years": "वर्षहरू",
+ "translate-statsf-scale-months": "महिना",
+ "translate-statsf-scale-weeks": "हप्ता",
+ "translate-statsf-scale-days": "दिन",
+ "translate-statsf-scale-hours": "घण्टा",
+ "translate-statsf-count": "माप:",
+ "translate-statsf-count-edits": "सम्पादन संख्या",
+ "translate-statsf-count-users": "सक्रिय अनुवादकहरू",
+ "translate-statsf-count-registrations": "नयाँ प्रयोगकर्ताहरू",
+ "translate-statsf-count-reviewers": "समीक्षकहरू",
+ "translate-statsf-submit": "पूर्वावलोकन",
+ "translate-tag-page-desc": "विकि पृष्ठ [[$2|$1]]को अनुवाद।",
+ "translate-sidebar-alltrans": "अरु भाषामा",
+ "translations": "सबै अनुवादहरू",
+ "translations-summary": "सबै उपलब्ध अनुवादहरू हेर्न तल सन्देशको नाम दिनुहोस् ।",
+ "translate-translations-no-message": "\"$1\" अनुवाद योग्य सन्देश होइन",
+ "translate-translations-none": "\"$1\"को लागि अनुवादहरू छैनन्।",
+ "translate-translations-count": "{{PLURAL:$1|एउटा अनुवाद|$1 अनुवादहरू}} पाइयो।",
+ "translate-translations-fieldset-title": "सन्देश",
+ "translate-translations-messagename": "नाम:",
+ "translate-translations-project": "परियोजना:",
+ "translate-translations-history-short": "हि",
+ "languagestats": "भाषा तथ्याङ्क",
+ "languagestats-summary": "यस पृष्ठमा भाषाको निम्ति सबै सन्देश समूहहरूका लागि अनुवाद तथ्याङ्क प्रदर्शित गरिन्छ।",
+ "languagestats-stats-for": "$1 ($2)को लागि अनुवाद तथ्यांक।",
+ "languagestats-recenttranslations": "भर्खरैका अनुवादहरू",
+ "translate-langstats-expand": "सबै देखाउनुहोस्",
+ "translate-langstats-collapse": "लुकाउनुहोस्",
+ "translate-langstats-expandall": "सबै देखाउनुहोस्",
+ "translate-langstats-collapseall": "सबै लुकाउनुहोस्",
+ "translate-language-code": "भाषा कोड",
+ "translate-language-code-field-name": "भाषा कोड:",
+ "translate-language": "भाषा",
+ "translate-total": "सन्देशहरू",
+ "translate-untranslated": "अनुवाद नगरिएका",
+ "translate-percentage-complete": "सकिएका",
+ "translate-percentage-fuzzy": "पुराना (काम नलाग्ने)",
+ "translate-percentage-proofread": "समीक्षा गरियो",
+ "translate-ls-submit": "तथ्याङ्कहरू देखाउनुहाेस्",
+ "translate-ls-column-group": "सन्देश समूह",
+ "translate-mgs-pagename": "सन्देश समूह तथ्याङ्कहरू",
+ "translate-mgs-fieldset": "अभिरुचीहरू प्रदर्शन गर्नुहाेस्",
+ "translate-mgs-group": "सन्देश समूहः",
+ "translate-mgs-nocomplete": "अनुवाद पूर्ण भएका भाषाहरू प्रदर्शन नगर्नुहोस्",
+ "translate-mgs-noempty": "कुनैपनि अनुवाद नभएका भाषाहरू प्रदर्शन नगर्नुहोस्",
+ "translate-mgs-submit": "तथ्याङ्कहरू देखाउनुहाेस्",
+ "translate-mgs-column-language": "भाषा",
+ "translate-tes-group-not-found": "कुनै मिल्दो परिणामहरू छैनन्",
+ "supportedlanguages": "समर्थित भाषाहरू",
+ "supportedlanguages-summary": "यस पृष्ठले {{SITENAME}}मा सक्रिय भाषाहरूको सूची देखाउँदछ,\nत्यो भाषामा काम गर्ने अनुवादकहरूको नामहरूसँगै।\nअनुवादकको नाम ठुलो देखिन्छ, अनुवादकले जति धेरै सम्पादनहरू योगदान गरेको हुन्छ।\nएउटा रेखाचित्रको रङ्गले यहाँ अनुवादक हालै कति सक्रिय भएको देखाउँछ।",
+ "supportedlanguages-portallink": "[$1] $2 - $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|अनुवादक}}|अनुवादकहरू}}: $1",
+ "supportedlanguages-recenttranslations": "भर्खरैका अनुवादहरू",
+ "supportedlanguages-count": "कुल $1 {{PLURAL:$1|भाषा|भाषाहरू}}।",
+ "translate-jssti-add": "सूचीमा थप्नुहाेस्",
+ "managemessagegroups": "सन्देश समूह व्यवस्थापन",
+ "translate-smg-rename-select": "चयन गर्नुहोस्",
+ "translate-smg-rename-cancel": "रद्द गर्नुहोस्",
+ "translate-smg-rename-no-msg": "कुनैपनि सन्देश भेटिएन",
+ "translate-smg-strong-sync-help": "सहायता",
+ "translate-smg-group-message-action-history": "इतिहास",
+ "translate-smg-group-message-message-target": "लक्ष्य:",
+ "translate-smg-loading": "खुल्दै छ…",
+ "translate-manage-import-new": "नयाँ सन्देश $1",
+ "translate-manage-action-import": "आयात गर्नु",
+ "translate-manage-action-ignore": "उपेक्षा",
+ "translate-manage-action-rename": "नाम फेर्नुहोस्",
+ "translate-js-support-unsaved-warning": "तपाईँकोमा अप्रकाशित अनुवादहरू छन्।",
+ "translate-gs-code": "कोड",
+ "translate-gs-continent": "महादेश",
+ "translate-gs-speakers": "वक्ताहरु",
+ "translate-gs-score": "प्राप्ताङ्क",
+ "translate-gs-multiple": "धेरै",
+ "translate-gs-count": "गणना",
+ "translate-gs-total": "जम्मा",
+ "translate-documentation-language": "सन्देश दस्तावेज",
+ "translate-searchprofile": "अनुवाद",
+ "translate-workflow-set-doing": "सेटिङ्हरु...",
+ "translate-stats-workflow": "स्थिति",
+ "translate-dynagroup-recent-label": "भर्खरैका अनुवादहरू",
+ "translate-dynagroup-additions-label": "हालैका थपहरू",
+ "translate-msggroupselector-projects": "सन्देश समूह",
+ "translate-msggroupselector-search-placeholder": "समूहहरू खाेज्नुहाेस्",
+ "translate-msggroupselector-search-all": "सबै",
+ "translate-msggroupselector-search-recent": "हालैका",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|उपसमुह|उपसमूहहरू}}",
+ "tux-languageselector": "यसमा अनुवाद गर्नुहाेस्",
+ "tux-tab-all": "सबै",
+ "tux-tab-untranslated": "अनुवाद नगरिएका",
+ "tux-tab-outdated": "पुराना",
+ "tux-tab-translated": "अनुवादित",
+ "tux-tab-unproofread": "समीक्षा नगरिएकाे",
+ "tux-edit": "सम्पादन",
+ "tux-status-optional": "वैकल्पिक",
+ "tux-status-fuzzy": "पुराना",
+ "tux-status-proofread": "समक्षित",
+ "tux-status-translated": "अनुवादित",
+ "tux-status-saving": "प्रकाशन गर्दै...",
+ "tux-status-unsaved": "अप्रकाशित",
+ "tux-save-unknown-error": "एउटा अज्ञात त्रुटि भयो।",
+ "tux-editor-placeholder-documentation": "सन्देश कागजात थप्नुहोस्",
+ "tux-editor-placeholder-language": "तपाईको $1मा अनुवाद",
+ "tux-editor-editsummary-placeholder": "एच्छिक सारंश",
+ "tux-editor-paste-original-button-label": "स्राेत पाठ हाल्नुहाेस्",
+ "tux-editor-discard-changes-button-label": "परिवर्तन रद्द गर्नुहाेस्?",
+ "tux-editor-save-button-label": "अनुवाद प्रकाशन गर्नुहोस्",
+ "tux-editor-skip-button-label": "अर्काेमा जानुहाेस्",
+ "tux-editor-cancel-button-label": "रद्द गर्नुहोस्",
+ "tux-editor-confirm-button-label": "अनुवाद निश्चित गर्नुहाेस्",
+ "tux-editor-proofread-button-label": "समीक्षा गरिएकाे भनी चिन्ह लगाउनुहाेस्",
+ "tux-editor-edit-desc": "दस्तावेजीकरण सम्पादन गर्नुहाेस्",
+ "tux-editor-add-desc": "दस्तावेजीकरण थप्नुहाेस्",
+ "tux-editor-suggestions-title": "सुझावहरू",
+ "tux-editor-in-other-languages": "अरू भाषाहरूमा",
+ "tux-editor-need-more-help": "अझै धेरै सहयाेग चाहियाे?",
+ "tux-editor-ask-help": "थप जानकारीका लागि साेध्नुहाेस्",
+ "tux-editor-tm-match": "$1% मेल",
+ "tux-notices-hide": "लुकाउनुहोस्",
+ "tux-editor-n-uses": "$1 {{PLURAL:$1|पल्ट|पटक}} प्रयाेग",
+ "tux-editor-message-desc-more": "धेरै हेर्नुहाेस्",
+ "tux-editor-message-desc-less": "थोरै हेर्नुहोस्",
+ "tux-editor-clear-translated": "अनुवाद भएकाहरूलाई लुकाउनुहाेस्",
+ "tux-editor-proofreading-mode": "समीक्षा",
+ "tux-editor-translate-mode": "सूची",
+ "tux-editor-proofreading-hide-own-translations": "तपाईकाे अनुवादलाई लुकाउनुहाेस्",
+ "tux-proofread-edit-label": "सम्पादन",
+ "tux-editor-page-mode": "पृष्ठ",
+ "tux-editor-outdated-notice-diff-link": "अन्तर देखाउनुहाेस्",
+ "tux-editor-doc-editor-placeholder": "सन्देश कागजात",
+ "tux-editor-doc-editor-save": "कागजात प्रकाशित गर्नुहोस्",
+ "tux-editor-doc-editor-cancel": "रद्द गर्नुहोस्",
+ "tux-message-filter-placeholder": "सूची छनाेट गर्नुहाेस्",
+ "tux-message-filter-advanced-button": "उन्नत खोजी",
+ "tux-empty-list-translated-action": "अनुवाद गर्नुहोस्",
+ "tux-empty-show-optional-messages": "वैकल्पिक सन्देशहरू देखाउनुहोस्",
+ "tux-empty-nothing-to-proofread": "समीक्षा गर्नका लागि केही छैन",
+ "tux-empty-nothing-new-to-proofread": "समीक्षा गर्नका लागि नयाँ केही छैन",
+ "tux-empty-list-other": "अनुवाद गर्नलाई केही छैन",
+ "tux-empty-list-other-guide": "तपाईंले अवस्थित अनुवादहरू समीक्षा गरेर मद्दत गर्न सक्नुहुन्छ",
+ "tux-empty-list-other-action": "अनुवादहरूलाई समीक्षा गर्नुहाेस्",
+ "tux-empty-list-other-link": "सबै सन्देशहरू देखाउनुहाेस्",
+ "tux-editor-close-tooltip": "रद्द गर्नु",
+ "tux-editor-expand-tooltip": "फालाउ",
+ "tux-editor-collapse-tooltip": "खुम्च्याउन",
+ "tux-editor-message-tools-show-editor": "विकिपाठमा देखाउनुहाेस्",
+ "tux-editor-message-tools-history": "इतिहास",
+ "tux-editor-message-tools-delete": "मेटाउन",
+ "tux-editor-message-tools-translations": "सबै अनुवादहरू",
+ "tux-editor-loading": "खुल्दै छ…",
+ "specialpages-group-translation": "अनुवाद"
+}
diff --git a/Translate/i18n/core/nia.json b/Translate/i18n/core/nia.json
new file mode 100644
index 00000000..eebcdfee
--- /dev/null
+++ b/Translate/i18n/core/nia.json
@@ -0,0 +1,38 @@
+{
+ "@metadata": {
+ "authors": [
+ "Slaia"
+ ]
+ },
+ "translate": "Ali ba li bö'ö",
+ "translate-extensionname": "Ali ba li bö'ö",
+ "translate-desc": "[[Special:Translate|Nga'örö spesial]] ba wangali MediaWiki ba tanö bö'önia",
+ "translate-fuzzybot-desc": "Da'a no akun sistem spesial ni'oguna'ö MediaWiki [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Ali ba li bö'ö Ekstensi wangali] ba wondrorogö ngawalö wangali.\nAkun andre tefaböbö khö software MediaWiki ba tenga ni'okhögö samösa sangoguna.",
+ "translate-taskui-export-to-file": "Ekspor ba format asli",
+ "translate-taskui-export-as-po": "Ekspor (mangali lö tefakhai ba Internet)",
+ "translate-taction-translate": "Ali ba li bö'ö",
+ "translate-taction-proofread": "Fareso",
+ "translate-taction-lstats": "Statistik li",
+ "translate-taction-mstats": "Statistik ngawa duria",
+ "translate-taction-export": "Ekspor",
+ "translate-taction-disabled": "No mubatogö da'a ba wiki andre",
+ "translate-page-no-such-language": "No fasala li nifili.",
+ "translate-page-no-such-group": "No fasala ngawa nifili",
+ "translate-page-disabled": "No tebatogö wangali ngawa duria da'a ba li andre.\nBörönia:\n\n<em>$1</em>",
+ "translate-language-disabled": "No teba'agö wangali ba li andre.",
+ "translate-page-settings-legend": "Setelan",
+ "translate-page-group": "Ngawa",
+ "translate-page-language": "Li",
+ "translate-page-limit": "Ndrege wa'oya",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|duria}} ero nga'örö",
+ "translate-submit": "Ae halö",
+ "translate-page-navigation-legend": "Lala wofanö",
+ "translate-page-showing": "Oroma'ö duria $1 irugi $2 moroi $3.",
+ "translate-page-showing-all": "Mangoroma'ö $1 {{PLURAL:$1|duria}}.",
+ "translate-page-showing-none": "Lö turia si tola mu'oroma'ö.",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "Nga'örö fönania",
+ "translate-prev": "Nga'örö furinia",
+ "translate-page-description-legend": "Informasi sanandrösa grup",
+ "translate-documentation-language": "Fanolo ba wo'ali zura"
+}
diff --git a/Translate/i18n/core/niu.json b/Translate/i18n/core/niu.json
new file mode 100644
index 00000000..eb8a9ffc
--- /dev/null
+++ b/Translate/i18n/core/niu.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jose77"
+ ]
+ },
+ "translate-page-navigation-legend": "Navikati"
+}
diff --git a/Translate/i18n/core/nl-informal.json b/Translate/i18n/core/nl-informal.json
new file mode 100644
index 00000000..cdbcfd4a
--- /dev/null
+++ b/Translate/i18n/core/nl-informal.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "McDutchie"
+ ]
+ },
+ "tux-editor-editsummary-placeholder": "Leg je wijzigingen uit (niet verplicht)"
+}
diff --git a/Translate/i18n/core/nl.json b/Translate/i18n/core/nl.json
new file mode 100644
index 00000000..2ad5941f
--- /dev/null
+++ b/Translate/i18n/core/nl.json
@@ -0,0 +1,398 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dutchy45",
+ "Elroy",
+ "HanV",
+ "Kippenvlees1",
+ "Konovalov",
+ "Mainframe98",
+ "Mar(c)",
+ "McDutchie",
+ "Nickthijssen1994",
+ "PonkoSasuke",
+ "SPQRobin",
+ "Servien",
+ "Siebrand",
+ "Sjoerddebruin",
+ "Southparkfan",
+ "Tjcool007",
+ "Tvdm",
+ "User555",
+ "Wiki13"
+ ]
+ },
+ "translate": "Vertalen",
+ "translate-desc": "[[Special:Translate|Speciale pagina]] voor het vertalen van MediaWiki en meer",
+ "translate-fuzzybot-desc": "Dit is een speciaal systeemaccount gebruikt door de MediaWiki [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate Translate uitbreiding] om vertalingen te beheren.\nDit account is onderdeel van de MediaWiki software en is niet in gebruik door een gebruiker.",
+ "translate-taskui-export-to-file": "Exporteren in de oorspronkelijke indeling",
+ "translate-taskui-export-as-po": "Exporteren voor offline vertaling",
+ "translate-taction-translate": "Vertalen",
+ "translate-taction-proofread": "Controleren",
+ "translate-taction-lstats": "Taalstatistieken",
+ "translate-taction-mstats": "Berichtengroepstatistieken",
+ "translate-taction-export": "Exporteren",
+ "translate-taction-disabled": "Deze handeling is uitgeschakeld op deze wiki.",
+ "translate-page-no-such-language": "De opgegeven taalcode is ongeldig.",
+ "translate-page-no-such-group": "De opgegeven groep bestaat niet.",
+ "translate-page-disabled": "Vertalingen naar deze taal zijn in deze groep uitgeschakeld. Reden:\n\n<em>$1</em>",
+ "translate-language-disabled": "Vertalen naar deze taal is uitgeschakeld.",
+ "translate-page-settings-legend": "Instellingen",
+ "translate-page-group": "Groep",
+ "translate-page-language": "Taal",
+ "translate-page-limit": "Maximaal",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|bericht|berichten}} per pagina",
+ "translate-submit": "Ophalen",
+ "translate-page-navigation-legend": "Navigatie",
+ "translate-page-showing": "De berichten $1 tot $2 van $3 worden weergegeven.",
+ "translate-page-showing-all": "Er {{PLURAL:$1|wordt 1 bericht|worden $1 berichten}} weergegeven.",
+ "translate-page-showing-none": "Er zijn geen berichten in deze selectie.",
+ "translate-next": "Volgende pagina",
+ "translate-prev": "Vorige pagina",
+ "translate-page-description-legend": "Informatie over de groep",
+ "translate-page-description-hasoptional": "Deze berichtengroep bevat optionele berichten.\nOptionele berichten hoeven alleen vertaald te worden als uw taal bijzondere eigenschappen heeft, zoals dat deze geen spaties gebruikt of dat eigennamen in de taal getranslitereerd worden. $1",
+ "translate-page-description-hasoptional-open": "Optionele berichten weergeven.",
+ "translate-page-edit": "bewerken",
+ "translate-optional": "(optioneel)",
+ "translate-ignored": "(genegeerd)",
+ "translate-edit-title": "\"$1\" bewerken",
+ "translate-edit-definition": "Berichtdefinitie",
+ "translate-edit-contribute": "bijdragen",
+ "translate-edit-no-information": "<em>Dit bericht heeft geen documentatie.\nAls u weet waar of hoe dit bericht wordt gebruikt, dan kunt u andere gebruikers helpen door documentatie voor dit bericht toe te voegen.</em>",
+ "translate-edit-information": "Informatie over bericht ($1)",
+ "translate-edit-warnings": "Waarschuwingen over onjuiste vertalingen",
+ "translate-edit-tmmatch-source": "Brontekst voor vertaling: $1",
+ "translate-edit-tmmatch": "$1% overeenkomst",
+ "translate-edit-nopermission": "U hebt vertaalrechten nodig om berichten te kunnen vertalen.",
+ "translate-edit-askpermission": "Vertaalrechten aanvragen",
+ "exporttranslations": "Vertalingen exporteren",
+ "translate-export-form-format": "Indeling",
+ "translate-export-invalid-format": "Voer een geldig formaat in.",
+ "translate-export-not-supported": "Het exporteren van vertalingen wordt niet ondersteund.",
+ "translate-export-format-notsupported": "De opgegeven exporteerindeling wordt niet ondersteund door de berichtengroep.",
+ "translate-export-group-too-large": "De gekozen berichtengroep is te groot. Kies een berichtengroep die minder dan $1 {{PLURAL:$1|bericht|berichten}} heeft of neem contact op met een vertalingsbeheerder voor advies.",
+ "translate-checks-parameters": "De volgende {{PLURAL:$2|parameter wordt|parameters worden}} niet gebruikt:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "De volgende {{PLURAL:$2|parameter is|parameters zijn}} onbekend:\n<strong>$1</strong>",
+ "translate-checks-balance": "Er wordt een oneven {{PLURAL:$2|aantal haakjes|aantal haakjes}} gebruikt:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "De volgende {{PLURAL:$2|koppeling is|$2 koppelingen zijn}} problematisch:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "De volgende {{PLURAL:$2|koppeling ontbreekt|$2 koppelingen ontbreken}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "De definitie bevat <nowiki>{{PLURAL:}}</nowiki>, maar de vertaling niet.",
+ "translate-checks-plural-forms": "Via <nowiki>{{PLURAL:}}</nowiki> {{PLURAL:$1|is één vorm|zijn $1 vormen}} opgegeven, maar {{PLURAL:$2|slechts één vorm wordt|$2 vormen worden}} ondersteund (exclusief de vormen 0= en 1=).",
+ "translate-checks-plural-dupe": "Aan het einde van <nowiki>{{PLURAL:}}</nowiki> staat dezelfde vorm dubbel. <nowiki>{{PLURAL:$1|hersenen|hersenen}}</nowiki> moet genoteerd worden als <nowiki>{{PLURAL:$1|hersenen}}</nowiki>.",
+ "translate-checks-gettext-plural-missing": "Deze vertaling moet <nowiki>{{PLURAL:GETTEXT|}}</nowiki> bevatten.",
+ "translate-checks-gettext-plural-unsupported": "Dit bericht ondersteunt <nowiki>{{PLURAl:GETTEXT}}</nowiki> niet.",
+ "translate-checks-gettext-plural-count": "<nowiki>{{PLURAL:GETTEXT|}}</nowiki> accepteert exact $1 {{PLURAL:$1|meervoudsvorm|meervoudsvormen}}. Er {{PLURAL:$2|is $2 meervoudsvorm|zijn $2 meervoudsvormen}} opgegeven.",
+ "translate-checks-unicode-plural-missing": "Deze vertaling moet <nowiki>{{PLURAL|}}</nowiki> bevatten.",
+ "translate-checks-unicode-plural-unsupported": "Dit bericht ondersteunt <nowiki>{{PLURAL|}}</nowiki> niet.",
+ "translate-checks-unicode-plural-invalid": "Meervoudsvormen moeten gedefinieerd zijn als $1. Deze vertaling bevat $2.",
+ "translate-checks-pagename": "Afwijkende naamruimte vergeleken met de brontekst",
+ "translate-checks-format": "Deze vertaling wijkt af van het bronbericht of heeft een ongeldige opmaak: $1",
+ "translate-checks-escape": "De volgende {{PLURAL:$2|escape|escapes}} zijn waarschijnlijk per ongeluk toegepast: <strong>$1</strong>.\n{{PLURAL:$4|Een geldig escape is|Geldige escapes zijn:}} $3.",
+ "translate-checks-parametersnotequal": "Aantal parameters is {{PLURAL:$1|$1}}; moet {{PLURAL:$2|$2}} zijn.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> heeft een ongeldige indeling.",
+ "translate-checks-fudforum-syntax": "Gebruik <nowiki>$1</nowiki> in plaats van <nowiki>$2</nowiki> voor dit project.",
+ "translate-checks-value-not-present": "De vertaling moet gelijk zijn aan {{PLURAL:$1|1=|een van de volgende waarden:}} $1.",
+ "translate-checks-replacement": "Gebruik $2 in plaats van $1",
+ "translate-pref-editassistlang": "Hulptalen:",
+ "prefs-translate": "Vertaalinstellingen",
+ "translate-pref-editassistlang-help": "Kommagescheiden lijst van taalcodes.\nDe vertaling van berichten in deze talen worden weergegeven tijdens het vertalen.\nDe standaardlijst van hulptalen is taalafhankelijk.",
+ "translate-pref-editassistlang-bad": "Er staat een ongeldige taalcode in de lijst:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Bewerken via de vertaalinterface",
+ "action-translate": "te bewerken via de vertaalinterface",
+ "right-translate-manage": "Berichtengroepen beheren",
+ "action-translate-manage": "berichtengroepen te beheren",
+ "right-translate-import": "Vertalingen van buiten het systeem importeren",
+ "action-translate-import": "vertalingen van buiten het systeem te importeren",
+ "right-translate-messagereview": "Vertalingen accepteren",
+ "action-translate-messagereview": "vertalingen te controleren",
+ "right-translate-groupreview": "Workflowstatus van berichtengroepen wijzigen",
+ "action-translate-groupreview": "de workflowstatus van berichtengroepen te wijzigen",
+ "translate-rcfilters-translations": "Vertalingen",
+ "translate-rcfilters-translations-only-label": "Vertalingen",
+ "translate-rcfilters-translations-only-desc": "Wijzigingen aan vertaalde pagina's.",
+ "translate-rcfilters-translations-filter-label": "Geen vertalingen",
+ "translate-rcfilters-translations-filter-desc": "Alle wijzigingen die geen vertaling zijn.",
+ "translate-rcfilters-translations-site-label": "Systeemteksten",
+ "translate-rcfilters-translations-site-desc": "Aanpassingen aan systeemteksten in de MediaWiki naamruimte.",
+ "translate-rc-translation-filter": "Vertalingen filteren:",
+ "translate-rc-translation-filter-no": "Niets doen",
+ "translate-rc-translation-filter-only": "Alleen vertalingen weergeven",
+ "translate-rc-translation-filter-filter": "Vertalingen wegfilteren",
+ "translate-rc-translation-filter-site": "Alleen wijzigingen aan plaatselijke systeemberichten",
+ "translationstats": "Vertaalstatistieken",
+ "translate-stats-edits": "Bewerkingen",
+ "translate-stats-users": "Vertalers",
+ "translate-stats-registrations": "Registraties",
+ "translate-stats-reviews": "Beoordelingen",
+ "translate-stats-reviewers": "Controleurs",
+ "translate-statsf-intro": "U kunt via dit formulier eenvoudige statistieken samenstellen.\nAlle waarden hebben een limiet aan de boven- en onderzijde.",
+ "translate-statsf-options": "Grafiekopties",
+ "translate-statsf-width": "Breedte in pixels:",
+ "translate-statsf-height": "Hoogte in pixels:",
+ "translate-statsf-days": "Periode in dagen:",
+ "translate-statsf-start": "Begindatum:",
+ "translate-statsf-scale": "Granulariteit:",
+ "translate-statsf-scale-years": "Jaren",
+ "translate-statsf-scale-months": "Maanden",
+ "translate-statsf-scale-weeks": "Weken",
+ "translate-statsf-scale-days": "Dagen",
+ "translate-statsf-scale-hours": "Uren",
+ "translate-statsf-count": "Eenheid:",
+ "translate-statsf-count-edits": "Aantal bewerkingen",
+ "translate-statsf-count-users": "Actieve vertalers",
+ "translate-statsf-count-registrations": "Nieuwe gebruikers",
+ "translate-statsf-count-reviews": "Gecontroleerde vertalingen",
+ "translate-statsf-count-reviewers": "Controleurs",
+ "translate-statsf-language": "Kommagescheiden lijst van taalcodes:",
+ "translate-statsf-group": "Kommagescheiden lijst van groepscodes:",
+ "translate-statsf-submit": "Voorvertoning",
+ "translate-statsf-unknown-error": "Er is een onbekende fout opgetreden.",
+ "translate-tag-page-desc": "Vertaling van de wikipagina [[$2|$1]] uit $3 ($4).",
+ "translate-sidebar-alltrans": "In andere talen",
+ "translations": "Alle vertalingen",
+ "translations-summary": "Voer de naam van een bericht in om alle beschikbare vertalingen weer te geven.",
+ "translate-translations-no-message": "\"$1\" is geen vertaalbaar bericht",
+ "translate-translations-none": "Er zijn geen vertalingen beschikbaar voor \"$1\"",
+ "translate-translations-count": "Er {{PLURAL:$1|is één vertaling|zijn $1 vertalingen}} gevonden.",
+ "translate-translations-fieldset-title": "Bericht",
+ "translate-translations-messagename": "Naam:",
+ "translate-translations-project": "Project:",
+ "translate-translations-including-no-param": "Geef een geldige berichtnaam op als subpaginaparameter",
+ "translate-translations-history-short": "g",
+ "languagestats": "Taalstatistieken",
+ "languagestats-summary": "Op deze pagina worden vertaalstatistieken weergegeven voor alle berichtengroepen voor een taal.",
+ "messagegroupstats-summary": "Op deze pagina worden berichtengroepstatistieken weergegeven.",
+ "languagestats-stats-for": "Vertaalstatistieken voor $1 ($2).",
+ "languagestats-recenttranslations": "recente vertalingen",
+ "translate-langstats-incomplete": "Sommige statistieken op deze pagina zijn onvolledig. Herlaad de pagina voor meer complete statistieken.",
+ "translate-langstats-expand": "uitvouwen",
+ "translate-langstats-collapse": "samenvouwen",
+ "translate-langstats-expandall": "alles uitvouwen",
+ "translate-langstats-collapseall": "alles samenvouwen",
+ "translate-language-code": "Taalcode",
+ "translate-language-code-field-name": "Taalcode:",
+ "translate-suppress-complete": "Volledig vertaalde berichtengroepen verbergen",
+ "translate-ls-noempty": "Volledig onvertaalde berichtengroepen verbergen",
+ "translate-language": "Taal",
+ "translate-total": "Berichten",
+ "translate-untranslated": "Te vertalen",
+ "translate-percentage-complete": "Vertaald",
+ "translate-percentage-fuzzy": "Verouderd",
+ "translate-percentage-proofread": "Gecontroleerd",
+ "translate-languagestats-overall": "Alle berichtengroepen samen",
+ "translate-ls-submit": "Statistieken weergeven",
+ "translate-ls-column-group": "Berichtengroep",
+ "translate-mgs-pagename": "Berichtengroepstatistieken",
+ "translate-mgs-fieldset": "Voorkeuren weergeven",
+ "translate-mgs-group": "Berichtengroep:",
+ "translate-mgs-nocomplete": "Volledig vertaalde talen verbergen",
+ "translate-mgs-noempty": "Talen zonder vertalingen verbergen",
+ "translate-mgs-submit": "Statistieken weergeven",
+ "translate-mgs-column-language": "Taal",
+ "translate-mgs-totals": "Alle $1 {{PLURAL:$1|taal|talen}} samen",
+ "translate-mgs-invalid-group": "De opgegeven groep \"$1\" bestaat niet.",
+ "translate-mgs-nothing": "Er is niets weer te geven voor de opgegeven statistieken.",
+ "supportedlanguages": "Actieve talen",
+ "supportedlanguages-summary": "Op deze pagina staat een lijst van alle actieve talen op {{SITENAME}}, alsmede de namen van de vertalers die aan de respectieve talen werken.\nHoe meer bewerkingen een vertaler heeft bijgedragen, hoe groter diens naam wordt weergegeven.\nDe kleur van een onderstreping geeft aan hoe recent een vertaler actief is geweest.",
+ "supportedlanguages-colorlegend": "Legenda voor de kleuren: laatste vertaling $1 dagen geleden.",
+ "supportedlanguages-sqlite-error": "SQLite wordt niet ondersteund",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Vertaler}}|Vertalers}}: $1",
+ "supportedlanguages-recenttranslations": "recente vertalingen",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|taal|talen}} in totaal.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|bewerking|bewerkingen}} - laatste bewerking {{PLURAL:$3|gisteren|$3 dagen geleden}}",
+ "translate-supportedlanguages-cached": "Deze informatie werd $1 geleden in de cache opgeslagen.",
+ "abusefilter-edit-builder-vars-translate-source-text": "Brontekst van de vertalingseenheid",
+ "abusefilter-edit-builder-vars-translate-target-language": "Doeltaal voor de vertaling",
+ "translate-jssti-add": "Aan lijst toevoegen",
+ "managemessagegroups": "Berichtengroepen beheren",
+ "translate-smg-notallowed": "U mag deze handeling niet verrichten.",
+ "translate-smg-nochanges": "Er zijn geen veranderingen te verwerken.",
+ "translate-smg-submit": "Wijzigingen opslaan voor verwerking",
+ "translate-smg-submitted": "De berichtendefinities zijn bijgewerkt. De wijzigingen worden in de achtergrond verwerkt.",
+ "translate-smg-submitted-with-failure": "Het bijwerken van de {{PLURAL:$1|berichtdefinitie|berichtdefinities}} mislukte voor de volgende {{PLURAL:$1|groep|groepen}} - $2. $3",
+ "translate-smg-more": "Na het opslaan van deze wijzigingen, zijn er nog meer wijzigingen te verwerken.",
+ "translate-smg-left": "Inhoud in wiki",
+ "translate-smg-right": "Inkomende wijzigingen",
+ "translate-smg-rename-select": "Selecteren",
+ "translate-smg-rename-cancel": "Annuleren",
+ "translate-smg-rename-select-err": "Selecteer een te hernoemen bericht",
+ "translate-smg-rename-no-msg": "Geen berichten gevonden.",
+ "translate-smg-rename-new": "Als nieuw toevoegen...",
+ "translate-smg-rename-rename": "Als hernoeming toevoegen van...",
+ "translate-smg-strong-sync-help": "Hulp",
+ "translate-smg-group-message-action-history": "Geschiedenis",
+ "translate-smg-group-action-resolve": "Als opgelost markeren",
+ "translate-smg-group-sync-error-warn": "Deze groep had een fout bij het synchroniseren. Los de fouten op voordat u deze groep verwerkt.",
+ "translate-smg-group-message-tag-outdated": "Verouderd",
+ "translate-smg-group-message-tag-rename": "Hernoemen",
+ "translate-smg-group-message-message-content": "Inhoud:",
+ "translate-smg-group-message-message-target": "Doel:",
+ "translate-smg-group-message-message-replacement": "Vervanging:",
+ "translate-smg-group-message-message-other-langs": "Andere talen:",
+ "translate-smg-loading": "Bezig met laden…",
+ "translate-manage-import-diff": "Bericht $1 | Handelingen: $2",
+ "translate-manage-import-new": "Nieuw bericht $1",
+ "translate-manage-import-deleted": "Verwijderd bericht $1",
+ "translate-manage-action-import": "Importeren",
+ "translate-manage-action-conflict": "Importeren en als fuzzy markeren",
+ "translate-manage-action-ignore": "Negeren",
+ "translate-manage-action-fuzzy": "Importeren en vertalingen als fuzzy markeren",
+ "translate-manage-action-rename-fuzzy": "Hernoemen en vertalingen als fuzzy markeren",
+ "translate-manage-action-rename": "Hernoemen",
+ "translate-manage-action-ignore-change": "Negeer vertalingswijziging",
+ "translate-manage-nochanges": "Er zijn geen veranderingen in de berichtdefinities voor deze groep.",
+ "translate-manage-nochanges-other": "Er waren geen koppelingen voor deze taal.\nGebruik de onderstaande koppeling om terug te keren naar de detailweergave voor de groep.",
+ "translate-manage-inconsistent": "Er is een inconsistentie gedetecteerd in het verzoek.\nControleer de wijzigingen en probeer het nog eens.\nDetails: $1.",
+ "translate-manage-toolong": "De maximale verwerkingstijd van $1 {{PLURAL:$1|seconde|seconden}} is overschreden.\nVerzend de opdracht opnieuw.",
+ "translate-manage-import-summary": "Bezig met het importeren van een nieuwe versie uit een externe bron",
+ "translate-manage-import-ignore": "Bericht $1 overgeslagen.",
+ "translate-manage-import-rename-summary": "Hernoemd in externe bron",
+ "translate-manage-conflict-summary": "Bezig met het importeren van een nieuwe versie uit een externe bron.\nControleer de wijziging.",
+ "translate-manage-submit": "Uitvoeren",
+ "translate-manage-intro-other": "Hieronder wordt een lijst weergegeven van wijzigingen in de vertalingen voor de taal $1.\nControleer de wijzigingen en kies een uit te voeren handeling voor iedere vertaling.\nAls u wijzigingen negeert, worden deze bij de volgende export overschreven.",
+ "translate-manage-import-ok": "Geïmporteerd: $1",
+ "translate-manage-import-done": "Import afgerond!",
+ "importtranslations": "Vertalingen importeren",
+ "translate-import-from-local": "Lokaal bestand uploaden:",
+ "translate-import-load": "Bestand laden",
+ "translate-import-err-dl-failed": "Het was niet mogelijk het bestand op te halen: $1",
+ "translate-import-err-ul-failed": "De bestandsupload is mislukt",
+ "translate-import-err-invalid-title": "De opgegeven bestandsnaam <nowiki>$1</nowiki> is ongeldig.",
+ "translate-import-err-no-such-file": "Het bestand <nowiki>$1</nowiki> bestaat niet of is niet naar de server geüpload.",
+ "translate-import-err-stale-group": "De berichtengroep die in dit bestand staat bestaat niet.",
+ "translate-import-err-no-headers": "Het bestand heeft geen goed gevormd Gettext-opmaak zoals vereist door de uitbreiding Translate:\nhet was niet mogelijk de groep en taal te bepalen uit het bestand.",
+ "translate-js-support-unsaved-warning": "U hebt niet-opgeslagen vertalingen.",
+ "translate-gs-pos": "Pos.",
+ "translate-gs-code": "Code",
+ "translate-gs-continent": "Continent",
+ "translate-gs-speakers": "Sprekers",
+ "translate-gs-score": "Score",
+ "translate-gs-multiple": "Meerdere",
+ "translate-gs-count": "Aantal",
+ "translate-gs-total": "Totaal",
+ "translate-gs-avgscore": "Gem. score",
+ "translate-documentation-language": "Berichtbeschrijving",
+ "translate-searchprofile": "Vertalingen",
+ "translate-searchprofile-tooltip": "In vertalingen zoeken",
+ "translate-searchprofile-note": "Meer zoekopties zijn beschikbaar met de [$1 vertalingszoekfunctie].",
+ "translate-search-languagefilter": "Taalfilter:",
+ "translate-search-nofilter": "Niet filteren",
+ "log-name-translationreview": "Logboek vertalingencontrole",
+ "log-description-translationreview": "Logboek met alle controles van vertalingen en berichtengroepen.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|heeft}} de vertaling $3 als gecontroleerd gemarkeerd",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|heeft}} de status van vertalingen in het \"$4\" van $3 gewijzigd van \"$6\" naar \"$7\"",
+ "group-translate-sandboxed": "Aspirant vertalers",
+ "group-translate-sandboxed-member": "{{GENDER:$1|aspirant vertaler}}",
+ "right-translate-sandboxmanage": "Zandbakgebruikers beheren",
+ "action-translate-sandboxmanage": "zandbakgebruikers te beheren",
+ "right-translate-sandboxaction": "Handelingen uitvoeren die zijn toegestaan voor zandbakgebruikers",
+ "action-translate-sandboxaction": "handelingen uit te voeren die zijn toegestaan voor zandbakgebruikers",
+ "translate-workflow-state-": "(niet ingesteld)",
+ "translate-workflowstatus": "Status: $1",
+ "translate-workflow-set-doing": "Bezig met instellen...",
+ "translate-workflow-autocreated-summary": "Pagina voor workflowstatus $1 is automatisch aangemaakt",
+ "translate-stats-workflow": "Status",
+ "translate-workflowgroup-label": "Workflowstatussen",
+ "translate-workflowgroup-desc": "Deze berichtengroep bevat de statussen voor de workflow.\nDeze statussen zijn ingesteld in de instelling $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Recente vertalingen",
+ "translate-dynagroup-recent-desc": "Deze berichtengroep geeft alle recente wijzigingen weer in deze taal.\nDit is vooral nuttig voor de controletaken.",
+ "translate-dynagroup-additions-label": "Recente toevoegingen",
+ "translate-dynagroup-additions-desc": "In deze berichtengroep worden nieuwe en gewijzigde berichten weergegeven.",
+ "translate-msggroupselector-projects": "Berichtengroep",
+ "translate-msggroupselector-search-placeholder": "Groepen zoeken",
+ "translate-msggroupselector-search-all": "Alle",
+ "translate-msggroupselector-search-recent": "Recent",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|subgroep|subgroepen}}",
+ "tux-languageselector": "Vertalen naar",
+ "tux-tab-all": "Alle",
+ "tux-tab-untranslated": "Onvertaald",
+ "tux-tab-outdated": "Verouderd",
+ "tux-tab-translated": "Vertaald",
+ "tux-tab-unproofread": "Ongecontroleerd",
+ "tux-edit": "Bewerken",
+ "tux-status-optional": "Optioneel",
+ "tux-status-fuzzy": "Verouderd",
+ "tux-status-proofread": "Gecontroleerd",
+ "tux-status-translated": "Vertaald",
+ "tux-status-saving": "Bezig met publiceren...",
+ "tux-status-unsaved": "Niet-gepubliceerd",
+ "tux-save-unknown-error": "Er is een onbekende fout opgetreden.",
+ "tux-editor-editsummary-placeholder": "Leg uw wijzigingen uit (optioneel)",
+ "tux-editor-paste-original-button-label": "Brontekst invoegen",
+ "tux-editor-discard-changes-button-label": "Wijzigingen negeren",
+ "tux-editor-save-button-label": "Vertaling publiceren",
+ "tux-editor-skip-button-label": "Overslaan en volgende",
+ "tux-editor-cancel-button-label": "Annuleren",
+ "tux-editor-confirm-button-label": "Vertaling bevestigen",
+ "tux-editor-proofread-button-label": "Als gecontroleerd markeren",
+ "tux-editor-shortcut-info": "Druk op \"$1\" om te bevestingen en naar het volgende bericht te gaan, druk op \"$2\" over te slaan, druk op \"$4\" om een bewerkingssamenvatting op te geven of houdt \"$3\" ingedrukt andere snelkoppelingen te zien.",
+ "tux-editor-edit-desc": "Documentatie bewerken",
+ "tux-editor-add-desc": "Documentatie toevoegen",
+ "tux-editor-suggestions-title": "Suggesties",
+ "tux-editor-in-other-languages": "In andere talen",
+ "tux-editor-need-more-help": "Meer hulp nodig?",
+ "tux-editor-ask-help": "Meer informatie vragen",
+ "tux-editor-tm-match": "$1% overeenkomst",
+ "tux-notices-more": "{{PLURAL:$1|$1 meer}}",
+ "tux-notices-hide": "verbergen",
+ "tux-editor-save-failed": "Het publiceren van de vertaling is mislukt: $1",
+ "tux-editor-n-uses": "{{PLURAL:$1|Eén|$1}} keer gebruikt",
+ "tux-editor-message-desc-more": "Meer weergeven",
+ "tux-editor-message-desc-less": "Minder weergeven",
+ "tux-editor-clear-translated": "Vertaald verbergen",
+ "tux-editor-proofreading-mode": "Controleren",
+ "tux-editor-translate-mode": "Lijst",
+ "tux-editor-proofreading-hide-own-translations": "Uw vertalingen verbergen",
+ "tux-editor-proofreading-show-own-translations": "Uw vertalingen weergeven",
+ "tux-proofread-action-tooltip": "Als gecontroleerd markeren",
+ "tux-proofread-edit-label": "Bewerken",
+ "tux-editor-page-mode": "Pagina",
+ "tux-editor-outdated-notice": "Deze vertaling moet mogelijk bijgewerkt worden.",
+ "tux-editor-outdated-notice-diff-link": "Verschillen weergeven",
+ "tux-editor-doc-editor-placeholder": "Berichtbeschrijving",
+ "tux-editor-doc-editor-save": "Documentatie publiceren",
+ "tux-editor-doc-editor-cancel": "Annuleren",
+ "tux-messagetable-more-messages": "Nog {{PLURAL:$1|één bericht|$1 berichten}}",
+ "tux-messagetable-loading-messages": "Bezig met laden van {{PLURAL:$1|bericht|berichten}}...",
+ "tux-message-filter-placeholder": "Lijst filteren",
+ "tux-message-filter-result": "{{PLURAL:$1|Eén resultaat|$1 resultaten}} gevonden voor \"$2\"",
+ "tux-message-filter-advanced-button": "Uitgebreid zoeken",
+ "tux-message-filter-optional-messages-label": "Optionele berichten",
+ "tux-proofread-translated-by-self": "Vertaald door u",
+ "tux-empty-list-all": "Deze berichtengroep is leeg",
+ "tux-empty-list-all-guide": "Selecteer een andere berichtengroep om te vertalen",
+ "tux-translate-page-no-such-group": "<strong>De opgegeven groep bestaat niet.</strong> Selecteer een andere berichtengroep.",
+ "tux-empty-list-translated": "Geen vertaalde berichten",
+ "tux-empty-list-translated-guide": "U kunt helpen met vertalen",
+ "tux-empty-list-translated-action": "Vertalen",
+ "tux-empty-no-messages-to-display": "Er zijn geen weer te geven berichten.",
+ "tux-empty-there-are-optional": "Er zijn optionele berichten die niet worden weergegeven in de lijst",
+ "tux-empty-show-optional-messages": "Optionele berichten weergeven",
+ "tux-empty-no-outdated-messages": "Geen verouderde berichten",
+ "tux-empty-nothing-to-proofread": "Er is niets te controleren",
+ "tux-empty-you-can-help-providing": "U kunt helpen met vertalen",
+ "tux-empty-nothing-new-to-proofread": "Er is niets nieuws te controleren",
+ "tux-empty-you-can-review-already-proofread": "U kunt vertalingen controleren die al gecontroleerd zijn door anderen.",
+ "tux-empty-list-other": "Er is niets om te vertalen",
+ "tux-empty-list-other-guide": "U kunt helpen met het controleren van bestaande vertalingen",
+ "tux-empty-list-other-action": "Vertalingen controleren",
+ "tux-empty-list-other-link": "Alle berichten weergeven",
+ "tux-editor-close-tooltip": "Sluiten",
+ "tux-editor-expand-tooltip": "Uitvouwen",
+ "tux-editor-collapse-tooltip": "Samenvouwen",
+ "tux-editor-message-tools-show-editor": "In wiki-editor weergeven",
+ "tux-editor-message-tools-history": "Geschiedenis",
+ "tux-editor-message-tools-delete": "Verwijderen",
+ "tux-editor-message-tools-translations": "Alle vertalingen",
+ "tux-editor-message-tools-linktothis": "Aan dit bericht koppelen",
+ "tux-editor-loading": "Bezig met laden…",
+ "tux-editor-loading-failed": "Kon de vertalingshulpmiddelen niet laden: $1",
+ "translate-search-more-languages-info": "Nog $1 {{PLURAL:$1|taal|talen}}",
+ "translate-statsbar-tooltip": "$1% vertaald, $2% gecontroleerd",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% vertaald, $2% gecontroleerd, $3% verouderd",
+ "translate-search-more-groups-info": "nog $1 groep{{PLURAL:$1||en}}",
+ "translate-syntax-error": "Vertaling bevat syntaxfouten",
+ "tux-session-expired": "U bent niet langer aangemeld. Meld u opnieuw aan in een ander tabblad. U kunt ook een kopie maken van uw onvertaalde vertalingen, uzelf opnieuw aanmelden, terugkeren naar deze pagina en uw vertalingen opnieuw invoeren.",
+ "tux-nojs": "Dit hulpmiddel vereist JavaScript. JavaScript is uitgeschakeld of werkt niet, of deze browser wordt niet ondersteund.",
+ "specialpages-group-translation": "Vertaling"
+}
diff --git a/Translate/i18n/core/nmz.json b/Translate/i18n/core/nmz.json
new file mode 100644
index 00000000..99ddf917
--- /dev/null
+++ b/Translate/i18n/core/nmz.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "GastonJeremiah"
+ ]
+ },
+ "translate-documentation-language": "Hoorb gwɛɛt jugun kigb"
+}
diff --git a/Translate/i18n/core/nn.json b/Translate/i18n/core/nn.json
new file mode 100644
index 00000000..add5fb97
--- /dev/null
+++ b/Translate/i18n/core/nn.json
@@ -0,0 +1,314 @@
+{
+ "@metadata": {
+ "authors": [
+ "Byrial",
+ "Dittaeva",
+ "Frokor",
+ "Gunnernett",
+ "Harald Khan",
+ "Jon Harald Søby",
+ "Nghtwlkr",
+ "Njardarlogar",
+ "Ranveig"
+ ]
+ },
+ "translate": "Set om",
+ "translate-desc": "[[Special:Translate|Spesialside]] for omsetjing av MediaWiki og meir",
+ "translate-taskui-export-to-file": "Eksporter i opphavleg format",
+ "translate-taskui-export-as-po": "Eksporter for fråkopla omsetjing",
+ "translate-taction-translate": "Set om",
+ "translate-taction-proofread": "Vurder",
+ "translate-taction-lstats": "Språkstatistikk",
+ "translate-taction-mstats": "Statistikk for meldingsgruppa",
+ "translate-taction-export": "Eksporter",
+ "translate-taction-disabled": "Denne handlinga er slegen av på denne wikien.",
+ "translate-page-no-such-language": "Ugyldig språkkode.",
+ "translate-page-no-such-group": "Ikkje gyldig gruppe.",
+ "translate-page-disabled": "Omsetjingar til dette språket i denne gruppa er slått av. Årsak:\n\n<em>$1</em>",
+ "translate-language-disabled": "Omsetjing til dette språket er slege av.",
+ "translate-page-settings-legend": "Innstillingar",
+ "translate-page-group": "Gruppe",
+ "translate-page-language": "Språk",
+ "translate-page-limit": "Grense",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|melding|meldingar}} per side",
+ "translate-submit": "Hent",
+ "translate-page-navigation-legend": "Navigering",
+ "translate-page-showing": "Viser meldingar frå $1 til $2 av $3.",
+ "translate-page-showing-all": "Viser {{PLURAL:$1|éi melding|$1 meldingar}}.",
+ "translate-page-showing-none": "Ingen meldingar å vise.",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "Neste side",
+ "translate-prev": "Førre sida",
+ "translate-page-description-legend": "Informasjon om gruppa",
+ "translate-page-description-hasoptional": "Meldingsgruppa har valfrie meldingar.\nValfrie meldingar skal ein berre setja om når språket ditt har særskilde krav, til dømes at det ikkje nyttar mellomrom eller at det transkriberer eigennamn. $1",
+ "translate-page-description-hasoptional-open": "Vis valfrie meldingar.",
+ "translate-page-edit": "endre",
+ "translate-optional": "(valfri)",
+ "translate-ignored": "(ignorert)",
+ "translate-edit-title": "Endra «$1»",
+ "translate-edit-definition": "Melding som skal setjast om",
+ "translate-edit-contribute": "bidra",
+ "translate-edit-no-information": "<em>Denne meldinga har ingen dokumentasjon.\nOm du veit kvar eller korleis denne meldinga vert nytta, kan du hjelpe andre omsetjarar ved å legge inn dokumentasjon til denne meldinga.</em>",
+ "translate-edit-information": "Informasjon om meldinga ($1)",
+ "translate-edit-warnings": "Åtvaringar om ufullstendige omsetjingar",
+ "translate-edit-tmmatch-source": "Kjeldetekst for omsetjing: $1",
+ "translate-edit-tmmatch": "$1% samsvar",
+ "translate-edit-nopermission": "Du treng omsetjingsrettar for å setja om meldingar.",
+ "translate-edit-askpermission": "Få løyve",
+ "translate-checks-parameters": "{{PLURAL:$2|Denne parameteren|Dessse parametrane}} vert ikkje nytta:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Denne parameteren er ukjend|Desse parametrane er ukjende}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "{{PLURAL:$2|Det|Det}} er eit ujamt tal parentesar:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Denne lenkja er problematisk|Desse $2 lenkjene er problematiske}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Denne lenkja|Desse $2 lenkjene}} manglar:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Definisjonen nyttar <nowiki>{{PLURAL:}}</nowiki>, men omsetjinga gjer det ikkje.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> vart gjeven {{PLURAL:$1|éi form|$1 former}}, men berre {{PLURAL:$2|éi form|$2 former}} er stødde (utanom 0=- og 1=-former).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> har duplikatformer på enden. <nowiki>{{PLURAL:$1|namn|namn}}</nowiki> bør skrivast som <nowiki>{{PLURAL:$1|namn}}</nowiki>.",
+ "translate-checks-pagename": "Namnerom endra frå definisjonen",
+ "translate-checks-format": "Denne omsetjinga følgjer ikkje definisjonen eller har ugyldig syntaks: $1",
+ "translate-checks-escape": "Desse unnataka kan koma frå uhell: <strong>$1</strong>",
+ "translate-checks-parametersnotequal": "Parameterteljaren er {{PLURAL:$1|$1}}; skulle vore {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> er vanskapt.",
+ "translate-checks-fudforum-syntax": "Bruk <nowiki>$1</nowiki> i staden for <nowiki>$2</nowiki> på dette prosjektet.",
+ "translate-pref-editassistlang": "Hjelpespråk:",
+ "prefs-translate": "Omsetjingsval",
+ "translate-pref-editassistlang-help": "Kommaåtskild liste over språkkodar.\nOmsetjinga av meldinga på desse språka vert viste medan du set om.\nStandardlista over språk fylgjer med språket ditt.",
+ "translate-pref-editassistlang-bad": "Ugyldig språkkode i lista:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Redigere med omsetjingsgrensesnittet",
+ "right-translate-manage": "Handsama meldingsgrupper",
+ "action-translate-manage": "handsama meldingsgrupper",
+ "right-translate-import": "Importering av fråkopla omsetjingar",
+ "action-translate-import": "importera fråkopla omsetjingar",
+ "right-translate-messagereview": "Sjå igjennom omsetjingar",
+ "right-translate-groupreview": "Endra stoda på arbeidsflyten til meldingsgrupper",
+ "translate-rcfilters-translations": "Omsetjingar",
+ "translate-rcfilters-translations-only-label": "Omsetjingar",
+ "translate-rcfilters-translations-only-desc": "Endringar på omsette sider.",
+ "translate-rcfilters-translations-filter-label": "Ikkje omsetjingar",
+ "translate-rcfilters-translations-filter-desc": "Alle endringar som ikkje er omsetjingar.",
+ "translate-rcfilters-translations-site-label": "Systemmeldingar",
+ "translate-rcfilters-translations-site-desc": "Tilpassing av systemmeldingane i MediaWiki-namnerommet.",
+ "translate-rc-translation-filter": "Filtrer omsetjingar:",
+ "translate-rc-translation-filter-no": "Ikkje gjer noko",
+ "translate-rc-translation-filter-only": "Vis berre omsetjingar",
+ "translate-rc-translation-filter-filter": "Filtrer bort omsetjingar",
+ "translate-rc-translation-filter-site": "Berre endringar i {{SITENAME}}-meldingar",
+ "translationstats": "Omsetjingsstatistikk",
+ "translate-stats-edits": "Endringar",
+ "translate-stats-users": "Omsetjarar",
+ "translate-stats-registrations": "Registreringar",
+ "translate-stats-reviews": "Gjennomgåingar",
+ "translate-stats-reviewers": "Gjennomgåarar",
+ "translate-statsf-intro": "Du kan generere enkel statistikk med dette skjemaet. Alle verdiane har øvre og nedre grenser.",
+ "translate-statsf-options": "Grafalternativ",
+ "translate-statsf-width": "Breidde i pikslar:",
+ "translate-statsf-height": "Høgd i pikslar:",
+ "translate-statsf-days": "Startdato:",
+ "translate-statsf-start": "Startdato:",
+ "translate-statsf-scale": "Tidsoppløysing:",
+ "translate-statsf-scale-months": "Månader",
+ "translate-statsf-scale-weeks": "Veker",
+ "translate-statsf-scale-days": "Dagar",
+ "translate-statsf-scale-hours": "Timar",
+ "translate-statsf-count": "Måling:",
+ "translate-statsf-count-edits": "Tal på endringar",
+ "translate-statsf-count-users": "Aktive omsetjarar",
+ "translate-statsf-count-registrations": "Nye brukarar",
+ "translate-statsf-count-reviews": "Gjennomgåingar av omsetjingar",
+ "translate-statsf-count-reviewers": "Gjennomgåarar",
+ "translate-statsf-language": "Liste over språkkodar fråskilde med komma:",
+ "translate-statsf-group": "Liste over gruppekodar fråskilde med komma:",
+ "translate-statsf-submit": "Førehandsvis",
+ "translate-tag-page-desc": "Omsetjing av wikisida [[$2|$1]] frå $3 ($4).",
+ "translate-sidebar-alltrans": "På andre språk",
+ "translations": "Alle omsetjingar",
+ "translations-summary": "Skriv inn eit meldingsnamn nedanfor for å visa alle tilgjengelege omsetjingar.",
+ "translate-translations-no-message": "«$1» er ei melding som ikkje kan omsetjast",
+ "translate-translations-none": "Det finst ingen omsetjingar for «$1»",
+ "translate-translations-count": "Fann {{PLURAL:$1|éi omsetjing|$1 omsetjingar}}.",
+ "translate-translations-fieldset-title": "Melding",
+ "translate-translations-messagename": "Namn:",
+ "translate-translations-project": "Prosjekt:",
+ "translate-translations-including-no-param": "Spesifiser ein gyldig meldingsnøkkel i undersideparameteren.",
+ "translate-translations-history-short": "h",
+ "languagestats": "Språkstatistikk",
+ "languagestats-summary": "Sida viser omsetjingsstatistikk for alle meldingsgruppene for eit språk.",
+ "messagegroupstats-summary": "Denne sida viser statistikk for meldingsgrupper.",
+ "languagestats-stats-for": "Omsetjingsstatistikk for $1 ($2).",
+ "languagestats-recenttranslations": "siste omsetjingane",
+ "translate-langstats-incomplete": "Somt av statistikken på sida er uheil. Last sida på nytt for å få meir statistikk.",
+ "translate-langstats-expand": "vid ut",
+ "translate-langstats-collapse": "slå saman",
+ "translate-langstats-expandall": "vid ut alle",
+ "translate-langstats-collapseall": "slå saman alle",
+ "translate-language-code": "Språkkode",
+ "translate-language-code-field-name": "Språkkode:",
+ "translate-suppress-complete": "Skjul meldingsgrupper som er ferdig omsette",
+ "translate-ls-noempty": "Ikkje vis heilt uomsette meldingsgrupper",
+ "translate-language": "Språk",
+ "translate-total": "Meldingar",
+ "translate-untranslated": "Uomsett",
+ "translate-percentage-complete": "Ferdiggjort",
+ "translate-percentage-fuzzy": "Utdatert",
+ "translate-percentage-proofread": "Vurdert",
+ "translate-languagestats-overall": "Alle meldingsgruppene samla",
+ "translate-ls-submit": "Vis statistikk",
+ "translate-ls-column-group": "Meldingsgruppe",
+ "translate-mgs-pagename": "Meldingsgruppestatistikk",
+ "translate-mgs-fieldset": "Visingsinnstillingar",
+ "translate-mgs-group": "Meldingsgruppe:",
+ "translate-mgs-nocomplete": "Ikkje vis språk som har fullført omsetjinga",
+ "translate-mgs-noempty": "Ikkje vis språk som ikkje har omsetjingar",
+ "translate-mgs-submit": "Vis statistikk",
+ "translate-mgs-column-language": "Språk",
+ "translate-mgs-totals": "Alle språka samla",
+ "translate-mgs-invalid-group": "Den oppgjevne gruppa $1 finst ikkje.",
+ "translate-mgs-nothing": "Inkje å visa for den etterspurde statistikken.",
+ "supportedlanguages": "Støtta språk",
+ "supportedlanguages-summary": "Sida viser ei liste over alle språka som er stødde av {{SITENAME}}, i lag med namna på omsetjarane som jobbar med språket.\nDess større namnet på omsetjaren er, dess fleire bidrag har omsetjaren.\nFargen på understrekinga indikerer kor nyleg ein omsetjar har vore aktiv her.",
+ "supportedlanguages-colorlegend": "Fargetyding: Siste omsetjinga for $1 dagar sidan.",
+ "supportedlanguages-translators": "{{PLURAL:$2|Omsetjar|Omsetjarar}}: $1",
+ "supportedlanguages-recenttranslations": "siste omsetjingane",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|språk}} totalt.",
+ "supportedlanguages-activity": "$1: {{PLURAL:$2|éi endring|$2 endringar}} – siste endringa for {{PLURAL:$3|éin dag|$3 dagar}} sidan",
+ "translate-jssti-add": "Legg til i lista",
+ "managemessagegroups": "Handsaming av meldingsgruppe",
+ "translate-smg-notallowed": "Du har ikkje løyve til å utføra handlinga.",
+ "translate-smg-nochanges": "Det er ingen endringar å handsama.",
+ "translate-smg-submit": "Send endringar til handsaming",
+ "translate-smg-submitted": "Meldingsdefinisjonar har vorte oppdaterte. Endringane vert handsama i bakgrunnen.",
+ "translate-smg-left": "Meldingsinnhald i wikien",
+ "translate-smg-right": "Omsetjingar på veg",
+ "translate-manage-import-diff": "Melding $1 | Handlingar: $2",
+ "translate-manage-import-new": "Ny melding $1",
+ "translate-manage-import-deleted": "Sletta melding $1",
+ "translate-manage-action-import": "Importer",
+ "translate-manage-action-conflict": "Importer og merk for oppdatering («fuzzy»)",
+ "translate-manage-action-ignore": "Ignorer",
+ "translate-manage-import-summary": "Importerer ein ny versjon frå ei ekstern kjelde",
+ "translate-manage-submit": "Utfør",
+ "translate-manage-import-ok": "Importert ny versjon av sida $1",
+ "translate-manage-import-done": "Alt klart!",
+ "importtranslations": "Importér omsetjingar",
+ "translate-import-from-local": "Lokal filopplasting:",
+ "translate-import-load": "Last fil",
+ "translate-import-err-dl-failed": "Kunne ikkje henta fila:\n$1",
+ "translate-import-err-ul-failed": "Filopplastinga var ikkje vellukka",
+ "translate-import-err-invalid-title": "Det oppgjevne filnamnnet <nowiki>$1</nowiki> var ugyldig.",
+ "translate-import-err-no-such-file": "Fila <nowiki>$1</nowiki> finst ikkje eller er ikkje vorten lasta opp lokalt.",
+ "translate-js-support-unsaved-warning": "Du har omsetjingar som ikkje er lagra.",
+ "translate-gs-pos": "Pos.",
+ "translate-gs-code": "Kode",
+ "translate-gs-continent": "Kontinent",
+ "translate-gs-speakers": "Talarar",
+ "translate-gs-score": "Skår",
+ "translate-gs-multiple": "Fleire",
+ "translate-gs-count": "Tal",
+ "translate-gs-total": "Totalt",
+ "translate-gs-avgscore": "Snittskår",
+ "translate-documentation-language": "Meldingsdokumentasjon",
+ "translate-searchprofile": "Omsetjingar",
+ "translate-searchprofile-tooltip": "Søk i alle omsetjingar",
+ "translate-searchprofile-note": "Fleire søkjealternativ er tilgjengelege med [$1 omsetjingssøk].",
+ "translate-search-languagefilter": "Filtrer etter språk:",
+ "translate-search-nofilter": "Inga filtrering",
+ "log-name-translationreview": "Logg over omsetjingsgjennomgåing",
+ "log-description-translationreview": "Logg over alle gjennomgåingar av omsetjingar og meldingsgrupper.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|vurderte}} omsetjinga $3",
+ "translate-workflow-state-": "(ikkje sett)",
+ "translate-workflowstatus": "Stode: $1",
+ "translate-workflow-set-doing": "Set …",
+ "translate-workflow-autocreated-summary": "Automatisk oppretting av side for arbeidsflytsstoda $1",
+ "translate-stats-workflow": "Stode",
+ "translate-workflowgroup-label": "Arbeidsflytsstoder",
+ "translate-dynagroup-recent-label": "Nylege omsetjingar",
+ "translate-dynagroup-recent-desc": "Denne meldingsgruppa viser alle nylege omsetjingar til dette språket.\nHo er mest nyttig for korrekturlesing.",
+ "translate-msggroupselector-projects": "Meldingsgruppe",
+ "translate-msggroupselector-search-placeholder": "Søk etter grupper",
+ "translate-msggroupselector-search-all": "Alle",
+ "translate-msggroupselector-search-recent": "Nylege",
+ "translate-msggroupselector-view-subprojects": "{{PLURAL:$1|éi undergruppe|$1 undergrupper}}",
+ "tux-languageselector": "Set om til",
+ "tux-tab-all": "Alle",
+ "tux-tab-untranslated": "Uomsette",
+ "tux-tab-outdated": "Utdaterte",
+ "tux-tab-translated": "Omsette",
+ "tux-tab-unproofread": "Uvurderte",
+ "tux-edit": "Endra",
+ "tux-status-optional": "Valfri",
+ "tux-status-fuzzy": "Utdatert",
+ "tux-status-proofread": "Vurdert",
+ "tux-status-translated": "Omsett",
+ "tux-status-saving": "Lagrar …",
+ "tux-status-unsaved": "Ulagra",
+ "tux-editor-placeholder-language": "Omsetjinga di til $1",
+ "tux-editor-editsummary-placeholder": "Valfritt samandrag",
+ "tux-editor-paste-original-button-label": "Lim inn kjeldetekst",
+ "tux-editor-discard-changes-button-label": "Sjå bort frå endringar",
+ "tux-editor-save-button-label": "Lagra omsetjing",
+ "tux-editor-skip-button-label": "Hopp over til neste",
+ "tux-editor-cancel-button-label": "Bryt av",
+ "tux-editor-confirm-button-label": "Stadfest omsetjing",
+ "tux-editor-shortcut-info": "Trykk «$1» for å lagra eller «$2» for å hoppa over til neste meldinga",
+ "tux-editor-edit-desc": "Endra dokumentasjon",
+ "tux-editor-add-desc": "Legg til dokumentasjon",
+ "tux-editor-suggestions-title": "Framlegg",
+ "tux-editor-in-other-languages": "På andre språk",
+ "tux-editor-need-more-help": "Treng du meir hjelp?",
+ "tux-editor-ask-help": "Spør etter meir informasjon",
+ "tux-editor-tm-match": "$1% samsvar",
+ "tux-notices-more": "{{PLURAL:$1|$1 meir}}",
+ "tux-notices-hide": "gøym",
+ "tux-editor-save-failed": "Lagringa av omsetjinga gjekk ikkje: $1",
+ "tux-editor-n-uses": "nytta {{PLURAL:$1|éin gong|$1 gonger}}",
+ "tux-editor-message-desc-more": "Sjå meir",
+ "tux-editor-message-desc-less": "Sjå mindre",
+ "tux-editor-clear-translated": "Gøym omsette",
+ "tux-editor-proofreading-mode": "Vurder",
+ "tux-editor-translate-mode": "Liste",
+ "tux-editor-proofreading-hide-own-translations": "Gøym omsetjingane dine",
+ "tux-editor-proofreading-show-own-translations": "Vis omsetjingane dine",
+ "tux-proofread-action-tooltip": "Merk som vurdert",
+ "tux-proofread-edit-label": "Endra",
+ "tux-editor-page-mode": "Side",
+ "tux-editor-outdated-notice": "Omsetjinga treng kan henda ei oppdatering.",
+ "tux-editor-outdated-notice-diff-link": "Vis skilnader",
+ "tux-editor-doc-editor-placeholder": "Meldingsdokumentasjon",
+ "tux-editor-doc-editor-save": "Lagra dokumentasjon",
+ "tux-editor-doc-editor-cancel": "Bryt av",
+ "tux-messagetable-more-messages": "{{PLURAL:$1|éi melding|$1 meldingar}} til",
+ "tux-messagetable-loading-messages": "Lastar {{PLURAL:$1|éi melding|$1 meldingar}} …",
+ "tux-message-filter-placeholder": "Filtrer liste",
+ "tux-message-filter-result": "Fann $1 {{PLURAL:$1|resultat}} for «$2»",
+ "tux-message-filter-advanced-button": "Avansert søk",
+ "tux-message-filter-optional-messages-label": "Valfrie meldingar",
+ "tux-proofread-translated-by-self": "Sett om av deg",
+ "tux-empty-list-all": "Meldingsgruppa er tom",
+ "tux-empty-list-all-guide": "Vel ei anna meldingsgruppe å setja om",
+ "tux-empty-list-translated": "Ingen omsette meldingar",
+ "tux-empty-list-translated-guide": "Du kan hjelpa til med å setja om",
+ "tux-empty-list-translated-action": "Set om",
+ "tux-empty-no-messages-to-display": "Ingen meldingar å visa",
+ "tux-empty-there-are-optional": "Det finst valfrie meldingar som ikkje er viste i lista",
+ "tux-empty-show-optional-messages": "Vis valfrie meldingar",
+ "tux-empty-no-outdated-messages": "Ingen utdaterte meldingar",
+ "tux-empty-nothing-to-proofread": "Ingenting å vurdera",
+ "tux-empty-you-can-help-providing": "Du kan hjelpa til med å gje oss nye omsetjingar",
+ "tux-empty-nothing-new-to-proofread": "Ingenting nytt å vurdera",
+ "tux-empty-you-can-review-already-proofread": "Du kan vurdera omsetjingar som alt er vurderte av andre.",
+ "tux-empty-list-other": "Inkje å setja om",
+ "tux-empty-list-other-guide": "Du kan hjelpa til med å vurdera gjeldande omsetjingar",
+ "tux-empty-list-other-action": "Vurder omsetjingar",
+ "tux-empty-list-other-link": "Vis alle meldingar",
+ "tux-editor-close-tooltip": "Lat att",
+ "tux-editor-expand-tooltip": "Vid ut",
+ "tux-editor-collapse-tooltip": "Slå saman.",
+ "tux-editor-message-tools-show-editor": "Vis i wiki-tekstendraren",
+ "tux-editor-message-tools-history": "Historikk",
+ "tux-editor-message-tools-translations": "Alle omsetjingar",
+ "tux-editor-message-tools-linktothis": "Lenkje til denne meldinga",
+ "tux-editor-loading": "Lastar …",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|språk}} til",
+ "translate-statsbar-tooltip": "$1% omsett, $2% vurdert",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% omsett, $2% vurdert, $3% utdatert",
+ "translate-search-more-groups-info": "{{PLURAL:$1|éi gruppe|$1 grupper}} til"
+}
diff --git a/Translate/i18n/core/nod.json b/Translate/i18n/core/nod.json
new file mode 100644
index 00000000..da3edeb3
--- /dev/null
+++ b/Translate/i18n/core/nod.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Noktonissian"
+ ]
+ },
+ "translate-documentation-language": "ᨡᩬᩴ᩶ᨤ᩠ᩅᩣ᩠ᨾᨠᩣᩴᨠᩢ᩠ᨷ"
+}
diff --git a/Translate/i18n/core/nqo.json b/Translate/i18n/core/nqo.json
new file mode 100644
index 00000000..bb282206
--- /dev/null
+++ b/Translate/i18n/core/nqo.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lanciné.kounfantoh.fofana",
+ "Youssoufkadialy"
+ ]
+ },
+ "translate": "ߘߟߊߡߌ߬ߘߊ߬",
+ "translate-extensionname": "ߘߟߊߡߌ߬ߘߊ߬",
+ "translate-documentation-language": "ߗߋߛߓߍ ߘߐ߬ߛߙߋ߬ߦߊ߬ߟߌ"
+}
diff --git a/Translate/i18n/core/nso.json b/Translate/i18n/core/nso.json
new file mode 100644
index 00000000..63ac2736
--- /dev/null
+++ b/Translate/i18n/core/nso.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mohau"
+ ]
+ },
+ "translate-page-group": "Sehlopha",
+ "translate-page-language": "Polelo",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|ya molaetša|ya melaetša}} ka letlakala",
+ "translate-submit": "Lata",
+ "translate-page-showing": "Go bontšhwa melaetša go tloga go $1 go fihla go $2 ya $3.",
+ "translate-page-showing-all": "Go botšhwa $1 {{PLURAL:$1|ya molaetša|ya melaetša}}.",
+ "translate-page-description-legend": "Tsebo ka sehlopha",
+ "translate-statsf-scale-days": "Matšatši",
+ "translate-statsf-scale-hours": "Diiri",
+ "translate-statsf-count-edits": "Palo ya diphetogo"
+}
diff --git a/Translate/i18n/core/ny.json b/Translate/i18n/core/ny.json
new file mode 100644
index 00000000..9f6ed427
--- /dev/null
+++ b/Translate/i18n/core/ny.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "BaRaN6161 TURK"
+ ]
+ },
+ "translate-taction-translate": "Tanthauzirani"
+}
diff --git a/Translate/i18n/core/nyn.json b/Translate/i18n/core/nyn.json
new file mode 100644
index 00000000..0d3181e1
--- /dev/null
+++ b/Translate/i18n/core/nyn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kakonjo"
+ ]
+ },
+ "translate-documentation-language": "Empandika y'obutumwa"
+}
diff --git a/Translate/i18n/core/nys.json b/Translate/i18n/core/nys.json
new file mode 100644
index 00000000..1123c6d4
--- /dev/null
+++ b/Translate/i18n/core/nys.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gnangarra"
+ ]
+ },
+ "translate-documentation-language": "Boorna wangkiny"
+}
diff --git a/Translate/i18n/core/oc.json b/Translate/i18n/core/oc.json
new file mode 100644
index 00000000..c6ff358c
--- /dev/null
+++ b/Translate/i18n/core/oc.json
@@ -0,0 +1,342 @@
+{
+ "@metadata": {
+ "authors": [
+ "BrennodAloisi",
+ "Cedric31",
+ "ChrisPtDe",
+ "Jfblanc",
+ "Quentí",
+ "Shirayuki"
+ ]
+ },
+ "translate": "Traduire",
+ "translate-extensionname": "Traduire",
+ "translate-desc": "[[Special:Translate|Pagina especiala]] per traduire MediaWiki e quitament mai encara.",
+ "translate-taskui-export-to-file": "Exportar al format natiu",
+ "translate-taskui-export-as-po": "Exportar per una traduccion fòra linha",
+ "translate-taction-translate": "Traduire",
+ "translate-taction-proofread": "Relectura",
+ "translate-taction-lstats": "Estatisticas de lenga",
+ "translate-taction-mstats": "Estatisticas de grop de messatges",
+ "translate-taction-export": "Exportar",
+ "translate-taction-disabled": "Aquesta accion es desactivada sus aqueste wiki.",
+ "translate-page-no-such-language": "Un còdi de lengatge invalid es estat indicat",
+ "translate-page-no-such-group": "Lo grop especificat es invalid.",
+ "translate-page-disabled": "Las traduccions dins aquesta lenga dins aqueste grop son estadas desactivadas. Motiu :\n\n<em>$1</em>",
+ "translate-language-disabled": "La traduccion dins aquesta lenga es desactivada.",
+ "translate-page-settings-legend": "Configuracion",
+ "translate-page-group": "Grop",
+ "translate-page-language": "Lenga",
+ "translate-page-limit": "Limit",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|messatge|messatges}} per pagina",
+ "translate-submit": "Aténher",
+ "translate-page-navigation-legend": "Navigacion",
+ "translate-page-showing": "Visualizacion dels messatges de $1 a $2 sus $3.",
+ "translate-page-showing-all": "Visualizacion {{PLURAL:$1|d'$1 messatge|de $1 messatges}}.",
+ "translate-page-showing-none": "Cap de messatge de visualizar.",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "Pagina seguenta",
+ "translate-prev": "Pagina precedenta",
+ "translate-page-description-legend": "Entresenha a prepaus del grop",
+ "translate-page-description-hasoptional": "Aqueste grop de messatges conten los messatges facultatius.\nLos messatges facultatius deurián pas èsser traduits que quand vòstra lenga a d'exigéncias particularas\ncoma d'utilizar pas d'espacis o de transformar de noms pròpris. $1",
+ "translate-page-description-hasoptional-open": "Afichar los messatges facultatius",
+ "translate-page-edit": "modificar",
+ "translate-optional": "(opcional)",
+ "translate-ignored": "(ignorat)",
+ "translate-edit-title": "Modificar « $1 »",
+ "translate-edit-definition": "Definicion del messatge",
+ "translate-edit-contribute": "contribuir",
+ "translate-edit-no-information": "<em>Aqueste messatge es pas documentat.\nSe sabètz ont o cossí aqueste messatge es utilizat, podètz ajudar los autres traductors en creant sa documentacion.</em>",
+ "translate-edit-information": "Entresenhas a prepaus del messatge ($1)",
+ "translate-edit-warnings": "Avertiments que concernisson las traduccions incompletas",
+ "translate-edit-tmmatch-source": "Tèxte font de la traduccion : $1",
+ "translate-edit-tmmatch": "$1 % de correspondéncia",
+ "translate-edit-nopermission": "Vos cal obténer los dreits de traduccion per traduire los messatges.",
+ "translate-edit-askpermission": "Obténer la permission",
+ "exporttranslations": "Exportar de traduccions",
+ "translate-export-form-format": "Format",
+ "translate-export-invalid-format": "Provesissètz un format valid.",
+ "translate-export-not-supported": "L’exportacion de traduccions es pas presa en carga.",
+ "translate-export-format-notsupported": "Lo format d’exportacion especificat es pas pres en carga pel grop de messatges.",
+ "translate-checks-parameters": "{{PLURAL:$2|Lo paramètre seguent es pas utilizat|Los paramètres seguents son pas utilizats}} : <strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Lo paramètre seguent es desconegut|Los paramètres seguents son desconeguts}} : <strong>$1</strong>",
+ "translate-checks-balance": "I a un nombre impar de {{PLURAL:$2|parentèsis|parentèsis}} : <strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Lo ligam seguent causa|Los ligams seguents causan}} de problèmas : <strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Lo ligam seguent es mancant|Los $2 ligams seguents son mancants}} :\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "La definicion utiliza <nowiki>{{PLURAL:}}</nowiki> mas pas la traduccion",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> a recebut {{PLURAL:$1|una forma|$1 formas}} mas {{PLURAL:$2|una sola es suportada|solas $2 son suportadas}} (fòra las formas 0= e 1=).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> a de formas duplicadas al final. <nowiki>{{PLURAL:$1|sheep|sheep}}</nowiki> deuriá èsser escrit atal : <nowiki>{{PLURAL:$1|sheep}}</nowiki>.",
+ "translate-checks-pagename": "Nom d’espaci modificat dempuèi la definicion",
+ "translate-checks-format": "Aquesta traduccion seguís pas la definicion o a una sintaxi invalida : $1",
+ "translate-checks-escape": "Los escapaments seguents pòdon èsser accidentals : <strong>$1</strong>",
+ "translate-checks-parametersnotequal": "Lo nombre de paramètres es {{PLURAL:$1|$1}} ; aquò deuriá èsser {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> es incorrècte.",
+ "translate-checks-fudforum-syntax": "Utilizar <nowiki>$1</nowiki> al luòc de <nowiki>$2</nowiki> dins aqueste projècte.",
+ "translate-pref-editassistlang": "Assistent de lengas :",
+ "prefs-translate": "Opcions de traduccion",
+ "translate-pref-editassistlang-help": "Una virgulas a separat una lista de còdi lenga.\nLa traduccion d’un messatge dins aquelas lengas es afichada quand sètz a traduire.\nLa lista per defaut de las lengas varia en foncion de vòstra lenga.",
+ "translate-pref-editassistlang-bad": "Còdi lenga invalid dins la lista :\n<nowiki>$1</nowiki>.",
+ "right-translate": "Modificar en utilizant l'interfàcia de traduccion",
+ "right-translate-manage": "Gerir los gropes de messatge",
+ "action-translate-manage": "gerir los gropes de messatges",
+ "right-translate-import": "Importar las traduccions fòra linha",
+ "action-translate-import": "importar las traduccions fòra linha",
+ "right-translate-messagereview": "Examinar las traduccions",
+ "action-translate-messagereview": "repassar las traduccions",
+ "right-translate-groupreview": "Modificar l'estat de flux de trabalh dels gropes de messatge",
+ "action-translate-groupreview": "modificar l'estat del flux de trabalh pels gropes de messatges",
+ "translate-rcfilters-translations": "Traduccions",
+ "translate-rcfilters-translations-only-label": "Traduccions",
+ "translate-rcfilters-translations-only-desc": "Cambiaments a las paginas traduitas.",
+ "translate-rcfilters-translations-filter-label": "Pas traduits",
+ "translate-rcfilters-translations-filter-desc": "Totes los cambiaments que son pas de traduccions.",
+ "translate-rcfilters-translations-site-label": "Messatges del sistèma",
+ "translate-rcfilters-translations-site-desc": "Adaptacion dels messatges del sistèma dins l'espaci de noms MediaWiki.",
+ "translate-rc-translation-filter": "Filtrar las traduccions :",
+ "translate-rc-translation-filter-no": "Far pas res",
+ "translate-rc-translation-filter-only": "Afichar unicament las traduccions",
+ "translate-rc-translation-filter-filter": "Exclure las traduccions",
+ "translate-rc-translation-filter-site": "Solament los cambiaments de messatges del site",
+ "translationstats": "Estatisticas de traduccion",
+ "translate-stats-edits": "Edicions",
+ "translate-stats-users": "Traductors",
+ "translate-stats-registrations": "Inscripcions",
+ "translate-stats-reviews": "Relecturas",
+ "translate-stats-reviewers": "Relectors",
+ "translate-statsf-intro": "Podètz crear d'estatisticas simplas amb aqueste formulari. Totas las valors an de limits maximals e minimals.",
+ "translate-statsf-options": "Opcions del grafic",
+ "translate-statsf-width": "Largor en pixels :",
+ "translate-statsf-height": "Nautor en pixels",
+ "translate-statsf-days": "Periòde en jorns :",
+ "translate-statsf-start": "Data de començament :",
+ "translate-statsf-scale": "Granularitat :",
+ "translate-statsf-scale-years": "Annadas",
+ "translate-statsf-scale-months": "Meses",
+ "translate-statsf-scale-weeks": "Setmanas",
+ "translate-statsf-scale-days": "Jorns",
+ "translate-statsf-scale-hours": "Oras",
+ "translate-statsf-count": "Mesura :",
+ "translate-statsf-count-edits": "Nombre d'edicions",
+ "translate-statsf-count-users": "Traductors actius",
+ "translate-statsf-count-registrations": "Utilizaires novèls",
+ "translate-statsf-count-reviews": "Relecturas de traduccion",
+ "translate-statsf-count-reviewers": "Relectors",
+ "translate-statsf-language": "Lista de còdis de lengas, separats per de virgulas :",
+ "translate-statsf-group": "Lista de còdis de gropes, separats per de virgulas :",
+ "translate-statsf-submit": "Previsualizar",
+ "translate-tag-page-desc": "Traduccion de la pagina wiki [[$2|$1]] dempuèi $3 ($4).",
+ "translate-sidebar-alltrans": "Dins las autras lengas",
+ "translations": "Totas las traduccions",
+ "translations-summary": "Picatz un nom de messatge en dejós per far veire totas las traduccions disponiblas.",
+ "translate-translations-no-message": "« $1 » es pas un messatge traductible",
+ "translate-translations-none": "I a pas cap de traduccion per « $1 »",
+ "translate-translations-count": "{{PLURAL:$1|Existís una traduccion|Existisson $1 traduccions}}.",
+ "translate-translations-fieldset-title": "Messatge",
+ "translate-translations-messagename": "Nom :",
+ "translate-translations-project": "Projècte :",
+ "translate-translations-including-no-param": "Especificatz un nom de messatge valid dins lo paramètre de sospagina",
+ "translate-translations-history-short": "h",
+ "languagestats": "Estatisticas de lenga",
+ "languagestats-summary": "Aquesta pagina aficha las estatisticas de traduccion per totes los gropes de messatges per una lenga.",
+ "messagegroupstats-summary": "Aquesta pagina aficha las estatisticas de grop de messatges.",
+ "languagestats-stats-for": "Estatisticas de traduccion per $1 ($2).",
+ "languagestats-recenttranslations": "traduccions recentas",
+ "translate-langstats-incomplete": "Qualques unas de las estatisticas d'aquela pagina son incompletas. Recargatz-la per n'obténer mai.",
+ "translate-langstats-expand": "Desvolopar",
+ "translate-langstats-collapse": "Replegar",
+ "translate-langstats-expandall": "Desvolopar tot",
+ "translate-langstats-collapseall": "Replegar tot",
+ "translate-language-code": "Còdi de lenga",
+ "translate-language-code-field-name": "Còdi de lenga :",
+ "translate-suppress-complete": "Suprimir los gropes de messatges traduits completament",
+ "translate-ls-noempty": "Suprimir los gropes de messatges pas traduits completament",
+ "translate-language": "Lenga :",
+ "translate-total": "Messatges",
+ "translate-untranslated": "Pas traduits",
+ "translate-percentage-complete": "Acabament",
+ "translate-percentage-fuzzy": "Depassats",
+ "translate-languagestats-overall": "Totes los gropes de messatges ensemble",
+ "translate-ls-submit": "Afichar las estatisticas",
+ "translate-ls-column-group": "Grop de messatges",
+ "translate-mgs-pagename": "Estatisticas del grop de messatges",
+ "translate-mgs-fieldset": "Afichar las preferéncias",
+ "translate-mgs-group": "Grop de messatges :",
+ "translate-mgs-nocomplete": "Afichar pas las lengas qu'an acabat lor traduccion",
+ "translate-mgs-noempty": "Afichar pas las lengas qu’an pas cap de traduccion",
+ "translate-mgs-submit": "Afichar las estatisticas",
+ "translate-mgs-column-language": "Lenga",
+ "translate-mgs-totals": "$1 {{PLURAL:$1|lenga|lengas}} al total",
+ "translate-mgs-invalid-group": "Lo grop especificat «$1» existís pas.",
+ "translate-mgs-nothing": "Res a afichar per las estatisticas demandadas.",
+ "supportedlanguages": "Lengas presas en carga",
+ "supportedlanguages-colorlegend": "Legenda per la color: Darrièra traduccion i a $1 jorns.",
+ "supportedlanguages-portallink": "[$1] $2 - $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Traductor|Traductritz}}|Traductors}} : $1",
+ "supportedlanguages-recenttranslations": "traduccions recentas",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|lenga|lengas}} al total.",
+ "supportedlanguages-activity": "$1 : $2 modificacion{{PLURAL:$2||s}} - Darrièra modificacion i a $3 jorn{{PLURAL:$3||s}}",
+ "abusefilter-edit-builder-vars-translate-source-text": "Tèxte font de l'unitat de traduccion",
+ "translate-jssti-add": "Apondre a la lista",
+ "managemessagegroups": "Gestion del grop de messatges",
+ "translate-smg-notallowed": "Sètz pas autorizat a efectuar aquesta accion.",
+ "translate-smg-nochanges": "I a pas cap de cambiament a tractar.",
+ "translate-smg-submit": "Sometre las modificacions per tractament",
+ "translate-smg-left": "Contengut del messatge dins lo wiki",
+ "translate-smg-right": "Modificacions en cors de transferiment",
+ "translate-manage-import-diff": "Messatge $1 | Accions : $2",
+ "translate-manage-import-new": "Messatge novèl $1",
+ "translate-manage-import-deleted": "Messatge suprimit $1",
+ "translate-manage-action-import": "Importacion",
+ "translate-manage-action-conflict": "Importar e marcar coma fosc",
+ "translate-manage-action-ignore": "Ignorar",
+ "translate-manage-action-fuzzy": "Importar e marcar las traduccions coma foscas",
+ "translate-manage-nochanges": "I a pas de modificacion dins las definicions dels messatges d'aqueste grop.",
+ "translate-manage-nochanges-other": "I a pas agut cap de modificacion per aquesta lenga.\nUtilizatz lo ligam çaijós per tornar a la vista de detalh del grop.",
+ "translate-manage-inconsistent": "Una inconsisténcia es estada detectada dins la requèsta.\nVerificatz se i a agut de modificacions entre temps e tornatz ensajar. Detalhs : $1.",
+ "translate-manage-toolong": "La durada maximala del temps de tractament de $1 segonda{{PLURAL:$1||s}} es estat depassat.\nRenviatz lo formulari per contuhar lo tractament.",
+ "translate-manage-import-summary": "Importacion d'una version novèla dempuèi una font extèrna.",
+ "translate-manage-import-ignore": "Lo messatge $1 es estat sautat.",
+ "translate-manage-conflict-summary": "Importacion d'una version novèla dempuèi una font extèrna. Verificatz se vos plai.",
+ "translate-manage-submit": "Executar",
+ "translate-manage-intro-other": "Çaijós figura una lista de las modificacions dins la lenga $1.\nTornatz veire las modificacions e causissètz una accion d'efectuar per caduna.\nSe decidissètz d'ignorar las modificacions, aquesta accion serà pas que temporària.",
+ "translate-manage-import-ok": "Importat : $1",
+ "translate-manage-import-done": "Impòrt acabat !",
+ "importtranslations": "Importar las traduccions",
+ "translate-import-from-local": "Importar un fichièr local :",
+ "translate-import-load": "Cargar lo fichièr",
+ "translate-import-err-dl-failed": "Impossible d'accedir al fichièr :\n$1",
+ "translate-import-err-ul-failed": "Lo telecargament del fichièr a fracassat",
+ "translate-import-err-invalid-title": "Lo nom del fichièr provesit <nowiki>$1</nowiki> es invalid.",
+ "translate-import-err-no-such-file": "Lo fichièr <nowiki>$1</nowiki> existís pas o es pas importat localament.",
+ "translate-import-err-stale-group": "Lo grop de messatges qu'aquel fichièr i aperten existís pas.",
+ "translate-import-err-no-headers": "Lo fichièr es pas un fichièr ''Gettext'' plan format dins lo format esperat per l’extension ''Translate'' :\nes impossible de determinar lo grop e la lenga dempuèi las entèstas del fichièr.",
+ "translate-js-support-unsaved-warning": "Avètz de traduccions pas enregistradas.",
+ "translate-gs-pos": "Pos.",
+ "translate-gs-code": "Còdi",
+ "translate-gs-continent": "Continent",
+ "translate-gs-speakers": "Locutors",
+ "translate-gs-score": "Marca",
+ "translate-gs-multiple": "Multiple",
+ "translate-gs-count": "Compte",
+ "translate-gs-total": "Total",
+ "translate-gs-avgscore": "Marca mejana",
+ "translate-documentation-language": "Documentacion del messatge",
+ "translate-searchprofile": "Traduccions",
+ "translate-searchprofile-tooltip": "Recercar dins totas las traduccions",
+ "translate-searchprofile-note": "Mai d'opcions de recèrca disponiblas amb la [$1 recèrca de traduccions].",
+ "translate-search-languagefilter": "Filtrar per lenga :",
+ "translate-search-nofilter": "Pas cap de filtratge",
+ "log-name-translationreview": "Jornal de relectura de las traduccions",
+ "log-description-translationreview": "Jornal de totas las relecturas de las traduccions e dels gropes de messatge.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|a repassat}} la traduccion $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|a modificat}} l’estat de las traduccions $4 de $3 de $6 a $7",
+ "group-translate-sandboxed": "Traduccions pas aprovadas",
+ "group-translate-sandboxed-member": "{{GENDER:$1|traductor pas aprovat|traductritz pas aprovada}}",
+ "right-translate-sandboxmanage": "Gerir los utilizaires limitats al nauc de sabla",
+ "action-translate-sandboxmanage": "gerir los utilizaires limitats al nauc de sabla",
+ "right-translate-sandboxaction": "Executar d'accions sus lista blanca pels utilizaires pas enregistrats.",
+ "action-translate-sandboxaction": "executar d'accions sus lista blanca pels utilizaires pas enregistrats.",
+ "translate-workflow-state-": "(desactivat)",
+ "translate-workflowstatus": "Estatut: $1",
+ "translate-workflow-set-doing": "Activacion...",
+ "translate-workflow-autocreated-summary": "Creacion automatica de la pagina per l'estat del flux de trabalh $1",
+ "translate-stats-workflow": "Estatut",
+ "translate-workflowgroup-label": "Estats dels fluxes de trabalh",
+ "translate-dynagroup-recent-label": "Traduccions recentas",
+ "translate-dynagroup-recent-desc": "Aqueste grop de messatges fa veire totas las traduccions recentas faitas dins aquesta lenga.\nEs utilizat mai que mai pels prètzfaits de relectura.",
+ "translate-dynagroup-additions-label": "Apondons recents",
+ "translate-dynagroup-additions-desc": "Aqueste grop de messages aficha los messatges novèls e modificats.",
+ "translate-msggroupselector-projects": "Grop de messatges",
+ "translate-msggroupselector-search-placeholder": "Recercar de gropes",
+ "translate-msggroupselector-search-all": "Totes",
+ "translate-msggroupselector-search-recent": "Recent",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|sosprojècte|sosprojèctes}}",
+ "tux-languageselector": "Traduire en",
+ "tux-tab-all": "Totes",
+ "tux-tab-untranslated": "Pas traduit",
+ "tux-tab-outdated": "Obsolèt",
+ "tux-tab-translated": "Traduit",
+ "tux-tab-unproofread": "Pas verificat",
+ "tux-edit": "Modificar",
+ "tux-status-optional": "Facultatiu",
+ "tux-status-fuzzy": "Obsolèt",
+ "tux-status-proofread": "Corregit",
+ "tux-status-translated": "Traduit",
+ "tux-status-saving": "Publicacion en cors…",
+ "tux-status-unsaved": "Pas publicada",
+ "tux-save-unknown-error": "Una error desconeguda s'es produita.",
+ "tux-editor-editsummary-placeholder": "Resumit opcional",
+ "tux-editor-paste-original-button-label": "Pegar lo tèxte font",
+ "tux-editor-discard-changes-button-label": "Anullar las modificacions",
+ "tux-editor-save-button-label": "Enregistrar la traduccion",
+ "tux-editor-skip-button-label": "Anar al seguent",
+ "tux-editor-cancel-button-label": "Anullar",
+ "tux-editor-confirm-button-label": "Confirmar la traduccion",
+ "tux-editor-proofread-button-label": "Marcar coma relegit",
+ "tux-editor-shortcut-info": "Quichatz sus « $1 » per enregistrar o « $2 » per passar al messatge seguent o « $4 » per provesir un resumit o « $3 » per d'autres acorchis.",
+ "tux-editor-edit-desc": "Modificar la documentacion",
+ "tux-editor-add-desc": "Apondre una documentacion",
+ "tux-editor-suggestions-title": "Suggestions",
+ "tux-editor-in-other-languages": "Dins d'autras lengas",
+ "tux-editor-need-more-help": "Besonh d’ajuda ?",
+ "tux-editor-ask-help": "Demandar mai d’informacion",
+ "tux-editor-tm-match": "$1% correspond",
+ "tux-notices-more": "{{PLURAL:$1|$1 de mai}}",
+ "tux-notices-hide": "amagar",
+ "tux-editor-save-failed": "Fracàs de l'enregistrament de la traduccion : $1",
+ "tux-editor-n-uses": "utilitzat $1 {{PLURAL:$1|còp|còps}}",
+ "tux-editor-message-desc-more": "Veire mai",
+ "tux-editor-message-desc-less": "Afichar mens",
+ "tux-editor-clear-translated": "Amagar la traduccion",
+ "tux-editor-proofreading-mode": "Repassar",
+ "tux-editor-translate-mode": "Lista",
+ "tux-editor-proofreading-hide-own-translations": "Amagar vòstras traduccions",
+ "tux-editor-proofreading-show-own-translations": "Afichar vòstras traduccions",
+ "tux-proofread-action-tooltip": "Marcar coma relegit",
+ "tux-proofread-edit-label": "Modificar",
+ "tux-editor-page-mode": "Pagina",
+ "tux-editor-outdated-notice": "Aquesta traduccion pòt necessitar una mesa a jorn.",
+ "tux-editor-outdated-notice-diff-link": "Afichar las diferéncias",
+ "tux-editor-doc-editor-placeholder": "Documentacion del messatge",
+ "tux-editor-doc-editor-save": "Enregistrar la documentacion",
+ "tux-editor-doc-editor-cancel": "Anullar",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|messatge|messatges}} mai",
+ "tux-messagetable-loading-messages": "Cargament {{PLURAL:$1|del messatge|dels messatges}}…",
+ "tux-message-filter-placeholder": "Filtrar la lista",
+ "tux-message-filter-result": "{{PLURAL:$1|0=Cap de resultat pas trobat|1=Un resultat trobat|$1 resultats trobats}} per « $2 »",
+ "tux-message-filter-advanced-button": "Recèrca avançada",
+ "tux-message-filter-optional-messages-label": "Messatges opcionals",
+ "tux-proofread-translated-by-self": "Tradusit per vos",
+ "tux-empty-list-all": "Aqueste grop de messatges es void",
+ "tux-empty-list-all-guide": "Seleccionar un grop de messatge diferent de traduire",
+ "tux-translate-page-no-such-group": "<strong>Lo grop indicat existís pas.</strong> Seleccionatz un autre grop de messatges.",
+ "tux-empty-list-translated": "Cap de messatge pas tradusit",
+ "tux-empty-list-translated-guide": "Podètz ajudar a traduire",
+ "tux-empty-list-translated-action": "Traduire",
+ "tux-empty-no-messages-to-display": "Pas cap de messatge d'afichar.",
+ "tux-empty-there-are-optional": "I a de messatges opcionals qu'apareisson pas dins la lista",
+ "tux-empty-show-optional-messages": "Afichar los messatges facultatius",
+ "tux-empty-no-outdated-messages": "I a pas de messatges desuets",
+ "tux-empty-nothing-to-proofread": "Pas res a repassar",
+ "tux-empty-you-can-help-providing": "Podètz ajudar en aportant de traduccions novèlas",
+ "tux-empty-nothing-new-to-proofread": "Res de nòu a repassar",
+ "tux-empty-you-can-review-already-proofread": "Podètz repassar las traduccions ja relegidas per d’autres.",
+ "tux-empty-list-other": "Pas res a traduire",
+ "tux-empty-list-other-guide": "Podètz ajudar a repassar las traduccions existentas",
+ "tux-empty-list-other-action": "Repassar las traduccions",
+ "tux-empty-list-other-link": "Afichar totes los messatges",
+ "tux-editor-close-tooltip": "Tampar",
+ "tux-editor-expand-tooltip": "Desvolopar",
+ "tux-editor-collapse-tooltip": "Replegar",
+ "tux-editor-message-tools-show-editor": "Afichar dins l'editor wiki",
+ "tux-editor-message-tools-history": "Istoric",
+ "tux-editor-message-tools-delete": "Suprimir",
+ "tux-editor-message-tools-translations": "Totas las traduccions",
+ "tux-editor-message-tools-linktothis": "Ligam cap a aqueste messatge",
+ "tux-editor-loading": "Cargament en cors...",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|lenga|lengas}} mai",
+ "translate-statsbar-tooltip": "$1% tradusit, $2% repassat",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% tradusit, $2% repassat, $3% desuet",
+ "translate-search-more-groups-info": "$1 grop{{PLURAL:$1||es}} mai"
+}
diff --git a/Translate/i18n/core/ojb.json b/Translate/i18n/core/ojb.json
new file mode 100644
index 00000000..7bb234d2
--- /dev/null
+++ b/Translate/i18n/core/ojb.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aandeginini"
+ ]
+ },
+ "translate-smg-no-groups-in-sync": "Gaawiin gegoo okwiinowag aazha bezhigwan",
+ "translate-smg-strong-sync-help": "Wiiji'",
+ "translate-smg-groups-in-sync": "Okwiinowag azhaa bezhigwan",
+ "translate-smg-groups-in-sync-list": "Ondamanokii nagadan niibiwa-ikidowin okwiinowag:",
+ "translate-documentation-language": "Maajiibii'igan ozhibii'igan"
+}
diff --git a/Translate/i18n/core/olo.json b/Translate/i18n/core/olo.json
new file mode 100644
index 00000000..fcf107ef
--- /dev/null
+++ b/Translate/i18n/core/olo.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ilja.mos",
+ "Mashoi7"
+ ]
+ },
+ "translate-page-navigation-legend": "Navigacii",
+ "translate-edit-title": "Kohendele sivuu \"$1\"",
+ "translate-suppress-complete": "Peitä viestijoukot, kuduat on kiännetty kogonah",
+ "translate-ls-noempty": "Peitä viestijoukot, kudamii ei ole kiännetty kogonah",
+ "translate-documentation-language": "Viestien dokumentatsii"
+}
diff --git a/Translate/i18n/core/om.json b/Translate/i18n/core/om.json
new file mode 100644
index 00000000..8c4ab6e0
--- /dev/null
+++ b/Translate/i18n/core/om.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ahrada2016",
+ "Maammee"
+ ]
+ },
+ "supportedlanguages": "Qooqa hojiirrayiru",
+ "translate-smg-group-message-action-history": "Seenaa",
+ "translate-smg-group-message-tag-outdated": "Guyala",
+ "translate-smg-group-message-tag-rename": "Maqa sirreessi",
+ "translate-smg-group-message-message-content": "Qabiyyee:",
+ "translate-smg-group-message-message-target": "Manii:",
+ "translate-smg-group-message-message-replacement": "Iddobuusuu:",
+ "translate-smg-group-message-message-other-langs": "Afaanota biroo:",
+ "translate-manage-source-message-not-found": "Hinki ergaa hin argamne",
+ "translate-documentation-language": "Galmeessaa ragaa"
+}
diff --git a/Translate/i18n/core/or.json b/Translate/i18n/core/or.json
new file mode 100644
index 00000000..8b8814d5
--- /dev/null
+++ b/Translate/i18n/core/or.json
@@ -0,0 +1,100 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ansumang",
+ "Jnanaranjan Sahu",
+ "Jose77",
+ "MKar",
+ "Psubhashish"
+ ]
+ },
+ "translate": "ଅନୁବାଦ",
+ "translate-desc": "[[Special:Translate|ବିଶେଷ ପୃଷ୍ଠା]] ମିଡ଼ିଆଉଇକି ଓ ବାକିସବୁ ଅନୁବାଦ କରିବା ନିମନ୍ତେ ବିଶେଷ ପୃଷ୍ଠା",
+ "translate-taskui-export-to-file": "ମୂଳ ସଜାଣିକୁ ବ୍ଯବ‌ହାର କରିବେ",
+ "translate-taskui-export-as-po": "ଅଫ-ଲାଇନ ଅନୁବାଦ ବ୍ୟବ‌ହାର କରିବେ",
+ "translate-taction-translate": "ଅନୁବାଦ କରନ୍ତୁ",
+ "translate-taction-proofread": "ବନାନ‌ଗ‌ତ ଭୁଲ ସୁଧାରନ୍ତୁ",
+ "translate-taction-lstats": "ଭାଷା ପରିସଂଖ୍ୟାନ",
+ "translate-taction-mstats": "ମେସେଜ ଦଳ ପରିସଂଖ୍ୟାନ",
+ "translate-taction-export": "ପଠାନ୍ତୁ",
+ "translate-taction-disabled": "ଉଇକିରେ ଅପଲୋଡ଼ କରିବା ଅଚଳ କରାଯାଇଛି ।",
+ "translate-page-no-such-language": "ଦିଆଯାଇଥିବା ଭାଷାଟି ଭୁଲ ।",
+ "translate-page-no-such-group": "ଦିଆଯାଇଥିବା ସମୂହଟି ଭୁଲ ।",
+ "translate-page-disabled": "ଏହି ସମୂହରେ ଦିଆଯାଇଥିବା ଏହି ଭାଷାର ଅନୁବାଦଟି ଅଚଳ କରାଯାଇଛି । କାରଣ: <em>$1</em>",
+ "translate-language-disabled": "ଏହି ଭାଷାରେ ଅନୁବାଦ କରିବା ଅଚଳ କରାଯାଇଛି ।",
+ "translate-page-settings-legend": "ସଜାଣିଗୁଡ଼ିକ",
+ "translate-page-group": "ଗୋଠ",
+ "translate-page-language": "ଭାଷା",
+ "translate-page-limit": "ସୀମା",
+ "translate-page-limit-option": "ପୃଷ୍ଠାପ୍ରତି $1 {{PLURAL:$1|ମେସେଜ|ମେସେଜ ସମୂହ}}",
+ "translate-submit": "ବଢ଼ାଇବେ",
+ "translate-page-navigation-legend": "ଦିଗବାରେଣି (ନାଭିଗେସନ)",
+ "translate-page-showing": "$3ଭିତରୁ $1 ଠାରୁ $2 ଯାଏଁ ମେସେଜମାନ ଦେଖାଉଛୁ ।",
+ "translate-page-showing-all": "$1 ଗୋଟି {{PLURAL:$1|ମେସେଜ}} ଦେଖାଇବେ ।",
+ "translate-page-showing-none": "ଦେଖାଇବା ପାଇଁ ମେସେଜଟିଏ ନାହିଁ ।",
+ "translate-next": "ପର ପୃଷ୍ଠା",
+ "translate-prev": "ଆଗ ପୃଷ୍ଠା",
+ "translate-page-description-legend": "ଏହି ସମୂହ ବାବଦରେ ସୂଚନା",
+ "translate-page-description-hasoptional-open": "ବିକଳ୍ପ ମେସେଜସମୂହ ଦେଖାନ୍ତୁ ।",
+ "translate-page-edit": "ଏହାକୁ ବଦଳାନ୍ତୁ",
+ "translate-optional": "(ଇଚ୍ଛାଧୀନ)",
+ "translate-ignored": "(ଏଡ଼ାଇଯାନ୍ତୁ)",
+ "translate-edit-title": "ବଦଳ \"$1\"",
+ "translate-edit-definition": "ମେସେଜ ସଜ୍ଞା",
+ "translate-edit-contribute": "ଅବଦାନ",
+ "translate-edit-information": "($1) ମେସେଜ ବାବଦରେ ସୂଚନା",
+ "translate-edit-warnings": "ଅସମ୍ପୂର୍ଣ୍ଣ ଅନୁବାଦ ବାବଦରେ ଚେତାବନୀ",
+ "translate-edit-tmmatch-source": "ସୋର୍ସ ଟେକ୍ସଟରୁ ଅନୁବାଦ: $1",
+ "translate-edit-tmmatch": "$1% ମେଳ",
+ "translate-edit-nopermission": "ଅନୁବାଦ କରିବା ପାଇଁ ଆପଣଙ୍କୁ ଅନୁବାଦ ଅନୁମତି ଲୋଡ଼ା ।",
+ "translate-edit-askpermission": "ଅନୁମତି ପାଇବା ପାଇଁ ଅନୁରୋଧ କରନ୍ତୁ ।",
+ "translate-checks-parameters": "ଏହି {{PLURAL:$2|ପାରାମିଟର|ପାରାମିଟରମାନ}} ବ୍ୟ‌ବ‌ହାର ହୋଇନାହିଁ:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "ଏହି {{PLURAL:$2|ପାରାମିଟର ଟି|ପାରାମିଟରମାନ}} ଅଜଣା:\n<strong>$1</strong>",
+ "translate-checks-balance": "ଏଠାରେ ଅସମ ସଂଖ୍ୟକ {{PLURAL:$2|ପେରେନ୍ଥେସ|ପେରେନ୍ଥେସସବୁ}} ରହିଛି:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "ଏହି {{PLURAL:$2|ଲିଙ୍କଟି|$2 lଲିଙ୍କମାନ}} ଅସୁବିଧାଜନକ: <strong><nowiki>$1</nowiki></strong>",
+ "prefs-translate": "ଅନୁବାଦ ବିକଳ୍ପସବୁ",
+ "translate-rc-translation-filter-no": "କିଛି କରିବେନାହିଁ",
+ "translate-rc-translation-filter-only": "କେବଳ ଅନୁବାଦସବୁ ଦେଖାନ୍ତୁ",
+ "translate-rc-translation-filter-filter": "ଅନୁବାଦସବୁ ଅଲଗା କରିଦିଅନ୍ତୁ",
+ "translationstats": "ଅନୁବାଦ ପରିସଙ୍ଖ୍ୟାନ",
+ "translate-stats-edits": "ବଦଳସବୁ",
+ "translate-stats-users": "ଅନୁବାଦକ",
+ "translate-statsf-scale-months": "ମାସ",
+ "translate-statsf-scale-weeks": "ସପ୍ତାହ",
+ "translate-statsf-scale-days": "ଦିନସବୁ",
+ "translate-statsf-scale-hours": "ଘଣ୍ଟା",
+ "translate-statsf-count": "ମାପ:",
+ "translate-statsf-count-edits": "ସମ୍ପାଦନା ସଂଖ୍ୟା",
+ "translate-statsf-count-users": "ସଚଳ ଅନୁବାଦକ",
+ "translate-statsf-count-registrations": "ନୂଆ ବ୍ୟବହାରକାରୀଗଣ",
+ "translate-statsf-submit": "ସାଇତା ଆଗରୁ ଦେଖଣା",
+ "translations": "ସବୁ ଅନୁବାଦ",
+ "translate-translations-fieldset-title": "ମେସେଜ",
+ "translate-translations-messagename": "ନାମ:",
+ "translate-translations-project": "ପ୍ରକଳ୍ପ:",
+ "languagestats": "ଭାଷା ଆକଳନ",
+ "languagestats-recenttranslations": "ବର୍ତ୍ତମାନର ଅନୁବାଦସବୁ",
+ "translate-language": "ଭାଷା",
+ "translate-total": "ସନ୍ଦେଶସବୁ",
+ "translate-languagestats-overall": "ଏକାସାଙ୍ଗରେ ଥିବା ସବୁଯାକ ମେସେଜ ଦଳ",
+ "translate-ls-submit": "ଆକଳନ ଦେଖାଇବେ",
+ "translate-ls-column-group": "ମେସେଜ ଗୋଷ୍ଠୀ",
+ "translate-mgs-group": "ସଂଦେଶ ଗୋଠ:",
+ "translate-mgs-submit": "ଆକଳନ ଦେଖାଇବେ",
+ "translate-mgs-column-language": "ଭାଷା",
+ "supportedlanguages-translators": "{{PLURAL:$2|ଅନୁବାଦକ|ଅନୁବାଦକମାନେ}}: $1",
+ "supportedlanguages-recenttranslations": "ବର୍ତ୍ତମାନର ଅନୁବାଦସବୁ",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|ଭାଷା|ଭାଷା}} ସବୁ ମିଶି ।",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|ବଦଳ|ବଦଳସବୁ}} - ଶେଷ ବଦଳ $3 {{PLURAL:$3|ଦିନ|ଦିନସବୁ}} ଆଗରୁ",
+ "translate-jssti-add": "ତାଲିକାରେ ଯୋଡ଼ନ୍ତୁ",
+ "translate-manage-import-new": "ନୂଆ ସନ୍ଦେଶ $1",
+ "translate-manage-action-import": "ଆମଦାନି",
+ "translate-manage-action-conflict": "ଆମଦାନି ଓ ଫଜୀ",
+ "translate-import-load": "ଲୋଡ଼ ଫାଇଲ",
+ "translate-gs-code": "କୋଡ଼",
+ "translate-gs-score": "ଗଣନା",
+ "translate-gs-count": "ଗଣନା",
+ "translate-documentation-language": "ସନ୍ଦେଶ ନଥିପତ୍ର",
+ "translate-workflowstatus": "ସ୍ଥିତି: $1",
+ "translate-stats-workflow": "ସ୍ଥିତି"
+}
diff --git a/Translate/i18n/core/os.json b/Translate/i18n/core/os.json
new file mode 100644
index 00000000..7cd2dccb
--- /dev/null
+++ b/Translate/i18n/core/os.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amikeco",
+ "Arturgudiev",
+ "Bouron"
+ ]
+ },
+ "translate-page-group": "Къорд",
+ "translate-page-language": "Æвзаг",
+ "translate-next": "Фæдылдзог фарс",
+ "translate-prev": "Раздæры фарс",
+ "translate-page-edit": "ивын",
+ "translate-statsf-submit": "Разæркаст",
+ "translate-documentation-language": "Уацы документаци"
+}
diff --git a/Translate/i18n/core/pa.json b/Translate/i18n/core/pa.json
new file mode 100644
index 00000000..09f9def8
--- /dev/null
+++ b/Translate/i18n/core/pa.json
@@ -0,0 +1,212 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aalam",
+ "Babanwalia",
+ "TariButtar"
+ ]
+ },
+ "translate": "ਤਰਜਮਾ ਕਰੋ",
+ "translate-desc": "ਮੀਡੀਆਵਿਕੀ ਅਤੇ ਹੋਰਾਂ ਦੇ ਅਨੁਵਾਦ ਲਈ [[Special:Translate|ਖ਼ਾਸ ਸਫ਼ਾ]]",
+ "translate-taskui-export-to-file": "ਦੇਸੀ ਰੂਪ ਵਿਚ ਮੰਗਾਓ",
+ "translate-taskui-export-as-po": "ਆਫ਼-ਲਾਈਨ ਅਨੁਵਾਦ ਲਈ ਮੰਗਾਓ",
+ "translate-taction-translate": "ਤਰਜਮਾ ਕਰੋ",
+ "translate-taction-proofread": "ਪਰਖ",
+ "translate-taction-lstats": "ਭਾਸ਼ਾ ਦੇ ਅੰਕੜੇ",
+ "translate-taction-mstats": "ਸੁਨੇਹਿਆਂ ਦੀ ਟੋਲੀ ਦੇ ਅੰਕੜੇ",
+ "translate-taction-export": "ਬਰਾਮਦ",
+ "translate-taction-disabled": "ਇਹ ਕਾਰਜ ਵਿਕੀ ਉੱਤੇ ਬੰਦ ਕੀਤਾ ਹੋਇਆ ਹੈ।",
+ "translate-page-no-such-language": "ਦੱਸੀ ਗਈ ਭਾਸ਼ਾ ਗ਼ਲਤ ਹੈ।",
+ "translate-page-no-such-group": "ਦੱਸਿਆ ਗਿਆ ਸਮੂਹ ਗ਼ਲਤ ਹੈ।",
+ "translate-page-disabled": "ਇਸ ਟੋਲੀ ਵਿਚ ਇਸ ਬੋਲੀ ਦੇ ਤਰਜਮੇ ਬੰਦ ਕਰ ਦਿੱਤੇ ਗਏ ਹਨ।\nਕਾਰਨ:\n\n<em>$1</em>",
+ "translate-language-disabled": "ਇਸ ਭਾਸ਼ਾ ਵਿਚ ਤਰਜਮਾਕਾਰੀ ਬੰਦ ਹੈ।",
+ "translate-page-settings-legend": "ਸੈਟਿੰਗ",
+ "translate-page-group": "ਗਰੁੱਪ",
+ "translate-page-language": "ਭਾਸ਼ਾ",
+ "translate-page-limit": "ਹੱਦ",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|ਸੁਨੇਹਾ|ਸੁਨੇਹੇ}} ਪ੍ਰਤੀ ਸਫ਼ਾ",
+ "translate-submit": "ਲਿਆਉ",
+ "translate-page-navigation-legend": "ਫੇਰੀ ਪਾਓ",
+ "translate-page-showing": "$3 ਦੇ $1 ਤੋਂ $2 ਤੱਕ ਦੇ ਸੁਨੇਹੇ ਵਿਖਾਏ ਜਾ ਰਹੇ ਹਨ।",
+ "translate-page-showing-all": "$1 {{PLURAL:$1|ਸੁਨੇਹਾ|ਸੁਨੇਹੇ}} ਵਿਖਾਏ ਜਾ ਰਹੇ ਹਨ।",
+ "translate-page-showing-none": "ਵਿਖਾਉਣ ਲਈ ਕੋਈ ਸੁਨੇਹਾ ਨਹੀਂ ਹੈ।",
+ "translate-next": "ਅਗਲਾ ਸਫ਼ਾ",
+ "translate-prev": "ਪਿਛਲਾ ਸਫ਼ਾ",
+ "translate-page-description-legend": "ਇਸ ਟੋਲੀ ਬਾਰੇ ਜਾਣਕਾਰੀ",
+ "translate-page-description-hasoptional-open": "ਚੋਣਵੇਂ ਸੁਨੇਹੇ ਵਿਖਾਓ।",
+ "translate-page-edit": "ਸੋਧੋ",
+ "translate-optional": "(ਚੋਣਵਾਂ)",
+ "translate-ignored": "(ਅਣਡਿੱਠਾ)",
+ "translate-edit-title": "\"$1\" ਸੋਧੋ",
+ "translate-edit-definition": "ਸਨੇਹੇ ਦੀ ਪਰਿਭਾਸ਼ਾ",
+ "translate-edit-contribute": "ਯੋਗਦਾਨ ਪਾਓ",
+ "translate-edit-information": "($1) ਸੁਨੇਹੇ ਬਾਬਤ ਜਾਣਕਾਰੀ",
+ "translate-edit-warnings": "ਊਣੇ ਤਰਜਮਿਆਂ ਬਾਰੇ ਚਿਤਾਵਨੀ",
+ "translate-edit-tmmatch-source": "ਅਨੁਵਾਦ ਦੀ ਸਰੋਤ ਲਿਖਤ:$1",
+ "translate-edit-tmmatch": "$1% ਮੇਲ",
+ "translate-edit-nopermission": "ਤੁਹਾਨੂੰ ਸੁਨੇਹਿਆਂ ਦਾ ਅਨੁਵਾਦ ਕਰਨ ਲਈ ਇਜਾਜ਼ਤ ਚਾਹੀਦੀ ਹੈ।",
+ "translate-edit-askpermission": "ਇਜਾਜ਼ਤ ਲਈ ਬੇਨਤੀ ਕਰੋ",
+ "translate-checks-parameters": "{{PLURAL:$2|ਹੇਠ ਲਿਖਿਆ ਮਾਪਦੰਡ ਵਰਤਿਆ ਨਹੀਂ ਗਿਆ|ਹੇਠ ਲਿਖੇ ਮਾਪਦੰਡ ਵਰਤੇ ਨਹੀਂ ਗਏ}}:\n<strong>$1</strong>",
+ "translate-rc-translation-filter-no": "ਕੁਝ ਨਾ ਕਰੋ",
+ "translate-rc-translation-filter-only": "ਸਿਰਫ਼ ਤਰਜਮੇ ਵਿਖਾਉ",
+ "translationstats": "ਤਰਜਮਾਕਾਰੀ ਦੇ ਅੰਕੜੇ",
+ "translate-stats-edits": "ਸੋਧ",
+ "translate-stats-users": "ਅਨੁਵਾਦਕ",
+ "translate-stats-registrations": "ਰਜਿਸਟਰੇਸ਼ਨ",
+ "translate-stats-reviews": "ਪਰਖਾਂ",
+ "translate-stats-reviewers": "ਪਾਰਖੂ",
+ "translate-statsf-start": "ਅਰੰਭ ਮਿਤੀ:",
+ "translate-statsf-scale-months": "ਮਹੀਨੇ",
+ "translate-statsf-scale-weeks": "ਹਫ਼ਤੇ",
+ "translate-statsf-scale-days": "ਦਿਨ",
+ "translate-statsf-scale-hours": "ਘੰਟੇ",
+ "translate-statsf-count": "ਮਾਪ:",
+ "translate-statsf-count-edits": "ਸੋਧਾਂ ਦੀ ਗਿਣਤੀ",
+ "translate-statsf-count-users": "ਸਰਗਰਮ ਅਨੁਵਾਦਕ",
+ "translate-statsf-count-registrations": "ਨਵੇਂ ਵਰਤੋਂਕਾਰ",
+ "translate-statsf-count-reviews": "ਤਰਜਮਾਕਾਰੀ ਦੀਆਂ ਪਰਖਾਂ",
+ "translate-statsf-count-reviewers": "ਪਾਰਖੂ",
+ "translate-statsf-submit": "ਝਲਕ",
+ "translate-sidebar-alltrans": "ਹੋਰ ਬੋਲੀਆਂ ਵਿੱਚ ਪੜ੍ਹੋ",
+ "translations": "ਸਾਰੇ ਤਰਜਮੇ",
+ "translate-translations-fieldset-title": "ਸੁਨੇਹਾ",
+ "translate-translations-messagename": "ਨਾਂ:",
+ "translate-translations-project": "ਪਰੋਜੈਕਟ:",
+ "translate-translations-history-short": "ਅ",
+ "languagestats": "ਭਾਸ਼ਾ ਅੰਕੜੇ",
+ "messagegroupstats-summary": "ਇਹ ਸਫ਼ਾ ਸੁਨੇਹਿਆਂ ਦੀ ਟੋਲੀ ਦੇ ਅੰਕੜੇ ਵਿਖਾਉਂਦਾ ਹੈ",
+ "languagestats-stats-for": "$1 ($2) ਲਈ ਤਰਜਮਾਈ ਅੰਕੜੇ ਹਨ।",
+ "languagestats-recenttranslations": "ਹਾਲੀਆ ਤਰਜਮੇ",
+ "translate-langstats-expand": "ਫੈਲਾਓ",
+ "translate-langstats-collapse": "ਸਮੇਟੋ",
+ "translate-langstats-expandall": "ਸਭ ਫੈਲਾਓ",
+ "translate-langstats-collapseall": "ਸਭ ਸਮੇਟੋ",
+ "translate-language-code": "ਭਾਸ਼ਾ ਕੋਡ",
+ "translate-language-code-field-name": "ਭਾਸ਼ਾ ਕੋਡ:",
+ "translate-language": "ਬੋਲੀ",
+ "translate-total": "ਸੁਨੇਹੇ",
+ "translate-untranslated": "ਤਰਜਮੇ ਤੋਂ ਸੱਖਣੇ",
+ "translate-percentage-complete": "ਮੁਕੰਮਲ",
+ "translate-percentage-fuzzy": "ਪੁਰਾਣੇ",
+ "translate-languagestats-overall": "ਸੁਨੇਹਿਆਂ ਦੀਆਂ ਸਾਰੀਆਂ ਟੋਲੀਆਂ ਇਕੱਠੀਆਂ",
+ "translate-ls-submit": "ਅੰਕੜੇ ਵਿਖਾਓ",
+ "translate-ls-column-group": "ਸੁਨੇਹਿਆਂ ਦੀ ਟੋਲੀ",
+ "translate-mgs-pagename": "ਸੁਨੇਹਿਆਂ ਦੀ ਟੋਲੀ ਦੇ ਅੰਕੜੇ",
+ "translate-mgs-fieldset": "ਤਰਜੀਹਾਂ ਵਿਖਾਉ",
+ "translate-mgs-group": "ਸੁਨੇਹਿਆਂ ਦੀ ਟੋਲੀ:",
+ "translate-mgs-nocomplete": "ਉਹ ਬੋਲੀਆਂ ਨਾ ਵਿਖਾਉ ਜਿਹਨਾਂ ਦਾ ਤਰਜਮਾ ਪੂਰਾ ਹੋ ਗਿਆ ਹੈ",
+ "translate-mgs-noempty": "ਉਹ ਬੋਲੀਆਂ ਨਾ ਵਿਖਾਉ ਜਿਹਨਾਂ ਵਿੱਚ ਕੋਈ ਤਰਜਮਾ ਨਹੀਂ ਹੈ",
+ "translate-mgs-submit": "ਅੰਕੜੇ ਵਿਖਾਓ",
+ "translate-mgs-column-language": "ਭਾਸ਼ਾ",
+ "translate-mgs-totals": "ਸਾਰੀਆਂ ਬੋਲੀਆਂ ਮਿਲਾ ਕੇ",
+ "translate-mgs-invalid-group": "ਦੱਸਿਆ ਗਿਆ ਸਮੂਹ $1 ਹੋਂਦ ਵਿਚ ਨਹੀਂ ਹੈ।",
+ "translate-mgs-nothing": "ਮੰਗੇ ਗਏ ਅੰਕੜਿਆਂ ਲਈ ਵਿਖਾਉਣ ਨੂੰ ਕੁਝ ਨਹੀਂ ਹੈ।",
+ "supportedlanguages-recenttranslations": "ਹਾਲੀਆ ਤਰਜਮੇ",
+ "supportedlanguages-count": "ਕੁੱਲ $1 {{PLURAL:$1|ਭਾਸ਼ਾ|ਭਾਸ਼ਾਵਾਂ}}।",
+ "translate-jssti-add": "ਸੂਚੀ ਵਿਚ ਜੋੜੋ",
+ "managemessagegroups": "ਸੁਨੇਹਿਆਂ ਦੀ ਟੋਲੀ ਦਾ ਪ੍ਰਬੰਧ",
+ "translate-smg-right": "ਆਉਂਦੀਆਂ ਤਬਦੀਲੀਆਂ",
+ "translate-manage-import-new": "$1 ਨਵਾਂ ਸੁਨੇਹਾ",
+ "translate-manage-import-deleted": "$1 ਮਿਟਾਇਆ ਗਿਆ ਸੁਨੇਹਾ",
+ "translate-manage-action-import": "ਮੰਗਾਓ",
+ "translate-manage-action-ignore": "ਅਣਡਿੱਠਾ ਕਰੋ",
+ "translate-manage-import-done": "ਸਭ ਮੁਕੰਮਲ!",
+ "importtranslations": "ਤਰਜਮੇ ਮੰਗਾਓ",
+ "translate-import-from-local": "ਸਥਾਨਕ ਫ਼ਾਈਲ ਅੱਪਲੋਡ:",
+ "translate-import-load": "ਫ਼ਾਈਲ ਲੋਡ ਕਰੋ",
+ "translate-import-err-ul-failed": "ਫ਼ਾਈਲ ਅੱਪਲੋਡ ਨਹੀਂ ਹੋ ਸਕੀ",
+ "translate-js-support-unsaved-warning": "ਤੁਹਾਡੇ ਕੋਲ ਅਣ-ਸਾਂਭੇ ਤਰਜਮੇ ਹਨ।",
+ "translate-gs-pos": "ਸਥਿਤੀ",
+ "translate-gs-code": "ਕੋਡ",
+ "translate-gs-continent": "ਮਹਾਂਦੀਪ",
+ "translate-gs-speakers": "ਸਪੀਕਰ",
+ "translate-gs-score": "ਸਕੋਰ",
+ "translate-gs-multiple": "ਕਈ",
+ "translate-gs-count": "ਗਿਣਤੀ",
+ "translate-gs-total": "ਕੁੱਲ",
+ "translate-gs-avgscore": "ਔਸਤ ਸਕੋਰ",
+ "translate-documentation-language": "ਸੁਨੇਹਾ ਦਸਤਾਵੇਜ਼",
+ "translate-searchprofile": "ਤਰਜਮੇ",
+ "log-name-translationreview": "ਤਰਜਮਾਈ ਪਰਖਾਂ ਦਾ ਇੰਦਰਾਜ",
+ "log-description-translationreview": "ਸਾਰੇ ਅਨੁਵਾਦਾਂ ਅਤੇ ਸੁਨੇਹਾ ਸਮੂਹਾਂ ਦੀਆਂ ਪਰਖਾਂ ਦਾ ਇੰਦਰਾਜ",
+ "logentry-translationreview-message": "$1 ਨੇ ਅਨੁਵਾਦ $3 {{GENDER:$2|ਪਰਖਿਆ}}",
+ "translate-workflowstatus": "ਦਰਜਾ: $1",
+ "translate-workflow-set-doing": "ਸੈੱਟ ਹੋ ਰਿਹਾ ਹੈ...",
+ "translate-stats-workflow": "ਦਰਜਾ",
+ "translate-msggroupselector-search-all": "ਸਭ",
+ "translate-msggroupselector-search-recent": "ਹਾਲੀਆ",
+ "tux-tab-all": "ਸਭ",
+ "tux-tab-untranslated": "ਤਰਜਮੇ ਤੋਂ ਸੱਖਣੇ",
+ "tux-tab-outdated": "ਪੁਰਾਣੇ",
+ "tux-tab-translated": "ਤਰਜਮਾ ਮੁਕੰਮਲ",
+ "tux-tab-unproofread": "ਅਣ-ਪਰਖੇ",
+ "tux-edit": "ਸੋਧ",
+ "tux-status-optional": "ਚੋਣਵਾਂ",
+ "tux-status-fuzzy": "ਪੁਰਾਣੇ",
+ "tux-status-proofread": "ਪਰਖਿਆ ਹੋਇਆ",
+ "tux-status-translated": "ਤਰਜਮਾ ਮੁਕੰਮਲ",
+ "tux-status-saving": "ਸਾਂਭਿਆ ਜਾ ਰਿਹਾ ਹੈ...",
+ "tux-status-unsaved": "ਅਣ-ਸਾਂਭਿਆ",
+ "tux-editor-paste-original-button-label": "ਸਰੋਤ ਲਿਖਤ ਚਿਪਕਾਓ",
+ "tux-editor-discard-changes-button-label": "ਤਬਦੀਲੀਆਂ ਰੱਦ ਕਰੋ",
+ "tux-editor-save-button-label": "ਤਰਜਮਾ ਸਾਂਭੋ",
+ "tux-editor-skip-button-label": "ਛੱਡ ਕੇ ਅੱਗੇ ਜਾਉ",
+ "tux-editor-cancel-button-label": "ਰੱਦ ਕਰੋ",
+ "tux-editor-confirm-button-label": "ਤਰਜਮਾ ਤਸਦੀਕ ਕਰੋ",
+ "tux-editor-edit-desc": "ਦਸਤਾਵੇਜ਼ ਸੋਧੋ",
+ "tux-editor-add-desc": "ਦਸਤਾਵੇਜ਼ ਜੋੜੋ",
+ "tux-editor-suggestions-title": "ਸਲਾਹਾਂ",
+ "tux-editor-in-other-languages": "ਹੋਰ ਭਾਸ਼ਾਵਾਂ ਵਿਚ",
+ "tux-editor-need-more-help": "ਹੋਰ ਮਦਦ ਚਾਹੀਦੀ ਹੈ?",
+ "tux-editor-ask-help": "ਹੋਰ ਜਾਣਕਾਰੀ ਮੰਗੋ",
+ "tux-editor-tm-match": "$1% ਮੇਲ",
+ "tux-notices-more": "{{PLURAL:$1|$1 ਹੋਰ}}",
+ "tux-notices-hide": "ਲੁਕਾਓ",
+ "tux-editor-save-failed": "ਅਨੁਵਾਦ ਦੀ ਸਾਂਭ ਫੇਲ੍ਹ ਹੋਈ: $1",
+ "tux-editor-n-uses": "$1 ਵਾਰ {{PLURAL:$1|ਵਰਤਿਆ ਗਿਆ|ਵਰਤੇ ਗਏ}}",
+ "tux-editor-message-desc-more": "ਹੋਰ ਵੇਖੋ",
+ "tux-editor-message-desc-less": "ਘੱਟ ਵੇਖੋ",
+ "tux-editor-clear-translated": "ਅਨੁਵਾਦੇ ਹੋਏ ਲੁਕਾਓ",
+ "tux-editor-proofreading-mode": "ਪਰਖ",
+ "tux-editor-translate-mode": "ਸੂਚੀ",
+ "tux-editor-proofreading-hide-own-translations": "ਆਪਣੇ ਤਰਜਮੇ ਲੁਕਾਉ",
+ "tux-editor-proofreading-show-own-translations": "ਆਪਣੇ ਤਰਜਮੇ ਵੇਖੋ",
+ "tux-proofread-action-tooltip": "ਪਰਖਿਆ ਹੋਇਆ ਵਜੋਂ ਨੱਥੀ ਕਰੋ",
+ "tux-proofread-edit-label": "ਸੋਧ",
+ "tux-editor-page-mode": "ਸਫ਼ਾ",
+ "tux-editor-outdated-notice": "ਇਸ ਤਰਜਮੇ ਨੂੰ ਸ਼ਾਇਦ ਨਵਾਂ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।",
+ "tux-editor-outdated-notice-diff-link": "ਫ਼ਰਕ ਵਿਖਾਓ",
+ "tux-editor-doc-editor-placeholder": "ਸੁਨੇਹਾ ਦਸਤਾਵੇਜ਼",
+ "tux-editor-doc-editor-save": "ਦਸਤਾਵੇਜ਼ ਸਾਂਭੋ",
+ "tux-editor-doc-editor-cancel": "ਰੱਦ ਕਰੋ",
+ "tux-messagetable-more-messages": "$1 ਹੋਰ {{PLURAL:$1|ਸੁਨੇਹਾ|ਸੁਨੇਹੇ}}",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|ਸੁਨੇਹਾ ਲੋਡ ਹੋ ਰਿਹਾ ਹੈ|ਸੁਨੇਹੇ ਲੋਡ ਹੋ ਰਹੇ ਹਨ}}...",
+ "tux-message-filter-advanced-button": "ਤਕਨੀਕੀ ਖੋਜ",
+ "tux-message-filter-optional-messages-label": "ਚੋਣਵੇਂ ਸੁਨੇਹੇ",
+ "tux-proofread-translated-by-self": "ਮੇਰੇ ਵੱਲੋਂ ਤਰਜਮੇ",
+ "tux-empty-list-all": "ਸੁਨੇਹਿਆਂ ਦੀ ਇਹ ਟੋਲੀ ਖ਼ਾਲੀ ਹੈ",
+ "tux-empty-list-all-guide": "ਤਰਜਮਾ ਕਰਨ ਵਾਸਤੇ ਕੋਈ ਹੋਰ ਸੁਨੇਹਾ-ਟੋਲੀ ਚੁਣੋ",
+ "tux-empty-list-translated": "ਕੋਈ ਤਰਜਮਾ ਕੀਤਾ ਸੁਨੇਹਾ ਨਹੀਂ",
+ "tux-empty-list-translated-guide": "ਤੁਸੀਂ ਅਨੁਵਾਦ ਵਿਚ ਮਦਦ ਕਰ ਸਕਦੇ ਹੋ",
+ "tux-empty-list-translated-action": "ਤਰਜਮਾ ਕਰੋ",
+ "tux-empty-no-messages-to-display": "ਵਿਖਾਉਣ ਲਈ ਕੋਈ ਸੁਨੇਹਾ ਨਹੀਂ।",
+ "tux-empty-there-are-optional": "ਕੁਝ ਚੋਣਵੇਂ ਸੁਨੇਹੇ ਹਨ ਜੋ ਇਸ ਸੂਚੀ ਵਿਚ ਨਹੀਂ ਵਿਖਾਏ ਗਏ",
+ "tux-empty-show-optional-messages": "ਚੋਣਵੇਂ ਸੁਨੇਹੇ ਵਿਖਾਓ",
+ "tux-empty-no-outdated-messages": "ਕੋਈ ਪੁਰਾਣਾ ਸੁਨੇਹਾ ਨਹੀਂ",
+ "tux-empty-nothing-to-proofread": "ਪਰਖਣ ਨੂੰ ਕੁਝ ਨਹੀਂ",
+ "tux-empty-you-can-help-providing": "ਤੁਸੀਂ ਨਵੇਂ ਅਨੁਵਾਦ ਦੇਣ ਵਿਚ ਮਦਦ ਕਰ ਸਕਦੇ ਹੋ",
+ "tux-empty-nothing-new-to-proofread": "ਪਰਖਣ ਨੂੰ ਕੁਝ ਨਵਾਂ ਨਹੀਂ",
+ "tux-empty-list-other": "ਤਰਜਮਾ ਕਰਨ ਵਾਸਤੇ ਕੁਝ ਨਹੀਂ",
+ "tux-empty-list-other-action": "ਤਰਜਮੇ ਪਰਖੋ",
+ "tux-empty-list-other-link": "ਸਾਰੇ ਸੁਨੇਹੇ ਵਿਖਾਓ",
+ "tux-editor-close-tooltip": "ਬੰਦ ਕਰੋ",
+ "tux-editor-expand-tooltip": "ਫੈਲਾਓ",
+ "tux-editor-collapse-tooltip": "ਸਮੇਟੋ",
+ "tux-editor-message-tools-history": "ਅਤੀਤ",
+ "tux-editor-message-tools-translations": "ਸਾਰੇ ਤਰਜਮੇ",
+ "tux-editor-loading": "ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ...",
+ "translate-search-more-languages-info": "$1 ਹੋਰ {{PLURAL:$1|ਭਾਸ਼ਾ|ਭਾਸ਼ਾਵਾਂ}}",
+ "translate-statsbar-tooltip": "$1% ਤਰਜਮਾ ਹੋਇਆ, $2% ਪਰਖਿਆ ਗਿਆ",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% ਤਰਜਮਾ ਹੋਇਆ, $2% ਪਰਖਿਆ ਗਿਆ, $3% ਪੁਰਾਣਾ ਹੋ ਗਿਆ",
+ "translate-search-more-groups-info": "$1 ਹੋਰ {{PLURAL:$1|ਸਮੂਹ}}"
+}
diff --git a/Translate/i18n/core/pam.json b/Translate/i18n/core/pam.json
new file mode 100644
index 00000000..dec7e54a
--- /dev/null
+++ b/Translate/i18n/core/pam.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Val2397"
+ ]
+ },
+ "translate": "↓Ilikas",
+ "translate-rc-translation-filter-no": "↓Ala kang gagawan",
+ "translate-stats-users": "↓Talalikas"
+}
diff --git a/Translate/i18n/core/pap.json b/Translate/i18n/core/pap.json
new file mode 100644
index 00000000..5dd3562c
--- /dev/null
+++ b/Translate/i18n/core/pap.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "ObaTango"
+ ]
+ },
+ "translate-documentation-language": "Dokumentashon di mensahe"
+}
diff --git a/Translate/i18n/core/pcd.json b/Translate/i18n/core/pcd.json
new file mode 100644
index 00000000..c4d788b1
--- /dev/null
+++ b/Translate/i18n/core/pcd.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Geoleplubo"
+ ]
+ },
+ "translate-documentation-language": "Documintacion du messache",
+ "right-translate-sandboxaction": "Foaire des acccions pérmises por chés uzeus d' bacs à sabe",
+ "action-translate-sandboxaction": "foaire des accions pérmises pou chés uzeus poin inrégistrès"
+}
diff --git a/Translate/i18n/core/pcm.json b/Translate/i18n/core/pcm.json
new file mode 100644
index 00000000..7e9e1340
--- /dev/null
+++ b/Translate/i18n/core/pcm.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Egiebizzy",
+ "Samatics"
+ ]
+ },
+ "translate-documentation-language": "dokument for dis mesej"
+}
diff --git a/Translate/i18n/core/pdc.json b/Translate/i18n/core/pdc.json
new file mode 100644
index 00000000..f369bee2
--- /dev/null
+++ b/Translate/i18n/core/pdc.json
@@ -0,0 +1,53 @@
+{
+ "@metadata": {
+ "authors": [
+ "Purodha",
+ "Xqt"
+ ]
+ },
+ "translate": "Iwwersetze",
+ "translate-page-settings-legend": "Uffstellinge",
+ "translate-page-group": "Druppe",
+ "translate-page-language": "Schprohch",
+ "translate-page-limit": "Limit",
+ "translate-page-navigation-legend": "Faahre-Gnepp",
+ "translate-next": "neegschtes Blatt",
+ "translate-prev": "letscht Blatt",
+ "translate-page-edit": "ennere",
+ "translate-edit-title": "„$1“ ennere",
+ "translationstats": "Nummere vun Iwwersetzinge",
+ "translate-stats-edits": "Enneringe",
+ "translate-stats-users": "Iwwersetzer",
+ "translate-statsf-scale-months": "Munete",
+ "translate-statsf-scale-weeks": "Woche",
+ "translate-statsf-scale-days": "Daag",
+ "translate-statsf-scale-hours": "Schtund",
+ "translate-statsf-count-registrations": "Neie Yuuser",
+ "translate-statsf-submit": "Aagucke",
+ "translate-sidebar-alltrans": "In annere Schprooche",
+ "translations": "Alle Iwwersetzinge",
+ "translate-translations-none": "Keene Iwwersetzingen fer „$1“ vorhande",
+ "translate-translations-messagename": "Naame:",
+ "translate-translations-project": "Projekt:",
+ "translate-translations-history-short": "G",
+ "languagestats": "Nummere vun Schprooche",
+ "languagestats-stats-for": "Nummere vun Iwwersetzinge fer $1 ($2)",
+ "languagestats-recenttranslations": "Letscht Iwwersetzinge",
+ "translate-langstats-expand": "uffklappe",
+ "translate-langstats-collapse": "zuklappe",
+ "translate-langstats-expandall": "alle uffklappe",
+ "translate-langstats-collapseall": "alle zuklappe",
+ "translate-language-code": "Schprooche-Code",
+ "translate-language-code-field-name": "Schprooche-Code:",
+ "translate-language": "Schprooch",
+ "translate-total": "Meldinge vum System",
+ "translate-untranslated": "Net iwwersetzt",
+ "translate-ls-submit": "Nummere zeige",
+ "translate-mgs-column-language": "Schprooch",
+ "supportedlanguages-translators": "{{PLURAL:$2|Iwwersetzer|Iwwersetzer}}: $1",
+ "supportedlanguages-recenttranslations": "Letscht Iwwersetzinge",
+ "translate-jssti-add": "Zu de Lischt dezu duh",
+ "translate-manage-import-done": "Alles geduh!",
+ "translate-import-load": "Feil ufflaade",
+ "translate-gs-speakers": "Schwetzer"
+}
diff --git a/Translate/i18n/core/pfl.json b/Translate/i18n/core/pfl.json
new file mode 100644
index 00000000..fb750ba1
--- /dev/null
+++ b/Translate/i18n/core/pfl.json
@@ -0,0 +1,210 @@
+{
+ "@metadata": {
+ "authors": [
+ "Manuae",
+ "Purodha",
+ "Xqt"
+ ]
+ },
+ "translate": "Iwasedze",
+ "translate-desc": "[[Special:Translate|Schbezialsaid]] fas iwasedze vun MediaWiki un waidares",
+ "translate-taskui-export-to-file": "Gebs im aischene Foamad aus",
+ "translate-taskui-export-as-po": "Fa ä Offline-Iwasedzung ausgewe",
+ "translate-taction-translate": "Iwasedze",
+ "translate-taction-proofread": "Iwabriefe",
+ "translate-taction-lstats": "Schdadischdig fa die Schbrooch",
+ "translate-taction-mstats": "Schdadischdigge fa die Nochrischdegrubb",
+ "translate-taction-export": "Ausgewe",
+ "translate-taction-disabled": "Des do hods ned uffm Wiki.",
+ "translate-page-no-such-language": "Die oagewene Schbrooch isch ugildisch.",
+ "translate-page-no-such-group": "Die oagewene Grubb isch ugildisch.",
+ "translate-page-disabled": "Iwasedzunge in die Schbrooch ged ned fa die Grubb.\nWesche:\n\n<em>$1</em>",
+ "translate-page-settings-legend": "Oischdellunge",
+ "translate-page-group": "Grubb",
+ "translate-page-language": "Schbrooch",
+ "translate-page-limit": "Grenz",
+ "translate-page-limit-option": "{{PLURAL:$1|Ä Nochrischd|$1 Nochrischde}} bro Said",
+ "translate-submit": "Hole",
+ "translate-page-navigation-legend": "Nawigazion",
+ "translate-page-showing": "Zaisch Nochrischde $1 bis $2 vun zsomme $3",
+ "translate-page-showing-all": "Zaischd {{PLURAL:$1|Ä Nochrischd|$1 Nochrischde}}",
+ "translate-page-showing-none": "S'hod kä Nochrischde.",
+ "translate-next": "negschd Said",
+ "translate-prev": "vorisch Said",
+ "translate-page-description-legend": "Auskinfd iwa die Grubb",
+ "translate-page-description-hasoptional": "Die Nochrischdegrubb hod obzionali Nochrischde.\nObzionali Nochrischde deedn awa bessa bloß iwasedz werre, wonns inde Schbrooch dodvoa ä Bedirfnis hot\nwie kä Leazaische zu bnudze oda Aischenoame zu umschraiwe. $1",
+ "translate-page-description-hasoptional-open": "Obzionali Nochrischde zaische",
+ "translate-page-edit": "bearwaide",
+ "translate-optional": "(uff Wunsch)",
+ "translate-ignored": "(ignoriead)",
+ "translate-edit-title": "„$1“ bearwaide",
+ "translate-edit-definition": "Uaschbringlischi Nochrischd",
+ "translate-edit-contribute": "midschaffe",
+ "translate-edit-no-information": "''Fa die Nochrischd hods kä Unalaache.''\n''Wonn driwwa was wisse duschd, konschd de onare baide Erwed helfe, wonnen saache duschd, worums do gehd.''",
+ "translate-edit-information": "Auskinfd iwa die Nochrischd ($1)",
+ "translate-edit-warnings": "Waanung iwa mongelhafde Iwasedzunge",
+ "translate-edit-tmmatch-source": "Qwelltegsch vunde Iwasedzung: $1",
+ "translate-edit-tmmatch": "$1 % Iwaoischdimmung",
+ "translate-edit-nopermission": "Fas Iwasedze vun Nochrischde braugschd s'Räschd.",
+ "translate-edit-askpermission": "Nochde Bwillischung frooche",
+ "translate-checks-parameters": "Die folschndi {{PLURAL:$2|Kenngreeß wead|Kenngreeß werren}} ned bnudzd:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "Die folschndi {{PLURAL:$2|Kenngreeß isch|Kenngreeß sin}} ubkond:\n<strong>$1</strong>",
+ "translate-checks-balance": "Do hodse uglaischi Oazahl vun {{PLURAL:$2|Klommare|Klommare}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|De Ling'g isch|Die $2 Ling'gs sin}} broblemadisch:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|De Ling'g fehld|Die $2 Ling'gs fehln}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Die Feschleschung bnudzd <nowiki>{{PLURAL:}}</nowiki>, awa die Iwasedzung ned.",
+ "translate-checks-pagename": "De Noamensraum waischd vunde Feschleschung ab.",
+ "translate-checks-format": "Die Iwasedzung folschd nedde Feschdleschung oda hodn ugildischi Sadzbau: $1",
+ "translate-checks-escape": "Die folschnde Escape-Zaische kenndn zufellisch soi: <strong>$1</strong>",
+ "translate-checks-parametersnotequal": "Die Oazahl vunde Parameter isch {{PLURAL:$1|$1}}; solld awa {{PLURAL:$2|$2}} soi.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> isch ugildisch.",
+ "translate-checks-fudforum-syntax": "In dem Brojegd bnudz <nowiki>$1</nowiki> schdad <nowiki>$2</nowiki>.",
+ "translate-pref-editassistlang": "Hilfschbrooch:",
+ "prefs-translate": "Meschlischkaide fas Iwasedze",
+ "translate-pref-editassistlang-help": "Komma gdrendi Lischd vun Schbroochcodes.\nIwasedzunge vun Nochrischde in die Schbrooche werren baim Iwasedze gzaischd.\nDie Schdandadlischd vunde Schbrooche b'ruhd uff doina Schbrooch.",
+ "translate-pref-editassistlang-bad": "S'hodn ugildischi Schbroochcode inde Lisch:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Schaffe mitde Hilf vunde Iwasedzungsowaflesch",
+ "right-translate-manage": "Nochrischdegrubbe vawalde",
+ "action-translate-manage": "Nochrischdegrubbe zu vawalde",
+ "right-translate-import": "Offline-Iwasedzunge roihole",
+ "action-translate-import": "Hol Offline-Iwasedzunge roi",
+ "right-translate-messagereview": "Iwasedzunge iwabriefe",
+ "right-translate-groupreview": "Änade Schaffnsfluss vunde Nochrischdegrubbe",
+ "translate-rc-translation-filter": "Iwasedzunge fildare:",
+ "translate-rc-translation-filter-no": "Nix mache",
+ "translate-rc-translation-filter-only": "Zaisch bloß Iwasedzunge",
+ "translate-rc-translation-filter-filter": "Iwasedzunge fildare",
+ "translate-rc-translation-filter-site": "Änad bloß Nochrischde vum Wiki",
+ "translationstats": "Schdadischdig fas Iwasedze",
+ "translate-stats-edits": "Bearwaidunge",
+ "translate-stats-users": "Iwasedza",
+ "translate-stats-registrations": "Oameldunge",
+ "translate-stats-reviews": "Guudachde",
+ "translate-stats-reviewers": "Guudachda",
+ "translate-statsf-intro": "Konschd do efachi Schdadischdige mache.\nAlli Wead hawenen unare un ower Rohmewead.",
+ "translate-statsf-options": "Grafig-Zusedz",
+ "translate-statsf-width": "Braid in Pixls:",
+ "translate-statsf-height": "Heeh in Pixls:",
+ "translate-statsf-days": "Zaidschboann in Daach:",
+ "translate-statsf-start": "Schdaddadum:",
+ "translate-statsf-scale": "Foinhaid:",
+ "translate-statsf-scale-months": "Monade",
+ "translate-statsf-scale-weeks": "Woche",
+ "translate-statsf-scale-days": "Daache",
+ "translate-statsf-scale-hours": "Schdunde",
+ "translate-statsf-count": "Maßgreeß:",
+ "translate-statsf-count-edits": "Oazahl vunde B'awaidunge",
+ "translate-statsf-count-users": "Emsischi Iwasedza",
+ "translate-statsf-count-registrations": "Naije Benudza",
+ "translate-statsf-count-reviews": "Iwasedzungs-Guudachde",
+ "translate-statsf-count-reviewers": "Guudachda",
+ "translate-statsf-language": "Komma gdrenndi Lischd vun Schboochcode:",
+ "translate-statsf-group": "Komma gdrenndi Lischd vun Grubbecode:",
+ "translate-statsf-submit": "Voaschau",
+ "translate-tag-page-desc": "Iwasedzung vunde Wikisaid [[$2|$1]].",
+ "translate-sidebar-alltrans": "In oanare Schbrooche",
+ "translations": "All Iwasedzunge",
+ "translations-summary": "Gebn Nochrischdenoame oi, um alli vafieschbari Iwasedzunge zu zaische.",
+ "translate-translations-no-message": "„$1“ ischkä iwasedzbari Nochrischd",
+ "translate-translations-none": "S'hodkä Iwasedzung fa \"$1\"",
+ "translate-translations-count": "{{PLURAL:$1|Ä Iwasedzung|$1 Iwasedzunge}} gfunne.",
+ "translate-translations-fieldset-title": "Nochrischd",
+ "translate-translations-messagename": "Noame",
+ "translate-translations-project": "Brojegd:",
+ "translate-translations-including-no-param": "Gebn gildischi Nochrischdenoame als Kenngreeß fadie Unasaid oa",
+ "translate-translations-history-short": "G",
+ "languagestats": "Schdadischdig fa die Schbrooch",
+ "languagestats-summary": "Die Said zaischdä Schdadischdig fa Iwasedzunge vun alle Nochrischdegrubbe fa die Schbrooch.",
+ "languagestats-stats-for": "Schdadischdige fa Iwasedzunge vun $1 ($2).",
+ "languagestats-recenttranslations": "Jingschdi Iwasedzunge",
+ "translate-langstats-incomplete": "Schdadischdige uffde Said sin ned kombledd. Ladse naij ruff, domida alli krische dudsch.",
+ "translate-langstats-expand": "uffglabbe",
+ "translate-langstats-collapse": "zuglabbe",
+ "translate-langstats-expandall": "alli uffglabbe",
+ "translate-langstats-collapseall": "alli zuglabbe",
+ "translate-language-code": "Schbroochcode",
+ "translate-language-code-field-name": "Schbroochcode:",
+ "translate-suppress-complete": "Unadrigg schun iwasedzdi Nochrischdegrubbe goans",
+ "translate-ls-noempty": "Unadrigg ned iwasedzdi Nochrischdegrubbe goans",
+ "translate-language": "Schbrooch",
+ "translate-total": "Nochrischde",
+ "translate-untranslated": "Ned iwasedzd",
+ "translate-percentage-complete": "Kombledd",
+ "translate-percentage-fuzzy": "Abgloffe",
+ "translate-languagestats-overall": "Alli Nochrischdegrubbe zsomme",
+ "translate-ls-submit": "Schdadischdige zaische",
+ "translate-ls-column-group": "Nochrischdegrubb",
+ "translate-mgs-pagename": "Schdadischdigge fa die Nochrischdegrubb",
+ "translate-mgs-fieldset": "Zaisch die Oischdellunge",
+ "translate-mgs-group": "Nochrischdegrubb:",
+ "translate-mgs-nocomplete": "Zaisch kä Schbrooch, wu ä Iwasedzung hawen.",
+ "translate-mgs-noempty": "Zaisch kä Schbrooch, wu kä Iwasedzung hawen.",
+ "translate-mgs-submit": "Schdadischdige zaische",
+ "translate-mgs-column-language": "Schbrooch",
+ "translate-mgs-totals": "Alle Schbrooche uff ämol",
+ "translate-mgs-invalid-group": "Die oangewene Grubb $1 hods ned.",
+ "translate-mgs-nothing": "Die oagfoadade Schdadischdige hawen kä Daade.",
+ "supportedlanguages": "Unaschdidzde Schbrooche",
+ "supportedlanguages-summary": "Die Said zaischd ä Lischd vun alli uff {{SITENAME}} unaschdidzdi Schbrooche, zsomme midde Noamne vunde Iwasedza, wu in de Schbrooch gschaffe duen.\nWonnen Iwasedza viel schaffe dud, wead soin Noame greeßa.\nDie Faab unam Noame zaischd oa wonna zledschd do midgschaffd kabd hod.",
+ "supportedlanguages-colorlegend": "Hiwais zude Faawe: Leschdi Iwasedzung lischd $1 Daach zrigg.",
+ "supportedlanguages-translators": "{{PLURAL:$2|Iwasedza|Iwasedza}}: $1",
+ "supportedlanguages-recenttranslations": "Jingschdi Iwasedzunge",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|Schbrooch|Schbrooche}} gsommd.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|B'awaidung|B'awaidunge}} - leschdi voa $3 {{PLURAL:$3|Daach|Daach}}",
+ "translate-jssti-add": "Zude Lisch dzufiesche",
+ "managemessagegroups": "Vawaldung vunde Nochrischdegrubbe",
+ "translate-smg-notallowed": "Du deafschddo des ned mache.",
+ "translate-smg-nochanges": "S'hod kä Änarunge zum dro schaffe.",
+ "translate-smg-submit": "Änarunge zum Va'awaide iwadraache",
+ "translate-smg-submitted": "Feschdleschung vun Nochrischde isch eanaijad worre. Änarunge werren im Hinagrund va'awaided.",
+ "translate-manage-import-diff": "Nochrischd $1 | Agzione: $2",
+ "translate-manage-import-new": "Naije Nochrischd $1",
+ "translate-manage-import-deleted": "Gleschdi Nochrischd $1",
+ "translate-manage-action-import": "Impordiere",
+ "translate-manage-action-conflict": "Impordiere un makiere",
+ "translate-manage-action-ignore": "Ignoriere",
+ "translate-manage-action-fuzzy": "Iwasedzunge roihole un schraibse als \"fuzzy\" oa.",
+ "translate-manage-nochanges": "Fa die Grubb hods kä Änarunge inde Feschdleschung vunde Nochrischde",
+ "translate-manage-nochanges-other": "S'hod kä Änarunge fa die Schbrooch.\nBnudz de Vawais une, um zrigg in die Iwasischd vunde Grubbededais zu kumme.",
+ "translate-manage-inconsistent": "Do hods Uschdimischkaide inde Oafroch.\nIwabrief mol doi Änarunge un vasuchs nomol.\nHiwais: $1",
+ "translate-manage-toolong": "Die maximale Va'awaidungszaid vun $1 {{PLURAL:$1|Sekund|Sekunde}} isch abgloffe.\nSchiggs Foamula nomol ab, ums foadsedze zu kenne.",
+ "translate-manage-import-summary": "Naiji Ausgab vunea Qwell nufflaade",
+ "translate-manage-conflict-summary": "Naiji Ausgab isch vunea Qwell nuffglaade worr.\nIwabriefs bidde.",
+ "translate-manage-import-done": "Alles erledischd!",
+ "importtranslations": "Iwasedzunge roihole",
+ "translate-import-from-local": "Dadai do nufflaade:",
+ "translate-import-load": "Dadai lade",
+ "translate-import-err-dl-failed": "Dadai konned kohld were:\n$1",
+ "translate-import-err-ul-failed": "S'roihole vunde Dadai hod ned g'klabbd",
+ "translate-import-err-invalid-title": "De oagewene Dadainoame <nowiki>$1</nowiki> isch ugildisch gwesd.",
+ "translate-import-err-no-such-file": "Die Dadai <nowiki>$1</nowiki> hods ned oda isch do ned ruffglaade worre.",
+ "translate-import-err-stale-group": "Die Nochrischdegrubb vonde Dadai hods ned.",
+ "translate-import-err-no-headers": "Die Dadai isch ned im Gettext-Foamad vunde Eawaidarung \"Iwasedze\":\nDie Grubb un Schbrooch hodned ausm Dadaikopp bschdimmd werre kenne.",
+ "translate-js-support-unsaved-warning": "Du hoschd ugsichade Iwasedzunge.",
+ "translate-gs-pos": "Pos.",
+ "translate-gs-code": "Code",
+ "translate-gs-continent": "Kondinend",
+ "translate-gs-speakers": "Schbrecha",
+ "translate-gs-score": "Eagewnis",
+ "translate-gs-multiple": "Mehrare",
+ "translate-gs-count": "Oazahl",
+ "translate-gs-total": "Gsoamd",
+ "translate-gs-avgscore": "G'middldes Eagewnis",
+ "translate-documentation-language": "Nochrischde-Unnalaache",
+ "translate-searchprofile": "Iwasedzunge",
+ "translate-searchprofile-tooltip": "In alle Iwasedzunge suche",
+ "translate-search-languagefilter": "Noch Schbrooche fildare:",
+ "translate-search-nofilter": "Alli Schbrooche",
+ "log-name-translationreview": "Iwasedzungs-Iwabligg-Logbuch",
+ "log-description-translationreview": "Logbuch fa alli Iwabriefunge vun Iwasedzunge und Nochrischdegrubbe.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|hod}} die Iwasedzung $3 iwabrifd",
+ "translate-workflow-state-": "(ned gsedzd)",
+ "translate-workflowstatus": "Zuschdond: $1",
+ "translate-workflow-set-doing": "Werd oigschdelld...",
+ "translate-workflow-autocreated-summary": "Selbschdendischi Easchaffung vunde Said fa Awaidsschridd-Zuschdond $1",
+ "translate-stats-workflow": "Zuschdond",
+ "translate-workflowgroup-label": "Awaidsschridd-Zuschdond",
+ "translate-workflowgroup-desc": "Die Nochrischdegrubb zaischde Zuschdoand zum Schaffnsflus baide Iwasedzunge.\nDe Zuschdoand wead iwa die Oischdellunge <code lang=\"en\">$wgTranslateWorkflowStates</code> oagbassd.",
+ "translate-dynagroup-recent-label": "Jingschdi Iwasedzunge",
+ "translate-dynagroup-recent-desc": "Die Nochrischdegrubb zaischd alli geschewerdische Iwasedzunge inde Sbrooch oa.\nOam Beschde ischse fa Uffgawe vum Gescheleese."
+}
diff --git a/Translate/i18n/core/pl.json b/Translate/i18n/core/pl.json
new file mode 100644
index 00000000..32aa838a
--- /dev/null
+++ b/Translate/i18n/core/pl.json
@@ -0,0 +1,430 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ankry",
+ "Beau",
+ "BeginaFelicysym",
+ "Chrumps",
+ "CiaPan",
+ "Derbeth",
+ "Dodek",
+ "Jwitos",
+ "Kareyac",
+ "Leinad",
+ "Maikking",
+ "Marcin Łukasz Kiejzik",
+ "Matma Rex",
+ "McMonster",
+ "Mikołka",
+ "Odie2",
+ "Olgak85",
+ "Qblik",
+ "Rail",
+ "Railfail536",
+ "Rezonansowy",
+ "Saper",
+ "Sp5uhe",
+ "The Polish",
+ "ToSter",
+ "Tsca",
+ "Ty221",
+ "WTM",
+ "Woytecr",
+ "Wpedzich",
+ "Žekřil71pl"
+ ]
+ },
+ "translate": "Przetłumacz",
+ "translate-extensionname": "Przetłumacz",
+ "translate-desc": "[[Special:Translate|Strona specjalna]] umożliwiająca tłumaczenie MediaWiki oraz innych programów",
+ "translate-fuzzybot-desc": "To jest specjalne konto systemowe używane przez rozszerzenie MediaWiki [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate Translate] służące do utrzymywania tłumaczeń.\nTo konto jest częścią oprogramowania MediaWiki - nie jest prowadzone przez żadnego użytkownika.",
+ "translate-taskui-export-to-file": "Eksportuj w formacie macierzystym",
+ "translate-taskui-export-as-po": "Eksportuj do tłumaczenia off-line",
+ "translate-taskui-export-as-csv": "Eksportuj w formacie CSV",
+ "translate-taction-translate": "Przetłumacz",
+ "translate-taction-proofread": "Przejrzano",
+ "translate-taction-lstats": "Statystyka języka",
+ "translate-taction-mstats": "Statystyki grupy komunikatów",
+ "translate-taction-export": "Eksport",
+ "translate-taction-disabled": "Ta akcja jest zablokowana w tej wiki.",
+ "translate-page-no-such-language": "Podano nieprawidłowy język.",
+ "translate-page-no-such-group": "Podano nieprawidłową grupę.",
+ "translate-page-disabled": "Tłumaczenia na ten język, w tej grupie, zostały wstrzymane z następującego powodu:\n\n<em>$1</em>",
+ "translate-language-disabled": "Tłumaczenie na ten język jest zablokowane.",
+ "translate-page-settings-legend": "Ustawienia",
+ "translate-page-group": "Grupa",
+ "translate-page-language": "Język",
+ "translate-page-limit": "Ograniczenie",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|komunikat|komunikaty|komunikatów}} na stronę",
+ "translate-submit": "Wyświetl",
+ "translate-page-navigation-legend": "Nawigacja",
+ "translate-page-showing": "Wyświetlone komunikaty od $1 do $2 z $3.",
+ "translate-page-showing-all": "Wyświetlono $1 {{PLURAL:$1|komunikat|komunikaty|komunikatów}}.",
+ "translate-page-showing-none": "Brak komunikatów do wyświetlenia.",
+ "translate-next": "Następna strona",
+ "translate-prev": "Poprzednia strona",
+ "translate-page-description-legend": "Informacje na temat grupy",
+ "translate-page-description-hasoptional": "Ta grupa zawiera również opcjonalne komunikaty.\nPowinny one być tłumaczone tylko wtedy, gdy język docelowy wymaga pisania bez odstępów między wyrazami lub transliteracji nazw własnych. $1",
+ "translate-page-description-hasoptional-open": "Pokaż komunikaty opcjonalne.",
+ "translate-page-edit": "edytuj",
+ "translate-optional": "(dodatkowe)",
+ "translate-ignored": "(zignorowane)",
+ "translate-edit-title": "Edycja „$1“",
+ "translate-edit-definition": "Tekst źródłowy komunikatu",
+ "translate-edit-contribute": "zmień",
+ "translate-edit-no-information": "<em>Ten komunikat nie posiada dokumentacji.\nJeśli wiesz gdzie lub jak ten komunikat jest używany, możesz pomóc innym tłumaczom przez dodanie dokumentacji do tego komunikatu.</em>",
+ "translate-edit-information": "Objaśnienie komunikatu ($1)",
+ "translate-edit-warnings": "Ostrzeżenia o niedokończonych tłumaczeniach",
+ "translate-edit-tmmatch-source": "Tekst źródłowy tłumaczenia: $1",
+ "translate-edit-tmmatch": "pasuje $1%",
+ "translate-edit-nopermission": "Nie masz uprawnień tłumacza do tłumaczenia komunikatów.",
+ "translate-edit-askpermission": "Uzyskaj uprawnienie",
+ "exporttranslations": "Eksport tłumaczeń",
+ "translate-export-form-format": "Format",
+ "translate-export-invalid-format": "Proszę podać poprawny format.",
+ "translate-export-not-supported": "Eksport tłumaczeń nie jest obsługiwany.",
+ "translate-export-format-notsupported": "Określony format eksportu nie jest obsługiwany przez tę grupę komunikatów.",
+ "translate-export-group-too-large": "Wybrana grupa komunikatów jest za duża. Wybierz grupę, która ma mniej niż $1 {{PLURAL:$1|komunikat|komunikaty|komunikatów}} lub skontaktuj się z administratorem tłumaczeń.",
+ "translate-checks-parameters": "{{PLURAL:$2|Następujący parametr nie jest wykorzystywany|Następujące parametry nie są wykorzystywane}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Następujący parametr nie jest zdefiniowany|Następujące parametry nie są zdefiniowane}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "W wyrażeniu napotkano {{PLURAL:$2|niedomknięty nawias|nieparzystą liczbę nawiasów}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Następujący link jest problematyczny|Następujące $2 linki są problematyczne|Następujących $2 linków jest problematycznych}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "Brakuje {{PLURAL:$2|linku|następujących linków:}}\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Tekst źródłowy wykorzystuje funkcję <nowiki>{{PLURAL:}}</nowiki>, lecz w tłumaczeniu nie została ona użyta.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> posiada {{PLURAL:$1|jedną formę|$1 formy|$1 form}} ale {{PLURAL:$2|tylko jedna forma jest obsługiwana|$2 formy są obsługiwane|$2 form jest obsługiwanych}} (z wyłączeniem form 0= i 1= ).",
+ "translate-checks-plural-dupe": "W <nowiki>{{PLURAL:}}</nowiki> podano pod koniec powtarzające się formy. <nowiki>{{PLURAL:$1|ojca|ojców|ojców}}</nowiki> powinno zapisać się jako <nowiki>{{PLURAL:$1|ojca|ojców}}</nowiki>.",
+ "translate-checks-gettext-plural-missing": "To tłumaczenie musi zawierać <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-unsupported": "Ten komunikat nie obsługuje <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-count": "<nowiki>{{PLURAL:GETTEXT|}}</nowiki> akceptuje dokładnie {{PLURAL:$1|jedną formę|$1 formy|$1 form}} liczby mnogiej. Obecnie podano {{PLURAL:$2|jedną formę|$2 formy|$2 form}}.",
+ "translate-checks-smartformat-plural-missing": "To tłumaczenie musi uwzględniać liczbę mnogą dla zmiennej $1.",
+ "translate-checks-smartformat-plural-unsupported": "Ten komunikat nie obsługuje uwzględniania liczby mnogiej dla zmiennej $1.",
+ "translate-checks-smartformat-plural-count": "Niewłaściwa liczba form liczby mnogiej w <strong>$3</strong>. Musi to być $1 {{PLURAL:$1|forma|form}} liczby mnogiej. Obecnie podano $2 {{PLURAL:$2|formę|form}} liczby mnogiej.",
+ "translate-checks-unicode-plural-missing": "To tłumaczenie musi zawierać <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-unsupported": "Ten komunikat nie obsługuje <nowiki>{{PLURAL:|}}</nowiki>.",
+ "translate-checks-unicode-plural-invalid": "Formy liczby mnogiej powinny być zdefiniowane jako $1. To tłumaczenie zawiera $2.",
+ "translate-checks-pagename": "Przestrzeń nazw różni się od tekstu źródłowego",
+ "translate-checks-format": "To tłumaczenie jest niezgodne z tekstem źródłowym lub ma nieprawidłową składnię: $1",
+ "translate-checks-escape": "{{PLURAL:$2|Poniższy znak ucieczki może być niezamierzony|Poniższe znaki ucieczki mogą być niezamierzone}}: <strong>$1</strong>. {{PLURAL:$4|Dozwolony symbol ucieczki to|Dozwolone symbole ucieczki zawierają:}} $3",
+ "translate-checks-parametersnotequal": "Liczba parametrów to {{PLURAL:$1|$1}}; {{PLURAL:$2|powinien być $2|powinno być $2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> jest niepoprawne.",
+ "translate-checks-fudforum-syntax": "Użyj w tym projekcie <nowiki>$1</nowiki> zamiast <nowiki>$2</nowiki>.",
+ "translate-checks-newline-missing-start": "Brakuje $1 {{PLURAL:$1|znak|znaków}} nowej linii na początku tłumaczenia.",
+ "translate-checks-newline-missing-end": "Brakuje $1 {{PLURAL:$1|znak|znaków}} nowej linii na końcu tłumaczenia.",
+ "translate-checks-newline-extra-start": "{{PLURAL:$1|Jest|Są}} $1 {{PLURAL:$1|nadmiarowy znak|nadmiarowe znaki}} nowej linii na początku tłumaczenia.",
+ "translate-checks-newline-extra-end": "{{PLURAL:$1|Jest|Są}} $1 {{PLURAL:$1|nadmiarowy znak|nadmiarowe znaki}} nowej linii na końcu tłumaczenia.",
+ "translate-checks-value-not-present": "Tłumaczenie musi {{PLURAL:$1|1=brzmieć|być jedna z podanych wartości:}}: $1.",
+ "translate-checks-replacement": "Użyj $2 zamiast $1.",
+ "translate-pref-editassistlang": "Języki pomocnicze:",
+ "prefs-translate": "Opcje tłumaczenia",
+ "translate-pref-editassistlang-help": "Lista kodów językowych rozdzielonych przecinkami.\nKomunikat w tych językach będzie widoczny podczas wykonywania tłumaczenia.\nDomyślna lista języków zależy od Twojego języka.",
+ "translate-pref-editassistlang-bad": "Na liście jest błędny kod języka –\n<nowiki>$1</nowiki>.",
+ "right-translate": "Edycja z użyciem interfejsu tłumaczeń",
+ "action-translate": "edytowania za pośrednictwem interfejsu tłumaczeń",
+ "right-translate-manage": "Zarządzanie grupami komunikatów",
+ "action-translate-manage": "zarządzania grupami komunikatów",
+ "right-translate-import": "Importowanie tłumaczeń wykonanych offline",
+ "action-translate-import": "importowanie tłumaczeń wykonanych offline",
+ "right-translate-messagereview": "Przeglądanie tłumaczeń",
+ "action-translate-messagereview": "przeglądanie tłumaczeń",
+ "right-translate-groupreview": "Zmiana status przepływu pracy dla grup komunikatów",
+ "action-translate-groupreview": "zmieniania statusu opracowania grup komunikatów",
+ "translate-rcfilters-translations": "Tłumaczenia",
+ "translate-rcfilters-translations-only-label": "Tłumaczenia",
+ "translate-rcfilters-translations-only-desc": "Zmiany na tłumaczonych stronach.",
+ "translate-rcfilters-translations-filter-label": "Bez tłumaczeń",
+ "translate-rcfilters-translations-filter-desc": "Wszystkie zmiany, które nie są tłumaczeniami.",
+ "translate-rcfilters-translations-site-label": "Komunikaty tej strony",
+ "translate-rcfilters-translations-site-desc": "Zmiany w komunikatach strony znajdujących się w przestrzeni nazw MediaWiki.",
+ "translate-rc-translation-filter": "Filtr tłumaczeń:",
+ "translate-rc-translation-filter-no": "nie filtruj",
+ "translate-rc-translation-filter-only": "pokaż tylko tłumaczenia",
+ "translate-rc-translation-filter-filter": "pokaż wszystkie oprócz tłumaczeń",
+ "translate-rc-translation-filter-site": "zmiany w komunikatach wyłącznie tej witryny",
+ "translationstats": "Statystyki tłumaczenia",
+ "translate-stats-edits": "Edycji dziennie",
+ "translate-stats-users": "Tłumacze",
+ "translate-stats-registrations": "Rejestracje",
+ "translate-stats-reviews": "Sprawdzenia",
+ "translate-stats-reviewers": "Sprawdzający",
+ "translate-statsf-intro": "Za pomocą tego formularza możesz wygenerować proste statystyki. Wszystkie wartości posiadają dolne i górne limity.",
+ "translate-statsf-options": "Opcje wykresu",
+ "translate-statsf-width": "Szerokość w pikselach",
+ "translate-statsf-height": "Wysokość w pikselach",
+ "translate-statsf-days": "Okres czasu w dniach:",
+ "translate-statsf-start": "Data początkowa:",
+ "translate-statsf-scale": "Podział:",
+ "translate-statsf-scale-years": "lata",
+ "translate-statsf-scale-months": "miesiące",
+ "translate-statsf-scale-weeks": "tygodnie",
+ "translate-statsf-scale-days": "dni",
+ "translate-statsf-scale-hours": "godziny",
+ "translate-statsf-count": "Pomiar:",
+ "translate-statsf-count-edits": "liczba edycji",
+ "translate-statsf-count-users": "aktywni tłumacze",
+ "translate-statsf-count-registrations": "nowi użytkownicy",
+ "translate-statsf-count-reviews": "sprawdzenia tłumaczeń",
+ "translate-statsf-count-reviewers": "sprawdzający",
+ "translate-statsf-language": "Kody języków rozdzielone przecinkami:",
+ "translate-statsf-group": "Kody grup rozdzielone przecinkami:",
+ "translate-statsf-submit": "Podgląd",
+ "translate-statsf-unknown-error": "Wystąpił nieznany błąd.",
+ "translate-statsf-error-message": "Wystąpił błąd podczas ładowania grafu: $1",
+ "translate-statsf-graph-alt-text-info": "Alternatywny tekst dla statystyk tłumaczeń znajduje się w tabeli poniżej.",
+ "translate-statsf-alt-text": "Oto alternatywa tekstowa dla statystyk tłumaczeń.",
+ "translate-statsf-embed": "Kod do osadzenia grafu statystyk tłumaczeń na innych stronach.",
+ "translate-tag-page-desc": "Tłumaczenie wiki strony [[$2|$1]] z $3 ($4).",
+ "translate-tag-page-wikipage-desc": "[[$1|Tłumaczenie]] strony wiki [[$2]] z języka <bdi>$3</bdi> ($4) na <bdi>$5</bdi> ($6)",
+ "translate-sidebar-alltrans": "W innych językach",
+ "translations": "Wszystkie tłumaczenia",
+ "translations-summary": "Wprowadź poniżej nazwę komunikatu, aby zobaczyć wszystkie dostępne tłumaczenia.",
+ "translate-translations-no-message": "Komunikatu „$1” nie można przetłumaczyć",
+ "translate-translations-none": "Nie istnieją tłumaczenia dla „$1”",
+ "translate-translations-count": "Znaleziono {{PLURAL:$1|jedno tłumaczenie|$1 tłumaczenia|$1 tłumaczeń}}",
+ "translate-translations-fieldset-title": "Komunikat",
+ "translate-translations-messagename": "Nazwa:",
+ "translate-translations-project": "Projekt:",
+ "translate-translations-including-no-param": "Podaj prawidłową nazwę strony w parametrze podstrony",
+ "translate-translations-history-short": "h",
+ "languagestats": "Statystyka językowa",
+ "languagestats-summary": "Strona pokazuje statystyki tłumaczeń dla wszystkich grup komunikatów we wskazanym języku.",
+ "messagegroupstats-summary": "Ta strona pokazuje statystyki grupy komunikatów.",
+ "languagestats-stats-for": "Statystyki tłumaczenia na język $1 ($2).",
+ "languagestats-recenttranslations": "ostatnie tłumaczenia",
+ "translate-langstats-incomplete": "Niektóre statystyki na tej stronie są niepełne. Odśwież, aby uzyskać więcej statystyk.",
+ "translate-langstats-expand": "rozwiń",
+ "translate-langstats-collapse": "zwiń",
+ "translate-langstats-expandall": "rozwiń wszystkie",
+ "translate-langstats-collapseall": "zwiń wszystkie",
+ "translate-language-code": "Kod języka",
+ "translate-language-code-field-name": "Kod języka",
+ "translate-suppress-complete": "Pomiń grupy komunikatów całkowicie przetłumaczone",
+ "translate-ls-noempty": "Pomiń grupy komunikatów całkowicie nieprzetłumaczone",
+ "translate-language": "Język",
+ "translate-total": "Komunikaty",
+ "translate-untranslated": "Nieprzetłumaczone",
+ "translate-percentage-complete": "Przetłumaczone",
+ "translate-percentage-fuzzy": "Zdezaktualizowane",
+ "translate-percentage-proofread": "Przejrzane",
+ "translate-languagestats-overall": "Komunikaty ze wszystkich grup",
+ "translate-ls-submit": "Pokaż statystyki",
+ "translate-ls-column-group": "Grupa komunikatów",
+ "translate-mgs-pagename": "Statystyki grupy komunikatów",
+ "translate-mgs-fieldset": "Preferencje wyświetlania",
+ "translate-mgs-group": "Grupa komunikatów",
+ "translate-mgs-nocomplete": "Nie wyświetlaj języków, dla których tłumaczenia zostały ukończone",
+ "translate-mgs-noempty": "Nie wyświetlaj języków, dla których nie rozpoczęto tłumaczenia",
+ "translate-mgs-submit": "Pokaż statystyki",
+ "translate-mgs-column-language": "Język",
+ "translate-mgs-totals": "Razem {{PLURAL:$1|we wszystkich $1 językach|w jednym języku}}",
+ "translate-mgs-invalid-group": "Nie istnieje grupa „$1“.",
+ "translate-mgs-nothing": "Brak czegokolwiek do wyświetlenia dla żądanych statystyk.",
+ "supportedlanguages": "Aktywne języki",
+ "supportedlanguages-summary": "Na tej stronie znajduje się lista aktywnych języków w {{GRAMMAR:MS.lp|{{SITENAME}}}}, razem z pseudonimami tłumaczy, pracującymi w danym języku.\nWiększa czcionka świadczy o większej liczbie edycji wykonanych przez tłumacza.\nKolorem podkreślenia wyróżniono jak dawno tłumacz był aktywny.",
+ "supportedlanguages-colorlegend": "Znaczenie koloru – ostatnie tłumaczenie $1 dni temu.",
+ "supportedlanguages-sqlite-error": "SQLite nie jest obsługiwane",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Tłumacz|Tłumaczka}}|Tłumacze}}: $1",
+ "supportedlanguages-recenttranslations": "ostatnie tłumaczenia",
+ "supportedlanguages-count": "Razem $1 {{PLURAL:$1|język|języki|języków}}.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|edycja|edycje|edycji}} – ostatnia zmiana $3 {{PLURAL:$3|dzień|dni}} temu",
+ "translate-supportedlanguages-cached": "Ta informacja została zapisana w pamięci podręcznej $1 temu.",
+ "abusefilter-edit-builder-vars-translate-source-text": "Tekst źródłowy jednostki tłumaczeniowej",
+ "abusefilter-edit-builder-vars-translate-target-language": "Docelowy język tłumaczenia",
+ "translate-jssti-add": "Dodaj do listy",
+ "managemessagegroups": "Zarządzanie grupami komunikatów",
+ "translate-smg-notallowed": "Nie masz prawa wykonania tej akcji.",
+ "translate-smg-nochanges": "Nie ma żadnych zmian do przetworzenia.",
+ "translate-smg-submit": "Prześlij zmiany do przetwarzania",
+ "translate-smg-submitted": "Zostały zaktualizowane teksty źródłowe komunikatów. Zmiany są przetwarzane w tle.",
+ "translate-smg-submitted-with-failure": "Uaktualnienie definicji {{PLURAL:$1|komunikatu|komunikatów}} nie powiodło się dla {{PLURAL:$1|tej grupy|tych grup}} - $2. $3",
+ "translate-smg-submitted-others-processing": "Definicje komunikatów dla innych grup zostały przetworzone w tle.",
+ "translate-smg-more": "Będzie więcej zmian do wykonania po przesłaniu tych zmian.",
+ "translate-smg-left": "Treść komunikatu w wiki",
+ "translate-smg-right": "Przychodzące modyfikacje",
+ "translate-smg-rename-select": "Wybierz",
+ "translate-smg-rename-cancel": "Anuluj",
+ "translate-smg-rename-search": "Wyszukiwanie pasującego komunikatu...",
+ "translate-smg-rename-select-err": "Wybierz komunikat, którego nazwę chcesz zmienić",
+ "translate-smg-rename-no-msg": "Nie znaleziono komunikatów.",
+ "translate-smg-rename-new": "Dodaj jako nowy…",
+ "translate-smg-rename-rename": "Dodaj jako efekt zmiany nazwy…",
+ "translate-smg-changeset-modified": "Zestaw zmian został zmodyfikowany przez innego użytkownika lub proces. Twoje zmiany nie mogą zostać opublikowane, ponieważ mogłyby nadpisać ich zmiany. Przeładuj stronę aby zobaczyć najnowsze zmiany.",
+ "translate-smg-strong-sync-help": "Pomoc",
+ "translate-smg-groups-with-error-desc": "Lista grup i komunikatów z błędami podczas synchronizacji:",
+ "translate-smg-group-message-action-history": "Historia",
+ "translate-smg-group-action-resolve": "Oznacz jako gotowe",
+ "translate-smg-group-message-tag-outdated": "Zdezaktualizowana",
+ "translate-smg-group-message-tag-rename": "Zmień nazwę",
+ "translate-smg-group-message-message-other-langs": "Inne języki:",
+ "translate-smg-loading": "Ładowanie…",
+ "translate-smg-unknown-error": "Podczas przetwarzania Twojego żądania wystąpił nieznany błąd.",
+ "translate-manage-import-diff": "Komunikat $1 | Operacje: $2",
+ "translate-manage-import-new": "Nowy komunikat $1",
+ "translate-manage-import-deleted": "Usunięto komunikat $1",
+ "translate-manage-action-import": "Importuj",
+ "translate-manage-action-conflict": "Importuj i oznacz jako wymagające sprawdzenia",
+ "translate-manage-action-ignore": "Ignoruj",
+ "translate-manage-action-fuzzy": "Importuj i oznacz tłumaczenia jako wymagające sprawdzenia",
+ "translate-manage-action-rename-fuzzy": "Zmień nazwy i oznacz tłumaczenia jako wymagające sprawdzenia",
+ "translate-manage-action-rename": "Zmień nazwę",
+ "translate-manage-action-ignore-change": "Zignoruj zmianę tłumaczenia",
+ "translate-manage-nochanges": "Brak zmian w definicjach komunikatów dla tej grupy",
+ "translate-manage-nochanges-other": "Nie było zmian dla tego języka.\nUżyj poniższego linku, aby powrócić do widoku szczegółów grupy.",
+ "translate-manage-inconsistent": "Wykryto nieścisłości w formularzu.\nProszę sprawdzić zmiany i spróbować ponownie.\nSzczegóły – $1.",
+ "translate-manage-toolong": "Został przekroczony maksymalny czas przetwarzania wynoszący $1 {{PLURAL:$1|sekundę|sekundy|sekund}}.\nAby kontynuować przetwarzanie proszę ponownie przesłać formularz.",
+ "translate-manage-import-summary": "Import nowej wersji z zewnętrznego źródła",
+ "translate-manage-import-ignore": "Pomijanie komunikatu $1.",
+ "translate-manage-import-rename-summary": "Zmieniono nazwę w zewnętrznym źródle",
+ "translate-manage-conflict-summary": "Importowanie nowej wersji z zewnętrznego źródła.\nProszę sprawdzić.",
+ "translate-manage-submit": "Wykonaj",
+ "translate-manage-intro-other": "Poniżej znajduje się lista zmian komunikatów w języku $1.\nProszę przejrzeć zmiany i wybrać dla każdego komunikatu operację, którą chcesz dla niego wykonać.\nJeśli polecisz zignorować zmiany, zostaną one nadpisane przy następnym eksporcie.",
+ "translate-manage-import-ok": "Zaimportowano: $1",
+ "translate-manage-import-done": "Import zakończony!",
+ "translate-manage-empty-content": "Nie ma zawartości",
+ "translate-manage-key-reused": "Ten komunikat istnieje już na wiki. Sprawdź, czy nie doszło do przypadkowego użycia starego klucza.",
+ "importtranslations": "Importowanie tłumaczeń",
+ "translate-import-from-local": "Załadowanie lokalnego pliku",
+ "translate-import-load": "Pobierz plik",
+ "translate-import-err-dl-failed": "Nie udało się przesłać pliku $1",
+ "translate-import-err-ul-failed": "Przesyłanie pliku zakończone niepowodzeniem",
+ "translate-import-err-invalid-title": "Podana nazwa pliku <nowiki>$1</nowiki> jest nieprawidłowa.",
+ "translate-import-err-no-such-file": "Plik <nowiki>$1</nowiki> nie istnieje lub nie został jeszcze przesłany.",
+ "translate-import-err-stale-group": "Grupa komunikatów, do której należy ten plik, nie istnieje.",
+ "translate-import-err-no-headers": "Plik nie jest prawidłowo sformatowanym plikiem Gettext właściwym dla rozszerzenia Translate – nie udało się odczytać grupy i języka z nagłówków pliku.",
+ "translate-js-support-unsaved-warning": "Masz nieopublikowane tłumaczenia.",
+ "translate-gs-pos": "Poz.",
+ "translate-gs-code": "Kod",
+ "translate-gs-continent": "Kontynent",
+ "translate-gs-speakers": "Władających językiem",
+ "translate-gs-score": "Punkty",
+ "translate-gs-multiple": "wiele",
+ "translate-gs-count": "Liczba",
+ "translate-gs-total": "Razem",
+ "translate-gs-avgscore": "Średni wynik",
+ "translate-documentation-language": "opis komunikatu",
+ "translate-searchprofile": "Tłumaczenia",
+ "translate-searchprofile-tooltip": "Szukaj we wszystkich tłumaczeniach",
+ "translate-searchprofile-note": "Więcej opcji wyszukiwania dostępnych jest w [$1 wyszukiwarce tłumaczeń].",
+ "translate-search-languagefilter": "Filtruj według języka",
+ "translate-search-nofilter": "Bez filtrowania",
+ "log-name-translationreview": "Rejestr przeglądu tłumaczeń",
+ "log-description-translationreview": "Rejestruje wszystkie przeglądy tłumaczeń i grupy komunikatów.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|przejrzał|przejrzała}} tłumaczenie $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|zmienił|zmieniła}} status tłumaczeń strony $3 na język $4 z $6 na $7",
+ "group-translate-sandboxed": "Niezatwierdzeni tłumacze",
+ "group-translate-sandboxed-member": "{{GENDER:$1|niezatwierdzony tłumacz}}",
+ "right-translate-sandboxmanage": "Zarządzanie początkującymi użytkownikami",
+ "action-translate-sandboxmanage": "zarządzanie początkującymi użytkownikami",
+ "right-translate-sandboxaction": "Wykonywanie działań dozwolonych dla początkujących użytkowników",
+ "action-translate-sandboxaction": "wykonywania czynności dozwolonych dla początkujących użytkowników",
+ "translate-workflow-state-": "(wyłączone)",
+ "translate-workflowstatus": "Status: $1",
+ "translate-workflow-set-doing": "Wysyłanie...",
+ "translate-workflow-autocreated-summary": "Automatyczne tworzenie strony stanu tłumaczeń $1",
+ "translate-stats-workflow": "Status",
+ "translate-workflowgroup-label": "Stany tłumaczeń",
+ "translate-workflowgroup-desc": "Ta grupa komunikatów zawiera stany pracy nad tłumaczeniem.\nStany są zdefiniowane w zmiennej konfiguracji $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Ostatnie tłumaczenia",
+ "translate-dynagroup-recent-desc": "Ta grupa komunikatów zawiera wszystkie ostatnie tłumaczenia na ten język.\nJest najbardziej użyteczna do zadań przeglądania.",
+ "translate-dynagroup-additions-label": "Ostatnio dodane",
+ "translate-dynagroup-additions-desc": "Ta grupa komunikatów wyświetla nowe i zmienione komunikaty.",
+ "translate-msggroupselector-projects": "Grupa komunikatów",
+ "translate-msggroupselector-search-placeholder": "Szukaj grup",
+ "translate-msggroupselector-search-all": "Wszystko",
+ "translate-msggroupselector-search-recent": "Ostatnie",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|podgrupa|podgrupy|podgrup}}",
+ "tux-languageselector": "Przetłumacz na",
+ "tux-select-target-language": "Docelowy język tłumaczenia",
+ "tux-tab-all": "Wszystko",
+ "tux-tab-untranslated": "Nieprzetłumaczone",
+ "tux-tab-outdated": "Nieaktualne",
+ "tux-tab-translated": "Przetłumaczone",
+ "tux-tab-unproofread": "Nieprzejrzane",
+ "tux-edit": "Edytuj",
+ "tux-status-optional": "Opcjonalny",
+ "tux-status-fuzzy": "Nieaktualne",
+ "tux-status-proofread": "Przejrzane",
+ "tux-status-translated": "Przetłumaczony",
+ "tux-status-saving": "Publikowanie…",
+ "tux-status-unsaved": "Nieopublikowane",
+ "tux-save-unknown-error": "Wystąpił nieznany błąd.",
+ "tux-editor-placeholder-language": "Twoje tłumaczenie na język $1",
+ "tux-editor-editsummary-placeholder": "Opis zmian (opcjonalne)",
+ "tux-editor-paste-original-button-label": "Wklej tekst źródłowy",
+ "tux-editor-discard-changes-button-label": "Porzuć zmiany",
+ "tux-editor-save-button-label": "Opublikuj tłumaczenie",
+ "tux-editor-skip-button-label": "Przejdź do następnego",
+ "tux-editor-cancel-button-label": "Anuluj",
+ "tux-editor-confirm-button-label": "Potwierdź tłumaczenie",
+ "tux-editor-proofread-button-label": "Oznacz jako przejrzane",
+ "tux-editor-shortcut-info": "Naciśnij „$1”, aby zatwierdzić i przejść do następnego komunikatu, lub „$2”, aby pominąć, lub „$4”, aby podać opis zmian lub przytrzymaj „$3”, aby zobaczyć inne skróty.",
+ "tux-editor-edit-desc": "Edytuj dokumentację",
+ "tux-editor-add-desc": "Dodaj dokumentację",
+ "tux-editor-suggestions-title": "Sugestie",
+ "tux-editor-in-other-languages": "W innych językach",
+ "tux-editor-need-more-help": "Potrzebujesz pomocy?",
+ "tux-editor-ask-help": "Zapytaj o więcej informacji",
+ "tux-editor-tm-match": "pasuje $1%",
+ "tux-notices-more": "{{PLURAL:$1|$1 więcej}}",
+ "tux-notices-hide": "ukryj",
+ "tux-editor-save-failed": "Publikowanie tłumaczenia nie powiodło się: $1",
+ "tux-editor-n-uses": "użyte $1 {{PLURAL:$1|raz|razy}}",
+ "tux-editor-message-desc-more": "Zobacz więcej",
+ "tux-editor-message-desc-less": "Pokaż mniej",
+ "tux-editor-clear-translated": "Ukryj przetłumaczone",
+ "tux-editor-proofreading-mode": "Przegląd",
+ "tux-editor-translate-mode": "Lista",
+ "tux-editor-proofreading-hide-own-translations": "Ukryj swoje tłumaczenia",
+ "tux-editor-proofreading-show-own-translations": "Pokaż swoje tłumaczenia",
+ "tux-proofread-action-tooltip": "Oznacz jako przejrzane",
+ "tux-proofread-edit-label": "Edytuj",
+ "tux-editor-page-mode": "Strona",
+ "tux-editor-outdated-notice": "To tłumaczenie może wymagać aktualizacji.",
+ "tux-editor-outdated-notice-diff-link": "Pokaż różnice",
+ "tux-editor-doc-editor-placeholder": "Dokumentacja komunikatu",
+ "tux-editor-doc-editor-save": "Opublikuj dokumentację",
+ "tux-editor-doc-editor-cancel": "Anuluj",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|kolejny komunikat|kolejne komunikaty|kolejnych komunikatów}}",
+ "tux-messagetable-loading-messages": "Ładowanie {{PLURAL:$1|komunikatu|komunikatów}}...",
+ "tux-message-filter-placeholder": "Filtruj listę",
+ "tux-message-filter-result": "Znaleziono $1 {{PLURAL:$1|wynik|wyników}}, dla \"$2\"",
+ "tux-message-filter-advanced-button": "Zaawansowane wyszukiwanie",
+ "tux-message-filter-optional-messages-label": "Komunikaty opcjonalne",
+ "tux-proofread-translated-by-self": "Przetłumaczone przez Ciebie",
+ "tux-empty-list-all": "Ta grupa komunikatów jest pusta",
+ "tux-empty-list-all-guide": "Wybierz inną grupę komunikatów do przetłumaczenia",
+ "tux-translate-page-no-such-group": "<strong>Ta grupa nie istnieje.</strong> Wybierz inną grupę komunikatów.",
+ "tux-empty-list-translated": "Brak przetłumaczonych komunikatów",
+ "tux-empty-list-translated-guide": "Możesz pomóc tłumaczyć",
+ "tux-empty-list-translated-action": "Przetłumacz",
+ "tux-empty-no-messages-to-display": "Nie ma komunikatów do wyświetlenia.",
+ "tux-empty-there-are-optional": "Są dodatkowe komunikaty, nie pokazane na liście",
+ "tux-empty-show-optional-messages": "Pokaż opcjonalne komunikaty",
+ "tux-empty-no-outdated-messages": "Nie ma nieaktualnych komunikatów",
+ "tux-empty-nothing-to-proofread": "Brak zmian do przejrzenia",
+ "tux-empty-you-can-help-providing": "Możesz pomóc nowymi tłumaczeniami",
+ "tux-empty-nothing-new-to-proofread": "Nic nowego do przejrzania",
+ "tux-empty-you-can-review-already-proofread": "Możesz przejrzeć tłumaczenia przejrzane już przez innych.",
+ "tux-empty-list-other": "Nie ma nic do przetłumaczenia",
+ "tux-empty-list-other-guide": "Możesz pomóc w przeglądaniu istniejących tłumaczeń",
+ "tux-empty-list-other-action": "Przegląd tłumaczeń",
+ "tux-empty-list-other-link": "Pokaż wszystkie komunikaty",
+ "tux-editor-close-tooltip": "Zamknij",
+ "tux-editor-expand-tooltip": "Rozwiń",
+ "tux-editor-collapse-tooltip": "Zwiń",
+ "tux-editor-message-tools-show-editor": "Pokaż w zwykłym edytorze wiki",
+ "tux-editor-message-tools-history": "Historia",
+ "tux-editor-message-tools-delete": "Usuń",
+ "tux-editor-message-tools-translations": "Wszystkie tłumaczenia",
+ "tux-editor-message-tools-linktothis": "Link do tego komunikatu",
+ "tux-editor-loading": "Ładowanie...",
+ "tux-editor-loading-failed": "Nie udało się załadować informacji pomocniczych dla tego tłumaczenia: $1",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|język|języków}} więcej",
+ "translate-statsbar-tooltip": "$1% przetłumaczono, $2% przejrzano",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% przetłumaczonych, $2% przejrzanych, $3% nieaktualnych",
+ "translate-search-more-groups-info": "$1 więcej {{PLURAL:$1|grupa|grup}}",
+ "translate-syntax-error": "Tłumaczenie zawiera błąd składni",
+ "tux-session-expired": "Nie jesteś już zalogowany. Zaloguj się w osobnej karcie. Alternatywnie, możesz wykonać kopię niezapisanych tłumaczeń, zalogować się i powrócić do tej strony, a następnie ponownie wprowadzić tłumaczenia.",
+ "tux-nojs": "To narzędzie nie działa, jeżeli nie działa obsługa JavaScript. Jest u ciebie wyłączona, nie działa lub ta przeglądarka nie jest wspierana.",
+ "specialpages-group-translation": "Tłumaczenie",
+ "log-action-filter-translationreview": "Rodzaj działania:"
+}
diff --git a/Translate/i18n/core/pms.json b/Translate/i18n/core/pms.json
new file mode 100644
index 00000000..927a5e2e
--- /dev/null
+++ b/Translate/i18n/core/pms.json
@@ -0,0 +1,261 @@
+{
+ "@metadata": {
+ "authors": [
+ "Borichèt",
+ "Bèrto 'd Sèra",
+ "Dragonòt",
+ "Salvemm el lombard"
+ ]
+ },
+ "translate": "Viragi",
+ "translate-desc": "[[Special:Translate|Pàgina special]] për le tradussion ëd MediaWiki e ancor ëd pì",
+ "translate-taskui-export-to-file": "Esporté an formà nativ",
+ "translate-taskui-export-as-po": "Esporté da le tradussion fòra linia",
+ "translate-taction-translate": "Volté",
+ "translate-taction-proofread": "Verìfica",
+ "translate-taction-lstats": "Statìstiche ëd lenga",
+ "translate-taction-mstats": "Statìstiche dle partìe ëd mëssagi",
+ "translate-taction-export": "Esporté",
+ "translate-taction-disabled": "Costa assion a l'é disabilità ansima a costa wiki.",
+ "translate-page-no-such-language": "La lenga spessificà a l'é nen vàlida.",
+ "translate-page-no-such-group": "La partìa spessificà a l'é nen bon-a.",
+ "translate-page-disabled": "Le tradussion an costa lenga an costa partìa a son ëstàite disativà.\nRason:\n\n<em>$1</em>",
+ "translate-language-disabled": "La tradussion an sta lenga a l'é disabilità.",
+ "translate-page-settings-legend": "Configurassion",
+ "translate-page-group": "Partìa",
+ "translate-page-language": "Lenga",
+ "translate-page-limit": "Lìmit",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|mëssagi|mëssagi}} për pàgina",
+ "translate-submit": "Smon-e",
+ "translate-page-navigation-legend": "Navigassion",
+ "translate-page-showing": "Visualisassion dij mëssagi da $1 a $2 ansima a 'n total ëd $3.",
+ "translate-page-showing-all": "Visualisassion ëd $1 {{PLURAL:$1|mëssagi|mëssagi}}.",
+ "translate-page-showing-none": "Gnun mëssagi da mostré.",
+ "translate-next": "Pàgina anans",
+ "translate-prev": "Pàgina andré",
+ "translate-page-description-legend": "Anformassion an sla partìa",
+ "translate-page-description-hasoptional": "Sta partìa ëd mëssagi a conten ij mëssagi opsionaj.\nIj Mëssagi opsionaj a dovrìo mach esse voltà quand che soa lenga a l'ha dj'esigense speciaj com ëd nen dovré dë spassi o an trasliteré dij nòm pròpi. $1",
+ "translate-page-description-hasoptional-open": "Smon-e ij mëssagi opsionaj.",
+ "translate-page-edit": "modifiché",
+ "translate-optional": "(opsional)",
+ "translate-ignored": "(ignorà)",
+ "translate-edit-title": "Modìfica \"$1\"",
+ "translate-edit-definition": "Definission dël mëssagi",
+ "translate-edit-contribute": "colaboré",
+ "translate-edit-no-information": "''Ës mëssagi a l'ha gnun-a documentassion.\nS'a sa andoa o coma 's mëssagi a l'é dovrà, a peul giuté d'àutri tradutor an giontant dla documentassion a cost mëssagi.''",
+ "translate-edit-information": "Anformassion an sël mëssagi ($1)",
+ "translate-edit-warnings": "Avertensa an sle tradussion incomplete",
+ "translate-edit-tmmatch-source": "Test sorgiss dla tradussion: $1",
+ "translate-edit-tmmatch": "corëspondensa ëd $1%",
+ "translate-edit-nopermission": "It l'has dabzògn dij përmess për volté ij mëssagi.",
+ "translate-edit-askpermission": "Ciamé ël përmess",
+ "translate-checks-parameters": "{{PLURAL:$2|Ël paràmetr sì-sota a l'é|Ij paràmetr sì-sota a son}} pa dovrà:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Ël paràmetr sì-sota a l'é|Ij paràmetr sì-sota a son}} pa conossù:\n<strong>$1</strong>",
+ "translate-checks-balance": "A-i é un nùmer dëscobi ëd {{PLURAL:$2|paréntesi|paréntesi}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Ël colegament sota a l'é|Ij $2 colegament sota a son}} problemàtich:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|L'anliura dì-dapress a a l'é|Le $2 anliure sì-dapress a son}} mancante:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "La definission a deuvra <nowiki>{{PLURAL:}}</nowiki> ma pa la tradussion.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> a l'é stàit dovrà ant {{PLURAL:$1|na forma|$1 forme}} ma {{PLURAL:$2|mach na forma a l'é|$2 forme a son}} mantnùe (an gavand le forme 0= e 1=).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> a l'ha dle forme duplicà a la fin. <nowiki>{{PLURAL:$1|fèja|fèja}}</nowiki> a dovrìa esse scrivù com <nowiki>{{PLURAL:$1|fèje}}</nowiki>.",
+ "translate-checks-pagename": "Spassi nominal cangià da la definission",
+ "translate-checks-format": "Sta tradussion-sì a-i va nen dapress a la definission o a l'ha na sintassi pa bon-a: $1",
+ "translate-checks-escape": "Le scapade sì-dapress a peulo esse casuaj: <strong>$1</strong>",
+ "translate-checks-parametersnotequal": "Ël conteur dij paràmetr a l'é {{PLURAL:$1|$1}}; a dovrìa esse {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> a va nen bin.",
+ "translate-checks-fudforum-syntax": "Dovré <nowiki>$1</nowiki> nopà ëd <nowiki>$2</nowiki> an cost proget-sì.",
+ "translate-pref-editassistlang": "Lenghe dl'assistent:",
+ "prefs-translate": "Opsion ëd tradussion",
+ "translate-pref-editassistlang-help": "Lista dij còdes ëd le lenghe separà da na vìrgola.\nLa tradussion d'un mëssagi an ste lenghe-sì a l'é mostrà quand ch'a l'é an camin a fé la tradussion.\nLa lista dle lenghe dë stàndard a dipend da soa lenga.",
+ "translate-pref-editassistlang-bad": "Còdes ëd lenga pa bon ant la lista:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Modifiché an dovrand l'antërfacia ëd tradussion",
+ "right-translate-manage": "Aministré le partìe ëd mëssagi",
+ "action-translate-manage": "gestì le partìe ëd mëssagi",
+ "right-translate-import": "Amporté le tradussion fòra 'd linia",
+ "action-translate-import": "amporté le tradussion fòra 'd linia",
+ "right-translate-messagereview": "Revision-a le tradussion",
+ "right-translate-groupreview": "Cangia lë stat dël fluss ëd travaj dle partìe ëd mëssagi",
+ "translate-rc-translation-filter": "Filtré le tradussion:",
+ "translate-rc-translation-filter-no": "Fé gnente",
+ "translate-rc-translation-filter-only": "Smon-e mach le tradussion",
+ "translate-rc-translation-filter-filter": "Eliminé le tradussion",
+ "translate-rc-translation-filter-site": "Mach le modìfiche ai mëssagi dël sit",
+ "translationstats": "Statìstiche ëd tradussion",
+ "translate-stats-edits": "Modìfiche",
+ "translate-stats-users": "Tradutor",
+ "translate-stats-registrations": "Registrassion",
+ "translate-stats-reviews": "Revision",
+ "translate-stats-reviewers": "Revisor",
+ "translate-statsf-intro": "A peul generé dle statìstiche sempie con cost formolari.\nTùit ij valor a l'han dij lìmit superior e anferior.",
+ "translate-statsf-options": "Opsion ëd graf",
+ "translate-statsf-width": "Larghëssa an pontin:",
+ "translate-statsf-height": "Autëssa an pontin:",
+ "translate-statsf-days": "Antërval ëd temp an di:",
+ "translate-statsf-start": "Dàita ëd prinsipi:",
+ "translate-statsf-scale": "Granularità:",
+ "translate-statsf-scale-months": "Mèis",
+ "translate-statsf-scale-weeks": "Sman-e",
+ "translate-statsf-scale-days": "Di",
+ "translate-statsf-scale-hours": "Ore",
+ "translate-statsf-count": "Mzura:",
+ "translate-statsf-count-edits": "Nùmer ëd modìfiche",
+ "translate-statsf-count-users": "Tradutor ativ",
+ "translate-statsf-count-registrations": "Utent neuv",
+ "translate-statsf-count-reviews": "Revision ëd tradussion",
+ "translate-statsf-count-reviewers": "Revisor",
+ "translate-statsf-language": "Lista dij còdes ëd le lenghe separà da 'd vìrgole:",
+ "translate-statsf-group": "Lista ëd còdes ëd partìe separà da 'd vìrgole:",
+ "translate-statsf-submit": "Preuva",
+ "translate-tag-page-desc": "Tradussion dla pàgina wiki [[$2|$1]].",
+ "translate-sidebar-alltrans": "Ant j'àutre lenghe",
+ "translations": "Tute le tradussion",
+ "translations-summary": "Buté un nòm ëd mëssagi sì-sota për vëdde tute le tradussion disponìbij.",
+ "translate-translations-no-message": "\"$1\" a l'é nen un mëssagi voltàbil",
+ "translate-translations-none": "A-i é pa ëd tradussion për \"$1\"",
+ "translate-translations-count": "Trovà {{PLURAL:$1|na tradussion|$1 tradussion}}.",
+ "translate-translations-fieldset-title": "Mëssagi",
+ "translate-translations-messagename": "Nòm:",
+ "translate-translations-project": "Proget:",
+ "translate-translations-including-no-param": "Për piasì, ch'a spessìfica na ciav ëd mëssagi bon-a ant ël paràmetr ëd la sot-pàgina",
+ "translate-translations-history-short": "h",
+ "languagestats": "Statìstiche dle lenghe",
+ "languagestats-summary": "Sta pàgina-sì a smon le statìstiche ëd tradussion për tute le partìe ëd mëssagi për na lenga.",
+ "languagestats-stats-for": "Statìstiche ëd tradussion për $1 ($2).",
+ "languagestats-recenttranslations": "tradussion recente",
+ "translate-langstats-incomplete": "Quaidun-e dle statìstiche su costa pàgina a son incomplete. Për piasì, ch'a torna a carié për oten-e pi dë statìstiche.",
+ "translate-langstats-expand": "deurbe",
+ "translate-langstats-collapse": "sëré",
+ "translate-langstats-expandall": "deurbe tut",
+ "translate-langstats-collapseall": "saré tut",
+ "translate-language-code": "Còdes ëd lenga",
+ "translate-language-code-field-name": "Còdes ëd lenga:",
+ "translate-suppress-complete": "Stërma le partìe ëd mëssagi voltà completament",
+ "translate-ls-noempty": "Stërma le partìe ëd mëssagi completament nen voltà",
+ "translate-language": "Lenga:",
+ "translate-total": "Mëssagi",
+ "translate-untranslated": "Nen voltà",
+ "translate-percentage-complete": "Completà",
+ "translate-percentage-fuzzy": "Veje",
+ "translate-languagestats-overall": "Tute le partìe ëd mëssagi ansema",
+ "translate-ls-submit": "Smon-e le statìstiche",
+ "translate-ls-column-group": "Partìa ëd mëssagi",
+ "translate-mgs-pagename": "Statìstiche dle partìe ëd mëssagi",
+ "translate-mgs-fieldset": "Visualisa ij tò gust",
+ "translate-mgs-group": "Partìa ëd mëssagi:",
+ "translate-mgs-nocomplete": "Smon-e nen le lenghe che a l'han livrà soa tradussion",
+ "translate-mgs-noempty": "Smon-e nen le lenghe che a l'han gnun-e tradussion",
+ "translate-mgs-submit": "Smon-e le statìstiche",
+ "translate-mgs-column-language": "Lenga",
+ "translate-mgs-totals": "Tute le lenghe ansema",
+ "translate-mgs-invalid-group": "La partìa $1 specificà a esist pa.",
+ "translate-mgs-nothing": "Gnente da mostré për le statìstiche ciamà.",
+ "supportedlanguages": "Lenghe mantnùe",
+ "supportedlanguages-summary": "Costa pàgina a smon na lista ëd tute le lenghe mantnùe da {{SITENAME}}, ansema ai nòm dij tradutor ch'a travajo an cole lenghe.\nUn nòm d'un tradutor as vëdd pi gròss, tante pi modìfiche e tradussion a l'ha fàit.\nËl color ëd na sot-liniadura a mostra quant ëd recent un tradutor a l'é stàit ativ ambelessì.",
+ "supportedlanguages-colorlegend": "Legenda për ël color: L'ùltima tradussion $1 di fà.",
+ "supportedlanguages-translators": "{{PLURAL:$2|Tradutor|Tradutor}}: $1",
+ "supportedlanguages-recenttranslations": "tradussion recente",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|lenghe|lenghe}} an total.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|modìfica|modìfiche}} - ùltima modìfica $3 {{PLURAL:$3|di|di}} fà",
+ "translate-jssti-add": "Gionté a la lista",
+ "managemessagegroups": "Gestion ëd la partìa dij mëssagi",
+ "translate-smg-notallowed": "It peule pa fé st'assion-sì.",
+ "translate-smg-nochanges": "A-i é gnun-a modìfica da traté.",
+ "translate-smg-submit": "Spedì le modìfiche da traté",
+ "translate-smg-submitted": "Le definission dij mëssagi a son stàite modificà. Le modìfiche a son tratà an slë sfond.",
+ "translate-smg-left": "Contnù dël mëssagi ant la wiki",
+ "translate-smg-right": "Modìfiche an cors ëd traferiment",
+ "translate-manage-import-diff": "Mëssagi $1 | Assion: $2",
+ "translate-manage-import-new": "Mëssagi neuv $1",
+ "translate-manage-import-deleted": "Mëssagi scancelà $1",
+ "translate-manage-action-import": "Ampòrta",
+ "translate-manage-action-conflict": "Amporté e marché tanme tërbol",
+ "translate-manage-action-ignore": "Ignora",
+ "translate-manage-action-fuzzy": "Amporté le tradussion e marcheje tanme tërbole",
+ "translate-manage-nochanges": "A-i é pa ëd cangiament ant le definission dij mëssagi për sta partìa-sì.",
+ "translate-manage-nochanges-other": "A-i é pa ëd cangiament për sta lenga-sì.\nCh'a deuvra l'anliura sì-dapress për artorné a la vista ëd detaj dla partìa.",
+ "translate-manage-inconsistent": "Trovà d'anconsistense ant l'arcesta.\nPër piasì, ch'a contròla ij cangiament e ch'a preuva torna.\nDetaj: $1.",
+ "translate-manage-toolong": "Passà ël temp màssim ëd tratament ëd $1 {{PLURAL:$1|second|second}}.\nPër piasì, ch'a spedissa torna ël formolari për continué ël process.",
+ "translate-manage-import-summary": "Amportassion ëd na neuva version da na sorgiss esterna",
+ "translate-manage-import-ignore": "Sautà mëssagi $1.",
+ "translate-manage-conflict-summary": "Amportassion ëd na neuva version da na sorgiss esterna.\nPër piasì, ch'a controla.",
+ "translate-manage-submit": "Fé andé",
+ "translate-manage-intro-other": "Sota a-i é na lista ëd cangiament ëd le tradussion ant la lenga $1.\nPër piasì, ch'a revision-a ij cangiament e ch'a serna n'assion ch'a veul fé për minca tradussion.\nS'a sern d'ignoré ij cangiament, a saran coatà durant l'esportassion ch'a-i ven.",
+ "translate-manage-import-ok": "Amportà na neuva version ëd la pàgina $1.",
+ "translate-manage-import-done": "Tut fàit!",
+ "importtranslations": "Amporté dle tradussion",
+ "translate-import-from-local": "Carié n'archivi local:",
+ "translate-import-load": "Carié l'archivi",
+ "translate-import-err-dl-failed": "L'archivi as peul pa argionz-se:\n$1",
+ "translate-import-err-ul-failed": "Ël cariagi dl'archivi a l'ha pa marcià",
+ "translate-import-err-invalid-title": "Ël nòm dl'archivi dàit <nowiki>$1</nowiki> a l'é pa bon.",
+ "translate-import-err-no-such-file": "L'archivi <nowiki>$1</nowiki> a esist pa o a l'é pa stàit carià localment.",
+ "translate-import-err-stale-group": "La partìa ëd mëssagi anté ch'a ponta s'archivi a esist pa.",
+ "translate-import-err-no-headers": "L'archivi a l'é pa n'archivi Gettext bin formà ant ël formà dl'estension Translate:\nAs peul pa determinesse la partìa e la lenga da l'antestassion dl'archivi.",
+ "translate-js-support-unsaved-warning": "A l'ha dle tradussion nen salvà.",
+ "translate-gs-pos": "Pos.",
+ "translate-gs-code": "Còdes",
+ "translate-gs-continent": "Continent",
+ "translate-gs-speakers": "Parlant",
+ "translate-gs-score": "Pontegi",
+ "translate-gs-multiple": "Mùltipl",
+ "translate-gs-count": "Cont",
+ "translate-gs-total": "Total",
+ "translate-gs-avgscore": "Pontegi medi",
+ "translate-documentation-language": "Documentassion dël mëssagi",
+ "translate-searchprofile": "Tradussion",
+ "translate-searchprofile-tooltip": "Sërché an tute le tradussion",
+ "translate-search-languagefilter": "Filtra për lenga:",
+ "translate-search-nofilter": "Filtra pa",
+ "log-name-translationreview": "Registr dle revision ëd tradussion",
+ "log-description-translationreview": "Registr ëd tute le revision a le tradussion e a le partìe ëd mëssagi.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|a l'ha acetà}} la tradussion $3",
+ "translate-workflow-state-": "(disativà)",
+ "translate-workflowstatus": "Stat: $1",
+ "translate-workflow-set-doing": "Ativassion...",
+ "translate-workflow-autocreated-summary": "Creassion automàtica ëd la pàgina për lë stat dël process ëd travaj $1",
+ "translate-stats-workflow": "Stat",
+ "translate-workflowgroup-label": "Stat dël process ëd travaj",
+ "translate-workflowgroup-desc": "Sta partìa ëd mëssagi a mostra jë stat dël process ëd travaj ëd tradussion.\nJë stat a son definì ant la variàbil ëd configurassion $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Tradussion recente",
+ "translate-dynagroup-recent-desc": "Sta partìa ëd mëssagi a smon tute le tradussion recente an costa lenga.\nA ven dzortut a taj con ij travaj ëd revision.",
+ "translate-dynagroup-additions-label": "Gionte recente",
+ "translate-dynagroup-additions-desc": "Costa partìa ëd mëssagi a smon dij mëssagi neuv e modificà.",
+ "translate-msggroupselector-projects": "Partìa ëd mëssagi",
+ "translate-msggroupselector-search-placeholder": "Sërché le partìe",
+ "translate-msggroupselector-search-all": "Tùit",
+ "translate-msggroupselector-search-recent": "Recent",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|sot-partìa|sot-partìe}}",
+ "tux-languageselector": "Volté an",
+ "tux-tab-all": "Tùit",
+ "tux-tab-untranslated": "Nen voltà",
+ "tux-tab-outdated": "Veje",
+ "tux-tab-translated": "Voltà",
+ "tux-edit": "Modìfica",
+ "tux-status-optional": "Opsional",
+ "tux-status-fuzzy": "Veje",
+ "tux-status-proofread": "Verìfica",
+ "tux-status-translated": "Voltà",
+ "tux-status-saving": "Salvé...",
+ "tux-status-unsaved": "Pa salvà",
+ "tux-editor-save-button-label": "Salvé la tradussion",
+ "tux-editor-skip-button-label": "Sàuta a col ch'a ven",
+ "tux-editor-shortcut-info": "Sgnaca \"$1\" për salvé o \"$2\" për sauté al mëssagi ch'a ven",
+ "tux-editor-edit-desc": "Modifiché la descrission",
+ "tux-editor-add-desc": "Gionté na descrission",
+ "tux-editor-suggestions-title": "Sugeriment",
+ "tux-editor-in-other-languages": "Ant j'àutre lenghe",
+ "tux-editor-need-more-help": "Dabzògn ëd pi d'agiut?",
+ "tux-editor-ask-help": "Ciama për savèjne ëd pi",
+ "tux-editor-tm-match": "corëspondensa ëd $1%",
+ "tux-notices-more": "{{PLURAL:$1|$1 pi}}",
+ "tux-notices-hide": "stërma",
+ "tux-editor-save-failed": "Falì a salvé la tradussion: $1",
+ "tux-editor-message-desc-more": "Visualisé ëd pi",
+ "tux-editor-message-desc-less": "Vëdde ëd men",
+ "tux-editor-clear-translated": "Stërmé coj voltà",
+ "tux-editor-outdated-notice": "Costa tradussion a peul avèj dabzògn d'esse agiornà.",
+ "tux-editor-outdated-notice-diff-link": "Smon-e le diferense",
+ "tux-editor-doc-editor-save": "Salvé la documentassion",
+ "tux-editor-doc-editor-cancel": "Scancela",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|mëssagi}} ëd pi",
+ "tux-messagetable-loading-messages": "Cariagi {{PLURAL:$1|dël mëssagi|dij mëssagi}}..."
+}
diff --git a/Translate/i18n/core/pnb.json b/Translate/i18n/core/pnb.json
new file mode 100644
index 00000000..eb784b93
--- /dev/null
+++ b/Translate/i18n/core/pnb.json
@@ -0,0 +1,83 @@
+{
+ "@metadata": {
+ "authors": [
+ "Abbas dhothar",
+ "Bgo eiu",
+ "Khalid Mahmood"
+ ]
+ },
+ "translate": "ترجمہ کرو",
+ "translate-extensionname": "ترجمہ",
+ "translate-desc": "میڈیاوِکی تے ترجمے لئی [[Special:Translate|صفحہ]]",
+ "translate-taction-translate": "ترجمہ کرو",
+ "translate-taction-proofread": "پرکھ",
+ "translate-taction-lstats": "بولی دے آنکڑے",
+ "translate-taction-mstats": "منیہیاں دی ٹولی دے انکڑے",
+ "translate-taction-export": "برامد کرو",
+ "translate-page-settings-legend": "سیٹنگاں",
+ "translate-page-group": "ٹولی",
+ "translate-page-language": "بولی",
+ "translate-submit": "لے کے آؤ",
+ "translate-page-navigation-legend": "پاندھ",
+ "translate-page-showing-none": "وکھانے آسطے کوئی سنیہا نہیں۔",
+ "translate-next": "اگلا صفحہ",
+ "translate-page-description-legend": "ٹولی دے بارے چ معلومات",
+ "translate-page-edit": "سودھو",
+ "translate-edit-title": "\"$1‏‎\" سودھو",
+ "translate-edit-definition": "منیہے دی پربھاشا",
+ "translate-export-form-format": "فارمیٹ",
+ "prefs-translate": "ترجمہ اختیارات",
+ "translate-rcfilters-translations": "ترجمے",
+ "translate-rcfilters-translations-filter-label": "ترجمے نئیں",
+ "translate-rc-translation-filter": "فلٹر ترجمے:",
+ "translationstats": "ترجمہ آنکڑے",
+ "translate-stats-edits": "سودھاں",
+ "translate-statsf-days": "ویلہ مدت دناں وچ:",
+ "translate-statsf-scale-months": "مہینے",
+ "translate-statsf-scale-weeks": "ہفتے",
+ "translate-statsf-scale-days": "دن",
+ "translate-statsf-scale-hours": "گھینٹے",
+ "translate-statsf-count": "ماپ:",
+ "translate-sidebar-alltrans": "ہور بولیاں وچ",
+ "translations": "سارے ترجمے",
+ "translate-translations-messagename": "ناں:",
+ "translate-translations-history-short": "تریخ",
+ "languagestats": "بولی دے آنکڑے",
+ "translate-language-code": "بولی دا کوڈ",
+ "translate-language-code-field-name": "بولی دا کوڈ:",
+ "translate-language": "بولی",
+ "translate-untranslated": "نہیں ترجمہ کیتے",
+ "translate-percentage-fuzzy": "پُراݨے",
+ "translate-ls-submit": "آنکڑے ویکھاؤ",
+ "translate-mgs-submit": "آنکڑے ویکھاؤ",
+ "translate-mgs-column-language": "بولی",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|ترمیم|ترمیماں}} - آخری ترمیم $3 {{PLURAL:$3|دن|دناں}} پہلے",
+ "translate-smg-rename-cancel": "رد کرو",
+ "translate-smg-strong-sync-help": "مدد",
+ "translate-smg-group-message-tag-outdated": "پُراݨے",
+ "translate-smg-group-message-message-other-langs": "ہور بولیاں:",
+ "translate-documentation-language": "سنیہا دستاویز",
+ "translate-searchprofile": "ترجمے",
+ "translate-msggroupselector-search-all": "سبھ",
+ "tux-languageselector": "وچ ترجمہ",
+ "tux-tab-untranslated": "نہیں ترجمہ کیتے",
+ "tux-tab-outdated": "پُراݨے",
+ "tux-tab-translated": "ترجمہ شدہ",
+ "tux-status-fuzzy": "پُراݨے",
+ "tux-status-translated": "ترجمہ شدہ",
+ "tux-editor-cancel-button-label": "رد کرو",
+ "tux-editor-in-other-languages": "ہور بولیاں وچ",
+ "tux-notices-more": "{{PLURAL:$1|$1 ہور}}",
+ "tux-notices-hide": "لُکاؤ",
+ "tux-editor-message-desc-more": "ہور دیکھو",
+ "tux-editor-proofreading-mode": "پرکھ",
+ "tux-editor-translate-mode": "لسٹ",
+ "tux-editor-page-mode": "صفحہ",
+ "tux-editor-doc-editor-cancel": "منسوخ کرو",
+ "tux-messagetable-more-messages": "$1 ہور {{PLURAL:$1|سنیہا|سنیہے}}",
+ "tux-message-filter-advanced-button": "ہور کھوج",
+ "tux-empty-list-translated-action": "ترجمہ",
+ "tux-editor-message-tools-translations": "سارے ترجمے",
+ "translate-search-more-languages-info": "$1 ہور {{PLURAL:$1|بولی|بولیاں}}",
+ "specialpages-group-translation": "ترجمہ"
+}
diff --git a/Translate/i18n/core/prg.json b/Translate/i18n/core/prg.json
new file mode 100644
index 00000000..bd15fc06
--- /dev/null
+++ b/Translate/i18n/core/prg.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nērtiks Jōrgesuns"
+ ]
+ },
+ "translate-documentation-language": "Pawakīsenjas dōkumentaciōni"
+}
diff --git a/Translate/i18n/core/ps.json b/Translate/i18n/core/ps.json
new file mode 100644
index 00000000..70d6704f
--- /dev/null
+++ b/Translate/i18n/core/ps.json
@@ -0,0 +1,227 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ahmed-Najib-Biabani-Ibrahimkhel",
+ "Amjad Khan",
+ "Baloch Khan",
+ "Waldir"
+ ]
+ },
+ "translate": "ژباړل",
+ "translate-taction-translate": "ژباړل",
+ "translate-taction-proofread": "بياکتنه",
+ "translate-taction-lstats": "د ژبې شمار",
+ "translate-taction-mstats": "د پيغام ډلې شمار",
+ "translate-taction-export": "صادرول",
+ "translate-taction-disabled": "په دې ويکي باندې دا کړنه ناچارنه شوې.",
+ "translate-page-no-such-language": "ځانگړې شوې ژبه سمه نه وه.",
+ "translate-page-no-such-group": "ځانگړې شوې ډله سمه نه وه.",
+ "translate-page-disabled": "په دې ډله کې د همدې ژبې ژباړې ناچارنده شوي.\nسبب:\n\n<em>$1</em>",
+ "translate-language-disabled": "دې ژبې ته ژباړه ناچارنه شوې.",
+ "translate-page-settings-legend": "امستنې",
+ "translate-page-group": "ډله",
+ "translate-page-language": "ژبه",
+ "translate-page-limit": "بريد",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|پيغام|پيغامونه}} په يوه مخ کې",
+ "translate-submit": "راغونډول",
+ "translate-page-navigation-legend": "گرځښت",
+ "translate-page-showing": "له $1 تر $2 پيغامونه ښکاره شوي، ټولټال $3.",
+ "translate-page-showing-all": "$1 {{PLURAL:$1|پيغام|پيغامونه}} ښکاره کول.",
+ "translate-page-showing-none": "د ښکاره کولو لپاره کوم پيغام نشته.",
+ "translate-next": "بل مخ",
+ "translate-prev": "تېر مخ",
+ "translate-page-description-legend": "د ډلې په اړه مالومات",
+ "translate-page-description-hasoptional-open": "اختياري پيغامونه ښکاره کول.",
+ "translate-page-edit": "سمول",
+ "translate-optional": "(اختياري)",
+ "translate-ignored": "(بابېزه گڼل شوی)",
+ "translate-edit-title": "\"$1\" سمول",
+ "translate-edit-definition": "د پيغام پېژند",
+ "translate-edit-contribute": "ونډه اخيستل",
+ "translate-edit-information": "د پيغام په اړه مالومات ($1)",
+ "translate-edit-warnings": "د نابشپړه ژباړو په اړه گواښنې",
+ "translate-edit-tmmatch-source": "د ژباړې د سرچينې متن: $1",
+ "translate-edit-askpermission": "پرېښه اخيستل",
+ "translate-export-form-format": "بڼه",
+ "translate-pref-editassistlang": "مرستيالې ژبې:",
+ "prefs-translate": "د ژباړې خوښنې",
+ "right-translate-manage": "پيغام ډلې مهارول",
+ "action-translate-manage": "پيغام ډلې مهارول",
+ "right-translate-import": "بې ليکې ژباړې راوستل",
+ "action-translate-import": "بې ليکې ژباړې راوستل",
+ "right-translate-messagereview": "ژباړې بياکتل",
+ "translate-rcfilters-translations-filter-label": "ژباړې نه",
+ "translate-rcfilters-translations-filter-desc": "ټول هغه بدلونونه کوم چې ژباړې نه دي.",
+ "translate-rc-translation-filter": "ژباړې چاڼول:",
+ "translate-rc-translation-filter-no": "هېڅ مه کوئ",
+ "translate-rc-translation-filter-only": "يوازې ژباړې ښکاره کول",
+ "translate-rc-translation-filter-filter": "ژباړې له چاڼه وېستل",
+ "translate-rc-translation-filter-site": "يوازې د وېبځي پيغامونو بدلونونه",
+ "translationstats": "د ژباړو شمار",
+ "translate-stats-edits": "سمونونه",
+ "translate-stats-users": "ژباړونکي",
+ "translate-stats-registrations": "نومليکنې",
+ "translate-stats-reviews": "بياکتنې",
+ "translate-stats-reviewers": "بياکتونکي",
+ "translate-statsf-options": "د گراف خوښنې",
+ "translate-statsf-width": "سور په پېکسل کې:",
+ "translate-statsf-height": "لوړوالی په پېکسل کې:",
+ "translate-statsf-days": "د وخت موده په ورځو کې:",
+ "translate-statsf-start": "پيل نېټه:",
+ "translate-statsf-scale": "ظرافت:",
+ "translate-statsf-scale-months": "مياشتې",
+ "translate-statsf-scale-weeks": "اونۍ",
+ "translate-statsf-scale-days": "ورځې",
+ "translate-statsf-scale-hours": "ساعتونه",
+ "translate-statsf-count": "مېچل:",
+ "translate-statsf-count-edits": "د سمونو شمېر:",
+ "translate-statsf-count-users": "فعاله ژباړونکي",
+ "translate-statsf-count-registrations": "نوي کارنان",
+ "translate-statsf-count-reviews": "د ژباړو بياکتنې",
+ "translate-statsf-count-reviewers": "مخکتونکي",
+ "translate-statsf-submit": "مخليدنه",
+ "translate-sidebar-alltrans": "په نورو ژبو کې",
+ "translations": "ټولې ژباړې",
+ "translate-translations-no-message": "\"$1\" يو ژباړل وړ پيغام نه دی",
+ "translate-translations-none": "د \"$1\" لپاره کومه ژباړه نه شته",
+ "translate-translations-count": "{{PLURAL:$1|يوه ژباړه وموندل شوه|$1 پاړې وموندل شولې}}.",
+ "translate-translations-fieldset-title": "پيغام",
+ "translate-translations-messagename": "نوم:",
+ "translate-translations-project": "پروژه:",
+ "languagestats": "د ژبې شمار",
+ "languagestats-summary": "دا مخ د يوې ژبې د ټولو پيغام ډلو د ژباړې شمارنې ښکاره کوي.",
+ "languagestats-stats-for": "د $1 د ژباړې شمارنې ($2).",
+ "languagestats-recenttranslations": "تازه ژباړې",
+ "translate-langstats-expand": "غځول",
+ "translate-langstats-collapse": "پرځول",
+ "translate-langstats-expandall": "ټول غځول",
+ "translate-langstats-collapseall": "ټول پرځول",
+ "translate-language-code": "د ژبې کوډ",
+ "translate-language-code-field-name": "د ژبې کوډ:",
+ "translate-suppress-complete": "بشپړه ژباړلې پيغام ډلې ځپل",
+ "translate-ls-noempty": "بشپړه ناژباړلې پيغام ډلې ځپل",
+ "translate-language": "ژبه",
+ "translate-total": "پيغامونه",
+ "translate-untranslated": "ناژباړلي",
+ "translate-percentage-complete": "بشپړتابه",
+ "translate-languagestats-overall": "ټولې پيغام ډلې يوځای",
+ "translate-ls-submit": "شمار ښکاره کول",
+ "translate-ls-column-group": "پيغام ډله",
+ "translate-mgs-pagename": "د پيغام ډلې شمار",
+ "translate-mgs-group": "پيغام ډله:",
+ "translate-mgs-submit": "شمارنې ښکاره کول",
+ "translate-mgs-column-language": "ژبه",
+ "translate-mgs-totals": "ټولې ژبې سره يوځای",
+ "supportedlanguages": "ملاتړې ژبې",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|ژباړن}}|ژباړنان}}: $1",
+ "supportedlanguages-recenttranslations": "تازه ژباړې",
+ "supportedlanguages-count": "ټولټال $1 {{PLURAL:$1|ژبه|ژبې}}.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|سمون|سمونونه}} - وروستی سمون $3 {{PLURAL:$3|ورځ|ورځې}} دمخه",
+ "abusefilter-edit-builder-vars-translate-source-text": "د ژباړې يوون د سرچينې متن",
+ "translate-jssti-add": "لړليک کې گډول",
+ "managemessagegroups": "د پیغام ګروپ مدیریت",
+ "translate-manage-import-new": "نوی پيغام $1",
+ "translate-manage-import-deleted": "ړنگ شوی پيغام $1",
+ "translate-manage-action-import": "رالېږدول",
+ "translate-manage-action-ignore": "بابېزل",
+ "translate-manage-import-done": "راوړنه بشپړه شوه!",
+ "translate-import-from-local": "د سيمه ايزې دوتنې پورته کېدل:",
+ "translate-import-load": "دوتنه برسېرول",
+ "translate-import-err-invalid-title": "د ورکړل شوې دوتنې نوم <nowiki>$1</nowiki> ناسم و.",
+ "translate-gs-code": "کوډ",
+ "translate-gs-continent": "لويه وچه",
+ "translate-gs-speakers": "وييونکي",
+ "translate-gs-count": "شمېرل",
+ "translate-gs-total": "ټولټال",
+ "translate-documentation-language": "د پيغام لاسوند",
+ "translate-searchprofile": "ژباړې",
+ "translate-searchprofile-tooltip": "په ټولو ژباړو کې پلټل",
+ "translate-search-languagefilter": "چاڼگر د ژبې له مخې:",
+ "log-name-translationreview": "د ژباړې د بياکتنې يادښت",
+ "logentry-translationreview-message": "$1 د $3 د ژباړو {{GENDER:$2|بياکتنه وکړه}}",
+ "group-translate-sandboxed": "ناتاييد شوي ژباړونکي",
+ "group-translate-sandboxed-member": "{{GENDER:$1|ناتاييد شوی ژباړونکی}}",
+ "translate-workflowstatus": "دريځ: $1",
+ "translate-workflow-set-doing": "امستنې...",
+ "translate-stats-workflow": "دريځ",
+ "translate-dynagroup-recent-label": "تازه ژباړې",
+ "translate-dynagroup-additions-label": "تازه ورگډېدنې",
+ "translate-msggroupselector-projects": "پيغام ډله",
+ "translate-msggroupselector-search-placeholder": "ډلې پلټل",
+ "translate-msggroupselector-search-all": "ټول",
+ "translate-msggroupselector-search-recent": "وروستني",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|څېرمه ډله|څېرمه ډلې}}",
+ "tux-languageselector": "ژباړه په",
+ "tux-tab-all": "ټول",
+ "tux-tab-untranslated": "ناژباړلي",
+ "tux-tab-outdated": "نېټه اوښتي",
+ "tux-tab-translated": "ژباړل شوی",
+ "tux-edit": "سمول",
+ "tux-status-translated": "ژباړل شوی",
+ "tux-status-saving": "خوندي کېږي...",
+ "tux-status-unsaved": "ناخوندي",
+ "tux-editor-editsummary-placeholder": "اختياري لنډيز",
+ "tux-editor-paste-original-button-label": "د سرچينې متن لېښل",
+ "tux-editor-discard-changes-button-label": "بدلونونه غورځول",
+ "tux-editor-save-button-label": "ژباړه خوندي کول",
+ "tux-editor-skip-button-label": "بل ته ورتېرېدل",
+ "tux-editor-cancel-button-label": "ناگارل",
+ "tux-editor-confirm-button-label": "ژباړه تاييدول",
+ "tux-editor-edit-desc": "لاسوند سمول",
+ "tux-editor-add-desc": "لاسوند ورگډول",
+ "tux-editor-suggestions-title": "وړانديزونه",
+ "tux-editor-in-other-languages": "په نورو ژبو کې",
+ "tux-editor-need-more-help": "نوره مرسته غواړې؟",
+ "tux-editor-ask-help": "د نورو مالوماتو غوښتنه",
+ "tux-notices-more": "{{PLURAL:$1|$1 نور}}",
+ "tux-notices-hide": "پټول",
+ "tux-editor-n-uses": "$1 {{PLURAL:$1|ځل|ځله}} کارېدلی",
+ "tux-editor-message-desc-more": "نور کتل",
+ "tux-editor-message-desc-less": "لږ کتل",
+ "tux-editor-clear-translated": "ژباړل شوي پټول",
+ "tux-editor-proofreading-mode": "بياکتل",
+ "tux-editor-translate-mode": "لړليک",
+ "tux-editor-proofreading-hide-own-translations": "خپلې ژباړې پټول",
+ "tux-editor-proofreading-show-own-translations": "خپلې ژباړې ښکاره کول",
+ "tux-proofread-action-tooltip": "بياکتل شوي په توگه په نښه کول",
+ "tux-proofread-edit-label": "سمول",
+ "tux-editor-page-mode": "مخ",
+ "tux-editor-outdated-notice": "دا ژباړه کېدای شي اوسمهالېدنې ته اړتيا ولري.",
+ "tux-editor-outdated-notice-diff-link": "توپيرونه ښکاره کول",
+ "tux-editor-doc-editor-placeholder": "د پيغام لاسوند",
+ "tux-editor-doc-editor-save": "لاسوند خوندي کول",
+ "tux-editor-doc-editor-cancel": "ناگارل",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|بل پيغام|نور پيغامونه}}",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|پيغام|پيغامونه}} رابرسېرېږي...",
+ "tux-message-filter-placeholder": "د چاڼگر لړليک",
+ "tux-message-filter-result": "د \"$2\" لپاره $1 {{PLURAL:$1|پايله وموندل شوه|پايلې وموندل شولې}}",
+ "tux-message-filter-advanced-button": "ژوره پلټنه",
+ "tux-message-filter-optional-messages-label": "اختياري پيغامونه",
+ "tux-proofread-translated-by-self": "ستاسې لخوا ژباړل شوي",
+ "tux-empty-list-all": "دا پيغام ډله تشه ده",
+ "tux-empty-list-all-guide": "د ژباړې لپاره يوه بله پيغام ډله وټاکئ",
+ "tux-empty-list-translated": "ناژباړلي پيغامونه",
+ "tux-empty-list-translated-guide": "تاسې په ژباړه کې مرسته کولی شئ",
+ "tux-empty-list-translated-action": "ژباړل",
+ "tux-empty-no-messages-to-display": "د ښکاره کولو لپاره پيغام نشته.",
+ "tux-empty-show-optional-messages": "اختياري پيغامونه ښکاره کول",
+ "tux-empty-nothing-to-proofread": "د بياکتنې لپاره څه نشته",
+ "tux-empty-you-can-help-providing": "تاسې د نوو ژباړو په برابرولو کې مرسته کولی شی",
+ "tux-empty-nothing-new-to-proofread": "د مخکتنې لپاره څه نوي نشته",
+ "tux-empty-you-can-review-already-proofread": "تاسې د پخوا څخه بياکتل شويو ژباړو بياکتنه کولی شی.",
+ "tux-empty-list-other": "د ژباړلو لپاره څه نشته.",
+ "tux-empty-list-other-guide": "تاسې د شته ژباړو په بياکتلو کې مرسته کولی شی",
+ "tux-empty-list-other-action": "د ژباړو بياکتنه",
+ "tux-empty-list-other-link": "ټول پيغامونه ښکاره کول",
+ "tux-editor-close-tooltip": "تړل",
+ "tux-editor-expand-tooltip": "غځول",
+ "tux-editor-collapse-tooltip": "پرځول",
+ "tux-editor-message-tools-history": "پېښليک",
+ "tux-editor-message-tools-delete": "ړنگول",
+ "tux-editor-message-tools-translations": "ټولې ژباړې",
+ "tux-editor-loading": "رابرسېرېږي...",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|بله ژبه|نورې ژبې}}",
+ "translate-statsbar-tooltip": "$1% ژباړل شوي، $2% مخکتل شوي",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% ژباړل شوي، $2% مخکتل شوي, $3% نېټه اوښتي",
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|بله ډله|نورې ډلې}}"
+}
diff --git a/Translate/i18n/core/pt-br.json b/Translate/i18n/core/pt-br.json
new file mode 100644
index 00000000..f9fe7e91
--- /dev/null
+++ b/Translate/i18n/core/pt-br.json
@@ -0,0 +1,438 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cainamarques",
+ "Caio1478",
+ "Dianakc",
+ "Dr03ramos",
+ "Eduardo Addad de Oliveira",
+ "Eduardo.mps",
+ "Eduardoaddad",
+ "Fabsouza1",
+ "Felipe L. Ewald",
+ "Giro720",
+ "Hamilton Abreu",
+ "He7d3r",
+ "Helder.wiki",
+ "Luan",
+ "Luckas",
+ "Luckas Blade",
+ "Mariagarbin",
+ "Opraco",
+ "TheEduGobi",
+ 555
+ ]
+ },
+ "translate": "Traduzir",
+ "translate-extensionname": "Traduzir",
+ "translate-desc": "[[Special:Translate|Página especial]] para traduzir o MediaWiki e mais",
+ "translate-fuzzybot-desc": "Esta é uma conta de sistema especial utilizada pela extensão de [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate Tradução] do MediaWiki, para manter as traduções.\nEsta conta faz parte do programa MediaWiki e não pertence a nenhum usuário.",
+ "translate-taskui-export-to-file": "Exportar no formato nativo",
+ "translate-taskui-export-as-po": "Exportar para tradução off-line",
+ "translate-taction-translate": "Traduzir",
+ "translate-taction-proofread": "Revisar",
+ "translate-taction-lstats": "Estatísticas de idiomas",
+ "translate-taction-mstats": "Estatísticas do grupo de mensagens",
+ "translate-taction-export": "Exportar",
+ "translate-taction-disabled": "Esta ação está desativada neste wiki.",
+ "translate-page-no-such-language": "O idioma especificado é inválido.",
+ "translate-page-no-such-group": "O grupo especificado é inválido.",
+ "translate-page-disabled": "As traduções para este idioma, neste grupo, foram desabilitadas.\nMotivo:\n\n<em>$1</em>",
+ "translate-language-disabled": "As traduções para este idioma estão desativadas.",
+ "translate-page-settings-legend": "Configurações",
+ "translate-page-group": "Grupo",
+ "translate-page-language": "Idioma",
+ "translate-page-limit": "Limite",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|mensagem|mensagens}} por página",
+ "translate-submit": "Obter",
+ "translate-page-navigation-legend": "Navegação",
+ "translate-page-showing": "Mostrando as mensagens de $1 a $2 de $3.",
+ "translate-page-showing-all": "Exibindo $1 {{PLURAL:$1|mensagem|mensagens}}.",
+ "translate-page-showing-none": "Não há mensagens a serem exibidas.",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "Próxima página",
+ "translate-prev": "Página anterior",
+ "translate-page-description-legend": "Informação sobre o grupo",
+ "translate-page-description-hasoptional": "Este grupo de mensagens possui mensagens opcionais.\nAs mensagens opcionais deverão ser traduzidas apenas quando o seu idioma possuir características especiais\ntais como não usar espaços ou transliterar nomes próprios. $1",
+ "translate-page-description-hasoptional-open": "Exibir mensagens opcionais.",
+ "translate-page-edit": "editar",
+ "translate-optional": "(opcional)",
+ "translate-ignored": "(ignorada)",
+ "translate-edit-title": "Editar \"$1\"",
+ "translate-edit-definition": "Definição da mensagem",
+ "translate-edit-contribute": "contribua",
+ "translate-edit-no-information": "<em>Esta mensagem ainda não foi documentada.\nCaso você saiba onde ou como ela é utilizada, poderá ajudar outros tradutores adicionando informações sobre esta mensagem.</em>",
+ "translate-edit-information": "Informações sobre a mensagem ($1)",
+ "translate-edit-warnings": "Avisos sobre traduções incompletas",
+ "translate-edit-tmmatch-source": "Texto de origem da tradução: $1",
+ "translate-edit-tmmatch": "$1% coincidente",
+ "translate-edit-nopermission": "Você precisa ter direitos de tradução para traduzir mensagens.",
+ "translate-edit-askpermission": "Obter permissão",
+ "exporttranslations": "Exportar traduções",
+ "translate-export-form-format": "Formato",
+ "translate-export-invalid-format": "Por favor, especifique um formato válido.",
+ "translate-export-not-supported": "A exportação de tradução não é suportada.",
+ "translate-export-format-notsupported": "O formato de exportação especificado não é suportado pelo grupo de mensagens.",
+ "translate-export-group-too-large": "O grupo de mensagens escolhido é muito grande. Escolha um grupo de mensagens com menos de $1 {{PLURAL:$1|mensagem|mensagens}} ou entre em contato com o administrador da tradução para obter orientação.",
+ "translate-checks-parameters": "{{PLURAL:$2|O parâmetro|Os parâmetros}} a seguir não {{PLURAL:$2|é usado|são usados}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|O parâmetro|Os parâmetros}} a seguir {{PLURAL:$2|é desconhecido|são desconhecidos}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "Há {{PLURAL:$2|um parênteses irregular|$2 parênteses irregulares}}: <strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|O link a seguir é problemático|Os $2 links a seguir são problemáticos}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|O seguinte link está|Os $2 seguintes links estão}} faltando:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "A definição usa <nowiki>{{PLURAL:}}</nowiki>, mas a tradução não.",
+ "translate-checks-plural-forms": "A <nowiki>{{PLURAL:}}</nowiki> foi fornecida em {{PLURAL:$1|uma forma|$1 formas}} mas {{PLURAL:$2|apenas uma forma é suportada|$2 formas são suportadas}} (excluindo formas 0= e 1=).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> tem formas duplicadas. <nowiki>{{PLURAL:$1|pastel|pastel}}</nowiki> deve ser escrito como <nowiki>{{PLURAL:$1|pastel}}</nowiki>.",
+ "translate-checks-gettext-plural-missing": "Esta tradução deve ter <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-unsupported": "Esta mensagem não suporta <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-count": "<nowiki>{{PLURAL:GETTEXT|}}</nowiki> aceita exatamente $1 {{PLURAL:$1|forma plural|formas plurais}}. Atualmente $2 {{PLURAL:$2|forma plural é|formas plurais são}} dado.",
+ "translate-checks-smartformat-plural-missing": "Esta tradução deve ter plural na variável $1.",
+ "translate-checks-smartformat-plural-unsupported": "Esta mensagem não suporta plural na variável $1.",
+ "translate-checks-smartformat-plural-count": "Número incorreto de formas plurais em <strong>$3</strong>. Deve ter $1 {{PLURAL:$1|forma plural|formas plurais}}. Atualmente $2 {{PLURAL:$2|forma plural é|formas plurais são}} dado.",
+ "translate-checks-unicode-plural-missing": "Esta tradução deve ter <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-unsupported": "Esta mensagem não suporta <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-invalid": "Formas plurais devem ser definidas como $1. Esta tradução contém $2.",
+ "translate-checks-pagename": "Espaço nominal diferente do da definição",
+ "translate-checks-format": "Esta tradução não segue a definição ou tem uma sintaxe inválida: $1",
+ "translate-checks-escape": "{{PLURAL:$2|O seguinte carácter de escape pode ter sido acidental|Os seguintes caráteres de escape podem ter sido acidentais}}: <strong>$1</strong>. {{PLURAL:$4|Um carácter de escape válido seria|Entre os caráteres de escape válidos incluem-se os seguintes:}} $3.",
+ "translate-checks-parametersnotequal": "A contagem de parâmetros detectou {{PLURAL:$1|$1}}. É necessário que sejam {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> está formatado incorretamente.",
+ "translate-checks-fudforum-syntax": "Use, neste projeto, <nowiki>$1</nowiki> em vez de <nowiki>$2</nowiki>.",
+ "translate-checks-newline-missing-start": "{{PLURAL:$1|Falta $1 carácter|Faltam $1 caracteres}} de nova linha em falta no início da tradução.",
+ "translate-checks-newline-missing-end": "{{PLURAL:$1|Falta $1 carácter|Faltam $1 caracteres}} de nova linha em falta no fim da tradução.",
+ "translate-checks-newline-extra-start": "Há $1 {{PLURAL:$1|carácter|caracteres}} de nova linha a mais no início da tradução.",
+ "translate-checks-newline-extra-end": "Há $1 {{PLURAL:$1|carácter|caracteres}} de nova linha a mais no fim da tradução.",
+ "translate-checks-value-not-present": "A tradução deve ser igual a {{PLURAL:$1|1=|um dos seguintes valores:}} $1.",
+ "translate-checks-replacement": "Use $2 em vez de $1.",
+ "translate-checks-empty": "Tradução sem conteúdo ou apenas espaço em branco não é permitido.",
+ "translate-pref-editassistlang": "Idiomas auxiliares:",
+ "prefs-translate": "Opções de tradução",
+ "translate-pref-editassistlang-help": "Liste os idiomas, separados por vírgulas.\nQuando você estiver traduzindo, as traduções nos idiomas aqui definidos também serão exibidas.\nOs idiomas padrão deste recurso variam de acordo com a língua de sua interface.",
+ "translate-pref-editassistlang-bad": "A listagem possui códigos de idioma inválidos:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Editar usando a interface de tradução",
+ "action-translate": "editar usando a interface de tradução",
+ "right-translate-manage": "Gerenciar grupos de mensagens",
+ "action-translate-manage": "gerenciar grupos de mensagens",
+ "right-translate-import": "Importar traduções offline",
+ "action-translate-import": "importar traduções off-line",
+ "right-translate-messagereview": "Revisar traduções",
+ "action-translate-messagereview": "revisar traduções",
+ "right-translate-groupreview": "Alterar estado do fluxo de trabalho de grupos de mensagens",
+ "action-translate-groupreview": "alterar o estado do fluxo de trabalho dos grupos de mensagens",
+ "translate-rcfilters-translations": "Traduções",
+ "translate-rcfilters-translations-only-label": "Traduções",
+ "translate-rcfilters-translations-only-desc": "Alterações para páginas traduzidas.",
+ "translate-rcfilters-translations-filter-label": "Não traduções",
+ "translate-rcfilters-translations-filter-desc": "Todas as alterações que não são de traduções.",
+ "translate-rcfilters-translations-site-label": "Mensagens de sistema",
+ "translate-rcfilters-translations-site-desc": "Personalizações das mensagens de sistema no espaço nominal MediaWiki.",
+ "translate-rc-translation-filter": "Filtrar traduções:",
+ "translate-rc-translation-filter-no": "Não filtrar",
+ "translate-rc-translation-filter-only": "Mostrar somente traduções",
+ "translate-rc-translation-filter-filter": "Não mostrar traduções",
+ "translate-rc-translation-filter-site": "Só mudanças às mensagens do site",
+ "translationstats": "Estatísticas de tradução",
+ "translate-stats-edits": "Edições",
+ "translate-stats-users": "Tradutores",
+ "translate-stats-registrations": "Registros",
+ "translate-stats-reviews": "Análises",
+ "translate-stats-reviewers": "Revisores",
+ "translate-statsf-intro": "É possível gerar estatísticas simples a partir deste formulário.\nTodos os valores têm limites máximos e mínimos.",
+ "translate-statsf-options": "Opções do gráfico",
+ "translate-statsf-width": "Largura em pixels:",
+ "translate-statsf-height": "Altura em pixels:",
+ "translate-statsf-days": "Período de tempo em dias:",
+ "translate-statsf-start": "Data inicial:",
+ "translate-statsf-scale": "Escala:",
+ "translate-statsf-scale-years": "Anos",
+ "translate-statsf-scale-months": "Meses",
+ "translate-statsf-scale-weeks": "Semanas",
+ "translate-statsf-scale-days": "Dias",
+ "translate-statsf-scale-hours": "Horas",
+ "translate-statsf-count": "Dados:",
+ "translate-statsf-count-edits": "Número de edições",
+ "translate-statsf-count-users": "Tradutores ativos",
+ "translate-statsf-count-registrations": "Novos usuários",
+ "translate-statsf-count-reviews": "Revisões de traduções",
+ "translate-statsf-count-reviewers": "Revisores",
+ "translate-statsf-language": "Códigos de idiomas, separados por vírgulas:",
+ "translate-statsf-group": "Códigos de grupos, separados por vírgulas:",
+ "translate-statsf-submit": "Visualizar",
+ "translate-statsf-unknown-error": "Ocorreu um erro desconhecido.",
+ "translate-statsf-error-message": "Ocorreu um erro ao carregar o gráfico: $1",
+ "translate-statsf-graph-alt-text-info": "A alternativa de texto para as estatísticas de tradução está na tabela de dados abaixo.",
+ "translate-statsf-alt-text": "Esta é a alternativa em texto para as estatísticas de tradução.",
+ "translate-statsf-embed": "Código para incorporar o gráfico de estatísticas de tradução em outras páginas.",
+ "translate-tag-page-desc": "Tradução da página wiki [[$2|$1]] de $3 ($4).",
+ "translate-sidebar-alltrans": "Em outros idiomas",
+ "translations": "Todas as traduções",
+ "translations-summary": "Insira abaixo o nome de uma mensagem para mostrar todas as traduções disponíveis.",
+ "translate-translations-no-message": "\"$1\" não é uma mensagem traduzível",
+ "translate-translations-none": "Não existem traduções para \"$1\"",
+ "translate-translations-count": "{{PLURAL:$1|Foi encontrada uma tradução|Foram encontradas $1 traduções}}.",
+ "translate-translations-fieldset-title": "Mensagem",
+ "translate-translations-messagename": "Nome:",
+ "translate-translations-project": "Projeto:",
+ "translate-translations-including-no-param": "Especifique uma chave de mensagem válida no parâmetro subpágina",
+ "translate-translations-history-short": "h",
+ "languagestats": "Estatísticas de idiomas",
+ "languagestats-summary": "Esta página mostra estatísticas de tradução para todos os grupos de mensagens de um idioma.",
+ "messagegroupstats-summary": "Esta página mostra as estatísticas do grupo de mensagens.",
+ "languagestats-stats-for": "Estatísticas de tradução para $1 ($2).",
+ "languagestats-recenttranslations": "traduções recentes",
+ "translate-langstats-incomplete": "Algumas das estatísticas desta página estão incompletas. Atualize a página para obter mais dados.",
+ "translate-langstats-expand": "expandir",
+ "translate-langstats-collapse": "recolher",
+ "translate-langstats-expandall": "expandir todas",
+ "translate-langstats-collapseall": "recolher todas",
+ "translate-language-code": "Código do idioma",
+ "translate-language-code-field-name": "Código do idioma:",
+ "translate-suppress-complete": "Omitir grupos de mensagens completamente traduzidos",
+ "translate-ls-noempty": "Omitir os grupos de mensagens sem tradução iniciada",
+ "translate-language": "Idioma",
+ "translate-total": "Total de mensagens",
+ "translate-untranslated": "Não traduzidas",
+ "translate-percentage-complete": "Progresso",
+ "translate-percentage-fuzzy": "Desatualizadas",
+ "translate-percentage-proofread": "Revisado",
+ "translate-languagestats-overall": "Soma de todos os grupos de mensagens",
+ "translate-ls-submit": "Mostrar estatísticas",
+ "translate-ls-column-group": "Grupo de mensagens",
+ "translate-mgs-pagename": "Estatísticas do grupo de mensagens",
+ "translate-mgs-fieldset": "Opções de exibição",
+ "translate-mgs-group": "Grupo de mensagens:",
+ "translate-mgs-nocomplete": "Ocultar idiomas com traduções completas",
+ "translate-mgs-noempty": "Ocultar idiomas sem traduções",
+ "translate-mgs-submit": "Mostrar estatísticas",
+ "translate-mgs-column-language": "Idioma",
+ "translate-mgs-totals": "{{PLURAL:$1|A língua em conjunto|Todas as $1 línguas em conjunto}}",
+ "translate-mgs-invalid-group": "O grupo especificado ($1) não existe.",
+ "translate-mgs-nothing": "Sem dados para as estatísticas solicitadas.",
+ "supportedlanguages": "Idiomas ativos",
+ "supportedlanguages-summary": "Esta página apresenta uma lista de idiomas ativos no {{SITENAME}},\njunto dos respectivos nomes dos tradutores de cada idioma.\nQuanto maior for exibido um nome, com mais traduções a pessoa terá contribuído.\nA cor do sublinhado é um indicativo de atividades recentes do usuário.",
+ "supportedlanguages-colorlegend": "Legenda: última tradução $1 dias atrás.",
+ "supportedlanguages-portallink": "[$1] $2 - $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-sqlite-error": "O SQLite não é suportado",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Tradutor|Tradutora}}|Tradutores}}: $1",
+ "supportedlanguages-recenttranslations": "traduções recentes",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|idioma|idiomas}} ao todo.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|edição|edições}} - a última edição foi há $3 {{PLURAL:$3|dia|dias}}",
+ "translate-supportedlanguages-cached": "Esta informação foi armazenada em cache em $1 atrás.",
+ "abusefilter-edit-builder-vars-translate-source-text": "Texto original da unidade de tradução",
+ "abusefilter-edit-builder-vars-translate-target-language": "Idioma alvo para tradução",
+ "translate-jssti-add": "Adicionar à lista",
+ "managemessagegroups": "Gerenciamento de grupos de mensagens",
+ "translate-smg-notallowed": "Você não tem os privilégios necessários para executar esta ação.",
+ "translate-smg-nochanges": "Não há alterações a processar.",
+ "translate-smg-submit": "Enviar alterações para processamento",
+ "translate-smg-submitted": "As definições de mensagens foram atualizadas. As alterações estão sendo processadas em segundo plano.",
+ "translate-smg-submitted-with-failure": "Atualizando {{PLURAL:$1|definição|definições}} de mensagem falhou pelo seguinte {{PLURAL:$1|grupo|grupos}} - $2. $3",
+ "translate-smg-submitted-others-processing": "As definições de mensagens para outros grupos estão sendo processadas em segundo plano.",
+ "translate-smg-more": "Haverá mais mudanças para processar depois de submeter estas mudanças.",
+ "translate-smg-left": "Mensagem no wiki",
+ "translate-smg-right": "Alterações de entrada",
+ "translate-smg-rename-select": "Selecionar",
+ "translate-smg-rename-cancel": "Cancelar",
+ "translate-smg-rename-search": "Pesquisar mensagem correspondente...",
+ "translate-smg-rename-select-err": "Selecione uma mensagem para renomear",
+ "translate-smg-rename-no-msg": "Nenhuma mensagem encontrada.",
+ "translate-smg-rename-new": "Adicionar como novo...",
+ "translate-smg-rename-rename": "Adicionar como renomear de...",
+ "translate-smg-rename-dialog-title": "Selecione renomear correspondente para $1",
+ "translate-smg-changeset-modified": "O conjunto de alterações foi modificado por outro usuário ou processo. Suas alterações não podem ser publicadas, pois podem substituir as alterações. Atualize a página para ver as alterações mais recentes.",
+ "translate-smg-no-groups-in-sync": "Não há grupos atualmente em sincronização",
+ "translate-smg-strong-sync-help": "Ajuda",
+ "translate-smg-groups-in-sync": "Grupos atualmente em sincronização",
+ "translate-smg-groups-in-sync-list": "Lista de grupos atualmente em processamento em segundo plano:",
+ "translate-smg-groups-with-error-title": "Grupos que tiveram erros durante a sincronização",
+ "translate-smg-groups-with-error-desc": "Lista de grupos e suas mensagens que tiveram erros durante a sincronização:",
+ "translate-smg-group-with-error-summary": "$1 {{PLURAL:$1|mensagem|mensagens}} com erros:",
+ "translate-smg-group-message-action-history": "Histórico",
+ "translate-smg-group-action-resolve": "Marcar como resolvido",
+ "translate-smg-group-sync-error-warn": "Este grupo tinha um erro durante a sincronização. Por favor, corrija os erros antes de processar este grupo.",
+ "translate-smg-group-message-tag-outdated": "Desatualizadas",
+ "translate-smg-group-message-tag-rename": "Renomear",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|Etiqueta|Etiquetas}}:",
+ "translate-smg-group-message-message-content": "Conteúdo:",
+ "translate-smg-group-message-message-target": "Destinatário:",
+ "translate-smg-group-message-message-replacement": "Substituição:",
+ "translate-smg-group-message-message-other-langs": "Outros idiomas:",
+ "translate-smg-loading": "Carregando...",
+ "translate-smg-unknown-error": "Ocorreu um erro desconhecido ao processar sua solicitação.",
+ "translate-manage-import-diff": "Mensagem $1 | Ações: $2",
+ "translate-manage-import-new": "Nova mensagem $1",
+ "translate-manage-import-deleted": "Mensagem apagada $1",
+ "translate-manage-action-import": "Importar",
+ "translate-manage-action-conflict": "Importar e marcar traduções para revisão",
+ "translate-manage-action-ignore": "Ignorar",
+ "translate-manage-action-fuzzy": "Importar e marcar traduções para revisão",
+ "translate-manage-action-rename-fuzzy": "Renomear e traduções difusas",
+ "translate-manage-action-rename": "Renomear",
+ "translate-manage-action-ignore-change": "Ignorar alteração de tradução",
+ "translate-manage-nochanges": "Não há alterações nas definições das mensagens deste grupo.",
+ "translate-manage-nochanges-other": "Não houve alterações para este idioma.\nUse o link abaixo para retornar à visualização de detalhes do grupo.",
+ "translate-manage-inconsistent": "Detectada inconsistência na solicitação.\nConfira as alterações e tente novamente.\nDetalhes: $1.",
+ "translate-manage-toolong": "Foi excedido o tempo máximo de $1 {{PLURAL:$1|segundo|segundos}} de processamento.\nReenvie o formulário para continuar processando.",
+ "translate-manage-import-summary": "Importando uma nova versão a partir de fonte externa",
+ "translate-manage-import-ignore": "Pulando menssagem $1.",
+ "translate-manage-import-rename-summary": "Renomeado na fonte externa",
+ "translate-manage-conflict-summary": "Importando uma nova versão a partir de fonte externa.\nVerifique-a, por favor.",
+ "translate-manage-submit": "Executar",
+ "translate-manage-intro-other": "Abaixo está a lista de mudanças de tradução no idioma $1.\nPor favor, revise essas mudanças e escolha uma ação para cada atualização.\nSe optar por ignorar as alterações, esta ação é apenas temporária.",
+ "translate-manage-import-ok": "Importado: $1",
+ "translate-manage-import-done": "Importação completa!",
+ "translate-manage-empty-content": "O conteúdo está vazio",
+ "translate-manage-key-reused": "Esta mensagem já existe na wiki. Verifique se há uma reutilização acidental de uma chave antiga.",
+ "translate-manage-source-message-not-found": "Definição de mensagem não encontrada",
+ "importtranslations": "Importar traduções",
+ "translate-import-from-local": "Enviar arquivo local:",
+ "translate-import-load": "Enviar arquivo",
+ "translate-import-err-dl-failed": "Não foi possível obter o arquivo:\n$1",
+ "translate-import-err-ul-failed": "O upload do arquivo falhou",
+ "translate-import-err-invalid-title": "Foi fornecido um nome inválido para o arquivo <nowiki>$1</nowiki>.",
+ "translate-import-err-no-such-file": "O arquivo <nowiki>$1</nowiki> não existe ou não foi enviado.",
+ "translate-import-err-stale-group": "O grupo de mensagens a que este arquivo pertence não existe.",
+ "translate-import-err-no-headers": "Este não é um arquivo Gettext compatível com o formato da extensão Translate:\nNão foi possível determinar o grupo e a língua a partir dos cabeçalhos.",
+ "translate-js-support-unsaved-warning": "Você possui traduções não publicadas.",
+ "translate-gs-pos": "Lugar",
+ "translate-gs-code": "Código",
+ "translate-gs-continent": "Continente",
+ "translate-gs-speakers": "Falantes",
+ "translate-gs-score": "Pontos",
+ "translate-gs-multiple": "Vários",
+ "translate-gs-count": "Contagem",
+ "translate-gs-total": "Total",
+ "translate-gs-avgscore": "Pont. média",
+ "translate-documentation-language": "Documentação da mensagem",
+ "translate-searchprofile": "Traduções",
+ "translate-searchprofile-tooltip": "Pesquisar todas as traduções",
+ "translate-searchprofile-note": "Mais opções de pesquisa estão disponíveis com a [$1 pesquisa de tradução].",
+ "translate-search-languagefilter": "Filtrar por idioma:",
+ "translate-search-nofilter": "Não filtrar",
+ "log-name-translationreview": "Registro de revisão de traduções",
+ "log-description-translationreview": "Registro de todas as revisões feitas em traduções e grupos de traduções.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|revisou}} a tradução $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|alterou}} o estado das traduções de $3 para $4, de $6 para $7",
+ "group-translate-sandboxed": "Tradutores reprovados",
+ "group-translate-sandboxed-member": "{{GENDER:$1|tradutor reprovado}}",
+ "right-translate-sandboxmanage": "Gerenciar usuários em área restrita",
+ "action-translate-sandboxmanage": "gerenciar usuários em área restrita",
+ "right-translate-sandboxaction": "Executar ações da lista de permissões para usuários da área de testes",
+ "action-translate-sandboxaction": "executar ações da lista de permissões para usuários da área de testes",
+ "translate-workflow-state-": "(indefinida)",
+ "translate-workflowstatus": "Status: $1",
+ "translate-workflow-set-doing": "Definindo...",
+ "translate-workflow-autocreated-summary": "Criação automática de página para o status de fluxo de trabalho $1",
+ "translate-stats-workflow": "Estado",
+ "translate-workflowgroup-label": "Status do fluxo de trabalho",
+ "translate-workflowgroup-desc": "Este grupo de mensagens mostra os status do fluxo de trabalho de traduções.\nOs status são definidos na variável de configuração $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Traduções recentes",
+ "translate-dynagroup-recent-desc": "Este grupo de mensagens mostra todas as traduções recentes para este idioma.\nUsado principalmente em tarefas de revisão.",
+ "translate-dynagroup-additions-label": "Adições recentes",
+ "translate-dynagroup-additions-desc": "Este grupo de mensagens exibe as mensagens novas e alteradas.",
+ "translate-msggroupselector-projects": "Grupo de mensagens",
+ "translate-msggroupselector-search-placeholder": "Pesquisar grupos",
+ "translate-msggroupselector-search-all": "Todas",
+ "translate-msggroupselector-search-recent": "Recentes",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|subgrupo|subgrupos}}",
+ "tux-languageselector": "Traduzir para",
+ "tux-tab-all": "Todas",
+ "tux-tab-untranslated": "Não traduzidas",
+ "tux-tab-outdated": "Desatualizadas",
+ "tux-tab-translated": "Traduzido",
+ "tux-tab-unproofread": "Não revisado",
+ "tux-edit": "Editar",
+ "tux-status-optional": "Opcional",
+ "tux-status-fuzzy": "Desatualizadas",
+ "tux-status-proofread": "Revisada",
+ "tux-status-translated": "Traduzido",
+ "tux-status-saving": "Publicando…",
+ "tux-status-unsaved": "Não publicado",
+ "tux-save-unknown-error": "Ocorreu um erro desconhecido.",
+ "tux-editor-editsummary-placeholder": "Resumo opcional",
+ "tux-editor-paste-original-button-label": "Colar texto da fonte",
+ "tux-editor-discard-changes-button-label": "Descartar alterações",
+ "tux-editor-save-button-label": "Publicar tradução",
+ "tux-editor-skip-button-label": "Pular para próxima",
+ "tux-editor-cancel-button-label": "Cancelar",
+ "tux-editor-confirm-button-label": "Confirmar tradução",
+ "tux-editor-proofread-button-label": "Marcar como revisado",
+ "tux-editor-shortcut-info": "Pressione \"$1\" para confirmar e passar à mensagem seguinte, \"$2\" para pular, \"$4\" para fornecer um resumo ou mantenha premido \"$3\" para ver outros atalhos.",
+ "tux-editor-edit-desc": "Editar documentação",
+ "tux-editor-add-desc": "Adicionar documentação",
+ "tux-editor-suggestions-title": "Sugestões",
+ "tux-editor-in-other-languages": "Em outros idiomas",
+ "tux-editor-need-more-help": "Precisa de mais ajuda?",
+ "tux-editor-ask-help": "Peça mais informações",
+ "tux-editor-tm-match": "$1% coincidente",
+ "tux-notices-more": "{{PLURAL:$1|$1 mais}}",
+ "tux-notices-hide": "ocultar",
+ "tux-editor-save-failed": "A publicação da tradução falhou: $1",
+ "tux-editor-n-uses": "usada $1 {{PLURAL:$1|vez|vezes}}",
+ "tux-editor-message-desc-more": "Ver mais",
+ "tux-editor-message-desc-less": "Ver menos",
+ "tux-editor-clear-translated": "Ocultar traduzidas",
+ "tux-editor-proofreading-mode": "Revisar",
+ "tux-editor-translate-mode": "Lista",
+ "tux-editor-proofreading-hide-own-translations": "Ocultar suas traduções",
+ "tux-editor-proofreading-show-own-translations": "Mostrar suas traduções",
+ "tux-proofread-action-tooltip": "Marcar como revisado",
+ "tux-proofread-edit-label": "Editar",
+ "tux-editor-page-mode": "Página",
+ "tux-editor-outdated-notice": "Esta tradução pode precisar de atualização.",
+ "tux-editor-outdated-notice-diff-link": "Mostrar diferenças",
+ "tux-editor-doc-editor-placeholder": "Documentação da mensagem",
+ "tux-editor-doc-editor-save": "Publicar documentação",
+ "tux-editor-doc-editor-cancel": "Cancelar",
+ "tux-messagetable-more-messages": "mais $1 {{PLURAL:$1|mensagem|mensagens}}",
+ "tux-messagetable-loading-messages": "Carregando {{PLURAL:$1|mensagem|mensagens}}.",
+ "tux-message-filter-placeholder": "Filtrar lista",
+ "tux-message-filter-result": "{{PLURAL:$1|Encontrado $1 resultado|Encontrados $1 resultados}} para “$2”",
+ "tux-message-filter-advanced-button": "Pesquisa avançada",
+ "tux-message-filter-optional-messages-label": "Mensagens opcionais",
+ "tux-proofread-translated-by-self": "Traduzido por você",
+ "tux-empty-list-all": "Este grupo de mensagens está vazio",
+ "tux-empty-list-all-guide": "Selecione um grupo de mensagens diferente para traduzir",
+ "tux-translate-page-no-such-group": "<strong>O grupo indicado não existe.</strong> Selecione um grupo de mensagens diferente.",
+ "tux-empty-list-translated": "Nenhuma mensagem traduzida",
+ "tux-empty-list-translated-guide": "Você pode ajudar traduzindo",
+ "tux-empty-list-translated-action": "Traduzir",
+ "tux-empty-no-messages-to-display": "Sem mensagens para exibir.",
+ "tux-empty-there-are-optional": "Existem mensagens opcionais não mostradas na lista",
+ "tux-empty-show-optional-messages": "Exibir mensagens opcionais",
+ "tux-empty-no-outdated-messages": "Nenhuma mensagem desatualizada",
+ "tux-empty-nothing-to-proofread": "Nada para revisar",
+ "tux-empty-you-can-help-providing": "Você pode ajudar a proporcionar novas traduções",
+ "tux-empty-nothing-new-to-proofread": "Nada de novo para revisar",
+ "tux-empty-you-can-review-already-proofread": "Você pode revisar traduções já revisadas por outros.",
+ "tux-empty-list-other": "Não há nada para traduzir",
+ "tux-empty-list-other-guide": "Você pode ajudar a revisar traduções existentes",
+ "tux-empty-list-other-action": "Revisar traduções",
+ "tux-empty-list-other-link": "Exibir todas as mensagens",
+ "tux-editor-close-tooltip": "Fechar",
+ "tux-editor-expand-tooltip": "Expandir",
+ "tux-editor-collapse-tooltip": "Recolher",
+ "tux-editor-message-tools-show-editor": "Mostrar no editor wiki",
+ "tux-editor-message-tools-history": "Histórico",
+ "tux-editor-message-tools-delete": "Excluir",
+ "tux-editor-message-tools-translations": "Todas as traduções",
+ "tux-editor-message-tools-linktothis": "Ligação para essa mensagem",
+ "tux-editor-loading": "Carregando...",
+ "tux-editor-loading-failed": "Falha ao carregar os auxílios de tradução: $1",
+ "translate-search-more-languages-info": "mais $1 {{PLURAL:$1|idioma|idiomas}}",
+ "translate-statsbar-tooltip": "$1% traduzido, $2% revisado",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% traduzido, $2% revisado, $3% desatualizado",
+ "translate-search-more-groups-info": "mais $1 {{PLURAL:$1|grupo|grupos}}",
+ "translate-syntax-error": "Tradução contém erros de sintaxe",
+ "tux-session-expired": "Você não está logado. Por favor entre em uma aba separada. Alternativamente, faça uma cópia das traduções não salvos, faça o login, retorne a esta página e inserir as traduções novamente.",
+ "tux-nojs": "Esta ferramenta não funciona sem o JavaScript. Ou o JavaScript está desativado, ou não funcionou, ou este browser não é suportado.",
+ "specialpages-group-translation": "Tradução",
+ "content-model-translate-messagebundle": "Pacote de mensagem traduzível.",
+ "translate-messagebundle-validation-error": "Pacote de mensagem inválido: $1",
+ "translate-messagebundle-error-invalid-array": "O pacote de mensagens deve ser um objeto JSON. Tipo atual: $1",
+ "translate-messagebundle-error-key-empty": "O pacote de mensagens não deve conter uma chave vazia",
+ "translate-messagebundle-error-key-too-long": "A chave \"$1\" é muito longa",
+ "translate-messagebundle-error-key-invalid-characters": "Chave \"$1\" contém caracteres não permitidos",
+ "translate-messagebundle-error-invalid-value": "Chave \"$1\" não contém valor de string",
+ "translate-messagebundle-error-empty-value": "Chave \"$1\" não tem valor"
+}
diff --git a/Translate/i18n/core/pt.json b/Translate/i18n/core/pt.json
new file mode 100644
index 00000000..e4be5b22
--- /dev/null
+++ b/Translate/i18n/core/pt.json
@@ -0,0 +1,457 @@
+{
+ "@metadata": {
+ "authors": [
+ "Athena in Wonderland",
+ "Cainamarques",
+ "Crazymadlover",
+ "Emma Franzen",
+ "Fúlvio",
+ "Giro720",
+ "Hamilton Abreu",
+ "Lijealso",
+ "Luckas",
+ "Malafaya",
+ "Mansil alfalb",
+ "SandroHc",
+ "Vitorvicentevalente",
+ "Waldir",
+ "Waldyrious",
+ 555
+ ]
+ },
+ "translate": "Traduzir",
+ "translate-desc": "[[Special:Translate|Página especial]] para traduzir o MediaWiki e outras aplicações",
+ "translate-fuzzybot-desc": "Esta é uma conta de sistema especial usada pela [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate extensão Translate] do MediaWiki, que é utilizada para manter as traduções. A conta faz parte do ''software'' MediaWiki e não pertence a nenhum utilizador.",
+ "translate-taskui-export-to-file": "Exportar no formato original",
+ "translate-taskui-export-as-po": "Exportar para tradução ''off-line''",
+ "translate-taskui-export-as-csv": "Exportar em formato CSV",
+ "translate-export-csv-message-title": "Título da mensagem de tradução",
+ "translate-export-csv-definition": "Definição da mensagem",
+ "translate-taction-translate": "Traduzir",
+ "translate-taction-proofread": "Rever",
+ "translate-taction-lstats": "Estatísticas por língua",
+ "translate-taction-mstats": "Estatísticas por grupo de mensagens",
+ "translate-taction-export": "Exportar",
+ "translate-taction-disabled": "Esta operação foi impossibilitada nesta wiki.",
+ "translate-page-no-such-language": "A língua especificada é inválida.",
+ "translate-page-no-such-group": "O grupo especificado é inválido.",
+ "translate-page-disabled": "As traduções para esta língua, neste grupo, foram impossibilitadas. Motivo:\n\n<em>$1</em>",
+ "translate-language-disabled": "A tradução para esta língua foi impossibilitada.",
+ "translate-page-settings-legend": "Configurações",
+ "translate-page-group": "Grupo",
+ "translate-page-language": "Língua",
+ "translate-page-limit": "Limite",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|mensagem|mensagens}} por página",
+ "translate-submit": "Obter",
+ "translate-page-navigation-legend": "Navegação",
+ "translate-page-showing": "A apresentar as mensagens $1 a $2 de $3.",
+ "translate-page-showing-all": "A apresentar $1 {{PLURAL:$1|mensagem|mensagens}}.",
+ "translate-page-showing-none": "Não há mensagens para apresentar.",
+ "translate-next": "Página seguinte",
+ "translate-prev": "Página anterior",
+ "translate-page-description-legend": "Informação sobre o grupo",
+ "translate-page-description-hasoptional": "Este grupo contém mensagens opcionais.\nAs mensagens opcionais só devem ser traduzidas quando a sua língua tem requisitos especiais, como o não usar espaços ou a transliteração de nomes próprios. $1",
+ "translate-page-description-hasoptional-open": "Mostrar as mensagens opcionais.",
+ "translate-page-edit": "editar",
+ "translate-optional": "(opcional)",
+ "translate-ignored": "(ignorada)",
+ "translate-edit-title": "Editar \"$1\"",
+ "translate-edit-definition": "Definição da mensagem",
+ "translate-edit-contribute": "contribua",
+ "translate-edit-no-information": "<em>Esta mensagem ainda não foi documentada.\nCaso saiba onde ou como ela é utilizada, pode ajudar os outros tradutores acrescentando as informações necessárias nesta mensagem.</em>",
+ "translate-edit-information": "Informações sobre a mensagem ($1)",
+ "translate-edit-warnings": "Avisos sobre traduções incompletas",
+ "translate-edit-tmmatch-source": "Texto de origem da tradução: $1",
+ "translate-edit-tmmatch": "$1% coincidente",
+ "translate-edit-nopermission": "Precisa de ter direitos de tradutor para traduzir mensagens.",
+ "translate-edit-askpermission": "Obter permissão",
+ "exporttranslations": "Exportar traduções",
+ "translate-export-form-format": "Formato",
+ "translate-export-invalid-format": "Por favor, especifique um formato válido.",
+ "translate-export-not-supported": "A exportação de traduções não é suportada.",
+ "translate-export-format-notsupported": "O formato de exportação especificado não é suportado pelo grupo de mensagens.",
+ "translate-export-group-too-large": "O grupo de mensagens escolhido é demasiado grande. Escolha um grupo com menos de $1 {{PLURAL:$1|mensagem|mensagens}} ou contacte o administrador de traduções para obter orientação.",
+ "translate-checks-parameters": "{{PLURAL:$2|O seguinte parâmetro não é usado|Os seguintes parâmetros não são usados}}: <strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|O seguinte parâmetro é desconhecido|Os seguintes parâmetros são desconhecidos}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "Há {{PLURAL:$2|um parêntese irregular|$2 parênteses irregulares}}: <strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|A seguinte hiperligação tem|As seguintes $2 hiperligações têm}} problemas: <strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Falta a seguinte hiperligação|Faltam as seguintes $2 hiperligações}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "A definição usa <nowiki>{{PLURAL:}}</nowiki>, mas a tradução não.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> recebeu {{PLURAL:$1|uma grafia|$1 grafias}}, mas {{PLURAL:$2|só é permitida uma grafia|são permitidas $2 grafias}} (excluindo as formas 0= e 1=).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> tem grafias duplicadas. Quando o singular e o plural têm a mesma grafia, por exemplo em <nowiki>{{PLURAL:$1|URL|URL}}</nowiki> deve usar-se <nowiki>{{PLURAL:$1|URL}}</nowiki>.",
+ "translate-checks-gettext-plural-missing": "Esta tradução tem de ter <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-unsupported": "Esta mensagem não suporta <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-count": "<nowiki>{{PLURAL:GETTEXT|}}</nowiki> aceita exatamente $1 {{PLURAL:$1|forma plural|formas plurais}}. Neste momento, {{PLURAL:$2|é fornecida $2 forma plural|são fornecidas $2 formas plurais}}.",
+ "translate-checks-smartformat-plural-missing": "Esta tradução tem de ter plural na variável $1.",
+ "translate-checks-smartformat-plural-unsupported": "Esta mensagem não suporta plural na variável $1.",
+ "translate-checks-smartformat-plural-count": "Número incorreto de formas plurais em <strong>$3</strong>. Tem de ter $1 {{PLURAL:$1|forma plural|formas plurais}}. Neste momento {{PLURAL:$2|é dada $2 forma plural|são dadas $2 formas plurais}}.",
+ "translate-checks-unicode-plural-missing": "Esta tradução tem de ter <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-unsupported": "Esta mensagem não suporta <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-invalid": "As formas plurais devem ser definidas como $1. Esta tradução contém $2.",
+ "translate-checks-pagename": "Domínio modificado relativamente à definição",
+ "translate-checks-format": "Esta tradução não segue a definição ou tem uma sintaxe inválida: $1",
+ "translate-checks-escape": "{{PLURAL:$2|O seguinte carácter de escape pode ter sido acidental|Os seguintes carateres de escape podem ter sido acidentais}}: <strong>$1</strong>. {{PLURAL:$4|Um carácter de escape válido seria|Entre os caracteres de escape válidos incluem-se os seguintes:}} $3.",
+ "translate-checks-parametersnotequal": "O número de parâmetros é {{PLURAL:$1|$1}} mas devia ser {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> está incorreto.",
+ "translate-checks-fudforum-syntax": "Use <nowiki>$1</nowiki> em vez de <nowiki>$2</nowiki> neste projeto.",
+ "translate-checks-newline-missing-start": "{{PLURAL:$1|Falta $1 carácter|Faltam $1 caracteres}} de nova linha em falta no início da tradução.",
+ "translate-checks-newline-missing-end": "{{PLURAL:$1|Falta $1 carácter|Faltam $1 caracteres}} de nova linha em falta no fim da tradução.",
+ "translate-checks-newline-extra-start": "Há $1 {{PLURAL:$1|carácter|caracteres}} de nova linha a mais no início da tradução.",
+ "translate-checks-newline-extra-end": "Há $1 {{PLURAL:$1|carácter|caracteres}} de nova linha a mais no fim da tradução.",
+ "translate-checks-value-not-present": "A tradução tem de ser igual a {{PLURAL:$1|1=|um dos seguintes valores: }}$1.",
+ "translate-checks-replacement": "Use $2 em vez de $1.",
+ "translate-checks-empty": "Traduções sem conteúdo ou só com espaço em branco não são permitidas.",
+ "translate-pref-editassistlang": "Línguas de auxílio:",
+ "prefs-translate": "Opções de tradução",
+ "translate-pref-editassistlang-help": "Lista de códigos de língua separados por vírgulas.\nQuando estiver a traduzir, ser-lhe-ão também apresentadas as traduções para estas línguas.\nA lista por omissão depende da sua língua.",
+ "translate-pref-editassistlang-bad": "Código de língua inválido na lista:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Editar usando a interface de tradução",
+ "action-translate": "editar usando a interface de tradução",
+ "right-translate-manage": "Gerir grupos de mensagens",
+ "action-translate-manage": "gerir grupos de mensagens",
+ "right-translate-import": "Importar traduções ''off-line''",
+ "action-translate-import": "importar traduções ''off-line''",
+ "right-translate-messagereview": "Rever traduções",
+ "action-translate-messagereview": "rever traduções",
+ "right-translate-groupreview": "Alterar o estado do fluxo de trabalho de grupos de mensagens",
+ "action-translate-groupreview": "alterar o estado do fluxo de trabalho de grupos de mensagens",
+ "translate-rcfilters-translations": "Traduções",
+ "translate-rcfilters-translations-only-label": "Traduções",
+ "translate-rcfilters-translations-only-desc": "Alterações a páginas traduzidas.",
+ "translate-rcfilters-translations-filter-label": "Não traduções",
+ "translate-rcfilters-translations-filter-desc": "Todas as alterações que não são de traduções.",
+ "translate-rcfilters-translations-site-label": "Mensagens de sistema",
+ "translate-rcfilters-translations-site-desc": "Personalizações das mensagens de sistema no espaço nominal MediaWiki.",
+ "translate-rc-translation-filter": "Filtrar traduções:",
+ "translate-rc-translation-filter-no": "Não filtrar",
+ "translate-rc-translation-filter-only": "Mostrar apenas traduções",
+ "translate-rc-translation-filter-filter": "Não mostrar traduções",
+ "translate-rc-translation-filter-site": "Só mudanças às mensagens deste sítio",
+ "translationstats": "Estatísticas de tradução",
+ "translate-stats-edits": "Edições",
+ "translate-stats-users": "Tradutores",
+ "translate-stats-registrations": "Registos",
+ "translate-stats-reviews": "Revisões",
+ "translate-stats-reviewers": "Revisores",
+ "translate-statsf-intro": "Pode gerar estatísticas simples usando este formulário.\nTodos os valores têm limites máximos e mínimos.",
+ "translate-statsf-options": "Opções do gráfico",
+ "translate-statsf-width": "Largura em píxeis:",
+ "translate-statsf-height": "Altura em píxeis:",
+ "translate-statsf-days": "Período de tempo em dias:",
+ "translate-statsf-start": "Data de início:",
+ "translate-statsf-scale": "Escala:",
+ "translate-statsf-scale-years": "Anos",
+ "translate-statsf-scale-months": "Meses",
+ "translate-statsf-scale-weeks": "Semanas",
+ "translate-statsf-scale-days": "Dias",
+ "translate-statsf-scale-hours": "Horas",
+ "translate-statsf-count": "Medida:",
+ "translate-statsf-count-edits": "Número de edições",
+ "translate-statsf-count-users": "Tradutores ativos",
+ "translate-statsf-count-registrations": "Utilizadores novos",
+ "translate-statsf-count-reviews": "Revisões de traduções",
+ "translate-statsf-count-reviewers": "Revisores",
+ "translate-statsf-language": "Lista de códigos de língua, separados por vírgulas:",
+ "translate-statsf-group": "Lista de códigos de grupo, separados por vírgulas:",
+ "translate-statsf-submit": "Gerar gráfico",
+ "translate-statsf-unknown-error": "Ocorreu um erro desconhecido.",
+ "translate-statsf-error-message": "Ocorreu um erro ao carregar o gráfico: $1",
+ "translate-statsf-graph-alt-text-info": "A alternativa de texto para as estatísticas de tradução está na tabela de dados abaixo.",
+ "translate-statsf-alt-text": "Esta é a alternativa em texto das estatísticas de tradução.",
+ "translate-statsf-embed": "Código para incorporar o gráfico das estatísticas de tradução noutras páginas.",
+ "translate-tag-page-desc": "Tradução da página wiki [[$2|$1]] de $3 ($4).",
+ "translate-tag-page-wikipage-desc": "[[$1|Tradução]] da página wiki [[$2]] de <bdi>$3</bdi> ($4) para <bdi>$5</bdi> ($6)",
+ "translate-sidebar-alltrans": "Noutras línguas",
+ "translations": "Todas as traduções",
+ "translations-summary": "Introduza abaixo o nome de uma mensagem para ver todas as traduções disponíveis.",
+ "translate-translations-no-message": "\"$1\" não é uma mensagem traduzível",
+ "translate-translations-none": "Não existem traduções para \"$1\"",
+ "translate-translations-count": "{{PLURAL:$1|Foi encontrada uma tradução|Foram encontradas $1 traduções}}.",
+ "translate-translations-fieldset-title": "Mensagem",
+ "translate-translations-messagename": "Nome:",
+ "translate-translations-project": "Projeto:",
+ "translate-translations-including-no-param": "Por favor, especifique uma chave de mensagem válida no parâmetro subpágina",
+ "translate-translations-history-short": "h",
+ "languagestats": "Estatísticas de tradução por língua",
+ "languagestats-summary": "Esta página mostra estatísticas de tradução para todos os grupos de mensagens de uma língua.",
+ "messagegroupstats-summary": "Esta página mostra as estatísticas de grupos de mensagens.",
+ "languagestats-stats-for": "Estatísticas de tradução para $1 ($2).",
+ "languagestats-recenttranslations": "traduções recentes",
+ "translate-langstats-incomplete": "Algumas das estatísticas desta página estão incompletas. Por favor recarregue a página para obter mais estatísticas.",
+ "translate-langstats-expand": "expandir",
+ "translate-langstats-collapse": "ocultar",
+ "translate-langstats-expandall": "expandir todas",
+ "translate-langstats-collapseall": "recolher todas",
+ "translate-language-code": "Código de língua",
+ "translate-language-code-field-name": "Código de língua:",
+ "translate-suppress-complete": "Suprimir os grupos de mensagens completamente traduzidos",
+ "translate-ls-noempty": "Suprimir os grupos de mensagens sem tradução iniciada",
+ "translate-language": "Língua",
+ "translate-total": "Mensagens (total)",
+ "translate-untranslated": "Não traduzidas",
+ "translate-percentage-complete": "Progresso",
+ "translate-percentage-fuzzy": "Desatualizadas",
+ "translate-percentage-proofread": "Revistas",
+ "translate-languagestats-overall": "Todos os grupos de mensagens em conjunto",
+ "translate-ls-submit": "Mostrar estatísticas",
+ "translate-ls-column-group": "Grupo de mensagens",
+ "translate-mgs-pagename": "Estatísticas dos grupos de mensagens",
+ "translate-mgs-fieldset": "Preferências",
+ "translate-mgs-group": "Grupo de mensagens:",
+ "translate-mgs-nocomplete": "Ocultar línguas com traduções completas",
+ "translate-mgs-noempty": "Ocultar línguas sem traduções",
+ "translate-mgs-submit": "Ver estatísticas",
+ "translate-mgs-column-language": "Língua",
+ "translate-mgs-totals": "{{PLURAL:$1|A língua em conjunto|Todas as $1 línguas em conjunto}}",
+ "translate-mgs-invalid-group": "O grupo especificado ($1) não existe.",
+ "translate-mgs-nothing": "Sem dados para as estatísticas solicitadas.",
+ "translate-tes-server-error": "Não foi possível obter sugestões de pesquisa",
+ "translate-tes-group-not-found": "Não há resultados correspondentes",
+ "translate-tes-type-to-search": "Escrever para começar a procurar",
+ "supportedlanguages": "Línguas ativas",
+ "supportedlanguages-summary": "Esta página mostra uma lista das línguas ativas na wiki {{SITENAME}},\ncom os nomes dos tradutores de cada língua.\nQuanto mais traduções feitas por um tradutor, maior será o seu nome.\nA cor do sublinhado indica o quanto recentemente o tradutor esteve ativo aqui.",
+ "supportedlanguages-colorlegend": "Legenda das cores: última tradução há $1 dias.",
+ "supportedlanguages-sqlite-error": "O SQLite não é suportado",
+ "supportedlanguages-postgres-error": "O PostgreSQL não é suportado",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Tradutor|Tradutora}}|Tradutores}}: $1",
+ "supportedlanguages-recenttranslations": "traduções recentes",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|língua|línguas}} no total.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|edição|edições}} - a última edição foi há $3 {{PLURAL:$3|dia|dias}}",
+ "translate-supportedlanguages-cached": "Esta informação foi armazenada em cache há $1.",
+ "translate-activelanguages-invalid-code": "O código de língua \"$1\" é desconhecido ou não foi ativado para tradução.",
+ "abusefilter-edit-builder-vars-translate-source-text": "Texto de origem da unidade de tradução",
+ "abusefilter-edit-builder-vars-translate-target-language": "Língua alvo da tradução",
+ "translate-jssti-add": "Adicionar à lista",
+ "managemessagegroups": "Administração de grupos de mensagens",
+ "translate-smg-notallowed": "Não tem os privilégios necessários para esta operação.",
+ "translate-smg-nochanges": "Não há alterações para processar.",
+ "translate-smg-submit": "Enviar alterações para processamento",
+ "translate-smg-submitted": "Foram atualizadas definições de mensagens. As alterações estão a ser processadas em segundo plano.",
+ "translate-smg-submitted-with-failure": "A atualização {{PLURAL:$1|da definição da mensagem|das definições das mensagens}} falhou para {{PLURAL:$1|o seguinte grupo|os seguintes grupos}}: $2. $3",
+ "translate-smg-submitted-others-processing": "As definições de mensagens para outros grupos estão a ser processadas em segundo plano.",
+ "translate-smg-more": "Haverá mais mudanças no processo depois de enviar estas alterações.",
+ "translate-smg-left": "Conteúdo da mensagem na wiki",
+ "translate-smg-right": "Alterações recebidas",
+ "translate-smg-rename-select": "Selecionar",
+ "translate-smg-rename-cancel": "Cancelar",
+ "translate-smg-rename-search": "Pesquisar uma mensagem correspondente...",
+ "translate-smg-rename-select-err": "Selecione uma mensagem para se alterar o nome",
+ "translate-smg-rename-no-msg": "Não foi encontrada nenhuma mensagem.",
+ "translate-smg-rename-new": "Adicionar como nova...",
+ "translate-smg-rename-rename": "Adicionar como alteração do nome de...",
+ "translate-smg-rename-dialog-title": "Selecionar alteração de nome correspondente para $1",
+ "translate-smg-changeset-modified": "O conjunto de alterações foi modificado por outro utilizador ou processo. As suas mudanças não podem ser publicadas porque podem substituir as alterações do mesmo. Atualize a página para ver as alterações mais recentes, por favor.",
+ "translate-smg-no-groups-in-sync": "Neste momento não há nenhum grupo em sincronização",
+ "translate-smg-strong-sync-help": "Ajuda",
+ "translate-smg-groups-in-sync": "Grupos atualmente em sincronização",
+ "translate-smg-groups-in-sync-list": "Lista de grupos a serem atualmente processados em segundo plano:",
+ "translate-smg-groups-with-error-title": "Grupos que tiveram falhas durante a sincronização",
+ "translate-smg-groups-with-error-desc": "Lista de grupos e suas mensagens que tiveram falhas durante a sincronização:",
+ "translate-smg-group-with-error-summary": "$1 {{PLURAL:$1|mensagem|mensagens}} com erros:",
+ "translate-smg-group-message-action-history": "Historial",
+ "translate-smg-group-action-resolve": "Marcar como resolvido",
+ "translate-smg-group-sync-error-warn": "Este grupo teve uma falha durante a sincronização. Corrija os erros antes de processar o grupo, por favor.",
+ "translate-smg-group-message-tag-outdated": "Desatualizada",
+ "translate-smg-group-message-tag-rename": "Alterar o nome",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|Etiqueta|Etiquetas}}:",
+ "translate-smg-group-message-message-content": "Conteúdo:",
+ "translate-smg-group-message-message-target": "Destino:",
+ "translate-smg-group-message-message-replacement": "Substituição:",
+ "translate-smg-group-message-message-other-langs": "Outras línguas:",
+ "translate-smg-loading": "A carregar…",
+ "translate-smg-unknown-error": "Ocorreu um erro desconhecido ao processar o seu pedido.",
+ "translate-manage-import-diff": "Mensagem $1 | Ações: $2",
+ "translate-manage-import-new": "Nova mensagem $1",
+ "translate-manage-import-deleted": "Mensagem eliminada $1",
+ "translate-manage-action-import": "Importar",
+ "translate-manage-action-conflict": "Importar e marcar",
+ "translate-manage-action-ignore": "Ignorar",
+ "translate-manage-action-fuzzy": "Importar e marcar para revisão",
+ "translate-manage-action-rename-fuzzy": "Alterar nome e marcar traduções como \"fuzzy\"",
+ "translate-manage-action-rename": "Alterar nome",
+ "translate-manage-action-ignore-change": "Ignorar alteração da tradução",
+ "translate-manage-nochanges": "Não há alterações nas definições das mensagens deste grupo.",
+ "translate-manage-nochanges-other": "Não houve alterações para esta língua.\nUse a hiperligação abaixo para voltar aos detalhes do grupo.",
+ "translate-manage-inconsistent": "Foi detetada uma inconsistência no pedido.\nPor favor, verifique se houve alterações e tente novamente.\nDetalhes: $1.",
+ "translate-manage-toolong": "O tempo máximo de $1 {{PLURAL:$1|segundo|segundos}} de processamento foi excedido.\nPor favor, reenvie o formulário para continuar o processamento.",
+ "translate-manage-import-summary": "Importando uma nova versão de fonte externa",
+ "translate-manage-import-ignore": "A saltar a mensagem $1.",
+ "translate-manage-import-rename-summary": "Nome alterado na fonte externa",
+ "translate-manage-conflict-summary": "Importando uma nova versão de fonte externa.\nVerifique-a, por favor.",
+ "translate-manage-submit": "Executar",
+ "translate-manage-intro-other": "Abaixo está uma lista de alterações de traduções na língua $1.\nPor favor, reveja as alterações e escolha a ação que quer tomar para cada atualização.\nSe escolher ignorar as alterações, esta ação será somente temporária.",
+ "translate-manage-import-ok": "Importado: $1",
+ "translate-manage-import-done": "Importação completa!",
+ "translate-manage-empty-content": "O conteúdo está vazio",
+ "translate-manage-key-reused": "Esta mensagem já existe na wiki. Verifique se há uma reutilização acidental de uma chave antiga.",
+ "translate-manage-source-message-not-found": "Definição de mensagem não encontrada",
+ "importtranslations": "Importar traduções",
+ "translate-import-from-local": "Carregamento de ficheiro local:",
+ "translate-import-load": "Carregar ficheiro",
+ "translate-import-err-dl-failed": "Não foi possível obter o ficheiro:\n$1",
+ "translate-import-err-ul-failed": "Carregamento do ficheiro falhou",
+ "translate-import-err-invalid-title": "O nome de ficheiro fornecido <nowiki>$1</nowiki> era inválido.",
+ "translate-import-err-no-such-file": "O ficheiro <nowiki>$1</nowiki> não existe ou não foi carregado localmente.",
+ "translate-import-err-stale-group": "O grupo de mensagens a que este ficheiro pertence não existe.",
+ "translate-import-err-no-headers": "O ficheiro não é um ficheiro Gettext válido, com o formato da extensão Translate:\nNão foi possível determinar o grupo e a língua a partir dos cabeçalhos.",
+ "translate-js-support-unsaved-warning": "Tem traduções por publicar.",
+ "translate-gs-pos": "Pos.",
+ "translate-gs-code": "Código",
+ "translate-gs-continent": "Continente",
+ "translate-gs-speakers": "Falantes",
+ "translate-gs-score": "Pont.",
+ "translate-gs-multiple": "Múltiplos",
+ "translate-gs-count": "Contagem",
+ "translate-gs-total": "Total",
+ "translate-gs-avgscore": "Pont. média",
+ "translate-documentation-language": "ajuda de tradução",
+ "translate-searchprofile": "Traduções",
+ "translate-searchprofile-tooltip": "Pesquisar todas as traduções",
+ "translate-searchprofile-note": "Mais opções de procura estão disponíveis através da [$1 pesquisa de traduções].",
+ "translate-search-languagefilter": "Filtrar por língua:",
+ "translate-search-nofilter": "Não filtrar",
+ "log-name-translationreview": "Registo de revisão de traduções",
+ "log-description-translationreview": "Registo de todas as revisões de traduções e de grupos de traduções.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|reviu}} a tradução $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|alterou}} o estado das traduções em $4 de $3, de $6 para $7",
+ "group-translate-sandboxed": "Tradutores não aprovados",
+ "group-translate-sandboxed-member": "{{GENDER:$1|tradutor não aprovado|tradutora não aprovada}}",
+ "right-translate-sandboxmanage": "Administrar utilizadores da área de testes",
+ "action-translate-sandboxmanage": "administrar utilizadores da área de testes",
+ "right-translate-sandboxaction": "Executar ações permitidas para utilizadores da área de testes",
+ "action-translate-sandboxaction": "executar ações permitidas para utilizadores da área de testes",
+ "translate-workflow-state-": "(indefinido)",
+ "translate-workflowstatus": "Estado: $1",
+ "translate-workflow-set-doing": "A ativar...",
+ "translate-workflow-autocreated-summary": "Criação automática de página para o estado \"$1\" do fluxo de trabalho",
+ "translate-stats-workflow": "Estado",
+ "translate-workflowgroup-label": "Estados do fluxo de trabalho",
+ "translate-workflowgroup-desc": "Este grupo de mensagens mostra os estados do fluxo de trabalho das traduções.\nOs estados são definidos na variável de configuração $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Traduções recentes",
+ "translate-dynagroup-recent-desc": "Este grupo de mensagens mostra todas as traduções recentes para esta língua.\nÉ útil sobretudo para as tarefas de revisão.",
+ "translate-dynagroup-additions-label": "Adições recentes",
+ "translate-dynagroup-additions-desc": "Este grupo de mensagens mostra as mensagens novas e modificadas.",
+ "translate-msggroupselector-projects": "Grupo de mensagens",
+ "translate-msggroupselector-search-placeholder": "Pesquisar grupos",
+ "translate-msggroupselector-search-all": "Todos",
+ "translate-msggroupselector-search-recent": "Recentes",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|subgrupo|subgrupos}}",
+ "tux-languageselector": "Traduzir para",
+ "tux-select-target-language": "Língua alvo da tradução",
+ "tux-tab-all": "Todas",
+ "tux-tab-untranslated": "Não traduzidas",
+ "tux-tab-outdated": "Desatualizadas",
+ "tux-tab-translated": "Traduzidas",
+ "tux-tab-unproofread": "Não revistas",
+ "tux-edit": "Editar",
+ "tux-status-optional": "Opcional",
+ "tux-status-fuzzy": "Desatualizada",
+ "tux-status-proofread": "Revista",
+ "tux-status-translated": "Traduzida",
+ "tux-status-saving": "A publicar...",
+ "tux-status-unsaved": "Não publicada",
+ "tux-save-unknown-error": "Ocorreu um erro desconhecido.",
+ "tux-editor-placeholder-documentation": "Adicionar documentação de mensagem",
+ "tux-editor-placeholder-language": "A sua tradução em $1",
+ "tux-editor-editsummary-placeholder": "Explique as suas alterações (opcional)",
+ "tux-editor-paste-original-button-label": "Inserir o texto original",
+ "tux-editor-discard-changes-button-label": "Rejeitar alterações",
+ "tux-editor-save-button-label": "Publicar tradução",
+ "tux-editor-skip-button-label": "Saltar para a seguinte",
+ "tux-editor-cancel-button-label": "Cancelar",
+ "tux-editor-confirm-button-label": "Confirmar a tradução",
+ "tux-editor-proofread-button-label": "Marcar como revista",
+ "tux-editor-shortcut-info": "Prima \"$1\" para confirmar e passar à mensagem seguinte, \"$2\" para saltar, \"$4\" para fornecer um resumo ou mantenha premido \"$3\" para ver outros atalhos.",
+ "tux-editor-edit-desc": "Editar a documentação",
+ "tux-editor-add-desc": "Adicionar documentação",
+ "tux-editor-suggestions-title": "Sugestões",
+ "tux-editor-latest-updates-title": "Últimas atualizações",
+ "tux-editor-changes-without-summary": "$1 {{PLURAL:$1|atualização|atualizações}} sem resumo",
+ "tux-editor-all-changes": "Todas as mudanças",
+ "tux-editor-in-other-languages": "Noutras línguas",
+ "tux-editor-need-more-help": "Precisa de mais ajuda?",
+ "tux-editor-ask-help": "Peça mais informação",
+ "tux-editor-tm-match": "$1% coincidente",
+ "tux-notices-more": "{{PLURAL:$1|mais $1}}",
+ "tux-notices-hide": "ocultar",
+ "tux-editor-save-failed": "A publicação da tradução falhou: $1",
+ "tux-editor-n-uses": "usada $1 {{PLURAL:$1|vez|vezes}}",
+ "tux-editor-message-desc-more": "Ver mais",
+ "tux-editor-message-desc-less": "Ver menos",
+ "tux-editor-clear-translated": "Ocultar traduzidas",
+ "tux-editor-proofreading-mode": "Rever",
+ "tux-editor-translate-mode": "Lista",
+ "tux-editor-proofreading-hide-own-translations": "Ocultar as suas traduções",
+ "tux-editor-proofreading-show-own-translations": "Mostrar as suas traduções",
+ "tux-proofread-action-tooltip": "Marcar como revista",
+ "tux-proofread-edit-label": "Editar",
+ "tux-editor-page-mode": "Página",
+ "tux-editor-outdated-notice": "Esta tradução pode precisar de ser atualizada.",
+ "tux-editor-outdated-notice-diff-link": "Mostrar diferenças",
+ "tux-editor-doc-editor-placeholder": "Documentação da mensagem",
+ "tux-editor-doc-editor-save": "Publicar documentação",
+ "tux-editor-doc-editor-cancel": "Cancelar",
+ "tux-messagetable-more-messages": "mais $1 {{PLURAL:$1|mensagem|mensagens}}",
+ "tux-messagetable-loading-messages": "A carregar {{PLURAL:$1|a mensagem|as mensagens}}.",
+ "tux-message-filter-placeholder": "Filtrar lista",
+ "tux-message-filter-result": "{{PLURAL:$1|Foi encontrado $1 resultado|Foram encontrados $1 resultados}} para \"$2\"",
+ "tux-message-filter-advanced-button": "Pesquisa avançada",
+ "tux-message-filter-optional-messages-label": "Mensagens opcionais",
+ "tux-proofread-translated-by-self": "Traduzida por si",
+ "tux-empty-list-all": "Este grupo de mensagens está vazio",
+ "tux-empty-list-all-guide": "Selecione outro grupo de mensagens para traduzir",
+ "tux-translate-page-no-such-group": "<strong>O grupo indicado não existe.</strong> Selecione outro grupo de mensagens.",
+ "tux-empty-list-translated": "Não há mensagens traduzidas",
+ "tux-empty-list-translated-guide": "Pode ajudar a traduzir",
+ "tux-empty-list-translated-action": "Traduzir",
+ "tux-empty-no-messages-to-display": "Não há mensagens para apresentar.",
+ "tux-empty-there-are-optional": "Há mensagens opcionais não apresentadas na lista",
+ "tux-empty-show-optional-messages": "Mostrar mensagens opcionais",
+ "tux-empty-no-outdated-messages": "Não há mensagens desatualizadas",
+ "tux-empty-nothing-to-proofread": "Não há nada para rever",
+ "tux-empty-you-can-help-providing": "Pode ajudar, acrescentando traduções novas",
+ "tux-empty-nothing-new-to-proofread": "Não há nada de novo para rever",
+ "tux-empty-you-can-review-already-proofread": "Pode rever traduções já revistas por outros.",
+ "tux-empty-list-other": "Não há nada para traduzir",
+ "tux-empty-list-other-guide": "Pode ajudar na revisão das traduções existentes",
+ "tux-empty-list-other-action": "Rever traduções",
+ "tux-empty-list-other-link": "Mostrar todas as mensagens",
+ "tux-editor-close-tooltip": "Fechar",
+ "tux-editor-expand-tooltip": "Expandir",
+ "tux-editor-collapse-tooltip": "Recolher",
+ "tux-editor-message-tools-show-editor": "Mostrar no editor wiki",
+ "tux-editor-message-tools-history": "Histórico",
+ "tux-editor-message-tools-delete": "Eliminar",
+ "tux-editor-message-tools-translations": "Todas as traduções",
+ "tux-editor-message-tools-linktothis": "Hiperligação para esta mensagem",
+ "tux-editor-loading": "A carregar…",
+ "tux-editor-loading-failed": "Não foi possível carregar os auxiliares de tradução: $1",
+ "translate-search-more-languages-info": "mais $1 {{PLURAL:$1|língua|línguas}}",
+ "translate-statsbar-tooltip": "$1% traduzidas, $2% revistas",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% traduzidas, $2% revistas, $3% desatualizadas",
+ "translate-search-more-groups-info": "mais $1 {{PLURAL:$1|grupo|grupos}}",
+ "translate-syntax-error": "A tradução contém erros de sintaxe",
+ "tux-session-expired": "Não está mais autenticado. Por favor, inicie a sessão num outro separador. Em alternativa, faça uma cópia das traduções que não foram gravadas, inicie sessão e regresse a esta página para inserir as suas traduções novamente.",
+ "tux-nojs": "Esta ferramenta não funciona sem o JavaScript. Ou o JavaScript está desativado, ou não funcionou, ou este browser não é suportado.",
+ "specialpages-group-translation": "Tradução",
+ "content-model-translate-messagebundle": "Pacote de mensagens traduzíveis",
+ "translate-messagebundle-validation-error": "Pacote de mensagens inválido: $1",
+ "translate-messagebundle-error-parsing": "Erro ao analisar o JSON: $1",
+ "translate-messagebundle-error-invalid-array": "O pacote de mensagens tem de ser um objeto JSON. Tipo obtido: $1",
+ "translate-messagebundle-error-key-empty": "O pacote de mensagens não pode conter uma chave vazia",
+ "translate-messagebundle-error-key-too-long": "A chave \"$1\" é demasiado longa",
+ "translate-messagebundle-error-key-invalid-characters": "A chave \"$1\" contém caracteres interditos",
+ "translate-messagebundle-error-invalid-value": "A chave \"$1\" não contém texto",
+ "translate-messagebundle-error-empty-value": "A chave \"$1\" não tem um valor",
+ "translate-messagebundle-error-metadata-type": "Os metadados devem ser uma matriz.",
+ "translate-messagebundle-error-invalid-metadata": "A secção de metadados contém uma chave desconhecida: \"$1\". As chaves suportadas são $2.",
+ "translate-messagebundle-error-invalid-sourcelanguage": "O código da língua de origem \"$1\" não é suportado.",
+ "translate-messagebundle-error-invalid-prioritylanguage": "{{PLURAL:$2|Código|Códigos}} de língua prioritária {{PLURAL:$2|inválido|inválidos}} nos metadados: $1",
+ "translate-messagebundle-error-invalid-prioritylanguage-format": "Formato de língua prioritária inválido nos metadados. As línguas prioritárias têm de ser uma matriz de texto.",
+ "translate-messagebundle-group-description": "Mensagens de um pacote de mensagens definido na página [[$2|$1]].",
+ "translate-messagebundle-change-sourcelanguage": "Definir a língua de origem do pacote de mensagens de acordo com os metadados.",
+ "translate-messagebundle-sourcelanguage-changed": "A língua de origem de um pacote de mensagens não pode ser alterada depois de ele ter sido criado.",
+ "log-action-filter-translationreview": "Tipo de operação:",
+ "log-action-filter-translationreview-message": "Revisão de mensagens de tradução individuais",
+ "log-action-filter-translationreview-group": "Alterações do estado de progresso das traduções"
+}
diff --git a/Translate/i18n/core/pwn.json b/Translate/i18n/core/pwn.json
new file mode 100644
index 00000000..7da96787
--- /dev/null
+++ b/Translate/i18n/core/pwn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Iyumu"
+ ]
+ },
+ "translate-documentation-language": "qadupu na paljayang"
+}
diff --git a/Translate/i18n/core/qqq.json b/Translate/i18n/core/qqq.json
new file mode 100644
index 00000000..2a1f2dcd
--- /dev/null
+++ b/Translate/i18n/core/qqq.json
@@ -0,0 +1,487 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "An13sa",
+ "Ans",
+ "Assele",
+ "Darth Kule",
+ "Dbc334",
+ "Dj",
+ "Emperyan",
+ "EugeneZelenko",
+ "Fryed-peach",
+ "Gomada",
+ "Jon Harald Søby",
+ "Kghbln",
+ "Lejonel",
+ "Liuxinyu970226",
+ "Lloffiwr",
+ "Mar(c)",
+ "MarcoAurelio",
+ "Matma Rex",
+ "McDutchie",
+ "Meno25",
+ "Mormegil",
+ "Nemo bis",
+ "Nike",
+ "Purodha",
+ "Raymond",
+ "Robby",
+ "SPQRobin",
+ "Sanbec",
+ "Shirayuki",
+ "Siebrand",
+ "Tacsipacsi",
+ "The Evil IP address",
+ "Toliño",
+ "Umherirrender",
+ "Verdy p",
+ "Waldyrious",
+ "Wizardist",
+ "פוילישער",
+ "아라",
+ 555
+ ]
+ },
+ "translate": "{{doc-special|Translate}}\nIt is the verb \"to translate\".\n{{Identical|Translate}}",
+ "translate-extensionname": "{{name}}",
+ "translate-desc": "{{desc|name=Translate|url=https://www.mediawiki.org/wiki/Extension:Translate}}",
+ "translate-fuzzybot-desc": "Text to display on [[User:FuzzyBot]].",
+ "translate-taskui-export-to-file": "Task in [[Special:Translate]] on action Export",
+ "translate-taskui-export-as-po": "Task in [[Special:Translate]] on action Export",
+ "translate-taskui-export-as-csv": "Task in [[Special:Translate]] on action Export",
+ "translate-export-csv-message-title": "Header in the CSV export",
+ "translate-export-csv-definition": "Header in the CSV export",
+ "translate-taction-translate": "A tab text used in Special pages [[Special:Translate]], [[Special:LanguageStats]] and [[Special:MessageGroupStats]].\n{{Identical|Translate}}",
+ "translate-taction-proofread": "A tab text used in Special pages [[Special:Translate]], [[Special:LanguageStats]] and [[Special:MessageGroupStats]].\n\nTranslate as a verb.\n{{Identical|Review}}",
+ "translate-taction-lstats": "A tab text used in Special pages [[Special:Translate]], [[Special:LanguageStats]] and [[Special:MessageGroupStats]].\n{{Identical|Language statistics}}",
+ "translate-taction-mstats": "A tab text used in Special pages [[Special:Translate]], [[Special:LanguageStats]] and [[Special:MessageGroupStats]].",
+ "translate-taction-export": "A tab text used in Special pages [[Special:Translate]], [[Special:LanguageStats]] and [[Special:MessageGroupStats]].\n{{Identical|Export}}",
+ "translate-taction-disabled": "Shown instead of the radio buttons for tasks when all tasks related to this action has been disabled.",
+ "translate-page-no-such-language": "Shown when someone requests a language that doesn't exist. Examples:\n* Special:LanguageStats, under the selectors [{{FULLURL:Special:LanguageStats|language=ugagaga}}]\n* Special:Translate until 2013, next to the language dropdown [//translatewiki.net/w/i.php?title=Special:Translate&tux=0&group=out-blockly-0-all&language=ugagaga]",
+ "translate-page-no-such-group": "Shown when someone requests a group that doesn't exists. [{{FULLURL:Special:Translate|group=invalidgroup}} Example].",
+ "translate-page-disabled": "Parameters:\n* $1 - reason that the language has been excluded",
+ "translate-language-disabled": "Shown when someone requests an excluded language. [{{FULLURL:Special:Translate|group=mediawiki&language=zh-tw}} Example].",
+ "translate-page-settings-legend": "{{Identical|Settings}}",
+ "translate-page-group": "{{Identical|Group}}",
+ "translate-page-language": "{{Identical|Language}}",
+ "translate-page-limit": "{{Identical|Limit}}",
+ "translate-page-limit-option": "Used as option for select box in [[Special:Translate]].\n\nParameters:\n* $1 - number of messages, can be used for GENDER",
+ "translate-submit": "Button text in [[Special:Translate]] on action Translate, action Review and action Export.\n\n{{Identical|Fetch}}",
+ "translate-page-navigation-legend": "{{Identical|Navigation}}",
+ "translate-page-showing": "Information in the page navigation box of the translate special page, [{{canonicalurl:Special:Translate|taction=translate&limit=100&language=en-gb&group=ext-translate-core}} for example].\n*$1 is the number of the first message displayed on the page\n*$2 is the number of the last message displayed on the page\n*$3 is the total number of messages fetched by the program",
+ "translate-page-showing-all": "Information in the page navigation box of the translate special page, [{{canonicalurl:Special:Translate|taction=translate&limit=5000&language=en-gb&group=ext-translate-core}} for example].\n*$1 is the total number of messages fetched by the program",
+ "translate-page-showing-none": "Used in query result page.\n\nSee also:\n* {{msg-mw|Translate-page-showing-all}}\n* {{msg-mw|Translate-page-showing}}\n* {{msg-mw|Translate-page-paging-links}}, {{msg-mw|Translate-prev}} and {{msg-mw|Translate-next}}",
+ "translate-page-paging-links": "{{optional}}\nParameters:\n* $1 - a link which points to the previous page\n* $2 - a link which points to the next page",
+ "translate-next": "{{Identical|Next page}}",
+ "translate-prev": "{{Identical|Previous page}}",
+ "translate-page-description-legend": "Used as a legend (heading for a fieldset) in the legacy Special:Translate interface.",
+ "translate-page-description-hasoptional": "Parameters:\n* $1 - a link with {{msg-mw|translate-page-description-hasoptional-open}} as the text",
+ "translate-page-description-hasoptional-open": "Link text for message {{msg-mw|translate-page-description-hasoptional}}\n{{Identical|Show optional message}}",
+ "translate-page-edit": "{{Identical|Edit}}",
+ "translate-optional": "{{Identical|Optional}}",
+ "translate-ignored": "{{Identical|Ignore}}",
+ "translate-edit-title": "Used as a tooltip for edit links in lists with translatable messages. Parameters:\n* $1 is the name of the page to be edited.\n{{Identical|Edit}}",
+ "translate-edit-definition": "Heading of infobox containing original message to be translated.",
+ "translate-edit-contribute": "This appears in the parentheses after {{msg-mw|Translate-edit-information}}. It links to the information page in edit mode.\n{{Identical|Contribute}}",
+ "translate-edit-no-information": "Message is used as a hint to translators that documentation for a message without documentation is needed.",
+ "translate-edit-information": "Caption for box which contains information about the message. $1 is {{msg-mw|translate-edit-contribute}}.",
+ "translate-edit-warnings": "Title of the warnings box when editing a message.\nThis box lists the problems found in the translation.",
+ "translate-edit-tmmatch-source": "Used as tooltip for the message {{msg-mw|translate-edit-tmmatch}} in the translation suggestions by the server.\n\nParameters:\n* $1 - translation source text",
+ "translate-edit-tmmatch": "This message is displayed in the translation interface when there is suggestions from translation memory.\n\nParameters:\n* $1 - number between 1 and 100\n{{Identical|Match}}",
+ "translate-edit-nopermission": "Followed by link text {{msg-mw|Translate-edit-askpermission}}.",
+ "translate-edit-askpermission": "Used as link text.\n\nPreceded by {{msg-mw|Translate-edit-nopermission}}.",
+ "exporttranslations": "Title of [[Special:ExportTranslations]]",
+ "translate-export-form-format": "Label of form field on [[Special:ExportTranslations]].\n{{Identical|Format}}",
+ "translate-export-invalid-format": "Validation error shown on [[Special:ExportTranslations]].",
+ "translate-export-not-supported": "Validation error shown on [[Special:ExportTranslations]]",
+ "translate-export-format-notsupported": "Validation error shown on [[Special:ExportTranslations]]",
+ "translate-export-group-too-large": "Validation error shown on [[Special:ExportTranslations]]",
+ "translate-checks-parameters": "Notice message from automated syntax check for translators.\n* $1 - parameters\n* $2 - number of parameters\n{{Related|Translate-checks}}",
+ "translate-checks-parameters-unknown": "Notice message from automated syntax check for translators.\n* $1 - parameters\n* $2 - number of parameters\n{{Related|Translate-checks}}",
+ "translate-checks-balance": "This translation notice is displayed if the number of opening brackets (\"[\", \"{\", and \"(\") is different from the number of closing brackets (\"]\", \"}\", and \")\").\n\nParameters:\n* $1 - a list of the unbalanced brackets, for example \"<strong>[]: 1</strong>\" which means that there is one missing closing square brackets\n* $2 - the number of types of parentheses that are unbalanced\n{{Related|Translate-checks}}",
+ "translate-checks-links": "Notice message from automated syntax check for translators. Parameters:\n* $1 - links\n* $2 - number of links\n{{Related|Translate-checks}}",
+ "translate-checks-links-missing": "{{doc-important|Do not translate <code><nowiki><strong><nowiki>$1</nowiki>&lt;nowiki><nowiki></strong></nowiki></code>.}}\nNotice message from automated syntax check for translators. Parameters:\n* $1 - links\n* $2 - number of links\n{{Related|Translate-checks}}",
+ "translate-checks-plural": "Notice message from automated syntax check for translators.\n{{Related|Translate-checks}}",
+ "translate-checks-plural-forms": "Notice message from automated syntax check for translators. Parameters:\n* $1 - number of forms provided\n* $2 - number of forms MediaWiki supports for the language in question\n{{Related|Translate-checks}}",
+ "translate-checks-plural-dupe": "{{doc-important|In <code><nowiki>{{PLURAL:$1|sheep|sheep}}</nowiki></code>, the singular and plural forms should be identical.}}\nNotice message from automated syntax check for translators.\n\n<code>$1</code> is not a parameter; appears as is.\n{{Related|Translate-checks}}",
+ "translate-checks-gettext-plural-missing": "Notice message from automated syntax check for translators.\n{{Related|Translate-checks}}",
+ "translate-checks-gettext-plural-unsupported": "Notice message from automated syntax check for translators.\n{{Related|Translate-checks}}",
+ "translate-checks-gettext-plural-count": "Notice message from automated syntax check for translators. Parameters:\n* $1 - number\n* $2 - number\n{{Related|Translate-checks}}",
+ "translate-checks-smartformat-plural-missing": "Notice message from automated syntax check for translators. Parameters:\n* $1 - variable name\n{{Related|Translate-checks}}",
+ "translate-checks-smartformat-plural-unsupported": "Notice message from automated syntax check for translators. Parameters:\n* $1 - the invalid variable name\n{{Related|Translate-checks}}",
+ "translate-checks-smartformat-plural-count": "Notice message from automated syntax check for translators. Parameters:\n* $1 - number\n* $2 - number\n* $3 the bad plural mark-up\n{{Related|Translate-checks}}",
+ "translate-checks-unicode-plural-missing": "Notice message from automated syntax check for translators.\n{{Related|Translate-checks}}",
+ "translate-checks-unicode-plural-unsupported": "Notice message from automated syntax check for translators.\n{{Related|Translate-checks}}",
+ "translate-checks-unicode-plural-invalid": "Notice message from automated syntax check for translators. Parameters:\n* $1 - Example: <nowiki>{{PLURAl|one=…|…|two=…}}</nowiki>\n* $2 - Example: <nowiki>{{PLURAl|one=…|two=…|…}}</nowiki>\n{{Related|Translate-checks}}",
+ "translate-checks-pagename": "A notice when editing a message.\n\nThis notice indicates that the namespace in the translation does not match the namespace appearing in the message definition (original English message).\n{{Related|Translate-checks}}",
+ "translate-checks-format": "Notice message from automated syntax check for translators. Parameters:\n* $1 - any one of the following messages:\n**{{msg-mw|Translate-checks-parametersnotequal}}\n** {{msg-mw|Translate-checks-malformed}}\n** \"<samp><nowiki>$traItems[1] !== $defItems[1]</nowiki></samp>\" (hard-coded)\n{{Related|Translate-checks}}",
+ "translate-checks-escape": "Notice message shown when invalid escape characters are present in the translation.\n* $1 - invalid escape characters, comma separated.\n* $2 = number of invalid escape characters.\n* $3 - list of allowed escape characters.\n* $4 - number of allowed escape characters.",
+ "translate-checks-parametersnotequal": "Notice message from automated syntax check for translators. Parameters:\n* $1 - the number of parameters used in the source message\n* $2 - the number of parameters used in the translated message\n{{Related|Translate-checks}}",
+ "translate-checks-malformed": "Notice message from automated syntax check for translators. Parameters:\n* $1 - malformed time. (Valid time is in \"12:35\" format.)\n{{Related|Translate-checks}}",
+ "translate-checks-fudforum-syntax": "Unused at this time.\n\nNotice message from automated syntax check for translators.\n\n<code>$1</code> and <code>$2</code> are not parameters.\n{{Related|Translate-checks}}",
+ "translate-checks-newline-missing-start": "Notice message shown when newline characters are missing from the beginning of a translation. Parameters:\n* $1 - number of missing characters.",
+ "translate-checks-newline-missing-end": "Notice message shown when newline characters are missing from the end of a translation. Parameters:\n* $1 - number of missing characters.",
+ "translate-checks-newline-extra-start": "Notice message shown when there are extra newline characters are at the start of a translation. Parameters:\n* $1 - number of extra characters.",
+ "translate-checks-newline-extra-end": "Notice message shown when there are extra newline characters are at the end of a translation. Parameters:\n* $1 - number of extra characters.",
+ "translate-checks-value-not-present": "Notice message shown when the translation is not present in the set of permitted values. Parameters:\n* $1 - set of permitted values.",
+ "translate-checks-replacement": "Notice message shown when the translation contains content that should not be used. Parameters:\n* $1 - content that should not be used\n* $2 - content that should be used instead.",
+ "translate-checks-empty": "Notice message shown when the translation has no content or consists of only whitespace. Includes newlines and spaces.",
+ "translate-pref-editassistlang": "Used in [[Special:Preferences]] under the {{msg-mw|prefs-editing}} tab.\n{{Identical|Assistant language}}",
+ "prefs-translate": "Caption of a section at [[Special:Preferences#mw-prefsection-editing|Special:Preferences]] in the tab \"{{int:prefs-editing}}\"",
+ "translate-pref-editassistlang-help": "Used in [[Special:Preferences]], tab Editing.",
+ "translate-pref-editassistlang-bad": "Used as validation result.\n\nParameters:\n* $1 - a language code, not list of codes",
+ "right-translate": "{{doc-right|translate}}",
+ "action-translate": "{{doc-action|translate}}",
+ "right-translate-manage": "{{doc-right|translate-manage}}",
+ "action-translate-manage": "{{doc-action|translate-manage}}",
+ "right-translate-import": "{{doc-right|translate-import}}",
+ "action-translate-import": "{{doc-action|translate-import}}",
+ "right-translate-messagereview": "{{doc-right|translate-messagereview}}\n{{Identical|Review translation}}",
+ "action-translate-messagereview": "{{doc-action|translate-messagereview}}",
+ "right-translate-groupreview": "{{doc-right|translate-groupreview}}",
+ "action-translate-groupreview": "{{doc-action|translate-groupreview}}",
+ "translate-rcfilters-translations": "Title for the filter group for translations. Only available on [[Special:RecentChanges]].\n{{Identical|Translation}}",
+ "translate-rcfilters-translations-only-label": "Label for the filter for showing changes to translated pages only.\n{{Identical|Translation}}",
+ "translate-rcfilters-translations-only-desc": "Description for the filter for showing changes to translated pages only.",
+ "translate-rcfilters-translations-filter-label": "Label for the filter for showing changes to pages that aren't translations.",
+ "translate-rcfilters-translations-filter-desc": "Description for the filter for showing changes to pages that aren't translations.",
+ "translate-rcfilters-translations-site-label": "Label for the filter for showing customizations of site messages.",
+ "translate-rcfilters-translations-site-desc": "Description for the filter for showing customizations of site messages.",
+ "translate-rc-translation-filter": "Name of filter in [[Special:RecentChanges]]. Gives a user the option to filter out translations, show translations only, or do nothing (default).",
+ "translate-rc-translation-filter-no": "Option for filter in [[Special:RecentChanges]]. Selecting this option results in the filter not doing anything. It is the default value.",
+ "translate-rc-translation-filter-only": "Option for filter in [[Special:RecentChanges]]. Selecting this option results in the filter only showing recent changes that are translations.",
+ "translate-rc-translation-filter-filter": "Option for filter in [[Special:RecentChanges]]. Selecting this option results in the filter not showing any recent changes that are translations.",
+ "translate-rc-translation-filter-site": "Selects changes to MediaWiki-messages without a language code in the [[Special:RecentChanges|recentchanges]].\nFor example MediaWiki:Common.css, but not MediaWiki:Common.css/fr or other messages for specific languages.\nThese messages will only affect the interface on {{SITENAME}}.",
+ "translationstats": "{{doc-special|TranslationStats}}",
+ "translate-stats-edits": "This message is used in the automatically created graph. It's possible that the graph plotting software doesn't support non-Latin scripts correctly.\n\n{{Identical|Edit}}",
+ "translate-stats-users": "This message is used in the automatically created graph. It's possible that the graph plotting software doesn't support non-Latin scripts correctly.\n{{Identical|Translator}}",
+ "translate-stats-registrations": "This refers to statistics on the number of new users on [[Special:TranslationStats]]. It is a label on the graph of the statistics.\n{{Identical|Registration}}",
+ "translate-stats-reviews": "{{Identical|Review}}",
+ "translate-stats-reviewers": "{{Identical|Reviewer}}",
+ "translate-statsf-intro": "Introduction to [[Special:TranslationStats|form]] for generating graph.",
+ "translate-statsf-options": "Header on [[Special:TranslationStats|form]] for generating graph.",
+ "translate-statsf-width": "Field label on [[Special:TranslationStats|form]] for generating graph.",
+ "translate-statsf-height": "Field label on [[Special:TranslationStats|form]] for generating graph.",
+ "translate-statsf-days": "Label in [[Special:TranslationStats]]",
+ "translate-statsf-start": "Label in [[Special:TranslationStats]]\n{{Identical|Start date}}",
+ "translate-statsf-scale": "Used on [[Special:TranslationStats]].",
+ "translate-statsf-scale-years": "Option at [[Special:TranslationStats]].\n\n{{identical|Year}}",
+ "translate-statsf-scale-months": "Option at [[Special:TranslationStats]].\n{{Identical|Month}}",
+ "translate-statsf-scale-weeks": "Option at [[Special:TranslationStats]].\n{{Identical|Week}}",
+ "translate-statsf-scale-days": "Radio button label on [[Special:TranslationStats|form]] for generating graph.\n{{Identical|Day}}",
+ "translate-statsf-scale-hours": "Radio button label on [[Special:TranslationStats|form]] for generating graph.\n{{Identical|Hour}}",
+ "translate-statsf-count": "Used on [[Special:TranslationStats]].",
+ "translate-statsf-count-edits": "Radio button label on [[Special:TranslationStats|form]] for generating graph.\n{{Identical|Number of edits}}",
+ "translate-statsf-count-users": "Radio button label on [[Special:TranslationStats|form]] for generating graph.",
+ "translate-statsf-count-registrations": "Option at [[Special:TranslationStats]].\n{{Identical|New user}}",
+ "translate-statsf-count-reviews": "Radio button label on [[Special:TranslationStats|form]] for generating graph.",
+ "translate-statsf-count-reviewers": "Radio button label on [[Special:TranslationStats|form]] for generating graph.\n{{Identical|Reviewer}}",
+ "translate-statsf-language": "Field label on [[Special:TranslationStats|form]] for generating graph.",
+ "translate-statsf-group": "Field label on [[Special:TranslationStats|form]] for generating graph.",
+ "translate-statsf-submit": "Submit button label on [[Special:TranslationStats|form]] for generating graph.\n\n{{Identical|Preview}}",
+ "translate-statsf-unknown-error": "Used when an unknown error occurs on fetching translation statistics.",
+ "translate-statsf-error-message": "Error message displayed when fetching of translation statistics fails.\n\nParameters:\n* $1 - error information from the API.",
+ "translate-statsf-graph-alt-text-info": "Displayed inside the canvas element pointing to a text based alternative to the data displayed on the graph.",
+ "translate-statsf-alt-text": "Used as the text for the summary attribute displayed on the table which is the text alternative to the data displayed on the graph.",
+ "translate-statsf-embed": "Used as aria-label for the <code><nowiki><pre></nowiki></code> tag that contains the code to embed the translation stats graph on other pages",
+ "translate-tag-page-desc": "Used as description for the message group in [[Special:Translate]].\n\nParameters:\n* $1 - the page title\n* $2 - link to the translation page <code>Special:MyLanguage/$1</code>, not the source page\n* $3 - source language name\n* $4 - source language code",
+ "translate-tag-page-wikipage-desc": "Used as description for the WikiPage based message group in [[Special:Translate]]. \n\nParameters:\n* $1 - link to translated page <code>$2/$6</code>\n* $2 - link to the source page\n* $3 - source language name\n* $4 - source language code\n* $5 - target language name \n* $6 - target language code",
+ "translate-sidebar-alltrans": "{{Identical|Otherlanguages}}",
+ "translations": "{{doc-special|Translations}}\n{{Identical|All translations}}",
+ "translations-summary": "Used in [[Special:Translations]].",
+ "translate-translations-no-message": "Error message used in [[Special:Translations]]. Parameters:\n* $1 - page title for the translatable message\nSee also:\n* {{msg-mw|Translate-translations-count}} - if there are one or more translations",
+ "translate-translations-none": "Unused at this time.\n\nUsed in [[Special:Translations]] if no translations exist.\n\nParameters:\n* $1 - Name of the language",
+ "translate-translations-count": "Shown in [[Special:Translations]].\n\nFollowed by the list of translations.\n\nParameters:\n* $1 - number of translations\nSee also:\n* {{msg-mw|Translate-translations-no-message}} - if there are no translations",
+ "translate-translations-fieldset-title": "Name of fieldset in [[Special:Translations]].\n\n{{Identical|Message}}",
+ "translate-translations-messagename": "Used in [[Special:Translations]].\n\n{{Identical|Name}}",
+ "translate-translations-project": "Used in [[Special:Translations]].\n{{Identical|Project}}",
+ "translate-translations-including-no-param": "Shown when using <code>&#x7b;{Special:Translations}}</code>, but a parameter is required, e.g. <code>&#x7b;{Special:Translations/MediaWiki:Mainpagetext}}</code>",
+ "translate-translations-history-short": "Shortest possible abbreviation of \"history\". Used on [[Special:Translations]].",
+ "languagestats": "{{doc-special|LanguageStats}}\n{{Identical|Language statistics}}",
+ "languagestats-summary": "Used in [[Special:LanguageStats]].",
+ "messagegroupstats-summary": "Used in [[Special:MessageGroupStats]]",
+ "languagestats-stats-for": "Used in [[Special:LanguageStats]]. Parameters:\n* $1 - a localised language name\n* $2 - link text {{msg-mw|Languagestats-recenttranslations}}. The link points to [[Special:Translate]] which shows recent translations of the language <code>$1</code>.",
+ "languagestats-recenttranslations": "Used as link text. The link points to [[Special:Translate]] which shows recent translations.\n\nUsed as <code>$2</code> in {{msg-mw|Languagestats-stats-for}}.",
+ "translate-langstats-incomplete": "A notice shown sometimes on [[Special:LanguageStats]].",
+ "translate-langstats-expand": "{{Doc-actionlink}}\nUsed in [[Special:LanguageStats]] to expand subgroups.\n{{Identical|Expand}}",
+ "translate-langstats-collapse": "{{doc-actionlink}}\nUsed in [[Special:LanguageStats]] to collapse subgroups.\n{{Identical|Collapse}}",
+ "translate-langstats-expandall": "{{doc-actionlink}}\nUsed in [[Special:LanguageStats]] to expand all subgroups.\n\nSee also:\n* {{msg-mw|Translate-langstats-collapseall}}",
+ "translate-langstats-collapseall": "{{doc-actionlink}}\nUsed in [[Special:LanguageStats]] to collapse all subgroups.\n\nSee also:\n* {{msg-mw|Translate-langstats-expandall}}",
+ "translate-language-code": "Name of fieldset in [[Special:LanguageStats]].\n\n{{Identical|Language code}}",
+ "translate-language-code-field-name": "Used in [[Special:LanguageStats]].\n\n{{Identical|Language code}}",
+ "translate-suppress-complete": "Used in [[Special:LanguageStats]].",
+ "translate-ls-noempty": "A filter option on [[Special:LanguageStats]].",
+ "translate-language": "Table header at [[Special:LanguageStats]].\n\n{{Identical|Language}}",
+ "translate-total": "Table header at [[Special:LanguageStats]].\n{{Identical|Message}}",
+ "translate-untranslated": "Column header in [[Special:LanguageStats]] for number of untranslated messages in a message group.\n{{Identical|Untranslated}}",
+ "translate-percentage-complete": "Used as column header in [[Special:LanguageStats]] and [[Special:MessageGroupStats]].",
+ "translate-percentage-fuzzy": "Used as column header in [[Special:LanguageStats]] and [[Special:MessageGroupStats]].\n{{Identical|Outdated}}",
+ "translate-percentage-proofread": "Used as column header in [[Special:LanguageStats]] and [[Special:MessageGroupStats]].",
+ "translate-languagestats-overall": "Label for summary row on [[Special:LanguageStats]]",
+ "translate-ls-submit": "Submit button text on [[Special:LanguageStats]] and [[Special:MessageGroupStats]].",
+ "translate-ls-column-group": "Column header in [[Special:LanguageStats]].\n{{Identical|Message group}}",
+ "translate-mgs-pagename": "{{doc-special|MessageGroupStats}}",
+ "translate-mgs-fieldset": "Fieldset label in [[Special:MessageGroupStats]].\nThese are the preferences that can be set in the input form for displaying or refreshing the list of message groups to translate along with their respective completion statistics.",
+ "translate-mgs-group": "Label of drop-down box in [[Special:MessageGroupStats]].\n{{Identical|Message group}}",
+ "translate-mgs-nocomplete": "Option in [[Special:MessageGroupStats]]",
+ "translate-mgs-noempty": "Option in [[Special:MessageGroupStats]]",
+ "translate-mgs-submit": "Submit button text",
+ "translate-mgs-column-language": "{{Identical|Language}}",
+ "translate-mgs-totals": "This is used in [[Special:MessageGroupStats]]. Parameters: \n* $1 - total number of shown languages",
+ "translate-mgs-invalid-group": "Used as error message. Parameters:\n* $1 - target message group name",
+ "translate-mgs-nothing": "Error message shown on Special:LanguageStats and Special:MessageGroupStats.",
+ "translate-tes-server-error": "Error message shown to the user if there was a server error when fetching data for the translate entity selector.",
+ "translate-tes-group-not-found": "Message shown on the translate entity selector if no groups are found.",
+ "translate-tes-type-to-search": "Placeholder text shown on the translate entity selector.",
+ "supportedlanguages": "{{doc-special|SupportedLanguages}}\n{{Identical|Supported language}}",
+ "supportedlanguages-summary": "Header for [[Special:ActiveLanguages]] page.",
+ "supportedlanguages-colorlegend": "Used on [[Special:ActiveLanguages]]. Parameters:\n* $1 is not a single number, but a series of numbers with different background colors, serving as a legend to match each color with a number of days passed since the last contributed translation. $1 is usually \"0 30 60 90 120 150 180\".\nSee [[Special:ActiveLanguages]] to see the final rendering.",
+ "supportedlanguages-localsummary": "{{notranslate}}\nPlace any site specific message here.",
+ "supportedlanguages-portallink": "{{optional}}\nParameters:\n* $1 - language code\n* $2 - localized language name\n* $3 - native language name\nSee also:\n* {{msg-mw|Supportedlanguages-portallink-nocldr}}",
+ "supportedlanguages-portallink-nocldr": "{{optional}}\nUsed if the localized language name is available. Parameters:\n* $1 - language code\n* $2 - native language name\nSee also:\n* {{msg-mw|Supportedlanguages-portallink}}",
+ "supportedlanguages-sqlite-error": "Error message emitted when unsupported sqlite database is detected.\n\nSimilar to {{msg-mw|Supportedlanguages-postgres-error}}.",
+ "supportedlanguages-postgres-error": "Error message emitted when unsupported postgres database is detected.\n\nSimilar to {{msg-mw|Supportedlanguages-sqlite-error}}.",
+ "supportedlanguages-translators": "Row for a language in [[Special:ActiveLanguages]], under the respective header.\n* $1 - the list of translators names\n* $2 - the number of translators listed\n* $3 - username for GENDER support when there is only one translator\n{{Identical|Translator}}",
+ "supportedlanguages-recenttranslations": "Link on [[Special:ActiveLanguages]] to [[Special:RecentChanges]].",
+ "supportedlanguages-count": "On [[Special:ActiveLanguages]]\n*$1 is the total number of supported languages.",
+ "supportedlanguages-activity": "Used as tooltip text for username in users list, to show user's activity.\n\nSee [{{canonicalurl:Special:ActiveLanguages}}#fr example].\n\nParameters:\n* $1 - username\n* $2 - number of edits the user made\n* $3 - number of days",
+ "translate-supportedlanguages-cached": "Notice shown in [[Special:ActiveLanguages]].\n\nParameters:\n*$1 is formatted time, such as '5 minutes'",
+ "translate-activelanguages-invalid-code": "Error message shown on Special:ActiveLanguages.\nParameters:\n* $1 - language code",
+ "abusefilter-edit-builder-vars-translate-source-text": "Description for an [[mw:Extension:AbuseFilter|AbuseFilter]] variable. Used as an abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
+ "abusefilter-edit-builder-vars-translate-target-language": "Description for an [[mw:Extension:AbuseFilter|AbuseFilter]] variable. Used as an abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
+ "translate-jssti-add": "Name of button in [[Special:Preferences]], tab Editing.",
+ "managemessagegroups": "{{doc-special|ManageMessageGroups}}",
+ "translate-smg-notallowed": "Wikitext error message in [[Special:ManageMessageGroups]]",
+ "translate-smg-nochanges": "Wikitext information message in [[Special:ManageMessageGroups]]",
+ "translate-smg-submit": "Button label in [[Special:ManageMessageGroups]]",
+ "translate-smg-submitted": "Confirmation wikitext information message in [[Special:ManageMessageGroups]]",
+ "translate-smg-submitted-with-failure": "Message shown on [[Special:ManageMessageGroups]] when updating certain message definition fails. Parameters:\n* $1 - number of message groups\n* $2 - list of message group labels\n* $3 - See {{msg-mw|Translate-smg-submitted-others-processing}}; Shown if some messages are being processed while others failed.",
+ "translate-smg-submitted-others-processing": "Shown along with {{msg-mw|Translate-smg-submitted-with-failure}} if there are other message groups that did not fail and are being processed.",
+ "translate-smg-more": "\"to process\" is an infinitive verb - changes that will have to be processed.",
+ "translate-smg-left": "Label for first diff column in [[Special:ManageMessageGroups]]",
+ "translate-smg-right": "Label for last diff column in [[Special:ManageMessageGroups]]",
+ "translate-smg-rename-select": "Used as a label for the Submit button on the message rename dialog.",
+ "translate-smg-rename-cancel": "Used as a label for the Cancel button on the message rename dialog.\n{{Identical|Cancel}}",
+ "translate-smg-rename-search": "Used as a placeholder text for the Search input on the message rename dialog.",
+ "translate-smg-rename-select-err": "Error message displayed, on the message rename dialog, to the user when they submit the data without selecting a message in the message rename dialog.",
+ "translate-smg-rename-no-msg": "Information message displayed, on the message rename dialog, to the user when there are no message renames for select.",
+ "translate-smg-rename-new": "Dropdown item displayed on the [[Special:ManageMessageGroups]] page next to newly added and renamed messages.",
+ "translate-smg-rename-rename": "Dropdown item displayed on the [[Special:ManageMessageGroups]] page next to newly added messages.",
+ "translate-smg-rename-dialog-title": "Title for the message rename dialog. It is followed by the key being renamed. Parameters: \n* $1 - Title message text.",
+ "translate-smg-changeset-modified": "Error message shown to the user on the [[Special:ManageMessageGroups]] page when the user tries to submit outdated changes.",
+ "translate-smg-no-groups-in-sync": "Displayed on [[Special:ManageMessageGroups]] page when there are no groups currently in synchronization.",
+ "translate-smg-strong-sync-help": "Displayed on [[Special:ManageMessageGroups]] and links to https://translatewiki.net/wiki/Special:MyLanguage/Strong_Synchronization\n{{identical|Help}}",
+ "translate-smg-groups-in-sync": "Used as a label for the details tag that displays the groups in synchronization.",
+ "translate-smg-groups-in-sync-list": "Notice shown in the details tag when it is opened.",
+ "translate-smg-groups-with-error-title": "Used as a label for the details tag that displays the groups that have had errors during synchronization",
+ "translate-smg-groups-with-error-desc": "Notice shown in the details tag when it is opened. {{Related|Translate-smg-groups-with-error-title}}",
+ "translate-smg-group-with-error-summary": "Notice shown in the details tag that lists error messages under a group. Parameters:\n* $1 Number of messages under the group that have errors",
+ "translate-smg-group-message-action-history": "Used as a label for the link that displays the history for the message that had errors.",
+ "translate-smg-group-action-resolve": "Used as a label for the link that allows translation administrator to mark the errors with the message or group as resolved.",
+ "translate-smg-group-sync-error-warn": "Notice shown under a group if it had a synchronization error previously.",
+ "translate-smg-group-message-tag-outdated": "Tag added for group synchronization message in case it is outdated",
+ "translate-smg-group-message-tag-rename": "Tag added for group synchronization message in case it is a rename\n{{identical|Rename}}",
+ "translate-smg-group-message-tag-label": "Used as a label for group synchronization message to list tags",
+ "translate-smg-group-message-message-content": "Used as a label for group synchronization message content",
+ "translate-smg-group-message-message-target": "Used as a label for the target group synchronization message that is being renamed",
+ "translate-smg-group-message-message-replacement": "Used as a label for the replacement text of the group synchronization message that is being renamed",
+ "translate-smg-group-message-message-other-langs": "Used as a label for other languages of the group synchronization message that is being renamed",
+ "translate-smg-loading": "Used as a label on [[Special:ManageMessageGroups]] to inform user of a server requests in progress",
+ "translate-smg-unknown-error": "Error message shown to the user on [[Special:ManageMessageGroups]] when an unexpected error occurs",
+ "translate-manage-import-diff": "See screenshot [[File:Manage-2.png|150px|right|Group management interface]].\nVariables:\n*$1 - Message name\n*$2 - radio buttons\n**{{msg-mw|Translate-manage-action-import}}\n**{{msg-mw|Translate-manage-action-conflict}}\n**{{msg-mw|Translate-manage-action-ignore}}",
+ "translate-manage-import-new": "Parameters:\n* $1 - message ID, enclosed in <code><nowiki><code></nowiki></code> tag",
+ "translate-manage-import-deleted": "Parameters:\n* $1 - message ID, enclosed in <code><nowiki><code></nowiki></code> tag",
+ "translate-manage-action-import": "Used in the group management interface.\n{{doc-screenshot|Manage-5.png|twn}}\n{{Identical|Import}}",
+ "translate-manage-action-conflict": "Used in the group management interface. {{doc-screenshot|Manage-5.png|twn}}\n\nfuzzy = mark translations for review/update.",
+ "translate-manage-action-ignore": "Used in the group management interface. {{doc-screenshot|Manage-5.png|twn}}\n{{Identical|Ignore}}",
+ "translate-manage-action-fuzzy": "Used in the group management interface. {{doc-screenshot|Manage-5.png|twn}}\n\nfuzzy = mark translations for review",
+ "translate-manage-action-rename-fuzzy": "Used in the group management interface. {{doc-screenshot|Manage-5.png|twn}}\n\nfuzzy = mark translations for review",
+ "translate-manage-action-rename": "Used in the group management interface. {{doc-screenshot|Manage-5.png|twn}}\n\nrename = modify the message key",
+ "translate-manage-action-ignore-change": "Used in the group management interface. {{doc-screenshot|Manage-5.png|twn}}",
+ "translate-manage-nochanges": "Message shown in Special:ImportTranslations.",
+ "translate-manage-nochanges-other": "Message shown in Special:ImportTranslations.",
+ "translate-manage-inconsistent": "Parameters:\n* $1 - a string (key name?) e.g. action-changed-XXXX",
+ "translate-manage-toolong": "Parameters:\n* $1 - number of seconds, can be used for PLURAL",
+ "translate-manage-import-summary": "Used as edit summary.",
+ "translate-manage-import-ignore": "Message shown in Special:ImportTranslations when a message translation change is ignored.",
+ "translate-manage-import-rename-summary": "Used as page move summary.",
+ "translate-manage-conflict-summary": "An edit summary message when importing a message with conflicting changes.",
+ "translate-manage-submit": "Used in the group management interface.\n{{doc-screenshot|Manage-3.png|twn}}\n{{Identical|Execute}}",
+ "translate-manage-intro-other": "[[File:Manage-2.png|150px|right|Group management interface]]\nIntroduction to special page. See screenshot. Parameters:\n* $1 is a language name.",
+ "translate-manage-import-ok": "Message given when a translation has been imported on Special:ImportTranslations. Parameters:\n* $1 is the target page name for the translation.",
+ "translate-manage-import-done": "Message given when actions on SpeciaL:ImportTranslations have completed.",
+ "translate-manage-empty-content": "Shown in Special:ManageGroups when an external source has added or removed a definition or a translation which has no content (is empty string).",
+ "translate-manage-key-reused": "Shown in Special:ManageGroups when an external source has added a message for which the definition or translation page already exists.",
+ "translate-manage-source-message-not-found": "Shown on Special:ManageGroups when an external source has added a message for which the definition does not exist.",
+ "importtranslations": "{{doc-special|ImportTranslations}}\n{{doc-screenshot|Import-1.png|twn}}",
+ "translate-import-from-local": "Used in [[Special:ImportTranslations]]. {{doc-screenshot|Import-1.png|twn}}",
+ "translate-import-load": "Used in [[Special:ImportTranslations]].\n{{doc-screenshot|Import-1.png|twn}}\n{{Identical|Load file}}",
+ "translate-import-err-dl-failed": "Used as error message in [[Special:ImportTranslations]]. Parameters:\n* $1 - error message\n{{Related|Translate-import-err}}",
+ "translate-import-err-ul-failed": "Used as error message in [[Special:ImportTranslations]].\n{{Related|Translate-import-err}}",
+ "translate-import-err-invalid-title": "Used as error message in [[Special:ImportTranslations]]. Parameters:\n* $1 - filename\n{{Related|Translate-import-err}}",
+ "translate-import-err-no-such-file": "Used as error message in [[Special:ImportTranslations]]. Parameters:\n* $1 - filename\n{{Related|Translate-import-err}}",
+ "translate-import-err-stale-group": "Used as error message in [[Special:ImportTranslations]].\n{{Related|Translate-import-err}}",
+ "translate-import-err-no-headers": "Used as error message in [[Special:ImportTranslations]].\n{{Related|Translate-import-err}}",
+ "translate-js-support-unsaved-warning": "A warning shown in a dialog box if a user tries to close a page without saving a translation written .",
+ "translate-gs-pos": "Used in wiki tables for localisation statistics as a column header for 'Position' abbreviated. See [[Project:MediaWiki localisation in the 50 most spoken languages|example]]",
+ "translate-gs-code": "Used in wiki tables for localisation statistics as a column header for language code. See [[Project:MediaWiki localisation in the 50 most spoken languages|example]]\n{{Identical|Code}}",
+ "translate-gs-continent": "Used in wiki tables for localisation statistics as a column header for the continent where a language is spoken. See [[Project:MediaWiki localisation in the 50 most spoken languages|example]].\n{{Identical|Continent}}",
+ "translate-gs-speakers": "Used in wiki tables for localisation statistics as a column header for the number of speakers of a language. See [[Project:MediaWiki localisation in the 50 most spoken languages|example]]",
+ "translate-gs-score": "Used in wiki tables for localisation statistics as a column header for the weighted score of the localisation of a language. See [[Project:MediaWiki localisation in the 50 most spoken languages|example]]\n{{Identical|Score}}",
+ "translate-gs-multiple": "Used in wiki tables for localisation statistics as a value in the Continent column when a language is spoken on more than one continent . See [[Project:MediaWiki localisation in the 50 most spoken languages|example]]",
+ "translate-gs-count": "Used in summary wiki tables for localisation statistics as a column header for the number of languages on a continent in the table above it. See [[Project:MediaWiki localisation in the 50 most spoken languages|example]]\n{{Identical|Count}}",
+ "translate-gs-total": "Used in summary wiki tables for localisation statistics as a row description for the row that contains summarised data for the table. See bottom table on [[Project:MediaWiki localisation in the 50 most spoken languages|example]]\n\n{{Identical|Total}}",
+ "translate-gs-avgscore": "Used in summary wiki tables for localisation statistics as a column header for the average score of languages on a continent in the table above it. See [[Project:MediaWiki localisation in the 50 most spoken languages|example]]",
+ "translate-documentation-language": "This is the name of the message documentation language code (qqq). Follow the rules of your languages and use small first letter if it doesn't capitalize language names always. It might be easier to translate it as \"translation guidelines\" or \"translation help\".\n{{Identical|Message documentation}}",
+ "translate-searchprofile": "Tab in [[Special:Search]]\n{{Identical|Translation}}",
+ "translate-searchprofile-tooltip": "Tooltip for a tab in [[Special:Search]]",
+ "translate-searchprofile-note": "A message shown in [[Special:Search]]. $1 is the url to a special page.",
+ "translate-search-languagefilter": "Label for a language dropdown in Special:Search (when ElasticSearch is not in use?).",
+ "translate-search-nofilter": "First option in language dropdown in Special:Search to not limit by language.",
+ "log-name-translationreview": "{{doc-logpage}}",
+ "log-description-translationreview": "Description of a log type.",
+ "logentry-translationreview-message": "{{Logentry|[[Special:Log/translationreview]]}}",
+ "logentry-translationreview-group": "{{Logentry|[[Special:Log/translationreview]]}}\nAdditional parameters:\n* $4 - Localised language name\n* $5 - Label of the message group (unused)\n* $6 - Previous workflow state\n* $7 - New workflow state",
+ "group-translate-sandboxed": "{{doc-group|translate-sandboxed}}",
+ "group-translate-sandboxed-member": "{{doc-group|translate-sandboxed|member}}",
+ "right-translate-sandboxmanage": "{{doc-right|translate-sandboxmanage}}",
+ "action-translate-sandboxmanage": "{{doc-action|translate-sandboxmanage}}",
+ "right-translate-sandboxaction": "{{doc-right|translate-sandboxaction}}",
+ "action-translate-sandboxaction": "{{doc-action|translate-sandboxaction}}",
+ "translate-workflow-state-": "Unselectable select option in [[Special:Translate]] if workflow state editing is on. The dangling hyphen in the message key hints that this state is unset; the actual states have the same key with something after the hyphen.",
+ "translate-workflowstatus": "In [[Special:Translate]] if workflow states are in use, $1 is selector or the current state.\n{{Identical|State}}",
+ "translate-workflow-set-doing": "Submit button text when waiting for reply from server",
+ "translate-workflow-autocreated-summary": "This is an edit summary for the automatic creation of a workflow state page.\n\nParameters:\n* $1 - state",
+ "translate-stats-workflow": "Column header on [[Special:LanguageStats]] and [[Special:MessageGroupStats]]\n{{Identical|State}}",
+ "translate-workflowgroup-label": "Name of the message group that contains translations for translation workflow states defined for the wiki.",
+ "translate-workflowgroup-desc": "{{doc-important|Do not translate the variable name <code>$wgTranslateWorkflowStates</code>.}}",
+ "translate-dynagroup-recent-label": "Label of a message group",
+ "translate-dynagroup-recent-desc": "Description of a message group.",
+ "translate-dynagroup-additions-label": "Label of a message group",
+ "translate-dynagroup-additions-desc": "Description of a message group.",
+ "translate-msggroupselector-projects": "Title text for the message group breadcrumb.\n{{Identical|Message group}}",
+ "translate-msggroupselector-search-placeholder": "Place holder text for the search box in message group selector. It's supposed to tell the user that the box is for a search for a name of a group.",
+ "translate-msggroupselector-search-all": "Label to display all projects.\n{{Identical|All}}",
+ "translate-msggroupselector-search-recent": "A tab label in the message group selector that shows groups that were recently translated by the user.\n{{Identical|Recent}}",
+ "translate-msggroupselector-view-subprojects": "Label indicating that the current message group contains other groups. Parameters:\n* $1 is number of sub groups",
+ "tux-languageselector": "Label for language selector in [[Special:Translate]].\n{{Identical|Translate}}",
+ "tux-select-target-language": "Accessibility label for language selector on [[Special:Translate]].",
+ "tux-tab-all": "Tab in [[Special:Translate]] new ui to select which messages to show.\n{{Identical|All}}",
+ "tux-tab-untranslated": "Tab in [[Special:Translate]] new ui to select which messages to show.\n{{Identical|Untranslated}}",
+ "tux-tab-outdated": "Tab in [[Special:Translate]] UI to select which messages to show.\n{{Identical|Outdated}}",
+ "tux-tab-translated": "Tab in the new interface for [[Special:Translate]], to select which kind of messages to show.\n{{Identical|Translated}}",
+ "tux-tab-unproofread": "Tab in [[Special:Translate]] new ui to select which messages to show.\n\n\"Unreviewed\" stands for \"(messages which) have not been reviewed\".\n{{Identical|Unreviewed}}",
+ "tux-edit": "Link in [[Special:Translate]] to open message editor.\n{{Identical|Edit}}",
+ "tux-status-optional": "Status label in [[Special:Translate]] indicating that message should only be translated in special cases.\n{{Identical|Optional}}",
+ "tux-status-fuzzy": "Status label in [[Special:Translate]] indicating translation needs updating.\n{{Identical|Outdated}}",
+ "tux-status-proofread": "Status label in [[Special:Translate]] indicating that you have reviewed the translation.\n{{Identical|Reviewed}}",
+ "tux-status-translated": "Status label in [[Special:Translate]] indicating that a message is translated. An adjective that refers to a message.\n{{Identical|Translated}}",
+ "tux-status-saving": "Status label in [[Special:Translate]] indicating that the translation is being saved.\n{{Identical|Saving}}",
+ "tux-status-unsaved": "Status label in [[Special:Translate]] indicating that the translation is not saved yet.",
+ "tux-save-unknown-error": "Error message shown on [[Special:Translate]] when an unknown error occurs while attempting to save the translation.",
+ "tux-editor-placeholder-documentation": "Placeholder text for the translation editor textbox if target language is message documentation",
+ "tux-editor-placeholder-language": "Placeholder text for the translation editor textbox if target language is not message documentation. Parameters:\n* $1 - Language name",
+ "tux-editor-editsummary-placeholder": "Placeholder text for the translation editor's edit summary box",
+ "tux-editor-paste-original-button-label": "Label for a button that pastes the text in the source language to the translation editor.",
+ "tux-editor-discard-changes-button-label": "Label for a button that discards the changes made to a translation and restores the saved version.",
+ "tux-editor-save-button-label": "Label for save translation button",
+ "tux-editor-skip-button-label": "Label for skip button",
+ "tux-editor-cancel-button-label": "Label for cancel button.\nPressing the button hides the message editor without saving and marks the message internally as \"hard\".\n{{Identical|Cancel}}",
+ "tux-editor-confirm-button-label": "Label for confirm button",
+ "tux-editor-proofread-button-label": "Label for review button. \"Reviewed\" refers to a translation.\n{{Identical|Mark as reviewed}}",
+ "tux-editor-shortcut-info": "A help text for the keyboard shortcuts. Parameters:\n* $1 - shortcut key for save button\n* $2 - shortcut key for skip button\n* $3 - \"ALT\"\n* $4 - shortcut key for summary input",
+ "tux-editor-edit-desc": "Text for the link to edit message documentation.\n{{Identical|Edit description}}",
+ "tux-editor-add-desc": "Text for the link to add message documentation when it doesn't exist",
+ "tux-editor-suggestions-title": "Title text for translation memory suggestions.\n{{Identical|Suggestion}}",
+ "tux-editor-latest-updates-title": "Title text for latest edit summaries for the translation",
+ "tux-editor-changes-without-summary": "Text for edits without summaries. Parameter:\n* $1 - Number of summaries without a message",
+ "tux-editor-all-changes": "Text for the link to all edit summaries for the translation",
+ "tux-editor-in-other-languages": "Title text for suggestions from other languages.\n{{Identical|Otherlanguages}}",
+ "tux-editor-need-more-help": "Help text label",
+ "tux-editor-ask-help": "Link text for more information",
+ "tux-editor-tm-match": "Text showing the quality of suggestion in percentage. Parameters:\n* $1 - a value less than 100\n{{Identical|Match}}",
+ "tux-notices-more": "A label for a small tab above the edit area, clicking on which shows more notices.\n* $1 - the number of additional notices that will be shown\n{{Identical|More}}",
+ "tux-notices-hide": "A label for a small tab above the notices about the edit area, clicking on which hides the notices.\n{{Identical|Hide}}",
+ "tux-editor-save-failed": "An error shown above the edit box.\n* $1 - the notice message that the API returns",
+ "tux-editor-n-uses": "Link text in the translation editor which tells how many times the same string was suggested as translation from the translation memory. $1 is a number.",
+ "tux-editor-message-desc-more": "{{doc-actionlink}}\nLink text for expanding long message documentation.\n\nSee also:\n* {{msg-mw|Tux-editor-message-desc-less}}\n{{Identical|View more}}",
+ "tux-editor-message-desc-less": "{{doc-actionlink}}\nLink text for collapsing long message documentation.\n\nSee also:\n* {{msg-mw|Tux-editor-message-desc-more}}",
+ "tux-editor-clear-translated": "Label for the button that appears at the footer of the translation editor.\nPressing the button clears all the messages that were translated from the page.",
+ "tux-editor-proofreading-mode": "Label for the button that appears at the footer of the translation editor.\nPressing the button goes to the review mode.\n\nTranslate as a verb.\n{{Identical|Review}}",
+ "tux-editor-translate-mode": "Label for the button that appears at the footer of the translation editor.\nPressing the button goes to the translation mode.\n{{Identical|List}}",
+ "tux-editor-proofreading-hide-own-translations": "A label for a button that appears at the bottom of the translation editor in review mode.\nPressing the button hides the user's own translations from the list.\n\nSee also:\n* {{msg-mw|Tux-editor-proofreading-show-own-translations}}",
+ "tux-editor-proofreading-show-own-translations": "A label for a button that appears at the bottom of the translation editor in review mode.\nPressing the button shows the user's own translations in the list.\n\nSee also:\n* {{msg-mw|Tux-editor-proofreading-hide-own-translations}}",
+ "tux-proofread-action-tooltip": "Used as a tooltip for the review button in review mode.\n{{Identical|Mark as reviewed}}",
+ "tux-proofread-edit-label": "Used as a label that appears near the translation button in review mode.\nPressing the button enters translation mode.\n\nThe message {{msg-mw|tux-proofread-action-tooltip}} is used as a tooltip for the button near it.\n{{Identical|Edit}}",
+ "tux-editor-page-mode": "Label for the button that appears at the footer of the translation editor.\nPressing the button goes to the page mode.\n{{Identical|Page}}",
+ "tux-editor-outdated-notice": "Used as notice message.\n\nThis message is followed by the link which is labeled {{msg-mw|tux-editor-outdated-notice-diff-link}}.",
+ "tux-editor-outdated-notice-diff-link": "Used as link text.\n\nThis message follows the notice message {{msg-mw|tux-editor-outdated-notice}}.",
+ "tux-editor-doc-editor-placeholder": "A placeholder that appears in the message documentation editor.\n{{Identical|Message documentation}}",
+ "tux-editor-doc-editor-save": "A button that saves the documentation string.",
+ "tux-editor-doc-editor-cancel": "A Cancel button that doesn't save the documentation string.\n{{Identical|Cancel}}",
+ "tux-messagetable-more-messages": "Text showing number of messages to be loaded in translation message table\n* $1 - number of messages",
+ "tux-messagetable-loading-messages": "A progress text saying messages are being loaded\n* $1 - number of messages",
+ "tux-message-filter-placeholder": "Placeholder text for the message table filter search box. \"Filter\" is an imperative verb, so the message means \"Filter the list\", and not \"List of filters\".",
+ "tux-message-filter-result": "Search result for filtering the message table\n* $1 - number of results\n* $2 - query string\n\n'''See also'''\n* [[Template:Identical/Result]]\n* {{msg-mw|Tux-sst-count}}",
+ "tux-message-filter-advanced-button": "Button label for searching the messages using [[Special:SearchTranslations]].\n{{Identical|Advanced search}}",
+ "tux-message-filter-optional-messages-label": "A label for a checkbox. Checking the box causes message editor to show optional messages.",
+ "tux-proofread-translated-by-self": "A small notification that appears in a review box, saying that the message was translated by the current user.\n\nSee also:\n* {{msg-mw|Translate-messagereview-reviewswithyou}}",
+ "tux-empty-list-all": "{{Tuxspec|7}} This is a heading.",
+ "tux-empty-list-all-guide": "{{Tuxspec|7}} This is a secondary guide text.",
+ "tux-translate-page-no-such-group": "An error message that appears about the group selector on Special:Translate when an invalid group was requested.",
+ "tux-empty-list-translated": "{{Tuxspec|7}} This is a heading.",
+ "tux-empty-list-translated-guide": "{{Tuxspec|7}} This is a secondary guide text.",
+ "tux-empty-list-translated-action": "{{Tuxspec|7}} This is an action button.\n{{Identical|Translate}}",
+ "tux-empty-no-messages-to-display": "{{Tuxspec|7}} Appears when there are no messages to show in the messages list.",
+ "tux-empty-there-are-optional": "{{Tuxspec|7}} A subtitle for {{msg-mw|tux-empty-no-messages-to-display}}.",
+ "tux-empty-show-optional-messages": "{{Tuxspec|7}} A link shown below {{msg-mw|tux-empty-no-messages-to-display}}.\nClicking the link enables the optional messages.\n{{Identical|Show optional message}}",
+ "tux-empty-no-outdated-messages": "{{Tuxspec|7}} A heading displayed when there are no outdated messages.\n\nSee also:\n* {{msg-mw|Tux-tab-outdated}}",
+ "tux-empty-nothing-to-proofread": "{{Tuxspec|7}} A heading displayed when there are no messages to review.\n\nSee also:\n* {{msg-mw|Tux-empty-nothing-new-to-proofread}}",
+ "tux-empty-you-can-help-providing": "{{Tuxspec|7}} A subtitle for {{msg-mw|tux-empty-no-outdated-messages}}.",
+ "tux-empty-nothing-new-to-proofread": "{{Tuxspec|7}} A heading displayed when there no messages that were not reviewed already.\n\nSee also:\n* {{msg-mw|Tux-empty-nothing-to-proofread}}",
+ "tux-empty-you-can-review-already-proofread": "A subtitle for {{msg-mw|tux-empty-nothing-new-to-proofread}}.\n{{Tuxspec|7}} (This subtitle is in the same position as the grey one there.)",
+ "tux-empty-list-other": "{{Tuxspec|7}} This is a heading.\n{{Identical|Nothing to translate}}",
+ "tux-empty-list-other-guide": "{{Tuxspec|7}} This is a secondary guide text.",
+ "tux-empty-list-other-action": "{{Tuxspec|7}} This is an action button.\n{{Identical|Review translation}}",
+ "tux-empty-list-other-link": "{{Tuxspec|7}} This is a link to change message filter.\n{{Identical|Show all messages}}",
+ "tux-editor-close-tooltip": "Tooltip for close icon of translate editor.\n{{Identical|Close}}",
+ "tux-editor-expand-tooltip": "Tooltip for an icon (rectangle with an arrow) in the new translation editor which increases size of the main text area by closing the translation aids area on the screen's side.\n\nSee also:\n* {{msg-mw|Tux-editor-collapse-tooltip}}\n{{Identical|Expand}}",
+ "tux-editor-collapse-tooltip": "Tooltip for an icon (rectangle with an arrow) in the new translation editor which reduces size of the main text area to uncover the translation aids area on the screen's side.\n\nSee also:\n* {{msg-mw|Tux-editor-expand-tooltip}}\n{{Identical|Collapse}}",
+ "tux-editor-message-tools-show-editor": "A link to the message's edit page. An item in a menu that appears when clicking on the message title.",
+ "tux-editor-message-tools-history": "A link to the message history. An item in a menu that appears when clicking on the message title.\n{{Identical|History}}",
+ "tux-editor-message-tools-delete": "A link to delete the message. An item in a menu that appears when clicking on the message title.\n{{Identical|Delete}}",
+ "tux-editor-message-tools-translations": "A link to translations of a message to all languages. An item in a menu that appears when clicking on message title.\n{{Identical|All translations}}",
+ "tux-editor-message-tools-linktothis": "A direct link to the translation editor showing this translation. An item in a menu that appears when clicking on message title",
+ "tux-editor-loading": "Loading message while translation editor is being prepared with helper information.\n{{Identical|Loading}}",
+ "tux-editor-loading-failed": "Error message.\n* $1 - additional information",
+ "translate-search-more-languages-info": "Information shown as number of languages matching the query using\n[[Special:SearchTranslations]]\n* $1 - number of languages\nSee also:\n* {{msg-mw|Translate-search-more-groups-info}}",
+ "translate-statsbar-tooltip": "Descriptive text to show for the stats bar for message groups on mouse over.\n* $1 percentage of messages translated\n* $2 percentage of messages reviewed",
+ "translate-statsbar-tooltip-with-fuzzy": "Descriptive text to show for the stats bar for message groups on mouse over.\n\nParameters:\n* $1 - percentage of messages translated (does not include outdated)\n* $2 - percentage of messages reviewed\n* $3 - percentage of messages outdated (not counted as translated)",
+ "translate-search-more-groups-info": "Information shown as number of message groups matching the query using\n[[Special:SearchTranslations]]\n* $1 - number of groups\nSee also:\n* {{msg-mw|Translate-search-more-languages-info}}",
+ "translate-syntax-error": "Notice shown to the user when saving a translation fails validation due to syntax errors. This is shown following the message:\n* {{msg-mw|Tux-editor-save-failed}}",
+ "tux-session-expired": "Warning shown to the user in a popup when translation could not be saved because the session is expired.",
+ "tux-nojs": "An error shown in Special:Translate.",
+ "specialpages-group-translation": "{{doc-special-group}}\n{{Identical|Translation}}",
+ "content-model-translate-messagebundle": "Name of a page content type",
+ "translate-messagebundle-validation-error": "Error message.\n* $1 - more details",
+ "translate-messagebundle-error-parsing": "Error message.\n* $1 - details about parsing error",
+ "translate-messagebundle-error-invalid-array": "Error message.\n* $1 - unlocalised PHP type",
+ "translate-messagebundle-error-key-empty": "Error message.",
+ "translate-messagebundle-error-key-too-long": "Error message.\n* $1 - message key",
+ "translate-messagebundle-error-key-invalid-characters": "Error message.\n* $1 - message key",
+ "translate-messagebundle-error-invalid-value": "Error message.\n* $1 - message key",
+ "translate-messagebundle-error-empty-value": "Error message.\n* $1 - message key",
+ "translate-messagebundle-error-metadata-type": "Error message.",
+ "translate-messagebundle-error-invalid-metadata": "Error message.\n* $1 - metadata key \n* $2 - allowed metadata keys",
+ "translate-messagebundle-error-invalid-sourcelanguage": "Error message.\n\nParameters:\n* $1 - the invalid source language code",
+ "translate-messagebundle-error-invalid-prioritylanguage": "Error message. \n\nParameters:\n* $1 - invalid language code\n* $2 - number of invalid languages",
+ "translate-messagebundle-error-invalid-prioritylanguage-format": "Error message.",
+ "translate-messagebundle-group-description": "Group description for message bundle message groups.\n\nParameters:\n* $1 - the message bundle page title\n* $2 - the message bundle source page usable as link target",
+ "translate-messagebundle-change-sourcelanguage": "Reason when changing the source language of a message bundle.",
+ "translate-messagebundle-sourcelanguage-changed": "Error message if source language is changed after message bundle is created",
+ "log-action-filter-translationreview": "{{Doc-log-action-filter-type|translationreview}}\n{{Identical|Type of action}}\n{{Related|Log-action-filter}}",
+ "log-action-filter-translationreview-message": "{{doc-log-action-filter-action|translationreview|message}}",
+ "log-action-filter-translationreview-group": "{{doc-log-action-filter-action|translationreview|group}}"
+}
diff --git a/Translate/i18n/core/qu.json b/Translate/i18n/core/qu.json
new file mode 100644
index 00000000..9a449d2f
--- /dev/null
+++ b/Translate/i18n/core/qu.json
@@ -0,0 +1,259 @@
+{
+ "@metadata": {
+ "authors": [
+ "AlimanRuna"
+ ]
+ },
+ "translate": "T'ikray",
+ "translate-desc": "[[Special:Translate|Sapaq p'anqa]] MediaWiki nisqata hukkunatapas t'ikranapaq",
+ "translate-taction-translate": "T'ikray",
+ "translate-taction-proofread": "Allinchaspa ñawiriy",
+ "translate-taction-lstats": "Rimaymanta ranuy (kanchachani)",
+ "translate-taction-mstats": "Willay huñu ranuy (kanchachani)",
+ "translate-taction-export": "Hawaman quy",
+ "translate-taction-disabled": "Kay wikipiqa kayta manam rurayta atinkichu.",
+ "translate-page-no-such-language": "Nisqa rimayqa manam kanchu.",
+ "translate-page-no-such-group": "Nisqa huñuqa manam kanchu.",
+ "translate-page-disabled": "Kay huñupi kay rimayman t'ikraykunaqa manam saqillasqachu.\nKayrayku:\n\n<em>$1</em>",
+ "translate-language-disabled": "Kay rimayman t'ikrayqa manam saqillasqachu.",
+ "translate-page-settings-legend": "Churasqakuna",
+ "translate-page-group": "Huñu",
+ "translate-page-language": "Rimay",
+ "translate-page-limit": "Saywa",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|willay|willaykuna}} huk p'anqapaq",
+ "translate-submit": "Apamuy",
+ "translate-page-navigation-legend": "Wamp'una",
+ "translate-page-showing": "Willaykunata $3-pura $1-manta $2-kama rikuchispa.",
+ "translate-page-showing-all": "{{PLURAL:$1|Huk willayta|$1 willaykunata}} rikuchispa.",
+ "translate-page-showing-none": "Rikuchina willaykunaqa manam kanchu.",
+ "translate-next": "Qatiq p'anqa",
+ "translate-prev": "Ñawpaq p'anqa",
+ "translate-page-description-legend": "Willay huñumanta t'iktuna",
+ "translate-page-description-hasoptional-open": "Akllana willaykunata rikuchiy.",
+ "translate-page-edit": "llamk'apuy",
+ "translate-optional": "(chikllana)",
+ "translate-ignored": "(qhawarparisqa)",
+ "translate-edit-title": "\"$1\" nisqata llamk'apuy",
+ "translate-edit-definition": "Qallariy willay qillqa",
+ "translate-edit-contribute": "llamk'apuy",
+ "translate-edit-information": "Willaymanta t'iktuynin ($1)",
+ "translate-edit-warnings": "Mana hunt'a t'ikrasqakunamanta yuyampaykuna",
+ "translate-edit-tmmatch-source": "T'ikranapaq pukyu qillqa: $1",
+ "translate-edit-tmmatch": "$1%-nin kaqlla kaq",
+ "translate-edit-nopermission": "Willaykunata t'ikranaykipaqqa t'ikrana hayñikunatam muchunki.",
+ "translate-edit-askpermission": "Saqillayta mañakuy",
+ "translate-checks-pagename": "Suti k'itiqa hukchasqam sut'ichaymanta",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> manam allinchu.",
+ "translate-checks-fudforum-syntax": "Kay wikipiqa <nowiki>$1</nowiki> nisqata llamk'achiy <nowiki>$2</nowiki> ranti.",
+ "translate-pref-editassistlang": "Yanapana rimaykuna:",
+ "prefs-translate": "T'ikray akllanakuna",
+ "translate-pref-editassistlang-bad": "Sutisuyupi rimay tuyruqa manam allinchu:\n<nowiki>$1</nowiki>.",
+ "right-translate-manage": "Willay huñukunata kamachiy",
+ "action-translate-manage": "willay huñukunata kamachiy",
+ "right-translate-import": "Mana llikapi kachkaq t'ikrasqakunata hawamanta chaskiy",
+ "action-translate-import": "mana llikapi kachkaq t'ikrasqakunata hawamanta chaskiy",
+ "right-translate-messagereview": "T'ikrasqakunata allinchanapaq ñawiriy",
+ "right-translate-groupreview": "Willay huñukunap llamk'apayayninpa kachkayninta hukchay",
+ "translate-rcfilters-translations-only-label": "T'ikrasqakuna",
+ "translate-rc-translation-filter": "T'ikraykunata ch'illchiy:",
+ "translate-rc-translation-filter-no": "Ama imatapas ruraychu",
+ "translate-rc-translation-filter-only": "T'ikrasqakunallata rikuchiy",
+ "translate-rc-translation-filter-filter": "T'ikraykunata ch'illchiy",
+ "translate-rc-translation-filter-site": "Tiyayllapi willaykunata hukchasqakuna",
+ "translationstats": "T'ikraymanta ranuy (kanchachani)",
+ "translate-stats-edits": "Llamk'apusqakuna",
+ "translate-stats-users": "T'ikraqkuna",
+ "translate-stats-registrations": "Hallch'asqakuna",
+ "translate-stats-reviews": "Allinchanapaq ñawirisqakuna",
+ "translate-stats-reviewers": "Allinchanapaq ñawiriqkuna",
+ "translate-statsf-options": "Siq'iwa akllanakuna",
+ "translate-statsf-width": "Kimrayman iñukuna",
+ "translate-statsf-height": "Sayayman iñukuna",
+ "translate-statsf-days": "Mit'api hayk'a p'unchawkuna:",
+ "translate-statsf-start": "Qallariy p'unchaw:",
+ "translate-statsf-scale": "Chhama kaynin:",
+ "translate-statsf-scale-months": "Killakuna",
+ "translate-statsf-scale-weeks": "Simanakuna",
+ "translate-statsf-scale-days": "P'unchawkuna",
+ "translate-statsf-scale-hours": "Urakuna",
+ "translate-statsf-count": "Tupu:",
+ "translate-statsf-count-edits": "Hukchasqakunap yupaynin",
+ "translate-statsf-count-users": "Llamk'achkaq t'ikraqkuna",
+ "translate-statsf-count-registrations": "Musuq ruraqkuna",
+ "translate-statsf-count-reviews": "T'ikrasqata qhawakipasqakuna",
+ "translate-statsf-count-reviewers": "Allinchanapaq ñawiriqkuna",
+ "translate-statsf-submit": "Ñawpaqta qhawallay",
+ "translate-tag-page-desc": "T'ikrasqaqa [[$2|$1]] nisqa wiki p'anqam.",
+ "translate-sidebar-alltrans": "Huk simikunapi",
+ "translations": "Tukuy t'ikrasqakuna",
+ "translate-translations-no-message": "\"$1\" manam t'ikrana willaychu",
+ "translate-translations-none": "\"$1\" nisqapaq manam t'ikrasqakuna kanchu",
+ "translate-translations-count": "{{PLURAL:$1|Huk t'ikrasqam|$1 t'ikrasqakunam}} tarisqa.",
+ "translate-translations-fieldset-title": "Willay",
+ "translate-translations-messagename": "Suti:",
+ "translate-translations-project": "Ruraykamay:",
+ "translate-translations-history-short": "h",
+ "languagestats": "Rimaymanta ranuy (kanchachani)",
+ "languagestats-summary": "Kay p'anqaqa huk rimayman t'ikrasqakunamanta ranuy (kanchachani) nisqatam tukuy willay huñukunapaq rikuchin.",
+ "languagestats-stats-for": "$1-man t'ikrasqakunamanta ranuy (kanchachani) ($2).",
+ "languagestats-recenttranslations": "ñaqha t'ikrasqakuna",
+ "translate-langstats-expand": "mast'ariy",
+ "translate-langstats-collapse": "thuñichiy",
+ "translate-langstats-expandall": "tukuyta mast'ariy",
+ "translate-langstats-collapseall": "tukuyta thuñichiy",
+ "translate-language-code": "Rimay tuyru",
+ "translate-language-code-field-name": "Rimay tuyru:",
+ "translate-suppress-complete": "Hunt'a t'ikrasqa willay huñukunata pakay",
+ "translate-ls-noempty": "Manaraq t'ikrarisqa willay huñukunata pakay",
+ "translate-language": "Rimay",
+ "translate-total": "Willaykuna",
+ "translate-untranslated": "Mana t'ikrasqa",
+ "translate-percentage-complete": "Tukusqa",
+ "translate-percentage-fuzzy": "Mawk'ayasqa",
+ "translate-languagestats-overall": "Tukuy willay huñuntin",
+ "translate-ls-submit": "Ranuy (kanchachani) nisqata rikuchiy",
+ "translate-ls-column-group": "Willay huñu",
+ "translate-mgs-pagename": "Willay huñu ranuy (kanchachani)",
+ "translate-mgs-fieldset": "Allinkachinakunata rikuchiy",
+ "translate-mgs-group": "Willay huñu:",
+ "translate-mgs-submit": "Ranuy (kanchachani) nisqata rikuchiy",
+ "translate-mgs-column-language": "Rimay",
+ "translate-mgs-totals": "Tukuy rimaykuna kuskalla",
+ "translate-mgs-invalid-group": "Nisqa huñuqa $1 manam kanchu.",
+ "supportedlanguages": "Q'imisqa rimaykuna",
+ "supportedlanguages-colorlegend": "Llimphipaq t'iktuna: Qhipaq t'ikrasqamantapachaqa $1 p'unchawñam.",
+ "supportedlanguages-translators": "{{PLURAL:$2|T'ikraq|T'ikraqkuna}}: $1",
+ "supportedlanguages-recenttranslations": "ñaqha t'ikrasqakuna",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|rimay|rimaykuna}} llapantinpi.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|llamk'apusqa|llamk'apusqakuna}} - qhipaq llamk'apusqa $3 {{PLURAL:$3|p'unchaw|p'unchaw}} ñaqha",
+ "translate-jssti-add": "Sutisuyuman yapay",
+ "managemessagegroups": "Willay huñukunata kamachiy",
+ "translate-smg-notallowed": "Kayta ruraytaqa manam saqillasqachu kanki.",
+ "translate-smg-left": "Wikipi willaypa samiqnin",
+ "translate-smg-right": "Yaykuq hukchasqakuna",
+ "translate-manage-import-diff": "Willay $1 | Ruraykuna: $2",
+ "translate-manage-import-new": "Musuq willay $1",
+ "translate-manage-import-deleted": "Qullusqa willay $1",
+ "translate-manage-action-import": "Hawamanta chaskiy",
+ "translate-manage-action-conflict": "Hawamanta chaskispa allinchanapaq ñawirina nispa unanchay",
+ "translate-manage-action-ignore": "Ama musyaychu",
+ "translate-manage-action-fuzzy": "T'ikrasqakunata hawamanta chaskispa allinchanapaq ñawirina nispa unanchay",
+ "importtranslations": "T'ikrasqakunata hawamanta chaskiy",
+ "translate-import-from-local": "Tiyanalla willañiqita chaqnay:",
+ "translate-import-load": "Willañiqita chaqnay",
+ "translate-import-err-dl-failed": "Manam atinichu williñiqita apamuyta:\n$1",
+ "translate-import-err-ul-failed": "Willañiqi churkuyqa manam aypasqachu.",
+ "translate-import-err-invalid-title": "Qusqa willañiqi sutiqa <nowiki>$1</nowiki> manam allinchu.",
+ "translate-import-err-no-such-file": "<nowiki>$1</nowiki> nisqa willañiqiqa manam kanchu icha manam tiyanalla churkusqachu.",
+ "translate-import-err-stale-group": "Kay willañiqip willay huñunqa manam kanchu.",
+ "translate-js-support-unsaved-warning": "Manaraq waqaychasqayki t'ikrasqaykikunam kachkan.",
+ "translate-gs-pos": "Ñiqi",
+ "translate-gs-code": "Tuyru",
+ "translate-gs-continent": "Allpapacha",
+ "translate-gs-speakers": "Rimaqkuna",
+ "translate-gs-score": "Taripasqakuna",
+ "translate-gs-multiple": "Ñawra",
+ "translate-gs-count": "Yupay",
+ "translate-gs-total": "Tukuy",
+ "translate-gs-avgscore": "Kuskanchaku taripasqa",
+ "translate-documentation-language": "Willaymanta t'iktuna",
+ "translate-searchprofile": "T'ikrasqakuna",
+ "translate-searchprofile-tooltip": "Tukuy t'ikrasqakunapi maskay",
+ "translate-search-languagefilter": "Ch'illchina rimaykama:",
+ "translate-search-nofilter": "Ama ch'illchina kachunchu",
+ "log-name-translationreview": "T'ikrasqata qhawakipay hallch'a",
+ "log-description-translationreview": "T'ikrasqakunamanta willay huñukunamantapas tukuy qhawakipasqakunamanta hallch'a.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|allinchaspa ñawirisqa unanchan}} t'ikrasqata $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|hukchan}} $4-man t'ikrasqata $3 $6-manta $7-man",
+ "translate-workflow-state-": "(mana churasqa)",
+ "translate-workflowstatus": "Kachkaynin: $1",
+ "translate-workflow-set-doing": "Churaspa...",
+ "translate-stats-workflow": "Kachkaynin",
+ "translate-workflowgroup-label": "Llamk'apayaypa kachkayninkuna",
+ "translate-dynagroup-recent-label": "Ñaqha t'ikrasqakuna",
+ "translate-dynagroup-additions-label": "Ñaqha yapasqakuna",
+ "translate-dynagroup-additions-desc": "Kay willay huñuqa musuqpas hukchasqapas willaykunatam rikuchin.",
+ "translate-msggroupselector-projects": "Willay huñu",
+ "translate-msggroupselector-search-placeholder": "Huñukunata maskay",
+ "translate-msggroupselector-search-all": "Tukuy",
+ "translate-msggroupselector-search-recent": "Ñaqha",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|urin huñu|urin huñukuna}}",
+ "tux-languageselector": "Kayman t'ikray:",
+ "tux-tab-all": "Tukuy",
+ "tux-tab-untranslated": "Mana t'ikrasqa",
+ "tux-tab-outdated": "Mawk'ayasqa",
+ "tux-tab-translated": "T'ikrasqa",
+ "tux-tab-unproofread": "Manaraq allinchaspa ñawirisqa",
+ "tux-edit": "Llamk'apuy",
+ "tux-status-optional": "Akllana",
+ "tux-status-fuzzy": "Mawk'ayasqa",
+ "tux-status-proofread": "Allinchaspa ñawirisqa",
+ "tux-status-translated": "T'ikrasqa",
+ "tux-status-saving": "Waqaychaspa...",
+ "tux-status-unsaved": "Mana waqaychasqa",
+ "tux-editor-paste-original-button-label": "Pukyu qillqata llut'amuy",
+ "tux-editor-discard-changes-button-label": "Hukchasqakunata tatiy",
+ "tux-editor-save-button-label": "T'ikrasqata waqaychay",
+ "tux-editor-skip-button-label": "Qatiqman t'iskuy",
+ "tux-editor-cancel-button-label": "Ama niy",
+ "tux-editor-confirm-button-label": "T'ikrasqata takyachiy",
+ "tux-editor-shortcut-info": "\"$1\"-ta ñit'iy waqaychanapaq, icha \"$2\"-ta ñit'iy qatiq willayman t'iskunaykipaq, icha \"$3\"-ta wakin chiqanchanakunapaq.",
+ "tux-editor-edit-desc": "T'iktunata llamk'apuy",
+ "tux-editor-add-desc": "T'iktunata yapay",
+ "tux-editor-suggestions-title": "Munachiykuna",
+ "tux-editor-in-other-languages": "Huk simikunapi",
+ "tux-editor-need-more-help": "Aswan yanapayta muchunkichu?",
+ "tux-editor-ask-help": "Aswan willayta mañakuy",
+ "tux-editor-tm-match": "$1%-nin kaqlla kaq",
+ "tux-notices-more": "{{PLURAL:$1|$1 aswan}}",
+ "tux-notices-hide": "pakay",
+ "tux-editor-save-failed": "T'ikrasqaqa manam waqaychasqachu: $1",
+ "tux-editor-n-uses": "$1 {{PLURAL:$1|kuti}} llamk'achisqa",
+ "tux-editor-message-desc-more": "Astawan qhaway",
+ "tux-editor-message-desc-less": "Aswan pisita qhaway",
+ "tux-editor-clear-translated": "T'ikrasqakunata pakay",
+ "tux-editor-proofreading-mode": "Allinchaspa ñawiriy",
+ "tux-editor-translate-mode": "Sutisuyu",
+ "tux-editor-proofreading-hide-own-translations": "Qampa t'ikrasqaykikunata pakay",
+ "tux-editor-proofreading-show-own-translations": "Qampa t'ikrasqaykikunata rikuchiy",
+ "tux-proofread-action-tooltip": "Allinchaspa ñawirisqa unanchay",
+ "tux-proofread-edit-label": "Llamk'apuy",
+ "tux-editor-page-mode": "P'anqa",
+ "tux-editor-outdated-notice": "Kay t'ikrasqaqa allinchanapaqchá.",
+ "tux-editor-outdated-notice-diff-link": "Wakin kaykunata rikuchiy",
+ "tux-editor-doc-editor-placeholder": "Willaymanta t'iktuna",
+ "tux-editor-doc-editor-save": "T'iktunata waqaychay",
+ "tux-editor-doc-editor-cancel": "Ama niy",
+ "tux-messagetable-more-messages": "$1 aswan {{PLURAL:$1|willay|willaykuna}}",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|Willayta|Willaykunata}} chaqnaspa...",
+ "tux-message-filter-placeholder": "Ch'illchina sutisuyu",
+ "tux-message-filter-result": "$1 {{PLURAL:$1|taripasqam|taripasqakunam}} \"$2\"-paq",
+ "tux-message-filter-advanced-button": "Ñawparikusqa maskay",
+ "tux-message-filter-optional-messages-label": "Akllana willaykuna",
+ "tux-proofread-translated-by-self": "Qampa t'ikrasqayki",
+ "tux-empty-list-all": "Kay willay huñuqa ch'usaqmi",
+ "tux-empty-list-all-guide": "Wakin willay huñuta akllay t'ikranapaq",
+ "tux-translate-page-no-such-group": "<strong>Nisqa huñuqa manam kanchu.</strong> Wakin willay huñuta akllay.",
+ "tux-empty-list-translated": "Manam mayqin t'ikrasqa willaykunapas kanchu",
+ "tux-empty-list-translated-guide": "T'ikraysiytam atinki",
+ "tux-empty-list-translated-action": "T'ikray",
+ "tux-empty-no-messages-to-display": "Manam ima rikuchina willaykunapas kanchu",
+ "tux-empty-nothing-to-proofread": "Manam ima allinchaspa ñawirinapas kanchu",
+ "tux-empty-you-can-help-providing": "Musuq t'ikrasqakunata ruraysiytam atinki",
+ "tux-empty-nothing-new-to-proofread": "Manam ima musuq allinchaspa ñawirinapas kanchu",
+ "tux-empty-you-can-review-already-proofread": "Hukkunap allinchaspa ñawirisqanña t'ikrasqakunatapas allinchaspa ñawiriytam atinki.",
+ "tux-empty-list-other": "Manam imapas t'ikrana kanchu",
+ "tux-empty-list-other-guide": "Kachkaqña t'ikrasqakunata ñawirispa allinchaysiytam atinki",
+ "tux-empty-list-other-action": "T'ikrasqakuna allinchaspa ñawiriy",
+ "tux-empty-list-other-link": "Tukuy willaykunata rikuchiy",
+ "tux-editor-close-tooltip": "Wichq'ay",
+ "tux-editor-expand-tooltip": "Mast'ariy",
+ "tux-editor-collapse-tooltip": "Thuñichiy",
+ "tux-editor-message-tools-history": "Wiñay kawsay",
+ "tux-editor-message-tools-translations": "Tukuy t'ikrasqakuna",
+ "tux-editor-loading": "Chaqnamuspa…",
+ "translate-search-more-languages-info": "$1 aswan {{PLURAL:$1|rimay|rimaykuna}}",
+ "translate-statsbar-tooltip": "$1% t'ikrasqa, $2% allinchaspa ñawirisqa",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% t'ikrasqa, $2% allinchaspa ñawirisqa, $3% mawk'ayasqa",
+ "translate-search-more-groups-info": "$1 aswan {{PLURAL:$1|huñum|huñukunam}}"
+}
diff --git a/Translate/i18n/core/rej.json b/Translate/i18n/core/rej.json
new file mode 100644
index 00000000..0125684b
--- /dev/null
+++ b/Translate/i18n/core/rej.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "MFikriansori"
+ ]
+ },
+ "translate-documentation-language": "Dokumentasi pêsên"
+}
diff --git a/Translate/i18n/core/rif.json b/Translate/i18n/core/rif.json
new file mode 100644
index 00000000..32a4ca10
--- /dev/null
+++ b/Translate/i18n/core/rif.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amara-Amaziɣ",
+ "Jose77"
+ ]
+ },
+ "translate-page-navigation-legend": "ⴰⵙⵜⴰⵔⴰ",
+ "translate-page-edit": "ⵙⵏⴼⵍ"
+}
diff --git a/Translate/i18n/core/rki.json b/Translate/i18n/core/rki.json
new file mode 100644
index 00000000..359cbbd2
--- /dev/null
+++ b/Translate/i18n/core/rki.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cakkaparla"
+ ]
+ },
+ "translate-documentation-language": "စာတမ်းပြုလုပ်ခြင်း"
+}
diff --git a/Translate/i18n/core/rm.json b/Translate/i18n/core/rm.json
new file mode 100644
index 00000000..a4918ade
--- /dev/null
+++ b/Translate/i18n/core/rm.json
@@ -0,0 +1,33 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gion",
+ "Gion-andri",
+ "Kazu89",
+ "Terfili"
+ ]
+ },
+ "translate-page-settings-legend": "Parameters",
+ "translate-page-group": "Gruppa",
+ "translate-page-language": "Lingua",
+ "translate-page-limit": "Limita",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|messadi|messadis}} per pagina",
+ "translate-submit": "Mussar",
+ "translate-page-navigation-legend": "Navigaziun",
+ "translate-page-showing": "Mussa ils messadis $1 fin $2 da $3.",
+ "translate-page-showing-all": "Mussa $1 {{PLURAL:$1|messadi|messadis}}.",
+ "translate-page-showing-none": "Nagins messadis.",
+ "translate-next": "Proxima pagina",
+ "translate-prev": "Pagina precedenta",
+ "translate-page-description-legend": "Infurmaziun davart la gruppa",
+ "translate-page-edit": "editar",
+ "translate-optional": "(opziunal)",
+ "translate-ignored": "(ignorar)",
+ "translate-edit-definition": "Definiziun dal messadi",
+ "translate-edit-contribute": "contribuir",
+ "translate-edit-no-information": "''Tar quai messadi na datti nagina documentaziun.\nSche vus savais nua e co che quai messadi vegn duvrà, pudais vus gidar auters translaturs cun agiuntar ina documentaziun tar quai messadi.''",
+ "translate-edit-information": "Infurmaziuns davart il messadi \"$2\" ($1)",
+ "translate-edit-warnings": "Avertiment davart translaziuns nuncumplettas",
+ "translate-documentation-language": "Documentaziun da messadi",
+ "tux-notices-hide": "zuppentar"
+}
diff --git a/Translate/i18n/core/rmc.json b/Translate/i18n/core/rmc.json
new file mode 100644
index 00000000..6e4e17c1
--- /dev/null
+++ b/Translate/i18n/core/rmc.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Adehertogh"
+ ]
+ },
+ "translate-documentation-language": "Hiroskeri dokumentacija"
+}
diff --git a/Translate/i18n/core/rn.json b/Translate/i18n/core/rn.json
new file mode 100644
index 00000000..8ba4ffd2
--- /dev/null
+++ b/Translate/i18n/core/rn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gilbert Ndihokubwayo"
+ ]
+ },
+ "translate-documentation-language": "Gushishoza ubutumwa"
+}
diff --git a/Translate/i18n/core/ro.json b/Translate/i18n/core/ro.json
new file mode 100644
index 00000000..9d76fc7c
--- /dev/null
+++ b/Translate/i18n/core/ro.json
@@ -0,0 +1,323 @@
+{
+ "@metadata": {
+ "authors": [
+ "AdiJapan",
+ "Andrei Stroe",
+ "Danutz",
+ "Firilacroco",
+ "ImGelu",
+ "KlaudiuMihaila",
+ "McDutchie",
+ "Minisarm",
+ "NGC 54",
+ "Sociologist",
+ "Stelistcristi"
+ ]
+ },
+ "translate": "Traducere",
+ "translate-desc": "[[Special:Translate|Pagină specială]] pentru traducerea software-ului MediaWiki, dar nu numai",
+ "translate-taskui-export-to-file": "Exportare în format nativ",
+ "translate-taskui-export-as-po": "Exportare pentru traducere off-line",
+ "translate-taction-translate": "Traducere",
+ "translate-taction-proofread": "Revizuire",
+ "translate-taction-lstats": "Statistici de limbă",
+ "translate-taction-mstats": "Statistici pentru grupul de mesaje",
+ "translate-taction-export": "Exportare",
+ "translate-taction-disabled": "Această acțiune este dezactivată pe acest wiki.",
+ "translate-page-no-such-language": "Limba specificată este incorectă.",
+ "translate-page-no-such-group": "Grupul specificat este incorect.",
+ "translate-page-disabled": "Posibilitatea de a traduce acest grup în această limbă a fost dezactivată.\nMotiv:\n\n<em>$1</em>",
+ "translate-language-disabled": "Traducerile în această limbă sunt dezactivate.",
+ "translate-page-settings-legend": "Setări",
+ "translate-page-group": "Grup",
+ "translate-page-language": "Limbă",
+ "translate-page-limit": "Limită",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|mesaj|mesaje}} pe pagină",
+ "translate-submit": "Arată",
+ "translate-page-navigation-legend": "Navigare",
+ "translate-page-showing": "Se afișează mesajele de la $1 la $2 dintr-un total de $3.",
+ "translate-page-showing-all": "Se afișează $1 {{PLURAL:$1|mesaj| (de) mesaje}}.",
+ "translate-page-showing-none": "Niciun mesaj de afișat.",
+ "translate-next": "Pagina următoare",
+ "translate-prev": "Pagina anterioară",
+ "translate-page-description-legend": "Informații despre grup",
+ "translate-page-description-hasoptional": "Acest grup conține mesaje opționale.\nMesajele opționale ar trebui traduse doar în cazul în care limba dumneavoastră are cerințe speciale,\nprecum neutilizarea spațiilor sau transliterarea numelor proprii. $1",
+ "translate-page-description-hasoptional-open": "Arată mesajele opționale.",
+ "translate-page-edit": "modificare",
+ "translate-optional": "(opțional)",
+ "translate-ignored": "(ignorat)",
+ "translate-edit-title": "Modificați „$1”",
+ "translate-edit-definition": "Definiția mesajului",
+ "translate-edit-contribute": "contribuiți",
+ "translate-edit-no-information": "<em>Acest mesaj nu are documentație.\nDacă știți unde sau cum este folosit, îi puteți ajuta pe ceilalți traducători prin adăugarea documentației sale.</em>",
+ "translate-edit-information": "Informații despre mesaj ($1)",
+ "translate-edit-warnings": "Avertizări în legătură cu traducerile incomplete",
+ "translate-edit-tmmatch-source": "Textul sursă al traducerii: $1",
+ "translate-edit-tmmatch": "Potrivire în proporție de $1%",
+ "translate-edit-nopermission": "Aveți nevoie de drepturi de traducere pentru a traduce mesaje.",
+ "translate-edit-askpermission": "Obțineți permisiunea",
+ "translate-checks-parameters": "{{PLURAL:$2|Următorul parametru nu este folosit|Următorii parametri nu sunt folosiți}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Următorul parametru este necunoscut|Următorii $2 parametri sunt necunoscuți}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "Există un număr impar de {{PLURAL:$2|paranteze|paranteze}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Următoarea legătură este problematică|Următoarele $2 legături sunt problematice}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Următoarea legătură lipsește|Următoarele $2 legături lipsesc}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Definiția folosește <nowiki>{{PLURAL:}}</nowiki>, dar traducerea nu.",
+ "translate-checks-plural-forms": "Expresia <nowiki>{{PLURAL:}}</nowiki> a primit {{PLURAL:$1|un element|$1 elemente|$1 de elemente}}, însă {{PLURAL:$2|este acceptat doar un element|sunt acceptate doar $2 elemente|sunt acceptate doar $2 de elemente}} (excluzând 0= și 1=).",
+ "translate-checks-plural-dupe": "Expresia <nowiki>{{PLURAL:}}</nowiki> are elemente duplicate la sfârșit. <nowiki>{{PLURAL:$1|oaie|oaie}}</nowiki> trebuie scris ca <nowiki>{{PLURAL:$1|oaie}}</nowiki>.",
+ "translate-checks-pagename": "Spațiul de nume schimbat față de definiție",
+ "translate-checks-format": "Această traducere nu respectă definiția sau conține o sintaxă incorectă: $1",
+ "translate-checks-escape": "{{PLURAL:$2|Următorul caracter scăpat poate fi accidental|Următoarele caractere scăpate pot fi accidentale}}: <strong>$1</strong>. {{PLURAL:$4|Un carcater scăpat valid este|Caractere scăpate valide includ:}} $3.",
+ "translate-checks-parametersnotequal": "Numărul de parametri este {{PLURAL:$1|$1}}; ar trebui să fie {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> este incorect.",
+ "translate-checks-fudforum-syntax": "Utilizați <nowiki>$1</nowiki> în loc de <nowiki>$2</nowiki> în cadrul acestui proiect.",
+ "translate-pref-editassistlang": "Limbi ajutătoare",
+ "prefs-translate": "Opțiuni de traducere",
+ "translate-pref-editassistlang-help": "Listă de coduri de limbă separate prin virgulă.\nTraducerea unui mesaj în aceste limbi vă este afișată în timp ce traduceți.\nLista implicită de limbi depinde de propria dumneavoastră limbă.",
+ "translate-pref-editassistlang-bad": "Cod de limbă incorect în lista:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Modifică utilizând interfața de traducere",
+ "right-translate-manage": "Gestionează grupurile de mesaje",
+ "action-translate-manage": "gestionați grupurile de mesaje",
+ "right-translate-import": "Importă traduceri efectuate off-line",
+ "action-translate-import": "importați traduceri off-line",
+ "right-translate-messagereview": "Revizuiește traduceri",
+ "right-translate-groupreview": "Schimbă starea fluxului de lucru a grupurilor de mesaje",
+ "translate-rcfilters-translations-filter-label": "Nu traduceri",
+ "translate-rc-translation-filter": "Filtru de traduceri:",
+ "translate-rc-translation-filter-no": "Nu fă nimic",
+ "translate-rc-translation-filter-only": "Arată doar traduceri",
+ "translate-rc-translation-filter-filter": "Fără traduceri",
+ "translate-rc-translation-filter-site": "Doar schimbări la mesajele sitului",
+ "translationstats": "Statistici de traducere",
+ "translate-stats-edits": "Modificări",
+ "translate-stats-users": "Traducători",
+ "translate-stats-registrations": "Înscrieri",
+ "translate-stats-reviews": "Recenzii",
+ "translate-stats-reviewers": "Recenzenți",
+ "translate-statsf-intro": "Puteți genera statistici simple cu acest formular.\nToate valorile au limite superioare și inferioare.",
+ "translate-statsf-options": "Opțiunile graficului",
+ "translate-statsf-width": "Lățime în pixeli:",
+ "translate-statsf-height": "Înălțime în pixeli:",
+ "translate-statsf-days": "Perioada de timp în zile:",
+ "translate-statsf-start": "Data începerii:",
+ "translate-statsf-scale": "Granularitate:",
+ "translate-statsf-scale-months": "Luni",
+ "translate-statsf-scale-weeks": "Săptămâni",
+ "translate-statsf-scale-days": "Zile",
+ "translate-statsf-scale-hours": "Ore",
+ "translate-statsf-count": "Măsură:",
+ "translate-statsf-count-edits": "Număr de modificări",
+ "translate-statsf-count-users": "Traducători activi",
+ "translate-statsf-count-registrations": "Utilizatori noi",
+ "translate-statsf-count-reviews": "Recenzori de traduceri",
+ "translate-statsf-count-reviewers": "Recenzenți",
+ "translate-statsf-language": "Listă de coduri de limbă separate prin virgulă:",
+ "translate-statsf-group": "Listă de coduri de grup separate prin virgulă:",
+ "translate-statsf-submit": "Previzualizare",
+ "translate-tag-page-desc": "Traducerea paginii wiki [[$2|$1]] din $3 ($4).",
+ "translate-sidebar-alltrans": "În alte limbi",
+ "translations": "Toate traducerile",
+ "translations-summary": "Introduceți un nume de mesaj mai jos pentru a arăta toate traducerile disponibile.",
+ "translate-translations-no-message": "„$1” nu este un mesaj traductibil",
+ "translate-translations-none": "Nu există traduceri pentru „$1”",
+ "translate-translations-count": "S-{{PLURAL:$1|a|au}} găsit {{PLURAL:$1|o traducere|$1 traduceri}}.",
+ "translate-translations-fieldset-title": "Mesaj",
+ "translate-translations-messagename": "Nume:",
+ "translate-translations-project": "Proiect:",
+ "translate-translations-including-no-param": "Specificați o cheie de mesaj validă în parametrul „subpage”",
+ "translate-translations-history-short": "i",
+ "languagestats": "Statistici de limbă",
+ "languagestats-summary": "Această pagină afișează statistici despre traducerile grupurilor de mesaje în funcție de limbă.",
+ "messagegroupstats-summary": "Această pagină afișează statisticile grupurilor de mesaje.",
+ "languagestats-stats-for": "Statistici despre traduceri pentru $1 ($2).",
+ "languagestats-recenttranslations": "schimbări recente",
+ "translate-langstats-incomplete": "Unele dintre statisticile de pe această pagină sunt incomplete. Vă rugăm să reîncărcați pentru a obține mai multe statistici.",
+ "translate-langstats-expand": "extinde",
+ "translate-langstats-collapse": "restrânge",
+ "translate-langstats-expandall": "extinde tot",
+ "translate-langstats-collapseall": "restrânge tot",
+ "translate-language-code": "Cod limbă",
+ "translate-language-code-field-name": "Codul limbii:",
+ "translate-suppress-complete": "Ascunde grupurile de mesaje traduse complet",
+ "translate-ls-noempty": "Ascunde grupurile de mesaje complet netraduse",
+ "translate-language": "Limbă",
+ "translate-total": "Mesaje",
+ "translate-untranslated": "Netraduse",
+ "translate-percentage-complete": "Completare",
+ "translate-percentage-fuzzy": "Învechite",
+ "translate-languagestats-overall": "Toate grupurile de mesaje împreună",
+ "translate-ls-submit": "Afișează statisticile",
+ "translate-ls-column-group": "Grup de mesaje",
+ "translate-mgs-pagename": "Statistici pentru grupul de mesaje",
+ "translate-mgs-fieldset": "Preferințe de afișare",
+ "translate-mgs-group": "Grup de mesaje:",
+ "translate-mgs-nocomplete": "Nu afișa limbile care conțin traduceri complete",
+ "translate-mgs-noempty": "Nu afișa limbile care nu conțin nicio traducere",
+ "translate-mgs-submit": "Afișează statisticile",
+ "translate-mgs-column-language": "Limbă",
+ "translate-mgs-totals": "$1 {{PLURAL:$1|limbă|limbi|de limbi}} împreună",
+ "translate-mgs-invalid-group": "Grupul specificat, $1, nu există.",
+ "translate-mgs-nothing": "Nimic de afișat pentru statisticile solicitate.",
+ "supportedlanguages": "Limbi active",
+ "supportedlanguages-summary": "Această pagină afișează o listă cu toate limbile active pe {{SITENAME}}, alături de numele utilizatorilor care traduc în respectiva limbă.\nCu cât numele traducătorului este mai mare ca dimensiune, cu atât contribuțiile sale sunt mai numeroase.\nCuloarea sublinierii de sub nume indică momentul la care un traducător a fost activ ultima oară.",
+ "supportedlanguages-colorlegend": "Explicația culorilor: ultima traducere datează de acum $1 zile.",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Traducător}}|Traducători}}: $1",
+ "supportedlanguages-recenttranslations": "traduceri recente",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|limbă|limbi}} în total.",
+ "supportedlanguages-activity": "$1: {{PLURAL:$2|o modificare|$2 modificări|$2 de modificări}} – ultima modificare datează de acum {{PLURAL:$3|o zi|$3 zile|$3 de zile}}",
+ "translate-jssti-add": "Adaugă în listă",
+ "managemessagegroups": "Administrare grup de mesaje",
+ "translate-smg-notallowed": "Nu vă este permisă executarea acestei acțiuni.",
+ "translate-smg-nochanges": "Nu există modificări pentru procesare.",
+ "translate-smg-submit": "Trimite modificările pentru procesare",
+ "translate-smg-submitted": "Definițiile mesajelor au fost actualizate. Modificările sunt procesate în fundal.",
+ "translate-smg-more": "Vor exista mai multe modificări de procesat după trimiterea acestor modificări.",
+ "translate-smg-left": "Conținutul mesajului în wiki",
+ "translate-smg-right": "Modificări în curs de transfer",
+ "translate-manage-import-diff": "Mesajul $1 | Acțiuni: $2",
+ "translate-manage-import-new": "Mesaj nou $1",
+ "translate-manage-import-deleted": "Mesaj șters $1",
+ "translate-manage-action-import": "Importă",
+ "translate-manage-action-conflict": "Importă și marchează ca fuzzy",
+ "translate-manage-action-ignore": "Ignorare",
+ "translate-manage-action-fuzzy": "Importă și marchează traducerile",
+ "translate-manage-nochanges": "Pentru acest grup nu există modificări ale definițiilor mesajelor.",
+ "translate-manage-nochanges-other": "Nu există schimbări pentru această limbă.\nUtilizați legătura de mai jos pentru a reveni la detaliile grupului.",
+ "translate-manage-inconsistent": "S-a detectat o incoerență în cadrul cererii. Verificați dacă există modificări și încercați din nou. Detalii: $1.",
+ "translate-manage-toolong": "Timpul maxim de prelucrare care este de {{PLURAL:$1|o secundă|$1 secunde|$1 de secunde}} a fost depășit.\nVă rugăm să retrimiteți formularul pentru a continua prelucrarea.",
+ "translate-manage-import-summary": "Se importă o nouă versiune din sursă externă",
+ "translate-manage-import-ignore": "Sar mesajul $1.",
+ "translate-manage-conflict-summary": "Se importă o nouă versiune dintr-o sursă externă.\nVă rugăm să verificați.",
+ "translate-manage-submit": "Execută",
+ "translate-manage-import-ok": "Importată: $1",
+ "translate-manage-import-done": "Importare finalizată!",
+ "importtranslations": "Importă traduceri",
+ "translate-import-from-local": "Încărcare fișier local:",
+ "translate-import-load": "Încarcă fișier",
+ "translate-import-err-dl-failed": "Imposibil de adus fișierul:\n$1",
+ "translate-import-err-ul-failed": "Încărcarea fișierului nu a avut succes",
+ "translate-import-err-invalid-title": "Numele fișierului furnizat, <nowiki>$1</nowiki>, este invalid.",
+ "translate-import-err-no-such-file": "Fișierul <nowiki>$1</nowiki> nu există sau nu a fost încărcat local.",
+ "translate-import-err-stale-group": "Grupul de mesaje de care aparține acest fișier nu există.",
+ "translate-import-err-no-headers": "Fișierul nu este un fișier Gettext bine formatat în conformitate cu formatul necesar extensiei Translate:\nNu se poate determina grupul de mesaje și limba din antetele fișierului.",
+ "translate-js-support-unsaved-warning": "Aveți traduceri nepublicate.",
+ "translate-gs-pos": "Poz.",
+ "translate-gs-code": "Cod",
+ "translate-gs-continent": "Continent",
+ "translate-gs-speakers": "Vorbitori",
+ "translate-gs-score": "Scor",
+ "translate-gs-multiple": "Mai multe",
+ "translate-gs-count": "Număr",
+ "translate-gs-total": "Total",
+ "translate-gs-avgscore": "Scor mediu",
+ "translate-documentation-language": "Documentația mesajului",
+ "translate-searchprofile": "Traduceri",
+ "translate-searchprofile-tooltip": "Caută în toate traducerile",
+ "translate-search-languagefilter": "Filtrare după limbă:",
+ "translate-search-nofilter": "Fără filtrare",
+ "log-name-translationreview": "Jurnal recenzii traduceri",
+ "log-description-translationreview": "Jurnalul tuturor revizuirilor pentru traduceri și grupuri de mesaje.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|a revizuit}} traducerea $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|a schimbat}} starea traducerilor în $4 pentru $3 de la $6 la $7",
+ "group-translate-sandboxed": "Traducători neaprobați",
+ "group-translate-sandboxed-member": "{{GENDER:$1|traducător neaprobat}}",
+ "translate-workflow-state-": "(dezactivat)",
+ "translate-workflowstatus": "Stare: $1",
+ "translate-workflow-set-doing": "Se activează...",
+ "translate-stats-workflow": "Statut",
+ "translate-dynagroup-recent-label": "Traduceri recente",
+ "translate-dynagroup-recent-desc": "Acest grup de mesaje afișează toate traducerile recente pentru această limbă. Este util în special în cazul revizuirilor.",
+ "translate-dynagroup-additions-label": "Adăugiri recente",
+ "translate-dynagroup-additions-desc": "Acest grup de mesaje afișează mesajele noi și modificate.",
+ "translate-msggroupselector-projects": "Grup de mesaje",
+ "translate-msggroupselector-search-placeholder": "Căutare grupuri",
+ "translate-msggroupselector-search-all": "Toate",
+ "translate-msggroupselector-search-recent": "Recente",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|subgrup|subgrupuri|de subgrupuri}}",
+ "tux-languageselector": "Traduceți în",
+ "tux-tab-all": "Toate",
+ "tux-tab-untranslated": "Netraduse",
+ "tux-tab-outdated": "Învechite",
+ "tux-tab-translated": "Traduse",
+ "tux-tab-unproofread": "Nerevizuite",
+ "tux-edit": "Editare",
+ "tux-status-optional": "Opțional",
+ "tux-status-fuzzy": "Învechit",
+ "tux-status-proofread": "Revizuit",
+ "tux-status-translated": "Tradus",
+ "tux-status-saving": "Se publică...",
+ "tux-status-unsaved": "Nepublicat",
+ "tux-editor-editsummary-placeholder": "Rezumat opțional",
+ "tux-editor-paste-original-button-label": "Introdu textul-sursă",
+ "tux-editor-discard-changes-button-label": "Anulează modificările",
+ "tux-editor-save-button-label": "Publicare traducere",
+ "tux-editor-skip-button-label": "Sari mai departe",
+ "tux-editor-cancel-button-label": "Revocare",
+ "tux-editor-confirm-button-label": "Confirmare traducere",
+ "tux-editor-proofread-button-label": "Marchează ca revizuită",
+ "tux-editor-shortcut-info": "Apăsați „$1” pentru a salva, „$2” pentru a sări la următorul mesaj, „$4” pentru a furniza un rezumat sau țineți apăsat „$3” pentru a vedea alte comenzi rapide.",
+ "tux-editor-edit-desc": "Modifică documentația",
+ "tux-editor-add-desc": "Adăugare documentație",
+ "tux-editor-suggestions-title": "Sugestii",
+ "tux-editor-in-other-languages": "În alte limbi",
+ "tux-editor-need-more-help": "Aveți nevoie de mai mult ajutor?",
+ "tux-editor-ask-help": "Cereți mai multe informații",
+ "tux-editor-tm-match": "Potrivire în proporție de $1%",
+ "tux-notices-more": "{{PLURAL:$1|încă una|încă $1}}",
+ "tux-notices-hide": "ascunde",
+ "tux-editor-save-failed": "Publicarea traducerii a eșuat: $1",
+ "tux-editor-n-uses": "folosită {{PLURAL:$1|o dată|de $1 ori}}",
+ "tux-editor-message-desc-more": "Mai mult",
+ "tux-editor-message-desc-less": "Mai puțin",
+ "tux-editor-clear-translated": "Ascunde-le pe cele traduse",
+ "tux-editor-proofreading-mode": "Revizuire",
+ "tux-editor-translate-mode": "Listă",
+ "tux-editor-proofreading-hide-own-translations": "Ascundeți traducerile dv.",
+ "tux-editor-proofreading-show-own-translations": "Afișați traducerile dv.",
+ "tux-proofread-action-tooltip": "Marchează ca revizuită",
+ "tux-proofread-edit-label": "Modifică",
+ "tux-editor-page-mode": "Pagină",
+ "tux-editor-outdated-notice": "Această traducere ar putea avea nevoie de actualizare.",
+ "tux-editor-outdated-notice-diff-link": "Arată diferențele",
+ "tux-editor-doc-editor-placeholder": "Documentația mesajului",
+ "tux-editor-doc-editor-save": "Publicare documentație",
+ "tux-editor-doc-editor-cancel": "Revocare",
+ "tux-messagetable-more-messages": "Încă {{PLURAL:$1|un mesaj|$1 mesaje|$1 de mesaje}}",
+ "tux-messagetable-loading-messages": "Se încarcă {{PLURAL:$1|mesajul|mesajele}}...",
+ "tux-message-filter-placeholder": "Filtrare listă",
+ "tux-message-filter-result": "$1 {{PLURAL:$1|rezultat găsit|rezultate găsite|de rezultate găsite}} pentru „$2”",
+ "tux-message-filter-advanced-button": "Căutare avansată",
+ "tux-message-filter-optional-messages-label": "Mesaje opționale",
+ "tux-proofread-translated-by-self": "Tradus de dumneavoastră",
+ "tux-empty-list-all": "Acest grup de mesaje este gol",
+ "tux-empty-list-all-guide": "Alegeți un alt grup de mesaje pentru a traduce",
+ "tux-translate-page-no-such-group": "<strong>Grupul indicat nu există.</strong> Alegeți un alt grup de mesaje.",
+ "tux-empty-list-translated": "Nu există mesaje traduse",
+ "tux-empty-list-translated-guide": "Puteți ajuta la traducere",
+ "tux-empty-list-translated-action": "Traducere",
+ "tux-empty-no-messages-to-display": "Niciun mesaj de afișat.",
+ "tux-empty-there-are-optional": "Există mesaje opționale care nu apar în listă",
+ "tux-empty-show-optional-messages": "Arată mesajele opționale",
+ "tux-empty-no-outdated-messages": "Nu există mesaje învechite",
+ "tux-empty-nothing-to-proofread": "Nimic de revizuit",
+ "tux-empty-you-can-help-providing": "Puteți ajuta furnizând traduceri noi",
+ "tux-empty-nothing-new-to-proofread": "Nimic nou de revizuit",
+ "tux-empty-you-can-review-already-proofread": "Puteți revizui traduceri deja revizuite de către alții.",
+ "tux-empty-list-other": "Nimic de tradus",
+ "tux-empty-list-other-guide": "Puteți ajuta la revizuirea traducerilor existente",
+ "tux-empty-list-other-action": "Revizuire traduceri",
+ "tux-empty-list-other-link": "Arată toate mesajele",
+ "tux-editor-close-tooltip": "Închide",
+ "tux-editor-expand-tooltip": "Extinde",
+ "tux-editor-collapse-tooltip": "Restrânge",
+ "tux-editor-message-tools-show-editor": "Arată în editorul wiki",
+ "tux-editor-message-tools-history": "Istoric",
+ "tux-editor-message-tools-delete": "Șterge",
+ "tux-editor-message-tools-translations": "Toate traducerile",
+ "tux-editor-message-tools-linktothis": "Legătură către acest mesaj",
+ "tux-editor-loading": "Se încarcă...",
+ "translate-search-more-languages-info": "Încă {{PLURAL:$1|o limbă|$1 limbi|$1 de limbi}}",
+ "translate-statsbar-tooltip": "$1% traduse, $2% revizuite",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% traduse, $2% revizuite, $3% învechite",
+ "translate-search-more-groups-info": "Încă {{PLURAL:$1|un grup|$1 grupuri|$1 de grupuri}}",
+ "specialpages-group-translation": "Traducere"
+}
diff --git a/Translate/i18n/core/roa-tara.json b/Translate/i18n/core/roa-tara.json
new file mode 100644
index 00000000..d5e35621
--- /dev/null
+++ b/Translate/i18n/core/roa-tara.json
@@ -0,0 +1,417 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joetaras"
+ ]
+ },
+ "translate": "Traduce",
+ "translate-desc": "[[Special:Translate|Pàgena speciele]] pe le traduziune de MediaUicchi e rrete",
+ "translate-fuzzybot-desc": "Stu cunde speciale de sisteme avène ausate da l'[https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate estenzione de traduzione] de MediaUicchi ausate pe mandenè le traduziune.\nStu cunde jè 'nu stuézze d'u softuer de MediaUicchi e non ge se pò ddà a nisciune utende.",
+ "translate-taskui-export-to-file": "Esporte in formate native",
+ "translate-taskui-export-as-po": "Esporte pe le traduziune fore linèe",
+ "translate-taction-translate": "Traduce",
+ "translate-taction-proofread": "Revisione",
+ "translate-taction-lstats": "Statisteche d'a lènghe",
+ "translate-taction-mstats": "Statisteche de le gruppe de messàgge",
+ "translate-taction-export": "Esporte",
+ "translate-taction-disabled": "St'azione jè disabbilitate sus a sta uicchi.",
+ "translate-page-no-such-language": "'A lènghe specificate ere invalide.",
+ "translate-page-no-such-group": "'U gruppe specificate ere invalide.",
+ "translate-page-disabled": "Le traduziune de sta lènghe jndr'à stu gruppe onne state disabbilitate.\nMutive:\n\n<em>$1</em>",
+ "translate-language-disabled": "'A traduzione jndr'à sta lènghe jè disabbilitate.",
+ "translate-page-settings-legend": "'Mbostaziune",
+ "translate-page-group": "Gruppe",
+ "translate-page-language": "Lènghe",
+ "translate-page-limit": "Limite",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|messàgge|messàgge}} pe pàgene.",
+ "translate-submit": "Analizze",
+ "translate-page-navigation-legend": "Navigazzione",
+ "translate-page-showing": "Stoche a fazze vedè le messàgge da $1 a $2 de $3.",
+ "translate-page-showing-all": "Stoche a fazze vedè $1 {{PLURAL:$1|messàgge}}.",
+ "translate-page-showing-none": "Nisciune messàgge da fà vedè.",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "Pàgena successive",
+ "translate-prev": "Pàgena precedende",
+ "translate-page-description-legend": "'Mbormazione sus a 'u gruppe",
+ "translate-page-description-hasoptional": "Stu gruppe de messàgge tène messàgge opzionale.\nLe messàgge opzione avessera sulamende essere tradotte quanne 'a lènga toje tène richieste speciale cumme a quidde de nò ausà spazie o probbietà de translitterazione de le nome. $1",
+ "translate-page-description-hasoptional-open": "Fà vedè le messàgge opzionale.",
+ "translate-page-edit": "cange",
+ "translate-optional": "(opzionale)",
+ "translate-ignored": "(ignorate)",
+ "translate-edit-title": "Cange \"$1\"",
+ "translate-edit-definition": "Definizione d'u messàgge",
+ "translate-edit-contribute": "condrebbute",
+ "translate-edit-no-information": "<em>Stu messàgge non ge tène 'na documendazione.\nCe tu canusce addò o cumme stu messàgge avène ausate, tu puè dà 'na màne a otre tradutture pe aggiungere 'a documendazione a stu messàgge.</em>",
+ "translate-edit-information": "'Mbormaziune sus a 'u messàgge ($1)",
+ "translate-edit-warnings": "Avverteminde sus a le traduziune 'ngomblete",
+ "translate-edit-tmmatch-source": "Teste origgenale d'a traduzione: $1",
+ "translate-edit-tmmatch": "$1% de combronde",
+ "translate-edit-nopermission": "Tu è abbesogne de le permesse pe traducere le messàgge.",
+ "translate-edit-askpermission": "Richieste de permesse",
+ "exporttranslations": "Esporte le traduziune",
+ "translate-export-form-format": "Formate",
+ "translate-export-invalid-format": "Specifiche 'nu formate valide.",
+ "translate-export-not-supported": "L'esportazione de le traduziune non ge stè.",
+ "translate-export-format-notsupported": "'U formate de esportazione specificate non g'avène supportate da 'u gruppe de le messàgge.",
+ "translate-export-group-too-large": "'U gruppe de messàgge scacchiate jè troppe gruèsse. Scachcie 'nu gruppe de messàgge ca tène mene de $1 {{PLURAL:$1|messàgge}} o condtatte l'amministratore de le traduziune pe 'nu conziglie.",
+ "translate-checks-parameters": "{{PLURAL:$2|'U seguende parametre non g'è|'U seguende parametre non ge sonde}} ausate:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|'U seguende parametre jè|'U seguende parametre sò}} scanusciute:\n<strong>$1</strong>",
+ "translate-checks-balance": "Ste 'nu numere de {{PLURAL:$2|parendesi}} scucchiate: <strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|'U collegamende suguende jè probblematiche|Le $2 collegaminde seguende sò probblematece}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|'U collegamende suguende jè |Le $2 collegaminde seguende sò }} mangande:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "'A definizioen ause <nowiki>{{PLURAL:}}</nowiki> ma 'a traduzione none.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> {{PLURAL:$1|ha state date 'nu module form|onne state date $1 module}} ma {{PLURAL:$2|sulamende 'nu module jè|$2 module sò}} supportate (escludenne 0= e 1= module).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> ave module duplicate a 'a fine. <nowiki>{{PLURAL:$1|pecore|pecore}}</nowiki> avessera essere scritte cumme a <nowiki>{{PLURAL:$1|pecore}}</nowiki>.",
+ "translate-checks-gettext-plural-missing": "Sta traduzione adda avè <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-unsupported": "Stu messàgge non ge supporte <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-count": "<nowiki>{{PLURAL:GETTEXT|}}</nowiki> accette esattamende $1 {{PLURAL:$1|module plurale}}. Pe mò $2 {{PLURAL:$2|ha state date|onne state date}} module plurale.",
+ "translate-checks-smartformat-plural-missing": "Sta traduzione adda avè 'u plurale sus 'a variabbele $1.",
+ "translate-checks-smartformat-plural-unsupported": "Stu messàgge non ge supporte 'u plurale sus 'a variabbele $1.",
+ "translate-checks-smartformat-plural-count": "Numere non corrette de forme plurale jndr'à <strong>$3</strong>. Adda avè {{PLURAL:$1|'na|de le}} forme plurale. Pe mò $2 forme plurale {{PLURAL:$2|jè|sò}} date.",
+ "translate-checks-unicode-plural-missing": "Sta traudzione adda avè <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-unsupported": "Stu messàgge non ge supporte <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-invalid": "'A forme plurale avessa essere definite cumme $1. Sta traduzione tène $2.",
+ "translate-checks-pagename": "'U namespace ha cangiate da 'a definizione",
+ "translate-checks-format": "Sta traduzione non ge segue 'a definizione o tène 'na sindassi invalide: $1",
+ "translate-checks-escape": "{{PLURAL:$2|Stu carattere de escape pò essere accidendale|ste carattere de escape ponne essere accidendale}}: <strong>$1</strong>. {{PLURAL:$4|'Nu carattere escape valide jè|Le caratteri escape valide sò:}} $3.",
+ "translate-checks-parametersnotequal": "'U cunde de le parametre jè {{PLURAL:$1|$1}}; invece avessa essere {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> jè malformate.",
+ "translate-checks-fudforum-syntax": "Ause <nowiki>$1</nowiki> invece de <nowiki>$2</nowiki> jndr'à stu proggette.",
+ "translate-checks-newline-missing-start": "{{PLURAL:$1|Ste|Stonne}} $1 {{PLURAL:$1|carattere}} de linèa nove mangande a l'inizie d'a traduzione.",
+ "translate-checks-newline-missing-end": "{{PLURAL:$1|Ste|Stonne}} $1 {{PLURAL:$1|carattere}} de linèa nove mangande a fine d'a traduzione.",
+ "translate-checks-newline-extra-start": "{{PLURAL:$1|Ste|Stonne}} $1 {{PLURAL:$1|carattere}} de linèa nove de cchiù a l'inizie d'a traduzione.",
+ "translate-checks-newline-extra-end": "{{PLURAL:$1|Ste|Stonne}} $1 {{PLURAL:$1|carattere}} de linèa nove de cchiù a fine d'a traduzione.",
+ "translate-checks-value-not-present": "'A traduzione adda essere uguale a {{PLURAL:$1|1=|une de ste valore:}} $1.",
+ "translate-checks-replacement": "Ause $2 invece de $1.",
+ "translate-checks-empty": "'A traduzione senze condenute o sulamende cu spazie non g'è permesse.",
+ "translate-pref-editassistlang": "Assistende de le lènghe:",
+ "prefs-translate": "Opziune de traduzione",
+ "translate-pref-editassistlang-help": "Codece de le lènghe separate da virgole.\nLe traduziune de 'nu messàgge jndr'à ste lènghe avènene fatte 'ndrucà duranne 'a traduzione.\nL'elenghe predefinite (default) de le lènghe depende da ìa probbia lènghe.",
+ "translate-pref-editassistlang-bad": "Codece d'a lènghe invalide jndr'à l'elenghe:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Cange ausanne l'inderfacce de traduzione",
+ "action-translate": "cange ausanne l'inderfacce de traduzione",
+ "right-translate-manage": "Gestisce le gruppe de messàgge",
+ "action-translate-manage": "gestisce le gruppe de messàgge",
+ "right-translate-import": "'Mborte le traduziune fore linèe",
+ "action-translate-import": "'mborte le traduziune fore linèe",
+ "right-translate-messagereview": "Revide le traduziune",
+ "action-translate-messagereview": "revide le traduziune",
+ "right-translate-groupreview": "Cange 'u state d'u flusse de fatìe de le gruppe de messàgge",
+ "action-translate-groupreview": "cange 'u state d'u flusse de fatìe de le gruppe de messàgge",
+ "translate-rcfilters-translations": "Traduziune",
+ "translate-rcfilters-translations-only-label": "Traduziune",
+ "translate-rcfilters-translations-only-desc": "Cangiaminde sus a le pàggene tradotte.",
+ "translate-rcfilters-translations-filter-label": "Nisciuna traduzione",
+ "translate-rcfilters-translations-filter-desc": "Tutte le cangiaminde ca non ge so traduziune.",
+ "translate-rcfilters-translations-site-label": "Messàgge d'u site",
+ "translate-rcfilters-translations-site-desc": "Personalizzaziune de le messàgge d'u site jndr'à le namespace de MediaUicchi.",
+ "translate-rc-translation-filter": "Filtre de traduziune:",
+ "translate-rc-translation-filter-no": "No fà ninde",
+ "translate-rc-translation-filter-only": "Fà vedè sulamende le traduziune",
+ "translate-rc-translation-filter-filter": "Filtre le traduziune",
+ "translate-rc-translation-filter-site": "cnage sulamende le messàgge d'u site",
+ "translationstats": "Statisteche de le traduziune",
+ "translate-stats-edits": "Cangiaminde",
+ "translate-stats-users": "Tradutture",
+ "translate-stats-registrations": "Reggistraziune",
+ "translate-stats-reviews": "Reviste",
+ "translate-stats-reviewers": "Rivisitature",
+ "translate-statsf-intro": "Puè generà le statisteche semblice cu stu module.\nTutte le valore onne limite minime e massime.",
+ "translate-statsf-options": "Opziune d'u grafeche",
+ "translate-statsf-width": "Larghezze in pixel:",
+ "translate-statsf-height": "Altezze in pixel:",
+ "translate-statsf-days": "Periode d'u tiembe in sciurnate:",
+ "translate-statsf-start": "Date de partenze:",
+ "translate-statsf-scale": "Granularità:",
+ "translate-statsf-scale-years": "Anne",
+ "translate-statsf-scale-months": "Mise",
+ "translate-statsf-scale-weeks": "Sumáne",
+ "translate-statsf-scale-days": "Giurne",
+ "translate-statsf-scale-hours": "Ore",
+ "translate-statsf-count": "Mesure:",
+ "translate-statsf-count-edits": "Numere de cangiaminde",
+ "translate-statsf-count-users": "Tradutture attive",
+ "translate-statsf-count-registrations": "Utinde nuève",
+ "translate-statsf-count-reviews": "Revisitature de le traduziune",
+ "translate-statsf-count-reviewers": "Rivisitature",
+ "translate-statsf-language": "Elenghe separate da virgole de le codece de le lènghe:",
+ "translate-statsf-group": "Elenghe separate da virgole de le codece de le gruppe:",
+ "translate-statsf-submit": "Andeprime",
+ "translate-statsf-unknown-error": "Ha assute 'n'errore scanusciute.",
+ "translate-statsf-error-message": "S'a verificate 'n'errore quanne ste scarecave 'u grafeche: $1",
+ "translate-statsf-graph-alt-text-info": "Teste alternative pe le statisteche de le traduziune ste jndr'à tabbelle aqquà sotte.",
+ "translate-statsf-alt-text": "Quiste jè 'u teste alternative pe le statisteche de le traduziune.",
+ "translate-statsf-embed": "Codece da sckaffà 'u grafeche de le statisteche de le traduziune sus a le otre pàggene.",
+ "translate-tag-page-desc": "Traduzione d'a pàgene uicchi [[$2|$1]] da $3 ($4).",
+ "translate-sidebar-alltrans": "Jndr'à l'otre lènghe",
+ "translations": "Tutte le traduziune",
+ "translations-summary": "Mitte 'nu messagge sotte pe fa vedè tutte le traduziune disponibbele.",
+ "translate-translations-no-message": "\"$1\" non g'è 'nu messagge traducibbele",
+ "translate-translations-none": "Non ge stonne traduziune pe \"$1\"",
+ "translate-translations-count": "Acchiate {{PLURAL:$1|'na traduzione|$1 traduziune}}.",
+ "translate-translations-fieldset-title": "Mèssagge",
+ "translate-translations-messagename": "Nome:",
+ "translate-translations-project": "Pruggette:",
+ "translate-translations-including-no-param": "Pe piacere specifiche 'na chiave de messàgge valide jndr'à 'u parametre d'a sottopàgene",
+ "translate-translations-history-short": "h",
+ "languagestats": "Statisteche d'a lènghe",
+ "languagestats-summary": "Sta pàgene face vedè le traduziune pe tutte le gruppe de messàgge pe 'na lènghe.",
+ "messagegroupstats-summary": "Sta pàgene face 'ndrucà le statisteche de le gruppe de messàgge.",
+ "languagestats-stats-for": "Statisteche de le traduziune pe $1 ($2).",
+ "languagestats-recenttranslations": "traduziune recende",
+ "translate-langstats-incomplete": "De le statisteche de sta pàgene so 'ngomblete. Careche arrete 'a pàgene pe farle assè cchiù comblete.",
+ "translate-langstats-expand": "spanne",
+ "translate-langstats-collapse": "scunne",
+ "translate-langstats-expandall": "spanne tutte",
+ "translate-langstats-collapseall": "scunne tutte",
+ "translate-language-code": "Codece d'a Lènghe",
+ "translate-language-code-field-name": "Codece d'a Lènghe:",
+ "translate-suppress-complete": "Scunne combletamende le gruppe de le messàgge tradotte",
+ "translate-ls-noempty": "Scunne combletamende le gruppe de le messàgge non tradotte",
+ "translate-language": "Lènghe",
+ "translate-total": "Messagge Totale",
+ "translate-untranslated": "Senza traduzione",
+ "translate-percentage-complete": "% de Combletamende",
+ "translate-percentage-fuzzy": "Non aggiornate",
+ "translate-percentage-proofread": "Reviste",
+ "translate-languagestats-overall": "Tutte le gruppe de messàgge 'nzieme",
+ "translate-ls-submit": "Fà vedè le statisteche",
+ "translate-ls-column-group": "Gruppe de messàgge",
+ "translate-mgs-pagename": "Statisteche de le gruppe de messàgge",
+ "translate-mgs-fieldset": "Fà vedè le preferenze",
+ "translate-mgs-group": "Messàgge d'u gruppe:",
+ "translate-mgs-nocomplete": "No fà vedè le lènghe ca onne le traduziune combletate",
+ "translate-mgs-noempty": "No fà 'ndrucà le lènghe ca no tènene nisciuna traduzione",
+ "translate-mgs-submit": "Fà vedè le statisteche",
+ "translate-mgs-column-language": "Lènghe",
+ "translate-mgs-totals": "Tutte le $1 {{PLURAL:$1|lènghe}} 'nzieme",
+ "translate-mgs-invalid-group": "'U gruppe specifiche $1 non g'esiste.",
+ "translate-mgs-nothing": "Ninde da fà vedè pe le statisteche cercate.",
+ "supportedlanguages": "Lènghe attive",
+ "supportedlanguages-summary": "Sta pàgene face 'ndrucà 'n'elenghe de le lènghe attive jndr'à {{SITENAME}}, 'nzieme a le nome de le tradutture ca onne fatiate sus a quedda lènghe. 'U nome de 'nu traduttore iesse de demenziune cchiù granne ce ha fatte 'nu sbuènne de cangiaminde ce nò iesse cchiù piccinne, invece 'u culore d'a sottolineature indichesce quanda tiembe ha passate da l'urtema attività soje.",
+ "supportedlanguages-colorlegend": "Leggende d'u culore: L'urtema traduzione jè de $1 sciurne fà.",
+ "supportedlanguages-portallink": "[$1] $2 - $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-sqlite-error": "SQLite non g'è supportate",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Traduttore}}|Tradutture}}: $1",
+ "supportedlanguages-recenttranslations": "traduziune recende",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|lènghe}} in totale.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|cangiamende|cangiaminde}} - l'urteme cangiamende $3 {{PLURAL:$3|sciurne}} fà",
+ "translate-supportedlanguages-cached": "Sta 'mbormazione ha state cachate $1 fà.",
+ "abusefilter-edit-builder-vars-translate-source-text": "Teste de origgene de 'n'aunità de traduzione",
+ "abusefilter-edit-builder-vars-translate-target-language": "Lènghe de arrive pa traduzione",
+ "translate-jssti-add": "Aggiunge a l'elenghe",
+ "managemessagegroups": "Gestione de le gruppe de messàgge",
+ "translate-smg-notallowed": "Non ge t'è permesse de eseguì st'azione.",
+ "translate-smg-nochanges": "Non ge stonne cangiaminde da processà.",
+ "translate-smg-submit": "Conferme le cangiaminde pu processe",
+ "translate-smg-submitted": "'A definizione de le messàgge ha state aggiornate. Le cangiaminde stonne avènene processate da sotta sotte.",
+ "translate-smg-submitted-with-failure": "L'aggiornamende {{PLURAL:$1|d'a definizione|de le definiziune}} d'u messàgge ave fallite pe {{PLURAL:$1|ste|stu}} gruppe - $2. $3",
+ "translate-smg-submitted-others-processing": "Le definiziune d'u messàgge pe le otre gruppe stonne avènene processate da sotte.",
+ "translate-smg-more": "Stonne otre cangiaminde da trattà apprisse 'u 'nvie de ste cangiaminde.",
+ "translate-smg-left": "Condenute d'u messàgge jndr'à uicchi",
+ "translate-smg-right": "Cangiaminde ca arrivane",
+ "translate-smg-rename-select": "Scacchie",
+ "translate-smg-rename-cancel": "Annulle",
+ "translate-smg-rename-search": "Cirche le messàgge ca s'accocchiane...",
+ "translate-smg-rename-select-err": "Pe piacere scacchie 'nu messàgge da renomenà",
+ "translate-smg-rename-no-msg": "Nisciune messàgge acchiate.",
+ "translate-smg-rename-new": "Aggiunge cumme nuève...",
+ "translate-smg-rename-rename": "Aggiunge cumme renomenate de...",
+ "translate-smg-rename-dialog-title": "Scacchie 'nu renomenamende ca s'accocchie pe $1",
+ "translate-smg-changeset-modified": "'U 'nzieme de le cangiaminde ha state cangiate da 'n'otre utende o processe. Le cangiaminde tune non ge ponne essere pubblecate cumme sovrascretture de chidde lore. Pe piacere careche arrete 'a pàgene pe 'ndrucà le urteme cangiaminde.",
+ "translate-smg-no-groups-in-sync": "Non ge stonne gruppe in singronizzazzione",
+ "translate-smg-strong-sync-help": "Aijute",
+ "translate-smg-groups-in-sync": "Gruppe ca se stonne e singronizzane",
+ "translate-smg-groups-in-sync-list": "Elenghe de le gruppe ca stonne avènene processate in seconde piane:",
+ "translate-smg-groups-with-error-title": "Gruppe ca onne avute errore durande 'a singronizzazzione",
+ "translate-smg-groups-with-error-desc": "Elenghe de le gruppe e le messàgge lore ca onne avute errore durande 'a singronizzazzione:",
+ "translate-smg-group-with-error-summary": "$1 {{PLURAL:$1|messàgge}} cu errore:",
+ "translate-smg-group-message-action-history": "Cunde",
+ "translate-smg-group-action-resolve": "Signe cumme resolte",
+ "translate-smg-group-sync-error-warn": "Stu gruppe ave avute 'n'errore durande 'a sincronizzazzione. Pe piacere corregge le errore apprime de processà stu gruppe.",
+ "translate-smg-group-message-tag-outdated": "Non aggiornate",
+ "translate-smg-group-message-tag-rename": "Renomene",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|Tag}}:",
+ "translate-smg-group-message-message-content": "Condenute:",
+ "translate-smg-group-message-message-target": "Destinazione:",
+ "translate-smg-group-message-message-replacement": "Sostituzione:",
+ "translate-smg-group-message-message-other-langs": "Otre lènghe:",
+ "translate-smg-loading": "Stoche a careche…",
+ "translate-smg-unknown-error": "Ha assute 'n'errore scanusciute durande 'u processe d'a richiesta toje.",
+ "translate-manage-import-diff": "Messàgge $1 | Aziune: $2",
+ "translate-manage-import-new": "Messàgge nuève $1",
+ "translate-manage-import-deleted": "Messàgge scangellate $1",
+ "translate-manage-action-import": "'Mborte",
+ "translate-manage-action-conflict": "'Mborte e mitte da revedè",
+ "translate-manage-action-ignore": "Ignore",
+ "translate-manage-action-fuzzy": "'Mborte e mitte le traduziune da revedè",
+ "translate-manage-action-rename-fuzzy": "Renomene e mitte le traduziune da revedè",
+ "translate-manage-action-rename": "Renomene",
+ "translate-manage-action-ignore-change": "No sce penzanne a 'u cangiamende d'a traduzione",
+ "translate-manage-nochanges": "Non ge stonne cangiaminde jndr'à le definiziune de le messàgge jndr'à stu gruppe.",
+ "translate-manage-nochanges-other": "Non ge stonne cangiaminde pe sta lénghe.\nAuse 'u collegamende aqquà sotte pe 'ndrucà le dettaglie d'u gruppe.",
+ "translate-manage-inconsistent": "Ha state acchiate 'n'ingonsistenze jndr'à richieste.\nControlle le cangiaminde e pruéve arrete.\nDettaglie: $1",
+ "translate-manage-toolong": "'U tiembe massime de elabborazione de $1 {{PLURAL:$1|seconde}} ha spicciate.\nPe piacere manna arrete 'u module pe condinuà jndr'à l'elabborazione.",
+ "translate-manage-import-summary": "Stoche a 'mborte 'na versiona nove da 'na sorgende de fore",
+ "translate-manage-import-rename-summary": "Renomenate jndr'à 'na fonde de fore",
+ "translate-manage-conflict-summary": "Stoche a 'mborte 'na versiona nove da 'na fonde de fore.\nPe piacere condrolle.",
+ "translate-manage-submit": "Esegue",
+ "translate-manage-intro-other": "Aqquà sotte ste 'n'elenghe de cangiaminde a le traduziune jndr'à lènghe $1.\nCondrolle le cangiaminde e scacchie l'azione da ffà pe ogne messàgge.\nCe scacchie de cacà le cangiaminde, sta azione addevende sulamende temboranèe.",
+ "translate-manage-import-ok": "'Mbortate: $1",
+ "translate-manage-import-done": "'Mbortazione combletate!",
+ "translate-manage-empty-content": "'U condenute jè vacande",
+ "translate-manage-key-reused": "Stu messàgge ggià esiste jndr'à sta uicchi. Condrolle pe 'n'ause accidendale de 'na vecchia chiave.",
+ "translate-manage-source-message-not-found": "Definizione d'u messàgge non acchiate",
+ "importtranslations": "'Mborte le traduziune",
+ "translate-import-from-local": "Carecamende d'u file locale:",
+ "translate-import-load": "Careche 'u file",
+ "translate-import-err-dl-failed": "Indisponibbile a analizzà 'u file:\n$1",
+ "translate-import-err-ul-failed": "Carecamende d'u file non g'ave assute",
+ "translate-import-err-invalid-title": "'U nome d'u file date <nowiki>$1</nowiki> ere invalide.",
+ "translate-import-err-no-such-file": "'U file <nowiki>$1</nowiki> non g'esiste o non già state carecate in locale.",
+ "translate-import-err-stale-group": "Jndr'à 'u gruppe de messàgge stu file non g'esiste.",
+ "translate-import-err-no-headers": "'U file non g'è 'nu Gettext formattate correttamende pe l'estenzione Translate:\n'Mbossibbile determinà 'u gruppe de messàgge e 'a lènghe da le 'ndestazziune d'u file.",
+ "translate-js-support-unsaved-warning": "Tu è tradiziune non pubblecate.",
+ "translate-gs-pos": "Pos.",
+ "translate-gs-code": "Codece",
+ "translate-gs-continent": "Continende",
+ "translate-gs-speakers": "Parlature",
+ "translate-gs-score": "Pundegge",
+ "translate-gs-multiple": "Multiple",
+ "translate-gs-count": "Condegge",
+ "translate-gs-total": "Totale",
+ "translate-gs-avgscore": "Pundegge medie",
+ "translate-documentation-language": "Documendazione d'u messàgge",
+ "translate-searchprofile": "Tradutture",
+ "translate-searchprofile-tooltip": "Cirche da tutte le traduziune",
+ "translate-searchprofile-note": "Cchiù opziune pa recerche sò disponibbile cy [$1 ricerche de traduzione].",
+ "translate-search-languagefilter": "Filtre pe lènghe:",
+ "translate-search-nofilter": "Nisciune filtre",
+ "log-name-translationreview": "Archivije de le revisitaziune de le traduziune",
+ "log-description-translationreview": "Archivije de tutte le revisiune de le traduziune e de le gruppe de messàgge.",
+ "logentry-translationreview-message": "$1 traduzione {{GENDER:$2|reviste}} $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|ave cangiate}} 'u state de $4 traduziune de $3 da $6 a $7",
+ "group-translate-sandboxed": "Tradutture none approvate",
+ "group-translate-sandboxed-member": "{{GENDER:$1|traduttore none approvate}}",
+ "right-translate-sandboxmanage": "Gestisce le buatte de sabbie de l'utinde",
+ "action-translate-sandboxmanage": "gestisce le buatte de sabbie de l'utinde",
+ "right-translate-sandboxaction": "Esegue aziune permesse pe le utinde in modalità sandbox",
+ "action-translate-sandboxaction": "esegue aziune permesse pe le utinde in modalità sandbox",
+ "translate-workflow-state-": "(none 'mbostate)",
+ "translate-workflowstatus": "State: $1",
+ "translate-workflow-set-doing": "Stoche a 'mboste...",
+ "translate-workflow-autocreated-summary": "Ccrejazzione automateche d'a pàgene pu state de flusse de fatìe $1",
+ "translate-stats-workflow": "State",
+ "translate-workflowgroup-label": "State de le flusse de fatìe",
+ "translate-workflowgroup-desc": "Stu gruppe de messàgge face vedè le state de le flusse de fatìe de le traduziune.\nLe state sò definite jndr'à variabbile de configurazione $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Traduziune recende",
+ "translate-dynagroup-recent-desc": "Stu gruppe de messàgge face 'ndrucà le urteme traduziune jndr'à sta lènghe.\nUtile pe l'attività de revisione.",
+ "translate-dynagroup-additions-label": "Urteme aggiunde",
+ "translate-dynagroup-additions-desc": "Stu gruppe de messàgge face vedè le messàgge nuève e cangiate.",
+ "translate-msggroupselector-projects": "Gruppe de messàgge",
+ "translate-msggroupselector-search-placeholder": "Gruppe de ricerche",
+ "translate-msggroupselector-search-all": "Tutte",
+ "translate-msggroupselector-search-recent": "Recende",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|sottogruppe}}",
+ "tux-languageselector": "Traduce jndr'à",
+ "tux-tab-all": "Tutte",
+ "tux-tab-untranslated": "Non tradotte",
+ "tux-tab-outdated": "Non aggiornate",
+ "tux-tab-translated": "Tradotte",
+ "tux-tab-unproofread": "Non reviste",
+ "tux-edit": "Cange",
+ "tux-status-optional": "Opzionale",
+ "tux-status-fuzzy": "Non aggiornate",
+ "tux-status-proofread": "Reviste",
+ "tux-status-translated": "Tradotte",
+ "tux-status-saving": "Stoche a pubbleche...",
+ "tux-status-unsaved": "Non pubblecate",
+ "tux-save-unknown-error": "'N'errore scanusciute s'a verificate.",
+ "tux-editor-editsummary-placeholder": "Riepiloghe opzionale",
+ "tux-editor-paste-original-button-label": "Copie 'u teste iniziale",
+ "tux-editor-discard-changes-button-label": "Scitte le cangiaminde",
+ "tux-editor-save-button-label": "Pubbleche 'a traduzione",
+ "tux-editor-skip-button-label": "Zumbe a 'u prossime",
+ "tux-editor-cancel-button-label": "Annulle",
+ "tux-editor-confirm-button-label": "Conferme 'a traduzione",
+ "tux-editor-proofread-button-label": "Signe cumme reviste",
+ "tux-editor-shortcut-info": "Cazze \"$1\" pe confermà e spustà a 'u prossime messàgge, \"$2\" da zumbà, \"$4\" pe pigghià 'u riepiloghe o \"$3\" pe otre cose.",
+ "tux-editor-edit-desc": "Cange 'a documendazione",
+ "tux-editor-add-desc": "Aggiunge 'a documendazione",
+ "tux-editor-suggestions-title": "Suggereminde",
+ "tux-editor-in-other-languages": "Jndr'à l'otre lènghe",
+ "tux-editor-need-more-help": "E' abbesògne de 'na màne?",
+ "tux-editor-ask-help": "Cirche cchiù 'mbormaziune",
+ "tux-editor-tm-match": "$1% de combronde",
+ "tux-notices-more": "{{PLURAL:$1|$1 de cchiù}}",
+ "tux-notices-hide": "scunne",
+ "tux-editor-save-failed": "'A pubblecazione d'a traduzione ave fallite: $1",
+ "tux-editor-n-uses": "ausate $1 {{PLURAL:$1|vote}}",
+ "tux-editor-message-desc-more": "'Ndruche de cchiù",
+ "tux-editor-message-desc-less": "'Ndruche de mene",
+ "tux-editor-clear-translated": "Scunne tradotte",
+ "tux-editor-proofreading-mode": "Revisite",
+ "tux-editor-translate-mode": "Elenghe",
+ "tux-editor-proofreading-hide-own-translations": "Scunne le traduziune tune",
+ "tux-editor-proofreading-show-own-translations": "Fà vedè le traduziune tune",
+ "tux-proofread-action-tooltip": "Signe cumme reviste",
+ "tux-proofread-edit-label": "Cange",
+ "tux-editor-page-mode": "Pàgene",
+ "tux-editor-outdated-notice": "Sta traduzione ave abbesògne de essere aggiornate.",
+ "tux-editor-outdated-notice-diff-link": "Fà vedè e differenze",
+ "tux-editor-doc-editor-placeholder": "Documendazione d'u messàgge",
+ "tux-editor-doc-editor-save": "Pubbleche 'a documendazione",
+ "tux-editor-doc-editor-cancel": "Annulle",
+ "tux-messagetable-more-messages": "$1 cchiù {{PLURAL:$1|messàgge}}",
+ "tux-messagetable-loading-messages": "Stoche a careche {{PLURAL:$1|messàgge}}...",
+ "tux-message-filter-placeholder": "Elenghe de le filtre",
+ "tux-message-filter-result": "Acchiate $1 {{PLURAL:$1|resultate}} pe \"$2\"",
+ "tux-message-filter-advanced-button": "Ricerche avanzate",
+ "tux-message-filter-optional-messages-label": "Messàgge opzionale",
+ "tux-proofread-translated-by-self": "Tradotte da te",
+ "tux-empty-list-all": "Stu gruppe de messàgge jè vacande",
+ "tux-empty-list-all-guide": "Scacchie 'n'otre gruppe de messàgge da traducere",
+ "tux-translate-page-no-such-group": "<strong>'U gruppe scacchiate non g'esiste.</strong> Scacchie 'n'otre gruppe de messàgge.",
+ "tux-empty-list-translated": "Nisciune messàgge tradotte",
+ "tux-empty-list-translated-guide": "Ne puè dà 'na màne a traducere",
+ "tux-empty-list-translated-action": "Traduce",
+ "tux-empty-no-messages-to-display": "Nisciune messàgge da vedè.",
+ "tux-empty-there-are-optional": "Stonne messàgge opzionale non visibbile jndr'à l'elenghe",
+ "tux-empty-show-optional-messages": "Fà vedè le messàgge opzionale",
+ "tux-empty-no-outdated-messages": "Nisciune messàgge da aggiornà",
+ "tux-empty-nothing-to-proofread": "Ninde da rivedè",
+ "tux-empty-you-can-help-providing": "Tu puè dà 'na màne danne traduziune nuève",
+ "tux-empty-nothing-new-to-proofread": "Ninde de nuève da rivedè",
+ "tux-empty-you-can-review-already-proofread": "Tu puè revedè le traduziune ggià riviste da l'otre.",
+ "tux-empty-list-other": "Ninde da traducere",
+ "tux-empty-list-other-guide": "Tu puè dà 'na màne revedenne le traduziune esistende",
+ "tux-empty-list-other-action": "Traduziune reviste",
+ "tux-empty-list-other-link": "Fà vedè tutte le messàgge",
+ "tux-editor-close-tooltip": "Achiude",
+ "tux-editor-expand-tooltip": "Spanne",
+ "tux-editor-collapse-tooltip": "Scunne",
+ "tux-editor-message-tools-show-editor": "Fà 'ndrucà jndr'à 'u cangiatore de uicchi",
+ "tux-editor-message-tools-history": "Cunde",
+ "tux-editor-message-tools-delete": "Scangìlle",
+ "tux-editor-message-tools-translations": "Tutte le traduziune",
+ "tux-editor-message-tools-linktothis": "Collegaminde a stu messàgge",
+ "tux-editor-loading": "Stoche a scareche…",
+ "tux-editor-loading-failed": "Carecamende de le aijute de traduziune fallite: $1",
+ "translate-search-more-languages-info": "$1 cchiù {{PLURAL:$1|lènghe}}",
+ "translate-statsbar-tooltip": "$1% tradotte, $2% reviste",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% tradotte, $2% reviste, $3% da aggiornà",
+ "translate-search-more-groups-info": "$1 cchiù {{PLURAL:$1|gruppe}}",
+ "translate-syntax-error": "'A traduzione tène errore de sindasse",
+ "tux-session-expired": "Non g'è trasute. Tràse jndr'à 'na schede a parte; oppure copie 'a traduzione ca non g'è reggistrate, tràse, e tuèrne jndr'à sta pàgene e sckaffe 'a traduziona toje.",
+ "tux-nojs": "Stu strumende non ge funzione senze JavaScript. JavaScript jè disabilitate, non ge ste funzione, o 'u browser tune non g'u supporte.",
+ "specialpages-group-translation": "Traduzione",
+ "content-model-translate-messagebundle": "Pacchette de messàgge traducibbele",
+ "translate-messagebundle-validation-error": "Pacchette de messàgge non valide: $1",
+ "translate-messagebundle-error-invalid-array": "'U pacchette de messàgge adda essere 'nu oggette JSON. Tipe pigghiate $1",
+ "translate-messagebundle-error-key-empty": "'U pacchette de messàgge non ge pò tenè 'na chiave vacande",
+ "translate-messagebundle-error-key-too-long": "'A chiave \"$1\" jè troppe longhe",
+ "translate-messagebundle-error-key-invalid-characters": "'A chiave \"$1\" tène carattere non conzendite",
+ "translate-messagebundle-error-invalid-value": "'A chiave \"$1\" non ge tène 'nu valore stringhe",
+ "translate-messagebundle-error-empty-value": "'A chiave \"$1\" non ge tène 'nu valore"
+}
diff --git a/Translate/i18n/core/rsk.json b/Translate/i18n/core/rsk.json
new file mode 100644
index 00000000..2911431a
--- /dev/null
+++ b/Translate/i18n/core/rsk.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Keresturec"
+ ]
+ },
+ "translate-documentation-language": "Документация поруки"
+}
diff --git a/Translate/i18n/core/rtm.json b/Translate/i18n/core/rtm.json
new file mode 100644
index 00000000..735d60cb
--- /dev/null
+++ b/Translate/i18n/core/rtm.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jose77"
+ ]
+ },
+ "translate-page-edit": "a'tū'ạki"
+}
diff --git a/Translate/i18n/core/ru.json b/Translate/i18n/core/ru.json
new file mode 100644
index 00000000..e63b9796
--- /dev/null
+++ b/Translate/i18n/core/ru.json
@@ -0,0 +1,491 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ahonc",
+ "AlexSm",
+ "Alexander Yukal",
+ "Amire80",
+ "Askarmuk",
+ "Av6",
+ "Base",
+ "Byulent",
+ "Carn ru",
+ "DCamer",
+ "DDPAT",
+ "Diman Russkov",
+ "Diralik",
+ "Eleferen",
+ "Eugrus",
+ "Ferrer",
+ "Huuchin",
+ "Ice bulldog",
+ "Ignatus",
+ "Irus",
+ "KPu3uC B Poccuu",
+ "Kaganer",
+ "Kareyac",
+ "Katunchik",
+ "Lockal",
+ "Mailman",
+ "MaxSem",
+ "Meerrahtar",
+ "Movses",
+ "MuratTheTurkish",
+ "NBS",
+ "Okras",
+ "Pacha Tchernof",
+ "Ping08",
+ "Rivka Silinsky",
+ "Rubin",
+ "Tempodivalse",
+ "Valencia212",
+ "Vlad5250",
+ "Volkov",
+ "Wikisaurus",
+ "WindEwriX",
+ "Wirbel78",
+ "Александр Сигачёв",
+ "Туллук",
+ "Умар"
+ ]
+ },
+ "translate": "Перевести",
+ "translate-extensionname": "Перевести",
+ "translate-desc": "[[Special:Translate|Служебная страница]] для перевода MediaWiki и прочих программ",
+ "translate-fuzzybot-desc": "Это специальная системная учётная запись, используемая [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate/ru расширением перевода] MediaWiki для задач поддержки переводов.\nЭта учётная запись является частью программного обеспечения MediaWiki и не принадлежит никакому участнику.",
+ "translate-taskui-export-to-file": "Экспорт в родном формате",
+ "translate-taskui-export-as-po": "Экспорт для оффлайнового перевода",
+ "translate-taskui-export-as-csv": "Экспорт в формате CSV",
+ "translate-export-csv-message-title": "Заголовок сообщения перевода",
+ "translate-export-csv-definition": "Определение сообщения",
+ "translate-taction-translate": "Перевести",
+ "translate-taction-proofread": "Вычитать",
+ "translate-taction-lstats": "Статистика по языкам",
+ "translate-taction-mstats": "Статистика группы сообщений",
+ "translate-taction-export": "Экспорт",
+ "translate-taction-disabled": "Это действие отключено в этой вики.",
+ "translate-page-no-such-language": "Передан неверный код языка",
+ "translate-page-no-such-group": "Неверно указана группа.",
+ "translate-page-disabled": "В этом разделе переводы на данный язык отключены. Причина:\n\n<em>$1</em>",
+ "translate-language-disabled": "Возможность перевода на этот язык отключена.",
+ "translate-page-settings-legend": "Параметры",
+ "translate-page-group": "Группа",
+ "translate-page-language": "Язык",
+ "translate-page-limit": "Ограничение",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|сообщение|сообщения|сообщений}} на страницу",
+ "translate-submit": "Вывести",
+ "translate-page-navigation-legend": "Навигация",
+ "translate-page-showing": "Показаны сообщения с $1 по $2 (из $3).",
+ "translate-page-showing-all": "Показано $1 {{PLURAL:$1|сообщение|сообщения|сообщений}}.",
+ "translate-page-showing-none": "Нет сообщений для показа.",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "следующая страница",
+ "translate-prev": "предыдущая страница",
+ "translate-page-description-legend": "Информация о группе",
+ "translate-page-description-hasoptional": "Эта группа сообщений включается необязательные сообщения.\nНеобязательные сообщения переводятся только в тех случаях, когда ваш язык предъявляет какие-то дополнительные требования, —\nнапример, при особенностях пунктуации или при транслитерации имён собственных. $1",
+ "translate-page-description-hasoptional-open": "Показывать дополнительные сообщения.",
+ "translate-page-edit": "изменить",
+ "translate-optional": "(по желанию)",
+ "translate-ignored": "(игнорируемое)",
+ "translate-edit-title": "Изменить «$1»",
+ "translate-edit-definition": "Определение сообщения",
+ "translate-edit-contribute": "править",
+ "translate-edit-no-information": "<em>Это сообщение не имеет описания. Если вы знаете, где или как это сообщение используется, то можете помочь другим переводчикам, добавив к нему описание.</em>",
+ "translate-edit-information": "Информация о сообщении ($1)",
+ "translate-edit-warnings": "Предупреждения о неполных переводах",
+ "translate-edit-tmmatch-source": "Текст исходного сообщения для перевода: $1",
+ "translate-edit-tmmatch": "$1% соответствия",
+ "translate-edit-nopermission": "Для перевода сообщений вам требуется получить права переводчика.",
+ "translate-edit-askpermission": "Получить доступ",
+ "exporttranslations": "Экспорт переводов",
+ "translate-export-form-format": "Формат",
+ "translate-export-invalid-format": "Уточните, пожалуйста, допустимый формат.",
+ "translate-export-not-supported": "Экспорт переводов не поддерживается.",
+ "translate-export-format-notsupported": "Указанный формат экспорта не поддерживается этой группой сообщений.",
+ "translate-export-group-too-large": "Выбранная группа сообщений слишком велика. Выберите группу сообщений, в которой меньше $1 {{PLURAL:$1|сообщения|сообщений}} или обратитесь к администратору перевода за советом.",
+ "translate-checks-parameters": "{{PLURAL:$2|1=Следующий параметр не используется|Следующие параметры не используются}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|1=Неизвестный параметр|Неизвестные параметры}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "Непарное количество открывающих и закрывающих {{PLURAL:$2|скобок}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|1=Следующая ссылка вызывает проблемы|Следующие ссылки вызывают проблемы}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Отсутствует $2 ссылка|Отсутствуют $2 ссылки|Отсутствуют $2 ссылок}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Оригинал использует <nowiki>{{PLURAL:}}</nowiki>, а перевод — нет.",
+ "translate-checks-plural-forms": "Выражению <nowiki>{{PLURAL:}}</nowiki> {{PLURAL:$1|была дана одна форма|были даны $1 формы|были даны $1 форм}}, но {{PLURAL:$2|поддерживается только $2 форма|поддерживаются $2 формы|поддерживаются $2 форм|1=поддерживается только одна форма}} (кроме форм 0= и 1=).",
+ "translate-checks-plural-dupe": "В конце выражения <nowiki>{{PLURAL:}}</nowiki> две одинаковые формы. Вместо <nowiki>{{PLURAL:$1|пальто|пальто}}</nowiki> лучше написать <nowiki>{{PLURAL:$1|пальто}}</nowiki>.",
+ "translate-checks-gettext-plural-missing": "Этот перевод должен содержать <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-unsupported": "Этот перевод не поддерживает <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-count": "<nowiki>{{PLURAL:GETTEXT|}}</nowiki> принимает только {{PLURAL:$1|одну форму|$1 формы|$1 форм}} множественного числа. Сейчас {{PLURAL:$2|указана одна форма|указаны $2 формы|указано $2 форм}} множественного числа.",
+ "translate-checks-smartformat-plural-missing": "Этот перевод должен использовать множественное число в переменной $1.",
+ "translate-checks-smartformat-plural-unsupported": "Это сообщение не поддерживает множественное число для переменной $1.",
+ "translate-checks-smartformat-plural-count": "Некорректное количество форм множественного числа для <strong>$3</strong>. Должн{{PLURAL:$1|а быть $1 форма|о быть $1 формы|о быть $1 форм}} мн. числа. Сейчас представлен{{PLURAL:$2|а $2 форма|о $2 формы|о $2 форм}} мн. числа.",
+ "translate-checks-unicode-plural-missing": "Этот перевод должен содержать шаблон <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-unsupported": "Это сообщение не поддерживает шаблон <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-invalid": "Формы множественного числа должны быть определены в следующем виде — «$1». Этот перевод содержит «$2».",
+ "translate-checks-pagename": "Изменилось определение пространства имён",
+ "translate-checks-format": "Этот перевод не соответствует определению или содержит синтаксическую ошибку: $1",
+ "translate-checks-escape": "Следующий escape-{{PLURAL:$2|символ может быть случайным|символы могут быть случайными}}: <strong>$1</strong>. {{PLURAL:$4|Допустимый escape-символ|Допустимые escape-символы включают}}: $3.",
+ "translate-checks-parametersnotequal": "Число параметров — $1, а {{PLURAL:$2|1=должен|должно}} быть — $2.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> некорректен.",
+ "translate-checks-fudforum-syntax": "Используйте <nowiki>$1</nowiki> вместо <nowiki>$2</nowiki> в этом проекте.",
+ "translate-checks-newline-missing-start": "{{PLURAL:$1|Пропущен|Пропущено}} $1 {{PLURAL:$1|символ|символов}} в новой строке в начале перевода.",
+ "translate-checks-newline-missing-end": "{{PLURAL:$1|Пропущен|Пропущено}} $1 {{PLURAL:$1|символ|символов}} в новой строке в конце перевода.",
+ "translate-checks-newline-extra-start": "{{PLURAL:$1|Добавлен|Добавлено}} $1 {{PLURAL:$1|символ|символов}} в дополнительной новой строке в начале перевода.",
+ "translate-checks-newline-extra-end": "{{PLURAL:$1|Добавлен|Добавлено}} $1 {{PLURAL:$1|символ|символов}} в дополнительной новой строке в конце перевода.",
+ "translate-checks-value-not-present": "Перевод должен быть равен {{PLURAL:$1|1=|одному из следующих значений:}} $1.",
+ "translate-checks-replacement": "Используйте $2 вместо $1.",
+ "translate-checks-empty": "Перевод без содержания или с пробелом недопустим.",
+ "translate-pref-editassistlang": "Вспомогательные языки:",
+ "prefs-translate": "Настройки перевода",
+ "translate-pref-editassistlang-help": "Разделённый запятыми список кодов языков.\nПереводы на эти языки будут показаны при правке сообщений.\nСписок по умолчанию зависит от вашего языка.",
+ "translate-pref-editassistlang-bad": "Недействительный код языка в списке:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Правка с использованием интерфейса перевода",
+ "action-translate": "править с использованием интерфейса перевода",
+ "right-translate-manage": "Управление группами сообщений",
+ "action-translate-manage": "управление группами сообщений",
+ "right-translate-import": "Импортирование переводов, выполненных в оффлайне",
+ "action-translate-import": "импорт переводов, выполненных в оффлайне",
+ "right-translate-messagereview": "Вычитать переводы",
+ "action-translate-messagereview": "вычитать переводы",
+ "right-translate-groupreview": "Изменять состояние обработки групп сообщений",
+ "action-translate-groupreview": "изменение состояния групп сообщений",
+ "translate-rcfilters-translations": "Переводы",
+ "translate-rcfilters-translations-only-label": "Переводы",
+ "translate-rcfilters-translations-only-desc": "Изменения в переведенных страницах.",
+ "translate-rcfilters-translations-filter-label": "Не переводы",
+ "translate-rcfilters-translations-filter-desc": "Все изменения, которые не являются переводами.",
+ "translate-rcfilters-translations-site-label": "Сообщения сайта",
+ "translate-rcfilters-translations-site-desc": "Кастомизация сообщений сайта в пространстве имён MediaWiki.",
+ "translate-rc-translation-filter": "Фильтровать переводы:",
+ "translate-rc-translation-filter-no": "Без ограничений",
+ "translate-rc-translation-filter-only": "Показать только переводы",
+ "translate-rc-translation-filter-filter": "Скрыть переводы",
+ "translate-rc-translation-filter-site": "Только системные сообщения сайта",
+ "translationstats": "Статистика переводов",
+ "translate-stats-edits": "Правок",
+ "translate-stats-users": "Переводчики",
+ "translate-stats-registrations": "Регистрации",
+ "translate-stats-reviews": "Вычитки",
+ "translate-stats-reviewers": "Рецензенты",
+ "translate-statsf-intro": "С помощью этой формы вы можете создать простой график со статистикой.\nВсе вводимые значения имеют верхний и нижний пределы.",
+ "translate-statsf-options": "Настройки графика",
+ "translate-statsf-width": "Ширина в пикселах:",
+ "translate-statsf-height": "Высота в пикселах:",
+ "translate-statsf-days": "Период времени в днях:",
+ "translate-statsf-start": "Дата начала:",
+ "translate-statsf-scale": "Степень детализации:",
+ "translate-statsf-scale-years": "Годы",
+ "translate-statsf-scale-months": "Месяцы",
+ "translate-statsf-scale-weeks": "Недели",
+ "translate-statsf-scale-days": "Дни",
+ "translate-statsf-scale-hours": "Часы",
+ "translate-statsf-count": "Измерение:",
+ "translate-statsf-count-edits": "Числа правок",
+ "translate-statsf-count-users": "Активных переводчиков",
+ "translate-statsf-count-registrations": "Новых участников",
+ "translate-statsf-count-reviews": "Проверок переводов",
+ "translate-statsf-count-reviewers": "Вычитывающих",
+ "translate-statsf-language": "Список языковых кодов через запятую:",
+ "translate-statsf-group": "Список кодов групп через запятую:",
+ "translate-statsf-submit": "Предпросмотр",
+ "translate-statsf-unknown-error": "Возникла неизвестная ошибка.",
+ "translate-statsf-error-message": "Возникла ошибка при загрузке этого графика: $1.",
+ "translate-statsf-graph-alt-text-info": "Текстовая альтернатива для статистики перевода расположена внизу таблицы.",
+ "translate-statsf-alt-text": "Это текстовая альтернатива для статистики переводов.",
+ "translate-statsf-embed": "Код для вставки графика со статистикой переводов на другие страницы.",
+ "translate-tag-page-desc": "Перевод вики-страницы [[$2|$1]] с $3 ($4).",
+ "translate-tag-page-wikipage-desc": "[[$1|Перевод]] вики-страницы [[$2]] с <bdi>{{GRAMMAR:genitive|$3}}</bdi> ($4) на <bdi>$5</bdi> ($6)",
+ "translate-sidebar-alltrans": "На других языках",
+ "translations": "Все переводы",
+ "translations-summary": "Введите имя сообщения для показа всех доступных переводов.",
+ "translate-translations-no-message": "«$1» не относится к сообщениям, доступным для перевода",
+ "translate-translations-none": "Нет переводов для «$1»",
+ "translate-translations-count": "{{PLURAL:$1|Найден $1 перевод|Найдено $1 перевода|Найдены $1 переводов}}.",
+ "translate-translations-fieldset-title": "Сообщение",
+ "translate-translations-messagename": "Имя:",
+ "translate-translations-project": "Проект:",
+ "translate-translations-including-no-param": "Пожалуйста, укажите ключ сообщения в качестве параметра подстраницы",
+ "translate-translations-history-short": "ист.",
+ "languagestats": "Статистика по языку",
+ "languagestats-summary": "На этой странице представлена статистика переводов для всех групп сообщений данного языка.",
+ "messagegroupstats-summary": "Эта страница показывает статистику группы сообщений.",
+ "languagestats-stats-for": "Статистика переводов на $1 язык ($2).",
+ "languagestats-recenttranslations": "недавние переводы",
+ "translate-langstats-incomplete": "Некоторые статистические данные на этой странице неполны. Для получения полных данных перезагрузите страницу.",
+ "translate-langstats-expand": "раскрыть",
+ "translate-langstats-collapse": "свернуть",
+ "translate-langstats-expandall": "раскрыть все",
+ "translate-langstats-collapseall": "свернуть все",
+ "translate-language-code": "Код языка",
+ "translate-language-code-field-name": "Код языка:",
+ "translate-suppress-complete": "Не показывать полностью переведённые группы сообщений",
+ "translate-ls-noempty": "Не показывать полностью непереведённые группы сообщений",
+ "translate-language": "Язык",
+ "translate-total": "Сообщений",
+ "translate-untranslated": "Непереведённых",
+ "translate-percentage-complete": "Готово",
+ "translate-percentage-fuzzy": "Устарело",
+ "translate-percentage-proofread": "Проверено",
+ "translate-languagestats-overall": "Сообщения всех групп",
+ "translate-ls-submit": "Показать статистику",
+ "translate-ls-column-group": "Группа сообщений",
+ "translate-mgs-pagename": "Статистика групп сообщений",
+ "translate-mgs-fieldset": "Показать настройки",
+ "translate-mgs-group": "Группа сообщений:",
+ "translate-mgs-nocomplete": "Не показывать языки, перевод на которые полностью завершён",
+ "translate-mgs-noempty": "Не показывать языки, перевод на которые ещё не начат",
+ "translate-mgs-submit": "Показать статистику",
+ "translate-mgs-column-language": "Язык",
+ "translate-mgs-totals": "Все $1 {{PLURAL:$1|язык|языка|языков}} вместе",
+ "translate-mgs-invalid-group": "Указанная группа $1 не существует.",
+ "translate-mgs-nothing": "Нет данных для отображения.",
+ "translate-tes-server-error": "Не удалось получить предложения для поиска",
+ "translate-tes-group-not-found": "Нет подходящих результатов",
+ "translate-tes-type-to-search": "Начните печатать, чтобы начать поиск",
+ "supportedlanguages": "Активные языки",
+ "supportedlanguages-summary": "На этой странице приведён список активных языков проектом {{SITENAME}},\nвместе с именами тех, кто трудится над переводами на эти языки на TranslateWiki.\nИмя переводчика отображается тем крупнее, чем больше правок он сделал.\nПо цвету подчёркивания можно понять, насколько давно переводчик последний раз совершал здесь какое-либо действие.",
+ "supportedlanguages-colorlegend": "Цветовая легенда: последний перевод был сделан $1 {{PLURAL:$1|день|дня|дней}} назад.",
+ "supportedlanguages-portallink": "[$1] $2 — $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-sqlite-error": "SQLite не поддерживается",
+ "supportedlanguages-postgres-error": "PostgreSQL не поддерживается",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Переводчик|Переводчица}}|Переводчики}}: $1",
+ "supportedlanguages-recenttranslations": "недавние переводы",
+ "supportedlanguages-count": "Всего $1 {{PLURAL:$1|язык|языка|языков}}.",
+ "supportedlanguages-activity": "{{BIDI:$1}}: $2 {{PLURAL:$2|правка|правки|правок}} — последняя правка $3 {{PLURAL:$3|день|дня|дней}} назад",
+ "translate-supportedlanguages-cached": "Эта информация была кеширована $1 назад.",
+ "translate-activelanguages-invalid-code": "Языковой код «$1» не распознан или не был активирован для переводов.",
+ "abusefilter-edit-builder-vars-translate-source-text": "Исходный текст элемента перевода",
+ "abusefilter-edit-builder-vars-translate-target-language": "Целевой язык для перевода",
+ "translate-jssti-add": "Добавить в список",
+ "managemessagegroups": "Управление группами сообщений",
+ "translate-smg-notallowed": "Вы не можете выполнить это действие.",
+ "translate-smg-nochanges": "Нет изменений для обработки.",
+ "translate-smg-submit": "Отправить изменения для обработки",
+ "translate-smg-submitted": "Описания сообщений обновлены. Изменения в настоящее время обрабатываются в фоновом режиме.",
+ "translate-smg-submitted-with-failure": "Не удалось обновить {{PLURAL:$1|определение для сообщения|определения для сообщений|определений для сообщений}} у {{PLURAL:$1|следующей группы|следующих групп}} — $2. $3",
+ "translate-smg-submitted-others-processing": "Определения сообщений для других групп в настоящее время обрабатывают в фоновом режиме.",
+ "translate-smg-more": "После внесения этих изменений появится больше изменений для обработки.",
+ "translate-smg-left": "Содержание сообщения в вики",
+ "translate-smg-right": "Входящие изменения",
+ "translate-smg-rename-select": "Выбрать",
+ "translate-smg-rename-cancel": "Отменить",
+ "translate-smg-rename-search": "Искать подходящее сообщение...",
+ "translate-smg-rename-select-err": "Выберите, пожалуйста, сообщение для переименования",
+ "translate-smg-rename-no-msg": "Сообщения не найдены.",
+ "translate-smg-rename-new": "Добавить как новое...",
+ "translate-smg-rename-rename": "Добавить как переименование для...",
+ "translate-smg-rename-dialog-title": "Выбрать подходящее переименование для $1",
+ "translate-smg-changeset-modified": "Набор изменений был изменён другим пользователем или процессом. Ваши изменения не могут быть опубликованы, так как это может повлиять на внесённые изменения. Пожалуйста, перезагрузите страницу, чтобы увидеть последние изменения.",
+ "translate-smg-no-groups-in-sync": "В данный момент группы не синхронизируются",
+ "translate-smg-strong-sync-help": "Помощь",
+ "translate-smg-groups-in-sync": "В данный момент группы синхронизируются",
+ "translate-smg-groups-in-sync-list": "Список групп, которые в настоящее время обрабатываются в фоновом режиме:",
+ "translate-smg-groups-with-error-title": "Группы, в которых возникли ошибки при синхронизации",
+ "translate-smg-groups-with-error-desc": "Список групп и их сообщений, в которых возникли ошибки при синхронизации:",
+ "translate-smg-group-with-error-summary": "$1 {{PLURAL:$1|сообщение|сообщения|сообщений}} с ошибками:",
+ "translate-smg-group-message-action-history": "История",
+ "translate-smg-group-action-resolve": "Отметить как решённое",
+ "translate-smg-group-sync-error-warn": "У этой группы возникла ошибка при синхронизации. Пожалуйста, исправьте ошибки перед обработкой этой группы.",
+ "translate-smg-group-message-tag-outdated": "Устарело",
+ "translate-smg-group-message-tag-rename": "Переименовать",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|Тег|Тега|Тегов}}:",
+ "translate-smg-group-message-message-content": "Содержание:",
+ "translate-smg-group-message-message-target": "Цель:",
+ "translate-smg-group-message-message-replacement": "Замена:",
+ "translate-smg-group-message-message-other-langs": "Другие языки:",
+ "translate-smg-loading": "Загружается…",
+ "translate-smg-unknown-error": "Возникла неизвестная ошибка при обработке вашего запроса.",
+ "translate-manage-import-diff": "Сообщение $1 | Действия: $2",
+ "translate-manage-import-new": "Новое сообщение $1",
+ "translate-manage-import-deleted": "Удалённое сообщение $1",
+ "translate-manage-action-import": "Импортировать",
+ "translate-manage-action-conflict": "Импортировать и пометить как неточное",
+ "translate-manage-action-ignore": "Игнорировать",
+ "translate-manage-action-fuzzy": "Импортирование и неточные переводы",
+ "translate-manage-action-rename-fuzzy": "Переименовать и отметить переводы устаревшими",
+ "translate-manage-action-rename": "Переименовать",
+ "translate-manage-action-ignore-change": "Игнорировать изменение в переводе",
+ "translate-manage-nochanges": "Нет никаких изменений в описаниях сообщений для этой группы.",
+ "translate-manage-nochanges-other": "Нет никаких изменений для этого языка.\nИспользуйте ссылку ниже для возвращения к просмотру подробностей группы.",
+ "translate-manage-inconsistent": "Обнаружено несоответствие в запросе.\nПожалуйста, проверьте изменения и попробуйте ещё раз. Подробности: $1.",
+ "translate-manage-toolong": "Превышено максимальное время обработки в $1 {{PLURAL:$1|секунду|секунды|секунд}}.\nПожалуйста, повторите отправку данных для продолжения обработки.",
+ "translate-manage-import-summary": "Импортирована новая версия из внешнего источника",
+ "translate-manage-import-ignore": "Пропускается сообщение $1.",
+ "translate-manage-import-rename-summary": "Переименовано во внешнем источнике",
+ "translate-manage-conflict-summary": "Импортируется новая версия из внешнего источника. \nПожалуйста, проверьте её.",
+ "translate-manage-submit": "Выполнить",
+ "translate-manage-intro-other": "Ниже приведён список изменений в переводах на язык: $1.\nПожалуйста, просмотрите изменения и выберите желаемое действие для каждого изменения.\nЕсли вы проигнорируете изменения, то это будет временным действием.",
+ "translate-manage-import-ok": "Импортирована: $1",
+ "translate-manage-import-done": "Импортирование завершено!",
+ "translate-manage-empty-content": "Содержимое отсутствует",
+ "translate-manage-key-reused": "Это сообщение уже существует в вики. Проверьте случайное повторное использование старого ключа.",
+ "translate-manage-source-message-not-found": "Определение сообщения не найдено",
+ "importtranslations": "Импорт переводов",
+ "translate-import-from-local": "Загрузка локального файла:",
+ "translate-import-load": "Загрузить файл",
+ "translate-import-err-dl-failed": "Невозможно загрузить файл:\n$1",
+ "translate-import-err-ul-failed": "Не удалось загрузить файл",
+ "translate-import-err-invalid-title": "Указанное имя файла <nowiki>$1</nowiki> неверно.",
+ "translate-import-err-no-such-file": "Файл <nowiki>$1</nowiki> не существует или не загружен локально.",
+ "translate-import-err-stale-group": "Группы сообщений, к которой принадлежит этот файл, не существует.",
+ "translate-import-err-no-headers": "Указан некорректно построенный Gettext-файл в формате расширения перевода.\nИз заголовков файла невозможно определить группу и язык.",
+ "translate-js-support-unsaved-warning": "У вас имеются неопубликованные переводы.",
+ "translate-gs-pos": "Поз.",
+ "translate-gs-code": "Код",
+ "translate-gs-continent": "Часть света",
+ "translate-gs-speakers": "Носителей",
+ "translate-gs-score": "Оценка",
+ "translate-gs-multiple": "Несколько",
+ "translate-gs-count": "Кол-во",
+ "translate-gs-total": "Всего",
+ "translate-gs-avgscore": "Ср. оценка",
+ "translate-documentation-language": "Документация сообщения",
+ "translate-searchprofile": "Переводы",
+ "translate-searchprofile-tooltip": "Поиск во всех переводах",
+ "translate-searchprofile-note": "Дополнительные параметры поиска доступны в форме [$1 поиска переводов].",
+ "translate-search-languagefilter": "Фильтр по языку:",
+ "translate-search-nofilter": "Без фильтрации",
+ "log-name-translationreview": "Журнал проверки переводов",
+ "log-description-translationreview": "Журнал всех проверок переводов и групп сообщений.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|проверил|проверила}} перевод «$3»",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|изменил|изменила}} состояние переводов страницы «$3» на $4 язык с «$6» на «$7»",
+ "group-translate-sandboxed": "Неутвержденные переводчики",
+ "group-translate-sandboxed-member": "{{GENDER:$1|неутверждённый переводчик|неутверждённая переводчица}}",
+ "right-translate-sandboxmanage": "Управление участниками, ещё не получившими полных прав (sandboxed users)",
+ "action-translate-sandboxmanage": "управлять правами участников, ещё не получивших полных прав (sandboxed users)",
+ "right-translate-sandboxaction": "выполнение действий, разрешённых для участников, ещё не получивших полных прав (sandboxed users)",
+ "action-translate-sandboxaction": "выполнять действия, разрешённые для участников, ещё не получивших полных прав (sandboxed users)",
+ "translate-workflow-state-": "(не установлено)",
+ "translate-workflowstatus": "Состояние: $1",
+ "translate-workflow-set-doing": "Устанавливается...",
+ "translate-workflow-autocreated-summary": "Автоматическое создание страницы состояния рабочего процесса «$1»",
+ "translate-stats-workflow": "Состояние",
+ "translate-workflowgroup-label": "Состояния процесса",
+ "translate-workflowgroup-desc": "Эта группа сообщений показывает перевод состояний рабочего процесса.\nСостояния определяются с помощью переменной конфигурации $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Недавно переведённые",
+ "translate-dynagroup-recent-desc": "Эта группа сообщений отображает все недавние переводы на данный язык.\nЭтот режим наиболее полезен для задач проверки.",
+ "translate-dynagroup-additions-label": "Недавно добавленные",
+ "translate-dynagroup-additions-desc": "Эта группа показывает новые и изменённые сообщения.",
+ "translate-msggroupselector-projects": "Группа сообщений",
+ "translate-msggroupselector-search-placeholder": "Поиск групп",
+ "translate-msggroupselector-search-all": "Все",
+ "translate-msggroupselector-search-recent": "Недавние",
+ "translate-msggroupselector-view-subprojects": "{{PLURAL:$1|$1 подгруппа|$1 подгруппы|$1 подгрупп|1=Одна подгруппа}}",
+ "tux-languageselector": "Переводить на",
+ "tux-select-target-language": "Целевой язык для перевода",
+ "tux-tab-all": "Все",
+ "tux-tab-untranslated": "Непереведённые",
+ "tux-tab-outdated": "Устаревшие",
+ "tux-tab-translated": "Переведённые",
+ "tux-tab-unproofread": "Непроверенные",
+ "tux-edit": "Править",
+ "tux-status-optional": "Необязательно",
+ "tux-status-fuzzy": "Устарело",
+ "tux-status-proofread": "Проверено",
+ "tux-status-translated": "Переведено",
+ "tux-status-saving": "Публикуется…",
+ "tux-status-unsaved": "Не опубликовано",
+ "tux-save-unknown-error": "Произошла неизвестная ошибка.",
+ "tux-editor-placeholder-documentation": "Добавить документацию сообщения",
+ "tux-editor-placeholder-language": "Ваш перевод на $1",
+ "tux-editor-editsummary-placeholder": "Объясните ваши изменения (по желанию)",
+ "tux-editor-paste-original-button-label": "Вставить исходный текст",
+ "tux-editor-discard-changes-button-label": "Отменить изменения",
+ "tux-editor-save-button-label": "Опубликовать перевод",
+ "tux-editor-skip-button-label": "Следующее",
+ "tux-editor-cancel-button-label": "Отмена",
+ "tux-editor-confirm-button-label": "Подтвердить перевод",
+ "tux-editor-proofread-button-label": "Пометить как проверенное",
+ "tux-editor-shortcut-info": "Нажмите «$1» для подтверждения перевода и перемещения к следующему сообщению, «$2» для пропуска, «$4» для ввода описания изменения или нажмите и подержите «$3», чтобы увидеть другие сочетания клавиш.",
+ "tux-editor-edit-desc": "Изменить документацию",
+ "tux-editor-add-desc": "Добавить документацию",
+ "tux-editor-suggestions-title": "Подсказки",
+ "tux-editor-latest-updates-title": "Последние обновления",
+ "tux-editor-changes-without-summary": "$1 {{PLURAL:$1|обновление|обновления|обновлений}} без описания изменений",
+ "tux-editor-all-changes": "Все изменения",
+ "tux-editor-in-other-languages": "На других языках",
+ "tux-editor-need-more-help": "Нужна помощь?",
+ "tux-editor-ask-help": "Попросите дополнительное объяснение",
+ "tux-editor-tm-match": "$1% соответствия",
+ "tux-notices-more": "{{PLURAL:$1|ещё $1}}",
+ "tux-notices-hide": "скрыть",
+ "tux-editor-save-failed": "Не удалось опубликовать перевод: $1",
+ "tux-editor-n-uses": "использован $1 {{PLURAL:$1|раз|раза|раз}}",
+ "tux-editor-message-desc-more": "Показать подробно",
+ "tux-editor-message-desc-less": "Показать компактно",
+ "tux-editor-clear-translated": "Скрыть переведённое",
+ "tux-editor-proofreading-mode": "Проверка",
+ "tux-editor-translate-mode": "Список",
+ "tux-editor-proofreading-hide-own-translations": "Скрыть свои переводы",
+ "tux-editor-proofreading-show-own-translations": "Показать свои переводы",
+ "tux-proofread-action-tooltip": "Пометить как проверенное",
+ "tux-proofread-edit-label": "Изменить",
+ "tux-editor-page-mode": "Страница",
+ "tux-editor-outdated-notice": "Возможно, этот перевод нуждается в обновлении.",
+ "tux-editor-outdated-notice-diff-link": "Показать отличия",
+ "tux-editor-doc-editor-placeholder": "Документация сообщения",
+ "tux-editor-doc-editor-save": "Опубликовать документацию",
+ "tux-editor-doc-editor-cancel": "Отмена",
+ "tux-messagetable-more-messages": "Ещё $1 {{PLURAL:$1|сообщение|сообщения|сообщений}}",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|1=Сообщение загружается|Сообщения загружаются}}…",
+ "tux-message-filter-placeholder": "Отфильтровать список",
+ "tux-message-filter-result": "По запросу «$2» {{PLURAL:$1|найден|найдены|найдено}} $1 {{PLURAL:$1|результат|результата|результатов}}",
+ "tux-message-filter-advanced-button": "Расширенный поиск",
+ "tux-message-filter-optional-messages-label": "Необязательные сообщения",
+ "tux-proofread-translated-by-self": "Переведено вами",
+ "tux-empty-list-all": "Эта группа сообщений пуста",
+ "tux-empty-list-all-guide": "Выберите для перевода другую группу сообщений",
+ "tux-translate-page-no-such-group": "<strong>Указанная группа не существует.</strong> Выберите другую группу сообщений.",
+ "tux-empty-list-translated": "Нет переведённых сообщений",
+ "tux-empty-list-translated-guide": "Вы можете помочь переводами",
+ "tux-empty-list-translated-action": "Перевести",
+ "tux-empty-no-messages-to-display": "Нет сообщений для отображения.",
+ "tux-empty-there-are-optional": "Есть необязательные сообщения, не показанные в списке",
+ "tux-empty-show-optional-messages": "Показать необязательные сообщения",
+ "tux-empty-no-outdated-messages": "Нет устаревших сообщений",
+ "tux-empty-nothing-to-proofread": "Нет ничего для проверки",
+ "tux-empty-you-can-help-providing": "Вы можете помочь новыми переводами",
+ "tux-empty-nothing-new-to-proofread": "Нет ничего нового для проверки",
+ "tux-empty-you-can-review-already-proofread": "Вы&nbsp;можете&nbsp;перепроверить уже&nbsp;проверенные&nbsp;переводы.",
+ "tux-empty-list-other": "Нечего переводить",
+ "tux-empty-list-other-guide": "Вы можете проверить существующие переводы",
+ "tux-empty-list-other-action": "Проверка переводов",
+ "tux-empty-list-other-link": "Показать все сообщения",
+ "tux-editor-close-tooltip": "Закрыть",
+ "tux-editor-expand-tooltip": "Развернуть",
+ "tux-editor-collapse-tooltip": "Свернуть",
+ "tux-editor-message-tools-show-editor": "Показать в вики-редакторе",
+ "tux-editor-message-tools-history": "История",
+ "tux-editor-message-tools-delete": "Удалить",
+ "tux-editor-message-tools-translations": "Все переводы",
+ "tux-editor-message-tools-linktothis": "Ссылка на это сообщение",
+ "tux-editor-loading": "Загружается…",
+ "tux-editor-loading-failed": "Не удалось загрузить подсказки для перевода: $1",
+ "translate-search-more-languages-info": "ещё $1 {{PLURAL:$1|язык|языка|языков}}",
+ "translate-statsbar-tooltip": "$1% переведённых, $2% проверенных",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% переведённых, $2% проверенных, $3% устаревших",
+ "translate-search-more-groups-info": "ещё $1 {{PLURAL:$1|группа|группы|групп}}",
+ "translate-syntax-error": "В переводе имеются синтаксические ошибки.",
+ "tux-session-expired": "Вы не авторизованы. Пожалуйста, авторизуйтесь в отдельной вкладке или скопируйте несохранённый перевод, вернитесь на эту страницу после авторизации и введите свой перевод ещё раз.",
+ "tux-nojs": "Этот инструмент не работает без JavaScript. А JavaScript отключён, не работает, или этот браузер не поддерживается.",
+ "specialpages-group-translation": "Перевод",
+ "content-model-translate-messagebundle": "Набор переводимых сообщений",
+ "translate-messagebundle-validation-error": "Недействительный набор сообщений: $1",
+ "translate-messagebundle-error-parsing": "Ошибка при парсинге JSON: $1",
+ "translate-messagebundle-error-invalid-array": "Набор сообщений должен быть JSON-объектом. Получен тип $1",
+ "translate-messagebundle-error-key-empty": "В наборе сообщений не должно быть пустого ключа",
+ "translate-messagebundle-error-key-too-long": "Ключ «$1» слишком длинный",
+ "translate-messagebundle-error-key-invalid-characters": "Ключ «$1» содержит недопустимые символы",
+ "translate-messagebundle-error-invalid-value": "Ключ «$1» не содержит значения строки",
+ "translate-messagebundle-error-empty-value": "Ключ «$1» не имеет значения",
+ "translate-messagebundle-error-metadata-type": "Метаданные должны быть массивом.",
+ "translate-messagebundle-error-invalid-metadata": "Раздел с метаданными содержит неизвестный ключ: «$1». Поддерживаемые ключи: $2.",
+ "translate-messagebundle-error-invalid-sourcelanguage": "Исходный языковой код «$1» не поддерживается.",
+ "translate-messagebundle-error-invalid-prioritylanguage": "{{PLURAL:$2|Недействительный приоритетный языковой код |Недействительные приоритетные языковые коды}} в метаданных: $1",
+ "translate-messagebundle-error-invalid-prioritylanguage-format": "Недействительный формат приоритетного языка в метаданных. Приоритетные языки должны быть массивом строк.",
+ "translate-messagebundle-group-description": "Сообщения набора сообщений определены на странице [[$2|$1]].",
+ "translate-messagebundle-change-sourcelanguage": "Устанавливается исходный язык для набора сообщений в соответствии с метаданными.",
+ "translate-messagebundle-sourcelanguage-changed": "Исходный язык набора сообщений невозможно изменить после его создания.",
+ "log-action-filter-translationreview": "Тип действия:",
+ "log-action-filter-translationreview-message": "Проверка отдельных переведённых сообщений",
+ "log-action-filter-translationreview-group": "Изменения в статусе выполнения перевода"
+}
diff --git a/Translate/i18n/core/rue.json b/Translate/i18n/core/rue.json
new file mode 100644
index 00000000..661b08e0
--- /dev/null
+++ b/Translate/i18n/core/rue.json
@@ -0,0 +1,172 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gazeb",
+ "Gramo6",
+ "Tkalyn"
+ ]
+ },
+ "translate": "Перекладаня",
+ "translate-desc": "[[Special:Translate|Шпеціална сторінка]] про переклад MediaWiki і іншых проґрамів",
+ "translate-taskui-export-to-file": "Екстортовати в натівнім форматї",
+ "translate-taskui-export-as-po": "Експортовати про офлайн переклад",
+ "translate-taction-translate": "Переклад",
+ "translate-taction-proofread": "Сконтролёвати",
+ "translate-taction-lstats": "Штатістіка языків",
+ "translate-taction-mstats": "Штатістіка ґруп повідомлїнь",
+ "translate-taction-export": "Експорт",
+ "translate-taction-disabled": "Тота дїя на тій вікі заказана.",
+ "translate-page-no-such-language": "Заданый код языка не є правилный.",
+ "translate-page-no-such-group": "Задана ґрупа была неправилна.",
+ "translate-page-disabled": "Переклады до того языка были у тій ґрупі заказаны. Причіна:\n\n<em>$1</em>",
+ "translate-language-disabled": "Переклад до того языка є заказаный.",
+ "translate-page-settings-legend": "Параметры",
+ "translate-page-group": "Ґрупа",
+ "translate-page-language": "Язык",
+ "translate-page-limit": "Ліміт",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|повідомлїня|повідомлїня|повідомлїнь}} на сторінку",
+ "translate-submit": "Вказати",
+ "translate-page-navigation-legend": "Навіґація",
+ "translate-page-showing": "Вказаны повідомлїня з $1 аж $2 з $3.",
+ "translate-page-showing-all": "{{PLURAL:$1|Вказане $1 повідомлїня|Вказаны $1 повідомлїня|Вказаных $1 повідомлїнь}}.",
+ "translate-page-showing-none": "Не суть повідомлїня про зображіня.",
+ "translate-next": "Далша сторінка",
+ "translate-prev": "Попередня сторінка",
+ "translate-page-description-legend": "Інформація о ґрупі",
+ "translate-page-description-hasoptional": "Тота ґрупа повідомлїнь обсягує волительны повідомлїня.\nВолительны повідомлня ся мають перекладати кідь ваш язык мать особливы потребы\nяк нехоснованя павз в текстї або транслітерація властных імен. $1",
+ "translate-page-description-hasoptional-open": "Вказати додатковы повідомлїня",
+ "translate-page-edit": "едітовати",
+ "translate-optional": "(волительне)",
+ "translate-ignored": "(іґнороване)",
+ "translate-edit-title": "Едітовати «$1»",
+ "translate-edit-definition": "Текст повідомлїня",
+ "translate-edit-contribute": "приспіти",
+ "translate-edit-no-information": "''Тото повідомлїня не має документацію. Кідь знаєте, де або як ся повідомлїня хоснує, можете помочі далшым перекладателям так, же придате документацію ку тому повідомлїню.''",
+ "translate-edit-information": "Інформація о повідомлїню ($1)",
+ "translate-edit-warnings": "Упозорнїня на неповный переклад",
+ "translate-edit-tmmatch-source": "Жрідловый текст перекладу: $1",
+ "translate-edit-tmmatch": "$1% згода",
+ "translate-edit-nopermission": "На перекладаня повідомлїнь вам треба права.",
+ "translate-edit-askpermission": "Попросити права",
+ "translate-checks-parameters": "Наслїдуючій {{PLURAL:$2|параметер не є хоснованый|параметры не суть хоснованы}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "Наслїдуючій {{PLURAL:$2|параметер не є дефінованый|параметры не суть дефінованы}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "Наслїдуючій {{PLURAL:$2|тіп затворок не є правилно спарованый|тіпы затворок не суть правилно спарованы}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "Наступный {{PLURAL:$2|одказ є проблематічный|одказы суть проблематічны}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Наступный одказ|Наступны $2 одказы|Наступных $2 одказів}} хыбує:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Оріґінал хоснує <nowiki>{{PLURAL:}}</nowiki>, але переклад нїт.",
+ "translate-checks-pagename": "Проти дефініції ся змінив простор назв",
+ "translate-checks-format": "Тот переклад не одповідать дефініції або має неправилну сінтаксіс: $1",
+ "translate-checks-escape": "Наступны escape послїдовности можуть быти непланованы: <strong>$1</strong>",
+ "translate-checks-parametersnotequal": "Чісло параметрів {{PLURAL:$1|$1}};мало бы быти {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> мать неправилный формат.",
+ "translate-checks-fudforum-syntax": "У тім проєктї мусите намісто <nowiki>$2</nowiki> хосновати <nowiki>$1</nowiki>.",
+ "translate-pref-editassistlang": "Помічны языкы:",
+ "prefs-translate": "Наставлїня перекладу",
+ "translate-pref-editassistlang-help": "Список кодів языків оддїленый комами.\nПереклады зволеного повідомлїня до тых языків суть зображены в часї перекладаня.\nІмпліцітный список (''default'') залежыть од вашого языка.",
+ "translate-pref-editassistlang-bad": "Список обсягує неправилный код языка:\n<nowiki>$1</nowiki>",
+ "right-translate": "Едітованя перекладів за помочі інтерфейсу перекладу",
+ "right-translate-manage": "Адміністрація ґруп повідомлїнь",
+ "action-translate-manage": "Справовати ґрупы повідомлїнь",
+ "right-translate-import": "Імпорт офлайн перекладів",
+ "action-translate-import": "імпорт офлайновый перекладів",
+ "right-translate-messagereview": "Шацованя перекладів",
+ "right-translate-groupreview": "Змінити стан обробкы ґруп повідомлїнь",
+ "translate-rc-translation-filter": "Філтер перекладів:",
+ "translate-rc-translation-filter-no": "Нияк не філтровати",
+ "translate-rc-translation-filter-only": "Вказати лем переклады",
+ "translate-rc-translation-filter-filter": "Не указовати переклады",
+ "translate-rc-translation-filter-site": "Лем зміны тутешнїх місцёвых повідомлїнь",
+ "translationstats": "Штатістіка перекладів",
+ "translate-stats-edits": "Едітованя",
+ "translate-stats-users": "Перекладателї",
+ "translate-stats-registrations": "Реґістрації",
+ "translate-stats-reviews": "Шацованя",
+ "translate-stats-reviewers": "Рецензенты",
+ "translate-statsf-intro": "За помочі того формуларя можете творити просты штатістікы. Вшыткы годноты мають верьхню і спідню меджу.",
+ "translate-statsf-options": "Параметры графу",
+ "translate-statsf-width": "Шырина в пікселах:",
+ "translate-statsf-height": "Вышка в пікселах:",
+ "translate-statsf-days": "Часовый інтервал в днях:",
+ "translate-statsf-start": "Початковый датум:",
+ "translate-statsf-scale": "Ступінь детайлізації:",
+ "translate-statsf-scale-months": "Місяцї",
+ "translate-statsf-scale-weeks": "Тыжднї",
+ "translate-statsf-scale-days": "Днї",
+ "translate-statsf-scale-hours": "Годины",
+ "translate-statsf-count": "Міра:",
+ "translate-statsf-count-edits": "Почет едітовань:",
+ "translate-statsf-count-users": "Актівны перекладателї",
+ "translate-statsf-count-registrations": "Новы хоснователї",
+ "translate-statsf-count-reviews": "Шацованя перекладів",
+ "translate-statsf-count-reviewers": "Рецензенты",
+ "translate-statsf-language": "Список кодів языка, роздїленых комами:",
+ "translate-statsf-group": "Список кодів ґрупы языків, роздїленых комами:",
+ "translate-statsf-submit": "Нагляд",
+ "translate-tag-page-desc": "Переклад вікі сторінкы [[$2|$1]].",
+ "translate-sidebar-alltrans": "Іншыма языками",
+ "translations": "Вшыткы переклады",
+ "translations-summary": "Вшыткы доступны переклады зобразите по задану назвы повідомлїня.",
+ "translate-translations-no-message": "Не годен перекласти „$1“",
+ "translate-translations-none": "Не екзістують жадны переклады повідомлїня „$1“",
+ "translate-translations-count": "{{PLURAL:$1|Найдженый єден переклад|Найджены $1 переклады|Найдженых $1 перекладів}}.",
+ "translate-translations-fieldset-title": "Повідомлїня",
+ "translate-translations-messagename": "Назва:",
+ "translate-translations-project": "Проєкт:",
+ "translate-translations-including-no-param": "У параметрї мусите становити правилну назву повідомлїня",
+ "translate-translations-history-short": "і",
+ "languagestats": "Штатістіка языків",
+ "languagestats-summary": "Тота сторінка обсягує штатістіку перекладів вшыткы ґруп повідомлїнь в данім языку.",
+ "languagestats-stats-for": "Штатістіка перекладів про $1 ($2).",
+ "languagestats-recenttranslations": "найновшы переклады",
+ "translate-langstats-incomplete": "Дакотры штатістікы на тій сторінцї не суть цїлы. Просиме, обновте сторінку жебы здобыти бівше штатістік.",
+ "translate-langstats-expand": "розгорнути",
+ "translate-langstats-collapse": "згорнути",
+ "translate-langstats-expandall": "розгорнути вшытко",
+ "translate-langstats-collapseall": "згорнути вшытко",
+ "translate-language-code": "Код языка",
+ "translate-language-code-field-name": "Код языка:",
+ "translate-suppress-complete": "Не выписовати цалком перекладены ґрупы повідомлїнь",
+ "translate-ls-noempty": "Сховати цїлком непереложены ґрупы повідомлїнь",
+ "translate-language": "Язык",
+ "translate-total": "Повідомлїня",
+ "translate-untranslated": "Непереложены",
+ "translate-percentage-complete": "Готово",
+ "translate-percentage-fuzzy": "Застарілы",
+ "translate-languagestats-overall": "Вшыткы ґруп повідомлїнь довєдна",
+ "translate-ls-submit": "Вказати штатістікы",
+ "translate-ls-column-group": "Ґрупа повідомлїнь",
+ "translate-mgs-pagename": "Штатістіка ґруп повідомлїнь",
+ "translate-mgs-fieldset": "Параметры зображіня",
+ "translate-mgs-group": "Ґрупа повідомлїнь:",
+ "translate-mgs-nocomplete": "Не вказовати языкы із завершеным перекладом",
+ "translate-mgs-noempty": "Не вказовати языкы, якы не мають жадного перекладу",
+ "translate-mgs-submit": "Вказати штатістікы",
+ "translate-mgs-column-language": "Язык",
+ "translate-mgs-totals": "Вшыткы языкы довєдна",
+ "supportedlanguages": "Підпорованы языкы",
+ "supportedlanguages-summary": "На тій сторінцї ся находить список вшыткых языків підпорованых на {{grammar:6sg|{{SITENAME}}}} вєдно з іменамі перекладателїв, котры на языку роблять.\nВеце інформацій ку каждому языку можете здобыти на языковім порталї, на котрый ся дістанете, кідь кликнете на тот язык.\nКликнутём на імя перекладателя ся дістанете на сторінку хоснователя.\n\nКідь ту даякый язык не є, можете собі прочітати мануал про основаня локалізачного проєкту на сторінцї „[[Translating:Process|Новый язык]]“.\n\nКідь даякый язык перекладате, а ваше імя ту не є уведжене, додайте ся до списку перекладателїв на одповідаючім [[:Category:Languages|языковім порталї]].\nОдказ на портал вашого преферованого языка найдете в меню.",
+ "supportedlanguages-translators": "{{PLURAL:$2|Перекладатель|Перекладателї}}: $1",
+ "supportedlanguages-recenttranslations": "найновшы переклады",
+ "translate-jssti-add": "Придати до списку",
+ "translate-manage-import-diff": "Повідомлїня $1 | Дїї: $2",
+ "translate-manage-import-new": "Нове повідомлїня $1",
+ "translate-manage-action-import": "Імпортовати",
+ "translate-manage-action-conflict": "Імпортовати і позначіти як неперевірене",
+ "translate-manage-action-ignore": "Іґноровати",
+ "translate-manage-import-ignore": "Перескочіти повідомлїня $1.",
+ "translate-manage-submit": "Выконати",
+ "translate-manage-import-done": "Вшытко зроблено!",
+ "importtranslations": "Імпортовати переклады",
+ "translate-import-load": "Награти файл",
+ "translate-gs-pos": "Поз.",
+ "translate-gs-code": "Код",
+ "translate-gs-continent": "Частина світу",
+ "translate-gs-speakers": "Говорців",
+ "translate-gs-score": "Оцінка",
+ "translate-gs-multiple": "По веце",
+ "translate-gs-count": "Рахунок",
+ "translate-gs-total": "Цілком",
+ "translate-gs-avgscore": "Сер. оцінка",
+ "translate-documentation-language": "Документація уповісток",
+ "translate-searchprofile": "Переклады"
+}
diff --git a/Translate/i18n/core/rw.json b/Translate/i18n/core/rw.json
new file mode 100644
index 00000000..d0c73723
--- /dev/null
+++ b/Translate/i18n/core/rw.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "RebecaRwanda"
+ ]
+ },
+ "translate-documentation-language": "Inkuru irambuye"
+}
diff --git a/Translate/i18n/core/ryu.json b/Translate/i18n/core/ryu.json
new file mode 100644
index 00000000..a3a7cfc5
--- /dev/null
+++ b/Translate/i18n/core/ryu.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "ChoiChong"
+ ]
+ },
+ "translate-documentation-language": "メッセージにちいてぃぬ説明文"
+}
diff --git a/Translate/i18n/core/sa.json b/Translate/i18n/core/sa.json
new file mode 100644
index 00000000..9e6776b2
--- /dev/null
+++ b/Translate/i18n/core/sa.json
@@ -0,0 +1,96 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ansumang",
+ "NehalDaveND"
+ ]
+ },
+ "translate": "अनूद्यताम्",
+ "translate-taction-translate": "अनूद्यताम्",
+ "translate-taction-lstats": "भाषासाङ्ख्यिकी",
+ "translate-taction-export": "निर्यातः",
+ "translate-page-settings-legend": "अभिविन्यासाः",
+ "translate-page-group": "दलम्",
+ "translate-page-language": "भाषा",
+ "translate-page-navigation-legend": "सञ्चरणम्",
+ "translate-next": "अग्रिमं पृष्ठम्",
+ "translate-prev": "पूर्वतनं पृष्ठम्",
+ "translate-page-description-legend": "दलविषयकं विवरणम्",
+ "translate-page-edit": "सम्पाद्यताम्",
+ "translate-optional": "(ऐच्छिकम्)",
+ "translate-ignored": "(अवगणितम्)",
+ "translate-edit-title": "सम्पाद्यताम् \"$1\"",
+ "translate-edit-contribute": "योगदानम्",
+ "translate-edit-tmmatch": "$1% समानम्",
+ "translate-stats-edits": "सम्पाद्यताम्",
+ "translate-stats-users": "अनुवादकाः",
+ "translate-statsf-scale-months": "मासः",
+ "translate-statsf-scale-weeks": "सप्ताहम्",
+ "translate-statsf-scale-days": "दिनानि",
+ "translate-statsf-scale-hours": "घण्टा",
+ "translate-statsf-count-registrations": "नवीनयोजकाः",
+ "translate-statsf-submit": "प्राग्दृश्यम् दर्श्यताम्",
+ "translations": "सर्वे अनुवादाः",
+ "translate-translations-fieldset-title": "संदेश",
+ "translate-translations-messagename": "नाम :",
+ "translate-translations-project": "प्रकल्पम्:",
+ "translate-translations-history-short": "h",
+ "languagestats": "भाषासाङ्ख्यिकी",
+ "languagestats-recenttranslations": "अधुना जाताः अनुवादाः",
+ "translate-langstats-expand": "विस्तीर्यताम्",
+ "translate-langstats-collapse": "सङ्कुच्यताम्",
+ "translate-langstats-expandall": "सर्वं विस्तीर्यताम्",
+ "translate-langstats-collapseall": "सर्वं सङ्कुच्यताम्",
+ "translate-language-code": "भाषाकूटः",
+ "translate-language-code-field-name": "भाषाकूटः",
+ "translate-language": "भाषा",
+ "translate-total": "सन्देशाः",
+ "translate-percentage-fuzzy": "कालग्रस्ताः",
+ "translate-ls-submit": "साङ्ख्यिकी दृश्यताम्",
+ "translate-ls-column-group": "सन्देशसमूहः",
+ "translate-mgs-pagename": "सन्देशसमूहस्य साङ्ख्यिकी",
+ "translate-mgs-fieldset": "सन्दर्भाः दर्श्यन्ताम्",
+ "translate-mgs-group": "सन्देशसमूहः :",
+ "translate-mgs-submit": "साङ्ख्यिकी दृश्यताम्",
+ "translate-mgs-column-language": "भाषा",
+ "translate-jssti-add": "सूच्यां योज्यताम्",
+ "translate-manage-action-import": "आयातं करोतु",
+ "translate-manage-action-ignore": "अवगण्यताम्",
+ "translate-import-load": "सञ्चिका आरोप्यताम्",
+ "translate-gs-code": "कूटः",
+ "translate-gs-continent": "अन्तर्विषयाः",
+ "translate-gs-speakers": "वक्तारः",
+ "translate-gs-multiple": "एकाधिकम्",
+ "translate-gs-total": "योगः",
+ "translate-documentation-language": "सन्देशप्रलेखनम्",
+ "translate-workflow-set-doing": "अभिविन्यासः...",
+ "translate-dynagroup-recent-label": "अधुना जाताः अनुवादाः",
+ "translate-msggroupselector-search-all": "सर्वम्",
+ "translate-msggroupselector-search-recent": "सद्यस्कम्",
+ "tux-languageselector": "अनूद्यताम्",
+ "tux-tab-all": "सर्वम्",
+ "tux-tab-untranslated": "अननुदितम्",
+ "tux-tab-outdated": "कालग्रस्ताः",
+ "tux-tab-translated": "अनुदितम्",
+ "tux-edit": "सम्पाद्यताम्",
+ "tux-status-optional": "ऐच्छिकम्",
+ "tux-status-fuzzy": "कालग्रस्ताः",
+ "tux-status-translated": "अनुदितम्",
+ "tux-status-saving": "रक्षति...",
+ "tux-status-unsaved": "अरक्षितम्",
+ "tux-editor-cancel-button-label": "निरस्यताम्",
+ "tux-notices-hide": "गोप्यताम्",
+ "tux-editor-message-desc-more": "अधिकं दृश्यताम्",
+ "tux-editor-translate-mode": "सूची",
+ "tux-proofread-edit-label": "सम्पाद्यताम्",
+ "tux-editor-page-mode": "पृष्ठम्",
+ "tux-editor-doc-editor-cancel": "निरस्यताम्",
+ "tux-empty-list-translated-action": "अनूद्यताम्",
+ "tux-editor-close-tooltip": "पिदधातु",
+ "tux-editor-expand-tooltip": "विस्तीर्यताम्",
+ "tux-editor-collapse-tooltip": "सङ्कुच्यताम्",
+ "tux-editor-message-tools-history": "इतिहासः",
+ "tux-editor-message-tools-delete": "अपाक्रियताम्",
+ "tux-editor-message-tools-translations": "सर्वे अनुवादाः",
+ "tux-editor-loading": "आरोपयति..."
+}
diff --git a/Translate/i18n/core/sah.json b/Translate/i18n/core/sah.json
new file mode 100644
index 00000000..050d85fc
--- /dev/null
+++ b/Translate/i18n/core/sah.json
@@ -0,0 +1,172 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "Bert Jickty",
+ "HalanTul",
+ "Туллук"
+ ]
+ },
+ "translate": "Тылбаас",
+ "translate-desc": "MediaWiki движогу уонна атын бырагырааммалары тылбаастыырга [[Special:Translate|аналлаах сирэй]]",
+ "translate-taskui-export-to-file": "Бэйэтин формаатынан экспортаа",
+ "translate-taskui-export-as-po": "Ситимнэммэккэ тылбаастыырга анаан экспортааһын",
+ "translate-taction-translate": "Тылбаас",
+ "translate-taction-proofread": "Ааҕыы",
+ "translate-taction-lstats": "Тыл ыстатыыстыката",
+ "translate-taction-mstats": "Бөлөхтөрүнэн ыстатыыстыка",
+ "translate-taction-export": "Экспорт",
+ "translate-taction-disabled": "Бу биикигэ маннык дьайыы араарыллыбыт эбит.",
+ "translate-page-no-such-language": "Тыл куода сыыһа суруллубут",
+ "translate-page-no-such-group": "Бөлөх сыыһа ыйыллыбыт.",
+ "translate-page-disabled": "Бу салааҕа бэйэтин тылыгар тылбаастар араарыллыбыттар. Төрүөтэ:\n\n<em>$1</em>",
+ "translate-language-disabled": "Бу тылга тылбаастааһын арахса сылдьар.",
+ "translate-page-settings-legend": "Туруоруулар",
+ "translate-page-group": "Бөлөх",
+ "translate-page-language": "Тыла",
+ "translate-page-limit": "Хааччах",
+ "translate-page-limit-option": "{{PLURAL:$1|Соҕотох этиини|$1 этиини}} биир сирэйгэ таһаар",
+ "translate-submit": "Тал",
+ "translate-page-navigation-legend": "Навигация",
+ "translate-page-showing": "Барыта $3 этииттэн $1 - $2 нүөмэрдээх этиилэр көрдөрүлүннүлэр.",
+ "translate-page-showing-all": "$1 этии таһаарыллыбыт.",
+ "translate-page-showing-none": "Көрдөрүллэр этии суох.",
+ "translate-next": "Аныгыскы сирэй",
+ "translate-prev": "Иннинээҕи сирэй",
+ "translate-page-description-legend": "Бөлөх туһунан",
+ "translate-page-description-hasoptional": "Бу эбии этиилэр бөлөхтөрө.\nЭбии этиилэр тылбаастамматтар. Арай тылыҥ улахан уратылаах буоллаҕына тылбаастаныан сөп, холобур, тыллар ыккардыларыгар арыт суох буоллаҕына эбэтэр ааттары транслитерациялыырга. $1",
+ "translate-page-description-hasoptional-open": "Эбии этиилэри көрдөр.",
+ "translate-page-edit": "Уларыт",
+ "translate-optional": "(булгуччута суох)",
+ "translate-ignored": "(ааххайыллыбат)",
+ "translate-edit-title": "\"$1\" уларытыы",
+ "translate-edit-definition": "Этии ис хоһооно, суолтата",
+ "translate-edit-contribute": "уларытыыны киллэр",
+ "translate-edit-no-information": "''Бу этии туһунан туох да суох. Ханна, хаһан бу этии туттулларын билэр буоллаххына, атын тылбаасчыттарга көмөлөһөн, ол туһунан суруйуоххун сөп.''",
+ "translate-edit-information": "Бу туһунан ($1)",
+ "translate-edit-warnings": "Ситэтэ суох тылбаас туһунан сэрэтии",
+ "translate-edit-tmmatch-source": "Тылбаастаныахтаах этии: $1",
+ "translate-edit-tmmatch": "$1% сөп түбэһэр",
+ "translate-edit-nopermission": "Тылбаастыыргар көҥүл ылыахтааххын.",
+ "translate-edit-askpermission": "Көҥүллэ көрдөө",
+ "translate-checks-parameters": "{{PLURAL:$2|Биир туруоруу туттуллубатах|Бу туруоруулар туттуллубатахтар}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Биллибэт туруоруу (параметр)|Биллибэт туруоруулар (параметрдар)}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "Сабар дуу аһар дуу {{PLURAL:$2|ускуопка тиийбэт|ускуопкалар тиийбэттэр}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Бу сигэ сыыһалаах|Бу сигэлэр сыыһалаахтар}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "Бу {{PLURAL:$2|сигэ|$2 сигэ}} суох:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Оригинал <nowiki>{{PLURAL:}}</nowiki> туттар, оттон тылбааһа — туттубат.",
+ "translate-checks-plural-dupe": "Манна <nowiki>{{PLURAL:}}</nowiki> тыл икки тэҥ формата туттуллубут. <nowiki>{{PLURAL:$1|сон|сон}}</nowiki> оннугар <nowiki>{{PLURAL:$1|сон}}</nowiki> диэн суруйар ордук.",
+ "translate-checks-pagename": "Аат далын быһаарыыта уларыйбыт",
+ "translate-checks-format": "Тылбаас өйдөбүлүгэр сөп түбэспэт эбэтэр синтаксыгар сыыһалаах: $1",
+ "translate-checks-parametersnotequal": "Парааметрдарын ахсаана — $1, дьиҥэ $2 буолуохтаах.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> алҕастаах.",
+ "translate-checks-fudforum-syntax": "Бу бырайыакка <nowiki>$2</nowiki> оннугар маны туһан: <nowiki>$1</nowiki>.",
+ "translate-pref-editassistlang": "Көмө тыллар:",
+ "prefs-translate": "Тылбаас туруоруулара",
+ "translate-pref-editassistlang-help": "Соппутуойунан араарыллыбыт тыллар куодтарын тиһигэ.\nБу тыллар тылбаастара тылбаастыыргар көстүөхтэрэ.\nТуспа этиллибэтэҕинэ тахсар тыллар тиһиктэрэ тылтан тутулуктаах.",
+ "translate-pref-editassistlang-bad": "Тиһиккэ сыыһа куодтаах тыл:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Тылбаас интерфейсын туһанар уларытыы",
+ "right-translate-manage": "этиилэри бөлөҕүнэн уларытыы",
+ "action-translate-manage": "этиилэри бөлөҕүнэн салайыы",
+ "right-translate-import": "Офф-лайн оҥоһуллубут тылбаастары киллэрии",
+ "action-translate-import": "офф-лайн тылбаастаммыты киллэрии",
+ "right-translate-messagereview": "Тылбаастары тургутуу",
+ "translate-rc-translation-filter": "Тылбаастары сиидэлээ:",
+ "translate-rc-translation-filter-no": "Хааччаҕа суох",
+ "translate-rc-translation-filter-only": "Тылбаастары эрэ көрдөр",
+ "translate-rc-translation-filter-filter": "Тылбаастары көрдөрүмэ",
+ "translate-rc-translation-filter-site": "Ситим-сир сүрүн эрэ биллэриилэрин",
+ "translationstats": "Тылбаас ыстатыыстыката",
+ "translate-stats-edits": "Уларытыылар",
+ "translate-stats-users": "Тылбаасчыттар",
+ "translate-stats-registrations": "Бэлиэтэнии",
+ "translate-stats-reviews": "Тургутуу",
+ "translate-stats-reviewers": "Этэн биэриилэр",
+ "translate-statsf-intro": "Бу форма көмөтүнэн табыгастаах графигы оҥоруохха сөп.\nБары көрдөрүүлэргэ үөһээ уонна аллараа кыраныыссаларын этиэххэ сөп.",
+ "translate-statsf-options": "График туруоруулара",
+ "translate-statsf-width": "Кэтитэ пииксэлинэн:",
+ "translate-statsf-height": "Үрдүгэ пииксэлинэн:",
+ "translate-statsf-days": "Болдьоҕо күн ахсаанынан:",
+ "translate-statsf-start": "Саҕаламмыт күнэ-дьыла:",
+ "translate-statsf-scale": "Чопчулааһына:",
+ "translate-statsf-scale-months": "Ыйдар",
+ "translate-statsf-scale-weeks": "Нэдиэлэлэр",
+ "translate-statsf-scale-days": "Хонуктар",
+ "translate-statsf-scale-hours": "Чаас",
+ "translate-statsf-count": "Кээмэйэ:",
+ "translate-statsf-count-edits": "Көннөрүү ахсаана",
+ "translate-statsf-count-users": "Көхтөөх тылбаасчыттар",
+ "translate-statsf-count-registrations": "Саҥа кыттааччылар",
+ "translate-statsf-count-reviews": "Тылбааһы тургутааччылар",
+ "translate-statsf-count-reviewers": "Рецензеннэр",
+ "translate-statsf-language": "Соппутуойунан арахсыбыт тыллар куодтарын тиһигэ:",
+ "translate-statsf-group": "Соппутуойунан арахсыбыт бөлөхтөр куодтарын тиһигэ:",
+ "translate-statsf-submit": "Бигэргэтиэх иннинэ көрүү",
+ "translate-tag-page-desc": "Биики-сирэй тылбааһа [[$2|$1]].",
+ "translate-sidebar-alltrans": "Атын тылларынан",
+ "translations": "Бары тылбаастар",
+ "translations-summary": "Этии аатын киллэрдэххинэ тылбаастара тахсан кэлиэхтэрэ.",
+ "translate-translations-no-message": "\"$1\" тылбаастанар кыахтаах этии буолбатах",
+ "translate-translations-none": "\"$1\" тылбаастара суох эбит",
+ "translate-translations-count": "{{PLURAL:$1|Биир тылбаас|$1 тылбаас}} көһүннэ.",
+ "translate-translations-fieldset-title": "Этии",
+ "translate-translations-messagename": "Аат:",
+ "translate-translations-project": "Бырайыак:",
+ "translate-translations-history-short": "уст",
+ "languagestats": "Тыл ыстатыыстыката",
+ "languagestats-summary": "Манна бу тылга аналлаах тылбаастанар бөлөхтөр ыстатыыстыкалара көстөр",
+ "languagestats-stats-for": "Тылбаас ыстатыыстыката $1 ($2).",
+ "languagestats-recenttranslations": "соторутааҥы тылбаастар",
+ "translate-langstats-incomplete": "Сорох дааннайдар ситэтэ суохтар эбит. Толору дааннайдары ыларга бу сирэйи хос хачайдаа.",
+ "translate-langstats-expand": "тэнит",
+ "translate-langstats-collapse": "сап",
+ "translate-langstats-expandall": "барытын тэнит",
+ "translate-langstats-collapseall": "барытын суулаа",
+ "translate-language-code": "Тыл куода",
+ "translate-language-code-field-name": "Тыл куода:",
+ "translate-suppress-complete": "Толору тылбаастаммыт этиилээх бөлөҕү көрдөрүмэ",
+ "translate-ls-noempty": "Толору тылбаастамматах этиилээх бөлөҕү көрдөрүмэ",
+ "translate-language": "Ханнык тылынан:",
+ "translate-total": "Этии",
+ "translate-untranslated": "Тылбаастамматах биирдэмнэр ахсааннара",
+ "translate-percentage-complete": "Толоруллубут",
+ "translate-percentage-fuzzy": "Эргэрбит",
+ "translate-languagestats-overall": "Бары бөлөхтөр этиилэрэ",
+ "translate-ls-submit": "Статистиканы көрдөр",
+ "translate-ls-column-group": "Этиилэр бөлөхтөрүнэн",
+ "translate-mgs-pagename": "Этиилэр бөлөхтөрүн статистиката",
+ "translate-mgs-fieldset": "Туруорууларын көрдөр",
+ "translate-mgs-group": "Этиилэр бөлөхтөрө:",
+ "translate-mgs-nocomplete": "Толору тылбаастаммыт тыллары көрдөрүмэ",
+ "translate-mgs-noempty": "Тылбааһа саҕаламматах тыллары көрдөрүмэ",
+ "translate-mgs-submit": "Статистиканы көрдөр",
+ "translate-mgs-column-language": "Тыла",
+ "translate-mgs-totals": "Бары тыллар",
+ "translate-mgs-invalid-group": "$1 диэн ааттаах бөлөх суох эбит.",
+ "translate-mgs-nothing": "Көрдөрүллэр дааннай суох.",
+ "supportedlanguages": "Өйүүр тыллара",
+ "supportedlanguages-summary": "Манна {{SITENAME}} өйүүр тыллара уонна тылбаасчыттар ааттара көстөр. Тылбаасчыт төһөнөн элбэхтик үлэлээбит да, оччонон аата бөдөҥ бичигинэн суруллар. Алларанан тардыытын өҥө тылбаасчыт бүтэһигин хаһан үлэлээбитин көрдөрөр.",
+ "supportedlanguages-colorlegend": "Өҥүн суолтата: Тиһэх көннөрүүнү $1 күн ынараа өттүгэр оҥорбут.",
+ "supportedlanguages-translators": "{{PLURAL:$2|Тылбаасчыт|Тылбаасчыттар}}: $1",
+ "supportedlanguages-recenttranslations": "соторутааҥы тылбаастар",
+ "supportedlanguages-count": "Барыта $1 тыл.",
+ "supportedlanguages-activity": "$1: $2 көннөрүү — тиһэх көннөрүү $3 хонук ынараа өттүгэр",
+ "translate-jssti-add": "Тиһиккэ киллэр",
+ "managemessagegroups": "Этиилэр бөлөхтөрүн салайыы",
+ "translate-smg-notallowed": "Бу дьайыыны оҥорор кыаҕыҥ суох эбит.",
+ "translate-smg-nochanges": "Таҥар уларытыы суох.",
+ "translate-smg-submit": "Уларытыылары таҥыыга ыыт",
+ "translate-smg-strong-sync-help": "Көмө",
+ "translate-gs-code": "Куод",
+ "translate-gs-continent": "Континент",
+ "translate-gs-speakers": "Саҥарааччы",
+ "translate-gs-score": "Сыанабыл",
+ "translate-gs-multiple": "Элбэх (хас да)",
+ "translate-gs-count": "Ахсаана",
+ "translate-gs-total": "Барыта",
+ "translate-gs-avgscore": "Ортотунан",
+ "translate-documentation-language": "Биллэрии документацията",
+ "tux-editor-proofreading-hide-own-translations": "Бэйэ тылбааһын көрдөрүмэ",
+ "tux-empty-nothing-new-to-proofread": "Тургутуллуохтаах саҥа тылбаас суох",
+ "tux-editor-message-tools-show-editor": "Вики редакторын көр"
+}
diff --git a/Translate/i18n/core/sat.json b/Translate/i18n/core/sat.json
new file mode 100644
index 00000000..c60b10d3
--- /dev/null
+++ b/Translate/i18n/core/sat.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Albinus",
+ "Amire80",
+ "Manik Soren",
+ "Ramjit Tudu"
+ ]
+ },
+ "translate-documentation-language": "ᱢᱮᱥᱮᱡᱽ ᱰᱚᱠᱩᱢᱮᱱᱴᱟᱥᱚᱱ"
+}
diff --git a/Translate/i18n/core/saz.json b/Translate/i18n/core/saz.json
new file mode 100644
index 00000000..d8d559f9
--- /dev/null
+++ b/Translate/i18n/core/saz.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "MooRePrabu"
+ ]
+ },
+ "translate-statsf-scale-days": "ꢣꢶꢥ꣄ꢥꢸꢥ꣄",
+ "translate-statsf-count-registrations": "ꢥꣁꢮ꣄ꢮꣁ ꢮꢮ꣄ꢬꢸꢥꢵꢬꢸꢥ꣄"
+}
diff --git a/Translate/i18n/core/sc.json b/Translate/i18n/core/sc.json
new file mode 100644
index 00000000..7fcdb488
--- /dev/null
+++ b/Translate/i18n/core/sc.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "L2212",
+ "Taxandru",
+ "Via maxima"
+ ]
+ },
+ "translate": "Tradui",
+ "translate-desc": "[[Special:Translate|Special page]] po tradusi MediaWiki and beyond",
+ "translate-documentation-language": "Documentatzione de su messàgiu"
+}
diff --git a/Translate/i18n/core/scn.json b/Translate/i18n/core/scn.json
new file mode 100644
index 00000000..83469911
--- /dev/null
+++ b/Translate/i18n/core/scn.json
@@ -0,0 +1,145 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ajeje Brazorf",
+ "Aushulz",
+ "Gmelfi",
+ "Sarvaturi"
+ ]
+ },
+ "translate": "Traduci",
+ "translate-extensionname": "Traduci",
+ "translate-taction-translate": "Traduci",
+ "translate-taction-lstats": "Statìstichi dâ lingua",
+ "translate-taction-mstats": "Statìstichi dô gruppu di missaggi",
+ "translate-page-no-such-group": "Lu gruppu spicificatu nun èni vàliddu.",
+ "translate-page-settings-legend": "Mpustazzioni",
+ "translate-page-group": "Gruppu",
+ "translate-page-language": "Lingua",
+ "translate-page-limit": "Lìmiti",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|missaggiu|missaggi}} pi pàggina",
+ "translate-page-showing-all": "{{PLURAL:$1|Ammustratu nu missaggiu|Ammustrati $1 missaggi}}.",
+ "translate-page-showing-none": "Nuddu missaggiu da ammustrari.",
+ "translate-next": "Pàggina appressu",
+ "translate-page-edit": "cancia",
+ "translate-edit-title": "Cancia \"$1\"",
+ "translate-edit-definition": "Difinizzioni dû missaggiu",
+ "translate-edit-contribute": "cuntribbuisci",
+ "translate-edit-information": "Nfurmazzioni supra lu missaggiu ($1)",
+ "translate-export-form-format": "Furmatu",
+ "translate-pref-editassistlang": "Lingui di cunfruntu:",
+ "translate-rcfilters-translations": "Traduzzioni",
+ "translate-rcfilters-translations-only-label": "Traduzzioni",
+ "translate-rcfilters-translations-only-desc": "Canciamenti ê pàggini tradutti.",
+ "translate-rcfilters-translations-filter-label": "Nun traduzzioni",
+ "translate-rcfilters-translations-filter-desc": "Tutti li canciamenti ca nun sugnu traduzzioni.",
+ "translate-rc-translation-filter": "Filtra li traduzzioni:",
+ "translate-rc-translation-filter-no": "Nun fari nenti",
+ "translate-rc-translation-filter-only": "Ammustra sulu li traduzzioni",
+ "translate-rc-translation-filter-filter": "Elìmina li traduzzioni",
+ "translate-rc-translation-filter-site": "Sulu li canciamenti ê missaggi dô situ",
+ "translationstats": "Statìstichi di traduzzioni",
+ "translate-stats-edits": "Canciamenti",
+ "translate-stats-users": "Traduttura",
+ "translate-statsf-scale-years": "Anni",
+ "translate-statsf-scale-months": "Misi",
+ "translate-statsf-scale-weeks": "Simani",
+ "translate-statsf-scale-days": "Jorna",
+ "translate-statsf-scale-hours": "Uri",
+ "translate-statsf-count-edits": "Nùmmiru di canciamenti",
+ "translate-statsf-count-users": "Traduttura attivi",
+ "translate-statsf-count-registrations": "Utenti novi",
+ "translate-statsf-submit": "Antiprima",
+ "translate-sidebar-alltrans": "Nti àutri lìngui",
+ "translations": "Tutti li traduzzioni",
+ "translate-translations-count": "{{PLURAL:$1|Una traduzzioni attruvata|$1 traduzzioni attruvati}}.",
+ "translate-translations-fieldset-title": "Missaggiu",
+ "translate-translations-messagename": "Nomu:",
+ "translate-translations-project": "Pruggettu:",
+ "translate-translations-history-short": "c",
+ "languagestats": "Statìstichi dâ lingua",
+ "languagestats-stats-for": "Statìstichi dê traduzzioni pi $1 ($2).",
+ "languagestats-recenttranslations": "ùrtimi traduzzioni",
+ "translate-language-code": "Còdici dâ lingua",
+ "translate-language-code-field-name": "Còdici dâ lingua:",
+ "translate-language": "Lingua",
+ "translate-total": "Missaggi",
+ "translate-languagestats-overall": "Tutti li gruppi di missaggi nzèmmula",
+ "translate-ls-submit": "Ammustra li statìstichi",
+ "translate-ls-column-group": "Gruppu di missaggi",
+ "translate-mgs-pagename": "Statìstichi dô gruppu di missaggi",
+ "translate-mgs-fieldset": "Ammustra li prifirenzi",
+ "translate-mgs-group": "Gruppu di missaggi:",
+ "translate-mgs-submit": "Ammustra stastìstichi",
+ "translate-mgs-column-language": "Lingua",
+ "translate-mgs-totals": "{{PLURAL:$1|Tutta la lingua|Tutti li lingui}} nzèmmula",
+ "supportedlanguages": "Lingui attivi",
+ "supportedlanguages-colorlegend": "Legenda dî culura: ùrtima traduzzioni $1 jorna fa.",
+ "supportedlanguages-recenttranslations": "ùrtimi traduzzioni",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|lingua|lingui}} n tutali.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|canciamentu|canciamenti}} - ùrtimu canciamentu $3 {{PLURAL:$3|jornu|jorna}} fa",
+ "translate-jssti-add": "Agghiunci a l'elencu",
+ "translate-smg-left": "Cuntinutu dû missaggiu ntû wiki",
+ "translate-smg-rename-cancel": "Annulla",
+ "translate-smg-rename-new": "Agghiunci comu novu...",
+ "translate-smg-strong-sync-help": "Aiutu",
+ "translate-smg-group-with-error-summary": "$1 {{PLURAL:$1|missaggiu|missaggi}} cu errori:",
+ "translate-smg-group-message-action-history": "Crunuluggìa",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|Etichetta|Etichetti}}:",
+ "translate-smg-group-message-message-content": "Cuntinutu:",
+ "translate-smg-group-message-message-other-langs": "Àutri lingui:",
+ "translate-manage-import-diff": "Missaggiu $1 | Azzioni:$2",
+ "translate-manage-import-new": "Missaggiu novu $1",
+ "translate-manage-import-deleted": "Cancillatu missaggiu $1",
+ "translate-manage-action-import": "Mporta",
+ "translate-manage-empty-content": "Lu cuntinutu è vacanti",
+ "translate-import-load": "Càrrica lu file",
+ "translate-gs-code": "Còdici",
+ "translate-gs-continent": "Cuntinenti",
+ "translate-gs-total": "Tutali",
+ "translate-documentation-language": "Ducumintazzioni dû missaggiu",
+ "translate-searchprofile": "Traduzzioni",
+ "translate-workflowstatus": "Statu: $1",
+ "translate-stats-workflow": "Statu",
+ "translate-dynagroup-recent-label": "Ùrtimi traduzzioni",
+ "translate-dynagroup-additions-desc": "Stu gruppu ammustra li missaggi novi o canciati.",
+ "translate-msggroupselector-projects": "Gruppu di missaggi",
+ "translate-msggroupselector-search-all": "Tutti",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|suttagruppu|suttagruppi}}",
+ "tux-languageselector": "Traduci n",
+ "tux-tab-all": "Tutti",
+ "tux-edit": "Cancia",
+ "tux-status-translated": "Traduciutu",
+ "tux-editor-placeholder-documentation": "Agghiunci na ducumintazzioni dû missaggiu",
+ "tux-editor-placeholder-language": "La tò traduzzioni n $1",
+ "tux-editor-cancel-button-label": "Annulla",
+ "tux-editor-confirm-button-label": "Cunferma traduzzioni",
+ "tux-editor-edit-desc": "Cancia ducumintazzioni",
+ "tux-editor-add-desc": "Agghiunci ducumintazzioni",
+ "tux-editor-in-other-languages": "N àutri lingui",
+ "tux-notices-hide": "ammuccia",
+ "tux-editor-message-desc-more": "Ammustra àutri",
+ "tux-editor-clear-translated": "Ammuccia traduciuti",
+ "tux-editor-proofreading-hide-own-translations": "Ammuccia li tò traduzzioni",
+ "tux-editor-proofreading-show-own-translations": "Ammustra li tò traduzzioni",
+ "tux-proofread-edit-label": "Cancia",
+ "tux-editor-page-mode": "Pàggina",
+ "tux-editor-outdated-notice-diff-link": "Ammustra li diffirenzi",
+ "tux-editor-doc-editor-placeholder": "Ducumintazzioni dû missaggiu",
+ "tux-editor-doc-editor-cancel": "Annulla",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|àutru missaggiu|àutri missaggi}}",
+ "tux-empty-list-all": "Stu gruppu di missaggiu è vacanti",
+ "tux-empty-list-translated": "Nuddu missaggiu traduciutu",
+ "tux-empty-list-translated-action": "Traduci",
+ "tux-empty-list-other": "Nenti da tradùciri",
+ "tux-empty-list-other-link": "Ammustra tutti li missaggi",
+ "tux-editor-close-tooltip": "Chiudi",
+ "tux-editor-message-tools-history": "Crunuluggìa",
+ "tux-editor-message-tools-delete": "Cancella",
+ "tux-editor-message-tools-translations": "Tutti li traduzzioni",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|àutra lingua|àutri lingua}}",
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|àutru grupp|àutri gruppa}}",
+ "specialpages-group-translation": "Traduzzioni",
+ "translate-messagebundle-error-key-too-long": "La chiavi \"$1\" è troppo lonca",
+ "translate-messagebundle-error-empty-value": "La chiavi \"$1\" nun havi nu valuri"
+}
diff --git a/Translate/i18n/core/sco.json b/Translate/i18n/core/sco.json
new file mode 100644
index 00000000..661dfa90
--- /dev/null
+++ b/Translate/i18n/core/sco.json
@@ -0,0 +1,273 @@
+{
+ "@metadata": {
+ "authors": [
+ "AmaryllisGardener",
+ "John Reid"
+ ]
+ },
+ "translate": "Owerset",
+ "translate-desc": "[[Special:Translate|Byordiair page]] fer owersetin MediaWiki n ayont",
+ "translate-taskui-export-to-file": "Export in nateeve format",
+ "translate-taskui-export-as-po": "Export fer aff-line owersetin",
+ "translate-taction-translate": "Owerset",
+ "translate-taction-proofread": "Leuk ower",
+ "translate-taction-lstats": "Leid stateestics",
+ "translate-taction-mstats": "Message groop stateestics",
+ "translate-taction-disabled": "This action is disabled oan this wiki.",
+ "translate-page-no-such-language": "Speceefied leid wis onvalit.",
+ "translate-page-no-such-group": "Speceefied groop wis onvalit.",
+ "translate-page-disabled": "Owersets intil this leid in this groop hae been disabled.\nRaison:\n\n<em>$1</em>",
+ "translate-language-disabled": "Owersetin intil this lied is disabled.",
+ "translate-page-settings-legend": "Settins",
+ "translate-page-group": "Groop",
+ "translate-page-language": "Leid",
+ "translate-page-limit": "Leemit",
+ "translate-submit": "Get",
+ "translate-page-navigation-legend": "Naveegation",
+ "translate-page-showing": "Shawin messages fae $1 til $2 o $3.",
+ "translate-page-showing-all": "Shawin $1 {{PLURAL:$1|message|messages}}.",
+ "translate-page-showing-none": "Naw messages tae shaw.",
+ "translate-next": "Nex page",
+ "translate-prev": "Preeveeoos page",
+ "translate-page-description-legend": "Information aneat the groop",
+ "translate-page-description-hasoptional": "This message groop contains optional messages.\nOptional messages shid yinlie be owerset whan yer leid haes byordinair needs\nlike na uisin spaces or transliteratin proper names. $1",
+ "translate-page-description-hasoptional-open": "Shaw optional messages",
+ "translate-page-edit": "eedit",
+ "translate-optional": "(aen optie)",
+ "translate-edit-title": "Eedit \"$1\"",
+ "translate-edit-definition": "Message defineetion",
+ "translate-edit-contribute": "contreebute",
+ "translate-edit-no-information": "<em>This message haes naw documentation.\nGif ye ken whaur or hou this message is uised, ye can heelp ither owerseters bi eikin documentation til this message.</em>",
+ "translate-edit-information": "Information aneat message ($1)",
+ "translate-edit-warnings": "Warnishments aneat oncompleate owersets",
+ "translate-edit-tmmatch-source": "Owerset soorce tex: $1",
+ "translate-edit-nopermission": "Ye need owersetin richts tae owerset messages.",
+ "translate-edit-askpermission": "Get permeession",
+ "translate-checks-parameters": "Follaein {{PLURAL:$2|parameter is|parameters ar}} na uised:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "Follaein {{PLURAL:$2|parameter is|parameters ar}} onknawn:\n<strong>$1</strong>",
+ "translate-checks-balance": "Thaur's aen oneven nummer o {{PLURAL:$2|parenthesis|parentheses}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "Follaein {{PLURAL:$2|airtin is|$2 airtins ar}} proablemateec:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "Follaein {{PLURAL:$2|airtin is|$2 airtins ar}} missin:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Defineetion uises <nowiki>{{PLURAL:}}</nowiki> bit the owerset dis na.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> wis gien {{PLURAL:$1|yin form|$1 forms}} bit {{PLURAL:$2|yinlie yin form is|$2 forms ar}} supported (excluidin 0= n 1= forms).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> haes dupleecate forms at the end. <nowiki>{{PLURAL:$1|sheep|sheep}}</nowiki> shid be written aes <nowiki>{{PLURAL:$1|sheep}}</nowiki>.",
+ "translate-checks-pagename": "Namespace chynged fae the defineetion",
+ "translate-checks-format": "This owerset disna follae the defineetion or haes onvalit syntax: $1",
+ "translate-checks-escape": "The follaein escapes micht be accidental: <strong>$1</strong>",
+ "translate-checks-parametersnotequal": "Guidin coont is {{PLURAL:$1|$1}}; shid be {{PLURAL:$2|$2}}.",
+ "translate-checks-fudforum-syntax": "Uise <nowiki>$1</nowiki> instead o <nowiki>$2</nowiki> in this waurk.",
+ "translate-pref-editassistlang": "Assistant leids:",
+ "prefs-translate": "Owersetin opties",
+ "translate-pref-editassistlang-help": "Comma separated leet o lee codes.\nThe owersetin o ae message in thir leids ar shawn whan ye'r owersetin.\nThe defaut leet o leids depends oan yer leid.",
+ "translate-pref-editassistlang-bad": "Onvalit leid code in the leet:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Eedit uisin the owersetin interface",
+ "right-translate-manage": "Manage message groops",
+ "action-translate-manage": "manage message groops",
+ "right-translate-import": "Import affline owersets",
+ "action-translate-import": "import affline owersets",
+ "right-translate-messagereview": "Leuk ower owersets",
+ "right-translate-groupreview": "Chynge wairkflaw state o message groops",
+ "translate-rc-translation-filter": "Filter owersets:",
+ "translate-rc-translation-filter-no": "Dae nawthing",
+ "translate-rc-translation-filter-only": "Shaw owersets yinlie",
+ "translate-rc-translation-filter-filter": "Filter oot owersets",
+ "translate-rc-translation-filter-site": "Chynges til site messages yinlie",
+ "translationstats": "Owersetin stateestics",
+ "translate-stats-edits": "Eedits",
+ "translate-stats-users": "Owerseters",
+ "translate-stats-reviews": "Leuk owers",
+ "translate-stats-reviewers": "Luik ower-fowk",
+ "translate-statsf-intro": "Ye can generate simple stateestics wi this form.\nAw values hae upper n lower limits.",
+ "translate-statsf-options": "Graph opties",
+ "translate-statsf-height": "Heicht in pixels:",
+ "translate-statsf-days": "Time periyd in days:",
+ "translate-statsf-start": "Stairtin date:",
+ "translate-statsf-scale": "Granulairitie:",
+ "translate-statsf-scale-hours": "Hoors",
+ "translate-statsf-count-edits": "Nummer o eedits",
+ "translate-statsf-count-users": "Acteeve owerseters",
+ "translate-statsf-count-registrations": "New uisers",
+ "translate-statsf-count-reviews": "Owerset luikowers",
+ "translate-statsf-count-reviewers": "Luikower-fawk",
+ "translate-statsf-language": "Comma-separatit leet o leid codes:",
+ "translate-statsf-group": "Comma-separatit leet o groop codes:",
+ "translate-statsf-submit": "Luikower",
+ "translate-tag-page-desc": "Owersetin o the wiki page [[$2|$1]] fae $3($4).",
+ "translate-sidebar-alltrans": "In ither leids",
+ "translations": "Aw owersets",
+ "translations-summary": "Enter ae message name ablo tae shaw aw available owersets.",
+ "translate-translations-no-message": "\"$1\" isna aen owersetable message",
+ "translate-translations-none": "Thaur's naw owersets fer \"$1\"",
+ "translate-translations-count": "Fond {{PLURAL:$1|yin owerset|$1 owersets}}.",
+ "translate-translations-project": "Waurk:",
+ "translate-translations-including-no-param": "Please speceefie ae valid message key in the subpage boond",
+ "languagestats": "Leid stateestics",
+ "languagestats-summary": "This page shaws owersetin stateestics fer aw message groops fer ae leid.",
+ "languagestats-stats-for": "Owersetin stateestics fer $1 ($2).",
+ "languagestats-recenttranslations": "recynt owersets",
+ "translate-langstats-incomplete": "Some o the stateestics oan this page ar oncompleate. Please relaid tae get mair stateestics.",
+ "translate-langstats-expand": "mak mair muckle",
+ "translate-langstats-expandall": "mak aw mair muckle",
+ "translate-langstats-collapseall": "collapse aw",
+ "translate-language-code": "Leid code",
+ "translate-language-code-field-name": "Leid code:",
+ "translate-suppress-complete": "Suppress compleatelie owerset message groops",
+ "translate-ls-noempty": "Suppress compleatelie onowerset message groops",
+ "translate-language": "Leid",
+ "translate-untranslated": "Onowerset",
+ "translate-percentage-complete": "Compleation",
+ "translate-percentage-fuzzy": "Ootdated",
+ "translate-languagestats-overall": "Aw message groops thegather",
+ "translate-ls-submit": "Shaw stateestics",
+ "translate-ls-column-group": "Message groop",
+ "translate-mgs-pagename": "Message groop stateestics",
+ "translate-mgs-fieldset": "Displey preeferances",
+ "translate-mgs-group": "Message groop:",
+ "translate-mgs-nocomplete": "Dinna displey leids that hae compleatit owersetin",
+ "translate-mgs-noempty": "Dinna displey leids that dinna hae onie owersets",
+ "translate-mgs-submit": "Shaw stateestics",
+ "translate-mgs-column-language": "Leid",
+ "translate-mgs-totals": "Aw leids thegather",
+ "translate-mgs-invalid-group": "The speceefied groop $1 disna exeest.",
+ "translate-mgs-nothing": "Nawthing tae shaw fer requestit stateestics.",
+ "supportedlanguages": "Supportit leids",
+ "supportedlanguages-summary": "This page shaws ae leet o aw leids supportit bi {{SITENAME}},\nthegather wi the names o the owerseters wairkin oan that leid.\nAen owerseter's name appears muckler, the mair eedits the owerseter haes contreebuted.\nThe colour o aen unnerline indeecates ho recyntlie aen owerseter haes been acteeve here.",
+ "supportedlanguages-colorlegend": "Legend fer the colour: Laist owerset $1 days syne.",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Owerseter}}|Owerseters}}: $1",
+ "supportedlanguages-recenttranslations": "recynt owersets",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|leid|lleids}} in total.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|eedit|eedits}} - laist eedit $3 {{PLURAL:$3|day|days}} syne",
+ "translate-jssti-add": "Eik til leet",
+ "managemessagegroups": "Message groop management",
+ "translate-smg-notallowed": "Ye'r na permittit tae execute this action.",
+ "translate-smg-nochanges": "Thaur's naw chynges tae process.",
+ "translate-smg-submit": "Haun chynges in fer processin",
+ "translate-smg-submitted": "Message defineetions hae been updated. Chynges ar bein processed in the backgroond.",
+ "translate-smg-more": "Thaur will be mair chynges tae process efter haunin thir chynges in.",
+ "translate-smg-right": "Incomin chynges",
+ "translate-manage-import-deleted": "Delytit message $1",
+ "translate-manage-action-conflict": "Import n fuzzy",
+ "translate-manage-action-fuzzy": "Import n fuzzy owersets",
+ "translate-manage-nochanges": "Thaur's naw chynges in message defineetions fer this groop.",
+ "translate-manage-nochanges-other": "Thaur were naw chynges fer this leid.\nUise the airtin ablo tae return til the groop details sichtin.",
+ "translate-manage-inconsistent": "Detected onconseestancie in the request.\nPlease check fer chynges n gie it anither gae.\nDetails: $1.",
+ "translate-manage-toolong": "The mucklest processin time o $1 {{PLURAL:$1|seicont|seiconts}} exceeded.\nPlease haun the form in again tae continue processin.",
+ "translate-manage-import-summary": "Importin ae new version fae external soorce",
+ "translate-manage-conflict-summary": "Importin ae new version fae external soorce.\nPlease check.",
+ "translate-manage-intro-other": "Ablo is ae leet o owerset chynges in the leid $1.\nPlease luik the chynges ower n chuise aen action that ye want tae tak fer ilka update.\nGif ye chuise tae ignore chynges, than this action is yinlie temparie.",
+ "translate-manage-import-done": "Import compleate!",
+ "importtranslations": "Import owersets",
+ "translate-import-from-local": "Local file uplaid:",
+ "translate-import-load": "Laid file",
+ "translate-import-err-dl-failed": "Onable tae fetch the file:\n$1",
+ "translate-import-err-ul-failed": "File uplaid wisna successfu",
+ "translate-import-err-invalid-title": "Providit file name <nowiki>$1</nowiki> wis onvalit.",
+ "translate-import-err-no-such-file": "File <nowiki>$1</nowiki> disna exeest or haes na been uplaided locallie.",
+ "translate-import-err-stale-group": "The message groop that this file belangs til disna exeest.",
+ "translate-import-err-no-headers": "File's na ae weel formed Gettext file in Owerset extension format:\nOnable tae determine message groop n leid fae file heiders.",
+ "translate-js-support-unsaved-warning": "Ye hae onhained owersets.",
+ "translate-gs-continent": "Continant",
+ "translate-gs-count": "Coont",
+ "translate-documentation-language": "Message documentation",
+ "translate-searchprofile": "Owersets",
+ "translate-searchprofile-tooltip": "Rake fae aw owersets",
+ "translate-search-languagefilter": "Filter bi leid:",
+ "translate-search-nofilter": "Naw filterin",
+ "log-name-translationreview": "Owerset luikower log",
+ "log-description-translationreview": "Log o aw luikowers til owersets n message groops.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|luikt ower}} owerset $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|chynged}} the state o $4 owersets o $3 fae $6 til $7",
+ "group-translate-sandboxed": "Onappruived owerseters",
+ "group-translate-sandboxed-member": "{{GENDER:$1|onappruived owerseter}}",
+ "right-translate-sandboxmanage": "Manage saundkistit uisers",
+ "action-translate-sandboxmanage": "manage saundkistit uisers",
+ "right-translate-sandboxaction": "Execute actions whiteleetit for saundkistit uisers",
+ "action-translate-sandboxaction": "execute actions whiteleetit for saundkistit uisers",
+ "translate-workflow-state-": "(onset)",
+ "translate-workflow-set-doing": "Settin...",
+ "translate-workflow-autocreated-summary": "Autæmateec cræftin o page fer wairkflaw state $1",
+ "translate-workflowgroup-label": "Wairkflaw states",
+ "translate-workflowgroup-desc": "This message groop shaws the owersetin wairkflaw states.\nThe states ar defined in the confeeguration vareeable $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Recynt owersets",
+ "translate-dynagroup-recent-desc": "This message groop shaws aw recynt owersets intil this leid.\nMaist uissfu fer the luikower tasks.",
+ "translate-dynagroup-additions-label": "Recynt addeetions",
+ "translate-dynagroup-additions-desc": "This message groop shaws new n chynged messages.",
+ "translate-msggroupselector-projects": "Message groop",
+ "translate-msggroupselector-search-placeholder": "Rake groops",
+ "translate-msggroupselector-search-all": "Aw",
+ "translate-msggroupselector-search-recent": "Recynt",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|subgroop|subgroops}}",
+ "tux-languageselector": "Owerset til",
+ "tux-tab-all": "Aw",
+ "tux-tab-untranslated": "Onowerset",
+ "tux-tab-outdated": "Ootdated",
+ "tux-tab-translated": "Owerset",
+ "tux-tab-unproofread": "Naw luikt ower",
+ "tux-edit": "Eedit",
+ "tux-status-optional": "Aen Optie",
+ "tux-status-fuzzy": "Ootdated",
+ "tux-status-proofread": "Luikt ower",
+ "tux-status-translated": "Owerset",
+ "tux-status-saving": "Hainin...",
+ "tux-status-unsaved": "Unhained",
+ "tux-editor-paste-original-button-label": "Paste soorce tex",
+ "tux-editor-discard-changes-button-label": "Fling chynges",
+ "tux-editor-save-button-label": "Hain owerset",
+ "tux-editor-skip-button-label": "Skip til the nex",
+ "tux-editor-confirm-button-label": "Confirm owerset",
+ "tux-editor-shortcut-info": "Press \"$1\" tae hain or \"$2\" tae skip til nex message or \"$3\" fer ither shortcuts.",
+ "tux-editor-edit-desc": "Eedit documentation",
+ "tux-editor-in-other-languages": "In ither leids",
+ "tux-editor-need-more-help": "Need mair heelp?",
+ "tux-editor-ask-help": "Speir fer mair information",
+ "tux-notices-more": "{{PLURAL:$1|$1 mair}}",
+ "tux-notices-hide": "skauk",
+ "tux-editor-save-failed": "Hainin the owerset failed: $1",
+ "tux-editor-n-uses": "uised $1 {{PLURAL:$1|time|times}}",
+ "tux-editor-message-desc-more": "See mair",
+ "tux-editor-message-desc-less": "See less",
+ "tux-editor-clear-translated": "Skauk owerset",
+ "tux-editor-proofreading-mode": "Luikower",
+ "tux-editor-translate-mode": "Leet",
+ "tux-editor-proofreading-hide-own-translations": "Skauk yer owersets",
+ "tux-editor-proofreading-show-own-translations": "Shaw yer owersets",
+ "tux-proofread-action-tooltip": "Maurk aes luikt ower",
+ "tux-proofread-edit-label": "Eedit",
+ "tux-editor-outdated-notice": "This owerset micht need tae be updated.",
+ "tux-editor-outdated-notice-diff-link": "Shaw differances",
+ "tux-editor-doc-editor-save": "Hain documentation",
+ "tux-messagetable-more-messages": "$1 mair {{PLURAL:$1|message|messages}}",
+ "tux-messagetable-loading-messages": "Laidin {{PLURAL:$1|message|messages}}...",
+ "tux-message-filter-placeholder": "Filter leet",
+ "tux-message-filter-result": "Foond $1 {{PLURAL:$1|ootcome|ootcomes}} fer \"$2\"",
+ "tux-message-filter-advanced-button": "Advanced rake",
+ "tux-proofread-translated-by-self": "Owerset bi ye",
+ "tux-empty-list-all": "This message groop is tuim",
+ "tux-empty-list-all-guide": "Select ae differant message groop tae owerset",
+ "tux-translate-page-no-such-group": "<strong>The indicatit groop disna exeest.</strong> Select ae differant message groop.",
+ "tux-empty-list-translated": "Naw owerset messages",
+ "tux-empty-list-translated-guide": "Ye can heelp wi owerseting",
+ "tux-empty-list-translated-action": "Owerset",
+ "tux-empty-no-messages-to-display": "Naw messages tae displey.",
+ "tux-empty-there-are-optional": "Thaur's optional messages na shawn oan the leet",
+ "tux-empty-show-optional-messages": "Shaw optional messages",
+ "tux-empty-no-outdated-messages": "Naw ootdated messages",
+ "tux-empty-nothing-to-proofread": "Nawthing tae luikower",
+ "tux-empty-you-can-help-providing": "Ye can heelp in providin new owersets",
+ "tux-empty-nothing-new-to-proofread": "Nawthing new tae luikower",
+ "tux-empty-you-can-review-already-proofread": "Ye can luikower owersets that hae awreadie luikt ower bi ithers.",
+ "tux-empty-list-other": "Nawthing tae owerset",
+ "tux-empty-list-other-guide": "Ye can heelp tae luikower exeestin owersets",
+ "tux-empty-list-other-action": "Luikower owersets",
+ "tux-empty-list-other-link": "Shaw aw messages",
+ "tux-editor-close-tooltip": "Claise",
+ "tux-editor-expand-tooltip": "Mak mair muckle",
+ "tux-editor-message-tools-history": "Histerie",
+ "tux-editor-message-tools-delete": "Delyte",
+ "tux-editor-message-tools-translations": "Aw owersets",
+ "tux-editor-loading": "Laidin...",
+ "translate-search-more-languages-info": "$1 mair {{PLURAL:$1|leid|leids}}",
+ "translate-statsbar-tooltip": "$1% owerset, $2% luikt ower",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% owerset, $2% luikt ower, $3% ootdated",
+ "translate-search-more-groups-info": "$1 mair {{PLURAL:$1|groop|groops}}"
+}
diff --git a/Translate/i18n/core/sd.json b/Translate/i18n/core/sd.json
new file mode 100644
index 00000000..07dbd25f
--- /dev/null
+++ b/Translate/i18n/core/sd.json
@@ -0,0 +1,338 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aursani",
+ "Indus Asia",
+ "Mehtab ahmed",
+ "Tweety"
+ ]
+ },
+ "translate": "ترجمو ڪريو",
+ "translate-extensionname": "ترجمو ڪريو",
+ "translate-desc": "ميڊياوڪي ۽ ٻين جو ترجمو ڪرڻ لاءِ [[Special:Translate|خاص صفحو]]",
+ "translate-taskui-export-to-file": "اصلوڪي فارميٽ ۾ برآمد ڪريو",
+ "translate-taskui-export-as-po": "آفلائين ترجمي لاءِ برآمد ڪريو",
+ "translate-export-csv-message-title": "ترجمي واري نياپي جو عنوان",
+ "translate-export-csv-definition": "نياپي جي وصف",
+ "translate-taction-translate": "ترجمو ڪريو",
+ "translate-taction-proofread": "نظرثاني ڪريو",
+ "translate-taction-lstats": "ٻوليءَ جا انگ-اکر",
+ "translate-taction-mstats": "نياپو گروھ جا انگ-اکر",
+ "translate-taction-export": "برآمد ڪريو",
+ "translate-taction-disabled": "ھي عمل ھن وڪي تي غيرفعال ڪيل آھي.",
+ "translate-page-no-such-language": "ڏنل ٻولي ناقابلِڪار آھي.",
+ "translate-page-no-such-group": "ڏنل گروھ ناقابلِڪار ھيو.",
+ "translate-page-disabled": "ھن گروھ جا ھن ٻوليءَ لاءِ ترجما غيرفعال ڪيل آھن.\nسبب:\n\n<em>$1</em>",
+ "translate-language-disabled": "هن ٻوليءَ ۾ ترجمو ڪرڻ غيرفعال ڪيو ويو آهي.",
+ "translate-page-settings-legend": "ترتيبون",
+ "translate-page-group": "گروھ",
+ "translate-page-language": "ٻولي",
+ "translate-page-limit": "حد",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|نياپو|نياپا}} في صفحو",
+ "translate-submit": "کڻي اچو",
+ "translate-page-navigation-legend": "نيويگيشن",
+ "translate-page-showing": "$1 کان $2 تائين ڪل $3 مان نياپا ڏيکاري رھيو آھي.",
+ "translate-page-showing-all": "$1 {{PLURAL:$1|نياپو|$1نياپا}} ڏيکاريندي.",
+ "translate-page-showing-none": "ڏيکارڻ لاءِ ڪي بہ پيغام ناھن.",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "اڳيون صفحو",
+ "translate-prev": "پويون صفحو",
+ "translate-page-description-legend": "گروھ بابت معلومات",
+ "translate-page-description-hasoptional-open": "اختياري پيغام ڏيکاريو.",
+ "translate-page-edit": "سنواريو",
+ "translate-optional": "(اختياري)",
+ "translate-ignored": "(نظر انداز ڪيل)",
+ "translate-edit-title": "\"$1\" سنواريو",
+ "translate-edit-definition": "نياپي جي وصف",
+ "translate-edit-contribute": "ڀاڱيداري ڪريو",
+ "translate-edit-information": "نياپي بابت معلومات ($1)",
+ "translate-edit-warnings": "نامڪمل ترجمن بابت چِتاءَ",
+ "translate-edit-tmmatch-source": "ترجمي جي ذريعي جو متن: $1",
+ "translate-edit-tmmatch": "$1٪ ملي ٿو",
+ "translate-edit-nopermission": "ترجمو ڪرڻ لاءِ توھان کي ترجمي جا حق ھجڻ کپن.",
+ "translate-edit-askpermission": "اجازت وٺو",
+ "exporttranslations": "ترجما برآمد ڪريو",
+ "translate-export-form-format": "فارميٽ",
+ "translate-export-invalid-format": "مھرباني فرمائي ڪو قابلِڪار فارميٽ مھيا ڪريو.",
+ "translate-export-not-supported": "ترجمي جي برآمد سپورٽ ناھي ڪيل.",
+ "translate-checks-parameters": "ھي پيراميٽر {{PLURAL:$2|استعمال ناھي ڪيو ويو|استعمال ناھن ڪيا ويا}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "ھي پيراميٽر {{PLURAL:$2|اڻڄاتل آھي|اڻڄاتل آھن}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "{{PLURAL:$2|ڏنگيءَ|ڏنگين}} جو گهٽ وڌ استعمال ڪيل آھي:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "ھي {{PLURAL:$2|ڳنڍڻو|$2 ڳنڍڻا}} {{PLURAL:$2|مسئلو ڪري پيو|ڪن پيا}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "ھي {{PLURAL:$2|ڳنڍڻو|$2 ڳنڍڻا}} کٽل {{PLURAL:$2|آھي|آھن}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "وصف <nowiki>{{PLURAL:}}</nowiki> جو استعمال ڪري پئي پر ترجمي ۾ استعمال ناھي ڪيل.",
+ "translate-checks-gettext-plural-missing": "ھن ترجمي ۾ <nowiki>{{PLURAL:GETTEXT|}}</nowiki> لازماََ ھجڻ گهرجي.",
+ "translate-checks-gettext-plural-unsupported": "ھي ترجمو <nowiki>{{PLURAL:GETTEXT|}}</nowiki> کي سپورٽ نٿو ڪري.",
+ "translate-checks-smartformat-plural-missing": "ھن ترجمي ۾ ويريئيبل $1 لازماً جمع ھجڻ گهرجي.",
+ "translate-checks-smartformat-plural-unsupported": "ھي ترجمو ويريئيبل $1 تي جمع کي سپورٽ نٿو ڪري.",
+ "translate-checks-unicode-plural-missing": "ھن ترجمي ۾ <nowiki>{{PLURAL|}}</nowiki> لازماََ ھجڻ گهرجي.",
+ "translate-checks-unicode-plural-unsupported": "ھي ترجمو<nowiki>{{PLURAL|}}</nowiki> کي سپورٽ نٿو ڪري.",
+ "translate-checks-unicode-plural-invalid": "جمع شڪليون $1 وانگر بيان ڪيون وڃن. ھن ترجمي ۾ $2 آھي.",
+ "translate-checks-pagename": "نانءُپولار وصف کان بدليل آھي",
+ "translate-checks-parametersnotequal": "پيراميٽر جو انگ {{PLURAL:$1|$1}} آھي؛ اھو {{PLURAL:$2|$2}} ھجڻ گهرجي.",
+ "translate-checks-fudforum-syntax": "ھن رٿا ۾ <nowiki>$2</nowiki> بجاءِ <nowiki>$1</nowiki> استعمال ڪريو.",
+ "translate-checks-value-not-present": "ھي ترجمو {{PLURAL:$1|1=|ھيٺين مان ڪنھن ھڪ قدر}} جي برابر ھجڻ گهرجي: $1",
+ "translate-checks-replacement": "$1 بجاءِ $2 استعمال ڪريو",
+ "translate-checks-empty": "بغير مواد واري يا خالي ترجمي جي اجازت نہ آھي.",
+ "translate-pref-editassistlang": "مددگار ٻوليون:",
+ "prefs-translate": "ترجمي جا چارا",
+ "translate-pref-editassistlang-bad": "فھرست ۾ ناقابلِڪار ٻوليءَ جو ڪوڊ آھي:\n<nowiki>$1</nowiki>.",
+ "right-translate": "ترجمو انٽرفيس استعمال ڪندي سنواريو",
+ "action-translate": "ترجمو انٽرفيس استعمال ڪندي سنواريو",
+ "right-translate-manage": "نياپو گروھ سنڀاليو",
+ "action-translate-manage": "نياپو گروھَ سنڀاليو",
+ "right-translate-import": "آفلائين ترجما درآمد ڪريو",
+ "action-translate-import": "آفلائين ترجما درآمد ڪريو",
+ "right-translate-messagereview": "ترجمن جي نظرثاني ڪريو",
+ "action-translate-messagereview": "ترجمن جي نظرثاني ڪريو",
+ "translate-rcfilters-translations": "ترجما",
+ "translate-rcfilters-translations-only-label": "ترجما",
+ "translate-rcfilters-translations-only-desc": "ترجمايل صفحن ۾ تبديليون.",
+ "translate-rcfilters-translations-filter-label": "ترجما نہ ھجن",
+ "translate-rcfilters-translations-filter-desc": "اھي سڀ بدلاءَ جيڪي ترجمو ناھن.",
+ "translate-rcfilters-translations-site-label": "سائيٽ جا نياپا",
+ "translate-rcfilters-translations-site-desc": "ميڊياوڪي نانءُپولار۾ سائيٽ نياپن جون ڪسٽمائيزيشنس.",
+ "translate-rc-translation-filter": "ترجما ڇاڻيو:",
+ "translate-rc-translation-filter-no": "ڪجهہ نہ ڪريو",
+ "translate-rc-translation-filter-only": "رڳو ترجما ڏيکاريو",
+ "translate-rc-translation-filter-filter": "ترجما ڇاڻي ڪڍو",
+ "translate-rc-translation-filter-site": "رڳو سائيٽ جي نياپن ۾ بدلاءَ",
+ "translationstats": "ترجمي جا انگ-اکر",
+ "translate-stats-edits": "سنوارون",
+ "translate-stats-users": "ترجميڪار",
+ "translate-stats-registrations": "رجسٽريشنون",
+ "translate-stats-reviews": "نظرثانيون",
+ "translate-stats-reviewers": "جائزاڪار",
+ "translate-statsf-options": "گراف",
+ "translate-statsf-width": "پڪزلس ۾ ويڪر:",
+ "translate-statsf-height": "پڪزلس ۾ اوچائي:",
+ "translate-statsf-days": "ڏينھن ۾ وقت جو دورانيو:",
+ "translate-statsf-start": "شروعاتي تاريخ:",
+ "translate-statsf-scale-years": "سال",
+ "translate-statsf-scale-months": "مھينا",
+ "translate-statsf-scale-weeks": "ھفتا",
+ "translate-statsf-scale-days": "ڏينھن",
+ "translate-statsf-scale-hours": "ڪلاڪَ",
+ "translate-statsf-count": "پيمائش:",
+ "translate-statsf-count-edits": "سنوارن جو انگ",
+ "translate-statsf-count-users": "سرگرم ترجميڪار",
+ "translate-statsf-count-registrations": "نوان واپرائيندڙ",
+ "translate-statsf-count-reviews": "ترجمن جون نظرثانيون",
+ "translate-statsf-count-reviewers": "جائزاڪار",
+ "translate-statsf-submit": "پيش-نگاھ",
+ "translate-statsf-unknown-error": "ڪا اڻڄاتل چُڪَ پيش آئي.",
+ "translate-tag-page-desc": "وڪي صفحي [[$2|$1]] جو $3 ($4) مان ترجمو",
+ "translate-sidebar-alltrans": "ٻيون ٻوليون",
+ "translations": "سڀ ترجما",
+ "translate-translations-no-message": "\"$1\" ترجمو ڪرڻ جوڳو نياپو نہ آھي",
+ "translate-translations-none": "\"$1\" لاءِ ڪي بہ ترجما ناھن",
+ "translate-translations-count": "{{PLURAL:$1|ھڪ ترجمو|$1 ترجما}} لڌا.",
+ "translate-translations-fieldset-title": "نياپو",
+ "translate-translations-messagename": "نالو:",
+ "translate-translations-project": "رٿا:",
+ "translate-translations-history-short": "سوانح",
+ "languagestats": "ٻوليءَ جا انگ-اکر",
+ "languagestats-summary": "ھي صفحو ھڪ ٻوليءَ لاءِ ھڙني نياپن وارن گروھن جي ترجمن جا انگ-اکر ڏيکاري ٿو.",
+ "messagegroupstats-summary": "ھي صفحو نياپي گروھ جا انگ-اکر ڏيکاري ٿو.",
+ "languagestats-stats-for": "$1 ($2) لاءِ ترجمي جا انگ-اکر.",
+ "languagestats-recenttranslations": "تازا ترجما",
+ "translate-langstats-expand": "پکيڙيو",
+ "translate-langstats-collapse": "ويڙھيو",
+ "translate-langstats-expandall": "سڀ پکيڙيو",
+ "translate-langstats-collapseall": "سڀ ويڙھيو",
+ "translate-language-code": "ٻولي جو ڪوڊ",
+ "translate-language-code-field-name": "ٻولي جو ڪوڊ:",
+ "translate-suppress-complete": "مڪمل طور ترجمو ڪيل نياپو گروھ دٻائي ڇڏيو",
+ "translate-ls-noempty": "مڪمل طور اڻترجمو ڪيل نياپو گروھ دٻائي ڇڏيو",
+ "translate-language": "ٻولي",
+ "translate-total": "پيغامَ",
+ "translate-untranslated": "اڻ-ترجمايل",
+ "translate-percentage-complete": "مڪمل",
+ "translate-percentage-fuzzy": "مدي-خارج",
+ "translate-percentage-proofread": "نظرثاني-ڪيل",
+ "translate-languagestats-overall": "ھڙئي نياپا گروھ گڏ",
+ "translate-ls-submit": "انگ-اکر ڏيکاريو",
+ "translate-ls-column-group": "نياپو گروھ",
+ "translate-mgs-pagename": "نياپو گروھ انگ-اکر",
+ "translate-mgs-fieldset": "ڊسپلي ترجيحون",
+ "translate-mgs-group": "نياپو گروھ:",
+ "translate-mgs-submit": "انگ-اکر ڏيکاريو",
+ "translate-mgs-column-language": "ٻولي",
+ "translate-mgs-totals": "سڀ $1 {{PLURAL:$1|ٻولي|ٻوليون}} گڏ",
+ "translate-mgs-invalid-group": "ڄاڻايل گروھ $1 وجود نٿو رکي.",
+ "translate-mgs-nothing": "گھريل انگ-اکر ڏيکارڻ لاءِ ڪجهہ بہ نہ آھي.",
+ "supportedlanguages": "سرگرم ٻوليون",
+ "supportedlanguages-colorlegend": "رنگ لاءِ ڪنجي: آخري ترجمو $1 ڏينھن اڳ.",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|ترجميڪار}}|ترجميڪار}}: $1",
+ "supportedlanguages-recenttranslations": "ھاڻوڪا ترجما",
+ "supportedlanguages-count": "ڪل $1 {{PLURAL:$1|ٻولي|ٻوليون}}",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|سنوار|سنوارون}} - آخري سنوار $3 {{PLURAL:$3|ڏينھن|ڏينھَن}} اڳ",
+ "abusefilter-edit-builder-vars-translate-target-language": "ترجمو ڪرڻ لاءِ مقصود ٻولي",
+ "translate-jssti-add": "فھرست ۾ شامل ڪريو",
+ "managemessagegroups": "نياپو گروھن جي سنڀال",
+ "translate-smg-notallowed": "توھان کي ھي عمل سرانجام ڏيڻ جي اجازت نہ نہ آھي.",
+ "translate-smg-nochanges": "عمل ۾ ڪي بہ بدلاءَ نہ آھن.",
+ "translate-smg-right": "اندر ايندڙ تبديليون",
+ "translate-smg-rename-select": "چونڊيو",
+ "translate-smg-rename-cancel": "رد",
+ "translate-smg-rename-search": "ملندڙ-جلندڙ نياپن لاءِ ڳوليو...",
+ "translate-smg-rename-no-msg": "ڪي بہ پيغام نہ لڌا.",
+ "translate-smg-rename-new": "نئين طور وجهو...",
+ "translate-smg-strong-sync-help": "مدد",
+ "translate-smg-group-with-error-summary": "$1 چُڪن سان {{PLURAL:$1|نياپو|نياپا}}:",
+ "translate-smg-group-message-action-history": "سوانح",
+ "translate-smg-group-action-resolve": "حل ٿيل طور نشان لڳايو",
+ "translate-smg-group-message-tag-outdated": "مدي خارج",
+ "translate-smg-group-message-tag-rename": "ٻيھر نالو ڏيو",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|ٽيگ}}",
+ "translate-smg-group-message-message-content": "مواد:",
+ "translate-smg-group-message-message-target": "ھدف:",
+ "translate-smg-group-message-message-replacement": "بدل:",
+ "translate-smg-group-message-message-other-langs": "ٻيون ٻوليون:",
+ "translate-smg-loading": "لاھيندي...",
+ "translate-smg-unknown-error": "توھان جي درخواست تي عمل ڪندي ڪا اڻڄاتل چُڪَ پيش آئي.",
+ "translate-manage-import-diff": "نياپو $1 | عمل: $2",
+ "translate-manage-import-new": "نئون نياپو $1",
+ "translate-manage-import-deleted": "ڊاھيل نياپو $1",
+ "translate-manage-action-import": "درآمد ڪريو",
+ "translate-manage-action-ignore": "نظرانداز ڪريو",
+ "translate-manage-action-rename": "ٻيھر نالو ڏيو",
+ "translate-manage-action-ignore-change": "ترجمي ۾ بدلاءَ نظرانداز ڪريو",
+ "translate-manage-submit": "سرانجام ڏيو",
+ "translate-manage-import-ok": "درآمد ڪيل: $1",
+ "translate-manage-import-done": "درآمد مڪمل!",
+ "translate-manage-empty-content": "مواد خالي آھي",
+ "translate-manage-source-message-not-found": "نياپي جي وصف نٿي ملي",
+ "importtranslations": "ترجما درآمد ڪريو",
+ "translate-import-from-local": "مقامي فائيل چاڙھ:",
+ "translate-import-load": "فاھيل لاھيو",
+ "translate-import-err-ul-failed": "فائيل چاڙھ ناڪام",
+ "translate-import-err-no-such-file": "فائيل <nowiki>$1</nowiki> وجود نٿو رکي يا وري مقامي طور چاڙھيل نہ آھي.",
+ "translate-js-support-unsaved-warning": "توھان وٽ اڻڇپيل ترجما آھن.",
+ "translate-gs-pos": "بيھڪ",
+ "translate-gs-code": "ڪوڊ",
+ "translate-gs-continent": "کنڊُ",
+ "translate-gs-speakers": "ڳالھائيندڙ",
+ "translate-gs-score": "اسڪور",
+ "translate-gs-multiple": "ھڪ کان وڌيڪ",
+ "translate-gs-count": "ڳاڻيٽو",
+ "translate-gs-total": "ڪل",
+ "translate-gs-avgscore": "سراسري اسڪور",
+ "translate-documentation-language": "نياپاتي دستاويزسازي",
+ "translate-searchprofile": "ترجما",
+ "translate-searchprofile-tooltip": "سڀ ترجمن مان ڳوليو",
+ "translate-search-languagefilter": "ڇاڻيو بلحاظ ٻولي:",
+ "translate-search-nofilter": "نہ ڇاڻيو",
+ "log-name-translationreview": "ترجمي جي نظرثاني جو لاگ",
+ "logentry-translationreview-message": "$1، $3 ترجمي تي {{GENDER:$2|نظرثاني ڪئي}}",
+ "group-translate-sandboxed": "اڻمنظورڪيل ترجميڪار",
+ "group-translate-sandboxed-member": "{{GENDER:$1|اڻمنظورڪيل ترجميڪار}}",
+ "translate-workflow-set-doing": "ترتيب ڏيندي...",
+ "translate-dynagroup-recent-label": "تازا ترجما",
+ "translate-dynagroup-additions-label": "ھاڻوڪا واڌارا",
+ "translate-dynagroup-additions-desc": "ھي پيغام گروھ نوان ۽ بدليل نياپا ڏيکاري ٿو.",
+ "translate-msggroupselector-projects": "نياپو گروھ",
+ "translate-msggroupselector-search-placeholder": "گروھ ڳوليو",
+ "translate-msggroupselector-search-all": "سڀ",
+ "translate-msggroupselector-search-recent": "ھاڻوڪا",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|ماتحت-گروھ}}",
+ "tux-languageselector": "۾ ترجمايو",
+ "tux-tab-all": "سڀ",
+ "tux-tab-untranslated": "اڻ-ترجمايل",
+ "tux-tab-outdated": "مدي-خارج",
+ "tux-tab-translated": "ترجمايل",
+ "tux-tab-unproofread": "نظرثاني-نہ-ڪيل",
+ "tux-edit": "سنواريو",
+ "tux-status-optional": "اختياري",
+ "tux-status-fuzzy": "مدي-خارج",
+ "tux-status-proofread": "نظرثاني-ڪيل",
+ "tux-status-translated": "ترجمايل",
+ "tux-status-saving": "ڇاپيندي...",
+ "tux-status-unsaved": "اڻ-ڇپيل",
+ "tux-save-unknown-error": "اڻڄاتل چُڪَ پيش آئي.",
+ "tux-editor-placeholder-language": "$1ءَ ۾ توھان جو ترجمو",
+ "tux-editor-editsummary-placeholder": "پنھنجي بدلائن جي وضاحت ڪريو (اختياري)",
+ "tux-editor-paste-original-button-label": "ذريعي جو متن ھڻو",
+ "tux-editor-discard-changes-button-label": "تبديليون ڦٽو ڪريو",
+ "tux-editor-save-button-label": "ترجمو ڇاپيو",
+ "tux-editor-skip-button-label": "اڳلي ڏانھن وڌو",
+ "tux-editor-cancel-button-label": "رد",
+ "tux-editor-confirm-button-label": "ترجمي جي پڪ ڪريو",
+ "tux-editor-proofread-button-label": "نظرثاني ڪيل طور نشان لڳايو",
+ "tux-editor-shortcut-info": "\"$1\" کي پڪ ڪرڻ ۽ اڳين نياپي ڏانھن، \"$2\" ڇڏي ڏيڻ لاءِ، \"$4\" تَتُ مھيا ڪرڻ لاءِ دٻايو يا \"$3\" کي وڌيڪ شارٽڪٽَ ڏسڻ لاءِ زور ڏيو.",
+ "tux-editor-edit-desc": "دستاويزسازي سنواريو",
+ "tux-editor-add-desc": "دستاويزسازي شامل ڪريو",
+ "tux-editor-suggestions-title": "مشورا",
+ "tux-editor-latest-updates-title": "تازيون ترين تجديدون",
+ "tux-editor-changes-without-summary": "بغير تَت جي $1 {{PLURAL:$1|تجديد|تجديدون}}",
+ "tux-editor-all-changes": "سڀ بدلاءَ",
+ "tux-editor-in-other-languages": "ٻيون ٻوليون",
+ "tux-editor-need-more-help": "وڌيڪ مدد گهرجي؟",
+ "tux-editor-ask-help": "وڌيڪ معلومات جي گهر ڪريو",
+ "tux-editor-tm-match": "$1٪ ملي ٿو",
+ "tux-notices-more": "{{PLURAL:$1|$1 وڌيڪ}}",
+ "tux-notices-hide": "لڪايو",
+ "tux-editor-save-failed": "ترجمو ڇاپڻ ۾ ناڪام: $1",
+ "tux-editor-n-uses": "$1 {{PLURAL:$1|ڀيرو|ڀيرا}} استعمال ڪيل",
+ "tux-editor-message-desc-more": "وڌيڪ ڏسو",
+ "tux-editor-message-desc-less": "گهٽ ڏسو",
+ "tux-editor-clear-translated": "ترجمايل لڪايو",
+ "tux-editor-proofreading-mode": "نظرثاني",
+ "tux-editor-translate-mode": "فھرست",
+ "tux-editor-proofreading-hide-own-translations": "پنھنجا ترجما لڪايو",
+ "tux-editor-proofreading-show-own-translations": "پنھنجا ترجما ڏسو",
+ "tux-proofread-action-tooltip": "نظرثاني ڪيل طور نشان لڳايو",
+ "tux-proofread-edit-label": "سنواريو",
+ "tux-editor-page-mode": "صفحو",
+ "tux-editor-outdated-notice": "ھن ترجمي ۾ تجديد ڪرڻ جي ضرورت ٿي سگهي ٿي.",
+ "tux-editor-outdated-notice-diff-link": "تفاوت ڏيکاريو",
+ "tux-editor-doc-editor-placeholder": "نياپاتي دستاويزسازي",
+ "tux-editor-doc-editor-save": "دستاويزسازي ڇاپيو",
+ "tux-editor-doc-editor-cancel": "رد",
+ "tux-messagetable-more-messages": "وڌيڪ $1 {{PLURAL:$1|نياپو|نياپا}}",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|نياپا}} لاھيندي...",
+ "tux-message-filter-placeholder": "فھرست ڇاڻيو",
+ "tux-message-filter-result": "\"$2\" لاءِ $1 {{PLURAL:$1|نتيجو|نتيجا}} لڌو/لڌا",
+ "tux-message-filter-advanced-button": "متقدم ڳولا",
+ "tux-message-filter-optional-messages-label": "اختياري نياپا",
+ "tux-proofread-translated-by-self": "مون پاران ترجمايل",
+ "tux-empty-list-all": "ھي نياپو گروھ خالي آھي",
+ "tux-empty-list-all-guide": "ترجمو ڪرڻ لاءِ ڪو مختلف نياپو گروھ چونڊيو",
+ "tux-translate-page-no-such-group": "<strong>ظاهر ڪيل گروپ موجود ناهي.</strong> ڪو مختلف نياپو گروھ چونڊيو.",
+ "tux-empty-list-translated": "پيغام ترجمايل ناھن",
+ "tux-empty-list-translated-guide": "توھان ترجمو ڪرڻ ۾ مدد ڪري سگهو ٿا",
+ "tux-empty-list-translated-action": "ترجمايو",
+ "tux-empty-no-messages-to-display": "ڏيکارڻ لاءِ ڪي بہ پيغام ناھن",
+ "tux-empty-there-are-optional": "ڪجهہ اختياري پيغام آھن جيڪي فھرست ۾ ڏيکاريل ناھن",
+ "tux-empty-show-optional-messages": "اختياري پيغام ڏيکاريو",
+ "tux-empty-no-outdated-messages": "ڪي بہ مدي خارج پيغام ناھن",
+ "tux-empty-nothing-to-proofread": "نظرثاني ڪرڻ لاءِ ڪجهہ بہ ناھي",
+ "tux-empty-you-can-help-providing": "توھان نوان ترجما مھيا ڪري مدد ڪري سگهو ٿا",
+ "tux-empty-nothing-new-to-proofread": "نظرثاني ڪرڻ لاءِ ڪجهہ بہ نئون ڪونهي",
+ "tux-empty-you-can-review-already-proofread": "توھان ٻين پاران اڳ ئي نظرثاني ڪيل ترجمن جي نظرثاني ڪري سگهو ٿا.",
+ "tux-empty-list-other": "ترجمو ڪرڻ لاءِ ڪجهہ بہ ناھي",
+ "tux-empty-list-other-guide": "توھان موجود ترجمن جي نظرثاني ڪرڻ ۾ مدد ڪري سگهو ٿا",
+ "tux-empty-list-other-action": "ترجمن تي نظرثاني ڪريو",
+ "tux-empty-list-other-link": "سڀ پيغام ڏيکاريو",
+ "tux-editor-close-tooltip": "بند ڪريو",
+ "tux-editor-expand-tooltip": "پکيڙيو",
+ "tux-editor-collapse-tooltip": "بند ڪريو",
+ "tux-editor-message-tools-show-editor": "وڪي سنوارگاھ ۾ ڏيکاريو",
+ "tux-editor-message-tools-history": "سوانح",
+ "tux-editor-message-tools-delete": "ڊاھيو",
+ "tux-editor-message-tools-translations": "سڀ ترجما",
+ "tux-editor-message-tools-linktothis": "ھن نياپي ڏانھن ڳنڍڻو",
+ "tux-editor-loading": "لاھيندي...",
+ "translate-search-more-languages-info": "وڌيڪ $1 {{PLURAL:$1|ٻولي|ٻوليون}}",
+ "translate-statsbar-tooltip": "$1٪ ترجمايل، ٪$2 نظرثاني-ڪيل",
+ "translate-statsbar-tooltip-with-fuzzy": "$1٪ ترجمايل، ٪$2 نظرثاني-ڪيل، ٪$3 مدي-خارج",
+ "translate-search-more-groups-info": "وڌيڪ $1 {{PLURAL:$1|گروھ}}",
+ "specialpages-group-translation": "ترجمو",
+ "content-model-translate-messagebundle": "ترجمي ڪرڻ جوڳن نياپن جي ڀري",
+ "translate-messagebundle-validation-error": "ناقابلِڪار نياپن جي ڀري: $1",
+ "translate-messagebundle-error-key-too-long": "بٽڻ \"$1\" ھيڪاندو ڊگهو آھي",
+ "translate-messagebundle-error-key-invalid-characters": "ڪنجي \"$1\" غير اجازت ڏنل حرف رکي ٿي",
+ "translate-messagebundle-error-empty-value": "ڪنجي \"$1\" ۾ ڪو قدر ڄاڻايل ناھي",
+ "log-action-filter-translationreview": "عمل جو قسم:",
+ "log-action-filter-translationreview-message": "انفرادي ترجمو نياپن جو جائزو"
+}
diff --git a/Translate/i18n/core/sdc.json b/Translate/i18n/core/sdc.json
new file mode 100644
index 00000000..b1243ee5
--- /dev/null
+++ b/Translate/i18n/core/sdc.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jun Misugi"
+ ]
+ },
+ "translate-taction-translate": "Traduzì",
+ "translate-taction-proofread": "Verifiggà",
+ "translate-taction-export": "Ippurtha",
+ "translate-page-group": "Gruppu",
+ "translate-page-language": "Linga",
+ "translate-page-navigation-legend": "Nabiggazioni",
+ "translate-next": "Pàgina sighenti",
+ "translate-prev": "Pàgina prizzidenti",
+ "translate-page-description-legend": "Iffuimmazioni paj kistha pàgina",
+ "translate-page-edit": "mudificà",
+ "translate-edit-title": "Mudificà \"$1\"",
+ "translate-edit-contribute": "cuntribuì",
+ "translate-edit-askpermission": "Uttiní primmissu",
+ "exporttranslations": "Ippurtha li traduzioni",
+ "prefs-translate": "Opzioni traduzioni",
+ "translate-smg-strong-sync-help": "Aggiuddu",
+ "translate-documentation-language": "Documentazioni d'imbasciaddi"
+}
diff --git a/Translate/i18n/core/sdh.json b/Translate/i18n/core/sdh.json
new file mode 100644
index 00000000..02ea8972
--- /dev/null
+++ b/Translate/i18n/core/sdh.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Paraw2"
+ ]
+ },
+ "translate-documentation-language": "پەیام بەڵگەناوە"
+}
diff --git a/Translate/i18n/core/se.json b/Translate/i18n/core/se.json
new file mode 100644
index 00000000..6360d867
--- /dev/null
+++ b/Translate/i18n/core/se.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "Yupik"
+ ]
+ },
+ "translate-page-language": "Giella",
+ "translate-next": "Čuovvovaš siidu",
+ "translate-prev": "Ovddit siidu",
+ "translate-stats-users": "Jorgaleaddjit",
+ "translate-sidebar-alltrans": "Eará gielaide",
+ "translations": "Buot jorgalusat",
+ "translate-langstats-expand": "čájet",
+ "translate-language": "Giella",
+ "translate-mgs-column-language": "Giella",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Jorgaleaddji}}|jorgaleaddji}}: $1",
+ "translate-msggroupselector-search-all": "Buot",
+ "tux-tab-all": "Buot",
+ "tux-editor-suggestions-title": "Evttohusat",
+ "tux-editor-in-other-languages": "Eará gielaide",
+ "tux-editor-expand-tooltip": "Stuorit",
+ "tux-editor-message-tools-translations": "Buot jorgalusat"
+}
diff --git a/Translate/i18n/core/ses.json b/Translate/i18n/core/ses.json
new file mode 100644
index 00000000..b539af59
--- /dev/null
+++ b/Translate/i18n/core/ses.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Songhay"
+ ]
+ },
+ "translate-documentation-language": "Alhabar fahamandi tiira"
+}
diff --git a/Translate/i18n/core/sgs.json b/Translate/i18n/core/sgs.json
new file mode 100644
index 00000000..5d7299e2
--- /dev/null
+++ b/Translate/i18n/core/sgs.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hugo.arg"
+ ]
+ },
+ "translate-sidebar-alltrans": "Kėtuom kalbuom",
+ "translate-untranslated": "Napargoldītė",
+ "translate-percentage-fuzzy": "Vetošė",
+ "translate-documentation-language": "Pranešėma aprašā",
+ "tux-tab-all": "Vėsė",
+ "tux-tab-untranslated": "Napargoldītė",
+ "tux-tab-outdated": "Vetošė",
+ "tux-tab-translated": "Pargoldītė",
+ "tux-status-fuzzy": "Vetošė",
+ "tux-editor-save-button-label": "Ėšsauguotė pargoldīma",
+ "tux-editor-skip-button-label": "Ētė ont kėta",
+ "tux-editor-clear-translated": "Kavuotė tous, katrėi pargoldītė īr"
+}
diff --git a/Translate/i18n/core/sh.json b/Translate/i18n/core/sh.json
new file mode 100644
index 00000000..889f2c5d
--- /dev/null
+++ b/Translate/i18n/core/sh.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Conquistador",
+ "Kolega2357",
+ "OC Ripper"
+ ]
+ },
+ "right-translate-manage": "Upravljanje grupama poruka",
+ "translate-statsf-submit": "Pregled",
+ "translate-sidebar-alltrans": "Na drugim jezicima",
+ "translate-documentation-language": "Dokumentacija poruke",
+ "tux-editor-cancel-button-label": "Otkaži",
+ "tux-editor-in-other-languages": "Na drugim jezicima",
+ "tux-editor-doc-editor-cancel": "Otkaži"
+}
diff --git a/Translate/i18n/core/shi.json b/Translate/i18n/core/shi.json
new file mode 100644
index 00000000..a86483ed
--- /dev/null
+++ b/Translate/i18n/core/shi.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lhoussine AIT TAYFST"
+ ]
+ },
+ "translate-documentation-language": "Azmmem n tabrat"
+}
diff --git a/Translate/i18n/core/shn.json b/Translate/i18n/core/shn.json
new file mode 100644
index 00000000..49889fbf
--- /dev/null
+++ b/Translate/i18n/core/shn.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Saimawnkham"
+ ]
+ },
+ "right-translate": "ၸႂ်ႉလွင်ႈပိၼ်ႇၽႃႇသႃႇယူင်ႉႁၢင်ႈသေ မႄးထတ်း",
+ "translate-documentation-language": "ၽိုၼ်လိၵ်ႈၶေႃႈၶၢဝ်ႇ"
+}
diff --git a/Translate/i18n/core/shy-latn.json b/Translate/i18n/core/shy-latn.json
new file mode 100644
index 00000000..68422824
--- /dev/null
+++ b/Translate/i18n/core/shy-latn.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Vikoula5"
+ ]
+ },
+ "translate-statsf-scale-months": "Iyaren",
+ "translate-statsf-scale-days": "Ussan",
+ "translate-documentation-language": "Tasemlit n yizen"
+}
diff --git a/Translate/i18n/core/si.json b/Translate/i18n/core/si.json
new file mode 100644
index 00000000..df6f0c78
--- /dev/null
+++ b/Translate/i18n/core/si.json
@@ -0,0 +1,234 @@
+{
+ "@metadata": {
+ "authors": [
+ "Singhalawap",
+ "Varuna Harshana",
+ "චතුනි අලහප්පෙරුම",
+ "පසිඳු කාවින්ද",
+ "බිඟුවා",
+ "ශ්වෙත"
+ ]
+ },
+ "translate": "පරිවර්තනය කරන්න",
+ "translate-desc": "මාධ්‍යවිකී සහ ඉන් ඔබ්බට පරිවර්තනය කෙරුම සඳහා [[Special:Translate|විශේෂ පිටුව]]",
+ "translate-taskui-export-to-file": "දේශ්‍රීය ආකෘතියයෙන් නිර්යාත කරන්න",
+ "translate-taskui-export-as-po": "මාර්ග-අපගත පරිවර්තනය සඳහා නිර්යාත කරන්න",
+ "translate-taction-translate": "පරිවර්තනය කරන්න",
+ "translate-taction-proofread": "සමාලෝචනය",
+ "translate-taction-lstats": "භාෂා සංඛ්‍යානයන්",
+ "translate-taction-mstats": "පණිවුඩ සමූහ සංඛ්‍යානය",
+ "translate-taction-export": "නිර්යාත කරන්න",
+ "translate-taction-disabled": "මෙම ක්‍රියාව මෙම විකියෙහි අක්‍රිය කර ඇත.",
+ "translate-page-no-such-language": "නම් කෙරුනු භාෂාව අනීතිකයි.",
+ "translate-page-no-such-group": "නම් කෙරුණු කාණ්ඩය අනීතිකයි.",
+ "translate-page-disabled": "මෙම කාණ්ඩයේ මෙම භාෂාව සඳහා පරිවර්තන අක්‍රීය කොට ඇත.\nහේතුව:\n\n<em>$1</em>",
+ "translate-language-disabled": "මෙම භාෂාව වෙත පරිවර්තනය අක්‍රිය කර ඇත.",
+ "translate-page-settings-legend": "සැකසුම්",
+ "translate-page-group": "කාණ්ඩය",
+ "translate-page-language": "භාෂාව",
+ "translate-page-limit": "සීමාව",
+ "translate-page-limit-option": "එක් පිටුවකට {{PLURAL:$1|පණිවුඩ|පණිවුඩ}} $1 ක්",
+ "translate-submit": "ඉටුකරන්න",
+ "translate-page-navigation-legend": "යාත්‍රණය",
+ "translate-page-showing": "$3 ක් අතුරින් පණ්වුඩ $1 සිට $2 දක්වා ප්‍රදර්ශනය කෙරෙයි .",
+ "translate-page-showing-all": "{{PLURAL:$1|පණිවුඩ|පණිවුඩ}} $1 ක් පෙන්වමින්.",
+ "translate-page-showing-none": "පෙන්විමට පණිවුඩ නොමැත.",
+ "translate-next": "ඊළඟ පිටුව",
+ "translate-prev": "පෙර පිටුව",
+ "translate-page-description-legend": "කාණ්ඩය පිළිබඳ විස්තර",
+ "translate-page-description-hasoptional-open": "අමතර පණිවුඩ පෙන්වන්න.",
+ "translate-page-edit": "සංස්කරණය",
+ "translate-optional": "(වෛකල්පික)",
+ "translate-ignored": "(නොසලකන ලදි)",
+ "translate-edit-title": "\"$1\" සංස්කරණය කරන්න",
+ "translate-edit-definition": "පණිවුඩ විග්‍රහය",
+ "translate-edit-contribute": "දායකවන්න",
+ "translate-edit-no-information": "''මෙම පණිවුඩය සතුව ප්‍රලේඛනයක් නොමැත.''\n''මෙම පණිවුඩය තිබෙන්නේ කොහේදැයි හෝ භාවිතා කරන්නේ කුමටද කියා දන්නවානම්, මෙම පණිවුඩය සඳහා ප්‍රලේඛනයක් තැනීම මඟින් ඔබට අනෙකුත් පරිවර්තකයන් හට සහය විය හැක.''",
+ "translate-edit-information": "($1) පණිවුඩය පිලිබඳ තොරතුරු",
+ "translate-edit-warnings": "අසම්පුර්ණ පරිවර්තන පිලිබඳ අවවාද",
+ "translate-edit-tmmatch-source": "පරිවර්තන මූලාශ්‍ර පාඨය: $1",
+ "translate-edit-tmmatch": "$1% ගැලපේ",
+ "translate-edit-nopermission": "පණිවුඩ පරිවර්තනයකිරීම සඳහා ඔබ අවසර ගත යුතුය.",
+ "translate-edit-askpermission": "අවසර ඉල්ලන්න",
+ "translate-checks-parameters": "පහත {{PLURAL:$2|පරාමිතිය|පරාමිතියන්}} භාවිතා නොවේ:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "පහත {{PLURAL:$2|පරාමිතිය|පරාමිතියන්}} අඥාතයි:\n<strong>$1</strong>",
+ "translate-checks-balance": "එහි {{PLURAL:$2|parentheses|වරහන්}} අසමසම ගණනක් තිබේ :\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "පහත {{PLURAL:$2|සබැඳිය|සබැඳියන් $2}} ගැටළු සහගතයි:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "පහත {{PLURAL:$2|සබැඳිය|සබැඳියන් $2}} මඟ හැරී ඇත:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "නිර්වචනය <nowiki>{{PLURAL:}}</nowiki> භාවිතා කරයි නමුත් පරිවර්තනය එසේ නොකරයි.",
+ "translate-checks-pagename": "නාමාඅවකාශය නිර්වචනයෙන් වෙනස් වී ඇත",
+ "translate-checks-format": "පරිවර්තනය විසින් නිර්වචනය අනුගමනය නොකරනවා හෝ වලංගු නොවන කාරකරීතියක් තිබේ: $1",
+ "translate-checks-escape": "පහත මඟහැරීම් අහම්බෙන් සිදු වූ ඒවා විය හැක: <strong>$1</strong>",
+ "translate-checks-parametersnotequal": "පරාමිති ගණනය {{PLURAL:$1|$1}}; {{PLURAL:$2|$2}} විය යුතුයි.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> විකෘති වී ඇත.",
+ "translate-checks-fudforum-syntax": "මෙම ව්‍යාපෘතියෙහි <nowiki>$1</nowiki> වෙනුවට <nowiki>$2</nowiki> භාවිතා කරන්න.",
+ "translate-pref-editassistlang": "සහයක භෂාවන්:",
+ "prefs-translate": "පරිවර්තන විකල්පයන්",
+ "translate-pref-editassistlang-bad": "ලයිස්තුවේ වලංගු නොවන භාෂා කේතයක්:\n<nowiki>$1</nowiki>.",
+ "right-translate": "පරිවර්තන අතුරුමුහුණත භාවිතාකරමින් සංස්කරණය කරන්න",
+ "right-translate-manage": "පණිවුඩ සමූහයන් කළමනාකරණය කරන්න",
+ "action-translate-manage": "පණිවුඩ කාණ්ඩ කළමනාකරණය කරන්න",
+ "right-translate-import": "මාර්ගඅපගත පරිවර්තන ආයාත කරන්න",
+ "action-translate-import": "මාර්ගඅපගත පරිවර්තන ආයාත කරන්න",
+ "right-translate-messagereview": "පරිවර්තන නිරීක්ෂණය කරන්න",
+ "right-translate-groupreview": "පණිවුඩ සමූහයන්වල කාර්යගැලීමේ තත්ත්වය වෙනස් කරන්න",
+ "translate-rc-translation-filter": "පරිවර්තන පෙරන්න:",
+ "translate-rc-translation-filter-no": "කිසිවක් නොකරන්න",
+ "translate-rc-translation-filter-only": "පරිවර්තන පමණක් පෙන්වන්න",
+ "translate-rc-translation-filter-filter": "පරිවර්තන පෙරහන්ගත කරන්න",
+ "translate-rc-translation-filter-site": "අඩවි පණිවුඩවලට කෙරූ වෙනස්කම් පමණි",
+ "translationstats": "පරිවර්තන සංඛ්‍යා ලේඛන",
+ "translate-stats-edits": "සංස්කරණ",
+ "translate-stats-users": "පරිවර්තකයන්",
+ "translate-stats-registrations": "ලියාපදිංචි කිරීම්",
+ "translate-stats-reviews": "නිරීක්ෂණ",
+ "translate-stats-reviewers": "විචාරකයෝ",
+ "translate-statsf-options": "ප්‍රස්තාර විකල්පයන්",
+ "translate-statsf-width": "පික්සල් වලින් පළල:",
+ "translate-statsf-height": "පික්සල් වලින් උස:",
+ "translate-statsf-days": "කාලපරිච්ඡේදය දිනවලින්:",
+ "translate-statsf-start": "ආරම්භක දිනය:",
+ "translate-statsf-scale": "කැටිතිබව:",
+ "translate-statsf-scale-months": "මාස",
+ "translate-statsf-scale-weeks": "සති",
+ "translate-statsf-scale-days": "දින",
+ "translate-statsf-scale-hours": "පැය",
+ "translate-statsf-count": "මිම්ම:",
+ "translate-statsf-count-edits": "සංස්කරණයන් සංඛ්‍යාව",
+ "translate-statsf-count-users": "සක්‍රීය පරිවර්තකයෝ",
+ "translate-statsf-count-registrations": "නව පරිශීලකයින්",
+ "translate-statsf-count-reviews": "පරිවර්තන නිරීක්ෂණ",
+ "translate-statsf-count-reviewers": "විචාරකයෝ",
+ "translate-statsf-language": "කොමාවෙන්-වෙන්වූ භාෂා කේතයන් ලැයිස්තුව:",
+ "translate-statsf-group": "කොමාවෙන්-වෙන්වූ සමූහ කේතයන් ලැයිස්තුව:",
+ "translate-statsf-submit": "පෙරදසුන",
+ "translate-tag-page-desc": "[[$2|$1]] විකි පිටුවෙහි පරිවර්තනය.",
+ "translate-sidebar-alltrans": "වෙනත් භාෂා වලින්",
+ "translations": "සියළු පරිවර්තන",
+ "translations-summary": "ලබාගත හැකි සියලුම පරිවර්තන පෙන්වීම සඳහා පණිවුඩ නාමය පහතින් යොදන්න.",
+ "translate-translations-no-message": "\"$1\" යනු පරිවර්තනය කල හැකි පණිවුඩයක් නොවේ",
+ "translate-translations-none": "\"$1\" සඳහා පරිවර්තන කිසිවක් නොමැත",
+ "translate-translations-count": "{{PLURAL:$1|එක් පරිවර්තනයක්|පරිවර්තන $1 ක්}} හමුවුණා.",
+ "translate-translations-fieldset-title": "පණිවුඩය",
+ "translate-translations-messagename": "නම:",
+ "translate-translations-project": "ව්‍යාපෘතිය:",
+ "translate-translations-including-no-param": "උපපිටු පරමිතියෙහි කරුණාකර වලංගු පණිවුඩ යතුරක් විශේෂණය කරන්න",
+ "translate-translations-history-short": "එච්",
+ "languagestats": "භාෂා සංඛ්‍යානයන්",
+ "languagestats-summary": "භාෂාවක් සඳහා සියලුම පණිවුඩ කාණ්ඩවල පරිවර්තන සංඛ්‍යාලේඛන මෙම පිටුව විසින් පෙන්වයි.",
+ "languagestats-stats-for": "$1 සඳහා පරිවර්තන සංඛ්‍යා ලේඛන ($2).",
+ "languagestats-recenttranslations": "නව පරිවර්තන",
+ "translate-langstats-incomplete": "මෙම පිටුවෙහි තිබෙන සමහරක් සංඛ්‍යාලේඛන අසම්පූර්ණයි. තවත් සංඛ්‍යාලේඛන ලබාගැනීම සඳහා නැවත පූරණය කරන්න.",
+ "translate-langstats-expand": "විදහන්න",
+ "translate-langstats-collapse": "හකුලන්න",
+ "translate-langstats-expandall": "සියල්ලම විදහන්න",
+ "translate-langstats-collapseall": "සියල්ලම හකුලන්න",
+ "translate-language-code": "භාෂා කේතය",
+ "translate-language-code-field-name": "භාෂා කේතය:",
+ "translate-suppress-complete": "මුළුමනින්ම පරිවර්තනයකල පණිවුඩ කාණ්ඩ යටපත්කරන්න",
+ "translate-ls-noempty": "මුළුමනින්ම පරිවර්තනය නොකළ පණිවුඩ කාණ්ඩ යටපත් කරන්න",
+ "translate-language": "භාෂාව",
+ "translate-total": "පණිඩුඩ",
+ "translate-untranslated": "පරිවර්තනය නොකල",
+ "translate-percentage-complete": "සමාප්තිය",
+ "translate-percentage-fuzzy": "යල් පැන ගිය",
+ "translate-languagestats-overall": "සියලු පණිවුඩ සමූහයන් එක්ව",
+ "translate-ls-submit": "සංඛ්‍යා ලේඛන පෙන්වන්න",
+ "translate-ls-column-group": "පණිවුඩ සමූහය",
+ "translate-mgs-pagename": "පණිවුඩ සමූහ සංඛ්‍යානය",
+ "translate-mgs-fieldset": "අභිරුචි පෙන්වන්න",
+ "translate-mgs-group": "පණිවුඩ සමූහය:",
+ "translate-mgs-nocomplete": "සම්පුර්ණයෙන් පරිවර්තනය කල භාෂාවන් නොපෙන්වන්න",
+ "translate-mgs-noempty": "පරිවර්තන කිසිවක් නොමැති භාෂා නොපෙන්වන්න",
+ "translate-mgs-submit": "සංඛ්‍යා ලේඛන පෙන්වන්න",
+ "translate-mgs-column-language": "බස",
+ "translate-mgs-totals": "සියලු භාෂාවන් එක්ව",
+ "translate-mgs-invalid-group": "විශේෂණය කෙරූ සමුහය $1 නොපවතියි.",
+ "translate-mgs-nothing": "අයැදූ සංඛ්‍යා ලේඛන වල පෙන්වීමට දෙයක් නැත.",
+ "supportedlanguages": "සහය දක්වන භාෂාවන්",
+ "supportedlanguages-colorlegend": "වර්ණය සඳහා ප්‍රබන්ධය: අන්තිම පරිවර්තනය දින $1 කට පෙර.",
+ "supportedlanguages-translators": "{{PLURAL:$2|පරිවර්තකයා|පරිවර්තකයන්}}: $1",
+ "supportedlanguages-recenttranslations": "මෑත පරිවර්තන",
+ "supportedlanguages-count": "එකතුව වශයෙන් {{PLURAL:$1|භාෂා|භාෂා}} $1 ක් ඇත.",
+ "translate-jssti-add": "ලැයිස්තුවට එක් කරන්න",
+ "managemessagegroups": "පණිවුඩ සමූහ කළමනාකරණය",
+ "translate-smg-notallowed": "ඔබට මෙම ක්‍රියාව සිදු කිරීමට ඉඩ ලබා නොදේ.",
+ "translate-smg-nochanges": "ක්‍රියානනය කිරීමට වෙනස්කම් නොමැත.",
+ "translate-smg-submit": "ක්‍රියානනය සඳහා වෙනස්කම් යොමන්න",
+ "translate-smg-left": "විකියෙහි පණිවුඩ අන්තර්ගතය",
+ "translate-smg-right": "එන වෙනස්කම්",
+ "translate-manage-import-diff": "පණිවුඩය $1 | ක්‍රියාකාරකම්: $2",
+ "translate-manage-import-new": "නව පණිවුඩය $1",
+ "translate-manage-import-deleted": "මකාදැමුනු පණිවුඩය $1",
+ "translate-manage-action-import": "ආයාත කරන්න",
+ "translate-manage-action-conflict": "ආයාත කරමින් නිරීක්ෂණය සඳහා සලකුණු කරන්න",
+ "translate-manage-action-ignore": "නොසලකන්න",
+ "translate-manage-action-fuzzy": "පරිවර්තන ආයාත කරමින් නිරීක්ෂණය සඳහා සලකුණු කරන්න",
+ "translate-manage-nochanges": "මෙම කාණ්ඩය සඳහා පණිවුඩ නිර්වචනවල කිසිදු වෙනසක් නොමැත.",
+ "translate-manage-nochanges-other": "මෙම භාෂාව සඳහා වෙනස්කම් කිසිවක් නොතිබුණි.\nසමූහ විස්තර දසුන වෙත නැවත යාම සඳහා පහත සබැඳිය භාවිතා කරන්න.",
+ "translate-manage-import-summary": "බාහිර මූලාශ්‍රයකින් නව අනුවාදය ආයාත කරමින්",
+ "translate-manage-import-ignore": "$1 පණිවුඩය මඟහරිමින්.",
+ "translate-manage-conflict-summary": "බාහිර මූලාශ්‍රයක් වෙතින් නව අනුවාදය ආයාත කරමින්.\nකරුණාකර පිරික්සන්න.",
+ "translate-manage-submit": "සම්පාදනය කරන්න",
+ "translate-manage-import-ok": "$1 පිටුවෙහි නව අනුවාදයක් ආයාත කරන ලදී.",
+ "translate-manage-import-done": "සියල්ල කරන ලදී",
+ "importtranslations": "පරිවර්තන ආයාත කරන්න",
+ "translate-import-from-local": "ප්‍රාදේශීය ගොනු උඩුගත කෙරුම:",
+ "translate-import-load": "ගොනුව පූරණය කරන්න",
+ "translate-import-err-dl-failed": "ගොනුව පමුණුවීමට නොහැක:\n$1",
+ "translate-import-err-ul-failed": "ගොනු උඩුගත කෙරුම සාර්ථකව සිදු නොවුණි",
+ "translate-import-err-invalid-title": "ඉදිරිපත්කල ගොනු නාමය <nowiki>$1</nowiki> වලංගු නොවේ.",
+ "translate-import-err-no-such-file": "<nowiki>$1</nowiki> ගොනුව නොපවතියි හෝ තවමත් ප්‍රාදේශීය වශයෙන් උඩුගත කල නොමැත.",
+ "translate-js-support-unsaved-warning": "ඔබ සතුව නොසුරැකූ පරිවර්තන ඇත.",
+ "translate-gs-pos": "ස්ථාන.",
+ "translate-gs-code": "කේතය",
+ "translate-gs-continent": "මහාද්වීපය",
+ "translate-gs-speakers": "කථිකයෝ",
+ "translate-gs-score": "ලකුණ",
+ "translate-gs-multiple": "බහුවිධ",
+ "translate-gs-count": "ගණනය",
+ "translate-gs-total": "මුළු",
+ "translate-gs-avgscore": "සාමාන්‍ය. අගය",
+ "translate-documentation-language": "පණිවුඩ ප්‍රලේඛනය",
+ "translate-searchprofile": "පරිවර්තන",
+ "translate-searchprofile-tooltip": "සියලු පරිවර්තනයන්ගෙන් සොයන්න",
+ "translate-search-languagefilter": "භාෂාව අනුව පෙරහන:",
+ "translate-search-nofilter": "පෙරීමක් නොමැත",
+ "log-name-translationreview": "පරිවර්තන නිරීක්ෂණ ලඝු සටහන",
+ "logentry-translationreview-message": "$1 විසින් $3 පරිවර්තනය {{GENDER:$2|පිළිගන්නා ලදී}}",
+ "translate-workflow-state-": "(සකසා නැත)",
+ "translate-workflowstatus": "තත්වය: $1",
+ "translate-workflow-set-doing": "සකසමින්...",
+ "translate-stats-workflow": "තත්වය",
+ "translate-workflowgroup-label": "Workflow තත්ත්ව",
+ "translate-dynagroup-recent-label": "මෑත පරිවර්තන",
+ "translate-dynagroup-additions-label": "මෑත එක් කිරීම්",
+ "translate-dynagroup-additions-desc": "මෙම පණිවුඩ සමූහය නව සහ වෙනස් වූ පණිවුඩ පෙන්වයි.",
+ "translate-msggroupselector-projects": "පණිවුඩ සමූහය",
+ "translate-msggroupselector-search-placeholder": "සමූහ සොයන්න",
+ "translate-msggroupselector-search-all": "සියල්ල",
+ "translate-msggroupselector-search-recent": "මෑත",
+ "translate-msggroupselector-view-subprojects": "{{PLURAL:$1|උපප්‍රවර්ග}} $1",
+ "tux-languageselector": "වෙත පරිවර්තනය කරන්න",
+ "tux-tab-all": "සියල්ල",
+ "tux-tab-untranslated": "පරිවර්තනය නොකල",
+ "tux-tab-outdated": "යල් පැන ගිය",
+ "tux-tab-translated": "පරිවර්තනය කෙරූ",
+ "tux-edit": "සංස්කරණය",
+ "tux-status-optional": "වෛකල්පිත",
+ "tux-status-fuzzy": "යල් පැන ගිය",
+ "tux-status-proofread": "සෝදුපත් බැලීම",
+ "tux-status-translated": "පරිවර්තනය කෙරූ",
+ "tux-status-unsaved": "සුරක්ෂිත නොවේ",
+ "tux-editor-save-button-label": "පරිවර්තනය සුරකින්න",
+ "tux-editor-skip-button-label": "මීළඟ පියවරට පනින්න",
+ "tux-editor-edit-desc": "විස්තරය සංස්කරණය කරන්න",
+ "tux-editor-suggestions-title": "යෝජනා",
+ "tux-editor-in-other-languages": "වෙනත් භාෂා වලින්",
+ "tux-editor-need-more-help": "තවත් උදව් අවශ්‍යද?",
+ "tux-editor-ask-help": "තවත් තොරතුරු සඳහා විමසන්න",
+ "tux-editor-tm-match": "$1% ගැලපේ",
+ "tux-notices-more": "{{PLURAL:$1|තවත් $1}}",
+ "tux-notices-hide": "සඟවන්න",
+ "tux-editor-save-failed": "පරිවර්තනය සුරැකීම අසාර්ථකයි: $1"
+}
diff --git a/Translate/i18n/core/sje.json b/Translate/i18n/core/sje.json
new file mode 100644
index 00000000..6f564ea7
--- /dev/null
+++ b/Translate/i18n/core/sje.json
@@ -0,0 +1,87 @@
+{
+ "@metadata": {
+ "authors": [
+ "Olve Utne"
+ ]
+ },
+ "translate": "Jårrgålä",
+ "translate-taction-translate": "Jårrgålä",
+ "translate-taction-proofread": "Giehtjadä",
+ "translate-taction-lstats": "Giellastatistijjka",
+ "translate-taction-mstats": "Sárdnomgruhppastatistijjka",
+ "translate-page-group": "Gruhppa",
+ "translate-page-language": "Giella",
+ "translate-page-navigation-legend": "Stivvrim",
+ "translate-next": "Maŋep bielláj",
+ "translate-prev": "Åvdep bielláj",
+ "translate-page-edit": "rävvdadä",
+ "translate-edit-title": "Rävvdadä «$1»",
+ "translate-pref-editassistlang": "Vähkkegiela:",
+ "action-translate-messagereview": "Giehtjadä jårrgålimijt",
+ "translate-rcfilters-translations": "Jårrgålime",
+ "translate-rcfilters-translations-only-label": "Jårrgålime",
+ "translate-stats-edits": "Rävvdadime",
+ "translate-stats-users": "Jårrgåliejje",
+ "translate-stats-reviews": "Giehtjadime",
+ "translate-stats-reviewers": "Giehtjadiejje",
+ "translate-statsf-scale-years": "Jage",
+ "translate-statsf-scale-months": "Máno",
+ "translate-statsf-scale-weeks": "Vahko",
+ "translate-statsf-scale-days": "Biejve",
+ "translate-statsf-scale-hours": "Tijma",
+ "translate-statsf-count-registrations": "Åđđå adneja",
+ "translate-statsf-count-reviewers": "Giehtjadiejje",
+ "translate-sidebar-alltrans": "Mubbe gielajn",
+ "translations": "Gájk jårrgålime",
+ "translate-translations-messagename": "Namma:",
+ "translate-translations-project": "Prosjäkkta:",
+ "languagestats": "Giellastatistijjka",
+ "translate-language": "Giella",
+ "translate-ls-submit": "Vuosedä statistijkav",
+ "translate-ls-column-group": "Sárdnomgruhppa",
+ "translate-mgs-pagename": "Sárdnomgruhppastatistijjka",
+ "translate-mgs-group": "Sárdnomgruhppa:",
+ "translate-mgs-submit": "Vuosedä statistijkav",
+ "translate-mgs-column-language": "Giella",
+ "translate-smg-rename-cancel": "Buŧŧki",
+ "translate-smg-strong-sync-help": "Vähkke",
+ "translate-smg-group-message-action-history": "Histurrja",
+ "translate-smg-group-message-message-other-langs": "Mubbe giela:",
+ "translate-gs-pos": "Pos.",
+ "translate-gs-continent": "Kontinännta",
+ "translate-gs-speakers": "Giellaadneja",
+ "translate-gs-count": "Låhko",
+ "translate-documentation-language": "Tjåhkketjála sárdnoma birra",
+ "translate-searchprofile": "Jårrgålime",
+ "translate-msggroupselector-projects": "Sárdnomgruhppa",
+ "translate-msggroupselector-search-all": "Gájjka",
+ "translate-msggroupselector-search-recent": "Miŋijmus",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|vuolepgruhppa|vuolepgruhpa}}",
+ "tux-languageselector": "Jårrgålä dán giellaj",
+ "tux-tab-all": "Gájjka",
+ "tux-tab-untranslated": "E jårrgålam",
+ "tux-tab-outdated": "Därrbu åđåstuvvut",
+ "tux-tab-translated": "Jårrgålam",
+ "tux-tab-unproofread": "E giehtjadam",
+ "tux-edit": "Rävvdadä",
+ "tux-status-fuzzy": "Därrbu åđåstuvvut",
+ "tux-status-proofread": "Giehtjadam",
+ "tux-status-translated": "Jårrgålam",
+ "tux-editor-cancel-button-label": "Buŧŧki",
+ "tux-editor-in-other-languages": "Mubbe gielajn",
+ "tux-editor-need-more-help": "Dárbo ienap viehkev?",
+ "tux-editor-message-desc-more": "Vuosedä ienap",
+ "tux-editor-message-desc-less": "Vuosedä binnep",
+ "tux-editor-clear-translated": "Tjiega jårrgålum",
+ "tux-editor-proofreading-mode": "Giehtjadä",
+ "tux-editor-translate-mode": "Lissto",
+ "tux-editor-proofreading-hide-own-translations": "Tjiega duv jårrgålimijt",
+ "tux-editor-proofreading-show-own-translations": "Vuosedä duv jårrgålimijt",
+ "tux-proofread-edit-label": "Rävvdadä",
+ "tux-editor-page-mode": "Bielle",
+ "tux-editor-doc-editor-cancel": "Buŧŧki",
+ "tux-empty-list-translated-action": "Jårrgålä",
+ "tux-editor-message-tools-history": "Histurrja",
+ "tux-editor-message-tools-delete": "Gádodä",
+ "tux-editor-message-tools-translations": "Gájk jårrgålime"
+}
diff --git a/Translate/i18n/core/sk.json b/Translate/i18n/core/sk.json
new file mode 100644
index 00000000..f8c0b3df
--- /dev/null
+++ b/Translate/i18n/core/sk.json
@@ -0,0 +1,311 @@
+{
+ "@metadata": {
+ "authors": [
+ "Helix84",
+ "Kusavica",
+ "LacoR",
+ "Luky001",
+ "Mormegil",
+ "Robert Važan",
+ "Rudko",
+ "Sudo77(new)",
+ "Teslaton",
+ "TomášPolonec",
+ "Vegetator",
+ "Yardom78"
+ ]
+ },
+ "translate": "Preložiť",
+ "translate-extensionname": "Preložiť",
+ "translate-desc": "[[Special:Translate|Špeciálna stránka]] na preklad MediaWiki a iného",
+ "translate-fuzzybot-desc": "Toto je špeciálny systémový účet používaný [https://www.mediawiki.org/wiki/Extension:Translate rozšírením MediaWiki pre preklady], používaný pre údržbu prekladov.\nTento účet je súčasťou softvéru MediaWiki a nepatrí žiadnemu užívateľovi.",
+ "translate-taskui-export-to-file": "Exportovať v natívnom formáte",
+ "translate-taskui-export-as-po": "Exportovať pre preklad off-line",
+ "translate-taction-translate": "Preklad",
+ "translate-taction-proofread": "Skontrolovať",
+ "translate-taction-lstats": "Štatistika jazykov",
+ "translate-taction-mstats": "Štatistika skupín správ",
+ "translate-taction-export": "Export",
+ "translate-taction-disabled": "Táto akcia je na tejto wiki vypnutá.",
+ "translate-page-no-such-language": "Zadaný jazyk bol neplatný.",
+ "translate-page-no-such-group": "Zadaná skupina bola neplatná.",
+ "translate-page-disabled": "Preklady v tejto skupine do tohto jazyka boli zakázané. Dôvod:\n\n<em>$1</em>",
+ "translate-language-disabled": "Preklad do tohto jazyka je zakázaný.",
+ "translate-page-settings-legend": "Možnosti",
+ "translate-page-group": "Skupina",
+ "translate-page-language": "Jazyk",
+ "translate-page-limit": "Limit",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|správa|správy|správ}} na stránku",
+ "translate-submit": "Načítať",
+ "translate-page-navigation-legend": "Navigácia",
+ "translate-page-showing": "Zobrazujú sa správy $1 až $2 z $3.",
+ "translate-page-showing-all": "{{PLURAL:$1|Zobrazuje sa $1 správa|Zobrazujú sa $1 správy|Zobrazuje sa $1 správ}}.",
+ "translate-page-showing-none": "Žiadne správy.",
+ "translate-next": "Ďalšia stránka",
+ "translate-prev": "Predošlá stránka",
+ "translate-page-description-legend": "Informácie o skupine",
+ "translate-page-description-hasoptional": "Táto skupina obsahuje voliteľné správy.\nVoliteľné správy sa majú prekladať len v prípade, ak má váš jazyk špecifické potreby,\nako napr. nepoužívanie medzier, alebo transkripcie vlastných mien. $1",
+ "translate-page-description-hasoptional-open": "Zobraziť voliteľné správy.",
+ "translate-page-edit": "upraviť",
+ "translate-optional": "(voliteľné)",
+ "translate-ignored": "(ignorované)",
+ "translate-edit-title": "Upraviť \"$1\"",
+ "translate-edit-definition": "Definícia správy",
+ "translate-edit-contribute": "prispejte",
+ "translate-edit-no-information": "<em>Táto správa nemá dokumentáciu.\nAk viete kde alebo ako je táto správa použitá, môžete pomôcť ostatným prekladateľom tým, že pridáte dokumentáciu.</em>",
+ "translate-edit-information": "Informácia o správe ($1)",
+ "translate-edit-warnings": "Upozornenia na neúplné preklady",
+ "translate-edit-tmmatch-source": "Zdroj prekladu: $1",
+ "translate-edit-tmmatch": "$1% zhoda",
+ "translate-edit-nopermission": "Na preklad správ potrebujete prekladateľské povolenie.",
+ "translate-edit-askpermission": "Získať oprávnenie",
+ "exporttranslations": "Exportovať preklady",
+ "translate-export-form-format": "Formát",
+ "translate-export-invalid-format": "Prosím špecifikujte platný formát.",
+ "translate-export-not-supported": "Export prekladov nie je podporovaný.",
+ "translate-checks-parameters": "{{PLURAL:$2|Nasledovný parameter nie je použitý|Nasledovné parametre nie sú použité}}: <strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Nasledovný parameter je neznámy|Nasledovné parametre sú neznáme}}: <strong>$1</strong>",
+ "translate-checks-balance": "Nevyvážené počty {{PLURAL:$2|zátvoriek|zátvoriek}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Nasledovný odkaz je problematický|Nasledovné odkazy sú problematické}}: <strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Nasledovný odkaz chýba|Nasledovné $2 odkazy chýbajú|Nasledovných $2 odkazov chýba}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Definícia používa <nowiki>{{PLURAL:}}</nowiki>, ale preklad nie.",
+ "translate-checks-plural-dupe": "Na konci <nowiki>{{PLURAL:}}</nowiki> sú uvedené duplicitné varianty. Namiesto <nowiki>{{PLURAL:$1|námestie|námestie|námestie}}</nowiki> má byť zadané len <nowiki>{{PLURAL:$1|námestie}}</nowiki>.",
+ "translate-checks-pagename": "Oproti definícii sa zmenil menný priestor",
+ "translate-checks-format": "Tento preklad nezodpovedá definícii alebo má neplatnú syntax: $1",
+ "translate-checks-escape": "{{PLURAL:$2|Nasledovná úniková klauzula je možno uvedená|Nasledovné únikové klauzuly sú možno uvedené}} omylom: <strong>$1</strong>. {{PLURAL:$4|Platná úniková klauzula je|Platné únikové klauzuly zahŕňajú:}} $3.",
+ "translate-checks-parametersnotequal": "Počet parametrov je {{PLURAL:$1|$1}}; mal by byť {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki>má nesprávny formát.",
+ "translate-checks-fudforum-syntax": "V tomto projekte používať <nowiki>$1</nowiki> namiesto <nowiki>$2</nowiki>.",
+ "translate-pref-editassistlang": "Pomocné jazyky:",
+ "prefs-translate": "Možnosti prekladu",
+ "translate-pref-editassistlang-help": "Čiarkami oddelený zoznam kódov jazykov.\nPreklady správ v týchto jazykoch sa zobrazujú, keď prekladáte.\nPredvolený zoznam jazykov závisí na vašom jazyku.",
+ "translate-pref-editassistlang-bad": "Neplatný kód jazyka v zozname:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Vykonávať úpravy pomocou rozhrania Preložiť",
+ "right-translate-manage": "Spravovať skupiny správ",
+ "action-translate-manage": "spravovať skupiny správ",
+ "right-translate-import": "Importovať offline preklady",
+ "action-translate-import": "import offline prekladov",
+ "right-translate-messagereview": "Hodnotenie prekladov",
+ "translate-rcfilters-translations": "Preklady",
+ "translate-rcfilters-translations-only-label": "Preklady",
+ "translate-rcfilters-translations-filter-label": "Bez prekladov",
+ "translate-rcfilters-translations-filter-desc": "Všetky zmeny, ktoré nie sú preklady.",
+ "translate-rc-translation-filter": "Preklady filtrov:",
+ "translate-rc-translation-filter-no": "Nevykonávať nič",
+ "translate-rc-translation-filter-only": "Iba zobraziť preklady",
+ "translate-rc-translation-filter-filter": "Vyfiltrovať preklady",
+ "translate-rc-translation-filter-site": "Iba zmeny oznamu lokality",
+ "translationstats": "Štatistiky prekladov",
+ "translate-stats-edits": "Úprav",
+ "translate-stats-users": "Prekladatelia",
+ "translate-stats-registrations": "Registrácie",
+ "translate-stats-reviews": "Hodnotenia",
+ "translate-stats-reviewers": "Hodnotitelia",
+ "translate-statsf-intro": "Pomocou tohto formulára môžete tvoriť jednoduché štatistiky. Všetky hodnoty majú hornú a spodnú hranicu.",
+ "translate-statsf-options": "Možnosti grafu",
+ "translate-statsf-width": "Šírka v pixeloch:",
+ "translate-statsf-height": "Výška v pixeloch:",
+ "translate-statsf-days": "Časový interval v dňoch:",
+ "translate-statsf-start": "Počiatočný dátum:",
+ "translate-statsf-scale": "Granularita:",
+ "translate-statsf-scale-months": "Mesiace",
+ "translate-statsf-scale-weeks": "Týždne",
+ "translate-statsf-scale-days": "Dni",
+ "translate-statsf-scale-hours": "Hodiny",
+ "translate-statsf-count": "Meranie:",
+ "translate-statsf-count-edits": "Počet úprav",
+ "translate-statsf-count-users": "Aktívni prekladatelia",
+ "translate-statsf-count-registrations": "Noví používatelia",
+ "translate-statsf-count-reviews": "Hodnotení",
+ "translate-statsf-count-reviewers": "Hodnotitelia",
+ "translate-statsf-language": "Čiarkami oddelený zoznam kódov jazykov:",
+ "translate-statsf-group": "Čiarkami oddelený zoznam kódov skupín:",
+ "translate-statsf-submit": "Náhľad",
+ "translate-tag-page-desc": "Preklad wiki stránky [[$2|$1]] z jazyka $3 ($4)..",
+ "translate-sidebar-alltrans": "V iných jazykoch",
+ "translations": "Všetky preklady",
+ "translations-summary": "Všetky dostupné preklady zobrazíte po zadaní názvu správy.",
+ "translate-translations-no-message": "„$1“ nie je správa, ktorú možno preložiť",
+ "translate-translations-none": "Neexistujú žiadne preklady správy „$1“",
+ "translate-translations-count": "{{PLURAL:$1|Nájdený $1 preklad|Nájdené $1 preklady|Nájdených $1 prekladov}}.",
+ "translate-translations-fieldset-title": "Správa",
+ "translate-translations-messagename": "Názov:",
+ "translate-translations-project": "Projekt:",
+ "translate-translations-including-no-param": "Prosím, v parametri subpage uveďte platný kľúč správy",
+ "translate-translations-history-short": "h",
+ "languagestats": "Štatistika jazykov",
+ "languagestats-summary": "Táto stránka zobrazuje štatistiku prekladov všetkých skupín správ jazyka.",
+ "messagegroupstats-summary": "Táto stránka zobrazuje štatistiku skupín správ.",
+ "languagestats-stats-for": "Štatistika prekladov pre jazyk $1 ($2).",
+ "languagestats-recenttranslations": "nedávne preklady",
+ "translate-langstats-incomplete": "Niektoré štatistiky na tejto stránke sú neúplné. Aktuálnejšie údaje získate znovunačítaním stránky.",
+ "translate-langstats-expand": "rozbaliť",
+ "translate-langstats-collapse": "zbaliť",
+ "translate-langstats-expandall": "rozbaliť všetky",
+ "translate-langstats-collapseall": "zbaliť všetky",
+ "translate-language-code": "Kód jazyka",
+ "translate-language-code-field-name": "Kód jazyka:",
+ "translate-suppress-complete": "Nezobrazovať skupiny s komplet dokončeným prekladom",
+ "translate-ls-noempty": "Nezobrazovať skupiny s vôbec nezačatým prekladom",
+ "translate-language": "Jazyk:",
+ "translate-total": "Správy",
+ "translate-untranslated": "Nepreložené",
+ "translate-percentage-complete": "Dokončené",
+ "translate-percentage-fuzzy": "Zastarané",
+ "translate-percentage-proofread": "Skontrolované",
+ "translate-languagestats-overall": "Všetky skupiny dohromady",
+ "translate-ls-submit": "Zobraziť štatistiku",
+ "translate-ls-column-group": "Skupina správ",
+ "translate-mgs-pagename": "Štatistika skupín správ",
+ "translate-mgs-fieldset": "Voľby zobrazenia",
+ "translate-mgs-group": "Skupina správ:",
+ "translate-mgs-nocomplete": "Nezobrazovať jazyky s komplet dokončeným prekladom",
+ "translate-mgs-noempty": "Nezobrazovať jazyky s vôbec nezačatým prekladom",
+ "translate-mgs-submit": "Zobraziť štatistiku",
+ "translate-mgs-column-language": "Jazyk",
+ "translate-mgs-totals": "{{PLURAL:$1|Celkom jediný jazyk|Všetky $1 jazyky dokopy|Všetkých $1 jazykov dokopy|2=Obidva jazyky dokopy}}",
+ "translate-mgs-invalid-group": "Zadaná skupina $1 neexistuje.",
+ "translate-mgs-nothing": "V požadovej štatistike nie je čo zobraziť.",
+ "supportedlanguages": "Podporované jazyky",
+ "supportedlanguages-summary": "Na tejto stránke sa nachádza zoznam všetkých jazykov podporovaných na {{GRAMMAR:6sg|{{SITENAME}}}}\nspolu s menami prekladateľov, ktorí na jazyku pracujú.\nČím viac úprav prekladateľ poskytol, tým väčším písmom sa jeho meno zobrazuje.\nFarba podčiarknutia znázorňuje, ako nedávno tu bol prekladateľ aktívny.",
+ "supportedlanguages-colorlegend": "Legenda k farbám: Posledný preklad pred {{PLURAL:$1|$1 dňom|$1 dňami}}.",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Prekladateľ|Prekladateľka}}|Prekladatelia}}: $1",
+ "supportedlanguages-recenttranslations": "nedávne preklady",
+ "supportedlanguages-count": "Dohromady $1 {{PLURAL:$1|jazyk|jazyky|jazykov}}.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|editácia|editácie|editácií}} – posledná pred $3 {{PLURAL:$3|dňom|dňami}}",
+ "abusefilter-edit-builder-vars-translate-source-text": "Zdrojový text prekladovej jednotky",
+ "translate-jssti-add": "Pridať do zoznamu",
+ "managemessagegroups": "Manažment skupín správ",
+ "translate-smg-nochanges": "Neexistujú žiadne zmeny na spracovanie.",
+ "translate-manage-import-diff": "Správa $1 | Operácie: $2",
+ "translate-manage-import-new": "Nová správa $1",
+ "translate-manage-import-deleted": "Zmazaná správa $1",
+ "translate-manage-action-import": "Importovať",
+ "translate-manage-action-conflict": "Importovať a označiť ako neúplné",
+ "translate-manage-action-ignore": "Ignorovať",
+ "translate-manage-action-fuzzy": "Importovať a označiť preklady ako neúplné",
+ "translate-manage-nochanges": "V definícii správ tejto skupiny nenastali žiadne zmeny.",
+ "translate-manage-nochanges-other": "V tomto jazyku nenastali žiadne zmeny.\nDolu uvedeným odkazom sa vrátite na zobrazenie podrobností skupiny.",
+ "translate-manage-inconsistent": "Zistená nekonzistencia v požiadavku.\nProsím, skontrolujte zmeny a skúste to znova. Podrobnosti: $1.",
+ "translate-manage-toolong": "Maximálny čas spracovania $1 {{PLURAL:$1|sekunda|sekundy|sekúnd}} bol prekročený.\nV spracovaní môžete pokračovať opätovným odoslaním formulára.",
+ "translate-manage-import-summary": "Importuje sa nová verzia z externého zdroja",
+ "translate-manage-import-ignore": "Preskakuje sa správa $1.",
+ "translate-manage-conflict-summary": "Importuje sa nová verzia z externého zdroja. Prosím, skontrolujte ju.",
+ "translate-manage-submit": "Vykonať",
+ "translate-manage-intro-other": "Nižšie je zoznam zmien v prekladoch do jazyka $1.\nProsím, skontrolujte zmeny a vyberte, čo sa má s každou aktualizáciou vykonať.\nAk sa rozhodnete zmeny ignorovať, táto akcia je iba dočasná.",
+ "translate-manage-import-ok": "Naimportované: $1",
+ "translate-manage-import-done": "Import dokončený!",
+ "importtranslations": "Importovať preklady",
+ "translate-import-from-local": "Nahranie lokálneho súboru:",
+ "translate-import-load": "Nahrať súbor",
+ "translate-import-err-dl-failed": "Nepodarilo sa získať súbor:\n$1",
+ "translate-import-err-ul-failed": "Nahrávanie súboru zlyhalo",
+ "translate-import-err-invalid-title": "Poskytnutý názov súboru „<nowiki>$1</nowiki>“ bol neplatný.",
+ "translate-import-err-no-such-file": "Súbor „<nowiki>$1</nowiki>“ neexistuje alebo nebol lokálne nahraný.",
+ "translate-import-err-stale-group": "Skupina správ, do ktorej patrí tento súbor neexistuje.",
+ "translate-import-err-no-headers": "Súbor nie je správne vytvorený Gettext súbor vo formáte rozšírenia Translate:\nNebolo možné určiť skupinu a jazyk z hlavičiek súboru.",
+ "translate-js-support-unsaved-warning": "Máte neuložené preklady.",
+ "translate-gs-pos": "Poz.",
+ "translate-gs-code": "Kód",
+ "translate-gs-continent": "Kontinent",
+ "translate-gs-speakers": "Hovoriacich",
+ "translate-gs-score": "Skóre",
+ "translate-gs-multiple": "Viaceré",
+ "translate-gs-count": "Počet",
+ "translate-gs-total": "Celkom",
+ "translate-gs-avgscore": "Priem. skóre",
+ "translate-documentation-language": "Dokumentácia k hláseniam",
+ "translate-searchprofile": "Preklady",
+ "log-name-translationreview": "Log hodnotení prekladov",
+ "log-description-translationreview": "Log všetkých hodnotení prekladov a skupín správ.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|skontroloval|skontrolovala}} preklad $3",
+ "translate-dynagroup-recent-label": "Nedávne preklady",
+ "translate-dynagroup-recent-desc": "Táto skupina správ obsahuje všetky nedávne preklady do tohoto jazyka.\nUžitočné najmä pre korektúry.",
+ "translate-dynagroup-additions-label": "Nedávno pridané",
+ "translate-dynagroup-additions-desc": "Táto skupina správ zobrazuje nové a zmenené správy.",
+ "translate-msggroupselector-projects": "Skupina správ",
+ "translate-msggroupselector-search-placeholder": "Hľadanie skupiny",
+ "translate-msggroupselector-search-all": "Všetko",
+ "translate-msggroupselector-search-recent": "Nedávne",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|podskupina|podskupiny|podskupín}}",
+ "tux-languageselector": "Preklad do jazyka",
+ "tux-tab-all": "Všetky",
+ "tux-tab-untranslated": "Nepreložené",
+ "tux-tab-outdated": "Zastarané",
+ "tux-tab-translated": "Preložené",
+ "tux-tab-unproofread": "Neskontrolované",
+ "tux-edit": "Upraviť",
+ "tux-status-optional": "Voliteľná",
+ "tux-status-fuzzy": "Zastaraný",
+ "tux-status-proofread": "Skontrolované",
+ "tux-status-translated": "Preložené",
+ "tux-status-saving": "Ukladanie...",
+ "tux-status-unsaved": "Neuložené",
+ "tux-save-unknown-error": "Došlo k neznámej chybe.",
+ "tux-editor-editsummary-placeholder": "Nepovinné zhrnutie",
+ "tux-editor-paste-original-button-label": "Vložiť zdrojový text",
+ "tux-editor-discard-changes-button-label": "Zahodiť zmeny",
+ "tux-editor-save-button-label": "Uložiť preklad",
+ "tux-editor-skip-button-label": "Preskočiť na nasledujúci",
+ "tux-editor-cancel-button-label": "Zrušiť",
+ "tux-editor-confirm-button-label": "Potvrdiť preklad",
+ "tux-editor-proofread-button-label": "Označiť ako skontrolované",
+ "tux-editor-shortcut-info": "Stlačte „$1“ pre uloženie a presun na ďalšiu správu, „$2“ pre preskočenie na ďalšiu správu, „$4“ pre zadanie zhrnutia alebo podržte „$3“ pre zobrazenie ďalších skratiek.",
+ "tux-editor-edit-desc": "Upraviť dokumentáciu",
+ "tux-editor-add-desc": "Pridať dokumentáciu",
+ "tux-editor-suggestions-title": "Návrhy",
+ "tux-editor-in-other-languages": "V iných jazykoch",
+ "tux-editor-need-more-help": "Potrebujete ďalšiu pomoc?",
+ "tux-editor-ask-help": "Požiadajte o viac informácií",
+ "tux-editor-tm-match": "$1% zhoda",
+ "tux-notices-hide": "skryť",
+ "tux-editor-save-failed": "Nepodarilo sa uložiť preklad: $1",
+ "tux-editor-n-uses": "použité {{PLURAL:$1|raz|$1krát}}",
+ "tux-editor-message-desc-more": "Zobraziť viac",
+ "tux-editor-message-desc-less": "Zobraziť menej",
+ "tux-editor-clear-translated": "Skryť preložené",
+ "tux-editor-proofreading-mode": "Kontrola",
+ "tux-editor-translate-mode": "Zoznam",
+ "tux-editor-proofreading-hide-own-translations": "Skryť vaše preklady",
+ "tux-proofread-action-tooltip": "Označiť ako skontrolované",
+ "tux-proofread-edit-label": "Editovať",
+ "tux-editor-page-mode": "Stránka",
+ "tux-editor-outdated-notice": "Tento preklad možno potrebuje aktualizáciu.",
+ "tux-editor-outdated-notice-diff-link": "Zobraziť rozdiely",
+ "tux-editor-doc-editor-placeholder": "Dokumentácia k hláseniam",
+ "tux-editor-doc-editor-save": "Uložiť dokumentáciu",
+ "tux-editor-doc-editor-cancel": "Zrušiť",
+ "tux-messagetable-more-messages": "Ešte $1 {{PLURAL:$1|správa|správy|správ}}",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|Načítava sa správa|Načítavajú sa správy}}…",
+ "tux-message-filter-placeholder": "Filtrovať zoznam",
+ "tux-message-filter-result": "Pre reťazec „$2“ sa {{PLURAL:$1|našiel 1 výsledok|našli $1 výsledky|našlo $1 výsledkov}}",
+ "tux-message-filter-advanced-button": "Pokročilé hľadanie",
+ "tux-message-filter-optional-messages-label": "Voliteľné správy",
+ "tux-proofread-translated-by-self": "Váš preklad",
+ "tux-empty-list-all": "Táto skupina správ je prázdna",
+ "tux-empty-list-all-guide": "Vyberte si k prekladu inú skupinu správ",
+ "tux-empty-list-translated-action": "Preložiť",
+ "tux-empty-no-messages-to-display": "Neexistujú správy, ktoré by sa dali zobraziť.",
+ "tux-empty-no-outdated-messages": "Žiadne zastarané preklady",
+ "tux-empty-list-other": "Nie je čo prekladať",
+ "tux-empty-list-other-guide": "Môžete pomôcť skontrolovať existujúce preklady.",
+ "tux-empty-list-other-action": "Skontrolovať preklady",
+ "tux-empty-list-other-link": "Zobraziť všetky správy",
+ "tux-editor-close-tooltip": "Zavrieť",
+ "tux-editor-expand-tooltip": "Roztiahnuť",
+ "tux-editor-collapse-tooltip": "Zbaliť",
+ "tux-editor-message-tools-show-editor": "Zobraziť vo wiki editore",
+ "tux-editor-message-tools-history": "História",
+ "tux-editor-message-tools-delete": "Zmazať",
+ "tux-editor-message-tools-translations": "Všetky preklady",
+ "tux-editor-message-tools-linktothis": "Odkaz na túto správu",
+ "tux-editor-loading": "Načítava sa…",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|ďalší jazyk|ďalšie jazyky|ďalších jazykov}}",
+ "translate-statsbar-tooltip": "$1 % preložených, $2 % skontrolovaných",
+ "translate-statsbar-tooltip-with-fuzzy": "$1 % preložených, $2 % skontrolovaných, $3 % zastaraných",
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|ďalšia skupina|ďalšie skupiny|dalších skupín}}",
+ "translate-syntax-error": "Preklad obsahuje chybu v syntaxi",
+ "tux-session-expired": "Už nie ste prihlásení. Prihláste sa, prosím, na inej karte, alebo skopírujte neuložený preklad, prihláste sa, vráťte sa k tejto stránke a zadajte znovu váš preklad.",
+ "tux-nojs": "Tento nástroj nefunguje bez JavaScriptu. JavaScript je vypnutý alebo zlyhal alebo prehliadač nie je podporovaný.",
+ "specialpages-group-translation": "Preklad"
+}
diff --git a/Translate/i18n/core/skr-arab.json b/Translate/i18n/core/skr-arab.json
new file mode 100644
index 00000000..0c8e14d8
--- /dev/null
+++ b/Translate/i18n/core/skr-arab.json
@@ -0,0 +1,78 @@
+{
+ "@metadata": {
+ "authors": [
+ "Saraiki"
+ ]
+ },
+ "translate-taction-translate": "ترجمہ کرو",
+ "translate-export-form-format": "فارمیٹ",
+ "translate-rcfilters-translations": "ترجمے",
+ "translate-rcfilters-translations-only-label": "ترجمے",
+ "translate-rcfilters-translations-filter-label": "ترجمے کائنی",
+ "translate-stats-users": "مترجمین",
+ "translate-statsf-scale-months": "مہینے",
+ "translate-statsf-scale-weeks": "ہفتے",
+ "translate-statsf-scale-days": "ݙیہاڑے",
+ "translate-statsf-scale-hours": "گھنٹے",
+ "translate-statsf-count": "پیمائش:",
+ "translate-statsf-count-edits": "تبدیلیاں دی تعداد",
+ "translate-statsf-count-users": "فعال مترجمین",
+ "translate-statsf-count-registrations": "نویں ورتݨ آلے",
+ "translate-statsf-submit": "نمائش",
+ "translate-translations-fieldset-title": "سنیہا",
+ "translate-translations-messagename": "ناں:",
+ "translate-translations-project": "منصوبہ:",
+ "translate-langstats-expand": "ودھاؤ",
+ "translate-langstats-collapse": "لکاؤ",
+ "translate-language-code": "زبان دا کوڈ",
+ "translate-language-code-field-name": "زبان دا کوڈ:",
+ "translate-language": "زبان",
+ "translate-total": "سنیہے",
+ "translate-untranslated": "ترجمے ٻاجھ",
+ "translate-percentage-complete": "مکمل",
+ "translate-percentage-fuzzy": "پُراݨے",
+ "translate-languagestats-overall": "سنیہیاں دے سارے گروہ اکٹھے",
+ "translate-ls-submit": "شماریات ݙکھاؤ",
+ "translate-mgs-submit": "شماریات ݙکھاؤ",
+ "translate-mgs-column-language": "زبان",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|تبدیلی|تبدیلیاں}} ــ چھیکڑی تبدیلی $3 ݙین٘ہ پہلے",
+ "translate-supportedlanguages-cached": "ایہ معلومات $1 پہلے کٹھی تھئی ہائی۔",
+ "translate-smg-group-message-action-history": "تاریخ",
+ "translate-smg-group-message-tag-outdated": "پُراݨے",
+ "translate-smg-group-message-message-content": "شامل حصے:",
+ "translate-smg-group-message-message-other-langs": "ٻیاں زباناں:",
+ "translate-gs-code": "کوڈ",
+ "translate-gs-continent": "براعظم",
+ "translate-gs-speakers": "الاوݨ آلے",
+ "translate-gs-score": "سکور",
+ "translate-gs-multiple": "ہک کنوں ودھ",
+ "translate-gs-count": "ڳیݨ",
+ "translate-gs-total": "مجموعہ",
+ "translate-documentation-language": "سنیہہ دستاویز",
+ "translate-msggroupselector-search-all": "یکے",
+ "translate-msggroupselector-search-recent": "حالیہ",
+ "tux-tab-all": "یکے",
+ "tux-tab-untranslated": "ترجمے ٻاجھ",
+ "tux-tab-outdated": "پُراݨے",
+ "tux-tab-translated": "ترجمہ تھی ڳیا",
+ "tux-status-fuzzy": "پُراݨے",
+ "tux-status-proofread": "ولدا ݙٹھے ہوئے",
+ "tux-status-translated": "ترجمہ تھی ڳیا",
+ "tux-status-saving": "بچیندا پئے۔۔۔",
+ "tux-status-unsaved": "غیر محفوظ",
+ "tux-editor-cancel-button-label": "منسوخ",
+ "tux-editor-confirm-button-label": "ترجمہ دی تصدیق کرو",
+ "tux-notices-hide": "لُکاؤ",
+ "tux-editor-translate-mode": "فہرست",
+ "tux-proofread-edit-label": "لکھو",
+ "tux-editor-page-mode": "ورقہ",
+ "tux-editor-doc-editor-cancel": "منسوخ",
+ "tux-empty-list-translated-action": "ترجمہ کرو",
+ "tux-editor-close-tooltip": "بند کرو",
+ "tux-editor-expand-tooltip": "ودھاؤ",
+ "tux-editor-collapse-tooltip": "لکاؤ",
+ "tux-editor-message-tools-delete": "مٹاؤ",
+ "tux-editor-message-tools-translations": "سارے ترجمے",
+ "tux-editor-loading": "لوڈ تھیندا پئے۔۔۔",
+ "specialpages-group-translation": "ترجمہ"
+}
diff --git a/Translate/i18n/core/sl.json b/Translate/i18n/core/sl.json
new file mode 100644
index 00000000..ee3263ca
--- /dev/null
+++ b/Translate/i18n/core/sl.json
@@ -0,0 +1,379 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dbc334",
+ "Edinwiki",
+ "Eleassar",
+ "Janezdrilc",
+ "Smihael",
+ "Upwinxp"
+ ]
+ },
+ "translate": "Prevedi",
+ "translate-extensionname": "Prevedi",
+ "translate-desc": "[[Special:Translate|Posebna stran]] za prevajanje MediaWiki in razširitev",
+ "translate-fuzzybot-desc": "To je poseben sistemski račun, ki ga uporablja razširitev MediaWiki [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate Translate] za vzdrževanje prevodov.\nTa račun je del programja MediaWiki in ni v lasti nobenega uporabnika.",
+ "translate-taskui-export-to-file": "Izvozi v izvirni obliki",
+ "translate-taskui-export-as-po": "Izvozi za prevajanje brez povezave",
+ "translate-taskui-export-as-csv": "Izvozi v formatu CSV",
+ "translate-export-csv-message-title": "Naslov sporočila prevoda",
+ "translate-export-csv-definition": "Opredelitev sporočila",
+ "translate-taction-translate": "Prevedi",
+ "translate-taction-proofread": "Preglej",
+ "translate-taction-lstats": "Statistika jezika",
+ "translate-taction-mstats": "Statistika skupin sporočil",
+ "translate-taction-export": "Izvozi",
+ "translate-taction-disabled": "Dejanje je v tem vikiju onemogočeno.",
+ "translate-page-no-such-language": "Izbran jezik je neveljaven.",
+ "translate-page-no-such-group": "Izbrana skupina je neveljavna.",
+ "translate-page-disabled": "Prevodi v ta jezik v tej skupini so bili onemogočeni.\nRazlog:\n\n<em>$1</em>",
+ "translate-language-disabled": "Prevodi v ta jezik so onemogočeni.",
+ "translate-page-settings-legend": "Nastavitve",
+ "translate-page-group": "Skupina",
+ "translate-page-language": "Jezik",
+ "translate-page-limit": "Omejitev",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|sporočilo|sporočili|sporočila|sporočil}} na stran",
+ "translate-submit": "Pridobi",
+ "translate-page-navigation-legend": "Navigacija",
+ "translate-page-showing": "Prikazujem sporočila od $1 do $2 od skupno $3.",
+ "translate-page-showing-all": "Prikazujem $1 {{PLURAL:$1|sporočilo|sporočili|sporočila|sporočil}}.",
+ "translate-page-showing-none": "Ni sporočil za prikaz.",
+ "translate-page-paging-links": "<nowiki>[</nowiki>$1<nowiki>]</nowiki> <nowiki>[</nowiki>$2<nowiki>]</nowiki>",
+ "translate-next": "Naslednja stran",
+ "translate-prev": "Prejšnja stran",
+ "translate-page-description-legend": "Informacije o skupini",
+ "translate-page-description-hasoptional": "Ta skupina sporočil vsebuje izbirna sporočila.\nIzbirna sporočila prevedite samo, če ima vaš jezik posebne zahteve, kot sta neuporaba presledkov ali prečrkovanje izvirnih imen. $1",
+ "translate-page-description-hasoptional-open": "Pokaži izbirna sporočila.",
+ "translate-page-edit": "uredi",
+ "translate-optional": "(neobvezno)",
+ "translate-ignored": "(prezri)",
+ "translate-edit-title": "Uredi »$1«",
+ "translate-edit-definition": "Opredelitev sporočila v izvirnem jeziku",
+ "translate-edit-contribute": "prispevaj",
+ "translate-edit-no-information": "<em>Sporočilo nima dokumentacije.\nČe veste, kje in kako je uporabljeno, lahko pomagate drugim prevajalcem z dodajanjem dokumentacije.</em>",
+ "translate-edit-information": "Podatki o sporočilu ($1)",
+ "translate-edit-warnings": "Opozorila o nepopolnosti prevoda",
+ "translate-edit-tmmatch-source": "Izvorno besedilo prevoda: $1",
+ "translate-edit-tmmatch": "$1-% ujemanje",
+ "translate-edit-nopermission": "Za prevajanje sporočil potrebujete prevajalske pravice.",
+ "translate-edit-askpermission": "Pridobite dovoljenje",
+ "exporttranslations": "Izvozi prevode",
+ "translate-export-form-format": "Format",
+ "translate-export-invalid-format": "Prosimo, izberi veljaven format.",
+ "translate-export-not-supported": "Izvoz prevoda ni podprt.",
+ "translate-export-format-notsupported": "Izbranega formata za izvoz skupina za obveščanje ne podpira.",
+ "translate-checks-parameters": "{{PLURAL:$2|Naslednji parameter ni uporabljen|Naslednja parametra nista uporabljena|Naslednji parametri niso uporabljeni}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Naslednji parameter je neznan|Naslednja parametra sta neznana|Naslednji parametri so neznani}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "V sporočilu je neparno število {{PLURAL:$2|oklepajev}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Naslednja povezava je sporna|Naslednji povezavi sta sporni|Naslednje povezave so sporne}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Naslednja povezava manjka|Naslednji povezavi manjkata|Naslednje povezave manjkajo}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Opredelitev uporablja <nowiki>{{PLURAL:}}</nowiki>, prevod pa ne.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> ima {{PLURAL:$1|določeno eno obliko|določeni dve obliki|določene $1 oblike|določenih $1 oblik}}, vendar {{PLURAL:$2|je podprta samo ena oblika|sta podprti samo dve obliki|so podprte samo $2 oblike|je podprtih samo $2 oblik}} (brez oblik 0= in 1=).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> ima na koncu podvojeni obliki. <nowiki>{{PLURAL:$1|ovca|ovca}}</nowiki> naj bo napisano kot <nowiki>{{PLURAL:$1|ovca}}</nowiki>.",
+ "translate-checks-pagename": "Imenski prostor je drugačen kot v opredelitvi",
+ "translate-checks-format": "Ta prevod ne sledi opredelitvi ali ima neveljavno skladnjo: $1",
+ "translate-checks-escape": "{{PLURAL:$2|Naslednji ubežni znak je morda naključen|Naslednja ubežna znaka sta morda naključna|Naslednji ubežni znaki so morda naključni}}: <strong>$1</strong>. {{PLURAL:$4|Veljavni ubežni znak je|Veljavna ubežna znaka sta:|Veljavni ubežni znaki so:}} $3.",
+ "translate-checks-parametersnotequal": "Število parametrov je {{PLURAL:$1|$1}}; moralo bi biti {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> je poškodovan.",
+ "translate-checks-fudforum-syntax": "V tem projektu uporabite <nowiki>$1</nowiki> namesto <nowiki>$2</nowiki>.",
+ "translate-pref-editassistlang": "Pomožni jeziki:",
+ "prefs-translate": "Možnosti prevajanja",
+ "translate-pref-editassistlang-help": "Z vejicami ločen seznam kod jezikov.\nKo prevajate, so prikazani prevodi sporočila v teh jezikih.\nPrivzeti seznam jezikov je odvisen od vašega jezika.",
+ "translate-pref-editassistlang-bad": "Neveljavna oznaka jezika na seznamu:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Urejanje z uporabo prevajalskega vmesnika",
+ "right-translate-manage": "Upravljanje skupin sporočil",
+ "action-translate-manage": "urejanje skupin prevodov",
+ "right-translate-import": "Uvažanje nepovezanih prevodov",
+ "action-translate-import": "uvažanje nepovezanih prevodov",
+ "right-translate-messagereview": "Pregledovanje prevodov",
+ "action-translate-messagereview": "pregled prevodov",
+ "right-translate-groupreview": "Sprememba stanja poteka dela skupine sporočil",
+ "translate-rcfilters-translations": "Prevodi",
+ "translate-rcfilters-translations-only-label": "Prevodi",
+ "translate-rcfilters-translations-only-desc": "Sprememba strani za prevajanje.",
+ "translate-rcfilters-translations-filter-label": "Brez prevodov",
+ "translate-rcfilters-translations-filter-desc": "Vse spremembe, ki niso prevodi.",
+ "translate-rcfilters-translations-site-label": "Sporočila za strani",
+ "translate-rcfilters-translations-site-desc": "Prilagoditve sporočil za strani v imenskem prostoru MediaWiki.",
+ "translate-rc-translation-filter": "Filtriraj prevode:",
+ "translate-rc-translation-filter-no": "Ne stori ničesar",
+ "translate-rc-translation-filter-only": "Prikaži samo prevode",
+ "translate-rc-translation-filter-filter": "Izloči prevode",
+ "translate-rc-translation-filter-site": "Samo spremembe sporočil strani",
+ "translationstats": "Statistika prevodov",
+ "translate-stats-edits": "Urejanja",
+ "translate-stats-users": "Prevajalci",
+ "translate-stats-registrations": "Registracije",
+ "translate-stats-reviews": "Pregledi",
+ "translate-stats-reviewers": "Pregledovalci",
+ "translate-statsf-intro": "S tem obrazcem lahko ustvarite preprosto statistiko.\nVse vrednosti imajo zgornje in spodnje omejitve.",
+ "translate-statsf-options": "Možnosti grafa",
+ "translate-statsf-width": "Širina v slikovnih pikah:",
+ "translate-statsf-height": "Višina v slikovnih pikah:",
+ "translate-statsf-days": "Datum začetka:",
+ "translate-statsf-start": "Datum začetka:",
+ "translate-statsf-scale": "Zrnavost:",
+ "translate-statsf-scale-years": "Leta",
+ "translate-statsf-scale-months": "Meseci",
+ "translate-statsf-scale-weeks": "Tedni",
+ "translate-statsf-scale-days": "Dni",
+ "translate-statsf-scale-hours": "Ur",
+ "translate-statsf-count": "Merilo:",
+ "translate-statsf-count-edits": "Število urejanj",
+ "translate-statsf-count-users": "Aktivni prevajalci",
+ "translate-statsf-count-registrations": "Novi uporabniki",
+ "translate-statsf-count-reviews": "Pregledi prevodov",
+ "translate-statsf-count-reviewers": "Pregledovalcev",
+ "translate-statsf-language": "Z vejico ločen seznam kod jezikov:",
+ "translate-statsf-group": "Z vejico ločen seznam kod skupin:",
+ "translate-statsf-submit": "Predogled",
+ "translate-statsf-unknown-error": "Prišlo je do neznane napake.",
+ "translate-tag-page-desc": "Prevod wikistrani [[$2|$1]] iz jezika $3 ($4).",
+ "translate-sidebar-alltrans": "V drugih jezikih",
+ "translations": "Vsi prevodi",
+ "translations-summary": "Spodaj vnesite ime sporočila, da prikažete vse njegove razpoložljive prevode.",
+ "translate-translations-no-message": "»$1« ni prevedljivo sporočilo",
+ "translate-translations-none": "Ni prevodov za »$1«",
+ "translate-translations-count": "{{PLURAL:$1|Najden $1 prevod|Najdena $1 prevoda|Najdeni $1 prevodi|Najdenih $1 prevodov}}.",
+ "translate-translations-fieldset-title": "Sporočilo",
+ "translate-translations-messagename": "Ime:",
+ "translate-translations-project": "Projekt:",
+ "translate-translations-including-no-param": "V parametru za podstran morate navesti veljaven ključ",
+ "translate-translations-history-short": "z",
+ "languagestats": "Statistika jezika",
+ "languagestats-summary": "Stran prikazuje statistiko prevodov za vse skupine sporočil jezika.",
+ "messagegroupstats-summary": "Stran prikazuje statistiko skupin sporočil.",
+ "languagestats-stats-for": "Statistika prevodov za jezik $1 ($2).",
+ "languagestats-recenttranslations": "novi prevodi",
+ "translate-langstats-incomplete": "Nekateri statistični podatki na tej strani so nepopolni. Za več statistik znova naložite stran.",
+ "translate-langstats-expand": "razširi",
+ "translate-langstats-collapse": "strni",
+ "translate-langstats-expandall": "razširi vse",
+ "translate-langstats-collapseall": "strni vse",
+ "translate-language-code": "Oznaka jezika",
+ "translate-language-code-field-name": "Oznaka jezika:",
+ "translate-suppress-complete": "Preskoči popolnoma prevedene skupine sporočil",
+ "translate-ls-noempty": "Preskoči popolnoma neprevedene skupine sporočil",
+ "translate-language": "Jezik",
+ "translate-total": "Sporočil",
+ "translate-untranslated": "Neprevedeno",
+ "translate-percentage-complete": "Končano",
+ "translate-percentage-fuzzy": "Zastarelo",
+ "translate-languagestats-overall": "Vse skupine sporočil skupaj",
+ "translate-ls-submit": "Prikaži statistiko",
+ "translate-ls-column-group": "Skupina sporočil",
+ "translate-mgs-pagename": "Statistika skupine sporočil",
+ "translate-mgs-fieldset": "Nastavitve prikaza",
+ "translate-mgs-group": "Skupina sporočil:",
+ "translate-mgs-nocomplete": "Ne prikaži jezikov, ki imajo dokončan prevod",
+ "translate-mgs-noempty": "Ne prikaži jezikov, ki nimajo nobenega prevoda",
+ "translate-mgs-submit": "Prikaži statistiko",
+ "translate-mgs-column-language": "Jezik",
+ "translate-mgs-totals": "{{PLURAL:$1|2=Oba jezika|Vsi jeziki}} skupaj",
+ "translate-mgs-invalid-group": "Izbrana skupina $1 ne obstaja.",
+ "translate-mgs-nothing": "Pri izbrani statistiki ni ničesar za prikazati.",
+ "supportedlanguages": "Dejavni jeziki",
+ "supportedlanguages-summary": "Ta stran prikazuje seznam dejavnik jezikov na strani {{SITENAME}},\nskupaj z imeni prevajalcev, ki delujejo na tem jeziku.\nVeč urejanj je prevajalec prispeval, večje je izpisano njegovo ime.\nBarva podrčtave kaže na zadnjo tukajšnjo dejavnost prevajalca.",
+ "supportedlanguages-colorlegend": "Legenda barv: Zadnji prevod pred $1 dnevi.",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Prevajalec|Prevajalka}}|Prevajalca|Prevajalci}}: $1",
+ "supportedlanguages-recenttranslations": "novi prevodi",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|jezik|jezika|jeziki|jezikov}} skupno.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|urejanje|urejanji|urejanja|urejanj}} – zadnje urejanje pred $3 {{PLURAL:$3|dnem|dnema|dnemi}}",
+ "abusefilter-edit-builder-vars-translate-target-language": "Ciljni jezik za prevod",
+ "translate-jssti-add": "Dodaj na seznam",
+ "managemessagegroups": "Upravljanje skupin sporočil",
+ "translate-smg-notallowed": "Nimate dovoljenj za izvedbo dejanja.",
+ "translate-smg-nochanges": "Ni nobenih sprememb za obdelavo.",
+ "translate-smg-submit": "Potrdi spremembe v obdelavo",
+ "translate-smg-submitted": "Opredelitve sporočil so posodobljene. Spremembe se obdelujejo v ozadju.",
+ "translate-smg-more": "Po potrditvi teh sprememb bo treba obdelati več sprememb.",
+ "translate-smg-left": "Vsebina sporočila v vikiju",
+ "translate-smg-right": "Prihajajoče spremembe",
+ "translate-smg-rename-select": "Izberi",
+ "translate-smg-rename-cancel": "Prekliči",
+ "translate-smg-rename-select-err": "Prosimo, izberite sporočilo, ki ga želite preimenovati",
+ "translate-smg-strong-sync-help": "Pomoč",
+ "translate-smg-groups-in-sync": "Trenutno sinhronizirane skupine",
+ "translate-smg-group-message-action-history": "Zgodovina",
+ "translate-smg-group-action-resolve": "Označi kot popravljeno",
+ "translate-smg-group-message-tag-outdated": "Zastarelo",
+ "translate-smg-group-message-tag-rename": "Preimenovanje",
+ "translate-smg-group-message-message-content": "Vsebina:",
+ "translate-smg-group-message-message-target": "Cilj:",
+ "translate-smg-group-message-message-replacement": "Zamenjava:",
+ "translate-smg-group-message-message-other-langs": "Drugi jeziki:",
+ "translate-smg-loading": "Nalagam ...",
+ "translate-manage-import-diff": "Sporočilo $1 | Dejanja: $2",
+ "translate-manage-import-new": "Novo sporočilo $1",
+ "translate-manage-import-deleted": "Izbriši sporočilo $1",
+ "translate-manage-action-import": "Uvozi",
+ "translate-manage-action-conflict": "Uvozi in označi kot ohlapno",
+ "translate-manage-action-ignore": "Prezri",
+ "translate-manage-action-fuzzy": "Uvozi in prevode označi kot ohlapne",
+ "translate-manage-action-rename": "Preimenovanje",
+ "translate-manage-action-ignore-change": "Prezri spremembo prevoda",
+ "translate-manage-nochanges": "Ni sprememb v opredelitvi sporočil za to skupino.",
+ "translate-manage-nochanges-other": "Za ta jezik ni bilo sprememb.\nZa vrnitev na prikaz podrobnosti skupine uporabite spodnjo povezavo.",
+ "translate-manage-inconsistent": "V zahtevi je bila odkrita nedoslednost.\nProsimo, preverite spremembe in poskusite znova.\nPodrobnosti: $1",
+ "translate-manage-toolong": "Presežen je najdaljši čas obdelave, $1 {{PLURAL:$1|sekunde|sekundi|sekunde|sekund}}.\nProsimo, znova pošljite obrazec, da nadaljujete obdelavo.",
+ "translate-manage-import-summary": "Uvažanje nove različice iz zunanjega vira",
+ "translate-manage-import-ignore": "Preskakovanje sporočila $1.",
+ "translate-manage-import-rename-summary": "Preimenovano v zunanjem viru",
+ "translate-manage-conflict-summary": "Uvažanje nove različice iz zunanjega vira.\nProsimo, preverite.",
+ "translate-manage-submit": "Izvedi",
+ "translate-manage-intro-other": "Tu je prikazan seznam sprememb prevodov v jeziku $1.\nPri vsaki posodobitvi preglejte spremembe in izberite želeno dejanje.\nČe se boste odločili prezreti spremembe, bo to dejanje samo začasno.",
+ "translate-manage-import-ok": "Uvoženo: $1.",
+ "translate-manage-import-done": "Uvoz je dokončan!",
+ "translate-manage-empty-content": "Vsebina je prazna",
+ "importtranslations": "Uvažanje prevodov",
+ "translate-import-from-local": "Nalaganje lokalne datoteke:",
+ "translate-import-load": "Naloži datoteko",
+ "translate-import-err-dl-failed": "Ne morem pridobiti datoteke:\n$1",
+ "translate-import-err-ul-failed": "Nalaganje datoteke je spodletelo",
+ "translate-import-err-invalid-title": "Določeno ime datoteke <nowiki>$1</nowiki> je bilo neveljavno.",
+ "translate-import-err-no-such-file": "Datoteka <nowiki>$1</nowiki> ne obstaja ali pa ni bila naložena lokalno.",
+ "translate-import-err-stale-group": "Skupina sporočil, kateri pripada ta datoteka, ne obstaja.",
+ "translate-import-err-no-headers": "Datoteka ni dobro oblikovana datoteka Gettext v obliki razširitve Translate:\nNe morem določiti skupine in jezika iz glav datoteke.",
+ "translate-js-support-unsaved-warning": "Imate neobjavljene prevode.",
+ "translate-gs-pos": "Št.",
+ "translate-gs-code": "Koda",
+ "translate-gs-continent": "Celina",
+ "translate-gs-speakers": "Govorcev",
+ "translate-gs-score": "Rezultat",
+ "translate-gs-multiple": "Več",
+ "translate-gs-count": "Število",
+ "translate-gs-total": "Skupno",
+ "translate-gs-avgscore": "Povp. rezultat",
+ "translate-documentation-language": "dokumentacija sporočila",
+ "translate-searchprofile": "Prevodi",
+ "translate-searchprofile-tooltip": "Iskanje med vsemi prevodi",
+ "translate-searchprofile-note": "Več možnosti iskanja je na voljo z [$1 iskanjem prevodov].",
+ "translate-search-languagefilter": "Filtriraj po jeziku:",
+ "translate-search-nofilter": "Brez filtriranja",
+ "log-name-translationreview": "Dnevnik pregledov prevodov",
+ "log-description-translationreview": "Dnevnik vseh pregledov prevodov in skupin sporočil.",
+ "logentry-translationreview-message": "$1 je {{GENDER:$2|pregledal|pregledala}} prevod $3",
+ "logentry-translationreview-group": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} stanje prevodov jezika $4 za $3 iz $6 v $7",
+ "group-translate-sandboxed": "Neodobreni prevajalci",
+ "group-translate-sandboxed-member": "{{GENDER:$1|neodobren prevajalec}}",
+ "right-translate-sandboxmanage": "Upravljanje uporabnikov, omejenih na peskovnik",
+ "action-translate-sandboxmanage": "upravljanje uporabnikov, omejenih na peskovnik",
+ "right-translate-sandboxaction": "Izvršitev dejanj, dovoljenih na peskovnik omejenim uporabnikom",
+ "action-translate-sandboxaction": "izvršitev dejanj, dovoljenih na peskovnik omejenim uporabnikom",
+ "translate-workflow-state-": "(nenastavljeno)",
+ "translate-workflowstatus": "Stanje: $1",
+ "translate-workflow-set-doing": "Nastavljanje ...",
+ "translate-workflow-autocreated-summary": "Samodejno ustvarjanje strani za stanje delovnega toka $1",
+ "translate-stats-workflow": "Stanje",
+ "translate-workflowgroup-label": "Stanja delovnega toka",
+ "translate-workflowgroup-desc": "Skupina sporočil prikazuje stanja delovnih tokov prevodov.\nStanja so opredeljena v konfiguracijski spremenljivki $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Novi prevodi",
+ "translate-dynagroup-recent-desc": "Skupina sporočil prikazuje vse nedavne prevode v ta jezik.\nNajuporabnejše za opravila pregleda.",
+ "translate-dynagroup-additions-label": "Nove vsebine",
+ "translate-dynagroup-additions-desc": "Ta skupina sporočil kaže nova in spremenjena sporočila.",
+ "translate-msggroupselector-projects": "Skupina sporočil",
+ "translate-msggroupselector-search-placeholder": "Iskanje skupin",
+ "translate-msggroupselector-search-all": "Vsi",
+ "translate-msggroupselector-search-recent": "Nedavni",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|podskupina|podskupini|podskupine|podskupin}}",
+ "tux-languageselector": "Ciljni jezik:",
+ "tux-tab-all": "Vse",
+ "tux-tab-untranslated": "Neprevedeno",
+ "tux-tab-outdated": "Zastarelo",
+ "tux-tab-translated": "Prevedeno",
+ "tux-tab-unproofread": "Nepregledano",
+ "tux-edit": "Uredi",
+ "tux-status-optional": "Neobvezno",
+ "tux-status-fuzzy": "Zastarelo",
+ "tux-status-proofread": "Pregledano",
+ "tux-status-translated": "Prevedeno",
+ "tux-status-saving": "Objavljanje ...",
+ "tux-status-unsaved": "Neobjavljeno",
+ "tux-save-unknown-error": "Prišlo je do neznane napake.",
+ "tux-editor-placeholder-language": "Vaš prevod v $1",
+ "tux-editor-editsummary-placeholder": "Pojasnite svoje spremembe (neobvezno)",
+ "tux-editor-paste-original-button-label": "Prilepi izvorno besedilo",
+ "tux-editor-discard-changes-button-label": "Zavrzi spremembe",
+ "tux-editor-save-button-label": "Objavi prevod",
+ "tux-editor-skip-button-label": "Pojdi na naslednje",
+ "tux-editor-cancel-button-label": "Prekliči",
+ "tux-editor-confirm-button-label": "Potrdi prevod",
+ "tux-editor-proofread-button-label": "Označi kot pregledano",
+ "tux-editor-shortcut-info": "Pritisnite »$1« za potrditev in premik na naslednje sporočilo, »$2« za preskočitev, »$4« za navedbo povzetka ali pa držite »$3« za ogled drugih bližnjic.",
+ "tux-editor-edit-desc": "Uredi dokumentacijo",
+ "tux-editor-add-desc": "Dodaj dokumentacijo",
+ "tux-editor-suggestions-title": "Predlogi",
+ "tux-editor-latest-updates-title": "Zadnje posodobitve",
+ "tux-editor-changes-without-summary": "$1 {{PLURAL:$1|posodobitev|posodobitvi|posodobitve|posodobitev}} brez povzetka",
+ "tux-editor-all-changes": "Vse spremembe",
+ "tux-editor-in-other-languages": "V drugih jezikih",
+ "tux-editor-need-more-help": "Potrebujete dodatno pomoč?",
+ "tux-editor-ask-help": "Zaprosite za več informacij",
+ "tux-editor-tm-match": "$1-% ujemanje",
+ "tux-notices-more": "{{PLURAL:$1|$1 več}}",
+ "tux-notices-hide": "skrij",
+ "tux-editor-save-failed": "Objava prevoda ni uspela: $1",
+ "tux-editor-n-uses": "uporabljeno {{PLURAL:$1|$1-krat}}",
+ "tux-editor-message-desc-more": "Pokaži več",
+ "tux-editor-message-desc-less": "Pokaži manj",
+ "tux-editor-clear-translated": "Skrij prevedeno",
+ "tux-editor-proofreading-mode": "Preglej",
+ "tux-editor-translate-mode": "Seznam",
+ "tux-editor-proofreading-hide-own-translations": "Shrani moje prevode",
+ "tux-editor-proofreading-show-own-translations": "Prikaži moje prevode",
+ "tux-proofread-action-tooltip": "Označi kot pregledano",
+ "tux-proofread-edit-label": "Uredi",
+ "tux-editor-page-mode": "Stran",
+ "tux-editor-outdated-notice": "Prevod je morda treba posodobiti.",
+ "tux-editor-outdated-notice-diff-link": "Prikaži razlike",
+ "tux-editor-doc-editor-placeholder": "Dokumentacija sporočila",
+ "tux-editor-doc-editor-save": "Objavi dokumentacijo",
+ "tux-editor-doc-editor-cancel": "Prekliči",
+ "tux-messagetable-more-messages": "še $1 {{PLURAL:$1|sporočilo|sporočili|sporočila|sporočil}}",
+ "tux-messagetable-loading-messages": "Nalaganje {{PLURAL:$1|sporočila|sporočil}} ...",
+ "tux-message-filter-placeholder": "Filtriraj seznam",
+ "tux-message-filter-result": "Za »$2« {{PLURAL:$1|je bil najden $1 zadetek|sta bila najdena $1 zadetka|so bili najdeni $1 zadetki|je bilo najdenih $1 zadetkov}}",
+ "tux-message-filter-advanced-button": "Napredno iskanje",
+ "tux-message-filter-optional-messages-label": "Izbirna sporočila",
+ "tux-proofread-translated-by-self": "Prevedli ste sami",
+ "tux-empty-list-all": "Ta skupina sporočil je prazna",
+ "tux-empty-list-all-guide": "Izberite drugo skupino sporočil za prevajanje",
+ "tux-translate-page-no-such-group": "<strong>Navedena skupina ne obstaja.</strong> Izberite drugo skupino sporočil.",
+ "tux-empty-list-translated": "Ni prevedenih sporočil",
+ "tux-empty-list-translated-guide": "Pomagate lahko pri prevajanju",
+ "tux-empty-list-translated-action": "Prevedi",
+ "tux-empty-no-messages-to-display": "Ni sporočil za prikaz.",
+ "tux-empty-there-are-optional": "Na voljo so izbirna sporočila, ki niso prikazana na seznamu",
+ "tux-empty-show-optional-messages": "Prikaz izbirnih sporočil",
+ "tux-empty-no-outdated-messages": "Ni zastarelih sporočil",
+ "tux-empty-nothing-to-proofread": "Ničesar ni treba pregledati",
+ "tux-empty-you-can-help-providing": "Pomagate lahko z novimi prevodi",
+ "tux-empty-nothing-new-to-proofread": "Za pregled ni ničesar novega",
+ "tux-empty-you-can-review-already-proofread": "Pregledujete lahko prevode, ki so jih pregledali že drugi",
+ "tux-empty-list-other": "Ničesar več ni treba prevesti.",
+ "tux-empty-list-other-guide": "Pomagate lahko s pregledom obstoječih prevodov.",
+ "tux-empty-list-other-action": "Pregled prevodov",
+ "tux-empty-list-other-link": "Prikaz vseh sporočil",
+ "tux-editor-close-tooltip": "Zapri",
+ "tux-editor-expand-tooltip": "Razširi",
+ "tux-editor-collapse-tooltip": "Strni",
+ "tux-editor-message-tools-show-editor": "Prikaži v vikiurejevalniku",
+ "tux-editor-message-tools-history": "Zgodovina",
+ "tux-editor-message-tools-delete": "Izbriši",
+ "tux-editor-message-tools-translations": "Vsi prevodi",
+ "tux-editor-message-tools-linktothis": "Povezava na to sporočilo",
+ "tux-editor-loading": "Nalagam ...",
+ "tux-editor-loading-failed": "Nalaganje pripomočkov za prevajanje ni uspelo: $1",
+ "translate-search-more-languages-info": "Še $1 {{PLURAL:$1|jezik|jezika|jeziki|jezikov}}",
+ "translate-statsbar-tooltip": "$1% prevedenih, $2% pregledanih",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% prevedenih, $2% pregledanih, $3% zastarelih",
+ "translate-search-more-groups-info": "Še $1 {{PLURAL:$1|skupina|skupini|skupine|skupin}}",
+ "translate-syntax-error": "Prevod vsebuje skladenjske napake",
+ "tux-session-expired": "Niste več prijavljeni. Prosimo, prijavite se na ločenem zavihku. Druga možnost je, da ustvarite kopijo neshranjenega prevoda, se prijavite, se vrnete na to stran in znova vnesete svoj prevod.",
+ "tux-nojs": "Orodje ne deluje brez JavaScripta. JavaScript je onemogočen, ne deluje ali pa brskalnik ni podprt.",
+ "specialpages-group-translation": "Prevod",
+ "translate-messagebundle-error-metadata-type": "Metapodatki morajo biti polje.",
+ "log-action-filter-translationreview": "Vrsta dejanja:",
+ "log-action-filter-translationreview-message": "Pregled posameznih prevodnih sporočil",
+ "log-action-filter-translationreview-group": "Spremembe stanja napredka prevodov"
+}
diff --git a/Translate/i18n/core/sli.json b/Translate/i18n/core/sli.json
new file mode 100644
index 00000000..01a30bb6
--- /dev/null
+++ b/Translate/i18n/core/sli.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Äberlausitzer"
+ ]
+ },
+ "translate-documentation-language": "Nachrichtadokumentation"
+}
diff --git a/Translate/i18n/core/smn.json b/Translate/i18n/core/smn.json
new file mode 100644
index 00000000..8f629ce7
--- /dev/null
+++ b/Translate/i18n/core/smn.json
@@ -0,0 +1,136 @@
+{
+ "@metadata": {
+ "authors": [
+ "Muotâ",
+ "Seipinne",
+ "Trondtr",
+ "Yupik"
+ ]
+ },
+ "translate": "Jurgâl",
+ "translate-extensionname": "Jurgâl",
+ "translate-desc": "[[Special:Translate|Toimâsijđo]] MediaWiki jurgâlmân já tien tiegárijd",
+ "translate-taskui-export-to-file": "Tuálvu vuáđuhäämist",
+ "translate-taction-translate": "Jurgâl",
+ "translate-taction-proofread": "Njuálguluuvâ",
+ "translate-taction-lstats": "Kielâstatistiikeh",
+ "translate-taction-mstats": "Viestâjuávkkustatistiikeh",
+ "translate-taction-export": "Tuálvu",
+ "translate-taction-disabled": "Taat toimâ ij lah kiävtust taan wikist.",
+ "translate-page-no-such-language": "Tubdâmettum kielâ.",
+ "translate-page-no-such-group": "Tubdâmettum juávkku.",
+ "translate-page-disabled": "Jurgâlusah taan kielân taan juávhust lii estum.\nSuijâ:\n\n<em>$1</em>",
+ "translate-language-disabled": "Jurgâlem taan kielân ij lah máhđulâš.",
+ "translate-page-settings-legend": "Asâttâsah",
+ "translate-page-group": "Juávkku",
+ "translate-page-language": "Kielâ",
+ "translate-page-limit": "Raijiittâs",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|viestâ|viestâ|viestâ|viestâd}} siijđost",
+ "translate-submit": "Viežâ",
+ "translate-page-navigation-legend": "Navigistem",
+ "translate-page-showing": "Viestah $1–$2; ohtsis $3.",
+ "translate-page-showing-all": "Čäittimnáál $1 {{PLURAL:$1|viestâ|viestâ|viestâ|viestâd}}.",
+ "translate-page-showing-none": "Iä viestah čäittimnáál.",
+ "translate-next": "Čuávuvâš sijđo",
+ "translate-prev": "Oovdeb sijđo",
+ "translate-page-description-legend": "Tiäđuh juávhust",
+ "translate-page-description-hasoptional": "Taan viestâjuávhust láá valjimiävtuliih viestah.\nValjimiävtuliih viestah kolgâččij jurgâliđ tuše kieláid main láá eromâšvátámušah tego koskâmeerhâ váilum teikkâ jiešnoomâi translitteristem. $1",
+ "translate-page-description-hasoptional-open": "Čääiti valjimiävtuliih viestah.",
+ "translate-page-edit": "mute",
+ "translate-optional": "(valjimiävtulâš)",
+ "translate-edit-title": "Mute siijđo $1",
+ "translate-edit-definition": "Viestâ miäruštâllâm",
+ "translate-export-form-format": "Häämi",
+ "right-translate-messagereview": "Tuhhiittiđ jurgâlusâid",
+ "translate-rcfilters-translations": "Jurgâlusah",
+ "translate-rcfilters-translations-only-label": "Jurgâlusah",
+ "translate-rcfilters-translations-filter-label": "Iä jurgâlusah",
+ "translate-stats-users": "Jurgâleijeeh",
+ "translate-statsf-scale-years": "ihe",
+ "translate-statsf-scale-weeks": "okko",
+ "translate-statsf-scale-days": "peivi",
+ "translate-statsf-count-edits": "hammiimeh",
+ "translate-statsf-count-users": "aktiivliih jurgâleijeeh",
+ "translate-statsf-count-reviews": "jurgâlusâi tuhhiitmeh",
+ "translate-statsf-count-reviewers": "njuálgulohheeh",
+ "translate-sidebar-alltrans": "Eres kieláid",
+ "translations": "Puoh jurgâlusah",
+ "translate-translations-fieldset-title": "Viestâ",
+ "translate-translations-messagename": "Nommâ:",
+ "translate-translations-project": "Proojeekt:",
+ "languagestats": "Kielâstatistiikeh",
+ "languagestats-recenttranslations": "vorâs jurgâlusah",
+ "translate-langstats-expand": "čääiti",
+ "translate-langstats-collapse": "čievâ",
+ "translate-language-code": "Kielâkoodi",
+ "translate-language-code-field-name": "Kielâkoodi:",
+ "translate-language": "Kielâ",
+ "translate-total": "Viestah",
+ "translate-untranslated": "Jurgâlhánnáá",
+ "translate-percentage-fuzzy": "Puárásmum",
+ "translate-ls-column-group": "Viestâjuávkku",
+ "translate-mgs-pagename": "Viestâjuávkkustatistiikeh",
+ "translate-mgs-group": "Viestâjuávkku:",
+ "translate-mgs-nocomplete": "Ele čääiti kielâid, moi jurgâlem lii vaalmâš",
+ "translate-mgs-submit": "Čääiti lovottuvâid",
+ "translate-mgs-column-language": "Kielâ",
+ "supportedlanguages": "Aktiivliih kielah",
+ "supportedlanguages-colorlegend": "Ivne čielgiittâs: Majemuš jurgâlus $1 peivid tassaaš",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Jurgâleijee}}|Jurgâleijeeh}}: $1",
+ "supportedlanguages-recenttranslations": "vorâs jurgâlusah",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|nubástus|nubástus|nubástus|nubástussâd}} - majemuš nubástus $3 {{PLURAL:$3|peivi|peeivi|peeivi|peivid}} tassaaš",
+ "translate-supportedlanguages-cached": "Taah tiäđuh láá koskâmuštoost, mii rahtui $1 tassaaš.",
+ "managemessagegroups": "Viestâjuávhui haldâšem",
+ "translate-smg-rename-select": "Valjii",
+ "translate-smg-rename-cancel": "Jooskâ",
+ "translate-smg-strong-sync-help": "Iše",
+ "translate-smg-group-message-action-history": "Historjá",
+ "translate-smg-group-message-tag-outdated": "Puárásmum",
+ "translate-smg-group-message-message-other-langs": "Eres kielah:",
+ "translate-import-load": "Luođii tiätuvuárhá",
+ "translate-gs-code": "Koodi",
+ "translate-documentation-language": "jurgâlemravvuuh",
+ "translate-searchprofile": "Jurgâlusah",
+ "translate-dynagroup-recent-label": "Vorâs jurgâlusah",
+ "translate-dynagroup-recent-desc": "Taat viestâjuávkku čáittá puoh vorâs jurgâlusâid.\nHeivee pyereest jurgâlusâi täärhistmân.",
+ "translate-msggroupselector-projects": "Viestâjuávkku",
+ "translate-msggroupselector-search-all": "Puoh",
+ "tux-languageselector": "Puátukielâ:",
+ "tux-tab-all": "Puoh",
+ "tux-tab-untranslated": "Jurgâlhánnáá",
+ "tux-tab-outdated": "Puárásmum",
+ "tux-tab-translated": "Jurgâlum",
+ "tux-tab-unproofread": "Täärhisthánnáá",
+ "tux-edit": "Mute",
+ "tux-status-optional": "Valjimiävtulâš",
+ "tux-status-fuzzy": "Puárásmum",
+ "tux-status-proofread": "Njuálguluhhum",
+ "tux-status-translated": "Jurgâlum",
+ "tux-editor-save-button-label": "Almostit jurgâlus",
+ "tux-editor-skip-button-label": "Njuškii čuávuvâžân",
+ "tux-editor-cancel-button-label": "Jooskâ",
+ "tux-editor-confirm-button-label": "Tuhhit jurgâlus",
+ "tux-editor-suggestions-title": "Iävtuttâsah",
+ "tux-editor-in-other-languages": "Eres kieláid",
+ "tux-notices-hide": "čievâ",
+ "tux-editor-clear-translated": "Čievâ jurgâlum",
+ "tux-editor-proofreading-mode": "Njuálguluuhâm",
+ "tux-editor-translate-mode": "Luvâttâllâm",
+ "tux-editor-proofreading-hide-own-translations": "Čievâ jieijâs jurgâlusâid",
+ "tux-editor-proofreading-show-own-translations": "Čääiti jieijâs jurgâlusâid",
+ "tux-proofread-edit-label": "Mute",
+ "tux-editor-page-mode": "Sijđo",
+ "tux-editor-doc-editor-cancel": "Jooskâ",
+ "tux-message-filter-advanced-button": "Vijđedum uuccâm",
+ "tux-proofread-translated-by-self": "Tuu jurgâlem",
+ "tux-empty-list-translated-action": "Jurgâl",
+ "tux-editor-close-tooltip": "Toopâ",
+ "tux-editor-expand-tooltip": "Styereed",
+ "tux-editor-collapse-tooltip": "Čievâ",
+ "tux-editor-message-tools-history": "Historjá",
+ "tux-editor-message-tools-delete": "Siho",
+ "tux-editor-message-tools-translations": "Puoh jurgâlusah",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|kielâ|kielâ|kielâ|kiellâd}} lase",
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|eres juávkku|eres juávhu|eres juávhu|eres juávkkud}}",
+ "specialpages-group-translation": "Jurgâlus"
+}
diff --git a/Translate/i18n/core/sms.json b/Translate/i18n/core/sms.json
new file mode 100644
index 00000000..f3c972ea
--- /dev/null
+++ b/Translate/i18n/core/sms.json
@@ -0,0 +1,165 @@
+{
+ "@metadata": {
+ "authors": [
+ "Yupik"
+ ]
+ },
+ "translate": "Jåårǥlââʹtt",
+ "translate-extensionname": "Jåårǥlââʹtt",
+ "translate-export-csv-definition": "Saaǥǥ meäʹrtelm",
+ "translate-taction-translate": "Jåårǥlââʹtt",
+ "translate-taction-proofread": "Vuõigglooǥǥ",
+ "translate-taction-lstats": "Ǩiõllstatistiikk",
+ "translate-taction-mstats": "Saakkjoukkstatistiikk",
+ "translate-page-settings-legend": "Asetõõzz",
+ "translate-page-group": "Joukk",
+ "translate-page-language": "Ǩiõll",
+ "translate-submit": "Ooʒʒ",
+ "translate-prev": "Oouʹdab seidd",
+ "translate-page-description-legend": "Teâđ jooukâst",
+ "translate-page-description-hasoptional-open": "Čuäʹjet vaʹlljeemnallšem saaǥǥid.",
+ "translate-page-edit": "muuʹtt",
+ "translate-optional": "(vaʹlljeemnallšem)",
+ "translate-edit-title": "Muuʹtt \"$1\"",
+ "translate-edit-definition": "Saaǥǥ meäʹrtelm",
+ "translate-edit-contribute": "muuʹtt",
+ "translate-edit-information": "Teâđ saaǥǥâst ($1)",
+ "translate-edit-tmmatch-source": "Jåårǥlõõzz käivvteʹkstt: $1",
+ "translate-edit-nopermission": "Saaǥǥi jåårǥlâttmõʹšše taarbšet jåårǥlâʹttemvuõiggâdvuõđid.",
+ "translate-edit-askpermission": "Vuäǯǯad jåårǥlâʹttemvuõiggâdvuõđid",
+ "translate-checks-gettext-plural-missing": "Jåårǥlõõzzâst âlgg leeʹd <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-unicode-plural-missing": "Jåårǥlõõzzâst âlgg leeʹd <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-pref-editassistlang": "Veäʹǩǩ-ǩiõl:",
+ "prefs-translate": "Jåårǥlâʹttemasetõõzz",
+ "right-translate-messagereview": "Priimmâd jåårǥlõõzzid",
+ "action-translate-messagereview": "taʹrǩǩõõllâd jåårǥlõõzzid",
+ "translate-rcfilters-translations": "Jåårǥlõõzz",
+ "translate-rcfilters-translations-only-label": "Jåårǥlõõzz",
+ "translate-rcfilters-translations-only-desc": "Muttâz seeidaid, kook lie jåårǥlõõzz.",
+ "translate-rcfilters-translations-filter-label": "Jie leäkku jåårǥlõõzz",
+ "translate-rcfilters-translations-filter-desc": "Puk muttâz, kook jie leäkku jåårǥlõõzz.",
+ "translate-rc-translation-filter": "Siʹlle jåårǥlõõzzid",
+ "translate-rc-translation-filter-only": "Čuäʹjet pâi jåårǥlõõzzid",
+ "translate-rc-translation-filter-filter": "čiõǥǥ jåårǥlõõzzid",
+ "translationstats": "Jåårǥlâʹttemstatistiikk",
+ "translate-stats-edits": "Muttâz",
+ "translate-stats-users": "Jåårǥlõʹtti",
+ "translate-stats-reviews": "Vuõigglooǥǥ",
+ "translate-stats-reviewers": "Vuõigglookki",
+ "translate-statsf-width": "Kobddâdvuõtt pikseleeʹlen:",
+ "translate-statsf-height": "Õllâdvuõtt pikseleeʹlen:",
+ "translate-statsf-scale-years": "eeʹǩǩ",
+ "translate-statsf-scale-months": "määnpââʹjj",
+ "translate-statsf-scale-weeks": "neäʹttel",
+ "translate-statsf-scale-days": "peiʹvv",
+ "translate-statsf-scale-hours": "čiâss",
+ "translate-statsf-count-edits": "muttsi lååkkmieʹrr",
+ "translate-statsf-count-users": "aktiivlaž jåårǥlõʹtti",
+ "translate-statsf-count-registrations": "ođđ õõʹnni",
+ "translate-statsf-submit": "Ouddǩiõččmõš",
+ "translate-tag-page-desc": "Wikiseeid [[$2|$1]] jåårǥlõs ǩiõlâst $3 ($4)",
+ "translate-sidebar-alltrans": "Jeeʹres ǩiõlid",
+ "translations": "Puk jåårǥlõõzz",
+ "translations-summary": "Ǩeeʹrjet saaǥǥ nõõm, koon jåårǥlõõzz haaʹlääk vueiʹnned.",
+ "translate-translations-none": "Saaǥǥâst $1 ij leäkku jåårǥlõs",
+ "translate-translations-count": "Ohttsa {{PLURAL:$1|õhtt jåårǥlõs|$1 jåårǥlõõzz|$1 jåårǥlõssâd}}.",
+ "translate-translations-fieldset-title": "Saakk",
+ "translate-translations-messagename": "Nõmm:",
+ "translate-translations-project": "Projeʹktt:",
+ "languagestats": "Ǩiõllstatistiikk",
+ "languagestats-summary": "Tät seidd čuäʹjat jåårǥlâʹttemstatistiikkid vaʹlljuum ǩiõl puk saakkjooukid.",
+ "messagegroupstats-summary": "Tän seeidast lie statistiikk saakkjooukin.",
+ "languagestats-stats-for": "Jåårǥlâʹttemstatistiikk ǩiõʹlle $1 ($2).",
+ "languagestats-recenttranslations": "ođđsumus jåårǥlõõzz",
+ "translate-langstats-expand": "čuäʹjet",
+ "translate-langstats-collapse": "čiõǥǥ",
+ "translate-langstats-expandall": "čuäʹjet pukid",
+ "translate-language-code": "Ǩiõllkoodd",
+ "translate-language-code-field-name": "Ǩiõllkoodd:",
+ "translate-language": "Ǩiõll",
+ "translate-total": "Saakkmieʹrr",
+ "translate-percentage-complete": "Jåårǥlõttum",
+ "translate-percentage-proofread": "Vuõigglokkum",
+ "translate-languagestats-overall": "Puk saakkjoouk õõutsââʹjest",
+ "translate-ls-submit": "Čuäʹjet statistiikkid",
+ "translate-ls-column-group": "Saakkjoukk",
+ "translate-mgs-pagename": "Saakkjoukkstatistiikk",
+ "translate-mgs-group": "Saakkjoukk:",
+ "translate-mgs-nocomplete": "Jeäʹl čuäʹjet ǩiõlid, kooi jåårǥlõõzz lie valmmâž.",
+ "translate-mgs-noempty": "Jeäʹl čuäʹjet ǩiõlid, kooi jåårǥlâttmõš ij leäkku võl alttuum.",
+ "translate-mgs-submit": "Čuäʹjet statistiikkid",
+ "translate-mgs-column-language": "Ǩiõll",
+ "translate-mgs-totals": "Puk $1 {{PLURAL:$1|ǩiõll|ǩiõl|ǩiõllâd}} õhttsa",
+ "supportedlanguages": "Aktiivlaž ǩiõl",
+ "supportedlanguages-colorlegend": "Eeuʹn čiʹlǧǧtõõzz: mââimõs jåårǥlõs $1 peiʹvved mââiårra.",
+ "supportedlanguages-recenttranslations": "ođđsumus jåårǥlõõzz",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|ǩiõll|ǩiõl|ǩiõllâd}} õhttsa",
+ "abusefilter-edit-builder-vars-translate-target-language": "Jåårǥlõõzzi täävtõsǩiõll",
+ "translate-jssti-add": "Lââʹzzet liʹstte",
+ "translate-smg-rename-select": "Vaʹlljed",
+ "translate-smg-rename-cancel": "Jõõsk",
+ "translate-smg-rename-new": "Lââʹzzet ođđ...",
+ "translate-smg-strong-sync-help": "Vuäʹpstõõzz",
+ "translate-smg-group-message-action-history": "Historia",
+ "translate-smg-group-message-tag-rename": "Uuʹd ođđ nõõm",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|ǩeâlǥal|ǩeâlggal|ǩeâlggled}}:",
+ "translate-smg-group-message-message-other-langs": "Jeeʹres ǩiõl:",
+ "translate-manage-import-new": "Ođđ saakk $1",
+ "translate-manage-import-deleted": "Jaukkuum saakk $1",
+ "translate-manage-action-rename": "Uuʹd ođđ nõõm",
+ "translate-manage-source-message-not-found": "Saaǥǥ meäʹrtelm ij käunnʼjam",
+ "translate-import-load": "Laadd teâttõõzz",
+ "translate-import-err-dl-failed": "Teâttõõzz ooccmõš ij oʹnnstam:\n$1",
+ "translate-import-err-ul-failed": "Teâttõõzz vuõlttummuš ij oʹnnstam.",
+ "translate-import-err-invalid-title": "Uvddum teâttõsnõmm <nowiki>$1</nowiki> lij vââǥǥlaž.",
+ "translate-gs-code": "Koodd",
+ "translate-gs-continent": "Maaiʹlmkuʹsǩǩ",
+ "translate-gs-total": "Õhttsa",
+ "translate-searchprofile": "Jåårǥlõõzz",
+ "translate-searchprofile-tooltip": "Ooʒʒ puk jåårǥlõõzzin",
+ "translate-workflowstatus": "Status: $1",
+ "translate-stats-workflow": "Status",
+ "translate-dynagroup-recent-label": "Ođđsumus jåårǥlõõzz",
+ "translate-dynagroup-additions-desc": "Tän saakkjooukâst lie ođđ da muttum saaǥǥ.",
+ "translate-msggroupselector-projects": "Saakkjoukk",
+ "translate-msggroupselector-search-placeholder": "Ooʒʒ jooukid",
+ "translate-msggroupselector-search-all": "Puk",
+ "tux-languageselector": "Täävtõsǩiõll:",
+ "tux-select-target-language": "Jåårǥlõõzzi täävtõsǩiõll",
+ "tux-tab-all": "Puk",
+ "tux-tab-translated": "Jåårǥlõttum saaǥǥ",
+ "tux-edit": "Muuʹtt",
+ "tux-status-optional": "Vaʹlljeemnallšem",
+ "tux-status-translated": "Jåårǥlõttum",
+ "tux-editor-placeholder-language": "Jiiʹjjes jåårǥlõs ǩiõʹlle: $1",
+ "tux-editor-editsummary-placeholder": "Vaʹlljeemnallšem õʹhtteǩeässmõš",
+ "tux-editor-discard-changes-button-label": "Tirššâl muttsid",
+ "tux-editor-save-button-label": "Õlmstââʹtt jåårǥlõõzz",
+ "tux-editor-cancel-button-label": "Jõõsk",
+ "tux-editor-confirm-button-label": "Priim jåårǥlõõzz",
+ "tux-editor-suggestions-title": "Eʹtǩǩõõzz",
+ "tux-editor-in-other-languages": "Jeeʹres ǩiõlid",
+ "tux-notices-hide": "čiõǥǥ",
+ "tux-editor-message-desc-more": "Čuäʹjet lââʹzz",
+ "tux-editor-clear-translated": "Čiõǥǥ jåårǥlõttum saaǥǥid",
+ "tux-editor-proofreading-mode": "Vuõigglooǥǥ",
+ "tux-editor-translate-mode": "Listt",
+ "tux-proofread-edit-label": "Muuʹtt",
+ "tux-editor-page-mode": "Seidd",
+ "tux-editor-outdated-notice-diff-link": "Čuäʹjet muttsid",
+ "tux-editor-doc-editor-cancel": "Jõõsk",
+ "tux-message-filter-placeholder": "Siʹlle liist",
+ "tux-message-filter-result": "{{PLURAL:$1|Õhtt puåđõs käunnʼji|$1 puåđõõzz käunnʼje|$1 puåđõssâd käunnʼje}} ooccâmsänna leʹbe -saaʹnid $2",
+ "tux-message-filter-advanced-button": "Tääʹrǩab ooccmõš",
+ "tux-empty-list-translated-action": "Jåårǥlââʹtt",
+ "tux-empty-show-optional-messages": "Čuäʹjet vaʹlljeemnallšem saaǥǥid.",
+ "tux-empty-list-other-link": "Čuäʹjet puk saaǥǥid",
+ "tux-editor-expand-tooltip": "Šuuʹred",
+ "tux-editor-collapse-tooltip": "Čiõǥǥ",
+ "tux-editor-message-tools-history": "Historia",
+ "tux-editor-message-tools-delete": "Jaukkâd",
+ "tux-editor-message-tools-translations": "Puk jåårǥlõõzz",
+ "tux-editor-message-tools-linktothis": "Liŋkk tän saʹǩǩe",
+ "tux-editor-loading-failed": "Jåårǥlâʹttemneävvai laaddmõš ij oʹnnstam: $1",
+ "specialpages-group-translation": "Jåårǥlõs"
+}
diff --git a/Translate/i18n/core/so.json b/Translate/i18n/core/so.json
new file mode 100644
index 00000000..61db45cd
--- /dev/null
+++ b/Translate/i18n/core/so.json
@@ -0,0 +1,35 @@
+{
+ "@metadata": {
+ "authors": [
+ "Abdullahi",
+ "Abshirdheere",
+ "Maax",
+ "Mimursal"
+ ]
+ },
+ "translate": "Fasir",
+ "translate-taction-proofread": "Sixid",
+ "translate-taction-lstats": "Tirakoobka Luqadda",
+ "translate-taction-mstats": "Fariinta Tirakoobka Kooxda",
+ "translate-submit": "Qaado",
+ "translate-page-showing": "Soo bandhigista ka bilaabata $1 ilaa $2 of $3.",
+ "translate-page-showing-none": "Wax qoraal ah lama soo bandhigin.",
+ "translate-page-description-legend": "Macluumaad kusaabsan qaybta",
+ "translate-edit-nopermission": "Waxaad ubaahantahay ruqsad si aad u turjunto fariimaha.",
+ "translate-tag-page-desc": "Turjumidda ee bogga wiki [[$2|$1]].",
+ "languagestats-summary": "Boggaan waxaa lagu soo bandhigay tirakoobka turjumaadda qayba kasta oo ka mid ah fariimaha luaqadaha.",
+ "languagestats-stats-for": "Tirakoobka turtumida luqadda $1 ($2).",
+ "translate-language-code": "Sumadda luqadda",
+ "translate-language-code-field-name": "Sumadda luqadda:",
+ "translate-suppress-complete": "Gabi ahaanba qari qaybaha qoraalada turjuman",
+ "translate-ls-noempty": "Gabi ahaanba qari qaybaha qoraalada aan la turjumin",
+ "translate-language": "Luqad:",
+ "translate-ls-submit": "Itus tirakoobka",
+ "translate-mgs-pagename": "Fariinta Tirakoobka Kooxda",
+ "translate-mgs-submit": "Itus tirakoobka",
+ "translate-mgs-column-language": "Luqada",
+ "supportedlanguages-count": "Wadarta ku jirta waa $1 {{PLURAL:$1|luqad|luqadood}}.",
+ "translate-documentation-language": "Dukumiinti fariin ah",
+ "translate-dynagroup-recent-desc": "Qaybtaan waxa ay ku tusaysaa dhamaan turjumiddii ugu dambaysay ee luqadaan.\nEe faaiidada badan leh saxidda luqada.",
+ "tux-message-filter-advanced-button": "Raadinta sare"
+}
diff --git a/Translate/i18n/core/sq.json b/Translate/i18n/core/sq.json
new file mode 100644
index 00000000..08462340
--- /dev/null
+++ b/Translate/i18n/core/sq.json
@@ -0,0 +1,35 @@
+{
+ "@metadata": {
+ "authors": [
+ "BaRaN6161 TURK",
+ "Dori",
+ "GretaDoci",
+ "Kosovastar",
+ "Liridon",
+ "Puntori"
+ ]
+ },
+ "translate": "Përkthime",
+ "translate-extensionname": "Përkthe",
+ "translate-taction-translate": "Përkthej",
+ "translate-taction-lstats": "Statistikat gjuhësore",
+ "translate-page-group": "Grupi",
+ "translate-page-language": "Gjuha",
+ "translate-page-edit": "redakto",
+ "translate-edit-contribute": "kontribute",
+ "prefs-translate": "Opsione përkthimi",
+ "translate-stats-edits": "Redaktime",
+ "translate-stats-users": "Përkthyes",
+ "translate-statsf-width": "Gjerësia në piksel:",
+ "translate-statsf-height": "Lartësia në piksel:",
+ "translate-statsf-days": "Periudha kohore në ditë:",
+ "translate-statsf-start": "Periudha kohore në ditë:",
+ "translate-statsf-scale-days": "Ditë",
+ "translate-statsf-scale-hours": "Orë",
+ "translate-statsf-count-users": "Përkthyesit aktiv",
+ "translate-statsf-submit": "Parapamja",
+ "translate-mgs-pagename": "Statistikat e mesazhit të grupit",
+ "translate-documentation-language": "Dokumentimi i mesazhit",
+ "tux-editor-save-button-label": "Ruaj përkthimin",
+ "tux-editor-shortcut-info": "Shtypni \"$1\" për të ruajtur ose \"$2\" për të kaluar në mesazhin tjetër, ose \"$3\" për shkurtesa të tjera."
+}
diff --git a/Translate/i18n/core/sr-ec.json b/Translate/i18n/core/sr-ec.json
new file mode 100644
index 00000000..5bcaa418
--- /dev/null
+++ b/Translate/i18n/core/sr-ec.json
@@ -0,0 +1,400 @@
+{
+ "@metadata": {
+ "authors": [
+ "Acamicamacaraca",
+ "BadDog",
+ "Kizule",
+ "Milicevic01",
+ "Obsuser",
+ "Prevodim",
+ "Rancher",
+ "Sasa Stefanovic",
+ "Srdjan m",
+ "Zoranzoki21",
+ "Жељко Тодоровић",
+ "Милан Јелисавчић",
+ "Михајло Анђелковић",
+ "Сербијана"
+ ]
+ },
+ "translate": "Превођење",
+ "translate-extensionname": "Превођење",
+ "translate-desc": "[[Special:Translate|Посебна страница]] за превођење Медијавикија и других програма",
+ "translate-fuzzybot-desc": "Ово је посебан системски налог који користи [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate додатак „Превођење”] Медијавикија. Користи се за одржавање превода.\nНалог је део софтвера Медијавики и није у власништву ниједног корисника.",
+ "translate-taskui-export-to-file": "извези у изворном облику",
+ "translate-taskui-export-as-po": "извези за превођење ван мреже",
+ "translate-export-csv-definition": "Дефиниција поруке",
+ "translate-taction-translate": "Превођење",
+ "translate-taction-proofread": "Провера",
+ "translate-taction-lstats": "Статистика језика",
+ "translate-taction-mstats": "Статистика групе порука",
+ "translate-taction-export": "Извоз",
+ "translate-taction-disabled": "Радња је онемогућена на овом викију.",
+ "translate-page-no-such-language": "Наведени језик није важећи.",
+ "translate-page-no-such-group": "Наведена група није важећа.",
+ "translate-page-disabled": "Превођење на овај језик у овој групи је онемогућено.\nРазлог:\n\n<em>$1</em>",
+ "translate-language-disabled": "Превођење на овај језик је онемогућено.",
+ "translate-page-settings-legend": "Подешавања",
+ "translate-page-group": "Група",
+ "translate-page-language": "Језик",
+ "translate-page-limit": "Ограничење",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|порука|поруке|порука}} по страници",
+ "translate-submit": "Добави",
+ "translate-page-navigation-legend": "Навигација",
+ "translate-page-showing": "Приказују се поруке од $1 до $2, од укупно $3.",
+ "translate-page-showing-all": "{{PLURAL:$1|Приказује се $1 порука|Приказују се $1 поруке|Приказују се $1 порука}}.",
+ "translate-page-showing-none": "Нема порука за приказ.",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "Следећа страница",
+ "translate-prev": "Претходна страница",
+ "translate-page-description-legend": "Информације о групи",
+ "translate-page-description-hasoptional": "Ова група порука садржи необаветне поруке.\nЊих би требало преводити само када језик има посебне потребе,\nпопут неупотребе размака или пресловљавања имена. $1",
+ "translate-page-description-hasoptional-open": "Прикажи необавезне поруке.",
+ "translate-page-edit": "уреди",
+ "translate-optional": "(опционално)",
+ "translate-ignored": "(занемарено)",
+ "translate-edit-title": "Уредите страницу „$1”",
+ "translate-edit-definition": "Текст поруке",
+ "translate-edit-contribute": "допринеси",
+ "translate-edit-no-information": "<em>Ова порука нема документацију.\nАко знате где или како се користи, помозите другим преводиоцима тако што ћете је написати.</em>",
+ "translate-edit-information": "Информације о поруци ($1)",
+ "translate-edit-warnings": "Упозорења о непотпуним преводима",
+ "translate-edit-tmmatch-source": "Изворни текст за превођење: $1",
+ "translate-edit-tmmatch": "$1% подударања",
+ "translate-edit-nopermission": "Потребна су вам преводилачка права да бисте преводили поруке.",
+ "translate-edit-askpermission": "Затражи дозволу",
+ "exporttranslations": "Извоз превода",
+ "translate-export-form-format": "Формат",
+ "translate-export-invalid-format": "Наведите важећи формат.",
+ "translate-export-not-supported": "Извоз превода није подржан.",
+ "translate-export-format-notsupported": "Група порука не подржава наведени формат извоза.",
+ "translate-export-group-too-large": "Изабрана група порука је превелика. Изаберите групу порука која има мање од $1 {{PLURAL:$1|поруке|порука}} или се посаветујте с администраторем превода.",
+ "translate-checks-parameters": "Следећи {{PLURAL:$2|параметар се не користи|параметри се не користе}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "Следећи {{PLURAL:$2|параметар је непознат|параметри су непознати}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "Присутан је непаран број {{PLURAL:$2|заграда}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Следећи линк је проблематичан|Следећа $2 линка су проблематична|Следећих $2 линкова је проблематично}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Следећи линк недостаје|Следећа $2 линка недостају|Следећих $2 линкова недостају}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Изворни текст користи ознаку <nowiki>{{PLURAL:}}</nowiki>, а превод не.",
+ "translate-checks-plural-forms": "У ознаци <nowiki>{{PLURAL:}}</nowiki> {{PLURAL:$1|унет је један облик|унета су $1 облика}}, али {{PLURAL:$2|само један облик је подржан|$2 облика су подржана|$2 облика је подржано}} (изузимајући облике 0= и 1=).",
+ "translate-checks-plural-dupe": "Ознака <nowiki>{{PLURAL:}}</nowiki> садржи удвојене облике. Облик <nowiki>{{PLURAL:$1|врата|врата}}</nowiki> би требало писати само као <nowiki>{{PLURAL:$1|врата}}</nowiki>.",
+ "translate-checks-gettext-plural-missing": "Овај превод мора имати <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-unsupported": "Ова порука не подржава <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-unicode-plural-missing": "Овај превод мора имати <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-unsupported": "Ова порука не подржава <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-pagename": "Именски простор је промењен у односу на изворни текст",
+ "translate-checks-format": "Овај превод не следи изворни текст или нема важећу синтаксу: $1",
+ "translate-checks-escape": "{{PLURAL:$2|Следећи излаз карактера може бити случајан|Следећи излази карактера могу бити случајни}}: <strong>$1</strong>. {{PLURAL:$4|Коректан излаз карактера је|Коректни излази карактера садрже:}} $3.",
+ "translate-checks-parametersnotequal": "Број параметара је {{PLURAL:$1|$1}}; требало би бити {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> је погрешно уобличен.",
+ "translate-checks-fudforum-syntax": "На овом пројекту, користите <nowiki>$1</nowiki> уместо <nowiki>$2</nowiki.",
+ "translate-checks-newline-missing-start": "{{PLURAL:$1|Недостаје $1 знак|Недостају $1 знака|Недостају $1 знакова}} за нови ред на почетку превода.",
+ "translate-checks-newline-missing-end": "{{PLURAL:$1|Недостаје $1 знак|Недостају $1 знака|Недостају $1 знакова}} за нови ред на крају превода.",
+ "translate-checks-newline-extra-start": "{{PLURAL:$1|Недостаје $1 додатни знак|Недостају $1 додатна знака|Недостају $1 додатних знакова}} за нови ред на почетку превода.",
+ "translate-checks-newline-extra-end": "{{PLURAL:$1|Недостаје $1 додатни знак|Недостају $1 додатна знака|Недостају $1 додатних знакова}} за нови ред на крају превода.",
+ "translate-checks-replacement": "Користи $2 уместо $1.",
+ "translate-pref-editassistlang": "Помоћни језици:",
+ "prefs-translate": "Опције превођења",
+ "translate-pref-editassistlang-help": "Списак кодова језика раздвојених зарезом.\nПревод поруке на овим језицима приказује се док преводите.\nПодразумевани списак језика зависи од вашег језика.",
+ "translate-pref-editassistlang-bad": "Неважећи језички код на списку:\n<nowiki>$1</nowiki>.",
+ "right-translate": "уређивање коришћењем интерфејса за превођење",
+ "action-translate": "уређујете помоћу интерфејса превода",
+ "right-translate-manage": "управљање групама порука",
+ "action-translate-manage": "управљате групама порука",
+ "right-translate-import": "увожење превода ван мреже",
+ "action-translate-import": "увозите преводе ван мреже",
+ "right-translate-messagereview": "проверавање превода",
+ "action-translate-messagereview": "проверавате преводе",
+ "right-translate-groupreview": "мењање стања радног тока за групе порука",
+ "action-translate-groupreview": "мењате стање тока рада за групе порука",
+ "translate-rcfilters-translations": "Преводи",
+ "translate-rcfilters-translations-only-label": "Преводи",
+ "translate-rcfilters-translations-only-desc": "Измене преведених страница",
+ "translate-rcfilters-translations-filter-label": "Нису преводи",
+ "translate-rcfilters-translations-filter-desc": "Све измене које нису преводи",
+ "translate-rcfilters-translations-site-label": "Системске поруке",
+ "translate-rcfilters-translations-site-desc": "Прилагођавања порука сајта у именском простору Медијавики.",
+ "translate-rc-translation-filter": "Филтрирај преводе:",
+ "translate-rc-translation-filter-no": "не ради ништа",
+ "translate-rc-translation-filter-only": "прикажи само преводе",
+ "translate-rc-translation-filter-filter": "избаци преводе",
+ "translate-rc-translation-filter-site": "само измене порука сајта",
+ "translationstats": "Статистика превода",
+ "translate-stats-edits": "Измене",
+ "translate-stats-users": "Преводиоци",
+ "translate-stats-registrations": "Регистрације",
+ "translate-stats-reviews": "Провере",
+ "translate-stats-reviewers": "Проверавачи",
+ "translate-statsf-intro": "Помоћу овог обрасца можете да генеришете једноставну статистику.\nСве вредности имају доње и горње границе.",
+ "translate-statsf-options": "Опције графикона",
+ "translate-statsf-width": "Ширина у пикселима:",
+ "translate-statsf-height": "Висина у пикселима:",
+ "translate-statsf-days": "Период у данима:",
+ "translate-statsf-start": "Датум почетка:",
+ "translate-statsf-scale": "Зрнатост:",
+ "translate-statsf-scale-years": "Године",
+ "translate-statsf-scale-months": "месеци",
+ "translate-statsf-scale-weeks": "недеље",
+ "translate-statsf-scale-days": "дани",
+ "translate-statsf-scale-hours": "сати",
+ "translate-statsf-count": "Мерење:",
+ "translate-statsf-count-edits": "Број измена",
+ "translate-statsf-count-users": "Активни преводиоци",
+ "translate-statsf-count-registrations": "Нови корисници",
+ "translate-statsf-count-reviews": "Провере превода",
+ "translate-statsf-count-reviewers": "Проверавачи",
+ "translate-statsf-language": "Списак кодова језика раздвојених зарезом:",
+ "translate-statsf-group": "Списак кодова група раздвојених зарезом:",
+ "translate-statsf-submit": "Прегледај",
+ "translate-statsf-unknown-error": "Дошло је до непознате грешке.",
+ "translate-statsf-error-message": "Дошло је до грешке при учитавању графика: $1",
+ "translate-tag-page-desc": "Превод вики странице [[$2|$1]] са $3 ($4).",
+ "translate-sidebar-alltrans": "На другим језицима",
+ "translations": "Сви преводи",
+ "translations-summary": "Унесите име поруке испод да бисте приказали све доступне преводе.",
+ "translate-translations-no-message": "Порука „$1” није преводива",
+ "translate-translations-none": "Не постоје преводи за „$1”",
+ "translate-translations-count": "{{PLURAL:$1|Пронађен је један превод|Пронађена су $1 превода|Пронађено је $1 превода}}.",
+ "translate-translations-fieldset-title": "Порука",
+ "translate-translations-messagename": "Име:",
+ "translate-translations-project": "Пројекат:",
+ "translate-translations-including-no-param": "Наведите важећи кључ поруке у параметру подстранице",
+ "translate-translations-history-short": "и",
+ "languagestats": "Статистика језика",
+ "languagestats-summary": "Ова страница приказује статистику превода за све групе порука на неком језику.",
+ "messagegroupstats-summary": "Ова страница приказује статистику група порука.",
+ "languagestats-stats-for": "Статистика превођења на {{LCFIRST:$1}} ($2).",
+ "languagestats-recenttranslations": "недавни преводи",
+ "translate-langstats-incomplete": "Неке статистике наведене на страници су непотпуне. Поново учитајте страницу да бите добили још статистика.",
+ "translate-langstats-expand": "развиј",
+ "translate-langstats-collapse": "скупи",
+ "translate-langstats-expandall": "развиј све",
+ "translate-langstats-collapseall": "скупи све",
+ "translate-language-code": "Језички код",
+ "translate-language-code-field-name": "Језички код:",
+ "translate-suppress-complete": "Сакриј потпуно преведене групе порука",
+ "translate-ls-noempty": "Сакриј потпуно непреведене групе порука",
+ "translate-language": "Језик",
+ "translate-total": "Поруке",
+ "translate-untranslated": "Непреведено",
+ "translate-percentage-complete": "Завршено",
+ "translate-percentage-fuzzy": "Застарело",
+ "translate-percentage-proofread": "Проверено",
+ "translate-languagestats-overall": "Све групе порука заједно",
+ "translate-ls-submit": "Прикажи статистику",
+ "translate-ls-column-group": "Група порука",
+ "translate-mgs-pagename": "Статистика група порука",
+ "translate-mgs-fieldset": "Подешавање приказа",
+ "translate-mgs-group": "Група порука:",
+ "translate-mgs-nocomplete": "Не приказуј језике сa потпуним преводом",
+ "translate-mgs-noempty": "Не приказуј језике који немају никакве преводе",
+ "translate-mgs-submit": "Прикажи статистику",
+ "translate-mgs-column-language": "Језик",
+ "translate-mgs-totals": "Свих $1 {{PLURAL:$1|језика}} заједно",
+ "translate-mgs-invalid-group": "Наведена група „$1” не постоји.",
+ "translate-mgs-nothing": "Нема ничега да се прикаже за захтеване статистике.",
+ "translate-tes-group-not-found": "Нема подударних резултата",
+ "supportedlanguages": "Активни језици",
+ "supportedlanguages-summary": "Ова страница приказује списак активних језика које подржава {{SITENAME}},\nзаједно са именима преводилаца који раде на том језику.\nИме преводиоца је веће што је више превода допринео.\nБоја линије подвлачења указује колико скоро је преводилац овде био присутан.",
+ "supportedlanguages-colorlegend": "Легенда за боју: последњи превод извршен пре $1 дана.",
+ "supportedlanguages-portallink": "[$1] $2 – $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-sqlite-error": "SQLite није подржан",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Преводилац|Преводитељка}}|Преводиоци}}: $1",
+ "supportedlanguages-recenttranslations": "недавни преводи",
+ "supportedlanguages-count": "Укупно $1 {{PLURAL:$1|језик|језика}}.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|измена|измене|измена}} – последња измена пре $3 {{PLURAL:$3|дан|дана|дана}}",
+ "translate-supportedlanguages-cached": "Ова информација је кеширана пре $1.",
+ "abusefilter-edit-builder-vars-translate-source-text": "Изворни текст преводилачке јединице",
+ "abusefilter-edit-builder-vars-translate-target-language": "Жељени језик за превођење",
+ "translate-jssti-add": "Додај на списак",
+ "managemessagegroups": "Управљање групама порука",
+ "translate-smg-notallowed": "Није вам дозвољено да извршите ову радњу.",
+ "translate-smg-nochanges": "Нема измена за обрађивање.",
+ "translate-smg-submit": "Проследи измене на обраду",
+ "translate-smg-submitted": "Текстови порука су ажурирани. Измене се обрађују у позадини.",
+ "translate-smg-more": "Биће још измена за обраду након што поднесете ове.",
+ "translate-smg-left": "Садржај поруке на викију",
+ "translate-smg-right": "Предстојеће измене",
+ "translate-smg-rename-select": "Изабери",
+ "translate-smg-rename-cancel": "Откажи",
+ "translate-smg-rename-search": "Претражите подударне поруке…",
+ "translate-smg-rename-select-err": "Изаберите поруку за преименовање",
+ "translate-smg-rename-no-msg": "Није пронађена ниједна порука.",
+ "translate-smg-strong-sync-help": "Помоћ",
+ "translate-smg-group-message-action-history": "Историја",
+ "translate-smg-group-action-resolve": "Означи као решено",
+ "translate-smg-group-message-tag-outdated": "Застарело",
+ "translate-smg-group-message-tag-rename": "Преименовано",
+ "translate-smg-group-message-message-content": "Садржај:",
+ "translate-smg-group-message-message-target": "Циљ:",
+ "translate-smg-group-message-message-replacement": "Замена:",
+ "translate-smg-group-message-message-other-langs": "Други језици:",
+ "translate-smg-loading": "Учитавање...",
+ "translate-manage-import-diff": "Порука $1 | Радње: $2",
+ "translate-manage-import-new": "Нова порука $1",
+ "translate-manage-import-deleted": "Избрисана порука $1",
+ "translate-manage-action-import": "увези",
+ "translate-manage-action-conflict": "увези и означи застарелим",
+ "translate-manage-action-ignore": "занемари",
+ "translate-manage-action-fuzzy": "увези преводе и означи их застарелим",
+ "translate-manage-action-rename-fuzzy": "Преименуј и означи преводе застарелим",
+ "translate-manage-action-rename": "Преименуј",
+ "translate-manage-action-ignore-change": "Занемари измене превода",
+ "translate-manage-nochanges": "Нема измена у текстовима порука у овој групи.",
+ "translate-manage-nochanges-other": "Нема измена за овај језик.\nОтворите доњи линк да бисте се вратили на приказ детаља групе.",
+ "translate-manage-inconsistent": "Откривена је недоследност у захтеву.\nПроверите измене па покушајте поново.\nДетаљи: $1.",
+ "translate-manage-toolong": "Највеће време извршавања од $1 {{PLURAL:$1|секунде|секунде|секунди}} је прекорачено.\nПоново пошаљите образац за наставак.",
+ "translate-manage-import-summary": "Увозим нову верзију из спољашњег извора",
+ "translate-manage-import-ignore": "Прескакање поруке $1.",
+ "translate-manage-import-rename-summary": "Преименовано у спољном извору",
+ "translate-manage-conflict-summary": "Увозим нову верзију из спољашњег извора.\nПроверите.",
+ "translate-manage-submit": "Изврши",
+ "translate-manage-intro-other": "Испод је списак измена превода за $1 језик.\nПроверите их и изаберите радњу коју желите да предузмете за свако ажурирање.\nАко изаберете да занемарите измене, ова радња ће бити привремена.",
+ "translate-manage-import-ok": "Увезено: $1.",
+ "translate-manage-import-done": "Увоз је завршен.",
+ "importtranslations": "Увоз превода",
+ "translate-import-from-local": "Отпремање локалне датотеке:",
+ "translate-import-load": "Учитај датотеку",
+ "translate-import-err-dl-failed": "Није могуће добавити датотеку:\n$1",
+ "translate-import-err-ul-failed": "Отпремање датотеке није успело",
+ "translate-import-err-invalid-title": "Пружено име датотеке <nowiki>$1</nowiki> није важеће.",
+ "translate-import-err-no-such-file": "Датотека <nowiki>$1</nowiki> не постоји или није локално отпремљена.",
+ "translate-import-err-stale-group": "Група порука којој ова датотека припада не постоји.",
+ "translate-import-err-no-headers": "Датотека није исправно обликована Gettext датотека у формату додатка „Превођење”:\nНије могуће одредити групу порука и језик из заглавља датотеке.",
+ "translate-js-support-unsaved-warning": "Имате необјавене преводе.",
+ "translate-gs-pos": "Место",
+ "translate-gs-code": "Кôд",
+ "translate-gs-continent": "Континент",
+ "translate-gs-speakers": "Говорници",
+ "translate-gs-score": "Резултат",
+ "translate-gs-multiple": "Више",
+ "translate-gs-count": "Број",
+ "translate-gs-total": "Укупно",
+ "translate-gs-avgscore": "Прос. резултат",
+ "translate-documentation-language": "Документација поруке",
+ "translate-searchprofile": "Преводи",
+ "translate-searchprofile-tooltip": "Претражите све преводе",
+ "translate-searchprofile-note": "Још опција претраге доступно је на [$1 претрази превода].",
+ "translate-search-languagefilter": "Филтрирање по језику:",
+ "translate-search-nofilter": "Без филтрирања",
+ "log-name-translationreview": "Дневник провере превода",
+ "log-description-translationreview": "Дневник свих провера превода и група порука.",
+ "logentry-translationreview-message": "$1 је {{GENDER:$2|прегледао|прегледала}} превод $3",
+ "logentry-translationreview-group": "$1 је {{GENDER:$2|променио|променила}} стање превода странице $3 на $4 језику са $6 у $7",
+ "group-translate-sandboxed": "Неодобрени преводиоци",
+ "group-translate-sandboxed-member": "{{GENDER:$1|неодобрени преводилац|неодобрена преводитељка}}",
+ "right-translate-sandboxmanage": "управљање корисницима у песку",
+ "action-translate-sandboxmanage": "управљате корисницима у песку",
+ "right-translate-sandboxaction": "извршавање радњи дозвољених за кориснике у песку",
+ "action-translate-sandboxaction": "извршавате радње које су дозвољене за кориснике у песку",
+ "translate-workflow-state-": "(непостављен)",
+ "translate-workflowstatus": "Стање: $1",
+ "translate-workflow-set-doing": "Постављање…",
+ "translate-workflow-autocreated-summary": "Аутоматско прављење странице за радно стање $1",
+ "translate-stats-workflow": "Стање",
+ "translate-workflowgroup-label": "Радна стања",
+ "translate-workflowgroup-desc": "Ова група порука приказује радно стање превода.\nСтања су одређена у поставци променљиве $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Недавни преводи",
+ "translate-dynagroup-recent-desc": "Ова група порука приказује све недавне преводе на овом језику.\nОво је најкорисније за проверу превода.",
+ "translate-dynagroup-additions-label": "Недавна додавања",
+ "translate-dynagroup-additions-desc": "Ова група порука приказује нове и промењене поруке.",
+ "translate-msggroupselector-projects": "Група порука",
+ "translate-msggroupselector-search-placeholder": "Претражите групе",
+ "translate-msggroupselector-search-all": "Све",
+ "translate-msggroupselector-search-recent": "Недавне",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|подгрупа|подгрупе}}",
+ "tux-languageselector": "Превод на",
+ "tux-tab-all": "Све",
+ "tux-tab-untranslated": "Непреведено",
+ "tux-tab-outdated": "Застарело",
+ "tux-tab-translated": "Преведено",
+ "tux-tab-unproofread": "Непроверено",
+ "tux-edit": "Уреди",
+ "tux-status-optional": "Oпционално",
+ "tux-status-fuzzy": "Застарело",
+ "tux-status-proofread": "Проверено",
+ "tux-status-translated": "Преведено",
+ "tux-status-saving": "Објављивање…",
+ "tux-status-unsaved": "Необјављено",
+ "tux-save-unknown-error": "Дошло је до непознате грешке.",
+ "tux-editor-editsummary-placeholder": "Опис (пожељно)",
+ "tux-editor-paste-original-button-label": "Налепи изворни текст",
+ "tux-editor-discard-changes-button-label": "Одбаци измене",
+ "tux-editor-save-button-label": "Објави превод",
+ "tux-editor-skip-button-label": "Пређи на следећу",
+ "tux-editor-cancel-button-label": "Откажи",
+ "tux-editor-confirm-button-label": "Потврди превод",
+ "tux-editor-proofread-button-label": "Означи као проверено",
+ "tux-editor-shortcut-info": "Притисните „$1” да бисте потврдили и прешли на следећу поруку, „$2” да бисте прескочили поруку, „$4” да бисте пружили резиме или задржите „$3” како бисте видели друге пречице.",
+ "tux-editor-edit-desc": "Уреди документацију",
+ "tux-editor-add-desc": "Додај документацију",
+ "tux-editor-suggestions-title": "Предлози",
+ "tux-editor-latest-updates-title": "Последња ажурирања",
+ "tux-editor-all-changes": "Све измене",
+ "tux-editor-in-other-languages": "На другим језицима",
+ "tux-editor-need-more-help": "Потребна вам је додатна помоћ?",
+ "tux-editor-ask-help": "Затражите више информација",
+ "tux-editor-tm-match": "$1% подударања",
+ "tux-notices-more": "{{PLURAL:$1|још $1}}",
+ "tux-notices-hide": "сакриј",
+ "tux-editor-save-failed": "Није могуће објавити превод: $1",
+ "tux-editor-n-uses": "коришћено $1 {{PLURAL:$1|пут|пута}}",
+ "tux-editor-message-desc-more": "Прикажи више",
+ "tux-editor-message-desc-less": "Прикажи мање",
+ "tux-editor-clear-translated": "Сакриј преведено",
+ "tux-editor-proofreading-mode": "Провера",
+ "tux-editor-translate-mode": "Списак",
+ "tux-editor-proofreading-hide-own-translations": "Сакриј моје преводе",
+ "tux-editor-proofreading-show-own-translations": "Прикажи моје преводе",
+ "tux-proofread-action-tooltip": "Означите као проверено",
+ "tux-proofread-edit-label": "Уреди",
+ "tux-editor-page-mode": "Страница",
+ "tux-editor-outdated-notice": "Можда је потребно ажурирати овај превод.",
+ "tux-editor-outdated-notice-diff-link": "Прикажи разлике",
+ "tux-editor-doc-editor-placeholder": "Документација поруке",
+ "tux-editor-doc-editor-save": "Објави документацију",
+ "tux-editor-doc-editor-cancel": "Откажи",
+ "tux-messagetable-more-messages": "још $1 {{PLURAL:$1|порука}}",
+ "tux-messagetable-loading-messages": "Учитавање {{PLURAL:$1|поруке|порука}}…",
+ "tux-message-filter-placeholder": "Филтрирајте списак",
+ "tux-message-filter-result": "{{PLURAL:$1|Пронађен је $1 резултат|Пронађена су $1 резултата|Пронађено је $1 резултата}} за упит „$2”",
+ "tux-message-filter-advanced-button": "Напредна претрага",
+ "tux-message-filter-optional-messages-label": "Необавезне поруке",
+ "tux-proofread-translated-by-self": "Ваш превод",
+ "tux-empty-list-all": "Ова група порука је празна",
+ "tux-empty-list-all-guide": "Изаберите другу групу порука за превод",
+ "tux-translate-page-no-such-group": "<strong>Назначена група порука не постоји.</strong> Изаберите другу.",
+ "tux-empty-list-translated": "Нема преведених порука",
+ "tux-empty-list-translated-guide": "Помозите у превођењу",
+ "tux-empty-list-translated-action": "Преведи",
+ "tux-empty-no-messages-to-display": "Нема порука за приказивање.",
+ "tux-empty-there-are-optional": "Постоје необавезне поруке које нису приказане на списку",
+ "tux-empty-show-optional-messages": "Прикажи необавезне поруке",
+ "tux-empty-no-outdated-messages": "Нема застарелих порука",
+ "tux-empty-nothing-to-proofread": "Нема ничега за проверу",
+ "tux-empty-you-can-help-providing": "Помозите пружањем нових превода",
+ "tux-empty-nothing-new-to-proofread": "Нема ничег новог за проверу",
+ "tux-empty-you-can-review-already-proofread": "Можете да проверавате преводе које су други већ проверили.",
+ "tux-empty-list-other": "Све је преведено",
+ "tux-empty-list-other-guide": "Помозите провером постојећих превода.",
+ "tux-empty-list-other-action": "Провери преводе",
+ "tux-empty-list-other-link": "Прикажи све поруке",
+ "tux-editor-close-tooltip": "Затвори",
+ "tux-editor-expand-tooltip": "Прошири",
+ "tux-editor-collapse-tooltip": "Скупи",
+ "tux-editor-message-tools-show-editor": "Прикажи у вики уређивачу",
+ "tux-editor-message-tools-history": "Историја",
+ "tux-editor-message-tools-delete": "Избриши",
+ "tux-editor-message-tools-translations": "Сви преводи",
+ "tux-editor-message-tools-linktothis": "Линк ка овој поруци",
+ "tux-editor-loading": "Учитавање…",
+ "translate-search-more-languages-info": "још $1 {{PLURAL:$1|језик|језика}}",
+ "translate-statsbar-tooltip": "$1% преведено, $2% проверено",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% преведено, $2% проверено, $3% застарело",
+ "translate-search-more-groups-info": "још $1 {{PLURAL:$1|група|групе|група}}",
+ "translate-syntax-error": "Превод садржи синтаксне грешке",
+ "tux-session-expired": "Више нисте пријављени. Пријавите се у засебној картици. Друга могућност је да прекопирате несачуване преводе, пријавите се, вратите се на ову страницу и поново унесете своје преводе.",
+ "tux-nojs": "Ова алатка не ради без јаваскрипта. Јаваскрипт је искључен, не ради или је овај прегледач неподржан.",
+ "specialpages-group-translation": "Превођење",
+ "log-action-filter-translationreview": "Врста радње:"
+}
diff --git a/Translate/i18n/core/sr-el.json b/Translate/i18n/core/sr-el.json
new file mode 100644
index 00000000..4e1f12cf
--- /dev/null
+++ b/Translate/i18n/core/sr-el.json
@@ -0,0 +1,355 @@
+{
+ "@metadata": {
+ "authors": [
+ "Edinwiki",
+ "Kizule",
+ "Michaello",
+ "Milicevic01",
+ "Obsuser",
+ "Prevodim",
+ "Rancher",
+ "Sociologist",
+ "Srdjan m",
+ "Zoranzoki21",
+ "Жељко Тодоровић",
+ "Сербијана"
+ ]
+ },
+ "translate": "Prevođenje",
+ "translate-extensionname": "Prevođenje",
+ "translate-desc": "[[Special:Translate|Posebna stranica]] za prevod Medijavikija i više od toga",
+ "translate-fuzzybot-desc": "Ovo je poseban sistemski nalog koji koristi [https://www.mediawiki.org/wiki/Extension:Translate dodatak „Prevođenje”] Medijavikija, koji se korsti za održavanje prevoda.\nOvaj nalog je deo softvera Medijaviki i nije u vlasništvu nijednog korisnika.",
+ "translate-taskui-export-to-file": "Izvezi u matičnom formatu",
+ "translate-taskui-export-as-po": "Izvezi za oflajn-prevođenje",
+ "translate-taction-translate": "Prevođenje",
+ "translate-taction-proofread": "Pregled",
+ "translate-taction-lstats": "Statistika jezika",
+ "translate-taction-mstats": "Statistika grupe poruka",
+ "translate-taction-export": "Izvoz",
+ "translate-taction-disabled": "Ova radnja je onemogućena na ovom vikiju.",
+ "translate-page-no-such-language": "Navedeni jezik nije važeći.",
+ "translate-page-no-such-group": "Navedena grupa nije važeća.",
+ "translate-page-disabled": "Prevođenje na ovom jeziku u ovoj grupi je onemogućeno.\nRazlog:\n\n<em>$1</em>",
+ "translate-language-disabled": "Prevođenje na ovaj jezik je onemogućeno.",
+ "translate-page-settings-legend": "Podešavanja",
+ "translate-page-group": "Grupa",
+ "translate-page-language": "Jezik",
+ "translate-page-limit": "Ograničenje",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|poruka|poruke|poruka}} po stranici",
+ "translate-submit": "Dobavi",
+ "translate-page-navigation-legend": "Navigacija",
+ "translate-page-showing": "Prikaz poruka od $1 do $2, od $3.",
+ "translate-page-showing-all": "Prikaz $1 {{PLURAL:$1|poruke|poruke|poruka}}.",
+ "translate-page-showing-none": "Nema poruka za prikaz.",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "Sledeća stranica",
+ "translate-prev": "Prethodna stranica",
+ "translate-page-description-legend": "Informacije o ovoj grupi",
+ "translate-page-description-hasoptional": "Ova grupa poruka sadrži opcionalne poruke.\nNjih treba prevoditi samo kada vaš jezik ima posebne potrebe,\nkao što su neupotreba razmaka ili preslovljavanje imena. $1",
+ "translate-page-description-hasoptional-open": "Prikaži opcionalne poruke.",
+ "translate-page-edit": "uredi",
+ "translate-optional": "(opcionalno)",
+ "translate-ignored": "(zanemareno)",
+ "translate-edit-title": "Uredite stranicu „$1”",
+ "translate-edit-definition": "Definicija poruke",
+ "translate-edit-contribute": "doprinesite",
+ "translate-edit-no-information": "<em>Ova poruka nema dokumentaciju.\nAko znate gde ili kako se koristi, pomozite drugim prevodiocima tako što ćete je napisati.</em>",
+ "translate-edit-information": "Informacije o poruci ($1)",
+ "translate-edit-warnings": "Upozorenja o nepotpunim prevodima",
+ "translate-edit-tmmatch-source": "Tekst izvornog prevoda: $1",
+ "translate-edit-tmmatch": "$1% poklapanja",
+ "translate-edit-nopermission": "Trebaju vam prava prevodioca da biste prevodili poruke.",
+ "translate-edit-askpermission": "Nabavi dozvolu",
+ "exporttranslations": "Izvoz prevoda",
+ "translate-export-form-format": "Format",
+ "translate-export-invalid-format": "Navedite važeći format.",
+ "translate-export-not-supported": "Izvoz prevoda nije podržan.",
+ "translate-export-format-notsupported": "Grupa poruka ne podržava navedeni format izvoza.",
+ "translate-checks-parameters": "Sledeći {{PLURAL:$2|parametar se ne koristi|parametri se ne koriste}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "Sledeći {{PLURAL:$2|parametar je nepoznat|parametri su nepoznati}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "Prisutan je neparan broj {{PLURAL:$2|zagrada}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Sledeća veza je problematična|Sledeće $2 veze su problematične|Sledećih $2 veza je problematično}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Sledeća veza nedostaje|Sledeće $2 veze nedostaju|Sledećih $2 veza nedostaju}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Definicija koristi <nowiki>{{PLURAL:}}</nowiki>, a prevod ne.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> je data {{PLURAL:$1|jedan oblik|$1 oblika}} ali {{PLURAL:$2|samo jedan oblik je|$2 oblika je}} podržano (izuzimajući oblike 0= i 1=).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> sadrži dupliranu formu. Formu <nowiki>{{PLURAL:$1|vrata|vrata}}</nowiki> bi trebalo pisati kao <nowiki>{{PLURAL:$1|vrata}}</nowiki>.",
+ "translate-checks-pagename": "Imenski prostor je promenjen u odnosu na definiciju",
+ "translate-checks-format": "Ovaj prevod ne prati definiciju ili nema važeću sintaksu: $1",
+ "translate-checks-escape": "Sledeći izlazi mogu biti slučajni: <strong>$1</strong>",
+ "translate-checks-parametersnotequal": "Broj korišćenih parametara je {{PLURAL:$1|$1}}; trebalo bi da je {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> ima pogrešan format.",
+ "translate-checks-fudforum-syntax": "Koristi <nowiki>$1</nowiki> umesto <nowiki>$2</nowiki> u ovom projektu.",
+ "translate-pref-editassistlang": "Pomoćni jezici:",
+ "prefs-translate": "Opcije prevođenja",
+ "translate-pref-editassistlang-help": "Spisak kodova jezika razdvojenih zarezom.\nPrevod poruke na ovim jezicima prikazuje se dok prevodite.\nPodrazumevai spisak jezika zavisi od vašeg jezika.",
+ "translate-pref-editassistlang-bad": "Nevažeći kôd jezika na spisku:\n<nowiki>$1</nowiki>.",
+ "right-translate": "uređivanje korišćenjem interfejsa za prevođenje",
+ "right-translate-manage": "upravljanje grupama poruka",
+ "action-translate-manage": "upravljate grupama poruka",
+ "right-translate-import": "uvoženje oflajn-prevoda",
+ "action-translate-import": "uvozite oflajn-prevode",
+ "right-translate-messagereview": "pregledanje prevoda",
+ "action-translate-messagereview": "pregledavate prevode",
+ "right-translate-groupreview": "menjanje stanja radnog toka za grupe poruka",
+ "action-translate-groupreview": "promenite stanje toka rada za grupe poruka",
+ "translate-rcfilters-translations": "Prevodi",
+ "translate-rcfilters-translations-only-label": "Prevodi",
+ "translate-rcfilters-translations-only-desc": "Promene prevedenih stranica",
+ "translate-rcfilters-translations-filter-label": "Nisu prevodi",
+ "translate-rcfilters-translations-filter-desc": "Sve promene koje nisu prevodi.",
+ "translate-rcfilters-translations-site-label": "Poruke sajta",
+ "translate-rcfilters-translations-site-desc": "Prilagođavanje poruka sajta u imenskom prostoru Medijaviki.",
+ "translate-rc-translation-filter": "Filtriraj prevode:",
+ "translate-rc-translation-filter-no": "ne radi ništa",
+ "translate-rc-translation-filter-only": "prikaži samo prevode",
+ "translate-rc-translation-filter-filter": "izbaci prevode",
+ "translate-rc-translation-filter-site": "samo promene poruka sajta",
+ "translationstats": "Statistika prevoda",
+ "translate-stats-edits": "Izmene",
+ "translate-stats-users": "Prevodioci",
+ "translate-stats-registrations": "Registracije",
+ "translate-stats-reviews": "Redigovanja",
+ "translate-stats-reviewers": "Pregledavači",
+ "translate-statsf-intro": "Generišete jednostavnu statistiku uz pomoć ovog obrasca.\nSve vrednosti imaju donja i gornja ograničenja.",
+ "translate-statsf-options": "Opcije grafikona",
+ "translate-statsf-width": "Širina u pikselima:",
+ "translate-statsf-height": "Visina u pikselima:",
+ "translate-statsf-days": "Vremenski period u danima:",
+ "translate-statsf-start": "Datum početka:",
+ "translate-statsf-scale": "Granularnost:",
+ "translate-statsf-scale-months": "meseci",
+ "translate-statsf-scale-weeks": "nedelje",
+ "translate-statsf-scale-days": "dani",
+ "translate-statsf-scale-hours": "sati",
+ "translate-statsf-count": "Merenje:",
+ "translate-statsf-count-edits": "Broj izmena",
+ "translate-statsf-count-users": "Aktivni prevodioci",
+ "translate-statsf-count-registrations": "Novi korisnici",
+ "translate-statsf-count-reviews": "Pregledi prevoda",
+ "translate-statsf-count-reviewers": "Pregledavači",
+ "translate-statsf-language": "Spisak kodova jezika razdvojenih zarezom:",
+ "translate-statsf-group": "Spisak kodova grupa razdvojenih zarezom:",
+ "translate-statsf-submit": "Pregledaj",
+ "translate-tag-page-desc": "Prevod viki stranice [[$2|$1]] sa $3 ($4).",
+ "translate-sidebar-alltrans": "Na drugim jezicima",
+ "translations": "Svi prevodi",
+ "translations-summary": "Unesite ime poruke ispod da biste prikazali sve dostupne prevode.",
+ "translate-translations-no-message": "Poruka „$1” nije prevodiva.",
+ "translate-translations-none": "Ne postoje prevodi za „$1”.",
+ "translate-translations-count": "{{PLURAL:$1|Pronađen je jedan prevod|Pronađena su $1 prevoda|Pronađeno je $1 prevoda}}.",
+ "translate-translations-fieldset-title": "Poruka",
+ "translate-translations-messagename": "Ime:",
+ "translate-translations-project": "Projekat:",
+ "translate-translations-including-no-param": "Navedite važeći ključ poruke u parametru podstranice",
+ "translate-translations-history-short": "i",
+ "languagestats": "Statistika jezika",
+ "languagestats-summary": "Ova stranica prikazuje statistiku prevoda za sve grupe poruka na nekom jeziku.",
+ "messagegroupstats-summary": "Ova stranica prikazuje statistiku grupa poruka.",
+ "languagestats-stats-for": "Statistika prevođenja za {{LCFIRST:$1}} ($2).",
+ "languagestats-recenttranslations": "nedavni prevodi",
+ "translate-langstats-incomplete": "Neke statistike navedene na stranici su nepotpune. Ponovo učitajte stranicu da bite dobili još statistika.",
+ "translate-langstats-expand": "proširi",
+ "translate-langstats-collapse": "skupi",
+ "translate-langstats-expandall": "proširi sve",
+ "translate-langstats-collapseall": "skupi sve",
+ "translate-language-code": "Kôd jezika",
+ "translate-language-code-field-name": "Kôd jezika",
+ "translate-suppress-complete": "Sakrij potpuno prevedene grupe poruka",
+ "translate-ls-noempty": "Sakrij potpuno neprevedene grupe poruka",
+ "translate-language": "Jezik",
+ "translate-total": "Poruke",
+ "translate-untranslated": "Neprevedeno",
+ "translate-percentage-complete": "Završeno",
+ "translate-percentage-fuzzy": "Zastarelo",
+ "translate-languagestats-overall": "Sve grupe poruka zajedno",
+ "translate-ls-submit": "Prikaži statistiku",
+ "translate-ls-column-group": "Grupa poruka",
+ "translate-mgs-pagename": "Statistika grupa poruka",
+ "translate-mgs-fieldset": "Podešavanje prikaza",
+ "translate-mgs-group": "Grupa poruka:",
+ "translate-mgs-nocomplete": "Ne prikazuj jezike sa potpunim prevodom",
+ "translate-mgs-noempty": "Ne prikazuj jezike koji nemaju nikakve prevode",
+ "translate-mgs-submit": "Prikaži statistiku",
+ "translate-mgs-column-language": "Jezik",
+ "translate-mgs-totals": "Svih $1 {{PLURAL:$1|jezik|jezika}} zajedno",
+ "translate-mgs-invalid-group": "Navedena grupa „$1” ne postoji.",
+ "translate-mgs-nothing": "Nema ničega da se prikaže za zahtevane statistike.",
+ "supportedlanguages": "Podržani jezici",
+ "supportedlanguages-summary": "Ova stranica prikazuje spisak svih jezika koje podržava {{SITENAME}},\nzajedno sa imenima prevodilaca koji rade na odabranom jeziku.\nIme prevodioca je veće što je sa više prevoda doprineo.\nBoja linije podvlačenja indicira koliko skoro je prevodilac ovde bio aktivan.",
+ "supportedlanguages-colorlegend": "Legenda za boju: poslednji prevod izvršen pre $1 dana.",
+ "supportedlanguages-portallink": "[$1] $2 – $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-sqlite-error": "SQLite nije podržan",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Prevodilac|Prevoditeljka}}|Prevodioci}}: $1",
+ "supportedlanguages-recenttranslations": "nedavni prevodi",
+ "supportedlanguages-count": "Ukupno $1 {{PLURAL:$1|jezik|jezika}}.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|izmena|izmene|izmena}} – poslednja izmena pre $3 {{PLURAL:$3|dan|dana|dana}}",
+ "abusefilter-edit-builder-vars-translate-source-text": "Izvorni tekst prevodilačke jedinice",
+ "translate-jssti-add": "Dodaj na spisak",
+ "managemessagegroups": "Upravljanje grupama poruka",
+ "translate-smg-notallowed": "Nije vam dozvoljeno da izvršite ovu radnju.",
+ "translate-smg-nochanges": "Nema promena koje treba obraditi.",
+ "translate-smg-submit": "Pošalji promene na obradu",
+ "translate-smg-submitted": "Definicije poruka su ažurirane. Promene se obrađuju u pozadini.",
+ "translate-smg-more": "Biće još promena za obradu nakon što pošaljete ove.",
+ "translate-smg-left": "Sadržaj poruke na vikiju",
+ "translate-smg-right": "Predstojeće promene",
+ "translate-manage-import-diff": "Poruka $1 | Radnje: $2",
+ "translate-manage-import-new": "Nova poruka $1",
+ "translate-manage-import-deleted": "Izbrisana poruka $1",
+ "translate-manage-action-import": "uvezi",
+ "translate-manage-action-conflict": "uvezi i označi kao zastarelo",
+ "translate-manage-action-ignore": "zanemari",
+ "translate-manage-action-fuzzy": "uvezi prevode i označi ih kao zastarele",
+ "translate-manage-nochanges": "Nema promena u definicijama poruka u ovoj grupi.",
+ "translate-manage-nochanges-other": "Nema promena za ovaj jezik.\nKoristite dolenavedenu vezu da biste se vratili na prikaz detalja grupe.",
+ "translate-manage-inconsistent": "Otkrivena je nedoslednost u zahtevu.\nProverite promene i pokušajte ponovo.\nDetalji: $1.",
+ "translate-manage-toolong": "Najveće vreme izvršavanja od $1 {{PLURAL:$1|sekunde|sekunde|sekundi}} je prekoračeno.\nPonovo pošaljite obrazac za nastavak.",
+ "translate-manage-import-summary": "Uvozim novu verziju iz spoljašnjeg izvora",
+ "translate-manage-import-ignore": "Preskakanje poruke $1.",
+ "translate-manage-conflict-summary": "Uvozim novu verziju iz spoljašnjeg izvora.\nProverite.",
+ "translate-manage-submit": "Izvrši",
+ "translate-manage-intro-other": "Ispod je spisak promena prevoda za $1 jezik.\nPregledajte promene i odaberite radnju koju želite da preduzmete za svako ažuriranje.\nAko odaberete da zanemarite promene, ova radnja će biti privremena.",
+ "translate-manage-import-ok": "Uvezeno: $1.",
+ "translate-manage-import-done": "Uvoz je završen.",
+ "importtranslations": "Uvoz prevoda",
+ "translate-import-from-local": "Otpremanje lokalne datoteke:",
+ "translate-import-load": "Učitaj datoteku",
+ "translate-import-err-dl-failed": "Nije moguće dobaviti datoteku:\n$1",
+ "translate-import-err-ul-failed": "Otpremanje datoteke nije uspelo",
+ "translate-import-err-invalid-title": "Pruženo ime datoteke <nowiki>$1</nowiki> nije važeće.",
+ "translate-import-err-no-such-file": "Datoteka <nowiki>$1</nowiki> ne postoji ili nije otpremljena lokalno.",
+ "translate-import-err-stale-group": "Grupa poruka kojoj ova datoteka pripada ne postoji.",
+ "translate-import-err-no-headers": "Datoteka nije dobro formirana Gettext datoteka u formatu dodatka „Prevođenje”:\nNe mogu da odredim grupu poruka i jezik iz zaglavlja datoteke.",
+ "translate-js-support-unsaved-warning": "Imate nesačuvanih izmena.",
+ "translate-gs-pos": "Položaj",
+ "translate-gs-code": "Kôd",
+ "translate-gs-continent": "Kontinent",
+ "translate-gs-speakers": "Govornici",
+ "translate-gs-score": "Rezultat",
+ "translate-gs-multiple": "Više",
+ "translate-gs-count": "Broj",
+ "translate-gs-total": "Ukupno",
+ "translate-gs-avgscore": "Pros. rezultat",
+ "translate-documentation-language": "Dokumentacija poruke",
+ "translate-searchprofile": "Prevodi",
+ "translate-searchprofile-tooltip": "Pretražite sve prevode",
+ "translate-searchprofile-note": "Još opcija pretrage dostupno je na [$1 pretrazi prevoda].",
+ "translate-search-languagefilter": "Filtriranje po jeziku:",
+ "translate-search-nofilter": "Bez filtriranja",
+ "log-name-translationreview": "Dnevnik pregleda prevoda",
+ "log-description-translationreview": "Dnevnik svih pregleda prevoda i grupa poruka.",
+ "logentry-translationreview-message": "$1 je {{GENDER:$2|pregledao|pregledala}} prevod $3",
+ "logentry-translationreview-group": "$1 je {{GENDER:$2|promenio|promenila}} stanje $4 prevoda $3 sa $6 na $7",
+ "group-translate-sandboxed": "Neodobreni prevodioci",
+ "group-translate-sandboxed-member": "{{GENDER:$1|neodobreni prevodilac|neodobrena prevoditeljka}}",
+ "right-translate-sandboxmanage": "upravljanje korisnicima u pesku",
+ "action-translate-sandboxmanage": "upravljate korisnicima u pesku",
+ "right-translate-sandboxaction": "izvršavanje radnji na beloj listi za korisnike u pesku",
+ "action-translate-sandboxaction": "izvršavate radnje na beloj listi za korisnike u pesku",
+ "translate-workflow-state-": "(nepostavljen)",
+ "translate-workflowstatus": "Stanje: $1",
+ "translate-workflow-set-doing": "Postavljanje…",
+ "translate-workflow-autocreated-summary": "Automatsko pravljenje stranice za radno stanje $1",
+ "translate-stats-workflow": "Stanje",
+ "translate-workflowgroup-label": "Radna stanja",
+ "translate-workflowgroup-desc": "Ova grupa poruka prikazuje radno stanje prevoda.\nStanja su definisana u konfiguraciji promenljive $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Nedavni prevodi",
+ "translate-dynagroup-recent-desc": "Ova grupa poruka prikazuje sve nedavne prevode na ovom jeziku.\nOvo je najkorisnije za pregled prevoda.",
+ "translate-dynagroup-additions-label": "Nedavna dodavanja",
+ "translate-dynagroup-additions-desc": "Ova grupa poruka prikazuje nove i promenjene poruke.",
+ "translate-msggroupselector-projects": "Grupa poruka",
+ "translate-msggroupselector-search-placeholder": "Pretražite grupe",
+ "translate-msggroupselector-search-all": "Sve",
+ "translate-msggroupselector-search-recent": "Nedavne",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|podgrupa|podgrupe}}",
+ "tux-languageselector": "Prevod na",
+ "tux-tab-all": "Sve",
+ "tux-tab-untranslated": "Neprevedeno",
+ "tux-tab-outdated": "Zastarelo",
+ "tux-tab-translated": "Prevedeno",
+ "tux-tab-unproofread": "Nepregledano",
+ "tux-edit": "Uredi",
+ "tux-status-optional": "Opcionalno",
+ "tux-status-fuzzy": "Zastarelo",
+ "tux-status-proofread": "Pregledano",
+ "tux-status-translated": "Prevedeno",
+ "tux-status-saving": "Čuvanje…",
+ "tux-status-unsaved": "Nesačuvano",
+ "tux-save-unknown-error": "Došlo je do nepoznate greške.",
+ "tux-editor-editsummary-placeholder": "Opcionalan rezime",
+ "tux-editor-paste-original-button-label": "Nalepi izvorni tekst",
+ "tux-editor-discard-changes-button-label": "Odbaci promene",
+ "tux-editor-save-button-label": "Sačuvaj prevod",
+ "tux-editor-skip-button-label": "Pređi na sledeću",
+ "tux-editor-cancel-button-label": "Otkaži",
+ "tux-editor-confirm-button-label": "Potvrdi prevod",
+ "tux-editor-proofread-button-label": "Označi kao pregledano",
+ "tux-editor-shortcut-info": "Pritisnite „$1” da biste sačuvali ili „$2” da biste preskočili na sledeću poruku, ili „$4” da biste naveli rezime ili „$3” za druge prečice.",
+ "tux-editor-edit-desc": "Uredi dokumentaciju",
+ "tux-editor-add-desc": "Dodaj dokumentaciju",
+ "tux-editor-suggestions-title": "Predlozi",
+ "tux-editor-in-other-languages": "Na drugim jezicima",
+ "tux-editor-need-more-help": "Treba vam pomoć?",
+ "tux-editor-ask-help": "Zatražite više informacija",
+ "tux-editor-tm-match": "$1% poklapanja",
+ "tux-notices-more": "{{PLURAL:$1|još $1}}",
+ "tux-notices-hide": "sakrij",
+ "tux-editor-save-failed": "Čuvanje prevoda nije uspelo: $1",
+ "tux-editor-n-uses": "korišćeno $1 {{PLURAL:$1|put|puta}}",
+ "tux-editor-message-desc-more": "Prikaži još",
+ "tux-editor-message-desc-less": "Prikaži manje",
+ "tux-editor-clear-translated": "Sakrij prevedeno",
+ "tux-editor-proofreading-mode": "Pregled",
+ "tux-editor-translate-mode": "Spisak",
+ "tux-editor-proofreading-hide-own-translations": "Sakrij moje prevode",
+ "tux-editor-proofreading-show-own-translations": "Prikaži moje prevode",
+ "tux-proofread-action-tooltip": "Označite kao pregledano",
+ "tux-proofread-edit-label": "Uredi",
+ "tux-editor-page-mode": "Stranica",
+ "tux-editor-outdated-notice": "Ovaj prevod možda treba da se ažurira.",
+ "tux-editor-outdated-notice-diff-link": "Prikaži razlike",
+ "tux-editor-doc-editor-placeholder": "Dokumentacija poruke",
+ "tux-editor-doc-editor-save": "Sačuvaj dokumentaciju",
+ "tux-editor-doc-editor-cancel": "Otkaži",
+ "tux-messagetable-more-messages": "još $1 {{PLURAL:$1|poruka}}",
+ "tux-messagetable-loading-messages": "Učitavanje {{PLURAL:$1|poruke|poruka}}…",
+ "tux-message-filter-placeholder": "Filtrirajte spisak",
+ "tux-message-filter-result": "{{PLURAL:$1|Pronađen $1 rezultat|Pronađena $1 rezultata|Pronađeno $1 rezultata}} za „$2”",
+ "tux-message-filter-advanced-button": "Napredna pretraga",
+ "tux-message-filter-optional-messages-label": "Opcionalne poruke",
+ "tux-proofread-translated-by-self": "Vaš prevod",
+ "tux-empty-list-all": "Ova grupa poruka je prazna",
+ "tux-empty-list-all-guide": "Izaberite drugu grupu poruka za prevod",
+ "tux-translate-page-no-such-group": "<strong>Naznačena grupa ne postoji.</strong> Izaberite drugu grupu poruka.",
+ "tux-empty-list-translated": "Nema prevedenih poruka",
+ "tux-empty-list-translated-guide": "Pomozite u prevođenju",
+ "tux-empty-list-translated-action": "Prevedite",
+ "tux-empty-no-messages-to-display": "Nema poruka za prikaz.",
+ "tux-empty-there-are-optional": "Postoje opcionalne poruke koje nisu prikazane na spisku",
+ "tux-empty-show-optional-messages": "Prikaži opcionalne poruke",
+ "tux-empty-no-outdated-messages": "Nema zastarelih poruka",
+ "tux-empty-nothing-to-proofread": "Ništa za pregled",
+ "tux-empty-you-can-help-providing": "Pomozite pružanjem novih prevoda",
+ "tux-empty-nothing-new-to-proofread": "Ništa novo za pregled",
+ "tux-empty-you-can-review-already-proofread": "Možete da pregledate prevode koje su drugi već pregledali.",
+ "tux-empty-list-other": "Ništa za prevođenje",
+ "tux-empty-list-other-guide": "Pomozite pregledom postojećih prevoda",
+ "tux-empty-list-other-action": "Pregledajte prevode",
+ "tux-empty-list-other-link": "Prikaži sve poruke",
+ "tux-editor-close-tooltip": "Zatvorite",
+ "tux-editor-expand-tooltip": "Proširite",
+ "tux-editor-collapse-tooltip": "Skupite",
+ "tux-editor-message-tools-show-editor": "Prikaži u viki uređivaču",
+ "tux-editor-message-tools-history": "Istorija",
+ "tux-editor-message-tools-delete": "Izbriši",
+ "tux-editor-message-tools-translations": "Svi prevodi",
+ "tux-editor-message-tools-linktothis": "Veza ka ovoj poruci",
+ "tux-editor-loading": "Učitavanje…",
+ "translate-search-more-languages-info": "još $1 {{PLURAL:$1|jezik|jezika}}",
+ "translate-statsbar-tooltip": "$1% prevedeno, $2% pregledano",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% prevedeno, $2% pregledano, $3% zastarelo",
+ "translate-search-more-groups-info": "još $1 {{PLURAL:$1|grupa|grupe|grupa}}",
+ "tux-session-expired": "Više niste prijavljeni. Prijavite se u zasebnoj kartici. Druga mogućnost je da prekopirate nesačuvane prevode, prijavite se, vratite se na ovu stranicu i ponovo unesete svoje prevode.",
+ "tux-nojs": "Ova alatka ne radi bez JavaScript-a. JavaScript je onemogućen, ne radi ili je ovaj pregledač nepodržan."
+}
diff --git a/Translate/i18n/core/sro.json b/Translate/i18n/core/sro.json
new file mode 100644
index 00000000..fbbd917f
--- /dev/null
+++ b/Translate/i18n/core/sro.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jaime Sulas"
+ ]
+ },
+ "translate-documentation-language": "Documentatzioni de su messàgiu"
+}
diff --git a/Translate/i18n/core/ss.json b/Translate/i18n/core/ss.json
new file mode 100644
index 00000000..95e25f6d
--- /dev/null
+++ b/Translate/i18n/core/ss.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jatrobat",
+ "MF-Warburg",
+ "Sibande"
+ ]
+ },
+ "translate": "Humusha"
+}
diff --git a/Translate/i18n/core/stq.json b/Translate/i18n/core/stq.json
new file mode 100644
index 00000000..71d31495
--- /dev/null
+++ b/Translate/i18n/core/stq.json
@@ -0,0 +1,85 @@
+{
+ "@metadata": {
+ "authors": [
+ "Maartenvdbent",
+ "Pyt"
+ ]
+ },
+ "translate": "Uursät",
+ "translate-desc": "[[Special:Translate|Spezioalsiede]] foar ju Uursättenge fon MediaWiki-Systemättergjuchte",
+ "translate-page-no-such-language": "Ju anroate Sproake is uungultich.",
+ "translate-page-no-such-group": "Ju anroate Gruppe is uungultich.",
+ "translate-page-disabled": "Uursättengen in disse Sproake in disse Gruppe wuuden deaktivierd. Gruund:\n\n<em>$1</em>",
+ "translate-page-settings-legend": "Ienstaalengen",
+ "translate-page-group": "Gruppe",
+ "translate-page-language": "Sproake",
+ "translate-page-limit": "Limit",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|Systemättergjucht|Systemättergjuchte}} pro Siede",
+ "translate-submit": "Hoal",
+ "translate-page-navigation-legend": "Navigation",
+ "translate-page-showing": "Systemättergjuchte $1 bit $2 fon mädnunner $3",
+ "translate-page-showing-all": "$1 {{PLURAL:$1|Systemättergjucht|Systemättergjuchte}}",
+ "translate-page-showing-none": "Neen Systemättergjuchte toun Anwiesen deer.",
+ "translate-next": "Naiste Siede",
+ "translate-prev": "Foarige Siede",
+ "translate-page-description-legend": "Informatione uur disse Gruppe",
+ "translate-page-edit": "beoarbaidje",
+ "translate-optional": "(optionoal)",
+ "translate-ignored": "(ignorierd)",
+ "translate-edit-definition": "Systemättergjucht in dät Originoal",
+ "translate-edit-contribute": "beoarbaidje",
+ "translate-edit-no-information": "''Disse Systemättergjucht häd noch neen Dokumentation. Wan du waast, wier un in wäkken Touhoopehong ju benutsed wäd, koast du uur Uursättere hälpe, deertruch dät du ne Dokumentation bietouföigest.''",
+ "translate-edit-information": "Information uur Systemättergjucht ($1)",
+ "translate-edit-warnings": "Woarskauenge uur uunfulboodige Uursättengen",
+ "translate-checks-parameters": "{{PLURAL:$2|Die foulgjende Parameter wäd|Do foulgjende Parametere wäide}} nit benutsed: <strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Die foulgjende Parameter is|Do foulgjende Parametere sunt}} uunbekoand: <strong>$1</strong>",
+ "translate-checks-balance": "{{PLURAL:$2|Ju foulgjende Klammersättenge is|Do foulgjende Klammersättengen sunt}} nit uutglieked: <strong>$1</strong>",
+ "translate-checks-links": "{{PLURAL:$2|Die foulgjende Link is|Do foulgjende Linke sunt}} problematisk: <strong>$1</strong>",
+ "translate-checks-plural": "Dät Originoal benutset <nowiki>{{PLURAL:}}</nowiki>, man ju Uursättenge nit.",
+ "translate-checks-pagename": "Noomensruum annerd truch ju Definition",
+ "translate-checks-format": "Disse Uursättenge äntspräkt nit ju Definition of häd ne uungultige Syntax: $1",
+ "translate-checks-escape": "Do foulgjende Escape-Sequenzen konnen bie Fersjoon deer weese: <strong>$1</strong>",
+ "right-translate": "Benutsenge fon dät Uursätte-Interface",
+ "translate-rc-translation-filter": "Uursättengen sieuwje:",
+ "translate-rc-translation-filter-no": "niks",
+ "translate-rc-translation-filter-only": "Wies bloot Uursättengen",
+ "translate-rc-translation-filter-filter": "Uursättengen sieuwje",
+ "translate-rc-translation-filter-site": "Bloot Annerengen an Systemättergjuchte fon ju Site",
+ "translationstats": "Uursättengsstatistike",
+ "translate-stats-edits": "Beoarbaidengen",
+ "translate-stats-users": "Uursättere",
+ "translate-statsf-intro": "Du koast eenfache Statistike mäd dissen Formular moakje. Aal Wäide hääbe unnere un buppere Limits.",
+ "translate-statsf-options": "Teekenge-Optione",
+ "translate-statsf-width": "Bratte in Pixele:",
+ "translate-statsf-height": "Hööchte in Pixele:",
+ "translate-statsf-days": "Tiedruum in Deege:",
+ "translate-statsf-start": "Tiedruum in Deege:",
+ "translate-statsf-scale": "Granularität:",
+ "translate-statsf-scale-days": "Deege",
+ "translate-statsf-scale-hours": "Uuren",
+ "translate-statsf-count": "Mäitestoab:",
+ "translate-statsf-count-edits": "Antaal Beoarbaidengen",
+ "translate-statsf-count-users": "Aktive Uursättere",
+ "translate-statsf-language": "Komma-trände Lieste fon do Sproakkoden:",
+ "translate-statsf-group": "Komma-trände Lieste fon do Gruppenkoden:",
+ "translate-statsf-submit": "Foarbekiek",
+ "translate-tag-page-desc": "Uursättenge fon ju Wikisiede [[$2|$1]].",
+ "translate-sidebar-alltrans": "In uur Sproaken",
+ "translations": "Aal Uursättengen",
+ "translations-summary": "Reek n Ättergjuchtenoome ien, uum aal ferföigboare Uursättengen antouwiesen.",
+ "translate-translations-no-message": "„$1“ is neen uursätboare Ättergjucht",
+ "translate-translations-none": "Neen Uursättengen foar „$1“ ferföichboar",
+ "translate-translations-fieldset-title": "Ättergjucht",
+ "translate-translations-messagename": "Noome:",
+ "translate-translations-including-no-param": "Reek n gultigen Ättergjuchtenoome as Unnersiedeparameter an",
+ "languagestats": "Sproakstatistike",
+ "languagestats-summary": "Disse Siede wiest Uursättengsstatistike foar aal Ättergjuchtegruppen fon ne Sproake.",
+ "translate-language-code": "Sproakkode",
+ "translate-language-code-field-name": "Sproakkode:",
+ "translate-suppress-complete": "Unnerdruk gans uursätte Ättergjuchtegruppen",
+ "translate-language": "Sproake",
+ "translate-total": "Systemättergjuchte",
+ "translate-untranslated": "Nit uursät",
+ "translate-percentage-complete": "Fulboodegaid",
+ "translate-percentage-fuzzy": "Ferallerd"
+}
diff --git a/Translate/i18n/core/sty.json b/Translate/i18n/core/sty.json
new file mode 100644
index 00000000..eb69471a
--- /dev/null
+++ b/Translate/i18n/core/sty.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Khanmarat"
+ ]
+ },
+ "translate-documentation-language": "Ҡәбәрнеңке документациясы"
+}
diff --git a/Translate/i18n/core/su.json b/Translate/i18n/core/su.json
new file mode 100644
index 00000000..01b89b08
--- /dev/null
+++ b/Translate/i18n/core/su.json
@@ -0,0 +1,58 @@
+{
+ "@metadata": {
+ "authors": [
+ "Irwangatot",
+ "Kandar",
+ "Uchup19"
+ ]
+ },
+ "translate": "Alih basakeun",
+ "translate-desc": "[[Special:Translate|Kaca husus]] keur narjamahkeun MediaWiki",
+ "translate-page-no-such-language": "Basa anu dipilih teu kaci.",
+ "translate-page-no-such-group": "Jumplukan nu dipilih teu kaci.",
+ "translate-page-disabled": "Narjamahkeun dina basa ieu geus dinon-aktifkeun. Alesana:\n\n<em>$1</em>",
+ "translate-page-settings-legend": "Pangatur",
+ "translate-page-group": "Jumplukan",
+ "translate-page-language": "Basa",
+ "translate-page-limit": "Batesan",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|talatah|talatah}} per kaca",
+ "translate-submit": "Kintun",
+ "translate-page-navigation-legend": "Pituduh",
+ "translate-page-showing": "Tembongan talatah $1 nepi $2 ti $3.",
+ "translate-page-showing-all": "Tembongan $1 {{PLURAL:$1|talatah|talatah}}.",
+ "translate-page-showing-none": "Teu aya talatah nu tiasa ditembongkeun.",
+ "translate-next": "Kaca salajengna",
+ "translate-prev": "Kaca saméméhna",
+ "translate-page-description-legend": "Informasi ngeunaan grup",
+ "translate-page-edit": "édit",
+ "translate-optional": "(piliheun)",
+ "translate-edit-definition": "Definisi talatah",
+ "translate-edit-contribute": "milu ngédit",
+ "translate-edit-no-information": "''Talatah ieu teu ngabogaan dokuméntasi. Lamun Anjeun nyaho di mana sarta kumaha talatah ieu dipaké, Anjeun bisa nulungan panarjamah séjén kalawan nambahan dokuméntasi pikeun talatah ieu.''",
+ "translate-edit-information": "Informasi ngeunaan talatah ieu \"$2\" ($1)",
+ "translate-edit-warnings": "Panginget ngeunaan tarjamahan anu teu pepek",
+ "translate-edit-tmmatch": "$1% cocog",
+ "right-translate": "Édit migunakeun antarmuka panarjamah",
+ "translationstats": "Statistik alihbasa",
+ "translate-statsf-width": "Lébar dina piksel:",
+ "translate-statsf-height": "Jangkung dina piksel:",
+ "translate-statsf-days": "Lilana dina poé:",
+ "translate-statsf-start": "Lilana dina poé:",
+ "translate-statsf-scale-days": "Poé",
+ "translate-statsf-scale-hours": "Jam",
+ "translate-statsf-count-edits": "Jumlah éditan",
+ "translate-translations-fieldset-title": "Talatah",
+ "translate-translations-messagename": "Ngaran:",
+ "translate-translations-project": "Proyék:",
+ "languagestats": "Statistika basa",
+ "translate-language-code": "Sandi basa",
+ "translate-language-code-field-name": "Sandi basa:",
+ "translate-language": "Basa:",
+ "translate-total": "Talatah",
+ "translate-gs-code": "Sandi",
+ "translate-gs-continent": "Buana",
+ "translate-documentation-language": "Dokuméntasi talatah",
+ "tux-editor-cancel-button-label": "Bolay",
+ "tux-editor-shortcut-info": "Pencét \"$1\" pikeun nyimpen atawa \"$2\" pikeun ngaliwatkeun ka talatah saterusna atawa \"$4\" pikeun nyiapkeun tingkesan atawa \"$3\" pikeun tarabasan lianna.",
+ "tux-editor-doc-editor-cancel": "Bolay"
+}
diff --git a/Translate/i18n/core/sv.json b/Translate/i18n/core/sv.json
new file mode 100644
index 00000000..bd4006c4
--- /dev/null
+++ b/Translate/i18n/core/sv.json
@@ -0,0 +1,469 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ainali",
+ "Bengtsson96",
+ "Boivie",
+ "Byrial",
+ "Cybjit",
+ "Dafer45",
+ "Diupwijk",
+ "Fluff",
+ "Jopparn",
+ "Lejonel",
+ "Lokal Profil",
+ "M.M.S.",
+ "Marfuas",
+ "Najami",
+ "Ozp",
+ "Per",
+ "Pipetricker",
+ "Rotsee",
+ "Sabelöga",
+ "Sannab",
+ "Skalman",
+ "Stryn",
+ "Tobulos1",
+ "WikiPhoenix"
+ ]
+ },
+ "translate": "Översätt",
+ "translate-extensionname": "Översätt",
+ "translate-desc": "[[Special:Translate|Specialsida]] för översättning av MediaWiki och annat",
+ "translate-fuzzybot-desc": "Detta är ett speciellt systemkonto som används av MediaWiki-tillägget [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate Translate] för att underhålla översättningar.\nDetta konto är en del av MediaWiki-programvaran och ägs inte av någon användare.",
+ "translate-taskui-export-to-file": "Exportera i ursprungligt format",
+ "translate-taskui-export-as-po": "Exportera för översättning offline",
+ "translate-taskui-export-as-csv": "Exportera i CSV-format",
+ "translate-export-csv-message-title": "Titel på översättningsmeddelande",
+ "translate-export-csv-definition": "Definition av meddelandet",
+ "translate-taction-translate": "Översätt",
+ "translate-taction-proofread": "Granska",
+ "translate-taction-lstats": "Språkstatistik",
+ "translate-taction-mstats": "Statistik för meddelandegrupp",
+ "translate-taction-export": "Exportera",
+ "translate-taction-disabled": "Denna åtgärd är inaktiverad på denna wiki.",
+ "translate-page-no-such-language": "Det angivna språket är inte giltigt.",
+ "translate-page-no-such-group": "Den angivna gruppen är inte giltig.",
+ "translate-page-disabled": "Översättningar till det här språket i den här gruppen har stängts av.\nAnledning:\n\n<em>$1</em>",
+ "translate-language-disabled": "Översättning till detta språk är inaktiverad.",
+ "translate-page-settings-legend": "Inställningar",
+ "translate-page-group": "Grupp",
+ "translate-page-language": "Språk",
+ "translate-page-limit": "Antal",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|meddelande|meddelanden}} per sida",
+ "translate-submit": "Hämta",
+ "translate-page-navigation-legend": "Navigering",
+ "translate-page-showing": "Visar meddelande $1 till $2 av $3.",
+ "translate-page-showing-all": "Visar $1 {{PLURAL:$1|meddelande|meddelanden}}.",
+ "translate-page-showing-none": "Det finns inga meddelanden att visa.",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "Nästa sida",
+ "translate-prev": "Föregående sida",
+ "translate-page-description-legend": "Information om gruppen",
+ "translate-page-description-hasoptional": "Denna meddelandegrupp innehåller valfria meddelanden.\nValfria meddelanden bör endast översättas när ditt språk har särskilda krav,\nsom att inte använda blanksteg eller transkribera egennamn. $1",
+ "translate-page-description-hasoptional-open": "Visa valfria meddelanden.",
+ "translate-page-edit": "redigera",
+ "translate-optional": "(valfritt)",
+ "translate-ignored": "(ignorerad)",
+ "translate-edit-title": "Redigera \"$1\"",
+ "translate-edit-definition": "Definition av meddelandet",
+ "translate-edit-contribute": "bidra",
+ "translate-edit-no-information": "<em>Det här meddelandet har ingen dokumentation.\nOm du vet var eller hur detta meddelande används, så kan du hjälpa andra översättare genom att skriva dokumentation för meddelandet.</em>",
+ "translate-edit-information": "Information om meddelandet ($1)",
+ "translate-edit-warnings": "Varningar om fel i översättningen",
+ "translate-edit-tmmatch-source": "Källtext för översättning: $1",
+ "translate-edit-tmmatch": "$1&nbsp;% likhet",
+ "translate-edit-nopermission": "Du behöver översättningsbehörighet för att översätta meddelanden.",
+ "translate-edit-askpermission": "Få behörighet",
+ "exporttranslations": "Exportera översättningar",
+ "translate-export-form-format": "Format",
+ "translate-export-invalid-format": "Ange ett giltigt format.",
+ "translate-export-not-supported": "Översättningsexportering stöds inte.",
+ "translate-export-format-notsupported": "Det angivna exportformatet stöds inte av meddelandegruppen.",
+ "translate-export-group-too-large": "Den valda meddelandegruppen är för stor. Välj en meddelandegrupp som har färre än $1 {{PLURAL:$1|meddelande}} eller kontakta en översättningsadministratör för råd.",
+ "translate-checks-parameters": "Följande {{PLURAL:$2|parameter|parametrar}} används inte:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "Följande {{PLURAL:$2|parameter är okänd|parametrar är okända}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "Det är ett ojämnt antal {{PLURAL:$2|parenteser}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "Följande {{PLURAL:$2|länk är problematisk|länkar är problematiska}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "Följande {{PLURAL:$2|länk|$2 länkar}} saknas:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "<nowiki>{{PLURAL:}}</nowiki> används i definitionen, men inte i översättningen.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> fick {{PLURAL:$1|en form|$1 former}} men {{PLURAL:$2|endast en form|$2 former}} stöds (exklusive formerna 0= och 1=).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> har dubbla former i slutet. <nowiki>{{PLURAL:$1|får|får}}</nowiki> bör skrivas som <nowiki>{{PLURAL:$1|får}}</nowiki>.",
+ "translate-checks-gettext-plural-missing": "Denna översättning måste ha <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-unsupported": "Detta meddelande har inte stöd för <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-count": "<nowiki>{{PLURAL:GETTEXT|}}</nowiki> accepterar exakt $1 {{PLURAL:$1|pluralform|pluralformer}}. För tillfället används $2 {{PLURAL:$2|pluralform|pluralformer}}.",
+ "translate-checks-smartformat-plural-missing": "Denna översättning måste ha plural i variabeln $1.",
+ "translate-checks-smartformat-plural-unsupported": "Detta meddelande har inte stöd för plural i variabeln $1.",
+ "translate-checks-smartformat-plural-count": "Felaktigt antal pluralformer i <strong>$3</strong>. Den måste ha $1 {{PLURAL:$1|pluralform|pluralformer}}. För tillfället har $2 {{PLURAL:$2|pluralform|pluralformer}} angivits.",
+ "translate-checks-unicode-plural-missing": "Denna översättning måste ha <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-unsupported": "Meddelandet har inte stöd för <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-invalid": "Pluralformer bör definieras som $1. Denna översättning innehåller $2.",
+ "translate-checks-pagename": "Namnrymden ändrad från definitionen",
+ "translate-checks-format": "Den här översättningen följer inte definitionen eller har ogiltig syntax: $1",
+ "translate-checks-escape": "Följande {{PLURAL:$2|avbrotts­tecken}} kan vara tillfälliga: <strong>$1</strong>. {{PLURAL:$4|Ett giltigt avbrotts­tecken är|Giltiga avbrotts­tecken är}} $3.",
+ "translate-checks-parametersnotequal": "Parameterräknaren är {{PLURAL:$1|$1}}; bör vara {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> är felaktig.",
+ "translate-checks-fudforum-syntax": "Använd nowiki>$1</nowiki> istället för <nowiki>$2</nowiki> i detta projektet.",
+ "translate-checks-newline-missing-start": "{{PLURAL:$1|Det saknas}} $1 {{PLURAL:$1|radbrytningstecken}} i början av översättningen.",
+ "translate-checks-newline-missing-end": "{{PLURAL:$1|Det saknas}} $1 {{PLURAL:$1|radbrytningstecken}} i slutet på översättningen.",
+ "translate-checks-newline-extra-start": "{{PLURAL:$1|Det finns}} $1 extra {{PLURAL:$1|radbrytningtecken}} i början på översättningen.",
+ "translate-checks-newline-extra-end": "{{PLURAL:$1|Det finns}} $1 extra {{PLURAL:$1|radbrytningstecken}} på slutet av översättningen.",
+ "translate-checks-value-not-present": "Översättningen måste vara likadant som {{PLURAL:$1|1=|ett av följande värden:}} $1.",
+ "translate-checks-replacement": "Använd $2 istället för $1.",
+ "translate-checks-empty": "Översättningar utan innehåll eller med endast blanksteg tillåts inte.",
+ "translate-pref-editassistlang": "Hjälpspråk:",
+ "prefs-translate": "Översättningsalternativ",
+ "translate-pref-editassistlang-help": "Kommaseparerad lista med språkkoder.\nÖversättningar av ett meddelande på dessa språk visas när du översätter.\nStandardlistan på språk avgörs av ditt språk.",
+ "translate-pref-editassistlang-bad": "Ogiltig språkkod i listan:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Redigera genom översättningsgränssnittet",
+ "action-translate": "redigera med översättningsgränssnittet",
+ "right-translate-manage": "Hantera meddelandegrupper",
+ "action-translate-manage": "hantera meddelandegrupper",
+ "right-translate-import": "Importera översättningar gjorda frånkopplad",
+ "action-translate-import": "importera översättningar offline",
+ "right-translate-messagereview": "Granska översättningar",
+ "action-translate-messagereview": "granska översättningar",
+ "right-translate-groupreview": "Ändra arbetsflödesstatus för meddelandegrupper",
+ "action-translate-groupreview": "ändra arbetsflödestillstånd för meddelandegrupper",
+ "translate-rcfilters-translations": "Översättningar",
+ "translate-rcfilters-translations-only-label": "Översättningar",
+ "translate-rcfilters-translations-only-desc": "Ändringar på översatta sidor.",
+ "translate-rcfilters-translations-filter-label": "Inte översättningar",
+ "translate-rcfilters-translations-filter-desc": "Alla ändringar som inte är översättningar.",
+ "translate-rcfilters-translations-site-label": "Webbplatsmeddelanden",
+ "translate-rcfilters-translations-site-desc": "Anpassningar av webbplatsmeddelanden i namnrymden MediaWiki.",
+ "translate-rc-translation-filter": "Filtrera översättningar:",
+ "translate-rc-translation-filter-no": "Gör ingenting",
+ "translate-rc-translation-filter-only": "Visa endast översättningar",
+ "translate-rc-translation-filter-filter": "Filtrera bort översättningar",
+ "translate-rc-translation-filter-site": "Endast ändringar till {{SITENAME}}-meddelanden",
+ "translationstats": "Översättningsstatistik",
+ "translate-stats-edits": "Redigeringar",
+ "translate-stats-users": "Översättare",
+ "translate-stats-registrations": "Registreringar",
+ "translate-stats-reviews": "Granskningar",
+ "translate-stats-reviewers": "Granskare",
+ "translate-statsf-intro": "Du kan generera enkel statistik genom detta formulär. Alla värden ska ha övre och nedre gränser.",
+ "translate-statsf-options": "Diagramalternativ",
+ "translate-statsf-width": "Bredd i pixlar:",
+ "translate-statsf-height": "Höjd i pixlar:",
+ "translate-statsf-days": "Tidsperiod i dagar:",
+ "translate-statsf-start": "Startdatum:",
+ "translate-statsf-scale": "Tidsupplösning:",
+ "translate-statsf-scale-years": "År",
+ "translate-statsf-scale-months": "Månader",
+ "translate-statsf-scale-weeks": "Veckor",
+ "translate-statsf-scale-days": "Dagar",
+ "translate-statsf-scale-hours": "Timmar",
+ "translate-statsf-count": "Mått:",
+ "translate-statsf-count-edits": "Antal redigeringar",
+ "translate-statsf-count-users": "Aktiva översättare",
+ "translate-statsf-count-registrations": "Nya användare",
+ "translate-statsf-count-reviews": "Översättningsgranskningar",
+ "translate-statsf-count-reviewers": "Granskare",
+ "translate-statsf-language": "Kommaseparerad lista över språkkoder:",
+ "translate-statsf-group": "Kommaseparerad lista över gruppkoder:",
+ "translate-statsf-submit": "Förhandsgranska",
+ "translate-statsf-unknown-error": "Ett okänt fel har uppstått.",
+ "translate-statsf-error-message": "Ett fel uppstod när grafen lästes in: $1",
+ "translate-statsf-graph-alt-text-info": "Textalternativ för översättningsstatistiken finns i datatabellen nedan.",
+ "translate-statsf-alt-text": "Detta är textalternativet för översättningsstatistiken.",
+ "translate-statsf-embed": "Kod för att bädda in grafen för översättningsstatistik på andra sidor.",
+ "translate-tag-page-desc": "Översättning av wikisidan [[$2|$1]] från $3 ($4).",
+ "translate-tag-page-wikipage-desc": "[[$1|Översättning]] av wikisidan [[$2]] från <bdi>$3</bdi> ($4) till <bdi>$5</bdi> ($6)",
+ "translate-sidebar-alltrans": "På andra språk",
+ "translations": "Alla översättningar",
+ "translations-summary": "Ange namnet på ett meddelande nedan för att visa alla tillgängliga översättningar.",
+ "translate-translations-no-message": "\"$1\" är inte ett översättningsbart meddelande",
+ "translate-translations-none": "Det finns inga översättningar för \"$1\"",
+ "translate-translations-count": "Hittade {{PLURAL:$1|en översättning|$1 översättningar}}.",
+ "translate-translations-fieldset-title": "Meddelande",
+ "translate-translations-messagename": "Namn:",
+ "translate-translations-project": "Projekt:",
+ "translate-translations-including-no-param": "Var god specificera en giltig meddelandenyckel i undersidesparametern",
+ "translate-translations-history-short": "h",
+ "languagestats": "Språkstatistik",
+ "languagestats-summary": "Den här sidan visar översättningsstatistik för alla meddelandegrupper för ett språk.",
+ "messagegroupstats-summary": "Denna sida visar statistik för meddelandegrupper.",
+ "languagestats-stats-for": "Översättningsstatistik för $1 ($2).",
+ "languagestats-recenttranslations": "senaste översättningar",
+ "translate-langstats-incomplete": "En del av statistiken på denna sida är ofullständig. Ladda om sidan för att få mer statistik.",
+ "translate-langstats-expand": "visa",
+ "translate-langstats-collapse": "göm",
+ "translate-langstats-expandall": "visa alla",
+ "translate-langstats-collapseall": "göm alla",
+ "translate-language-code": "Språkkod",
+ "translate-language-code-field-name": "Språkkod:",
+ "translate-suppress-complete": "Visa inte meddelandegrupper som är helt översatta",
+ "translate-ls-noempty": "Visa inte meddelandegrupper som är helt oöversatta",
+ "translate-language": "Språk",
+ "translate-total": "Meddelanden",
+ "translate-untranslated": "Oöversatt",
+ "translate-percentage-complete": "Avklarat",
+ "translate-percentage-fuzzy": "Föråldrat",
+ "translate-percentage-proofread": "Granskat",
+ "translate-languagestats-overall": "Alla meddelandegrupper tillsammans",
+ "translate-ls-submit": "Visa statistik",
+ "translate-ls-column-group": "Meddelandegrupp",
+ "translate-mgs-pagename": "Statistik för meddelandegrupp",
+ "translate-mgs-fieldset": "Visningsinställningar",
+ "translate-mgs-group": "Meddelandegrupp:",
+ "translate-mgs-nocomplete": "Visa inte språk som har en fullbordad översättning",
+ "translate-mgs-noempty": "Visa inte språk som inte har några översättningar",
+ "translate-mgs-submit": "Visa statistik",
+ "translate-mgs-column-language": "Språk",
+ "translate-mgs-totals": "Alla $1 {{PLURAL:$1|språk}} tillsammans",
+ "translate-mgs-invalid-group": "Den angivna gruppen $1 finns inte.",
+ "translate-mgs-nothing": "Inget att visa för begärd statistik.",
+ "translate-tes-server-error": "Misslyckades att hämta sökförslag",
+ "translate-tes-group-not-found": "Inga matchande resultat",
+ "translate-tes-type-to-search": "Skriv för att börja söka",
+ "supportedlanguages": "Aktiva språk",
+ "supportedlanguages-summary": "Den här sidan visar en lista över aktiva språk på {{SITENAME}},\ntillsammans med namnen på översättarna som arbetar på det språket.\nEn översättares namn visas större ju fler redigeringar översättaren har bidragit med.\nFärgen på en understrykning visar hur nyligen en översättare har varit aktiv här.",
+ "supportedlanguages-colorlegend": "Färgförklaring: Senaste översättningen gjordes $1 dagar sedan.",
+ "supportedlanguages-portallink": "[$1] $2 - $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-sqlite-error": "SQLite stöds inte",
+ "supportedlanguages-postgres-error": "PostgreSQL stöds inte",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Översättare}}}}: $1",
+ "supportedlanguages-recenttranslations": "senaste översättningar",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|språk}} totalt.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|redigering|redigeringar}} - senaste redigering $3 {{PLURAL:$3|dag|dagar}} sedan",
+ "translate-supportedlanguages-cached": "Denna information cachelagrades $1 sedan.",
+ "translate-activelanguages-invalid-code": "Språkkoden \"$1\" är okänd eller inte aktiverad för översättning.",
+ "abusefilter-edit-builder-vars-translate-source-text": "Översättningsenhetens källtext",
+ "abusefilter-edit-builder-vars-translate-target-language": "Målspråk för översättning",
+ "translate-jssti-add": "Lägg till i listan",
+ "managemessagegroups": "Meddelandegruppshantering",
+ "translate-smg-notallowed": "Du har inte tillåtelse att utföra denna åtgärd",
+ "translate-smg-nochanges": "Det finns inga ändringar att bearbeta.",
+ "translate-smg-submit": "Skicka in ändringar för bearbetning",
+ "translate-smg-submitted": "Meddelandedefinitioner har uppdaterats. Ändringarna bearbetas i bakgrunden.",
+ "translate-smg-submitted-with-failure": "Misslyckades att uppdatera {{PLURAL:$1|meddelandedefinitionen|meddelandedefinitionerna}} för följande {{PLURAL:$1|grupp|grupper}} - $2. $3",
+ "translate-smg-submitted-others-processing": "Meddelandedefinitioner för andra grupper bearbetas i bakgrunden.",
+ "translate-smg-more": "Det blir mer förändringar att bearbeta efter dessa ändringar.",
+ "translate-smg-left": "Meddelandeinnehåll i wiki",
+ "translate-smg-right": "Inkommande ändringar",
+ "translate-smg-rename-select": "Välj",
+ "translate-smg-rename-cancel": "Avbryt",
+ "translate-smg-rename-search": "Sök efter matchande meddelande...",
+ "translate-smg-rename-select-err": "Välj ett meddelande att döpa om",
+ "translate-smg-rename-no-msg": "Inga meddelanden hittades.",
+ "translate-smg-rename-new": "Lägg till som ny...",
+ "translate-smg-rename-rename": "Lägg till som namnbyte av...",
+ "translate-smg-rename-dialog-title": "Välj matchande namnbyte för $1",
+ "translate-smg-changeset-modified": "Ändringsuppsättningen har ändrats av en annan användare eller process. Dina ändringar har inte publicerats då de kanske skriver över dessa ändringar. Uppdatera sidan för att se de senaste ändringarna.",
+ "translate-smg-no-groups-in-sync": "Inga grupper synkroniseras för tillfället",
+ "translate-smg-strong-sync-help": "Hjälp",
+ "translate-smg-groups-in-sync": "Grupper som synkroniseras för tillfället",
+ "translate-smg-groups-in-sync-list": "Lista över grupper som bearbetas för tillfället i bakgrunden:",
+ "translate-smg-groups-with-error-title": "Grupper som har stött på fel under synkronisering",
+ "translate-smg-groups-with-error-desc": "Lista över grupper och deras meddelanden som har stött på fel under synkronisering",
+ "translate-smg-group-with-error-summary": "$1 {{PLURAL:$1|meddelande|meddelanden}} med fel:",
+ "translate-smg-group-message-action-history": "Historik",
+ "translate-smg-group-action-resolve": "Markera som löst",
+ "translate-smg-group-sync-error-warn": "Denna grupp stötte på ett fel under synkronisering. Åtgärda felen innan du bearbetar gruppen.",
+ "translate-smg-group-message-tag-outdated": "Föråldrad",
+ "translate-smg-group-message-tag-rename": "Byt namn",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|Märke|Märken}}:",
+ "translate-smg-group-message-message-content": "Innehåll:",
+ "translate-smg-group-message-message-target": "Mål:",
+ "translate-smg-group-message-message-replacement": "Ersättning:",
+ "translate-smg-group-message-message-other-langs": "Andra språk:",
+ "translate-smg-loading": "Laddar...",
+ "translate-smg-unknown-error": "Ett fel uppstod när din begäran bearbetades.",
+ "translate-manage-import-diff": "Meddelande $1 | Åtgärder: $2",
+ "translate-manage-import-new": "Nytt meddelande $1",
+ "translate-manage-import-deleted": "Raderat meddelande $1",
+ "translate-manage-action-import": "Importera",
+ "translate-manage-action-conflict": "Importera och märk för kontroll (\"fuzzy\")",
+ "translate-manage-action-ignore": "Ignorera",
+ "translate-manage-action-fuzzy": "Importera och märk översättningar för kontroll (\"fuzzy\")",
+ "translate-manage-action-rename-fuzzy": "Döp om och märk översättning som föråldrad",
+ "translate-manage-action-rename": "Döp om",
+ "translate-manage-action-ignore-change": "Ignorera översättningsändring",
+ "translate-manage-nochanges": "Det finns inga förändringar i meddelande-definitionerna för den här gruppen.",
+ "translate-manage-nochanges-other": "Inga förändringar för det här språket.\nAnvänd länken nedan för att återgå till gruppdetaljerna.",
+ "translate-manage-inconsistent": "Upptäckte inkonsekvens i begäran.\nLeta efter ändringar och försök igen.\nDetaljer: $1.",
+ "translate-manage-toolong": "Den maximala bearbetningstiden på $1 {{PLURAL:$1|sekund|sekunder}} har överskridits.\nVänligen aktivera formuläret igen för att fortsätta bearbeta det.",
+ "translate-manage-import-summary": "Importerar en ny version från extern källa",
+ "translate-manage-import-ignore": "Hoppar över meddelande $1.",
+ "translate-manage-import-rename-summary": "Döptes om i extern källa",
+ "translate-manage-conflict-summary": "Importerar ny version från extern källa.\nVänligen kontrollera.",
+ "translate-manage-submit": "Genomför",
+ "translate-manage-intro-other": "Nedan följer en lista över översättningsändringar på språket $1.\nVar god granska ändringarna och välj en åtgärd du vill utföra för varje uppdatering.\nOm du väljer att ignorera ändringar är denna handling endast tillfällig.",
+ "translate-manage-import-ok": "Importerad: $1",
+ "translate-manage-import-done": "Import klar!",
+ "translate-manage-empty-content": "Innehållet är tomt",
+ "translate-manage-key-reused": "Detta meddelande finns redan på wikin. Leta efter en oavsiktlig återanvändning av en gammal nyckel.",
+ "translate-manage-source-message-not-found": "Meddelandedefinition hittades inte",
+ "importtranslations": "Importera översättningar",
+ "translate-import-from-local": "Lokal filuppladdning:",
+ "translate-import-load": "Ladda fil",
+ "translate-import-err-dl-failed": "Kan inte hämta filen:\n$1",
+ "translate-import-err-ul-failed": "Filuppladdningen misslyckades",
+ "translate-import-err-invalid-title": "Det angivna filnamnet <nowiki>$1</nowiki> är inte giltigt.",
+ "translate-import-err-no-such-file": "Fil <nowiki>$1</nowiki> finns inte, eller har inte laddats upp lokalt.",
+ "translate-import-err-stale-group": "Meddelandegruppen som den här filen tillhör finns inte.",
+ "translate-import-err-no-headers": "Filen är inte en välformerad Gettext-fil i översättnings-förlängningsformat:\nDet gick inte att bestämma grupp och språk från filhuvuden.",
+ "translate-js-support-unsaved-warning": "Du har opublicerade översättningar.",
+ "translate-gs-pos": "Pos.",
+ "translate-gs-code": "Kod",
+ "translate-gs-continent": "Kontinent",
+ "translate-gs-speakers": "Talare",
+ "translate-gs-score": "Poäng",
+ "translate-gs-multiple": "Flera",
+ "translate-gs-count": "Antal",
+ "translate-gs-total": "Totalt",
+ "translate-gs-avgscore": "Genomsnittlig poäng",
+ "translate-documentation-language": "Meddelandedokumentation",
+ "translate-searchprofile": "Översättningar",
+ "translate-searchprofile-tooltip": "Sök från alla översättningar",
+ "translate-searchprofile-note": "Fler sökalternativ finns i [$1 översättningssökningen].",
+ "translate-search-languagefilter": "Filtrera efter språk:",
+ "translate-search-nofilter": "Ingen filtrering",
+ "log-name-translationreview": "Logg för översättningsgranskningar",
+ "log-description-translationreview": "Logg över alla granskningar till översättningar och meddelandegrupper.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|granskade}} översättningen $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|ändrade}} statusen för översättningar på $4 av $3 från $6 till $7",
+ "group-translate-sandboxed": "Icke-godkända översättare",
+ "group-translate-sandboxed-member": "{{GENDER:$1|icke-godkänd översättare}}",
+ "right-translate-sandboxmanage": "Hantera sandlådeanvändare",
+ "action-translate-sandboxmanage": "hantera sandlådeanvändare",
+ "right-translate-sandboxaction": "Utför tillåtna åtgärder för sandlådeanvändare",
+ "action-translate-sandboxaction": "utför tillåtna åtgärder för sandlådeanvändare",
+ "translate-workflow-state-": "(inte inställd)",
+ "translate-workflowstatus": "Status: $1",
+ "translate-workflow-set-doing": "Ställer in...",
+ "translate-workflow-autocreated-summary": "Automatisk skapande av sida för arbetsflödesstatus $1",
+ "translate-stats-workflow": "Tillstånd",
+ "translate-workflowgroup-label": "Arbetsflödesstatus",
+ "translate-workflowgroup-desc": "Denna meddelandegrupp visar alla arbetsflödesstatusar för översättningar.\nAlla statusar finns definierade i konfigurationsvariabeln $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Senaste översättningar",
+ "translate-dynagroup-recent-desc": "Denna meddelandegrupp visar alla de senaste översättningar på detta språk.\nFrämst användbar för granskningsuppgifter.",
+ "translate-dynagroup-additions-label": "Senaste tillägg",
+ "translate-dynagroup-additions-desc": "Denna meddelandegrupp visar nya och ändrade meddelanden.",
+ "translate-msggroupselector-projects": "Meddelandegrupp",
+ "translate-msggroupselector-search-placeholder": "Sök grupper",
+ "translate-msggroupselector-search-all": "Alla",
+ "translate-msggroupselector-search-recent": "Senaste",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|undergrupp|undergrupper}}",
+ "tux-languageselector": "Översätt till",
+ "tux-select-target-language": "Målspråk för översättning",
+ "tux-tab-all": "Alla",
+ "tux-tab-untranslated": "Oöversatta",
+ "tux-tab-outdated": "Föråldrade",
+ "tux-tab-translated": "Översatta",
+ "tux-tab-unproofread": "Ogranskade",
+ "tux-edit": "Redigera",
+ "tux-status-optional": "Valfri",
+ "tux-status-fuzzy": "Föråldrad",
+ "tux-status-proofread": "Granskad",
+ "tux-status-translated": "Översatt",
+ "tux-status-saving": "Publicerar...",
+ "tux-status-unsaved": "Inte publicerad",
+ "tux-save-unknown-error": "Okänt fel uppstod.",
+ "tux-editor-placeholder-documentation": "Lägg till meddelandedokumentation",
+ "tux-editor-placeholder-language": "Din översättning på $1",
+ "tux-editor-editsummary-placeholder": "Förklara dina ändringar (valfritt)",
+ "tux-editor-paste-original-button-label": "Klistra in källtext",
+ "tux-editor-discard-changes-button-label": "Ta bort ändringar",
+ "tux-editor-save-button-label": "Publicera översättning",
+ "tux-editor-skip-button-label": "Hoppa över till nästa",
+ "tux-editor-cancel-button-label": "Avbryt",
+ "tux-editor-confirm-button-label": "Bekräfta översättning",
+ "tux-editor-proofread-button-label": "Markera som granskad",
+ "tux-editor-shortcut-info": "Tryck \"$1\" för att bekräfta och gå till nästa meddelande, \"$2\" för att hoppa över, \"$4\" för att skriva en sammanfattning eller håll ned \"$3\" för att se andra kortkommandon.",
+ "tux-editor-edit-desc": "Redigera dokumentation",
+ "tux-editor-add-desc": "Lägg till dokumentation",
+ "tux-editor-suggestions-title": "Förslag",
+ "tux-editor-latest-updates-title": "Senaste uppdateringarna",
+ "tux-editor-changes-without-summary": "$1 {{PLURAL:$1|uppdatering|uppdateringar}} utan sammanfattning",
+ "tux-editor-all-changes": "Alla ändringar",
+ "tux-editor-in-other-languages": "På andra språk",
+ "tux-editor-need-more-help": "Behöver du mer hjälp?",
+ "tux-editor-ask-help": "Fråga efter mer information",
+ "tux-editor-tm-match": "$1&nbsp;% likhet",
+ "tux-notices-more": "{{PLURAL:$1|$1 till}}",
+ "tux-notices-hide": "dölj",
+ "tux-editor-save-failed": "Misslyckades att publicera översättningen: $1",
+ "tux-editor-n-uses": "används $1 {{PLURAL:$1|gång|gånger}}",
+ "tux-editor-message-desc-more": "Visa mer",
+ "tux-editor-message-desc-less": "Visa mindre",
+ "tux-editor-clear-translated": "Dölj översatta",
+ "tux-editor-proofreading-mode": "Granska",
+ "tux-editor-translate-mode": "Lista",
+ "tux-editor-proofreading-hide-own-translations": "Dölj dina översättningar",
+ "tux-editor-proofreading-show-own-translations": "Visa dina översättningar",
+ "tux-proofread-action-tooltip": "Markera som granskad",
+ "tux-proofread-edit-label": "Redigera",
+ "tux-editor-page-mode": "Sida",
+ "tux-editor-outdated-notice": "Denna översättning kan behöva uppdateras.",
+ "tux-editor-outdated-notice-diff-link": "Visa skillnader",
+ "tux-editor-doc-editor-placeholder": "Meddelandedokumentation",
+ "tux-editor-doc-editor-save": "Publicera dokumentation",
+ "tux-editor-doc-editor-cancel": "Avbryt",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|till meddelande|meddelanden till}}",
+ "tux-messagetable-loading-messages": "Läser in {{PLURAL:$1|meddelande|meddelanden}}...",
+ "tux-message-filter-placeholder": "Filtrera lista",
+ "tux-message-filter-result": "Hittade $1 {{PLURAL:$1|resultat}} för \"$2\"",
+ "tux-message-filter-advanced-button": "Avancerad sökning",
+ "tux-message-filter-optional-messages-label": "Valfria meddelanden",
+ "tux-proofread-translated-by-self": "Översatt av dig",
+ "tux-empty-list-all": "Denna meddelandegrupp är tom",
+ "tux-empty-list-all-guide": "Välj en annan meddelandegrupp att översätta",
+ "tux-translate-page-no-such-group": "<strong>Den angivna gruppen finns inte.</strong> Välj en annan meddelandegrupp.",
+ "tux-empty-list-translated": "Inga översatta meddelanden",
+ "tux-empty-list-translated-guide": "Du kan hjälpa till att översätta",
+ "tux-empty-list-translated-action": "Översätt",
+ "tux-empty-no-messages-to-display": "Inga meddelanden att visa.",
+ "tux-empty-there-are-optional": "Det finns valfria meddelanden som inte visas i listan",
+ "tux-empty-show-optional-messages": "Visa valfria meddelanden",
+ "tux-empty-no-outdated-messages": "Inga föråldrade meddelanden",
+ "tux-empty-nothing-to-proofread": "Ingenting att granska",
+ "tux-empty-you-can-help-providing": "Du kan hjälpa till att ge oss nya översättningar",
+ "tux-empty-nothing-new-to-proofread": "Ingenting nytt att granska",
+ "tux-empty-you-can-review-already-proofread": "Du kan granska översättningar som redan har granskats av andra.",
+ "tux-empty-list-other": "Ingenting att översätta",
+ "tux-empty-list-other-guide": "Du kan hjälpa till att granska befintliga översättningar",
+ "tux-empty-list-other-action": "Granska översättningar",
+ "tux-empty-list-other-link": "Visa alla meddelanden",
+ "tux-editor-close-tooltip": "Stäng",
+ "tux-editor-expand-tooltip": "Expandera",
+ "tux-editor-collapse-tooltip": "Göm",
+ "tux-editor-message-tools-show-editor": "Visa i wikiredigeraren",
+ "tux-editor-message-tools-history": "Historik",
+ "tux-editor-message-tools-delete": "Radera",
+ "tux-editor-message-tools-translations": "Alla översättningar",
+ "tux-editor-message-tools-linktothis": "Länk till detta meddelande",
+ "tux-editor-loading": "Läser in...",
+ "tux-editor-loading-failed": "Misslyckades att läsa in översättningshjälpmedel: $1",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|till språk|språk till}}",
+ "translate-statsbar-tooltip": "$1 % översatt, $2 % granskat",
+ "translate-statsbar-tooltip-with-fuzzy": "$1 % översatt, $2 % granskat, $3 % föråldrat",
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|till grupp|grupper till}}",
+ "translate-syntax-error": "Översättningen innehåller syntaxfel",
+ "tux-session-expired": "Du är inte längre inloggad. Vänligen logga in i en separat flik. Alternativt kan du göra en kopia av osparade översättningar, logga in, gå tillbaka till denna sida och klistra in din översättningar igen.",
+ "tux-nojs": "Detta verktyg fungerar inte utan JavaScript. JavaScript är inaktiverat, fungerar inte eller stöds inte denna webbläsare.",
+ "specialpages-group-translation": "Översättning",
+ "content-model-translate-messagebundle": "Översättbart meddelandebunt",
+ "translate-messagebundle-validation-error": "Ogiltig meddelandebunt: $1",
+ "translate-messagebundle-error-parsing": "Fel uppstod under tolkning av JSON: $1",
+ "translate-messagebundle-error-invalid-array": "Meddelandebunt måste vara ett JSON-objekt. Mottog typ $1",
+ "translate-messagebundle-error-key-empty": "Meddelandebunt får inte innehålla en tom nyckel",
+ "translate-messagebundle-error-key-too-long": "Nyckeln \"$1\" är för lång",
+ "translate-messagebundle-error-key-invalid-characters": "Nyckeln \"$1\" innehåller otillåtna tecken",
+ "translate-messagebundle-error-invalid-value": "Nyckeln \"$1\" innehåller inget strängvärde",
+ "translate-messagebundle-error-empty-value": "Nyckeln \"$1\" har inget värde",
+ "translate-messagebundle-error-metadata-type": "Metadata måste vara en array.",
+ "translate-messagebundle-error-invalid-metadata": "Metadataavsnittet innehåller en ogiltig nyckel: \"$1\". Nycklar som stöds är $2.",
+ "translate-messagebundle-error-invalid-sourcelanguage": "Källans språkkod \"$1\" stöds inte.",
+ "translate-messagebundle-error-invalid-prioritylanguage": "{{PLURAL:$2|Ogiltig prioriterad språkkod|Ogiltiga prioriterade språkkoder}} i metadata: $1",
+ "translate-messagebundle-error-invalid-prioritylanguage-format": "Ogiltigt prioriterat språkformat i metadata. Prioriterade språk måste vara en array av strängar.",
+ "translate-messagebundle-group-description": "Meddelanden i meddelandebunt som definierats på sidan [[$2|$1]].",
+ "translate-messagebundle-change-sourcelanguage": "Ändrar meddelandepaketets källspråk enligt metadata.",
+ "translate-messagebundle-sourcelanguage-changed": "Meddelandepaketets källspråk kan inte ändras efter det väl har skapats.",
+ "log-action-filter-translationreview": "Typ av åtgärd:",
+ "log-action-filter-translationreview-message": "Granskning av individuella översättningsmeddelanden",
+ "log-action-filter-translationreview-group": "Ändringar i förloppsstatus för översättningar"
+}
diff --git a/Translate/i18n/core/sw.json b/Translate/i18n/core/sw.json
new file mode 100644
index 00000000..bff90cb4
--- /dev/null
+++ b/Translate/i18n/core/sw.json
@@ -0,0 +1,88 @@
+{
+ "@metadata": {
+ "authors": [
+ "Edwingudfriend",
+ "Hussein m mmbaga",
+ "Kwisha",
+ "Lloffiwr",
+ "Stephenwanjau"
+ ]
+ },
+ "translate": "Kutafsiri",
+ "translate-taction-translate": "Tafsiri",
+ "translate-taction-export": "Peleka",
+ "translate-language-disabled": "Tafsiri kwa lugha hii kumelemazwa",
+ "translate-page-settings-legend": "Mpangilio",
+ "translate-page-group": "Kundi",
+ "translate-page-language": "Lugha",
+ "translate-page-navigation-legend": "Urambazaji",
+ "translate-next": "Ukurasa ujao",
+ "translate-prev": "Ukurasa uliotangulia",
+ "translate-page-description-hasoptional-open": "Onyesha ujumbe wa hiari",
+ "translate-page-edit": "hariri",
+ "translate-optional": "(ya hiari)",
+ "translate-ignored": "(imepuuzwa)",
+ "translate-edit-title": "Hariri \"$1\"",
+ "translate-edit-contribute": "changia",
+ "right-translate-messagereview": "Pitia hariri",
+ "translate-rc-translation-filter-no": "Usifanye kitu",
+ "translate-rc-translation-filter-only": "Onyesha hariri pekee yake",
+ "translate-stats-edits": "Hariri",
+ "translate-stats-users": "Wafasiri",
+ "translate-stats-reviews": "Mapitio",
+ "translate-stats-reviewers": "Wapitiaji",
+ "translate-statsf-width": "Upana kwa piseli:",
+ "translate-statsf-height": "Urefu kwa piseli:",
+ "translate-statsf-days": "Tarehe ya kuanza",
+ "translate-statsf-start": "Tarehe ya kuanza:",
+ "translate-statsf-scale-months": "Miezi",
+ "translate-statsf-scale-weeks": "Wiki",
+ "translate-statsf-scale-days": "Masiku",
+ "translate-statsf-scale-hours": "Masaa",
+ "translate-statsf-count": "Pima:",
+ "translate-statsf-count-edits": "Idadi ya hariri",
+ "translate-statsf-count-registrations": "Watumiaji wapya",
+ "translate-statsf-unknown-error": "Ilitokea hitilafu isiyojulikana.",
+ "translate-statsf-error-message": "Kulikuwa na hitilafu wakati wa kupakia grafu: $ 1",
+ "translate-sidebar-alltrans": "Katika lugha nyingine",
+ "translations": "Tafsiri zote",
+ "translate-translations-fieldset-title": "Ujumbe",
+ "translate-translations-messagename": "Jina:",
+ "translate-translations-project": "Mradi:",
+ "translate-translations-history-short": "h",
+ "languagestats": "Takwimu za lugha",
+ "languagestats-summary": "Ukurasa huu unaonyesha takwimu za kutafsiri kwa ajili ya vikundi vya jumbe vya lugha fulani.",
+ "languagestats-stats-for": "Takwimu za fasiri ya $1 ($2).",
+ "languagestats-recenttranslations": "fasiri za hivi karibuni",
+ "translate-language-code": "Msimbo wa lugha",
+ "translate-language-code-field-name": "Msimbo wa lugha:",
+ "translate-suppress-complete": "Isionyeshwe vikundi vya jumbe zilizotafsiriwa zote",
+ "translate-language": "Lugha",
+ "translate-total": "Jumbe",
+ "translate-untranslated": "Haijatafsiriwa",
+ "translate-percentage-complete": "Tayari",
+ "translate-percentage-fuzzy": "Zilizopitwa na wakati",
+ "translate-ls-submit": "Onyesha takwimu",
+ "translate-ls-column-group": "Kundi la ujumbe",
+ "translate-mgs-pagename": "Takwimu za Kundi la ujumbe",
+ "translate-mgs-fieldset": "Onyesha upendeleo",
+ "translate-mgs-submit": "Onyesha takwimu",
+ "translate-mgs-column-language": "Lugha",
+ "supportedlanguages-recenttranslations": "fasiri za hivi karibuni",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|language|lugha}} kwa jumla.",
+ "translate-jssti-add": "Ongeza kwa orodha",
+ "translate-smg-right": "Mabadiliko yanayoingia",
+ "translate-manage-import-new": "Ujumbe mpya $1",
+ "translate-manage-action-ignore": "Puuza",
+ "translate-import-load": "Pakua faili",
+ "translate-gs-code": "Msimbo",
+ "translate-gs-continent": "Bara",
+ "translate-gs-count": "Hesabu",
+ "translate-gs-total": "Jumla",
+ "translate-gs-avgscore": "Alama ya wastani",
+ "translate-documentation-language": "Nyaraka za ujumbe",
+ "translate-searchprofile": "Tafsiri",
+ "translate-workflowstatus": "Hali: $1",
+ "translate-stats-workflow": "Hali",
+ "translate-dynagroup-recent-label": "fasiri za hivi karibuni"
+}
diff --git a/Translate/i18n/core/sxu.json b/Translate/i18n/core/sxu.json
new file mode 100644
index 00000000..4e5f67b4
--- /dev/null
+++ b/Translate/i18n/core/sxu.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jun Misugi"
+ ]
+ },
+ "translate-documentation-language": "Nochrichdndoggumendadsion"
+}
diff --git a/Translate/i18n/core/syl.json b/Translate/i18n/core/syl.json
new file mode 100644
index 00000000..54f53a7e
--- /dev/null
+++ b/Translate/i18n/core/syl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "ꠢꠣꠍꠘ ꠞꠣꠎꠣ"
+ ]
+ },
+ "translate-documentation-language": "ꠝꠣꠔꠇꠕꠣ ꠟꠦꠇꠤꠔꠙꠠꠤꠔ"
+}
diff --git a/Translate/i18n/core/szl.json b/Translate/i18n/core/szl.json
new file mode 100644
index 00000000..059085fc
--- /dev/null
+++ b/Translate/i18n/core/szl.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Herr Kriss",
+ "Krol111",
+ "Pimke",
+ "Uostofchuodnego"
+ ]
+ },
+ "translate-next": "Nastympnŏ strōna",
+ "translate-prev": "Poprzedniŏ strōna",
+ "translate-documentation-language": "Dokumyntacyjŏ wiadōmości"
+}
diff --git a/Translate/i18n/core/szy.json b/Translate/i18n/core/szy.json
new file mode 100644
index 00000000..ac0ec870
--- /dev/null
+++ b/Translate/i18n/core/szy.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "Benel",
+ "Bunukwiki",
+ "Tokoabibi"
+ ]
+ },
+ "translate-export-form-format": "kese",
+ "translate-statsf-count-registrations": "baluhay misaungayay",
+ "translations": "sacahamin a belih nu kamu",
+ "translate-langstats-collapse": "piked",
+ "translate-documentation-language": "palatuh buhci tu kamu a sulit",
+ "translate-searchprofile": "mibelih",
+ "tux-editor-discard-changes-button-label": "miales tu masumaday",
+ "tux-notices-hide": "midimut",
+ "tux-editor-message-desc-less": "mikabu",
+ "tux-editor-translate-mode": "piazihan tu sulit",
+ "tux-editor-close-tooltip": "edeben",
+ "tux-editor-collapse-tooltip": "piked",
+ "tux-editor-message-tools-translations": "sacahamin a belih nu kamu",
+ "tux-editor-loading": "miasip henay ayza..."
+}
diff --git a/Translate/i18n/core/ta.json b/Translate/i18n/core/ta.json
new file mode 100644
index 00000000..dc636f55
--- /dev/null
+++ b/Translate/i18n/core/ta.json
@@ -0,0 +1,200 @@
+{
+ "@metadata": {
+ "authors": [
+ "Anj.balaji",
+ "ElangoRamanujam",
+ "Kanags",
+ "Karthi.dr",
+ "Logicwiki",
+ "Rakeshonwiki",
+ "Shanmugamp7",
+ "Surya Prakash.S.A.",
+ "TRYPPN",
+ "Trengarasu",
+ "செல்வா",
+ "மதனாஹரன்"
+ ]
+ },
+ "translate": "மொழி பெயர்ப்பு",
+ "translate-desc": "மீடியாவிக்கியையும் தாண்டிய வேறு மொழிபெயர்ப்புகளுக்கான [[Special:Translate|சிறப்புப் பக்கம்]]",
+ "translate-taskui-export-to-file": "சொந்த வடிவமைப்பில் ஏற்றுமதி செய்",
+ "translate-taskui-export-as-po": "இணைப்பில்லா (off-line) மொழிபெயர்ப்புக்காக ஏற்றுமதி செய்",
+ "translate-taction-translate": "மொழிபெயர்ப்பு செய்யவும்",
+ "translate-taction-proofread": "மெய்ப்புப் பார்",
+ "translate-taction-lstats": "மொழி புள்ளிவிவரம்",
+ "translate-taction-mstats": "தகவல் குழு புள்ளிவிவரங்கள்",
+ "translate-taction-export": "ஏற்றுமதி செய்",
+ "translate-taction-disabled": "இந்த செயல் இந்த விக்கியில் செயலிழக்கம் செய்யப்பட்டுள்ளது.",
+ "translate-page-no-such-language": "குறித்த மொழி செல்லுபடியற்றதாகும்.",
+ "translate-page-no-such-group": "குறித்த குழு செல்லுபடியற்றதாகும்.",
+ "translate-page-disabled": "இந்த குழுவில் இந்த மொழிக்கான மொழிபெயப்பு செயலிழக்கம் செய்யப்பட்டுள்ளது.\nகாரணம்:\n\n<em>$1</em>",
+ "translate-page-settings-legend": "அமைப்புகள்",
+ "translate-page-group": "குழு",
+ "translate-page-language": "மொழி",
+ "translate-page-limit": "அளவு",
+ "translate-page-limit-option": "பக்கத்திற்கு $1 {{PLURAL:$1|தகவல்|தகவல்கள்}}",
+ "translate-submit": "கொண்டுவா",
+ "translate-page-navigation-legend": "வழிகாணல்",
+ "translate-page-showing": "$1 என்பதிலிருந்து $2 வரையிலான $3 என்பதன் தகவல்களைக் காட்டுகிறது.",
+ "translate-page-showing-all": "$1 {{PLURAL:$1|தகவல்|தகவல்கள்}} காட்டப்படுகிறது.",
+ "translate-page-showing-none": "காட்டுவதற்கு எந்த தகவல்களும் இல்லை.",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "அடுத்த பக்கம்",
+ "translate-prev": "முந்திய பக்கம்",
+ "translate-page-description-legend": "குழுவைப் பற்றிய தகவல்",
+ "translate-page-description-hasoptional-open": "விருப்பத் தகவல்களை காண்பி.",
+ "translate-page-edit": "தொகு",
+ "translate-optional": "(விருப்பதேர்வு)",
+ "translate-ignored": "(புறக்கணிக்கப்பட்டது)",
+ "translate-edit-title": "\"$1\" -ஐ தொகுக்கவும்",
+ "translate-edit-definition": "தகவல் வரையறை",
+ "translate-edit-contribute": "பங்களி",
+ "translate-edit-no-information": "இச் செய்திக்கு ஆவணமாக்கல் ஏதும் இல்லை.\nஇச் செய்தி எங்கே எப்படிப் பயன்படுத்தப்படும் என்பது உங்களுக்குத் தெரியுமாயின் இதற்கு ஆவணமாக்கல் சேர்ப்பதன் மூலம் மற்ற மொழிபெயர்ப்பாளர்களுக்கு நீங்கள் உதவ முடியும்.",
+ "translate-edit-information": "தகவல் ($1) ஐப் பற்றிய குறிப்பு",
+ "translate-edit-warnings": "நிறைவுபெறாத மொழிபெயர்ப்புகளைப் பற்றிய எச்சரிக்கைகள்",
+ "translate-edit-tmmatch": "$1% பொருத்தம்",
+ "translate-edit-nopermission": "தகவல்களை மொழிபெயர்க்க உங்களுக்கு அனுமதி இருக்கவேண்டும்.",
+ "translate-edit-askpermission": "அனுமதி வேண்டுக",
+ "exporttranslations": "மொழிபெயர்ப்புகளை ஏற்றுக",
+ "translate-pref-editassistlang": "உதவும் மொழிகள்:",
+ "prefs-translate": "மொழிபெயர்ப்பு விருப்பத் தேர்வுகள்",
+ "right-translate-import": "தொடரறுமொழிபெயர்ப்புக்களை உள்ளிடு",
+ "right-translate-messagereview": "மொழிபெயர்ப்புகளை மதிப்பீடுக",
+ "translate-rc-translation-filter": "மொழிபெயர்ப்புகளை வடிகட்டு",
+ "translate-rc-translation-filter-no": "எதுவும் செய்ய வேண்டாம்",
+ "translate-rc-translation-filter-only": "மொழிபெயர்ப்புகளை மட்டும் காண்பி",
+ "translate-rc-translation-filter-filter": "மொழிபெயர்ப்புகளை வடிகட்டு",
+ "translate-rc-translation-filter-site": "மாற்றங்கள் தள தகவல்களுக்கு மட்டும்",
+ "translationstats": "மொழிபெயர்ப்பு புள்ளிவிவரம்",
+ "translate-stats-edits": "திருத்தங்கள்",
+ "translate-stats-users": "மொழிபெயர்ப்பாளர்கள்",
+ "translate-stats-registrations": "பதிவுகள்",
+ "translate-stats-reviews": "மதிப்பீடுகள்",
+ "translate-stats-reviewers": "மதிப்பீட்டாளர்கள்",
+ "translate-statsf-intro": "இந்த படிவம் மூலம் நீங்கள் எளிய புள்ளிவிவரத்தை உருவாக்கலாம்.\nஅனைத்து மதிப்புகளும் மேல் மற்றும் கீழ் வரம்புகளை கொண்டிருக்கும்.",
+ "translate-statsf-options": "வரைபட விருப்பத்தேர்வுகள்",
+ "translate-statsf-width": "படவணுக்களில் அகலம்",
+ "translate-statsf-height": "படவணுக்களில் உயரம்",
+ "translate-statsf-days": "நேர இடைவெளி நாட்கணக்கில்",
+ "translate-statsf-start": "தொடக்க தேதி:",
+ "translate-statsf-scale-months": "மாதங்கள்",
+ "translate-statsf-scale-weeks": "வாரங்கள்",
+ "translate-statsf-scale-days": "நாட்கள்",
+ "translate-statsf-scale-hours": "மணி",
+ "translate-statsf-count": "அளவை",
+ "translate-statsf-count-edits": "தொகுப்புகளின் எண்ணிக்கை:",
+ "translate-statsf-count-users": "நடப்பு மொழிபெயர்ப்பாளர்கள்",
+ "translate-statsf-count-registrations": "புதிய பயனர்கள்",
+ "translate-statsf-count-reviews": "மொழிபெயர்ப்பு மதிப்பீடுகள்",
+ "translate-statsf-count-reviewers": "மீள்பார்வையாளர்கள்",
+ "translate-statsf-language": "மொழிகளுக்கான குறியீடுகளின் காற்புள்ளிகளால் பிரித்த பட்டியல்:",
+ "translate-statsf-group": "குழுக்களுக்கான குறியீடுகளின் காற்புள்ளிகளால் பிரித்த பட்டியல்:",
+ "translate-statsf-submit": "முன்னோட்டம்",
+ "translate-tag-page-desc": "விக்கி பக்கம் [[$2|$1]] ன் மொழிபெயர்ப்பு",
+ "translate-sidebar-alltrans": "மற்ற மொழிகளில்",
+ "translations": "எல்லா மொழிபெயர்ப்புகளும்",
+ "translate-translations-no-message": "\"$1\" ஒரு மொழிபெயர்க்கத்தக்க செய்தியல்ல",
+ "translate-translations-none": "\"$1\" என்பதற்கு எந்தவொரு மொழிபெயர்ப்பும் இல்லை",
+ "translate-translations-count": "{{PLURAL:$1|ஒரு மொழிபெயர்ப்புக் கண்டுபிடிக்கப்பட்டது|$1 மொழிபெயர்ப்புகள் கண்டுபிடிக்கப்பட்டன}}.",
+ "translate-translations-fieldset-title": "செய்தி",
+ "translate-translations-messagename": "பெயர்:",
+ "translate-translations-project": "திட்டம்:",
+ "translate-translations-history-short": "வர",
+ "languagestats": "மொழி குறித்த புள்ளிவிவரங்கள்",
+ "languagestats-recenttranslations": "அண்மைய மொழிபெயர்ப்புகள்",
+ "translate-langstats-incomplete": "இப்பக்கத்திலுள்ள புள்ளிவிபரங்களுள் சில முழுமையாக இல்லை. இன்னும் புள்ளிவிபரங்களைப் பெறுவதற்குத் தயவு செய்து மீண்டும் ஏற்றுங்கள்.",
+ "translate-langstats-expand": "விரிவாக்குக",
+ "translate-langstats-collapse": "சுருக்குக",
+ "translate-langstats-expandall": "அனைத்தையும் விரிவாக்குக",
+ "translate-langstats-collapseall": "அனைத்தியும் சுருக்குக",
+ "translate-language-code": "மொழிக் குறியீடு",
+ "translate-language-code-field-name": "மொழிக் குறியீடு:",
+ "translate-language": "மொழி",
+ "translate-total": "தகவல்கள்",
+ "translate-untranslated": "மொழிபெயர்க்காதவை",
+ "translate-percentage-complete": "நிறைவு",
+ "translate-percentage-fuzzy": "காலாவதியானது",
+ "translate-ls-submit": "புள்ளிவிவரங்களை காண்பி",
+ "translate-ls-column-group": "தகவல் குழு",
+ "translate-mgs-pagename": "தகவல் குழு புள்ளிவிவரங்கள்",
+ "translate-mgs-fieldset": "விருப்பத்தேர்வுகளைக் காண்பி",
+ "translate-mgs-group": "தகவல் குழு:",
+ "translate-mgs-submit": "புள்ளிவிவரங்களை காண்பி",
+ "translate-mgs-column-language": "மொழி",
+ "supportedlanguages": "ஆதரிக்கப்பட்ட மொழிகள்",
+ "supportedlanguages-portallink": "[$1] $2 - $3",
+ "supportedlanguages-recenttranslations": "அண்மைய மொழிபெயர்ப்புகள்",
+ "supportedlanguages-count": "மொத்தமாக $1 {{PLURAL:$1|மொழி|மொழிகள்}}.",
+ "translate-jssti-add": "பட்டியலில் சேர்",
+ "managemessagegroups": "தகவல் குழு மேலாண்மை",
+ "translate-smg-right": "உள்வரும் மாற்றங்கள்",
+ "translate-smg-rename-select": "தேர்க",
+ "translate-manage-import-diff": "செய்தி $1 | செயல்கள்: $2",
+ "translate-manage-import-new": "புதிய செய்தி $1",
+ "translate-manage-import-deleted": "நீக்கப்பட்ட செய்தி $1",
+ "translate-manage-action-import": "இறக்கு",
+ "translate-manage-action-conflict": "இறக்கு மற்றும் மயக்குறு",
+ "translate-manage-action-ignore": "புறக்கணி",
+ "translate-manage-action-fuzzy": "இறக்கு மற்றும் மயக்குறு மொழிபெயர்ப்புகள்",
+ "translate-manage-action-rename": "பெயர் மாற்றுக",
+ "translate-manage-import-summary": "வெளி மூலத்திலிருந்து ஒரு புதிய பதிப்பை உள்ளிடுகின்றது",
+ "translate-manage-import-ignore": "தகவல் $1 ஐத் விட்டுச்செல்",
+ "translate-manage-submit": "செயல்படுத்து",
+ "importtranslations": "மொழிபெயர்ப்புகளை இறக்கு",
+ "translate-import-from-local": "உள்ளகத்துக் கோப்பு ஏற்றல்:",
+ "translate-import-load": "கோப்பை ஏற்று",
+ "translate-import-err-dl-failed": "கொண்டுவர இயலாத கோப்பு: $1",
+ "translate-import-err-ul-failed": "கோப்பு ஏற்றம் வெற்றியடையவில்லை",
+ "translate-import-err-invalid-title": "வழங்கப்பட்ட கோப்பின் பெயர் <nowiki>$1</nowiki> தவறானது.",
+ "translate-js-support-unsaved-warning": "நீங்கள் சேமிக்கப்படாத மொழிபெயர்ப்புகளைக் கொண்டுள்ளீர்கள்.",
+ "translate-gs-pos": "இடம்",
+ "translate-gs-code": "குறியீடு",
+ "translate-gs-continent": "கண்டம்",
+ "translate-gs-speakers": "பேசுவோர்",
+ "translate-gs-score": "பெறுபுள்ளிகள்",
+ "translate-gs-multiple": "பல",
+ "translate-gs-count": "எண்ணிக்கை",
+ "translate-gs-total": "மொத்தம்",
+ "translate-gs-avgscore": "சராசரி பெறுபுள்ளிகள்",
+ "translate-documentation-language": "தகவல் ஆவணமாக்கல்",
+ "translate-searchprofile": "மொழிபெயர்ப்புகள்",
+ "translate-searchprofile-tooltip": "எல்லா மொழிபெயர்ப்புகளில் இருந்தும் தேடு",
+ "translate-search-languagefilter": "மொழிவாரியாக வடிகட்டு:",
+ "translate-search-nofilter": "வடிகட்டல் இல்லை",
+ "log-name-translationreview": "மொழிபெயர்ப்பு பரிசீலனைப் பதிகை",
+ "log-description-translationreview": "மொழிபெயர்ப்புகள் மற்றும் தகவல் குழுக்களுக்கான அனைத்து பரிசீலனைகளின் பதிகை.",
+ "logentry-translationreview-message": "மொழிபெயர்ப்பு $3, $1 பயனரால் {{GENDER:$2|ஏற்றுக்கொள்ளப்பட்டது}}",
+ "translate-workflow-state-": "(அமைக்கப்படவில்லை)",
+ "translate-workflowstatus": "நிலை:$1",
+ "translate-workflow-set-doing": "அமைக்கிறது...",
+ "translate-stats-workflow": "நிலைமை",
+ "translate-dynagroup-recent-label": "அண்மைய மொழிபெயர்ப்புகள்",
+ "translate-dynagroup-additions-label": "அண்மைய சேர்க்கைகள்",
+ "translate-msggroupselector-projects": "தகவல் குழுக்கள்",
+ "translate-msggroupselector-search-placeholder": "தேடல் குழுக்கள்",
+ "translate-msggroupselector-search-all": "அனைத்தும்",
+ "translate-msggroupselector-search-recent": "அண்மைய",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|துணைக்குழு|துணைக்குழுக்கள்}}",
+ "tux-languageselector": "மொழி",
+ "tux-tab-all": "அனைத்தும்",
+ "tux-tab-untranslated": "மொழிபெயர்க்காதவை",
+ "tux-tab-outdated": "காலாவதியானது",
+ "tux-tab-translated": "மொழிபெயர்ப்பு செய்யப்பட்டது",
+ "tux-edit": "தொகு",
+ "tux-status-optional": "விருப்பத்தேர்வு",
+ "tux-status-fuzzy": "காலாவதியானது",
+ "tux-status-proofread": "மெய்ப்புப் பார்",
+ "tux-status-translated": "மொழிபெயர்ப்பு செய்யப்பட்டது",
+ "tux-status-saving": "பதிப்பிடப்படுகின்றது...",
+ "tux-status-unsaved": "பதிப்பிடப்படாதது",
+ "tux-save-unknown-error": "இனம் தெரியாத ஒரு தவறு நிகழ்ந்துவிட்டது.",
+ "tux-editor-save-button-label": "மொழிபெயர்ப்பை சேமிக்கவும்",
+ "tux-editor-skip-button-label": "அடுத்ததற்குத் தாண்டிச் செல்க",
+ "tux-editor-edit-desc": "விளக்கத்தை தொகுக்கவும்",
+ "tux-editor-suggestions-title": "பரிந்துரைகள்",
+ "tux-editor-in-other-languages": "மற்ற மொழிகளில்",
+ "tux-editor-need-more-help": "மேலதிக உதவி தேவையா?",
+ "tux-editor-ask-help": "மேலதிக தகவல்களை கேட்கவும்",
+ "tux-editor-message-tools-show-editor": "விக்கி எடிட்டரில் காண்பிக்கவும்",
+ "tux-nojs": "இந்தப் பக்கத்திற்கு ஜாவாஸ்ரிப்ட் தேவை"
+}
diff --git a/Translate/i18n/core/tay.json b/Translate/i18n/core/tay.json
new file mode 100644
index 00000000..4d7c54c6
--- /dev/null
+++ b/Translate/i18n/core/tay.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Akamycoco",
+ "Hitaypayan"
+ ]
+ },
+ "translate-page-edit": "smr’zyut miru’",
+ "translate-edit-title": "Smr’zyut miru’ \"$1\"",
+ "translate-documentation-language": "Minblaq kmal biru’ na pintkaykay’",
+ "tux-edit": "Smr’zyut miru’",
+ "tux-proofread-edit-label": "Smr’zyut miru’"
+}
diff --git a/Translate/i18n/core/tcy.json b/Translate/i18n/core/tcy.json
new file mode 100644
index 00000000..6b2e49de
--- /dev/null
+++ b/Translate/i18n/core/tcy.json
@@ -0,0 +1,58 @@
+{
+ "@metadata": {
+ "authors": [
+ "BHARATHESHA ALASANDEMAJALU",
+ "Chidananda Kampa",
+ "Kiranpoojary",
+ "Ravi Mundkur",
+ "Soundarya shetty s",
+ "VASANTH S.N.",
+ "Vishwanatha Badikana"
+ ]
+ },
+ "translate": "ಭಾಷಾಂತರ ಮಲ್ಪುಲೆ",
+ "translate-taction-translate": "ತರ್ಜುಮೆ",
+ "translate-taction-lstats": "ಬಾಸೆ ಅಂಕಿಅಂಶೊಲು",
+ "translate-page-group": "ಗುಂಪು",
+ "translate-page-language": "ಬಾಸೆ",
+ "translate-page-limit": "ಮಿತಿ",
+ "translate-next": "ಬೊಕ್ಕದ ಪುಟೊ",
+ "translate-prev": "ದುಂಬುದ ಪುಟೊ",
+ "translate-edit-contribute": "ಸಹಾಯ ಕೊರ್ಲೆ",
+ "translate-export-group-too-large": "ಆಯ್ಕೆ ಮಲ್ತಿನ ಸಂದೇಸೊದ ಗುಂಪು ದಿಂಜ ಮಲ್ಲೆ ಆತ್ಂಡ್. ಗುಂಪು ೧ {{PLURAL: $ 1 | ಸಂದೇಸೊ | ಸಂದೇಸೊಲು}} ಡ್ದ್ ಕಡಮೆ ಇಪ್ಪುನ ಸಂದೇಸೊ ಗುಂಪುನು ನಾಡ್ ಅತ್ತಂಡ ಸಲಹೆಗಾದ್ ಅನುವಾದೊ ನಿರ್ವಾಹಕೆರೆನ್ ಸಂಪರ್ಕಿಸಲ.",
+ "translate-rc-translation-filter": "ತರ್ಜುಮೆದ ಅರಿಪೆ",
+ "translate-rc-translation-filter-no": "ದಾಲ ಮಲ್ಪೊಡ್ಚಿ",
+ "translate-rc-translation-filter-only": "ತರ್ಜುಮೆಲೆನ್ ಮಾತ್ರ ತೋಜಾಲೆ",
+ "translate-rc-translation-filter-filter": "ತರ್ಜುಮೆಲೆನ್ ಅರಿತ್ ದೆಪ್ಪುಲೆ",
+ "translate-rc-translation-filter-site": "ಸೈಟ್ ಸಂದೇಶೊಲೆಗ್ ಆಯಿನ ಬದಲಾವಣೆಲು ಮಾತ್ರ",
+ "translate-stats-edits": "ಸೇರ್ಸಯಿನ",
+ "translate-stats-users": "ಅನುವಾದಕೆರ್",
+ "translate-stats-reviews": "ಪೀರ ಒರ ತೂಲೆ",
+ "translate-stats-reviewers": "ಸರಿ ಉಂಡಾಂದ್ ತುಪುನಾರ್",
+ "translate-statsf-scale-months": "ತಿಂಗೊಳು",
+ "translate-statsf-scale-weeks": "ವಾರೋಲು",
+ "translate-statsf-scale-days": "ದಿನಕ್ಕುಲು",
+ "translate-statsf-scale-hours": "ಘಂಟೆಲು",
+ "translate-statsf-count": "ಅಳತೆ:",
+ "translate-statsf-count-edits": "ಸಂಪಾದನೆತಾ ಸಂಖ್ಯೆ",
+ "translate-statsf-count-users": "ಸಕ್ರಿಯವಾದುಪ್ಪುನ ಅನುವಾದಕೆರ್",
+ "translate-statsf-count-registrations": "ಪೊಸ ಗಲಸುನರ್",
+ "translate-statsf-count-reviewers": "ಸರಿ ಉಂಡಾಂದ್ ತುಪುನಾರ್",
+ "translate-statsf-submit": "ದುಂಬುತಾ",
+ "translate-sidebar-alltrans": "ಬೇತೆ ಬಾಸೆಲೆಡ್",
+ "translations": "ಮಾತಾ ತರ್ಜುಮೆಲು",
+ "translations-summary": "ಇತ್ತಿನ ಮಾತಾ ತರ್ಜುಮೆಲೆನ್ ತೋಜಾಯೆರೆ ಒಂಜಿ ಸಂದೇಶೊದ ಪುದರ್‌ನ್ ತಿರ್ತ್ ಬರೆಲೆ.",
+ "translate-translations-fieldset-title": "ಸಂದೇಸೊ",
+ "translate-translations-messagename": "ಪುದರ್:",
+ "translate-translations-project": "ಯೋಜನೆ:",
+ "translate-translations-history-short": "ದುಂಬು ಇರ್ ತೂಯಿನವು",
+ "languagestats": "ಬಾಸೆತಾ ಲೆಕ್ಕಪಕ್ಕೋಲು",
+ "languagestats-recenttranslations": "ಇಂಚಿಪದ ಅನುವಾದೋಲು",
+ "translate-language": "ಬಾಸೆ",
+ "translate-total": "ಸಂದೇಶಲು",
+ "translate-gs-total": "ಒಟ್ಟು",
+ "translate-documentation-language": "ಸುದ್ದಿ ದಾಕಲೆ ಮಲ್ಪುನು",
+ "tux-languageselector": "ತರ್ಜುಮೆ ಮಲ್ಪೊಡಾಯಿನ ಬಾಸೆ",
+ "tux-editor-shortcut-info": "ದೃಡ ಮಲ್ತಿ ಬೊಕ ದುಂಬುದ ಸಂದೇಶೊಗು ಪೋವರೆ $1 ಒತ್ತುಲೆ, ಬುಡಿಯೆರೆ $2,ಸಾರಾಂಶ ಕೊರಿಯರೆ $4, ಅತ್ತಾಂಡ ಬೇತೆ ಕಿನ್ಯಸಾದಿಲೆನ್ ತೂವರೆ $3 ಒತ್ತುಲೆ.",
+ "tux-editor-message-tools-show-editor": "wiki editor ಡ್ ತೋಜಾಲೆ"
+}
diff --git a/Translate/i18n/core/tdd.json b/Translate/i18n/core/tdd.json
new file mode 100644
index 00000000..adbb9b5f
--- /dev/null
+++ b/Translate/i18n/core/tdd.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aey Tai Nuea",
+ "咽頭べさ"
+ ]
+ },
+ "translate-documentation-language": "ᥚᥪᥢ ᥘᥤᥐ ᥑᥨᥝᥲ ᥑᥣᥝᥱ"
+}
diff --git a/Translate/i18n/core/te.json b/Translate/i18n/core/te.json
new file mode 100644
index 00000000..4d717d6f
--- /dev/null
+++ b/Translate/i18n/core/te.json
@@ -0,0 +1,241 @@
+{
+ "@metadata": {
+ "authors": [
+ "AVVK Chaitanya",
+ "Arjunaraoc",
+ "Bvprasadenwiki",
+ "Chaduvari",
+ "Kiranmayee",
+ "Shirayuki",
+ "Veeven",
+ "Visdaviva"
+ ]
+ },
+ "translate": "అనువదించు",
+ "translate-desc": "మీడియావికీని ఇతరాలను అనువదించడానికి [[Special:Translate|ప్రత్యేక పుట]]",
+ "translate-taskui-export-to-file": "స్థానిక ఫార్మాట్లోకి ఎగుమతి చేయండి",
+ "translate-taskui-export-as-po": "ఆఫ్ లైన్ అనువాదానికై ఎగుమతి",
+ "translate-taction-translate": "అనువాదం",
+ "translate-taction-proofread": "సమీక్ష",
+ "translate-taction-lstats": "భాష గణాంకాలు",
+ "translate-taction-mstats": "సందేశ సమూహ గణాంకాలు",
+ "translate-taction-export": "ఎగుమతి",
+ "translate-taction-disabled": "ఈవికీలో ఈ చర్యను అచేతనం చేసారు.",
+ "translate-page-no-such-language": "ఎంచుకున్న భాష సరైనది కాదు.",
+ "translate-page-no-such-group": "ఇచ్చిన సమూహం సరైనది కాదు.",
+ "translate-page-disabled": "ఈ భాషకి ఈ సమూహంలో అనువాదాలని అచేతనం చేసారు.\nకారణం:\n\n<em>$1</em>",
+ "translate-language-disabled": "ఈ భాషలోకి అనువాదం నిలిపివేయబడింది",
+ "translate-page-settings-legend": "అమరికలు",
+ "translate-page-group": "సమూహం",
+ "translate-page-language": "భాష",
+ "translate-page-limit": "పరిమితి",
+ "translate-page-limit-option": "పుటకి $1 {{PLURAL:$1|సందేశం|సందేశాలు}}",
+ "translate-submit": "తీసుకురా",
+ "translate-page-navigation-legend": "మార్గదర్శకం",
+ "translate-page-showing": "మొత్తం $3 సందేశాల్లో $1 నుండి $2 వరకు చూపిస్తున్నాం.",
+ "translate-page-showing-all": "$1 {{PLURAL:$1|సందేశాన్ని|సందేశాలను}} చూపిస్తున్నాం.",
+ "translate-page-showing-none": "ఇంక సందేశాలేమీ లేవు.",
+ "translate-next": "తర్వాతి పుట",
+ "translate-prev": "క్రితం పుట",
+ "translate-page-description-legend": "ఈ సమూహం గురించిన సమాచారం",
+ "translate-page-description-hasoptional-open": "ఐచ్చిక సందేశాలను చూపించు.",
+ "translate-page-edit": "మార్చు",
+ "translate-optional": "(ఐచ్ఛికం)",
+ "translate-ignored": "(ఉపేక్షించినది)",
+ "translate-edit-title": "\"$1\"ని మార్చండి",
+ "translate-edit-definition": "సందేశ నిర్వచనం",
+ "translate-edit-contribute": "తోడ్పడండి",
+ "translate-edit-no-information": "<em>ఈ సందేశానికి డాక్యుమెంటేషను లేదు. \nఈ సందేశాన్ని ఎక్కడ లేదా ఎలా ఉపయోగిస్తారో మీకు తెలిస్తే, దీనికి ఆ సమాచారాన్ని చేర్చి ఇతర అనువాదకులకు తోడ్పడవచ్చు.</em>",
+ "translate-edit-information": "సందేశం గురించి సమాచారం ($1)",
+ "translate-edit-warnings": "అసంపూర్తి అనువాదాల గురించి హెచ్చరికలు",
+ "translate-edit-tmmatch-source": "మూలకోశ అనువాదం: $1",
+ "translate-edit-tmmatch": "$1% పోలిక",
+ "translate-edit-nopermission": "సందేశాలను అనువదించడానికి మీకు అనువాద హక్కులు అవసరం.",
+ "translate-edit-askpermission": "అనుమతి తెచ్చుకోండి",
+ "exporttranslations": "అనువాదాలన ఎగుమతి",
+ "translate-export-form-format": "ఆకృతి",
+ "translate-checks-parameters": "ఈ {{PLURAL:$2|పరామితిని|పరామితులను}} వాడనేలేదు:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|ఇది గుర్తుతెలియని పరామితి|ఇవి గుర్తుతెలియని పరామితులు}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "{{PLURAL:$2|బ్రాకెట్లు|బ్రాకెట్లు}} సరి సమాన సంఖ్యలో లేవు:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "ఈ {{PLURAL:$2|లింకు సమస్యాత్మకంగా ఉంది|$2 లింకులు సమస్యాత్మకంగా ఉన్నాయి}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "ఈ క్రింది {{PLURAL:$2|లింకు |$2 లింకులు}} లేవు:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "అసలు సందేశంలో <nowiki>{{PLURAL:}}</nowiki> అనివుంది కానీ అనువాదంలో లేదు.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> ఇవ్వబడింది {{PLURAL:$1|ఫార్మ్|$1 ఫారములు}} కాని {{PLURAL:$2|ఒకే ఒక ఫార్మ్|$2 ఫారములు}} మద్దతివ్వబడ్డాయి (మినహాయింపు 0= కాని 1=ఫారములు).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki>కి చివరన ఒకే రూపాలు ఉన్నాయి. <nowiki>{{PLURAL:$1|sheep|sheep}}</nowiki>ని ఇలా వ్రాయాలి <nowiki>{{PLURAL:$1|sheep}}</nowiki>.",
+ "translate-checks-pagename": "మూలం లోని పేరుబరి మారింది",
+ "translate-checks-format": "ఈ అనువాదం నిర్వచనానుసారంగా లేదు లేక చెల్లని సింటాక్స్ను కలిగివుంది: $1",
+ "translate-checks-escape": "క్రింది లోపాలు బహుశా అనుకోకుండా జరగవచ్చు: <strong>$1</strong>",
+ "translate-checks-parametersnotequal": "ఉన్న పరామితుల సంఖ్య {{PLURAL:$1|$1}}; ఉండాల్సినది {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> తప్పుగా రూపించబడింది.",
+ "translate-checks-fudforum-syntax": "ఈ ప్రాజెక్టులో <nowiki>$2</nowiki> బదులు <nowiki>$1</nowiki> వాడండి.",
+ "translate-pref-editassistlang": "సహాయక భాషలు:",
+ "prefs-translate": "అనువాద ఎంపికలు",
+ "translate-pref-editassistlang-help": "కామాతో విడదీస్తూ ఉన్న భాష కోడ్‌ల జాబితా.\nమీరు అనువదించేటపుడు, ఈ భాషల్లో దాని అనువాదాలను చూపిస్తుంది.\nభాషల డిఫాల్టు జాబితా మీ భాషపై ఆధారపై ఉంటుంది.",
+ "translate-pref-editassistlang-bad": "జాబితాలో తప్పుడు భాషా సంకేతం:\n<nowiki>$1</nowiki>.",
+ "right-translate": "అనువాద ఇంటరుఫేసును వాడి మార్పుచేర్పులు చెయ్యడం",
+ "right-translate-manage": "సందేశ సమూహాలని నిర్వహించడం",
+ "action-translate-manage": "సందేశాల సమూహాలను నిర్వహించే",
+ "right-translate-import": "ఆఫ్‍లైను అనువాదాలను దిగుమతి చేయ్యడం",
+ "action-translate-import": "ఆఫ్‍లైను అనువాదాలను దిగుమతి చేసే",
+ "translate-rc-translation-filter": "అనువాదాల వడపోత:",
+ "translate-rc-translation-filter-no": "ఏమీ చేయకు",
+ "translate-rc-translation-filter-only": "అనువాదాలను మాత్రమే చూపించు",
+ "translate-rc-translation-filter-site": "సైటు సందేశాల మార్పులు మాత్రమే",
+ "translationstats": "అనువాద గణాంకాలు",
+ "translate-stats-edits": "మార్పులు",
+ "translate-stats-users": "అనువాదకులు",
+ "translate-stats-registrations": "నమోదులు",
+ "translate-stats-reviews": "సమీక్షలు",
+ "translate-stats-reviewers": "సమీక్షకులు",
+ "translate-statsf-intro": "ఈ ఫారాన్ని ఉపయోగించి సరళమైన గణాంకాలను పొందవచ్చు. అన్ని విలువలకీ ఎగువ, దిగువ పరిమితులు ఉంటాయి.",
+ "translate-statsf-options": "గ్రాఫు ఎంపికలు",
+ "translate-statsf-width": "వెడల్పు పిక్సెళ్ళలో:",
+ "translate-statsf-height": "ఎత్తు పిక్సెళ్ళలో:",
+ "translate-statsf-days": "కాలం రోజులలో:",
+ "translate-statsf-start": "మొదలు తేదీ:",
+ "translate-statsf-scale-months": "నెలలు",
+ "translate-statsf-scale-weeks": "వారాలు",
+ "translate-statsf-scale-days": "రోజులు",
+ "translate-statsf-scale-hours": "గంటలు",
+ "translate-statsf-count": "కొలత:",
+ "translate-statsf-count-edits": "మార్పుల సంఖ్య",
+ "translate-statsf-count-users": "క్రియాశీల అనువాదకులు",
+ "translate-statsf-count-registrations": "కొత్త వాడుకరులు",
+ "translate-statsf-count-reviews": "అనువాద సమీక్షలు",
+ "translate-statsf-count-reviewers": "సమీక్షకులు",
+ "translate-statsf-language": "కామాతో వేరుపరచిన భాషా సంకేతాల జాబితా:",
+ "translate-statsf-group": "కామాలతో వేరుపరచిన సమూహ సంకేతాల జాబితా:",
+ "translate-statsf-submit": "మునుజూపు",
+ "translate-tag-page-desc": "$3 ($4) నుండి [[$2|$1]] వికీ పేజీ అనువాదం.",
+ "translate-sidebar-alltrans": "ఇతర భాషలలో",
+ "translations": "అన్ని అనువాదాలు",
+ "translate-translations-no-message": "\"$1\" అనేది అనువదించదగ్గ సందేశం కాదు",
+ "translate-translations-none": "\"$1\"కి అనువాదాలేమీ లేవు",
+ "translate-translations-count": "{{PLURAL:$1|ఒక అనువాదం దొరికింది|$1 అనువాదాలు దొరికాయి}}.",
+ "translate-translations-fieldset-title": "సందేశం",
+ "translate-translations-messagename": "పేరు:",
+ "translate-translations-project": "ప్రాజెక్టు:",
+ "translate-translations-history-short": "చ",
+ "languagestats": "భాష గణాంకాలు",
+ "languagestats-summary": "ఒక భాషకి సంబంధిచిన అన్ని సందేశ సమూహాల గణాంకాలనీ ఈ పేజీ చూపిస్తుంది.",
+ "languagestats-stats-for": "$1 కొరకై అనువాద గణాంకాలు ($2).",
+ "languagestats-recenttranslations": "ఇటీవలి అనువాదాలు",
+ "translate-langstats-expand": "విస్తరించు",
+ "translate-language-code": "భాష సంకేతం",
+ "translate-language-code-field-name": "భాష సంకేతం:",
+ "translate-suppress-complete": "పూర్తిగా అనువాదమైన సందేశాల సమూహాలను దాచు",
+ "translate-language": "భాష",
+ "translate-total": "సందేశాలు",
+ "translate-untranslated": "అనువాదంకానివి",
+ "translate-percentage-complete": "పూర్తైనవి",
+ "translate-percentage-fuzzy": "పాతబడినవి",
+ "translate-ls-submit": "గణాంకాలను చూపించు",
+ "translate-ls-column-group": "సందేశాల సమూహం",
+ "translate-mgs-pagename": "సందేశ సమూహ గణాంకాలు",
+ "translate-mgs-fieldset": "ప్రదర్శన అభిరుచులు",
+ "translate-mgs-group": "సందేశాల సమూహం:",
+ "translate-mgs-submit": "గణాంకాలను చూపించు",
+ "translate-mgs-column-language": "భాష",
+ "translate-mgs-totals": "అన్ని భాషలు కలిపి",
+ "supportedlanguages": "క్రియాశీల భాషలు",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|అనువాదకుడు|అనువాదకురాలు}}|అనువాదకులు}}: $1",
+ "supportedlanguages-recenttranslations": "ఇటీవలి అనువాదాలు",
+ "supportedlanguages-count": "మొత్తం $1 {{PLURAL:$1|భాష|భాషలు}}.",
+ "translate-jssti-add": "జాబితాకి చేర్చు",
+ "managemessagegroups": "సందేశ గుంపుల నిర్వహణ",
+ "translate-smg-groups-with-error-title": "కలిసి చేయడంలో ఇబ్బందులు ఎదుర్కొన్న గుంపులు/సమూహాలు",
+ "translate-smg-groups-with-error-desc": "కలిసి చేయడంలో ఇబ్బందులు ఎదుర్కొన్న సమూహాల జాబితా",
+ "translate-smg-group-with-error-summary": "$1 {{బహువచనం:$1|సందేశం|సందేశాలు}} తప్పులతో:",
+ "translate-smg-group-message-action-history": "చరిత్ర",
+ "translate-smg-group-message-tag-outdated": "కాలం చెల్లినది లేదా పాతది",
+ "translate-smg-group-message-tag-rename": "పేరు మార్చు",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|ట్యాగు|ట్యాగులు}}:",
+ "translate-smg-group-message-message-content": "సమాచారం లేదా అంశం లేదా విషయం లేదా సంగతి లేదా వివరం",
+ "translate-smg-group-message-message-target": "లక్ష్యం:",
+ "translate-smg-group-message-message-replacement": "పునఃస్థాపన లేదా పునః ప్రతిష్ఠ",
+ "translate-smg-group-message-message-other-langs": "ఇతర భాషలు:",
+ "translate-manage-import-diff": "సందేశం $1 | చర్యలు: $2",
+ "translate-manage-import-new": "కొత్త సందేశం $1",
+ "translate-manage-import-deleted": "సందేశం $1ని తొలగించారు",
+ "translate-manage-action-import": "దిగుమతి చెయ్యి",
+ "translate-manage-action-ignore": "పట్టించుకోవద్దు",
+ "translate-manage-import-done": "దిగుమతి పూర్తయ్యింది!",
+ "importtranslations": "అనువాదాల దిగుమతి",
+ "translate-import-from-local": "స్థానిక దస్త్రపు ఎక్కింపు:",
+ "translate-import-err-ul-failed": "దస్త్రపు ఎక్కింపు విఫలమైంది",
+ "translate-gs-pos": "స్ధానం",
+ "translate-gs-code": "సంకేతం",
+ "translate-gs-continent": "ఖండం",
+ "translate-gs-speakers": "మాట్లాడేవారు",
+ "translate-gs-score": "స్కోరు",
+ "translate-gs-multiple": "బహుళం",
+ "translate-gs-count": "లెక్క",
+ "translate-gs-total": "మొత్తం",
+ "translate-gs-avgscore": "సగటు స్కోరు",
+ "translate-documentation-language": "అనువాద సహాయం",
+ "translate-searchprofile": "అనువాదాలు",
+ "translate-searchprofile-tooltip": "అనువాదాలన్నింటిలో వెతకండి",
+ "translate-search-languagefilter": "భాష వడపోత:",
+ "translate-search-nofilter": "వడపోత లేదు",
+ "log-name-translationreview": "అనువాద సమీక్షల చిట్టా",
+ "translate-workflowstatus": "స్థితి: $1",
+ "translate-stats-workflow": "స్థితి",
+ "translate-dynagroup-recent-label": "ఇటీవలి అనువాదాలు",
+ "translate-dynagroup-additions-label": "ఇటీవలి చేర్పులు",
+ "translate-msggroupselector-projects": "సందేశాల సమూహం",
+ "translate-msggroupselector-search-all": "అన్నీ",
+ "translate-msggroupselector-search-recent": "ఇటీవలి",
+ "tux-tab-all": "అన్నీ",
+ "tux-tab-untranslated": "అనువాదం కానివి",
+ "tux-tab-outdated": "పాతబడినవి",
+ "tux-tab-translated": "అనువాదమైనవి",
+ "tux-tab-unproofread": "సమీక్షించనివి",
+ "tux-edit": "మార్చు",
+ "tux-status-optional": "ఐచ్చికం",
+ "tux-status-fuzzy": "పాతబడినది",
+ "tux-status-proofread": "సమీక్షించబడింది",
+ "tux-status-translated": "అనువదించబడింది",
+ "tux-status-saving": "ప్రచురిస్తున్నాం...",
+ "tux-save-unknown-error": "ఏదో తెలియని లోపం సంభవించింది.",
+ "tux-editor-editsummary-placeholder": "మీ మార్పులను వివరించండి (ఐచ్చికం)",
+ "tux-editor-paste-original-button-label": "మూలపాఠ్యాన్ని కాపీచెయ్యి",
+ "tux-editor-discard-changes-button-label": "మార్పులను విస్మరించు",
+ "tux-editor-save-button-label": "అనువాదాన్ని ప్రచురించు",
+ "tux-editor-skip-button-label": "వదిలేసి తర్వాతిదానికి వెళ్ళు",
+ "tux-editor-cancel-button-label": "రద్దుచేయి",
+ "tux-editor-confirm-button-label": "అనువాదాన్ని నిర్ధారించండి",
+ "tux-editor-proofread-button-label": "సమీక్షించినట్టుగా గుర్తుపెట్టు",
+ "tux-editor-suggestions-title": "సూచనలు",
+ "tux-editor-latest-updates-title": "ఇటీవలి తాజాకరణలు",
+ "tux-editor-changes-without-summary": "సారాంశం లేకుండా $1 {{PLURAL:$1|తాజాకరణ|తాజాకరణలు}}",
+ "tux-editor-all-changes": "మార్పులన్నీ",
+ "tux-editor-in-other-languages": "ఇతర భాషలలో",
+ "tux-editor-need-more-help": "మరింత సహాయం కావాలా?",
+ "tux-editor-ask-help": "మరింత సమాచారం కోసం అడగండి",
+ "tux-editor-tm-match": "$1% పోలిక",
+ "tux-notices-more": "{{PLURAL:$1|ఇంకా $1}}",
+ "tux-notices-hide": "దాచు",
+ "tux-editor-n-uses": "{{PLURAL:$1|ఒక సారి|$1 సార్లు}} వాడారు",
+ "tux-editor-message-desc-more": "మరిన్ని చూడండి",
+ "tux-editor-message-desc-less": "కొన్నే చూడండి",
+ "tux-editor-clear-translated": "అనువాదమైనవాటిని దాచు",
+ "tux-editor-proofreading-mode": "సమీక్ష",
+ "tux-editor-translate-mode": "జాబితా",
+ "tux-proofread-edit-label": "మార్చు",
+ "tux-editor-page-mode": "పేజీ",
+ "tux-editor-outdated-notice-diff-link": "తేడాలను చూపించు",
+ "tux-editor-doc-editor-cancel": "రద్దుచేయి",
+ "tux-messagetable-more-messages": "ఇంకా $1 {{PLURAL:$1|సందేశం|సందేశాలు}}",
+ "tux-message-filter-optional-messages-label": "ఐచ్చిక సందేశాలు",
+ "tux-proofread-translated-by-self": "మీరే అనువదించారు",
+ "tux-empty-list-translated-action": "అనువదించు",
+ "tux-empty-list-other-link": "అన్ని సందేశాలను చూపించు",
+ "tux-editor-close-tooltip": "మూసివేయి",
+ "tux-editor-expand-tooltip": "విస్తరించు",
+ "tux-editor-message-tools-history": "చరిత్ర",
+ "tux-editor-message-tools-delete": "తొలగించు",
+ "tux-editor-message-tools-translations": "అన్ని అనువాదాలు",
+ "tux-editor-loading": "లోడవుతోంది...",
+ "translate-search-more-languages-info": "ఇంకా $1 {{PLURAL:$1|భాష|భాషలు}}",
+ "translate-search-more-groups-info": "మరో {{PLURAL:$1|సమూహం|$1 సమూహాలు}}"
+}
diff --git a/Translate/i18n/core/tet.json b/Translate/i18n/core/tet.json
new file mode 100644
index 00000000..65988afd
--- /dev/null
+++ b/Translate/i18n/core/tet.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "MF-Warburg"
+ ]
+ },
+ "translate": "Tradús",
+ "translate-page-settings-legend": "Preferénsia",
+ "translate-page-group": "Grupu",
+ "translate-page-language": "Lian",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|mensajen|mensajen}} iha pájina ida",
+ "translate-submit": "Hola",
+ "translate-page-showing-all": "Dalan $1 {{PLURAL:$1|mensajen|mensajen}}.",
+ "translate-next": "Pájina oinmai",
+ "translate-prev": "Pájina molok",
+ "translate-page-description-legend": "Informasaun kona-ba grupu",
+ "translate-page-edit": "edita",
+ "translate-edit-title": "Edita \"$1\"",
+ "translate-stats-edits": "Edisaun sira",
+ "translate-language": "Lian",
+ "translate-searchprofile": "Tradusaun sira"
+}
diff --git a/Translate/i18n/core/tg-cyrl.json b/Translate/i18n/core/tg-cyrl.json
new file mode 100644
index 00000000..bc4e3bec
--- /dev/null
+++ b/Translate/i18n/core/tg-cyrl.json
@@ -0,0 +1,166 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ibrahim",
+ "ToJack",
+ "Vashgird"
+ ]
+ },
+ "translate": "Тарҷума",
+ "translate-desc": "[[Special:Translate|Саҳифаи вижа]] барои тарҷумаи МедиаВики ва бартар аз он",
+ "translate-taction-lstats": "Омори забон",
+ "translate-page-no-such-language": "Забони мушаххасшуда ғайримиҷоз аст.",
+ "translate-page-no-such-group": "Гурӯҳи мушаххасшуда ғайримиҷоз аст.",
+ "translate-page-settings-legend": "Танзимот",
+ "translate-page-group": "Гурӯҳ",
+ "translate-page-language": "Забон",
+ "translate-page-limit": "Ҳудуд",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|пайғом|пайғомҳо}} дар ҳар саҳифа",
+ "translate-submit": "Вокашидан",
+ "translate-page-navigation-legend": "Гаштан",
+ "translate-page-showing": "Намоиши пайғомҳои $3 аз $1 то $2.",
+ "translate-page-showing-all": "Намоиши $1 {{PLURAL:$1|пайғом|пайғомҳо}}.",
+ "translate-page-showing-none": "Пайғоме барои намоиши вуҷуд надорад.",
+ "translate-next": "Саҳифаи баъдӣ",
+ "translate-prev": "Саҳифаи қаблӣ",
+ "translate-page-description-legend": "Иттилоот дар бораи гурӯҳ",
+ "translate-optional": "(ихтиёрӣ)",
+ "translate-ignored": "(нодида гирифташуда)",
+ "translate-edit-definition": "Таърифи пайғом",
+ "translate-edit-contribute": "ҳиссагузорӣ",
+ "translate-edit-no-information": "''Ин пайғом дорои тавзеҳот нест.\nАгар шумо медонед ин пағом чигуна ё дар куҷо истифода мешавад, шумо метавонед бо изофа кардани тавзеҳот ба ин пайғом ба дигар тарҷумакунандагон кӯмак кунед.''",
+ "translate-edit-information": "Иттилоот дар мавриди ин пайғом ($1)",
+ "translate-edit-warnings": "Ҳушдор дар мавриди тарҷумаҳои нокомил",
+ "translate-checks-parameters": "Параметрҳои зерин истифода нашудаанд: <strong>$1</strong>",
+ "translationstats": "Омори тарҷумаҳо",
+ "translate-stats-edits": "Вироишот",
+ "translate-stats-users": "Мутарҷимон",
+ "translate-stats-registrations": "Сабтиномҳо",
+ "translate-stats-reviews": "Назарҳо",
+ "translate-stats-reviewers": "Назарнависон",
+ "translate-statsf-width": "Дароизии бар бо пиксел:",
+ "translate-statsf-start": "Санаи оғоз:",
+ "translate-statsf-scale-months": "Моҳҳо",
+ "translate-statsf-scale-weeks": "Ҳафтаҳо",
+ "translate-statsf-scale-days": "Рӯзҳо",
+ "translate-statsf-scale-hours": "Соатҳо",
+ "translate-statsf-count": "Тадбир:",
+ "translate-statsf-count-edits": "Шумораи вироишот",
+ "translate-statsf-count-users": "Мутарҷимони фаъол",
+ "translate-statsf-count-registrations": "Корбарони нав",
+ "translate-statsf-count-reviews": "Бозиниёти тарҷума",
+ "translate-statsf-count-reviewers": "Мурургарон",
+ "translate-statsf-language": "Рӯйхати рамзи забонҳо бо вергул:",
+ "translate-sidebar-alltrans": "Ба забонҳои дигар",
+ "translations": "Тамоми тарҷумаҳо",
+ "translate-translations-no-message": "\"$1\" паёми тарҷумавӣ нест",
+ "translate-translations-none": "Ӣарҷумае барои \"$1\" нест",
+ "translate-translations-count": "Ёфтани {{PLURAL:$1|$1 тарҷума}}.",
+ "translate-translations-fieldset-title": "Паём",
+ "translate-translations-messagename": "Ном:",
+ "translate-translations-project": "Лоиҳа:",
+ "translate-translations-history-short": "т",
+ "languagestats": "Омори забон",
+ "languagestats-summary": "Ин саҳифа омори тарҷумаро барои тамоми паёмҳои забон нишон медиҳад.",
+ "messagegroupstats-summary": "Ин саҳифа омори гурӯҳҳои паёмҳоро нишон медиҳад.",
+ "languagestats-stats-for": "Омори тарҷума барои $1 ($2).",
+ "languagestats-recenttranslations": "тарҷумаҳои тоза",
+ "translate-langstats-expand": "васеъ кардан",
+ "translate-langstats-collapse": "фурӯпош",
+ "translate-langstats-expandall": "васеъ намудани ҳама",
+ "translate-langstats-collapseall": "фурӯпошии ҳама",
+ "translate-language-code": "Рамзи забон",
+ "translate-language-code-field-name": "Рамзи забон:",
+ "translate-language": "Забон",
+ "translate-total": "Паёмҳо",
+ "translate-untranslated": "Тарҷуманашуда",
+ "translate-percentage-complete": "Такмил",
+ "translate-percentage-fuzzy": "Куҳнашуда",
+ "translate-percentage-proofread": "Тафтишшуда",
+ "translate-languagestats-overall": "Тамоми гурӯҳҳои паёмҳо якҷоя",
+ "translate-ls-submit": "Нишон додани омор",
+ "translate-ls-column-group": "Гурӯҳи паём",
+ "translate-mgs-pagename": "Омори гурӯҳи паём",
+ "translate-mgs-fieldset": "Нишон додани танзимоӣ",
+ "translate-mgs-group": "Гурӯҳи паём:",
+ "translate-mgs-nocomplete": "Забонҳое, ки тарҷума шудаанд нишон мадеҳ",
+ "translate-mgs-noempty": "Забонҳое, ки ягон тарҷумае надоранд нишон мадеҳ",
+ "translate-mgs-submit": "Нишон додани омор",
+ "translate-mgs-column-language": "Забон",
+ "translate-mgs-totals": "Тамоми $1 {{PLURAL:$1|забон|забонҳо}} якҷоя",
+ "supportedlanguages": "Забонҳои пуштибонишуда",
+ "supportedlanguages-recenttranslations": "тарҷумаҳои тоза",
+ "supportedlanguages-count": "Тамоми $1 {{PLURAL:$1|забон}}",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|вироиш|вироишот}} - охирон вироиш $3 {{PLURAL:$3|рӯз}} пеш",
+ "translate-jssti-add": "Ба рӯйхат илова намудпн",
+ "translate-gs-pos": "Тараф",
+ "translate-gs-code": "Рамз",
+ "translate-gs-continent": "Қитъа",
+ "translate-gs-speakers": "Гуяндаҳо",
+ "translate-gs-score": "Имтиёз",
+ "translate-gs-multiple": "Бисёр",
+ "translate-gs-total": "Умумӣ",
+ "translate-documentation-language": "ҳуҷатгузории паём",
+ "translate-searchprofile": "Тарҷумаҳо",
+ "translate-searchprofile-tooltip": "Дар тамоми тарҷумаҳо кофтан",
+ "translate-dynagroup-recent-label": "Тарҷумаҳои тоза",
+ "translate-dynagroup-additions-label": "Тоза иловашудаҳо",
+ "translate-msggroupselector-projects": "Гурӯҳи паём",
+ "translate-msggroupselector-search-placeholder": "Кофтани гурӯҳҳо",
+ "translate-msggroupselector-search-all": "Ҳама",
+ "translate-msggroupselector-search-recent": "Охирин",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|зергурӯҳ}}",
+ "tux-languageselector": "Тарҷума ба",
+ "tux-tab-all": "Ҳама",
+ "tux-tab-untranslated": "Тарҷуманашуда",
+ "tux-tab-outdated": "Куҳнашуда",
+ "tux-tab-translated": "Тарҷумашуда",
+ "tux-tab-unproofread": "Тафтишнашуда",
+ "tux-edit": "Вироиш",
+ "tux-status-optional": "Ихтиёрӣ",
+ "tux-status-fuzzy": "Куҳнашуда",
+ "tux-status-proofread": "Тафтишшуда",
+ "tux-status-translated": "Тарҷумашуда",
+ "tux-status-saving": "Дар ҳоли захиракунӣ...",
+ "tux-status-unsaved": "Захиранашуда",
+ "tux-save-unknown-error": "Як хатогии ношинос рух дод.",
+ "tux-editor-discard-changes-button-label": "Партофтани тағйирот",
+ "tux-editor-save-button-label": "Захираи тарҷума",
+ "tux-editor-skip-button-label": "Ба дигараш гузаштан",
+ "tux-editor-cancel-button-label": "Пӯшидан",
+ "tux-editor-confirm-button-label": "Тарҷумаро тасдиқ намоед",
+ "tux-editor-proofread-button-label": "Чун тафтишшуда интихоб намо",
+ "tux-editor-edit-desc": "Вироиши ҳуҷҷатҳо",
+ "tux-editor-add-desc": "Идоваи ҳуҷҷатҳо",
+ "tux-editor-in-other-languages": "Ба забонҳои дигар",
+ "tux-editor-need-more-help": "Кумаки зиёдтаре лозим доред?",
+ "tux-editor-ask-help": "Барои маълумоти зиёдтаре пурсидан",
+ "tux-notices-hide": "пинҳон намудан",
+ "tux-editor-clear-translated": "Пинҳон намудани тарҷумашудаҳо",
+ "tux-editor-proofreading-mode": "Тафтиш",
+ "tux-editor-translate-mode": "Рӯйхат",
+ "tux-editor-proofreading-hide-own-translations": "Тарҷумаҳои шуморо пинҳон намудан",
+ "tux-editor-proofreading-show-own-translations": "Нишон додани тарҷумаҳои шумо",
+ "tux-proofread-action-tooltip": "Чун тафтишшуда интихоб намо",
+ "tux-proofread-edit-label": "Вироиш",
+ "tux-editor-page-mode": "Саҳифа",
+ "tux-editor-outdated-notice": "Тарҷума бояд нав азнав тарҷумонида шавад.",
+ "tux-editor-outdated-notice-diff-link": "Намоиши тағйирот",
+ "tux-editor-doc-editor-placeholder": "Ҳуҷатгузории паём",
+ "tux-editor-doc-editor-save": "Захираи ҳуҷҷат",
+ "tux-editor-doc-editor-cancel": "Тамом кардан",
+ "tux-empty-list-translated-action": "Тарҷума намудан",
+ "tux-empty-no-messages-to-display": "Ягон паём нест барои нишон додан.",
+ "tux-empty-list-other-link": "Тамоми паёмҳоро нишон додан",
+ "tux-editor-close-tooltip": "Пӯшидан",
+ "tux-editor-expand-tooltip": "Густариш",
+ "tux-editor-collapse-tooltip": "Фурукаш",
+ "tux-editor-message-tools-show-editor": "Дар вики вироишгар нишон додан",
+ "tux-editor-message-tools-history": "Таърих",
+ "tux-editor-message-tools-delete": "Ҳазв",
+ "tux-editor-message-tools-translations": "Ҳамаи тарҷумаҳо",
+ "tux-editor-message-tools-linktothis": "Пайвандҳо ба ин паём",
+ "tux-editor-loading": "Бор шуда истодааст...",
+ "translate-search-more-languages-info": "$1 {{PLURAL:$1|забони|забонҳои}} бештар",
+ "specialpages-group-translation": "Тарҷума"
+}
diff --git a/Translate/i18n/core/tg-latn.json b/Translate/i18n/core/tg-latn.json
new file mode 100644
index 00000000..0331c148
--- /dev/null
+++ b/Translate/i18n/core/tg-latn.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "Liangent"
+ ]
+ },
+ "translate": "Tarçuma",
+ "translate-desc": "[[Special:Translate|Sahifai viƶa]] baroi tarçumai MediaViki va bartar az on",
+ "translate-page-no-such-language": "Zaboni muşaxxasşuda ƣajrimiçoz ast.",
+ "translate-page-no-such-group": "Gurūhi muşaxxasşuda ƣajrimiçoz ast.",
+ "translate-page-settings-legend": "Tanzimot",
+ "translate-page-group": "Gurūh",
+ "translate-page-language": "Zabon",
+ "translate-page-limit": "Hudud",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|pajƣom|pajƣomho}} dar har sahifa",
+ "translate-submit": "Vokaşidan",
+ "translate-page-navigation-legend": "Gaştan",
+ "translate-page-showing": "Namoişi pajƣomhoi $3 az $1 to $2.",
+ "translate-page-showing-all": "Namoişi $1 {{PLURAL:$1|pajƣom|pajƣomho}}.",
+ "translate-page-showing-none": "Pajƣome baroi namoişi vuçud nadorad.",
+ "translate-next": "Sahifai ba'dī",
+ "translate-prev": "Sahifai qablī",
+ "translate-page-description-legend": "Ittiloot dar borai gurūh",
+ "translate-optional": "(ixtijorī)",
+ "translate-ignored": "(nodida giriftaşuda)",
+ "translate-edit-definition": "Ta'rifi pajƣom",
+ "translate-edit-contribute": "hissaguzorī",
+ "translate-edit-no-information": "''In pajƣom doroi tavzehot nest.\nAgar şumo medoned in paƣom ciguna jo dar kuço istifoda meşavad, şumo metavoned bo izofa kardani tavzehot ba in pajƣom ba digar tarçumakunandagon kūmak kuned.''",
+ "translate-edit-warnings": "Huşdor dar mavridi tarçumahoi nokomil"
+}
diff --git a/Translate/i18n/core/th.json b/Translate/i18n/core/th.json
new file mode 100644
index 00000000..c9847287
--- /dev/null
+++ b/Translate/i18n/core/th.json
@@ -0,0 +1,356 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aefgh39622",
+ "Ans",
+ "Bebiezaza",
+ "Geonuch",
+ "Horus",
+ "Manop",
+ "Octahedron80",
+ "Passawuth",
+ "Patsagorn Y.",
+ "Woraponboonkerd"
+ ]
+ },
+ "translate": "แปล",
+ "translate-desc": "[[Special:Translate|หน้าพิเศษ]]สำหรับแปลมีเดียวิกิและอื่น ๆ",
+ "translate-taskui-export-to-file": "ส่งออกในรูปแบบดั้งเดิม",
+ "translate-taskui-export-as-po": "ส่งออกสำหรับการแปลแบบออฟไลน์",
+ "translate-taction-translate": "แปล",
+ "translate-taction-proofread": "ตรวจทาน",
+ "translate-taction-lstats": "สถิติภาษา",
+ "translate-taction-mstats": "สถิติกลุ่มข้อความ",
+ "translate-taction-export": "ส่งออก",
+ "translate-taction-disabled": "การกระทำนี้ถูกปิดใช้งานบนวิกินี้",
+ "translate-page-no-such-language": "ใส่รหัสภาษาไม่ถูกต้อง",
+ "translate-page-no-such-group": "ใส่ชื่อกลุ่มไม่ถูกต้อง",
+ "translate-page-disabled": "งานแปลภาษานี้ในกลุ่มนี้ได้ปิดใช้งาน\nเหตุผล:\n\n<em>$1</em>",
+ "translate-language-disabled": "การแปลเป็นภาษานี้ถูกปิดใช้งาน",
+ "translate-page-settings-legend": "การตั้งค่า",
+ "translate-page-group": "กลุ่ม",
+ "translate-page-language": "ภาษา",
+ "translate-page-limit": "ไม่เกิน",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|ข้อความ|ข้อความ}}ต่อหน้า",
+ "translate-submit": "ดึงข้อมูล",
+ "translate-page-navigation-legend": "แถบนำทาง",
+ "translate-page-showing": "แสดงตั้งแต่ข้อความที่ $1 ถึง $2 จากทั้งหมด $3 ข้อความ",
+ "translate-page-showing-all": "แสดงข้อความ $1 {{PLURAL:$1|ข้อความ}}",
+ "translate-page-showing-none": "ไม่มีข้อความแสดง",
+ "translate-next": "หน้าถัดไป",
+ "translate-prev": "หน้าก่อน",
+ "translate-page-description-legend": "ข้อมูลเกี่ยวกับกลุ่มข้อความ",
+ "translate-page-description-hasoptional": "กลุ่มข้อความนี้มีข้อความทางเลือก\nควรแปลข้อความทางเลือกก็ต่อเมื่อในภาษาของคุณมีกฎพิเศษ อย่างเช่น ไม่มีการใช้วรรค หรือการเขียนชื่อที่ถูกต้อง $1",
+ "translate-page-description-hasoptional-open": "แสดงข้อความทางเลือก",
+ "translate-page-edit": "แก้ไข",
+ "translate-optional": "(ทางเลือก)",
+ "translate-ignored": "(เพิกเฉย)",
+ "translate-edit-title": "แก้ไข \"$1\"",
+ "translate-edit-definition": "นิยามข้อความต้นฉบับ",
+ "translate-edit-contribute": "ช่วยเขียน",
+ "translate-edit-no-information": "<em>ข้อความนี้ไม่มีคำอธิบายการใช้งาน\nถ้าคุณทราบว่าข้อความนี้ใช้ตรงส่วนไหนหรือใช้อย่างไร คุณสามารถช่วยเพิ่มคำอธิบายการใช้งานของข้อความนี้ เพื่อเป็นประโยชน์แก่ผู้แปลคนอื่นได้</em>",
+ "translate-edit-information": "ข้อมูลเกี่ยวกับข้อความ ($1)",
+ "translate-edit-warnings": "คำเตือนเกี่ยวกับคำแปลที่ยังไม่สมบูรณ์หรือมีปัญหา",
+ "translate-edit-tmmatch-source": "ข้อความต้นทางการแปล: $1",
+ "translate-edit-tmmatch": "ตรงกัน $1%",
+ "translate-edit-nopermission": "คุณต้องมีสิทธิในการแปลเพื่อทำการแปลข้อความ",
+ "translate-edit-askpermission": "ขอรับสิทธิ",
+ "exporttranslations": "ส่งออกการแปล",
+ "translate-export-form-format": "รูปแบบ",
+ "translate-export-invalid-format": "โปรดระบุรูปแบบที่ถูกต้อง",
+ "translate-export-not-supported": "ไม่รองรับการส่งออกการแปล",
+ "translate-export-format-notsupported": "กลุ่มข้อความนี้ไม่รองรับรูปแบบการส่งออกที่ระบุ",
+ "translate-checks-parameters": "{{PLURAL:$2|ตัวแปร|ตัวแปร}}ต่อไปนี้ไม่ได้ถูกใช้งาน: <strong>$1</strong>",
+ "translate-checks-parameters-unknown": "ไม่รู้จัก{{PLURAL:$2|ตัวแปรต่อไปนี้|ตัวแปรต่อไปนี้}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "จับคู่{{PLURAL:$2|วงเล็บ|วงเล็บ}}ไม่ครบคู่:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|ลิงก์|ลิงก์ $2 ลิงก์}}ต่อไปนี้ทำให้เกิดปัญหา:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|ลิงก์|ลิงก์ $2 ลิงก์}}ต่อไปนี้ไม่มีอยู่:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "ข้อความต้นฉบับใช้ <nowiki>{{PLURAL:}}</nowiki> ในขณะที่คำแปลไม่ได้ใช้",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> ถูกให้มา {{PLURAL:$1|1 รูปแบบ|$1 รูปแบบ}} แต่{{PLURAL:$2|มีเพียง 1 รูปแบบ|มีเพียง $2 รูปแบบ}}เท่านั้นที่รองรับ (ยกเว้นรูปแบบ 0= และ 1=)",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> มีรูปแบบที่ซ้ำกันในตอนท้าย <nowiki>{{PLURAL:$1|sheep|sheep}}</nowiki> ควรเขียนเป็น <nowiki>{{PLURAL:$1|sheep}}</nowiki>",
+ "translate-checks-pagename": "namespace ไม่ตรงกับนิยาม (definition) ต้นฉบับ",
+ "translate-checks-format": "คำแปลนี้ไม่ตรงกับนิยามในต้นฉบับ (definition) หรือ มีไวยากรณ์ (syntax) ที่ไม่ถูกต้อง: $1",
+ "translate-checks-escape": "เครื่องหมายหลบ (escape) ต่อไปนี้ อาจจะเกิดจากความไม่ตั้งใจ: <strong>$1</strong>",
+ "translate-checks-parametersnotequal": "การนับตัวแปรคือ {{PLURAL:$1|$1}} ซึ่งควรจะเป็น {{PLURAL:$2|$2}}",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> ผิดรูปแบบ",
+ "translate-checks-fudforum-syntax": "ใช้ <nowiki>$1</nowiki> แทน <nowiki>$2</nowiki> ในโครงการนี้",
+ "translate-pref-editassistlang": "ภาษาช่วยเหลือ:",
+ "prefs-translate": "ตัวเลือกการแปล",
+ "translate-pref-editassistlang-help": "รายการโค้ดภาษาที่มีจุลภาคคั่นอยู่\nการแปลข้อความในภาษาเหล่านี้จะปรากฏระหว่างที่คุณแปล\nรายการภาษาเริ่มต้นขึ้นอยู่กับภาษาของคุณ",
+ "translate-pref-editassistlang-bad": "โค้ดภาษาไม่ถูกต้องในรายการ:\n<nowiki>$1</nowiki>",
+ "right-translate": "แก้ไขในส่วนที่ใช้สำหรับแปล",
+ "right-translate-manage": "จัดการกลุ่มข้อความ",
+ "action-translate-manage": "จัดการกลุ่มข้อความ",
+ "right-translate-import": "นำเข้าการแปลออฟไลน์",
+ "action-translate-import": "นำเข้าการแปลออฟไลน์",
+ "right-translate-messagereview": "ตรวจทานการแปล",
+ "action-translate-messagereview": "ตรวจทานการแปล",
+ "right-translate-groupreview": "เปลี่ยนสถานะลำดับงานของกลุ่มข้อความ",
+ "action-translate-groupreview": "เปลี่ยนสถานะลำดับงานของกลุ่มข้อความ",
+ "translate-rcfilters-translations": "การแปล",
+ "translate-rcfilters-translations-only-label": "การแปล",
+ "translate-rcfilters-translations-only-desc": "การเปลี่ยนแปลงที่เกิดขึ้นกับหน้าที่แปลแล้ว",
+ "translate-rcfilters-translations-filter-label": "ไม่ใช่การแปล",
+ "translate-rcfilters-translations-filter-desc": "การเปลี่ยนแปลงทั้งหมดที่ไม่ใช่การแปล",
+ "translate-rcfilters-translations-site-label": "ข้อความไซต์",
+ "translate-rcfilters-translations-site-desc": "การปรับแต่งข้อความไซต์ในเนมสเปซ MediaWiki",
+ "translate-rc-translation-filter": "กรองงานแปล:",
+ "translate-rc-translation-filter-no": "ไม่ทำอะไรทั้งสิ้น",
+ "translate-rc-translation-filter-only": "แสดงงานแปลเท่านั้น",
+ "translate-rc-translation-filter-filter": "กรองงานแปลออก",
+ "translate-rc-translation-filter-site": "การเปลี่ยนแปลงในส่วนอื่นของเว็บไซต์ที่ไม่ใช่งานแปล",
+ "translationstats": "สถิติการแปล",
+ "translate-stats-edits": "การแก้ไข",
+ "translate-stats-users": "ผู้แปล",
+ "translate-stats-registrations": "การลงทะเบียน",
+ "translate-stats-reviews": "การตรวจทาน",
+ "translate-stats-reviewers": "ผู้ตรวจทาน",
+ "translate-statsf-intro": "คุณสามารถสร้างสถิติอย่างง่ายได้โดยใช้แบบฟอร์มนี้\nค่าทั้งหมดมีขีดจำกัดทั้งบนและล่าง",
+ "translate-statsf-options": "ตัวปรับแต่งกราฟ",
+ "translate-statsf-width": "ความกว้างในหน่วยพิกเซล:",
+ "translate-statsf-height": "ความสูงในหน่วยพิกเซล:",
+ "translate-statsf-days": "ช่วงเวลานับเป็นวัน:",
+ "translate-statsf-start": "วันที่เริ่มต้น:",
+ "translate-statsf-scale": "ความละเอียด:",
+ "translate-statsf-scale-months": "เดือน",
+ "translate-statsf-scale-weeks": "สัปดาห์",
+ "translate-statsf-scale-days": "วัน",
+ "translate-statsf-scale-hours": "ชั่วโมง",
+ "translate-statsf-count": "ตัวแปร:",
+ "translate-statsf-count-edits": "จำนวนการแก้ไข",
+ "translate-statsf-count-users": "ผู้แปลที่ขยันขันแข็ง",
+ "translate-statsf-count-registrations": "ผู้ใช้ใหม่",
+ "translate-statsf-count-reviews": "การตรวจทานการแปล",
+ "translate-statsf-count-reviewers": "ผู้ตรวจทาน",
+ "translate-statsf-language": "รายการรหัสภาษา ใช้เครื่องหมายลูกน้ำ (comma) เป็นตัวคั่น:",
+ "translate-statsf-group": "รายการรหัสของกลุ่ม ใช้เครื่องหมายลูกน้ำ (comma) เป็นตัวคั่น:",
+ "translate-statsf-submit": "แสดงตัวอย่าง",
+ "translate-tag-page-desc": "คำแปลจากภาษา$3 ($4) ของหน้าวิกิ [[$2|$1]].",
+ "translate-tag-page-wikipage-desc": "[[$1|การแปลภาษา]]ของหน้าวิกิ[[$2]]จาก <bdi>$3</bdi> ($4) เป็น <bdi>$5</bdi> ($6)",
+ "translate-sidebar-alltrans": "ในภาษาอื่น ๆ",
+ "translations": "คำแปลทุกภาษา",
+ "translations-summary": "ใส่ชื่อของข้อความลงด้านล่างนี้ เพื่อแสดงคำแปลที่มีทั้งหมด",
+ "translate-translations-no-message": "\"$1\" เป็นข้อความที่ไม่สามารถแปลได้",
+ "translate-translations-none": "ไม่มีคำแปลสำหรับ \"$1\"",
+ "translate-translations-count": "ค้นพบ $1 {{PLURAL:$1|การแปล|การแปล}}",
+ "translate-translations-fieldset-title": "ข้อความ",
+ "translate-translations-messagename": "ชื่อ:",
+ "translate-translations-project": "โครงการ:",
+ "translate-translations-including-no-param": "โปรดระบุคีย์ของข้อความในตัวแปรหน้าย่อย (subpage parameter) ให้ถูกต้อง",
+ "translate-translations-history-short": "ป",
+ "languagestats": "สถิติภาษา",
+ "languagestats-summary": "หน้านี้แสดงค่าสถิติการแปลของทุกกลุ่มข้อความในภาษาหนึ่งๆ",
+ "messagegroupstats-summary": "หน้านี้แสดงสถิติกลุ่มข้อความ",
+ "languagestats-stats-for": "สถิติการแปลสำหรับภาษา$1 ($2)",
+ "languagestats-recenttranslations": "การแปลล่าสุด",
+ "translate-langstats-incomplete": "สถิติบางรายการบนหน้านี้ไม่สมบูรณ์ โปรดโหลดใหม่เพื่อรับสถิติเพิ่มเติม",
+ "translate-langstats-expand": "ขยาย",
+ "translate-langstats-collapse": "ยุบ",
+ "translate-langstats-expandall": "ขยายทั้งหมด",
+ "translate-langstats-collapseall": "ยุบทั้งหมด",
+ "translate-language-code": "รหัสภาษา",
+ "translate-language-code-field-name": "รหัสภาษา:",
+ "translate-suppress-complete": "ไม่แสดงกลุ่มของข้อความที่แปลเสร็จสมบูรณ์แล้ว",
+ "translate-ls-noempty": "ไม่แสดงกลุ่มของข้อความที่ยังไม่ได้แปล",
+ "translate-language": "ภาษา",
+ "translate-total": "ข้อความทั้งหมด",
+ "translate-untranslated": "ไม่ได้แปล",
+ "translate-percentage-complete": "เสร็จสมบูรณ์",
+ "translate-percentage-fuzzy": "ล้าสมัย",
+ "translate-percentage-proofread": "ตรวจทานแล้ว",
+ "translate-languagestats-overall": "กลุ่มข้อความทั้งหมด",
+ "translate-ls-submit": "แสดงสถิติ",
+ "translate-ls-column-group": "กลุ่มข้อความ",
+ "translate-mgs-pagename": "สถิติกลุ่มข้อความ",
+ "translate-mgs-fieldset": "การตั้งค่าการแสดงผล",
+ "translate-mgs-group": "กลุ่มข้อความ:",
+ "translate-mgs-nocomplete": "ไม่ต้องแสดงภาษาที่มีการแปลเสร็จสมบูรณ์",
+ "translate-mgs-noempty": "ไม่ต้องแสดงภาษาที่ยังไม่ได้มีการแปลใด ๆ",
+ "translate-mgs-submit": "แสดงสถิติ",
+ "translate-mgs-column-language": "ภาษา",
+ "translate-mgs-totals": "รวมทั้งหมด $1 {{PLURAL:$1|ภาษา}}",
+ "translate-mgs-invalid-group": "กลุ่ม $1 ที่ระบุไม่มีอยู่",
+ "translate-mgs-nothing": "ไม่มีอะไรที่จะแสดงสำหรับสถิติที่ร้องขอ",
+ "supportedlanguages": "ภาษาที่มีการใช้งาน",
+ "supportedlanguages-summary": "หน้านี้แสดงรายการภาษาทั้งหมดที่ {{SITENAME}} รองรับ\nพร้อมชื่อผู้แปลที่ีทำงานแปลภาษานั้นๆ\nโดยชื่อผู้แปลจะปรากฏเป็นขนาดใหญ่ ถ้าผู้แปลคนนั้นร่วมแปลมาก\nสีขีดเส้นใต้บ่งบอกว่าผู้แปลได้ทำงานที่้นี่ครั้งล่าสุดเมื่อใด",
+ "supportedlanguages-colorlegend": "คำอธิบายสี: แปลครั้งล่าสุดเมื่อ $1 วันที่ผ่านมา",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|ผู้แปล}}|ผู้แปล}}: คุณ $1",
+ "supportedlanguages-recenttranslations": "การแปลล่าสุด",
+ "supportedlanguages-count": "รวมทั้งหมด $1 {{PLURAL:$1|ภาษา}}",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|การแก้ไข}} - แก้ไขล่าสุดเมื่อ $3 {{PLURAL:$3|วัน}}ที่ผ่านมา",
+ "abusefilter-edit-builder-vars-translate-source-text": "ข้อความต้นทางของหน่วยการแปล",
+ "translate-jssti-add": "เพิ่มลงในรายชื่อ",
+ "managemessagegroups": "การจัดการกลุ่มภาษา",
+ "translate-smg-notallowed": "คุณไม่ได้รับอนุญาตให้ดำเนินการนี้",
+ "translate-smg-nochanges": "ไม่มีการเปลี่ยนแปลงที่จะประมวลผล",
+ "translate-smg-submit": "ส่งการเปลี่ยนแปลงเพื่อประมวลผล",
+ "translate-smg-submitted": "นิยามข้อความได้ถูกปรับปรุงแล้ว การเปลี่ยนแปลงกำลังถูกประมวลผลในเบื้องหลัง",
+ "translate-smg-more": "จะมีการเปลี่ยนแปลงที่จะประมวลผลเพิ่มเติมหลังจากที่ส่งการเปลี่ยนแปลงเหล่านี้แล้ว",
+ "translate-smg-left": "เนื้อหาข้อความในวิกิ",
+ "translate-smg-right": "การเปลี่ยนแปลงที่ใกล้จะมาถึง",
+ "translate-smg-rename-select": "เลือก",
+ "translate-smg-rename-cancel": "ยกเลิก",
+ "translate-smg-group-message-action-history": "ประวัติ",
+ "translate-smg-group-message-tag-outdated": "ล้าสมัย",
+ "translate-smg-group-message-tag-rename": "เปลี่ยนชื่อ",
+ "translate-smg-group-message-message-content": "เนื้อหา:",
+ "translate-smg-group-message-message-other-langs": "ภาษาอื่น ๆ:",
+ "translate-manage-import-diff": "ข้อความ $1 | การกระทำ: $2",
+ "translate-manage-import-new": "ข้อความใหม่ $1",
+ "translate-manage-import-deleted": "ข้อความที่ลบแล้ว $1",
+ "translate-manage-action-import": "นำเข้า",
+ "translate-manage-action-conflict": "นำเข้าและทำเครื่องหมายว่าคลุมเครือ",
+ "translate-manage-action-ignore": "ละเว้น",
+ "translate-manage-action-fuzzy": "นำเข้าและทำเครื่องหมายว่าการแปลคลุมเครือ",
+ "translate-manage-action-rename": "เปลี่ยนชื่อ",
+ "translate-manage-nochanges": "ไม่มีการเปลี่ยนแปลงในนิยามข้อความสำหรับกลุ่มนี้",
+ "translate-manage-nochanges-other": "ไม่มีการเปลี่ยนแปลงใดๆ สำหรับภาษานี้\nใช้ลิงก์ด้านล่างเพื่อกลับไปใช้มุมมองรายละเอียดกลุ่ม",
+ "translate-manage-inconsistent": "ลบความไม่สม่ำเสมอในคำขอแล้ว\nโปรดตรวจสอบการเปลี่ยนแปลงแล้วลองอีกครั้ง\nรายละเอียด: $1",
+ "translate-manage-toolong": "หมดเวลาการประมวลผลสูงสุด $1 {{PLURAL:$1|วินาที}}แล้ว\nโปรดส่งแบบฟอร์มใหม่เพื่อดำเนินการประมวลผลต่อไป",
+ "translate-manage-import-summary": "กำลังนำเข้ารุ่นใหม่จากแหล่งข้อมูลภายนอก",
+ "translate-manage-conflict-summary": "กำลังนำเข้ารุ่นใหม่จากแหล่งข้อมูลภายนอก\nโปรดตรวจสอบ",
+ "translate-manage-submit": "ดำเนินการ",
+ "translate-manage-intro-other": "ด้านล่างนี้คือรายการความเปลี่ยนแปลงของงานแปลทั้งหมดในภาษา $1\nกรุณาตรวจสอบความเปลี่ยนแปลงและเลือกสิ่งที่ต้องการจะทำต่อไปในงานแปลแต่ละอัน\nถ้าคุณเลือกที่จะไม่สนใจการเปลี่ยนแปลงนี้ มันจะถูกลบล้างในการส่งออกครั้งต่อไป",
+ "translate-manage-import-ok": "นำเข้าแล้ว: $1",
+ "translate-manage-import-done": "การนำเข้าเสร็จสมบูรณ์!",
+ "importtranslations": "นำเข้างานแปล",
+ "translate-import-from-local": "อัปโหลดไฟล์:",
+ "translate-import-load": "โหลดไฟล์",
+ "translate-import-err-dl-failed": "ไม่สามารถดีงไฟล์นี้ได้:\n<br />$1",
+ "translate-import-err-ul-failed": "การอัปโหลดไฟล์ล้มเหลว",
+ "translate-import-err-invalid-title": "ชื่อของไฟล์ที่กำหนดมา: <nowiki>$1</nowiki> ไม่ถูกต้อง",
+ "translate-import-err-no-such-file": "ไม่ปรากฎไฟล์ <nowiki>$1</nowiki> หรือไฟล์นี้ไม่ได้ถูกอัพโหลดเข้ามา",
+ "translate-import-err-stale-group": "ไฟล์ที่เป็นสมาชิกของกลุ่มข้อความนี้ไม่มีอยู่",
+ "translate-import-err-no-headers": "ไฟล์นี้ไม่ใช่ไฟล์ Gettext ในส่วนเพิ่มเติมการแปลภาษาที่ดี:\n<br />ไม่สามารถกำหนดกลุ่มและภาษาจากส่วนต้นของไฟล์ได้",
+ "translate-js-support-unsaved-warning": "คุณมีการแปลที่ยังไม่ได้เผยแพร่",
+ "translate-gs-pos": "ตำแหน่ง",
+ "translate-gs-code": "รหัส",
+ "translate-gs-continent": "ทวีป",
+ "translate-gs-speakers": "จำนวนผู้ใช้",
+ "translate-gs-score": "คะแนน",
+ "translate-gs-multiple": "หลายทวีป",
+ "translate-gs-count": "จำนวน",
+ "translate-gs-total": "รวม",
+ "translate-gs-avgscore": "คะแนนเฉลี่ย",
+ "translate-documentation-language": "เอกสารกำกับสาร",
+ "translate-searchprofile": "การแปล",
+ "translate-searchprofile-tooltip": "ค้นหาจากการแปลทั้งหมด",
+ "translate-searchprofile-note": "ตัวเลือกการค้นหาเพิ่มเติมสามารถใช้ได้ด้วย[$1 การค้นหาการแปล]",
+ "translate-search-languagefilter": "ตัวกรองตามภาษา:",
+ "translate-search-nofilter": "ไม่มีการกรอง",
+ "log-name-translationreview": "บันทึกการตรวจทานการแปล",
+ "log-description-translationreview": "บันทึกการตรวจทานการแปลและกลุ่มข้อความทั้งหมด",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|ตรวจทาน}}การแปล $3 แล้ว",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|เปลี่ยน}}สถานะการแปลภาษา$4ของหน้า $3 จาก $6 เป็น $7",
+ "group-translate-sandboxed": "ผู้แปลที่ยังไม่ได้อนุมัติ",
+ "group-translate-sandboxed-member": "{{GENDER:$1|ผู้แปลที่ยังไม่ได้อนุมัติ}}",
+ "right-translate-sandboxmanage": "จัดการผู้ใช้แบบแซนด์บอกซ์",
+ "action-translate-sandboxmanage": "จัดการผู้ใช้แบบแซนด์บอกซ์",
+ "right-translate-sandboxaction": "ดำเนินการการกระทำที่อนุญาตสำหรับผู้ใช้แบบแซนด์บอกซ์",
+ "action-translate-sandboxaction": "ดำเนินการการกระทำที่อนุญาตสำหรับผู้ใช้แบบแซนด์บอกซ์",
+ "translate-workflow-state-": "(ไม่ได้ตั้งค่า)",
+ "translate-workflowstatus": "สถานะ: $1",
+ "translate-workflow-set-doing": "กำลังตั้งค่า...",
+ "translate-workflow-autocreated-summary": "การสร้างหน้าอัตโนมัติสำหรับสถานะลำดับงาน $1",
+ "translate-stats-workflow": "สถานะ",
+ "translate-workflowgroup-label": "สถานะลำดับงาน",
+ "translate-workflowgroup-desc": "กลุ่มข้อความนี้แสดงสถานะลำดับงานการแปล\nสถานะต่างๆ จะถูกกำหนดในตัวแปรการกำหนดค่า $wgTranslateWorkflowStates",
+ "translate-dynagroup-recent-label": "การแปลล่าสุด",
+ "translate-dynagroup-recent-desc": "กลุ่มข้อความนี้แสดงการแปลล่าสุดทั้งหมดเป็นภาษานี้\nมีประโยชน์ที่สุดสำหรับงานตรวจทาน",
+ "translate-dynagroup-additions-label": "การเพิ่มเติมล่าสุด",
+ "translate-dynagroup-additions-desc": "กลุ่มข้อความนี้แสดงข้อความใหม่และข้อความที่มีการเปลี่ยนแปลง",
+ "translate-msggroupselector-projects": "กลุ่มข้อความ",
+ "translate-msggroupselector-search-placeholder": "ค้นหากลุ่ม",
+ "translate-msggroupselector-search-all": "ทั้งหมด",
+ "translate-msggroupselector-search-recent": "ล่าสุด",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|กลุ่มย่อย}}",
+ "tux-languageselector": "แปลเป็น",
+ "tux-tab-all": "ทั้งหมด",
+ "tux-tab-untranslated": "ยังไม่ได้แปล",
+ "tux-tab-outdated": "ล้าสมัย",
+ "tux-tab-translated": "แปลแล้ว",
+ "tux-tab-unproofread": "ยังไม่ได้ตรวจทาน",
+ "tux-edit": "แก้ไข",
+ "tux-status-optional": "ทางเลือก",
+ "tux-status-fuzzy": "ล้าสมัย",
+ "tux-status-proofread": "ตรวจทานแล้ว",
+ "tux-status-translated": "แปลแล้ว",
+ "tux-status-saving": "กำลังบันทึก...",
+ "tux-status-unsaved": "ยังไม่บันทึก",
+ "tux-save-unknown-error": "เกิดข้อผิดพลาดที่ไม่รู้จัก",
+ "tux-editor-editsummary-placeholder": "สรุปทางเลือก",
+ "tux-editor-paste-original-button-label": "วางข้อความต้นฉบับ",
+ "tux-editor-discard-changes-button-label": "ละทิ้งการเปลี่ยนแปลง",
+ "tux-editor-save-button-label": "บันทึกการแปล",
+ "tux-editor-skip-button-label": "ข้ามไปข้อความถัดไป",
+ "tux-editor-cancel-button-label": "ยกเลิก",
+ "tux-editor-confirm-button-label": "ยืนยันการแปล",
+ "tux-editor-proofread-button-label": "ทำเครื่องหมายว่าตรวจทานแล้ว",
+ "tux-editor-shortcut-info": "กด \"$1\" เพื่อบันทึก หรือ \"$2\" เพื่อข้ามไปยังข้อความถัดไป หรือ \"$4\" เพื่อเขียนข้อความสรุป หรือ \"$3\" สำหรับทางลัดอื่น ๆ",
+ "tux-editor-edit-desc": "แก้ไขคำอธิบายการใช้งาน",
+ "tux-editor-add-desc": "เพิ่มคำอธิบายการใช้งาน",
+ "tux-editor-suggestions-title": "คำแนะนำ",
+ "tux-editor-in-other-languages": "ในภาษาอื่น ๆ",
+ "tux-editor-need-more-help": "ต้องการความช่วยเหลือเพิ่มเติมหรือไม่",
+ "tux-editor-ask-help": "ถามเพื่อดูข้อมูลเพิ่มเติม",
+ "tux-editor-tm-match": "ตรงกัน $1%",
+ "tux-notices-more": "{{PLURAL:$1|เพิ่มเติม $1 รายการ}}",
+ "tux-notices-hide": "ซ่อน",
+ "tux-editor-save-failed": "การบันทึกการแปลล้มเหลว: $1",
+ "tux-editor-n-uses": "ใช้แล้ว $1 {{PLURAL:$1|ครั้ง|ครั้ง}}",
+ "tux-editor-message-desc-more": "ดูเพิ่มขึ้น",
+ "tux-editor-message-desc-less": "ดูน้อยลง",
+ "tux-editor-clear-translated": "ซ่อนที่แปลแล้ว",
+ "tux-editor-proofreading-mode": "ตรวจทาน",
+ "tux-editor-translate-mode": "รายชื่อ",
+ "tux-editor-proofreading-hide-own-translations": "ซ่อนการแปลของคุณ",
+ "tux-editor-proofreading-show-own-translations": "แสดงการแปลของคุณ",
+ "tux-proofread-action-tooltip": "ทำเครื่องหมายว่าตรวจทานแล้ว",
+ "tux-proofread-edit-label": "แก้ไข",
+ "tux-editor-page-mode": "หน้า",
+ "tux-editor-outdated-notice": "การแปลนี้อาจจำเป็นต้องมีการปรับปรุง",
+ "tux-editor-outdated-notice-diff-link": "แสดงความแตกต่าง",
+ "tux-editor-doc-editor-placeholder": "คำอธิบายการใช้งานข้อความ",
+ "tux-editor-doc-editor-save": "บันทึกคำอธิบายการใช้งาน",
+ "tux-editor-doc-editor-cancel": "ยกเลิก",
+ "tux-messagetable-more-messages": "{{PLURAL:$1|ข้อความ|ข้อความ}}เพิ่มเติม $1 รายการ",
+ "tux-messagetable-loading-messages": "กำลังโหลด{{PLURAL:$1|ข้อความ|ข้อความ}}...",
+ "tux-message-filter-placeholder": "กรองรายการ",
+ "tux-message-filter-result": "ค้นพบ $1 {{PLURAL:$1|ผลลัพธ์|ผลลัพธ์}}สำหรับ \"$2\"",
+ "tux-message-filter-advanced-button": "การค้นหาขั้นสูง",
+ "tux-message-filter-optional-messages-label": "ข้อความทางเลือก",
+ "tux-proofread-translated-by-self": "แปลแล้วโดยคุณ",
+ "tux-empty-list-all": "กลุ่มข้อความนี้ว่างเปล่า",
+ "tux-empty-list-all-guide": "เลือกกลุ่มข้อความอื่นเพื่อแปล",
+ "tux-translate-page-no-such-group": "<strong>ไม่มีกลุ่มที่ระบุไว้</strong> โปรดเลือกกลุ่มข้อความอื่น",
+ "tux-empty-list-translated": "ไม่มีข้อความที่แปลแล้ว",
+ "tux-empty-list-translated-guide": "คุณสามารถช่วยแปลได้",
+ "tux-empty-list-translated-action": "แปล",
+ "tux-empty-no-messages-to-display": "ไม่มีข้อความที่จะแสดง",
+ "tux-empty-there-are-optional": "มีข้อความทางเลือกที่ไม่ปรากฏอยู่ในรายการนี้",
+ "tux-empty-show-optional-messages": "แสดงข้อความทางเลือก",
+ "tux-empty-no-outdated-messages": "ไม่มีข้อความที่ล้าสมัย",
+ "tux-empty-nothing-to-proofread": "ไม่มีข้อความให้ตรวจทาน",
+ "tux-empty-you-can-help-providing": "คุณสามารถช่วยเขียนการแปลใหม่ได้",
+ "tux-empty-nothing-new-to-proofread": "ไม่มีข้อความใหม่ให้ตรวจทาน",
+ "tux-empty-you-can-review-already-proofread": "คุณสามารถตรวจทานการแปลที่ถูกตรวจทานไปแล้วโดยคนอื่นๆ ได้",
+ "tux-empty-list-other": "ไม่มีข้อความให้แปล",
+ "tux-empty-list-other-guide": "คุณสามารถช่วยตรวจทานการแปลที่มีอยู่ได้",
+ "tux-empty-list-other-action": "ตรวจทานการแปล",
+ "tux-empty-list-other-link": "แสดงข้อความทั้งหมด",
+ "tux-editor-close-tooltip": "ปิด",
+ "tux-editor-expand-tooltip": "ขยาย",
+ "tux-editor-collapse-tooltip": "ยุบ",
+ "tux-editor-message-tools-show-editor": "แสดงในตัวแก้ไขวิกิ",
+ "tux-editor-message-tools-history": "ประวัติ",
+ "tux-editor-message-tools-delete": "ลบ",
+ "tux-editor-message-tools-translations": "คำแปลทุกภาษา",
+ "tux-editor-loading": "กำลังโหลด...",
+ "translate-search-more-languages-info": "{{PLURAL:$1|ภาษา}}เพิ่มเติม $1 ภาษา",
+ "translate-statsbar-tooltip": "แปลแล้ว $1%, ตรวจทานแล้ว $2%",
+ "translate-statsbar-tooltip-with-fuzzy": "แปลแล้ว $1%, ตรวจทานแล้ว $2%, ล้าสมัย $3%",
+ "translate-search-more-groups-info": "$1 {{PLURAL:$1|กลุ่ม}}เพิ่มเติม",
+ "translate-syntax-error": "การแปลมีข้อผิดพลาดไวยากรณ์",
+ "tux-nojs": "เครื่องมือนี้ไม่สามารถทำงานได้โดยไม่มี JavaScript JavaScript อาจถูกปิดใช้งาน ไม่สามารถทำงานได้ หรือเบราว์เซอร์นี้ไม่รองรับ",
+ "specialpages-group-translation": "การแปล"
+}
diff --git a/Translate/i18n/core/ti.json b/Translate/i18n/core/ti.json
new file mode 100644
index 00000000..51f52802
--- /dev/null
+++ b/Translate/i18n/core/ti.json
@@ -0,0 +1,186 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joanmp17"
+ ]
+ },
+ "translate": "ተርጉም",
+ "translate-extensionname": "ተርጉም",
+ "translate-taction-translate": "ተርጉም",
+ "translate-taction-proofread": "ገምግም",
+ "translate-taction-lstats": "ስታቲስቲክስ ቋንቋ",
+ "translate-taction-mstats": "ስታቲስቲክስ ጉጅለ መልእኽትታት",
+ "translate-taction-export": "ስደድ",
+ "translate-taction-disabled": "እዚ ተግባር ኣብዚ ዊኪ ተሰናኺሉ ኣሎ።",
+ "translate-page-settings-legend": "ምምዕርራያት",
+ "translate-page-group": "ጉጅለ",
+ "translate-page-language": "ቋንቋ",
+ "translate-page-limit": "ወሰን",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|መልእኽቲ|መልእኽትታት}} ኣብ ገጽ",
+ "translate-submit": "ኣምጽእ",
+ "translate-page-navigation-legend": "ዳህሳስ",
+ "translate-page-showing-all": "$1 {{PLURAL:$1|መልእኽቲ|መልእኽትታት}} የርእይ ኣሎ።",
+ "translate-next": "ዝቕጽል ገጽ",
+ "translate-prev": "ዝቐደመ ገጽ",
+ "translate-page-description-legend": "ሓበሬታ ብዛዕባ ጉጅለ",
+ "translate-page-edit": "ኣመዓራርይ",
+ "translate-optional": "(ኣማራጽያዊ)",
+ "translate-ignored": "(ዕሽሽ ተባሂሉ)",
+ "translate-edit-title": "«$1» ኣመዓራርይ",
+ "translate-edit-definition": "መብርሂ መልእኽቲ",
+ "translate-edit-contribute": "ኣበርክት",
+ "translate-edit-information": "ሓበሬታ ብዛዕባ መልእኽቲ ($1)",
+ "translate-edit-tmmatch": "$1% ይመሳሰል",
+ "translate-edit-nopermission": "መልእኽትታት ንምትርጓም ናይ ፍቓዳት ትርጉም የድልየካ።",
+ "translate-edit-askpermission": "ፍቓድ ርኸብ",
+ "exporttranslations": "ትርጉማት ስደድ",
+ "translate-export-form-format": "ቅርጺ",
+ "translate-checks-parameters": "{{PLURAL:$2|እዚ ዝስዕብ መለክዒ ይጎድል|እዞም ዝስዕቡ መለክዒታት ይጎድሉ}}፦\n<strong>$1</strong>",
+ "prefs-translate": "ኣማራጽታት ትርጉም",
+ "right-translate-messagereview": "ትርጉማት ገምግም",
+ "action-translate-messagereview": "ትርጉማት ክትግምግም",
+ "translate-rcfilters-translations": "ትርጉማት",
+ "translate-rcfilters-translations-only-label": "ትርጉማት",
+ "translate-rcfilters-translations-only-desc": "ናብ ዝተተርጎመ ገጻት ለውጥታት።",
+ "translate-rcfilters-translations-filter-desc": "ኩሎም ትርጉማት ዘይኮኑ ለውጥታት።",
+ "translate-rc-translation-filter": "ትርጉማት ኣጻርይ፦",
+ "translate-rc-translation-filter-no": "ዋላ ሓንቲ ኣይትግበር",
+ "translate-stats-edits": "ኣርትዖታት",
+ "translate-stats-users": "ተርጎምቲ",
+ "translate-stats-registrations": "ምዝገባታት",
+ "translate-stats-reviews": "ገምጋማት",
+ "translate-stats-reviewers": "ገምገምቲ",
+ "translate-statsf-scale-years": "ዓመታት",
+ "translate-statsf-scale-months": "ኣዋርሕ",
+ "translate-statsf-scale-weeks": "ሰሙናት",
+ "translate-statsf-scale-days": "መዓልታት",
+ "translate-statsf-scale-hours": "ሰዓታት",
+ "translate-statsf-count": "መለክዒ፦",
+ "translate-statsf-count-edits": "ብዝሒ ኣርትዖታት",
+ "translate-statsf-count-registrations": "ሓደሽቲ ተጠቀምቲ",
+ "translate-statsf-count-reviews": "ገምጋማት ትርጉም",
+ "translate-statsf-count-reviewers": "ገምገምቲ",
+ "translate-statsf-submit": "ቅድመ ትርኢት",
+ "translate-statsf-unknown-error": "ዘይተፈልጠ ጌጋ ኣጋጢሙ ኣሎ።",
+ "translate-sidebar-alltrans": "ብካልኦት ቋንቋታት",
+ "translations": "ኩሎም ትርጉማት",
+ "translate-translations-no-message": "«$1» ዝትርጎም መልእኽቲ ኣይኮነን",
+ "translate-translations-count": "{{PLURAL:$1|ሓደ ትርጉም ተረኺቡ|$1 ትርጉማት ተረኺቦም}}።",
+ "translate-translations-fieldset-title": "መልእኽቲ",
+ "translate-translations-messagename": "ስም፦",
+ "translate-translations-project": "ፕሮጀክት፦",
+ "translate-translations-history-short": "ታ",
+ "languagestats": "ስታቲስቲክስ ቋንቋ",
+ "languagestats-recenttranslations": "ናይ ቀረባ ግዜ ትርጉማት",
+ "translate-langstats-expand": "ዘርግሕ",
+ "translate-langstats-collapse": "ኣክብ",
+ "translate-langstats-expandall": "ኩሉ ዘርግሕ",
+ "translate-langstats-collapseall": "ኩሉ ኣክብ",
+ "translate-language-code": "ኮድ ቋንቋ",
+ "translate-language-code-field-name": "ኮድ ቋንቋ፦",
+ "translate-language": "ቋንቋ",
+ "translate-total": "መልእኽትታት",
+ "translate-untranslated": "ዘይተተርጎሙ",
+ "translate-percentage-complete": "ተዛዚሙ",
+ "translate-percentage-fuzzy": "ግዜኡ ዝሓለፎ",
+ "translate-percentage-proofread": "ተገምጊሙ",
+ "translate-ls-submit": "ስታቲስቲክስ ኣርእይ",
+ "translate-ls-column-group": "ጉጅለ መልእኽቲ",
+ "translate-mgs-group": "ጉጅለ መልእኽትታት፦",
+ "translate-mgs-submit": "ስታቲስቲክስ ኣርእይ",
+ "translate-mgs-column-language": "ቋንቋ",
+ "supportedlanguages": "ንጡፋት ቋንቋታት",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|ተርጓሚ|ተርጓሚት}}|ተርጎምቲ}}፦ $1",
+ "supportedlanguages-recenttranslations": "ናይ ቀረባ ግዜ ትርጉማት",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|ቋንቋ|ቋንቋታት}} ብጠቕላላ።",
+ "translate-jssti-add": "ናብ ዝርዝር ወስኽ",
+ "translate-smg-rename-select": "ምረጽ",
+ "translate-smg-rename-cancel": "ኣትርፍ",
+ "translate-smg-rename-new": "ከም ሓድሽ ወስኽ...",
+ "translate-smg-strong-sync-help": "ሓገዝ",
+ "translate-smg-group-message-action-history": "ታሪኽ",
+ "translate-smg-group-message-message-content": "ትሕዝቶ፦",
+ "translate-smg-group-message-message-other-langs": "ካልኦት ቋንቋታት፦",
+ "translate-smg-loading": "ይጽዕን ኣሎ...",
+ "translate-manage-import-diff": "መልእኽቲ $1 | ተግባራት፦ $2",
+ "translate-manage-import-new": "ሓድሽ መልእኽቲ $1",
+ "translate-manage-action-rename": "ዳግም ሰይም",
+ "importtranslations": "ትርጉማት ኣምጽእ",
+ "translate-gs-code": "ኮድ",
+ "translate-gs-speakers": "ተዛረብቲ",
+ "translate-gs-total": "ጠቕላላ",
+ "translate-documentation-language": "ሰነድ መልእኽቲ",
+ "translate-searchprofile": "ትርጉማት",
+ "translate-search-languagefilter": "ብቋንቋ ኣጻርይ፦",
+ "translate-msggroupselector-projects": "ጉጅለ መልእኽትታት",
+ "translate-msggroupselector-search-placeholder": "ጉጅለታት ድለይ",
+ "translate-msggroupselector-search-all": "ኩሎም",
+ "translate-msggroupselector-search-recent": "ናይ ቀረባ ግዜ",
+ "tux-languageselector": "ተርጉም ናብ",
+ "tux-tab-all": "ኩሎም",
+ "tux-tab-untranslated": "ዘይተተርጎሙ",
+ "tux-tab-translated": "ተተርጒሙ",
+ "tux-edit": "ኣመዓራርይ",
+ "tux-status-optional": "ኣማራጽያዊ",
+ "tux-status-proofread": "ተገምጊሙ",
+ "tux-status-translated": "ተተርጒሙ",
+ "tux-status-saving": "የሕትም ኣሎ...",
+ "tux-status-unsaved": "ዘይተሓትመ",
+ "tux-editor-placeholder-language": "ትርጉምካ ብ$1",
+ "tux-editor-editsummary-placeholder": "ኣማራጽያዊ መጠቓለሊ",
+ "tux-editor-paste-original-button-label": "ምንጪ ጽሑፍ ለጥፍ",
+ "tux-editor-discard-changes-button-label": "ለውጥታት ኣወግድ",
+ "tux-editor-save-button-label": "ትርጉም ኣሕትም",
+ "tux-editor-skip-button-label": "ናብ ዝቕጽል ኪድ",
+ "tux-editor-cancel-button-label": "ኣትርፍ",
+ "tux-editor-confirm-button-label": "ትርጉም ኣረጋግጽ",
+ "tux-editor-proofread-button-label": "ከም ዝተገምገመ ኣመልክት",
+ "tux-editor-add-desc": "ሰነድ ወስኽ",
+ "tux-editor-suggestions-title": "ምኽርታት",
+ "tux-editor-in-other-languages": "ብካልኦት ቋንቋታት",
+ "tux-editor-need-more-help": "ተወሳኺ ሓገዝ ትደሊ ዶ?",
+ "tux-editor-ask-help": "ንተወሳኺ ሓበሬታ ሕተት",
+ "tux-editor-tm-match": "$1% ይመሳሰል",
+ "tux-notices-more": "{{PLURAL:$1|$1 ተወሳኺ|$1 ተወሰኽቲ}}",
+ "tux-notices-hide": "ሕባእ",
+ "tux-editor-message-desc-more": "ተወሳኺ ርኣይ",
+ "tux-editor-message-desc-less": "ውሑድ ርኣይ",
+ "tux-editor-clear-translated": "ዝተተርጎሙ ሕባእ",
+ "tux-editor-proofreading-mode": "ገምግም",
+ "tux-editor-translate-mode": "ዝርዝር",
+ "tux-editor-proofreading-show-own-translations": "ትርጉማትካ ኣርእይ",
+ "tux-proofread-action-tooltip": "ከም ዝተገምገመ ኣመልክት",
+ "tux-proofread-edit-label": "ኣመዓራርይ",
+ "tux-editor-page-mode": "ገጽ",
+ "tux-editor-outdated-notice-diff-link": "ፍልልያት ኣርእይ",
+ "tux-editor-doc-editor-placeholder": "ሰነድ መልእኽቲ",
+ "tux-editor-doc-editor-save": "ሰነድ ኣሕትም",
+ "tux-editor-doc-editor-cancel": "ኣትርፍ",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|መልእኽቲ|መልእኽትታት}} ይጽዕን ኣሎ...",
+ "tux-message-filter-placeholder": "ዝርዝር ኣጻርይ",
+ "tux-message-filter-result": "ን«$2» {{PLURAL:$1|$1 ውጽኢት ተረኺቡ|$1 ውጺኢታት ተረኺቦም}}",
+ "tux-message-filter-advanced-button": "ዝማዕበለ ምድላይ",
+ "tux-message-filter-optional-messages-label": "ኣማራጽያዊ መልእኽትታት",
+ "tux-proofread-translated-by-self": "ብኣኻ ዝተተርጎመ",
+ "tux-empty-list-translated": "ዝተተርጎሙ መልእኽትታት የለዉን",
+ "tux-empty-list-translated-guide": "ኣብ ምትርጓም ክትሕግዝ ትኽእል ኢኻ",
+ "tux-empty-list-translated-action": "ተርጉም",
+ "tux-empty-nothing-to-proofread": "ዝግምገም ነገር የለን",
+ "tux-empty-nothing-new-to-proofread": "ሓድሽ ዝግምገም ነገር የለን",
+ "tux-empty-list-other": "ዝትርጎም ነገር የለን",
+ "tux-empty-list-other-action": "ትርጉማት ገምግም",
+ "tux-empty-list-other-link": "ኩሎም መልእኽትታት ኣርእይ",
+ "tux-editor-close-tooltip": "ዕጸው",
+ "tux-editor-expand-tooltip": "ዘርግሕ",
+ "tux-editor-collapse-tooltip": "ኣክብ",
+ "tux-editor-message-tools-show-editor": "ኣብ ኣርታዒ ዊኪ ኣርእይ",
+ "tux-editor-message-tools-history": "ታሪኽ",
+ "tux-editor-message-tools-delete": "ሰርዝ",
+ "tux-editor-message-tools-translations": "ኩሎም ትርጉማት",
+ "tux-editor-loading": "ይጽዕን ኣሎ...",
+ "tux-editor-loading-failed": "ናይ ትርጉም ሓገዛት ክጽዕኑ ኣይከኣሉን፦ $1",
+ "translate-search-more-languages-info": "{{PLURAL:$1|$1 ተወሳኺ|$1 ተወሰኽቲ}} {{PLURAL:$1|ቋንቋ|ቋንቋታት}}",
+ "translate-statsbar-tooltip": "$1% ተተርጒሙ፣ $2% ተገምጊሙ",
+ "translate-search-more-groups-info": "{{PLURAL:$1|$1 ተወሳኺ|$1 ተወሰኽቲ}} {{PLURAL:$1|ጉጅለ|ጉጅለታት}}",
+ "specialpages-group-translation": "ትርጉም"
+}
diff --git a/Translate/i18n/core/tk.json b/Translate/i18n/core/tk.json
new file mode 100644
index 00000000..47dcc62b
--- /dev/null
+++ b/Translate/i18n/core/tk.json
@@ -0,0 +1,202 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hanberke",
+ "Nazarisgoal",
+ "Runningfridgesrule",
+ "TayfunEt."
+ ]
+ },
+ "translate": "Terjime",
+ "translate-extensionname": "Terjime et",
+ "translate-desc": "MediaWikini we ýenekileri terjime etmek üçin [[Special:Translate|ýörite sahypa]]",
+ "translate-export-csv-message-title": "Terjime habarynyň ady",
+ "translate-export-csv-definition": "Habarlaşygyň kesgitlemesi",
+ "translate-taction-translate": "Terjime et",
+ "translate-taction-proofread": "Syn",
+ "translate-taction-lstats": "Dil statistikasy",
+ "translate-taction-mstats": "Habar toparynyň statistikasy",
+ "translate-taction-export": "Eksport",
+ "translate-taction-disabled": "Bu amal bu wikide ýapyk.",
+ "translate-page-no-such-language": "Görkezilen dil nädogry",
+ "translate-page-no-such-group": "Görkezilen topar nädogry",
+ "translate-language-disabled": "Bu dile terjime etmek ýapyk.",
+ "translate-page-settings-legend": "Sazlamalar",
+ "translate-page-group": "Topar",
+ "translate-page-language": "Dil",
+ "translate-page-limit": "Çäk",
+ "translate-page-limit-option": "Sahypa başyna $1 {{PLURAL:$1|habarlaşyk|habarlaşyk}}",
+ "translate-submit": "Getir",
+ "translate-page-navigation-legend": "Nawigasiýa",
+ "translate-page-showing": "$3 sany habarlaşykdan $1 - $2 aralygy görkezilýär.",
+ "translate-page-showing-all": "$1 {{PLURAL:$1|habarlaşyk|habarlaşyk}} görkezilýär.",
+ "translate-page-showing-none": "Görkezjek habar ýok.",
+ "translate-next": "Indiki sahypa",
+ "translate-prev": "Öňki sahypa",
+ "translate-page-description-legend": "Topar hakda maglumat",
+ "translate-page-description-hasoptional-open": "Goşmaça habarlary görkez.",
+ "translate-page-edit": "redaktirle",
+ "translate-optional": "(islege görä)",
+ "translate-ignored": "(ähmiýet berilmedi)",
+ "translate-edit-title": "\"$1\" redaktirläň",
+ "translate-edit-definition": "Habarlaşygyň kesgitlemesi",
+ "translate-edit-contribute": "goşant goş",
+ "translate-edit-no-information": "''Bu habarlaşygyň düşündirişi ýok.\nEger-de bu habarlaşygyň nirede we nähili ulanylýandygyny bilýän bolsaňyz, onda bu habarlaşyga düşündiriş ýazmak arkaly beýleki terjimeçilere kömek edip bilersiňiz.''",
+ "translate-edit-information": "\"$2\" habarlaşygy hakda maglumat ($1)",
+ "translate-edit-warnings": "Doly däl terjimeler barada duýduryş",
+ "translate-edit-tmmatch-source": "Terjime çeşmesiniň teksti: $1",
+ "translate-edit-tmmatch": "$1% gabat gelýär",
+ "translate-edit-nopermission": "Habarlary terjime etmek üçin terjime hukugy gerek.",
+ "translate-edit-askpermission": "Rugsat alyň",
+ "exporttranslations": "Terjimeleri eksport ediň",
+ "translate-export-form-format": "Format",
+ "translate-export-invalid-format": "Dogry formaty görkezmegiňizi haýyş edýäris.",
+ "translate-export-not-supported": "Terjime eksporty goldanylmaýar.",
+ "translate-export-format-notsupported": "Görkezilen eksport formaty habar topary tarapyndan goldanylmaýar.",
+ "translate-checks-pagename": "At giňişligi kesgitlemeden üýtgedi",
+ "translate-checks-format": "Bu terjime kesgitlemä eýermeýär ýa-da nädogry sintaksis bar: $1",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> nädogry.",
+ "translate-checks-replacement": "$1 ýerine $2 ulanyň.",
+ "translate-checks-empty": "Mazmuny bolmadyk ýa-da diňe giňişlikli terjime etmäge rugsat berilmeýär.",
+ "translate-pref-editassistlang": "Kömekçi diller:",
+ "prefs-translate": "Terjime opsiýalary",
+ "translate-pref-editassistlang-help": "Düşündirilen dil kodlarynyň sanawy.\nBu dillerdäki habaryň terjimesi terjime edilende görkezilýär.\nDilleriň deslapky sanawy diliňize baglydyr.",
+ "translate-pref-editassistlang-bad": "Sanawdaky nädogry dil kody:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Terjime interfeýsini ulanyp redaktirläň",
+ "action-translate": "terjime interfeýsini ulanyp redaktirläň",
+ "right-translate-manage": "Habar toparlaryny dolandyryň",
+ "action-translate-manage": "habar toparlaryny dolandyrmak",
+ "right-translate-messagereview": "Terjimeleri gözden geçiriň",
+ "action-translate-messagereview": "terjimeleri gözden geçiriň",
+ "right-translate-groupreview": "Habar toparlarynyň iş tertibini üýtgediň",
+ "action-translate-groupreview": "habar toparlarynyň iş tertibini üýtgetmek",
+ "translate-rcfilters-translations": "Terjimeler",
+ "translate-rcfilters-translations-only-label": "Terjimeler",
+ "translate-rcfilters-translations-only-desc": "Terjime edilen sahypalara üýtgeşmeler.",
+ "translate-rcfilters-translations-filter-label": "Terjime däl",
+ "translate-rcfilters-translations-filter-desc": "Terjime däl ähli üýtgeşmeler.",
+ "translate-rcfilters-translations-site-label": "Saýt habarlary",
+ "translate-rcfilters-translations-site-desc": "MediaWiki at giňişliginde sahypa habarlaryny özleşdirmek.",
+ "translate-rc-translation-filter": "Süzgüç terjimeleri:",
+ "translate-rc-translation-filter-no": "Hiç zat etme",
+ "translate-rc-translation-filter-only": "Diňe terjimeleri görkeziň",
+ "translate-rc-translation-filter-filter": "Terjimeleri süzüň",
+ "translate-rc-translation-filter-site": "Diňe sahypa habarlaryna üýtgeşmeler",
+ "translationstats": "Terjime statistikasy",
+ "translate-stats-edits": "Düzetmeler",
+ "translate-stats-users": "Terjimeçiler",
+ "translate-stats-registrations": "Hasaba alyş",
+ "translate-stats-reviews": "Barlaglar",
+ "translate-stats-reviewers": "Gözden geçirijiler",
+ "translate-statsf-intro": "Bu görnüş bilen ýönekeý statistika döredip bilersiňiz.\nÄhli bahalaryň ýokary we aşaky çäkleri bar.",
+ "translate-statsf-options": "Grafiki görnüşler",
+ "translate-statsf-width": "Pikseldäki ini:",
+ "translate-statsf-height": "Pikseldäki beýiklik:",
+ "translate-statsf-days": "Günlerdäki wagt:",
+ "translate-statsf-start": "Başlan senesi:",
+ "translate-statsf-scale-years": "Ýyllar",
+ "translate-statsf-scale-months": "Aýlar",
+ "translate-statsf-scale-weeks": "Hepdeler",
+ "translate-statsf-scale-days": "Günler",
+ "translate-statsf-scale-hours": "Sagatlar",
+ "translate-statsf-count": "Ölçeg:",
+ "translate-statsf-count-edits": "Üýtgetmeleriň sany",
+ "translate-statsf-count-users": "Işjeň terjimeçiler",
+ "translate-statsf-count-registrations": "Täze ulanyjylar",
+ "translate-statsf-count-reviews": "Terjime synlary",
+ "translate-statsf-count-reviewers": "Gözden geçirijiler",
+ "translate-statsf-language": "Dil kodlarynyň wergul bilen bölünen sanawy:",
+ "translate-statsf-submit": "Deslapky syn",
+ "translate-statsf-unknown-error": "Näbelli ýalňyşlyk ýüze çykdy.",
+ "translate-statsf-error-message": "Grafik ýüklenende ýalňyşlyk ýüze çykdy: $1",
+ "translate-statsf-graph-alt-text-info": "Terjime statistikasy üçin tekst alternatiwasy aşakdaky maglumatlar tablisasynda.",
+ "translate-statsf-alt-text": "Bu terjime statistikasy üçin tekst alternatiwasy.",
+ "translate-statsf-embed": "Terjime statistikasynyň grafigini beýleki sahypalara ýerleşdirmek üçin kod.",
+ "translate-sidebar-alltrans": "Başga dillerde",
+ "translations": "Ähli terjimeler",
+ "translations-summary": "Bar bolan terjimeleri görkezmek üçin aşakda habar adyny giriziň.",
+ "translate-translations-no-message": "\"$1\" terjime edilip bilinýän habar däl",
+ "translate-translations-none": "\"$1\" üçin terjime ýok",
+ "translate-translations-count": "{{PLURAL:$1|Bir terjime |$1 terjime}} tapyldy.",
+ "translate-translations-fieldset-title": "Habar",
+ "translate-translations-messagename": "At:",
+ "translate-translations-project": "Taslama:",
+ "translate-translations-including-no-param": "Sahypanyň parametrinde dogry habar açaryny görkezmegiňizi haýyş edýäris",
+ "translate-translations-history-short": "taryh",
+ "languagestats": "Dil boýunça statistikalar",
+ "languagestats-summary": "Bu sahypa bir dildäki ähli habarlaşyk toparlarynyň terjime boýunça statistikasyny görkezýär.",
+ "messagegroupstats-summary": "Bu sahypa habar toparynyň statistikasyny görkezýär.",
+ "languagestats-recenttranslations": "soňky terjimeler",
+ "translate-langstats-incomplete": "Bu sahypadaky käbir statistika doly däl. Has köp statistika almak üçin täzeden ýüklemegiňizi haýyş edýäris.",
+ "translate-language-code": "Dil kody",
+ "translate-language-code-field-name": "Dil kody:",
+ "translate-suppress-complete": "Doly terjime edilen habarlaşyk toparlaryny gizle",
+ "translate-language": "Dil",
+ "translate-total": "Habarlaşyklar",
+ "translate-untranslated": "Terjime edilmedik",
+ "translate-percentage-complete": "Ýerine ýetirilen",
+ "translate-percentage-fuzzy": "Möwriti geçen",
+ "translate-ls-submit": "Statistikany görkez",
+ "translate-mgs-pagename": "Habar toparynyň statistikasy",
+ "translate-mgs-fieldset": "Saýlawlary görkeziň",
+ "supportedlanguages": "Işjeň diller",
+ "translate-jssti-add": "Sanawa goş",
+ "managemessagegroups": "Habar toparyny dolandyrmak",
+ "translate-smg-rename-cancel": "Goýbolsun et",
+ "translate-smg-rename-no-msg": "Habar tapylmady",
+ "translate-smg-strong-sync-help": "Ýardam",
+ "translate-smg-groups-in-sync-list": "Häzirki wagtda fonda işlenýän toparlaryň sanawy:",
+ "translate-smg-group-message-action-history": "Taryh",
+ "translate-smg-group-action-resolve": "Çözülen ýaly belläň",
+ "translate-smg-group-message-tag-outdated": "Möwriti geçen",
+ "translate-smg-loading": "Ýüklenýär...",
+ "translate-manage-source-message-not-found": "Habar kesgitlemesi tapylmady",
+ "translate-documentation-language": "Habar resminamalary",
+ "translate-msggroupselector-search-all": "Ählisi",
+ "tux-languageselector": "Şu dile terjime et",
+ "tux-tab-all": "Ählisi",
+ "tux-tab-untranslated": "Terjime edilmedik",
+ "tux-tab-outdated": "Möwriti geçen",
+ "tux-tab-translated": "Terjime edildi",
+ "tux-status-optional": "Meýletin",
+ "tux-status-fuzzy": "Möwriti geçen",
+ "tux-status-translated": "Terjime edildi",
+ "tux-editor-placeholder-language": "Siziň terjimesiňiz $1",
+ "tux-editor-editsummary-placeholder": "Üýtgeşmeleriňizi düşündiriň (islege görä)",
+ "tux-editor-paste-original-button-label": "Çeşmäniň tekstini goýuň",
+ "tux-editor-save-button-label": "Terjimäni çap et",
+ "tux-editor-skip-button-label": "Indiki ýere geç",
+ "tux-editor-cancel-button-label": "Goýbolsun et",
+ "tux-editor-shortcut-info": "Indiki habary tassyklamak we geçmek üçin \"$1\" basyp saklaň, geçmek üçin \"$2\", gysgaça maglumat bermek üçin \"$4\" ýa-da beýleki gysga ýollary görmek üçin \"$3\" basyň.",
+ "tux-editor-edit-desc": "Resminamalary redaktirläň",
+ "tux-editor-add-desc": "Resminamalary goşuň",
+ "tux-editor-suggestions-title": "Teklipler",
+ "tux-editor-need-more-help": "Has köp kömek gerekmi?",
+ "tux-editor-ask-help": "Has giňişleýin maglumat soraň",
+ "tux-notices-hide": "gizle",
+ "tux-editor-message-desc-more": "Has giňişleýin görüň",
+ "tux-editor-message-desc-less": "Az gör",
+ "tux-editor-clear-translated": "Terjime edilen zady gizläň",
+ "tux-editor-translate-mode": "Sanaw",
+ "tux-editor-proofreading-hide-own-translations": "Terjimeleriňizi gizläň",
+ "tux-editor-page-mode": "Sahypa",
+ "tux-editor-outdated-notice": "Bu terjime täzelenmeli bolup biler.",
+ "tux-editor-doc-editor-cancel": "Goýbolsun et",
+ "tux-messagetable-more-messages": "$1 has köp {{PLURAL:$1|habar}}",
+ "tux-message-filter-placeholder": "Süzgüç sanawy",
+ "tux-message-filter-result": "\"$2\" üçin $1 {{PLURAL:$1|netije}} tapyldy",
+ "tux-message-filter-advanced-button": "Giňişleýin gözleg",
+ "tux-message-filter-optional-messages-label": "Goşmaça habarlar",
+ "tux-empty-list-all": "Bu habar topary boş",
+ "tux-empty-list-all-guide": "Terjime etmek üçin başga habar toparyny saýlaň",
+ "tux-empty-list-translated": "Terjime edilen habar ýok",
+ "tux-empty-list-translated-action": "Terjime et",
+ "tux-empty-there-are-optional": "Sanawda görkezilmedik goşmaça habarlar bar",
+ "tux-empty-show-optional-messages": "Goşmaça habarlary görkez",
+ "tux-empty-list-other": "Terjime etjek hiç zat ýok",
+ "tux-editor-close-tooltip": "Ýap",
+ "tux-editor-message-tools-translations": "Ähli terjimeler",
+ "tux-editor-loading": "Ýüklenýär...",
+ "specialpages-group-translation": "Terjime",
+ "content-model-translate-messagebundle": "Terjime edilip bilinýän habarlar toplumy"
+}
diff --git a/Translate/i18n/core/tl.json b/Translate/i18n/core/tl.json
new file mode 100644
index 00000000..91507ee4
--- /dev/null
+++ b/Translate/i18n/core/tl.json
@@ -0,0 +1,222 @@
+{
+ "@metadata": {
+ "authors": [
+ "AnakngAraw",
+ "GinawaSaHapon",
+ "Jewel457",
+ "Jojit fb"
+ ]
+ },
+ "translate": "Isalinwika",
+ "translate-desc": "[[Special:Translate|Natatanging pahina]] para sa pagsasalinwika ng MediaWiki at lampas pa",
+ "translate-taskui-export-to-file": "Iluwas na nasa katutubong anyo",
+ "translate-taskui-export-as-po": "Iluwas para sa salinwikang hindi nakaugnay sa internet",
+ "translate-taction-translate": "Isalinwika",
+ "translate-taction-proofread": "Magwasto",
+ "translate-taction-lstats": "Estadistika ng wika",
+ "translate-taction-mstats": "Estadistika ng pangkat ng mensahe",
+ "translate-taction-export": "Iluwas",
+ "translate-taction-disabled": "Hindi pinagagana sa wiking ito ang galaw na ito",
+ "translate-page-no-such-language": "Hindi tanggap ang tinukoy na wika.",
+ "translate-page-no-such-group": "Hindi tanggap ang tinukoy na pangkat.",
+ "translate-page-disabled": "Hindi pinagana ang mga salinwika para sa wikang ito na nasa loob ng pangkat na ito. Dahilan:\n\n<em>$1</em>",
+ "translate-language-disabled": "Hindi pinagagana ang pagsasalinwika papunta sa wikang ito.",
+ "translate-page-settings-legend": "Mga pagtatakda",
+ "translate-page-group": "Pangkat",
+ "translate-page-language": "Wika",
+ "translate-page-limit": "Hangganan",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|mensahe|mga mensahe}} bawat pahina",
+ "translate-submit": "Sumalok",
+ "translate-page-navigation-legend": "Paglilibot (nabigasyon)",
+ "translate-page-showing": "Nagpapakita ng mga mensahe mula $1 hanggang $2 ng $3.",
+ "translate-page-showing-all": "Nagpapakita ng $1 {{PLURAL:$1|mensahe|mga mensahe}}.",
+ "translate-page-showing-none": "Walang maipapakitang mga mensahe.",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "Susunod na pahina",
+ "translate-prev": "Sinundang pahina",
+ "translate-page-description-legend": "Kabatiran tungkol sa pangkat",
+ "translate-page-description-hasoptional": "Ang pangkat na ito ng mensahe ay naglalaman ng mga mensaheng opsiyonal.\nAng mga mensaheng pang-opsiyon ay nararapat na isalinwika lang kapag ang wika mo ay mayroong natatanging mga pangangailangan\nkatulad ng hindi paggamit ng mga patlang o transliterasyon ng mga pangalang pantangi. $1",
+ "translate-page-description-hasoptional-open": "Ipakita ang mga mensaheng maaaring wala naman.",
+ "translate-page-edit": "baguhin",
+ "translate-optional": "(maaaring wala nito)",
+ "translate-ignored": "(binalewala)",
+ "translate-edit-title": "Baguhin ang \"$1\"",
+ "translate-edit-definition": "Kahulugan ng mensahe",
+ "translate-edit-contribute": "magambag",
+ "translate-edit-no-information": "''Walang kasulatan ang mensaheng ito.\nKung alam mo kung saan o paano ginagamit ang mensaheng ito, makakatulong ka sa iba pang mga tagapagsalinwika sa pamamagitan ng pagdaragdag ng kasulatan sa mensaheng ito.''",
+ "translate-edit-information": "Kabatiran hinggil sa mensahe ($1)",
+ "translate-edit-warnings": "Mga babala hinggil sa hindi pa ganap na mga salinwika",
+ "translate-edit-tmmatch-source": "Teksto ng pinagmulan ng salinwika: $1",
+ "translate-edit-tmmatch": "$1% tumugma",
+ "translate-edit-nopermission": "Kailangan mo ng pahintulot upang makapagsalinwika ng mga mensahe.",
+ "translate-edit-askpermission": "Humiling ng pahintulot",
+ "translate-checks-parameters": "Ang sumusunod na {{PLURAL:$2|parametro ay|mga parametro ay}} hindi ginagamit:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "Ang sumusunod na {{PLURAL:$2|parametro ay|mga parametro ay}} hindi nalalaman:\n<strong>$1</strong>",
+ "translate-checks-balance": "Mayroong isang hindi magkapantay na bilang ng {{PLURAL:$2|panaklong|mga panaklong}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "Ang sumusunod na {{PLURAL:$2|kawing ay|$2 mga kawing ay}} may suliranin:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "Nawawala ang sumusunod na {{PLURAL:$2|kawing|$2 mga kawing}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Gumagamit ang kahulugan ng <nowiki>{{PLURAL:}}</nowiki> subalit hindi ang salinwika.",
+ "translate-checks-pagename": "Espasyo ng pangalan binago mula sa kahulugan",
+ "translate-checks-format": "Ang salinwikang ito ay hindi sumusunod sa kahulugan o may hindi tanggap na palaugnayan: $1",
+ "translate-checks-escape": "Maaaring hindi sinasadya ang sumusunod na mga paghulagpos: <strong>$1</strong>",
+ "translate-checks-parametersnotequal": "Ang bilang ng parametro ay {{PLURAL:$1|$1}}; dapat na {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "Sira ang porma ng <nowiki>$1</nowiki>.",
+ "translate-checks-fudforum-syntax": "Gamitin ang <nowiki>$1</nowiki> sa halip na <nowiki>$2</nowiki> sa loob ng proyektong ito.",
+ "translate-pref-editassistlang": "Katulong na mga wika:",
+ "prefs-translate": "Mga mapagpipilian na pangsalinwika",
+ "translate-pref-editassistlang-help": "Talaan ng mga kodigong pangwika na pinaghihiwalay ng kuwit.\nAng salinwika ng isang mensahe sa mga wikang ito ay ipinapakita kapag nagsasalinwika ka.\nNakasalalay sa wika mo ang likas na nakatakdang talaan ng mga wika.",
+ "translate-pref-editassistlang-bad": "Hindi tanggap na kodigong pangwika sa loob ng talaan:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Baguhing ginagamit ang ugnayang-hangganan (''interface'') na pangpagsasalinwika",
+ "right-translate-manage": "Pamahalaan ang mga pangkat ng mensahe",
+ "action-translate-manage": "pamahalaan ang mga pangkat ng mensahe",
+ "right-translate-import": "Angkatin ang mga salinwikang hindi nakakunekta sa internet",
+ "action-translate-import": "angkatin ang mga salinwikang ginawa habang hindi nakaugnay sa internet",
+ "right-translate-messagereview": "Suriin ang mga salinwika",
+ "right-translate-groupreview": "Baguhin ang katayuan ng daloy ng paggawa ng mga pangkat ng mensahe",
+ "translate-rc-translation-filter": "Salain ang mga salinwika:",
+ "translate-rc-translation-filter-no": "Walang gagawin",
+ "translate-rc-translation-filter-only": "Mga salinwika lamang ang ipakita",
+ "translate-rc-translation-filter-filter": "Salaing hindi isinasama ang mga salinwika",
+ "translate-rc-translation-filter-site": "Mga pagbabago sa mga mensahe ng pook lamang",
+ "translationstats": "Mga estadistikang pangsalinwika",
+ "translate-stats-edits": "Mga pagbabago",
+ "translate-stats-users": "Mga tagapagsalinwika",
+ "translate-stats-registrations": "Mga pagpapatala",
+ "translate-stats-reviews": "Mga pagsuri",
+ "translate-stats-reviewers": "Mga tagasuri",
+ "translate-statsf-intro": "Maaari kang makagawa ng payak na estadistika/palaulatan sa pamamagitan ng pormularyong ito. Ang lahat ng mga halaga ay may pangitaas at pangibabang mga hangganan.",
+ "translate-statsf-options": "Mga pagpipiliang pangtalangguhit",
+ "translate-statsf-width": "Lapad na nasa mga piksel:",
+ "translate-statsf-height": "Taas na nasa mga piksel:",
+ "translate-statsf-days": "Kapanuhan ayon sa mga araw:",
+ "translate-statsf-start": "Petsa ng simula:",
+ "translate-statsf-scale": "Kaantasan ng pagkakaroon ng mga butil (granularidad):",
+ "translate-statsf-scale-months": "Mga buwan",
+ "translate-statsf-scale-weeks": "Mga linggo",
+ "translate-statsf-scale-days": "Mga araw",
+ "translate-statsf-scale-hours": "Mga oras",
+ "translate-statsf-count": "Sukatin:",
+ "translate-statsf-count-edits": "Bilang ng mga pagbabago",
+ "translate-statsf-count-users": "Masisiglang mga tagapagsalinwika",
+ "translate-statsf-count-registrations": "Bagong mga tagagamit",
+ "translate-statsf-count-reviews": "Mga pagsusuri ng salinwika",
+ "translate-statsf-count-reviewers": "Mga manunuri",
+ "translate-statsf-language": "Talaan ng kodigo ng mga wikang pinaghihiwahiwalay ng mga kuwit:",
+ "translate-statsf-group": "Talaan ng kodigo ng mga pangkat na pinaghiwahiwalay ng mga kuwit:",
+ "translate-statsf-submit": "Paunang tingin",
+ "translate-tag-page-desc": "Salinwika ng pahina ng wiking [[$2|$1]].",
+ "translate-sidebar-alltrans": "Sa iba pang mga wika",
+ "translations": "Lahat ng mga salinwika",
+ "translations-summary": "Magpasok (maglagay) ng isang pangalan ng mensahe sa ibaba upang maipakita ang lahat ng makukuhang mga salinwika.",
+ "translate-translations-no-message": "Ang \"$1\" ay isang hindi maisasalinwikang mensahe",
+ "translate-translations-none": "Walang mga salinwika para sa \"$1\"",
+ "translate-translations-count": "Nakatagpo ng {{PLURAL:$1|isang salinwika|$1 mga salinwika}}.",
+ "translate-translations-fieldset-title": "Mensahe",
+ "translate-translations-messagename": "Pangalan:",
+ "translate-translations-project": "Proyekto:",
+ "translate-translations-including-no-param": "Pakitukoy ang isang tanggap na susi ng mensahe sa loob ng parametro ng kabahaging pahina",
+ "translate-translations-history-short": "k",
+ "languagestats": "Mga estadistikang pangwika",
+ "languagestats-summary": "Nagpapakita ang pahinang ito ng mga estadistikang pangsalinwika para sa lahat ng mga pangkat ng mensaheng para sa isang wika.",
+ "languagestats-stats-for": "Estadistika ng salinwika para sa $1 ($2).",
+ "languagestats-recenttranslations": "kamakailang mga salinwika",
+ "translate-langstats-incomplete": "Hindi kumpleto ang ilan sa mga estadistikang nasa pahinang ito. Pakikargang muli upang makakuha ng marami pang mga estadistika.",
+ "translate-langstats-expand": "palaparin",
+ "translate-langstats-collapse": "tiklupin",
+ "translate-langstats-expandall": "palaparing lahat",
+ "translate-langstats-collapseall": "tikluping lahat",
+ "translate-language-code": "Kodigo ng wika",
+ "translate-language-code-field-name": "Kodigo ng wika:",
+ "translate-suppress-complete": "Pigiling ganap ang isinalinwikang mga pangkat ng mensahe",
+ "translate-ls-noempty": "Pigiling ganap ang hindi pa naisasalinwikang mga pangkat ng mensahe",
+ "translate-language": "Wika",
+ "translate-total": "Mga mensahe",
+ "translate-untranslated": "Hindi pa naisasalinwika",
+ "translate-percentage-complete": "Panahon ng pagtatapos (pagkakabuo)",
+ "translate-percentage-fuzzy": "Wala na sa panahon",
+ "translate-languagestats-overall": "Magkakasama ang lahat ng mga pangkat ng mensahe",
+ "translate-ls-submit": "Ipakita ang estadistika",
+ "translate-ls-column-group": "Pangkat ng mensahe",
+ "translate-mgs-pagename": "Estadistika ng pangkat ng mensahe",
+ "translate-mgs-fieldset": "Ipakita ang kanaisan",
+ "translate-mgs-group": "Pangkat ng mensahe:",
+ "translate-mgs-nocomplete": "Huwag ipakita ang mga wikang nakumpleto na ang pagsasalinwika",
+ "translate-mgs-noempty": "Huwag ipakita ang mga wikang wala pang anumang mga pagsasalinwika",
+ "translate-mgs-submit": "Ipakita ang estadistika",
+ "translate-mgs-column-language": "Wika",
+ "translate-mgs-totals": "Magkakasama ang lahat ng mga wika",
+ "translate-mgs-invalid-group": "Hindi umiiral ang tinukoy na pangkat na $1.",
+ "translate-mgs-nothing": "Walang maipapakita para sa hiniling na estadistika.",
+ "supportedlanguages": "Tinatangkilik na mga wika",
+ "supportedlanguages-summary": "Nagpapakita ang pahinang ito ng isang talaan ng lahat ng tinatangkilik na mga wika ng {{SITENAME}},\nkasama ang mga pangalan ng mga tagapagsalinwikang gumagawa sa wikang iyon.\nKung mas malaki ang anyo ng pangalan ng tagapagsalinwika, mas marami na ang mga pagbabagong naiambag ng tagapagsalinwika.\nAng kulay ng salungguhit ay nagpapahiwatig kung kailan huling naging masigla rito ang isang tagapagsalinwika.",
+ "supportedlanguages-colorlegend": "Alamat para sa kulay: Huling salinwika $1 mga araw na ang nakalilipas.",
+ "supportedlanguages-portallink": "[$1] $2 - $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-translators": "{{PLURAL:$2|Tagapagsalinwika|Mga tagapagsalinwika}}: $1",
+ "supportedlanguages-recenttranslations": "kamakailang mga pagsasalinwika",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|wika|mga wika}} sa kabuoan.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|pagbabago|mga pagbabago}} - huling pagbago $3 {{PLURAL:$3|araw|mga araw}} na ang nakalilipas",
+ "translate-jssti-add": "Idagdag sa talaan",
+ "managemessagegroups": "Pamamahala ng pangkat ng mensahe",
+ "translate-smg-notallowed": "Hindi ka pinapahintulutang isakatuparan ang galaw na ito.",
+ "translate-smg-nochanges": "Walang mga pagbabagong maisasagawa.",
+ "translate-smg-submit": "Ipasa ang mga pagbabago para sa pagsasagawa",
+ "translate-smg-submitted": "Naisapanahon na ang mga kahulugan ng mensahe. Isinasagawa na ang mga pagbabago sa may likuran.",
+ "translate-smg-left": "Nilalaman ng mensahe sa loob ng wiki",
+ "translate-smg-right": "Parating na mga pagbabago",
+ "translate-manage-import-diff": "Mensahe $1 | Mga galaw: $2",
+ "translate-manage-import-new": "Bagong mensahe $1",
+ "translate-manage-import-deleted": "Nabura ang mensaheng $1",
+ "translate-manage-action-import": "Angkatin",
+ "translate-manage-action-conflict": "Inangkat at malabo",
+ "translate-manage-action-ignore": "Huwag pansinin",
+ "translate-manage-action-fuzzy": "Mga salinwikang inangkat at malabo",
+ "translate-manage-nochanges": "Walang mga pagbabago sa mga pagbibigay-kahulugan ng mensahe para sa pangkat na ito.",
+ "translate-manage-nochanges-other": "Walang mga pagbabago para sa wikang ito.\nGamitin ang kawing sa ibaba upang maibalik ang tanawin ng mga detalye ng pangkat.",
+ "translate-manage-inconsistent": "Nakapansin ng kataliwasan sa kahilingan.\nPakisuri para sa mga pagbabago at subukan uli.\nMga detalye: $1.",
+ "translate-manage-toolong": "Lumampas na sa pinakamataas na panahon ng pagsasagawa na $1 {{PLURAL:$1|segundo|mga segundo}}.\nMangyaring ipasang muli ang pormularyo upang magpatuloy sa pagsasagawa.",
+ "translate-manage-import-summary": "Nag-aangkat ng isang bagong bersyon mula sa pinagmumulang nasa labas",
+ "translate-manage-import-ignore": "Nilalaktawan ang mensaheng $1.",
+ "translate-manage-conflict-summary": "Nag-aangkat ng isang bagong bersyon mula sa pinagmumulang nasa labas.\nPakisuri.",
+ "translate-manage-submit": "Isakatuparan",
+ "translate-manage-intro-other": "Nasa ibaba ang talaan ng mga pagbabago sa salinwika sa wikang $1.\nPakisuri ang mga pagbabago at pumili ng galaw na nais mong gawin para sa bawat salinwika.\nKung pinili mong huwag pansinin ang mga pagbabago, pangingibabawan sila sa susunod na pagluluwas.",
+ "translate-manage-import-ok": "Inangkat na bagong bersyon ng pahinang $1.",
+ "translate-manage-import-done": "Lahat nagawa na!",
+ "importtranslations": "Mag-angkat ng mga salinwika",
+ "translate-import-from-local": "Lokal na file na i-upload",
+ "translate-import-load": "Ikarga ang file",
+ "translate-import-err-dl-failed": "Hindi nasalok ang talaksang: $1",
+ "translate-import-err-ul-failed": "Hindi matagumpay ang pagkarga ng talaksan",
+ "translate-import-err-invalid-title": "Hindi tanggap ang ibinigay na pangalan ng talaksang <nowiki>$1</nowiki>.",
+ "translate-import-err-no-such-file": "Hindi umiiral o hindi pa naikakargang nakaukol dito ang talaksang <nowiki>$1</nowiki>.",
+ "translate-import-err-stale-group": "Hindi umiiral ang pangkat ng mensahe na kinaaaniban ng talaksang ito.",
+ "translate-import-err-no-headers": "Ang talaksang ay isang hindi isang talaksang Gettext may mabuting anyo na pangkaanyuhang dugtong na Isalinwika:\nHindi natukoy ang pangkat at wika mula sa mga paulo ng talaksan.",
+ "translate-js-support-unsaved-warning": "Mayroon kang mga salinwikang hindi pa nasasagip.",
+ "translate-gs-pos": "Pos.",
+ "translate-gs-code": "Kodigo",
+ "translate-gs-continent": "Kontinente",
+ "translate-gs-speakers": "Mga tagapagsalita",
+ "translate-gs-score": "Puntos",
+ "translate-gs-multiple": "Maramihan",
+ "translate-gs-count": "Bilang",
+ "translate-gs-total": "Kabuoan",
+ "translate-gs-avgscore": "Karaniwang puntos",
+ "translate-documentation-language": "Dokumentasyon sa mensahe",
+ "translate-searchprofile": "Mga salinwika",
+ "translate-searchprofile-tooltip": "Maghanap mula sa lahat ng mga salinwika",
+ "translate-search-languagefilter": "Salain ayon sa wika:",
+ "translate-search-nofilter": "Walang pagsasala",
+ "log-name-translationreview": "Tala ng pagsuri ng salinwika",
+ "log-description-translationreview": "Tala ng lahat ng mga pagsusuri ng mga salinwika at mga pangkat ng mensahe.",
+ "logentry-translationreview-message": "{{GENDER:$2|Tinanggap}} ni $1 ang salinwika ng $3",
+ "translate-workflow-state-": "(huwag itakda)",
+ "translate-workflowstatus": "Katayuan: $1",
+ "translate-workflow-set-doing": "Itinatakda...",
+ "translate-workflow-autocreated-summary": "Kusang paglikha ng pahina para sa katayuang $1 ng daloy ng paggawa",
+ "translate-stats-workflow": "Katayuan",
+ "translate-workflowgroup-label": "Mga katayuan ng paggawa",
+ "translate-workflowgroup-desc": "Ipinapakita ng pangkat ng mensaheng ito ang mga katayuan ng paggawa ng salinwika.\nAng mga katayuan ay inilalarawan sa kaayusan ng pagkakaiba na $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Kamakailang mga salinwika",
+ "translate-dynagroup-recent-desc": "Nagpapakita ang pangkat na ito ng mensahe ng lahat ng kamakailang mga pagsasalinwika papunta sa wikang ito.\nPinaka nakakatulong para sa mga gawain ng pagwawasto.",
+ "tux-editor-message-tools-delete": "Burahin"
+}
diff --git a/Translate/i18n/core/tly.json b/Translate/i18n/core/tly.json
new file mode 100644
index 00000000..8b568ce1
--- /dev/null
+++ b/Translate/i18n/core/tly.json
@@ -0,0 +1,40 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "Erdemaslancan",
+ "Patriot Kur",
+ "QeneralĞasım",
+ "Гусейн"
+ ]
+ },
+ "translate": "Peqordıniyey",
+ "translate-page-settings-legend": "Nizamon",
+ "translate-page-language": "Zıvon",
+ "translate-next": "Peşonə səhifə",
+ "translate-page-edit": "redaktə kardə",
+ "translate-edit-title": "Dəqiş karde \"$1\"",
+ "translate-stats-edits": "Dəqişion karde",
+ "translate-statsf-scale-months": "Manqon",
+ "translate-statsf-scale-weeks": "Hafton",
+ "translate-statsf-scale-days": "Rüjon",
+ "translate-statsf-scale-hours": "Saaton",
+ "translate-translations-fieldset-title": "Nomə",
+ "translate-translations-messagename": "Nom:",
+ "translate-translations-project": "Naxşə:",
+ "translate-translations-history-short": "tar.",
+ "translate-total": "Noməon",
+ "translate-ls-column-group": "Nomə qrup",
+ "translate-mgs-group": "Nomə qrup:",
+ "supportedlanguages-portallink": "[$1] $2 - $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "translate-smg-rename-cancel": "Ləğv karde",
+ "translate-documentation-language": "Номә документасијә",
+ "translate-msggroupselector-search-all": "Həmə",
+ "tux-tab-all": "Həmə",
+ "tux-edit": "Redaktə kardə",
+ "tux-editor-cancel-button-label": "Ləğv karde",
+ "tux-proofread-edit-label": "Redaktə kardə",
+ "tux-editor-doc-editor-placeholder": "Nomə dokumentasiyə",
+ "tux-editor-doc-editor-cancel": "Ləğv karde"
+}
diff --git a/Translate/i18n/core/tn.json b/Translate/i18n/core/tn.json
new file mode 100644
index 00000000..ec8dd1f6
--- /dev/null
+++ b/Translate/i18n/core/tn.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mosime"
+ ]
+ },
+ "translate-checks-parameters": "Tse di latelang {{PLURAL:$2|peipi ya tshedimosetso|dipeipi tsa tshedimosetso}} ga di a dirisiwa:<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "Tse di latelang {{PLURAL:$2|peipi ya tshedimosetso|dipeipi tsa tshedimosetso}} ga di itsagale:<strong>$1</strong>"
+}
diff --git a/Translate/i18n/core/tok.json b/Translate/i18n/core/tok.json
new file mode 100644
index 00000000..033e3c20
--- /dev/null
+++ b/Translate/i18n/core/tok.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Robin van der Vliet"
+ ]
+ },
+ "translate-page-language": "toki",
+ "translate-language": "toki",
+ "translate-mgs-column-language": "toki",
+ "translate-smg-group-message-message-other-langs": "toki ante:"
+}
diff --git a/Translate/i18n/core/tr.json b/Translate/i18n/core/tr.json
new file mode 100644
index 00000000..e07a99d3
--- /dev/null
+++ b/Translate/i18n/core/tr.json
@@ -0,0 +1,454 @@
+{
+ "@metadata": {
+ "authors": [
+ "BaRaN6161 TURK",
+ "Bulgu",
+ "Cekli829",
+ "Cobija",
+ "Emperyan",
+ "Erdemaslancan",
+ "Gorizon",
+ "Hedda",
+ "Incelemeelemani",
+ "Joseph",
+ "Karduelis",
+ "Kumkumuk",
+ "LisafBia",
+ "McAang",
+ "Meelo",
+ "Mim.saitkilic",
+ "MuratTheTurkish",
+ "Rapsar",
+ "SaldırganSincap",
+ "Sayginer",
+ "Sezgin İbiş",
+ "Srhat",
+ "Suelnur",
+ "TmY e12",
+ "ToprakM",
+ "Vito Genovese"
+ ]
+ },
+ "translate": "Çevir",
+ "translate-desc": "MediaWiki'yi ve ötesini çevirmek için [[Special:Translate|özel sayfa]]",
+ "translate-fuzzybot-desc": "Bu, çevirileri korumak için kullanılan MediaWiki [https://www.mediawiki.org/wiki/Extension:Translate/tr Translate uzantısı] tarafından kullanılan özel bir sistem hesabıdır.\nBu hesap MediaWiki yazılımının bir parçasıdır ve hiçbir kullanıcıya ait değildir.",
+ "translate-taskui-export-to-file": "Yerel biçimde aktar",
+ "translate-taskui-export-as-po": "Çevrimdışı çeviri aktar",
+ "translate-taction-translate": "Çevir",
+ "translate-taction-proofread": "İncele",
+ "translate-taction-lstats": "Dil istatistikleri",
+ "translate-taction-mstats": "ileti grubu istatistikleri",
+ "translate-taction-export": "Dışa aktar",
+ "translate-taction-disabled": "Bu eylem bu vikide devre dışı bırakıldı.",
+ "translate-page-no-such-language": "Belirtilen dil geçersiz.",
+ "translate-page-no-such-group": "Belirtilen grup geçersiz.",
+ "translate-page-disabled": "Bu gruptaki dil çevirileri devre dışı bırakıldı.\nNeden:\n\n<em>$1</em>",
+ "translate-language-disabled": "Bu dile çeviri devre dışı bırakıldı.",
+ "translate-page-settings-legend": "Ayarlar",
+ "translate-page-group": "Grup",
+ "translate-page-language": "Dil",
+ "translate-page-limit": "Sınır",
+ "translate-page-limit-option": "Her sayfayı $1 ileti göster",
+ "translate-submit": "Getir",
+ "translate-page-navigation-legend": "Gezinti",
+ "translate-page-showing": "$3 iletiden $1 ile $2 arasında olanlar gösteriliyor.",
+ "translate-page-showing-all": "$1 ileti gösteriliyor.",
+ "translate-page-showing-none": "Gösterecek ileti yok.",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "Sonraki sayfa",
+ "translate-prev": "Önceki sayfa",
+ "translate-page-description-legend": "Grup hakkında bilgi",
+ "translate-page-description-hasoptional": "Bu mesaj grubu isteğe bağlı mesajlar içerir.\nİsteğe bağlı mesajlar yalnızca dilinizin özel gereksinimleri olduğunda çevrilmelidir,\nboşluk kullanmamak veya özel isimleri çevirmek gibi. $1",
+ "translate-page-description-hasoptional-open": "İsteğe bağlı iletileri göster.",
+ "translate-page-edit": "düzenle",
+ "translate-optional": "(isteğe bağlı)",
+ "translate-ignored": "(yoksayıldı)",
+ "translate-edit-title": "\"$1\" sayfayı düzenle",
+ "translate-edit-definition": "İleti tanımı",
+ "translate-edit-contribute": "katkıda bulun",
+ "translate-edit-no-information": "<em>Bu iletide belge yok.\nBu iletinin nerede veya nasıl kullanıldığını biliyorsanız, bu iletiyi belge ekleyerek diğer çevirmenlere yardımcı olabilirsiniz.</em>",
+ "translate-edit-information": "İleti hakkında bilgi ($1)",
+ "translate-edit-warnings": "Tamamlanmamış çeviriler hakkındaki uyarılar",
+ "translate-edit-tmmatch-source": "Çeviri kaynağı metin: $1",
+ "translate-edit-tmmatch": "%$1 benzer",
+ "translate-edit-nopermission": "İletileri çevirmek için çeviri hakkınız olmalı.",
+ "translate-edit-askpermission": "İzin al",
+ "exporttranslations": "Çevirileri dışa aktar",
+ "translate-export-form-format": "Biçim",
+ "translate-export-invalid-format": "Lütfen geçerli bir biçim belirtiniz.",
+ "translate-export-not-supported": "Çeviriyi dışa aktarım desteklenmiyor.",
+ "translate-export-format-notsupported": "Belirtilen dışa aktarım biçimi, ileti grubu tarafından desteklenmiyor.",
+ "translate-export-group-too-large": "Seçilen mesaj grubu çok büyük. $1 daha az mesaj içeren bir mesaj grubu seçin veya tavsiye için çeviri hizmetlisine başvurun.",
+ "translate-checks-parameters": "Aşağıdaki {{PLURAL:$2|parametre|parametreler}} kullanılmıyor: <strong>$1</strong>",
+ "translate-checks-parameters-unknown": "Aşağıdaki {{PLURAL:$2|parametre|parametreler}} bilinmiyor: <strong>$1</strong>",
+ "translate-checks-balance": "{{PLURAL:$2|Parantezin|Parantezlerin}} açılış ve kapanış sayısı eşleşmiyor: <strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "Aşağıdaki $2 bağlantı sorunlu: <strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "Aşağıdaki $2 bağlantı eksik: <strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Tanım <nowiki>{{PLURAL:}}</nowiki> kullanıyor, ancak çeviri kullanmıyor.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> {{PLURAL:$1|bir form|$1 form}} verildi, ancak {{PLURAL:$2|yalnızca bir form|$2 form}} desteklenir (0= ve 1= formlar hariç).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> sonunda yinelenen formlar var. <nowiki>{{PLURAL:$1|koyun|koyun}}</nowiki>, <nowiki>{{PLURAL:$1|koyun}}</nowiki> şeklinde yazılmalıdır.",
+ "translate-checks-gettext-plural-missing": "Bu çeviride <nowiki>{{PLURAL:GETTEXT|}}</nowiki> olmalıdır.",
+ "translate-checks-gettext-plural-unsupported": "Bu ileti <nowiki>{{PLURAL:GETTEXT|}}</nowiki> desteklemiyor.",
+ "translate-checks-gettext-plural-count": "<nowiki>{{PLURAL:GETTEXT|}}</nowiki> tam olarak $1 çoğul form kabul ediyor. Şu anda $2 çoğul form verilmiştir.",
+ "translate-checks-smartformat-plural-missing": "Bu çeviri, $1 değişkeninde çoğul olmalıdır.",
+ "translate-checks-smartformat-plural-unsupported": "Bu ileti, $1 değişkeni üzerinde çoğul desteği desteklemiyor.",
+ "translate-checks-smartformat-plural-count": "<strong>$3</strong> hatalı çoğul form sayısı. $1 çoğul form olmalıdır. Şu anda $2 çoğul form verilmiştir.",
+ "translate-checks-unicode-plural-missing": "Bu çeviride <nowiki>{{PLURAL|}}</nowiki> olmalıdır.",
+ "translate-checks-unicode-plural-unsupported": "Bu mesaj <nowiki>{{PLURAL|}}</nowiki> desteklemiyor.",
+ "translate-checks-unicode-plural-invalid": "Çoğul biçimler $1 olarak tanımlanmalıdır. Bu çeviri $2 içeriyor.",
+ "translate-checks-pagename": "Tanımdaki ad alanı değiştirilmiş",
+ "translate-checks-format": "Bu çeviri tanıma uymuyor ya da geçersiz söz dizimi var: $1",
+ "translate-checks-escape": "Aşağıdaki çıkış {{PLURAL:$2|karakter|karakterler}} yanlışlıkla olabilir: <strong>$1</strong>. {{PLURAL:$4|Geçerli bir kaçış karakteri|Geçerli geçerli kaçış karakterleri şunlardır:}} $3.",
+ "translate-checks-parametersnotequal": "Parametre sayısı {{PLURAL:$1|$1}}; {{PLURAL:$2|$2}} olmalı.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> hatalı biçimlendirilmiş.",
+ "translate-checks-fudforum-syntax": "Bu projede <nowiki>$2</nowiki> yerine <nowiki>$1</nowiki> kullanın.",
+ "translate-checks-newline-missing-start": "Çevirinin başında $1 eksik yeni satır karakter var.",
+ "translate-checks-newline-missing-end": "Çevirinin sonunda $1 eksik yeni satır karakter var.",
+ "translate-checks-newline-extra-start": "Çevirinin başında $1 ekstra yeni satır karakter var.",
+ "translate-checks-newline-extra-end": "Çevirinin sonunda $1 ekstra yeni satır karakter var.",
+ "translate-checks-value-not-present": "Çeviri {{PLURAL:$1|1=|şu değerlerden birine eşit olmalıdır:}} $1.",
+ "translate-checks-replacement": "$1 yerine $2 kullanın.",
+ "translate-checks-empty": "İçeriği olmayan ya da salt boşluk içeren çevirilere izin verilmiyor.",
+ "translate-pref-editassistlang": "Yardımcı diller:",
+ "prefs-translate": "Çeviri seçenekleri",
+ "translate-pref-editassistlang-help": "Dil kodlarının virgülle ayrılmış listesi.\nÇeviri yaparken bu dillerdeki bir mesajın çevirisi gösterilir.\nVarsayılan dil listesi dilinize bağlıdır.",
+ "translate-pref-editassistlang-bad": "Listede geçersiz dil kodu:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Çeviri arayüzünü kullanarak düzenle",
+ "action-translate": "çeviri arayüzünü kullanarak düzenle",
+ "right-translate-manage": "İleti gruplarını yönet",
+ "action-translate-manage": "ileti gruplarını yönet",
+ "right-translate-import": "Çevrimdışı çevirileri içe aktar",
+ "action-translate-import": "çevrimdışı çevirileri içe aktar",
+ "right-translate-messagereview": "Çevirileri incele",
+ "action-translate-messagereview": "çevirileri incele",
+ "right-translate-groupreview": "İleti gruplarının iş akışı durumunu değiştir",
+ "action-translate-groupreview": "ileti gruplarının iş akışı durumunu değiştir",
+ "translate-rcfilters-translations": "Çeviriler",
+ "translate-rcfilters-translations-only-label": "Çeviriler",
+ "translate-rcfilters-translations-only-desc": "Çevrilmiş sayfalardaki değişiklikler.",
+ "translate-rcfilters-translations-filter-label": "Çeviri olmayanlar",
+ "translate-rcfilters-translations-filter-desc": "Çeviri olmayan tüm değişiklikler.",
+ "translate-rcfilters-translations-site-label": "Site mesajları",
+ "translate-rcfilters-translations-site-desc": "MediaWiki ad alanındaki site mesajlarının özelleştirilmesi.",
+ "translate-rc-translation-filter": "Çevirileri filtrele:",
+ "translate-rc-translation-filter-no": "Hiçbir şey yapma",
+ "translate-rc-translation-filter-only": "Yalnızca çevirileri göster",
+ "translate-rc-translation-filter-filter": "Çevirileri filtrele",
+ "translate-rc-translation-filter-site": "Yalnızca site iletilerine değişiklikler",
+ "translationstats": "Çeviri istatistikleri",
+ "translate-stats-edits": "Düzenlemeler",
+ "translate-stats-users": "Çevirmenler",
+ "translate-stats-registrations": "Kayıtlar",
+ "translate-stats-reviews": "İncelemeler",
+ "translate-stats-reviewers": "İnceleyiciler",
+ "translate-statsf-intro": "Bu formla basit istatistikler oluşturabilirsiniz.\nBütün değerlerin alt ve üst sınırları vardır.",
+ "translate-statsf-options": "Grafik seçenekleri",
+ "translate-statsf-width": "Piksel olarak genişlik:",
+ "translate-statsf-height": "Piksel olarak yükseklik:",
+ "translate-statsf-days": "Gün olarak süre:",
+ "translate-statsf-start": "Başlangıç tarihi:",
+ "translate-statsf-scale": "Veri:",
+ "translate-statsf-scale-years": "Yıllar",
+ "translate-statsf-scale-months": "Aylar",
+ "translate-statsf-scale-weeks": "Haftalar",
+ "translate-statsf-scale-days": "Günler",
+ "translate-statsf-scale-hours": "Saatler",
+ "translate-statsf-count": "Ölçüm:",
+ "translate-statsf-count-edits": "Değişiklik sayısı",
+ "translate-statsf-count-users": "Etkin çevirmenler",
+ "translate-statsf-count-registrations": "Yeni kullanıcılar",
+ "translate-statsf-count-reviews": "Çeviri incelemeleri",
+ "translate-statsf-count-reviewers": "İnceleyiciler",
+ "translate-statsf-language": "Dil kodlarının virgül ile ayrılmış listesi:",
+ "translate-statsf-group": "Grup kodlarının virgül ile ayrılmış listesi:",
+ "translate-statsf-submit": "Önizleme",
+ "translate-statsf-unknown-error": "Bilinmeyen bir hata oluştu.",
+ "translate-statsf-error-message": "Grafik yüklenirken bir hata oluştu: $1",
+ "translate-statsf-graph-alt-text-info": "Çeviri istatistikleri için metin alternatifi aşağıdaki veri tablosundadır.",
+ "translate-statsf-alt-text": "Bu, çeviri istatistikleri için metin alternatifidir.",
+ "translate-statsf-embed": "Çeviri istatistikleri grafiğini diğer sayfalara yerleştirmek için kod.",
+ "translate-tag-page-desc": "[[$2|$1]] viki sayfasının $3 ($4) dilinden çevirisi.",
+ "translate-sidebar-alltrans": "Diğer dillerde",
+ "translations": "Bütün çeviriler",
+ "translations-summary": "Tüm mevcut çevirilerin gösterilmesi için aşağıya bir ileti adı giriniz.",
+ "translate-translations-no-message": "\"$1\", çevrilebilir bir ileti değil",
+ "translate-translations-none": "\"$1\" için hiç çeviri yok",
+ "translate-translations-count": "{{PLURAL:$1|Bir çeviri|$1 çeviri}} bulundu.",
+ "translate-translations-fieldset-title": "İleti",
+ "translate-translations-messagename": "Ad:",
+ "translate-translations-project": "Proje:",
+ "translate-translations-including-no-param": "Lütfen alt sayfa parametresinde geçerli bir ileti anahtarı belirtin",
+ "translate-translations-history-short": "g",
+ "languagestats": "Dil istatistikleri",
+ "languagestats-summary": "Bu sayfa tüm ileti grupları için dil çeviri istatistiklerini gösterir.",
+ "messagegroupstats-summary": "Bu sayfa, mesaj grup istatistiklerini göstermektedir.",
+ "languagestats-stats-for": "$1 için çeviri istatistikleri ($2).",
+ "languagestats-recenttranslations": "son çeviriler",
+ "translate-langstats-incomplete": "Bu sayfadaki bazı istatistikler eksik. Daha fazla istatistik almak için lütfen yeniden yükleyin.",
+ "translate-langstats-expand": "genişlet",
+ "translate-langstats-collapse": "daralt",
+ "translate-langstats-expandall": "tümünü genişlet",
+ "translate-langstats-collapseall": "tümünü daralt",
+ "translate-language-code": "Dil kodu",
+ "translate-language-code-field-name": "Dil kodu:",
+ "translate-suppress-complete": "Tamamen çevrilmiş ileti gruplarını gizle",
+ "translate-ls-noempty": "Hiç çevrilmemiş ileti gruplarını gizle",
+ "translate-language": "Dil",
+ "translate-total": "İletiler",
+ "translate-untranslated": "Çevrilmemiş",
+ "translate-percentage-complete": "Tamamlanma",
+ "translate-percentage-fuzzy": "Eski",
+ "translate-percentage-proofread": "İncelenmiş",
+ "translate-languagestats-overall": "Tüm ileti gruplarıyla beraber",
+ "translate-ls-submit": "İstatistikleri göster",
+ "translate-ls-column-group": "İleti grubu",
+ "translate-mgs-pagename": "İleti grubu istatistikleri",
+ "translate-mgs-fieldset": "Görüntü tercihleri",
+ "translate-mgs-group": "İleti grubu:",
+ "translate-mgs-nocomplete": "Çevirisi tamamlanmış dilleri görüntüleme",
+ "translate-mgs-noempty": "Hiç çeviri yapılmamış dilleri görüntüleme",
+ "translate-mgs-submit": "İstatistikleri göster",
+ "translate-mgs-column-language": "Dil",
+ "translate-mgs-totals": "Hepsi $1 dil birlikte",
+ "translate-mgs-invalid-group": "Belirtilen $1 grubu yok.",
+ "translate-mgs-nothing": "İstenen istatistikler için gösterilecek bir şey yok.",
+ "translate-tes-server-error": "Arama önerileri getirilemedi",
+ "translate-tes-group-not-found": "Eşleşen sonuç yok",
+ "translate-tes-type-to-search": "Aramaya başlamak için yazın",
+ "supportedlanguages": "Aktif diller",
+ "supportedlanguages-summary": "Bu sayfa, {{SITENAME}} dilinde aktif dillerin bir listesini ve o dil üzerinde çalışan çevirmenlerin isimleriyle birlikte gösterir.\nBir çevirmenin adı daha büyük görünür, çevirmenin daha fazla düzenlemesi katkıda bulunur.\nBir alt çizginin rengi, çevirmenin ne kadar süre önce aktif olduğunu gösterir.",
+ "supportedlanguages-colorlegend": "Renk göstergesi: Son çeviri $1 gün önce yapıldı.",
+ "supportedlanguages-portallink": "[$1] $2 - $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-sqlite-error": "SQLite desteklenmiyor",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Çevirmen}}|Çevirmenler}}: $1",
+ "supportedlanguages-recenttranslations": "son çeviriler",
+ "supportedlanguages-count": "Toplamda $1 dil.",
+ "supportedlanguages-activity": "$1: $2 düzenleme - son düzenleme $3 gün önce yapıldı",
+ "translate-supportedlanguages-cached": "Bu bilgiler $1 önce önbelleğe alındı.",
+ "translate-activelanguages-invalid-code": "\"$1\" dil kodu tanınmıyor veya çeviri için etkinleştirilmemiş.",
+ "abusefilter-edit-builder-vars-translate-source-text": "Çeviri biriminin kaynak metni",
+ "abusefilter-edit-builder-vars-translate-target-language": "Çeviri için hedef dil",
+ "translate-jssti-add": "Listeye ekle",
+ "managemessagegroups": "İleti grubu yönetimi",
+ "translate-smg-notallowed": "Bu eylemi yürütmeye izniniz yok.",
+ "translate-smg-nochanges": "İşlenecek herhangi bir değişiklik yok.",
+ "translate-smg-submit": "Değişiklikleri işlemek için gönder",
+ "translate-smg-submitted": "İleti tanımları güncellendi. Değişiklikler arka planda işleniyor.",
+ "translate-smg-submitted-with-failure": "Aşağıdaki {{PLURAL:$1|grup|gruplar}} için mesaj {{PLURAL:1|tanımı|tanımları}} güncellenemedi - $2. $3",
+ "translate-smg-submitted-others-processing": "Diğer gruplar için mesaj tanımları arka planda işleniyor.",
+ "translate-smg-more": "Bu değişiklikleri gönderdikten sonra işlemek için daha fazla değişiklik olacak.",
+ "translate-smg-left": "Vikideki ileti içeriği",
+ "translate-smg-right": "Gelen değişiklikler",
+ "translate-smg-rename-select": "Seç",
+ "translate-smg-rename-cancel": "İptal",
+ "translate-smg-rename-search": "Eşleşen mesajı ara...",
+ "translate-smg-rename-select-err": "Lütfen yeniden adlandırılacak bir mesaj seçin",
+ "translate-smg-rename-no-msg": "Mesaj bulunamadı.",
+ "translate-smg-rename-new": "Yeni olarak ekle...",
+ "translate-smg-rename-rename": "Şunun adı olarak ekle...",
+ "translate-smg-rename-dialog-title": "$1 için eşleşen yeniden adlandırmayı seçin",
+ "translate-smg-changeset-modified": "Değişiklik kümesi başka bir kullanıcı veya işlem tarafından değiştirildi. Değişikliklerinizi geçersiz kılabileceği için değişiklikleriniz yayınlanamıyor. En son değişiklikleri görmek için lütfen sayfayı yeniden yükleyin.",
+ "translate-smg-no-groups-in-sync": "Şu anda senkronizasyonda grup yok",
+ "translate-smg-strong-sync-help": "Yardım",
+ "translate-smg-groups-in-sync": "Şu anda senkronizasyonda olan gruplar",
+ "translate-smg-groups-in-sync-list": "Arka planda şu anda işlenmekte olan grupların listesi:",
+ "translate-smg-groups-with-error-title": "Eşzamanlama sırasında hata alan gruplar",
+ "translate-smg-groups-with-error-desc": "Senkronizasyon sırasında hata veren grupların ve mesajlarının listesi:",
+ "translate-smg-group-with-error-summary": "$1 hatalı {{PLURAL:$1|mesaj|mesaj}}:",
+ "translate-smg-group-message-action-history": "Geçmiş",
+ "translate-smg-group-action-resolve": "Çözümlendi olarak işaretle",
+ "translate-smg-group-sync-error-warn": "Bu grupta senkronizasyon sırasında bir hata oluştu. Lütfen bu grubu işlemeden önce hataları düzeltin.",
+ "translate-smg-group-message-tag-outdated": "Eski",
+ "translate-smg-group-message-tag-rename": "Yeniden adlandır",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|Etiket|Etiket}}:",
+ "translate-smg-group-message-message-content": "İçerik:",
+ "translate-smg-group-message-message-target": "Hedef:",
+ "translate-smg-group-message-message-replacement": "Değiştirilecek metin:",
+ "translate-smg-group-message-message-other-langs": "Diğer diller:",
+ "translate-smg-loading": "Yükleniyor...",
+ "translate-smg-unknown-error": "İsteğiniz işlenirken bilinmeyen bir hata oluştu.",
+ "translate-manage-import-diff": "$1 iletisi | Eylemler: $2",
+ "translate-manage-import-new": "Yeni ileti: $1",
+ "translate-manage-import-deleted": "Silinmiş ileti: $1",
+ "translate-manage-action-import": "İçe aktar",
+ "translate-manage-action-conflict": "İçe aktar ve hatalı (fuzzy) olarak işaretle",
+ "translate-manage-action-ignore": "Yoksay",
+ "translate-manage-action-fuzzy": "Çevirileri içe al ve eski (fuzzy) yap",
+ "translate-manage-action-rename-fuzzy": "Yeniden adlandırın ve çevirileri eski (fuzzy) yap",
+ "translate-manage-action-rename": "Yeniden adlandır",
+ "translate-manage-action-ignore-change": "Çeviri değişikliğini yoksay",
+ "translate-manage-nochanges": "Bu grup için ileti tanımlarında herhangi bir değişiklik yok.",
+ "translate-manage-nochanges-other": "Bu dil için değişiklik yapılmadı.\nGrup detayları görünümüne dönmek için aşağıdaki bağlantıyı kullanın.",
+ "translate-manage-inconsistent": "İstekte tutarsızlık algılandı.\nLütfen değişiklikleri gözden geçirin ve yeniden deneyin.\nAyrıntılar: $1.",
+ "translate-manage-toolong": "İşlemin azami süresi $1 saniye aşıldı.\nİşleme devam etmek için lütfen formu yeniden gönderin.",
+ "translate-manage-import-summary": "Dış bir kaynaktan yeni bir sürüm içe aktarılıyor",
+ "translate-manage-import-ignore": "$1 mesajı atlanıyor.",
+ "translate-manage-import-rename-summary": "Harici kaynak olarak yeniden adlandırıldı",
+ "translate-manage-conflict-summary": "Dış bir kaynaktan yeni bir sürüm içe aktarılıyor.\nLütfen kontrol edin.",
+ "translate-manage-submit": "Yürüt",
+ "translate-manage-intro-other": "Aşağıda $1 dilindeki çeviri değişikliklerinin listesi bulunmaktadır.\nLütfen değişiklikleri inceleyin ve her güncelleme için yapmak istediğiniz işlemi seçin.\nDeğişiklikleri yoksaymayı seçerseniz, bu işlem yalnızca geçicidir.",
+ "translate-manage-import-ok": "İçe aktarılan: $1",
+ "translate-manage-import-done": "İçe aktarma tamamlandı!",
+ "translate-manage-empty-content": "İçerik boştur",
+ "translate-manage-key-reused": "Bu mesaj vikide zaten var. Eski bir anahtarın yanlışlıkla yeniden kullanılmasını kontrol edin.",
+ "translate-manage-source-message-not-found": "İleti açıklaması bulunamadı",
+ "importtranslations": "Çevirileri içe aktar",
+ "translate-import-from-local": "Yerel dosya yükleme:",
+ "translate-import-load": "Dosya yükle",
+ "translate-import-err-dl-failed": "Dosya alınamıyor:\n$1",
+ "translate-import-err-ul-failed": "Dosya yükleme başarısız oldu",
+ "translate-import-err-invalid-title": "Sağlanan dosya adı <nowiki>$1</nowiki> geçersiz.",
+ "translate-import-err-no-such-file": "<nowiki>$1</nowiki> dosyası mevcut değil ya da yerel olarak yüklenmiş.",
+ "translate-import-err-stale-group": "Bu dosyanın ait olduğu ileti grubu mevcut değil.",
+ "translate-import-err-no-headers": "Dosya Çeviri uzantısı biçiminde iyi biçimlendirilmiş bir Gettext dosyası değil:\nİleti grubu ve dil dosya başlığından belirlenemiyor.",
+ "translate-js-support-unsaved-warning": "Yayımlanmamış çevirileriniz var.",
+ "translate-gs-pos": "Kon.",
+ "translate-gs-code": "Kod",
+ "translate-gs-continent": "Kıta",
+ "translate-gs-speakers": "Konuşanlar",
+ "translate-gs-score": "Puan",
+ "translate-gs-multiple": "Çoklu",
+ "translate-gs-count": "Sayı",
+ "translate-gs-total": "Toplam",
+ "translate-gs-avgscore": "Ort. skor",
+ "translate-documentation-language": "İleti belgelemesi",
+ "translate-searchprofile": "Çeviriler",
+ "translate-searchprofile-tooltip": "Tüm çevirilerde ara",
+ "translate-searchprofile-note": "[$1 Çeviri araması] ile daha fazla arama seçenekleri mevcuttur.",
+ "translate-search-languagefilter": "Dile göre filtre uygula:",
+ "translate-search-nofilter": "Filtre yok",
+ "log-name-translationreview": "Çeviri inceleme günlüğü",
+ "log-description-translationreview": "Tüm yorumların çevirilere ve mesaj gruplarına kaydedilmesi.",
+ "logentry-translationreview-message": "$1, $3 çevirisini {{GENDER:$2|inceledi}}",
+ "logentry-translationreview-group": "$1, $3 sayfasından $4 çevirileri $6 ile $7 {{GENDER:$2|değiştirdi}}",
+ "group-translate-sandboxed": "Onaylanmamış çevirmenler",
+ "group-translate-sandboxed-member": "{{GENDER:$1|onaylanmamış çevirmen}}",
+ "right-translate-sandboxmanage": "Deneme tahtası yapılan kullanıcılarını yönet",
+ "action-translate-sandboxmanage": "deneme tahtası yapılan kullanıcılarını yönet",
+ "right-translate-sandboxaction": "Deneme tahtası yapılan kullanıcıları için izin verilen işlemleri yürütün",
+ "action-translate-sandboxaction": "deneme tahtası yapılan kullanıcıları için izin verilen işlemleri yürütme",
+ "translate-workflow-state-": "(ayarlanmamış)",
+ "translate-workflowstatus": "Durum: $1",
+ "translate-workflow-set-doing": "Ayarlanıyor...",
+ "translate-workflow-autocreated-summary": "$1 iş akışı durumu için otomatik sayfa oluşturma",
+ "translate-stats-workflow": "Durum",
+ "translate-workflowgroup-label": "İş akışı durumları",
+ "translate-workflowgroup-desc": "Bu ileti grubu çeviri iş akışı durumlarını gösterir.\nDurumlar $wgTranslateWorkflowStates yapılandırma değişkeninde tanımlanır.",
+ "translate-dynagroup-recent-label": "Son çeviriler",
+ "translate-dynagroup-recent-desc": "Bu ileti grubu, bu dildeki bütün son çevirileri gösterir.\nGörevleri incelemek için çok kullanışlıdır.",
+ "translate-dynagroup-additions-label": "Son eklemeler",
+ "translate-dynagroup-additions-desc": "Bu mesaj grubu, yeni veya değiştirilen mesajları göstermektedir.",
+ "translate-msggroupselector-projects": "İleti grubu",
+ "translate-msggroupselector-search-placeholder": "Grupları ara",
+ "translate-msggroupselector-search-all": "Hepsi",
+ "translate-msggroupselector-search-recent": "Son",
+ "translate-msggroupselector-view-subprojects": "$1 alt grup",
+ "tux-languageselector": "Şu dile çevir",
+ "tux-select-target-language": "Çeviri için hedef dil",
+ "tux-tab-all": "Hepsi",
+ "tux-tab-untranslated": "Çevrilmemiş",
+ "tux-tab-outdated": "Eski",
+ "tux-tab-translated": "Çevrildi",
+ "tux-tab-unproofread": "İncelenmemiş",
+ "tux-edit": "Düzenle",
+ "tux-status-optional": "İsteğe bağlı",
+ "tux-status-fuzzy": "Eski",
+ "tux-status-proofread": "İncelenmiş",
+ "tux-status-translated": "Çevrildi",
+ "tux-status-saving": "Yayımlanıyor...",
+ "tux-status-unsaved": "Yayımlanmadı",
+ "tux-save-unknown-error": "Bilinmeyen hata oluştu.",
+ "tux-editor-placeholder-documentation": "Mesaj belgelemesini ekle",
+ "tux-editor-placeholder-language": "$1 diline çevirin",
+ "tux-editor-editsummary-placeholder": "İsteğe bağlı özet",
+ "tux-editor-paste-original-button-label": "Kaynak metni yapıştır",
+ "tux-editor-discard-changes-button-label": "Değişiklikleri çıkar",
+ "tux-editor-save-button-label": "Çeviriyi yayımla",
+ "tux-editor-skip-button-label": "Sonrakine geç",
+ "tux-editor-cancel-button-label": "İptal",
+ "tux-editor-confirm-button-label": "Çeviriyi onayla",
+ "tux-editor-proofread-button-label": "İncelendi olarak işaretle",
+ "tux-editor-shortcut-info": "Onaylamak ve bir sonraki mesaja geçmek için \"$1\", atlamak için \"$2\", özet vermek için \"$4\" tuşuna basın veya diğer kısayolları görmek için \"$3\" düğmesini basılı tutun.",
+ "tux-editor-edit-desc": "Belgeyi düzenle",
+ "tux-editor-add-desc": "Belge ekle",
+ "tux-editor-suggestions-title": "Öneriler",
+ "tux-editor-latest-updates-title": "Son düzenlemeler",
+ "tux-editor-all-changes": "Tüm değişiklikler",
+ "tux-editor-in-other-languages": "Diğer dillerde",
+ "tux-editor-need-more-help": "Daha fazla yardıma mı ihtiyacınız var?",
+ "tux-editor-ask-help": "Daha fazla bilgi için sorun",
+ "tux-editor-tm-match": "%$1 benzer",
+ "tux-notices-more": "$1 daha",
+ "tux-notices-hide": "gizle",
+ "tux-editor-save-failed": "Çeviriyi yayımlama başarısız oldu: $1",
+ "tux-editor-n-uses": "$1 kere kullanıldı",
+ "tux-editor-message-desc-more": "Daha fazla göster",
+ "tux-editor-message-desc-less": "Daha az göster",
+ "tux-editor-clear-translated": "Çevrilenleri gizle",
+ "tux-editor-proofreading-mode": "İncele",
+ "tux-editor-translate-mode": "Liste",
+ "tux-editor-proofreading-hide-own-translations": "Çevirilerinizi gizle",
+ "tux-editor-proofreading-show-own-translations": "Çevirilerinizi göster",
+ "tux-proofread-action-tooltip": "İncelendi olarak işaretle",
+ "tux-proofread-edit-label": "Düzenle",
+ "tux-editor-page-mode": "Sayfa",
+ "tux-editor-outdated-notice": "Bu çevirinin güncellenmesi gerekebilir.",
+ "tux-editor-outdated-notice-diff-link": "Farkları göster",
+ "tux-editor-doc-editor-placeholder": "İleti belgelemesi",
+ "tux-editor-doc-editor-save": "Belgeyi yayımla",
+ "tux-editor-doc-editor-cancel": "İptal",
+ "tux-messagetable-more-messages": "$1 tane daha ileti",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|İleti|İletiler}} yükleniyor...",
+ "tux-message-filter-placeholder": "Filtre listesi",
+ "tux-message-filter-result": "\"$2\" için $1 sonuç bulundu",
+ "tux-message-filter-advanced-button": "Gelişmiş arama",
+ "tux-message-filter-optional-messages-label": "İsteğe bağlı iletiler",
+ "tux-proofread-translated-by-self": "Sizin tarafınızdan çevrildi",
+ "tux-empty-list-all": "Bu ileti grubu boştur",
+ "tux-empty-list-all-guide": "Çevirmek için farklı bir ileti grubu seçin",
+ "tux-translate-page-no-such-group": "<strong>Belirtilen grup mevcut değil.</strong> Farklı bir mesaj grubu seçin.",
+ "tux-empty-list-translated": "Hiçbir çevrilmiş ileti yok",
+ "tux-empty-list-translated-guide": "Çeviriye yardımcı olabilirsiniz",
+ "tux-empty-list-translated-action": "Çevir",
+ "tux-empty-no-messages-to-display": "Gösterilecek mesaj yok.",
+ "tux-empty-there-are-optional": "Listede gösterilmeyen isteğe bağlı mesajlar var",
+ "tux-empty-show-optional-messages": "İsteğe bağlı iletileri göster",
+ "tux-empty-no-outdated-messages": "Eski ileti yok",
+ "tux-empty-nothing-to-proofread": "İncelemek bir şey yok",
+ "tux-empty-you-can-help-providing": "Yeni çeviriler sağlayarak yardımcı olabilirsiniz",
+ "tux-empty-nothing-new-to-proofread": "İncelemek için yeni bir şey yok",
+ "tux-empty-you-can-review-already-proofread": "Başkaları tarafından incelenen çevirileri inceleyebilirsiniz.",
+ "tux-empty-list-other": "Çevirecek bir şey yok",
+ "tux-empty-list-other-guide": "Mevcut çevirileri incelemede yardımcı olabilirsiniz",
+ "tux-empty-list-other-action": "Çevirileri incele",
+ "tux-empty-list-other-link": "Bütün iletileri göster",
+ "tux-editor-close-tooltip": "Kapat",
+ "tux-editor-expand-tooltip": "Genişlet",
+ "tux-editor-collapse-tooltip": "Daralt",
+ "tux-editor-message-tools-show-editor": "Viki editöründe göster",
+ "tux-editor-message-tools-history": "Geçmiş",
+ "tux-editor-message-tools-delete": "Sil",
+ "tux-editor-message-tools-translations": "Bütün çeviriler",
+ "tux-editor-message-tools-linktothis": "Bu iletinin bağlantısı",
+ "tux-editor-loading": "Yükleniyor...",
+ "tux-editor-loading-failed": "Çeviri yardımcıları yüklenemedi: $1",
+ "translate-search-more-languages-info": "$1 tane daha dil",
+ "translate-statsbar-tooltip": "%$1 çevrildi, %$2 incelendi",
+ "translate-statsbar-tooltip-with-fuzzy": "%$1 çevrildi, %$2 incelendi, %$3 eski",
+ "translate-search-more-groups-info": "$1 tane daha grup",
+ "translate-syntax-error": "Çeviri, sözdizim hataları içeriyor",
+ "tux-session-expired": "Artık oturum açmadınız. Lütfen ayrı bir sekmede giriş yapın. Alternatif olarak, kaydedilmemiş çevirilerin bir kopyasını oluşturun, oturum açın, bu sayfaya geri dönün ve çevirilerinizi tekrar girin.",
+ "tux-nojs": "Bu araç JavaScript olmadan çalışmaz. JavaScript devre dışı, çalışmıyor veya bu tarayıcı desteklenmiyor.",
+ "specialpages-group-translation": "Çeviri",
+ "content-model-translate-messagebundle": "Çevrilebilir mesaj paketi",
+ "translate-messagebundle-validation-error": "Geçersiz mesaj paketi: $1",
+ "translate-messagebundle-error-invalid-array": "İleti paketi bir JSON nesnesi olmalıdır. $1 yazın var",
+ "translate-messagebundle-error-key-empty": "İleti paketi boş bir anahtar içermemelidir",
+ "translate-messagebundle-error-key-too-long": "\"$1\" anahtarı çok uzun",
+ "translate-messagebundle-error-key-invalid-characters": "\"$1\" anahtarı, izin verilmeyen karakterler içeriyor",
+ "translate-messagebundle-error-invalid-value": "\"$1\" anahtarı dize değeri içermiyor",
+ "translate-messagebundle-error-empty-value": "\"$1\" anahtarının bir değeri yok",
+ "translate-messagebundle-group-description": "[[$2|$1]] sayfasında tanımlanan bir mesaj paketinin mesajları.",
+ "log-action-filter-translationreview": "Eylem türü:"
+}
diff --git a/Translate/i18n/core/tru.json b/Translate/i18n/core/tru.json
new file mode 100644
index 00000000..12e676ff
--- /dev/null
+++ b/Translate/i18n/core/tru.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ariyo"
+ ]
+ },
+ "translate-page-language": "Leşono",
+ "translate-language": "Leşono",
+ "translate-mgs-column-language": "Leşono"
+}
diff --git a/Translate/i18n/core/trv.json b/Translate/i18n/core/trv.json
new file mode 100644
index 00000000..0c0949ab
--- /dev/null
+++ b/Translate/i18n/core/trv.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Iyuqciyang"
+ ]
+ },
+ "translate-documentation-language": "Pnegkla patas pgkla kari",
+ "tux-editor-message-tools-history": "Endaan"
+}
diff --git a/Translate/i18n/core/tt-cyrl.json b/Translate/i18n/core/tt-cyrl.json
new file mode 100644
index 00000000..d4b5fac1
--- /dev/null
+++ b/Translate/i18n/core/tt-cyrl.json
@@ -0,0 +1,211 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ajdar",
+ "Himiq Dzyu",
+ "Timming",
+ "Ерней",
+ "Ильнар"
+ ]
+ },
+ "translate": "Тәрҗемә",
+ "translate-extensionname": "Тәрҗемә",
+ "translate-desc": "MediaWiki һәм башка программалар тәрҗемә итү өчен [[Special:Translate|Махсус бит]]",
+ "translate-taction-translate": "Тәрҗемә",
+ "translate-taction-proofread": "Тикшерү",
+ "translate-taction-lstats": "Тел статистикасы",
+ "translate-taction-mstats": "Хәбәрләр тупламы статистикасы",
+ "translate-taction-export": "Чыгару",
+ "translate-page-no-such-group": "Туплам дөрес күрсәтелмәгән",
+ "translate-page-disabled": "Әлеге бүлектә бу тел буенча тәрҗемәләр ябылган. Сәбәбе:\n\n<em>$1</em>",
+ "translate-page-settings-legend": "Көйләнмәләр",
+ "translate-page-group": "Туплам",
+ "translate-page-language": "Тел",
+ "translate-page-limit": "Чикләмә",
+ "translate-page-limit-option": "Биткә $1 {{PLURAL:$1|хәбәр}}",
+ "translate-submit": "Чыгару",
+ "translate-page-navigation-legend": "Навигация",
+ "translate-page-showing": "$3 мәкалә арасыннан $1 алып $2 кадәр күрсәтелгән.",
+ "translate-page-showing-all": "$1 {{PLURAL:$1|хәбәр}} күрсәтелгән.",
+ "translate-page-showing-none": "Күрсәтү өчен хәбәрләр юк.",
+ "translate-next": "киләсе бит",
+ "translate-prev": "алдагы бит",
+ "translate-page-description-legend": "Туплам турында мәгълүмат",
+ "translate-page-edit": "үзгәртү",
+ "translate-optional": "(мәҗбүри түгел)",
+ "translate-ignored": "(игътибарга алынмай)",
+ "translate-edit-title": "\"$1\" битен үзгәртү",
+ "translate-edit-definition": "Хәбәрнең билгеләмәсе",
+ "translate-edit-contribute": "үзгәртү",
+ "translate-edit-information": "Хәбәр турында мәгълүмат ($1)",
+ "translate-edit-warnings": "Тулы булмаган тәрҗемәләр турында искәрмә",
+ "translate-edit-tmmatch": "$1% туры килү",
+ "translate-export-form-format": "Формат",
+ "translate-checks-parameters": "Түбәндәге {{PLURAL:$2|параметр|параметрлар}} кулланылмый:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "Түбәндәге {{PLURAL:$2|параметр|параметрлар}} билгесез:\n<strong>$1</strong>",
+ "translate-pref-editassistlang": "Ярдәмчел телләр:",
+ "prefs-translate": "Тәрҗемә көйләнмәләре",
+ "right-translate-messagereview": "Тәрҗемәләрне тикшерү",
+ "translate-rcfilters-translations": "Тәрҗемәләр",
+ "translate-rcfilters-translations-only-label": "Тәрҗемәләр",
+ "translate-rcfilters-translations-filter-label": "Тәрҗемәләр түгел",
+ "translate-rcfilters-translations-site-label": "Сайт хәбәрләре",
+ "translate-rc-translation-filter": "Тәрҗемәләрне сөзү:",
+ "translationstats": "Тәрҗемәләр статистикасы",
+ "translate-stats-edits": "Төзәтмәләр",
+ "translate-stats-users": "Тәрҗемәчеләр",
+ "translate-stats-registrations": "Теркәлүләр",
+ "translate-stats-reviews": "Тикшерүләр",
+ "translate-stats-reviewers": "Тикшерүчеләр",
+ "translate-statsf-width": "Киңлек (нкт):",
+ "translate-statsf-height": "Биеклек (нкт):",
+ "translate-statsf-start": "Башлау вакыты:",
+ "translate-statsf-scale": "Җентекләү:",
+ "translate-statsf-scale-months": "Айлар",
+ "translate-statsf-scale-weeks": "Атналар",
+ "translate-statsf-scale-days": "Көннәр",
+ "translate-statsf-scale-hours": "Сәгатьләр",
+ "translate-statsf-count": "Үлчәм:",
+ "translate-statsf-count-edits": "Төзәтмәләр саны",
+ "translate-statsf-count-registrations": "Яңа кулланучылар",
+ "translate-statsf-count-reviews": "Тәрҗемә тикшерүчеләре",
+ "translate-statsf-count-reviewers": "Тикшерүчеләр",
+ "translate-statsf-language": "Тел кодлары өтер аша:",
+ "translate-statsf-group": "Туплам кодлары өтер аша:",
+ "translate-statsf-submit": "Алдан карау",
+ "translate-sidebar-alltrans": "Башка телләрдә",
+ "translations": "Барлык тәрҗемәләр",
+ "translate-translations-count": "{{PLURAL:$1|бер генә тәрҗемә|$1 тәрҗемә}} табылды.",
+ "translate-translations-fieldset-title": "Хәбәр",
+ "translate-translations-messagename": "Исем:",
+ "translate-translations-project": "Проект:",
+ "translate-translations-history-short": "т.",
+ "languagestats": "Тел статистикасы",
+ "languagestats-summary": "Бу биттә бирелгән тел өчен тәрҗемәләр статистикасы бирелә.",
+ "languagestats-stats-for": "$1 ($2) өчен тәрҗемә статистикасы.",
+ "languagestats-recenttranslations": "соңгы тәрҗемәләр",
+ "translate-langstats-incomplete": "Бу биттәге кайбер статистик мәгълүматлар тулы түгел. Тулы мәгълүматлар алыр өчен, битне яңартыгыз (обновите).",
+ "translate-langstats-expand": "ачу",
+ "translate-langstats-collapse": "төрү",
+ "translate-langstats-expandall": "барысын да ачу",
+ "translate-langstats-collapseall": "барысын да төрү",
+ "translate-language-code": "Телнең коды",
+ "translate-language-code-field-name": "Телнең коды:",
+ "translate-suppress-complete": "Тулысынча тәрҗемә ителгән хәбәр тупламнарын күрсәтмәскә",
+ "translate-ls-noempty": "Тулысынча тәрҗемә ителмәгән хәбәр тупламнарын күрсәтмәскә",
+ "translate-language": "Тел",
+ "translate-total": "Хәбәрләр",
+ "translate-untranslated": "Тәрҗемә ителмәгәннәре",
+ "translate-percentage-complete": "Башкарылган эш",
+ "translate-percentage-fuzzy": "Искергән",
+ "translate-percentage-proofread": "Тикшерелгән",
+ "translate-languagestats-overall": "Барлык төркемнәрнең хәбәрләре",
+ "translate-ls-submit": "Статистиканы күрсәтү",
+ "translate-ls-column-group": "Хәбәрләр тупламы",
+ "translate-mgs-pagename": "Хәбәрләр тупламы статистикасы",
+ "translate-mgs-group": "Хәбәрләр тупламы:",
+ "translate-mgs-submit": "Статистиканы күрсәтү",
+ "translate-mgs-column-language": "Тел",
+ "translate-mgs-totals": "Барлык $1 {{PLURAL:$1|тел}} бергә",
+ "supportedlanguages": "Кулланышлы телләр",
+ "supportedlanguages-portallink": "[$1] $2 — $3",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Тәрҗемәче}}|Тәрҗемәчеләр}}: $1",
+ "supportedlanguages-recenttranslations": "соңгы тәрҗемәләр",
+ "supportedlanguages-count": "Барлыгы $1 {{PLURAL:$1|тел}}.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|төзәтмә}} — соңгы төзәтмә $3 {{PLURAL:$3|көн}} элек",
+ "translate-jssti-add": "Исемлеккә өстәү",
+ "translate-smg-rename-cancel": "Кире алу",
+ "translate-manage-action-import": "Кертү",
+ "translate-manage-action-ignore": "Игнор",
+ "translate-manage-submit": "Башкару",
+ "translate-import-load": "Файлны төяү",
+ "translate-gs-pos": "Урын",
+ "translate-gs-code": "Код",
+ "translate-gs-continent": "Җир йөзе кисәге",
+ "translate-gs-speakers": "Сөйләшүчеләр",
+ "translate-gs-score": "Бәя",
+ "translate-gs-multiple": "Берничә",
+ "translate-gs-count": "Микъдар",
+ "translate-gs-total": "Барлыгы",
+ "translate-gs-avgscore": "Уртача бәя",
+ "translate-documentation-language": "Хәбәр документациясе",
+ "translate-searchprofile": "Тәрҗемәләр",
+ "translate-workflow-state-": "(билгеләнмәгән)",
+ "translate-workflowstatus": "Статусы: $1",
+ "translate-workflow-set-doing": "Урнаштыру...",
+ "translate-stats-workflow": "Статусы",
+ "translate-dynagroup-recent-label": "Яңа тәрҗемәләр",
+ "translate-dynagroup-additions-label": "Соңгы өстәлмәләр",
+ "translate-msggroupselector-projects": "Хәбәрләр тупламы",
+ "translate-msggroupselector-search-placeholder": "Төркемнәрне эзләү",
+ "translate-msggroupselector-search-all": "Барысы",
+ "translate-msggroupselector-search-recent": "Соңгы",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|төркемчә}}",
+ "tux-languageselector": "Тәрҗемә итү теле",
+ "tux-tab-all": "Барысы",
+ "tux-tab-untranslated": "Тәрҗемә ителмәгәннәре",
+ "tux-tab-outdated": "Искергәннәре",
+ "tux-tab-translated": "Тәрҗемә ителгәннәре",
+ "tux-tab-unproofread": "Тикшерелмәгән",
+ "tux-edit": "Үзгәртү",
+ "tux-status-optional": "Мәҗбүри түгел",
+ "tux-status-fuzzy": "Искергән",
+ "tux-status-proofread": "Тикшерелгән",
+ "tux-status-translated": "Тәрҗемә ителгән",
+ "tux-status-saving": "Бастырып чыгару бара…",
+ "tux-status-unsaved": "Сакланмаган",
+ "tux-editor-editsummary-placeholder": "Мәҗбүри булмаган тасвирлама",
+ "tux-editor-paste-original-button-label": "Чыганак текст өстәү",
+ "tux-editor-discard-changes-button-label": "Үзгәрешләрне кире кагу",
+ "tux-editor-save-button-label": "Тәрҗемәне саклау",
+ "tux-editor-skip-button-label": "Киләсе",
+ "tux-editor-cancel-button-label": "Кире алу",
+ "tux-editor-confirm-button-label": "Тәрҗемәне раслау",
+ "tux-editor-proofread-button-label": "Тикшерелгән итеп билгеләү",
+ "tux-editor-edit-desc": "Документацияне үзгәртү",
+ "tux-editor-add-desc": "Документация өстәү",
+ "tux-editor-suggestions-title": "Ярдәм",
+ "tux-editor-in-other-languages": "Башка телләрдә",
+ "tux-editor-need-more-help": "Ярдәм кирәкме?",
+ "tux-editor-ask-help": "Тулырак мәгълүмат сорау",
+ "tux-editor-tm-match": "$1% туры килү",
+ "tux-notices-more": "{{PLURAL:$1|тагын $1}}",
+ "tux-notices-hide": "яшерү",
+ "tux-editor-n-uses": "$1 {{PLURAL:$1|тапкыр}} кулланылды",
+ "tux-editor-message-desc-more": "Тулырак мәгълүмат",
+ "tux-editor-message-desc-less": "Азрак күрсәтү",
+ "tux-editor-clear-translated": "Тәрҗемәләрне яшерү",
+ "tux-editor-proofreading-mode": "Тикшерү",
+ "tux-editor-translate-mode": "Исемлек",
+ "tux-proofread-edit-label": "Үзгәртү",
+ "tux-editor-page-mode": "Бит",
+ "tux-editor-outdated-notice": "Бәлки бу тәрҗемәгә яңарту кирәктер.",
+ "tux-editor-outdated-notice-diff-link": "Аермаларны күрсәтү",
+ "tux-editor-doc-editor-placeholder": "хәбәр документациясе",
+ "tux-editor-doc-editor-save": "Документацияне саклау",
+ "tux-editor-doc-editor-cancel": "Кире алу",
+ "tux-messagetable-more-messages": "Тагын $1 {{PLURAL:$1|хәбәр}}",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|Хәбәр|Хәбәрләр}} төялә…",
+ "tux-message-filter-placeholder": "Исемлекне сөзү",
+ "tux-empty-list-translated": "Тәрҗемә ителгән хәбәрләр юк",
+ "tux-empty-list-translated-action": "Тәрҗемә итү",
+ "tux-empty-nothing-to-proofread": "Тикшерү өчен берни дә юк",
+ "tux-empty-list-other": "Тәрҗемә итәргә бернәрсә дә юк",
+ "tux-empty-list-other-action": "Тәрҗемәләрне тикшерү",
+ "tux-empty-list-other-link": "Барлык хәбәрләрне күрсәтү",
+ "tux-editor-close-tooltip": "Ябу",
+ "tux-editor-expand-tooltip": "Ачу",
+ "tux-editor-collapse-tooltip": "Төрү",
+ "tux-editor-message-tools-show-editor": "Вики-төзәткечтә ачу",
+ "tux-editor-message-tools-history": "Тарих",
+ "tux-editor-message-tools-delete": "Бетерү",
+ "tux-editor-message-tools-translations": "Барлык тәрҗемәләр",
+ "tux-editor-message-tools-linktothis": "Бу хәбәргә сылтама",
+ "tux-editor-loading": "Төяү бара…",
+ "translate-search-more-languages-info": "тагын $1 {{PLURAL:$1|тел}}",
+ "translate-statsbar-tooltip": "$1% тәрҗемә ителгән, $2% тикшерелгән",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% тәрҗемә ителгән, $2% тикшерелгән, $3% искергән",
+ "translate-search-more-groups-info": "тагын $1 {{PLURAL:$1|туплам}}",
+ "translate-syntax-error": "Тәрҗемәдә синтаксик хаталар бар",
+ "specialpages-group-translation": "Тәрҗемә"
+}
diff --git a/Translate/i18n/core/tt-latn.json b/Translate/i18n/core/tt-latn.json
new file mode 100644
index 00000000..69fb8af7
--- /dev/null
+++ b/Translate/i18n/core/tt-latn.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Frhdkazan"
+ ]
+ },
+ "translate-sidebar-alltrans": "Başqa tellärdä",
+ "translations": "Bar tärcemälär",
+ "supportedlanguages": "Qullanıluçı tellär",
+ "translate-documentation-language": "Xäbär dokumentatsiäse"
+}
diff --git a/Translate/i18n/core/tum.json b/Translate/i18n/core/tum.json
new file mode 100644
index 00000000..b23fbdb6
--- /dev/null
+++ b/Translate/i18n/core/tum.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Tumbuka Arch"
+ ]
+ },
+ "translate": "Masulila",
+ "translate-documentation-language": "Uthenga wakalembelo"
+}
diff --git a/Translate/i18n/core/tw.json b/Translate/i18n/core/tw.json
new file mode 100644
index 00000000..3ccc75c7
--- /dev/null
+++ b/Translate/i18n/core/tw.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Afia360",
+ "Robertjamal12"
+ ]
+ },
+ "translate-tes-type-to-search": "Twerɛ na hyɛaseɛ hwehwɛ",
+ "translate-documentation-language": "Nkratoɔ nkyerɛkyerɛmu"
+}
diff --git a/Translate/i18n/core/tyv.json b/Translate/i18n/core/tyv.json
new file mode 100644
index 00000000..b6c31368
--- /dev/null
+++ b/Translate/i18n/core/tyv.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Agilight",
+ "Монгуш Салим"
+ ]
+ },
+ "translate-edit-title": "\"$1\" өскертир",
+ "translate-stats-edits": "Эдилгелер",
+ "translate-documentation-language": "Дыңнадыгның документилели",
+ "tux-edit": "Эдер",
+ "tux-proofread-edit-label": "Эдер",
+ "specialpages-group-translation": "Очулга"
+}
diff --git a/Translate/i18n/core/tzm.json b/Translate/i18n/core/tzm.json
new file mode 100644
index 00000000..418a053d
--- /dev/null
+++ b/Translate/i18n/core/tzm.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "Tifinaghes"
+ ]
+ },
+ "translate": "ⵜⴰⵙⵓⵖⵍⵜ",
+ "translate-page-language": "ⵜⵓⵜⵍⴰⵢⵜ",
+ "translate-rc-translation-filter-no": "ⴰⵡⵔ ⵜⵙⴽⵔⴷ ⴰⵎⵢⴰ",
+ "translate-stats-users": "ⵉⵎⵙⵓⵖⵍⵏ",
+ "translate-stats-registrations": "ⵉⵣⵎⵎⴻⵎⵏ",
+ "translate-statsf-scale-months": "ⴰⵢⵢⵓⵔⵏ",
+ "translate-statsf-scale-weeks": "ⵉⵎⴰⵍⴰⵙⵙⵏ",
+ "translate-statsf-scale-days": "ⵓⵙⵙⴰⵏ",
+ "translate-statsf-scale-hours": "ⵜⵉⵙⵔⴰⴳⵉⵏ",
+ "translate-sidebar-alltrans": "ⵙ ⵜⵓⵜⵍⴰⵢⵉⵏ ⵢⴰⴹⵏ (ⵏⵏⵉⴹⵏ)",
+ "translations": "ⵎⴰⵕⵕⴰ ⵜⵉⵙⵓⵖⴰⵍⵉⵏ",
+ "translate-translations-project": "ⴰⵙⵏⴼⴰⵔ:",
+ "translate-language": "ⵜⵓⵜⵍⴰⵢⵜ",
+ "translate-total": "ⵜⵉⴱⵔⴰⵜⵉⵏ",
+ "translate-ls-column-group": "ⵜⴰⴱⵔⴰⵜ ⵏ ⵜⵔⴰⴱⴱⵓⵜ",
+ "translate-mgs-group": "ⵜⴰⴱⵔⴰⵜ ⵏ ⵜⵔⴰⴱⴱⵓⵜ:",
+ "translate-mgs-column-language": "ⵜⵓⵜⵍⴰⵢⵜ",
+ "translate-manage-import-new": "ⵜⴰⴱⵔⴰⵜ ⵜⴰⵎⴰⵢⵏⵓⵜ $1",
+ "translate-gs-speakers": "ⵉⵎⵙⴰⵡⴰⵍⵏ",
+ "translate-msggroupselector-search-recent": "ⵉⵏⴳⴳⵓⵔⴰ"
+}
diff --git a/Translate/i18n/core/udm.json b/Translate/i18n/core/udm.json
new file mode 100644
index 00000000..4f4681d3
--- /dev/null
+++ b/Translate/i18n/core/udm.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Irus",
+ "Kaganer",
+ "Wadorgurt"
+ ]
+ },
+ "translate-statsf-submit": "Эскерон",
+ "translate-sidebar-alltrans": "Мукет кылъёсын",
+ "languagestats": "Кыл статистика",
+ "translate-documentation-language": "Ивортонлэн документациез",
+ "translate-msggroupselector-search-all": "Ваньзэ",
+ "tux-tab-all": "Ваньзэ",
+ "tux-editor-in-other-languages": "Мукет кылъёсын"
+}
diff --git a/Translate/i18n/core/ug-arab.json b/Translate/i18n/core/ug-arab.json
new file mode 100644
index 00000000..5d4fc05f
--- /dev/null
+++ b/Translate/i18n/core/ug-arab.json
@@ -0,0 +1,231 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alfredie",
+ "Sahran",
+ "Uzdil"
+ ]
+ },
+ "translate": "تەرجىمە",
+ "translate-desc": "MediaWiki ۋە باشقا يۇمشاق دېتاللارنى تەرجىمە قىلىدىغان [[Special:Translate|ئالاھىدە بەت]]",
+ "translate-taskui-export-to-file": "ئەسلى پىچىمىدا چىقار",
+ "translate-taskui-export-as-po": "تورسىز تەرجىمە ئۈچۈن چىقار",
+ "translate-taction-translate": "تەرجىمە",
+ "translate-taction-proofread": "تۈزىتىلدى",
+ "translate-taction-lstats": "تىل سىتاتىستىكىسى",
+ "translate-taction-mstats": "ئۇچۇر گۇرۇپپا سىتاتىستىكىسى",
+ "translate-taction-export": "چىقار",
+ "translate-taction-disabled": "بۇ مەشغۇلات مەزكۇر ۋىكىدا چەكلەنگەن",
+ "translate-page-no-such-language": "بەلگىلەنگەن تىل ئىناۋەتسىز.",
+ "translate-page-no-such-group": "بەلگىلەنگەن گۇرۇپپا ئىناۋەتسىز.",
+ "translate-page-disabled": "بۇ تىلنىڭ مەزكۇر گۇرۇپپىدىكى تەرجىمە ئىشلىرى چەكلەندى.\nسەۋەبى:\n\n<em>$1</em>",
+ "translate-language-disabled": "بۇ تىلدا تەرجىمە قىلىش چەكلەنگەن.",
+ "translate-page-settings-legend": "تەڭشەكلەر",
+ "translate-page-group": "گۇرۇپپا",
+ "translate-page-language": "تىل",
+ "translate-page-limit": "چەك",
+ "translate-page-limit-option": "ھەر بەتتە $1 {{PLURAL:$1|ئۇچۇر|ئۇچۇر}}",
+ "translate-submit": "تۇت",
+ "translate-page-navigation-legend": "يولباشچى",
+ "translate-page-showing": "$3 نىڭ $1 دىن $2 غىچە ئۇچۇرلىرىنى كۆرسەت",
+ "translate-page-showing-all": "$1 {{PLURAL:$1|ئۇچۇر|ئۇچۇر}} كۆرسەت.",
+ "translate-page-showing-none": "كۆرسىتىدىغان ئۇچۇر يوق.",
+ "translate-next": "كېيىنكى بەت",
+ "translate-prev": "ئالدىنقى بەت",
+ "translate-page-description-legend": "گۇرۇپپا ھەققىدىكى ئۇچۇر",
+ "translate-page-description-hasoptional": "بۇ ئۇچۇر گۇرۇپپىسى تاللاشچان ئۇچۇرنى ئۆز ئىچىگە ئالىدۇ.\nتاللاشچان ئۇچۇر پەقەت تىلىڭىزدا ماقالە يازغاندا بوشلۇق ئىشلەتمىسە، مەخسۇس ئاتالغۇلار تاۋۇش تەرجىمىسىدە يېزىشقا ئوخشاش ئالاھىدە تەلەپ بولغاندىلا ئاندىن تەرجىمە قىلىنىدۇ. $1",
+ "translate-page-description-hasoptional-open": "تاللاشچان ئۇچۇرلارنى كۆرسەت.",
+ "translate-page-edit": "تەھرىرلەش",
+ "translate-optional": "(تاللاشچان)",
+ "translate-ignored": "(پەرۋا قىلىنمىغان)",
+ "translate-edit-title": "تەھرىر \"$1\"",
+ "translate-edit-definition": "ئۇچۇر ئېنىقلىمىسى",
+ "translate-edit-contribute": "تۆھپە",
+ "translate-edit-no-information": "''بۇ ئۇچۇرنىڭ چۈشەندۈرۈشى يوق.''\n''ئەگەر سىز بۇ ئۇچۇرنىڭ قەيەردە ياكى قانداق ئىشلىتىلىدىغانلىقىنى بىلسىڭىز، بۇ ئۇچۇرنىڭ چۈشەندۈرۈشىنى قوشۇپ باشقا تەرجىمانلارغا ياردەم قىلالايسىز.''",
+ "translate-edit-information": "ئۇچۇر ھەققىدىكى ئۇچۇر ($1)",
+ "translate-edit-warnings": "تولۇق بولمىغان تەرجىمە ھەققىدىكى ئاگاھلاندۇرۇش",
+ "translate-edit-tmmatch-source": "تەرجىمە ئەسلى تېكىستى: $1",
+ "translate-edit-tmmatch": "$1% ماس كېلىدۇ",
+ "translate-edit-nopermission": "ئۇچۇرلارنى تەرجىمە قىلىش ھوقۇقىغا ئېرىشىڭ.",
+ "translate-edit-askpermission": "ھوقۇق ئىلتىماسى",
+ "translate-checks-parameters": "تۆۋەندىكى {{PLURAL:$2|پارامېتىر|پارامېتىر}} ئىشلىتىلمىگەن:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "تۆۋەندىكى {{PLURAL:$2|پارامېتىر|پارامېتىر}} يوچۇن:\n<strong>$1</strong>",
+ "translate-checks-balance": "پەرلەشمىگەن بىر {{PLURAL:$2|تىرناق|تىرناق}} بار:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "تۆۋەندىكى {{PLURAL:$2|ئۇلانما|$2 ئۇلانما}}دا مەسىلە بار:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "تۆۋەندىكى {{PLURAL:$2|پارامېتىر|پارامېتىر}} كەم:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "ئەسلى ئۇچۇردا <nowiki>{{PLURAL:}}</nowiki> ئىشلەتكەن ئەمما تەرجىمىدە ئىشلەتمىگەن.",
+ "translate-checks-pagename": "ئات بوشلۇقى ئېنىقلىمىدىن ئۆزگەرتىلدى",
+ "translate-checks-format": "بۇ تەرجىمە ئېنىقلىمىغا بوي سۇنمايدۇ ياكى تىلقۇرما ئىناۋەتسىز: $1",
+ "translate-checks-escape": "تۆۋەندىكى كۆچمە مەنا تاسادىپىي بولۇشى مۇمكىن: <strong>$1</strong>",
+ "translate-checks-parametersnotequal": "ماقالىدىكى پارامېتىر سانى {{PLURAL:$1|$1}}: ئەسلىدە {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> پىچىمى خاتا.",
+ "translate-checks-fudforum-syntax": "بۇ قۇرۇلۇشتىكى <nowiki>$2</nowiki> نى ئەمەس بەلكى <nowiki>$1</nowiki> نى ئىشلىتىدۇ.",
+ "translate-pref-editassistlang": "ياردەمچى تىل:",
+ "prefs-translate": "تەرجىمە تاللانما",
+ "translate-pref-editassistlang-help": "پەش بىلەن ئايرىلغان تىل كودى تىزىمى.\nتەرجىمە قىلىۋاتقان ۋاقتىڭىزدا مۇناسىپ ئۇچۇرنىڭ تەرجىمىسى بۇ تىللاردا كۆرۈنىدۇ.\nكۆڭۈلدىكى تىل تىزىمى تىلىڭىزغا باغلىق.",
+ "translate-pref-editassistlang-bad": "تىزىمدىكى ئىناۋەتسىز تىل كودى:\n<nowiki>$1</nowiki>.",
+ "right-translate": "ئىشلىتىدىغان تەرجىمە ئارايۈزى تەھرىر",
+ "right-translate-manage": "ئۇچۇر گۇرۇپپا باشقۇر",
+ "action-translate-manage": "ئۇچۇر گۇرۇپپىلارنى باشقۇر",
+ "right-translate-import": "تورسىز تەرجىمە ئەكىر",
+ "action-translate-import": "تورسىز تەرجىمەلەرنى ئەكىر",
+ "right-translate-messagereview": "تەرجىمىلەرنى كۆزدىن كەچۈر",
+ "right-translate-groupreview": "ئۇچۇر گۇرۇپپىسىنىڭ ئىش ئېقىمى ھالىتىنى ئۆزگەرت",
+ "translate-rc-translation-filter": "تەرجىمە سۈزگۈچ:",
+ "translate-rc-translation-filter-no": "مەشغۇلات قىلما",
+ "translate-rc-translation-filter-only": "تەرجىمىنىلا كۆرسەت",
+ "translate-rc-translation-filter-filter": "سۈزۈلگەن تەرجىمە",
+ "translate-rc-translation-filter-site": "بېكەت ئۇچۇرىنىلا ئۆزگەرت",
+ "translationstats": "تەرجىمە سىتاتىستىكىسى",
+ "translate-stats-edits": "تەھرىرلەش",
+ "translate-stats-users": "تەرجىمانلار",
+ "translate-stats-registrations": "خەتلىتىش",
+ "translate-stats-reviews": "باھالار",
+ "translate-stats-reviewers": "كۆزدىن كەچۈرگۈچى",
+ "translate-statsf-intro": "بۇ كۆزنەكتە ئاددىي سىتاتىستىكا سانلىق مەلۇماتىنى ھاسىل قىلايسىز.\nھەممە قىممەتلەرنىڭ يۇقىرى تۆۋەن چېكى بار.",
+ "translate-statsf-options": "گىرافىك تاللانما",
+ "translate-statsf-width": "تەڭلىكى پىكسېل:",
+ "translate-statsf-height": "ئېگىزلىكى پىكسېل:",
+ "translate-statsf-days": "كۈندىكى مەلۇم ۋاقىت:",
+ "translate-statsf-start": "باشلانغان چېسلا:",
+ "translate-statsf-scale": "دانىچە چوڭلۇقى:",
+ "translate-statsf-scale-months": "ئاي",
+ "translate-statsf-scale-weeks": "ھەپتە",
+ "translate-statsf-scale-days": "كۈن",
+ "translate-statsf-scale-hours": "سائەت",
+ "translate-statsf-count": "بىرلىك:",
+ "translate-statsf-count-edits": "تەھرىر سانى",
+ "translate-statsf-count-users": "ئاكتىپ تەرجىمانلار",
+ "translate-statsf-count-registrations": "يېڭى ئىشلەتكۈچىلەر",
+ "translate-statsf-count-reviews": "تەرجىمە كۆزدىن كەچۈرۈش",
+ "translate-statsf-count-reviewers": "كۆزدىن كەچۈرگۈچى",
+ "translate-statsf-language": "پەش بىلەن ئايرىلغان تىل تىزىملىك كودى:",
+ "translate-statsf-group": "پەش بىلەن ئايرىلغان گۇرۇپپا تىزىملىك كودى:",
+ "translate-statsf-submit": "ئالدىن كۆزەت",
+ "translate-tag-page-desc": "تەرجىمە قىلغان wiki بەت [[$2|$1]].",
+ "translate-sidebar-alltrans": "باشقا تىلاردا",
+ "translations": "ھەممە تەرجىمە",
+ "translations-summary": "ئىشلەتكىلى بولىدىغان ھەممە تەرجىمىنى كۆرۈش ئۈچۈن تۆۋەندە ئۇچۇر ئاتىنى كىرگۈزۈڭ.",
+ "translate-translations-no-message": "\"$1\" تەرجىمە قىلغىلى بولىدىغان ئۇچۇر ئەمەس",
+ "translate-translations-none": "\"$1\" نىڭ تەرجىمىسى يوق",
+ "translate-translations-count": "{{PLURAL:$1|بىر تەرجىمە|$1 تەرجىمە}} تېپىلدى.",
+ "translate-translations-fieldset-title": "ئۇچۇر",
+ "translate-translations-messagename": "ئاتى:",
+ "translate-translations-project": "قۇرۇلۇش:",
+ "translate-translations-including-no-param": "تارماق بەت پارامېتىرىدا ئىناۋەتلىك ئۇچۇر كۇنۇپكىسىدىن بىرنى بەلگىلەڭ",
+ "translate-translations-history-short": "h",
+ "languagestats": "تىل سىتاتىستىكىسى",
+ "languagestats-summary": "بۇ بەتتە نۆۋەتتىكى تىلدا ھەممە قۇرۇلۇش گۇرۇپپىلىرىنىڭ تاماملىنىش ئەھۋالىنى كۆرسىتىلىدۇ.",
+ "languagestats-stats-for": "$1 ($2) نىڭ تەرجىمە سىتاتىستىكىسى.",
+ "languagestats-recenttranslations": "يېقىنقى تەرجىمىلەر",
+ "translate-langstats-incomplete": "بۇ بەتتە بەزى سىتاتىستىكا ئۇچۇرلىرى تولۇق يۈكلەنمىگەن، مەزكۇر بەتنى يېڭىلاپ تېخىمۇ كۆپ سىتاتىستىكا ئۇچۇرىغا ئېرىشىڭ.",
+ "translate-langstats-expand": "ياي",
+ "translate-langstats-collapse": "قاتلا",
+ "translate-langstats-expandall": "ھەممىنى ياي",
+ "translate-langstats-collapseall": "ھەممىنى قاتلا",
+ "translate-language-code": "تىل كودى",
+ "translate-language-code-field-name": ":تىل كودى",
+ "translate-suppress-complete": "تولۇق تەرجىمە قىلىنغان ئۇچۇر گۇرۇپپىسىنى يوشۇر",
+ "translate-ls-noempty": "پەقەت تەرجىمە قىلىنمىغان ئۇچۇر گۇرۇپپىسىنى يوشۇر",
+ "translate-language": "تىل",
+ "translate-total": "ئۇچۇرلار",
+ "translate-untranslated": "تەرجىمە قىلىنمىغان",
+ "translate-percentage-complete": "تاماملاش",
+ "translate-percentage-fuzzy": "زاماندىن قالغان",
+ "translate-languagestats-overall": "ھەممە ئۇچۇر گۇرۇپپىلىرى بىرلىكتە",
+ "translate-ls-submit": "سىتاتىستىكا كۆرسەت",
+ "translate-ls-column-group": "ئۇچۇر گۇرۇپپىسى",
+ "translate-mgs-pagename": "ئۇچۇر گۇرۇپپا سىتاتىستىكىسى",
+ "translate-mgs-fieldset": "مايىللىقنى كۆرسەت",
+ "translate-mgs-group": "ئۇچۇر گۇرۇپپىسى:",
+ "translate-mgs-nocomplete": "تەرجىمىسى تاماملانغان تىللارنى كۆرسەتمە",
+ "translate-mgs-noempty": "ھېچقانداق تەرجىمىسى يوق تىللارنى كۆرسەتمە",
+ "translate-mgs-submit": "سىتاتىستىكا كۆرسەت",
+ "translate-mgs-column-language": "تىل",
+ "translate-mgs-totals": "ھەممە تىللار بىرلىكتە",
+ "translate-mgs-invalid-group": "بەلگىلەنگەن گۇرۇپپا $1 مەۋجۇت ئەمەس.",
+ "translate-mgs-nothing": "ئىلتىماس قىلغان سىتاتىستىكىدىن كۆرسىتىدىغان ھېچنېمە يوق.",
+ "supportedlanguages": "قوللايدىغان تىللار",
+ "supportedlanguages-summary": "بۇ بەتتە {{SITENAME}} قوللايدىغان ھەممە تىللار تىزىملىكى،\nشۇنداقلا شۇ تىلدىكى تەرجىمانلارنىڭ ئىسمى كۆرسىتىلىدۇ.\nتورنامى قانچە چوڭراق كۆرۈنگەن تەرجىماننىڭ تەھرىرلەش تۆھپىسى شۇنچە كۆپ بولىدۇ.\nئاستى سىزىقنىڭ رەڭگى تەرجىماننىڭ بۇ جايدا قانچىلىك ئاكتىپ ئىكەنلىكىنى بىلدۈرىدۇ.",
+ "supportedlanguages-colorlegend": "رەڭنىڭ مىساللىق چۈشەندۈرۈشى: ئاخىرقى تەرجىمە $1 كۈن ئىلگىرى.",
+ "supportedlanguages-translators": "{{PLURAL:$2|تەرجىمان|تەرجىمان}}: $1",
+ "supportedlanguages-recenttranslations": "يېقىنقى تەرجىمىلەر",
+ "supportedlanguages-count": "جەمئى $1 {{PLURAL:$1|تىل|تىل}}.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|تەھرىر|تەھرىر}} - ئاخىرقى تەھرىر $3 {{PLURAL:$3|كۈن|كۈن}} ئىلگىرى",
+ "translate-jssti-add": "تىزىمغا قوش",
+ "managemessagegroups": "ئۇچۇر گۇرۇپپا باشقۇرۇش",
+ "translate-smg-notallowed": "بۇ مەشغۇلاتنى ئىجرا قىلالمايسىز.",
+ "translate-smg-nochanges": "بىر تەرەپ قىلىدىغان ئۆزگىرىش يوق.",
+ "translate-smg-submit": "بىر تەرەپ قىلىشنىڭ ئۆزگىرىشىنى تاپشۇر",
+ "translate-smg-submitted": "ئۇچۇر ئېنىقلىمىسى يېڭىلاندى. ئۆزگىرىشنى ئارقا سۇپىدا بىر تەرەپ قىلىۋاتىدۇ.",
+ "translate-smg-left": "ۋىكىدىكى ئۇچۇر مەزمۇنى",
+ "translate-smg-right": "كىرگۈزگەن ئۆزگەرتىشلەر",
+ "translate-smg-group-message-message-target": "نىشان:",
+ "translate-smg-group-message-message-other-langs": "باشقا تىللار:",
+ "translate-manage-import-diff": "ئۇچۇر $1 | مەشغۇلات: $2",
+ "translate-manage-import-new": "يېڭى ئۇچۇر $1",
+ "translate-manage-import-deleted": "ئۆچۈرۈلگەن ئۇچۇر $1",
+ "translate-manage-action-import": "ئەكىر",
+ "translate-manage-action-conflict": "ئەكىر ۋە مۇجىمەل",
+ "translate-manage-action-ignore": "پەرۋا قىلما",
+ "translate-manage-action-fuzzy": "ئەكىر ۋە مۇجىمەل تەرجىمە",
+ "translate-manage-nochanges": "بۇ گۇرۇپپىنىڭ ئۇچۇر ئېنىقلىمىسىدا ھېچقانداق ئۆزگىرىش يوق.",
+ "translate-manage-nochanges-other": "بۇ تىلدا ھېچقانداق ئۆزگىرىش يوق.\nگۇرۇپپا تەپسىلىي ئۇچۇر كۆرۈنۈشىگە قايتىپ تۆۋەندىكى ئۇلانمىنى ئىشلىتىڭ.",
+ "translate-manage-inconsistent": "ئلتىماستا بىردەك بولماسلىقنى بايقىدى.\nئۆزگىرىش بار يوقلۇقىنى تەكشۈرۈپ ئاندىن قايتا سىناڭ.\nتەپسىلاتى: $1.",
+ "translate-manage-toolong": "ئەڭ ئۇزۇن بىر تەرەپ قىلىش ۋاقتى $1 {{PLURAL:$1|سېكۇنت|سېكۇنت}} توشتى.\nداۋاملىق بىر تەرەپ قىلىش ئۈچۈن بۇ كۆزنەكنى قايتا تاپشۇرۇڭ.",
+ "translate-manage-import-summary": "سىرتتىن يېڭى بىر نەشرىنى ئەكىرىۋاتىدۇ",
+ "translate-manage-conflict-summary": "سىرتقى مەنبەدىن يېڭى بىر نەشرىنى ئەكىرىۋاتىدۇ.\nتەڭشۈرۈڭ.",
+ "translate-manage-submit": "ئىجراچان",
+ "importtranslations": "تەرجىمىلەرنى ئەكىر",
+ "translate-import-from-local": "يەرلىك ھۆججەت يۈكلەش:",
+ "translate-import-load": "ھۆججەت يۈكلەش",
+ "translate-import-err-dl-failed": "ھۆججەتكە ئېرىشەلمىدى:\n$1",
+ "translate-import-err-ul-failed": "ھۆججەتنى مۇۋەپپەقىيەتلىك يۈكلىيەلمىدى",
+ "translate-import-err-invalid-title": "تەمىنلەنگەن ھۆججەت ئاتى <nowiki>$1</nowiki> ئىناۋەتسىز.",
+ "translate-import-err-no-such-file": "ھۆججەت <nowiki>$1</nowiki> مەۋجۇت ئەمەس ياكى يەرلىكتىن يۈكلەنمىدى.",
+ "translate-import-err-stale-group": "بۇ ھۆججەت تەۋە ئۇچۇر گۇرۇپپىسى مەۋجۇت ئەمەس.",
+ "translate-import-err-no-headers": "بۇ ھۆججەت تەرجىمە كېڭەيتىلگەن ياخشى پىچىمدىكى Gettext ھۆججەت ئەمەس:\nھۆججەت بېشىدىن ئۇچۇر گۇرۇپپىسى ۋە تىلنى جەزملىيەلمىدى.",
+ "translate-js-support-unsaved-warning": "ساقلىمىغان تەرجىمىلىرىڭىز بار.",
+ "translate-gs-pos": "ئورنى",
+ "translate-gs-code": "كود",
+ "translate-gs-continent": "قىتئە",
+ "translate-gs-speakers": "ئاۋاز ياڭراتقۇ",
+ "translate-gs-score": "شەرەپ سەھنىسى",
+ "translate-gs-multiple": "بىر قانچە",
+ "translate-gs-count": "ساناق",
+ "translate-gs-total": "جەمئى",
+ "translate-gs-avgscore": "ئوتتۇرىچە نومۇرى",
+ "translate-documentation-language": "ئۇچۇر چۈشەندۈرۈشى",
+ "translate-searchprofile": "تەرجىمىسى",
+ "translate-searchprofile-tooltip": "ھەممە تەرجىمىدىن ئىزدە",
+ "translate-search-languagefilter": "تىل بويىچە سۈز:",
+ "translate-search-nofilter": "سۈزگۈچ يوق",
+ "log-name-translationreview": "تەرجىمە كۆزدىن كەچۈرۈش خاتىرىسى",
+ "log-description-translationreview": "بارلىق تەرجىمە ۋە ئۇچۇر گۇرۇپپىسىنىڭ كۆزدىن كەچۈرۈش خاتىرىسى.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|قۇبۇل قىلغان}} تەرجىمە $3",
+ "translate-workflow-state-": "(تەڭشەلمىگەن)",
+ "translate-workflowstatus": "ھالەت: $1",
+ "translate-workflow-set-doing": "تەڭشەۋاتىدۇ…",
+ "translate-workflow-autocreated-summary": "بەتنىڭ ئىش ئېقىمىنىڭ ھالىتى $1 نى ئۆزلۈكىدىن قۇرىدۇ",
+ "translate-stats-workflow": "ھالەت",
+ "translate-workflowgroup-label": "ئىش ئېقىمى ھالىتى",
+ "translate-workflowgroup-desc": "بۇ ئۇچۇر گۇرۇپپىسى تەرجىمە خىزمىتىنىڭ ئېقىم ھالىتىنى كۆرسىتىدۇ.\nبۇ ھالەتنى $wgTranslateWorkflowStates سەپلىمە ئۆزگەرگۈچىسىدە بەلگىلىگەن.",
+ "translate-dynagroup-recent-label": "يېقىنقى تەرجىمىلەر",
+ "translate-dynagroup-recent-desc": "بۇ ئۇچۇر گۇرۇپپىسى مەزكۇر تىلنىڭ يېقىنقى ھەممە تەرجىمىلىرىنى كۆرسىتىدۇ.\nئىملا تۈزەتكەندە ناھايىتى كېرەكلىك.",
+ "translate-msggroupselector-search-all": "ھەممىسى",
+ "translate-msggroupselector-search-recent": "يېقىنقى",
+ "tux-languageselector": "تىل",
+ "tux-tab-all": "ھەممىسى",
+ "tux-tab-untranslated": "تەرجىمە قىلىنمىغان",
+ "tux-tab-outdated": "زاماندىن قالغان",
+ "tux-tab-translated": "تەرجىمە قىلىنغان",
+ "tux-edit": "تەھرىرلەش",
+ "tux-status-optional": "تاللاشچان",
+ "tux-status-fuzzy": "زاماندىن قالغان",
+ "tux-status-proofread": "قايتا تەستىقلاندى",
+ "tux-status-translated": "تەرجىمە قىلىنغان",
+ "tux-editor-skip-button-label": "كېيىنكىگە ئاتلاش",
+ "tux-editor-suggestions-title": "نامزاتلار",
+ "tux-editor-in-other-languages": "باشقا تىلاردا",
+ "tux-editor-tm-match": "$1% ماس كېلىدۇ"
+}
diff --git a/Translate/i18n/core/ug-latn.json b/Translate/i18n/core/ug-latn.json
new file mode 100644
index 00000000..915a2af1
--- /dev/null
+++ b/Translate/i18n/core/ug-latn.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jose77"
+ ]
+ },
+ "translate-page-language": "Til",
+ "translate-next": "Kéyinki bet",
+ "translate-prev": "Aldinqi bet",
+ "translate-language": "Til"
+}
diff --git a/Translate/i18n/core/uk.json b/Translate/i18n/core/uk.json
new file mode 100644
index 00000000..d4b2734c
--- /dev/null
+++ b/Translate/i18n/core/uk.json
@@ -0,0 +1,473 @@
+{
+ "@metadata": {
+ "authors": [
+ "A1",
+ "AS",
+ "Ahonc",
+ "Aleksandrit",
+ "Amire80",
+ "Andriy.v",
+ "Andriykopanytsia",
+ "Apromix",
+ "Base",
+ "DDPAT",
+ "Dim Grits",
+ "Geraki",
+ "Hypers",
+ "Ice bulldog",
+ "Microcell",
+ "Movses",
+ "NickK",
+ "Olion",
+ "Olvin",
+ "Piramidion",
+ "Prima klasy4na",
+ "Renamerr",
+ "Steve.rusyn",
+ "SteveR",
+ "Test",
+ "Vlad5250",
+ "Ата",
+ "Тест"
+ ]
+ },
+ "translate": "Переклад",
+ "translate-extensionname": "Перекласти",
+ "translate-desc": "[[Special:Translate|Спеціальна сторінка]] для перекладу MediaWiki та інших програм",
+ "translate-fuzzybot-desc": "Це — спеціальний системний обліковий запис, який використовується [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate розширенням перекладу] MediaWiki для обслуговування перекладів.\nЦей обліковий запис є частиною програмного забезпечення MediaWiki й не належить жодному користувачеві.",
+ "translate-taskui-export-to-file": "Експорт у «рідному» форматі",
+ "translate-taskui-export-as-po": "Експорт для офлайн-перекладу",
+ "translate-taskui-export-as-csv": "Експортувати у форматі CSV",
+ "translate-export-csv-message-title": "Назва повідомлення перекладу",
+ "translate-export-csv-definition": "Текст повідомлення",
+ "translate-taction-translate": "Переклад",
+ "translate-taction-proofread": "Перевірка",
+ "translate-taction-lstats": "Статистика для цієї мови",
+ "translate-taction-mstats": "Статистика груп повідомлень",
+ "translate-taction-export": "Експорт",
+ "translate-taction-disabled": "Ця дія недоступна у цій вікі.",
+ "translate-page-no-such-language": "Зазначена неправильна мова.",
+ "translate-page-no-such-group": "Зазначена неправильна група.",
+ "translate-page-disabled": "Переклади на цю мову в цій групі вимкнені. Причина:\n\n<em>$1</em>",
+ "translate-language-disabled": "Переклад цією мовою вимкнено.",
+ "translate-page-settings-legend": "Параметри",
+ "translate-page-group": "Група",
+ "translate-page-language": "Мова",
+ "translate-page-limit": "Обмеження",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|повідомлення|повідомлення|повідомлень}} на сторінку",
+ "translate-submit": "Вивести",
+ "translate-page-navigation-legend": "Навігація",
+ "translate-page-showing": "Показано повідомлення з $1 по $2 (із $3).",
+ "translate-page-showing-all": "Показано $1 {{PLURAL:$1|повідомлення|повідомлення|повідомлень}}.",
+ "translate-page-showing-none": "Нема повідомлень для відображення.",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "наступна сторінка",
+ "translate-prev": "попередня сторінка",
+ "translate-page-description-legend": "Інформація про групу",
+ "translate-page-description-hasoptional": "Ця група повідомлень містить також необов'язкові повідомлення.\nЇх слід перекладати лише якщо Ваша мова вимагає особливого ставлення,\nскажімо, у ній не вживаються пробіли чи не потрібна транслітерація власних імен. $1",
+ "translate-page-description-hasoptional-open": "Показувати додаткові повідомлення.",
+ "translate-page-edit": "редагувати",
+ "translate-optional": "(необов'язкове)",
+ "translate-ignored": "(ігнорується)",
+ "translate-edit-title": "Редагувати «$1»",
+ "translate-edit-definition": "Текст повідомлення",
+ "translate-edit-contribute": "редагувати",
+ "translate-edit-no-information": "<em>Це повідомлення не має опису.\nЯкщо ви знаєте, де чи як воно використовується, то ви можете допомогти іншим перекладачам, додавши опис для цього повідомлення.</em>",
+ "translate-edit-information": "Інформація про повідомлення ($1)",
+ "translate-edit-warnings": "Попередження про неповні переклади",
+ "translate-edit-tmmatch-source": "Текст для перекладу: $1",
+ "translate-edit-tmmatch": "$1% відповідність",
+ "translate-edit-nopermission": "Вам потрібні права перекладача для перекладу повідомлень.",
+ "translate-edit-askpermission": "Отримати дозвіл",
+ "exporttranslations": "Експорт перекладів",
+ "translate-export-form-format": "Формат",
+ "translate-export-invalid-format": "Будь ласка, вкажіть правильний формат.",
+ "translate-export-not-supported": "Експорт перекладів не підтримується.",
+ "translate-export-format-notsupported": "Зазначений формат експорту не підтримується цією групою повідомлень.",
+ "translate-export-group-too-large": "Вибрана група повідомлень надто велика. Виберіть таку групу повідомлень, яка має менше ніж $1 {{PLURAL:$1|повідомлення|повідомлення|повідомлень}}, або зверніться до адміністраторів перекладу за порадою.",
+ "translate-checks-parameters": "{{PLURAL:$2|1=Параметр <strong>$1</strong> не використовується|Параметри <strong>$1</strong> не використовуються}}",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|1=Параметр <strong>$1</strong> невідомий|Параметри <strong>$1</strong> невідомі}}",
+ "translate-checks-balance": "Неоднакова кількість відкритих і закритих {{PLURAL:$2|1=дужок|дужок}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|1=Таке посилання проблематичне|Такі посилання проблематичні}} : <strong>$1</strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Відсутнє одне посилання|Відсутні $2 посилання|Відсутні $2 посилань}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Оригінал використовує <nowiki>{{PLURAL:}}</nowiki>, а переклад — ні.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> було використано з {{PLURAL:$1|1=одною формою|$1 формами}}, але {{PLURAL:$2|1=лише одна форма|$2 форм}} підтримується (за винятком форм 0= та 1=).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> має дублікати форм у кінці. <nowiki>{{PLURAL:$1|1=метро|метро}}</nowiki> повинно бути записано як <nowiki>{{PLURAL:$1|метро}}</nowiki>.",
+ "translate-checks-gettext-plural-missing": "Цей переклад має містити <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-unsupported": "Цей переклад не підтримує <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-count": "<nowiki>{{PLURAL:GETTEXT|}}</nowiki> приймає тільки {{PLURAL:$1|одну форму множини|$1 форми множини|$1 форм множини}}. Зараз вказано {{PLURAL:$2|одну форму множини|$2 форми множини|$2 форм множини}}.",
+ "translate-checks-smartformat-plural-missing": "Цей переклад має мати множину у змінній $1.",
+ "translate-checks-smartformat-plural-unsupported": "Це повідомлення не підтримує множину у змінній $1.",
+ "translate-checks-smartformat-plural-count": "Неправильна кількість форм множини у <strong>$3</strong>. Має бути $1 {{PLURAL:$1|форма множини|форми множини|форм множини}}. Зараз вказано $2 {{PLURAL:$2|форму множини|форми множини|форм множини}}.",
+ "translate-checks-unicode-plural-missing": "Цей переклад має містити <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-unsupported": "Це повідомлення не підтримує <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-invalid": "Форми множини мають бути визначені у такий спосіб — \"$1\". А зараз вони визначені у спосіб \"$2\".",
+ "translate-checks-pagename": "Змінилося визначення простору назв",
+ "translate-checks-format": "Цей переклад не відповідає визначенню або має неправильний синтаксис: $1",
+ "translate-checks-escape": "{{PLURAL:$2|Вказаний символ екранування може бути випадковим|Вказані символи екранування можуть бути випадковими}}: <strong>$1</strong>. {{PLURAL:$4|Коректний символ екранування —|До коректних символів екранування належать:}} $3.",
+ "translate-checks-parametersnotequal": "Є {{PLURAL:$1|один параметр|$1 параметри|$1 параметрів}}, а має бути {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> має помилки.",
+ "translate-checks-fudforum-syntax": "Використовувати у цьому проєкті <nowiki>$1</nowiki> замість <nowiki>$2</nowiki>.",
+ "translate-checks-newline-missing-start": "На початку перекладу {{PLURAL:$1|відсутній символ|відсутно $1 символа|відсутні $1 символів}} нового рядку.",
+ "translate-checks-newline-missing-end": "У кінці перекладу {{PLURAL:$1|відсутній символ|відсутно $1 символа|відсутні $1 символів}} нового рядку.",
+ "translate-checks-newline-extra-start": "На початку перекладу є {{PLURAL:$1|один зайвий символ|$1 зайві символа|$1 зайвих символів}} нового рядку.",
+ "translate-checks-newline-extra-end": "У кінці перекладу є {{PLURAL:$1|один зайвий символ|$1 зайві символа|$1 зайвих символів}} нового рядку.",
+ "translate-checks-value-not-present": "Переклад має дорівнювати {{PLURAL:$1|1=|одному з таких значень:}} $1.",
+ "translate-checks-replacement": "Використовуйте $2 замість $1.",
+ "translate-checks-empty": "Не допускається переклад без вмісту або лише пробілів.",
+ "translate-pref-editassistlang": "Допоміжні мови:",
+ "prefs-translate": "Налаштування перекладу",
+ "translate-pref-editassistlang-help": "Перелік мовних кодів, відокремлених комою.\nПереклади повідомлень цими мовами буде показано, коли Ви перекладаєте.\nСтандартний список мов залежить від вашої мови.",
+ "translate-pref-editassistlang-bad": "Неправильний мовний код в списку:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Редагування з використанням інтерфейсу перекладу",
+ "action-translate": "редагування з використанням інтерфейсу перекладу",
+ "right-translate-manage": "Керування групами повідомлень",
+ "action-translate-manage": "керування групами повідомлень",
+ "right-translate-import": "Імпорт офлайнових перекладів",
+ "action-translate-import": "імпорт офлайнових перекладів",
+ "right-translate-messagereview": "Здійснення перевірки перекладів",
+ "action-translate-messagereview": "здійснення перевірки перекладів",
+ "right-translate-groupreview": "Зміна стану обробки груп повідомлень",
+ "action-translate-groupreview": "зміну робочого статусу груп повідомлень",
+ "translate-rcfilters-translations": "Переклади",
+ "translate-rcfilters-translations-only-label": "Переклади",
+ "translate-rcfilters-translations-only-desc": "Зміни в перекладених сторінках.",
+ "translate-rcfilters-translations-filter-label": "Не переклади",
+ "translate-rcfilters-translations-filter-desc": "Усі зміни, які не є перекладами.",
+ "translate-rcfilters-translations-site-label": "Системні повідомлення",
+ "translate-rcfilters-translations-site-desc": "Локальні зміни системних повідомлень у просторі назв MediaWiki.",
+ "translate-rc-translation-filter": "Фільтр перекладів:",
+ "translate-rc-translation-filter-no": "Немає",
+ "translate-rc-translation-filter-only": "Показати тільки переклади",
+ "translate-rc-translation-filter-filter": "Без перекладів",
+ "translate-rc-translation-filter-site": "Повідомлення сайту",
+ "translationstats": "Статистика перекладів",
+ "translate-stats-edits": "Редагування",
+ "translate-stats-users": "Перекладачі",
+ "translate-stats-registrations": "Реєстрації",
+ "translate-stats-reviews": "Перевірки",
+ "translate-stats-reviewers": "Рецензенти",
+ "translate-statsf-intro": "Ця форма допоможе вам створити зручний графік. Для всіх значень можна задати верхню і нижню межі.",
+ "translate-statsf-options": "Параметри графіка",
+ "translate-statsf-width": "Ширина в пікселях:",
+ "translate-statsf-height": "Висота в пікселях:",
+ "translate-statsf-days": "Період часу у днях:",
+ "translate-statsf-start": "Дата початку:",
+ "translate-statsf-scale": "Ступінь деталізації:",
+ "translate-statsf-scale-years": "Роки",
+ "translate-statsf-scale-months": "Місяці",
+ "translate-statsf-scale-weeks": "Тижні",
+ "translate-statsf-scale-days": "Дні",
+ "translate-statsf-scale-hours": "Години",
+ "translate-statsf-count": "Міра:",
+ "translate-statsf-count-edits": "Число редагувань",
+ "translate-statsf-count-users": "Активні перекладачі",
+ "translate-statsf-count-registrations": "Нові користувачі",
+ "translate-statsf-count-reviews": "Перевірки перекладів",
+ "translate-statsf-count-reviewers": "Рецензенти",
+ "translate-statsf-language": "Список кодів мови, розділених комами:",
+ "translate-statsf-group": "Список кодів групи мов, розділених комами:",
+ "translate-statsf-submit": "Перегляд",
+ "translate-statsf-unknown-error": "Сталася невідома помилка.",
+ "translate-statsf-error-message": "Сталася помилка при завантаження графіку: $1",
+ "translate-statsf-graph-alt-text-info": "Альтернативний текст для статистики перекладу доступний у таблиці з даними нижче.",
+ "translate-statsf-alt-text": "Це альтернативний текст для статистики перекладів.",
+ "translate-statsf-embed": "Код для включення графіку статистики перекладів до інших сторінок.",
+ "translate-tag-page-desc": "Переклад сторінки [[$2|$1]] із $3 ($4).",
+ "translate-tag-page-wikipage-desc": "[[$1|Переклад]] вікісторінки [[$2]]: <bdi>$3</bdi> ($4) → <bdi>$5</bdi> ($6)",
+ "translate-sidebar-alltrans": "Іншими мовами",
+ "translations": "Всі переклади",
+ "translations-summary": "Введіть назву повідомлення, щоб показати всі доступні переклади.",
+ "translate-translations-no-message": "\"$1\" не є повідомленням для перекладу",
+ "translate-translations-none": "Немає ніяких перекладів для \"$1\"",
+ "translate-translations-count": "Знайдено {{PLURAL:$1|1=один переклад|$1 переклади|$1 перекладів}}.",
+ "translate-translations-fieldset-title": "Повідомлення",
+ "translate-translations-messagename": "Назва:",
+ "translate-translations-project": "Проєкт:",
+ "translate-translations-including-no-param": "Будь ласка, вкажіть ключ повідомлення як параметр підсторінки",
+ "translate-translations-history-short": "і",
+ "languagestats": "Мовна статистика",
+ "languagestats-summary": "На цій сторінці подано статистику перекладів цією мовою для всіх груп повідомлень.",
+ "messagegroupstats-summary": "На цій сторінці відображається статистика груп повідомлень.",
+ "languagestats-stats-for": "Статистика перекладів мовою: $1 ($2).",
+ "languagestats-recenttranslations": "найновіші переклади",
+ "translate-langstats-incomplete": "Деяка статистика на цій сторінці є неповною. Будь ласка, перезавантажте сторінку для отримання нових даних.",
+ "translate-langstats-expand": "розгорнути",
+ "translate-langstats-collapse": "згорнути",
+ "translate-langstats-expandall": "розгорнути всі",
+ "translate-langstats-collapseall": "згорнути всі",
+ "translate-language-code": "Код мови",
+ "translate-language-code-field-name": "Код мови:",
+ "translate-suppress-complete": "Приховати повністю перекладені групи повідомлень",
+ "translate-ls-noempty": "Приховати зовсім неперекладені групи повідомлень",
+ "translate-language": "Мова",
+ "translate-total": "Повідомлення",
+ "translate-untranslated": "Неперекладені",
+ "translate-percentage-complete": "Готово",
+ "translate-percentage-fuzzy": "Застаріло",
+ "translate-percentage-proofread": "Перевірено",
+ "translate-languagestats-overall": "Повідомлення всіх груп",
+ "translate-ls-submit": "Показати статистику",
+ "translate-ls-column-group": "Група повідомлень",
+ "translate-mgs-pagename": "Статистика груп повідомлень",
+ "translate-mgs-fieldset": "Параметри відображення",
+ "translate-mgs-group": "Група повідомлень:",
+ "translate-mgs-nocomplete": "Не показувати мови, які мають завершені переклади",
+ "translate-mgs-noempty": "Не показувати мови, які не мають жодного перекладу",
+ "translate-mgs-submit": "Показати статистику",
+ "translate-mgs-column-language": "Мова",
+ "translate-mgs-totals": "Всі $1 {{PLURAL:$1|мова|мови|мов}} разом",
+ "translate-mgs-invalid-group": "Зазначеної групи $1 не існує.",
+ "translate-mgs-nothing": "Немає статистики за Вашим запитом.",
+ "translate-tes-server-error": "Не вдалося отримати підказки пошуку",
+ "translate-tes-group-not-found": "Не знайдено збігів",
+ "translate-tes-type-to-search": "Введіть, щоб почати пошук",
+ "supportedlanguages": "Активні мови",
+ "supportedlanguages-summary": "На цій сторінці перелічено активні мови {{GRAMMAR:locative|{{SITENAME}}}},\nразом з іменами перекладачів, що працюють цими мовами.\nІм'я перекладача буде тим більшим, що більше редагувань він зробив.\nКолір підкреслення позначає як давно було вчинено останні дії.",
+ "supportedlanguages-colorlegend": "Кольорова легенда: останній переклад здійснено $1 днів тому.",
+ "supportedlanguages-portallink": "[$1] $2 — $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-sqlite-error": "SQLite не підтримується",
+ "supportedlanguages-postgres-error": "PostgreSQL не підтримується",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Перекладач|Перекладачка}}|Перекладачі}}: $1",
+ "supportedlanguages-recenttranslations": "останні переклади",
+ "supportedlanguages-count": "Всього $1 {{PLURAL:$1|мова|мови|мов}}.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|редагування|редагування|редагувань}} — останнє редагування $3 {{PLURAL:$3|день|дні|днів}} тому",
+ "translate-supportedlanguages-cached": "Ця інформація була кешована $1 тому.",
+ "translate-activelanguages-invalid-code": "Код мови «$1» невідомий або не увімкнений для перекладу.",
+ "abusefilter-edit-builder-vars-translate-source-text": "Вихідний текст одиниці перекладу",
+ "abusefilter-edit-builder-vars-translate-target-language": "Цільова мова для перекладу",
+ "translate-jssti-add": "Додати в список",
+ "managemessagegroups": "Керування групами повідомлень",
+ "translate-smg-notallowed": "Вам не дозволено виконувати цю дію.",
+ "translate-smg-nochanges": "Немає ніяких змін для обробки.",
+ "translate-smg-submit": "Надіслати зміни на обробку",
+ "translate-smg-submitted": "Формулювання повідомлення було оновлено. Зміни обробляються у фоновому режимі.",
+ "translate-smg-submitted-with-failure": "Не вдалося оновити {{PLURAL:$1|визначення повідомлення|визначення повідомлень}} для {{PLURAL:$1|такої групи|таких груп}} — $2. $3",
+ "translate-smg-submitted-others-processing": "Визначення повідомлень для інших груп опрацьовуються на фоні.",
+ "translate-smg-more": "Після внесення цих змін з'явиться більше змін для обробки.",
+ "translate-smg-left": "Зміст повідомлення у вікі",
+ "translate-smg-right": "Вхідні зміни",
+ "translate-smg-rename-select": "Обрати",
+ "translate-smg-rename-cancel": "Скасувати",
+ "translate-smg-rename-search": "Пошук відповідного повідомлення…",
+ "translate-smg-rename-select-err": "Будь ласка, оберіть повідомлення для перейменування",
+ "translate-smg-rename-no-msg": "Повідомлень не знайдено.",
+ "translate-smg-rename-new": "Додати як нове…",
+ "translate-smg-rename-rename": "Додати як перейменування…",
+ "translate-smg-rename-dialog-title": "Обрати відповідне перейменування для $1",
+ "translate-smg-changeset-modified": "Набір змін модифіковано іншим користувачем чи процесом. Ваші зміни не можна опублікувати, оскільки це може перезаписати їхні зміни. Будь ласка, перезавантажте сторінку, щоб побачити останні зміни.",
+ "translate-smg-no-groups-in-sync": "Наразі немає груп у процесі синхронізації",
+ "translate-smg-strong-sync-help": "Довідка",
+ "translate-smg-groups-in-sync": "Групи в процесі синхронізації зараз",
+ "translate-smg-groups-in-sync-list": "Список груп, що наразі перебувають в процесі обробки на фоні:",
+ "translate-smg-groups-with-error-title": "Групи, у яких сталися помилки під час синхронізації",
+ "translate-smg-groups-with-error-desc": "Список груп і їх повідомлень, у яких сталися помилки під час синхронізації:",
+ "translate-smg-group-with-error-summary": "$1 {{PLURAL:$1|повідомлення|повідомлення|повідомлень}} з помилками:",
+ "translate-smg-group-message-action-history": "Історія",
+ "translate-smg-group-action-resolve": "Позначити як вирішену",
+ "translate-smg-group-sync-error-warn": "Ця група мала помилку під час синхронізації. Будь ласка, виправте помилки перед обробкою цієї групи.",
+ "translate-smg-group-message-tag-outdated": "Застарілі",
+ "translate-smg-group-message-tag-rename": "Перейменувати",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|Тег|Теги}}:",
+ "translate-smg-group-message-message-content": "Вміст:",
+ "translate-smg-group-message-message-target": "Ціль:",
+ "translate-smg-group-message-message-replacement": "Заміна:",
+ "translate-smg-group-message-message-other-langs": "Інші мови:",
+ "translate-smg-loading": "Завантаження…",
+ "translate-smg-unknown-error": "Сталася невідома помилка під час обробки вашого запиту.",
+ "translate-manage-import-diff": "Повідомлення $1 | Дії: $2",
+ "translate-manage-import-new": "Нове повідомлення $1",
+ "translate-manage-import-deleted": "Вилучено повідомлення $1",
+ "translate-manage-action-import": "Імпортувати",
+ "translate-manage-action-conflict": "Імпортувати і позначити як неперевірене",
+ "translate-manage-action-ignore": "Ігнорувати",
+ "translate-manage-action-fuzzy": "Імпортувати і позначити як неперевірені",
+ "translate-manage-action-rename-fuzzy": "Перейменовані та застарілі переклади",
+ "translate-manage-action-rename": "Перейменувати",
+ "translate-manage-action-ignore-change": "Ігнорувати зміну перекладу",
+ "translate-manage-nochanges": "Нема змін у формулюваннях повідомлень для цієї групи.",
+ "translate-manage-nochanges-other": "Не було змін для цієї мови.\nЩоб повернутися до перегляду деталей групи, використайте посилання нижче.",
+ "translate-manage-inconsistent": "Виявлено невідповідності в запиті.\nБудь ласка, перевірте зміни і спробуйте ще раз.\nДеталі: $1.",
+ "translate-manage-toolong": "Перевищено максимальний час обробки, що складає $1 {{PLURAL:$1|секунду|секунди|секунд}}.\nБудь ласка, відправте дані знову, щоб продовжити обробку.",
+ "translate-manage-import-summary": "Імпорт нової версії із зовнішнього джерела",
+ "translate-manage-import-ignore": "Пропуск повідомлення $1.",
+ "translate-manage-import-rename-summary": "Перейменовано у зовнішньому джерелі",
+ "translate-manage-conflict-summary": "Імпорт нової версії із зовнішнього джерела.\nБудь ласка, перевірте її.",
+ "translate-manage-submit": "Виконати",
+ "translate-manage-intro-other": "Далі наведено список змін перекладів мовою: $1.\nБудь ласка, перевірте ці зміни і виберіть дію, яку застосувати щодо кожного оновлення.\nЯкщо Ви оберете проігнорувати зміни, то ця дія лише тимчасова.",
+ "translate-manage-import-ok": "Імпортовано: $1",
+ "translate-manage-import-done": "Імпорт завершено!",
+ "translate-manage-empty-content": "Вміст порожній",
+ "translate-manage-key-reused": "Це повідомлення вже є в цій вікі. Перевірте чи старий ключ не використовується знову випадково.",
+ "translate-manage-source-message-not-found": "Визначення повідомлення не знайдено",
+ "importtranslations": "Імпортувати переклади",
+ "translate-import-from-local": "Завантажити локальний файл:",
+ "translate-import-load": "Завантажити файл",
+ "translate-import-err-dl-failed": "Не вдалося отримати файл:\n$1",
+ "translate-import-err-ul-failed": "Завантажити файл не вдалося",
+ "translate-import-err-invalid-title": "Вказана назва файлу <nowiki>$1</nowiki> неправильна.",
+ "translate-import-err-no-such-file": "Файл <nowiki>$1</nowiki> не існує або не завантажений локально.",
+ "translate-import-err-stale-group": "Група повідомлень, до якої належить цей файл, не існує.",
+ "translate-import-err-no-headers": "Файл не є правильно побудованим Gettext-файлом у форматі розширення Translate: не вдалося визначити групу і мову із заголовка файлу.",
+ "translate-js-support-unsaved-warning": "Маєте неопубліковані переклади.",
+ "translate-gs-pos": "Поз.",
+ "translate-gs-code": "Код",
+ "translate-gs-continent": "Частина світу",
+ "translate-gs-speakers": "Носіїв",
+ "translate-gs-score": "Оцінка",
+ "translate-gs-multiple": "Кілька",
+ "translate-gs-count": "Кількість",
+ "translate-gs-total": "Всього",
+ "translate-gs-avgscore": "Сер. оцінка",
+ "translate-documentation-language": "документація повідомлень",
+ "translate-searchprofile": "Переклади",
+ "translate-searchprofile-tooltip": "Пошук серед усіх перекладів",
+ "translate-searchprofile-note": "Більше можливостей пошуку доступні у [$1 пошуку перекладів].",
+ "translate-search-languagefilter": "Фільтр мов:",
+ "translate-search-nofilter": "Без фільтрації",
+ "log-name-translationreview": "Журнал рецензування перекладів",
+ "log-description-translationreview": "Журнал усіх рецензій та груп повідомлень",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|перевірив|перевірила}} переклад $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|змінив|змінила}} стан {{PLURAL:$4|1=перекладу|перекладів}} сторінки $3 мовою $4 з $6 на $7",
+ "group-translate-sandboxed": "Незатверджені переклади",
+ "group-translate-sandboxed-member": "{{GENDER:$1|незатверджений перекладач|незатверджена перекладачка}}",
+ "right-translate-sandboxmanage": "Керування користувачами в пісочниці",
+ "action-translate-sandboxmanage": "керування користувачами в пісочниці",
+ "right-translate-sandboxaction": "Виконання дій, дозволених користувачам в пісочниці",
+ "action-translate-sandboxaction": "виконання дій, дозволених користувачам у пісочниці",
+ "translate-workflow-state-": "(не встановлено)",
+ "translate-workflowstatus": "Статус: $1",
+ "translate-workflow-set-doing": "Встановлення...",
+ "translate-workflow-autocreated-summary": "Автоматичне створення сторінки стану для процесу обробки $1.",
+ "translate-stats-workflow": "Статус",
+ "translate-workflowgroup-label": "Стан процесу обробки",
+ "translate-workflowgroup-desc": "Ця група показує стан процесу перекладу.\nМожливі значення стану визначено у конфігураційній змінній $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Останні переклади",
+ "translate-dynagroup-recent-desc": "Ця група повідомлень містить усі останні переклади цією мовою.\nНайзручніший режим для завдань перевірки.",
+ "translate-dynagroup-additions-label": "Останні доповнення",
+ "translate-dynagroup-additions-desc": "Ця група повідомлень містить нові та змінені повідомлення.",
+ "translate-msggroupselector-projects": "Група повідомлень",
+ "translate-msggroupselector-search-placeholder": "Шукати групи",
+ "translate-msggroupselector-search-all": "Усі",
+ "translate-msggroupselector-search-recent": "Останні",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|підгрупа|підгрупи|підгруп}}",
+ "tux-languageselector": "Переклад на",
+ "tux-select-target-language": "Цільова мова для перекладу",
+ "tux-tab-all": "Усі",
+ "tux-tab-untranslated": "Неперекладені",
+ "tux-tab-outdated": "Застарілі",
+ "tux-tab-translated": "Перекладені",
+ "tux-tab-unproofread": "Неперевірені",
+ "tux-edit": "Редагувати",
+ "tux-status-optional": "Необов'язково",
+ "tux-status-fuzzy": "Застаріло",
+ "tux-status-proofread": "Перевірка",
+ "tux-status-translated": "Перекладено",
+ "tux-status-saving": "Публікація…",
+ "tux-status-unsaved": "Не опубліковано",
+ "tux-save-unknown-error": "Сталася невідома помилка.",
+ "tux-editor-placeholder-documentation": "Додати документацію повідомлення",
+ "tux-editor-placeholder-language": "Ваш переклад мовою «$1»",
+ "tux-editor-editsummary-placeholder": "Поясніть свої зміни (необов'язково)",
+ "tux-editor-paste-original-button-label": "Вставити вихідний текст",
+ "tux-editor-discard-changes-button-label": "Скасувати зміни",
+ "tux-editor-save-button-label": "Опублікувати переклад",
+ "tux-editor-skip-button-label": "Перейти до наступного",
+ "tux-editor-cancel-button-label": "Скасувати",
+ "tux-editor-confirm-button-label": "Підтвердити переклад",
+ "tux-editor-proofread-button-label": "Позначити як перевірений",
+ "tux-editor-shortcut-info": "Натисніть «$1» щоб підтвердити і перейти до наступного повідомлення, «$2», щоб пропустити, «$4», щоб додати короткий опис, або натисніть і потримайте «$3», щоб переглянути інші ярлики.",
+ "tux-editor-edit-desc": "Редагувати документацію",
+ "tux-editor-add-desc": "Додати документацію",
+ "tux-editor-suggestions-title": "Пропозиції",
+ "tux-editor-latest-updates-title": "Останні оновлення",
+ "tux-editor-changes-without-summary": "$1 {{PLURAL:$1|оновлення|оновлень}} без опису",
+ "tux-editor-all-changes": "Усі зміни",
+ "tux-editor-in-other-languages": "Іншими мовами",
+ "tux-editor-need-more-help": "Потрібно більше допомоги?",
+ "tux-editor-ask-help": "Запитати додаткову інформацію",
+ "tux-editor-tm-match": "$1% відповідність",
+ "tux-notices-more": "{{PLURAL:$1|ще $1}}",
+ "tux-notices-hide": "сховати",
+ "tux-editor-save-failed": "Публікація перекладу не вдалася: $1",
+ "tux-editor-n-uses": "використано $1 {{PLURAL:$1|раз|рази|разів}}",
+ "tux-editor-message-desc-more": "Показати докладно",
+ "tux-editor-message-desc-less": "Показати компактно",
+ "tux-editor-clear-translated": "Приховати перекладене",
+ "tux-editor-proofreading-mode": "Перевірка",
+ "tux-editor-translate-mode": "Список",
+ "tux-editor-proofreading-hide-own-translations": "Приховати свої переклади",
+ "tux-editor-proofreading-show-own-translations": "Показати свої переклади",
+ "tux-proofread-action-tooltip": "Позначити як перевірене",
+ "tux-proofread-edit-label": "Редагувати",
+ "tux-editor-page-mode": "Сторінка",
+ "tux-editor-outdated-notice": "Цей переклад, можливо, необхідно оновити.",
+ "tux-editor-outdated-notice-diff-link": "Показати відмінності",
+ "tux-editor-doc-editor-placeholder": "Документація повідомлення",
+ "tux-editor-doc-editor-save": "Опублікувати документацію",
+ "tux-editor-doc-editor-cancel": "Скасувати",
+ "tux-messagetable-more-messages": "Ще $1 {{PLURAL:$1|повідомлення|повідомлення|повідомлень}}",
+ "tux-messagetable-loading-messages": "Завантаження $1 {{PLURAL:$1|1=повідомлення|повідомлень}}...",
+ "tux-message-filter-placeholder": "Список фільтрів",
+ "tux-message-filter-result": "За запитом «$2» {{PLURAL:$1|знайдено|знайдені|знайдено}} $1 {{PLURAL:$1|результат|результати|результатів}}",
+ "tux-message-filter-advanced-button": "Розширений пошук",
+ "tux-message-filter-optional-messages-label": "Додаткові повідомлення",
+ "tux-proofread-translated-by-self": "Перекладено Вами",
+ "tux-empty-list-all": "Ця група повідомлень порожня",
+ "tux-empty-list-all-guide": "Оберіть іншу групу повідомлень для перекладу",
+ "tux-translate-page-no-such-group": "<strong>Вказана група не існує.</strong> Оберіть іншу групу повідомлень.",
+ "tux-empty-list-translated": "Немає перекладених повідомень",
+ "tux-empty-list-translated-guide": "Ви можете допомогти перекладом",
+ "tux-empty-list-translated-action": "Перекласти",
+ "tux-empty-no-messages-to-display": "Немає повідомлень для відображення.",
+ "tux-empty-there-are-optional": "Є додаткові повідомлення, не показані у списку",
+ "tux-empty-show-optional-messages": "Показати додаткові повідомлення",
+ "tux-empty-no-outdated-messages": "Немає застарілих повідомлень",
+ "tux-empty-nothing-to-proofread": "Немає що перевіряти",
+ "tux-empty-you-can-help-providing": "Ви можете допомогти новими перекладами",
+ "tux-empty-nothing-new-to-proofread": "Немає нових повідомлень до перевірки",
+ "tux-empty-you-can-review-already-proofread": "Ви можете перевіряти переклади, уже перевірені іншими.",
+ "tux-empty-list-other": "Немає що перекладати",
+ "tux-empty-list-other-guide": "Ви можете допомогти з перевіркою наявних перекладів",
+ "tux-empty-list-other-action": "Перевірка перекладів",
+ "tux-empty-list-other-link": "Показати усі повідомлення",
+ "tux-editor-close-tooltip": "Закрити",
+ "tux-editor-expand-tooltip": "Розгорнути",
+ "tux-editor-collapse-tooltip": "Згорнути",
+ "tux-editor-message-tools-show-editor": "Показати у вікіредакторі",
+ "tux-editor-message-tools-history": "Історія",
+ "tux-editor-message-tools-delete": "Вилучити",
+ "tux-editor-message-tools-translations": "Усі переклади",
+ "tux-editor-message-tools-linktothis": "Посилання на це повідомлення",
+ "tux-editor-loading": "Завантаження…",
+ "tux-editor-loading-failed": "Не вдалося завантажити підказки перекладів: $1",
+ "translate-search-more-languages-info": "Ще $1 {{PLURAL:$1|мова|мови|мов}}",
+ "translate-statsbar-tooltip": "$1% перекладено, $2% перевірено",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% перекладено, $2% перевірено, $3% застаріло",
+ "translate-search-more-groups-info": "Ще $1 {{PLURAL:$1|група|групи|груп}}",
+ "translate-syntax-error": "У перекладі є синтаксичні помилки",
+ "tux-session-expired": "Зараз Ви не авторизовані. Будь ласка, увійдіть до системи на окремій вкладці. Або зробіть копію незбереженого перекладу, увійдіть, поверніться до цієї сторінки та введіть свої переклади знову.",
+ "tux-nojs": "Цей інструмент не працює без JavaScript. JavaScript вимкнено, не вдалося запустити, або ж цей браузер не підтримується.",
+ "specialpages-group-translation": "Переклад",
+ "content-model-translate-messagebundle": "Набір перекладних повідомлень",
+ "translate-messagebundle-validation-error": "Недійсний пакет повідомлень: $1",
+ "translate-messagebundle-error-parsing": "Помилка під час аналізу JSON: $1",
+ "translate-messagebundle-error-invalid-array": "Набір повідомлень повинен бути об'єктом JSON. Отримано тип $1",
+ "translate-messagebundle-error-key-empty": "Пакет повідомлень не повинен містити порожній ключ",
+ "translate-messagebundle-error-key-too-long": "Клавіша \"$1\" задовга",
+ "translate-messagebundle-error-key-invalid-characters": "Ключ \"$1\" містить заборонені символи",
+ "translate-messagebundle-error-invalid-value": "Ключ \"$1\" не містить значення рядка",
+ "translate-messagebundle-error-empty-value": "Ключ \"$1\" не має значення",
+ "translate-messagebundle-error-metadata-type": "Метадані мають бути масивом.",
+ "translate-messagebundle-error-invalid-metadata": "Розділ метаданих містить невідомий ключ: «$1». Підтримувані ключі: $2.",
+ "translate-messagebundle-error-invalid-sourcelanguage": "Код вихідної мови «$1» не підтримується.",
+ "translate-messagebundle-error-invalid-prioritylanguage": "{{PLURAL:$2|Недійсний код пріоритетної мови в метаданих|Недійсні коди пріоритетних мов у метаданих}}: $1",
+ "translate-messagebundle-error-invalid-prioritylanguage-format": "Недійсний формат пріоритетної мови в метаданих. Пріоритетні мови мають бути масивом рядків.",
+ "translate-messagebundle-group-description": "Повідомлення із набору повідомлень, визначеного на сторінці [[$2|$1]].",
+ "translate-messagebundle-change-sourcelanguage": "Налаштування вихідної мови набору повідомлень відповідно до метаданих.",
+ "translate-messagebundle-sourcelanguage-changed": "Вихідну мову пакета повідомлень не можна змінити після його створення.",
+ "log-action-filter-translationreview": "Тип дії:",
+ "log-action-filter-translationreview-message": "Перевірка окремих повідомлень перекладу",
+ "log-action-filter-translationreview-group": "Зміни в статусі прогресу перекладів"
+}
diff --git a/Translate/i18n/core/ur.json b/Translate/i18n/core/ur.json
new file mode 100644
index 00000000..97bb875e
--- /dev/null
+++ b/Translate/i18n/core/ur.json
@@ -0,0 +1,254 @@
+{
+ "@metadata": {
+ "authors": [
+ "BukhariSaeed",
+ "Hindustanilanguage",
+ "Muhammad Shuaib",
+ "Noor2020",
+ "Obaid Raza",
+ "Tahir mq",
+ "Zainab Meher",
+ "عثمان خان شاہ",
+ "පසිඳු කාවින්ද"
+ ]
+ },
+ "translate": "ترجمہ",
+ "translate-desc": "میڈیاویکی وغیرہ کا ترجمہ کرنے کے لیے [[Special:Translate|خصوصی صفحہ]]",
+ "translate-taskui-export-to-file": "مقامی کی شکل میں برآمد",
+ "translate-taskui-export-as-po": "آف لائن ترجمہ کے لئے برآمد",
+ "translate-taction-translate": "ترجمہ کریں",
+ "translate-taction-proofread": "نظر ثانی",
+ "translate-taction-lstats": "شماریات زبان",
+ "translate-taction-mstats": "پیامی گروہوں کی شماریات",
+ "translate-taction-export": "برآمد",
+ "translate-taction-disabled": "یہ اقدام اس ویکی پر غیر فعال ہے۔",
+ "translate-page-no-such-language": "درج کردہ زبان نادرست ہے۔",
+ "translate-page-no-such-group": "درج کردہ گروہ نادرست ہے۔",
+ "translate-page-disabled": "اس گروپ میں اس زبان کا ترجمہ غیر فعال کر دیا گیا ہے۔\nوجہ:\n\n<em>$1</em>",
+ "translate-language-disabled": "اس زبان میں ترجمہ کو غیر فعال کر دیا گیا ہے۔",
+ "translate-page-settings-legend": "ترتیبات",
+ "translate-page-group": "گروپ",
+ "translate-page-language": "زبان",
+ "translate-page-limit": "حد",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|پیغام|پیغاما}} فی صفحہ",
+ "translate-submit": "اخذ کریں",
+ "translate-page-navigation-legend": "نیوی گیشن",
+ "translate-page-showing-all": "$1 {{PLURAL:$1|پیغام}} کی نمائش",
+ "translate-page-showing-none": "کو دکھانے کے لئے کوئی پیغامات ۔",
+ "translate-next": "اگلا صفحہ",
+ "translate-prev": "سابق صفحہ",
+ "translate-page-description-hasoptional-open": "کچھ اختیاری پیغامات دکھائیں ۔",
+ "translate-page-edit": "ترمیم کریں",
+ "translate-optional": "(اختیاری)",
+ "translate-ignored": "(نظر انداز شدہ)",
+ "translate-edit-title": "ترمیم «$1»",
+ "translate-edit-definition": "پیغام کی وضاحت",
+ "translate-edit-contribute": "میں شراکت",
+ "translate-edit-no-information": "<em>اس پیغام کی دستاویز نہیں ہے۔\nاگر آپ اس پیغام کے استعمال سے واقف ہیں تو اس کی دستاویز بنا کر آپ دیگر مترجمین کا تعاون کر سکتے ہیں۔</em>",
+ "translate-edit-information": "پیغام ($1) کے متعلق",
+ "translate-edit-warnings": "نامکمل ترجموں کے متعلق انتباہات",
+ "translate-edit-nopermission": "پیغامات کے ترجمے کے لیے آپ کے پاس ترجمہ کاری کا اختیار ہونا لازمی ہے۔",
+ "translate-edit-askpermission": "اجازت حاصل کریں",
+ "exporttranslations": "تراجم برآمد کریں",
+ "translate-export-form-format": "فارمیٹ",
+ "translate-export-invalid-format": "براہ کرم درست فارمیٹ عنایت کریں",
+ "translate-export-not-supported": "تراجم کی برآمد ممکن نہیں۔",
+ "translate-pref-editassistlang": "معاون زبانیں:",
+ "prefs-translate": "اختیارات ترجمہ",
+ "translate-pref-editassistlang-bad": "فہرست میں نادرست رمز زبان:\n<nowiki>$1</nowiki>",
+ "right-translate-manage": "پیامی گروہوں کا انتظام",
+ "action-translate-manage": "پیامی گروہوں کا انتظام",
+ "right-translate-import": "آف لائن تراجم کو درآمد کریں",
+ "action-translate-import": "آف لائن تراجم کو درآمد کریں",
+ "right-translate-messagereview": "تراجم کی نظر ثانی کریں",
+ "action-translate-messagereview": "ترجموں پر نظر ثانی کی",
+ "translate-rcfilters-translations": "تراجم",
+ "translate-rcfilters-translations-only-label": "تراجم",
+ "translate-rcfilters-translations-only-desc": "ترجمہ کردہ صفحات میں تبدیلیاں",
+ "translate-rcfilters-translations-filter-label": "تراجم نہیں",
+ "translate-rcfilters-translations-filter-desc": "تمام تبدیلیاں جو تراجم نہیں ہیں۔",
+ "translate-rcfilters-translations-site-label": "سائیٹ کے پیغامات",
+ "translate-rc-translation-filter": "ترجموں کو فلٹر کریں:",
+ "translate-rc-translation-filter-no": "کچھ نہ کریں",
+ "translate-rc-translation-filter-only": "فقط تراجم دکھاییں",
+ "translate-rc-translation-filter-filter": "ترجموں کو خارج کریں",
+ "translate-rc-translation-filter-site": "فقط ویب سائٹ کے پیغامات میں ہونے والی تبدیلیاں",
+ "translationstats": "ترجمہ کے اعداد و شمار",
+ "translate-stats-edits": "ترامیم",
+ "translate-stats-users": "مترجمین",
+ "translate-stats-registrations": "اندراجات",
+ "translate-stats-reviews": "نظر ثانیاں",
+ "translate-stats-reviewers": "مبصرین",
+ "translate-statsf-options": "مخطط کے اختیارات",
+ "translate-statsf-width": "چوڑائی پکسل میں:",
+ "translate-statsf-height": "لمبائی پکسل میں:",
+ "translate-statsf-days": "وقت کا دورانیہ دنوں میں:",
+ "translate-statsf-start": "تاریخ شروع ہو رہا ہے:",
+ "translate-statsf-scale-months": "ماہ",
+ "translate-statsf-scale-weeks": "ہفتے",
+ "translate-statsf-scale-days": "دن",
+ "translate-statsf-scale-hours": "گھنٹے",
+ "translate-statsf-count": "پیمائش:",
+ "translate-statsf-count-edits": "تعداد ترامیم",
+ "translate-statsf-count-users": "فعال مترجمین",
+ "translate-statsf-count-registrations": "نئے صارفین",
+ "translate-statsf-count-reviews": "ترجمہ کا جائزہ",
+ "translate-statsf-count-reviewers": "مبصرین",
+ "translate-statsf-language": "رموز زبان کی وقفہ سے علاحدہ شدہ فہرست",
+ "translate-statsf-submit": "نمائش",
+ "translate-sidebar-alltrans": "دیگر زبانوں میں",
+ "translations": "جملہ تراجم",
+ "translations-summary": "تمام دستیاب تراجم دیکھنے کے لیے ذیل میں کسی پیغام کا نام درج کریں۔",
+ "translate-translations-none": "«$1» کے تراجم موجود نہیں ہیں",
+ "translate-translations-fieldset-title": "پیغام",
+ "translate-translations-messagename": "نام:",
+ "translate-translations-project": "منصوبہ:",
+ "translate-translations-history-short": "ت",
+ "languagestats": "لسانی شماریات",
+ "languagestats-summary": "اس صفحہ میں متعلقہ زبان کے تمام پیامی گروہوں کے تراجم کے اعداد و شمار درج ہیں۔",
+ "languagestats-stats-for": "$1 کے تراجم کے اعداد و شمار ($2)۔",
+ "languagestats-recenttranslations": "حالیہ تراجم",
+ "translate-langstats-expand": "وسیع کریں",
+ "translate-langstats-collapse": "چھپائیں",
+ "translate-langstats-expandall": "سب کو کھولیں",
+ "translate-langstats-collapseall": "تمام کو مختصر کریں",
+ "translate-language-code": "رمز زبان",
+ "translate-language-code-field-name": "زبان کے کوڈ:",
+ "translate-suppress-complete": "مکمل ترجمہ شدہ پیامی گروہوں کو چھپائیں",
+ "translate-ls-noempty": "مکمل طور پر غیر ترجمہ شدہ پیامی گروہوں کو چھپائیں",
+ "translate-language": "زبان",
+ "translate-total": "پیغامات",
+ "translate-untranslated": "غیر ترجمہ شدہ",
+ "translate-percentage-complete": "تکمیل",
+ "translate-percentage-fuzzy": "از کار رفتہ",
+ "translate-percentage-proofread": "نظر ثانی شدہ",
+ "translate-languagestats-overall": "تمام پیامی گروہ ایک ساتھ",
+ "translate-ls-submit": "شماریات دکھائیں",
+ "translate-ls-column-group": "پیامی گروہ",
+ "translate-mgs-pagename": "پیامی گروہ کے اعداد و شمار",
+ "translate-mgs-fieldset": "ڈسپلے کی ترجیحات",
+ "translate-mgs-group": "پیامی گروہ:",
+ "translate-mgs-nocomplete": "ان زبانوں کو نہ دکھائیں جن کے تراجم مکمل ہو چکے ہیں",
+ "translate-mgs-noempty": "ان زبانوں کو نہ دکھائیں جن کے تراجم نہیں ہوئے ہیں",
+ "translate-mgs-submit": "شماریات دکھائیں",
+ "translate-mgs-column-language": "زبان",
+ "translate-mgs-totals": "جملہ $1 {{PLURAL:$1|زبان|زبانیں}} ایک ساتھ",
+ "supportedlanguages": "حمایت کی زبانیں",
+ "supportedlanguages-recenttranslations": "حالیہ تراجم",
+ "supportedlanguages-count": "کل $1 {{PLURAL:$1|زبان|زبانیں}}",
+ "translate-jssti-add": "فہرست کرنے کے لئے شامل کریں",
+ "translate-smg-right": "آنے والی تبدیلیاں",
+ "translate-manage-action-import": "درآمد",
+ "translate-manage-action-ignore": "نظر انداز",
+ "translate-manage-import-ok": "درآمد شدہ: $1",
+ "translate-manage-import-done": "درآمد مکمل!",
+ "importtranslations": "تراجم درآمد کریں",
+ "translate-import-load": "بوجھ فائل",
+ "translate-js-support-unsaved-warning": "آپ کے کچھ تراجم اب تک محفوظ نہیں ہوئے ہیں۔",
+ "translate-gs-code": "کوڈ",
+ "translate-gs-continent": "براعظم",
+ "translate-gs-speakers": "مقررین",
+ "translate-gs-score": "سکور",
+ "translate-gs-multiple": "ایک سے زیادہ",
+ "translate-gs-count": "شمار",
+ "translate-gs-total": "کل",
+ "translate-documentation-language": "پیغام کی دستاویز سازی",
+ "translate-searchprofile": "ترجمہ",
+ "translate-searchprofile-tooltip": "تمام تراجم میں تلاش کریں",
+ "translate-search-languagefilter": "فلٹر بلحاظ زبان",
+ "translate-search-nofilter": "کوئی فلٹر نہیں",
+ "log-name-translationreview": "نوشتہ مراجعت ترجمہ",
+ "logentry-translationreview-message": "$1 نے $3 ترجمہ پر {{GENDER:$2|نظر ثانی کی}}",
+ "group-translate-sandboxed": "غیر منظور شدہ مترجمین",
+ "translate-workflow-state-": "(غیر مرتب)",
+ "translate-workflow-set-doing": "مرتب ہو رہا ہے۔۔۔",
+ "translate-stats-workflow": "حیثیت",
+ "translate-dynagroup-recent-label": "حالیہ تراجم",
+ "translate-dynagroup-recent-desc": "اس پیامی گروہ میں اس زبان میں ہونے والے تازہ ترین ترجموں کو دکھایا گیا ہے۔\nنظرثانی کے کاموں کے لیے انتہائی مفید ہے۔",
+ "translate-dynagroup-additions-label": "حالیہ اضافے",
+ "translate-msggroupselector-projects": "گروہ پیغامات",
+ "translate-msggroupselector-search-all": "تمام",
+ "translate-msggroupselector-search-recent": "حالیہ",
+ "tux-languageselector": "ترجمہ در",
+ "tux-tab-all": "تمام",
+ "tux-tab-untranslated": "غیر ترجمہ شدہ",
+ "tux-tab-outdated": "از کار رفتہ",
+ "tux-tab-translated": "ترجمہ شدہ",
+ "tux-tab-unproofread": "غیر نظرثانی شدہ",
+ "tux-edit": "ترمیم",
+ "tux-status-optional": "اختیاری",
+ "tux-status-fuzzy": "از کار رفتہ",
+ "tux-status-proofread": "نظرثانی شدہ",
+ "tux-status-translated": "ترجمہ مکمل",
+ "tux-status-saving": "محفوظ ہورہا ہے...",
+ "tux-status-unsaved": "غیر محفوظ",
+ "tux-save-unknown-error": "نامعلوم نقص واقع ہوا ہے۔",
+ "tux-editor-editsummary-placeholder": "اختیاری خلاصہ",
+ "tux-editor-paste-original-button-label": "ماخذی متن چسپاں کریں",
+ "tux-editor-discard-changes-button-label": "تبدیلیاں مسترد کریں",
+ "tux-editor-save-button-label": "ترجمہ محفوظ کریں",
+ "tux-editor-skip-button-label": "آگے بڑھیں",
+ "tux-editor-cancel-button-label": "منسوخ کریں",
+ "tux-editor-confirm-button-label": "ترجمہ کی تصدیق کریں",
+ "tux-editor-proofread-button-label": "بطور نظرثانی شدہ نشان زد کریں",
+ "tux-editor-shortcut-info": "تصدیق اور اگلے پیغام پر جانے کے لیے \"$1\"، اسے چھوڑ کر آگے بڑھنے کے لیے \"$2\"، خلاصہ درج کرنے کے لیے \"$4\" یا دیگر شارٹ کٹ کے لیے \"$3\" دبائیں۔",
+ "tux-editor-edit-desc": "دستاویز میں ترمیم کریں",
+ "tux-editor-add-desc": "دستاویز شامل کریں",
+ "tux-editor-suggestions-title": "تجاویز",
+ "tux-editor-in-other-languages": "دیگر زبانوں میں",
+ "tux-editor-need-more-help": "مزید مدد کی ضرورت ہے؟",
+ "tux-editor-ask-help": "مزید معلومات طلب کریں",
+ "tux-notices-hide": "چھپائیں",
+ "tux-editor-n-uses": "$1 {{PLURAL:$1|دفعہ}} مستعمل",
+ "tux-editor-message-desc-more": "مزید دیکھیں",
+ "tux-editor-message-desc-less": "کم دکھائیں",
+ "tux-editor-clear-translated": "ترجمہ شدہ کو چھپائیں",
+ "tux-editor-proofreading-mode": "نظرثانی کریں",
+ "tux-editor-translate-mode": "فہرست",
+ "tux-editor-proofreading-hide-own-translations": "اپنے تراجم کو چھپائیں",
+ "tux-editor-proofreading-show-own-translations": "اپنے تراجم دکھائیں",
+ "tux-proofread-action-tooltip": "بطور نظرثانی شدہ نشان زد کریں",
+ "tux-proofread-edit-label": "ترمیم",
+ "tux-editor-page-mode": "صفحہ",
+ "tux-editor-outdated-notice": "اس ترجمے کی تجدید ضروری ہے۔",
+ "tux-editor-outdated-notice-diff-link": "فرق دکھائیں",
+ "tux-editor-doc-editor-placeholder": "پیغام کی دستاویز سازی",
+ "tux-editor-doc-editor-save": "دستاویز محفوظ کریں",
+ "tux-editor-doc-editor-cancel": "منسوخ کریں",
+ "tux-messagetable-more-messages": "$1 مزید {{PLURAL:$1|پیغام}}",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|پیغام}} لوڈ ہو رہے ہیں۔۔۔",
+ "tux-message-filter-placeholder": "فہرست میں تلاش کریں",
+ "tux-message-filter-result": "«$2» {{PLURAL:$1|کا|کے}} $1 {{PLURAL:$1|نتیجہ ملا|نتائج ملے}}",
+ "tux-message-filter-advanced-button": "پیشرفتہ تلاش",
+ "tux-message-filter-optional-messages-label": "اختیاری پیغامات",
+ "tux-proofread-translated-by-self": "آپ کے تراجم",
+ "tux-empty-list-translated": "کوئی ترجمہ شدہ پیغام نہیں ہے",
+ "tux-empty-list-translated-guide": "آپ ترجمہ کرنے میں مدد کر سکتے ہیں",
+ "tux-empty-list-translated-action": "ترجمہ کریں",
+ "tux-empty-no-messages-to-display": "دکھانے کے لیے کوئی پیغام نہیں ہے ۔",
+ "tux-empty-there-are-optional": "اختیاری پیغامات کو فہرست میں نہیں دکھایا گیا ہے ۔",
+ "tux-empty-show-optional-messages": "اختیاری پیغامات دکھائیں",
+ "tux-empty-no-outdated-messages": "کوئی پرانے پیغامات نہيں ہیں",
+ "tux-empty-nothing-to-proofread": "نظرثانی کے لیے کچھ نہیں ہے",
+ "tux-empty-you-can-help-providing": "آپ نئے ترجمے فراہم کرنے میں مدد کر سکتے ہیں",
+ "tux-empty-nothing-new-to-proofread": "نظرثانی کے لیے کوئی تازہ پیغام نہیں ہے",
+ "tux-empty-you-can-review-already-proofread": "البتہ جن ترجموں پر دیگر افراد نے نظرثانی کر لی ہے آپ ان کی نظر ثانی کر سکتے ہیں۔",
+ "tux-empty-list-other": "ترجمہ کے لیے کوئی مواد نہیں",
+ "tux-empty-list-other-guide": "آپ موجودہ ترجموں کی نظرثانی میں مدد کر سکتے ہیں",
+ "tux-empty-list-other-action": "ترجموں پر نظر ثانی کریں",
+ "tux-empty-list-other-link": "تمام پیغامات دکھائیں",
+ "tux-editor-close-tooltip": "بند کریں",
+ "tux-editor-expand-tooltip": "کھولیں",
+ "tux-editor-collapse-tooltip": "چھپائیں",
+ "tux-editor-message-tools-show-editor": "ویکی خانہ ترمیم میں دکھائیں",
+ "tux-editor-message-tools-history": "تاریخچہ",
+ "tux-editor-message-tools-delete": "حذف کریں",
+ "tux-editor-message-tools-translations": "جملہ تراجم",
+ "tux-editor-message-tools-linktothis": "اس پیغام سے ربط کریں",
+ "tux-editor-loading": "لوڈ ہو رہا ہے۔۔۔",
+ "translate-search-more-languages-info": "$1 مزید {{PLURAL:$1|زبان|زبانیں}}",
+ "translate-statsbar-tooltip": "$1% ترجمہ شدہ، $2% نظر ثانی شدہ",
+ "translate-statsbar-tooltip-with-fuzzy": "$1٪ ترجمہ شدہ، $2٪ نظر ثانی شدہ، $3٪ ازکار رفتہ",
+ "tux-session-expired": "آپ لاگ ان نہیں نہیں، براہ کرم دوسرے ٹیب میں لاگ ان ہوں۔ یا غیر محفوظ ترجموں کو نقل کریں، لاگ ان ہوں اور واپس اس صفحے میں پہنچ کر اپنے ترجمے دوبارہ درج کریں۔",
+ "tux-nojs": "اس صفحے کے لیے جاوا اسکرپٹ درکار ہے۔"
+}
diff --git a/Translate/i18n/core/uz.json b/Translate/i18n/core/uz.json
new file mode 100644
index 00000000..93a78d43
--- /dev/null
+++ b/Translate/i18n/core/uz.json
@@ -0,0 +1,273 @@
+{
+ "@metadata": {
+ "authors": [
+ "CoderSI",
+ "Malikxan",
+ "Sociologist",
+ "Zafar Shamsiddinov"
+ ]
+ },
+ "translate": "Tarjima",
+ "translate-desc": "MediaWiki va boshqa dasturlarni tarjima qilish uchun [[Special:Translate|maxsus sahifa]]",
+ "translate-taskui-export-to-file": "O'z formatida eksport qilish",
+ "translate-taskui-export-as-po": "Off-line tarjima uchun eksport qilish",
+ "translate-taction-translate": "Tarjima",
+ "translate-taction-proofread": "Koʻrib chiqmoq",
+ "translate-taction-lstats": "Til statistikasi",
+ "translate-taction-mstats": "Xabarlar guruhlari statistikasi",
+ "translate-taction-export": "Eksport",
+ "translate-taction-disabled": "Bu vikida bu amal o'chirilgan.",
+ "translate-page-no-such-language": "Noto'g'ri til kodi yuborildi",
+ "translate-page-no-such-group": "Guruh noto'g'ri ko'rsatildi.",
+ "translate-page-disabled": "Bu boʻlimda ushbu tilga tarjima qilish toʻxtatilgan. Sababi: <em>$1</em>",
+ "translate-language-disabled": "Bu tilga tarjima qilish imkoniyati o'chirilgan.",
+ "translate-page-settings-legend": "Sozlamalar",
+ "translate-page-group": "Guruh",
+ "translate-page-language": "Til",
+ "translate-page-limit": "Chegara",
+ "translate-page-limit-option": "$1 har sahifada {{PLURAL:$1|ta xabar|ta xabar}}",
+ "translate-submit": "Tasvirlash",
+ "translate-page-navigation-legend": "Saytda harakatlanish",
+ "translate-page-showing": "$3 ta xabardan $1-dan $2-gacha boʻlganlari koʻrsatildi.",
+ "translate-page-showing-all": "$1 koʻrsatildi {{PLURAL:$1|ta xabar|ta xabar}}.",
+ "translate-page-showing-none": "Mos xabarlar mavjud emas.",
+ "translate-next": "Keyingi sahifa",
+ "translate-prev": "Oldingi sahifa",
+ "translate-page-description-legend": "Guruh haqida ma'lumot",
+ "translate-page-description-hasoptional": "Mazkur guruhda qo'shimcha xabarlar mavjud.\nQo'shimcha xabarlar faqat shu hollardagina tarjima qilinadi, qachonki xususiy nomlarni transliteratsiya qilishda, yoki agar sizning tilingiz qandaydir qo'shimcha shartlarni taqdim qilsa, - masalan, agarki qayerlardadir bo'sh joydan foydalanmaslik kerak bo'lsa. $1",
+ "translate-page-description-hasoptional-open": "Qoʻshimcha xabarlarni koʻrsatish",
+ "translate-page-edit": "tahrir",
+ "translate-optional": "(majburiy emas)",
+ "translate-ignored": "(e'tiborga olinmagan)",
+ "translate-edit-title": "Tahrir \"$1\"",
+ "translate-edit-definition": "Xabar ifodasi",
+ "translate-edit-contribute": "tahrirlash",
+ "translate-edit-no-information": "<em>Bu xabar tavsifga ega emas. Agar siz bu xabar qayerda va qanday ishlatilishini bilsangiz, u holda unga tavsif kiritib boshqa tarjimonlarga yordam berishingiz mumkin.</em>",
+ "translate-edit-information": "Xabar haqida maʼlumot ($1)",
+ "translate-edit-warnings": "Chala tarjima qilinayotgani haqida ogohlantirishlar",
+ "translate-edit-tmmatch-source": "Tarjima uchun manba xabar matni: $1",
+ "translate-edit-tmmatch": "$1% moslik",
+ "translate-edit-nopermission": "Xabarni tarjima qilish uchun ruxsat zarur.",
+ "translate-edit-askpermission": "Ruxsat soʻramoq",
+ "exporttranslations": "Tarjimalarni eksport qilish",
+ "translate-export-form-format": "Format",
+ "translate-checks-parameters": "Quyidagi {{PLURAL:$2|koʻrsatkich|koʻrsatkichlar}} qoʻllanilmayapti:\n<strong>$1</strong>",
+ "translate-checks-balance": "Teng boʻlmagan miqdor mavjud {{PLURAL:$2|ta qavs|ta qavs}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "Quyidagi {{PLURAL:$2|1=havola|$2 ta havola}} muammo keltirib chiqarmoqda:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "Quyidagi {{PLURAL:$2|havola ishlatilmayapti|$2 ta havola ishlatilmayapti}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Originalda <nowiki>{{PLURAL:}}</nowiki>dan foydalanilgan, tarjimada esa — yoʻq.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki>da {{PLURAL:$1|$1 ta o'zgaruvchi}} kiritildi, lekin {{PLURAL:$2|faqat bitta o'zgaruvchi|$2 ta o'zgaruvchi}} qo'llaniladi (0= va 1= talik o'zgaruvchilar bundan mustasno).",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> xato.",
+ "translate-checks-fudforum-syntax": "Ushbu loyihada <nowiki>$2</nowiki> o'rniga <nowiki>$1</nowiki> dan foydalanish.",
+ "translate-pref-editassistlang": "Yordamchi tillar:",
+ "prefs-translate": "Tarjima moslamalari",
+ "translate-pref-editassistlang-bad": "Ro'yxatda noto'g'ri til kodi:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Tarjima qilish interfeysidan foydalangan holda tahrirlash",
+ "right-translate-manage": "Xabarlar guruhlarini boshqarish",
+ "action-translate-manage": "xabarlar guruhlarini boshqarish",
+ "right-translate-import": "Offline tarjimalarni yuklash",
+ "action-translate-import": "offline tarjimalarni yuklash",
+ "right-translate-messagereview": "Tarjimalarni koʻrib chiqish",
+ "right-translate-groupreview": "Xabarlar guruhlarini qayta ishlash holatini o'zgartirish",
+ "translate-rcfilters-translations": "Tarjimalar",
+ "translate-rcfilters-translations-only-label": "Tarjimalar",
+ "translate-rcfilters-translations-filter-label": "Tarjimalar yoʻq",
+ "translate-rc-translation-filter": "Tarjimalarni filtrlash",
+ "translate-rc-translation-filter-no": "Cheklovlarsiz",
+ "translate-rc-translation-filter-only": "Faqat tarjimalarni koʻrsatish",
+ "translate-rc-translation-filter-filter": "Tarjimalarni yashirish",
+ "translate-rc-translation-filter-site": "Faqat sayt tizimining xabarlari",
+ "translationstats": "Tarjimalar statistikasi",
+ "translate-stats-edits": "Tahrirlar",
+ "translate-stats-users": "Tarjimonlar",
+ "translate-stats-registrations": "Ro'yxatga olishlar",
+ "translate-stats-reviews": "Tekshiruvlar",
+ "translate-stats-reviewers": "Tekshiruvchilar",
+ "translate-statsf-intro": "Quyidagi shakl yordamida qulay statistik jadval tuzishingiz mumkin.\nBarcha qiymatlar uchun ustki va ostki chegaralarni tayinlash mumkin.",
+ "translate-statsf-options": "Jadval moslamalari",
+ "translate-statsf-width": "Uzunligi (piksellarda):",
+ "translate-statsf-height": "Balandligi (piksellarda):",
+ "translate-statsf-days": "Muddati (kunlarda):",
+ "translate-statsf-start": "Boshlangʻich sana:",
+ "translate-statsf-scale": "Tafsilotlilik darajasi:",
+ "translate-statsf-scale-months": "Oylar",
+ "translate-statsf-scale-weeks": "Haftalar",
+ "translate-statsf-scale-days": "Kunlar",
+ "translate-statsf-scale-hours": "Soatlar",
+ "translate-statsf-count": "Oʻlchov birligi:",
+ "translate-statsf-count-edits": "Tahrirlar soni",
+ "translate-statsf-count-users": "Faol tarjimonlar",
+ "translate-statsf-count-registrations": "Yangi tarjimonlar",
+ "translate-statsf-count-reviews": "Tekshiruvlar",
+ "translate-statsf-count-reviewers": "Tekshiruvchilar",
+ "translate-statsf-language": "Til kodlarining roʻyxati (vergul bilan ajrating):",
+ "translate-statsf-group": "Guruh kodlarining roʻyxati (vergul bilan ajrating):",
+ "translate-statsf-submit": "Ko‘rib chiqish",
+ "translate-tag-page-desc": "Viki-sahifalari tarjimalari muallifi [[$2|$1]] $3 ($4).",
+ "translate-sidebar-alltrans": "Boshqa tillarda",
+ "translations": "Barcha tarjimalar",
+ "translations-summary": "Barcha ruxsat etilgan tarjimalarni tasvirlash uchun xabar nomini kiriting.",
+ "translate-translations-no-message": "\"$1\" tarjima qilinmaydigan xabar",
+ "translate-translations-none": "\"$1\" uchun tarjimalar mavjud emas",
+ "translate-translations-count": "{{PLURAL:$1|Bitta tarjima|$1 ta tarjima}} topildi.",
+ "translate-translations-fieldset-title": "Xabar",
+ "translate-translations-messagename": "Nomi:",
+ "translate-translations-project": "Loyiha:",
+ "translate-translations-history-short": "t",
+ "languagestats": "Til boʻyicha statistika",
+ "languagestats-summary": "Bu sahifada mazkur tilning barcha guruhlar boʻyicha tarjimalar statistikasi keltirilgan.",
+ "languagestats-stats-for": "$1 uchun tarjimalar statistikasi ($2).",
+ "languagestats-recenttranslations": "yaqin oradagi tarjimalar",
+ "translate-langstats-incomplete": "Ushbu sahifadagi ayrim statistika ma'lumotlari to'liq emas. To'liq ma'lumotlar olish uchun sahifani qayta yuklang.",
+ "translate-langstats-expand": "yoyish",
+ "translate-langstats-collapse": "yigʻish",
+ "translate-langstats-expandall": "hammasini yoyish",
+ "translate-langstats-collapseall": "hammasini yigʻish",
+ "translate-language-code": "Til kodi",
+ "translate-language-code-field-name": "Til kodi:",
+ "translate-suppress-complete": "Toʻliq tarjima qilingan xabar guruhlari koʻrsatilmasin",
+ "translate-ls-noempty": "Toʻliq tarjima qilinmagan xabar guruhlari koʻrsatilmasin",
+ "translate-language": "Til",
+ "translate-total": "Xabarlar",
+ "translate-untranslated": "Tarjima qilinmagan",
+ "translate-percentage-complete": "Tayyor",
+ "translate-percentage-fuzzy": "Eskirgan",
+ "translate-percentage-proofread": "Tekshirilgan",
+ "translate-languagestats-overall": "Jami (barcha xabarlar)",
+ "translate-ls-submit": "Statistikani koʻrsat",
+ "translate-ls-column-group": "Xabarlar guruhi",
+ "translate-mgs-pagename": "Xabarlar guruhlari statistikasi",
+ "translate-mgs-fieldset": "Moslamalarni koʻrsatish",
+ "translate-mgs-group": "Xabarlar guruhi:",
+ "translate-mgs-submit": "Statistikani koʻrsat",
+ "translate-mgs-column-language": "Til",
+ "supportedlanguages": "Faol tillar",
+ "supportedlanguages-summary": "Ushbu sahifada {{SITENAME}} loyihasida qoʻllaniladigan tillar roʻyxati va shu tillarga tarjima qilish ustida ishlayotgan tarjimonlar ismi keltirilgan.\nTarjimonning ismi u qancha koʻp tahrirlar qilgan boʻlsa, shuncha yirikroq tasvirlanadi.\nTagchiziqning rangiga qarab, tarjimon bu yerda oxirgi marta qancha vaqt oldin biron-bir harakatni amalga oshirganligini tushunsa boʻladi.",
+ "supportedlanguages-colorlegend": "Rang sharhi: oxirgi tarjima $1 kun avval boʻlgan.",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Tarjimon}}|Tarjimonlar}}: $1",
+ "supportedlanguages-recenttranslations": "yaqin oradagi tarjimalar",
+ "supportedlanguages-count": "Jami $1 {{PLURAL:$1|ta til}}.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|ta tahrir}} - oxirgi tahrir $3 {{PLURAL:$3|kun}} oldin",
+ "translate-jssti-add": "Roʻyxatga qoʻshish",
+ "managemessagegroups": "Xabar guruhlarini boshqarish",
+ "translate-smg-nochanges": "Ishlov berish uchun mos oʻzgarishlar yoʻq.",
+ "translate-smg-left": "Xabarning vikidagi tarkibi",
+ "translate-smg-right": "Kiruvchi oʻzgarishlar",
+ "translate-smg-rename-select": "Tanlash",
+ "translate-smg-rename-cancel": "Bekor qilish",
+ "translate-smg-rename-no-msg": "Xabarlar topilmadi.",
+ "translate-smg-strong-sync-help": "Yordam",
+ "translate-smg-group-message-action-history": "Tarix",
+ "translate-smg-group-action-resolve": "Yechilgan deb belgilash",
+ "translate-smg-group-message-tag-outdated": "Eskirgan",
+ "translate-smg-group-message-tag-rename": "Qayta nomlash",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|Teg|Teglar}}:",
+ "translate-smg-group-message-message-other-langs": "Boshqa tillar:",
+ "translate-smg-loading": "Yuklanmoqda...",
+ "translate-manage-import-diff": "Xabar $1 | Amallar: $2",
+ "translate-manage-import-new": "Yangi xabar $1",
+ "translate-manage-import-deleted": "O'chirilgan xabar $1",
+ "translate-manage-action-import": "Import",
+ "translate-manage-action-conflict": "Import qilish va noaniqlik",
+ "translate-manage-action-ignore": "Eʼtibor berilmasin",
+ "translate-manage-action-fuzzy": "Import qilingan va eskirgan tarjimalar",
+ "translate-manage-action-rename": "Qayta nomlash",
+ "translate-manage-source-message-not-found": "Xabar tavsifi topilmadi.",
+ "translate-js-support-unsaved-warning": "Sizda saqlanmagan tarjimalar bor.",
+ "translate-gs-pos": "O'r.",
+ "translate-gs-code": "Kod",
+ "translate-gs-continent": "Qit'a",
+ "translate-gs-speakers": "So'zlashuvchilar",
+ "translate-gs-score": "Baho",
+ "translate-gs-multiple": "Bir qancha",
+ "translate-gs-count": "Miqdor",
+ "translate-gs-total": "Jami",
+ "translate-gs-avgscore": "O'rt. baho",
+ "translate-documentation-language": "Xabarlar hujjatlashtirilishi",
+ "translate-searchprofile": "Tarjimalar",
+ "translate-searchprofile-tooltip": "Barcha tarjimalardan qidirish",
+ "translate-search-languagefilter": "Mazkur til boʻyicha saralash:",
+ "translate-search-nofilter": "Filtrsiz",
+ "log-name-translationreview": "Tarjimalarni tekshirish qaydlari",
+ "log-description-translationreview": "Tarjimalar va xabar guruhlarini tekshirib chiqish qaydlarining toʻliq roʻyxati",
+ "logentry-translationreview-message": "$1 $3 sahifasi tarjimasini {{GENDER:$2|tekshirib chiqdi}}",
+ "translate-workflow-state-": "(o'rnatilmagan)",
+ "translate-workflowstatus": "Holat: $1",
+ "translate-workflow-set-doing": "O'rnatilmoqda...",
+ "translate-stats-workflow": "Holat",
+ "translate-workflowgroup-label": "Jarayon holati",
+ "translate-dynagroup-recent-label": "Yaqin oradagi tarjimalar",
+ "translate-dynagroup-recent-desc": "Ushbu xabarlar guruhida mazkur tilga yaqin orada qilingan barcha tarjimalar koʻrsatilgan.\nTarjimalarni koʻzdan kechirib chiqish uchun qulay.",
+ "translate-msggroupselector-projects": "Xabarlar guruhi",
+ "translate-msggroupselector-search-placeholder": "Qidiruv guruhlari",
+ "translate-msggroupselector-search-all": "Barchasi",
+ "translate-msggroupselector-search-recent": "Soʻnggi",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|ta ostguruh}}",
+ "tux-tab-all": "Barchasi",
+ "tux-tab-untranslated": "Tarjima qilinmagan",
+ "tux-tab-outdated": "Eskirgan",
+ "tux-tab-translated": "Tarjima qilingan",
+ "tux-tab-unproofread": "Tekshirilmagan",
+ "tux-edit": "Tahrirlash",
+ "tux-status-optional": "Ixtiyoriy",
+ "tux-status-fuzzy": "Eskirgan",
+ "tux-status-proofread": "Tekshirilgan",
+ "tux-status-translated": "Tarjima qilingan",
+ "tux-status-saving": "Chop etilyapti...",
+ "tux-status-unsaved": "Chop etilmadi",
+ "tux-save-unknown-error": "Noma’lum xatolik roʻy berdi.",
+ "tux-editor-placeholder-language": "$1da tarjimangiz",
+ "tux-editor-editsummary-placeholder": "Ixtiyoriy qisqa izoh",
+ "tux-editor-paste-original-button-label": "Manba matnini qoʻshib qoʻyish",
+ "tux-editor-save-button-label": "Tarjimani chop etish",
+ "tux-editor-cancel-button-label": "Bekor qilish",
+ "tux-editor-confirm-button-label": "Tarjimani tasdiqlash",
+ "tux-editor-proofread-button-label": "Tekshirilgan deb belgilash",
+ "tux-editor-shortcut-info": "Tasdiqlash va keyingi xabarga oʻtish uchun „$1“ tugmasini, oʻtkazib yuborish uchun „$2“ tugmasini, qisqa izoh berish uchun „$4“ tugmasini bosing yoki boshqa qisqartmalarni koʻrish uchun „$3“ tugmasini bosib turing.",
+ "tux-editor-edit-desc": "Hujjat sahifasini tahrirlash",
+ "tux-editor-add-desc": "Hujjat qoʻshish",
+ "tux-editor-suggestions-title": "Takliflar",
+ "tux-editor-in-other-languages": "Boshqa tillarda",
+ "tux-editor-need-more-help": "Koʻproq yordamga muhtojmisiz?",
+ "tux-editor-ask-help": "Batafsil maʼlumot uchun soʻrash",
+ "tux-editor-tm-match": "$1% moslik",
+ "tux-notices-hide": "yashirish",
+ "tux-editor-message-desc-more": "Koʻproq koʻrish",
+ "tux-editor-message-desc-less": "Kamroq koʻrish",
+ "tux-editor-clear-translated": "Tarjima qilinganlarini yashirish",
+ "tux-editor-proofreading-mode": "Tekshiruvlar",
+ "tux-editor-translate-mode": "Roʻyxat",
+ "tux-editor-proofreading-hide-own-translations": "Tarjimalaringizni yashirish",
+ "tux-editor-proofreading-show-own-translations": "Tarjimalaringizni koʻrsatish",
+ "tux-proofread-action-tooltip": "Tekshirilgan deb belgilash",
+ "tux-proofread-edit-label": "Tahrirlash",
+ "tux-editor-page-mode": "Sahifa",
+ "tux-editor-outdated-notice-diff-link": "Farqlarni koʻrsatish",
+ "tux-editor-doc-editor-save": "Hujjatni chop etish",
+ "tux-editor-doc-editor-cancel": "Bekor qilish",
+ "tux-messagetable-more-messages": "$1 dan oshiq {{PLURAL:$1|xabar}}",
+ "tux-messagetable-loading-messages": "{{PLURAL:$1|Xabar|Xabarlar}} yuklanmoqda...",
+ "tux-message-filter-placeholder": "Filtr roʻyxati",
+ "tux-message-filter-result": "„$2“ uchun $1 {{PLURAL:$1|ta natija}} topildi.",
+ "tux-message-filter-advanced-button": "Kengaytirilgan qidiruv",
+ "tux-message-filter-optional-messages-label": "Ixtiyoriy xabar",
+ "tux-empty-list-translated": "Tarjima qilingan xabarlar yoʻq",
+ "tux-empty-list-translated-action": "Tarjima qilish",
+ "tux-empty-show-optional-messages": "Ixtiyoriy xabarlarni koʻrsatish",
+ "tux-empty-no-outdated-messages": "Eskirgan xabarlar yoʻq",
+ "tux-empty-list-other-link": "Barcha xabarlarni koʻrsatish",
+ "tux-editor-close-tooltip": "Yopish",
+ "tux-editor-expand-tooltip": "Yoyish",
+ "tux-editor-collapse-tooltip": "Yigʻish",
+ "tux-editor-message-tools-show-editor": "Viki-muharrirda koʻrsatish",
+ "tux-editor-message-tools-history": "Tarix",
+ "tux-editor-message-tools-delete": "Oʻchirish",
+ "tux-editor-message-tools-translations": "Barcha tarjimalar",
+ "tux-editor-message-tools-linktothis": "Bu xabarga havola",
+ "tux-editor-loading": "Yuklanmoqda...",
+ "translate-search-more-languages-info": "$1 tadan oshiq {{PLURAL:$1|til}}",
+ "translate-statsbar-tooltip": "$1% tarjima qilindi, $2% tekshirildi",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% tarjima qilingan, $2% tekshirilgan, $3% eskirgan",
+ "translate-search-more-groups-info": "$1 tadan oshiq {{PLURAL:$1|guruh}}",
+ "specialpages-group-translation": "Tarjima"
+}
diff --git a/Translate/i18n/core/vec.json b/Translate/i18n/core/vec.json
new file mode 100644
index 00000000..665ab2a5
--- /dev/null
+++ b/Translate/i18n/core/vec.json
@@ -0,0 +1,80 @@
+{
+ "@metadata": {
+ "authors": [
+ "Candalua",
+ "Conky77",
+ "Fierodelveneto"
+ ]
+ },
+ "translate": "Tradusion",
+ "translate-extensionname": "Traduxi",
+ "translate-desc": "[[Special:Translate|Pàjina speçałe]] par tradure MediaWiki e altro",
+ "translate-taction-lstats": "Statìsteghe de ła łéngua",
+ "translate-taction-mstats": "Statìsteghe del grupo de mesaji",
+ "translate-page-no-such-language": "La lengua indicà no la xe valida.",
+ "translate-page-no-such-group": "El grupo indicà no'l xe valido.",
+ "translate-page-settings-legend": "Inpostasion",
+ "translate-page-group": "Grupo",
+ "translate-page-language": "Lengua",
+ "translate-page-limit": "Limite",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|mesajo|mesaji}} par pàjina",
+ "translate-submit": "Mostra",
+ "translate-page-navigation-legend": "Navigassion",
+ "translate-page-showing": "Sti qua i xe i messagi da $1 a $2 de $3.",
+ "translate-page-showing-all": "Ghe xe $1 {{PLURAL:$1|mesajo|mesaji}}.",
+ "translate-page-showing-none": "Nissun messagio da far védar.",
+ "translate-next": "Pagina sucessiva",
+ "translate-prev": "Pagina preçedente",
+ "translate-page-description-legend": "informasion sol grupo",
+ "translate-page-edit": "modìfega",
+ "translate-optional": "(opsionale)",
+ "translate-ignored": "(ignorà)",
+ "translate-edit-title": "Modìfega \"$1\".",
+ "translate-edit-definition": "Definission del messagio",
+ "translate-edit-contribute": "contribuìssi",
+ "translate-edit-no-information": "''Sto messagio no'l gà documentassion.\nSe te sè dove o come sto messagio el vien doparà, te podi jutar altri tradutori zontando documentassion a sto messagio.''",
+ "translate-edit-information": "Informassion sul messagio \"$2\" ($1)",
+ "translate-edit-warnings": "Avertimenti su tradussion incomplete",
+ "translate-checks-parameters": "{{PLURAL:$2|El seguente parametro no'l|I seguenti parametri no i}} xe mìa doparà: <strong>$1</strong>",
+ "translate-checks-balance": "Ghe xe un nùmaro dispari de {{PLURAL:$2|paréntesi|paréntesi}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|El colegamento seguente el|I colegamenti seguenti i}} pol causar problemi:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "La definission la dòpara <nowiki>{{PLURAL:}}</nowiki> ma la tradussion no.",
+ "right-translate": "Modifica doparando l'interfacia de tradussion",
+ "translate-rc-translation-filter": "Filtra le tradussion:",
+ "translate-rc-translation-filter-no": "No stà far gnente",
+ "translationstats": "Statìsteghe de tradusion",
+ "translate-stats-edits": "Modìfeghe",
+ "translate-stats-users": "Tradutori",
+ "translate-statsf-options": "Opsion del grafego",
+ "translate-statsf-width": "Larghezza in pixel:",
+ "translate-statsf-height": "Altezza in pixel:",
+ "translate-statsf-days": "Periodo de tenpo in dì:",
+ "translate-statsf-start": "Periodo de tenpo in giorni:",
+ "translate-statsf-scale": "Un punto ogni:",
+ "translate-statsf-scale-days": "Dì",
+ "translate-statsf-scale-hours": "Ora",
+ "translate-statsf-count": "Misura:",
+ "translate-statsf-count-edits": "Nùmaro de modìfeghe",
+ "translate-statsf-count-users": "Tradutori ativi",
+ "translate-statsf-submit": "Anteprima",
+ "translate-tag-page-desc": "Tradussion de la pagina wiki [[$2|$1]].",
+ "translate-sidebar-alltrans": "In altre lengoe",
+ "translations": "Tute le tradussion",
+ "translate-translations-fieldset-title": "Messajo",
+ "translate-translations-messagename": "Nome:",
+ "translate-translations-project": "Projeto:",
+ "languagestats": "Statìsteghe de ła łéngua",
+ "translate-language-code": "Còdese lengoa",
+ "translate-language-code-field-name": "Còdese lengoa:",
+ "translate-language": "Lengoa",
+ "translate-total": "Messaji",
+ "translate-untranslated": "Mia tradoti",
+ "translate-percentage-complete": "Conpletà",
+ "translate-percentage-fuzzy": "Da ajornar",
+ "translate-ls-column-group": "Grupo de mesaji",
+ "translate-mgs-pagename": "Statìsteghe del grupo de mesaji",
+ "translate-mgs-group": "Grupo de mesaji",
+ "managemessagegroups": "Xestion del grupo de mesaji",
+ "translate-documentation-language": "Documentasion del mesajo",
+ "translate-msggroupselector-projects": "Grupo de mesaji"
+}
diff --git a/Translate/i18n/core/vep.json b/Translate/i18n/core/vep.json
new file mode 100644
index 00000000..3262e988
--- /dev/null
+++ b/Translate/i18n/core/vep.json
@@ -0,0 +1,133 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sociologist",
+ "Игорь Бродский"
+ ]
+ },
+ "translate": "Käta",
+ "translate-desc": "[[Special:Translate|Specialine lehtpol']] MediaWikid da toižid programmid kätes",
+ "translate-taskui-export-to-file": "Eksportiruida ičeze formatas",
+ "translate-taskui-export-as-po": "Eksportiruida, miše käta verkota",
+ "translate-taction-translate": "Käta",
+ "translate-taction-proofread": "Kodvda",
+ "translate-taction-lstats": "Kel'statistik",
+ "translate-taction-mstats": "Kirjutesiden gruppiden statistik",
+ "translate-taction-export": "Eksport",
+ "translate-taction-disabled": "Nece tegend om kävutamatoi neciš vikiš.",
+ "translate-page-no-such-language": "Ozutadud kel' om petuzline.",
+ "translate-page-no-such-group": "Ozutadud grupp om petuzline.",
+ "translate-language-disabled": "Ei sa käta neche kel'he.",
+ "translate-page-settings-legend": "Järgendused",
+ "translate-page-group": "Grupp",
+ "translate-page-language": "Kel'",
+ "translate-page-limit": "Kaidenduz",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|tedotuz|tedotust}} lehtpolel",
+ "translate-submit": "Ozutada",
+ "translate-page-navigation-legend": "Navigacii",
+ "translate-page-showing-all": "Ozutam $1 {{PLURAL:$1|kirjutez|kirjutest}}.",
+ "translate-page-showing-none": "Ei ole kirjutesid ozutades.",
+ "translate-next": "Jäl'ghine lehtpol'",
+ "translate-prev": "Edeline lehtpol'",
+ "translate-page-description-legend": "Informacii gruppas",
+ "translate-page-description-hasoptional-open": "Ozutada ližakirjutesed.",
+ "translate-page-edit": "redaktiruida",
+ "translate-optional": "(opcionaline)",
+ "translate-ignored": "(ignoriruidud)",
+ "translate-edit-title": "Redaktiruida \"$1\"",
+ "translate-edit-definition": "Tedotusen formuliruind",
+ "translate-edit-contribute": "ühtneda",
+ "translate-edit-information": "Informacii ($1)-kirjutesen polhe",
+ "translate-edit-warnings": "Varutused täutmatomiš kändusiš",
+ "translate-edit-tmmatch": "Sättund om $1%",
+ "translate-edit-askpermission": "Pakita laskendas",
+ "translate-pref-editassistlang": "Abukeled:",
+ "prefs-translate": "Kändmižen opcijad",
+ "translate-rc-translation-filter": "Fil'truida kändmižed:",
+ "translate-rc-translation-filter-no": "Ala tege nimidä",
+ "translate-rc-translation-filter-only": "Ozutada vaiše kändmižed",
+ "translate-rc-translation-filter-filter": "Peitta kändmižed",
+ "translate-rc-translation-filter-site": "Vaiše saitan sistemtedotusiden toižetamine",
+ "translationstats": "Kändmižen statistik",
+ "translate-stats-edits": "Redakcijad",
+ "translate-stats-users": "Kändajad",
+ "translate-stats-registrations": "Registracijad",
+ "translate-stats-reviews": "Redakcijad",
+ "translate-stats-reviewers": "Arvostelijad",
+ "translate-statsf-options": "Grafikan järgendused",
+ "translate-statsf-width": "Leveduz pikseliš:",
+ "translate-statsf-height": "Korktuz pikseliš:",
+ "translate-statsf-days": "Pord päiviš:",
+ "translate-statsf-start": "Augotiždat:",
+ "translate-statsf-scale": "Detalizacijan mär:",
+ "translate-statsf-scale-months": "Kud",
+ "translate-statsf-scale-weeks": "Nedalid",
+ "translate-statsf-scale-days": "Päiväd",
+ "translate-statsf-scale-hours": "Časud",
+ "translate-statsf-count": "Mär:",
+ "translate-statsf-count-edits": "Redakcijoiden lugumär",
+ "translate-statsf-count-users": "Aktivižed kändajad",
+ "translate-statsf-count-registrations": "Uded kävutajad",
+ "translate-statsf-count-reviews": "Kändmižen arvostelendad",
+ "translate-statsf-count-reviewers": "Arvostelijad",
+ "translate-statsf-language": "Katkoimel erigoittud kelenkodoiden nimikirjutez:",
+ "translate-statsf-group": "Katkoimel erigoittud gruppkodoiden nimikirjutez:",
+ "translate-statsf-submit": "Ezikacund",
+ "translate-tag-page-desc": "[[$2|$1]]-wikilehtpolen kändmine.",
+ "translate-sidebar-alltrans": "Toižil kelil",
+ "translations": "Kaik kändused",
+ "translate-translations-fieldset-title": "Tedotuz",
+ "translate-translations-messagename": "Nimi:",
+ "translate-translations-project": "Proekt:",
+ "translate-translations-history-short": "i",
+ "languagestats": "Kel'statistik",
+ "languagestats-recenttranslations": "tantoižed kändmižed",
+ "translate-langstats-expand": "levitada",
+ "translate-langstats-collapse": "peitta",
+ "translate-langstats-expandall": "levitada kaik",
+ "translate-langstats-collapseall": "peitta kaik",
+ "translate-language-code": "Kelenkod",
+ "translate-language-code-field-name": "Kelenkod:",
+ "translate-language": "Kel'",
+ "translate-total": "Tedotused",
+ "translate-untranslated": "Kändmatomad",
+ "translate-percentage-complete": "Om tehtud",
+ "translate-percentage-fuzzy": "Om vanhtunu",
+ "translate-languagestats-overall": "Kaik kirjutesiden gruppad ühtes",
+ "translate-mgs-group": "Tedotusiden grupp:",
+ "translate-mgs-submit": "Ozutada statistik",
+ "translate-mgs-column-language": "Kel’",
+ "translate-mgs-totals": "Kaik keled ühtes",
+ "supportedlanguages": "Pid'oiteldud keled",
+ "supportedlanguages-recenttranslations": "tantoižed kändmižed",
+ "translate-jssti-add": "Ližata nimikirjuteshe",
+ "managemessagegroups": "Tedotuzgruppiden ohjanduz",
+ "translate-manage-import-diff": "Tedotuz $1 | Tegod: $2",
+ "translate-manage-import-new": "Uz' tedotuz $1",
+ "translate-manage-import-deleted": "Čutud poiš tedotuz $1",
+ "translate-manage-action-import": "Import",
+ "translate-manage-action-ignore": "Ignoriruida",
+ "translate-manage-submit": "Tehta",
+ "translate-manage-import-done": "Kaik om tehtud!",
+ "translate-import-from-local": "Jügutoitta lokaline fail:",
+ "translate-import-load": "Jügutoitta fail",
+ "translate-gs-pos": "Sij.",
+ "translate-gs-code": "Kod",
+ "translate-gs-continent": "Kontinent",
+ "translate-gs-speakers": "Pagižijad",
+ "translate-gs-score": "Punktad",
+ "translate-gs-multiple": "Äi",
+ "translate-gs-count": "Lugumär",
+ "translate-gs-total": "Ühtes",
+ "translate-searchprofile": "Kändused",
+ "translate-searchprofile-tooltip": "Ectä kaikiš kändmižiš",
+ "translate-search-nofilter": "Fil'truimata",
+ "translate-workflow-state-": "(ei ole kävutamas)",
+ "translate-workflowstatus": "Status: $1",
+ "translate-workflow-set-doing": "Panmine...",
+ "translate-stats-workflow": "Status",
+ "translate-dynagroup-recent-label": "Tantoižed kändmižed",
+ "translate-dynagroup-recent-desc": "Nece tedotandgrupp ozutab kaik tantoižed kändmižed neche kel'he.\nOm tarbhaižemb kodvingtöks.",
+ "tux-empty-list-other-link": "Ozutada kaik kirjutesed",
+ "tux-editor-message-tools-translations": "Kaik kändmižed"
+}
diff --git a/Translate/i18n/core/vi.json b/Translate/i18n/core/vi.json
new file mode 100644
index 00000000..a24765dc
--- /dev/null
+++ b/Translate/i18n/core/vi.json
@@ -0,0 +1,435 @@
+{
+ "@metadata": {
+ "authors": [
+ "Keo010122",
+ "Leduyquang753",
+ "Minh Nguyen",
+ "Nghiemtrongdai VN",
+ "NguoiDungKhongDinhDanh",
+ "Phjtieudoc",
+ "Thin",
+ "Vinhtantran"
+ ]
+ },
+ "translate": "Biên dịch",
+ "translate-extensionname": "Biên dịch",
+ "translate-desc": "[[Special:Translate|Trang đặc biệt]] dùng để dịch MediaWiki và các thứ khác",
+ "translate-fuzzybot-desc": "Đây là tài khoản hệ thống đặc biệt được sử dụng bởi [https://www.mediawiki.org/wiki/Extension:Translate phần mở rộng Translate] của MediaWiki để quản lý các bản dịch.\nTài khoản này trực thuộc phần mềm MediaWiki và không có người dùng nào làm chủ.",
+ "translate-taskui-export-to-file": "Xuất ra định dạng bản địa",
+ "translate-taskui-export-as-po": "Xuất để dịch ngoại tuyến",
+ "translate-taction-translate": "Biên dịch",
+ "translate-taction-proofread": "Duyệt",
+ "translate-taction-lstats": "Thống kê ngôn ngữ",
+ "translate-taction-mstats": "Thống kê nhóm thông điệp",
+ "translate-taction-export": "Xuất",
+ "translate-taction-disabled": "Tác vụ này đã bị tắt trên wiki này.",
+ "translate-page-no-such-language": "Ngôn ngữ chỉ định không đúng.",
+ "translate-page-no-such-group": "Nhóm chỉ định không đúng.",
+ "translate-page-disabled": "Các bản dịch trong ngôn ngữ này trong nhóm đã bị tắt. Lý do:\n\n<em>$1</em>",
+ "translate-language-disabled": "Đã tắt chức năng dịch sang ngôn ngữ này.",
+ "translate-page-settings-legend": "Thiết lập",
+ "translate-page-group": "Nhóm",
+ "translate-page-language": "Ngôn ngữ",
+ "translate-page-limit": "Giới hạn",
+ "translate-page-limit-option": "$1 thông điệp mỗi trang",
+ "translate-submit": "Xem",
+ "translate-page-navigation-legend": "Điều khiển",
+ "translate-page-showing": "Đang hiển thị thông điệp có thứ tự từ $1 đến $2 trong tổng số $3 thông điệp.",
+ "translate-page-showing-all": "Đang hiển thị $1 thông điệp.",
+ "translate-page-showing-none": "Không có thông điệp nào.",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "Trang sau",
+ "translate-prev": "Trang trước",
+ "translate-page-description-legend": "Thông tin về nhóm",
+ "translate-page-description-hasoptional": "Nhóm thông điệp này có thông điệp tùy dịch.\nChỉ nên dịch một thông điệp tùy dịch nếu ngôn ngữ của bạn có những thuộc tính đặc biệt\nthí dụ như không sử dụng khoảng cách hoặc có hệ thống phiên âm tên. $1",
+ "translate-page-description-hasoptional-open": "Xem các thông điệp tùy dịch.",
+ "translate-page-edit": "sửa",
+ "translate-optional": "(tùy chọn)",
+ "translate-ignored": "(đã bỏ)",
+ "translate-edit-title": "Sửa đổi “$1”",
+ "translate-edit-definition": "Định nghĩa thông điệp",
+ "translate-edit-contribute": "đóng góp",
+ "translate-edit-no-information": "<em>Thông điệp này hiện chưa có tài liệu hướng dẫn. Nếu bạn biết thông điệp này dùng ở đâu và dùng như thế nào, bạn có thể giúp những biên dịch viên khác bằng cách thêm tài liệu hướng dẫn cho nó.</em>",
+ "translate-edit-information": "Thông tin về thông điệp ($1)",
+ "translate-edit-warnings": "Các cảnh báo về các bản dịch chưa hoàn thành",
+ "translate-edit-tmmatch-source": "Văn bản gốc để dịch: $1",
+ "translate-edit-tmmatch": "trùng $1%",
+ "translate-edit-nopermission": "Bạn cần xin phép biên dịch thông điệp.",
+ "translate-edit-askpermission": "Xin phép",
+ "exporttranslations": "Xuất bản dịch",
+ "translate-export-form-format": "Định dạng",
+ "translate-export-invalid-format": "Xin hãy định rõ một định dạng hợp lệ.",
+ "translate-export-not-supported": "Chưa hỗ trợ kết xuất bản dịch.",
+ "translate-export-format-notsupported": "Định dạng xuất được chỉ định không được nhóm thông điệp này hỗ trợ.",
+ "translate-export-group-too-large": "Nhóm thông điệp được chọn quá lớn. Hãy chọn một nhóm thông điệp có ít hơn $1 {{PLURAL:$1}}thông điệp hoặc liên hệ một quản lý biên dịch để được trợ giúp.",
+ "translate-checks-parameters": "{{PLURAL:$2|Tham số|Những tham số}} sau không sử dụng:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Tham số|Các tham số}} sau không rõ:\n<strong>$1</strong>",
+ "translate-checks-balance": "Số {{PLURAL:$2}}dấu ngoặc bị lẻ:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Liên kết|Các liên kết}} sau có vấn đề:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Liên kết|Các liên kết}} sau đây bị thiếu:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Định nghĩa sử dụng <nowiki>{{PLURAL:}}</nowiki> nhưng bản dịch không có.",
+ "translate-checks-plural-forms": "{{PLURAL:$1|Một dạng|$1 dạng}} được cung cấp trong thẻ <nowiki>{{PLURAL:}}</nowiki> nhưng ngôn ngữ {{PLURAL:$2|không có phân biệt số ít với số nhiều|chỉ có phân biệt $2 dạng số}} (trừ các dạng 0= và 1=).",
+ "translate-checks-plural-dupe": "Đuôi của thẻ <nowiki>{{PLURAL:}}</nowiki> có dạng thừa. Ví dụ nên đổi <nowiki>{{PLURAL:$1|chó|chó}}</nowiki> thành <nowiki>{{PLURAL:$1|chó}}</nowiki>.",
+ "translate-checks-gettext-plural-missing": "Bản dịch này phải có <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-unsupported": "Thông điệp này không hỗ trợ <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-count": "<nowiki>{{PLURAL:GETTEXT|}}</nowiki> chỉ chấp nhận chính xác $1 {{PLURAL:$1}}dạng số nhiều. Hiện đang có $2 {{PLURAL:$2}}dạng số nhiều.",
+ "translate-checks-smartformat-plural-missing": "Bản dịch này phải có số nhiều tại biến $1.",
+ "translate-checks-smartformat-plural-unsupported": "Thông điệp này không hỗ trợ số nhiều tại biến $1.",
+ "translate-checks-smartformat-plural-count": "Số dạng số nhiều không đúng trong <strong>$3</strong>. Nó phải có $1 {{PLURAL:$1}}dạng số nhiều. Hiện đang có $2 {{PLURAL:$2}}dạng số nhiều.",
+ "translate-checks-unicode-plural-missing": "Bản dịch này phải có <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-unsupported": "Thông điệp này không hỗ trợ <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-invalid": "Dạng số nhiều phải được định nghĩa là $1. Bản dịch này chứa $2.",
+ "translate-checks-pagename": "Không gian tên đã thay đổi so với định nghĩa",
+ "translate-checks-format": "Bản dịch này không đúng định nghĩa hoặc có cú pháp sai: $1",
+ "translate-checks-escape": "{{PLURAL:$2|Dấu thoát|Các dấu thoát}} sau có thể là vô tình: <strong>$1</strong>. {{PLURAL:$4|Dấu thoát hợp lệ là|Các dấu thoát hợp lệ là:}} $3.",
+ "translate-checks-parametersnotequal": "Có {{PLURAL:$1|$1}} tham số; phải có {{PLURAL:$2|$2}} tham số.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> hư hỏng.",
+ "translate-checks-fudforum-syntax": "Hãy dùng <nowiki>$1</nowiki> thay cho <nowiki>$2</nowiki> trong dự án này.",
+ "translate-checks-newline-missing-start": "Đầu bản dịch thiếu $1 {{PLURAL:$1}}dấu ngắt dòng.",
+ "translate-checks-newline-missing-end": "Cuối bản dịch thiếu $1 {{PLURAL:$1}}dấu ngắt dòng.",
+ "translate-checks-newline-extra-start": "Đầu bản dịch có $1 {{PLURAL:$1}}dấu ngắt dòng dư.",
+ "translate-checks-newline-extra-end": "Cuối bản dịch có $1 {{PLURAL:$1}}dấu ngắt dòng dư.",
+ "translate-checks-value-not-present": "Bản dịch phải khớp với {{PLURAL:$1|1=|một trong những giá trị sau:}} $1.",
+ "translate-checks-replacement": "Sử dụng $2 thay vì $1.",
+ "translate-checks-empty": "Không cho phép bản dịch thiếu nội dung hoặc chỉ có khoảng cách.",
+ "translate-pref-editassistlang": "Ngôn ngữ bổ trợ:",
+ "prefs-translate": "Tùy chọn bản dịch",
+ "translate-pref-editassistlang-help": "Danh sách các ngôn ngữ phân tách bằng dấu phẩy.\nBản dịch thông điệp sang các ngôn ngữ này được hiển thị khi bạn dịch.\nDanh sách các ngôn ngữ mặc định sẽ tùy thuộc vào ngôn ngữ mà bạn chọn.",
+ "translate-pref-editassistlang-bad": "Mã ngôn ngữ không hợp lệ trong danh sách:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Sửa đổi dùng giao diện biên dịch",
+ "action-translate": "sửa đổi dùng giao diện biên dịch",
+ "right-translate-manage": "Quản lý các nhóm thông điệp",
+ "action-translate-manage": "quản lý các nhóm thông điệp",
+ "right-translate-import": "Nhập các bản dịch ngoại tuyến",
+ "action-translate-import": "nhập các bản dịch ngoại tuyến",
+ "right-translate-messagereview": "Duyệt các bản dịch",
+ "action-translate-messagereview": "duyệt các bản dịch",
+ "right-translate-groupreview": "Thay đổi trạng thái luồng làm việc của các nhóm thông điệp",
+ "action-translate-groupreview": "thay đổi trạng thái luồng làm việc của các nhóm thông điệp",
+ "translate-rcfilters-translations": "Bản dịch",
+ "translate-rcfilters-translations-only-label": "Bản dịch",
+ "translate-rcfilters-translations-only-desc": "Thay đổi trong được dịch.",
+ "translate-rcfilters-translations-filter-label": "Không phải bản dịch",
+ "translate-rcfilters-translations-filter-desc": "Tất cả thay đổi không phải là bản dịch.",
+ "translate-rcfilters-translations-site-label": "Thông điệp hệ thống",
+ "translate-rcfilters-translations-site-desc": "Việc tùy biến các thông điệp trang Web trong không gian tên MediaWiki.",
+ "translate-rc-translation-filter": "Lọc bản dịch:",
+ "translate-rc-translation-filter-no": "Không lọc",
+ "translate-rc-translation-filter-only": "Chỉ hiển thị bản dịch",
+ "translate-rc-translation-filter-filter": "Lọc bản dịch",
+ "translate-rc-translation-filter-site": "Chỉ hiện thay đổi đến thông điệp trang",
+ "translationstats": "Thống kê biên dịch",
+ "translate-stats-edits": "Sửa đổi",
+ "translate-stats-users": "Biên dịch viên",
+ "translate-stats-registrations": "Thành viên đăng ký",
+ "translate-stats-reviews": "Lần duyệt",
+ "translate-stats-reviewers": "Người duyệt",
+ "translate-statsf-intro": "Bạn có thể tạo ra thông kê đơn giản bằng mẫu này. Tất cả các giá trị đều có giới hạn trên và dưới.",
+ "translate-statsf-options": "Tùy chọn đồ thị",
+ "translate-statsf-width": "Chiều rộng (điểm ảnh):",
+ "translate-statsf-height": "Chiều cao (điểm ảnh):",
+ "translate-statsf-days": "Lúc bắt đầu:",
+ "translate-statsf-start": "Lúc bắt đầu:",
+ "translate-statsf-scale": "Dạng hạt:",
+ "translate-statsf-scale-years": "Năm",
+ "translate-statsf-scale-months": "Tháng",
+ "translate-statsf-scale-weeks": "Tuần",
+ "translate-statsf-scale-days": "Ngày",
+ "translate-statsf-scale-hours": "Giờ",
+ "translate-statsf-count": "Thước đo:",
+ "translate-statsf-count-edits": "Số lần sửa đổi",
+ "translate-statsf-count-users": "Dịch giả tích cực",
+ "translate-statsf-count-registrations": "Thành viên mới",
+ "translate-statsf-count-reviews": "Lần duyệt bản dịch",
+ "translate-statsf-count-reviewers": "Người duyệt",
+ "translate-statsf-language": "Danh sách các mã ngôn ngữ phân tách bằng dấu phẩy:",
+ "translate-statsf-group": "Danh sách các mã nhóm phân tách bằng dấu phẩy:",
+ "translate-statsf-submit": "Xem trước",
+ "translate-statsf-unknown-error": "Gặp lỗi không ngờ.",
+ "translate-statsf-error-message": "Xuất hiện lỗi khi tải biểu đồ: $1",
+ "translate-statsf-graph-alt-text-info": "Bảng bên dưới có văn bản thay thế của thống kê biên dịch.",
+ "translate-statsf-alt-text": "Đây là văn bản thay thế của thống kê biên dịch.",
+ "translate-statsf-embed": "Mã nguồn để nhúng biểu đồ thống kê biên dịch vào trang khác.",
+ "translate-tag-page-desc": "Bản dịch trang wiki [[$2|$1]] từ $3 ($4).",
+ "translate-sidebar-alltrans": "Theo ngôn ngữ khác",
+ "translations": "Tất cả bản dịch",
+ "translations-summary": "Nhập vào một tên thông điệp phía dưới để hiển thị tất cả các bản dịch hiện có.",
+ "translate-translations-no-message": "“$1” không phải là thông điệp cần dịch",
+ "translate-translations-none": "Không có bản dịch cho “$1”",
+ "translate-translations-count": "Tìm thấy {{PLURAL:$1|một bản dịch|$1 bản dịch}}.",
+ "translate-translations-fieldset-title": "Thông điệp",
+ "translate-translations-messagename": "Tên:",
+ "translate-translations-project": "Dự án:",
+ "translate-translations-including-no-param": "Xin ghi rõ một khóa thông điệp hợp lệ trong tham số trang con",
+ "translate-translations-history-short": "sử",
+ "languagestats": "Thống kê ngôn ngữ",
+ "languagestats-summary": "Trang này hiển thị thống kê biên dịch cho tất cả các nhóm thông điệp dành cho một ngôn ngữ.",
+ "messagegroupstats-summary": "Trang này có thống kế về nhóm thông điệp.",
+ "languagestats-stats-for": "Thống kê biên dịch của $1 ($2).",
+ "languagestats-recenttranslations": "các bản dịch gần đây",
+ "translate-langstats-incomplete": "Một vài dữ liệu thống kê trên này không được đầy đủ. Xin vui lòng tải lại trang để lấy thêm dữ liệu.",
+ "translate-langstats-expand": "mở",
+ "translate-langstats-collapse": "đóng",
+ "translate-langstats-expandall": "mở tất cả",
+ "translate-langstats-collapseall": "đóng tất cả",
+ "translate-language-code": "Mã ngôn ngữ",
+ "translate-language-code-field-name": "Mã ngôn ngữ:",
+ "translate-suppress-complete": "Ẩn các nhóm thông điệp đã được dịch hoàn toàn",
+ "translate-ls-noempty": "Ẩn các nhóm thông điệp hoàn toàn chưa được dịch",
+ "translate-language": "Ngôn ngữ",
+ "translate-total": "Thông điệp",
+ "translate-untranslated": "Chưa dịch",
+ "translate-percentage-complete": "Mức hoàn thành",
+ "translate-percentage-fuzzy": "Lỗi thời",
+ "translate-percentage-proofread": "Đã duyệt",
+ "translate-languagestats-overall": "Tổng cộng các nhóm thông điệp",
+ "translate-ls-submit": "Xem thống kê",
+ "translate-ls-column-group": "Nhóm thông điệp",
+ "translate-mgs-pagename": "Thống kê nhóm thông điệp",
+ "translate-mgs-fieldset": "Tùy chỉnh hiển thị",
+ "translate-mgs-group": "Nhóm thông điệp:",
+ "translate-mgs-nocomplete": "Ẩn các ngôn ngữ đã có bản dịch hoàn thành",
+ "translate-mgs-noempty": "Ẩn các ngôn ngữ không có bản dịch",
+ "translate-mgs-submit": "Xem thống kê",
+ "translate-mgs-column-language": "Ngôn ngữ",
+ "translate-mgs-totals": "Tổng hợp mọi {{PLURAL:$1}}ngôn ngữ",
+ "translate-mgs-invalid-group": "Nhóm thông điệp chỉ định, “$1”, không tồn tại.",
+ "translate-mgs-nothing": "Không có thống kê để hiển thị.",
+ "translate-tes-server-error": "Thất bại khi lấy gợi ý tìm kiếm",
+ "translate-tes-group-not-found": "Không có kết quả trùng khớp",
+ "translate-tes-type-to-search": "Gõ để bắt đầu tìm kiếm",
+ "supportedlanguages": "Ngôn ngữ được kích hoạt",
+ "supportedlanguages-summary": "Trang này liệt kê tất cả các ngôn ngữ tích cực của {{SITENAME}}, cùng với tên các biên dịch viên đang làm việc trên ngôn ngữ đó.\nBiên dịch viên càng đóng góp nhiều thì tên của họ càng lớn hơn.\nMàu đường gạch dưới cho biết biên dịch viên đã tích cực tại đây cách đây bao lâu.",
+ "supportedlanguages-colorlegend": "Chú thích các màu: Bản dịch gần đây nhất cách đây $1 ngày.",
+ "supportedlanguages-portallink": "[$1] $2 – $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-sqlite-error": "SQLite không được hỗ trợ",
+ "supportedlanguages-translators": "{{PLURAL:$2|Biên dịch viên|Các biên dịch viên}}{{GENDER:$3}}: $1",
+ "supportedlanguages-recenttranslations": "các bản dịch gần đây",
+ "supportedlanguages-count": "$1 ngôn ngữ tổng cộng.",
+ "supportedlanguages-activity": "$1: $2 lần sửa đổi – lần cuối cách đây $3 ngày",
+ "translate-supportedlanguages-cached": "Thông tin này được lưu trong vùng nhớ đệm cách đây $1.",
+ "translate-activelanguages-invalid-code": "Mã ngôn ngữ “$1” không rõ hoặc không được kích hoạt để biên dịch.",
+ "abusefilter-edit-builder-vars-translate-source-text": "Văn bản gốc của đơn vị biên dịch",
+ "abusefilter-edit-builder-vars-translate-target-language": "Ngôn ngữ mục tiêu để biên dịch",
+ "translate-jssti-add": "Thêm vào danh sách",
+ "managemessagegroups": "Quản lý nhóm thông điệp",
+ "translate-smg-notallowed": "Bạn không được phép thực hiện thao tác này.",
+ "translate-smg-nochanges": "Không có thay đổi để xử lý.",
+ "translate-smg-submit": "Lưu thay đổi để xử lý",
+ "translate-smg-submitted": "Các định nghĩa thông điệp đã thay đổi. Các thay đổi đang được xử lý trên nền.",
+ "translate-smg-submitted-with-failure": "Thất bại khi cập nhật định nghĩa thông điệp của {{PLURAL:$1|nhóm|các nhóm}} sau: $2. $3",
+ "translate-smg-submitted-others-processing": "Đang xử lý định nghĩa thông điệp của các nhóm khác trong nền.",
+ "translate-smg-more": "Sẽ còn nhiều thay đổi hơn để xử lý sau khi gửi những thay đổi này.",
+ "translate-smg-left": "Nội dung thông điệp trong wiki",
+ "translate-smg-right": "Các thay đổi để duyệt",
+ "translate-smg-rename-select": "Chọn",
+ "translate-smg-rename-cancel": "Hủy bỏ",
+ "translate-smg-rename-search": "Tìm kiếm thông điệp trùng khớp…",
+ "translate-smg-rename-select-err": "Xin hãy chọn thông điệp để đổi tên",
+ "translate-smg-rename-no-msg": "Không tìm thấy thông điệp.",
+ "translate-smg-rename-new": "Thêm thông điệp mới…",
+ "translate-smg-rename-rename": "Thêm vì đổi tên từ…",
+ "translate-smg-changeset-modified": "Bộ thay đổi này được thay đổi bởi một người dùng hoặc quá trình khác. Không thể đăng các thay đổi của bạn vì có thể ghi đè các thay đổi của họ. Xin hãy tải lại trang để xem các thay đổi mới nhất.",
+ "translate-smg-no-groups-in-sync": "Hiện không có nhóm nào được đồng bộ hóa",
+ "translate-smg-strong-sync-help": "Trợ giúp",
+ "translate-smg-groups-in-sync": "Nhóm đang được đồng bộ hóa",
+ "translate-smg-groups-in-sync-list": "Danh sách các nhóm đang được xử lý trong nền:",
+ "translate-smg-groups-with-error-title": "Nhóm có lỗi khi đồng bộ hóa",
+ "translate-smg-groups-with-error-desc": "Danh sách các nhóm và thông điệp có lỗi khi được đồng bộ hóa:",
+ "translate-smg-group-with-error-summary": "$1 {{PLURAL:$1}}thông điệp có lỗi:",
+ "translate-smg-group-message-action-history": "Lịch sử",
+ "translate-smg-group-action-resolve": "Đánh dấu giải quyết",
+ "translate-smg-group-sync-error-warn": "Nhóm này bị lỗi khi được đồng bộ hóa. Xin hãy khắc phục các lỗi trước khi xử lý nhóm này.",
+ "translate-smg-group-message-tag-outdated": "Lỗi thời",
+ "translate-smg-group-message-tag-rename": "Đổi tên",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1}}Thẻ:",
+ "translate-smg-group-message-message-content": "Nội dung:",
+ "translate-smg-group-message-message-target": "Mục tiêu:",
+ "translate-smg-group-message-message-replacement": "Văn bản thay thế:",
+ "translate-smg-group-message-message-other-langs": "Ngôn ngữ khác:",
+ "translate-smg-loading": "Đang tải…",
+ "translate-smg-unknown-error": "Đã xảy ra lỗi bất ngờ khi xử lý yêu cầu của bạn.",
+ "translate-manage-import-diff": "Thông điệp $1 | Tác vụ: $2",
+ "translate-manage-import-new": "Thông điệp mới $1",
+ "translate-manage-import-deleted": "Thông điệp đã xóa $1",
+ "translate-manage-action-import": "Nhập",
+ "translate-manage-action-conflict": "Nhập và cần sửa",
+ "translate-manage-action-ignore": "Bỏ qua",
+ "translate-manage-action-fuzzy": "Nhập và cần sửa bản dịch",
+ "translate-manage-action-rename-fuzzy": "Bản dịch được đổi tên hoặc lỗi thời",
+ "translate-manage-action-rename": "Đổi tên",
+ "translate-manage-action-ignore-change": "Bỏ qua thay đổi bản dịch",
+ "translate-manage-nochanges": "Không có thay đổi trong định nghĩa thông điệp của nhóm này.",
+ "translate-manage-nochanges-other": "Không có thay đổi trong ngôn ngữ này.\nHãy dùng liên kết ở dưới để trở lại trang chi tiết nhóm",
+ "translate-manage-inconsistent": "Có sự không nhất quán trong lời yêu cầu.\nXin hãy kiểm lại các thay đổi rồi thử lại.\nChi tiết: $1.",
+ "translate-manage-toolong": "Thời gian xử lý tối đa đã vượt quá $1 giây.\nXin hãy gửi lại mẫu này để tiếp tục xử lý.",
+ "translate-manage-import-summary": "Đang nhập một bản mới từ nguồn bên ngoài",
+ "translate-manage-import-ignore": "Bỏ qua thông điệp $1.",
+ "translate-manage-import-rename-summary": "Đổi tên trong nguồn bên ngoài",
+ "translate-manage-conflict-summary": "Đang nhập một phiên bản mới từ nguồn bên ngoài.\nXin kiểm lại.",
+ "translate-manage-submit": "Thực hiện",
+ "translate-manage-intro-other": "Dưới đây là danh sách các thay đổi bản dịch trong ngôn ngữ $1.\nXin hãy xem lại các thay đổi và chọn tác vụ bạn muốn làm đối với từng bản cập nhật.\nViệc bỏ qua thay đổi chỉ tạm thời.",
+ "translate-manage-import-ok": "Đã nhập: $1",
+ "translate-manage-import-done": "Đã nhập xong!",
+ "translate-manage-empty-content": "Nội dung trống",
+ "translate-manage-key-reused": "Thông điệp này đã tồn tại tại wiki này. Hãy kiểm tra có tình cờ tái sử dụng một chìa khóa cũ.",
+ "translate-manage-source-message-not-found": "Không tìm thấy định nghĩa thống điệp",
+ "importtranslations": "Nhập bản dịch",
+ "translate-import-from-local": "Tải tập tin từ máy tính:",
+ "translate-import-load": "Tải tập tin",
+ "translate-import-err-dl-failed": "Không thể truy xuất tập tin:\n$1",
+ "translate-import-err-ul-failed": "Thất bại khi tải lên tập tin",
+ "translate-import-err-invalid-title": "Tên tập tin đã ghi <nowiki>$1</nowiki> không đúng.",
+ "translate-import-err-no-such-file": "Tập tin <nowiki>$1</nowiki> không tồn tại hoặc chưa được tải lên đây.",
+ "translate-import-err-stale-group": "Tập tin này được xếp vào nhóm thông điệp không tồn tại.",
+ "translate-import-err-no-headers": "Tập tin không phải là tập tin Gettext định dạng đúng trong định dạng mở rộng Translate:\nKhông thể xác định nhóm và ngôn ngữ từ tiêu đề tập tin.",
+ "translate-js-support-unsaved-warning": "Bạn có bản dịch chưa đăng.",
+ "translate-gs-pos": "STT",
+ "translate-gs-code": "Mã",
+ "translate-gs-continent": "Lục địa",
+ "translate-gs-speakers": "Số người nói",
+ "translate-gs-score": "Điểm",
+ "translate-gs-multiple": "Nhiều",
+ "translate-gs-count": "Số lượng",
+ "translate-gs-total": "Tổng cộng",
+ "translate-gs-avgscore": "Điểm t.bình",
+ "translate-documentation-language": "Tài liệu thông điệp",
+ "translate-searchprofile": "Bản dịch",
+ "translate-searchprofile-tooltip": "Tìm kiếm tất cả bản dịch",
+ "translate-searchprofile-note": "Có thêm tùy chọn tìm kiếm trong công cụ [$1 tìm kiếm bản dịch].",
+ "translate-search-languagefilter": "Lọc theo ngôn ngữ:",
+ "translate-search-nofilter": "Không lọc",
+ "log-name-translationreview": "Nhật trình duyệt bản dịch",
+ "log-description-translationreview": "Nhật trình các tác vụ duyệt bản dịch và nhóm thông điệp.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2}}đã duyệt bản dịch $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2}}đã đổi trạng thái bản dịch $4 của $3 từ $6 thành $7",
+ "group-translate-sandboxed": "Biên dịch viên chưa chấp nhận",
+ "group-translate-sandboxed-member": "{{GENDER:$1}}biên dịch viên chưa chấp nhận",
+ "right-translate-sandboxmanage": "Quản lý người dùng cách ly",
+ "action-translate-sandboxmanage": "quản lý người dùng cách ly",
+ "right-translate-sandboxaction": "Thực hiện các tác vụ mà người dùng cách ly được cho phép thực hiện",
+ "action-translate-sandboxaction": "thực hiện các tác vụ mà người dùng cách ly được cho phép thực hiện",
+ "translate-workflow-state-": "(không định)",
+ "translate-workflowstatus": "Trạng thái: $1",
+ "translate-workflow-set-doing": "Đang định rõ…",
+ "translate-workflow-autocreated-summary": "Tự động tạo ra trang cho trạng thái luồng làm việc $1",
+ "translate-stats-workflow": "Trạng thái",
+ "translate-workflowgroup-label": "Trạng thái luồng làm việc",
+ "translate-workflowgroup-desc": "Nhóm thông điệp này chứa các trạng thái luồng làm việc biên dịch.\nCác trạng thái được định rõ trong biến cấu hình $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Bản dịch gần đây",
+ "translate-dynagroup-recent-desc": "Nhóm thông điệp này bao gồm các bản dịch gần đây trong ngôn ngữ này.\nNó có ích đối với các tác vụ duyệt.",
+ "translate-dynagroup-additions-label": "Thông điệp bổ sung gần đây",
+ "translate-dynagroup-additions-desc": "Nhóm thông điệp này chứa các thông điệp mới được bổ sung hoặc thay đổi gần đây.",
+ "translate-msggroupselector-projects": "Nhóm thông điệp",
+ "translate-msggroupselector-search-placeholder": "Tìm nhóm",
+ "translate-msggroupselector-search-all": "Tất cả",
+ "translate-msggroupselector-search-recent": "Gần đây",
+ "translate-msggroupselector-view-subprojects": "$1 nhóm con",
+ "tux-languageselector": "Dịch ra",
+ "tux-select-target-language": "Ngôn ngữ mục tiêu để biên dịch",
+ "tux-tab-all": "Tất cả",
+ "tux-tab-untranslated": "Chưa dịch",
+ "tux-tab-outdated": "Lỗi thời",
+ "tux-tab-translated": "Đã dịch",
+ "tux-tab-unproofread": "Chưa duyệt",
+ "tux-edit": "Sửa đổi",
+ "tux-status-optional": "Tùy chọn",
+ "tux-status-fuzzy": "Lỗi thời",
+ "tux-status-proofread": "Đã duyệt",
+ "tux-status-translated": "Đã dịch",
+ "tux-status-saving": "Đang đăng…",
+ "tux-status-unsaved": "Chưa đăng",
+ "tux-save-unknown-error": "Đã xuất hiệu lỗi bất ngờ.",
+ "tux-editor-placeholder-documentation": "Thêm tài liệu thông điệp",
+ "tux-editor-placeholder-language": "Bản dịch $1 của bạn",
+ "tux-editor-editsummary-placeholder": "Giải thích các thay đổi của bạn (tùy chọn)",
+ "tux-editor-paste-original-button-label": "Dán văn bản gốc",
+ "tux-editor-discard-changes-button-label": "Hủy thay đổi",
+ "tux-editor-save-button-label": "Đăng bản dịch",
+ "tux-editor-skip-button-label": "Chuyển đến thông điệp kế",
+ "tux-editor-cancel-button-label": "Hủy bỏ",
+ "tux-editor-confirm-button-label": "Xác nhận bản dịch",
+ "tux-editor-proofread-button-label": "Đánh dấu duyệt",
+ "tux-editor-shortcut-info": "Bấm “$1” để lưu và chuyển tới thông điệp tiếp theo, “$2” để bỏ qua, “$4” để cung cấp tóm tắt, hoặc giữ “$3” để xem các phím tắt khác.",
+ "tux-editor-edit-desc": "Sửa đổi tài liệu",
+ "tux-editor-add-desc": "Thêm tài liệu",
+ "tux-editor-suggestions-title": "Gợi ý",
+ "tux-editor-latest-updates-title": "Các cập nhật mới nhất",
+ "tux-editor-changes-without-summary": "$1 {{PLURAL:$1}}cập nhật không có tóm tắt",
+ "tux-editor-all-changes": "Tất cả các thay đổi",
+ "tux-editor-in-other-languages": "Theo ngôn ngữ khác",
+ "tux-editor-need-more-help": "Còn thắc mắc?",
+ "tux-editor-ask-help": "Hãy xin thêm thông tin",
+ "tux-editor-tm-match": "trùng $1%",
+ "tux-notices-more": "$1 nữa",
+ "tux-notices-hide": "ẩn",
+ "tux-editor-save-failed": "Thất bại khi đăng bản dịch: $1",
+ "tux-editor-n-uses": "được sử dụng $1 lần",
+ "tux-editor-message-desc-more": "Xem thêm",
+ "tux-editor-message-desc-less": "Thu gọn",
+ "tux-editor-clear-translated": "Ẩn thông điệp đã dịch",
+ "tux-editor-proofreading-mode": "Duyệt",
+ "tux-editor-translate-mode": "Danh sách",
+ "tux-editor-proofreading-hide-own-translations": "Ẩn các bản dịch của mình",
+ "tux-editor-proofreading-show-own-translations": "Hiện các bản dịch của mình",
+ "tux-proofread-action-tooltip": "Đánh dấu duyệt",
+ "tux-proofread-edit-label": "Sửa đổi",
+ "tux-editor-page-mode": "Trang",
+ "tux-editor-outdated-notice": "Bản dịch này có thể cần được cập nhật.",
+ "tux-editor-outdated-notice-diff-link": "Hiển thị khác biệt",
+ "tux-editor-doc-editor-placeholder": "Tài liệu về thông điệp",
+ "tux-editor-doc-editor-save": "Đăng tài liệu",
+ "tux-editor-doc-editor-cancel": "Hủy bỏ",
+ "tux-messagetable-more-messages": "$1 thông điệp nữa",
+ "tux-messagetable-loading-messages": "Đang tải {{PLURAL:$1|thông điệp|các thông điệp}}…",
+ "tux-message-filter-placeholder": "Lọc danh sách",
+ "tux-message-filter-result": "Tìm thấy $1 kết quả cho “$2”",
+ "tux-message-filter-advanced-button": "Tìm kiếm nâng cao",
+ "tux-message-filter-optional-messages-label": "Các thông điệp tùy dịch",
+ "tux-proofread-translated-by-self": "Bản dịch của bạn",
+ "tux-empty-list-all": "Nhóm thông điệp này đang trống",
+ "tux-empty-list-all-guide": "Hãy chọn một nhóm thông điệp khác để dịch",
+ "tux-translate-page-no-such-group": "<strong>Nhóm được chỉ định không tồn tại.</strong> Hãy chọn một nhóm thông điệp khác.",
+ "tux-empty-list-translated": "Chưa dịch thông điệp nào",
+ "tux-empty-list-translated-guide": "Mời bạn cùng biên dịch",
+ "tux-empty-list-translated-action": "Biên dịch",
+ "tux-empty-no-messages-to-display": "Không có thông điệp để hiển thị.",
+ "tux-empty-there-are-optional": "Những thông điệp tùy dịch không được liệt kê",
+ "tux-empty-show-optional-messages": "Hiển thị các thông điệp tùy dịch",
+ "tux-empty-no-outdated-messages": "Không có thông điệp lỗi thời",
+ "tux-empty-nothing-to-proofread": "Không có gì để duyệt",
+ "tux-empty-you-can-help-providing": "Mời bạn giúp dịch các thông điệp mới",
+ "tux-empty-nothing-new-to-proofread": "Không có gì mới để duyệt",
+ "tux-empty-you-can-review-already-proofread": "Mời bạn xem lại những bản dịch đã được người khác duyệt.",
+ "tux-empty-list-other": "Không có gì để dịch",
+ "tux-empty-list-other-guide": "Bạn có thể giúp duyệt các bản dịch hiện có",
+ "tux-empty-list-other-action": "Duyệt các bản dịch",
+ "tux-empty-list-other-link": "Hiện tất cả các thông điệp",
+ "tux-editor-close-tooltip": "Đóng",
+ "tux-editor-expand-tooltip": "Mở rộng",
+ "tux-editor-collapse-tooltip": "Thu gọn",
+ "tux-editor-message-tools-show-editor": "Hiện trong trình sửa đổi của wiki",
+ "tux-editor-message-tools-history": "Lịch sử",
+ "tux-editor-message-tools-delete": "Xóa",
+ "tux-editor-message-tools-translations": "Tất cả bản dịch",
+ "tux-editor-message-tools-linktothis": "Liên kết đến thông điệp này",
+ "tux-editor-loading": "Đang tải…",
+ "translate-search-more-languages-info": "$1 ngôn ngữ khác",
+ "translate-statsbar-tooltip": "Đã biên dịch $1%, đã duyệt $2%",
+ "translate-statsbar-tooltip-with-fuzzy": "Đã biên dịch $1%, đã duyệt $2%, $3% lỗi thời",
+ "translate-search-more-groups-info": "$1 nhóm nữa",
+ "translate-syntax-error": "Bản dịch có lỗi cú pháp",
+ "tux-session-expired": "Bạn không còn đăng nhập. Xin vui lòng đăng nhập trong thẻ riêng. Thay thế, hãy sao chép các bản dịch chưa lưu, đăng nhập, trở lại trang này, và nhập lại các bản dịch của bạn.",
+ "tux-nojs": "Trang này cần JavaScript để hoạt động. JavaScript đang tắt hay bị hư hỏng, hoặc trình duyệt này không được hỗ trợ.",
+ "specialpages-group-translation": "Bản dịch",
+ "content-model-translate-messagebundle": "Bó thông điệp dịch được",
+ "translate-messagebundle-validation-error": "Bó thông điệp không hợp lệ: $1",
+ "translate-messagebundle-error-invalid-array": "Bó thông điệp cần phải là đối tượng JSON nhưng phát hiện kiểu $1",
+ "translate-messagebundle-error-key-empty": "Bó thông điệp không được có chìa khóa trống",
+ "translate-messagebundle-error-key-too-long": "Chìa khóa “$1” dài quá",
+ "translate-messagebundle-error-key-invalid-characters": "Chìa khóa “$1” có ký tự không được phép",
+ "translate-messagebundle-error-invalid-value": "Chìa khóa “$1” không có giá trị chuỗi",
+ "translate-messagebundle-error-empty-value": "Chìa khóa “$1” không có giá trị",
+ "translate-messagebundle-group-description": "Các thông điệp của bó thông điệp được định nghĩa tại trang [[$2|$1]]."
+}
diff --git a/Translate/i18n/core/vmw.json b/Translate/i18n/core/vmw.json
new file mode 100644
index 00000000..a5fb229a
--- /dev/null
+++ b/Translate/i18n/core/vmw.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gildo Máquina"
+ ]
+ },
+ "translate-documentation-language": "Mukhaliheryo wa otaphuleliwa"
+}
diff --git a/Translate/i18n/core/vo.json b/Translate/i18n/core/vo.json
new file mode 100644
index 00000000..09ca7ddf
--- /dev/null
+++ b/Translate/i18n/core/vo.json
@@ -0,0 +1,73 @@
+{
+ "@metadata": {
+ "authors": [
+ "Malafaya",
+ "Smeira"
+ ]
+ },
+ "translate": "Tradutön",
+ "translate-desc": "[[Special:Translate|Pad patik]] pro tradutam sitanunis ela MediaWiki",
+ "translate-page-no-such-language": "Pük pevälöl no dabinon.",
+ "translate-page-no-such-group": "Grup pevälöl no dabinon.",
+ "translate-page-disabled": "Tradutam ini pük at in grup at penemögükon.\nKod:\n\n<em>$1</em>",
+ "translate-page-settings-legend": "Paramets",
+ "translate-page-group": "Grup:",
+ "translate-page-language": "Pük:",
+ "translate-page-limit": "Mied:",
+ "translate-page-limit-option": "{{PLURAL:$1|nun|nuns}} $1 a pad",
+ "translate-submit": "Getolöd",
+ "translate-page-navigation-legend": "Nafam",
+ "translate-page-showing": "Nuns de nüm: $1 ad $2 (se $3).",
+ "translate-page-showing-all": "{{PLURAL:$1|Nun|Nuns}} $1 {{PLURAL:$1|pajonon|pajonons}}.",
+ "translate-page-showing-none": "Nuns jonabik no dabinons.",
+ "translate-next": "Pad sököl",
+ "translate-prev": "Pad büik",
+ "translate-page-description-legend": "Nüns tefü grup",
+ "translate-page-edit": "redakön",
+ "translate-ignored": "(penedemöl)",
+ "translate-edit-definition": "Miedet nuna",
+ "translate-edit-contribute": "keblünön",
+ "translate-edit-no-information": "Nun at no peplänon. If sevol, kiöpo u lio nun at pagebon, kanol yufön tradutanis votik medä penol pläni gudik dö geb onik.",
+ "translate-edit-information": "Plän nuna ($1)",
+ "translate-edit-warnings": "Nüneds tefü tradutods no lölöfiks",
+ "translate-checks-parameters": "{{PLURAL:$2|Paramet|Paramets}} sököl no {{PLURAL:$2|pagebon|pagebons}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Paramet|Paramets}} sököl {{PLURAL:$2|binon nesevädik|binons nesevädiks}}:\n<strong>$1</strong>",
+ "translate-checks-links": "{{PLURAL:$2|Yüm|Yüms}} sököl {{PLURAL:$2|binon säkädik|binons säkädiks}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-rc-translation-filter": "Sulön tradutodis:",
+ "translate-rc-translation-filter-no": "Dunön nosi",
+ "translate-rc-translation-filter-only": "Jonön te tradutodis",
+ "translate-rc-translation-filter-filter": "Sesulön tradutodis",
+ "translate-rc-translation-filter-site": "Te votükams nunas bevüresodatopäda at",
+ "translationstats": "Tradutamastatits",
+ "translate-stats-edits": "Redakams",
+ "translate-stats-users": "Tradutans",
+ "translate-statsf-width": "Vidot (pixels):",
+ "translate-statsf-height": "Geilot (pixels):",
+ "translate-statsf-days": "Period (dels):",
+ "translate-statsf-start": "Period (dels):",
+ "translate-statsf-scale-days": "Dels",
+ "translate-statsf-scale-hours": "Düps",
+ "translate-statsf-count": "Mafam:",
+ "translate-statsf-count-edits": "Num redakamas",
+ "translate-statsf-count-users": "Tradutans jäfedik",
+ "translate-statsf-language": "Lised pükakotas me liunüls peteilölas:",
+ "translate-statsf-group": "Lised grupakotas me liunüls peteilölas:",
+ "translate-statsf-submit": "Büologed",
+ "translate-tag-page-desc": "Tradutod vükapada: [[$2|$1]].",
+ "translate-sidebar-alltrans": "In püks votik",
+ "translations": "Tradutods valik",
+ "translations-summary": "Penolös dono nunanemi ad logön tradutodis gebidik valik.",
+ "translate-translations-no-message": "„$1“ no binon nun tradutovik",
+ "translate-translations-none": "No dabinons tradutods pro „$1“",
+ "translate-translations-fieldset-title": "Nun",
+ "translate-translations-messagename": "Nem:",
+ "translate-translations-including-no-param": "Penolös padanemi lonöföl lä paramet: donapad",
+ "languagestats": "Pükastatits",
+ "languagestats-summary": "Pad at jonon tradutamastatitis tefü nunagrups valiks püka semik.",
+ "translate-language-code": "Pükakot",
+ "translate-language-code-field-name": "Pükakot:",
+ "translate-language": "Pük",
+ "translate-total": "Nuns",
+ "translate-untranslated": "No petradutöls",
+ "translate-percentage-complete": "Lölöfükam"
+}
diff --git a/Translate/i18n/core/vro.json b/Translate/i18n/core/vro.json
new file mode 100644
index 00000000..fe50852b
--- /dev/null
+++ b/Translate/i18n/core/vro.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Võrok"
+ ]
+ },
+ "translate-documentation-language": "Sõnomi dokumentatsiuun"
+}
diff --git a/Translate/i18n/core/wa.json b/Translate/i18n/core/wa.json
new file mode 100644
index 00000000..9376ae03
--- /dev/null
+++ b/Translate/i18n/core/wa.json
@@ -0,0 +1,217 @@
+{
+ "@metadata": {
+ "authors": [
+ "Srtxg"
+ ]
+ },
+ "translate": "Ratourner",
+ "translate-extensionname": "Ratourner",
+ "translate-desc": "[[Special:Translate|Padje sipeciåle]] po ratourner MediaWiki et ds ôtes",
+ "translate-taskui-export-to-file": "Riçure e cogne native",
+ "translate-taskui-export-as-po": "Riçure po on ratournaedje foû raloyaedje",
+ "translate-taction-translate": "Ratourner",
+ "translate-taction-proofread": "Verifyî",
+ "translate-taction-lstats": "Sitatistikes do lingaedje",
+ "translate-taction-mstats": "Sitatistikes do groupe di messaedjes",
+ "translate-taction-export": "Ricopyî foû",
+ "translate-taction-disabled": "Cisse accion la a stî dismetowe so ç' wiki ci.",
+ "translate-page-no-such-language": "Li lingaedje diné n' est nén valide.",
+ "translate-page-no-such-group": "Li groupe diné n' est nén valide;",
+ "translate-page-disabled": "Les ratournaedjes dins ç' lingaedje la po ç' groupe ci n' si polèt nén fé.\nRåjhon:\n\n<em>$1</em>",
+ "translate-language-disabled": "Li ratournaedje dins ç' lingaedje ci a stî dismetou.",
+ "translate-page-settings-legend": "Tchuzes",
+ "translate-page-group": "Groupe:",
+ "translate-page-language": "Lingaedje",
+ "translate-page-limit": "Limite",
+ "translate-page-limit-option": "$1 messaedje{{PLURAL:$1||s}} par pådje",
+ "translate-submit": "I va",
+ "translate-page-navigation-legend": "Naiviaedje",
+ "translate-page-showing": "Mostraedje des messaedje di $1 a $2 so $3.",
+ "translate-page-showing-all": "Håynaedje {{PLURAL:$1|d' on messaedje|di $1 messaedjes}}.",
+ "translate-page-showing-none": "Nou messaedje a håyner.",
+ "translate-next": "Pådje shuvante",
+ "translate-prev": "Pådje di dvant",
+ "translate-page-description-legend": "Infôrmåcions sol groupe",
+ "translate-page-description-hasoptional": "Ci groupe di messaedjes ci a des messaedjes di rawete.\nLes messaedjes di rawete sont-st opcionels et n' divèt esse ratournés k' si vosse lingaedje a mezåjhe di sacwès speciåles, come di n' nén eployî d' vudes inte les mots ou di scrire dins èn ôte sistinme les nos prôpes. $1",
+ "translate-page-description-hasoptional-open": "Mostrer les messaedjes opcionels.",
+ "translate-page-edit": "candjî",
+ "translate-optional": "(opcionel)",
+ "translate-ignored": "(ignoré)",
+ "translate-edit-title": "Candjî «$1»",
+ "translate-edit-definition": "Definixha do messaedje",
+ "translate-edit-contribute": "contribouwer",
+ "translate-edit-no-information": "<em>Ci messaedje ci n' a nén stî documinté.\nSi vos savoz wice ou cmint ki ç' messaedje ci est eployî, vos ploz aidî les ôtes ratourneus tot radjoutant ene documintåcion pol messaedje.</em>",
+ "translate-edit-information": "Infôrmåcions sol messaedje ($1)",
+ "translate-edit-warnings": "Adviertixhmints so les crons ratournaedjes",
+ "translate-edit-tmmatch-source": "Tecse sourdant do ratournaedje: $1",
+ "translate-edit-tmmatch": "rishonnant a $1%",
+ "translate-edit-nopermission": "I vs fåt les permissions di ratournaedje po pleur ratourner des messaedjes.",
+ "translate-edit-askpermission": "Riçure les permissions",
+ "exporttranslations": "Copyî foû les ratournaedjes",
+ "translate-export-form-format": "Cogne",
+ "translate-export-invalid-format": "Dinez ene sôre di cogne valide.",
+ "translate-export-not-supported": "Li copiaedje-foû des ratournaedjes n' est nén sopoirté.",
+ "translate-export-format-notsupported": "Li cogne dimandêye n' est nén sopoirtêye på groupe di messaedjes.",
+ "translate-checks-parameters": "{{PLURAL:$2|Li paramete shuvant n' est nén eployî|Les parametes shuvant n' sont nén eployî}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Li paramete shuvant n' est nén cnoxhou|Les parametes shuvants n' sont nén cnoxhous}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "I gn a {{PLURAL:$2|ene drovante åtchete|des drovantès åtchetes}} sins {{PLURAL:$2|l' cloyante ki va avou|les cloyantes ki vont avou}}, ou årvierdimint:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Li loyén shuvant a-st on problinme|Les $2 loyéns shuvants ont des problinmes}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Li loyén shuvant manke|Les $2 loyéns shuvants mankèt}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Li definixha eploye <nowiki>{{PLURAL:}}</nowiki> mins nén l' ratournaedje.",
+ "translate-checks-pagename": "L' espåce di lomaedje est diferin do ci dins l' definixha",
+ "translate-checks-format": "Ci ratournaedje ci n' shût nén l' definixha oudonbén a ene sintacse nén valide: $1",
+ "translate-checks-escape": "Ça s' pout ki l' eployaedje {{PLURAL:$2|do caractere sipeciå shuvant|des caracteres sipeciås shuvants}} soeye èn accidint: <strong>$1</strong>. {{PLURAL:$4|On caractere di schapaedje valide est|Les caracteres di schapaedje valides sont:}} $3.",
+ "translate-checks-parametersnotequal": "Li nombe di paramets est d' {{PLURAL:$1|$1}}; adon ki ça dvreut esse {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "«<nowiki>$1</nowiki>» est cron.",
+ "translate-checks-fudforum-syntax": "So ç' pordjet ci vos dvoz eployî <nowiki>$1</nowiki> purade ki <nowiki>$2</nowiki>.",
+ "translate-pref-editassistlang": "Lingaedjes d' aidance:",
+ "prefs-translate": "Tchuzes di ratournaedje",
+ "translate-pref-editassistlang-help": "Djivêye di côdes di lingaedje, dispårtis avou des comas.\nLi ratournaedje d' on messaedje dins onk di ces lingaedjes la srè håyné cwand vos estoz dins l' boesse di ratournaedje.\nLi prémetowe djivêye dipind d' vosse lingaedje po l' eterface.",
+ "translate-pref-editassistlang-bad": "Côde di lingaedje nén valide el djivêye:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Fé des ratournaedjes avou l' eterface di ratournaedje",
+ "right-translate-manage": "Manaedjî les groupes di messaedjes",
+ "action-translate-manage": "manaedjî les groupes di messaedjes",
+ "right-translate-import": "Ristitchî des ratournaedjes fwaits foû raloyaedje",
+ "action-translate-import": "ristitchî des ratournaedjes fwaits foû raloyaedje",
+ "right-translate-messagereview": "Verifyî les ratournaedjes",
+ "right-translate-groupreview": "Candjî l' estat d' ovrance des groupes di messaedjes",
+ "translate-rcfilters-translations": "Ratournaedjes",
+ "translate-rcfilters-translations-only-label": "Ratournaedjes",
+ "translate-rc-translation-filter": "Passete po les ratournaedjes:",
+ "translate-rc-translation-filter-no": "Èn rén fé",
+ "translate-rc-translation-filter-only": "Mostrer seulmint les ratournaedjes",
+ "translate-rc-translation-filter-filter": "Èn nén mostrer les ratournaedjes",
+ "translate-rc-translation-filter-site": "Seulmint les candjmnts ås messaedjes del waibe",
+ "translationstats": "Sitatistikes di ratournaedje",
+ "translate-stats-edits": "Candjmints",
+ "translate-stats-users": "Ratourneus",
+ "translate-stats-registrations": "Edjîstraedjes",
+ "translate-stats-reviews": "Verifiaedjes",
+ "translate-stats-reviewers": "Verifieus",
+ "translate-statsf-intro": "Vos ploz produre des statistikes simpes a pårti di cisse formulrece ci.\nTotes les valixhances ont des limites pa dzeur et pa dzo.",
+ "translate-statsf-options": "Tchuzes pol grafike",
+ "translate-statsf-width": "Lårdjeur e picsels:",
+ "translate-statsf-height": "Hôteur e picsels:",
+ "translate-statsf-days": "Termene e nombe di djoûs:",
+ "translate-statsf-start": "Date di cmince:",
+ "translate-statsf-scale": "Schåle:",
+ "translate-statsf-scale-months": "moes",
+ "translate-statsf-scale-weeks": "samwinnes",
+ "translate-statsf-scale-days": "djoûs",
+ "translate-statsf-scale-hours": "eures",
+ "translate-statsf-count": "Çou k' on mezeure:",
+ "translate-statsf-count-edits": "nombe di candjmints",
+ "translate-statsf-count-users": "ratourneus actifs",
+ "translate-statsf-count-registrations": "noveas uzeus",
+ "translate-statsf-count-reviews": "verifiaedjes",
+ "translate-statsf-count-reviewers": "verifieus",
+ "translate-statsf-language": "Djivêye di côdes di lingaedje, dispårtis pa des comas:",
+ "translate-statsf-group": "Djivêye di côdes di groupes, dispårtis pa des comas:",
+ "translate-statsf-submit": "Vey divant",
+ "translate-tag-page-desc": "Ratournaedje del pådje wiki [[$2|$1]] a pårti do $3 ($4).",
+ "translate-sidebar-alltrans": "Dins ds ôtes lingaedjes",
+ "translations": "Tos les ratournaedjes",
+ "translations-summary": "Tapez on no d' messaedje cial pa dzo po vey tos les ratournaedjes k' i gn a.",
+ "translate-translations-no-message": "«$1» n' est nén on messaedje ratournåve",
+ "translate-translations-none": "Nou ratournaedje po «$1»",
+ "translate-translations-count": "I gn a {{PLURAL:$1|on ratournaedje|$1 ratournaedjes}}.",
+ "translate-translations-fieldset-title": "Messaedje",
+ "translate-translations-messagename": "No",
+ "translate-translations-project": "Pordjet:",
+ "translate-translations-including-no-param": "Dinez s' i vs plait ene clé valide pol paramete di dzo-pådje",
+ "languagestats": "Sitatistikes do lingaedje",
+ "languagestats-summary": "Cisse pådje ci mostere les statistikes di ratournaedje di tos les groupes di messaedjes po on lingaedje diné.",
+ "languagestats-stats-for": "Sitatistikes di ratournaedje pol lingaedje $1 ($2)",
+ "languagestats-recenttranslations": "dierins ratournaedjes",
+ "translate-langstats-incomplete": "Des statistikes k' i gn a sol pådje ni sont nén completes. Rafristez l' pådje po nd aveur di pus.",
+ "translate-langstats-expand": "diswalper",
+ "translate-langstats-collapse": "erôler",
+ "translate-langstats-expandall": "diswalper ttafwait",
+ "translate-langstats-collapseall": "erôler ttafwait",
+ "translate-language-code": "Côde do lingaedje",
+ "translate-language-code-field-name": "Côde do lingaedje:",
+ "translate-suppress-complete": "Èn nén mostrer les groupes di messaedjes ratournés pår",
+ "translate-ls-noempty": "Èn nén mostrer les groupes di messaedjes sins nou ratournaedje",
+ "translate-language": "Lingaedje",
+ "translate-total": "Messaedjes",
+ "translate-untranslated": "Nén ratournés",
+ "translate-percentage-complete": "Completaedje",
+ "translate-percentage-fuzzy": "Trop vîs",
+ "translate-languagestats-overall": "Tos les groupes di messaedjes eshonne",
+ "translate-ls-submit": "Håyner les statistikes",
+ "translate-ls-column-group": "Groupe di messaedjes",
+ "translate-mgs-pagename": "Sitatistikes do groupe di messaedjes",
+ "translate-mgs-fieldset": "Preferinces di håynaedje",
+ "translate-mgs-group": "Groupe di messaedjes:",
+ "translate-mgs-nocomplete": "Èn nén mostrer les lingaedjes k' ont ratourné ttafwait",
+ "translate-mgs-noempty": "Èn nén mostrer les lingaedjes sins nou ratournaedje",
+ "translate-mgs-submit": "Håyner les statistikes",
+ "translate-mgs-column-language": "Lingaedje",
+ "translate-mgs-totals": "{{PLURAL:$1|On lingaedje|Tos les $1 lingaedjes eshonne}}",
+ "translate-mgs-invalid-group": "Li groupe dimandé $1 n' egzistêye nén.",
+ "translate-mgs-nothing": "Rén a håyner po les statistikes dimandêyes",
+ "supportedlanguages": "Lingaedjes sopoirtés",
+ "supportedlanguages-summary": "Cisse pådje ci mostere tos les lingaedjes sopoirtés pa {{SITENAME}},\navou les nos des ratourneus k' ovrèt e tchaeke lingaedje.\nLi no d'on ratourneu est metou pus grand sorlon l' cwantité di candjmints k' il a fwait.\nLi coleur do sorlignaedje mostere s' il a stî actif dierinnmint.",
+ "supportedlanguages-colorlegend": "Ledjinde des coleurs: Dierin ratournaedje i gn $1 djoûs.",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Ratourneu|Ratourneuse}}|Ratourneus}}: $1",
+ "supportedlanguages-recenttranslations": "dierins ratournaedjes",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|lingaedje|lingaedjes}} å totå.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|candjmint|candjmints}} - dierin candjmint i gn $3 {{PLURAL:$3|djoû|djoûs}}",
+ "translate-jssti-add": "Radjouter el djivêye",
+ "managemessagegroups": "Manaedjaedje des groupes",
+ "translate-smg-notallowed": "Vos n' poloz nén fé ciste accion ci.",
+ "translate-smg-nochanges": "I gn a nou candjmint a traitî.",
+ "translate-smg-submit": "Evoyî les candjmints po esse traitîs",
+ "translate-smg-submitted": "Les definixhas des messaedjes ont stî metowes a djoû. Les candjmints sont traitîs en erî-plan.",
+ "translate-manage-import-diff": "Messaedje $1 | Accions: $2",
+ "translate-manage-import-new": "Novea messaedje $1",
+ "translate-manage-import-deleted": "Messaedje disfacé $1",
+ "translate-manage-action-import": "ristitchî",
+ "translate-manage-action-conflict": "ristitchî et marker «fuzzy»",
+ "translate-manage-action-ignore": "passer houte",
+ "translate-manage-action-fuzzy": "Ristitchî les ratournaedjes et les marker come «fuzzy»",
+ "translate-manage-action-rename": "Rilomer",
+ "translate-manage-nochanges": "I n' a nou candjmint dins les definixhas des messaedjes po ç' groupe ci.",
+ "translate-manage-nochanges-other": "I n' a yeu nou candjmint po ç' lingaedje ci.\nEployîz l' loyén cial pa dzo po rivni al vuwe di detays do groupe.",
+ "translate-js-support-unsaved-warning": "Vos avoz des ratournaedjes nén eplaidîs.",
+ "translate-gs-code": "Côde",
+ "translate-gs-continent": "Continint",
+ "translate-gs-speakers": "Cåzeus",
+ "translate-gs-multiple": "Pus d' onk",
+ "translate-gs-total": "Totå",
+ "translate-documentation-language": "documintåcion des messaedjes",
+ "translate-searchprofile": "Ratournaedjes",
+ "translate-searchprofile-tooltip": "Cweri dins tos les lingaedjes",
+ "translate-search-languagefilter": "Passete pa lingaedje:",
+ "translate-search-nofilter": "dins tos les lingaedjes",
+ "log-name-translationreview": "Djournå des verifiaedjes des ratournaedjes",
+ "log-description-translationreview": "Djournå di tos les verifiaedjes des ratournaedjes et groupes di messaedjes.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|a verifyî}} l' ratournaedje $3",
+ "translate-workflow-state-": "(dismetou)",
+ "translate-workflowstatus": "Estat: $1",
+ "translate-workflow-set-doing": "Metant en alaedje...",
+ "translate-workflow-autocreated-summary": "Ahivaedje otomatike di pådjes po l' estat d' ovrance $1",
+ "translate-stats-workflow": "Estat",
+ "translate-workflowgroup-label": "Estats d' ovrance",
+ "translate-workflowgroup-desc": "Ci groupe ci mostere l' estat d' ovrance des ratournaedjes.\nLes estats sont definis dins l' variåve d' apontiaedje $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Dierins ratournaedjes",
+ "translate-dynagroup-recent-desc": "Ci groupe ci mostere les ratournaedjes fwaits dierinnmint dins l' lingaedje.\nIl est eployî copurade po les bouyes di verifiaedje.",
+ "tux-tab-untranslated": "Nén ratournés",
+ "tux-tab-outdated": "Trop vîs",
+ "tux-tab-translated": "Ratournés",
+ "tux-edit": "Candjî",
+ "tux-status-fuzzy": "Trop vîs",
+ "tux-status-proofread": "Verifyîs",
+ "tux-status-translated": "Ratournés",
+ "tux-editor-cancel-button-label": "Rinoncî",
+ "tux-editor-in-other-languages": "Dins ds ôtes lingaedjes",
+ "tux-notices-hide": "catchî",
+ "tux-editor-translate-mode": "Djivêye",
+ "tux-proofread-edit-label": "Candjî",
+ "tux-editor-doc-editor-cancel": "Rinoncî",
+ "tux-empty-list-translated-action": "Ratourner",
+ "tux-editor-close-tooltip": "Clôre",
+ "tux-editor-message-tools-history": "Istwere",
+ "tux-editor-message-tools-translations": "Tos les ratournaedjes",
+ "specialpages-group-translation": "Ratournaedje"
+}
diff --git a/Translate/i18n/core/war.json b/Translate/i18n/core/war.json
new file mode 100644
index 00000000..af84bf0d
--- /dev/null
+++ b/Translate/i18n/core/war.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "JinJian"
+ ]
+ },
+ "translate-documentation-language": "Dokyumentasyon han mensahe"
+}
diff --git a/Translate/i18n/core/wls.json b/Translate/i18n/core/wls.json
new file mode 100644
index 00000000..b05e2ffb
--- /dev/null
+++ b/Translate/i18n/core/wls.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lea.Fakauvea"
+ ]
+ },
+ "translate-documentation-language": "Tokoni fakahiki lea"
+}
diff --git a/Translate/i18n/core/wo.json b/Translate/i18n/core/wo.json
new file mode 100644
index 00000000..21e0ff7c
--- /dev/null
+++ b/Translate/i18n/core/wo.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ibou"
+ ]
+ },
+ "translate-documentation-language": "Faramfàcceg xibaar bi"
+}
diff --git a/Translate/i18n/core/wuu.json b/Translate/i18n/core/wuu.json
new file mode 100644
index 00000000..1a3ce87b
--- /dev/null
+++ b/Translate/i18n/core/wuu.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Poiuyt",
+ "飞舞回堂前"
+ ]
+ },
+ "translate-documentation-language": "信息说明文件",
+ "tux-notices-hide": "囥脱"
+}
diff --git a/Translate/i18n/core/xal.json b/Translate/i18n/core/xal.json
new file mode 100644
index 00000000..5e1de06b
--- /dev/null
+++ b/Translate/i18n/core/xal.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Huuchin"
+ ]
+ },
+ "translate": "Орчуллһн",
+ "translate-page-settings-legend": "Көгүд",
+ "translate-page-group": "Баг",
+ "translate-page-language": "Келн",
+ "translate-page-limit": "Цег",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|зәңг|зәңгс|зәңгс}} халхд",
+ "translate-submit": "Асрх",
+ "translate-page-navigation-legend": "Орм медлһн",
+ "translate-page-showing": "$1 - $2 тойгта зәңгс ($3 ут туршдан) үзүлсн.",
+ "translate-page-showing-none": "Зәңгс үзүлх уга",
+ "translate-next": "дарук халх",
+ "translate-prev": "урдк халх",
+ "translate-page-description-legend": "Багин туск",
+ "translate-edit-tmmatch": "$1%та ирлцән",
+ "translate-pref-editassistlang": "Туслмҗин келс",
+ "translate-sidebar-alltrans": "Талдан келәр",
+ "translate-language": "Келн",
+ "translate-documentation-language": "Зәңгин бәрмтлг",
+ "translate-searchprofile": "Орчуллһн"
+}
diff --git a/Translate/i18n/core/xh.json b/Translate/i18n/core/xh.json
new file mode 100644
index 00000000..6020b351
--- /dev/null
+++ b/Translate/i18n/core/xh.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "BaRaN6161 TURK",
+ "Nomden"
+ ]
+ },
+ "translate-taction-translate": "Guqula",
+ "translate-documentation-language": "imigaqo yokutolika"
+}
diff --git a/Translate/i18n/core/xmf.json b/Translate/i18n/core/xmf.json
new file mode 100644
index 00000000..cb86cb7e
--- /dev/null
+++ b/Translate/i18n/core/xmf.json
@@ -0,0 +1,156 @@
+{
+ "@metadata": {
+ "authors": [
+ "Malafaya",
+ "Narazeni",
+ "Silovan"
+ ]
+ },
+ "translate": "თანგუა",
+ "translate-desc": "[[Special:Translate|სპეციალური ხასჷლა]] მედიავიკიშ დო შხვეფიშ გინაფეფიშ ოთანგალო.",
+ "translate-taskui-export-to-file": "ექსპორტი აბანობურ ფორმატიშა",
+ "translate-taskui-export-as-po": "ექსპორტი ოფლაინური თანგუაშო",
+ "translate-taction-translate": "თანგუა",
+ "translate-taction-proofread": "გიწოთოლორაფა",
+ "translate-taction-lstats": "ნინაშ სტატისტიკა",
+ "translate-taction-mstats": "გინაფეფიშ ბუნეფიშ სტატისტიკა",
+ "translate-taction-export": "ექსპორტი",
+ "translate-taction-disabled": "ათე ვიკის თე ქიმინუა გოთიშილი რე.",
+ "translate-page-no-such-language": "მეწურაფილი ნინა ჩილათირი რე.",
+ "translate-page-no-such-group": "მეწურაფილი ბუნა ჩილათირი რე.",
+ "translate-page-disabled": "თე ნინაშა თანგუა ათე ბუნას გოთიშილი რე.\nბაძაძი:\n\n<em>$1</em>",
+ "translate-language-disabled": "ათე ნინაშა თანგუა გოთიშილი რე.",
+ "translate-page-settings-legend": "კონფიგურაცია",
+ "translate-page-group": "ბუნა",
+ "translate-page-language": "ნინა",
+ "translate-page-limit": "ლიმიტი",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|გინაფა}} ირი ხასჷლას",
+ "translate-submit": "ქაძირე",
+ "translate-page-navigation-legend": "ნავიგაცია",
+ "translate-page-showing-all": "ოძირანს $1 {{PLURAL:$1|გინაფას}}.",
+ "translate-page-showing-none": "ვა რე ოძირაფალი გინაფეფი.",
+ "translate-next": "გეჸვენჯი ხასჷლა",
+ "translate-prev": "კინოხიანი ხასჷლა",
+ "translate-page-description-legend": "ინფორმაცია ბუნაშ გეშა",
+ "translate-page-description-hasoptional-open": "ვაუციო გინაფეფიშ ძირაფა.",
+ "translate-page-edit": "რედაქტირაფა",
+ "translate-optional": "(ვა რე უციო)",
+ "translate-ignored": "(იგნორირაფილი)",
+ "translate-edit-title": "„$1“ რედაქტირაფა",
+ "translate-edit-definition": "გინაფაშ ენწყუმა",
+ "translate-edit-contribute": "ავტორი",
+ "translate-edit-information": "ინფორმაცია გინაფაშ გეშა ($1)",
+ "translate-edit-warnings": "ხვილაფეფი უთებუ თანგუეფიშ გეშა",
+ "translate-edit-tmmatch-source": "თანგუაშ დუდმაართა წყუ: $1",
+ "translate-edit-tmmatch": "$1% მანგურალა",
+ "translate-edit-nopermission": "გინაფეფიშ ოთანგალო თქვა თანგუაშ ნებეფს ოხვილუთ.",
+ "translate-edit-askpermission": "ალობაშ მეღება",
+ "exporttranslations": "ნათანგეფიშ ექსპორტი",
+ "translate-export-form-format": "ფორმატი",
+ "translate-export-not-supported": "ნათანგეფიშ ექსპორტი ვა რე ხუჯდოკინელი.",
+ "translate-checks-parameters": "გეჸვენჯი {{PLURAL:$2|პარამეტრი}} ვეგჷმირინუაფუ:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "გეჸვენჯი {{PLURAL:$2|პარამეტრი}} უჩინებუ რე:\n<strong>$1</strong>",
+ "translate-checks-links": "გეჸვენჯი {{PLURAL:$2|რსხილი}} პრობლემური რე:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "გეჸვენჯი {{PLURAL:$2|რსხილი}} ვა რე:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-gettext-plural-missing": "თე თანგუას უღჷდას ოკო <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-unsupported": "თე გინაფაშო ვა რე მოხუჯური <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-replacement": "გჷმირინეთ $2 $1-იშ მანგიორო.",
+ "translate-pref-editassistlang": "დჷმახვარე ნინეფი:",
+ "prefs-translate": "თანგუაშ პარამეტრეფი",
+ "right-translate-manage": "გინაფეფიშ ბუნეფიშ მართუა",
+ "right-translate-messagereview": "ნათანგეფიშ გიწოთოლორაფა",
+ "action-translate-messagereview": "ნათანგეფიშ გიწოთოლორაფა",
+ "translate-rcfilters-translations": "ნათანგეფი",
+ "translate-rcfilters-translations-only-label": "ნათანგეფი",
+ "translationstats": "თანგუაშ სტატისტიკა",
+ "translate-stats-edits": "რედაქტირაფეფი",
+ "translate-stats-users": "მათანგალეფი",
+ "translate-stats-registrations": "რეგისტრაციეფი",
+ "translate-stats-reviews": "გიწოთოლორაფეფი",
+ "translate-stats-reviewers": "გიწჷმათოლორალეფი",
+ "translate-statsf-width": "სიგანა პიქსელეფს:",
+ "translate-statsf-height": "სიმაღალა პიქსელეფს:",
+ "translate-statsf-days": "ბორჯიშ პერიოდი დღალეფს:",
+ "translate-statsf-start": "დოჭყაფაშ თარიღი:",
+ "translate-statsf-scale": "დეტალიზაციაშ ხარისხი:",
+ "translate-statsf-scale-years": "წანეფი",
+ "translate-statsf-scale-months": "თუთეფი",
+ "translate-statsf-scale-weeks": "მარეფი",
+ "translate-statsf-scale-days": "დღალეფი",
+ "translate-statsf-scale-hours": "სათეფი",
+ "translate-statsf-count": "ზჷმა:",
+ "translate-statsf-count-edits": "რედაქციეფიშ მუდანობა",
+ "translate-statsf-count-users": "აქტიური მათანგალეფი",
+ "translate-statsf-count-registrations": "ახალი მახვარებუეფი",
+ "translate-statsf-count-reviews": "თანგუაშ რეცენზენტეფი",
+ "translate-statsf-submit": "გიწოთოლორაფა",
+ "translate-statsf-unknown-error": "მეგორაფილი რე უჩინებუ ჩილათაშა.",
+ "translate-sidebar-alltrans": "შხვა ნინეფშა",
+ "translations": "არძა ნათანგა",
+ "translate-translations-no-message": "გინაფა \"$1\" ვეთანგუ",
+ "translate-translations-fieldset-title": "გინაფა",
+ "translate-translations-messagename": "ჯოხო:",
+ "translate-translations-project": "პროექტი:",
+ "translate-translations-history-short": "ისტ.",
+ "languagestats": "ნინაშ სტატისტიკა",
+ "languagestats-stats-for": "$1 ნინაშ თანგუაშ სტატისტიკა ($2).",
+ "languagestats-recenttranslations": "ბოლო ნათანგეფი",
+ "translate-langstats-expand": "გოფაჩუა",
+ "translate-langstats-collapse": "ინოკიჩუა",
+ "translate-langstats-expandall": "არძაშ გოფაჩუა",
+ "translate-langstats-collapseall": "არძაშ ინოკიჩუა",
+ "translate-language-code": "ნინაშ კოდი",
+ "translate-language-code-field-name": "ნინაშ კოდი:",
+ "translate-suppress-complete": "გეგშეტეთ ედომუშამო თანგილი გინაფეფიშ ბუნეფი",
+ "translate-ls-noempty": "ვაძირათ ედომშამო თანგილი გინაფეფიშ ბუნეფი",
+ "translate-language": "ნინა",
+ "translate-total": "გინაფეფი",
+ "translate-untranslated": "უთანგუ",
+ "translate-percentage-complete": "რსულაფირი",
+ "translate-percentage-fuzzy": "მოჯვეშებული",
+ "translate-percentage-proofread": "გინოჯინელი",
+ "translate-languagestats-overall": "არძა გინაფაშ ბუნა ართო",
+ "translate-ls-submit": "სტატისტიკაშ ძირაფა",
+ "translate-ls-column-group": "გინაფაშ ბუნა",
+ "translate-mgs-pagename": "გინაფეფიშ ბუნაშ სტატისტიკა",
+ "translate-mgs-group": "გინაფაშ ბუნა:",
+ "translate-mgs-submit": "სტატისტიკაშ ძირაფა",
+ "translate-mgs-column-language": "ნინა",
+ "translate-mgs-totals": "არძა $1 {{PLURAL:$1|ნინა}} ართო",
+ "translate-mgs-invalid-group": "მეწურაფილი ბუნა $1 ვა რე.",
+ "supportedlanguages": "აქტიური ნინეფი",
+ "supportedlanguages-colorlegend": "ფერამი ლეგენდა: ბოლო ნათანგა რდჷ $1 დღაშ კინოხ.",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|მათანგალი}}|მათანგალი}}: $1",
+ "supportedlanguages-recenttranslations": "ბოლო ნათანგეფი",
+ "supportedlanguages-count": "გვალო $1 {{PLURAL:$1|ნინა}}.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|რედაქტირაფა}} - ბოლო რედაქტირაფა $3 {{PLURAL:$3|დღაშ}} კინო",
+ "translate-jssti-add": "ერკებულშა გეძინა",
+ "managemessagegroups": "გინაფაშ ბუნაშ მართუა",
+ "translate-smg-notallowed": "ათე ქიმინუაშ ალობა ვაიღჷნა.",
+ "translate-smg-left": "გინაფაშ დინორე ვიკი ფორმატის",
+ "translate-smg-right": "მიშმაულარი თირუეფი",
+ "translate-smg-rename-select": "გიშაგორუა",
+ "translate-smg-rename-cancel": "გოუქვაფა",
+ "translate-smg-rename-no-msg": "გინაფეფი ვა რე.",
+ "translate-smg-rename-new": "ქეგუძინით მუჭოთ ახალი...",
+ "translate-smg-rename-rename": "ქეგუძინით მუჭოთ ჯოხოგინოდვალა...",
+ "translate-smg-strong-sync-help": "მოხვარა",
+ "translate-smg-group-with-error-summary": "$1 {{PLURAL:$1|გინაფა}} ჩილათათ:",
+ "translate-smg-group-message-action-history": "ისტორია",
+ "translate-smg-group-message-tag-outdated": "მოჯვეშებული",
+ "translate-smg-group-message-tag-rename": "ჯოხოშ თირუა",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|ხინტკი}}:",
+ "translate-smg-group-message-message-content": "დინორე:",
+ "translate-smg-group-message-message-other-langs": "შხვა ნინეფშა:",
+ "translate-smg-loading": "იხარგუ...",
+ "translate-manage-import-diff": "გინაფა $1 | ქიმინუა: $2",
+ "translate-manage-import-new": "ახალი გინაფა $1",
+ "translate-manage-import-deleted": "ლასირი გინაფა $1",
+ "translate-manage-action-import": "იმპორტი",
+ "translate-manage-action-conflict": "იმპორტი დო უზუსტობა",
+ "translate-manage-action-ignore": "იგნორირაფა",
+ "translate-manage-action-fuzzy": "იმპორტი დო არაზუსტი ნათანგეფი",
+ "translate-manage-action-rename": "ჯოხოშ თირუა",
+ "translate-documentation-language": "გინაფაშ დოკუმენტაცია",
+ "translate-searchprofile": "ნათანგეფი"
+}
diff --git a/Translate/i18n/core/xsy.json b/Translate/i18n/core/xsy.json
new file mode 100644
index 00000000..8994a078
--- /dev/null
+++ b/Translate/i18n/core/xsy.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lalotahes"
+ ]
+ },
+ "translate-documentation-language": "kapakSekla’ kina:at"
+}
diff --git a/Translate/i18n/core/yi.json b/Translate/i18n/core/yi.json
new file mode 100644
index 00000000..25a61240
--- /dev/null
+++ b/Translate/i18n/core/yi.json
@@ -0,0 +1,320 @@
+{
+ "@metadata": {
+ "authors": [
+ "Imre",
+ "Joystick",
+ "Pacha Tchernof",
+ "פוילישער"
+ ]
+ },
+ "translate": "פֿארטײַטשן",
+ "translate-desc": "[[Special:Translate|באזונדערער בלאט]] פֿאר פֿארטײַטשן מעדיעוויקי און ווײַטער",
+ "translate-taskui-export-to-file": "עקספארטירן אין סיסטעם פֿארמאט",
+ "translate-taskui-export-as-po": "עקספארטירן פאר אפֿליין איבערזעצונג",
+ "translate-taction-translate": "פֿאַרטײַטשן",
+ "translate-taction-proofread": "רעצענזירן",
+ "translate-taction-lstats": "שפראך סטאטיסטיק",
+ "translate-taction-mstats": "מעלדונג גרופע סטאטיסטיק",
+ "translate-taction-export": "עקספארטירן",
+ "translate-taction-disabled": "די פעולה איז אומאקטיווירט אויף דער וויקי.",
+ "translate-page-no-such-language": "באַשטימטע שפראַך אומגילטיק.",
+ "translate-page-no-such-group": "ספעציפֿירטע גרופע אומגילטיק.",
+ "translate-page-disabled": "פֿאַרטײַטשונגען צו דער דאזיקער שפראַך זענען מבוטל געווארן.\nטעם:\n\n<em>$1</em>",
+ "translate-language-disabled": "איבערזעצונג אין דער שפראך נישט מעגלעך.",
+ "translate-page-settings-legend": "איינשטעלונגען",
+ "translate-page-group": "גרופע",
+ "translate-page-language": "שפראך",
+ "translate-page-limit": "לימיט",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|מעלדונג|מעלדונגען}} אין א בלאט",
+ "translate-submit": "ווייזן",
+ "translate-page-navigation-legend": "נאוויגאציע",
+ "translate-page-showing": "ווײַזן מעלדונגען $1 ביז $2 פֿון $3.",
+ "translate-page-showing-all": "ווײַזן $1 {{PLURAL:$1|מעלדונג|מעלדונגען}}.",
+ "translate-page-showing-none": "נישטא קיין מעלדונגען צו ווײַזן.",
+ "translate-next": "קומענדיגער בלאט",
+ "translate-prev": "פֿריערדיגער בלאט",
+ "translate-page-description-legend": "אינפֿארמאציע וועגן דער גרופע",
+ "translate-page-description-hasoptional": "די מעלדונג גרופע אנטהאלט אפציאנאלע מעלדונגען.\nאפציאנאלע מעלדונגען זאל מען נאר איבערזעצן ווען אייער שפראך האט באזונדערע באדארפונגען\nווי למשל נישט ניצן שפייצן אדער טראנסקריפציע פון פרט־נעמען. $1",
+ "translate-page-description-hasoptional-open": "ווײַזן אפציאנאלע מעלדונגען.",
+ "translate-page-edit": "רעדאַקטירן",
+ "translate-optional": "(ברירהדיק)",
+ "translate-ignored": "(איגנאָרירט)",
+ "translate-edit-title": "רעדאַקטירן\"$1\"",
+ "translate-edit-definition": "מעלדונג דעפֿיניציע",
+ "translate-edit-contribute": "בײַשטײַערן",
+ "translate-edit-no-information": "<em>די מעלדונג פעלט דאקומענטאציע.\nאויב איר ווייסט וואו אדער ווי די מעלדונג ווערט געניצט, קענט איר העלפֿן אנדערע פארטייטשערס דורך צולייגן דאקומענטאציע צו דער מעלדונג.</em>",
+ "translate-edit-information": "אינפֿארמאציע וועגן מעלדונג ($1)",
+ "translate-edit-warnings": "ווארענונגען וועגן אומפולשטענדיקע איבערזעצונגען",
+ "translate-edit-tmmatch-source": "איבערזעצונג מקור טעקסט: $1",
+ "translate-edit-tmmatch": "$1% צופאַסונג",
+ "translate-edit-nopermission": "איר דארפֿט איבערזעץ־רעכטן איבערצוזעצן מעלדונגען.",
+ "translate-edit-askpermission": "באקומען רשות",
+ "exporttranslations": "עקספארטירן איבערזעצונגען",
+ "translate-export-form-format": "פֿאָרמאַט",
+ "translate-export-invalid-format": "זייט אזוי גוט און ספעציפֿירט א גילטיקן פֿארמאט.",
+ "translate-export-not-supported": "איבערזעצונג עקספארט נישט געשטיצט.",
+ "translate-checks-parameters": "{{PLURAL:$2|דער פֿאלגנדער פאראמעטער ווערט|די פֿאלגנדע פאראמעטערס ווערן}} נישט געניצט:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|דער פֿאלגנדער פאַראַמעטער איז|די פֿאלגנדע פאַראַמעטערס זענען}} נישט באַקאַנט:\n<strong>$1</strong>",
+ "translate-checks-balance": "די צאל {{PLURAL:$2|קלאמערן|קלאמערן}} איז נישט באלאנסירט:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|דער פֿאלגנדער לינק איז|די פֿאלגנדע $2 לינקען זענען}} פראבלעמאַטיש:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|דער פֿאלגנדער לינק פֿעלט|די פֿאלגנדע $2 לינקס פֿעלן}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "דעפֿיניציע ניצט <nowiki>{{PLURAL:}}</nowiki>, די איבערזעצונג אבער נישט.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> איז געגעבען געווארן {{PLURAL:$1|איין פֿארעם|$1 פֿארמען}} אבער {{PLURAL:$2|נאר איין פֿארעם איז|$2 פֿארמען זענען}} געשטיצט (אחוץ 0= און 1= פֿארמען).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> האט דופליקאטע פארעמס צום סוף. <nowiki>{{PLURAL:$1|פֿיש|פֿיש}}</nowiki> דארף מען שרײַבן <nowiki>{{PLURAL:$1|פֿיש}}</nowiki>.",
+ "translate-checks-pagename": "נאמענטייל געענדערט פון דער דעפֿיניציע",
+ "translate-checks-format": "די דאזיקע איבערזעצונג פֿאלגט נישט די דעפֿיניציע אדער האט אומגילטיקן סינטאקס: $1",
+ "translate-checks-parametersnotequal": "פאראמעטער צאל איז {{PLURAL:$1|$1}}; דארף אבער זײַן {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> איז נישט געהעריק.",
+ "translate-checks-fudforum-syntax": "באַניצט <nowiki>$1</nowiki> אַנשטאט <nowiki>$2</nowiki> אין דעם דאָזיקן פראיעקט.",
+ "translate-pref-editassistlang": "אונטערשטיץ שפראכן:",
+ "prefs-translate": "איבערזעצונג אויסקלייבן",
+ "translate-pref-editassistlang-help": "רשימה געשיידט מיט קאמעס פון שפראך קאדן.\nאיבערזעצונגען פון א מעלדונג אין די שפראכן ווערט געוויזן ווען איר זעצט איבער.\nדי גרונט רשימה פון שפראכן ווענדט זיך לויט אייער שפראך.",
+ "translate-pref-editassistlang-bad": "אומגילטיקער שפּראַך קאָד אין דער רשימה:\n<nowiki>$1</nowiki> .",
+ "right-translate": "רעדאקטירן דורכן איבערזעצונג אייבערפֿלאך",
+ "right-translate-manage": "פֿארוואלטן מעלדונג גרופעס",
+ "action-translate-manage": "פֿארוואלטן מעלדונג גרופעס",
+ "right-translate-import": "אימפארטירן אפֿליין איבערזעצונגען",
+ "action-translate-import": "אימפארטירן אפֿליין איבערזעצונגען",
+ "right-translate-messagereview": "איבערקוקן איבערזעצונגען",
+ "action-translate-messagereview": "רעצענזירן איבערזעצונגען",
+ "right-translate-groupreview": "ענדערן ארבעטשטראם סטאטוס פון מעלדונג גרופעס",
+ "translate-rcfilters-translations": "איבערזעצונגען",
+ "translate-rcfilters-translations-only-label": "איבערזעצונגען",
+ "translate-rcfilters-translations-only-desc": "ענדערונגען צו איבערגעזעצטע בלעטער.",
+ "translate-rcfilters-translations-filter-label": "נישט איבערזעצונגען",
+ "translate-rc-translation-filter": "פֿילטערן איבערזעצונגען:",
+ "translate-rc-translation-filter-no": "גאָרנישט",
+ "translate-rc-translation-filter-only": "ווײַזן נאר איבערזעצונגען",
+ "translate-rc-translation-filter-filter": "פֿילטערן איבערזעצונגען:",
+ "translate-rc-translation-filter-site": "נאר ענדערונגען צו וועבזײַטל מעלדונגען",
+ "translationstats": "פֿארטײַטשן סטאטיסטיק",
+ "translate-stats-edits": "רעדאקטירונגען",
+ "translate-stats-users": "איבערזעצער",
+ "translate-stats-registrations": "רעגיסטרירונגען",
+ "translate-stats-reviews": "רעצענזיעס",
+ "translate-stats-reviewers": "רעצענזענטן",
+ "translate-statsf-options": "דיאגראם מעגלעכקייטן",
+ "translate-statsf-width": "ברייט אין פיקסעלן:",
+ "translate-statsf-height": "הייך אין פיקסעלן:",
+ "translate-statsf-days": "צייט אין טעג:",
+ "translate-statsf-start": "אנפֿאנג דאטע:",
+ "translate-statsf-scale": "גראנולאריטעט:",
+ "translate-statsf-scale-months": "מאנאַטן",
+ "translate-statsf-scale-weeks": "וואָכן",
+ "translate-statsf-scale-days": "טעג",
+ "translate-statsf-scale-hours": "שעה'ן",
+ "translate-statsf-count": "מאָס:",
+ "translate-statsf-count-edits": "צאל רעדאקטירונגען",
+ "translate-statsf-count-users": "אקטיווע איבערזעצער",
+ "translate-statsf-count-registrations": "נײַע באַניצער",
+ "translate-statsf-count-reviews": "איבערזעצונג רעצענזיעס",
+ "translate-statsf-count-reviewers": "רעצענזענטן",
+ "translate-statsf-language": "קאמע־געטיילט רשימה פון שפראך קאדן:",
+ "translate-statsf-group": "קאמע־געטיילט רשימה פון גרופע קאדן:",
+ "translate-statsf-submit": "פֿאראויסשטעלונג",
+ "translate-tag-page-desc": "אפטײַטש פֿונעם וויקי בלאַט [[$2|$1]] פון $3 ($4).",
+ "translate-sidebar-alltrans": "אין אַנדערע שפּראַכן",
+ "translations": "אלע אפטײַטשן",
+ "translations-summary": "אריינגעבן א מעלדונג נאמען אונטן צו ווייזן אלע דערגרייכלעכע איבערזעצונגען.",
+ "translate-translations-no-message": "\"$1\" איז נישט קיין איבערזעצבארע מעלדונג",
+ "translate-translations-none": "נישטאַ קיין טײַטשן פֿאַר \"$1\"",
+ "translate-translations-count": "געטראפן {{PLURAL:$1|איין איבערזעצונג|$1 איבערזעצונגען}}.",
+ "translate-translations-fieldset-title": "מעלדונג",
+ "translate-translations-messagename": "נאמען:",
+ "translate-translations-project": "פראיעקט:",
+ "translate-translations-including-no-param": "זײַט אזוי גוט ספעציפֿיצירן א גילטיקע מעלדונג אינעם אונטערבלאט פאראמעטער",
+ "translate-translations-history-short": "ה",
+ "languagestats": "שפראַך סטאַטיסטיק",
+ "languagestats-summary": "דער דאזיגער בלאַט ווײַזט פֿאַרטײַטשן סטאַטיסטיק פֿאַר אַלע מעלדונג גרופעס פֿאַר א שפראַך.",
+ "messagegroupstats-summary": "דער בלאט ווײַזט מעלדונג־גרופע סטאטסטיק.",
+ "languagestats-stats-for": "איבערזעצונג סטאטיסטיק פֿאר $1 ($2).",
+ "languagestats-recenttranslations": "לעצטיקע איבערזעצונגען",
+ "translate-langstats-incomplete": "טייל פון די סטאטיסטיק זענען נישט פֿולשטענדיק. מ'דארף ווידער אנלאדן צו באקומען נאך סטאטיסטיק.",
+ "translate-langstats-expand": "פֿאַרברייטערן",
+ "translate-langstats-collapse": "אײַנציען",
+ "translate-langstats-expandall": "פֿארברייטערן אלץ",
+ "translate-langstats-collapseall": "צונויפציען",
+ "translate-language-code": "שפראך קאד",
+ "translate-language-code-field-name": "שפראך קאד:",
+ "translate-suppress-complete": "אונטערדריקן מעלדונג גרופעס וואס זענען אינגאנצן איבערגעזעצט",
+ "translate-ls-noempty": "אונטערדריקן מעלדונג גרופעס וואס זענען בכלל נישט איבערגעזעצט",
+ "translate-language": "שפראך",
+ "translate-total": "מעלדונגען",
+ "translate-untranslated": "נישט פֿאַרטײַטשט",
+ "translate-percentage-complete": "פֿאַרענדיקונג",
+ "translate-percentage-fuzzy": "פֿאַרעלטערט",
+ "translate-languagestats-overall": "אלע מעלדונג גרופעס צוזאמען",
+ "translate-ls-submit": "ווײַזן סטאטיסטיק",
+ "translate-ls-column-group": "מעלדונג גרופע",
+ "translate-mgs-pagename": "מעלדונג גרופע סטאטיסטיק",
+ "translate-mgs-fieldset": "ווייַזן רעפֿערענצן",
+ "translate-mgs-group": "מעלדונג גרופע:",
+ "translate-mgs-nocomplete": "נישט ווײַזן שפראכן מיט פֿארטיקע איבערזעצונגען",
+ "translate-mgs-noempty": "נישט ווײַזן שפראכן וואס האבן נאכנישט קיין איבערזעצונגען",
+ "translate-mgs-submit": "ווײַזן סטאטיסטיק",
+ "translate-mgs-column-language": "שפראַך",
+ "translate-mgs-totals": "{{PLURAL:$1|איין שפראך|אלע $1 שפראכן צוזאמען}}",
+ "translate-mgs-invalid-group": "די ספעציפֿירטע גרופע $1 איז נישט פֿאראן.",
+ "translate-mgs-nothing": "נישט פאראן וואס צו ווײַזן פאר די פארלאנגטע סטאטיסטיק.",
+ "supportedlanguages": "געשטיצטע שפראַכן",
+ "supportedlanguages-summary": "דער בלאט ווײַזט א רשימה פון אלע שפראכן געשטיצט דורך {{SITENAME}},\nמיט די נעמען פון די איבערזעצער וואס ארבעטן אויף יענער שפראך.\nוואס מער די צאל פון ענדערונגען פון אן איבערזעצער, וואס גרעסער ווערט זײַן נאמען געוויזן.\nדער קאליר פון דער ליניע אונטער דעם נאמען ווילט ווען דער איבערזעצער איז לעצט געווען טעטיק דא.",
+ "supportedlanguages-colorlegend": "לעגענדע פאר די קאלירן:לעצטע איבערזעצונג פאר $1 טעג.",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|איבערזעצער|איבערזעצערין}}|איבערזעצער}}: $1",
+ "supportedlanguages-recenttranslations": "לעצטיקע איבערזעצונגען",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|שפראך|שפראכן}} אינגאנצן.",
+ "supportedlanguages-activity": "$1 : $2 {{PLURAL:$2| רעדאַגירונג | רעדאַגירונגען}} - לעצטע רעדאַגירונג $3 {{PLURAL:$3| טאָג | טעג}} צוריק",
+ "abusefilter-edit-builder-vars-translate-source-text": "קוואלטעקסט פון איבערזעצונג איינהייט",
+ "translate-jssti-add": "צולייגן צו ליסטע",
+ "managemessagegroups": "מעלדונג גרופּע אַדמיניסטראַציע",
+ "translate-smg-notallowed": "איר זענט נישט בארכעטיקט אויסצופירן די אקציע.",
+ "translate-smg-nochanges": "נישט פאראן קיין ענדערונגען צו פראצעסירן.",
+ "translate-smg-submit": "אײַנגעבן ענדערונגען צו פראצעסירן.",
+ "translate-smg-left": "מעלדונג אינהאלט אין וויקי",
+ "translate-smg-rename-cancel": "אַנולירן",
+ "translate-manage-import-diff": "מעלדונג $1 | פעולות: $2",
+ "translate-manage-import-new": "נייע מעלדונג $1",
+ "translate-manage-import-deleted": "אויסגעמעקטע מעלדונג $1",
+ "translate-manage-action-import": "אימפארטירן",
+ "translate-manage-action-conflict": "אימפארטירן און מארקירן \"אומקלאר\"",
+ "translate-manage-action-ignore": "איגנאָרירן",
+ "translate-manage-action-fuzzy": "אימפארטירן און מארקירן איבערזעצונגען \"אומקלאר\"",
+ "translate-manage-nochanges": "נישטא קיין ענדערונגען אין דעפֿיניציעס פֿאַר דער דאָזיגער גרופע.",
+ "translate-manage-nochanges-other": "נישט געווען קיין ענדערונגען פאר דער דאזיקער שפראך.\nניצט דעם לינק אונטן צוריקצוגיין צום גרופע־פרטים באקוק.",
+ "translate-manage-submit": "אויספֿירן",
+ "translate-manage-import-ok": "אימפארטירט:$1",
+ "translate-manage-import-done": "אימפארט אדורכגעפירט!",
+ "importtranslations": "אימפארטירן איבערזעצונגען",
+ "translate-import-from-local": "לאקאלע טעקע ארויפֿלאדן:",
+ "translate-import-load": "לאָדן טעקע",
+ "translate-import-err-dl-failed": "מ'קען נישט אפנעמען די טעקע:\n$1",
+ "translate-import-err-ul-failed": "טעקע אַרויפֿלאָד נישט געראָטן",
+ "translate-import-err-invalid-title": "איינגעגעבענע טעקע נאמען <nowiki>$1</nowiki> נישט גילטיק.",
+ "translate-import-err-no-such-file": "די טעקע <nowiki>$1</nowiki> עקסיזטירט נישט אדער נישט ארויפגעלאדן לאקאל.",
+ "translate-import-err-stale-group": "די מעלדונג גרופע צו וואס די טעקע געהערט עקזיסטירט נישט.",
+ "translate-js-support-unsaved-warning": "איר האט נישט אפגעהיטענע איבערזעצונגען.",
+ "translate-gs-pos": "פאזיציע",
+ "translate-gs-code": "קאד",
+ "translate-gs-continent": "קאָנטינענט",
+ "translate-gs-speakers": "רעדערס",
+ "translate-gs-score": "פונקטן־חשבון",
+ "translate-gs-multiple": "מערער",
+ "translate-gs-count": "צאל",
+ "translate-gs-total": "סה\"כ",
+ "translate-gs-avgscore": "דורכשניטלער פונקטן־חשבון",
+ "translate-documentation-language": "מעלדונג דאקומענטאציע",
+ "translate-searchprofile": "איבערזעצונגען",
+ "translate-searchprofile-tooltip": "זוכן אין אלע איבערזעצונגען",
+ "translate-search-languagefilter": "פֿילטערן לויט שפראך:",
+ "translate-search-nofilter": "קיין פֿילטערן",
+ "log-name-translationreview": "איבערזעצונג רעצענזיע לאגבוך",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|האט רעצענזירט}} איבערזעצונג $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|האט געענדערט}} דעם סטאטוס פון $4 איבערזעצונגען פון $3 פון $6 צו $7",
+ "group-translate-sandboxed": "אומבאשטעטיקטע איבערזעצער",
+ "group-translate-sandboxed-member": "{{GENDER:$1|אומבאשטעטיקטער איבערזעצער| אומבאשטעטיקטע איבערזעצערין}}",
+ "right-translate-sandboxmanage": "פארוואלטן זאמדקאסטן באניצער",
+ "action-translate-sandboxmanage": "פֿארוואלטן זאמדקאסטן באניצער",
+ "translate-workflow-state-": "(נישט געשטעלט)",
+ "translate-workflowstatus": "סטאַטוס: $1",
+ "translate-workflow-set-doing": "אײַנשטעלן…",
+ "translate-workflow-autocreated-summary": "אויטאמאטישע שאפונג פון בלאט פאר ארבעטשטראם סטאטוס $1",
+ "translate-stats-workflow": "סטאַטוס",
+ "translate-workflowgroup-label": "ארבעטשטראם סטאטוסן",
+ "translate-workflowgroup-desc": "די גרופע הודעות ווייזט די איבערזעצונג ארבעטשטראם סטאטוסן. \nדי סטאטוסן ווערן דעפינירט אין דעם קאנפיגוראציע וואריאנט ‎$wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "לעצטיקע איבערזעצונגען",
+ "translate-dynagroup-recent-desc": "די דאָזיקע מעלדונג גרופע ווײַזט אַלע לעצטיקע איבערזעצונגען צו דער דאָזיקער שפראַך.\nניצלעכסטן פֿאר די רעצענזירן אויפֿגאַבעס.",
+ "translate-dynagroup-additions-label": "לעצטיגע הוספות",
+ "translate-dynagroup-additions-desc": "די מעלדונג גרופע ווײַזט נײַע און געענדערטע מעלדונגען.",
+ "translate-msggroupselector-projects": "מעלדונג גרופע",
+ "translate-msggroupselector-search-placeholder": "זוכן גרופעס",
+ "translate-msggroupselector-search-all": "אַלע",
+ "translate-msggroupselector-search-recent": "לעצטיקע",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|אונטערגרופע|אונטערגרופעס}}",
+ "tux-languageselector": "פֿאַרטייטשן אויף",
+ "tux-tab-all": "אַלע",
+ "tux-tab-untranslated": "נישט פֿאַרטײַטשט",
+ "tux-tab-outdated": "פֿאַרעלטערט",
+ "tux-tab-translated": "איבערגעזעצט",
+ "tux-tab-unproofread": "נישט איבערגעקוקט",
+ "tux-edit": "רעדאַקטירן",
+ "tux-status-optional": "ברירהדיק",
+ "tux-status-fuzzy": "פֿאַרעלטערט",
+ "tux-status-proofread": "איבערגעקוקט",
+ "tux-status-translated": "איבערגעזעצט",
+ "tux-status-saving": "אויפהיטנדיק…",
+ "tux-status-unsaved": "נישט אויפגעהיטן",
+ "tux-save-unknown-error": "אַן אומבאַקאַנט טעות איז פֿארגעקומען.",
+ "tux-editor-editsummary-placeholder": "אפציאנאלע רעזומע",
+ "tux-editor-paste-original-button-label": "ארײַנקלעבן מקור טעקסט",
+ "tux-editor-discard-changes-button-label": "אוועקווארפן ענדערונגען",
+ "tux-editor-save-button-label": "אויפֿהיטן איבערזעצונג",
+ "tux-editor-skip-button-label": "ווײַטער צום נעקסטן",
+ "tux-editor-cancel-button-label": "אַנולירן",
+ "tux-editor-confirm-button-label": "באשטעטיקן איבערזעצונג",
+ "tux-editor-proofread-button-label": "מארקירן רעצענזירט",
+ "tux-editor-shortcut-info": "דרוקט \"$1\" צו באשטעטיקן און גיין צו דער נעקסטער מעלדונג, \"$2\" איבערצוהיפן, \"$4\" צו פארזארגן א רעזומע אדער האלט \"$3\" צו זען אנדערע דורכוועגן.",
+ "tux-editor-edit-desc": "רעדאקטירן דאקומענטאציע",
+ "tux-editor-add-desc": "צולייגן דאקומענטאציע",
+ "tux-editor-suggestions-title": "הצעות",
+ "tux-editor-in-other-languages": "אין אַנדערע שפראַכן",
+ "tux-editor-need-more-help": "דארפט איר נאך הילף?",
+ "tux-editor-ask-help": "בעטן נאך אינפארמאציע",
+ "tux-editor-tm-match": "$1% צופאַסונג",
+ "tux-notices-more": "{{PLURAL:$1|נאך $1}}",
+ "tux-notices-hide": "באַהאַלטן",
+ "tux-editor-save-failed": "אויפהיטן די איבערזעצונג איז אדורכגעפאלן: $1",
+ "tux-editor-n-uses": "באניצט {{PLURAL:$1|איינמאָל|$1 מאָל}}",
+ "tux-editor-message-desc-more": "ווײַזן נאך",
+ "tux-editor-message-desc-less": "ווײַזן ווינציקער",
+ "tux-editor-clear-translated": "באהאלטן איבערגעזעצט",
+ "tux-editor-proofreading-mode": "רעצענזירן",
+ "tux-editor-translate-mode": "ליסטע",
+ "tux-editor-proofreading-hide-own-translations": "באהאלטן אייערע איבערזענצונגען",
+ "tux-editor-proofreading-show-own-translations": "ווײַזן אײַערע איבערזעצונגען",
+ "tux-proofread-action-tooltip": "מארקירן רעצענזירט",
+ "tux-proofread-edit-label": "רעדאַקטירן",
+ "tux-editor-page-mode": "בלאַט",
+ "tux-editor-outdated-notice": "מ'דארף אפשר דערהײַנטיקן די איבערזעצונג.",
+ "tux-editor-outdated-notice-diff-link": "ווײַזן אונטערשיידן",
+ "tux-editor-doc-editor-placeholder": "מעלדונג דאקומענטאציע",
+ "tux-editor-doc-editor-save": "אויפהיטן דאקומענטאציע",
+ "tux-editor-doc-editor-cancel": "אַנולירן",
+ "tux-messagetable-more-messages": "נאך {{PLURAL:$1|איין מעלדונג|$1 מעלדונגען}}",
+ "tux-messagetable-loading-messages": "לאָדן $1 {{PLURAL:$1|מעלדונג|מעלדונגען}}.",
+ "tux-message-filter-placeholder": "פֿילטער ליסטע",
+ "tux-message-filter-result": "געטראפן $1 {{PLURAL:$1|רעזולטאַט| רעזולטאַטן}} פאר \"$2\"",
+ "tux-message-filter-advanced-button": "ווײַטהאלטן זוכן",
+ "tux-message-filter-optional-messages-label": "ברירהדיקע מעלדונגען",
+ "tux-proofread-translated-by-self": "איבערגעזעצט דורך אייך",
+ "tux-empty-list-all": "די דאזיקע מעלדונג גרופע איז ליידיק",
+ "tux-empty-list-all-guide": "קלויבט אן אנדער מעלדונג גרופע איבערצוזעצן",
+ "tux-translate-page-no-such-group": "<strong>די געזוכטע גרופע עקזיסטירט נישט.</strong> קלויבט אן אנדער מעלדונג גרופע.",
+ "tux-empty-list-translated": "קיין איבערגעזעצטע מעלדונגען",
+ "tux-empty-list-translated-guide": "איר קענט העלפן איבערזעצן",
+ "tux-empty-list-translated-action": "פֿאַרטײַטשן",
+ "tux-empty-no-messages-to-display": "קיין מעלדונגען צו ווײַזן",
+ "tux-empty-there-are-optional": "עס זענען פאראן אפציאנאלע מעלדונגען נישט געוויזן אין דער ליסטע.",
+ "tux-empty-show-optional-messages": "ווײַזן אפציאנאלע מעלדונגען",
+ "tux-empty-no-outdated-messages": "קיין פארעלעטערטע מעלדונגען",
+ "tux-empty-nothing-to-proofread": "נישטא וואס איבערצוקוקן",
+ "tux-empty-you-can-help-providing": "איר קענט העלפן מיט שאפן נייע איבערזעצונגען",
+ "tux-empty-nothing-new-to-proofread": "קיין נייע זאך נישט איבערצוקוקן",
+ "tux-empty-you-can-review-already-proofread": "מען קען איבערקוקן איבערזעצונגען וואס אנדערע האבן שוין רעצענזירט.",
+ "tux-empty-list-other": "נישטא וואס איבערצוזעצן",
+ "tux-empty-list-other-guide": "איר קענט העלפן איבערקוקן עקזיסטירנדיקע איבערזעצונגען",
+ "tux-empty-list-other-action": "איבערקוקן איבערזעצונגען",
+ "tux-empty-list-other-link": "ווײַזן אלע מעלדונגען",
+ "tux-editor-close-tooltip": "פארמאכן",
+ "tux-editor-expand-tooltip": "פֿאַרברייטערן",
+ "tux-editor-collapse-tooltip": "אײַנציען",
+ "tux-editor-message-tools-show-editor": "ווייזן אין וויקי־רעדאקטירער",
+ "tux-editor-message-tools-history": "היסטאָריע",
+ "tux-editor-message-tools-delete": "אויסמעקן",
+ "tux-editor-message-tools-translations": "אַלע איבערזעצונגען",
+ "tux-editor-message-tools-linktothis": "לינקען צו דער דאזיגער מעלדונג",
+ "tux-editor-loading": "לאָדט…",
+ "translate-search-more-languages-info": "נאך {{PLURAL:$1|איין שפראך|$1 שפראכן}}",
+ "translate-statsbar-tooltip": "$1% איבערגעזעצט, $2% איבערגעקוקט",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% איבערגעזעצט, $2% איבערגעקוקט, $3% פֿארעלטערט",
+ "translate-search-more-groups-info": "נאך {{PLURAL:$1|גרופע|גרופעס}}: $1",
+ "tux-nojs": "דער דאזיקער געצייג ארבעט נישט אן JavaScript .JavaScript איז אומאקטיווירט, אדער ארבעט נישט, אדער דער דאזיקער בלעטערער איז נישט געשטיצט."
+}
diff --git a/Translate/i18n/core/yo.json b/Translate/i18n/core/yo.json
new file mode 100644
index 00000000..4ada6f2f
--- /dev/null
+++ b/Translate/i18n/core/yo.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Wikicology"
+ ]
+ },
+ "translate-documentation-language": "Àkọsílẹ̀ ìfiránṣẹ́"
+}
diff --git a/Translate/i18n/core/yrl.json b/Translate/i18n/core/yrl.json
new file mode 100644
index 00000000..726438f4
--- /dev/null
+++ b/Translate/i18n/core/yrl.json
@@ -0,0 +1,416 @@
+{
+ "@metadata": {
+ "authors": [
+ "Karapananguasú Kururú Teremembé",
+ "Maracajá Teremembé"
+ ]
+ },
+ "translate": "Usinimukanhẽẽga",
+ "translate-extensionname": "Usinimukanhẽẽga",
+ "translate-desc": "[[Special:Translate|Sowa katumunhãgara]] usinimukanhẽẽga MediaWiki pirí açui píri",
+ "translate-fuzzybot-desc": "Yawá yepé puruçara mainãgawa yũreçawa katumunhãgara upuruwara muçaçawa rupí\n[https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate Translate extension] çui MediaWiki çui, ukarawatá pirí sinimukanhẽẽgawa'etá.\nKuá puruçara mainãgawa umpaurá MediaWiki Software açui yawá ne yepé puruçara çui.",
+ "translate-taskui-export-to-file": "Umeẽ ukaripé kití ikewara rupiawa rupí",
+ "translate-taskui-export-as-po": "Umeẽ ukaripé kití sinimukanhẽẽgawa'etá yumũdianaĩma kití",
+ "translate-taction-translate": "Usinimukanhẽẽga",
+ "translate-taction-proofread": "Uamũmaã",
+ "translate-taction-lstats": "Nhẽẽga papaçawa'etá",
+ "translate-taction-mstats": "Pareçawa ayurí papaçawa'etá",
+ "translate-taction-export": "Umeẽ ukaripé kití",
+ "translate-taction-disabled": "Kuá munhãgawa uikú yurarewa kuá wiki upé.",
+ "translate-page-no-such-language": "Kuá nhẽẽga ĩdé renheẽ reikú reçé ti aikué iké rupí ã ti aikué kuaye.",
+ "translate-page-no-such-group": "Ti aikué kuá ayurí ĩdé renheẽ reikú.",
+ "translate-page-disabled": "Sinimukanhẽẽgawa'etá kuá nhẽẽga rupí kuá ayurí upé aĩtá tauikú yurarewa'ana.\n\nNhaãçé:\n\n<em>$1</em>",
+ "translate-language-disabled": "Sinimukanhẽẽgawa'etá kuá nhẽẽga rupí yurarewa tauikú.",
+ "translate-page-settings-legend": "Yumukaturuçawa'etá",
+ "translate-page-group": "Ayurí",
+ "translate-page-language": "Nhẽẽga",
+ "translate-page-limit": "Ipuawa",
+ "translate-page-limit-option": "$1 {{PLURAL:$1|pareçawa|pareçawa'etá}} sowa rupí",
+ "translate-submit": "Ukaripuãmu",
+ "translate-page-navigation-legend": "Sikariçawa",
+ "translate-page-showing": "Umukameẽ uikú pareçawa'etá $1 çui $2 kití $3 çui.",
+ "translate-page-showing-all": "Umukameẽ uikú $1 {{PLURAL:$1|pareçawa|pareçawa'etá}}.",
+ "translate-page-showing-none": "Ne yepé pareçawa umukameẽ pirí",
+ "translate-page-paging-links": "[ $1 ] [ $2 ]",
+ "translate-next": "Sowa amũkití",
+ "translate-prev": "Sowa tenũdewara",
+ "translate-page-description-legend": "Kuauçawa kuá ayurí reçé",
+ "translate-page-description-hasoptional": "Kuá ayurí pareçawa urikú pareçawa'etá purawakawara. Pareçawa'etá purawakawara taumurú tauikú sinimukanhẽẽgawara anhũtu ne nhẽẽga urikú ramẽ maã'etá katumunhãgara. Maã'etá aĩtá mayé ti upurú mukũçawa'etá ã ti umumirĩ rera'etá tẽnhé. $1",
+ "translate-page-description-hasoptional-open": "Umukameẽ pareçawa'etá purawakawara.",
+ "translate-page-edit": "umurupiawa",
+ "translate-optional": "(purawakawara)",
+ "translate-ignored": "(mãtuwara)",
+ "translate-edit-title": "Umurupiawa \"$1\"",
+ "translate-edit-definition": "Pareçawa çurimũgawa",
+ "translate-edit-contribute": "E-pitimũ",
+ "translate-edit-no-information": "<em>Kuá pareçawa ti umukatiuruwara raĩ. Ĩdé ti rekuau ramẽ mamẽ ã mayé yawá upuruwara, ĩdé remurú repitimũ amũ sinimukanhẽẽgara'etá çupé umburipíri uikú kuauçawa'etá kuá pareçawa reçé.</em>",
+ "translate-edit-information": "Kuauçawa'etá pareçawa reçé ($1)",
+ "translate-edit-warnings": "Mbueçara'etá sinimukanhẽẽgawa'etá tereçemuĩma reçé",
+ "translate-edit-tmmatch-source": "Sinimukanhẽẽgawa yupirũgawa pinimaçá: $1",
+ "translate-edit-tmmatch": "$1% yawé",
+ "translate-edit-nopermission": "Ĩdé repuraĩ sinimukanhẽẽgawa çatãbika'etá usinimukanhẽẽga pareçawa'etá pirí.",
+ "translate-edit-askpermission": "Ukaripuãmu xiariçawa",
+ "exporttranslations": "Umeẽ sinimukanhẽẽgawa'etá ukaripé kití",
+ "translate-export-form-format": "Rupiawa",
+ "translate-export-invalid-format": "Katuçawa rupí, e-nheẽ yepé rupiawa çepiçara.",
+ "translate-export-not-supported": "Sinimukanhẽẽgawa umeẽ ukaripé kití aĩtá ĩti xiari'ana.",
+ "translate-export-format-notsupported": "Umeẽ ukaripé kití rupiawa munũgara'ana aé ĩti umutumuwara pareçawa ayurí rupí.",
+ "translate-export-group-too-large": "Pareçawa ayurí upurawakawara waçú retãna. E-purawaka yepé pareçawa ayurí urikú waá xií rupí $1 {{PLURAL:$1|pareçawa|pareçawa'etá}} ã e-nheẽ mumurikuaçara irũ ukaripuãmu pirí imũgetaçawa'etá.",
+ "translate-checks-parameters": "{{PLURAL:$2|Ti aikué kuá retewa|Ti aikué kuá retewa'etá}}:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "{{PLURAL:$2|Kuá retewa sikuawaĩma|Kuá retewa'etá sikuawaĩma}}:\n<strong>$1</strong>",
+ "translate-checks-balance": "Aikué {{PLURAL:$2|yepé mburimuakaçawa yaweĩma|$2 mburimuakaçawa'etá yaweĩma}}: <strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "{{PLURAL:$2|Kuá link urikú yepé iwaçuçawa|Kuá $2 link-etá taurikú iwaçuçawa'etá}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "{{PLURAL:$2|Kuá link|Kuá $2 link-etá}} aĩtá ti taurikú:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "Çurimũgawa upurú <nowiki>{{PLURAL:}}</nowiki>, mari sinimukanhẽẽgawa aé ĩti upurú yawá.",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki> aite kuá umeẽ'ana yepé {{PLURAL:$1|rupiawa rupí|$1 rupiawa'etá rupí}} Mari {{PLURAL:$2|anhũtu yepé rupiawa|$2 rupiawa'etá}} aĩtá taumutumuwara (umuçaká uikú 0= açui 1= rupiawa'etá).",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki> urikú rupiawa'etá mumukũiwara. <nowiki>{{PLURAL:$1|pytuna|pytuna}}</nowiki> yawá uyupuraĩ uikú umupinima'ana mayé <nowiki>{{PLURAL:$1|pytuna}}</nowiki>.",
+ "translate-checks-gettext-plural-missing": "Kuá sinimukanhẽẽgawa umurú urikú <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-unsupported": "Kuá pareçawa ti umutumú <nowiki>{{PLURAL:GETTEXT|}}</nowiki>.",
+ "translate-checks-gettext-plural-count": "<nowiki>{{PLURAL:GETTEXT|}}</nowiki> ukaripuãmu çupi rupí $1 {{PLURAL:$1|forma plural|rupiawa'etá píriwara}}. Kuiriwara $2 {{PLURAL:$2|rupiawa píriwara|rupiawa'etá píriwara aĩtá}} taumeẽ'ana.",
+ "translate-checks-smartformat-plural-missing": "Kuá sinimukanhẽẽgawa umurú urikú píriwara mutirikawara $1 rupí.",
+ "translate-checks-smartformat-plural-unsupported": "Kuá pareçawa ti umutumú píriwara mutirikawara $1 rupí.",
+ "translate-checks-smartformat-plural-count": "Papaçawa çatãbikaĩma rupiawa'etá píriwara çui <strong>$3</strong> upé. Yawá umurú urikú $1 {{PLURAL:$1|rupiawa píriwara|rupiawa'etá píriwara}}. Kuiriwara $2 {{PLURAL:$2|rupiawa píriwara|rupiawa'etá píriwara aĩtá}} taumeẽ'ana.",
+ "translate-checks-unicode-plural-missing": "Kuá sinimukanhẽẽgawa umurú urikú <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-unsupported": "Kuá pareçawa ti umutumú <nowiki>{{PLURAL|}}</nowiki>.",
+ "translate-checks-unicode-plural-invalid": "Rupiawa píriwara'etá taumurú tauçurimũ mayé $1. Kuá sinimukanhẽẽgawa urikú $2.",
+ "translate-checks-pagename": "Rera mukũçawa amũrupí çurimũgawa çui",
+ "translate-checks-format": "Kuá sinimukanhẽẽgawa ti ukaçakiri çurimũgawa ã urikú yepé miira çepiĩma: $1",
+ "translate-checks-parametersnotequal": "Retewa papaçawa uwaçẽmu'ana {{PLURAL:$1|$1}}; Yawá umurú uikú {{PLURAL:$2|$2}}.",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> yawá uikú murupiawa'ana yawiçawa rupí.",
+ "translate-checks-fudforum-syntax": "E-purú <nowiki>$1</nowiki> ruê rupí <nowiki>$2</nowiki> kuá mumuekawaçawa çui.",
+ "translate-checks-newline-missing-start": "{{PLURAL:$1|Ti aikué $1 tita|Ti aikué $1 tita'etá}} nimũ piçaçú çui sinimukanhẽẽgawa yupirũgawa rupí.",
+ "translate-checks-value-not-present": "Sinimukanhẽẽgawa umurú uikú {{PLURAL:$1|1=|yepé kuá çepi'etá çui yawé:}} $1.",
+ "translate-checks-replacement": "E-purú $2 ruê rupí $1 çui.",
+ "translate-checks-empty": "Sinimukanhẽẽgawa'etá taurikú ne yepé maã aé pupé ã aĩtá kuaye taurikú anhũtu mukũçawa'etá murutĩga aĩtá tau ĩti xiari'ana.",
+ "translate-pref-editassistlang": "Nhẽẽga'etá pitimũgara:",
+ "prefs-translate": "Sinimukanhẽẽgawa purawakaçawa'etá",
+ "translate-pref-editassistlang-bad": "Kamakaçawa urikú nhẽẽga yupinimaçawa'etá çepiĩma:\n<nowiki>$1</nowiki>.",
+ "right-translate": "Umurupiawa upurú rupí sinimukanhẽẽgawa interface",
+ "action-translate": "umurupiawa upurú rupí sinimukanhẽẽgawa interface",
+ "right-translate-manage": "Umumurikuá pareçawa ayuri'etá",
+ "action-translate-manage": "umumurikuá pareçawa ayuri'etá",
+ "right-translate-import": "Ururi ukaripé çui sinimukanhẽẽgawa'etá yumũdianaĩma",
+ "action-translate-import": "Ururi ukaripé çui sinimukanhẽẽgawa'etá yumũdianaĩma",
+ "right-translate-messagereview": "Uamũmaã sinimukanhẽẽgawa'etá",
+ "action-translate-messagereview": "Uamũmaã sinimukanhẽẽgawa'etá",
+ "right-translate-groupreview": "Usinimuka workflow status pareçawa ayuri'etá çui",
+ "action-translate-groupreview": "Usinimuka workflow status pareçawa ayuri'etá çui",
+ "translate-rcfilters-translations": "Sinimukanhẽẽgawa'etá",
+ "translate-rcfilters-translations-only-label": "Sinimukanhẽẽgawa'etá",
+ "translate-rcfilters-translations-only-desc": "Sinimuka'etá sinimukanhẽẽgawara sowa'etá kití.",
+ "translate-rcfilters-translations-filter-label": "Ne yepé sinimukanhẽẽgawa",
+ "translate-rcfilters-translations-filter-desc": "Panhẽ sinimuka'etá aĩtá ĩti sinimukanhẽẽgawa'etá.",
+ "translate-rcfilters-translations-site-label": "Rituya pareçawa'etá",
+ "translate-rc-translation-filter": "Uyumuá sinimukanhẽẽgawa'etá:",
+ "translate-rc-translation-filter-no": "Ti umunhã ne yepé maã",
+ "translate-rc-translation-filter-only": "Umukameẽ sinimukanhẽẽgawa'etá anhũtu",
+ "translate-rc-translation-filter-filter": "Ti umukameẽ sinimukanhẽẽgawa'etá",
+ "translate-rc-translation-filter-site": "Sinimuka'etá pareçawa rituya kití anhũtu",
+ "translationstats": "Sinimukanhẽẽgawa papaçawa'etá",
+ "translate-stats-edits": "Murupiawa'etá",
+ "translate-stats-users": "Sinimukanhẽẽgara'etá",
+ "translate-stats-registrations": "Mukatiuruçawa'etá",
+ "translate-stats-reviews": "Amũmaãgawa'etá",
+ "translate-stats-reviewers": "Muamũmaãgara'etá",
+ "translate-statsf-intro": "Ĩdé remurú remunhã papaçawa'etá pupuya kuá purãdupawa çui.\nPanhẽ çepiçawa'etá taurikú ipuawa waçú açui mirĩ.",
+ "translate-statsf-options": "Karawika purawakaçawa'etá",
+ "translate-statsf-width": "Turuçuçawa pixel rupí:",
+ "translate-statsf-height": "Iwaté pixel rupí:",
+ "translate-statsf-days": "Pukuça mukũçawa ara'etá rupí:",
+ "translate-statsf-start": "Data yupirũgawa:",
+ "translate-statsf-scale": "Xikara:",
+ "translate-statsf-scale-years": "Akayu'etá",
+ "translate-statsf-scale-months": "Yarika'etá",
+ "translate-statsf-scale-weeks": "Pumukũiara'etá",
+ "translate-statsf-scale-days": "Ara'etá",
+ "translate-statsf-scale-hours": "Kuriwara'etá",
+ "translate-statsf-count": "Kuauçawa'etá:",
+ "translate-statsf-count-edits": "Murupiawa'etá papaçawa",
+ "translate-statsf-count-users": "Sinimukanhẽẽgara'etá pukuarewara",
+ "translate-statsf-count-registrations": "Puruçara'etá piçaçú",
+ "translate-statsf-count-reviews": "Sinimukanhẽẽgawa amũmaãgawa'etá",
+ "translate-statsf-count-reviewers": "Amũmaãgara'etá",
+ "translate-statsf-language": "Nhẽẽga yupinimaçawa'etá taumuyauka'ana mara'í rupí:",
+ "translate-statsf-group": "Ayurí yupinimaçawa'etá taumuyauka mara'í rupí:",
+ "translate-statsf-submit": "Umaã tenũdé",
+ "translate-statsf-unknown-error": "Umereça'ana yepé iwaçuçawa sikuawaĩma.",
+ "translate-statsf-error-message": "Umereçe'ana yepé yawiçawa uyumũdi ramẽ karawika: $1",
+ "translate-statsf-graph-alt-text-info": "Pinimaçá purawakaçawa sinimukanhẽẽgawa papaçawa'etá arã tauikú kuauçawa'etá kamakaçawa ywira.",
+ "translate-statsf-alt-text": "Yawá papaçawa pinimaçá rupí sinimukanhẽẽgawa papaçawa'etá arã.",
+ "translate-statsf-embed": "Yupinimaçawa umumpaurá pirí papaçawa'etá karawika sinimukanhẽẽgawa çui amũ sowa'etá upé.",
+ "translate-tag-page-desc": "Sinimukanhẽẽgawa wiki sowa [[$2|$1]] çuiwara $3 ($4) rupí.",
+ "translate-sidebar-alltrans": "Amũ nhẽẽga'etá rupí",
+ "translations": "Panhẽ sinimukanhẽẽgawa'etá",
+ "translations-summary": "E-mburi yepé pareçawa rera umukameẽ pirí panhẽ sinimukanhẽẽgawa'etá yukuawa.",
+ "translate-translations-no-message": "\"$1\" ti yepé pareçawa umurú waá uikú sinimukanhẽẽgawara",
+ "translate-translations-none": "Ti aikué sinimukanhẽẽgawa'etá \"$1\" kití",
+ "translate-translations-count": "Yawaçẽmu {{PLURAL:$1|yepé sinimukanhẽẽgawa|$1 sinimukanhẽẽgawa'etá}}.",
+ "translate-translations-fieldset-title": "Pareçawa",
+ "translate-translations-messagename": "Rera:",
+ "translate-translations-project": "Mumuekawaçawa:",
+ "translate-translations-including-no-param": "Katuçawa rupí, e-munũgara yepé pareçawa kabé çepiwara sowa'í retewa upé",
+ "translate-translations-history-short": "h",
+ "languagestats": "Nhẽẽga papaçawa'etá",
+ "languagestats-summary": "Kuá sowa umukameẽ sinimukanhẽẽgawa papaçawa'etá panhẽ pareçawa ayuri'etá arã yepé nhẽẽga çui.",
+ "messagegroupstats-summary": "Kuá sowa umukameẽ pareçawa ayurí papaçawa'etá.",
+ "languagestats-stats-for": "Sinimukanhẽẽgawa papaçawa'etá $1 kití ($2).",
+ "languagestats-recenttranslations": "sinimukanhẽẽgawa'etá kuiriwara",
+ "translate-langstats-incomplete": "Yepé yepé papaçawa'etá kuá sowa çui tauikú tereçemuĩma. Remukuiriwara sowa ukaripuãmu pirí kuauçawa'etá píri.",
+ "translate-langstats-expand": "umuçaĩ",
+ "translate-langstats-collapse": "umuatuká",
+ "translate-langstats-expandall": "umuçaĩ panhẽ",
+ "translate-langstats-collapseall": "umuatuká panhẽ",
+ "translate-language-code": "Nhẽẽga yupinimaçawa",
+ "translate-language-code-field-name": "Nhẽẽga yupinimaçawa:",
+ "translate-suppress-complete": "Umumiwara opaĩ rupí pareçawa ayuri'etá sinimukanhẽẽgawara",
+ "translate-ls-noempty": "Umumiwara opaĩ rupí pareçawa ayuri'etá sinimukanhẽẽgawaraĩma",
+ "translate-language": "Nhẽẽga",
+ "translate-total": "Pareçawa'etá",
+ "translate-untranslated": "Sinimukanhẽẽgawaraĩma",
+ "translate-percentage-complete": "Tereçemupawa",
+ "translate-percentage-fuzzy": "Mukuiriwaraĩma",
+ "translate-percentage-proofread": "Amũmaãgawara",
+ "translate-languagestats-overall": "Panhẽ pareçawa'etá ayuri'etá muaka",
+ "translate-ls-submit": "Umukameẽ papaçawa'etá",
+ "translate-ls-column-group": "Pareçawa ayurí",
+ "translate-mgs-pagename": "Pareçawa ayurí papaçawa'etá",
+ "translate-mgs-fieldset": "Mukameẽgawa purawakaçawa'etá",
+ "translate-mgs-group": "Pareçawa ayurí:",
+ "translate-mgs-nocomplete": "Ti umukameẽ nhẽẽga'etá taurikú waá sinimukanhẽẽgawa'etá tereçemu",
+ "translate-mgs-noempty": "Ti umukameẽ nhẽẽga'etá aĩtá taurikú ĩti ne yepé sinimukanhẽẽgawa",
+ "translate-mgs-submit": "Umukameẽ papaçawa'etá",
+ "translate-mgs-column-language": "Nhẽẽga",
+ "translate-mgs-totals": "Panhẽ $1 {{PLURAL:$1|nhẽẽga|nhẽẽga'etá}} taumuaka",
+ "translate-mgs-invalid-group": "Kuá ayurí ĩdé renheẽ'ana reçé ($1) ti aikué.",
+ "translate-mgs-nothing": "Ne yepé kuauçawa papaçawa'etá yururewara pirí.",
+ "supportedlanguages": "Nhẽẽga'etá pukuarewara",
+ "supportedlanguages-summary": "Kuá sowa umukameẽ yepé nhẽẽga pukuarewa kamakaçawa {{SITENAME}} upé, rera'etá irũ panhẽ sinimukanhẽẽgara'etá taumuraki waá nhaã nhẽẽga rupí. Yepé sinimukanhẽẽgara rera umukameẽ uikú waçú retãna, '''yawá upurari unheẽ waá nhaã sinimukanhẽẽgara upitumũ'ana ã upitimũ siya sinimukanhẽẽgawa'etá irũ'''. nimũiwira pinimaçawa yepé mupikaçawa murakiçawa'etá kuiriwara puruçara çuiwara.",
+ "supportedlanguages-colorlegend": "Titapawa pinimaçawa çui: sinimukanhẽẽgawa kaçakiriari aé umunhã'ana $1 ara tenũdé.",
+ "supportedlanguages-portallink": "[$1] $2 - $3",
+ "supportedlanguages-portallink-nocldr": "[$1] $2",
+ "supportedlanguages-sqlite-error": "Yãdé ĩti yaxiari SQLite",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|Sinimukanhẽẽgara}}|Sinimukanhẽẽgara'etá}}: $1",
+ "supportedlanguages-recenttranslations": "sinimukanhẽẽgawa'etá kuiriwara",
+ "supportedlanguages-count": "$1 {{PLURAL:$1|nhẽẽga|nhẽẽga'etá}} opaĩ rupí.",
+ "supportedlanguages-activity": "$1: $2 {{PLURAL:$2|murupiawa|murupiawa'etá}}, murupiawa kaçakiriari aite kuá $3 {{PLURAL:$3|ara|ara'etá}} tenũdé",
+ "translate-supportedlanguages-cached": "Kuá kuauçawa ukarawata'ana cache upé $1 tenũdé.",
+ "translate-activelanguages-invalid-code": "Nhẽẽga yupinimaçawa \"$1\" sikuawaĩma ã ti xiariwara sinimukanhẽẽgawa'etá pirí.",
+ "abusefilter-edit-builder-vars-translate-source-text": "Pinimaçá yupirũgawa sinimukanhẽẽgawa yepeçawa çui",
+ "abusefilter-edit-builder-vars-translate-target-language": "Nhẽẽga Target sinimukanhẽẽgawa pirí",
+ "translate-jssti-add": "Umburipíri kamakaçawa kití",
+ "managemessagegroups": "Pareçawa ayurí mumurikuaçawa",
+ "translate-smg-notallowed": "Ĩdé ti rerikú xiariçawa umunhã pirí kuá munhãgawa.",
+ "translate-smg-nochanges": "Ti aikué sinimuka'etá taumunhã kití.",
+ "translate-smg-submit": "Umeẽ sinimuka'etá umunhã pirí",
+ "translate-smg-submitted": "Pareçawa'etá çurimũgawa aĩtá tausó mukuiriwara'ana tauikú. Sinimuka'etá tausó taumunhã'ana tauikú piraĩna mukũiwara rupí.",
+ "translate-smg-submitted-with-failure": "Mukuiriwara uikú pareçawa {{PLURAL:$1|çurimũgawa|çurimũgawa'etá}} umukatuĩma'ana aĩtá {{PLURAL:$1|ayurí|ayuri'etá}} rupí - $2. $3",
+ "translate-smg-submitted-others-processing": "Pareçawa çurimũgawa'etá amũ ayuri'etá kití aĩtá taumuraki tauikú piraĩna mukũiwara rupí.",
+ "translate-smg-more": "Yawá usó aikué sinimuka'etá píri umunhã pirí umeẽ ariré kuá sinimuka'etá.",
+ "translate-smg-left": "Pareçawa wiki upé",
+ "translate-smg-right": "Ikeçawa sinimuka'etá",
+ "translate-smg-rename-select": "Upurawaka",
+ "translate-smg-rename-cancel": "Umuamunika",
+ "translate-smg-rename-search": "Usikári pareçawa'etá yawé",
+ "translate-smg-rename-select-err": "Katuçawa rupí, repurawaka yepé pareçawa amũçenũi pirí",
+ "translate-smg-rename-no-msg": "Ne yepé pareçawa usó uwaçẽmu'ana.",
+ "translate-smg-rename-new": "Umburipíri mayé piçaçú...",
+ "translate-smg-rename-rename": "Umburipíri mayé amũçenũi çui...",
+ "translate-smg-rename-dialog-title": "Upurawaka amũçenũiçawa yawé $1 kití",
+ "translate-smg-changeset-modified": "Sinimuka ayurí aite kuá sinimuka'ana amũ puruçara ã amũ wataçawa. Nesinimuka'etá aĩtá tau ĩti taumurú taumuyukuau'ana, nhaãçé aĩtá taumurú taumutirika sinimuka'etá. E-mukuiriwara sowa umaã pirí sinimuka'etá kuiriwara píri.",
+ "translate-smg-no-groups-in-sync": "Ti aikué ayuri'etá kuiriwara mũgaturuçawa rupí",
+ "translate-smg-strong-sync-help": "Pitimũgawa",
+ "translate-smg-groups-in-sync": "Ayuri'etá kuiriwara mũgaturuçawa rupí",
+ "translate-smg-groups-in-sync-list": "Ayurí kamakaçawa kuiriwara aĩtá taumuraki tauikú piraĩna mukũiwara rupí:",
+ "translate-smg-groups-with-error-title": "Ayuri'etá tauriku'ana waá yawiçawa'etá aĩtá tauiku'ana taukaripuãmu mũgaturuçawa ramẽ",
+ "translate-smg-groups-with-error-desc": "Ayurí kamakaçawa açui ne pareçawa'etá tauriku'ana waá yawiçawa'etá aĩtá tauiku'ana taukaripuãmu mũgaturuçawa ramẽ:",
+ "translate-smg-group-with-error-summary": "$1 {{PLURAL:$1|pareçawa|pareçawa'etá}} yawiçawa'etá irũ:",
+ "translate-smg-group-message-action-history": "Marãduwapawa",
+ "translate-smg-group-action-resolve": "Umuçãgau mayé çuaxarawara",
+ "translate-smg-group-sync-error-warn": "Kuá ayurí ukaripuãmu yepé yawiçawa mũgaturuçawa ramẽ. Katuçawa rupí, e-muçatãbika yawiçawa'etá ĩdé remunhã munhãgawa'etá kuá ayurí rupí tenũdé.",
+ "translate-smg-group-message-tag-outdated": "Mukuiriwaraĩma",
+ "translate-smg-group-message-tag-rename": "Amũçenũi",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|Tag|Tag'etá}}:",
+ "translate-smg-group-message-message-content": "Pupepura'etá",
+ "translate-smg-group-message-message-target": "Karipuãmuçara",
+ "translate-smg-group-message-message-replacement": "Murekuyaçawa:",
+ "translate-smg-group-message-message-other-langs": "Amũ nhẽẽga'etá:",
+ "translate-smg-loading": "Yumũdi uikú...",
+ "translate-smg-unknown-error": "Umereçe'ana yepé yawiçawa sikuawaĩma yãdé yamuraki ramẽ neyurureçawa.",
+ "translate-manage-import-diff": "Pareçawa $1 | Munhãgawa'etá: $2",
+ "translate-manage-import-new": "Pareçawa piçaçú $1",
+ "translate-manage-import-deleted": "Pareçawa umuçaka'ana $1",
+ "translate-manage-action-import": "Ururi ukaripé çui",
+ "translate-manage-action-conflict": "Ururi ukaripé çui açui umuçãgau sinimukanhẽẽgawa'etá amũmaãgawa kití",
+ "translate-manage-action-ignore": "Umãtuwa",
+ "translate-manage-action-fuzzy": "Ururi ukaripé çui açui umuçãgau sinimukanhẽẽga'etá amũmaãgawa pirí",
+ "translate-manage-action-rename-fuzzy": "Uamũçenũiçawa açui sinimukanhẽẽgawa'etá umuçaĩgawara",
+ "translate-manage-action-rename": "Amũçenũi",
+ "translate-manage-action-ignore-change": "Umãtuwa sinimukanhẽẽgawa sinimuka",
+ "translate-manage-nochanges": "Ti aikué sinimuka'etá pareçawa çurimũgawa'etá kuá ayurí çui.",
+ "translate-manage-nochanges-other": "Ti umereçe'ana sinimuka'etá kuá nhẽẽga çupé. E-purú link iwira uywiri pirí pukatua maãgawa kuá ayurí çui.",
+ "translate-manage-import-summary": "Ururi uikú ukaripé çui yepé werçawa piçaçú yepé çatari ukaripé çui",
+ "translate-manage-import-rename-summary": "Uamũçenũiwara ukaripé çatari rupí",
+ "translate-manage-conflict-summary": "Ururi uikú ukaripé çui yepé werçawa piçaçú yepé çatari ukaripé çui.\nKatuçawa rupí, e-maãkatú.",
+ "translate-manage-submit": "Umunhã",
+ "translate-manage-intro-other": "Iwira uikú sinimuka'etá kamakaçawa sinimukanhẽẽgawa çui nhẽẽga $1 rupí.\nKatuçawa rupí, e-amũmaã kuá sinimuka'etá açui e-purawaka yepé munhãgawa mukuiriwara biũ arã.\nĨdé repurari ramẽ remãtú sinimuka'etá, kuá munhãgawa anhũtu arawara.",
+ "translate-manage-import-ok": "Ururi'ana ukaripé çui: $1",
+ "translate-manage-import-done": "Ururi ukaripé çui tereçemu!",
+ "translate-manage-empty-content": "Pupepura urikú ne yepé maã pupé",
+ "translate-manage-key-reused": "Kuá pareçawa aikué wã wiki upé. E-maãkatú ĩdé repuru'ana wã kuá kabé açui upurú uikú aé amũ ruê açui ti rekuau yawá reçé.",
+ "translate-manage-source-message-not-found": "Pareçawa çurimũgawa ti uwaçẽmu'ana",
+ "importtranslations": "Ururi ukaripé çui sinimukanhẽẽgawa'etá",
+ "translate-import-from-local": "Upload mukatiuruçawa retãmawara:",
+ "translate-import-load": "Umeẽ mukatiuruçawa",
+ "translate-import-err-dl-failed": "Ti puderiwá ukaripuãmu mukatiuruçawa: $1",
+ "translate-import-err-ul-failed": "Mukatiuruçawa upload ti uyũre'ana",
+ "translate-import-err-invalid-title": "Kuá mukatiuruçawa rera <nowiki>$1</nowiki> çepiĩma.",
+ "translate-import-err-no-such-file": "Mukatiuruçawa <nowiki>$1</nowiki> ti aikué ã ti usó umeẽ'ana.",
+ "translate-import-err-stale-group": "Pareçawa ayurí kuá mukatiuruçawa uyuri çui ti aikué.",
+ "translate-import-err-no-headers": "Yawá ti yepé mukatiuruçawa Gettext muçaçawa Translate rupiawa yumẽ : ti uyumuru'ana uçurimũ ayurí açui nhẽẽga pinimaça rera çuiwara.",
+ "translate-js-support-unsaved-warning": "Ĩdé rerikú sinimukanhẽẽgawa'etá muyukuauĩma.",
+ "translate-gs-pos": "Retãma",
+ "translate-gs-code": "Yupinimaçawa",
+ "translate-gs-continent": "Retãmuçú",
+ "translate-gs-speakers": "Nhẽẽgara'etá",
+ "translate-gs-score": "Score",
+ "translate-gs-multiple": "Siya",
+ "translate-gs-count": "Paparipawa",
+ "translate-gs-total": "Opaĩ rupí",
+ "translate-gs-avgscore": "Score miterupé",
+ "translate-documentation-language": "Pareçawa mukatiurupawa",
+ "translate-searchprofile": "Sinimukanhẽẽgawa'etá",
+ "translate-searchprofile-tooltip": "Usikári panhẽ sinimukanhẽẽgawa'etá rupí",
+ "translate-searchprofile-note": "Sikáriçawa purawakaçawa'etá píri aĩtá tauikú yukuawa [$1 sinimukanhẽẽgawa sikáriçawa] irũ.",
+ "translate-search-languagefilter": "Uyumuá nhẽẽga rupí:",
+ "translate-search-nofilter": "Ti uyumuá",
+ "log-name-translationreview": "Sinimukanhẽẽgawa amũmaãgawa mukatiuruçawa",
+ "log-description-translationreview": "Mukatiuruçawa panhẽ amũmaãgawara'etá çui taumunhã'ana sinimukanhẽẽgawa'etá açui sinimukanhẽẽgawa ayuri'etá upé.",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|amũmaãgawara}} sinimukanhẽẽgawa $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|usinimuka'ana}} sinimukanhẽẽgawa'etá status $3 çui $4 arã, $6 çui $7 arã",
+ "group-translate-sandboxed": "Sinimukanhẽẽgara'etá munhãmu",
+ "group-translate-sandboxed-member": "{{GENDER:$1|sinimukanhẽẽgara munhãmu}}",
+ "right-translate-sandboxmanage": "Umumurikuá puruçara'etá retãma'etá makuana upé",
+ "action-translate-sandboxmanage": "umumurikuá puruçara'etá retãma'etá makuana upé",
+ "right-translate-sandboxaction": "Umunhã munhãgawa'etá tauxiari'ana yuçaãgawa'etá retãma puruçara'etá arã",
+ "action-translate-sandboxaction": "Umunhã munhãgawa'etá tauxiari'ana yuçaãgawa'etá retãma puruçara'etá",
+ "translate-workflow-state-": "(ti çurimũ uikú)",
+ "translate-workflowstatus": "Status: $1",
+ "translate-workflow-set-doing": "Çurimũ uikú...",
+ "translate-workflow-autocreated-summary": "Sowa munhãgawa irupĩtuwarupí muraki status kuĩkaçawa pirí $1",
+ "translate-stats-workflow": "Status",
+ "translate-workflowgroup-label": "Muraki kuĩkaçawa status",
+ "translate-workflowgroup-desc": "Kuá pareçawa ayurí umukameẽ muraki yana status sinimukanhẽẽgawa'etá çui. Status aĩtá tauçurimũ'ana yumukaturuçawa mutirikawara rupí $wgTranslateWorkflowStates.",
+ "translate-dynagroup-recent-label": "Sinimukanhẽẽgawa'etá kuiriwara",
+ "translate-dynagroup-recent-desc": "Kuá pareçawa ayurí umukameẽ panhẽ sinimukanhẽẽgawa'etá kuiriwara kuá nhẽẽga çupé. Upuruwara siya ruê'etá amũmaãgawa muraki'etá rupí.",
+ "translate-dynagroup-additions-label": "Mburipíriçawa'etá kuiriwara",
+ "translate-dynagroup-additions-desc": "Kuá ayurí umukameẽ pareçawa'etá piçaçú açui usinimuka'ana.",
+ "translate-msggroupselector-projects": "Pareçawa ayuri'etá",
+ "translate-msggroupselector-search-placeholder": "Usikári ayuri'etá",
+ "translate-msggroupselector-search-all": "Panhẽ",
+ "translate-msggroupselector-search-recent": "Kuiriwara",
+ "translate-msggroupselector-view-subprojects": "$1 {{PLURAL:$1|subayurí|subayuri'etá}}",
+ "tux-languageselector": "Usinimukanhẽẽga kití",
+ "tux-select-target-language": "Nhẽẽga Target sinimukanhẽẽgawa pirí",
+ "tux-tab-all": "Panhẽ",
+ "tux-tab-untranslated": "Sinimukanhẽẽgawaraĩma",
+ "tux-tab-outdated": "Mukuiriwaraĩma",
+ "tux-tab-translated": "Sinimukanhẽẽgawara",
+ "tux-tab-unproofread": "Ti uamũmaãgawara",
+ "tux-edit": "Umurupiawa",
+ "tux-status-optional": "Purawakawara",
+ "tux-status-fuzzy": "Mukuiriwaraĩma",
+ "tux-status-proofread": "Amũmaãgawara",
+ "tux-status-translated": "Sinimukanhẽẽgawara",
+ "tux-status-saving": "Umuyukuau uikú...",
+ "tux-status-unsaved": "Ti umuyukuau'ana",
+ "tux-save-unknown-error": "Umereçé yepé yawiçawa sikuawaĩma.",
+ "tux-editor-placeholder-documentation": "Umburipíri pareçawa dokumẽtoçawa",
+ "tux-editor-placeholder-language": "Nesinimukanhẽẽgawa $1 rupí",
+ "tux-editor-editsummary-placeholder": "Muyatukaçawa purawakawara",
+ "tux-editor-paste-original-button-label": "Umuesika çatari pinimaçá",
+ "tux-editor-discard-changes-button-label": "Uyukapá sinimuka'etá",
+ "tux-editor-save-button-label": "Umuyukuau sinimukanhẽẽgawa",
+ "tux-editor-skip-button-label": "Upuíri amũkití",
+ "tux-editor-cancel-button-label": "Umuamunika",
+ "tux-editor-confirm-button-label": "Umuereté sinimukanhẽẽgawa",
+ "tux-editor-proofread-button-label": "Umuçãgau mayé amũmaãgawara",
+ "tux-editor-shortcut-info": "E-kamirika \"$1\" umuyawé pirí açui usó pareçawa amũkití, \"$2\" upuíri pirí, \"$4\" umeẽ yepé muyatukaçawa pirí ã e-kamirika açui rexiari ne puãma kamirikawara \"$3\" ararupí umaã pirí amũ papata'etá.",
+ "tux-editor-edit-desc": "Umurupiawa dokumẽtoçawa",
+ "tux-editor-add-desc": "Umburipíri dokumẽtoçawa",
+ "tux-editor-suggestions-title": "Imũgetaçawa'etá",
+ "tux-editor-in-other-languages": "Amũ nhẽẽga'etá rupí",
+ "tux-editor-need-more-help": "Repuraĩ pitimũgawa píri?",
+ "tux-editor-ask-help": "Repurãdú kuauçawa píri",
+ "tux-editor-tm-match": "$1% yawé",
+ "tux-notices-more": "{{PLURAL:$1|$1 píri}}",
+ "tux-notices-hide": "umumiwara",
+ "tux-editor-save-failed": "Umereçé yepé yawiçawa ĩdé remuyukuau nesinimukanhẽẽgawa ramẽ: $1",
+ "tux-editor-n-uses": "puruwara $1 {{PLURAL:$1|ruê|ruê'etá}}",
+ "tux-editor-message-desc-more": "Umaã píri",
+ "tux-editor-message-desc-less": "Umaã xií",
+ "tux-editor-clear-translated": "Umumiwara sinimukanhẽẽgawara'etá",
+ "tux-editor-proofreading-mode": "Uamũmaã",
+ "tux-editor-translate-mode": "Kamakaçawa",
+ "tux-editor-proofreading-hide-own-translations": "Umumiwara nesinimukanhẽẽgawa'etá",
+ "tux-editor-proofreading-show-own-translations": "Umukameẽ nesinimukanhẽẽgawa'etá",
+ "tux-proofread-action-tooltip": "Umuçãgau mayé amũmaãgawara",
+ "tux-proofread-edit-label": "Umurupiawa",
+ "tux-editor-page-mode": "Sowa",
+ "tux-editor-outdated-notice": "Kuá sinimukanhẽẽgawa upurú upuraĩ yepé mukuiriwaraçawa.",
+ "tux-editor-outdated-notice-diff-link": "Umukameẽ amũrupiçawa'etá",
+ "tux-editor-doc-editor-placeholder": "Pareçawa mukatiurupawa",
+ "tux-editor-doc-editor-save": "Umuyukuau dokumẽtopawa",
+ "tux-editor-doc-editor-cancel": "Umuamunika",
+ "tux-messagetable-more-messages": "$1 {{PLURAL:$1|pareçawa píri|pareçawa'etá píri}}",
+ "tux-messagetable-loading-messages": "Uyumũdi uikú {{PLURAL:$1|pareçawa|pareçawa'etá}}.",
+ "tux-message-filter-placeholder": "Yumuaçawa kamakaçawa",
+ "tux-message-filter-result": "Yawaçẽmu $1 {{PLURAL:$1|çuaxara|çuaxara'etá}} \"$2\" reçé",
+ "tux-message-filter-advanced-button": "Sikáriçawa sotenũdewa",
+ "tux-message-filter-optional-messages-label": "Pareçawa'etá purawakawara",
+ "tux-proofread-translated-by-self": "Sinimukanhẽẽgawara ĩdé rupí",
+ "tux-empty-list-all": "Kuá pareçawa ayurí urikú ne yepé maã",
+ "tux-empty-list-all-guide": "E-purawaka yepé pareçawa ayurí amũrupí usinimukanhẽẽga pirí",
+ "tux-translate-page-no-such-group": "<strong>Ti aikué ayurí umupika'ana.</strong> E-purawaka yepé pareçawa ayurí amũrupí.",
+ "tux-empty-list-translated": "Ne yepé pareçawa sinimukanhẽẽgawara",
+ "tux-empty-list-translated-guide": "Ĩdé remurú repitimũ resinimukanhẽẽga rupí",
+ "tux-empty-list-translated-action": "Usinimukanhẽẽga",
+ "tux-empty-no-messages-to-display": "Ne yepé pareçawa umukameẽ pirí.",
+ "tux-empty-there-are-optional": "Aikué pareçawa'etá purawakawara aĩtá ĩti taumukameẽ'ana kamakaçawa rupí",
+ "tux-empty-show-optional-messages": "Umukameẽ pareçawa'etá purawakawara",
+ "tux-empty-no-outdated-messages": "Ne yepé mukuiriwaraĩma pareçawa",
+ "tux-empty-nothing-to-proofread": "Ne yepé maã uamũmaã pirí",
+ "tux-empty-you-can-help-providing": "Ĩdé remurú repitimũ umeẽ rupí sinimukanhẽẽgawa'etá piçaçú",
+ "tux-empty-nothing-new-to-proofread": "Ne yepé maã piçaçú uamũmaã pirí",
+ "tux-empty-you-can-review-already-proofread": "Remurú reamũmaã sinimukanhẽẽgawa'etá amũ puruçara'etá tauamũmaã'ana wã.",
+ "tux-empty-list-other": "Ne yepé maã usinimukanhẽẽga pirí",
+ "tux-empty-list-other-guide": "Ĩdé remurú repitimũ reamũmaã sinimukanhẽẽgawa'etá aikué waá",
+ "tux-empty-list-other-action": "Uamũmaã sinimukanhẽẽgawa'etá",
+ "tux-empty-list-other-link": "Umukameẽ panhẽ pareçawa'etá",
+ "tux-editor-close-tooltip": "Usikĩdá",
+ "tux-editor-expand-tooltip": "Umuçaĩ",
+ "tux-editor-collapse-tooltip": "Umuatuká",
+ "tux-editor-message-tools-show-editor": "Umukameẽ wiki murupiawaçara rupí",
+ "tux-editor-message-tools-history": "Marãduwapawa",
+ "tux-editor-message-tools-delete": "Umuçaká",
+ "tux-editor-message-tools-translations": "Panhẽ sinimukanhẽẽgawa'etá",
+ "tux-editor-message-tools-linktothis": "Link kuá pareçawa kití",
+ "tux-editor-loading": "Yumũdi uikú...",
+ "tux-editor-loading-failed": "Umereçé yepé iwaçuçawa yumũdi uikú ramẽ sinimukanhẽẽgawa pitimũgawa'etá: $1",
+ "translate-search-more-languages-info": "$1 píri {{PLURAL:$1|nhẽẽga|nhẽẽga'etá}}",
+ "translate-statsbar-tooltip": "$1% sinimukanhẽẽgawara, $2% amũmaãgawara",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% sinimukanhẽẽgawara, $2% amũmaãgawara, $3% mukuiriwaraĩma",
+ "translate-search-more-groups-info": "$1 píri {{PLURAL:$1|ayurí|ayuri'etá}}",
+ "translate-syntax-error": "Sinimukanhẽẽgawa urikú sintaxe yawiçawa'etá",
+ "tux-session-expired": "Ĩdé ti reikú yumũdiana. Ayãnã, e-iké yepé ukena'í amũrupí. Purawakawara rupí, e-munhã yepé yupinimaça sinimukanhẽẽgawa'etá çui aite kuá ĩti karawata'ana, e-munhã mukatiuruçawa, e-iwiri kuá sowa kití açui remburi sinimukanhẽẽgawa'etá amũ ruê.",
+ "tux-nojs": "Kuá sowa ti umuraki ti aikué JavaScript ramẽ. JavaScript yurarewa uikú, ti umuraki'ana ã kuá browser ti umutumuwara.",
+ "specialpages-group-translation": "Sinimukanhẽẽgawa",
+ "content-model-translate-messagebundle": "Pareçawa pupekatawa sinimukanhẽẽgawara",
+ "translate-messagebundle-validation-error": "Pareçawa pupekatawa çepiĩma: $1",
+ "translate-messagebundle-error-invalid-array": "Pareçawa pupekatawa umurú yepé maã JSON uikú. Nũgara kuiriwara: $1",
+ "translate-messagebundle-error-key-empty": "Pareçawa'etá pupekatawa ti remurú rerikú yepé kabé urikú ne yepé maã pupé",
+ "translate-messagebundle-error-key-too-long": "Nhẽẽga kabé \"$1\" waçú retãna",
+ "translate-messagebundle-error-key-invalid-characters": "Kabé \"$1\" urikú tita'etá aĩtá waá ĩti tauxiariwara",
+ "translate-messagebundle-error-invalid-value": "Kabé \"$1\" ti urikú string çepi",
+ "translate-messagebundle-error-empty-value": "Kabé \"$1\" ti urikú yepé çepí",
+ "translate-messagebundle-group-description": "Pareçawa'etá yepé pareçawa pupekatawa çui tauçurimũ'ana sowa [[$2|$1]] rupí."
+}
diff --git a/Translate/i18n/core/yue.json b/Translate/i18n/core/yue.json
new file mode 100644
index 00000000..ceb0297f
--- /dev/null
+++ b/Translate/i18n/core/yue.json
@@ -0,0 +1,80 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hello903hello",
+ "Ktchankt",
+ "Moon0319",
+ "Obonggi",
+ "Roy17",
+ "Shinjiman",
+ "Sun8908",
+ "Yueman"
+ ]
+ },
+ "translate": "翻譯",
+ "translate-desc": "翻譯MediaWiki同其它嘢嘅[[Special:Translate|特別頁]]",
+ "translate-taction-translate": "翻譯",
+ "translate-taction-proofread": "複審",
+ "translate-taction-lstats": "話嘅統計",
+ "translate-taction-export": "匯出",
+ "translate-taction-disabled": "呢個wiki唔畀做呢個動作。",
+ "translate-page-no-such-language": "所指定嘅語言唔正確。",
+ "translate-page-no-such-group": "所指定嘅組唔正確。",
+ "translate-page-settings-legend": "自定喜好",
+ "translate-page-group": "組",
+ "translate-page-language": "話",
+ "translate-page-limit": "上限",
+ "translate-page-limit-option": "每一版有$1個信息",
+ "translate-submit": "擷取",
+ "translate-page-navigation-legend": "導航",
+ "translate-page-showing": "顯示緊由 $1到$2 ,夾埋 $3 個信息。",
+ "translate-page-showing-all": "顯示緊 $1個信息。",
+ "translate-page-showing-none": "無信息可顯示。",
+ "translate-next": "下一版",
+ "translate-prev": "上一版",
+ "translate-page-description-legend": "有關嗰組嘅信息",
+ "translate-page-edit": "改",
+ "translate-optional": "(可選)",
+ "translate-ignored": "(已略過)",
+ "translate-edit-title": "改「$1」",
+ "translate-edit-definition": "信息定義",
+ "translate-edit-contribute": "貢獻",
+ "translate-edit-no-information": "<em>呢句信息無註解。\n如果你知道呢句信息響邊同埋點用,你可以加註解去呢個信息去幫其他嘅譯者。</em>",
+ "translate-edit-information": "呢句信息嘅資料 ($1)",
+ "translate-edit-warnings": "有關未譯好嘅警告",
+ "translate-edit-tmmatch-source": "翻譯原文:$1",
+ "translate-edit-tmmatch": "$1%符合",
+ "translate-edit-nopermission": "你要有翻譯權限先譯到啲訊息。",
+ "translate-edit-askpermission": "攞權限",
+ "exporttranslations": "匯出翻譯",
+ "translate-export-form-format": "格式",
+ "translate-checks-parameters": "下面{{PLURAL:$2|嘅參數|啲參數}}係無用到嘅: <strong>$1</strong>",
+ "translate-checks-balance": "插入字嘅數量唔均等: <strong>$1</strong>",
+ "translate-checks-links": "下面嘅連結有問題: <strong>$1</strong>",
+ "translate-checks-plural": "用 <nowiki>{{PLURAL:}}</nowiki> 嘅解解釋但係翻譯無用到。",
+ "languagestats": "話嘅統計",
+ "translate-percentage-fuzzy": "過咗時",
+ "translate-mgs-totals": "夾埋有$1個文",
+ "translate-gs-multiple": "多種語言",
+ "translate-documentation-language": "訊息說明文檔",
+ "translate-msggroupselector-projects": "訊息組",
+ "translate-msggroupselector-search-all": "全部",
+ "tux-languageselector": "譯做",
+ "tux-tab-all": "全部",
+ "tux-tab-untranslated": "未譯",
+ "tux-tab-outdated": "過咗時",
+ "tux-tab-translated": "譯咗",
+ "tux-edit": "改",
+ "tux-status-fuzzy": "過咗時",
+ "tux-status-translated": "譯咗",
+ "tux-status-saving": "儲存緊……",
+ "tux-save-unknown-error": "發生未知嘅錯誤。",
+ "tux-editor-placeholder-language": "$1嘅翻譯",
+ "tux-editor-save-button-label": "儲存翻譯",
+ "tux-editor-skip-button-label": "跳去下個",
+ "tux-editor-add-desc": "加解",
+ "tux-editor-clear-translated": "收埋譯咗嘅",
+ "tux-editor-translate-mode": "一覽",
+ "tux-messagetable-more-messages": "重有$1句{{PLURAL:$1|訊息}}",
+ "translate-search-more-languages-info": "重有 $1 種{{PLURAL:$1|話|話}}"
+}
diff --git a/Translate/i18n/core/za.json b/Translate/i18n/core/za.json
new file mode 100644
index 00000000..3f4c191c
--- /dev/null
+++ b/Translate/i18n/core/za.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "唐吉訶德的侍從"
+ ]
+ },
+ "translate-langstats-expand": "mbe",
+ "translate-langstats-collapse": "rwt",
+ "tux-editor-expand-tooltip": "Mbe",
+ "tux-editor-collapse-tooltip": "Rwt"
+}
diff --git a/Translate/i18n/core/zgh.json b/Translate/i18n/core/zgh.json
new file mode 100644
index 00000000..3de3979d
--- /dev/null
+++ b/Translate/i18n/core/zgh.json
@@ -0,0 +1,42 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amara-Amaziɣ",
+ "Brahim-essaidi",
+ "Hakim1bal",
+ "Mdb897"
+ ]
+ },
+ "translate": "ⵙⵙⵓⵖⵍ",
+ "translate-desc": "[[Special:Translate|ⵜⴰⵙⵏⴰ ⵉⵥⵍⵉⵏ]] ⵃⵎⴰ ⴰⵙⵓⵖⵍ ⵏ ⵎⵉⴷⵢⴰⵡⵉⴽⵉ ⴷ ⵓⴳⴳⴰⵔ",
+ "translate-fuzzybot-desc": "ⵡⴰⴷ ⵉⴳⴰ ⴰⵏⴳⵔⴰⵡ ⵉⵣⵍⵉⵏ ⵉⵜⵜⵡⴰⵙⵙⵎⵔⵙ ⴳ ⵎⵉⴷⵢⴰⵡⵉⴽⵉ [https://www.mediawiki.org/wiki/Extension:Translate Translate extension] ⵉⵜⵜⵡⴰⵙⵎⵔⵙ ⵃⵎⴰ ⴰⵏⵀⵍⵍⴰ ⵏ ⵜⵙⵓⵖⴰⵍ.\nⴰⵎⵉⴹⴰⵏ ⴰⴷ ⵉⴳⴰ ⵙⴳ ⵓⵖⴰⵡⴰⵙ ⵏ ⵎⵉⴷⵢⴰⵡⵉⴽⵉ ⴷ ⵓⵔ ⵉⴳⵉ ⵡⵉⵏ ⵃⵜⵜⴰ ⴽⵔⴰ ⵏ ⵓⵏⵙⵙⵎⵔⵙ.",
+ "translate-taskui-export-to-file": "ⵙⵙⵓⴼⵖ ⴳ ⵜⵍⵖⴰ ⵜⴰⵥⵖⵓⵕⴰⵏⵜ",
+ "translate-taskui-export-as-po": "ⵙⵙⵓⴼⵖ ⵃⵎⴰ ⴰⵙⵓⵖⵍ ⴱⵔⵔⴰ ⵏ ⵓⵣⴷⴰⵢ",
+ "translate-taction-translate": "ⵙⵙⵓⵖⵍ",
+ "translate-taction-proofread": "ⵣⵣⵔⵉ",
+ "translate-taction-lstats": "ⵉⵙⵏⵎⴽⵜⴰⵏ ⵏ ⵜⵓⵜⵍⴰⵢⵜ",
+ "translate-taction-mstats": "ⵉⵙⵏⵎⴽⵜⴰⵏ ⵏ ⵉⴳⵔⴰⵡⵏ ⵏ ⵜⵓⵣⵉⵏⵉⵏ",
+ "translate-taction-export": "ⵙⵙⵓⴼⵖ",
+ "translate-page-settings-legend": "ⵜⵉⵙⵖⴰⵍ",
+ "translate-page-language": "ⵜⵓⵜⵍⴰⵢⵜ",
+ "translate-page-limit": "ⴰⵡⵜⵜⵓ",
+ "right-translate": "ⵙⵏⴼⵍ ⵙ ⵓⵏⴳⵔⵓⴷⵎ ⵏ ⵓⵙⵓⵖⵍ",
+ "translate-statsf-count-registrations": "ⵉⵏⵙⵙⵎⵔⵙⵏ ⵉⵎⴰⵢⵏⵓⵜⵏ",
+ "translate-translations-project": "ⴰⵙⵏⴼⴰⵕ:",
+ "translate-language": "ⵜⵓⵜⵍⴰⵢⵜ",
+ "translate-ls-column-group": "ⵜⴰⵔⴰⴱⴱⵓⵜ ⵏ ⵜⵓⵣⵉⵏⵉⵏ",
+ "translate-mgs-pagename": "ⵉⵙⵏⵎⴽⵜⴰⵏ ⵏ ⵜⵔⵓⴱⴱⴰ ⵏ ⵜⵓⵣⵉⵏⵉⵏ",
+ "translate-mgs-group": "ⵜⴰⵔⴰⴱⴱⵓⵜ ⵏ ⵜⵓⵣⵉⵏⵉⵏ:",
+ "translate-mgs-column-language": "ⵜⵓⵜⵍⴰⵢⵜ",
+ "managemessagegroups": "ⴰⵙⵡⵓⴷⴷⵓ ⵏ ⵜⵔⴰⴱⴱⵓⵜ ⵏ ⵜⵓⵣⵉⵏⵉⵏ",
+ "translate-manage-import-new": "ⵜⵓⵣⵉⵏⵜ ⵜⴰⵎⴰⵢⵏⵓⵜ $1",
+ "translate-manage-import-summary": "ⴰⵙⴽⵛⵎ ⵏ ⵜⵓⵏⵖⵉⵍⵜ ⵜⴰⵎⴰⵢⵏⵓⵜ ⵙⴳ ⵓⵙⴰⴳⵎ ⴰⴱⵔⵔⴰⵏⵉ",
+ "translate-documentation-language": "ⴰⵏⵜⴰⵎ ⵏ ⵜⵓⵣⵉⵏⵜ",
+ "translate-dynagroup-additions-desc": "ⵜⴰⴳⵔⴰⵡⵜ ⴰⴷ ⴰⵔ ⵜⵙⵎⴰⵍ ⵜⵉⵎⵢⴰⵣⴰⵏⵉⵏ ⵜⵉⵎⴰⵢⵏⵓⵜⵉⵏ ⴷ ⵜⵉⴷ ⵉⵜⵜⵡⴰⵙⵏⴼⵍⵏ",
+ "translate-msggroupselector-projects": "ⵜⴰⵔⴰⴱⴱⵓⵜ ⵏ ⵜⵓⵣⵉⵏⵉⵏ",
+ "translate-msggroupselector-search-all": "ⴰⴽⴽⵯ",
+ "tux-languageselector": "ⵙⵙⵓⵖⵍ ⵙ",
+ "tux-empty-list-all": "ⵜⴰⵔⴰⴱⴱⵓⵜ ⵏ ⵜⵓⵣⵉⵏⵉⵏ ⴰ ⵜⵔⵉⵡ",
+ "tux-empty-list-translated-action": "ⵙⵙⵓⵖⵍ",
+ "tux-empty-you-can-help-providing": "ⵜⵣⵎⵔⴷ ⴰⴷ ⵜⴰⵡⵙⴷ ⴳ ⵓⵎⵔⵏⵉⵡ ⵏ ⵜⵙⵓⵖⴰⵍ ⵜⵉⵎⴰⵢⵏⵓⵜⵉⵏ"
+}
diff --git a/Translate/i18n/core/zh-hans.json b/Translate/i18n/core/zh-hans.json
new file mode 100644
index 00000000..8b291750
--- /dev/null
+++ b/Translate/i18n/core/zh-hans.json
@@ -0,0 +1,477 @@
+{
+ "@metadata": {
+ "authors": [
+ "A Chinese Wikipedian",
+ "Alexsh",
+ "Anakmalaysia",
+ "Bencmq",
+ "Chenxiaoqino",
+ "Dimension",
+ "Diskdance",
+ "Duolaimi",
+ "Fengchao",
+ "Gaoxuewei",
+ "GuoPC",
+ "Gzdavidwong",
+ "Hmgrmb",
+ "Hudafu",
+ "Hydra",
+ "Hzy980512",
+ "Jimmy xu wrk",
+ "LNDDYL",
+ "Lakejason0",
+ "Li3939108",
+ "Liangent",
+ "Liuxinyu970226",
+ "Mark85296341",
+ "Mys 721tx",
+ "PhiLiP",
+ "Sahran",
+ "Shirayuki",
+ "Shizhao",
+ "Shuiwater",
+ "Si109",
+ "Slboat",
+ "Stang",
+ "Supaiku",
+ "Tr jason",
+ "Tranve",
+ "VulpesVulpes825",
+ "Winston Sung",
+ "Wmr",
+ "Wmr89502270",
+ "Xiaomingyan",
+ "Xiplus",
+ "Yfdyh000",
+ "Zazzzz",
+ "乌拉跨氪",
+ "列维劳德",
+ "铁桶"
+ ]
+ },
+ "translate": "翻译",
+ "translate-extensionname": "翻译(Translate)",
+ "translate-desc": "用于翻译MediaWiki和其他软件界面消息的[[Special:Translate|特殊页面]]",
+ "translate-fuzzybot-desc": "这是由MediaWiki[https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate 翻译扩展]使用的特殊系统账户,用于维护翻译。此账户是MediaWiki软件的一部分,不由任何用户所拥有。",
+ "translate-taskui-export-to-file": "以原始格式导出",
+ "translate-taskui-export-as-po": "导出离线翻译文件",
+ "translate-taskui-export-as-csv": "以 CSV 格式导出",
+ "translate-export-csv-message-title": "翻译消息标题",
+ "translate-export-csv-definition": "消息定义",
+ "translate-taction-translate": "翻译",
+ "translate-taction-proofread": "复核",
+ "translate-taction-lstats": "语言统计",
+ "translate-taction-mstats": "消息组统计",
+ "translate-taction-export": "导出",
+ "translate-taction-disabled": "该操作在本wiki停用。",
+ "translate-page-no-such-language": "指定语言无效。",
+ "translate-page-no-such-group": "指定消息组无效。",
+ "translate-page-disabled": "本消息组该语言的翻译已经停用。原因:\n\n<em>$1</em>",
+ "translate-language-disabled": "至该语言的翻译已停用。",
+ "translate-page-settings-legend": "设置",
+ "translate-page-group": "组",
+ "translate-page-language": "语言",
+ "translate-page-limit": "限制",
+ "translate-page-limit-option": "每页$1{{PLURAL:$1|条消息}}",
+ "translate-submit": "获取",
+ "translate-page-navigation-legend": "导航",
+ "translate-page-showing": "显示第$1条至第$2条消息,共$3个消息。",
+ "translate-page-showing-all": "显示$1{{PLURAL:$1|条消息}}。",
+ "translate-page-showing-none": "没有可以显示的消息。",
+ "translate-next": "下一页",
+ "translate-prev": "上一页",
+ "translate-page-description-legend": "关于本消息组的消息",
+ "translate-page-description-hasoptional": "本消息组包含可选消息。可选消息应该只在您的语言有特殊需要,如不使用空格或音译合适名称时才被翻译。$1",
+ "translate-page-description-hasoptional-open": "显示可选消息。",
+ "translate-page-edit": "编辑",
+ "translate-optional": "(可选)",
+ "translate-ignored": "(已忽略)",
+ "translate-edit-title": "编辑“$1”",
+ "translate-edit-definition": "消息定义",
+ "translate-edit-contribute": "贡献",
+ "translate-edit-no-information": "<em>这条消息没有文档。如果您知道这条消息用于何处或如何使用,您可以通过添加文档至这条消息以帮助其他译者。</em>",
+ "translate-edit-information": "关于消息的资料($1)",
+ "translate-edit-warnings": "关于不完整翻译的警告",
+ "translate-edit-tmmatch-source": "翻译原文:$1",
+ "translate-edit-tmmatch": "$1%匹配",
+ "translate-edit-nopermission": "您需要有翻译权限才能翻译消息。",
+ "translate-edit-askpermission": "获取权限",
+ "exporttranslations": "导出翻译",
+ "translate-export-form-format": "格式",
+ "translate-export-invalid-format": "请指定一个有效格式。",
+ "translate-export-not-supported": "翻译导出不被支持。",
+ "translate-export-format-notsupported": "指定的导出格式不被消息组支持。",
+ "translate-export-group-too-large": "选择的消息组太大。选择少于$1{{PLURAL:$1|个消息}}的消息组或联系翻译管理员寻求建议。",
+ "translate-checks-parameters": "以下$2个参数未使用:<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "以下$2个参数未知:<strong>$1</strong>",
+ "translate-checks-balance": "有一组数目不均等的{{PLURAL:$2|括号}}:<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "以下$2个链接有问题:<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "以下$2个链接丢失:<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "定义使用了<nowiki>{{PLURAL:}}</nowiki>,但翻译未使用。",
+ "translate-checks-plural-forms": "<nowiki>{{PLURAL:}}</nowiki>被赋予了$1种形式,但只有$2种形式被支持(排除0=和1=形式)。",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki>的尾部形式重复。<nowiki>{{PLURAL:$1|sheep|sheep}}</nowiki>应该写为<nowiki>{{PLURAL:$1|sheep}}</nowiki>。",
+ "translate-checks-gettext-plural-missing": "这个翻译必须有<nowiki>{{PLURAL:GETTEXT|}}</nowiki>。",
+ "translate-checks-gettext-plural-unsupported": "此消息不支持<nowiki>{{PLURAL:GETTEXT|}}</nowiki>。",
+ "translate-checks-gettext-plural-count": "<nowiki>{{PLURAL:GETTEXT|}}</nowiki>只接受$1个{{PLURAL:$1|复数形式}}。 目前给出了$2个 {{PLURAL:$2|复数形式}}。",
+ "translate-checks-smartformat-plural-missing": "这个翻译必须在变量$1上有复数形式。",
+ "translate-checks-smartformat-plural-unsupported": "此消息不支持变量$1的复数形式。",
+ "translate-checks-smartformat-plural-count": "<strong>$3</strong>中的复数形式数量不正确。它必须有$1个{{PLURAL:$1|复数形式}}。目前给出了$2个{{PLURAL:$2|复数形式}}。",
+ "translate-checks-unicode-plural-missing": "这个翻译必须有<nowiki>{{PLURAL|}}</nowiki>。",
+ "translate-checks-unicode-plural-unsupported": "此消息不支持<nowiki>{{PLURAL|}}</nowiki>。",
+ "translate-checks-unicode-plural-invalid": "复数形式应定义为$1。此翻译包含$2。",
+ "translate-checks-pagename": "定义中的命名空间被更改",
+ "translate-checks-format": "该翻译没有遵循定义或有无效句法:$1",
+ "translate-checks-escape": "以下转义{{PLURAL:$2|字符}}可能是意外的:<strong>$1</strong>。{{PLURAL:$4|合法的转义字符有:}}$3。",
+ "translate-checks-parametersnotequal": "共计{{PLURAL:$1|$1}}个参数,应为{{PLURAL:$2|$2}}个。",
+ "translate-checks-malformed": "<nowiki>$1</nowiki>格式不正确。",
+ "translate-checks-fudforum-syntax": "请在该项目使用<nowiki>$1</nowiki>而不是<nowiki>$2</nowiki>。",
+ "translate-checks-newline-missing-start": "翻译开头缺少$1{{PLURAL:$1|个换行符}}。",
+ "translate-checks-newline-missing-end": "在翻译的末尾缺少$1{{PLURAL:$1|个换行符}}。",
+ "translate-checks-newline-extra-start": "在翻译的开头{{PLURAL:$1|有}}$1个额外的换行符。",
+ "translate-checks-newline-extra-end": "翻译结束时{{PLURAL:$1|有}}$1个额外换行符。",
+ "translate-checks-value-not-present": "翻译必须等于{{PLURAL:$1|1=|以下值之一:}} $1。",
+ "translate-checks-replacement": "用$2代替$1。",
+ "translate-checks-empty": "不允许没有内容或只有空格的翻译。",
+ "translate-pref-editassistlang": "辅助语言:",
+ "prefs-translate": "翻译选项",
+ "translate-pref-editassistlang-help": "请用逗号分隔语言代码列表。这些语言的消息翻译会在您翻译的时显示。默认语言列表基于您的语言。",
+ "translate-pref-editassistlang-bad": "列表中有无效语言代码:<nowiki>$1</nowiki>。",
+ "right-translate": "使用翻译界面编辑",
+ "action-translate": "使用翻译界面编辑",
+ "right-translate-manage": "管理消息组",
+ "action-translate-manage": "管理消息组",
+ "right-translate-import": "导入离线翻译",
+ "action-translate-import": "导入离线翻译",
+ "right-translate-messagereview": "复核翻译",
+ "action-translate-messagereview": "复核翻译",
+ "right-translate-groupreview": "更改消息组工作流状态",
+ "action-translate-groupreview": "更改消息组工作流状态",
+ "translate-rcfilters-translations": "翻译",
+ "translate-rcfilters-translations-only-label": "翻译",
+ "translate-rcfilters-translations-only-desc": "对翻译页面的更改。",
+ "translate-rcfilters-translations-filter-label": "非翻译",
+ "translate-rcfilters-translations-filter-desc": "所有非翻译更改。",
+ "translate-rcfilters-translations-site-label": "网站消息",
+ "translate-rcfilters-translations-site-desc": "MediaWiki命名空间中的网站消息自定义。",
+ "translate-rc-translation-filter": "过滤翻译:",
+ "translate-rc-translation-filter-no": "不过滤",
+ "translate-rc-translation-filter-only": "仅显示翻译",
+ "translate-rc-translation-filter-filter": "滤除翻译",
+ "translate-rc-translation-filter-site": "仅网站消息的更改",
+ "translationstats": "翻译统计",
+ "translate-stats-edits": "编辑",
+ "translate-stats-users": "译者",
+ "translate-stats-registrations": "注册",
+ "translate-stats-reviews": "复核",
+ "translate-stats-reviewers": "复核者",
+ "translate-statsf-intro": "你可以用该表格生成简单的统计。所有值都有上下限。",
+ "translate-statsf-options": "图表选项",
+ "translate-statsf-width": "宽度(像素):",
+ "translate-statsf-height": "高度(像素):",
+ "translate-statsf-days": "时间(天):",
+ "translate-statsf-start": "开始日期:",
+ "translate-statsf-scale": "间隔大小:",
+ "translate-statsf-scale-years": "年",
+ "translate-statsf-scale-months": "月",
+ "translate-statsf-scale-weeks": "周",
+ "translate-statsf-scale-days": "天",
+ "translate-statsf-scale-hours": "小时",
+ "translate-statsf-count": "测量:",
+ "translate-statsf-count-edits": "编辑数",
+ "translate-statsf-count-users": "活跃译者",
+ "translate-statsf-count-registrations": "新用户",
+ "translate-statsf-count-reviews": "翻译复核",
+ "translate-statsf-count-reviewers": "复核者",
+ "translate-statsf-language": "逗号分隔的语言代码列表:",
+ "translate-statsf-group": "逗号分隔的消息组代码列表:",
+ "translate-statsf-submit": "预览",
+ "translate-statsf-unknown-error": "出现未知错误。",
+ "translate-statsf-error-message": "加载图表时出错:$1",
+ "translate-statsf-graph-alt-text-info": "翻译统计的替代文本在下面的数据表中。",
+ "translate-statsf-alt-text": "这是翻译统计的替代文本。",
+ "translate-statsf-embed": "在其他页面上嵌入翻译统计图表的代码。",
+ "translate-tag-page-desc": "wiki页面[[$2|$1]]译自$3($4)的译文。",
+ "translate-sidebar-alltrans": "其他语言",
+ "translations": "所有翻译",
+ "translations-summary": "请在下面输入消息名称以显示所有可用翻译。",
+ "translate-translations-no-message": "“$1”不是可翻译消息",
+ "translate-translations-none": "没有“$1”的翻译",
+ "translate-translations-count": "找到$1个翻译。",
+ "translate-translations-fieldset-title": "消息",
+ "translate-translations-messagename": "名称:",
+ "translate-translations-project": "项目:",
+ "translate-translations-including-no-param": "请在子页面参数指定有效的消息关键词",
+ "translate-translations-history-short": "历",
+ "languagestats": "语言统计",
+ "languagestats-summary": "本页面显示某种语言所有消息组的翻译统计。",
+ "messagegroupstats-summary": "此页面显示消息组统计。",
+ "languagestats-stats-for": "$1($2)的翻译统计。",
+ "languagestats-recenttranslations": "最近翻译",
+ "translate-langstats-incomplete": "本页面某些统计不完整。请重新加载以获取更多统计。",
+ "translate-langstats-expand": "展开",
+ "translate-langstats-collapse": "折叠",
+ "translate-langstats-expandall": "全部展开",
+ "translate-langstats-collapseall": "全部折叠",
+ "translate-language-code": "语言代码",
+ "translate-language-code-field-name": "语言代码:",
+ "translate-suppress-complete": "隐藏完全翻译的消息组",
+ "translate-ls-noempty": "隐藏完全未翻译的消息组",
+ "translate-language": "语言",
+ "translate-total": "消息数",
+ "translate-untranslated": "未翻译数",
+ "translate-percentage-complete": "完成度",
+ "translate-percentage-fuzzy": "已过时",
+ "translate-percentage-proofread": "已复核",
+ "translate-languagestats-overall": "所有消息组总计",
+ "translate-ls-submit": "显示统计",
+ "translate-ls-column-group": "消息组",
+ "translate-mgs-pagename": "消息组统计",
+ "translate-mgs-fieldset": "显示设置",
+ "translate-mgs-group": "消息组:",
+ "translate-mgs-nocomplete": "不显示完全翻译的语言",
+ "translate-mgs-noempty": "不显示没有任何翻译的语言",
+ "translate-mgs-submit": "显示统计",
+ "translate-mgs-column-language": "语言",
+ "translate-mgs-totals": "所有$1种{{PLURAL:$1|语言}}总计",
+ "translate-mgs-invalid-group": "指定的组$1不存在。",
+ "translate-mgs-nothing": "请求的统计没有内容显示。",
+ "translate-tes-server-error": "无法获取搜索建议",
+ "translate-tes-group-not-found": "没有匹配的结果",
+ "translate-tes-type-to-search": "键入以开始搜索",
+ "supportedlanguages": "活跃的语言",
+ "supportedlanguages-summary": "本页面显示{{SITENAME}}的活跃语言的列表以及工作于每种语言的译者的名称。译者的名称越大,其编辑越多。下划线的颜色表明译者最后活跃距现在的时间。",
+ "supportedlanguages-colorlegend": "颜色说明:最后翻译于$1天前。",
+ "supportedlanguages-sqlite-error": "SQLite不受支持",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|译者}}}}:$1",
+ "supportedlanguages-recenttranslations": "最近翻译",
+ "supportedlanguages-count": "共计$1种语言。",
+ "supportedlanguages-activity": "$1:$2个编辑 - 最后编辑于$3天前",
+ "translate-supportedlanguages-cached": "此消息在$1前已缓存。",
+ "translate-activelanguages-invalid-code": "语言代码“$1”未知或没有为此语言启用翻译。",
+ "abusefilter-edit-builder-vars-translate-source-text": "翻译单元的原始文本",
+ "abusefilter-edit-builder-vars-translate-target-language": "翻译目标语言",
+ "translate-jssti-add": "添加至列表",
+ "managemessagegroups": "消息组管理",
+ "translate-smg-notallowed": "您不被允许执行该操作。",
+ "translate-smg-nochanges": "没有要处理的更改。",
+ "translate-smg-submit": "提交要处理的更改",
+ "translate-smg-submitted": "消息定义已经更新。更改正在后台处理。",
+ "translate-smg-submitted-with-failure": "为以下{{PLURAL:$1|组}}更新消息{{PLURAL:$1|定义}}失败 - $2。$3",
+ "translate-smg-submitted-others-processing": "其他组的消息定义正在后台处理。",
+ "translate-smg-more": "在处理这些更改后这里将会有更多更改。",
+ "translate-smg-left": "wiki中的消息内容",
+ "translate-smg-right": "即将进行的更改",
+ "translate-smg-rename-select": "选择",
+ "translate-smg-rename-cancel": "取消",
+ "translate-smg-rename-search": "搜索匹配的消息...",
+ "translate-smg-rename-select-err": "请选择要重命名的消息",
+ "translate-smg-rename-no-msg": "未找到任何消息。",
+ "translate-smg-rename-new": "添加新的...",
+ "translate-smg-rename-rename": "添加为...的重命名",
+ "translate-smg-rename-dialog-title": "为$1选择匹配的重命名",
+ "translate-smg-changeset-modified": "变更集已被另一个用户或进程修改。您的更改无法发布,因为它可能会覆盖他们的更改。请重新加载页面以查看最新更改。",
+ "translate-smg-no-groups-in-sync": "当前没有同步的群组",
+ "translate-smg-strong-sync-help": "帮助",
+ "translate-smg-groups-in-sync": "正在同步的组",
+ "translate-smg-groups-in-sync-list": "当前正在后台处理的组列表:",
+ "translate-smg-groups-with-error-title": "在同步化时出现错误的例组",
+ "translate-smg-groups-with-error-desc": "在同步时有错误的列表组及其消息:",
+ "translate-smg-group-with-error-summary": "$1个{{PLURAL:$1|消息}}有错误:",
+ "translate-smg-group-message-action-history": "历史",
+ "translate-smg-group-action-resolve": "标记为已解决",
+ "translate-smg-group-sync-error-warn": "该组在同步过程中出现错误。请在处理此组之前修复错误。",
+ "translate-smg-group-message-tag-outdated": "已过时",
+ "translate-smg-group-message-tag-rename": "重命名",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|标签}}:",
+ "translate-smg-group-message-message-content": "内容:",
+ "translate-smg-group-message-message-target": "目标:",
+ "translate-smg-group-message-message-replacement": "替换:",
+ "translate-smg-group-message-message-other-langs": "其他语言:",
+ "translate-smg-loading": "正在加载...",
+ "translate-smg-unknown-error": "处理您的请求时出现未知错误。",
+ "translate-manage-import-diff": "消息$1|操作:$2",
+ "translate-manage-import-new": "新消息$1",
+ "translate-manage-import-deleted": "删除的消息$1",
+ "translate-manage-action-import": "导入",
+ "translate-manage-action-conflict": "导入并标记模糊翻译",
+ "translate-manage-action-ignore": "忽略",
+ "translate-manage-action-fuzzy": "导入并标记模糊翻译",
+ "translate-manage-action-rename-fuzzy": "重命名和模糊翻译",
+ "translate-manage-action-rename": "重命名",
+ "translate-manage-action-ignore-change": "忽略翻译更改",
+ "translate-manage-nochanges": "该消息组的消息定义没有更改。",
+ "translate-manage-nochanges-other": "该语言没有更改。请使用下面的链接返回消息组详情视图。",
+ "translate-manage-inconsistent": "在请求中检测到矛盾。请检查更改并重试。详细信息:$1。",
+ "translate-manage-toolong": "超出最大处理时间$1秒。请重新提交表格以继续处理。",
+ "translate-manage-import-summary": "导入新版本自外部来源",
+ "translate-manage-import-ignore": "跳过消息$1。",
+ "translate-manage-import-rename-summary": "在外部源中重命名",
+ "translate-manage-conflict-summary": "导入新版本自外部来源。请检查。",
+ "translate-manage-submit": "执行",
+ "translate-manage-intro-other": "下面是$1翻译更改列表。请复查更改并选择您想要为每个更新执行的操作。如果您选择忽略更改,该操作只是暂时的。",
+ "translate-manage-import-ok": "已导入:$1",
+ "translate-manage-import-done": "导入完成!",
+ "translate-manage-empty-content": "内容为空",
+ "translate-manage-key-reused": "此消息已存在于wiki中。检查是否意外重复使用旧密钥。",
+ "translate-manage-source-message-not-found": "未找到消息定义",
+ "importtranslations": "导入翻译",
+ "translate-import-from-local": "本地文件上传:",
+ "translate-import-load": "加载文件",
+ "translate-import-err-dl-failed": "无法读取文件:$1",
+ "translate-import-err-ul-failed": "文件上传失败",
+ "translate-import-err-invalid-title": "提供的文件名<nowiki>$1</nowiki>是无效的。",
+ "translate-import-err-no-such-file": "文件<nowiki>$1</nowiki>不存在或未被本地上传。",
+ "translate-import-err-stale-group": "该文件属于的消息组不存在。",
+ "translate-import-err-no-headers": "文件不是翻译扩展程序所需格式的Gettext文件:无法从文件头确定消息组和语言。",
+ "translate-js-support-unsaved-warning": "您有未发布的翻译。",
+ "translate-gs-pos": "位置",
+ "translate-gs-code": "代码",
+ "translate-gs-continent": "洲",
+ "translate-gs-speakers": "使用者数",
+ "translate-gs-score": "得分",
+ "translate-gs-multiple": "多洲",
+ "translate-gs-count": "计数",
+ "translate-gs-total": "总计",
+ "translate-gs-avgscore": "平均得分",
+ "translate-documentation-language": "消息文档",
+ "translate-searchprofile": "翻译",
+ "translate-searchprofile-tooltip": "搜索所有译文",
+ "translate-searchprofile-note": "更多搜索选项可通过[$1 翻译搜索]找到。",
+ "translate-search-languagefilter": "按语言过滤:",
+ "translate-search-nofilter": "无过滤",
+ "log-name-translationreview": "翻译复核日志",
+ "log-description-translationreview": "所有对翻译和消息组的复核的日志。",
+ "logentry-translationreview-message": "$1{{GENDER:$2|复核}}翻译$3",
+ "logentry-translationreview-group": "$1{{GENDER:$2|更改}}$3的$4翻译的状态自$6至$7",
+ "group-translate-sandboxed": "未经批准的译者",
+ "group-translate-sandboxed-member": "{{GENDER:$1|未经批准的译者}}",
+ "right-translate-sandboxmanage": "管理沙盒用户",
+ "action-translate-sandboxmanage": "管理沙盒用户",
+ "right-translate-sandboxaction": "执行允许沙盒化用户的操作",
+ "action-translate-sandboxaction": "执行允许沙盒化用户的操作",
+ "translate-workflow-state-": "(未设置)",
+ "translate-workflowstatus": "状态:$1",
+ "translate-workflow-set-doing": "正在设置...",
+ "translate-workflow-autocreated-summary": "自动创建工作流状态$1的页面",
+ "translate-stats-workflow": "状态",
+ "translate-workflowgroup-label": "工作流状态",
+ "translate-workflowgroup-desc": "本消息组显示翻译工作流状态。该状态以$wgTranslateWorkflowStates配置变量定义。",
+ "translate-dynagroup-recent-label": "最近翻译",
+ "translate-dynagroup-recent-desc": "本消息组显示该语言的所有最近翻译。对复核任务很实用。",
+ "translate-dynagroup-additions-label": "最近添加",
+ "translate-dynagroup-additions-desc": "此消息组显示新出现和已变更的消息。",
+ "translate-msggroupselector-projects": "消息组",
+ "translate-msggroupselector-search-placeholder": "搜索消息组",
+ "translate-msggroupselector-search-all": "所有",
+ "translate-msggroupselector-search-recent": "最近",
+ "translate-msggroupselector-view-subprojects": "$1{{PLURAL:$1|个子消息组}}",
+ "tux-languageselector": "翻译为",
+ "tux-select-target-language": "翻译目标语言",
+ "tux-tab-all": "所有",
+ "tux-tab-untranslated": "未翻译",
+ "tux-tab-outdated": "已过时",
+ "tux-tab-translated": "已翻译",
+ "tux-tab-unproofread": "未复核",
+ "tux-edit": "编辑",
+ "tux-status-optional": "可选",
+ "tux-status-fuzzy": "已过时",
+ "tux-status-proofread": "已复核",
+ "tux-status-translated": "已翻译",
+ "tux-status-saving": "正在发布...",
+ "tux-status-unsaved": "未发布",
+ "tux-save-unknown-error": "发生未知错误。",
+ "tux-editor-placeholder-documentation": "添加消息文档",
+ "tux-editor-placeholder-language": "$1的翻译",
+ "tux-editor-editsummary-placeholder": "说明您做出的更改(可选)",
+ "tux-editor-paste-original-button-label": "粘贴源文本",
+ "tux-editor-discard-changes-button-label": "放弃更改",
+ "tux-editor-save-button-label": "发布翻译",
+ "tux-editor-skip-button-label": "跳至下一条",
+ "tux-editor-cancel-button-label": "取消",
+ "tux-editor-confirm-button-label": "确认翻译",
+ "tux-editor-proofread-button-label": "标记为已复核",
+ "tux-editor-shortcut-info": "按“$1”保存并移动至下一条消息,“$2”跳至下一条,“$4”提供摘要,或按住“$3”来查看其他快捷方式。",
+ "tux-editor-edit-desc": "编辑文档",
+ "tux-editor-add-desc": "添加文档",
+ "tux-editor-suggestions-title": "建议",
+ "tux-editor-latest-updates-title": "最近更新",
+ "tux-editor-all-changes": "所有更改",
+ "tux-editor-in-other-languages": "其他语言",
+ "tux-editor-need-more-help": "需要更多帮助?",
+ "tux-editor-ask-help": "要求更多信息",
+ "tux-editor-tm-match": "$1%匹配",
+ "tux-notices-more": "还有$1个",
+ "tux-notices-hide": "隐藏",
+ "tux-editor-save-failed": "发布翻译失败:$1",
+ "tux-editor-n-uses": "已使用$1次",
+ "tux-editor-message-desc-more": "查看更多",
+ "tux-editor-message-desc-less": "查看更少",
+ "tux-editor-clear-translated": "隐藏已翻译",
+ "tux-editor-proofreading-mode": "复核",
+ "tux-editor-translate-mode": "列表",
+ "tux-editor-proofreading-hide-own-translations": "隐藏您的翻译",
+ "tux-editor-proofreading-show-own-translations": "显示您的翻译",
+ "tux-proofread-action-tooltip": "标记为已复核",
+ "tux-proofread-edit-label": "编辑",
+ "tux-editor-page-mode": "页面",
+ "tux-editor-outdated-notice": "该翻译可能需要更新。",
+ "tux-editor-outdated-notice-diff-link": "显示差异",
+ "tux-editor-doc-editor-placeholder": "消息文档",
+ "tux-editor-doc-editor-save": "发布文档",
+ "tux-editor-doc-editor-cancel": "取消",
+ "tux-messagetable-more-messages": "还有$1条消息",
+ "tux-messagetable-loading-messages": "正在加载$1{{PLURAL:$1|条消息}}…",
+ "tux-message-filter-placeholder": "过滤列表",
+ "tux-message-filter-result": "找到“$2”的$1个结果",
+ "tux-message-filter-advanced-button": "高级搜索",
+ "tux-message-filter-optional-messages-label": "可选消息",
+ "tux-proofread-translated-by-self": "您的翻译",
+ "tux-empty-list-all": "本消息组为空",
+ "tux-empty-list-all-guide": "请选择其他消息组翻译",
+ "tux-translate-page-no-such-group": "<strong>指定的消息组不存在。</strong>请选择其他消息组。",
+ "tux-empty-list-translated": "没有已翻译消息",
+ "tux-empty-list-translated-guide": "您可以帮助翻译",
+ "tux-empty-list-translated-action": "翻译",
+ "tux-empty-no-messages-to-display": "没有要显示的消息。",
+ "tux-empty-there-are-optional": "有可选择消息未显示在列表中",
+ "tux-empty-show-optional-messages": "显示可选消息",
+ "tux-empty-no-outdated-messages": "没有已过时消息",
+ "tux-empty-nothing-to-proofread": "没有要校对的内容",
+ "tux-empty-you-can-help-providing": "您可以帮助提供新翻译",
+ "tux-empty-nothing-new-to-proofread": "没有要校对的新内容",
+ "tux-empty-you-can-review-already-proofread": "您可以校对已被他人校对过的翻译。",
+ "tux-empty-list-other": "没有要翻译的内容",
+ "tux-empty-list-other-guide": "您可以帮助复核已有译文",
+ "tux-empty-list-other-action": "复核译文",
+ "tux-empty-list-other-link": "显示所有消息",
+ "tux-editor-close-tooltip": "关闭",
+ "tux-editor-expand-tooltip": "展开",
+ "tux-editor-collapse-tooltip": "折叠",
+ "tux-editor-message-tools-show-editor": "在wiki编辑器中显示",
+ "tux-editor-message-tools-history": "历史",
+ "tux-editor-message-tools-delete": "删除",
+ "tux-editor-message-tools-translations": "所有翻译",
+ "tux-editor-message-tools-linktothis": "链至此消息的链接",
+ "tux-editor-loading": "正在加载...",
+ "tux-editor-loading-failed": "无法加载翻译辅助工具:$1",
+ "translate-search-more-languages-info": "还有$1种{{PLURAL:$1|语言}}",
+ "translate-statsbar-tooltip": "$1%已翻译,$2%已复核",
+ "translate-statsbar-tooltip-with-fuzzy": "$1%已翻译,$2%已复核,$3%已过时",
+ "translate-search-more-groups-info": "还有$1个{{PLURAL:$1|消息组}}",
+ "translate-syntax-error": "翻译含有语法错误",
+ "tux-session-expired": "您不再保持登录状态。请在单独的选项卡登录。或者制作未保存翻译的副本、登录、返回此页面并再次输入您的翻译。",
+ "tux-nojs": "此页面在没有JavaScript的情况下不能工作。JavaScript已禁用、无法工作或该浏览器不支持JavaScript。",
+ "specialpages-group-translation": "翻译",
+ "content-model-translate-messagebundle": "可翻译的消息包",
+ "translate-messagebundle-validation-error": "无效的消息包:$1",
+ "translate-messagebundle-error-parsing": "解析 JSON 时出错:$1",
+ "translate-messagebundle-error-invalid-array": "消息包必须是JSON对象。有类型$1",
+ "translate-messagebundle-error-key-empty": "消息包不得包含空键",
+ "translate-messagebundle-error-key-too-long": "键“$1”太长",
+ "translate-messagebundle-error-key-invalid-characters": "键“$1”包含不允许的字符",
+ "translate-messagebundle-error-invalid-value": "键“$1”不包含字符串值",
+ "translate-messagebundle-error-empty-value": "键“$1”没有值",
+ "translate-messagebundle-error-metadata-type": "元数据必须是数组。",
+ "translate-messagebundle-error-invalid-sourcelanguage": "源语言代码“$1”不受支持。",
+ "translate-messagebundle-group-description": "于页面[[$2|$1]]定义的消息包的消息。"
+}
diff --git a/Translate/i18n/core/zh-hant.json b/Translate/i18n/core/zh-hant.json
new file mode 100644
index 00000000..27fa1bb6
--- /dev/null
+++ b/Translate/i18n/core/zh-hant.json
@@ -0,0 +1,437 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alexsh",
+ "Anakmalaysia",
+ "Bencmq",
+ "Cwlin0416",
+ "EagerLin",
+ "Gzdavidwong",
+ "Hello903hello",
+ "Justincheng12345",
+ "Kly",
+ "LNDDYL",
+ "Liangent",
+ "Liuxinyu970226",
+ "LuciferianThomas",
+ "Mark85296341",
+ "Oapbtommy",
+ "Reedy",
+ "Shirayuki",
+ "Simon Shek",
+ "Sun8908",
+ "Waihorace",
+ "Wehwei",
+ "Winston Sung",
+ "Wrightbus",
+ "Xiplus",
+ "列维劳德"
+ ]
+ },
+ "translate": "翻譯",
+ "translate-extensionname": "翻譯(Translate)",
+ "translate-desc": "用來翻譯 MediaWiki 以及其他專案訊息的[[Special:Translate|特殊頁面]]",
+ "translate-fuzzybot-desc": "此用於維護翻譯的特殊系統帳號,是由MediaWiki [https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:Translate 翻譯擴充功能]所使用。\n此帳號為MediaWiki軟體裡的一部份,不可由其他任何使用者所持有。",
+ "translate-taskui-export-to-file": "以原始格式匯出",
+ "translate-taskui-export-as-po": "匯出做離線翻譯",
+ "translate-taction-translate": "翻譯",
+ "translate-taction-proofread": "審核",
+ "translate-taction-lstats": "語言統計",
+ "translate-taction-mstats": "訊息群組統計",
+ "translate-taction-export": "匯出",
+ "translate-taction-disabled": "此 Wiki 已關閉此操作功能。",
+ "translate-page-no-such-language": "選擇的語言錯誤。",
+ "translate-page-no-such-group": "選擇的群組錯誤。",
+ "translate-page-disabled": "本群組中此語言的翻譯已停用。\n原因:\n\n<em>$1</em>",
+ "translate-language-disabled": "此語言的翻譯已停用。",
+ "translate-page-settings-legend": "設定",
+ "translate-page-group": "群組",
+ "translate-page-language": "語言",
+ "translate-page-limit": "每頁顯示",
+ "translate-page-limit-option": "每頁顯示 $1 筆訊息",
+ "translate-submit": "擷取",
+ "translate-page-navigation-legend": "導覽",
+ "translate-page-showing": "顯示第 $1 至 $2 筆訊息,共 $3 筆。",
+ "translate-page-showing-all": "顯示 $1 筆訊息。",
+ "translate-page-showing-none": "沒有任何訊息。",
+ "translate-next": "下一頁",
+ "translate-prev": "上一頁",
+ "translate-page-description-legend": "關於該群組的資訊",
+ "translate-page-description-hasoptional": "此訊息群組含有可選填訊息。\n可選填訊息只在您的語言有特殊需求時才需要翻譯 (例如:文中不使用空格或要轉寫成合適的名稱等)。$1",
+ "translate-page-description-hasoptional-open": "顯示可選填訊息。",
+ "translate-page-edit": "編輯",
+ "translate-optional": "(選填)",
+ "translate-ignored": "(已略過)",
+ "translate-edit-title": "編輯 \"$1\"",
+ "translate-edit-definition": "訊息原文",
+ "translate-edit-contribute": "貢獻",
+ "translate-edit-no-information": "<em>此訊息沒有任何說明資訊。\n如果您知道這個訊息使用的地方,您可以增加說明資訊以協助其他翻譯人員。</em>",
+ "translate-edit-information": "關於訊息的資訊 ($1)",
+ "translate-edit-warnings": "未完成翻譯的警告",
+ "translate-edit-tmmatch-source": "翻譯原文:$1",
+ "translate-edit-tmmatch": "$1% 符合",
+ "translate-edit-nopermission": "您需要翻譯權限以翻譯訊息。",
+ "translate-edit-askpermission": "取得權限",
+ "exporttranslations": "匯出翻譯",
+ "translate-export-form-format": "格式",
+ "translate-export-invalid-format": "請指定一個有效的格式。",
+ "translate-export-not-supported": "不支援翻譯匯出功能。",
+ "translate-export-format-notsupported": "該訊息群組不支援指定的匯出格式。",
+ "translate-export-group-too-large": "所挑選的訊息群組太龐大。請挑選少於 $1 {{PLURAL:$1|訊息}}的訊息群組,或是聯絡翻譯管理員來獲取建議。",
+ "translate-checks-parameters": "未使用以下 $2 個參數:\n<strong>$1</strong>",
+ "translate-checks-parameters-unknown": "未定義以下 $2 個參數:\n<strong>$1</strong>",
+ "translate-checks-balance": "不完整的{{PLURAL:$2|括號|括號}}:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links": "以下 $2 個連結有問題:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-links-missing": "缺少以下 $2 個連結:\n<strong><nowiki>$1</nowiki></strong>",
+ "translate-checks-plural": "原文使用的 <nowiki>{{PLURAL:}}</nowiki> 並未被用於翻譯。",
+ "translate-checks-plural-forms": "共有 {{PLURAL:$2|1 種|$2 種}} 表達形式,但 <nowiki>{{PLURAL:}}</nowiki> 只使用了 {{PLURAL:$1|1 種|$1 種}} (不含 0= 和 1= 的形式)。",
+ "translate-checks-plural-dupe": "<nowiki>{{PLURAL:}}</nowiki>在中有重複的表達形式,<nowiki>{{PLURAL:$1|sheep|sheep}}</nowiki> 應寫成 <nowiki>{{PLURAL:$1|sheep}}</nowiki>。",
+ "translate-checks-gettext-plural-missing": "此翻譯必須要有<nowiki>{{PLURAL:GETTEXT|}}</nowiki>。",
+ "translate-checks-gettext-plural-unsupported": "此訊息不支援<nowiki>{{PLURAL:GETTEXT|}}</nowiki>。",
+ "translate-checks-gettext-plural-count": "目前提供有 $2 個{{PLURAL:$2|複數形式}}。<nowiki>{{PLURAL:GETTEXT|}}</nowiki> 接收了 $1 個{{PLURAL:$1|複數形式}}。",
+ "translate-checks-smartformat-plural-missing": "此翻譯必須要有複數變數$1。",
+ "translate-checks-smartformat-plural-unsupported": "此翻譯不支援複數變數$1。",
+ "translate-checks-smartformat-plural-count": "在<strong>$3</strong>有不正確的複數形式數字。這必須要有 $1 個{{PLURAL:$1|複數形式}}。目前指定 $2 個{{PLURAL:$2|複數形式}}。",
+ "translate-checks-unicode-plural-missing": "此翻譯必須要有<nowiki>{{PLURAL|}}</nowiki>。",
+ "translate-checks-unicode-plural-unsupported": "此訊息不支援<nowiki>{{PLURAL|}}</nowiki>。",
+ "translate-checks-unicode-plural-invalid": "Plural 形式應定義成 $1。此翻譯包含著 $2。",
+ "translate-checks-pagename": "命名空間與原文不符",
+ "translate-checks-format": "此翻譯未依照原文或有語法錯誤:$1",
+ "translate-checks-escape": "下列跳脫{{PLURAL:$2|字元}}可能會導致錯誤:<strong>$1</strong>。\n{{PLURAL:$4|有效的跳脫字元是|有效的跳脫字元包含有:}}$3。",
+ "translate-checks-parametersnotequal": "共有 {{PLURAL:$1|$1}} 個參數,應有{{PLURAL:$2|$2}} 個。",
+ "translate-checks-malformed": "<nowiki>$1</nowiki> 格式不正確。",
+ "translate-checks-fudforum-syntax": "在此專案中使用 <nowiki>$1</nowiki> 替代 <nowiki>$2</nowiki>。",
+ "translate-checks-newline-missing-start": "在翻譯的開頭{{PLURAL:$1|有}}缺少著 $1 個換行{{PLURAL:$1|字元}}。",
+ "translate-checks-newline-missing-end": "在翻譯的結尾{{PLURAL:$1|有}}缺少著 $1 個換行{{PLURAL:$1|字元}}。",
+ "translate-checks-newline-extra-start": "在翻譯的開頭{{PLURAL:$1|有}}多出 $1 個換行{{PLURAL:$1|字元}}。",
+ "translate-checks-newline-extra-end": "在翻譯的結尾{{PLURAL:$1|有}}多出 $1 個換行{{PLURAL:$1|字元}}。",
+ "translate-checks-value-not-present": "此翻譯應相同於{{PLURAL:$1|1=|以下值之一:}}$1。",
+ "translate-checks-replacement": "使用$2替代$1。",
+ "translate-checks-empty": "不允許沒有內容或只有空格的翻譯。",
+ "translate-pref-editassistlang": "輔助語言:",
+ "prefs-translate": "翻譯選項",
+ "translate-pref-editassistlang-help": "以逗號分隔語言代碼。\n當您翻譯的時,會隨著顯示這些語言的訊息。\n預設會使用您的語言。",
+ "translate-pref-editassistlang-bad": "清單中的語言代碼無效:\n<nowiki>$1</nowiki>。",
+ "right-translate": "使用翻譯介面編輯",
+ "action-translate": "使用翻譯介面編輯",
+ "right-translate-manage": "管理訊息群組",
+ "action-translate-manage": "管理訊息群組",
+ "right-translate-import": "匯入離線翻譯",
+ "action-translate-import": "匯入離線翻譯",
+ "right-translate-messagereview": "審核翻譯",
+ "action-translate-messagereview": "檢閱翻譯",
+ "right-translate-groupreview": "變更訊息群組的工作流程狀態",
+ "action-translate-groupreview": "變更訊息群組的工作流程狀態",
+ "translate-rcfilters-translations": "翻譯",
+ "translate-rcfilters-translations-only-label": "翻譯",
+ "translate-rcfilters-translations-only-desc": "對已翻譯頁面更改。",
+ "translate-rcfilters-translations-filter-label": "非翻譯",
+ "translate-rcfilters-translations-filter-desc": "非翻譯內容的所有更改。",
+ "translate-rcfilters-translations-site-label": "站台訊息",
+ "translate-rcfilters-translations-site-desc": "在 MediaWiki 命名空間的自訂站台訊息。",
+ "translate-rc-translation-filter": "篩選翻譯:",
+ "translate-rc-translation-filter-no": "無",
+ "translate-rc-translation-filter-only": "只顯示翻譯",
+ "translate-rc-translation-filter-filter": "篩選掉翻譯",
+ "translate-rc-translation-filter-site": "只顯示有更動的網站訊息",
+ "translationstats": "翻譯統計",
+ "translate-stats-edits": "編輯",
+ "translate-stats-users": "翻譯人員",
+ "translate-stats-registrations": "註冊",
+ "translate-stats-reviews": "審核",
+ "translate-stats-reviewers": "複審員",
+ "translate-statsf-intro": "您可以填寫此表格,以產生簡單的統計資料。\n所有值都有上限和下限。",
+ "translate-statsf-options": "圖表選項",
+ "translate-statsf-width": "寬度 (像素):",
+ "translate-statsf-height": "高度 (像素):",
+ "translate-statsf-days": "期間 (天):",
+ "translate-statsf-start": "開始日期:",
+ "translate-statsf-scale": "間隔頻率:",
+ "translate-statsf-scale-years": "年",
+ "translate-statsf-scale-months": "月",
+ "translate-statsf-scale-weeks": "周",
+ "translate-statsf-scale-days": "日",
+ "translate-statsf-scale-hours": "小時",
+ "translate-statsf-count": "測量單位:",
+ "translate-statsf-count-edits": "編輯次數",
+ "translate-statsf-count-users": "活躍的翻譯人員人數",
+ "translate-statsf-count-registrations": "新使用者人數",
+ "translate-statsf-count-reviews": "翻譯審核次數",
+ "translate-statsf-count-reviewers": "複審員人數",
+ "translate-statsf-language": "語言代碼 (以逗號分隔):",
+ "translate-statsf-group": "群組代碼 (以逗號分隔):",
+ "translate-statsf-submit": "預覽",
+ "translate-statsf-unknown-error": "發生不明錯誤。",
+ "translate-statsf-error-message": "載入此圖片時發生錯誤:$1",
+ "translate-statsf-graph-alt-text-info": "用於翻譯統計的替代文字在下方資料表。",
+ "translate-statsf-alt-text": "此為翻譯統計的替代文字。",
+ "translate-statsf-embed": "在其它頁面上內嵌翻譯統計圖的代碼。",
+ "translate-tag-page-desc": "wiki頁面[[$2|$1]]來自$3($4)的翻譯。",
+ "translate-sidebar-alltrans": "其他翻譯",
+ "translations": "所有翻譯",
+ "translations-summary": "在下方輸入訊息名稱以顯示所有可用的翻譯。",
+ "translate-translations-no-message": "「$1」不是可翻譯的訊息",
+ "translate-translations-none": "沒有 \"$1\" 的翻譯",
+ "translate-translations-count": "找到 {{PLURAL:$1|1 筆翻譯|$1 筆翻譯}}。",
+ "translate-translations-fieldset-title": "訊息",
+ "translate-translations-messagename": "訊息名稱:",
+ "translate-translations-project": "專案:",
+ "translate-translations-including-no-param": "請在子頁面參數指定一個有效的訊息關鍵字",
+ "translate-translations-history-short": "歷",
+ "languagestats": "語言統計",
+ "languagestats-summary": "此頁面顯示了所有訊息群組語言翻譯的統計資料。",
+ "messagegroupstats-summary": "此頁顯示訊息組統計。",
+ "languagestats-stats-for": "$1 ($2) 的翻譯統計。",
+ "languagestats-recenttranslations": "最近的翻譯",
+ "translate-langstats-incomplete": "此頁面的某些統計資訊未完整讀取,請重新整理以取得更多統計資訊。",
+ "translate-langstats-expand": "展開",
+ "translate-langstats-collapse": "摺疊",
+ "translate-langstats-expandall": "全部展開",
+ "translate-langstats-collapseall": "全部摺疊",
+ "translate-language-code": "語言代碼",
+ "translate-language-code-field-name": "語言代碼:",
+ "translate-suppress-complete": "隱藏全部已翻譯的訊息群組",
+ "translate-ls-noempty": "隱藏全部未翻譯的訊息群組",
+ "translate-language": "語言",
+ "translate-total": "訊息",
+ "translate-untranslated": "未翻譯",
+ "translate-percentage-complete": "完成度",
+ "translate-percentage-fuzzy": "已過時",
+ "translate-percentage-proofread": "已審核",
+ "translate-languagestats-overall": "所有訊息群組合計",
+ "translate-ls-submit": "顯示統計",
+ "translate-ls-column-group": "訊息群組",
+ "translate-mgs-pagename": "訊息群組統計",
+ "translate-mgs-fieldset": "顯示偏好設定",
+ "translate-mgs-group": "訊息群組:",
+ "translate-mgs-nocomplete": "不顯示全部已翻譯的語言",
+ "translate-mgs-noempty": "不顯示全部未翻譯的語言",
+ "translate-mgs-submit": "顯示統計",
+ "translate-mgs-column-language": "語言",
+ "translate-mgs-totals": "所有$1種{{PLURAL:$1|語言}}合計",
+ "translate-mgs-invalid-group": "指定的群組 $1 不存在。",
+ "translate-mgs-nothing": "所請求的統計資訊沒有任何內容可以顯示。",
+ "translate-tes-group-not-found": "沒有符合的結果",
+ "translate-tes-type-to-search": "輸入以開始搜尋",
+ "supportedlanguages": "有效語言",
+ "supportedlanguages-summary": "本頁顯示在{{SITENAME}}上所有有效語言清單,\n連同翻譯該語言的翻譯人員姓名,\n翻譯人員的姓名越大,代表翻譯人員的編輯貢獻越多,\n底線的顏色用來表示翻譯人員最近活動的狀況。",
+ "supportedlanguages-colorlegend": "色彩圖例:最近一次翻譯於 $1 天前。",
+ "supportedlanguages-sqlite-error": "不支援 SQLite",
+ "supportedlanguages-translators": "{{PLURAL:$2|{{GENDER:$3|翻譯人員}}}}:$1",
+ "supportedlanguages-recenttranslations": "最近的翻譯",
+ "supportedlanguages-count": "總共有 $1 語言",
+ "supportedlanguages-activity": "$1:$2 次編輯 - 最近一次編輯於 $3 天前",
+ "translate-supportedlanguages-cached": "此資訊在$1前被快取。",
+ "translate-activelanguages-invalid-code": "未知的語言代碼「$1」或沒有為此語言啟用翻譯。",
+ "abusefilter-edit-builder-vars-translate-source-text": "翻譯單元的來源文字",
+ "abusefilter-edit-builder-vars-translate-target-language": "翻譯的目標語言",
+ "translate-jssti-add": "新增至清單",
+ "managemessagegroups": "訊息群組管理",
+ "translate-smg-notallowed": "你不允許執行此操作。",
+ "translate-smg-nochanges": "沒有需要處理的更動。",
+ "translate-smg-submit": "送出要處理更動",
+ "translate-smg-submitted": "訊息原文已更新,正在背景執行變更處理。",
+ "translate-smg-submitted-with-failure": "更新以下{{PLURAL:$1|群組}}的定義{{PLURAL:$1|失敗}} - $2。$3",
+ "translate-smg-submitted-others-processing": "其它群組的訊息定義正在背景裡處理。",
+ "translate-smg-more": "送出這些更動後,會有更多更動要處理。",
+ "translate-smg-left": "wiki 內的訊息內容",
+ "translate-smg-right": "發生的更動",
+ "translate-smg-rename-select": "選擇",
+ "translate-smg-rename-cancel": "取消",
+ "translate-smg-rename-search": "搜尋符合的訊息…",
+ "translate-smg-rename-select-err": "請選擇要重新命名的訊息",
+ "translate-smg-rename-no-msg": "沒有找到訊息。",
+ "translate-smg-rename-new": "添加為新的…",
+ "translate-smg-rename-rename": "添加為重新命名…",
+ "translate-smg-rename-dialog-title": "為$1選擇符合的重新命名",
+ "translate-smg-changeset-modified": "變更集已被作者用戶或程序給變更。因您的變更可能會覆蓋掉它們的變更,所以無法發布。請重新載入頁面來查看最新一次的變更內容。",
+ "translate-smg-no-groups-in-sync": "目前沒有正在同步的群組",
+ "translate-smg-strong-sync-help": "說明",
+ "translate-smg-groups-in-sync": "目前正在同步的群組",
+ "translate-smg-groups-in-sync-list": "目前在背景處理的群組清單:",
+ "translate-smg-groups-with-error-title": "同步時出現錯誤的群組",
+ "translate-smg-groups-with-error-desc": "在同步時出現錯誤的群組清單及其訊息:",
+ "translate-smg-group-with-error-summary": "帶有錯誤的 $1 個{{PLURAL:$1|訊息}}:",
+ "translate-smg-group-message-action-history": "歷史",
+ "translate-smg-group-action-resolve": "標記為已解決",
+ "translate-smg-group-message-tag-outdated": "過時",
+ "translate-smg-group-message-tag-rename": "重新命名",
+ "translate-smg-group-message-tag-label": "{{PLURAL:$1|標籤}}:",
+ "translate-smg-group-message-message-content": "內容:",
+ "translate-smg-group-message-message-target": "目標:",
+ "translate-smg-group-message-message-replacement": "替換:",
+ "translate-smg-group-message-message-other-langs": "其他語言:",
+ "translate-manage-import-diff": "訊息 $1 | 操作:$2",
+ "translate-manage-import-new": "新訊息 $1",
+ "translate-manage-import-deleted": "已刪除訊息 $1",
+ "translate-manage-action-import": "匯入",
+ "translate-manage-action-conflict": "匯入並且模糊翻譯",
+ "translate-manage-action-ignore": "忽略",
+ "translate-manage-action-fuzzy": "匯入並且模糊翻譯",
+ "translate-manage-action-rename-fuzzy": "重新命名並且模糊翻譯",
+ "translate-manage-action-rename": "重新命名",
+ "translate-manage-action-ignore-change": "忽略翻譯變更",
+ "translate-manage-nochanges": "此群組中的訊息原文並未做任何變更。",
+ "translate-manage-nochanges-other": "此語言並未做任何更改。\n使用下方連結返回群組的詳細資料檢視頁面。",
+ "translate-manage-inconsistent": "偵測不一致的請求。\n請檢查更動內容,然後再試。\n詳細資訊:$1。",
+ "translate-manage-toolong": "超出處理時間限制 $1 秒。\n請重新送出表單,以繼續進行處理。",
+ "translate-manage-import-summary": "正在從外部來源匯入新版",
+ "translate-manage-import-ignore": "跳過訊息 $1。",
+ "translate-manage-import-rename-summary": "在外部來源重新命名",
+ "translate-manage-conflict-summary": "正在從外部來源匯入新版。\n請檢查。",
+ "translate-manage-submit": "執行",
+ "translate-manage-intro-other": "下列是在 $1 語言的翻譯變更清單。\n請檢查變更,並選擇每一個變更所要執行的動作。\n若您不想變更,您可以選擇忽略。",
+ "translate-manage-import-ok": "已匯入:$1",
+ "translate-manage-import-done": "匯入完成!",
+ "translate-manage-empty-content": "內容為空",
+ "translate-manage-key-reused": "此訊息已存在於本 wiki 中。請檢查舊密鑰的意外重新使用。",
+ "translate-manage-source-message-not-found": "找不到訊息定義",
+ "importtranslations": "匯入翻譯",
+ "translate-import-from-local": "上傳本地檔案:",
+ "translate-import-load": "讀取檔案",
+ "translate-import-err-dl-failed": "無法擷取檔案:\n$1",
+ "translate-import-err-ul-failed": "檔案上傳失敗",
+ "translate-import-err-invalid-title": "無效的檔案名稱 <nowiki>$1</nowiki>。",
+ "translate-import-err-no-such-file": "檔案 <nowiki>$1</nowiki> 不存在或尚未上傳。",
+ "translate-import-err-stale-group": "此檔案所屬的訊息群組不存在。",
+ "translate-import-err-no-headers": "此檔案的 Gettext 翻譯擴充格式並不完整,\n無法從檔頭偵測訊息群組及語言。",
+ "translate-js-support-unsaved-warning": "您有尚未發布的翻譯。",
+ "translate-gs-pos": "位置",
+ "translate-gs-code": "代碼",
+ "translate-gs-continent": "洲別",
+ "translate-gs-speakers": "語言人數",
+ "translate-gs-score": "分數",
+ "translate-gs-multiple": "多種語言",
+ "translate-gs-count": "數量",
+ "translate-gs-total": "總計",
+ "translate-gs-avgscore": "平均分數",
+ "translate-documentation-language": "訊息說明文件",
+ "translate-searchprofile": "翻譯",
+ "translate-searchprofile-tooltip": "搜尋所有翻譯",
+ "translate-searchprofile-note": "[$1 翻譯搜尋] 中有更多可用的搜尋選項。",
+ "translate-search-languagefilter": "依語言篩選:",
+ "translate-search-nofilter": "無",
+ "log-name-translationreview": "翻譯審核日誌",
+ "log-description-translationreview": "所有翻譯與訊息群組的檢閱日誌。",
+ "logentry-translationreview-message": "$1 {{GENDER:$2|已審核}}翻譯 $3",
+ "logentry-translationreview-group": "$1 {{GENDER:$2|變更}} $3 的 $4 翻譯狀態由 $6 變更為 $7",
+ "group-translate-sandboxed": "未核准的翻譯人員",
+ "group-translate-sandboxed-member": "{{GENDER:$1|未核准的翻譯人員}}",
+ "right-translate-sandboxmanage": "管理沙盒使用者",
+ "action-translate-sandboxmanage": "管理沙盒使用者",
+ "right-translate-sandboxaction": "將沙盒使用者列入白名單",
+ "action-translate-sandboxaction": "將沙盒使用者列入白名單",
+ "translate-workflow-state-": "(未設定)",
+ "translate-workflowstatus": "狀態:$1",
+ "translate-workflow-set-doing": "正在設定...",
+ "translate-workflow-autocreated-summary": "自動建立工作流程狀態 $1 的頁面",
+ "translate-stats-workflow": "狀態",
+ "translate-workflowgroup-label": "工作流程狀態",
+ "translate-workflowgroup-desc": "此訊息群組顯示了翻譯的工作流程狀態。\n所有狀態定義在設定檔中的 $wgTranslateWorkflowStates 參數。",
+ "translate-dynagroup-recent-label": "最近翻譯",
+ "translate-dynagroup-recent-desc": "此訊息群組顯示了近期此語言的所有翻譯。\n這對審查工作很有幫助。",
+ "translate-dynagroup-additions-label": "最近新增",
+ "translate-dynagroup-additions-desc": "此訊息群組顯示新的與已變更的訊息。",
+ "translate-msggroupselector-projects": "訊息群組",
+ "translate-msggroupselector-search-placeholder": "搜尋群組",
+ "translate-msggroupselector-search-all": "所有",
+ "translate-msggroupselector-search-recent": "最近",
+ "translate-msggroupselector-view-subprojects": "$1 個{{PLURAL:$1|小組|小組}}",
+ "tux-languageselector": "翻譯成",
+ "tux-tab-all": "所有",
+ "tux-tab-untranslated": "未翻譯",
+ "tux-tab-outdated": "已過時",
+ "tux-tab-translated": "已翻譯",
+ "tux-tab-unproofread": "未審查",
+ "tux-edit": "編輯",
+ "tux-status-optional": "可選填",
+ "tux-status-fuzzy": "已過時",
+ "tux-status-proofread": "已審核",
+ "tux-status-translated": "已翻譯",
+ "tux-status-saving": "發布中…",
+ "tux-status-unsaved": "未發布",
+ "tux-save-unknown-error": "發生不明的錯誤。",
+ "tux-editor-placeholder-language": "$1的翻譯",
+ "tux-editor-editsummary-placeholder": "選填摘要",
+ "tux-editor-paste-original-button-label": "貼上原文",
+ "tux-editor-discard-changes-button-label": "取消修改",
+ "tux-editor-save-button-label": "發布翻譯",
+ "tux-editor-skip-button-label": "跳至下一筆",
+ "tux-editor-cancel-button-label": "取消",
+ "tux-editor-confirm-button-label": "確認翻譯",
+ "tux-editor-proofread-button-label": "標記為已審查",
+ "tux-editor-shortcut-info": "使用「$1」來確認並移至下一個訊息,使用「$2」來略過,使用「$4」來提供摘要或壓住「$3」來查看使用其它快速鍵。",
+ "tux-editor-edit-desc": "編輯說明",
+ "tux-editor-add-desc": "新增說明",
+ "tux-editor-suggestions-title": "建議",
+ "tux-editor-latest-updates-title": "最近更新",
+ "tux-editor-all-changes": "所有變更",
+ "tux-editor-in-other-languages": "其他語言",
+ "tux-editor-need-more-help": "需要更多幫助嗎?",
+ "tux-editor-ask-help": "詢問更多資訊",
+ "tux-editor-tm-match": "$1% 符合",
+ "tux-notices-more": "{{PLURAL:$1|還有 $1 個}}",
+ "tux-notices-hide": "隱藏",
+ "tux-editor-save-failed": "發布翻譯失敗:$1",
+ "tux-editor-n-uses": "使用過 $1 次",
+ "tux-editor-message-desc-more": "檢視更多",
+ "tux-editor-message-desc-less": "檢視更少",
+ "tux-editor-clear-translated": "隱藏已翻譯",
+ "tux-editor-proofreading-mode": "審核",
+ "tux-editor-translate-mode": "清單",
+ "tux-editor-proofreading-hide-own-translations": "隱藏您的翻譯",
+ "tux-editor-proofreading-show-own-translations": "顯示您的翻譯",
+ "tux-proofread-action-tooltip": "標記為已審查",
+ "tux-proofread-edit-label": "編輯",
+ "tux-editor-page-mode": "頁面",
+ "tux-editor-outdated-notice": "此翻譯可能要更新。",
+ "tux-editor-outdated-notice-diff-link": "顯示差異",
+ "tux-editor-doc-editor-placeholder": "訊息說明文件",
+ "tux-editor-doc-editor-save": "發布說明",
+ "tux-editor-doc-editor-cancel": "取消",
+ "tux-messagetable-more-messages": "還有 $1 則訊息",
+ "tux-messagetable-loading-messages": "讀取 $1 筆訊息中...",
+ "tux-message-filter-placeholder": "篩選清單",
+ "tux-message-filter-result": "找到$1筆包含「$2」的結果",
+ "tux-message-filter-advanced-button": "進階搜尋",
+ "tux-message-filter-optional-messages-label": "可選填訊息",
+ "tux-proofread-translated-by-self": "您的翻譯",
+ "tux-empty-list-all": "此訊息群組無訊息",
+ "tux-empty-list-all-guide": "選擇其他的訊息群組翻譯",
+ "tux-translate-page-no-such-group": "<strong>指定的群組並不存在。</strong>選擇其他訊息群組。",
+ "tux-empty-list-translated": "沒有已翻譯的訊息",
+ "tux-empty-list-translated-guide": "您可以協助翻譯",
+ "tux-empty-list-translated-action": "翻譯",
+ "tux-empty-no-messages-to-display": "沒有要顯示的訊息。",
+ "tux-empty-there-are-optional": "列表中還有未顯示的可選填訊息",
+ "tux-empty-show-optional-messages": "顯示選填訊息",
+ "tux-empty-no-outdated-messages": "無過時的訊息",
+ "tux-empty-nothing-to-proofread": "無需要審查的內容",
+ "tux-empty-you-can-help-providing": "您可以協助提供新翻譯",
+ "tux-empty-nothing-new-to-proofread": "無新內容需要審查",
+ "tux-empty-you-can-review-already-proofread": "您可以審核已被他人審核過的翻譯。",
+ "tux-empty-list-other": "目前沒有可翻譯的內容",
+ "tux-empty-list-other-guide": "您可以協助審核目前已存在的翻譯",
+ "tux-empty-list-other-action": "審核翻譯",
+ "tux-empty-list-other-link": "顯示所有訊息",
+ "tux-editor-close-tooltip": "關閉",
+ "tux-editor-expand-tooltip": "展開",
+ "tux-editor-collapse-tooltip": "摺疊",
+ "tux-editor-message-tools-show-editor": "顯示於 wiki 編輯器",
+ "tux-editor-message-tools-history": "歷史",
+ "tux-editor-message-tools-delete": "刪除",
+ "tux-editor-message-tools-translations": "所有翻譯",
+ "tux-editor-message-tools-linktothis": "連至此訊息之連結",
+ "tux-editor-loading": "正在讀取...",
+ "tux-editor-loading-failed": "載入翻譯輔助失敗:$1",
+ "translate-search-more-languages-info": "還有 $1 種{{PLURAL:$1|語言|語言}}",
+ "translate-statsbar-tooltip": "已翻譯 $1%,已審核 $2%",
+ "translate-statsbar-tooltip-with-fuzzy": "$1% 已翻譯,$2% 已檢閱,$3% 已過時",
+ "translate-search-more-groups-info": "還有 $1 個{{PLURAL:$1|群組|群組}}",
+ "translate-syntax-error": "翻譯含有語法錯誤",
+ "tux-session-expired": "您已不在登入狀態,請使用另一個頁籤登入。或者備份您尚未儲存的翻譯,登入返回此頁然後再輸入您的翻譯一次。",
+ "tux-nojs": "此工具在沒有 JavaScript 時無法運作。JavaScript 已停用、運作失敗,或者此瀏覽器不受支援。",
+ "specialpages-group-translation": "翻譯",
+ "content-model-translate-messagebundle": "可翻譯的訊息集",
+ "translate-messagebundle-error-parsing": "解析JSON時出現錯誤:$1"
+}
diff --git a/Translate/i18n/core/zh-hk.json b/Translate/i18n/core/zh-hk.json
new file mode 100644
index 00000000..658b5352
--- /dev/null
+++ b/Translate/i18n/core/zh-hk.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "LuciferianThomas"
+ ]
+ },
+ "content-model-translate-messagebundle": "可翻譯的訊息集"
+}
diff --git a/Translate/i18n/pagetranslation/abs.json b/Translate/i18n/pagetranslation/abs.json
new file mode 100644
index 00000000..ef8541a3
--- /dev/null
+++ b/Translate/i18n/pagetranslation/abs.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Anok kutai jang"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2 terjemahan)"
+}
diff --git a/Translate/i18n/pagetranslation/ace.json b/Translate/i18n/pagetranslation/ace.json
new file mode 100644
index 00000000..9b9169e4
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ace.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Si Gam Acèh"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% geuteujeumah)"
+}
diff --git a/Translate/i18n/pagetranslation/ady-cyrl.json b/Translate/i18n/pagetranslation/ady-cyrl.json
new file mode 100644
index 00000000..0b216932
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ady-cyrl.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "Highlander45temp"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% зэредзэкӀыгъэ)"
+}
diff --git a/Translate/i18n/pagetranslation/aeb-latn.json b/Translate/i18n/pagetranslation/aeb-latn.json
new file mode 100644
index 00000000..c0009d90
--- /dev/null
+++ b/Translate/i18n/pagetranslation/aeb-latn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Csisc"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% ittarjim)"
+}
diff --git a/Translate/i18n/pagetranslation/af.json b/Translate/i18n/pagetranslation/af.json
new file mode 100644
index 00000000..ede4f22b
--- /dev/null
+++ b/Translate/i18n/pagetranslation/af.json
@@ -0,0 +1,79 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ansumang",
+ "Naudefj",
+ "පසිඳු කාවින්ද"
+ ]
+ },
+ "pagetranslation": "Bladsyvertaling",
+ "right-pagetranslation": "Merk weergawes van bladsye vir vertaling",
+ "tpt-section": "Vertaaleenheid $1",
+ "tpt-section-new": "Nuwe vertaaleenheid.\nNaam: $1",
+ "tpt-section-deleted": "Vertaaleenheid $1",
+ "tpt-diff-old": "Vorige teks",
+ "tpt-diff-new": "Nuwe teks",
+ "tpt-submit": "Merk die weergawe vir vertaling",
+ "tpt-sections-oldnew": "Nuwe en bestaande vertaaleenhede",
+ "tpt-sections-deleted": "Verwyderde vertaaleenhede",
+ "tpt-sections-template": "Vertaalbladsjabloon",
+ "tpt-action-nofuzzy": "Het vertalings ongeldig nie",
+ "tpt-badtitle": "Die naam verskaf ($1) is nie 'n geldige bladsynaam nie",
+ "tpt-nosuchpage": "Bladsy $1 bestaan nie.",
+ "tpt-oldrevision": "$2 is nie die nuutste weergawe van die bladsy [[:$1]] nie.\nSlegs die nuutste weergawe kan vir vertaling gemerk word.",
+ "tpt-notsuitable": "Die bladsy $1 is nie geskik om vir vertaling gemerk te word nie.\nSorg dat dit die etiket <nowiki><translate></nowiki> bevat en dat die sintaks daarvan korrek is.",
+ "tpt-saveok": "Die bladsy [[:$1]] is gemerk vir vertaling met $2 uitstaande {{PLURAL:$2|vertaaleenheid|vertaaleenhede}}.\nDie bladsy kan nou <span class=\"plainlinks\">[$3 vertaal]</span> word.",
+ "tpt-showpage-intro": "Hieronder word nuwe, bestaande en verwyderde afdelings gelys.\nAlvorens u die weergawe vir vertaling merk, maak seker dat die veranderinge geminimeer word om onnodig werk vir vertalers te voorkom.",
+ "tpt-mark-summary": "Merk die weergawe vir vertaling",
+ "tpt-edit-failed": "Die bladsy \"$1\" kon nie bygewerk word nie.",
+ "tpt-unmarked": "Bladsy $1 is nie meer vir vertaling gemerk nie.",
+ "tpt-list-nopages": "Geen bladsye is vir vertaling gemerk of is reg om vir vertaling gemerk te word nie.",
+ "tpt-old-pages-title": "Bladsye in vertaling",
+ "tpt-other-pages-title": "Gebreekte bladsye",
+ "tpt-new-pages": "Hierdie {{PLURAL:$1|bladsy bevat|bladsye bevat}} teks met vertalings-etikette, maar geen weergawe van die {{PLURAL:$1|bladsy|bladsye}} is vir vertaling gemerk nie.",
+ "tpt-old-pages": "'n Weergawe van die {{PLURAL:$1|bladsy|bladsye}} is reeds vir vertaling gemerk.",
+ "tpt-select-prioritylangs-reason": "Rede:",
+ "tpt-sections-prioritylangs": "Prioriteitstale",
+ "tpt-rev-mark": "merk vir vertaling",
+ "tpt-rev-unmark": "verwyder van vertaling",
+ "tpt-rev-discourage": "ontmoedig",
+ "tpt-rev-encourage": "herstel",
+ "tpt-rev-mark-tooltip": "Merk die nuutste weergawe van hierdie bladsy vir vertaling.",
+ "tpt-rev-unmark-tooltip": "Verwyder hierdie bladsy van die vertaling.",
+ "tpt-rev-discourage-tooltip": "Ontmoedig verdere vertalings van hierdie bladsy.",
+ "tpt-rev-encourage-tooltip": "Herstel hierdie bladsy na normaal vertaling.",
+ "translate-tag-translate-link-desc": "Vertaal die bladsy",
+ "translate-tag-markthis": "Merk die bladsy vir vertaling",
+ "translate-tag-markthisagain": "Hierdie bladsy is <span class=\"plainlinks\">[$1 kere gewysig]</span> sedert dit laas <span class=\"plainlinks\">[$2 vir vertaling gemerk was]</span>.",
+ "translate-tag-hasnew": "Daar is <span class=\"plainlinks\">[$1 wysigings]</span> aan die bladsy gemaak wat nie vir vertaling gemerk is nie.",
+ "tpt-translation-intro": "Die bladsy is 'n <span class=\"plainlinks\">[$1 vertaalde weergawe]</span> van bladsy [[$2]]. Die vertaling van die bladsy is $3% voltooi.",
+ "tpt-translation-intro-fuzzy": "Verouderde vertalings word so weergegee.",
+ "tpt-languages-legend": "Ander tale:",
+ "tpt-languages-nonzero": "$1 ($2% vertaal)",
+ "tpt-tab-translate": "Vertaal",
+ "tpt-target-page": "Hierdie bladsy kan nie handmatig gewysig word nie.\nDie bladsy is 'n vertaling van die bladsy [[$1]].\nDie vertaling kan bygewerk word via die [$2 vertaalgereedskap].",
+ "tpt-unknown-page": "Hierdie naamruimte is gereserveer vir die vertalings van bladsye.\nDie bladsy wat u probeer wysig kom nie ooreen met een wat vir vertaling gemerk is nie.",
+ "tpt-render-summary": "Besig met bewerkings vanweë 'n nuwe basisweergawe van die bronblad",
+ "tpt-aggregategroup-save": "Stoor",
+ "tpt-aggregategroup-new-name": "Naam:",
+ "tpt-aggregategroup-new-description": "Beskrywing (opsioneel):",
+ "tpt-aggregategroup-invalid-group": "Groep bestaan nie",
+ "tpt-aggregategroup-edit-name": "Naam:",
+ "tpt-aggregategroup-edit-description": "Beskrywing:",
+ "tpt-aggregategroup-update": "Stoor",
+ "tpt-aggregategroup-update-cancel": "Kanselleer",
+ "tpt-invalid-group": "Ongeldige groep",
+ "pt-shake-empty": "Leë afdeling vir merker $1.",
+ "pt-movepage-current": "Huidige naam:",
+ "pt-movepage-new": "Nuwe naam:",
+ "pt-movepage-reason": "Rede:",
+ "pt-deletepage-current": "Bladsynaam:",
+ "pt-deletepage-reason": "Rede:",
+ "pm-savepages-button-label": "Stoor",
+ "pm-cancel-button-label": "Kanselleer",
+ "pm-page-does-not-exist": "$1 bestaan nie.",
+ "pm-old-translations-missing": "$1 bevat nie ou vertalings nie.",
+ "pp-save-button-label": "Stoor",
+ "pp-cancel-button-label": "Kanselleer",
+ "pp-save-message": "Die bladsy is gestoor. U kan dit [$1 wysig]."
+}
diff --git a/Translate/i18n/pagetranslation/alt.json b/Translate/i18n/pagetranslation/alt.json
new file mode 100644
index 00000000..77d38d09
--- /dev/null
+++ b/Translate/i18n/pagetranslation/alt.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Батыр Комдошев"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% кӧчӱрилген)"
+}
diff --git a/Translate/i18n/pagetranslation/ami.json b/Translate/i18n/pagetranslation/ami.json
new file mode 100644
index 00000000..d2df9d87
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ami.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Vickylin77s"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% macoyakay to)"
+}
diff --git a/Translate/i18n/pagetranslation/an.json b/Translate/i18n/pagetranslation/an.json
new file mode 100644
index 00000000..eba5ee42
--- /dev/null
+++ b/Translate/i18n/pagetranslation/an.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Willtron"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2 % traduciu)"
+}
diff --git a/Translate/i18n/pagetranslation/ang.json b/Translate/i18n/pagetranslation/ang.json
new file mode 100644
index 00000000..2468fe3a
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ang.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gott wisst"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ({{PLURAL:$2|$2% is awended|$2% sindon awended}})"
+}
diff --git a/Translate/i18n/pagetranslation/ann.json b/Translate/i18n/pagetranslation/ann.json
new file mode 100644
index 00000000..5699b477
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ann.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Katelem"
+ ]
+ },
+ "tps-edit-sourcepage-ve-warning-button": "ÎSO",
+ "tpt-languages-nonzero": "$1 (mînwene $2% itap me ofifi otu-usem)"
+}
diff --git a/Translate/i18n/pagetranslation/anp.json b/Translate/i18n/pagetranslation/anp.json
new file mode 100644
index 00000000..95414099
--- /dev/null
+++ b/Translate/i18n/pagetranslation/anp.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Angpradesh"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% अनूदित)"
+}
diff --git a/Translate/i18n/pagetranslation/ar.json b/Translate/i18n/pagetranslation/ar.json
new file mode 100644
index 00000000..e8ab8603
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ar.json
@@ -0,0 +1,219 @@
+{
+ "@metadata": {
+ "authors": [
+ "Asma",
+ "Bibas",
+ "Hhaboh162002",
+ "Meno25",
+ "OsamaK",
+ "Tala Ali",
+ "ترجمان05",
+ "ديفيد",
+ "روخو",
+ "محمد أحمد عبد الفتاح"
+ ]
+ },
+ "pagetranslation": "ترجمة صفحة",
+ "right-pagetranslation": "تعليم نسخًا من الصفحات للترجمة",
+ "action-pagetranslation": "إدارة الصفحات القابلة للترجمة",
+ "tpt-section": "وحدة الترجمة $1",
+ "tpt-section-new": "وحدة ترجمة جديدة.\nالاسم: $1",
+ "tpt-section-deleted": "وحدة الترجمة $1",
+ "tpt-diff-old": "نص سابق",
+ "tpt-diff-new": "نص جديد",
+ "tpt-submit": "علّم هذه النسخة للترجمة",
+ "tpt-sections-oldnew": "وحدات الترجمة الجديدة والموجودة",
+ "tpt-sections-deleted": "وحدات الترجمة المحذوفة",
+ "tpt-sections-template": "قالب صفحة ترجمة",
+ "tpt-action-nofuzzy": "لا تجعل حالة الترجمات غير صحيحة",
+ "tpt-badtitle": "اسم الصّفحة المعطى ($1) ليس عنوانا صحيحا",
+ "tpt-nosuchpage": "الصفحة $1 غير موجودة",
+ "tpt-oldrevision": "$2 ليست آخر نسخة للصّفحة [[:$1]].\nفقط آخر النسخ يمكن أن تؤشّر للترجمة.",
+ "tpt-notsuitable": "الصفحة $1 غير مناسبة للترجمة.\nتأكد أن لها وسم <nowiki><translate></nowiki> وأن لها صياغة صحيحة.",
+ "tpt-saveok": "الصفحة [[:$1]] تم التعليم عليها للترجمة ب $2 {{PLURAL:$2|وحدة ترجمة|وحدات ترجمة}}.\nالصفحة يمكن الآن <span class=\"plainlinks\">[$3 ترجمتها]</span>.",
+ "tpt-saveok-first": "يمكنك [[Special:PageMigration|استيراد ترجمة موجودة مسبقا]] لهذه الصفحة (إن وُجِدت).",
+ "tpt-offer-notify": "أنت يمكنك <span class=\"plainlinks\">[$1 إخطار المترجمين]</span> حول هذه الصفحة.",
+ "tpt-showpage-intro": "أدناه تُسرد الأقسام الجديدة والموجودة والمحذوفة.\nقبل تعليم هذه النسخة للترجمة، تحقق من أن التغييرات على الأقسام مُقلّلة لتفادي العمل غير الضروري من المترجمين.",
+ "tpt-mark-summary": "علَّم هذه النسخة للترجمة",
+ "tpt-mark-nochanges": "لا تغييرات للمراجعة. التعليم على هذه الصفحة للترجمة لن يعدل الصفحة ولا أي وحدة ترجمة موجودة.",
+ "tpt-edit-failed": "تعذّر تحديث الصفحة: $1",
+ "tpt-duplicate": "اسم وحدة الترجمة $1 مستخدم أكثر من مرة.",
+ "tpt-invalid": "يجب ألا يحتوي اسم وحدة الترجمة $1 على شرطة سفلية أو شرطة مائلة.",
+ "tpt-unmarked": "الصفحة [[:$1]] لم تعد مُعلمة للترجمة.",
+ "tpt-list-nopages": "لا صفحات مُعلّمة للترجمة أو جاهزة للتعليم للترجمة.",
+ "tpt-new-pages-title": "صفحات مقترحة للترجمة",
+ "tpt-old-pages-title": "صفحات تحت الترجمة",
+ "tpt-other-pages-title": "صفحات مكسورة",
+ "tpt-new-pages": "{{PLURAL:$1|هذه الصفحة تحتوي|هذه الصفحات تحتوي}} على نص بوسوم ترجمة، لكن لا نسخة من {{PLURAL:$1|هذه الصفحة|هذه الصفحات}} معلمة حاليا للترجمة.",
+ "tpt-old-pages": "إحدى نسخ {{PLURAL:$1||هذه الصفحة|هاتان الصفحتان|هذه الصفحات}} عُلّمت للترجمة.",
+ "tpt-other-pages": "{{PLURAL:$1|نسخة قديمة من هذه الصفحة|نسخ قديمة من هذه الصفحات}} معلمة للترجمة،\nلكن آخر {{PLURAL:$1|نسخة|نسخ}} لا يمكن تعليمها للترجمة.",
+ "tpt-select-prioritylangs": "قائمة بأكواد اللغات التي لها الأولوية مفصولة بفاصلة:",
+ "tpt-select-prioritylangs-force": "امنع الترجمات للغات غير اللغات التي لها الأولوية",
+ "tpt-select-prioritylangs-reason": "السبب:",
+ "tpt-sections-prioritylangs": "اللغات ذات الأولوية",
+ "tpt-rev-mark": "علم للترجمة",
+ "tpt-rev-unmark": "إزالة هذه الصفحة من الترجمة",
+ "tpt-rev-discourage": "لا تشجع",
+ "tpt-rev-encourage": "استرجاع",
+ "tpt-rev-mark-tooltip": "حدد أحدث نسخة من هذه الصفحة للترجمة.",
+ "tpt-rev-unmark-tooltip": "أزل هذه الصفحة من الترجمة.",
+ "tpt-rev-discourage-tooltip": "ثبط الترجمات الأخرى على هذه الصفحة.",
+ "tpt-rev-encourage-tooltip": "استعد هذه الصفحة للترجمة العادية.",
+ "translate-tag-translate-link-desc": "ترجم هذه الصفحة",
+ "translate-tag-markthis": "علّم هذه الصفحة للترجمة",
+ "translate-tag-markthisagain": "هذه الصفحة بها <span class=\"plainlinks\">[$1 تغيير]</span> منذ تم <span class=\"plainlinks\">[$2 تعليمها للترجمة]</span> لآخر مرة.",
+ "translate-tag-hasnew": "هذه الصفحة تحتوي على <span class=\"plainlinks\">[$1 تغييرات]</span> غير معلمة للترجمة.",
+ "tpt-translation-intro": "هذه الصفحة هي <span class=\"plainlinks\">[$1 نسخة مترجمة]</span> من صفحة [[$2]] والترجمة مكتملة بنسبة $3%.",
+ "tpt-translation-intro-fuzzy": "الترجمات غير المُحدّثة مُعلّمة بما يشبه هذه.",
+ "tpt-languages-legend": "لغات أخرى:",
+ "tpt-languages-zero": "ابدأ الترجمة لهذه اللغة",
+ "tpt-languages-nonzero": "$1 (قد تُرجمت بنسبة $2%)",
+ "tpt-tab-translate": "ترجم",
+ "tpt-target-page": "لا يمكن تحديث هذه الصفحة يدويًا.\nهذه الصفحة ترجمة لصفحة [[$1]] ويمكن تحديث الترجمة باستخدام [$2 أداة الترجمة].",
+ "tpt-unknown-page": "هذا النطاق محجوز لترجمات صفحات المحتوى.\nالصفحة التي تحاول تعديلها لا يبدو أنها تطابق أية صفحة معلمة للترجمة.",
+ "tpt-translation-restricted": "ترجمة هذه الصفحة لهذه اللغة تم منعها بواسطة إداري ترجمة.\n\nالسبب: $1",
+ "tpt-discouraged-language-force-header": "هذه الصفحة لا يمكن ترجمتها إلى $1.",
+ "tpt-discouraged-language-force-content": "قرر إداري ترجمة أن هذه الصفحة يمكن ترجمتها فقط إلى $1.",
+ "tpt-discouraged-language-header": "الترجمة إلى $1 ليست أولوية لهذه الصفحة.",
+ "tpt-discouraged-language-content": "قرر إداري ترجمة تركيز جهود الترجمة على $1.",
+ "tpt-discouraged-language-force": "<strong>هذه الصفحة لا يمكن ترجمتها إلى $2.</strong>\n\nقرر إداري ترجمة أن هذه الصفحة يمكن ترجمتها فقط إلى $3.",
+ "tpt-priority-languages": "إداري ترجمة ضبط لغات الأولوية لهذه المجموعة إلى $1.",
+ "tpt-priority-languages-force": "قام إدري ترجمة بتعيين لغات الأولوية لهذه المجموعة على $1؛ الترجمة إلى لغات أخرى غير مسموح بها.",
+ "tpt-render-summary": "تحديث لمطابقة نسخة صفحة المصدر الجديدة",
+ "aggregategroups": "المجموعة الإجمالية",
+ "tpt-aggregategroup-add": "أضف",
+ "tpt-aggregategroup-save": "حفظ",
+ "tpt-aggregategroup-add-new": "أضف مجموعة مجمعة جديدة",
+ "tpt-aggregategroup-new-name": "الاسم:",
+ "tpt-aggregategroup-new-description": "الوصف (اختياري):",
+ "tpt-aggregategroup-remove-confirm": "هل أنت متأكد أنك تريد حذف هذه المجموعة المجمعة؟",
+ "tpt-aggregategroup-invalid-group": "المجموعة غير موجودة",
+ "tpt-aggregategroup-edit-name": "الاسم:",
+ "tpt-aggregategroup-edit-description": "الوصف:",
+ "tpt-aggregategroup-update": "حفظ",
+ "tpt-aggregategroup-update-cancel": "ألغ",
+ "tpt-invalid-group": "مجموعة غير صالحة",
+ "pt-parse-open": "وسم &lt;translate> غير متوازن.\nقالب الترجمة: <pre>$1</pre>",
+ "pt-parse-close": "وسم &lt;/translate> غير متوازن.\nقالب الترجمة: <pre>$1</pre>",
+ "pt-parse-nested": "وحدات الترجمة &lt;translate> المتداخلة غير مسموح بها.\nنص الوسم: <pre>$1</pre>",
+ "pt-shake-multiple": "علامات وحدات ترجمة متعددة لوحدة ترجمة واحدة.\nنص وحدة الترجمة: <pre>$1</pre>",
+ "pt-shake-position": "علامات وحدات الترجمة في موضع غير متوقع.\nنص وحدة الترجمة: <pre>$1</pre>",
+ "pt-shake-empty": "وحدة ترجمة فارغة للعلامة \"$1\".",
+ "log-description-pagetranslation": "سجل بالأحداث المرتبطة بنظام ترجمة الصفحات",
+ "log-name-pagetranslation": "سجل ترجمة الصفحات",
+ "logentry-pagetranslation-mark": "{{GENDER:$2|حدد|حددت}} $1 $3 للترجمة",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|أزال|أزالت}} $3 من نظام الترجمة",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|أكمل|أكملت}} إعادة تسمية الصفحة القابلة للترجمة $3 إلى $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|صادف|صادفت}} مشكلة أثناء نقل الصفحة $3 إلى $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|أكمل|أكملت}} حذف الصفحات القابلة للترجمة $3",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|فشل|فشلت}} في حذف $3 والتي تنتمي للصفحة القابلة للترجمة $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|أكمل|أكملت}} حذف صفحة الترجمة $3",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|فشل|فشلت}} في حذف $3 والتي تنتمي لصفحة الترجمة $4",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|شجع|شجعت}} ترجمة $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|لم يشجع|لم تشجع}} ترجمة $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|أزال|أزالت}} لغات الأولوية من الصفحة القابلة للترجمة $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|ضبط|ضبطت}} لغات الأولوية للصفحة القابلة للترجمة $3 إلى $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|حدد|حددت}} اللغات للصفحة القابلة للترجمة $3 إلى $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|أضاف|أضافت}} الصفحة القابلة للترجمة $3 إلى المجموعة المجمعة $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|أزال|أزالت}} الصفحة القابلة للترجمة $3 من المجموعة المجمعة $4",
+ "log-action-filter-pagetranslation": "نوع الفعل:",
+ "log-action-filter-pagetranslation-mark": "التعليم للترجمة",
+ "log-action-filter-pagetranslation-unmark": "الإزالة من الترجمة",
+ "log-action-filter-pagetranslation-move": "نقل الصفحات",
+ "log-action-filter-pagetranslation-delete": "عمليات حذف الصفحات",
+ "log-action-filter-pagetranslation-encourage": "تشجيع الترجمة",
+ "log-action-filter-pagetranslation-discourage": "عدم تشجيع الترجمة",
+ "log-action-filter-pagetranslation-prioritylanguages": "تعديلات اللغات ذات الأولوية",
+ "log-action-filter-pagetranslation-aggregategroups": "تعديل المجموعات المجمعة",
+ "logentry-messagebundle-deletefok": "$1 {{GENDER: $2 | مكتمل}} حذف مجموعة الرسائل $3",
+ "log-action-filter-messagebundle-delete": "مسح مجموعة الرسائل",
+ "pt-movepage-title": "نقل الصفحة القابلة للترجمة \"$1\"",
+ "pt-movepage-blockers": "الصفحة القابلة للترجمة لا يمكن نقلها للاسم الجديد بسبب {{PLURAL:$1|الخطأ التالي|الأخطاء التالية}}:",
+ "pt-movepage-block-base-invalid": "اسم الصفحة القابلة للترجمة الهدف ليس عنوانا صحيحا.",
+ "pt-movepage-block-tp-invalid": "عنوان صفحة الترجمة الهدف ل\"[[:$1]]\" سيكون غير صحيح (طويل جدا؟).",
+ "pt-movepage-block-section-invalid": "عنوان الصفحة الهدف ل\"[[:$1]]\" لوحدة الترجمة سيكون غير صحيح (طويل جدا؟).",
+ "pt-movepage-block-subpage-invalid": "عنوان الصفحة الفرعية الهدف ل\"[[:$1]]\" سيكون غير صحيح (طويل جدا؟).",
+ "pt-movepage-list-pages": "قائمة الصفحات التي ستنقل",
+ "pt-movepage-list-translation": "{{PLURAL:$1|صفحة|صفحات}} الترجمة",
+ "pt-movepage-list-section": "{{PLURAL:$1|صفحة|صفحات}} وحدة الترجمة",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|صفحة|صفحات}} معلم عليها للترجمة",
+ "pt-movepage-list-translatable-note": "هذه الصفحات يجب أن يتم نقلها بشكل منفصل.",
+ "pt-movepage-list-other": "{{PLURAL:$1|صفحة|صفحات}} فرعية أخرى",
+ "pt-movepage-list-count": "كإجمالي $1 {{PLURAL:$1|صفحة|صفحات}} للنقل.",
+ "pt-movepage-list-no-pages": "لم يتم العثور على صفحات.",
+ "pt-movepage-legend": "نقل الصفحة القابلة للترجمة",
+ "pt-movepage-current": "الاسم الحالي:",
+ "pt-movepage-new": "الاسم الجديد:",
+ "pt-movepage-reason": "السبب:",
+ "pt-movepage-subpages": "انقل جميع الصفحات الفرعية",
+ "pt-movepage-action-check": "تحقق ما إذا كان النقل ممكنا",
+ "pt-movepage-action-perform": "لا تنقل",
+ "pt-movepage-action-other": "تغيير الهدف",
+ "pt-movepage-intro": "هذه الصفحة الخاصة تسمح لك بنقل الصفحات التي تم تعليمها للترجمة.\nفعل النقل لن يكون فوريا، لأن الكثير من الصفحات ستحتاج إلى أن يتم نقلها.\nأثناء عملية نقل الصفحات، فلن يكون التفاعل ممكنا مع الصفحات المعينة.\nعمليات الفشل سوف تسجل في [[Special:Log/pagetranslation|سجل ترجمة الصفحات]] وستحتاج إلى أن يتم إصلاحها يدويا.",
+ "pt-movepage-logreason": "جزء من الصفحة القابلة للترجمة \"$1\"",
+ "pt-movepage-started": "من فضلك تحقق من [[Special:Log/pagetranslation|سجل ترجمة الصفحات]] للأخطاء ورسالة الإكمال.",
+ "pt-locked-page": "هذه الصفحة مقفلة لأن الصفحة القابلة للترجمة يتم نقلها حاليا.",
+ "pt-deletepage-lang-title": "حذف صفحة الترجمة \"$1\"",
+ "pt-deletepage-tp-title": "حذف صفحة الترجمة \"$1\"",
+ "pt-deletepage-mb-title": "حذف حزمة الرسائل \"$1\"",
+ "pt-deletepage-invalid-title": "الصفحة المحددة غير صحيحة.",
+ "pt-deletepage-invalid-text": "الصفحة المحددة ليست صفحة قابلة للترجة ولا صفحة ترجمة.",
+ "pt-deletepage-action-check": "عرض الصفحات للحذف",
+ "pt-deletepage-action-perform": "نفذ الحذف",
+ "pt-deletepage-action-other": "غيّر الهدف",
+ "pt-deletepage-lang-legend": "احذف صفحة الترجمة",
+ "pt-deletepage-tp-legend": "حذف الصفحة القابلة للترجمة",
+ "pt-deletepage-mb-legend": "احذف مجموعة الرسائل",
+ "pt-deletepage-any-legend": "احذف الصفحة القابلة للترجمة أو مجموعة الرسائل أو صفحة الترجمة",
+ "pt-deletepage-current": "اسم الصفحة:",
+ "pt-deletepage-reason": "السبب:",
+ "pt-deletepage-reason-other": "سبب آخر",
+ "pt-deletepage-subpages": "أحذف جميع الصفحات الفرعية",
+ "pt-deletepage-list-pages": "قائمة الصفحات للحذف",
+ "pt-deletepage-list-translation": "صفحات الترجمة",
+ "pt-deletepage-list-section": "صفحات وحدة الترجمة",
+ "pt-deletepage-list-other": "صفحات فرعية أخرى",
+ "pt-deletepage-list-count": "إجمالا $1 {{PLURAL:$1|صفحة|صفحات}} للحذف.",
+ "pt-deletepage-full-logreason": "جزء من الصفحة القابلة للترجمة \"$1\"",
+ "pt-deletepage-lang-logreason": "جزء من صفحة الترجمة \"$1\"",
+ "pt-deletepage-started": "من فضلك تحقق من [[$1|log]] للأخطاء ورسائل الإكمال.",
+ "pt-deletepage-intro": "تسمح لك هذه الصفحة الخاصة بحذف صفحة كاملة قابلة للترجمة ، أو مجموعة رسائل ، أو صفحة ترجمة فردية بإحدى اللغات.\nلن يكون إجراء الحذف فوريًا ، لأنه سيتم أيضًا حذف جميع الصفحات التي تعتمد عليها.\nسيتم تسجيل حالات الفشل في [[$1|respective log]]وستحتاج إلى أن يتم إصلاحها يدويا.",
+ "pagemigration": "تحويل صفحة الترجمة",
+ "pagemigration-summary": "حدد صفحة ترجمة واستعد أي ترجمة تمت قبل تفعيل نظام الترجمة على هذه الصفحة.",
+ "pm-import-button-label": "استورد",
+ "pm-savepages-button-label": "حفظ",
+ "pm-cancel-button-label": "ألغ",
+ "pm-page-does-not-exist": "$1 غير موجودة",
+ "pm-old-translations-missing": "$1 لا يحتوي ترجمات قديمة.",
+ "pm-extra-units-warning": "ربما تكون هناك وحدات إضافية. من فضلط طابق المصد ووحدات الترجمة جيدا.",
+ "pm-pagename-missing": "من فضلك أدخل اسم الصفحة.",
+ "pm-add-icon-hover-text": "أضف وحدة في الأسفل",
+ "pm-swap-icon-hover-text": "بدل مع الوحدة بالأسفل",
+ "pm-delete-icon-hover-text": "حذف الوحدة",
+ "pm-pagetitle-placeholder": "أدخل اسم الصفحة",
+ "pm-pagetitle-invalid": "من فضلك أدخل عنوان صفحة صحيح. ينبغي أن يكون بصيغة <page-name>/<language-code>.",
+ "pm-pagetitle-missing": "من فضلك أدخل عنوان الصفحة.",
+ "pm-langcode-missing": "كود اللغة يبدو مفقودا في العنوان. من فضلك أدخل عنوان الصفحة بالصيغة <page-name>/<language-code>.",
+ "pm-summary-import": "استورد الترجمة باستخدام [[Special:PageMigration|هجرة الصفحات]]",
+ "pm-on-import-message-text": "الترجمات القديمة تم استيرادها. استخدام اختيارات add, swap و delete لتعديل وحدات الترجمة واضغط على زر \"{{int:pm-savepages-button-label}}\" لحفظها. اضغط على زر \"{{int:pm-cancel-button-label}}\" للتجاهل.",
+ "pm-on-save-message-text": "وحدات الترجمة تم حفظها. أنت يمكك الآن إدخال عنوان صفحة ترجمة جديدة لهجرتها، أو عمل التغييرات للوحدات بالأسفل وحفظ مراجعة جديدة.",
+ "tpt-translate-title": "اسمح بترجمة عنوان الصفحة",
+ "pp-save-summary": "جهز الصفحة للترجمة",
+ "pagepreparation": "تحضير الصفحة للترجمة",
+ "pp-pagename-placeholder": "أدخل اسم الصفحة",
+ "pp-prepare-button-label": "جهز",
+ "pp-save-button-label": "نشر",
+ "pp-cancel-button-label": "ألغ",
+ "pp-save-message": "الصفحة تم حفظها. أنت يمكنك [$1 تعديلها].",
+ "pp-prepare-message": "الصفحة تم تحضيرها للترجمة. انظر الفرق بالأسفل. اضغط على زر \"{{int:pp-save-button-label}}\" لو موافق!",
+ "pp-already-prepared-message": "يبدو أن الصفحة قد تم بالفعل تحضيرها للترجمة. لا توجد تغييرات بالمقارنة مع النسخة السابقة.",
+ "pp-diff-error": "حدث خطأ أثناء جلب الفرق من الخادم.",
+ "pp-pagename-missing": "من فضلك أدخل اسم الصفحة.",
+ "pp-diff-old-header": "نص المصدر",
+ "pp-diff-new-header": "جهز النص",
+ "tpt-unlink-confirm": "من فضلك تأكد من أك تريد فعلا إزالة هذه الصفحة من نظام الترجمة.\nأداة اختيار اللغة وأسماء الصفحة المترجمة سيتوفقون عن العمل.\nصفحات الترجمة ستصبح قابلة للتعديل.",
+ "tpt-unlink-button": "أزل من الترجمة",
+ "tpt-unlink-summary": "إزالة هذه الصفحة من الترجمة",
+ "tpt-generic-confirm": "برجاء تأكيد الفعل",
+ "tpt-generic-button": "تأكيد"
+}
diff --git a/Translate/i18n/pagetranslation/arc.json b/Translate/i18n/pagetranslation/arc.json
new file mode 100644
index 00000000..c31934ce
--- /dev/null
+++ b/Translate/i18n/pagetranslation/arc.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Basharh"
+ ]
+ },
+ "pagetranslation": "ܬܘܪܓܡܐ ܕܦܐܬܐ",
+ "aggregategroups": "ܐܠܐܡ ܟܢܘܫܬ̈ܐ"
+}
diff --git a/Translate/i18n/pagetranslation/arq.json b/Translate/i18n/pagetranslation/arq.json
new file mode 100644
index 00000000..b2ef4b8d
--- /dev/null
+++ b/Translate/i18n/pagetranslation/arq.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Oldstoneage"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 (مطرجمة ب نسبت` $2%)"
+}
diff --git a/Translate/i18n/pagetranslation/ary.json b/Translate/i18n/pagetranslation/ary.json
new file mode 100644
index 00000000..0b718bab
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ary.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "SADIQUI"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 (تترجمات بنسبة $2%)"
+}
diff --git a/Translate/i18n/pagetranslation/arz.json b/Translate/i18n/pagetranslation/arz.json
new file mode 100644
index 00000000..d7ecd685
--- /dev/null
+++ b/Translate/i18n/pagetranslation/arz.json
@@ -0,0 +1,40 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ghaly",
+ "Meno25"
+ ]
+ },
+ "pagetranslation": "ترجمه صفحة",
+ "right-pagetranslation": "عّلم نسخًا م هذه الصفحه للترجمة",
+ "tpt-section": "وحده الترجمه $1",
+ "tpt-section-new": "وحده ترجمه جديده.\nالاسم: $1",
+ "tpt-section-deleted": "وحده الترجمه $1",
+ "tpt-diff-old": "نص سابق",
+ "tpt-diff-new": "نص جديد",
+ "tpt-submit": "علّم هذه النسخه للترجمة",
+ "tpt-sections-oldnew": "وحدات الترجمه الجديده والموجودة",
+ "tpt-sections-deleted": "وحدات الترجمه المحذوفة",
+ "tpt-sections-template": "قالب صفحه ترجمة",
+ "tpt-badtitle": "اسم الصّفحه المعطى ($1) ليس عنوانا صحيحا",
+ "tpt-oldrevision": "$2 ليست آخر نسخه للصّفحه [[:$1]].\nفقط آخر النسخ يمكن أن تؤشّر للترجمه.",
+ "tpt-notsuitable": "الصفحه $1 غير مناسبه للترجمه.\nتأكد أن لها وسم <nowiki><translate></nowiki> وأن لها صياغه صحيحه.",
+ "tpt-saveok": "الصفحه [[:$1]] تم التعليم عليها للترجمه ب $2 {{PLURAL:$2|وحده ترجمة|وحدات ترجمة}}.\nالصفحه يمكن الآن <span class=\"plainlinks\">[$3 ترجمتها]</span>.",
+ "tpt-showpage-intro": "أدناه تُسرد الأقسام الجديده والموجوده والمحذوفه.\nقبل تعليم هذه النسخه للترجمه، تحقق من أن التغييرات على الأقسام مُقلّله لتفادى العمل غير الضرورى من المترجمين.",
+ "tpt-mark-summary": "علَّم هذه النسخه للترجمة",
+ "tpt-edit-failed": "تعذّر تحديث الصفحة: $1",
+ "tpt-list-nopages": "لا صفحات مُعلّمه للترجمه أو جاهزه للتعليم للترجمه.",
+ "tpt-new-pages": "{{PLURAL:$1|هذه الصفحه تحتوي|هذه الصفحات تحتوي}} على نص بوسوم ترجمه، لكن لا نسخه من {{PLURAL:$1|هذه الصفحة|هذه الصفحات}} معلمه حاليا للترجمه.",
+ "tpt-old-pages": "إحدى نسخ {{PLURAL:$1||هذه الصفحة|هاتان الصفحتان|هذه الصفحات}} عُلّمت للترجمه.",
+ "translate-tag-translate-link-desc": "ترجمه هذه الصفحة",
+ "translate-tag-markthis": "علّم هذه الصفحه للترجمة",
+ "translate-tag-markthisagain": "هذه الصفحه بها <span class=\"plainlinks\">[$1 تغيير]</span> منذ تم <span class=\"plainlinks\">[$2 تعليمها للترجمة]</span> لآخر مره.",
+ "translate-tag-hasnew": "هذه الصفحه تحتوى على <span class=\"plainlinks\">[$1 تغييرات]</span> غير معلمه للترجمه.",
+ "tpt-translation-intro": "هذه الصفحه هى <span class=\"plainlinks\">[$1 نسخه مترجمة]</span> لصفحه [[$2]] والترجمه مكتمله ومحدثه بنسبه $3%.",
+ "tpt-translation-intro-fuzzy": "الترجمات غير المُحدّثه مُعلّمه هكذا.",
+ "tpt-languages-legend": "لغات أخرى:",
+ "tpt-languages-nonzero": "$1 (اترجمت بنسبة $2%)",
+ "tpt-target-page": "لا يمكن تحديث هذه الصفحه يدويًا.\nهذه الصفحه ترجمه لصفحه [[$1]] ويمكن تحديث الترجمه باستخدام [$2 أداه الترجمة].",
+ "tpt-unknown-page": "هذا النطاق محجوز لترجمات صفحات المحتوى.\nالصفحه التى تحاول تعديلها لا يبدو أنها تتبع أى صفحه معلمه للترجمه.",
+ "tpt-render-summary": "تحديث لمطابقه نسخه صفحه المصدر الجديدة"
+}
diff --git a/Translate/i18n/pagetranslation/as.json b/Translate/i18n/pagetranslation/as.json
new file mode 100644
index 00000000..1c058b69
--- /dev/null
+++ b/Translate/i18n/pagetranslation/as.json
@@ -0,0 +1,39 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bishnu Saikia",
+ "Chaipau",
+ "Dibya Dutta",
+ "Gitartha.bordoloi",
+ "Simbu123"
+ ]
+ },
+ "pagetranslation": "পৃষ্ঠা ভাঙনি",
+ "tpt-diff-old": "আগৰ পাঠ্য",
+ "tpt-diff-new": "নতুন পাঠ্য",
+ "tpt-submit": "এই সংস্কৰণ ভাঙনিৰ বাবে বাচক",
+ "tpt-other-pages-title": "সংযোগহীন পৃষ্ঠাসমূহ",
+ "tpt-select-prioritylangs-reason": "কাৰণ:",
+ "tpt-sections-prioritylangs": "প্ৰাথমিক ভাষাসমূহ",
+ "tpt-rev-discourage": "নিৰুত্সাহ",
+ "tpt-rev-encourage": "পুনঃসংস্থাপন কৰক",
+ "translate-tag-translate-link-desc": "এই পৃষ্ঠা ভাঙনি কৰক",
+ "tpt-translation-intro": "এই পৃষ্ঠাটো [[$2]] পৃষ্ঠাটোৰ এক <span class=\"plainlinks\">[$1 অনুবাদিত সংস্কৰণ]</span> আৰু $3% অনুবাদ সম্পন্ন হৈছে।",
+ "tpt-languages-legend": "অন্য ভাষা:",
+ "tpt-languages-zero": "এই ভাষাৰ অনুবাদ আৰম্ভ কৰক",
+ "tpt-languages-nonzero": "$1 ($2% অনূদিত)",
+ "tpt-target-page": "এই পৃষ্ঠাটো সাধাৰণভাৱে নবীকৰণ কৰিব নোৱাৰি।\nএই পৃষ্ঠাটো [[$1]] পৃষ্ঠাৰ অনুবাদ আৰু [$2 অনুবাদ সঁজুলি] ব্যৱহাৰ কৰি এই অনুবাদ নবীকৰণ কৰিব পৰা যায়।",
+ "tpt-aggregategroup-add": "যোগ কৰক",
+ "tpt-aggregategroup-save": "সাঁচি থওক",
+ "tpt-aggregategroup-new-name": "নাম:",
+ "tpt-aggregategroup-new-description": "বিৱৰণ (বৈকল্পিক):",
+ "tpt-aggregategroup-invalid-group": "এই গোট পোৱা নগ’ল",
+ "pt-movepage-list-translation": "ভাঙনি পৃষ্ঠাসমূহ",
+ "pt-movepage-current": "সাম্প্ৰতিক নাম:",
+ "pt-movepage-new": "নতুন নাম:",
+ "pt-movepage-reason": "কাৰণ:",
+ "pt-movepage-action-perform": "স্থানান্তৰ নকৰিব",
+ "pt-deletepage-current": "পৃষ্ঠাৰ নাম:",
+ "pt-deletepage-reason": "কাৰণ:",
+ "pm-pagetitle-placeholder": "পৃষ্ঠাৰ শিৰোনাম লিখক"
+}
diff --git a/Translate/i18n/pagetranslation/ast.json b/Translate/i18n/pagetranslation/ast.json
new file mode 100644
index 00000000..f03e806b
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ast.json
@@ -0,0 +1,205 @@
+{
+ "@metadata": {
+ "authors": [
+ "Esbardu",
+ "Xuacu"
+ ]
+ },
+ "pagetranslation": "Traducción de páxines",
+ "right-pagetranslation": "Marcar versiones de páxines pa traducir",
+ "action-pagetranslation": "alministrar les páxines traducibles",
+ "tpt-section": "Unidá de traducción $1",
+ "tpt-section-new": "Nueva unidá de traducción.\nNome: $1",
+ "tpt-section-deleted": "Unidá de traducción $1",
+ "tpt-diff-old": "Testu anterior",
+ "tpt-diff-new": "Testu nuevu",
+ "tpt-submit": "Marcar esta versión pa traducir",
+ "tpt-sections-oldnew": "Unidaes de traducción nueves e esistentes",
+ "tpt-sections-deleted": "Unidaes de traducción desaniciaes",
+ "tpt-sections-template": "Plantía de páxina de traducción",
+ "tpt-action-nofuzzy": "Nun invalidar les traducciones",
+ "tpt-badtitle": "El nome que-y disti a la páxina (\"$1\") nun ye un títulu válidu",
+ "tpt-nosuchpage": "La páxina $1 nun esiste",
+ "tpt-oldrevision": "$2 nun ye la cabera versión de la páxina [[:$1]].\nSólo les caberes versiones pueden marcase pa traducir.",
+ "tpt-notsuitable": "La páxina \"$1\" nun ye válida pa traducir.\nComprueba que tenga les etiquetes <nowiki><translate></nowiki> y una sintaxis válida.",
+ "tpt-saveok": "A páxina [[:$1]] marcose pa traducir con {{PLURAL:$2|una unidá de traducción|$2 unidaes de traducción}}.\nLa páxina agora puede <span class=\"plainlinks\">[$3 traducise]</span>.",
+ "tpt-saveok-first": "Pues [[Special:PageMigration|importar una traducción pre-esistente]] d'esta páxina (si la hai).",
+ "tpt-offer-notify": "Pue <span class=\"plainlinks\">[$1 avisar a los traductores]</span> sobre esta páxina.",
+ "tpt-showpage-intro": "Abaxo ta la llista de les unidaes de traducción nueves, esistentes y desaniciaes.\nEnantes de marcar esta versión pa traducir, comprueba que los cambios fechos nes unidaes de traducción seyan mínimos pa evitar trabayu innecesariu de los traductores.",
+ "tpt-mark-summary": "Marcó esta versión pa traducir",
+ "tpt-mark-nochanges": "Nun hai cambios por revisar. Marcar esta páxina pa traducir nun editará la páxina nin nenguna unidá de traducción esistente.",
+ "tpt-edit-failed": "Nun se pudo anovar la páxina: $1",
+ "tpt-duplicate": "El nome de la unidá de traducción $1 s'utiliza más d'una vegada.",
+ "tpt-invalid": "El nome $1 de la unidá traducción nun pue contener un guión baxu o una barra.",
+ "tpt-unmarked": "La páxina [[:$1]] yá nun ta marcada pa traducir.",
+ "tpt-list-nopages": "Nun hai páxina dala marcada pa traducir nin preparada pa marcase pa traducir.",
+ "tpt-new-pages-title": "Páxines propuestes pa traducción",
+ "tpt-old-pages-title": "Páxines en traducción",
+ "tpt-other-pages-title": "Páxines frañaes",
+ "tpt-new-pages": "{{PLURAL:$1|Esta páxina contién|Estes páxines contienen}} testu con etiquetes de traducción, pero denguna versión {{PLURAL:$1|d'esta páxina|d'estes páxines}} ta marcada pa traducir anguaño.",
+ "tpt-old-pages": "Dalguna versión {{PLURAL:$1|d'esta páxina|d'estes páxines}} se marcó pa traducir.",
+ "tpt-other-pages": "Hai {{PLURAL:$1|una versión vieya d'esta páxina marcada|delles versiones vieyes d'estes páxines marcaes}} pa traducir, pero {{PLURAL:$1|a cabera versión|les caberes versiones}} nun se {{PLURAL:$1|pue|pueden}} marcar pa traducir.",
+ "tpt-select-prioritylangs": "Llista de códigos de les llingües prioritaries separtaos por comes:",
+ "tpt-select-prioritylangs-force": "Torgar les traducciones a llingües distintes de les prioritaries",
+ "tpt-select-prioritylangs-reason": "Motivu:",
+ "tpt-sections-prioritylangs": "Llingües prioritaries",
+ "tpt-rev-mark": "marcar pa traducir",
+ "tpt-rev-unmark": "desaniciar de la traducción",
+ "tpt-rev-discourage": "desaconseyar",
+ "tpt-rev-encourage": "restaurar",
+ "tpt-rev-mark-tooltip": "Marcar la cabera versión d'esta páxina pa traducir.",
+ "tpt-rev-unmark-tooltip": "Desaniciar esta páxina de la traducción.",
+ "tpt-rev-discourage-tooltip": "Desaconseyar más traducciones d'esta páxina.",
+ "tpt-rev-encourage-tooltip": "Restaurar esta páxina a traducción normal.",
+ "translate-tag-translate-link-desc": "Traducir esta páxina",
+ "translate-tag-markthis": "Marcar esta páxina pa traducir",
+ "translate-tag-markthisagain": "Esta páxina tien <span class=\"plainlinks\">[$1 cambios]</span> dende que se <span class=\"plainlinks\">[$2 marcó pa traducir]</span> la última vegada.",
+ "translate-tag-hasnew": "Esta páxina contien <span class=\"plainlinks\">[$1 cambios]</span> que nun tan marcaos pa traducir.",
+ "tpt-translation-intro": "Esta páxina ye una <span class=\"plainlinks\">[$1 versión traducida]</span> de la páxina [[$2]] y la traducción ta completada nún $3%.",
+ "tpt-translation-intro-fuzzy": "Les traducciones anticuaes márquense d'esta manera.",
+ "tpt-languages-legend": "Otres llingües:",
+ "tpt-languages-zero": "Principiar la traducción nesta llingua",
+ "tpt-languages-nonzero": "$1 ($2% traducío)",
+ "tpt-tab-translate": "Traducir",
+ "tpt-target-page": "Esta páxina nun se pue anovar manualmente.\nEsta páxina ye una traducción de la páxina [[$1]] y la traducción pue anovase usando [$2 la ferramienta de traducción].",
+ "tpt-unknown-page": "Esti espaciu de nomes ta acutáu pa les traducciones de les páxines de conteníu.\nLa páxina que tas intentando editar paez que nun correspuende con denguna páxina marcada pa traducir.",
+ "tpt-translation-restricted": "Un alministrador de traducciones torgó la traducción d'esta páxina a esta llingua.\n\nMotivu: $1",
+ "tpt-discouraged-language-force-header": "Esta páxina nun puede traducise al $1.",
+ "tpt-discouraged-language-force-content": "Un alministrador de traducciones decidió qu'esta páxina sólo pue traducise al $1.",
+ "tpt-discouraged-language-header": "La traducción al $1 nun ye prioritaria pa esta páxina.",
+ "tpt-discouraged-language-content": "Un alministrador de traducciones decidió concentrar el trabayu de traducción nel $1.",
+ "tpt-discouraged-language-force": "<strong>Esta páxina nun pue traducise al $2.</strong>\n\nUn alministrador de traducciones decidió qu'esta páxina sólo pue traducise al $3.",
+ "tpt-priority-languages": "Un alministrador de traducciones definió les llingües prioritaries d'esti grupu como $1.",
+ "tpt-priority-languages-force": "Un alministrador de traducciones configuró les llingües prioritaries d'esti grupu como $1. Nun se permite traducir a otres llingües.",
+ "tpt-render-summary": "Anovando pa casar cola nueva versión de la páxina orixinal",
+ "aggregategroups": "Grupos d'agregación",
+ "tpt-aggregategroup-add": "Amestar",
+ "tpt-aggregategroup-save": "Guardar",
+ "tpt-aggregategroup-add-new": "Amestar un nuevu grupu d'agregación",
+ "tpt-aggregategroup-new-name": "Nome:",
+ "tpt-aggregategroup-new-description": "Descripción (opcional):",
+ "tpt-aggregategroup-remove-confirm": "¿Tas seguru de que quies desaniciar esti grupu agregáu?",
+ "tpt-aggregategroup-invalid-group": "El grupu nun esiste",
+ "tpt-aggregategroup-edit-name": "Nome:",
+ "tpt-aggregategroup-edit-description": "Descripción:",
+ "tpt-aggregategroup-update": "Guardar",
+ "tpt-aggregategroup-update-cancel": "Encaboxar",
+ "tpt-invalid-group": "Grupu inválidu",
+ "pt-parse-open": "Etiqueta &lt;translate> desequilibrada.\nPlantía de traducción: <pre>$1</pre>",
+ "pt-parse-close": "Etiqueta &lt;/translate> desequilibrada.\nPlantía de traducción: <pre>$1</pre>",
+ "pt-parse-nested": "Nun se permiten unidaes de traducción &lt;translate> añeraes.\nTestu de la etiqueta: <pre>$1</pre>",
+ "pt-shake-multiple": "Marcadores d'unidá de traducción múltiples pa una unidá de traducción.\nTestu de la unidá de traducción: <pre>$1</pre>",
+ "pt-shake-position": "Marcadores d'unidá de traducción en posición inesperada.\nTestu de la unidá de traducción: <pre>$1</pre>",
+ "pt-shake-empty": "Unidá de traducción balera pal marcador «$1».",
+ "log-description-pagetranslation": "Rexistru de les aiciones rellacionaes col sistema de traducción de páxines",
+ "log-name-pagetranslation": "Rexistru de traducción de páxines",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|marcó}} $3 pa traducir",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|quitó}} $3 del sistema de traducción",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|completó}}'l renomáu de la páxina traducible $3 a $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|alcontróse}} un problema al mover $3 a $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|completó}}'l desaniciu de la páxina traducible $3",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|nun pudo}} desaniciar $3 que pertenez a la páxina traducible $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|completó}}'l desaniciu de la páxina de traducción $3",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|nun pudo}} desaniciar $3 que pertenez a la páxina de traducción $4",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|afaló}} la traducción de $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|desaconseyó}} traducir $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|desanició}} les llingües prioritaries de la páxina traducible $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|configuró}} les llingües prioritaries pa la páxina traducible $3 a $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|llimitó}} les llingües pa la páxina traducible $3 a $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|amestó}} la páxina traducible $3 al grupu agregáu $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|desanició}} la páxina traducible $3 del grupu agregáu $4",
+ "log-action-filter-pagetranslation": "Tipu d'acción:",
+ "log-action-filter-pagetranslation-mark": "Marcar pa traducir",
+ "log-action-filter-pagetranslation-unmark": "Desaniciar de la traducción",
+ "log-action-filter-pagetranslation-move": "Tresllaos de páxina",
+ "log-action-filter-pagetranslation-delete": "Desanicios de páxines",
+ "log-action-filter-pagetranslation-encourage": "Invitación a traducir",
+ "log-action-filter-pagetranslation-discourage": "Invitación a nun traducir",
+ "log-action-filter-pagetranslation-prioritylanguages": "Cambéu d'idiomes prioritarios",
+ "log-action-filter-pagetranslation-aggregategroups": "Cambéu de grupos agregáu",
+ "pt-movepage-title": "Treslladar la páxina traducible $1",
+ "pt-movepage-blockers": "Nun se pue treslladar la páxina traducible a un nome nuevu {{PLURAL:$1|pol siguiente error|polos siguientes errores}}:",
+ "pt-movepage-block-base-invalid": "El nome de la páxina traducible de destín nun ye un títulu válidu.",
+ "pt-movepage-block-tp-invalid": "El títulu de la páxina de traducción de destín pa [[:$1]] sedría inválidu (¿demasiao llargu?).",
+ "pt-movepage-block-section-invalid": "El títulu de la páxina de destín pa «[[:$1]]» de la unidá de traducción sedría inválidu (¿demasiao llargu?).",
+ "pt-movepage-block-subpage-invalid": "El títulu de la subpáxina de destín pa [[:$1]] sedría inválidu (¿demasiao llargu?).",
+ "pt-movepage-list-pages": "Llista de páxines a treslladar",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Páxina|Páxines}} de traducción",
+ "pt-movepage-list-section": "{{PLURAL:$1|Páxina|Páxines}} de la unidá de traducción",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Subpáxina marcada|Subpáxines marcaes}} pa traducir",
+ "pt-movepage-list-translatable-note": "Estes páxines tienen de treslladase de manera separada.",
+ "pt-movepage-list-other": "{{PLURAL:$1|Otra subpáxina|Otres subpáxines}}",
+ "pt-movepage-list-count": "En total $1 {{PLURAL:$1|páxina|páxines}} a treslladar.",
+ "pt-movepage-legend": "Treslladar la páxina traducible",
+ "pt-movepage-current": "Nome actual:",
+ "pt-movepage-new": "Nome nuevu:",
+ "pt-movepage-reason": "Motivu:",
+ "pt-movepage-subpages": "Treslladar toles subpáxines",
+ "pt-movepage-action-check": "Comprobar si'l treslláu ye posible",
+ "pt-movepage-action-perform": "Facer el treslláu",
+ "pt-movepage-action-other": "Camudar el destín",
+ "pt-movepage-intro": "Esta páxina especial te permite treslladar páxines que tan marcaes pa traducir.\nL'aición de treslláu nun sedrá inmediata, porque ye necesario mover munches páxines.\nMentanto se treslladen les páxines, nun ye posible interactuar coles mesmes.\nLos fallos quedarán rexistraos nel [[Special:Log/pagetranslation|rexistru de traducción de páxines]] y tendrán de reparase a mano.",
+ "pt-movepage-logreason": "Parte de la páxina traducible «$1».",
+ "pt-movepage-started": "Mira nel [[Special:Log/pagetranslation|rexistru de traducción de páxines]] dientro d'un momentu pa ver los errores y mensaxe de completáu.",
+ "pt-locked-page": "Esta páxina ta bloquiada porque ta treslladandose la páxina traducible.",
+ "pt-deletepage-lang-title": "Desaniciando la páxina de traducción «$1».",
+ "pt-deletepage-tp-title": "Desaniciando la páxina traducible «$1».",
+ "pt-deletepage-invalid-title": "La páxina especificada nun ye válida.",
+ "pt-deletepage-invalid-text": "La páxina especificada nun ye una páxina traducible nin una páxina de traducción.",
+ "pt-deletepage-action-check": "Llista de páxines a desaniciar",
+ "pt-deletepage-action-perform": "Facer el desaniciu",
+ "pt-deletepage-action-other": "Camudar el destín",
+ "pt-deletepage-lang-legend": "Desaniciar la páxina de traducción",
+ "pt-deletepage-tp-legend": "Desaniciar la páxina traducible",
+ "pt-deletepage-any-legend": "Desaniciar la páxina traducible o la páxina de traducción",
+ "pt-deletepage-current": "Nome de la páxina:",
+ "pt-deletepage-reason": "Motivu:",
+ "pt-deletepage-subpages": "Desaniciar toles subpáxines",
+ "pt-deletepage-list-pages": "Llista de páxines a desaniciar",
+ "pt-deletepage-list-translation": "Páxines de traducción",
+ "pt-deletepage-list-section": "Páxines de la unidá de traducción",
+ "pt-deletepage-list-other": "Otres subpáxines",
+ "pt-deletepage-list-count": "En total $1 {{PLURAL:$1|páxina|páxines}} a desaniciar.",
+ "pt-deletepage-full-logreason": "Parte de la páxina traducible «$1».",
+ "pt-deletepage-lang-logreason": "Parte de la páxina de traducción «$1».",
+ "pt-deletepage-started": "Por favor, mira nel [[Special:Log/pagetranslation|rexistru de traducción de páxines]] pa ver los errores y mensaxe de completáu.",
+ "pt-deletepage-intro": "Esta páxina especial te permite desaniciar una páxina traducible entera o una páxina individual de traducción a una llingua.\nL'aición de desaniciu nun sedrá inmediata, porque tamién se desaniciarán toles páxines que dependan d'elles.\nLos fallos quedarán rexistraos nel [[Special:Log/pagetranslation|rexistru de traducción de páxines]] y tendrán de reparase a mano.",
+ "pagemigration": "Migración de la páxina de traducción",
+ "pagemigration-summary": "Especifica una páxina de traducción y restaura cualquier traducción fecha antes de que s'activara nesa páxina el sistema Translate.",
+ "pm-import-button-label": "Importar",
+ "pm-savepages-button-label": "Guardar",
+ "pm-cancel-button-label": "Encaboxar",
+ "pm-page-does-not-exist": "$1 nun esiste",
+ "pm-old-translations-missing": "$1 nun contien traducciones antigües",
+ "pm-extra-units-warning": "Pue haber otres unidaes presentes. Por favor, casa correutamente les unidaes d'orixe coles de traducción",
+ "pm-pagename-missing": "Escribi'l nome de la páxina",
+ "pm-add-icon-hover-text": "Amiesta una unidá abaxo",
+ "pm-swap-icon-hover-text": "Cambiar cola unidá d'abaxo",
+ "pm-delete-icon-hover-text": "Desaniciar unidá",
+ "pm-pagetitle-placeholder": "Escribe'l títulu de la páxina",
+ "pm-pagetitle-invalid": "Escribe un títulu de páxina válidu. Tien de tener el formatu <nome-de-páxina>/<códigu-de-llingua>.",
+ "pm-pagetitle-missing": "Escribe'l títulu de la páxina.",
+ "pm-langcode-missing": "Paez que falta'l códigu de llingua nel títulu. Escribe'l títulu de la páxina col formatu <page-name>/<language-code>.",
+ "pm-summary-import": "Traducción importada usando [[Special:PageMigration|migración de páxina]]",
+ "pm-on-import-message-text": "Importáronse les traducciones antigües. Usa les opciones añadir, cambiar y desaniciar p'axustar les unidaes de traducción y fai click nel botón \"{{int:pm-savepages-button-label}}\" pa guardales. Fai click nel botón \"{{int:pm-cancel-button-label}}\" pa descartales.",
+ "pm-on-save-message-text": "Guardáronse les unidaes de traducción. Agora puedes escribir el títulu d'una nueva páxina de traducción pa migrales o facer cambios nes unidaes de más abaxo y guardar una nueva revisión.",
+ "tpt-translate-title": "Permitir traducir el títulu de la páxina",
+ "pp-save-summary": "Preparada la páxina pa traducción",
+ "pagepreparation": "Preparar la páxina pa traducción",
+ "pp-pagename-placeholder": "Escribi'l nome de la páxina",
+ "pp-prepare-button-label": "Preparar",
+ "pp-save-button-label": "Guardar",
+ "pp-cancel-button-label": "Encaboxar",
+ "pp-save-message": "Guardóse la páxina. Pues [$1 editala].",
+ "pp-prepare-message": "Preparóse la páxina pa traducción. Mira les diferencies más abaxo. ¡Fai clic nel botón «{{int:pp-save-button-label}}» si ta correuto!",
+ "pp-already-prepared-message": "Paez que la páxina yá se preparó pa traducir. Nun hai cambios comparando cola versión anterior.",
+ "pp-diff-error": "Asocedió un error al recuperar les diferencies del sirvidor.",
+ "pp-pagename-missing": "Escribi'l nome de la páxina",
+ "pp-diff-old-header": "Testu fonte",
+ "pp-diff-new-header": "Testu preparáu",
+ "tpt-unlink-confirm": "Confirma que realmente quies desaniciar esta páxina del sistema de traducción.\nEl selector de llingua y los nomes traducíos de la páxina dexarán de funcionar.\nLes páxines de traducción podrán editase.",
+ "tpt-unlink-button": "Desaniciar de la traducción",
+ "tpt-unlink-summary": "Páxina desaniciada de la traducción.",
+ "tpt-generic-confirm": "Confirma l'aición.",
+ "tpt-generic-button": "Confirmar"
+}
diff --git a/Translate/i18n/pagetranslation/atj.json b/Translate/i18n/pagetranslation/atj.json
new file mode 100644
index 00000000..2b37068d
--- /dev/null
+++ b/Translate/i18n/pagetranslation/atj.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Benoit Rochon",
+ "Nehirowisiw"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% nisisatamowisanihikatew)",
+ "tpt-aggregategroup-new-description": "Kotak matci avant e witcikemakak",
+ "tpt-aggregategroup-edit-description": "E witcikemakak:",
+ "pt-deletepage-current": "Icinikatamowin Ickwemakinikan:"
+}
diff --git a/Translate/i18n/pagetranslation/av.json b/Translate/i18n/pagetranslation/av.json
new file mode 100644
index 00000000..feb62172
--- /dev/null
+++ b/Translate/i18n/pagetranslation/av.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gazimagomedov",
+ "Omarov M.",
+ "Аль-Гимравий"
+ ]
+ },
+ "tpt-invalid-group": "Бегьулареб группа",
+ "pt-movepage-new": "ЦӀияб цӀар:",
+ "pt-deletepage-action-perform": "Гилдизаби тӀубазе",
+ "pp-prepare-button-label": "ХӀадур гьабизе",
+ "pp-save-button-label": "Басмалъизабизе",
+ "pp-diff-old-header": "Иццалъулаб текст",
+ "pp-diff-new-header": "ХӀадурараб текст"
+}
diff --git a/Translate/i18n/pagetranslation/avk.json b/Translate/i18n/pagetranslation/avk.json
new file mode 100644
index 00000000..9e1cf219
--- /dev/null
+++ b/Translate/i18n/pagetranslation/avk.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Axel xadolik"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ( $2% kalavayan )"
+}
diff --git a/Translate/i18n/pagetranslation/awa.json b/Translate/i18n/pagetranslation/awa.json
new file mode 100644
index 00000000..182d3f9b
--- /dev/null
+++ b/Translate/i18n/pagetranslation/awa.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "1AnuraagPandey",
+ "Ajeetsinghawadhi"
+ ]
+ },
+ "pagetranslation": "पन्ना अनुवाद",
+ "tpt-languages-nonzero": "$1 ($2% अनूदित)"
+}
diff --git a/Translate/i18n/pagetranslation/az.json b/Translate/i18n/pagetranslation/az.json
new file mode 100644
index 00000000..a8d9b261
--- /dev/null
+++ b/Translate/i18n/pagetranslation/az.json
@@ -0,0 +1,71 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cekli829",
+ "Khan27",
+ "Toghrul Rahimli",
+ "Vesely35",
+ "Wertuose"
+ ]
+ },
+ "pagetranslation": "Səhifə tərcüməsi",
+ "right-pagetranslation": "Tərcümə üçün səhifənin versiyalarını işarələ",
+ "action-pagetranslation": "tərcümə oluna bilən səhifələri idarə et",
+ "tpt-section": "Tərcümə bölümü $1",
+ "tpt-section-new": "Yeni tərcümə bölümü.\nAd: $1",
+ "tpt-section-deleted": "Tərcümə bölümü $1",
+ "tpt-diff-old": "Əvvəlki mətn",
+ "tpt-diff-new": "Yeni mətn",
+ "tpt-submit": "Bu versiyanı tərcümə üçün işarələ",
+ "tpt-sections-oldnew": "Yeni və mövcud tərcümə bölümləri",
+ "tpt-sections-deleted": "Tərcümə bölümləri silindi",
+ "tpt-sections-template": "Tərcümə səhifəsi şablonu",
+ "tpt-action-nofuzzy": "Tərcümələri etibarsız etməyin",
+ "tpt-badtitle": "Verilmiş səhifə adı ($1) etibarlı ad deyil",
+ "tpt-nosuchpage": "$1 səhifəsi mövcud deyil",
+ "tpt-oldrevision": "$2 [[:$1]] səhifəsinin son versiyası deyil.\nYalnız ən son versiyalar tərcümə üçün işarə oluna bilər.",
+ "tpt-notsuitable": "$1 səhifəsi tərcümə üçün uyğun deyil.\n<nowiki><translate></nowiki> etiketlərinə və etibarlı bir sintaksisə sahib olduğundan əmin olun.",
+ "tpt-saveok": "Səhifə [[:$1]] $2 ilə tərcümə üçün qeyd edildi {{PLURAL:$2|tərcümə vahidi|tərcümə vahidləri}}.\nSəhifə indi <span class=\"plainlinks\">[$3 tərcümə]</span> edilə bilər.",
+ "tpt-offer-notify": "Bu səhifə haqqında <span class=\"plainlinks\">[$1 tərcüməçilərə məlumat ver]</span>ə bilərsiniz.",
+ "tpt-showpage-intro": "Aşağıda yeni, mövcud və silinmiş tərcümə bölmələri verilmişdir.\nTərcümə üçün bu versiyanı qeyd etməzdən əvvəl, tərcüməçilər üçün lazımsız işlərin qarşısını almaq üçün tərcümə bölmələrində edilən dəyişikliklərin minimuma endirildiyini yoxlayın.",
+ "tpt-mark-summary": "Bu versiya tərcümə üçün qeyd edilmişdir",
+ "tpt-mark-nochanges": "Baxış üçün dəyişiklik yoxdur. Bu səhifəni tərcümə üçün işarələmək nə səhifəni, nə də mövcud tərcümə bölməsini düzəldə bilməz.",
+ "tpt-edit-failed": "Bu səhifəni yeniləmək olmur: $1",
+ "tpt-duplicate": "Tərcümə vahidinin adı $1, bir dəfədən çox istifadə olunur.",
+ "tpt-invalid": "Tərcümə vahidinin adı $1, alt ehtiva etməməli və ya kəsik olmamalıdır.",
+ "tpt-unmarked": "Səhifə [[:$1]] artıq tərcümə üçün qeyd olunmur.",
+ "tpt-list-nopages": "Tərcümə üçün heç bir səhifə qeyd olunmur və ya tərcümə üçün qeyd olunmağa hazırdır.",
+ "tpt-new-pages-title": "Tərcümə üçün təklif olunan səhifələr",
+ "tpt-old-pages-title": "Tərcümə prosesindəki səhifələr",
+ "tpt-other-pages-title": "Sınıq səhifələr",
+ "tpt-new-pages": "{{PLURAL:$1|Bu səhifə|Bu səhifələr}} tərcümə etiketləri olan mətn {{PLURAL:$1|ehtiva edir|ehtiva edir}}, lakin bu {{PLURAL:$1|səhifənın|səhifələrın}} heç bir versiyası tərcümə üçün qeyd olunmamışdır.",
+ "tpt-old-pages": "Bu {{PLURAL:$1|səhifənın|səhifələrın}} bəzi versiyaları tərcümə üçün qeyd edilmişdir.",
+ "tpt-other-pages": "{{PLURAL:$1|Bu səhifənin köhnə bir versiyası|Bu səhifələrin köhnə versiyaları}} tərcümə üçün qeyd edilmişdir,\nancaq ən yeni {{PLURAL:$1|versiya|versiyaları}} tərcümə üçün qeyd edilə bilməz.",
+ "tpt-select-prioritylangs": "Dil kodlarının vergül ilə ayrılmış siyahısı:",
+ "tpt-select-prioritylangs-force": "Prioritet dillərdən başqa dillərə tərcümələrin qarşısını alın",
+ "tpt-select-prioritylangs-reason": "Səbəb:",
+ "tpt-sections-prioritylangs": "Prioritet dillər",
+ "tpt-rev-mark": "tərcümə üçün işarədir",
+ "tpt-rev-unmark": "tərcümədən çıxarın",
+ "tpt-rev-discourage": "imtina et",
+ "tpt-rev-encourage": "bərpa edin",
+ "tpt-rev-mark-tooltip": "Tərcümə üçün bu səhifənin son versiyasını qeyd edin.",
+ "tpt-rev-unmark-tooltip": "Bu səhifəni tərcümədən çıxarın.",
+ "tpt-rev-discourage-tooltip": "Bu səhifədəki tərcümələri imtina edin.",
+ "tpt-rev-encourage-tooltip": "Bu səhifəni normal tərcüməyə bərpa edin.",
+ "translate-tag-translate-link-desc": "Bu səhifəni tərcümə et",
+ "translate-tag-markthis": "Bu versiyanı tərcümə üçün işarələ",
+ "tpt-languages-nonzero": "$1 ($2% tərcümə edilib)",
+ "aggregategroups": "Aqreqat qrupları",
+ "tpt-aggregategroup-add": "Əlavə et",
+ "tpt-aggregategroup-save": "Saxla",
+ "tpt-aggregategroup-add-new": "Yeni aqreqat qrupu əlavə et",
+ "tpt-aggregategroup-new-name": "Ad:",
+ "tpt-aggregategroup-new-description": "İzah (məcburi deyil):",
+ "tpt-aggregategroup-remove-confirm": "Bu aqreqat qrupunu silmək istədiyinizdən əminsiniz?",
+ "tpt-aggregategroup-invalid-group": "Qrup mövcud deyil",
+ "pt-movepage-new": "Yeni ad:",
+ "pt-movepage-reason": "Səbəb:",
+ "pt-deletepage-current": "Səhifə adı:",
+ "pt-deletepage-reason": "Səbəb:"
+}
diff --git a/Translate/i18n/pagetranslation/azb.json b/Translate/i18n/pagetranslation/azb.json
new file mode 100644
index 00000000..747fa3aa
--- /dev/null
+++ b/Translate/i18n/pagetranslation/azb.json
@@ -0,0 +1,130 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alp Er Tunqa",
+ "Amir a57",
+ "Ebrahimi-amir",
+ "Mousa"
+ ]
+ },
+ "pagetranslation": "صحیفه چئویرمه‌سی",
+ "right-pagetranslation": "صحیفه‌لرین نوسخه‌لرینی چئویرمک اوچون نیشانلا",
+ "action-pagetranslation": "چئویرمه‌لی صحیفه‌لری ایداره ائت",
+ "tpt-section": "چئویرمه بیریمی $1",
+ "tpt-section-new": "یئنی چئویرمه بیریمی.\nآد: $1",
+ "tpt-section-deleted": "چئویرمه بیریمی $1",
+ "tpt-diff-old": "قاباقکی یازی",
+ "tpt-diff-new": "یئنی یازی",
+ "tpt-submit": "بو نوسخه‌نی چئویرمگه نیشانلا",
+ "tpt-sections-oldnew": "یئنی و اولان چئویرمه بیریملری",
+ "tpt-sections-deleted": "سیلینمیش چئویرمه بیریملری",
+ "tpt-sections-template": "چئویرمک صحیفه‌سی شابلونو",
+ "tpt-action-nofuzzy": "چئویرمه‌لری اعتیبارسیز ائتمه",
+ "tpt-badtitle": "وئریلمیش صحیفه آدی ($1) گئچرلی بیر باشلیق دئییل",
+ "tpt-nosuchpage": "$1 صفحه‌سی یوخدور",
+ "tpt-oldrevision": "$2، [[:$1]] صحیفه‌سینین سون نوسخه‌سی دئییل.\nیالنیز سون وئرسیالاری چئویرمگه نیشانلاماق اولا بیلر.",
+ "tpt-notsuitable": "$1 صحیفه‌سی چئویرمگه اویغون دئییل.\nآرخایین اولون اونون <nowiki><translate></nowiki> اِتیکِتلری و گئچرلی سینتکسی واردیر.",
+ "tpt-saveok": "[[:$1]] صحیفه‌سی {{PLURAL:$2|بیر|$2}} چئویرمک بیریمی‌له چئویرمگه نیشانلانیب‌دیر.\nبو صحیفه‌نی ایندی <span class=\"plainlinks\">[$3 چئویرمک اولا بیلر]</span>.",
+ "tpt-showpage-intro": "آشاغیدا یئنی، اولان و سیلینن چئویرمه بیریملری لیست اولوبلار.\nبو نوسخه‌نی چئویرمگه نیشانلاماقدان قاباق، باخین کی چئویرمک بیریملرینه اولان دَییشیکلیکلر ان آز اولسون کی چئویرنلره آرتیق گرکسیز ایشین قاباغی آلینسین.",
+ "tpt-mark-summary": "بو نوسخه‌نی چئویرمگه نیشانلادی",
+ "tpt-edit-failed": "صحیفه گونجل‌لننمه‌دی: $1",
+ "tpt-duplicate": "$1 چئویرمک بیریمی آدی بیر دفعه‌دن چوخ ایشلنیب‌دیر.",
+ "tpt-unmarked": "$1 صحیفه‌سی داها چئویرمگه نیشانلانماییب‌دیر.",
+ "tpt-list-nopages": "هئچ بیر صحیفه چئویرمگه نیشانلانماییب‌دیر یادا چئویرمگه حاضیر دئییل.",
+ "tpt-new-pages-title": "چئویرمگه اؤنریلن صحیفه‌لر",
+ "tpt-old-pages-title": "چئویرمه‌ده صحیفه‌لر",
+ "tpt-other-pages-title": "سینمیش صحیفه‌لر",
+ "tpt-new-pages": "بو {{PLURAL:$1|صحیفه‌ده|صحیفه‌لرده}} چئویرمک اِتیکِتلری اولان یازیلار واردیر، اما ایندی بو {{PLURAL:$1|صحیفه‌نین|صحیفه‌لرین}} هئچ بیر {{PLURAL:$1|نوسخه‌سی|نوسخه‌لری}} چئویرمگه نیشانلانماییب‌دیر.",
+ "tpt-old-pages": "بو {{PLURAL:$1|صحیفه‌نین|صحیفه‌لرین}} بعضی نوسخه‌لری چئویرمگه نیشانلانیب‌دیر.",
+ "tpt-other-pages": "بو {{PLURAL:$1|صحیفه‌نین بیر اسکی نوسخه‌سی|صحیفه‌لرین اسکی نوسخه‌لری}} چئویرمگه نیشانلانیب‌دیر،\nاما سون {{PLURAL:$1|نوسخه چئویرمگه نیشانلانا بیلمز|نوسخه‌لر چئویرمگه نیشانلانا بیلمزلر}}.",
+ "tpt-select-prioritylangs": "کاما ایله آیریلمیش اؤنجه‌لیک دیل کودلاری:",
+ "tpt-select-prioritylangs-force": "اؤنجه‌لیک دیل‌لردن سونراکی دیل‌لره چئویرمه‌نین قاباغینی آل",
+ "tpt-select-prioritylangs-reason": "ندن:",
+ "tpt-sections-prioritylangs": "اؤنجه‌لیک دیل‌لری",
+ "tpt-rev-mark": "چئویرمگه نیشانلا",
+ "tpt-rev-unmark": "چئویرمک‌دن سیل",
+ "tpt-rev-discourage": "توصیه ائتمه",
+ "tpt-rev-encourage": "قایتار",
+ "tpt-rev-mark-tooltip": "بو صحیفه‌نین سون نوسخه‌سینی چئویرمگه نیشانلا.",
+ "tpt-rev-unmark-tooltip": "بو صحیفه‌نی چئویرمک‌دن سیل.",
+ "tpt-rev-discourage-tooltip": "بو صحیفه‌یه داها آرتیق چئویرمگی توصیه ائتمه.",
+ "tpt-rev-encourage-tooltip": "بو صحیفه‌نی نورمال چئویرمگه قایتار.",
+ "translate-tag-translate-link-desc": "یو لاییحه‌نی چئویر",
+ "translate-tag-markthis": "بو صحیفه‌نی چئویرمگه نیشانلا",
+ "translate-tag-markthisagain": "بو صحیفه‌نین سون دفعه <span class=\"plainlinks\">[$2 چئویرمگه نیشانلان]</span>اندان بویانا <span class=\"plainlinks\">[$1 دَییشیکلیکلر]</span>ی واردیر.",
+ "translate-tag-hasnew": "بو صحیفه‌نین <span class=\"plainlinks\">[$1 دَییشیکلیکلری]</span> واردیر کی چئویرمگه نیشانلانماییب‌لار.",
+ "tpt-translation-intro": "بو صحیفه [[$2]] صحیفه‌سینین <span class=\"plainlinks\">[$1 چئویریلمیش نوسخه‌سی]</span>‌دیر و $3٪ چئویرمگی قاباغا گئدیب‌دیر.",
+ "tpt-translation-intro-fuzzy": "تاریخی گئچمیش چئویرمه‌لر بونون کیمی نیشانلانیبلار.",
+ "tpt-languages-legend": "آیری دیل‌لر:",
+ "tpt-languages-zero": "بو دیله چئویرمگه باشلا",
+ "tpt-languages-nonzero": "$1 ($2% ترجومه اولوب)",
+ "tpt-target-page": "بو صحیفه‌نی ال ایله گونج‌لَمک اولماز.\nبو صحیفه [[$1]] صحیفه‌سینین چئویرمه‌سیدیر و [$2 چئویرمک آراجی] ایله چئویریله بیلر.",
+ "tpt-unknown-page": "بو آدفضاسی مقاله‌لری چئویرمگه رِزِرو اولوب‌دور.\nسیز چئویرمگه چالیشدیغینیز صحیفه، هئچ بیر چئویرمگه نیشانلانمیش صحیفه‌یه مطابق نظره گلمیر.",
+ "tpt-translation-restricted": "بو صحیفه‌نین بو دیله چئویرمه‌سی بیر چئویرمک ایداره‌چیسی ایله قاباغی آلینیب‌دیر.\n\nندن: $1",
+ "tpt-discouraged-language-force": "<strong>بو صحیفه $2-ه چئویریله بیلمز.</strong>\n\nبیر چئویرمک ایداره‌چیسی بئله قرار آلیب کی بو صحیفه یالنیز $3-ه چئویریله بیلر.",
+ "tpt-priority-languages": "بیر چئویرمک ایداره‌چیسی، بو قروپون اؤنجه‌لیک دیلینی $1 سئچیب‌دیر.",
+ "tpt-render-summary": "قایناق صحیفه‌نین یئنی نوسخه‌سی ایله تطبیق اوچون گونجل‌لنیر",
+ "aggregategroups": "بیرلشدیریلمیش قروپلار",
+ "tpt-aggregategroup-add": "آرتیر",
+ "tpt-aggregategroup-save": "ذخیره ائت",
+ "tpt-aggregategroup-add-new": "بیر یئنی بیرلشمه قروپو آرتیر",
+ "tpt-aggregategroup-new-name": "آد:",
+ "tpt-aggregategroup-new-description": "توضیح (ایستگه باغلی):",
+ "tpt-aggregategroup-remove-confirm": "بو بیرلشمه قروپونو سیلمکدن آرخایینسینیز؟",
+ "tpt-aggregategroup-invalid-group": "قروپ یوخدور",
+ "pt-parse-open": "بالانس اولمامیش &lt;translate> اِتیکِتی.\nچئویرمک شابلونو: <pre>$1</pre>",
+ "pt-parse-close": "بالانس اولمامیش &lt;/translate> اِتیکِتی.\nچئویرمک شابلونو: <pre>$1</pre>",
+ "pt-parse-nested": "بیر بیری ایچینده اولان &lt;translate> چئویرمه بیریملرینه ایجازه یوخدور.\nاِتیکِت یازیسی: <pre>$1</pre>",
+ "pt-shake-multiple": "بیر چئویرمه بیریمی اوچون، چوخلو چئویرمه بیریم نیشانلایانلاری.\nچئویرمه بیریم یازیسی: <pre>$1</pre>",
+ "pt-shake-position": "گؤزلنیمه‌ین یئرده چوخلو بیریم نیشانلایانلاری.\nچئویرمه بیریم یازیسی: <pre>$1</pre>",
+ "pt-shake-empty": "«$1» نیشانلایانی اوچون بوش چئویرمه بیریمی.",
+ "log-description-pagetranslation": "صحیفه چئویرمه سیستِمینه ایلگیلی ایشلرین قئیدلری",
+ "log-name-pagetranslation": "صحیفه چئویرمک قئیدلری",
+ "logentry-pagetranslation-mark": "$1، $3-ی چئویرمگه {{GENDER:$2|نیشانلاندیریب}}",
+ "logentry-pagetranslation-unmark": "$1، $3-ی چئویرمک‌دن {{GENDER:$2|سیلدی}}",
+ "pt-movepage-title": "«$1» چئویریله بیلن صحیفه‌نین آدینی دَییشدیر",
+ "pt-movepage-blockers": "بو {{PLURAL:$1|خطا|خطالار}} اوچون چئویریله بیلن صحیفه‌نین آدی دَییشدیریلنمیر:",
+ "pt-movepage-block-base-invalid": "هدف چئویریله بیلن صحیفه‌نین آدی، گئچرلی بیر باشلیق دئییل.",
+ "pt-movepage-block-tp-invalid": "«[[:$1]]» اوچون هدف چئویرمک صحیفه‌سی باشلیغی گئچرسیز اولار (چوخ اوزون؟).",
+ "pt-movepage-block-section-invalid": "چئویرمک بیریمی اوچون «[[:$1]]»-ه هدف صحیفه باشلیغی گئچرسیز اولار (چوخ اوزون؟).",
+ "pt-movepage-block-subpage-invalid": "«[[:$1]]» اوچون هدف آلت‌صحیفه باشلیغی گئچرسیز اولار (چوخ اوزون؟).",
+ "pt-movepage-list-pages": "آدینی دَییشدیره‌جک صحیفه‌لرین لیستی",
+ "pt-movepage-list-translation": "چئویرمه {{PLURAL:$1|صفحه‌سی|صفحه‌لری}}",
+ "pt-movepage-list-section": "چئویرمک بیریم {{PLURAL:$1|صحیفه‌سی|صحیفه‌لری}}",
+ "pt-movepage-list-other": "آیری آلت‌{{PLURAL:$1|صحیفه|صحیفه‌لر}}",
+ "pt-movepage-list-count": "توپلام‌دا آدینی دَییشدیرمگه {{PLURAL:$1|بیر|$1}} صحیفه.",
+ "pt-movepage-legend": "دَییشدیریله بیلن صحیفه‌نین آدینی دَییشدیر",
+ "pt-movepage-current": "ایندیکی آد:",
+ "pt-movepage-new": "یئنی آد:",
+ "pt-movepage-reason": "ندن:",
+ "pt-movepage-subpages": "بوتون آلت‌صحیفه‌لرین آدلارینی دَییشدیر",
+ "pt-movepage-action-check": "آدی دَییشدیرمگین ایمکانی اولماغینی یوخلا",
+ "pt-movepage-action-perform": "آدی دَییشدیر",
+ "pt-movepage-action-other": "هدفی دَییشدیر",
+ "pt-movepage-intro": "بو اؤزل صحیفه سیزه ایجازه وئریر چئویرمگه نیشانلانان صحیفه‌لرین آدلارینی دَییشدیره‌سینیز.\nآدی دَییشدیرمک ایشی، بیر آن‌دا اولمایاجاق، نییه کی چوخلو صحیفه‌لرین آدلاری دَییشدیرمک گرکلی اولا بیلر.\nصحیفه‌لرین آدلاری دَییشدیریلنده، او صحیفه‌لرله ایشله‌مک ایمکانی اولماز.\nموفقیت‌سیزلیکلر [[Special:Log/pagetranslation|صحیفه چئویرمک قئیدلرینده]] قئید اولوناجاقلار و اونلاری ال ایله دوزلتمک گرکلی‌دیر.",
+ "pt-movepage-logreason": "«$1» چئویریله بیلن صحیفه‌نین پارچاسی.",
+ "pt-movepage-started": "اساس صحیفه ایندی آدی دَییشدیریلیب‌دیر.\nلوطفاً خطالار و قورتارماق مئساژلاری اوچون [[Special:Log/pagetranslation|صحیفه چئویرمک قئیدلری]]نی یوخلایین.",
+ "pt-locked-page": "ایندی چئویریله بیلن صحیفه‌نین آدی دَییشدیلماقدا اولماغینا گؤره، بو صحیفه قیفیل‌لانیب‌دیر.",
+ "pt-deletepage-lang-title": "«$1» چئویرمک صحیفه‌سی سیلینیر.",
+ "pt-deletepage-tp-title": "«$1» چئویریله بیلن صحیفه سیلینیر.",
+ "pt-deletepage-invalid-title": "بیلیندیریلمیش صحیفه گئچرسیزدیر.",
+ "pt-deletepage-invalid-text": "بیلندیریلمیش صحیفه نه چئویرمک صحیفه‌سی‌دیر و نه چئویریله بیلن صحیفه.",
+ "pt-deletepage-action-check": "سیلینه‌جک صحیفه‌لری لیست ائت",
+ "pt-deletepage-action-perform": "سیلمه‌نی ائت",
+ "pt-deletepage-action-other": "هدفی دَییشدیر",
+ "pt-deletepage-lang-legend": "چئویرمک صفحه‌سینی سیل",
+ "pt-deletepage-tp-legend": "چئویریله بیلن صحیفه‌نی سیل",
+ "pt-deletepage-any-legend": "چئویریله بیلن صحیفه یادا چئویرمک صحیفه‌سینی سیل",
+ "pt-deletepage-current": "صحیفه آدی:",
+ "pt-deletepage-reason": "ندن:",
+ "pt-deletepage-subpages": "بوتون آلت‌صحیفه‌لری سیل",
+ "pt-deletepage-list-pages": "سیلینه‌جک صحیفه‌لرین لیستی",
+ "pt-deletepage-list-translation": "چئویرمک صحیفه‌لری",
+ "pt-deletepage-list-section": "چئویرمک بیریم صحیفه‌لری",
+ "pt-deletepage-list-other": "آیری آلت‌صحیفه‌لر",
+ "pt-deletepage-list-count": "توپلام‌دا سیلمگه {{PLURAL:$1|بیر|$1}} صحیفه.",
+ "pt-deletepage-full-logreason": "«$1» چئویریله بیلن صحیفه‌نین پارچاسی.",
+ "pt-deletepage-lang-logreason": "«$1» چئویرمک صحیفه‌سینین پارچاسی.",
+ "pt-deletepage-started": "لوطفاً خطالار و قورتارماقلار مئساژلاری اوچون [[Special:Log/pagetranslation|صحیفه چئویرمک قئیدلری]]نه باخین.",
+ "pt-deletepage-intro": "بو اؤزل صحیفه سیزه ایجازه وئریر بیر بوتون چئویریله بیلن صحیفه‌نی، یا دا بیر دیل‌ده بیر تک چئویرمک صحیفه‌سینی سیله‌سینیز.\nسیلمک ایشی بیر آن‌دا اولمایاجاق‌دیر، نییه کی اونلارا دایانان بوتون صحیفه‌لر ده گرک سیلینسینلر.\nموفقیت‌سیزلیکلر [[Special:Log/pagetranslation|صحیفه چئویرمک قئیدلری]]نده قئید اولوناجاقلار و اونلاری ال ایله دوزلتمک گرکلی‌دیر."
+}
diff --git a/Translate/i18n/pagetranslation/ba.json b/Translate/i18n/pagetranslation/ba.json
new file mode 100644
index 00000000..4d2201b5
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ba.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Haqmar",
+ "Kaganer",
+ "Kareyac",
+ "Рустам Нурыев"
+ ]
+ },
+ "translate-tag-translate-link-desc": "Был битте тәржемә итергә",
+ "tpt-translation-intro": "Был бит — [[$2]] бите <span class=\"plainlinks\">[$1 тәржемәһе]</span>. Тәржемә $3% үтәлгән",
+ "tpt-languages-legend": "Башҡа телдәр:",
+ "tpt-languages-nonzero": "$1 ($2% тәржемә ителгән)",
+ "tpt-aggregategroup-add": "Өҫтәргә",
+ "pt-movepage-list-other": "Башҡа эске биттәр",
+ "pt-movepage-legend": "Тәржемә итеп булған биттәрҙең исемен үҙгәртергә",
+ "pt-movepage-current": "Хәҙерге исеме:",
+ "pt-movepage-new": "Яңы исеме:",
+ "pt-movepage-reason": "Сәбәп:",
+ "pt-movepage-subpages": "Бар эске биттәрҙең исемен үҙгәртергә",
+ "pt-movepage-action-perform": "Исемен үҙгәртергә",
+ "pt-movepage-action-other": "Маҡсатты үҙгәртергә",
+ "pt-deletepage-action-check": "Юйыласаҡ биттәр исемлеге",
+ "pt-deletepage-action-perform": "Юйырға",
+ "pt-deletepage-action-other": "Маҡсатты үҙгәртергә",
+ "pt-deletepage-lang-legend": "Тәржемә битен юйырға",
+ "pt-deletepage-tp-legend": "Тәржемә итеп булған битте юйырға"
+}
diff --git a/Translate/i18n/pagetranslation/ban-bali.json b/Translate/i18n/pagetranslation/ban-bali.json
new file mode 100644
index 00000000..3ba6bc68
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ban-bali.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chinamoonroll"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% ᬓᬵᬮᬶᬄᬪᬵᬱ)"
+}
diff --git a/Translate/i18n/pagetranslation/ban.json b/Translate/i18n/pagetranslation/ban.json
new file mode 100644
index 00000000..d2c1e953
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ban.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chinamoonroll",
+ "Joseagush"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% sampun kasalinin)",
+ "pt-movepage-talkpages": "Gingsirang kaca pabligbagan"
+}
diff --git a/Translate/i18n/pagetranslation/bar.json b/Translate/i18n/pagetranslation/bar.json
new file mode 100644
index 00000000..ce25b15a
--- /dev/null
+++ b/Translate/i18n/pagetranslation/bar.json
@@ -0,0 +1,36 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mucalexx"
+ ]
+ },
+ "pagetranslation": "Seiten ywersétzen",
+ "right-pagetranslation": "Seitenversión fyr d' Ywersétzung markirn",
+ "tpt-section": "Ywersétzungsoahheit $1",
+ "tpt-section-new": "Neiche Ywersétzungsoahheit. Nåm $1",
+ "tpt-section-deleted": "Ywersétzungsoahheit $1",
+ "tpt-diff-old": "Vuriger Text",
+ "tpt-diff-new": "Neicher Text",
+ "tpt-submit": "Dé Versión do zur Ywersétzung markirn",
+ "tpt-sections-oldnew": "Neiche und vurhånderne Ywersétzungsoahheiten",
+ "tpt-sections-deleted": "Gléschde Ywersétzungsoahheiten",
+ "tpt-sections-template": "Ywersétzungsseitenvurlog",
+ "tpt-action-nofuzzy": "Sétz d' Ywersétzungen néd ausser Kroft",
+ "tpt-badtitle": "Da ågeewerne Seitennåm „$1“ is koah gütiger Titl néd",
+ "tpt-nosuchpage": "Dé Seiten $1 existird néd",
+ "tpt-oldrevision": "$2 is néd d' létzde Versión voh derer Seiten [[:$1]].\nNetter d' létzde Versión kå zur Ywersétzung markird wern.",
+ "tpt-notsuitable": "Dé Seiten $1 is néd zum Ywersétzen geignet.\nStö sicher, daas a <nowiki><translate></nowiki>-Tag und gütige Syntax vawendt werd.",
+ "tpt-languages-legend": "Ånderne Sproochen:",
+ "pt-deletepage-any-legend": "Ywersétzbore óder ywersétzde Seiten léschen",
+ "pt-deletepage-current": "Seitennåm",
+ "pt-deletepage-reason": "Grund:",
+ "pt-deletepage-subpages": "Olle Unterseiten léschen",
+ "pt-deletepage-list-pages": "Listen voh dé z' léschenden Seiten",
+ "pt-deletepage-list-translation": "Ywersétzde Seiten",
+ "pt-deletepage-list-section": "Obschnitsseiten",
+ "pt-deletepage-list-other": "Weiderne Unterseiten",
+ "pt-deletepage-list-count": "Insgsåmt gibts $1 z' léschende {{PLURAL:$1|Seiten|Seiten}}.",
+ "pt-deletepage-full-logreason": "Teil voh da ywersétzborn Seiten $1.",
+ "pt-deletepage-lang-logreason": "Teil voh da ywersétzden Seiten $1.",
+ "pt-deletepage-started": "Bittscheh 's [[Special:Log/pagetranslation|Ywersétzungs-Logbuach]] noch Feelern und Ausfiarungsnoochrichten priaffm."
+}
diff --git a/Translate/i18n/pagetranslation/bbc-latn.json b/Translate/i18n/pagetranslation/bbc-latn.json
new file mode 100644
index 00000000..e79e4070
--- /dev/null
+++ b/Translate/i18n/pagetranslation/bbc-latn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Salomo Christian Hutajulu"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2 lapatan)"
+}
diff --git a/Translate/i18n/pagetranslation/bcc.json b/Translate/i18n/pagetranslation/bcc.json
new file mode 100644
index 00000000..70afbacf
--- /dev/null
+++ b/Translate/i18n/pagetranslation/bcc.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Baloch Afghanistan"
+ ]
+ },
+ "tpt-invalid-group": "نا معتبرین گروپی",
+ "pm-pagetitle-invalid": "مهربانی کنیت یک معتبرین صپحه یی عنوانی وارد کنیت"
+}
diff --git a/Translate/i18n/pagetranslation/bci.json b/Translate/i18n/pagetranslation/bci.json
new file mode 100644
index 00000000..a9bc3385
--- /dev/null
+++ b/Translate/i18n/pagetranslation/bci.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kjeanclaude"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% katchili)"
+}
diff --git a/Translate/i18n/pagetranslation/bcl.json b/Translate/i18n/pagetranslation/bcl.json
new file mode 100644
index 00000000..40101f29
--- /dev/null
+++ b/Translate/i18n/pagetranslation/bcl.json
@@ -0,0 +1,82 @@
+{
+ "@metadata": {
+ "authors": [
+ "Geopoet",
+ "ShimunUfesoj"
+ ]
+ },
+ "pagetranslation": "Dakit-taramon kan pahina",
+ "right-pagetranslation": "Markahi an mga bersyon kan mga pahina para sa dakit-taramon",
+ "tpt-section": "Yunit kan dakit-taramon $1",
+ "tpt-section-new": "Bagong yunit kan dakit-taramon.\nPangaran: $1",
+ "tpt-section-deleted": "Yunit kan dakit-taramon $1",
+ "tpt-diff-old": "Dating teksto",
+ "tpt-diff-new": "Baguhong teksto",
+ "tpt-submit": "Markahi ining bersyon para sa pagdakit-taramon",
+ "tpt-sections-oldnew": "Baguhon asin dati nang yaon na mga yunit kan dakit-taramon",
+ "tpt-sections-deleted": "Pinagpurang mga yunit kan dakit-taramon",
+ "tpt-sections-template": "Panguyog kan pahina nin dakit-taramon",
+ "tpt-action-nofuzzy": "Dae pag-imbalidohon an mga dakit-taramon",
+ "tpt-badtitle": "Ngaran kan pahinang pinagtao ($1) bakong balidong titulo",
+ "tpt-nosuchpage": "An pahina $1 bakong eksistido",
+ "tpt-oldrevision": "An $2 bako an pinakabaguhong bersyon kan pahina [[:$1]].\nAn mga pinakabaguhong bersyon sana an puwedeng markahan para sa dakit-taramon.",
+ "tpt-notsuitable": "An pahina $1 bakong naaangay para sa dakit-taramon.\nHimoong segurado na ini igwang <nowiki><translate></nowiki> mga tatak asin igwa nin balidong sintaks.",
+ "tpt-saveok": "An pahina [[:$1]] pinagmarkahan pra sa dakit-taramon na igwang $2 {{PLURAL:$2|yunit kan dakit-taramon|mga yunit kan dakit-taramon}}.\nAn pahina mapuwede ngunyan na magin <span class=\"plainlinks\">[$3 pinagdakit-taramon]</span>.",
+ "tpt-showpage-intro": "Yaon sa ibaba an bago, dati na asin pinagburang yunit nin mga dakit-taramon an nagkarilista.\nBago mamarkahan nin bersyon para sa pagdakit-taramon, aramon mo na an mga kaliwatan pasiring sa mga yunit nin dakit-taramon pinagminimisa tanganing likayan an bakong kaipuhanan na trabaho para sa mga translador.",
+ "tpt-mark-summary": "Markado ining bersyon para sa pagdakit-taramon",
+ "tpt-edit-failed": "Dae mapanumpayan an pahina: $1",
+ "tpt-duplicate": "Pangaran kan yunit nin pagdakit-taramon na $1 ginamit nang sobra nin sarong beses.",
+ "tpt-unmarked": "An pahina $1 bako na pong markado para sa pagdakit-taramon.",
+ "tpt-list-nopages": "Mayong mga pahina na markado para sa pagdakit-taramon ni naka-andam na tanganing markado para sa pagdakit-taramon.",
+ "tpt-new-pages-title": "Mga pahinang pinaghurot para sa pagdakit-taramon",
+ "tpt-old-pages-title": "Mga pahina na yaon sa pagdakit-taramon",
+ "tpt-other-pages-title": "Nagkaparasang mga pahina",
+ "tpt-new-pages": "{{PLURAL:$1|Ining pahina naglalaman nin|Ining mga pahina naglalaman nin}} teksto na igwa nin mga markang pandakit-taramon, alagad mayong bersyon kan {{PLURAL:$1|ining pahina na|ining mga pahina na}} sa presente markado para sa pagdakit-taramon.",
+ "tpt-old-pages": "An ibang bersyon kan {{PLURAL:$1|ining pahina igwa nin|ining mga pahina igwa nin}} pinagmarkahan para sa pagdakit-taramon.",
+ "tpt-other-pages": "{{PLURAL:$1|An lumaong bersyon kaining pahina iyo an|An pinakalumaong mga bersyon kaining mga pahina iyo an mga}} markado para sa pagdakit-taramon, alagad an pinakahuri {{PLURAL:$1|bersyon|mga bersyon}} dae mapuwedeng pagmarkahan para sa pagdakit-taramon.",
+ "tpt-select-prioritylangs": "Lista na pinagpalaen nin kama kan mga koda nin pangenot na lengguwahe:",
+ "tpt-select-prioritylangs-force": "Dae pinagtutugot na mga pagdakit-taramon sa ibang mga lengguwahe kesa pangenot na mga lengguwahe",
+ "tpt-select-prioritylangs-reason": "Kadahilanan:",
+ "tpt-sections-prioritylangs": "Pangenot na mga lengguwahe",
+ "tpt-rev-mark": "markahan para sa pagdakit-taramon",
+ "tpt-rev-unmark": "haleon gikan sa pagdakit-taramon",
+ "tpt-rev-discourage": "Dae pagtugutan",
+ "tpt-rev-encourage": "balikon",
+ "tpt-rev-mark-tooltip": "Markahan an pinakahuring bersyon kaining pahina para sa padakit-taramon.",
+ "tpt-rev-unmark-tooltip": "Haleon ining pahina para sa pagdakit-taramon.",
+ "tpt-rev-discourage-tooltip": "Dae pagtugutan an dagos na pagdadakit-taramon kaining pahina.",
+ "tpt-rev-encourage-tooltip": "Balikon ining pahina sa normal na pagdakit-taramon.",
+ "translate-tag-translate-link-desc": "Ipagdakit-taramon ining pahina",
+ "translate-tag-markthis": "Markahan ining pahina para ipagdakit-taramon",
+ "translate-tag-markthisagain": "Ining pahina igwa nin <span class=\"plainlinks\">[$1 mga kaliwatan]</span> poon pa kaitong huri ining <span class=\"plainlinks\">[$2 pinagmarkahan para ipagdakit-taramon]</span>.",
+ "translate-tag-hasnew": "Ining pahina igwa nin <span class=\"plainlinks\">[$1 mga kaliwatan]</span> na dae pinagmarkahan para ipagdakit-taramon.",
+ "tpt-translation-intro": "Ining pahina sarong <span class=\"plainlinks\">[$1 pinagdakit-taramon na bersyon]</span> kan pahina [[$2]] asin an pagdakit-taramon na $3% nakumpleto na.",
+ "tpt-translation-intro-fuzzy": "An luwas sa panahon na mga pinagdakit-taramon pinagmarkahan nin arog kaini.",
+ "tpt-languages-legend": "Ibang mga lengguwahe:",
+ "tpt-languages-zero": "Magpoon sa pagdakit-taramon para sa lengguwaheng ini",
+ "tpt-languages-nonzero": "$1 ($2% an pigsalin-tataramon)",
+ "tpt-target-page": "Ining pahina dae puwedeng manwal na pagpanumpayan.\nIning pahina sarong dakit-taramon kan pahina [[$1]] asin an pinagdakit-taramon mapuwedeng panumbayan na gamit an [$2 an gamit sa pagdakit-taramon].",
+ "tpt-unknown-page": "Ining espasyong ngaran nakareserba para sa pahina kan laman nin mga dakit-taramon.\nAn pahina na saimong boot na pagliliwaton garo habong magtutugot sa arinman na pahinang markado para ipagdakit-taramon.",
+ "tpt-translation-restricted": "An pagdakit-taramon kaining pahina sa lengguwaheng ini pinagpupugulan kan administrador nin pagdakit-taramon.\n\nRason: $1",
+ "tpt-discouraged-language-force": "<strong>Ining pahina dae puwedeng ipagdakit-taramon sa $2.</strong>\n\nAn administrador kan pagdakit-taramon nagdesisyon na ining pahina mapuwedeng sanang ipagdakit-taramon sa $3.",
+ "tpt-priority-languages": "An administrador kan pagdakit-taramon ikinaag an prayoridad na mga lengguwahe para kaining grupo sa $1.",
+ "tpt-render-summary": "Panunumpayan tanganing ipagtugma sa baguhong bersyon kan ginikanang pahina",
+ "aggregategroups": "Sinurumpay na mga grupo",
+ "tpt-aggregategroup-add": "Dugangan",
+ "tpt-aggregategroup-save": "Ipagtagama",
+ "tpt-aggregategroup-add-new": "Dugangan nin sarong baguhon na sinurumpay na grupo",
+ "tpt-aggregategroup-new-name": "An pangaran:",
+ "tpt-aggregategroup-new-description": "Paglaladawan (puwedeng mayo kaini):",
+ "tpt-aggregategroup-remove-confirm": "Segurado kan na gusto mong puraon ining sinurumpay na grupo?",
+ "tpt-aggregategroup-invalid-group": "An grupo bakong eksistido",
+ "pt-parse-open": "Bakong balansiyadong &lt;translate> marka.\nPanguyog sa pagdakit-taramon: <pre>$1</pre>",
+ "pt-parse-close": "Bakong balansiyadong &lt;/translate> marka.\nPanguyog sa pagdakit-taramon: <pre>$1</pre>",
+ "pt-parse-nested": "Pinagsalagang &lt;translate> mga yunit nin pagdakit-taramon dae itinutugot.\nMarkang teksto: <pre>$1</pre>",
+ "pt-shake-multiple": "Mga marka nin dagmangang yunit nin pagdakit-taramon para sa sarong yunit nin pagdakit-taramon.\nTeksto sa yunit nin pagdakit-taramon: <pre>$1</pre>",
+ "pt-shake-position": "Mga marka kan yunit nin dakit-taramon sa bakong pinag-aasahan na posisyon.\nTeksto sa yunit in pagdakit-taramon: <pre>$1</pre>",
+ "pt-shake-empty": "Mayong laman na yunit kan dakit-taramon para sa paramarka na \"$1\".",
+ "log-description-pagetranslation": "Magtala para sa mga aksyon na minasumpay sa sistema kan pahina nin dakit-taramon",
+ "log-name-pagetranslation": "Talaan kan dakit-taramong pahina",
+ "pm-summary-import": "Importadong dakit-taramon na ginagamit an [[Special:PageMigration|migrasyon sa pahina]]",
+ "pp-save-button-label": "Itagáma"
+}
diff --git a/Translate/i18n/pagetranslation/be-tarask.json b/Translate/i18n/pagetranslation/be-tarask.json
new file mode 100644
index 00000000..c60b352d
--- /dev/null
+++ b/Translate/i18n/pagetranslation/be-tarask.json
@@ -0,0 +1,226 @@
+{
+ "@metadata": {
+ "authors": [
+ "EugeneZelenko",
+ "Jim-by",
+ "Red Winged Duck",
+ "Renessaince",
+ "Wizardist"
+ ]
+ },
+ "pagetranslation": "Пераклад старонкі",
+ "right-pagetranslation": "пазначэньне вэрсіяў старонак для перакладу",
+ "action-pagetranslation": "кіраваньне перакладам старонак",
+ "tps-edit-sourcepage-text": "Вы рэдагуеце крыніцу перакладальнай старонкі. Калі ласка, пераканайцеся, што вы знаёмыя з гэтай дакумэнтацыяй:\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text Рэдагаваньне крынічнага тэксту]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Markup_examples Прыклады выкарыстаньня разьметкі]",
+ "tps-edit-sourcepage-ve-warning-title": "Увага: непадтрымліваная старонка",
+ "tps-edit-sourcepage-ve-warning-text": "Вы рэдагуеце перакладальную старонку. Іхняе рэдагаваньне ў гэтым рэдактары афіцыйна яшчэ не падтрымліваецца. Калі ласка, скарыстайцеся рэдактарам коду.",
+ "tps-edit-sourcepage-ve-warning-button": "Добра",
+ "tpt-section": "Адзінка перакладу $1",
+ "tpt-section-new": "Новая адзінка перакладу. Назва: $1",
+ "tpt-section-deleted": "Адзінка перакладу $1",
+ "tpt-diff-old": "Папярэдні тэкст",
+ "tpt-diff-new": "Новы тэкст",
+ "tpt-submit": "Пазначыць гэту вэрсію для перакладу",
+ "tpt-sections-oldnew": "Новыя й існыя адзінкі перакладу",
+ "tpt-sections-deleted": "Выдаленыя адзінкі перакладу",
+ "tpt-sections-template": "Шаблён старонкі перакладу",
+ "tpt-action-nofuzzy": "Не бракаваць пераклады",
+ "tpt-badtitle": "Пададзеная назва старонкі ($1) не зьяўляецца слушнай",
+ "tpt-nosuchpage": "Старонка $1 не існуе",
+ "tpt-oldrevision": "$2 не зьяўляецца апошняй вэрсіяй старонкі [[:$1]].\nТолькі апошнія вэрсіі могуць пазначацца для перакладу.",
+ "tpt-notsuitable": "Старонка $1 ня можа быць перакладзеная.\nУпэўніцеся, што яна ўтрымлівае тэгі <nowiki><translate></nowiki> і мае слушны сынтаксіс.",
+ "tpt-saveok": "Старонка «$1» была пазначаная для перакладу з $2 {{PLURAL:$2|адзінкай перакладу|адзінкамі перакладу|адзінкамі перакладу}}.\nЗараз старонка можа быць <span class=\"plainlinks\">[$3 перакладзеная]</span>.",
+ "tpt-saveok-first": "Вы можаце [[Special:PageMigration|імпартаваць існыя пераклады]] для гэтай старонкі (калі ёсьць).",
+ "tpt-offer-notify": "Вы можаце <span class=\"plainlinks\">[$1 паведаміць перакладчыкам]</span> пра гэтую старонку.",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|Паглядзець сьпіс перакладальных старонак.]]",
+ "tpt-showpage-intro": "Ніжэй знаходзяцца новыя, існуючыя і выдаленыя сэкцыі.\nПерад пазначэньнем гэтай вэрсіі для перакладу праверце зьмены ў сэкцыях для таго, каб пазьбегнуць непатрэбнай працы для перакладчыкаў.",
+ "tpt-mark-summary": "Пазначыў гэтую вэрсію для перакладу",
+ "tpt-mark-nochanges": "Няма зьмяненьняў для прагляду. Пазначэньне гэтай старонкі для перакладу не адрэдагуе ні яе, ні любыя модулі перакладу.",
+ "tpt-edit-failed": "Немагчыма абнавіць старонку: $1",
+ "tpt-duplicate": "Назва адзінкі перакладу «$1» скарыстаная больш за адзін раз.",
+ "tpt-invalid": "Назва блёку перакладу $1 не павінна мець сымбаляў падкрэсьліваньня і нахільных рысак.",
+ "tpt-unmarked": "Старонка [[:$1]] болей не пазначаная для перакладу.",
+ "tpt-list-nopages": "Старонкі для перакладу не пазначаныя альбо не падрыхтаваныя.",
+ "tpt-new-pages-title": "Старонкі, прапанаваныя да перакладу",
+ "tpt-old-pages-title": "Старонкі на стадыі перакладу",
+ "tpt-other-pages-title": "Сапсаваныя старонкі",
+ "tpt-outdated-pages-title": "Старонкі з нерэцэнзаванымі зьменамі",
+ "tpt-new-pages": "{{PLURAL:$1|1=Гэтая старонка ўтрымлівае|Гэтыя старонкі ўтрымліваюць}} тэкст зь меткамі перакладу, але {{PLURAL:$1|1=пазначанай для перакладу вэрсіі гэтай старонкі|пазначаных для перакладу вэрсіяў гэтых старонак}} няма.",
+ "tpt-old-pages": "Апошняя вэрсія {{PLURAL:$1|1=гэтай старонкі|гэтых старонак}} была пазначаная для перакладу.",
+ "tpt-other-pages": "{{PLURAL:$1|1=Старая вэрсія гэтай старонкі пазначаная|Старыя вэрсіі гэтых старонак пазначаныя}} для перакладу, але {{PLURAL:$1|1=апошняя вэрсія ня можа быць пазначаная|апошнія вэрсіі ня могуць быць пазначаныя}} для перакладу.",
+ "tpt-outdated-pages": "{{PLURAL:$1|Гэтая старонка мае|Гэтыя старонкі маюць}} зьмены, не пазначаныя да перакладу.",
+ "tpt-tag-oldsyntax": "стары сынтакс",
+ "tpt-tag-no-transclusion-support": "няма падтрымкі ўключэньня",
+ "tpt-select-prioritylangs": "Сьпіс прыярытэтных кодаў моваў, падзеленых коскамі:",
+ "tpt-select-prioritylangs-force": "Запабегчы перакладам на адрозныя ад прыярытэтных мовы",
+ "tpt-select-prioritylangs-reason": "Прычына:",
+ "tpt-sections-prioritylangs": "Прыярытэтныя мовы",
+ "tpt-sections-syntaxversion": "Вэрсія сынтаксу",
+ "tpt-syntaxversion-text": "На гэтай старонцы цяпер выкарыстаная старая вэрсія крынічнага сынтаксу перакладальных старонак. Новая вэрсія агартацьмеце неперакладзеныя разьдзелы HTML-цэтлікам, які пазначацьме слушную мову тэксту. Прыклад: $1. Новым сынтаксам разьметкі $2 можна скарыстацца, каб пазьбегнуць усялякага абгортваньня ў непрымальных месцах, напрыклад пры перакладзе атрыбуту <code>title</code> элемэнтаў. Вярнуцца да старой вэрсіі сынтаксу немагчыма.",
+ "tpt-syntaxversion-label": "Выкарыстаць для гэтай старонкі найноўшую вэрсію сынтаксу",
+ "tpt-transclusion": "Уключэньне шаблёнаў",
+ "tpt-transclusion-label": "Дазволіць для гэтай старонкі ўключэньне перакладзеных шаблёнаў",
+ "tpt-rev-mark": "пазначыць да перакладу",
+ "tpt-rev-unmark": "выдаліць зь перакладу",
+ "tpt-rev-discourage": "адхіліць",
+ "tpt-rev-encourage": "аднавіць",
+ "tpt-rev-mark-tooltip": "Пазначыць апошнюю вэрсію старонкі да перакладу.",
+ "tpt-rev-unmark-tooltip": "Выдаліць гэтую старонку зь перакладу.",
+ "tpt-rev-discourage-tooltip": "Адхіліць далейшыя пераклады гэтай старонкі.",
+ "tpt-rev-encourage-tooltip": "Аднавіць гэтую старонку да звычайнага перакладу.",
+ "translate-tag-translate-link-desc": "Перакласьці гэту старонку",
+ "translate-tag-markthis": "Пазначыць гэту старонку для перакладу",
+ "translate-tag-markthisagain": "Гэта старонка ўтрымлівае <span class=\"plainlinks\">[$1 зьмены]</span> пасьля апошняй <span class=\"plainlinks\">[$2 пазнакі для перакладу]</span>.",
+ "translate-tag-hasnew": "Гэта старонка ўтрымлівае <span class=\"plainlinks\">[$1 зьмены]</span>, не пазначаныя для перакладу.",
+ "tpt-translation-intro": "Гэтая старонка — <span class=\"plainlinks\">[$1 перакладзеная вэрсія]</span> старонкі [[$2]]. Пераклад завершаны на $3%.",
+ "tpt-translation-intro-fuzzy": "Гэтак пазначаныя састарэлыя пераклады.",
+ "tpt-languages-legend": "Іншыя мовы:",
+ "tpt-languages-separator": "&#160;•&#32;",
+ "tpt-languages-zero": "Пачаць пераклад на гэтую мову",
+ "tpt-languages-nonzero": "$1 ($2% перакладзена)",
+ "tpt-tab-translate": "Перакладаць",
+ "tpt-target-page": "Гэта старонка ня можа быць абноўлена ўручную.\nГэта старонка зьяўляецца перакладам старонкі [[$1]], пераклад можа быць абноўлены з выкарыстаньнем [$2 інструмэнта перакладу].",
+ "tpt-unknown-page": "Гэтая прастора назваў зарэзэрваваная для перакладаў старонак зьместу.\nСтаронка, якую Вы спрабуеце рэдагаваць, верагодна, не зьвязана зь якой-небудзь старонкай, пазначанай для перакладу.",
+ "tpt-translation-restricted": "Пераклад гэтай старонкі на дадзеную мову быў заблякаваны адміністратарам перакладаў.\n\nПрычына: $1",
+ "tpt-translation-restricted-no-reason": "Пераклад гэтай старонкі на дадзеную мову быў заблякаваны адміністратарам перакладаў.",
+ "tpt-discouraged-language-force-header": "Гэтую старонку немагчыма перакласьці на $1.",
+ "tpt-discouraged-language-force-content": "Адміністратар перакладу пастанавіў, што гэта старонка можа быць перакладзеная толькі на $1.",
+ "tpt-discouraged-language-header": "Пераклад на $1 ня ёсьць прыярытэтным для гэтай старонкі.",
+ "tpt-discouraged-language-content": "Адміністратар перакладу вырашыў засяродзіць высілкі па перакладзе на $1.",
+ "tpt-discouraged-language-force": "<strong>Гэтая старонка ня можа быць перакладзеная на мову $2.</strong>\n\nАдміністратар перакладу вырашыў, што гэтая старонка можа быць перакладзеная толькі на мовы: $3.",
+ "tpt-priority-languages": "Адміністратар перакладаў вызначыў прыярытэтныя мовы для гэтай групы: $1.",
+ "tpt-priority-languages-force": "Адміністратар перакладу вызначыў для гэтай групы прыярытэтнымі мовамі $1. Пераклад на іншыя мовы не дазволены.",
+ "tpt-render-summary": "Абнаўленьне для адпаведнасьці новай вэрсіі крынічнай старонкі",
+ "aggregategroups": "Абагульняльныя групы",
+ "tpt-aggregategroup-add": "Дадаць",
+ "tpt-aggregategroup-save": "Захаваць",
+ "tpt-aggregategroup-add-new": "Дадаць новую абагульняльную групу",
+ "tpt-aggregategroup-new-name": "Назва:",
+ "tpt-aggregategroup-new-description": "Апісаньне (неабавязкова):",
+ "tpt-aggregategroup-remove-confirm": "Вы ўпэўненыя, што жадаеце выдаліць гэтую абагульняльную групу?",
+ "tpt-aggregategroup-invalid-group": "Група не існуе",
+ "tpt-aggregategroup-edit-name": "Назва:",
+ "tpt-aggregategroup-edit-description": "Апісаньне:",
+ "tpt-aggregategroup-update": "Захаваць",
+ "tpt-aggregategroup-update-cancel": "Скасаваць",
+ "tpt-invalid-group": "Няслушная група",
+ "pt-parse-open": "Незбалянсаваны тэг &lt;translate>.\nШаблён перакладу: <pre>$1</pre>",
+ "pt-parse-close": "Незбалянсаваны тэг &lt;/translate>.\nШаблён перакладу: <pre>$1</pre>",
+ "pt-parse-nested": "Укладзеныя сэкцыі &lt;translate> не дазволеныя.\nТэкст тэгу: <pre>$1</pre>",
+ "pt-shake-multiple": "Некалькі маркераў сэкцыяў у адной сэкцыі.\nПераканайцеся, што адзінкі перакладу аддзеленыя пустымі радкамі.\nТэкст сэкцыі: <pre>$1</pre>",
+ "pt-shake-position": "Меткі сэкцыі перакладу ў нечаканых пазыцыях.\nТэкст сэкцыі: <pre>$1</pre>",
+ "pt-shake-empty": "Пустая сэкцыя перакладу для меткі «$1».",
+ "log-description-pagetranslation": "Журнал для дзеяньняў зьвязаных з сыстэмай перакладу старонак",
+ "log-name-pagetranslation": "Журнал перакладу старонак",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|пазначыў|пазначыла}} $3 для перакладу",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|выдаліў|выдаліла}} $3 з сыстэмы перакладаў",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|выканаў|выканала}} перайменаваньне перакладальнай старонкі з $3 у $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|сутыкнуўся|сутыкнулася}} з праблемай у часе пераносу старонкі з $3 у $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|выдаліў|выдаліла}} перакладальную старонку $3",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|ня змог|не змагла}} выдаліць $3, якая належыць да перакладальнай старонкі $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|выдаліў|выдаліла}} перакладальную старонку $3",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|ня змог|не змагла}} выдаліць старонку «$3», якая належыць да перакладальнай старонкі «$4»",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|дазволіў|дазволіла}} пераклад $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|не дазволіў|не дазволіла}} пераклад $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|выдаліў|выдаліла}} прыярытэтныя мовы зь перакладальнай старонкі $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|вызначыў|вызначыла}} прыярытэтныя мовы для перакладальнай старонкі $3: $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|абмежаваў|абмежавала}} мовы для перакладальнай старонкі $3 да $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|дадаў|дадала}} перакладальную старонку $3 да агрэгаванай групы $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|выдаліў|выдаліла}} перакладальную старонку $3 з агрэгаванай групы $4",
+ "log-action-filter-pagetranslation": "Тып дзеяньня:",
+ "log-action-filter-pagetranslation-mark": "Пазначыць да перакладу",
+ "log-action-filter-pagetranslation-unmark": "Выдаліць зь перакладу",
+ "log-action-filter-pagetranslation-move": "Пераносы старонкі",
+ "log-action-filter-pagetranslation-delete": "Выдаленьні старонкі",
+ "log-action-filter-pagetranslation-encourage": "Заахвочваньне да перакладу",
+ "log-action-filter-pagetranslation-discourage": "Адахвочваньне ад перакладу",
+ "log-action-filter-pagetranslation-prioritylanguages": "Зьмена прыярытэтных моваў",
+ "log-action-filter-pagetranslation-aggregategroups": "Зьмена агрэгаваных групаў",
+ "pt-movepage-title": "Перанесьці старонку $1, якую магчыма перакласьці",
+ "pt-movepage-blockers": "Старонка з магчымасьцю перакладу ня можа быць перанесеная з-за {{PLURAL:$1|1=наступнай памылкі|наступных памылак}}:",
+ "pt-movepage-block-base-invalid": "Мэтавая перакладальная старонка мае няслушную назву.",
+ "pt-movepage-block-tp-invalid": "Мэтавая назва старонкі да перакладу [[:$1]] будзе няслушнай (занадта доўгая?)",
+ "pt-movepage-block-section-invalid": "Мэтавая назва старонкі [[:$1]] для адзінкі перакладу будзе няслушнай (занадта доўгая?).",
+ "pt-movepage-block-subpage-invalid": "Мэтавая назва падстаронкі [[:$1]] будзе няслушнай (занадта доўгая?).",
+ "pt-movepage-list-pages": "Сьпіс старонак да пераносу",
+ "pt-movepage-list-translation": "{{PLURAL:$1|1=Старонка|Старонкі}} да перакладу",
+ "pt-movepage-list-section": "{{PLURAL:$1|1=Старонка|Старонкі}} адзінкі перакладу",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Падстаронка пазначаная|Падстаронкі пазначаныя|Падстаронак пазначана}} да перакладу",
+ "pt-movepage-list-translatable-note": "Гэтыя старонкі мусяць быць перайменаваныя асобна.",
+ "pt-movepage-list-other": "{{PLURAL:$1|1=Іншая падстаронка|Іншыя падстаронкі}}",
+ "pt-movepage-list-count": "Агулам $1 {{PLURAL:$1|старонка|старонкі|старонак}}, у тым ліку $2 {{PLURAL:$2|падстаронка|падстаронкі|падстаронак}} і $3 {{PLURAL:$3|старонка|старонкі|старонак}} абмеркаваньня для пераносу.",
+ "pt-movepage-list-no-pages": "Старонкі ня знойдзеныя.",
+ "pt-movepage-legend": "Перанесьці старонкі, якія магчыма перакласьці",
+ "pt-movepage-current": "Цяперашняя назва:",
+ "pt-movepage-new": "Новая назва:",
+ "pt-movepage-reason": "Прычына:",
+ "pt-movepage-subpages": "Перанесьці ўсе падстаронкі",
+ "pt-movepage-action-check": "Праверыць, ці магчымы перанос",
+ "pt-movepage-action-perform": "Перанесьці",
+ "pt-movepage-action-other": "Зьмяніць мэту",
+ "pt-movepage-intro": "Гэтая спэцыяльная старонка дазваляе пераносіць старонкі, пазначаныя да перакладу.\nПеранос не адбудзецца імгненна, таму што спатрэбіцца пераносіць шмат старонак.\nПадчас пераносу маніпуляцыя са старонкамі будзе немагчымая.\nУсе памылкі падчас пераносу будуць занесеныя ў [[Special:Log/pagetranslation|журнал перакладу старонак]], і будзе патрэбная іх ручная апрацоўка.",
+ "pt-movepage-logreason": "Частка старонкі для перакладу «$1»",
+ "pt-movepage-started": "Калі ласка, праверце [[Special:Log/pagetranslation|журнал перакладаў старонак]] наконт памылак і паведамленьня пра выкананьне.",
+ "pt-locked-page": "Гэтая старонка заблякаваная з-за працэсу пераносу старонкі, якую магчыма перакласьці.",
+ "pt-deletepage-lang-title": "Выдаленьне старонкі перакладу «$1».",
+ "pt-deletepage-tp-title": "Выдаленьне старонкі «$1», якую магчыма перакладаць.",
+ "pt-deletepage-invalid-title": "Пазначаная няслушная старонка.",
+ "pt-deletepage-invalid-text": "Пазначаная старонка не зьяўляецца ні перакладальнай старонкай, ані перакладам.",
+ "pt-deletepage-action-check": "Сьпіс старонак да выдаленьня",
+ "pt-deletepage-action-perform": "Выканаць выдаленьне",
+ "pt-deletepage-action-other": "Зьмяніць мэту",
+ "pt-deletepage-lang-legend": "Выдаліць старонку перакладу",
+ "pt-deletepage-tp-legend": "Выдаліць старонку, якую магчыма перакладаць",
+ "pt-deletepage-any-legend": "Выдаліць перакладальную старонку або яе пераклад",
+ "pt-deletepage-current": "Назва старонкі:",
+ "pt-deletepage-reason": "Прычына:",
+ "pt-deletepage-subpages": "Выдаліць усе падстаронкі",
+ "pt-deletepage-list-pages": "Сьпіс старонак да выдаленьня",
+ "pt-deletepage-list-translation": "Старонкі перакладаў",
+ "pt-deletepage-list-section": "Старонкі адзінкі перакладу",
+ "pt-deletepage-list-other": "Іншыя падстаронкі",
+ "pt-deletepage-list-count": "Агулам $1 {{PLURAL:$1|старонка|старонкі|старонак}} і {{PLURAL:$2|падстаронка|падстаронкі|падстаронак}} да выдаленьня.",
+ "pt-deletepage-list-no-pages": "Старонкі ня знойдзеныя.",
+ "pt-deletepage-full-logreason": "Частка старонкі для перакладу «$1»",
+ "pt-deletepage-lang-logreason": "Частка старонкі для перакладу «$1»",
+ "pt-deletepage-started": "Калі ласка, праверце [[Special:Log/pagetranslation|старонку журнала перакладаў]] адносна памылак і паведамленьняў пра выкананьне.",
+ "pt-deletepage-intro": "Гэтая спэцыяльная старонка дазваляе Вам выдаляць цэлыя перакладальныя старонкі, альбо перакладзеныя на іншыя мовы.\nВыдаленьне ня здарыцца хутка, таму што залежныя старонкі таксама будуць выдаленыя.\nПамылкі будуць запратакаляваныя на [[Special:Log/pagetranslation|старонцы журналу перакладаў]] і патрабуюць выпраўленьня ўручную.",
+ "pagemigration": "Міграцыя старонак перакладу",
+ "pagemigration-summary": "Пазначце старонку перакладу і аднавіце любы пераклад, зроблены перад тым, як на гэтай старонцы быў уключаны пераклад зьместу.",
+ "pm-import-button-label": "Імпартаваць",
+ "pm-savepages-button-label": "Захаваць",
+ "pm-cancel-button-label": "Скасаваць",
+ "pm-page-does-not-exist": "$1 не існуе.",
+ "pm-old-translations-missing": "$1 ня мае старых перакладаў.",
+ "pm-extra-units-warning": "Могуць прысутнічаць дадатковыя адзінкі. Калі ласка, правільна супастаўце блёкі крыніцы і перакладу.",
+ "pm-pagename-missing": "Калі ласка, увядзіце назву старонкі.",
+ "pm-add-icon-hover-text": "Дадайце блёк ніжэй",
+ "pm-swap-icon-hover-text": "Памяняйце з блёкам ніжэй",
+ "pm-delete-icon-hover-text": "Выдаліць блёк",
+ "pm-pagetitle-placeholder": "Увесьці назву старонкі",
+ "pm-pagetitle-invalid": "Калі ласка, увядзіце карэктную назву старонкі. Яна мусіць быць у фармаце <page-name>/<language-code>.",
+ "pm-pagetitle-missing": "Калі ласка, увядзіце назву старонкі.",
+ "pm-langcode-missing": "Выглядае, што ў назьве бракуе коду мовы. Калі ласка, увядзіце назву старонку ў фармаце <page-name>/<language-code>.",
+ "pm-summary-import": "Імпартаваны пераклад з дапамогай [[Special:PageMigration|міграцыі старонак]]",
+ "pm-on-import-message-text": "Старыя пераклады імпартаваныя. Каб палепшыць блёкі перакладу, карыстайцеся функцыямі даданьня, замены і выдаленьня элемэнтаў ды націсьніце кнопку «{{int:pm-savepages-button-label}}» дзеля захаваньня. Каб скасаваць, націсьніце кнопку «{{int:pm-cancel-button-label}}».",
+ "pm-on-save-message-text": "Блёкі перакладу захаваныя. Цяпер можаце ўвесьці назву новай старонкі перакладу, каб міграваць яе, ці ўнесьці зьмены ў блёкі ніжэй і захаваць новую вэрсію.",
+ "tpt-translate-title": "Дазволіць пераклад назвы старонкі",
+ "pp-save-summary": "Падрыхтаваная старонка да перакладу",
+ "pagepreparation": "Падрыхтаваць старонку да перакладу",
+ "pp-pagename-placeholder": "Увесьці назву старонкі",
+ "pp-prepare-button-label": "Падрыхтаваць",
+ "pp-save-button-label": "Апублікаваць",
+ "pp-cancel-button-label": "Скасаваць",
+ "pp-save-message": "Старонка была апублікаваная. Вы можаце яе [$1 рэдагаваць].",
+ "pp-prepare-message": "Старонка была падрыхтаваная да перакладу. Глядзіце ўнізе адрозьненьні. Калі ўсё добра, націсьніце кнопку «{{int:pp-save-button-label}}»!",
+ "pp-already-prepared-message": "Выглядае, што старонка ўжо была падрыхтаваная да перакладу. Няма ніякіх зьменаў у параўнаньні зь мінулай вэрсіяй.",
+ "pp-diff-error": "Пры атрыманьні розьніцы вэрсіяў з сэрвэру адбылася памылка.",
+ "pp-pagename-missing": "Калі ласка, увядзіце назву старонкі.",
+ "pp-diff-old-header": "Крынічны тэкст",
+ "pp-diff-new-header": "Падрыхтаваны тэкст",
+ "tpt-unlink-confirm": "Калі ласка, пацьвердзіце, што вы сапраўды хочаце выключыць гэтую старонку з сыстэмы перакладу.\nВыбар мовы і назвы перакладзеных старонак перастануць працаваць.\nСтаронкі перакладу стануць рэдагавальнымі.",
+ "tpt-unlink-button": "Выдаліць зь перакладу",
+ "tpt-unlink-summary": "Старонка выдаленая зь перакладу",
+ "tpt-generic-confirm": "Калі ласка, пацьвердзьце дзеяньне.",
+ "tpt-generic-button": "Пацьвердзіць"
+}
diff --git a/Translate/i18n/pagetranslation/be.json b/Translate/i18n/pagetranslation/be.json
new file mode 100644
index 00000000..6bc2de7a
--- /dev/null
+++ b/Translate/i18n/pagetranslation/be.json
@@ -0,0 +1,272 @@
+{
+ "@metadata": {
+ "authors": [
+ "Artificial123",
+ "Artsiom91",
+ "Chadyka",
+ "Maksim L.",
+ "Mikalai Udodau",
+ "No Sleep till Krupki",
+ "Unomano",
+ "ZlyiLev",
+ "Тест",
+ "Чаховіч Уладзіслаў"
+ ]
+ },
+ "pagetranslation": "Пераклад старонкі",
+ "right-pagetranslation": "Пазначэнне версіяў старонак для перакладу",
+ "action-pagetranslation": "кіраваць перакладам старонак",
+ "tps-edit-sourcepage-text": "Вы правіце зыходны тэкст перакладальнай старонкі. Калі ласка, пераканайцеся, што вы знаёмыя з гэтай дакументацыяй:\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text Змяненне зыходнага тэксту]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Markup_examples Прыклады выкарыстання разметкі]",
+ "tps-edit-sourcepage-ve-warning-limited-text": "Некаторыя вобласці, якія можна перакладаць, могуць быць недаступнымі ў гэтым рэдактары. Калі ласка, выкарыстоўвайце рэдактар зыходнага кода, каб правіць іх.",
+ "tps-edit-sourcepage-ve-warning-title": "Увага: Старонка не падтрымліваецца",
+ "tps-edit-sourcepage-ve-warning-text": "Вы правіце старонку, якую магчыма перакладаць. Іхняя праўка ў гэтым рэдактары афіцыйна яшчэ не падтрымліваецца. Калі ласка, карыстайцеся рэдактарам зыходнага коду.",
+ "tps-edit-sourcepage-ve-warning-button": "Добра",
+ "tpt-section": "Адзінка перакладу $1",
+ "tpt-section-new": "Новая адзінка перакладу.\nНазва: $1",
+ "tpt-section-deleted": "Адзінка перакладу $1",
+ "tpt-diff-old": "Папярэдні тэкст",
+ "tpt-diff-new": "Новы тэкст",
+ "tpt-submit": "Пазначыць гэтую версію для перакладу",
+ "tpt-sections-oldnew": "Новыя і існыя адзінкі перакладу",
+ "tpt-sections-deleted": "Выдаленыя адзінкі перакладу",
+ "tpt-sections-template": "Шаблон старонкі перакладу",
+ "tpt-action-nofuzzy": "Не бракаваць пераклады",
+ "tpt-badtitle": "Пададзеная назва старонкі ($1) няслушная",
+ "tpt-nosuchpage": "Старонка $1 не існуе",
+ "tpt-oldrevision": "$2 ­— не апошняя версія старонкі [[:$1]].\nТолькі апошнія версіі могуць пазначацца для перакладу.",
+ "tpt-notsuitable": "Старонка $1 не можа быць перакладзеная.\nУпэўніцеся, што там яна ўтрымлівае тэгі $2 і мае слушны сінтаксіс.",
+ "tpt-saveok": "Старонка [[:$1]] была пазначаная для перакладу з $2 {{PLURAL:$2|адзінкай перакладу|адзінкамі перакладу}}.\nЗараз старонка можа быць <span class=\"plainlinks\">[$3 перакладзеная]</span>.",
+ "tpt-saveok-first": "Вы можаце [[Special:PageMigration|імпартаваць існыя пераклады]] для гэтай старонкі (калі ёсць).",
+ "tpt-offer-notify": "Вы можаце <span class=\"plainlinks\">[$1 паведаміць перакладчыкам]</span> пра гэтую старонку.",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|Паглядзець спіс старонак, якія магчыма перакладаць.]]",
+ "tpt-showpage-intro": "Ніжэй знаходзяцца новыя, існуючыя і выдаленыя адзінкі.\nПерад пазначэннем гэтай версіі для перакладу праверце змены ў адзінках для таго, каб пазбегнуць непатрэбнай працы для перакладчыкаў.",
+ "tpt-mark-summary": "Пазначыў гэтую версію для перакладу",
+ "tpt-mark-nochanges": "Няма змяненняў для прагляду. Пазначэнне гэтай старонкі для перакладу не зменіць ні яе, ні любыя адзінкі перакладу.",
+ "tpt-edit-failed": "Немагчыма абнавіць старонку: $1",
+ "tpt-duplicate": "Назва адзінкі перакладу $1 скарыстаная больш за адзін раз.",
+ "tpt-invalid": "Назва адзінкі перакладу $1 не можа мець сімвалаў падкрэслівання і нахільных рысак.",
+ "tpt-unmarked": "Старонка [[:$1]] болей не пазначаная для перакладу.",
+ "tpt-list-nopages": "Няма старонак, пазначаных для перакладу, або гатовых да пазначэння для перакладу.",
+ "tpt-new-pages-title": "Старонкі, прапанаваныя да перакладу",
+ "tpt-old-pages-title": "Старонкі ў перакладу",
+ "tpt-other-pages-title": "Сапсаваныя старонкі",
+ "tpt-outdated-pages-title": "Старонкі з недагледжанымі зменамі",
+ "tpt-new-pages": "{{PLURAL:$1|1=Гэтая старонка ўтрымлівае|Гэтыя старонкі ўтрымліваюць}} тэкст з тэгамі перакладу, але {{PLURAL:$1|1=пазначанай для перакладу версіі гэтай старонкі|пазначаных для перакладу версіяў гэтых старонак}} няма.",
+ "tpt-old-pages": "Апошняя версія {{PLURAL:$1|гэтай старонкі|гэтых старонак}} пазначана для перакладу.",
+ "tpt-other-pages": "{{PLURAL:$1|1=Старая версія гэтай старонкі пазначаная|Старыя версіі гэтых старонак пазначаныя}} для перакладу, але {{PLURAL:$1|1=апошняя версія не можа быць пазначаная|апошнія версіі не могуць быць пазначаныя}} для перакладу.",
+ "tpt-outdated-pages": "{{PLURAL:$1|Гэтая старонка мае|Гэтыя старонкі маюць}} змены, не пазначаныя да перакладу.",
+ "tpt-tag-discouraged": "aдахвочванa",
+ "tpt-tag-oldsyntax": "стары сінтаксіс",
+ "tpt-tag-no-transclusion-support": "няма падтрымкі ўключэньня",
+ "tpt-select-prioritylangs": "Спіс прыярытэтных кодаў моваў, падзеленых коскамі:",
+ "tpt-select-prioritylangs-force": "Прадухіліць пераклад на мовы, адрозныя ад прыярытэтных",
+ "tpt-select-prioritylangs-reason": "Прычына:",
+ "tpt-sections-prioritylangs": "Прыярытэтныя мовы",
+ "tpt-sections-syntaxversion": "Версія сінтаксісу",
+ "tpt-syntaxversion-text": "На гэтай старонцы цяпер выкарыстаная старая версія сінтаксісу зыходнага коду перакладальных старонак. Новая версія будзе абгортваць неперакладзеныя раздзелы HTML-тэгам, які пазначыць слушную мову тэксту. Прыклад: $1. Новым сінтаксісам разметкі $2 можна скарыстацца, каб прадухіліць усялякага абгортвання ў непрымальных месцах, напрыклад пры перакладзе атрыбуту <code>title</code> элементаў. Вярнуцца да старой версіі сінтаксісу немагчыма.",
+ "tpt-syntaxversion-label": "Выкарыстаць для гэтай старонкі найноўшую версію сынтаксісу",
+ "tpt-transclusion": "Уключэнне шаблонаў",
+ "tpt-transclusion-label": "Дазволіць для гэтай старонкі ўключэнне перакладзеных шаблонаў",
+ "tpt-rev-mark": "пазначыць да перакладу",
+ "tpt-rev-unmark": "выдаліць з перакладу",
+ "tpt-rev-discourage": "aдахвочваць",
+ "tpt-rev-encourage": "аднавіць",
+ "tpt-rev-mark-tooltip": "Пазначыць апошнюю версію старонкі да перакладу.",
+ "tpt-rev-unmark-tooltip": "Выдаліць гэтую старонку з перакладу.",
+ "tpt-rev-discourage-tooltip": "Адахвочваць далейшыя пераклады гэтай старонкі.",
+ "tpt-rev-encourage-tooltip": "Аднавіць гэтую старонку да звычайнага перакладу.",
+ "translate-tag-translate-link-desc": "Перакласці гэтую старонку",
+ "translate-tag-markthis": "Пазначыць гэтую старонку для перакладу",
+ "translate-tag-markthisagain": "Гэтая старонка ўтрымлівае <span class=\"plainlinks\">[$1 змены]</span> пасля апошняга <span class=\"plainlinks\">[$2 пазначэння для перакладу]</span>.",
+ "translate-tag-hasnew": "Гэта старонка ўтрымлівае <span class=\"plainlinks\">[$1 змены]</span>, не пазначаныя для перакладу.",
+ "tpt-translation-intro": "Гэтая старонка — <span class=\"plainlinks\">[$1 перакладзеная версія]</span> старонкі [[$2]]. Пераклад завершаны на $3%.",
+ "tpt-translation-intro-fuzzy": "Гэтак пазначаныя састарэлыя пераклады.",
+ "tpt-languages-legend": "Іншыя мовы:",
+ "tpt-languages-zero": "Пачаць пераклад на гэтую мову",
+ "tpt-languages-nonzero": "$1 ($2% перакладзена)",
+ "tpt-tab-translate": "Перакласці",
+ "tpt-target-page": "Гэтаю старонка не можа быць абноўлена ўручную.\nГэтая старонка з’яўляецца перакладам старонкі [[$1]], і пераклад можа быць абноўлены з выкарыстаннем [$2 інструмента перакладу].",
+ "tpt-unknown-page": "Гэтая прастора назваў зарэзервавана для перакладаў тэкстаў старонак.\nСтаронка, якую Вы спрабуеце рэдагаваць, верагодна, не звязана з якой-небудзь старонкай, пазначанай для перакладу.",
+ "tpt-translation-restricted": "Пераклад гэтай старонкі на дадзеную мову быў прадухілены адміністратарам перакладаў.\n\nПрычына: $1",
+ "tpt-translation-restricted-no-reason": "Пераклад гэтай старонкі на дадзеную мову быў прадухілены адміністратарам перакладаў.",
+ "tpt-discouraged-language-force-header": "Гэтую старонку немагчыма перакласці на $1.",
+ "tpt-discouraged-language-force-content": "Адміністратар перакладу вырашыў, што гэтаю старонка можа быць перакладзеная толькі на $1.",
+ "tpt-discouraged-language-header": "Пераклад на $1 не прыярытэтны для гэтай старонкі.",
+ "tpt-discouraged-language-content": "Адміністратар перакладу вырашыў засяродзіць высілкі па перакладзе на $1.",
+ "tpt-discouraged-language-force": "<strong>Гэтая старонка не можа быць перакладзеная на мову $2.</strong>\n\nАдміністратар перакладу вырашыў, што гэтая старонка можа быць перакладзеная толькі на мовы: $3.",
+ "tpt-priority-languages": "Адміністратар перакладаў вызначыў прыярытэтныя мовы для гэтай групы: $1.",
+ "tpt-priority-languages-force": "Адміністратар перакладу вызначыў для гэтай групы прыярытэтнымі мовамі $1. Пераклад на іншыя мовы не дазволены.",
+ "tpt-discouraged-translation-header": "Пераклад гэтай старонкі aдахвочваецца",
+ "tpt-discouraged-translation-content": "Адміністратар перакладу aдахвочвае пераклад гэтай старонкі. Вы ўсё яшчэ можаце перакласці старонку, але пераклад можа быць не карысным.",
+ "tpt-render-summary": "Абнаўленне для адпаведнасці новай версіі крынічнай старонкі",
+ "aggregategroups": "Абагульняльныя групы",
+ "tpt-aggregategroup-add": "Дадаць",
+ "tpt-aggregategroup-save": "Запісаць",
+ "tpt-aggregategroup-close": "Згарнуць",
+ "tpt-aggregategroup-add-new": "Дадаць новую абагульняльную групу",
+ "tpt-aggregategroup-new-name": "Назва:",
+ "tpt-aggregategroup-new-description": "Апісанне (неабавязкова):",
+ "tpt-aggregategroup-remove-confirm": "Вы ўпэўненыя, што жадаеце выдаліць гэтую абагульняльную групу?",
+ "tpt-aggregategroup-invalid-group": "Такой групы няма",
+ "tpt-aggregategroup-edit-name": "Назва:",
+ "tpt-aggregategroup-edit-description": "Апісанне:",
+ "tpt-aggregategroup-update": "Запісаць",
+ "tpt-aggregategroup-update-cancel": "Адмена",
+ "tpt-aggregategroup-expand-all-groups": "разгарнуць усе групы",
+ "tpt-aggregategroup-collapse-all-groups": "згарнуць усе групы",
+ "tpt-aggregategroup-expand-group": "разгарнуць групу",
+ "tpt-aggregategroup-collapse-group": "згарнуць групу",
+ "tpt-invalid-group": "Няслушная група",
+ "pt-parse-open": "Незбалансаваны тэг &lt;translate>.\nШаблон перакладу: <pre>$1</pre>",
+ "pt-parse-close": "Незбалансаваны тэг &lt;/translate>.\nШаблон перакладу: <pre>$1</pre>",
+ "pt-parse-nested": "Укладзеныя адзінкі &lt;translate> не дазволеныя.\nТэкст тэгу: <pre>$1</pre>",
+ "pt-shake-multiple": "Некалькі метак адзінак перакладу ў адной адзінцы.\nПераканайцеся, што адзінкі перакладу аддзеленыя пустымі радкамі.\nТэкст адзінкі перакладу: <pre>$1</pre>",
+ "pt-shake-position": "Меткі адзінкі перакладу ў нечаканай пазіцыі.\nТэкст адзінкі перакладу: <pre>$1</pre>",
+ "pt-shake-empty": "Пустая адзінка перакладу для меткі «$1».",
+ "log-description-pagetranslation": "Журнал для дзеянняў, звязаных з сістэмай перакладу старонак",
+ "log-name-pagetranslation": "Журнал перакладу старонак",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|пазначыў|пазначыла}} $3 для перакладу",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|выдаліў|выдаліла}} $3 з сістэмы перакладаў",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|выканаў|выканала}} перайменаванне перакладальнай старонкі з $3 у $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|сутыкнуўся|сутыкнулася}} з праблемай у часе пераносу старонкі з $3 у $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|выдаліў|выдаліла}} перакладальную старонку $3",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|не змог|не змагла}} выдаліць $3, якая належыць да перакладальнай старонкі $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|выдаліў|выдаліла}} перакладальную старонку $3",
+ "logentry-pagetranslation-deletelnok": "$1 не {{GENDER:$2|змог|змагла}} выдаліць старонку «$3», якая належыць да перакладальнай старонкі «$4»",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|заахвочваў|заахвочвала}} пераклад $3",
+ "logentry-pagetranslation-discourage": "$1 не {{GENDER:$2|адахвочваў|адахвочвала}} пераклад $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|выдаліў|выдаліла}} прыярытэтныя мовы з перакладальнай старонкі $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|вызначыў|вызначыла}} прыярытэтныя мовы для перакладальнай старонкі $3: $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|абмежаваў|абмежавала}} мовы для перакладальнай старонкі $3 да $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|дадаў|дадала}} перакладальную старонку $3 да абагульняльнай групы $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|выдаліў|выдаліла}} перакладальную старонку $3 з абагульняльнай групы $4",
+ "log-action-filter-pagetranslation": "Від дзеяння:",
+ "log-action-filter-pagetranslation-mark": "Пазначыць да перакладу",
+ "log-action-filter-pagetranslation-unmark": "Выдаліць з перакладу",
+ "log-action-filter-pagetranslation-move": "Пераносы старонкі",
+ "log-action-filter-pagetranslation-delete": "Выдаленні старонкі",
+ "log-action-filter-pagetranslation-encourage": "Заахвочванне да перакладу",
+ "log-action-filter-pagetranslation-discourage": "Адахвочванне ад перакладу",
+ "log-action-filter-pagetranslation-prioritylanguages": "Змена прыярытэтных моваў",
+ "log-action-filter-pagetranslation-aggregategroups": "Змена абагульняльных групаў",
+ "log-description-messagebundle": "Журнал дзеянняў, звязаных з сістэмай набораў паведамленняў",
+ "log-name-messagebundle": "Журнал набораў паведамленняў",
+ "logentry-messagebundle-moveok": "$1 {{GENDER:$2|выканаў|выканала}} перайменаванне набору паведамленняў з $3 у $4",
+ "logentry-messagebundle-movenok": "$1 {{GENDER:$2|сутыкнуўся|сутыкнулася}} з праблемай у часе пераносу набору паведамленняў з $3 у $4",
+ "logentry-messagebundle-deletefok": "$1 {{GENDER:$2|выканаў|выканала}} выдаленне набору паведамленняў $3",
+ "logentry-messagebundle-deletefnok": "$1 не {{GENDER:$2|змог|змагла}} выдаліць старонку «$3», якая належыць да набору паведамленняў $4",
+ "log-action-filter-messagebundle": "Від дзеяння:",
+ "log-action-filter-messagebundle-move": "Пераносы набораў паведамленняў",
+ "log-action-filter-messagebundle-delete": "Выдаленні набораў паведамленняў",
+ "pt-movepage-title": "Перанесці старонку «$1», якую магчыма перакласці",
+ "pt-movepage-messagebundle-title": "Перанос набору паведамленняў «$1»",
+ "pt-movepage-blockers": "Перакладальная старонка не можа быць перанесеная з-за {{PLURAL:$1|1=наступнай памылкі|наступных памылак}}:",
+ "pt-movepage-block-base-invalid": "Мэтавая перакладальная старонка мае няслушную назву.",
+ "pt-movepage-block-tp-invalid": "Мэтавая назва перакладальнай старонкі [[:$1]] будзе няслушнай (занадта доўгая?).",
+ "pt-movepage-block-section-invalid": "Мэтавая назва старонкі [[:$1]] для адзінкі перакладу будзе няслушнай (занадта доўгая?).",
+ "pt-movepage-block-subpage-invalid": "Мэтавая назва падстаронкі [[:$1]] будзе няслушнай (занадта доўгая?).",
+ "pt-movepage-block-talkpage-invalid": "Мэтавая назва старонкі размоў [[:$1]] будзе няслушнай (занадта доўгая?).",
+ "pt-movepage-block-unknown-page": "Старонка, якая перамяшчаецца ([[:$1]]), не выглядае як частка старонкі, якую можна перакладаць.",
+ "pt-movepage-block-ns-talk-unsupported": "Старонка ([[:$1]]) пераносіцца ў прастору назваў, якая не падтрымлівае размовы.",
+ "pt-movepage-block-rename-failed": "Узнікла памылка падчас стварэння новага загалоўка для старонкі [[:$1]]",
+ "pt-movepage-list-pages": "Спіс старонак да пераносу",
+ "pt-movepage-list-translation": "{{PLURAL:$1|1=Старонка|Старонкі}} да перакладу",
+ "pt-movepage-list-section": "{{PLURAL:$1|1=Старонка|Старонкі}} адзінкі перакладу",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Падстаронка, пазначаная|Падстаронкі, пазначаныя}} да перакладу",
+ "pt-movepage-list-translatable-note": "Гэтыя старонкі мусяць быць перайменаваныя асобна.",
+ "pt-movepage-list-other": "{{PLURAL:$1|1=Іншая падстаронка|Іншыя падстаронкі}}",
+ "pt-movepage-list-count": "Агулам $1 {{PLURAL:$1|старонка|старонкі|старонак}}, у тым ліку $2 {{PLURAL:$2|падстаронка|падстаронкі|падстаронак}} і $3 {{PLURAL:$3|старонка|старонкі|старонак}} размоў для пераносу.",
+ "pt-movepage-page-count-limit": "Гэтая перакладная старонка складаецца з больш чым $1 {{PLURAL:$1|старонкі|старонак}}. Перамяшчэнне такой колькасці старонак было прызнана ненадзейным. Звярніцеся да сістэмнага адміністратара, каб зрабіць гэта праз скрыпт абслугоўвання.",
+ "pt-movepage-list-no-pages": "Старонкі не знойдзеныя.",
+ "pt-movepage-legend": "Перанесці старонкі, якія магчыма перакласці",
+ "pt-movepage-messagebundle-legend": "Перанос набору паведамленняў",
+ "pt-movepage-current": "Цяперашняя назва:",
+ "pt-movepage-new": "Новая назва:",
+ "pt-movepage-reason": "Прычына:",
+ "pt-movepage-subpages": "Перанесці ўсе падстаронкі",
+ "pt-movepage-talkpages": "Перанесці старонкі размоў",
+ "pt-movepage-talkpage-exists": "(Мае старонку размоў)",
+ "pt-movepage-action-check": "Праверыць, ці перанос магчымы",
+ "pt-movepage-action-perform": "Перанесці",
+ "pt-movepage-action-other": "Змяніць мэту",
+ "pt-movepage-intro": "Гэтая адмысловая старонка дазваляе пераносіць старонкі, пазначаныя да перакладу.\nПеранос не адбудзецца імгненна, бо спатрэбіцца пераносіць шмат старонак.\nПадчас пераносу маніпуляцыя са старонкамі будзе немагчымая.\nУсе памылкі падчас пераносу будуць занесеныя ў [[$1|журнал]], і будзе патрэбная іх ручная апрацоўка.",
+ "pt-movepage-logreason": "Частка старонкі для перакладу «$1»",
+ "pt-movepage-started": "Калі ласка, праверце [[$1|журнал]] праз некаторы час наконт памылак і паведамленняў пра выкананне.",
+ "pt-locked-page": "Гэтая старонка заблакавана з-за таго, што ў дадзены момант адбываецца працэс пераносу старонкі, якая перакладаецца.",
+ "pt-deletepage-lang-title": "Выдаленне старонкі перакладу «$1»",
+ "pt-deletepage-tp-title": "Выдаленне перакладальнай старонкі «$1»",
+ "pt-deletepage-mb-title": "Выдаленне набору паведамленняў «$1»",
+ "pt-deletepage-invalid-title": "Пазначаная старонка няслушная.",
+ "pt-deletepage-invalid-text": "Пазначаная старонка не з’яўляецца ні перакладальнай старонкай, ані перакладам.",
+ "pt-deletepage-action-check": "Спіс старонак да выдалення",
+ "pt-deletepage-action-perform": "Выканаць выдаленне",
+ "pt-deletepage-action-other": "Змяніць мэту",
+ "pt-deletepage-lang-legend": "Выдаліць старонку перакладу",
+ "pt-deletepage-tp-legend": "Выдаліць старонку, якую магчыма перакладаць",
+ "pt-deletepage-mb-legend": "Выдаліць набор паведамленняў",
+ "pt-deletepage-any-legend": "Выдаліць перакладальную старонку, набор паведамленняў або пераклад",
+ "pt-deletepage-current": "Назва старонкі:",
+ "pt-deletepage-reason": "Прычына:",
+ "pt-deletepage-reason-details": "Іншая/дадатковая прычына:",
+ "pt-deletepage-reason-other": "Іншая прычына",
+ "pt-deletepage-subpages": "Выдаліць усе падстаронкі",
+ "pt-deletepage-list-pages": "Спіс старонак да выдалення",
+ "pt-deletepage-list-translation": "Старонкі перакладаў",
+ "pt-deletepage-list-section": "Старонкі адзінак перакладу",
+ "pt-deletepage-list-other": "Іншыя падстаронкі",
+ "pt-deletepage-list-count": "Агулам $1 {{PLURAL:$1|старонка|старонкі|старонак}} да выдалення і {{PLURAL:$2|падстаронка|падстаронкі|падстаронак}}.",
+ "pt-deletepage-list-no-pages": "Старонкі не знойдзеныя.",
+ "pt-deletepage-full-logreason": "Частка старонкі да перакладу «$1»",
+ "pt-deletepage-lang-logreason": "Частка старонкі да перакладу «$1»",
+ "pt-deletepage-started": "Калі ласка, праверце [[$1|старонку журнала перакладаў]] адносна памылак і паведамленняў пра выкананне.",
+ "pt-deletepage-intro": "Гэтая адмысловая старонка дазваляе вам выдаляць цэлую перакладальную старонку, набор паведамленняў або асобную перакладзеную старонку на нейкую мову.\nВыдаленне не здарыцца хутка, таму што залежныя старонкі таксама будуць выдаленыя.\nПамылкі будуць запратакаляваныя ў [[$1|журнале перакладу старонак]] і патрабуюць выпраўлення ўручную.",
+ "pagemigration": "Міграцыя старонак перакладу",
+ "pagemigration-summary": "Пазначце старонку перакладу і аднавіце любы пераклад, зроблены перад тым, як на гэтай старонцы быў уключаны пераклад зместу.",
+ "pm-import-button-label": "Імпартаваць",
+ "pm-savepages-button-label": "Запісаць",
+ "pm-cancel-button-label": "Адмяніць",
+ "pm-page-does-not-exist": "Старонкі $1 няма.",
+ "pm-old-translations-missing": "$1 не мае старых перакладаў.",
+ "pm-extra-units-warning": "Могуць прысутнічаць дадатковыя адзінкі. Калі ласка, правільна супастаўце адзінкі крыніцы і перакладу.",
+ "pm-pagename-missing": "Калі ласка, увядзіце назву старонкі.",
+ "pm-add-icon-hover-text": "Дадаць блок ніжэй",
+ "pm-swap-icon-hover-text": "Замяніць блокам ніжэй",
+ "pm-delete-icon-hover-text": "Выдаліць блок",
+ "pm-pagetitle-placeholder": "Увядзіце назву старонкі",
+ "pm-pagetitle-invalid": "Міграцыя старонак працуе толькі на перакладальных старонках, напрыклад «Page/de». Указаная назва няслушная.",
+ "pm-pagetitle-missing": "Калі ласка, увядзіце назву старонкі.",
+ "pm-langcode-missing": "Міграцыя старонак працуе толькі на перакладальных старонках, напрыклад «Page/de». Указаная старонка не перакладальная.",
+ "pm-summary-import": "Імпартаваны пераклад з дапамогай [[Special:PageMigration|міграцыі старонак]]",
+ "pm-on-import-message-text": "Старыя пераклады імпартаваныя. Карыстайцеся функцыямі дадавання, замены і выдалення элементаў, каб палепшыць адзінкі перакладу, ды націсніце кнопку «{{int:pm-savepages-button-label}}» дзеля захавання. Націсніце кнопку «{{int:pm-cancel-button-label}}», каб скасаваць.",
+ "pm-on-save-message-text": "Адзінкі перакладу захаваныя. Цяпер можаце ўвесці назву новай старонкі перакладу, каб міграваць яе, ці ўнесці змены ў адзінкі ніжэй і захаваць новую версію.",
+ "pm-pagetitle-not-translatable": "$1 — не частка перакладальнай старонкі.",
+ "pm-translation-unit-fetch-failed": "Адбылася памылка падчас атрымання адзінак перакладу для старонкі.",
+ "tpt-translate-title": "Дазволіць пераклад назвы старонкі",
+ "pp-save-summary": "Падрыхтоўка старонкі да перакладу",
+ "pagepreparation": "Падрыхтаваць старонку да перакладу",
+ "pagepreparation-summary": "Пазначце назву старонкі, каб падрыхтавацца да перакладу.",
+ "pp-pagename-placeholder": "Увядзіце назву старонкі",
+ "pp-prepare-button-label": "Падрыхтаваць",
+ "pp-save-button-label": "Апублікаваць",
+ "pp-cancel-button-label": "Адмена",
+ "pp-save-message": "Старонка была апублікаваная. Вы можаце яе [$1 правіць].",
+ "pp-prepare-message": "Старонка была падрыхтаваная да перакладу. Глядзіце ўнізе адрозненні. Калі ўсё добра, націсніце кнопку «{{int:pp-save-button-label}}»!",
+ "pp-already-prepared-message": "Выглядае, што старонка ўжо была падрыхтаваная да перакладу. Няма ніякіх зменаў у параўнанні з мінулай версіяй.",
+ "pp-diff-error": "Пры атрыманні розніцы версіяў з серверу адбылася памылка.",
+ "pp-pagename-missing": "Калі ласка, увядзіце назву старонкі.",
+ "pp-diff-old-header": "Крынічны тэкст",
+ "pp-diff-new-header": "Падрыхтаваны тэкст",
+ "tpt-unlink-confirm": "Калі ласка, пацвердзіце, што вы сапраўды хочаце выключыць гэтую старонку з сістэмы перакладу.\nВыбар мовы і назвы перакладзеных старонак перастануць працаваць.\nМожна будзе правіць старонкі перакладаў.",
+ "tpt-unlink-button": "Выдаліць з перакладу",
+ "tpt-unlink-summary": "Старонка выдаленая з перакладу",
+ "tpt-generic-confirm": "Калі ласка, пацвердзіце дзеянне.",
+ "tpt-generic-button": "Пацвердзіць",
+ "tpt-validation-not-insertable": "Імя зменнай перакладу «$1» не працуе ў якасці ўстаўкі ў інтэрфейсе перакладу. Пазбягайце выкарыстання спецыяльных сімвалаў.",
+ "tpt-validation-name-reuse": "Зменная перакладу «$1» вызначаецца некалькі разоў з розным зместам. Зменіце назвы зменных, каб яны былі ўнікальнымі ў адзінцы перакладу.",
+ "visualeditor-annotations-translate-start": "Пачатак зместу для перакладу",
+ "visualeditor-annotations-translate-end": "Канец зместу для перакладу",
+ "visualeditor-annotations-translate-description": "Гэты дыяпазон пазначаны для перакладу. Калі ласка, пераканайцеся, што вы выконваеце інструкцыі, дадзеныя для [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text змены зыходнага тэксту].",
+ "visualeditor-annotations-tvar-start": "Пачатак неперакладальнага зместу",
+ "visualeditor-annotations-tvar-end": "Канец неперакладальнага зместу",
+ "visualeditor-annotations-tvar-description": "Гэты дыяпазон пазначаны як неперакладальны. Калі ласка, звярніцеся да старонкі [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Segmentation Segmentation of the source text] для дадатковай інфармацыі."
+}
diff --git a/Translate/i18n/pagetranslation/bg.json b/Translate/i18n/pagetranslation/bg.json
new file mode 100644
index 00000000..d76b45b1
--- /dev/null
+++ b/Translate/i18n/pagetranslation/bg.json
@@ -0,0 +1,50 @@
+{
+ "@metadata": {
+ "authors": [
+ "DCLXVI",
+ "ShockD",
+ "StanProg",
+ "Termininja",
+ "පසිඳු කාවින්ද"
+ ]
+ },
+ "pagetranslation": "Превод на страници",
+ "tpt-diff-old": "Предишен текст",
+ "tpt-diff-new": "Нов текст",
+ "tpt-nosuchpage": "Страница „$1“ не съществува",
+ "tpt-new-pages-title": "Страници предложени за превод",
+ "tpt-other-pages-title": "Счупени страници",
+ "tpt-select-prioritylangs-reason": "Причина:",
+ "tpt-sections-prioritylangs": "Приоритетни езици",
+ "translate-tag-translate-link-desc": "Превеждане на тази страница",
+ "tpt-translation-intro": "Тази страница е <span class=\"plainlinks\">[$1 преведена версия]</span> на страницата [[$2]] и преводът е завършен на $3%.",
+ "tpt-languages-legend": "Други езици:",
+ "tpt-languages-nonzero": "$1 ($2% преведено)",
+ "tpt-aggregategroup-add": "Добавяне",
+ "tpt-aggregategroup-save": "Съхраняване",
+ "tpt-aggregategroup-new-name": "Име:",
+ "tpt-aggregategroup-new-description": "Описание (незадължително):",
+ "tpt-aggregategroup-invalid-group": "Групата не съществува",
+ "tpt-aggregategroup-update": "Съхраняване",
+ "tpt-aggregategroup-update-cancel": "Отказ",
+ "log-action-filter-pagetranslation": "Тип на действието:",
+ "log-action-filter-pagetranslation-delete": "Изтриване на страници",
+ "pt-movepage-list-other": "{{PLURAL:$1|Друга подстраница|Други подстраници}}",
+ "pt-movepage-current": "Текущо име:",
+ "pt-movepage-new": "Ново име:",
+ "pt-movepage-reason": "Причина:",
+ "pt-movepage-subpages": "Преместване на всички подстраници",
+ "pt-deletepage-action-perform": "Извършване на изтриването",
+ "pt-deletepage-reason": "Причина:",
+ "pt-deletepage-subpages": "Изтриване на всички подстраници",
+ "pt-deletepage-list-other": "Други подстраници",
+ "pm-import-button-label": "Внасяне",
+ "pm-savepages-button-label": "Съхраняване",
+ "pm-cancel-button-label": "Отказ",
+ "tpt-translate-title": "Позволяване превод на заглавието на страницата",
+ "pp-save-button-label": "Публикуване",
+ "pp-cancel-button-label": "Отказ",
+ "pp-diff-old-header": "Изходен текст",
+ "pp-diff-new-header": "Подготвен текст",
+ "tpt-generic-confirm": "Моля, потвърдете действието."
+}
diff --git a/Translate/i18n/pagetranslation/bgn.json b/Translate/i18n/pagetranslation/bgn.json
new file mode 100644
index 00000000..759ce256
--- /dev/null
+++ b/Translate/i18n/pagetranslation/bgn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Baloch Afghanistan"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% ترجمه بوته)"
+}
diff --git a/Translate/i18n/pagetranslation/bho.json b/Translate/i18n/pagetranslation/bho.json
new file mode 100644
index 00000000..2370d2af
--- /dev/null
+++ b/Translate/i18n/pagetranslation/bho.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "SatyamMishra"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% अनुवाद पूरा)"
+}
diff --git a/Translate/i18n/pagetranslation/bjn.json b/Translate/i18n/pagetranslation/bjn.json
new file mode 100644
index 00000000..49754d9f
--- /dev/null
+++ b/Translate/i18n/pagetranslation/bjn.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ezagren"
+ ]
+ },
+ "pagetranslation": "Panarjamahan laman",
+ "tpt-section": "Unit panarjamahan $1",
+ "tpt-section-deleted": "Unit panarjamahan $1",
+ "tpt-action-nofuzzy": "Jangan maupauakan tarjamahan",
+ "tpt-rev-unmark": "pinggirakan matan panarjamahan",
+ "translate-tag-translate-link-desc": "Tarjamahakan laman ngini",
+ "tpt-languages-nonzero": "$1 ($2% tarjamahan)",
+ "log-name-pagetranslation": "Log panarjamahan laman",
+ "pagemigration": "Pamindahan laman tarjamahan",
+ "tpt-unlink-button": "Pinggirakan matan panarjamahan"
+}
diff --git a/Translate/i18n/pagetranslation/blk.json b/Translate/i18n/pagetranslation/blk.json
new file mode 100644
index 00000000..cfd3c120
--- /dev/null
+++ b/Translate/i18n/pagetranslation/blk.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "လွိုင်ႏအာထင်ႏထိုထဲင်း",
+ "咽頭べさ"
+ ]
+ },
+ "translate-tag-translate-link-desc": "ပြန်ႏသွော့ လိတ်မဲ့ငါယို",
+ "aggregategroups": "ခြွောန်းဗူႏ အစွိုꩻဖိုင်ႏ",
+ "tpt-aggregategroup-close": "ပေ့ꩻထိုꩻ"
+}
diff --git a/Translate/i18n/pagetranslation/bm.json b/Translate/i18n/pagetranslation/bm.json
new file mode 100644
index 00000000..008509a7
--- /dev/null
+++ b/Translate/i18n/pagetranslation/bm.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amadouyoro.thiam"
+ ]
+ },
+ "tpt-aggregategroup-edit-name": "Tɔgɔ:",
+ "tpt-aggregategroup-edit-description": "Kunnafoni:",
+ "tpt-aggregategroup-update": "Ka mara",
+ "tpt-aggregategroup-update-cancel": "Ka bòa ma"
+}
diff --git a/Translate/i18n/pagetranslation/bn.json b/Translate/i18n/pagetranslation/bn.json
new file mode 100644
index 00000000..6a82fc30
--- /dev/null
+++ b/Translate/i18n/pagetranslation/bn.json
@@ -0,0 +1,108 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aftab1995",
+ "Aftabuzzaman",
+ "Bellayet",
+ "Sibabrata Banerjee",
+ "আজিজ",
+ "আফতাবুজ্জামান",
+ "খাত্তাব হাসান"
+ ]
+ },
+ "pagetranslation": "পাতা অনুবাদ",
+ "right-pagetranslation": "অনুবাদের জন্য পাতাসমূহের সংস্করণ চিহ্নিত করুন",
+ "action-pagetranslation": "অনুবাদযোগ্য পাতা পরিচালনা করার",
+ "tps-edit-sourcepage-text": "আপনি একটি অনুবাদের উৎস পাতা সম্পাদনা করছেন। অনুগ্রহ করে নিশ্চিত করুন যে আপনি নিম্নলিখিত নথিপত্রের সাথে পরিচিত:\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text উৎসের পাঠ্য পরিবর্তন করা]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Markup_examples ব্যবহারের জন্য মার্কআপের উদাহরণ]",
+ "tps-edit-sourcepage-ve-warning-limited-text": "কিছু অনুবাদযোগ্য অংশ এই সম্পাদকের দ্বারা নাও সম্পাদনা করা যেতে পারে। এগুলি সম্পাদনা করতে অনুগ্রহ করে উৎস সম্পাদক ব্যবহার করুন।",
+ "tps-edit-sourcepage-ve-warning-title": "সতর্কতা: অ-সমর্থিত পাতা",
+ "tps-edit-sourcepage-ve-warning-text": "আপনি একটি অনুবাদযোগ্য পাতা সম্পাদনা করছেন। এইগুলি এই সম্পাদকের মাধ্যমে সম্পাদনা করা এখনও আনুষ্ঠানিকভাবে সমর্থিত নয়। অনুগ্রহপূর্বক উৎস সম্পাদক ব্যবহার করুন।",
+ "tps-edit-sourcepage-ve-warning-button": "ঠিক আছে",
+ "tpt-section": "$1 নং অনুবাদের উপাদান",
+ "tpt-section-new": "নতুন অনুবাদের উপাদান।\nনাম: $1",
+ "tpt-section-deleted": "$1 নং অনুবাদের উপাদান",
+ "tpt-diff-old": "পূর্ববর্তী লেখা",
+ "tpt-diff-new": "নতুন লেখা",
+ "tpt-submit": "এই সংস্করণ অনুবাদের জন্য চিহ্নিত করুন",
+ "tpt-sections-oldnew": "নতুন এবং বিদ্যমান অনুবাদের উপাদান",
+ "tpt-sections-deleted": "অপসারিত অনুবাদের উপাদান",
+ "tpt-sections-template": "অনুবাদ পাতার টেমপ্লেট",
+ "tpt-action-nofuzzy": "অনুবাদগুলি অকার্যকর করবেন না",
+ "tpt-badtitle": "প্রদত্ত পাতার নাম ($1) কোনও বৈধ শিরোনাম নয়",
+ "tpt-nosuchpage": "$1 পাতাটির অস্তিত্ব নেই",
+ "tpt-saveok": "$2টি {{PLURAL:$2|অনুবাদের উপাদানসহ}} [[:$1]] পাতাটি অনুবাদের জন্য চিহ্নিত করা হয়েছে। পাতাটি এখন <span class=\"plainlinks\">[$3 অনুবাদ করা]</span> যাবে।",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|অনুবাদযোগ্য পাতাসমূহের তালিকা দেখুন]]।",
+ "tpt-mark-summary": "এই সংস্করণ অনুবাদের জন্য চিহ্নিত করা হয়েছে",
+ "tpt-old-pages-title": "অনুবাদে থাকা পাতা",
+ "tpt-other-pages-title": "ভাঙ্গা পাতা",
+ "tpt-outdated-pages-title": "অমীমাংসিত পরিবর্তনসহ পাতাসমূহ",
+ "tpt-old-pages": "{{PLURAL:$1|এই পাতাটির|এই পাতাগুলির}} সর্বশেষ সংস্করণ অনুবাদের জন্য চিহ্নিত করা হয়েছে।",
+ "tpt-tag-discouraged": "নিরুৎসাহিত করা হচ্ছে",
+ "tpt-tag-oldsyntax": "পুরানো শব্দবিন্যাস",
+ "tpt-select-prioritylangs-reason": "কারণ:",
+ "tpt-sections-prioritylangs": "অগ্রাধিকারের ভাষাগুলি",
+ "tpt-rev-mark": "অনুবাদের জন্য চিহ্নিত করুন",
+ "tpt-rev-unmark": "অনুবাদ থেকে সরান",
+ "tpt-rev-discourage": "নিরুৎসাহিত করুন",
+ "tpt-rev-encourage": "পুনরুদ্ধার",
+ "tpt-rev-mark-tooltip": "অনুবাদের জন্য এই পৃষ্ঠার সর্বশেষ সংস্করণ চিহ্নিত করুন।",
+ "tpt-rev-unmark-tooltip": "অনুবাদ থেকে এই পাতাটি সরান।",
+ "translate-tag-translate-link-desc": "এই পাতাটি অনুবাদ করুন",
+ "translate-tag-markthis": "অনুবাদের জন্য এই পাতা চিহ্নিত করুন",
+ "translate-tag-markthisagain": "<span class=\"plainlinks\">[$2 অনুবাদের জন্য সর্বশেষ চিহ্নিত করার]</span> পর থেকে এই পাতাটিতে <span class=\"plainlinks\">[$1 পরিবর্তন ঘটেছে]</span>।",
+ "translate-tag-hasnew": "এই পাতায় <span class=\"plainlinks\">[$1 পরিবর্তন]</span> রয়েছে যা অনুবাদ করার জন্য চিহ্নিত করা হয়নি।",
+ "tpt-translation-intro": "এই পাতাটি [[$2]] পাতার একটি <span class=\"plainlinks\">[$1 অনূদিত সংস্করণ]</span> এবং অনুবাদ $3% সম্পূর্ণ হয়েছে।",
+ "tpt-translation-intro-fuzzy": "পুরাতন অনুবাদ এটির মত চিহ্নিত করা হয়েছে।",
+ "tpt-languages-legend": "অন্য ভাষা:",
+ "tpt-languages-zero": "এই ভাষায় অনুবাদ শুরু করুন",
+ "tpt-languages-nonzero": "$1 ($2% অনূদিত)",
+ "tpt-tab-translate": "অনুবাদ",
+ "tpt-target-page": "এই পাতাটি ম্যানুয়ালি হালনাগাদ করা যাবে না।\nএই পাতাটি [[$1]] পাতার একটি অনুবাদ এবং [$2 অনুবাদ সরঞ্জাম] ব্যবহার করে অনুবাদ হালনাগাদ করা যাবে।",
+ "tpt-render-summary": "উৎস পাতার নতুন সংস্করণের সাথে মেলাতে হালনাগাদ করা হচ্ছে",
+ "aggregategroups": "সমষ্টিগত দল",
+ "tpt-aggregategroup-add": "যোগ করুন",
+ "tpt-aggregategroup-save": "সংরক্ষণ",
+ "tpt-aggregategroup-close": "বন্ধ করুন",
+ "tpt-aggregategroup-new-name": "নাম:",
+ "tpt-aggregategroup-new-description": "বিবরণ (ঐচ্ছিক):",
+ "tpt-aggregategroup-edit-name": "নাম:",
+ "tpt-aggregategroup-edit-description": "বিবরণ:",
+ "tpt-aggregategroup-update": "সংরক্ষণ",
+ "tpt-aggregategroup-update-cancel": "বাতিল",
+ "log-name-pagetranslation": "পাতা অনুবাদ লগ",
+ "logentry-pagetranslation-mark": "$1 $3 অনুবাদের জন্য {{GENDER:$2|চিহ্নিত করেছেন}}",
+ "logentry-pagetranslation-unmark": "$1 অনুবাদ ব্যবস্থা থেকে $3 {{GENDER:$2|সরিয়ে ফেলেছেন}}",
+ "logentry-pagetranslation-deletefok": "$1 অনুবাদযোগ্য $3 পাতার অপসারণ {{GENDER:$2|সম্পন্ন}} করেছেন",
+ "logentry-pagetranslation-deletelok": "$1 অনুবাদের পাতা $3 অপসারণ {{GENDER:$2|করেছেন}}",
+ "log-action-filter-pagetranslation": "কাজের ধরন:",
+ "log-action-filter-pagetranslation-mark": "অনুবাদের জন্য চিহ্নিত করা",
+ "log-action-filter-pagetranslation-unmark": "অনুবাদ থেকে সরানো",
+ "log-action-filter-pagetranslation-move": "পাতা স্থানান্তর",
+ "log-action-filter-pagetranslation-delete": "পাতা অপসারণ",
+ "log-action-filter-pagetranslation-encourage": "অনুবাদের জন্য অনুপ্রেরণা",
+ "log-action-filter-pagetranslation-discourage": "অনুবাদের জন্য নিরুৎসাহ",
+ "log-action-filter-pagetranslation-prioritylanguages": "অগ্রাধিকারের ভাষায় পরিবর্তন",
+ "log-action-filter-pagetranslation-aggregategroups": "সমষ্টিগত দল পরিবর্তন",
+ "pt-movepage-title": "অনুবাদযোগ্য পাতা $1 স্থানান্তর করুন",
+ "pt-movepage-list-no-pages": "কোন পাতা খুঁজে পাওয়া যায়নি।",
+ "pt-movepage-legend": "অনুবাদযোগ্য পাতা স্থানান্তর করুন",
+ "pt-movepage-current": "বর্তমান নাম:",
+ "pt-movepage-new": "নতুন নাম:",
+ "pt-movepage-reason": "কারণ:",
+ "pt-movepage-logreason": "অনুবাদযোগ্য পাতা \"$1\"-এর অংশ",
+ "pt-deletepage-current": "পাতার নাম:",
+ "pt-deletepage-reason": "কারণ:",
+ "pt-deletepage-reason-details": "অন্যান্য/অতিরিক্ত কারণ:",
+ "pt-deletepage-reason-other": "অন্য কারণ",
+ "pt-deletepage-full-logreason": "অনুবাদযোগ্য পাতা \"$1\"-এর অংশ",
+ "pt-deletepage-lang-logreason": "অনুবাদ পাতা \"$1\"-এর অংশ",
+ "pm-import-button-label": "আমদানি",
+ "pm-savepages-button-label": "সংরক্ষণ",
+ "pm-cancel-button-label": "বাতিল",
+ "tpt-translate-title": "পাতার শিরোনাম অনুবাদের অনুমোদন দিন",
+ "pp-save-button-label": "প্রকাশ করুন",
+ "pp-cancel-button-label": "বাতিল",
+ "pp-diff-old-header": "উত্স পাঠ্য",
+ "tpt-generic-button": "নিশ্চিত করুন",
+ "visualeditor-annotations-tvar-end": "অ-অনুবাদযোগ্য বিষয়বস্তুর সমাপ্তি"
+}
diff --git a/Translate/i18n/pagetranslation/bo.json b/Translate/i18n/pagetranslation/bo.json
new file mode 100644
index 00000000..ec8b7076
--- /dev/null
+++ b/Translate/i18n/pagetranslation/bo.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "Freeyak",
+ "Phurbutsering",
+ "TaDhondup"
+ ]
+ },
+ "pagetranslation": "ཤོག་ངོས་ཡིག་སྒྱུར།",
+ "tpt-diff-old": "ཡིག་འབྲུ་གོང་མ།",
+ "tpt-diff-new": "ཡིག་འབྲུ་གསར་བ།",
+ "tpt-list-pages-in-translations": "[[དམིགས་བསལ། ལོ་ཙཱའི་ཤོག་ངོས། ལོ་ཙཱ་བྱ་དགོས་པའི་ཤོག་ངོས་རྣམས་སྟོན།]]",
+ "translate-tag-translate-link-desc": "ཤོག་ངོས་འདི་བསྒྱུར་བ།",
+ "tpt-languages-legend": "སྐད་རིགས་གཞན།",
+ "pt-movepage-list-translation": "ཡིག་སྒྱུར་ {{PLURAL:$1|ཤོག་ངོས།}}",
+ "pt-movepage-legend": "བསྒྱུར་རུང་བའི་ཤོག་ངོས་སྤོར་བ།",
+ "pt-movepage-current": "ད་ཡོད་མིང་།",
+ "pt-movepage-new": "མིང་གསར་བ།",
+ "pt-movepage-reason": "རྒྱུ་མཚན།"
+}
diff --git a/Translate/i18n/pagetranslation/bqi.json b/Translate/i18n/pagetranslation/bqi.json
new file mode 100644
index 00000000..3997310e
--- /dev/null
+++ b/Translate/i18n/pagetranslation/bqi.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mogoeilor"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% ڤورگٱنیڌاْ ڤابیڌاْ)"
+}
diff --git a/Translate/i18n/pagetranslation/br.json b/Translate/i18n/pagetranslation/br.json
new file mode 100644
index 00000000..cb0198f6
--- /dev/null
+++ b/Translate/i18n/pagetranslation/br.json
@@ -0,0 +1,126 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fohanno",
+ "Fulup",
+ "Huñvreüs",
+ "Y-M D"
+ ]
+ },
+ "pagetranslation": "Troidigezh ur bajenn",
+ "right-pagetranslation": "Merkañ stummoù pajennoù evit ma vefent troet",
+ "action-pagetranslation": "Merañ ar pajennoù a c'haller treiñ",
+ "tpt-section": "Unanenn treiñ $1",
+ "tpt-section-new": "Unvez treiñ nevez.\nAnv : $1",
+ "tpt-section-deleted": "Unanenn dreiñ $1",
+ "tpt-diff-old": "Testenn gent",
+ "tpt-diff-new": "Testenn nevez",
+ "tpt-submit": "Merkañ ar stumm-mañ da vezañ troet",
+ "tpt-sections-oldnew": "Unvezioù treiñ kozh ha nevez",
+ "tpt-sections-deleted": "Unvezioù treiñ diverket",
+ "tpt-sections-template": "Patrom pajenn dreiñ",
+ "tpt-action-nofuzzy": "Chom hep diwiriekaat an droidigezhioù",
+ "tpt-badtitle": "N'eo ket reizh titl anv ar bajenn ($1) zo bet lakaet",
+ "tpt-nosuchpage": "N'eus ket eus ar bajenn $1.",
+ "tpt-oldrevision": "N'eo ket $2 stumm diwezhañ ar bajenn [[:$1]].\nN'eus nemet ar stummoù diwezhañ a c'hall bezañ merket evit bezañ troet.",
+ "tpt-notsuitable": "N'haller ket treiñ ar bajenn $1.\nGwiria ez balizennoù $2 enni hag ez eo reizh an ereadurezh anezhi.",
+ "tpt-saveok": "Merket eo bet ar bajenn [[:$1]] evit bezañ troet gant $2 {{PLURAL:$2|unanenn dreiñ|unanenn dreiñ}}.\nGallout a ra ar bajenn bezañ <span class=\"plainlinks\">[$3 troet]</span> bremañ.",
+ "tpt-showpage-intro": "A-is emañ rollet an troidigezhioù nevez, ar re zo anezho hag ar re bet diverket.\nKent merkañ ar stumm-mañ evit an treiñ, gwiriait mat n'eus ket bet nemeur a gemmoù er rannbennadoù kuit da bourchas labour aner d'an droourien.",
+ "tpt-mark-summary": "Merket eo bet ar stumm-mañ da vezañ troet",
+ "tpt-edit-failed": "N'eus ket bet gallet hizivaat ar bajenn : $1",
+ "tpt-duplicate": "Implijet eo bet meur a wezh anv an unvez treiñ $1.",
+ "tpt-unmarked": "N'eo ket merket ken ar bajenn [[:$1]] evit bezañ troet.",
+ "tpt-list-nopages": "N'eus pajenn ebet merket da vezañ troet na prest da vezañ merket da vezañ troet.",
+ "tpt-new-pages-title": "Pajennoù a c'haller da dreiñ",
+ "tpt-old-pages-title": "Pajennoù emeur o treiñ",
+ "tpt-other-pages-title": "Pajennoù torr",
+ "tpt-new-pages": "{{PLURAL:$1|Er bajenn-mañ|Er pajennoù-mañ}} ez eus testennoù enno tikedennoù treiñ, met stumm ebet eus ar {{PLURAL:$1|bajenn-mañ|pajennoù-mañ}} n'eo bet merket da vezañ troet evit poent.",
+ "tpt-old-pages": "Merket eo bet stumm red ar {{PLURAL:$1|bajenn-mañ|pajennoù-mañ}} da vezañ troet.",
+ "tpt-other-pages": "Merket ez eus bet da vezañ troet {{PLURAL:$1|ur stumm kozh eus ar bajenn-mañ|stummoù koshoc'h eus ar pajennoù-mañ}};\nar {{PLURAL:$1|stumm|stummoù}} diwezhañ avat n'hallont ket bezañ merket da vezañ troet.",
+ "tpt-select-prioritylangs": "Roll kodoù ar yezhoù d'ober ganto da gentañ, dispartiet gant skejoù :",
+ "tpt-select-prioritylangs-reason": "Abeg :",
+ "tpt-sections-prioritylangs": "Yezhoù pouezusañ",
+ "tpt-rev-mark": "merkañ da vezañ troet",
+ "tpt-rev-unmark": "Lemel a-ziwar ar roll treiñ",
+ "tpt-rev-discourage": "dizerbediñ",
+ "tpt-rev-encourage": "assevel",
+ "tpt-rev-mark-tooltip": "Merkañ stumm diwezhañ ar bajenn-mañ evel stumm da vezañ troet.",
+ "tpt-rev-unmark-tooltip": "Lemel ar bajenn-mañ a-ziwar ar roll treiñ.",
+ "tpt-rev-discourage-tooltip": "Dizerbediñ treiñ ar bajenn-mañ pelloc'h.",
+ "tpt-rev-encourage-tooltip": "Adlakaat ar bajenn-mañ war ar roll treiñ normal.",
+ "translate-tag-translate-link-desc": "Treiñ ar bajenn-mañ",
+ "translate-tag-markthis": "Merkañ ar bajenn-mañ evit an treiñ",
+ "translate-tag-markthisagain": "Er bajenn-mañ ez eus bet <span class=\"plainlinks\">[$1 kemm]</span> abaoe m'eo bet <span class=\"plainlinks\">[$2 merket da vezañ troet]</span>.",
+ "translate-tag-hasnew": "Er bajenn-mañ ez eus <span class=\"plainlinks\">[$1 kemm]</span> ha n'int ket bet merket da vezañ troet.",
+ "tpt-translation-intro": "Ur stumm <span class=\"plainlinks\">[$1 troet]</span> eus ar bajenn [[$2]] eo ar bajenn-mañ; kaset ez eus bet da benn $3% eus an droidigezh anezhi, ha diouzh an deiz emañ.",
+ "tpt-translation-intro-fuzzy": "Evel-mañ eo merket an troidigezhioù dispredet.",
+ "tpt-languages-legend": "Yezhoù all :",
+ "tpt-languages-zero": "Stagañ gant an troidigezhioù evit ar yezh-se",
+ "tpt-languages-nonzero": "$1 ($2% troet)",
+ "tpt-target-page": "N'hall ket ar bajenn-mañ bezañ hizivaet gant an dorn.\nUr stumm troet eus [[$1]] eo ar bajenn-mañ; gallout a ra bezañ hizivaet en ur implijout [$2 an ostilh treiñ].",
+ "tpt-unknown-page": "Miret eo an esaouenn anv-mañ evit troidigezh ar pajennoù.\nAr bajenn hoc'h eus klasket kemm ne seblant ket klotañ gant pajenn ebet bet merket evit bezañ troet.",
+ "tpt-render-summary": "Hizivadenn da glotañ gant stumm nevez mammenn ar bajenn",
+ "tpt-aggregategroup-add": "Ouzhpennañ",
+ "tpt-aggregategroup-save": "Enrollañ",
+ "tpt-aggregategroup-new-name": "Anv :",
+ "tpt-aggregategroup-new-description": "Deskrivadur (diret) :",
+ "tpt-aggregategroup-invalid-group": "N'eus ket eus ar strollad-mañ",
+ "tpt-invalid-group": "Strollad direizh",
+ "pt-parse-open": "Tikedenn &lt;translate> digempouez.\nPatrom treiñ : <pre>$1</pre>",
+ "pt-parse-close": "Tikedenn &lt;/translate> digempouez.\nPatrom treiñ <pre>$1</pre>",
+ "pt-parse-nested": "N'eo ket aotreet ar rannbennadoù &lt;translate> empret an eil en egile.\nTestenn an dikedenn : <pre>$1</pre>",
+ "pt-shake-multiple": "Merkerioù rannbennadoù lies evit ur rannbennad.\nTestenn ar rannbennad : <pre>$1</pre>",
+ "pt-shake-position": "Merkerioù rannbennad lec'hiet drol.\nTestenn ar rannbennad : <pre>$1</pre>",
+ "pt-shake-empty": "Rannbennad c'houllo evit ar merker $1.",
+ "log-description-pagetranslation": "Marilh an obererezhioù liammet gant sistem treiñ pajennoù",
+ "log-name-pagetranslation": "Marilh troidigezhioù pajennoù",
+ "log-action-filter-pagetranslation-prioritylanguages": "Kemmañ priorelezh ar yezhoù",
+ "pt-movepage-title": "Fiñval ar bajenn da dreiñ $1",
+ "pt-movepage-blockers": "Ar bajenn da dreiñ na c'hell ket bezañ adanvet en abeg d'ar fazi{{PLURAL:$1||où}} da-heul :",
+ "pt-movepage-block-base-invalid": "Ar bajenn diazez moned en deus un titl direizh.",
+ "pt-movepage-block-tp-invalid": "Direizh e vefe titl ar bajenn treiñ moned evit [[:$1]] (re hir ?).",
+ "pt-movepage-block-section-invalid": "Direizh e vefe titl rann ar bajenn voned evit [[:$1]] (re hir ?).",
+ "pt-movepage-block-subpage-invalid": "Direizh e vefe titl an is-pajenn voned evit [[:$1]] (re hir ?).",
+ "pt-movepage-list-pages": "Roll ar pajennoù da fiñval",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Pajenn|Pajennoù}} treiñ",
+ "pt-movepage-list-section": "Pajennoù{{PLURAL:$1|}} e rann",
+ "pt-movepage-list-other": "Ispajenn{{PLURAL:$1||où}} all",
+ "pt-movepage-list-count": "$1 {{PLURAL:bajenn|pajenn}} ha $2 ispajenn da zilec'hiañ en holl.",
+ "pt-movepage-list-no-pages": "Pajenn ebet kavet.",
+ "pt-movepage-legend": "Fiñval ar bajenn da dreiñ",
+ "pt-movepage-current": "Anv red :",
+ "pt-movepage-new": "Anv nevez :",
+ "pt-movepage-reason": "Abeg :",
+ "pt-movepage-subpages": "Fiñval an holl is-pajennoù",
+ "pt-movepage-action-check": "Gwiriekaat ha posupl eo adenvel",
+ "pt-movepage-action-perform": "Adenvel",
+ "pt-movepage-action-other": "Kemmañ ar moned",
+ "pt-movepage-intro": "Gant ar bajenn dibar-mañ e c'hallit adenvel ar pajennoù merket da vezañ troet.\nNe zeuio ket da wir diouzhtu an adenvel rak ret e vo dilec'hiañ kalz a bajennoù.\nAmzer dilec'hiañ ar pajennoù ne vo ket posupl c'hoari ganto.\nEr [[Special:Log/pagetranslation|page marilh treiñ]] e vo enrollet ar mankoù adenvel; eno e vo deoc'h o reizhañ gant an dorn.",
+ "pt-movepage-logreason": "Perzh eus ar bajenn da dreiñ \"$1\"",
+ "pt-movepage-started": "Adanvet eo bet ar bajenn diazez.\nMar plij gwiriit [[Special:Log/pagetranslation|pajenn marilh an troidigezhioù]] evit kempenn ar fazioù, mar bez, ha lenn ar gemennadenn glozañ.",
+ "pt-locked-page": "Prennet eo ar bajenn-mañ dre m' emeur oc'h adenvel ar bajenn da dreiñ.",
+ "pt-deletepage-lang-title": "O tiverkañ ar bajenn dreiñ \"$1\"",
+ "pt-deletepage-tp-title": "O tiverkañ ar bajenn da dreiñ \"$1\"",
+ "pt-deletepage-invalid-title": "Faziek eo ar bajenn spisaet.",
+ "pt-deletepage-invalid-text": "N'eo ket ar bajenn spisaet ur bajenn da vezañ troet, nag ur bajenn dreiñ.",
+ "pt-deletepage-action-check": "Rollañ ar pajennoù da vezañ diverket",
+ "pt-deletepage-action-perform": "Diverkañ",
+ "pt-deletepage-action-other": "Kemmañ ar moned",
+ "pt-deletepage-lang-legend": "Diverkañ ar bajenn dreiñ",
+ "pt-deletepage-tp-legend": "Diverkañ ar bajenn a c'haller treiñ",
+ "pt-deletepage-any-legend": "Diverkañ ar bajenn da vezañ troet pe troidigezh ar bajenn da vezañ troet",
+ "pt-deletepage-current": "Anv ar bajenn :",
+ "pt-deletepage-reason": "Abeg :",
+ "pt-deletepage-subpages": "Diverkañ an holl ispajennoù",
+ "pt-deletepage-list-pages": "Roll ar pajennoù da ziverkañ",
+ "pt-deletepage-list-translation": "Pajennoù treiñ",
+ "pt-deletepage-list-section": "Pajennoù elfennoù treiñ",
+ "pt-deletepage-list-other": "Ispajennoù all",
+ "pt-deletepage-list-count": "$1 {{PLURAL:bajenn|pajenn}} da ziverkañ en holl ha $2 ispajenn.",
+ "pt-deletepage-list-no-pages": "Pajenn ebet kavet.",
+ "pt-deletepage-full-logreason": "Perzh eus ar bajenn da dreiñ \"$1\"",
+ "pt-deletepage-lang-logreason": "Perzh eus ar bajenn da dreiñ \"$1\"",
+ "pm-page-does-not-exist": "N'eus ket eus $1.",
+ "pp-prepare-button-label": "Prientiñ",
+ "pp-save-button-label": "Embann"
+}
diff --git a/Translate/i18n/pagetranslation/bs.json b/Translate/i18n/pagetranslation/bs.json
new file mode 100644
index 00000000..27885af1
--- /dev/null
+++ b/Translate/i18n/pagetranslation/bs.json
@@ -0,0 +1,203 @@
+{
+ "@metadata": {
+ "authors": [
+ "CERminator",
+ "Edinwiki",
+ "Palapa",
+ "Semso98",
+ "Srdjan m",
+ "Srđan"
+ ]
+ },
+ "pagetranslation": "Prijevod stranice",
+ "right-pagetranslation": "Označanje verzija stranica za prevođenje",
+ "action-pagetranslation": "upravljate prevodivim stranicama",
+ "tpt-section": "Jedinica prevođenja $1",
+ "tpt-section-new": "Nova jedinica prevođenja. Naziv: $1",
+ "tpt-section-deleted": "Jedinica prevođenja $1",
+ "tpt-diff-old": "Prethodni tekst",
+ "tpt-diff-new": "Novi tekst",
+ "tpt-submit": "Označi ovu verziju za prevođenje",
+ "tpt-sections-oldnew": "Nove i postojeće prevodilačke jedinice",
+ "tpt-sections-deleted": "Obrisane prevodilačke jedinice",
+ "tpt-sections-template": "Šablon stranice prevođenja",
+ "tpt-action-nofuzzy": "Ne poništavajte prevode",
+ "tpt-badtitle": "Zadano ime stranice ($1) nije valjan naslov",
+ "tpt-nosuchpage": "Stranica $1 ne postoji",
+ "tpt-oldrevision": "$2 nije posljednja verzija stranice [[:$1]].\nJedino posljednje verzije se mogu označiti za prevođenje.",
+ "tpt-notsuitable": "Stranica $1 nije pogodna za prevođenje.\nProvjerite da postoje oznake <nowiki><translate></nowiki> i da ima ispravnu sintaksu.",
+ "tpt-saveok": "Stranica [[:$1]] je označena za prevođenje sa $2 {{PLURAL:$2|prevodilačkom jedinicom|prevodilačke jedinice|prevodilačkih jedinica}}.\nStranica se sad može <span class=\"plainlinks\">[$3 prevoditi]</span>.",
+ "tpt-offer-notify": "Možete <span class=\"plainlinks\">[$1 obavijestiti prevodioce]</span> o ovoj stranici.",
+ "tpt-showpage-intro": "Ispod su navedene nove, postojeće i obrisane prevodne jedinice.\nPrije nego što označite ovu verziju za prevođenje, provjerite da su izmjene prevodnih jedinica svedene na minimum da bi se spriječio nepotrebni rad prevodioca.",
+ "tpt-mark-summary": "Ova vezija označena za prevođenje",
+ "tpt-mark-nochanges": "Nema izmjena za pregled. Ako ovu stranicu označite za prevođenje, ona se neće izmijeniti, a isto važi za bilo koju postojeću prevodilačku jedinicu.",
+ "tpt-edit-failed": "Nije moguće ažurirati stranicu: $1",
+ "tpt-duplicate": "Prevodilačka jedinica $1 koristi se više od jednom.",
+ "tpt-unmarked": "Stranica $1 više nije označena za prevođenje.",
+ "tpt-list-nopages": "Nijedna stranica nije označena za prevođenje niti je spremna za označavanje.",
+ "tpt-new-pages-title": "Stranice predložene za prevođenje",
+ "tpt-old-pages-title": "Stranice za prevođenje",
+ "tpt-other-pages-title": "Pokvarene stranice",
+ "tpt-new-pages": "{{PLURAL:$1|Ova stranica sadrži|Ove stranice sadrže}} tekst sa oznakama prijevoda, ali nijedna od verzija {{PLURAL:$1|ove stranice|ovih stranica}} nije trenutno označena za prevođenje.",
+ "tpt-old-pages": "Neke verzije {{PLURAL:$1|ove stranice|ovih stranica}} su označene za prevođenje.",
+ "tpt-other-pages": "{{PLURAL:$1|Stara verzija ove stranice je označena|Stare verzije ovih stranica su označene}} za prevođenje,\nali {{PLURAL:$1|posljednja verzija ne može|posljednje verzije ne mogu}} biti {{PLURAL:$1|označena|označene}} za prevođenje.",
+ "tpt-select-prioritylangs": "Spisak kôdova prioritetnih jezika razdvojenih zarezom:",
+ "tpt-select-prioritylangs-force": "Spriječi prevođenje na jezike koji nisu prioritetni",
+ "tpt-select-prioritylangs-reason": "Razlog:",
+ "tpt-sections-prioritylangs": "Prioritetni jezici",
+ "tpt-rev-mark": "označi za prevođenje",
+ "tpt-rev-unmark": "ukloni iz prevođenja",
+ "tpt-rev-discourage": "nepreporučeno",
+ "tpt-rev-encourage": "vrati",
+ "tpt-rev-mark-tooltip": "Označi posljednju verziju stranice za prevođenje.",
+ "tpt-rev-unmark-tooltip": "Ukloni stranicu iz prijevoda.",
+ "tpt-rev-discourage-tooltip": "Postavi stranicu kao nepreporučenu za daljnje prevođenje.",
+ "tpt-rev-encourage-tooltip": "Vrati stranicu na normalno prevođenje.",
+ "translate-tag-translate-link-desc": "Prevedi ovu stranicu",
+ "translate-tag-markthis": "Označi ovu stranicu za prevođenje",
+ "translate-tag-markthisagain": "Ova stranica ima <span class=\"plainlinks\">[$1 izmjena]</span> od kako je posljednji put <span class=\"plainlinks\">[$2 označena za prevođenje]</span>.",
+ "translate-tag-hasnew": "Ova stranica sadrži <span class=\"plainlinks\">[$1 izmjena]</span> koje nisu označene za prevođenje.",
+ "tpt-translation-intro": "Ovo je <span class=\"plainlinks\">[$1 prevedena verzija]</span> stranice [[$2]], a prijevod je $3% dovršen.",
+ "tpt-translation-intro-fuzzy": "Zastarijeli prijevodi su označeni ovako.",
+ "tpt-languages-legend": "Drugi jezici:",
+ "tpt-languages-zero": "Počnite prijevod na ovaj jezik",
+ "tpt-languages-nonzero": "$1 ($2% prevedeno)",
+ "tpt-tab-translate": "Prevedi",
+ "tpt-target-page": "Ova stranica ne može biti ručno ažurirana.\nOva stranica je prijevod stranice [[$1]] a prijevodi se mogu ažurirati putem [$2 alata za prevođenje].",
+ "tpt-unknown-page": "Ovaj imenski prostor je rezervisan za prevode stranica sadržaja.\nStranica koju pokušavate uređivati ne odgovara nekoj od stranica koje su označene za prevođenje.",
+ "tpt-translation-restricted": "Prevodilački administrator spriječio je prevođenje stranice na ovaj jezik.\n\nRazlog: $1",
+ "tpt-discouraged-language-force-header": "Stranica se ne može prevesti na $1.",
+ "tpt-discouraged-language-force-content": "Prevodilački administrator odlučio je da se stranica može prevesti samo na $1.",
+ "tpt-discouraged-language-header": "Prevođenje na $1 nije prioritet za ovu stranicu.",
+ "tpt-discouraged-language-content": "Prevodilački administrator odlučio je da se prevođenje treba usredotočiti na $1.",
+ "tpt-discouraged-language-force": "<strong>Stranica se ne može prevesti na $2.</strong>\n\nPrevodilački administrator odlučio je da se stranica može prevesti samo na $3.",
+ "tpt-priority-languages": "Prevodilački administrator ovoj grupi je postavio sljedeće prioritetne jezike: $1.",
+ "tpt-render-summary": "Ažuriram na novu verziju izvorne stranice",
+ "aggregategroups": "Zbirne grupe",
+ "tpt-aggregategroup-add": "Dodaj",
+ "tpt-aggregategroup-save": "Sačuvaj",
+ "tpt-aggregategroup-add-new": "Dodaj novu zbirnu grupu",
+ "tpt-aggregategroup-new-name": "Naziv:",
+ "tpt-aggregategroup-new-description": "Opis (neobavezno):",
+ "tpt-aggregategroup-remove-confirm": "Jeste li sigurni da želite obrisati ovu zbirnu grupu?",
+ "tpt-aggregategroup-invalid-group": "Grupa ne postoji",
+ "tpt-aggregategroup-edit-name": "Naziv:",
+ "tpt-aggregategroup-edit-description": "Opis:",
+ "tpt-aggregategroup-update": "Sačuvaj",
+ "tpt-aggregategroup-update-cancel": "Otkaži",
+ "tpt-invalid-group": "Neispravna grupa",
+ "pt-parse-open": "Neuravnotežena &lt;translate> oznaka.\nŠablon za prevođenje: <pre>$1</pre>",
+ "pt-parse-close": "Neuravnotežena &lt;/translate> oznaka.\nŠablon za prevođenje: <pre>$1</pre>",
+ "pt-parse-nested": "Uklopljene &lt;translate> prevodne jedinice nisu dozvoljene.\nTekst oznake: <pre>$1</pre>",
+ "pt-shake-multiple": "Veći broj prevodnih jedinica za istu prevodnu jedinicu.\nTekst prevodne jedinice: <pre>$1</pre>",
+ "pt-shake-position": "Markeri prevodne jedinice na nepredviđenoj poziciji.\nTekst prevodne jedinice: <pre>$1</pre>",
+ "pt-shake-empty": "Prazna prevodna jedinica za marker \"$1\".",
+ "log-description-pagetranslation": "Zapisnik akcije vezanih za sistem prevođenja stranica",
+ "log-name-pagetranslation": "Zapisnik prijevoda stranice",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|označio|označila}} je $3 za prevođenje",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|uklonio|uklonila}} je $3 iz prijevoda",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|završio|završila}} je preimenovanje prevodive stranice $3 na $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|naišao|naišla}} je na problem pri premještanju stranice $3 na $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|završio|završila}} je brisanje prevodive stranice $3",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|nije uspio|nije uspjela}} obrisati stranicu $3 koja pripada prevodivoj stranici $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|završio|završila}} je brisanje prevodive stranice $3",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|nije uspio|nije uspjela}} obrisati stranicu $3 koja pripada prevodivoj stranici $4",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|preporučio|preporučila}} je da se prevede $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|preporučio|preporučila}} je da se ne prevodi $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|uklonio|uklonila}} je prioritetne jezike s prevodive stranice $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|postavio|postavila}} je prioritetne jezike $5 za prevodivu stranicu $3",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|ograničio|ograničila}} je jezike prevodive stranice $3 na $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|dodao|dodala}} je prevodivu stranicu $3 u zbirnu grupu $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|uklonio|uklonila}} je prevodivu stranicu $3 iz zbirne grupe $4",
+ "log-action-filter-pagetranslation": "Vrsta radnje:",
+ "log-action-filter-pagetranslation-mark": "Označavanje za prevođenje",
+ "log-action-filter-pagetranslation-unmark": "Uklanjanje iz prijevoda",
+ "log-action-filter-pagetranslation-move": "Premještanje stranica",
+ "log-action-filter-pagetranslation-delete": "Brisanje stranica",
+ "log-action-filter-pagetranslation-encourage": "Podsticanje na prevođenje",
+ "log-action-filter-pagetranslation-discourage": "Odvraćanje od prevođenja",
+ "log-action-filter-pagetranslation-prioritylanguages": "Promjena prioritetnih jezika",
+ "log-action-filter-pagetranslation-aggregategroups": "Promjena zbirnih grupa",
+ "pt-movepage-title": "Premještanje stranice za prevođenje $1",
+ "pt-movepage-blockers": "Stranica koja se može prevoditi ne može biti premještena na novo ime zbog {{PLURAL:$1|slijedeće greške|slijedećih grešaka}}:",
+ "pt-movepage-block-base-invalid": "Ciljna prevodiva stranica ne predstavlja ispravan naziv.",
+ "pt-movepage-block-tp-invalid": "Naslov ciljne stranice za prijevod za [[:$1]] bi bio nevaljan (predugačak?).",
+ "pt-movepage-block-section-invalid": "Naslov ciljne stranice za \"[[:$1]]\" za prevodnu jedinicu bio bi neispravan (predugačak?).",
+ "pt-movepage-block-subpage-invalid": "Naslov ciljne podstranice za [[:$1]] bi bio nevaljan (predugačak?).",
+ "pt-movepage-list-pages": "Spisak stranica za premještanje",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Stranica|Stranice}} za prijevod",
+ "pt-movepage-list-section": "{{PLURAL:$1|Stranica|Stranice}} za prevodnu jedinicu",
+ "pt-movepage-list-other": "{{PLURAL:$1|Druga podstranica|Druge podstranice}}",
+ "pt-movepage-list-count": "Ukupno $1 {{PLURAL:$1|stranica|stranice|stranica}} za premještanje.",
+ "pt-movepage-legend": "Premjesti stranicu koja se prevodi",
+ "pt-movepage-current": "Trenutni naziv:",
+ "pt-movepage-new": "Novi naziv:",
+ "pt-movepage-reason": "Razlog:",
+ "pt-movepage-subpages": "Premjesti sve podstranice",
+ "pt-movepage-action-check": "Provjeri da li je moguće premještanje",
+ "pt-movepage-action-perform": "Izvrši premještanje",
+ "pt-movepage-action-other": "Promijeni cilj",
+ "pt-movepage-intro": "Ova posebna stranica vam omogućava da premještate stranice koje su obilježene za prevođenje.\nAkcija premještanja neće biti odmah, jer mnoge stranice trebaju biti premještene.\nDok se stranice premještaju, neće biti mogućnosti koristiti se s tim stranicama.\nGreške će biti zapisane u [[Special:Log/pagetranslation|zapisnik prevođenja stranice]] te se one moraju ispravljati ručno.",
+ "pt-movepage-logreason": "Dio stranice koja se prevodi \"$1\"",
+ "pt-movepage-started": "Provjerite [[Special:Log/pagetranslation|zapisnik prijevoda stranice]] malo kasnije za greške i poruke završetka.",
+ "pt-locked-page": "Ova stranica je zaključana jer se stranica za prevođenje sada premješta.",
+ "pt-deletepage-lang-title": "Brisanje stranice za prevođenje \"$1\"",
+ "pt-deletepage-tp-title": "Brisanje prevodive stranice \"$1\"",
+ "pt-deletepage-invalid-title": "Navedena stranica nije ispravna.",
+ "pt-deletepage-invalid-text": "Navedena stranica nije prevodiva, niti je stranica prijevoda.",
+ "pt-deletepage-action-check": "Spisak stranica za brisanje",
+ "pt-deletepage-action-perform": "Izvrši brisanje",
+ "pt-deletepage-action-other": "Promijeni cilj",
+ "pt-deletepage-lang-legend": "Obriši stranicu prijevoda",
+ "pt-deletepage-tp-legend": "Obriši prevodivu stranicu",
+ "pt-deletepage-any-legend": "Obriši prevodivu stranicu ili stranicu prijevoda",
+ "pt-deletepage-current": "Naslov stranice:",
+ "pt-deletepage-reason": "Razlog:",
+ "pt-deletepage-subpages": "Obriši sve podstranice",
+ "pt-deletepage-list-pages": "Spisak stranica za brisanje",
+ "pt-deletepage-list-translation": "Stranice za prijevod",
+ "pt-deletepage-list-section": "Stranice za prevodnu jedinicu",
+ "pt-deletepage-list-other": "Druge podstranice",
+ "pt-deletepage-list-count": "Ukupno $1 {{PLURAL:$1|stranica|stranice|stranica}} za brisanje.",
+ "pt-deletepage-full-logreason": "Dio stranice koja se prevodi \"$1\"",
+ "pt-deletepage-lang-logreason": "Dio stranice za prevođenje \"$1\"",
+ "pt-deletepage-started": "Provjerite [[Special:Log/pagetranslation|zapisnik prijevoda stranica]] za greške i poruke pri završetku.",
+ "pt-deletepage-intro": "Ova posebna stranica omogućava Vam brisanje cijele prevodive stranice ili pojedinačne stranice prijevoda na nekom jeziku.\nBrisanje neće biti obavljeno istog trena jer će se obrisati sve stranice koje ovise o stranici koja se briše.\nGreške će se evidentirati u [[Special:Log/pagetranslation|zapisniku prijevoda stranica]] i morat će se ručno ispraviti.",
+ "pagemigration": "Migracija stranica prijevoda",
+ "pagemigration-summary": "Navedite stranicu prijevoda i vratite sve prijevode napravljene prije aktiviranja sistema za prevođenje na toj stranici.",
+ "pm-import-button-label": "Uvezi",
+ "pm-savepages-button-label": "Sačuvaj",
+ "pm-cancel-button-label": "Otkaži",
+ "pm-page-does-not-exist": "$1 ne postoji.",
+ "pm-old-translations-missing": "$1 ne sadrži stare prijevode.",
+ "pm-extra-units-warning": "Možda ima dodatnih jedinica. Pobrinite se da je izvorni tekst u skladu s prijevodom.",
+ "pm-pagename-missing": "Upišite naziv stranice.",
+ "pm-add-icon-hover-text": "Dodaj jedinicu ispod",
+ "pm-swap-icon-hover-text": "Zamijeni s jedinicom ispod",
+ "pm-delete-icon-hover-text": "Obriši jedinicu",
+ "pm-pagetitle-placeholder": "Upišite naziv stranice",
+ "pm-pagetitle-invalid": "Upišite ispravan naziv stranice. Treba biti u formatu <page-name>/<language-code>.",
+ "pm-pagetitle-missing": "Upišite naziv stranice.",
+ "pm-langcode-missing": "U nazivu nedostaje jezički kôd. Upišite naziv stranice u formatu <page-name>/<language-code>.",
+ "pm-summary-import": "Uvezen prijevod pomoću [[Special:PageMigration|migracije stranica]]",
+ "pm-on-import-message-text": "Stari prijevodi su uvezeni. Poslužite se opcijama za dodavanje, zamjenu i brisanje da biste prilagodili prevodilačke jedinice i kliknite na dugme \"{{int:pm-savepages-button-label}}\" da biste ih sačuvali. Kliknite na dugme \"{{int:pm-cancel-button-label}}\" da biste ih odbacili.",
+ "pm-on-save-message-text": "Prevodilačke jedinice su sačuvane. Sad možete upisati naziv nove stranice da biste je migrirali ili ispod promijenite jedinice i sačuvajte novu izmjenu.",
+ "tpt-translate-title": "Dozvoli prijevod naziva stranice",
+ "pp-save-summary": "Stranica je pripremljena za prijevod",
+ "pagepreparation": "Priprema stranica za prijevod",
+ "pp-pagename-placeholder": "Upišite naziv stranice",
+ "pp-prepare-button-label": "Pripremi",
+ "pp-save-button-label": "Sačuvaj",
+ "pp-cancel-button-label": "Otkaži",
+ "pp-save-message": "Stranica je sačuvana. Možete je [$1 urediti].",
+ "pp-prepare-message": "Stranica je pripremljena za prevođenje. Pogledajte donju razliku izmjena. Kliknite na \"{{int:pp-save-button-label}}\" ako je sve u redu!",
+ "pp-already-prepared-message": "Izgleda da je ova stranica već spremna za prevođenje. Nema izmjena u odnosu na prethodnu verziju.",
+ "pp-pagename-missing": "Upišite naziv stranice.",
+ "pp-diff-old-header": "Izvorni tekst",
+ "pp-diff-new-header": "Pripremljeni tekst",
+ "tpt-unlink-confirm": "Potvrdite da zaista želite ukloniti ovu stranicu iz sistema za prevođenje.\nJezički selektor i prevedeni nazivi stranica prestat će raditi.\nStranice prijevoda neće se moći uređivati.",
+ "tpt-unlink-button": "Ukloni iz prijevoda",
+ "tpt-unlink-summary": "Uklonjena stranica iz prijevoda",
+ "tpt-generic-confirm": "Potvrdite radnju.",
+ "tpt-generic-button": "Potvrdi"
+}
diff --git a/Translate/i18n/pagetranslation/btm.json b/Translate/i18n/pagetranslation/btm.json
new file mode 100644
index 00000000..54579d06
--- /dev/null
+++ b/Translate/i18n/pagetranslation/btm.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Simartampua"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% iartion)"
+}
diff --git a/Translate/i18n/pagetranslation/bug.json b/Translate/i18n/pagetranslation/bug.json
new file mode 100644
index 00000000..241594c1
--- /dev/null
+++ b/Translate/i18n/pagetranslation/bug.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kurniasan"
+ ]
+ },
+ "translate-tag-translate-link-desc": "Tare'juma iyyedé leppa"
+}
diff --git a/Translate/i18n/pagetranslation/bxr.json b/Translate/i18n/pagetranslation/bxr.json
new file mode 100644
index 00000000..d460c976
--- /dev/null
+++ b/Translate/i18n/pagetranslation/bxr.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Elvonudinium"
+ ]
+ },
+ "tpt-languages-legend": "Бусад хэлэнүүд:"
+}
diff --git a/Translate/i18n/pagetranslation/ca.json b/Translate/i18n/pagetranslation/ca.json
new file mode 100644
index 00000000..d5a83526
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ca.json
@@ -0,0 +1,142 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alvaro Vidal-Abarca",
+ "Fitoschido",
+ "Jaumeortola",
+ "Jmarchn",
+ "Joan manel",
+ "Jordi Roqué",
+ "Macofe",
+ "Mguix",
+ "SMP",
+ "Solde",
+ "Ssola",
+ "Toniher",
+ "Vriullop",
+ "පසිඳු කාවින්ද"
+ ]
+ },
+ "pagetranslation": "Traducció d'una pàgina",
+ "right-pagetranslation": "Marcar versions de pàgines per a traduir",
+ "action-pagetranslation": "gestiona les pàgines traduïbles",
+ "tpt-section": "Unitat de traducció $1",
+ "tpt-section-new": "Nova unitat de traducció. Nom: $1",
+ "tpt-section-deleted": "Unitat de traducció $1",
+ "tpt-diff-old": "Text anterior",
+ "tpt-diff-new": "Text nou",
+ "tpt-submit": "Marca aquesta versió per traduir",
+ "tpt-sections-oldnew": "Unitats de traduccions noves i existents",
+ "tpt-sections-deleted": "Unitats de traducció suprimides",
+ "tpt-sections-template": "Plantilla de la pàgina de traducció",
+ "tpt-action-nofuzzy": "No invalida les traduccions",
+ "tpt-badtitle": "El nom de pàgina donat ($1) no és un títol vàlid",
+ "tpt-nosuchpage": "La pàgina $1 no existeix",
+ "tpt-notsuitable": "La pàgina $1 no està preparada per a la seva traducció.\nAssegureu-vos que té les etiquetes <nowiki><translate></nowiki> i una sintaxi vàlida.",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|Vegeu la llista de pàgines traduïbles.]]",
+ "tpt-mark-summary": "S'ha marcat aquesta versió per traduir",
+ "tpt-edit-failed": "No s'ha pogut actualitzar la pàgina: $1",
+ "tpt-unmarked": "La pàgina [[:$1]] ja no està marcada per traduir.",
+ "tpt-new-pages-title": "Pàgines proposades per traduir",
+ "tpt-old-pages-title": "Pàgines en traducció",
+ "tpt-other-pages-title": "Pàgines trencades",
+ "tpt-new-pages": "{{PLURAL:$1|Aquesta pàgina conté|Aquestes pàgines contenen}} text amb etiquetes de traducció, però cap versió d'{{PLURAL:$1|aquesta pàgina està|aquestes pàgines estan}} marcades actualment per traduir.",
+ "tpt-old-pages": "L'última versió d'{{PLURAL:$1|aquesta pàgina s'ha|aquestes pàgines s'han}} marcat per a traduir.",
+ "tpt-select-prioritylangs": "Llista separada per comes dels codis de les llengües prioritàries:",
+ "tpt-select-prioritylangs-force": "Evita traduccions a llengües que no siguin les llengües prioritàries",
+ "tpt-select-prioritylangs-reason": "Motiu:",
+ "tpt-sections-prioritylangs": "Llengües prioritàries",
+ "tpt-rev-mark": "marca per traduir",
+ "tpt-rev-unmark": "suprimeix de la traducció",
+ "tpt-rev-discourage": "desaconsella",
+ "tpt-rev-encourage": "restaura",
+ "tpt-rev-mark-tooltip": "Marca la darrera versió de la pàgina per traduir.",
+ "tpt-rev-unmark-tooltip": "Suprimeix la pàgina de la traducció.",
+ "tpt-rev-discourage-tooltip": "Desaconsella més traduccions de la pàgina.",
+ "tpt-rev-encourage-tooltip": "Restaura la pàgina a la traducció normal.",
+ "translate-tag-translate-link-desc": "Traduïu aquesta pàgina",
+ "translate-tag-markthis": "Marca la pàgina per traduir",
+ "translate-tag-hasnew": "Aquesta pàgina conté <span class=\"plainlinks\">[$1 modificacions]</span> que no estan marcades per a la traducció.",
+ "tpt-translation-intro": "Aquesta pàgina és una <span class=\"plainlinks\">[$1 versió traduïda]</span> de la pàgina [[$2]] i la traducció és completada al $3&nbsp;%.",
+ "tpt-translation-intro-fuzzy": "Les traduccions obsoletes es marquen així.",
+ "tpt-languages-legend": "Altres idiomes:",
+ "tpt-languages-zero": "Inicia la traducció per a aquesta llengua",
+ "tpt-languages-nonzero": "$1 ($2% traduït)",
+ "tpt-tab-translate": "Tradueix",
+ "tpt-target-page": "Aquesta pàgina no es pot editar manualment.\nÉs una traducció de la pàgina [[$1]] i la traducció es realitza amb [$2 l'eina de traducció].",
+ "tpt-discouraged-language-force-header": "Aquesta pàgina no es pot traduir a $1.",
+ "tpt-render-summary": "S'està actualitzant per a coincidir amb la nova versió de la pàgina font",
+ "aggregategroups": "Grups d'agregació",
+ "tpt-aggregategroup-add": "Afegeix",
+ "tpt-aggregategroup-save": "Desa",
+ "tpt-aggregategroup-add-new": "Afegeix un grup d'agregació nou",
+ "tpt-aggregategroup-new-name": "Nom:",
+ "tpt-aggregategroup-new-description": "Descripció (opcional):",
+ "tpt-aggregategroup-invalid-group": "El grup no existeix",
+ "tpt-aggregategroup-edit-name": "Nom:",
+ "tpt-aggregategroup-edit-description": "Descripció:",
+ "tpt-aggregategroup-update": "Desa",
+ "tpt-aggregategroup-update-cancel": "Cancel·la",
+ "tpt-invalid-group": "El grup no és vàlid",
+ "log-action-filter-pagetranslation": "Tipus d'acció:",
+ "log-action-filter-pagetranslation-mark": "Marca per traduir",
+ "log-action-filter-pagetranslation-unmark": "Supressió de la traducció",
+ "log-action-filter-pagetranslation-move": "Reanomenaments de pàgina",
+ "log-action-filter-pagetranslation-delete": "Eliminacions de pàgina",
+ "pt-movepage-title": "Mou la pàgina traduïble $1",
+ "pt-movepage-blockers": "La pàgina traduïble no pot ser reanomenada a causa {{PLURAL:$1|de l'error següent|dels errors següents}}:",
+ "pt-movepage-block-base-invalid": "El nom de la pàgina traduïble de destinació no té un títol vàlid.",
+ "pt-movepage-block-tp-invalid": "El títol de la pàgina de traducció de destinació [[:$1]] no seria vàlid (potser seria massa llarg).",
+ "pt-movepage-block-section-invalid": "El títol de la pàgina destinació ''[[:$1]]'' per a la unitat de traducció no seria vàlid (potser és massa llarg?).",
+ "pt-movepage-block-subpage-invalid": "El títol de la subpàgina de destinació [[:$1]] no seria vàlid (potser seria massa llarg).",
+ "pt-movepage-list-pages": "Llista de pàgines per moure",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Pàgina|Pàgines}} de traducció",
+ "pt-movepage-list-section": "{{PLURAL:$1|Pàgina|Pàgines}} d'unitat de traducció",
+ "pt-movepage-list-other": "{{PLURAL:$1|Altra subpàgina|Altres subpàgines}}",
+ "pt-movepage-list-count": "En total, $1 {{PLURAL:$1|pàgina|pàgines}}, incloent-hi $2 {{PLURAL:$2|subpàgina|subpàgines}} i $3 {{PLURAL:$3|pàgina|pàgines}} de discussió per moure.",
+ "pt-movepage-legend": "Mou la pàgina traduïble",
+ "pt-movepage-current": "Nom actual:",
+ "pt-movepage-new": "Nom nou:",
+ "pt-movepage-reason": "Motiu:",
+ "pt-movepage-subpages": "Mou totes les subpàgines",
+ "pt-movepage-action-check": "Verifica si és possible el trasllat",
+ "pt-movepage-action-perform": "Fes el trasllat",
+ "pt-movepage-action-other": "Canvia la destinació",
+ "pt-movepage-intro": "Aquesta pàgina especial permet desplaçar pàgines que estan marcades per a la traducció.\nEl trasllat no serà instantani, perquè moltes pàgines hauran de ser mogudes.\nMentre s'estiguin traslladant les pàgines no serà possible interaccionar amb les pàgines en qüestió.\nEls errors sortiran indicats al [[Special:Log/pagetranslation|registre de traducció de pàgines]] i hauran d'ésser reparats a mà.",
+ "pt-movepage-logreason": "Part de la pàgina a traduir «$1»",
+ "pt-movepage-started": "Comproveu el [[Special:Log/pagetranslation|registre de traducció de pàgines]] pels errors i el missatge de finalització.",
+ "pt-locked-page": "Aquesta pàgina està blocada perquè la pàgina a traduir està en un procés de trasllat.",
+ "pt-deletepage-current": "Nom de la pàgina:",
+ "pt-deletepage-reason": "Raó:",
+ "pt-deletepage-list-pages": "Llista de pàgines per eliminar",
+ "pt-deletepage-list-translation": "Pàgines de traducció",
+ "pt-deletepage-list-section": "Pàgines d'unitats de traducció",
+ "pt-deletepage-list-other": "Altres subpàgines",
+ "pm-import-button-label": "Importa",
+ "pm-savepages-button-label": "Desa",
+ "pm-cancel-button-label": "Cancel·la",
+ "pm-page-does-not-exist": "$1 no existeix.",
+ "pm-old-translations-missing": "$1 no conté traduccions antigues.",
+ "pm-add-icon-hover-text": "Afegeix una unitat a sota",
+ "pm-swap-icon-hover-text": "Intercanvia amb la unitat a sota",
+ "pm-delete-icon-hover-text": "Elimina la unitat",
+ "pm-pagetitle-placeholder": "Introduïu el títol de la pàgina",
+ "pm-pagetitle-invalid": "Introduïu un títol vàlid per la pàgina. Ha d'estar en format <nom-de-pàgina>/<codi-d'idioma>.",
+ "pm-pagetitle-missing": "Introduïu el títol de la pàgina.",
+ "pm-langcode-missing": "Sembla que falta el codi d’idioma al títol. Introduïu un títol vàlid per la pàgina en format <nom-de-pàgina>/<codi-d'idioma>.",
+ "tpt-translate-title": "Permet la traducció del títol de la pàgina",
+ "pp-save-summary": "Preparada la pàgina per traduir",
+ "pagepreparation": "Prepareu la pàgina per traduir",
+ "pp-pagename-placeholder": "Introduïu el nom de la pàgina",
+ "pp-prepare-button-label": "Prepara",
+ "pp-save-button-label": "Publica",
+ "pp-cancel-button-label": "Cancel·la",
+ "pp-diff-error": "S’ha produït un error en recuperar les diferències del servidor.",
+ "pp-pagename-missing": "Introduïu el nom de la pàgina.",
+ "pp-diff-old-header": "Text font",
+ "pp-diff-new-header": "Text preparat",
+ "tpt-unlink-button": "Suprimeix de la traducció",
+ "tpt-unlink-summary": "S'ha suprimit la pàgina de la traducció",
+ "tpt-generic-confirm": "Confirmeu l'acció.",
+ "tpt-generic-button": "Confirma"
+}
diff --git a/Translate/i18n/pagetranslation/cdo.json b/Translate/i18n/pagetranslation/cdo.json
new file mode 100644
index 00000000..851efd45
--- /dev/null
+++ b/Translate/i18n/pagetranslation/cdo.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Davidzdh"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% gó muôi huăng-ĭk)"
+}
diff --git a/Translate/i18n/pagetranslation/ce.json b/Translate/i18n/pagetranslation/ce.json
new file mode 100644
index 00000000..d8ff6e35
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ce.json
@@ -0,0 +1,57 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sasan700",
+ "Исмаил Садуев",
+ "Умар"
+ ]
+ },
+ "pagetranslation": "АгӀонаш гочйар",
+ "tpt-diff-old": "Хьалхара йоза",
+ "tpt-diff-new": "Керла йоза",
+ "tpt-old-pages-title": "Гочан чуьра агӀонаш",
+ "tpt-new-pages": "{{PLURAL:$1|1=ХӀокху агӀонан чулацам бу|ХӀокху агӀонийн чулацам бу}} гочан тегашца йоза, амма {{PLURAL:$1|1=хӀокху агӀонан|хӀокху агӀонийн}} цхьа верси билгалйина йац гочйан.",
+ "tpt-old-pages": "{{PLURAL:$1|1=хӀокху агӀонан|хӀокху агӀонийн}} цхьайолу версеш гочйан билгалйина йу.",
+ "tpt-select-prioritylangs-reason": "Бахьана:",
+ "tpt-languages-legend": "Кхин меттанаш:",
+ "tpt-languages-nonzero": "$1 ($2% гочдина)",
+ "aggregategroups": "Вовшаштоьхна тобанаш",
+ "tpt-aggregategroup-add": "ТӀетоха",
+ "tpt-aggregategroup-new-description": "Цуьнах лаьцна (тӀехь дац):",
+ "tpt-aggregategroup-edit-name": "ЦӀе:",
+ "tpt-aggregategroup-update": "Ӏалашдан",
+ "tpt-aggregategroup-update-cancel": "Цаоьшу",
+ "tpt-invalid-group": "ТӀекхачарехь йоцу тоба",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|цӀе хийцина}} гочйан луш йолу агӀонан «$3» → «$4»",
+ "log-action-filter-pagetranslation": "Дечунна тайпа:",
+ "log-action-filter-pagetranslation-delete": "АгӀо дӀайаккхар",
+ "pt-movepage-current": "Карара цӀе:",
+ "pt-movepage-new": "Керла цӀе:",
+ "pt-movepage-reason": "Бахьана:",
+ "pt-movepage-action-other": "Хийца Ӏалашо",
+ "pt-deletepage-invalid-text": "Билгалйина агӀо гоч йа луш йолу агӀонийн йукъа йогӀуш йац.",
+ "pt-deletepage-action-perform": "Кхочушдé дӀайаккхар",
+ "pt-deletepage-action-other": "Хийца Ӏалашо",
+ "pt-deletepage-current": "АгӀонан цӀе:",
+ "pt-deletepage-reason": "Бахьана:",
+ "pagemigration": "АгӀонийн миграци",
+ "pm-import-button-label": "Импорт йан",
+ "pm-savepages-button-label": "Ӏалашдан",
+ "pm-cancel-button-label": "Йухайаккхар",
+ "pm-page-does-not-exist": "«$1» йац",
+ "pm-old-translations-missing": "$1 шира гочдарш чохь дац",
+ "pm-pagename-missing": "Дехар до, дӀайазйе агӀонан цӀе:",
+ "pm-pagetitle-invalid": "Дехар до, дӀаязеъе агӀона нийса цӀе.",
+ "pm-langcode-missing": "Дехар до, меттан код йазйе",
+ "pp-save-summary": "АгӀо гочйан кечйина",
+ "pagepreparation": "АгӀо гочйан кечйина",
+ "pp-pagename-placeholder": "Йазйе агӀонан цӀе",
+ "pp-prepare-button-label": "Кечъян",
+ "pp-save-button-label": "Ӏалашйан",
+ "pp-cancel-button-label": "Цаоьшу",
+ "pp-save-message": "АгӀо Ӏалашйина. Хьан йиш йу иза [$1 тайан].",
+ "pp-pagename-missing": "Дехар до, дӀайазйе агӀонан цӀе.",
+ "pp-diff-old-header": "ДӀадолалун йоза",
+ "pp-diff-new-header": "Кечдина йоза",
+ "tpt-generic-button": "Бакъдан"
+}
diff --git a/Translate/i18n/pagetranslation/ceb.json b/Translate/i18n/pagetranslation/ceb.json
new file mode 100644
index 00000000..83fb6978
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ceb.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "MuratTheTurkish"
+ ]
+ },
+ "tpt-languages-legend": "Uban pang mga sinultian:"
+}
diff --git a/Translate/i18n/pagetranslation/ckb.json b/Translate/i18n/pagetranslation/ckb.json
new file mode 100644
index 00000000..4e7becb3
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ckb.json
@@ -0,0 +1,38 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aram",
+ "Asoxor",
+ "Calak",
+ "Cwtiyar",
+ "Marmzok",
+ "Muhammed taha",
+ "Sarchia",
+ "ئارام بکر",
+ "رزگار"
+ ]
+ },
+ "pagetranslation": "وەرگێڕانی پەڕە",
+ "tpt-diff-old": "دەقی پێشوو",
+ "tpt-diff-new": "دەقی نوێ",
+ "tpt-submit": "نیشان‌کردنی ئەم وەشانە بۆ وەرگێڕان",
+ "tpt-sections-template": "داڕێژی لاپەڕەی وەرگێڕان",
+ "tpt-nosuchpage": "پەڕەی \"$1\" بوونی نیه‌",
+ "tpt-mark-summary": "نیشانکردنی ئەم وەشانە بۆ وەرگێڕان",
+ "tpt-select-prioritylangs-reason": "هۆکار:",
+ "tpt-rev-encourage": "گەڕاندنەوە",
+ "translate-tag-translate-link-desc": "ئەم پەڕەیە وەربگێڕە",
+ "translate-tag-markthis": "نیشان‌کردنی ئەم لاپەڕەیە بۆ وەرگێڕان",
+ "tpt-languages-legend": "زمانەکانی تر:",
+ "tpt-languages-nonzero": "$1 ($2% وەرگێڕراوە)",
+ "tpt-aggregategroup-add": "زێدەبکە",
+ "tpt-aggregategroup-save": "پاشەکەوتی بکە",
+ "tpt-aggregategroup-new-name": "ناو:",
+ "tpt-aggregategroup-update-cancel": "ھەڵوەشاندنەوە",
+ "pt-movepage-new": "ناوی نوێ:",
+ "pt-movepage-reason": "هۆکار:",
+ "pt-deletepage-current": "ناوی پەڕە:",
+ "pt-deletepage-reason": "هۆکار:",
+ "pm-cancel-button-label": "ھەڵوەشاندنەوە",
+ "pp-save-button-label": "بڵاوکردنەوە"
+}
diff --git a/Translate/i18n/pagetranslation/cnr-latn.json b/Translate/i18n/pagetranslation/cnr-latn.json
new file mode 100644
index 00000000..ba3fa8f9
--- /dev/null
+++ b/Translate/i18n/pagetranslation/cnr-latn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bellatrix10"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% prevedeno)"
+}
diff --git a/Translate/i18n/pagetranslation/co.json b/Translate/i18n/pagetranslation/co.json
new file mode 100644
index 00000000..e6b4bc38
--- /dev/null
+++ b/Translate/i18n/pagetranslation/co.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jun Misugi"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2 % traduttu)"
+}
diff --git a/Translate/i18n/pagetranslation/crh-latn.json b/Translate/i18n/pagetranslation/crh-latn.json
new file mode 100644
index 00000000..12d30020
--- /dev/null
+++ b/Translate/i18n/pagetranslation/crh-latn.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "TayfunEt."
+ ]
+ },
+ "tpt-select-prioritylangs-reason": "Sebep:",
+ "tpt-languages-legend": "Başqa tiller:",
+ "tpt-aggregategroup-save": "Saqla",
+ "tpt-aggregategroup-close": "Qapat",
+ "tpt-aggregategroup-new-name": "İsim:",
+ "tpt-aggregategroup-edit-name": "İsim:",
+ "tpt-aggregategroup-edit-description": "Tasvir:",
+ "tpt-aggregategroup-update": "Saqla",
+ "tpt-aggregategroup-update-cancel": "Lâğu",
+ "pm-savepages-button-label": "Saqla",
+ "pm-cancel-button-label": "Lâğu",
+ "pp-save-button-label": "Yayınla",
+ "pp-cancel-button-label": "Lâğu",
+ "tpt-generic-button": "Tasdıqla"
+}
diff --git a/Translate/i18n/pagetranslation/cs.json b/Translate/i18n/pagetranslation/cs.json
new file mode 100644
index 00000000..21af24fa
--- /dev/null
+++ b/Translate/i18n/pagetranslation/cs.json
@@ -0,0 +1,139 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chmee2",
+ "Dvorapa",
+ "H4nek",
+ "Janet11",
+ "Kvetoslav47",
+ "Littledogboy",
+ "Matěj Grabovský",
+ "Matěj Suchánek",
+ "Michaelbrabec",
+ "Mormegil",
+ "Patriccck",
+ "Patrik L.",
+ "Vks",
+ "Want"
+ ]
+ },
+ "pagetranslation": "Překlad stránek",
+ "right-pagetranslation": "Označování verzí stránek pro překlad",
+ "action-pagetranslation": "spravovat přeložitelné stránky",
+ "tpt-section": "Část překladu $1",
+ "tpt-section-new": "Nová část překladu.\nNázev: $1",
+ "tpt-section-deleted": "Část překladu $1",
+ "tpt-diff-old": "Předchozí text",
+ "tpt-diff-new": "Nový text",
+ "tpt-submit": "Označit tuto verzi pro překlad",
+ "tpt-sections-oldnew": "Nové a existující části překladu",
+ "tpt-sections-deleted": "Smazané části překladu",
+ "tpt-sections-template": "Šablona stránky pro překlad",
+ "tpt-action-nofuzzy": "Nezneplatňovat překlady",
+ "tpt-badtitle": "Zadaný název stránky ($1) je neplatný",
+ "tpt-nosuchpage": "Stránka $1 neexistuje",
+ "tpt-oldrevision": "$2 není nejnovější verze stránky [[:$1]].\nPro překlad je možné označit pouze nejnovější verze.",
+ "tpt-notsuitable": "Stránka $1 není vhodná pro překlad.\nUjistěte se, že obsahuje značky $2 a má platnou syntaxi.",
+ "tpt-saveok": "Stránka [[:$1]] byla označena pro překlad {{PLURAL:$2|s $2 částí překladu|se $2 částmi překladu|s $2 částmi překladu}}.\nTato stránka může být nyní <span class=\"plainlinks\">[$3 přeložena]</span>.",
+ "tpt-showpage-intro": "Níže jsou uvedeny nové, současné a smazané části.\nNež tuto verzi označíte pro překlad, zkontrolujte, že změny částí jsou minimální, abyste zabránili zbytečné práci překladatelů.",
+ "tpt-mark-summary": "Tato verze je označená pro překlad",
+ "tpt-edit-failed": "Nelze aktualizovat stránku: $1",
+ "tpt-unmarked": "Stránka [[:$1]] už není označena k překladu.",
+ "tpt-list-nopages": "Žádné stránky nejsou označeny pro překlad nebo na to nejsou připraveny.",
+ "tpt-new-pages-title": "Stránky navržené k překladu",
+ "tpt-old-pages-title": "Překládané stránky",
+ "tpt-other-pages-title": "Rozbité stránky",
+ "tpt-new-pages": "{{PLURAL:$1|Tato stránka obsahuje|Tyto stránky obsahují}} text se značkami pro překlad, ale žádná verze {{PLURAL:$1|této stránky|těchto stránek}} není aktuálně označena pro překlad.",
+ "tpt-old-pages": "Nejnovější verze {{PLURAL:$1|této stránky|každé z těchto stránek}} byla označena pro překlad.",
+ "tpt-other-pages": "Starší verze {{PLURAL:$1|této stránky je označena|těchto stránek jsou označeny}} pro překlad,\nale nejnovější verze {{PLURAL:$1|nemůže být k překladu označena|nemohou být k překladu označeny}}.",
+ "tpt-outdated-pages": "{{PLURAL:$1|Na této stránce|Na těchto stránkách}} jsou změny, které nebyly označeny pro překlad.",
+ "tpt-select-prioritylangs": "Čárkou oddělený seznam kódů prioritních jazyků:",
+ "tpt-select-prioritylangs-force": "Zakázat překlady do jiných než prioritních jazyků",
+ "tpt-select-prioritylangs-reason": "Důvod:",
+ "tpt-sections-prioritylangs": "Prioritní jazyky",
+ "tpt-rev-mark": "označit pro překlad",
+ "tpt-rev-unmark": "odstranit z překladu",
+ "tpt-rev-discourage": "nedoporučit",
+ "tpt-rev-encourage": "Obnovit",
+ "tpt-rev-mark-tooltip": "Označí nejnovější verzi této stránky k překladu.",
+ "tpt-rev-unmark-tooltip": "Odstranit tuto stránku z překladu.",
+ "tpt-rev-discourage-tooltip": "Nedoporučí další překlady této stránky.",
+ "tpt-rev-encourage-tooltip": "Vrátí tuto stránku k normálnímu překladu.",
+ "translate-tag-translate-link-desc": "Přeložit tuto stránku",
+ "translate-tag-markthis": "Označit tuto stránku pro překlad",
+ "translate-tag-markthisagain": "Tato stránka byla <span class=\"plainlinks\">[$1 změněna]</span> od posledního <span class=\"plainlinks\">[$2 označení pro překlad]</span>.",
+ "translate-tag-hasnew": "Tato stránka obsahuje <span class=\"plainlinks\">[$1 změny]</span>, které nebyly označeny pro překlad.",
+ "tpt-translation-intro": "Toto je <span class=\"plainlinks\">[$1 přeložená verze]</span> stránky [[$2]], překlad je hotový z $3 %.",
+ "tpt-translation-intro-fuzzy": "Takto jsou označeny zastaralé části překladu.",
+ "tpt-languages-legend": "Jiné jazyky:",
+ "tpt-languages-zero": "Začít překlad do tohoto jazyka",
+ "tpt-languages-nonzero": "$1 ({{PLURAL:$2|přeloženo|přeložena|přeloženo}} $2 %)",
+ "tpt-tab-translate": "Přeložit",
+ "tpt-target-page": "Tuto stránku nelze ručně aktualizovat.\nTato stránka je překladem stránky [[$1]] a překlad lze aktualizovat pomocí [$2 nástroje pro překlad].",
+ "tpt-unknown-page": "Tento jmenný prostor je vyhrazen pro překlady stránek s obsahem.\nZdá se, že stránka, kterou se pokoušíte upravovat, neodpovídá žádné stránce označené pro překlad.",
+ "tpt-translation-restricted": "Správce překladů zabránil překladu této stránky do tohoto jazyka.\n\nZdůvodnění: $1",
+ "tpt-discouraged-language-force-header": "Tuto stránku nelze překládat do jazyka $1.",
+ "tpt-discouraged-language-force-content": "Správce překladů se rozhodl, že tuto stránku je možné překládat pouze do $1.",
+ "tpt-discouraged-language-header": "Překlad do jazyka $1 není pro tuto stránku prioritou.",
+ "tpt-discouraged-language-content": "Správce překladů se rozhodl zacílit překladatelské úsilí na $1.",
+ "tpt-discouraged-language-force": "<strong>Tuto stránku nelze překládat do jazyka $2.</strong>\n\nSprávce překladů se rozhodl, že tuto stránku lze překládat pouze do $3.",
+ "tpt-priority-languages": "Správce překladů nastavil prioritní jazyky pro tuto skupinu na $1.",
+ "tpt-render-summary": "Stránka aktualizována, aby odpovídala nové verzi zdrojové stránky",
+ "tpt-aggregategroup-add": "Přidat",
+ "tpt-aggregategroup-save": "Uložit",
+ "tpt-aggregategroup-new-name": "Jméno:",
+ "tpt-aggregategroup-new-description": "Popis (nepovinné):",
+ "tpt-aggregategroup-invalid-group": "Skupina neexistuje",
+ "tpt-aggregategroup-edit-name": "Jméno:",
+ "tpt-aggregategroup-edit-description": "Popis:",
+ "tpt-aggregategroup-update": "Uložit",
+ "tpt-aggregategroup-update-cancel": "Storno",
+ "tpt-invalid-group": "Neplatná skupina",
+ "log-description-pagetranslation": "Protokol úkonů souvisejících se systémem překladu stránek",
+ "log-name-pagetranslation": "Kniha překladů stránek",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|označil|označila}} stránku $3 k překladu",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|vyjmul|vyjmula}} stránku $3 ze systému překládání",
+ "pt-movepage-list-pages": "Seznam stránek k přesunutí",
+ "pt-movepage-list-translation": "Překlad {{PLURAL:$1|stránky|stránek}}",
+ "pt-movepage-list-section": "{{PLURAL:$1|Stránka s částí překladu|Stránky s částmi překladu}}",
+ "pt-movepage-list-other": "{{PLURAL:$1|Jiná podstránka|Jiné podstránky}}",
+ "pt-movepage-list-count": "Celkem $1 {{PLURAL:$1|stránka|stránky|stránek}} k přesunutí, včetně $2 {{PLURAL:$2|podstránky|podstránek}} a $3 {{PLURAL:$3|diskusní stránky|diskusních stránek}}.",
+ "pt-movepage-legend": "Přesunout přeložitelnou stránku",
+ "pt-movepage-current": "Současný název:",
+ "pt-movepage-new": "Nový název:",
+ "pt-movepage-reason": "Důvod:",
+ "pt-movepage-subpages": "Přesunout všechny podstránky",
+ "pt-movepage-action-check": "Zkontrolovat, zda je přesun možný",
+ "pt-movepage-action-perform": "Přesunout",
+ "pt-movepage-action-other": "Změnit cíl",
+ "pt-deletepage-current": "Název stránky:",
+ "pt-deletepage-reason": "Důvod:",
+ "pt-deletepage-subpages": "Odstranit všechny podstránky",
+ "pt-deletepage-list-pages": "Seznam stránek ke smazání",
+ "pt-deletepage-list-translation": "Překladové stránky",
+ "pt-deletepage-list-section": "Stránky s částmi překladu",
+ "pt-deletepage-list-other": "Další podstránky",
+ "pt-deletepage-list-count": "Celkem $1 {{PLURAL:$1|stránka|stránky|stránek}} a $2 {{PLURAL:$2|podstránka|podstránky|podstránek}} ke smazání.",
+ "pt-deletepage-full-logreason": "Část přeložitelné stránky „$1“",
+ "pt-deletepage-lang-logreason": "Část překladové stránky „$1“",
+ "pagemigration": "Migrace překladových stránek",
+ "pm-import-button-label": "Importovat",
+ "pm-savepages-button-label": "Uložit",
+ "pm-cancel-button-label": "Storno",
+ "pm-page-does-not-exist": "Stránka $1 neexistuje",
+ "pm-old-translations-missing": "Stránka $1 neobsahuje staré překlady",
+ "pm-extra-units-warning": "Mohou existovat přebytečné části překladu. Zarovnejte prosím správně zdrojové a cílové části",
+ "pm-pagename-missing": "Zadejte prosím název stránky",
+ "pm-add-icon-hover-text": "Přidat část níže",
+ "pm-swap-icon-hover-text": "Prohodit s částí níže",
+ "pm-delete-icon-hover-text": "Smazat položku",
+ "pm-langcode-missing": "Vypadá to, že za názvem stránky schází kód jazyka. Zadejte prosím název stránky ve tvaru <page-name>/<language-code>.",
+ "tpt-translate-title": "Umožnit překlad názvu stránky",
+ "pp-prepare-button-label": "Připravit",
+ "pp-save-button-label": "Zveřejnit",
+ "pp-cancel-button-label": "Storno",
+ "pp-pagename-missing": "Zadejte prosím název stránky.",
+ "pp-diff-old-header": "Zdrojový text",
+ "tpt-generic-confirm": "Prosím potvrďte akci.",
+ "tpt-generic-button": "Potvrdit"
+}
diff --git a/Translate/i18n/pagetranslation/csb.json b/Translate/i18n/pagetranslation/csb.json
new file mode 100644
index 00000000..fb0e25cb
--- /dev/null
+++ b/Translate/i18n/pagetranslation/csb.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kaszeba"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 (zdolmaczono $2%)"
+}
diff --git a/Translate/i18n/pagetranslation/cu.json b/Translate/i18n/pagetranslation/cu.json
new file mode 100644
index 00000000..531f417e
--- /dev/null
+++ b/Translate/i18n/pagetranslation/cu.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "NR Deblocked",
+ "ОйЛ"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% {{PLURAL:$2|прѣложєнъ ѥстъ|прѣложєна ѥстє|прѣложєнꙑ сѫтъ}})",
+ "tpt-discouraged-translation-content": "Администраторъ переводовъ ​не​ ѻдобрѧетъ ​переводъ​ ​этой​ ​страни҄цы​. ​вы̀​ ​всѐ​ ​є҆щѐ​ мо́жете ​перевести​ страни́цꙋ но ​переводъ​ мо́жетъ ѻказатьсѧ ​бесполезнымъ​.",
+ "tpt-aggregategroup-new-name": "имѧ :",
+ "visualeditor-annotations-translate-end": "​коне́цъ​ переводимого ​содержа́нїѧ​",
+ "visualeditor-annotations-translate-description": "​Этотъ​ дїапазонъ ѻтмеченъ ка́къ переводимый. Оубедитесь ​что́​ ​вывы​ следꙋете рекомендацїѧмъ [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text \n И҆змѣне́нїе исходного ​текста​].",
+ "visualeditor-annotations-tvar-end": "​ⰽⱁⱀⰵⱌ​ ⱀⰵ ⱂⰵⱃⰵⰲⱁⰴⰹⰿⱁⰳⱁ ⰽⱁⱀⱅⰵⱀⱅⰰ"
+}
diff --git a/Translate/i18n/pagetranslation/cy.json b/Translate/i18n/pagetranslation/cy.json
new file mode 100644
index 00000000..7863894a
--- /dev/null
+++ b/Translate/i18n/pagetranslation/cy.json
@@ -0,0 +1,52 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cymrodor",
+ "Ham II",
+ "Lloffiwr",
+ "Xxglennxx"
+ ]
+ },
+ "pagetranslation": "Cyfieithu tudalen",
+ "tpt-section": "Adran gyfieithu rhif $1",
+ "tpt-section-deleted": "Adran gyfieithu rhif $1",
+ "tpt-diff-old": "Y testun cynt",
+ "tpt-diff-new": "Y testun newydd",
+ "tpt-submit": "Marcio'r diwygiad hwn i'w gyfieithu",
+ "tpt-sections-oldnew": "Unedau cyfieithu, yn newydd ac yno'n barod",
+ "tpt-sections-deleted": "Unedau cyfieithu dileedig",
+ "tpt-sections-template": "Nodyn cyfieithu tudalen",
+ "tpt-other-pages-title": "Tudalennau toredig",
+ "tpt-select-prioritylangs-reason": "Rheswm:",
+ "tpt-sections-prioritylangs": "Blaenoriaethau ymhlith yr ieithoedd",
+ "tpt-languages-legend": "Ieithoedd eraill:",
+ "tpt-languages-nonzero": "$1 ($2% wedi'i gyfieithu)",
+ "tpt-aggregategroup-add": "Ychwaneger",
+ "tpt-aggregategroup-save": "Cadw",
+ "tpt-aggregategroup-new-name": "Enw:",
+ "tpt-aggregategroup-new-description": "Disgrifiad (dewisol):",
+ "log-name-pagetranslation": "Lòg cyfieithu tudalennau",
+ "pt-movepage-list-pages": "Rhestr y tudalennau i'w symud",
+ "pt-movepage-list-translation": "{{PLURAL:$1||Tudalen gyfieithu|Tudalennau cyfieithu}}",
+ "pt-movepage-list-section": "{{PLURAL:$1||Tudalen|Tudalennau}} uned gyfieithu",
+ "pt-movepage-list-other": "{{PLURAL:$1|Isdudalen arall|Isdudalen arall|Isdudalennau eraill}}",
+ "pt-movepage-list-count": "Cyfanswm y tudalennau i'w symud yw {{PLURAL:$1|$1}}.",
+ "pt-movepage-legend": "Symud tudalen y gellir ei chyfieithu",
+ "pt-movepage-current": "Enw cyfredol:",
+ "pt-movepage-new": "Enw newydd:",
+ "pt-movepage-reason": "Rheswm:",
+ "pt-movepage-subpages": "Symud pob isdudalen",
+ "pt-movepage-action-check": "Cadarnhau bod symud y dudalen yn bosibl",
+ "pt-movepage-action-perform": "Symuder",
+ "pt-movepage-action-other": "Dewis tudalen wahanol",
+ "pt-deletepage-action-perform": "Dilëir",
+ "pt-deletepage-action-other": "Dewis tudalen wahanol",
+ "pt-deletepage-current": "Enw'r dudalen:",
+ "pt-deletepage-reason": "Rheswm:",
+ "pt-deletepage-subpages": "Dileu'r holl isdudalennau",
+ "pt-deletepage-list-pages": "Rhestr y tudalennau i'w dileu",
+ "pt-deletepage-list-translation": "Tudalennau cyfieithu",
+ "pt-deletepage-list-section": "Tudalennau uned gyfieithu",
+ "pt-deletepage-list-other": "Isdudalennau eraill",
+ "pt-deletepage-list-count": "Cyfanswm y tudalennau i'w dileu yw {{PLURAL:$1|$1}}."
+}
diff --git a/Translate/i18n/pagetranslation/da.json b/Translate/i18n/pagetranslation/da.json
new file mode 100644
index 00000000..ab91704e
--- /dev/null
+++ b/Translate/i18n/pagetranslation/da.json
@@ -0,0 +1,183 @@
+{
+ "@metadata": {
+ "authors": [
+ "Byrial",
+ "Christian List",
+ "Emilkris33",
+ "Kaare",
+ "Peter Alberti",
+ "Purodha",
+ "Saederup92"
+ ]
+ },
+ "pagetranslation": "Sideoversættelse",
+ "right-pagetranslation": "Markere versioner af sider for oversættelse",
+ "action-pagetranslation": "håndter oversætbare sider",
+ "tps-edit-sourcepage-ve-warning-button": "OK",
+ "tpt-section": "Oversættelsesenhed $1",
+ "tpt-section-new": "Ny oversættelsesenhed.\nNavn: $1",
+ "tpt-section-deleted": "Oversættelsesenhed $1",
+ "tpt-diff-old": "Forrige tekst",
+ "tpt-diff-new": "Ny tekst",
+ "tpt-submit": "Markér denne version for oversættelse",
+ "tpt-sections-oldnew": "Nye og eksisterende oversættelsesenheder",
+ "tpt-sections-deleted": "Slettede oversættelsesenheder",
+ "tpt-sections-template": "Skabelon til oversættelsesside",
+ "tpt-action-nofuzzy": "Ugyldiggør ikke oversættelser.",
+ "tpt-badtitle": "Det angivne sidenavn ($1) er ikke en gyldig titel",
+ "tpt-nosuchpage": "Siden $1 findes ikke",
+ "tpt-oldrevision": "$2 er ikke den seneste version af siden [[:$1]].\nKun den seneste version kan markeres for oversættelse.",
+ "tpt-notsuitable": "Siden $1 er ikke parat til oversættelse.\nSørg for at den har <nowiki><translate></nowiki>-tags og en gyldig syntaks.",
+ "tpt-saveok": "Siden [[:$1]] er blevet markeret til oversættelse med $2 {{PLURAL:$2|oversættelsesenhed|oversættelsesenheder}}.\nSiden kan nu <span class=\"plainlinks\">[$3 oversættes]</span>.",
+ "tpt-offer-notify": "Du kan <span class=\"plainlinks\">[$1 underrette oversættere]</span> om denne side.",
+ "tpt-showpage-intro": "Herunder listes der nye, eksisterende og slettede oversættelsesenheder.\nFør denne version markeres til oversættelse, skal du kontrollere, at ændringerne i oversættelsesenhederne er minimeret for at undgå at give oversætterne unødigt arbejde.",
+ "tpt-mark-summary": "Markerede denne version for oversættelse",
+ "tpt-edit-failed": "Kunne ikke opdatere siden: $1",
+ "tpt-duplicate": "Oversættelsesenhedsnavnet $1 anvendes mere end en gang.",
+ "tpt-unmarked": "Siden $1 er ikke længere markeret til oversættelse.",
+ "tpt-list-nopages": "Ingen sider er markeret for oversættelse eller parate til at blive markeret for oversættelse.",
+ "tpt-new-pages-title": "Sider foreslået til oversættelse",
+ "tpt-old-pages-title": "Sider som oversættes",
+ "tpt-other-pages-title": "Fejlbehæftede sider",
+ "tpt-new-pages": "{{PLURAL:$1|Denne side|Disse sider}} indeholder tekst med oversættelsestags, men ingen version af {{PLURAL:$1|siden|siderne}} er i øjeblikket markeret for oversættelse.",
+ "tpt-old-pages": "En version af {{PLURAL:$1|denne side|disse sider}} er markeret for oversættelse.",
+ "tpt-other-pages": "{{PLURAL:$1|En gammel version af denne side er|Ældre versioner af disse sider er}} markeret til oversættelse,\nmen {{PLURAL:$1|den seneste version|de seneste versioner}} kan ikke mærkes til oversættelse.",
+ "tpt-tag-oldsyntax": "gammel syntaks",
+ "tpt-select-prioritylangs": "Liste over sprogkoder for prioriterede sprog, adskilt med kommaer:",
+ "tpt-select-prioritylangs-force": "Forhindre oversættelse til andre sprog end de prioriterede sprog",
+ "tpt-select-prioritylangs-reason": "Begrundelse:",
+ "tpt-sections-prioritylangs": "Prioriterede sprog",
+ "tpt-rev-mark": "marker til oversættelse",
+ "tpt-rev-unmark": "fjern fra oversættelse",
+ "tpt-rev-discourage": "fraråd",
+ "tpt-rev-encourage": "gendan",
+ "tpt-rev-mark-tooltip": "Marker den seneste version af denne side til oversættelse.",
+ "tpt-rev-unmark-tooltip": "Fjern denne side fra oversættelse.",
+ "tpt-rev-discourage-tooltip": "Fraråd yderligere oversættelse af denne side.",
+ "tpt-rev-encourage-tooltip": "Gendan denne side til normal oversættelse.",
+ "translate-tag-translate-link-desc": "Oversæt denne side",
+ "translate-tag-markthis": "Markér denne side for oversættelse",
+ "translate-tag-markthisagain": "Denne side er <span class=\"plainlinks\">[$1 ændret]</span> siden den sidst blev <span class=\"plainlinks\">[$2 markeret for oversættelse]</span>.",
+ "translate-tag-hasnew": "Denne side indeholder <span class=\"plainlinks\">[$1 ændringer]</span> som ikke er markeret for oversættelse.",
+ "tpt-translation-intro": "Denne side er en <span class=\"plainlinks\">[$1 oversat version]</span> af siden [[$2]], og oversættelsen er $3 % komplet.",
+ "tpt-translation-intro-fuzzy": "Forældede oversættelser er markeret sådan her.",
+ "tpt-languages-legend": "Andre sprog:",
+ "tpt-languages-zero": "Begynd på oversættelsen til dette sprog",
+ "tpt-languages-nonzero": "$1 ($2% oversat)",
+ "tpt-tab-translate": "Oversæt",
+ "tpt-target-page": "Denne side kan ikke opdateres manuelt.\nSiden er en oversættelse af siden [[$1]] og oversættelsen kan opdateres ved at bruge [$2 oversættelsesværktøjet].",
+ "tpt-unknown-page": "Dette navnerum er reserveret til oversættelser af indholdssider.\nSiden som du prøver at redigere, ser ikke ud til at svare til nogen side markeret for oversættelse.",
+ "tpt-translation-restricted": "Oversættelse af denne side til dette sprog blev forhindret af en oversættelsesadministrator.\n\nÅrsag: $1",
+ "tpt-discouraged-language-force-header": "Denne side kan ikke oversættes til $1.",
+ "tpt-discouraged-language-header": "Oversættelser til $1 er ikke en prioritet for denne side.",
+ "tpt-discouraged-language-force": "<strong>Denne side kan ikke oversættes til $2.</strong>\n\nEn oversættelsesadministrator besluttede at denne side kun kan oversættes til $3.",
+ "tpt-priority-languages": "En oversættelsesadministrator har sat prioritetssprogene for denne gruppe til $1.",
+ "tpt-render-summary": "Opdaterer for at passe til en ny version af kildesiden",
+ "aggregategroups": "Samlegrupper",
+ "tpt-aggregategroup-add": "Tilføj",
+ "tpt-aggregategroup-save": "Gem",
+ "tpt-aggregategroup-add-new": "Tilføj en ny samlegruppe",
+ "tpt-aggregategroup-new-name": "Navn:",
+ "tpt-aggregategroup-new-description": "Beskrivelse (valgfri):",
+ "tpt-aggregategroup-remove-confirm": "Er du sikker på, at du vil slette denne samlegruppe?",
+ "tpt-aggregategroup-invalid-group": "Gruppen findes ikke",
+ "tpt-aggregategroup-edit-name": "Navn:",
+ "tpt-aggregategroup-edit-description": "Beskrivelse:",
+ "tpt-aggregategroup-update": "Gem",
+ "tpt-aggregategroup-update-cancel": "Annullér",
+ "tpt-invalid-group": "Ugyldig gruppe",
+ "pt-parse-open": "Ubalanceret &lt;translate> tag.\nOversættelse skabelon: <pre>$1</pre>",
+ "pt-parse-close": "Ubalanceret &lt;/translate> tag.\nOversættelse skabelon: <pre>$1</pre>",
+ "pt-parse-nested": "Indlejrede &lt;translate>-oversættelsesenheder er ikke tilladt.\nTagtekst: <pre>$1</pre>",
+ "pt-shake-multiple": "Flere oversættelsesenhedsmarkører til en oversættelsesenhed.\nOversættelsesenhedstekst: <pre>$1</pre>",
+ "pt-shake-position": "Oversættelsesenhedsmarkører på uventet position.\nOversættelsesenhedstekst: <pre>$1</pre>",
+ "pt-shake-empty": "Tom oversættelsesenhed for markøren \"$1\".",
+ "log-description-pagetranslation": "Log for handlinger i forbindelse med side oversættelses systemet",
+ "log-name-pagetranslation": "Sideoversættelseslog",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|markerede}} $3 til oversættelse",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|fjernede}} $3 fra oversættersystem",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|afsluttede}} omdøbning af den oversætbare side $3 til $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|stødte på}} et problem under flytning af siden $3 til $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|afsluttede}} sletning af den oversætbare side $3",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|kunne ikke}} slette $3 der tilhører den oversætbare side $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|afsluttede}} sletning af den oversætbare side $3",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|kunne ikke}} slette $3 der tilhører oversættelsesside $4",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|opmuntrede}} oversættelse af $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|frarådede}} oversættelse af $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|fjernede}} prioritetssprog fra den oversætbare side $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|satte}} prioritetssprogene for den oversætbare side $3 til $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|begrænsede}} sprogene for den oversætbare side $3 til $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|tilføjede}} den oversætbare side $3 til den samlede gruppe $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|fjernede}} den oversætbare side $3 fra den samlede gruppe $4",
+ "log-action-filter-pagetranslation": "Handlingtype:",
+ "log-action-filter-pagetranslation-mark": "Mærk for oversættelse",
+ "log-action-filter-pagetranslation-move": "Sideflytninger",
+ "log-action-filter-pagetranslation-delete": "Sidesletninger",
+ "pt-movepage-title": "Flyt oversætbare side $1",
+ "pt-movepage-blockers": "Den oversætbare side kan ikke flyttes til et nyt navn på grund af følgende {{PLURAL:$1|fejl|fejl}}:",
+ "pt-movepage-block-base-invalid": "Navnet på den oversætbare målside er ikke en gyldig titel.",
+ "pt-movepage-block-tp-invalid": "Mål oversættelses side titlen for [[:$1]] ville være ugyldig (for lang?).",
+ "pt-movepage-block-section-invalid": "Målsidens titel for \"[[:$1]]\" til oversættelsesenheden ville blive ugyldig (for lang?).",
+ "pt-movepage-block-subpage-invalid": "Mål underside titlen for [[:$1]] ville være ugyldig (for lang?).",
+ "pt-movepage-list-pages": "Liste over sider til at flytte",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Oversættelsesside|Oversættelsessider}}",
+ "pt-movepage-list-section": "{{PLURAL:$1|Oversættelsesenhedsside|Oversættelsesenhedssider}}",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Underside|Undersider}} markeret til oversættelse",
+ "pt-movepage-list-translatable-note": "Disse sider bør flyttes separat.",
+ "pt-movepage-list-other": "{{PLURAL:$1|Anden underside|Andre undersider}}",
+ "pt-movepage-list-count": "I alt $1 {{PLURAL:$1|side|sider}} til at flytte og $2 {{PLURAL:$2|underside|undersider}}.",
+ "pt-movepage-legend": "Flyt oversætbare side",
+ "pt-movepage-current": "Nuværende navn:",
+ "pt-movepage-new": "Nyt navn:",
+ "pt-movepage-reason": "Årsag:",
+ "pt-movepage-subpages": "Flyt alle undersider",
+ "pt-movepage-action-check": "Tjek om flytningen er muligt",
+ "pt-movepage-action-perform": "Gennemfør flytningen",
+ "pt-movepage-action-other": "Skift mål",
+ "pt-movepage-intro": "Denne speciale side tillader dig at flytte sider, der er markeret til oversættelse.\nFlytningen vil ikke være øjeblikkelig, fordi mange sider skal flyttes.\nMens siderne bliver flyttet, er det ikke muligt at interagere med de omtalte sider.\nFejl vil blive logget på [[Special:Log/pagetranslation|sideoversættelsesloggen]], og de skal repareres manuelt.",
+ "pt-movepage-logreason": "Del af oversætbar side \"$1\"",
+ "pt-movepage-started": "Base siden er nu flyttet.\nHusk at tjekke [[Special:Log/pagetranslation|siden oversættelsen log]] for fejl og færdiggørelses besked.",
+ "pt-locked-page": "Denne side er låst, fordi den oversætbare side, der aktuelt er ved at blive flyttet.",
+ "pt-deletepage-lang-title": "Sletter oversættelses side \"$1\"",
+ "pt-deletepage-tp-title": "Sletter oversætbar side \"$1\"",
+ "pt-deletepage-invalid-title": "Den angivne side er ikke gyldig.",
+ "pt-deletepage-invalid-text": "Den angivne side er ikke en oversætbar side eller en oversættelsesside.",
+ "pt-deletepage-action-check": "List sider der skal slettes",
+ "pt-deletepage-action-perform": "Udfør sletningen",
+ "pt-deletepage-action-other": "Skift mål",
+ "pt-deletepage-lang-legend": "Slet oversættelses side",
+ "pt-deletepage-tp-legend": "Slet oversætbar side",
+ "pt-deletepage-any-legend": "Slet en oversætbar side eller en oversættelsesside",
+ "pt-deletepage-current": "Sidenavn:",
+ "pt-deletepage-reason": "Årsag:",
+ "pt-deletepage-subpages": "Slet alle undersider",
+ "pt-deletepage-list-pages": "Liste over sider til at slette",
+ "pt-deletepage-list-translation": "Oversættelses sider",
+ "pt-deletepage-list-section": "Oversættelsesenhedssider",
+ "pt-deletepage-list-other": "Andre undersider",
+ "pt-deletepage-list-count": "I alt $1 {{PLURAL:$1|side|sider}} til at slette og $2 {{PLURAL:$2|underside|undersider}}.",
+ "pt-deletepage-full-logreason": "Del af oversætbar side \"$1\"",
+ "pt-deletepage-lang-logreason": "En del af oversættelses side \"$1\"",
+ "pt-deletepage-started": "Tjek venligst [[Special:Log/pagetranslation|side oversættelses log]] for fejl og færdiggørelses besked.",
+ "pt-deletepage-intro": "Med denne specielle side kan du slette en hel oversætbar side eller en individuel oversættelsesside.\nSletningen vil ikke ske med det samme, fordi mange afhængige sider også vil blive slettet.\nFejl vil blive registreret i [[Special:Log/pagetranslation|side oversættelses log]], og de skal repareres i manuelt.",
+ "pm-import-button-label": "Importer",
+ "pm-savepages-button-label": "Gem",
+ "pm-cancel-button-label": "Annullér",
+ "pm-page-does-not-exist": "$1 findes ikke.",
+ "pm-old-translations-missing": "$1 indeholder ingen gamle oversættelser.",
+ "pm-pagename-missing": "Indtast venlist sidetitlen.",
+ "pm-delete-icon-hover-text": "Slet enhed",
+ "pm-pagetitle-placeholder": "Indtast sidetitlen",
+ "pm-pagetitle-missing": "Indtast venlist sidetitlen.",
+ "tpt-translate-title": "Tillad oversættelse af sidetitlen",
+ "pagepreparation": "Forbered side til oversættelse",
+ "pp-pagename-placeholder": "Indtast sidenavnet",
+ "pp-prepare-button-label": "Forbered",
+ "pp-save-button-label": "Offentliggør",
+ "pp-cancel-button-label": "Annullér",
+ "pp-diff-old-header": "Kildetekst",
+ "pp-diff-new-header": "Forberedt tekst",
+ "tpt-unlink-button": "Fjern fra oversættelse",
+ "tpt-unlink-summary": "Fjernede siden fra oversættelse.",
+ "tpt-generic-button": "Bekræft"
+}
diff --git a/Translate/i18n/pagetranslation/dag.json b/Translate/i18n/pagetranslation/dag.json
new file mode 100644
index 00000000..e0d5f35d
--- /dev/null
+++ b/Translate/i18n/pagetranslation/dag.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ruky Wunpini"
+ ]
+ },
+ "tpt-languages-nonzero": "$1($2% lɛbgubu)"
+}
diff --git a/Translate/i18n/pagetranslation/de-formal.json b/Translate/i18n/pagetranslation/de-formal.json
new file mode 100644
index 00000000..d9b01617
--- /dev/null
+++ b/Translate/i18n/pagetranslation/de-formal.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Imre",
+ "Kghbln",
+ "Purodha",
+ "The Evil IP address",
+ "Umherirrender"
+ ]
+ },
+ "tpt-action-nofuzzy": "Setzen Sie die Übersetzungen nicht außer Kraft",
+ "tpt-notsuitable": "Die Seite $1 ist nicht zum Übersetzen geeignet.\nStellen Sie sicher, dass ein <nowiki><translate></nowiki>-Tag und gültige Syntax verwendet wird.",
+ "tpt-offer-notify": "Sie können über diese Seite <span class=\"plainlinks\">[$1 Übersetzer benachrichtigen]</span>.",
+ "tpt-showpage-intro": "Untenstehend sind neue, vorhandene und gelöschte Übersetzungseinheiten aufgelistet.\nBevor Sie diese Version zur Übersetzung freigeben, stellen Sie bitte sicher, dass die Änderungen an den Übersetzungseinheiten minimal sind. Damit verhindern Sie unnötige Arbeit für die Übersetzer.",
+ "pt-movepage-started": "Die Basisseite wurde nunmehr verschoben.\nBitte prüfen Sie das [[Special:Log/pagetranslation|Übersetzungs-Logbuch]] auf Fehlermeldungen, bzw. die Vollzugsnachricht."
+}
diff --git a/Translate/i18n/pagetranslation/de.json b/Translate/i18n/pagetranslation/de.json
new file mode 100644
index 00000000..228010f9
--- /dev/null
+++ b/Translate/i18n/pagetranslation/de.json
@@ -0,0 +1,277 @@
+{
+ "@metadata": {
+ "authors": [
+ "Brettchenweber",
+ "ChrisiPK",
+ "Imre",
+ "Kghbln",
+ "MF-Warburg",
+ "McDutchie",
+ "Metalhead64",
+ "Pols12",
+ "Purodha",
+ "Sebastian Wallroth",
+ "Shirayuki",
+ "The Evil IP address",
+ "Umherirrender",
+ "Vogone"
+ ]
+ },
+ "pagetranslation": "Seiten übersetzen",
+ "nstab-translations": "Übersetzungseinheit",
+ "right-pagetranslation": "Seitenversionen zur Übersetzung freigeben",
+ "action-pagetranslation": "übersetzbare Seiten zu verwalten",
+ "tps-edit-sourcepage-text": "Du bearbeitest die Quelle einer übersetzbaren Seite. Bitte stelle sicher, dass du mit der folgenden Dokumentation vertraut bist:\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text Ändern des Quelltextes] \n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Markup_examples Beispiel für zu verwendendes Markup]",
+ "tps-edit-sourcepage-ve-warning-limited-text": "Einige übersetzbare Bereiche sind in diesem Editor möglicherweise nicht bearbeitbar. Bitte verwenden den Quelltext-Editor, um diese zu bearbeiten.",
+ "tps-edit-sourcepage-ve-warning-title": "Warnung: Nicht unterstützte Seite",
+ "tps-edit-sourcepage-ve-warning-text": "Du bearbeitest eine übersetzbare Seite. Die Bearbeitung in diesem Editor wird noch nicht offiziell unterstützt. Bitte verwende den Quelltexteditor.",
+ "tps-edit-sourcepage-ve-warning-button": "OK",
+ "tpt-section": "Übersetzungseinheit $1",
+ "tpt-section-new": "Neue Übersetzungseinheit. Name: $1",
+ "tpt-section-deleted": "Übersetzungseinheit $1",
+ "tpt-diff-old": "Vorheriger Text",
+ "tpt-diff-new": "Neuer Text",
+ "tpt-submit": "Diese Version zur Übersetzung freigeben",
+ "tpt-sections-oldnew": "Neue und vorhandene Übersetzungseinheiten",
+ "tpt-sections-deleted": "Gelöschte Übersetzungseinheiten",
+ "tpt-sections-template": "Übersetzungsseitenvorlage",
+ "tpt-action-nofuzzy": "Die Übersetzungen nicht als veraltet markieren",
+ "tpt-badtitle": "Der angegebene Seitenname „$1“ ist kein gültiger Titel",
+ "tpt-nosuchpage": "Die Seite „$1“ ist nicht vorhanden",
+ "tpt-oldrevision": "$2 ist nicht die letzte Version der Seite [[:$1]].\nNur die letzte Version kann zur Übersetzung freigegeben werden.",
+ "tpt-notsuitable": "Die Seite $1 ist nicht zum Übersetzen geeignet.\nStelle sicher, dass ein $2-Tag und gültige Syntax verwendet werden.",
+ "tpt-saveok": "Die Seite [[:$1]] wurde mit {{PLURAL:$2|einem übersetzbaren Abschnitt|$2 übersetzbaren Abschnitten}} zur Übersetzung freigegeben.\nDiese Seite kann nun <span class=\"plainlinks\">[$3 übersetzt]</span> werden.",
+ "tpt-saveok-first": "Du kannst [[Special:PageMigration|bereits vorhandene Übersetzungen]] für diese Seite importieren (falls vorhanden).",
+ "tpt-offer-notify": "Du kannst über diese Seite <span class=\"plainlinks\">[$1 Übersetzer benachrichtigen]</span>.",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|Die Liste übersetzbarer Seiten ansehen.]]",
+ "tpt-showpage-intro": "Untenstehend sind neue, vorhandene und gelöschte Übersetzungseinheiten aufgelistet.\nBevor du diese Version zur Übersetzung freigibst, stelle bitte sicher, dass die Änderungen an den Übersetzungseinheiten minimal sind. Damit verhinderst du unnötige Arbeit für die Übersetzer.",
+ "tpt-mark-summary": "Diese Seite wurde zum Übersetzen freigegeben",
+ "tpt-mark-nochanges": "Es gibt keine Änderungen zum Überprüfen. Das Markieren dieser Seite zur Übersetzung wird weder die Seite noch eine vorhandene Übersetzungseinheit bearbeiten.",
+ "tpt-edit-failed": "Seite kann nicht aktualisiert werden: $1",
+ "tpt-duplicate": "Der Übersetzungseinheitname $1 wird mehr als einmal verwendet.",
+ "tpt-invalid": "Der Name der Übersetzungseinheit $1 darf keinen Unterstrich oder Schrägstrich enthalten.",
+ "tpt-unmarked": "Seite [[:$1]] ist nicht länger als zu Übersetzen markiert.",
+ "tpt-list-nopages": "Es sind keine Seiten zum Übersetzen freigegeben und auch nicht vorbereitet, um freigegeben werden zu können.",
+ "tpt-new-pages-title": "Zur Übersetzung vorgeschlagene Seiten",
+ "tpt-old-pages-title": "Zu übersetzende Seiten",
+ "tpt-other-pages-title": "Fehlerhafte Seiten",
+ "tpt-outdated-pages-title": "Seiten mit ausstehenden Änderungen",
+ "tpt-new-pages": "{{PLURAL:$1|Diese Seite beinhaltet|Diese Seiten beinhalten}} Text zum Übersetzen. Es wurde aber noch keine Version dieser {{PLURAL:$1|Seite|Seiten}} zum Übersetzen freigegeben.",
+ "tpt-old-pages": "Eine neueste Version dieser {{PLURAL:$1|Seite|Seiten}} wurde zur Übersetzung freigegeben.",
+ "tpt-other-pages": "Veraltete Versionen {{PLURAL:$1|dieser Seite|dieser Seiten}} sind zur Übersetzung freigegeben.\nDie neueste Version kann hingegen nicht zur Übersetzung freigegeben werden.",
+ "tpt-outdated-pages": "{{PLURAL:$1|Diese Seite hat|Diese Seiten haben}} nicht zur Übersetzung markierte Änderungen.",
+ "tpt-tag-discouraged": "abgeraten",
+ "tpt-tag-oldsyntax": "alte Syntax",
+ "tpt-tag-no-transclusion-support": "keine Transklusionsunterstützung",
+ "tpt-select-prioritylangs": "Komma-getrennte Liste der Codes der zu priorisierenden Sprachen:",
+ "tpt-select-prioritylangs-force": "Übersetzungen in andere Sprachen als die priorisierte Sprache verhindern",
+ "tpt-select-prioritylangs-reason": "Grund:",
+ "tpt-sections-prioritylangs": "Priorisierte Sprachen",
+ "tpt-sections-syntaxversion": "Syntaxversion",
+ "tpt-syntaxversion-text": "Diese Seite verwendet derzeit eine alte Version der übersetzbaren Seitenquellsyntax. Die neue Version schließt unübersetzte Abschnitte mit einem HTML-Tag ein, um die korrekte Sprache des Textes anzuzeigen. Beispiel: $1. Du kannst die neue Auszeichnungssyntax $2 verwenden, um jede Art von Umbruch an Stellen zu verhindern, an denen er nicht angemessen ist, wie z.B. bei der Übersetzung von <code>title</code>-Attribut eines Elements. Es ist nicht möglich, zu einer alten Syntaxversion zurückzugehen.",
+ "tpt-syntaxversion-label": "Neueste Syntaxversion für diese Seite verwenden",
+ "tpt-transclusion": "Vorlagen-Transklusion",
+ "tpt-transclusion-label": "Aktivieren der übersetzungsfähigen Transklusion für diese Seite",
+ "tpt-rev-mark": "Zum Übersetzen freigeben",
+ "tpt-rev-unmark": "Freigabe zum Übersetzen entfernen",
+ "tpt-rev-discourage": "Freigabe zurückziehen",
+ "tpt-rev-encourage": "Freigabe wiederherstellen",
+ "tpt-rev-mark-tooltip": "Die letzte Version dieser Seite zum Übersetzen freigeben.",
+ "tpt-rev-unmark-tooltip": "Die Freigabe zum Übersetzen dieser Seite entfernen.",
+ "tpt-rev-discourage-tooltip": "Die Freigabe für weitere Übersetzungen dieser Seite zurückziehen.",
+ "tpt-rev-encourage-tooltip": "Die Freigabe zum Übersetzen dieser Seite wiederherstellen.",
+ "translate-tag-translate-link-desc": "Diese Seite übersetzen",
+ "translate-tag-markthis": "Diese Seite zur Übersetzung freigeben",
+ "translate-tag-markthisagain": "Diese Seite wurde <span class=\"plainlinks\">[$1 bearbeitet]</span>, nachdem sie zuletzt <span class=\"plainlinks\">[$2 zur Übersetzung freigegeben]</span> wurde.",
+ "translate-tag-hasnew": "Diese Seite enthält <span class=\"plainlinks\">[$1 Bearbeitungen]</span>, die nicht zum Übersetzen freigegeben sind.",
+ "tpt-translation-intro": "Diese Seite ist eine <span class=\"plainlinks\">[$1 übersetzte Version]</span> der Seite [[$2]] und die Übersetzung ist zu $3 % abgeschlossen sowie aktuell.",
+ "tpt-translation-intro-fuzzy": "Veraltete Übersetzungen werden wie dieser Text markiert.",
+ "tpt-languages-legend": "Sprachen:",
+ "tpt-languages-zero": "Mit dem Übersetzen in diese Sprache anfangen",
+ "tpt-languages-nonzero": "$1 ($2 % übersetzt)",
+ "tpt-tab-translate": "Übersetzen",
+ "tpt-target-page": "Diese Seite kann nicht manuell aktualisiert werden.\nDiese Seite ist eine Übersetzung der Seite [[$1]] und die Übersetzung kann mithilfe des [$2 Übersetzungswerkzeuges] aktualisiert werden.",
+ "tpt-unknown-page": "Dieser Namensraum ist für das Übersetzen von Wikiseiten reserviert.\nDie Seite, die gerade bearbeitet wird, hat keine Verbindung zu einer übersetzbaren Seite.",
+ "tpt-translation-restricted": "Das Übersetzen dieser Seite in diese Sprache wurde durch einen Übersetzungsadministrator deaktiviert.\n\nGrund: $1",
+ "tpt-translation-restricted-no-reason": "Die Übersetzung dieser Seite in diese Sprache wurde von einem Übersetzungsadministrator deaktiviert.",
+ "tpt-discouraged-language-force-header": "Diese Seite kann nicht auf $1 übersetzt werden.",
+ "tpt-discouraged-language-force-content": "Ein Übersetzungsadministrator hat entschieden, dass diese Seite nur auf $1 übersetzt werden sollte.",
+ "tpt-discouraged-language-header": "Das Übersetzen dieser Seite auf $1 hat keine Priorität.",
+ "tpt-discouraged-language-content": "Ein Übersetzungsadministrator hat entschieden, die Übersetzungsarbeiten auf $1 zu konzentrieren.",
+ "tpt-discouraged-language-force": "<strong>Diese Seite kann nicht auf $2 übersetzt werden.</strong>\n\nEin Übersetzungsadministrator hat sich entschieden, dass diese Seite nur auf $3 übersetzt werden kann.",
+ "tpt-priority-languages": "Ein Übersetzungsadministrator hat die priorisierte Sprachen für diese Nachrichtengruppe auf $1 festgelegt.",
+ "tpt-priority-languages-force": "Ein Übersetzungsadministrator hat die priorisierten Sprachen für diese Gruppe auf $1 festgelegt. Das Übersetzen in andere Sprachen ist nicht erlaubt.",
+ "tpt-discouraged-translation-header": "Von der Übersetzung dieser Seite wurde abgeraten.",
+ "tpt-discouraged-translation-content": "Ein Übersetzungsadministrator hat von der Übersetzung dieser Seite abgeraten. Du kannst die Seite trotzdem übersetzen, aber die Übersetzungen sind möglicherweise nicht nützlich.",
+ "tpt-render-summary": "Übernehme Bearbeitung einer neuen Version der Quellseite",
+ "aggregategroups": "Zusammenfassende Nachrichtengruppen",
+ "tpt-aggregategroup-add": "Hinzufügen",
+ "tpt-aggregategroup-save": "Speichern",
+ "tpt-aggregategroup-close": "Schließen",
+ "tpt-aggregategroup-add-new": "Eine neue Hauptnachrichtengruppe hinzufügen",
+ "tpt-aggregategroup-new-name": "Name:",
+ "tpt-aggregategroup-new-description": "Beschreibung (optional):",
+ "tpt-aggregategroup-remove-confirm": "Bist Du sicher, dass Du diese Gruppe löschen möchtest?",
+ "tpt-aggregategroup-invalid-group": "Die Gruppe ist nicht vorhanden",
+ "tpt-aggregategroup-edit-name": "Name:",
+ "tpt-aggregategroup-edit-description": "Beschreibung:",
+ "tpt-aggregategroup-update": "Speichern",
+ "tpt-aggregategroup-update-cancel": "Abbrechen",
+ "tpt-aggregategroup-expand-all-groups": "alle Gruppen ausklappen",
+ "tpt-aggregategroup-collapse-all-groups": "alle Gruppen einklappen",
+ "tpt-aggregategroup-expand-group": "Gruppen ausklappen",
+ "tpt-aggregategroup-collapse-group": "Gruppen einklappen",
+ "tpt-invalid-group": "Ungültige Gruppe",
+ "pt-parse-open": "Eine &lt;translate&gt;-Markierung hat kein Gegenstück.\nÜbersetzungsvorlage: <pre>$1</pre>",
+ "pt-parse-close": "Eine &lt;/translate>-Markierung hat kein Gegenstück.\nÜbersetzungsvorlage: <pre>$1</pre>",
+ "pt-parse-nested": "Verschachtelte &lt;translate>-Übersetzungseinheiten sind nicht möglich.\nText des Tags: <pre>$1</pre>",
+ "pt-shake-multiple": "Mehrere Übersetzungseinheitenmarker für eine Übersetzungseinheit.\nAchte darauf, dass die Übersetzungseinheiten durch Leerzeilen getrennt sind.\nText der Übersetzungseinheit: <pre>$1</pre>",
+ "pt-shake-position": "Übersetzungseinheitenmarker befinden sich an unerwarteter Stelle.\nText der Übersetzungseinheit: <pre>$1</pre>",
+ "pt-shake-empty": "Die Übersetzungseinheit für Marker „$1“ ist leer.",
+ "log-description-pagetranslation": "Logbuch der Änderungen im Zusammenhang mit dem Übersetzungssystem für Seiten",
+ "log-name-pagetranslation": "Übersetzungs-Logbuch",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|markierte}} die Seite $3 zum Übersetzen",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|entfernte}} die Seite $3 aus dem Übersetzungssystem",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|schloss}} die Umbenennung der übersetzbaren Seite von $3 in $4 ab",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|hatte}} ein Problem beim Verschieben der Seite von $3 nach $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|schloss}} die Löschung der übersetzbaren Seite $3 ab",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|konnte}} die Seite $3 nicht löschen, die zur übersetzbaren Seite $4 gehört",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|schloss}} die Löschung der übersetzten Seite $3 ab",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|konnte}} die Seite $3 nicht löschen, die zur Übersetzungsseite $4 gehört",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|empfahl}} die Übersetzung der Seite $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|riet}} von der Übersetzung der Seite $3 ab",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|entfernte}} die priorisierten Sprachen von der übersetzbaren Seite $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|legte}} die priorisierten Sprachen für die übersetzbare Seite $3 auf $5 fest",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|begrenzte}} die Sprachen für die übersetzbare Seite $3 auf $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|fügte}} die übersetzbare Seite $3 zur zusammenfassenden Gruppe „$4“ hinzu",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|entfernte}} die übersetzbare Seite $3 von der zusammengefassten Gruppe $4",
+ "log-action-filter-pagetranslation": "Typ der Aktion:",
+ "log-action-filter-pagetranslation-mark": "Zur Übersetzung markiert",
+ "log-action-filter-pagetranslation-unmark": "Von der Übersetzung entfernt",
+ "log-action-filter-pagetranslation-move": "Seitenverschiebungen",
+ "log-action-filter-pagetranslation-delete": "Seitenlöschungen",
+ "log-action-filter-pagetranslation-encourage": "Ermutigung zur Übersetzung",
+ "log-action-filter-pagetranslation-discourage": "Entmutigung zur Übersetzung",
+ "log-action-filter-pagetranslation-prioritylanguages": "Veränderung der priorisierten Sprachen",
+ "log-action-filter-pagetranslation-aggregategroups": "Veränderung der zusammengefassten Gruppen",
+ "log-description-messagebundle": "Logbuch für Aktionen im Zusammenhang mit dem Nachrichtenbündel-System",
+ "log-name-messagebundle": "Nachrichtenbündel-Logbuch",
+ "logentry-messagebundle-moveok": "$1 {{GENDER:$2|schloss}} die Umbenennung des Nachrichtenbündels von $3 in $4 ab",
+ "logentry-messagebundle-movenok": "$1 {{GENDER:$2|hatte}} ein Problem beim Verschieben des Nachrichtenbündels von $3 nach $4",
+ "logentry-messagebundle-deletefok": "$1 {{GENDER:$2|schloss}} die Löschung des Nachrichtenbündels $3 ab",
+ "logentry-messagebundle-deletefnok": "$1 {{GENDER:$2|konnte}} $3 nicht löschen, das zum Nachrichtenbündel $4 gehört",
+ "log-action-filter-messagebundle": "Typ der Aktion:",
+ "log-action-filter-messagebundle-move": "Nachrichtenbündel-Verschiebungen",
+ "log-action-filter-messagebundle-delete": "Nachrichtenbündel-Löschungen",
+ "pt-movepage-title": "Die Übersetzungsseite $1 verschieben",
+ "pt-movepage-messagebundle-title": "Nachrichtenbündel „$1“ verschieben",
+ "pt-movepage-blockers": "Die zum Übersetzen vorgesehene Seite konnte aufgrund {{PLURAL:$1|folgendes Fehlers|folgender Fehler}} nicht zur neuen Bezeichnung verschoben werden:",
+ "pt-movepage-block-base-invalid": "Der Name der übersetzbaren Zielseite hat keine gültige Bezeichnung.",
+ "pt-movepage-block-tp-invalid": "Die Zielbezeichnung der Übersetzungsseite für [[:$1]] wäre ungültig (zu lang?).",
+ "pt-movepage-block-section-invalid": "Die Zielseite der Übersetzungseinheit für „[[:$1]]“ wäre ungültig (zu lang?).",
+ "pt-movepage-block-subpage-invalid": "Die Zielbezeichnung der Unterseite für [[:$1]] wäre ungültig (zu lang?).",
+ "pt-movepage-block-talkpage-invalid": "Der Zielseiten-Titel für „[[:$1]]“ wäre ungültig (zu lang?).",
+ "pt-movepage-block-unknown-page": "Die verschobene Seite ([[:$1]]) scheint nicht Teil der übersetzbaren Seite zu sein.",
+ "pt-movepage-block-ns-talk-unsupported": "Die Seite ([[:$1]]) wird in einen Namespace verschoben, der keine Diskussionsseiten unterstützt.",
+ "pt-movepage-block-rename-failed": "Beim Erzeugen eines neuen Titels für die Seite [[:$1]] ist ein Fehler aufgetreten.",
+ "pt-movepage-list-pages": "Liste der zu verschiebenden Seiten",
+ "pt-movepage-list-translation": "Übersetzte {{PLURAL:$1|Seite|Seiten}}",
+ "pt-movepage-list-section": "{{PLURAL:$1|Seite|Seiten}} der Übersetzungseinheiten",
+ "pt-movepage-list-translatable": "Zur Übersetzung markierte {{PLURAL:$1|Unterseite|Unterseiten}}",
+ "pt-movepage-list-translatable-note": "Diese Seiten müssen getrennt verschoben werden.",
+ "pt-movepage-list-other": "Andere {{PLURAL:$1|Unterseite|Unterseiten}}",
+ "pt-movepage-list-count": "Insgesamt gibt es $1 zu verschiebende {{PLURAL:$1|Seite|Seiten}} inklusive $2 {{PLURAL:$2|Unterseite|Unterseiten}} und $3 {{PLURAL:$2|Diskussionsseite|Diskussionsseiten}}.",
+ "pt-movepage-page-count-limit": "Diese übersetzbare Seite besteht aus über $1 {{PLURAL:$1|Seite|Seiten}}. Das Verschieben so vieler Seiten hat sich als unzuverlässig erwiesen. Bitte kontaktiere einen Systemadministrator, um dies über ein Wartungsskript durchzuführen.",
+ "pt-movepage-list-no-pages": "Es wurden keine Seiten gefunden.",
+ "pt-movepage-legend": "Übersetzungsseite verschieben",
+ "pt-movepage-messagebundle-legend": "Nachrichtenbündel verschieben",
+ "pt-movepage-current": "Aktueller Seitenname:",
+ "pt-movepage-new": "Neuer Seitenname:",
+ "pt-movepage-reason": "Grund:",
+ "pt-movepage-subpages": "Alle Unterseiten verschieben",
+ "pt-movepage-talkpages": "Diskussionsseiten verschieben",
+ "pt-movepage-talkpage-exists": "(Hat eine Diskussionsseite)",
+ "pt-movepage-action-check": "Überprüfung, ob die Verschiebung möglich ist",
+ "pt-movepage-action-perform": "Verschiebung durchführen",
+ "pt-movepage-action-other": "Ziel ändern",
+ "pt-movepage-intro": "Diese Spezialseite ermöglicht es, Seiten zu verschieben, die zur Übersetzung gekennzeichnet wurden.\nDie Verschiebung wird nicht unverzüglich erfolgen, da dabei viele Seiten zu verschieben sind.\nWährend des Verschiebevorgangs ist es nicht möglich, die entsprechenden Seiten zu nutzen.\nVerschiebefehler werden im [[$1|Logbuch]] aufgezeichnet und müssen manuell korrigiert werden.",
+ "pt-movepage-logreason": "Teil der übersetzbaren Seite „$1“",
+ "pt-movepage-started": "Bitte überprüfe das [[$1|Logbuch]] nach einiger Zeit auf Fehler und die Vollzugsnachricht.",
+ "pt-locked-page": "Diese Seite ist gesperrt, da die Übersetzungsseite momentan verschoben wird.",
+ "pt-deletepage-lang-title": "Löschen der übersetzten Seite „$1“",
+ "pt-deletepage-tp-title": "Löschen der übersetzbaren Seite „$1“",
+ "pt-deletepage-mb-title": "Nachrichtenbündel „$1“ löschen",
+ "pt-deletepage-invalid-title": "Die angegebene Seite ist ungültig.",
+ "pt-deletepage-invalid-text": "Die angegebene Seite ist weder eine übersetzbare Seite noch eine Übersetzungsseite.",
+ "pt-deletepage-action-check": "Zu löschende Seiten auflisten",
+ "pt-deletepage-action-perform": "Löschung ausführen",
+ "pt-deletepage-action-other": "Das Ziel ändern",
+ "pt-deletepage-lang-legend": "Übersetzte Seite löschen",
+ "pt-deletepage-tp-legend": "Übersetzbare Seite löschen",
+ "pt-deletepage-mb-legend": "Nachrichtenbündel löschen",
+ "pt-deletepage-any-legend": "Übersetzbare Seite, Nachrichtenbündel oder Übersetzungsseite löschen",
+ "pt-deletepage-current": "Seitenname:",
+ "pt-deletepage-reason": "Grund:",
+ "pt-deletepage-reason-details": "Anderer/ergänzender Grund:",
+ "pt-deletepage-reason-other": "Anderer Grund",
+ "pt-deletepage-subpages": "Alle Unterseiten löschen",
+ "pt-deletepage-list-pages": "Liste der zu löschenden Seiten",
+ "pt-deletepage-list-translation": "Übersetzte Seiten",
+ "pt-deletepage-list-section": "Seiten der Übersetzungseinheiten",
+ "pt-deletepage-list-other": "Weitere Unterseiten",
+ "pt-deletepage-list-count": "Insgesamt gibt es $1 zu löschende {{PLURAL:$1|Seite|Seiten}} und $2 {{PLURAL:$2|Unterseite|Unterseiten}}.",
+ "pt-deletepage-list-no-pages": "Es wurden keine Seiten gefunden.",
+ "pt-deletepage-full-logreason": "Teil der übersetzbaren Seite „$1“",
+ "pt-deletepage-lang-logreason": "Teil der übersetzbaren Seite „$1“",
+ "pt-deletepage-started": "Bitte das [[$1|Logbuch]] auf Fehler und Ausführungsnachrichten prüfen.",
+ "pt-deletepage-intro": "Diese Spezialseite ermöglicht die Löschung einer ganzen übersetzbaren Seite, Nachrichtenbündel oder einer individuellen Übersetzungsseite in einer Sprache.\nDie Ausführung erfolgt nicht unmittelbar, da auch alle dazugehörigen Seiten gelöscht werden.\nFehler werden im [[$1|entsprechenden Logbuch]] aufgezeichnet und müssen nachträglich manuell berichtigt werden.",
+ "pagemigration": "Übersetzungsseitenmigration",
+ "pagemigration-summary": "Gib eine Übersetzungsseite an und stelle jede Übersetzung wieder her, die vor der Aktivierung des Übersetzungssystems auf dieser Seite erstellt wurde.",
+ "pm-import-button-label": "Importieren",
+ "pm-savepages-button-label": "Speichern",
+ "pm-cancel-button-label": "Abbrechen",
+ "pm-page-does-not-exist": "$1 ist nicht vorhanden",
+ "pm-old-translations-missing": "$1 enthält keine alten Übersetzungen",
+ "pm-extra-units-warning": "Es könnten zusätzliche Einheiten verfügbar sein. Bitte die Quell- und Übersetzungseinheiten ordnungsgemäß anpassen.",
+ "pm-pagename-missing": "Bitte den Seitennamen eingeben",
+ "pm-add-icon-hover-text": "Unten eine Einheit hinzufügen",
+ "pm-swap-icon-hover-text": "Mit der unteren Einheit tauschen",
+ "pm-delete-icon-hover-text": "Einheit löschen",
+ "pm-pagetitle-placeholder": "Gib den Seitentitel ein",
+ "pm-pagetitle-invalid": "Die Seitenmigration funktioniert nur bei Übersetzungsseiten, z. B. „Seite/de“. Der angegebene Titel ist kein gültiger Titel.",
+ "pm-pagetitle-missing": "Bitte gib den Seitentitel ein.",
+ "pm-langcode-missing": "Die Seitenmigration funktioniert nur bei Übersetzungsseiten, zum Beispiel „Page/de“. Der angegebene Titel ist keine Übersetzungsseite.",
+ "pm-summary-import": "Übersetzung importiert mithilfe der [[Special:PageMigration|Seitenmigration]]",
+ "pm-on-import-message-text": "Die alten Übersetzungen wurden importiert. Verwende die Hinzufügungs-, Tausch- und Löschoptionen, um die Übersetzungseinheiten anzupassen und klicke auf die Schaltfläche „{{int:pm-savepages-button-label}}“, um sie zu speichern oder zum Verwerfen auf die Schaltfläche „{{int:pm-cancel-button-label}}“.",
+ "pm-on-save-message-text": "Die Übersetzungseinheiten wurden gespeichert. Du kannst jetzt zur Migration den Titel einer neuen Übersetzungsseite eingeben oder unten Änderungen an den Einheiten durchführen und eine neue Version speichern.",
+ "pm-pagetitle-not-translatable": "$1 ist nicht Teil einer übersetzbaren Seite.",
+ "pm-translation-unit-fetch-failed": "Beim Abrufen der Übersetzungseinheiten für diese Seite ist ein Fehler aufgetreten.",
+ "tpt-translate-title": "Übersetzung eines Seitentitels erlauben",
+ "pp-save-summary": "Bereitete die Seite zur Übersetzung vor",
+ "pagepreparation": "Seite zur Übersetzung vorbereiten",
+ "pagepreparation-summary": "Gib einen einen Seitentitel an, der für die Übersetzung vorbereitet werden soll.",
+ "pp-pagename-placeholder": "Den Seitennamen eingeben",
+ "pp-prepare-button-label": "Vorbereiten",
+ "pp-save-button-label": "Veröffentlichen",
+ "pp-cancel-button-label": "Abbrechen",
+ "pp-save-message": "Die Seite wurde veröffentlicht. Du kannst sie [$1 bearbeiten].",
+ "pp-prepare-message": "Die Seite wurde für die Übersetzung vorbereitet. Sieh dir den unten stehenden Unterschied an. Klicke auf „{{int:pp-save-button-label}}“, wenn alles in Ordnung ist!",
+ "pp-already-prepared-message": "Es scheint, als ob die Seite bereits für die Übersetzung vorbereitet wurde. Es gibt im Vergleich zur aktuellen Version keine Unterschiede.",
+ "pp-diff-error": "Es gab einen Fehler beim Abrufen des Versionsunterschiedes vom Server.",
+ "pp-pagename-missing": "Bitte den Seitennamen eingeben.",
+ "pp-diff-old-header": "Quelltext",
+ "pp-diff-new-header": "Vorbereiteter Text",
+ "tpt-unlink-confirm": "Bitte bestätige, dass du wirklich diese Seite aus dem Übersetzungssystem entfernen möchtest.\nDie Sprachauswahl und übersetzte Seitennamen hören auf zu funktionieren.\nDie Übersetzungsseiten werden bearbeitbar.",
+ "tpt-unlink-button": "Von der Übersetzung entfernen",
+ "tpt-unlink-summary": "Seite von der Übersetzung entfernt",
+ "tpt-generic-confirm": "Bitte bestätige die Aktion.",
+ "tpt-generic-button": "Bestätigen",
+ "tpt-validation-not-insertable": "Der Name der Übersetzungsvariablen „$1“ kann nicht in die Übersetzungsschnittstelle eingefügt werden. Vermeide die Verwendung von Sonderzeichen.",
+ "tpt-validation-name-reuse": "Die Übersetzungsvariable „$1“ ist mehrfach mit unterschiedlichem Inhalt definiert. Ändere die Variablennamen so, dass sie innerhalb der Übersetzungseinheit eindeutig sind.",
+ "visualeditor-annotations-translate-start": "Beginn des zu übersetzenden Inhalts",
+ "visualeditor-annotations-translate-end": "Ende des zu übersetzenden Inhalts",
+ "visualeditor-annotations-translate-description": "Dieser Bereich ist als übersetzbar gekennzeichnet. Bitte stelle sicher, dass du die Richtlinien für [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text Änderung des Quelltextes] befolgst.",
+ "visualeditor-annotations-tvar-start": "Beginn des nicht übersetzbaren Inhalts",
+ "visualeditor-annotations-tvar-end": "Ende des nicht übersetzbaren Inhalts",
+ "visualeditor-annotations-tvar-description": "Dieser Bereich ist als nicht übersetzbar gekennzeichnet. Weitere Informationen findest du unter [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Segmentation Segmentierung des Ausgangstextes]."
+}
diff --git a/Translate/i18n/pagetranslation/din.json b/Translate/i18n/pagetranslation/din.json
new file mode 100644
index 00000000..6b828adb
--- /dev/null
+++ b/Translate/i18n/pagetranslation/din.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dinkawiki"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% cï waaric)"
+}
diff --git a/Translate/i18n/pagetranslation/diq.json b/Translate/i18n/pagetranslation/diq.json
new file mode 100644
index 00000000..968b94ba
--- /dev/null
+++ b/Translate/i18n/pagetranslation/diq.json
@@ -0,0 +1,52 @@
+{
+ "@metadata": {
+ "authors": [
+ "Asmen",
+ "Erdemaslancan",
+ "Kumkumuk",
+ "Marmase",
+ "Mirzali",
+ "Orbot707"
+ ]
+ },
+ "pagetranslation": "Çarnayışê pele",
+ "tpt-section": "Yewronê açarnayışê $1",
+ "tpt-section-new": "Yewena Açarnayış de newan.\nName: $1",
+ "tpt-section-deleted": "Yewronê açarnayışê $1",
+ "tpt-diff-old": "Metno verên",
+ "tpt-diff-new": "Metno newe",
+ "tpt-old-pages-title": "Pelê çarnayışi",
+ "tpt-other-pages-title": "Pela şahtiyayi",
+ "tpt-select-prioritylangs-reason": "Sebeb:",
+ "tpt-rev-encourage": "peyser biya",
+ "translate-tag-translate-link-desc": "Na perer açarnê",
+ "tpt-languages-legend": "Zıwanê bini:",
+ "tpt-languages-nonzero": "$1 ($2% çarniyayi)",
+ "tpt-tab-translate": "Bıçarne",
+ "aggregategroups": "Grubi pêro",
+ "tpt-aggregategroup-add": "Cı ke",
+ "tpt-aggregategroup-save": "Qeyd ke",
+ "tpt-aggregategroup-new-name": "Name:",
+ "tpt-aggregategroup-new-description": "Şınasnayış (opsiyonel):",
+ "tpt-aggregategroup-edit-name": "Name:",
+ "tpt-aggregategroup-edit-description": "Şınasnayış:",
+ "tpt-aggregategroup-update": "Qeyd ke",
+ "tpt-aggregategroup-update-cancel": "Bıtexelne",
+ "tpt-invalid-group": "Nêraverdi grub",
+ "log-name-pagetranslation": "Qeydê açarnayışê pele",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Pera|Perê}} açarnayışi",
+ "pt-movepage-list-other": "{{PLURAL:$1|Pera bin|Perê bini}}",
+ "pt-movepage-current": "Nameyo raverde:",
+ "pt-movepage-new": "Nameyo newe:",
+ "pt-movepage-reason": "Sebeb:",
+ "pt-deletepage-action-other": "Hedefi bıvurne",
+ "pt-deletepage-current": "Nameyê pele:",
+ "pt-deletepage-reason": "Sebeb:",
+ "pt-deletepage-list-translation": "Pelê çarnayışi",
+ "pt-deletepage-list-other": "Bınpelê bini",
+ "pm-savepages-button-label": "Qeyd ke",
+ "pm-cancel-button-label": "Bıtexelne",
+ "pp-save-button-label": "Qeyd ke",
+ "pp-cancel-button-label": "Bıtexelne",
+ "pp-diff-old-header": "Metnê çımey"
+}
diff --git a/Translate/i18n/pagetranslation/dsb.json b/Translate/i18n/pagetranslation/dsb.json
new file mode 100644
index 00000000..5a7d2c88
--- /dev/null
+++ b/Translate/i18n/pagetranslation/dsb.json
@@ -0,0 +1,141 @@
+{
+ "@metadata": {
+ "authors": [
+ "Michawiki"
+ ]
+ },
+ "pagetranslation": "Pśełožowanje bokow",
+ "right-pagetranslation": "Wersije bokow za pśełožowanje markěrowaś",
+ "action-pagetranslation": "pśełožujobne boki zastojaś",
+ "tpt-section": "Pśełožowańska jadnotka $1",
+ "tpt-section-new": "Nowa pśełožowańska jadnotka. Mě: $1",
+ "tpt-section-deleted": "Pśełožowańska jadnotka $1",
+ "tpt-diff-old": "Pśedchadny tekst",
+ "tpt-diff-new": "Nowy tekst",
+ "tpt-submit": "Toś tu wersiju za pśełožowanje markěrowaś",
+ "tpt-sections-oldnew": "Nowe a eksistowace pśełožowańske jadnotki",
+ "tpt-sections-deleted": "Wulašowane pśełožowańske jadnotki",
+ "tpt-sections-template": "Pśedłoga pśełožowańskego boka",
+ "tpt-action-nofuzzy": "Njeanulěruj pśełožki",
+ "tpt-badtitle": "Pódane bokowe mě ($1) njejo płaśiwy titel",
+ "tpt-nosuchpage": "Bok $1 njeeksistěrujo",
+ "tpt-oldrevision": "$2 njejo aktualna wersija boka [[:$1]].\nJano aktualne wersije daju se za pśełožowanje markěrowaś.",
+ "tpt-notsuitable": "Bok $1 njejo gódny za pśełožowanje.\nZawěsć, až ma toflicki <nowiki><translate></nowiki> a płaśiwu syntaksu.",
+ "tpt-saveok": "Bok [[:$1]] jo se markěrował za pśełožowanje z $2 {{PLURAL:$2|pśełožujobneju jadnotku|pśełožujobnyma jadnotkoma|pśełožujobnymi jadnotkami|pśełožujobnymi jadnotkami}}. Bok móže se něnto <span class=\"plainlinks\">[$3 pśełožowaś]</span>.",
+ "tpt-offer-notify": "Móžoš wó toś tom boku <span class=\"plainlinks\">[$1 pśełožowarjow informěrowaś]</span>.",
+ "tpt-showpage-intro": "Dołojce su nowe, eksistěrujuce a wulašowane pśełožowańske jadnotki nalicone.\nNježli až markěrujoš toś tu wersiju za pśełožowanje, pśekontrolěruj, lěc změny na pśełožowańskich jadnotkach su zminiměrowane, aby se wobinuł njetrěbne źěło za pśełožowarjow.",
+ "tpt-mark-summary": "Jo toś tu wersiju za pśełožowanje markěrował",
+ "tpt-edit-failed": "Toś ten bok njejo se dał aktualizěrowaś: $1",
+ "tpt-duplicate": "Mě pśełožkoweje jadnotki $1 wužywa se wěcej ako jaden raz.",
+ "tpt-unmarked": "Bok $1 wěcej njejo za pśełožowanje markěrowany.",
+ "tpt-list-nopages": "Žedne boki njejsu za pśełožowanje markěrowane ani su gótowe, aby se za pśełožowanje markěrowali.",
+ "tpt-new-pages-title": "Boki naraźone za pśełožowanje",
+ "tpt-old-pages-title": "Boki, kótarež se pśełožuju",
+ "tpt-other-pages-title": "Wobškóźone boki",
+ "tpt-new-pages": "{{PLURAL:$1|Toś ten bok wopśimujo|Toś tej boka wopśumujotej|Toś te boki wopśimuju|Toś te boki wopśimuju}} tekst z pśełožowańskimi toflickami, ale žedna wersija {{PLURAL:$1|toś togo boka|toś teju bokowu|toś tych bokow|toś tych bokow}} njejo tuchylu za pśełožowanje markěrowana.",
+ "tpt-old-pages": "Někaka wersija {{PLURAL:$1|toś togo boka|toś teju bokowu|toś tych bokow|toś tych bokow}} jo se za pśełožowanje markěrowała.",
+ "tpt-other-pages": "{{PLURAL:$1|Stara wersija toś togo boka|Starej wersiji toś teju bokowu|Stare wersije toś tych bokow}} jo za pśełožowanje markěrowana,\nale nejnowša {{PLURAL:$1|wersija njedajo|wersiji njedajotej|wersije njedaju}} se za pśełožowanje markěrowaś.",
+ "tpt-select-prioritylangs": "Lisćina rěcnych kodow primarnych rěcow źělonych pśez komu:",
+ "tpt-select-prioritylangs-force": "Pśełožkam do drugich ako primarnych rěcow zajźowaś",
+ "tpt-select-prioritylangs-reason": "Pśicyna:",
+ "tpt-sections-prioritylangs": "Primarne rěcy",
+ "tpt-rev-mark": "za pśełožowanje markěrowaś",
+ "tpt-rev-unmark": "wót pśełožowanja wuzamknuś",
+ "tpt-rev-discourage": "wuzamknuś",
+ "tpt-rev-encourage": "wótnowiś",
+ "tpt-rev-mark-tooltip": "Nejnowšu wersiju toś togo boka za pśełožowanje markěrowaś.",
+ "tpt-rev-unmark-tooltip": "Toś ten bok z pśełoženja wótpóraś",
+ "tpt-rev-discourage-tooltip": "Dalšne pśełožki na toś tom boku wuzamknuś.",
+ "tpt-rev-encourage-tooltip": "Toś ten bok za normalne pśełožowanje wótnowiś.",
+ "translate-tag-translate-link-desc": "Toś ten bok pśełožyś",
+ "translate-tag-markthis": "Toś ten bok za pśełožowanje markěrowaś",
+ "translate-tag-markthisagain": "Toś ten bok ma <span class=\"plainlinks\">[$1 {{PLURAL:$1|změnu|změnje|změny|změnow}}]</span>, wót togo casa, ako jo se slědny raz <span class=\"plainlinks\">[$2 za pśełožowanje markěrował]</span>.",
+ "translate-tag-hasnew": "Toś ten bok wopśimujo <span class=\"plainlinks\">[$1 {{PLURAL:$1|změnu, kótaraž njejo markěrowana|změnje, kótarejž njejstej markěrowanej|změny, kótare njejsu markěrowane|změnow, kótarež njejsu markěrowane}}]</span> za pśełožowanje.",
+ "tpt-translation-intro": "Toś ten bok jo <span class=\"plainlinks\">[$1 pśełožona wersija]</span> boka [[$2]] a $3 % pśełožka jo dogótowane a pśełožk jo aktualny.",
+ "tpt-translation-intro-fuzzy": "Zestarjone pśełožki su kaž toś ten markěrowany.",
+ "tpt-languages-legend": "Druge rěcy:",
+ "tpt-languages-zero": "Pśełožowanje za toś tu rěc zachopiś",
+ "tpt-tab-translate": "Pśełožyś",
+ "tpt-target-page": "Toś ten bok njedajo se manuelnje aktualizěrowaś.\nToś ten bok jo pśełožk boka [[$1]] a pśełožk dajo se z pomocu [$2 Pśełožyś] aktualizěrowaś.",
+ "tpt-unknown-page": "Toś ten mjenjowy rum jo za pśełožki wopśimjeśowych bokow wuměnjony.\nZda se, až bok, kótaryž wopytujoš wobźěłaś, njewótpowědujo bokoju, kótaryž jo za pśełožowanje markěrowany.",
+ "tpt-translation-restricted": "Pśełožowański administrator jo pśełožowanjeju toś togo boka do toś teje rěcy jo zajźował.\n\nPśicyna: $1",
+ "tpt-discouraged-language-force": "<strong>Toś ten bok njedajo se do $2 pśełožyś.</strong>\n\nPśełožowański administrator jo rozsuźił, až toś ten bok dajo se jano do $3 pśełožowaś.",
+ "tpt-priority-languages": "Pśełožowański administrator jo primarne rěcy za toś tu kupku ako $1 nastajił.",
+ "tpt-render-summary": "Aktualizacija pó nowej wersiji žrědłowego boka",
+ "aggregategroups": "Metakupki",
+ "tpt-aggregategroup-add": "Pśidaś",
+ "tpt-aggregategroup-save": "Składowaś",
+ "tpt-aggregategroup-add-new": "Nowu zespominańsku kupku pśidaś",
+ "tpt-aggregategroup-new-name": "Mě:",
+ "tpt-aggregategroup-new-description": "Wopisanje (opcionalne):",
+ "tpt-aggregategroup-remove-confirm": "Coš toś tu kupku napšawdu lašowaś?",
+ "tpt-aggregategroup-invalid-group": "Kupka njeeksistěrujo",
+ "pt-parse-open": "Asymetriska toflicka &lt;translate>.\nPśełožowańska pśedłoga: <pre>$1</pre>",
+ "pt-parse-close": "Asymetriska toflicka &lt;/translate>.\nPśełožowańska pśedłoga: <pre>$1</pre>",
+ "pt-parse-nested": "Zakašćikowane pśełožowańske jadnotki &lt;translate&gt; njejsu dowólone.\nTekst toflicki: <pre>$1</pre>",
+ "pt-shake-multiple": "Někotare marki pśełožowańskich jadnotkow za jadnu pśełožowańsku jadnotku.\nTekst pśełožowańskeje jadnotki: <pre>$1</pre>",
+ "pt-shake-position": "Marki pśełožowańskich jadnotkow na njewócakowanem městnje.\nTekst pśełožowańskeje jadnotki: <pre>$1</pre>",
+ "pt-shake-empty": "Prozna pśełožowańska jadnotka za marku \"$1\".",
+ "log-description-pagetranslation": "Protokol za akcije w zwisku z pśełožowańskim systemom",
+ "log-name-pagetranslation": "Protokol pśełožkow",
+ "logentry-pagetranslation-mark": "$1 jo $3 za pśełožowanje {{GENDER:$2|markěrował|markrowała}}",
+ "logentry-pagetranslation-unmark": "$1 jo $3 z pśełožowanja {{GENDER:$2|wópórał|wótpórała}}",
+ "logentry-pagetranslation-moveok": "$1 jo pśemjenjowanje pśełožujobnego boka $3 do $4 {{GENDER:$2|dokóńcył|dokóńcyła}}",
+ "logentry-pagetranslation-movenok": "$1 jo pśi pśesuwanju boka $3 do $4 na problem {{GENDER:$2|starcył|starcyła}}",
+ "logentry-pagetranslation-deletefok": "$1 jo lašowanje pśełožujobnego boka $3 {{GENDER:$2|dokóńcył|dokóńcyła}}",
+ "logentry-pagetranslation-deletefnok": "$1 njejo {{GENDER:$2|mógał|mógła}} $3 wulašowaś, kótaryž słuša k pśełožujobnemu bokoju $4",
+ "logentry-pagetranslation-deletelok": "$1 jo lašowanje pśełožowańskego boka $3 {{GENDER:$2|dokóńcył|dokóńcyła}}",
+ "logentry-pagetranslation-deletelnok": "$1 njejo {{GENDER:$2|mógał|mógła}} $3 wulašowaś, kótaryž słuša k pśełožowańskemu bokoju $4",
+ "logentry-pagetranslation-encourage": "$1 jo pśełožowanje boka $3 {{GENDER:$2|dopórucył|dopórucyła}}",
+ "logentry-pagetranslation-discourage": "$1 jo wót pśełožowanja boka $3 {{GENDER:$2|wótraźił|wótraźiła}}",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 jo primarne rěcy z pśełožujobnego boka $3 {{GENDER:$2|wótpórał|wótpórała}}",
+ "logentry-pagetranslation-prioritylanguages": "$1 jo primarne rěcy za pśełožujobny bok $3 na $5 {{GENDER:$2|stajił|stajiła}}",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 jo rěcy za pśełožujobny bok $3 na $5 {{GENDER:$2|wobgranicował|wobgranicowała}}",
+ "logentry-pagetranslation-associate": "$1 jo pśełožujobny bok $3 metakupce $4 {{GENDER:$2|pśidał|pśidała}}",
+ "logentry-pagetranslation-dissociate": "$1 jo pśełožujobny bok $3 z metakupki $4 {{GENDER:$2|wótpórał|wótpórała}}",
+ "pt-movepage-title": "Psełožujobny bok $1 psésunuś",
+ "pt-movepage-blockers": "Pśełožujobny bok njedajo se dla {{PLURAL:$1|slědujuceje zmólki|slědujuceju zmólkowu|slědujucych zmólkow|slědujucych zmólkow}} do nowego mjenja pśesunuś:",
+ "pt-movepage-block-base-invalid": "Mě celowego pśełožujobnego boka njejo płaśiwy titel.",
+ "pt-movepage-block-tp-invalid": "Titel celowego pśełožowańskego boka za [[:$1]] by był njepłaśiwy (pśedłujki?).",
+ "pt-movepage-block-section-invalid": "Titel celowego boka za \"[[:$1]]\" za pśełožowańsku jadnotku by był njepłaśiwy (pśedłujki?).",
+ "pt-movepage-block-subpage-invalid": "Titel celowego pódboka za [[:$1]] by był njepłaśiwy (pśedłuki?).",
+ "pt-movepage-list-pages": "Lisćina bokow, kótarež maju se pśesunuś",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Pśełožowański bok|Pśełožowańskej boka|Pśełožowańske boki}}",
+ "pt-movepage-list-section": "{{PLURAL:$1|Bok|Boka|Boki}} pśełožowańskich jadnotkow",
+ "pt-movepage-list-other": "{{PLURAL:$1|Drugi pódbok|Drugej pódboka|Druge pódboki}}",
+ "pt-movepage-list-count": "Dogromady {{PLURAL:$1|ma se $1 bok|matej se $1 boka|maju se $1 boki|ma se $1 bokow}} pśesunuś.",
+ "pt-movepage-legend": "Pśełožujobny bok pśesunuś",
+ "pt-movepage-current": "Aktualne mě:",
+ "pt-movepage-new": "Nowe mě:",
+ "pt-movepage-reason": "Pśicyna:",
+ "pt-movepage-subpages": "Wšykne pódboki pśesunuś",
+ "pt-movepage-action-check": "Kontrolěrowaś, lěc pśesunjenje jo móžno",
+ "pt-movepage-action-perform": "Pśesunuś",
+ "pt-movepage-action-other": "Cel změniś",
+ "pt-movepage-intro": "Toś ten specialny bok dowólujo śi boki pśesunuś, kótarež sz za pśełožk markěrowane.\nPśesunjenje njebuźo se ned staś, dokulaž wjele bokow musy se pśesunuś.\n\nMjaztym až boki se pśesuwaju, njejo móžno z wótpowědnymi bokami interagěrowaś.\nZmólki budu se protokolěrowaś w [[Special:Log/pagetranslation|pséłožowańskem protokolu]] a muse se manuelnje wótpóraś.",
+ "pt-movepage-logreason": "Źěl pśełožujobnego boka \"$1\".",
+ "pt-movepage-started": "Zakładny bok jo něnto pśesunjony.\nPšosym pśekontrolěruj [[Special:Log/pagetranslation|pśełožowański protokol boka]] za zmólkami a zdźělenje wuwjeźenja.",
+ "pt-locked-page": "Toś ten bok jo se zastajił, dokulaž pśełožujobny bok se rowno pśesuwa.",
+ "pt-deletepage-lang-title": "Pśełožony bok $1 so lašujo.",
+ "pt-deletepage-tp-title": "Pśełožujobny bok $1 so lašujo.",
+ "pt-deletepage-invalid-title": "Pódany bok njejo płaśiwy.",
+ "pt-deletepage-invalid-text": "Pódany bok njejo ani pśełožujobny bok ani pśełožowański bok.",
+ "pt-deletepage-action-check": "Boki nalicyś, kótarež maju se wulašowaś",
+ "pt-deletepage-action-perform": "Lašowaś",
+ "pt-deletepage-action-other": "Cel změniś",
+ "pt-deletepage-lang-legend": "Pśełožony bok wulašowaś",
+ "pt-deletepage-tp-legend": "Pśełožujobny bok wulašowaś",
+ "pt-deletepage-any-legend": "Přełožujobny bok abo pśełožowański bok wulašowaś",
+ "pt-deletepage-current": "Mě boka:",
+ "pt-deletepage-reason": "Pśicyna:",
+ "pt-deletepage-subpages": "Wšykne pódboki lašowaś:",
+ "pt-deletepage-list-pages": "Lisćina bokow, kótarež maju se wulašowaś",
+ "pt-deletepage-list-translation": "Pśełožowańske boki",
+ "pt-deletepage-list-section": "Boki pśełožowańskich jadnotkow",
+ "pt-deletepage-list-other": "Druge pódboki",
+ "pt-deletepage-list-count": "Dogromady {{PLURAL:$1|ma se $1 bok|matej se $1 boka|maju se $1 boki|ma se $1 bokow}} wulašowaś.",
+ "pt-deletepage-full-logreason": "Źěl pśełožujobnego boka $1.",
+ "pt-deletepage-lang-logreason": "Źěl pśełožonego boka \"$1\".",
+ "pt-deletepage-started": "Pšosym pśekontrolěruj [[Special:Log/pagetranslation|pśełožowański protokol boka]] za zmólkami a zdźělenjami wuwjeźenja.",
+ "pt-deletepage-intro": "Toś ten specialny bok śi zmóžnja, aby wulašował ceły pśełožujobne bok abo jadnotliwy přełožowański bok w rěcy wulašował.\nLašowanje njestanjo se ned, dokulaž wšykne boki, kótarež k njomu słušaju, muse se wulašowaś.\nZmólki budu se w [[Special:Log/pagetranslation|protokolu pśełožkow]] protokolěrowaś a wóne muse se manuelnje pórěźiś."
+}
diff --git a/Translate/i18n/pagetranslation/dty.json b/Translate/i18n/pagetranslation/dty.json
new file mode 100644
index 00000000..47f357e4
--- /dev/null
+++ b/Translate/i18n/pagetranslation/dty.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "जनक राज भट्ट"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% आनुबादित)"
+}
diff --git a/Translate/i18n/pagetranslation/ee.json b/Translate/i18n/pagetranslation/ee.json
new file mode 100644
index 00000000..e3cca892
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ee.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Natsubee"
+ ]
+ },
+ "translate-tag-translate-link-desc": "Ɖe axa sia gɔme",
+ "tpt-languages-legend": "Gbe bubuwo:"
+}
diff --git a/Translate/i18n/pagetranslation/el.json b/Translate/i18n/pagetranslation/el.json
new file mode 100644
index 00000000..2cb49023
--- /dev/null
+++ b/Translate/i18n/pagetranslation/el.json
@@ -0,0 +1,214 @@
+{
+ "@metadata": {
+ "authors": [
+ "Crazymadlover",
+ "Dead3y3",
+ "Evropi",
+ "Flyax",
+ "Geraki",
+ "Giorgos456",
+ "Lou",
+ "NikosLikomitros",
+ "Nikosgranturismogt",
+ "Norhorn",
+ "Protnet",
+ "ZaDiak"
+ ]
+ },
+ "pagetranslation": "Μετάφραση σελίδων",
+ "right-pagetranslation": "Σήμανση εκδόσεων σελίδων προς μετάφραση",
+ "action-pagetranslation": "διαχειριστείτε σελίδες προς μετάφραση",
+ "tpt-section": "Μεταφραστική ενότητα $1",
+ "tpt-section-new": "Νέα μεταφραστική ενότητα.\nΌνομα: $1",
+ "tpt-section-deleted": "Μεταφραστική ενότητα $1",
+ "tpt-diff-old": "Προηγούμενο κείμενο",
+ "tpt-diff-new": "Νέο κείμενο",
+ "tpt-submit": "Σήμανση αυτής της έκδοσης για μετάφραση",
+ "tpt-sections-oldnew": "Νέες και υπάρχουσες μεταφραστικές ενότητες",
+ "tpt-sections-deleted": "Διαγεγραμμένες μεταφραστικές ενότητες",
+ "tpt-sections-template": "Πρότυπο σελίδας μετάφρασης",
+ "tpt-action-nofuzzy": "Να μην γίνει ακύρωση των μεταφράσεων",
+ "tpt-badtitle": "Ο τίτλος σελίδας που δόθηκε ($1) δεν είναι έγκυρος τίτλος",
+ "tpt-nosuchpage": "Η σελίδα $1 δεν υπάρχει",
+ "tpt-oldrevision": "Το $2 δεν είναι η τελευταία έκδοση της σελίδας [[:$1]].\nΜόνο οι πιο πρόσφατες εκδόσεις μπορούν να επισημανθούν για μετάφραση.",
+ "tpt-notsuitable": "Η σελίδα $1 δεν είναι κατάλληλη για μετάφραση.\nΒεβαιωθείτε ότι έχει τις ετικέτες <nowiki><translate></nowiki> και έχει έγκυρη σύνταξη.",
+ "tpt-saveok": "Η σελίδα [[:$1]] έχει σημανθεί για μετάφραση με $2 {{PLURAL:$2|μεταφραστική ενότητα|μεταφραστικές ενότητες}}.\nΗ σελίδα μπορεί τώρα να <span class=\"plainlinks\">[$3 μεταφραστεί]</span>.",
+ "tpt-saveok-first": "Μπορείτε να [[Special:PageMigration|εισάγετε υπάρχων μετάφραση]] για αυτή την σελίδα (εάν υπάρχουν).",
+ "tpt-offer-notify": "Μπορείτε να <span class=\"plainlinks\">[$1 στείλετε ειδοποίηση στους μεταφραστές]</span> για αυτήν τη σελίδα.",
+ "tpt-showpage-intro": "Παρακάτω παρατίθενται οι νέες, οι υφιστάμενες και οι διαγεγραμμένες μεταφραστικές ενότητες.\nΠροτού σημανθεί αυτή η έκδοση για μετάφραση, ελέγξτε ότι έχουν ελαχιστοποιηθεί οι αλλαγές στις μεταφραστικές ενότητες για την αποφυγή περιττής εργασίας από τους μεταφραστές.",
+ "tpt-mark-summary": "Αυτή η έκδοση σημάνθηκε για μετάφραση",
+ "tpt-mark-nochanges": "Δεν υπάρχουν αλλαγές προς θεώρηση. Η σήμανση αυτής τη σελίδα για μετάφραση δεν θα επεξεργαστεί τη σελίδα, ούτε οποιαδήποτε υπάρχουσα μεταφραστική μονάδα.",
+ "tpt-edit-failed": "Δεν ήταν δυνατό να ενημερωθεί η σελίδα: $1",
+ "tpt-duplicate": "Το όνομα μεταφραστικής ενότητας $1 χρησιμοποιείται περισσότερες από μία φορές.",
+ "tpt-unmarked": "Η σελίδα [[:$1]] δεν έχει πλέον σήμανση για μετάφραση.",
+ "tpt-list-nopages": "Δεν υπάρχουν σελίδες που να έχουν σημανθεί προς μετάφραση ή να είναι έτοιμες για σήμανση προς μετάφραση.",
+ "tpt-new-pages-title": "Σελίδες που προτείνονται για μετάφραση",
+ "tpt-old-pages-title": "Σελίδες υπό μετάφραση",
+ "tpt-other-pages-title": "Προβληματικές σελίδες",
+ "tpt-new-pages": "{{PLURAL:$1|Αυτή η σελίδα περιέχει|Αυτές οι σελίδες περιέχουν}} κείμενο με ετικέτες μετάφρασης,\nαλλά καμία έκδοση {{PLURAL:$1|αυτής της σελίδας|αυτών των σελίδων}} δεν έχει επί του παρόντος σήμανση για μετάφραση.",
+ "tpt-old-pages": "{{PLURAL:$1|Κάποια έκδοση αυτής της σελίδας έχει|Κάποιες εκδόσεις αυτών των σελίδων έχουν}} σημανθεί για μετάφραση.",
+ "tpt-other-pages": "{{PLURAL:$1|Μια παλιά έκδοση αυτής της σελίδας έχει|Παλαιότερες εκδόσεις αυτών των σελίδες έχουν}} σημανθεί για μετάφραση,\nαλλά η τελευταία {{PLURAL:$1|της|τους}} έκδοση δεν μπορεί να σημανθεί για μετάφραση.",
+ "tpt-select-prioritylangs": "Λίστα χωρισμένη με κόμματα των κωδικών γλώσσας που έχουν προτεραιότητα:",
+ "tpt-select-prioritylangs-force": "Να αποτρέπονται μεταφράσεις σε άλλες γλώσσες πέραν των γλωσσών που έχουν προτεραιότητα",
+ "tpt-select-prioritylangs-reason": "Αιτία:",
+ "tpt-sections-prioritylangs": "Γλώσσες που έχουν προτεραιότητα",
+ "tpt-rev-mark": "σήμανση για μετάφραση",
+ "tpt-rev-unmark": "αφαίρεση από τη μετάφραση",
+ "tpt-rev-discourage": "αποθάρρυνση",
+ "tpt-rev-encourage": "αποκατάσταση",
+ "tpt-rev-mark-tooltip": "Σήμανση της τελευταίας έκδοσης αυτής της σελίδας για μετάφραση.",
+ "tpt-rev-unmark-tooltip": "Αφαίρεση αυτής της σελίδας από τη μετάφραση.",
+ "tpt-rev-discourage-tooltip": "Αποθάρρυνση περαιτέρω μεταφράσεων σε αυτή τη σελίδα.",
+ "tpt-rev-encourage-tooltip": "Επαναφορά αυτής της σελίδας σε κανονική μετάφραση.",
+ "translate-tag-translate-link-desc": "Μεταφράστε αυτήν τη σελίδα",
+ "translate-tag-markthis": "Σήμανση αυτής της σελίδας για μετάφραση",
+ "translate-tag-markthisagain": "Αυτή η σελίδα έχει <span class=\"plainlinks\">[$1 αλλαγές]</span> από την τελευταία φορά που είχε <span class=\"plainlinks\">[$2 σημανθεί για μετάφραση]</span>.",
+ "translate-tag-hasnew": "Αυτή η σελίδα περιέχει <span class=\"plainlinks\">[$1 αλλαγές]</span> που δεν έχουν σημανθεί για μετάφραση.",
+ "tpt-translation-intro": "Αυτή η σελίδα είναι μια <span class=\"plainlinks\">[$1 μεταφρασμένη έκδοση]</span> της σελίδας [[$2]] και η μετάφραση είναι $3% ολοκληρωμένη.",
+ "tpt-translation-intro-fuzzy": "Ξεπερασμένες μεταφράσεις σημειώνονται όπως αυτό.",
+ "tpt-languages-legend": "Άλλες γλώσσες:",
+ "tpt-languages-zero": "Έναρξη μετάφρασης για αυτήν τη γλώσσα",
+ "tpt-languages-nonzero": "$1 ($2% μεταφρασμένο)",
+ "tpt-tab-translate": "Μετάφραση",
+ "tpt-target-page": "Αυτή η σελίδα δεν μπορεί να ενημερωθεί με το χέρι.\nΑυτή η σελίδα είναι μετάφραση της σελίδας [[$1]] και η μετάφραση μπορεί να ενημερωθεί χρησιμοποιώντας [$2 το εργαλείο μετάφρασης].",
+ "tpt-unknown-page": "Αυτός ο ονοματοχώρος προορίζεται για μεταφράσεις σελίδων περιεχομένου.\nΗ σελίδα που προσπαθείτε να επεξεργαστείτε δεν φαίνεται να αντιστοιχεί σε σελίδα με σήμανση για μετάφραση.",
+ "tpt-translation-restricted": "Η μετάφραση αυτής της σελίδας σε αυτήν τη γλώσσα έχει αποτραπεί από έναν διαχειριστή μετάφρασης.\n\nΑιτιολογία: $1",
+ "tpt-discouraged-language-force-header": "Αυτή η σελίδα δεν μπορεί να μεταφραστεί σε $1.",
+ "tpt-discouraged-language-force-content": "Κάποιος διαχειριστής μετάφρασης αποφάσισε ότι αυτή τη σελίδα μπορεί να μεταφραστεί μόνο σε $1.",
+ "tpt-discouraged-language-header": "Η μετάφραση στα $1 δεν δεν αποτελεί προτεραιότητα για αυτήν τη σελίδα.",
+ "tpt-discouraged-language-content": "Κάποιος από τους διαχειριστές μετάφρασης έκρινε σκόπιμο να επικεντρωθεί η προσπάθεια μετάφρασης στα $1.",
+ "tpt-discouraged-language-force": "<strong>Αυτή η σελίδα δεν μπορεί να μεταφραστεί σε $2.</strong>\n\nΈνας διαχειριστής μετάφρασης έχει επιλέξει για αυτήν τη σελίδα να μπορεί να μεταφραστεί μόνο σε $3.",
+ "tpt-priority-languages": "Ένας διαχειριστής μετάφρασης έχει ορίσει ως γλώσσες που έχουν προτεραιότητα τα $1 για αυτήν την ομάδα.",
+ "tpt-priority-languages-force": "Ένας διαχειριστής μεταφράσεων όρισε την προτεραιότητα γλωσσών της ομάδας σε $1. Δεν επιτρέπεται η μετάφραση σε άλλες.",
+ "tpt-render-summary": "Γίνεται ενημέρωση για να αντιστοιχεί στη νέα έκδοση της πηγαίας σελίδας",
+ "aggregategroups": "Συγκεντρωτικές ομάδες",
+ "tpt-aggregategroup-add": "Προσθήκη",
+ "tpt-aggregategroup-save": "Αποθήκευση",
+ "tpt-aggregategroup-add-new": "Προσθήκη νέας συγκεντρωτικής ομάδας",
+ "tpt-aggregategroup-new-name": "Όνομα:",
+ "tpt-aggregategroup-new-description": "Περιγραφή (προαιρετική):",
+ "tpt-aggregategroup-remove-confirm": "Είστε σίγουροι ότι θέλετε να διαγράψετε αυτήν τη συγκεντρωτική ομάδα;",
+ "tpt-aggregategroup-invalid-group": "Η ομάδα δεν υπάρχει",
+ "tpt-aggregategroup-edit-name": "Όνομα:",
+ "tpt-aggregategroup-edit-description": "Περιγραφή:",
+ "tpt-aggregategroup-update": "Αποθήκευση",
+ "tpt-aggregategroup-update-cancel": "Άκυρο",
+ "tpt-invalid-group": "Μη έγκυρη ομάδα",
+ "pt-parse-open": "Ορφανή ετικέτα &lt;translate>.\nΠρότυπο μετάφρασης: <pre>$1</pre>",
+ "pt-parse-close": "Ορφανή ετικέτα &lt;/translate>.\nΠρότυπο μετάφρασης: <pre>$1</pre>",
+ "pt-parse-nested": "Δεν επιτρέπονται εμφωλευμένες μεταφραστικές ενότητες &lt;translate>.\nΚείμενο ετικέτας: <pre>$1</pre>",
+ "pt-shake-multiple": "Πολλαπλοί δείκτες μεταφραστικών ενοτήτων για μία μεταφραστική ενότητα.\nΚείμενο μεταφραστικής ενότητας: <pre>$1</pre>",
+ "pt-shake-position": "Δείκτες μεταφραστικών ενοτήτων σε μη αναμενόμενη θέση.\nΚείμενο μεταφραστικής ενότητας: <pre>$1</pre>",
+ "pt-shake-empty": "Κενή μεταφραστική ενότητα για το δείκτη «$1».",
+ "log-description-pagetranslation": "Αρχείο καταγραφής για ενέργειες που σχετίζονται με το σύστημα μετάφρασης",
+ "log-name-pagetranslation": "Καταγραφή μετάφρασης σελίδων",
+ "logentry-pagetranslation-mark": "{{GENDER:$2|Ο|Η}} $1 σήμανε τη σελίδα $3 για μετάφραση",
+ "logentry-pagetranslation-unmark": "{{GENDER:$2|Ο|Η}} $1 αφαίρεσε τη σελίδα $3 από το σύστημα μετάφρασης",
+ "logentry-pagetranslation-moveok": "{{GENDER:$2|Ο|Η}} $1 ολοκλήρωσε τη μετονομασία της προς μετάφραση σελίδας $3 σε $4",
+ "logentry-pagetranslation-movenok": "{{GENDER:$2|Ο|Η}} $1 αντιμετώπισε ένα πρόβλημα κατά τη μετονομασία της σελίδας $3 σε $4",
+ "logentry-pagetranslation-deletefok": "{{GENDER:$2|Ο|Η}} $1 ολοκλήρωσε τη διαγραφή της προς μετάφραση σελίδας $3",
+ "logentry-pagetranslation-deletefnok": "{{GENDER:$2|Ο|Η}} $1 απέτυχε να διαγράψει τη σελίδα $3 που ανήκει στην προς μετάφραση σελίδα $4",
+ "logentry-pagetranslation-deletelok": "{{GENDER:$2|Ο|Η}} $1 ολοκλήρωσε τη διαγραφή της σελίδας μετάφρασης $3",
+ "logentry-pagetranslation-deletelnok": "{{GENDER:$2|Ο|Η}} $1 απέτυχε να διαγράψει τη σελίδα $3 που ανήκει στη σελίδα μετάφρασης $4",
+ "logentry-pagetranslation-encourage": "{{GENDER:$2|Ο|Η}} $1 ενθάρρυνε τη μετάφραση της σελίδας $3",
+ "logentry-pagetranslation-discourage": "{{GENDER:$2|Ο|Η}} $1 αποθάρρυνε τη μετάφραση της σελίδας $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "{{GENDER:$2|Ο|Η}} $1 αφαίρεσε γλώσσες που έχουν προτεραιότητα από την προς μετάφραση σελίδα $3",
+ "logentry-pagetranslation-prioritylanguages": "{{GENDER:$2|Ο|Η}} $1 έθεσε ως γλώσσες που έχουν προτεραιότητα για την προς μετάφραση σελίδα $3 τα $5",
+ "logentry-pagetranslation-prioritylanguages-force": "{{GENDER:$2|Ο|Η}} $1 περιόρισε τις γλώσσες για την προς μετάφραση σελίδα $3 στα $5",
+ "logentry-pagetranslation-associate": "{{GENDER:$2|Ο|Η}} $1 προσέθεσε την προς μετάφραση σελίδα $3 στη συγκεντρωτική ομάδα $4",
+ "logentry-pagetranslation-dissociate": "{{GENDER:$2|Ο|Η}} $1 αφαίρεσε την προς μετάφραση σελίδα $3 από τη συγκεντρωτική ομάδα $4",
+ "log-action-filter-pagetranslation": "Τύπος δράσης:",
+ "log-action-filter-pagetranslation-mark": "σήμανση για μετάφραση",
+ "log-action-filter-pagetranslation-unmark": "Αφαίρεση από τη μετάφραση",
+ "log-action-filter-pagetranslation-move": "Μετακινήσεις σελίδων",
+ "log-action-filter-pagetranslation-delete": "Διαγραφές σελίδας",
+ "log-action-filter-pagetranslation-encourage": "Ενθάρρυνση για μετάφραση",
+ "log-action-filter-pagetranslation-discourage": "Αποθάρρυνση για μετάφραση",
+ "log-action-filter-pagetranslation-prioritylanguages": "Τροποποίηση γλωσσών προτεραιότητας",
+ "log-action-filter-pagetranslation-aggregategroups": "Συνολική τροποποίηση ομάδων",
+ "pt-movepage-title": "Μετακίνηση της προς μετάφραση σελίδας «$1»",
+ "pt-movepage-blockers": "Η προς μετάφραση σελίδα δεν μπορεί να μετακινηθεί σε νέο όνομα λόγω {{PLURAL:$1|του ακόλουθου σφάλματος|των ακόλουθων σφαλμάτων}}:",
+ "pt-movepage-block-base-invalid": "Το όνομα της προς μετάφρασης σελίδας προορισμού δεν είναι έγκυρος τίτλος.",
+ "pt-movepage-block-tp-invalid": "Ο τίτλος της προς μετάφρασης σελίδας προορισμού «[[:$1]]» δεν είναι έγκυρος (πολύ μεγάλος;).",
+ "pt-movepage-block-section-invalid": "Ο τίτλος της σελίδας προορισμού «[[:$1]]» για τη μεταφραστική ενότητα δεν είναι έγκυρος (πολύ μεγάλος;).",
+ "pt-movepage-block-subpage-invalid": "Ο τίτλος της υποσελίδας προορισμού «[[:$1]]» δεν είναι έγκυρος (πολύ μεγάλος;).",
+ "pt-movepage-list-pages": "Κατάλογος σελίδων προς μετακίνηση",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Σελίδα|Σελίδες}} μετάφρασης",
+ "pt-movepage-list-section": "{{PLURAL:$1|Σελίδα μεταφραστικής ενότητας|Σελίδες μεταφραστικών ενοτήτων}}",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Υποσελίδα|Υποσελίδες}} σημειώθηκαν προς μετάφραση",
+ "pt-movepage-list-translatable-note": "Αυτές οι σελίδες πρέπει να μετακινηθούν ξεχωριστά.",
+ "pt-movepage-list-other": "{{PLURAL:$1|Άλλη υποσελίδα|Άλλες υποσελίδες}}",
+ "pt-movepage-list-count": "Συνολικά $1 {{PLURAL:$1|σελίδα|σελίδες}} προς μετακίνηση και $2 {{PLURAL:$2|υποσελίδα|υποσελίδες}}.",
+ "pt-movepage-list-no-pages": "Δεν βρέθηκαν σελίδες.",
+ "pt-movepage-legend": "Μετακίνηση προς μετάφραση σελίδας",
+ "pt-movepage-current": "Τρέχον όνομα:",
+ "pt-movepage-new": "Νέο όνομα:",
+ "pt-movepage-reason": "Αιτία:",
+ "pt-movepage-subpages": "Μετακίνηση όλων των υποσελίδων",
+ "pt-movepage-action-check": "Έλεγχος αν η μετακίνηση είναι εφικτή",
+ "pt-movepage-action-perform": "Εκτέλεση μετακίνησης",
+ "pt-movepage-action-other": "Αλλαγή προορισμού",
+ "pt-movepage-intro": "Αυτή η ειδική σελίδα σας επιτρέπει να μετακινήσετε σελίδες που έχουν σημανθεί για μετάφραση.\nΗ ενέργεια μετακίνησης δεν θα είναι άμεση, επειδή θα χρειαστεί να μετακινηθούν πολλές σελίδες.\nΚατά τη διάρκεια της μετακίνησης, δεν είναι δυνατή η αλληλεπίδραση με τις εν λόγω σελίδες.\nΟι αποτυχίες θα καταγραφούν στο [[Special:Log/pagetranslation|αρχείο καταγραφής των σελίδων μετάφρασης]] και θα πρέπει να επιδιορθωθούν με το χέρι.",
+ "pt-movepage-logreason": "Τμήμα της προς μετάφραση σελίδας «$1»",
+ "pt-movepage-started": "Παρακαλούμε ελέγξτε τη [[Special:Log/pagetranslation|σελίδα καταγραφών μετάφρασης]] για σφάλματα και μήνυμα ολοκλήρωσης.",
+ "pt-locked-page": "Αυτή η σελίδα είναι κλειδωμένη επειδή η προς μετάφραση σελίδα βρίσκεται αυτή τη στιγμή υπό μετακίνηση.",
+ "pt-deletepage-lang-title": "Γίνεται διαγραφή της σελίδας μετάφρασης «$1»",
+ "pt-deletepage-tp-title": "Γίνεται διαγραφή της προς μετάφραση σελίδας «$1»",
+ "pt-deletepage-invalid-title": "Η καθορισμένη σελίδα δεν είναι έγκυρη.",
+ "pt-deletepage-invalid-text": "Η καθορισμένη σελίδα δεν είναι ούτε σελίδα προς μετάφραση ούτε σελίδα μετάφρασης.",
+ "pt-deletepage-action-check": "Λίστα με σελίδες για διαγραφή",
+ "pt-deletepage-action-perform": "Εκτέλεση διαγραφής",
+ "pt-deletepage-action-other": "Αλλαγή προορισμού",
+ "pt-deletepage-lang-legend": "Διαγραφή σελίδας μετάφρασης",
+ "pt-deletepage-tp-legend": "Διαγραφή προς μετάφραση σελίδας",
+ "pt-deletepage-any-legend": "Διαγραφή προς μετάφραση σελίδας ή σελίδας μετάφρασης",
+ "pt-deletepage-current": "Όνομα σελίδας:",
+ "pt-deletepage-reason": "Αιτία:",
+ "pt-deletepage-subpages": "Διαγραφή όλων των υποσελίδων",
+ "pt-deletepage-list-pages": "Κατάλογος σελίδων προς διαγραφή",
+ "pt-deletepage-list-translation": "Σελίδες μετάφρασης",
+ "pt-deletepage-list-section": "Σελίδες μεταφραστικών ενοτήτων",
+ "pt-deletepage-list-other": "Άλλες υποσελίδες",
+ "pt-deletepage-list-count": "Συνολικά $1 {{PLURAL:$1|σελίδα|σελίδες}} προς διαγραφή και $2 {{PLURAL:$1|υποσελίδα|υποσελίδες}}.",
+ "pt-deletepage-list-no-pages": "Δεν βρέθηκαν σελίδες.",
+ "pt-deletepage-full-logreason": "Τμήμα της μεταφράσιμης σελίδας «$1».",
+ "pt-deletepage-lang-logreason": "Τμήμα της σελίδας μετάφρασης «$1».",
+ "pt-deletepage-started": "Παρακαλούμε ελέγξτε το [[Special:Log/pagetranslation|αρχείο καταγραφών των σελίδων μετάφρασης]] για σφάλματα και μήνυμα ολοκλήρωσης.",
+ "pt-deletepage-intro": "Αυτή η ειδική σελίδα σας επιτρέπει να διαγράψετε είτε ολόκληρη σελίδα προς μετάφραση, είτε μια μεμονωμένη σελίδα μετάφρασης σε κάποια γλώσσα.\nΗ ενέργεια διαγραφής δεν θα είναι άμεση, επειδή θα διαγραφούν επίσης και όλες οι σελίδες που εξαρτώνται από αυτές.\nΟι αποτυχίες θα καταγραφούν στο [[Special:Log/pagetranslation|αρχείο καταγραφών των σελίδων μετάφρασης]] και θα πρέπει να επιδιορθωθούν με το χέρι.",
+ "pagemigration": "Μεταφορά σελίδας μετάφρασης",
+ "pagemigration-summary": "Καθορίστε μια σελίδα μετάφρασης και αποκαταστήστε οποιαδήποτε μετάφραση έγινε πριν από την ενεργοποίησης του συστήματος Μετάφρασης σε αυτήν τη σελίδα.",
+ "pm-import-button-label": "Εισαγωγή",
+ "pm-savepages-button-label": "Αποθήκευση",
+ "pm-cancel-button-label": "Άκυρο",
+ "pm-page-does-not-exist": "Το $1 δεν υπάρχει.",
+ "pm-old-translations-missing": "Το $1 δεν περιέχει παλιές μεταφράσεις.",
+ "pm-extra-units-warning": "Μάλλον υπάρχουν παραπάνω μεταφραστικές μονάδες. Παρακαλούμε αντιστοιχίστε σωστά τις μεταφραστικές μονάδες του πηγαίου κειμένου με αυτές της μετάφρασης.",
+ "pm-pagename-missing": "Παρακαλούμε εισαγάγετε το όνομα της σελίδας.",
+ "pm-add-icon-hover-text": "Προσθήκη μιας μεταφραστικής μονάδας παρακάτω",
+ "pm-swap-icon-hover-text": "Εναλλαγή με τη μεταφραστική μονάδα παρακάτω",
+ "pm-delete-icon-hover-text": "Διαγραφή μεταφραστικής μονάδας",
+ "pm-pagetitle-placeholder": "Εισαγάγετε το τίτλο της σελίδας",
+ "pm-pagetitle-invalid": "Παρακαλούμε εισαγάγετε έγκυρη σελίδα τίτλου. Πρέπει να είναι της μορφής <page-name>/<language-code>.",
+ "pm-pagetitle-missing": "Παρακαλούμε εισάγετε τον τίτλο της σελίδας.",
+ "pm-langcode-missing": "Ο κωδικός γλώσσας φαίνεται να λείπει από τον τίτλο. Παρακαλούμε εισαγάγετε τον τίτλο της σελίδας με τη μορφή <page-name>/<language-code>.",
+ "pm-summary-import": "Εισήγαγε μετάφραση χρησιμοποιώντας τη [[Special:PageMigration|σελίδα μεταφοράς]]",
+ "pm-on-import-message-text": "Έγινε εισαγωγή παλαιών μεταφράσεων. Χρησιμοποιήστε τις επιλογές προσθήκη, εναλλαγή και διαγραφή για να προσαρμόσετε τις ενότητες μετάφρασης και κάντε κλικ στο κουμπί \"{{int:pm-savepages-button-label}}\" για αποθήκευση. Κάντε κλικ στο κουμπί \"{{int:pm-cancel-button-label}}\" για απόρριψη αλλαγών.",
+ "tpt-translate-title": "Να επιτρέπεται η μετάφραση του τίτλου της σελίδας",
+ "pp-save-summary": "Προετοίμασε τη σελίδα για μετάφραση",
+ "pagepreparation": "Προετοιμασία σελίδας για μετάφραση",
+ "pp-pagename-placeholder": "Εισαγάγετε το όνομα της σελίδας",
+ "pp-prepare-button-label": "Προετοιμασία",
+ "pp-save-button-label": "Αποθήκευση",
+ "pp-cancel-button-label": "Άκυρο",
+ "pp-save-message": "Η σελίδα έχει δημοσιευτεί. Μπορείτε να την [$1 επεξεργαστείτε].",
+ "pp-prepare-message": "Η σελίδα προετοιμάστηκε για μετάφραση. Δείτε τις διαφορές παρακάτω. Κάντε κλικ στο κουμπί «{{int:pp-save-button-label}}» αν είναι εντάξει!",
+ "pp-already-prepared-message": "Φαίνεται ότι η σελίδα έχει ήδη προετοιμαστεί για μετάφραση. Δεν υπάρχουν αλλαγές σε σχέση με την προηγούμενη έκδοση.",
+ "pp-pagename-missing": "Παρακαλούμε εισαγάγετε το όνομα της σελίδας.",
+ "pp-diff-old-header": "Πηγαίο κείμενο",
+ "pp-diff-new-header": "Προετοιμασμένο κείμενο",
+ "tpt-unlink-confirm": "Παρακαλούμε επιβεβαιώστε ότι θέλετε πραγματικά να καταργήσετε αυτήν τη σελίδα από το σύστημα μετάφρασης.\nΟ επιλογέας γλώσσας και τα μεταφρασμένα ονόματα της σελίδας θα σταματήσουν να λειτουργούν.\nΟι σελίδες μετάφρασης θα γίνουν επεξεργάσιμες.",
+ "tpt-unlink-button": "Αφαίρεση από τη μετάφραση",
+ "tpt-unlink-summary": "Σελίδα που έχει αφαιρεθεί από τη μετάφραση",
+ "tpt-generic-confirm": "Παρακαλούμε επιβεβαιώστε αυτή τη δράση.",
+ "tpt-generic-button": "Επιβεβαίωση"
+}
diff --git a/Translate/i18n/pagetranslation/en-gb.json b/Translate/i18n/pagetranslation/en-gb.json
new file mode 100644
index 00000000..2fa775be
--- /dev/null
+++ b/Translate/i18n/pagetranslation/en-gb.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bashir Gwanki",
+ "Captaindogfish",
+ "Chase me ladies, I'm the Cavalry",
+ "Shirayuki",
+ "Thehelpfulone"
+ ]
+ },
+ "tpt-showpage-intro": "Below new, existing and deleted translation units are listed.\nBefore marking this version for translation, check that the changes to translation units are minimised to avoid unnecessary work for translators."
+}
diff --git a/Translate/i18n/pagetranslation/en.json b/Translate/i18n/pagetranslation/en.json
new file mode 100644
index 00000000..fd4c5ab4
--- /dev/null
+++ b/Translate/i18n/pagetranslation/en.json
@@ -0,0 +1,269 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nike",
+ "BPositive",
+ "Zoranzoki21"
+ ]
+ },
+ "pagetranslation": "Page translation",
+ "nstab-translations": "Translation unit",
+ "right-pagetranslation": "Mark versions of pages for translation",
+ "action-pagetranslation": "manage translatable pages",
+ "tps-edit-sourcepage-text": "You are editing a source translation page. Please make sure that you are familiar with the following documentation:\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text Changing the source text]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Markup_examples Example of markup to use]",
+ "tps-edit-sourcepage-ve-warning-limited-text": "Some translatable areas may be uneditable in this editor. Please use the source editor to edit these.",
+ "tps-edit-sourcepage-ve-warning-title": "Warning: Unsupported page",
+ "tps-edit-sourcepage-ve-warning-text": "You are editing a translatable page. Editing these in this editor is not yet officially supported. Please use the source editor.",
+ "tps-edit-sourcepage-ve-warning-button": "OK",
+ "tpt-section": "Translation unit $1",
+ "tpt-section-new": "New translation unit.\nName: $1",
+ "tpt-section-deleted": "Translation unit $1",
+ "tpt-diff-old": "Previous text",
+ "tpt-diff-new": "New text",
+ "tpt-submit": "Mark this version for translation",
+ "tpt-sections-oldnew": "New and existing translation units",
+ "tpt-sections-deleted": "Deleted translation units",
+ "tpt-sections-template": "Translation page template",
+ "tpt-action-nofuzzy": "Do not invalidate translations",
+ "tpt-badtitle": "Page name given ($1) is not a valid title",
+ "tpt-nosuchpage": "Page $1 does not exist",
+ "tpt-oldrevision": "$2 is not the latest version of the page [[:$1]].\nOnly latest versions can be marked for translation.",
+ "tpt-notsuitable": "Page $1 is not suitable for translation.\nMake sure it has $2 tags and has a valid syntax.",
+ "tpt-saveok": "The page [[:$1]] has been marked up for translation with $2 {{PLURAL:$2|translation unit|translation units}}.\nThe page can now be <span class=\"plainlinks\">[$3 translated]</span>.",
+ "tpt-saveok-first": "You can [[Special:PageMigration|import pre-existing translation]] for this page (if any).",
+ "tpt-offer-notify": "You can <span class=\"plainlinks\">[$1 notify translators]</span> about this page.",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|View the list of translatable pages.]]",
+ "tpt-showpage-intro": "Below new, existing and deleted translation units are listed.\nBefore marking this version for translation, check that the changes to translation units are minimized to avoid unnecessary work for translators.",
+ "tpt-mark-summary": "Marked this version for translation",
+ "tpt-mark-nochanges": "No changes to review. Marking this page for translation will not edit the page nor any existing translation unit.",
+ "tpt-edit-failed": "Could not update the page: $1",
+ "tpt-duplicate": "Translation unit name $1 is used more than once.",
+ "tpt-invalid": "Translation unit name $1 must not contain underscore or slash.",
+ "tpt-unmarked": "Page [[:$1]] is no longer marked for translation.",
+ "tpt-list-nopages": "No pages are marked for translation or ready to be marked for translation.",
+ "tpt-new-pages-title": "Pages proposed for translation",
+ "tpt-old-pages-title": "Pages in translation",
+ "tpt-other-pages-title": "Broken pages",
+ "tpt-outdated-pages-title": "Pages with pending changes",
+ "tpt-new-pages": "{{PLURAL:$1|This page contains|These pages contain}} text with translation tags,\nbut no version of {{PLURAL:$1|this page is|these pages are}} currently marked for translation.",
+ "tpt-old-pages": "The latest version of {{PLURAL:$1|this page|each of these pages}} has been marked for translation.",
+ "tpt-other-pages": "{{PLURAL:$1|An old version of this page is|Older versions of these pages are}} marked for translation,\nbut the latest {{PLURAL:$1|version|versions}} cannot be marked for translation.",
+ "tpt-outdated-pages": "{{PLURAL:$1|This page has|These pages have}} changes not marked for translation.",
+ "tpt-tag-discouraged": "discouraged",
+ "tpt-tag-oldsyntax": "old syntax",
+ "tpt-tag-no-transclusion-support": "no transclusion support",
+ "tpt-select-prioritylangs": "Comma-separated list of priority language codes:",
+ "tpt-select-prioritylangs-force": "Prevent translations to languages other than the priority languages",
+ "tpt-select-prioritylangs-reason": "Reason:",
+ "tpt-sections-prioritylangs": "Priority languages",
+ "tpt-sections-syntaxversion": "Syntax version",
+ "tpt-syntaxversion-text": "This page currently uses an old version of translatable page source syntax. The new version will wrap untranslated sections with an HTML tag to indicate the correct language of the text. Example: $1. You can use a new markup syntax $2 to prevent any kind of wrapping in places where it is not appropriate, such as when translating <code>title</code> attribute of an element. It is not possible to go back to an old syntax version.",
+ "tpt-syntaxversion-label": "Use latest syntax version for this page",
+ "tpt-transclusion": "Template transclusion",
+ "tpt-transclusion-label": "Enable translation aware transclusion for this page",
+ "tpt-rev-mark": "mark for translation",
+ "tpt-rev-unmark": "remove from translation",
+ "tpt-rev-discourage": "discourage",
+ "tpt-rev-encourage": "restore",
+ "tpt-rev-mark-tooltip": "Mark the latest version of this page for translation.",
+ "tpt-rev-unmark-tooltip": "Remove this page from translation.",
+ "tpt-rev-discourage-tooltip": "Discourage further translations on this page.",
+ "tpt-rev-encourage-tooltip": "Restore this page to normal translation.",
+ "translate-edit-tag-warning": "",
+ "translate-tag-translate-link-desc": "Translate this page",
+ "translate-tag-markthis": "Mark this page for translation",
+ "translate-tag-markthisagain": "This page has <span class=\"plainlinks\">[$1 changes]</span> since it was last <span class=\"plainlinks\">[$2 marked for translation]</span>.",
+ "translate-tag-hasnew": "This page contains <span class=\"plainlinks\">[$1 changes]</span> which are not marked for translation.",
+ "tpt-translation-intro": "This page is a <span class=\"plainlinks\">[$1 translated version]</span> of the page [[$2]] and the translation is $3% complete.",
+ "tpt-translation-intro-fuzzy": "Outdated translations are marked like this.",
+ "tpt-languages-legend": "Other languages:",
+ "tpt-languages-separator": "&#160;•&#32;",
+ "tpt-languages-zero": "Start translation for this language",
+ "tpt-languages-nonzero": "$1 ($2% translated)",
+ "tpt-tab-translate": "Translate",
+ "tpt-target-page": "This page cannot be updated manually.\nThis page is a translation of the page [[$1]] and the translation can be updated using [$2 the translation tool].",
+ "tpt-unknown-page": "This namespace is reserved for content page translations.\nThe page you are trying to edit does not seem to correspond to any page marked for translation.",
+ "tpt-translation-restricted": "Translation of this page to this language has been prevented by a translation administrator.\n\nReason: $1",
+ "tpt-translation-restricted-no-reason": "Translation of this page to this language has been prevented by a translation administrator.",
+ "tpt-discouraged-language-force-header": "This page cannot be translated to $1.",
+ "tpt-discouraged-language-force-content": "A translation administrator decided that this page can only be translated to $1.",
+ "tpt-discouraged-language-header": "Translating to $1 is not a priority for this page.",
+ "tpt-discouraged-language-content": "A translation administrator decided to focus the translation efforts on $1.",
+ "tpt-discouraged-language-force": "<strong>This page cannot be translated to $2.</strong>\n\nA translation administrator decided that this page can only be translated to $3.",
+ "tpt-priority-languages": "A translation administrator has set the priority languages for this group to $1.",
+ "tpt-priority-languages-force": "A translation administrator has set the priority languages for this group to $1. Translating to other languages is not allowed.",
+ "tpt-discouraged-translation-header": "Translation of this page has been discouraged",
+ "tpt-discouraged-translation-content": "A translation administrator has discouraged the translation of this page. You can still translate the page but the translations may not be useful.",
+ "tpt-render-summary": "Updating to match new version of source page",
+ "aggregategroups": "Aggregate groups",
+ "tpt-aggregategroup-add": "Add",
+ "tpt-aggregategroup-save": "Save",
+ "tpt-aggregategroup-close": "Close",
+ "tpt-aggregategroup-add-new": "Add a new aggregate group",
+ "tpt-aggregategroup-new-name": "Name:",
+ "tpt-aggregategroup-new-description": "Description (optional):",
+ "tpt-aggregategroup-remove-confirm": "Are you sure you want to delete this aggregate group?",
+ "tpt-aggregategroup-invalid-group": "Group does not exist",
+ "tpt-aggregategroup-edit-name": "Name:",
+ "tpt-aggregategroup-edit-description": "Description:",
+ "tpt-aggregategroup-update": "Save",
+ "tpt-aggregategroup-update-cancel": "Cancel",
+ "tpt-aggregategroup-expand-all-groups": "expand all groups",
+ "tpt-aggregategroup-collapse-all-groups": "collapse all groups",
+ "tpt-aggregategroup-expand-group": "expand group",
+ "tpt-aggregategroup-collapse-group": "collapse group",
+ "tpt-invalid-group": "Invalid group",
+ "pt-parse-open": "Unbalanced &lt;translate> tag.\nTranslation template: <pre>$1</pre>",
+ "pt-parse-close": "Unbalanced &lt;/translate> tag.\nTranslation template: <pre>$1</pre>",
+ "pt-parse-nested": "Nested &lt;translate> translation units are not allowed.\nTag text: <pre>$1</pre>",
+ "pt-shake-multiple": "Multiple translation unit markers for one translation unit.\nMake sure that translation units are separated by blank lines.\nTranslation unit text: <pre>$1</pre>",
+ "pt-shake-position": "Translation unit markers in unexpected position.\nTranslation unit text: <pre>$1</pre>",
+ "pt-shake-empty": "Empty translation unit for marker \"$1\".",
+ "log-description-pagetranslation": "Log for actions related to the page translation system",
+ "log-name-pagetranslation": "Page translation log",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|marked}} $3 for translation",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|removed}} $3 from the translation system",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|completed}} renaming of translatable page $3 to $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|encountered}} a problem while moving page $3 to $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|completed}} deletion of translatable page $3",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|failed}} to delete $3 which belongs to translatable page $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|completed}} deletion of translation page $3",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|failed}} to delete $3 which belongs to translation page $4",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|encouraged}} translation of $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|discouraged}} translation of $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|removed}} priority languages from translatable page $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|set}} the priority languages for translatable page $3 to $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|limited}} languages for translatable page $3 to $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|added}} translatable page $3 to aggregate group $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|removed}} translatable page $3 from aggregate group $4",
+ "log-action-filter-pagetranslation": "Type of action:",
+ "log-action-filter-pagetranslation-mark": "Mark for translation",
+ "log-action-filter-pagetranslation-unmark": "Removal from translation",
+ "log-action-filter-pagetranslation-move": "Page moves",
+ "log-action-filter-pagetranslation-delete": "Page deletions",
+ "log-action-filter-pagetranslation-encourage": "Translation encouragement",
+ "log-action-filter-pagetranslation-discourage": "Translation discouragement",
+ "log-action-filter-pagetranslation-prioritylanguages": "Priority languages modification",
+ "log-action-filter-pagetranslation-aggregategroups": "Aggregate groups modification",
+ "log-description-messagebundle": "Log for actions related to the message bundle system",
+ "log-name-messagebundle": "Message bundle log",
+ "logentry-messagebundle-moveok": "$1 {{GENDER:$2|completed}} renaming of message bundle $3 to $4",
+ "logentry-messagebundle-movenok": "$1 {{GENDER:$2|encountered}} a problem while moving message bundle $3 to $4",
+ "logentry-messagebundle-deletefok": "$1 {{GENDER:$2|completed}} deletion of message bundle $3",
+ "logentry-messagebundle-deletefnok": "$1 {{GENDER:$2|failed}} to delete $3 which belongs to message bundle $4",
+ "log-action-filter-messagebundle": "Type of action:",
+ "log-action-filter-messagebundle-move": "Message bundle moves",
+ "log-action-filter-messagebundle-delete": "Message bundle deletions",
+ "pt-movepage-title": "Move translatable page \"$1\"",
+ "pt-movepage-messagebundle-title": "Move message bundle \"$1\"",
+ "pt-movepage-blockers": "The translatable page cannot be moved to a new name because of the following {{PLURAL:$1|error|errors}}:",
+ "pt-movepage-block-base-invalid": "The target translatable page name is not a valid title.",
+ "pt-movepage-block-tp-invalid": "The target translation page title for \"[[:$1]]\" would be invalid (too long?).",
+ "pt-movepage-block-section-invalid": "The target page title for \"[[:$1]]\" for the translation unit would be invalid (too long?).",
+ "pt-movepage-block-subpage-invalid": "The target subpage title for \"[[:$1]]\" would be invalid (too long?).",
+ "pt-movepage-block-talkpage-invalid": "The target talk page title for \"[[:$1]]\" would be invalid (too long?).",
+ "pt-movepage-block-unknown-page": "The page ([[:$1]]) being moved does not appear to be a part of the translatable page.",
+ "pt-movepage-block-ns-talk-unsupported": "The page ([[:$1]]) is being moved to a namespace that does not support talkpages.",
+ "pt-movepage-block-rename-failed": "There was an error while generating a new title for the page [[:$1]]",
+ "pt-movepage-list-pages": "List of pages to move",
+ "pt-movepage-list-translation": "Translation {{PLURAL:$1|page|pages}}",
+ "pt-movepage-list-section": "Translation unit {{PLURAL:$1|page|pages}}",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Subpage|Subpages}} marked for translation",
+ "pt-movepage-list-translatable-note": "These pages must be moved separately.",
+ "pt-movepage-list-other": "Other {{PLURAL:$1|subpage|subpages}}",
+ "pt-movepage-list-count": "In total $1 {{PLURAL:$1|page|pages}} including $2 {{PLURAL:$2|subpage|subpages}} and $3 {{PLURAL:$3|talk page|talk pages}} to move.",
+ "pt-movepage-page-count-limit": "This translatable page consists of over $1 {{PLURAL:$1|page|pages}}. Moving this many pages has been found to be unreliable. Please contact a system administrator to do this via a maintenance script.",
+ "pt-movepage-list-no-pages": "No pages found.",
+ "pt-movepage-legend": "Move translatable page",
+ "pt-movepage-messagebundle-legend": "Move message bundle",
+ "pt-movepage-current": "Current name:",
+ "pt-movepage-new": "New name:",
+ "pt-movepage-reason": "Reason:",
+ "pt-movepage-subpages": "Move all subpages",
+ "pt-movepage-talkpages": "Move talk pages",
+ "pt-movepage-talkpage-exists": "(Has talk page)",
+ "pt-movepage-action-check": "Check if the move is possible",
+ "pt-movepage-action-perform": "Do the move",
+ "pt-movepage-action-other": "Change target",
+ "pt-movepage-intro": "This special page allows you to move pages which are marked for translation.\nThe move action will not be instant, because many pages will need to be moved.\nWhile the pages are being moved, it is not possible to interact with the pages in question.\nFailures will be logged in the [[$1|log]] and they need to be repaired by hand.",
+ "pt-movepage-logreason": "Part of translatable page \"$1\"",
+ "pt-movepage-started": "Please check the [[$1|log]] in a while for errors and completion message.",
+ "pt-movepage-error-placeholder": "$1",
+ "pt-locked-page": "This page is locked because the translatable page is currently being moved.",
+ "pt-deletepage-lang-title": "Deleting translation page \"$1\"",
+ "pt-deletepage-tp-title": "Deleting translatable page \"$1\"",
+ "pt-deletepage-mb-title": "Deleting message bundle \"$1\"",
+ "pt-deletepage-invalid-title": "The specified page is not valid.",
+ "pt-deletepage-invalid-text": "The specified page is not a translatable page nor a translation page.",
+ "pt-deletepage-action-check": "List pages to be deleted",
+ "pt-deletepage-action-perform": "Do the deletion",
+ "pt-deletepage-action-other": "Change target",
+ "pt-deletepage-lang-legend": "Delete translation page",
+ "pt-deletepage-tp-legend": "Delete translatable page",
+ "pt-deletepage-mb-legend": "Delete message bundle",
+ "pt-deletepage-any-legend": "Delete translatable page, message bundle or translation page",
+ "pt-deletepage-current": "Page name:",
+ "pt-deletepage-reason": "Reason:",
+ "pt-deletepage-reason-details": "Other/additional reason:",
+ "pt-deletepage-reason-other": "Other reason",
+ "pt-deletepage-subpages": "Delete all subpages",
+ "pt-deletepage-list-pages": "List of pages to delete",
+ "pt-deletepage-list-translation": "Translation pages",
+ "pt-deletepage-list-section": "Translation unit pages",
+ "pt-deletepage-list-other": "Other subpages",
+ "pt-deletepage-list-count": "In total $1 {{PLURAL:$1|page|pages}} to delete and $2 {{PLURAL:$2|subpage|subpages}}.",
+ "pt-deletepage-list-no-pages": "No pages found.",
+ "pt-deletepage-full-logreason": "Part of translatable page \"$1\"",
+ "pt-deletepage-lang-logreason": "Part of translation page \"$1\"",
+ "pt-deletepage-started": "Please check the [[$1|log]] for errors and completion message.",
+ "pt-deletepage-intro": "This special page allows you delete a whole translatable page, message bundle, or an individual translation page in a language.\nThe delete action will not be instant, because all the pages depending on them will also be deleted.\nFailures will be logged in the [[$1|respective log]] and they need to be repaired by hand.",
+ "pagemigration": "Translation page migration",
+ "pagemigration-summary": "Specify a translation page and restore any translation made before the Translate system was enabled on that page.",
+ "pm-import-button-label": "Import",
+ "pm-savepages-button-label": "Save",
+ "pm-cancel-button-label": "Cancel",
+ "pm-page-does-not-exist": "$1 does not exist.",
+ "pm-old-translations-missing": "$1 does not contain old translations.",
+ "pm-extra-units-warning": "Extra units might be present. Please match the source and translation units properly.",
+ "pm-pagename-missing": "Please enter the page name.",
+ "pm-add-icon-hover-text": "Add a unit below",
+ "pm-swap-icon-hover-text": "Swap with unit below",
+ "pm-delete-icon-hover-text": "Delete unit",
+ "pm-pagetitle-placeholder": "Enter the page title",
+ "pm-pagetitle-invalid": "Page migration only works on translation pages, for example \"Page/de\". The provided title is not a valid title.",
+ "pm-pagetitle-missing": "Please enter the page title.",
+ "pm-langcode-missing": "Page migration only works on translation pages, for example \"Page/de\". The provided title is not a translation page.",
+ "pm-summary-import": "Imported translation using [[Special:PageMigration|page migration]]",
+ "pm-on-import-message-text": "The old translations have been imported. Use the add, swap and delete options to adjust the translation units and click the \"{{int:pm-savepages-button-label}}\" button to save them. Click the \"{{int:pm-cancel-button-label}}\" button to discard.",
+ "pm-on-save-message-text": "The translation units have been saved. You can now enter the title of a new translation page to migrate it, or make changes to the units below and save a new revision.",
+ "pm-pagetitle-not-translatable": "$1 is not part of a translatable page.",
+ "pm-translation-unit-fetch-failed": "There was an error while fetching the translation units for the page.",
+ "tpt-translate-title": "Allow translation of page title",
+ "pp-save-summary": "Prepared the page for translation",
+ "pagepreparation": "Prepare page for translation",
+ "pagepreparation-summary": "Specify a page title to prepare for translation.",
+ "pp-pagename-placeholder": "Enter the page name",
+ "pp-prepare-button-label": "Prepare",
+ "pp-save-button-label": "Publish",
+ "pp-cancel-button-label": "Cancel",
+ "pp-save-message": "The page was published. You can [$1 edit] it.",
+ "pp-prepare-message": "The page was prepared for translation. See the diff below. Click the \"{{int:pp-save-button-label}}\" button if okay!",
+ "pp-already-prepared-message": "It seems the page has already been prepared for translation. There are no changes compared to the previous version.",
+ "pp-diff-error": "There was an error while fetching the diff from the server.",
+ "pp-pagename-missing": "Please enter the page name.",
+ "pp-diff-old-header": "Source text",
+ "pp-diff-new-header": "Prepared text",
+ "tpt-unlink-confirm": "Please confirm that you really want to remove this page from the translation system.\nThe language selector and translated page names will stop working.\nThe translation pages will become editable.",
+ "tpt-unlink-button": "Remove from translation",
+ "tpt-unlink-summary": "Removed page from translation",
+ "tpt-generic-confirm": "Please confirm the action.",
+ "tpt-generic-button": "Confirm",
+ "tpt-validation-not-insertable": "Translation variable name \"$1\" does not work as an insertable in the translation interface. Avoid using special characters.",
+ "tpt-validation-name-reuse": "Translation variable \"$1\" is defined multiple times with different content. Change the variable names to be unique within the translation unit.",
+ "visualeditor-annotations-translate-start": "Start of content to be translated",
+ "visualeditor-annotations-translate-end": "End of content to be translated",
+ "visualeditor-annotations-translate-description": "This range is marked as translatable. Please make sure you follow the guidelines given for [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text changing the source text].",
+ "visualeditor-annotations-tvar-start": "Start of the untranslatable content",
+ "visualeditor-annotations-tvar-end": "End of the untranslatable content",
+ "visualeditor-annotations-tvar-description": "This range is marked as untranslatable. Please refer to [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Segmentation Segmentation of the source text] for more information."
+}
diff --git a/Translate/i18n/pagetranslation/eo.json b/Translate/i18n/pagetranslation/eo.json
new file mode 100644
index 00000000..2eb2f4f0
--- /dev/null
+++ b/Translate/i18n/pagetranslation/eo.json
@@ -0,0 +1,121 @@
+{
+ "@metadata": {
+ "authors": [
+ "Anakmalaysia",
+ "ArnoLagrange",
+ "Blahma",
+ "KuboF",
+ "Mirin",
+ "Robin van der Vliet",
+ "Yekrats"
+ ]
+ },
+ "pagetranslation": "Paĝa traduko",
+ "right-pagetranslation": "Marki versiojn de paĝoj por traduki",
+ "action-pagetranslation": "mastrumi tradukeblajn paĝojn",
+ "tps-edit-sourcepage-ve-warning-title": "Averto: nesubtenata paĝo",
+ "tps-edit-sourcepage-ve-warning-button": "Bone",
+ "tpt-section": "Tradukada unuo $1",
+ "tpt-section-new": "Nova tradukada unuo.\nNomo: $1",
+ "tpt-section-deleted": "Tradukada unuo $1",
+ "tpt-diff-old": "Antaŭa teksto",
+ "tpt-diff-new": "Nova teksto",
+ "tpt-submit": "Marki ĉi tiun version por traduki",
+ "tpt-sections-oldnew": "Novaj kaj ekzistantaj tradukaĵoj",
+ "tpt-sections-deleted": "Forigitaj tradukadaj unuoj",
+ "tpt-sections-template": "Ŝablono por tradukada paĝo",
+ "tpt-action-nofuzzy": "Ne malvalidigu tradukojn.",
+ "tpt-badtitle": "La provizita paĝnomo ($1) ne estas valida titolo",
+ "tpt-nosuchpage": "La paĝo $1 ne ekzistas.",
+ "tpt-oldrevision": "$2 ne estas la lasta versio de la paĝo [[:$1]].\nNur la lasta versio de la paĝo povas esti markita por esti tradukita.",
+ "tpt-notsuitable": "Paĝo $1 ne taŭgas por traduki.\nCertigu ke ĝi havas etikedojn <nowiki><translate></nowiki> kaj havas validan sintakson.",
+ "tpt-saveok": "La paĝo [[:$1]] estis markita por esti tradukita kun $2 traduk{{PLURAL:$2|ero|eroj}}.\nLa paĝo povas nun esti <span class=\"plainlinks\">[$3 tradukita]</span>.",
+ "tpt-mark-summary": "Markis ĉi tiun version por traduki.",
+ "tpt-edit-failed": "Ne eblis ĝisdatigi la paĝon: $1",
+ "tpt-old-pages-title": "Paĝoj en traduko",
+ "tpt-other-pages-title": "Rompitaj paĝoj",
+ "tpt-tag-oldsyntax": "malnova sintakso",
+ "tpt-select-prioritylangs-reason": "Kialo:",
+ "tpt-sections-prioritylangs": "Primadaj lingvoj",
+ "tpt-sections-syntaxversion": "Sintaksa versio",
+ "tpt-rev-mark": "marki por traduki",
+ "tpt-rev-unmark": "forigi el traduko",
+ "tpt-rev-discourage": "malinstigi",
+ "tpt-rev-encourage": "restarigi",
+ "translate-tag-translate-link-desc": "Traduki ĉi tiun paĝon",
+ "translate-tag-markthis": "Marki ĉi tiun paĝon por tradukado",
+ "tpt-translation-intro": "Ĉi tiu paĝo estas <span class=\"plainlinks\">[$1 tradukita versio]</span> de la paĝo [[$2]] kaj la traduko estas kompleta por $3%.",
+ "tpt-languages-legend": "Aliaj lingvoj:",
+ "tpt-languages-separator": "&#160;•&#32;",
+ "tpt-languages-zero": "Ektraduki por ĉi tiu lingvo",
+ "tpt-languages-nonzero": "$1 ($2% {{PLURAL:$2|tradukita|tradukitaj}})",
+ "tpt-tab-translate": "Traduki",
+ "tpt-discouraged-language-force-header": "Ĉi tiu paĝo ne povas esti tradukita al $1.",
+ "tpt-discouraged-language-header": "Tradukado al $1 ne estas prioritato por ĉi tiu paĝo.",
+ "tpt-aggregategroup-add": "Aldoni",
+ "tpt-aggregategroup-save": "Konservi",
+ "tpt-aggregategroup-new-name": "Nomo:",
+ "tpt-aggregategroup-new-description": "Priskribo (nedevige):",
+ "tpt-aggregategroup-invalid-group": "La grupo ne ekzistas",
+ "tpt-aggregategroup-edit-name": "Nomo:",
+ "tpt-aggregategroup-edit-description": "Priskribo:",
+ "tpt-aggregategroup-update": "Konservi",
+ "tpt-aggregategroup-update-cancel": "Nuligi",
+ "tpt-invalid-group": "Ne valida grupo",
+ "log-name-pagetranslation": "Protokolo pri paĝaj tradukoj",
+ "pt-movepage-title": "Movi la tradukeblan paĝon \"$1\"",
+ "pt-movepage-blockers": "La tradukebla paĝo ne povis esti movita al nova nomo pro la {{PLURAL:$1|sekva eraro|sekvaj eraroj}}:",
+ "pt-movepage-block-base-invalid": "Nomo de la cela tradukebla paĝo ne estas valida titolo.",
+ "pt-movepage-block-tp-invalid": "Titolo de la cela tradukpaĝo por \"[[:$1]]\" estus nevalida (tro longa?).",
+ "pt-movepage-block-section-invalid": "Nomo de la celpaĝo por \"[[:$1]]\" de la traduka unuo estus nevalida (tro longa?).",
+ "pt-movepage-block-subpage-invalid": "Nomo de la cela subpaĝo por \"[[:$1]]\" estus nevalida (tro longa?).",
+ "pt-movepage-list-pages": "Listo de movotaj paĝoj",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Traduka paĝo|Tradukaj paĝoj}}",
+ "pt-movepage-list-section": "{{PLURAL:$1|Paĝo|Paĝoj}} de tradukaj unuoj",
+ "pt-movepage-list-other": "{{PLURAL:$1|Alia subpaĝo|Aliaj subpaĝoj}}",
+ "pt-movepage-list-count": "Entute $1 {{PLURAL:$1|paĝo|paĝoj}} por movi.",
+ "pt-movepage-list-no-pages": "Neniu paĝo trovita.",
+ "pt-movepage-legend": "Movi tradukeblan paĝon",
+ "pt-movepage-current": "Nuna nomo:",
+ "pt-movepage-new": "Nova nomo:",
+ "pt-movepage-reason": "Kialo:",
+ "pt-movepage-subpages": "Movi ĉiujn subpaĝojn",
+ "pt-movepage-action-check": "Kontroli ĉu la movo fareblas",
+ "pt-movepage-action-perform": "Fari la movon",
+ "pt-movepage-action-other": "Ŝanĝi celon",
+ "pt-movepage-intro": "Tiu ĉi speciala paĝo permesas al vi movi paĝojn markitajn por traduko.\nLa movo ne efektiviĝos tuj, ĉar necesos movi multajn paĝojn.\nDum paĝoj estas movataj, ne eblas pri ili labori.\nEventualaj fiaskoj estos protokolitaj en [[Special:Log/pagetranslation|protokolo pri paĝotradukado]] kaj ilin necesos ripari permane.",
+ "pt-movepage-logreason": "Parto de tradukebla paĝo \"$1\"",
+ "pt-movepage-started": "La baza paĝo nun estas movita.\nBonvolu kontroli la [[Special:Log/pagetranslation|protokolon pri paĝotradukado]] por eraroj kaj mesaĝo pri kompletiĝo.",
+ "pt-locked-page": "Tiu ĉi paĝo estas ŝlosita ĉar la tradukebla paĝo nuntempe estas movata.",
+ "pt-deletepage-lang-title": "Foriganta la tradukpaĝon \"$1\"",
+ "pt-deletepage-tp-title": "Foriganta la tradukeblan paĝon \"$1\"",
+ "pt-deletepage-invalid-title": "La specifita paĝo ne estas valida.",
+ "pt-deletepage-invalid-text": "La specifita paĝo ne estas tradukebla paĝo nek tradukpaĝo.",
+ "pt-deletepage-action-check": "Listigi forigotajn paĝojn",
+ "pt-deletepage-action-perform": "Fari la forigon",
+ "pt-deletepage-action-other": "Ŝanĝi celon:",
+ "pt-deletepage-lang-legend": "Forigi tradukpaĝon",
+ "pt-deletepage-tp-legend": "Forigi tradukeblan paĝon",
+ "pt-deletepage-any-legend": "Forigi tradukeblan paĝon aŭ tradukpaĝon",
+ "pt-deletepage-current": "Nomo de paĝo:",
+ "pt-deletepage-reason": "Kialo:",
+ "pt-deletepage-subpages": "Forigi ĉiujn subpaĝojn",
+ "pt-deletepage-list-pages": "Listo de forigotaj paĝoj",
+ "pt-deletepage-list-translation": "Tradukpaĝoj",
+ "pt-deletepage-list-section": "Paĝoj de tradukada unuo",
+ "pt-deletepage-list-other": "Aliaj subpaĝoj",
+ "pt-deletepage-list-count": "Entute $1 {{PLURAL:$1|paĝo|paĝoj}} por forigi.",
+ "pt-deletepage-list-no-pages": "Neniu paĝo trovita.",
+ "pt-deletepage-full-logreason": "Pato de la tradukebla paĝo \"$1\"",
+ "pt-deletepage-lang-logreason": "Pato de la tradukpaĝo \"$1\"",
+ "pt-deletepage-started": "Bonvolu rekontroli la [[Special:Log/pagetranslation|protokolon pri paĝotradukado]] por eraroj kaj mesaĝo pri kompletiĝo.",
+ "pt-deletepage-intro": "En tiu ĉi speciala paĝo vi povas forigi tutan tradukeblan paĝon aŭ individuan tradukpaĝon en iu lingvo.\nLa forigo ne efektiviĝos tuj, ĉar ĉiuj dependaj paĝoj estos ankaŭ forigitaj.\nFiaskoj estos protokolitaj en la [[Special:Log/pagetranslation|protokolo pri paĝotradukado]] kaj ilin necesos ripari permane.",
+ "pm-import-button-label": "Enporti",
+ "pm-savepages-button-label": "Konservi",
+ "pm-cancel-button-label": "Nuligi",
+ "pm-page-does-not-exist": "$1 ne ekzistas.",
+ "pp-save-button-label": "Konservi",
+ "pp-cancel-button-label": "Nuligi",
+ "pp-diff-old-header": "Fonta teksto",
+ "tpt-generic-button": "Konfirmi"
+}
diff --git a/Translate/i18n/pagetranslation/es.json b/Translate/i18n/pagetranslation/es.json
new file mode 100644
index 00000000..952059ba
--- /dev/null
+++ b/Translate/i18n/pagetranslation/es.json
@@ -0,0 +1,240 @@
+{
+ "@metadata": {
+ "authors": [
+ "Antur",
+ "ArenaL5",
+ "Armando-Martin",
+ "Crazymadlover",
+ "Cuatro Remos",
+ "Dalton2",
+ "Danniel07",
+ "DannyS712",
+ "DarkGames26",
+ "Destinid10 2",
+ "Dferg",
+ "Dgstranz",
+ "Diego Grez",
+ "Fewasser Traduce",
+ "Fitoschido",
+ "GamemOfAnime",
+ "Hasley",
+ "Imre",
+ "Jackiezelaya",
+ "JasterTDC",
+ "Josuert",
+ "Macofe",
+ "MarcoAurelio",
+ "McDutchie",
+ "Mgpena",
+ "Mor",
+ "Pols12",
+ "Purodha",
+ "Rodney Araujo",
+ "Sanbec",
+ "Translationista",
+ "Vivaelcelta"
+ ]
+ },
+ "pagetranslation": "Traducción de páginas",
+ "nstab-translations": "Unidad de traducción",
+ "right-pagetranslation": "Marcar versiones de páginas para traducción",
+ "action-pagetranslation": "administrar páginas traducibles",
+ "tps-edit-sourcepage-ve-warning-limited-text": "Algunas áreas traducibles pueden no ser editables en este editor. Utilice el editor de código fuente para editarlos.",
+ "tps-edit-sourcepage-ve-warning-title": "Atención: página no admitida",
+ "tps-edit-sourcepage-ve-warning-button": "Aceptar",
+ "tpt-section": "Unidad de traducción $1",
+ "tpt-section-new": "Nueva unidad de traducción. \nNombre: $1",
+ "tpt-section-deleted": "Unidad de traducción $1",
+ "tpt-diff-old": "Texto anterior",
+ "tpt-diff-new": "Texto nuevo",
+ "tpt-submit": "Marcar esta versión para traducción",
+ "tpt-sections-oldnew": "Unidades de traducción nuevas y existentes",
+ "tpt-sections-deleted": "Unidades de traducción borradas",
+ "tpt-sections-template": "Plantilla de página de traducción",
+ "tpt-action-nofuzzy": "No invalidar traducciones",
+ "tpt-badtitle": "El nombre de página dado ($1) no es un título válido",
+ "tpt-nosuchpage": "Página $1 no existe",
+ "tpt-oldrevision": "$2 no es la última versión de la página [[:$1]].\nSolamente las últimas versiones pueden ser marcadas para traducción.",
+ "tpt-notsuitable": "La página $1 no es adecuada para traducción.\nAsegúrate que tiene etiquetas $2 y una sintaxis válida.",
+ "tpt-saveok": "La página [[:$1]] ha sido marcada para traducción con $2 {{PLURAL:$2|unidad|unidades}} de traducción.\nLa página puede ser ahora <span class=\"plainlinks\">[$3 traducida]</span>.",
+ "tpt-offer-notify": "Puedes <span class=\"plainlinks\">[$1 notificar a los traductores]</span> de esta página.",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|Ver la lista de páginas traducibles.]]",
+ "tpt-showpage-intro": "Debajo están listadas las unidades de traducción nuevas, existentes y borradas.\nAntes de marcar esta versión para traducción, verifica que los cambios a las unidades de traducción son mínimos para evitar trabajo innecesario a los traductores.",
+ "tpt-mark-summary": "Se marcó esta sección para su traducción",
+ "tpt-mark-nochanges": "No hay cambios para revisar. Marcar esta página para su traducción no editará la página ni ninguna de las unidades de traducción existentes.",
+ "tpt-edit-failed": "No pudo actualizar la página : $1",
+ "tpt-duplicate": "El nombre de la unidad de traducción $1 es utilizado más de una vez.",
+ "tpt-unmarked": "La página [[:$1]] ya no está marcada para traducción.",
+ "tpt-list-nopages": "Ninguna página está marcada para traducción ni lista para ser marcada para traducción.",
+ "tpt-new-pages-title": "Páginas propuestas para traducción",
+ "tpt-old-pages-title": "Páginas en curso de traducción",
+ "tpt-other-pages-title": "Páginas rotas",
+ "tpt-outdated-pages-title": "Páginas con cambios pendientes",
+ "tpt-new-pages": "{{PLURAL:$1|Esta página contiene|Estas páginas contienen}} texto con etiquetas de traducción, pero ninguna versión de {{PLURAL:$1|esta página está|estas páginas están}} actualmente marcadas para traducción.",
+ "tpt-old-pages": "La última versión de {{PLURAL:$1|esta página ha sido marcada|estas páginas han sido marcadas}} para traducción.",
+ "tpt-other-pages": "{{PLURAL:$1|Una versión antigua de esta página se marcó|Versiones antiguas de estas páginas se marcaron}} para traducirse,\npero {{PLURAL:$1|la última versión no se puede|las últimas versiones no se pueden}} marcar para traducirse.",
+ "tpt-outdated-pages": "{{PLURAL:$1|Esta página tiene|Estas páginas tienen}} cambios que no han sido marcados para traducción.",
+ "tpt-tag-oldsyntax": "sintaxis antigua",
+ "tpt-select-prioritylangs": "Lista de códigos de idioma prioritarios separados por comas:",
+ "tpt-select-prioritylangs-force": "Impedir las traducciones a otros idiomas distintos de los prioritarios",
+ "tpt-select-prioritylangs-reason": "Motivo:",
+ "tpt-sections-prioritylangs": "Idiomas prioritarios",
+ "tpt-sections-syntaxversion": "Versión de sintaxis",
+ "tpt-rev-mark": "marcar para traducción",
+ "tpt-rev-unmark": "eliminar de la traducción",
+ "tpt-rev-discourage": "desaconsejar",
+ "tpt-rev-encourage": "restaurar",
+ "tpt-rev-mark-tooltip": "Marcar la última versión de esta página para traducción.",
+ "tpt-rev-unmark-tooltip": "Eliminar esta página de la traducción",
+ "tpt-rev-discourage-tooltip": "Desaconsejar nuevas traducciones de esta página.",
+ "tpt-rev-encourage-tooltip": "Restaurar esta página para traducción normal.",
+ "translate-tag-translate-link-desc": "Traducir esta página",
+ "translate-tag-markthis": "Marcar esta página para traducción",
+ "translate-tag-markthisagain": "Esta página tiene <span class=\"plainlinks\">[$1 cambios]</span> desde la última vez que fue <span class=\"plainlinks\">[$2 marcada para traducción]</span>.",
+ "translate-tag-hasnew": "Esta página contiene <span class=\"plainlinks\">[$1 cambios]</span> que no se han marcado para su traducción.",
+ "tpt-translation-intro": "Esta página es una <span class=\"plainlinks\">[$1 versión traducida]</span> de la página [[$2]]. La traducción está completa al $3 %.",
+ "tpt-translation-intro-fuzzy": "Las traducciones desactualizadas están marcadas así.",
+ "tpt-languages-legend": "Otros idiomas:",
+ "tpt-languages-zero": "Iniciar la traducción para este idioma",
+ "tpt-languages-nonzero": "$1 ($2 % traducido)",
+ "tpt-tab-translate": "Traducir",
+ "tpt-target-page": "No se puede actualizar esta página manualmente.\nEsta página es una traducción de la página [[$1]] y puedes actualizar la traducción mediante [$2 la herramienta correspondiente].",
+ "tpt-unknown-page": "Este espacio de nombres está reservado para traducciones de páginas de contenido.\nLa página que estás tratando de editar no parece corresponder con ninguna página marcada para traducción.",
+ "tpt-translation-restricted": "La traducción de esta página a este idioma ha sido impedida por un administrador de traducción.\n\nMotivo: $1",
+ "tpt-discouraged-language-force-header": "Esta página no se puede traducir al $1.",
+ "tpt-discouraged-language-force-content": "Un administrador de traducción decidió que esta página sólo puede traducirse a $1.",
+ "tpt-discouraged-language-header": "La traducción al $1 no es una prioridad para esta página.",
+ "tpt-discouraged-language-content": "Un administrador de traducción decidió centrar los esfuerzos de traducción en $1.",
+ "tpt-discouraged-language-force": "<strong>Esta página no puede ser traducida a $2.</strong>\n\nUna administración de traducción decidió que sólo puede traducirse a $3.",
+ "tpt-priority-languages": "Un administrador de traducciones ha definido los idiomas prioritarios de este grupo: $1.",
+ "tpt-render-summary": "Actualizando para coincidir con nueva versión de la página fuente",
+ "aggregategroups": "Grupos de agregación",
+ "tpt-aggregategroup-add": "Añadir",
+ "tpt-aggregategroup-save": "Guardar",
+ "tpt-aggregategroup-add-new": "Añadir un nuevo grupo de agregación",
+ "tpt-aggregategroup-new-name": "Nombre:",
+ "tpt-aggregategroup-new-description": "Descripción (opcional):",
+ "tpt-aggregategroup-remove-confirm": "¿Estás seguro que quieres eliminar este grupo agregado?",
+ "tpt-aggregategroup-invalid-group": "El grupo no existe",
+ "tpt-aggregategroup-edit-name": "Nombre:",
+ "tpt-aggregategroup-edit-description": "Descripción:",
+ "tpt-aggregategroup-update": "Guardar",
+ "tpt-aggregategroup-update-cancel": "Cancelar",
+ "tpt-invalid-group": "El grupo no es válido",
+ "pt-parse-open": "Etiqueta &lt;translate> desequilibrada.\nPlantilla de traducción: <pre>$1</pre>",
+ "pt-parse-close": "Etiqueta &lt;/translate> desequilibrada.\nPlantilla de traducción: <pre>$1</pre>",
+ "pt-parse-nested": "No se permiten unidades de traducción &lt;translate> anidadas.\nTexto de etiqueta: <pre>$1</pre>",
+ "pt-shake-multiple": "Múltiples marcadores de unidades de traducción para una unidad de traducción.\nTexto de la unidad de traducción: <pre>$1</pre>",
+ "pt-shake-position": "Marcadores de unidad de traducción en posición inesperada.\nTexto de la unidad de traducción: <pre>$1</pre>",
+ "pt-shake-empty": "Unidad de traducción vacía para el marcador \"$1\".",
+ "log-description-pagetranslation": "Registro para acciones relacionadas al sistema de traducción de página",
+ "log-name-pagetranslation": "Registro de traducción de página",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|marcó}} $3 para traducción",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|eliminó}} $3 del sistema de traducción",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|completó}} el renombramiento de la página traducible $3 a $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|encontró}} un problema al mover la página $3 a $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|completó}} el borrado de la página traducible $3",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|no pudo}} borrar $3 que pertenece a la página traducible $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|completó}} el borrado de la página de traducción $3",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|no pudo}} borrar $3 que pertenece a la página de traducción $4",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|alentó}} la traducción de $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|desalentó}} la traducción de $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|eliminó}} idiomas prioritarios de la página traducible $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|configuró}} los idiomas prioritarios para la página traducible $3 a $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|limitó}} los idiomas para la página traducible $3 a $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|agregó}} la página traducible $3 al grupo agregado $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|eliminó}} la página traducible $3 del grupo agregado $4",
+ "log-action-filter-pagetranslation": "Tipo de acción:",
+ "log-action-filter-pagetranslation-mark": "Marcar para su traducción",
+ "log-action-filter-pagetranslation-move": "Traslados de página",
+ "log-action-filter-pagetranslation-delete": "Eliminación de páginas",
+ "log-action-filter-pagetranslation-prioritylanguages": "Modificación de idiomas prioritarios",
+ "log-action-filter-pagetranslation-aggregategroups": "Modificación de grupos del agregado",
+ "pt-movepage-title": "Trasladar la página traducible $1",
+ "pt-movepage-blockers": "La página traducible no puede ser movida a un nuevo nombre por {{PLURAL:$1|el siguiente error|los siguientes errores}}:",
+ "pt-movepage-block-base-invalid": "El nombre de la página traducible de destino no es un título válido.",
+ "pt-movepage-block-tp-invalid": "El título de la página de traducción de destino para \"[[:$1]]\" sería inválido (¿demasiado largo?).",
+ "pt-movepage-block-section-invalid": "El título de unidad de traducción de la página de destino \"[[:$1]]\" sería inválido (¿demasiado largo?).",
+ "pt-movepage-block-subpage-invalid": "El título de subpágina de destino para \"[[:$1]]\" sería inválido (¿demasiado largo?).",
+ "pt-movepage-list-pages": "Lista de páginas a trasladar",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Página|Páginas}} de traducción",
+ "pt-movepage-list-section": "{{PLURAL:$1|Página de unidad|Páginas de unidades}} de traducción",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Subpágina|Subpáginas}} marcadas para traducción",
+ "pt-movepage-list-translatable-note": "Estas páginas deben trasladarse de manera separada.",
+ "pt-movepage-list-other": "{{PLURAL:$1|Otra subpágina|Otras subpáginas}}",
+ "pt-movepage-list-count": "En total $1 {{PLURAL:$1|página| páginas}} incluyen $2 {{PLURAL:$2|subpage|subpages}} y $3 {{PLURAL:$3|página de discusión|páginas de discusión}} para mover.",
+ "pt-movepage-list-no-pages": "No se encontró ninguna página.",
+ "pt-movepage-legend": "Trasladar página traducible",
+ "pt-movepage-current": "Nombre actual:",
+ "pt-movepage-new": "Nuevo nombre:",
+ "pt-movepage-reason": "Razón:",
+ "pt-movepage-subpages": "Trasladar todas las subpáginas",
+ "pt-movepage-talkpages": "Mover páginas de discusión",
+ "pt-movepage-action-check": "Verificar si el traslado es posible",
+ "pt-movepage-action-perform": "Hacer el traslado",
+ "pt-movepage-action-other": "Cambiar destino",
+ "pt-movepage-intro": "Esta página especial permite trasladar páginas que están marcadas para su traducción.\nLa acción de traslado no será instantánea, porque necesitarán trasladarse muchas páginas.\nMientras las páginas estén siendo trasladadas, no es posible interactuar con las páginas en cuestión.\nLos fallos serán registrados en el [[Special:Log/pagetranslation|registro de traducción de páginas]] y necesitarán ser reparados manualmente.",
+ "pt-movepage-logreason": "Parte de la página traducible «$1»",
+ "pt-movepage-started": "En un momento encontrarás en el [[Special:Log/pagetranslation|registro de traducción de páginas]] los errores o el mensaje de compleción.",
+ "pt-locked-page": "Esta página está bloqueada porque la página traducible está siendo trasladada actualmente.",
+ "pt-deletepage-lang-title": "Eliminación de la página de traducción \"$1\"",
+ "pt-deletepage-tp-title": "Eliminación de la página traducible \"$1\"",
+ "pt-deletepage-invalid-title": "La página especificada no es válida.",
+ "pt-deletepage-invalid-text": "La página especificada no es una página traducible ni una página de traducción.",
+ "pt-deletepage-action-check": "Lista de páginas a borrar",
+ "pt-deletepage-action-perform": "Realizar la eliminación",
+ "pt-deletepage-action-other": "Cambiar el destino",
+ "pt-deletepage-lang-legend": "Eliminar la página de traducción",
+ "pt-deletepage-tp-legend": "Eliminar la página traducible",
+ "pt-deletepage-any-legend": "Eliminar la página traducible o la traducción de la página",
+ "pt-deletepage-current": "Nombre de la página:",
+ "pt-deletepage-reason": "Motivo:",
+ "pt-deletepage-subpages": "Eliminar todas las subpáginas",
+ "pt-deletepage-list-pages": "Lista de páginas para eliminar",
+ "pt-deletepage-list-translation": "Páginas de traducción",
+ "pt-deletepage-list-section": "Páginas de unidades de traducción",
+ "pt-deletepage-list-other": "Otras subpáginas",
+ "pt-deletepage-list-count": "En total $1 {{PLURAL:$1|página|páginas}} a eliminar y $2 {{PLURAL:$2|subpágina|subpáginas}}.",
+ "pt-deletepage-list-no-pages": "No se encontró ninguna página.",
+ "pt-deletepage-full-logreason": "Parte de la página traducible «$1»",
+ "pt-deletepage-lang-logreason": "Parte de la página de traducción «$1»",
+ "pt-deletepage-started": "Compruebe los errores y los mensajes de conclusión en el [[Special:Log/pagetranslation|registro de traducción de páginas]].",
+ "pt-deletepage-intro": "Esta página especial te permite eliminar páginas traducibles enteras o una página de traducción individual a un idioma. La eliminación no será instantánea, porque deben borrarse todas las páginas dependientes de ella. \nLos fallos se registrarán en el [[Special:Log/pagetranslation|registro de traducción de la página]] y tendrán que ser reparados a mano.",
+ "pagemigration": "Migración de página de traducción",
+ "pagemigration-summary": "Especifica una página traducida y restaura cualesquiera traducciones realizadas antes de que se activara el sistema Translate en esa página.",
+ "pm-import-button-label": "Importar",
+ "pm-savepages-button-label": "Guardar",
+ "pm-cancel-button-label": "Cancelar",
+ "pm-page-does-not-exist": "$1 no existe",
+ "pm-old-translations-missing": "$1 no contiene traducciones obsoletas.",
+ "pm-extra-units-warning": "Podrían estar presentes unidades extras. Haz coincidir correctamente las unidades de origen y de traducción.",
+ "pm-pagename-missing": "Escribe el nombre de la página",
+ "pm-add-icon-hover-text": "Añadir una unidad más abajo",
+ "pm-swap-icon-hover-text": "Intercambiar con la unidad siguiente",
+ "pm-delete-icon-hover-text": "Eliminar unidad",
+ "pm-pagetitle-placeholder": "Escribe el título de la página",
+ "pm-pagetitle-invalid": "Escribe un título válido para la página. Debe tener el formato <nombre-de-página>/<código-de-idioma>.",
+ "pm-pagetitle-missing": "Escribe el título de la página.",
+ "pm-langcode-missing": "El código de idioma parece faltar en el título. Escribe el título de la página en el formato <page-name>/<language-code>.",
+ "pm-summary-import": "Se importó la traducción usando [[Special:PageMigration|migración de página]]",
+ "pm-pagetitle-not-translatable": "$1 no es parte de una página traducible.",
+ "tpt-translate-title": "Permitir la traducción del título de la página",
+ "pp-save-summary": "Preparada la página para la traducción",
+ "pagepreparation": "Preparar la página para la traducción",
+ "pp-pagename-placeholder": "Escribe el nombre de la página",
+ "pp-prepare-button-label": "Preparar",
+ "pp-save-button-label": "Publicar",
+ "pp-cancel-button-label": "Cancelar",
+ "pp-save-message": "Se publicó la página. Puedes [$1 editarla].",
+ "pp-prepare-message": "Se preparó la página para la traducción. Mira los cambios más abajo. ¡Haz clic en el botón \"{{int:pp-save-button-label}}\" si está todo bien!",
+ "pp-already-prepared-message": "Parece que la página ya se ha preparado para la traducción. No hay cambios respecto a la versión anterior.",
+ "pp-diff-error": "Se produjo un error al recuperar las diferencias del servidor.",
+ "pp-pagename-missing": "Escribe el nombre de la página.",
+ "pp-diff-old-header": "Texto fuente",
+ "pp-diff-new-header": "Texto preparado",
+ "tpt-unlink-confirm": "Confirma que realmente quieres eliminar esta página del sistema de traducción.\nEl selector de idiomas y los nombres de las páginas traducidas dejarán de funcionar.\nLas páginas de traducción se volverán editables.",
+ "tpt-unlink-button": "Eliminar de la traducción",
+ "tpt-unlink-summary": "Eliminar página de la traducción",
+ "tpt-generic-confirm": "Confirma la acción.",
+ "tpt-generic-button": "Confirmar"
+}
diff --git a/Translate/i18n/pagetranslation/et.json b/Translate/i18n/pagetranslation/et.json
new file mode 100644
index 00000000..5380a12b
--- /dev/null
+++ b/Translate/i18n/pagetranslation/et.json
@@ -0,0 +1,162 @@
+{
+ "@metadata": {
+ "authors": [
+ "Avjoska",
+ "Ker",
+ "Lyrixn",
+ "Pikne"
+ ]
+ },
+ "pagetranslation": "Lehekülje tõlkimine",
+ "right-pagetranslation": "Märkida lehekülje versioone tõlkimiseks",
+ "action-pagetranslation": "tõlgitavaid lehekülgi hallata",
+ "tpt-section": "Tõlkeüksus $1",
+ "tpt-section-new": "Uus tõlkeüksus.\nNimi: $1",
+ "tpt-section-deleted": "Tõlkeüksus $1",
+ "tpt-diff-old": "Eelnev tekst",
+ "tpt-diff-new": "Uus tekst",
+ "tpt-submit": "Märgi see versioon tõlkimiseks",
+ "tpt-sections-oldnew": "Uued ja olemasolevad tõlkeüksused",
+ "tpt-sections-deleted": "Kustutatud tõlkeüksused",
+ "tpt-sections-template": "Tõlkelehekülje mall",
+ "tpt-badtitle": "Pealkiri ($1) ei sobi.",
+ "tpt-nosuchpage": "Lehekülge $1 pole",
+ "tpt-oldrevision": "$2 pole lehekülje [[:$1]] uusim versioon.\nAinult uusimaid versioone saab märkida tõlkimiseks.",
+ "tpt-notsuitable": "Lehekülg $1 ei sobi tõlkimiseks.\nVeendu, et see sisaldab silti $2 ja selle süntaks on õige.",
+ "tpt-saveok": "{{PLURAL:$2|Ühe|$2}} tõlkeüksusega lehekülg [[:$1]] on märgitud tõlkimiseks.\nLehekülge saab nüüd <span class=\"plainlinks\">[$3 tõlkida]</span>.",
+ "tpt-showpage-intro": "Allpool on loetletud uued, olemasolevad ja kustutatud tõlkeüksused.\nEnne selle versiooni märkimist tõlkimiseks, veendu palun, et tõlkeüksustes tehtud muudatused on võimalikult väikesed, et tõlkijad ei peaks tegema tarbetut tööd.",
+ "tpt-mark-summary": "See versioon on märgitud tõlkimiseks",
+ "tpt-edit-failed": "Lehekülje uuendamine ei õnnestunud: $1",
+ "tpt-duplicate": "Tõlkeüksust nimega $1 kasutatakse rohkem kui ühel korral.",
+ "tpt-unmarked": "Lehekülg [[:$1]] pole enam märgitud tõlkimiseks.",
+ "tpt-list-nopages": "Ükski lehekülg pole märgitud tõlkimiseks ega ole valmis, et märkida ta tõlkimiseks.",
+ "tpt-new-pages-title": "Tõlkimiseks esitatud leheküljed",
+ "tpt-old-pages-title": "Tõlgitavad leheküljed",
+ "tpt-other-pages-title": "Katkised leheküljed",
+ "tpt-outdated-pages-title": "Ootel muudatustega leheküljed",
+ "tpt-new-pages": "{{PLURAL:$1|See lehekülg sisaldab|Need leheküljed sisaldavad}} tõlkesiltidega teksti,\naga ükski {{PLURAL:$1|selle lehekülje|nende lehekülgede}} versioon pole praegu märgitud tõlkimiseks.",
+ "tpt-old-pages": "{{PLURAL:$1|Selle lehekülje viimane versioon|Nende lehekülgede viimased versioonid}} on märgitud tõlkimiseks.",
+ "tpt-other-pages": "{{PLURAL:$1|Selle lehekülje vana versioon|Nende lehekülgede vanad versioonid}} on märgitud tõlkimiseks\nja {{PLURAL:$1|uusimat versiooni|uusimaid versioone}} ei saa tõlgitavaks teha.",
+ "tpt-outdated-pages": "{{PLURAL:$1|Sellel leheküljel|Neil lehekülgedel}} on muudatusi, mida pole tõlkimiseks märgitud.",
+ "tpt-tag-discouraged": "ei soovitata tõlkida",
+ "tpt-tag-oldsyntax": "vana süntaks",
+ "tpt-tag-no-transclusion-support": "ei toeta mallina kasutamist",
+ "tpt-select-prioritylangs": "Olulisemate keelte koodide komaga eraldatud loetelu:",
+ "tpt-select-prioritylangs-force": "Enneta tõlkimist teistesse keeltesse peale olulisemate keelte",
+ "tpt-select-prioritylangs-reason": "Põhjus:",
+ "tpt-sections-prioritylangs": "Olulisemad keeled",
+ "tpt-rev-mark": "märgi tõlkimiseks",
+ "tpt-rev-unmark": "eemalda tõlkimisest",
+ "tpt-rev-discourage": "hoidu uutest tõlgetest",
+ "tpt-rev-encourage": "ennista",
+ "tpt-rev-mark-tooltip": "Märgi selle lehekülje viimane versioon tõlkimiseks.",
+ "tpt-rev-unmark-tooltip": "Eemalda see lehekülg tõlkimisest.",
+ "tpt-rev-discourage-tooltip": "Olgu selle lehekülje edasine tõlkimine soovimatu",
+ "tpt-rev-encourage-tooltip": "Ennista see lehekülg harilikuks tõlkimiseks",
+ "translate-tag-translate-link-desc": "Tõlgi see leht",
+ "translate-tag-markthisagain": "Seda lehekülge on <span class=\"plainlinks\">[$1 muudetud]</span> pärast seda, kui see viimati <span class=\"plainlinks\">[$2 tõlkimiseks märgiti]</span>.",
+ "translate-tag-hasnew": "See lehekülg sisaldab <span class=\"plainlinks\">[$1 muudatusi]</span>, mida pole märgitud tõlkimiseks.",
+ "tpt-translation-intro": "See on lehekülje [[$2]] <span class=\"plainlinks\">[$1 tõlgitud versioon]</span> ja tõlkest on valmis $3%.",
+ "tpt-translation-intro-fuzzy": "Iganenud tõlkeid märgitakse nii.",
+ "tpt-languages-legend": "Teistes keeltes:",
+ "tpt-languages-zero": "Alusta sellesse keelde tõlkimist",
+ "tpt-languages-nonzero": "$1 ($2% tõlgitud)",
+ "tpt-tab-translate": "Tõlgi",
+ "tpt-target-page": "Seda lehekülge ei saa käsitsi uuendada.\nSee lehekülg on lehekülje [[$1]] tõlge ja tõlget saab uuendada [$2 tõlkeriista] abil.",
+ "tpt-unknown-page": "See nimeruum on sisulehekülgede tõlkimiseks.\nLehekülg, mida redigeerida üritad, ei paista olevat seotud ühegi tõlkimiseks märgitud leheküljega.",
+ "tpt-translation-restricted": "Tõlkeadministraator on tõkestanud selle lehekülje tõlkimise sellesse keelde.\n\nPõhjus: $1",
+ "tpt-discouraged-language-force": "<strong>Seda lehekülge ei saa tõlkida $2 keelde.</strong>\n\nTõlkeadministraator otsustas, et seda lehekülge saab tõlkida vaid järgmistesse keeltesse: $3.",
+ "tpt-priority-languages": "Tõlkeadministraator määras, et on oluline tõlkida see rühm järgmistesse keeltesse: $1.",
+ "tpt-render-summary": "Uuendatud, et vastata lähtelehekülje uuele versioonile",
+ "aggregategroups": "Ühendrühmad",
+ "tpt-aggregategroup-add": "Lisa",
+ "tpt-aggregategroup-save": "Salvesta",
+ "tpt-aggregategroup-add-new": "Lisa uus ühendrühm",
+ "tpt-aggregategroup-new-name": "Nimi:",
+ "tpt-aggregategroup-new-description": "Kirjeldus (valikuline):",
+ "tpt-aggregategroup-remove-confirm": "Kas oled kindel, et soovid selle ühendrühma kustutada?",
+ "tpt-aggregategroup-invalid-group": "Rühma pole",
+ "tpt-aggregategroup-edit-name": "Nimi:",
+ "tpt-aggregategroup-edit-description": "Kirjeldus:",
+ "pt-parse-open": "Puudub sildile &lt;translate> vastav lõpusilt.\nTõlkemall: <pre>$1</pre>",
+ "pt-parse-close": "Puudub sildile &lt;/translate> vastav algussilt.\nTõlkemall: <pre>$1</pre>",
+ "pt-parse-nested": "Pesastatud &lt;translate>-tõlkeüksused pole lubatud.\nSildi tekst: <pre>$1</pre>",
+ "pt-shake-multiple": "Ühel tõlkeüksusel on mitu tähist.\nVeendu, et tõlkeüksusi eraldavad tühjad read.\nTõlkeüksuse tekst: <pre>$1</pre>",
+ "pt-shake-position": "Tõlkeüksuse tähis on ootamatu koha peal.\nTõlkeüksuse tekst: <pre>$1</pre>",
+ "pt-shake-empty": "Tõlkeüksus tähisega \"$1\" on tühi.",
+ "log-description-pagetranslation": "Lehekülgede tõlkesüsteemiga seotud toimingute logi",
+ "log-name-pagetranslation": "Lehekülgede tõlkelogi",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|märkis}} lehekülje \"$3\" tõlkimiseks",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|eemaldas}} lehekülje \"$3\" tõlkesüsteemist",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|viis lõpule}} tõlgitava lehekülje $3 ümbernimetamise leheküljeks $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|sattus}} probleemile lehekülje $3 teisaldamisel kohta $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|viis lõpule}} tõlgitava lehekülje $3 kustutamise",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|ei saanud}} kustutada lehekülge $3, mis kuulub tõlgitava lehekülje $4 juurde",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|viis lõpule}} tõlkelehekülje $3 kustutamise",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|ei saanud}} kustutada lehekülge $3, mis kuulub tõlkelehekülje $4 juurde",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|märkis}} soovitatavaks lehekülje $3 tõlkimise",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|märkis}} ebasoovitatavaks lehekülje $3 tõlkimise",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|eemaldas}} eelisseisundis keeled tõlgitava lehekülje $3 juurest",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|määras}} eelisseisundis keelteks tõlgitava lehekülje $3 juures järgmised keeled: $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|lubas}} tõlgitava lehekülje $3 tõlkimise ainult järgmistesse keeltesse: $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|lisas}} tõlgitava lehekülje $3 ühendrühma $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|eemaldas}} tõlgitava lehekülje $3 ühendrühmast $4",
+ "log-action-filter-pagetranslation": "Toimingu tüüp:",
+ "log-action-filter-pagetranslation-mark": "Tõlkimiseks märkmine",
+ "log-action-filter-pagetranslation-unmark": "Tõlkimisest eemaldamine",
+ "log-action-filter-pagetranslation-move": "Lehekülgede teisaldamine",
+ "log-action-filter-pagetranslation-delete": "Lehekülgede kustutamine",
+ "log-action-filter-pagetranslation-encourage": "Tõlkimise soovitatavaks märkimine",
+ "log-action-filter-pagetranslation-discourage": "Tõlkimise ebasoovitatavaks märkimine",
+ "log-action-filter-pagetranslation-prioritylanguages": "Eelisseisundis keelte muutmine",
+ "log-action-filter-pagetranslation-aggregategroups": "Ühendrühmade muutmine",
+ "pt-movepage-title": "Tõlgitava lehekülje \"$1\" teisaldamine",
+ "pt-movepage-blockers": "{{PLURAL:$1|Järgmise tõrke|Järgmiste tõrgete}} tõttu ei saa tõlgitavat lehekülge uue pealkirja alla teisaldada:",
+ "pt-movepage-block-base-invalid": "Sihtkohaks määratud tõlgitava lehekülje pealkiri ei sobi.",
+ "pt-movepage-block-tp-invalid": "Lehekülje \"[[:$1]]\" sihtkohaks määratud tõlkelehekülje pealkiri oleks vigane (liiga pikk?).",
+ "pt-movepage-block-section-invalid": "Tõlkeüksuse sihtkohaks määratud lehekülje \"[[:$1]]\" pealkiri oleks vigane (liiga pikk?).",
+ "pt-movepage-block-subpage-invalid": "Lehekülje \"[[:$1]]\" sihtkohaks määratud alamlehekülje pealkiri oleks vigane (liiga pikk?).",
+ "pt-movepage-list-pages": "Teisaldamisele kuuluvate lehekülgede loend",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Tõlkelehekülg|Tõlkeleheküljed}}",
+ "pt-movepage-list-section": "Tõlkeüksuse {{PLURAL:$1|lehekülg|leheküljed}}",
+ "pt-movepage-list-other": "{{PLURAL:$1|Muu alamlehekülg|Muud alamleheküljed}}",
+ "pt-movepage-list-count": "Teisaldamisele kuuluvad kokku $1 {{PLURAL:$1|lehekülg|lehekülge}}, sealhulgas $2 {{PLURAL:$2|alamlehekülg|alamlehekülge}} ja $3 {{PLURAL:$3|arutelulehekülg|arutelulehekülge}}.",
+ "pt-movepage-legend": "Tõlgitava lehekülje teisaldamine",
+ "pt-movepage-current": "Praegune nimi:",
+ "pt-movepage-new": "Uus nimi:",
+ "pt-movepage-reason": "Põhjus:",
+ "pt-movepage-subpages": "Teisalda kõik alamleheküljed",
+ "pt-movepage-action-check": "Kontrolli, kas teisaldamine on võimalik",
+ "pt-movepage-action-perform": "Teisalda",
+ "pt-movepage-action-other": "Muuda sihtkohta",
+ "pt-movepage-intro": "See erilehekülg võimaldab teisaldada lehekülgi, mis on märgitud tõlkimiseks.\nToiming pole kohene, sest teisaldada tuleb palju lehekülgi.\nTeisaldamise ajal pole võimalik kõnealustel lehekülgedel midagi teha.\nNurjumised logitakse [[$1|lehekülgede tõlkelogisse]] ja need tuleb käsitsi parandada.",
+ "pt-movepage-logreason": "Osa tõlgitavast leheküljest \"$1\"",
+ "pt-movepage-started": "Palun kontrolli natukese aja pärast, kas [[$1|lehekülgede tõlkelogis]] on tõrkeid ja teade lõpulejõudmise kohta.",
+ "pt-locked-page": "See lehekülg on lukus, sest tõlgitavat lehekülge teisaldatakse parasjagu.",
+ "pt-deletepage-lang-title": "Tõlkelehekülje \"$1\" kustutamine",
+ "pt-deletepage-tp-title": "Tõlgitava lehekülje \"$1\" kustutamine",
+ "pt-deletepage-invalid-title": "Määratud lehekülg pole sobiv.",
+ "pt-deletepage-invalid-text": "Määratud lehekülg pole tõlgitav lehekülg ega tõlkelehekülg.",
+ "pt-deletepage-action-check": "Loetle kustutamisele kuuluvad leheküljed",
+ "pt-deletepage-action-perform": "Kustuta",
+ "pt-deletepage-action-other": "Muuda sihtlehekülge",
+ "pt-deletepage-lang-legend": "Tõlkelehekülje kustutamine",
+ "pt-deletepage-tp-legend": "Tõlgitava lehekülje kustutamine",
+ "pt-deletepage-any-legend": "Tõlgitava lehekülje, sõnumikogumi või tõlkelehekülje kustutamine",
+ "pt-deletepage-current": "Lehekülje nimi:",
+ "pt-deletepage-reason": "Põhjus:",
+ "pt-deletepage-subpages": "Kustuta kõik alamleheküljed",
+ "pt-deletepage-list-pages": "Kustutamisele kuuluvate lehekülgede loend",
+ "pt-deletepage-list-translation": "Tõlkeleheküljed",
+ "pt-deletepage-list-section": "Tõlkeüksuse leheküljed",
+ "pt-deletepage-list-other": "Muud alamlehed",
+ "pt-deletepage-list-count": "Kustutamisele kuuluvad kokku $1 {{PLURAL:$1|lehekülg|lehekülge}} ja $2 {{PLURAL:$2|alamlehekülg|alamlehekülge}}.",
+ "pt-deletepage-full-logreason": "Osa tõlgitavast leheküljest \"$1\"",
+ "pt-deletepage-lang-logreason": "Osa tõlkeleheküljest \"$1\"",
+ "pt-deletepage-started": "Palun kontrolli, kas [[$1|logis]] on tõrkeid ja teade lõpulejõudmise kohta.",
+ "pt-deletepage-intro": "See erilehekülg võimaldab kustutada terve tõlgitava lehekülje, sõnumikogumi või ühe keele üksiku tõlkelehekülje.\nToiming pole kohene, sest kõik neist sõltuvad leheküljed kustutatakse samuti.\nNurjumised logitakse [[$1|vastavase logisse]] ja need tuleb käsitsi parandada.",
+ "pm-import-button-label": "Impordi",
+ "pm-savepages-button-label": "Salvesta",
+ "pm-cancel-button-label": "Loobu",
+ "pm-pagetitle-invalid": "Lehekülje siire toimib ainult tõlkelehekülgedel nagu \"Lehekülg/de\". Ette antud pealkiri pole korrektne."
+}
diff --git a/Translate/i18n/pagetranslation/eu.json b/Translate/i18n/pagetranslation/eu.json
new file mode 100644
index 00000000..71e542ee
--- /dev/null
+++ b/Translate/i18n/pagetranslation/eu.json
@@ -0,0 +1,46 @@
+{
+ "@metadata": {
+ "authors": [
+ "An13sa",
+ "Kobazulo",
+ "Subi",
+ "පසිඳු කාවින්ද"
+ ]
+ },
+ "pagetranslation": "Orrialdearen itzulpena",
+ "tpt-section-new": "Itzulpen unitate berria.\nIzena: $1",
+ "tpt-section-deleted": "$1 itzulpen unitatea",
+ "tpt-diff-old": "Aurreko testua",
+ "tpt-diff-new": "Testu berria",
+ "tpt-edit-failed": "Ezin izan da orrialdea eguneratu: $1",
+ "tpt-select-prioritylangs-reason": "Arrazoia:",
+ "tpt-sections-prioritylangs": "Lehentasunezko hizkuntzak",
+ "tpt-rev-encourage": "Leheneratu",
+ "translate-tag-translate-link-desc": "Itzuli orri hau",
+ "tpt-languages-legend": "Beste hizkuntzak:",
+ "tpt-languages-nonzero": "$1 (%$2 itzulita)",
+ "tpt-tab-translate": "Itzuli",
+ "tpt-aggregategroup-add": "Gehitu",
+ "tpt-aggregategroup-save": "Gorde",
+ "tpt-aggregategroup-new-name": "Izena:",
+ "tpt-aggregategroup-new-description": "Deskribapena (aukerakoa):",
+ "tpt-aggregategroup-invalid-group": "Taldea ez da existitzen",
+ "tpt-aggregategroup-edit-name": "Izena:",
+ "tpt-aggregategroup-edit-description": "Deskribapena:",
+ "tpt-aggregategroup-update": "Gorde",
+ "tpt-aggregategroup-update-cancel": "Utzi",
+ "tpt-invalid-group": "Talde baliogabea",
+ "pt-movepage-list-translation": "Itzulpen {{PLURAL:$1|orrialdea|orrialdeak}}",
+ "pt-movepage-list-other": "Bestelako azpi{{PLURAL:$1|orrialdea|orrialdeak}}",
+ "pt-movepage-current": "Oraingo izena:",
+ "pt-movepage-new": "Izen berria:",
+ "pt-movepage-reason": "Arrazoia:",
+ "pt-movepage-subpages": "Azpiorrialde guztiak mugitu",
+ "pt-deletepage-current": "Orriaren izena:",
+ "pt-deletepage-reason": "Arrazoia:",
+ "pm-import-button-label": "Inportatu",
+ "pm-savepages-button-label": "Gorde",
+ "pm-cancel-button-label": "Utzi",
+ "pm-page-does-not-exist": "$1 ez da existitzen.",
+ "pp-save-button-label": "Argitaratu"
+}
diff --git a/Translate/i18n/pagetranslation/fa.json b/Translate/i18n/pagetranslation/fa.json
new file mode 100644
index 00000000..702ce0a5
--- /dev/null
+++ b/Translate/i18n/pagetranslation/fa.json
@@ -0,0 +1,275 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alirezaaa",
+ "Arian Ar",
+ "Armin1392",
+ "Beginneruser",
+ "Dalba",
+ "Ebraminio",
+ "FarsiNevis",
+ "Hosseinblue",
+ "Huji",
+ "Jeeputer",
+ "Ladsgroup",
+ "Mjbmr",
+ "Omid.koli",
+ "Pols12",
+ "Reza1615",
+ "ZxxZxxZ",
+ "پاناروما"
+ ]
+ },
+ "pagetranslation": "ترجمهٔ صفحه",
+ "right-pagetranslation": "علامت‌گذاری نسخه‌های صفحه برای ترجمه",
+ "action-pagetranslation": "مدیریت صفحه‌های قابل‌ترجمه",
+ "tps-edit-sourcepage-text": "شما در حال ویرایش صفحه ترجمه هستید. لطفاً مطمئن باشید که شما با مستندات زیر آشنا هستید:\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text تغییردادن متن مبدأ]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Markup_examples مثال علامت‌گذاری برای استفاده]",
+ "tps-edit-sourcepage-ve-warning-limited-text": "بعضی قسمت‌های قابل‌ترجمه ممکن است در این ویرایشگر غیرقابل‌ویرایش باشد. لطفاً ویرایشگر مبدأ برای ویرایش آنها استفاده کنید.",
+ "tps-edit-sourcepage-ve-warning-title": "هشدار: صفحه ویرایشگر دیداری را پشتیبانی نمی‌کند",
+ "tps-edit-sourcepage-ve-warning-text": "شما در حال ویرایش صفحهٔ قابل‌ترجمه هستید. ویرایش‌کردن آنها در این ویرایشگر هنوز به طور رسمی پشتیبانی نمی‌شود. لطفاً ویرایشگر مبدأ را استفاده کنید.",
+ "tps-edit-sourcepage-ve-warning-button": "تأیید",
+ "tpt-section": "واحد ترجمهٔ $1",
+ "tpt-section-new": "واحد ترجمهٔ تازه.\nنام: $1",
+ "tpt-section-deleted": "واحد ترجمهٔ $1",
+ "tpt-diff-old": "متن قبلی",
+ "tpt-diff-new": "متن تازه",
+ "tpt-submit": "علامت‌گذاری این نسخه برای ترجمه",
+ "tpt-sections-oldnew": "واحدهای ترجمهٔ تازه و موجود",
+ "tpt-sections-deleted": "واحدهای ترجمه حذف‌شده",
+ "tpt-sections-template": "الگوی ترجمهٔ صفحه",
+ "tpt-action-nofuzzy": "عدم ابطال ترجمه‌ها",
+ "tpt-badtitle": "نام صفحهٔ داده‌شده ($1) یک عنوان معتبر نیست",
+ "tpt-nosuchpage": "صفحهٔ $1 وجود ندارد",
+ "tpt-oldrevision": "$2 آخرین نسخهٔ صفحهٔ [[:$1]] نیست.\nفقط آخرین نسخه‌ها را می‌توان برای ترجمه علامت‌گذاری کرد.",
+ "tpt-notsuitable": "صفحهٔ $1 برای ترجمه مناسب نیست.\nمطمئن شوید این صفحه برچسب‌های $2 و نحوی معتبر دارد.",
+ "tpt-saveok": "صفحهٔ [[:$1]] برای ترجمه با $2 {{PLURAL:$2|واحد ترجمه}} علامت‌گذاری شد.\nصفحه را می‌توان الان <span class=\"plainlinks\">[$3 ترجمه کرد]</span>.",
+ "tpt-saveok-first": "شما می‌توانید برای این صفحه [[Special:PageMigration|ترجمه از قبل موجود را درون‌ریزی کنید]] (اگر چیزی باشد).",
+ "tpt-offer-notify": "شما می‌توانید دربارهٔ این صفحه <span class=\"plainlinks\">[$1 مترجمان آگاه کنید]</span>.",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|نمایش فهرست صفحه‌های قابل‌ترجمه.]]",
+ "tpt-showpage-intro": "در زیر، واحدهای ترجمه جدید، موجود و حذف شده فهرست شده‌اند.\nقبل از علامت‌گذاری‌کردن این نسخه برای ترجمه، بررسی کنید که تغییرات مربوط به واحدهای ترجمه برای جلوگیری از کار غیرضروری برای مترجمان، به حداقل رسیده باشد.",
+ "tpt-mark-summary": "نشانه‌گذاری این نسخه برای ترجمه",
+ "tpt-mark-nochanges": "هیچ تغییری برای بازبینی وجود ندارد. علامت‌گذاری‌کردن این صفحه برای ترجمه باعث ویرایش صفحه یا هیچ واحد ترجمه موجودی نخواهد شد.",
+ "tpt-edit-failed": "نمی‌تواند صفحه را به‌روزرسانی کند: $1",
+ "tpt-duplicate": "نام واحد ترجمهٔ $1 بیشتر از یک بار استفاده شده‌است.",
+ "tpt-invalid": "نام واحد ترجمه $1 نباید شامل زیرخط و خط مورب باشد.",
+ "tpt-unmarked": "صفحهٔ [[:$1]] بیشتر از این برای ترجمهٔ علامت‌گذاری نمی‌شود.",
+ "tpt-list-nopages": "هیچ صفحه‌ای برای ترجمه علامت‌گذاری نشده یا آماده علامت‌گذاری کردن برای ترجمه نیست.",
+ "tpt-new-pages-title": "صفحه‌های پیشنهاد شده برای ترجمه",
+ "tpt-old-pages-title": "صفحه‌های در حال ترجمه",
+ "tpt-other-pages-title": "صفحه‌های خراب",
+ "tpt-outdated-pages-title": "صفحه‌های دارای تغییرات در حال انتظار",
+ "tpt-new-pages": "{{PLURAL:$1|این صفحه شامل|این صفحه‌ها شامل}} متن دارای برچسب‌های ترجمه {{PLURAL:$1|است|هستند}}،\nاما هیچ نسخه‌ای از {{PLURAL:$1|این صفحه|این صفحه‌ها}} هم‌اکنون برای ترجمه علامت‌گذاری {{PLURAL:$1|نشده است|نشدند}}",
+ "tpt-old-pages": "آخرین نسخهٔ {{PLURAL:$1|این صفحه|این صفحه‌ها}} برای ترجمه نشانه‌گذاری {{PLURAL:$1|دارد|دارند}}.",
+ "tpt-other-pages": "{{PLURAL:$1|یک نسخهٔ قدیمی این صفحه|نسخه‌های قدیمی‌تر این صفحه‌ها}} برای ترجمه علامت‌گذاری {{PLURAL:$1|شده‌است|شده‌اند}}،\nاما آخرین {{PLURAL:$1|نسخه نمی‌تواند|نسخه‌ها نمی‌توانند}} برای ترجمه علامت‌گذاری {{PLURAL:$1|شود|شوند}}.",
+ "tpt-outdated-pages": "{{PLURAL:$1|این صفحه|این صفحه‌ها}} تغییراتی {{PLURAL:$1|دارد|دارند}} که برای ترجمه علامت‌گذاری نشده است.",
+ "tpt-tag-discouraged": "بازداشته شده است.",
+ "tpt-tag-oldsyntax": "نحو قدیمی",
+ "tpt-tag-no-transclusion-support": "تراگنجانش پشتیبانی نمی‌شود",
+ "tpt-select-prioritylangs": "فهرستی از کدهای زبانی اولویت‌دار با کاما جدا می‌شوند:",
+ "tpt-select-prioritylangs-force": "جلوگیری از ترجمه به زبان‌هایی غیر از زبان‌های اولویت‌دار",
+ "tpt-select-prioritylangs-reason": "دلیل:",
+ "tpt-sections-prioritylangs": "زبان‌های اولویت‌دار",
+ "tpt-sections-syntaxversion": "نسخهٔ نحو",
+ "tpt-syntaxversion-text": "این صفحه در حال حاضر از یک نسخهٔ قدیمی نحو مبدأ صفحهٔ قابل‌ترجمه استفاده می‌کند. نسخهٔ جدید بخش‌های ترجمه‌نشده را با یک برچسب HTML برای نشان‌دادن زبان صحیح متن پوشش خواهد داد. مثال: $1. شما می‌توانید یک نحو علامت‌گذاری جدید $2 استفاده کنید تا از هر نوع پوشش‌دهی در جاهایی که نحو قدیمی قابل تخصیص نیست جلوگیری شود، مثلاً هنگام ترجمهٔ مشخصه <code>title</code> از یک عنصر HTML. برگرد به یک نسخهٔ نحو قدیمی امکان ندارد.",
+ "tpt-syntaxversion-label": "آخرین نسخهٔ نحو استفاده‌شده برای این صفحه",
+ "tpt-transclusion": "تراگنجانش الگو",
+ "tpt-transclusion-label": "فعال‌سازی ترجمه، مراقب تراگنجانش برای این صفحه باشید",
+ "tpt-rev-mark": "علامت‌گذاری برای ترجمه",
+ "tpt-rev-unmark": "حذف از ترجمه",
+ "tpt-rev-discourage": "بازداشتن",
+ "tpt-rev-encourage": "بازیابی",
+ "tpt-rev-mark-tooltip": "علامت‌گذاری آخرین نسخهٔ این صفحه برای ترجمه.",
+ "tpt-rev-unmark-tooltip": "حذف این صفحه از ترجمه.",
+ "tpt-rev-discourage-tooltip": "بازاشتن از ترجمه‌های بیشتر در این صفحه.",
+ "tpt-rev-encourage-tooltip": "بازیابی این صفحه به ترجمهٔ معمولی.",
+ "translate-tag-translate-link-desc": "ترجمهٔ این صفحه",
+ "translate-tag-markthis": "علامت‌گذاری این صفحه برای ترجمه",
+ "translate-tag-markthisagain": "این صفحه از آخرین باری که <span class=\"plainlinks\">[$2 برای ترجمه علامت‌گذاری]</span> شده بود <span class=\"plainlinks\">[$1 تغییراتی]</span> داشته است.",
+ "translate-tag-hasnew": "این صفحه شامل <span class=\"plainlinks\">[$1 تغییراتی]</span> است که برای ترجمه نشانه‌گذاری نشده‌اند.",
+ "tpt-translation-intro": "این صفحه <span class=\"plainlinks\">[$1 نسخهٔ ترجمه‌شدهٔ]</span> صفحهٔ [[$2]] است و ترجمهٔ آن ٪$3 کامل شده‌است.",
+ "tpt-translation-intro-fuzzy": "ترجمه‌های تاریخ‌گذشته شبیه این علامت‌گذاری می‌شوند.",
+ "tpt-languages-legend": "زبان‌های دیگر:",
+ "tpt-languages-zero": "شروع ترجمه برای این زبان",
+ "tpt-languages-nonzero": "$1 ($2٪ ترجمه‌شده)",
+ "tpt-tab-translate": "ترجمه",
+ "tpt-target-page": "این صفحه نمی‌تواند به طور دستی به‌روز شود.\nاین صفحه یک ترجمه از صفحهٔ [[$1]] است و ترجمه را می‌توان با استفادهٔ [$2 ابزار ترجمه] به‌روز کرد.",
+ "tpt-unknown-page": "این فضای نام برای محتوای ترجمه‌های صفحه رزرو شده است.\nصفحه‌ای که شما در تلاش برای ویرایش آن هستید، به نظر نمی‌رسد با هیچ صفحهٔ علامت‌گذاری شده برای ترجمه متناظر باشد.",
+ "tpt-translation-restricted": "ترجمه‌کردن این صفحه به این زبان توسط یک مدیر ترجمه جلوگیری شده است.\n\nدلیل: $1",
+ "tpt-translation-restricted-no-reason": "ترجمهٔ این صفحه به این زبان توسط یک مدیر ترجمه جلوگیری شده است.",
+ "tpt-discouraged-language-force-header": "این صفحه را نمی‌توان به $1 ترجمه کرد.",
+ "tpt-discouraged-language-force-content": "یک مدیر ترجمه تصمیم گرفته است که این صفحه را فقط بتوان به $1 ترجمه کرد.",
+ "tpt-discouraged-language-header": "ترجمه‌کردن به $1 برای این صفحه اولویتی ندارد.",
+ "tpt-discouraged-language-content": "یک مدیر ترجمه تصمیم گرفته است که تلاش‌های ترجمه را به $1 متمرکز کند.",
+ "tpt-discouraged-language-force": "<strong> این صفحه نمی‌تواند به $2 ترجمه شود.</strong>\n\nمدیر ترجمه تصمیم گرفته است که این صفحه را فقط بتوان به $3 ترجمه کرد.",
+ "tpt-priority-languages": "یک مدیر ترجمه زبان‌های اولویت‌دار را برای این گروه به $1 تنظیم کرده‌ است.",
+ "tpt-priority-languages-force": "یک مدیر ترجمه زبان‌های اولیت‌دار برای این گروه به $1 تنظیم کرده است. ترجمه‌کردن به زبان‌های دیگر مجاز نیست.",
+ "tpt-discouraged-translation-header": "ترجمه این صفحه بازداشته شده است",
+ "tpt-discouraged-translation-content": "یک مدیر ترجمه‌کردن این صفحه را بازداشته است. شما هنوز می توانید صفحه را ترجمه کنید اما ترجمه‌ها ممکن است مفید نباشد.",
+ "tpt-render-summary": "درحال روزآمدسازی برای تطبیق نسخهٔ جدید صفحهٔ اصلی",
+ "aggregategroups": "گروه‌های انبوه",
+ "tpt-aggregategroup-add": "افزودن",
+ "tpt-aggregategroup-save": "ذخیره",
+ "tpt-aggregategroup-close": "بستن",
+ "tpt-aggregategroup-add-new": "افزودن یک گروه انبوه جدید",
+ "tpt-aggregategroup-new-name": "نام:",
+ "tpt-aggregategroup-new-description": "توضیحات (اختیاری):",
+ "tpt-aggregategroup-remove-confirm": "آیا شما مطمئن هستید که می‌خواهید این گروه انبوه را حذف کنید؟",
+ "tpt-aggregategroup-invalid-group": "گروه وجود ندارد",
+ "tpt-aggregategroup-edit-name": "نام:",
+ "tpt-aggregategroup-edit-description": "توضیحات:",
+ "tpt-aggregategroup-update": "ذخیره",
+ "tpt-aggregategroup-update-cancel": "لغو",
+ "tpt-aggregategroup-expand-all-groups": "گسترش همهٔ گروه‌ها",
+ "tpt-aggregategroup-collapse-all-groups": "نهفتن همهٔ گروه‌ها",
+ "tpt-aggregategroup-expand-group": "گسترش گروه",
+ "tpt-aggregategroup-collapse-group": "نهفتن گروه",
+ "tpt-invalid-group": "گروه نامعتبر",
+ "pt-parse-open": "برچسب &lt;translate> نامتعادل.\nالگوی ترجمه: <pre>$1</pre>",
+ "pt-parse-close": "برچسب &lt;/translate> نامتعادل\nالگو ترجمه: <pre>$1</pre>",
+ "pt-parse-nested": "واحدهای ترجمهٔ &lt;translate> تودرتو مجاز نیست.\nبرچسب متن: <pre>$1</pre>",
+ "pt-shake-multiple": "چندین علامت‌گذار واحد ترجمه برای یک واحد ترجمه.\nمطمئن باشید که واحدهای ترجمه با خط‌های خالی جدا شده باشند.\nمتن واحد ترجمه: <pre>$1</pre>",
+ "pt-shake-position": "نشانگرهای واحد ترجمه در موقعیت غیرمنتظره.\nمتن واحد ترجمه: <pre>$1</pre>",
+ "pt-shake-empty": "واحد ترجمه خالی برای علامت‌گذار «$1».",
+ "log-description-pagetranslation": "سیاهه برای کنش‌های مرتبط با سامانهٔ ترجمهٔ صفحه",
+ "log-name-pagetranslation": "سیاههٔ ترجمهٔ صفحه",
+ "logentry-pagetranslation-mark": "$1 $3 را برای ترجمه {{GENDER:$2|علامت‌گذاری کرد}}",
+ "logentry-pagetranslation-unmark": "$1 $3 را از سامانۀ ترجمه {{GENDER:$2|حذف کرد}}",
+ "logentry-pagetranslation-moveok": "$1 تغییرنام دادن صفحهٔ قابل‌ترجمه از $3 به $4 را {{GENDER:$2|کامل کرد}}",
+ "logentry-pagetranslation-movenok": "$1 هنگام انتقال صفحه $3 به $4 به مشکل {{GENDER:$2|برخورد}}",
+ "logentry-pagetranslation-deletefok": "$1 حذف صفحهٔ قابل‌ترجمه $3 را {{GENDER:$2|کامل کرد}}",
+ "logentry-pagetranslation-deletefnok": "$1 در حذف $3 که به صفحهٔ قابل‌ترجمهٔ $4 متعلق است {{GENDER:$2|شکست خورد}}",
+ "logentry-pagetranslation-deletelok": "$1 حذف صفحهٔ ترجمهٔ $3 را {{GENDER:$2|کامل کرد}}",
+ "logentry-pagetranslation-deletelnok": "$1 در حذف $3 که متعلق به صفحهٔ ترجمهٔ $4 است {{GENDER:$2|شکست خورد}}",
+ "logentry-pagetranslation-encourage": "$1 ترجمهٔ $3 را {{GENDER:$2|تشویق کرد}}",
+ "logentry-pagetranslation-discourage": "$1 ترجمه $3 را {{GENDER:$2|بازداشت}}",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 زبان‌های اولویت‌دار را از صفحهٔ قابل‌ترجمهٔ $3 {{GENDER:$2|حذف کرد}}",
+ "logentry-pagetranslation-prioritylanguages": "$1 زبان‌های اولویت‌دار را برای صفحهٔ قابل‌ترجمهٔ $3 به $5 {{GENDER:$2|تنظیم کرد}}",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 زبان‌ها را برای صفحهٔ قابل‌ترجمهٔ $3 به $5 {{GENDER:$2|محدود کرد}}",
+ "logentry-pagetranslation-associate": "$1 صفحهٔ قابل‌ترجمهٔ $3 را به گروه انبوه $4 {{GENDER:$2|افزود}}",
+ "logentry-pagetranslation-dissociate": "$1 صفحهٔ قابل‌ترجمهٔ $3 را از گروه انبوه $4 {{GENDER:$2|حذف کرد}}",
+ "log-action-filter-pagetranslation": "نوع کنش:",
+ "log-action-filter-pagetranslation-mark": "علامت‌گذاری برای ترجمه",
+ "log-action-filter-pagetranslation-unmark": "حذف از ترجمه",
+ "log-action-filter-pagetranslation-move": "صفحه انتقال یافت",
+ "log-action-filter-pagetranslation-delete": "صفحه حذف شد",
+ "log-action-filter-pagetranslation-encourage": "تشویق به ترجمه",
+ "log-action-filter-pagetranslation-discourage": "بازداشتن از ترجمه",
+ "log-action-filter-pagetranslation-prioritylanguages": "اصلاح زبان‌های اولویت‌دار",
+ "log-action-filter-pagetranslation-aggregategroups": "اصلاح گروه‌های انبوه",
+ "log-description-messagebundle": "سیاهه برای کنش‌های مربوط به سامانهٔ بستهٔ پیام",
+ "log-name-messagebundle": "سیاههٔ بستهٔ پیام",
+ "logentry-messagebundle-moveok": "$1 تغییرنام بستهٔ پیام $3 به $4 {{GENDER:$2|به انجام رساند}}",
+ "logentry-messagebundle-movenok": "$1 با مشکلی هنگام انتقال بستهٔ پیام $3 به $4 {{GENDER:$2|مواجه شد}}",
+ "logentry-messagebundle-deletefok": "$1 حذف بستهٔ پیام $3 را {{GENDER:$2|انجام داد}}",
+ "logentry-messagebundle-deletefnok": "$1 برای حذف $3 که متعلق به بستهٔ پیام $4 {{GENDER:$2|شکست خورد}}",
+ "log-action-filter-messagebundle": "نوع کنش:",
+ "pt-movepage-title": "انتقال صفحهٔ قابل‌ترجمهٔ «$1»",
+ "pt-movepage-blockers": "صفحهٔ قابل‌ترجمه نمی‌تواند به دلیل {{PLURAL:$1|خطا|خطاهای}} زیر به یک نام جدید انتقال یابدː",
+ "pt-movepage-block-base-invalid": "نام صفحهٔ قابل‌ترجمهٔ هدف یک عنوان معتبر نیست.",
+ "pt-movepage-block-tp-invalid": "عنوان صفحهٔ ترجمهٔ هدف برای «[[:$1]]» نامعتبر می‌باشد (خیلی طولانی است؟).",
+ "pt-movepage-block-section-invalid": "عنوان صفحهٔ هدف برای «[[:$1]]» برای واحد ترجمه معتبر نمی‌باشد (خیلی طولانی است؟).",
+ "pt-movepage-block-subpage-invalid": "عنوان زیرصفحۀ موردنظر برای «[[:$1]]» معتبر نخواهد بود (بیش از حد طولانی؟).",
+ "pt-movepage-block-talkpage-invalid": "عنوان صفحهٔ بحث هدف برای \"[[:$1]]\" نامعتبر می‌باشد (خیلی طولانی است؟).",
+ "pt-movepage-block-unknown-page": "صفحهٔ ([[:$1]]) دارد منتقل می‌شود، ظاهر نمی‌شود، تا بخشی از صفحهٔ قابل‌ترجمه شود.",
+ "pt-movepage-block-ns-talk-unsupported": "صفحهٔ ([[:$1]]) در حال انتقال به فضای نامی می‌باشد که صفحه‌های بحث را پشتیبانی نمی‌کند.",
+ "pt-movepage-block-rename-failed": "هنگام تولید‌کردن یک عنوان جدید برای صفحهٔ [[:$1]] خطایی وجود داشت",
+ "pt-movepage-list-pages": "فهرست صفحه‌ها برای انتقال",
+ "pt-movepage-list-translation": "{{PLURAL:$1|صفحهٔ|صفحه‌های}} ترجمه",
+ "pt-movepage-list-section": "{{PLURAL:$1|صفحهٔ|صفحه‌های}} واحد ترجمه",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|زیرصفحه|زیرصفحه‌ها}} برای ترجمه علامت‌گذاری شده است",
+ "pt-movepage-list-translatable-note": "این صفحه‌ها باید به صورت جداگانه انتقال داده شود.",
+ "pt-movepage-list-other": "{{PLURAL:$1|زیرصفحه|زیرصفحه‌}} دیگر",
+ "pt-movepage-list-count": "در کل $1 {{PLURAL:$1|صفحه}} شامل $2 {{PLURAL:$2|زیرصفحه}} و $3 {{PLURAL:$3|صفحهٔ بحث}} جهت انتقال است.",
+ "pt-movepage-page-count-limit": "این صفحه قابل‌ترجمه شامل $1 {{PLURAL:$1|صفحه}} بالا است. انتقال تعداد زیاد صفحه‌ها سبب غیرقابل‌اعتمادی می‌شود. لطفاً با مدیر سامانه برای انجام این کار از طریق اسکریپت نگهداری تماس بگیرید.",
+ "pt-movepage-list-no-pages": "هیچ صفحه‌ای پیدا نشد.",
+ "pt-movepage-legend": "انتقال صفحهٔ قابل‌ترجمه",
+ "pt-movepage-messagebundle-legend": "انتقال بستهٔ پیام",
+ "pt-movepage-current": "نام کنونی:",
+ "pt-movepage-new": "نام تازه:",
+ "pt-movepage-reason": "دلیل:",
+ "pt-movepage-subpages": "انتقال همهٔ زیرصفحه‌ها",
+ "pt-movepage-talkpages": "انتقال صفحه‌های بحث",
+ "pt-movepage-talkpage-exists": "(صفحهٔ بحث دارد)",
+ "pt-movepage-action-check": "بررسی کن که انتقال ممکن است",
+ "pt-movepage-action-perform": "انتقال بده",
+ "pt-movepage-action-other": "تغییر هدف",
+ "pt-movepage-intro": "این صفحه ویژه به شما اجازه انتقال صقحه‌هایی که برای ترجمه علامت‌گذاری شده است را می‌دهد\nکنش انتقال فوری نخواهد بود، چون صفحه‌های زیادی نیاز به انتقال خواهند داشت.\nهنگامی که صفحه دارند منتقل می‌شوند، امکان کنش‌کردن با صفحه‌ها صفحه مورد درخواست نیست.\nشکست‌ها در [[Special:Log/pagetranslation|سیاههٔ ترجمهٔ صفحه]] ثبت خواهند‌ شد و آنها نیاز دارند دستی درست شوند.",
+ "pt-movepage-logreason": "قسمتی از صفحهٔ قابل‌ترجمه «$1»",
+ "pt-movepage-started": "لطفاً گاهی [[Special:Log/pagetranslation|سیاههٔ ترجمهٔ صفحه]] را برای خطاها و تکمیل پیام بررسی کنید.",
+ "pt-locked-page": "این صفحه قفل شده‌است زیرا هم‌اکنون صفحهٔ قابل‌ترجمه دارد منتقل می‌شود",
+ "pt-deletepage-lang-title": "درحال حذف صفحهٔ ترجمهٔ «$1»",
+ "pt-deletepage-tp-title": "درحال حذف صفحهٔ قابل‌ترجمهٔ \"$1\"",
+ "pt-deletepage-invalid-title": "صفحهٔ مشخص‌شده معتبر نیست.",
+ "pt-deletepage-invalid-text": "صفحهٔ مشخص‌شده نه یک صفحهٔ قابل‌ترجمه است و نه یک صفحهٔ ترجمه.",
+ "pt-deletepage-action-check": "فهرست‌کردن صفحه‌هایی که باید حذف شوند",
+ "pt-deletepage-action-perform": "حذف کن",
+ "pt-deletepage-action-other": "تغییر هدف",
+ "pt-deletepage-lang-legend": "حذف صفحهٔ ترجمه",
+ "pt-deletepage-tp-legend": "حذف صفحهٔ قابل‌ترجمه",
+ "pt-deletepage-mb-legend": "حذف بستهٔ پیام",
+ "pt-deletepage-any-legend": "حذف صفحهٔ قابل‌ترجمه، بستهٔ پیام یا صفحهٔ ترجمه",
+ "pt-deletepage-current": "نام صفحه:",
+ "pt-deletepage-reason": "دلیل:",
+ "pt-deletepage-reason-details": "دلیل دیگر/اضافی:",
+ "pt-deletepage-reason-other": "دلیل دیگر",
+ "pt-deletepage-subpages": "حذف تمام زیرصفحه‌ها",
+ "pt-deletepage-list-pages": "فهرست صفحه‌هایی که حذف می‌شوند",
+ "pt-deletepage-list-translation": "صفحه‌های ترجمه",
+ "pt-deletepage-list-section": "صفحه‌های واحد ترجمه",
+ "pt-deletepage-list-other": "زیرصفحه‌های دیگر",
+ "pt-deletepage-list-count": "در کل $1 {{PLURAL:$1|صفحه}} و $2 {{PLURAL:$2|زیرصفحه}} حذف می‌شوند.",
+ "pt-deletepage-list-no-pages": "هیچ صفحه‌ای پیدا نشد.",
+ "pt-deletepage-full-logreason": "قسمتی از صفحهٔ قابل‌ترجمه «$1».",
+ "pt-deletepage-lang-logreason": "قسمتی از صفحهٔ ترجمه «$1»",
+ "pt-deletepage-started": "لطفاً [[$1|سیاهه]] را برای خطاها و پیام خاتمه بررسی کنید.",
+ "pt-deletepage-intro": "این صفحۀ ویژه به شما اجازه می‌دهد تمام یک صفحهٔ ترجمه، یا یک صفحهٔ ترجمهٔ منفرد را حذف کنید.\nعمل حذف فوری نخواهد‌بود زیرا تمام صفحه‌های وابسته به آن‌ها نیز باید حذف شوند.\nشکست‌ها در [[Special:Log/pagetranslation|سیاههٔ صفحهٔ ترجمه]] وارد خواهند‌شد و نیاز به تعمیر دستی خواهند داشت.",
+ "pagemigration": "مهاجرت صفحهٔ ترجمه",
+ "pagemigration-summary": "یک صفحهٔ ترجمه را مشخص کنید و هر ترجمهٔ ساخته شده قبل از اینکه سامانهٔ ترجمه فعال شده باشد را، روی آن صفحه بازیابی کنید.",
+ "pm-import-button-label": "درون‌ریزی شود",
+ "pm-savepages-button-label": "ذخیره شود",
+ "pm-cancel-button-label": "لغو شود",
+ "pm-page-does-not-exist": "$1 وجود ندارد.",
+ "pm-old-translations-missing": "$1 شامل ترجمه‌های قدیمی نیست.",
+ "pm-extra-units-warning": "واحدهای بیشتری ممکن است موجود باشند. لطفاً واحدهای منبع و ترجمه را به درستی تطبیق بدهید.",
+ "pm-pagename-missing": "لطفاً نام صفحه را وارد کنید.",
+ "pm-add-icon-hover-text": "واحدی در زیر اضافه کنید",
+ "pm-swap-icon-hover-text": "واحدی را در زیر جایگزین کنید",
+ "pm-delete-icon-hover-text": "حذف واحد",
+ "pm-pagetitle-placeholder": "نام صفحه را وارد کنید",
+ "pm-pagetitle-invalid": "لطفا یک عنوان صفحهٔ معتبر وارد کنید. عنوان باید در قالب <عنوان-صفحه>/<کد-زبان> باشد.",
+ "pm-pagetitle-missing": "لطفاً عنوان صفحه را وارد کنید.",
+ "pm-langcode-missing": "به نظر می‌رسد کد زبان در عنوان را فراموش کرده باشید. لطفاً عنوان صفحه را در قالب <عنوان-صفحه>/<کد-زبان> وارد کنید.",
+ "pm-summary-import": "ترجمه با استفاده از [[Special:PageMigration|مهاجرت صفحه]] درون‌ریزی شده است",
+ "pm-on-import-message-text": "ترجمه‌های قدیمی درون‌ریزی شدند. از گزینه‌های افزودن، جایگزینی و حذف استفاده کنید تا واحدهای ترجمه را تنظیم کنید و روی «{{int:pm-savepages-button-label}}» کلیک کنید تا ذخیره‌شان کنید. روی «{{int:pm-cancel-button-label}}» کلیک کنید تا تغییرات دور انداخته شوند.",
+ "pm-on-save-message-text": "واحدهای ترجمه ذخیره شدند. اکنون شما می‌توانید عنوان یک صفحهٔ ترجمه را برای انتقال‌اش وارد کنید، یا در واحدهای ترجمهٔ زیر تغییراتی ایجاد کنید و نسخهٔ جدیدی را ذخیره کنید.",
+ "pm-pagetitle-not-translatable": "$1 بخشی از یک صفحهٔ قابل‌ترجمه نیست.",
+ "pm-translation-unit-fetch-failed": "خطایی هنگام واکشی‌کردن واحدهای ترجمه برای صفحه وجود داشت",
+ "tpt-translate-title": "اجازهٔ ترجمهٔ عنوان صفحه را بدهید",
+ "pp-save-summary": "صفحه را برای ترجمه آماده کرد",
+ "pagepreparation": "صفحه را برای ترجمه آماده کنید",
+ "pagepreparation-summary": "عنوان صفحه‌ای را مشخص کنید تا برای ترجمه آماده شود",
+ "pp-pagename-placeholder": "نام صفحه را وارد کنید",
+ "pp-prepare-button-label": "آماده‌سازی",
+ "pp-save-button-label": "انتشار",
+ "pp-cancel-button-label": "لغو",
+ "pp-save-message": "صفحه منتشر شد. شما می‌توانید آن را [$1 ویرایش کنید].",
+ "pp-prepare-message": "صفحه برای ترجمه آماده شد. تفاوت زیر را ببینید. اگر همه چیز درست است روی دکمهٔ «{{int:pp-save-button-label}}» در زیر کلیک کنید!",
+ "pp-already-prepared-message": "به نظر می‌رسد صفحه پیش از این برای ترجمه آماده شده باشد. هیچ تغییری نسبت به نسخهٔ قبلی وجود ندارد.",
+ "pp-diff-error": "خطایی هنگام واکشی‌کردن تفاوت از سرور وجود داشت",
+ "pp-pagename-missing": "لطفاً نام صفحه را وارد کنید.",
+ "pp-diff-old-header": "متن منبع",
+ "pp-diff-new-header": "متن آماده‌شده",
+ "tpt-unlink-confirm": "لطفاً تایید کنید که واقعاً می‌خواهید این صفحه را از سامانهٔ ترجمه حذف کنید.\nانتخابگر زبان و صفحه‌های ترجمه شده از کار خواهند افتاد.\nصفحه‌های ترجمه قابل ویرایش خواهند شد.",
+ "tpt-unlink-button": "حذف از ترجمه",
+ "tpt-unlink-summary": "حذف صفحه از ترجمه",
+ "tpt-generic-confirm": "لطفا این اقدام را تایید کنید.",
+ "tpt-generic-button": "تأیید",
+ "tpt-validation-not-insertable": "نام متغییر ترجمه \"$1\" به صورت یک قابل‌درج در رابط کاربری ترجمه کار نمی‌کند. از استفادهٔ نویسه‌های ویژه پرهیز کنید.",
+ "tpt-validation-name-reuse": "متغییر ترجمهٔ \"$1\" چندین بار با محتوای متفاوت تعریف شده است. نام‌های متغییر را به مقدار منحصر به فرد در واحد ترجمه تغییر دهید.",
+ "visualeditor-annotations-translate-start": "ابتدای محتوا برای اینکه ترجمه شود",
+ "visualeditor-annotations-translate-end": "انتهای محتوا برای اینکه ترجمه شود",
+ "visualeditor-annotations-translate-description": "این بازه به‌عنوان بازهٔ قابل‌ترجمه علامت‌گذاری شده است. لطفاً مطمئن باشید که شما رهنمودهای تعیین شدهٔ [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text تغییر متن مبدأ] را دنبال می‌کنید.",
+ "visualeditor-annotations-tvar-start": "ابتدای محتوای غیرقابل‌ترجمه",
+ "visualeditor-annotations-tvar-end": "انتهای محتوای غیرقابل‌ترجمه",
+ "visualeditor-annotations-tvar-description": "این محدوده به صورت بازهٔ غیرقابل‌ترجمه علامت‌گذاری شده است. لطفاً برای اطلاعات بیشتر به [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Segmentation قطعه‌بندی متن مبدأ] مراجعه کنید."
+}
diff --git a/Translate/i18n/pagetranslation/ff.json b/Translate/i18n/pagetranslation/ff.json
new file mode 100644
index 00000000..4029c401
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ff.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ibrahima",
+ "Ibrahima Malal Sarr"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% firaama)"
+}
diff --git a/Translate/i18n/pagetranslation/fi.json b/Translate/i18n/pagetranslation/fi.json
new file mode 100644
index 00000000..56e36236
--- /dev/null
+++ b/Translate/i18n/pagetranslation/fi.json
@@ -0,0 +1,226 @@
+{
+ "@metadata": {
+ "authors": [
+ "Beluga",
+ "Cimon Avaro",
+ "Crt",
+ "Lliehu",
+ "MITO",
+ "Nedergard",
+ "Nike",
+ "Olli",
+ "Pxos",
+ "Pyscowicz",
+ "Rönttönen",
+ "Silvonen",
+ "Valtlait",
+ "VezonThunder",
+ "ZeiP"
+ ]
+ },
+ "pagetranslation": "Sivujen kääntäminen",
+ "right-pagetranslation": "Merkitä sivuja käännettäviksi",
+ "action-pagetranslation": "hallita käännettäviä sivuja",
+ "tps-edit-sourcepage-ve-warning-button": "OK",
+ "tpt-section": "Käännösosio $1",
+ "tpt-section-new": "Uusi käännösosio.\nNimi: $1",
+ "tpt-section-deleted": "Käännösosio $1",
+ "tpt-diff-old": "Aikaisempi teksti",
+ "tpt-diff-new": "Uusi teksti",
+ "tpt-submit": "Merkitse tämä versio käännettäväksi",
+ "tpt-sections-oldnew": "Uudet ja olemassa olevat käännösosiot",
+ "tpt-sections-deleted": "Poistetut käännösosiot",
+ "tpt-sections-template": "Käännössivun mallipohja",
+ "tpt-action-nofuzzy": "Älä merkitse käännöksiä vanhentuneiksi",
+ "tpt-badtitle": "Sivun nimi ($1) ei ole kelvollinen otsikko",
+ "tpt-nosuchpage": "Sivua $1 ei ole olemassa",
+ "tpt-oldrevision": "$2 ei ole uusin versio sivusta [[:$1]].\nAinoastaan uusin versio voidaan merkitä käännettäviksi.",
+ "tpt-notsuitable": "Sivu $1 ei sovellu käännettäväksi.\nVarmista, että sivu sisältää $2-merkinnät ja että siinä ei ole ole syntaksivirheitä.",
+ "tpt-saveok": "Sivu [[:$1]] on merkitty käännettäväksi ja se sisältää $2 {{PLURAL:$2|käännösosion|käännösosiota}}.\nSivu voidaan nyt <span class=\"plainlinks\">[$3 kääntää]</span>.",
+ "tpt-saveok-first": "Voit [[Special:PageMigration|tuoda tämän sivun entiset käännökset]] (jos niitä on).",
+ "tpt-offer-notify": "Voit <span class=\"plainlinks\">[$1 lähettää ilmoituksen kääntäjille]</span> tästä sivusta.",
+ "tpt-showpage-intro": "Alempana listattu uusia, olemassa olevia ja poistettuja osioita.\nEnnen kuin merkitset tämän version käännettäväksi, tarkista että muutokset osioihin ovat mahdollisimman vähäisiä, jotta kääntäjille ei aiheudu tarpeetonta työtä.",
+ "tpt-mark-summary": "Tämä versio merkittiin käännettäväksi",
+ "tpt-mark-nochanges": "Ei tarkistettavia muutoksia. Tämän sivun merkitseminen käännettäväksi ei muokkaa sivua eikä olemassa olevia käännösyksiköitä.",
+ "tpt-edit-failed": "Sivun päivittäminen epäonnistui: $1",
+ "tpt-duplicate": "Käännösosion nimeä $1 on käytetty useammin kuin kerran.",
+ "tpt-unmarked": "Sivu [[:$1]] ei ole enää käännettävänä.",
+ "tpt-list-nopages": "Yhtään sivua ei ole merkitty käännettäväksi eikä yhtään sivua ole valmiina käännettäväksi merkitsemistä varten.",
+ "tpt-new-pages-title": "Käännettäväksi ehdotetut sivut",
+ "tpt-old-pages-title": "Käännettävät sivut",
+ "tpt-other-pages-title": "Rikkoutuneet sivut",
+ "tpt-new-pages": "{{PLURAL:$1|Tämä sivu sisältää|Nämä sivut sisältävät}} tekstiä, joka on valmis merkittäväksi kääntämistä varten,\nmutta mikään versio {{PLURAL:$1|tästä sivusta|näistä sivuista}} ei ole tällä hetkellä merkitty käännettäväksi.",
+ "tpt-old-pages": "Viimeisin versio {{PLURAL:$1|tästä sivusta on|näistä sivuista on}} merkitty käännettäväksi.",
+ "tpt-other-pages": "Vanha versio {{PLURAL:$1|tästä sivusta|näistä sivuista}} on merkitty käännettäväksi,\nmutta viimeisintä versiota ei voi merkitä käännettäväksi.",
+ "tpt-tag-oldsyntax": "vanha syntaksi",
+ "tpt-select-prioritylangs": "Pilkuin erotettu lista ensisijaisista kielikoodeista:",
+ "tpt-select-prioritylangs-force": "Estä kääntäminen muille kuin ensisijaisille kielille",
+ "tpt-select-prioritylangs-reason": "Syy:",
+ "tpt-sections-prioritylangs": "Ensisijaiset kielet",
+ "tpt-sections-syntaxversion": "Syntaksiversio",
+ "tpt-rev-mark": "merkitse käännettäväksi",
+ "tpt-rev-unmark": "poista käännettävistä sivuista",
+ "tpt-rev-discourage": "vältä uusia käännöksiä",
+ "tpt-rev-encourage": "palauta",
+ "tpt-rev-mark-tooltip": "Merkitse tämän sivun viimeisin versio käännettäväksi.",
+ "tpt-rev-unmark-tooltip": "Poista tämän sivun käännösominaisuus.",
+ "tpt-rev-discourage-tooltip": "Piilota sivu käännösjärjestelmästä, jotta uusia käännöksiä ei enää tehtäisi.",
+ "tpt-rev-encourage-tooltip": "Palauta tämä sivu käännösjärjestelmään.",
+ "translate-tag-translate-link-desc": "Käännä tämä sivu",
+ "translate-tag-markthis": "Merkitse tämä sivu käännettäväksi",
+ "translate-tag-markthisagain": "Tähän sivuun on tehty <span class=\"plainlinks\">[$1 muutoksia]</span> sen jälkeen kun se viimeksi <span class=\"plainlinks\">[$2 merkittiin käännettäväksi]</span>.",
+ "translate-tag-hasnew": "Tämä sivu sisältää <span class=\"plainlinks\">[$1 muutoksia],</span> joita ei ole merkitty käännettäväksi.",
+ "tpt-translation-intro": "Tämä on <span class=\"plainlinks\">[$1 käännetty versio]</span> sivusta [[$2]], ja käännös on $3 % valmis.",
+ "tpt-translation-intro-fuzzy": "Vanhentuneet käännökset on merkitty näin.",
+ "tpt-languages-legend": "Muut kielet:",
+ "tpt-languages-zero": "Aloita käännös tälle kielelle",
+ "tpt-languages-nonzero": "$1 ($2 % käännetty)",
+ "tpt-tab-translate": "Käännä",
+ "tpt-target-page": "Tätä sivua ei voi muokata tavalliseen tapaan.\nTämä sivu on käännös sivusta [[$1]] ja käännöstä voi päivittää käyttämällä [$2 käännöstyökalua].",
+ "tpt-unknown-page": "Tämä nimiavaruus on varattu sisältösivujen käännöksille.\nSivu, jota yrität muokata, ei näytä vastaavan mitään sivua, joka on merkitty käännettäväksi.",
+ "tpt-translation-restricted": "Käännösylläpitäjä on estänyt tämän sivun kääntämisen tälle kielelle.\n\nSyy: $1",
+ "tpt-discouraged-language-force-header": "Tätä sivua ei voi kääntää kielelle $1.",
+ "tpt-discouraged-language-force-content": "Käännösylläpitäjä on päättänyt, että tämä sivu voidaan kääntää vain kielille $1.",
+ "tpt-discouraged-language-header": "Tämän sivun ensisijainen käännöskieli ei ole $1.",
+ "tpt-discouraged-language-content": "Käännösylläpitäjä on päättänyt, että tämä sivu tulee ensisijaisesti kääntää kielille $1.",
+ "tpt-discouraged-language-force": "<strong>Tätä sivua ei voi kääntää kielelle $2.</strong>\n\nKäännösylläpitäjä on päättänyt, että tämän sivun voi kääntää vain kielille $3.",
+ "tpt-priority-languages": "Käännösylläpitäjä on asettanut tämän ryhmän ensisijaisiksi käännöskieliksi $1.",
+ "tpt-priority-languages-force": "Käännösylläpitäjä on määritellyt tämän ryhmän prioriteettikieliksi $1. Kääntäminen muille kielille ei ole mahdollista.",
+ "tpt-render-summary": "Päivitetty vastaamaan uutta versiota lähdesivusta",
+ "aggregategroups": "Kokoelmaryhmät",
+ "tpt-aggregategroup-add": "Lisää",
+ "tpt-aggregategroup-save": "Tallenna",
+ "tpt-aggregategroup-close": "Sulje",
+ "tpt-aggregategroup-add-new": "Lisää uusi kokoelmaryhmä",
+ "tpt-aggregategroup-new-name": "Nimi",
+ "tpt-aggregategroup-new-description": "Kuvaus (vapaaehtoinen):",
+ "tpt-aggregategroup-remove-confirm": "Haluatko varmasti poistaa tämän kokoelmaryhmän?",
+ "tpt-aggregategroup-invalid-group": "Ryhmää ei ole",
+ "tpt-aggregategroup-edit-name": "Nimi:",
+ "tpt-aggregategroup-edit-description": "Kuvaus:",
+ "tpt-aggregategroup-update": "Tallenna",
+ "tpt-aggregategroup-update-cancel": "Peru",
+ "tpt-aggregategroup-expand-all-groups": "laajenna kaikki ryhmät",
+ "tpt-aggregategroup-expand-group": "laajenna ryhmä",
+ "tpt-invalid-group": "Virheellinen ryhmä",
+ "pt-parse-open": "Sulkematon &lt;translate>-tägi.\nKäännöspohja: <pre>$1</pre>",
+ "pt-parse-close": "Avaamaton &lt;/translate>-tägi.\nKäännöspohja: <pre>$1</pre>",
+ "pt-parse-nested": "Sisäkkäiset &lt;translate>-tägit eivät ole sallittuja.\nKäännettävä teksti: <pre>$1</pre>",
+ "pt-shake-multiple": "Enemmän kuin yksi käännösosiotunniste käännösosiolla.\nKäännösosion teksti: <pre>$1</pre>",
+ "pt-shake-position": "Käännösosiotunniste on odottamattomassa paikassa.\nKäännösosion teksti: <pre>$1</pre>",
+ "pt-shake-empty": "Käännösosio $1 sisältää vain tunnisteen.",
+ "log-description-pagetranslation": "Tämä loki sisältää sivunkäännösominaisuuteen liittyviä tapahtumia.",
+ "log-name-pagetranslation": "Sivujen käännösten loki",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|merkitsi}} sivun $3 käännettäväksi",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|poisti}} sivun $3 käännösjärjestelmästä",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|sai}} valmiiksi käännettävän sivun $3 siirtämisen uudelle nimelle $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|epäonnistui}} käännettävän sivun $3 siirtämisessä uudelle nimelle $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|sai}} valmiiksi käännettävän sivun $3 poistamisen",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|epäonnistui}} käännettävän sivuun $4 liittyvän sivun $3 poistamisessa",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|sai}} valmiiksi käännössivun $3 poistamisen",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|epäonnistui}} käännössivuun $4 liittyvän sivun $3 poistamisessa",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|kumosi}} sivun $3 käännösrajoituksen",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|rajoitti}} sivun $3 kääntämistä",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|poisti}} ensisijaiset kielet käännettävästä sivusta $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|asetti}} käännettävän sivun $3 ensisijaiset käännöskielet arvoon $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|asetti}} käännettävän sivun $3 ainoat sallitut käännöskielet arvoon $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|lisäsi}} käännettävän sivun $3 kokoelmaryhmään $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|poisti}} käännettävän sivun $3 kokoelmaryhmästä $4",
+ "log-action-filter-pagetranslation": "Toiminnon tyyppi:",
+ "log-action-filter-pagetranslation-mark": "Merkitty käännettäväksi",
+ "log-action-filter-pagetranslation-unmark": "Poistettu käännettävistä sivuista",
+ "log-action-filter-pagetranslation-move": "Siirto",
+ "log-action-filter-pagetranslation-delete": "Poisto",
+ "log-action-filter-pagetranslation-encourage": "Käännösrajoitusten poistot",
+ "log-action-filter-pagetranslation-discourage": "Käännösrajoitukset",
+ "log-action-filter-pagetranslation-prioritylanguages": "Ensisijaisten kielten muuttaminen",
+ "log-action-filter-pagetranslation-aggregategroups": "Koottavien ryhmien muuttaminen",
+ "pt-movepage-title": "Käännettävän sivun $1 siirtäminen",
+ "pt-movepage-blockers": "Käännettävää sivua ei voi siirtää uudelle nimelle {{PLURAL:$1|seuraavasta syystä|seuraavista syistä}}:",
+ "pt-movepage-block-base-invalid": "Käännettävän sivun nimi ei ole kelvollinen.",
+ "pt-movepage-block-tp-invalid": "Käännössivun [[:$1]] uusi nimi ei ole kelvollinen (liian pitkä?)",
+ "pt-movepage-block-section-invalid": "Kohdesivun otsikko käännösosiosivulle ”[[:$1]]” ei ole kelvollinen (liian pitkä?)",
+ "pt-movepage-block-subpage-invalid": "Alasivun [[:$1]] uusi nimi ei ole kelvollinen (liian pitkä?)",
+ "pt-movepage-list-pages": "Lista siirrettävistä sivuista",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Käännössivu|Käännössivut}}",
+ "pt-movepage-list-section": "{{PLURAL:$1|Käännösosiosivut}}",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Käännettävä alasivu|Käännettävät alasivut}}",
+ "pt-movepage-list-translatable-note": "Nämä sivut on siirrettävä erikseen.",
+ "pt-movepage-list-other": "{{PLURAL:$1|Muu alasivu|Muut alasivut}}",
+ "pt-movepage-list-count": "Yhteensä $1 {{PLURAL:$1|siirrettävä sivu|siirrettävää sivua}} ja $2 {{PLURAL:$2|alasivu|alasivua}}.",
+ "pt-movepage-list-no-pages": "Sivuja ei löytynyt.",
+ "pt-movepage-legend": "Siirrä käännettävä sivu",
+ "pt-movepage-current": "Nykyinen nimi",
+ "pt-movepage-new": "Uusi nimi",
+ "pt-movepage-reason": "Syy:",
+ "pt-movepage-subpages": "Siirrä kaikki alasivut",
+ "pt-movepage-talkpages": "Siirrä keskustelusivuja",
+ "pt-movepage-action-check": "Tarkasta, onko sivun siirtäminen mahdollista",
+ "pt-movepage-action-perform": "Tee siirto",
+ "pt-movepage-action-other": "Vaihda kohde",
+ "pt-movepage-intro": "Tällä toimintosivulla voit siirtää käännettäväksi merkittyjä sivuja.\nSiirto ei tapahdu heti, koska useita sivuja täytyy siirtää.\nSivut ovat lukittuna siirron ajan.\nEpäonnistuneet siirrot tallennetaan [[Special:Log/pagetranslation|sivunkääntölokiin]] ja ne täytyy korjata käsin.",
+ "pt-movepage-logreason": "Osa käännettävää sivua ”$1”",
+ "pt-movepage-started": "Tarkista sillä aikaa [[Special:Log/pagetranslation|sivunkääntölokista]]. mahdolliset virheet ja valmistumisviestit.",
+ "pt-locked-page": "Tämä sivu on lukittu, koska käännettävän sivun siirtäminen on kesken.",
+ "pt-deletepage-lang-title": "Käännössivun $1 poisto",
+ "pt-deletepage-tp-title": "Käännettävän sivun $1 poisto",
+ "pt-deletepage-invalid-title": "Määritetty sivu ei kelpaa.",
+ "pt-deletepage-invalid-text": "Sivu ei ole käännettävissä oleva sivu tai sellaisen käännös.",
+ "pt-deletepage-action-check": "Luetteloi poistettavat sivut",
+ "pt-deletepage-action-perform": "Suorita poisto",
+ "pt-deletepage-action-other": "Vaihda kohdetta",
+ "pt-deletepage-lang-legend": "Poista käännössivu",
+ "pt-deletepage-tp-legend": "Poista käännettävissä oleva sivu",
+ "pt-deletepage-any-legend": "Poista käännettävissä oleva sivu tai sellaisen käännös",
+ "pt-deletepage-current": "Sivun nimi",
+ "pt-deletepage-reason": "Syy:",
+ "pt-deletepage-reason-other": "Muu syy",
+ "pt-deletepage-subpages": "Poista kaikki alasivut",
+ "pt-deletepage-list-pages": "Poistettavien sivujen luettelo",
+ "pt-deletepage-list-translation": "Käännössivut",
+ "pt-deletepage-list-section": "Käännösosiosivut",
+ "pt-deletepage-list-other": "Muut alasivut",
+ "pt-deletepage-list-count": "Yhteensä $1 {{PLURAL:$1|poistettava sivu|poistettavaa sivua}} ja $2 {{PLURAL:$2|alasivu|alasivua}}.",
+ "pt-deletepage-list-no-pages": "Sivuja ei löytynyt.",
+ "pt-deletepage-full-logreason": "Osa käännettävää sivua ”$1”",
+ "pt-deletepage-lang-logreason": "Osa käännössivua ”$1”",
+ "pt-deletepage-started": "Virheet ja valmistusviesti löytyvät [[Special:Log/pagetranslation|sivunkääntölokista]].",
+ "pt-deletepage-intro": "Tämän toimintosivun avulla voit poistaa koko käännettävän sivun tai tietynkieliset käännökset.\nPoisto ei tapahdu välittömästi, sillä useita sivuja täytyy poistaa.\nVirheet merkitään [[Special:Log/pagetranslation|sivunkääntölokiin]] ja ne täytyy korjata käsin.",
+ "pagemigration": "Käännössivumigraatio",
+ "pagemigration-summary": "Anna käännössivun nimi ja palauta ennen Translaten käyttöönottoa tehtyjä käännöksiä.",
+ "pm-import-button-label": "Tuo",
+ "pm-savepages-button-label": "Tallenna",
+ "pm-cancel-button-label": "Peru",
+ "pm-page-does-not-exist": "Sivua $1 ei ole olemassa.",
+ "pm-old-translations-missing": "Sivulla $1 ei ole vanhoja käännöksiä.",
+ "pm-pagename-missing": "Anna sivun nimi.",
+ "pm-add-icon-hover-text": "Lisää yksikkö alle",
+ "pm-swap-icon-hover-text": "Vaihda paikkaa alla olevan yksikön kanssa",
+ "pm-delete-icon-hover-text": "Poista yksikkö",
+ "pm-pagetitle-placeholder": "Anna sivun nimi",
+ "pm-pagetitle-invalid": "Anna kelvollinen sivun otsikko. Sen pitäisi olla <page-name>/<language-code> muodossa.",
+ "pm-pagetitle-missing": "Anna sivun nimi.",
+ "pm-langcode-missing": "Kielikoodi näyttäisi puuttuvan otsikossa. \nAnna sivun otsikko muodossa <page-name>/<language-code>.",
+ "pm-summary-import": "Tuodut käännökset käyttäen [[Special:PageMigration|page migrationia]]",
+ "tpt-translate-title": "Salli sivun otsikon käännös",
+ "pp-save-summary": "Valmisteli sivun kääntämistä varten.",
+ "pagepreparation": "Valmista sivu kääntämistä varten",
+ "pp-pagename-placeholder": "Anna sivun nimi",
+ "pp-prepare-button-label": "Valmistele",
+ "pp-save-button-label": "Julkaise",
+ "pp-cancel-button-label": "Peru",
+ "pp-save-message": "Sivu on julkaistu. Voit [$1 muokata sivua].",
+ "pp-pagename-missing": "Anna sivun nimi.",
+ "pp-diff-old-header": "Lähdeteksti",
+ "pp-diff-new-header": "Valmisteltu teksti",
+ "tpt-unlink-confirm": "Varmista, että haluat poistaa tämän sivun käännösjärjestelmästä. Kielivalitsin sekä käännetyt sivujen nimet lakkaavat toimimasta. Käännössivut muuttuvat muokattaviksi.",
+ "tpt-unlink-button": "Poista käännettävistä sivuista",
+ "tpt-unlink-summary": "Poistettu käännettävistä sivuista",
+ "tpt-generic-confirm": "Vahvista toiminto.",
+ "tpt-generic-button": "Vahvista",
+ "visualeditor-annotations-translate-start": "Käännettävän sisällön alkukohta",
+ "visualeditor-annotations-translate-end": "Käännettävän sisällön päätepiste",
+ "visualeditor-annotations-tvar-start": "Sisältö, jota ei voi kääntää, alkaa tästä",
+ "visualeditor-annotations-tvar-end": "Sisältö, jota ei voi kääntää, päättyy tähän",
+ "visualeditor-annotations-tvar-description": "Tämä väli on merkitty mahdottomaksi kääntää. Katso lisätietoja sivulta [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Segmentation Segmentation of the source text]"
+}
diff --git a/Translate/i18n/pagetranslation/fit.json b/Translate/i18n/pagetranslation/fit.json
new file mode 100644
index 00000000..607378d6
--- /dev/null
+++ b/Translate/i18n/pagetranslation/fit.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Pyscowicz"
+ ]
+ },
+ "tpt-diff-old": "Eelinen teksti",
+ "translate-tag-translate-link-desc": "Käänä tämä sivu",
+ "tpt-languages-nonzero": "$1 ($2 % käänetty)",
+ "tpt-tab-translate": "Käänä",
+ "tpt-aggregategroup-add": "Lissää",
+ "tpt-aggregategroup-save": "Säästä",
+ "tpt-aggregategroup-edit-description": "Kuvvaus:",
+ "tpt-aggregategroup-update": "Säästä",
+ "tpt-aggregategroup-update-cancel": "Lopeta",
+ "pt-movepage-subpages": "Siirä kaikki alasivut",
+ "pt-movepage-intro": "Tällä spesiaalisivula voit siirtää käänettäväksi merkittyjä sivuja.\nSiirto ei tapahdu heti, koska useita sivuja häätyy siirthää.\nSivut ovat lukittuna siirron ajan.\nEpäonnistuneet siirrot säästetään [[Special:Log/pagetranslation|sivunkääntölokiin]] ja ne häätyy korjata käsin.",
+ "pt-deletepage-lang-legend": "Ota poies käänössivu",
+ "pt-deletepage-tp-legend": "Ota poies käännettävissä oleva sivu",
+ "pt-deletepage-any-legend": "Ota poies käännettävissä oleva sivu tai sellaisen käänös",
+ "pt-deletepage-subpages": "Ota poies kaikki alasivut",
+ "pm-import-button-label": "Importeeraa",
+ "pm-savepages-button-label": "Säästä",
+ "pm-cancel-button-label": "Lopeta",
+ "pp-save-button-label": "Säästä",
+ "pp-cancel-button-label": "Lopeta",
+ "pp-diff-old-header": "Läheteksti"
+}
diff --git a/Translate/i18n/pagetranslation/fo.json b/Translate/i18n/pagetranslation/fo.json
new file mode 100644
index 00000000..f03fbbca
--- /dev/null
+++ b/Translate/i18n/pagetranslation/fo.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "EileenSanda"
+ ]
+ },
+ "tpt-diff-new": "Nýggjur tekstur",
+ "tpt-submit": "Merk hesa versjónina til týðing",
+ "tpt-nosuchpage": "Síðan $1 er ikki til",
+ "tpt-edit-failed": "Tað bar ikki til at dagføra síðuna: $1",
+ "tpt-languages-nonzero": "$1 ($2% týtt)"
+}
diff --git a/Translate/i18n/pagetranslation/fr.json b/Translate/i18n/pagetranslation/fr.json
new file mode 100644
index 00000000..256084cd
--- /dev/null
+++ b/Translate/i18n/pagetranslation/fr.json
@@ -0,0 +1,297 @@
+{
+ "@metadata": {
+ "authors": [
+ "BaRaN6161 TURK",
+ "Benjozork",
+ "Brunoperel",
+ "Cquoi",
+ "Crochet.david",
+ "DavidL",
+ "DreZhsh",
+ "Eihel",
+ "Element303",
+ "Frigory",
+ "Gomoko",
+ "Grondin",
+ "Houcinee1",
+ "IAlex",
+ "Linedwell",
+ "Mattho69",
+ "Pamputt",
+ "Peter17",
+ "Pols12",
+ "Purodha",
+ "Sherbrooke",
+ "Shirayuki",
+ "Thibaut120094",
+ "Tititou36",
+ "TomT0m",
+ "Trial",
+ "Urhixidur",
+ "Verdy p",
+ "Wladek92",
+ "Wyz",
+ "Y-M D",
+ "Yasten",
+ "Zetud"
+ ]
+ },
+ "pagetranslation": "Traduction de pages",
+ "nstab-translations": "Unité de traduction",
+ "right-pagetranslation": "Marquer des versions de pages à traduire",
+ "action-pagetranslation": "gérer les pages traduisibles",
+ "tps-edit-sourcepage-text": "Vous modifiez une page de traduction source. Assurez-vous d’être familiarisé{{GENDER:||e}} avec la documentation suivante :\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text Modifier le texte source]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Markup_examples Exemples de balisage à suivre]",
+ "tps-edit-sourcepage-ve-warning-limited-text": "Certains fragments traductibles peuvent ne pas être modifiables dans cet éditeur. Veuillez utiliser l’éditeur de wikicode source pour les modifier.",
+ "tps-edit-sourcepage-ve-warning-title": "Attention : page non prise en charge",
+ "tps-edit-sourcepage-ve-warning-text": "Vous modifiez une page traduisible. La modifier dans cet éditeur n’est pas encore officiellement pris en charge. Veuillez utiliser l’éditeur de wikicode.",
+ "tps-edit-sourcepage-ve-warning-button": "OK",
+ "tpt-section": "Unité de traduction $1",
+ "tpt-section-new": "Nouvelle unité de traduction. Nom : $1",
+ "tpt-section-deleted": "Unité de traduction $1",
+ "tpt-diff-old": "Texte précédent",
+ "tpt-diff-new": "Nouveau texte",
+ "tpt-submit": "Marquer cette version à traduire",
+ "tpt-sections-oldnew": "Unités de traduction nouvelles et existantes",
+ "tpt-sections-deleted": "Unités de traduction supprimées",
+ "tpt-sections-template": "Modèle de page de traduction",
+ "tpt-action-nofuzzy": "Ne pas invalider les traductions",
+ "tpt-badtitle": "Le nom de page donné ($1) n’est pas un titre valide",
+ "tpt-nosuchpage": "La page $1 n’existe pas",
+ "tpt-oldrevision": "$2 n’est pas la dernière version de la page [[:$1]].\nSeule la dernière version de la page peut être marquée à traduire.",
+ "tpt-notsuitable": "La page $1 ne convient pas pour la traduction.\nAssurez-vous qu’elle contient des balises $2 et que sa syntaxe est correcte.",
+ "tpt-saveok": "La page [[:$1]] a été marquée à traduire avec $2 {{PLURAL:$2|unité|unités}} de traduction.\nLa page peut être <span class=\"plainlinks\">[$3 traduite]</span> dès maintenant.",
+ "tpt-saveok-first": "Vous pouvez [[Special:PageMigration|importer une traduction préexistante]] pour cette page (si elle existe).",
+ "tpt-offer-notify": "Vous pouvez <span class=\"plainlinks\">[$1 notifier les traducteurs]</span> au sujet de cette page.",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|Afficher la liste des pages traductibles.]]",
+ "tpt-showpage-intro": "Ci-dessous, les nouvelles traductions, celles existantes et supprimées.\nAvant de marquer cette version comme étant à traduire, vérifiez que les modifications des unités de traduction ont été minimisées afin d’éviter du travail inutile aux traducteurs.",
+ "tpt-mark-summary": "Cette version a été marquée à traduire",
+ "tpt-mark-nochanges": "Aucune modification à relire. Marquer cette page à traduire ne va modifier ni la page, ni aucune unité de traduction existante.",
+ "tpt-edit-failed": "Impossible de mettre à jour la page « $1 »",
+ "tpt-duplicate": "Le nom de l’unité traduction $1 est utilisé plus d’une fois.",
+ "tpt-invalid": "Le nom « $1 » de l’unité de traduction ne peut contenir aucun tiret de soulignement (_), ni aucune barre oblique (/).",
+ "tpt-unmarked": "La page [[:$1]] n’est plus marquée à traduire.",
+ "tpt-list-nopages": "Aucune page n’a été marquée à traduire ni n’est prête à l’être.",
+ "tpt-new-pages-title": "Pages proposées à la traduction",
+ "tpt-old-pages-title": "Pages en cours de traduction",
+ "tpt-other-pages-title": "Pages cassées",
+ "tpt-outdated-pages-title": "Pages avec des modifications en attente",
+ "tpt-new-pages": "{{PLURAL:$1|Cette page contient|Ces pages contiennent}} du texte avec des balises de traduction, mais aucune {{PLURAL:$1|version de cette page|des versions de ces pages}} n’a été marquée à traduire.",
+ "tpt-old-pages": "La dernière version de {{PLURAL:$1|cette page|chacune de ces pages}} a été marquée à traduire.",
+ "tpt-other-pages": "Une ancienne version de {{PLURAL:$1|la page suivante|chacune des pages suivantes}} a été marquée pour être traduite, mais {{PLURAL:$1|sa dernière version|leur dernière version respective}} ne peut pas être marquée ainsi :",
+ "tpt-outdated-pages": "{{PLURAL:$1|Cette page a|Ces pages ont}} des modifications non marquées à traduire.",
+ "tpt-tag-discouraged": "traduction dissuadée",
+ "tpt-tag-oldsyntax": "ancienne syntaxe",
+ "tpt-tag-no-transclusion-support": "transclusion non prise en charge",
+ "tpt-select-prioritylangs": "Liste de codes de langues prioritaires séparés par des virgules :",
+ "tpt-select-prioritylangs-force": "Empêcher les traductions en d’autres langues que les langues prioritaires",
+ "tpt-select-prioritylangs-reason": "Motif :",
+ "tpt-sections-prioritylangs": "Langues prioritaires",
+ "tpt-sections-syntaxversion": "Version de la syntaxe",
+ "tpt-syntaxversion-text": "Cette page utilise actuellement une ancienne version de la syntaxe de la page source traductible. La nouvelle version encapsulera les sections non traduites avec une balise HTML pour indiquer la langue correcte du texte. Exemple : $1. Vous pouvez utiliser une nouvelle syntaxe de balisage $2 pour empêcher tout type d’encapsulation aux endroits où cela n’est pas approprié, comme lors de la traduction de l’attribut <code>title</code> d’un élément. Il n’est pas possible de revenir à une version utilisant l’ancienne syntaxe.",
+ "tpt-syntaxversion-label": "Utiliser la dernière version de la syntaxe pour cette page",
+ "tpt-transclusion": "Inclusion de modèle",
+ "tpt-transclusion-label": "Utiliser automatiquement une traduction lors de l’inclusion de cette page",
+ "tpt-rev-mark": "marquer à traduire",
+ "tpt-rev-unmark": "retirer la possibilité de traduire",
+ "tpt-rev-discourage": "dissuader",
+ "tpt-rev-encourage": "rétablir",
+ "tpt-rev-mark-tooltip": "Marquer à traduire la version la plus récente de cette page.",
+ "tpt-rev-unmark-tooltip": "Retirer la possibilité de traduire cette page.",
+ "tpt-rev-discourage-tooltip": "Dissuader les futures traductions sur cette page.",
+ "tpt-rev-encourage-tooltip": "Rétablir cette page en traduction normale.",
+ "translate-tag-translate-link-desc": "Traduire cette page",
+ "translate-tag-markthis": "Marquer cette page à traduire",
+ "translate-tag-markthisagain": "Cette page a été <span class=\"plainlinks\">[$1 modifiée]</span> depuis la dernière fois qu’elle a été <span class=\"plainlinks\">[$2 marquée à traduire]</span>.",
+ "translate-tag-hasnew": "cette page contient <span class=\"plainlinks\">[$1 des modifications]</span> qui ne sont pas marquées à traduire.",
+ "tpt-translation-intro": "Cette page est une <span class=\"plainlinks\">[$1 version traduite]</span> de la page [[$2]] et la traduction est terminée à $3 %.",
+ "tpt-translation-intro-fuzzy": "Les traductions désuètes sont identifiées ainsi.",
+ "tpt-languages-legend": "Autres langues :",
+ "tpt-languages-separator": "&#160;·&#32;",
+ "tpt-languages-zero": "Commencer la traduction dans cette langue",
+ "tpt-languages-nonzero": "$1 ($2 % traduit{{PLURAL:$2||s}})",
+ "tpt-tab-translate": "Traduire",
+ "tpt-target-page": "Cette page ne peut pas être mise à jour manuellement.\nC’est une traduction de la page [[$1]] et la traduction peut être mise à jour en utilisant [$2 l’outil de traduction].",
+ "tpt-unknown-page": "Cet espace de noms est réservé pour les traductions des pages de contenu.\nLa page que vous essayez de modifier ne semble correspondre à aucune page marquée à traduire.",
+ "tpt-translation-restricted": "La traduction de cette page dans cette langue a été empêchée par un administrateur de traduction.\n\nMotif : $1",
+ "tpt-translation-restricted-no-reason": "La traduction de cette page dans cette langue a été empêchée par un administrateur de traduction.",
+ "tpt-discouraged-language-force-header": "Cette page ne peut pas être traduite en $1.",
+ "tpt-discouraged-language-force-content": "Un administrateur de traduction a décidé que cette page ne pouvait être traduite qu’en $1.",
+ "tpt-discouraged-language-header": "Traduire en $1 n’est pas une priorité pour cette page.",
+ "tpt-discouraged-language-content": "Un administrateur de traduction a décidé de focaliser les efforts de traduction sur les langues suivantes : $1.",
+ "tpt-discouraged-language-force": "<strong>Cette page ne peut pas être traduite en $2.</strong>\n\nUn administrateur des traductions a décidé que cette page ne peut être traduite qu’en $3.",
+ "tpt-priority-languages": "Un administrateur de traduction a défini les langues prioritaires suivantes pour ce groupe : $1.",
+ "tpt-priority-languages-force": "Un administrateur de traduction a fixé les langues prioritaires suivantes pour ce groupe : $1. La traduction dans d’autres langues n’est pas autorisée.",
+ "tpt-discouraged-translation-header": "La traduction de cette page a été déconseillée",
+ "tpt-discouraged-translation-content": "Un administrateur de traduction a déconseillé la traduction de cette page. Vous pouvez toujours traduire la page, mais les traductions pourraient être inutiles.",
+ "tpt-render-summary": "Mise à jour pour être en accord avec la nouvelle version de la source de la page",
+ "aggregategroups": "Groupes d’agrégation",
+ "tpt-aggregategroup-add": "Ajouter",
+ "tpt-aggregategroup-save": "Enregistrer",
+ "tpt-aggregategroup-close": "Fermer",
+ "tpt-aggregategroup-add-new": "Ajouter un nouveau groupe d’agrégation",
+ "tpt-aggregategroup-new-name": "Nom :",
+ "tpt-aggregategroup-new-description": "Description (facultative) :",
+ "tpt-aggregategroup-remove-confirm": "Êtes-vous {{GENDER:|sûr|sure}} de vouloir supprimer ce groupe d’agrégation ?",
+ "tpt-aggregategroup-invalid-group": "Le groupe n’existe pas",
+ "tpt-aggregategroup-edit-name": "Nom :",
+ "tpt-aggregategroup-edit-description": "Description :",
+ "tpt-aggregategroup-update": "Enregistrer",
+ "tpt-aggregategroup-update-cancel": "Annuler",
+ "tpt-aggregategroup-expand-all-groups": "développer tous les groupes",
+ "tpt-aggregategroup-collapse-all-groups": "replier tous les groupes",
+ "tpt-aggregategroup-expand-group": "développer le groupe",
+ "tpt-aggregategroup-collapse-group": "replier le groupe",
+ "tpt-invalid-group": "Groupe non valide",
+ "pt-parse-open": "Balise &lt;translate> asymétrique.\nModèle de traduction : <pre>$1</pre>",
+ "pt-parse-close": "Balise &lt;/translate> asymétrique.\nModèle de traduction : <pre>$1</pre>",
+ "pt-parse-nested": "L’imbrication de balises &lt;translate> n’est pas autorisée.\nContenu de la balise : <pre>$1</pre>",
+ "pt-shake-multiple": "Multiples marqueurs d’unité de traduction pour une même unité de traduction.\nAssurez-vous que les unités de traduction sont séparées par des lignes vides.\nTexte de l’unité de traduction : <pre>$1</pre>",
+ "pt-shake-position": "Marqueurs d’unité de traduction à une position inattendue.\nTexte de l’unité de traduction : <pre>$1</pre>",
+ "pt-shake-empty": "Unité de traduction vide pour le marqueur « $1 ».",
+ "log-description-pagetranslation": "Journal des actions liées au système de traduction de pages",
+ "log-name-pagetranslation": "Journal des traductions de pages",
+ "logentry-pagetranslation-mark": "$1{{GENDER:$2|}} a marqué $3 à traduire",
+ "logentry-pagetranslation-unmark": "$1{{GENDER:$2|}} a retiré $3 du système de traduction",
+ "logentry-pagetranslation-moveok": "$1{{GENDER:$2|}} a terminé le renommage de la page traduisible $3 en $4",
+ "logentry-pagetranslation-movenok": "$1{{GENDER:$2|}} a rencontré un problème en déplaçant la page $3 vers $4",
+ "logentry-pagetranslation-deletefok": "$1{{GENDER:$2|}} a terminé la suppression de la page traduisible $3",
+ "logentry-pagetranslation-deletefnok": "$1{{GENDER:$2|}} n’a pas réussi à supprimer $3 qui appartient à la page traduisible $4",
+ "logentry-pagetranslation-deletelok": "$1{{GENDER:$2|}} a terminé la suppression de la page de traduction $3",
+ "logentry-pagetranslation-deletelnok": "$1{{GENDER:$2|}} n’a pas réussi à supprimer $3 qui appartient à la page de traduction $4",
+ "logentry-pagetranslation-encourage": "$1{{GENDER:$2|}} a incité à traduire $3",
+ "logentry-pagetranslation-discourage": "$1{{GENDER:$2|}} a dissuadé la traduction de $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1{{GENDER:$2|}} a supprimé les langues prioritaires pour la page traduisible $3",
+ "logentry-pagetranslation-prioritylanguages": "$1{{GENDER:$2|}} a défini les langues prioritaires pour la page traduisible $3 à $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1{{GENDER:$2|}} a limité les langues pour la page traduisible $3 à $5",
+ "logentry-pagetranslation-associate": "$1{{GENDER:$2|}} a ajouté la page traduisible $3 au groupe agrégé $4",
+ "logentry-pagetranslation-dissociate": "$1{{GENDER:$2|}} a retiré la page traduisible $3 du groupe agrégé $4",
+ "log-action-filter-pagetranslation": "Type d’action :",
+ "log-action-filter-pagetranslation-mark": "Marquage comme étant à traduire",
+ "log-action-filter-pagetranslation-unmark": "Retrait de la possibilité de traduire",
+ "log-action-filter-pagetranslation-move": "Déplacements de pages",
+ "log-action-filter-pagetranslation-delete": "Suppressions de pages",
+ "log-action-filter-pagetranslation-encourage": "Incitation à traduire",
+ "log-action-filter-pagetranslation-discourage": "Dissuasion de traduire",
+ "log-action-filter-pagetranslation-prioritylanguages": "Modification de la priorité des langues",
+ "log-action-filter-pagetranslation-aggregategroups": "Modification de groupes agrégés",
+ "log-description-messagebundle": "Journal des actions liées au système de groupes de messages",
+ "log-name-messagebundle": "Journal des groupes de messages",
+ "logentry-messagebundle-moveok": "$1{{GENDER:$2|}} a terminé le renommage du groupe de messages $3 en $4",
+ "logentry-messagebundle-movenok": "$1{{GENDER:$2|}} a rencontré un problème en renommant le groupe de messages $3 en $4",
+ "logentry-messagebundle-deletefok": "$1{{GENDER:$2|}} a terminé la suppression du groupe de messages $3",
+ "logentry-messagebundle-deletefnok": "$1{{GENDER:$2|}} n’a pas réussi à supprimer $3 qui appartient au groupe de messages $4",
+ "log-action-filter-messagebundle": "Type d’action :",
+ "log-action-filter-messagebundle-move": "Déplacements de groupes de messages",
+ "log-action-filter-messagebundle-delete": "Suppressions de groupes de messages",
+ "pt-movepage-title": "Déplacer la page traduisible « $1 »",
+ "pt-movepage-messagebundle-title": "Déplacer le groupe de messages « $1 »",
+ "pt-movepage-blockers": "La page à traduire ne peut pas être renommée à cause {{PLURAL:$1|de l’erreur suivante|des erreurs suivantes}} :",
+ "pt-movepage-block-base-invalid": "Le nom de la page traduisible cible n’est pas un titre correct.",
+ "pt-movepage-block-tp-invalid": "Le titre de la page de traduction cible pour « [[:$1]] » serait incorrect (trop long ?).",
+ "pt-movepage-block-section-invalid": "Le nouveau titre de l’unité de traduction pour la page « [[:$1]] » serait incorrect (trop long ?).",
+ "pt-movepage-block-subpage-invalid": "Le titre de la sous-page cible pour « [[:$1]] » serait incorrect (trop long ?).",
+ "pt-movepage-block-talkpage-invalid": "Le titre de la page de discussion cible pour « [[:$1]] » serait non valide (trop long ?).",
+ "pt-movepage-block-unknown-page": "La page à déplacer ([[:$1]]) ne semble pas être une partie de la page traductible.",
+ "pt-movepage-block-ns-talk-unsupported": "La page ([[:$1]]) va être déplacée vers un espace de nom qui ne prend pas en charge les pages de discussion.",
+ "pt-movepage-block-rename-failed": "Une erreur s’est produite lors de la génération d’un nouveau titre pour la page [[:$1]]",
+ "pt-movepage-list-pages": "Liste des pages à déplacer",
+ "pt-movepage-list-translation": "Page{{PLURAL:$1||s}} de traduction",
+ "pt-movepage-list-section": "{{PLURAL:$1|Page de l’unité|Pages des unités}} de traduction",
+ "pt-movepage-list-translatable": "Sous-page{{PLURAL:$1||s}} marquée{{PLURAL:$1||s}} à traduire",
+ "pt-movepage-list-translatable-note": "Ces pages doivent être renommées séparément.",
+ "pt-movepage-list-other": "Autre{{PLURAL:$1||s}} sous-page{{PLURAL:$1||s}}",
+ "pt-movepage-list-count": "Au total, il y a $1 page{{PLURAL:$1||s}} à déplacer, dont $2 {{PLURAL:$2|sous-page|sous-pages}} et $3 {{PLURAL:$3|page de discussion|pages de discussion}}.",
+ "pt-movepage-page-count-limit": "La page traductible consiste en plus de $1 page{{PLURAL:$1||s}}. Déplacer en même temps un si grand nombre de pages s’est avéré peu fiable. Veuillez contacter un administrateur système pour réaliser ceci par un script de maintenance.",
+ "pt-movepage-list-no-pages": "Aucune page trouvée.",
+ "pt-movepage-legend": "Déplacer la page traduisible",
+ "pt-movepage-messagebundle-legend": "Déplacer le groupe de messages",
+ "pt-movepage-current": "Nom actuel :",
+ "pt-movepage-new": "Nouveau nom :",
+ "pt-movepage-reason": "Motif :",
+ "pt-movepage-subpages": "Renommer toutes les sous-pages",
+ "pt-movepage-talkpages": "Déplacer les pages de discussion",
+ "pt-movepage-talkpage-exists": "(A une page de discussion)",
+ "pt-movepage-action-check": "Vérifier si le renommage est possible",
+ "pt-movepage-action-perform": "Effectuer le renommage",
+ "pt-movepage-action-other": "Changer la cible",
+ "pt-movepage-intro": "Cette page spéciale vous permet de renommer des pages qui sont marquées comme étant à traduire.\nL’action de renommage ne sera pas immédiate car de nombreuses pages devront être déplacées.\nTant que les pages seront en cours de déplacement, il ne sera pas possible d’interagir avec elles.\nLes échecs seront enregistrés dans le [[$1|journal des traductions]] et devront être corrigés manuellement.",
+ "pt-movepage-logreason": "Partie de la page traductible « $1 »",
+ "pt-movepage-started": "Veuillez ouvrir le [[$1|journal des traductions]] dans quelques instants pour vérifier les erreurs éventuelles et lire le message de complétion.",
+ "pt-locked-page": "Cette page est verrouillée parce que la page traduisible est en cours de renommage.",
+ "pt-deletepage-lang-title": "Suppression de la page de traduction « $1 »",
+ "pt-deletepage-tp-title": "Suppression de la page traduisible « $1 »",
+ "pt-deletepage-mb-title": "Suppression du groupe de message « $1 »",
+ "pt-deletepage-invalid-title": "La page spécifiée n’est pas valide.",
+ "pt-deletepage-invalid-text": "La page spécifiée n’est pas une page traduisible, ni une traduction de celle-ci.",
+ "pt-deletepage-action-check": "Lister les pages à supprimer",
+ "pt-deletepage-action-perform": "Effectuer la suppression",
+ "pt-deletepage-action-other": "Changer la cible",
+ "pt-deletepage-lang-legend": "Supprimer la page de traduction",
+ "pt-deletepage-tp-legend": "Supprimer la page traduisible",
+ "pt-deletepage-mb-legend": "Supprimer le groupe de messages",
+ "pt-deletepage-any-legend": "Supprimer une page traduisible, un groupe de messages ou une page de traduction",
+ "pt-deletepage-current": "Nom de la page :",
+ "pt-deletepage-reason": "Motif :",
+ "pt-deletepage-reason-details": "Motif autre ou supplémentaire :",
+ "pt-deletepage-reason-other": "Autre motif",
+ "pt-deletepage-subpages": "Supprimer tous les sous-pages",
+ "pt-deletepage-list-pages": "Liste des pages à supprimer",
+ "pt-deletepage-list-translation": "Pages de traduction",
+ "pt-deletepage-list-section": "Pages des unités de traduction",
+ "pt-deletepage-list-other": "Autres sous-pages",
+ "pt-deletepage-list-count": "$1 page{{PLURAL:$1||s}} en tout à supprimer et $2 sous-page{{PLURAL:$2||s}}.",
+ "pt-deletepage-list-no-pages": "Aucune page trouvée.",
+ "pt-deletepage-full-logreason": "Partie de la page traductible « $1 »",
+ "pt-deletepage-lang-logreason": "Partie de la page de traduction « $1 »",
+ "pt-deletepage-started": "Veuillez vérifier le [[$1|journal des traductions]] pour les erreurs et le message de complétion.",
+ "pt-deletepage-intro": "Cette page spéciale vous permet de supprimer entièrement une page traduisible, un groupe de messages ou une page d’une traduction dans une langue particulière.\nL’action de suppression n’est pas instantanée car plusieurs pages dépendantes de celle-ci seront aussi supprimées.\nLes échecs seront inscrits dans le [[$1|journal correspondant]] et ils doivent être corrigés à la main.",
+ "pagemigration": "Migration de page de traduction",
+ "pagemigration-summary": "Spécifier une page de traduction et rétablir toute traduction faite avant que le système de traduction soit activé sur cette page.",
+ "pm-import-button-label": "Importer",
+ "pm-savepages-button-label": "Enregistrer",
+ "pm-cancel-button-label": "Annuler",
+ "pm-page-does-not-exist": "$1 n’existe pas.",
+ "pm-old-translations-missing": "$1 ne contient aucune ancienne traduction.",
+ "pm-extra-units-warning": "Des unités supplémentaires peuvent être présentes. Veuillez faire correspondre correctement les unités source et celles de la traduction.",
+ "pm-pagename-missing": "Veuillez saisir le nom de la page.",
+ "pm-add-icon-hover-text": "Ajouter une unité ci-dessous",
+ "pm-swap-icon-hover-text": "Échanger avec l’unité ci-dessous",
+ "pm-delete-icon-hover-text": "Supprimer l’unité",
+ "pm-pagetitle-placeholder": "Entrer le titre de la page",
+ "pm-pagetitle-invalid": "La migration de pages ne fonctionne que pour les pages des traductions, par exemple « Page/fr ». Le titre fourni n’est pas valide.",
+ "pm-pagetitle-missing": "Veuillez entrer le titre de la page.",
+ "pm-langcode-missing": "La migration de page ne fonctionne que sur les pages de traduction, par exemple « Page/fr ». Le titre de la page ne correspond pas à une page de traduction.",
+ "pm-summary-import": "Traduction importée en utilisant la [[Special:PageMigration|migration de page]]",
+ "pm-on-import-message-text": "Les anciennes traductions ont été importées. Utilisez les options ajouter, échanger et supprimer pour ajuster les unités de traduction et cliquez sur le bouton « {{int:pm-savepages-button-label}} » pour les enregistrer. Cliquez sur le bouton « {{int:pm-cancel-button-label}} » pour annuler.",
+ "pm-on-save-message-text": "Les unités de traduction ont été enregistrées. Vous pouvez maintenant entrer le titre d’une nouvelle page de traduction pour la faire migrer ou modifier les unités ci-dessous et enregistrer les changements dans une nouvelle version.",
+ "pm-pagetitle-not-translatable": "$1 ne fait pas partie d’une page traductible.",
+ "pm-translation-unit-fetch-failed": "Une erreur s’est produite lors de la récupération des modules de traduction de la page.",
+ "tpt-translate-title": "Autoriser la traduction du titre de la page",
+ "pp-save-summary": "Page préparée pour la traduction",
+ "pagepreparation": "Préparer la page pour sa traduction",
+ "pagepreparation-summary": "Indiquez un titre de page à préparer pour la traduction.",
+ "pp-pagename-placeholder": "Saisissez le nom de la page",
+ "pp-prepare-button-label": "Préparer",
+ "pp-save-button-label": "Publier",
+ "pp-cancel-button-label": "Annuler",
+ "pp-save-message": "La page a été publiée. Vous pouvez la [$1 modifier].",
+ "pp-prepare-message": "La page a été préparée pour sa traduction. Consultez les différences ci-dessous. Cliquez sur le bouton « {{int:pp-save-button-label}} » si cela vous convient !",
+ "pp-already-prepared-message": "Il semble que la page ait déjà été préparée pour sa traduction. Il n’y a eu aucune modification depuis sa version précédente.",
+ "pp-diff-error": "Une erreur est survenue lors de la récupération des différences sur le serveur.",
+ "pp-pagename-missing": "Veuillez saisir le nom de la page.",
+ "pp-diff-old-header": "Texte source",
+ "pp-diff-new-header": "Texte préparé",
+ "tpt-unlink-confirm": "Veuillez confirmer que vous voulez vraiment supprimer cette page du système de traduction.\nLe sélecteur de langue et les noms des pages des traductions cesseront de fonctionner.\nLes pages des traductions deviendront modifiables.",
+ "tpt-unlink-button": "Retirer la possibilité de traduire",
+ "tpt-unlink-summary": "Possibilité retirée de traduire la page",
+ "tpt-generic-confirm": "Veuillez confirmer l’action.",
+ "tpt-generic-button": "Confirmer",
+ "tpt-validation-not-insertable": "Le nom de variable de traduction « $1 » ne peut pas être utilisé pour créer un insérable dans l’interface de traduction. Évitez d’utiliser des caractères spéciaux.",
+ "tpt-validation-name-reuse": "La variable de traduction « $1 » est définie plusieurs fois avec un contenu différent. Changez les noms des variables afin qu’ils soient uniques au sein de l’unité de traduction.",
+ "visualeditor-annotations-translate-start": "Début du contenu à traduire",
+ "visualeditor-annotations-translate-end": "Fin du contenu à traduire",
+ "visualeditor-annotations-translate-description": "Cette partie est marquée comme étant traductible. Assurez-vous de suivre les recommandations données pour [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration/fr#Changing_the_source_text modifier le texte source].",
+ "visualeditor-annotations-tvar-start": "Début du contenu intraductible",
+ "visualeditor-annotations-tvar-end": "Fin du contenu intraductible",
+ "visualeditor-annotations-tvar-description": "Cette partie est marquée comme intraductible. Consultez la documentation sur la [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration/fr#Segmentation Segmentation du texte source] pour plus d’informations."
+}
diff --git a/Translate/i18n/pagetranslation/frp.json b/Translate/i18n/pagetranslation/frp.json
new file mode 100644
index 00000000..51eaede5
--- /dev/null
+++ b/Translate/i18n/pagetranslation/frp.json
@@ -0,0 +1,105 @@
+{
+ "@metadata": {
+ "authors": [
+ "ChrisPtDe",
+ "Purodha"
+ ]
+ },
+ "pagetranslation": "Traduccion de pâges",
+ "right-pagetranslation": "Marcar des vèrsions de pâges por étre traduites",
+ "tpt-section": "Unitât de traduccion $1",
+ "tpt-section-new": "Novèla unitât de traduccion.\nNom : $1",
+ "tpt-section-deleted": "Unitât de traduccion $1",
+ "tpt-diff-old": "Tèxto devant",
+ "tpt-diff-new": "Tèxto novél",
+ "tpt-submit": "Marcar ceta vèrsion por étre traduita",
+ "tpt-sections-oldnew": "Unitâts de traduccion novèles et ègzistentes",
+ "tpt-sections-deleted": "Unitâts de traduccion suprimâyes",
+ "tpt-sections-template": "Modèlo de pâge de traduccion",
+ "tpt-action-nofuzzy": "Pas envalidar les traduccions",
+ "tpt-badtitle": "Lo nom de pâge balyê ($1) est pas un titro valido",
+ "tpt-nosuchpage": "La pâge $1 ègziste pas",
+ "tpt-oldrevision": "$2 est pas la dèrriére vèrsion de la pâge [[:$1]].\nSolament la dèrriére vèrsion de la pâge pôt étre marcâye por étre traduita.",
+ "tpt-notsuitable": "La pâge $1 sè préte pas por étre traduita.\nAssurâd-vos que contegne la balisa <nowiki><translate></nowiki> et pués qu’èye na sintaxa justa.",
+ "tpt-saveok": "La pâge [[:$1]] est étâye marcâye por étre traduita avouéc $2 unitât{{PLURAL:$2||s}} de traduccion.\nLa pâge pôt étre <span class=\"plainlinks\">[$3 traduita]</span> dês ora.",
+ "tpt-showpage-intro": "Ce-desot les novèles traduccions, celes ègzistentes et pués celes suprimâyes.\nDevant que marcar ceta vèrsion por étre traduita, controlâd que los changements a les sèccions sont petiôts por èvitar de travâly inutilo ux traductors.",
+ "tpt-mark-summary": "Ceta vèrsion est étâye marcâye por étre traduita",
+ "tpt-edit-failed": "Empossiblo de betar a jorn la pâge : $1",
+ "tpt-unmarked": "La pâge $1 est pas més marcâye por étre traduita.",
+ "tpt-list-nopages": "Niona pâge est étâye marcâye por étre traduita ou ben est prèsta por l’étre.",
+ "tpt-new-pages-title": "Pâges proposâyes por étre traduites",
+ "tpt-old-pages-title": "Pâges en cors de traduccion",
+ "tpt-other-pages-title": "Pâges câsses",
+ "tpt-new-pages": "{{PLURAL:$1|Ceta pâge contint|Cetes pâges contegnont}} de tèxto avouéc des balises de traduccion,\nmas niona vèrsion de {{PLURAL:$1|ceta pâge est marcâye por étre traduita|cetes pâges sont marcâyes por étre traduites}}.",
+ "tpt-old-pages": "Des vèrsions de {{PLURAL:$1|ceta pâge|cetes pâges}} sont étâyes marcâyes por étre traduites.",
+ "tpt-other-pages": "{{PLURAL:$1|Na vielye vèrsion de ceta pâge est étâye marcâye por étre traduita|Des vielyes vèrsions de cetes pâges sont étâyes marcâyes por étre traduites}},\nmas {{PLURAL:$1|la dèrriére vèrsion pôt pas étre marcâye|les dèrriéres vèrsions pôvont pas étre marcâyes}} d’ense.",
+ "tpt-select-prioritylangs-reason": "Rêson :",
+ "tpt-rev-mark": "marcar por étre traduita",
+ "tpt-rev-unmark": "enlevar de la traduccion",
+ "tpt-rev-discourage": "dècoragiér",
+ "tpt-rev-encourage": "refâre",
+ "translate-tag-translate-link-desc": "Traduire ceta pâge",
+ "translate-tag-markthis": "Marcar ceta pâge por étre traduita",
+ "translate-tag-markthisagain": "Ceta pâge at avu des <span class=\"plainlinks\">[$1 changements]</span> dês qu’est étâye <span class=\"plainlinks\">[$2 marcâye dèrriérement por étre traduita]</span>.",
+ "translate-tag-hasnew": "Ceta pâge contint des <span class=\"plainlinks\">[$1 changements]</span> que sont pas marcâs por la traduccion.",
+ "tpt-translation-intro": "Ceta pâge est na <span class=\"plainlinks\">[$1 traduccion]</span> de la pâge [[$2]] et la traduccion est complètâye a $3 % et pués a jorn.",
+ "tpt-translation-intro-fuzzy": "Les traduccions dèpassâyes sont marcâyes d’ense.",
+ "tpt-languages-legend": "Ôtres lengoues :",
+ "tpt-languages-nonzero": "$1 ($2% traduit)",
+ "tpt-target-page": "Ceta pâge pôt pas étre betâye a jorn a la man.\nEl est na traduccion de la pâge [[$1]] et la traduccion pôt étre betâye a jorn en empleyent l’[$2 outil de traduccion].",
+ "tpt-unknown-page": "Cet’èspâço de noms est resèrvâ por la traduccion de pâges de contegnu.\nLa pâge que vos tâchiéd de changiér semble corrèspondre a gins de pâge marcâye por étre traduita.",
+ "tpt-render-summary": "Misa a jorn por étre en acôrd avouéc la novèla vèrsion de la pâge sôrsa",
+ "tpt-aggregategroup-add": "Apondre",
+ "tpt-aggregategroup-save": "Encartar",
+ "tpt-aggregategroup-new-name": "Nom :",
+ "tpt-aggregategroup-new-description": "Dèscripcion (u chouèx) :",
+ "tpt-aggregategroup-invalid-group": "Lo groupo ègziste pas",
+ "pt-parse-open": "Balisa &lt;translate> asimètrica.\nModèlo de traduccion : <pre>$1</pre>",
+ "pt-parse-close": "Balisa &lt;/translate> asimètrica.\nModèlo de traduccion : <pre>$1</pre>",
+ "pt-parse-nested": "Les sèccions &lt;translate> embrecâyes sont pas ôtorisâyes.\nTèxto de la balisa : <pre>$1</pre>",
+ "pt-shake-multiple": "Un mouél de marcors de sèccion por yona sèccion.\nTèxto de la sèccion : <pre>$1</pre>",
+ "pt-shake-position": "Marcors de sèccion a na posicion emprèvua.\nTèxto de la sèccion : <pre>$1</pre>",
+ "pt-shake-empty": "Sèccion voueda por lo marcor « $1 ».",
+ "log-description-pagetranslation": "Jornal de les accions liyêyes u sistèmo de traduccion de pâges",
+ "log-name-pagetranslation": "Jornal de les traduccions de pâges",
+ "pt-movepage-title": "Dèplaciér la pâge traduisibla « $1 »",
+ "pt-movepage-blockers": "La pâge traduisibla pôt pas étre renomâye a côsa de {{PLURAL:$1|ceta fôta|cetes fôtes}} :",
+ "pt-movepage-block-base-invalid": "La pâge de bâsa ciba at un titro fôx.",
+ "pt-movepage-block-tp-invalid": "Lo titro de la pâge de traduccion ciba por « [[:$1]] » serêt fôx (trop long ?).",
+ "pt-movepage-block-section-invalid": "Lo titro de la pâge de sèccion ciba por « [[:$1]] » serêt fôx (trop long ?).",
+ "pt-movepage-block-subpage-invalid": "Lo titro de la sot-pâge ciba por « [[:$1]] » serêt fôx (trop long ?).",
+ "pt-movepage-list-pages": "Lista de les pâges a dèplaciér",
+ "pt-movepage-list-translation": "Pâges de traduccion",
+ "pt-movepage-list-section": "Pâges de sèccion",
+ "pt-movepage-list-other": "Ôtres sot-pâges",
+ "pt-movepage-list-count": "En tot $1 pâge{{PLURAL:$1||s}} a dèplaciér.",
+ "pt-movepage-legend": "Dèplaciér la pâge traduisibla",
+ "pt-movepage-current": "Nom d’ora :",
+ "pt-movepage-new": "Novél nom :",
+ "pt-movepage-reason": "Rêson :",
+ "pt-movepage-subpages": "Renomar totes les sot-pâges",
+ "pt-movepage-action-check": "Controlar se lo changement de nom est possiblo",
+ "pt-movepage-action-perform": "Renomar",
+ "pt-movepage-action-other": "Changiér la ciba",
+ "pt-movepage-logreason": "Partia de la pâge traduisibla « $1 ».",
+ "pt-movepage-started": "Ora la pâge de bâsa est renomâye.\nVolyéd controlar lo [[Special:Log/pagetranslation|jornal de les traduccions de pâges]] por repèrar des fôtes et por liére lo mèssâjo d’avance.",
+ "pt-locked-page": "Ceta pâge est vèrrolyêye perce que la pâge traduisibla est aprés étre renomâye.",
+ "pt-deletepage-lang-title": "Suprèssion de la pâge de traduccion « $1 ».",
+ "pt-deletepage-tp-title": "Suprèssion de la pâge traduisibla « $1 ».",
+ "pt-deletepage-invalid-title": "La pâge spècifiâye est pas valida.",
+ "pt-deletepage-action-check": "Listar les pâges a suprimar",
+ "pt-deletepage-action-perform": "Fâre la suprèssion",
+ "pt-deletepage-action-other": "Changiér la ciba",
+ "pt-deletepage-lang-legend": "Suprimar la pâge de traduccion",
+ "pt-deletepage-tp-legend": "Suprimar la pâge traduisibla",
+ "pt-deletepage-current": "Nom de la pâge :",
+ "pt-deletepage-reason": "Rêson :",
+ "pt-deletepage-subpages": "Suprimar totes les sot-pâges",
+ "pt-deletepage-list-pages": "Lista de les pâges a suprimar",
+ "pt-deletepage-list-translation": "Pâges de traduccion",
+ "pt-deletepage-list-section": "Pâges de sèccion",
+ "pt-deletepage-list-other": "Ôtres sot-pâges",
+ "pt-deletepage-list-count": "En tot $1 pâge{{PLURAL:$1||s}} a suprimar.",
+ "pt-deletepage-full-logreason": "Partia de la pâge traduisibla « $1 ».",
+ "pt-deletepage-lang-logreason": "Partia de la pâge de traduccion « $1 »."
+}
diff --git a/Translate/i18n/pagetranslation/frr.json b/Translate/i18n/pagetranslation/frr.json
new file mode 100644
index 00000000..1dbb16a1
--- /dev/null
+++ b/Translate/i18n/pagetranslation/frr.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Murma174"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% auersaat)"
+}
diff --git a/Translate/i18n/pagetranslation/fur.json b/Translate/i18n/pagetranslation/fur.json
new file mode 100644
index 00000000..9cfdac25
--- /dev/null
+++ b/Translate/i18n/pagetranslation/fur.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Klenje",
+ "Tocaibon"
+ ]
+ },
+ "pagetranslation": "Traduzion di une pagjine",
+ "tpt-diff-old": "Test precedent",
+ "tpt-diff-new": "Gnûf test",
+ "tpt-select-prioritylangs-reason": "Reson:",
+ "tpt-sections-prioritylangs": "Lenghis prioritariis",
+ "translate-tag-translate-link-desc": "Tradûs cheste pagjine",
+ "tpt-languages-legend": "Altris lenghis:",
+ "tpt-languages-zero": "Scomence a tradusi in cheste lenghe",
+ "tpt-languages-nonzero": "$1 ($2% traduzude)",
+ "tpt-tab-translate": "Tradûs",
+ "tpt-aggregategroup-add": "Zonte",
+ "tpt-aggregategroup-save": "Salve",
+ "tpt-aggregategroup-new-name": "Non:",
+ "pt-movepage-current": "Non atuâl:",
+ "pt-movepage-new": "Gnûf non:",
+ "pt-movepage-reason": "Reson:",
+ "pt-deletepage-current": "Non de pagjine:",
+ "pt-deletepage-reason": "Reson:"
+}
diff --git a/Translate/i18n/pagetranslation/fy.json b/Translate/i18n/pagetranslation/fy.json
new file mode 100644
index 00000000..ffac3550
--- /dev/null
+++ b/Translate/i18n/pagetranslation/fy.json
@@ -0,0 +1,266 @@
+{
+ "@metadata": {
+ "authors": [
+ "PiefPafPier",
+ "Robin van der Vliet",
+ "Robin0van0der0vliet"
+ ]
+ },
+ "pagetranslation": "Oersetten fan siden",
+ "nstab-translations": "Oersetienheid",
+ "right-pagetranslation": "Sideferzjes foar oersetten frijjaan",
+ "action-pagetranslation": "oersetbere siden te behearen",
+ "tps-edit-sourcepage-text": "Jo bewurkje de grûntekst fan in oersettingsside. Soargje asjebleaft dat jo bekend binne mei de neikommende dokumintaasje:\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text Feroarjen fan 'e grûntekst]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Markup_examples Foarbyld fan te brûken opmaak]",
+ "tps-edit-sourcepage-ve-warning-limited-text": "Guon oersetbere stikken binne faaks net bewurkber yn dizze bewurker. Brûk de boarnebewurker om dy te bewurkjen.",
+ "tps-edit-sourcepage-ve-warning-title": "Warskôging: Net-stipe side",
+ "tps-edit-sourcepage-ve-warning-text": "Jo bewurkje in oersetbere side. Yn dizze bewurker wurdt dat offisjeel noch net stipe. Graach de boarnebewurker brûke.",
+ "tps-edit-sourcepage-ve-warning-button": "Bêst",
+ "tpt-section": "Oersetienheid $1",
+ "tpt-section-new": "Nije oersetienheid.\nNamme: $1",
+ "tpt-section-deleted": "Oersetienheid $1",
+ "tpt-diff-old": "Eardere tekst",
+ "tpt-diff-new": "Nije tekst",
+ "tpt-submit": "Dizze ferzje foar oersetten frijjaan",
+ "tpt-sections-oldnew": "Nije en besteande oersetienheden",
+ "tpt-sections-deleted": "Wiske oersetienheden",
+ "tpt-sections-template": "Berjocht fan 'e oersettingsside",
+ "tpt-action-nofuzzy": "Oersettings net as ferâldere merkbite",
+ "tpt-badtitle": "De opjûne sidenamme ($1) is gjin jildige titel",
+ "tpt-nosuchpage": "De side $1 bestiet net",
+ "tpt-oldrevision": "$2 is net de lêste ferzje fan 'e side [[:$1]].\nInkeld de lêste ferzjes kinne foar oersetten frijjûn wurde.",
+ "tpt-notsuitable": "De side $1 is net ree foar oersetten.\nSoargje dat er $2-oantsjuttings kriget, en in jildige syntaks.",
+ "tpt-saveok": "De side [[:$1]] is foar oersetten opmakke mei $2 {{PLURAL:$2|oersetienheid|oersetienheden}}.\nDe side kin no <span class=\"plainlinks\">[$3 oerset]</span> wurde.",
+ "tpt-saveok-first": "Jo kinne foar dizze side in [[Special:PageMigration|al besteande oersetting ymportearje]] (at dy der is).",
+ "tpt-offer-notify": "Jo kinne <span class=\"plainlinks\">[$1 oersetters in melding jaan]</span> oer dizze side.",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|De list fan oersetbere siden besjen.]]",
+ "tpt-showpage-intro": "Hjirûnder steane de nije, besteande en wiske oersetienheden fermeld.\nBesjoch, foar't dizze ferzje foar oersetten frijjûn wurdt, oft de wizigings oan 'e oersetienheden sa lyts mooglik holden binne, om 'e oersetters ûnnedich wurk te besparjen.",
+ "tpt-mark-summary": "Dizze ferzje foar oersetten frijjûn",
+ "tpt-mark-nochanges": "Neat nijs om te feroarjen. It foar oersetten frijjaan fan dizze side, smyt gjin bewurking op foar de side en de besteande oersetienheden.",
+ "tpt-edit-failed": "Koe de side net bywurkje: $1",
+ "tpt-duplicate": "De namme fan oersetienheid $1 wurdt mear as ien kear brûkt.",
+ "tpt-invalid": "De namme fan oersetienheid $1 mei gjin ûnderstreek of skeane streek befetsje.",
+ "tpt-unmarked": "De side [[:$1]] is net langer foar oersetten frijjûn.",
+ "tpt-list-nopages": "Der binne gjin siden foar oersetten frijjûn, of ree om frijjûn te wurden.",
+ "tpt-new-pages-title": "Siden foar oersetten oanbean",
+ "tpt-old-pages-title": "Siden yn oersetting",
+ "tpt-other-pages-title": "Misse siden",
+ "tpt-outdated-pages-title": "Siden mei feroarings yn 'e wacht",
+ "tpt-new-pages": "Dizze {{PLURAL:$1|side befettet|siden befetsje}} tekst mei oersetoantsjuttings,\nmar gjinien ferzje fan 'e {{PLURAL:$1|side|siden}} is op it stuit foar oersetten frijjûn.",
+ "tpt-old-pages": "De lêste {{PLURAL:$1|ferzje fan dizze side is|ferzjes fan dizze siden binne}} foar oersetten frijjûn.",
+ "tpt-other-pages": "{{PLURAL:$1|In âlde ferzje fan dizze side is|Aldere ferzjes fan dizze siden binne}} foar oersetten frijjûn,\nmar de lêste {{PLURAL:$1|ferzje kin|ferzjes kinne}} net foar oersetten frijjûn wurde.",
+ "tpt-outdated-pages": "{{PLURAL:$1|Dizze side hat|Dizze siden hawwe}} net foar oersetten frijjûne feroarings.",
+ "tpt-tag-discouraged": "ûntmoedige",
+ "tpt-tag-oldsyntax": "âlde syntaks",
+ "tpt-tag-no-transclusion-support": "transklúzje net stipe",
+ "tpt-select-prioritylangs": "List fan taalkoades mei prioriteit, skaat mei komma's:",
+ "tpt-select-prioritylangs-force": "Oersettings yn talen dy't gjin prioriteit hawwe tsjingean",
+ "tpt-select-prioritylangs-reason": "Reden:",
+ "tpt-sections-prioritylangs": "Talen mei prioriteit",
+ "tpt-sections-syntaxversion": "Syntaksferzje",
+ "tpt-syntaxversion-text": "Dizze side brûkt noch in âlde ferzje fan 'e boarnesyntaks foar oersetbere siden. De nije ferzje set ûnoersette seksjes tusken HTML-oantsjuttings, om 'e krekte taal fan 'e tekst oan te jaan. Foarbyld: $1. Jo kinne de nije opmaaksyntaks $2 brûke, om beskate foarmen fan ynsluten op plakken dêr't it net gaadlik is tefoaren te kommen, lykas mei it oersetten fan 'e <code>title</code>-eigenskip fan in elemint. It is net mooglik en gean werom nei in âlde syntaksferzje.",
+ "tpt-syntaxversion-label": "De nijste syntaksferzje foar dizze side brûke",
+ "tpt-transclusion": "Transklúzje fan berjochten",
+ "tpt-transclusion-label": "Oersetfeardige transklúzje foar dizze side ynskeakelje",
+ "tpt-rev-mark": "foar oersetten frijjaan",
+ "tpt-rev-unmark": "oersetting ynlûke",
+ "tpt-rev-discourage": "ûntmoedigje",
+ "tpt-rev-encourage": "werombringe",
+ "tpt-rev-mark-tooltip": "De lêste ferzje fan dizze side foar oersetten frijjaan.",
+ "tpt-rev-unmark-tooltip": "Oersetting fan dizze side ynlûke.",
+ "tpt-rev-discourage-tooltip": "It fierder oersetten fan dizze side ûntmoedigje.",
+ "tpt-rev-encourage-tooltip": "It normaal oersetten fan dizze side werombringe.",
+ "translate-tag-translate-link-desc": "Dizze side oersette",
+ "translate-tag-markthis": "Dizze side foar oersetten frijjaan",
+ "translate-tag-markthisagain": "Dizze side hat <span class=\"plainlinks\">[$1 feroarings]</span> ûndergien, nei't er de lêste kear <span class=\"plainlinks\">[$2 foar oersetten frijjûn]</span> is.",
+ "translate-tag-hasnew": "Dizze side befettet <span class=\"plainlinks\">[$1 feroarings]</span> dy't net foar oersetten frijjûn binne.",
+ "tpt-translation-intro": "Dizze side is in <span class=\"plainlinks\">[$1 oersette ferzje]</span> fan 'e side [[$2]], en de oersetting is $3% kompleet.",
+ "tpt-translation-intro-fuzzy": "Ferâldere oersettings wurde op dizze wize merkbiten.",
+ "tpt-languages-legend": "Oare talen:",
+ "tpt-languages-zero": "Begjin de oersetting foar dizze taal",
+ "tpt-languages-nonzero": "$1 ($2% oerset)",
+ "tpt-tab-translate": "Oersette",
+ "tpt-target-page": "Dizze side kin net hânmjittich bywurke wurde.\nIt is in oersetting fan 'e side [[$1]], en kin bywurke wurde mei [$2 it oersettingsark].",
+ "tpt-unknown-page": "Dizze nammeromte is ornearre foar oersettings fan ynhâldlike siden.\nDe side dy't jo besykje te bewurkjen, liket gjin foar oersetten frijjûne side te wêzen.",
+ "tpt-translation-restricted": "It oersetten fan 'e side yn dizze taal, is troch in oersettingsbehearder tsjingien.\n\nReden: $1",
+ "tpt-translation-restricted-no-reason": "It oersetten fan 'e side yn dizze taal, is troch in oersettingsbehearder tsjingien.",
+ "tpt-discouraged-language-force-header": "Dizze side kin net yn it $1 oerset wurde.",
+ "tpt-discouraged-language-force-content": "In oersettingsbehearder hat besletten dat dizze side inkeld yn it $1 oerset wurde kin.",
+ "tpt-discouraged-language-header": "Oersetten yn it $1 hat gjin prioriteit foar dizze side.",
+ "tpt-discouraged-language-content": "In oersettingsbehearder hat besletten en rjochtsje de oersetynspanning op $1.",
+ "tpt-discouraged-language-force": "<strong>Dizze side kin net yn it $2 oerset wurde.</strong>\n\nIn oersettingsbehearder hat besletten dat dizze side inkeld yn it $3 oerset wurde kin.",
+ "tpt-priority-languages": "In oersettingsbehearder hat de talen mei prioriteit foar dizze groep ynsteld op $1.",
+ "tpt-priority-languages-force": "In oersettingsbehearder hat de talen mei prioriteit foar dizze groep ynsteld op $1. Oersetten yn oare talen is net tastien.",
+ "tpt-discouraged-translation-header": "It oersetten fan dizze side wurdt ûntmoedige",
+ "tpt-discouraged-translation-content": "In oersettingsbehearder hat it oersetten fan dizze side ûntmoedige. Jo kinne de side noch oersette, mar de oersettings binne faaks net nuttich.",
+ "tpt-render-summary": "Oanpassing oan nije ferzje fan 'e grûntekstside",
+ "aggregategroups": "Sammelgroepen",
+ "tpt-aggregategroup-add": "Taheakje",
+ "tpt-aggregategroup-save": "Bewarje",
+ "tpt-aggregategroup-close": "Slute",
+ "tpt-aggregategroup-add-new": "Nije sammelgroep taheakje",
+ "tpt-aggregategroup-new-name": "Namme:",
+ "tpt-aggregategroup-new-description": "Beskriuwing (opsjoneel):",
+ "tpt-aggregategroup-remove-confirm": "Wolle jo wier dizze sammelgroep wiskje?",
+ "tpt-aggregategroup-invalid-group": "Groep bestiet net",
+ "tpt-aggregategroup-edit-name": "Namme:",
+ "tpt-aggregategroup-edit-description": "Beskriuwing:",
+ "tpt-aggregategroup-update": "Bewarje",
+ "tpt-aggregategroup-update-cancel": "Annulearje",
+ "tpt-aggregategroup-expand-all-groups": "alle groepen útklappe",
+ "tpt-aggregategroup-collapse-all-groups": "alle groepen ynklappe",
+ "tpt-aggregategroup-expand-group": "groep útklappe",
+ "tpt-aggregategroup-collapse-group": "groep ynklappe",
+ "tpt-invalid-group": "Unjildige groep",
+ "pt-parse-open": "Wanwichtige &lt;translate>-oantsjutting.\nOersettingsberjocht: <pre>$1</pre>",
+ "pt-parse-close": "Wanwichtige &lt;/translate>-oantsjutting.\nOersettingsberjocht: <pre>$1</pre>",
+ "pt-parse-nested": "Neske &lt;translate>-oersetienheden binne net tastien.\nTekst fan 'e oantsjutting: <pre>$1</pre>",
+ "pt-shake-multiple": "Ferskate oersetienheid-markearders foar ien oersetienheid.\nSoargje dat de oersetienheden skaat wurde troch wytrigels.\nTekst fan 'e oersetienheid: <pre>$1</pre>",
+ "pt-shake-position": "Oersetienheid-markearders op in nuver plak.\nTekst fan 'e oersetienheid: <pre>$1</pre>",
+ "pt-shake-empty": "Lege oersetienheid foar markearder \"$1\".",
+ "log-description-pagetranslation": "Loch foar hannelings oangeande it side-oersetsysteem",
+ "log-name-pagetranslation": "Side-oersettingsloch",
+ "logentry-pagetranslation-mark": "$1 hat $3 foar oersetten {{GENDER:$2|frijjûn}}",
+ "logentry-pagetranslation-unmark": "$1 hat $3 foar it oersetsysteem {{GENDER:$2|ynlutsen}}",
+ "logentry-pagetranslation-moveok": "$1 hat it omneamen fan 'e oersetbere side $3 ta $4 {{GENDER:$2|foltôge}}",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|stjitte}} ûnder it omneamen fan 'e side $3 ta $4 op in probleem",
+ "logentry-pagetranslation-deletefok": "$1 hat it wiskjen fan 'e oersetbere side $3 {{GENDER:$2|foltôge}}",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|koe}} $3, hearrend by de oersetbere side $4, net wiskje",
+ "logentry-pagetranslation-deletelok": "$1 hat it wiskjen fan 'e oersettingsside $3 {{GENDER:$2|foltôge}}",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|koe}} $3, hearrend by de oersettingsside $4, net wiskje",
+ "logentry-pagetranslation-encourage": "$1 hat it oersetten fan $3 {{GENDER:$2|oanmoedige}}",
+ "logentry-pagetranslation-discourage": "$1 hat it oersetten fan $3 {{GENDER:$2|ûntmoedige}}",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 hat de taalprioriteit foar de oersetbere side $3 {{GENDER:$2|ynlutsen}}",
+ "logentry-pagetranslation-prioritylanguages": "$1 hat de taalprioriteit foar de oersetbere side $3 {{GENDER:$2|ynsteld}} op $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 hat de talen foar de oersetbere side $3 {{GENDER:$2|beheind}} ta $5",
+ "logentry-pagetranslation-associate": "$1 hat de oersetbere side $3 {{GENDER:$2|taheakke}} oan sammelgroep $4",
+ "logentry-pagetranslation-dissociate": "$1 hat de oersetbere side $3 {{GENDER:$2|fuorthelle}} út sammelgroep $4",
+ "log-action-filter-pagetranslation": "Type fan hanneling:",
+ "log-action-filter-pagetranslation-mark": "Oersetting frijjaan",
+ "log-action-filter-pagetranslation-unmark": "Oersetting ynlûken",
+ "log-action-filter-pagetranslation-move": "Siden omneamen",
+ "log-action-filter-pagetranslation-delete": "Siden wiskjen",
+ "log-action-filter-pagetranslation-encourage": "Oersetten oanmoedigjen",
+ "log-action-filter-pagetranslation-discourage": "Oersetten ûntmoedigjen",
+ "log-action-filter-pagetranslation-prioritylanguages": "Taalprioriteit wizigjen",
+ "log-action-filter-pagetranslation-aggregategroups": "Sammelgroepen wizigjen",
+ "log-description-messagebundle": "Loch foar hannelings oangeande it berjochtebondelsysteem",
+ "log-name-messagebundle": "Berjochtebondelloch",
+ "logentry-messagebundle-moveok": "$1 hat it omneamen fan 'e berjochtebondel $3 ta $4 {{GENDER:$2|foltôge}}",
+ "logentry-messagebundle-movenok": "$1 {{GENDER:$2|stjitte}} ûnder it omneamen fan 'e berjochtebondel $3 ta $4 op in probleem",
+ "logentry-messagebundle-deletefok": "$1 hat it wiskjen fan 'e berjochtebondel $3 {{GENDER:$2|foltôge}}",
+ "logentry-messagebundle-deletefnok": "$1 {{GENDER:$2|koe}} $3, hearrend by de berjochtebondel $4, net wiskje",
+ "log-action-filter-messagebundle": "Type fan hanneling:",
+ "log-action-filter-messagebundle-move": "Omneamen fan berjochtebondels",
+ "log-action-filter-messagebundle-delete": "Wiskjen fan berjochtebondels",
+ "pt-movepage-title": "Omneamen fan oersetbere side \"$1\"",
+ "pt-movepage-messagebundle-title": "Berjochtebondel \"$1\" omneame",
+ "pt-movepage-blockers": "De oersetbere side kin net omneamd wurde om de neikommende {{PLURAL:$1|flater|flaters}}:",
+ "pt-movepage-block-base-invalid": "De beëage namme foar de oersetbere side, is gjin jildige titel.",
+ "pt-movepage-block-tp-invalid": "De beëage titel foar de oersettingsside fan \"[[:$1]]\", is ûnjildich (te lang?).",
+ "pt-movepage-block-section-invalid": "De beëage sidetitel foar de oersetienheid fan \"[[:$1]]\", is ûnjildich (te lang?).",
+ "pt-movepage-block-subpage-invalid": "De beëage titel foar de subside fan \"[[:$1]]\", is ûnjildich (te lang?).",
+ "pt-movepage-block-talkpage-invalid": "De beëage titel foar de oerlisside fan \"[[:$1]]\", is ûnjildich (te lang?).",
+ "pt-movepage-block-unknown-page": "De side ([[:$1]]) dy't omneamd wurdt liket gjin part fan 'e oersetbere side te wêzen.",
+ "pt-movepage-block-ns-talk-unsupported": "De side ([[:$1]]) wurdt omneamd nei in nammeromte dy't gjin oerlissiden stipet.",
+ "pt-movepage-block-rename-failed": "Der gong wat mis mei it generearjen fan in nije titel foar de side [[:$1]]",
+ "pt-movepage-list-pages": "List fan om te neamen siden",
+ "pt-movepage-list-translation": "Oersettings{{PLURAL:$1|side|siden}}",
+ "pt-movepage-list-section": "{{PLURAL:$1|Side fan oersetienheid|Siden fan oersetienheden}}",
+ "pt-movepage-list-translatable": "Foar oersetten frijjûne {{PLURAL:$1|subside|subsiden}}",
+ "pt-movepage-list-translatable-note": "Dizze siden moatte apart omneamd wurde.",
+ "pt-movepage-list-other": "Oare {{PLURAL:$1|subside|subsiden}}",
+ "pt-movepage-list-count": "Yn totaal $1 {{PLURAL:$1|side|siden}} om te neamen, ynklusyf $2 {{PLURAL:$2|subside|subsiden}} en $3 {{PLURAL:$3|oerlisside|oerlissiden}}.",
+ "pt-movepage-page-count-limit": "Dizze oersetbere side bestiet út mear as $1 {{PLURAL:$1|side|siden}}. It omneamen fan safolle siden hat bliken dien ûnbetrouber te wêzen. Nim kontakt op mei in systeembehearder om it mei in ûnderhâldsskript te dwaan.",
+ "pt-movepage-list-no-pages": "Gjin siden fûn.",
+ "pt-movepage-legend": "Oersetbere side omneame",
+ "pt-movepage-messagebundle-legend": "Berjochtebondel omneame",
+ "pt-movepage-current": "Hjoeddeiske namme:",
+ "pt-movepage-new": "Nije namme:",
+ "pt-movepage-reason": "Reden:",
+ "pt-movepage-subpages": "Alle subsiden omneame",
+ "pt-movepage-talkpages": "Oerlissiden omneame",
+ "pt-movepage-talkpage-exists": "(Hat oerlisside)",
+ "pt-movepage-action-check": "Gean nei oft omneamen wol mooglik is",
+ "pt-movepage-action-perform": "Omneamen útfiere",
+ "pt-movepage-action-other": "Doel feroarje",
+ "pt-movepage-intro": "Dizze bysûndere side lit jo siden omneame dy't foar oersetten frijjûn binne.\nDe omneamhanneling giet net yn in omsjoch, om't in protte siden omneamd wurde moatte.\nUnder it omneamen fan 'e siden is it net mooglik wat mei de oanbelangjende siden te dwaan.\nMislearrings wurde yn it [[$1|loch]] set, en moatte mei de hân opholpen wurde.",
+ "pt-movepage-logreason": "Part fan 'e oersetbere side \"$1\"",
+ "pt-movepage-started": "Besjoch oer in lyts hoartsje it [[$1|loch]] foar flaters en de dienmelding.",
+ "pt-locked-page": "Dizze side is skoattele om't de oersetbere side op it stuit omneamd wurdt.",
+ "pt-deletepage-lang-title": "Wiskjen fan oersettingsside \"$1\"",
+ "pt-deletepage-tp-title": "Wiskjen fan oersetbere side \"$1\"",
+ "pt-deletepage-mb-title": "Wiskjen fan berjochtebondel \"$1\"",
+ "pt-deletepage-invalid-title": "De opjûne side is net jildich.",
+ "pt-deletepage-invalid-text": "De opjûne side is gjin oersetbere side of oersettingsside.",
+ "pt-deletepage-action-check": "Te wiskjen siden oanjaan",
+ "pt-deletepage-action-perform": "Wiskjen útfiere",
+ "pt-deletepage-action-other": "Doel feroarje",
+ "pt-deletepage-lang-legend": "Oersettingsside wiskje",
+ "pt-deletepage-tp-legend": "Oersetbere side wiskje",
+ "pt-deletepage-mb-legend": "Berjochtebondel wiskje",
+ "pt-deletepage-any-legend": "Oersetbere side, berjochtebondel of oersettingsside wiskje",
+ "pt-deletepage-current": "Sidenamme:",
+ "pt-deletepage-reason": "Reden:",
+ "pt-deletepage-reason-details": "Oare/oanfoljende reden:",
+ "pt-deletepage-reason-other": "Oare reden",
+ "pt-deletepage-subpages": "Alle subsiden wiskje",
+ "pt-deletepage-list-pages": "List fan te wiskjen siden",
+ "pt-deletepage-list-translation": "Oersettingssiden",
+ "pt-deletepage-list-section": "Siden fan oersetienheden",
+ "pt-deletepage-list-other": "Oare subsiden",
+ "pt-deletepage-list-count": "Yn totaal $1 {{PLURAL:$1|side|siden}} en $2 {{PLURAL:$2|subside|subsiden}} te wiskjen.",
+ "pt-deletepage-list-no-pages": "Gjin siden fûn.",
+ "pt-deletepage-full-logreason": "Part fan 'e oersetbere side \"$1\"",
+ "pt-deletepage-lang-logreason": "Part fan 'e oersettingsside \"$1\"",
+ "pt-deletepage-started": "Besjoch it [[$1|loch]] foar flaters en de dienmelding.",
+ "pt-deletepage-intro": "Dizze bysûndere side lit jo in folsleine oersetbere side, berjochtebondel of ôfsûnderlike oersettingsside yn in taal wiskje.\nDe wiskhanneling giet net yn in omsjoch, om't alle siden dy't fan har ôfhinklik binne ek wiske wurde.\nMislearrings wurde yn it [[$1|oanbelangjende loch]] set, en moatte mei de hân opholpen wurde.",
+ "pagemigration": "Oersettingssiden migrearje",
+ "pagemigration-summary": "Jou in oersettingsside op, en bring de oersettings werom dy't makke binne foar't dit oersetsysteem op 'e side ynskeakele waard.",
+ "pm-import-button-label": "Ymportearje",
+ "pm-savepages-button-label": "Bewarje",
+ "pm-cancel-button-label": "Annulearje",
+ "pm-page-does-not-exist": "$1 bestiet net.",
+ "pm-old-translations-missing": "$1 befettet gjin âlde oersettings.",
+ "pm-extra-units-warning": "Der binne mooglik ekstra ienheden oanwêzich. Graach de grûntekst- en oersetienheden passend meitsje.",
+ "pm-pagename-missing": "Graach de sidenamme yntype.",
+ "pm-add-icon-hover-text": "Hjirûnder in ienheid taheakje",
+ "pm-swap-icon-hover-text": "Mei de ienheid hjirûnder wikselje",
+ "pm-delete-icon-hover-text": "De ienheid wiskje",
+ "pm-pagetitle-placeholder": "Typ de sidetitel yn",
+ "pm-pagetitle-invalid": "Siden migrearjen wurket allinnich by oersettingssiden, bygelyks \"Page/fy\". De opjûne titel is gjin jildige titel.",
+ "pm-pagetitle-missing": "Graach de sidetitel yntype.",
+ "pm-langcode-missing": "Siden migrearjen wurket allinnich by oersettingssiden, bygelyks \"Page/fy\". De opjûne titel is gjin oersettingsside.",
+ "pm-summary-import": "Ymportearre oersetting by [[Special:PageMigration|migrearjen side]]",
+ "pm-on-import-message-text": "De âlde oersettings binne ymportearre. Brûk de taheak-, wiksel- en wiskopsjes om 'e oersetienheden goed te setten, en klik de knop \"{{int:pm-savepages-button-label}}\" om se fêst te lizzen. Klik de knop \"{{int:pm-cancel-button-label}}\" om se fuort te smiten.",
+ "pm-on-save-message-text": "De oersetienheden binne bewarre. Jo kinne no de titel fan in nije oersettingsside yntype om him te migrearjen, of hjirûnder feroarings oan 'e ienheden meitsje en in nije ferzje bewarje.",
+ "pm-pagetitle-not-translatable": "$1 is net part fan in oersetbere side.",
+ "pm-translation-unit-fetch-failed": "Der gong wat mis mei it opheljen fan 'e oersetienheden foar de side.",
+ "tpt-translate-title": "Oersetting fan 'e sidetitel tastean",
+ "pp-save-summary": "Side foar oersetten foarbewurke",
+ "pagepreparation": "Side foar oersetten foarbewurkje",
+ "pagepreparation-summary": "Jou in sidetitel op om foar oersetten foar te bewurkjen.",
+ "pp-pagename-placeholder": "Typ de sidenamme yn",
+ "pp-prepare-button-label": "Foarbewurkje",
+ "pp-save-button-label": "Publisearje",
+ "pp-cancel-button-label": "Annulearje",
+ "pp-save-message": "De side is publisearre. Jo kinne him [$1 bewurkje].",
+ "pp-prepare-message": "De side is foar oersetten foarbewurke. Bejoch hjirûnder it ferzjeferskil. Klik de knop \"{{int:pp-save-button-label}}\" at it yn oarder is!",
+ "pp-already-prepared-message": "It liket dat de side al foar oersetten foarbewurke is. Der binne gjin feroarings ferlike mei de foarige ferzje.",
+ "pp-diff-error": "Der gong wat mis mei it ferzjeferskil fan 'e server heljen.",
+ "pp-pagename-missing": "Graach de sidenamme yntype.",
+ "pp-diff-old-header": "Boarnetekst",
+ "pp-diff-new-header": "Foarbewurke tekst",
+ "tpt-unlink-confirm": "Graach befêstigje dat jo wier dizze side foar it oersetsysteem ynlûke wolle.\nIt taalkarmenu en de oersette sidenammen sille net mear wurkje.\nDe oersettingssiden wurde bewurkber.",
+ "tpt-unlink-button": "Oersetting ynlûke",
+ "tpt-unlink-summary": "Oersetting fan 'e side ynlutsen",
+ "tpt-generic-confirm": "Graach de hanneling befêstigje.",
+ "tpt-generic-button": "Befêstigje",
+ "tpt-validation-not-insertable": "De namme fan 'e oersettingsfariabele \"$1\" kin net ynbrocht wurde yn 'e oersetomjouwing. Mij it brûken fan spesjale tekens.",
+ "tpt-validation-name-reuse": "De oersettingsfariabele \"$1\" is ferskate kearen definiearre mei oare ynhâld. Jou de fariabelen binnen de oersetienheid unike nammen.",
+ "visualeditor-annotations-translate-start": "Begjin fan 'e oer te setten ynhâld",
+ "visualeditor-annotations-translate-end": "Ein fan 'e oer te setten ynhâld",
+ "visualeditor-annotations-translate-description": "Dit berik is markearre as oersetber. Soargje asjebleaft dat jo de rjochtlinen folgje dy't jûn binne foar [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text it feroarjen fan 'e grûntekst].",
+ "visualeditor-annotations-tvar-start": "Begjin fan 'e net-oersetbere ynhâld",
+ "visualeditor-annotations-tvar-end": "Ein fan 'e net-oersetbere ynhâld",
+ "visualeditor-annotations-tvar-description": "Dit berik is markearre as net-oersetber. Rieplachtsje it [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Segmentation Ferpartsjen fan 'e grûntekst] foar mear ynformaasje."
+}
diff --git a/Translate/i18n/pagetranslation/ga.json b/Translate/i18n/pagetranslation/ga.json
new file mode 100644
index 00000000..b529d025
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ga.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Tem",
+ "පසිඳු කාවින්ද"
+ ]
+ },
+ "tpt-select-prioritylangs-reason": "Fáth:",
+ "tpt-languages-nonzero": "$1 ($2% aistrithe)",
+ "tpt-aggregategroup-save": "Sábháil",
+ "tpt-aggregategroup-new-name": "Ainm:",
+ "pt-deletepage-reason": "Fáth:"
+}
diff --git a/Translate/i18n/pagetranslation/gaa.json b/Translate/i18n/pagetranslation/gaa.json
new file mode 100644
index 00000000..ddcaf875
--- /dev/null
+++ b/Translate/i18n/pagetranslation/gaa.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mybluberet"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 (atsake $2%)"
+}
diff --git a/Translate/i18n/pagetranslation/gcr.json b/Translate/i18n/pagetranslation/gcr.json
new file mode 100644
index 00000000..975805f7
--- /dev/null
+++ b/Translate/i18n/pagetranslation/gcr.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "LeGuyanaisPure"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% tradjwi)"
+}
diff --git a/Translate/i18n/pagetranslation/gd.json b/Translate/i18n/pagetranslation/gd.json
new file mode 100644
index 00000000..d4b0c4cf
--- /dev/null
+++ b/Translate/i18n/pagetranslation/gd.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Akerbeltz"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% air eadar-theangachadh)"
+}
diff --git a/Translate/i18n/pagetranslation/gl.json b/Translate/i18n/pagetranslation/gl.json
new file mode 100644
index 00000000..2d68cce5
--- /dev/null
+++ b/Translate/i18n/pagetranslation/gl.json
@@ -0,0 +1,203 @@
+{
+ "@metadata": {
+ "authors": [
+ "ArenaL5",
+ "Banjo",
+ "Elisardojm",
+ "Fisterraeomar",
+ "Pols12",
+ "Toliño"
+ ]
+ },
+ "pagetranslation": "Tradución de páxinas",
+ "right-pagetranslation": "Marcar as versións de páxinas para seren traducidas",
+ "action-pagetranslation": "administrar as páxinas traducibles",
+ "tpt-section": "Unidade de tradución $1",
+ "tpt-section-new": "Nova unidade de tradución. Nome: $1",
+ "tpt-section-deleted": "Unidade de tradución $1",
+ "tpt-diff-old": "Texto anterior",
+ "tpt-diff-new": "Texto novo",
+ "tpt-submit": "Marcar esta versión para ser traducida",
+ "tpt-sections-oldnew": "Unidades de tradución novas e existentes",
+ "tpt-sections-deleted": "Unidades de tradución borradas",
+ "tpt-sections-template": "Modelo de páxina de tradución",
+ "tpt-action-nofuzzy": "Non invalidar as traducións",
+ "tpt-badtitle": "O nome de páxina dado (\"$1\") non é un título válido",
+ "tpt-nosuchpage": "A páxina \"$1\" non existe",
+ "tpt-oldrevision": "$2 non é a última versión da páxina \"[[:$1]]\".\nSó as últimas versións poden ser marcadas para seren traducidas.",
+ "tpt-notsuitable": "A páxina \"$1\" non é válida para ser traducida.\nComprobe que teña as etiquetas <nowiki><translate></nowiki> e mais unha sintaxe válida.",
+ "tpt-saveok": "A páxina \"[[:$1]]\" foi marcada para ser traducida, {{PLURAL:$2|cunha unidade de tradución|con $2 unidades de tradución}}.\nA páxina agora pode ser <span class=\"plainlinks\">[$3 traducida]</span>.",
+ "tpt-offer-notify": "Pode <span class=\"plainlinks\">[$1 notificar aos tradutores]</span> sobre esta páxina.",
+ "tpt-showpage-intro": "A continuación están listadas as unidades de tradución novas, existentes e borradas.\nAntes de marcar esta versión para ser traducida, comprobe que as modificacións feitas ás unidades de tradución foron minimizadas para evitarlles traballo innecesario aos tradutores.",
+ "tpt-mark-summary": "Marcou esta versión para ser traducida",
+ "tpt-mark-nochanges": "Non hai cambios para revisar. Marcando esta páxina para tradución non editará a páxina nen nengunha unidade de tradución existente.",
+ "tpt-edit-failed": "Non se puido actualizar a páxina: $1",
+ "tpt-duplicate": "O nome da unidade de tradución \"$1\" úsase máis dunha vez.",
+ "tpt-unmarked": "A páxina [[:$1]] xa non está marcada para traducir.",
+ "tpt-list-nopages": "Non hai ningunha páxina marcada para ser traducida, nin preparada para ser marcada para ser traducida.",
+ "tpt-new-pages-title": "Páxinas propostas para a súa tradución",
+ "tpt-old-pages-title": "Páxinas en tradución",
+ "tpt-other-pages-title": "Páxinas rotas",
+ "tpt-new-pages": "{{PLURAL:$1|Esta páxina contén|Estas páxinas conteñen}} texto con etiquetas de tradución, pero ningunha versión {{PLURAL:$1|desta páxina|destas páxinas}} está actualmente marcada para ser traducida.",
+ "tpt-old-pages": "A última versión {{PLURAL:$1|desta páxina|destas páxinas}} foi marcada para ser traducida.",
+ "tpt-other-pages": "{{PLURAL:$1|Hai marcada para traducir unha a versión vella desta páxina|Hai marcadas para traducir algunhas versións vellas destas páxinas}}, pero {{PLURAL:$1|a última versión|as últimas versións}} non se {{PLURAL:$1|pode|poden}} marcar.",
+ "tpt-select-prioritylangs": "Lista dos códigos das linguas prioritarias (separados por comas):",
+ "tpt-select-prioritylangs-force": "Impedir as traducións noutras linguas que non sexan as prioritarias",
+ "tpt-select-prioritylangs-reason": "Motivo:",
+ "tpt-sections-prioritylangs": "Linguas prioritarias",
+ "tpt-rev-mark": "marcar para traducir",
+ "tpt-rev-unmark": "eliminar da tradución",
+ "tpt-rev-discourage": "rexeitar",
+ "tpt-rev-encourage": "restaurar",
+ "tpt-rev-mark-tooltip": "Marcar a última versión desta páxina para a súa tradución.",
+ "tpt-rev-unmark-tooltip": "Eliminar esta páxina da tradución.",
+ "tpt-rev-discourage-tooltip": "Rexeitar máis traducións desta páxina.",
+ "tpt-rev-encourage-tooltip": "Restaurar esta páxina á tradución normal.",
+ "translate-tag-translate-link-desc": "Traducir esta páxina",
+ "translate-tag-markthis": "Marcar esta páxina para a súa tradución",
+ "translate-tag-markthisagain": "Esta páxina sufriu <span class=\"plainlinks\">[$1 cambios]</span> desde que foi <span class=\"plainlinks\">[$2 marcada para a súa tradución]</span> por última vez.",
+ "translate-tag-hasnew": "Esta páxina contén <span class=\"plainlinks\">[$1 cambios]</span> que non están marcados para a súa tradución.",
+ "tpt-translation-intro": "Esta páxina é unha <span class=\"plainlinks\">[$1 versión traducida]</span> da páxina \"[[$2]]\" e a tradución está completada ao $3%.",
+ "tpt-translation-intro-fuzzy": "As traducións obsoletas están marcadas así.",
+ "tpt-languages-legend": "Outras linguas:",
+ "tpt-languages-zero": "Comezar a tradución nesta lingua",
+ "tpt-languages-nonzero": "$1 (traducida ao $2%)",
+ "tpt-tab-translate": "Traducir",
+ "tpt-target-page": "Esta páxina non se pode actualizar manualmente.\nEsta páxina é unha tradución da páxina \"[[$1]]\" e a tradución pódese actualizar usando [$2 a ferramenta de tradución].",
+ "tpt-unknown-page": "Este espazo de nomes está reservado para traducións de páxinas de contido.\nA páxina que está intentando editar parece non corresponder a algunha páxina marcada para ser traducida.",
+ "tpt-translation-restricted": "Un administrador de traducións impediu a tradución da páxina nesta lingua.\n\nMotivo: $1",
+ "tpt-discouraged-language-force-header": "Esta páxina non se pode traducir ao $1.",
+ "tpt-discouraged-language-force-content": "Un administrador de traducións decidiu que esta páxina só se pode traducir ao $1.",
+ "tpt-discouraged-language-header": "A tradución desta páxina ao $1 non é unha tarefa prioritaria.",
+ "tpt-discouraged-language-content": "Un administrador de traducións decidiu centrar os esforzos en traducir a páxina ao $1.",
+ "tpt-discouraged-language-force": "<strong>Esta páxina non se pode traducir ao $2.</strong>\n\nUn administrador de traducións decidiu que esta páxina só se pode traducir ao $3.",
+ "tpt-priority-languages": "Un administrador de traducións definiu as linguas prioritarias deste grupo a $1.",
+ "tpt-render-summary": "Actualizando para coincidir coa nova versión da páxina de orixe",
+ "aggregategroups": "Grupos de agregación",
+ "tpt-aggregategroup-add": "Engadir",
+ "tpt-aggregategroup-save": "Gardar",
+ "tpt-aggregategroup-add-new": "Engadir un novo grupo de agregación",
+ "tpt-aggregategroup-new-name": "Nome:",
+ "tpt-aggregategroup-new-description": "Descrición (opcional):",
+ "tpt-aggregategroup-remove-confirm": "Está seguro de querer borrar o grupo de agregación?",
+ "tpt-aggregategroup-invalid-group": "O grupo non existe",
+ "tpt-aggregategroup-edit-name": "Nome:",
+ "tpt-aggregategroup-edit-description": "Descrición:",
+ "tpt-aggregategroup-update": "Gardar",
+ "tpt-aggregategroup-update-cancel": "Cancelar",
+ "tpt-invalid-group": "Grupo non válido",
+ "pt-parse-open": "Etiqueta &lt;translate> desequilibrada.\nModelo de tradución: <pre>$1</pre>",
+ "pt-parse-close": "Etiqueta &lt;/translate> desequilibrada.\nModelo de tradución: <pre>$1</pre>",
+ "pt-parse-nested": "Non se permiten as unidades de tradución &lt;translate> aniñadas.\nTexto da etiqueta: <pre>$1</pre>",
+ "pt-shake-multiple": "Hai demasiados marcadores de unidade de tradución para unha única unidade.\nTexto da unidade de tradución: <pre>$1</pre>",
+ "pt-shake-position": "Os marcadores de unidade de tradución atópanse nunha posición inesperada.\nTexto da unidade de tradución: <pre>$1</pre>",
+ "pt-shake-empty": "Unidade de tradución baleira para o marcador \"$1\".",
+ "log-description-pagetranslation": "Rexistro de accións e operacións relacionadas co sistema de tradución de páxinas",
+ "log-name-pagetranslation": "Rexistro de tradución de páxinas",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|marcou}} \"$3\" para a súa tradución",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|eliminou}} \"$3\" do sistema de tradución",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|completou}} o cambio de nome da páxina traducible \"$3\" a \"$4\"",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|atopou}} un problema ao mover a páxina \"$3\" a \"$4\"",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|completou}} o borrado da páxina traducible \"$3\"",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|tivo}} un problema ao borrar \"$3\", que pertence á páxina traducible \"$4\"",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|completou}} o borrado da páxina de tradución \"$3\"",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|tivo}} un problema ao borrar \"$3\", que pertence á páxina de tradución \"$4\"",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|estimulou}} a tradución de \"$3\"",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|desalentou}} a tradución de \"$3\"",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|eliminou}} as linguas prioritarias da páxina traducible \"$3\"",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|definiu}} as linguas prioritarias da páxina traducible \"$3\" a $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|limitou}} as linguas da páxina traducible \"$3\" a $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|engadiu}} a páxina traducible \"$3\" ao grupo de agregación \"$4\"",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|eliminou}} a páxina traducible \"$3\" do grupo de agregación \"$4\"",
+ "log-action-filter-pagetranslation": "Tipo de acción:",
+ "log-action-filter-pagetranslation-mark": "Marcar para traducir",
+ "log-action-filter-pagetranslation-unmark": "Eliminar de tradución",
+ "log-action-filter-pagetranslation-move": "Traslados da páxina",
+ "log-action-filter-pagetranslation-delete": "Borrado de páxinas",
+ "log-action-filter-pagetranslation-encourage": "Incitación á tradución",
+ "log-action-filter-pagetranslation-discourage": "Tradución non recomendada",
+ "log-action-filter-pagetranslation-prioritylanguages": "Modificación da prioridade das linguas",
+ "log-action-filter-pagetranslation-aggregategroups": "Agregar a modificación dos grupos",
+ "pt-movepage-title": "Mover a páxina traducible \"$1\"",
+ "pt-movepage-blockers": "Non se pode trasladar a páxina traducible a un novo nome debido {{PLURAL:$1|ao seguinte erro|aos seguintes erros}}:",
+ "pt-movepage-block-base-invalid": "O nome da páxina traducible de destino ten un título incorrecto.",
+ "pt-movepage-block-tp-invalid": "O título da páxina de tradución de destino para \"[[:$1]]\" é incorrecto (quizais sexa longo de máis).",
+ "pt-movepage-block-section-invalid": "O título da páxina de destino para \"[[:$1]]\" para a unidade de tradución é incorrecto (quizais sexa longo de máis).",
+ "pt-movepage-block-subpage-invalid": "O título da subpáxina de destino para \"[[:$1]]\" é incorrecto (quizais sexa longo de máis).",
+ "pt-movepage-list-pages": "Lista de páxinas a mover",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Páxina|Páxinas}} de tradución",
+ "pt-movepage-list-section": "{{PLURAL:$1|Páxina|Páxinas}} de unidade de tradución",
+ "pt-movepage-list-other": "{{PLURAL:$1|Outra subpáxina|Outras subpáxinas}}",
+ "pt-movepage-list-count": "En total, $1 {{PLURAL:$1|páxina|páxinas}} a mover.",
+ "pt-movepage-legend": "Mover a páxina traducible",
+ "pt-movepage-current": "Nome actual:",
+ "pt-movepage-new": "Novo nome:",
+ "pt-movepage-reason": "Motivo:",
+ "pt-movepage-subpages": "Mover todas as subpáxinas",
+ "pt-movepage-action-check": "Comprobar se o traslado é posible",
+ "pt-movepage-action-perform": "Realizar o traslado",
+ "pt-movepage-action-other": "Cambiar o destino",
+ "pt-movepage-intro": "Esta páxina especial permite mover páxinas que están marcadas para a súa tradución.\nA acción de traslado non será inmediata porque é necesario mover moitas outras páxinas.\nMentres as páxinas son trasladadas, non é posible traballar nelas.\nOs erros quedarán rexistrados no [[Special:Log/pagetranslation|rexistro de páxinas de tradución]] e deberán ser reparados manualmente.",
+ "pt-movepage-logreason": "Parte da páxina traducible \"$1\"",
+ "pt-movepage-started": "Por favor, comprobe o [[Special:Log/pagetranslation|rexistro de páxinas de tradución]] nun momento por se houbese algún erro e para ler as mensaxes de conclusión.",
+ "pt-locked-page": "Esta páxina está bloqueada porque se está a mover a páxina traducible.",
+ "pt-deletepage-lang-title": "Borrar a páxina de tradución \"$1\"",
+ "pt-deletepage-tp-title": "Borrar a páxina traducible \"$1\"",
+ "pt-deletepage-invalid-title": "A páxina especificada non é válida.",
+ "pt-deletepage-invalid-text": "A páxina especificada non é unha páxina traducible nin unha páxina de tradución.",
+ "pt-deletepage-action-check": "Lista de páxinas a borrar",
+ "pt-deletepage-action-perform": "Realizar o borrado",
+ "pt-deletepage-action-other": "Cambiar o destino",
+ "pt-deletepage-lang-legend": "Borrar a páxina de tradución",
+ "pt-deletepage-tp-legend": "Borrar a páxina traducible",
+ "pt-deletepage-any-legend": "Borrar a páxina traducible ou a páxina de tradución",
+ "pt-deletepage-current": "Nome da páxina:",
+ "pt-deletepage-reason": "Motivo:",
+ "pt-deletepage-subpages": "Borrar todas as subpáxinas",
+ "pt-deletepage-list-pages": "Lista de páxinas a borrar",
+ "pt-deletepage-list-translation": "Páxinas de tradución",
+ "pt-deletepage-list-section": "Páxinas de unidade de tradución",
+ "pt-deletepage-list-other": "Outras subpáxinas",
+ "pt-deletepage-list-count": "En total, $1 {{PLURAL:$1|páxina|páxinas}} a borrar.",
+ "pt-deletepage-full-logreason": "Parte da páxina traducible \"$1\"",
+ "pt-deletepage-lang-logreason": "Parte da páxina de tradución \"$1\"",
+ "pt-deletepage-started": "Comprobe os erros e as mensaxes de conclusión no [[Special:Log/pagetranslation|rexistro de páxinas de tradución]].",
+ "pt-deletepage-intro": "Esta páxina especial permite borrar por completo páxinas traducibles ou páxinas de tradución individuais nunha lingua.\nA acción de borrado non será inmediata porque cómpre eliminar todas as páxinas dependentes delas.\nOs erros quedarán rexistrados no [[Special:Log/pagetranslation|rexistro de páxinas de tradución]] e terán que arranxarse manualmente.",
+ "pagemigration": "Migración da páxina de tradución",
+ "pagemigration-summary": "Especifique unha páxina de tradución e restaure calquera tradución feita antes de activar o sistema de tradución nesa páxina.",
+ "pm-import-button-label": "Importar",
+ "pm-savepages-button-label": "Gardar",
+ "pm-cancel-button-label": "Cancelar",
+ "pm-page-does-not-exist": "\"$1\" non existe",
+ "pm-old-translations-missing": "\"$1\" non contén traducións vellas",
+ "pm-extra-units-warning": "Pode haber unidades adicionais presentes. Faga coincidir correctamente as unidades de orixe e as unidades de tradución",
+ "pm-pagename-missing": "Insira o nome da páxina",
+ "pm-add-icon-hover-text": "Engadir unha unidade embaixo",
+ "pm-swap-icon-hover-text": "Cambiar coa unidade inferior",
+ "pm-delete-icon-hover-text": "Borrar a unidade",
+ "pm-pagetitle-placeholder": "Insira o nome da páxina",
+ "pm-pagetitle-invalid": "Achegue un título de páxina válido. Debe ter o formato <nome-de-páxina>/<código-de-lingua>.",
+ "pm-pagetitle-missing": "Por favor, insira o título da páxina.",
+ "pm-langcode-missing": "O código de lingua parece faltar no título. Escriba o título da páxina no formato <page-name>/<language-code>.",
+ "pm-summary-import": "Importouse a tradución usando [[Special:PageMigration|migración de páxina]]",
+ "pm-on-import-message-text": "As traducións antigas foron importadas. Use as opcións engadir, cambiar e borrar para axustar as unidades de tradución e prema no botón \"{{int:pm-savepages-button-label}}\" para gardalas. Prema o botón \"{{int:pm-cancel-button-label}}\" para cancelar.",
+ "pm-on-save-message-text": "As unidades de tradución foron gardadas. Agora pode indicar o título dunha nova páxina de tradución a migrar ou facer cambios ás unidades de abaixo e gardar unha nova revisión.",
+ "tpt-translate-title": "Permitir a tradución do título da páxina",
+ "pp-save-summary": "Preparo a páxina para a súa tradución",
+ "pagepreparation": "Preparar a páxina para a tradución",
+ "pp-pagename-placeholder": "Insira o nome da páxina",
+ "pp-prepare-button-label": "Preparar",
+ "pp-save-button-label": "Publicar",
+ "pp-cancel-button-label": "Cancelar",
+ "pp-save-message": "A páxina foi publicada. Pode [$1 editala].",
+ "pp-prepare-message": "Preparouse a páxina para a tradución. Consulte os cambios abaixo. Prema no botón \"{{int:pp-save-button-label}}\" se está todo ben!",
+ "pp-already-prepared-message": "Parece que a páxina xa se preparou para a tradución. Non hai cambios respecto á versión anterior.",
+ "pp-pagename-missing": "Insira o nome da páxina",
+ "pp-diff-old-header": "Texto fonte",
+ "pp-diff-new-header": "Texto preparado",
+ "tpt-unlink-confirm": "Confirme que realmente quere eliminar esta páxina do sistema de tradución.\nO selector de idiomas e os nomes das páxinas traducidas deixarán de funcionar.\nAs páxinas de tradución volveranse editables.",
+ "tpt-unlink-button": "Eliminar da tradución",
+ "tpt-unlink-summary": "Páxina eliminada da tradución",
+ "tpt-generic-confirm": "Por favor, confirme a acción.",
+ "tpt-generic-button": "Confirmar"
+}
diff --git a/Translate/i18n/pagetranslation/gld.json b/Translate/i18n/pagetranslation/gld.json
new file mode 100644
index 00000000..ff9e5fb6
--- /dev/null
+++ b/Translate/i18n/pagetranslation/gld.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "RFScott"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% тунгсэрэми)"
+}
diff --git a/Translate/i18n/pagetranslation/glk.json b/Translate/i18n/pagetranslation/glk.json
new file mode 100644
index 00000000..59628a86
--- /dev/null
+++ b/Translate/i18n/pagetranslation/glk.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "شیخ"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2٪ واگردان بۊبؤ)"
+}
diff --git a/Translate/i18n/pagetranslation/gn.json b/Translate/i18n/pagetranslation/gn.json
new file mode 100644
index 00000000..2d980e59
--- /dev/null
+++ b/Translate/i18n/pagetranslation/gn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "P. S. F. Freitas"
+ ]
+ },
+ "tpt-aggregategroup-close": "Emboty"
+}
diff --git a/Translate/i18n/pagetranslation/gom-deva.json b/Translate/i18n/pagetranslation/gom-deva.json
new file mode 100644
index 00000000..27e2b095
--- /dev/null
+++ b/Translate/i18n/pagetranslation/gom-deva.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Konknni mogi 24"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% अणकारलां)"
+}
diff --git a/Translate/i18n/pagetranslation/gom-latn.json b/Translate/i18n/pagetranslation/gom-latn.json
new file mode 100644
index 00000000..c0e67e7f
--- /dev/null
+++ b/Translate/i18n/pagetranslation/gom-latn.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "The Discoverer"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% onkarla)",
+ "pt-movepage-list-other": "{{PLURAL:$1|Dusrem up-pan|Her up-panam}}",
+ "pt-movepage-list-count": "Sogllem mellun $1 {{PLURAL:$1|pan|panam}} ani $2 {{PLURAL:$2|up-pan|up-panam}} halovpachim.",
+ "pt-movepage-current": "Sodhyachem nanv:",
+ "pt-movepage-new": "Novem nanv:",
+ "pt-movepage-reason": "Karonn:",
+ "pt-movepage-subpages": "Sogllim up-panam haloi",
+ "pt-movepage-action-perform": "Halovp kor"
+}
diff --git a/Translate/i18n/pagetranslation/gor.json b/Translate/i18n/pagetranslation/gor.json
new file mode 100644
index 00000000..8c2699c4
--- /dev/null
+++ b/Translate/i18n/pagetranslation/gor.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Marwan Mohamad"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% terjemahan)"
+}
diff --git a/Translate/i18n/pagetranslation/got.json b/Translate/i18n/pagetranslation/got.json
new file mode 100644
index 00000000..980cd482
--- /dev/null
+++ b/Translate/i18n/pagetranslation/got.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gothicspeaker"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% 𐌲𐌰𐍃𐌺𐌴𐌹𐍂𐌹𐌸)"
+}
diff --git a/Translate/i18n/pagetranslation/grc.json b/Translate/i18n/pagetranslation/grc.json
new file mode 100644
index 00000000..14d1ef67
--- /dev/null
+++ b/Translate/i18n/pagetranslation/grc.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gts-tg",
+ "PastelKos"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% μεταγλωττίσθη)"
+}
diff --git a/Translate/i18n/pagetranslation/gsw.json b/Translate/i18n/pagetranslation/gsw.json
new file mode 100644
index 00000000..5c6a3233
--- /dev/null
+++ b/Translate/i18n/pagetranslation/gsw.json
@@ -0,0 +1,127 @@
+{
+ "@metadata": {
+ "authors": [
+ "Als-Chlämens",
+ "Als-Holder",
+ "Purodha"
+ ]
+ },
+ "pagetranslation": "Sytenibersetzig",
+ "right-pagetranslation": "D Syte, wu sotte ibersetzt wäre, markiere",
+ "action-pagetranslation": "ibersetzbari Syte z verwalte",
+ "tpt-section": "Iberstzigs-Abschnitt $1",
+ "tpt-section-new": "Neje Iberstzigs-Abschnitt. Name: $1",
+ "tpt-section-deleted": "Ibersetzigs-Abschnitt $1",
+ "tpt-diff-old": "Vorige Tekscht",
+ "tpt-diff-new": "Neje Tekscht",
+ "tpt-submit": "Die Version zum Ibersetze markiere",
+ "tpt-sections-oldnew": "Neji un vorhandeni Ibersetzigs-Abschnitt",
+ "tpt-sections-deleted": "Gleschti Ibersetzigs-Abschnitt",
+ "tpt-sections-template": "Ibersetzigs-Sytevorlag",
+ "tpt-action-nofuzzy": "Setz d Ibersetzige nit usser Chraft",
+ "tpt-badtitle": "Dr Sytename, wu Du aagee hesch ($1), isch kei giltige Sytename",
+ "tpt-nosuchpage": "D Syte $1 git s nit",
+ "tpt-oldrevision": "$2 isch nit di letscht Version vu dr Syte [[:$1]].\nNume di letschte Versione chenne zum Iberseze markiert wäre.",
+ "tpt-notsuitable": "D Syte $1 cha nit iberstez wäre.\nStell sicher, ass si <nowiki><translate></nowiki>-Markierige un e giltige Syntax het.",
+ "tpt-saveok": "D Syte [[:$1]] isch zum Ibersetze markiert wore mit $2 {{PLURAL:$2|Ibersetzigs-Abschnitt|Ibersetzigs-Abschnitt}}.\nD Syte cha jetz <span class=\"plainlinks\">[$3 ibersetzt]</span> wäre.",
+ "tpt-showpage-intro": "Unte sin Abschnitt ufglischtet, wu nej sin, sonigi wu s git un sonigi wu s nit git.\nVoreb Du die Version zum Ibersetze frejgisch, iberprief, ass d Änderige an dr Abschnitt gring ghalte sin go uunetigi Arbed bi dr Ibersetzig vermyde.",
+ "tpt-mark-summary": "het die Versione zum Ibersetze markiert",
+ "tpt-edit-failed": "Cha d Syte nit aktualisiere: $1",
+ "tpt-duplicate": "Dr Ibersetzigseinheitsname $1 wird meh wie eimol brucht.",
+ "tpt-unmarked": "D Syte $1 isch nit lenger markiert, ass sie mueß ibersetzt wäre.",
+ "tpt-list-nopages": "S sin kei Syte zum Ibersetze markiert wore un sin au no keini Syte fertig, wu chennte zum Ibersetze markiert wäre",
+ "tpt-new-pages-title": "Fir e Ibersetzig vorgschlaani Syte",
+ "tpt-old-pages-title": "Z Ibersetze",
+ "tpt-other-pages-title": "Fählerhafti Syte",
+ "tpt-new-pages": "{{PLURAL:$1|In däre Syte|In däne Syte}} het s Tekscht mit Ibersetzigs-Markierige, aber zur Zyt isch kei Version {{PLURAL:$1|däre Syte|däne Syte}} zum Ibersetze markiert.",
+ "tpt-old-pages": "{{PLURAL:$1|E Version vu däre Syte isch|E paar Versione vu däne Syte sin}} zum Ibersetze markiert wore",
+ "tpt-other-pages": "{{PLURAL:$1|En alti Version vu däre Syte isch markiert, ass si mueß|Alti Versione vu däne Syte sin markiert, ass si mien}} ibersetzt wäre.\nDi {{PLURAL:$1|nejscht Version cha dergege nit markiert wäre, ass si mueß|nejschte Versione chenne dergege nit markiert wäre, ass sin mien}} ibersetzt wäre.",
+ "tpt-select-prioritylangs": "Komma-trännti Lischt vu dr priorisirte Sprochcode:",
+ "tpt-select-prioritylangs-force": "Ibersetzige in nit priorisierti Sproche verhindere",
+ "tpt-select-prioritylangs-reason": "Grund:",
+ "tpt-sections-prioritylangs": "Priorisierti Sproche",
+ "tpt-rev-mark": "Zum Ibersetze freigee",
+ "tpt-rev-unmark": "die Syte vum Ibersetze zruckneh",
+ "tpt-rev-discourage": "Frejgab zrucksetze",
+ "tpt-rev-encourage": "widerhärstelle",
+ "tpt-rev-mark-tooltip": "Di letscht Version vu däre Syte zum Ibersetze frejgee.",
+ "tpt-rev-unmark-tooltip": "D Frejgab zum Ibersetze vu dä#re Syte uuseneh.",
+ "tpt-rev-discourage-tooltip": "D Frejgab fir wyteri Ibersetzige vu däre Syte zruckzie.",
+ "tpt-rev-encourage-tooltip": "D Frejgab zum Ibersetze vu däre Syre widerhärstelle.",
+ "translate-tag-translate-link-desc": "Die Syte ibersetze",
+ "translate-tag-markthis": "Die Syte zum ibersetze markiere",
+ "translate-tag-markthisagain": "An däre Syte het s <span class=\"plainlinks\">[$1 Änderige]</span> gee, syt si s lescht Mol <span class=\"plainlinks\">[$2 zum Ibersetze markiert wore isch]</span>.",
+ "translate-tag-hasnew": "In däre Syte het s <span class=\"plainlinks\">[$1 Änderige]</span>, wu nit zum Ibersetze markiert sin.",
+ "tpt-translation-intro": "Die Syte isch e <span class=\"plainlinks\">[$1 ibersetzti Version]</span> vun ere Syte [[$2]] un d Ibersetzig isch zue $3% vollständig un aktuäll.",
+ "tpt-translation-intro-fuzzy": "Nit aktuälli Ibersetzige wäre wie dää Tekscht markiert.",
+ "tpt-languages-legend": "Anderi Sproche:",
+ "tpt-languages-zero": "Mit em Ibersetze in die Sproch aafange",
+ "tpt-languages-nonzero": "$1 ($2% ibersetzt)",
+ "tpt-target-page": "Die Syte cha nit vu Hand aktualisiert wäre.\nDie Syte isch e Ibersetzig vu dr Syte [[$1]] un d Ibersetzig cha aktualisert wäre mit em [$2 Ibersetzigstool].",
+ "tpt-unknown-page": "Dää Namensruum isch reserviert fir Ibersetzige vu Inhaltssyte.\nD Syte, wu Du witt bearbeite, ghert schyns zue keire Syte, wu zum Ibersetze markiert isch.",
+ "tpt-translation-restricted": "S Ibersetze vu däre Syte in die Sproch isch vun eme Ibersetzigsadministrator deaktiviert wore.\n\nGrund: $1",
+ "tpt-discouraged-language-force": "<strong>Die Syte cha nit in $2 ibersetzt wäre.</strong>\n\nEn Ibersetzigsadministrator het entschide, dass die Syte nume in $3 cha ibersetzt wäre.",
+ "tpt-priority-languages": "En Ibersetzigsadministrator het di priorisierte Sproche fir die Nochrichtegruppe uf $1 feschtgleit.",
+ "tpt-render-summary": "Aktualisiere zum e neji Version vu dr Quällsyte z finde",
+ "aggregategroups": "Sammelgruppe",
+ "tpt-aggregategroup-add": "Zuefiege",
+ "tpt-aggregategroup-save": "Spychere",
+ "tpt-aggregategroup-add-new": "E neji Hauptnochrichtegruppe zuefiege",
+ "tpt-aggregategroup-new-name": "Name:",
+ "tpt-aggregategroup-new-description": "Bschrybig (optional):",
+ "tpt-aggregategroup-remove-confirm": "Bisch sicher, ass Du die Gruppe witt lesche?",
+ "tpt-aggregategroup-invalid-group": "Gruppe git s nit",
+ "pt-parse-open": "Uasymmetrischi &lt;translate&gt;-Markierig.\nIbersetzigsvorlag: <pre>$1</pre>",
+ "pt-parse-close": "Uusymmetrischi &lt;&#47;translate&gt;-Markierig.\nIbersetzigsvorlag: <pre>$1</pre>",
+ "pt-parse-nested": "Verschachtleti &lt;translate&gt;-Ibersetzigseinheite sin nit megli.\nText vu dr Markierig: <pre>$1</pre>",
+ "pt-shake-multiple": "Mehreri Ibersetzigseinheitesmarker fir ei Ibersetzigseinheit.\nText vu drIbersetzigseinheit: <pre>$1</pre>",
+ "pt-shake-position": "S het Ibersetzigseinheitemarker an ere nit erwartete Stell.\nText vu dr Ibersetzigseinheit: <pre>$1</pre>",
+ "pt-shake-empty": "Ibersetzigseinheit fir dr Marker„$1“ isch läär.",
+ "log-description-pagetranslation": "Logbuech vu dr Änderige im Zämmehang mit em Ibersetzigssyschtem",
+ "log-name-pagetranslation": "Sytenibersetzigs-Logbuech",
+ "pt-movepage-title": "D Ibersetzigssyte $1 verschiebe",
+ "pt-movepage-blockers": "Di ibersetzbar Syte het wäge {{PLURAL:$1|däm Fähler|däne Fähler}} nit nit uf dr nej Name chenne verschobe wäre:",
+ "pt-movepage-block-base-invalid": "D Basissyte het kei giltige Name.",
+ "pt-movepage-block-tp-invalid": "Dr Ziilname vu dr Ibersetzigssyte fir [[:$1]] wär nit giltig (z lang?).",
+ "pt-movepage-block-section-invalid": "Dr Ziilname vu dr Ibersetzigseinheitesyte fir [[:$1]] wär nit giltig (z lang?).",
+ "pt-movepage-block-subpage-invalid": "Dr Ziilname vu dr Untersyte fir [[:$1]] wär nit giltig (z lang?).",
+ "pt-movepage-list-pages": "Lischt vu dr Syte, wu mien verschobe wäre",
+ "pt-movepage-list-translation": "Ibersetzigssyte",
+ "pt-movepage-list-section": "Syte vu dr Ibersetzigseinheite",
+ "pt-movepage-list-other": "Anderi Untersyte",
+ "pt-movepage-list-count": "Insgsamt git s $1 Syte, wu {{PLURAL:$1|mueß|mien}} verschobe wäre.",
+ "pt-movepage-legend": "Ibersetzigssyte verschiebe",
+ "pt-movepage-current": "Aktuälle Sytename:",
+ "pt-movepage-new": "Neje Sytename:",
+ "pt-movepage-reason": "Grund:",
+ "pt-movepage-subpages": "Alli Untersyte verschiebe",
+ "pt-movepage-action-check": "Iberpriefig, eb d Verschiebig megli isch",
+ "pt-movepage-action-perform": "Verschiebig durfiere",
+ "pt-movepage-action-other": "Ziil ändere",
+ "pt-movepage-intro": "Die Spezialsyte macht s megli Syte z verschiebe, wu fir d Ibersetzig zeichnet sin.\nD Verschiebig chunnt nit sofort, wel vil Syte derby mien verschobe wäre.\nBim Verschiebigsvorgang isch s nit megli, die Syte z nutze.\nVerschiebigsfähler wäre im [[Special:Log/pagetranslation|Ibersetzigs-Logbuech]] ufzeichnet un mien vu Hand verbesseret wäre.",
+ "pt-movepage-logreason": "Teil vu dr Ibersetzigssyte $1.",
+ "pt-movepage-started": "D Basissyte isch jetz verschobe wore.\nBitte prief s [[Special:Log/pagetranslation|Ibersetzigs-Logbuech]] uf Fählermäldige un d Vollzugsnochricht.",
+ "pt-locked-page": "Die Syte isch gsperrt, wel d Ibersetzigssyte zurzyt verschobe wird.",
+ "pt-deletepage-lang-title": "Übersetzigs-Syte $1 wird glöscht",
+ "pt-deletepage-tp-title": "Übersetzbari Syte $1 wird glöscht.",
+ "pt-deletepage-invalid-title": "Die Syte, wo aagee hesch, isch nit gültig.",
+ "pt-deletepage-invalid-text": "Die Syte, wo aagee hesch, isch weder e übersetzbari Syte, noch e Übersetzig.",
+ "pt-deletepage-action-check": "Syte ufflischte, wo glöscht werde sölle",
+ "pt-deletepage-action-perform": "Löschig durefiere",
+ "pt-deletepage-action-other": "Ziil ändere",
+ "pt-deletepage-lang-legend": "Ibersetzigs-Syte lesche",
+ "pt-deletepage-tp-legend": "Ibersetzbari Syte lesche",
+ "pt-deletepage-any-legend": "Übersetzbari oder übersetzti Syte lösche",
+ "pt-deletepage-current": "Sytename:",
+ "pt-deletepage-reason": "Grund:",
+ "pt-deletepage-subpages": "Alli Untersyte lösche",
+ "pt-deletepage-list-pages": "Lischt vu dr Syte, wu mien glöscht wäre",
+ "pt-deletepage-list-translation": "Ibersetzigssyte",
+ "pt-deletepage-list-section": "Syte vu dr Ibersetzigseinheite",
+ "pt-deletepage-list-other": "Anderi Untersyte",
+ "pt-deletepage-list-count": "Insgsamt git s $1 Syte, wu {{PLURAL:$1|mueß|mien}} glöscht wäre.",
+ "pt-deletepage-full-logreason": "Teil vu dr übersetzbare Syte $1.",
+ "pt-deletepage-lang-logreason": "Teil vu dr übersetzte Syte $1.",
+ "pt-deletepage-started": "Bitte due s [[Special:Log/pagetranslation|Übersetzigs-Logbuech]] uff Fääler un Ussfierigsnoochrichte überpriefe.",
+ "pt-deletepage-intro": "Die Spezialsyte ermöglicht s Lösche vo ganze übersetbare Syte oder Übersetzige in ei Sprooch.\nD Ussfierig vo Löschig passiert nit unmittelbar, wyl vili Syte übersetzt werde mien.\nFääler werde im [[Special:Log/pagetranslation|Übersetzigs-Logbuech]] uffzeichnet un mien noochträgli manuell berichtigt werde."
+}
diff --git a/Translate/i18n/pagetranslation/gu.json b/Translate/i18n/pagetranslation/gu.json
new file mode 100644
index 00000000..70a5d623
--- /dev/null
+++ b/Translate/i18n/pagetranslation/gu.json
@@ -0,0 +1,42 @@
+{
+ "@metadata": {
+ "authors": [
+ "Arbhatt",
+ "Ashok modhvadia",
+ "Dsvyas",
+ "KartikMistry",
+ "NehalDaveND"
+ ]
+ },
+ "pagetranslation": "પાનું ભાષાંતરણ",
+ "right-pagetranslation": "ભાષાંતર માટેનાં પાનાઓનાં સંસ્કરણો ચિહ્નિત કરો",
+ "tpt-section": "ભાષાંતર એકમ $1",
+ "tpt-section-new": "નવું ભાષાંતર એકમ. નામ: $1",
+ "tpt-section-deleted": "ભાષાંતર એકમ $1",
+ "tpt-diff-old": "પહેલાંનું લખાણ",
+ "tpt-diff-new": "નવું લખાણ",
+ "tpt-submit": "આ સંસ્કરણને ભાષાંતર માટે ચિહ્નિત કરો",
+ "tpt-sections-oldnew": "નવાં અને વિદ્યમાન ભાષાંતર એકમો",
+ "tpt-sections-deleted": "રદ કરાયેલા ભાષાંતર એકમો",
+ "tpt-sections-template": "ભાષાંતર પાના ઢાંચો",
+ "tpt-badtitle": "પાનાને અપાયેલું ($1) નામ પ્રમાણભૂત મથાળું નથી",
+ "tpt-oldrevision": "$2 એ પાનાં [[:$1]] નું આધુનિક સંસ્કરણ નથી.\n\nફક્ત આધુનિક સંસ્કરણનેજ ભાષાંતર માટે ચિહ્નિત કરી શકાશે.",
+ "tpt-notsuitable": "પાનું $1 ભાષાંતર માટે યોગ્ય નથી.\n\nખાતરી કરો કે તે <nowiki><translate></nowiki> ટેગ અને પ્રમાણભૂત વાક્યરચના ધરાવે છે.",
+ "tpt-mark-summary": "આ સંસ્કરણને ભાષાંતર માટે ચિહ્નિત કરાયું",
+ "tpt-edit-failed": "પાનાં: $1 ને અદ્યતન બનાવી શકાયું નહીં.",
+ "tpt-list-nopages": "કોઈ પાનાં ભાષાંતર માટે ચિહ્નિત કરેલા નથી કે ન તો કોઈ પાનું ભાષાંતર માટે ચિહ્નિત થવા માટે તૈયાર છે.",
+ "tpt-new-pages": "{{PLURAL:$1|આ પાના|આ પાનાઓ}} ભાષાંતર ટેગ શાથેનું લખાણ ધરાવે છે, પરંતુ {{PLURAL:$1|આ પાના|આ પાનાઓ}}નું હાલનું સંસ્કરણ ભાષાંતર માટે ચિહ્નિત કરાયેલ નથી.",
+ "tpt-old-pages": "{{PLURAL:$1|આ પાના|આ પાનાં}}નાં કેટલાક સંસ્કરણ ભાષાંતર માટે ચિહ્નિત કરાયેલા છે.",
+ "tpt-select-prioritylangs-reason": "કારણ:",
+ "tpt-rev-encourage": "ફરી સ્થાપિત કરો",
+ "translate-tag-translate-link-desc": "આ પાનાનું ભાષાંતર કરો",
+ "translate-tag-markthis": "આ પાનાંને ભાષાંતર માટે ચિહ્નિત કરો",
+ "tpt-translation-intro-fuzzy": "કાલગ્રસ્ત ભાષાંતરણો આ રીતે ચિહ્નિત થયેલાં.",
+ "tpt-languages-legend": "અન્ય ભાષાઓ:",
+ "tpt-languages-nonzero": "$1 ($2% ભાષાંતરીત)",
+ "tpt-tab-translate": "ભાષાંતર કરો",
+ "tpt-aggregategroup-update-cancel": "રદ કરો",
+ "tpt-invalid-group": "અયોગ્ય સમૂહ",
+ "pm-cancel-button-label": "રદ કરો",
+ "pp-cancel-button-label": "રદ કરો"
+}
diff --git a/Translate/i18n/pagetranslation/guc.json b/Translate/i18n/pagetranslation/guc.json
new file mode 100644
index 00000000..addfe7f7
--- /dev/null
+++ b/Translate/i18n/pagetranslation/guc.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Leonfd1992"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% pütchi alatünüipaka)"
+}
diff --git a/Translate/i18n/pagetranslation/gur.json b/Translate/i18n/pagetranslation/gur.json
new file mode 100644
index 00000000..3c9b3c9d
--- /dev/null
+++ b/Translate/i18n/pagetranslation/gur.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ayire Adongo"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% Lerege)"
+}
diff --git a/Translate/i18n/pagetranslation/guw.json b/Translate/i18n/pagetranslation/guw.json
new file mode 100644
index 00000000..09548e8c
--- /dev/null
+++ b/Translate/i18n/pagetranslation/guw.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Misteld"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% diọ ogbe)"
+}
diff --git a/Translate/i18n/pagetranslation/gv.json b/Translate/i18n/pagetranslation/gv.json
new file mode 100644
index 00000000..f0305485
--- /dev/null
+++ b/Translate/i18n/pagetranslation/gv.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Shimmin Beg"
+ ]
+ },
+ "pt-movepage-reason": "Fa:"
+}
diff --git a/Translate/i18n/pagetranslation/ha.json b/Translate/i18n/pagetranslation/ha.json
new file mode 100644
index 00000000..a64e7825
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ha.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hamxo",
+ "Kambai Akau",
+ "Salihu aliyu",
+ "Umar-askirason"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 (an fassara $2%)",
+ "pt-movepage-reason": "Dalili:",
+ "visualeditor-annotations-translate-start": "fara content din don fassara shi",
+ "visualeditor-annotations-translate-end": "karshen rubutun da za'a fassara",
+ "visualeditor-annotations-translate-description": "Wannan tsakanin an gudanar dashi akan zai iya fassaruwa. Don haka ku tabbata kun bi matakin koyar wa na [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text Changing the source text].",
+ "visualeditor-annotations-tvar-start": "Farin bayanan da bazasu fassaru ba",
+ "visualeditor-annotations-tvar-end": "Karshen rubutun da bai fassaruwa",
+ "visualeditor-annotations-tvar-description": "Tsakanin nan an tantancesu a matsayin wa'inda baza su fassaru ba [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Segmentation Segmentation of the source text] domin samun karin bayanai"
+}
diff --git a/Translate/i18n/pagetranslation/hak.json b/Translate/i18n/pagetranslation/hak.json
new file mode 100644
index 00000000..34c56945
--- /dev/null
+++ b/Translate/i18n/pagetranslation/hak.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hakka"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% yí-kîn fân-yi̍t)"
+}
diff --git a/Translate/i18n/pagetranslation/he.json b/Translate/i18n/pagetranslation/he.json
new file mode 100644
index 00000000..47bda415
--- /dev/null
+++ b/Translate/i18n/pagetranslation/he.json
@@ -0,0 +1,275 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "BaRaN6161 TURK",
+ "Deror avi",
+ "Guycn2",
+ "HumansCanWinElves",
+ "Inkbug",
+ "Pols12",
+ "Rotemliss",
+ "YaronSh",
+ "דגש",
+ "דגש חזק",
+ "לואיקה"
+ ]
+ },
+ "pagetranslation": "תרגום דפים",
+ "nstab-translations": "יחידת תרגום",
+ "right-pagetranslation": "סימון גרסאות של דפים כגרסאות שצריך לתרגם",
+ "action-pagetranslation": "לנהל דפים לתרגום",
+ "tps-edit-sourcepage-text": "{{GENDER:|אתה עורך|את עורכת}} את המקור של דף שאפשר לתרגם. נא לוודא {{GENDER:|שאתה מכיר|שאת מכירה}} את המסמכים הבאים:\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text שינוי טקסט המקור]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Markup_examples דוגמה לשימוש בשפת עיצוב]",
+ "tps-edit-sourcepage-ve-warning-limited-text": "אי־אפשר לערוך חלק מהאזורים הניתנים לתרגום בעורך הזה. נא להשתמש בעורך קוד המקור כדי לערוך אותם.",
+ "tps-edit-sourcepage-ve-warning-title": "אזהרה: דף שאינו נתמך",
+ "tps-edit-sourcepage-ve-warning-text": "{{GENDER:|אתה עורך|את עורכת}} דף שאפשר לתרגם. עריכה של דפים כאלה בתוכנת העריכה הזאת עדיין לא נתמכת. נא להשתמש בעורך קוד המקור.",
+ "tps-edit-sourcepage-ve-warning-button": "אישור",
+ "tpt-section": "יחידת תרגום $1",
+ "tpt-section-new": "יחידת תרגום חדשה.\nשם: $1",
+ "tpt-section-deleted": "יחידת תרגום $1",
+ "tpt-diff-old": "הטקסט הקודם",
+ "tpt-diff-new": "טקסט חדש",
+ "tpt-submit": "סימון גרסה זו לתרגום",
+ "tpt-sections-oldnew": "יחידות תרגום חדשות וקיימות",
+ "tpt-sections-deleted": "יחידות תרגום שנמחקו",
+ "tpt-sections-template": "תבנית דף תרגום",
+ "tpt-action-nofuzzy": "לא לפסול תרגומים",
+ "tpt-badtitle": "שם הדף שניתן ($1) אינו כותרת תקינה",
+ "tpt-nosuchpage": "הדף $1 אינו קיים",
+ "tpt-oldrevision": "$2 היא לא הגרסה האחרונה של הדף [[:$1]].\nרק הגרסאות האחרונות יכולות להיות מסומנות לתרגום.",
+ "tpt-notsuitable": "הדף $1 אינו מתאים לתרגום.\nנא לוודא שהוא מכיל תגי $2 ושהתחביר שלו תקין.",
+ "tpt-saveok": "הדף [[:$1]] סומן לתרגום עם {{PLURAL:$2|יחידת תרגום אחת|$2 יחידות תרגום}}.\nעכשיו אפשר <span class=\"plainlinks\">[$3 לתרגם]</span> את הדף.",
+ "tpt-saveok-first": "באפשרותך [[Special:PageMigration|לייבא תרגום שכבר קיים]] לדף הזה (אם יש כזה).",
+ "tpt-offer-notify": "באפשרותך <span class=\"plainlinks\">[$1 להודיע למתרגמים]</span> על הדף הזה.",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|להציג את רשימת הדפים לתרגום.]]",
+ "tpt-showpage-intro": "להלן רשימת יחידות תרגום חדשות, קיימות ומחוקות.\nלפני סימון גרסה זו לתרגום, בדקו שהשינויים ליחידות התרגום קטנים ככל שאפשר, כדי למנוע עבודה מיותרת של מתרגמים.",
+ "tpt-mark-summary": "הגרסה הזאת סומנה לתרגום",
+ "tpt-mark-nochanges": "אין שינויים שצריך לסקור. סימון הדף הזה לתרגום לא יערוך את הדף הזה וגם לא שום יחידת תרגום קיימת.",
+ "tpt-edit-failed": "לא ניתן לעדכן את הדף: $1",
+ "tpt-duplicate": "נעשה שימוש מרובה בשם יחידת התרגום $1.",
+ "tpt-invalid": "שם יחידת התרגום $1 לא יכול להכיל קווים תחתיים או קווים נטויים.",
+ "tpt-unmarked": "הדף [[:$1]] כבר אינו מסומן לתרגום.",
+ "tpt-list-nopages": "אין דפים המסומנים לתרגום וגם לא דפים המוכנים להיות מסומנים לתרגום.",
+ "tpt-new-pages-title": "דפים שהוצעו לתרגום",
+ "tpt-old-pages-title": "דפים בתרגום",
+ "tpt-other-pages-title": "דפים מקולקלים",
+ "tpt-outdated-pages-title": "דפים עם שינויים ממתינים",
+ "tpt-new-pages": "{{PLURAL:$1|הדף הזה מכיל|הדפים האלה מכילים}} טקסט עם תגי תרגום,\nאבל שום גרסה של {{PLURAL:$1|הדף הזה|הדפים האלה}} אינה מסומנת כעת לתרגום.",
+ "tpt-old-pages": "{{PLURAL:$1|הגרסה האחרונה|הגרסאות האחרונות}} של {{PLURAL:$1|הדף הזה סומנה|הדפים האלה סומנו}} לתרגום.",
+ "tpt-other-pages": "{{PLURAL:$1|גרסה ישנה של הדף הזה סומנה|גרסאות ישנות של הדפים האלה סומנו}} לתרגום,\nאבל {{PLURAL:$1|הגרסה האחרונה אינה יכולה להיות מסומנת|הגרסאות האחרונות אינן יכולות להיות מסומנות}} לתרגום.",
+ "tpt-outdated-pages": "{{PLURAL:$1|בדף הזה|בדפים האלה}} יש שינויים שלא סומנו לתרגום.",
+ "tpt-tag-discouraged": "לא מומלץ",
+ "tpt-tag-oldsyntax": "תחביר ישן",
+ "tpt-tag-no-transclusion-support": "ללא תמיכה בהכללה",
+ "tpt-select-prioritylangs": "רשימת מופרדת בפסיקים של קודי שפות מועדפות:",
+ "tpt-select-prioritylangs-force": "למנוע תרגום לשפות שאינן מוגדרות כמועדפות",
+ "tpt-select-prioritylangs-reason": "סיבה:",
+ "tpt-sections-prioritylangs": "שפות מועדפות",
+ "tpt-sections-syntaxversion": "גרסת תחביר",
+ "tpt-syntaxversion-text": "הדף הזה משתמש עכשיו בגרסה הישנה של תחביר הדפים לתרגום. הגרסה החדשה תעטוף קטעים שאינם מתורגמים בתג HTML כדי לציין את השפה הנכונה של הטקסט. דוגמה: $1. אפשר להשתמש בתחביר הסימון החדש $2 כדי למנוע כל סוג של עיטוף במקומות שבהם זה לא מתאים, למשל בעת תרגום מאפיין <code>title</code> של רכיב. לא יהיה אפשר לחזור לגרסה הישנה של התחביר.",
+ "tpt-syntaxversion-label": "להשתמש בתחביר החדש לדף הזה",
+ "tpt-transclusion": "הכללת תבניות",
+ "tpt-transclusion-label": "הפעלת הכללה מודעת לתרגום עבור הדף הזה",
+ "tpt-rev-mark": "לסמן לתרגום",
+ "tpt-rev-unmark": "הסרה מהתרגום",
+ "tpt-rev-discourage": "לסמן כלא מומלץ",
+ "tpt-rev-encourage": "שחזור",
+ "tpt-rev-mark-tooltip": "סימון הגרסה האחרונה של הדף הזה לתרגום.",
+ "tpt-rev-unmark-tooltip": "הסרת הדף הזה מרשימת התרגום.",
+ "tpt-rev-discourage-tooltip": "להמליץ לא לתרגם את הדף הזה עוד.",
+ "tpt-rev-encourage-tooltip": "לשחזר את הדף הזה לתרגום רגיל.",
+ "translate-tag-translate-link-desc": "תרגום דף זה",
+ "translate-tag-markthis": "סימון דף זה לתרגום",
+ "translate-tag-markthisagain": "בדף הזה יש <span class=\"plainlinks\">[$1 שינויים]</span> שנעשו מאז שהוא <span class=\"plainlinks\">[$2 סומן לתרגום]</span> בפעם האחרונה.",
+ "translate-tag-hasnew": "הדף הזה מכיל <span class=\"plainlinks\">[$1 שינויים]</span> שאינם מסומנים לתרגום.",
+ "tpt-translation-intro": "הדף הזה הוא <span class=\"plainlinks\">[$1 גרסה מתורגמת]</span> של הדף [[$2]] והתרגום שלם ב־$3%.",
+ "tpt-translation-intro-fuzzy": "תרגומים שפג תוקפם מסומנים כך.",
+ "tpt-languages-legend": "שפות אחרות:",
+ "tpt-languages-zero": "להתחיל לתרגם לשפה הזאת",
+ "tpt-languages-nonzero": "$1 (מתורגם: $2%)",
+ "tpt-tab-translate": "תרגום",
+ "tpt-target-page": "לא ניתן לעדכן את הדף הזה ידנית.\nהדף הזה הוא תרגום של הדף [[$1]] וניתן לעדכן את התרגום באמצעות [$2 כלי התרגום].",
+ "tpt-unknown-page": "מרחב השם הזה שמור לצורך תרגום דפי תוכן.\nהדף {{GENDER:|שאתה מנסה לערוך|שאת מנסה לערוך|שאתם מנסים לערוך}} אינו תואם לשום דף המסומן לתרגום.",
+ "tpt-translation-restricted": "תרגום הדף הזה לשפה הזאת נמנע על־ידי מנהל תרגום.\n\nסיבה: $1",
+ "tpt-translation-restricted-no-reason": "תרגום הדף הזה לשפה הזאת נמנע על־ידי מנהל תרגום.",
+ "tpt-discouraged-language-force-header": "לא ניתן לתרגם את הדף הזה ל{{GRAMMAR:תחילית|$1}}.",
+ "tpt-discouraged-language-force-content": "מנהל התרגום החליט שאפשר לתרגם את הדף הזה רק ל{{GRAMMAR:תחילית|$1}}.",
+ "tpt-discouraged-language-header": "תרגום הדף ל{{GRAMMAR:תחילית|$1}} אינו בעדיפות.",
+ "tpt-discouraged-language-content": "מנהל התרגום החליט לרכז את מאמץ התרגום ב{{GRAMMAR:תחילית|$1}}.",
+ "tpt-discouraged-language-force": "<strong>לא ניתן לתרגם את הדף הזה ל$2</strong>\n\nמנהל התרגום החליט שאפשר לתרגם את הדף הזה רק לשפות הבאות: $3.",
+ "tpt-priority-languages": "מנהל תרגום הגדיר שהשפות המועדפות לקבוצה הזאת הן $1.",
+ "tpt-priority-languages-force": "מנהל התרגום הגדיר שהשפות המועדפות לקבוצה הזאת הן $1. תרגום לשפות אחרות אסור.",
+ "tpt-discouraged-translation-header": "התרגום של הדף הזה לא מומלץ",
+ "tpt-discouraged-translation-content": "מנהל תרגום המליץ לא לתרגם את הדף הזה. {{GENDER:|אתה עדיין יכול|את עדיין יכולה|באפשרותך עדיין}} לתרגם את הדף, אבל ייתכן שהתרגום לא יהיה שימושי.",
+ "tpt-render-summary": "עדכון להתאמת הגרסה החדשה של דף המקור",
+ "aggregategroups": "קבוצות משולבות",
+ "tpt-aggregategroup-add": "הוספה",
+ "tpt-aggregategroup-save": "שמירה",
+ "tpt-aggregategroup-close": "סגירה",
+ "tpt-aggregategroup-add-new": "הוספת קבוצה משולבת חדשה",
+ "tpt-aggregategroup-new-name": "שם:",
+ "tpt-aggregategroup-new-description": "תיאור (לא חובה):",
+ "tpt-aggregategroup-remove-confirm": "האם ברצונך באמת למחוק את הקבוצה המשולבת הזאת?",
+ "tpt-aggregategroup-invalid-group": "הקבוצה אינה קיימת",
+ "tpt-aggregategroup-edit-name": "שם:",
+ "tpt-aggregategroup-edit-description": "תיאור:",
+ "tpt-aggregategroup-update": "שמירה",
+ "tpt-aggregategroup-update-cancel": "ביטול",
+ "tpt-aggregategroup-expand-all-groups": "להרחיב את כל התת־קבוצות",
+ "tpt-aggregategroup-collapse-all-groups": "להסתיר את כל התת־קבוצות",
+ "tpt-aggregategroup-expand-group": "להרחיב את הקבוצה",
+ "tpt-aggregategroup-collapse-group": "להסתיר את הקבוצה",
+ "tpt-invalid-group": "קבוצה בלתי־תקינה",
+ "pt-parse-open": "תג &lt;translate> לא מאוזן.\nתבנית תרגום: <pre>$1</pre>",
+ "pt-parse-close": "תג &lt;/translate> לא מאוזן.\nתבנית תרגום: <pre>$1</pre>",
+ "pt-parse-nested": "קטעי &lt;translate> מקוננים אינם מורשים.\nתוכן התג: <pre>$1</pre>",
+ "pt-shake-multiple": "סמני יחידות תרגום מרובים עבור קטע אחד.\nנא לוודא שיחידות התרגום מופרדים באמצעות שורות ריקות.\nטקסט יחידת התרגום: <pre>$1</pre>",
+ "pt-shake-position": "סמני יחידות תרגום במיקום בלתי־צפוי.\nתוכן היחידת התרגום: <pre>$1</pre>",
+ "pt-shake-empty": "יחידת תרגום ריקה עבור סמן \"$1\".",
+ "log-description-pagetranslation": "יומן של פעולות שמיוחדות למערכת תרגום דפים",
+ "log-name-pagetranslation": "יומן תרגום דפים",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|סימן|סימנה}} את הדף $3 לתרגום",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|הוציא|הוציאה}} את הדף $3 ממערכת התרגום",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|השלים|השלימה}} את שינוי השם של הדף לתרגום $3 אל $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|נתקל|נתקלה}} בבעיה בעת העברת הדף $3 לשם $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|השלים|השלימה}} את המחיקה של הדף לתרגום $3",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|נכשל|נכשלה|נכשל}} במחיקת $3 אשר שייך לדף לתרגום $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|השלים|השלימה}} את המחיקה של הדף לתרגום $3",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|נכשל|נכשלה|נכשל}} במחיקת $3 אשר שייך לדף התרגום $4",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|עודד|עודדה}} את התרגום של $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|המליץ|המליצה}} לא לתרגם את $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|הסיר|הסירה}} שפות מועדפות מהדף לתרגום $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|הגדיר|הגדירה}} שהשפות המועדפות לדף לתרגום $3 הן $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|הגביל|הגבילה}} את התרגום של הדף $3 אל השפות הבאות: $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|הוסיף|הוסיפה}} את הדף לתרגום $3 לקבוצה המשולבת $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|הוציא|הוציאה}} את הדף לתרגום $3 מהקבוצה המשולבת $4",
+ "log-action-filter-pagetranslation": "סוג הפעולות:",
+ "log-action-filter-pagetranslation-mark": "סימונים של דפים לתרגום",
+ "log-action-filter-pagetranslation-unmark": "הסרות של דפים ממערכת התרגום",
+ "log-action-filter-pagetranslation-move": "העברות של דפים",
+ "log-action-filter-pagetranslation-delete": "מחיקות של דפים",
+ "log-action-filter-pagetranslation-encourage": "עידודים של תרגומים",
+ "log-action-filter-pagetranslation-discourage": "המלצות לא לתרגם",
+ "log-action-filter-pagetranslation-prioritylanguages": "שינויים בעדיפויות של שפות",
+ "log-action-filter-pagetranslation-aggregategroups": "שינויים בקבוצות משולבות",
+ "log-description-messagebundle": "יומן של פעולות שקשורות למערכת חבילות ההודעות",
+ "log-name-messagebundle": "יומן חבילות הודעות",
+ "logentry-messagebundle-moveok": "$1 {{GENDER:$2|השלים|השלימה}} את שינוי השם של חבילת ההודעות $3 לשם $4",
+ "logentry-messagebundle-movenok": "$1 {{GENDER:$2|נתקל|נתקלה}} בבעיה בזמן העברת חבילת ההודעות $3 לשם $4",
+ "logentry-messagebundle-deletefok": "$1 {{GENDER:$2|השלים|השלימה}} את המחיקה של חבילת ההודעות $3",
+ "logentry-messagebundle-deletefnok": "$1 {{GENDER:$2|נכשל|נכשלה}} במחיקת $3 אשר שייך לחבילת ההודעות $4",
+ "log-action-filter-messagebundle": "סוג הפעולה:",
+ "log-action-filter-messagebundle-move": "העברות חבילות הודעות",
+ "log-action-filter-messagebundle-delete": "מחיקות חבילות הודעות",
+ "pt-movepage-title": "העברת הדף המתורגם \"$1\"",
+ "pt-movepage-messagebundle-title": "העברת חבילת ההודעות \"$1\"",
+ "pt-movepage-blockers": "דף מתורגם אינו יכול להיות מועבר לשם חדש בגלל {{PLURAL:$1|השגיאה הבאה|השגיאות הבאות}}:",
+ "pt-movepage-block-base-invalid": "לדף המתורגם המיועד אין כותרת תקינה.",
+ "pt-movepage-block-tp-invalid": "כותרת הדף המתורגם המיועד עבור \"[[:$1]]\" תהיה תקינה (אולי ארוכה מדי?).",
+ "pt-movepage-block-section-invalid": "כותרת הדף המיועדת עבור \"[[:$1]]\" ליחידת התרגום תהיה בלתי־תקינה (אולי ארוכה מדי?).",
+ "pt-movepage-block-subpage-invalid": "כותרת דף המשנה המיועד עבור \"[[:$1]]\" תהיה בלתי־תקינה (אולי ארוכה מדי?).",
+ "pt-movepage-block-talkpage-invalid": "כותרת דף השיחה המיועד עבור \"[[:$1]]\" תהיה בלתי־תקינה (אולי ארוכה מדי?).",
+ "pt-movepage-block-unknown-page": "הדף ([[:$1]]) המועבר לא נראה כמו חלק מדף לתרגום.",
+ "pt-movepage-block-ns-talk-unsupported": "הדף ([[:$1]]) מועבר למרחב שם שאינו תומך בדפי שיחה.",
+ "pt-movepage-block-rename-failed": "אירעה שגיאה בזמן חילול כותרת חדש לדף [[:$1]]",
+ "pt-movepage-list-pages": "רשימת הדפים להעברה",
+ "pt-movepage-list-translation": "{{PLURAL:$1|דף|דפי}} תרגום",
+ "pt-movepage-list-section": "{{PLURAL:$1|דף|דפי}} יחידת תרגום",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|דף־משנה שסומן|דפי־משנה שסומנו}} לתרגום",
+ "pt-movepage-list-translatable-note": "צריך להעביר את הדפים האלה בנפרד.",
+ "pt-movepage-list-other": "{{PLURAL:$1|דף־משנה אחר|דפי־משנה אחרים}}",
+ "pt-movepage-list-count": "בסך הכול יש {{PLURAL:$1|דף אחד|$1 דפים}} להעברה, כולל {{PLURAL:$2|דף־משנה אחד|$2 דפי־משנה}} {{PLURAL:$3|ודף שיחה אחד|ו־$3 דפי שיחה}}.",
+ "pt-movepage-page-count-limit": "הדף המתורגם הזה מכיל יותר {{PLURAL:$1|מדף אחד|מ־$1 דפים}}. מצאנו שהעברה של כל־כך הרבה דפים אינה אמינה. נא ליצור קשר עם מנהל מערכת כדי לעשות את זה באמצעות סקריפט תחזוקה.",
+ "pt-movepage-list-no-pages": "לא נמצאו דפים.",
+ "pt-movepage-legend": "העברת דף מתורגם",
+ "pt-movepage-messagebundle-legend": "העברת חבילת הודעות",
+ "pt-movepage-current": "השם הנוכחי:",
+ "pt-movepage-new": "השם החדש:",
+ "pt-movepage-reason": "סיבה:",
+ "pt-movepage-subpages": "העברת כל דפי־המשנה",
+ "pt-movepage-talkpages": "העברת דפי שיחה",
+ "pt-movepage-talkpage-exists": "(יש דף שיחה)",
+ "pt-movepage-action-check": "לבדוק אם ההעברה אפשרית",
+ "pt-movepage-action-perform": "לבצע את ההעברה",
+ "pt-movepage-action-other": "שינוי יעד",
+ "pt-movepage-intro": "דף מיוחד זה מאפשר לך להעביר דפים מסומנים לתרגום.\nפעולת ההעברה אינה מיידית, מכיוון שצריך להעביר דפים רבים.\nבזמן שהדפים מועברים, לא ניתן לקיים שום קשר איתם.\nכישלונות יירשמו ב[[$1|יומן]], ויהיה צורך לתקן אותן באופן ידני.",
+ "pt-movepage-logreason": "חלק מהדף המתורגם \"$1\"",
+ "pt-movepage-started": "נא לבדוק שגיאות ב[[$1|יומן תרגום הדפים]] בעוד זמן־מה וכן את הודעת ההשלמה.",
+ "pt-locked-page": "הדף הזה נעול כי הדף המתורגם מועבר כעת.",
+ "pt-deletepage-lang-title": "מחיקת דף התרגום \"$1\".",
+ "pt-deletepage-tp-title": "מחיקת הדף לתרגום \"$1\".",
+ "pt-deletepage-mb-title": "מחיקת חבילת ההודעות \"$1\"",
+ "pt-deletepage-invalid-title": "הדף השצוין אינו תקין.",
+ "pt-deletepage-invalid-text": "הדף שצוין אינו דף לתרגום או תרגום של דף כזה.",
+ "pt-deletepage-action-check": "רשימת דפים למחיקה",
+ "pt-deletepage-action-perform": "לבצע את המחיקה",
+ "pt-deletepage-action-other": "שינוי היעד",
+ "pt-deletepage-lang-legend": "מחיקת דף תרגום",
+ "pt-deletepage-tp-legend": "מחיקת דף לתרגום",
+ "pt-deletepage-mb-legend": "מחיקת חבילת הודעות",
+ "pt-deletepage-any-legend": "מחיקת דף לתרגום, חבילת הודעות, או דף מתורגם",
+ "pt-deletepage-current": "שם הדף:",
+ "pt-deletepage-reason": "סיבה:",
+ "pt-deletepage-reason-details": "סיבה אחרת/נוספת:",
+ "pt-deletepage-reason-other": "סיבה אחרת",
+ "pt-deletepage-subpages": "מחיקת כל דפי המשנה",
+ "pt-deletepage-list-pages": "רשימת דפים למחיקה",
+ "pt-deletepage-list-translation": "דפי תרגום",
+ "pt-deletepage-list-section": "דפי יחידת תרגום",
+ "pt-deletepage-list-other": "דפי־משנה אחרים",
+ "pt-deletepage-list-count": "סך הכול {{PLURAL:$1|דף אחד|$1 דפים}} למחוק {{PLURAL:$2|ודף־משנה אחד}}.",
+ "pt-deletepage-list-no-pages": "לא נמצאו דפים.",
+ "pt-deletepage-full-logreason": "חלק מהדף לתרגום \"$1\"",
+ "pt-deletepage-lang-logreason": "חלק מהדף המתורגם \"$1\"",
+ "pt-deletepage-started": "נא לבדוק את השגיאות ואת הודעת ההשלמה ב[[$1|יומן תרגום הדפים]]",
+ "pt-deletepage-intro": "הדך המיוחד הזה מאפשר לך למחוק בשלמותם דפים לתרגום, חבילות הודעות, או תרגומים שלהם לשפה כלשהי.\nפעולת המחיקה לא תהיה מיידית, כי יש למחוק את כל הדפים התלויים בהם.\nפעולות שייכשלו יירשמו ב[[$1|יומן המתאים]] ויהיה צורך לתקן אותן ידנית.",
+ "pagemigration": "המרת דף מתורגם",
+ "pagemigration-summary": "יש לציין דף תרגום ולשחזר כל תרגום שנעשה לפני שההרחבה Translate הופעלה בדף.",
+ "pm-import-button-label": "יבוא",
+ "pm-savepages-button-label": "שמירה",
+ "pm-cancel-button-label": "ביטול",
+ "pm-page-does-not-exist": "הדף $1 אינו קיים.",
+ "pm-old-translations-missing": "$1 אינו מכיל תרגומים ישנים.",
+ "pm-extra-units-warning": "ייתכן שקיימות כאן יחידות נספות. נא להתאים את המקור ואת יחידות התרגום.",
+ "pm-pagename-missing": "נא להזין את שם הדף",
+ "pm-add-icon-hover-text": "להוסיף יחידה למטה",
+ "pm-swap-icon-hover-text": "להחליף עם יחידה מעל",
+ "pm-delete-icon-hover-text": "למחוק יחידה",
+ "pm-pagetitle-placeholder": "נא להזין את שם הדף",
+ "pm-pagetitle-invalid": "המרת דפים עובדת רק בדפים מתורגמים, למשל \"Page/de\". הכותרת שסופקה אינה תקינה.",
+ "pm-pagetitle-missing": "נא להזין את שם הדף.",
+ "pm-langcode-missing": "המרת דפים עובדת רק בדפים מתורגמים, למשל \"Page/de\". הכותרת שסופקה אינה דף מתורגם.",
+ "pm-summary-import": "דף מיובא באמצעות [[Special:PageMigration|המרת דף מתורגם]]",
+ "pm-on-import-message-text": "התרגומים הישנים יובאו. יש להשתמש באפשרויות ההוספה, ההחלפה והמחיקה כדי להתאים את יחידות התרגום וללחוץ על כפתור \"{{int:pm-savepages-button-label}}\" כדי לשמור אותם. יש ללחוץ על כפתור \"{{int:pm-cancel-button-label}}\" כדי לזרוק.",
+ "pm-on-save-message-text": "יחידות התרגום נשמרו. עכשיו אפשר להזין את כותרת התרגום החדש כדי להעביר אותו, או לעשות שינויים ליחידות להלן ולשמור גרסה חדשה.",
+ "pm-pagetitle-not-translatable": "הדף $1 אינו חלק מדף לתרגום.",
+ "pm-translation-unit-fetch-failed": "אירעה שגיאה בעת אחזור יחידות תרגום עבור הדף.",
+ "tpt-translate-title": "לאפשר תרגום של כותרת הדף",
+ "pp-save-summary": "הדף הוכן לתרגום",
+ "pagepreparation": "הכנת דף",
+ "pagepreparation-summary": "נא להגדיר איזה דף להכין לתרגום.",
+ "pp-pagename-placeholder": "נא להזין את שם הדף",
+ "pp-prepare-button-label": "הכנה",
+ "pp-save-button-label": "פרסום",
+ "pp-cancel-button-label": "ביטול",
+ "pp-save-message": "הדף פורסם. באפשרותך [$1 לערוך] אותו.",
+ "pp-prepare-message": "הדף הוכן לתרגום. ר' את ההשוואה להלן. יש ללחוץ על הכפתור \"{{int:pp-save-button-label}} אם הכול בסדר!",
+ "pp-already-prepared-message": "נראה שהדף כבר הוכן לתרגום. אין שינויים בהשוואה לגרסה הקודמת.",
+ "pp-diff-error": "אירה שגיאה בעת אחזור השוואת הגרסאות מהשרת.",
+ "pp-pagename-missing": "נא להזין את שם הדף.",
+ "pp-diff-old-header": "טקסט המקור",
+ "pp-diff-new-header": "טקסט שהוכן",
+ "tpt-unlink-confirm": "נא לאשר שאכן ברצונך להסיר את הדף הזה ממערכת התרגום.\nבורר השפות ושמות של דפים מתורגמים יפסיקו לפעול.\nניתן יהיה לערוך את דפי התרגום.",
+ "tpt-unlink-button": "הסרה ממערכת התרגום",
+ "tpt-unlink-summary": "הסרת דף ממערכת התרגום",
+ "tpt-generic-confirm": "נא לאשר את הפעולה.",
+ "tpt-generic-button": "אישור",
+ "tpt-validation-not-insertable": "שם משתנה התרגום \"$1\" אינו פועל בתור טקסט בר־הוספה בממשק התרגום. נא להימנע משימוש בתווים מיוחדים.",
+ "tpt-validation-name-reuse": "משתנה התרגום \"$1\" מוגדר כמה פעמים עם תוכן שונה. נא לשנות את שמות המשתנים כדי שיהיו ייחודיים בתוך יחידת התרגום.",
+ "visualeditor-annotations-translate-start": "תחילת התוכן שצריך לתרגם",
+ "visualeditor-annotations-translate-end": "סוף התוכן שצריך לתרגם",
+ "visualeditor-annotations-translate-description": "הטווח הזה מסומן \"לתרגום\". נא לוודא {{GENDER:|שאתה עוקב|שאת עוקבת}} אחר ההנחיות בנושא [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration/he#Changing_the_source_text שינוי טקסט המקור].",
+ "visualeditor-annotations-tvar-start": "תחילת תוכן לא לתרגום",
+ "visualeditor-annotations-tvar-end": "סוף תוכן לא לתרגום",
+ "visualeditor-annotations-tvar-description": "הטווח הזה סומן \"לא לתרגום\". נא לקרוא על [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration/he#Segmentation חלוקת טקסט המקור למקטעים] למידע נוסף."
+}
diff --git a/Translate/i18n/pagetranslation/hi.json b/Translate/i18n/pagetranslation/hi.json
new file mode 100644
index 00000000..9e5a3b62
--- /dev/null
+++ b/Translate/i18n/pagetranslation/hi.json
@@ -0,0 +1,270 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ansumang",
+ "NehalDaveND",
+ "Saurmandal",
+ "Sfic",
+ "Siddhartha Ghai",
+ "ThisIsACreeper0101",
+ "संजीव कुमार"
+ ]
+ },
+ "pagetranslation": "पृष्ठ का अनुवाद",
+ "nstab-translations": "अनुवाद इकाई",
+ "right-pagetranslation": "पृष्ठ के संस्करणों को अनुवाद के लिए चिह्नित करें",
+ "action-pagetranslation": "अनुवाद-योग्य पृष्ठों को प्रबंधित करें",
+ "tps-edit-sourcepage-text": "आप एक स्रोत अनुवाद पृष्ठ को संपादित कर रहे हैं। कृपया ऐसा न करें अगर आप इन प्रलेखों से अनुकूल नहीं हैं:\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text स्रोत पाठ को बदलना]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Markup_examples उपयुक्त मार्कअप का उदाहरण]",
+ "tps-edit-sourcepage-ve-warning-limited-text": "ऐसा हो सकता है कि कुछ अनुवाद-योग्य हिस्सों को इस एडिटर में संपादित न किया जा सके। इन्हें संपादित करने के लिए कृपया स्रोत एडिटर का इस्तेमाल करें।",
+ "tps-edit-sourcepage-ve-warning-title": "चेतावनी: असमर्थित पृष्ठ",
+ "tps-edit-sourcepage-ve-warning-text": "आप एक अनुवाद-योग्य पृष्ठ को संपादित कर रहे हैं। इस एडिटर में संपादन अब तक आधिकारिक रूप से समर्थित नहीं है। कृपया स्रोत एडिटर का उपयोग करें।",
+ "tps-edit-sourcepage-ve-warning-button": "ठीक है",
+ "tpt-section": "अनुवाद इकाई $1",
+ "tpt-section-new": "नया अनुवाद इकाई।\nनाम: $1",
+ "tpt-section-deleted": "अनुवाद इकाई $1",
+ "tpt-diff-old": "पूर्व पाठ",
+ "tpt-diff-new": "नया पाठ",
+ "tpt-submit": "इस संस्करण को अनुवाद के लिए चिह्नित करें",
+ "tpt-sections-oldnew": "नए और मौजूदा अनुवाद इकाइयाँ",
+ "tpt-sections-deleted": "हटाए गए अनुवाद इकाइयाँ",
+ "tpt-sections-template": "अनुवाद पृष्ठ का साँचा",
+ "tpt-action-nofuzzy": "अनुवाद को अमान्य चिह्नित न करें",
+ "tpt-badtitle": "पृष्ठ का नाम ($1) मान्य नाम नहीं है",
+ "tpt-nosuchpage": "पृष्ठ $1 मौजूद नहीं है",
+ "tpt-oldrevision": "$2, पृष्ठ [[:$1]] का नवीनतम संस्करण नहीं है।\nकेवल नवीनतम संस्करण को अनुवाद के लिए चिह्नित किया जा सकता है।",
+ "tpt-notsuitable": "पृष्ठ $1 को अनुवादित करना ठीक न भी हो सकता है।\nजाँचें कि इसमें $2 टैग्स और एक मान्य सिनटैक्स हैं कि नहीं।",
+ "tpt-saveok": "पृष्ठ [[:$1]] को $2 {{PLURAL:$2|अनुवाद इकाई|अनुवाद इकाइयों}} के साथ अनुवाद के लिए चिह्नित किया गया है।\nयह पृष्ठ <span class=\"plainlinks\">[$3 अनुवादित]</span> किया जा सकता है।",
+ "tpt-saveok-first": "आप इस पृष्ठ पर [[Special:PageMigration|मौजूदा अनुवादों को आयात कर]] सकते हैं (अगर मौजूद हो तो)।",
+ "tpt-offer-notify": "आप इस पृष्ठ के बारे में <span class=\"plainlinks\">[$1 अनुवादकों को सूचित कर]</span> सकते हैं।",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|अनुवाद-योग्य पृष्ठों की सूची।]]",
+ "tpt-showpage-intro": "नए अनुवाद इकाइयों के नीचे मौजूदा और हटाए गए इकाइयों को सूचीबद्ध किया जाता है।\nइस संस्करण को अनुवाद के लिए चिह्नित करने से पहले, यह सुनिश्चित करें कि अनुवाद इकाइयों पर कम से कम बदलाव आया हो, ताकि अनुवादकों को बेकार का काम न करना पड़े।",
+ "tpt-mark-summary": "इस अवतरण को अनुवाद के लिए चिह्नित किया",
+ "tpt-mark-nochanges": "निरीक्षित करने के लिए कोई बदलाव नहीं है। इस पृष्ठ को अनुवाद के लिए चिह्नित करने से इस पृष्ठ या फिर किसी भी मौजूदा अनुवाद इकाई को संपादित नहीं किया जाएगा।",
+ "tpt-edit-failed": "इस पृष्ठ को अपडेट न किया जा सका: $1",
+ "tpt-duplicate": "अनुवाद इकाई के नाम $1 का एकाधिक बार उपयोग किया गया है।",
+ "tpt-invalid": "अनुवाद इकाई के नाम $1 में अंडरस्कोर या स्लैश नहीं होना चाहिए।",
+ "tpt-unmarked": "पृष्ठ [[:$1]] अब अनुवाद-योग्य नहीं रहा।",
+ "tpt-list-nopages": "ऐसी कोई पृष्ठ नहीं है जिसे अनुवाद के लिए चिह्नित किया गया हो या फिर जो अनुवाद के लिए चिह्नित किए जाने को तैयार है।",
+ "tpt-new-pages-title": "अनुवाद के लिए सुझावित पृष्ठ",
+ "tpt-old-pages-title": "अनुवादित किए जा रहे पृष्ठ",
+ "tpt-other-pages-title": "टूटे पृष्ठ",
+ "tpt-outdated-pages-title": "लंबित बदलाव वाले पृष्ठ",
+ "tpt-new-pages": "{{PLURAL:$1|इस पृष्ठ|इन पृष्ठों}} पर अनुवाद टैग वाले पाठ हैं, मगर {{PLURAL:$1|इस पृष्ठ|इन पृष्ठों}} के किसी भी संस्करण को अनुवाद के लिए चिह्नित नहीं किया गया है।",
+ "tpt-old-pages": "{{PLURAL:$1|इस पृष्ठ|इन पृष्ठों}} के नवीनतम संस्करण को अनुवाद के लिए चिह्नित किया गया है।",
+ "tpt-other-pages": "{{PLURAL:$1|इस पृष्ठ के एक पुराने संस्करण|इन पृष्ठों के कुछ पुराने संस्करणों}} को अनुवाद के लिए चिह्नित किया गया है, मगर नवीनतम {{PLURAL:$1|संस्करण|संस्करणों}} को अनुवाद के लिए चिह्नित नहीं किया जा सकता।",
+ "tpt-outdated-pages": "{{PLURAL:$1|इस पृष्ठ|इन पृष्ठों}} पर ऐसे बदलाव हैं जिन्हें अनुवाद के लिए चिह्नित नहीं किया गया है।",
+ "tpt-tag-discouraged": "हतोत्साहित",
+ "tpt-tag-oldsyntax": "पुराना सिनटैक्स",
+ "tpt-tag-no-transclusion-support": "ट्रांसक्लूशन समर्थित नहीं करना",
+ "tpt-select-prioritylangs": "आवश्क भाषाओं की सूची जिसे कॉमा से अलग किया गया है:",
+ "tpt-select-prioritylangs-force": "आवश्यक भाषाओं के अलावा दूसरे भाषाओं में अनुवाद को रोकें",
+ "tpt-select-prioritylangs-reason": "कारण:",
+ "tpt-sections-prioritylangs": "आवश्यक भाषाएँ",
+ "tpt-sections-syntaxversion": "सिनटैक्स का संस्करण",
+ "tpt-syntaxversion-text": "यह पृष्ठ अनुवाद-योग्य पृष्ठ के स्रोत सिनटैक्स के एक पुराने संस्करण का उपयोग करता है। नया संस्करण अनानुवादित अनुभागों को HTML टैग्स में डाल देगा जिसमें पाठ के सही भाषा को चिह्नित किया जाएगा। उदाहरणस्वरूप: $1। आप अनुचित स्थानों पर चिह्नों के उपयोग को रोकने के लिए नए $2 मार्कअप सिनटैक्स का उपयोग कर सकते हैं, जैसे किसी एलिमेंट के <code>title</code> एट्रीब्यूट को अनुवादित करते समय। पुराने सिनटैक्स संस्करण पर वापस जाना संभव नहीं है।",
+ "tpt-syntaxversion-label": "इस पृष्ठ के लिए नवीनतम सिनटैक्स का उपयोग करें",
+ "tpt-transclusion": "साँचे का ट्रांसक्लूशन",
+ "tpt-transclusion-label": "इस पृष्ठ के लिए अनुवाद-सूचित ट्रांसक्लूशन को सक्षम करें",
+ "tpt-rev-mark": "अनुवाद हेतु चिह्नित करें",
+ "tpt-rev-unmark": "अनुवाद से हटाएँ",
+ "tpt-rev-discourage": "हतोत्साहित करें",
+ "tpt-rev-encourage": "पुनःस्थापित करें",
+ "tpt-rev-mark-tooltip": "इस पृष्ठ के नवीनतम संस्करण को अनुवाद के लिए चिह्नित करें।",
+ "tpt-rev-unmark-tooltip": "इस पृष्ठ को अनुवाद से हटाएँ।",
+ "tpt-rev-discourage-tooltip": "इस पृष्ठ पर नए अनुवादों को हतोत्साहित करें।",
+ "tpt-rev-encourage-tooltip": "इस पृष्ठ को सामान्य अनुवाद पर वापस ले जाएँ।",
+ "translate-tag-translate-link-desc": "इस पृष्ठ को अनुवादित करें",
+ "translate-tag-markthis": "इस पृष्ठ को अनुवाद हेतु चिह्नित करें",
+ "translate-tag-markthisagain": "इस पृष्ठ के आखिरी बार <span class=\"plainlinks\">[$2 अनुवाद के लिए चिह्नित किए]</span> जाने के बाद से इसपर <span class=\"plainlinks\">[$1 बदलाव]</span> आए हैं।",
+ "translate-tag-hasnew": "इस पृष्ठ पर <span class=\"plainlinks\">[$1 बदलाव]</span> हैं जिन्हें अनुवाद के लिए चिह्नित नहीं किया गया है।",
+ "tpt-translation-intro": "यह [[$2]] पृष्ठ का एक <span class=\"plainlinks\">[$1 अनुवादित संस्करण]</span> है और इसे $3% तक पूरा किया गया है।",
+ "tpt-translation-intro-fuzzy": "कालग्रस्त अनुवादों को इस तरह से चिह्नित किया जाता है।",
+ "tpt-languages-legend": "अन्य भाषाएँ:",
+ "tpt-languages-zero": "इस भाषा के लिए अनुवाद करना शुरू करें",
+ "tpt-languages-nonzero": "$1 ($2% अनुवादित)",
+ "tpt-tab-translate": "अनुवादित करें",
+ "tpt-target-page": "इस पृष्ठ को संपादन की मदद से अपडेट नहीं किया जा सकता।\nयह पृष्ठ दूसरे पृष्ठ [[$1]] का एक अनुवाद है और अनुवाद को [$2 अनुवाद उपकरण] की मदद से बदला जा सकता है।",
+ "tpt-unknown-page": "इस नामस्थान में सिर्फ सामग्री पृष्ठों के अनुवाद ही हो सकते हैं।\nऐसा लगता है कि आप जिस पृष्ठ को संपादित करने की कोशिश कर रहे हैं, वह अनुवाद के लिए चिह्नित किए गए किसी भी पृष्ठ का हिस्सा नहीं है।",
+ "tpt-translation-restricted": "इस भाषा में अनुवाद को अनुवाद प्रबंधक द्वारा रोका गया है।\n\nकारण: $1",
+ "tpt-translation-restricted-no-reason": "इस पृष्ठ के इस भाषा में अनुवाद को अनुवाद प्रबंधक द्वारा रोका गया है।",
+ "tpt-discouraged-language-force-header": "इस पृष्ठ को $1 में अनुवादित नहीं किया जा सकता।",
+ "tpt-discouraged-language-force-content": "एक अनुवाद प्रबंधक ने फैसला लिया है कि इस पृष्ठ को सिर्फ $1 में ही अनुवादित किया जा सकता है।",
+ "tpt-discouraged-language-header": "$1 में अनुवादित करना इस पृष्ठ के लिए आवश्यक नहीं है।",
+ "tpt-discouraged-language-content": "एक अनुवाद प्रबंधक ने अनुवाद के प्रयासों को $1 पर लगाने का फैसला लिया है।",
+ "tpt-discouraged-language-force": "<strong>इस पृष्ठ को $2 में अनुवादित नहीं किया जा सकता।</strong>\n\nएक अनुवाद प्रबंधक के फैसले पर इस पृष्ठ के सिर्फ $3 में ही अनुवादित किया जा सकता है।",
+ "tpt-priority-languages": "एक अनुवाद प्रबंधक ने इस समूह के आवश्यक भाषाओं को $1 पर सेट किया।",
+ "tpt-priority-languages-force": "एक अनुवाद प्रबंधक ने इस समूह के आवश्यक भाषाओं को $1 पर सेट किया। दूसरे भाषाओं में अनुवादित करने की अनुमति नहीं है।",
+ "tpt-discouraged-translation-header": "इस पृष्ठ के अनुवाद को हतोत्साहित किया गया है।",
+ "tpt-discouraged-translation-content": "एक अनुवाद प्रबंधक ने इस पृष्ठ के अनुवाद को हतोत्साहित किया है। आप इसे फिर भी अनुवादित कर सकते हैं, मगर यह शायद किसी काम न आए।",
+ "tpt-render-summary": "स्रोत पृष्ठ के नए संस्करण से मेल खाने के लिए अपडेट किया जा रहा है",
+ "aggregategroups": "स्थायी संदेश समूह",
+ "tpt-aggregategroup-add": "जोड़ें",
+ "tpt-aggregategroup-save": "सहेजें",
+ "tpt-aggregategroup-close": "बंद करें",
+ "tpt-aggregategroup-add-new": "एक नया स्थायी समूह जोड़ें",
+ "tpt-aggregategroup-new-name": "नाम:",
+ "tpt-aggregategroup-new-description": "विवरण (वैकल्पिक):",
+ "tpt-aggregategroup-remove-confirm": "क्या आप इस स्थायी समूह को हटाना चाहते हैं?",
+ "tpt-aggregategroup-invalid-group": "समूह मौजूद नहीं है",
+ "tpt-aggregategroup-edit-name": "नाम:",
+ "tpt-aggregategroup-edit-description": "विवरण:",
+ "tpt-aggregategroup-update": "सहेजें",
+ "tpt-aggregategroup-update-cancel": "रद्द करें",
+ "tpt-aggregategroup-expand-all-groups": "सभी समूहों को विस्तृत करें",
+ "tpt-aggregategroup-collapse-all-groups": "सभी समूहों को छोटा करें",
+ "tpt-aggregategroup-expand-group": "समूह को विस्तृत करें",
+ "tpt-aggregategroup-collapse-group": "समूह को छोटा करें",
+ "tpt-invalid-group": "अमान्य समूह",
+ "pt-parse-open": "असंतुलित &lt;translate> टैग।\nअनुवाद साँचा: <pre>$1</pre>",
+ "pt-parse-close": "असंतुलित &lt;/translate> टैग।\nअनुवाद साँचा: <pre>$1</pre>",
+ "pt-parse-nested": "नेस्टेड &lt;translate> अनुवाद इकाइयों की अनुमति नहीं है।\nटैग का टेक्स्ट: <pre>$1</pre>",
+ "pt-shake-multiple": "एक अनुवाद इकाई के लिए एकाधिक अनुवाद इकाई चिह्नों का उपयोग।\nजाँचें कि अनुवाद इकाइयों को रिक्त पंक्तियों से अलग किया गया है कि नहीं।\nअनुवाद इकाई का टेक्स्ट: <pre>$1</pre>",
+ "pt-shake-position": "अनपेक्षित स्थान पर अनुवाद इकाई चिह्न।\nअनुवाद इकाई का टेक्स्ट: <pre>$1</pre>",
+ "pt-shake-empty": "चिह्न \"$1\" के लिए खाली अनुवाद इकाई।",
+ "log-description-pagetranslation": "पृष्ठ अनुवाद प्रणाली से जुड़े कार्यों के लिए लॉग",
+ "log-name-pagetranslation": "पृष्ठ अनुवाद लॉग",
+ "logentry-pagetranslation-mark": "$1 ने $3 को अनुवाद के लिए {{GENDER:$2|चिह्नित किया}}",
+ "logentry-pagetranslation-unmark": "$1 ने अनुवाद प्रणाली से $3 को {{GENDER:$2|हटाया}}",
+ "logentry-pagetranslation-moveok": "$1 ने अनुवाद-योग्य पृष्ठ $3 के $4 पर स्थानांतरण को {{GENDER:$2|समाप्त किया}}",
+ "logentry-pagetranslation-movenok": "पृष्ठ $3 को $4 पर लेते समय $1 को {{GENDER:$2|त्रुटि आई}}",
+ "logentry-pagetranslation-deletefok": "$1 ने अनुवाद-योग्य पृष्ठ $3 को {{GENDER:$2|हटाया}}",
+ "logentry-pagetranslation-deletefnok": "$1 $3 को नहीं हटा {{GENDER:$2|पाए|पाई}} जो अनुवाद-योग्य पृष्ठ $4 का हिस्सा है",
+ "logentry-pagetranslation-deletelok": "$1 ने अनुवाद-योग्य पृष्ठ $3 को {{GENDER:$2|हटाया}}",
+ "logentry-pagetranslation-deletelnok": "$1 $3 को नहीं हटा {{GENDER:$2|पाए|पाई}} जो अनुवाद पृष्ठ $4 का हिस्सा है",
+ "logentry-pagetranslation-encourage": "$1 ने $3 के अनुवाद को {{GENDER:$2|प्रोत्साहित किया}}",
+ "logentry-pagetranslation-discourage": "$1 ने $3 के अनुवाद को {{GENDER:$2|हतोत्साहित किया}}",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 ने अनुवाद-योग्य पृष्ठ $3 से आवश्यक भाषाओं को {{GENDER:$2|हटाया}}",
+ "logentry-pagetranslation-prioritylanguages": "$1 ने अनुवाद-योग्य पृष्ठ $3 के आवश्यक भाषाओं को $5 पर {{GENDER:$2|सेट किया}}",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 ने अनुवाद-योग्य पृष्ठ $3 के आवश्यक भाषाओं को $5 पर {{GENDER:$2|सीमित किया}}",
+ "logentry-pagetranslation-associate": "$1 ने अनुवाद-योग्य पृष्ठ $3 को स्थायी समूह $4 में {{GENDER:$2|जोड़ा}}",
+ "logentry-pagetranslation-dissociate": "$1 ने अनुवाद-योग्य पृष्ठ $3 को स्थायी समूह $4 से {{GENDER:$2|हटाया}}",
+ "log-action-filter-pagetranslation": "कार्य का प्रकार:",
+ "log-action-filter-pagetranslation-mark": "अनुवाद के लिए चिह्नित करें",
+ "log-action-filter-pagetranslation-unmark": "अनुवाद से हटाना",
+ "log-action-filter-pagetranslation-move": "पृष्ठ स्थानांतरण",
+ "log-action-filter-pagetranslation-delete": "हटाए गए पृष्ठ",
+ "log-action-filter-pagetranslation-encourage": "अनुवाद का प्रोत्साहन",
+ "log-action-filter-pagetranslation-discourage": "अनुवाद का हतोत्साहन",
+ "log-action-filter-pagetranslation-prioritylanguages": "आवश्यक भाषाएँ बदलें",
+ "log-action-filter-pagetranslation-aggregategroups": "स्थायी समूहों को बदलना",
+ "log-description-messagebundle": "संदेश बंडल प्रणाली से जुड़े कार्यों के लिए लॉग",
+ "log-name-messagebundle": "संदेश बंडल लॉग",
+ "logentry-messagebundle-moveok": "$1 ने संदेश बंडल $3 के $4 पर स्थानांतरण को {{GENDER:$2|समाप्त किया}}",
+ "logentry-messagebundle-movenok": "संदेश बंडल $3 को $4 पर लेते समय $1 को {{GENDER:$2|त्रुटि आई}}",
+ "logentry-messagebundle-deletefok": "$1 ने संदेश बंडल $3 को {{GENDER:$2|हटाया}}",
+ "logentry-messagebundle-deletefnok": "$1 $3 को {{GENDER:$2|हटा न पाए}} जो संदेश बंडल $4 का है",
+ "log-action-filter-messagebundle": "कार्य का प्रकार:",
+ "log-action-filter-messagebundle-move": "संदेश बंडल के स्थानांंतरण",
+ "log-action-filter-messagebundle-delete": "संदेश बंडल के डिलीशन",
+ "pt-movepage-title": "अनुवाद-योग्य पृष्ठ \"$1\" को स्थानांतरित करें",
+ "pt-movepage-messagebundle-title": "संदेश बंडल \"$1\" को स्थानांतरित करें",
+ "pt-movepage-blockers": "अनुवाद-योग्य पृष्ठ को नए नाम पर {{PLURAL:$1|इस त्रुटि|इन त्रुटियों}} की वजह से स्थानांतरित नहीं किया जा सकता:",
+ "pt-movepage-block-base-invalid": "अनुवाद-योग्य पृष्ठ का लक्ष्य नाम अमान्य है।",
+ "pt-movepage-block-tp-invalid": "अनुवाद पृष्ठ \"[[:$1]]\" का लक्ष्य नाम अमान्य होगा (ज़्यादा लंबा है)?",
+ "pt-movepage-block-section-invalid": "अनुवाद इकाई के लिए अनुवाद पृष्ठ \"[[:$1]]\" का लक्ष्य नाम अमान्य होगा (ज़्यादा लंबा है?)।",
+ "pt-movepage-block-subpage-invalid": "\"[[:$1]]\" का लक्ष्य उपपृष्ठ नाम अमान्य होगा (ज़्यादा लंबा है)?",
+ "pt-movepage-block-talkpage-invalid": "\"[[:$1]]\" का लक्ष्य वार्ता पृष्ठ नाम अमान्य होगा (ज़्यादा लंबा है)?",
+ "pt-movepage-block-unknown-page": "ऐसा लगता है कि स्थानांतरित किया जा रहा पृष्ठ ([[:$1]]) अनुवाद-योग्य पृष्ठ का हिस्सा नहीं है।",
+ "pt-movepage-block-ns-talk-unsupported": "पृष्ठ ([[:$1]]) को एक ऐसे नामस्थान पर ले जाया जा रहा है जिसपर वार्ता पृष्ठ समर्थित नहीं हैं।",
+ "pt-movepage-block-rename-failed": "पृष्ठ [[:$1]] के लिए नया शीर्षक बनाते समय एक त्रुटि आई",
+ "pt-movepage-list-pages": "स्थानांतरित करने के लिए पृष्ठों की सूची",
+ "pt-movepage-list-translation": "अनुवाद {{PLURAL:$1|पृष्ठ}}",
+ "pt-movepage-list-section": "अनुवाद इकाई {{PLURAL:$1|पृष्ठ}}",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|उपपृष्ठ|उपपृष्ठों}} को अनुवाद के लिए चिह्नित किया गया",
+ "pt-movepage-list-translatable-note": "इन पृष्ठों को अलग से स्थानांतरित किया जा सकता है।",
+ "pt-movepage-list-other": "अन्य {{PLURAL:$1|उपपृष्ठ}}",
+ "pt-movepage-list-count": "कुल $1 {{PLURAL:$1|पृष्ठ|पृष्ठों}}, $2 {{PLURAL:$2|उपपृष्ठ|उपपृष्ठों}} और $3 {{PLURAL:$3|वार्ता पृष्ठ|वार्ता पृष्ठों}} को स्थानांतरित किया जाएगा।",
+ "pt-movepage-page-count-limit": "इस अनुवाद-योग्य पृष्ठ पर एक से ज़्यादा {{PLURAL:$1|पृष्ठ}} हैं। इतने सारे पृष्ठों को एक साथ स्थानांतरित करना सेहत के लिए हानिकारक है। इसलिए इसे अनुरक्षण स्क्रिप्ट से पूरा करने के लिए किसी सिस्टम प्रबंधक से संपर्क करें।",
+ "pt-movepage-list-no-pages": "कोई पृष्ठ नहीं मिला।",
+ "pt-movepage-legend": "अनुवाद-योग्य पृष्ठ को स्थानांतरित करें",
+ "pt-movepage-messagebundle-legend": "संदेश बंडल को स्थानांतरित करें",
+ "pt-movepage-current": "वर्तमान नाम:",
+ "pt-movepage-new": "नया नाम:",
+ "pt-movepage-reason": "कारण:",
+ "pt-movepage-subpages": "सभी उपपृष्ठों को स्थानांतरित करें",
+ "pt-movepage-talkpages": "वार्ता पृष्ठों को स्थानांतरित करें",
+ "pt-movepage-talkpage-exists": "(वार्ता पृष्ठ है)",
+ "pt-movepage-action-check": "जाँचें कि स्थानांतरण संभव है कि नहीं",
+ "pt-movepage-action-perform": "स्थानांतरित करें",
+ "pt-movepage-action-other": "लक्ष्य बदलें:",
+ "pt-movepage-intro": "इस विशेष पृष्ठ से आप उन पृष्ठों को स्थानांतरित कर सकते हैं जिन्हें अनुवाद के लिए चिह्नित किया गया है। स्थानांतरण का यह कार्य तुरंत नहीं हो जाएगा, क्योंकि कई पृष्ठों को स्थानांतरित करना होगा। पृष्ठों को स्थानांतरित करते समय उन पृष्ठों के प्रति कोई क्रिया करना असंभव होगा। त्रुटियों को [[$1|लॉग]] पर लॉग किया जाएगा और उन्हें सदस्य द्वारा ठीक किया जाना होगा।",
+ "pt-movepage-logreason": "अनुवाद-योग्य पृष्ठ \"$1\" का हिस्सा",
+ "pt-movepage-started": "कृपया कुछ देर में त्रुटियों और समाप्ति संदेश के लिए [[$1|लॉग]] देखें।",
+ "pt-locked-page": "इस पृष्ठ को लॉक किया गया है क्योंकि अनुवाद-योग्य पृष्ठ को इस समय स्थानांतरित किया जा रहा है।",
+ "pt-deletepage-lang-title": "अनुवाद पृष्ठ \"$1\" को हटाया जा रहा है",
+ "pt-deletepage-tp-title": "अनुवाद-योग्य पृष्ठ \"$1\" को हटाया जा रहा है",
+ "pt-deletepage-mb-title": "संदेश बंडल \"$1\" को हटाएँ",
+ "pt-deletepage-invalid-title": "दर्ज किया गया पृष्ठ अमान्य है।",
+ "pt-deletepage-invalid-text": "दर्ज किया गया पृष्ठ न ही अनुवाद-योग्य पृष्ठ है, और न ही अनुवाद पृष्ठ।",
+ "pt-deletepage-action-check": "हटाने के लिए पृष्ठों को सूचीबद्ध करें",
+ "pt-deletepage-action-perform": "हटाएँ",
+ "pt-deletepage-action-other": "लक्ष्य बदलें",
+ "pt-deletepage-lang-legend": "अनुवाद पृष्ठ को हटाएँ",
+ "pt-deletepage-tp-legend": "अनुवाद-योग्य पृष्ठ को हटाएँ",
+ "pt-deletepage-mb-legend": "संदेश बंडल हटाएँ",
+ "pt-deletepage-any-legend": "अनुवाद-योग्य पृष्ठ, संदेश बंडल या अनुवाद पृष्ठ को हटाएँ",
+ "pt-deletepage-current": "पृष्ठ का नाम:",
+ "pt-deletepage-reason": "कारण:",
+ "pt-deletepage-reason-details": "अन्य/अतिरिक्त कारण:",
+ "pt-deletepage-reason-other": "अन्य कारण",
+ "pt-deletepage-subpages": "सभी उपपृष्ठों को हटाएँ",
+ "pt-deletepage-list-pages": "हटाने के लिए पृष्ठों की सूची",
+ "pt-deletepage-list-translation": "अनुवाद पृष्ठ",
+ "pt-deletepage-list-section": "अनुवाद इकाई पृष्ठ",
+ "pt-deletepage-list-other": "अन्य उपपृष्ठ",
+ "pt-deletepage-list-count": "कुल {{PLURAL:$1|पृष्ठ}} और {{PLURAL:$2|उपपृष्ठ}} हटाए जाएँगे।",
+ "pt-deletepage-list-no-pages": "कोई पृष्ठ नहीं मिला।",
+ "pt-deletepage-full-logreason": "अनुवाद-योग्य पृष्ठ \"$1\" का हिस्सा",
+ "pt-deletepage-lang-logreason": "अनुवाद पृष्ठ \"$1\" का हिस्सा",
+ "pt-deletepage-started": "कृपया त्रुटियों और समाप्ति संदेशों के लिए [[$1|पृष्ठ अनुवाद लॉग]] देखें।",
+ "pt-deletepage-intro": "इस विशेष पृष्ठ की मदद से आप एक पूरे अनुवाद-योग्य पृष्ठ, संदेश बंडल, या फिर किसी विशिष्ट भाषा के अनुवाद को हटा सकते हैं।\nहटाने का काम तुरंत नहीं हो जाएगा, क्योंकि हटाए गए पृष्ठ पर निर्भर दूसरे पृष्ठों को भी हटा दिया जाएगा।\nत्रुटियों को [[$1|पृष्ठ अनुवाद लॉग]] पर लॉग किया जाएगा और उन्हें सदस्य द्वारा ठीक किया जाना होगा।",
+ "pagemigration": "अनुवाद पृष्ठ माइग्रेशन",
+ "pagemigration-summary": "एक अनुवाद पृष्ठ दर्ज करें और उस पृष्ठ पर अनुवाद एक्सटेंशन के लागू होने से पहले किए गए किसी भी अनुवाद को पुनःस्थापित करें।",
+ "pm-import-button-label": "आयात करें",
+ "pm-savepages-button-label": "सहेजें",
+ "pm-cancel-button-label": "रद्द करें",
+ "pm-page-does-not-exist": "$1 मौजूद नहीं है।",
+ "pm-old-translations-missing": "$1 में पुराने अनुवाद नहीं हैं।",
+ "pm-extra-units-warning": "अतिरिक्त इकाइयाँ मौजूद हो सकते हैं। कृपया ठीक से स्रोत और अनुवाद इकाइयों को जाँचें।",
+ "pm-pagename-missing": "कृपया पृष्ठ का नाम दर्ज करें।",
+ "pm-add-icon-hover-text": "नीचे एक इकाई जोड़ें",
+ "pm-swap-icon-hover-text": "नीचे की इकाई से बदलें",
+ "pm-delete-icon-hover-text": "इकाई को हटाएँ",
+ "pm-pagetitle-placeholder": "पृष्ठ का शीर्षक लिखें",
+ "pm-pagetitle-invalid": "पृष्ठ माइग्रेशन सिर्फ अनुवाद पृष्ठों पर काम करता है, जैसे \"Page/de\"। निर्धारित शीर्षक अमान्य है।",
+ "pm-pagetitle-missing": "कृपया पृष्ठ का नाम लिखें।",
+ "pm-langcode-missing": "पृष्ठ माइग्रेशन सिर्फ अनुवाद पृष्ठों पर काम करता है, जैसे \"Page/de\"। निर्धारित शीर्षक कोई अनुवाद पृष्ठ नहीं है।",
+ "pm-summary-import": "[[Special:PageMigration|पृष्ठ माइग्रेशन]] की मदद से अनुवाद आयात किया।",
+ "pm-on-import-message-text": "पुराने अनुवाद आयात किए गए हैं। अनुवाद इकाइयों को सही स्थान पर लाने के लिए जोड़ने, बदलने और हटाने के बटनों का उपयोग करें और उन्हें सहेजने के लिए \"{{int:pm-savepages-button-label}}\" बटन पर क्लिक करें। रद्द करने के लिए \"{{int:pm-cancel-button-label}}\" बटन पर क्लिक करें।",
+ "pm-on-save-message-text": "अनुवाद इकाइयों को सहेज दिया गया है। अब आप नए अनुवाद पृष्ठ को आयात करने के लिए अनुवाद पृष्ठ का नाम लिख सकते हैं, या फिर नीचे के इकाइयों में बदलाव करके नए अवतरण को सहेज सकते हैं।",
+ "pm-pagetitle-not-translatable": "$1 किसी अनुवाद-योग्य पृष्ठ का हिस्सा नहीं है।",
+ "pm-translation-unit-fetch-failed": "पृष्ठ के अनुवाद इकाइयों को लाते समय त्रुटि आई।",
+ "tpt-translate-title": "पृष्ठ के शीर्षक को अनुवाद की अनुमति दें",
+ "pp-save-summary": "पृष्ठ को अनुवाद के लिए तैयार किया",
+ "pagepreparation": "पृष्ठ को अनुवाद के लिए तैयार करें",
+ "pagepreparation-summary": "अनुवाद के लिए तैयार करने के लिए पृष्ठ के नाम को दर्ज करें।",
+ "pp-pagename-placeholder": "पृष्ठ का नाम दर्ज करें",
+ "pp-prepare-button-label": "तैयार करें",
+ "pp-save-button-label": "सहेजें",
+ "pp-cancel-button-label": "रद्द करें",
+ "pp-save-message": "इस पृष्ठ को प्रकाशित कर दिया गया है। आप इसे [$1 संपादित] कर सकते हैं।",
+ "pp-prepare-message": "इस पृष्ठ को अनुवाद के लिए तैयार किया गया है। नीचे का अंतर देखें। अगर ठीक है तो \"{{int:pp-save-button-label}}\" बटन पर क्लिक करें!",
+ "pp-already-prepared-message": "ऐसा लगता है कि पृष्ठ को अनुवाद के लिए तैयार कर दिया गया है। पिछले संस्करण से कोई बदलाव नहीं है।",
+ "pp-diff-error": "सर्वर से अंतर लाते वक़्त एक त्रुटि आई।",
+ "pp-pagename-missing": "कृपया पृष्ठ का नाम दर्ज करें।",
+ "pp-diff-old-header": "स्रोत पाठ",
+ "pp-diff-new-header": "तैयार किया गया पाठ",
+ "tpt-unlink-confirm": "कृपया पुष्टि करें कि आप सच में इस पृष्ठ को अनुवाद सिस्टम से हटाना चाहते हैं।\nभाषा चयनकर्ता और अनुवादित पृष्ठों के नाम काम करना बंद कर देंगे।\nअनुवाद पृष्ठों को संपादित करना संभव हो जाएगा।",
+ "tpt-unlink-button": "अनुवाद से निकालें",
+ "tpt-unlink-summary": "पृष्ठ को अनुवाद से निकाला गया",
+ "tpt-generic-confirm": "कृपया कार्य को सुनिश्चित करें।",
+ "tpt-generic-button": "सुनिश्चित करें",
+ "tpt-validation-not-insertable": "अनुवाद वेरिएबल नाम \"$1\" को अनुवाद इंटरफेस में नहीं जोड़ा जा सकता। विशेष अक्षरों का उपयोग न करें।",
+ "tpt-validation-name-reuse": "अनुवाद वेरिएबल \"$1\" को विविध सामग्री के साथ कई बार परिभाषित किया गया है। वेरिएबल नामों को बदलें ताकि वे अपने अनुवाद इकाई में अनोखा रहे।",
+ "visualeditor-annotations-translate-start": "अनुवाद-योग्य सामग्री की शुरुआत",
+ "visualeditor-annotations-translate-end": "अनुवाद-योग्य सामग्री का अंत",
+ "visualeditor-annotations-translate-description": "रेंज को अनुवाद-योग्य के तौर पर चिह्नित किया गया है। कृपया [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text स्रोत पाठ को बदलने] के लिए विधि का पालन करें।",
+ "visualeditor-annotations-tvar-start": "अनुवाद-अयोग्य सामग्री की शुरुआत",
+ "visualeditor-annotations-tvar-end": "अनुवाद-अयोग्य सामग्री का अंत",
+ "visualeditor-annotations-tvar-description": "इस रेंज को अनुवाद-अयोग्य के रूप में चिह्नित किया गया है। अधिक जानकारी के लिए [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Segmentation स्रोत पाठ का विभाजन] देखें।"
+}
diff --git a/Translate/i18n/pagetranslation/hif-latn.json b/Translate/i18n/pagetranslation/hif-latn.json
new file mode 100644
index 00000000..ea48f1fd
--- /dev/null
+++ b/Translate/i18n/pagetranslation/hif-latn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Abdul Kadir"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% translate kar dewa gais)"
+}
diff --git a/Translate/i18n/pagetranslation/hr.json b/Translate/i18n/pagetranslation/hr.json
new file mode 100644
index 00000000..1df6c270
--- /dev/null
+++ b/Translate/i18n/pagetranslation/hr.json
@@ -0,0 +1,105 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bugoslav",
+ "Ex13",
+ "Herr Mlinka",
+ "MaGa",
+ "Neptune, the Mystic",
+ "Roberta F.",
+ "SpeedyGonsales"
+ ]
+ },
+ "pagetranslation": "Prijevod stranice",
+ "right-pagetranslation": "Označi inačice stranica za prijevod",
+ "action-pagetranslation": "upravljanje prevodivim stranicama",
+ "tps-edit-sourcepage-text": "Uređujete izvornik prevodljive stranice. Molimo Vas, budite sigurni da ste upoznati sa sljedećom dokumentacijom: \n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text Mijenjanje teksta izvornika] \n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Markup_examples Primjeri upotrebe načina označavanja]",
+ "tps-edit-sourcepage-ve-warning-title": "Upozorenje: Stranica nije podržana",
+ "tps-edit-sourcepage-ve-warning-text": "Uređujete prevodljivu stranicu. Uređivanje tih stranica pomoću ovoga uređivača još uvijek nije službeno podržano. Molimo Vas, rabite uređivač izvornika.",
+ "tps-edit-sourcepage-ve-warning-button": "U redu",
+ "tpt-section": "Grupa za prijevod $1",
+ "tpt-section-new": "Nova grupa za prijevod.\nIme: $1",
+ "tpt-section-deleted": "Grupa za prijevod $1",
+ "tpt-diff-old": "Prethodni tekst",
+ "tpt-diff-new": "Novi tekst",
+ "tpt-submit": "Označi ovu verziju za prijevod",
+ "tpt-sections-oldnew": "Novi i postojeći prijevodi",
+ "tpt-sections-deleted": "Obrisane grupe prijevoda",
+ "tpt-sections-template": "Predložak stranice za prijevod",
+ "tpt-action-nofuzzy": "Ne obeskrepljuj prijevode",
+ "tpt-badtitle": "Dano ime stranice ($1) nije valjani naslov",
+ "tpt-nosuchpage": "Stranica $1 ne postoji",
+ "tpt-oldrevision": "$2 nije posljednja inačica stranice [[:$1]].\nJedino posljednje inačice mogu se označiti za prevođenje.",
+ "tpt-notsuitable": "Stranica $1 nije pogodna za prevođenje.\nUtvrdite, postoje li oznake <nowiki><translate></nowiki> i ispravna sintaksa.",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|Vidi popis prevodljivih stranica.]]",
+ "tpt-mark-summary": "Ova inačica označena je za prevođenje",
+ "tpt-edit-failed": "Ažuriranje stranice nije moguće: $1",
+ "tpt-new-pages-title": "Stranice predložene za prevođenje",
+ "tpt-old-pages-title": "Stranice u prevođenju",
+ "tpt-tag-discouraged": "obeshrabruje se",
+ "tpt-select-prioritylangs-reason": "Razlog:",
+ "tpt-sections-prioritylangs": "Prednosni jezici",
+ "tpt-rev-mark": "označi za prevođenje",
+ "tpt-rev-unmark": "ukloni iz prevođenja",
+ "tpt-rev-discourage": "obeshrabreno",
+ "tpt-rev-encourage": "vrati",
+ "tpt-rev-mark-tooltip": "Označi posljednju inačicu stranice za prevođenje.",
+ "tpt-rev-unmark-tooltip": "Ukloni stranicu iz prevođenja.",
+ "tpt-rev-discourage-tooltip": "Obeshrabri dalnje prevođenje ove stranice.",
+ "tpt-rev-encourage-tooltip": "Obnovite na ovoj stranici uobičajeno prevođenje.",
+ "translate-tag-translate-link-desc": "Prevedi ovu stranicu",
+ "translate-tag-markthis": "Označi ovu stranicu za prijevod",
+ "translate-tag-hasnew": "Ova stranica sadržava <span class=\"plainlinks\">[$1 uređivanja]</span> koja nisu označena za prevođenje.",
+ "tpt-translation-intro": "Ova je stranica <span class=\"plainlinks\">[$1 prevedena inačica]</span> stranice [[$2]], a prijevod je $3 % dovršen.",
+ "tpt-translation-intro-fuzzy": "Zastarjeli prijevodi označeni su na ovaj način.",
+ "tpt-languages-legend": "Drugi jezici:",
+ "tpt-languages-nonzero": "$1 ($2 % prevedeno)",
+ "tpt-tab-translate": "Prevedi",
+ "tpt-target-page": "Ova stranica ne može biti ručno ažurirana.\nOna je prijevod stranice [[$1]] i njen prijevod može biti ažuriran uz pomoć [$2 alata za prevođenje].",
+ "tpt-translation-restricted": "Prevoditeljski administrator spriječio je prevođenje stranice na ovaj jezik.\n\nRazlog: $1",
+ "tpt-discouraged-language-force-header": "Ova se stranica ne može prevoditi na $1.",
+ "tpt-discouraged-language-force-content": "Prevoditeljski administrator odlučio je da se stranica može prevesti samo na $1.",
+ "tpt-priority-languages": "Prevoditeljski administrator ovoj grupi je postavio sljedeće prioritetne jezike: $1.",
+ "aggregategroups": "Spojene skupine",
+ "tpt-aggregategroup-add": "Dodaj",
+ "tpt-aggregategroup-save": "Spremi",
+ "tpt-aggregategroup-new-name": "Ime:",
+ "tpt-aggregategroup-new-description": "Opis (nije obavezno):",
+ "tpt-aggregategroup-edit-name": "Ime:",
+ "tpt-aggregategroup-edit-description": "Opis:",
+ "tpt-aggregategroup-update": "Spremi",
+ "tpt-aggregategroup-update-cancel": "Odustani",
+ "log-name-pagetranslation": "Evidencija prevođenja stranica",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|označio|označila}} je $3 za prevođenje",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|naišao|naišla}} je na problem pri premještanju stranice $3 na $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|pobrisao|pobrisala}} je prevodivu stranicu $3",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|ohrabrio je|ohrabrila je|ohrabruje}} prevođenje stranice $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|obeshrabrio je|obeshrabrila je|obeshrabruje}} prevođenje stranice $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|uklonio|uklonila}} je prednosne jezike s prevodive stranice $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|postavio|postavila}} je prednosne jezike $5 za prevodivu stranicu $3",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|ograničio|ograničila}} je jezike prevodive stranice $3 na $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|dodao|dodala|dodao/dodala}} je prevodivu stranicu $3 u zbirnu skupinu $4",
+ "log-action-filter-pagetranslation": "Vrsta radnje:",
+ "log-action-filter-pagetranslation-mark": "Označivanje za prevođenje",
+ "log-action-filter-pagetranslation-unmark": "Uklanjanje iz prevođenja",
+ "log-action-filter-pagetranslation-move": "Premještanje stranica",
+ "log-action-filter-pagetranslation-delete": "Brisanje stranica",
+ "log-action-filter-pagetranslation-encourage": "Ohrabrivanje prevođenja",
+ "log-action-filter-pagetranslation-discourage": "Obeshrabrivanje prevođenja",
+ "log-action-filter-pagetranslation-prioritylanguages": "Mijenjanje prednosnih jezika",
+ "log-action-filter-pagetranslation-aggregategroups": "Mijenjanje združenih skupina",
+ "pt-movepage-list-pages": "Popis stranica za premještanje",
+ "pt-movepage-list-other": "{{PLURAL:$1|Druga podstranica|Druge podstranice}}",
+ "pt-movepage-current": "Trenutačni naziv:",
+ "pt-movepage-new": "Novi naziv:",
+ "pt-movepage-reason": "Razlog:",
+ "pt-movepage-subpages": "Premjesti sve podstranice",
+ "pt-movepage-action-check": "Provjeri je li premještanje moguće",
+ "pt-movepage-action-perform": "Premjesti",
+ "pt-movepage-action-other": "Promijeni cilj",
+ "pt-movepage-intro": "Ova posebna stranica omogućava Vam premještanje stranica koje su označene prevođenje.\nPremještanje nije trenutno, jer će biti potrebno premjestiti mnoge stranice.\nDok se stranice premještaju, nije moguća interakcija sa stranicama u pitanju.\nPogreške će biti evidentirane u [[Special:Log/pagetranslation|evidenciji prijevoda]] i trebaju se ručno popraviti.",
+ "pt-movepage-logreason": "Dio prevodive stranice »$1«.",
+ "pm-savepages-button-label": "Spremi",
+ "pp-save-button-label": "Objavi",
+ "pp-save-message": "Stranica je objavljena. Možete je [$1 uređivati]."
+}
diff --git a/Translate/i18n/pagetranslation/hrx.json b/Translate/i18n/pagetranslation/hrx.json
new file mode 100644
index 00000000..b350e0ec
--- /dev/null
+++ b/Translate/i18n/pagetranslation/hrx.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Iohanen"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% iwersetzd)"
+}
diff --git a/Translate/i18n/pagetranslation/hsb.json b/Translate/i18n/pagetranslation/hsb.json
new file mode 100644
index 00000000..35e1f6c9
--- /dev/null
+++ b/Translate/i18n/pagetranslation/hsb.json
@@ -0,0 +1,143 @@
+{
+ "@metadata": {
+ "authors": [
+ "Michawiki",
+ "Mikławš"
+ ]
+ },
+ "pagetranslation": "Přełožowanje strony",
+ "right-pagetranslation": "Wersije strony za přełožowanje markěrować",
+ "action-pagetranslation": "přełožujomne strony zrjadować",
+ "tpt-section": "Přełožowanska jednotka $1",
+ "tpt-section-new": "Nowa přełožowanska jednotka. Mjeno: $1",
+ "tpt-section-deleted": "Přełožowanska jednotka $1",
+ "tpt-diff-old": "Předchadny tekst",
+ "tpt-diff-new": "Nowy tekst",
+ "tpt-submit": "Tutu wersiju za přełožowanje markěrować",
+ "tpt-sections-oldnew": "Nowe a eksistowace přełožowanske jednotki",
+ "tpt-sections-deleted": "Wušmórnjene přełožowanske jednotki",
+ "tpt-sections-template": "Předłoha přełožowanskeje strony",
+ "tpt-action-nofuzzy": "Njeanuluj přełožki",
+ "tpt-badtitle": "Podate mjeno strony ($1) płaćiwy titul njeje",
+ "tpt-nosuchpage": "Strona $1 njeeksistuje",
+ "tpt-oldrevision": "$2 njeje aktualna wersija strony [[:$1]].\nJenož aktualne wersije hodźa so za přełožowanje markěrować.",
+ "tpt-notsuitable": "Strona $1 za přełožowanje přihódna njeje.\nZaswěsć, zo ma taflički <nowiki><translate></nowiki> a płaćiwu syntaksu.",
+ "tpt-saveok": "Strona [[:$1]] je so za přełožowanje z $2 {{PLURAL:$2|přełožujomnej jednotku|přełožujomnej jednotkomaj|přełožujomnymi jednotkami|přełožujomnymi jednotkami}} markěrowała.\nStrona hodźi so nětko <span class=\"plainlinks\">[$3 přełožować]</span>.",
+ "tpt-offer-notify": "Móžeš wo tutej stronje <span class=\"plainlinks\">[$1 přełožowarjow informować]</span>.",
+ "tpt-showpage-intro": "Deleka su nowe, eksistowace a zhašane přełožowanske jednotki nalistowane.\nPrjedy hač tutu wersiju za přełožowanje markěruješ, kontroluj, hač změny přełožowanskich jednotkow su miniměrowane, zo by njetrěbne dźěło za přełožowarjow wobešoł.",
+ "tpt-mark-summary": "Je tutu wersiju za přełožowanje markěrował",
+ "tpt-edit-failed": "Strona njeda so aktualizować: $1",
+ "tpt-duplicate": "Mjeno přełožkoweje jednotki $1 so wjace hač jedyn raz wužiwa.",
+ "tpt-unmarked": "Strona $1 hižo njeje za přełožowanje markěrowana.",
+ "tpt-list-nopages": "Strony njejsu ani za přełožowanje markěrowali ani njejsu hotowe za přełožowanje.",
+ "tpt-new-pages-title": "Strony namjetowane za přełožk",
+ "tpt-old-pages-title": "Strony, kotrež so přełožuja",
+ "tpt-other-pages-title": "Wobškodźene strony",
+ "tpt-new-pages": "{{PLURAL:$1|Tuta strona wobsahuje|Tutej stronje|Tute strony wobsahuja|Tute strony wobsahuja}} tekst z přełožowanskimi tafličkimi, ale žana wersija {{PLURAL:$1|tuteje strony|tuteju stronow|tutych stronow|tutych stronow}} njeje tuchwilu za přełožowanje markěrowana.",
+ "tpt-old-pages": "Někajka wersija {{PLURAL:$1|tuteje strony|tuteju stronow|tutych stronow|tutych stronow}} je so za přełožowanje markěrowała.",
+ "tpt-other-pages": "Stara wersija {{PLURAL:$1|tuteje strony|tuteju stronow|tutych stronow|tutych stronow}} je za přełožowanje markěrowana,\nale aktualna wersija njehodźi so za přełožowanje markěrować.",
+ "tpt-select-prioritylangs": "Lisćina rěčnych kodow primarnych rěčow dźělenych přez komu:",
+ "tpt-select-prioritylangs-force": "Přełožkam do druhich rěčow hač primarnych rěčow zadźěwać",
+ "tpt-select-prioritylangs-reason": "Přičina:",
+ "tpt-sections-prioritylangs": "Primarne rěče",
+ "tpt-rev-mark": "za přełožowanje markěrować",
+ "tpt-rev-unmark": "z přełoženja wotstronić",
+ "tpt-rev-discourage": "wuzamknyć",
+ "tpt-rev-encourage": "wobnowić",
+ "tpt-rev-mark-tooltip": "Najnowšu wersiju tuteje strony za přełožowanje markěrować.",
+ "tpt-rev-unmark-tooltip": "Tutu stronu z přełoženja wotstronić",
+ "tpt-rev-discourage-tooltip": "Dalše přełožki na tutej stronje wuzamknyć.",
+ "tpt-rev-encourage-tooltip": "Tutu stronu za normalne přełoženje wobnowić.",
+ "translate-tag-translate-link-desc": "Tutu stronu přełožić",
+ "translate-tag-markthis": "Tutu stronu za přełožowanje markěrować",
+ "translate-tag-markthisagain": "Tuta strona ma <span class=\"plainlinks\">[$1 {{PLURAL:$1|změnu|změnje|změny|změnow}}]</span>, wot toho zo, bu posledni raz <span class=\"plainlinks\">[$2 za přełožowanje markěrowana]</span>.",
+ "translate-tag-hasnew": "Tuta strona wobsahuje <span class=\"plainlinks\">[$1 {{PLURAL:$1|změna, kotraž njeje markěrowana|změnje, kotrejž njejstej markěrowanej|změny, kotrež njejsu markěrowane|změnow, kotrež njejsu markěrowane}}]</span> za přełožowanje.",
+ "tpt-translation-intro": "Tuta strona je <span class=\"plainlinks\">[$1 přełožena wersija]</span> strony [[$2]] a $3 % přełožka je dokónčene a přełožk je aktualny.",
+ "tpt-translation-intro-fuzzy": "Zestarjene přełožki su kaž tutón markěrowane.",
+ "tpt-languages-legend": "Druhe rěče:",
+ "tpt-languages-zero": "Přełožowanje za tutu rěč započeć",
+ "tpt-languages-nonzero": "$1 ($2% přełožene)",
+ "tpt-tab-translate": "Přełožić",
+ "tpt-target-page": "Tuta strona njeda so manulenje aktualizować.\nTuta strona je přełožk strony [[$1]] a přełožk hodźi so z pomocu [$2 Přełožić] aktualizować.",
+ "tpt-unknown-page": "Tutón mjenowy rum je za přełožki wobsahowych stronow wuměnjeny.\nStrona, kotruž pospytuješ wobdźěłać, po wšěm zdaću stronje markěrowanej za přełožowanje njewotpowěduje.",
+ "tpt-translation-restricted": "Přełožowanski administrator je přełožowanju tuteje strony do tuteje rěče zadźěwał.\n\nPřičina: $1",
+ "tpt-discouraged-language-force": "<strong>Tuta strona njehodźi so do $2 přełožić.</strong>\n\nPřełožowanski administrator je rozsudźił, zo tuta strona hodźi so jenož do $3 přełožować.",
+ "tpt-priority-languages": "Přełožowanski administrator je primarne rěče za tutu skupinu jako $1 nastajił.",
+ "tpt-render-summary": "Aktualizacija po nowej wersiji žórłoweje strony",
+ "aggregategroups": "Skupiny zjednoćić",
+ "tpt-aggregategroup-add": "Přidać",
+ "tpt-aggregategroup-save": "Składować",
+ "tpt-aggregategroup-add-new": "Nowu zjimansku skupinu přidać",
+ "tpt-aggregategroup-new-name": "Mjeno:",
+ "tpt-aggregategroup-new-description": "Wopisanje (opcionalne):",
+ "tpt-aggregategroup-remove-confirm": "Chceš tutu skupinu woprawdźe zhašeć?",
+ "tpt-aggregategroup-invalid-group": "Skupina njeeksistuje",
+ "pt-parse-open": "Asymetriska taflička &lt;translate>.\nPřełožowanska předłoha: <pre>$1</pre>",
+ "pt-parse-close": "Asymetriska taflička &lt;/translate>.\nPřełožowanska předłoha: <pre>$1</pre>",
+ "pt-parse-nested": "Zakšćikowane přełožowanske jednotki &lt;translate> njejsu dowolene.\nTekst taflički: <pre>$1</pre>",
+ "pt-shake-multiple": "Wjacore marki přełožowanskich jednotkow za jednu přełožowansku jednotku.\nTekst přełožowanskeje jednotki: <pre>$1</pre>",
+ "pt-shake-position": "Marki přełožowanskich jednotkow na njewočakowanym městnje.\nTekst přełožowanskeje jednotki: <pre>$1</pre>",
+ "pt-shake-empty": "Prózdna přełožowanska jednotka za marku \"$1\".",
+ "log-description-pagetranslation": "Protokol za akcije w zwisku z přełožowanskim systemom",
+ "log-name-pagetranslation": "Protokol přełožkow",
+ "logentry-pagetranslation-mark": "$1 je $3 za přełožowanje {{GENDER:$2|markěrował|markrowała}}",
+ "logentry-pagetranslation-unmark": "$1 je $3 z přełožowanja {{GENDER:$2|wotstronił|wotstroniła}}",
+ "logentry-pagetranslation-moveok": "$1 je přemjenowanje přełožujomneje strony $3 do $4 {{GENDER:$2|dokónčił|dokónčiła}}",
+ "logentry-pagetranslation-movenok": "$1 je při přesuwanju strony $3 do $4 na problem {{GENDER:$2|storčił|storčiła}}",
+ "logentry-pagetranslation-deletefok": "$1 je hašenje přełožujomneje strony $3 {{GENDER:$2|wotzamknył|wotzamknyła}}",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|njemóžeše}} $3 zhašeć, kotraž k přełožujomnej stronje $4 słuša",
+ "logentry-pagetranslation-deletelok": "$1 je hašenje přełožujomneje strony $3 {{GENDER:$2|wotzamknył|wotzamknyła}}",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|njemóžeše}} $3 zhašeć, kotraž k přełožowanskej stronje $4 słuša",
+ "logentry-pagetranslation-encourage": "$1 je přełožowanje strony $3 {{GENDER:$2|doporučił|doporučiła}}",
+ "logentry-pagetranslation-discourage": "$1 je wot přełožowanja strony $3 {{GENDER:$2|wotradźił|wotradźiła}}",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 je primarne rěče z přełožujomneje strony $3 {{GENDER:$2|wotstronił|wotstroniła}}",
+ "logentry-pagetranslation-prioritylanguages": "$1 je primarne rěče za přełožujomnu stronu $3 na $5 {{GENDER:$2|stajił|stajiła}}",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 je rěče za přełožujomnu stronu $3 na $5 {{GENDER:$2|wobmjezował|wobmjezowała}}",
+ "logentry-pagetranslation-associate": "$1 je přełožujomnu stronu $3 metaskupinje $4 {{GENDER:$2|přidał|přidała}}",
+ "logentry-pagetranslation-dissociate": "$1 je přełožujomnu stronu $3 z metaskupiny $4 {{GENDER:$2|wotstronił|wotstroniła}}",
+ "pt-movepage-title": "Přełožujomnu stronu $1 přesunyć",
+ "pt-movepage-blockers": "Přełožujomna strona njeda so {{PLURAL:$1|slědowaceho zmylka|slědowaceju zmylkow|slědowacych zmylkow|slědowacych zmylkow}} dla do noweho mjena přesunyć:",
+ "pt-movepage-block-base-invalid": "Mjeno ciloweje přełožujomneje strony płaćiwy titul njeje.",
+ "pt-movepage-block-tp-invalid": "Titul ciloweje přełožowanskeje strony za [[:$1]] by płaćiwy był (předołho?).",
+ "pt-movepage-block-section-invalid": "Titul ciloweje strony za \"[[:$1]]\" za přełožowansku jednotku by njepłaćiwy był (předołho?).",
+ "pt-movepage-block-subpage-invalid": "Titul ciloweje podstrony za [[:$1]] by płaćiwy był (předołho?).",
+ "pt-movepage-list-pages": "Lisćina strony, kotrež maja so přesunyć",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Přełožowanska strona|Přełožowanskej stronje|Přełožowanske strony}}",
+ "pt-movepage-list-section": "{{PLURAL:$1|Strona|Stronje|Strony}} přełožowanskich jednotkow",
+ "pt-movepage-list-other": "{{PLURAL:$1|Druha podstrona|Druhej podstronje|Druhe podstrony}}",
+ "pt-movepage-list-count": "W cyłku {{PLURAL:$1|ma so $1 strona|matej so $1 stronje|maja so $1 strony|ma so $1 stronow}} přesunyć.",
+ "pt-movepage-legend": "Přełožujomnu stronu přesunyć",
+ "pt-movepage-current": "Aktualne mjeno:",
+ "pt-movepage-new": "Nowe mjeno:",
+ "pt-movepage-reason": "Přičina:",
+ "pt-movepage-subpages": "Wšě podstrony přesunyć",
+ "pt-movepage-action-check": "Kontrolować, hač přesunjenje je móžno",
+ "pt-movepage-action-perform": "Přesunyć",
+ "pt-movepage-action-other": "Cil změnić",
+ "pt-movepage-intro": "Tuta specialna strona zmóžnja přesuwanje stronow, kotrež su za přełožowanje markěrowane.\nPřesunjenje so hnydom njestawa, dokelž wjele stronow dyrbi so přesunyć.\nPři přesuwanju stronow njeje móžno, z wotpowědnymi stronami do zwiska stupić.\nZmylki budu so w [[Special:Log/pagetranslation|přełožowanskim protokolu strony]] protokolować a dyrbja so manuelnje skorigować.",
+ "pt-movepage-logreason": "Dźěl přełožujomneje strony $1.",
+ "pt-movepage-started": "Zakładna strona je nětko přesunjena.\nProšu skontroluj [[Special:Log/pagetranslation|přełožowanski protokol strony]] za zmylkami a zdźělenku wukonjenja.",
+ "pt-locked-page": "Tuta strona je zawrjena, dokelž přełožujomna strona so runje přesuwa.",
+ "pt-deletepage-lang-title": "Přełožena strona $1 so haša.",
+ "pt-deletepage-tp-title": "Přełožujomna strona $1 so haša.",
+ "pt-deletepage-invalid-title": "Podata strona płaćiwa njeje.",
+ "pt-deletepage-invalid-text": "Podata strona ani přełožujomna strona ani přełožowanska strona njeje.",
+ "pt-deletepage-action-check": "Strony nalistować, kotrež maja so zhašeć",
+ "pt-deletepage-action-perform": "Zhašeć",
+ "pt-deletepage-action-other": "Cil změnić",
+ "pt-deletepage-lang-legend": "Přełoženu stronu wušmórnyć",
+ "pt-deletepage-tp-legend": "Přełožujomnu stronu wušmórnyć",
+ "pt-deletepage-any-legend": "Přełožujomnu stronu abo přełožowansku stronu zhašeć",
+ "pt-deletepage-current": "Mjeno strony:",
+ "pt-deletepage-reason": "Přičina:",
+ "pt-deletepage-subpages": "Wšě podstrony wušmórnyć",
+ "pt-deletepage-list-pages": "Lisćina stronow, kotrež maja so zhašeć",
+ "pt-deletepage-list-translation": "Přełožene strony",
+ "pt-deletepage-list-section": "Strony přełožowanskich jednotkow",
+ "pt-deletepage-list-other": "Druhe podstrony",
+ "pt-deletepage-list-count": "W cyłku {{PLURAL:$1|ma so $1 strona|matej so $1 stronje|maja so $1 strony|ma so $1 stronow}} zhašeć.",
+ "pt-deletepage-full-logreason": "Dźěl přełožujomneje strony $1.",
+ "pt-deletepage-lang-logreason": "Dźěl přełoženeje strony $1.",
+ "pt-deletepage-started": "Prošu přepruwuj [[Special:Log/pagetranslation|protokol přełožkow]] za zmylkami a wuwjedźenskimi zdźělenkami.",
+ "pt-deletepage-intro": "Tuta specialna strona ći zmóžnja, cyłu přełožujomnnu stronu abo jednotliwu přełožwansku stronu w rěči zhašeć.\nZhašenje njestanje so hnydom, dokelž wšě strony, kotrež z njej zwisuja, dyrbja so tež zhašeć.\nZmylki budu so w [[Special:Log/pagetranslation|protokolu přełožkow]] protokolować a wone dyrbja so manuelnje porjedźić."
+}
diff --git a/Translate/i18n/pagetranslation/hsn.json b/Translate/i18n/pagetranslation/hsn.json
new file mode 100644
index 00000000..6d60e346
--- /dev/null
+++ b/Translate/i18n/pagetranslation/hsn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "ChoiChong"
+ ]
+ },
+ "tpt-languages-nonzero": "$1($2%已翻译)"
+}
diff --git a/Translate/i18n/pagetranslation/ht.json b/Translate/i18n/pagetranslation/ht.json
new file mode 100644
index 00000000..75915325
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ht.json
@@ -0,0 +1,62 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "Boukman",
+ "Tisave"
+ ]
+ },
+ "pagetranslation": "Tradiksyon paj yo",
+ "right-pagetranslation": "Make vèsyon paj yo pou tradui",
+ "tpt-section": "Inite tradiksyon $1",
+ "tpt-section-new": "Nouvo inite tradiksyon.\nNon: $1",
+ "tpt-section-deleted": "Inite tradiksyon $1",
+ "tpt-diff-old": "Teks presedan",
+ "tpt-diff-new": "Nouvo tèks",
+ "tpt-submit": "Make vèsyon sa pou tradui",
+ "tpt-sections-oldnew": "Inite tradiksyon ki deja egziste ak nouvo yo",
+ "tpt-sections-deleted": "Inite tradiksyon ki efase",
+ "tpt-sections-template": "Modèl pou paj tradiksyon",
+ "tpt-action-nofuzzy": "Pa rann tradiksyon envalid",
+ "tpt-badtitle": "Non ou bay pou paj ($1) pa yon tit ki bon",
+ "tpt-nosuchpage": "Paj $1 pa egziste",
+ "tpt-oldrevision": "$2 se pa dènye vèsyon paj [[:$1]].\nSe sèlman dènye vèsyon ki kapab make pou tradui.",
+ "tpt-notsuitable": "Paj $1 pa bon pou tradui.\nAsire w li gen etikèt <nowiki><translate></nowiki> epi ke li gen yon sentaks ki bon.",
+ "tpt-saveok": "Paj [[:$1]] te make pou yo tradui l ak 2 {{PLURAL:$2|inite tradiksyon|inite tradiksyon yo}}.\nPaj sa kapab <span class=\"plainlinks\">[$3 tradui]</span> kounye a.",
+ "tpt-showpage-intro": "Anba, gen yon lis tout sèksyon ki nouvo, sa ki egzsite ak sa ki te efase yo.\nAnvan ou make vèsyon sa pou yo tradui, verifye ki chanjman nan seksyon yo pa anpil, yon fason pou pa bay tradiktè yo travay ki pa nesesè.",
+ "tpt-mark-summary": "Make vèsyon sa pou tradui",
+ "tpt-edit-failed": "Pa t kapab mete paj sa ajou: $1",
+ "tpt-unmarked": "Paj [[:$1]] pa make pou tradui ankò.",
+ "tpt-list-nopages": "Pa gen okenn paj ki make pou tradui oubyen ki pare pou sa.",
+ "tpt-new-pages": "{{PLURAL:$1|Paj sa genyen|Paj sa yo genyen}} tèks ak eleman tradiksyon,\nmen pa gen okenn vèsyon {{PLURAL:$1|paj sa|paj sa yo}} ki make pou tradui.",
+ "tpt-old-pages": "Dènte vèsyon {{PLURAL:$1|paj sa|paj sa yo}} te make pou tradui.",
+ "tpt-other-pages": "{{PLURAL:$1|Yon ansyen vèsyon paj sa a|Ansyen vèsyon paj sa yo}} make pou tradui,\nmen dènye {{PLURAL:$1|vèsyon|vèsyon yo}} pa ka make pou tradui.",
+ "tpt-rev-unmark": "retire nan tradiksyon",
+ "translate-tag-translate-link-desc": "Tradui paj sa a",
+ "translate-tag-markthis": "Make paj sa pou tradui",
+ "translate-tag-markthisagain": "Paj sa te <span class=\"plainlinks\">[$1 chanje]</span> depi li te <span class=\"plainlinks\">[$2 make pou tradui]</span>.",
+ "translate-tag-hasnew": "Paj sa genyen <span class=\"plainlinks\">[$1 chanjman]</span> ki pa make pou tradui.",
+ "tpt-translation-intro": "Paj sa a, se yon <span class=\"plainlinks\">[$1 vèsyon ki tradui]</span> de paj [[$2]], epi tradiksyon a fèt a $3%.",
+ "tpt-translation-intro-fuzzy": "Tradiksyon ki ansyen yo make konsa.",
+ "tpt-languages-legend": "Lòt lang yo:",
+ "tpt-languages-nonzero": "$1 ($2 tradui)",
+ "tpt-target-page": "Paj sa a, se yon tradiksyon paj [[$1]] epi ou kapab mete a jou tradiksyon an lè ou itilize [$2 zouti tradiksyon an].",
+ "tpt-unknown-page": "Espas non sa a rezève pou tradiksyon paj yo.\nPaj w ap eseye modifye pa sanble koresponn ak yon paj ki make pou tradiksyon.",
+ "tpt-render-summary": "N ap mete ajou pou nou genyen nouvo vèsyon paj sous la.",
+ "pt-parse-open": "Eleman &lt;translate> pa balanse.\nModèl tradiksyon: <pre>$1</pre>",
+ "pt-parse-close": "Eleman &lt;/translate> pa balanse.\nModèl tradiksyon: <pre>$1</pre>",
+ "pt-parse-nested": "Seksyon enbrike &lt;translate> pa otorize.\nTeks baliz la: <pre>$1</pre>",
+ "pt-movepage-list-pages": "Lis paj yo pou deplase",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Paj tradiksyon}}",
+ "pt-movepage-list-section": "Paj seksyon",
+ "pt-movepage-list-other": "Lòt sou-paj",
+ "pt-movepage-list-count": "$1 {{PLURAL:$1|paj|paj}} total pou deplase.",
+ "pt-movepage-legend": "Deplase paj ki ka tradui.",
+ "pt-movepage-current": "Non aktyèl:",
+ "pt-movepage-new": "Nouvo non:",
+ "pt-movepage-reason": "Rezon :",
+ "pt-movepage-subpages": "Deplase tout sou-paj yo",
+ "pt-movepage-action-check": "Gade si deplasman an posib",
+ "pt-movepage-action-perform": "Fè deplasman an",
+ "pt-movepage-action-other": "Chanje sib la"
+}
diff --git a/Translate/i18n/pagetranslation/hu.json b/Translate/i18n/pagetranslation/hu.json
new file mode 100644
index 00000000..4e2489b7
--- /dev/null
+++ b/Translate/i18n/pagetranslation/hu.json
@@ -0,0 +1,236 @@
+{
+ "@metadata": {
+ "authors": [
+ "Csega",
+ "Dani",
+ "Dj",
+ "Glanthor Reviol",
+ "Hanna Tardos",
+ "Misibacsi",
+ "Máté",
+ "Pols12",
+ "R-Joe",
+ "Tacsipacsi",
+ "Tgr",
+ "Xbspiro"
+ ]
+ },
+ "pagetranslation": "Lap fordítása",
+ "right-pagetranslation": "Lapok változatainak megjelölése fordítandónak",
+ "action-pagetranslation": "fordítható oldalak kezelése",
+ "tps-edit-sourcepage-ve-warning-title": "Figyelmeztetés: nem támogatott lap",
+ "tps-edit-sourcepage-ve-warning-text": "Egy lefordítható lapot szerkesztesz. Ezeket még nem támogatja hivatalosan ez a szerkesztő, használd a forráskódszerkesztőt.",
+ "tps-edit-sourcepage-ve-warning-button": "OK",
+ "tpt-section": "$1 fordítási egység",
+ "tpt-section-new": "Új fordítási egység.\nNév: $1",
+ "tpt-section-deleted": "$1 fordítási egység",
+ "tpt-diff-old": "Előző szöveg",
+ "tpt-diff-new": "Új szöveg",
+ "tpt-submit": "A változat megjelölése fordításra.",
+ "tpt-sections-oldnew": "Új és meglevő fordítási egységek",
+ "tpt-sections-deleted": "Törölt fordítási egységek",
+ "tpt-sections-template": "A lefordított lap sablonja",
+ "tpt-action-nofuzzy": "Ne érvénytelenítse a fordításokat",
+ "tpt-badtitle": "A megadott lapnév ($1) nem érvényes cím",
+ "tpt-nosuchpage": "A(z) $1 lap nem létezik.",
+ "tpt-oldrevision": "$2 nem a(z) [[:$1]] lap legutolsó változata.\nCsak a legfrissebb változatok jelölhetőek meg fordításra.",
+ "tpt-notsuitable": "A(z) $1 lap nem alkalmas a fordításra.\nEllenőrizd, hogy szerepelnek-e benne <nowiki><translate></nowiki> tagek, és helyes-e a szintaxisa.",
+ "tpt-saveok": "A(z) [[:$1]] lap $2 fordítási egységgel megjelölve fordításra.\nA lap mostantól <span class=\"plainlinks\">[$3 lefordítható]</span>.",
+ "tpt-saveok-first": "[[Special:PageMigration|Importálhatsz már létező fordításokat]] ehhez a laphoz (ha vannak).",
+ "tpt-offer-notify": "<span class=\"plainlinks\">[$1 Értesítheted a fordítókat]</span> erről a lapról.",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|Lefordítható lapok listájának megtekintése.]]",
+ "tpt-showpage-intro": "Alább az új, már létező és törölt szakaszok felsorolása látható.\nMielőtt fordításra jelölöd ezt a változatot, ellenőrizd hogy a szakaszok változásai minimálisak, elkerülendő a felesleges munkát a fordítóknak.",
+ "tpt-mark-summary": "Változat megjelölve fordításra",
+ "tpt-mark-nochanges": "Nincs átnézendő változtatás. A lap megjelölése fordításra nem fogja módosítani se a lapot, sem bármilyen létező fordítási egységet.",
+ "tpt-edit-failed": "Nem sikerült frissíteni a lapot: $1",
+ "tpt-duplicate": "A(z) $1 név több fordítási egységhez is tartozik",
+ "tpt-invalid": "A(z) $1 fordításiegység-név nem tartalmazhat alávonást vagy perjelet.",
+ "tpt-unmarked": "A(z) [[:$1]] lap most már nincs megjelölve fordításra.",
+ "tpt-list-nopages": "Nincsenek sem fordításra kijelölt, sem kijelölésre kész lapok.",
+ "tpt-new-pages-title": "Fordításra jelölt lapok",
+ "tpt-old-pages-title": "Fordítás alatt lévő lapok",
+ "tpt-other-pages-title": "Hibás lapok",
+ "tpt-outdated-pages-title": "Lapok függőben lévő változásokkal.",
+ "tpt-new-pages": "{{PLURAL:$1|Ez a lap tartalmaz|Ezek a lapok tartalmaznak}} fordítási tagekkel ellátott szöveget, de jelenleg egyik {{PLURAL:$1|változata|változatuk}} sincs megjelölve fordításra.",
+ "tpt-old-pages": "{{PLURAL:$1|Ennek a lapnak|Ezeknek a lapoknak}} a legfrissebb {{PLURAL:$1|változata meg van|változatai meg vannak}} jelölve fordításra.",
+ "tpt-other-pages": "Ezen {{PLURAL:$1|lap egy korábbi változata fordíthatónak volt|lapok korábbi változatai fordíthatónak voltak}} megjelölve, de a legutóbbi {{PLURAL:$1|változatot|változatokat}} nem lehet megjelölni fordításra.",
+ "tpt-outdated-pages": "{{PLURAL:$1|Ezen a lapon|Ezeken a lapokon}} vannak fordításra meg nem jelölt változtatások.",
+ "tpt-tag-discouraged": "nem javasolt",
+ "tpt-tag-oldsyntax": "régi szintaxis",
+ "tpt-tag-no-transclusion-support": "nincs beillesztési támogatás",
+ "tpt-select-prioritylangs": "A kiemelt nyelvek vesszővel elválasztott listája:",
+ "tpt-select-prioritylangs-force": "A nem kiemelt nyelvekre történő fordítás megakadályozása",
+ "tpt-select-prioritylangs-reason": "Ok:",
+ "tpt-sections-prioritylangs": "Kiemelt nyelvek",
+ "tpt-sections-syntaxversion": "Szintaxisverzió",
+ "tpt-syntaxversion-text": "Ez a lap jelenleg egy régebbi forráslapszintaxist használ. Az új verzió a lefordítatlan fordítási egységeket egy HTML-elembe fogja burkolni a szöveg helyes nyelvét jelzendő. Például: $1. Az új $2 szintaxis használható ennek a burkolásnak a megakadályozására olyan esetekben, amikor az problémát okozna, például egy HTML-elem <code>title</code> attribútumának fordításakor. Nincs lehetőség a régi szintaxisverzióhoz való visszatérésre.",
+ "tpt-syntaxversion-label": "A legújabb szintaxisverzió használata ezen a lapon",
+ "tpt-transclusion": "Sablonbeillesztés",
+ "tpt-rev-mark": "megjelölés fordításra",
+ "tpt-rev-unmark": "lap eltávolítása a fordításból",
+ "tpt-rev-discourage": "nem javasolt",
+ "tpt-rev-encourage": "visszaállít",
+ "tpt-rev-mark-tooltip": "A lap legutóbbi változatának megjelölése fordításra.",
+ "tpt-rev-unmark-tooltip": "A lap eltávolítása a fordításból.",
+ "tpt-rev-discourage-tooltip": "A lap további fordításának ellenjavallása.",
+ "tpt-rev-encourage-tooltip": "A lap visszaállítása a normális fordításra.",
+ "translate-tag-translate-link-desc": "A lap fordítása",
+ "translate-tag-markthis": "Lap megjelölése fordításra",
+ "translate-tag-markthisagain": "Ezen a lapon történtek <span class=\"plainlinks\">[$1 változtatások]</span>, mióta utoljára <span class=\"plainlinks\">[$2 megjelölték fordításra]</span>.",
+ "translate-tag-hasnew": "Ez a lap tartalmaz <span class=\"plainlinks\">[$1 változtatásokat]</span>, amelyek nincsenek fordításra jelölve.",
+ "tpt-translation-intro": "Ez a(z) [[$2]] lap egy <span class=\"plainlinks\">[$1 lefordított változata]</span>, és a fordítás $3%-a van kész.",
+ "tpt-translation-intro-fuzzy": "Az elavult fordítások így vannak jelölve.",
+ "tpt-languages-legend": "Más nyelvek:",
+ "tpt-languages-zero": "Fordítás indítása erre a nyelvre",
+ "tpt-languages-nonzero": "$1 (lefordítva: $2%)",
+ "tpt-tab-translate": "Fordítás",
+ "tpt-target-page": "Ezt a lapot nem lehet kézzel frissíteni.\nA(z) [[$1]] lap fordítása, és a fordítását [$2 a fordítás segédeszköz] segítségével lehet frissíteni.",
+ "tpt-unknown-page": "Ez a névtér a tartalmi lapok fordításainak van fenntartva.\nÚgy tűnik, a szerkeszteni kívánt lap nem egyezik egyetlen fordításra jelölt lappal sem.",
+ "tpt-translation-restricted": "Ennek a lapnak a fordítását ezen nyelvre megakadályozta egy fordítási adminisztrátor.\n\nIndoklás: $1",
+ "tpt-translation-restricted-no-reason": "A lap megadott nyelvre való fordítását megakadályozta egy fordítási adminisztrátor.",
+ "tpt-discouraged-language-force-header": "Ez a lap nem fordítható $1 nyelvre.",
+ "tpt-discouraged-language-force-content": "Egy fordítási adminisztrátor úgy döntött, hogy ez a lap csak $1 nyelvre fordítható.",
+ "tpt-discouraged-language-header": "A fordítás $1 nyelvre nem a legfontosabb feladat ennél a lapnál.",
+ "tpt-discouraged-language-content": "Egy fordítási adminisztrátor úgy döntött, hogy elsődlegesen $1 nyelvre kell fordítani.",
+ "tpt-discouraged-language-force": "<strong>Ez a lap nem fordítható $2 nyelvre.</strong>\n\nEgy fordítási adminisztrátor úgy döntött, hogy ez a lap csak $3 nyelvre fordítható.",
+ "tpt-priority-languages": "Egy fordítási adminisztrátor ennek a csoportnak a kiemelt célnyelveit a következő(k)re állította: $1",
+ "tpt-priority-languages-force": "Egy fordítási adminisztrátor ennek a csoportnak az elsőbbségi nyelveit a következőkre állította: $1. Más nyelvekre nem engedélyezett a fordítás.",
+ "tpt-render-summary": "Frissítés, hogy megegyezzen a forráslap új változatával",
+ "aggregategroups": "Összesített csoportok",
+ "tpt-aggregategroup-add": "Hozzáad",
+ "tpt-aggregategroup-save": "Mentés",
+ "tpt-aggregategroup-close": "Bezárás",
+ "tpt-aggregategroup-add-new": "Új egyesített csoport hozzáadása",
+ "tpt-aggregategroup-new-name": "Név:",
+ "tpt-aggregategroup-new-description": "Leírás (opcionális):",
+ "tpt-aggregategroup-remove-confirm": "Biztosan törölni szeretné ezt az összesített csoportot?",
+ "tpt-aggregategroup-invalid-group": "Csoport nem létezik",
+ "tpt-aggregategroup-edit-name": "Név:",
+ "tpt-aggregategroup-edit-description": "Leírás:",
+ "tpt-aggregategroup-update": "Mentés",
+ "tpt-aggregategroup-update-cancel": "Mégse",
+ "tpt-invalid-group": "Érvénytelen csoport",
+ "pt-parse-open": "Páratlan &lt;translate> tag.\nFordítási sablon: <pre>$1</pre>",
+ "pt-parse-close": "Páratlan &lt;/translate> tag.\nFordítási sablon: <pre>$1</pre>",
+ "pt-parse-nested": "Egymásba ágyazott &lt;translate> szakaszok nem engedélyezettek.\nElem szövege: <pre>$1</pre>",
+ "pt-shake-multiple": "Több fordításiegység-jelző egy fordítási egységhez.\nFigyelj rá, hogy a fordítási egységeket üres sorok válasszák el.\nA fordítási egység szövege: <pre>$1</pre>",
+ "pt-shake-position": "Fordításiegység-jelzők váratlan helyen.\nA fordítási egység szövege: <pre>$1</pre>",
+ "pt-shake-empty": "Üres fordítási egység a(z) „$1” jelzőhöz.",
+ "log-description-pagetranslation": "A lapfordító rendszerhez kapcsolódó műveletek naplója",
+ "log-name-pagetranslation": "Oldalfordítási napló",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|megjelölte}} a(z) $3 lapot fordításra",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|eltávolította}} a(z) $3 lapot a fordítási rendszerből",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|befejezte}} a(z) $3 fordítható lap átnevezését $4 névre",
+ "logentry-pagetranslation-movenok": "$1 hibát {{GENDER:$2|észlelt}} a(z) $3 lap $4 címre mozgatásakor",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|befejezte}} a(z) $3 lefordítható lap törlését",
+ "logentry-pagetranslation-deletefnok": "$1 nem tudta {{GENDER:$2|törölni}} a(z) $3 lapot, ami a(z) $4 lefordítható laphoz tartozik",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|befejezte}} a(z) $3 fordítási lap törlését",
+ "logentry-pagetranslation-deletelnok": "$1 nem tudta {{GENDER:$2|törölni}} a(z) $3 lapot, ami a(z) $4 fordítási laphoz tartozik",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|javasolta}} a(z) $3 lap fordítását",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|ellenjavallta}} a(z) $3 lap fordítását",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|eltávolította}} az előnyben részesített nyelveket a(z) $3 lefordítható lapról",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|beállította}} a(z) $3 lefordítható lap előnyben részesített nyelveit a következőre: $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 a következőkre {{GENDER:$2|korlátozta}} a(z) $3 lefordítható lap nyelveit: $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|hozzáadta}} a(z) $3 lefordítható lapot a(z) $4 összesített csoporthoz",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|eltávolította}} a(z) $3 lefordítható lapot a(z) $4 összesített csoportból",
+ "log-action-filter-pagetranslation": "Művelet típusa:",
+ "log-action-filter-pagetranslation-mark": "Fordításra jelölés",
+ "log-action-filter-pagetranslation-unmark": "Eltávolítás a fordításból",
+ "log-action-filter-pagetranslation-move": "Lapmozgatás",
+ "log-action-filter-pagetranslation-delete": "Laptörlés",
+ "log-action-filter-pagetranslation-prioritylanguages": "Előnyben részesített nyelvek módosítása",
+ "log-action-filter-pagetranslation-aggregategroups": "Összesített csoportok módosítása",
+ "pt-movepage-title": "A(z) $1 fordítható lap átnevezése",
+ "pt-movepage-blockers": "Nem lehet átnevezni a fordítható lapot az új névre a következő {{PLURAL:$1|hiba|hibák}} miatt:",
+ "pt-movepage-block-base-invalid": "A cél-fordíthatólap címe érvénytelen.",
+ "pt-movepage-block-tp-invalid": "A(z) „[[:$1]]” cél-fordításilap címe érvénytelen lenne (túl hosszú?).",
+ "pt-movepage-block-section-invalid": "A(z) „[[:$1]]” cél-fordításiegységének címe érvénytelen lenne (túl hosszú?).",
+ "pt-movepage-block-subpage-invalid": "A(z) „[[:$1]]” cél-allapjának címe érvénytelen lenne (túl hosszú?).",
+ "pt-movepage-block-talkpage-invalid": "A(z) „[[:$1]]” cél-vitalapjának címe érvénytelen lenne (túl hosszú?).",
+ "pt-movepage-list-pages": "Átnevezendő lapok listája",
+ "pt-movepage-list-translation": "Fordítható {{PLURAL:$1|lap|lapok}}",
+ "pt-movepage-list-section": "Fordítási egység {{PLURAL:$1|lap|lapok}}",
+ "pt-movepage-list-translatable": "Fordításra jelölt {{PLURAL:$1|allap|allapok}}",
+ "pt-movepage-list-translatable-note": "Ezeket a lapokat külön kell átnevezni.",
+ "pt-movepage-list-other": "További {{PLURAL:$1|allap|allapok}}",
+ "pt-movepage-list-count": "Összesen $1 {{PLURAL:$1|lapot}} kell átnevezni (ebből $2 allap és $3 vitalap).",
+ "pt-movepage-list-no-pages": "Nem található lap.",
+ "pt-movepage-legend": "Fordítható lap átnevezése",
+ "pt-movepage-current": "Jelenlegi név:",
+ "pt-movepage-new": "Új név:",
+ "pt-movepage-reason": "Indoklás:",
+ "pt-movepage-subpages": "Összes allap átnevezése",
+ "pt-movepage-action-check": "Ellenőrizze, hogy az átnevezés lehetséges-e",
+ "pt-movepage-action-perform": "Átnevezés végrehajtása",
+ "pt-movepage-action-other": "Cél megváltoztatása",
+ "pt-movepage-intro": "Ez a speciális lap lehetővé teszi fordításra jelölt lapok átnevezését.\nAz átnevezés nem azonnal hajtódik végre, mert sok lapot kell átnevezni.\nAmíg a művelet be nem fejeződik, nem lehet interakcióba lépni a kérdéses lapokkal.\nA hibák a [[Special:Log/pagetranslation|lapfordítási naplóban]] jelennek meg, és kézzel kell javítani őket.",
+ "pt-movepage-logreason": "A(z) „$1” fordítható lap része",
+ "pt-movepage-started": "Kérjük, ellenőrizd a [[Special:Log/pagetranslation|lapfordítási naplót]] egy idő múlva a hibaüzenetekért és a befejezésről szóló üzenetért.",
+ "pt-locked-page": "Ez a lap zárolva van, mert a fordítási lap jelenleg áthelyezés alatt áll.",
+ "pt-deletepage-lang-title": "A(z) „$1” fordítható lap törlése",
+ "pt-deletepage-tp-title": "A(z) „$1” fordítható lap törlése",
+ "pt-deletepage-invalid-title": "A megadott lap érvénytelen.",
+ "pt-deletepage-invalid-text": "A megadott lap se nem fordítható, se nem fordítási lap.",
+ "pt-deletepage-action-check": "A törlendő lapok listázása",
+ "pt-deletepage-action-perform": "Törlés végrehajtása",
+ "pt-deletepage-action-other": "Cél megváltoztatása",
+ "pt-deletepage-lang-legend": "Fordítási lap törlése",
+ "pt-deletepage-tp-legend": "Fordítható lap törlésre",
+ "pt-deletepage-any-legend": "Fordítható vagy fordítási lap törlése",
+ "pt-deletepage-current": "Lap neve:",
+ "pt-deletepage-reason": "Ok:",
+ "pt-deletepage-subpages": "Összes allap törlése",
+ "pt-deletepage-list-pages": "Törlendő lapok listája",
+ "pt-deletepage-list-translation": "Fordítási lapok",
+ "pt-deletepage-list-section": "Fordításiegység-lapok",
+ "pt-deletepage-list-other": "Egyéb allapok",
+ "pt-deletepage-list-count": "Összesen $1 lapot és $2 allapot kell törölni.",
+ "pt-deletepage-list-no-pages": "Nem található lap.",
+ "pt-deletepage-full-logreason": "A(z) „$1” fordítható lap része",
+ "pt-deletepage-lang-logreason": "A(z) „$1” fordítási lap része",
+ "pt-deletepage-started": "Kérjük, ellenőrizd a [[Special:Log/pagetranslation|lapfordítási naplót]] a hibaüzenetekért és a befejezésről szóló üzenetért.",
+ "pt-deletepage-intro": "Ez a speciális lap lehetővé teszi egy teljes lefordítható lap vagy egyetlen, adott nyelvre lefordított változat törlését.\nA törlés nem azonnal hajtódik végre, mert az összes tőle függő lapot is törölni kell.\nA hibák a [[Special:Log/pagetranslation|lapfordítási naplóban]] jelennek meg, és kézzel kell javítani őket.",
+ "pagemigration": "Fordítási oldal migráció",
+ "pagemigration-summary": "Adj meg egy fordítási lapot a lapon a Translate-rendszer bevezetése előtt végzett fordítások helyreállításához.",
+ "pm-import-button-label": "Importálás",
+ "pm-savepages-button-label": "Mentés",
+ "pm-cancel-button-label": "Mégse",
+ "pm-page-does-not-exist": "A(z) $1 lap nem létezik.",
+ "pm-old-translations-missing": "A(z) $1 lap nem tartalmaz régi fordításokat.",
+ "pm-extra-units-warning": "Létezhetnek extra egységek. Kérjük, párosítsd a forrást a fordítási egységekkel.",
+ "pm-pagename-missing": "Írd be a lap címét.",
+ "pm-add-icon-hover-text": "Adj hozzá egy egységet lentebb",
+ "pm-swap-icon-hover-text": "Csere az alábbi egységgel",
+ "pm-delete-icon-hover-text": "Egység törlése",
+ "pm-pagetitle-placeholder": "Írd be a lap címét",
+ "pm-pagetitle-invalid": "Írj be egy érvényes címet. <code><lapcím>/<nyelvkód></code> formátumban kell lennie.",
+ "pm-pagetitle-missing": "Írd be a lap címét.",
+ "pm-langcode-missing": "Úgy tűnik, hiányzik a nyelvkód a címből. Kérjük, írd be a lap címét <page-name>/<language-code> formátumban.",
+ "pm-summary-import": "Importálva a [[Special:PageMigration|lapmigráció]] segítségével",
+ "pm-on-import-message-text": "A régi fordítások importálva lettek. Használd a hozzáadás, csere és törlés opciókat a fordítási egységek igazításához, és kattints a „{{int:pm-savepages-button-label}}“ gombra a mentésükhöz, vagy a „{{int:pm-cancel-button-label}}” az elvetésükhöz.",
+ "pm-on-save-message-text": "A fordítási egységek elmentve. Most beírhatod egy új fordítási lap címét a migrációhoz, vagy lentebb módosíthatod az egységeket a mentés előtt.",
+ "tpt-translate-title": "A lapcím fordításának engedélyezése",
+ "pp-save-summary": "Előkészítés a fordíáshoz",
+ "pagepreparation": "Lap előkészítése fordításra",
+ "pp-pagename-placeholder": "Írd be a lap címét",
+ "pp-prepare-button-label": "Előkészítés",
+ "pp-save-button-label": "Közzététel",
+ "pp-cancel-button-label": "Mégse",
+ "pp-save-message": "A lap közzé lett téve. Mostantól [$1 szerkesztheted].",
+ "pp-prepare-message": "A lap elő lett készítve fordításra, lásd az eltéréseket alább. Kattints a „{{int:pp-save-button-label}}” gombra, ha minden rendben!",
+ "pp-already-prepared-message": "Úgy tűnik, a lap már elő lett készítve fordításra. Nem történtek változtatások az előző verzióhoz képest.",
+ "pp-diff-error": "Hiba történt a különbségek szerverről való lekérése közben.",
+ "pp-pagename-missing": "Írd be a lap címét.",
+ "pp-diff-old-header": "Forrás szöveg",
+ "pp-diff-new-header": "Előkészített szöveg",
+ "tpt-unlink-confirm": "Kérjük, erősítsd meg, hogy valóban el akarod távolítani ezt a lapot a fordítási rendszerből.\nA nyelvválasztó és a lefordított lapcímek nem fognak működni.\nA lefordított lapok szabadon szerkeszthetővé válnak.",
+ "tpt-unlink-button": "Eltávolítás a fordításból",
+ "tpt-unlink-summary": "Lap eltávolítva a fordításból",
+ "tpt-generic-confirm": "Kérjük, erősítsd meg a műveletet.",
+ "tpt-generic-button": "Megerősítés",
+ "tpt-validation-name-reuse": "A(z) „$1” többször van definiálva eltérő tartalommal. Módosítsd a változóneveket úgy, hogy egy fordítási egységen belül egyediek legyenek.",
+ "visualeditor-annotations-translate-start": "Lefordítható tartalom kezdete",
+ "visualeditor-annotations-translate-end": "Lefordítható tartalom vége",
+ "visualeditor-annotations-tvar-start": "Nem lefordítható tartalom kezdete",
+ "visualeditor-annotations-tvar-end": "Nem lefordítható tartalom vége"
+}
diff --git a/Translate/i18n/pagetranslation/hy.json b/Translate/i18n/pagetranslation/hy.json
new file mode 100644
index 00000000..3291aa48
--- /dev/null
+++ b/Translate/i18n/pagetranslation/hy.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kareyac",
+ "Դավիթ Սարոյան"
+ ]
+ },
+ "tps-edit-sourcepage-ve-warning-button": "Լավ",
+ "tpt-languages-nonzero": "$1 ($2% թարգմանված)",
+ "tpt-aggregategroup-add": "Ավելացնել",
+ "tpt-aggregategroup-close": "Փակել",
+ "tpt-aggregategroup-update-cancel": "Չեղարկել",
+ "pt-deletepage-reason-other": "Ուրիշ պատճառ",
+ "pt-deletepage-list-no-pages": "Ոչ մի էջ չի գտնվել։",
+ "pm-cancel-button-label": "Չեղարկել",
+ "pp-save-button-label": "Հրապարակել",
+ "pp-cancel-button-label": "Չեղարկել",
+ "tpt-generic-button": "Հաստատել"
+}
diff --git a/Translate/i18n/pagetranslation/hyw.json b/Translate/i18n/pagetranslation/hyw.json
new file mode 100644
index 00000000..545e073e
--- /dev/null
+++ b/Translate/i18n/pagetranslation/hyw.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kareyac",
+ "Rajemian"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% թարգմանուած)",
+ "tpt-aggregategroup-update-cancel": "Չեղարկել"
+}
diff --git a/Translate/i18n/pagetranslation/ia.json b/Translate/i18n/pagetranslation/ia.json
new file mode 100644
index 00000000..3fa4c485
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ia.json
@@ -0,0 +1,249 @@
+{
+ "@metadata": {
+ "authors": [
+ "McDutchie"
+ ]
+ },
+ "pagetranslation": "Traduction de paginas",
+ "right-pagetranslation": "Marcar versiones de paginas pro traduction",
+ "action-pagetranslation": "gerer paginas traducibile",
+ "tps-edit-sourcepage-text": "Tu modifica ora un pagina de origine de traduction. Assecura te de esser familiar con le sequente documentation:\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text Cambiar le texto de origine]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Markup_examples Exemplo del marcation a usar]",
+ "tps-edit-sourcepage-ve-warning-title": "Attention: Pagina non supportate",
+ "tps-edit-sourcepage-ve-warning-text": "Tu modifica ora un pagina traducibile. Le modification de tal paginas in iste editor non es ancora officialmente supportate. Per favor usa le editor de texto fonte.",
+ "tps-edit-sourcepage-ve-warning-button": "OK",
+ "tpt-section": "Unitate de traduction $1",
+ "tpt-section-new": "Nove unitate de traduction. Nomine: $1",
+ "tpt-section-deleted": "Unitate de traduction $1",
+ "tpt-diff-old": "Texto anterior",
+ "tpt-diff-new": "Texto nove",
+ "tpt-submit": "Marcar iste version pro traduction",
+ "tpt-sections-oldnew": "Unitates de traduction nove e existente",
+ "tpt-sections-deleted": "Unitates de traduction delite",
+ "tpt-sections-template": "Patrono de pagina de traduction",
+ "tpt-action-nofuzzy": "Non invalidar traductiones",
+ "tpt-badtitle": "Le nomine de pagina specificate ($1) non es un titulo valide",
+ "tpt-nosuchpage": "Le pagina $1 non existe",
+ "tpt-oldrevision": "$2 non es le version le plus recente del pagina [[:$1]].\nSolmente le versiones le plus recente pote esser marcate pro traduction.",
+ "tpt-notsuitable": "Le pagina $1 non es traducibile.\nAssecura te que illo contine etiquettas $2 e ha un syntaxe valide.",
+ "tpt-saveok": "Le pagina [[:$1]] ha essite marcate pro traduction con $2 {{PLURAL:$2|unitate|unitates}} de traduction.\nLe pagina pote ora esser <span class=\"plainlinks\">[$3 traducite]</span>.",
+ "tpt-saveok-first": "Tu pote [[Special:PageMigration|importar le traduction pre-existente]] de iste pagina (si existe).",
+ "tpt-offer-notify": "Tu pote <span class=\"plainlinks\">[$1 notificar le traductores]</span> sur iste pagina.",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|Vider le lista de paginas traducibile.]]",
+ "tpt-showpage-intro": "In basso es listate le unitates de traduction nove, existente e delite.\nAnte de marcar iste version pro traduction, verifica que le modificationes al unitates de traduction sia minimisate pro evitar labor innecessari pro traductores.",
+ "tpt-mark-summary": "Marcava iste version pro traduction",
+ "tpt-mark-nochanges": "Il non ha modificationes a revider. Marcar iste pagina pro traduction non modificara le pagina ni alcun unitate de traduction existente.",
+ "tpt-edit-failed": "Non poteva actualisar le pagina: $1",
+ "tpt-duplicate": "Le nomine de unitate de traduction \"$1\" es usate plus de un vice.",
+ "tpt-invalid": "Le nomine del unitate de traduction $1 non pote continer alcun tracto de sublineamento (_) o barra oblique (/).",
+ "tpt-unmarked": "Le pagina [[:$1]] non es plus marcate pro traduction.",
+ "tpt-list-nopages": "Il non ha paginas marcate pro traduction, ni paginas preparate pro isto.",
+ "tpt-new-pages-title": "Paginas proponite pro traduction",
+ "tpt-old-pages-title": "Paginas in traduction",
+ "tpt-other-pages-title": "Paginas defectuose",
+ "tpt-outdated-pages-title": "Paginas con modificationes pendente",
+ "tpt-new-pages": "Iste {{PLURAL:$1|pagina|paginas}} contine texto con etiquettas de traduction, ma nulle version de iste {{PLURAL:$1|pagina|paginas}} es actualmente marcate pro traduction.",
+ "tpt-old-pages": "Le ultime version de iste {{PLURAL:$1|pagina|paginas}} ha essite marcate pro traduction.",
+ "tpt-other-pages": "{{PLURAL:$1|Un ancian version de iste pagina|Ancian versiones de iste paginas}} es marcate pro traduction,\nma le ultime {{PLURAL:$1|version|versiones}} non pote esser marcate pro traduction.",
+ "tpt-outdated-pages": "Iste pagina{{PLURAL:$1||s}} ha cambiamentos non marcate pro traduction.",
+ "tpt-tag-discouraged": "discoragiate",
+ "tpt-tag-oldsyntax": "syntaxe ancian",
+ "tpt-tag-no-transclusion-support": "sin supporto de transclusion",
+ "tpt-select-prioritylangs": "Lista de linguas prioritari separate per commas:",
+ "tpt-select-prioritylangs-force": "Impedir le traduction in linguas non prioritari",
+ "tpt-select-prioritylangs-reason": "Motivo:",
+ "tpt-sections-prioritylangs": "Linguas prioritari",
+ "tpt-sections-syntaxversion": "Version de syntaxe",
+ "tpt-syntaxversion-text": "Iste pagina usa actualmente un version ancian del syntaxe de fonte de pagina traducibile. Le nove version inveloppa sectiones non traducite in un etiquetta HTML pro indicar le lingua correcte del texto. Exemplo: $1. Tu pote usar un nove syntaxe de marcation $2 pro impedir omne typo de inveloppamento in locos ubi non es appropriate, p.ex. quando se traduce le attributo <code>title</code> de un elemento. Non es possibile revenir a un version que usa le syntaxe ancian.",
+ "tpt-syntaxversion-label": "Usar le ultime version del syntaxe pro iste pagina",
+ "tpt-transclusion": "Transclusion de patronos",
+ "tpt-transclusion-label": "Activar le transclusion con recognoscimento de traduction pro iste pagina",
+ "tpt-rev-mark": "marcar pro traduction",
+ "tpt-rev-unmark": "remover del traduction",
+ "tpt-rev-discourage": "discoragiar",
+ "tpt-rev-encourage": "restaurar",
+ "tpt-rev-mark-tooltip": "Marcar le ultime version de iste pagina pro traduction.",
+ "tpt-rev-unmark-tooltip": "Remover iste pagina del traduction.",
+ "tpt-rev-discourage-tooltip": "Discoragiar ulterior traductiones de iste pagina.",
+ "tpt-rev-encourage-tooltip": "Restaurar iste pagina al traduction normal.",
+ "translate-tag-translate-link-desc": "Traducer iste pagina",
+ "translate-tag-markthis": "Marcar iste pagina pro traduction",
+ "translate-tag-markthisagain": "Iste pagina ha <span class=\"plainlinks\">[$1 modificationes]</span> depost le ultime vice que illo esseva <span class=\"plainlinks\">[$2 marcate pro traduction]</span>.",
+ "translate-tag-hasnew": "Iste pagina contine <span class=\"plainlinks\">[$1 modificationes]</span> le quales non ha essite marcate pro traduction.",
+ "tpt-translation-intro": "Iste pagina es un <span class=\"plainlinks\">[$1 version traducite]</span> del pagina [[$2]] e le traduction es complete a $3%.",
+ "tpt-translation-intro-fuzzy": "Le traductiones obsolete es marcate assi.",
+ "tpt-languages-legend": "Altere linguas:",
+ "tpt-languages-zero": "Comenciar le traduction in iste lingua",
+ "tpt-languages-nonzero": "$1 ($2% traducite)",
+ "tpt-tab-translate": "Traducer",
+ "tpt-target-page": "Iste pagina non pote esser actualisate manualmente.\nIste pagina es un traduction del pagina [[$1]] e le traduction pote esser actualisate con le [$2 instrumento de traduction].",
+ "tpt-unknown-page": "Iste spatio de nomines es reservate pro traductiones de paginas de contento.\nLe pagina que tu vole modificar non pare corresponder con alcun pagina marcate pro traduction.",
+ "tpt-translation-restricted": "Le traduction de iste pagina in iste lingua ha essite impedite per un administrator de traductiones.\n\nMotivo: $1",
+ "tpt-translation-restricted-no-reason": "Le traduction de iste pagina in iste lingua ha essite impedite per un administrator de traductiones.",
+ "tpt-discouraged-language-force-header": "Iste pagina non pote esser traducite in $1.",
+ "tpt-discouraged-language-force-content": "Un administrator de traductiones ha decidite que iste pagina pote esser traducite solmente in $1.",
+ "tpt-discouraged-language-header": "Le traduction in $1 non es un prioritate pro iste pagina.",
+ "tpt-discouraged-language-content": "Un administrator de traductiones ha decidite de concentrar le effortios al traduction in $1.",
+ "tpt-discouraged-language-force": "<strong>Iste pagina non pote esser traducite in $2.</strong>\n\nUn administrator de traductiones ha decidite que iste pagina pote esser traducite solmente in $3.",
+ "tpt-priority-languages": "Un administrator de traduction ha definite le linguas prioritari pro iste gruppo como $1.",
+ "tpt-priority-languages-force": "Un administrator de traduction ha fixate le linguas prioritari pro iste gruppo a $1. Le traduction in altere linguas non es permittite.",
+ "tpt-discouraged-translation-header": "Le traduction de iste pagina ha essite discoragiate",
+ "tpt-discouraged-translation-content": "Un administrator de traductiones ha discoragiate le traduction de iste pagina. Tu pote totevia traducer le pagina ma le traductiones pote non esser utile.",
+ "tpt-render-summary": "Actualisation a un nove version del pagina de origine",
+ "aggregategroups": "Gruppos aggregate",
+ "tpt-aggregategroup-add": "Adder",
+ "tpt-aggregategroup-save": "Salveguardar",
+ "tpt-aggregategroup-close": "Clauder",
+ "tpt-aggregategroup-add-new": "Adder un nove gruppo aggregate",
+ "tpt-aggregategroup-new-name": "Nomine:",
+ "tpt-aggregategroup-new-description": "Description (optional):",
+ "tpt-aggregategroup-remove-confirm": "Es tu secur de voler deler iste gruppo aggregate?",
+ "tpt-aggregategroup-invalid-group": "Gruppo non existe",
+ "tpt-aggregategroup-edit-name": "Nomine:",
+ "tpt-aggregategroup-edit-description": "Description:",
+ "tpt-aggregategroup-update": "Salveguardar",
+ "tpt-aggregategroup-update-cancel": "Cancellar",
+ "tpt-aggregategroup-expand-all-groups": "displicar tote le gruppos",
+ "tpt-aggregategroup-collapse-all-groups": "plicar tote le gruppos",
+ "tpt-aggregategroup-expand-group": "displicar gruppo",
+ "tpt-aggregategroup-collapse-group": "plicar gruppo",
+ "tpt-invalid-group": "Gruppo non valide",
+ "pt-parse-open": "Etiquetta &lt;translate> asymmetric.\nPatrono de traduction: <pre>$1</pre>",
+ "pt-parse-close": "Etiquetta &lt;/translate> asymmetric.\nPatrono de traduction: <pre>$1</pre>",
+ "pt-parse-nested": "Le unitates de traduction &lt;translate> annidate non es permittite.\nTexto del etiquetta: <pre>$1</pre>",
+ "pt-shake-multiple": "Il ha multiple marcatores de unitate de traduction pro un sol unitate de traduction.\nAssecura te que le unitates de traduction es separate per lineas vacue.\nTexto del unitate de traduction: <pre>$1</pre>",
+ "pt-shake-position": "Il ha marcatores de unitate de traduction in un position inexpectate.\nTexto del unitate de traduction: <pre>$1</pre>",
+ "pt-shake-empty": "Unitate de traduction vacue pro le marcator \"$1\".",
+ "log-description-pagetranslation": "Registro de actiones ligate al systema de traduction de paginas",
+ "log-name-pagetranslation": "Registro de traduction de paginas",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|marcava}} $3 pro traduction",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|removeva}} $3 del systema de traduction",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|completava}} le renomination del pagina traducibile $3 a $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|incontrava}} un problema durante le renomination del pagina $3 a $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|completava}} le deletion del pagina traducibile $3",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|non succedeva}} a deler $3 le qual pertine al pagina traducibile $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|completava}} le deletion del pagina traducibile $3",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|non succedeva}} a deler $3 le qual pertine al pagina traducibile $4",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|incoragiava}} le traduction de $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|discoragiava}} le traduction de $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|removeva}} linguas prioritari del pagina traducibile $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|definiva}} le linguas prioritari del pagina traducibile $3 como $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|limitava}} le linguas prioritari del pagina traducibile $3 a $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|addeva}} le pagina traducibile $3 al gruppo aggregate $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|removeva}} le pagina traducibile $3 del gruppo aggregate $4",
+ "log-action-filter-pagetranslation": "Typo de action:",
+ "log-action-filter-pagetranslation-mark": "Marcar pro traduction",
+ "log-action-filter-pagetranslation-unmark": "Remover del traduction",
+ "log-action-filter-pagetranslation-move": "Renominationes de paginas",
+ "log-action-filter-pagetranslation-delete": "Deletiones de paginas",
+ "log-action-filter-pagetranslation-encourage": "Incoragiamento de traduction",
+ "log-action-filter-pagetranslation-discourage": "Discoragiamento de traduction",
+ "log-action-filter-pagetranslation-prioritylanguages": "Modification de linguas prioritari",
+ "log-action-filter-pagetranslation-aggregategroups": "Modification de gruppos aggregate",
+ "pt-movepage-title": "Renominar le pagina traducibile $1",
+ "pt-movepage-blockers": "Le pagina traducibile non pote esser renominate a causa del sequente {{PLURAL:$1|error|errores}}:",
+ "pt-movepage-block-base-invalid": "Le nomine del pagina traducibile de destination non es un titulo valide.",
+ "pt-movepage-block-tp-invalid": "Le titulo del pagina de traduction de destination pro [[:$1]] esserea invalide (troppo longe?).",
+ "pt-movepage-block-section-invalid": "Le titulo del pagina de destination pro \"[[:$1]]\" pro le unitate de traduction esserea invalide (troppo longe?).",
+ "pt-movepage-block-subpage-invalid": "Le titulo del subpagina de destination pro [[:$1]] esserea invalide (troppo longe?).",
+ "pt-movepage-block-talkpage-invalid": "Le titulo del pagina de discussion de destination pro \"[[:$1]]\" esserea invalide (troppo longe?).",
+ "pt-movepage-block-unknown-page": "Le pagina a renominar ([[:$1]]) non pare esser un parte del pagina traducibile.",
+ "pt-movepage-block-ns-talk-unsupported": "Le pagina ([[:$1]]) se renomina verso un spatio de nomines que non supporta le paginas de discussion.",
+ "pt-movepage-block-rename-failed": "Occurreva un error durante le generation de un nove titulo pro le pagina [[:$1]]",
+ "pt-movepage-list-pages": "Lista de paginas a renominar",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Pagina|Paginas}} de traduction",
+ "pt-movepage-list-section": "{{PLURAL:$1|Pagina|Paginas}} de unitate de traduction",
+ "pt-movepage-list-translatable": "Subpagina{{PLURAL:$1||s}} marcate pro traduction",
+ "pt-movepage-list-translatable-note": "Iste paginas debe esser renominate separatemente.",
+ "pt-movepage-list-other": "Altere {{PLURAL:$1|subpagina|subpaginas}}",
+ "pt-movepage-list-count": "In total, il ha $1 pagina{{PLURAL:$1||s}} a renominar, includente $2 subpagina{{PLURAL:$2||s}} e $3 pagina{{PLURAL:$3||s}} de discussion.",
+ "pt-movepage-page-count-limit": "Iste pagina traducibile consiste de plus de $1 pagina{{PLURAL:$1||s}}. Renominar tante paginas se ha monstrate poco digne de fide. Per favor contacta un administrator de systema pro facer isto per medio de un script de mantenentia.",
+ "pt-movepage-list-no-pages": "Nulle pagina trovate.",
+ "pt-movepage-legend": "Renominar pagina traducibile",
+ "pt-movepage-current": "Nomine actual:",
+ "pt-movepage-new": "Nove nomine:",
+ "pt-movepage-reason": "Motivo:",
+ "pt-movepage-subpages": "Renominar tote le subpaginas",
+ "pt-movepage-talkpages": "Renominar paginas de discussion",
+ "pt-movepage-talkpage-exists": "(Ha un pagina de discussion)",
+ "pt-movepage-action-check": "Verificar si le renomination es possibile",
+ "pt-movepage-action-perform": "Facer le renomination",
+ "pt-movepage-action-other": "Cambiar destination",
+ "pt-movepage-intro": "Iste pagina special permitte renominar paginas marcate pro traduction.\nLe renomination non essera instantanee, proque il essera necessari renominar multe paginas.\nDurante le renomination del paginas, il non es possibile interager con le paginas in question.\nLe fallimentos essera signalate in le [[$1|registro]] e illos necessita reparation manual.",
+ "pt-movepage-logreason": "Parte del pagina traducibile \"$1\"",
+ "pt-movepage-started": "Per favor verifica le [[$1|registro]] in un momento pro reparar eventual errores e leger le message de completion.",
+ "pt-locked-page": "Iste pagina es serrate proque le pagina traducibile es actualmente in curso de renomination.",
+ "pt-deletepage-lang-title": "Deletion del pagina traducite \"$1\"",
+ "pt-deletepage-tp-title": "Deletion del pagina traducibile \"$1\"",
+ "pt-deletepage-invalid-title": "Le pagina specificate non es valide.",
+ "pt-deletepage-invalid-text": "Le pagina specificate es ni traducibile ni un traduction.",
+ "pt-deletepage-action-check": "Listar paginas a deler",
+ "pt-deletepage-action-perform": "Exequer le deletion",
+ "pt-deletepage-action-other": "Cambiar destination",
+ "pt-deletepage-lang-legend": "Deler pagina traducite",
+ "pt-deletepage-tp-legend": "Deler pagina traducibile",
+ "pt-deletepage-any-legend": "Deler pagina traducibile, gruppo de messages o pagina de traduction",
+ "pt-deletepage-current": "Nomine del pagina:",
+ "pt-deletepage-reason": "Motivo:",
+ "pt-deletepage-reason-details": "Motivo altere/additional:",
+ "pt-deletepage-reason-other": "Altere motivo",
+ "pt-deletepage-subpages": "Deler tote le subpaginas",
+ "pt-deletepage-list-pages": "Lista de paginas a deler",
+ "pt-deletepage-list-translation": "Paginas traducite",
+ "pt-deletepage-list-section": "Paginas de unitate de traduction",
+ "pt-deletepage-list-other": "Altere subpaginas",
+ "pt-deletepage-list-count": "In total $1 {{PLURAL:$1|pagina|paginas}} a deler e $2 {{PLURAL:$2|subpagina|subpaginas}}.",
+ "pt-deletepage-list-no-pages": "Nulle pagina trovate.",
+ "pt-deletepage-full-logreason": "Parte del pagina traducibile \"$1\"",
+ "pt-deletepage-lang-logreason": "Parte del pagina traducite \"$1\"",
+ "pt-deletepage-started": "Per favor verifica le [[$1|registro]] pro reparar eventual errores e leger le message de completion.",
+ "pt-deletepage-intro": "Iste pagina special permitte deler un tote pagina traducibile, un gruppo de messages o un pagina de traduction individual in un certe lingua.\nLe deletion non essera instantanee perque tote le paginas que depende de illos essera delite tamben.\nFallimentos essera registrate in le [[$1|registro pertinente]] e requirera reparation manual.",
+ "pagemigration": "Migration de paginas de traduction",
+ "pagemigration-summary": "Specifica un pagina de traduction e restaura omne traduction facite ante que le systema Translate esseva activate sur ille pagina.",
+ "pm-import-button-label": "Importar",
+ "pm-savepages-button-label": "Salveguardar",
+ "pm-cancel-button-label": "Cancellar",
+ "pm-page-does-not-exist": "$1 non existe",
+ "pm-old-translations-missing": "$1 non contine ancian traductiones",
+ "pm-extra-units-warning": "Il pote haber additional unitates. Assecura te que le unitates de fonte e de traduction corresponde correctemente.",
+ "pm-pagename-missing": "Per favor entra le nomine del pagina",
+ "pm-add-icon-hover-text": "Adde un unitate hic infra",
+ "pm-swap-icon-hover-text": "Excambiar con le unitate hic infra",
+ "pm-delete-icon-hover-text": "Deler unitate",
+ "pm-pagetitle-placeholder": "Entra le titulo del pagina",
+ "pm-pagetitle-invalid": "Le migration de paginas functiona solmente pro paginas de traduction, per exemplo \"Pagina/ia\". Le titulo fornite non es un titulo valide.",
+ "pm-pagetitle-missing": "Per favor entra le titulo del pagina.",
+ "pm-langcode-missing": "Le migration de paginas functiona solmente pro paginas de traduction, per exemplo \"Pagina/ia\". Le titulo fornite non es un pagina de traduction.",
+ "pm-summary-import": "Traduction importate usante le [[Special:PageMigration|migration de paginas]]",
+ "pm-on-import-message-text": "Le traductiones ancian ha essite importate. Usa le optiones adder, excambiar o deler pro adjustar le unitates de traduction e clicca sur le button \"{{int:pm-savepages-button-label}}\" pro salveguardar los. Click sur le button \"{{int:pm-cancel-button-label}}\" pro abandonar.",
+ "pm-on-save-message-text": "Le unitates de traduction ha essite salveguardate. Tu pote ora entrar le titulo de un nove pagina de traduction pro migrar lo, o facer cambiamentos al unitates hic infra e salveguardar un nove version.",
+ "pm-pagetitle-not-translatable": "$1 non face parte de un pagina traducibile.",
+ "pm-translation-unit-fetch-failed": "Un error ha occurrite durante le obtention del unitates de traduction pro le pagina.",
+ "tpt-translate-title": "Permitter le traduction del titulo del pagina",
+ "pp-save-summary": "Pagina preparate pro traduction",
+ "pagepreparation": "Preparar pagina pro traduction",
+ "pagepreparation-summary": "Specifica le titulo del pagina a preparar pro traduction.",
+ "pp-pagename-placeholder": "Entra le nomine del pagina",
+ "pp-prepare-button-label": "Preparar",
+ "pp-save-button-label": "Publicar",
+ "pp-cancel-button-label": "Cancellar",
+ "pp-save-message": "Le pagina ha essite publicate. Tu pote [$1 modificar] lo.",
+ "pp-prepare-message": "Le pagina ha essite preparate pro traduction. Vide le diff sequente. Clicca sur le button \"{{int:pp-save-button-label}}\" si toto es in ordine.",
+ "pp-already-prepared-message": "Il pare que le pagina ha jam essite preparate pro traduction. Il non ha cambiamentos in comparation con le version precedente.",
+ "pp-diff-error": "Un error ha occurrite durante le obtention del diff ab le servitor.",
+ "pp-pagename-missing": "Per favor entra le nomine del pagina.",
+ "pp-diff-old-header": "Texto fonte",
+ "pp-diff-new-header": "Texto preparate",
+ "tpt-unlink-confirm": "Per favor confirma que tu vermente vole remover iste pagina del systema de traduction.\nLe selector de linguas e le nomines traducite del pagina non functionara plus.\nLe paginas traducite devenira modificabile.",
+ "tpt-unlink-button": "Remover del traduction",
+ "tpt-unlink-summary": "Pagina removite del traduction",
+ "tpt-generic-confirm": "Per favor confirma le action.",
+ "tpt-generic-button": "Confirmar",
+ "tpt-validation-not-insertable": "Le nomine del variabile de traduction \"$1\" non pote esser inserite in le interfacie de traduction. Evita le uso de characteres special.",
+ "tpt-validation-name-reuse": "Le variabile de traduction \"$1\" es definite plure vices con contento differente. Cambia le nomines del variabiles de maniera que illos sia unic intra le unitate de traduction.",
+ "visualeditor-annotations-translate-start": "Initio del contento a traducer",
+ "visualeditor-annotations-translate-end": "Fin del contento a traducer",
+ "visualeditor-annotations-translate-description": "Iste parte es marcate como traducibile. Per favor assecura te de sequer le directivas date pro [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text cambiar le texto fonte].",
+ "visualeditor-annotations-tvar-start": "Initio del contento non traducibile",
+ "visualeditor-annotations-tvar-end": "Fin del contento non traducibile",
+ "visualeditor-annotations-tvar-description": "Iste parte es marcate como non traducibile. Consulta [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Segmentation Segmentation del texto fonte] pro plus information."
+}
diff --git a/Translate/i18n/pagetranslation/id.json b/Translate/i18n/pagetranslation/id.json
new file mode 100644
index 00000000..0b6ff5fc
--- /dev/null
+++ b/Translate/i18n/pagetranslation/id.json
@@ -0,0 +1,265 @@
+{
+ "@metadata": {
+ "authors": [
+ "Anakmalaysia",
+ "Bennylin",
+ "Daud I.F. Argana",
+ "Farras",
+ "Irwangatot",
+ "IvanLanin",
+ "Iwan Novirion",
+ "Naufal06",
+ "Pebaryan",
+ "Pols12",
+ "Rachmat04",
+ "Raynasution",
+ "Rex",
+ "William Surya Permana",
+ "WillsonEP09",
+ "පසිඳු කාවින්ද"
+ ]
+ },
+ "pagetranslation": "Penerjemahan halaman",
+ "right-pagetranslation": "Menandai revisi-revisi halaman untuk diterjemahkan",
+ "action-pagetranslation": "mengelola halaman-halaman yang bisa diterjemahkan",
+ "tps-edit-sourcepage-text": "Anda sedang menyunting sebuah halaman sumber terjemahan. Tolong pastikan bahwa Anda memahami dokumentasi berikut:\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text Mengubah teks sumber]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Markup_examples Contoh markah yang digunakan]",
+ "tps-edit-sourcepage-ve-warning-limited-text": "Beberapa area yang bisa diterjemahkan mungkin tidak bisa disunting dalam editor ini. Tolong gunakan editor sumber untuk menyuntingnya.",
+ "tps-edit-sourcepage-ve-warning-title": "Peringatan: Halaman tidak didukung",
+ "tps-edit-sourcepage-ve-warning-text": "Anda sedang menyunting sebuah halaman yang dapat diterjemahkan. Menyunting halaman seperti ini melalui penyunting ini belum didukung secara resmi. Tolong gunakan penyunting sumber.",
+ "tps-edit-sourcepage-ve-warning-button": "Oke",
+ "tpt-section": "Unit penerjemahan $1",
+ "tpt-section-new": "Unit penerjemahan baru. Nama: $1",
+ "tpt-section-deleted": "Unit penerjemahan $1",
+ "tpt-diff-old": "Teks sebelumnya",
+ "tpt-diff-new": "Teks baru",
+ "tpt-submit": "Tandai revisi ini untuk diterjemahkan",
+ "tpt-sections-oldnew": "Unit-unit penerjemahan baru dan yang telah ada",
+ "tpt-sections-deleted": "Unit penerjemahan yang dihapus",
+ "tpt-sections-template": "Templat halaman penerjemahan",
+ "tpt-action-nofuzzy": "Jangan membatalkan terjemahan",
+ "tpt-badtitle": "Nama halaman yang diberikan ($1) tidak valid",
+ "tpt-nosuchpage": "Halaman $1 tidak ada",
+ "tpt-oldrevision": "$2 bukan revisi terakhir dari halaman [[:$1]].\nHanya revisi terakhir yang dapat ditandai untuk diterjemahkan.",
+ "tpt-notsuitable": "Halaman $1 tidak dapat diterjemahkan.\nPastikan bahwa halaman ini memiliki tag <nowiki><translate></nowiki> dan memiliki sintaksis yang valid.",
+ "tpt-saveok": "Halaman [[:$1]] telah ditandai untuk diterjemahkan dengan $2 {{PLURAL:$2|unit penerjemahan|unit penerjemahan}}.\nHalaman ini sekarang dapat <span class=\"plainlinks\">[$3 diterjemahkan]</span>.",
+ "tpt-saveok-first": "Anda dapat [[Special:PageMigration|mengimpor terjemahan yang sudah tersedia]] untuk halaman ini (jika ada).",
+ "tpt-offer-notify": "Anda bisa <span class=\"plainlinks\">[$1 memberitahu penerjemah]</span> mengenai halaman ini.",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|Tampilkan daftar halaman yang bisa diterjemahkan.]]",
+ "tpt-showpage-intro": "Berikut adalah daftar satuan baru, satuan yang telah ada, dan satuan yang dihapus.\nSebelum menandai revisi ini untuk diterjemahkan, harap periksa agar perubahan ke satuan terjemahan dapat diminimalkan guna menghindarkan para penerjemah dari melakukan pekerjaan yang tidak diperlukan.",
+ "tpt-mark-summary": "Menandai revisi ini untuk diterjemahkan",
+ "tpt-mark-nochanges": "Tidak ada perubahan untuk ditinjau. Memandai halaman ini untuk diterjemahkan tidak akan menyunting halaman atau satuan terjemahan yang ada.",
+ "tpt-edit-failed": "Tidak dapat memperbarui halaman: $1",
+ "tpt-duplicate": "Nama satuan terjemahan $1 digunakan lebih dari sekali.",
+ "tpt-invalid": "Nama satuan terjemahan $1 tidak boleh berisi tanda garis bawah atau garis miring.",
+ "tpt-unmarked": "Halaman [[:$1]] tidak lagi ditandai untuk diterjemahkan.",
+ "tpt-list-nopages": "Tidak ada halaman yang ditandai untuk diterjemahkan atau siap ditandai untuk diterjemahkan.",
+ "tpt-new-pages-title": "Halaman yang diusulkan untuk diterjemahkan",
+ "tpt-old-pages-title": "Halaman yang diterjemahkan",
+ "tpt-other-pages-title": "Halaman rusak",
+ "tpt-outdated-pages-title": "Halaman dengan perubahan tertunda",
+ "tpt-new-pages": "{{PLURAL:$1|Halaman ini berisikan|Halaman-halaman ini berisikan}} teks dengan tag terjemahan, tetapi tidak ada versi {{PLURAL:$1|halaman ini|halaman-halaman ini}} yang sudah ditandai untuk diterjemahkan.",
+ "tpt-old-pages": "Revisi terbaru dari {{PLURAL:$1|halaman ini|halaman-halaman ini}} telah ditandai untuk diterjemahkan.",
+ "tpt-other-pages": "{{PLURAL:$1|Versi lama dari halaman ini|Versi lama dari halaman ini}} ditandai untuk diterjemahkan,\ntetapi {{PLURAL:$1|versi|versi}} terakhir tidak dapat ditandai untuk diterjemahkan.",
+ "tpt-outdated-pages": "{{PLURAL:$1|Halaman|Halaman-halaman}} ini memiliki perubahan yang tidak ditandai untuk diterjemahkan.",
+ "tpt-tag-discouraged": "tidak disarankan",
+ "tpt-tag-oldsyntax": "sintaksis lama",
+ "tpt-tag-no-transclusion-support": "tidak ada dukungan transklusi",
+ "tpt-select-prioritylangs": "Daftar kode bahasa prioritas yang dipisahkan dengan koma:",
+ "tpt-select-prioritylangs-force": "Melarang terjemahan ke bahasa-bahasa selain bahasa prioritas",
+ "tpt-select-prioritylangs-reason": "Alasan:",
+ "tpt-sections-prioritylangs": "Bahasa prioritas",
+ "tpt-sections-syntaxversion": "Versi sintaksis",
+ "tpt-syntaxversion-text": "Halaman ini sedang menggunakan versi lama dari sintaksis sumber halaman yang bisa diterjemahkan. Versi yang baru akan membungkus bagian tidak diterjemahkan dengan tag HTML untuk menandakan bahasa teks yang benar. Contoh: $1. Anda bisa menggunakan sintaksis markah baru $2 untuk menghindari terjadinya pembungkusan di tempat yang tidak tepat, seperti ketika menerjemahkan atribut <code>title</code> dari suatu elemen. Tidak mungkin kembali ke versi sintaksis yang lama.",
+ "tpt-syntaxversion-label": "Gunakan versi sintaksis terbaru untuk halaman ini",
+ "tpt-transclusion": "Transklusi templat",
+ "tpt-transclusion-label": "Menyalakan transklusi yang sadar akan penerjemahan untuk halaman ini",
+ "tpt-rev-mark": "tandai untuk diterjemahkan",
+ "tpt-rev-unmark": "singkirkan dari penerjemahan",
+ "tpt-rev-discourage": "tidak disarankan",
+ "tpt-rev-encourage": "kembalikan",
+ "tpt-rev-mark-tooltip": "Tempah versi terbaru halaman ini untuk diterjemahkan.",
+ "tpt-rev-unmark-tooltip": "Singkirkan halaman ini dari penerjemahan.",
+ "tpt-rev-discourage-tooltip": "Cegah penerjemahan lebih lanjut di halaman ini.",
+ "tpt-rev-encourage-tooltip": "Kembalikan halaman ini ke terjemahan yang normal.",
+ "translate-tag-translate-link-desc": "Terjemahkan halaman ini",
+ "translate-tag-markthis": "Tandai halaman ini untuk diterjemahkan",
+ "translate-tag-markthisagain": "Halaman ini telah diubah <span class=\"plainlinks\">[$1 kali]</span> sejak terakhir <span class=\"plainlinks\">[$2 ditandai untuk diterjemahkan]</span>.",
+ "translate-tag-hasnew": "Halaman ini berisikan <span class=\"plainlinks\">[$1 revisi]</span> yang tidak ditandai untuk diterjemahkan.",
+ "tpt-translation-intro": "Halaman ini adalah sebuah <span class=\"plainlinks\">[$1 versi terjemahan]</span> dari halaman [[$2]] dan terjemahannya telah selesai $3% dari sumber terkini.",
+ "tpt-translation-intro-fuzzy": "Terjemahan usang ditandai seperti ini.",
+ "tpt-languages-legend": "Bahasa lain:",
+ "tpt-languages-zero": "Mulai terjemahan dalam bahasa ini",
+ "tpt-languages-nonzero": "$1 ($2% diterjemahkan)",
+ "tpt-tab-translate": "Terjemahkan",
+ "tpt-target-page": "Halaman ini tidak dapat diperbarui secara manual.\nHalaman ini adalah terjemahan dari halaman [[$1]] dan terjemahannya dapat diperbarui menggunakan [$2 peralatan penerjemahan].",
+ "tpt-unknown-page": "Ruang nama ini dicadangkan untuk terjemahan isi halaman.\nHalaman yang ingin Anda sunting ini tampaknya tidak memiliki hubungan dengan halaman mana pun yang ditandai untuk diterjemahkan.",
+ "tpt-translation-restricted": "Penerjemahan halaman ini ke bahasa ini telah dilarang oleh seorang pengurus terjemahan.\n\nAlasan: $1",
+ "tpt-translation-restricted-no-reason": "Penerjemahan halaman ini ke bahasa ini telah dilarang oleh seorang pengurus terjemahan.",
+ "tpt-discouraged-language-force-header": "Halaman ini tidak bisa diterjemahkan ke $1.",
+ "tpt-discouraged-language-force-content": "Seorang pengurus terjemahan telah memutuskan bahwa halaman ini hanya bisa diterjemahkan ke $1.",
+ "tpt-discouraged-language-header": "Menerjemahkan ke $1 bukanlah prioritas untuk halaman ini.",
+ "tpt-discouraged-language-content": "Seorang pengurus terjemahan telah memutuskan untuk memfokuskan usaha penerjemahan ke $1.",
+ "tpt-discouraged-language-force": "<strong>Halaman ini tidak bisa diterjemahkan ke $2.</strong>\n\nSeoarng pengurus terjemahan telah memutuskan bahwa halaman ini hanya bisa diterjemahkan ke $3.",
+ "tpt-priority-languages": "Seorang pengurus terjemahan telah mengatur bahasa prioritas untuk kelompok ini ke $1.",
+ "tpt-priority-languages-force": "Seorang pengurus terjemahan telah mengatur bahasa prioritas untuk kelompok ini menjadi $1. Menerjemahkan ke bahasa lain tidak diperbolehkan.",
+ "tpt-discouraged-translation-header": "Penerjemahan halaman ini tidak disarankan",
+ "tpt-discouraged-translation-content": "Seorang pengurus terjemahan tidak menyarankan penerjemahan halaman ini. Anda masih bisa menerjemahkannya, tetapi terjemahannya kemungkinan tidak berguna.",
+ "tpt-render-summary": "Memperbarui ke revisi terbaru halaman sumber",
+ "aggregategroups": "Kelompok agregat",
+ "tpt-aggregategroup-add": "Tambahkan",
+ "tpt-aggregategroup-save": "Simpan",
+ "tpt-aggregategroup-close": "Tutup",
+ "tpt-aggregategroup-add-new": "Tambahkan kelompok agregat baru",
+ "tpt-aggregategroup-new-name": "Nama:",
+ "tpt-aggregategroup-new-description": "Deskripsi (opsional):",
+ "tpt-aggregategroup-remove-confirm": "Apakah Anda yakin ingin menghapus kelompok agregat ini?",
+ "tpt-aggregategroup-invalid-group": "Kelompok tidak ada",
+ "tpt-aggregategroup-edit-name": "Nama:",
+ "tpt-aggregategroup-edit-description": "Deskripsi:",
+ "tpt-aggregategroup-update": "Simpan",
+ "tpt-aggregategroup-update-cancel": "Batal",
+ "tpt-aggregategroup-expand-all-groups": "kembangkan semua kelompok",
+ "tpt-aggregategroup-collapse-all-groups": "ciutkan semua kelompok",
+ "tpt-aggregategroup-expand-group": "kembangkan kelompok",
+ "tpt-aggregategroup-collapse-group": "ciutkan kelompok",
+ "tpt-invalid-group": "Kelompok tidak valid",
+ "pt-parse-open": "Tag &lt;translate> tidak seimbang.\nTemplat terjemahan: <pre>$1</pre>",
+ "pt-parse-close": "Tag &lt;/translate> tidak seimbang.\nTemplat terjemahan: <pre>$1</pre>",
+ "pt-parse-nested": "Satuan terjemahan &lt;translate> bersarang tidak diizinkan.\nTeks tanda: <pre>$1</pre>",
+ "pt-shake-multiple": "Penanda satuan terjemahan ganda untuk satu bagian.\nPastikan satuan terjemahannya dipisahkan oleh baris kosong.\nTeks bagian: <pre>$1</pre>",
+ "pt-shake-position": "Penanda satuan terjemahan di tempat tak terduga.\nTeks satuan terjemahan: <pre>$1</pre>",
+ "pt-shake-empty": "Satuan terjemahan kosong untuk penanda \"$1\".",
+ "log-description-pagetranslation": "Log tindakan yang berhubungan dengan sistem penerjemahan halaman",
+ "log-name-pagetranslation": "Log penerjemahan halaman",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|menandai}} $3 untuk diterjemahkan",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|menghapus}} $3 dari sistem penerjemahan",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|menyelesaikan}} pengubahan nama halaman yang bisa diterjemahkan $3 ke $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|menghadapi}} masalah saat memindahkan halaman $3 ke $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|menyelesaikan}} penghapusan halaman yang bisa diterjemahkan $3",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|gagal}} menghapus $3 yang dimiliki oleh halaman bisa diterjemahkan $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|menyelesaikan}} penghapusan halaman terjemahan $3",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|gagal}} menghapus $3 yang dimiliki oleh halaman terjemahan $4",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|menyarankan}} penerjemahan $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|tidak menyarankan}} penerjemahan $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|menghapus}} bahasa prioritas dari halaman bisa diterjemahkan $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|mengatur}} bahasa prioritas untuk halaman bisa diterjemahkan $3 menjadi $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|membatasi}} bahasa untuk halaman bisa diterjemahkan $3 menjadi $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|menambahkan}} halaman bisa diterjemahkan $3 ke kelompok agregat $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|menghapus}} halaman bisa diterjemahkan $3 dari kelompok agregat $4",
+ "log-action-filter-pagetranslation": "Jenis tindakan:",
+ "log-action-filter-pagetranslation-mark": "Tandai untuk diterjemahkan",
+ "log-action-filter-pagetranslation-unmark": "Singkirkan dari penerjemahan",
+ "log-action-filter-pagetranslation-move": "Pemindahan halaman",
+ "log-action-filter-pagetranslation-delete": "Penghapusan halaman",
+ "log-action-filter-pagetranslation-encourage": "Menyarankan penerjemahan",
+ "log-action-filter-pagetranslation-discourage": "Menyarankan untuk tidak menerjemahkan",
+ "log-action-filter-pagetranslation-prioritylanguages": "Pengubahan bahasa prioritas",
+ "log-action-filter-pagetranslation-aggregategroups": "Pengubahan kelompok agregat",
+ "pt-movepage-title": "Pindahkan halaman yang dapat diterjemahkan \"$1\"",
+ "pt-movepage-blockers": "Halaman yang dapat diterjemahkan tidak dapat dipindahkan ke nama baru karena {{PLURAL:$1|kesalahan|kesalahan}} berikut:",
+ "pt-movepage-block-base-invalid": "Nama halaman yang bisa diterjemahkan target bukanlah judul yang tidak sah.",
+ "pt-movepage-block-tp-invalid": "Judul halaman penerjemahan target untuk \"[[:$1]]\" salah (terlalu panjang?).",
+ "pt-movepage-block-section-invalid": "Judul halaman target untuk \"[[:$1]]\" untuk satuan terjemahan salah (terlalu panjang?).",
+ "pt-movepage-block-subpage-invalid": "Judul subhalaman target untuk \"[[:$1]]\" salah (terlalu panjang?).",
+ "pt-movepage-block-talkpage-invalid": "Judul halaman pembicaraan target untuk \"[[:$1]]\" salah (terlalu panjang?).",
+ "pt-movepage-block-unknown-page": "Halaman ([[:$1]]) yang dipindahkan tampaknya bukan bagian dari halaman yang dapat diterjemahkan.",
+ "pt-movepage-block-ns-talk-unsupported": "Halaman ([[:$1]]) dipindahkan ke ruang nama yang tidak mendukung halaman pembicaraan.",
+ "pt-movepage-block-rename-failed": "Terjadi galat ketika membuat judul baru untuk halaman [[:$1]]",
+ "pt-movepage-list-pages": "Daftar halaman yang akan dipindahkan",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Halaman|Halaman-halaman}} penerjemahan",
+ "pt-movepage-list-section": "{{PLURAL:$1|Halaman|Halaman-halaman}} satuan terjemahan",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Subhalaman|Subhalaman-subahalaman}} ditandai untuk diterjemahkan",
+ "pt-movepage-list-translatable-note": "Halaman-halaman ini harus dipindahkan secara terpisah.",
+ "pt-movepage-list-other": "{{PLURAL:$1|Subhalaman|Subahalaman-subhalaman}} lain",
+ "pt-movepage-list-count": "Secara keseluruhan ada $1 {{PLURAL:$1|halaman}}, termasuk $2 {{PLURAL:$2|subhalaman}} dan $3 {{PLURAL:$3|halaman pembicaraan}}, yang akan dipindahkan.",
+ "pt-movepage-page-count-limit": "Halaman yang dapat diterjemahkan ini terdiri dari lebih dari $1 {{PLURAL:$1|page|pages}}. Memindahkan banyak halaman ini ternyata tidak dapat diandalkan. Silakan hubungi administrator sistem untuk melakukan ini melalui skrip pemeliharaan.",
+ "pt-movepage-list-no-pages": "Halaman tidak ditemukan.",
+ "pt-movepage-legend": "Pindahkan halaman yang dapat diterjemahkan",
+ "pt-movepage-current": "Nama sekarang:",
+ "pt-movepage-new": "Nama baru:",
+ "pt-movepage-reason": "Alasan:",
+ "pt-movepage-subpages": "Pindahkan semua subhalaman",
+ "pt-movepage-talkpages": "Pindahkan halaman pembicaraan",
+ "pt-movepage-talkpage-exists": "(Punya halaman pembicaraan)",
+ "pt-movepage-action-check": "Periksa apabila langkah ini memungkinkan",
+ "pt-movepage-action-perform": "Lakukan langkah ini",
+ "pt-movepage-action-other": "Ubah target",
+ "pt-movepage-intro": "Halaman istimewa ini memungkinkan Anda untuk memindahkan halaman yang ditandai untuk diterjemahkan.\nTindakan pemindahan tidak akan berlangsung seketika karena banyak halaman yang perlu dipindahkan.\nSaat halaman dipindahkan, tidak dimungkinkan untuk berinteraksi dengan halaman yang bersangkutan.\nKegagalan akan dicatat di [[Special:Log/pagetranslation|log terjemahan halaman]] dan perlu diperbaiki secara manual.",
+ "pt-movepage-logreason": "Bagian dari halaman yang dapat diterjemahkan \"$1\".",
+ "pt-movepage-started": "Silakan periksa [[Special:Log/pagetranslation|log penerjemahan halaman]] untuk pesan kesalahan dan penyelesaian.",
+ "pt-locked-page": "Halaman ini dikunci karena halaman yang dapat diterjemahkan saat ini sedang dipindahkan.",
+ "pt-deletepage-lang-title": "Menghapus halaman terjemahan \"$1\"",
+ "pt-deletepage-tp-title": "Menghapus halaman yang dapat diterjemahkan \"$1\"",
+ "pt-deletepage-invalid-title": "Halaman yang diberikan tidak valid.",
+ "pt-deletepage-invalid-text": "Halaman yang diberikan bukanlah sebuah halaman yang bisa diterjemahkan ataupun sebuah halaman terjemahan.",
+ "pt-deletepage-action-check": "Daftarkan halaman yang akan dihapus",
+ "pt-deletepage-action-perform": "Lakukan penghapusan",
+ "pt-deletepage-action-other": "Ubah target",
+ "pt-deletepage-lang-legend": "Hapus halaman terjemahan",
+ "pt-deletepage-tp-legend": "Hapus halaman yang dapat diterjemahkan",
+ "pt-deletepage-any-legend": "Hapus halaman yang dapat diterjemahkan atau halaman terjemahan",
+ "pt-deletepage-current": "Nama halaman:",
+ "pt-deletepage-reason": "Alasan:",
+ "pt-deletepage-reason-details": "Alasan lain/tambahan:",
+ "pt-deletepage-reason-other": "Alasan lain",
+ "pt-deletepage-subpages": "Hapus semua subhalaman",
+ "pt-deletepage-list-pages": "Daftar halaman yang akan dihapus",
+ "pt-deletepage-list-translation": "Halaman terjemahan",
+ "pt-deletepage-list-section": "Halaman satuan terjemahan",
+ "pt-deletepage-list-other": "Subhalaman lainnya",
+ "pt-deletepage-list-count": "Secara keseluruhan ada $1 {{PLURAL:$1|halaman|halaman}} yang akan dihapus ditambah $2 {{PLURAL:$2|subhalaman|subhalaman}}.",
+ "pt-deletepage-list-no-pages": "Tidak ditemukan halaman yang cocok",
+ "pt-deletepage-full-logreason": "Bagian dari halaman yang dapat diterjemahkan \"$1\".",
+ "pt-deletepage-lang-logreason": "Bagian dari halaman terjemahan \"$1\".",
+ "pt-deletepage-started": "Silakan periksa [[Special:Log/pagetranslation|log penerjemahan halaman]] untuk pesan kesalahan dan penyelesaian.",
+ "pt-deletepage-intro": "Halaman istimewa ini memungkinkan Anda menghapus seluruh halaman yang dapat diterjemahkan, atau halaman terjemahan tertentu dalam sebuah bahasa.\nTindakan penghapusan tidak bersifat instan, karena semua halaman yang bergantung padanya juga akan dihapus.\nKegagalan akan dicatat dalam [[Special:Log/pagetranslation|log penerjemahan halaman]] dan harus perbaiki secara manual.",
+ "pagemigration": "Perpindahan halaman terjemahan",
+ "pagemigration-summary": "Tentukan halaman terjemahannya dan kembalikan semua terjemahan yang dibuat sebelum sistem Translate dinyalakan di halaman tersebut.",
+ "pm-import-button-label": "Impor",
+ "pm-savepages-button-label": "Simpan",
+ "pm-cancel-button-label": "Batalkan",
+ "pm-page-does-not-exist": "$1 tidak ada.",
+ "pm-old-translations-missing": "$1 tidak mengandung terjemahan lama.",
+ "pm-extra-units-warning": "Mungkin ada satuan berlebih. Tolong cocokkan satuan sumber dan terjemahan dengan benar.",
+ "pm-pagename-missing": "Tolong masukkan nama halamannya.",
+ "pm-add-icon-hover-text": "Tambahkan satuan di bawah",
+ "pm-swap-icon-hover-text": "Tukar dengan satuan di bawah",
+ "pm-delete-icon-hover-text": "Hapus satuan",
+ "pm-pagetitle-placeholder": "Masukkan judul halaman",
+ "pm-pagetitle-invalid": "Tolong masukkan judul halaman yang sah. Judulnya harus mengikuti format <nama-halaman>/<kode-bahasa>.",
+ "pm-pagetitle-missing": "Tolong masukkan judul halamannya.",
+ "pm-langcode-missing": "Kode bahasa kelihatannya tidak ada di judulnya. Tolong masukkan judul halaman dengan format <page-name>/<language-code>.",
+ "pm-summary-import": "Terjemahan diimpor menggunakan [[Special:PageMigration|migrasi halaman]]",
+ "pm-on-import-message-text": "Terjemahan lama telah diimpor. Gunakan pilihan tambahkan, tukar dan hapus untuk menyesuaikan satuan terjemahan dan tekan tombol \"{{int:pm-savepages-button-label}}\" untuk menyimpannya. Tekan tombol \"{{int:pm-cancel-button-label}}\" untuk membuangnya.",
+ "pm-on-save-message-text": "Satuan terjemahan telah disimpan. Anda sekarang dapat memasukkan judul dari halaman terjemahan yang baru untuk memigrasikannya, atau mengubah satuan di bawah dan menyimpan revisi baru.",
+ "pm-pagetitle-not-translatable": "$1 bukanlah bagian dari halaman yang bisa diterjemahkan.",
+ "pm-translation-unit-fetch-failed": "Terjadi galat ketika mengambil satuan terjemahan untuk halaman ini.",
+ "tpt-translate-title": "Membolehkan penerjemahan judul halaman",
+ "pp-save-summary": "Menyiapkan halaman untuk diterjemahkan",
+ "pagepreparation": "Menyiapkan halaman untuk diterjemahkan",
+ "pagepreparation-summary": "Menentukan judul halaman untuk menyiapkan penerjemahan.",
+ "pp-pagename-placeholder": "Masukkan nama halaman",
+ "pp-prepare-button-label": "Siapkan",
+ "pp-save-button-label": "Terbitkan",
+ "pp-cancel-button-label": "Batal",
+ "pp-save-message": "Halaman telah diterbitkan. Anda dapat [$1 menyuntingnya].",
+ "pp-prepare-message": "Halaman telah disiapkan untuk diterjemahkan. Lihat ''diff'' di bawah. Tekan tombol \"{{int:pp-save-button-label}}\" jika tidak ada masalah!",
+ "pp-already-prepared-message": "Kelihatannya halaman sudah pernah disiapkan untuk terjemahkan. Tidak ada perubahan untuk dibandingkan dengan versi sebelumnya.",
+ "pp-diff-error": "Terjadi sebuah galat ketika mengambil ''diff'' dari peladen.",
+ "pp-pagename-missing": "Tolong masukkan nama halamannya.",
+ "pp-diff-old-header": "Teks sumber",
+ "pp-diff-new-header": "Teks yang disiapkan",
+ "tpt-unlink-confirm": "Tolong konfirmasi bahwa Anda benar-benar ingin menghapus halaman ini dari sistem penerjemahan.\nPemilih bahasa dan nama halaman yang diterjemahkan akan berhenti bekerja.\nHalaman terjemahan akan bisa disunting.",
+ "tpt-unlink-button": "Singkirkan dari penerjemahan",
+ "tpt-unlink-summary": "Menyingkirkan halaman dari penerjemahan",
+ "tpt-generic-confirm": "Tolong konfirmasi tindakan ini.",
+ "tpt-generic-button": "Konfirmasi",
+ "tpt-validation-not-insertable": "Nama variabel terjemahan \"$1\" tidak bekerja sebagai variabel yang bisa dimasukkan di antarmuka penerjemahan. Hindari penggunaan karakter istimewa.",
+ "tpt-validation-name-reuse": "Variabel terjemahan \"$1\" didefinisikan beberapa kali dengan isi yang berbeda. Ubah nama variabel menjadi unik di dalam satuan terjemahan.",
+ "visualeditor-annotations-translate-start": "Awal konten yang akan diterjemahkan",
+ "visualeditor-annotations-translate-end": "Akhir konten yang akan diterjemahkan",
+ "visualeditor-annotations-translate-description": "Rentang ini ditandai sebagai bisa diterjemahkan. Tolong pastikan Anda mengikuti panduan yang diberikan untuk [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text mengubah teks sumber].",
+ "visualeditor-annotations-tvar-start": "Awal konten yang tidak bisa diterjemahkan",
+ "visualeditor-annotations-tvar-end": "Akhir konten yang tidak bisa diterjemahkan",
+ "visualeditor-annotations-tvar-description": "Rentang ini ditandai sebagai tidak bisa diterjemahkan. Tolong baca [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Segmentation Segmentasi teks sumber] untuk informasi lebih lanjut."
+}
diff --git a/Translate/i18n/pagetranslation/ie.json b/Translate/i18n/pagetranslation/ie.json
new file mode 100644
index 00000000..769588f2
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ie.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Renan",
+ "Stavanger7"
+ ]
+ },
+ "tpt-select-prioritylangs-reason": "Rason:",
+ "tpt-languages-nonzero": "$1 ($2% traductet)",
+ "pt-movepage-reason": "Rason:",
+ "pt-deletepage-current": "Nómine del págine:",
+ "pt-deletepage-reason": "Rason:",
+ "pm-import-button-label": "Importar"
+}
diff --git a/Translate/i18n/pagetranslation/ig.json b/Translate/i18n/pagetranslation/ig.json
new file mode 100644
index 00000000..cabd6db3
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ig.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Tochiprecious",
+ "Ukabia",
+ "Uzoma Ozurumba"
+ ]
+ },
+ "pagetranslation": "Nsụgharị ihuakwukwọ",
+ "tpt-diff-new": "Mpkurụ edemede ọhuru",
+ "translate-tag-translate-link-desc": "Tugharia ihuakwụkwọ a",
+ "tpt-languages-legend": "Asụsụ ndị ọzọ:",
+ "tpt-languages-nonzero": "$1 ($2% atụgharirị)",
+ "tpt-aggregategroup-save": "Doma",
+ "tpt-aggregategroup-update": "Debe",
+ "tpt-aggregategroup-update-cancel": "Kagbụo",
+ "pt-movepage-list-other": "Ihü-íme-ihü nke ozor",
+ "pt-movepage-current": "Áhà nke di ugbua:",
+ "pt-movepage-new": "Áhà ọhuru:",
+ "pt-movepage-reason": "Mgbághapụtà:",
+ "pm-savepages-button-label": "Doma",
+ "pm-cancel-button-label": "Kagbụo",
+ "pp-cancel-button-label": "Kagbụo"
+}
diff --git a/Translate/i18n/pagetranslation/ilo.json b/Translate/i18n/pagetranslation/ilo.json
new file mode 100644
index 00000000..ee478e6e
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ilo.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lam-ang"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% a naipatarus)"
+}
diff --git a/Translate/i18n/pagetranslation/inh.json b/Translate/i18n/pagetranslation/inh.json
new file mode 100644
index 00000000..7a620048
--- /dev/null
+++ b/Translate/i18n/pagetranslation/inh.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Adam-Yourist"
+ ]
+ },
+ "tpt-languages-legend": "Кхыдола метташ:",
+ "tpt-languages-nonzero": "$1 ($2% таржам даьд)",
+ "tpt-tab-translate": "Таржам де",
+ "tpt-generic-button": "Бакъде"
+}
diff --git a/Translate/i18n/pagetranslation/io.json b/Translate/i18n/pagetranslation/io.json
new file mode 100644
index 00000000..b4b1762a
--- /dev/null
+++ b/Translate/i18n/pagetranslation/io.json
@@ -0,0 +1,43 @@
+{
+ "@metadata": {
+ "authors": [
+ "JSantos",
+ "Joao Xavier",
+ "Malafaya"
+ ]
+ },
+ "right-pagetranslation": "Indikar versioni di pagini por tradukar",
+ "action-pagetranslation": "administrar tradukebla pagini",
+ "tpt-diff-old": "Antea texto",
+ "tpt-diff-new": "Nova texto",
+ "tpt-tag-oldsyntax": "anciena sintaxo",
+ "tpt-select-prioritylangs-reason": "Motivo:",
+ "tpt-sections-syntaxversion": "Versiono di la sintaxo",
+ "tpt-rev-encourage": "restaurar",
+ "translate-tag-translate-link-desc": "Tradukar ca pagino",
+ "tpt-translation-intro": "Ca pagino esas <span class=\"plainlinks\">[$1 tradukita versiono]</span> de la pagino [[$2]], e la tradukuro esas $3% kompleta.",
+ "tpt-languages-legend": "Altra lingui:",
+ "tpt-languages-nonzero": "$1 ($2% tradukita)",
+ "tpt-tab-translate": "Tradukar",
+ "tpt-translation-restricted-no-reason": "La traduko di ca pagino a ca idiomo impedesis da ula administranto di tradukuri.",
+ "tpt-aggregategroup-add": "Adjuntar",
+ "tpt-aggregategroup-save": "Konservez",
+ "tpt-aggregategroup-new-description": "Deskripto (fakultativa):",
+ "tpt-aggregategroup-edit-description": "Deskripto:",
+ "tpt-aggregategroup-update": "Konservez",
+ "tpt-aggregategroup-update-cancel": "Nuligar",
+ "log-name-pagetranslation": "Protokolo ('log') pri tradukajo",
+ "log-action-filter-pagetranslation": "Tipo di agado:",
+ "log-action-filter-pagetranslation-unmark": "Supresar tradukuro",
+ "pt-movepage-block-base-invalid": "La nova nomo quan vu deziras donar a la pagino ne esas valida.",
+ "pt-movepage-reason": "Motivo:",
+ "pt-deletepage-reason": "Motivo:",
+ "pt-deletepage-list-no-pages": "Nula pagino trovesis.",
+ "pm-import-button-label": "Importacar",
+ "pm-savepages-button-label": "Konservez",
+ "pm-cancel-button-label": "Nuligar",
+ "pp-cancel-button-label": "Nuligar",
+ "tpt-generic-button": "Konfirmez",
+ "visualeditor-annotations-translate-end": "Fino di kontenajo a tradukar",
+ "visualeditor-annotations-tvar-end": "Fino di parto netradukebla"
+}
diff --git a/Translate/i18n/pagetranslation/is.json b/Translate/i18n/pagetranslation/is.json
new file mode 100644
index 00000000..e1865013
--- /dev/null
+++ b/Translate/i18n/pagetranslation/is.json
@@ -0,0 +1,185 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jonbg",
+ "Maxí",
+ "Snævar",
+ "Sveinn í Felli"
+ ]
+ },
+ "pagetranslation": "Þýðing á síðu",
+ "right-pagetranslation": "Merkja útgáfu af síðum til þýðingar",
+ "action-pagetranslation": "sýsla með þýðanlegar síður",
+ "tpt-section": "Þýðingareining $1",
+ "tpt-section-new": "Ný þýðingareining.\nHeiti: $1",
+ "tpt-section-deleted": "Þýðingareining $1",
+ "tpt-diff-old": "Fyrri texti",
+ "tpt-diff-new": "Nýr texti",
+ "tpt-submit": "Merkja þessa útgáfu til þýðingar",
+ "tpt-sections-oldnew": "Nýjar og fyrirliggjandi þýðingareiningar",
+ "tpt-sections-deleted": "Eyddar þýðingareiningar",
+ "tpt-sections-template": "Sniðmát þýðingarsíðu",
+ "tpt-action-nofuzzy": "Ekki gera þýðingar ógildar",
+ "tpt-badtitle": "Uppgefið síðuheiti ($1) er ekki gildur titill",
+ "tpt-nosuchpage": "Síðan $1 er ekki til",
+ "tpt-oldrevision": "$2 er ekki síðasta útgáfa síðunnar [[:$1]].\nAðeins nýjustu útgáfur er hægt að merkja til þýðingar.",
+ "tpt-notsuitable": "Síðan $1 er ekki tilbúin til þýðingar.\nGakktu úr skugga um að hún sé með <nowiki><translate></nowiki> merki og sé með gilda málskipan (syntax).",
+ "tpt-saveok": "Síðan [[:$1]] hefur verið merkt upp til þýðinga með $2 {{PLURAL:$2|þýðingaeiningu|þýðingaeiningum}}.\nSíðuna er því hægt að <span class=\"plainlinks\">[$3 þýða]</span>.",
+ "tpt-offer-notify": "Þú getur <span class=\"plainlinks\">[$1 látið þýðendur vita]</span> um þessa síðu.",
+ "tpt-showpage-intro": "Fyrir neðan eru taldar upp nýjar, fyrirliggjandi og eyddar þýðingaeiningar.\nÁður en þessi útgáfa er merkt til þýðinga, skaltu athuga vel hvort breytingar á þýðingaeiningum séu ekki í algjöru lágmarki til að valda ekki óþarfa vinnu fyrir þýðendur.",
+ "tpt-mark-summary": "Merkti þessa útgáfu til þýðingar",
+ "tpt-mark-nochanges": "Engar breytingar til að yfirfara. Að merkja þessa síðu til þýðingar mun ekki breyta síðunni eða neinni fyrirliggjandi þýðingareiningu.",
+ "tpt-edit-failed": "Gat ekki uppfært síðuna: $1",
+ "tpt-duplicate": "Nafn þýðingareiningar $1 er notað oftar en einu sinni.",
+ "tpt-unmarked": "Síðan $1 er ekki lengur merkt til þýðingar.",
+ "tpt-list-nopages": "Engar síður eru merktar til þýðingar eða eru tilbúnar til að vera merktar til þýðingar.",
+ "tpt-new-pages-title": "Síður sem stungið er upp á að þýða",
+ "tpt-old-pages-title": "Síður í þýðingu",
+ "tpt-other-pages-title": "Rofnar síður",
+ "tpt-new-pages": "{{PLURAL:$1|Þessi síða inniheldur|Þessar síður innihalda}} texta með þýðingamerkjum,\nen engin útgáfa {{PLURAL:$1|þessarar síðu er|þessara síðna er}} merkt til þýðinga í augnablikinu.",
+ "tpt-old-pages": "Einhver útgáfa {{PLURAL:$1|þessarar síðu|þessara síðna}} hefur verið merkt til þýðingar.",
+ "tpt-other-pages": "{{PLURAL:$1|Eldri útgáfa þessarar síðu er merkt|Eldri útgáfur þessara síðna eru merktar}} til þýðingar,\nen {{PLURAL:$1|nýjustu útgáfuna|nýjustu útgáfurnar}} er ekki hægt að merkja til þýðingar.",
+ "tpt-select-prioritylangs": "Listi yfir kóða tungumála í forgangi, aðskilinn með kommum:",
+ "tpt-select-prioritylangs-force": "Hindra þýðingar á þeim tungumálum sem ekki eru forgangstungumál",
+ "tpt-select-prioritylangs-reason": "Ástæða:",
+ "tpt-sections-prioritylangs": "Forgangstungumál",
+ "tpt-rev-mark": "merkja til þýðingar",
+ "tpt-rev-unmark": "fjarlægja úr þýðingu",
+ "tpt-rev-discourage": "forðast að nota",
+ "tpt-rev-encourage": "endurheimta",
+ "tpt-rev-mark-tooltip": "Merkja síðustu útgáfu þessarar síðu til þýðingar.",
+ "tpt-rev-unmark-tooltip": "Fjarlægja þessa síðu úr þýðingu.",
+ "tpt-rev-discourage-tooltip": "Mælast til um að ekki verði fleiri þýðingar á þessari síðu.",
+ "tpt-rev-encourage-tooltip": "Endurheimta þessa síðu til venjulegrar þýðingar.",
+ "translate-tag-translate-link-desc": "Þýða þessa síðu",
+ "translate-tag-markthis": "Merkja þessa síðu til þýðingar",
+ "translate-tag-markthisagain": "Þessi síða er með <span class=\"plainlinks\">[$1 breytingar]</span> síðan hún var síðast <span class=\"plainlinks\">[$2 merkt til þýðingar]</span>.",
+ "translate-tag-hasnew": "Þessi síða er með <span class=\"plainlinks\">[$ breytingar]</span> sem ekki eru merktar til þýðingar.",
+ "tpt-translation-intro": "Þessi síða er <span class=\"plainlinks\">[$1 þýdd útgáfa]</span> af síðunni [[$2]] og þýðingu hennar er $3% lokið.",
+ "tpt-translation-intro-fuzzy": "Úreltar þýðingar eru merktar svona.",
+ "tpt-languages-legend": "Önnur tungumál:",
+ "tpt-languages-separator": "&#160;•&#32;",
+ "tpt-languages-zero": "Hefja þýðingu á þetta tungumál",
+ "tpt-languages-nonzero": "$1 ($2% þýtt)",
+ "tpt-tab-translate": "Þýða",
+ "tpt-translation-restricted": "Kerfisstjóri þýðinga hefur komið í veg fyrir þýðingu síðunnar á þetta tungumál.\n\nÁstæða: $1",
+ "tpt-discouraged-language-force-header": "Þessa síðu er ekki hægt að þýða á $1.",
+ "tpt-discouraged-language-force-content": "Kerfisstjóri þýðinga ákvað að þessa síðu sé einungis hægt að þýða á $1.",
+ "tpt-discouraged-language-header": "Að þýða á $1 er ekki í forgangi fyrir þessa síðu.",
+ "tpt-discouraged-language-content": "Kerfisstjóri þýðinga ákvað að áhersla sé lögð á að þýða á $1.",
+ "tpt-discouraged-language-force": "<strong>Þessa síðu er ekki hægt að þýða á $2.</strong>\n\nKerfisstjóri þýðinga ákvað að þessa síðu sé einungis hægt að þýða á $3.",
+ "tpt-priority-languages": "Kerfisstjóri þýðinga stillti forgangstungumál þessa hóps sem $1.",
+ "tpt-render-summary": "Uppfæri til að samsvara nýrri útgáfu grunnsíðunnar",
+ "aggregategroups": "Safna saman hópum",
+ "tpt-aggregategroup-add": "Bæta við",
+ "tpt-aggregategroup-save": "Vista",
+ "tpt-aggregategroup-add-new": "Bæta við nýjum samsöfnunarhóp",
+ "tpt-aggregategroup-new-name": "Nafn:",
+ "tpt-aggregategroup-new-description": "Lýsing (valkvætt):",
+ "tpt-aggregategroup-remove-confirm": "Ertu viss um að þú viljir eyða þessum samsöfnunarhópi?",
+ "tpt-aggregategroup-invalid-group": "Hópurinn er ekki til",
+ "tpt-aggregategroup-edit-name": "Nafn:",
+ "tpt-aggregategroup-edit-description": "Lýsing:",
+ "tpt-aggregategroup-update": "Vista",
+ "tpt-aggregategroup-update-cancel": "Hætta við",
+ "tpt-invalid-group": "Ógildur hópur",
+ "pt-parse-open": "Ójöfn pör &lt;translate> merkis.\nÞýðingasniðmát: <pre>$1</pre>",
+ "pt-parse-close": "Ójöfn pör &lt;/translate> merkis.\nÞýðingasniðmát: <pre>$1</pre>",
+ "pt-parse-nested": "Faldaðar (nested) &lt;translate> þýðingareiningar eru ekki leyfðar.\nTexti merkis: <pre>$1</pre>",
+ "pt-shake-multiple": "Mörg þýðingareiningamerki fyrir eina þýðingareiningu.\nTexti þýðingareiningar: <pre>$1</pre>",
+ "pt-shake-position": "Merki þýðingareininga á óvæntum stöðum.\nTexti þýðingareiningar: <pre>$1</pre>",
+ "pt-shake-empty": "Tóm þýðingareining fyrir merkið \"$1\".",
+ "log-description-pagetranslation": "Atvikaskráning fyrir aðgerðir sem tengjast þýðingakerfi síðna",
+ "log-name-pagetranslation": "Atvikaskrá þýðinga á síðum",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|merkti}} $3 til þýðingar",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|fjarlægði}} $3 úr þýðingakerfinu",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|lauk}} endurnefningu þýðanlegrar síðu $3 yfir í $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|rakst á}} vandamál við að færa síðu $3 yfir á $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|lauk}} eyðingu þýðanlegrar síðu $3",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|mistókst}} að eyða $3 sem tilheyrir þýðanlegri síðu $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|lauk}} eyðingu á þýðingarsíðu $3",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|mistókst}} að eyða $3 sem tilheyrir þýðingarsíðu $4",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|hvatti til}} þýðingar á $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|vill forðast}} þýðingu á $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|fjarlægði}} forgangstungumál af þýðanlegri síðu $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|stillti}} forgangstungumál fyrir þýðanlega síðu $3 sem $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|takmarkaði}} tungumál fyrir þýðanlega síðu $3 við $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|bætti}} þýðanlegri síðu $3 við samsöfnunarhóp $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|fjarlægði}} þýðanlega síðu $3 úr samsöfnunarhóp $4",
+ "log-action-filter-pagetranslation": "Tegund aðgerðar:",
+ "log-action-filter-pagetranslation-mark": "Merkja til þýðingar",
+ "log-action-filter-pagetranslation-unmark": "Fjarlæging úr þýðingu",
+ "log-action-filter-pagetranslation-move": "Færslur á síðum",
+ "log-action-filter-pagetranslation-delete": "Eyðingar á síðum",
+ "log-action-filter-pagetranslation-encourage": "Hvatningar á þýðingum",
+ "log-action-filter-pagetranslation-discourage": "Úrtölur með þýðingar",
+ "log-action-filter-pagetranslation-prioritylanguages": "Breyting á forgangstungumálum",
+ "log-action-filter-pagetranslation-aggregategroups": "Breyting á samsöfnunarhópum",
+ "pt-movepage-title": "Færa þýðanlega síðu \"$1\"",
+ "pt-movepage-blockers": "Ekki var hægt að færa þýðanlegu síðuna undir nýtt heiti vegna þess að eftirfarandi {{PLURAL:$1|villa fannst|villur fundust}}:",
+ "pt-movepage-list-pages": "Listi yfir síður sem á að færa",
+ "pt-movepage-list-translation": "Þýðing á {{PLURAL:$1|síðu|síðum}}",
+ "pt-movepage-list-section": "Þýðingareining á {{PLURAL:$1|síðu|síðum}}",
+ "pt-movepage-list-other": "{{PLURAL:$1|Önnur undirsíða|Aðrar undirsíður}}",
+ "pt-movepage-list-count": "Samtals $1 {{PLURAL:$1|síða|síður}} sem á að færa.",
+ "pt-movepage-legend": "Færa þýðanlega síðu",
+ "pt-movepage-current": "Núverandi heiti:",
+ "pt-movepage-new": "Nýtt heiti:",
+ "pt-movepage-reason": "Ástæða:",
+ "pt-movepage-subpages": "Færa allar undirsíður",
+ "pt-movepage-action-check": "Athuga hvort tilfærsla sé möguleg",
+ "pt-movepage-action-perform": "Framkvæma tilfærsluna",
+ "pt-movepage-action-other": "Skipta um frálag",
+ "pt-movepage-logreason": "Hluti af þýðanlegri síðu \"$1\"",
+ "pt-movepage-started": "Skoðaðu [[Special:Log/pagetranslation|atvikaskrá þýðinga]] eftir smástund til að sjá skilaboð um villur og lok aðgerða.",
+ "pt-deletepage-lang-title": "Eyði þýðingarsíðu \"$1\"",
+ "pt-deletepage-tp-title": "Eyði þýðanlegri síðu \"$1\"",
+ "pt-deletepage-invalid-title": "Valda síðan er ógild.",
+ "pt-deletepage-invalid-text": "Valda síðan er hvorki þýðanleg síða né þýðingarsíða.",
+ "pt-deletepage-action-check": "Listi yfir síður sem verður eytt",
+ "pt-deletepage-action-perform": "Framkvæma eyðingu",
+ "pt-deletepage-action-other": "Skipta um frálag",
+ "pt-deletepage-lang-legend": "Eyða þýðingarsíðu",
+ "pt-deletepage-tp-legend": "Eyða þýðanlegri síðu",
+ "pt-deletepage-any-legend": "Eyða þýðanlegri síðu eða þýðingarsíðu",
+ "pt-deletepage-current": "Síðuheiti:",
+ "pt-deletepage-reason": "Ástæða:",
+ "pt-deletepage-subpages": "Eyða öllum undirsíðum",
+ "pt-deletepage-list-pages": "Listi yfir síður sem á að eyða",
+ "pt-deletepage-list-translation": "Þýðingarsíður",
+ "pt-deletepage-list-section": "Síður með þýðingareiningum",
+ "pt-deletepage-list-other": "Aðrar undirsíður",
+ "pt-deletepage-list-count": "Samtals $1 {{PLURAL:$1|síða|síður}} sem á að eyða.",
+ "pt-deletepage-full-logreason": "Hluti af þýðanlegri síðu \"$1\"",
+ "pt-deletepage-lang-logreason": "Hluti að þýðingarsíðu \"$1\"",
+ "pt-deletepage-started": "Skoðaðu [[Special:Log/pagetranslation|atvikaskrá þýðinga]] til að sjá skilaboð um villur og lok aðgerða.",
+ "pagemigration": "Tilfærsla þýðingarsíðu",
+ "pm-import-button-label": "Flytja inn",
+ "pm-savepages-button-label": "Vista",
+ "pm-cancel-button-label": "Hætta við",
+ "pm-page-does-not-exist": "$1 er ekki til",
+ "pm-old-translations-missing": "$1 Inniheldur ekki eldri þýðingar.",
+ "pm-pagename-missing": "Settu inn heiti síðunnar.",
+ "pm-add-icon-hover-text": "Bæta við einingu hér fyrir neðan",
+ "pm-swap-icon-hover-text": "Víxla við þýðingareininguna hér fyrir neðan",
+ "pm-delete-icon-hover-text": "Eyða þýðingareiningu",
+ "pm-pagetitle-placeholder": "Settu inn titil síðunnar",
+ "pm-pagetitle-missing": "Settu inn titil síðunnar.",
+ "tpt-translate-title": "Leyfa þýðingar á titli síðu",
+ "pp-save-summary": "Undirbjó þessa síðu til þýðingar",
+ "pagepreparation": "Undirbúa síðu til þýðingar",
+ "pp-pagename-placeholder": "Settu inn heiti síðunnar",
+ "pp-prepare-button-label": "Undirbúa",
+ "pp-save-button-label": "Vista",
+ "pp-cancel-button-label": "Hætta við",
+ "pp-save-message": "Síðan var vistuð. Þú getur [$1 breytt] henni.",
+ "pp-prepare-message": "Síðan var undirbúin fyrir þýðingu. Skoðaðu mismuninn (diff) hér fyrir neðan. Smelltu á \"{{int:pp-save-button-label}}\" hnappinn ef þetta er í lagi!",
+ "pp-already-prepared-message": "Það lítur út fyrir að þessi síða sé þegar merkt til þýðingar. Ekki eru neinar breytingar á henni miðað við síðustu útgáfu hennar.",
+ "pp-pagename-missing": "Settu inn heiti síðunnar.",
+ "pp-diff-old-header": "Frumtexti",
+ "pp-diff-new-header": "Undirbúinn texti",
+ "tpt-unlink-button": "Fjarlægja úr þýðingu",
+ "tpt-unlink-summary": "Fjarlægði síðu úr þýðingu",
+ "tpt-generic-confirm": "Endilega staðfestu aðgerðina.",
+ "tpt-generic-button": "Staðfesta"
+}
diff --git a/Translate/i18n/pagetranslation/it.json b/Translate/i18n/pagetranslation/it.json
new file mode 100644
index 00000000..72b5ea09
--- /dev/null
+++ b/Translate/i18n/pagetranslation/it.json
@@ -0,0 +1,227 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alexmar983",
+ "Aushulz",
+ "Baffo",
+ "Beta16",
+ "Ciampix",
+ "Civvì",
+ "Darth Kule",
+ "Einreiher",
+ "F. Cosoleto",
+ "Gianfranco",
+ "Matteocng",
+ "Nemo bis",
+ "Peg60",
+ "VittGam",
+ "Ximo17"
+ ]
+ },
+ "pagetranslation": "Traduzione pagine",
+ "nstab-translations": "Unità di traduzione",
+ "right-pagetranslation": "Segna le pagine come da tradurre",
+ "action-pagetranslation": "gestire le pagine traducibili",
+ "tps-edit-sourcepage-ve-warning-title": "Attenzione: pagina non supportata",
+ "tps-edit-sourcepage-ve-warning-text": "Stai modificando una pagina traducibile. La modifica di queste pagine con questo editor non è ancora ufficialmente supportata. Usa l'editor sorgente.",
+ "tps-edit-sourcepage-ve-warning-button": "OK",
+ "tpt-section": "Elemento $1 della traduzione",
+ "tpt-section-new": "Nuovo elemento della traduzione.\nNome: $1",
+ "tpt-section-deleted": "Elemento $1 della traduzione",
+ "tpt-diff-old": "Testo precedente",
+ "tpt-diff-new": "Testo successivo",
+ "tpt-submit": "Segna questa versione per la traduzione",
+ "tpt-sections-oldnew": "Elementi della traduzione nuovi ed esistenti",
+ "tpt-sections-deleted": "Elementi della traduzione cancellati",
+ "tpt-sections-template": "Modello della pagina di traduzione",
+ "tpt-action-nofuzzy": "Non invalidare le traduzioni",
+ "tpt-badtitle": "Il nome fornito per la pagina ($1) non è un titolo valido",
+ "tpt-nosuchpage": "La pagina $1 non esiste",
+ "tpt-oldrevision": "$2 non è l'ultima versione della pagina [[:$1]].\nSolo le ultime versioni possono essere segnate per la traduzione.",
+ "tpt-notsuitable": "La pagina $1 non è adatta per la traduzione.\nAssicurarsi che abbia i tag $2 e una sintassi valida.",
+ "tpt-saveok": "La pagina [[:$1]] è stata segnalata per la traduzione con $2 {{PLURAL:$2|elemento di traduzione|elementi di traduzione}}.\nLa pagina può ora essere <span class=\"plainlinks\">[$3 tradotta]</span>.",
+ "tpt-offer-notify": "Puoi <span class=\"plainlinks\">[$1 notificare questa pagina]</span> ai traduttori.",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|Vedi l'elenco delle pagine traducibili.]]",
+ "tpt-showpage-intro": "Di seguito sono elencate gli elementi di traduzione nuovi, esistenti e cancellati.\nPrima di segnare questa versione per la traduzione, controllare che i cambiamenti per gli elementi di traduzione siano ridotti al minimo per evitare lavoro superfluo ai traduttori.",
+ "tpt-mark-summary": "Versione segnata per la traduzione",
+ "tpt-mark-nochanges": "Nessuna modifica da rivedere. Contrassegnare questa pagina per la traduzione non modificherà la pagina, né alcuna unità di traduzione esistente.",
+ "tpt-edit-failed": "Impossibile aggiornare la pagina: $1",
+ "tpt-duplicate": "Il nome dell'elemento di traduzione $1 è usato più di una volta.",
+ "tpt-unmarked": "La pagina [[:$1]] non è più segnata per la traduzione.",
+ "tpt-list-nopages": "Nessuna pagina è segnata per la traduzione oppure è pronta per essere segnata per la traduzione.",
+ "tpt-new-pages-title": "Pagine proposte per la traduzione",
+ "tpt-old-pages-title": "Pagine in traduzione",
+ "tpt-other-pages-title": "Pagine corrotte",
+ "tpt-new-pages": "{{PLURAL:$1|Questa pagina contiene|Queste pagine contengono}} testo con tag di traduzione,\nma al momento nessuna versione di {{PLURAL:$1|questa pagina|queste pagine}} è segnata per la traduzione.",
+ "tpt-old-pages": "Le ultime versioni di {{PLURAL:$1|questa pagina|queste pagine}} sono state segnate per la traduzione.",
+ "tpt-other-pages": "{{PLURAL:$1|Una vecchia versione di questa pagina è segnata|Delle vecchie versioni di queste pagine sono segnate}} per la traduzione,\nma {{PLURAL:$1|l'ultima versione non può essere segnata|le ultime versioni non possono essere segnate}} per la traduzione.",
+ "tpt-select-prioritylangs": "Elenco dei codici lingua prioritari separati da virgole:",
+ "tpt-select-prioritylangs-force": "Evitare le traduzioni in lingue non ritenute prioritarie",
+ "tpt-select-prioritylangs-reason": "Motivo:",
+ "tpt-sections-prioritylangs": "Lingue prioritarie",
+ "tpt-sections-syntaxversion": "Versione sintassi",
+ "tpt-transclusion": "Transclusioni template",
+ "tpt-rev-mark": "segna per la traduzione",
+ "tpt-rev-unmark": "rimuovi dalla traduzione",
+ "tpt-rev-discourage": "scoraggia",
+ "tpt-rev-encourage": "ripristina",
+ "tpt-rev-mark-tooltip": "Segna l'ultima versione di questa pagina come da tradurre.",
+ "tpt-rev-unmark-tooltip": "Rimuovi questa pagina dalla traduzione.",
+ "tpt-rev-discourage-tooltip": "Scoraggia ulteriori traduzioni di questa pagina.",
+ "tpt-rev-encourage-tooltip": "Ripristina la traduzione ordinaria di questa pagina.",
+ "translate-tag-translate-link-desc": "Traduci questa pagina",
+ "translate-tag-markthis": "Segna questa pagina per la traduzione",
+ "translate-tag-markthisagain": "Questa pagina è stata <span class=\"plainlinks\">[$1 modificata]</span> da quando era stata <span class=\"plainlinks\">[$2 segnata per la traduzione]</span>.",
+ "translate-tag-hasnew": "Questa pagina contiene delle <span class=\"plainlinks\">[$1 modifiche]</span> che non sono segnate per la traduzione.",
+ "tpt-translation-intro": "Questa pagina è una <span class=\"plainlinks\">[$1 versione tradotta]</span> della pagina [[$2]]; la traduzione è completa al $3&nbsp;%.",
+ "tpt-translation-intro-fuzzy": "Le traduzioni non aggiornate sono segnate come questo testo.",
+ "tpt-languages-legend": "Altre lingue:",
+ "tpt-languages-zero": "Inizia a tradurre in questa lingua",
+ "tpt-languages-nonzero": "$1 ($2% tradotta)",
+ "tpt-tab-translate": "Traduci",
+ "tpt-target-page": "Questa pagina non può essere aggiornata manualmente. Questa pagina è una traduzione della pagina [[$1]] e la traduzione può essere aggiornata tramite [$2 lo strumento di traduzione].",
+ "tpt-unknown-page": "Questo namespace è riservato alle traduzioni del contenuto delle pagine.\nLa pagina che stai cercando di modificare non sembra corrispondere ad alcuna pagina segnata per la traduzione.",
+ "tpt-translation-restricted": "La traduzione di questa pagina in questa lingua è stata impedita dall'amministratore.\n\nMotivo: $1",
+ "tpt-discouraged-language-force-header": "Questa pagina non può essere tradotta in $1.",
+ "tpt-discouraged-language-force-content": "Un amministratore delle traduzione ha deciso che questa pagina può essere tradotta solo in $1.",
+ "tpt-discouraged-language-header": "La traduzione in $1 non è prioritaria per questa pagina.",
+ "tpt-discouraged-language-content": "Un amministratore di traduzione ha deciso di concentrare gli sforzi per la traduzione in $1.",
+ "tpt-discouraged-language-force": "<strong>Questa pagina non può essere tradotta in $2.</strong>\n\nUn amministratore delle traduzioni ha deciso che questa pagina può essere tradotta solo in $3.",
+ "tpt-priority-languages": "L'amministratore ha impostato le lingue prioritarie per questo gruppo in $1.",
+ "tpt-render-summary": "Aggiornamento come da nuova versione della pagina di origine",
+ "aggregategroups": "Gruppi aggregati",
+ "tpt-aggregategroup-add": "Aggiungi",
+ "tpt-aggregategroup-save": "Salva",
+ "tpt-aggregategroup-close": "Chiudi",
+ "tpt-aggregategroup-add-new": "Aggiungi un nuovo gruppo aggregato",
+ "tpt-aggregategroup-new-name": "Nome:",
+ "tpt-aggregategroup-new-description": "Descrizione (opzionale):",
+ "tpt-aggregategroup-remove-confirm": "Sei sicuro di voler cancellare questo gruppo aggregato?",
+ "tpt-aggregategroup-invalid-group": "Il gruppo non esiste",
+ "tpt-aggregategroup-edit-name": "Nome:",
+ "tpt-aggregategroup-edit-description": "Descrizione:",
+ "tpt-aggregategroup-update": "Salva",
+ "tpt-aggregategroup-update-cancel": "Annulla",
+ "tpt-invalid-group": "Gruppo non valido",
+ "pt-parse-open": "Marcatore &lt;translate> sbilanciato.\nStruttura della traduzione: <pre>$1</pre>",
+ "pt-parse-close": "Marcatore &lt;/translate> sbilanciato.\nStruttura della traduzione: <pre>$1</pre>",
+ "pt-parse-nested": "Non sono ammessi elementi di traduzione &lt;translate> nidificati.\nTesto del marcatore: <pre>$1</pre>",
+ "pt-shake-multiple": "Sono presenti più marcatori di elementi di traduzione per un singolo elemento.\nAssicurati che gli elementi di traduzione siano separati da linee vuote.\nTesto dell'elemento di traduzione: <pre>$1</pre>",
+ "pt-shake-position": "Sono presenti marcatori di elementi di traduzione in una posizione inaspettata.\nTesto della sezione: <pre>$1</pre>",
+ "pt-shake-empty": "Elemento di traduzione vuoto per il marcatore $1.",
+ "log-description-pagetranslation": "Registro per le azioni inerenti al sistema di traduzione delle pagine",
+ "log-name-pagetranslation": "Traduzioni di pagine",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|ha contrassegnato}} $3 per la traduzione",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|ha rimosso}} $3 dal sistema di traduzione",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|ha eseguito}} lo spostamento della pagina traducibile $3 a $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|ha incontrato}} un problema nello spostamento di $3 a $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|ha eseguito}} la cancellazione della pagina traducibile $3",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|ha incontrato}} un problema nella cancellazione di $3 che appartiene alla pagina da tradurre $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|ha eseguito}} la cancellazione della pagina di traduzione $3",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|ha incontrato}} un problema nella cancellazione di $3 che appartiene alla pagina da tradurre $4",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|ha incoraggiato}} la traduzione di $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|ha scoraggiato}} la traduzione di $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|ha rimosso}} le lingue prioritarie dalla pagina da tradurre $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|ha impostato}} le lingue prioritarie $5 alla pagina da tradurre $3",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|ha limitato}} le lingue a $5 per la pagina da tradurre $3",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|ha aggiunto}} la pagina traducibile $3 al gruppo aggregato $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|ha rimosso}} la pagina traducibile $3 dal gruppo aggregato $4",
+ "log-action-filter-pagetranslation": "Tipo di azione:",
+ "log-action-filter-pagetranslation-mark": "Contrassegnazione della traduzione",
+ "log-action-filter-pagetranslation-unmark": "Rimozione dalla traduzione",
+ "log-action-filter-pagetranslation-move": "Spostamenti di pagine",
+ "log-action-filter-pagetranslation-delete": "Cancellazioni di pagine",
+ "log-action-filter-pagetranslation-encourage": "Incoraggiamento della traduzione",
+ "log-action-filter-pagetranslation-discourage": "Scoraggiamento della traduzione",
+ "log-action-filter-pagetranslation-prioritylanguages": "Modifiche lingue prioritarie",
+ "log-action-filter-pagetranslation-aggregategroups": "Modifiche gruppi aggregati",
+ "pt-movepage-title": "Sposta la pagina traducibile $1",
+ "pt-movepage-blockers": "Questa pagina da tradurre non è stata spostata a un nuovo nome per {{PLURAL:$1|il seguente errore|i seguenti errori}}:",
+ "pt-movepage-block-base-invalid": "La pagina base di destinazione non ha un titolo valido.",
+ "pt-movepage-block-tp-invalid": "Il titolo di destinazione della pagina di traduzione di [[:$1]] sarebbe invalido (troppo lungo?).",
+ "pt-movepage-block-section-invalid": "Il titolo di destinazione della pagina dell'elemento di traduzione di [[:$1]] sarebbe invalido (troppo lungo?).",
+ "pt-movepage-block-subpage-invalid": "Il titolo della sottopagina di destinazione di [[:$1]] sarebbe invalido (troppo lungo?).",
+ "pt-movepage-list-pages": "Elenco di pagine da spostare",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Pagina|Pagine}} di traduzione",
+ "pt-movepage-list-section": "{{PLURAL:$1|Pagina|Pagine}} degli elementi di traduzione",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Sottopagina contrassegnata|Sottopagine contrassegnate}} per la traduzione",
+ "pt-movepage-list-translatable-note": "Queste pagine devono essere spostate separatamente.",
+ "pt-movepage-list-other": "{{PLURAL:$1|Altra sottopagina|Altre sottopagine}}",
+ "pt-movepage-list-count": "In totale $1 {{PLURAL:$1|pagina|pagine}} incluse $2 {{PLURAL:$2|sottopagina|sottopagine}} e $3 {{PLURAL:$3|pagina|pagine}} di discussione da spostare.",
+ "pt-movepage-list-no-pages": "Nessuna pagina trovata.",
+ "pt-movepage-legend": "Sposta pagina traducibile",
+ "pt-movepage-current": "Nome attuale:",
+ "pt-movepage-new": "Nuovo nome:",
+ "pt-movepage-reason": "Motivo:",
+ "pt-movepage-subpages": "Sposta tutte le sottopagine",
+ "pt-movepage-action-check": "Verifica se lo spostamento è possibile",
+ "pt-movepage-action-perform": "Esegui lo spostamento",
+ "pt-movepage-action-other": "Modifica destinazione",
+ "pt-movepage-intro": "Questa pagina speciale ti permette di spostare pagine segnate come da tradurre.\nLo spostamento non sarà istantaneo, perché serve spostare molte pagine.\nMentre le pagine vengono spostate, non è possibile interagire con esse.\nGli errori sono riportati nel [[$1|registro delle traduzioni di pagine]] e devono essere corretti a mano.",
+ "pt-movepage-logreason": "Parte della pagina traducibile \"$1\"",
+ "pt-movepage-started": "Controlla il [[$1|registro delle traduzioni di pagine]] fra un poco per verificare il messaggio di completamento ed eventuali errori.",
+ "pt-locked-page": "Questa pagina è protetta perché la pagina traducibile sta per essere spostata.",
+ "pt-deletepage-lang-title": "Cancellazione della pagina di traduzione \"$1\"",
+ "pt-deletepage-tp-title": "Cancellazione della pagina traducibile \"$1\"",
+ "pt-deletepage-invalid-title": "La pagina specificata non è valida.",
+ "pt-deletepage-invalid-text": "La pagina indicata non è una pagina da tradurre né una pagina di traduzione.",
+ "pt-deletepage-action-check": "Elenca le pagine da cancellare",
+ "pt-deletepage-action-perform": "Esegui la cancellazione",
+ "pt-deletepage-action-other": "Modifica destinazione",
+ "pt-deletepage-lang-legend": "Cancella pagina di traduzione",
+ "pt-deletepage-tp-legend": "Cancella la pagina traducibile",
+ "pt-deletepage-any-legend": "Cancella una pagina traducibile, gruppo messaggi o una pagina di traduzione",
+ "pt-deletepage-current": "Nome della pagina:",
+ "pt-deletepage-reason": "Motivo:",
+ "pt-deletepage-reason-details": "Altri motivi/dettagli:",
+ "pt-deletepage-reason-other": "Altra motivazione",
+ "pt-deletepage-subpages": "Cancella tutte le sottopagine",
+ "pt-deletepage-list-pages": "Elenco di pagine da cancellare",
+ "pt-deletepage-list-translation": "Pagine di traduzione",
+ "pt-deletepage-list-section": "Pagine degli elementi di traduzione",
+ "pt-deletepage-list-other": "Altre sottopagine",
+ "pt-deletepage-list-count": "In totale $1 {{PLURAL:$1|pagina|pagine}} e $2 {{PLURAL:$2|sottopagina|sottopagine}} da cancellare.",
+ "pt-deletepage-list-no-pages": "Nessuna pagina trovata.",
+ "pt-deletepage-full-logreason": "Parte della pagina traducibile \"$1\"",
+ "pt-deletepage-lang-logreason": "Parte della pagina di traduzione \"$1\"",
+ "pt-deletepage-started": "Controlla il [[$1|registro delle traduzioni di pagine]] per verificare il messaggio di completamento ed eventuali errori.",
+ "pt-deletepage-intro": "Questa pagina speciale ti consente di cancellare del tutto una pagina traducibile, un gruppo messaggi o una sua traduzione in una lingua.\nLa cancellazione non sarà istantanea, perché anche tutte le pagine che dipendono da quella dovranno essere cancellate.\nGli errori sono riportati nel [[$1|rispettivo registro]] e devono essere corretti a mano.",
+ "pagemigration": "Migrazione pagine di traduzione",
+ "pagemigration-summary": "Specifica una pagina traducibile e ripristina qualsiasi traduzione fatta prima che il sistema Translate sia stato attivato in quella pagina.",
+ "pm-import-button-label": "Importa",
+ "pm-savepages-button-label": "Salva",
+ "pm-cancel-button-label": "Annulla",
+ "pm-page-does-not-exist": "$1 non esiste",
+ "pm-old-translations-missing": "$1 non contiene vecchie traduzioni",
+ "pm-extra-units-warning": "Sono presenti unità aggiuntive. Abbina correttamente le unità di origine e di traduzione",
+ "pm-pagename-missing": "Inserisci il nome della pagina",
+ "pm-add-icon-hover-text": "Aggiungi un'unità sotto",
+ "pm-swap-icon-hover-text": "Scambia con l'unità sotto",
+ "pm-delete-icon-hover-text": "Cancella unità",
+ "pm-pagetitle-placeholder": "Inserisci il titolo della pagina",
+ "pm-pagetitle-invalid": "La migrazione delle pagine funziona solo su pagine di traduzione, ad esempio \"Pagina/it\". Il titolo fornito non è un titolo valido.",
+ "pm-pagetitle-missing": "Inserisci il titolo della pagina",
+ "pm-langcode-missing": "La migrazione delle pagine funziona solo su pagine di traduzione, ad esempio \"Pagina/it\". Il titolo fornito non è una pagina di traduzione.",
+ "pm-summary-import": "Traduzione importata usando la [[Special:PageMigration|migrazione di pagina]]",
+ "pm-on-import-message-text": "Le vecchie traduzioni sono state importate. Utilizza le opzioni \"aggiungi\", \"scambia\" e \"cancella\" per regolare le unità di traduzione e clicca il pulsante \"{{int:pm-savepages-button-label}}\" per salvarle. Clicca il pulsante \"{{int:pm-cancel-button-label}}\" per annullare le modifiche.",
+ "pm-on-save-message-text": "Le unità di traduzione sono state salvate. È ora possibile inserire il titolo di una nuova pagina di traduzione per migrarla, o apportare modifiche alle unità sottostanti e salvare una nuova versione.",
+ "tpt-translate-title": "Permetti la traduzione del titolo della pagina",
+ "pp-save-summary": "Preparata la pagina per la traduzione",
+ "pagepreparation": "Prepara pagina per la traduzione",
+ "pp-pagename-placeholder": "Inserisci il nome della pagina",
+ "pp-prepare-button-label": "Prepara",
+ "pp-save-button-label": "Pubblica",
+ "pp-cancel-button-label": "Annulla",
+ "pp-save-message": "La pagina è stata pubblicata. Puoi [$1 modificarla].",
+ "pp-prepare-message": "La pagina è stata preparata per la traduzione. Vedi le differenze di seguito. Clicca \"{{int:pp-save-button-label}}\" se va bene!",
+ "pp-already-prepared-message": "Sembra che la pagina sia stata già preparata per la traduzione. Non ci sono modifiche rispetto alla versione precedente.",
+ "pp-diff-error": "Si è verificato un errore durante il recupero del diff dal server.",
+ "pp-pagename-missing": "Inserisci il nome della pagina.",
+ "pp-diff-old-header": "Testo sorgente",
+ "pp-diff-new-header": "Testo preparato",
+ "tpt-unlink-confirm": "Si prega di confermare che vuoi davvero togliere questa pagina dal sistema di traduzione.\nIl selettore di lingua e i nomi tradotti della pagina smetteranno di funzionare.\nLa pagine di traduzione diventeranno modificabile.",
+ "tpt-unlink-button": "Rimuovi dalla traduzione",
+ "tpt-unlink-summary": "Pagina rimossa dalla traduzione",
+ "tpt-generic-confirm": "Per favore, conferma l'azione.",
+ "tpt-generic-button": "Conferma"
+}
diff --git a/Translate/i18n/pagetranslation/ja.json b/Translate/i18n/pagetranslation/ja.json
new file mode 100644
index 00000000..9ff4a8ba
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ja.json
@@ -0,0 +1,252 @@
+{
+ "@metadata": {
+ "authors": [
+ "Afaz",
+ "Aotake",
+ "Fryed-peach",
+ "MathXplore",
+ "Omotecho",
+ "Otokoume",
+ "Shirayuki",
+ "Sujiniku",
+ "Takot",
+ "Tmv",
+ "Whym",
+ "Yamagata Yusuke",
+ "Yusuke1109",
+ "そらたこ",
+ "ネイ",
+ "青子守歌"
+ ]
+ },
+ "pagetranslation": "ページ翻訳",
+ "nstab-translations": "翻訳単位",
+ "right-pagetranslation": "ページの版を翻訳対象に指定",
+ "action-pagetranslation": "翻訳対象ページの管理",
+ "tps-edit-sourcepage-text": "翻訳元ページを編集しています。以下の説明文書の内容を理解していることを確認してください:\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text 翻訳元テキストの変更]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Markup_examples マークアップの使用例]",
+ "tps-edit-sourcepage-ve-warning-limited-text": "翻訳対象の領域はこのエディターでは編集できない場合があるため、編集するにはソースエディターを使用してください。",
+ "tps-edit-sourcepage-ve-warning-title": "警告: 未対応のページ",
+ "tps-edit-sourcepage-ve-warning-text": "翻訳対象ページを編集しています。このエディターによる編集は、まだ公式には対応していません。ソース エディターを使用してください。",
+ "tps-edit-sourcepage-ve-warning-button": "OK",
+ "tpt-section": "翻訳単位 $1",
+ "tpt-section-new": "新しい翻訳単位。\n名前: $1",
+ "tpt-section-deleted": "翻訳単位 $1",
+ "tpt-diff-old": "前のテキスト",
+ "tpt-diff-new": "新しいテキスト",
+ "tpt-submit": "この版を翻訳対象に指定",
+ "tpt-sections-oldnew": "新規または既存の翻訳単位",
+ "tpt-sections-deleted": "削除された翻訳単位",
+ "tpt-sections-template": "翻訳ページの雛型",
+ "tpt-action-nofuzzy": "翻訳を失効させない",
+ "tpt-badtitle": "指定したページ名 ($1) は無効です",
+ "tpt-nosuchpage": "ページ $1 は存在しません",
+ "tpt-oldrevision": "$2 はページ [[:$1]] の最新版ではありません。\n翻訳対象に指定できるのは最新版のみです。",
+ "tpt-notsuitable": "ページ $1 は翻訳に対応していません。\n<nowiki><translate></nowiki> タグが含まれていて、かつ構文が正しいことをを確認してください。",
+ "tpt-saveok": "ページ [[:$1]] は翻訳対象に指定されており、$2 {{PLURAL:$2|個の翻訳単位}}を含んでいます。\nこのページを<span class=\"plainlinks\">[$3 翻訳]</span>できます。",
+ "tpt-saveok-first": "このページの[[Special:PageMigration|既存の翻訳を取り込む]]こともできます (存在する場合)。",
+ "tpt-offer-notify": "このページについて<span class=\"plainlinks\">[$1 翻訳者に通知]</span>できます。",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|翻訳対象ページの一覧を閲覧する。]]",
+ "tpt-showpage-intro": "以下は、新規・既存の、または削除された翻訳単位の一覧です。\nこの版を翻訳対象に指定する前に、翻訳単位の変更を最小限にすることで不要な翻訳作業を回避できないか確認してください。",
+ "tpt-mark-summary": "この版を翻訳対象に指定しました",
+ "tpt-mark-nochanges": "査読対象の変更がありません。このページを翻訳対象に指定しても、ページや既存の翻訳単位のいずれも変更されません。",
+ "tpt-edit-failed": "ページを更新できませんでした: $1",
+ "tpt-duplicate": "翻訳単位名 $1 は、複数回使用されています。",
+ "tpt-invalid": "翻訳単位名 $1 にアンダースコアやスラッシュを含めることはできません。",
+ "tpt-unmarked": "ページ [[:$1]] を翻訳対象から除去しました。",
+ "tpt-list-nopages": "翻訳対象に指定されているページがないか、翻訳対象に指定する準備ができているページがありません。",
+ "tpt-new-pages-title": "翻訳が提案されているページ",
+ "tpt-old-pages-title": "翻訳対象ページ",
+ "tpt-other-pages-title": "壊れたページ",
+ "tpt-outdated-pages-title": "保留されている変更があるページ",
+ "tpt-new-pages": "{{PLURAL:$1|このページ|これらのページ}}は本文に翻訳タグを含んでいますが、\n{{PLURAL:$1|このページ|これらのページ}}には現在、翻訳対象に指定されている版がありません。",
+ "tpt-old-pages": "{{PLURAL:$1|このページ|これらのページ}}は最新の版が翻訳対象に指定されています。",
+ "tpt-other-pages": "{{PLURAL:$1|このページの古い版|このページの複数の古い版}}が翻訳対象に指定されていますが、\n最新の{{PLURAL:$1|版}}は翻訳対象に指定できません。",
+ "tpt-outdated-pages": "{{PLURAL:$1|このページ|これらのページ}}には翻訳対象に指定されていない変更があります。",
+ "tpt-tag-oldsyntax": "旧構文",
+ "tpt-tag-no-transclusion-support": "参照読み込み未対応",
+ "tpt-select-prioritylangs": "優先言語のコードを列挙 (カンマ区切り):",
+ "tpt-select-prioritylangs-force": "優先言語以外への翻訳を禁止",
+ "tpt-select-prioritylangs-reason": "理由:",
+ "tpt-sections-prioritylangs": "優先言語",
+ "tpt-sections-syntaxversion": "構文のバージョン",
+ "tpt-syntaxversion-text": "このページは現在、翻訳対象ページの古いバージョンのソース構文を使用しています。新しいバージョンは、翻訳されていない節を HTML タグで囲んで、テキストの正しい言語を示します。例: $1。新しいマークアップ構文 $2 を使用して、要素のタイトル属性を翻訳する際など、適切ではない場所での折り返しを防止できます。古い構文バージョンに戻すことはできません。",
+ "tpt-syntaxversion-label": "このページでは構文の最新バージョンを使用",
+ "tpt-transclusion": "テンプレートの参照読み込み",
+ "tpt-transclusion-label": "このページの翻訳を意識した参照読み込みを有効にする",
+ "tpt-rev-mark": "翻訳対象に指定",
+ "tpt-rev-unmark": "翻訳対象から除去",
+ "tpt-rev-discourage": "翻訳中止",
+ "tpt-rev-encourage": "復元",
+ "tpt-rev-mark-tooltip": "このページの最新版を翻訳対象に指定します。",
+ "tpt-rev-unmark-tooltip": "このページを翻訳対象から除去します。",
+ "tpt-rev-discourage-tooltip": "このページのこれ以上の翻訳を中止します。",
+ "tpt-rev-encourage-tooltip": "このページを通常の翻訳に復元します。",
+ "translate-tag-translate-link-desc": "このページを翻訳",
+ "translate-tag-markthis": "このページを翻訳対象に指定",
+ "translate-tag-markthisagain": "このページには、最後に<span class=\"plainlinks\">[$2 翻訳対象に指定]</span>された時点以降の<span class=\"plainlinks\">[$1 変更]</span>があります。",
+ "translate-tag-hasnew": "このページには翻訳対象に指定されていない<span class=\"plainlinks\">[$1 変更]</span>があります。",
+ "tpt-translation-intro": "このページはページ [[$2]] を「<span class=\"plainlinks\">[$1 翻訳]</span>」したものです。翻訳は $3% 完了しています。",
+ "tpt-translation-intro-fuzzy": "更新が必要な翻訳にはこのような印が付いています。",
+ "tpt-languages-legend": "他言語での翻訳:",
+ "tpt-languages-zero": "この言語への翻訳を開始",
+ "tpt-languages-nonzero": "$1 ($2% 翻訳済)",
+ "tpt-tab-translate": "翻訳",
+ "tpt-target-page": "このページは手動では更新できません。\nこのページはページ [[$1]] の翻訳版であり、[$2 翻訳ツール]を使用して更新できます。",
+ "tpt-unknown-page": "この名前空間はコンテンツ ページの翻訳用に予約されています。\n編集しようとしているページには翻訳対象ページが対応していないようです。",
+ "tpt-translation-restricted": "翻訳管理者がこのページのこの言語への翻訳を禁止しています。\n\n理由: $1",
+ "tpt-translation-restricted-no-reason": "翻訳管理者がこのページのこの言語への翻訳を禁止しています。",
+ "tpt-discouraged-language-force-header": "このページは$1には翻訳できません。",
+ "tpt-discouraged-language-force-content": "翻訳管理者によってこのページの翻訳は$1のみに限定されました。",
+ "tpt-discouraged-language-header": "このページでは$1への翻訳は優先課題ではありません。",
+ "tpt-discouraged-language-content": "翻訳管理者は、翻訳作業は$1に注力すべきだと考えています。",
+ "tpt-discouraged-language-force": "<strong>このページは $2 に翻訳できません。</strong>\n\n翻訳管理者がこのページの翻訳先言語を $3 のみに制限しています。",
+ "tpt-priority-languages": "翻訳管理者が、このメッセージ群の優先言語を $1 に設定しました。",
+ "tpt-priority-languages-force": "翻訳管理者によって優先すべき言語が$1に指定されました。その他の言語への翻訳は認められていません。",
+ "tpt-discouraged-translation-header": "このページの翻訳は推奨されていません",
+ "tpt-discouraged-translation-content": "翻訳管理者は、このページの翻訳を推奨していません。ページを翻訳することはできますが、役に立たない可能性があります。",
+ "tpt-render-summary": "翻訳元ページの新版に適合するように更新",
+ "aggregategroups": "集約群",
+ "tpt-aggregategroup-add": "追加",
+ "tpt-aggregategroup-save": "保存",
+ "tpt-aggregategroup-close": "閉じる",
+ "tpt-aggregategroup-add-new": "新しい集約群を追加",
+ "tpt-aggregategroup-new-name": "名前:",
+ "tpt-aggregategroup-new-description": "説明 (省略可):",
+ "tpt-aggregategroup-remove-confirm": "この集約群を本当に削除しますか?",
+ "tpt-aggregategroup-invalid-group": "集約群が存在しません",
+ "tpt-aggregategroup-edit-name": "名前:",
+ "tpt-aggregategroup-edit-description": "説明:",
+ "tpt-aggregategroup-update": "保存",
+ "tpt-aggregategroup-update-cancel": "キャンセル",
+ "tpt-aggregategroup-expand-all-groups": "メッセージ群をすべて展開",
+ "tpt-aggregategroup-collapse-all-groups": "メッセージ群をすべて折りたたむ",
+ "tpt-aggregategroup-expand-group": "メッセージ群を展開",
+ "tpt-aggregategroup-collapse-group": "メッセージ群を折りたたむ",
+ "tpt-invalid-group": "無効な集約群です",
+ "pt-parse-open": "&lt;translate> タグの対応がとれていません。\n翻訳の雛型: <pre>$1</pre>",
+ "pt-parse-close": "&lt;/translate> タグの対応がとれていません。\n翻訳の雛型: <pre>$1</pre>",
+ "pt-parse-nested": "&lt;translate> 翻訳単位の入れ子は許されません。\nタグの内容: <pre>$1</pre>",
+ "pt-shake-multiple": "1 つの翻訳単位に対して、複数の翻訳単位マーカーがあります。\n翻訳単位の内容: <pre>$1</pre>",
+ "pt-shake-position": "予期しない位置に翻訳単位マーカーがあります。\n翻訳単位の内容: <pre>$1</pre>",
+ "pt-shake-empty": "マーカー「$1」に対応する翻訳単位が空です。",
+ "log-description-pagetranslation": "ページ翻訳システムに関連する操作の記録",
+ "log-name-pagetranslation": "ページ翻訳記録",
+ "logentry-pagetranslation-mark": "$1 が $3 を翻訳対象に{{GENDER:$2|指定}}",
+ "logentry-pagetranslation-unmark": "$1 が $3 を翻訳システムから{{GENDER:$2|除去}}",
+ "logentry-pagetranslation-moveok": "$1 が翻訳対象ページ $3 の名前を $4 に変更{{GENDER:$2|完了}}",
+ "logentry-pagetranslation-movenok": "$1 がページ $3 を $4 に移動させる際に問題が{{GENDER:$2|発生}}",
+ "logentry-pagetranslation-deletefok": "$1 が翻訳対象ページ $3 の削除を{{GENDER:$2|完了}}",
+ "logentry-pagetranslation-deletefnok": "$1 が翻訳対象ページ $4 に属する $3 の削除に{{GENDER:$2|失敗}}",
+ "logentry-pagetranslation-deletelok": "$1 が翻訳ページ $3 の削除を{{GENDER:$2|完了}}",
+ "logentry-pagetranslation-deletelnok": "$1 が翻訳ページ $4 に属する $3 の削除に{{GENDER:$2|失敗}}",
+ "logentry-pagetranslation-encourage": "$1 が $3 の翻訳を{{GENDER:$2|復元}}",
+ "logentry-pagetranslation-discourage": "$1 が $3 の翻訳を{{GENDER:$2|中止}}",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 が翻訳対象ページ $3 から優先言語を{{GENDER:$2|除去}}",
+ "logentry-pagetranslation-prioritylanguages": "$1 が翻訳対象ページ $3 の優先言語を $5 に{{GENDER:$2|設定}}",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 が翻訳対象ページ $3 の言語を $5 に{{GENDER:$2|制限}}",
+ "logentry-pagetranslation-associate": "$1 が翻訳対象ページ $3 を集約群 $4 に{{GENDER:$2|追加}}",
+ "logentry-pagetranslation-dissociate": "$1 が翻訳対象ページ $3 を集約群 $4 から{{GENDER:$2|除去}}",
+ "log-action-filter-pagetranslation": "操作の種類:",
+ "log-action-filter-pagetranslation-mark": "翻訳対象に指定",
+ "log-action-filter-pagetranslation-unmark": "翻訳からの除去",
+ "log-action-filter-pagetranslation-move": "ページの移動",
+ "log-action-filter-pagetranslation-delete": "ページの削除",
+ "log-action-filter-pagetranslation-encourage": "翻訳のおすすめ",
+ "log-action-filter-pagetranslation-prioritylanguages": "優先言語の変更",
+ "log-action-filter-pagetranslation-aggregategroups": "集約群の変更",
+ "log-action-filter-messagebundle": "操作の種類:",
+ "pt-movepage-title": "翻訳対象ページ「$1」の移動",
+ "pt-movepage-blockers": "以下の{{PLURAL:$1|エラー}}が発生したため、翻訳対象ページを新しいページ名に移動できません:",
+ "pt-movepage-block-base-invalid": "移動先の翻訳対象ページの名前が無効です。",
+ "pt-movepage-block-tp-invalid": "「[[:$1]]」の移動先の翻訳ページの名前が無効です (長すぎる?)。",
+ "pt-movepage-block-section-invalid": "「[[:$1]]」の移動先の翻訳単位ページ名が無効です (長すぎる?)。",
+ "pt-movepage-block-subpage-invalid": "「[[:$1]]」の移動先の下位ページ名が無効です (長すぎる?)。",
+ "pt-movepage-list-pages": "移動するページの一覧",
+ "pt-movepage-list-translation": "翻訳{{PLURAL:$1|ページ}}",
+ "pt-movepage-list-section": "翻訳単位{{PLURAL:$1|ページ}}",
+ "pt-movepage-list-translatable": "翻訳対象に指定されている{{PLURAL:$1|下位ページ}}",
+ "pt-movepage-list-translatable-note": "これらのページは個別に移動させてください。",
+ "pt-movepage-list-other": "その他の{{PLURAL:$1|subpage|下位ページ}}",
+ "pt-movepage-list-count": "合計 $2{{PLURAL:$2|サブページ}}を含む $1{{PLURAL:$1|ページ}}と{{PLURAL:$3|ノートページ}} を移動します。",
+ "pt-movepage-page-count-limit": "この翻訳対象ページは、$1 {{PLURAL:$1|件以上のページ}}で構成されています。このような多数のページの移動は、信頼性に欠けることが分かっています。システム管理者に連絡して、メンテナンス スクリプトでこの作業を行ってください。",
+ "pt-movepage-list-no-pages": "ページはありません。",
+ "pt-movepage-legend": "翻訳対象ページの移動",
+ "pt-movepage-current": "現在の名前:",
+ "pt-movepage-new": "新しい名前:",
+ "pt-movepage-reason": "理由:",
+ "pt-movepage-subpages": "下位ページをすべて移動",
+ "pt-movepage-talkpages": "トークページを移動",
+ "pt-movepage-action-check": "移動できるかどうかチェック",
+ "pt-movepage-action-perform": "移動を実行",
+ "pt-movepage-action-other": "対象を変更",
+ "pt-movepage-intro": "この特別ページでは、翻訳対象に指定されているページを移動できます。\n多くのページを移動する必要があるため、移動操作はすぐには完了しません。\nページの移動中は、そのページの操作はできません。\n失敗した場合は、その[[Special:Log/pagetranslation|ページの翻訳記録]]に記録されるため、手動で修正する必要があります。",
+ "pt-movepage-logreason": "翻訳対象ページ「$1」の一部",
+ "pt-movepage-started": "[[$1|ページの翻訳記録]]で、エラーや完了メッセージを確認してください。",
+ "pt-locked-page": "翻訳対象ページが現在移動中のため、このページはロックされています。",
+ "pt-deletepage-lang-title": "翻訳ページ「$1」の削除",
+ "pt-deletepage-tp-title": "翻訳可能ページ「$1」の削除",
+ "pt-deletepage-invalid-title": "指定したページは無効です。",
+ "pt-deletepage-invalid-text": "指定したページは、翻訳対象ページでも翻訳ページでもありません。",
+ "pt-deletepage-action-check": "削除するページを列挙",
+ "pt-deletepage-action-perform": "削除を実行",
+ "pt-deletepage-action-other": "対象を変更",
+ "pt-deletepage-lang-legend": "翻訳ページの削除",
+ "pt-deletepage-tp-legend": "翻訳対象ページの削除",
+ "pt-deletepage-any-legend": "翻訳対象ページまたは翻訳ページの削除",
+ "pt-deletepage-current": "ページ名:",
+ "pt-deletepage-reason": "理由:",
+ "pt-deletepage-reason-details": "他の、または追加の理由:",
+ "pt-deletepage-reason-other": "その他の理由",
+ "pt-deletepage-subpages": "下位ページをすべて削除",
+ "pt-deletepage-list-pages": "削除するページの一覧",
+ "pt-deletepage-list-translation": "翻訳ページ",
+ "pt-deletepage-list-section": "翻訳単位ページ",
+ "pt-deletepage-list-other": "その他の下位ページ",
+ "pt-deletepage-list-count": "合計 $1 {{PLURAL:$1|ページ}}と $2 {{PLURAL:$2|下位ページ}}を削除します。",
+ "pt-deletepage-list-no-pages": "ページはありません。",
+ "pt-deletepage-full-logreason": "翻訳対象ページ「$1」の一部",
+ "pt-deletepage-lang-logreason": "翻訳ページ「$1」の一部",
+ "pt-deletepage-started": "[[$1|変更記録]]で、エラーや完了メッセージを確認してください。",
+ "pt-deletepage-intro": "この特別ページでは、翻訳対象ページ全体、または指定した言語への翻訳ページを個別に削除できます。\n依存関係があるページもすべて削除するため、削除操作はすぐには完了しません。\n失敗した場合は[[Special:Log/pagetranslation|ページの翻訳記録]]に記録されるので、手動で修正する必要があります。",
+ "pagemigration": "翻訳ページの移行",
+ "pagemigration-summary": "翻訳ページを指定してください。そのページで翻訳システムが有効化される前になされた翻訳を復元します。",
+ "pm-import-button-label": "取り込む",
+ "pm-savepages-button-label": "保存",
+ "pm-cancel-button-label": "キャンセル",
+ "pm-page-does-not-exist": "$1 は存在しません",
+ "pm-old-translations-missing": "$1 は古い翻訳を含んでいません",
+ "pm-extra-units-warning": "翻訳単位が過剰です。ソース文と翻訳の単位の数を同じにしてください。",
+ "pm-pagename-missing": "ページ名を入力してください",
+ "pm-add-icon-hover-text": "単位を下に追加",
+ "pm-swap-icon-hover-text": "下の単位と入れ替える",
+ "pm-delete-icon-hover-text": "単位を削除",
+ "pm-pagetitle-placeholder": "ページ名を入力",
+ "pm-pagetitle-invalid": "有効なページ名を入力してください。<page-name>/<language-code> 形式でなければなりません。",
+ "pm-pagetitle-missing": "ページ名を入力してください。",
+ "pm-langcode-missing": "言語コードがタイトルに表示されないようです。<page-name>/<language-code> の形式でページタイトルを入力してください。",
+ "pm-summary-import": "[[Special:PageMigration|ページ移行]]を使用して翻訳を取り込み",
+ "pm-on-import-message-text": "翻訳の旧版がインポートされました。オプションから追加、交換、削除を選んで翻訳単位を調整し、「{{int:pm-savepages-button-label}}」ボタンを押して保存します。中止するには「{{int:pm-cancel-button-label}}」ボタンを押します。",
+ "pm-on-save-message-text": "翻訳単位を保存しました。新しい翻訳ページ名を入力して移入するか、以下の翻訳単位に変更を加え、新しい履歴を保存します。",
+ "tpt-translate-title": "ページ名を翻訳できるようにする",
+ "pp-save-summary": "ページの翻訳準備が完了",
+ "pagepreparation": "ページを翻訳用に準備する",
+ "pp-pagename-placeholder": "ページ名を入力",
+ "pp-prepare-button-label": "準備する",
+ "pp-save-button-label": "公開する",
+ "pp-cancel-button-label": "キャンセル",
+ "pp-save-message": "ページは公開されました。[$1 編集]できます。",
+ "pp-prepare-message": "ページの翻訳準備が完了しました。以下の差分をご確認の上、問題がなければ「{{int:pp-save-button-label}}」を押してください。",
+ "pp-already-prepared-message": "当該ページは既に翻訳準備の処理がしてあるようです。旧版と比較しても変更がありません。",
+ "pp-diff-error": "サーバから差分を取得するときにエラーが発生しました。",
+ "pp-pagename-missing": "ページ名を入力してください。",
+ "pp-diff-old-header": "ソーステキスト",
+ "pp-diff-new-header": "対象テキスト",
+ "tpt-unlink-confirm": "このページを翻訳システムから本当に除去するかどうか確認してください。\n言語選択と、翻訳されたページ名が、動作しなくなります。\n翻訳ページが編集できる状態になります。",
+ "tpt-unlink-button": "翻訳対象から除去",
+ "tpt-unlink-summary": "ページを翻訳対象から除去",
+ "tpt-generic-confirm": "操作を確認してください。",
+ "tpt-generic-button": "確認",
+ "tpt-validation-not-insertable": "翻訳変数名「$1」は、翻訳インターフェイスの挿入可能な変数として機能しません。特殊文字の使用は避けてください。",
+ "tpt-validation-name-reuse": "翻訳変数「$1」が異なる内容で複数回定義されています。翻訳単位内で一意になるように変数名を変更してください。",
+ "visualeditor-annotations-translate-description": "この範囲は翻訳対象に指定されています。[https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text 翻訳元テキストの変更]に記載されているガイドラインに従うようにしてください。"
+}
diff --git a/Translate/i18n/pagetranslation/jam.json b/Translate/i18n/pagetranslation/jam.json
new file mode 100644
index 00000000..9127e541
--- /dev/null
+++ b/Translate/i18n/pagetranslation/jam.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Katxis",
+ "Yocahuna"
+ ]
+ },
+ "pagetranslation": "Piej chranslieshan",
+ "right-pagetranslation": "Maak voerjan a piejdem fi chranslieshan",
+ "tpt-section": "Chranslieshan yuunit $1",
+ "tpt-section-new": "New chranslieshan yuunit.\nNiem: $1",
+ "tpt-section-deleted": "Chranslieshan yuunit $1",
+ "tpt-diff-old": "Priivos tex",
+ "tpt-diff-new": "Nyuu tex",
+ "tpt-submit": "Maak dis voerjan fi chranslieshan",
+ "tpt-sections-oldnew": "Nyuu ahn egzisin chranslieshan yuunit",
+ "tpt-sections-deleted": "Chranslieshan yuunit wa diliit",
+ "tpt-sections-template": "Chranslieshan piej templit",
+ "tpt-action-nofuzzy": "No invalidiet no chranslieshan",
+ "tpt-badtitle": "Piej niem yu gi ($1) a no valid taikl",
+ "tpt-nosuchpage": "No piej ($1) no egzis",
+ "tpt-oldrevision": "$2 a no di lietis voerjan a di piej [[:$1]].\nOnggl lietis voerjan kiahn maak fi chranslieshan.",
+ "tpt-notsuitable": "Piej $1 no suutobl fi chranslieshan.\nMek shuor se iab <nowiki><translate></nowiki> tag ahn gat valid sintax.",
+ "tpt-saveok": "Di piej [[:$1]] maakop fi chranslieshan wid $2 {{PLURAL:$2|chranslieshan yuunit|chranslieshan yuunit}}.\nDi piej kiahn nou get <span class=\"plainlinks\">[$3 chransliet]</span>.",
+ "tpt-showpage-intro": "Nyuu, egzisin ahn diliitid sekshan lis biluo.\nBifuo yu maak dis voerjan fi chranslieshan, chek se di chienj to sekshandem minimaiz fi avaid anesiseri wok fi chranslietadem.",
+ "tpt-mark-summary": "Dis voerjan maak fi chranslieshan",
+ "tpt-edit-failed": "Kudn opdiet di piej: $1",
+ "tpt-unmarked": "Piej $1 no langa maak fi chranslieshan.",
+ "tpt-list-nopages": "No piej no maak fi chranslieshan nar redi fi maak fi chranslieshan.",
+ "tpt-old-pages": "Som voerjan a {{PLURAL:$1|dis piej|demaya piej}} don maak fi chranslieshan.",
+ "tpt-languages-nonzero": "$1 ($2% chranslietid)‎"
+}
diff --git a/Translate/i18n/pagetranslation/jbo.json b/Translate/i18n/pagetranslation/jbo.json
new file mode 100644
index 00000000..790d27d4
--- /dev/null
+++ b/Translate/i18n/pagetranslation/jbo.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Xbony2"
+ ]
+ },
+ "tpt-rev-discourage": "toldarsygau",
+ "tpt-tab-translate": "fanva",
+ "tpt-aggregategroup-add": "jmina",
+ "tpt-aggregategroup-save": "gau se vreji",
+ "tpt-aggregategroup-update": "gau se vreji",
+ "tpt-aggregategroup-update-cancel": "kansele",
+ "pm-savepages-button-label": "gau se vreji",
+ "pm-cancel-button-label": "kansele"
+}
diff --git a/Translate/i18n/pagetranslation/jut.json b/Translate/i18n/pagetranslation/jut.json
new file mode 100644
index 00000000..acf9f33e
--- /dev/null
+++ b/Translate/i18n/pagetranslation/jut.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jyllanj"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% öwesat)"
+}
diff --git a/Translate/i18n/pagetranslation/jv.json b/Translate/i18n/pagetranslation/jv.json
new file mode 100644
index 00000000..e9401ea8
--- /dev/null
+++ b/Translate/i18n/pagetranslation/jv.json
@@ -0,0 +1,164 @@
+{
+ "@metadata": {
+ "authors": [
+ "Diki Ananta",
+ "N219",
+ "Naufal06",
+ "NoiX180",
+ "Pras",
+ "Sumbukompor"
+ ]
+ },
+ "pagetranslation": "Pertalan kaca",
+ "right-pagetranslation": "Tandhani vèrsi kaca supaya kapertal",
+ "action-pagetranslation": "tata kaca-kaca kang bisa kapertal",
+ "tpt-section": "Ékan pertalan $1",
+ "tpt-section-new": "Ékan pertalan anyar.\nJeneng: $1",
+ "tpt-section-deleted": "Ékan pertalan $1",
+ "tpt-diff-old": "Tulisan sadurungé",
+ "tpt-diff-new": "Tulisan anyar",
+ "tpt-submit": "Tandhani vèrsi iki supaya kapertal",
+ "tpt-sections-oldnew": "Ékan pertalan anyar lan kang wis ana",
+ "tpt-sections-deleted": "Ékan pertalan kang wis kabusek",
+ "tpt-sections-template": "Cithakan kaca pertalan",
+ "tpt-action-nofuzzy": "Aja nandhani pertalan ora trep",
+ "tpt-badtitle": "Jeneng kaca kang kawènèhaké ($1) dudu sesirah kang trep",
+ "tpt-nosuchpage": "Kaca $1 ora ana",
+ "tpt-oldrevision": "$2 dudu vèrsi pungkasan saka kaca [[:$1]].\nMung vèrsi pungkasan kang bisa tinandhanan supaya kapertal.",
+ "tpt-notsuitable": "Kaca $1 ora cocog manawa kapertal.\nPesthèkaké kacané tinengeran <nowiki><translate></nowiki> lan duwé sintaksis kang trep.",
+ "tpt-mark-summary": "Nandhani vèrsi iki supaya kapertal",
+ "tpt-edit-failed": "Ora bisa nganyari kaca: $1",
+ "tpt-duplicate": "Jeneng ékan pertalan $1 kanggo ping akèh.",
+ "tpt-unmarked": "Kaca $1 ora tinandhanan supaya kapertal manèh.",
+ "tpt-list-nopages": "Ora ana kaca kang tinandhanan supaya kapertal utawa cumepak supaya bisa tinandhanan supaya kapertal.",
+ "tpt-new-pages-title": "Kaca kang kausulaké supaya kapertal",
+ "tpt-old-pages-title": "Kaca ing pertalan",
+ "tpt-other-pages-title": "Kaca rusak",
+ "tpt-new-pages": "{{PLURAL:$1|Kaca iki isi|Kaca iki isi}} tulisan mawa tenger pertalan, nanging ora ana vèrsi {{PLURAL:$1|kaca iki|kaca iki}} kang lagi tinandhanan supaya kapertal.",
+ "tpt-old-pages": "Sapérangan vèrsi {{PLURAL:$1|kaca iki|kaca iki}} wis tinandhanan supaya kapertal.",
+ "tpt-other-pages": "{{PLURAL:$1|Vèrsi lawas kaca iki|Vèrsi lawas kaca iki}} tinandhanan supaya kapertal, nanging {{PLURAL:$1|vèrsiné|vèrsiné}} kang anyar ora bisa tinandhanan supaya kapertal.",
+ "tpt-select-prioritylangs": "Dhaptar kodhe basa prioritas diwatesi nganggo koma:",
+ "tpt-select-prioritylangs-force": "Éndhani mertal menyang basa kang ora dadi priyoritas",
+ "tpt-select-prioritylangs-reason": "Alesan:",
+ "tpt-sections-prioritylangs": "Basa prioritas",
+ "tpt-rev-mark": "tandhani supaya kapertal",
+ "tpt-rev-unmark": "busek saka pertalan",
+ "tpt-rev-encourage": "balèkaké",
+ "tpt-rev-mark-tooltip": "Tandhani vèrsi anyar kaca iki supaya kapertal.",
+ "tpt-rev-unmark-tooltip": "Busek kaca iki saka pertalan.",
+ "tpt-rev-encourage-tooltip": "Pulihaké kaca iki dadi pertalan lumrah.",
+ "translate-tag-translate-link-desc": "Pertal kaca iki",
+ "translate-tag-markthis": "Tandhani kaca iki supaya kapertal",
+ "translate-tag-markthisagain": "Kaca iki duwé <span class=\"plainlinks\">[$1 owahan]</span> kawit <span class=\"plainlinks\">[$2 tinandhanan supaya kapertal]</span>.",
+ "translate-tag-hasnew": "Kaca iki ngemu <span class=\"plainlinks\">[$1 owahan]</span> kang ora katengeran minangka pertalan.",
+ "tpt-translation-intro": "Kaca iki minangka <span class=\"plainlinks\">[$1 vèrsi pertalan]</span> saka kaca [[$2]] lan pertalané wis $3% rampung.",
+ "tpt-translation-intro-fuzzy": "Pertalan lawas tinengeran mangkéné.",
+ "tpt-languages-legend": "Basa liyané:",
+ "tpt-languages-separator": "&#160;•&#32;",
+ "tpt-languages-zero": "Wiwiti pertalan tumrap basa iki",
+ "tpt-languages-nonzero": "$1 ($2% kapertal)",
+ "tpt-tab-translate": "Pertal",
+ "tpt-target-page": "Kaca iki ora bisa dianyari manual.\nKaca iki kaca pertalan [[$1]] lan pertalan bisa dianyari nganggo [$2 piranti pertalan].",
+ "tpt-unknown-page": "Mandhala aran iki kacawisaké tumrap pertalan kaca kontèn.\nKaca kang arep kobesut katoné ora ana gayutané karo kaca kang tinengeran pertalan.",
+ "tpt-translation-restricted": "Pertalan kaca iki ing basa iki ditulak déning panata pertalan.\n\nDhedhasar: $1",
+ "tpt-discouraged-language-force-header": "Kaca iki ora bisa kapertal menyang $1.",
+ "tpt-discouraged-language-force": "<strong>Kaca iki ora bisa diterjemahaké menyang $2.</strong>\n\nPanata pertalan milih supaya kaca iki namung bisa diterjemahaké menyang $3.",
+ "tpt-priority-languages": "Panata pertalan nyetèl basa prioritas kanggo klompok iki dadi $1.",
+ "tpt-render-summary": "Nganyari kanggo nyocokaké vèrsi anyar kaca sumber",
+ "tpt-aggregategroup-add": "Tambah",
+ "tpt-aggregategroup-save": "Simpen",
+ "tpt-aggregategroup-add-new": "Tambah klompok agrégat anyar",
+ "tpt-aggregategroup-new-name": "Jeneng:",
+ "tpt-aggregategroup-new-description": "Katerangan (manasuka):",
+ "tpt-aggregategroup-remove-confirm": "Panjenengan yakin arep mbusak klompok agrégat iki?",
+ "tpt-aggregategroup-invalid-group": "Klompok ora ana",
+ "tpt-aggregategroup-edit-name": "Jeneng:",
+ "tpt-aggregategroup-edit-description": "Wedharan:",
+ "tpt-aggregategroup-update": "Simpen",
+ "tpt-aggregategroup-update-cancel": "Wurung",
+ "pt-parse-open": "Tenger &lt;translate> ora imbang.\nCithakan pertalan: <pre>$1</pre>",
+ "pt-parse-close": "Tenger &lt;/translate> ora imbang.\nCithakan pertalan: <pre>$1</pre>",
+ "log-description-pagetranslation": "Log laku sing ana kaitané karo sistem pertalan kaca",
+ "log-name-pagetranslation": "Log pertalan kaca",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|nengeri}} $3 supaya kapertal",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|mbuwang}} $3 saka pertalan",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|rampung}} ngowahi jeneng kaca kang bisa kapertal $3 dadi $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|ngalami}} masalah nalika ngalih kaca $3 menyang $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|rampung}} mbusak kaca kang bisa kapertal $3",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|wurung}} mbusak $3 kang kalebu ing kaca kang bisa kapertal $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|rampung}} mbusak kaca pertalan $3",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|wurung}} mbusak $3 kang kalebu ing kaca pertalan $4",
+ "log-action-filter-pagetranslation": "Jinis laku:",
+ "log-action-filter-pagetranslation-mark": "Tandha kanggo pertalan",
+ "log-action-filter-pagetranslation-unmark": "Busakan saka pertalan",
+ "log-action-filter-pagetranslation-move": "Alihan kaca",
+ "log-action-filter-pagetranslation-delete": "Busakan kaca",
+ "pt-movepage-title": "Lih kaca \"$1\" sing bisa diterjemahaké",
+ "pt-movepage-blockers": "Kaca sing bisa diterjemahaké ora bisa dipindhah nèng jeneng anyar amarga {{PLURAL:$1|kasalahan|kasalahan}} iki:",
+ "pt-movepage-block-base-invalid": "Jeneng kaca jujugan kang bisa kapertal dudu sesirah kang sah.",
+ "pt-movepage-block-tp-invalid": "Sesirah kaca pertalan tujuan kanggo \"[[:$1]]\" ora sah (kadawan?).",
+ "pt-movepage-block-section-invalid": "Sesirah kaca paran kanggo \"[[:$1]]\" ngenani ékan pertalan bakal ora trep (kedawan?).",
+ "pt-movepage-block-subpage-invalid": "Sesirah anak kaca tujuan kanggo \"[[:$1]]\" ora sah (kadawan?).",
+ "pt-movepage-list-pages": "Daptar kaca sing arep dipindhah",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Kaca|Kaca}} pertalan",
+ "pt-movepage-list-section": "{{PLURAL:$1|Kaca|Kaca}} unit pertalan",
+ "pt-movepage-list-other": "Anak-{{PLURAL:$1|kaca|kaca}} liyané",
+ "pt-movepage-list-count": "Kabèhé $1 {{PLURAL:$1|kaca|kaca}} sing arep dipindhah.",
+ "pt-movepage-legend": "Lih kaca sing bisa diterjemahaké",
+ "pt-movepage-current": "Jeneng saiki:",
+ "pt-movepage-new": "Jeneng anyar:",
+ "pt-movepage-reason": "Alesan:",
+ "pt-movepage-subpages": "Lih kabèh anak kaca",
+ "pt-movepage-action-check": "Priksa yèn pangalihé bisa diayahi",
+ "pt-movepage-action-perform": "Pindhahaké",
+ "pt-movepage-action-other": "Ganti patujon",
+ "pt-movepage-intro": "Kaca mirunggan iki nglilakaké panjenengan mindhahaké kaca sing ditandhai kanggo pertalan.\nPamidhahan ora bakal gelis, amarga akèh kaca sing kudu dipindhahaké.\nNalika kaca dipindhahaké, ora bisa interaksi karo kaca sing dimaksud.\nKagagalan bakal dilebokaké nèng [[Special:Log/pagetranslation|log pertalan kaca]] lan ora perlu dibenahi manual.",
+ "pt-movepage-logreason": "Pérangan kaca \"$1\" kang bisa kapertal",
+ "pt-movepage-started": "Mangga priksanen [[Special:Log/pagetranslation|log pertalan kaca]] sadhéla bokmanawa ana masalah lan layang rampungan.",
+ "pt-locked-page": "Kaca iki digembok amarga kaca sing bisa diterjemahaké saiki wis dipindhah.",
+ "pt-deletepage-lang-title": "Mbusak kaca pertalan \"$1\"",
+ "pt-deletepage-tp-title": "Mbusak kaca \"$1\" kang bisa kapertal.",
+ "pt-deletepage-invalid-title": "Kaca sing dimaksud ora sah.",
+ "pt-deletepage-invalid-text": "Kaca sing dimaksud dudu kaca sing bisa diterjemahaké utawa terjemahan saka kuwi.",
+ "pt-deletepage-action-check": "Daptar kaca sing arep dibusak",
+ "pt-deletepage-action-perform": "Busak",
+ "pt-deletepage-action-other": "Ganti patujon",
+ "pt-deletepage-lang-legend": "Busak kaca pertalan",
+ "pt-deletepage-tp-legend": "Busak kaca sing bisa diterjemahaké",
+ "pt-deletepage-any-legend": "Busak kaca sing bisa diterjemahaké utawa terjemahan saka kaca sing bisa diterjemahaké",
+ "pt-deletepage-current": "Jeneng kaca:",
+ "pt-deletepage-reason": "Alesan:",
+ "pt-deletepage-subpages": "Busak kabèh anak kaca",
+ "pt-deletepage-list-pages": "Daptar kaca sing arep dibusak",
+ "pt-deletepage-list-translation": "Kaca pertalan",
+ "pt-deletepage-list-section": "Kaca iji pertalan",
+ "pt-deletepage-list-other": "Anak kaca liya",
+ "pt-deletepage-list-count": "Kabèhé $1 {{PLURAL:$1|kaca|kaca}} sing arep dibusak.",
+ "pt-deletepage-list-no-pages": "Ora ditemokaké kaca sing cocog",
+ "pt-deletepage-full-logreason": "Perangan kaca \"$1\" kang bisa kapertal",
+ "pt-deletepage-lang-logreason": "Pérangan kaca pertalan \"$1\"",
+ "pt-deletepage-started": "Mangga priksa [[Special:Log/pagetranslation|log pertalan kaca]] kanggo layang kasalahan lan parampungan.",
+ "pagemigration": "Migrasi kaca pertalan",
+ "pm-import-button-label": "Impor",
+ "pm-savepages-button-label": "Simpen",
+ "pm-cancel-button-label": "Wurung",
+ "pm-page-does-not-exist": "$1 ora ana.",
+ "pm-old-translations-missing": "$1 ora ngemu pertalan lawas.",
+ "pm-pagename-missing": "Sumangga lebokaké jeneng kacané.",
+ "pm-add-icon-hover-text": "Wuwuh ékan ing ngisor iki",
+ "pm-delete-icon-hover-text": "Busak iji",
+ "pm-pagetitle-placeholder": "Lebokaké sesirah kacané",
+ "tpt-translate-title": "Idinaké mertal sesirah kaca",
+ "pp-pagename-placeholder": "Lebokaké jeneng kacané",
+ "pp-prepare-button-label": "Cepakaké",
+ "pp-save-button-label": "Simpen",
+ "pp-cancel-button-label": "Wurung",
+ "pp-save-message": "Kacané wis kasimpen. Panjenengan bisa [$1 mbesut] kacané.",
+ "pp-pagename-missing": "Sumangga isi mawa jeneng kacané.",
+ "pp-diff-old-header": "Tulisan sumber",
+ "pp-diff-new-header": "Tulisan kang cumepak",
+ "tpt-unlink-button": "Buwang saka pertalan",
+ "tpt-unlink-summary": "Mbuwang kaca saka pertalan",
+ "tpt-generic-confirm": "Sumangga konfirmasi lakuné.",
+ "tpt-generic-button": "Konfirmasi"
+}
diff --git a/Translate/i18n/pagetranslation/ka.json b/Translate/i18n/pagetranslation/ka.json
new file mode 100644
index 00000000..b408419b
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ka.json
@@ -0,0 +1,101 @@
+{
+ "@metadata": {
+ "authors": [
+ "BRUTE",
+ "David1010",
+ "MIKHEIL",
+ "Temuri rajavi"
+ ]
+ },
+ "pagetranslation": "გვერდის თარგმანი",
+ "tpt-section": "თარგმნის ბლოკი $1",
+ "tpt-section-new": "თარგმნის ახალი ბლოკი.\nსახელი: $1",
+ "tpt-section-deleted": "თარგმნის ბლოკი $1",
+ "tpt-diff-old": "წინა ტექსტი",
+ "tpt-diff-new": "ახალი ტექსტი",
+ "tpt-sections-template": "თარგმნის გვერდის თარგი",
+ "tpt-old-pages-title": "გვერდები თარგმნის პროცესში",
+ "tpt-other-pages-title": "დაზიანებული გვერდები",
+ "tpt-select-prioritylangs-reason": "მიზეზი:",
+ "tpt-sections-prioritylangs": "პრიორიტეტული ენები",
+ "tpt-rev-mark": "თარგმნისათვის მონიშვნა",
+ "tpt-rev-discourage": "გამორიცხვა",
+ "tpt-rev-encourage": "აღდგენა",
+ "translate-tag-translate-link-desc": "ამ გვერდის თარგმნა",
+ "tpt-languages-legend": "სხვა ენები:",
+ "tpt-languages-zero": "ამ ენაზე თარგმნის დაწყება",
+ "tpt-languages-nonzero": "$1 ($2% ნათარგმნი)",
+ "tpt-tab-translate": "თარგმნა",
+ "tpt-aggregategroup-add": "დამატება",
+ "tpt-aggregategroup-save": "შენახვა",
+ "tpt-aggregategroup-new-name": "სახელი:",
+ "tpt-aggregategroup-new-description": "აღწერა (არასავალდებულო):",
+ "tpt-aggregategroup-invalid-group": "ჯგუფი არ არსებობს",
+ "tpt-aggregategroup-edit-name": "სახელი:",
+ "tpt-aggregategroup-edit-description": "აღწერა:",
+ "tpt-aggregategroup-update": "შენახვა",
+ "tpt-aggregategroup-update-cancel": "გაუქმება",
+ "tpt-invalid-group": "არასწორი ჯგუფი",
+ "pt-parse-open": "დაუბალანსებელი &lt;translate> ტეგი.\nთარგმანის თარგი: <pre>$1</pre>",
+ "pt-parse-close": "დაუბალანსებელი &lt;translate> ტეგი.\nთარგმანის თარგი: <pre>$1</pre>",
+ "log-name-pagetranslation": "გვერდის თარგმნის ჟურნალი",
+ "pt-movepage-list-pages": "გადასატანი გვერდების სია",
+ "pt-movepage-list-translation": "სათარგმნი {{PLURAL:$1|გვერდი|გვერდები}}",
+ "pt-movepage-list-other": "სხვა {{PLURAL:$1|ქვეგვერდი|ქვეგვერდი}}",
+ "pt-movepage-legend": "თარგმნადი გვერდის გადატანა",
+ "pt-movepage-current": "მიმდინარე სახელი:",
+ "pt-movepage-new": "ახალი სახელი:",
+ "pt-movepage-reason": "მიზეზი:",
+ "pt-movepage-subpages": "ყველა ქვეგვერდის გადატანა",
+ "pt-movepage-action-check": "გადატანის შესაძლებლობის შემოწმება",
+ "pt-movepage-action-perform": "გადატანა",
+ "pt-movepage-action-other": "მიზნის შეცვლა",
+ "pt-movepage-logreason": "თარგმნადი გვერდის ნაწილი „$1“.",
+ "pt-deletepage-lang-title": "იშლება თარგმნილი გვერდი „$1“.",
+ "pt-deletepage-tp-title": "იშლება თარგმნადი გვერდი „$1“.",
+ "pt-deletepage-invalid-title": "მითითებული გვერდი არასწორია.",
+ "pt-deletepage-invalid-text": "მითითებული გვერდი არ არის თარგმნილი ან თარგმნადი გვერდი.",
+ "pt-deletepage-action-check": "წასაშლელი გვერდების სია",
+ "pt-deletepage-action-perform": "წაშლა",
+ "pt-deletepage-action-other": "სამიზნის შეცვლა",
+ "pt-deletepage-lang-legend": "თარგმანის გვერდის წაშლა",
+ "pt-deletepage-tp-legend": "თარგმანის გვერდის წაშლა",
+ "pt-deletepage-any-legend": "თარგმანის გვერდის ან თარგმნილი გვერდის წაშლა",
+ "pt-deletepage-current": "გვერდის სახელი:",
+ "pt-deletepage-reason": "მიზეზი:",
+ "pt-deletepage-subpages": "ყველა ქვეგვერდის წაშლა",
+ "pt-deletepage-list-pages": "წასაშლელი გვერდების სია",
+ "pt-deletepage-list-translation": "სათარგმნი გვერდები",
+ "pt-deletepage-list-section": "თარგმანის განყოფილების გვერდები",
+ "pt-deletepage-list-other": "სხვა ქვეგვერდები",
+ "pt-deletepage-list-count": "სულ წასაშლელია $1 {{PLURAL:$1|გვერდი|გვერდი}}.",
+ "pt-deletepage-full-logreason": "თარგმნადი გვერდის ნაწილი „$1“.",
+ "pt-deletepage-lang-logreason": "თარგმნადი გვერდის ნაწილი „$1“.",
+ "pt-deletepage-started": "გთხოვთ, შეამოწმეთ [[Special:Log/pagetranslation|გვერდების თარგმნის ჟურნალი]] შეცდომებისა და წარმატებული შესრულებების არსებობაზე.",
+ "pagemigration": "თარგმანის გვერდის მიგრაცია",
+ "pm-import-button-label": "იმპორტი",
+ "pm-savepages-button-label": "შენახვა",
+ "pm-cancel-button-label": "გაუქმება",
+ "pm-page-does-not-exist": "$1 არ არსებობს.",
+ "pm-old-translations-missing": "$1 არ შეიცავს ძველ თარგმანებს.",
+ "pm-pagename-missing": "გთხოვთ, შეიყვანოთ გვერდის სახელი.",
+ "pm-add-icon-hover-text": "ბოლოში ბლოკის დამატება",
+ "pm-swap-icon-hover-text": "ქვედა ბლოკთან ადგილების გაცვლა",
+ "pm-delete-icon-hover-text": "ბლოკის წაშლა",
+ "pm-pagetitle-invalid": "გთხოვთ, შეიყვანოთ გვერდის სწორი სახელი",
+ "pm-langcode-missing": "გთხოვთ, შეიყვანოთ ენის კოდი.",
+ "pm-summary-import": "თარგმანი იმპორტირებულია [[Special:PageMigration|გვერდის მიგრაციის]] გამოყენებით",
+ "tpt-translate-title": "გვერდის სათაურის თარგმნის ნებართვა",
+ "pp-save-summary": "გვერდის სათარგმნად მომზადება",
+ "pagepreparation": "გვერდის სათარგმნად მომზადება",
+ "pp-pagename-placeholder": "შეიყვანეთ გვერდის სახელი",
+ "pp-prepare-button-label": "მომზადება",
+ "pp-save-button-label": "გამოქვეყნება",
+ "pp-cancel-button-label": "გაუქმება",
+ "pp-save-message": "გვერდი შენახულია. თქვენ შეგიძლიათ მისი [$1 რედაქტირება].",
+ "pp-pagename-missing": "გთხოვთ, შეიყვანოთ გვერდის სახელი.",
+ "pp-diff-old-header": "წყაროს ტექსტი",
+ "pp-diff-new-header": "მომზადებული ტექსტი",
+ "tpt-unlink-button": "თარგმანიდან წაშლა",
+ "tpt-unlink-summary": "გვერდის თარგმანიდან წაშლა"
+}
diff --git a/Translate/i18n/pagetranslation/kab.json b/Translate/i18n/pagetranslation/kab.json
new file mode 100644
index 00000000..8989842b
--- /dev/null
+++ b/Translate/i18n/pagetranslation/kab.json
@@ -0,0 +1,61 @@
+{
+ "@metadata": {
+ "authors": [
+ "Belkacem77"
+ ]
+ },
+ "pagetranslation": "Asebter n tsuqilt",
+ "right-pagetranslation": "Creḍ ileqman n isebtar ara ttwasuqlen",
+ "action-pagetranslation": "Sefrek isebtar izmren ad ttwasuqlen",
+ "tpt-section": "Tayunt n tsuqilt: $1",
+ "tpt-section-new": "Tayunt tamaynut n tsuqilt. \nIsem : $1",
+ "tpt-section-deleted": "Taynut n tsuqilt $1",
+ "tpt-diff-old": "Aḍris yezrin",
+ "tpt-diff-new": "Aḍris d-iteddun",
+ "tpt-submit": "Creḍ lqem-agi ad yettwasuqel",
+ "tpt-sections-oldnew": "Tayunin n tsuqilt timaynutin neɣ tid yellan",
+ "tpt-sections-deleted": "Tayunin n tsuqilt yettwakksen",
+ "tpt-sections-template": "Taneɣruft n usebter n tsuqilt",
+ "tpt-badtitle": "Isem n usebter yettunefken ($1) mačči d azwel ameɣtu",
+ "tpt-nosuchpage": "Asebter $1 ulac-it",
+ "tpt-mark-summary": "Lqem-agi yettwacreḍ i tsuqilt",
+ "tpt-edit-failed": "Ur izmir ara ad ileqqem asebter $1",
+ "tpt-duplicate": "Isem n tayunt n tsuqilt $1 tettwaseqdec ugar n tikelt.",
+ "tpt-unmarked": "Asebter $1 ur yezgi yettwacreḍ i tsuqilt",
+ "tpt-list-nopages": "Ulac isebtar yettwacerḍen i tsuqilt neɣ yettwaheggan ad ttwacerḍen i tsuqilt.",
+ "tpt-new-pages-title": "Isebtar yettwasumren i tsuqilt",
+ "tpt-old-pages-title": "Isebtar yettwasqqalen tura",
+ "tpt-other-pages-title": "Isebtar s tuccḍiwin",
+ "tpt-select-prioritylangs-reason": "Taɣẓint :",
+ "tpt-rev-mark": "creḍ i tsuqilt",
+ "tpt-rev-unmark": "kkes si tsuqilt",
+ "tpt-rev-encourage": "err-d",
+ "tpt-rev-mark-tooltip": "Creḍ lqem aneggaru n usebter-agi i tsuqilt.",
+ "tpt-rev-unmark-tooltip": "Kkes asebter-agi si tsuqilt.",
+ "tpt-rev-encourage-tooltip": "Err-d asebter-agi ar tsuqilt tamagnut.",
+ "translate-tag-translate-link-desc": "Suqel asebter-agi",
+ "translate-tag-markthis": "Creḍ asebter-agi i tsuqilt",
+ "tpt-translation-intro-fuzzy": "Tisuqilin ifaten ttwacerḍent akka.",
+ "tpt-languages-legend": "Tutlayin-nniḍen:",
+ "tpt-languages-zero": "Senker tasuqilt i tutlayt-a",
+ "tpt-languages-nonzero": "$1 ($2% yettwasuqel)",
+ "tpt-tab-translate": "Suqel",
+ "tpt-discouraged-language-force-header": "Asebter-agi ur yezmir ara ad yettwasuqle ar $1.",
+ "tpt-discouraged-language-force-content": "Anebdal n tsuqilt igzem-itt d iṛṛay d akken asebter-agi ur yezmir ara ad yettwsuqel ar $1.",
+ "tpt-discouraged-language-header": "Tasuqilt ar $1 mačči d ayen yezwaren deg usebter-agi.",
+ "tpt-aggregategroup-add": "Rnu",
+ "tpt-aggregategroup-save": "Sekles",
+ "tpt-aggregategroup-new-name": "Isem:",
+ "tpt-aggregategroup-new-description": "Aglam (afrayan):",
+ "tpt-aggregategroup-invalid-group": "Ulac agraw",
+ "tpt-aggregategroup-edit-name": "Isem:",
+ "tpt-aggregategroup-edit-description": "Aglam:",
+ "tpt-aggregategroup-update": "Sekles",
+ "tpt-aggregategroup-update-cancel": "Sefsex",
+ "tpt-invalid-group": "Agraw arameɣtu",
+ "pt-deletepage-subpages": "Kkes akk isebtar isnawanen",
+ "pt-deletepage-list-other": "Isebtar-nniḍen isnawanen",
+ "pm-import-button-label": "Kter",
+ "pm-summary-import": "Tasuqlit tettwakter s useqdec n [[Special:PageMigration|n usgaǧi n usebter]]",
+ "pp-save-message": "Asebter yettwasekles. Tzemreḍ ad tt-[$1 ẓergeḍ]."
+}
diff --git a/Translate/i18n/pagetranslation/kbd-cyrl.json b/Translate/i18n/pagetranslation/kbd-cyrl.json
new file mode 100644
index 00000000..0dce648f
--- /dev/null
+++ b/Translate/i18n/pagetranslation/kbd-cyrl.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Тамэ Балъкъэрхэ"
+ ]
+ },
+ "tpt-diff-old": "Ипэ ит текстыр",
+ "tpt-diff-new": "ТекстыщIэ",
+ "translate-tag-translate-link-desc": "НапэкIуэцIыр зэхъуэкIын",
+ "tpt-languages-legend": "НэгъуэщIыбзэхэр:"
+}
diff --git a/Translate/i18n/pagetranslation/kbp.json b/Translate/i18n/pagetranslation/kbp.json
new file mode 100644
index 00000000..7d202ada
--- /dev/null
+++ b/Translate/i18n/pagetranslation/kbp.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gnangbade"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% kɩɖɛzʋ|kɩɖɛzaa|kɩɖɛzʋʋ|kɩɖɛzɩŋ|kɩɖɛzaɣ|kɩɖɛzasɩ|kɩɖɛzɩyɛ|kɩɖɛza||kɩɖɛzɩtʋ|kɩɖɛzɩm)"
+}
diff --git a/Translate/i18n/pagetranslation/kcg.json b/Translate/i18n/pagetranslation/kcg.json
new file mode 100644
index 00000000..91aefcf1
--- /dev/null
+++ b/Translate/i18n/pagetranslation/kcg.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "Kambai Akau"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 (á̱ bwuak $2%)"
+}
diff --git a/Translate/i18n/pagetranslation/khw.json b/Translate/i18n/pagetranslation/khw.json
new file mode 100644
index 00000000..baafc438
--- /dev/null
+++ b/Translate/i18n/pagetranslation/khw.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Rachitrali"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% ترجمہ ہوئے)"
+}
diff --git a/Translate/i18n/pagetranslation/kiu.json b/Translate/i18n/pagetranslation/kiu.json
new file mode 100644
index 00000000..44678949
--- /dev/null
+++ b/Translate/i18n/pagetranslation/kiu.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mirzali"
+ ]
+ },
+ "tpt-aggregategroup-update-cancel": "Bıtexelne",
+ "pm-cancel-button-label": "Bıtexelne",
+ "pp-cancel-button-label": "Bıtexelne"
+}
diff --git a/Translate/i18n/pagetranslation/kjp.json b/Translate/i18n/pagetranslation/kjp.json
new file mode 100644
index 00000000..a360831b
--- /dev/null
+++ b/Translate/i18n/pagetranslation/kjp.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Rul1902"
+ ]
+ },
+ "tpt-select-prioritylangs-reason": "ဖှ်ေအ်ုၯာင်ႋကျံင်းဏါင်း:",
+ "translate-tag-translate-link-desc": "လိက်မေံၜၠါ်ယိုဝ် ခၠယ့်လာႋဆာ်",
+ "tpt-languages-legend": "အ်ုၰာႋၰံင်ဆ်ုခၠါင်ဘာႋသာ့လ်ုဖး:",
+ "tpt-languages-nonzero": "$1 ($2% ၮှ်ခၠယ့်ၯင်ႋ)",
+ "tpt-tab-translate": "ခၠယ့်လာႋ",
+ "tpt-aggregategroup-new-description": "ဆ်ုဏဲဖၠဟ် (လ်ုဆူ့ဍုဂ်ၜးသီသှ်ေလှ်)",
+ "tpt-aggregategroup-edit-description": "ဆ်ုဏဲဖၠဟ်:",
+ "log-action-filter-pagetranslation-mark": "မ်ုခၠယ့်ၯာင်ႋ မ်ုမာဏါင်း",
+ "pm-import-button-label": "ဆူ့ဍုဂ်သုံ့လင်"
+}
diff --git a/Translate/i18n/pagetranslation/kk-cyrl.json b/Translate/i18n/pagetranslation/kk-cyrl.json
new file mode 100644
index 00000000..0e4b4529
--- /dev/null
+++ b/Translate/i18n/pagetranslation/kk-cyrl.json
@@ -0,0 +1,126 @@
+{
+ "@metadata": {
+ "authors": [
+ "Arystanbek",
+ "U.ayaao.p"
+ ]
+ },
+ "pagetranslation": "Бет аудармасы",
+ "right-pagetranslation": "Аударма үшін беттердің нұсқаларын белгілеу",
+ "action-pagetranslation": "аударуға келетін беттерді басқару",
+ "tps-edit-sourcepage-ve-warning-title": "Ескерту: Қолдау көрсейтілмейтін бет",
+ "tps-edit-sourcepage-ve-warning-button": "OK",
+ "tpt-section": "$1 аударма бірлігі",
+ "tpt-section-new": "Жаңа аударма бірлігі.\nАтауы: $1",
+ "tpt-section-deleted": "$1 аударма бірлігі",
+ "tpt-diff-old": "Алдындағы мәтін",
+ "tpt-diff-new": "Жаңа мәтін",
+ "tpt-submit": "Аударма үшін бұл нұсқаны белгілеу",
+ "tpt-sections-oldnew": "Жаңа және бар аударма бірлігтері",
+ "tpt-sections-deleted": "Жойылған аударма бірліктері",
+ "tpt-sections-template": "Аударма бет үлгісі",
+ "tpt-badtitle": "Берілген бет атауы ($1) жарамды атау емес",
+ "tpt-nosuchpage": "$1 беті жоқ",
+ "tpt-mark-summary": "Аударма үшін бұл нұсқа белгіленді",
+ "tpt-mark-nochanges": "Мұнда соңғы белгіленген нұсқада жәнебұл нұсқа арасында айырмашылық жоқ.",
+ "tpt-edit-failed": "Келесі бет жаңартылмады: $1",
+ "tpt-old-pages-title": "Аудару беті",
+ "tpt-other-pages-title": "Бүлінген беттер",
+ "tpt-old-pages": "{{PLURAL:$1|Бұл беттің|Бұл беттердің}} кейбір нұсқалары аударылсын деп белгіленді.",
+ "tpt-other-pages": "{{PLURAL:$1|Бұл беттің ескі нұсқасы|Бұл беттердің ескі нұсқалары}} аударылсын деп белгіленді, бірақ ең соңғы {{PLURAL:$1|нұсқа|нұсқалар}} аударылсын деп белгіленбейді.",
+ "tpt-select-prioritylangs-reason": "Себебі:",
+ "tpt-sections-prioritylangs": "Басым тілдер",
+ "tpt-rev-mark": "аудару үшін белгілеу",
+ "tpt-rev-unmark": "Аудармадан аластату",
+ "tpt-rev-encourage": "қалпына келтіру",
+ "tpt-rev-mark-tooltip": "Аудару үшін бұл беттің ең соңғы нұсқасын белгілеу",
+ "tpt-rev-unmark-tooltip": "Аударудан бетті аластау",
+ "tpt-rev-encourage-tooltip": "Қалыпты аударуға бұл бетті қалыпына келтіру",
+ "translate-tag-translate-link-desc": "Бұл бетті аудару",
+ "translate-tag-markthis": "Аудару үшін бұл бетті белгілеу",
+ "translate-tag-hasnew": "Бұл бет <span class=\"plainlinks\">[$1 өзгерістен]</span> тұрады және аударуға белгіленбейді.",
+ "tpt-translation-intro": "Бұл бет [[$2]] бетінің <span class=\"plainlinks\">[$1 аударылған нұсқасы]</span> және аударманың $3% аяқталған.",
+ "tpt-languages-legend": "Басқа тілдер:",
+ "tpt-languages-zero": "Мына тілде аударманы бастау",
+ "tpt-languages-nonzero": "$1 ($2% аударылды)",
+ "tpt-tab-translate": "Аудару",
+ "tpt-render-summary": "Қайнар беттің жаңа нұсқасына сәйкестігін жаңарту",
+ "tpt-aggregategroup-add": "Қосу",
+ "tpt-aggregategroup-save": "Сақтау",
+ "tpt-aggregategroup-add-new": "Жаңа агрегат топ қосу",
+ "tpt-aggregategroup-new-name": "Атауы:",
+ "tpt-aggregategroup-new-description": "Сипаттамасы (міндетті емес):",
+ "tpt-aggregategroup-remove-confirm": "Сіз шыныменде мына агрегат топты жоюды қалайсыз ба?",
+ "tpt-aggregategroup-invalid-group": "Топ жоқ",
+ "tpt-aggregategroup-edit-name": "Атауы:",
+ "tpt-aggregategroup-edit-description": "Сипаттамасы:",
+ "tpt-aggregategroup-update": "Сақтау",
+ "tpt-aggregategroup-update-cancel": "Болдырмау",
+ "tpt-invalid-group": "Жарамсыз топ",
+ "pt-parse-open": "Балансталмаған &lt;translate> тегі.\nАударма үлгісі: <pre>$1</pre>",
+ "pt-parse-close": "Балансталмаған &lt;/translate> тегі.\nАударма үлгісі: <pre>$1</pre>",
+ "log-description-pagetranslation": "Бет аудару жүйесіне қатысты әрекететр журналы",
+ "log-name-pagetranslation": "Бет аударма журналы",
+ "logentry-pagetranslation-mark": "$1 $3 бетін аудару үшін {{GENDER:$2|белгіледі}}",
+ "logentry-pagetranslation-unmark": "$1 $3 бетін аударудан {{GENDER:$2|аластады}}",
+ "logentry-pagetranslation-moveok": "Аударылатын $3 бетін $4 деп атауын өзгерту $1 {{GENDER:$2|аяқталды}}",
+ "logentry-pagetranslation-movenok": "$3 бетін $4 бетіне жылжыту барысында {{GENDER:$2|кездесті}}",
+ "logentry-pagetranslation-deletefok": "$3 аударылатын бетті жою $1 {{GENDER:$2|аяқталды}}",
+ "pt-movepage-list-pages": "Жылжытатын беттер тізімі",
+ "pt-movepage-list-translation": "Аударма {{PLURAL:$1|бет|беттер}}",
+ "pt-movepage-legend": "Менің аударуға келетін беттерім",
+ "pt-movepage-current": "Қазіргі атауы:",
+ "pt-movepage-new": "Жаңа атауы:",
+ "pt-movepage-reason": "Себебі:",
+ "pt-movepage-subpages": "Барлық бетшелерді жылжыту",
+ "pt-movepage-action-check": "Атауын өзгертуге болатынын тексеру",
+ "pt-movepage-action-perform": "Жылжытуды істеу",
+ "pt-movepage-action-other": "Нысанасын өзгерту",
+ "pt-movepage-logreason": "«$1» аударылатын бетінің бөлігі.",
+ "pt-deletepage-lang-title": "«$1» аударылатын бетін жойылуда.",
+ "pt-deletepage-tp-title": "«$1» аударылатын бетін жойылуда.",
+ "pt-deletepage-invalid-title": "Көрсетілген бет жарамсыз.",
+ "pt-deletepage-action-check": "Жойылатын беттер тізімі",
+ "pt-deletepage-action-perform": "Жоюды орындау",
+ "pt-deletepage-action-other": "Нысанасын өзгерту",
+ "pt-deletepage-lang-legend": "Аударма бетті жою",
+ "pt-deletepage-tp-legend": "Аударылатын бетті жою",
+ "pt-deletepage-any-legend": "Аударылатын бетті немесе аударма бетті жою",
+ "pt-deletepage-current": "Бет атауы:",
+ "pt-deletepage-reason": "Себебі:",
+ "pt-deletepage-subpages": "Барлық бетшелерін жою",
+ "pt-deletepage-list-pages": "Жойылатын беттер тізімі",
+ "pt-deletepage-list-translation": "Аударма беттер",
+ "pt-deletepage-list-section": "Аударма бірлік беттер",
+ "pt-deletepage-list-other": "Басқа бетшелер",
+ "pt-deletepage-list-count": "Барлығы $1 беттің {{PLURAL:$1|бетін|беттерін}} жою.",
+ "pt-deletepage-full-logreason": "«$1» аударылатын бетінің бөлігі.",
+ "pt-deletepage-lang-logreason": "«$1» аударылатын бетінің бөлігі.",
+ "pagemigration": "Аударма бет миграциясы",
+ "pm-import-button-label": "Импорттау",
+ "pm-savepages-button-label": "Сақтау",
+ "pm-cancel-button-label": "Болдырмау",
+ "pm-page-does-not-exist": "$1 беті жоқ.",
+ "pm-old-translations-missing": "$1 ескі аудармаларды қамтымайды.",
+ "pm-pagename-missing": "Бет атауын енгізіңіз:",
+ "pm-add-icon-hover-text": "Төмендегі бірлігті қосыңыз",
+ "pm-swap-icon-hover-text": "Төмендегі бірлікті ауыстырыңыз",
+ "pm-delete-icon-hover-text": "Бірлікті жою",
+ "pm-pagetitle-invalid": "Жарамды бет атауын енгізіңіз",
+ "pm-langcode-missing": "Тід кодын енгізіңіз.",
+ "pm-summary-import": "[[Special:PageMigration|Бет миграциясы]] арнайы бетін қолданып аударма импортталды",
+ "tpt-translate-title": "Бет атауын аударуға рұқсат ету",
+ "pp-save-summary": "Аудару үшін бет дайындалды",
+ "pagepreparation": "Аудару үшін бет дайындалды",
+ "pp-pagename-placeholder": "Бет атауын енгізу",
+ "pp-prepare-button-label": "Дайындау",
+ "pp-save-button-label": "Сақтау",
+ "pp-cancel-button-label": "Қажет емес",
+ "pp-save-message": "Бет сақталды. Сіз оны [$1 өңдей] аласыз.",
+ "pp-prepare-message": "Бет аударуға дайындалды. Төменнен айырмашылығын көріңіз. Егер бәрі дұрыс болса «{{int:pp-save-button-label}}» батырмасын басыңыз.",
+ "pp-pagename-missing": "Бет атауын енгізіңіз.",
+ "pp-diff-old-header": "Қайнар мәтіні",
+ "pp-diff-new-header": "Дайындалған мәтін",
+ "tpt-unlink-button": "Аудармадан аластату",
+ "tpt-unlink-summary": "Аударудан бетті аластау"
+}
diff --git a/Translate/i18n/pagetranslation/km.json b/Translate/i18n/pagetranslation/km.json
new file mode 100644
index 00000000..689c496f
--- /dev/null
+++ b/Translate/i18n/pagetranslation/km.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Pichnat Thong",
+ "គីមស៊្រុន",
+ "វ័ណថារិទ្ធ"
+ ]
+ },
+ "pagetranslation": "ការ​បក​ប្រែ​ទំព័រ​",
+ "tpt-section": "ឯកតាបកប្រែ $1",
+ "tpt-section-new": "ឯកតាបកប្រែថ្មី។\nឈ្មោះ៖ $1",
+ "tpt-section-deleted": "ឯកតាបកប្រែ $1",
+ "tpt-diff-old": "អត្ថបទ​​ពីមុន​",
+ "tpt-diff-new": "អត្ថបទ​ថ្មី​",
+ "tpt-submit": "សម្គាល់​កំណែ​នេះ​សម្រាប់​ការបកប្រែ​",
+ "tpt-sections-oldnew": "ឯកតាបកប្រែថ្មីនិងចាស់",
+ "tpt-sections-deleted": "ឯកតាបកប្រែដែលត្រូវបានលុប",
+ "tpt-sections-template": "គំរូ​ទំព័រ​បកប្រែ​",
+ "tpt-badtitle": "ឈ្មោះ​ទំព័រ​សម្រាប់ ($1) គឺមិនមែន​ជា​ចំនងជើង​ត្រឹមត្រូវ​",
+ "tpt-mark-summary": "បាន​សម្គាល់​កំណែ​នេះ​សម្រាប់​បកប្រែ​",
+ "tpt-edit-failed": "មិនអាច​បន្ទាន់សម័យ​ទំព័រ​៖ $1",
+ "tpt-tag-oldsyntax": "វាក្យសម្ព័ន្ធចាស់",
+ "tpt-sections-syntaxversion": "កំណែវាក្យសម្ព័ន្ធ",
+ "tpt-syntaxversion-text": "ទំព័រនេះកំពុងប្រើនូវកំណែចាស់នៃវាក្យសម្ព័ន្ធនៃប្រភពទំព័រដែលអាចបកប្រែបាន។ កំណេថ្មីនឹងវេចទុកផ្នែកដែលមិនទាន់បកប្រែនឹងស្លាក HTML ដើម្បីចង្អុលអោយនូវភាសាត្រឹមត្រូវនៃពាក្យសំណេរ។ ឧបករណ៍៖ $1។ អ្នកអាចប្រើវាក្យសម្ព័ន្ធម៉ាកអាប់ $2 ដើម្បីចៀសវាងការវេចបែបណាមួយក្នុងកន្លែងដែលមិនសមគួរ ដូចជាពេលដែលបកប្រែគុណលក្ខណ៍ <code>ប្រធានបទ</code> នៃធាតុមួយ។ វាមិនអាចទៅរួចនឹងត្រឡប់ទៅកំណែវាក្យសម្ព័ន្ធចាស់។",
+ "tpt-syntaxversion-label": "ប្រើកំណែវាក្យសម្ព័ន្ធចុងក្រោយបង្អស់សម្រាប់ទំព័រនេះ",
+ "translate-tag-translate-link-desc": "បកប្រែទំព័រនេះ",
+ "translate-tag-markthis": "សម្គាល់​ទំព័រ​​នេះ​សម្រាប់​ការបកប្រែ​",
+ "tpt-languages-legend": "ជាភាសាដទៃទៀត៖",
+ "tpt-languages-nonzero": "$1 ($2% បកប្រែរួច)",
+ "tpt-tab-translate": "បកប្រែ",
+ "pm-langcode-missing": "សូមវាយបញ្ចូលកូដភាសា។"
+}
diff --git a/Translate/i18n/pagetranslation/kn.json b/Translate/i18n/pagetranslation/kn.json
new file mode 100644
index 00000000..a3833d33
--- /dev/null
+++ b/Translate/i18n/pagetranslation/kn.json
@@ -0,0 +1,35 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nayvik",
+ "Omshivaprakash",
+ "Rakshika",
+ "VASANTH S.N.",
+ "ಮಲ್ನಾಡಾಚ್ ಕೊಂಕ್ಣೊ"
+ ]
+ },
+ "pagetranslation": "ಪುಟ ಅನುವಾದ",
+ "tpt-diff-old": "ಹಿಂದಿನ ಪಠ್ಯ",
+ "tpt-diff-new": "ಹೊಸ ಪಠ್ಯ",
+ "tpt-old-pages-title": "ಭಾಷಾಂತರದ ಪುಟಗಳು",
+ "tpt-select-prioritylangs-reason": "ಕಾರಣ:",
+ "tpt-rev-mark": "ಅನುವಾದಕ್ಕಾಗಿ ಗುರುತಿಸಿ",
+ "tpt-rev-unmark": "ಅನುವಾದದಿಂದ ತೆಗೆದುಹಾಕಿ",
+ "tpt-rev-encourage": "ಪುನಃಸ್ಥಾಪಿಸಿ",
+ "translate-tag-translate-link-desc": "ಈ ಪುಟವನ್ನು ಭಾಷಾಂತರಿಸಿ",
+ "translate-tag-markthis": "ಅನುವಾದಕ್ಕಾಗಿ ಈ ಪುಟವನ್ನು ಗುರುತಿಸಿ",
+ "tpt-languages-legend": "ಇತರ ಭಾಷೆಗಳು:",
+ "tpt-languages-nonzero": "$1 ($2% ಅನುವಾದಿಸಲಾಗಿದೆ)",
+ "tpt-tab-translate": "ಭಾಷಾಂತರಿಸಲು",
+ "tpt-aggregategroup-add": "ಸೇರಿಸಿ",
+ "tpt-aggregategroup-save": "ಉಳಿಸಿ",
+ "tpt-aggregategroup-new-name": "ಹೆಸರು:",
+ "tpt-aggregategroup-update": "ಉಳಿಸಿ",
+ "pt-movepage-current": "ಪ್ರಸಕ್ತ ಹೆಸರು:",
+ "pt-movepage-new": "ಹೊಸ ಹೆಸರು:",
+ "pt-movepage-reason": "ಕಾರಣ:",
+ "pt-deletepage-current": "ಪುಟದ ಹೆಸರು:",
+ "pt-deletepage-reason": "ಕಾರಣ :",
+ "pt-deletepage-list-translation": "ಭಾಷಾಂತರ ಪುಟಗಳು",
+ "pm-savepages-button-label": "ಉಳಿಸಿ"
+}
diff --git a/Translate/i18n/pagetranslation/ko.json b/Translate/i18n/pagetranslation/ko.json
new file mode 100644
index 00000000..523c3052
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ko.json
@@ -0,0 +1,219 @@
+{
+ "@metadata": {
+ "authors": [
+ "Apzp79",
+ "Bluehill",
+ "Freebiekr",
+ "Hwangjy9",
+ "Hym411",
+ "Jerrykim306",
+ "Kwj2772",
+ "MemphisA5",
+ "Priviet",
+ "Revi",
+ "Tyey",
+ "Underbaaar",
+ "Ykhwong",
+ "렌즈",
+ "아라"
+ ]
+ },
+ "pagetranslation": "문서 번역",
+ "nstab-translations": "번역 단위",
+ "right-pagetranslation": "문서의 판을 번역하도록 표시",
+ "action-pagetranslation": "번역 가능한 문서 관리",
+ "tps-edit-sourcepage-text": "번역의 원본 문서를 편집하고 있습니다. 다음 문서를 숙지하십시오.\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text 원본 글귀를 수정하기]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Markup_examples 사용할 마크업 예제]",
+ "tps-edit-sourcepage-ve-warning-limited-text": "일부 번역 가능한 영역은 이 편집기에서 편집할 수 없습니다. 원본 편집기를 사용하여 이 영역을 편집해 주십시오.",
+ "tps-edit-sourcepage-ve-warning-title": "경고: 지원하지 않는 페이지",
+ "tps-edit-sourcepage-ve-warning-button": "확인",
+ "tpt-section": "번역 단위 $1",
+ "tpt-section-new": "새 번역 단위입니다.\n이름: $1",
+ "tpt-section-deleted": "번역 단위 $1",
+ "tpt-diff-old": "이전 텍스트",
+ "tpt-diff-new": "새 텍스트",
+ "tpt-submit": "이 판을 번역하도록 표시",
+ "tpt-sections-oldnew": "신규 및 기존 번역 단위",
+ "tpt-sections-deleted": "삭제된 번역 단위",
+ "tpt-sections-template": "번역 문서 틀",
+ "tpt-action-nofuzzy": "번역을 무효화하지 않습니다",
+ "tpt-badtitle": "주어진 문서 이름($1)은 올바른 제목이 아닙니다",
+ "tpt-nosuchpage": "$1 문서가 존재하지 않습니다",
+ "tpt-oldrevision": "$2 판은 [[:$1]] 문서의 최신 판이 아닙니다.\n최신 판만 번역에서 표시할 수 있습니다.",
+ "tpt-notsuitable": "$1 문서는 번역에 적합하지 않습니다.\n$2 태그가 있고 올바른 문법인지 확인하세요.",
+ "tpt-saveok": "[[:$1]] 문서는 $2 {{PLURAL:$2|번역 단위}}로 번역하도록 표시했습니다.\n문서는 지금 <span class=\"plainlinks\">[$3 번역]</span>할 수 있습니다.",
+ "tpt-offer-notify": "이 문서에 대해 <span class=\"plainlinks\">[$1 번역자 알림]</span>을 받을 수 있습니다.",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|번역 가능한 문서 목록을 봅니다.]]",
+ "tpt-showpage-intro": "아래에 기존, 추가 및 삭제된 번역 단위가 나열되어 있습니다.\n\n이 판을 번역하도록 표시하기 전에, 번역자가 불필요한 작업을 하지 않도록 번역 단위에 대한 바뀜이 최소화되어 있는지 확인하세요.",
+ "tpt-mark-summary": "이 판을 번역하도록 표시",
+ "tpt-edit-failed": "문서를 업데이트를 할 수 없습니다: $1",
+ "tpt-duplicate": "$1 번역 단위 이름은 한 번 이상 사용합니다.",
+ "tpt-unmarked": "[[:$1]] 문서는 더 이상 번역하도록 표시되지 않습니다.",
+ "tpt-list-nopages": "번역하도록 표시할 준비가 된 문서나 번역하도록 표시된 문서가 없습니다.",
+ "tpt-new-pages-title": "번역하도록 제안된 문서",
+ "tpt-old-pages-title": "번역 문서",
+ "tpt-other-pages-title": "잘못된 문서",
+ "tpt-outdated-pages-title": "편집 보류 중인 문서",
+ "tpt-new-pages": "{{PLURAL:$1|이 문서는}} 번역하도록 태그된 문자를 포함하지만,\n번역하도록 표시된 {{PLURAL:$1|이 문서}}의 판이 없습니다.",
+ "tpt-old-pages": "{{PLURAL:$1|이 문서}}의 최신 판은 번역하도록 표시되었습니다.",
+ "tpt-other-pages": "{{PLURAL:$1|이 문서의 오래된 판}}은 번역하도록 표시했습니다,\n하지만 최신 {{PLURAL:$1|판}}은 번역하도록 표시할 수 없었습니다.",
+ "tpt-outdated-pages": "{{PLURAL:$1|이 문서는|이 문서들은}} 번역 대상으로 표시되지 않은 변화를 가지고 있습니다.",
+ "tpt-tag-oldsyntax": "오래된 문법",
+ "tpt-tag-no-transclusion-support": "끼워넣기 지원 없음",
+ "tpt-select-prioritylangs": "우선 언어 코드의 쉼표로 구분한 목록:",
+ "tpt-select-prioritylangs-force": "우선 언어 이외의 언어로 번역 방지",
+ "tpt-select-prioritylangs-reason": "이유:",
+ "tpt-sections-prioritylangs": "우선 언어",
+ "tpt-transclusion": "틀 끼워넣기",
+ "tpt-rev-mark": "번역한 것으로 표시",
+ "tpt-rev-unmark": "번역에서 제거",
+ "tpt-rev-discourage": "번역 중단",
+ "tpt-rev-encourage": "복구",
+ "tpt-rev-mark-tooltip": "이 문서의 최신 판을 번역하도록 표시합니다.",
+ "tpt-rev-unmark-tooltip": "번역에서 이 문서를 제거합니다.",
+ "tpt-rev-discourage-tooltip": "이 문서에 대한 추가적인 번역을 중단합니다.",
+ "tpt-rev-encourage-tooltip": "이 문서를 정상적인 번역으로 복구합니다.",
+ "translate-tag-translate-link-desc": "이 문서 번역하기",
+ "translate-tag-markthis": "이 문서를 번역 대상으로 표시",
+ "translate-tag-markthisagain": "이 문서에는 최근 <span class=\"plainlinks\">[$2 번역 대상으로 표시]</span>한 이후 <span class=\"plainlinks\">[$1 바뀜]</span>이 있습니다.",
+ "translate-tag-hasnew": "이 문서는 번역 대상으로 표시하지 않은 <span class=\"plainlinks\">[$1 바뀜]</span>을 포함합니다.",
+ "tpt-translation-intro": "이 문서는 [[$2]] 문서를 <span class=\"plainlinks\">[$1 번역한 것]</span>이며 번역은 $3% 완료했습니다.",
+ "tpt-translation-intro-fuzzy": "오래된 번역은 이렇게 표시됩니다.",
+ "tpt-languages-legend": "다른 언어:",
+ "tpt-languages-zero": "이 언어에 대한 번역 시작",
+ "tpt-languages-nonzero": "$1 ($2% 번역함)",
+ "tpt-tab-translate": "번역하기",
+ "tpt-target-page": "이 문서를 수동으로 업데이트할 수 없습니다.\n이 문서는 [[$1]]의 번역이며 번역은 [$2 번역 도구]를 사용하여 업데이트할 수 있습니다.",
+ "tpt-unknown-page": "이 이름공간은 번역 콘텐츠를 위해 확보되어 있습니다.\n편집하려는 문서는 번역하도록 지정된 문서와 일치하지 않는 것 같습니다.",
+ "tpt-translation-restricted": "번역 관리자가 이 문서를 이 언어로 번역하지 못하도록 차단했습니다.\n\n이유: $1",
+ "tpt-discouraged-language-force-header": "이 문서는 $1로 번역할 수 없습니다.",
+ "tpt-discouraged-language-force-content": "번역 관리자가 이 글을 $1로만 번역이 가능하도록 결정하였습니다.",
+ "tpt-discouraged-language-header": "$1 언어로의 번역은 우선순위가 아닙니다.",
+ "tpt-discouraged-language-content": "번역 관리자는 $1 언어에 번역 노력을 집중하기로 결정했습니다.",
+ "tpt-discouraged-language-force": "<strong>이 문서는 $2로 번역할 수 없습니다.</strong>\n\n번역 관리자가 이 문서가 $3로만 번역할 수 있도록 결정했습니다.",
+ "tpt-priority-languages": "번역 관리자가 이 그룹에 대해 우선 언어를 $1(으)로 설정했습니다.",
+ "tpt-discouraged-translation-header": "이 문서의 번역이 중단됨",
+ "tpt-render-summary": "원본 문서의 새 판에 맞게 업데이트",
+ "aggregategroups": "집계 그룹",
+ "tpt-aggregategroup-add": "추가",
+ "tpt-aggregategroup-save": "저장",
+ "tpt-aggregategroup-close": "닫기",
+ "tpt-aggregategroup-add-new": "새 집계 그룹 추가",
+ "tpt-aggregategroup-new-name": "이름:",
+ "tpt-aggregategroup-new-description": "설명 (선택):",
+ "tpt-aggregategroup-remove-confirm": "이 집계 그룹을 정말 삭제하겠습니까?",
+ "tpt-aggregategroup-invalid-group": "그룹이 존재하지 않습니다",
+ "tpt-aggregategroup-edit-name": "이름:",
+ "tpt-aggregategroup-edit-description": "설명:",
+ "tpt-aggregategroup-update": "저장",
+ "tpt-aggregategroup-update-cancel": "취소",
+ "tpt-aggregategroup-expand-all-groups": "모든 그룹 펼치기",
+ "tpt-aggregategroup-collapse-all-groups": "모든 그룹 접기",
+ "tpt-aggregategroup-expand-group": "그룹 펼치기",
+ "tpt-aggregategroup-collapse-group": "그룹 접기",
+ "tpt-invalid-group": "잘못된 그룹",
+ "pt-parse-open": "불균형한 &lt;translate> 태그입니다.\n번역 틀: <pre>$1</pre>",
+ "pt-parse-close": "불균형한 &lt;/translate> 태그입니다.\n번역 틀: <pre>$1</pre>",
+ "pt-parse-nested": "중첩한 &lt;translate> 번역 단위는 허용하지 않습니다.\n태그 텍스트: <pre>$1</pre>",
+ "pt-shake-multiple": "한 번역 단위에 여러 번역 단위를 표시했습니다.\n번역 단위는 빈 줄로 구분해야 합니다.\n번역 단위 텍스트: <pre>$1</pre>",
+ "pt-shake-position": "예상하지 않은 위치에 번역 단위를 표시했습니다.\n번역 단위 텍스트: <pre>$1</pre>",
+ "pt-shake-empty": "\"$1\" 표시에 대한 빈 번역 단위입니다.",
+ "log-description-pagetranslation": "문서 번역 시스템에 관련된 작업에 대한 기록",
+ "log-name-pagetranslation": "문서 번역 기록",
+ "logentry-pagetranslation-mark": "$1님이 $3을(를) 번역으로 {{GENDER:$2|표시했습니다}}",
+ "logentry-pagetranslation-unmark": "$1님이 번역 시스템에서 $3을(를) {{GENDER:$2|제거했습니다}}",
+ "logentry-pagetranslation-moveok": "$1님이 $3 번역 가능한 문서를 $4 문서로 이름 바꾸기를 {{GENDER:$2|완료했습니다}}",
+ "logentry-pagetranslation-movenok": "$1님이 $3 문서를 $4 문서로 이동하는 동안 문제가 {{GENDER:$2|발생했습니다}}",
+ "logentry-pagetranslation-deletefok": "$1님이 $3 번역 가능한 문서의 삭제를 {{GENDER:$2|완료했습니다}}",
+ "logentry-pagetranslation-deletefnok": "$1님이 $4 번역 가능한 문서에 속한 $3 문서를 삭제하는 데 {{GENDER:$2|실패했습니다}}",
+ "logentry-pagetranslation-deletelok": "$1님이 $3 번역 문서의 삭제를 {{GENDER:$2|완료했습니다}}",
+ "logentry-pagetranslation-deletelnok": "$1님이 $4 번역 문서에 속한 $3 문서를 삭제하는 데 {{GENDER:$2|실패했습니다}}",
+ "logentry-pagetranslation-encourage": "$1님이 $3의 번역을 {{GENDER:$2|되살렸습니다}}",
+ "logentry-pagetranslation-discourage": "$1님이 $3의 번역을 {{GENDER:$2|중단했습니다}}",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1님이 $3 번역 가능한 문서에서 우선 언어를 {{GENDER:$2|제거했습니다}}",
+ "logentry-pagetranslation-prioritylanguages": "$1님이 $3 번역 가능한 문서에 대한 우선 언어를 $5로 {{GENDER:$2|설정했습니다}}",
+ "logentry-pagetranslation-prioritylanguages-force": "$1님이 $3 번역 가능한 문서에 대한 언어를 $5로 {{GENDER:$2|제한했습니다}}",
+ "logentry-pagetranslation-associate": "$1님이 $3 번역 가능한 문서를 $4 집계 그룹에 {{GENDER:$2|추가했습니다}}",
+ "logentry-pagetranslation-dissociate": "$1님이 $3 번역 가능한 문서를 $4 집계 그룹에서 {{GENDER:$2|제거했습니다}}",
+ "log-action-filter-pagetranslation-mark": "번역한 것으로 표시",
+ "log-action-filter-pagetranslation-unmark": "번역에서 제거",
+ "log-action-filter-pagetranslation-move": "문서 이동",
+ "log-action-filter-pagetranslation-delete": "문서 삭제",
+ "pt-movepage-title": "\"$1\" 번역 가능한 문서 이동",
+ "pt-movepage-blockers": "번역 가능한 문서는 다음 {{PLURAL:$1|오류}} 때문에 새 이름으로 이동할 수 없습니다:",
+ "pt-movepage-block-base-invalid": "대상 번역 가능한 문서 이름은 올바른 제목이 아닙니다.",
+ "pt-movepage-block-tp-invalid": "\"[[:$1]]\"에 대한 대상 번역 문서 제목이 올바르지 않습니다. (너무 깁니까?)",
+ "pt-movepage-block-section-invalid": "번역 단위에 대한 \"[[:$1]]\"의 대상 문서 제목이 올바르지 않습니다. (너무 깁니까?)",
+ "pt-movepage-block-subpage-invalid": "\"[[:$1]]\"에 대한 대상 하위 문서 제목이 올바르지 않습니다. (너무 깁니까?)",
+ "pt-movepage-block-ns-talk-unsupported": "문서([[:$1]])는 토론 문서를 지원하지 않는 이름공간으로 이동되고 있습니다.",
+ "pt-movepage-list-pages": "이동할 문서 목록",
+ "pt-movepage-list-translation": "번역 {{PLURAL:$1|문서}}",
+ "pt-movepage-list-section": "번역 단위 {{PLURAL:$1|문서}}",
+ "pt-movepage-list-translatable-note": "이 문서들은 개별적으로 이동되어야 합니다.",
+ "pt-movepage-list-other": "다른 {{PLURAL:$1|하위 문서}}",
+ "pt-movepage-list-count": "이동할 {{PLURAL:$1|문서}} 총 $1개입니다.",
+ "pt-movepage-list-no-pages": "문서를 찾을 수 없습니다.",
+ "pt-movepage-legend": "번역 가능한 문서 이동",
+ "pt-movepage-current": "현재 이름:",
+ "pt-movepage-new": "새 이름:",
+ "pt-movepage-reason": "이유:",
+ "pt-movepage-subpages": "모든 하위 문서 이동",
+ "pt-movepage-talkpages": "토론 문서 이동",
+ "pt-movepage-talkpage-exists": "(토론 문서 존재)",
+ "pt-movepage-action-check": "이동할 수 있는지 확인",
+ "pt-movepage-action-perform": "이동하기",
+ "pt-movepage-action-other": "대상 바꾸기",
+ "pt-movepage-intro": "이 특수 문서는 번역에 대해 표시한 문서를 이동할 수 있습니다.\n많은 문서가 이동해야 하기 때문에 즉시 이동 작업이 되지 않습니다.\n문서를 이동하는 동안 질문의 문서와 상호 작용하는 것은 불가능합니다.\n실패하면 [[$1|기록]]에 기록되고 직접 복구할 필요가 있습니다.",
+ "pt-movepage-logreason": "\"$1\" 번역 가능한 문서의 부분입니다",
+ "pt-movepage-started": "잠시 후 [[$1|기록]]에서 오류 및 완료 메시지를 확인해 주십시오.",
+ "pt-locked-page": "이 문서는 번역 가능한 문서가 현재 이동하고 있기 때문에 잠겨 있습니다.",
+ "pt-deletepage-lang-title": "\"$1\" 번역 문서를 삭제 중",
+ "pt-deletepage-tp-title": "\"$1\" 번역 가능한 문서를 삭제 중",
+ "pt-deletepage-invalid-title": "지정한 문서가 올바르지 않습니다.",
+ "pt-deletepage-invalid-text": "지정한 문서는 번역 가능한 문서도 번역 문서도 아닙니다.",
+ "pt-deletepage-action-check": "삭제될 문서 목록",
+ "pt-deletepage-action-perform": "삭제하기",
+ "pt-deletepage-action-other": "대상 바꾸기",
+ "pt-deletepage-lang-legend": "번역 문서 삭제",
+ "pt-deletepage-tp-legend": "번역 가능한 문서 삭제",
+ "pt-deletepage-any-legend": "번역 가능한 문서 또는 번역 문서 삭제",
+ "pt-deletepage-current": "문서 이름:",
+ "pt-deletepage-reason": "이유:",
+ "pt-deletepage-subpages": "모든 하위 문서 삭제",
+ "pt-deletepage-list-pages": "삭제할 문서 목록",
+ "pt-deletepage-list-translation": "번역 문서",
+ "pt-deletepage-list-section": "번역 단위 문서",
+ "pt-deletepage-list-other": "다른 하위 문서",
+ "pt-deletepage-list-count": "삭제할 {{PLURAL:$1|문서}} 총 $1개와 {{PLURAL:$2|하위 문서}} 총 $2개 입니다.",
+ "pt-deletepage-list-no-pages": "문서를 찾을 수 없습니다.",
+ "pt-deletepage-full-logreason": "\"$1\" 번역 가능한 문서의 부분입니다",
+ "pt-deletepage-lang-logreason": "\"$1\" 번역 문서의 부분입니다",
+ "pt-deletepage-started": "[[Special:Log/pagetranslation|문서 번역 기록]]에서 오류 및 완료 메시지를 확인해 주십시오.",
+ "pt-deletepage-intro": "이 특수 문서는 전체 번역 가능한 문서 또는 언어의 개별 번역 문서를 삭제할 수 있습니다.\n번역에 따라 모든 문서가 삭제되기 때문에 즉시 삭제 작업이 되지 않습니다.\n실패하면 [[Special:Log/pagetranslation|문서 번역 기록]]에 기록되고 직접 복구해야 합니다.",
+ "pagemigration": "번역 문서 병합",
+ "pm-import-button-label": "가져오기",
+ "pm-savepages-button-label": "저장",
+ "pm-cancel-button-label": "취소",
+ "pm-page-does-not-exist": "$1 문서가 존재하지 않습니다.",
+ "pm-old-translations-missing": "$1 문서는 오래된 번역을 포함하지 않습니다.",
+ "pm-pagename-missing": "문서 이름을 입력하세요",
+ "pm-add-icon-hover-text": "아래에 단위 추가",
+ "pm-swap-icon-hover-text": "아래 단위로 교체",
+ "pm-delete-icon-hover-text": "단위 삭제",
+ "pm-pagetitle-invalid": "올바른 문서 제목을 입력하세요. <page-name>/<language-code> 형식이어야 합니다.",
+ "pm-langcode-missing": "언어 코드가 제목에 없는 것 같습니다. <page-name>/<language-code> 형식으로 문서 제목을 입력해 주십시오.",
+ "pm-pagetitle-not-translatable": "$1 문서는 번역 가능한 문서의 일부가 아닙니다.",
+ "tpt-translate-title": "문서 제목을 번역할 수 있음",
+ "pagepreparation": "문서를 번역할 수 있게 준비",
+ "pagepreparation-summary": "번역 준비를 위한 문서 제목을 지정합니다.",
+ "pp-pagename-placeholder": "문서 이름을 입력하세요",
+ "pp-prepare-button-label": "준비",
+ "pp-save-button-label": "게시",
+ "pp-cancel-button-label": "취소",
+ "pp-save-message": "문서가 게시되었습니다. 그것을 [$1 편집]할 수 있습니다.",
+ "pp-diff-error": "서버로부터 diff를 가져오는 동안 오류가 발생했습니다.",
+ "pp-pagename-missing": "문서 이름을 입력하세요.",
+ "pp-diff-old-header": "원래 텍스트",
+ "tpt-unlink-button": "번역에서 제거",
+ "tpt-unlink-summary": "번역에서 문서 제거",
+ "visualeditor-annotations-translate-description": "이 항목은 번역이 가능하도록 분류되었습니다. [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text changing the source text]에서 편집방침을 확인해 주십시오."
+}
diff --git a/Translate/i18n/pagetranslation/krc.json b/Translate/i18n/pagetranslation/krc.json
new file mode 100644
index 00000000..01627c0a
--- /dev/null
+++ b/Translate/i18n/pagetranslation/krc.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ernác",
+ "Iltever"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% кёчюрюлгенди)"
+}
diff --git a/Translate/i18n/pagetranslation/krl.json b/Translate/i18n/pagetranslation/krl.json
new file mode 100644
index 00000000..f2b85e98
--- /dev/null
+++ b/Translate/i18n/pagetranslation/krl.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Likopiän tyttö",
+ "Mashoi7"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% kiännetty)",
+ "tpt-tab-translate": "Kiännä"
+}
diff --git a/Translate/i18n/pagetranslation/ks-arab.json b/Translate/i18n/pagetranslation/ks-arab.json
new file mode 100644
index 00000000..fc22466a
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ks-arab.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Tajamul9"
+ ]
+ },
+ "nstab-translations": "ترجمہٕ کرنُک اَوزار"
+}
diff --git a/Translate/i18n/pagetranslation/ks-deva.json b/Translate/i18n/pagetranslation/ks-deva.json
new file mode 100644
index 00000000..e3738419
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ks-deva.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Rishabhbhat"
+ ]
+ },
+ "pt-movepage-talkpages": "बहस सफ़ॖ पकनऻविव"
+}
diff --git a/Translate/i18n/pagetranslation/ksh.json b/Translate/i18n/pagetranslation/ksh.json
new file mode 100644
index 00000000..1efad0c4
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ksh.json
@@ -0,0 +1,194 @@
+{
+ "@metadata": {
+ "authors": [
+ "DannyS712",
+ "Purodha"
+ ]
+ },
+ "pagetranslation": "Sigge Övversäze",
+ "right-pagetranslation": "Donn Versione vun Sigge för et Övversäze makeere",
+ "action-pagetranslation": "övversäzbaa Sigge ze verwallde",
+ "tpt-section": "Knubbel $1 för ze Övversäze",
+ "tpt-section-new": "Ene neue Knubbel för ze Övversäze: $1",
+ "tpt-section-deleted": "Knubbel $1 för ze Övversäze",
+ "tpt-diff-old": "Dä vörrijje Täx",
+ "tpt-diff-new": "Dä neue Täx",
+ "tpt-submit": "Donn hee di Version för et Övversäze makeere",
+ "tpt-sections-oldnew": "De Knubbelle för ze Övversäze (Jez neu, un de älldere, zosamme)",
+ "tpt-sections-deleted": "Fottjeschmeße Knubbelle för et Övversäze",
+ "tpt-sections-template": "Övversäzungßsiggschabloon",
+ "tpt-action-nofuzzy": "Donn de Övversäzunge nit als övverhollt makeere",
+ "tpt-badtitle": "Dä Nahme „$1“ es kein jöltejje Övverschreff för en Sigg",
+ "tpt-nosuchpage": "De Sigg „$1“ jidd_et nit.",
+ "tpt-oldrevision": "„$2“ es nit de neuste Version fun dä Sigg „[[:$1]]“, ävver bloß de neuste kam_mer för et Övversäze makeere.",
+ "tpt-notsuitable": "Di Sigg „$1“ paß nit för et Övversäze. Maach <code><nowiki><translate></nowiki></code>-Makeerunge erin, un looer dat de Süntax shtemmp.",
+ "tpt-saveok": "De Sigg „$1“ es för ze Övversäze makeet. Doh dren {{PLURAL:$2|es eine Knubbel|sinn_er $2 Knubbelle|es ävver keine Knubbel}} för ze Övversäze. Di Sigg kam_mer <span class=\"plainlinks\">[$3 jäz övversäze]</span>.",
+ "tpt-offer-notify": "Do kanns de Översäzere <span class=\"plainlinks\">[$1 övver heh di Sigg bescheidsaare]</span>.",
+ "tpt-showpage-intro": "Hee dronger sen Övversäzongsaffschnedde opjeleß, di eruß jenumme woode, di neu sin, un di noch doh sin. Ih dat De hee di Version för ze Övversäze makeere deihß, loor drop, dat esu winnisch wi müjjelesch Änderonge aan Övversäzongsaffschnedde doh sin, öm dä Övversäzere et Levve leisch ze maache.",
+ "tpt-mark-summary": "Han di Version för ze Övversäze makeet",
+ "tpt-mark-nochanges": "Et jitt kein Ongerscheide för nohzelohre. Wam_mer heh di Sigg för et Övversäze freijitt, deihjt dat di Sigg nit änndere un och keins vun de translation units, di ald doh sin.",
+ "tpt-edit-failed": "Kunnt de Sigg „$1“ nit ändere",
+ "tpt-duplicate": "Dä Nahme „$1“ för ene Knubbel kütt mih wi eijmohl vör.",
+ "tpt-unmarked": "De Sigg „$1“ es nit ieh för ze övversäze makeet.",
+ "tpt-list-nopages": "Et sinn_er kein Sigge för zem Övversäze makeet, un et sin och kein doh, wo esu en Makeerunge eren künnte.",
+ "tpt-new-pages-title": "Sigge vörjeschonn för et Övversäze",
+ "tpt-old-pages-title": "Sigge zom Övversäze",
+ "tpt-other-pages-title": "Kapodde Sigge",
+ "tpt-new-pages": "{{PLURAL:$1|Di Sigg hät|Di Sigge han|Kein Sigg hät}} ene <code lang=\"en\">translation</code>-Befähl en sesch, ävve kei Version dofun es för ze Övversäze makeet.",
+ "tpt-old-pages": "En Version vun hee dä {{PLURAL:$1|Sigg|Sigge|-}} es för zem Övversäze makeet.",
+ "tpt-other-pages": "{{PLURAL:$1|En ällder Version vun heh dä Sigg es|$1 ällder Versione vun heh dä Sigg sin}} för et Övversäze frei jejovve, ävver de neuste Version löht sesh nit frei jävve.",
+ "tpt-select-prioritylangs": "De Leß met de Köözelle för de vörjetrocke Schprohche, met Kommas dozwesche:",
+ "tpt-select-prioritylangs-force": "Bloß noh de vörjetrocke Schprohche Övversäzze",
+ "tpt-select-prioritylangs-reason": "Jrond:",
+ "tpt-sections-prioritylangs": "De vörjetrocke Schprohche",
+ "tpt-rev-mark": "zom Övversäze freijävve",
+ "tpt-rev-unmark": "Donn heh di Sigg vum Övversäze ußschleeße",
+ "tpt-rev-discourage": "vum Övversäze ußnämme",
+ "tpt-rev-encourage": "wider zerök holle",
+ "tpt-rev-mark-tooltip": "Donn de neuste Version vun dä Sigg för et Övversäzze freijävve",
+ "tpt-rev-unmark-tooltip": "Donn di Sigg vum Övversäzze ußschleeße.",
+ "tpt-rev-discourage-tooltip": "Di Sigg sullt nit mih wigger övversaz wääde. Donn dat faßhallde.",
+ "tpt-rev-encourage-tooltip": "Donn di Sigg wider wi jewöhmliesch för et Övversäze frei jävve.",
+ "translate-tag-translate-link-desc": "Don di Sigg hee övversäze",
+ "translate-tag-markthis": "Donn heh di Sigg för et Övversäze makeere",
+ "translate-tag-markthisagain": "Hee di Sigg es <span class=\"plainlinks\">[$1 jeändert woode]</span> zick se et läz <span class=\"plainlinks\">[$2 för ze Övversäze]</span> makeet woode es.",
+ "translate-tag-hasnew": "Hee di Sigg <span class=\"plainlinks\">[$1 es jeändert woode]</span>, es ävver nit för ze Övversäze makeet woode.",
+ "tpt-translation-intro": "Hee di Sigg es en <span class=\"plainlinks\">[$1 övversaz Version]</span> vun dä Sigg „[[$2]]“ un es zoh $3% jedonn.",
+ "tpt-translation-intro-fuzzy": "Övverhollte Övversäzunge wäde su makeet, wi hee dä Täx.",
+ "tpt-languages-legend": "Ander Schprohche:",
+ "tpt-languages-separator": "&#160;•&#32;",
+ "tpt-languages-zero": "Donn ens loßlääje mem Övversäze en heh di Schprohch",
+ "tpt-languages-nonzero": "$1 ($2% övversaz)",
+ "tpt-tab-translate": "Övversäze",
+ "tpt-target-page": "Hee di Sigg kam_mer nit vun Hand änndere. Dat heh es en Översäzongß_Sigg vun dä Sigg [[$1]]. De Övversäzong kam_mer övver däm Wiki sing [$2 Övversäzongß_Wärkzüsch] op der neußte Schtand bränge.",
+ "tpt-unknown-page": "Dat Appachtemang hee es för Sigge vum Enhallt vum Wiki ze Övversäze jedaach. Di Sigg, di de jraad ze ändere versöhks, schingk ävver nit met ööhnds en Sigg ze donn ze han, di för zem Övversäze makeet es.",
+ "tpt-translation-restricted": "Et Övversäzze en di Schprohch hät ene Verwallder vum Övversäzze för heh di Sigg verbodde.\n\nJrond: $1",
+ "tpt-discouraged-language-force-header": "Heh di Sigg kam_mer nit op $1 övversäze.",
+ "tpt-discouraged-language-force-content": "Ene translation administrator häd äntschihde, dat heh di Sigg blohß op $1 övversaz wähde kann.",
+ "tpt-discouraged-language-header": "Heh di Sigg op $1 ze övversäze es nit weschtesch.",
+ "tpt-discouraged-language-content": "Ene translation administrator häd äntschihde, de Övversäzong op $1 ze konzäntrehre.",
+ "tpt-discouraged-language-force": "<strong>Heh di Sigg kam_mer nit op $2 övversäze.</strong>\n\nEne Verwallder vum Övversäzze hät faßjelaat, dat di Sigg bloß op $3 övversaz wääde sull.",
+ "tpt-priority-languages": "Ene Verwallder vum Övversäzze hät de Houpschprooche för heh di Jropp op $1 jesaz.",
+ "tpt-render-summary": "Ändere, öm op de neue Version fun de Ojinaal_Sigg ze kumme",
+ "aggregategroups": "Sammeljroppe",
+ "tpt-aggregategroup-add": "Dobei donn",
+ "tpt-aggregategroup-save": "Faßhalde",
+ "tpt-aggregategroup-add-new": "Donn en neu Sammeljropp derbei",
+ "tpt-aggregategroup-new-name": "Dä Nahme vun dä Jropp:",
+ "tpt-aggregategroup-new-description": "Wat en dä Sammeljrobb es (kann läddesch blieve):",
+ "tpt-aggregategroup-remove-confirm": "Wells De di Sammeljropp verhaftesch fott schmiiße?",
+ "tpt-aggregategroup-invalid-group": "Di Jropp jidd_et nit",
+ "tpt-aggregategroup-edit-name": "Nahme:",
+ "tpt-aggregategroup-edit-description": "Beschrevve als:",
+ "tpt-aggregategroup-update": "Faßhalde",
+ "tpt-aggregategroup-update-cancel": "Ophüre!",
+ "tpt-invalid-group": "Onjöltejje Jropp",
+ "pt-parse-open": "En &lt;translate&gt; es ohne Jääjeshtöck.\nDe Siggeschabloon för ze övversäze: <pre>$1</pre>",
+ "pt-parse-close": "En &lt;/translate&gt; es ohne Jääjeshtöck.\nDe Siggeschabloon för ze övversäze: <pre>$1</pre>",
+ "pt-parse-nested": "En einem &lt;translate> Övversäzongsaffschned kann nit noch eine su ene Affschned dren schteische.\nDä Täx vun dä Makkehrong es: <pre>$1</pre>",
+ "pt-shake-multiple": "Mih wi eine Makkehrong för dersellve Övversäzongsaffschned es nit müjjelesch.\nDä Täx vun däm Övversäzongsaffschned es: <pre>$1</pre>",
+ "pt-shake-position": "Makeerunge för Övversäzongsaffschnedde sin aan dä Pusizjuhn nit müjjelesh.\nDä Täx vun däm Affschned es: <pre>$1</pre>",
+ "pt-shake-empty": "Em Övversäzongsaffschned met dä Makeerong „$1“ es nix dren.",
+ "log-description-pagetranslation": "Logbooch för di Saache, di mem Sigge Övversäze ze donn han",
+ "log-name-pagetranslation": "Logbooch vum Sigge Övversäze",
+ "logentry-pagetranslation-mark": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät di Sigg „$3“ zum Övversäze freijejovve.",
+ "logentry-pagetranslation-unmark": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät di Sigg „$3“ vum Övversäze ußjenumme.",
+ "logentry-pagetranslation-moveok": "Et Ömbenänne vun dä övversäzbaare Sigg „$3“ op „$4“ es fähdesch, wat {{GENDER:$2|vum|vum|vumm Metmaacher|vun dä|vum}} $1 aanjeschtüßße wood.",
+ "logentry-pagetranslation-movenok": "Et Ömbenänne vun dä övversäzbaare Sigg „$3“ op „$4“ es donäve jejange, {{GENDER:$2|wat dä|wat dat|wat dä Metmaacher|wat de|wadd et}} $1 aanjeschtüßße hatt.",
+ "logentry-pagetranslation-deletefok": "Et Fottschmiiße vun dä övversäzbaare Sigg „$3“ es fähdesch, wat {{GENDER:$2|vum|vum|vumm Metmaacher|vun dä|vum}} $1 aanjeschtüßße wood.",
+ "logentry-pagetranslation-deletefnok": "Di Sigg „$3“ — ene Deil vun dä övversäzbaare Sigg „$4“ — fottzeschmiiße, es donäve jejange, {{GENDER:$2|wat dä|wat dat|wat dä Metmaacher|wat de|wadd et}} $1 aanjeschtüßße hatt.",
+ "logentry-pagetranslation-deletelok": "Et Fottschmiiße vun dä Övversäzongs_Sigg „$3“ es fähdesch, wat {{GENDER:$2|vum|vum|vumm Metmaacher|vun dä|vum}} $1 aanjeschtüßße wood.",
+ "logentry-pagetranslation-deletelnok": "Di Sigg „$3“ — ene Deil vun dä Övversäzongs_Sigg „$4“ — fottzeschmiiße, es donäve jejange, {{GENDER:$2|wat dä|wat dat|wat dä Metmaacher|wat de|wadd et}} $1 aanjeschtüßße hatt.",
+ "logentry-pagetranslation-encourage": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 schleit di Sigg „$3“ zom Övversäze för.",
+ "logentry-pagetranslation-discourage": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 schleit vör, di Sigg „$3“ nit ze övversäze.",
+ "logentry-pagetranslation-prioritylanguages-unset": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät de vörjetrocke Schprohche för et Övveräze för di Sigg „$3“ fottjeschmeße.",
+ "logentry-pagetranslation-prioritylanguages": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät de vörjetrock Schprohche för et Övveräzonge för di Sigg „$3“ op $5 jesaz.",
+ "logentry-pagetranslation-prioritylanguages-force": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät de Övveräzonge för di Sigg „$3“ beschrängk op $5.",
+ "logentry-pagetranslation-associate": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät di övveräzbaa Sigg „$3“ en di Sammeljropp „$4“ jedonn.",
+ "logentry-pagetranslation-dissociate": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät di övveräzbaa Sigg „$3“ uß dä Sammeljropp „$4“ erußjehollt.",
+ "log-action-filter-pagetranslation": "Axjuhn",
+ "log-action-filter-pagetranslation-mark": "Zom Övversäze freijejovve",
+ "log-action-filter-pagetranslation-unmark": "Vum Övversäzze ußjeschloße",
+ "log-action-filter-pagetranslation-move": "Sigge ömjenannt",
+ "log-action-filter-pagetranslation-delete": "Sigge fottjeschmeße",
+ "log-action-filter-pagetranslation-encourage": "Övversäze jewönsch",
+ "log-action-filter-pagetranslation-discourage": "Övversäze es nit von Belang",
+ "pt-movepage-title": "De övversäzbaa Sigg „$1“ ömnänne",
+ "pt-movepage-blockers": "Di övversäbaa Sigg künne mer nit ömbenänne. {{PLURAL:$1|Der Jrond es:|De Jrönd sin:|Mer weße ävver kein Jrönd doför.}}",
+ "pt-movepage-block-base-invalid": "Di aanjejovve Zielsigg hät keine jölteje Siggetittel.",
+ "pt-movepage-block-tp-invalid": "Dä aanjejovve övversäzbaa Zihl_Sigg ier Övverschreff för „[[:$1]]“ wöhr nit jöltejsch, Velleisch zoh lang?",
+ "pt-movepage-block-section-invalid": "De Övverschreff för di Sigg för dä Övversäzongsafschned för „[[:$1]]“ wöhr nit jöltejsch, Velleisch zoh lang?",
+ "pt-movepage-block-subpage-invalid": "De Övverschreff för de Onger_Sigg för „[[:$1]]“ wöhr nit jöltejsch, Velleisch zoh lang?",
+ "pt-movepage-list-pages": "De Leß met dä Sigge zom Ömbenänne",
+ "pt-movepage-list-translation": "Övversaz {{PLURAL:$1|Sigg|Sigge}}",
+ "pt-movepage-list-section": "Övversäzongsaffschnets_{{PLURAL:$1|Sigg|Sigge}}",
+ "pt-movepage-list-other": "Ander Onger_{{PLURAL:$1|Sigg|Sigge}}",
+ "pt-movepage-list-count": "Ensjesamp ham_mer {{PLURAL:$1|ein Sigg|$1 Sigge|kein Sigg}} för ömzenänne.",
+ "pt-movepage-legend": "Övversäzbaa Sigg ömnänne",
+ "pt-movepage-current": "Der Nahme em Momang:",
+ "pt-movepage-new": "Der neue Nahme:",
+ "pt-movepage-reason": "För et Logbooch, der Aanlaß:",
+ "pt-movepage-subpages": "De Ongersigge all met ömnänne",
+ "pt-movepage-action-check": "Fengk erus, ov dat Ömnänne müjjlesch es",
+ "pt-movepage-action-perform": "Ömnänne!",
+ "pt-movepage-action-other": "Ander Zieltittel",
+ "pt-movepage-intro": "Heh di {{int:specialpage}} löht Desch Sigge ömdäufe, di för et Övversäze frei jejovve sin.\nDat jeiht nit en einem Rötsch, weil ene Pöngel Sigge un Deile ömjenannt wähde möße.\nEm MediaWiki sing <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\"> [https://www.mediawiki.org/wiki/Manual:Job_queue job queue]</i> weed doför jebruch.\nSu lang, wi de Sigge ömjenannt wääde, kam_mer met dänne nix söns maache.\nFähler kumme en et [[Special:Log/pagetranslation|{{int:pt-log-name}}]] un möße vun Hand opjerühmp wähde.",
+ "pt-movepage-logreason": "Deil vun dä övversäzbaa Sigg „$1“",
+ "pt-movepage-started": "Di Sigg weed jäz ömjenannt.\nDon op jede Fall em [[Special:Log/pagetranslation|{{int:pt-log-name}}]] noh Fähler loore, un dat dat öhndlesch aan et Eng jekumme es.",
+ "pt-locked-page": "Dat Stöck heh is jesperrt, däm sing övversäbaa Sigg weed nämmisch jrad ömbenannt.",
+ "pt-deletepage-lang-title": "De Övversäzongssigg „$1“ fottschmieße",
+ "pt-deletepage-tp-title": "De övversäzbaa Sigg „$1“ fottschmieße.",
+ "pt-deletepage-invalid-title": "Di aanjejovve Sigg es nit jöltesch.",
+ "pt-deletepage-invalid-text": "Di aanjejovve Sigg es kein övversäbaa Sigg un och kein Övversäzong vun einer.",
+ "pt-deletepage-action-check": "Don de Sigge opleßte, di fott sulle",
+ "pt-deletepage-action-perform": "Maach nu fott!",
+ "pt-deletepage-action-other": "Nemm ene andere Zieltittel",
+ "pt-deletepage-lang-legend": "Övversäzongssigg fottschmieße",
+ "pt-deletepage-tp-legend": "En övversäzbaa Sigg fottschmieße",
+ "pt-deletepage-any-legend": "En övversäzbaa Sigg udder övversaz Sigg fottschmieße",
+ "pt-deletepage-current": "Dä Sigg ier Övverschreff:",
+ "pt-deletepage-reason": "Der Jrond:",
+ "pt-deletepage-subpages": "Schmieß all de Ongersigge fott",
+ "pt-deletepage-list-pages": "De Leß met dä Sigge zom Fottschmieße",
+ "pt-deletepage-list-translation": "Övversaz Sigge",
+ "pt-deletepage-list-section": "Övversäzongsaffschnets_Sigge",
+ "pt-deletepage-list-other": "Ander Ongersigge",
+ "pt-deletepage-list-count": "Ensjesamp ham_mer {{PLURAL:$1|ein Sigg|$1 Sigge|kein Sigg}} för fottzeschmieße.",
+ "pt-deletepage-full-logreason": "Deil vun dä övversäzbaa Sigg „$1“",
+ "pt-deletepage-lang-logreason": "Deil vun dä övversaz Sigg „$1“",
+ "pt-deletepage-started": "Loor em [[Special:Log/pagetranslation|Logbooch vun de Övversäzonge]] noh Fähler un Nohreeschte.",
+ "pt-deletepage-intro": "Heh di {{int:specialpage}} määd et müjjelesch. kumplätte övversäbaa Sigge udder Övversäzonge en en beshtemmpte Schprohch fottzeschmiiße.\nDat Fottschmiiße dohrt e Wihlsche, weil alle dervun affhängeje Sigge derbei och fott jeschmeße wääde möße.\nFähler kumme en et [[Special:Log/pagetranslation|Logbooch vum Övversäze]] un möße vun Hand jrahdjeröck wähde.",
+ "pagemigration": "Sigge en övversäbaa Sigge wandelle",
+ "pagemigration-summary": "Jivv en Övversäzongssigg aan un holl alle Övversäzonge zeröck, di jemaat wohre, ih dat et Süßtem för et Övversäze för di Sigg aanjeschalldt woode es.",
+ "pm-import-button-label": "Empottehre!",
+ "pm-savepages-button-label": "Faßhalde",
+ "pm-cancel-button-label": "Ophühre!",
+ "pm-page-does-not-exist": "$1 jidd_et nit",
+ "pm-old-translations-missing": "En dä Sigg „$1“ sin kein ahle Övversäzonge.",
+ "pm-extra-units-warning": "Et sin veleijsch mih Eijnheijte övveresch. Bes esu jood un donn de Einheite ob beide Sigge ejahl maache.",
+ "pm-pagename-missing": "Bes esu johd un donn dä Nahme för di Sigg enjävve.",
+ "pm-add-icon-hover-text": "Jivv onge en Einheid en",
+ "pm-swap-icon-hover-text": "Met dämm dronger tuusche",
+ "pm-delete-icon-hover-text": "Schmiiß de Eijnheit fott",
+ "pm-pagetitle-placeholder": "Jivv de Övverschreff fun dä Sigg aan",
+ "pm-pagetitle-invalid": "Bes esu johd un jivv en jöltejje Övverschreff för en Sigg aan.",
+ "pm-langcode-missing": "Bes esu johd un donn et Köözel för di Schprohch enjävve.",
+ "pm-summary-import": "Heh di Övversäzong wohd övver de {{int:specialpage}} „[[Special:PageMigration|{{int:Pagemigration}}]]“ automattesch udder hallefautomattesch aanjelaht.",
+ "tpt-translate-title": "Lohß Övversäzonge för dä Sigg iehr Övverschreff zoh",
+ "pp-save-summary": "Donn di Sigg för et Övversäze vörbereide",
+ "pagepreparation": "Di Sigg för et Övversäze vörbereide",
+ "pp-pagename-placeholder": "Jivv dä Nahme för di Sigg en",
+ "pp-prepare-button-label": "Vörbereide",
+ "pp-save-button-label": "Faßhalde!",
+ "pp-cancel-button-label": "Ophüre!",
+ "pp-save-message": "Di Sigg es faßjehallde. Jäz kam_mer se [$1 ändere].",
+ "pp-prepare-message": "Di Sigg es för et Övveersäze vörbereidt.\nSüsch Der de Ongerscheide aan.\nJangk op „{{int:pp-save-button-label}}“, wann alles kloh es!",
+ "pp-already-prepared-message": "es sühd esu uß, wi wann di Sigg alld för et Övversäze vöbereidt jewääse wöhr.\nmer han kein Ongerscheide jähjeövver der läzde Väsjohn.",
+ "pp-pagename-missing": "Bes esu johd un donn dä Sigg ihre Nahme enjävve.",
+ "pp-diff-old-header": "Quälltäx",
+ "pp-diff-new-header": "Vörbereidt Täx",
+ "tpt-unlink-confirm": "Wells De heh di Sigg verhaftesch vum Övversäze ußschlehße?\nDe Ußwahl vun de Schprohche un de Nahme vun övversaz Sigge wähde et dernoh nit mih donn, un de Övversäzongssigge wähde nommal veränderbaa wääde.",
+ "tpt-unlink-button": "Schmiiß fott",
+ "tpt-unlink-summary": "Di Sigg wood vum Övversäzze ußjeschloße.",
+ "tpt-generic-button": "Beschtähtejje"
+}
diff --git a/Translate/i18n/pagetranslation/ksw.json b/Translate/i18n/pagetranslation/ksw.json
new file mode 100644
index 00000000..5508e393
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ksw.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "SawJaemin"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% ကျိာ်ထံဝံၤလံ)"
+}
diff --git a/Translate/i18n/pagetranslation/ku-latn.json b/Translate/i18n/pagetranslation/ku-latn.json
new file mode 100644
index 00000000..283fa87d
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ku-latn.json
@@ -0,0 +1,59 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bikarhêner",
+ "Cûndûllah el-Kurdî",
+ "George Animal",
+ "Gomada"
+ ]
+ },
+ "pagetranslation": "Wergera rûpelê",
+ "right-pagetranslation": "Versiyonên rûpelên ji bo wergerê nîşan bike",
+ "action-pagetranslation": "rûpelên wergerbar bi rê ve bibe",
+ "tpt-diff-old": "Nivîsa pêşî",
+ "tpt-diff-new": "Nivîsa nû",
+ "tpt-submit": "Vê versiyonê ji bo wergerê îşaret bike",
+ "tpt-nosuchpage": "Rûpela $1 tune.",
+ "tpt-select-prioritylangs-reason": "Sedem:",
+ "tpt-rev-unmark": "ji nav wergeran derxe",
+ "translate-tag-translate-link-desc": "Vê rûpelê werrgerîne",
+ "translate-tag-markthis": "Vê rûpelê ji bo wergerê îşaret bike",
+ "tpt-languages-legend": "Zimanên din:",
+ "tpt-languages-nonzero": "$1 ($2% hate wergerandin)",
+ "tpt-tab-translate": "Wergerîne",
+ "tpt-discouraged-language-force-header": "Ev rûpel ji bo $1 nayê wergerandin",
+ "tpt-aggregategroup-add": "Lê zêde bike",
+ "tpt-aggregategroup-save": "Tomar bike",
+ "tpt-aggregategroup-new-name": "Nav:",
+ "tpt-aggregategroup-new-description": "Pênas (heke bixwazî)",
+ "tpt-aggregategroup-invalid-group": "Kom tune ye",
+ "tpt-aggregategroup-edit-name": "Nav:",
+ "tpt-aggregategroup-edit-description": "Danasîn:",
+ "tpt-aggregategroup-update": "Tomar bike",
+ "tpt-aggregategroup-update-cancel": "Betal bike",
+ "tpt-invalid-group": "Koma nederbasdar",
+ "log-name-pagetranslation": "Têketina wergerandina rûpelan",
+ "log-action-filter-pagetranslation-delete": "Jêbirinên rûpelan",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Rûpel|Rûpelên}} wergerê",
+ "pt-movepage-list-other": "{{PLURAL:$1|Binrûpela|Binrûpelên}} din",
+ "pt-movepage-current": "Navê niha:",
+ "pt-movepage-new": "Navê nû:",
+ "pt-movepage-reason": "Sedem:",
+ "pt-movepage-subpages": "Hemû binrûpelan bigerîne",
+ "pt-deletepage-action-perform": "Jê bibe",
+ "pt-deletepage-lang-legend": "Rûpela wergerê jê bibe",
+ "pt-deletepage-tp-legend": "Rûpela wergerê jê bibe",
+ "pt-deletepage-current": "Navê rûpelê:",
+ "pt-deletepage-reason": "Sedem:",
+ "pt-deletepage-subpages": "Hemû binrûpelan jê bibe",
+ "pt-deletepage-list-translation": "Rûpelên wergerê",
+ "pt-deletepage-list-other": "Binrûpelên din",
+ "pm-savepages-button-label": "Tomar bike",
+ "pm-cancel-button-label": "Betal bike",
+ "pm-page-does-not-exist": "$1 tune ye.",
+ "pm-old-translations-missing": "$1 wergerên kevn nahewîne.",
+ "pm-pagetitle-placeholder": "Sernavê rûpelê binivîse",
+ "pm-pagetitle-missing": "Ji kerema xwe sernavê rûpelê binivîse",
+ "pp-save-button-label": "Biweşîne",
+ "pp-cancel-button-label": "Betal bike"
+}
diff --git a/Translate/i18n/pagetranslation/kum.json b/Translate/i18n/pagetranslation/kum.json
new file mode 100644
index 00000000..30b39284
--- /dev/null
+++ b/Translate/i18n/pagetranslation/kum.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "ArslanX"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% гёчюрюлген)"
+}
diff --git a/Translate/i18n/pagetranslation/kw.json b/Translate/i18n/pagetranslation/kw.json
new file mode 100644
index 00000000..8460b4b7
--- /dev/null
+++ b/Translate/i18n/pagetranslation/kw.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nrowe"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% treylyes)"
+}
diff --git a/Translate/i18n/pagetranslation/ky.json b/Translate/i18n/pagetranslation/ky.json
new file mode 100644
index 00000000..35f34d55
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ky.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "Викиней"
+ ]
+ },
+ "pagetranslation": "Которуу барагы",
+ "tpt-diff-new": "Жаңы текст",
+ "tpt-select-prioritylangs-reason": "Себеп:",
+ "tpt-sections-prioritylangs": "Артыкчылыктуу тилдер",
+ "translate-tag-translate-link-desc": "Бул баракты которуу",
+ "translate-tag-markthis": "Бул баракты которуу үчүн белгилөө",
+ "tpt-languages-legend": "Башка тилдер:",
+ "tpt-languages-zero": "Ушул тилге которууну баштоо",
+ "tpt-aggregategroup-save": "Сактоо",
+ "tpt-aggregategroup-new-name": "Аталышы:",
+ "tpt-aggregategroup-new-description": "Баяндамасы (милдеттүү эмес):",
+ "pt-movepage-current": "Азыркы аты:",
+ "pt-movepage-new": "Жаңы аты:",
+ "pt-movepage-reason": "Себеби:",
+ "pt-deletepage-current": "Барактын аты:",
+ "pt-deletepage-reason": "Себеп:"
+}
diff --git a/Translate/i18n/pagetranslation/lad.json b/Translate/i18n/pagetranslation/lad.json
new file mode 100644
index 00000000..47f44b3b
--- /dev/null
+++ b/Translate/i18n/pagetranslation/lad.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "WikiiiTranslator"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 (tradusido al $2%)"
+}
diff --git a/Translate/i18n/pagetranslation/lag.json b/Translate/i18n/pagetranslation/lag.json
new file mode 100644
index 00000000..4accf629
--- /dev/null
+++ b/Translate/i18n/pagetranslation/lag.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Baba Tabita"
+ ]
+ },
+ "tpt-aggregategroup-add": "Ongerya",
+ "tpt-aggregategroup-new-name": "Irina:",
+ "tpt-aggregategroup-edit-name": "Irina:"
+}
diff --git a/Translate/i18n/pagetranslation/lb.json b/Translate/i18n/pagetranslation/lb.json
new file mode 100644
index 00000000..037d20e6
--- /dev/null
+++ b/Translate/i18n/pagetranslation/lb.json
@@ -0,0 +1,196 @@
+{
+ "@metadata": {
+ "authors": [
+ "Les Meloures",
+ "Purodha",
+ "Robby",
+ "Soued031"
+ ]
+ },
+ "pagetranslation": "Iwwersetzung vun der Säit",
+ "right-pagetranslation": "Versioune vu Säite fir Iwwersetzung markéieren",
+ "action-pagetranslation": "Iwwersetzbar Säit geréieren",
+ "tps-edit-sourcepage-ve-warning-title": "Opgepasst: Net ënnerstëtzte Säit",
+ "tps-edit-sourcepage-ve-warning-button": "OK",
+ "tpt-section": "Iwwersetzungseenheet $1",
+ "tpt-section-new": "Numm: $1",
+ "tpt-section-deleted": "Iwwersetzungseenheet $1",
+ "tpt-diff-old": "Viregen Text",
+ "tpt-diff-new": "Neien Text",
+ "tpt-submit": "Dës Versioun fir d'Iwwersetze markéieren",
+ "tpt-sections-oldnew": "Nei an Iwwersetzungseeenheeten déi et scho gëtt",
+ "tpt-sections-deleted": "Geläscht Iwwersetzungseenheeten",
+ "tpt-sections-template": "Iwwersetzung Säiteschabloun",
+ "tpt-action-nofuzzy": "Invalidéiert keng Iwwersetzungen",
+ "tpt-badtitle": "De Säitennumm deen ugi gouf ($1) ass kee valabelen Titel",
+ "tpt-nosuchpage": "D'Säit $1 gëtt et net",
+ "tpt-oldrevision": "$2 ass net déi lescht Versioun vun der Säit [[:$1]].\nNëmmen déi lescht Versioune kënne fir d'Iwwersetzung markéiert ginn.",
+ "tpt-notsuitable": "D'Säit $1 ass net geeegent fir iwwersat ze ginn.\nVergewëssert Iech ob se <nowiki><translate></nowiki>-Taggen an eng valabel Syntax huet.",
+ "tpt-saveok": "D'Säit [[:$1]] gouf fir d'Iwwersetzung mat $2 {{PLURAL:$2|Iwwersetzungseenheet|Iwwersetzungseenheete}} markéiert.\nD'Säit kann elo <span class=\"plainlinks\">[$3 iwwersat]</span> ginn.",
+ "tpt-offer-notify": "Dir kënnt iwwer dës Säit <span class=\"plainlinks\">[$1 Iwwersetzer informéieren]</span>.",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|Lëscht vun den iwwersetzbare Säite weisen.]]",
+ "tpt-showpage-intro": "Ënnendrënner stinn déi nei, aktuell a geläscht Abschnitter.\nIer Dir dës Versioun fir d'iwwersetze markéiert, kuckt wgl. no datt d'Ännerunge vun den Abschnitter déi iwwersat solle ginn op e Minimum reduzéiert gi fir onnëtz Aarbecht vun den Iwwersetzer ze vermeiden.",
+ "tpt-mark-summary": "huet dës Versioun fir d'Iwwersetzung markéiert",
+ "tpt-mark-nochanges": "Keng Ännerunge fir nozekucken. D'Markéiere fir z'iwwersetze vun dëser Säit ännert weder d'Säit nach eng Iwwersetzungseenheet déi et scho gëtt.",
+ "tpt-edit-failed": "D'Säit $1 konnt net aktualiséiert ginn",
+ "tpt-duplicate": "Den Numm $1 vun der Iwwersetzungwseenheet gëtt méi wéi eemol benotzt.",
+ "tpt-unmarked": "D'Säit [[:$1]] ass net méi fir z'iwwersetze markéiert.",
+ "tpt-list-nopages": "Et si keng Säite fir d'Iwwersetzung markéiert respektiv fäerdeg fir fir d'Iwersetzung markéiert ze ginn.",
+ "tpt-new-pages-title": "Säiten déi fir d'Iwwersetzung virgeschlo goufen",
+ "tpt-old-pages-title": "Säiten déi iwwersat ginn",
+ "tpt-other-pages-title": "Futtis Säiten",
+ "tpt-new-pages": "Op {{PLURAL:$1|dëser Säit|dëse Säiten}} ass Text mat Iwwersetzungs-Markéierungen, awer keng Versioun vun {{PLURAL:$1|dëser Säit|dëse Säiten}} ass elo fir d'Iwwersetze markéiert.",
+ "tpt-old-pages": "Eng Versioun vun {{PLURAL:$1|dëser Säit|dëse Säite}} gouf fir d'Iwwersetze markéiert.",
+ "tpt-other-pages": "Al Versioun vun {{PLURAL:$1|dëser Säit|dëse Säite}} sinn als z'iwwesetze markéiert,\nawer déi lescht Versioun kann fir d'Iwwersetzung markéiert ginn.",
+ "tpt-tag-oldsyntax": "al Syntax",
+ "tpt-select-prioritylangs": "Komma-getrennte Lëscht vun de prioritäre Sproochcoden:",
+ "tpt-select-prioritylangs-force": "Iwwersetzungen an aner Sprooche wéi déi prioritär Sprooche verhënneren",
+ "tpt-select-prioritylangs-reason": "Grond:",
+ "tpt-sections-prioritylangs": "Prioritär Sproochen",
+ "tpt-sections-syntaxversion": "Versioun vun der Syntax",
+ "tpt-syntaxversion-label": "Déi lescht Versioun vun der Syntax fir dës Säit",
+ "tpt-rev-mark": "markéiere fir z'iwwersetzen",
+ "tpt-rev-unmark": "Vum Iwwersetzen ewechhuelen",
+ "tpt-rev-discourage": "Vun der Iwwersetzung zréckzéien",
+ "tpt-rev-encourage": "restauréieren",
+ "tpt-rev-mark-tooltip": "Déi rezentst Versioun vun dëser Säit fir d'Iwwersetze markéieren.",
+ "tpt-rev-unmark-tooltip": "Dës Säit vum Iwwersetzen ewechhuelen.",
+ "tpt-rev-discourage-tooltip": "Weider Iwwersetzunge vun dëser Säit net méi ënnerstëtzten.",
+ "tpt-rev-encourage-tooltip": "Dës Säit nees fir d'Iwwersetze fräiginn",
+ "translate-tag-translate-link-desc": "Dës Säit iwwersetzen",
+ "translate-tag-markthis": "Dës Säit fir d'Iwwersetzung markéieren",
+ "translate-tag-markthisagain": "Dës Säit huet <span class=\"plainlinks\">[$1 Ännerungen]</span> zënter datt se fir d'lescht <span class=\"plainlinks\">[$2 fir d'Iwwersetzung markéiert gouf]</span>.",
+ "translate-tag-hasnew": "Op dëser Säit si(nn)s <span class=\"plainlinks\">[$1 Ännerungen]</span> déi net fir d'iwwersetzung markéiert sinn.",
+ "tpt-translation-intro": "Dës Säit ass eng <span class=\"plainlinks\">[$1 iwwersate Versioun]</span> vun der Säit [[$2]] an d'Iwwersetzung ass zu $3 % komplett.",
+ "tpt-translation-intro-fuzzy": "Vereelzt Iwwersetzunge si sou markéiert.",
+ "tpt-languages-legend": "aner Sproochen:",
+ "tpt-languages-zero": "Iwwersetzung fir dës Sprooch ufänken",
+ "tpt-languages-nonzero": "$1 ($2% iwwersat)",
+ "tpt-tab-translate": "Iwwersetzen",
+ "tpt-target-page": "Dës Säit kann net manuell aktualiséiert ginn.\nDës Säit ass eng Iwwersetzung vun der Säit [[$1]] an d'Iwwersetzung ka mat Hëllef vun der [$2 Iwwersetzungsfunktioun] aktualiséiert ginn.",
+ "tpt-unknown-page": "Dësen Nummraum ass fir d'Iwwersetze vu Säite mat Inhalt reservéiert.\nD'Säit, déi Dir versicht z'änneren, schéngt net mat enger Säit déi fir d'Iwwersetzung markéiert ass ze korrespondéieren.",
+ "tpt-translation-restricted": "D'Iwwersetze vun dëser Säit an dës Sprooch gouf vun engem Iwwersetzungs-Administrateur gespaart.\n\nGrond: $1",
+ "tpt-discouraged-language-force-header": "Dës Säit kann net op $1 iwwersat ginn.",
+ "tpt-discouraged-language-force-content": "Een Iwwersetzungsadministrateur huet decidéiert datt dës Säit just op $1 iwwersat sollt ginn.",
+ "tpt-discouraged-language-header": "D'Iwwersetzen op $1 ass keng Prioritéit fir dës Säit.",
+ "tpt-discouraged-language-content": "Een Iwwersetzungsadministrateur huet decidéiert d'Iwwersetzungen op $1 ze konzentréieren.",
+ "tpt-discouraged-language-force": "<strong>Dës Säit kann net op $2 iwwersat ginn.</strong>\n\nEn Iwwersetzungs-Administrateur huet decidéiert datt dës Säit nëmmen op $3 iwwersat ka ginn.",
+ "tpt-priority-languages": "En Iwwersetzungs-Administrateur huet déi prioritiséiert Sprooche fir dëse Grupp op $1 agestallt.",
+ "tpt-render-summary": "Aktualiséieren fir mat der neier Versioun vun der Quellsäit iwwereneenzestëmmen",
+ "aggregategroups": "Gruppe fusionéieren",
+ "tpt-aggregategroup-add": "Derbäisetzen",
+ "tpt-aggregategroup-save": "Späicheren",
+ "tpt-aggregategroup-close": "Zoumaachen",
+ "tpt-aggregategroup-add-new": "Eng nei zesummegeluechte Grupp dobäisetzen",
+ "tpt-aggregategroup-new-name": "Numm:",
+ "tpt-aggregategroup-new-description": "Beschreiwung (optional):",
+ "tpt-aggregategroup-remove-confirm": "Sidd Dir sécher datt Dir dëse Grupp läsche wëllt?",
+ "tpt-aggregategroup-invalid-group": "De Grupp gëtt et net",
+ "tpt-aggregategroup-edit-name": "Numm:",
+ "tpt-aggregategroup-edit-description": "Beschreiwung:",
+ "tpt-aggregategroup-update": "Späicheren",
+ "tpt-aggregategroup-update-cancel": "Ofbriechen",
+ "tpt-invalid-group": "Net valabele Grupp",
+ "pt-parse-open": "Netsymetreschen &lt;translate&gt;-Tag.\nIwwersetzungsschabloun: <pre>$1</pre>",
+ "pt-parse-close": "Netsymetreschen &lt;&#47;translate&gt;-Tag.\nIwwersetzungsschabloun: <pre>$1</pre>",
+ "pt-parse-nested": "Verschachtelt &lt;translate&gt;-Iwweraetzungs-Eenheete sinn net méiglech.\nText vum Tag: <pre>$1</pre>",
+ "pt-shake-multiple": "E puer Iwwersetzungs-Eenheete-Markéierungen fir eng Iwwersetzungs-Eenheet.\nText vun der Iwwersetzungs-Eenheet: <pre>$1</pre>",
+ "pt-shake-position": "Markéierungen fir Iwwersetzungseenheeten op enger onerwaarter Plaz.\nText fir Iwwersetzungseenheet: <pre>$1</pre>",
+ "pt-shake-empty": "Iwwersetzungs-Eenheete fir Marker $1 eidelmaachen.",
+ "log-description-pagetranslation": "Logbuch vun den Aktiounee a Verbindung mat dem System vun der Säiteniwwersetzung",
+ "log-name-pagetranslation": "Logbuch vun de Säiteniwwersetzungen",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|huet}} d'Säit $3 markéiert fir z'iwwersetzen",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|huet}} d'Säit $3 aus der Lëscht vun den Iwwersetzungen erausgeholl",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|hat}} e Probleem beim Réckele vun der Säit $3 op $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|huet}} d'iwwersetzbar Säit $3 geläscht",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|huet}} d'Läsche vun der Iwwersetzungssäit $3 ofgeschloss",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|huet}} d'Iwwersetzung vun $3 recommandéiert",
+ "log-action-filter-pagetranslation": "Typ vun Aktioun:",
+ "log-action-filter-pagetranslation-mark": "Markéiere fir z'iwwersetzen",
+ "log-action-filter-pagetranslation-unmark": "Ewechhuele vun der Iwwersetzung",
+ "log-action-filter-pagetranslation-move": "Geréckelt Säiten",
+ "log-action-filter-pagetranslation-delete": "Geläscht Säiten",
+ "log-action-filter-pagetranslation-prioritylanguages": "Ännerung vun der Prioritéit vun de Sproochen",
+ "log-action-filter-pagetranslation-aggregategroups": "Ännerung vun der Zesummefaassung vu Gruppen",
+ "pt-movepage-title": "Déi iwwersetzbar Säit $1 réckelen",
+ "pt-movepage-blockers": "déi iwwersetzbar Säit kann net op den neien Numm geréckelt gi wéinst {{PLURAL:$1|dësem|dëse}} Feeler:",
+ "pt-movepage-block-base-invalid": "Den Numm vun der Ziliiwersetzungssäit huet kee valabelen Titel.",
+ "pt-movepage-block-tp-invalid": "Den Numm vun der iwwersater Zilsäit fir [[:$1]] wier net valabel (ze laang?).",
+ "pt-movepage-block-section-invalid": "Den Numm vun der Iwwersetzungs-Eenheet vun der Zilsäit fir ''[[:$1]]'' wier net valabel (ze laang?).",
+ "pt-movepage-block-subpage-invalid": "Den Titel vun der Zil-Ënnersäit fir [[:$1]] wier net valabel (ze laang?).",
+ "pt-movepage-list-pages": "Lëscht vun de Säite fir ze réckelen",
+ "pt-movepage-list-translation": "Iwwersetzung {{PLURAL:$1|Säit|Säiten}}",
+ "pt-movepage-list-section": "Iwwersetzungseenheet {{PLURAL:$1|Säit|Säiten}}",
+ "pt-movepage-list-other": "Aner Ënner{{PLURAL:$1|säit|säiten}}",
+ "pt-movepage-list-count": "Am ganzen $1 {{PLURAL:$1|Säit|Säite}} fir ze réckelen an $2 {{PLURAL:$2|Ënnersäit|Ënnersäiten}}.",
+ "pt-movepage-list-no-pages": "Keng Säite fonnt.",
+ "pt-movepage-legend": "Iwwersetzbar Säit réckelen",
+ "pt-movepage-current": "Aktuellen Numm:",
+ "pt-movepage-new": "Neien Numm:",
+ "pt-movepage-reason": "Grond:",
+ "pt-movepage-subpages": "All Ënnersäite réckelen",
+ "pt-movepage-action-check": "Nokucken ob d'Réckele méiglech ass",
+ "pt-movepage-action-perform": "Réckelen",
+ "pt-movepage-action-other": "Zil änneren",
+ "pt-movepage-intro": "Dës Spezialsäit erméiglecht Iech et fir Säiten déi fir d'Iwwersetzung markéiert sinn ze réckelen.\nD'Réckelaktioun gëtt net direkt gemaach wëll vill Säite geréckelt musse ginn.\nD'Job-Queue gëtt fir d'Réckele vun de Säite benotzt.\nDa wann d'Säite geréckelt ginn ass et net méiglech mat deene Säiten déi grad geréckelt ginn ze schaffen.\nWann et net funktionéiert gëtt dat am [[Special:Log/pagetranslation|Iwwersetzungs-Logbuch]] festgehalen an et muss vun Hand reparéiert ginn.",
+ "pt-movepage-logreason": "Deel vun der iwwersetzbarer Säit \"$1\"",
+ "pt-movepage-started": "Kuckt wgl. deemnächst d'[[Special:Log/pagetranslation|Logbuch vun den Iwwersetzunge]] fir Feelermeldunge respektiv d'Meldung datt alles ok ass.",
+ "pt-locked-page": "Dës Säit ass gespaart wëll déi iwwersetzbar Säit elo geréckelt gëtt.",
+ "pt-deletepage-lang-title": "D'Iwwersetzungssäit ''$1'' gëtt geläscht.",
+ "pt-deletepage-tp-title": "Déi iwwersetzbar Säit ''$1'' gëtt geläscht",
+ "pt-deletepage-invalid-title": "Déi spezifizéiert Säit ass net valabel.",
+ "pt-deletepage-invalid-text": "Déi Säit déi Dir uginn hutt ass keng iwwersetzbar Säit a keng Iwwersetzungssäit.",
+ "pt-deletepage-action-check": "Säiten déi geläscht solle ginn opzielen",
+ "pt-deletepage-action-perform": "Elo läschen",
+ "pt-deletepage-action-other": "Zil änneren",
+ "pt-deletepage-lang-legend": "Iwwersetzungssäit läschen",
+ "pt-deletepage-tp-legend": "Iwwersetzbar Säit läschen",
+ "pt-deletepage-any-legend": "Säit fir z'iwwersetzen oder Iwwersetzung vun enger Säit läschen",
+ "pt-deletepage-current": "Numm vun der Säit:",
+ "pt-deletepage-reason": "Grond:",
+ "pt-deletepage-reason-details": "Aneren/zousätzleche Grond:",
+ "pt-deletepage-reason-other": "Anere Grond",
+ "pt-deletepage-subpages": "All Ënnersäite läschen",
+ "pt-deletepage-list-pages": "Lëscht vun de Säite fir ze läschen",
+ "pt-deletepage-list-translation": "Iwwersetzungssäiten",
+ "pt-deletepage-list-section": "Iwwersetzungseenheet vu Säiten",
+ "pt-deletepage-list-other": "Aner Ënnersäiten",
+ "pt-deletepage-list-count": "Am ganzen $1 {{PLURAL:$1|Säit|Säite}} fir ze läschen an {{PLURAL:$2|eng Ënnersäit|$2 Ënnersäiten}}",
+ "pt-deletepage-list-no-pages": "Keng Säite fonnt.",
+ "pt-deletepage-full-logreason": "Deel vun der iwwersetzbarer Säit \"$1\"",
+ "pt-deletepage-lang-logreason": "Deel vun der iwwersater Säit \"$1\"",
+ "pt-deletepage-started": "Kuckt wgl. d'[[Special:Log/pagetranslation|Logbuch vun den Iwwersetzunge]] fir Feelermeldungen respektiv d'Meldung datt alles ok ass, no.",
+ "pt-deletepage-intro": "Dës Spezialsäit erméiglecht et eng ganz iwwersetzbar Säit oder eng individuell Iwwersetzungssäit an enger Sprooch ze läschen.\nD'Läschaktioun gesäit een net direkt well all d'Säiten déi dovun ofhänken och geläscht ginn.\nFeeler ginn am [[Special:Log/pagetranslation|Iwwersetzungs-Logbuch]] agedro a mussen duerno manuell gefléckt ginn.",
+ "pagemigration": "Migratioun vun der Iwwersetzungssäit",
+ "pm-import-button-label": "Importéieren",
+ "pm-savepages-button-label": "Späicheren",
+ "pm-cancel-button-label": "Ofbriechen",
+ "pm-page-does-not-exist": "$1 gëtt et net",
+ "pm-old-translations-missing": "Op $1 si keng al Iwwersetzungen dran",
+ "pm-pagename-missing": "Gitt wgl. den Numm vun der Säit an",
+ "pm-add-icon-hover-text": "Eng Eenheet drënner derbäisetzen",
+ "pm-swap-icon-hover-text": "Mat der Eenheet drënner wiesselen",
+ "pm-delete-icon-hover-text": "Eenheet läschen",
+ "pm-pagetitle-placeholder": "Gitt de Säitentitel an",
+ "pm-pagetitle-invalid": "Gitt wgl. e valabelen Titel fir d'Säit an. Et muss am <page-name>/<language-code> Format sinn.",
+ "pm-pagetitle-missing": "Gitt wgl. den Titel vun der Säit an.",
+ "pm-langcode-missing": "Gitt wgl. de Sproochcode an. Gitt wgl. de Säitentitel am <page-name>/<language-code> Format an.",
+ "pm-summary-import": "Iwwersetzung importéiert mat Hëllef vun [[Special:PageMigration|Säitemigratioun]]",
+ "tpt-translate-title": "Iwwersetzung vum Titel vun der Säit erlaben",
+ "pp-save-summary": "Huet d'Säit fir d'Iwwersetzung preparéiert",
+ "pagepreparation": "D'Säit fir d'Iwwersetzung virbereeden",
+ "pp-pagename-placeholder": "Gitt den Numm vun der Säit an",
+ "pp-prepare-button-label": "Preparéieren",
+ "pp-save-button-label": "Publizéieren",
+ "pp-cancel-button-label": "Ofbriechen",
+ "pp-save-message": "D^?Säit gouf gespäichert. Dir kënnt se [$1 änneren].",
+ "pp-prepare-message": "D'Säit gouf fir d'Iwwersetzung virbereed. Kuckt d'Differenz hei drënner. Klickt de \"{{int:pp-save-button-label}}\" Knäppche wann et ok ass!",
+ "pp-already-prepared-message": "Et schéngt datt d'Säit scho fir d'Iwwersetzung virbereed gouf. Et gëtt keng Ännerungen am Verglach mat der vireger Versioun.",
+ "pp-pagename-missing": "Gitt wgl. den Numm vun der Säit an.",
+ "pp-diff-old-header": "Quelltext",
+ "pp-diff-new-header": "Preparéierten Text",
+ "tpt-unlink-button": "Vun der Iwwersetzung ewechhuelen",
+ "tpt-unlink-summary": "D'Säit gouf vun der Iwwersetzung ewechgeholl",
+ "tpt-generic-confirm": "Confirméiert dës Aktioun wgl..",
+ "tpt-generic-button": "Confirméieren"
+}
diff --git a/Translate/i18n/pagetranslation/lbe.json b/Translate/i18n/pagetranslation/lbe.json
new file mode 100644
index 00000000..778d98e1
--- /dev/null
+++ b/Translate/i18n/pagetranslation/lbe.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Soul Train"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% таржума бусса)"
+}
diff --git a/Translate/i18n/pagetranslation/lfn.json b/Translate/i18n/pagetranslation/lfn.json
new file mode 100644
index 00000000..da414469
--- /dev/null
+++ b/Translate/i18n/pagetranslation/lfn.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cgboeree",
+ "Robin van der Vliet"
+ ]
+ },
+ "tpt-languages-legend": "Otra linguas:",
+ "tpt-languages-nonzero": "$1 ($2% traduida)",
+ "tpt-aggregategroup-edit-description": "Descrive:"
+}
diff --git a/Translate/i18n/pagetranslation/lg.json b/Translate/i18n/pagetranslation/lg.json
new file mode 100644
index 00000000..9fe38f19
--- /dev/null
+++ b/Translate/i18n/pagetranslation/lg.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kizito"
+ ]
+ },
+ "translate-tag-translate-link-desc": "Vvuunula olupapula luno",
+ "tpt-languages-legend": "Nnimi ndala:"
+}
diff --git a/Translate/i18n/pagetranslation/li.json b/Translate/i18n/pagetranslation/li.json
new file mode 100644
index 00000000..a1e8ef48
--- /dev/null
+++ b/Translate/i18n/pagetranslation/li.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ooswesthoesbes"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% euvergezatte)"
+}
diff --git a/Translate/i18n/pagetranslation/lij.json b/Translate/i18n/pagetranslation/lij.json
new file mode 100644
index 00000000..2280b603
--- /dev/null
+++ b/Translate/i18n/pagetranslation/lij.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Giromin Cangiaxo"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% traduta)"
+}
diff --git a/Translate/i18n/pagetranslation/lki.json b/Translate/i18n/pagetranslation/lki.json
new file mode 100644
index 00000000..d7bf6d6a
--- /dev/null
+++ b/Translate/i18n/pagetranslation/lki.json
@@ -0,0 +1,65 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hosseinblue",
+ "Lakzon"
+ ]
+ },
+ "pagetranslation": "چاوواشەکردن زوون وەڵگە",
+ "right-pagetranslation": "علامت‌گذاری نسخه‌های صفحه برای ترجمه",
+ "action-pagetranslation": "مدیریت صفحه‌های ترجمه‌پذیر",
+ "tpt-section": "واحد ترجمهٔ $1",
+ "tpt-section-new": "واحد جدید ترجمه.\nنام: $1",
+ "tpt-section-deleted": "واحد ترجمهٔ $1",
+ "tpt-diff-old": "متن قبلی",
+ "tpt-diff-new": "متن تازه",
+ "tpt-submit": "علامت‌گذاری این نسخه برای ترجمه",
+ "tpt-sections-oldnew": "واحدهای تازه و موجود ترجمه",
+ "tpt-sections-deleted": "واحدهای حذف‌شدهٔ ترجمه",
+ "tpt-sections-template": "الگوی ترجمهٔ صفحه",
+ "tpt-action-nofuzzy": "عدم ابطال ترجمه‌ها",
+ "tpt-badtitle": "نام صفحهٔ داده‌شده ($1) عنوان معتبری نیست",
+ "tpt-nosuchpage": "اێ وەڵگە $1 هەنی(هالی)وجود نِئرێ",
+ "tpt-oldrevision": "$2 آخرین نسخهٔ صفحهٔ [[:$1]] نیست.\nفقط آخرین نسخه‌ها می‌توانند برای ترجمه علامت‌گذاری شوند.",
+ "tpt-notsuitable": "وةڵگة $1 برای ترجمه مناسب نیست.\nمطمئن شوید برچسب <nowiki><translate></nowiki> و نحو مناسبی دارد.",
+ "tpt-saveok": "صفحه [[:$1]] برای ترجمه با $2 {{PLURAL:$2|translation unit|translation units}} مشخص شده‌است.\nاکنون صفحه می‌تواند <span class=\"plainlinks\">[$3 ترجمه شده]</span> باشد.",
+ "tpt-offer-notify": "شما می‌توانید <span class=\"plainlinks\">[$1 notify translators]</span> درباره این صفحه.",
+ "tpt-old-pages-title": "وةڵگةدر ترجمه",
+ "tpt-other-pages-title": "وةڵگةل نادرست",
+ "tpt-new-pages": "{{PLURAL:$1|این صفحه شامل|این صفحات شامل}} متن با برچسب‌های ترجمه،\nاما هیچ نسخه‌ {{PLURAL:$1|این صفحه|این صفحات}} در حال حاضر برای ترجمه علامت‌گذاری نشده‌است.",
+ "tpt-select-prioritylangs-reason": ":دةلیل",
+ "tpt-sections-prioritylangs": "زبان‌های با اولویت بالا",
+ "tpt-rev-mark": "علامت‌گذاری برای ترجمه",
+ "tpt-rev-unmark": "حذف از ترجمه",
+ "tpt-rev-discourage": "دلسرد",
+ "tpt-rev-encourage": "احیا",
+ "tpt-rev-mark-tooltip": "علامت‌گذاری آخرین نسخهٔ این صفحه برای ترجمه.",
+ "tpt-rev-unmark-tooltip": "حذف این صفحه از ترجمه.",
+ "tpt-rev-discourage-tooltip": "دلسرد شدن از ترجمه‌های بیشتر در این صفحه",
+ "tpt-rev-encourage-tooltip": "بازگرداندن این صفحه به ترجمه عادی.",
+ "translate-tag-translate-link-desc": "اێ وەڵگە چاوواشآکە زوونێ تر",
+ "translate-tag-markthis": "علامت‌گذاری این صفحه برای ترجمه",
+ "tpt-translation-intro": "این صفحه <span class=\"plainlinks\">[$1 نسخهٔ ترجمه‌شدهٔ]</span> صفحهٔ [[$2]] است و ترجمهٔ آن $3٪ کامل شده‌است.",
+ "tpt-languages-legend": "وۀ زوونۀلئ تر:",
+ "tpt-languages-zero": "شروع ترجمه برای این زبان",
+ "tpt-languages-nonzero": "$1 ($2% ترجمه‌شده)",
+ "tpt-tab-translate": "چاوواشەکِردن زوون",
+ "tpt-aggregategroup-add": "افزودن",
+ "tpt-aggregategroup-save": "هیشتن(ذخیره)",
+ "tpt-aggregategroup-add-new": "افزودن گروه تازه جمع‌شده",
+ "tpt-aggregategroup-new-name": ":نام",
+ "tpt-aggregategroup-new-description": "توضیحات (اختیاری):",
+ "tpt-aggregategroup-edit-name": ":نام",
+ "tpt-aggregategroup-edit-description": "شرح:",
+ "tpt-aggregategroup-update": "هیشتن(ذخیره)",
+ "tpt-aggregategroup-update-cancel": "ئآهووسانن/لغو",
+ "pt-movepage-current": "نام فعلی(ایسە):",
+ "pt-movepage-new": "نام تازه:",
+ "pt-movepage-reason": ":دةلیل",
+ "pt-deletepage-list-translation": "وةڵگةل تةرجؤمة",
+ "pm-import-button-label": "درون‌ریزی شود",
+ "pm-savepages-button-label": "هیشتن(ذخیره)",
+ "pm-cancel-button-label": "ئآهووسانن/لغو",
+ "pp-save-button-label": "هیشتن(ذخیره)",
+ "pp-cancel-button-label": "ئآهووسانن/لغو"
+}
diff --git a/Translate/i18n/pagetranslation/lld.json b/Translate/i18n/pagetranslation/lld.json
new file mode 100644
index 00000000..c7a165a1
--- /dev/null
+++ b/Translate/i18n/pagetranslation/lld.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Starladin"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% traslaté)"
+}
diff --git a/Translate/i18n/pagetranslation/lmo.json b/Translate/i18n/pagetranslation/lmo.json
new file mode 100644
index 00000000..7c24eda9
--- /dev/null
+++ b/Translate/i18n/pagetranslation/lmo.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Salvemm el lombard"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% voltada)"
+}
diff --git a/Translate/i18n/pagetranslation/lo.json b/Translate/i18n/pagetranslation/lo.json
new file mode 100644
index 00000000..7111edbf
--- /dev/null
+++ b/Translate/i18n/pagetranslation/lo.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aefgh39622"
+ ]
+ },
+ "pt-movepage-logreason": "ສ່ວນຂອງໜ້າ \"$1\" ທີ່ສາມາດແປໄດ້",
+ "pt-deletepage-full-logreason": "ສ່ວນຂອງໜ້າ \"$1\" ທີ່ສາມາດແປໄດ້",
+ "pt-deletepage-lang-logreason": "ສ່ວນຂອງໜ້າແປຂອງ \"$1\""
+}
diff --git a/Translate/i18n/pagetranslation/lrc.json b/Translate/i18n/pagetranslation/lrc.json
new file mode 100644
index 00000000..08ba2174
--- /dev/null
+++ b/Translate/i18n/pagetranslation/lrc.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lorestani",
+ "Mogoeilor"
+ ]
+ },
+ "pagetranslation": "بلگه لرسن",
+ "tpt-diff-old": "متن دمایی",
+ "tpt-diff-new": "متن تازه",
+ "tpt-select-prioritylangs-reason": "دليل:",
+ "tpt-languages-nonzero": "$1 ($2% ڤالرشتٱ بیٱ)",
+ "tpt-tab-translate": "لرسن",
+ "tpt-aggregategroup-add": "اضاف كو",
+ "tpt-aggregategroup-save": "ذخيره كردن",
+ "tpt-aggregategroup-new-name": "نوم:"
+}
diff --git a/Translate/i18n/pagetranslation/lt.json b/Translate/i18n/pagetranslation/lt.json
new file mode 100644
index 00000000..687a9049
--- /dev/null
+++ b/Translate/i18n/pagetranslation/lt.json
@@ -0,0 +1,144 @@
+{
+ "@metadata": {
+ "authors": [
+ "Eitvys200",
+ "Hugo.arg",
+ "Mantak111",
+ "Tomasdd",
+ "Zygimantus"
+ ]
+ },
+ "pagetranslation": "Puslapio vertimas",
+ "action-pagetranslation": "valdyti išverstus puslapius",
+ "tpt-diff-old": "Ankstesnis tekstas",
+ "tpt-diff-new": "Naujas tekstas",
+ "tpt-submit": "Pažymėti šią versiją vertimui",
+ "tpt-sections-deleted": "Ištrinti vertimo vienetai",
+ "tpt-sections-template": "Vertimo puslapio šablonas",
+ "tpt-badtitle": "duotas puslapio pavadinimas ($1) nėra gera antraštė",
+ "tpt-nosuchpage": "Puslapio $1 neegzistuoja",
+ "tpt-oldrevision": "$2 nėra naujausia puslapio [[:$1]] versija.\nTik naujausios versijos gali būti pažymėtos vertimui.",
+ "tpt-notsuitable": "Puslapis $1 netinka vertimui.\nPatikrinkite, kad puslapis turi <nowiki><translate></nowiki> žymes ir tinkamą sintaksę.",
+ "tpt-offer-notify": "Galite <span class=\"plainlinks\">[$1 pranešti vertėjams]</span> apie šį puslapį.",
+ "tpt-mark-summary": "Ši versija pažymėta vertimui",
+ "tpt-edit-failed": "Nepavyko atnaujinti puslapio: $1",
+ "tpt-unmarked": "Puslapis [[:$1]] nebėra pažymėtas vertimui.",
+ "tpt-new-pages-title": "Puslapiai siūlomi vertimui",
+ "tpt-old-pages-title": "Puslapių vertimas",
+ "tpt-other-pages-title": "Sugadinti puslapiai",
+ "tpt-select-prioritylangs-reason": "Priežastis:",
+ "tpt-sections-prioritylangs": "Pirmaujančios kalbos",
+ "tpt-rev-mark": "Pažymėti vertimui",
+ "tpt-rev-unmark": "pašalinti iš vertimo",
+ "tpt-rev-encourage": "atkurti",
+ "tpt-rev-mark-tooltip": "Pažymėti naujausią šio puslapio versiją vertimui.",
+ "tpt-rev-unmark-tooltip": "Pašalinti šį puslapį iš vertimo.",
+ "translate-tag-translate-link-desc": "Versti šį puslapį",
+ "translate-tag-markthis": "Pažymėti šį puslapį vertimui",
+ "tpt-translation-intro-fuzzy": "Pasenę vertimai yra pažymėti kaip šis.",
+ "tpt-languages-legend": "Kitos kalbos:",
+ "tpt-languages-zero": "Pradėti šios kalbos vertimą",
+ "tpt-languages-nonzero": "$1 ($2% išversta)",
+ "tpt-tab-translate": "Versti",
+ "tpt-discouraged-language-force-header": "Šis puslapis negali būti išverstas į $1.",
+ "tpt-discouraged-language-force-content": "Vertimų administratorius nusprendė, kad šis puslapis gali būti išverstas tik į $1.",
+ "tpt-discouraged-language-header": "Vertimas į $1 nėra prioritetas šiam puslapiui.",
+ "tpt-discouraged-language-content": "Vertimų administratorius nusprendė sutelkti pastangas ties $1.",
+ "tpt-discouraged-language-force": "<strong>Šis puslapis negali būti išverstas į $2.</strong>\n\nVertimų administratorius nusprendė, kad šis puslapis gali būti išverstas tik į $3.",
+ "tpt-priority-languages": "Vertimų administratorius nustatė šios grupes prioritetines kalbas į $1.",
+ "aggregategroups": "Bendros grupės",
+ "tpt-aggregategroup-add": "Pridėti",
+ "tpt-aggregategroup-save": "Išsaugoti",
+ "tpt-aggregategroup-add-new": "Pridėti naują bendrą grupę",
+ "tpt-aggregategroup-new-name": "Vardas:",
+ "tpt-aggregategroup-new-description": "Aprašymas (neprivaloma):",
+ "tpt-aggregategroup-remove-confirm": "Ar tikrai norite naikinti šią bendrą grupę?",
+ "tpt-aggregategroup-invalid-group": "Grupės nėra",
+ "tpt-aggregategroup-edit-name": "Pavadinimas:",
+ "tpt-aggregategroup-edit-description": "Aprašymas:",
+ "tpt-aggregategroup-update": "Išsaugoti",
+ "tpt-aggregategroup-update-cancel": "Atšaukti",
+ "tpt-invalid-group": "Negalima grupė",
+ "log-name-pagetranslation": "Puslapio vertimo žurnalas",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|pažymėtas}} $3 vertimui",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|ištrintas}} $3 iš vertimo sistemos",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|baigė}} pervadinti puslapį, kurį galima versti, $3 į $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|susidūrė}} su problema keliant puslapį $3 į $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|baigė}} puslapio $3, kurį galima versti, trynima",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|nepavyko}} ištrinti $3, kuris priklauso puslapiui $4, kurį galima versti",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|baigė}} vertimo puslapio $3 trynimą",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|nepavyko}} ištrinti $3, kuris priklauso vertimo puslapiui $4",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|paskatino}} $3 vertimą",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|atkalbinėjo nuo}} $3 vertimo",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|pašalino}} prioritetines kalbas iš puslapio $3, kurį galima versti",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|nustatė}} prioritetines kalbas puslapiui, kurį galima versti, iš $3 į $5",
+ "log-action-filter-pagetranslation": "Veiklos tipas:",
+ "log-action-filter-pagetranslation-mark": "Pažymėti vertimui",
+ "log-action-filter-pagetranslation-unmark": "Pašalinimas iš vertimo",
+ "log-action-filter-pagetranslation-move": "Puslapio perkėlimai",
+ "log-action-filter-pagetranslation-delete": "Puslapio trynimai",
+ "log-action-filter-pagetranslation-encourage": "Vertimo skaitinimas",
+ "log-action-filter-pagetranslation-discourage": "Atkalbinėjimas nuo vertimo",
+ "log-action-filter-pagetranslation-prioritylanguages": "Prioritetinių kalbų modifikacija",
+ "pt-movepage-title": "Perkelti puslapį „$1“, kurį galima versti",
+ "pt-movepage-blockers": "Puslapis, kurį galima versti, negali būti perkeltas į naują pavadinimą dėl {{PLURAL:$1|šios klaidos|šių klaidų}}:",
+ "pt-movepage-list-pages": "Puslapių perkėlimui sąrašas",
+ "pt-movepage-list-translation": "Vertimo {{PLURAL:$1|puslapis|puslapiai}}",
+ "pt-movepage-list-other": "Kiti {{PLURAL:$1|subpuslapis|subpuslapiai}}",
+ "pt-movepage-list-count": "Viso $1 {{PLURAL:$1|puslapis|puslapiai}} perkėlimui.",
+ "pt-movepage-legend": "Perkelti išverčiamą puslapį",
+ "pt-movepage-current": "Dabartinis pavadinimas:",
+ "pt-movepage-new": "Naujas pavadinimas:",
+ "pt-movepage-reason": "Priežastis:",
+ "pt-movepage-subpages": "Perkelti visus subpuslapius",
+ "pt-movepage-action-check": "Patikrinkite, ar perkelti yra įmanoma",
+ "pt-movepage-action-perform": "Perkelti",
+ "pt-movepage-action-other": "Pakeisti taikinį",
+ "pt-movepage-logreason": "Dalis puslapio „$1“, kurį galima versti",
+ "pt-deletepage-invalid-title": "Nurodytas puslapis negalimas.",
+ "pt-deletepage-invalid-text": "Nurodytas puslapis nėra nei puslapis, kurį galima išversti, nei vertimų puslapis.",
+ "pt-deletepage-action-check": "Sąrašą puslapių kurie turi būti ištrinti.",
+ "pt-deletepage-action-perform": "Padaryti trynimą",
+ "pt-deletepage-action-other": "Pakeisti taikinį",
+ "pt-deletepage-lang-legend": "Ištrinti vertimo puslapį",
+ "pt-deletepage-tp-legend": "Ištrinti išverčiama puslapį",
+ "pt-deletepage-any-legend": "Ištrinti puslapį, kurį galima išversti, ar vertimų puslapį",
+ "pt-deletepage-current": "Puslapio pavadinimas:",
+ "pt-deletepage-reason": "Priežastis:",
+ "pt-deletepage-subpages": "Ištrinti visus subpuslapius",
+ "pt-deletepage-list-pages": "Sąrašas ištrinti puslapius",
+ "pt-deletepage-list-translation": "Vertimo puslapiai",
+ "pt-deletepage-list-section": "Vertimo vieneto puslapiai",
+ "pt-deletepage-list-other": "Kiti subpuslapiai",
+ "pt-deletepage-list-count": "Viso $1 {{PLURAL:$1|puslapis|puslapiai}} trynimui.",
+ "pt-deletepage-full-logreason": "Dalis išverčiamo puslapio „$1“",
+ "pt-deletepage-lang-logreason": "Dalis verčiamo puslapio „$1“",
+ "pagemigration": "Vertimo puslapio migracija",
+ "pm-import-button-label": "Importuoti",
+ "pm-savepages-button-label": "Išsaugoti",
+ "pm-cancel-button-label": "Atšaukti",
+ "pm-page-does-not-exist": "$1 neegzistuoja.",
+ "pm-old-translations-missing": "$1 neturi senų vertimų.",
+ "pm-pagename-missing": "Prašome įvesti puslapio pavadinimą.",
+ "pm-add-icon-hover-text": "Pridėti vienetą žemiau",
+ "pm-swap-icon-hover-text": "Apkeisti su vienetu žemiau",
+ "pm-delete-icon-hover-text": "Trinti vienetą",
+ "pm-pagetitle-placeholder": "Įveskite puslapio pavadinimą",
+ "pm-pagetitle-invalid": "Prašome įvesti galiojantį puslapio pavadinimą. Jis turėtų būti <page-name>/<language-code> formatu",
+ "pm-pagetitle-missing": "Prašome įvesti puslapio pavadinimą.",
+ "tpt-translate-title": "Leisti puslapio pavadinimo vertimus",
+ "pp-save-summary": "Puslapis paruoštas vertimui",
+ "pagepreparation": "Paruošti puslapį vertimui",
+ "pp-pagename-placeholder": "Įveskite puslapio pavadinimą",
+ "pp-prepare-button-label": "Paruošti",
+ "pp-save-button-label": "Paskelbti",
+ "pp-cancel-button-label": "Atšaukti",
+ "pp-save-message": "Puslapis buvo publikuotas. Galite jį [$1 redaguoti].",
+ "pp-pagename-missing": "Prašome įvesti puslapio pavadinimą.",
+ "pp-diff-old-header": "Šaltinio tekstas",
+ "pp-diff-new-header": "Paruoštas tekstas",
+ "tpt-unlink-button": "Pašalinti iš vertimo",
+ "tpt-unlink-summary": "Puslapis pašalintas iš vertimo",
+ "tpt-generic-confirm": "Prašome patvirtinti šį veiksmą.",
+ "tpt-generic-button": "Patvirtinti"
+}
diff --git a/Translate/i18n/pagetranslation/ltg.json b/Translate/i18n/pagetranslation/ltg.json
new file mode 100644
index 00000000..b7c97e06
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ltg.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dark Eagle"
+ ]
+ },
+ "tpt-diff-new": "Jauns teksts",
+ "tpt-languages-legend": "Cytys volūdys:",
+ "pt-movepage-new": "Jauna pasauka:",
+ "pt-movepage-reason": "Īmesle:"
+}
diff --git a/Translate/i18n/pagetranslation/luz.json b/Translate/i18n/pagetranslation/luz.json
new file mode 100644
index 00000000..6b5bcbf5
--- /dev/null
+++ b/Translate/i18n/pagetranslation/luz.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "علی ساکی لرستانی"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% ترجمه ۉابیدھ)"
+}
diff --git a/Translate/i18n/pagetranslation/lv.json b/Translate/i18n/pagetranslation/lv.json
new file mode 100644
index 00000000..aaffdc5c
--- /dev/null
+++ b/Translate/i18n/pagetranslation/lv.json
@@ -0,0 +1,58 @@
+{
+ "@metadata": {
+ "authors": [
+ "Papuass"
+ ]
+ },
+ "pagetranslation": "Lapas tulkošana",
+ "right-pagetranslation": "Atzīmēt lapu versijas tulkošanai",
+ "action-pagetranslation": "pārvaldīt tulkojamās lapas",
+ "tpt-diff-old": "Iepriekšējais teksts",
+ "tpt-diff-new": "Jaunais teksts",
+ "tpt-submit": "Atzīmēt šo versiju tulkošanai",
+ "tpt-sections-oldnew": "Jaunas un jau esošas tulkošanas vienības",
+ "tpt-nosuchpage": "Lapa $1 nepastāv",
+ "tpt-select-prioritylangs-reason": "Iemesls:",
+ "tpt-sections-prioritylangs": "Prioritārās valodas",
+ "tpt-rev-mark": "atzīmēt tulkošanai",
+ "translate-tag-translate-link-desc": "Tulkot šo lapu",
+ "translate-tag-markthis": "Atzīmēt šo lapu tulkošanai",
+ "translate-tag-hasnew": "Šī lapa satur <span class=\"plainlinks\">[$1 izmaiņas]</span>, kuras nav atzīmētas tulkošanai.",
+ "tpt-translation-intro": "Šī lapa ir <span class=\"plainlinks\">[$1 tulkota versija]</span> no lapas [[$2]] un tulkojums ir pabeigts par $3%.",
+ "tpt-languages-legend": "Citas valodas:",
+ "tpt-languages-separator": "&#160;•&#32;",
+ "tpt-languages-nonzero": "$1 ($2% iztulkots)",
+ "tpt-tab-translate": "Tulkot",
+ "tpt-aggregategroup-add": "Pievienot",
+ "tpt-aggregategroup-save": "Saglabāt",
+ "tpt-aggregategroup-new-name": "Nosaukums:",
+ "tpt-aggregategroup-new-description": "Apraksts (nav obligāts):",
+ "tpt-aggregategroup-edit-description": "Apraksts:",
+ "tpt-aggregategroup-update": "Saglabāt",
+ "tpt-aggregategroup-update-cancel": "Atcelt",
+ "tpt-invalid-group": "Nederīga grupa",
+ "log-name-pagetranslation": "Lapu tulkošanas žurnāls",
+ "pt-movepage-list-pages": "Pārvietojamo lapu saraksts",
+ "pt-movepage-list-translation": "Tulkojuma {{PLURAL:$1|lapas|lapa|lapas}}",
+ "pt-movepage-list-other": "{{PLURAL:$1|Citas apakšlapas|Cita apakšlapa|Citas apakšlapas}}",
+ "pt-movepage-current": "Esošais nosaukums:",
+ "pt-movepage-new": "Jaunais nosaukums:",
+ "pt-movepage-reason": "Iemesls:",
+ "pt-movepage-subpages": "Pārvietot visas apakšlapas",
+ "pt-movepage-action-check": "Pārbaudīt, vai ir iespējams pārvietot",
+ "pt-movepage-action-perform": "Nepārvietot",
+ "pt-movepage-action-other": "Mainīt mērķi",
+ "pt-movepage-logreason": "Daļa no tulkojamas lapas \"$1\"",
+ "pt-deletepage-action-perform": "Veikt dzēšanu",
+ "pt-deletepage-action-other": "Mainīt mērķi",
+ "pt-deletepage-current": "Lapas nosaukums:",
+ "pt-deletepage-reason": "Iemesls:",
+ "pt-deletepage-subpages": "Dzēst visas apakšlapas",
+ "pt-deletepage-list-pages": "Dzēšamo lapu saraksts",
+ "pt-deletepage-list-translation": "Tulkojuma lapas",
+ "pt-deletepage-list-other": "Citas apakšlapas",
+ "pm-savepages-button-label": "Saglabāt",
+ "pm-cancel-button-label": "Atcelt",
+ "pm-page-does-not-exist": "$1 nepastāv.",
+ "pp-cancel-button-label": "Atcelt"
+}
diff --git a/Translate/i18n/pagetranslation/lzh.json b/Translate/i18n/pagetranslation/lzh.json
new file mode 100644
index 00000000..e3b0e927
--- /dev/null
+++ b/Translate/i18n/pagetranslation/lzh.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "SolidBlock",
+ "StephDC",
+ "Yanteng3"
+ ]
+ },
+ "tpt-languages-nonzero": "$1($2%已翻譯)",
+ "tpt-aggregategroup-save": "存",
+ "pm-old-translations-missing": "$1 不含旧譯。"
+}
diff --git a/Translate/i18n/pagetranslation/lzz.json b/Translate/i18n/pagetranslation/lzz.json
new file mode 100644
index 00000000..1ba52bbd
--- /dev/null
+++ b/Translate/i18n/pagetranslation/lzz.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cem Rize"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% çevrildi)"
+}
diff --git a/Translate/i18n/pagetranslation/mad.json b/Translate/i18n/pagetranslation/mad.json
new file mode 100644
index 00000000..76271f04
--- /dev/null
+++ b/Translate/i18n/pagetranslation/mad.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Boesenbergia"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% èpertal)"
+}
diff --git a/Translate/i18n/pagetranslation/mai.json b/Translate/i18n/pagetranslation/mai.json
new file mode 100644
index 00000000..8168f02e
--- /dev/null
+++ b/Translate/i18n/pagetranslation/mai.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "बिप्लब आनन्द"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% अनुवादित)"
+}
diff --git a/Translate/i18n/pagetranslation/mg.json b/Translate/i18n/pagetranslation/mg.json
new file mode 100644
index 00000000..64b87cb7
--- /dev/null
+++ b/Translate/i18n/pagetranslation/mg.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jagwar"
+ ]
+ },
+ "right-pagetranslation": "Mamamarika ny santiônam-pejy hodikaina",
+ "tpt-languages-nonzero": "$1 (voadika $2%)"
+}
diff --git a/Translate/i18n/pagetranslation/min.json b/Translate/i18n/pagetranslation/min.json
new file mode 100644
index 00000000..2df5b929
--- /dev/null
+++ b/Translate/i18n/pagetranslation/min.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ardzun",
+ "Iwan Novirion"
+ ]
+ },
+ "tpt-languages-legend": "Baso lain:",
+ "tpt-languages-nonzero": "$1 ($2% ditarjamahkan)",
+ "pt-movepage-intro": "Laman istimewa ko mamungkinan Sanak untuak mamindahan laman nan ditandoi untuak ditajamahan.\nTindakan pamindahan indak akan balangsuang sakatika dek banyak laman nan paralu dipindahan.\nSangkek laman dipindahan, indak dimungkinan untuak barinteraksi jo laman nan basangkutan.\nKagagalan akan dicatat di [[Special:Log/pagetranslation|log tajamahan laman]] dan paralu dipelokan sacaro manual."
+}
diff --git a/Translate/i18n/pagetranslation/mk.json b/Translate/i18n/pagetranslation/mk.json
new file mode 100644
index 00000000..2fde4ab9
--- /dev/null
+++ b/Translate/i18n/pagetranslation/mk.json
@@ -0,0 +1,267 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bjankuloski06",
+ "Brest",
+ "Vlad5250"
+ ]
+ },
+ "pagetranslation": "Превод на страници",
+ "nstab-translations": "Преводна единица",
+ "right-pagetranslation": "Обележување на верзии на страници за преведување",
+ "action-pagetranslation": "раководење со преводливи страници",
+ "tps-edit-sourcepage-text": "Уредувате изворна преводна страница. Осигурајте се дека сте запознаени со следнава документација: \n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text Промена на изворен текст] \n\n* [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Markup_examples Пример за употреба на ознаки]",
+ "tps-edit-sourcepage-ve-warning-limited-text": "Некои преводливи длеови може да не бидат уредливи со овој уредник. За нив послужете се со изворниот уредник.",
+ "tps-edit-sourcepage-ve-warning-title": "Предупредување: Неподдржана страница",
+ "tps-edit-sourcepage-ve-warning-text": "Уредувате преводлива страница. Овој уредник сè уште не поддржува работа со вакви страници. Користете го изворниот уредник.",
+ "tps-edit-sourcepage-ve-warning-button": "ОК",
+ "tpt-section": "Преводна единица $1",
+ "tpt-section-new": "Нова преводна единица.\nНазив: $1",
+ "tpt-section-deleted": "Преводна единица $1",
+ "tpt-diff-old": "Претходен текст.",
+ "tpt-diff-new": "Нов текст",
+ "tpt-submit": "Обележи ја оваа верзија на преводот",
+ "tpt-sections-oldnew": "Нови и постоечки преводни единици",
+ "tpt-sections-deleted": "Избришани преводни едници",
+ "tpt-sections-template": "Предлошка за страница со превод",
+ "tpt-action-nofuzzy": "Не поништувај преводи",
+ "tpt-badtitle": "Даденото име на страницата ($1) е погрешен наслов",
+ "tpt-nosuchpage": "Страницата $1 не постои",
+ "tpt-oldrevision": "$2 не е најнова верзија на страницата [[:$1]].\nСамо најновите верзии можат да се обележуваат за преведување.",
+ "tpt-notsuitable": "Страницата $1 не е погодна за преведување.\nПроверете дали има ознаки $2 и дали има правилна синтакса.",
+ "tpt-saveok": "Оваа страница [[:$1]] е обележана за преведување со $2 {{PLURAL:$2|преводна единица|преводни единици}}.\nСтраницата сега може да се <span class=\"plainlinks\">[$3 преведува]</span>.",
+ "tpt-saveok-first": "Можете да [[Special:PageMigration|увезете постоечки превод]] за оваа страница (ако го има).",
+ "tpt-offer-notify": "Можете да ги <span class=\"plainlinks\">[$1 известите преведувачите]</span> за оваа страница.",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|Погл. список на преводливи страници.]]",
+ "tpt-showpage-intro": "Подолу се наведени нови, постоечки и избришани преводни единици.\nПред да ја обележите оваа верзија за преведување, проверете дали промените во деловите се сведени на минимум со што би се избегнала непотреба работа за преведувачите.",
+ "tpt-mark-summary": "Ја означи оваа верзија за преведување",
+ "tpt-mark-nochanges": "Нема промени за оценување. Ако ја означите страницава за преведување, истата нема да можете да ја измените, а истото важи за било која друга постоечка преводна единица.",
+ "tpt-edit-failed": "Не можев да ја обновам страницата: $1",
+ "tpt-duplicate": "Името $1 се користи кај повеќе од една преводна единица.",
+ "tpt-invalid": "Името на преводната единица $1 не смее да содржи долна или коса црта.",
+ "tpt-unmarked": "Страницата [[:$1]] повеќе не е означена за преведување.",
+ "tpt-list-nopages": "Нема пораки обележани за преведување, ниту страници готови за обележување за да бидат преведени.",
+ "tpt-new-pages-title": "Страници предложени за преведување",
+ "tpt-old-pages-title": "Страници за преведување",
+ "tpt-other-pages-title": "Расипани страници",
+ "tpt-outdated-pages-title": "Страници со промени во исчекување",
+ "tpt-new-pages": "{{PLURAL:$1|Оваа страница содржи|Овие страници содржат}} текст со ознаки за преведување, но моментално нема верзија на {{PLURAL:$1|оваа страница|овие страници}} која е обележана за преведување.",
+ "tpt-old-pages": "{{PLURAL:$1|Обележана е за преведување најновата верзија на оваа страница|Обележани се за преведување најновите верзии на овие страници}}.",
+ "tpt-other-pages": "{{PLURAL:$1|Стара верзија на оваа страница е означена за преведување|Постари верзии на оваа страница се означени за преведување}},\nно {{PLURAL:$1|најновата верзија не може да се означи|најновите верзии не можат да се означат}} за преведување.",
+ "tpt-outdated-pages": "{{PLURAL:$1|Оваа страница има|Овие страници имаат}} промени кои не се означени за преведување.",
+ "tpt-tag-discouraged": "непрепорачана",
+ "tpt-tag-oldsyntax": "стара синтакса",
+ "tpt-tag-no-transclusion-support": "не е поддржано превметнување",
+ "tpt-select-prioritylangs": "Список на кодови на приоритетните јазици, одделени со запирка:",
+ "tpt-select-prioritylangs-force": "Спречи преведување на јазици што не се приоритетни",
+ "tpt-select-prioritylangs-reason": "Причина:",
+ "tpt-sections-prioritylangs": "Приоритетни јазици",
+ "tpt-sections-syntaxversion": "Верзија на синтаксата",
+ "tpt-syntaxversion-text": "Страницава тековно користи стара верзија на изворна синтакса за преводливи страници. Новата верзија ќе ги стави непреведените делови во HTML-ознака за да се укаже исправниот јазик на текстот. Пример: $1. Новата синтакса $2 можете да ја употребите за да спречите секакво ставање во ознаки на места кајшто тоа е несакано, како да речеме кога се преведува атрибутот <code>title</code> на еден елемент. Не е возможно враќање на старата верзија на синтаксата.",
+ "tpt-syntaxversion-label": "Користи ја најновата верзија на синтаксата за страницава",
+ "tpt-transclusion": "Превметнување на предлошки",
+ "tpt-transclusion-label": "Овозможи преводоспособно превметнување за страницава",
+ "tpt-rev-mark": "означи за преведување",
+ "tpt-rev-unmark": "отстрани од преводот",
+ "tpt-rev-discourage": "непрепорачана",
+ "tpt-rev-encourage": "врати",
+ "tpt-rev-mark-tooltip": "Означи ја последната верзија на страницава како „за преведување“",
+ "tpt-rev-unmark-tooltip": "Отстрани ја страницава од преводот.",
+ "tpt-rev-discourage-tooltip": "Постави ја страницата како непрепорачана за понатамошното преведување.",
+ "tpt-rev-encourage-tooltip": "Врати ја страницата на нормално преведување.",
+ "translate-tag-translate-link-desc": "Преведете ја страницава",
+ "translate-tag-markthis": "Обележи ја оваа страница со 'за преведување'",
+ "translate-tag-markthisagain": "Оваа страница има <span class=\"plainlinks\">[$1 промени]</span> од последниот пат кога <span class=\"plainlinks\">[$2 обележана за преведување]</span>.",
+ "translate-tag-hasnew": "Оваа страница содржи <span class=\"plainlinks\">[$1 промени]</span> кои не се обележани за преведување.",
+ "tpt-translation-intro": "Оваа страница е <span class=\"plainlinks\">[$1 преведена верзија]</span> на страницата [[$2]], а преводот е $3% потполн и тековен.",
+ "tpt-translation-intro-fuzzy": "Застарените преводи се обележуваат вака.",
+ "tpt-languages-legend": "Други јазици:",
+ "tpt-languages-separator": "&#160;•&#32;",
+ "tpt-languages-zero": "Почнете превод на овој јазик",
+ "tpt-languages-nonzero": "$1 ($2% преведено)",
+ "tpt-tab-translate": "Преведи",
+ "tpt-target-page": "Оваа страница не може да се обнови рачно.\nСтраницава е превод на страницата [[$1]], а преводот може да се обнови само со помош на [$2 алатката за преведување].",
+ "tpt-unknown-page": "Овој именски простор е резервиран за преводи на содржински страници.\nСтраницата која се обидувате да ја уредите не соодветствува со ниедна страница обележана за преведување.",
+ "tpt-translation-restricted": "Преведувањето на страницата на овој јазик е спречено од преводен администратор.\n\nПричина: $1",
+ "tpt-translation-restricted-no-reason": "Преведувањето на страницава на овој јазик е спречено од преводен администратор.",
+ "tpt-discouraged-language-force-header": "Страницава не може да се преведува на $1.",
+ "tpt-discouraged-language-force-content": "Преводен администратор решил страницава да може да се преведува само на $1.",
+ "tpt-discouraged-language-header": "Преведувањето на $1 не претставува приоритет за страницава.",
+ "tpt-discouraged-language-content": "Преводен администратор решил преведувањето да се задржи на $1.",
+ "tpt-discouraged-language-force": "<strong>Страницава не може да се преведува на $2.</strong>\n\nПреводен администратор одлучил дека страницата може да се преведува само на $3.",
+ "tpt-priority-languages": "Преводен администратор на групата ѝ ги зададе приоритетните јазици: $1.",
+ "tpt-priority-languages-force": "Преводен администратор ги зададе $1 како приоритетни јазици на групава. Преведувањето на други јазици не е допуштено.",
+ "tpt-discouraged-translation-header": "Преведувањето на страницава не е препорачано",
+ "tpt-discouraged-translation-content": "Преводен администратор препорачува да не се преведува оваа страница. Можете сепак да ја преведете, но преводот нема да биде корисен.",
+ "tpt-render-summary": "Обнова за усогласување со новата верзија на изворната страница",
+ "aggregategroups": "Збирни групи",
+ "tpt-aggregategroup-add": "Додај",
+ "tpt-aggregategroup-save": "Зачувај",
+ "tpt-aggregategroup-close": "Затвори",
+ "tpt-aggregategroup-add-new": "Додај нова збирна група",
+ "tpt-aggregategroup-new-name": "Назив:",
+ "tpt-aggregategroup-new-description": "Опис (незадолжително):",
+ "tpt-aggregategroup-remove-confirm": "Дали сте сигурни дека сакате да ја избришете оваа збирна група?",
+ "tpt-aggregategroup-invalid-group": "Групата не постои",
+ "tpt-aggregategroup-edit-name": "Име:",
+ "tpt-aggregategroup-edit-description": "Опис:",
+ "tpt-aggregategroup-update": "Зачувај",
+ "tpt-aggregategroup-update-cancel": "Откажи",
+ "tpt-aggregategroup-expand-all-groups": "расклопи ги сите групи",
+ "tpt-aggregategroup-collapse-all-groups": "собери ги сите групи",
+ "tpt-aggregategroup-expand-group": "расклопи група",
+ "tpt-aggregategroup-collapse-group": "собери група",
+ "tpt-invalid-group": "Неважечка група",
+ "pt-parse-open": "Неврамнотежена &lt;translate> ознака.\nПредлошка за преводот: <pre>$1</pre>",
+ "pt-parse-close": "Неврамнотежена &lt;/translate> ознака.\nПредлошка за преводот: <pre>$1</pre>",
+ "pt-parse-nested": "Не се дозволени гвнездени &lt;translate> преводни единици.\nТекст на ознаката: <pre>$1</pre>",
+ "pt-shake-multiple": "Повеќекратни означувачи за преводни единици во во една единица.\nПреводните единици мора да бидат одделени со празни редови.\nТекст на единицата: <pre>$1</pre>",
+ "pt-shake-position": "Неочекувана положба на означувачите за преводни единици.\nТекст во преводната единица: <pre>$1</pre>",
+ "pt-shake-empty": "Празна преводна единица за означувачот „$1“.",
+ "log-description-pagetranslation": "Дневник на дејства кои се однесуваат на системот за превод на страници",
+ "log-name-pagetranslation": "Дневник на преводи на страници",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|ја означи}} $3 за преведување",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|ја отстрани}} $3 од преводниот систем",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|го заврши}} преименувањето на преводливата страница $3 во $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|наиде}} на проблем при преместувањето на страницата $3 на $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|го заврши}} бришењето на преводливата страница $3",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|не успеа}} да ја избрише $3, што ѝ припаѓа на преводливата страница $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|заврши}} со бришењето на преводната страница $3",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|не успеа}} да ја избрише $3, што ѝ припаѓа на преводната страница $4",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|препорача}} да се преведе $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|препорача}} да не се преведува $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|отстрани}} приоритетни јазици од преводливата страница $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|ги зададе}} приоритетните јазици од преводливата страница $3: $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|ги ограничи}} јазиците на преводливата страница $3 на $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|ја додаде}} преводливата страница $3 во збирната група $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|ја острани}} преводливата страница $3 од збирната група $4",
+ "log-action-filter-pagetranslation": "Вид дејство:",
+ "log-action-filter-pagetranslation-mark": "Означување за преведување",
+ "log-action-filter-pagetranslation-unmark": "Отстранување од превод",
+ "log-action-filter-pagetranslation-move": "Преместување на страници",
+ "log-action-filter-pagetranslation-delete": "Бришење страници",
+ "log-action-filter-pagetranslation-encourage": "Поттик за преведување",
+ "log-action-filter-pagetranslation-discourage": "Одвраќање од преведување",
+ "log-action-filter-pagetranslation-prioritylanguages": "Менување на приоритетни јазици",
+ "log-action-filter-pagetranslation-aggregategroups": "Менување на збирни групи",
+ "log-description-messagebundle": "Дневник за дејства кои се однесуваат на системот за купчиња пораки",
+ "log-name-messagebundle": "Дневник на купчиња пораки",
+ "logentry-messagebundle-moveok": "$1 {{GENDER:$2|го заврши}} преименувањето на купчето пораки $3 во $4",
+ "logentry-messagebundle-movenok": "$1 {{GENDER:$2|наиде}} на проблем при преместувањето на купчето пораки $3 на $4",
+ "logentry-messagebundle-deletefok": "$1 {{GENDER:$2|го заврши}} бришењето на купчето пораки $3",
+ "logentry-messagebundle-deletefnok": "$1 {{GENDER:$2|не успеа}} да ја избрише $3, која му припаѓа на купчето пораки $4",
+ "log-action-filter-messagebundle": "Вид дејство:",
+ "log-action-filter-messagebundle-move": "Преместувања на купчиња пораки",
+ "log-action-filter-messagebundle-delete": "Бришења на купчиња пораки",
+ "pt-movepage-title": "Преместување на преводливата страница $1",
+ "pt-movepage-messagebundle-title": "Премести го купчето пораки „$1“",
+ "pt-movepage-blockers": "Преводливата страница не може да се премести на нов наслов заради {{PLURAL:$1|следнава грешка|следниве грешки}}:",
+ "pt-movepage-block-base-invalid": "Целната преводлива страница не претставува важечки наслов.",
+ "pt-movepage-block-tp-invalid": "Насловот на целната страница за превод на [[:$1]] би бил неважечки (предолг?).",
+ "pt-movepage-block-section-invalid": "Целниот наслов на страницата за „[[:$1]]“ за преводната единица би била неважечки (предолг?).",
+ "pt-movepage-block-subpage-invalid": "Насловот на целната потстраница на [[:$1]] би била неважечки (предолг?).",
+ "pt-movepage-block-talkpage-invalid": "Насловот на целната разговорна страница на „[[:$1]]“ би бил неважечки (предолг?).",
+ "pt-movepage-block-unknown-page": "Страницата ([[:$1]]) што се преместува не е дел од преводливата страница.",
+ "pt-movepage-block-ns-talk-unsupported": "Страницата ([[:$1]]) се преместува во именски простор кој не поддржува разговорни страници.",
+ "pt-movepage-block-rename-failed": "Се јави грешка при создавањето на нов наслов на страницата [[:$1]]",
+ "pt-movepage-list-pages": "Список на страници за преместување",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Преводна страница|Преводни страници}}",
+ "pt-movepage-list-section": "{{PLURAL:$1|Страница на преводна единица|Страници на преводни единици}}",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Потстраница означена|Потстраници означени}} за превод",
+ "pt-movepage-list-translatable-note": "Овие страници мора да се преместат одделно.",
+ "pt-movepage-list-other": "{{PLURAL:$1|Друга потстраница|Други потстраници}}",
+ "pt-movepage-list-count": "Вкупно $1 {{PLURAL:$1|страница|страници}} за преместување, вклучувајќи $2 {{PLURAL:$2|потстраница|потстраници}} и $3 {{PLURAL:$3|разговорна|разговорни}}.",
+ "pt-movepage-page-count-limit": "Оваа преводлива страница се состои од преку $1 {{PLURAL:$1|страница|страници}}. Утврдено е дека преместувањето на олкав број страници е непоуздано. Побарајте од администратор да го направи ова со скрипта за одржување.",
+ "pt-movepage-list-no-pages": "Не пронајдов ниедна страница.",
+ "pt-movepage-legend": "Премести преводлива страница",
+ "pt-movepage-messagebundle-legend": "Премести го купчето пораки",
+ "pt-movepage-current": "Сегашен назив:",
+ "pt-movepage-new": "Нов назив:",
+ "pt-movepage-reason": "Причина:",
+ "pt-movepage-subpages": "Премести ги сите потстраници",
+ "pt-movepage-talkpages": "Премести и разговорни страници",
+ "pt-movepage-talkpage-exists": "(Има разговорна страница)",
+ "pt-movepage-action-check": "Провери дали преместувањето е изводливо",
+ "pt-movepage-action-perform": "Изврши преместување",
+ "pt-movepage-action-other": "Смени цел",
+ "pt-movepage-intro": "Оваа службена страница ви овозможува да преместувате страници обележани за преведување.\nСамото преместување нема да се случи веднаш, бидејќи треба да се преместат голем број на страници.\nПреместувањето ќе се води по редица на задачи.\nДодека се преместуваат страниците, со нив нема да може да се работи.\nНеуспешните ќе бидат заведени во [[$1|дневникот]] и тие ќе треба да се поправаат рачно.",
+ "pt-movepage-logreason": "Дел од преводливата страница „$1“.",
+ "pt-movepage-started": "Малку подоцна погледајте пораки за грешки и завршување во [[$1|дневникот]].",
+ "pt-locked-page": "Оваа страница е заклучена бидејќи е во тек преместување на преводлива страница.",
+ "pt-deletepage-lang-title": "Бришење на страницата со превод „$1“.",
+ "pt-deletepage-tp-title": "Бришење на преводливата страница „$1“.",
+ "pt-deletepage-mb-title": "Бришење на купчето пораки „$1“",
+ "pt-deletepage-invalid-title": "Наведената страница е неважечка.",
+ "pt-deletepage-invalid-text": "Наведената страница не е преводлива, ниту пак страница за преведување.",
+ "pt-deletepage-action-check": "Список на страници за бришење",
+ "pt-deletepage-action-perform": "Изврши го бришењето",
+ "pt-deletepage-action-other": "Смени цел",
+ "pt-deletepage-lang-legend": "Избриши ја страницата за превод",
+ "pt-deletepage-tp-legend": "Избриши преводлива страница",
+ "pt-deletepage-mb-legend": "Избриши го купчето пораки",
+ "pt-deletepage-any-legend": "Избриши преводлива страница, купче пораки или страница за превод",
+ "pt-deletepage-current": "Име на страницата:",
+ "pt-deletepage-reason": "Причина:",
+ "pt-deletepage-reason-details": "Друга/дополнителна причина:",
+ "pt-deletepage-reason-other": "Друга причина",
+ "pt-deletepage-subpages": "Избриши ги сите потстраници",
+ "pt-deletepage-list-pages": "Список на страници за бришење",
+ "pt-deletepage-list-translation": "Страници со превод",
+ "pt-deletepage-list-section": "Страници за преводни единици",
+ "pt-deletepage-list-other": "Други потстраници",
+ "pt-deletepage-list-count": "Вкупно $1 {{PLURAL:$1|страница|страници}} за бришење и $2 {{PLURAL:$2|потстраница|потстраници}}.",
+ "pt-deletepage-list-no-pages": "Не пронајдов ниедна страница.",
+ "pt-deletepage-full-logreason": "Дел од преводливата страница „$1“.",
+ "pt-deletepage-lang-logreason": "Дел од страницата со превод „$1“.",
+ "pt-deletepage-started": "Погледајте го [[$1|дневникот]] за грешки и порака при завршувањето.",
+ "pt-deletepage-intro": "Оваа службена страница овозможува бришење на цела преводлива страница, купче пораки или поединечна страница за превод на некој јазик.\nБришењето не делува веднаш, бидејќи ќе се бришат и сите страници што зависат од неа.\nНеуспешните обиди ќе се заведуваат во [[$1|дневникот на страници за превод]] и ќе треба да се исправаат рачно.",
+ "pagemigration": "Селење на преводни страници",
+ "pagemigration-summary": "Укажете преводна страница и возобновете било кој превод направен пред појавувањето на системот за преведување на таа страница.",
+ "pm-import-button-label": "Увези",
+ "pm-savepages-button-label": "Зачувај",
+ "pm-cancel-button-label": "Откажи",
+ "pm-page-does-not-exist": "$1 не постои",
+ "pm-old-translations-missing": "$1 не содржи стари преводи",
+ "pm-extra-units-warning": "Може да има дополнителни единици. Погрижете се да соодветствуваат единиците во изворниот текст и преводот",
+ "pm-pagename-missing": "Внесете име на страница",
+ "pm-add-icon-hover-text": "Додај единица подолу",
+ "pm-swap-icon-hover-text": "Замени ја единицата подолу",
+ "pm-delete-icon-hover-text": "Избриши единица",
+ "pm-pagetitle-placeholder": "Внесете има на страницата",
+ "pm-pagetitle-invalid": "Преселбата на страници работи само на преводни страници, како на пр. „Page/mk“. Укажаниот наслов е неважечки.",
+ "pm-pagetitle-missing": "Внесете име на страница.",
+ "pm-langcode-missing": "Преселбата на страници работи само на преводни страници, како на пр. „Page/mk“. Укажаниот наслов не е преводна страница.",
+ "pm-summary-import": "Увезен превод користејќи [[Special:PageMigration|преселба на страници]]",
+ "pm-on-import-message-text": "Старите преводи се увезени. Послужете се со можностите за додавање, замена и бришење за да ги прилагодите преводните единици и стиснете на копчето „{{int:pm-savepages-button-label}}“ за да ги зачувате. Стиснете на копчето „{{int:pm-cancel-button-label}}“ за да ги отфрлите.",
+ "pm-on-save-message-text": "Преводните единици се зачувани. Сега можете да внесете наслов на новата преводна страница за да ја преселите, или да направите измени во единиците подолу и да зачувате нова преработка.",
+ "pm-pagetitle-not-translatable": "$1 не е дел од преводлива страница.",
+ "pm-translation-unit-fetch-failed": "Се јави грешка при добивањето на преводните единици за страницата.",
+ "tpt-translate-title": "Дозволи превод на насловот на страницата",
+ "pp-save-summary": "Подготвена страница за превод",
+ "pagepreparation": "Подготвена страница за превод",
+ "pagepreparation-summary": "Укажете наслов на страница за преведување.",
+ "pp-pagename-placeholder": "Внесете име на страницата",
+ "pp-prepare-button-label": "Подготви",
+ "pp-save-button-label": "Објави",
+ "pp-cancel-button-label": "Откажи",
+ "pp-save-message": "Оваа страница е објавена. Можете да ја [$1 измените].",
+ "pp-prepare-message": "Страницата е подготвена за преведување. Погледајте ја разликата подолу. Стиснете на „{{int:pp-save-button-label}}“ ако мислите дека сè е во ред!",
+ "pp-already-prepared-message": "Се чини дека страницата е веќе подготвена за превод. Нема промени во однос на минатата верзија.",
+ "pp-diff-error": "Се јави грешка при добивањето на разликите од опслужувачот.",
+ "pp-pagename-missing": "Внесете име на страницата.",
+ "pp-diff-old-header": "Изворен текст",
+ "pp-diff-new-header": "Подготвен текст",
+ "tpt-unlink-confirm": "Потврдете дека навистина сакате да ја отстраните страницава од преводниот систем.\nЈазичниот избирач и преведените имиња на страниците ќе престанат да работат.\nПреводните страници ќе станат уредливи.",
+ "tpt-unlink-button": "Отстрани од преводот",
+ "tpt-unlink-summary": "Отстранета страница од преводот",
+ "tpt-generic-confirm": "Потврдете го дејството.",
+ "tpt-generic-button": "Потврди",
+ "tpt-validation-not-insertable": "Преводната променлива „$1“ не работи како вметлива во преводниот посредник. Избегнувајте употреба на посебни знаци.",
+ "tpt-validation-name-reuse": "Преводната променлива „$1“ е зададена повеќепати со различна содржина. Сменете ги имињата на променливите за да бидат различни, секоја за своја преводна единица.",
+ "visualeditor-annotations-translate-start": "Почеток на содржината за преведување",
+ "visualeditor-annotations-translate-end": "Крај на содржината за преведување",
+ "visualeditor-annotations-translate-description": "Овој опсег е означен како преводлив. Следете ги правилата за [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text промена на изворен текст].",
+ "visualeditor-annotations-tvar-start": "Почеток на непреводливата содржина",
+ "visualeditor-annotations-tvar-end": "Крај на непреводливата содржина",
+ "visualeditor-annotations-tvar-description": "Овој опсег е означен како непреводлив. Повеќе информации ќе добиете на страницата [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Segmentation Разделување на изворниот текст]."
+}
diff --git a/Translate/i18n/pagetranslation/ml.json b/Translate/i18n/pagetranslation/ml.json
new file mode 100644
index 00000000..5f4941ef
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ml.json
@@ -0,0 +1,66 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kavya Manohar",
+ "Praveenp",
+ "Santhosh.thottingal"
+ ]
+ },
+ "pagetranslation": "താളിന്റെ പരിഭാഷ",
+ "right-pagetranslation": "താളുകളുടെ പതിപ്പുകൾ പരിഭാഷക്കായി അടയാളപ്പെടുത്തുക",
+ "action-pagetranslation": "പരിഭാഷപ്പെടുത്താവുന്ന താളുകൾ കൈകാര്യം ചെയ്യുക",
+ "tpt-section": "പരിഭാഷാ ഘടകം $1",
+ "tpt-section-new": "പുതിയ പരിഭാഷാ ഘടകം.\nപേര്: $1",
+ "tpt-section-deleted": "പരിഭാഷാ ഘടകം $1",
+ "tpt-diff-old": "പഴയ എഴുത്ത്",
+ "tpt-diff-new": "പുതിയ എഴുത്ത്",
+ "tpt-submit": "ഈ പതിപ്പ് പരിഭാഷയ്ക്കായി അടയാളപ്പെടുത്തുക",
+ "tpt-sections-oldnew": "പുതിയതും നിലവിലുള്ളതുമായ പരിഭാഷാ ഘടകങ്ങൾ",
+ "tpt-sections-deleted": "മായ്ക്കപ്പെട്ട പരിഭാഷാ ഘടകങ്ങൾ",
+ "tpt-sections-template": "പരിഭാഷാ താളിന്റെ രൂപഫലകം",
+ "tpt-action-nofuzzy": "പരിഭാഷകൾ അസാധുവാണെന്ന് അടയാളപ്പെടുത്തരുത്",
+ "tpt-badtitle": "താളിനു നൽകിയ പേര് ($1) സാധുവായ തലക്കെട്ട് അല്ല",
+ "tpt-nosuchpage": "$1 എന്ന താൾ നിലവിലില്ല.",
+ "tpt-edit-failed": "താൾ പുതുക്കാൻ കഴിഞ്ഞില്ല: $1",
+ "tpt-old-pages-title": "പരിഭാഷയിലുള്ള താളുകൾ",
+ "tpt-other-pages-title": "പൊട്ടിയ താളുകൾ",
+ "tpt-select-prioritylangs-reason": "കാരണം:",
+ "tpt-rev-discourage": "നിരുത്സാഹപ്പെടുത്തുക",
+ "tpt-rev-encourage": "പുനഃസ്ഥാപിക്കുക",
+ "translate-tag-translate-link-desc": "ഈ താൾ പരിഭാഷപ്പെടുത്തുക",
+ "tpt-translation-intro": "ഈ താൾ [[$2]] എന്ന താളിന്റെ <span class=\"plainlinks\">[$1 പരിഭാഷ]</span> ആണ്, പരിഭാഷ $3% പൂർണ്ണമാണ്.",
+ "tpt-languages-legend": "മറ്റു ഭാഷകൾ:",
+ "tpt-languages-zero": "ഈ ഭാഷയിൽ പരിഭാഷ തുടങ്ങുക",
+ "tpt-languages-nonzero": "$1 ($2% പരിഭാഷപ്പെടുത്തി)",
+ "tpt-tab-translate": "പരിഭാഷപ്പെടുത്തുക",
+ "tpt-target-page": "ഈ താൾ താങ്കൾക്ക് പുതുക്കാൻ കഴിയില്ല.\nഈ താൾ [[$1]] എന്ന താളിന്റെ പരിഭാഷയാണ്, പരിഭാഷ പുതുക്കാൻ [$2 പരിഭാഷാ ഉപകരണം] ഉപയോഗിക്കുക.",
+ "tpt-aggregategroup-add": "കൂട്ടിച്ചേർക്കുക",
+ "tpt-aggregategroup-save": "സേവ് ചെയ്യുക",
+ "tpt-aggregategroup-new-name": "പേര്:",
+ "tpt-aggregategroup-new-description": "വിവരണം (ഐച്ഛികം):",
+ "log-name-pagetranslation": "താൾ പരിഭാഷാ രേഖ",
+ "pt-movepage-list-pages": "മാറ്റേണ്ട താളുകളുടെ പട്ടിക",
+ "pt-movepage-list-translation": "പരിഭാഷാ{{PLURAL:$1|താൾ|താളുകൾ}}",
+ "pt-movepage-list-section": "ഉപവിഭാഗ താളുകൾ",
+ "pt-movepage-list-other": "മറ്റ് ഉപതാളുകൾ",
+ "pt-movepage-legend": "പരിഭാഷപ്പെടുത്താവുന്ന താൾ നീക്കുക",
+ "pt-movepage-current": "ഇപ്പോഴത്തെ പേര്:",
+ "pt-movepage-new": "പുതിയ പേര്:",
+ "pt-movepage-reason": "കാരണം:",
+ "pt-movepage-subpages": "എല്ലാ ഉപതാളുകളും മാറ്റുക",
+ "pt-movepage-action-check": "മാറ്റൽ സാദ്ധ്യമാണോയെന്നു പരിശോധിക്കുക",
+ "pt-movepage-action-perform": "മാറ്റുക",
+ "pt-movepage-action-other": "ലക്ഷ്യം മാറ്റുക",
+ "pt-deletepage-action-check": "മായ്ക്കേണ്ട താളുകളുടെ പട്ടിക നൽകുക",
+ "pt-deletepage-action-perform": "മായ്ക്കൽ നടപ്പിൽ വരുത്തുക",
+ "pt-deletepage-action-other": "ലക്ഷ്യം മാറ്റുക",
+ "pt-deletepage-lang-legend": "പരിഭാഷാ താൾ മായ്ക്കുക",
+ "pt-deletepage-tp-legend": "പരിഭാഷപ്പെടുത്താവുന്ന താൾ മായ്ക്കുക",
+ "pt-deletepage-current": "താളിന്റെ പേര്:",
+ "pt-deletepage-reason": "കാരണം:",
+ "pt-deletepage-subpages": "എല്ലാ ഉപതാളുകളും മായ്ക്കുക",
+ "pt-deletepage-list-pages": "മായ്ക്കേണ്ട താളുകളുടെ പട്ടിക",
+ "pt-deletepage-list-translation": "പരിഭാഷാ താളുകൾ",
+ "pt-deletepage-list-section": "ഉപവിഭാഗ താളുകൾ",
+ "pt-deletepage-list-other": "മറ്റ് ഉപതാളുകൾ"
+}
diff --git a/Translate/i18n/pagetranslation/mn.json b/Translate/i18n/pagetranslation/mn.json
new file mode 100644
index 00000000..c9110df2
--- /dev/null
+++ b/Translate/i18n/pagetranslation/mn.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chinneeb",
+ "Wisdom"
+ ]
+ },
+ "tpt-invalid-group": "Буруу бүлэг",
+ "pt-movepage-reason": "Шалтгаан:",
+ "pm-pagetitle-invalid": "Тохирох гарчиг өгнө үү"
+}
diff --git a/Translate/i18n/pagetranslation/mnc.json b/Translate/i18n/pagetranslation/mnc.json
new file mode 100644
index 00000000..b8f99ac9
--- /dev/null
+++ b/Translate/i18n/pagetranslation/mnc.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Foavi33"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% aifini ubaliyabuhe)"
+}
diff --git a/Translate/i18n/pagetranslation/mni.json b/Translate/i18n/pagetranslation/mni.json
new file mode 100644
index 00000000..4c5e41a3
--- /dev/null
+++ b/Translate/i18n/pagetranslation/mni.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Awangba Mangang"
+ ]
+ },
+ "tpt-languages-nonzero": "$1($2% ꯍꯟꯗꯣꯛꯂꯦ)"
+}
diff --git a/Translate/i18n/pagetranslation/mnw.json b/Translate/i18n/pagetranslation/mnw.json
new file mode 100644
index 00000000..1003ba62
--- /dev/null
+++ b/Translate/i18n/pagetranslation/mnw.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Htawmonzel"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% ကၠာဲစၠောအ်လဝ်)"
+}
diff --git a/Translate/i18n/pagetranslation/mo.json b/Translate/i18n/pagetranslation/mo.json
new file mode 100644
index 00000000..a3a0406f
--- /dev/null
+++ b/Translate/i18n/pagetranslation/mo.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cybernenea11"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% традусэ)"
+}
diff --git a/Translate/i18n/pagetranslation/mr.json b/Translate/i18n/pagetranslation/mr.json
new file mode 100644
index 00000000..499aca88
--- /dev/null
+++ b/Translate/i18n/pagetranslation/mr.json
@@ -0,0 +1,122 @@
+{
+ "@metadata": {
+ "authors": [
+ "V.narsikar",
+ "Vb2055",
+ "संतोष दहिवळ"
+ ]
+ },
+ "pagetranslation": "भाषांतराची पाने.",
+ "right-pagetranslation": "पानांच्या भाषांतरासाठी असलेल्या आवृत्त्यांवर खूण करा",
+ "action-pagetranslation": "भाषांतरासाठी असलेल्या पानांचे व्यवस्थापन करा",
+ "tpt-section": "भाषांतर एकक $1",
+ "tpt-section-new": "नविन भाषांतर एकक.\nनाव:$1",
+ "tpt-section-deleted": "भाषांतर एकक $1",
+ "tpt-diff-old": "पूर्वीचा मजकूर",
+ "tpt-diff-new": "नविन मजकूर",
+ "tpt-submit": "या आवृत्तीस 'भाषांतरासाठी' म्हणून खूण करा",
+ "tpt-sections-oldnew": "नविन व अस्तित्वातील भाषांतर एकके",
+ "tpt-sections-deleted": "वगळलेली भाषांतर एकके",
+ "tpt-sections-template": "भाषांतर पान साचा",
+ "tpt-action-nofuzzy": "भाषांतरे अवैध ठरवू नका",
+ "tpt-badtitle": "दिलेले पान शीर्षक ($1) हे वैध नाही.",
+ "tpt-nosuchpage": "पान $1 अस्तीत्वात नाही",
+ "tpt-oldrevision": "$2 ही [[:$1]] पानाची नविनतम आवृत्ती नाही.\nफक्त अद्यतन आवृत्तीवरच 'भाषांतरासाठी' म्हणून खूण करता येते.",
+ "tpt-notsuitable": "पान $1 हे भाषांतरासाठी अनुकुल नाही.\nयाची खात्री करा कि त्यात,<nowiki><translate></nowiki>ही खूणपताका आहे व त्यात वैध वाक्यरचना आहे.",
+ "tpt-saveok": "पान [[:$1]] हे $2 {{PLURAL:$2|भाषांतर एककाला|भाषांतर एककांना}} भाषांतरासाठी नेमून दिले आहे.त्या पानाचे आता<span class=\"plainlinks\">[$3 भाषांतर करता येते]</span>.",
+ "tpt-offer-notify": "आपण या पानाबाबत <span class=\"plainlinks\">[$1 भाषांतरकारांना सूचना देउ शकता]</span>",
+ "tpt-showpage-intro": "खाली नविन, अस्तित्वातील व वगळलेली भाषांतर एककांची यादी आहे.ही आवृत्ती भाषांतरासाठी म्हणून खूण करण्यापूर्वी,भाषांतरकारांचे अवाजवी काम टाळण्यासाठी, हे तपासा कि भाषांतर एककात कमीतकमी बदल आहेत.",
+ "tpt-mark-summary": "या आवृत्तीवर 'भाषांतरासाठी' म्हणून खूण केली",
+ "tpt-edit-failed": "पानाचे अद्यतन करता आले नाही:$1",
+ "tpt-duplicate": "भाषांतर एककाचे नाव $1 हे एकाधिक वापरल्या गेले.",
+ "tpt-unmarked": "पान $1 यावर आता 'भाषांतरासाठी' म्हणून खूण नाही.",
+ "tpt-list-nopages": "कोणत्याही पानावर 'भाषांतरासाठी' म्हणून खूण नाही किंवा ती,अशी खूण करण्यासाठी तयार नाहीत.",
+ "tpt-new-pages-title": "भाषांतरासाठी प्रस्तावित पाने",
+ "tpt-old-pages-title": "भाषांतरांतर्गत असलेली पाने",
+ "tpt-other-pages-title": "तुटक पाने",
+ "tpt-new-pages": "{{PLURAL:$1|या पानात|या पानांत}} भाषांतर खूणपताका असणारा मजकूर आहे.\n\nपरंतु, {{PLURAL:$1|या पानाच्या|या पानांच्या}} आवृत्तीवर सध्या 'भाषांतरासाठी' म्हणून खूण केलेली नाही",
+ "tpt-old-pages": "{{PLURAL:$1|या पानाची काही आवृत्ती|या पानांच्या काही आवृत्त्या}} या 'भाषांतरासाठी' म्हणून खूण केलेल्या आहेत.",
+ "tpt-other-pages": "{{PLURAL:$1|या पानाची जूनी आवृत्ती|या पानांच्या जून्या आवृत्त्या}} ह्या भाषांतरासाठी खूण केलेल्या आहेत,\nपरंतु नविनतम {{PLURAL:$1|आवृत्ती|आवृत्त्या}} यावर भाषांतरासाठी खूण करू शकत नाही.",
+ "tpt-select-prioritylangs": "प्राथम्यक्रमित भाषा संकेतांची, स्वल्पविरामाने वेगळी केलेली यादी:",
+ "tpt-select-prioritylangs-force": "प्राथम्यक्रमित भाषेशिवाय इतरात भाषांतरास अटकाव करा",
+ "tpt-select-prioritylangs-reason": "कारण:",
+ "tpt-sections-prioritylangs": "प्राथम्यक्रमित भाषा",
+ "tpt-rev-mark": "भाषांतरासाठी म्हणून खूण करा",
+ "tpt-rev-unmark": "भाषांतरातून काढा",
+ "tpt-rev-discourage": "प्रोत्साहन देउ नका",
+ "tpt-rev-encourage": "पुनर्स्थापन करा",
+ "tpt-rev-mark-tooltip": "या पानाची नविनतम आवृत्तीस भाषांतरासाठी म्हणून खूण करा.",
+ "tpt-rev-unmark-tooltip": "या पानास भाषांतरातून काढा",
+ "tpt-rev-discourage-tooltip": "या पानाच्या पुढील भाषांतरास प्रोत्साहन देउ नका.",
+ "tpt-rev-encourage-tooltip": "या पानाची नियमित भाषांतरासाठी पुनर्स्थापना करा.",
+ "translate-tag-translate-link-desc": "या पानाचे भाषांतर करा",
+ "translate-tag-markthis": "या पानास 'भाषांतरासाठी' म्हणून खूण करा",
+ "tpt-languages-legend": "इतर भाषा:",
+ "tpt-languages-zero": "या भाषेत भाषांतर सुरू करा",
+ "tpt-languages-nonzero": "$1 ($2% भाषांतरीत)",
+ "tpt-tab-translate": "भाषांतर करा",
+ "tpt-translation-restricted": "या पानाच्या या भाषेतील भाषांतरास, भाषांतर प्रशासकाने अटकाव केलेला आहे.\n\nकारण:$1",
+ "tpt-discouraged-language-force-header": "या पानाचे $1 ला भाषांतर होउ शकत नाही.",
+ "tpt-discouraged-language-force-content": "भाषांतर प्रशासकाने, या पानाचे $1 ला भाषांतर करण्याचे ठरविले आहे.",
+ "tpt-discouraged-language-header": "$1 ला भाषांतर करणे ही या पानाची प्राथमिकता नाही.",
+ "tpt-discouraged-language-content": "भाषांतर प्रशासकाने भाषांतराचे प्रयत्न $1 वर केंद्रित करण्याचे ठरविले आहे.",
+ "tpt-discouraged-language-force": "<strong>हे पान $2 भाषेत भाषांतरीत करता येणार नाही.</strong>भाषांतर प्रशासकाने निर्णय घेतला आहे कि या पानाचे भाषांतर फक्त $3 मध्ये करता येईल.",
+ "tpt-priority-languages": "भाषांतर प्रशासकाने, या गटाची $1 ही प्राथमिकता-भाषा निश्चित केली आहे.",
+ "tpt-render-summary": "स्रोत-पानाच्या नविन आवृत्तीस अनुरुपनासाठी अद्यतन करीत आहे.",
+ "aggregategroups": "एकवित गट",
+ "tpt-aggregategroup-add": "जोडा",
+ "tpt-aggregategroup-save": "जतन करा",
+ "tpt-aggregategroup-add-new": "नविन एकवित गट जोडा",
+ "tpt-aggregategroup-new-name": "नाव:",
+ "tpt-aggregategroup-new-description": "वर्णन (ऐच्छिक):",
+ "tpt-aggregategroup-remove-confirm": "आपणास खात्री आहे काय कि आपणास हा एकवित गट वगळायचा आहे?",
+ "tpt-aggregategroup-invalid-group": "गट अस्तित्वात नाही",
+ "tpt-aggregategroup-edit-name": "नाव:",
+ "tpt-aggregategroup-edit-description": "वर्णन:",
+ "tpt-aggregategroup-update": "जतन करा",
+ "tpt-aggregategroup-update-cancel": "रद्द करा",
+ "tpt-invalid-group": "अग्राह्य गट",
+ "log-name-pagetranslation": "पान भाषांतर नोंदी",
+ "pt-movepage-list-pages": "स्थानांतर आवश्यक असणाऱ्या पानांची यादी",
+ "pt-movepage-current": "सध्याचे नाव:",
+ "pt-movepage-new": "नविन नाव:",
+ "pt-movepage-reason": "कारण:",
+ "pt-movepage-subpages": "सर्व उपपाने हलवा",
+ "pt-movepage-action-check": "स्थानांतरण शक्य आहे काय ते तपासा",
+ "pt-movepage-action-perform": "स्थानांतरण करु नका",
+ "pt-movepage-action-other": "लक्ष्य बदला",
+ "pt-deletepage-action-check": "वगळावयाच्या पानांची यादी",
+ "pt-deletepage-action-perform": "वगळा",
+ "pt-deletepage-action-other": "लक्ष्य बदला",
+ "pt-deletepage-current": "पृष्ठ नाव:",
+ "pt-deletepage-reason": "कारण:",
+ "pt-deletepage-subpages": "सर्व उपपाने वगळा",
+ "pt-deletepage-list-pages": "वगळावयाच्या पानांची यादी",
+ "pt-deletepage-list-translation": "भाषांतरासाठीची पाने",
+ "pt-deletepage-list-section": "भाषांतर एकक पाने",
+ "pt-deletepage-list-other": "इतर उपपाने",
+ "pagemigration": "भाषांतर पानाचे स्थानांतरण",
+ "pm-import-button-label": "आयात करा",
+ "pm-savepages-button-label": "जतन करा",
+ "pm-cancel-button-label": "रद्द करा",
+ "pm-page-does-not-exist": "$1 अस्तीत्वात नाही",
+ "pm-old-translations-missing": "$1 मध्ये जूनी भाषांतरे नाहीत",
+ "pm-pagename-missing": "कृपया पानाचे नाव टाका",
+ "pm-add-icon-hover-text": "खाली एकक जोडा",
+ "pm-delete-icon-hover-text": "एकक वगळा",
+ "pm-pagetitle-invalid": "कृपया वैध पान शिर्षक टाका",
+ "pm-langcode-missing": "कृपया भाषासंकेत टाका",
+ "tpt-translate-title": "पान शिर्षकाच्या भाषांतरास परवानगी द्या",
+ "pp-save-summary": "भाषांतरासाठी पान तयार केले",
+ "pagepreparation": "भाषांतरासाठी पान तयार करा",
+ "pp-pagename-placeholder": "पानाचे नाव टाका",
+ "pp-prepare-button-label": "तयार करा",
+ "pp-save-button-label": "जतन करा",
+ "pp-cancel-button-label": "रद्द करा",
+ "pp-save-message": "पान जतन केले आहे. आपण [$1 संपादन] करू शकता.",
+ "pp-pagename-missing": "कृपया पानाचे नाव टाका.",
+ "pp-diff-old-header": "स्रोत मजकूर",
+ "pp-diff-new-header": "तयार केलेला मजकूर",
+ "tpt-unlink-button": "भाषांतरातून काढा",
+ "tpt-unlink-summary": "पानास भाषांतरातून काढले"
+}
diff --git a/Translate/i18n/pagetranslation/mrh.json b/Translate/i18n/pagetranslation/mrh.json
new file mode 100644
index 00000000..dfa36777
--- /dev/null
+++ b/Translate/i18n/pagetranslation/mrh.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kiathy",
+ "Teitei Para"
+ ]
+ },
+ "pagetranslation": "Châhmia reihpaleina",
+ "right-pagetranslation": "Reihpaleina châta châhmiazy vâsiezy âbina tao",
+ "action-pagetranslation": "reihpalei theipa châhmiazy kha tiehparaih teih",
+ "tps-edit-sourcepage-text": "Nâ cha reihpaleina châhmia hnawh sâkha na taopathi hai. Ary lâta piepa châhna-rahvozy nata hmia nâ pahnopa pasia bei mah y: \n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text Changing the source text] \n\n* [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Markup_examples Example of markup to use]",
+ "tpt-languages-nonzero": "$1 (reihpalei hawpa $2)"
+}
diff --git a/Translate/i18n/pagetranslation/ms-arab.json b/Translate/i18n/pagetranslation/ms-arab.json
new file mode 100644
index 00000000..5a1ea647
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ms-arab.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Tofeiku"
+ ]
+ },
+ "pagetranslation": "ترجمهن لامن",
+ "tpt-rev-encourage": "ڤوليهکن",
+ "translate-tag-translate-link-desc": "ترجمه لامن اين",
+ "tpt-translation-intro": "لامن اين مروڤاکن <span class=\"plainlinks\">[$1 ۏرسي ترجمهن]</span> لامن [[$2]] ڤنترجمهنڽ $3% سياڤ.",
+ "tpt-languages-legend": "بهاس٢ لاءين:",
+ "tpt-languages-nonzero": "$1 ($2% دترجمه)",
+ "tpt-tab-translate": "ترجمه",
+ "tpt-aggregategroup-add": "تمبه",
+ "tpt-aggregategroup-save": "سيمڤن",
+ "tpt-aggregategroup-new-name": "نام:",
+ "tpt-aggregategroup-edit-name": "نام:",
+ "tpt-aggregategroup-edit-description": "کترڠن:",
+ "tpt-aggregategroup-update": "سيمڤن",
+ "tpt-aggregategroup-update-cancel": "بطل",
+ "pm-savepages-button-label": "سيمڤن",
+ "pm-cancel-button-label": "بطل",
+ "pp-save-button-label": "تربيت",
+ "pp-cancel-button-label": "بطل",
+ "tpt-generic-button": "صحکن"
+}
diff --git a/Translate/i18n/pagetranslation/ms.json b/Translate/i18n/pagetranslation/ms.json
new file mode 100644
index 00000000..d899f551
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ms.json
@@ -0,0 +1,160 @@
+{
+ "@metadata": {
+ "authors": [
+ "Anakmalaysia",
+ "Jeluang Terluang",
+ "Muhdnurhidayat",
+ "Pizza1016",
+ "Tofeiku"
+ ]
+ },
+ "pagetranslation": "Penterjemahan laman",
+ "right-pagetranslation": "Menandai versi-versi laman untuk diterjemah",
+ "action-pagetranslation": "menguruskan halaman-halaman yang boleh diterjemah",
+ "tpt-section": "Unit penterjemahan $1",
+ "tpt-section-new": "Unit penterjemahan baru.\nNama: $1",
+ "tpt-section-deleted": "Unit penterjemahan $1",
+ "tpt-diff-old": "Teks sebelumnya",
+ "tpt-diff-new": "Teks baru",
+ "tpt-submit": "Tandai versi ini untuk diterjemah",
+ "tpt-sections-oldnew": "Unit penterjemahan yang baru dan sedia ada",
+ "tpt-sections-deleted": "Unit penterjemahan yang dihapuskan",
+ "tpt-sections-template": "Templat laman penterjemahan",
+ "tpt-action-nofuzzy": "Jangan taksahkan terjemahan",
+ "tpt-badtitle": "Nama laman yang diberikan ($1) bukan tajuk yang sah",
+ "tpt-nosuchpage": "Halaman $1 tidak wujud",
+ "tpt-oldrevision": "$2 bukan versi terkini laman [[:$1]].\nHanya versi terkini boleh ditandai untuk penterjemahan.",
+ "tpt-notsuitable": "Laman $1 tidak sesuai untuk diterjemah.\nPastikan ia ada tag <nowiki><translate></nowiki> dan sintaks yang sah.",
+ "tpt-saveok": "Laman [[:$1]] telah ditandai untuk penterjemahan dengan $2 unit penterjemahan.\nLaman ini kini boleh <span class=\"plainlinks\">[$3 diterjemah]</span>.",
+ "tpt-offer-notify": "Anda boleh <span class=\"plainlinks\">[$1 memaklumkan para penterjemah]</span> tentang halaman ini.",
+ "tpt-showpage-intro": "Di bawah tersenarainya unit-unit terjemahan yang baru, sedia ada dan terhapus.\nSebelum menandai versi ini untuk diterjemah, pastikan supaya perubahan kepada unit terjemahan diminimumkan untuk mengelakkan beban yang tidak perlu untuk penterjemah.",
+ "tpt-mark-summary": "Menandakan versi ini untuk diterjemah",
+ "tpt-mark-nochanges": "Tiada perbezaan antara semakan ini dengan semakan tertanda yang terdahulu.",
+ "tpt-edit-failed": "Laman ini tidak dapat dikemas kini: $1",
+ "tpt-duplicate": "Nama unit terjemahan $1 terguna lebih daripada sekali.",
+ "tpt-unmarked": "Laman $1 tidak lagi ditandai untuk diterjemah.",
+ "tpt-list-nopages": "Tiadanya laman yang ditandai untuk diterjemah atau sedia ditandai untuk diterjemah.",
+ "tpt-new-pages-title": "Laman yang diusulkan untuk diterjemah",
+ "tpt-old-pages-title": "Laman yang sedang diterjemah",
+ "tpt-other-pages-title": "Laman yang rosak",
+ "tpt-new-pages": "{{PLURAL:$1|Laman|Laman-laman}} ini mengandungi teks dengan tag penterjemahan,\ntetapi tiada versi yang ditandai untuk diterjemah.",
+ "tpt-old-pages": "Suatu versi {{PLURAL:$1|laman|laman-laman}} ini telah ditandai untuk diterjemah.",
+ "tpt-other-pages": "{{PLURAL:$1|Satu versi lama laman|Versi lama laman-laman}} ini ditandai untuk diterjemah,\ntetapi {{PLURAL:$1|versi|versi-versi}} terkini tidak boleh ditandai untuk diterjemah.",
+ "tpt-select-prioritylangs": "Senarai kod bahasa keutamaan yang diasingkan dengan koma:",
+ "tpt-select-prioritylangs-force": "Larang terjemahan ke bahasa-bahasa selain bahasa keutamaan",
+ "tpt-select-prioritylangs-reason": "Sebab:",
+ "tpt-sections-prioritylangs": "Bahasa keutamaan",
+ "tpt-rev-mark": "tempah untuk penterjemahan",
+ "tpt-rev-unmark": "gugurkan daripada penterjemahan",
+ "tpt-rev-discourage": "tegah",
+ "tpt-rev-encourage": "pulihkan",
+ "tpt-rev-mark-tooltip": "Tempah versi terbaru laman ini untuk diterjemahkan.",
+ "tpt-rev-unmark-tooltip": "Gugurkan laman ini daripada penterjemahan.",
+ "tpt-rev-discourage-tooltip": "Tegah penterjemahan lanjutan bagi laman ini.",
+ "tpt-rev-encourage-tooltip": "Pulihkan laman ini kepada penterjemahan biasa.",
+ "translate-tag-translate-link-desc": "Terjemahkan laman ini",
+ "translate-tag-markthis": "Tandai laman ini untuk diterjemah",
+ "translate-tag-markthisagain": "Laman ini mengalami <span class=\"plainlinks\">[$1 perubahan]</span> sejak kali terakhir <span class=\"plainlinks\">[$2 ditandai untuk diterjemah]</span>.",
+ "translate-tag-hasnew": "Laman ini mengalami <span class=\"plainlinks\">[$1 perubahan]</span> yang belum ditandai untuk diterjemah.",
+ "tpt-translation-intro": "Laman ini merupakan <span class=\"plainlinks\">[$1 versi terjemahan]</span> laman [[$2]] dan penterjemahannya $3% siap.",
+ "tpt-translation-intro-fuzzy": "Terjemahan yang lapuk ditandai sebegini.",
+ "tpt-languages-legend": "Bahasa lain:",
+ "tpt-languages-separator": "&#160;•&#32;",
+ "tpt-languages-zero": "Mulakan terjemahan dalam bahasa ini",
+ "tpt-languages-nonzero": "$1 ($2% diterjemah)",
+ "tpt-tab-translate": "Terjemah",
+ "tpt-target-page": "Laman ini tidak boleh dikemaskini secara manual.\nLaman ini merupakan terjemahan laman [[$1]], dan terjemahannya boleh dikemas kini dengan menggunakan [$2 alatan penterjemahan].",
+ "tpt-unknown-page": "Ruang nama ini ditempah untuk penterjemahan laman kandungan.\nLaman yang anda cuba sunting itu nampaknya tidak berpadan dengan sebarang laman yang ditandai untuk diterjemah.",
+ "tpt-translation-restricted": "Penterjemahan laman ini kepada bahasa ini telah disekat oleh seorang penyelia penterjemahan.\n\nSebab: $1",
+ "tpt-discouraged-language-force-header": "Halaman ini tidak boleh diterjemahkan ke $1.",
+ "tpt-discouraged-language-force-content": "Seorang penyelia penterjemahan telah memutuskan bahawa halaman ini hanya boleh diterjemahkan ke $1.",
+ "tpt-discouraged-language-header": "Penterjemahan ke $1 bukan keutamaan bagi halaman ini.",
+ "tpt-discouraged-language-content": "Seorang penyelia penterjemahan telah memutuskan untuk menumpukan usaha penterjemahan kepada $1.",
+ "tpt-discouraged-language-force": "<strong>Halaman ini tidak boleh diterjemahkan kepada bahasa $2.</strong>\n\nPenyelia penterjemahan telah memutuskan bahawa halaman ini boleh diterjemahkan kepada bahasa $3 sahaja.",
+ "tpt-priority-languages": "Seorang penyelia penterjemahan telah menetapkan bahasa-bahasa utama kumpulan ini kepada: $1",
+ "tpt-priority-languages-force": "Penyelia terjemahan telah menetapkan bahasa-bahasa keutamaan kepada $1 bagi kumpulan ini. Tidak dibenarkan menterjemah kepada bahasa-bahasa lain.",
+ "tpt-render-summary": "Mengemas kini agar sepadan dengan versi baru laman sumber",
+ "aggregategroups": "Kumpulan agregat",
+ "tpt-aggregategroup-add": "Tambahkan",
+ "tpt-aggregategroup-save": "Simpan",
+ "tpt-aggregategroup-add-new": "Tambahkan kumpulan agregat baru",
+ "tpt-aggregategroup-new-name": "Nama:",
+ "tpt-aggregategroup-new-description": "Keterangan (tidak wajib):",
+ "tpt-aggregategroup-remove-confirm": "Adakah anda benar-benar ingin menghapuskan kumpulan agregat ini?",
+ "tpt-aggregategroup-invalid-group": "Kumpulan tidak wujud",
+ "pt-parse-open": "Tag &lt;translate> tidak seimbang.\nTemplat penterjemahan: <pre>$1</pre>",
+ "pt-parse-close": "Tag &lt;/translate> tidak seimbang.\nTemplat penterjemahan: <pre>$1</pre>",
+ "pt-parse-nested": "Unit terjemahan &lt;translate> yang tersarang tidak dibenarkan.\nTeks tag: <pre>$1</pre>",
+ "pt-shake-multiple": "Berbilang penanda bahagian untuk satu unit terjemahan.\nTeks unit terjemahan: <pre>$1</pre>",
+ "pt-shake-position": "Unit terjemahan di kedudukan yang tidak dijangka.\nTeks unit terjemahan: <pre>$1</pre>",
+ "pt-shake-empty": "Unit terjemahan kosong untuk penanda \"$1\".",
+ "log-description-pagetranslation": "Log untuk tindakan yang berkaitan dengan sistem penterjemahan laman",
+ "log-name-pagetranslation": "Log penterjemahan laman",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|menanda}} $3 untuk diterjemahkan",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|membuang}} $3 dari penterjemahan",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|selesai}} menukar nama halaman boleh terjemah $3 ke dalam $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|menghadapi}} masalah semasa mengalihkan halaman $3 ke $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|selesai}} menghapuskan halaman boleh terjemah $3",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|gagal}} menghapuskan $3 yang tergolong dalam halaman boleh terjemah $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|selesai}} menghapuskan halaman penterjemahan $3",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|gagal}} menghapuskan $3 yang tergolong dalam halaman penterjemahan $4",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|mengesyorkan}} terjemahan untuk $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|menegah}} terjemahan untuk $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|menggugurkan}} bahasa keutamaan dari halaman boleh terjemah $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|menetapkan}} $5 sebagai bahasa keutamaan untuk halaman boleh terjemah $3",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|mengehadkan}} bahasa-bahasa untuk halaman boleh terjemah $3 kepada $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|menambahkan}} halaman boleh terjemah $3 ke dalam kumpulan agregat $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|membuang}} halaman boleh terjemah $3 dari kumpulan agregat $4",
+ "log-action-filter-pagetranslation-prioritylanguages": "Ubah suai bahasa keutamaan",
+ "pt-movepage-title": "Alihkan laman boleh terjemah $1",
+ "pt-movepage-blockers": "Laman boleh terjemah ini tidak boleh dipindahkan ke nama baru atas {{PLURAL:$1|ralat|ralat-ralat}} yang berikut:",
+ "pt-movepage-block-base-invalid": "Halaman boleh terjemah sasaran bukan tajuk yang sah.",
+ "pt-movepage-block-tp-invalid": "Tajuk laman penterjemahan sasaran untuk [[:$1]] adalah tidak sah (terlalu panjang?).",
+ "pt-movepage-block-section-invalid": "Tajuk halaman sasaran \"[[:$1]]\" untuk unit terjemahan itu adalah tidak sah (terlalu panjang?).",
+ "pt-movepage-block-subpage-invalid": "Tajuk sublaman sasaran untuk [[:$1]] adalah tidak sah (terlalu panjang?).",
+ "pt-movepage-list-pages": "Senarai laman untuk dipindahkan",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Halaman|Halaman-halaman}} penterjemahan",
+ "pt-movepage-list-section": "{{PLURAL:$1|Halaman|Halaman-halaman}} unit penterjemahan",
+ "pt-movepage-list-other": "{{PLURAL:$1|Subhalaman|Subhalaman-subhalaman}} yang lain",
+ "pt-movepage-list-count": "Sejumlah $1 laman untuk dipindahkan.",
+ "pt-movepage-legend": "Pindahkan laman yang boleh diterjemah",
+ "pt-movepage-current": "Nama sekarang:",
+ "pt-movepage-new": "Nama baru:",
+ "pt-movepage-reason": "Sebab:",
+ "pt-movepage-subpages": "Pindahkan semua sublaman",
+ "pt-movepage-action-check": "Periksa sama ada langkah ini boleh dilakukan",
+ "pt-movepage-action-perform": "Lakukan pemindahan",
+ "pt-movepage-action-other": "Tukar sasaran",
+ "pt-movepage-intro": "Laman khas ini membolehkan anda untuk memindahkan laman-laman yang ditandai untuk diterjemah.\nTindakan pemindahan itu tidak meninggalkan kesan segera, kerana banyak laman yang perlu dipindahkan.\nSementara laman-laman berkenaan dipindahkan, anda tidak boleh berinteraksi dengan laman-laman yang terlibat.\nKegagalan akan dilogkan dalam [[Special:Log/pagetranslation|log penterjemahan laman]] dan perlu dibaiki dengan tangan.",
+ "pt-movepage-logreason": "Sebahagian laman boleh terjemah $1.",
+ "pt-movepage-started": "Sila periksa [[Special:Log/pagetranslation|log penterjemahan laman]] sekali-sekala untuk ralat dan mesej penyiapan.",
+ "pt-locked-page": "Laman ini dikunci kerana laman boleh terjemah yang terlibat kini sedang dipindahkan.",
+ "pt-deletepage-lang-title": "Menghapuskan laman penterjemahan $1.",
+ "pt-deletepage-tp-title": "Menghapuskan laman boleh terjemah $1.",
+ "pt-deletepage-invalid-title": "Laman yang dinyatakan itu tidak sah.",
+ "pt-deletepage-invalid-text": "Halaman yang dinyatakan bukan halaman yang boleh diterjemah atau halaman terjemahan.",
+ "pt-deletepage-action-check": "Senarai laman yang ingin dihapuskan",
+ "pt-deletepage-action-perform": "Lakukan penghapusan",
+ "pt-deletepage-action-other": "Tukar sasaran",
+ "pt-deletepage-lang-legend": "Hapuskan laman penterjemahan",
+ "pt-deletepage-tp-legend": "Hapuskan laman yang boleh diterjemah",
+ "pt-deletepage-any-legend": "Hapuskan halaman yang boleh diterjemah atau halaman terjemahan",
+ "pt-deletepage-current": "Nama laman:",
+ "pt-deletepage-reason": "Sebab:",
+ "pt-deletepage-subpages": "Hapuskan semua sublaman",
+ "pt-deletepage-list-pages": "Senarai laman untuk dihapuskan",
+ "pt-deletepage-list-translation": "Laman penterjemahan",
+ "pt-deletepage-list-section": "Halaman unit terjemahan",
+ "pt-deletepage-list-other": "Sublaman lain",
+ "pt-deletepage-list-count": "Sejumlah $1 laman untuk dihapuskan.",
+ "pt-deletepage-full-logreason": "Sebahagian laman boleh terjemah $1.",
+ "pt-deletepage-lang-logreason": "Sebahagian laman penterjemahan $1.",
+ "pt-deletepage-started": "Sila periksa [[Special:Log/pagetranslation|log penterjemahan laman]] untuk ralat dan mesej penyiapan.",
+ "pt-deletepage-intro": "Laman khas ini membolehkan anda menghapuskan seluruh laman boleh terjemah atau halaman terjemahan individu dalam sesebuah bahasa.\nTindakan penghapusan itu tidak meninggalkan kesan serta-merta kerana semua halaman yang bergantung padanya akan turut dihapuskan.\nKegagalan akan dilogkan dalam [[Special:Log/pagetranslation|log penterjemahan laman]] dan perlu dibaiki dengan tangan.",
+ "pp-save-button-label": "Terbitkan",
+ "pp-cancel-button-label": "Batalkan",
+ "pp-save-message": "Laman tersebut diterbitkan. Anda boleh [$1 menyuntingnya].",
+ "tpt-unlink-confirm": "Sila sahkan bahawa anda benar-benar ingin menggugurkan laman ini dari sistem penterjemahan.\nPemilih bahasa dan nama-nama laman yang diterjemah akan berhenti berfungsi.\nLaman-laman penterjenahan akan tidak boleh disunting lagi.",
+ "tpt-unlink-button": "Gugurkan dari terjemahan",
+ "tpt-unlink-summary": "Menggugurkan laman dari terjemahan"
+}
diff --git a/Translate/i18n/pagetranslation/mt.json b/Translate/i18n/pagetranslation/mt.json
new file mode 100644
index 00000000..5ba24549
--- /dev/null
+++ b/Translate/i18n/pagetranslation/mt.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chrisportelli",
+ "Leli Forte"
+ ]
+ },
+ "pagetranslation": "Traduzzjoni tal-paġni",
+ "tpt-oldrevision": "$2 mhijiex l-aħħar verżjoni tal-paġna [[:$1]].\nL-aħħar verżjonijiet biss jistgħu jiġu mmarkati għat-traduzzjoni.",
+ "tpt-mark-nochanges": "M'hemm l-ebda differenza bejn din ir-reviżjoni u l-aħħar reviżjoni mmarkata.",
+ "tpt-old-pages": "Xi verżjonijiet ta' {{PLURAL:$1|din il-paġna ġiet immarkata|dawn il-paġni ġew immarkati}} għat-traduzzjoni.",
+ "translate-tag-translate-link-desc": "Ittraduċi din il-paġna",
+ "tpt-languages-legend": "Lingwi oħra:",
+ "tpt-languages-nonzero": "$1 ($2% tradott)",
+ "tpt-aggregategroup-add": "Żid",
+ "tpt-aggregategroup-save": "Salva",
+ "pm-pagetitle-invalid": "Ikteb titlu validu għall-paġna.",
+ "tpt-unlink-confirm": "Jekk jogħġbok ikkonferma li verament tixtieq tneħħi din il-paġna mis-sistema ta' traduzzjoni.\nIs-selettur tal-lingwa u l-ismijiet tal-paġni tradotti ma jibqgħux jaħdmu.\nIl-paġni ta' traduzzjoni se jsiru modifikabbli.",
+ "tpt-unlink-button": "Neħħi mit-traduzzjoni",
+ "tpt-unlink-summary": "Il-paġna tneħħew mit-traduzzjoni"
+}
diff --git a/Translate/i18n/pagetranslation/mwl.json b/Translate/i18n/pagetranslation/mwl.json
new file mode 100644
index 00000000..df43beb2
--- /dev/null
+++ b/Translate/i18n/pagetranslation/mwl.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Athena in Wonderland",
+ "MokaAkashiyaPT"
+ ]
+ },
+ "translate-tag-translate-link-desc": "Traduzir esta páigina",
+ "tpt-languages-nonzero": "$1 ($2% traduzida)"
+}
diff --git a/Translate/i18n/pagetranslation/my.json b/Translate/i18n/pagetranslation/my.json
new file mode 100644
index 00000000..b2f8116f
--- /dev/null
+++ b/Translate/i18n/pagetranslation/my.json
@@ -0,0 +1,112 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dr Lotus Black",
+ "Ninjastrikers",
+ "Teitei Para"
+ ]
+ },
+ "pagetranslation": "စာမျက်နှာ ဘာသာပြန်ခြင်း",
+ "right-pagetranslation": "စာမျက်နှာများ၏ဗားရှင်းကို ဘာသာပြန်အတွက် မှတ်သားရန်",
+ "action-pagetranslation": "ဘာသာပြန်နိုင်သော စာမျက်နှာများကို စီမံရန်",
+ "tps-edit-sourcepage-ve-warning-title": "သတိပေးချက်: မထောက်ခံသော စာမျက်နှာ",
+ "tps-edit-sourcepage-ve-warning-button": "အိုကေ",
+ "tpt-diff-old": "ယခင်စာသား",
+ "tpt-diff-new": "ရှေ့စာသား",
+ "tpt-submit": "ဤဗားရှင်းကို ဘာသာပြန်အတွက် မှတ်သားရန်",
+ "tpt-nosuchpage": "စာမျက်နှာ $1 မတည်ရှိပါ",
+ "tpt-mark-summary": "ဤဗားရှင်းကို ဘာသာပြန်အတွက် မှတ်သားခဲ့သည်",
+ "tpt-edit-failed": "ဤစာမျက်နှာကို မမွမ်းမံနိုင်ပါ: $1",
+ "tpt-new-pages-title": "ဘာသာပြန်အတွက် အဆိုပြုထားသော စာမျက်နှာများ",
+ "tpt-old-pages-title": "ဘာသာပြန်ရှိ စာမျက်နှာများ",
+ "tpt-other-pages-title": "ကျိုးပျက်နေသော စာမျက်နှာများ",
+ "tpt-select-prioritylangs-reason": "အ​ကြောင်း​ပြ​ချက်:",
+ "tpt-sections-prioritylangs": "ဦးစားပေး ဘာသာစကားများ",
+ "tpt-rev-mark": "ဘာသာပြန်အတွက် မှတ်သားရန်",
+ "tpt-rev-unmark": "ဘာသာပြန်မှ ဖယ်ရှားရန်",
+ "tpt-rev-mark-tooltip": "ဤစာမျက်နှာ၏ နောက်ဆုံးဗားရှင်း ဘာသာပြန်အတွက် မှတ်သားရန်",
+ "tpt-rev-unmark-tooltip": "ဘာသာပြန်မှ ဤစာမျက်နှာအား ဖယ်ရှားရန်",
+ "tpt-rev-encourage-tooltip": "ဤစာမျက်နှာကို ပုံမှန်ဘာသာပြန်ခြင်းသို့ ပြန်ထားရန်။",
+ "translate-tag-translate-link-desc": "ဤစာမျက်နှာကို ဘာသာပြန်ပါ",
+ "translate-tag-markthis": "ဘာသာပြန်ခြင်းအတွက် ဤစာမျက်နှာကို မှတ်သားရန်",
+ "tpt-translation-intro": "ဤစာမျက်နှာသည် [[$2]] စာမျက်နှာ၏ <span class=\"plainlinks\">[$1 ဘာသာပြန်ဗားရှင်း]</span>တခုဖြစ်ပြီး ဘာသာပြန်မှုမှာ $3% ပြီးပါပြီ။",
+ "tpt-translation-intro-fuzzy": "ခေတ်နောက်ကျသော ဘာသာပြန်များကို ဤကဲ့သို့ မှတ်သားထားသည်။",
+ "tpt-languages-legend": "အခြားဘာသာစကားများ:",
+ "tpt-languages-zero": "ဤဘာသာစကားအတွက် ဘာသာပြန်ခြင်း စတင်ရန်",
+ "tpt-languages-nonzero": "$1 ($2% ဘာသာပြန်ပြီး)",
+ "tpt-tab-translate": "ဘာသာပြန်ပါ",
+ "tpt-translation-restricted": "ဤစာမျက်ကို ဤဘာသာစကားသို့ ဘာသာပြန်ခြင်းကို ဘာသာပြန် စီမံခန့်ခွဲသူတစ်ဦးမှ တားဆီးထားသည်။\n\nအကြောင်းပြချက်: $1",
+ "tpt-discouraged-language-force-header": "ဤစာမျက်နှာကို $1 သို့ ဘာသာမပြန်နိုင်ပါ",
+ "tpt-discouraged-language-force-content": "ဤစာမျက်နှာကို $1 တစ်ခုတည်းသို့သာ ဘာသာပြန်နိုင်သည်ဟု ဘာသာပြန် စီမံခန့်ခွဲသူတစ်ဦးက ဆုံးဖြတ်ခဲ့သည်။",
+ "tpt-discouraged-language-header": "$1 သို့ ဘာသာပြန်ခြင်းသည် ဤစာမျက်နှာအတွက် ဦးစားပေးမဟုတ်ပါ။",
+ "tpt-discouraged-language-content": "ဘာသာပြန် စီမံခန့်ခွဲသူတစ်ဦးမှ ဘာသာပြန်ခြင်းကို $1 တွင် အာရုံစိုက်ကြရန် ဆုံးဖြတ်ခဲ့သည်။",
+ "tpt-discouraged-language-force": "<strong>ဤစာမျက်နှာကို $2 သို့ ဘာသာမပြန်နိုင်ပါ။</strong>\n\nဘာသာပြန် စီမံခန့်ခွဲသူတစ်ဦးက ဤစာမျက်နှာကို $3 တစ်ခုတည်းသို့သာ ဘာသာပြန်နိုင်သည်ဟု ဆုံးဖြတ်ခဲ့သည်။",
+ "tpt-priority-languages": "ဘာသာပြန် စီမံခန့်ခွဲသူတစ်ဦးက ဤအုပ်စုအတွက် ဦးစားပေးဘာသာစကားများကို $1 သို့ သတ်မှတ်ထားသည်။",
+ "aggregategroups": "စုပေါင်း အုပ်စုများ",
+ "tpt-aggregategroup-add": "ပေါင်းထည့်ရန်",
+ "tpt-aggregategroup-save": "သိမ်းရန်",
+ "tpt-aggregategroup-add-new": "စုပေါင်းအုပ်စု အသစ်တစ်ခု ပေါင်းထည့်ရန်",
+ "tpt-aggregategroup-new-name": "အမည်:",
+ "tpt-aggregategroup-new-description": "ဖော်ပြချက် (မထည့်လည်းရသည်)",
+ "tpt-aggregategroup-remove-confirm": "ဤစုပေါင်းအုပ်စုကို ဖျက်လိုသည်မှာ သေချာပါသလား?",
+ "tpt-aggregategroup-invalid-group": "အုပ်စု မတည်ရှိပါ",
+ "tpt-aggregategroup-edit-name": "အမည်:",
+ "tpt-aggregategroup-edit-description": "ဖော်ပြချက်:",
+ "tpt-aggregategroup-update": "သိမ်းရန်",
+ "tpt-aggregategroup-update-cancel": "မလုပ်တော့ပါ",
+ "tpt-invalid-group": "အကျုံးမဝင်သော အုပ်စု",
+ "log-description-pagetranslation": "စာမျက်နှာ ဘာသာပြန်စနစ်နှင့်ဆက်နွယ်သော လုပ်ဆောင်ချက်များ၏ မှတ်တမ်း",
+ "log-name-pagetranslation": "စာမျက်နှာဘာသာပြန်မှု မှတ်တမ်း",
+ "logentry-pagetranslation-mark": "$1 က $3 ကို ဘာသာပြန်အတွက် {{GENDER:$2|မှတ်သားခဲ့သည်}}",
+ "logentry-pagetranslation-unmark": "$1 က $3 ကို ဘာသာပြန်မှ {{GENDER:$2|ဖယ်ရှားခဲ့သည်}}",
+ "log-action-filter-pagetranslation": "လုပ်ဆောင်ချက် အမျိုးအစား:",
+ "log-action-filter-pagetranslation-mark": "ဘာသာပြန်အတွက် မှတ်သားရန်",
+ "log-action-filter-pagetranslation-unmark": "ဘာသာပြန်မှ ဖယ်ရှားမှု",
+ "log-action-filter-pagetranslation-move": "စာမျက်နှာ ရွေ့ပြောင်းမှုများ",
+ "log-action-filter-pagetranslation-delete": "စာမျက်နှာ ဖျက်ပစ်မှုများ",
+ "pt-movepage-list-pages": "ရွေ့ပြောင်းရန် စာမျက်နှာများစာရင်း",
+ "pt-movepage-list-translation": "ဘာသာပြန် {{PLURAL:$1|စာမျက်နှာ|စာမျက်နှာများ}}",
+ "pt-movepage-list-other": "အခြား စာမျက်နှာ{{PLURAL:$1|ခွဲ|ခွဲများ}}",
+ "pt-movepage-list-no-pages": "စာမျက်နှာများ မတွေ့ပါ။",
+ "pt-movepage-legend": "ဘာသာပြန်နိုင်သော စာမျက်နှာကို ရွေ့ပြောင်းရန်",
+ "pt-movepage-current": "လက်ရှိအမည်:",
+ "pt-movepage-new": "နာမည်သစ်:",
+ "pt-movepage-reason": "အ​ကြောင်း​ပြ​ချက်:",
+ "pt-movepage-subpages": "စာမျက်နှာခွဲများအားလုံးကို ရွေ့ပြောင်းရန်",
+ "pt-movepage-talkpages": "ဆွေးနွေးစာမျက်နှာများကို ရွေ့ပြောင်းရန်",
+ "pt-movepage-logreason": "ဘာသာပြန်နိုင်သော စာမျက်နှာ \"$1\" ၏ အစိတ်အပိုင်း",
+ "pt-deletepage-lang-legend": "ဘာသာပြန်စာမျက်နှာကို ဖျက်ပစ်ရန်",
+ "pt-deletepage-tp-legend": "ဘာသာပြန်နိုင်သော စာမျက်နှာကို ဖျက်ပစ်ရန်",
+ "pt-deletepage-any-legend": "ဘာသာပြန်နိုင်သောစာမျက်နှာ သို့မဟုတ် ဘာသာပြန်စာမျက်နှာကို ဖျက်ပစ်ရန်",
+ "pt-deletepage-current": "စာမျက်နှာ အမည်:",
+ "pt-deletepage-reason": "အ​ကြောင်း​ပြ​ချက်:",
+ "pt-deletepage-reason-other": "အခြား အကြောင်းပြချက်",
+ "pt-deletepage-subpages": "စာမျက်နှာခွဲများအားလုံးကို ဖျက်ရန်",
+ "pt-deletepage-list-pages": "ဖျက်ရန် စာမျက်နှာများ စာရင်း",
+ "pt-deletepage-list-translation": "ဘာသာပြန် စာမျက်နှာများ",
+ "pt-deletepage-list-other": "အခြား စာမျက်နှာခွဲများ",
+ "pt-deletepage-list-no-pages": "စာမျက်နှာများ မတွေ့ပါ။",
+ "pt-deletepage-full-logreason": "ဘာသာပြန်နိုင်သော စာမျက်နှာ \"$1\" ၏ အစိတ်အပိုင်း",
+ "pt-deletepage-lang-logreason": "ဘာသာပြန်နိုင်သော စာမျက်နှာ \"$1\" ၏ အစိတ်အပိုင်း",
+ "pm-import-button-label": "တင်သွင်းရန်",
+ "pm-savepages-button-label": "သိမ်းရန်",
+ "pm-cancel-button-label": "မလုပ်တော့ပါ",
+ "pm-page-does-not-exist": "$1 မတည်ရှိပါ။",
+ "pm-old-translations-missing": "$1 တွင် ဘာသာပြန်အဟောင်းများ မပါရှိပါ။",
+ "pm-pagename-missing": "ကျေးဇူးပြု၍ စာမျက်နှာနာမည် ရိုက်ထည့်ပါ။",
+ "pm-pagetitle-placeholder": "စာမျက်နှာခေါင်းစဉ် ရိုက်ထည့်ပါ",
+ "pm-pagetitle-missing": "ကျေးဇူးပြု၍ စာမျက်နှာခေါင်းစဉ် ရိုက်ထည့်ပါ",
+ "tpt-translate-title": "စာမျက်နှာခေါင်းစဉ် ဘာသာပြန်မှုကို ခွင့်ပြုရန်",
+ "pp-save-summary": "ဘာသာပြန်အတွက် စာမျက်နှာ ကြိုတင်ပြင်ဆင်ရန်",
+ "pagepreparation": "ဘာသာပြန်အတွက် စာမျက်နှာ ကြိုတင်ပြင်ဆင်ရန်",
+ "pp-pagename-placeholder": "စာမျက်နှာအမည် ရိုက်ထည့်ပါ",
+ "pp-prepare-button-label": "ပြင်ဆင်",
+ "pp-save-button-label": "လွှင့်တင်ရန်",
+ "pp-cancel-button-label": "မလုပ်တော့ပါ",
+ "pp-save-message": "စာမျက်နှာကို လွှင့်တင်ပြီး ဖြစ်သည်။ ယင်းအား [$1 တည်းဖြတ်]နိုင်သည်။",
+ "pp-pagename-missing": "ကျေးဇူးပြု၍ စာမျက်နှာနာမည် ရိုက်ထည့်ပါ။",
+ "tpt-unlink-button": "ဘာသာပြန်မှ ဖယ်ရှားရန်",
+ "tpt-unlink-summary": "ဘာသာပြန်မှ စာမျက်နှာအား ဖယ်ရှားခဲ့သည်",
+ "tpt-generic-confirm": "လုပ်ဆောင်ချက်ကို အတည်ပြုပါ။",
+ "tpt-generic-button": "အတည်ပြု"
+}
diff --git a/Translate/i18n/pagetranslation/myv.json b/Translate/i18n/pagetranslation/myv.json
new file mode 100644
index 00000000..af1cc35d
--- /dev/null
+++ b/Translate/i18n/pagetranslation/myv.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Botuzhaleny-sodamo",
+ "Rueter"
+ ]
+ },
+ "tpt-diff-old": "Икелень текст",
+ "tpt-diff-new": "Од текст",
+ "tpt-tag-oldsyntax": "ташто синтаксис",
+ "tpt-sections-syntaxversion": "Синтаксонь версиясь",
+ "translate-tag-translate-link-desc": "Йутавтык те лопанть",
+ "tpt-languages-legend": "Лия кельтне:",
+ "tpt-languages-nonzero": "$1 ($2% ютавтозь)"
+}
diff --git a/Translate/i18n/pagetranslation/mzn.json b/Translate/i18n/pagetranslation/mzn.json
new file mode 100644
index 00000000..9854560a
--- /dev/null
+++ b/Translate/i18n/pagetranslation/mzn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "محک"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% وَردِگاردِسته بیّه)"
+}
diff --git a/Translate/i18n/pagetranslation/nah.json b/Translate/i18n/pagetranslation/nah.json
new file mode 100644
index 00000000..c558dd85
--- /dev/null
+++ b/Translate/i18n/pagetranslation/nah.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Akapochtli",
+ "Fluence",
+ "Languaeditor"
+ ]
+ },
+ "translate-tag-translate-link-desc": "Xitlahtolkwapa",
+ "tpt-tab-translate": "Xitlahtolkwapa",
+ "tpt-aggregategroup-update-cancel": "Xikxolewa",
+ "pm-cancel-button-label": "Xikxolewa",
+ "pp-cancel-button-label": "Xikxolewa"
+}
diff --git a/Translate/i18n/pagetranslation/nan.json b/Translate/i18n/pagetranslation/nan.json
new file mode 100644
index 00000000..3487c418
--- /dev/null
+++ b/Translate/i18n/pagetranslation/nan.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "TongcyDai"
+ ]
+ },
+ "tpt-languages-nonzero": "$1($2%已翻譯)"
+}
diff --git a/Translate/i18n/pagetranslation/nap.json b/Translate/i18n/pagetranslation/nap.json
new file mode 100644
index 00000000..4951c66e
--- /dev/null
+++ b/Translate/i18n/pagetranslation/nap.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "C.R."
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% traduciuta)",
+ "pm-pagetitle-invalid": "Pe' piacere mettite nu titolo 'e paggena bbuono",
+ "pm-summary-import": "Traduzziona mpurtata usanno 'a [[Special:PageMigration|migrazione 'e paggena]]"
+}
diff --git a/Translate/i18n/pagetranslation/nb.json b/Translate/i18n/pagetranslation/nb.json
new file mode 100644
index 00000000..8b081eda
--- /dev/null
+++ b/Translate/i18n/pagetranslation/nb.json
@@ -0,0 +1,271 @@
+{
+ "@metadata": {
+ "authors": [
+ "Audun",
+ "Danmichaelo",
+ "EdoAug",
+ "Gabriel Kielland",
+ "Jon Harald Søby",
+ "Laaknor",
+ "Nghtwlkr",
+ "Njardarlogar",
+ "Pols12",
+ "Purodha"
+ ]
+ },
+ "pagetranslation": "Sideoversetting",
+ "nstab-translations": "Oversettelsesenhet",
+ "right-pagetranslation": "Merk versjoner av sider for oversettelse",
+ "action-pagetranslation": "behandle oversettbare sider",
+ "tps-edit-sourcepage-text": "Du redigerer kilden til en oversettbar side. Sørg for at du er kjent med følgende dokumentasjon:\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text Endring av kildeteksten]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Markup_examples Eksempler på oppmerking som kan brukes]",
+ "tps-edit-sourcepage-ve-warning-limited-text": "Noen oversettbare områder kan ikke redigeres med denne editoren. Bruk kilderedigering for å redigere disse.",
+ "tps-edit-sourcepage-ve-warning-title": "Advarsel: Ikke-støttet side",
+ "tps-edit-sourcepage-ve-warning-text": "Du redigerer en oversettbar side. Redigering av disse med denne redigeringsmodusen støttes ennå ikke. Vennligst bruk kilderedigering.",
+ "tps-edit-sourcepage-ve-warning-button": "OK",
+ "tpt-section": "Oversettelsesenhet $1",
+ "tpt-section-new": "Ny oversettelsesenhet.\nNavn: $1",
+ "tpt-section-deleted": "Oversettelsesenhet $1",
+ "tpt-diff-old": "Forrige tekst",
+ "tpt-diff-new": "Ny tekst",
+ "tpt-submit": "Marker denne versjonen for oversetting",
+ "tpt-sections-oldnew": "Nye og eksisterende oversettelsesenheter",
+ "tpt-sections-deleted": "Slettede oversettelsesenheter",
+ "tpt-sections-template": "Mal for oversettelsesside",
+ "tpt-action-nofuzzy": "Ikke ugyldiggjør oversettelser",
+ "tpt-badtitle": "Det angitte sidenavnet ($1) er ikke en gyldig tittel",
+ "tpt-nosuchpage": "Siden $1 finnes ikke",
+ "tpt-oldrevision": "$2 er ikke den siste versjonen av siden [[:$1]].\nKun siste versjoner kan bli markert for oversettelse.",
+ "tpt-notsuitable": "Siden $1 er ikke egnet for oversettelse.\nSjekk at siden har $2-tagger og gyldig syntaks.",
+ "tpt-saveok": "Siden [[:$1]] har blitt markert for oversettelse med {{PLURAL:$2|én oversettelsesenhet|$2 oversettelsesenheter}}.\nDen kan nå <span class=\"plainlinks\">[$3 oversettes]</span>.",
+ "tpt-saveok-first": "Du kan [[Special:PageMigration|importere en eksisterende oversettelse]] for denne siden (hvis det fins).",
+ "tpt-offer-notify": "Du kan <span class=\"plainlinks\">[$1 varsle oversettere]</span> om denne siden.",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|Vis listen over oversettbare sider.]]",
+ "tpt-showpage-intro": "Nedenfor listes nye, eksisterende og slettede avsnitt opp.\nFør denne versjonen merkes for oversettelse, sjekk at endringene i avsnittene er minimert for å unngå unødvendig arbeid for oversetterne.",
+ "tpt-mark-summary": "Markerte denne versjonen for oversettelse",
+ "tpt-mark-nochanges": "Ingen endringer å godkjenne. Å markere denne siden for oversettelse vil ikke redigere siden eller noen eksisterende oversettelsesenheter.",
+ "tpt-edit-failed": "Kunne ikke oppdatere siden: $1",
+ "tpt-duplicate": "Oversettelsens enhetsnavn $1 er brukt mer enn en gang.",
+ "tpt-invalid": "Oversettelsesenhetetsnavnet $1 kan ikke inneholde undestrek eller bindestrek.",
+ "tpt-unmarked": "Siden [[:$1]] er ikke lenger markert for oversettelse.",
+ "tpt-list-nopages": "Ingen sider er markert for oversettelse, eller er klare for å bli markert for oversettelse.",
+ "tpt-new-pages-title": "Sider foreslått for oversettelse",
+ "tpt-old-pages-title": "Sider som oversettes",
+ "tpt-other-pages-title": "Ødelagte sider",
+ "tpt-outdated-pages-title": "Sider med ventende endringer",
+ "tpt-new-pages": "{{PLURAL:$1|Denne siden|Disse sidene}} inneholder tekst med oversettelsesmerker, men ingen versjon av {{PLURAL:$1|denne siden|disse sidene}} er for tiden markert for oversettelse.",
+ "tpt-old-pages": "Den siste versjonen av {{PLURAL:$1|denne siden|disse sidene}} har blitt markert for oversettelse.",
+ "tpt-other-pages": "{{PLURAL:$1|En gammel versjon av denne siden|Eldre versjoner av disse sidene}} er markert for oversettelse, men den siste versjonen kan ikke markeres for oversettelse.",
+ "tpt-outdated-pages": "{{PLURAL:$1|Denne siden|Disse sidene}} har endringer som ikke er merket for oversetting.",
+ "tpt-tag-discouraged": "frarådet",
+ "tpt-tag-oldsyntax": "gammel syntaks",
+ "tpt-tag-no-transclusion-support": "ingen transklusjonsstøtte",
+ "tpt-select-prioritylangs": "Kommaseparert liste over prioriterte språkkoder:",
+ "tpt-select-prioritylangs-force": "Forhindre oversettelser til andre språk enn de prioriterte språkene",
+ "tpt-select-prioritylangs-reason": "Årsak:",
+ "tpt-sections-prioritylangs": "Prioriterte språk",
+ "tpt-sections-syntaxversion": "Syntaksversjon",
+ "tpt-syntaxversion-text": "Denne siden bruker en gammel versjon av kildesyntaksen for oversettbare sider. Den nye versjonen vil omringe uoversatte seksjoner med en HTML-tagg som indikerer det riktige språket til teksten. Eksempel: $1. Du kan bruke den nye oppmerkingssyntaksen $2 for å forhindre omringing av tekst der det ikke passer, som under oversettelse av <code>title</code>-attributtet til et element. Det er ikke mulig å gå tilbake til den gamle syntaksen.",
+ "tpt-syntaxversion-label": "Bruk den nyeste syntaksversjonen for denne siden",
+ "tpt-transclusion": "Maltransklusjon",
+ "tpt-transclusion-label": "Slå på oversettelsesvar transklusjon for denne siden",
+ "tpt-rev-mark": "merk for oversetting",
+ "tpt-rev-unmark": "fjern fra oversetting",
+ "tpt-rev-discourage": "fraråd",
+ "tpt-rev-encourage": "gjenopprett",
+ "tpt-rev-mark-tooltip": "Merk siste versjon av denne siden for oversetting.",
+ "tpt-rev-unmark-tooltip": "Fjern denne siden fra oversetting.",
+ "tpt-rev-discourage-tooltip": "Fraråd videre oversetting av denne siden.",
+ "tpt-rev-encourage-tooltip": "Gjenopprett denne siden til vanlig oversetting.",
+ "translate-tag-translate-link-desc": "Oversett denne siden",
+ "translate-tag-markthis": "Merk denne siden for oversettelse",
+ "translate-tag-markthisagain": "Denne siden har hatt <span class=\"plainlinks\">[$1 endringer]</span> siden den sist ble <span class=\"plainlinks\">[$2 markert for oversettelse]</span>.",
+ "translate-tag-hasnew": "Denne siden inneholder <span class=\"plainlinks\">[$1 endringer]</span> som ikke har blitt markert for oversettelse.",
+ "tpt-translation-intro": "Denne siden er en <span class=\"plainlinks\">[$1 oversatt versjon]</span> av siden [[$2]] og oversettelsen er $3 % ferdig.",
+ "tpt-translation-intro-fuzzy": "Utdaterte oversettelser er markert på denne måten.",
+ "tpt-languages-legend": "På andre språk:",
+ "tpt-languages-zero": "Begynn oversettelse for dette språket",
+ "tpt-languages-nonzero": "$1 ($2 % oversatt)",
+ "tpt-tab-translate": "Oversett",
+ "tpt-target-page": "Denne siden kan ikke oppdateres manuelt.\nDenne siden er en oversettelse av siden [[$1]] og oversettelsen kan bli oppdatert ved å bruke [$2 oversettelsesverktøyet].",
+ "tpt-unknown-page": "Dette navnerommet er reservert for oversettelser av innholdssider.\nDenne siden som du prøver å redigere ser ikke ut til å samsvare med noen av sidene som er markert for oversettelse.",
+ "tpt-translation-restricted": "Oversettelse av denne siden til dette språket har blitt forhindret av en oversettelsesadministrator.\n\nÅrsak: $1",
+ "tpt-translation-restricted-no-reason": "Oversettelse av denne siden til dette språket har blitt forhindret av en oversettelsesadministrator.",
+ "tpt-discouraged-language-force-header": "Denne siden kan ikke oversettes til $1.",
+ "tpt-discouraged-language-force-content": "En oversettelsesadministrator har bestemt at denne siden kun kan oversettes til $1.",
+ "tpt-discouraged-language-header": "Oversettelser til $1 er ikke en prioritet for denne siden.",
+ "tpt-discouraged-language-content": "En oversettelsesadministrator har bestemt at oversettelsene skal fokuseres på $1.",
+ "tpt-discouraged-language-force": "<strong>Denne siden kan ikke oversettes til $2.</strong>\n\nEn oversettelsesadministrator har bestemt at denne siden bare kan oversettes til $3.",
+ "tpt-priority-languages": "En oversettelsesadministrator har satt prioritetsspråkene for denne gruppen til $1.",
+ "tpt-priority-languages-force": "En oversettelsesadministrator har satt de prioriterte språkene for denne gruppa til $1. Å oversette til andre språk er ikke tillatt.",
+ "tpt-discouraged-translation-header": "Oversettelse av denne siden er frarådet",
+ "tpt-discouraged-translation-content": "En oversettelsesadministrator har frarådet oversettelse av denne siden. Du kan fortsatt oversette den om du vil, men det vil ha begrenset nytteverdi.",
+ "tpt-render-summary": "Oppdaterer for å svare til ny versjon av kildesiden",
+ "aggregategroups": "Samlingsgrupper",
+ "tpt-aggregategroup-add": "Legg til",
+ "tpt-aggregategroup-save": "Lagre",
+ "tpt-aggregategroup-close": "Lukk",
+ "tpt-aggregategroup-add-new": "Legg til en ny samlet gruppe",
+ "tpt-aggregategroup-new-name": "Navn:",
+ "tpt-aggregategroup-new-description": "Beskrivelse (valgfri):",
+ "tpt-aggregategroup-remove-confirm": "Er du sikker på at du ønsker å slette denne gruppa?",
+ "tpt-aggregategroup-invalid-group": "Gruppa eksisterer ikke",
+ "tpt-aggregategroup-edit-name": "Navn:",
+ "tpt-aggregategroup-edit-description": "Beskrivelse:",
+ "tpt-aggregategroup-update": "Lagre",
+ "tpt-aggregategroup-update-cancel": "Avbryt",
+ "tpt-aggregategroup-expand-all-groups": "utvid alle grupper",
+ "tpt-aggregategroup-collapse-all-groups": "minimer alle grupper",
+ "tpt-aggregategroup-expand-group": "utvid gruppe",
+ "tpt-aggregategroup-collapse-group": "minimer gruppe",
+ "tpt-invalid-group": "Ugyldig gruppe",
+ "pt-parse-open": "Ubalansert &lt;translate>-element.\nOversettelsesmal: <pre>$1</pre>",
+ "pt-parse-close": "Ubalansert &lt;/translate>-element.\nOversettelsesmal: <pre>$1</pre>",
+ "pt-parse-nested": "Nøstede &lt;translate>-seksjoner er ikke tillatt.\nElementtekst: <pre>$1</pre>",
+ "pt-shake-multiple": "Flere avsnittsmarkører for én seksjon.\nSørg for at oversettelsesenheter atskilles av tomme linjer.\nSeksjonstekst: <pre>$1</pre>",
+ "pt-shake-position": "Seksjonsmarkører i uventede posisjoner.\nSeksjonstekst: <pre>$1</pre>",
+ "pt-shake-empty": "Tøm seksjon for markør «$1».",
+ "log-description-pagetranslation": "Logg over handlinger relatert til systemet for sideoversettelser",
+ "log-name-pagetranslation": "Logg for sideoversettelser",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|merket}} $3 for oversetting",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|fjernet}} $3 fra oversettelsessystemet",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|fullførte}} flyttingen av den oversettbare siden $3 til $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|fant}} et problem under flyttingen av siden $3 til $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|fullførte}} slettingen av den oversettbare siden $3",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|mislyktes}} i å slette $3 som tilhører den oversettbare siden $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|fullførte}} slettingen av oversettingssiden $3",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|mislyktes}} i å slette $3 som tilhører oversettingssiden $4",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|oppfordret}} til oversetting av $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|frarådet}} oversettelse av $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|fjernet}} prioriterte språk fra den oversettbare siden $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|satt}} prioriterte språk for den oversettbare siden $3 til $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|begrenset}} språk for den oversettbare siden $3 til $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|la til}} den oversettbare siden $3 til aggregatgruppa $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|fjernet}} den oversettbare siden $3 fra aggregatgruppa $4",
+ "log-action-filter-pagetranslation": "Handlingstype:",
+ "log-action-filter-pagetranslation-mark": "Merk for oversettelse",
+ "log-action-filter-pagetranslation-unmark": "Fjerning fra oversettelse",
+ "log-action-filter-pagetranslation-move": "Sideflyttinger",
+ "log-action-filter-pagetranslation-delete": "Sideslettinger",
+ "log-action-filter-pagetranslation-encourage": "Oppmuntring til å oversette",
+ "log-action-filter-pagetranslation-discourage": "Fraråding fra å oversette",
+ "log-action-filter-pagetranslation-prioritylanguages": "Endring av prioriterne språk",
+ "log-action-filter-pagetranslation-aggregategroups": "Endring av aggregatgrupper",
+ "log-description-messagebundle": "Logg for handlinger som gjelder meldingsknippesystemet",
+ "log-name-messagebundle": "Meldingsknippelogg",
+ "logentry-messagebundle-moveok": "$1 {{GENDER:$2|fullførte}} navneendring av meldingsknippet $3 til $4",
+ "logentry-messagebundle-movenok": "$1 {{GENDER:$2|støtte}} på et problem under flytting av meldingsknippet $3 til $4",
+ "logentry-messagebundle-deletefok": "$1 {{GENDER:$2|fullførte}} slettingen av meldingsknippet $3",
+ "logentry-messagebundle-deletefnok": "$1 {{GENDER:$2|mislyktes}} i å slette $3, som tilhører meldingsknippet $4",
+ "log-action-filter-messagebundle": "Handlingstype:",
+ "log-action-filter-messagebundle-move": "Flytting av meldingsknipper",
+ "log-action-filter-messagebundle-delete": "Sletting av meldingsknipper",
+ "pt-movepage-title": "Flytt oversettbar side $1",
+ "pt-movepage-messagebundle-title": "Flytt meldingsknippet «$1»",
+ "pt-movepage-blockers": "Den oversettbare siden kan ikke flyttes til et nytt navn på grunn av følgende {{PLURAL:$1|feil}}:",
+ "pt-movepage-block-base-invalid": "Navnet på den oversettbare målsiden er ikke en gyldig tittel.",
+ "pt-movepage-block-tp-invalid": "Måloversettelsessidetittelen for [[:$1]] ville vært ugyldig (for lang?).",
+ "pt-movepage-block-section-invalid": "Målavsnittssidetittelen for [[:$1]] ville vært ugyldig (for lang?).",
+ "pt-movepage-block-subpage-invalid": "Målundersidetittelen for [[:$1]] ville vært ugyldig (for lang?).",
+ "pt-movepage-block-talkpage-invalid": "Tittelen til målsidens diskusjonsside for «[[:$1]]» ville bli ugyldig (for lang?).",
+ "pt-movepage-block-unknown-page": "Siden som flyttes ([[:$1]]) ser ikke ut til å være del av en oversettbar side.",
+ "pt-movepage-block-ns-talk-unsupported": "Siden ([[:$1]]) flyttes til et navnerom som ikke støtter diskusjonssider.",
+ "pt-movepage-block-rename-failed": "En feil oppsto under generering av en ny tittel for siden [[:$1]]",
+ "pt-movepage-list-pages": "Liste over sider å flytte",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Oversettelsesside|Oversettelsessider}}",
+ "pt-movepage-list-section": "{{PLURAL:$1|Avsnittsside|Avsnittssider}}",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Underside|Undersider}} merket for oversettelse",
+ "pt-movepage-list-translatable-note": "Disse sidene må flyttes hver for seg.",
+ "pt-movepage-list-other": "{{PLURAL:$1|Annen underside|Andre undersider}}",
+ "pt-movepage-list-count": "Totalt $1 {{PLURAL:$1|side|sider}} å flytte, inkludert $2 {{PLURAL:$2|underside|undersider}} og $3 {{PLURAL:$3|diskusjonsside|diskusjonssider}}.",
+ "pt-movepage-page-count-limit": "Denne oversettbare siden består av over $1 {{PLURAL:$1|side|sider}}. Flytting av så mange sider samtidig fungerer ikke optimalt. Kontakt en systemadministrator for å gjøre dette via et vedlikeholdsskript.",
+ "pt-movepage-list-no-pages": "Ingen sider funnet.",
+ "pt-movepage-legend": "Flytt oversettbar side",
+ "pt-movepage-messagebundle-legend": "Flytt meldingsknippe",
+ "pt-movepage-current": "Nåværende navn:",
+ "pt-movepage-new": "Nytt navn:",
+ "pt-movepage-reason": "Årsak:",
+ "pt-movepage-subpages": "Flytt alle undersider",
+ "pt-movepage-talkpages": "Flytt diskusjonssider",
+ "pt-movepage-talkpage-exists": "(Har diskusjonsside)",
+ "pt-movepage-action-check": "Kontroller om flyttingen er mulig",
+ "pt-movepage-action-perform": "Utfør flyttingen",
+ "pt-movepage-action-other": "Endre mål",
+ "pt-movepage-intro": "Denne spesialsiden lar deg flytte sider som er markert for oversettelse.\nFlyttehandlingen vil ikke skje umiddelbart fordi mange sider må flyttes.\nMens sidene flyttes er det ikke mulig å samhandle med gjeldende sider.\nFeil [[$1|logges]] og må repareres for hånd.",
+ "pt-movepage-logreason": "Del av oversettbar side «$1»",
+ "pt-movepage-started": "Kontroller [[$1|loggen]] om en stund for feil- og fullføringsmeldinger.",
+ "pt-locked-page": "Denne siden er låst fordi oversettelsessiden blir flyttet nå.",
+ "pt-deletepage-lang-title": "Sletter den oversettbare siden «$1»",
+ "pt-deletepage-tp-title": "Sletter den oversettbare siden «$1»",
+ "pt-deletepage-mb-title": "Sletter meldingsknippet «$1»",
+ "pt-deletepage-invalid-title": "Den angitte siden er ikke gyldig.",
+ "pt-deletepage-invalid-text": "Den angitte siden er ikke en oversettbar side eller en oversettelsesside.",
+ "pt-deletepage-action-check": "List opp sider som skal slettes",
+ "pt-deletepage-action-perform": "Utfør slettingen",
+ "pt-deletepage-action-other": "Endre mål",
+ "pt-deletepage-lang-legend": "Slett oversettbar side",
+ "pt-deletepage-tp-legend": "Slett oversettbar side",
+ "pt-deletepage-mb-legend": "Slett meldingsknippe",
+ "pt-deletepage-any-legend": "Slett en oversettbar side, et meldingsknippe eller en oversettelsesside",
+ "pt-deletepage-current": "Sidenavn:",
+ "pt-deletepage-reason": "Årsak:",
+ "pt-deletepage-reason-details": "Annen/ytterligere årsak:",
+ "pt-deletepage-reason-other": "Annen årsak",
+ "pt-deletepage-subpages": "Slett alle undersider",
+ "pt-deletepage-list-pages": "Liste over sider å slette",
+ "pt-deletepage-list-translation": "Oversettelsessider",
+ "pt-deletepage-list-section": "Seksjonssider",
+ "pt-deletepage-list-other": "Andre undersider",
+ "pt-deletepage-list-count": "Totalt $1 {{PLURAL:$1|side|sider}} å slette, med $2 {{PLURAL:$2|underside|undersider}}.",
+ "pt-deletepage-list-no-pages": "Ingen sider funnet.",
+ "pt-deletepage-full-logreason": "Del av den oversettbare siden «$1»",
+ "pt-deletepage-lang-logreason": "Del av oversettelsessiden «$1»",
+ "pt-deletepage-started": "Sjekk [[$1|loggen]] for feil- og fullføringsmeldinger.",
+ "pt-deletepage-intro": "Denne spesialsiden lar deg slette hele oversettbare sider, meldingsknipper eller en inviduell oversettelsesside på ett språk.\nSlettingen vil ikke være umiddelbar, fordi alle avhengige sider også vil bli slettet.\nFeil [[$1|logges]], og må fikses manuelt.",
+ "pagemigration": "Migrering av oversettbar side",
+ "pagemigration-summary": "Spesifiser en oversettelsesside og bevar oversettelser som ble gjort før Translate-systemet ble slått på for den siden.",
+ "pm-import-button-label": "Importer",
+ "pm-savepages-button-label": "Lagre",
+ "pm-cancel-button-label": "Avbryt",
+ "pm-page-does-not-exist": "$1 finnes ikke.",
+ "pm-old-translations-missing": "$1 inneholder ikke gamle oversettelser.",
+ "pm-extra-units-warning": "Ekstra enheter kan være tilstede. Vennligst match kilden og oversettelsesenhetene ordentlig.",
+ "pm-pagename-missing": "Skriv inn sidenavnet.",
+ "pm-add-icon-hover-text": "Legg til en enhet nedenfor",
+ "pm-swap-icon-hover-text": "Bytt med enheten under",
+ "pm-delete-icon-hover-text": "Slett enhet",
+ "pm-pagetitle-placeholder": "Skriv inn sidetittelen",
+ "pm-pagetitle-invalid": "Sidemigrasjon fungerer kun for oversettelsessider, for eksempel «Page/de». Den angitte tittelen har ikke gyldig format.",
+ "pm-pagetitle-missing": "Skriv inn sidetittelen.",
+ "pm-langcode-missing": "Sidemigrasjon fungerer kun for oversettelsessider, for eksempel «Page/de». Den gitte tittelen er ikke en oversettelsesside.",
+ "pm-summary-import": "Importerte oversettelse med [[Special:PageMigration|sidemigrasjon]]",
+ "pm-on-import-message-text": "De gamle oversettelsene har blitt importert. Bruk add-, swap- og delete-valgene for å justere oversettelsesenhetene og klikk på «{{int:pm-savepages-button-label}}»-knappen for å lagre dem. Klikk på «{{unt:pm-cancel-button-label}}» for å forkaste.",
+ "pm-on-save-message-text": "Oversettelsesenhetene har blitt lagret. Du kan nå skrive inn tittelen på en ny oversettelsesside for å migrere den, eller gjøre endringer i enhetene nedenfor og lagre en ny versjon.",
+ "pm-pagetitle-not-translatable": "$1 er ikke del av en oversettbar side.",
+ "pm-translation-unit-fetch-failed": "En feil oppsto under henting av oversettelsesenheter for siden.",
+ "tpt-translate-title": "Tillat oversettelse av sidetittelen",
+ "pp-save-summary": "Forberedte siden for oversettelse",
+ "pagepreparation": "Forbereder side for oversettelse",
+ "pagepreparation-summary": "Angi en sidetittel som skal forberedes for oversettelse.",
+ "pp-pagename-placeholder": "Skriv inn sidenavnet",
+ "pp-prepare-button-label": "Forbered",
+ "pp-save-button-label": "Publiser",
+ "pp-cancel-button-label": "Avbryt",
+ "pp-save-message": "Siden ble publisert. Du kan [$1 redigere] den.",
+ "pp-prepare-message": "Siden ble forberedt for oversettelse. Se diffen nedenfor. Klikk på «{{int:pp-save-button-label}}»-knappen om alt ser greit ut.",
+ "pp-already-prepared-message": "Det ser ut til at siden allerede har blitt forberedt for oversettelse. Det er ingen endringer sammenlignet med forrige versjon.",
+ "pp-diff-error": "Det var en feil under henting av diffen fra tjeneren.",
+ "pp-pagename-missing": "Skriv inn sidenavnet.",
+ "pp-diff-old-header": "Kildetekst",
+ "pp-diff-new-header": "Forberedt tekst",
+ "tpt-unlink-confirm": "Bekreft at du ønsker å fjerne siden fra oversettelsessystemet.\nSpråkvelgeren og oversatte sidenavn vil slutte å fungere.\nDe enkelte oversatte sidene vil kunne redigeres direkte.",
+ "tpt-unlink-button": "Fjern fra oversettelse",
+ "tpt-unlink-summary": "Fjernet side fra oversettelse",
+ "tpt-generic-confirm": "Bekreft handlingen.",
+ "tpt-generic-button": "Bekreft",
+ "tpt-validation-not-insertable": "Oversettelsesvariabelnavnet «$1» virker ikke med innsetting i oversettelsesgrensesnittet. Unngå å bruke spesialtegn.",
+ "tpt-validation-name-reuse": "Oversettelsesvariabelen «$1» defineres flere ganger med forskjellig innhold. Endre variabelnavnene så de er unike innenfor oversettelsesenheten.",
+ "visualeditor-annotations-translate-start": "Begynnelsen av innholdet som skal oversettes",
+ "visualeditor-annotations-translate-end": "Slutten av innholdet som skal oversettes",
+ "visualeditor-annotations-tvar-start": "Begynnelsen av det uoversettbare innholdet",
+ "visualeditor-annotations-tvar-end": "Slutten på det uoversettbare innholdet"
+}
diff --git a/Translate/i18n/pagetranslation/nds-nl.json b/Translate/i18n/pagetranslation/nds-nl.json
new file mode 100644
index 00000000..ceccd634
--- /dev/null
+++ b/Translate/i18n/pagetranslation/nds-nl.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Servien"
+ ]
+ },
+ "tpt-languages-legend": "Andere språken:",
+ "tpt-languages-nonzero": "$1 ($2% oaversetted)",
+ "pt-deletepage-current": "Sydname:",
+ "pm-page-does-not-exist": "$1 besteyt neet",
+ "tpt-generic-button": "Bevästigen"
+}
diff --git a/Translate/i18n/pagetranslation/ne.json b/Translate/i18n/pagetranslation/ne.json
new file mode 100644
index 00000000..6b118d98
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ne.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bada Kaji",
+ "Ganesh Paudel",
+ "NehalDaveND",
+ "Nirajan pant",
+ "पर्वत सुबेदी",
+ "बडा काजी",
+ "राम प्रसाद जोशी"
+ ]
+ },
+ "tpt-rev-encourage": "पूर्वावस्थामा ल्याउनुहोस्",
+ "tpt-languages-legend": "अन्य भाषाहरू:",
+ "tpt-languages-nonzero": "$1 ($2% अनुवादित)",
+ "tpt-tab-translate": "अनुवाद गर्नुहोस्",
+ "aggregategroups": "कुल समूहहरू",
+ "tpt-aggregategroup-add": "थप्नुहोस्",
+ "tpt-aggregategroup-save": "संग्रह गर्ने",
+ "tpt-aggregategroup-new-name": "नाम :",
+ "tpt-aggregategroup-edit-name": "नाम :",
+ "tpt-aggregategroup-edit-description": "वर्णन :",
+ "tpt-aggregategroup-update": "संग्रह गुर्ने",
+ "tpt-aggregategroup-update-cancel": "रद्द गर्नुहोस्",
+ "pt-movepage-reason": "कारण :",
+ "pt-deletepage-reason": "कारण :",
+ "pm-import-button-label": "आयात",
+ "pm-savepages-button-label": "संग्रह गर्ने",
+ "pm-cancel-button-label": "रद्द गर्नुहोस्",
+ "pp-save-button-label": "प्रकाशन",
+ "pp-cancel-button-label": "रद्द गर्नुहोस्"
+}
diff --git a/Translate/i18n/pagetranslation/nia.json b/Translate/i18n/pagetranslation/nia.json
new file mode 100644
index 00000000..20892604
--- /dev/null
+++ b/Translate/i18n/pagetranslation/nia.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Slaia"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% tefo'ali)"
+}
diff --git a/Translate/i18n/pagetranslation/nl.json b/Translate/i18n/pagetranslation/nl.json
new file mode 100644
index 00000000..a53922dd
--- /dev/null
+++ b/Translate/i18n/pagetranslation/nl.json
@@ -0,0 +1,232 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aranka",
+ "Dutchy45",
+ "HanV",
+ "Kippenvlees1",
+ "Mainframe98",
+ "Mar(c)",
+ "McDutchie",
+ "Nieuwsgierige Gebruiker",
+ "Pols12",
+ "Robin van der Vliet",
+ "Robin0van0der0vliet",
+ "SPQRobin",
+ "Servien",
+ "Siebrand",
+ "Sjoerddebruin",
+ "Southparkfan",
+ "Vistaus"
+ ]
+ },
+ "pagetranslation": "Paginavertaling",
+ "right-pagetranslation": "Versies van pagina's voor de vertaling markeren",
+ "action-pagetranslation": "vertaalbare pagina's te beheren",
+ "tps-edit-sourcepage-ve-warning-title": "Waarschuwing: Niet-ondersteunde pagina",
+ "tps-edit-sourcepage-ve-warning-text": "U probeert een vertaalbare pagina te bewerken. Het bewerken van deze pagina's in deze editor wordt nog niet ondersteund. Gebruik de brontekst editor alstublieft.",
+ "tps-edit-sourcepage-ve-warning-button": "OK",
+ "tpt-section": "Vertaaleenheid $1",
+ "tpt-section-new": "Nieuwe vertaaleenheid.\nNaam: $1",
+ "tpt-section-deleted": "Vertaaleenheid $1",
+ "tpt-diff-old": "Vorige tekst",
+ "tpt-diff-new": "Nieuwe tekst",
+ "tpt-submit": "Deze versie voor vertaling markeren",
+ "tpt-sections-oldnew": "Nieuwe en bestaande vertaaleenheden",
+ "tpt-sections-deleted": "Verwijderde vertaaleenheden",
+ "tpt-sections-template": "Vertaalpaginasjabloon",
+ "tpt-action-nofuzzy": "Vertalingen niet als verouderd markeren",
+ "tpt-badtitle": "De opgegeven paginanaam ($1) is geen geldige paginanaam",
+ "tpt-nosuchpage": "Pagina \"$1\" bestaat niet",
+ "tpt-oldrevision": "$2 is niet de meest recente versie van de pagina \"[[:$1]]\".\nAlleen de meest recente versie kan voor vertaling gemarkeerd worden.",
+ "tpt-notsuitable": "De pagina \"$1\" is niet geschikt voor vertaling.\nZorg ervoor dat de $2-labels geplaatst zijn en dat de syntaxis juist is.",
+ "tpt-saveok": "De pagina [[:$1]] is gemarkeerd voor vertaling met $2 te vertalen {{PLURAL:$2|vertaaleenheid|vertaaleenheden}}.\nDe pagina kan nu <span class=\"plainlinks\">[$3 vertaald]</span> worden.",
+ "tpt-saveok-first": "U kunt [[Special:PageMigration|bestaande vertalingen]] voor deze pagina importeren (indien aanwezig).",
+ "tpt-offer-notify": "U kunt <span class=\"plainlinks\">[$1 vertalers op de hoogte stellen]</span> over deze pagina.",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|Toon de lijst met vertaalbare pagina's.]]",
+ "tpt-showpage-intro": "Hieronder zijn nieuwe, bestaande en verwijderde vertaaleenheden opgenomen.\nControleer voordat u deze versie voor vertaling markeert of de wijzigingen aan de vertaaleenheden zo klein mogelijk zijn om onnodig werk voor vertalers te voorkomen.",
+ "tpt-mark-summary": "Heeft deze versie voor vertaling gemarkeerd",
+ "tpt-edit-failed": "De pagina \"$1\" kon niet bijgewerkt worden.",
+ "tpt-duplicate": "De vertaaleenheid \"$1\" wordt meer dan eens gebruikt.",
+ "tpt-invalid": "De vertaaleenheidnaam $1 mag geen laag streepje (_) of schuine streep (/) bevatten.",
+ "tpt-unmarked": "Pagina \"[[:$1]]\" is niet langer te vertalen.",
+ "tpt-list-nopages": "Er zijn geen pagina's gemarkeerd voor vertaling, noch klaar om gemarkeerd te worden voor vertaling.",
+ "tpt-new-pages-title": "Voorgesteld voor vertaling",
+ "tpt-old-pages-title": "Te vertalen",
+ "tpt-other-pages-title": "Kapot",
+ "tpt-outdated-pages-title": "Pagina's met hangende veranderingen",
+ "tpt-new-pages": "Deze {{PLURAL:$1|pagina bevat|pagina's bevatten}} tekst met vertalingslabels, maar van deze {{PLURAL:$1|pagina|pagina's}} is geen versie gemarkeerd voor vertaling.",
+ "tpt-old-pages": "De nieuwste versie van deze {{PLURAL:$1|pagina|pagina's}} is gemarkeerd voor vertaling.",
+ "tpt-other-pages": "{{PLURAL:$1|Een oude versie van deze pagina is|Oude versies van deze pagina zijn}} gemarkeerd voor vertaling,\nmaar de laatste {{PLURAL:$1|versie kan|versies kunnen}} niet gemarkeerd worden voor vertaling.",
+ "tpt-outdated-pages": "{{PLURAL:$1|Deze pagina heeft|Deze pagina's hebben}} niet voor vertaling gemarkeerde veranderingen.",
+ "tpt-tag-discouraged": "ontmoedigd",
+ "tpt-tag-oldsyntax": "oude zinsbouw",
+ "tpt-select-prioritylangs": "Prioriteitstalen (taalcodes door komma's gescheiden):",
+ "tpt-select-prioritylangs-force": "Vertaling beperken tot alleen deze prioriteitstalen",
+ "tpt-select-prioritylangs-reason": "Reden:",
+ "tpt-sections-prioritylangs": "Prioriteitstalen",
+ "tpt-sections-syntaxversion": "Zinsbouw versie",
+ "tpt-syntaxversion-label": "De laatste versie van de syntaxis gebruiken voor deze pagina",
+ "tpt-rev-mark": "voor vertaling markeren",
+ "tpt-rev-unmark": "als te vertalen pagina verwijderen",
+ "tpt-rev-discourage": "ontmoedigen",
+ "tpt-rev-encourage": "herstellen",
+ "tpt-rev-mark-tooltip": "De laatste versie van deze pagina voor vertaling markeren.",
+ "tpt-rev-unmark-tooltip": "Deze pagina niet langer laten vertalen.",
+ "tpt-rev-discourage-tooltip": "Vertalen van deze pagina ontmoedigen.",
+ "tpt-rev-encourage-tooltip": "Normale vertaling van deze pagina opnieuw instellen.",
+ "translate-tag-translate-link-desc": "Deze pagina vertalen",
+ "translate-tag-markthis": "Deze pagina voor vertaling markeren",
+ "translate-tag-markthisagain": "Deze pagina is <span class=\"plainlinks\">[$1 gewijzigd]</span> sinds deze voor het laatst <span class=\"plainlinks\">[$2 voor vertaling gemarkeerd]</span> is geweest.",
+ "translate-tag-hasnew": "Aan deze pagina zijn <span class=\"plainlinks\">[$1 wijzigingen]</span> gemaakt die niet voor vertaling zijn gemarkeerd.",
+ "tpt-translation-intro": "Deze pagina is een <span class=\"plainlinks\">[$1 vertaalde versie]</span> van de pagina [[$2]] en de vertaling is $3% compleet.",
+ "tpt-translation-intro-fuzzy": "Verouderde vertalingen worden zo weergegeven.",
+ "tpt-languages-legend": "Andere talen:",
+ "tpt-languages-zero": "Vertaling voor deze taal starten",
+ "tpt-languages-nonzero": "$1 ($2% vertaald)",
+ "tpt-tab-translate": "Vertalen",
+ "tpt-target-page": "Deze pagina kan niet handmatig worden bijgewerkt.\nDeze pagina is een vertaling van de pagina [[$1]].\nDe vertaling kan bijgewerkt worden via de [$2 vertaalhulpmiddelen].",
+ "tpt-unknown-page": "Deze naamruimte is gereserveerd voor de vertalingen van van pagina's.\nDe pagina die u probeert te bewerken lijkt niet overeen te komen met een te vertalen pagina.",
+ "tpt-translation-restricted": "De vertaling van deze pagina in deze taal is onmogelijk gemaakt door de vertalingenbeheerder.\n\nReden: $1",
+ "tpt-discouraged-language-force-header": "Deze pagina kan niet in het $1 vertaald worden.",
+ "tpt-discouraged-language-force-content": "Een vertalingenbeheerder heeft besloten dat deze pagina alleen vertaald kan worden in het $1.",
+ "tpt-discouraged-language-header": "Vertalen in het $1 is geen prioriteit voor deze pagina.",
+ "tpt-discouraged-language-content": "Een vertalingenbeheerder heeft besloten om prioriteit te leggen bij de volgende talen: $1.",
+ "tpt-discouraged-language-force": "<strong>Deze pagina kan niet vertaald worden in het $2.</strong>\n\nEen vertalingenbeheerder heeft de talen waarin deze pagina vertaald kan worden beperkt tot de volgende talen: $3.",
+ "tpt-priority-languages": "Een vertalingenbeheerder heeft de prioriteitstalen voor deze groep ingesteld op $1.",
+ "tpt-priority-languages-force": "Een vertalingsbeheerder heeft de prioriteitstalen voor deze groep ingesteld op $1. Vertalen naar andere talen is niet toegestaan.",
+ "tpt-render-summary": "Bijgewerkt vanwege een nieuwe basisversie van de bronpagina",
+ "aggregategroups": "Samengevoegde groepen",
+ "tpt-aggregategroup-add": "Toevoegen",
+ "tpt-aggregategroup-save": "Opslaan",
+ "tpt-aggregategroup-add-new": "Nieuwe samengevoegde groep toevoegen",
+ "tpt-aggregategroup-new-name": "Naam:",
+ "tpt-aggregategroup-new-description": "Beschrijving (optioneel):",
+ "tpt-aggregategroup-remove-confirm": "Weet u zeker dat u deze samengestelde groep wilt verwijderen?",
+ "tpt-aggregategroup-invalid-group": "De groep bestaat niet",
+ "tpt-aggregategroup-edit-name": "Naam:",
+ "tpt-aggregategroup-edit-description": "Beschrijving:",
+ "tpt-aggregategroup-update": "Opslaan",
+ "tpt-aggregategroup-update-cancel": "Annuleren",
+ "tpt-invalid-group": "Ongeldige groep",
+ "pt-parse-open": "Ongebalanceerd label &lt;translate>.\nVertaalsjabloon: <pre>$1</pre>",
+ "pt-parse-close": "Ongebalanceerd label &lt;translate>.\nVertaalsjabloon: <pre>$1</pre>",
+ "pt-parse-nested": "Geneste vertaaleenheden met &lt;translate> zijn niet toegestaan.\nLabeltekst: <pre>$1</pre>",
+ "pt-shake-multiple": "Meerdere markeringen voor vertaaleenheden voor een enkele vertaaleenheid aangetroffen.\nZorg ervoor dat de vertaaleenheden worden gescheiden door lege regels.\nTekst vertaaleenheid: <pre>$1</pre>",
+ "pt-shake-position": "Markeringen voor vertaaleenheden op een onverwachte plaats.\nTekst vertaaleenheid: <pre>$1</pre>",
+ "pt-shake-empty": "Lege vertaaleenheid voor markering $1.",
+ "log-description-pagetranslation": "Logboek voor handelingen gerelateerd aan het paginavertalingsysteem",
+ "log-name-pagetranslation": "Logboek paginavertaling",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|heeft}} $3 gemarkeerd voor vertaling",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|heeft}} $3 uit het vertaalsysteem verwijderd",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|heeft}} de vertaalbare pagina $3 hernoemd naar $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|is}} een probleem tegengekomen tijdens het hernoemen van de vertaalbare pagina $3 naar $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|heeft}} de vertaalbare pagina $3 verwijderd",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|heeft}} $3 niet kunnen verwijderen die hoort bij de vertaalbare pagina $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|heeft}} de vertaalde pagina $3 verwijderd",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|heeft}} $3 niet kunnen verwijderen die hoort bij de vertaalde pagina $4",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|heeft}} vertaling van $3 aangemoedigd",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|heeft}} vertaling van $3 ontmoedigd",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|heeft}} prioriteitstalen verwijderd van de vertaalbare pagina $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|heeft}} de prioriteitstalen ingesteld van de vertaalbare pagina $3 naar $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|heeft}} talen beperkt voor de vertaalbare pagina $3 naar $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|heeft}} de vertaalbare pagina $3 toegevoegd aan de samengestelde groep $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|heeft}} de vertaalbare pagina $3 verwijderd uit de samengestelde groep $4",
+ "log-action-filter-pagetranslation": "Soort handeling:",
+ "log-action-filter-pagetranslation-mark": "Voor vertaling markeren",
+ "log-action-filter-pagetranslation-unmark": "Als vertaalbare pagina verwijderd",
+ "log-action-filter-pagetranslation-move": "Paginahernoemingen",
+ "log-action-filter-pagetranslation-delete": "Paginaverwijderingen",
+ "log-action-filter-pagetranslation-encourage": "Aanmoedigen van vertalingen",
+ "log-action-filter-pagetranslation-discourage": "Ontmoedigen van vertalingen",
+ "log-action-filter-pagetranslation-prioritylanguages": "Wijziging van de prioriteitstalen",
+ "log-action-filter-pagetranslation-aggregategroups": "Wijzigingen aan samengestelde groepen",
+ "pt-movepage-title": "Te vertalen pagina $1 hernoemen",
+ "pt-movepage-blockers": "De te vertalen pagina kan niet hernoemd worden vanwege de volgende {{PLURAL:$1|foutmelding|foutmeldingen}}:",
+ "pt-movepage-block-base-invalid": "De vertaalbare doelpaginanaam is geen geldige paginanaam.",
+ "pt-movepage-block-tp-invalid": "De te vertalen doelpaginanaam voor [[:$1]] is ongeldig (te lang?).",
+ "pt-movepage-block-section-invalid": "De doelpagina voor \"[[:$1]]\" voor de vertaaleenheid is ongeldig (te lang?).",
+ "pt-movepage-block-subpage-invalid": "De doelsubpaginanaam voor [[:$1]] is ongeldig (te lang?).",
+ "pt-movepage-list-pages": "Lijst van te hernoemen pagina's",
+ "pt-movepage-list-translation": "Te vertalen {{PLURAL:$1|pagina|pagina's}}",
+ "pt-movepage-list-section": "{{PLURAL:$1|Pagina|Pagina's}} voor vertaaleenheden",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Deelpagina|Deelpagina's}} voor vertaling gemarkeerd",
+ "pt-movepage-list-translatable-note": "Deze pagina's moeten afzonderlijk hernoemd worden.",
+ "pt-movepage-list-other": "Andere {{PLURAL:$1|deelpagina|deelpagina's}}",
+ "pt-movepage-list-count": "In totaal {{PLURAL:$1|is er $1 pagina|zijn er $1 pagina's}} te hernoemen, waaronder $2 deelpagina{{PLURAL:$2||'s}} en $3 overlegpagina{{PLURAL:$3||'s}}.",
+ "pt-movepage-list-no-pages": "Geen pagina's gevonden.",
+ "pt-movepage-legend": "Te vertalen pagina hernoemen",
+ "pt-movepage-current": "Huidige naam:",
+ "pt-movepage-new": "Nieuwe naam:",
+ "pt-movepage-reason": "Reden:",
+ "pt-movepage-subpages": "Alle subpagina's hernoemen",
+ "pt-movepage-action-check": "Controleren of hernoemen mogelijk is",
+ "pt-movepage-action-perform": "Hernoemen",
+ "pt-movepage-action-other": "Doel wijzigen",
+ "pt-movepage-intro": "Met deze speciale pagina kunt u pagina's hernoemen die gemarkeerd zijn voor vertaling.\nDit kan enige tijd in beslag nemen, want er moeten vele pagina's hernoemd worden.\nTijdens het hernoemen is het niet mogelijk handelingen uit te voeren op de betrokken pagina's.\nIn het [[$1|logboek]] worden fouten opgeslagen die handmatig hersteld moeten worden.",
+ "pt-movepage-logreason": "Onderdeel van te vertalen pagina \"$1\"",
+ "pt-movepage-started": "Kijk over enige ogenblikken in het [[$1|logboek]] of er fouten zijn gemeld en of de handeling volledig is afgerond.",
+ "pt-locked-page": "Deze pagina kan niet gewijzigd worden omdat de te vertalen pagina op dit moment hernoemd wordt.",
+ "pt-deletepage-lang-title": "De vertaalde pagina \"$1\" wordt verwijderd",
+ "pt-deletepage-tp-title": "De vertaalbare pagina \"$1\" wordt verwijderd",
+ "pt-deletepage-invalid-title": "De opgegeven pagina is ongeldig.",
+ "pt-deletepage-invalid-text": "De opgegeven pagina is geen vertaalbare pagina en ook geen vertaalde pagina.",
+ "pt-deletepage-action-check": "Lijst met te verwijderen pagina's weergeven",
+ "pt-deletepage-action-perform": "Doorgaan met verwijderen",
+ "pt-deletepage-action-other": "Doel wijzigen",
+ "pt-deletepage-lang-legend": "Vertaalde pagina verwijderen",
+ "pt-deletepage-tp-legend": "Vertaalbare pagina verwijderen",
+ "pt-deletepage-mb-legend": "Berichtenbundel verwijderen",
+ "pt-deletepage-any-legend": "De vertaalbare pagina, berichtenbundel of vertaalde pagina verwijderen",
+ "pt-deletepage-current": "Paginanaam:",
+ "pt-deletepage-reason": "Reden:",
+ "pt-deletepage-reason-other": "Andere reden",
+ "pt-deletepage-subpages": "Alle subpagina's verwijderen",
+ "pt-deletepage-list-pages": "Lijst met te verwijderen pagina's",
+ "pt-deletepage-list-translation": "Vertaalde pagina's",
+ "pt-deletepage-list-section": "Pagina's voor vertaaleenheden",
+ "pt-deletepage-list-other": "Andere subpagina's",
+ "pt-deletepage-list-count": "In totaal {{PLURAL:$1|wordt er $1 pagina|worden er $1 pagina's}} en $2 {{PLURAL:$2|deelpagina|deelpagina's}} verwijderd.",
+ "pt-deletepage-list-no-pages": "Geen pagina's gevonden.",
+ "pt-deletepage-full-logreason": "Onderdeel van te vertalen pagina \"$1\"",
+ "pt-deletepage-lang-logreason": "Onderdeel van de vertaalde pagina \"$1\"",
+ "pt-deletepage-started": "Kijk in het [[$1|logboek]] of er fouten zijn gemeld en of de handeling volledig is afgerond.",
+ "pt-deletepage-intro": "Met deze speciale pagina kunt u een hele vertaalbare pagina, een berichtenbundel, of een individuele vertaalde pagina in een taal verwijderen.\nHet verwijderen gebeurt niet onmiddellijk, want alle pagina's die ervan afhankelijk zijn worden ook verwijderd.\nFouten worden opgenomen in het [[$1|betreffende logboek]] en moeten handmatig gecorrigeerd worden.",
+ "pagemigration": "Migratie van vertaalde pagina's",
+ "pagemigration-summary": "Voer een vertaalde pagina in en herstel de vertalingen die gemaakt zijn voordat het Translate systeem was geactiveerd op die pagina.",
+ "pm-import-button-label": "Importeren",
+ "pm-savepages-button-label": "Opslaan",
+ "pm-cancel-button-label": "Annuleren",
+ "pm-page-does-not-exist": "$1 bestaat niet",
+ "pm-old-translations-missing": "$1 bevat geen oude vertalingen",
+ "pm-extra-units-warning": "Extra eenheden zijn mogelijk aanwezig. Zorg ervoor dat de bron en vertaling eenheden overeenkomen.",
+ "pm-pagename-missing": "Voer een paginanaam in.",
+ "pm-add-icon-hover-text": "Voeg een eenheid hierbeneden toe",
+ "pm-swap-icon-hover-text": "Verwissel met de eenheid hier beneden",
+ "pm-delete-icon-hover-text": "Eenheid verwijderen",
+ "pm-pagetitle-placeholder": "Geef de paginatitel op",
+ "pm-pagetitle-invalid": "De paginamigratie werkt alleen op vertaalde pagina's, bijvoorbeeld \"Pagina/nl\". De opgegeven titel is geen geldige titel.",
+ "pm-pagetitle-missing": "Voer een paginanaam in.",
+ "pm-langcode-missing": "De paginamigratie werkt alleen op vertaalde pagina's, bijvoorbeeld \"Pagina/nl\". De opgegeven titel is geen vertaalde pagina.",
+ "pm-summary-import": "Vertaling geïmporteerd met [[Special:PageMigration|paginamigratie]]",
+ "pm-on-import-message-text": "De oude vertalingen zijn geïmporteerd. Gebruik de opties toevoegen, omwisselen en verwijderen voor het aanpassen van de vertaaleenheden en klik op de knop \"{{int:pm-savepages-button-label}}\" om ze op te slaan. Klik op de knop \"{{int:pm-cancel-button-label}}\" om te annuleren.",
+ "pm-on-save-message-text": "De vertaling eenheden zijn opgeslagen. U kunt nu de titel van een nieuwe vertalingspagina invoeren om deze te migreren, of wijzigingen aan de eenheden hieronder maken en deze opslaan als een nieuwe versie.",
+ "tpt-translate-title": "Vertaling van de paginanaam toestaan",
+ "pp-save-summary": "Pagina voorbereid voor vertaling",
+ "pagepreparation": "Pagina voorbereiden voor vertaling",
+ "pp-pagename-placeholder": "Geef de paginanaam op",
+ "pp-prepare-button-label": "Voorbereiden",
+ "pp-save-button-label": "Publiceren",
+ "pp-cancel-button-label": "Annuleren",
+ "pp-save-message": "De pagina is gepubliceerd. U kunt het [$1 bewerken].",
+ "pp-prepare-message": "De pagina is voorbereid voor vertaling. Zie de wijz hieronder. Klik op de \"{{int:pp-save-button-label}}\" knop indien correct!",
+ "pp-already-prepared-message": "Het lijkt erop dat de pagina al is voorbereid voor vertaling. Er zijn geen wijzigingen ten opzichte van de vorige versie.",
+ "pp-pagename-missing": "Voer een paginanaam in.",
+ "pp-diff-old-header": "Brontekst",
+ "pp-diff-new-header": "Voorbereide tekst",
+ "tpt-unlink-confirm": "Bevestig dat u deze pagina daadwerkelijk uit het vertalingssysteem wilt verwijderen.\nDe taalbalk en vertaalde paginanamen zullen niet meer werken. \nDe vertaalde pagina's zullen bewerkbaar worden.",
+ "tpt-unlink-button": "Verwijderen uit vertaling",
+ "tpt-unlink-summary": "Verwijderd als vertaalbare pagina",
+ "tpt-generic-confirm": "Bevestig de handeling.",
+ "tpt-generic-button": "Bevestigen"
+}
diff --git a/Translate/i18n/pagetranslation/nn.json b/Translate/i18n/pagetranslation/nn.json
new file mode 100644
index 00000000..3dc1d7d3
--- /dev/null
+++ b/Translate/i18n/pagetranslation/nn.json
@@ -0,0 +1,101 @@
+{
+ "@metadata": {
+ "authors": [
+ "Eirik",
+ "Frokor",
+ "Gunnernett",
+ "Harald Khan",
+ "Jon Harald Søby",
+ "Njardarlogar"
+ ]
+ },
+ "pagetranslation": "Sideomsetjing",
+ "right-pagetranslation": "Merk versjonar av sider for omsetjing",
+ "action-pagetranslation": "handsama omsetjingsmerkte sider",
+ "tpt-section": "Omsetjingseining $1",
+ "tpt-section-new": "Ny omsetjingseining. Namn: $1",
+ "tpt-section-deleted": "Omsetjingseining $1",
+ "tpt-diff-old": "Førre teksten",
+ "tpt-diff-new": "Ny tekst",
+ "tpt-submit": "Merk denne versjonen for omsetjing",
+ "tpt-sections-oldnew": "Nye og eksisterande omsetjingseiningar",
+ "tpt-sections-deleted": "Sletta omsetjingseiningar",
+ "tpt-sections-template": "Mal for omsetjingsside",
+ "tpt-badtitle": "Det gjevne sidenamnet ($1) er ikkje ein gyldig tittel",
+ "tpt-nosuchpage": "Sida $1 finst ikkje",
+ "tpt-oldrevision": "$2 er ikkje den siste versjonen av sida [[:$1]].\nBerre siste versjonar kan verta markert for omsetjing.",
+ "tpt-notsuitable": "Side $1 er ikkje høveleg for omsetjing.\nSjekk at sida er merkt med <nowiki><translate></nowiki>-merke og har ein gyldig syntaks.",
+ "tpt-saveok": "Sida [[:$1]] er vorten merkt for omsetjing med {{PLURAL:$2|éi omsetjingseining|$2 omsetjingseiningar}}. Ho kan no verta <span class=\"plainlinks\">[$3 sett om]</span>.",
+ "tpt-mark-summary": "Markerte denne versjonen for omsetjing",
+ "tpt-edit-failed": "Kunne ikkje oppdatera sida: $1",
+ "tpt-list-nopages": "Ingen sider er markerte for omsetjing, eller klar til å verta markert for omsetjing.",
+ "tpt-new-pages": "{{PLURAL:$1|Sida|Sidene}} inneheld tekst med omsetjingsmerke, men ingen versjon av {{PLURAL:$1|henne|dei}} er for tida merkt for omsetjing.",
+ "tpt-old-pages": "Ein versjon av {{PLURAL:$1|denne sida|desse sidene}} er vorten merkt for omsetjing.",
+ "tpt-other-pages": "{{PLURAL:$1|Ein gamal versjon av sida er merkt|Eldre versjonar av sidene er merkte}} for omsetjing, men {{PLURAL:$1|den siste versjonen|dei siste versjonane}} kan ikkje merkast for omsetjing.",
+ "tpt-select-prioritylangs-reason": "Årsak:",
+ "tpt-sections-prioritylangs": "Prioriterte språk",
+ "tpt-rev-mark": "merk for omsetjing",
+ "tpt-rev-unmark": "fjerna frå omsetjing",
+ "tpt-rev-discourage": "råd frå",
+ "tpt-rev-encourage": "attoppretta",
+ "tpt-rev-mark-tooltip": "Merk den siste versjonen av sida for omsetjing",
+ "tpt-rev-unmark-tooltip": "Fjerna sida frå omsetjing.",
+ "tpt-rev-discourage-tooltip": "Råd frå vidare omsetjing av sida.",
+ "tpt-rev-encourage-tooltip": "Attoppretta sida for normal omsetjing",
+ "translate-tag-translate-link-desc": "Set om sida",
+ "translate-tag-markthis": "Merk denne sida for omsetjing",
+ "translate-tag-markthisagain": "Sida har <span class=\"plainlinks\">[$1 vorten endra]</span> sidan ho sist vart <span class=\"plainlinks\">[$2 merkt for omsetjing]</span>.",
+ "translate-tag-hasnew": "Sida inneheld <span class=\"plainlinks\">[$1 endringar]</span> som ikkje er merkte for omsetjing.",
+ "tpt-translation-intro": "Sida er ein <span class=\"plainlinks\">[$1 omsett versjon]</span> av sida [[$2]], og omsetjinga er $3% ferdig.",
+ "tpt-translation-intro-fuzzy": "Utdaterte omsetjingar er merkte slik.",
+ "tpt-languages-legend": "På andre språk:",
+ "tpt-languages-zero": "Byrja omsetjing for dette språket",
+ "tpt-languages-nonzero": "$1 ($2 % sett om)",
+ "tpt-tab-translate": "Set om",
+ "tpt-translation-restricted": "Omsetjing av sida til dette språket er stogga av ein omsetjingsadministrator.\n\nÅrsak: $1",
+ "tpt-discouraged-language-force": "<strong>Sida kan ikkje setjast om til $2.</strong>\n\nEin omsetjingsadministrator har avgjort at sida berre kan setjast om til $3.",
+ "tpt-render-summary": "Oppdatering for å svara til ny versjon av kjeldesida",
+ "tpt-aggregategroup-add": "Legg til",
+ "tpt-aggregategroup-save": "Lagra",
+ "tpt-aggregategroup-new-name": "Namn:",
+ "log-description-pagetranslation": "Logg over handlingar i sideomsetjingssystemet",
+ "log-name-pagetranslation": "Sideomsetjingslogg",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|merkte}} $3 for omsetjing",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|fjerna}} $3 frå omsetjing",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|fullførte}} flyttinga av den omsetjingsmerkte sida $3 til $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|fullførte}} slettinga av den omsetjingsmerkte sida $3",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|fullførte}} slettinga av omsetjingssida $3",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|oppmoda}} til omsetjing av $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|frårådde}} omsetjing av $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|sette}} prioriterte språk for den omsetbare sida $3 til $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|avgrensa}} språka for den omsetjingsmerkte sida $3 til $5",
+ "log-action-filter-pagetranslation-encourage": "Oppmoding til omsetjing",
+ "log-action-filter-pagetranslation-discourage": "Fråråding av omsetjing",
+ "pt-movepage-title": "Flytt den omsetjingsmerkte sida «$1»",
+ "pt-movepage-list-pages": "Liste over sider som skal flyttast",
+ "pt-movepage-list-translation": "Omsetjingssider",
+ "pt-movepage-list-other": "Andre undersider",
+ "pt-movepage-list-count": "Totalt {{PLURAL:$1|éi side|$1 sider}} å flytta.",
+ "pt-movepage-legend": "Flytt side som kan setjast om",
+ "pt-movepage-current": "Namn no:",
+ "pt-movepage-new": "Nytt namn:",
+ "pt-movepage-reason": "Årsak:",
+ "pt-movepage-subpages": "Flytt alle undersider",
+ "pt-movepage-action-check": "Sjå om flyttinga er mogeleg",
+ "pt-movepage-action-perform": "Utfør flyttinga",
+ "pt-movepage-action-other": "Endra mål",
+ "pt-movepage-logreason": "Del av omsetjingsmerkt side «$1»",
+ "pt-deletepage-action-perform": "Utfør slettinga",
+ "pt-deletepage-action-other": "Endra mål",
+ "pt-deletepage-lang-legend": "Sletta omsetbar side",
+ "pt-deletepage-tp-legend": "Slett omsetjingsmerkt side",
+ "pt-deletepage-current": "Sidenamn:",
+ "pt-deletepage-reason": "Årsak:",
+ "pt-deletepage-subpages": "Sletta alle undersider",
+ "pt-deletepage-list-pages": "Liste over sider som skal slettast",
+ "pt-deletepage-list-other": "Andre undersider",
+ "pt-deletepage-full-logreason": "Del av den omsetjingsmerkte sida «$1»",
+ "tpt-unlink-button": "Fjern frå omsetjing",
+ "tpt-unlink-summary": "Fjerna side frå omsetjing",
+ "tpt-generic-button": "Stadfest"
+}
diff --git a/Translate/i18n/pagetranslation/nqo.json b/Translate/i18n/pagetranslation/nqo.json
new file mode 100644
index 00000000..750234ac
--- /dev/null
+++ b/Translate/i18n/pagetranslation/nqo.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lancine.kounfantoh.fofana",
+ "Lanciné.kounfantoh.fofana",
+ "Youssoufkadialy"
+ ]
+ },
+ "tpt-languages-nonzero": "(ߘߟߊߡߌ߬ߘߊ߬ߣߍ߲ %$2)$1",
+ "tpt-aggregategroup-close": "ߊ߬ ߘߊߕߎ߲߯",
+ "pm-pagetitle-not-translatable": "$1 ߕߍ߫ ߞߐߜߍ߫ ߘߟߊߡߌ߬ߘߊ߬ߕߊ ߟߎ߬ ߝߋ߲߫ ߘߌ߫."
+}
diff --git a/Translate/i18n/pagetranslation/nys.json b/Translate/i18n/pagetranslation/nys.json
new file mode 100644
index 00000000..d15a369e
--- /dev/null
+++ b/Translate/i18n/pagetranslation/nys.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gnangarra"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% translated)"
+}
diff --git a/Translate/i18n/pagetranslation/oc.json b/Translate/i18n/pagetranslation/oc.json
new file mode 100644
index 00000000..cf741b7f
--- /dev/null
+++ b/Translate/i18n/pagetranslation/oc.json
@@ -0,0 +1,63 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cedric31"
+ ]
+ },
+ "pagetranslation": "Traduccion de paginas",
+ "right-pagetranslation": "Marcar de versions de paginas per èsser traduitas",
+ "tpt-section": "Unitat de traduccion $1",
+ "tpt-section-new": "Unitat de traduccion novèla. Nom : $1",
+ "tpt-section-deleted": "Unitat de traduccion $1",
+ "tpt-diff-old": "Tèxte precedent",
+ "tpt-diff-new": "Tèxte novèl",
+ "tpt-submit": "Marcar aquesta version per èsser traduita",
+ "tpt-sections-oldnew": "Unitats de traduccion novèlas e existentas",
+ "tpt-sections-deleted": "Unitats de traduccion suprimidas",
+ "tpt-sections-template": "Modèl de pagina de traduccion",
+ "tpt-action-nofuzzy": "Invalidar pas las traduccions",
+ "tpt-badtitle": "Lo nom de pagina donada ($1) es pas un títol valid",
+ "tpt-oldrevision": "$2 es pas la darrièra version de la pagina [[:$1]].\nSola la darrièra version de la pagina pòt èsser marcada per èsser traduita.",
+ "tpt-notsuitable": "La pagina $1 conven pas per èsser traduita.\nSiatz segur(a) que conten la balisa <nowiki><translate></nowiki> e qu'a una sintaxi corrècta.",
+ "tpt-saveok": "La pagina [[:$1]] es estada marcada per èsser traduita amb $2 {{PLURAL:$2|unitat de traduccion|unitats de traduccion}}.\nLa pagina pòt èsser <span class=\"plainlinks\">[$3 traduita]</span> tre ara.",
+ "tpt-showpage-intro": "Çaijós, las traduccions novèlas, las qu'existisson e las suprimidas.\nAbans de marcar aquestas versions per èsser traduitas, verificatz que las modificacions a las seccions son minimizadas per evitar de trabalh inutil als traductors.",
+ "tpt-mark-summary": "Aquesta version es estada marcada per èsser traduita",
+ "tpt-edit-failed": "Impossible de metre a jorn la pagina $1",
+ "tpt-list-nopages": "Cap de pagina es pas estada marcada per èsser traduita o prèsta per l'èsser.",
+ "tpt-new-pages": "{{PLURAL:$1|Aquesta pagina conten|Aquestas paginas contenon}} de tèxte amb de balisas de traduccion, mas cap de version d'{{PLURAL:$1|aquesta pagina es pas marcada per èsser traduita|aquestas paginas son pas marcadas per èsser traduitas}}.",
+ "tpt-old-pages": "De versions d'{{PLURAL:$1|aquesta pagina|aquestas paginas}} son estadas marcadas per èsser traduitas.",
+ "tpt-select-prioritylangs-force": "Empachar las traduccions dins de lengas autras que las lengas prioritàrias",
+ "tpt-select-prioritylangs-reason": "Motiu :",
+ "tpt-sections-prioritylangs": "Lengas prioritàrias",
+ "tpt-rev-mark": "marcar per traduccion",
+ "tpt-rev-unmark": "suprimir de la traduccion",
+ "tpt-rev-discourage": "descoratjar",
+ "tpt-rev-encourage": "restablir",
+ "tpt-rev-discourage-tooltip": "Dissuadir las futuras traduccions sus aquesta pagina.",
+ "translate-tag-translate-link-desc": "Traduire aquesta pagina",
+ "translate-tag-markthis": "Marcar aquesta pagina per èsser traduita",
+ "translate-tag-markthisagain": "Aquesta pagina a agut <span class=\"plainlinks\">[$1 de modificacions]</span> dempuèi qu’es estada darrièrament <span class=\"plainlinks\">[$2 marcada per èsser traduita]</span>.",
+ "translate-tag-hasnew": "Aquesta pagina conten <span class=\"plainlinks\">[$1 de modificacions]</span> que son pas marcadas per la traduccion.",
+ "tpt-translation-intro": "Aquesta pagina es una <span class=\"plainlinks\">[$1 version traduita]</span> de la pagina [[$2]] e la traduccion es completada a $3 %.",
+ "tpt-translation-intro-fuzzy": "Las traduccions obsolètas son indentificadas atal.",
+ "tpt-languages-legend": "Autras lengas :",
+ "tpt-languages-nonzero": "$1 ($2% traduit)",
+ "tpt-target-page": "Aquesta pagina pòt pas èsser mesa a jorn manualament.\nEs una version traduita de [[$1]] e la traduccion pòt èsser mesa a jorn en utilizant [$2 l'aisina de traduccion].",
+ "tpt-unknown-page": "Aqueste espaci de noms es reservat per la traduccion de paginas.\nLa pagina qu'ensajatz de modificar sembla pas correspondre a cap de pagina marcada per èsser traduita.",
+ "tpt-render-summary": "Mesa a jorn per èsser en acòrd amb la version novèla de la font de la pagina",
+ "tpt-aggregategroup-add": "Apondre",
+ "tpt-aggregategroup-save": "Enregistrar",
+ "tpt-aggregategroup-add-new": "Apondre un novèl grop d'agregacion",
+ "tpt-aggregategroup-new-name": "Nom :",
+ "pt-movepage-list-translation": "{{PLURAL:$1|pagina|paginas}} de traduccion",
+ "pt-movepage-new": "Nom novèl :",
+ "pt-movepage-reason": "Motiu :",
+ "pt-movepage-subpages": "Renomenar totas las sospaginas",
+ "pt-movepage-action-perform": "Renomenar",
+ "pt-movepage-action-other": "Cambiar la cibla",
+ "pt-deletepage-current": "Nom de la pagina :",
+ "pt-deletepage-reason": "Motiu :",
+ "pm-old-translations-missing": "$1 conten pas d’ancianas traduccions",
+ "pm-add-icon-hover-text": "Apondre una unitat çaijós",
+ "pm-pagetitle-placeholder": "Entrar lo títol de la pagina"
+}
diff --git a/Translate/i18n/pagetranslation/ojb.json b/Translate/i18n/pagetranslation/ojb.json
new file mode 100644
index 00000000..1aeb899a
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ojb.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aandeginini"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% aanji' inwewin)"
+}
diff --git a/Translate/i18n/pagetranslation/olo.json b/Translate/i18n/pagetranslation/olo.json
new file mode 100644
index 00000000..743bad57
--- /dev/null
+++ b/Translate/i18n/pagetranslation/olo.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mashoi7"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% kiännetty)"
+}
diff --git a/Translate/i18n/pagetranslation/om.json b/Translate/i18n/pagetranslation/om.json
new file mode 100644
index 00000000..ad36ec9a
--- /dev/null
+++ b/Translate/i18n/pagetranslation/om.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Maammee"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% hiikameera)"
+}
diff --git a/Translate/i18n/pagetranslation/or.json b/Translate/i18n/pagetranslation/or.json
new file mode 100644
index 00000000..fd34f227
--- /dev/null
+++ b/Translate/i18n/pagetranslation/or.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ansumang",
+ "Jnanaranjan Sahu"
+ ]
+ },
+ "pagetranslation": "ପୃଷ୍ଠା ଅନୁବାଦ",
+ "tpt-languages-legend": "ଅଲଗା ଭାଷାସବୁ:",
+ "tpt-languages-nonzero": "$1 ($2% ଅନୁବାଦିତ)",
+ "pt-movepage-list-translation": "ଅନୁବାଦ ପୃଷ୍ଠାସବୁ",
+ "pt-movepage-list-other": "ଅନ୍ୟ ଉପପୃଷ୍ଠାସବୁ",
+ "pt-movepage-legend": "ଅନୁବାଦ ହୋଇପାରୁଥିବା ପୃଷ୍ଠାଗୁଡିକୁ ଘୁଞ୍ଚାଇବେ",
+ "pt-movepage-current": "ବର୍ତମାନର ନାମ",
+ "pt-movepage-new": "ନୂଆ ନାମ",
+ "pt-movepage-reason": "କାରଣ :",
+ "pt-deletepage-current": "ପୃଷ୍ଠା ନାମ:",
+ "pt-deletepage-reason": "କାରଣ:",
+ "pt-deletepage-list-section": "ଅନୁଭାଗ ପୃଷ୍ଠାସବୁ"
+}
diff --git a/Translate/i18n/pagetranslation/pa.json b/Translate/i18n/pagetranslation/pa.json
new file mode 100644
index 00000000..0ff5a84d
--- /dev/null
+++ b/Translate/i18n/pagetranslation/pa.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Babanwalia",
+ "Satdeep gill"
+ ]
+ },
+ "tpt-mark-nochanges": "ਇਸ ਸੁਧਾਈ ਅਤੇ ਆਖ਼ਰੀ ਨਿਸ਼ਾਨਦੇਹ ਸੁਧਾਈ ਵਿੱਚ ਕੋਈ ਫ਼ਰਕ ਨਹੀਂ ਹੈ।",
+ "tpt-translation-intro": "ਇਹ ਸਫ਼ਾ [[$2]] ਸਫ਼ੇ ਦਾ <span class=\"plainlinks\">[$1 ਤਰਜਮਾ ਕੀਤਾ ਰੂਪ]</span> ਹੈ ਅਤੇ ਤਰਜਮਾਕਾਰੀ $3% ਪੂਰੀ ਹੋਈ ਹੈ।",
+ "tpt-languages-legend": "ਹੋਰ ਬੋਲੀਆਂ:",
+ "tpt-languages-nonzero": "$1 ($2% ਅਨੁਵਾਦਿਤ)",
+ "tpt-unlink-button": "ਤਰਜਮਾਕਾਰੀ ਤੋਂ ਹਟਾਉ",
+ "tpt-unlink-summary": "ਸਫ਼ੇ ਨੂੰ ਤਰਜਮਾਕਾਰੀ ਤੋਂ ਹਟਾਇਆ"
+}
diff --git a/Translate/i18n/pagetranslation/pam.json b/Translate/i18n/pagetranslation/pam.json
new file mode 100644
index 00000000..593a201a
--- /dev/null
+++ b/Translate/i18n/pagetranslation/pam.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Leeheonjin",
+ "Val2397"
+ ]
+ },
+ "tpt-aggregategroup-add": "↓Dagdag",
+ "tpt-aggregategroup-save": "↓Isikap",
+ "tpt-aggregategroup-add-new": "↓Magdagdag a bayung piabeng lupung",
+ "tpt-aggregategroup-new-name": "↓Lagiu:",
+ "pp-cancel-button-label": "E taglus"
+}
diff --git a/Translate/i18n/pagetranslation/pap.json b/Translate/i18n/pagetranslation/pap.json
new file mode 100644
index 00000000..a49131e0
--- /dev/null
+++ b/Translate/i18n/pagetranslation/pap.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "ObaTango"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% tradusí)"
+}
diff --git a/Translate/i18n/pagetranslation/pcd.json b/Translate/i18n/pagetranslation/pcd.json
new file mode 100644
index 00000000..ac25233f
--- /dev/null
+++ b/Translate/i18n/pagetranslation/pcd.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Geoleplubo"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% értraduit)"
+}
diff --git a/Translate/i18n/pagetranslation/pdc.json b/Translate/i18n/pagetranslation/pdc.json
new file mode 100644
index 00000000..c75c2f49
--- /dev/null
+++ b/Translate/i18n/pagetranslation/pdc.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Xqt"
+ ]
+ },
+ "pagetranslation": "Iwwersetzing vun Bledder",
+ "translate-tag-translate-link-desc": "Des Blatt iwwersetze",
+ "tpt-languages-legend": "Annere Schprooche:",
+ "pt-movepage-new": "Neier Naame:",
+ "pt-movepage-reason": "Grund:",
+ "pt-deletepage-current": "Naame vum Blatt:",
+ "pt-deletepage-reason": "Grund:"
+}
diff --git a/Translate/i18n/pagetranslation/pfl.json b/Translate/i18n/pagetranslation/pfl.json
new file mode 100644
index 00000000..0f52215d
--- /dev/null
+++ b/Translate/i18n/pagetranslation/pfl.json
@@ -0,0 +1,124 @@
+{
+ "@metadata": {
+ "authors": [
+ "Manuae"
+ ]
+ },
+ "pagetranslation": "Saide iwasedze",
+ "right-pagetranslation": "Gschischd vunde Saide fas Iwasedze kennzaischne",
+ "tpt-section": "Iwasedzungsoihaid „$1“",
+ "tpt-section-new": "Naiji Iwasedzungsoihaid\nNoame: $1",
+ "tpt-section-deleted": "Iwasedzungsoihaid „$1“",
+ "tpt-diff-old": "Vorische Tegschd",
+ "tpt-diff-new": "Naije Tegschd",
+ "tpt-submit": "Die Ausgab fas Iwasedze kennzaischne",
+ "tpt-sections-oldnew": "Naiji un bschdejendi Iwasedzungsoihaide",
+ "tpt-sections-deleted": "G'leschdi Iwasedzungsoihaide",
+ "tpt-sections-template": "Voalaach fa Iwasedzungssaide",
+ "tpt-action-nofuzzy": "Iwasedzunge ned als ugildisch eagläre",
+ "tpt-badtitle": "De oagewene Saidenoame „$1“ ischn ugildische Tidl",
+ "tpt-nosuchpage": "Said $1 gibds ned",
+ "tpt-oldrevision": "$2 isch ned die naischdi Ausgab vunde Said [[:$1]].\nBloß die naischd Ausgab konn fas Iwasedze kennzaischnd werre.",
+ "tpt-notsuitable": "Die Said $1 isch ned fas Iwasedze g'aischnd.\nSaida sicha, dasses än <nowiki><translate></nowiki>-Uffschrifd unän gildischi Sadsuffbau bnudzd werd.",
+ "tpt-saveok": "Die Said [[:$1]] isch midm iwasedzbari {{PLURAL:$2|Abschnidd|$2 Abschnidd}} fas Iwasedze kennzaischnd worre.\nDie Said konn donn <span class=\"plainlinks\">[$3 iwasedzd]</span> werre.",
+ "tpt-showpage-intro": "Unne sin naiji voahoandeni un g'leschdi B'raisch uffglischded.\nVorm Kennzaischen vunde Ausgab fas Iwasedze, iwabrief, das die Änarunge vunde Abschnidd a klä sin, dmidma unedischi Erwed schbaare dud.",
+ "tpt-mark-summary": "Die Said fas Iwasedze kennzaischne",
+ "tpt-edit-failed": "Said konn ned agdualisiad werre: $1",
+ "tpt-duplicate": "De Noame vun der Iwasedzungoihaid $1 werd efda als ämol bnudzd.",
+ "tpt-unmarked": "Said $1 isch nemme fas Iwasedze kennzaischnd.",
+ "tpt-list-nopages": "Sin kä Saide fas Iwasedze fraigewe un a ned ferdisch, um fraigewe werre zu kenne.",
+ "tpt-new-pages-title": "Saide, wu fas Iwasedze voagschlache worre sin",
+ "tpt-old-pages-title": "Saide fas Iwasedze",
+ "tpt-other-pages-title": "Kapudde Saide",
+ "tpt-new-pages": "Die {{PLURAL:$1|Said hodn|Saide hawen'än}} Tegschd fas Iwasedze. S'isch awa noch kä Ausgab vunde {{PLURAL:$1|Said|Saide}} fas Iwasedze kennzaischnd worre.",
+ "tpt-old-pages": "Ä Ausgab vunde {{PLURAL:$1|Said|Saide}} isch fas Iwasedze kennzaischend worre.",
+ "tpt-other-pages": "Ä aldi Ausgab vunde {{PLURAL:$1|Said|Saide}} sin fas Iwasedze kennzaischnd worre.\nDie naischd Ausgab konn awa ned fa ä Iwasedzung kennzaischnd werre.",
+ "tpt-select-prioritylangs": "Komma gdrenndi Lischd vun voaroangischi Schboochcode:",
+ "tpt-select-prioritylangs-force": "Vahinas Iwasedze in oanare als die voaroangischi Schbrooche",
+ "tpt-select-prioritylangs-reason": "Grund:",
+ "tpt-sections-prioritylangs": "Voaroangischi Schbrooche",
+ "tpt-rev-mark": "Fas Iwasedze fraigewe",
+ "tpt-rev-unmark": "Fraigab fas Iwasedze wegnemme",
+ "tpt-rev-discourage": "Abg'rode",
+ "tpt-rev-encourage": "Widdaheaschdelle",
+ "tpt-rev-mark-tooltip": "Die ledschd Ausgab vunde Said fas Iwasedze kennzaischne",
+ "tpt-rev-unmark-tooltip": "Die Said fas Iwasedze wegnemme.",
+ "tpt-rev-discourage-tooltip": "Rod vuna Iwasedzung vunde Said ab.",
+ "tpt-rev-encourage-tooltip": "S'Iwasedze vunde Said widaheaschdelle.",
+ "translate-tag-translate-link-desc": "Said iwasedze",
+ "translate-tag-markthis": "Said fas Iwasedze kennzaischne",
+ "translate-tag-markthisagain": "Onde Said isch <span class=\"plainlinks\">[$1 gschaffd worre]</span>, nochdemmase <span class=\"plainlinks\">[$2 fas Iwasedz fraigewe]</span> kabd hod.",
+ "translate-tag-hasnew": "Onde Said hods <span class=\"plainlinks\">[$1 Eawede]</span>, wu ned fas Iwasedze fraigewe worre sin.",
+ "tpt-translation-intro": "Die Said isch ä <span class=\"plainlinks\">[$1 iwasedzdi Fassung]</span> vunde Said [[$2]] un die Iwasedzung isch zu $3 % ferdisch.",
+ "tpt-translation-intro-fuzzy": "Va'aldedi Iwasedzunge werre so kennzaischnd.",
+ "tpt-languages-legend": "Onare Schbroche",
+ "tpt-languages-zero": "Midm Iwasedze in die Schbrooch oafonge",
+ "tpt-languages-nonzero": "$1 ($2% iwwasezd)",
+ "tpt-target-page": "Die Said konned vun Hoand agdualisiad werre.\nDie Said ischä Iwasedzung vunde Said [[$1]] un die Iwasedzung koama midm [$2 Iwasedzungsweagzaisch] agdualisiere.",
+ "tpt-unknown-page": "D'Noamensraum isch fas Iwasedze vun Wikisaide reswawiad.\nDie Said, wu grad schaffe duschd, enschbrischd käna iwasedbari Said.",
+ "tpt-translation-restricted": "S'Iwasedze vunde Said in die Schbrooch isch duaschn Administrator vahinad worre.\n\nGrund: $1",
+ "tpt-discouraged-language-force": "S'Iwasedze vunde Said in Schbrooche isch duaschn Administrator oigschrängd worre. Die Schbrooch isch laida ned unade ealaubde Schbrooche.\n\nGrund: $1",
+ "tpt-priority-languages": "Än Administrator hoddie voaroangischi Schbrooche fa die Grubb uff $1 gsedzd.",
+ "tpt-render-summary": "Iwanemm die naijschd Ausgab vunde Qwellsaid",
+ "aggregategroups": "Grubbe zsommefasse",
+ "tpt-aggregategroup-add": "Dzufiesche",
+ "tpt-aggregategroup-save": "Schbaischare",
+ "tpt-aggregategroup-add-new": "Ä naiji zsommegfasdi Grubb dzufiesche",
+ "tpt-aggregategroup-new-name": "Noame:",
+ "tpt-aggregategroup-new-description": "Bschraiwung (fraiwillisch)",
+ "tpt-aggregategroup-remove-confirm": "Bischda sischa, dass die zsommegfasdi Grubb lesche wilschd?",
+ "tpt-aggregategroup-invalid-group": "Die Grubb hods ned",
+ "pt-parse-open": "Ä &lt;translate&gt;-Uffschrifd hodkä Gescheschdigg.\nIwasedzungsvorlaach: <pre>$1</pre>",
+ "pt-parse-close": "Än&lt;translate&gt;-Uffschrifd hodkä Gescheschdigg.\nIwasedzungsvorlaach: <pre>$1</pre>",
+ "pt-parse-nested": "Vaschacheldi &lt;translate&gt;-Abschnidd sined meschlisch.\nText vunde Uffschrifd: <pre>$1</pre>",
+ "pt-shake-multiple": "Mehrare Abschnittszaische fa'n Abschnidd.\nTegschd vum Abschnidd: <pre>$1</pre>",
+ "pt-shake-position": "Abschnittszaische onär ueawadede Schdell.\nTegschd vum Abschnidd: <pre>$1</pre>",
+ "pt-shake-empty": "De Abschnid fas Zaische $1 isch lea.",
+ "log-description-pagetranslation": "Logbuch fa Änarunge, wus Iwasedzungssischdem fa Saide noidud",
+ "log-name-pagetranslation": "Iwasedzungs-Logbuch",
+ "pt-movepage-title": "Bweesch die iwasedzba Said $1",
+ "pt-movepage-blockers": "Die iwasedzba Said kon {{PLURAL:$1|weschm|weschede}} Fehla ned uffde naije Noame bweschd werre:",
+ "pt-movepage-block-base-invalid": "Die Grundsaid hod kän gildische Tidl.",
+ "pt-movepage-block-tp-invalid": "Die Iwasedzung vum Saidetitl fa [[:$1]] deed ned gildisch soi (zu loang?).",
+ "pt-movepage-block-section-invalid": "Die Iwasedzung vunde Abschniddsaid fa [[:$1]] deed ned gildisch soi (zu loang?).",
+ "pt-movepage-block-subpage-invalid": "De Saidetitl fa [[:$1]] deed ned gildisch soi (zu loang?).",
+ "pt-movepage-list-pages": "Lisch vunde Saide, wu zu vaschiewe sin",
+ "pt-movepage-list-translation": "Iwasedzdi {{PLURAL:$1|Said|Saide}}",
+ "pt-movepage-list-section": "Iwwasezdi Grubb {{PLURAL:$1|Said|Saide}}",
+ "pt-movepage-list-other": "Waidari Una{{PLURAL:$1|said|saide}}",
+ "pt-movepage-list-count": "Gsomd hods $1 {{PLURAL:$1|Said|Saide}} fas vaschiewe.",
+ "pt-movepage-legend": "Bweesch die iwasedzba Said",
+ "pt-movepage-current": "Agduelle Noame:",
+ "pt-movepage-new": "Naije Noame:",
+ "pt-movepage-reason": "Grund:",
+ "pt-movepage-subpages": "Beweesch alli Unsasaide",
+ "pt-movepage-action-check": "Iwabrief, obs Vaschiewe meschlisch isch",
+ "pt-movepage-action-perform": "Vaschiebs",
+ "pt-movepage-action-other": "Änas Ziel",
+ "pt-movepage-intro": "Die Schbezialsaid eameschlischds Saide zu vaschiewe, wu fas Iwasedze gkennzaischnd worre sin.\nDie Vaschiewung gehdned glaisch, wails viel Saide hod.\nWerendm Vaschiewe komma die Saide ned bnudze.\nFehla werre im [[Special:Log/pagetranslation|Iwasedzungs-Logbuch]] uffgschriewe un missn vun Hond vaänad werre.",
+ "pt-movepage-logreason": "Deel vunde iwasedzbari Said $1.",
+ "pt-movepage-started": "Die Grundsaid isch vaschowe worre.\nBriefs [[Special:Log/pagetranslation|Übersetzungs-Logbuch]] uff Nochrischde vun Fehla- unde Ferdischschdellung.",
+ "pt-locked-page": "Die Said isch gsischad, wail die Iwasetzungssaid grad vaschowe werd.",
+ "pt-deletepage-lang-title": "Lesche vunde iwasedzdi Saide $1.",
+ "pt-deletepage-tp-title": "Lesche vunde iwasedzbari Saide $1.",
+ "pt-deletepage-invalid-title": "Die oagewe Said isch ugildisch.",
+ "pt-deletepage-invalid-text": "Die ogewe Said konned iwwasezd werre un isch a kä Iwasedzung.",
+ "pt-deletepage-action-check": "Zaisch leschbari Saide",
+ "pt-deletepage-action-perform": "Leschs",
+ "pt-deletepage-action-other": "Änas Ziel",
+ "pt-deletepage-lang-legend": "Iwasedzdi Said lesche",
+ "pt-deletepage-tp-legend": "Iwasedzbari Said lesche",
+ "pt-deletepage-any-legend": "Iwasedzbari oda iwasedzdi Said lesche",
+ "pt-deletepage-current": "Saidenoame:",
+ "pt-deletepage-reason": "Grund:",
+ "pt-deletepage-subpages": "Lesch alli Unasaide",
+ "pt-deletepage-list-pages": "Lisch vunde Saide, wu zu lesche sin",
+ "pt-deletepage-list-translation": "Iwasedzdi Saide",
+ "pt-deletepage-list-section": "Iwwasedzungs-Grubbsaide",
+ "pt-deletepage-list-other": "Waidari Unasaide",
+ "pt-deletepage-list-count": "Gsomd hods $1 {{PLURAL:$1|Said|Saide}} fas lesche.",
+ "pt-deletepage-full-logreason": "Deel vunde iwasedzbari Said $1.",
+ "pt-deletepage-lang-logreason": "Deel vunde iwasedzde Said $1.",
+ "pt-deletepage-started": "Iwabriefs [[Special:Log/pagetranslation|Iwasedzungs-Logbuch]] noch Fehla un Nochrischde fas Feadischschdelle.",
+ "pt-deletepage-intro": "Die Schbezialsaid konn alli iwasedzbari oda iwasedzdi Saide vunär Schbrooch lesche.\nS'Lesche werd ned glaisch gmachd, wenns viel Saide sin.\nFehla werren im [[Special:Log/pagetranslation|Iwasedzungs-Logbuch]] oigdraache un missn vun Hoand b'rischdischd werre."
+}
diff --git a/Translate/i18n/pagetranslation/pl.json b/Translate/i18n/pagetranslation/pl.json
new file mode 100644
index 00000000..d1c7ee0c
--- /dev/null
+++ b/Translate/i18n/pagetranslation/pl.json
@@ -0,0 +1,255 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "BeginaFelicysym",
+ "Chrumps",
+ "Deejay1",
+ "Equadus",
+ "Jdx",
+ "Leinad",
+ "Matik7",
+ "Matma Rex",
+ "Mazab IZW",
+ "Olgak85",
+ "Py64",
+ "Rail",
+ "Railfail536",
+ "Sp5uhe",
+ "ToSter",
+ "WTM",
+ "Woytecr"
+ ]
+ },
+ "pagetranslation": "Tłumaczenie stron",
+ "right-pagetranslation": "Oznaczanie wersji stron do przetłumaczenia",
+ "action-pagetranslation": "zarządzanie stronami do tłumaczenia",
+ "tps-edit-sourcepage-text": "Edytujesz stronę źródłową do przetłumaczenia. Upewnij się, że zapoznałeś się z poniższą dokumentacją:\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text Zmienianie treści strony źródłowej]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Markup_examples Przykład znaczników]",
+ "tps-edit-sourcepage-ve-warning-title": "Uwaga: Niewspierana strona",
+ "tps-edit-sourcepage-ve-warning-text": "Edytujesz stronę przeznaczoną do tłumaczenia. Jej edycja w tym edytorze nie jest jeszcze oficjalnie obsługiwana. Użyj edytora kodu źródłowego.",
+ "tps-edit-sourcepage-ve-warning-button": "OK",
+ "tpt-section": "Jednostka tłumaczenia $1",
+ "tpt-section-new": "Nowa jednostka tłumaczenia.\nNazwa – $1",
+ "tpt-section-deleted": "Jednostka tłumaczenia $1",
+ "tpt-diff-old": "Poprzedni tekst",
+ "tpt-diff-new": "Nowy tekst",
+ "tpt-submit": "Oznacz tę wersję do przetłumaczenia",
+ "tpt-sections-oldnew": "Nowe i istniejące jednostki tłumaczenia",
+ "tpt-sections-deleted": "Usunięte jednostki tłumaczenia",
+ "tpt-sections-template": "Szablon strony tłumaczenia",
+ "tpt-action-nofuzzy": "Nie unieważniaj tłumaczeń",
+ "tpt-badtitle": "Podana nazwa strony ($1) nie jest dozwolonym tytułem",
+ "tpt-nosuchpage": "Strona $1 nie istnieje",
+ "tpt-oldrevision": "$2 nie jest najnowszą wersją strony [[:$1]].\nTylko najnowsze wersje mogą być oznaczane do tłumaczenia.",
+ "tpt-notsuitable": "Strona $1 nie nadaje się do tłumaczenia.\nUpewnij się, że ma znaczniki <nowiki><translate></nowiki> i właściwą składnię.",
+ "tpt-saveok": "Strona [[:$1]] została oznaczona do tłumaczenia razem z $2 {{PLURAL:$2|jednostką|jednostkami}} tłumaczenia.\nMożna ją teraz <span class=\"plainlinks\">[$3 przetłumaczyć]</span>.",
+ "tpt-saveok-first": "Możesz [[Special:PageMigration|zaimportować istniejące tłumaczenia]] dla tej strony (jeżeli istnieją).",
+ "tpt-offer-notify": "Możesz <span class=\"plainlinks\">[$1 powiadomić tłumaczy]</span> o tej stronie.",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|Zobacz listę stron do przetłumaczenia.]]",
+ "tpt-showpage-intro": "Poniżej wypisane są nowe, istniejące i usunięte sekcje.\nPrzed oznaczeniem tej wersji do tłumaczenia, aby uniknąć niepotrzebnej pracy tłumaczy, sprawdź czy zmiany w sekcjach zostały zminimalizowane.",
+ "tpt-mark-summary": "Oznaczono tę wersję do tłumaczenia",
+ "tpt-mark-nochanges": "Nie ma zmian do przejrzenia. Oznaczenie tej strony do tłumaczenia nie spowoduje jej zmiany ani żadnej istniejącej jednostki tłumaczeń.",
+ "tpt-edit-failed": "Nie udało się zaktualizować strony $1",
+ "tpt-duplicate": "Nazwa jednostki tłumaczenia $1 jest używana więcej niż jeden raz.",
+ "tpt-invalid": "Nazwa jednostki tłumaczenia $1 nie może zawierać znaku podkreślenia lub ukośnika.",
+ "tpt-unmarked": "Strona [[:$1]] nie będzie dłużej oznaczona jako przeznaczona do tłumaczenia.",
+ "tpt-list-nopages": "Nie oznaczono stron do tłumaczenia i nie ma stron gotowych do oznaczenia do tłumaczenia.",
+ "tpt-new-pages-title": "Strony proponowane do tłumaczenia",
+ "tpt-old-pages-title": "Strony będące w tłumaczeniu",
+ "tpt-other-pages-title": "Uszkodzone strony",
+ "tpt-outdated-pages-title": "Strony ze oczekującymi zmianami",
+ "tpt-new-pages": "{{PLURAL:$1|Ta strona zawiera|Te strony zawierają}} tekst ze znacznikami tłumaczenia, ale żadna wersja {{PLURAL:$1|tej strony|tych stron}} nie jest aktualnie oznaczona do tłumaczenia.",
+ "tpt-old-pages": "Najnowsza wersja {{PLURAL:$1|tej strony|tych stron}} została oznaczona do tłumaczenia.",
+ "tpt-other-pages": "{{PLURAL:$1|Stara wersja tej strony jest oznaczona jako przeznaczona|Stare wersje tych stron są oznaczone jako przeznaczone}} do tłumaczenia, ale {{PLURAL:$1|jej aktualna wersja nie może zostać oznaczona jako przeznaczona|ich aktualne wersje nie mogą zostać oznaczone jako przeznaczone}} do tłumaczenia.",
+ "tpt-outdated-pages": "{{PLURAL:$1|Ta strona ma|Te strony mają}} zmiany nieoznaczone do tłumaczenia.",
+ "tpt-tag-discouraged": "odradzona",
+ "tpt-tag-oldsyntax": "stara składnia",
+ "tpt-tag-no-transclusion-support": "nie wspiera załączania",
+ "tpt-select-prioritylangs": "Kody języków priorytetowych rozdzielone przecinkami:",
+ "tpt-select-prioritylangs-force": "Zapobieganie tłumaczeniom na języki inne niż priorytetowe",
+ "tpt-select-prioritylangs-reason": "Powód:",
+ "tpt-sections-prioritylangs": "Języki priorytetowe",
+ "tpt-sections-syntaxversion": "Wersja składni",
+ "tpt-syntaxversion-text": "Ta strona obecnie korzysta z przestarzałej wersji znaczników tłumaczenia. Nowa wersja będzie obejmować nieprzetłumaczone sekcje znacznikami HTML, aby wskazywać właściwy język danych fragmentów tekstu. Przykład: $1. Możesz skorzystać z nowej składni $2 aby zapobiec obejmowaniu znacznikami w miejscach, gdzie jest to niepożądane, na przykład podczas tłumaczenia atrybutu <code>title</code> w elementach. Nie ma możliwości przejścia na starszą wersję składni.",
+ "tpt-syntaxversion-label": "Używaj najnowszej wersji składni dla tej strony",
+ "tpt-transclusion": "Załączanie szablonów",
+ "tpt-transclusion-label": "Włącz tryb załączania szablonów ze wsparciem dla tłumaczenia",
+ "tpt-rev-mark": "oznacz do tłumaczenia",
+ "tpt-rev-unmark": "usuń z tłumaczenia",
+ "tpt-rev-discourage": "zniechęć",
+ "tpt-rev-encourage": "przywróć",
+ "tpt-rev-mark-tooltip": "Oznacz najnowszą wersję tej strony do tłumaczenia.",
+ "tpt-rev-unmark-tooltip": "Usuń tę stronę z tłumaczenia.",
+ "tpt-rev-discourage-tooltip": "Zniechęć do dalszych tłumaczeń na tej stronie.",
+ "tpt-rev-encourage-tooltip": "Przywrócić tę stronę do zwykłego tłumaczenia.",
+ "translate-tag-translate-link-desc": "Przetłumacz tę stronę",
+ "translate-tag-markthis": "Oznacz tę stronę do tłumaczenia",
+ "translate-tag-markthisagain": "Ta strona została <span class=\"plainlinks\">[$1 zmieniona]</span>, od kiedy po raz ostatni była <span class=\"plainlinks\">[$2 oznaczona do tłumaczenia]</span>.",
+ "translate-tag-hasnew": "Ta strona zawiera <span class=\"plainlinks\">[$1 zmiany]</span>, które nie zostały oznaczone do tłumaczenia.",
+ "tpt-translation-intro": "Ta strona to <span class=\"plainlinks\">[$1 przetłumaczona wersja]</span> strony [[$2]], a tłumaczenie jest ukończone w $3%.",
+ "tpt-translation-intro-fuzzy": "Tak są oznaczane nieaktualne tłumaczenia.",
+ "tpt-languages-legend": "Inne języki:",
+ "tpt-languages-zero": "Rozpocznij tłumaczenie na ten język",
+ "tpt-languages-nonzero": "$1 (przetłumaczono $2%)",
+ "tpt-tab-translate": "Przetłumacz",
+ "tpt-target-page": "Ta strona nie może zostać zaktualizowana ręcznie.\nJest ona tłumaczeniem strony [[$1]], a tłumaczenie może zostać zmienione za pomocą [$2 narzędzia tłumacza].",
+ "tpt-unknown-page": "Ta przestrzeń nazw jest zarezerwowana dla tłumaczeń stron z zawartością.\nStrona, którą próbujesz edytować, prawdopodobnie nie odpowiada żadnej stronie oznaczonej do tłumaczenia.",
+ "tpt-translation-restricted": "Tłumaczenie tej strony na ten język zostało zablokowane przez administratora tłumaczeń.\n\nPowód: $1",
+ "tpt-translation-restricted-no-reason": "Tłumaczenie tej strony na ten język zostało zablokowane przez administratora tłumaczeń.",
+ "tpt-discouraged-language-force-header": "Ta strona nie może być przetłumaczona na $1.",
+ "tpt-discouraged-language-force-content": "Administrator tłumaczeń zdecydował, że ta strona może być tłumaczona tylko na $1.",
+ "tpt-discouraged-language-header": "Tłumaczenie na $1 nie jest priorytetem dla tej strony.",
+ "tpt-discouraged-language-content": "Administrator tłumaczeń zdecydował, aby skupić się na tłumaczeniu na $1.",
+ "tpt-discouraged-language-force": "<strong>Ta strona nie może być przetłumaczona na $2.</strong>\n\nAdministrator tłumaczeń ograniczył języki, na które ta strona może być tłumaczona do $3.",
+ "tpt-priority-languages": "Administrator tłumaczenia ustawił języki priorytetowe dla tej grupy jako $1 .",
+ "tpt-priority-languages-force": "Administrator tłumaczeń oznaczył języki $1 jako priorytetowe dla tej grupy. Tłumaczenie na inne języki nie jest dozwolone.",
+ "tpt-discouraged-translation-content": "Administrator tłumaczeń zniechęcił do tłumaczenia tej strony. Możesz nadal ją tłumaczyć, ale robienie tego może nie być przydatne.",
+ "tpt-render-summary": "Aktualizowanie w celu dopasowania do nowej wersji strony źródłowej",
+ "aggregategroups": "Grupy zbiorcze",
+ "tpt-aggregategroup-add": "Dodaj",
+ "tpt-aggregategroup-save": "Zapisz",
+ "tpt-aggregategroup-close": "Zamknij",
+ "tpt-aggregategroup-add-new": "Dodaj nową grupę zbiorczą",
+ "tpt-aggregategroup-new-name": "Nazwa:",
+ "tpt-aggregategroup-new-description": "Opis (opcjonalnie):",
+ "tpt-aggregategroup-remove-confirm": "Na pewno usunąć tę grupę agregacji?",
+ "tpt-aggregategroup-invalid-group": "Grupa nie istnieje",
+ "tpt-aggregategroup-edit-name": "Nazwa:",
+ "tpt-aggregategroup-edit-description": "Opis:",
+ "tpt-aggregategroup-update": "Zapisz",
+ "tpt-aggregategroup-update-cancel": "Anuluj",
+ "tpt-aggregategroup-expand-all-groups": "rozwiń wszystkie grupy",
+ "tpt-aggregategroup-collapse-all-groups": "zwiń wszystkie grupy",
+ "tpt-aggregategroup-expand-group": "rozwiń grupę",
+ "tpt-aggregategroup-collapse-group": "zwiń grupę",
+ "tpt-invalid-group": "Nieprawidłowa grupa",
+ "pt-parse-open": "Niezrównoważony znacznik &lt;translate>.\nSzablon tłumaczenia – <pre>$1</pre>",
+ "pt-parse-close": "Niezrównoważony znacznik &lt;/translate>.\nSzablon tłumaczenia – <pre>$1</pre>",
+ "pt-parse-nested": "Zagnieżdżanie jednostek tłumaczenia &lt;translate> nie jest dopuszczalne.\nTekst znacznika: <pre>$1</pre>",
+ "pt-shake-multiple": "Wiele wyróżników jednostki tłumaczenia dla jednej jednostki tłumaczenia.\nUpewnij się, że jednostki tłumaczenia są oddzielone pustymi liniami.\nTekst jednostki tłumaczenia: <pre>$1</pre>",
+ "pt-shake-position": "Wyróżniki jednostki tłumaczenia w nieoczekiwanym miejscu.\nTekst jednostki tłumaczenia: <pre>$1</pre>",
+ "pt-shake-empty": "Pusta jednostka tłumaczenia dla wyróżnika $1.",
+ "log-description-pagetranslation": "Rejestr działań związanych z systemem tłumaczenia stron",
+ "log-name-pagetranslation": "Rejestr tłumaczenia stron",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|oznaczył|oznaczył}} $3 do tłumaczenia",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|usunął|usunęła}} $3 z systemu tłumaczenia",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|zmienił|zmieniła}} nazwę strony przeznaczonej do tłumaczenia z $3 na $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|napotkał|napotkała}} problem podczas przenoszenia strony $3 do $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|zakończył|zakończyła}} usuwanie strony przeznaczonej do tłumaczenia $3",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|Nie udało się}} usunąć $3 należącej do tłumaczonej strony $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|usunął|usunęła}} stronę przeznaczoną do tłumaczenia $3",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|Nie udało się}} usunąć $3 należącej do przetłumaczonej strony $4",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|zachęcił|zachęciła}} do tłumaczenia $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|zniechęcił|zniechęciła}} do tłumaczenia $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|usunął|usunęła}} języki priorytetowe ze strony przeznaczonej do tłumaczenia $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|ustawił|ustawiła}} języki priorytetowe dla strony przeznaczonej do tłumaczenia $3 na $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|ograniczył|ograniczyła}} języki dla strony przeznaczonej do tłumaczenia $3 do $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|dodał|dodała|dodał(a)}} stronę przeznaczoną do tłumaczenia $3 do grupy zbiorczej $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|usunął|usunęła}} stronę przeznaczoną do tłumaczenia $3 z grupy zbiorczej $4",
+ "log-action-filter-pagetranslation": "Rodzaj działania:",
+ "log-action-filter-pagetranslation-mark": "Oznacz do tłumaczenia",
+ "log-action-filter-pagetranslation-unmark": "Usuwanie z tłumaczenia",
+ "log-action-filter-pagetranslation-move": "Przenoszenie stron",
+ "log-action-filter-pagetranslation-delete": "Usuwanie stron",
+ "log-action-filter-pagetranslation-encourage": "Zachęcanie do tłumaczenia",
+ "log-action-filter-pagetranslation-discourage": "Zniechęcanie do tłumaczenia",
+ "log-action-filter-pagetranslation-prioritylanguages": "Zmiana języków priorytetowych",
+ "log-action-filter-pagetranslation-aggregategroups": "Zmiany w grupach zbiorczych",
+ "pt-movepage-title": "Przenieś przetłumaczalną stronę $1",
+ "pt-movepage-blockers": "Przetłumaczalna strona nie może zostać przeniesiona pod nową nazwę ponieważ {{PLURAL:$1|wystąpił następujący błąd|wystąpiły następujące błędy:}}",
+ "pt-movepage-block-base-invalid": "Nazwa docelowej strony do tłumaczenia nie jest poprawnym tytułem.",
+ "pt-movepage-block-tp-invalid": "Nazwa docelowej strony tłumaczenia [[:$1]] może być nieprawidłowa. Może jest zbyt długa?",
+ "pt-movepage-block-section-invalid": "Nazwa docelowej strony [[:$1]] dla jednostki tłumaczenia jest nieprawidłowa. Może jest zbyt długa?",
+ "pt-movepage-block-subpage-invalid": "Nazwa docelowej podstrony [[:$1]] jest nieprawidłowa. Może jest zbyt długa?",
+ "pt-movepage-list-pages": "Lista stron do przeniesienia",
+ "pt-movepage-list-translation": "{{PLURAL:$1|strona|strony|stron}} do przetłumaczenia",
+ "pt-movepage-list-section": "{{PLURAL:$1|Strona|Strony}} jednostek tłumaczenia",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Podstrona oznaczona|Podstrony oznaczone}} do tłumaczenia",
+ "pt-movepage-list-translatable-note": "Te strony muszą zostać przeniesione oddzielnie.",
+ "pt-movepage-list-other": "{{PLURAL:$1|Inna podstrona|Inne podstrony}}",
+ "pt-movepage-list-count": "W sumie $1 {{PLURAL:$1|strona|strony|stron}} i $2 {{PLURAL:$2|podstrona|podstrony|podstron}} do przeniesienia.",
+ "pt-movepage-list-no-pages": "Nie znaleziono stron.",
+ "pt-movepage-legend": "Przenieś przetłumaczalną stronę",
+ "pt-movepage-current": "Obecna nazwa",
+ "pt-movepage-new": "Nowa nazwa",
+ "pt-movepage-reason": "Powód",
+ "pt-movepage-subpages": "Przenieś wszystkie podstrony",
+ "pt-movepage-talkpages": "Przenieś też strony dyskusji",
+ "pt-movepage-talkpage-exists": "(Ma stronę dyskusji)",
+ "pt-movepage-action-check": "Sprawdź czy przeniesienie jest wykonalne",
+ "pt-movepage-action-perform": "Przenieś",
+ "pt-movepage-action-other": "Zmiana celu",
+ "pt-movepage-intro": "Ta strona specjalna umożliwia przenoszenie stron, które zostały oznaczone jako wymagające tłumaczenia.\nDziałanie przenoszenia nie jest natychmiastowe, ponieważ wiele stron wymaga przenoszenia.\nPodczas gdy strony są przenoszone, nie jest możliwa praca z tymi stronami poprzez zapytania.\nBłędy zostaną odnotowane na [[Special:Log/pagetranslation|stronie rejestru tłumaczeń]] i muszą zostać naprawione ręcznie.",
+ "pt-movepage-logreason": "Część strony do tłumaczenia „$1”",
+ "pt-movepage-started": "Sprawdź [[Special:Log/pagetranslation|dziennik tłumaczenia stron]] pod względem błędów i komunikatów zakończenia.",
+ "pt-locked-page": "Ta strona jest zablokowana ponieważ jest przygotowana do przeniesienia.",
+ "pt-deletepage-lang-title": "Usuwanie strony tłumaczenia „$1”",
+ "pt-deletepage-tp-title": "Usuwanie strony do tłumaczenia „$1”",
+ "pt-deletepage-invalid-title": "Wybrana strona nie jest poprawna.",
+ "pt-deletepage-invalid-text": "Wybrana strona nie jest przeznaczona do tłumaczenia ani nie jest stroną przetłumaczoną.",
+ "pt-deletepage-action-check": "Pokaż spis stron, które mają zostać usunięte",
+ "pt-deletepage-action-perform": "Usuń",
+ "pt-deletepage-action-other": "Zmiana celu",
+ "pt-deletepage-lang-legend": "Usuwanie strony tłumaczenia",
+ "pt-deletepage-tp-legend": "Usunąć stronę przeznaczoną do tłumaczenia",
+ "pt-deletepage-any-legend": "Usuń stronę przeznaczoną do tłumaczenia lub tłumaczenie takiej strony",
+ "pt-deletepage-current": "Tytuł strony",
+ "pt-deletepage-reason": "Powód",
+ "pt-deletepage-subpages": "Usuń wszystkie podstrony",
+ "pt-deletepage-list-pages": "Lista stron do usunięcia",
+ "pt-deletepage-list-translation": "Strony tłumaczeń",
+ "pt-deletepage-list-section": "Strony jednostek tłumaczenia",
+ "pt-deletepage-list-other": "Inne podstrony",
+ "pt-deletepage-list-count": "W sumie $1 {{PLURAL:$1|strona|strony|stron}} i $2 {{PLURAL:$2|podstrona|podstrony|podstron}} do usunięcia.",
+ "pt-deletepage-list-no-pages": "Nie znaleziono stron.",
+ "pt-deletepage-full-logreason": "Część strony do tłumaczenia „$1”",
+ "pt-deletepage-lang-logreason": "Część strony tłumaczenia „$1”",
+ "pt-deletepage-started": "Sprawdź [[Special:Log/pagetranslation|dziennik tłumaczenia stron]] pod względem błędów i komunikatów zakończenia.",
+ "pt-deletepage-intro": "Ta specjalna strona pozwala na usuwanie całej strony przeznaczonej do tłumaczenia lub pojedynczej strony w danym języku.\nAkcja usuwania nie będzie natychmiastowa, ponieważ wszystkie strony zależne od podanych również będą usunięte.\nBłędy będą rejestrowane [[Special:Log/pagetranslation|w dzienniku tłumaczenia strony]] i muszą być naprawione ręcznie.",
+ "pagemigration": "Migracja stron do tłumaczenia",
+ "pagemigration-summary": "Określ stronę z tłumaczeniem i przywróć wszelkie tłumaczenia dokonane przed włączeniem na danej stronie systemu tłumaczenia.",
+ "pm-import-button-label": "Importuj",
+ "pm-savepages-button-label": "Zapisz",
+ "pm-cancel-button-label": "Anuluj",
+ "pm-page-does-not-exist": "$1 nie istnieje",
+ "pm-old-translations-missing": "$1 nie zawiera starego tłumaczenia",
+ "pm-extra-units-warning": "Mogą występować dodatkowe jednostki. Proszę odpowiednio dopasować jednostki źródła i tłumaczenia.",
+ "pm-pagename-missing": "Podaj nazwę strony",
+ "pm-add-icon-hover-text": "Dodaj jednostkę poniżej",
+ "pm-swap-icon-hover-text": "Zamień z jednostką poniżej",
+ "pm-delete-icon-hover-text": "Usuń jednostkę",
+ "pm-pagetitle-placeholder": "Podaj tytuł strony",
+ "pm-pagetitle-invalid": "Podaj poprawny tytuł strony. Powinien być w formacie <page-name>/<language-code>.",
+ "pm-pagetitle-missing": "Podaj tytuł strony.",
+ "pm-langcode-missing": "Wydaje się, że w tytule brakuje kodu języka. Wprowadź tytuł strony w formacie <page-name>/<language-code>.",
+ "pm-summary-import": "Importowane tłumaczenie za pomocą [[Special:PageMigration|migracji strony]]",
+ "pm-on-import-message-text": "Zaimportowano stare tłumaczenia. Użyj opcji dodaj, zamień i usuń, aby dopasować jednostki tłumaczenia, a następnie kliknij przycisk \"{{int:pm-savepages-button-label}}\", aby je zapisać. Kliknij przycisk \"{{int:pm-cancel-button-label}}\", aby je odrzucić.",
+ "pm-on-save-message-text": "Jednostki tłumaczenia zostały zapisane. Możesz teraz wpisać tytuł nowej przetłumaczonej strony, aby dokonać migracji lub dokonać zmian w poniższych jednostkach i zapisać nową wersję.",
+ "tpt-translate-title": "Umożliwienie tłumaczenia tytułu strony",
+ "pp-save-summary": "Przygotowano stronę do tłumaczenia",
+ "pagepreparation": "Przygotowanie strony do tłumaczenia",
+ "pagepreparation-summary": "Podaj tytuł strony do przygotowania do tłumaczenia.",
+ "pp-pagename-placeholder": "Wprowadź nazwę strony",
+ "pp-prepare-button-label": "Przygotuj",
+ "pp-save-button-label": "Opublikuj",
+ "pp-cancel-button-label": "Anuluj",
+ "pp-save-message": "Strona została opublikowana. Możesz ją [$1 edytować].",
+ "pp-prepare-message": "Strona została przygotowana do tłumaczenia. Przejrzyj poniższy diff. Jeśli wszystko jest porządku, kliknij przycisk „{{int:pp-save-button-label}}”!",
+ "pp-already-prepared-message": "Wydaje się, że ta strona została już przygotowana do tłumaczenia. Nie ma żadnych zmian w porównaniu z poprzednią wersją.",
+ "pp-diff-error": "Podczas pobierania różnicy z serwera wystąpił błąd.",
+ "pp-pagename-missing": "Podaj nazwę strony.",
+ "pp-diff-old-header": "Tekst źródłowy",
+ "pp-diff-new-header": "Przygotowany tekst",
+ "tpt-unlink-confirm": "Proszę potwierdzić, że na pewno chcesz usunąć tę stronę z systemu tłumaczenia.\nWybór języka i przetłumaczone nazwy stron przestaną działać.\nStrony tłumaczenia będą edytowalne.",
+ "tpt-unlink-button": "Usuń z tłumaczenia.",
+ "tpt-unlink-summary": "Usunięto stronę z tłumaczenia.",
+ "tpt-generic-confirm": "Proszę potwierdzić akcję.",
+ "tpt-generic-button": "Potwierdź",
+ "tpt-validation-name-reuse": "Zmienna tłumaczeń „$1” została zdefiniowana wielokrotnie z różną zawartością. Zmień identyfikatory zmiennych tak, aby były unikalne wewnątrz jednej jednostki tłumaczeń.",
+ "visualeditor-annotations-translate-start": "Początek treści do tłumaczenia",
+ "visualeditor-annotations-translate-end": "Koniec treści do tłumaczenia",
+ "visualeditor-annotations-translate-description": "Ten zakres został oznaczony jako możliwy do przetłumaczenia. Upewnij się, że przestrzegasz wytycznych [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text zmieniania tekstu źródłowego].",
+ "visualeditor-annotations-tvar-start": "Początek treści nie do tłumaczenia",
+ "visualeditor-annotations-tvar-end": "Koniec treści nie do tłumaczenia",
+ "visualeditor-annotations-tvar-description": "Ten fragment oznakowany jest jako nieprzeznaczony do tłumaczenia. Więcej informacji na ten temat dostępne jest na stronie [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration/pl#Segmentacja Segmentacja tekstu źródłowego]."
+}
diff --git a/Translate/i18n/pagetranslation/pms.json b/Translate/i18n/pagetranslation/pms.json
new file mode 100644
index 00000000..f3826643
--- /dev/null
+++ b/Translate/i18n/pagetranslation/pms.json
@@ -0,0 +1,126 @@
+{
+ "@metadata": {
+ "authors": [
+ "Borichèt",
+ "Dragonòt"
+ ]
+ },
+ "pagetranslation": "Tradussion dle pàgine",
+ "right-pagetranslation": "Marché le version dle pàgine për la tradussion",
+ "action-pagetranslation": "gestì le pàgine da volté",
+ "tpt-section": "Unità ëd tradussion $1",
+ "tpt-section-new": "Neuva unità ëd tradussion.\nNòm: $1",
+ "tpt-section-deleted": "Unità ëd tradussion $1",
+ "tpt-diff-old": "Test ëd prima",
+ "tpt-diff-new": "Test neuv",
+ "tpt-submit": "Marca costa version për la tradussion",
+ "tpt-sections-oldnew": "Unità ëd tradussion neuve e esistente",
+ "tpt-sections-deleted": "Unità ëd tradussion eliminà",
+ "tpt-sections-template": "Model ëd pàgina ëd tradussion",
+ "tpt-action-nofuzzy": "Invalidé nen le tradussion",
+ "tpt-badtitle": "Ël nòm dàit a la pàgina ($1) a l'é pa un tìtol bon",
+ "tpt-nosuchpage": "La pàgina $1 a esist pa",
+ "tpt-oldrevision": "$2 a l'é nen l'ùltima version dla pàgina [[:$1]].\nMach j'ùltime version a peulo esse marcà për la tradussion.",
+ "tpt-notsuitable": "La pàgina $1 a va nen bin për la tradussion.\nCh'a contròla ch'a l'abia le tichëtte <nowiki><translate></nowiki> e na sintassi bon-a.",
+ "tpt-saveok": "La pàgina [[:$1]] a l'é stàita marcà për la tradussion con $2 {{PLURAL:$2|unità ëd tradussion|unità ëd tradussion}}.\nAdess la pàgina a peul esse <span class=\"plainlinks\">[$3 voltà]</span>.",
+ "tpt-showpage-intro": "Sì-sota a son listà j'unità ëd tradussion neuve, esistente e sganfà.\nPrima ëd marché costa version për la tradussion, controlé che le modìfiche a j'unità ëd tradussion a sio minimisà për evité dël travaj inùtil ai tradutor.",
+ "tpt-mark-summary": "Costa version a l'é stàita marcà për la tradussion",
+ "tpt-edit-failed": "Impossìbil d'agiorné la pàgina: $1",
+ "tpt-duplicate": "Ël nòm dl'unità ëd tradussion $1 a l'é dovrà pi che na vira.",
+ "tpt-unmarked": "La pàgina $1 a l'é pi nen marcà për la tradussion.",
+ "tpt-list-nopages": "A-i é gnun-a pàgina marcà për la tradussion ni pronta për esse marcà për la tradussion.",
+ "tpt-new-pages-title": "Pàgine proponùe për la tradussion",
+ "tpt-old-pages-title": "Pàgine an tradussion",
+ "tpt-other-pages-title": "Pàgine cioche",
+ "tpt-new-pages": "{{PLURAL:$1|Sa pàgina a conten|Se pàgine a conten-o}} dël test con la tichëtta ëd tradussion, ma gnun-a version ëd {{PLURAL:$1|costa pàgina|coste pàgine}} a l'é al moment marcà për la tradussion.",
+ "tpt-old-pages": "Chèiche version ëd {{PLURAL:$1|costa pàgine|coste pàgine}} a son ëstàite marcà për la tradussion.",
+ "tpt-other-pages": "{{PLURAL:$1|Na veja version ëd costa pàgina a l'é|Dle veje version ëd coste pàgine a son}} marcà për la tradussion,\nma {{PLURAL:$1|l'ùltima version a peul|j'ùltime version a peulo}} pa esse marcà për la tradussion.",
+ "tpt-select-prioritylangs": "Lista dij còdes prioritari ëd le lenghe separà da 'd vìrgole:",
+ "tpt-select-prioritylangs-force": "Ampedì le tradussion an lenghe diferente da le lenghe prioritarie",
+ "tpt-select-prioritylangs-reason": "Rason:",
+ "tpt-sections-prioritylangs": "Lenghe prioritarie",
+ "tpt-rev-mark": "marca për tradussion",
+ "tpt-rev-unmark": "gava da la tradussion",
+ "tpt-rev-discourage": "dëscoragia",
+ "tpt-rev-encourage": "buté 'me ch'a l'era",
+ "tpt-rev-mark-tooltip": "Marché l'ùltima version ëd costa pàgina për la tradussion.",
+ "tpt-rev-unmark-tooltip": "Gava costa pàgina da la tradussion.",
+ "tpt-rev-discourage-tooltip": "Dëscoragé d'àutre tradussion su costa pagina.",
+ "tpt-rev-encourage-tooltip": "Ripristiné costa pàgina an tradussion normal.",
+ "translate-tag-translate-link-desc": "Fé la tradussion ëd sa pàgina",
+ "translate-tag-markthis": "Marca costa pàgina për la tradussion",
+ "translate-tag-markthisagain": "Costa pàgina a l'ha avù <span class=\"plainlinks\">[$1 cangiament]</span> da cand a l'é stàita <span class=\"plainlinks\">[$2 marcà për la tradussion]</span> l'ùltima vira.",
+ "translate-tag-hasnew": "Costa pàgina a conten <span class=\"plainlinks\">[$1 cangiament]</span> ch'a son pa marcà për la tradussion.",
+ "tpt-translation-intro": "Sta pàgina-sì a l'é na <span class=\"plainlinks\">[$1 vërsion traduvùa]</span> ëd na pàgina [[$2]] e la tradussion a l'é $3% completa e agiornà.",
+ "tpt-translation-intro-fuzzy": "Tradussion pa agiornà a son marcà com costa.",
+ "tpt-languages-legend": "Àutre lenghe:",
+ "tpt-languages-zero": "Ancamin-a la tradussion për sta lenga",
+ "tpt-languages-nonzero": "$1 ($2% voltà)",
+ "tpt-target-page": "Sta pàgina-sì a peul pa esse modificà a man.\nSta pàgina-sì a l'é na tradussion ëd la pàgina [[$1]] e la tradussion a peul esse modificà an dovrand [$2 l'utiss ëd tradussion].",
+ "tpt-unknown-page": "Sto spassi nominal-sì a l'é riservà për tradussion ëd pàgine ëd contnù.\nLa pàgina ch'it preuve a modifiché a smija pa ch'a corisponda a na pàgina marcà për tradussion.",
+ "tpt-translation-restricted": "La tradussion dë sta pàgina an costa lenga a l'é stàita ampedìa da n'aministrator dle tradussion.\n\nRason: $1",
+ "tpt-discouraged-language-force": "<strong>Costa pàgina a peul pa esse voltà an $2.</strong>\n\nN'aministrator dle tradussion a l'ha decidù che costa pàgina a peul mach esse voltà an $3.",
+ "tpt-priority-languages": "N'aministrator ëd tradussion a l'ha ampostà le lenghe prioritarie për sta partìa a $1.",
+ "tpt-render-summary": "Modifiché për esse com la neuva version dla pàgina sorgiss",
+ "aggregategroups": "Partìe agregà",
+ "tpt-aggregategroup-add": "Gionta",
+ "tpt-aggregategroup-save": "Salva",
+ "tpt-aggregategroup-add-new": "Gionta na neuva partìa agregà",
+ "tpt-aggregategroup-new-name": "Nòm:",
+ "tpt-aggregategroup-new-description": "Descrission (opsional):",
+ "tpt-aggregategroup-remove-confirm": "É-lo sicur ëd vorèj scancelé sta partìa d'agregà?",
+ "tpt-aggregategroup-invalid-group": "La partìa a esist pa",
+ "pt-parse-open": "Tichëtta &lt;translate> pa bilansà.\nStamp ëd viragi: <pre>$1</pre>",
+ "pt-parse-close": "Tichëtta &lt;/translate> pa bilansà.\nStamp ëd viragi: <pre>$1</pre>",
+ "pt-parse-nested": "J'unità ëd tradussion &lt;translate> anidà a son pa përmëttùe.\nTest ëd la tichëtta: <pre>$1</pre>",
+ "pt-shake-multiple": "Marcador mùltipl d'unità ëd tradussion për un-a unità ëd tradussion.\nTest ëd l'unità ëd tradussion: <pre>$1</pre>",
+ "pt-shake-position": "Marcador d'unità ëd tradussion an na posission pa spetà.\nTest ëd l'unità ëd tradussion: <pre>$1</pre>",
+ "pt-shake-empty": "Unità ëd tradussion veuida për ël marcador \"$1\".",
+ "log-description-pagetranslation": "Registr ëd j'assion colegà al sistema ëd tradussion ëd pàgine",
+ "log-name-pagetranslation": "Registr dle tradussion ëd pàgine",
+ "pt-movepage-title": "Tramudé la pàgina da volté $1",
+ "pt-movepage-blockers": "La pàgina da volté a peul pa esse tramudà a un nòm neuv a motiv ëd {{PLURAL:$1|cost eror|costi eror}}:",
+ "pt-movepage-block-base-invalid": "Ël nòm dla pàgina voltàbil pontà a l'é pa un tìtol bon.",
+ "pt-movepage-block-tp-invalid": "Ël tìtol ëd la pàgina ëd viragi pontà për [[:$1]] a podrìa esse pa bon (tròp longh?).",
+ "pt-movepage-block-section-invalid": "Ël tìtol ëd la pàgina bërsaj për «[[:$1]]» për l'unità ëd tradussion a smijërìa nen bon (tròp longh?).",
+ "pt-movepage-block-subpage-invalid": "Ël tìtol ëd la sotpàgina pontà për [[:$1]] a podrìa esse pa bon (tròp longh?).",
+ "pt-movepage-list-pages": "Lista dle pàgine da tramudé",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Pàgina|Pàgine}} ëd tradussion",
+ "pt-movepage-list-section": "{{PLURAL:$1|Pàgina|Pàgine}} d'unità ëd tradussion",
+ "pt-movepage-list-other": "{{PLURAL:$1|Àutra sot-pàgina|Àutre sot-pàgine}}",
+ "pt-movepage-list-count": "An total $1 {{PLURAL:$1|pàgina|pàgine}} da tramudé.",
+ "pt-movepage-legend": "Tramudé la pàgina da volté",
+ "pt-movepage-current": "Nòm corent:",
+ "pt-movepage-new": "Nòm neuv:",
+ "pt-movepage-reason": "Rason:",
+ "pt-movepage-subpages": "Tramuda tute le sotpàgine",
+ "pt-movepage-action-check": "Contròla s'a l'é possìbil tramudé",
+ "pt-movepage-action-perform": "Fé ël tramud",
+ "pt-movepage-action-other": "Cangé ël bërsaj",
+ "pt-movepage-intro": "Sta pàgina special a-j përmët ëd tramudé dle pàgine ch'a son marcà për la tradussion.\nL'assion ëd tramud a sarà pa d'amblé, përchè tante pàgine a dovran esse tramudà.\nAntramentre che le pàgine a son tramudà, a l'é nen possìbil anteragì con cole pàgine.\nJ'eror a saran registrà ant ël [[Special:Log/pagetranslation|registr ëd tradussion ëd le pàgine]] e a dovran esse rangià a man.",
+ "pt-movepage-logreason": "Tòch ëd la pàgina da volté $1.",
+ "pt-movepage-started": "La pàgina base adess a l'é tramudà.\nPër piasì, ch'a contròla ël [[Special:Log/pagetranslation|registr ëd tradussion dle pàgine]] për eror e mëssagi ëd completament.",
+ "pt-locked-page": "Cota pàgina a l'é blocà përchè la pàgina da volté a l'é an camin ch'as tramuda.",
+ "pt-deletepage-lang-title": "Scancelassion ëd la pàgina ëd tradussion $1.",
+ "pt-deletepage-tp-title": "Scancelassion ëd la pàgina da volté $1.",
+ "pt-deletepage-invalid-title": "La pàgina spessificà a l'é pa bon-a.",
+ "pt-deletepage-invalid-text": "La pàgina specificà a l'é nen na pàgina da volté ni na pàgina ëd tradussion.",
+ "pt-deletepage-action-check": "Listé le pàgine da scancelé",
+ "pt-deletepage-action-perform": "Fé la scancelassion",
+ "pt-deletepage-action-other": "Cangé ël bërsaj",
+ "pt-deletepage-lang-legend": "Scancelé la pàgina ëd tradussion",
+ "pt-deletepage-tp-legend": "Scancelé la pàgina da volté",
+ "pt-deletepage-any-legend": "Scancelé la pàgina da volté o la pàgina ëd tradussion",
+ "pt-deletepage-current": "Nòm ëd la pàgina:",
+ "pt-deletepage-reason": "Rason:",
+ "pt-deletepage-subpages": "Scancelé tute le sot-pàgine",
+ "pt-deletepage-list-pages": "Lista dle pàgine da scancelé",
+ "pt-deletepage-list-translation": "Pàgine ëd tradussion",
+ "pt-deletepage-list-section": "Pàgine dj'unità ëd tradussion",
+ "pt-deletepage-list-other": "Àutre sot-pàgine",
+ "pt-deletepage-list-count": "An total $1 {{PLURAL:$1|pàgina|pàgine}} da scancelé.",
+ "pt-deletepage-full-logreason": "Tòch ëd la pàgina da volté $1.",
+ "pt-deletepage-lang-logreason": "Tòch ëd la pàgina ëd tradussion $1.",
+ "pt-deletepage-started": "Për piasì, ch'a contròla ël [[Special:Log/pagetranslation|registr ëd tradussion dle pàgine]] për j'eror e ël mëssagi ëd completament.",
+ "pt-deletepage-intro": "Costa pàgina special a-j përmët dë scancelé na qualsëssìa pàgina, o na pàgina individual ëd tradussion ant na lenga.\nL'assion dë scancelassion a sarà pa imedià, përché tute le pàgine dipendente da cola a saran ëdcò scancelà.\nJ'eror a saran registrà ant ël [[Special:Log/pagetranslation|registr ëd le tradussion ëd le pàgine]] e a devo esse rangià a man."
+}
diff --git a/Translate/i18n/pagetranslation/pnb.json b/Translate/i18n/pagetranslation/pnb.json
new file mode 100644
index 00000000..ecda1e01
--- /dev/null
+++ b/Translate/i18n/pagetranslation/pnb.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Abbas dhothar",
+ "Bgo eiu",
+ "Khalid Mahmood"
+ ]
+ },
+ "tpt-select-prioritylangs-reason": "وجہ:",
+ "tpt-languages-legend": "ہور بولیاں:",
+ "tpt-languages-nonzero": "$1 ($2% بولی پلٹی گئی)",
+ "tpt-translation-restricted": "وجہ: $1",
+ "tpt-aggregategroup-edit-description": "تفصیل:",
+ "tpt-aggregategroup-update-cancel": "رد کرو",
+ "pt-movepage-reason": "وجہ:",
+ "pt-deletepage-reason": "وجہ:",
+ "pm-cancel-button-label": "رد کرو",
+ "pp-cancel-button-label": "رد کرو"
+}
diff --git a/Translate/i18n/pagetranslation/prg.json b/Translate/i18n/pagetranslation/prg.json
new file mode 100644
index 00000000..6d5b0877
--- /dev/null
+++ b/Translate/i18n/pagetranslation/prg.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nērtiks Jōrgesuns"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% tulkautan)"
+}
diff --git a/Translate/i18n/pagetranslation/ps.json b/Translate/i18n/pagetranslation/ps.json
new file mode 100644
index 00000000..2ed577a5
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ps.json
@@ -0,0 +1,69 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ahmed-Najib-Biabani-Ibrahimkhel",
+ "Amjad Khan",
+ "Baloch Khan"
+ ]
+ },
+ "pagetranslation": "د مخ ژباړه",
+ "tpt-diff-old": "پخوانی متن",
+ "tpt-diff-new": "نوی متن",
+ "tpt-sections-template": "د ژباړې د مخ کينډۍ",
+ "tpt-nosuchpage": "د $1 په نوم کوم مخ نشته",
+ "tpt-old-pages-title": "د ژباړې مخونه",
+ "tpt-other-pages-title": "مات مخونه",
+ "tpt-select-prioritylangs-reason": "سبب:",
+ "tpt-sections-prioritylangs": "د لومړيتوب ژبې",
+ "tpt-rev-encourage": "بيازېرمل",
+ "translate-tag-translate-link-desc": "همدا مخ ژباړل",
+ "translate-tag-markthis": "همدا مخ د ژباړې لپاره په نښه کول",
+ "tpt-translation-intro": "دا پاڼه د [[$2]] مخ <span class=\"plainlinks\">[$1 ژباړل شوي بڼه] ده </span> او ددي ژباړه تر ٪$3 پوري بشپړه شوي ده.",
+ "tpt-translation-intro-fuzzy": "تر تاریخ وتلې ژباړي په دي ډول مارک شوي دي.",
+ "tpt-languages-legend": "نورې ژبې:",
+ "tpt-languages-nonzero": "$1 ($2% وژباړل شو)",
+ "tpt-tab-translate": "ژباړل",
+ "aggregategroups": "ډلې غونډول",
+ "tpt-aggregategroup-add": "ورگډول",
+ "tpt-aggregategroup-save": "خوندي کول",
+ "tpt-aggregategroup-new-name": "نوم:",
+ "tpt-aggregategroup-new-description": "څرگندونه (اختياري):",
+ "tpt-aggregategroup-invalid-group": "دا ډله نشته",
+ "tpt-aggregategroup-edit-name": "نوم:",
+ "tpt-aggregategroup-edit-description": "څرگندونه:",
+ "tpt-aggregategroup-update": "خوندي کول",
+ "tpt-aggregategroup-update-cancel": "ناگارل",
+ "tpt-invalid-group": "ناسمه ډله",
+ "pt-movepage-list-pages": "د لېږدون د مخونو لړليک",
+ "pt-movepage-list-translation": "د ژباړې {{PLURAL:$1|مخ|مخونه}}",
+ "pt-movepage-list-section": "د ژباړې د څپرکي {{PLURAL:$1|مخ|مخونه}}",
+ "pt-movepage-list-other": "{{PLURAL:$1|بل څېرمه مخ|نور څېرمه مخونه}}",
+ "pt-movepage-current": "اوسنی نوم:",
+ "pt-movepage-new": "نوی نوم:",
+ "pt-movepage-reason": "سبب:",
+ "pt-movepage-subpages": "ټول واړه مخونه لېږدول",
+ "pt-movepage-action-perform": "لېږد ترسره کول",
+ "pt-movepage-action-other": "موخه بدلول",
+ "pt-deletepage-action-perform": "ړنگېدنه ترسره کول",
+ "pt-deletepage-action-other": "موخه بدلول",
+ "pt-deletepage-lang-legend": "د ژباړې مخ ړنگول",
+ "pt-deletepage-tp-legend": "د ژباړې وړ مخ ړنگول",
+ "pt-deletepage-any-legend": "د ژباړې وړ مخ يا د ژباړې مخ ړنگول",
+ "pt-deletepage-current": "د مخ نوم:",
+ "pt-deletepage-reason": "سبب:",
+ "pt-deletepage-subpages": "ټول واړه مخونه ړنگول",
+ "pt-deletepage-list-pages": "د ړنگولو د مخونو لړليک",
+ "pt-deletepage-list-translation": "د ژباړې مخونه",
+ "pt-deletepage-list-section": "د څپرکي د مخونو ژباړه",
+ "pt-deletepage-list-other": "نور واړه مخونه",
+ "pm-savepages-button-label": "خوندي کول",
+ "pm-cancel-button-label": "ناگارل",
+ "pm-page-does-not-exist": "$1 نشته.",
+ "tpt-translate-title": "د مخ سرليک د ژباړې پرېښه",
+ "pp-pagename-placeholder": "د مخ نوم ورکړئ",
+ "pp-prepare-button-label": "چمتو کول",
+ "pp-save-button-label": "خوندي کول",
+ "pp-cancel-button-label": "ناگارل",
+ "pp-pagename-missing": "لطفاً د مخ نوم مو ورکړئ.",
+ "pp-diff-old-header": "د سرچينې متن"
+}
diff --git a/Translate/i18n/pagetranslation/pt-br.json b/Translate/i18n/pagetranslation/pt-br.json
new file mode 100644
index 00000000..8ea4e090
--- /dev/null
+++ b/Translate/i18n/pagetranslation/pt-br.json
@@ -0,0 +1,249 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cainamarques",
+ "Eduardo Addad de Oliveira",
+ "Eduardo.mps",
+ "Eduardoaddad",
+ "Fabsouza1",
+ "Fasouzafreitas",
+ "Felipe L. Ewald",
+ "Giro720",
+ "He7d3r",
+ "Helder.wiki",
+ "Jhonnatanricardo",
+ "Luckas",
+ "Pols12",
+ "Rodrigo codignoli",
+ "Shirayuki",
+ 555
+ ]
+ },
+ "pagetranslation": "Tradução de páginas",
+ "right-pagetranslation": "Marca versões de páginas para tradução",
+ "action-pagetranslation": "gerir páginas traduzíveis",
+ "tps-edit-sourcepage-text": "Você está editando uma página de tradução de origem. Verifique se você está familiarizado com a seguinte documentação:\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text Alterando o texto de origem] \n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Markup_examples Exemplo de marcação a ser usada]",
+ "tps-edit-sourcepage-ve-warning-title": "Aviso: página não suportada",
+ "tps-edit-sourcepage-ve-warning-text": "Você está editando uma página traduzível. A edição destes neste editor ainda não é oficialmente suportada. Por favor, use o editor de código-fonte.",
+ "tps-edit-sourcepage-ve-warning-button": "OK",
+ "tpt-section": "Unidade de tradução $1",
+ "tpt-section-new": "Nova unidade de tradução.\nNome: $1",
+ "tpt-section-deleted": "Unidade de tradução $1",
+ "tpt-diff-old": "Texto anterior",
+ "tpt-diff-new": "Novo texto",
+ "tpt-submit": "Marcar esta versão para tradução",
+ "tpt-sections-oldnew": "Unidades de tradução novas e existentes",
+ "tpt-sections-deleted": "Unidades de tradução apagadas",
+ "tpt-sections-template": "Modelo de página de tradução",
+ "tpt-action-nofuzzy": "Não invalidar traduções",
+ "tpt-badtitle": "O nome de página dado ($1) não é um título válido",
+ "tpt-nosuchpage": "A página $1 não existe",
+ "tpt-oldrevision": "$2 não é a versão atual da página [[:$1]].\nApenas as versões atuais pode ser marcadas para tradução.",
+ "tpt-notsuitable": "A página $1 não está adequada para tradução.\nTenha certeza que ela tenha marcas <nowiki><translate></nowiki> e sintaxe válida.",
+ "tpt-saveok": "A página [[:$1]] foi marcada para tradução com $2 {{PLURAL:$2|unidade|unidades}} de tradução.\nA página já pode ser <span class=\"plainlinks\">[$3 traduzida]</span>.",
+ "tpt-saveok-first": "Você pode [[Special:PageMigration|importar tradução pré-existente]] para esta página (se houver).",
+ "tpt-offer-notify": "Você pode <span class=\"plainlinks\">[$1 notificar tradutores]</span> sobre esta página.",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|Veja a lista de páginas traduzíveis.]]",
+ "tpt-showpage-intro": "A seguir estão listadas as unidades de tradução novas, existentes e removidas.\nAntes de marcar esta versão para tradução, verifique se as mudanças nas unidades de tradução foram minimizadas, para que seja evitado trabalho desnecessário aos tradutores.",
+ "tpt-mark-summary": "Marcou esta versão para tradução",
+ "tpt-mark-nochanges": "Nenhuma alteração para revisar. Marcar esta página para tradução não editará a página nem qualquer unidade de tradução existente.",
+ "tpt-edit-failed": "Não foi possível atualizar a página: $1",
+ "tpt-duplicate": "$1 é usado como nome de unidade de tradução mais de uma vez.",
+ "tpt-invalid": "O nome da unidade de tradução $1 não deve conter sublinhado nem barra.",
+ "tpt-unmarked": "A página [[:$1]] deixou de estar marcada para tradução.",
+ "tpt-list-nopages": "Não há páginas nem marcadas para tradução, nem prontas para serem marcadas para tradução.",
+ "tpt-new-pages-title": "Páginas propostas para tradução",
+ "tpt-old-pages-title": "Páginas em tradução",
+ "tpt-other-pages-title": "Páginas com problemas",
+ "tpt-outdated-pages-title": "Páginas com alterações pendentes",
+ "tpt-new-pages": "{{PLURAL:$1|Esta página contém|Estas páginas contêm}} texto com marcas de tradução,\nmas nenhuma versão {{PLURAL:$1|desta página|destas páginas}} está marcada para tradução neste momento.",
+ "tpt-old-pages": "A versão mais recente {{PLURAL:$1|desta página foi marcada|destas páginas foram marcadas}} para tradução.",
+ "tpt-other-pages": "{{PLURAL:$1|Uma versão anterior desta página está marcada|Versões anteriores desta página estão marcadas}} para tradução,\nmas {{PLURAL:$1|a última versão não pode ser marcada|as últimas versões não podem ser marcadas}} para tradução.",
+ "tpt-outdated-pages": "{{PLURAL:$1|Esta página possui|Essas páginas têm}} mudanças não marcadas para tradução.",
+ "tpt-tag-discouraged": "desencorajado",
+ "tpt-tag-oldsyntax": "sintaxe antiga",
+ "tpt-tag-no-transclusion-support": "sem suporte de transclusão",
+ "tpt-select-prioritylangs": "Códigos de idiomas prioritários, separados por vírgulas:",
+ "tpt-select-prioritylangs-force": "Impedir traduções para idiomas que não sejam os prioritários",
+ "tpt-select-prioritylangs-reason": "Motivo:",
+ "tpt-sections-prioritylangs": "Idiomas prioritários",
+ "tpt-sections-syntaxversion": "Versão da sintaxe",
+ "tpt-syntaxversion-text": "Esta página atualmente usa uma versão antiga da sintaxe de fonte de página traduzível. A nova versão envolverá as seções não traduzidas com uma etiqueta HTML para indicar o idioma correto do texto. Exemplo: $1. Você pode usar uma nova sintaxe de marcação $2 para evitar qualquer tipo de empacotamento em lugares onde não é apropriado, como ao traduzir o atributo <code>title</code> de um elemento. Não é possível voltar para uma versão de sintaxe antiga.",
+ "tpt-syntaxversion-label": "Use a versão mais recente da sintaxe para esta página",
+ "tpt-transclusion": "Transclusão de predefinição",
+ "tpt-transclusion-label": "Ativar transclusão com reconhecimento de tradução para esta página",
+ "tpt-rev-mark": "marcar para traduzir",
+ "tpt-rev-unmark": "remover das traduções",
+ "tpt-rev-discourage": "desmarcar de traduzir",
+ "tpt-rev-encourage": "restaurar",
+ "tpt-rev-mark-tooltip": "Sinaliza para tradução a edição mais recente desta página.",
+ "tpt-rev-unmark-tooltip": "Retira a página da listagem das que podem ser traduzidas.",
+ "tpt-rev-discourage-tooltip": "Faz com que a página não receba novas traduções.",
+ "tpt-rev-encourage-tooltip": "Faz com que a página possa voltar a ser traduzida.",
+ "translate-tag-translate-link-desc": "Traduzir esta página",
+ "translate-tag-markthis": "Marcar esta página para tradução",
+ "translate-tag-markthisagain": "Esta página tem <span class=\"plainlinks\">[$1 alterações]</span> desde a última vez em que ela foi <span class=\"plainlinks\">[$2 marcada para tradução]</span>.",
+ "translate-tag-hasnew": "Esta página contém <span class=\"plainlinks\">[$1 alterações]</span> que não estão marcadas para tradução.",
+ "tpt-translation-intro": "Esta página é uma <span class=\"plainlinks\">[$1 versão traduzida]</span> da página [[$2]]. Sua tradução está $3% completa.",
+ "tpt-translation-intro-fuzzy": "Traduções desatualizadas estão marcadas desta forma.",
+ "tpt-languages-legend": "Outros idiomas:",
+ "tpt-languages-separator": "&#160;•&#32;",
+ "tpt-languages-zero": "Iniciar a tradução para este idioma",
+ "tpt-languages-nonzero": "$1 ($2% traduzido)",
+ "tpt-tab-translate": "Traduzir",
+ "tpt-target-page": "Esta página não pode ser atualizada manualmente.\nEsta página é uma tradução da página [[$1]]. Sua tradução pode ser atualizada usando [$2 a ferramenta de tradução].",
+ "tpt-unknown-page": "Este espaço nominal é reservado para traduções de páginas de conteúdo.\nA página que você está tentando editar não aparenta corresponder a nenhuma página marcada para tradução.",
+ "tpt-translation-restricted": "Um coordenador de traduções desautorizou que esta página seja traduzida para este idioma.\n\nMotivo: $1",
+ "tpt-translation-restricted-no-reason": "A tradução desta página para este idioma foi impedida por um administrador de tradução.",
+ "tpt-discouraged-language-force-header": "Est página não pode ser traduzida para $1.",
+ "tpt-discouraged-language-force-content": "Um administrador de tradução decidiu que esta página só pode ser traduzida para $1.",
+ "tpt-discouraged-language-header": "Traduzir para $1 não é uma prioridade para esta página.",
+ "tpt-discouraged-language-content": "Um administrador de tradução decidiu concentrar os esforços de tradução em $1.",
+ "tpt-discouraged-language-force": "<strong>Esta página não pode ser traduzida para $2.</strong>\n\nUm administrador de traduções decidiu que a página só pode ser traduzida para $3.",
+ "tpt-priority-languages": "Um coordenador de traduções definiu como idiomas prioritários para este grupo $1.",
+ "tpt-priority-languages-force": "Um administrador de traduções definiu as línguas prioritárias para este grupo como $1. Não é permitido traduzir para outras línguas.",
+ "tpt-render-summary": "Atualizando para corresponder à nova versão da página de origem",
+ "aggregategroups": "Grupos agregadores",
+ "tpt-aggregategroup-add": "Adicionar",
+ "tpt-aggregategroup-save": "Salvar",
+ "tpt-aggregategroup-add-new": "Adiciona um novo grupo agregador",
+ "tpt-aggregategroup-new-name": "Nome:",
+ "tpt-aggregategroup-new-description": "Descrição (opcional):",
+ "tpt-aggregategroup-remove-confirm": "Tem certeza que deseja remover este grupo agregador?",
+ "tpt-aggregategroup-invalid-group": "Grupo inexistente",
+ "tpt-aggregategroup-edit-name": "Nome:",
+ "tpt-aggregategroup-edit-description": "Descrição:",
+ "tpt-aggregategroup-update": "Salvar",
+ "tpt-aggregategroup-update-cancel": "Cancelar",
+ "tpt-invalid-group": "Grupo inválido",
+ "pt-parse-open": "O elemento &lt;translate> está desequilibrado.\nModelo de tradução: <pre>$1</pre>",
+ "pt-parse-close": "O elemento &lt;/translate> está desequilibrado.\nModelo de tradução: <pre>$1</pre>",
+ "pt-parse-nested": "Não são permitidas unidades de tradução &lt;translate> cruzadas.\nTexto do elemento: <pre>$1</pre>",
+ "pt-shake-multiple": "Vários marcadores para uma mesma unidade de tradução.\nCertifique-se de que as unidades de tradução sejam separadas por linhas em branco.\nTexto da unidade de tradução: <pre>$1</pre>",
+ "pt-shake-position": "Marcadores de unidades de tradução em posição inesperada.\nTexto da unidade de tradução: <pre>$1</pre>",
+ "pt-shake-empty": "Unidade de tradução vazia para o marcador \"$1\".",
+ "log-description-pagetranslation": "Registro para operações relacionadas com o sistema de tradução de páginas",
+ "log-name-pagetranslation": "Registro de tradução de páginas",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|marcou}} $3 para tradução",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|removeu}} $3 do sistema de tradução",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|completou}} a renomeação da página traduzível $3 para $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|encontrou}} um problema ao mover a página $3 para $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|completou}} a eliminação da página traduzível $3",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|falhou}} ao excluir $3 que pertence à página traduzível $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|completou}} a eliminação da página de tradução $3",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|falhou}} ao excluir $3 que pertence à página de tradução $4",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|incentivou}} a tradução de $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|desencorajou}} tradução de $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|removeu}} idiomas de prioridade da página traduzível $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|definiu}} idiomas prioritários para página traduzíveis $3 a $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|limitou}} idiomas para página traduzível $3 a $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER: $2|adicionado}} página traduzível $3 para grupo agregado $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|removeu}} página traduzível $3 do grupo agregado $4",
+ "log-action-filter-pagetranslation": "Tipo de ação:",
+ "log-action-filter-pagetranslation-mark": "Marcar para tradução",
+ "log-action-filter-pagetranslation-unmark": "Remoção da tradução",
+ "log-action-filter-pagetranslation-move": "Páginas movidas",
+ "log-action-filter-pagetranslation-delete": "Exclusões de página",
+ "log-action-filter-pagetranslation-encourage": "Encorajamento de tradução",
+ "log-action-filter-pagetranslation-discourage": "Desencorajamento da tradução",
+ "log-action-filter-pagetranslation-prioritylanguages": "Modificação de idioma de prioridade",
+ "log-action-filter-pagetranslation-aggregategroups": "Modificação de grupos agregados",
+ "pt-movepage-title": "Mover a página traduzível \"$1\"",
+ "pt-movepage-blockers": "A página traduzível não pode ser movida para outro nome devido {{PLURAL:$1|ao seguinte erro|aos seguintes erros}}:",
+ "pt-movepage-block-base-invalid": "O nome da página traduzível de destino não é um título válido.",
+ "pt-movepage-block-tp-invalid": "O título da página de tradução de destino para [[:$1]] seria inválido (talvez muito longo).",
+ "pt-movepage-block-section-invalid": "O título da página de destino para \"[[:$1]]\" para a unidade de tradução seria inválido (talvez muito longo).",
+ "pt-movepage-block-subpage-invalid": "O título da subpágina de destino para [[:$1]] seria inválido (talvez muito longo).",
+ "pt-movepage-list-pages": "Lista de páginas para serem movidas",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Página|Páginas}} de tradução",
+ "pt-movepage-list-section": "{{PLURAL:$1|Página de unidade|Páginas de unidades}} de tradução",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Subpágina marcada|Subpáginas marcadas}} para tradução",
+ "pt-movepage-list-translatable-note": "Essas páginas devem ser movidas separadamente.",
+ "pt-movepage-list-other": "{{PLURAL:$1|Outra subpágina|Outras subpáginas}}",
+ "pt-movepage-list-count": "Há, no total, $1 {{PLURAL:$1|página para ser movida|páginas para serem movidas}} e $2 {{PLURAL:$2|subpágina|subpáginas}}.",
+ "pt-movepage-list-no-pages": "Não foi encontrada nenhuma página.",
+ "pt-movepage-legend": "Mover página traduzível",
+ "pt-movepage-current": "Nome atual:",
+ "pt-movepage-new": "Novo nome:",
+ "pt-movepage-reason": "Motivo:",
+ "pt-movepage-subpages": "Mover todas as subpáginas",
+ "pt-movepage-talkpage-exists": "(Tem página de discussão)",
+ "pt-movepage-action-check": "Verificar se a movimentação é possível",
+ "pt-movepage-action-perform": "Realizar a movimentação",
+ "pt-movepage-action-other": "Alterar o destino",
+ "pt-movepage-intro": "Esta página especial permite mover páginas que estão marcadas para tradução.\nA operação de movimentação não é instantânea, porque será necessário mover muitas páginas.\nEnquanto estiverem sendo movidas, não será possível interagir com as páginas em questão.\nAs falhas serão registradas no [[Special:Log/pagetranslation|registro de tradução de páginas]] e precisarão ser reparadas manualmente.",
+ "pt-movepage-logreason": "Parte da página traduzível \"$1\"",
+ "pt-movepage-started": "Por favor, em um momento verifique no [[Special:Log/pagetranslation|registro de tradução de páginas]] por erros e mensagem de conclusão.",
+ "pt-locked-page": "Está página está bloqueada porque a página traduzível está sendo movida.",
+ "pt-deletepage-lang-title": "Eliminando a página de tradução \"$1\"",
+ "pt-deletepage-tp-title": "Eliminando a página traduzível \"$1\"",
+ "pt-deletepage-invalid-title": "A página especificada não é valida.",
+ "pt-deletepage-invalid-text": "A página especificada não é uma página traduzível nem uma página traduzida.",
+ "pt-deletepage-action-check": "Listar páginas para eliminar",
+ "pt-deletepage-action-perform": "Eliminar",
+ "pt-deletepage-action-other": "Alterar o destino",
+ "pt-deletepage-lang-legend": "Elimina a página traduzida",
+ "pt-deletepage-tp-legend": "Elimina a página traduzível",
+ "pt-deletepage-any-legend": "Eliminar a página traduzível ou a página de tradução",
+ "pt-deletepage-current": "Nome da página:",
+ "pt-deletepage-reason": "Motivo:",
+ "pt-deletepage-subpages": "Eliminar todas as subpáginas",
+ "pt-deletepage-list-pages": "Lista de páginas para eliminar",
+ "pt-deletepage-list-translation": "Páginas de tradução",
+ "pt-deletepage-list-section": "Páginas de unidades de tradução",
+ "pt-deletepage-list-other": "Outras subpáginas",
+ "pt-deletepage-list-count": "No total, $1 {{PLURAL:$1|página|páginas}} para serem excluídas e $2 {{PLURAL:$2|subpágina|subpáginas}}.",
+ "pt-deletepage-list-no-pages": "Não foi encontrada nenhuma página.",
+ "pt-deletepage-full-logreason": "Parte da página traduzível \"$1\"",
+ "pt-deletepage-lang-logreason": "Parte da página de tradução \"$1\"",
+ "pt-deletepage-started": "Verifique no [[Special:Log/pagetranslation|registro de tradução de páginas]] eventuais mensagens de erro e/ou de atividade concluída.",
+ "pt-deletepage-intro": "Esta página especial permite excluir uma página completa traduzível ou uma página de tradução individual em um idioma.\nA ação de exclusão não será instantânea, porque todas as páginas que dependem delas também serão excluídas.\nAs falhas serão registradas no [[Special:Log/pagetranslation|log da página de tradução]] e elas precisam ser reparadas manualmente.",
+ "pagemigration": "Migração de página de tradução",
+ "pagemigration-summary": "Especifique uma página de tradução e restaure qualquer tradução feita antes do sistema Traduzir ter sido habilitado nessa página.",
+ "pm-import-button-label": "Importar",
+ "pm-savepages-button-label": "Salvar",
+ "pm-cancel-button-label": "Cancelar",
+ "pm-page-does-not-exist": "$1 não existe.",
+ "pm-old-translations-missing": "$1 não contém traduções antigas.",
+ "pm-extra-units-warning": "Podem existir unidades extras. Por favor, combine as unidades de origem e de conversão corretamente.",
+ "pm-pagename-missing": "Por favor, insira o nome da página.",
+ "pm-add-icon-hover-text": "Adicione uma unidade abaixo",
+ "pm-swap-icon-hover-text": "Trocar com a unidade abaixo",
+ "pm-delete-icon-hover-text": "Excluir unidade",
+ "pm-pagetitle-placeholder": "Digite o título da página",
+ "pm-pagetitle-invalid": "Digite um título de página válido. Deve estar no formato <nome da página>/<código do idioma>.",
+ "pm-pagetitle-missing": "Por favor, insira o título da página.",
+ "pm-langcode-missing": "O código do idioma parece estar faltando no título. Por favor, digite o título da página no formato <page-name>/<language-code>.",
+ "pm-summary-import": "Tradução importada usando [[Special:PageMigration|migração de página]]",
+ "pm-on-import-message-text": "As antigas traduções foram importadas. Use as opções de adicionar, trocar e excluir para ajustar as unidades de tradução e clique no botão \"{{int: pm-savepages-button-label}}\" para salvá-las. Clique no botão \"{{int: pm-cancel-button-label}}\" para descartar.",
+ "pm-on-save-message-text": "As unidades de tradução foram salvas. Agora você pode inserir o título de uma nova página de tradução para migrá-la ou fazer alterações nas unidades abaixo e salvar uma nova revisão.",
+ "pm-translation-unit-fetch-failed": "Ocorreu um erro ao obter as unidades de tradução da página.",
+ "tpt-translate-title": "Permitir a tradução do título da página",
+ "pp-save-summary": "Preparar a página para tradução",
+ "pagepreparation": "Preparar esta página para tradução",
+ "pagepreparation-summary": "Especifique um título de página para preparar a tradução.",
+ "pp-pagename-placeholder": "Digite o nome da página",
+ "pp-prepare-button-label": "Preparar",
+ "pp-save-button-label": "Publicar",
+ "pp-cancel-button-label": "Cancelar",
+ "pp-save-message": "A página foi publicada. Você pode [$1 editá-la].",
+ "pp-prepare-message": "A página foi preparada para tradução. Veja o diferencial abaixo. Clique no botão \"{{int: pp-save-button-label}}\" se aprovado!",
+ "pp-already-prepared-message": "Parece que a página já foi preparada para tradução. Não há alterações em relação à versão anterior.",
+ "pp-diff-error": "Houve um erro ao buscar o diff do servidor.",
+ "pp-pagename-missing": "Por favor, insira o nome da página.",
+ "pp-diff-old-header": "Texto-fonte",
+ "pp-diff-new-header": "Texto preparado",
+ "tpt-unlink-confirm": "Por favor, confirme que deseja realmente remover esta página do sistema de tradução.\nO seletor de idioma e os nomes das páginas traduzidas deixarão de funcionar.\nAs páginas de tradução se tornarão editáveis.",
+ "tpt-unlink-button": "Remover da tradução",
+ "tpt-unlink-summary": "Página removida da tradução",
+ "tpt-generic-confirm": "Por favor, confirme a ação.",
+ "tpt-generic-button": "Confirmar",
+ "tpt-validation-not-insertable": "Nome da variável de tradução \"$1\" não funciona como inserido na interface de tradução. Evite usar caracteres especiais.",
+ "tpt-validation-name-reuse": "Variável de tradução \"$1\" é definida várias vezes com conteúdo diferente. Altere os nomes de variáveis para ser exclusivo dentro da unidade de tradução.",
+ "visualeditor-annotations-translate-start": "Início do conteúdo a ser traduzido",
+ "visualeditor-annotations-translate-end": "Fim do conteúdo a ser traduzido",
+ "visualeditor-annotations-translate-description": "Este intervalo é marcado como traduzível. Por favor, certifique-se de seguir as diretrizes de [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration/pt-br#Changing_the_source_text alterando o texto de origem].",
+ "visualeditor-annotations-tvar-start": "Início do conteúdo não traduzível",
+ "visualeditor-annotations-tvar-end": "Fim do conteúdo não traduzível",
+ "visualeditor-annotations-tvar-description": "Esse intervalo é marcado como não traduzível. Por favor, consulte [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration/pt-br#Segmentação segmentação do texto de origem] para maiores informações."
+}
diff --git a/Translate/i18n/pagetranslation/pt.json b/Translate/i18n/pagetranslation/pt.json
new file mode 100644
index 00000000..80ce3487
--- /dev/null
+++ b/Translate/i18n/pagetranslation/pt.json
@@ -0,0 +1,276 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fúlvio",
+ "Giro720",
+ "Hamilton Abreu",
+ "Imperadeiro98",
+ "Luckas",
+ "Malafaya",
+ "Mansil alfalb",
+ "Pols12",
+ "SandroHc",
+ "Vitorvicentevalente",
+ "Vivaelcelta",
+ "Waldir",
+ "Waldyrious"
+ ]
+ },
+ "pagetranslation": "Tradução de páginas",
+ "nstab-translations": "Unidade de tradução",
+ "right-pagetranslation": "Marcar versões de páginas para tradução",
+ "action-pagetranslation": "administrar as páginas traduzíveis",
+ "tps-edit-sourcepage-text": "Está a editar uma página de tradução de origem. Certifique-se de que está familiarizado com a seguinte documentação:\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text Alterar o texto de origem] \n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Markup_examples Exemplo da notação a ser usada]",
+ "tps-edit-sourcepage-ve-warning-limited-text": "Algumas áreas traduzíveis podem não ser editáveis neste editor. Para editá-las use o editor de origem, por favor.",
+ "tps-edit-sourcepage-ve-warning-title": "Aviso: página não suportada",
+ "tps-edit-sourcepage-ve-warning-text": "Está a editar uma página traduzível. Editá-las neste editor ainda não é oficialmente suportado. Use o editor de origem, por favor.",
+ "tps-edit-sourcepage-ve-warning-button": "OK",
+ "tpt-section": "Unidade de tradução $1",
+ "tpt-section-new": "Nova unidade de tradução. Nome: $1",
+ "tpt-section-deleted": "Unidade de tradução $1",
+ "tpt-diff-old": "Texto anterior",
+ "tpt-diff-new": "Texto novo",
+ "tpt-submit": "Marcar esta versão para tradução",
+ "tpt-sections-oldnew": "Unidades de tradução novas e existentes",
+ "tpt-sections-deleted": "Unidades de tradução eliminadas",
+ "tpt-sections-template": "Modelo de página de tradução",
+ "tpt-action-nofuzzy": "Não invalidar traduções",
+ "tpt-badtitle": "O nome de página fornecido ($1) não é um título válido",
+ "tpt-nosuchpage": "A página $1 não existe",
+ "tpt-oldrevision": "$2 não é a versão mais recente da página [[:$1]].\nApenas as últimas versões podem ser marcadas para tradução.",
+ "tpt-notsuitable": "A página $1 não é adequada para tradução.\nCertifique-se de que a mesma contém etiquetas $2 e tem uma sintaxe válida.",
+ "tpt-saveok": "A página [[:$1]] foi marcada para tradução com $2 {{PLURAL:$2|unidade|unidades}} de tradução.\nA página pode agora ser <span class=\"plainlinks\">[$3 traduzida]</span>.",
+ "tpt-saveok-first": "Pode [[Special:PageMigration|importar uma tradução pré-existente]] para esta página (se ela existir).",
+ "tpt-offer-notify": "Pode enviar uma <span class=\"plainlinks\">[$1 notificação aos tradutores]</span> sobre esta página.",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|Ver a lista de páginas traduzíveis.]]",
+ "tpt-showpage-intro": "Estão listadas abaixo as unidades de tradução novas, existentes e apagadas.\nAntes de marcar esta versão para tradução, verifique que as alterações às unidades de tradução são minimizadas para evitar trabalho desnecessário para os tradutores.",
+ "tpt-mark-summary": "Marcou esta versão para tradução",
+ "tpt-mark-nochanges": "Não há mudanças para rever. Marcar esta página para tradução não editará a página nem nenhuma das unidades de tradução existentes.",
+ "tpt-edit-failed": "Não foi possível atualizar a página: $1",
+ "tpt-duplicate": "O nome $1 é usado mais do que uma vez nas unidades de tradução.",
+ "tpt-invalid": "O nome da unidade de tradução $1 não pode conter sublinhados nem barras.",
+ "tpt-unmarked": "A página [[:$1]] já não está marcada para tradução.",
+ "tpt-list-nopages": "Não existem páginas marcadas para tradução, nem prontas a ser marcadas para tradução.",
+ "tpt-new-pages-title": "Páginas propostas para tradução",
+ "tpt-old-pages-title": "Páginas em tradução",
+ "tpt-other-pages-title": "Páginas com problemas",
+ "tpt-outdated-pages-title": "Páginas com mudanças pendentes",
+ "tpt-new-pages": "{{PLURAL:$1|Esta página contém|Estas páginas contêm}} texto com ''tags'' de tradução, mas nenhuma versão {{PLURAL:$1|da página|das páginas}} está presentemente marcada para tradução.",
+ "tpt-old-pages": "A versão mais recente {{PLURAL:$1|desta página|de cada uma destas páginas}} foi marcada para tradução.",
+ "tpt-other-pages": "{{PLURAL:$1|A versão anterior desta página está marcada|Versões anteriores destas páginas estão marcadas}} para tradução, mas a última versão não pode ser marcada para tradução.",
+ "tpt-outdated-pages": "{{PLURAL:$1|Esta página tem|Estas páginas têm}} mudanças não marcadas para tradução.",
+ "tpt-tag-discouraged": "desencorajada",
+ "tpt-tag-oldsyntax": "sintaxe antiga",
+ "tpt-tag-no-transclusion-support": "sem suporte de transclusão",
+ "tpt-select-prioritylangs": "Lista dos códigos de língua prioritários, separados por vírgulas:",
+ "tpt-select-prioritylangs-force": "Impedir as traduções para línguas que não sejam as prioritárias",
+ "tpt-select-prioritylangs-reason": "Motivo:",
+ "tpt-sections-prioritylangs": "Línguas prioritárias",
+ "tpt-sections-syntaxversion": "Versão da sintaxe",
+ "tpt-syntaxversion-text": "Esta página usa atualmente uma versão antiga da sintaxe de fonte das páginas traduzíveis. A nova versão envolverá as secções não traduzidas com uma etiqueta de HTML para indicar a língua correta do texto. Exemplo: $1. Pode usar uma nova sintaxe de notação $2 para impedir este tipo de envolvimento em locais onde ele não é apropriado, como ao traduzir o atributo <code>title</code> de um elemento. Não é possível voltar a uma versão antiga da sintaxe.",
+ "tpt-syntaxversion-label": "Usar a versão mais recente da sintaxe para esta página",
+ "tpt-transclusion": "Transclusão de predefinições",
+ "tpt-transclusion-label": "Ativar a transclusão com deteção de traduções para esta página",
+ "tpt-rev-mark": "marcar para tradução",
+ "tpt-rev-unmark": "remover das páginas para tradução",
+ "tpt-rev-discourage": "desencorajar",
+ "tpt-rev-encourage": "restaurar",
+ "tpt-rev-mark-tooltip": "Marcar a última versão desta página para tradução.",
+ "tpt-rev-unmark-tooltip": "Retira esta página da lista de páginas para tradução.",
+ "tpt-rev-discourage-tooltip": "Desencorajar traduções futuras nesta página.",
+ "tpt-rev-encourage-tooltip": "Restaurar a normal tradução desta página.",
+ "translate-tag-translate-link-desc": "Traduzir esta página",
+ "translate-tag-markthis": "Marcar esta página para tradução",
+ "translate-tag-markthisagain": "Esta página tem <span class=\"plainlinks\">[$1 alterações]</span> desde a última vez que foi <span class=\"plainlinks\">[$2 marcada para tradução]</span>.",
+ "translate-tag-hasnew": "Esta página contém <span class=\"plainlinks\">[$1 alterações]</span> que não estão marcadas para tradução.",
+ "tpt-translation-intro": "Esta página é uma <span class=\"plainlinks\">[$1 versão traduzida]</span> da página [[$2]] e a tradução está $3% completa.",
+ "tpt-translation-intro-fuzzy": "As traduções desatualizadas estão marcadas desta forma.",
+ "tpt-languages-legend": "Outras línguas:",
+ "tpt-languages-zero": "Iniciar a tradução para esta língua",
+ "tpt-languages-nonzero": "$1 ($2% traduzida)",
+ "tpt-tab-translate": "Traduzir",
+ "tpt-target-page": "Esta página não pode ser atualizada manualmente.\nEla é uma tradução da página [[$1]] e a tradução pode ser atualizada usando [$2 a ferramenta de tradução].",
+ "tpt-unknown-page": "Este espaço nominal está reservado para traduções de páginas de conteúdo.\nA página que está a tentar editar não parece corresponder a nenhuma página marcada para tradução.",
+ "tpt-translation-restricted": "A tradução desta página para esta língua foi impedida por um administrador de traduções.\n\nMotivo: $1",
+ "tpt-translation-restricted-no-reason": "A tradução desta página para esta língua foi impedida por um administrador de traduções.",
+ "tpt-discouraged-language-force-header": "Esta página não pode ser traduzida para $1.",
+ "tpt-discouraged-language-force-content": "Um administrador de traduções decidiu que esta página pode ser traduzida para $1.",
+ "tpt-discouraged-language-header": "A tradução para $1 não é uma prioridade desta página.",
+ "tpt-discouraged-language-content": "Um administrador de traduções decidiu concentrar os esforços de tradução em $1.",
+ "tpt-discouraged-language-force": "<strong>Esta página não pode ser traduzida para $2.</strong>\n\nUm administrador de traduções decidiu que a página só pode ser traduzida para $3.",
+ "tpt-priority-languages": "Um administrador de traduções definiu que as línguas prioritárias para este grupo são $1.",
+ "tpt-priority-languages-force": "Um administrador de traduções definiu as línguas prioritárias para este grupo como $1. Não é permitido traduzir para outras línguas.",
+ "tpt-discouraged-translation-header": "A tradução desta página foi desencorajada",
+ "tpt-discouraged-translation-content": "Um administrador de traduções desencorajou a tradução desta página. Ainda pode traduzir a página, mas as traduções poderão não ser úteis.",
+ "tpt-render-summary": "A atualizar para corresponder à nova versão da página fonte",
+ "aggregategroups": "Grupos agregadores",
+ "tpt-aggregategroup-add": "Adicionar",
+ "tpt-aggregategroup-save": "Gravar",
+ "tpt-aggregategroup-close": "Fechar",
+ "tpt-aggregategroup-add-new": "Adiciona um novo grupo agregador",
+ "tpt-aggregategroup-new-name": "Nome:",
+ "tpt-aggregategroup-new-description": "Descrição (opcional):",
+ "tpt-aggregategroup-remove-confirm": "Tem a certeza de querer eliminar este grupo agregador?",
+ "tpt-aggregategroup-invalid-group": "Grupo inexistente",
+ "tpt-aggregategroup-edit-name": "Nome:",
+ "tpt-aggregategroup-edit-description": "Descrição:",
+ "tpt-aggregategroup-update": "Gravar",
+ "tpt-aggregategroup-update-cancel": "Cancelar",
+ "tpt-aggregategroup-expand-all-groups": "expandir todos os grupos",
+ "tpt-aggregategroup-collapse-all-groups": "recolher todos os grupos",
+ "tpt-aggregategroup-expand-group": "expandir grupo",
+ "tpt-aggregategroup-collapse-group": "recolher grupo",
+ "tpt-invalid-group": "Grupo inválido",
+ "pt-parse-open": "A etiqueta &lt;translate> está desequilibrada.\nModelo de tradução: <pre>$1</pre>",
+ "pt-parse-close": "A etiqueta &lt;/translate> está desequilibrada.\nModelo de tradução: <pre>$1</pre>",
+ "pt-parse-nested": "Não são permitidas unidades de tradução &lt;translate> intercaladas.\nTexto do elemento: <pre>$1</pre>",
+ "pt-shake-multiple": "Existem vários marcadores para uma mesma unidade de tradução.\nCertifique-se de que as unidades de tradução estão separadas por linhas em branco.\nTexto da unidade de tradução: <pre>$1</pre>",
+ "pt-shake-position": "Existem marcadores de unidades de tradução numa posição inesperada.\nTexto da unidade de tradução: <pre>$1</pre>",
+ "pt-shake-empty": "Unidade de tradução vazia para o marcador \"$1\".",
+ "log-description-pagetranslation": "Registo para operações relacionadas com o sistema de tradução de páginas",
+ "log-name-pagetranslation": "Registo de tradução de páginas",
+ "logentry-pagetranslation-mark": "$1 marcou a página $3 para tradução{{GENDER:$2|}}",
+ "logentry-pagetranslation-unmark": "$1 retirou $3 do sistema de tradução{{GENDER:$2|}}",
+ "logentry-pagetranslation-moveok": "$1 concluiu a alteração do nome da página traduzível $3 para $4{{GENDER:$2|}}",
+ "logentry-pagetranslation-movenok": "$1 encontrou um problema ao mover a página $3 para $4{{GENDER:$2|}}",
+ "logentry-pagetranslation-deletefok": "$1 concluiu a eliminação da página traduzível $3{{GENDER:$2|}}",
+ "logentry-pagetranslation-deletefnok": "$1 não conseguiu eliminar $3, que pertence à página traduzível $4{{GENDER:$2|}}",
+ "logentry-pagetranslation-deletelok": "$1 concluiu a eliminação da página traduzível $3{{GENDER:$2|}}",
+ "logentry-pagetranslation-deletelnok": "$1 não conseguiu eliminar $3, que pertence à página de tradução $4{{GENDER:$2|}}",
+ "logentry-pagetranslation-encourage": "$1 encorajou a tradução de $3{{GENDER:$2|}}",
+ "logentry-pagetranslation-discourage": "$1 desencorajou a tradução de $3{{GENDER:$2|}}",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 removeu as línguas prioritárias da página traduzível $3{{GENDER:$2|}}",
+ "logentry-pagetranslation-prioritylanguages": "$1 definiu como línguas prioritárias da página traduzível $3 as línguas $5{{GENDER:$2|}}",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 restringiu as línguas para a página traduzível $3 a $5{{GENDER:$2|}}",
+ "logentry-pagetranslation-associate": "$1 adicionou a página traduzível $3 ao grupo agregador $4{{GENDER:$2|}}",
+ "logentry-pagetranslation-dissociate": "$1 removeu a página traduzível $3 do grupo agregador $4{{GENDER:$2|}}",
+ "log-action-filter-pagetranslation": "Tipo de operação:",
+ "log-action-filter-pagetranslation-mark": "Marcação para tradução",
+ "log-action-filter-pagetranslation-unmark": "Remoção das páginas para tradução",
+ "log-action-filter-pagetranslation-move": "Movimentações de páginas",
+ "log-action-filter-pagetranslation-delete": "Eliminações de páginas",
+ "log-action-filter-pagetranslation-encourage": "Encorajamento à tradução",
+ "log-action-filter-pagetranslation-discourage": "Desencorajamento de tradução",
+ "log-action-filter-pagetranslation-prioritylanguages": "Modificação das línguas prioritárias",
+ "log-action-filter-pagetranslation-aggregategroups": "Modificação de grupos agregadores",
+ "log-description-messagebundle": "Registo para operações relacionadas com o sistema de pacotes de mensagens",
+ "log-name-messagebundle": "Registo dos pacotes de mensagens",
+ "logentry-messagebundle-moveok": "$1 concluiu a alteração do nome do pacote de mensagens $3 para $4{{GENDER:$2|}}",
+ "logentry-messagebundle-movenok": "$1 encontrou um problema ao mover o pacote de mensagens $3 para $4{{GENDER:$2|}}",
+ "logentry-messagebundle-deletefok": "$1 concluiu a eliminação do pacote de mensagens $3{{GENDER:$2|}}",
+ "logentry-messagebundle-deletefnok": "$1 não conseguiu eliminar $3, que pertence ao pacote de mensagens $4{{GENDER:$2|}}",
+ "log-action-filter-messagebundle": "Tipo de operação:",
+ "log-action-filter-messagebundle-move": "Movimentações de pacotes de mensagens",
+ "log-action-filter-messagebundle-delete": "Eliminações de pacotes de mensagens",
+ "pt-movepage-title": "Mover a página traduzível \"$1\"",
+ "pt-movepage-messagebundle-title": "Mover o pacote de mensagens \"$1\"",
+ "pt-movepage-blockers": "A página traduzível não pode ser movida para outro nome devido {{PLURAL:$1|ao seguinte erro|aos seguintes erros}}:",
+ "pt-movepage-block-base-invalid": "A página traduzível de destino não tem um título válido.",
+ "pt-movepage-block-tp-invalid": "O título da página de tradução de destino para \"[[:$1]]\" seria inválido (talvez demasiado longo).",
+ "pt-movepage-block-section-invalid": "O título da página de destino \"[[:$1]]\" para a unidade de tradução seria inválido (talvez demasiado longo).",
+ "pt-movepage-block-subpage-invalid": "O título da subpágina de destino para \"[[:$1]]\" seria inválido (talvez demasiado longo).",
+ "pt-movepage-block-talkpage-invalid": "O título da página de discussão de destino para \"[[:$1]]\" seria inválido (talvez demasiado longo).",
+ "pt-movepage-block-unknown-page": "A página que está a ser movida ([[:$1]]) não parece fazer parte da página traduzível.",
+ "pt-movepage-block-ns-talk-unsupported": "A página ([[:$1]]) está a ser movida para um espaço nominal que não suporta páginas de discussão.",
+ "pt-movepage-block-rename-failed": "Ocorreu um erro ao gerar um título novo para a página [[:$1]]",
+ "pt-movepage-list-pages": "Lista de páginas para serem movidas",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Página|Páginas}} de tradução",
+ "pt-movepage-list-section": "{{PLURAL:$1|Página de unidade|Páginas de unidades}} de tradução",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Subpágina marcada|Subpáginas marcadas}} para tradução",
+ "pt-movepage-list-translatable-note": "Estas páginas devem ser movidas separadamente.",
+ "pt-movepage-list-other": "{{PLURAL:$1|Outra subpágina|Outras subpáginas}}",
+ "pt-movepage-list-count": "No total, {{PLURAL:$1|será movida $1 página|serão movidas $1 páginas}}, incluindo $2 {{PLURAL:$2|subpágina|subpáginas}} e $3 {{PLURAL:$3|página|páginas}} de discussão.",
+ "pt-movepage-page-count-limit": "Esta página traduzível consiste em mais de $1 {{PLURAL:$1|página|páginas}}. A movimentação de tantas páginas não pode ser feita com confiança. Contacte um administrador do sistema para fazê-la usando um ''script'' de manutenção.",
+ "pt-movepage-list-no-pages": "Não foi encontrada nenhuma página.",
+ "pt-movepage-legend": "Mover página traduzível",
+ "pt-movepage-messagebundle-legend": "Mover pacote de mensagens",
+ "pt-movepage-current": "Nome atual:",
+ "pt-movepage-new": "Nome novo:",
+ "pt-movepage-reason": "Motivo:",
+ "pt-movepage-subpages": "Mover todas as subpáginas",
+ "pt-movepage-talkpages": "Mover páginas de discussão",
+ "pt-movepage-talkpage-exists": "(Tem página de discussão)",
+ "pt-movepage-action-check": "Verificar se a movimentação é possível",
+ "pt-movepage-action-perform": "Realizar a movimentação",
+ "pt-movepage-action-other": "Alterar o destino",
+ "pt-movepage-intro": "Esta página especial permite-lhe mover páginas que estão marcadas para tradução.\nA operação de movimentação não é instantânea, porque será necessário mover muitas páginas.\nEnquanto estas estão a ser movidas, não é possível interagir com as páginas em questão.\nAs falhas serão [[$1|registadas]] e têm de ser reparadas manualmente.",
+ "pt-movepage-logreason": "Parte da página traduzível \"$1\"",
+ "pt-movepage-started": "Verifique daqui a pouco no [[$1|registo]] se ocorreram erros e se existe a mensagem de conclusão, por favor.",
+ "pt-locked-page": "Esta página está bloqueada porque a página traduzível está a ser movida.",
+ "pt-deletepage-lang-title": "A eliminar a página traduzida \"$1\"",
+ "pt-deletepage-tp-title": "A eliminar a página traduzível \"$1\"",
+ "pt-deletepage-mb-title": "A eliminar o pacote de mensagens \"$1\"",
+ "pt-deletepage-invalid-title": "A página especificada é inválida.",
+ "pt-deletepage-invalid-text": "A página especificada não é uma página traduzível nem uma página traduzida.",
+ "pt-deletepage-action-check": "Listar as páginas para eliminar",
+ "pt-deletepage-action-perform": "Eliminar",
+ "pt-deletepage-action-other": "Alterar o destino",
+ "pt-deletepage-lang-legend": "Eliminar a página traduzida",
+ "pt-deletepage-tp-legend": "Eliminar a página traduzível",
+ "pt-deletepage-mb-legend": "Eliminar pacote de mensagens",
+ "pt-deletepage-any-legend": "Eliminar página traduzível, pacote de mensagens ou página de tradução",
+ "pt-deletepage-current": "Nome da página:",
+ "pt-deletepage-reason": "Motivo:",
+ "pt-deletepage-reason-details": "Outro motivo/motivo adicional:",
+ "pt-deletepage-reason-other": "Outro motivo",
+ "pt-deletepage-subpages": "Eliminar todas as subpáginas",
+ "pt-deletepage-list-pages": "Lista das páginas para eliminar",
+ "pt-deletepage-list-translation": "Páginas traduzidas",
+ "pt-deletepage-list-section": "Páginas de unidades de tradução",
+ "pt-deletepage-list-other": "Outras subpáginas",
+ "pt-deletepage-list-count": "No total {{PLURAL:$1|será eliminada $1 página|serão eliminadas $1 páginas}} e $2 {{PLURAL:$2|subpágina|subpáginas}}.",
+ "pt-deletepage-list-no-pages": "Não foi encontrada nenhuma página.",
+ "pt-deletepage-full-logreason": "Parte da página traduzível \"$1\"",
+ "pt-deletepage-lang-logreason": "Parte da página traduzida \"$1\"",
+ "pt-deletepage-started": "Verifique a existência de erros ou de uma mensagem de sucesso no [[$1|registo]].",
+ "pt-deletepage-intro": "Esta página especial permite-lhe eliminar uma página traduzível inteira, um pacote de mensagens ou uma página individual de tradução para uma língua.\nA eliminação não será instantânea porque também serão eliminadas as páginas dependentes delas.\nOs problemas que ocorrerem serão registados no [[$1|respetivo registo]] e têm de ser reparados manualmente.",
+ "pagemigration": "Migração de página de tradução",
+ "pagemigration-summary": "Especifica uma página de tradução e restaura qualquer tradução feita antes de o sistema Tradução ter sido ativado na página.",
+ "pm-import-button-label": "Importar",
+ "pm-savepages-button-label": "Gravar",
+ "pm-cancel-button-label": "Cancelar",
+ "pm-page-does-not-exist": "$1 não existe",
+ "pm-old-translations-missing": "$1 não contém tradução antigas",
+ "pm-extra-units-warning": "Podem existir unidades suplementares. Faça corresponder corretamente as unidades de origem às de tradução, por favor.",
+ "pm-pagename-missing": "Introduza o nome da página, por favor.",
+ "pm-add-icon-hover-text": "Adicionar uma unidade abaixo",
+ "pm-swap-icon-hover-text": "Trocar com a unidade abaixo",
+ "pm-delete-icon-hover-text": "Eliminar unidade",
+ "pm-pagetitle-placeholder": "Introduza o título da página",
+ "pm-pagetitle-invalid": "A migração de páginas só funciona nas páginas das traduções, por exemplo \"Página/pt\". O título fornecido não é válido.",
+ "pm-pagetitle-missing": "Introduza o título da página, por favor.",
+ "pm-langcode-missing": "A migração de páginas só funciona nas páginas das traduções, por exemplo \"Página/pt\". O título fornecido não é uma página de tradução.",
+ "pm-summary-import": "Tradução importada usando a [[Special:PageMigration|migração de página]]",
+ "pm-on-import-message-text": "As traduções antigas foram importadas. Use as opções acrescentar, trocar e eliminar para ajustar as unidades de tradução e clique o botão \"{{int:pm-savepages-button-label}}\" para gravá-las. Clique o botão \"{{int:pm-cancel-button-label}}\" para cancelar.",
+ "pm-on-save-message-text": "As unidades de tradução foram gravadas. Agora pode introduzir o título de uma página de tradução nova para migrá-la, ou fazer mudanças às unidades abaixo e gravar uma nova revisão.",
+ "pm-pagetitle-not-translatable": "$1 não faz parte de uma página traduzível.",
+ "pm-translation-unit-fetch-failed": "Ocorreu um erro ao obter as unidades de tradução da página.",
+ "tpt-translate-title": "Permitir tradução do título da página",
+ "pp-save-summary": "Página preparada para tradução",
+ "pagepreparation": "Preparar página para tradução",
+ "pagepreparation-summary": "Especificar um título de página a preparar para tradução.",
+ "pp-pagename-placeholder": "Introduza o nome da página",
+ "pp-prepare-button-label": "Preparar",
+ "pp-save-button-label": "Publicar",
+ "pp-cancel-button-label": "Cancelar",
+ "pp-save-message": "A página foi publicada. Pode [$1 editá-la] agora.",
+ "pp-prepare-message": "A página foi preparada para tradução. Veja a comparação abaixo. Clique no botão \"{{int:pp-save-button-label}}\" se estiver tudo correto!",
+ "pp-already-prepared-message": "Parece que a página já foi preparada para tradução. Não há alterações em relação à versão anterior.",
+ "pp-diff-error": "Ocorreu um erro ao tentar obter as diferenças do servidor.",
+ "pp-pagename-missing": "Introduza o nome da página, por favor.",
+ "pp-diff-old-header": "Texto fonte",
+ "pp-diff-new-header": "Texto preparado",
+ "tpt-unlink-confirm": "Confirme que pretende realmente eliminar esta página do sistema de tradução.\nO seletor de línguas e os nomes das páginas traduzidas deixarão de funcionar.\nAs páginas de tradução tornar-se-ão editáveis.",
+ "tpt-unlink-button": "Remover da tradução",
+ "tpt-unlink-summary": "Página removida da tradução",
+ "tpt-generic-confirm": "Confirme a ação, por favor.",
+ "tpt-generic-button": "Confirmar",
+ "tpt-validation-not-insertable": "O nome da variável de tradução \"$1\" não funciona como um inserível na interface de tradução. Evite usar caracteres especiais.",
+ "tpt-validation-name-reuse": "A variável de tradução \"$1\" é definida várias vezes com conteúdo diferente. Altere os nomes das variáveis para serem exclusivos dentro da unidade de tradução.",
+ "visualeditor-annotations-translate-start": "Início do conteúdo a ser traduzido",
+ "visualeditor-annotations-translate-end": "Fim do conteúdo a ser traduzido",
+ "visualeditor-annotations-translate-description": "Este intervalo é marcado como traduzível. Certifique-se de que segue as diretrizes de [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text alteração do texto fonte].",
+ "visualeditor-annotations-tvar-start": "Início do conteúdo a não traduzir",
+ "visualeditor-annotations-tvar-end": "Fim do conteúdo a não traduzir",
+ "visualeditor-annotations-tvar-description": "Este intervalo está marcado como não traduzível. Consulte [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Segmentation Segmentação do texto fonte] para obter mais informações, por favor."
+}
diff --git a/Translate/i18n/pagetranslation/pwn.json b/Translate/i18n/pagetranslation/pwn.json
new file mode 100644
index 00000000..ee0e6efb
--- /dev/null
+++ b/Translate/i18n/pagetranslation/pwn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Akamycoco"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% pinapadjadjaljun anga)"
+}
diff --git a/Translate/i18n/pagetranslation/qqq.json b/Translate/i18n/pagetranslation/qqq.json
new file mode 100644
index 00000000..42477834
--- /dev/null
+++ b/Translate/i18n/pagetranslation/qqq.json
@@ -0,0 +1,295 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ajeje Brazorf",
+ "Amire80",
+ "BPositive",
+ "BaRaN6161 TURK",
+ "Darth Kule",
+ "EugeneZelenko",
+ "Fryed-peach",
+ "Guycn2",
+ "Kizule",
+ "Liangent",
+ "Liuxinyu970226",
+ "Lloffiwr",
+ "Metalhead64",
+ "Mormegil",
+ "Nemo bis",
+ "Nike",
+ "PiefPafPier",
+ "Pols12",
+ "Purodha",
+ "Raymond",
+ "Robby",
+ "Saurmandal",
+ "Shirayuki",
+ "Siebrand",
+ "Slboat",
+ "ThisIsACreeper0101",
+ "Umherirrender",
+ "Verdy p",
+ "Zoranzoki21"
+ ]
+ },
+ "pagetranslation": "{{doc-special|PageTranslation}}\n[[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]",
+ "nstab-translations": "Tab label for pages in the Translations namespace.",
+ "right-pagetranslation": "{{doc-right|pagetranslation}}",
+ "action-pagetranslation": "{{doc-action|pagetranslation}}",
+ "tps-edit-sourcepage-text": "Help text shown while editing a source translation page. Contains links to various Translate extension documentation page. Appears below {{msg-mw|Tps-edit-sourcepage-title}}.",
+ "tps-edit-sourcepage-ve-warning-limited-text": "Text shown in the notification area when user is editing the sourcepage using Visual Editor 'visual' mode",
+ "tps-edit-sourcepage-ve-warning-title": "Title for the warning dialog shown when user is editing the source page using Visual Editor 'visual' mode in MediaWiki version 1.37 and older.",
+ "tps-edit-sourcepage-ve-warning-text": "Text shown in the warning dialog when user is editing the source page using Visual Editor 'visual' mode in MediaWiki version 1.37 and older.",
+ "tps-edit-sourcepage-ve-warning-button": "Button in the warning dialog shown when user is editing the sourcepage using Visual Editor 'visual' mode\n{{identical|OK}}",
+ "tpt-section": "[[File:Page_translation_mark_view.png|thumb|Page translation]]\nA screenshot of the translation administration page is available.\n\nParameters:\n* $1 - the identifier of the unit, or the string \"Page display title\" (special unit identifier for page title; hard-coded)",
+ "tpt-section-new": "[[File:Page_translation_mark_view.png|thumb|Page translation]]\nA screenshot of the translation administration page is available.\n\nParameters:\n* $1 - the identifier of the unit, or the string \"Page display title\" (special unit identifier for page title; hard-coded)",
+ "tpt-section-deleted": "See definition on [[mw:Help:Extension:Translate/Glossary]].\n\nParameters:\n* $1 - the identifier of the unit, or the string \"Page display title\" (special unit identifier for page title; hard-coded)",
+ "tpt-diff-old": "Heading for old version of a translation or message definition.",
+ "tpt-diff-new": "Heading for new version of a translation or message definition.",
+ "tpt-submit": "Button text on Special:PageTranslation to mark page for translation.",
+ "tpt-sections-oldnew": "\"New and existing\" refers to the sum of: (a) new translation units in a translatable page, plus (b) the already existing ones from previous version of a translatable page.",
+ "tpt-sections-deleted": "See definition on [[mw:Help:Extension:Translate/Glossary]].",
+ "tpt-sections-template": "[[File:Page_translation_mark_view.png|thumb|Page translation]]\nThe template used by translations of the translatable page, extracted from the source text. Shown on the translation administration page; a screenshot is available.",
+ "tpt-action-nofuzzy": "See [[mw:Help:Extension:Translate/Page translation administration#Changing the source text]] for context.",
+ "tpt-badtitle": "Parameters:\n* $1 - page title",
+ "tpt-nosuchpage": "Parameters:\n* $1 - page title",
+ "tpt-oldrevision": "Error message displayed when trying to mark an older page revision for translation. Parameters:\n* $1 is a page title.\n* $2 is a page link.",
+ "tpt-notsuitable": "Parameters:\n* $1 - page title\n* $2 - <nowiki><translate></nowiki> tag",
+ "tpt-saveok": "Followed by {{msg-mw|Tpt-saveok-first}} if the page is being marked for translation for the first time and {{msg-mw|Tpt-offer-notify}} if the user is allowed to notify translators.\n\nParameters:\n* $1 - page title\n* $2 - number of sections, can be used with PLURAL\n* $3 - URL which points to [[Special:Translate]]",
+ "tpt-saveok-first": "Message displayed on [[Special:PageTranslation]] after marking a page for translation the very first time.\n\nParameters:\n* $1 - a URL to [[Special:PageMigration]]",
+ "tpt-offer-notify": "Message displayed on [[Special:PageTranslation]] after marking a page for translation when the marking user also has right to notify translators.\n\nParameters:\n* $1 - a URL to [[Special:NotifyTranslators]] with the marked page preselected",
+ "tpt-list-pages-in-translations": "Message displayed on [[Special:PageTranslation]] after marking a page for translation to view the list of translatable pages.",
+ "tpt-showpage-intro": "See definition on [[mw:Help:Extension:Translate/Glossary]].",
+ "tpt-mark-summary": "This message is used as an edit summary.",
+ "tpt-mark-nochanges": "A note in Special:PageTranslation when marking a revision of a page for translation.",
+ "tpt-edit-failed": "Used as error message. Parameters:\n* $1 - page title",
+ "tpt-duplicate": "Used as error message.\n\nSee definition on [[mw:Help:Extension:Translate/Glossary]].\n\nParameters:\n* $1 - translation unit ID (name)",
+ "tpt-invalid": "Used as error message.\n\nSee definition on [[mw:Help:Extension:Translate/Glossary]].\n\nParameters:\n* $1 - translation unit ID (name)",
+ "tpt-unmarked": "Used as success message for unmarking page for translation.\n\nTranslate this as \"Page $1 has been unmarked for translation\".\n\nSee definition on [[mw:Help:Extension:Translate/Glossary]].\n\nParameters:\n* $1 - page title",
+ "tpt-list-nopages": "See definition on [[mw:Help:Extension:Translate/Glossary]].",
+ "tpt-new-pages-title": "Header in [[Special:PageTranslation]] [[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]",
+ "tpt-old-pages-title": "Header in [[Special:PageTranslation]] [[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]",
+ "tpt-other-pages-title": "Header in [[Special:PageTranslation]] [[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]",
+ "tpt-outdated-pages-title": "Header in [[Special:PageTranslation]] [[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]",
+ "tpt-new-pages": "[[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]\nPreceded by the section header {{msg-mw|Tpt-new-pages-title}}.\n\nFollowed by the ordered list of pages.\n\nParameters:\n* $1 - the number of pages in the following list",
+ "tpt-old-pages": "[[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]\nPreceded by the section header {{msg-mw|Tpt-old-pages-title}}.\n\nFollowed by the ordered list of pages.\n\nParameters:\n* $1 - the number of pages",
+ "tpt-other-pages": "[[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]\nPreceded by the section header {{msg-mw|Tpt-other-pages-title}}.\n\nFollowed by the ordered list of pages.\n\nParameters:\n* $1 - the number of pages in the following list",
+ "tpt-outdated-pages": "[[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]\nPreceded by the section header {{msg-mw|Tpt-outdated-pages-title}}.\n\nFollowed by the ordered list of pages.\n\nParameters:\n* $1 - the number of pages in the following list",
+ "tpt-tag-discouraged": "Description that can be used as tag for translatable pages that are discouraged from translation.",
+ "tpt-tag-oldsyntax": "Description that can be used as tag for translatable pages using old syntax version.",
+ "tpt-tag-no-transclusion-support": "Description that can be used as tag for translatable pages that do not support translation aware template transclusion.",
+ "tpt-select-prioritylangs": "Label for the input box to enter preferred languages",
+ "tpt-select-prioritylangs-force": "Label for the checkbox to make the translation restriction",
+ "tpt-select-prioritylangs-reason": "Label for the textbox to enter reason for restriction.\n{{Identical|Reason}}",
+ "tpt-sections-prioritylangs": "Section title in [[Special:PageTranslation]].\n{{Identical|Priority language}}",
+ "tpt-sections-syntaxversion": "Section title in [[Special:PageTranslation]].",
+ "tpt-syntaxversion-text": "Additional explanation",
+ "tpt-syntaxversion-label": "Label for a checkbox",
+ "tpt-transclusion": "Section title in [[Special:PageTranslation]].",
+ "tpt-transclusion-label": "Label for template transclusion",
+ "tpt-rev-mark": "Possible page action and link text in [[Special:PageTranslation]]. In parenthesis after page name. [[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]",
+ "tpt-rev-unmark": "Possible page action and link text in [[Special:PageTranslation]]. In parenthesis after page name. [[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]",
+ "tpt-rev-discourage": "Possible page action and link text in [[Special:PageTranslation]]. In parenthesis after page name. [[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]",
+ "tpt-rev-encourage": "Possible page action and link text in [[Special:PageTranslation]]. In parenthesis after page name. [[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]\n{{Identical|Restore}}",
+ "tpt-rev-mark-tooltip": "Tooltip for page action link text in [[Special:PageTranslation]] [[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]",
+ "tpt-rev-unmark-tooltip": "Tooltip for page action link text {{msg-mw|Tpt-rev-unmark}} in [[Special:PageTranslation]] [[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]",
+ "tpt-rev-discourage-tooltip": "Tooltip for page action link text in [[Special:PageTranslation]] [[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]",
+ "tpt-rev-encourage-tooltip": "Tooltip for page action link text in [[Special:PageTranslation]] [[Image:Page translation admin view.png|thumb|Admin view of special page PageTranslation]]",
+ "translate-edit-tag-warning": "{{notranslate}}\nShown when editing translatable pages. Default is empty.",
+ "translate-tag-translate-link-desc": "Link at the top of translatable pages, see [[mw:Help:Extension:Translate/Translation example]] for context.\n\nThis message may be optionally followed (on the same line) by {{Msg-mw|Translate-tag-hasnew}} (with a localized semicolon separator between them).",
+ "translate-tag-markthis": "See definition on [[mw:Help:Extension:Translate/Glossary]].",
+ "translate-tag-markthisagain": "\"has changes\" is to be understood as \"has been altered/edited\".\n\nParameters:\n* $1 - a link which points to the diff\n* $2 - a link which points to Special:PageTranslation?do=mark to mark the page for translation",
+ "translate-tag-hasnew": "Link at the top of translatable pages, see [[mw:Help:Extension:Translate/Translation example]] for context.\n\nThe terms \"contains changes\" is to be understood as \"has been altered/edited\".\n* $1 is a URL to view changes.\n\nThis message appears conditionally in a banner line at top of translatable pages, after a semicolon separator, as a complement of the sentence started in {{Msg-mw|Translate-tag-translate-link-desc}}.",
+ "tpt-translation-intro": "Header of a translation page (see definition on [[mw:Help:Extension:Translate/Glossary]]).\n\nParameters:\n* $1 - URL\n* $2 - page title\n* $3 - translation percentage",
+ "tpt-translation-intro-fuzzy": "Example sentence styled as some content in the current page",
+ "tpt-languages-legend": "The caption of a language selector displayed using <code><nowiki><languages /></nowiki></code>. e.g. on [[mw:Project:About]].\n{{Identical|Otherlanguages}}",
+ "tpt-languages-separator": "{{optional}}",
+ "tpt-languages-zero": "Tooltip for a link in <code><nowiki><language /></nowiki></code> when language is included because it is a priority language, but translation does not yet exist.\n\nThe link directly points to the translation view ([[Special:Translate]]).\n\nTranslate this as \"Start translating (the page) into this language\".",
+ "tpt-languages-nonzero": "Tooltip for a link to go to a translated version of a translatable page.\n\nParameters:\n* $1 - page title (translated if present)\n* $2 - translation percentage, without decimals (supports PLURAL)",
+ "tpt-tab-translate": "Used as label for the tab.\n\nReplaces the edit tab with translation tab for translation pages.\n{{Identical|Translate}}",
+ "tpt-target-page": "Message displayed when trying to edit a translatable page directly. Parameters:\n* $1 is the translatable page\n* $2 is a link to the translation tool for the translatable page.",
+ "tpt-unknown-page": "See [[mw:Help:Extension:Translate/Translation example]] for context on page translation feature.",
+ "tpt-translation-restricted": "Error message shown to user when translating to a language which is restricted by translation admin, along with the reason for the restriction.\n\nParameters:\n* $1 - reason\nSee also:\n* {{msg-mw|Tpt-translation-restricted-no-reason}}",
+ "tpt-translation-restricted-no-reason": "Error message shown to user when translating to a language which is restricted by translation admin. Displayed when no reason has been provided by the translation admin.\nSee also:\n* {{msg-mw|Tpt-translation-restricted}}",
+ "tpt-discouraged-language-force-header": "Header for error shown along with group description if the language is prevented from translation for the selected language.\n\nParameter:\n* $1 - the language to which the user asked to translate the page",
+ "tpt-discouraged-language-force-content": "Error shown along with group description if the language is prevented from translation for the selected language.\n\nParameters:\n* $1 - comma-separated names of the languages to which translation is encouraged",
+ "tpt-discouraged-language-header": "Header for warning shown along with group description if the language is discouraged from translation for the selected language.\n\nParameters:\n* $1 the language to which the user asked to translate the page",
+ "tpt-discouraged-language-content": "Warning shown along with group description if the language is discouraged from translation for the selected language.\n\nParameters:\n* $1 - comma-separated names of the languages to which translation is encouraged",
+ "tpt-discouraged-language-force": "Error shown along with group description if the language is prevented from translation for the selected language.\n\nParameters:\n* $1 - (Unused) empty string\n* $2 - the language that to which the user asked to translate the page\n* $3 - the names of the translation languages\nSee also:\n* {{msg-mw|Tpt-discouraged-language}}\n\nThis message is used only in the old interface (non-TUX).",
+ "tpt-priority-languages": "Message to be shown before the messagestats table if priority languages are set, but translations to other languages are still allowed. $1 is a comma-separated list of language codes.",
+ "tpt-priority-languages-force": "Message to be shown before the messagestats table if priority languages are set, and translations to other languages are not allowed. $1 is a comma-separated list of language codes.",
+ "tpt-discouraged-translation-header": "Header for warning shown along with group description if the translation for the page is discouraged",
+ "tpt-discouraged-translation-content": "Message to be shown before the messagestats table if the translation for the page is discouraged",
+ "tpt-render-summary": "Edit summary when FuzzyBot updates translation pages.",
+ "aggregategroups": "{{doc-special|AggregateGroups}}",
+ "tpt-aggregategroup-add": "Label for the button to add a new page to aggregate group in [[Special:AggregateGroups]].\n{{Identical|Add}}",
+ "tpt-aggregategroup-save": "Label for the button to save a new aggregate group in [[Special:AggregateGroups]].\n{{Identical|Save}}",
+ "tpt-aggregategroup-close": "Label for the button to close the new aggregate group form on [[Special:AggregateGroups]].\n{{Identical|Close}}",
+ "tpt-aggregategroup-add-new": "Label for the link that gives a form to enter new group details in [[Special:AggregateGroups]]",
+ "tpt-aggregategroup-new-name": "Label for the name field in [[Special:AggregateGroups]].\n{{Identical|Name}}",
+ "tpt-aggregategroup-new-description": "Label for the description field in [[Special:AggregateGroups]].\n{{Identical|Description}}",
+ "tpt-aggregategroup-remove-confirm": "Confirmation message shown while user tried to delete an aggregate group in [[Special:AggregateGroups]]",
+ "tpt-aggregategroup-invalid-group": "Show on [[Special:AggregateGroups]] after remove button of a group, if the stored group id does not match any currently known groups.",
+ "tpt-aggregategroup-edit-name": "Label for the edit name field in [[Special:AggregateGroups]].\n{{Identical|Name}}",
+ "tpt-aggregategroup-edit-description": "Label for the edit description field in [[Special:AggregateGroups]].\n{{Identical|Description}}",
+ "tpt-aggregategroup-update": "Label for button on [[Special:AggregateGroups]] to update.\n{{Identical|Save}}",
+ "tpt-aggregategroup-update-cancel": "Label for button on [[Special:AggregateGroups]] to cancel editing.\n{{Identical|Cancel}}",
+ "tpt-aggregategroup-expand-all-groups": "Label for link to expand all groups",
+ "tpt-aggregategroup-collapse-all-groups": "Label for link to collapse all groups",
+ "tpt-aggregategroup-expand-group": "Tooltip for button on [[Special:AggregateGroups]] to expand a specific group",
+ "tpt-aggregategroup-collapse-group": "Tooltip for button on [[Special:AggregateGroups]] to collapse a specific group",
+ "tpt-invalid-group": "Message when user tries to add an invalid group.\n\n\"group\" refers to \"aggregate group\".",
+ "pt-parse-open": "Error shown after an attempt to mark a page for translation, see [[mw:Help:Extension:Translate/Page translation administration]] for context.\n\n\"Translation template\" is the structure of a translation page, where the place for the translations of each section is marked with a placeholder.\n\nParameters:\n* $1 - translation template\nSee also:\n* {{msg-mw|Pt-parse-close}}",
+ "pt-parse-close": "Error shown after an attempt to mark a page for translation, see [[mw:Help:Extension:Translate/Page translation administration]] for context.\n\n\"Translation template\" is the structure of a translation page, where the place for the translations of each section is marked with a placeholder.\n\nParameters:\n* $1 - translation template\nSee also:\n* {{msg-mw|Pt-parse-open}}",
+ "pt-parse-nested": "Error shown after an attempt to mark a page for translation, see [[mw:Help:Extension:Translate/Page translation administration]] for context.\n\nSee definitions on [[mw:Help:Extension:Translate/Glossary]].\n\nParameters:\n* $1 - translation unit (=section) text",
+ "pt-shake-multiple": "Each translation unit (=section) can only contain one marker.\n\nParameters:\n* $1 - translation unit (=section) text",
+ "pt-shake-position": "Error shown after an attempt to mark a page for translation, see [[mw:Help:Extension:Translate/Page translation administration]] for context.\n\nSee definitions on [[mw:Help:Extension:Translate/Glossary]].\n\nParameters:\n* $1 - translation unit (=section) text",
+ "pt-shake-empty": "Translation unit (=section) is empty except for the translation marker (=<nowiki><!--T:1--></nowiki>).\n\nParameters:\n* $1 - translation unit ID",
+ "log-description-pagetranslation": "Description of a log type on [[Special:Log/pagetranslation]]",
+ "log-name-pagetranslation": "{{doc-logpage}}",
+ "logentry-pagetranslation-mark": "{{logentry|[[Special:Log/pagetranslation]]}}",
+ "logentry-pagetranslation-unmark": "{{logentry|[[Special:Log/pagetranslation]]}}",
+ "logentry-pagetranslation-moveok": "{{logentry|[[Special:Log/pagetranslation]]}}",
+ "logentry-pagetranslation-movenok": "{{logentry|[[Special:Log/pagetranslation]]}}",
+ "logentry-pagetranslation-deletefok": "{{logentry|[[Special:Log/pagetranslation]]}}",
+ "logentry-pagetranslation-deletefnok": "{{logentry|[[Special:Log/pagetranslation]]}}",
+ "logentry-pagetranslation-deletelok": "{{logentry|[[Special:Log/pagetranslation]]}}",
+ "logentry-pagetranslation-deletelnok": "{{logentry|[[Special:Log/pagetranslation]]}}",
+ "logentry-pagetranslation-encourage": "{{logentry|[[Special:Log/pagetranslation]]}}",
+ "logentry-pagetranslation-discourage": "{{logentry|[[Special:Log/pagetranslation]]}}",
+ "logentry-pagetranslation-prioritylanguages-unset": "{{logentry|[[Special:Log/pagetranslation]]}}",
+ "logentry-pagetranslation-prioritylanguages": "{{logentry|[[Special:Log/pagetranslation]]}}\n* $5 is list of languages (A, B and C)",
+ "logentry-pagetranslation-prioritylanguages-force": "{{logentry|[[Special:Log/pagetranslation]]}}\n* $5 is list of languages (A, B and C)",
+ "logentry-pagetranslation-associate": "{{logentry|[[Special:Log/pagetranslation]]}}\n* $4 is the name of the aggregate group",
+ "logentry-pagetranslation-dissociate": "{{logentry|[[Special:Log/pagetranslation]]}}\n* $4 is the name of the aggregate group",
+ "log-action-filter-pagetranslation": "{{Doc-log-action-filter-type|pagetranslation}}\n{{Identical|Type of action}}\n{{Related|Log-action-filter}}",
+ "log-action-filter-pagetranslation-mark": "{{doc-log-action-filter-action|pagetranslation|mark}}",
+ "log-action-filter-pagetranslation-unmark": "{{doc-log-action-filter-action|pagetranslation|unmark}}",
+ "log-action-filter-pagetranslation-move": "{{doc-log-action-filter-action|pagetranslation|move}}",
+ "log-action-filter-pagetranslation-delete": "{{doc-log-action-filter-action|pagetranslation|delete}}",
+ "log-action-filter-pagetranslation-encourage": "{{doc-log-action-filter-action|pagetranslation|encourage}}",
+ "log-action-filter-pagetranslation-discourage": "{{doc-log-action-filter-action|pagetranslation|discourage}}",
+ "log-action-filter-pagetranslation-prioritylanguages": "{{doc-log-action-filter-action|pagetranslation|prioritylanguages}}",
+ "log-action-filter-pagetranslation-aggregategroups": "{{doc-log-action-filter-action|pagetranslation|aggregategroups}}",
+ "log-description-messagebundle": "Description of a log type on [[Special:Log/messagebundle]]",
+ "log-name-messagebundle": "{{doc-logpage}}",
+ "logentry-messagebundle-moveok": "{{logentry|[[Special:Log/messagebundle]]}}",
+ "logentry-messagebundle-movenok": "{{logentry|[[Special:Log/messagebundle]]}}",
+ "logentry-messagebundle-deletefok": "{{logentry|[[Special:Log/messagebundle]]}}",
+ "logentry-messagebundle-deletefnok": "{{logentry|[[Special:Log/messagebundle]]}}",
+ "log-action-filter-messagebundle": "{{Doc-log-action-filter-type|messagebundle}}\n{{Identical|Type of action}}\n{{Related|Log-action-filter}}",
+ "log-action-filter-messagebundle-move": "{{doc-log-action-filter-action|messagebundle|move}}",
+ "log-action-filter-messagebundle-delete": "{{doc-log-action-filter-action|messagebundle|delete}}",
+ "pt-movepage-title": "Used as page title when moving a translatable page.\n\nSee definition on [[mw:Help:Extension:Translate/Glossary]].\n\nParameters:\n* $1 - old page title",
+ "pt-movepage-messagebundle-title": "Used as page title when moving a message bundle.\n\nSee definition on [[mw:Help:Extension:Translate/Glossary]].\n\nParameters:\n* $1 - old page title",
+ "pt-movepage-blockers": "See definition on [[mw:Help:Extension:Translate/Glossary]].\n\nFollowed by any of the following error messages:\n* {{msg-mw|Pt-movepage-block-base-invalid}}\n* {{msg-mw|Pt-movepage-block-tp-invalid}}\n* {{msg-mw|Pt-movepage-block-section-invalid}}\n* {{msg-mw|Pt-movepage-block-subpage-invalid}}\n\nParameters:\n* $1 - number of error messages",
+ "pt-movepage-block-base-invalid": "The \"target page\" is the new title of the translatable page, see definition on [[mw:Help:Extension:Translate/Glossary]].",
+ "pt-movepage-block-tp-invalid": "This message may mean:\n* The user tried to move the page \"[[:$1]]\" to a new page title.\n* If successful, the page, along with the translation units will be moved to the target pages.\n* But the destination page title for the translation page would be invalid (too long?).\n\nSee definition on [[mw:Help:Extension:Translate/Glossary]].\n\nParameters:\n* $1 - old page title (translatable page title)\n{{Related|Pt-movepage-block-invalid}}",
+ "pt-movepage-block-section-invalid": "This message may mean:\n* The user tried to move the page \"[[:$1]]\" to a new page title.\n* If successful, the page, along with the translation units will be moved to the target pages.\n* But the destination page title for the translation unit would be invalid (too long?).\nParameters:\n* $1 - old page title (translatable page title)\n{{Related|Pt-movepage-block-invalid}}",
+ "pt-movepage-block-subpage-invalid": "This message may mean:\n* The user tried to move the page \"[[:$1]]\" to a new page title.\n* If successful, the page, along with the translation units will be moved to the target pages.\n* But the destination subpage title for the translation unit would be invalid (too long?).\nParameters:\n* $1 - old page title (translatable page title)\n{{Related|Pt-movepage-block-invalid}}",
+ "pt-movepage-block-talkpage-invalid": "Error message to indicate that the target talk page title would be invalid due to its length.\n\nParameters:\n* $1 - Target talk page name",
+ "pt-movepage-block-unknown-page": "Error message displayed to the user if they try to move a page that is not related to the translatable page being moved.\n\nParameters:\n* $1 - The page being moved",
+ "pt-movepage-block-ns-talk-unsupported": "Error message displayed to the user if there are talk pages to move, and the namespace of the target page does not support talk pages.\n\nParameters:\n* $1 - The talk page being moved",
+ "pt-movepage-block-rename-failed": "Error message displayed to the user when generating of the new target page fails.\n\nParameters:\n* $1 - The page being moved",
+ "pt-movepage-list-pages": "Used as section header.\n\nSee definition on [[mw:Help:Extension:Translate/Glossary]].\n\nParameters:\n* $1 - (Unused) number of old pages to move\n{{Related|Pt-movepage-list}}",
+ "pt-movepage-list-translation": "Used as section header.\n\nSee definition on [[mw:Help:Extension:Translate/Glossary]].\n\nParameters:\n* $1 - number of translation pages\n{{Related|Pt-movepage-list}}",
+ "pt-movepage-list-section": "Used as section header.\n\nSee definition on [[mw:Help:Extension:Translate/Glossary]].\n\nParameters:\n* $1 - number of translation unit pages (section pages)\n{{Related|Pt-movepage-list}}",
+ "pt-movepage-list-translatable": "Used as a section header.\n\nParameters:\n* $1 - number of pages",
+ "pt-movepage-list-translatable-note": "Appears below the section header {{msg-mw|pt-movepage-list-translatable}}",
+ "pt-movepage-list-other": "Header of a list of additional subpages (other than translation pages) of the translatable page being moved, when the user selected the option to move subpages as well.\n\nSee definition on [[mw:Help:Extension:Translate/Glossary]].\n\nParameters:\n* $1 - number of subpages\n{{Related|Pt-movepage-list}}",
+ "pt-movepage-list-count": "Used to indicate how many pages will be moved.\n\nParameters:\n* $1 - Total number of pages\n* $2 - Number of subpages\n* $3 - Number of talk pages\nSee also:\n* {{msg-mw|Pt-deletepage-list-count}}",
+ "pt-movepage-page-count-limit": "Warning shown to the user when they try to move a large number of pages and the operation is not supported by the wiki. \n\nParameters:\n* $1 - Number of pages being moved",
+ "pt-movepage-list-no-pages": "Message used to indicate that there are no pages under a given section. Appears below {{msg-mw|pt-movepage-list-section}}.",
+ "pt-movepage-legend": "See definition on [[mw:Help:Extension:Translate/Glossary]].",
+ "pt-movepage-messagebundle-legend": "Fieldset legend displayed when moving message bundle. See definition on [[mw:Help:Extension:Translate/Glossary]].",
+ "pt-movepage-current": "Label followed by name of a translatable page section (the thing inside <!-- T:[name] --> if you edit the translatable page source.",
+ "pt-movepage-new": "{{Identical|New name}}",
+ "pt-movepage-reason": "{{Identical|Reason}}",
+ "pt-movepage-subpages": "Checkbox label when moving a translatable page.",
+ "pt-movepage-talkpages": "Checkbox label when moving a translatable page.",
+ "pt-movepage-talkpage-exists": "Label next to pages being moved if they have talk pages",
+ "pt-movepage-action-check": "Button text when moving a translatable page. Without checking you cannot do the move.",
+ "pt-movepage-action-perform": "Button text to execute moving of a translatable page (including various related subpages and translation units.",
+ "pt-movepage-action-other": "Button label on the special page 'Move translateable page'. See [[mw:File:Translate_manual_-_Page_example_-_21._Move_confirm.png|screenshot]].",
+ "pt-movepage-intro": "See definitions on [[mw:Help:Extension:Translate/Glossary]].\n\nParameters:\n* $1 - Link to the log page",
+ "pt-movepage-logreason": "Used as summary.\n\nSee definition on [[mw:Help:Extension:Translate/Glossary]].\n\nParameters:\n* $1 - translatable bundle title",
+ "pt-movepage-started": "Confirmation message after a move of a translatable page has been started. \n\nParameters:\n* $1 - Link to the log page",
+ "pt-movepage-error-placeholder": "{{notranslate}}",
+ "pt-locked-page": "See definition on [[mw:Help:Extension:Translate/Glossary]].",
+ "pt-deletepage-lang-title": "Used as page title. Parameters:\n* $1 - page title\n\nSee definition on [[mw:Help:Extension:Translate/Glossary]].\n\nSee also:\n* {{msg-mw|Pt-deletepage-tp-title}}, {{msg-mw|Pt-deletepage-mb-title}}",
+ "pt-deletepage-tp-title": "Used as page title. Parameters:\n* $1 - page title\n\nSee definition on [[mw:Help:Extension:Translate/Glossary]].\n\nSee also:\n* {{msg-mw|Pt-deletepage-lang-title}}, {{msg-mw|Pt-deletepage-mb-title}}",
+ "pt-deletepage-mb-title": "Used as page title. Parameters:\n* $1 - page title\n\nSee definition on [[mw:Help:Extension:Translate/Glossary]].\n\nSee also:\n* {{msg-mw|Pt-deletepage-lang-title}}, {{msg-mw|Pt-deletepage-tp-title}}",
+ "pt-deletepage-invalid-title": "Error message when trying to delete a translation page or translatable page.",
+ "pt-deletepage-invalid-text": "See definition on [[mw:Help:Extension:Translate/Glossary]].",
+ "pt-deletepage-action-check": "This is a button label. \"List\" is an imperative verb.",
+ "pt-deletepage-action-perform": "Submit button on special page 'Deleting translatable page'. See [[mw:File:Translate_manual_-_Page_example_-_25._Delete_confirm.png|screenshot]].\n\ni think it's mean delete right now.",
+ "pt-deletepage-action-other": "Button label on the special page 'Deleting translatable page'. See [[mw:File:Translate_manual_-_Page_example_-_25._Delete_confirm.png|screenshot]].",
+ "pt-deletepage-lang-legend": "See definition on [[mw:Help:Extension:Translate/Glossary]].",
+ "pt-deletepage-tp-legend": "See definition on [[mw:Help:Extension:Translate/Glossary]].",
+ "pt-deletepage-mb-legend": "See definition on [[mw:Help:Extension:Translate/Glossary]].",
+ "pt-deletepage-any-legend": "See definitions on [[mw:Help:Extension:Translate/Glossary]].",
+ "pt-deletepage-current": "{{Identical|Page name}}",
+ "pt-deletepage-reason": "{{Identical|Reason}}",
+ "pt-deletepage-reason-details": "Used as a form text input header on the translatable page deletion from.",
+ "pt-deletepage-reason-other": "Used as a dropdown item on the translatable page deletion from.",
+ "pt-deletepage-subpages": "Checkbox label on special page 'Deleting translatable page'. see [[mw:File:Translate_manual_-_Page_example_-_25._Delete_confirm.png|screenshot]].",
+ "pt-deletepage-list-pages": "Heading for a list.",
+ "pt-deletepage-list-translation": "See definition on [[mw:Help:Extension:Translate/Glossary]].",
+ "pt-deletepage-list-section": "Heading in special page 'Deleting translatable page'. See [[mw:File:Translate_manual_-_Page_example_-_25._Delete_confirm.png|screenshot]].",
+ "pt-deletepage-list-other": "Heading for a list.",
+ "pt-deletepage-list-count": "Used to indicate how many pages will be deleted.\n\nParameters:\n* $1 - number of pages\n* $2 - Number of subpages\nSee also:\n* {{msg-mw|Pt-movepage-list-count}}",
+ "pt-deletepage-list-no-pages": "Message used to indicate that there are no pages under a given section. Appears below {{msg-mw|pt-deletepage-list-section}}",
+ "pt-deletepage-full-logreason": "Used as summary.\n\nSee definition on [[mw:Help:Extension:Translate/Glossary]].\n\nParameters:\n* $1 - translatable-page title\nSee also:\n* {{msg-mw|Pt-deletepage-lang-logreason}}",
+ "pt-deletepage-lang-logreason": "Used as summary.\n\nSee definition on [[mw:Help:Extension:Translate/Glossary]].\n\nParameters:\n* $1 - translation-page title\nSee also:\n* {{msg-mw|Pt-deletepage-full-logreason}}",
+ "pt-deletepage-started": "Confirmation message after a deletion of a translatable page, message bundle or a translation page has been started.\n\nParameters:\n* $1 - the translatable bundle being moved. See definition on [[mw:Help:Extension:Translate/Glossary]]",
+ "pt-deletepage-intro": "Help message when deleting a translatable page or a translation page.\n\nParameters:\n* $1 - link to the log page",
+ "pagemigration": "{{doc-special|PageMigration}}\nSee the [[mw:Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#migration|page migration help]] for more information.",
+ "pagemigration-summary": "Description appearing on top of [[Special:PageMigration]].",
+ "pm-import-button-label": "Used as label for the \"Import\" button.\n{{Identical|Import}}",
+ "pm-savepages-button-label": "Used as label for the \"Save pages\" button.\n{{Identical|Save}}",
+ "pm-cancel-button-label": "Label for button to cancel the imports and clear the window.\n{{Identical|Cancel}}",
+ "pm-page-does-not-exist": "Parameters:\n* $1 - page title",
+ "pm-old-translations-missing": "Parameters:\n* $1 - page title",
+ "pm-extra-units-warning": "Warning given when number of translation units are greater than the number of source units",
+ "pm-pagename-missing": "Error message given when page title field does not contain a base page name.",
+ "pm-add-icon-hover-text": "Hover text for add new unit icon",
+ "pm-swap-icon-hover-text": "Hover text for the icon on Special:PageMigration which, when clicked, swaps a unit (text area) with the unit below.",
+ "pm-delete-icon-hover-text": "Hover text for delete unit icon",
+ "pm-pagetitle-placeholder": "Placeholder for the page title input field.",
+ "pm-pagetitle-invalid": "Error message given when an invalid page title is entered. You should translate page example (“de” is a language code, you must keep a language code in your translation); you can localize quotes but you must keep the middle slash <code>/</code>.",
+ "pm-pagetitle-missing": "Error message given when page title field is blank",
+ "pm-langcode-missing": "Error message given when the page title field does not contain a language code.",
+ "pm-summary-import": "Edit summary used while creating translation pages which were imported using [[Special:PageMigration]], see [[mw:Help:Extension:Translate/Page_translation_administration#Migrating to page translation]]",
+ "pm-on-import-message-text": "Message shown at Special:PageMigration after importing the translations",
+ "pm-on-save-message-text": "Message shown at Special:PageMigration after saving the translation units",
+ "pm-pagetitle-not-translatable": "Error message shown when a non translatable page title is entered\n\nParameters:\n* $1 - page title",
+ "pm-translation-unit-fetch-failed": "Error message shown at Special:PageMigration when fetching the translation unit fails",
+ "tpt-translate-title": "Checkbox on Special:PageTranslation to mark title for translation",
+ "pp-save-summary": "Edit summary for saving a page prepared for translation by the tool",
+ "pagepreparation": "{{doc-special|PageMigration}}",
+ "pagepreparation-summary": "Description appearing on top of [[Special:PagePreparation]].",
+ "pp-pagename-placeholder": "Placeholder for the pagename input field.",
+ "pp-prepare-button-label": "Used as label for the \"Prepare\" button.\n{{Identical|Prepare}}",
+ "pp-save-button-label": "Used as label for the \"Save\" button.\n{{Identical|Save}}",
+ "pp-cancel-button-label": "Used as label for the \"Cancel\" button.\n{{Identical|Cancel}}",
+ "pp-save-message": "Message shown after the page is saved with the prepared text. Parameters:\n* $1 - a link to edit the page",
+ "pp-prepare-message": "Info message shown after the page is prepared for translation",
+ "pp-already-prepared-message": "Info message shown if the page is already prepared for translation",
+ "pp-diff-error": "Error message show on the Special:PagePreparation when there is an error fetching the diff from the server.",
+ "pp-pagename-missing": "Error message given when page title field is blank",
+ "pp-diff-old-header": "Header text for old revision for the diff shown at Special:PagePreparation",
+ "pp-diff-new-header": "Header text for new revision for the diff shown at Special:PagePreparation",
+ "tpt-unlink-confirm": "Confirmation message shown to user when unmarking page in active translation.",
+ "tpt-unlink-button": "Button text",
+ "tpt-unlink-summary": "Edit summary",
+ "tpt-generic-confirm": "Confirmation message shown to user on Special:PageTranslation. Mostly shown to users without JavaScript.",
+ "tpt-generic-button": "Button text message shown to user on Special:PageTranslation. Mostly shown to users without JavaScript.\n{{Identical|Confirm}}",
+ "tpt-validation-not-insertable": "Warning shown on Special:PageTranslation when translation variable names contain characters that do not work as an insertable in the translation interface",
+ "tpt-validation-name-reuse": "Error shown on Special:PageTranslation when translation variable is defined twice with same name but different content",
+ "visualeditor-annotations-translate-start": "Label of the context item for an opening <nowiki><translate></nowiki> tag.",
+ "visualeditor-annotations-translate-end": "Label of the context item for a closing <nowiki><translate></nowiki> tag.",
+ "visualeditor-annotations-translate-description": "Additional explanation for a pair of <nowiki><translate></nowiki> tags.",
+ "visualeditor-annotations-tvar-start": "Label of the context item for an opening <nowiki><tvar></nowiki> tag.",
+ "visualeditor-annotations-tvar-end": "Label of the context item for a closing <nowiki><tvar></nowiki> tag.",
+ "visualeditor-annotations-tvar-description": "Additional explanation for a pair of <nowiki><tvar></nowiki> tags."
+}
diff --git a/Translate/i18n/pagetranslation/qu.json b/Translate/i18n/pagetranslation/qu.json
new file mode 100644
index 00000000..f6247f0f
--- /dev/null
+++ b/Translate/i18n/pagetranslation/qu.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "AlimanRuna"
+ ]
+ },
+ "pagetranslation": "P'anqakunata t'ikray",
+ "tpt-languages-nonzero": "$1 ($2% t'ikrasqa)",
+ "pt-movepage-list-translation": "T'ikrasqa {{PLURAL:$1|p'anqa|p'anqakuna}}",
+ "pt-deletepage-list-translation": "T'ikray p'anqakuna"
+}
diff --git a/Translate/i18n/pagetranslation/rej.json b/Translate/i18n/pagetranslation/rej.json
new file mode 100644
index 00000000..3e90266b
--- /dev/null
+++ b/Translate/i18n/pagetranslation/rej.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "MFikriansori"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2 bi tnêrjêmêak)"
+}
diff --git a/Translate/i18n/pagetranslation/rm.json b/Translate/i18n/pagetranslation/rm.json
new file mode 100644
index 00000000..6ee9a347
--- /dev/null
+++ b/Translate/i18n/pagetranslation/rm.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gion-andri",
+ "Minisarm",
+ "Terfili"
+ ]
+ },
+ "pagetranslation": "Translaziun da paginas",
+ "tpt-diff-old": "Text precedent",
+ "tpt-diff-new": "Nov text",
+ "tpt-languages-legend": "Autras linguas:",
+ "tpt-languages-nonzero": "$1 ($2% translatà)"
+}
diff --git a/Translate/i18n/pagetranslation/rmc.json b/Translate/i18n/pagetranslation/rmc.json
new file mode 100644
index 00000000..b8c2ef32
--- /dev/null
+++ b/Translate/i18n/pagetranslation/rmc.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Adehertogh"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% prethodo)"
+}
diff --git a/Translate/i18n/pagetranslation/ro.json b/Translate/i18n/pagetranslation/ro.json
new file mode 100644
index 00000000..8bd8a2d8
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ro.json
@@ -0,0 +1,97 @@
+{
+ "@metadata": {
+ "authors": [
+ "Andrei Stroe",
+ "Firilacroco",
+ "KlaudiuMihaila",
+ "Minisarm",
+ "NGC 54",
+ "Stelistcristi",
+ "Strainu"
+ ]
+ },
+ "pagetranslation": "Traducere pagini",
+ "right-pagetranslation": "Marchează versiuni ale paginilor pentru a fi traduse",
+ "action-pagetranslation": "administrați paginile traductibile",
+ "tps-edit-sourcepage-ve-warning-button": "Bine",
+ "tpt-section": "Unitate de traducere $1",
+ "tpt-section-new": "Unitate de traducere nouă.\nNume: $1",
+ "tpt-section-deleted": "Unitate de traducere $1",
+ "tpt-diff-old": "Text precedent",
+ "tpt-diff-new": "Text nou",
+ "tpt-submit": "Marchează această versiune pentru traducere",
+ "tpt-sections-oldnew": "Unități de traducere noi și existente",
+ "tpt-sections-deleted": "Unități de traducere șterse",
+ "tpt-sections-template": "Format de pagină de traducere",
+ "tpt-action-nofuzzy": "Nu invalida traduceri",
+ "tpt-badtitle": "Numele de pagină dat ($1) nu este un titlu valid",
+ "tpt-nosuchpage": "Pagina $1 nu există",
+ "tpt-oldrevision": "$2 nu este cea mai recentă versiune a paginii [[:$1]].\nDoar cele mai recente versiuni pot fi marcate pentru traducere.",
+ "tpt-notsuitable": "Pagina $1 nu se califică pentru traducere.\nAsigurați-vă că are eticheta <nowiki><translate></nowiki> și are o sintaxă validă.",
+ "tpt-offer-notify": "Puteți <span class=\"plainlinks\">[$1 notifica traducătorii]</span> despre această pagină.",
+ "tpt-mark-summary": "Marcat această versiune pentru traducere",
+ "tpt-edit-failed": "Pagina nu a putut fi actualizată: $1",
+ "tpt-unmarked": "Pagina [[:$1]] nu mai este marcată pentru traducere.",
+ "tpt-list-nopages": "Nici o pagină nu este marcată pentru traducere sau gata să fie marcată pentru traducere.",
+ "tpt-new-pages-title": "Pagini propuse pentru traducere",
+ "tpt-old-pages-title": "Pagini în curs de traducere",
+ "tpt-other-pages-title": "Pagini eronate",
+ "tpt-old-pages": "Ultima versiune {{PLURAL:$1|a acestei pagini|a acestor pagini}} a fost marcată pentru traducere.",
+ "tpt-select-prioritylangs": "Listă de coduri de limbă prioritară separate prin virgulă:",
+ "tpt-select-prioritylangs-reason": "Motiv:",
+ "tpt-sections-prioritylangs": "Limbi prioritare",
+ "tpt-rev-mark": "marchează pentru traducere",
+ "tpt-rev-unmark": "șterge de la traducere",
+ "tpt-rev-discourage": "descurajare",
+ "tpt-rev-encourage": "restaurare",
+ "tpt-rev-mark-tooltip": "Marchează ultima versiune a acestei pagini pentru traducere.",
+ "tpt-rev-unmark-tooltip": "Elimină această pagină de la traducere.",
+ "tpt-rev-discourage-tooltip": "Descurajează traducerile ulterioare ale acestei pagini.",
+ "tpt-rev-encourage-tooltip": "Restaurează această pagină la traducerea normală.",
+ "translate-tag-translate-link-desc": "Tradu această pagină",
+ "translate-tag-markthis": "Marchează această pagină pentru traducere",
+ "tpt-translation-intro": "Această pagină reprezintă <span class=\"plainlinks\">[$1 versiunea tradusă]</span> a paginii [[$2]], procesul de traducere fiind completat în proporție de $3 %.",
+ "tpt-translation-intro-fuzzy": "Traducerile învechite sunt marcate în acest fel.",
+ "tpt-languages-legend": "Alte limbi:",
+ "tpt-languages-zero": "Începeți traducerea în această limbă",
+ "tpt-languages-nonzero": "$1 ($2% tradusă)",
+ "tpt-tab-translate": "Traducere",
+ "tpt-aggregategroup-add": "Adaugă",
+ "tpt-aggregategroup-save": "Salvează",
+ "tpt-aggregategroup-add-new": "Adaugă un grup de agregare nou",
+ "tpt-aggregategroup-new-name": "Nume:",
+ "tpt-aggregategroup-new-description": "Descriere (opțională):",
+ "tpt-aggregategroup-remove-confirm": "Sigur doriți să ștergeți acest grup de agregare?",
+ "tpt-aggregategroup-invalid-group": "Grupul nu există",
+ "log-name-pagetranslation": "Jurnal traducere pagini",
+ "pt-movepage-title": "Mută pagina traductibilă „$1”",
+ "pt-movepage-list-pages": "Listă de pagini de mutat",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Pagină|Pagini}} de traducere",
+ "pt-movepage-list-other": "{{PLURAL:$1|Altă subpagină|Alte subpagini}}",
+ "pt-movepage-list-count": "În total, $1 {{PLURAL:$1|pagină|pagini|de pagini}} de mutat și $2 {{PLURAL:$2|subpagină|subpagini|de subpagini}}.",
+ "pt-movepage-legend": "Mută pagina traductibilă",
+ "pt-movepage-current": "Nume actual:",
+ "pt-movepage-new": "Nume nou:",
+ "pt-movepage-reason": "Motiv:",
+ "pt-movepage-subpages": "Redenumește toate subpaginile",
+ "pt-movepage-action-check": "Verifică dacă modificarea este posibilă",
+ "pt-movepage-action-perform": "Redenumește",
+ "pt-movepage-action-other": "Schimbă ținta",
+ "pt-movepage-logreason": "Parte a paginii traductibile „$1”.",
+ "pt-deletepage-invalid-title": "Pagina specificată nu este validă.",
+ "pt-deletepage-action-perform": "Efectuați ștergerea",
+ "pt-deletepage-action-other": "Schimbați ținta",
+ "pt-deletepage-lang-legend": "Șterge pagina traducerii",
+ "pt-deletepage-tp-legend": "Șterge pagina traductibilă",
+ "pt-deletepage-any-legend": "Șterge pagina traductibilă sau pagina de traducere",
+ "pt-deletepage-current": "Numele paginii:",
+ "pt-deletepage-reason": "Motiv:",
+ "pt-deletepage-subpages": "Ștergeți toate subpaginile",
+ "pt-deletepage-list-pages": "Listă de pagini de șters",
+ "pt-deletepage-list-translation": "Pagini de traducere",
+ "pt-deletepage-list-other": "Alte subpagini",
+ "pt-deletepage-list-count": "În total, $1 {{PLURAL:$1|pagină|pagini|de pagini}} de șters și $2 {{PLURAL:$2|subpagină|subpagini|de subpagini}}.",
+ "pt-deletepage-full-logreason": "Parte a paginii traductibile „$1”.",
+ "pt-deletepage-lang-logreason": "Parte a paginii de traducere „$1”.",
+ "tpt-generic-button": "Confirmare"
+}
diff --git a/Translate/i18n/pagetranslation/roa-tara.json b/Translate/i18n/pagetranslation/roa-tara.json
new file mode 100644
index 00000000..78ce4636
--- /dev/null
+++ b/Translate/i18n/pagetranslation/roa-tara.json
@@ -0,0 +1,118 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joetaras"
+ ]
+ },
+ "pagetranslation": "Pàgene de traduzione",
+ "right-pagetranslation": "Signe le revisiune de le pàggene pe traduzione",
+ "action-pagetranslation": "gestisce le pàggene traducibbele",
+ "tps-edit-sourcepage-ve-warning-title": "Attenziò: pàgene non supportate",
+ "tps-edit-sourcepage-ve-warning-button": "OK",
+ "tpt-section": "Aunità de traduzione $1",
+ "tpt-section-new": "Nova unità de traduzione.\nNome: $1",
+ "tpt-section-deleted": "Unità de traduzione $1",
+ "tpt-diff-old": "Teste precedende",
+ "tpt-diff-new": "Teste nuève",
+ "tpt-submit": "Signe sta versione pa traduzione",
+ "tpt-sections-oldnew": "Aunità de traduzione nuève e esistende",
+ "tpt-sections-deleted": "Aunità de traduziune scangellate",
+ "tpt-sections-template": "Tempalte d'a pàgene de traduzione",
+ "tpt-action-nofuzzy": "Nò invalidà le traduziune",
+ "tpt-badtitle": "'U nome d'a pàgene date ($1) non g'è 'nu titole valide",
+ "tpt-nosuchpage": "Pàgene $1 non g'esiste",
+ "tpt-oldrevision": "$2 non g'è l'urtema versione d'a pàgene [[:$1]].\nSulamende le urteme versiune ponne essere signate pa traduzione.",
+ "tpt-mark-summary": "Signate sta versione pa traduzione",
+ "tpt-edit-failed": "Non ge pozze aggiornà 'a pàgene: $1",
+ "tpt-duplicate": "'U nome $1 de l'aunità de traduzione ha state ausate cchiù de 'na vote.",
+ "tpt-unmarked": "Pàggene [[:$1]] non g'è cchiù signate pa traduzione.",
+ "tpt-new-pages-title": "Pàggene proposte pa traduzione",
+ "tpt-old-pages-title": "Pàggene in traduzione",
+ "tpt-other-pages-title": "Pàggene scuasciate",
+ "tpt-select-prioritylangs-reason": "Mutive:",
+ "tpt-sections-prioritylangs": "Lènghe cu priorità",
+ "tpt-rev-mark": "signe da traducere",
+ "tpt-rev-unmark": "live da 'a traduzione",
+ "tpt-rev-discourage": "scoragge",
+ "tpt-rev-encourage": "repristine",
+ "translate-tag-translate-link-desc": "Traduce sta vosce",
+ "translate-tag-markthis": "Signe sta pàgene pa traduzione",
+ "tpt-languages-legend": "Otre lènghe:",
+ "tpt-languages-separator": "&#160;•&#32;",
+ "tpt-languages-zero": "Accuminze 'a traduzione pe sta lènghe",
+ "tpt-languages-nonzero": "$1 ($2% tradotte)",
+ "tpt-tab-translate": "Traduce",
+ "tpt-discouraged-language-force-header": "Sta pàgene non ge pò essere tradotte jndr'à $1.",
+ "aggregategroups": "Gruppe aggregate",
+ "tpt-aggregategroup-add": "Aggiunge",
+ "tpt-aggregategroup-save": "Reggìstre",
+ "tpt-aggregategroup-add-new": "Aggiunge 'nu gruppe aggregate",
+ "tpt-aggregategroup-new-name": "Nome:",
+ "tpt-aggregategroup-new-description": "Descrizione (opzionale):",
+ "tpt-aggregategroup-remove-confirm": "Sì secure ca vuè ccu scangille stu gruppe aggregate?",
+ "tpt-aggregategroup-invalid-group": "'U gruppe non g'esiste",
+ "tpt-aggregategroup-edit-name": "Nome:",
+ "tpt-aggregategroup-edit-description": "Descrizione:",
+ "tpt-aggregategroup-update": "Reggìstre",
+ "tpt-aggregategroup-update-cancel": "Annulle",
+ "tpt-invalid-group": "Gruppe invalide",
+ "log-description-pagetranslation": "Archivije pe le aziune collegate a 'u sisteme de traduzione d'a pàgene",
+ "log-name-pagetranslation": "Archivije de le traduziune de le pàggene",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|ave signate}} $3 pa traduzione",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|ave luate}} $3 da 'u sisteme de traduzione",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|ave combletate}} 'u spustamende d'a pàgene traducibbile $3 sus a $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|ave acchiate}} 'nu probleme mendre ca ste spustave 'a pàgene $3 sus a $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|ave combletate}} 'a scangellazione d'a pàgene traducibbile $3",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|ha sciute a male}} 'a scangellazione de $3 ca appartene 'a pàgene traducibbile $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|ave combletate}} 'a scangellazione d'a pàgene traducibbile $3",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|ha sciute a male}} 'a scangellazione de $3 ca appartene 'a pàgene traducibbile $4",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|'ngoragge}} 'a traduzione de $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|scoragge}} 'a traduzione de $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|ave luate}} le lènghe prioritarie da 'a pàgene traducibbile $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|ave mise}} le lènghe prioritarie da 'a pàgene traducibbile $3 sus a $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|ave limitate}} le lènghe pa pàgene traducibbile $3 sus a $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|ave mise}} 'a pàgene traducibbile $3 jndr'à 'u gruppe aggregate $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|ave luate}} 'a pàgene traducibbile $3 da 'u gruppe aggregate $4",
+ "log-action-filter-pagetranslation": "Tipe de azione:",
+ "log-action-filter-pagetranslation-mark": "Signe da traducere",
+ "log-action-filter-pagetranslation-unmark": "Live da 'a traduzione",
+ "log-action-filter-pagetranslation-move": "Spustaminde d'a pàgene",
+ "log-action-filter-pagetranslation-delete": "Scangellazziune d'a pàgene",
+ "log-action-filter-pagetranslation-encourage": "'Ngoraggiamende a 'a traduzione",
+ "log-action-filter-pagetranslation-discourage": "Scoraggiamende a 'a traduzione",
+ "log-action-filter-pagetranslation-prioritylanguages": "Cangiamende a le lènghe prioritarie",
+ "log-action-filter-pagetranslation-aggregategroups": "Cangiaminde a le gruppe aggregate",
+ "pt-movepage-title": "Spuèste 'a pàgene traducibbile \"$1\"",
+ "pt-movepage-list-pages": "Elenghe de le pàggene da spustà",
+ "pt-movepage-list-count": "In totale $1 {{PLURAL:$1|pàgene|pàggene}} tènene $2 {{PLURAL:$2|sottepàgene|sottepàggene}} e $3 {{PLURAL:$3|pàgene de 'ngazzamiende|pàggene de 'ngazzamiende}} da spustà.",
+ "pt-movepage-list-no-pages": "Nisciuna pàgene acchiate.",
+ "pt-movepage-legend": "Spuèste 'a pàgene traducibbile",
+ "pt-movepage-current": "Nome de mò:",
+ "pt-movepage-new": "Nome nuève:",
+ "pt-movepage-reason": "Mutive:",
+ "pt-movepage-subpages": "Spuèste tutte le sottopàggene",
+ "pt-movepage-action-perform": "Fà 'u spostamende",
+ "pt-movepage-action-other": "Cange 'a destinazione",
+ "pt-deletepage-action-other": "Cange 'a destinazione",
+ "pt-deletepage-lang-legend": "Scangille 'a pàgene de traduzione",
+ "pt-deletepage-tp-legend": "Scangille 'a pàgene traducibbele",
+ "pt-deletepage-current": "Nome d'a pàgene:",
+ "pt-deletepage-reason": "Mutive:",
+ "pt-deletepage-subpages": "Scangille tutte le sottopàggene",
+ "pt-deletepage-list-pages": "Elenghe de le pàggene da scangellà",
+ "pt-deletepage-list-translation": "Pàggene de traduzione",
+ "pt-deletepage-list-other": "Otre sottopàggene",
+ "pt-deletepage-list-no-pages": "Nisciuna pàgene acchiate.",
+ "pm-import-button-label": "'Mborte",
+ "pm-savepages-button-label": "Reggìstre",
+ "pm-cancel-button-label": "Annulle",
+ "pm-page-does-not-exist": "$1 non g'esiste.",
+ "pm-old-translations-missing": "$1 non ge tène traduziune vicchie.",
+ "pm-delete-icon-hover-text": "Scangìlle l'aunità",
+ "pm-pagetitle-placeholder": "Mitte 'u titole d'a pàgene",
+ "pm-pagetitle-missing": "Pe piacere mitte 'u titole d'a vôsce.",
+ "pp-save-button-label": "Pubbleche",
+ "pp-cancel-button-label": "Annulle",
+ "pp-save-message": "'A pàgene ha state pubblecate. Puè [$1 cangiarle].",
+ "tpt-generic-button": "Conferme"
+}
diff --git a/Translate/i18n/pagetranslation/ru.json b/Translate/i18n/pagetranslation/ru.json
new file mode 100644
index 00000000..ee56d314
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ru.json
@@ -0,0 +1,290 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "Askarmuk",
+ "DDPAT",
+ "DR",
+ "Eugrus",
+ "Express2000",
+ "Facenapalm",
+ "Ferrer",
+ "G0rn",
+ "Grigol",
+ "Hypers",
+ "Ice bulldog",
+ "KPu3uC B Poccuu",
+ "Kaganer",
+ "Kareyac",
+ "Lockal",
+ "Lopusanski",
+ "Mailman",
+ "Movses",
+ "NR Deblocked",
+ "Okras",
+ "Pacha Tchernof",
+ "Purodha",
+ "Vlad5250",
+ "WindEwriX",
+ "Александр Сигачёв"
+ ]
+ },
+ "pagetranslation": "Перевод страниц",
+ "nstab-translations": "Единица перевода",
+ "right-pagetranslation": "Отметка версий страниц для перевода",
+ "action-pagetranslation": "управлять переводимыми страницами",
+ "tps-edit-sourcepage-text": "Вы редактируете исходный код переводимой страницы. Пожалуйста, предварительно ознакомьтесь со следующей документацией:\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text Правка исходного кода]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Markup_examples Пример используемой разметки]",
+ "tps-edit-sourcepage-ve-warning-limited-text": "Некоторые переводимые области могут быть нередактируемы через этот редактор. Пожалуйста, воспользуйтесь редакторов вики-текста, чтобы отредактировать это.",
+ "tps-edit-sourcepage-ve-warning-title": "Внимание: Неподдерживаемая страница",
+ "tps-edit-sourcepage-ve-warning-text": "Вы редактируете переводимую страницу. Её редактирование в этом редакторе пока ещё официально не поддерживается. Пожалуйста, используйте редактор исходного кода.",
+ "tps-edit-sourcepage-ve-warning-button": "OK",
+ "tpt-section": "Блок перевода $1",
+ "tpt-section-new": "Новый блок перевода. Название: $1",
+ "tpt-section-deleted": "Блок перевода $1",
+ "tpt-diff-old": "Предыдущий текст",
+ "tpt-diff-new": "Новый текст",
+ "tpt-submit": "Отметить эту версию для перевода",
+ "tpt-sections-oldnew": "Новые и существующие элементы перевода",
+ "tpt-sections-deleted": "Удалённые элементы перевода",
+ "tpt-sections-template": "Шаблон страницы перевода",
+ "tpt-action-nofuzzy": "Не помечать переводы как устаревшие",
+ "tpt-badtitle": "Указано недопустимое название страницы ($1)",
+ "tpt-nosuchpage": "Страница «$1» не существует.",
+ "tpt-oldrevision": "$2 — не последняя версия страницы [[:$1]].\nТолько последние версии могут быть отмечены для перевода.",
+ "tpt-notsuitable": "Страница $1 не подходит для перевода.\nУбедитесь, что она содержит теги $2 и действительный синтаксис.",
+ "tpt-saveok": "Страница [[:$1]] была отмечена для перевода, она содержит $2 {{PLURAL:$2|блок перевода|блока перевода|блоков переводов}}.\nТеперь страницу можно <span class=\"plainlinks\">[$3 переводить]</span>.",
+ "tpt-saveok-first": "Вы можете [[Special:PageMigration|импортировать существующий перевод]] этой страницы.",
+ "tpt-offer-notify": "Вы можете <span class=\"plainlinks\">[$1 уведомить переводчиков]</span> об этой странице.",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|Посмотреть список переводимых страниц]].",
+ "tpt-showpage-intro": "Ниже приведены новые, существующие и удалённые разделы.\nПрежде чем пометить эту версию как доступную для перевода, убедитесь, что изменения в переводимых элементах будут минимальны, чтобы минимизировать объём ненужной работы переводчикам.",
+ "tpt-mark-summary": "Отметить эту версию для перевода",
+ "tpt-mark-nochanges": "Не внесено никаких изменений. Отметка этой страницы для перевода не отредактирует ни эту страницу, ни любые существующие элементы перевода.",
+ "tpt-edit-failed": "Невозможно обновить эту страницу: $1",
+ "tpt-duplicate": "Перевод элемента с названием $1 используется более одного раза.",
+ "tpt-invalid": "Блок перевода $1 не должен содержать знак подчёркивания или косую черту.",
+ "tpt-unmarked": "Страница [[:$1]] больше не отмечена для перевода.",
+ "tpt-list-nopages": "Нет страниц, отмеченных для перевода, а также нет страниц готовых к отметке.",
+ "tpt-new-pages-title": "Страницы, предложенные к переводу",
+ "tpt-old-pages-title": "Страницы в переводе",
+ "tpt-other-pages-title": "Повреждённые страницы",
+ "tpt-outdated-pages-title": "Страницы с непроверенными изменениями",
+ "tpt-new-pages": "{{PLURAL:$1|1=Эта страница содержит|Эти страницы содержат}} текст с тегами перевода, но ни одна из версий {{PLURAL:$1|1=этой страницы|этих страниц}} не отмечена для перевода.",
+ "tpt-old-pages": "Последняя версия {{PLURAL:$1|1=этой страницы|этих страниц}} была отмечена для перевода.",
+ "tpt-other-pages": "{{PLURAL:$1|1=Старая версия этой страницы отмечена|Старые версии этих страниц отмечены}} для перевода,\nно последняя версия не может быть отмечена для перевода.",
+ "tpt-outdated-pages": "На {{PLURAL:$1|этой странице|этих страницах}} есть изменения, не отмеченные для перевода.",
+ "tpt-tag-discouraged": "исключено",
+ "tpt-tag-oldsyntax": "старый синтаксис",
+ "tpt-tag-no-transclusion-support": "без поддержки раскрытия (трансклюзии) шаблонов",
+ "tpt-select-prioritylangs": "Предпочитаемые языки (коды языков, разделенные запятой):",
+ "tpt-select-prioritylangs-force": "Предотвратить переводы на другие языки, помимо приоритетных",
+ "tpt-select-prioritylangs-reason": "Причина:",
+ "tpt-sections-prioritylangs": "Приоритетные языки",
+ "tpt-sections-syntaxversion": "Версия синтаксиса",
+ "tpt-syntaxversion-text": "В настоящее время на этой странице используется старая версия синтаксиса исходного кода переводимой страницы. В новой версии непереведённые разделы будут обернуты HTML-тегом для указания правильного языка текста. Пример: $1. Вы можете использовать новый синтаксис разметки $2, чтобы предотвратить любой вид переноса в местах, где это неуместно, например, при переводе атрибута элемента <code>заголовок</code>. Вернуться к старой версии синтаксиса будет уже невозможно.",
+ "tpt-syntaxversion-label": "Использовать для этой страницы последнюю версию синтаксиса",
+ "tpt-transclusion": "Раскрытие шаблонов",
+ "tpt-transclusion-label": "Включить для этой страницы возможность раскрытия (трансклюзии) шаблонов с учётом перевода",
+ "tpt-rev-mark": "пометить для перевода",
+ "tpt-rev-unmark": "убрать из перевода",
+ "tpt-rev-discourage": "исключить",
+ "tpt-rev-encourage": "восстановить",
+ "tpt-rev-mark-tooltip": "Отметить последнюю версию этой страницы для перевода.",
+ "tpt-rev-unmark-tooltip": "Исключить эту страницу из перевода.",
+ "tpt-rev-discourage-tooltip": "Предотвратить дальнейшие переводы на этой странице.",
+ "tpt-rev-encourage-tooltip": "Восстановить эту страницу для обычного перевода.",
+ "translate-tag-translate-link-desc": "Перевести эту страницу",
+ "translate-tag-markthis": "Отметить эту страницу для перевода",
+ "translate-tag-markthisagain": "Эта страница была <span class=\"plainlinks\">[$1 изменена]</span> с момента последней <span class=\"plainlinks\">[$2 отметки о переводе]</span>.",
+ "translate-tag-hasnew": "на этой странице были произведены <span class=\"plainlinks\">[$1 изменения]</span>, не отмеченные для перевода.",
+ "tpt-translation-intro": "Это <span class=\"plainlinks\">[$1 перевод]</span> страницы [[$2]], он готов на $3%.",
+ "tpt-translation-intro-fuzzy": "Таким образом помечены устаревшие переводы.",
+ "tpt-languages-legend": "Другие языки:",
+ "tpt-languages-separator": "&#160;•&#32;",
+ "tpt-languages-zero": "Начать перевод на этот язык",
+ "tpt-languages-nonzero": "$1 ($2% переведено)",
+ "tpt-tab-translate": "Перевести",
+ "tpt-target-page": "Эта страница не может быть обновлена вручную.\nЭто перевод страницы [[$1]], перевод может быть обновлён с помощью специального [$2 инструмента перевода].",
+ "tpt-unknown-page": "Это пространство имён зарезервировано для переводов текстов страниц.\nСтраница, которую вы пытаетесь изменить, не соответствует какой-либо странице, отмеченной для перевода.",
+ "tpt-translation-restricted": "Перевод этой страницы на данный язык был предотвращен администратором перевода.\n\n\nПричина: $1",
+ "tpt-translation-restricted-no-reason": "Перевод этой страницы на данный язык был предотвращен администратором перевода.",
+ "tpt-discouraged-language-force-header": "Эта страница не может быть переведена на $1.",
+ "tpt-discouraged-language-force-content": "Администратор переводов решил, что эта страница может быть переведена только на $1.",
+ "tpt-discouraged-language-header": "Язык «$1» не включён в список приоритетных для перевода этой страницы.",
+ "tpt-discouraged-language-content": "Администратор переводов решил сосредоточить усилия по переводу на $1.",
+ "tpt-discouraged-language-force": "<strong>Эта страница не может быть переведена на $2.</strong>\n\nАдминистратор перевода решил, что эта страница может быть переведена только на $3.",
+ "tpt-priority-languages": "Администратор перевода установил $1 в качестве приоритетного языка для этой группы.",
+ "tpt-priority-languages-force": "Администратор переводов установил в качестве приоритетных языков этой группы \"$1\". Перевод на иные языки не разрешён.",
+ "tpt-discouraged-translation-header": "Перевод этой страницы был остановлен",
+ "tpt-discouraged-translation-content": "Администратор перевода прекратил перевод этой страницы. Вы все еще можете перевести страницу, но переводы могут оказаться бесполезными.",
+ "tpt-render-summary": "Обновление для соответствия новой версии исходной страницы.",
+ "aggregategroups": "Агрегированные группы",
+ "tpt-aggregategroup-add": "Добавить",
+ "tpt-aggregategroup-save": "Сохранить",
+ "tpt-aggregategroup-close": "Закрыть",
+ "tpt-aggregategroup-add-new": "Добавить новую агрегированную группу",
+ "tpt-aggregategroup-new-name": "Название:",
+ "tpt-aggregategroup-new-description": "Описание (необязательно):",
+ "tpt-aggregategroup-remove-confirm": "Вы правда хотите удалить агрегированную группу?",
+ "tpt-aggregategroup-invalid-group": "Группа не существует.",
+ "tpt-aggregategroup-edit-name": "Имя:",
+ "tpt-aggregategroup-edit-description": "Описание:",
+ "tpt-aggregategroup-update": "Сохранить",
+ "tpt-aggregategroup-update-cancel": "Отмена",
+ "tpt-aggregategroup-expand-all-groups": "развернуть все группы",
+ "tpt-aggregategroup-collapse-all-groups": "свернуть все группы",
+ "tpt-aggregategroup-expand-group": "развернуть группу",
+ "tpt-aggregategroup-collapse-group": "свернуть группу",
+ "tpt-invalid-group": "Недопустимая группа",
+ "pt-parse-open": "Несбалансированный тег &lt;translate>.\nШаблон перевода: <pre>$1</pre>",
+ "pt-parse-close": "Несбалансированный тег &lt;translate>.\nШаблон перевода: <pre>$1</pre>",
+ "pt-parse-nested": "Недопустимы вложенные разделы &lt;translate>.\nТекст тега: <pre>$1</pre>",
+ "pt-shake-multiple": "Несколько маркеров раздела в одном разделе.\nОбратите внимание, что единицы перевода разделяются пустыми строками.\nТекст раздела: <pre>$1</pre>",
+ "pt-shake-position": "Неожиданное положение маркеров разделов.\nТекст раздела: <pre>$1</pre>",
+ "pt-shake-empty": "Пустой раздел для маркера «$1».",
+ "log-description-pagetranslation": "Журнал для действий, связанных с системой перевода страниц",
+ "log-name-pagetranslation": "Журнал перевода страниц",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|пометил|пометила}} страницу «$3» как доступную для перевода",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|удалил|удалила}} «$3» из системы перевода",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|переименовал|переименовала}} доступную для перевода страницу «$3» в «$4»",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|столкнулся|столкнулась}} с проблемой при переименовании страницы «$3» в «$4»",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|удалил|удалила}} доступную для перевода страницу «$3»",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|не смог|не смогла}} удалить «$3», относящуюся к доступной для перевода странице «$4»",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|удалил|удалила}} страницу перевода «$3»",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|не смог|не смогла}} удалить «$3», относящуюся к странице перевода «$4»",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|повысил|повысила}} приоритет перевода страницы «$3»",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|понизил|понизила}} приоритет перевода страницы «$3»",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|удалил|удалила}} приоритетные языки с доступной для перевода страницы «$3»",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|задал|задала}} для доступной для перевода страницы «$3» следующий список приоритетных языков: $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|ограничил|ограничила}} для доступной для перевода страницы «$3» список языков: $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|добавил|добавила}} доступную для перевода страницу «$3» в агрегированную группу «$4»",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|удалил|удалила}} доступную для перевода страницу «$3» из агрегированной группы «$4»",
+ "log-action-filter-pagetranslation": "Тип действия:",
+ "log-action-filter-pagetranslation-mark": "Пометить для перевода",
+ "log-action-filter-pagetranslation-unmark": "Удаление из перевода",
+ "log-action-filter-pagetranslation-move": "Перемещения страницы",
+ "log-action-filter-pagetranslation-delete": "Удаления страницы",
+ "log-action-filter-pagetranslation-encourage": "Установка отметок «Переведено»",
+ "log-action-filter-pagetranslation-discourage": "Снятие отметок «Переведено»",
+ "log-action-filter-pagetranslation-prioritylanguages": "изменение списка приоритетных языков",
+ "log-action-filter-pagetranslation-aggregategroups": "изменение агрегированных групп",
+ "log-description-messagebundle": "Журнал действий, связанных с системой пакетов сообщений",
+ "log-name-messagebundle": "Журнал наборов сообщений",
+ "logentry-messagebundle-moveok": "$1 {{GENDER:$2|завершил|завершила|завершил_а}} переименование набора сообщений $3 в $4",
+ "logentry-messagebundle-movenok": "$1 {{GENDER:$2|столкнулся|столкнулась}} с проблемой при переименовании страницы «$3» в «$4»",
+ "logentry-messagebundle-deletefok": "$1 {{GENDER:$2|завершил|завершила|завершил_а}} удаление пакета сообщений $3",
+ "logentry-messagebundle-deletefnok": "{{GENDER:$2|Участнику|Участнице|Участнику_це}} $1 не удалось удалить $3, относящееся к пакету сообщений $4",
+ "log-action-filter-messagebundle": "Тип действия:",
+ "log-action-filter-messagebundle-move": "Перемещения пакетов сообщений",
+ "log-action-filter-messagebundle-delete": "Удаления пакетов сообщений",
+ "pt-movepage-title": "Переименование доступной для перевода страницы «$1»",
+ "pt-movepage-messagebundle-title": "Перенос набора сообщений «$1»",
+ "pt-movepage-blockers": "Страница с возможностью перевода не может быть переименована из-за {{PLURAL:$1|1=следующей ошибки|следующих ошибок}}:",
+ "pt-movepage-block-base-invalid": "Недопустимое название основной целевой страницы.",
+ "pt-movepage-block-tp-invalid": "Название целевой страницы перевода «[[:$1]]» будет считаться недействительным (возможно, слишком длинным?).",
+ "pt-movepage-block-section-invalid": "Название целевой страницы для элемента перевода «[[:$1]]» будет считаться недействительным (возможно, слишком длинным).",
+ "pt-movepage-block-subpage-invalid": "Название целевой подстраницы «[[:$1]]» будет считаться недействительным (возможно, слишком длинным?).",
+ "pt-movepage-block-talkpage-invalid": "Название целевой страницы обсуждения «[[:$1]]» будет считаться недействительным (возможно, слишком длинным?).",
+ "pt-movepage-block-unknown-page": "Перемещаемая страница ([[:$1]]), по-видимому, не является частью переводимой страницы.",
+ "pt-movepage-block-ns-talk-unsupported": "Страница ([[:$1]]) переносится в пространство имён, которое не поддерживает страницы обсуждения.",
+ "pt-movepage-block-rename-failed": "Произошла ошибка при создании нового заголовка для страницы [[:$1]]",
+ "pt-movepage-list-pages": "Список страниц к переименованию",
+ "pt-movepage-list-translation": "{{PLURAL:$1|1=Страница|Страницы}} перевода",
+ "pt-movepage-list-section": "Разделы {{PLURAL:$1|1=переводимой страницы|переводимых страниц}}",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Подстраница|Подстраницы}}, отмеченные для перевода",
+ "pt-movepage-list-translatable-note": "Эти страницы должны быть переименованы отдельно.",
+ "pt-movepage-list-other": "{{PLURAL:$1|1=Другая подстраница|Другие подстраницы}}",
+ "pt-movepage-list-count": "Всего $1 {{PLURAL:$1|страница|страницы|страниц}} включая $2 {{PLURAL:$2|подстраница|подстраницы|подстраниц}} b $3 {{PLURAL:$3|страница обсуждений|страницы обсуждений|страниц обсуждений}} на переименование",
+ "pt-movepage-page-count-limit": "Эта переводимая страница состоит из $1 {{PLURAL:$1|страницы|страниц}}. Переименование такого количества страниц считается ненадёжным. Пожалуйтесь, обратитесь к системному администратору, чтобы сделать это с помощью обслуживающего скрипта.",
+ "pt-movepage-list-no-pages": "Страницы не найдены.",
+ "pt-movepage-legend": "Переименование переводимых страниц",
+ "pt-movepage-messagebundle-legend": "Перенос набора сообщений",
+ "pt-movepage-current": "Текущее название:",
+ "pt-movepage-new": "Новое название:",
+ "pt-movepage-reason": "Причина:",
+ "pt-movepage-subpages": "Переименовать все подстраницы",
+ "pt-movepage-talkpages": "Переименовать страницы обсуждения",
+ "pt-movepage-talkpage-exists": "(Есть страница обсуждения)",
+ "pt-movepage-action-check": "Проверить, возможно ли переименование",
+ "pt-movepage-action-perform": "Выполнить переименование",
+ "pt-movepage-action-other": "Изменить цель",
+ "pt-movepage-intro": "Эта служебная страница позволяет переименовывать страницы, отмеченные для перевода.\nПереименование не будет произведено одномоментно, так как требуется сменить название многим страницам.\nВо время процесса переименования пропадает возможность взаимодействия с этими страницами.\nВозникшие проблемы будут записаны в [[$1|журнал]], их нужно будет исправить вручную.",
+ "pt-movepage-logreason": "Часть переводимой страницы $1.",
+ "pt-movepage-started": "Пожалуйста, проверьте [[$1|журнал]] через некоторое время на наличие сообщений об ошибках и завершениях.",
+ "pt-locked-page": "Эта страница заблокирована, так как переводимая страница сейчас переименовывается.",
+ "pt-deletepage-lang-title": "Удаление страницы перевода «$1»",
+ "pt-deletepage-tp-title": "Удаление доступной для перевода страницы «$1»",
+ "pt-deletepage-mb-title": "Удаление пакета сообщение «$1»",
+ "pt-deletepage-invalid-title": "Указанная страница недействительна.",
+ "pt-deletepage-invalid-text": "Указанная страница не относится к числу доступных для перевода страниц или их переводов.",
+ "pt-deletepage-action-check": "Список страниц на удаление",
+ "pt-deletepage-action-perform": "Выполнить удаление",
+ "pt-deletepage-action-other": "Изменить цель",
+ "pt-deletepage-lang-legend": "Удалить страницу с переводом",
+ "pt-deletepage-tp-legend": "Удалить доступную для перевода страницу",
+ "pt-deletepage-mb-legend": "Удалить пакет сообщений",
+ "pt-deletepage-any-legend": "Удалить переводимую страницу, набор сообщений или перевод(ы) страницы",
+ "pt-deletepage-current": "Название страницы:",
+ "pt-deletepage-reason": "Причина:",
+ "pt-deletepage-reason-details": "Другая/дополнительная причина:",
+ "pt-deletepage-reason-other": "Другая причина",
+ "pt-deletepage-subpages": "Удалить все подстраницы",
+ "pt-deletepage-list-pages": "Список страниц к удалению",
+ "pt-deletepage-list-translation": "Страницы перевода",
+ "pt-deletepage-list-section": "Страницы разделов перевода",
+ "pt-deletepage-list-other": "Другие подстраницы",
+ "pt-deletepage-list-count": "Всего $1 {{PLURAL:$1|страница|страницы|страниц}} на удаление и $2 {{PLURAL:$2|подстраница|подстраницы|подстраниц}}.",
+ "pt-deletepage-list-no-pages": "Страницы не найдены.",
+ "pt-deletepage-full-logreason": "Часть доступной для перевода страницы «$1».",
+ "pt-deletepage-lang-logreason": "Часть страницы перевода «$1».",
+ "pt-deletepage-started": "Проверьте, пожалуйста, [[$1|журнал]] на предмет сообщений об ошибках и успешных завершениях.",
+ "pt-deletepage-intro": "Это специальная страница позволяет вам удалить переводимую страницу, набор сообщений или начатые/существующие переводы страницы.\nДействие по удалению не будет выполнено сразу же, так как в очереди на удаление будут все зависящие от них страницы.\nСбои будут отмечены в [[$1|соответствующем журнале]] и должны быть устранены вручную.",
+ "pagemigration": "Миграция страниц перевода",
+ "pagemigration-summary": "Укажите страницу перевода и восстановите любой перевод, сделанный до того, как Система перевода была включена на этой странице.",
+ "pm-import-button-label": "Импортировать",
+ "pm-savepages-button-label": "Сохранить",
+ "pm-cancel-button-label": "Отмена",
+ "pm-page-does-not-exist": "$1 не существует",
+ "pm-old-translations-missing": "$1 не содержит старые переводы",
+ "pm-extra-units-warning": "Могут присутствовать дополнительные блоки. Пожалуйста, соотнесите правильно источники и блоков перевода",
+ "pm-pagename-missing": "Пожалуйста, введите имя страницы",
+ "pm-add-icon-hover-text": "Добавить блок ниже",
+ "pm-swap-icon-hover-text": "Поменять местами с блоком ниже",
+ "pm-delete-icon-hover-text": "Удалить блок",
+ "pm-pagetitle-placeholder": "Введите заголовок страницы",
+ "pm-pagetitle-invalid": "Перенос страниц работает только с переводимыми страницами, например, «Page/ru». Указаное название не является действующим.",
+ "pm-pagetitle-missing": "Пожалуйста, введите заголовок страницы",
+ "pm-langcode-missing": "Перенос страниц работает только с переводимыми страницами, например, «Page/ru». Указаное название не является переводимой страницей.",
+ "pm-summary-import": "Импортирован перевод с использованием [[Special:PageMigration|миграции страниц]]",
+ "pm-on-import-message-text": "Старые переводы импортированы. Чтобы улучшить соответствие элементов перевода, используйте опции по добавлению, замене и удалению фрагментов; затем нажмите кнопку «{{int:pm-savepages-button-label}}», чтобы записать результат. Для отмены нажмите кнопку «{{int:pm-cancel-button-label}}».",
+ "pm-on-save-message-text": "Элементы перевода сохранены. Теперь можно ввести название новой страницы перевода, чтобы перенести её, или внести изменения в отображаемые ниже элементы и сохранить новую версию.",
+ "pm-pagetitle-not-translatable": "$1 — не часть переводимой страницы.",
+ "pm-translation-unit-fetch-failed": "Произошла ошибка при заполнении элементов перевода для страницы.",
+ "tpt-translate-title": "Разрешить перевод названия страницы",
+ "pp-save-summary": "Подготовленная к переводу страница",
+ "pagepreparation": "Подготовить страницу к переводу",
+ "pagepreparation-summary": "Укажите название страницы для подготовки к переводу.",
+ "pp-pagename-placeholder": "Введите имя страницы",
+ "pp-prepare-button-label": "Подготовить",
+ "pp-save-button-label": "Опубликовать",
+ "pp-cancel-button-label": "Отмена",
+ "pp-save-message": "Страница была опубликована. Вы можете [$1 редактировать] её.",
+ "pp-prepare-message": "Страница была подготовлена для перевода. Различия между версиями смотрите ниже. Нажмите кнопку «{{int:pp-save-button-label}}», если всё нормально!",
+ "pp-already-prepared-message": "Кажется, эта страница уже была подготовлена для перевода. Нет никаких изменений по сравнению с предыдущей версией.",
+ "pp-diff-error": "Возникла ошибка во время получения с сервера различия между версиями.",
+ "pp-pagename-missing": "Пожалуйста, введите имя страницы.",
+ "pp-diff-old-header": "Исходный текст",
+ "pp-diff-new-header": "Подготовленный текст",
+ "tpt-unlink-confirm": "Пожалуйста, подтвердите, что вы действительно хотите исключить эту страницу из системы перевода.\nСелектор языка и имена переведенной страницы перестанут работать.\nСтраницы перевода станут редактируемыми.",
+ "tpt-unlink-button": "Удалить из перевода",
+ "tpt-unlink-summary": "Удалённая из перевода страница",
+ "tpt-generic-confirm": "Пожалуйста, подтвердите действие.",
+ "tpt-generic-button": "Подтвердить",
+ "tpt-validation-not-insertable": "Имя переменной перевода «$1» непригодно для вставки в интерфейс перевода. Избегайте использования специальных символов.",
+ "tpt-validation-name-reuse": "Переменная перевода «$1» определяется несколько раз с разным содержанием. Измените имена переменных, чтобы они были уникальными в пределах единицы перевода.",
+ "visualeditor-annotations-translate-start": "Начало переводимого текста",
+ "visualeditor-annotations-translate-end": "Конец переводимого текста",
+ "visualeditor-annotations-translate-description": "Этот диапазон помечен как переводимый. Пожалуйста, убедитесь, что вы следуете рекомендациям, приведенным для [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text изменений в исходном тексте].",
+ "visualeditor-annotations-tvar-start": "Начало кода, не подлежащего переводу",
+ "visualeditor-annotations-tvar-end": "Конец кода, не подлежащего переводу",
+ "visualeditor-annotations-tvar-description": "Этот диапазон помечен как непереводимый. Пожалуйста, ознакомьсь с дополнительной информацией по [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Segmentation сегментации исходного текста]."
+}
diff --git a/Translate/i18n/pagetranslation/rue.json b/Translate/i18n/pagetranslation/rue.json
new file mode 100644
index 00000000..0e172c23
--- /dev/null
+++ b/Translate/i18n/pagetranslation/rue.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gazeb"
+ ]
+ },
+ "pagetranslation": "Переклад сторінок",
+ "right-pagetranslation": "Означованя верзій сторінок про переклад",
+ "tpt-section": "Блок перекладу $1",
+ "tpt-section-new": "Новый блок перекладу.\nНазва: $1",
+ "tpt-section-deleted": "Блок перекладу $1",
+ "tpt-diff-old": "Попереднїй текст",
+ "tpt-diff-new": "Новый текст",
+ "tpt-submit": "Означіти тоту верзію про переклад",
+ "tpt-sections-oldnew": "Новы і екзістуючі сторінкы перекладу",
+ "tpt-sections-deleted": "Змазаны части сторінок",
+ "tpt-sections-template": "Шаблона сторінкы перекладу",
+ "tpt-nosuchpage": "Сторінка $1 не екзістує",
+ "tpt-oldrevision": "$2 не є найновша верзія сторінкы [[:$1]].\nПро переклад є можне означіти лем найновшы сторінкы.",
+ "translate-tag-translate-link-desc": "Перекласти тоту сторінку",
+ "translate-tag-markthis": "Означіти тоту сторінку про переклад",
+ "tpt-languages-legend": "Іншы языкы:",
+ "pt-movepage-new": "Нова назва:",
+ "pt-movepage-reason": "Причіна:",
+ "pt-movepage-subpages": "Переменовати вшыткы підсторінкы",
+ "pt-movepage-action-other": "Змінити ціль"
+}
diff --git a/Translate/i18n/pagetranslation/rw.json b/Translate/i18n/pagetranslation/rw.json
new file mode 100644
index 00000000..fedb2fe4
--- /dev/null
+++ b/Translate/i18n/pagetranslation/rw.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "RebecaRwanda"
+ ]
+ },
+ "nstab-translations": "Ihuriro ry'ibyahinduwe"
+}
diff --git a/Translate/i18n/pagetranslation/ryu.json b/Translate/i18n/pagetranslation/ryu.json
new file mode 100644
index 00000000..f08cba99
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ryu.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "ChoiChong"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% 翻訳済)"
+}
diff --git a/Translate/i18n/pagetranslation/sa.json b/Translate/i18n/pagetranslation/sa.json
new file mode 100644
index 00000000..83358723
--- /dev/null
+++ b/Translate/i18n/pagetranslation/sa.json
@@ -0,0 +1,40 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ansumang",
+ "NehalDaveND",
+ "Shubha"
+ ]
+ },
+ "tpt-diff-old": "पूर्वतनः पाठः",
+ "tpt-diff-new": "नवीनः पाठः",
+ "tpt-other-pages-title": "सन्धिभग्नानि पृष्ठानि",
+ "tpt-select-prioritylangs-reason": "कारणम् :",
+ "tpt-languages-legend": "अन्यभाषाः :",
+ "tpt-languages-nonzero": "$1 ($2% अनुवादः जातः)",
+ "tpt-tab-translate": "अनूद्यताम्",
+ "tpt-aggregategroup-add": "योज्यताम्",
+ "tpt-aggregategroup-save": "रक्ष्यताम्",
+ "tpt-aggregategroup-new-name": "नाम :",
+ "tpt-aggregategroup-new-description": "विवरणम् (ऐच्छिकम्)",
+ "tpt-aggregategroup-edit-name": "नाम :",
+ "tpt-aggregategroup-edit-description": "वर्णनम् :",
+ "tpt-aggregategroup-update": "रक्ष्यताम्",
+ "tpt-aggregategroup-update-cancel": "निरस्यताम्",
+ "tpt-invalid-group": "अमान्यं दलम्",
+ "pt-movepage-current": "वर्तमानं सदस्यनाम",
+ "pt-movepage-new": "नवीननाम :",
+ "pt-movepage-reason": "कारणम् :",
+ "pt-deletepage-action-other": "लक्ष्यं परिवर्त्यताम्",
+ "pt-deletepage-lang-legend": "अनुवादपृष्ठम् अपाक्रियताम्",
+ "pt-deletepage-current": "पृष्ठनाम :",
+ "pt-deletepage-reason": "कारणम् :",
+ "pt-deletepage-subpages": "सर्वाणि उपपृष्ठानि अपाक्रियन्ताम्",
+ "pt-deletepage-list-translation": "पृष्ठम् अनुद्यताम्",
+ "pt-deletepage-list-other": "अन्यानि उपपृष्ठानि",
+ "pm-import-button-label": "आयातं करोतु",
+ "pm-savepages-button-label": "रक्ष्यताम्",
+ "pm-cancel-button-label": "निरस्यताम्",
+ "pp-save-button-label": "रक्ष्यताम्",
+ "pp-cancel-button-label": "निरस्यताम्"
+}
diff --git a/Translate/i18n/pagetranslation/sah.json b/Translate/i18n/pagetranslation/sah.json
new file mode 100644
index 00000000..df061727
--- /dev/null
+++ b/Translate/i18n/pagetranslation/sah.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "HalanTul"
+ ]
+ },
+ "pagetranslation": "Сирэйдэри тылбаастааһын",
+ "right-pagetranslation": "Тылбаастанар сирэйдэр барылларын бэлиэтээһин",
+ "tpt-section": "Тылбаас единицата $1",
+ "tpt-section-new": "Тылбаас саҥа единицата.\nАата: $1",
+ "tpt-section-deleted": "Тылбаас элэмиэнэ $1",
+ "tpt-diff-old": "Бу иннинээҕи тиэкис",
+ "tpt-diff-new": "Саҥа тиэкис",
+ "tpt-submit": "Бу барылы тылбаастыырга бэлиэтээһин",
+ "tpt-sections-oldnew": "Тылбаас саҥа уонна уруккуттан баар элэмиэннэрэ",
+ "tpt-sections-deleted": "Тылбаас сотуллубут элэмиэннэрэ",
+ "tpt-sections-template": "Тылбаас сирэйин халыыба",
+ "tpt-badtitle": "Сирэй ыйыллыбыт аата ($1) аат буолар кыаҕа суох",
+ "tpt-oldrevision": "$2 [[:$1]] сирэй бүтэһик барыла буолбатах.\nСирэйдэр бүтэһик эрэ барыллара тылбааска бэлиэтэниэхтэрин сөп.",
+ "tpt-notsuitable": "$1 сирэй тылбаастыырга табыгаһа суох.\n<nowiki><translate></nowiki> тиэктээҕин уонна синтаксииһэ сөпкө суруллубутун бэрэбиэркэлээ.",
+ "tpt-saveok": "[[:$1]] сирэй тылбаастанарга бэлиэтэммит, кини иһигэр {{PLURAL:$2|биир тылбаастаныахтаах этии|$2 тылбаастаныахтаах этии}} баар.\nБилигин сирэйи <span class=\"plainlinks\">[$3 тылбаастыахха]</span> сөп.",
+ "tpt-showpage-intro": "Манна саҥа, билигин баар уонна сотуллубут тылбаастаныахтаах тыллар уонна этиилэр көстөллөр.\nБу барылы тылбаастаныахтаах курдук бэлиэтиэҥ иннинэ уларытыыҥ төһө кыалларынан аҕыйах буоларын ситиһэ сатаа, ол тылбаасчыттар үлэлэрин аҕыйатыа.",
+ "tpt-mark-summary": "Бу барылы тылбастаныахтаах курдук бэлиэтииргэ",
+ "tpt-edit-failed": "Бу сирэйи саҥардар табыллыбата: $1",
+ "tpt-languages-nonzero": "$1 ($2% тылбаастаммыт)"
+}
diff --git a/Translate/i18n/pagetranslation/sat.json b/Translate/i18n/pagetranslation/sat.json
new file mode 100644
index 00000000..dc3315b5
--- /dev/null
+++ b/Translate/i18n/pagetranslation/sat.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Albinus",
+ "Manik Soren"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% ᱛᱚᱨᱡᱚᱢᱟᱣᱠᱟᱱᱟ)"
+}
diff --git a/Translate/i18n/pagetranslation/saz.json b/Translate/i18n/pagetranslation/saz.json
new file mode 100644
index 00000000..d2e8a231
--- /dev/null
+++ b/Translate/i18n/pagetranslation/saz.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "MooRePrabu"
+ ]
+ },
+ "pt-movepage-current": "ꢂꢡ꣄ꢡꢵ ꢥꢵꢮ꣄",
+ "pt-movepage-new": "ꢥꣁꢮ꣄ꢮꣁ ꢥꢵꢮ꣄"
+}
diff --git a/Translate/i18n/pagetranslation/sc.json b/Translate/i18n/pagetranslation/sc.json
new file mode 100644
index 00000000..2d7375cd
--- /dev/null
+++ b/Translate/i18n/pagetranslation/sc.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Taxandru",
+ "Via maxima"
+ ]
+ },
+ "pm-savepages-button-label": "Sarba"
+}
diff --git a/Translate/i18n/pagetranslation/scn.json b/Translate/i18n/pagetranslation/scn.json
new file mode 100644
index 00000000..8d10a97a
--- /dev/null
+++ b/Translate/i18n/pagetranslation/scn.json
@@ -0,0 +1,65 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ajeje Brazorf",
+ "Aushulz",
+ "Pippinu",
+ "Sarvaturi"
+ ]
+ },
+ "pagetranslation": "Traduzzioni pàggini",
+ "tps-edit-sourcepage-ve-warning-button": "OK",
+ "tpt-diff-old": "Testu pricidenti",
+ "tpt-diff-new": "Testu novu",
+ "tpt-nosuchpage": "La pàggina $1 nun esisti",
+ "tpt-old-pages-title": "Pàggini n traduzzioni",
+ "tpt-tag-oldsyntax": "sintassi vecchia",
+ "tpt-select-prioritylangs-reason": "Mutivu:",
+ "tpt-sections-syntaxversion": "Virsioni sintassi",
+ "translate-tag-translate-link-desc": "Traduci sta pàggina",
+ "tpt-translation-intro": "Sta pàggina è na <span class=\"plainlinks\">[$1 virsioni traduciuta]</span> dâ pàggina [[$2]]; la traduzzioni è cumpleta ô $3&nbsp;%.",
+ "tpt-languages-legend": "Àutri lingui",
+ "tpt-languages-nonzero": "$1 (traduciuta ô $2%)",
+ "tpt-tab-translate": "Traduci",
+ "tpt-aggregategroup-add": "Agghiunci",
+ "tpt-aggregategroup-save": "Sarva",
+ "tpt-aggregategroup-close": "Chiudi",
+ "tpt-aggregategroup-new-name": "Nomu:",
+ "tpt-aggregategroup-new-description": "Discrizzioni (facultativu):",
+ "tpt-aggregategroup-invalid-group": "Lu gruppu nun esisti",
+ "tpt-aggregategroup-edit-name": "Nomu:",
+ "tpt-aggregategroup-edit-description": "Discrizzioni:",
+ "tpt-aggregategroup-update": "Sarva",
+ "tpt-aggregategroup-update-cancel": "Annulla",
+ "tpt-invalid-group": "Gruppu nun vàlidu",
+ "log-name-pagetranslation": "Riggistru dî traduzzioni di pàggini",
+ "log-action-filter-pagetranslation": "Tipu d'azzioni:",
+ "log-action-filter-pagetranslation-delete": "Cancillazioni di pàggini",
+ "log-action-filter-messagebundle": "Tipu d'azzioni:",
+ "pt-movepage-current": "Nomu attuali:",
+ "pt-movepage-new": "Nomu novu:",
+ "pt-movepage-reason": "Mutivu:",
+ "pt-deletepage-current": "Nomu dâ pàggina:",
+ "pt-deletepage-reason": "Mutivu:",
+ "pt-deletepage-reason-details": "Àutru/ultiriuri mutivu:",
+ "pt-deletepage-reason-other": "Àutru mutivu",
+ "pt-deletepage-subpages": "Cancella tutti li suttapàggini",
+ "pt-deletepage-list-pages": "Elencu di pàggini da cancillari",
+ "pt-deletepage-list-other": "Àutri suttapàggini",
+ "pt-deletepage-list-count": "N tutali $1 {{PLURAL:$1|pàggina|pàggini}} e $2 {{PLURAL:$2|suttapàggina|suttapàggini}} da cancillari.",
+ "pt-deletepage-list-no-pages": "Nudda pàggina attruvata.",
+ "pm-import-button-label": "Mporta",
+ "pm-savepages-button-label": "Sarva",
+ "pm-cancel-button-label": "Annulla",
+ "pm-page-does-not-exist": "$1 nun esisti.",
+ "pm-pagename-missing": "Pi favuri nzirisci lu nomu dâ pàggina.",
+ "pm-delete-icon-hover-text": "Cancella unitati",
+ "pm-pagetitle-placeholder": "Nzirisci lu tìtulu dâ pàggina",
+ "pm-pagetitle-missing": "Pi favuri nzirisci lu tìtulu dâ pàggina.",
+ "pp-pagename-placeholder": "Nzirisci lu nomu dâ pàggina",
+ "pp-cancel-button-label": "Annulla",
+ "pp-pagename-missing": "Pi favuri nzirisci lu nomu dâ pàggina.",
+ "tpt-generic-confirm": "Pi favuri cunferma l'azzioni.",
+ "tpt-generic-button": "Cunferma",
+ "visualeditor-annotations-translate-end": "Fini dû cuntinutu ca pò èssiri tradottu"
+}
diff --git a/Translate/i18n/pagetranslation/sco.json b/Translate/i18n/pagetranslation/sco.json
new file mode 100644
index 00000000..dca10374
--- /dev/null
+++ b/Translate/i18n/pagetranslation/sco.json
@@ -0,0 +1,138 @@
+{
+ "@metadata": {
+ "authors": [
+ "AmaryllisGardener",
+ "John Reid",
+ "MJL"
+ ]
+ },
+ "pagetranslation": "Page owersetin",
+ "right-pagetranslation": "Maurk versions o pages fer owersetin",
+ "action-pagetranslation": "manage owersetable pages",
+ "tpt-section": "Owersetin unit $1",
+ "tpt-section-new": "New owersetin unit.\nName: $1",
+ "tpt-section-deleted": "Owersetin unit $1",
+ "tpt-diff-old": "Preeveeos tex",
+ "tpt-diff-new": "New tex",
+ "tpt-submit": "Maurk this version fer owersetin",
+ "tpt-sections-oldnew": "New n exeestin owersetin units",
+ "tpt-sections-deleted": "Delytit owersetin units",
+ "tpt-sections-template": "The Owersetin page template",
+ "tpt-action-nofuzzy": "Dinna onvalitate owersets",
+ "tpt-badtitle": "Page name gien ($1) is na ae valit title",
+ "tpt-nosuchpage": "Page $1 disna exeest",
+ "tpt-oldrevision": "$2 isna the laitest version o the page [[:$1]].\nYinlie laitest versions can be maurkt fer owersetin.",
+ "tpt-notsuitable": "Page $1 isna suitable fer owersetin.\nMak sair that it haes <nowiki><translate></nowiki> tags n haes ae valit syntax.",
+ "tpt-saveok": "The page [[:$1]] haes been maurkt fer owersetin wi $2 {{PLURAL:$2|owersetin unit|owersetin units}}.\nThe page can nou be <span class=\"plainlinks\">[$3 owerset]</span>.",
+ "tpt-offer-notify": "Ye can <span class=\"plainlinks\">[$1 tell owerseters]</span> aneat this page.",
+ "tpt-showpage-intro": "Ablo new, exeestin n delytit owerset units ar leetit.\nAfore maurkin this version fer owersetin, check that the chynges til owerset units ar wee tae avoid onnecessair wairk fer the owerseters.",
+ "tpt-mark-summary": "Maurkt this version fer owersetin",
+ "tpt-edit-failed": "Coudna update the page: $1",
+ "tpt-duplicate": "Owerset unit name $1 is uised mair than yince.",
+ "tpt-unmarked": "Page $1 is naw langer maurkt fer owersetin.",
+ "tpt-list-nopages": "Naw pages ar maurkt fer owersetin or readie tae be maurkt fer owersetin.",
+ "tpt-new-pages-title": "Pages proposed fer owersetin",
+ "tpt-old-pages-title": "Pages in owersetin",
+ "tpt-new-pages": "{{PLURAL:$1|This page contains|Thir pages contain}} tex wi owersetin tags,\nbit naw version o {{PLURAL:$1|this page is|thir pages ar}} nou maurkt fer owersetin.",
+ "tpt-old-pages": "Some version o {{PLURAL:$1|this page haes|thir pages hae}} been maurkt fer owersetin.",
+ "tpt-other-pages": "{{PLURAL:$1|Aen auld version o this page is|Aulder versions o thir pages ar}} maurked fer owersetin,\nbit the laitest {{PLURAL:$1|version|versions}} canna be maurkt fer owersetin.",
+ "tpt-select-prioritylangs": "Comma-separatit leet o prioritie leid codes:",
+ "tpt-select-prioritylangs-force": "Hinder owersets til leids ither than the prioritie leids",
+ "tpt-select-prioritylangs-reason": "Raison:",
+ "tpt-sections-prioritylangs": "Prioritie leids",
+ "tpt-rev-mark": "maurk fer owersetin",
+ "tpt-rev-unmark": "remuiv fae owersetin",
+ "tpt-rev-discourage": "discoorage",
+ "tpt-rev-mark-tooltip": "Maurk the laitest version o this page fer owersetin.",
+ "tpt-rev-unmark-tooltip": "Remuiv this page fae owersetin.",
+ "tpt-rev-discourage-tooltip": "Discoorage further owersetins oan this page.",
+ "tpt-rev-encourage-tooltip": "Restore this page til normal owersetin.",
+ "translate-tag-translate-link-desc": "Owerset this page",
+ "translate-tag-markthis": "Maurk this page fer owersetin",
+ "translate-tag-markthisagain": "This page haes <span class=\"plainlinks\">[$1 chynges]</span> sin it wis laist <span class=\"plainlinks\">[$2 maurkt fer owersetin]</span>.",
+ "translate-tag-hasnew": "This page contains <span class=\"plainlinks\">[$1 chynges]</span> that arna maurkt fer owersetin.",
+ "tpt-translation-intro": "This page is aen <span class=\"plainlinks\">[$1 owerset version]</span> o the page [[$2]] n the owersetin is $3% compleate.",
+ "tpt-languages-legend": "Ither leids:",
+ "tpt-languages-zero": "Stairt owersetin fer this leid",
+ "tpt-languages-nonzero": "$1 ($2% translatit)",
+ "tpt-tab-translate": "Owerset",
+ "tpt-target-page": "This page canna be updated manuallie.\nThis page is aen owerset o the page [[$1]] n the owersetin can be updated uisin [$2 the owersetin tuil].",
+ "tpt-unknown-page": "This namespace is reserved fer content page owersets.\nThe page that ye'r ettlin tae eedit disna seem tae correspond wi onie page maurkt fer owersetin.",
+ "tpt-translation-restricted": "Owersetin o this page intil this leid haes been stapt bi aen owerset admeenistrater.\n\nReason: $1",
+ "tpt-discouraged-language-force": "<strong>This page canna be owerset intil $2.</strong>\n\nAen owerset admeenistrater decided that this page can yinlie be owerset intil $3.",
+ "tpt-priority-languages": "Aen owerset admeenistrater haes set the prioritie leids fer this groop til $1.",
+ "tpt-render-summary": "Updatin tae match new version o soorce page",
+ "aggregategroups": "Aggregate groops",
+ "tpt-aggregategroup-save": "Hain",
+ "tpt-aggregategroup-add-new": "Eik ae new aggregate groop",
+ "tpt-aggregategroup-new-description": "Descreeption (aen optie):",
+ "tpt-aggregategroup-remove-confirm": "Ar ye sair that ye want tae delyte this aggregate groop?",
+ "tpt-aggregategroup-invalid-group": "Groop disna exeest",
+ "tpt-aggregategroup-edit-description": "Descreeption:",
+ "pt-parse-open": "Onbalancet &lt;translate> tag.\nOwersetin template: <pre>$1</pre>",
+ "pt-parse-close": "Onbalancet &lt;/translate> tag.\nOwersetin template: <pre>$1</pre>",
+ "pt-parse-nested": "Nested &lt;translate> owersetin units arna permittit.\nTag tex: <pre>$1</pre>",
+ "pt-shake-multiple": "Multiple Owersetin unit maurkers fer the yin owersetin unit.\nOwersetin unit tex: <pre>$1</pre>",
+ "pt-shake-position": "Owersetin unit maurkers in onexpectit poseetion.\nOwersetin unit tex: <pre>$1</pre>",
+ "pt-shake-empty": "Tuim owersetin unit fer maurker \"$1\".",
+ "log-description-pagetranslation": "Log fer actions relatit til the page owersetin system",
+ "log-name-pagetranslation": "Page owersetin log",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|maurkt}} $3 fer owersetin",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|remuived}} $3 fae owersetin",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|compleatit}} renamin o owersetable page $3 til $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|encoontered}} ae proablem while muivin page $3 til $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|compleatit}} delytion o owersetable page $3",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|failed}} tae delyte $3, this belangs til owersetable page $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|compleatit}} delytion o owersetin page $3",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|failed}} tae delyte $3, this belangs til owersetin page $4",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|encooraged}} the owersetin o $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|discooraged}} the owersetin o $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|removed}} prioritie leids fae owersetable page $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|set}} the prioritie leids fer owersetable page $3 til $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|leemitit}} leids fer owersetable page $3 til $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|added}} owersetable page $3 til aggregate groop $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|remuived}} owersetable page $3 fae aggregate groop $4",
+ "pt-movepage-title": "Muiv owersetable page \"$1\"",
+ "pt-movepage-blockers": "The owersetable page canna be muived til ae new name cause o the follaein {{PLURAL:$1|mistak|mistaks}}:",
+ "pt-movepage-block-base-invalid": "The tairget owersetable page name isna ae valit title.",
+ "pt-movepage-block-tp-invalid": "The tairget owerset page title fer \"[[:$1]]\" wid be onvalit (ower lang?).",
+ "pt-movepage-block-section-invalid": "The tairget page title fer \"[[:$1]]\" fer the owersetin unit wid be onvalit (ower lang?).",
+ "pt-movepage-block-subpage-invalid": "The tairget subpage title fer \"[[:$1]]\" wid be onvalid (ower lang?).",
+ "pt-movepage-list-pages": "Leet o pages tae muiv",
+ "pt-movepage-list-translation": "Owerset {{PLURAL:$1|page|pages}}",
+ "pt-movepage-list-section": "Owersetin unit {{PLURAL:$1|page|pages}}",
+ "pt-movepage-list-other": "Ither sub{{PLURAL:$1|page|pages}}",
+ "pt-movepage-list-count": "In total $1 {{PLURAL:$1|page|pages}} tae muiv.",
+ "pt-movepage-legend": "Muiv owersetable page",
+ "pt-movepage-current": "The Nou name:",
+ "pt-movepage-reason": "Raison:",
+ "pt-movepage-subpages": "Muiv aw subpages",
+ "pt-movepage-action-check": "Check gif the muiv is possible",
+ "pt-movepage-action-perform": "Mak the muiv",
+ "pt-movepage-action-other": "Chynge tairget",
+ "pt-movepage-intro": "This byordinair page permits ye tae muiv pages that ar maurkt fer owersetin.\nThe muiv action will na be instant, cause monie pages will need tae be muived.\nWhile the pages ar bein muived, it's na possible tae interact wi the said pages.\nFailures will be loggit in the [[Special:Log/pagetranslation|page owersetin log]] n thay need tae be repaired bi haun.",
+ "pt-movepage-logreason": "Pairt o owersetable page \"$1\".",
+ "pt-movepage-started": "The base page haes nou been muived.\nPlease check the [[Special:Log/pagetranslation|page owersetin log]] fer mistaks n compleation message.",
+ "pt-locked-page": "This page is lockt cause the owersetable page is nou bein muived.",
+ "pt-deletepage-lang-title": "Delytin owersetin page \"$1\".",
+ "pt-deletepage-tp-title": "Delytin owersetable page \"$1\".",
+ "pt-deletepage-invalid-title": "The speceefied page isna valid.",
+ "pt-deletepage-invalid-text": "The speceefied page isna aen owersetable page or aen owersetin page.",
+ "pt-deletepage-action-check": "Leet the pages tae be delytit",
+ "pt-deletepage-action-perform": "Mak the delytion",
+ "pt-deletepage-action-other": "Chynge tairget",
+ "pt-deletepage-lang-legend": "Delyte owersetin page",
+ "pt-deletepage-tp-legend": "Delyte owersetable page",
+ "pt-deletepage-any-legend": "Delyte owersetable page or owersetin page",
+ "pt-deletepage-reason": "Raison:",
+ "pt-deletepage-subpages": "Delyte aw subpages",
+ "pt-deletepage-list-pages": "Leet o pages tae delyte",
+ "pt-deletepage-list-translation": "Owersetin pages",
+ "pt-deletepage-list-section": "Owersetin unit pages",
+ "pt-deletepage-list-other": "Ither subpages",
+ "pt-deletepage-list-count": "In total $1 {{PLURAL:$1|page|pages}} tae delyte.",
+ "pt-deletepage-full-logreason": "Pairt o owersetable page \"$1\".",
+ "pt-deletepage-lang-logreason": "Pairt o owersetin page \"$1\".",
+ "pt-deletepage-started": "Please check the [[Special:Log/pagetranslation|page owersetin log]] fer mistaks n compleation message.",
+ "pt-deletepage-intro": "This byordinair page permits ye tae delyte ae hale owersetable page, or aen indiveedual owersetin page in ae leid.\nThe delyte action willna be instant, cause aw the pages dependin oan thaim will be delytit ava.\nFailures will be loggit in the [[Special:Log/pagetranslation|page owersetin log]] n thay need tae be repaired bi haun."
+}
diff --git a/Translate/i18n/pagetranslation/sd.json b/Translate/i18n/pagetranslation/sd.json
new file mode 100644
index 00000000..ba576d14
--- /dev/null
+++ b/Translate/i18n/pagetranslation/sd.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aursani",
+ "Mehtab ahmed",
+ "Sindhu"
+ ]
+ },
+ "tpt-diff-old": "پويون متن",
+ "tpt-diff-new": "نئون متن",
+ "tpt-mark-nochanges": "نظر ثاني لاءِ ڪي بہ تبديليون ناھن. ھن صفحي ترجمي لاءِ نشان ھڻڻ سان صفحو نہ سنواربو نہ ئي ڪو موجود ترجمي جو ايڪو.",
+ "translate-tag-translate-link-desc": "ھن صفحي جو ترجمو ڪريو",
+ "tpt-languages-nonzero": "$1 ($2% ترجمو ٿيل)",
+ "tpt-aggregategroup-save": "سانڍيو",
+ "tpt-aggregategroup-update": "سانڍيو",
+ "tpt-aggregategroup-update-cancel": "رد",
+ "pt-movepage-list-pages": "چورڻ لاءِ صفحن جي فھرست",
+ "pt-deletepage-current": "صفحي جو نالو:",
+ "pt-deletepage-list-pages": "ڊاھڻ لاءِ صفحن جي فھرست",
+ "pm-savepages-button-label": "سانڍيو",
+ "pm-cancel-button-label": "رد",
+ "pp-save-button-label": "ڇاپيو",
+ "pp-cancel-button-label": "رد",
+ "pp-diff-old-header": "ذريعي جو متن",
+ "pp-diff-new-header": "تيارڪيل متن",
+ "tpt-unlink-summary": "ترجمي کان صفحو ھٽايو ويو",
+ "tpt-generic-button": "پڪ ڪريو"
+}
diff --git a/Translate/i18n/pagetranslation/sdc.json b/Translate/i18n/pagetranslation/sdc.json
new file mode 100644
index 00000000..29070c8b
--- /dev/null
+++ b/Translate/i18n/pagetranslation/sdc.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jun Misugi"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% fattu)"
+}
diff --git a/Translate/i18n/pagetranslation/sdh.json b/Translate/i18n/pagetranslation/sdh.json
new file mode 100644
index 00000000..d8b66183
--- /dev/null
+++ b/Translate/i18n/pagetranslation/sdh.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Paraw2"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% وەرگێڕیاس)"
+}
diff --git a/Translate/i18n/pagetranslation/se.json b/Translate/i18n/pagetranslation/se.json
new file mode 100644
index 00000000..ed0ea53d
--- /dev/null
+++ b/Translate/i18n/pagetranslation/se.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Yupik"
+ ]
+ },
+ "tpt-languages-legend": "Eará gielat:"
+}
diff --git a/Translate/i18n/pagetranslation/ses.json b/Translate/i18n/pagetranslation/ses.json
new file mode 100644
index 00000000..83569071
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ses.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Songhay"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% berante)"
+}
diff --git a/Translate/i18n/pagetranslation/sgs.json b/Translate/i18n/pagetranslation/sgs.json
new file mode 100644
index 00000000..367d0411
--- /dev/null
+++ b/Translate/i18n/pagetranslation/sgs.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hugo.arg"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% pargoldīta)"
+}
diff --git a/Translate/i18n/pagetranslation/sh.json b/Translate/i18n/pagetranslation/sh.json
new file mode 100644
index 00000000..5a55b876
--- /dev/null
+++ b/Translate/i18n/pagetranslation/sh.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Conquistador",
+ "OC Ripper"
+ ]
+ },
+ "tpt-languages-legend": "Drugi jezici:",
+ "tpt-languages-nonzero": "$1 ($2% prevedeno)",
+ "tpt-aggregategroup-update-cancel": "Otkaži",
+ "pm-cancel-button-label": "Otkaži",
+ "pp-cancel-button-label": "Otkaži"
+}
diff --git a/Translate/i18n/pagetranslation/shi.json b/Translate/i18n/pagetranslation/shi.json
new file mode 100644
index 00000000..a2ae79b5
--- /dev/null
+++ b/Translate/i18n/pagetranslation/shi.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amara-Amaziɣ",
+ "Ayour2002"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% ad ittyusuɣln)"
+}
diff --git a/Translate/i18n/pagetranslation/shn.json b/Translate/i18n/pagetranslation/shn.json
new file mode 100644
index 00000000..b9b4b005
--- /dev/null
+++ b/Translate/i18n/pagetranslation/shn.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Saimawnkham",
+ "Saosukham"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 (ပိၼ်ႇၽႃႇသႃႇယဝ်ႉ $2%)"
+}
diff --git a/Translate/i18n/pagetranslation/shy-latn.json b/Translate/i18n/pagetranslation/shy-latn.json
new file mode 100644
index 00000000..635133da
--- /dev/null
+++ b/Translate/i18n/pagetranslation/shy-latn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Vikoula5"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% yettwasuqel)"
+}
diff --git a/Translate/i18n/pagetranslation/si.json b/Translate/i18n/pagetranslation/si.json
new file mode 100644
index 00000000..52fd3af0
--- /dev/null
+++ b/Translate/i18n/pagetranslation/si.json
@@ -0,0 +1,114 @@
+{
+ "@metadata": {
+ "authors": [
+ "Indunil Chamara",
+ "Susith Chandira Gts",
+ "චතුනි අලහප්පෙරුම",
+ "තඹරු විජේසේකර",
+ "පසිඳු කාවින්ද",
+ "බිඟුවා",
+ "ශ්වෙත",
+ "හරිත",
+ 1100100
+ ]
+ },
+ "pagetranslation": "පිටුව පරිවර්තනය",
+ "right-pagetranslation": "පරිවර්තනය සඳහා පිටුවල අනුවාද සලකුණු කරන්න",
+ "action-pagetranslation": "පරිවර්තනය කල හැකි පිටු කළමනාකරණය කරන්න",
+ "tpt-section": "$1 පරිවර්තන ඒකකය",
+ "tpt-section-new": "නව පරිවර්තන ඒකකය.\nනම: $1",
+ "tpt-section-deleted": "$1 පරිවර්තන ඒකකය",
+ "tpt-diff-old": "පූර්ව පෙළ",
+ "tpt-diff-new": "නව පෙළ",
+ "tpt-submit": "මෙම අනුවාදය පරිවර්තනය සඳහා සලකුණු කරගන්න",
+ "tpt-sections-oldnew": "නව හා දැනට පවත්නා පරිවර්තන ඒකක",
+ "tpt-sections-deleted": "මකාදැමුණු පරිවර්තන ඒකක",
+ "tpt-sections-template": "පරිවර්තන පිටුව සැකිල්ල",
+ "tpt-action-nofuzzy": "පරිනර්තන අවලංගු නොකරන්න",
+ "tpt-badtitle": "දී ඇති පිටු නාමය ($1) නීතික මාතෘකාවක් නොවේ",
+ "tpt-nosuchpage": "$1 පිටුව නොපවතියි",
+ "tpt-oldrevision": "$2 යනු [[:$1]] පිටුවෙහි නවතම අනුවාදය නොවේ.\nනවතම අනුවාදයන් පමණක් පරිවර්තනය සඳහා තෝරාගත හැක.",
+ "tpt-notsuitable": "$1 පිටුව පරිවර්තනය සඳහා සුදුසු නොවේ.\nඑය සතුව <nowiki><translate></nowiki> ටැගයන් පැවතීම සහ එය සතුව නීතික වින්‍යාසයක් ඇතිබව සහතික කරන්න.",
+ "tpt-saveok": "$2 හා සමගින් මෙම පිටුව පරිවර්තනය කෙරුමට [[:$1]] විසින් සලකුණු කොට ඇත.\n{{PLURAL:$2|එක් පරිවර්තන ඒකකයක්|පරිවර්තන ඒකක}}\nමෙම පිටුව දැන් <span class=\"plainlinks\">[$3 පරිවර්තනය කල]</span>.",
+ "tpt-mark-summary": "පරිවර්තනය සඳහා මෙම අනුවාදය සලකුණු කරන ලදී",
+ "tpt-mark-nochanges": "මෙම සංශෝධනය හා අවසන් වරට ලකුණු කල සංශෝධනය අතර කිසිදු වෙනසක් නොමැත.",
+ "tpt-edit-failed": "පිටුව යාවත්කාලීන කල නොහැක: $1",
+ "tpt-duplicate": "$1 පරිවතන ඒකක නාමය එකකට වඩා භාවිතා කර ඇත.",
+ "tpt-unmarked": "$1 පිටුව පරිවර්තනය සඳහා තවදුරටත් සලකුණු කර නොමැත.",
+ "tpt-new-pages-title": "පරිවර්තනය සඳහා යෝජිත පිටු",
+ "tpt-old-pages-title": "පරිවර්තනයේ ඇති පිටු",
+ "tpt-other-pages-title": "බිඳුණු පිටු",
+ "tpt-old-pages": "පරිවර්තනය සඳහා {{PLURAL:$1|මෙම පිටුවේ|මෙම පිටුවල}} සමහර අනුවාදයන් සලකුණු කරන ලදී.",
+ "tpt-select-prioritylangs": "කොමාවෙන්-වෙන්වූ ප්‍රමුඛතා භාෂා කේතයන් ලැයිස්තුව:",
+ "tpt-select-prioritylangs-force": "ප්‍රමුඛතා භාෂාවන්ට වඩා වෙන භාෂාවන්ට කරන පරිවර්තන වලක්වන්න",
+ "tpt-select-prioritylangs-reason": "හේතුව:",
+ "tpt-sections-prioritylangs": "ප්‍රමුඛතා භාෂාවන්",
+ "tpt-rev-mark": "පරිවර්තනය සඳහා සලකුණු කරන්න",
+ "tpt-rev-unmark": "පරිවර්තනයෙන් ඉවත් කරන්න",
+ "tpt-rev-discourage": "අධෛර්ය කරන්න",
+ "tpt-rev-encourage": "නැවත පිහිටුවන්න",
+ "tpt-rev-mark-tooltip": "පරිවර්තනය සඳහා මෙම පිටුවෙහි නවතම අනුවාදය සලකුණු කරන්න.",
+ "tpt-rev-unmark-tooltip": "මෙම පිටුව පරිවර්තනයෙන් ඉවත් කරන්න.",
+ "tpt-rev-discourage-tooltip": "මෙම පිටුවෙහි ඉදිරි පරිවර්තනයන් අධෛර්ය කරන්න.",
+ "tpt-rev-encourage-tooltip": "සාමාන්‍ය පරිවර්තනය වෙත මෙම පිටුව නැවත පිහිටුවන්න.",
+ "translate-tag-translate-link-desc": "මෙම පිටුව පරිවර්තනය කරන්න",
+ "translate-tag-markthis": "පරිවර්තනය සඳහා මෙම පිටුව සලකුණු කරන්න",
+ "translate-tag-hasnew": "මෙම පිටුවේ අඩංගු වන <span class=\"plainlinks\">[$1 වෙනස්කම්]</span> පරිවර්තනය සඳහා සලකුණු කොට නොමැත.",
+ "tpt-translation-intro-fuzzy": "යල්පැනපු පරිවර්තනයන් මෙලෙස සලකුණු කරයි.",
+ "tpt-languages-legend": "වෙනත් භාෂා:",
+ "tpt-languages-zero": "මෙම භාෂාව සඳහා පරිවර්තනය අරඹන්න",
+ "tpt-languages-nonzero": "$1 ($2% පරිවර්තිතයි)",
+ "tpt-render-summary": "මූලාශ්‍ර පිටුවේ නව අනුවාදය වෙත ගැලපීම සඳහා යාවත්කාලීන කරමින්",
+ "aggregategroups": "සමස්ත කාණ්ඩයන්",
+ "tpt-aggregategroup-add": "එක් කරන්න",
+ "tpt-aggregategroup-save": "සුරකින්න",
+ "tpt-aggregategroup-add-new": "නව ඓක්‍යය කාණ්ඩයක් එක් කරන්න",
+ "tpt-aggregategroup-new-name": "නම:",
+ "tpt-aggregategroup-new-description": "විස්තරය (අමතර):",
+ "tpt-aggregategroup-invalid-group": "කාණ්ඩය නොපවතියි",
+ "pt-shake-empty": "$1 ලකුණුකරණය සඳහා හිස් කාණ්ඩය.",
+ "log-name-pagetranslation": "පිටු පරිවර්තන ලඝු සටහන",
+ "pt-movepage-title": "පරිවර්තනය කල හැකි $1 පිටුව ගෙනයන්න",
+ "pt-movepage-block-base-invalid": "ඉලක්කගත ආධාරක පිටුව වලංගු මාතෘකාවක් නොවේ.",
+ "pt-movepage-list-pages": "ගෙනයාමට ඇති පිටු ලැයිස්තුව",
+ "pt-movepage-list-translation": "පරිවර්තන පිටු",
+ "pt-movepage-list-section": "කාණ්ඩ පිටු",
+ "pt-movepage-list-other": "වෙනත් උපපිටු",
+ "pt-movepage-list-count": "එකතුව වශයෙන් {{PLURAL:$1|පිටු|පිටු}} $1 ක් ගෙන යාමට ඇත.",
+ "pt-movepage-legend": "පරිවර්තනය කල හැකි පිටුව ගෙනයන්න",
+ "pt-movepage-current": "වත්මන් නාමය:",
+ "pt-movepage-new": "නව නම:",
+ "pt-movepage-reason": "හේතුව:",
+ "pt-movepage-subpages": "සියලුම උපපිටු ගෙනයන්න",
+ "pt-movepage-action-check": "ගෙනයාම කළහැකි දැයි පිරික්සන්න",
+ "pt-movepage-action-perform": "ගෙනයන්න",
+ "pt-movepage-action-other": "ඉලක්කය මාරු කරන්න",
+ "pt-movepage-logreason": "$1 පරිවර්තනය කල හැකි පිටුවෙහි කොටසක්.",
+ "pt-movepage-started": "පදනම් පිටුව දැන් ගෙනයන ලදී.\nසම්පූර්ණ පණිවුඩය සහ දෝෂයන් සඳහා කරුණාකර [[Special:Log/pagetranslation|පිටු පරිවර්තන ලඝු සටහන]] පිරික්සන්න.",
+ "pt-locked-page": "මෙම පිටුව අගුළුදමා ඇත මන්ද පරිවර්තනමය පිටුව ගෙනයමින් පවතියි.",
+ "pt-deletepage-lang-title": "$1 පරිවර්තන පිටුව මකමින්.",
+ "pt-deletepage-tp-title": "$1 පරිවර්තනය කල හැකි පිටුව මකමින්.",
+ "pt-deletepage-invalid-title": "විශේෂණය කෙරූ පිටුව වලංගු නොවේ.",
+ "pt-deletepage-invalid-text": "විශේෂණය කෙරූ පිටුව පරිවර්තනය කල නොහැකි හෝ පරිවර්තනමය නොවේ.",
+ "pt-deletepage-action-check": "මැකීමට ඇති පිටු ලැයිස්තුගත කරන්න",
+ "pt-deletepage-action-perform": "මැකීම සිදු කරන්න",
+ "pt-deletepage-action-other": "ඉලක්කය වෙනස් කරන්න",
+ "pt-deletepage-lang-legend": "පරිවර්තන පිටුව මකමින්",
+ "pt-deletepage-tp-legend": "පරිවර්තනය කල හැකි පිටුව මකන්න",
+ "pt-deletepage-any-legend": "පරිවර්තනය කළහැකි හෝ පරිවර්තනය කළහැකි පරිවර්තන පිටුවක් මකන්න",
+ "pt-deletepage-current": "පිටු නාමය:",
+ "pt-deletepage-reason": "හේතුව:",
+ "pt-deletepage-subpages": "සියලුම උපපිටු මකන්න",
+ "pt-deletepage-list-pages": "මැකීමට ඇති පිටු ලැයිස්තුව",
+ "pt-deletepage-list-translation": "පරිවර්තන පිටු",
+ "pt-deletepage-list-section": "කාණ්ඩ පිටු",
+ "pt-deletepage-list-other": "වෙනත් උපපිටු",
+ "pt-deletepage-list-count": "එකතුව වශයෙන් {{PLURAL:$1|පිටු|පිටු}} $1 ක් මැකීමට ඇත.",
+ "pt-deletepage-full-logreason": "$1 පරිවර්තනමය පිටුවෙහි කොටසක්.",
+ "pt-deletepage-lang-logreason": "$1 පරිවර්තන පිටුවෙහි කොටසක්.",
+ "pt-deletepage-started": "සම්පූර්ණ පණිවුඩය සහ දෝෂයන් සඳහා කරුණාකර [[Special:Log/pagetranslation|පිටු පරිවර්තන ලඝු සටහන]] පිරික්සන්න.",
+ "pm-pagetitle-invalid": "කරුණාකර වලංගු නාමයක් පිටුවට යොදන්න",
+ "tpt-unlink-confirm": "පරිවර්තනය කිරීම් පද්ධතියෙන් මෙම පිටුව ඉවත් කිරීමට ඔබට සැබවින්ම අවශ්‍ය බව කරුණාකර තහවුරු කරන්න.\nභාෂා තෝරනය හා පරිවර්තනය කරන ලද පිටුව ක්‍රියාවිරහිත වනු ඇත.\nපරිවර්තන පිටු සංස්කරණය කල හැකි තත්වයට පත්වනු ඇත.",
+ "tpt-unlink-button": "පරිවර්තනයෙන් ඉවත් කරන්න",
+ "tpt-unlink-summary": "පරිවර්තනයෙන් ඉවත්කරන ලද පිටු"
+}
diff --git a/Translate/i18n/pagetranslation/sje.json b/Translate/i18n/pagetranslation/sje.json
new file mode 100644
index 00000000..25a834e9
--- /dev/null
+++ b/Translate/i18n/pagetranslation/sje.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bidumsábme",
+ "Olve Utne"
+ ]
+ },
+ "tps-edit-sourcepage-ve-warning-button": "Miededav",
+ "tpt-languages-nonzero": "$1 ($2% jårrgåluvvum)",
+ "tpt-aggregategroup-edit-description": "Gåvådibme:"
+}
diff --git a/Translate/i18n/pagetranslation/sk.json b/Translate/i18n/pagetranslation/sk.json
new file mode 100644
index 00000000..1af4654a
--- /dev/null
+++ b/Translate/i18n/pagetranslation/sk.json
@@ -0,0 +1,47 @@
+{
+ "@metadata": {
+ "authors": [
+ "Helix84",
+ "Kusavica",
+ "Luky001",
+ "Mormegil",
+ "Rudko",
+ "Teslaton",
+ "TomášPolonec"
+ ]
+ },
+ "pagetranslation": "Preklad stránky",
+ "right-pagetranslation": "Označiť verzie stránok na preklad",
+ "tpt-section": "Jednotka prekladu $1",
+ "tpt-section-new": "Nová jednotka prekladu.\nNázov: $1",
+ "tpt-section-deleted": "Jednotka prekladu $1",
+ "tpt-diff-old": "Predošlý text",
+ "tpt-diff-new": "Nový text",
+ "tpt-submit": "Označiť túto verziu na preklad",
+ "tpt-sections-oldnew": "Nové a existujúce jednotky prekladu",
+ "tpt-sections-deleted": "Zmazané jednotky prekladu",
+ "tpt-sections-template": "Šablóna stránky na preklad",
+ "tpt-badtitle": "Zadaný názov stránky ($1) nie je platný",
+ "tpt-nosuchpage": "Stránka $1 neexistuje",
+ "tpt-oldrevision": "$2 nie je najnovšia verzia stránky [[:$1]].\nNa preklad je možné označiť iba posledné verzie stránok.",
+ "tpt-notsuitable": "Stránka $1 nie je vhodná na preklad.\nUistite sa, že obsahuje značky <nowiki><translate></nowiki> a má platnú syntax.",
+ "tpt-saveok": "Stránka [[:$1]] bola označená na preklad s $2 {{PLURAL:$2|jednotkou prekladu, ktorú|jednotkami prekladu, ktoré}} možno preložiť.\nTúto stránku je teraz možné <span class=\"plainlinks\">[$3 preložiť]</span>.",
+ "tpt-showpage-intro": "Nižšie sú uvedené nové, súčasné a zmazané prekladové časti.\nPredtým, než túto verziu označíte na preklad, skontrolujte, že zmeny prekladových častí sú minimálne, aby ste zabránili zbytočnej práci prekladateľov.",
+ "tpt-mark-summary": "Táto verzia je označená na preklad",
+ "tpt-edit-failed": "Nebolo možné aktualizovať stránku: $1",
+ "tpt-list-nopages": "Žiadne stránky nie sú označené na preklad alebo na to nie sú pripravené.",
+ "tpt-new-pages": "{{PLURAL:$1|Táto stránka obsahuje|Tieto stránky obsahujú}} text so značkami na preklad, ale žiadna verzia {{PLURAL:$1|tejto stránky|týchto stránok}} nie je označená na preklad.",
+ "tpt-old-pages": "Niektoré verzie {{PLURAL:$1|tejto stránky|týchto stránok}} boli označené na preklad.",
+ "translate-tag-translate-link-desc": "Preložiť túto stránku",
+ "translate-tag-markthis": "Označiť túto stránku na preklad",
+ "translate-tag-markthisagain": "Táto stránka obsahuje <span class=\"plainlinks\">[$1 {{PLURAL:$1|zmenu|zmeny|zmien}}]</span> odkedy bola naposledy <span class=\"plainlinks\">[$2 označená na preklad]</span>.",
+ "translate-tag-hasnew": "Táto stránka obsahuje <span class=\"plainlinks\">[$1 zmeny]</span>, ktoré nie sú označené na preklad.",
+ "tpt-translation-intro": "Táto stránka je <span class=\"plainlinks\">[$1 preloženou verziou]</span> stránky [[$2]] a preklad je hotový na $3 %.",
+ "tpt-translation-intro-fuzzy": "Zastarané preklady sú označené takto.",
+ "tpt-languages-legend": "Iné jazyky:",
+ "tpt-languages-nonzero": "$1 ({{PLURAL:$2|preložené|preložené|preložených}} $2 %)",
+ "tpt-target-page": "Túto stránku nemožno aktualizovať ručne.\nTáto stránka je prekladom stránky [[$1]] a preklad možno aktualizovať pomocou [$2 nástroja na preklad].",
+ "tpt-unknown-page": "Tento menný priestor je vyhradený na preklady stránok s obsahom.\nZdá sa, že stránka, ktorú sa pokúšate upravovať, nezodpovedá žiadnej stránke označenej na preklad.",
+ "tpt-render-summary": "Aktualizácia na novú verziu zdrojovej stránky",
+ "tpt-aggregategroup-save": "Uložiť"
+}
diff --git a/Translate/i18n/pagetranslation/skr-arab.json b/Translate/i18n/pagetranslation/skr-arab.json
new file mode 100644
index 00000000..c684c629
--- /dev/null
+++ b/Translate/i18n/pagetranslation/skr-arab.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Saraiki"
+ ]
+ },
+ "tpt-select-prioritylangs-reason": "سبب:",
+ "tpt-languages-legend": "ٻیاں زباناں:",
+ "tpt-languages-nonzero": "$1 ($2% ترجمہ تھی ڳیا)",
+ "tpt-tab-translate": "ترجمہ کرو",
+ "tpt-aggregategroup-save": "بچاؤ",
+ "tpt-aggregategroup-new-name": "ناں:",
+ "tpt-aggregategroup-edit-name": "ناں:",
+ "tpt-aggregategroup-edit-description": "تفصیل:",
+ "tpt-aggregategroup-update-cancel": "منسوخ",
+ "pt-movepage-new": "نواں ناں:",
+ "pt-movepage-reason": "سبب:",
+ "pt-deletepage-reason": "سبب:",
+ "pm-import-button-label": "اندر گھن آؤ",
+ "pm-savepages-button-label": "بچاؤ",
+ "pm-cancel-button-label": "منسوخ",
+ "pp-prepare-button-label": "تیار کرو",
+ "pp-save-button-label": "بچاؤ",
+ "pp-cancel-button-label": "منسوخ",
+ "tpt-generic-button": "تصدیق"
+}
diff --git a/Translate/i18n/pagetranslation/sl.json b/Translate/i18n/pagetranslation/sl.json
new file mode 100644
index 00000000..5ab3055a
--- /dev/null
+++ b/Translate/i18n/pagetranslation/sl.json
@@ -0,0 +1,269 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dbc334",
+ "Eleassar",
+ "Irena Plahuta",
+ "Janezdrilc",
+ "Smihael"
+ ]
+ },
+ "pagetranslation": "Prevajanje strani",
+ "nstab-translations": "Prevodna enota",
+ "right-pagetranslation": "Označitev redakcij strani za prevajanje",
+ "action-pagetranslation": "upravljanje prevedljivih strani",
+ "tps-edit-sourcepage-text": "Urejate izvorno prevodno stran. Zagotovite, da ste seznanjeni z naslednjo dokumentacijo:\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text Spreminjanje izvornega besedila] \n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Markup_examples Zgled označevanja za uporabo]",
+ "tps-edit-sourcepage-ve-warning-limited-text": "Nekaterih delov, ki jih je mogoče prevesti, v tem urejevalniku morda ni mogoče urejati. Za urejanje uporabite urejevalnik vira.",
+ "tps-edit-sourcepage-ve-warning-title": "Opozorilo: Nepodprta stran",
+ "tps-edit-sourcepage-ve-warning-text": "Urejate prevedljivo stran. Urejanje teh v tem urejevalniku še ni uradno podprto. Uporabite urejevalnik vira.",
+ "tps-edit-sourcepage-ve-warning-button": "V redu",
+ "tpt-section": "Prevodna enota $1",
+ "tpt-section-new": "Nova prevodna enota.\nIme: $1",
+ "tpt-section-deleted": "Prevodna enota $1",
+ "tpt-diff-old": "Prejšnje besedilo",
+ "tpt-diff-new": "Novo besedilo",
+ "tpt-submit": "Označi to različico za prevajanje",
+ "tpt-sections-oldnew": "Nove in obstoječe prevajalske enote",
+ "tpt-sections-deleted": "Izbrisane prevajalske enote",
+ "tpt-sections-template": "Prevod predloge strani",
+ "tpt-action-nofuzzy": "Ne označuj prevodov kot ohlapne",
+ "tpt-badtitle": "Dano ime strani ($1) ni veljaven naslov",
+ "tpt-nosuchpage": "Stran $1 ne obstaja",
+ "tpt-oldrevision": "$2 ni zadnja redakcija strani [[:$1]].\nZa prevod se lahko označijo samo zadnje redakcije.",
+ "tpt-notsuitable": "Stran $1 ni primerna za prevod.\nPrepričajte se, da ima oznake $2 in veljavno skladnjo.",
+ "tpt-saveok": "Stran [[:$1]] je bila označena za prevod z $2 {{PLURAL:$2|prevajalsko enoto|prevajalskima enotama|prevajalskimi enotami}}.\nStran je sedaj mogoče <span class=\"plainlinks\">[$3 prevesti]</span>.",
+ "tpt-saveok-first": "Za to stran lahko [[Special:PageMigration|uvozite že obstoječi prevod]] (če obstaja).",
+ "tpt-offer-notify": "O tej strani lahko <span class=\"plainlinks\">[ $1 obvestite prevajalce]</span>.",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|Prikaz seznama prevedljivih strani]]",
+ "tpt-showpage-intro": "Spodaj so navedene nove, obstoječe in izbrisane prevodne enote.\nPred označitvijo te redakcije za prevajanje preverite, da so spremembe prevodnih enot čim manjše, saj tako prevajalcem prihranite nepotrebno delo.",
+ "tpt-mark-summary": "Označil to različico za prevajanje",
+ "tpt-mark-nochanges": "Ni sprememb za pregled. Če to stran označite za prevod, ne boste uredili strani niti nobene obstoječe prevodne enote.",
+ "tpt-edit-failed": "Ni mogoče posodobiti strani: $1",
+ "tpt-duplicate": "Ime prevodne enote $1 se uporablja več kot enkrat.",
+ "tpt-invalid": "Ime prevodne enote $1 ne sme vsebovati podčrtaja ali poševnice.",
+ "tpt-unmarked": "Stran [[:$1]] ni več označena za prevajanje.",
+ "tpt-list-nopages": "Nobena stran ni niti označena za prevajanje niti pripravljena za označitev za prevajanje.",
+ "tpt-new-pages-title": "Strani, predlagane za prevajanje",
+ "tpt-old-pages-title": "Strani v prevajanju",
+ "tpt-other-pages-title": "Poškodovane strani",
+ "tpt-outdated-pages-title": "Strani s spremembami v teku",
+ "tpt-new-pages": "{{PLURAL:$1|Ta stran vsebuje|Ti strani vsebujeta|Te strani vsebujejo}} besedilo z oznakami za prevajanje,\nvendar trenutno ni nobena različica {{PLURAL:$1|te strani|teh strani}} označena za prevajanje.",
+ "tpt-old-pages": "Najnovejša različica {{PLURAL:$1|te strani|teh strani}} je bila označena za prevajanje.",
+ "tpt-other-pages": "{{PLURAL:$1|Stara različica te strani je bila označena|Stari različici teh strani sta bili označeni|Stare različice teh strani so bile označene}} za prevajanje,\nvendar {{PLURAL:$1|trenutne različice|trenutnih različic}} ni mogoče označiti za prevajanje.",
+ "tpt-outdated-pages": "{{PLURAL:$1|Ta stran ima|Ti strani imata|Te strani imajo}} spremembe, ki niso označene za prevod.",
+ "tpt-tag-discouraged": "odsvetovano",
+ "tpt-tag-oldsyntax": "stara skladnja",
+ "tpt-tag-no-transclusion-support": "brez podpore za prevključitev",
+ "tpt-select-prioritylangs": "Z vejico ločen seznam kod prednostnih jezikov:",
+ "tpt-select-prioritylangs-force": "Prepreči prevajanje v jezike, ki niso prednostni jeziki",
+ "tpt-select-prioritylangs-reason": "Razlog:",
+ "tpt-sections-prioritylangs": "Prednostni jeziki",
+ "tpt-sections-syntaxversion": "Različica skladnje",
+ "tpt-syntaxversion-text": "Ta stran trenutno uporablja staro različico izvorne skladnje strani, ki jo je mogoče prevesti. Nova različica bo neprevedene odseke ovila z oznako HTML, ki označuje pravilni jezik besedila. Zgled: $1. Uporabite lahko novo označevalno skladnjo $2 , da preprečite kakršno koli oblivanje na mestih, kjer to ni primerno, na primer pri prevajanju atributa <code>title</code> elementa. Na staro različico skladnje se ni mogoče vrniti.",
+ "tpt-syntaxversion-label": "Za to stran uporabite najnovejšo različico skladnje",
+ "tpt-transclusion": "Prevključitev predloge",
+ "tpt-transclusion-label": "Omogoči prevključitev s prepoznanjem prevoda za to stran",
+ "tpt-rev-mark": "Označi za prevajanje",
+ "tpt-rev-unmark": "odstrani iz prevoda",
+ "tpt-rev-discourage": "zatri",
+ "tpt-rev-encourage": "obnovi",
+ "tpt-rev-mark-tooltip": "Označi zadnjo različico strani za prevajanje.",
+ "tpt-rev-unmark-tooltip": "Odstranite stran iz prevajanja.",
+ "tpt-rev-discourage-tooltip": "Zatri nadaljnje prevode strani.",
+ "tpt-rev-encourage-tooltip": "Obnovite stran na običajni prevod.",
+ "translate-tag-translate-link-desc": "Prevedi to stran",
+ "translate-tag-markthis": "Označi to stran za prevajanje",
+ "translate-tag-markthisagain": "Ta stran ima <span class=\"plainlinks\">[$1 sprememb]</span> odkar je bila nazadnje <span class=\"plainlinks\">[$2 označena za prevajanje]</span>.",
+ "translate-tag-hasnew": "Stran vsebuje <span class=\"plainlinks\">[$1 spremembe]</span>, ki niso označene za prevajanje.",
+ "tpt-translation-intro": "Ta stran je <span class=\"plainlinks\">[$1 prevedena različica]</span> strani [[$2]]. Prevod je $3-% dokončan.",
+ "tpt-translation-intro-fuzzy": "Zastareli prevodi so označeni na tak način.",
+ "tpt-languages-legend": "Drugi jeziki:",
+ "tpt-languages-separator": "&#160;•&#32;",
+ "tpt-languages-zero": "Začni prevajanje v ta jezik",
+ "tpt-languages-nonzero": "$1 ($2 % prevedeno)",
+ "tpt-tab-translate": "Prevedi",
+ "tpt-target-page": "Te strani ni mogoče ročno posodobiti.\nTa stran je prevod strani [[$1]], njen prevod lahko posodobite z uporabo [$2 prevajalskega orodja].",
+ "tpt-unknown-page": "Ta imenski prostor je pridržan za prevode vsebinskih strani.\nStran, ki jo poskušate urediti, ne ustreza nobeni strani označeni za prevajanje.",
+ "tpt-translation-restricted": "Prevod te strani v ta jezik je preprečil administrator prevajanja.\n\nRazlog: $1",
+ "tpt-translation-restricted-no-reason": "Prevod te strani v ta jezik je preprečil administrator prevajanja.",
+ "tpt-discouraged-language-force-header": "Te strani ni mogoče prevesti v $1.",
+ "tpt-discouraged-language-force-content": "Administrator prevajanja se je odločil, da je to stran mogoče prevesti samo v $1 .",
+ "tpt-discouraged-language-header": "Za to spletno mesto prevod v $1 ni prednostna naloga.",
+ "tpt-discouraged-language-content": "Administrator prevajanja se je odločil, da bo prizadevanja za prevajanje osredinil na $1.",
+ "tpt-discouraged-language-force": "<strong>Te strani ni mogoče prevesti v $2.</strong> \n\nAdministrator prevajanja se je odločil, da je to stran mogoče prevesti samo v $3.",
+ "tpt-priority-languages": "Administrator prevajanja je prednostne jezike za to skupino nastavil na $1 .",
+ "tpt-priority-languages-force": "Administrator prevajanja je prednostne jezike za to skupino nastavil na $1. Prevajanje v druge jezike ni dovoljeno.",
+ "tpt-discouraged-translation-header": "Prevod te strani je odsvetovan",
+ "tpt-discouraged-translation-content": "Administrator prevajanja je odsvetoval prevod te strani. Stran lahko še vedno prevedete, vendar prevodi morda ne bodo uporabni.",
+ "tpt-render-summary": "Posodabljanje za ujemanje nove različice izvorne strani",
+ "aggregategroups": "Združene skupine",
+ "tpt-aggregategroup-add": "Dodaj",
+ "tpt-aggregategroup-save": "Shrani",
+ "tpt-aggregategroup-close": "Zapri",
+ "tpt-aggregategroup-add-new": "Dodajte novo združeno skupino",
+ "tpt-aggregategroup-new-name": "Ime:",
+ "tpt-aggregategroup-new-description": "Opis (neobvezno):",
+ "tpt-aggregategroup-remove-confirm": "Ali res želite izbrisati to združeno skupino?",
+ "tpt-aggregategroup-invalid-group": "Skupina ne obstaja",
+ "tpt-aggregategroup-edit-name": "Ime:",
+ "tpt-aggregategroup-edit-description": "Opis:",
+ "tpt-aggregategroup-update": "Shrani",
+ "tpt-aggregategroup-update-cancel": "Prekliči",
+ "tpt-aggregategroup-expand-all-groups": "razširi vse skupine",
+ "tpt-aggregategroup-collapse-all-groups": "strni vse skupine",
+ "tpt-aggregategroup-expand-group": "razširi skupino",
+ "tpt-aggregategroup-collapse-group": "strni skupino",
+ "tpt-invalid-group": "Neveljavna skupina",
+ "pt-parse-open": "Neizenačena značka &lt;translate>.\nPrevajalna predloga: <pre>$1</pre>",
+ "pt-parse-close": "Neizenačena značka &lt;/translate>.\nPrevajalna predloga: <pre>$1</pre>",
+ "pt-parse-nested": "Gnezdene prevodne enote &lt;translate> niso dovoljene.\nBesedilo značke: <pre>$1</pre>",
+ "pt-shake-multiple": "Več označevalcev prevodnih enot za eno prevodno enoto.\nZagotovite, da so prevodne enote ločene s praznimi vrsticami.\nBesedilo prevodne enote: <pre>$1</pre>",
+ "pt-shake-position": "Označevalci prevodnih enot na nepričakovanem položaju.\nBesedilo prevodne enote: <pre>$1</pre>",
+ "pt-shake-empty": "Prazna prevodna enota za označevalec »$1«.",
+ "log-description-pagetranslation": "Dnevnik dejanj, ki so povezana s sistemom prevajanja strani",
+ "log-name-pagetranslation": "Dnevnik prevajanja strani",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|je označil|je označila|je označil/a}} $3 za prevod",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|je odstranil|je odstranila|je odstranil/a}} $3 iz prevajalskega sistema",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|je preimenoval|je preimenovala|je preimenoval/a}} prevedljivo stran $3 v $4",
+ "logentry-pagetranslation-movenok": "$1 je pri prestavljanju strani $3 na $4 {{GENDER:$2|naletel|naletela|naletel/a}} na težavo",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|je izbrisal|je izbrisala|je izbrisal/a}} prevedljivo stran $3",
+ "logentry-pagetranslation-deletefnok": "{{GENDER:$2|Uporabniku|Uporabnici|Uporabniku/ci}} $1 ni uspelo izbrisati $3, ki pripada prevedljivi strani $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|je izbrisal|je izbrisala|je izbrisal/a}} prevodno stran $3",
+ "logentry-pagetranslation-deletelnok": "{{GENDER:$2|Uporabniku|Uporabnici|Uporabniku/ci}} $1 ni uspelo izbrisati strani $3, ki pripada prevodni strani $4",
+ "logentry-pagetranslation-encourage": "$1 je {{GENDER:$2|pregledal|pregledala|pregledal/a}} prevod $3",
+ "logentry-pagetranslation-discourage": "$1 je {{GENDER:$2|odsvetoval|odsvetovala|odsvetoval/a}} prevod $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 je s prevedljive strani $3 {{GENDER:$2|odstranil|odstranila|odstranil/a}} prednostne jezike",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|je nastavil|je nastavila|je nastavil/a}} prednostne jezike za prevedljivo stran $3 na $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|je omejil|je omejila|je omejil/a}} jezike prevedljive strani $3 na $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|je dodal|je dodala|je dodal/a}} prevedljivo stran $3 v združeno skupino $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|je odstranil|je odstranila|je odstranil/a}} prevedljivo stran $3 iz združene skupine $4",
+ "log-action-filter-pagetranslation": "Vrsta dejanja:",
+ "log-action-filter-pagetranslation-mark": "Označi za prevod",
+ "log-action-filter-pagetranslation-unmark": "Umik iz prevoda",
+ "log-action-filter-pagetranslation-move": "Prestavitve strani",
+ "log-action-filter-pagetranslation-delete": "Izbrisi strani",
+ "log-action-filter-pagetranslation-encourage": "Priporočljiv prevod",
+ "log-action-filter-pagetranslation-discourage": "Odsvetovan prevod",
+ "log-action-filter-pagetranslation-prioritylanguages": "Sprememba prednostnih jezikov",
+ "log-action-filter-pagetranslation-aggregategroups": "Sprememba združenih skupin",
+ "log-description-messagebundle": "Dnevnik dejanj, ki so povezana s sistemom skupin sporočil",
+ "log-name-messagebundle": "Dnevnik skupin sporočil",
+ "logentry-messagebundle-moveok": "$1 {{GENDER:$2|je preimenoval|je preimenovala|je preimenoval/a}} skupino sporočil $3 v $4",
+ "logentry-messagebundle-movenok": "$1 je pri prestavljanju skupine sporočil $3 na $4 {{GENDER:$2|naletel|naletela|naletel/a}} na težavo",
+ "logentry-messagebundle-deletefok": "$1 {{GENDER:$2|je izbrisal|je izbrisala|je izbrisal/a}} skupino sporočil $3",
+ "logentry-messagebundle-deletefnok": "{{GENDER:$2|Uporabniku|Uporabnici|Uporabniku/ci}} $1 ni uspelo izbrisati strani $3, ki pripada skupini sporočil $4",
+ "log-action-filter-messagebundle": "Vrsta dejanja:",
+ "log-action-filter-messagebundle-move": "Prestavitve skupin sporočil",
+ "log-action-filter-messagebundle-delete": "Izbrisi skupin sporočil",
+ "pt-movepage-title": "Prestavi prevedljivo stran $1",
+ "pt-movepage-messagebundle-title": "Prestavi skupino sporočil »$1«",
+ "pt-movepage-blockers": "Prevedljive strani ni mogoče prestaviti na novo ime zaradi {{PLURAL:$1|naslednje napake|naslednjih napak}}:",
+ "pt-movepage-block-base-invalid": "Ime ciljne prevedljive strani ni veljaven naslov.",
+ "pt-movepage-block-tp-invalid": "Naslov ciljne strani s prevodom za [[:$1]] bi bil neveljaven (predolg?).",
+ "pt-movepage-block-section-invalid": "Naslov ciljne strani »[[:$1]]« za prevodno enoto bi bil neveljaven (predolg?).",
+ "pt-movepage-block-subpage-invalid": "Naslov ciljne podstrani [[:$1]] bi bil neveljaven (predolg?).",
+ "pt-movepage-block-talkpage-invalid": "Naslov ciljne pogovorne strani »[[:$1]]« bi bil neveljaven (predolg?).",
+ "pt-movepage-block-unknown-page": "Zdi se, da stran ([[:$1]]), ki jo prestavljate, ni del prevedljive strani.",
+ "pt-movepage-block-ns-talk-unsupported": "Stran ([[:$1]]) prestavljate v imenski prostor, ki ne podpira pogovornih strani.",
+ "pt-movepage-block-rename-failed": "Pri ustvarjanju novega naslova za stran [[:$1]] je prišlo do napake",
+ "pt-movepage-list-pages": "Seznam strani za prestavitev",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Stran|Strani}} s prevodi",
+ "pt-movepage-list-section": "{{PLURAL:$1|Stran|Strani}} prevodnih enot",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Podstran|Podstrani}}, označene za prevod",
+ "pt-movepage-list-translatable-note": "Te strani je treba prestaviti ločeno.",
+ "pt-movepage-list-other": "{{PLURAL:$1|Ostala podstran|Ostali podstrani|Ostale podstrani}}",
+ "pt-movepage-list-count": "Skupno je za prestaviti $1 {{PLURAL:$1|stran|strani}}, vključujoč $2 {{PLURAL:$2|podstran|podstrani}} in $3 {{PLURAL:$3|pogovorno stran|pogovorni strani|pogovorne strani|pogovornih strani}}.",
+ "pt-movepage-page-count-limit": "Ta prevedljiva stran vsebuje več kot $1 {{PLURAL:$1|stran|strani}}. Prestavljanje toliko strani se je izkazalo za nezanesljivo. Obrnite se na sistemskega administratorja, da to storite z vzdrževalnim skriptom.",
+ "pt-movepage-list-no-pages": "Ni najdenih strani.",
+ "pt-movepage-legend": "Prestavi prevedljivo stran",
+ "pt-movepage-messagebundle-legend": "Prestavi skupino sporočil",
+ "pt-movepage-current": "Trenutno ime:",
+ "pt-movepage-new": "Novo ime:",
+ "pt-movepage-reason": "Razlog:",
+ "pt-movepage-subpages": "Prestavi vse podstrani",
+ "pt-movepage-talkpages": "Prestavi pogovorne strani",
+ "pt-movepage-talkpage-exists": "(Ima pogovorno stran)",
+ "pt-movepage-action-check": "Preveri, če je prestavitev mogoča",
+ "pt-movepage-action-perform": "Izvedi prestavitev",
+ "pt-movepage-action-other": "Spremeni cilj",
+ "pt-movepage-intro": "Ta posebna stran omogoča prestavljanje strani, ki so označene za prevajanje.\nDejanje prestavitve ne bo izvedeno takoj, saj bo potrebno prestaviti veliko strani.\nMedtem ko se strani premikajo, ne bo mogoče delovati na straneh v obravnavi.\nNeuspehi bodo zabeleženi v [[$1|dnevniku]] in jih je potrebno ročno popraviti.",
+ "pt-movepage-logreason": "Del prevedljive strani »$1«.",
+ "pt-movepage-started": "V kratkem preverite [[$1|dnevnik]] glede napak in sporočil o dokončanju.",
+ "pt-locked-page": "Stran je zaklenjena, ker se prevedljiva stran trenutno prestavlja.",
+ "pt-deletepage-lang-title": "Brisanje strani prevoda »$1«",
+ "pt-deletepage-tp-title": "Brisanje prevedljive strani »$1«",
+ "pt-deletepage-mb-title": "Brisanje skupine sporočil »$1«",
+ "pt-deletepage-invalid-title": "Določena stran ni veljavna.",
+ "pt-deletepage-invalid-text": "Izbrana stran ni niti prevedljiva stran niti stran s prevodom.",
+ "pt-deletepage-action-check": "Navedi strani za izbris",
+ "pt-deletepage-action-perform": "Izvedi izbris",
+ "pt-deletepage-action-other": "Spremeni cilj",
+ "pt-deletepage-lang-legend": "Izbriši stran prevoda",
+ "pt-deletepage-tp-legend": "Izbriši prevedljivo stran",
+ "pt-deletepage-mb-legend": "Izbriši skupino sporočil",
+ "pt-deletepage-any-legend": "Izbriši stran za prevod, sveženj sporočil ali prevod strani",
+ "pt-deletepage-current": "Naslov strani:",
+ "pt-deletepage-reason": "Razlog:",
+ "pt-deletepage-reason-details": "Drug/dodaten razlog:",
+ "pt-deletepage-reason-other": "Drug razlog",
+ "pt-deletepage-subpages": "Izbriši vse podstrani",
+ "pt-deletepage-list-pages": "Seznam strani za izbris",
+ "pt-deletepage-list-translation": "Strani prevodov",
+ "pt-deletepage-list-section": "Strani prevodnih enot",
+ "pt-deletepage-list-other": "Druge podstrani",
+ "pt-deletepage-list-count": "Skupno je za izbrisati $1 {{PLURAL:$1|stran|strani}} in $2 {{PLURAL:$2|podstran|podstrani}}.",
+ "pt-deletepage-list-no-pages": "Ni najdenih strani.",
+ "pt-deletepage-full-logreason": "Del prevedljive strani »$1«.",
+ "pt-deletepage-lang-logreason": "Del strani prevoda »$1«.",
+ "pt-deletepage-started": "Prosimo, preverite [[$1|dnevnik]] za napake in sporočilo o dokončanju.",
+ "pt-deletepage-intro": "Ta posebna stran vam omogoča izbris celotne prevedljive strani, svežnja sporočil ali posamezne strani s prevodom v nekem jeziku.\nIzbris ne bo opravljen takoj, saj je treba izbrisati tudi vse strani, ki so od njih odvisne.\nNeuspehi bodo zabeleženi v [[$1|ustreznem dnevniku]] in jih morate urediti ročno.",
+ "pagemigration": "Prenos prevedene strani",
+ "pagemigration-summary": "Določite prevodno stran in obnovite vse prevode, narejene preden je bil na tej strani omogočen sistem Prevajalnik.",
+ "pm-import-button-label": "Uvozi",
+ "pm-savepages-button-label": "Shrani",
+ "pm-cancel-button-label": "Prekliči",
+ "pm-page-does-not-exist": "$1 ne obstaja.",
+ "pm-old-translations-missing": "$1 ne vsebuje starih prevodov.",
+ "pm-extra-units-warning": "Morda so prisotne dodatne enote. Prosimo, pravilno povežite izvorno in prevodno enoto.",
+ "pm-pagename-missing": "Vnesite ime strani.",
+ "pm-add-icon-hover-text": "Dodajte enoto spodaj",
+ "pm-swap-icon-hover-text": "Zamenjajte z enoto spodaj",
+ "pm-delete-icon-hover-text": "Izbrišite enoto",
+ "pm-pagetitle-placeholder": "Vnesite naslov strani",
+ "pm-pagetitle-invalid": "Selitev strani deluje samo na prevodnih straneh, na primer »Stran/de«. Navedeni naslov ni veljaven naslov.",
+ "pm-pagetitle-missing": "Prosimo, vnesite naslov strani.",
+ "pm-langcode-missing": "Selitev strani deluje samo na prevodnih straneh, na primer »Page/de«. Navedeni naslov ni prevodna stran.",
+ "pm-summary-import": "Prevod, uvožen z uporabo [[Special:PageMigration|selitve strani]]",
+ "pm-on-import-message-text": "Stari prevodi so bili uvoženi. Uporabite možnosti dodajanja, zamenjave in brisanja, da prilagodite prevodne enote, in kliknite gumb »{{int:pm-savepages-button-label}}«, da jih shranite. Kliknite gumb »{{int:pm-cancel-button-label}}«, da jih zavržete.",
+ "pm-on-save-message-text": "Prevodne enote so bile shranjene. Zdaj lahko vnesete naslov nove prevodne strani, da jo preselite, ali spremenite spodnje enote in shranite novo redakcijo.",
+ "pm-pagetitle-not-translatable": "$1 ni del prevodne strani.",
+ "pm-translation-unit-fetch-failed": "Pri pridobivanju prevodnih enot za to stran je prišlo do napake.",
+ "tpt-translate-title": "Dovoli prevod naslova strani",
+ "pp-save-summary": "Stran je pripravljena za prevajanje",
+ "pagepreparation": "Pripravite stran za prevajanje",
+ "pagepreparation-summary": "Navedite naslov strani za pripravo za prevod.",
+ "pp-pagename-placeholder": "Vnesite naslov strani",
+ "pp-prepare-button-label": "Pripravi",
+ "pp-save-button-label": "Objavi",
+ "pp-cancel-button-label": "Prekliči",
+ "pp-save-message": "Stran je objavljena. Lahko jo [$1 urejate].",
+ "pp-prepare-message": "Stran je pripravljena za prevod. Glejte razliko spodaj. Če je v redu, kliknite gumb »{{int:pp-save-button-label}}«!",
+ "pp-already-prepared-message": "Videti je, da je stran že pripravljena za prevod. V primerjavi s prejšnjo različico ni sprememb.",
+ "pp-diff-error": "Pri pridobivanju razlike iz strežnika je prišlo do napake.",
+ "pp-pagename-missing": "Vnesite ime strani.",
+ "pp-diff-old-header": "Izvirno besedilo",
+ "pp-diff-new-header": "Pripravljeno besedilo",
+ "tpt-unlink-confirm": "Potrdite, da res želite odstraniti to stran iz prevajalskega sistema.\nIzbirnik jezika in prevedena imena strani ne bodo več delovali.\nPrevodne strani bo mogoče urejati.",
+ "tpt-unlink-button": "Odstrani iz prevoda",
+ "tpt-unlink-summary": "Stran je bila odstranjena iz prevajanja",
+ "tpt-generic-confirm": "Potrdi dejanje.",
+ "tpt-generic-button": "Potrdi",
+ "tpt-validation-not-insertable": "Ime prevodne spremenljivke »$1« ne deluje kot možnost vstavljanja v vmesniku za prevajanje. Izogibajte se uporabi posebnih znakov.",
+ "tpt-validation-name-reuse": "Prevodna spremenljivka »$1« je definirana večkrat z različno vsebino. Spremenite imena spremenljivk, da bodo v prevodni enoti enolična.",
+ "visualeditor-annotations-translate-start": "Začetek vsebine za prevod",
+ "visualeditor-annotations-translate-end": "Konec vsebine za prevod",
+ "visualeditor-annotations-translate-description": "Ta obseg je označen kot prevedljiv. Upoštevajte smernice za [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text spreminjanje izvornega besedila].",
+ "visualeditor-annotations-tvar-start": "Začetek neprevedljive vsebine",
+ "visualeditor-annotations-tvar-end": "Konec neprevedljive vsebine",
+ "visualeditor-annotations-tvar-description": "Ta obseg je označen kot neprevedljiv. Za več informacij glejte stran [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Segmentation Segmentacija izvornega besedila] (v angleščini)."
+}
diff --git a/Translate/i18n/pagetranslation/sli.json b/Translate/i18n/pagetranslation/sli.json
new file mode 100644
index 00000000..61d60d87
--- /dev/null
+++ b/Translate/i18n/pagetranslation/sli.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Äberlausitzer"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2 % iebersetzt)"
+}
diff --git a/Translate/i18n/pagetranslation/smn.json b/Translate/i18n/pagetranslation/smn.json
new file mode 100644
index 00000000..42978150
--- /dev/null
+++ b/Translate/i18n/pagetranslation/smn.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "Seipinne",
+ "Trondtr",
+ "Yupik"
+ ]
+ },
+ "tps-edit-sourcepage-ve-warning-button": "OK",
+ "tpt-select-prioritylangs-reason": "Suijâ:",
+ "tpt-languages-legend": "Eres kielah:",
+ "tpt-languages-nonzero": "$1 ($2 % jurgâlum)",
+ "tpt-tab-translate": "Jurgâl",
+ "tpt-aggregategroup-add": "Lasseet",
+ "tpt-aggregategroup-save": "Vuorkkii",
+ "tpt-aggregategroup-new-name": "Nommâ:",
+ "tpt-aggregategroup-edit-name": "Nommâ:",
+ "tpt-aggregategroup-update": "Vuorkkii",
+ "tpt-aggregategroup-update-cancel": "Jooskâ",
+ "pt-movepage-reason": "Suijâ:",
+ "pt-movepage-subpages": "Sirde puoh vyelisiijđoid",
+ "pt-deletepage-reason": "Suijâ:",
+ "pt-deletepage-reason-other": "Eres suijâ",
+ "pt-deletepage-subpages": "Siho puoh vyelisiijđoid",
+ "pt-deletepage-list-other": "Eres vyelisiijđoh",
+ "pm-savepages-button-label": "Vuorkkii",
+ "pm-cancel-button-label": "Jooskâ",
+ "pp-save-button-label": "Almostit",
+ "pp-cancel-button-label": "Jooskâ"
+}
diff --git a/Translate/i18n/pagetranslation/sms.json b/Translate/i18n/pagetranslation/sms.json
new file mode 100644
index 00000000..c0851e39
--- /dev/null
+++ b/Translate/i18n/pagetranslation/sms.json
@@ -0,0 +1,45 @@
+{
+ "@metadata": {
+ "authors": [
+ "Yupik"
+ ]
+ },
+ "pagetranslation": "Seeidai jåårǥlâttmõš",
+ "tps-edit-sourcepage-ve-warning-button": "OK",
+ "tpt-edit-failed": "Seeid peiʹvvummuš ij oʹnnstam: $1",
+ "tpt-select-prioritylangs-reason": "Mäinn:",
+ "tpt-rev-encourage": "maaccât",
+ "translate-tag-translate-link-desc": "Jåårǥlââʹtt tän seeid",
+ "tpt-languages-legend": "Jeeʹres ǩiõl:",
+ "tpt-tab-translate": "Jåårǥlââʹtt",
+ "tpt-aggregategroup-add": "Lââʹzzet",
+ "tpt-aggregategroup-save": "Ruõkk",
+ "tpt-aggregategroup-new-name": "Nõmm:",
+ "tpt-aggregategroup-new-description": "Deskriptt (vaʹlljeemnallšem):",
+ "tpt-aggregategroup-edit-name": "Nõmm:",
+ "tpt-aggregategroup-edit-description": "Deskriptt:",
+ "tpt-aggregategroup-update": "Ruõkk",
+ "tpt-aggregategroup-update-cancel": "Jõõsk",
+ "pt-movepage-list-other": "Jeeʹres {{PLURAL:$1|vueʹllseidd|vueʹllseeid|vueʹllseiddad}}",
+ "pt-movepage-new": "Ođđ nõmm:",
+ "pt-movepage-reason": "Mäinn:",
+ "pt-movepage-subpages": "Seeʹrd puk vueʹllseeidaid",
+ "pt-movepage-talkpages": "Seeʹrd saǥstõõllâmseeidaid",
+ "pt-movepage-action-perform": "Seeʹrd",
+ "pt-deletepage-action-perform": "Jaukkâd",
+ "pt-deletepage-current": "Seiddnõmm:",
+ "pt-deletepage-reason": "Mäinn:",
+ "pt-deletepage-reason-details": "Jeeʹres mäinn leʹbe lââʹssmäinn:",
+ "pt-deletepage-reason-other": "Jeeʹres mäinn",
+ "pt-deletepage-subpages": "Jaukkâd puk vueʹllseeidaid",
+ "pt-deletepage-list-other": "Jeeʹres vueʹllseeid",
+ "pm-savepages-button-label": "Ruõkk",
+ "pm-cancel-button-label": "Jõõsk",
+ "pm-old-translations-missing": "Seeidast $1 jie leäkku vuäʹmm jåårǥlõõzz.",
+ "pm-pagename-missing": "Ǩeeʹrjet seiddnõõm.",
+ "pp-pagename-placeholder": "Ǩeeʹrjet seiddnõõm",
+ "pp-save-button-label": "Õlmstââʹtt",
+ "pp-cancel-button-label": "Jõõsk",
+ "pp-pagename-missing": "Ǩeeʹrjet seiddnõõm.",
+ "pp-diff-old-header": "Käivvteʹkstt"
+}
diff --git a/Translate/i18n/pagetranslation/so.json b/Translate/i18n/pagetranslation/so.json
new file mode 100644
index 00000000..2dcd606a
--- /dev/null
+++ b/Translate/i18n/pagetranslation/so.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Abdullahi",
+ "Abshirdheere"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% la turjumay)"
+}
diff --git a/Translate/i18n/pagetranslation/sq.json b/Translate/i18n/pagetranslation/sq.json
new file mode 100644
index 00000000..4a194f9c
--- /dev/null
+++ b/Translate/i18n/pagetranslation/sq.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ammartivari",
+ "Besnik b",
+ "Eraldkerciku",
+ "Liridon",
+ "MuratTheTurkish",
+ "Olsi",
+ "Vanished 456321456"
+ ]
+ },
+ "tpt-languages-legend": "Gjuhë të tjera:",
+ "tpt-languages-nonzero": "$1 ($2% i përkthyer)",
+ "pt-shake-multiple": "Shënues të shumëfishtë të njësisë së përkthimit për një njësi përkthimi.\nSigurohuni që njësitë e përkthimit të ndahen me vija të zbrazëta.\nTeksti i njësisë së përkthimit: <pre> $1 </pre>",
+ "pt-deletepage-reason": "Arsyeja:"
+}
diff --git a/Translate/i18n/pagetranslation/sr-ec.json b/Translate/i18n/pagetranslation/sr-ec.json
new file mode 100644
index 00000000..40b04e70
--- /dev/null
+++ b/Translate/i18n/pagetranslation/sr-ec.json
@@ -0,0 +1,183 @@
+{
+ "@metadata": {
+ "authors": [
+ "Acamicamacaraca",
+ "BadDog",
+ "Kizule",
+ "MarinaSimic",
+ "Milicevic01",
+ "Obsuser",
+ "Rancher",
+ "Vlad5250",
+ "Zoranzoki21",
+ "Милан Јелисавчић",
+ "Михајло Анђелковић",
+ "Сербијана"
+ ]
+ },
+ "pagetranslation": "Превођење странице",
+ "right-pagetranslation": "означавање верзија страница за превођење",
+ "action-pagetranslation": "управљате преводивим страницама",
+ "tps-edit-sourcepage-text": "Уређујете изворну (оригиналну) страницу. Прво се упознајте са следећом документацијом:\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text Мењање изворног текста]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Markup_examples Example of markup to use]",
+ "tps-edit-sourcepage-ve-warning-title": "Упозорење: Неподржана страница",
+ "tps-edit-sourcepage-ve-warning-button": "У реду",
+ "tpt-section": "Јединица превода $1",
+ "tpt-section-new": "Нова јединица превода.\nИме: $1",
+ "tpt-section-deleted": "Јединица превода $1",
+ "tpt-diff-old": "Претходни текст",
+ "tpt-diff-new": "Нови текст",
+ "tpt-submit": "Означи ову верзију за превођење",
+ "tpt-sections-oldnew": "Нове и постојеће јединице превођења",
+ "tpt-sections-deleted": "Избрисане јединице превођења",
+ "tpt-sections-template": "Шаблон странице за превођење",
+ "tpt-action-nofuzzy": "Не поништавајте преводе",
+ "tpt-badtitle": "Задато име странице ($1) није важећи наслов",
+ "tpt-nosuchpage": "Страница „$1” не постоји",
+ "tpt-saveok": "Страница [[:$1]] је означена за превођење са $2 {{PLURAL:$2|јединицом превођења|јединице превођења|јединица превођења}}. Страница сада може да буде <span class=\"plainlinks\">[$3 преведена]</span>.",
+ "tpt-offer-notify": "Можете да <span class=\"plainlinks\">[$1 обавестите преводиоце]</span> о овој страници.",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|Прикажи списак преводивих страница]]",
+ "tpt-showpage-intro": "Испод нових, постојеће и избрисане преводилачке јединице су наведене.\nПре него што означите ову верзију за превод, проверите да ли су измене преводилачких јединица сведене на минимум да бисте избегли непотребан рад за преводиоце.",
+ "tpt-mark-nochanges": "Нема промена за преглед. Означавање ове странице за превођење неће да уреди страницу нити било коју постојећу јединицу превођења.",
+ "tpt-edit-failed": "Није могуће ажурирати страницу: $1",
+ "tpt-unmarked": "Страница [[:$1]] није више означена за превођење.",
+ "tpt-new-pages-title": "Странице предложене за превођење",
+ "tpt-old-pages-title": "Странице за превођење",
+ "tpt-other-pages-title": "Покварене странице",
+ "tpt-outdated-pages-title": "Странице с изменама на чекању",
+ "tpt-new-pages": "{{PLURAL:$1|Ова страница садржи|Ове странице садрже}} текст за ознакама за превођење, али нема верзије {{PLURAL:$1|ове странице која је|ове странице које су}} тренутно {{PLURAL:$1|означена|означене}} за превођење.",
+ "tpt-old-pages": "Последња верзија {{PLURAL:$1|ове странице је означена|ових страница су означене}} за превођење.",
+ "tpt-other-pages": "{{PLURAL:$1|Старија верзија ове странице је означена|Старије верзије ових страница су означене}} за превођење, \nали {{PLURAL:$1|најновија верзија не може да буде означена|најновије верзије не могу да буду означене}} за превођење.",
+ "tpt-outdated-pages": "{{PLURAL:$1|Ова страница има|Ове странице имају}} измене које нису означене за превођење.",
+ "tpt-tag-discouraged": "непрепоручено",
+ "tpt-tag-oldsyntax": "стара синтакса",
+ "tpt-select-prioritylangs-force": "Спречи превођење на језике који нису приоритетни",
+ "tpt-select-prioritylangs-reason": "Разлог:",
+ "tpt-sections-prioritylangs": "Приоритетни језици",
+ "tpt-sections-syntaxversion": "Верзија синтаксе",
+ "tpt-rev-mark": "означи за превођење",
+ "tpt-rev-unmark": "уклони из система превођења",
+ "tpt-rev-discourage": "непрепоручено",
+ "tpt-rev-encourage": "врати",
+ "tpt-rev-mark-tooltip": "Означите најновију верзију ове странице за превођење.",
+ "tpt-rev-unmark-tooltip": "Уклоните ову страницу из система превођења.",
+ "tpt-rev-discourage-tooltip": "Поставите ову страницу као непрепоручену за даљње превођење.",
+ "tpt-rev-encourage-tooltip": "Вратите ову страницу за нормално превођење.",
+ "translate-tag-translate-link-desc": "Преведите ову страницу",
+ "translate-tag-markthis": "Означи страницу за превођење",
+ "translate-tag-markthisagain": "Ова страница има <span class=\"plainlinks\">[$1 измена]</span> од када је последњи пут <span class=\"plainlinks\">[$2 означена за превођење]</span>.",
+ "translate-tag-hasnew": "Ова страница садржи <span class=\"plainlinks\">[$1 измене]</span> које нису означене за превођење.",
+ "tpt-translation-intro": "Ово је <span class=\"plainlinks\">[$1 преведена верзија]</span> странице [[$2]]. Превод је $3% завршен.",
+ "tpt-translation-intro-fuzzy": "Застарели преводи су означени овако.",
+ "tpt-languages-legend": "Други језици:",
+ "tpt-languages-separator": "&#160;•&#32;",
+ "tpt-languages-zero": "Започните превођење на овом језику",
+ "tpt-languages-nonzero": "$1 ($2% преведено)",
+ "tpt-tab-translate": "Преведи",
+ "tpt-discouraged-language-force-header": "Ова страница не може да буде преведена на $1.",
+ "tpt-discouraged-language-header": "Превођење ове странице на $1 није приоритет.",
+ "tpt-discouraged-language-force": "<strong>Ова страница се не може превести на $2.</strong>\n\nАдминистратор превођења је одредио да се ова страница може превести само на: $3.",
+ "aggregategroups": "Збирне групе",
+ "tpt-aggregategroup-add": "Додај",
+ "tpt-aggregategroup-save": "Сачувај",
+ "tpt-aggregategroup-close": "Затвори",
+ "tpt-aggregategroup-new-name": "Име:",
+ "tpt-aggregategroup-new-description": "Опис (опционално):",
+ "tpt-aggregategroup-invalid-group": "Група не постоји",
+ "tpt-aggregategroup-edit-name": "Име:",
+ "tpt-aggregategroup-edit-description": "Опис:",
+ "tpt-aggregategroup-update": "Сачувај",
+ "tpt-aggregategroup-update-cancel": "Откажи",
+ "tpt-invalid-group": "Неважећа група",
+ "pt-shake-multiple": "Више маркера јединице превођења за једну јединицу превођења.\nУверите се да су преводилачке јединице раздвојене празним линијама.\nТекст јединице превођења: <pre>$1</pre>",
+ "pt-shake-position": "Маркери јединице превођења у неочекиваној позицији.\nТекст јединице превода: <pre>$1</pre>",
+ "log-description-pagetranslation": "Дневник радњи у вези с преводилачким системом страница",
+ "log-name-pagetranslation": "Дневник превођења страница",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|означио|означила}} је страницу „$3” за превођење",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|уклонио|уклонила}} је страницу „$3” из система превођења",
+ "logentry-pagetranslation-deletefok": "$1 је {{GENDER:$2|избрисао|избрисала}} преводиву страницу $3",
+ "logentry-pagetranslation-deletelok": "$1 је {{GENDER:$2|избрисао|избрисала}} преводиву страницу $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 је {{GENDER:$2|одредио|одредила}} приоритетне језике за преводиву страницу $3: $5",
+ "log-action-filter-pagetranslation": "Врста радње:",
+ "log-action-filter-pagetranslation-mark": "Означавање за превођење",
+ "log-action-filter-pagetranslation-unmark": "Уклањање из система превођења",
+ "log-action-filter-pagetranslation-move": "Премештања страница",
+ "log-action-filter-pagetranslation-delete": "Брисања страница",
+ "log-action-filter-pagetranslation-encourage": "Подстицање на превођење",
+ "log-action-filter-pagetranslation-discourage": "Одвраћање од превођења",
+ "log-action-filter-pagetranslation-prioritylanguages": "Измена приоритетних језика",
+ "log-action-filter-messagebundle": "Врста радње:",
+ "pt-movepage-title": "Премештање преводиве странице „$1”",
+ "pt-movepage-block-base-invalid": "Циљ имена преводиве странице није важећи наслов.",
+ "pt-movepage-block-tp-invalid": "Наслов циљне странице за превођење за „[[:$1]]” био би неважећи (предугачак?).",
+ "pt-movepage-block-section-invalid": "Наслов циљне странице за јединицу превода „[[:$1]]” био би неважећи (предугачак?).",
+ "pt-movepage-block-subpage-invalid": "Наслов циљне подстранице за [[:$1]] био би неисправан (предугачак?).",
+ "pt-movepage-list-pages": "Списак страница за премештање",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Страница|Странице}} за превођење",
+ "pt-movepage-list-section": "Јединица превода {{PLURAL:$1|странице|страница}}",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Подстраница|Подстранице}} означене за превођење",
+ "pt-movepage-list-translatable-note": "Ове странице морају да се засебно преместе.",
+ "pt-movepage-list-other": "{{PLURAL:$1|Друга подстраница|Друге подстранице}}",
+ "pt-movepage-list-count": "Укупно $1 {{PLURAL:$1|страница|странице|страница}}, укључујући $2 {{PLURAL:$2|подстраница|подстранице|подстраница}} и $3 {{PLURAL:$2|страница|странице|страница}} за разговор за премештање.",
+ "pt-movepage-list-no-pages": "Нема пронађених страница.",
+ "pt-movepage-legend": "Премести преводиву страницу",
+ "pt-movepage-current": "Тренутно име:",
+ "pt-movepage-new": "Ново име:",
+ "pt-movepage-reason": "Разлог:",
+ "pt-movepage-subpages": "Премести све подстранице",
+ "pt-movepage-action-check": "Провери да ли је премештање изводљиво",
+ "pt-movepage-action-perform": "Изврши премештање",
+ "pt-movepage-action-other": "Промени циљ",
+ "pt-movepage-logreason": "Део преводиве странице \"$1\"",
+ "pt-movepage-started": "У међувремену, проверите [[$1|дневник превођења странице]] да би се пронашле евентуалне грешке и поруке завршетка.",
+ "pt-deletepage-lang-title": "Брисање преводиве странице \"$1\"",
+ "pt-deletepage-tp-title": "Брисање преводиве странице \"$1\"",
+ "pt-deletepage-invalid-title": "Наведена страница није важећа.",
+ "pt-deletepage-invalid-text": "Наведена страница није преводива страница нити страница превода.",
+ "pt-deletepage-action-check": "Наведи странице за брисање",
+ "pt-deletepage-action-perform": "Изврши брисање",
+ "pt-deletepage-action-other": "Промени циљ",
+ "pt-deletepage-lang-legend": "Избриши страницу превода",
+ "pt-deletepage-tp-legend": "Избриши преводиву страницу",
+ "pt-deletepage-any-legend": "Избришите преводиву страницу или страницу превода",
+ "pt-deletepage-current": "Име странице:",
+ "pt-deletepage-reason": "Разлог:",
+ "pt-deletepage-reason-other": "Други разлог",
+ "pt-deletepage-subpages": "Избриши све подстранице",
+ "pt-deletepage-list-pages": "Листа страница за брисање",
+ "pt-deletepage-list-translation": "Странице за превођење",
+ "pt-deletepage-list-section": "Странице за јединицу превода",
+ "pt-deletepage-list-other": "Друге подстранице",
+ "pt-deletepage-list-count": "Укупно $1 {{PLURAL:$1|страница|странице|страница}} за брисање и $2 {{PLURAL:$2|подстраница|подстранице|подстраница}}.",
+ "pt-deletepage-list-no-pages": "Није пронађена ниједна страница.",
+ "pt-deletepage-full-logreason": "Део преводиве странице \"$1\"",
+ "pt-deletepage-lang-logreason": "Део странице превода \"$1\"",
+ "pagemigration": "Миграција странице за превођење",
+ "pm-import-button-label": "Увези",
+ "pm-savepages-button-label": "Сачувај",
+ "pm-cancel-button-label": "Откажи",
+ "pm-page-does-not-exist": "$1 не постоји.",
+ "pm-old-translations-missing": "$1 не садржи старе преводе.",
+ "pm-pagename-missing": "Унесите име странице.",
+ "pm-add-icon-hover-text": "Додај јединицу испод",
+ "pm-swap-icon-hover-text": "Замени са јединицом испод",
+ "pm-delete-icon-hover-text": "Избриши јединицу",
+ "pm-pagetitle-placeholder": "Унесите наслов странице",
+ "pm-pagetitle-missing": "Унесите наслов странице.",
+ "tpt-translate-title": "Дозволи превођење наслова странице",
+ "pp-save-summary": "Страница је припремљена за превођење",
+ "pagepreparation": "Припрема страница за превођење",
+ "pp-pagename-placeholder": "Унесите име странице",
+ "pp-prepare-button-label": "Припреми",
+ "pp-save-button-label": "Објави",
+ "pp-cancel-button-label": "Откажи",
+ "pp-save-message": "Страница је објављена. Можете је [$1 уредити].",
+ "pp-prepare-message": "Ова страница је припремљена за превођење. Погледајте доњу разлику измена. Кликните на дугме „{{int:pp-save-button-label}}” ако је све у реду!",
+ "pp-pagename-missing": "Унесите име странице.",
+ "pp-diff-old-header": "Изворни текст",
+ "pp-diff-new-header": "Припремљени текст",
+ "tpt-unlink-confirm": "Потврдите да стварно желите да уклоните ову страницу из система превођења.\nБирач језика и преведена имена страница ће престати са радом.\nСтранице за превођење ће постати уредиве.",
+ "tpt-unlink-button": "Уклони из система превођења",
+ "tpt-unlink-summary": "Уклоњена страница из система превођења",
+ "tpt-generic-confirm": "Потврдите радњу.",
+ "tpt-generic-button": "Потврди"
+}
diff --git a/Translate/i18n/pagetranslation/sr-el.json b/Translate/i18n/pagetranslation/sr-el.json
new file mode 100644
index 00000000..331b14a5
--- /dev/null
+++ b/Translate/i18n/pagetranslation/sr-el.json
@@ -0,0 +1,156 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kizule",
+ "Michaello",
+ "Milicevic01",
+ "Obsuser",
+ "Rancher",
+ "Tacsipacsi",
+ "Zoranzoki21"
+ ]
+ },
+ "pagetranslation": "Prevođenje stranice",
+ "right-pagetranslation": "označavanje verzija stranica za prevođenje",
+ "action-pagetranslation": "upravljate prevodivim stranicama",
+ "tpt-section": "Jedinica prevoda $1",
+ "tpt-section-new": "Nova jedinica prevoda.\nIme: $1",
+ "tpt-section-deleted": "Jedinica prevoda $1",
+ "tpt-diff-old": "Prethodni tekst",
+ "tpt-diff-new": "Novi tekst",
+ "tpt-submit": "Označi ovu verziju za prevođenje",
+ "tpt-sections-oldnew": "Nove i postojeće jedinice prevođenja",
+ "tpt-sections-deleted": "Izbrisane jedinice prevođenja",
+ "tpt-sections-template": "Šablon stranice za prevođenje",
+ "tpt-action-nofuzzy": "Ne poništavajte prevode",
+ "tpt-badtitle": "Zadato ime stranice ($1) nije važeći naslov",
+ "tpt-nosuchpage": "Stranica „$1” ne postoji",
+ "tpt-saveok": "Stranica [[:$1]] je označena za prevođenje sa $2 {{PLURAL:$2|jedinicom prevođenja|jedinice prevođenja|jedinica prevođenja}}. Stranica sada može da bude <span class=\"plainlinks\">[$3 prevedena]</span>.",
+ "tpt-offer-notify": "Možete da <span class=\"plainlinks\">[$1 obavestite prevodioce]</span> o ovoj stranici.",
+ "tpt-showpage-intro": "Ispod novih, postojeće i izbrisane prevodilačke jedinice su navedene.\nPre nego što označite ovu verziju za prevod, proverite da li su izmene prevodilačkih jedinica svedene na minimum da biste izbegli nepotreban rad za prevodioce.",
+ "tpt-mark-nochanges": "Nema promena za pregled. Označavanje ove stranice za prevođenje neće da uredi stranicu niti bilo koju postojeću jedinicu prevođenja.",
+ "tpt-edit-failed": "Nije moguće ažurirati stranicu: $1",
+ "tpt-unmarked": "Stranica $1 nije više označena za prevođenje.",
+ "tpt-new-pages-title": "Stranice predložene za prevođenje",
+ "tpt-old-pages-title": "Stranice za prevođenje",
+ "tpt-other-pages-title": "Pokvarene stranice",
+ "tpt-new-pages": "{{PLURAL:$1|Ova stranica sadrži|Ove stranice sadrže}} tekst za oznakama za prevođenje, ali nema verzije {{PLURAL:$1|ove stranice koja je|ove stranice koje su}} trenutno {{PLURAL:$1|označena|označene}} za prevođenje.",
+ "tpt-old-pages": "{{PLURAL:$1|Neka verzija ove stranice je označena|Neke verzije ovih stranica su označene}} za prevođenje.",
+ "tpt-other-pages": "{{PLURAL:$1|Starija verzija ove stranice je označena|Starije verzije ovih stranica su označene}} za prevođenje, \nali {{PLURAL:$1|najnovija verzija|najnovije verzije}} ne mogu da budu označene za prevođenje.",
+ "tpt-select-prioritylangs-force": "Spreči prevođenje na jezike koji nisu prioritetni",
+ "tpt-select-prioritylangs-reason": "Razlog:",
+ "tpt-sections-prioritylangs": "Prioritetni jezici",
+ "tpt-rev-mark": "označi za prevođenje",
+ "tpt-rev-unmark": "ukloni iz sistema prevođenja",
+ "tpt-rev-discourage": "nepreporučeno",
+ "tpt-rev-encourage": "vrati",
+ "tpt-rev-mark-tooltip": "Označite najnoviju verziju ove stranice za prevođenje.",
+ "tpt-rev-unmark-tooltip": "Uklonite ovu stranicu iz sistema prevođenja.",
+ "tpt-rev-discourage-tooltip": "Postavite ovu stranicu kao nepreporučenu za daljnje prevođenje.",
+ "tpt-rev-encourage-tooltip": "Vratite ovu stranicu za normalno prevođenje.",
+ "translate-tag-translate-link-desc": "Prevedite ovu stranicu",
+ "translate-tag-markthis": "Označi stranicu za prevođenje",
+ "translate-tag-hasnew": "Ova stranica sadrži <span class=\"plainlinks\">[$1 izmene]</span> koje nisu označene za prevođenje.",
+ "tpt-translation-intro": "Ovo je <span class=\"plainlinks\">[$1 prevedena verzija]</span> stranice [[$2]]. Prevod je $3% završen.",
+ "tpt-translation-intro-fuzzy": "Zastareli prevodi su označeni ovako.",
+ "tpt-languages-legend": "Drugi jezici:",
+ "tpt-languages-separator": "&#160;•&#32;",
+ "tpt-languages-zero": "Započnite prevođenje na ovom jeziku",
+ "tpt-languages-nonzero": "$1 ($2% prevedeno)",
+ "tpt-tab-translate": "Prevođenje",
+ "tpt-discouraged-language-header": "Prevođenje ove stranice na $1 nije prioritet.",
+ "tpt-discouraged-language-force": "<strong>Ova stranica se ne može prevesti na $2.</strong>\n\nAdministrator prevođenja je odredio da se ova stranica može prevesti samo na: $3.",
+ "aggregategroups": "Zbirne grupe",
+ "tpt-aggregategroup-add": "Dodaj",
+ "tpt-aggregategroup-save": "Sačuvaj",
+ "tpt-aggregategroup-new-name": "Ime:",
+ "tpt-aggregategroup-new-description": "Opis (opcionalno):",
+ "tpt-aggregategroup-invalid-group": "Grupa ne postoji",
+ "tpt-aggregategroup-edit-name": "Ime:",
+ "tpt-aggregategroup-edit-description": "Opis:",
+ "tpt-aggregategroup-update": "Sačuvaj",
+ "tpt-aggregategroup-update-cancel": "Otkaži",
+ "tpt-invalid-group": "Nevažeća grupa",
+ "pt-shake-multiple": "Više markera jedinice prevođenja za jednu jedinicu prevođenja.\nTekst jedinice prevođenja: <pre>$1</pre>",
+ "pt-shake-position": "Markeri jedinice prevođenja u neočekivanoj poziciji.\nTekst jedinice prevoda: <pre>$1</pre>",
+ "log-description-pagetranslation": "Dnevnik akcija vezanih za prevodilački sistem stranica",
+ "log-name-pagetranslation": "Dnevnik prevođenja stranica",
+ "logentry-pagetranslation-mark": "$1 je {{GENDER:$2|označio|označila}} stranicu $3 za prevođenje",
+ "logentry-pagetranslation-unmark": "$1 je {{GENDER:$2|uklonio|uklonila}} stranicu $3 iz sistema prevođenja",
+ "logentry-pagetranslation-deletefok": "$1 je {{GENDER:$2|izbrisao|izbrisala}} prevodivu stranicu $3",
+ "logentry-pagetranslation-deletelok": "$1 je {{GENDER:$2|izbrisao|izbrisala}} prevodivu stranicu $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 je {{GENDER:$2|odredio|odredila}} prioritetne jezike za prevodivu stranicu $3: $5",
+ "log-action-filter-pagetranslation": "Tip radnje:",
+ "log-action-filter-pagetranslation-mark": "Označavanje za prevođenje",
+ "log-action-filter-pagetranslation-unmark": "Uklanjanje iz sistema prevođenja",
+ "log-action-filter-pagetranslation-move": "Premeštanja stranica",
+ "log-action-filter-pagetranslation-delete": "Brisanja stranica",
+ "log-action-filter-pagetranslation-encourage": "Podsticanje na prevođenje",
+ "log-action-filter-pagetranslation-discourage": "Odvraćanje od prevođenja",
+ "log-action-filter-pagetranslation-prioritylanguages": "Izmena prioritetnih jezika",
+ "pt-movepage-title": "Premeštanje prevodive stranice „$1”",
+ "pt-movepage-block-base-invalid": "Cilj imena prevodive stranice nije važeći naslov.",
+ "pt-movepage-block-tp-invalid": "Naslov ciljne stranice za prevođenje za „[[:$1]]” bio bi nevažeći (predugačak?).",
+ "pt-movepage-block-section-invalid": "Naslov ciljne stranice za jedinicu prevoda „[[:$1]]” bio bi nevažeći (predugačak?).",
+ "pt-movepage-block-subpage-invalid": "Naslov ciljne podstranice za [[:$1]] bio bi neispravan (predugačak?).",
+ "pt-movepage-list-pages": "Spisak stranica za premeštanje",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Stranica|Stranice}} za prevođenje",
+ "pt-movepage-list-section": "Jedinica prevoda {{PLURAL:$1|stranice|stranica}}",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Podstranica|Podstranice}} označene za prevođenje",
+ "pt-movepage-list-translatable-note": "Ove stranice moraju da se zasebno premeste.",
+ "pt-movepage-list-other": "{{PLURAL:$1|Druga podstranica|Druge podstranice}}",
+ "pt-movepage-list-count": "Ukupno $1 {{PLURAL:$1|stranica|stranice|stranica}} za premeštanje.",
+ "pt-movepage-legend": "Premesti prevodivu stranicu",
+ "pt-movepage-current": "Trenutno ime:",
+ "pt-movepage-new": "Novo ime:",
+ "pt-movepage-reason": "Razlog:",
+ "pt-movepage-subpages": "Premesti sve podstranice",
+ "pt-movepage-action-check": "Proveri da li je premeštanje izvodljivo",
+ "pt-movepage-action-perform": "Izvrši premeštanje",
+ "pt-movepage-action-other": "Promeni cilj",
+ "pt-movepage-started": "U međuvremenu, proverite [[Special:Log/pagetranslation|dnevnik prevođenja stranice]] da bi se pronašle eventualne greške i poruke završetka.",
+ "pt-deletepage-invalid-title": "Navedena stranica nije važeća.",
+ "pt-deletepage-action-check": "Navedi stranice za brisanje",
+ "pt-deletepage-action-perform": "Izvrši brisanje",
+ "pt-deletepage-action-other": "Promeni cilj",
+ "pt-deletepage-lang-legend": "Izbriši stranicu prevoda",
+ "pt-deletepage-tp-legend": "Izbriši prevodivu stranicu",
+ "pt-deletepage-any-legend": "Izbrišite prevodivu stranicu ili stranicu prevoda",
+ "pt-deletepage-current": "Ime stranice:",
+ "pt-deletepage-reason": "Razlog:",
+ "pt-deletepage-subpages": "Izbriši sve podstranice",
+ "pt-deletepage-list-pages": "Lista stranica za brisanje",
+ "pt-deletepage-list-translation": "Stranice za prevođenje",
+ "pt-deletepage-list-section": "Stranice za jedinicu prevoda",
+ "pt-deletepage-list-other": "Druge podstranice",
+ "pt-deletepage-list-count": "Ukupno $1 {{PLURAL:$1|stranica|stranice}} za brisanje.",
+ "pagemigration": "Migracija stranice za prevođenje",
+ "pm-import-button-label": "Uvezi",
+ "pm-savepages-button-label": "Sačuvaj",
+ "pm-cancel-button-label": "Otkaži",
+ "pm-page-does-not-exist": "$1 ne postoji.",
+ "pm-old-translations-missing": "$1 ne sadrži stare prevode.",
+ "pm-pagename-missing": "Unesite ime stranice.",
+ "pm-add-icon-hover-text": "Dodaj jedinicu ispod",
+ "pm-swap-icon-hover-text": "Zameni sa jedinicom ispod",
+ "pm-delete-icon-hover-text": "Izbriši jedinicu",
+ "pm-pagetitle-placeholder": "Unesite naslov stranice",
+ "pm-pagetitle-missing": "Unesite naslov stranice.",
+ "tpt-translate-title": "Dozvoli prevođenje naslova stranice",
+ "pp-save-summary": "Stranica je pripremljena za prevođenje",
+ "pagepreparation": "Priprema stranica za prevođenje",
+ "pp-pagename-placeholder": "Unesite ime stranice",
+ "pp-prepare-button-label": "Pripremi",
+ "pp-save-button-label": "Sačuvaj",
+ "pp-cancel-button-label": "Otkaži",
+ "pp-save-message": "Stranica je sačuvana. Možete je [$1 urediti].",
+ "pp-prepare-message": "Ova stranica je pripremljena za prevođenje. Pogledajte donju razliku izmena. Kliknite na dugme „{{int:pp-save-button-label}}” ako je sve u redu!",
+ "pp-pagename-missing": "Unesite ime stranice.",
+ "pp-diff-old-header": "Izvorni tekst",
+ "pp-diff-new-header": "Pripremljeni tekst",
+ "tpt-unlink-confirm": "Potvrdite da stvarno želite da uklonite ovu stranicu iz sistema prevođenja.\nBirač jezika i prevedena imena stranica će prestati sa radom.\nStranice za prevođenje će postati uredive.",
+ "tpt-unlink-button": "Ukloni iz sistema prevođenja",
+ "tpt-unlink-summary": "Uklonjena stranica iz sistema prevođenja",
+ "tpt-generic-confirm": "Potvrdite radnju.",
+ "tpt-generic-button": "Potvrdi"
+}
diff --git a/Translate/i18n/pagetranslation/stq.json b/Translate/i18n/pagetranslation/stq.json
new file mode 100644
index 00000000..dbfe1c09
--- /dev/null
+++ b/Translate/i18n/pagetranslation/stq.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Pyt"
+ ]
+ },
+ "translate-tag-translate-link-desc": "Disse Siede uursätte"
+}
diff --git a/Translate/i18n/pagetranslation/sty.json b/Translate/i18n/pagetranslation/sty.json
new file mode 100644
index 00000000..3b24bf9e
--- /dev/null
+++ b/Translate/i18n/pagetranslation/sty.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Khanmarat"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% телгә күцерелгән)"
+}
diff --git a/Translate/i18n/pagetranslation/su.json b/Translate/i18n/pagetranslation/su.json
new file mode 100644
index 00000000..0274186a
--- /dev/null
+++ b/Translate/i18n/pagetranslation/su.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kandar",
+ "Uchup19"
+ ]
+ },
+ "pagetranslation": "Alihbasa kaca",
+ "tpt-diff-old": "Téks saméméhna",
+ "tpt-diff-new": "Téks anyar",
+ "tpt-nosuchpage": "Kaca $1 euweuh.",
+ "tpt-select-prioritylangs-reason": "Alesan:",
+ "tpt-languages-nonzero": "$1 ($2% tarjamah)",
+ "tpt-translation-restricted": "Alesan: $1",
+ "tpt-aggregategroup-update-cancel": "Bolay",
+ "pt-movepage-current": "Ngaran ayeuna:",
+ "pt-movepage-new": "Ngaran anyar:",
+ "pt-movepage-reason": "Alesan:",
+ "pt-movepage-subpages": "Pindahkeun sakabéh subkaca",
+ "pt-movepage-action-check": "Pariksa susuganan bisa dipindahkeun",
+ "pt-movepage-action-perform": "Pindahkeun",
+ "pt-movepage-action-other": "Ganti tujul",
+ "pt-deletepage-reason": "Alesan:",
+ "pm-cancel-button-label": "Bolay",
+ "pp-cancel-button-label": "Bolay"
+}
diff --git a/Translate/i18n/pagetranslation/sv.json b/Translate/i18n/pagetranslation/sv.json
new file mode 100644
index 00000000..8340a972
--- /dev/null
+++ b/Translate/i18n/pagetranslation/sv.json
@@ -0,0 +1,241 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ainali",
+ "Dafer45",
+ "Fluff",
+ "Jenniesarina",
+ "Jopparn",
+ "Lokal Profil",
+ "M.M.S.",
+ "McDutchie",
+ "Najami",
+ "Rotsee",
+ "Sabelöga",
+ "Skärminspelning",
+ "Tobulos1",
+ "WikiPhoenix"
+ ]
+ },
+ "pagetranslation": "Sidöversättning",
+ "right-pagetranslation": "Märk versioner av sidor för översättning",
+ "action-pagetranslation": "hantera översättningsbara sidor",
+ "tps-edit-sourcepage-text": "Du redigerar källan för en översättningssida. Se till att du är bekant med följande dokumentation:\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text Ändra källtexten]\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Markup_examples Exempel på formatering att använda]",
+ "tps-edit-sourcepage-ve-warning-title": "Varning: Sidan stöds inte",
+ "tps-edit-sourcepage-ve-warning-text": "Du redigerar en översättbar sida. Denna redigerare har ännu inget officiellt stöd för att redigera dessa. Använd källtextredigeraren.",
+ "tps-edit-sourcepage-ve-warning-button": "OK",
+ "tpt-section": "Översättningsenhet $1",
+ "tpt-section-new": "Ny översättningsenhet.\nNamn: $1",
+ "tpt-section-deleted": "Översättningsenhet $1",
+ "tpt-diff-old": "Föregående text",
+ "tpt-diff-new": "Ny text",
+ "tpt-submit": "Märk den här versionen för översättning",
+ "tpt-sections-oldnew": "Nya och existerande översättningsenheter",
+ "tpt-sections-deleted": "Raderade översättningsenheter",
+ "tpt-sections-template": "Mall för översättningssida",
+ "tpt-action-nofuzzy": "Ogiltigförklara inte översättningar",
+ "tpt-badtitle": "Det angivna sidnammet ($1) är inte en giltlig titel",
+ "tpt-nosuchpage": "Sidan $1 finns inte",
+ "tpt-oldrevision": "$2 är inte den senaste versionen av sidan [[:$1]].\nEndast den senaste versionen kan märkas för översättning.",
+ "tpt-notsuitable": "Sidan $1 är inte redo för översättning.\nSe till att sidan har <nowiki><translate></nowiki>-taggar och att syntaxen är giltlig.",
+ "tpt-saveok": "Sidan [[:$1]] har märkts för översättning med {{PLURAL:$2|en översättningsdel|$2 översättningsdelar}}. Sidan kan nu <span class=\"plainlinks\">[$3 översättas]</span>.",
+ "tpt-saveok-first": "Du kan [[Special:PageMigration|importera befintlig översättning]] för denna sida (om det finns någon).",
+ "tpt-offer-notify": "Du kan <span class=\"plainlinks\">[$1 meddela översättare]</span> om den här sidan.",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|Se listan över översättbara sidor.]]",
+ "tpt-showpage-intro": "Nedanför finns nya, existerande och raderade översättningsenheter uppradade.\nInnan den här versionen märks för översättning, kontrollera att ändringarna i översättningsenheterna är minimala för att undvika extra arbete för översättarna.",
+ "tpt-mark-summary": "Den här versionen är märkt för översättning",
+ "tpt-mark-nochanges": "Inga ändringar att granska. Varken sidan eller befintliga översättningsenheter kommer att redigeras om denna sida märks för översättning.",
+ "tpt-edit-failed": "Sidan \"$1\" kunde inte uppdateras.",
+ "tpt-duplicate": "Översättningsenhetsnamnet $1 används mer än en gång.",
+ "tpt-invalid": "Översättningsenhetsnamnet $1 får inte innehålla understreck eller snedstreck.",
+ "tpt-unmarked": "Sidan [[:$1]] är inte längre markerad för översättning.",
+ "tpt-list-nopages": "Det finns inga sidor som är märkta för översättning eller är klara att märkas för översättning.",
+ "tpt-new-pages-title": "Sidor föreslagna för översättning",
+ "tpt-old-pages-title": "Sidor i översättning",
+ "tpt-other-pages-title": "Trasiga sidor",
+ "tpt-outdated-pages-title": "Sidor med väntande ändringar",
+ "tpt-new-pages": "{{PLURAL:$1|Den här sidan|De här sidorna}} innehåller text med översättningstaggar, men ingen version av {{PLURAL:$1|den här sidan|de här sidorna}} är märkt för översättning.",
+ "tpt-old-pages": "Den senaste versionen av {{PLURAL:$1|den här sidan|de här sidorna}} har märkts för översättning.",
+ "tpt-other-pages": "{{PLURAL:$1|En gammal version av den här sidan är markerad|Äldre versioner av dessa sidor är markerade}} för översättning,\nmen {{PLURAL:$1|den senaste versionen|de senaste versionerna}} kan inte markeras för översättning.",
+ "tpt-outdated-pages": "{{PLURAL:$1|Denna sida|Dessa sidor}} har ändringar som inte har markerats för översättning.",
+ "tpt-tag-discouraged": "avråds",
+ "tpt-tag-oldsyntax": "gammal syntax",
+ "tpt-tag-no-transclusion-support": "inget stöd för transkludering",
+ "tpt-select-prioritylangs": "Kommaseparerad lista över prioriterade språkkoder:",
+ "tpt-select-prioritylangs-force": "Förhindra översättningar på andra språk än de prioriterade språken",
+ "tpt-select-prioritylangs-reason": "Anledning:",
+ "tpt-sections-prioritylangs": "Prioriterade språk",
+ "tpt-sections-syntaxversion": "Syntaxversion",
+ "tpt-syntaxversion-text": "Denna sida använder för tillfället en gammal version av syntaxen för översättbara sidor. Den nya versionen kommer kapsla in oöversättbara avsnitt med en HTML-tagg för att indikera textens korrekta språk. Exempel: $1. Du kan använda den nya formateringssyntaxen $2 för att förhindra inkapsling där det inte behövs, som när man översätter attributet <code>title</code> för ett element. Det är inte möjligt att gå tillbaka till en gammal syntaxversion.",
+ "tpt-syntaxversion-label": "Använd senaste syntaxversionen för denna sida",
+ "tpt-transclusion": "Mallinkludering",
+ "tpt-transclusion-label": "Aktivera översättningsmedveten inkludering för denna sida",
+ "tpt-rev-mark": "markera för översättning",
+ "tpt-rev-unmark": "ta bort från översättning",
+ "tpt-rev-discourage": "avråd",
+ "tpt-rev-encourage": "återställ",
+ "tpt-rev-mark-tooltip": "Markera den senaste versionen av denna sida för översättning.",
+ "tpt-rev-unmark-tooltip": "Ta bort denna sida från översättning.",
+ "tpt-rev-discourage-tooltip": "Avråd vidare översättning på denna sida.",
+ "tpt-rev-encourage-tooltip": "Återställ denna sida till vanlig översättning.",
+ "translate-tag-translate-link-desc": "Översätt den här sidan",
+ "translate-tag-markthis": "Märk den här sidan för översättning",
+ "translate-tag-markthisagain": "Den här sidan har <span class=\"plainlinks\">[$1 förändringar]</span> sedan den senast <span class=\"plainlinks\">[$2 märktes för översättning]</span>.",
+ "translate-tag-hasnew": "Den här sidan innehåller <span class=\"plainlinks\">[$1 förändringar]</span> som inte är märkta för översättning.",
+ "tpt-translation-intro": "Det här är en <span class=\"plainlinks\">[$1 översatt version]</span> av sidan [[$2]]. Översättningen är till $3 % färdig och uppdaterad.",
+ "tpt-translation-intro-fuzzy": "Föråldrade översättningar markeras på det här sättet.",
+ "tpt-languages-legend": "Andra språk:",
+ "tpt-languages-separator": "&#160;•&#32;",
+ "tpt-languages-zero": "Påbörja översättning för detta språk",
+ "tpt-languages-nonzero": "$1 ($2 % översatt)",
+ "tpt-tab-translate": "Översätt",
+ "tpt-target-page": "Den här sidan kan inte uppdateras manuellt. Den här sidan är en översättning av [[$1]] och översättningen kan uppdateras genom att använda [$2 översättningsverktyget].",
+ "tpt-unknown-page": "Den här namnrymden är reserverad för översättningar av sidor.\nSidan du försöker redigera verkar inte stämma överens med någon sida som är märkt för översättning.",
+ "tpt-translation-restricted": "Översättningar av denna sida har förhindrats av en översättningsadministratör.\n\nAnledningar: $1",
+ "tpt-translation-restricted-no-reason": "Översättning av en här sidan till det här språket hindrades av en översättningsadministratör.",
+ "tpt-discouraged-language-force-header": "Denna sida kan inte översättas till $1.",
+ "tpt-discouraged-language-force-content": "En översättningsadministratör har beslutat att denna sida enbart kan översättas till $1.",
+ "tpt-discouraged-language-header": "Översättning till $1 är inte en prioritet för denna sida.",
+ "tpt-discouraged-language-content": "En översättningsadministratör har beslutat att fokusera översättningsinsatserna till $1.",
+ "tpt-discouraged-language-force": "<strong>Denna sida kan inte översättas till $2.</strong>\n\nEn översättningsadministratör har beslutat att denna sida endast kan översättas till $3.",
+ "tpt-priority-languages": "En översättningsadministratör har ställt in prioritetsspråken för denna grupp till $1.",
+ "tpt-priority-languages-force": "En översättningsadministratör har ändrat prioritetsspråket för denna grupp till $1. Det är inte tillåtet att översätta till andra språk.",
+ "tpt-render-summary": "Uppdaterar för att matcha den nya versionen av källpaketet",
+ "aggregategroups": "Samla grupper",
+ "tpt-aggregategroup-add": "Lägg till",
+ "tpt-aggregategroup-save": "Spara",
+ "tpt-aggregategroup-close": "Stäng",
+ "tpt-aggregategroup-add-new": "Lägg till en ny samlingsgrupp",
+ "tpt-aggregategroup-new-name": "Namn:",
+ "tpt-aggregategroup-new-description": "Beskrivning (valfri):",
+ "tpt-aggregategroup-remove-confirm": "Är du säker på att du vill radera denna samlingsgrupp?",
+ "tpt-aggregategroup-invalid-group": "Gruppen finns inte",
+ "tpt-aggregategroup-edit-name": "Namn:",
+ "tpt-aggregategroup-edit-description": "Beskrivning:",
+ "tpt-aggregategroup-update": "Spara",
+ "tpt-aggregategroup-update-cancel": "Avbryt",
+ "tpt-invalid-group": "Ogiltig grupp",
+ "pt-parse-open": "Obalanserad &lt;translate>-tagg.\nÖversättningsmall: <pre>$1</pre>",
+ "pt-parse-close": "Obalanserad &lt;/translate>-tagg.\nÖversättningsmall: <pre>$1</pre>",
+ "pt-parse-nested": "Inbäddade &lt;translate>-översättningsenheter är inte tillåtna.\nTaggtext: <pre>$1</pre>",
+ "pt-shake-multiple": "Flera översättningsenhetsmarkörer för en översättningsenhet.\nSe till att översättningsenheter särskiljs med tomma rader.\nÖversättningsenhetstext: <pre>$1</pre>",
+ "pt-shake-position": "Översättningsenhetsmarkörer i oväntad position.\nÖversättningsenhetstext: <pre>$1</pre>",
+ "pt-shake-empty": "Tom översättningsenhet för markör $1.",
+ "log-description-pagetranslation": "Logg för åtgärder som rör systemet för sidöversättning",
+ "log-name-pagetranslation": "Sidöversättningslogg",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|markerade}} $3 för översättning",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|tog bort}} $3 från översättningssystemet",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|slutförde}} namnändringen av översättningssidan $3 till $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|stöte på}} ett problem när sidan $3 skulle flyttas till $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|slutförde}} raderingen av översättningssidan $3",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|misslyckades}} att radera $3 som tillhör översättningssidan $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|slutförde}} radering av översättningssidan $3",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|misslyckades}} att radera $3 som tillhör översättningssidan $4",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|uppmuntrade}} översättningen av $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|avråde}} översättning av $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|tog bort}} prioriterade språk från översättningsbar sida $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|ställde in}} de prioriterade språken för översättbara sidan $3 till $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|begränsade}} språken för översättbara sidan $3 till $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|lade till}} den översättbara sidan $3 till samlingsgruppen $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|tog bort}} den översättbara sidan $3 från samlingsgruppen $4",
+ "log-action-filter-pagetranslation": "Typ av åtgärd:",
+ "log-action-filter-pagetranslation-mark": "Märk för översättning",
+ "log-action-filter-pagetranslation-unmark": "Ta bort från översättning",
+ "log-action-filter-pagetranslation-move": "Sidflyttningar",
+ "log-action-filter-pagetranslation-delete": "Sidraderingar",
+ "log-action-filter-pagetranslation-encourage": "Uppmuntras till att översättas",
+ "log-action-filter-pagetranslation-discourage": "Avråds från att översättas",
+ "log-action-filter-pagetranslation-prioritylanguages": "Ändring av prioriterade språk",
+ "log-action-filter-pagetranslation-aggregategroups": "Ändring av aggregerade grupper",
+ "pt-movepage-title": "Flytta översättningsbar sida $1",
+ "pt-movepage-blockers": "Den översättningsbara sidan kan inte flyttas till ett nytt namn på grund av följande {{PLURAL:$1|fel|fel}}:",
+ "pt-movepage-block-base-invalid": "Den översättningsbara målsidans namn är inte en giltig titel.",
+ "pt-movepage-block-tp-invalid": "Målöversättningssidans titel för \"[[:$1]]\" skulle bli ogiltig (för lång?).",
+ "pt-movepage-block-section-invalid": "Målsidans titel för \"[[:$1]]\" för översättningsenheten skulle bli ogiltig (för lång?).",
+ "pt-movepage-block-subpage-invalid": "Målundersidans titel för \"[[:$1]]\" skulle bli ogiltig (för lång?).",
+ "pt-movepage-list-pages": "Lista över sidor att flytta",
+ "pt-movepage-list-translation": "Översättnings{{PLURAL:$1|sida|sidor}}",
+ "pt-movepage-list-section": "Översättningsenhets{{PLURAL:$1|sida|sidor}}",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Undersida|Undersidor}} markerade för översättning",
+ "pt-movepage-list-translatable-note": "Dessa sidor måste flyttas separat.",
+ "pt-movepage-list-other": "{{PLURAL:$1|Annan undersida|Andra undersidor}}",
+ "pt-movepage-list-count": "Totalt $1 {{PLURAL:$1|sida|sidor}} att flytta och $2 {{PLURAL:$2|undersida|undersidor}}.",
+ "pt-movepage-page-count-limit": "Denna översättbara sida består av fler än $1 {{PLURAL:$1|sida|sidor}}. Att flytta så många sidor har visat sig vara problematiskt. Var god kontakta en systemadministratör för att utföra detta med ett underhållsskript.",
+ "pt-movepage-list-no-pages": "Inga sidor hittades.",
+ "pt-movepage-legend": "Flytta översättningsbar sida",
+ "pt-movepage-current": "Nuvarande namn:",
+ "pt-movepage-new": "Nytt namn:",
+ "pt-movepage-reason": "Orsak:",
+ "pt-movepage-subpages": "Flytta alla undersidor",
+ "pt-movepage-action-check": "Kontrollera om flytten är möjligt",
+ "pt-movepage-action-perform": "Genomför flytten",
+ "pt-movepage-action-other": "Ändra mål",
+ "pt-movepage-intro": "Denna specialsida låter dig flytta sidor som är markerade för översättning.\nFlyttningsåtgärden kommer inte att vara omedelbar, eftersom många sidor kommer att behöva flyttas.\nMedan sidorna flyttas är det inte möjligt att interagera med dem.\nFel kommer att registreras i [[Special:Log/pagetranslation|sidöversättningsloggen]] och de behöver repareras manuellt.",
+ "pt-movepage-logreason": "Del av översättningsbar sida \"$1\".",
+ "pt-movepage-started": "Kontrollera [[Special:Log/pagetranslation|loggen för sidöversättning]] om en stund efter fel och meddelande om att det slutförts.",
+ "pt-locked-page": "Denna sida är låst eftersom den översättningsbara sidan håller på att flyttas.",
+ "pt-deletepage-lang-title": "Raderar översättningssida \"$1\"",
+ "pt-deletepage-tp-title": "Raderar översättbar sida \"$1\"",
+ "pt-deletepage-invalid-title": "Den angivna sidan är inte giltig.",
+ "pt-deletepage-invalid-text": "Den angivna sidan är varken en översättbar sida eller en översättningssida.",
+ "pt-deletepage-action-check": "Lista över sidor som ska tas bort",
+ "pt-deletepage-action-perform": "Utför raderingen",
+ "pt-deletepage-action-other": "Ändra mål",
+ "pt-deletepage-lang-legend": "Radera översättningssida",
+ "pt-deletepage-tp-legend": "Radera översättningsbar sida",
+ "pt-deletepage-any-legend": "Radera översättbar sida eller översättningssida",
+ "pt-deletepage-current": "Sidnamn:",
+ "pt-deletepage-reason": "Anledning:",
+ "pt-deletepage-subpages": "Radera alla undersidor",
+ "pt-deletepage-list-pages": "Lista över sidor att radera",
+ "pt-deletepage-list-translation": "Översättningssidor",
+ "pt-deletepage-list-section": "Översättningsenhetssidor",
+ "pt-deletepage-list-other": "Andra undersidor",
+ "pt-deletepage-list-count": "Totalt $1 {{PLURAL:$1|sida|sidor}} att radera och $2 {{PLURAL:$2|undersida|undersidor}}.",
+ "pt-deletepage-list-no-pages": "Inga sidor hittades.",
+ "pt-deletepage-full-logreason": "Del av översättningsbar sida \"$1\".",
+ "pt-deletepage-lang-logreason": "Del av översättningssida \"$1\".",
+ "pt-deletepage-started": "Kontrollera [[Special:Log/pagetranslation|loggen för sidöversättning]] efter fel och meddelande om att det slutförts.",
+ "pt-deletepage-intro": "Denna specialsida låter dig radera en hel översättbar sida eller en enskild översättningssida på ett språk.\nRaderingsåtgärden kommer inte att vara omedelbar, eftersom alla beroende sidor också kommer att raderas.\nFel kommer att registreras i [[Special:Log/pagetranslation|sidöversättningsloggen]] och de behöver repareras manuellt.",
+ "pagemigration": "Sidmigrering",
+ "pagemigration-summary": "Ange en översättningssida och återställ de översättningar som gjorts innan översättningssystemet aktiverades på den sidan.",
+ "pm-import-button-label": "Importera",
+ "pm-savepages-button-label": "Spara",
+ "pm-cancel-button-label": "Avbryt",
+ "pm-page-does-not-exist": "$1 finns inte",
+ "pm-old-translations-missing": "$1 innehåller inte gamla översättningar",
+ "pm-extra-units-warning": "Extra enheter kan förekomma. Vänligen matcha källan och översättningsenheterna korrekt",
+ "pm-pagename-missing": "Vänligen ange sidnamnet",
+ "pm-add-icon-hover-text": "Lägg till en enhet nedan",
+ "pm-swap-icon-hover-text": "Byt med enheten nedan",
+ "pm-delete-icon-hover-text": "Radera enhet",
+ "pm-pagetitle-placeholder": "Ange sidans titel",
+ "pm-pagetitle-invalid": "Ange en giltig sidtitel. Den bör vara i formatet <page-name>/<language-code>.",
+ "pm-pagetitle-missing": "Ange sidans titel.",
+ "pm-langcode-missing": "Språkkoden verkar saknas i titeln. Ange sidans titel i formatet <page-name>/<language-code>.",
+ "pm-summary-import": "Översättning importerad med hjälpt av [[Special:PageMigration|sidmigrering]]",
+ "pm-on-import-message-text": "De gamla översättningarna har importerats. Använd alternativen lägg till, byt och radera för att justera översättningsenheterna och klicka på knappen \"{{int:pm-savepages-button-label}}\" för att spara dem. Klicka på knappen \"{{int:pm-cancel-button-label}}\" för att slänga dem.",
+ "pm-on-save-message-text": "Översättningsenheterna har sparats. Du kan nu ange titeln för en ny översättningssida för att migrera den eller göra ändringar i enheterna nedan och spara en ny version.",
+ "tpt-translate-title": "Tillåt översättning av sidans titel",
+ "pp-save-summary": "Förbered sidan för översättning",
+ "pagepreparation": "Förbered sida för översättning",
+ "pagepreparation-summary": "Ange en sidtitel för att förbereda för översättning.",
+ "pp-pagename-placeholder": "Ange sidans namn",
+ "pp-prepare-button-label": "Förbered",
+ "pp-save-button-label": "Publicera",
+ "pp-cancel-button-label": "Avbryt",
+ "pp-save-message": "Sidan har publicerats. Du kan [$1 redigera] den.",
+ "pp-prepare-message": "Sidan har förberetts för översättning. Se skillnaden nedan. Klicka på knappen \"{{int:pp-Spara-knappen-etikett}}\" om det är okej!",
+ "pp-already-prepared-message": "Det verkar sidan redan har förberetts för översättning. Det finns inga ändringar jämfört med den tidigare versionen.",
+ "pp-diff-error": "Ett fel uppstod när diffen skulle hämtas från servern.",
+ "pp-pagename-missing": "Var god ange sidans namn.",
+ "pp-diff-old-header": "Källtext",
+ "pp-diff-new-header": "Förberedd text",
+ "tpt-unlink-confirm": "Bekräfta att du verkligen vill ta bort denna sida från översättningssystemet.\nSpråkväljaren och översatta sidnamn kommer sluta fungera.\nÖversättningssidorna kommer bli redigerbara.",
+ "tpt-unlink-button": "Ta bort från översättning",
+ "tpt-unlink-summary": "Tog bort sidan från översättning",
+ "tpt-generic-confirm": "Bekräfta åtgärden.",
+ "tpt-generic-button": "Bekräfta",
+ "tpt-validation-not-insertable": "Översättningsvariabelnamnet \"$1\" fungerar inte som en insättningsbar i översättningsgränssnittet. Undvik att använda specialtecken.",
+ "tpt-validation-name-reuse": "Översättningsvariabeln \"$1\" definierades flera gånger med olika innehåll. Ändra variabelnamnen så de är unika inom översättningsenheten."
+}
diff --git a/Translate/i18n/pagetranslation/sw.json b/Translate/i18n/pagetranslation/sw.json
new file mode 100644
index 00000000..52a870a0
--- /dev/null
+++ b/Translate/i18n/pagetranslation/sw.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kwisha",
+ "Rance"
+ ]
+ },
+ "tpt-select-prioritylangs-reason": "Sababu:",
+ "tpt-rev-discourage": "vunja moyo",
+ "tpt-rev-encourage": "rejesha",
+ "translate-tag-translate-link-desc": "Tafsiri ukurasa huu",
+ "tpt-languages-legend": "Lugha zingine:",
+ "tpt-aggregategroup-add": "Ongeza",
+ "tpt-aggregategroup-save": "Hifadhi",
+ "pt-movepage-list-translatable-note": "Kurasa hizi lazima zihamishwe kila ukurasa kivyake"
+}
diff --git a/Translate/i18n/pagetranslation/sxu.json b/Translate/i18n/pagetranslation/sxu.json
new file mode 100644
index 00000000..59290dde
--- /dev/null
+++ b/Translate/i18n/pagetranslation/sxu.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jun Misugi"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2 % ieborsädsd)"
+}
diff --git a/Translate/i18n/pagetranslation/szl.json b/Translate/i18n/pagetranslation/szl.json
new file mode 100644
index 00000000..86770325
--- /dev/null
+++ b/Translate/i18n/pagetranslation/szl.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Krol111",
+ "Uostofchuodnego"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 (przełożōnŏ $2%)"
+}
diff --git a/Translate/i18n/pagetranslation/szy.json b/Translate/i18n/pagetranslation/szy.json
new file mode 100644
index 00000000..9f1d80a2
--- /dev/null
+++ b/Translate/i18n/pagetranslation/szy.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Benel",
+ "Bunukwiki"
+ ]
+ },
+ "tps-edit-sourcepage-ve-warning-button": "kapahtu",
+ "tpt-languages-nonzero": "$1 ($2% mabelih tuway)",
+ "tpt-aggregategroup-add": "cunus"
+}
diff --git a/Translate/i18n/pagetranslation/ta.json b/Translate/i18n/pagetranslation/ta.json
new file mode 100644
index 00000000..a72e9c69
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ta.json
@@ -0,0 +1,92 @@
+{
+ "@metadata": {
+ "authors": [
+ "ElangoRamanujam",
+ "Jayarathina",
+ "Kalyanasundar",
+ "Karthi.dr",
+ "Shanmugamp7",
+ "TRYPPN",
+ "மதனாஹரன்"
+ ]
+ },
+ "pagetranslation": "பக்கத்தின் மொழிபெயர்ப்பு",
+ "right-pagetranslation": "மொழிபெயர்ப்புக்காக பக்கங்களின் பதிப்புகளை குறியிடு",
+ "tpt-section": "மொழிபெயர்ப்பு அலகு$1",
+ "tpt-section-new": "புதிய மொழிபெயர்ப்பு அலகு.\nபெயர்:$1",
+ "tpt-section-deleted": "மொழிபெயர்ப்பு அலகு$1",
+ "tpt-diff-old": "முந்தைய சொற்றொடர்",
+ "tpt-diff-new": "புதிய சொற்றொடர்",
+ "tpt-submit": "இந்த பதிப்பை மொழிபெயர்ப்புக்காக குறியிடு",
+ "tpt-sections-oldnew": "புதிய மற்றும் தற்போதுள்ள மொழிபெயர்ப்பு பிரிவுகள்",
+ "tpt-sections-deleted": "நீக்கப்பட்ட மொழிபெயர்ப்பு பிரிவுகள்",
+ "tpt-sections-template": "மொழிபெயர்ப்பு பக்க வார்ப்புரு",
+ "tpt-action-nofuzzy": "மொழிபெயர்ப்புகளை செல்லத்தாகாததாக்க வேண்டாம்.",
+ "tpt-badtitle": " தரப்பட்ட பக்க பெயர் ( $1 ) செல்லத்தக்க தலைப்பு இல்லை",
+ "tpt-nosuchpage": "பக்க $1 இல்லை",
+ "tpt-edit-failed": "$1 பக்கத்தை இற்றைப்படுத்த இயலவில்லை.",
+ "tpt-new-pages-title": "மொழிபெயர்ப்புக்குப் பரிந்துரைக்கப்பட்டுள்ள பக்கங்கள்",
+ "tpt-old-pages-title": "மொழிபெயர்க்கப்பட்டு வரும் பக்கங்கள்",
+ "tpt-other-pages-title": "உடைந்த பக்கங்கள்",
+ "tpt-select-prioritylangs-reason": "காரணம்:",
+ "tpt-sections-prioritylangs": "முன்னுரிமை தரப்பட்ட மொழிகள்",
+ "tpt-rev-mark": "மொழிபெயர்ப்புக்காக குறியிடு",
+ "tpt-rev-unmark": "மொழிபெயர்ப்பிலிருந்து நீக்கு",
+ "tpt-rev-discourage": "அதையரியப்படுத்து",
+ "tpt-rev-encourage": "மீட்டமை",
+ "tpt-rev-mark-tooltip": "இப்பக்கத்தின் சமீபத்திய பதிப்பை மொழிபெயர்ப்புக்காக குறியிடு.",
+ "tpt-rev-unmark-tooltip": "இப்பக்கத்தை மொழிபெயர்ப்பில் இருந்து நீக்கவும்.",
+ "tpt-rev-discourage-tooltip": "இந்த பக்கத்தில் மேலும் செய்யப்படும் மொழிபெயப்புகளை அதையரியப்படுத்து",
+ "tpt-rev-encourage-tooltip": "இப்பக்கத்தை சராசரி மொழிபெயர்ப்புக்கு மீட்டெடுக்கவும்.",
+ "translate-tag-translate-link-desc": "இப்பக்கத்தை மொழிபெயர்க்கவும்",
+ "translate-tag-markthis": "இந்த பக்கத்தை மொழிபெயர்ப்புக்காக குறியிடு",
+ "tpt-languages-legend": "மற்ற மொழிகள்:",
+ "tpt-languages-zero": "இம் மொழியின் சிறிய மொழிபெயர்ப்பு",
+ "tpt-languages-nonzero": "$1 ($2% மொழிபெயர்க்கப்பட்டது)",
+ "tpt-translation-restricted": "இப்பக்கத்தை இந்த மொழிக்கு மொழிபெயர்ப்பது மொழிபெயர்ப்பு நிருவாகி ஒருவரால் காக்கப்பட்டுள்ளது.\n\nகாரணம்: $1",
+ "tpt-aggregategroup-add": "சேர்",
+ "tpt-aggregategroup-save": "சேமி",
+ "tpt-aggregategroup-new-name": "பெயர்:",
+ "tpt-aggregategroup-invalid-group": "இந்தக் குழு இல்லை.",
+ "pt-movepage-list-pages": "நகர்த்த வேண்டிய பக்கங்களின் பட்டியல்",
+ "pt-movepage-list-translation": "மொழிபெயர்ப்பு பக்கங்கள்",
+ "pt-movepage-list-section": "பிரிவு பக்கங்கள்",
+ "pt-movepage-list-other": "மற்ற துணைப்பக்கங்கள்",
+ "pt-movepage-list-count": "மொத்தம் $1 {{PLURAL:$1|பக்கம் |பக்கங்கள்}} நகர்த்த.",
+ "pt-movepage-legend": "மொழிபெயர்க்கதகுந்த பக்கத்தை நகர்த்து",
+ "pt-movepage-current": "நடப்பு பெயர்:",
+ "pt-movepage-new": "புதிய பெயர்:",
+ "pt-movepage-reason": "காரணம்:",
+ "pt-movepage-subpages": "எல்லா துணைப்பக்கங்களையும் நகர்த்து",
+ "pt-movepage-action-check": "இந்த நகர்த்தல் சாத்தியமானதா என சரிபார்",
+ "pt-movepage-action-perform": "நகர்த்தலை செய்யவும்",
+ "pt-movepage-action-other": "இலக்கை மாற்று",
+ "pt-movepage-logreason": "மொழிபெயர்க்க தகுந்த பக்கத்தின் பகுதி $1.",
+ "pt-movepage-started": "அடிப்படை பக்கம் இப்போது நகர்த்தப்பட்டுள்ளது.\nதயவுகூர்ந்து [[Special:Log/pagetranslation|பக்க மொழிபெயர்ப்பு குறிப்பேடு]] ல் பிழைகளை மற்றும் நிறைவு தகவலை சரிபார்க்கவும்.",
+ "pt-locked-page": "இப்பக்கம் பூட்டப்பட்டுள்ளது ஏனெனில் மொழிபெயர்க்கத்தகுந்த பக்கம் தற்போது நகர்த்தப்பட்டது.",
+ "pt-deletepage-lang-title": "மொழிபெயர்ப்பு பக்கம் $1 நீக்கப்படுகிறது.",
+ "pt-deletepage-tp-title": "மொழிபெயர்க்கதகுந்த பக்கம் $1 நீக்கப்படுகிறது",
+ "pt-deletepage-invalid-title": "குறிப்பிட்ட பக்கம் செல்லத்தக்கது அல்ல.",
+ "pt-deletepage-invalid-text": "குறிப்பிட்ட பக்கம் ஒரு மொழிபெயர்ப்புசெய்யத்தகுந்த பக்கம் அல்லது அதன் மொழிபெயர்ப்பு அல்ல",
+ "pt-deletepage-action-check": "நீக்க வேண்டிய பக்கங்களை பட்டியலிடு",
+ "pt-deletepage-action-perform": "நீக்கலை செய்யவும்",
+ "pt-deletepage-action-other": "இலக்கை மாற்று",
+ "pt-deletepage-lang-legend": "மொழிபெயர்ப்பு பக்கத்தை நீக்கு",
+ "pt-deletepage-tp-legend": "மொழிபெயர்க்கதகுந்த பக்கத்தை நீக்கு",
+ "pt-deletepage-any-legend": "மொழிபெயர்க்கத்தகுந்த பக்கம் அல்லது மொழிபெயர்க்கத்தகுந்த பக்கத்தின் மொழிபெயர்ப்பை நீக்கு",
+ "pt-deletepage-current": "பக்கப் பெயர்:",
+ "pt-deletepage-reason": "காரணம்:",
+ "pt-deletepage-subpages": "எல்லா துணைப்பக்கங்களையும் நீக்கு",
+ "pt-deletepage-list-pages": "நீக்கபடவேண்டிய பக்கங்களின் பட்டியல்",
+ "pt-deletepage-list-translation": "மொழிபெயர்ப்பு பக்கங்கள்",
+ "pt-deletepage-list-section": "பிரிவு பக்கங்கள்",
+ "pt-deletepage-list-other": "மற்ற துணைப்பக்கங்கள்",
+ "pt-deletepage-list-count": "மொத்தம் $1 {{PLURAL:$1|பக்கம் |பக்கங்கள்}} நீக்கப்பட.",
+ "pt-deletepage-full-logreason": "மொழிபெயர்க்க தகுந்த பக்கத்தின் பகுதி $1.",
+ "pt-deletepage-lang-logreason": "மொழிபெயர்ப்பு பக்கத்தின் பகுதி $1 .",
+ "pt-deletepage-started": "தயவுகூர்ந்து [[Special:Log/pagetranslation|பக்க மொழிபெயர்ப்பு குறிப்பேடு]] ல் பிழைகளை மற்றும் நிறைவு தகவலை சரிபார்க்கவும், .",
+ "pagemigration": "பக்க இடப்பெயர்வு",
+ "pm-page-does-not-exist": "$1 இ்டம்பெறவில்லை",
+ "pp-pagename-placeholder": "பக்கப் பெயரைப் பதிவிடுக",
+ "pp-save-button-label": "பதிப்பிடு"
+}
diff --git a/Translate/i18n/pagetranslation/tay.json b/Translate/i18n/pagetranslation/tay.json
new file mode 100644
index 00000000..b0bd9a82
--- /dev/null
+++ b/Translate/i18n/pagetranslation/tay.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hitaypayan"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% wal gmbang miru’)"
+}
diff --git a/Translate/i18n/pagetranslation/tcy.json b/Translate/i18n/pagetranslation/tcy.json
new file mode 100644
index 00000000..1dd4574e
--- /dev/null
+++ b/Translate/i18n/pagetranslation/tcy.json
@@ -0,0 +1,46 @@
+{
+ "@metadata": {
+ "authors": [
+ "BHARATHESHA ALASANDEMAJALU",
+ "Kiranpoojary",
+ "Ravi Mundkur",
+ "VASANTH S.N.",
+ "Vishwanatha Badikana"
+ ]
+ },
+ "pagetranslation": "ಪುಟೋ ತರ್ಜುಮೆ",
+ "action-pagetranslation": "ತರ್ಜುಮೆ ಅಪಿಂಚಿ ಪುಟೊಕುಲೆನ್ ನಿರ್ವಹಿಸಲೇ",
+ "tpt-section": "ತರ್ಜುಮೆ $1",
+ "tpt-section-new": "ಪೊಸ ತರ್ಜುಮೆ. \nಪುದರ್:$1",
+ "tpt-section-deleted": "ತರ್ಜುಮೆ $1",
+ "tpt-diff-new": "ಪೊಸ ಪದೋ",
+ "tpt-old-pages-title": "ತರ್ಜುಮೆ ಅವೊಂತಿಪ್ಪುನಾ ಪುಟೊಕುಲು",
+ "tpt-select-prioritylangs-reason": "ಕಾರಣೊ:",
+ "translate-tag-translate-link-desc": "ಈಫುಟೊನ್ ಅನುವಾದ ಮಲ್ಪುಲೆ",
+ "translate-tag-markthis": "ಈ ಫುಟೊನ್ ಅನುವಾದ ಮಂಪರ ಗುರ್ತ್ ಮನ್ಪುಲೆ",
+ "tpt-languages-legend": "ಬೇತೆ ಬಾಸೆಲೆಡ್:",
+ "tpt-languages-zero": "ಈ ಬಾಸೆಡ್ ಅನುವಾದ ಸುರು ಮಾನ್ಪಿ",
+ "tpt-languages-nonzero": "$1($2% ತರ್ಜುಮೆ ಆತ್‌ಂಡ್)",
+ "tpt-tab-translate": "ಅನುವಾದ ಮಲ್ಪುಲೆ",
+ "tpt-aggregategroup-add": "ಸೇರಾಲೆ",
+ "tpt-aggregategroup-save": "ಒರಿಪಾಲೆ",
+ "tpt-aggregategroup-new-name": "ಪುದರ್:",
+ "tpt-aggregategroup-edit-name": "ಪುದರ್:",
+ "tpt-aggregategroup-edit-description": "ವಿವರಣೆ:",
+ "tpt-aggregategroup-update": "ಒರಿಪಾಲೆ",
+ "tpt-aggregategroup-update-cancel": "ವಜಾ ಮಲ್ಪುಲೆ",
+ "log-action-filter-pagetranslation-mark": "ಅನುವಾದಗ್ ಗುರ್ತ್ ಮನ್ಪುಲೆ",
+ "log-action-filter-pagetranslation-unmark": "ಅನುವಾದತ್ ದೆಪ್ಪುಲೆ",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Subpage|Subpages}}ಅನುವಾದೊಗು ಗುರುತು ಮಲ್ತಿನ",
+ "pt-movepage-list-translatable-note": "ಈ ಪುಟೊಕುಲೆನ್ ಪ್ರತ್ಯೇಕವಾದ್ ದೆಪ್ಪೊಡು.",
+ "pt-movepage-list-other": "ಬೇತೆ {{PLURAL:$1|Subpage|Subpages}}",
+ "pt-movepage-current": "ಇತ್ತೇತ ಪುದರ್:",
+ "pt-movepage-new": "ಪೊಸ ಪುದರ್:",
+ "pt-movepage-reason": "ಕಾರಣೊ:",
+ "pm-savepages-button-label": "ಒರಿಪಾಲೆ",
+ "pm-cancel-button-label": "ವಜಾ ಮಲ್ಪುಲೆ",
+ "pp-prepare-button-label": "ತಯಾರ್ ಮಲ್ಪುಲೆ",
+ "pp-save-button-label": "ಒರಿಪಾಲೆ",
+ "pp-cancel-button-label": "ವಜಾ ಮಲ್ಪುಲೆ",
+ "tpt-generic-button": "ಗಟ್ಟಿಮಲ್ಪುಲೆ"
+}
diff --git a/Translate/i18n/pagetranslation/te.json b/Translate/i18n/pagetranslation/te.json
new file mode 100644
index 00000000..c21a96fb
--- /dev/null
+++ b/Translate/i18n/pagetranslation/te.json
@@ -0,0 +1,54 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chaduvari",
+ "Kiranmayee",
+ "Veeven"
+ ]
+ },
+ "pagetranslation": "పేజీ అనువాదం",
+ "right-pagetranslation": "పేజీల కూర్పులను అనువాదానికై గుర్తించడం",
+ "tpt-section": "అనువాద విభాగం $1",
+ "tpt-section-new": "కొత్త అనువాద విభాగం. పేరు: $1",
+ "tpt-section-deleted": "అనువాద విభాగము $1",
+ "tpt-diff-old": "గత పాఠ్యం",
+ "tpt-diff-new": "కొత్త పాఠ్యం",
+ "tpt-sections-template": "అనువాద పేజీ మూస",
+ "tpt-badtitle": "ఇచ్చిన పేజీ పేరు ($1) సరైన శీర్షిక కాదు",
+ "tpt-nosuchpage": "$1 అనే పుట లేనే లేదు",
+ "tpt-edit-failed": "పేజీని తాజాకరించలేకపోయాం: $1",
+ "tpt-select-prioritylangs-reason": "కారణం:",
+ "tpt-sections-prioritylangs": "ప్రాధాన్య భాషలు",
+ "tpt-rev-mark": "అనువాదం కోసం గుర్తు పెట్టు",
+ "tpt-rev-unmark": "అనువాదం నుంచి తీసివెయ్యి",
+ "tpt-rev-discourage": "నిరుత్సాహపరచు",
+ "tpt-rev-encourage": "పునస్థాపించు",
+ "tpt-rev-mark-tooltip": "ఈ పేజీ యొక్క సరికొత్త కూర్పుకు అనువాదం కోసం గుర్తుపెట్టు.",
+ "tpt-rev-unmark-tooltip": "ఈ పేజీని అనువాదం నుండి తీసివెయ్యి.",
+ "tpt-rev-discourage-tooltip": "ఈ పేజీలో ఇకపై అనువాదాలను నీరుగార్చు.",
+ "translate-tag-translate-link-desc": "ఈ పేజీని అనువదించండి",
+ "translate-tag-markthis": "ఈ పేజీని అనువాదం కొరకు గుర్తించు",
+ "translate-tag-markthisagain": "చివరిసారి <span class=\"plainlinks\">[$2 అనువాదానికి గుర్తించినప్పటి నుండి]</span> ఈ పేజీకి <span class=\"plainlinks\">[$1 మార్పులు]</span> జరిగాయి.",
+ "tpt-languages-legend": "ఇతర భాషలు:",
+ "tpt-languages-nonzero": "$1 ($2% అనువాదమైంది)",
+ "tpt-aggregategroup-add": "చేర్చు",
+ "tpt-aggregategroup-save": "భద్రపరచు",
+ "tpt-aggregategroup-new-name": "పేరు:",
+ "tpt-aggregategroup-new-description": "వివరణ (ఐచ్చికం):",
+ "log-name-pagetranslation": "పేజీ అనువాదాల చిట్టా",
+ "pt-movepage-list-pages": "తరలించాల్సిన పుటల యొక్క జాబితా",
+ "pt-movepage-list-translation": "అనువాద పుటలు",
+ "pt-movepage-list-other": "ఇతర ఉపపుటలు",
+ "pt-movepage-list-count": "మొత్తం తరలించాల్సినవి $1 {{PLURAL:$1|పుట|పుటలు}}.",
+ "pt-movepage-current": "ప్రస్తుత పేరు:",
+ "pt-movepage-new": "కొత్త పేరు:",
+ "pt-movepage-reason": "కారణం:",
+ "pt-deletepage-current": "పేజీ పేరు:",
+ "pt-deletepage-reason": "కారణం:",
+ "pt-deletepage-subpages": "అన్ని ఉపపేజీలను తొలగించు",
+ "pt-deletepage-list-translation": "అనువాద పేజీలు",
+ "pt-deletepage-list-other": "ఇతర ఉపపేజీలు",
+ "pm-import-button-label": "దిగుమతి చెయ్యి",
+ "pm-savepages-button-label": "భద్రపరచు",
+ "pm-cancel-button-label": "రద్దుచేయి"
+}
diff --git a/Translate/i18n/pagetranslation/tg-cyrl.json b/Translate/i18n/pagetranslation/tg-cyrl.json
new file mode 100644
index 00000000..e0fc30db
--- /dev/null
+++ b/Translate/i18n/pagetranslation/tg-cyrl.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ibrahim",
+ "ToJack"
+ ]
+ },
+ "pagetranslation": "Саҳифаи тарҷума",
+ "tpt-diff-old": "Матни пешина",
+ "tpt-diff-new": "Матни нав",
+ "tpt-old-pages-title": "Саҳифаҳо дар ҳоли тарҷума",
+ "tpt-languages-nonzero": "$1 ($2% тарҷумашуда)"
+}
diff --git a/Translate/i18n/pagetranslation/th.json b/Translate/i18n/pagetranslation/th.json
new file mode 100644
index 00000000..95060b6f
--- /dev/null
+++ b/Translate/i18n/pagetranslation/th.json
@@ -0,0 +1,76 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aefgh39622",
+ "Ans",
+ "Horus",
+ "Octahedron80",
+ "Passawuth",
+ "Woraponboonkerd"
+ ]
+ },
+ "pagetranslation": "การแปลภาษา",
+ "right-pagetranslation": "กำหนดให้รุ่นปรับปรุงนี้เพื่อการแปลภาษา",
+ "action-pagetranslation": "จัดการหน้าที่แปลได้",
+ "tpt-section": "หน่วยการแปล $1",
+ "tpt-section-new": "หน่วยการแปลใหม่\n\nชื่อ: $1",
+ "tpt-section-deleted": "หน่วยการแปล $1",
+ "tpt-diff-old": "ข้อความก่อนหน้า",
+ "tpt-diff-new": "ข้อความใหม่",
+ "tpt-submit": "กำหนดให้รุ่นนี้เพื่อการแปลภาษา",
+ "tpt-sections-oldnew": "หน่วยการแปลใหม่และที่มีอยู่เดิมแล้ว",
+ "tpt-sections-deleted": "หน่วยการแปลที่ถูกลบแล้ว",
+ "tpt-sections-template": "แม่แบบหน้าการแปลภาษา",
+ "tpt-action-nofuzzy": "ไม่ต้องเลิกตรวจสอบการแปล",
+ "tpt-badtitle": "ชื่อหน้าที่กำหนดมานั้น ($1) ไม่ใช่ชื่อหน้าที่ถูกต้อง",
+ "tpt-nosuchpage": "ไม่มีหน้า $1",
+ "tpt-oldrevision": "$2 ไม่ใช่รุ่นปรับปรุงล่าสุดของหน้าชื่อ[[:$1]]\n\nเฉพาะรุ่นปรับปรุงล่าสุดเท่านั้นที่สา่มารถกำหนดเพื่อการแปลภาษา",
+ "tpt-notsuitable": "หน้า $1 นั้นไม่เมาะสมในการแปลภาษา\n\nตรวจสอบให้แน่ใจว่ามีแท็ก <nowiki><translate></nowiki> อยู่และมีประโยคของโค้ดที่ถูกต้อง",
+ "tpt-saveok": "หน้า [[:$1]] ได้ถูกกำหนดไว้สำหรับการแปลภาษากับหน่วยการแปลภาษา $2 หน่วย\n\nหน้านี้สามารถ<span class=\"plainlinks\">[$3 เริ่มแปลภาษาได้แล้ว]</span>",
+ "tpt-offer-notify": "คุณสามารถ<span class=\"plainlinks\">[$1 แจ้งเตือนผู้แปล]</span>เกี่ยวกับหน้านี้ได้",
+ "tpt-showpage-intro": "ส่วนที่มีการเพิ่มใหม่, มีอยู่เดิม และที่ถูกลบไปแล้วนั้นปรากฎด้านล่างนี้\nก่อนที่จะทำให้รุ่นปรับปรุงนี้สำหรับการแปลภาษา ตรวจสอบให้แน่ใจว่าการเปลี่ยนแปลงของส่วนต่างๆ ได้ถูกลดลงมาเพื่อเป็นการหลีกเลี่ยงงานที่ไม่จำเป็นของผู้แปลภาษา",
+ "tpt-mark-summary": "กำหนดให้รุ่นปรับปรุงนี้สำหรับการแปลภาษา",
+ "tpt-edit-failed": "ไม่สามารถปรับปรุงหน้า: $1 ได้",
+ "tpt-duplicate": "ชื่อหน่วยการแปล $1 ถูกใช้แล้วมากกว่าหนึ่งครั้ง",
+ "tpt-unmarked": "หน้า $1 ไม่ได้ถูกกำหนดให้เพื่อการแปลภาษาอีกต่อไป",
+ "tpt-list-nopages": "ไม่มีหน้าใดๆ ที่ถูกกำหนดเพื่อการแปลภาษา หรือพร้อมที่จะถูกกำหนดเพื่อการแปลภาษา",
+ "tpt-new-pages-title": "หน้าที่เสนอสำหรับการแปลภาษา",
+ "tpt-old-pages-title": "หน้าที่มีการแปลภาษา",
+ "tpt-other-pages-title": "หน้าเสีย",
+ "tpt-new-pages": "{{PLURAL:$1|หน้านี้|หน้าเหล่านี้}} มีที่คั่นสำหรับการแปลภาษาอยู่ แต่ไม่มีรุ่นปรับปรุงใดๆ เลยของ{{PLURAL:$1|หน้านี้|หน้าแหล่านี้}} ที่ได้ถูกกำหนดเพื่อการแปลภาษา",
+ "tpt-old-pages": "รุ่นปรับปรุงบางรุ่นของ{{PLURAL:$1|หน้านี้|หน้าต่างๆ เหล่านี้}} ได้ถูกกำหนดเพื่อการแปลภาษาแล้ว",
+ "tpt-select-prioritylangs-reason": "เหตุผล:",
+ "tpt-rev-unmark": "ลบจากการแปล",
+ "translate-tag-translate-link-desc": "แปลหน้านี้",
+ "translate-tag-markthis": "กำหนดให้หน้านี้เพื่อการแปลภาษา",
+ "translate-tag-markthisagain": "หน้านี้มี<span class=\"plainlinks\">[$1 ความเปลี่ยนแปลง]</span> นับตั้งแต่ครั้งสุดท้ายที่<span class=\"plainlinks\">[$2 ถูกกำหนดเพื่อการแปลภาษา]</span>.",
+ "translate-tag-hasnew": "หน้านี้มี<span class=\"plainlinks\">[$1 ความเปลี่ยนแปลง]</span> ที่ไม่ได้ถูกกำหนดเพื่อการแปลภาษา",
+ "tpt-translation-intro": "หน้านี้คือ<span class=\"plainlinks\">[$1 รุ่นปรับปรุงที่เริ่มแปลแล้ว]</span> ของ [[$2]] และการแปลภาษาเสร็จสิ้นแล้ว $3 เปอร์เซ็นต์ของทั้งหมดและเป็นรุ่นล่าสุด",
+ "tpt-translation-intro-fuzzy": "การแปลภาษาที่ตกรุ่นแล้วจะถูกทำเครื่องหมายในลักษณะนี้",
+ "tpt-languages-legend": "ภาษาอื่น ๆ:",
+ "tpt-languages-nonzero": "$1 (แปลแล้ว $2%)",
+ "tpt-tab-translate": "แปล",
+ "tpt-target-page": "ไม่สามารถปรับปรุงหน้านี้ตามปกติได้\nหน้านี้เป็นหน้าการแปลของหน้า [[$1]] และสามารถปรับปรุงการแปลได้โดยใช้[$2 เครื่องมือการแปล]",
+ "tpt-render-summary": "กำลังอัพเดตเพื่อทำให้ตรงกันกับรุ่นปรับปรุงใหม่ของหน้่าโค้ดหลัก",
+ "tpt-aggregategroup-add": "เพิ่ม",
+ "tpt-aggregategroup-save": "บันทึก",
+ "tpt-aggregategroup-new-name": "ชื่อ:",
+ "tpt-aggregategroup-edit-name": "ชื่อ:",
+ "tpt-aggregategroup-edit-description": "คำอธิบาย:",
+ "tpt-aggregategroup-update": "บันทึก",
+ "tpt-aggregategroup-update-cancel": "ยกเลิก",
+ "pt-movepage-list-pages": "รายชื่อหน้าที่จะย้าย",
+ "pt-movepage-current": "ชื่อปัจจุบัน:",
+ "pt-movepage-new": "ชื่อใหม่:",
+ "pt-movepage-reason": "เหตุผล:",
+ "pt-deletepage-action-check": "แสดงรายชื่อหน้าที่จะถูกลบ",
+ "pt-deletepage-current": "ชื่อหน้า:",
+ "pt-deletepage-reason": "เหตุผล:",
+ "pt-deletepage-subpages": "ลบหน้าย่อยทั้งหมด",
+ "pt-deletepage-list-pages": "รายชื่อหน้าที่จะลบ",
+ "pm-import-button-label": "นำเข้า",
+ "pm-savepages-button-label": "บันทึก",
+ "pm-cancel-button-label": "ยกเลิก",
+ "pp-save-button-label": "บันทึก",
+ "pp-cancel-button-label": "ยกเลิก"
+}
diff --git a/Translate/i18n/pagetranslation/ti.json b/Translate/i18n/pagetranslation/ti.json
new file mode 100644
index 00000000..58fc7374
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ti.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joanmp17"
+ ]
+ },
+ "tpt-rev-encourage": "ናብ ዝነበሮ ምለስ",
+ "translate-tag-translate-link-desc": "እዚ ገጽ ተርጉም",
+ "tpt-languages-legend": "ካልኦት ቋንቋታት፦",
+ "tpt-tab-translate": "ተርጉም",
+ "tpt-aggregategroup-add": "ወስኽ",
+ "tpt-aggregategroup-save": "ኣቐምጥ",
+ "tpt-aggregategroup-update": "ኣቐምጥ",
+ "tpt-aggregategroup-update-cancel": "ኣትርፍ",
+ "pm-import-button-label": "ኣምጽእ",
+ "pm-savepages-button-label": "ኣቐምጥ",
+ "pm-cancel-button-label": "ኣትርፍ",
+ "pp-save-button-label": "ኣቐምጥ",
+ "pp-cancel-button-label": "ኣትርፍ",
+ "tpt-generic-button": "ኣረጋግጽ"
+}
diff --git a/Translate/i18n/pagetranslation/tk.json b/Translate/i18n/pagetranslation/tk.json
new file mode 100644
index 00000000..c5ff8e91
--- /dev/null
+++ b/Translate/i18n/pagetranslation/tk.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hanberke",
+ "TayfunEt."
+ ]
+ },
+ "pagetranslation": "Terjime sahypasy",
+ "right-pagetranslation": "Terjime üçin sahypalaryň wersiýalaryny belläň",
+ "action-pagetranslation": "terjime edilýän sahypalary dolandyrmak",
+ "tps-edit-sourcepage-ve-warning-limited-text": "Käbir terjime edilip bilinjek ýerler bu redaktorda birleşip bolmaýar. Bulary redaktirlemek üçin çeşme redaktoryny ulanyň.",
+ "tps-edit-sourcepage-ve-warning-title": "Duýduryş: Goldanmaýan sahypa",
+ "tps-edit-sourcepage-ve-warning-text": "Terjime edilýän sahypany redaktirleýärsiňiz. Bu redaktorda redaktirlemek entek resmi taýdan goldanylmaýar. Çeşme redaktoryny ulanyň.",
+ "tps-edit-sourcepage-ve-warning-button": "OK",
+ "tpt-section": "Terjime bölümi $1",
+ "tpt-section-new": "Täze terjime bölümi.\nAdy: $1",
+ "tpt-section-deleted": "Terjime bölümi $1",
+ "tpt-diff-old": "Öňki tekst",
+ "tpt-diff-new": "Täze tekst",
+ "tpt-submit": "Terjime üçin bu wersiýany belläň",
+ "tpt-sections-oldnew": "Täze we bar bolan terjime bölümleri",
+ "tpt-sections-template": "Terjime sahypasynyň şablony",
+ "tpt-action-nofuzzy": "Terjimeleri ýatyrmaň",
+ "tpt-badtitle": "Berlen sahypa ady ($1) dogry at däl",
+ "translate-tag-translate-link-desc": "Bu sahypany terjime ediň",
+ "tpt-languages-zero": "Bu dil üçin terjime edip başlaň",
+ "tpt-languages-nonzero": "$1 ($2% terjime edildi)",
+ "tpt-tab-translate": "Terjime et",
+ "tpt-aggregategroup-add": "Goş",
+ "tpt-aggregategroup-save": "Ýazdyr",
+ "tpt-aggregategroup-close": "Ýap"
+}
diff --git a/Translate/i18n/pagetranslation/tl.json b/Translate/i18n/pagetranslation/tl.json
new file mode 100644
index 00000000..2b3d389f
--- /dev/null
+++ b/Translate/i18n/pagetranslation/tl.json
@@ -0,0 +1,132 @@
+{
+ "@metadata": {
+ "authors": [
+ "AnakngAraw",
+ "GinawaSaHapon",
+ "Jewel457",
+ "Sky Harbor"
+ ]
+ },
+ "pagetranslation": "Salinwika ng pahina",
+ "right-pagetranslation": "Tatakan ang mga bersyon ng mga pahinang isasalinwika",
+ "tpt-section": "Yunit ng salinwika $1",
+ "tpt-section-new": "Bagong yunit ng salinwika.\nPangalan: $1",
+ "tpt-section-deleted": "Yunit ng salinwika $1",
+ "tpt-diff-old": "Naunang teksto",
+ "tpt-diff-new": "Bagong teksto",
+ "tpt-submit": "Tatakan ang bersyong ito para isalinwika",
+ "tpt-sections-oldnew": "Bago at umiiral ng mga yunit ng salinwika",
+ "tpt-sections-deleted": "Naburang mga yunit ng salinwika",
+ "tpt-sections-template": "Suleras ng pahina ng salinwika",
+ "tpt-action-nofuzzy": "Huwag hindi tanggapin ang mga salinwika",
+ "tpt-badtitle": "Ang pangalan ng pahinang ibinigay ($1) ay isang hindi tanggap na pamagat",
+ "tpt-nosuchpage": "Hindi umiiral ang pahinang $1",
+ "tpt-oldrevision": "Ang $2 ay hindi ang pinakabagong bersyon ng pahinang [[:$1]].\nTanging pinakabagong mga bersyong lang ang tatatakan para sa pagsasalinwika.",
+ "tpt-notsuitable": "Hindi angkop ang pahinang $1 para sa pagsasalinwika.\nTiyaking mayroon itong mga tatak na <nowiki><translate></nowiki> at may isang tanggap na sintaks.",
+ "tpt-saveok": "Nilagyang ng tanda ang pahinang [[:$1]] para sa pagsasalinwika na may $2 na {{PLURAL:$2|yunit ng salinwika|mga yunit ng salinwika}}.\nMaaari na ngayong <span class=\"plainlinks\">[$3 isalinwika]</span> ang pahina.",
+ "tpt-showpage-intro": "Nakatala sa ibaba ang bago, umiiral at naburang mga yunit ng salinwika.\nBago tatakan ang bersyong ito para isalinwika, suriing nakauntian ang mga pagbabago sa mga yunit ng salinwika upang maiwasan ang hindi kailangang gawain para sa mga tagapagsalinwika.",
+ "tpt-mark-summary": "Tinatakan ang bersyong ito para isalinwika",
+ "tpt-edit-failed": "Hindi maisapanahon ang pahina: $1",
+ "tpt-duplicate": "Ang pangalan ng yunit ng salinwika na $1 ay ginagamit nang mas marami kaysa sa isa.",
+ "tpt-unmarked": "Ang pahinang $1 ay hindi na tinatakan para sa pagsasalinwika.",
+ "tpt-list-nopages": "Walang mga pahinang tinatakan para sa pagsasalinwika o nakahanda upang markahan para sa pagsasalinwika.",
+ "tpt-new-pages-title": "Mga pahinang ipinanukala para sa pagsasalinwika",
+ "tpt-old-pages-title": "Mga pahinang nasa pagsasalinwika",
+ "tpt-other-pages-title": "Patid na mga pahina",
+ "tpt-new-pages": "{{PLURAL:$1|Naglalaman ang pahinang ito|Naglalaman ang mga pahinang ito}} ng tekstong may mga tatak ng pagsasalinwika,\nngunit walang bersyon na {{PLURAL:$1|ang pahinang ito|ang mga pahinang ito}} ay kasalukuyang tinatakan para sa pagsasalinwika.",
+ "tpt-old-pages": "Ilang bersyon ng {{PLURAL:$1|pahinang ito|mga pahinang ito}} ay natatakan na para sa pagsasalinwika.",
+ "tpt-other-pages": "{{PLURAL:$1|Isang lumang bersyon ng pahinang ito ang|Mas lumang mga bersyon ng mga pahinang ito ang}} tinatakan para sa pagsasalinwika,\nsubalit ang pinakabagong {{PLURAL:$1|bersyon|mga bersyon}} ay hindi matatatakan para sa pagsasalinwika.",
+ "tpt-select-prioritylangs": "Talaan ng mga kodigo ng mga wikang dapat unahin na pinaghihiwa-hiwalay ng mga kuwit:",
+ "tpt-select-prioritylangs-force": "Iwasan ang mga pagsasalinwika papunta sa ibang mga wika kaysa sa mga wikang dapat unahin",
+ "tpt-select-prioritylangs-reason": "Dahilan:",
+ "tpt-sections-prioritylangs": "Mga wikang nararapat na unahin",
+ "tpt-rev-mark": "minarkahan para sa pagsasalinwika",
+ "tpt-rev-unmark": "alisin mula sa pagsasalinwika",
+ "tpt-rev-discourage": "huwag himukin",
+ "tpt-rev-encourage": "papanumbalikin",
+ "tpt-rev-mark-tooltip": "Markahan ang pinakahuling bersiyon ng pahinang ito para sa pagsasalinwika.",
+ "tpt-rev-unmark-tooltip": "Alisin ang pahinang ito mula sa pagsasalinwika.",
+ "tpt-rev-discourage-tooltip": "Huwag nang himukin ang karagdagan pang mga pagsasalinwika sa pahinang ito.",
+ "tpt-rev-encourage-tooltip": "Papanumbalikin ang pahinang ito papunta sa normal na pagsasalinwika.",
+ "translate-tag-translate-link-desc": "Isalinwika ang pahinang ito",
+ "translate-tag-markthis": "Tatakan ang pahinang ito para isalinwika",
+ "translate-tag-markthisagain": "Ang pahinang ito ay may <span class=\"plainlinks\">[$1 mga pagbabago]</span> mula pa noong huli itong <span class=\"plainlinks\">[$2 tinatakan para isalinwika]</span>.",
+ "translate-tag-hasnew": "Naglalaman ang pahinang ito ng <span class=\"plainlinks\">[$1 mga pagbabagong]</span> hindi tinatakan para isalinwika.",
+ "tpt-translation-intro": "Ang pahinang ito ay isang <span class=\"plainlinks\">[$1 naisalinwikang bersyon]</span> ng isang pahina [[$2]] at ang salinwika ay $3% kumpleto na.",
+ "tpt-translation-intro-fuzzy": "Tinatakan ng ganito ang mga pagsasalinwikang lipas na sa panahon.",
+ "tpt-languages-legend": "Iba pang mga wika:",
+ "tpt-languages-separator": "&#160;•&#32;",
+ "tpt-languages-zero": "Simulan ang pagsasalinwika para sa wikang ito",
+ "tpt-languages-nonzero": "$1 ($2% nasalin)",
+ "tpt-target-page": "Hindi maaaring kinakamay na maisapanahon ang pahinang ito.\nAng pahinang ito ay isang salinwika ng pahinang [[$1]] at maisasapanahon ang salinwika sa pamamagitan ng [$2 kasangkapang pansalinwika].",
+ "tpt-unknown-page": "Nakalaan ang puwang na pampangalang ito para sa mga salinwika ng pahina ng nilalaman.\nTila hindi tumutugma ang pahinang sinusubukan mong baguhin sa anumang pahinang natatakan para sa pagsasalinwika.",
+ "tpt-translation-restricted": "Ang pagsasalinwika ng pahinang ito na papunta sa wikang ito ay pinigilan ng isang tagapangasiwa ng salinwika.\n\nDahilan: $1",
+ "tpt-discouraged-language-force": "<strong>Ang pahinang ito ay hindi maisasalinwika upang maging $2.</strong>\n\nIsang tagapangasiwa ng pagsasalinwika ang nagpasya na ang pahinang ito ay maisasalinwika lamang papunta sa $3.",
+ "tpt-priority-languages": "Isang tagapangasiwa ng salinwika ang nagtakda ng mga wikang nararapat na unahin para sa pangkat na ito upang maging $1.",
+ "tpt-render-summary": "Isinasapanahon upang tumugma sa bagong bersyon ng pinagmulang pahina",
+ "aggregategroups": "Mga pangkat na pinagsama-sama",
+ "tpt-aggregategroup-add": "Idagdag",
+ "tpt-aggregategroup-save": "Itala",
+ "tpt-aggregategroup-add-new": "Magdagdag ng isang bagong pangkat na pinagsama",
+ "tpt-aggregategroup-new-name": "Pangalan:",
+ "tpt-aggregategroup-new-description": "Paglalarawan (maaaring wala nito):",
+ "tpt-aggregategroup-remove-confirm": "Nakatitiyak ka bang nais mong burahin ang pinagsamang pangkat na ito?",
+ "tpt-aggregategroup-invalid-group": "Hindi umiiral ang pangkat",
+ "tpt-aggregategroup-edit-name": "Pangalan:",
+ "tpt-aggregategroup-update": "Itala",
+ "pt-parse-open": "Hindi magkatimbang na tatak na &lt;translate>.\nSuleras ng pagsasalinwika: <pre>$1</pre>",
+ "pt-parse-close": "Hindi magkatimbang na tatak na &lt;translate>.\nSuleras ng pagsasalinwika: <pre>$1</pre>",
+ "pt-parse-nested": "Hindi pinapayagan ang nakapugad na mga yunit ng salinwika &lt;translate>.\nTeksto ng tatak: <pre>$1</pre>",
+ "pt-shake-multiple": "Mga pananda ng maramihang yunit ng salinwika para sa isang yunit ng salinwika.\nTeksto ng yunit ng salinwika: <pre>$1</pre>",
+ "pt-shake-position": "Mga pananda ng yunit ng salinwika sa loob ng posisyong hindi inaasahan.\nTeksto ng yunit ng salinwika: <pre>$1</pre>",
+ "pt-shake-empty": "Yunit ng salinwika na walang laman para sa panandang \"$1\".",
+ "log-description-pagetranslation": "Itala para sa mga gawaing may kaugnayan sa sistema ng pagsasalinwika ng pahina",
+ "log-name-pagetranslation": "Tala ng pagsasalinwika ng pahina",
+ "pt-movepage-title": "Ilipat ang maisasalinwikang pahinang $1",
+ "pt-movepage-blockers": "Hindi malilipat ang maisasalinwikang pahina papunta sa bagong pangalan dahil sa sumusunod na {{PLURAL:$1|kamalian|mga kamalian}}:",
+ "pt-movepage-block-base-invalid": "Hindi isang tanggap na pamagat ang puntiryang batayang pahina.",
+ "pt-movepage-block-tp-invalid": "Ang pinupukol na pamagat ng pahinang maisasalinwika para sa [[:$1]] ay hindi matatanggap (napakahaba?).",
+ "pt-movepage-block-section-invalid": "Ang pamagat ng pahina ng seksiyong pinupukol para sa \"[[:$1]]\" na para sa yunit ng salinwika ay hindi magiging katanggap-tanggap (napakahaba?).",
+ "pt-movepage-block-subpage-invalid": "Ang pinupukol na pamagat ng kabahaging pahina para sa [[:$1]] ay hindi matatanggap (napakahaba?).",
+ "pt-movepage-list-pages": "Talaan ng mga pahinang ililipat",
+ "pt-movepage-list-translation": "Mga pahina ng salinwika",
+ "pt-movepage-list-section": "Mga pahina ng yunit ng salinwika",
+ "pt-movepage-list-other": "Iba pang kabahaging mga pahina",
+ "pt-movepage-list-count": "Sa kabuuan ay $1 ang {{PLURAL:$1|pahina|mga pahina}}ng ililipat.",
+ "pt-movepage-legend": "Ilipat ang pahinang maisasalinwika",
+ "pt-movepage-current": "Kasalukuyang pangalan:",
+ "pt-movepage-new": "Bagong pangalan:",
+ "pt-movepage-reason": "Dahilan:",
+ "pt-movepage-subpages": "Ilipat ang lahat ng kabahaging mga pahina",
+ "pt-movepage-action-check": "Suriin kung maaari ang paglilipat",
+ "pt-movepage-action-perform": "Gawin ang paglipat",
+ "pt-movepage-action-other": "Baguhin ang pinupukol",
+ "pt-movepage-intro": "Ang natatanging pahinang ito ay nagpapahintulot sa iyong mailipat ang mga pahinang minarkahan para sa pagsasalinwika.\nAng galaw ng paglipat ay hindi magiging kaagad-agad, dahil maraming mga pahina ang kailangang ilipat.\nHabang inililipat ang mga pahina, hindi maaaring kasalamuhain ang mga pahinang tinutukoy.\nAng mga kabiguan ay itatala sa loob ng [[Special:Log/pagetranslation|talaan ng pagsasalinwika ng pahina]] at nangangailangan sila ng kinakamay na pagkukumpuni.",
+ "pt-movepage-logreason": "Bahagi ng maisasalinwikang pahinang $1.",
+ "pt-movepage-started": "Nailipat na ngayon ang pahinang batayan.\nPakisuri ang [[Special:Log/pagetranslation|talaan ng pagsasalinwika ng pahina]] para sa mga kamalian at mensahe ng pagkakabuo.",
+ "pt-locked-page": "Ikinandao ang pahinang ito dahil ang pahinang maisasalinwika ay kasalukuyang inililipat.",
+ "pt-deletepage-lang-title": "Binubura ang pahina ng salinwikang $1.",
+ "pt-deletepage-tp-title": "Binubura ang maisasalinwikang pahina na $1.",
+ "pt-deletepage-invalid-title": "Hindi katanggap-tanggap ang tinukoy na pahina.",
+ "pt-deletepage-invalid-text": "Ang tinukoy na pahina ay hindi isang pahinang maisasalinwika o salinwika kaya nito.",
+ "pt-deletepage-action-check": "Ilista ang mga pahinang buburahin",
+ "pt-deletepage-action-perform": "Gawin ang pagbura",
+ "pt-deletepage-action-other": "Baguhin ang puntirya",
+ "pt-deletepage-lang-legend": "Burahin ang pahina ng salinwika",
+ "pt-deletepage-tp-legend": "Burahin ang pahinang maisasalinwika",
+ "pt-deletepage-any-legend": "Burahin ang maisasalinwikang pahina o salinwika ng maisasalinwikang pahina",
+ "pt-deletepage-current": "Pangalan ng pahina:",
+ "pt-deletepage-reason": "Dahilan:",
+ "pt-deletepage-subpages": "Burahin ang lahat ng kabahaging mga pahina",
+ "pt-deletepage-list-pages": "Talaan ng mga pahinang buburahin",
+ "pt-deletepage-list-translation": "Mga pahina ng salinwika",
+ "pt-deletepage-list-section": "Mga pahina ng yunit ng salinwika",
+ "pt-deletepage-list-other": "Iba pang kabahaging mga pahina",
+ "pt-deletepage-list-count": "Sa kabuuan ay $1 ang {{PLURAL:$1|pahina|mga pahina}}ng buburahin.",
+ "pt-deletepage-full-logreason": "Bahagi ng maisasalinwikang pahinang $1.",
+ "pt-deletepage-lang-logreason": "Bahagi ng pahina ng salinwikang $1.",
+ "pt-deletepage-started": "Pakisuri ang [[Special:Log/pagetranslation|talaan ng pagsasalinwika ng pahina]] para sa mga kamalian at mensahe ng pagkakabuo.",
+ "pt-deletepage-intro": "Nagpapahintulot sa iyo ang pahinang ito na magbura ng kabuuan ng mga pahinang maisasalinwika o mga pagsasalinwika na papunta sa isang wika.\nAng kilos ng pagbura ay hindi magiging kaagad, dahil maraming mga pahina ang kakailanganing burahin.\nAng mga kabiguan ay itatala sa loob ng [[Special:Log/pagetranslation|tala ng pagsasalinwika ng pahina]] at kakailanganing kinakamay ang pagkukumpuni ng mga ito.",
+ "pm-savepages-button-label": "Itala",
+ "tpt-translate-title": "Payagan ang pagsasalin ng pamagat ng pahina"
+}
diff --git a/Translate/i18n/pagetranslation/tly.json b/Translate/i18n/pagetranslation/tly.json
new file mode 100644
index 00000000..21495024
--- /dev/null
+++ b/Translate/i18n/pagetranslation/tly.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Patriot Kur",
+ "Гусейн"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% пегордынијә быә)",
+ "tpt-aggregategroup-edit-description": "Təsvir",
+ "tpt-aggregategroup-update-cancel": "Ləğv karde",
+ "pm-cancel-button-label": "Ləğv karde",
+ "pp-cancel-button-label": "Ləğv karde"
+}
diff --git a/Translate/i18n/pagetranslation/tr.json b/Translate/i18n/pagetranslation/tr.json
new file mode 100644
index 00000000..ddb4b69c
--- /dev/null
+++ b/Translate/i18n/pagetranslation/tr.json
@@ -0,0 +1,271 @@
+{
+ "@metadata": {
+ "authors": [
+ "Arystanbek",
+ "BaRaN6161 TURK",
+ "Bulgu",
+ "Can",
+ "Emperyan",
+ "Hedda",
+ "Incelemeelemani",
+ "Joseph",
+ "Karduelis",
+ "Mavrikant",
+ "McAang",
+ "Meelo",
+ "Melissadilara",
+ "MuratTheTurkish",
+ "Pols12",
+ "Rapsar",
+ "SaldırganSincap",
+ "Sayginer",
+ "Sezgin İbiş",
+ "Suelnur",
+ "Vito Genovese",
+ "Ömer Berkay"
+ ]
+ },
+ "pagetranslation": "Çeviri sayfası",
+ "nstab-translations": "Çeviri birimi",
+ "right-pagetranslation": "Çeviri için sayfaların sürümlerini işaretle",
+ "action-pagetranslation": "çevrilebilir sayfaları yönet",
+ "tps-edit-sourcepage-text": "Bir kaynak çeviri sayfasını düzenliyorsunuz. Lütfen aşağıdaki belgelere aşina olduğunuzdan emin olun:\n\n* [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration/tr#Changing_the_source_text Kaynak metnin değiştirilmesi]\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration/tr#Markup_examples Kullanılacak biçimlendirme örneği]",
+ "tps-edit-sourcepage-ve-warning-title": "Uyarı: Desteklemeyen sayfa",
+ "tps-edit-sourcepage-ve-warning-text": "Çevrilebilir bir sayfayı düzenliyorsunuz. Bunları bu düzenleyicide düzenlemek henüz resmi olarak desteklenmemektedir. Lütfen kaynak düzenleyiciyi kullanın.",
+ "tps-edit-sourcepage-ve-warning-button": "Tamam",
+ "tpt-section": "Çeviri birimi $1",
+ "tpt-section-new": "Yeni çeviri birimi.\nAd: $1",
+ "tpt-section-deleted": "Çeviri birimi $1",
+ "tpt-diff-old": "Önceki metin",
+ "tpt-diff-new": "Yeni metin",
+ "tpt-submit": "Çeviri için bu sürümü işaretle",
+ "tpt-sections-oldnew": "Yeni ve mevcut çeviri birimleri",
+ "tpt-sections-deleted": "Silinen çeviri birimleri",
+ "tpt-sections-template": "Çeviri sayfası şablonu",
+ "tpt-action-nofuzzy": "Çevirileri geçersiz kılmayın",
+ "tpt-badtitle": "Verilen sayfa adı ($1) geçerli bir başlık değil",
+ "tpt-nosuchpage": "$1 sayfası mevcut değil",
+ "tpt-oldrevision": "$2, [[:$1]] sayfasının en son sürümü değil.\nYalnızca en son sürümler çeviri için işaretlenebilir.",
+ "tpt-notsuitable": "$1 sayfası çevrilmeye uygun değil.\n$2 etiketine ve geçerli bir sözdizimine sahip olduğundan emin olun.",
+ "tpt-saveok": "[[:$1]] sayfası $2 çeviri birimi ile çeviri için işaretlenmiş.\nSayfa artık <span class=\"plainlinks\">[$3 çevrilebilir]</span>.",
+ "tpt-saveok-first": "Bu sayfa için (varsa) [[Special:PageMigration|önceden var olan çeviriyi içe aktarabilirsiniz]].",
+ "tpt-offer-notify": "Çevirmenleri bu sayfa hakkında <span class=\"plainlinks\">[$1 bilgilendirebilirsiniz]</span>.",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|Çevrilebilir sayfa listesine görüntüleyin.]]",
+ "tpt-showpage-intro": "Aşağıda yeni, mevcut ve silinmiş çeviri birimleri listelenmiştir.\nBu sürümü çeviri için işaretlemeden önce, çevirmenlerin gereksiz çalışmasını önlemek için çeviri birimlerindeki değişikliklerin en aza indirildiğini kontrol edin.",
+ "tpt-mark-summary": "Bu sürüm çeviri için işaretlendi",
+ "tpt-mark-nochanges": "İncelenecek değişiklik yok. Çeviri için bu sayfayı işaretlemek sayfayı veya mevcut çeviri birimini düzenlemez.",
+ "tpt-edit-failed": "Sayfa güncellenemedi: $1",
+ "tpt-duplicate": "Çeviri birimi adı $1, birden çok kez kullanılıyor.",
+ "tpt-invalid": "Çeviri birimi adı $1 alt çizgi veya eğik çizgi içermemelidir.",
+ "tpt-unmarked": "[[:$1]] sayfası artık çeviri için işaretlenmiyor.",
+ "tpt-list-nopages": "Çeviri için işaretlenen ya da işaretlenmeye hazır olan herhangi bir sayfa bulunmuyor.",
+ "tpt-new-pages-title": "Çeviri için önerilen sayfalar",
+ "tpt-old-pages-title": "Çeviri sayfaları",
+ "tpt-other-pages-title": "Bozuk sayfalar",
+ "tpt-outdated-pages-title": "Değişiklikleri bekleyen sayfalar",
+ "tpt-new-pages": "{{PLURAL:$1|Bu sayfa}} çeviri etiketleri içeren metin içeriyor,\nancak şu anda çeviri için bu sayfa sürümüne sahip bir sürüm yok.",
+ "tpt-old-pages": "{{PLURAL:$1|Bu sayfanın|Bu sayfaların}} en son sürümü çeviri için işaretlendi.",
+ "tpt-other-pages": "{{PLURAL:$1|Bu sayfanın eski bir sürümü|Bu sayfaların eski sürümleri}} çeviri için işaretlenmiş,\nancak en son {{PLURAL:$1|sürüm|sürüm}} çeviri için işaretlenemez.",
+ "tpt-outdated-pages": "{{PLURAL:$1|Bu sayfa|Bu sayfalar}} çeviri değişikleri işaretlenmemiş.",
+ "tpt-tag-discouraged": "vazgeçti",
+ "tpt-tag-oldsyntax": "eski söz dizimi",
+ "tpt-tag-no-transclusion-support": "yansıtma desteği yok",
+ "tpt-select-prioritylangs": "Öncelikli dil kodlarının virgülle ayrılmış listesi:",
+ "tpt-select-prioritylangs-force": "Öncelikli diller dışındaki dillere çevirileri önle",
+ "tpt-select-prioritylangs-reason": "Sebep:",
+ "tpt-sections-prioritylangs": "Öncelikli diller",
+ "tpt-sections-syntaxversion": "Söz dizimi sürümü",
+ "tpt-syntaxversion-text": "Bu sayfa şu anda çevrilebilir sayfa kaynağı sözdiziminin eski bir sürümünü kullanmaktadır. Yeni sürüm, metnin doğru dilini belirtmek için çevrilmemiş bölümleri bir HTML etiketi ile sarar. Örnek: $1. Bir öğenin <code>title</code> özelliğini çevirirken olduğu gibi, uygun olmayan yerlerde her tür kaydırmayı önlemek için yeni bir biçimlendirme sözdizimi $2 kullanabilirsiniz. Eski bir sözdizimi sürümüne geri dönmek mümkün değildir.",
+ "tpt-syntaxversion-label": "Bu sayfa için en son sözdizimi sürümünü kullanın",
+ "tpt-transclusion": "Şablon yansıtması",
+ "tpt-transclusion-label": "Bu sayfa için çeviriye duyarlı yansıtmayı etkinleştirin",
+ "tpt-rev-mark": "çeviri için işaretle",
+ "tpt-rev-unmark": "çeviriden kaldır",
+ "tpt-rev-discourage": "vazgeç",
+ "tpt-rev-encourage": "geri getir",
+ "tpt-rev-mark-tooltip": "Çeviri için bu sayfanın en son sürümünü işaretleyin.",
+ "tpt-rev-unmark-tooltip": "Bu sayfayı çeviriden kaldırın.",
+ "tpt-rev-discourage-tooltip": "Bu sayfadaki diğer çevirilerden vazgeçir.",
+ "tpt-rev-encourage-tooltip": "Bu sayfayı normal çeviriye geri yükle.",
+ "translate-tag-translate-link-desc": "Bu sayfayı çevir",
+ "translate-tag-markthis": "Bu sayfayı çeviri için işaretle",
+ "translate-tag-markthisagain": "Bu sayfada en son <span class=\"plainlinks\">[$2 çeviri için işaretlendiğinden]</span> beri <span class=\"plainlinks\">[$1 değişiklikler]</span> var",
+ "translate-tag-hasnew": "Bu sayfa, çeviri için işaretlenmemiş <span class=\"plainlinks\">[$1 değişiklik]</span> içeriyor.",
+ "tpt-translation-intro": "Bu sayfa [[$2]] sayfasının <span class=\"plainlinks\">[$1 çevrilmiş sürüm]</span> ve çeviri %$3 tamamlandı.",
+ "tpt-translation-intro-fuzzy": "Eski çeviriler bu şekilde işaretlenir.",
+ "tpt-languages-legend": "Diğer diller:",
+ "tpt-languages-zero": "Bu dili için çeviriyi başlatın",
+ "tpt-languages-nonzero": "$1 (%$2 çevrildi)",
+ "tpt-tab-translate": "Çevir",
+ "tpt-target-page": "Bu sayfa elle güncellenemez.\nBu sayfa [[$1]] sayfasının bir çevirisidir ve çeviri, [$2 çeviri aracı] kullanılarak güncellenebilir.",
+ "tpt-unknown-page": "Bu ad alanı içerik sayfası çevirileri için ayrılmıştır.\nDüzenlemeye çalıştığınız sayfa, çeviri için işaretlenmiş hiçbir sayfaya karşılık gelmiyor gibi görünüyor.",
+ "tpt-translation-restricted": "Bu sayfanın bu dile çevirisi çeviri hizmetlisi tarafından engellendi.\n\nSebep: $1",
+ "tpt-translation-restricted-no-reason": "Bu sayfanın bu dile çevrilmesi bir çeviri hizmetli tarafından engellendi.",
+ "tpt-discouraged-language-force-header": "Bu sayfa $1 ile çevrilemez.",
+ "tpt-discouraged-language-force-content": "Bir çeviri hizmetlisi bu sayfanın yalnızca $1 ile çevrilebileceğine karar verdi.",
+ "tpt-discouraged-language-header": "$1 ile çevirmek bu sayfaya bir öncelik değildir.",
+ "tpt-discouraged-language-content": "Bir çeviri hizmetlisi çeviri çabalarını $1 ile odaklamaya karar verdi.",
+ "tpt-discouraged-language-force": "<strong>Bu sayfa $2 ile çevrilemez.</strong>\n\nBir çeviri hizmetlisi bu sayfanın yalnızca $3 ile çevrilebileceğine karar verdi.",
+ "tpt-priority-languages": "Bir çeviri hizmetlisi bu grup için öncelik dillerini $1 olarak ayarladı.",
+ "tpt-priority-languages-force": "Bir çeviri hizmetlisi bu grup için öncelik dillerini $1 olarak ayarladı. Başka dillere tercüme yapılamaz.",
+ "tpt-discouraged-translation-header": "Bu sayfanın çevirisi önerilmez",
+ "tpt-discouraged-translation-content": "Bir çeviri yöneticisi, bu sayfanın çevrilmesini önermiyor. Sayfayı yine de çevirebilirsiniz ancak çevirileriniz işe yaramayabilir.",
+ "tpt-render-summary": "Kaynak sayfanın yeni sürümü ile eşleme için güncelleniyor",
+ "aggregategroups": "Grupları birleştir",
+ "tpt-aggregategroup-add": "Ekle",
+ "tpt-aggregategroup-save": "Kaydet",
+ "tpt-aggregategroup-close": "Kapat",
+ "tpt-aggregategroup-add-new": "Yeni bir toplu grup ekle",
+ "tpt-aggregategroup-new-name": "Ad:",
+ "tpt-aggregategroup-new-description": "Açıklama (isteğe bağlı):",
+ "tpt-aggregategroup-remove-confirm": "Bu toplu grubu silmek istediğinizden emin misiniz?",
+ "tpt-aggregategroup-invalid-group": "Grup mevcut değil",
+ "tpt-aggregategroup-edit-name": "İsim:",
+ "tpt-aggregategroup-edit-description": "Açıklama:",
+ "tpt-aggregategroup-update": "Kaydet",
+ "tpt-aggregategroup-update-cancel": "İptal",
+ "tpt-aggregategroup-expand-all-groups": "tüm grupları genişlet",
+ "tpt-aggregategroup-collapse-all-groups": "tüm grupları daralt",
+ "tpt-aggregategroup-expand-group": "grubu genişlet",
+ "tpt-aggregategroup-collapse-group": "grubu daralt",
+ "tpt-invalid-group": "Geçersiz grup",
+ "pt-parse-open": "Dengesiz &lt;translate> etiketi.\nÇeviri şablonu: <pre>$1</pre>",
+ "pt-parse-close": "Dengesiz &lt;translate> etiketi.\nÇeviri şablonu: <pre>$1</pre>",
+ "pt-parse-nested": "İç içe &lt;translate> çeviri birimlerine izin verilmez.\nEtiket metni: <pre>$1</pre>",
+ "pt-shake-multiple": "Bir çeviri birimi için çoklu çeviri birimi işaretleri.\nÇeviri birimlerinin boş satırlarla ayrıldığından emin olun.\nÇeviri birimi metni: <pre>$1</pre>",
+ "pt-shake-position": "Çeviri birimi işaretçileri beklenmedik bir konumda.\nÇeviri birimi metni: <pre>$1</pre>",
+ "pt-shake-empty": "\"$1\" işareti için boş çeviri birimi.",
+ "log-description-pagetranslation": "Sayfa çeviri sistemiyle ilgili eylemlerin günlüğü",
+ "log-name-pagetranslation": "Sayfa çeviri günlüğü",
+ "logentry-pagetranslation-mark": "$1, $3 sayfasını çeviri için {{GENDER:$2|işaretledi}}",
+ "logentry-pagetranslation-unmark": "$1, $3 sayfasını çeviri sisteminden {{GENDER:$2|kaldırdı}}",
+ "logentry-pagetranslation-moveok": "$1, $3 sayfanın $4 yeniden adlandırılmasını {{GENDER:$2|tamamlandı}}",
+ "logentry-pagetranslation-movenok": "$1, $3 sayfasını $4 taşırken bir sorunla {{GENDER:$2|karşılaştı}}",
+ "logentry-pagetranslation-deletefok": "$1, $3 sayfanın çevrilebilir silinmesi {{GENDER:$2|tamamlandı}}",
+ "logentry-pagetranslation-deletefnok": "$1, $3 çevrilebilir sayfayı $4 ait {{GENDER:$2|silemedi}}",
+ "logentry-pagetranslation-deletelok": "$1, $3 sayfasının çeviri silinmesini {{GENDER:$2|tamamlandı}}",
+ "logentry-pagetranslation-deletelnok": "$1, $3 çeviri sayfasına ait $4 {{GENDER:$2|silinemedi}}",
+ "logentry-pagetranslation-encourage": "$1, $3 sayfasını çeviriyi {{GENDER:$2|vazgeçti}}",
+ "logentry-pagetranslation-discourage": "$1, $3 sayfasını çevirisini {{GENDER:$2|vazgeçti}}",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1, çevrilebilir $3 sayfadan öncelikli dilleri {{GENDER:$2|kaldırdı}}",
+ "logentry-pagetranslation-prioritylanguages": "$1, çevrilebilir $3 sayfa için öncelik dillerini ile $5 {{GENDER:$2|ayarladı}}",
+ "logentry-pagetranslation-prioritylanguages-force": "$1, $3 çevrilebilir sayfa için dilleri ile $5 {{GENDER:$2|sınırlandırdı}}",
+ "logentry-pagetranslation-associate": "$1, $3 çevrilebilir sayfayı $4 gruba {{GENDER:$2|ekledi}}",
+ "logentry-pagetranslation-dissociate": "$1, $3 çevirebilir sayfayı $4 gruba {{GENDER:$2|kaldırdı}}",
+ "log-action-filter-pagetranslation": "Eylem türü:",
+ "log-action-filter-pagetranslation-mark": "Çeviri için işaretle",
+ "log-action-filter-pagetranslation-unmark": "Çeviriden kaldırması",
+ "log-action-filter-pagetranslation-move": "Sayfa taşımaları",
+ "log-action-filter-pagetranslation-delete": "Sayfa silmeleri",
+ "log-action-filter-pagetranslation-encourage": "Çeviri teşviki",
+ "log-action-filter-pagetranslation-discourage": "Çeviri cesareti",
+ "log-action-filter-pagetranslation-prioritylanguages": "Öncelik dilleri değişikliği",
+ "log-action-filter-pagetranslation-aggregategroups": "Toplam grup değişikliği",
+ "pt-movepage-title": "\"$1\" çevrilebilir sayfayı taşı",
+ "pt-movepage-blockers": "Çevrilebilir sayfa, aşağıdaki {{PLURAL:$1|hata|hatalar}} nedeniyle yeni bir ada taşınamaz:",
+ "pt-movepage-block-base-invalid": "Hedef çevrilebilir sayfa adı geçerli bir başlık değil.",
+ "pt-movepage-block-tp-invalid": "\"[[:$1]]\" için hedef çeviri sayfası başlığı geçersiz (çok uzun mu?).",
+ "pt-movepage-block-section-invalid": "Çeviri birimi için \"[[:$1]]\" hedef sayfa başlığı geçersiz (çok uzun mu?).",
+ "pt-movepage-block-subpage-invalid": "\"[[:$1]]\" için hedef alt sayfa başlığı geçersiz (çok uzun mu?).",
+ "pt-movepage-block-talkpage-invalid": "\"[[:$1]]\" için hedef tartışma sayfası başlığı geçersiz (çok mu uzun?).",
+ "pt-movepage-block-unknown-page": "Taşınmakta olan sayfa ([[:$1]]) çevrilebilir sayfanın bir parçası gibi görünmüyor.",
+ "pt-movepage-block-ns-talk-unsupported": "Sayfa ([[:$1]]) tartışma sayfalarını desteklemeyen bir ad alanına taşınıyor.",
+ "pt-movepage-block-rename-failed": "[[:$1]] sayfası için yeni bir başlık oluşturulurken bir hata oluştu",
+ "pt-movepage-list-pages": "Taşınacak sayfaların listesi",
+ "pt-movepage-list-translation": "Çeviri {{PLURAL:$1|sayfası|sayfaları}}",
+ "pt-movepage-list-section": "Çeviri birimi {{PLURAL:$1|sayfası|sayfaları}}",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Alt sayfa|Alt sayfalar}} çeviri için işaretlendi",
+ "pt-movepage-list-translatable-note": "Bu sayfalar ayrı olarak taşınmalıdır.",
+ "pt-movepage-list-other": "Diğer {{PLURAL:$1|alt sayfa|alt sayfalar}}",
+ "pt-movepage-list-count": "Taşımak için $2 {{PLURAL:$2|alt sayfa}} ve $3 tartışma sayfası dahil olmak üzere toplamda $1 sayfa.",
+ "pt-movepage-page-count-limit": "Bu çevrilebilir sayfa $1 fazladan {{PLURAL:$1|sayfa}} içerir. Bu kadar çok sayfanın taşınmasının güvenilmez olduğu görüldü. Bunu bir bakım betiği aracılığıyla yapmak için lütfen sistem hizmetli ile iletişime geçin.",
+ "pt-movepage-list-no-pages": "Sayfa bulunamadı.",
+ "pt-movepage-legend": "Çevrilebilir sayfayı taşı",
+ "pt-movepage-current": "Geçerli adı:",
+ "pt-movepage-new": "Yeni adı:",
+ "pt-movepage-reason": "Sebep:",
+ "pt-movepage-subpages": "Tüm alt sayfaları taşı",
+ "pt-movepage-talkpages": "Tartışma sayfasını taşı",
+ "pt-movepage-talkpage-exists": "(Tartışma sayfası var)",
+ "pt-movepage-action-check": "Taşımanın mümkün olup olmadığını kontrol edin",
+ "pt-movepage-action-perform": "Taşımaya yap",
+ "pt-movepage-action-other": "Hedefi değiştir",
+ "pt-movepage-intro": "Bu özel sayfa, çeviri için işaretlenmiş sayfaları taşımanıza izin verir.\nBirçok eylemin taşınması gerekeceğinden taşıma işlemi anında gerçekleşmeyecek.\nSayfalar taşınırken, söz konusu sayfalarla etkileşim kurmak mümkün değildir.\nArızalar [[$1|sayfa çeviri günlüğü]] içine kaydedilir ve elle onarılması gerekir.",
+ "pt-movepage-logreason": "Çevrilebilir sayfanın \"$1\" bölümü",
+ "pt-movepage-started": "Hatalar ve tamamlanma mesajı için lütfen [[$1|sayfa çeviri günlüğüne]] bakın.",
+ "pt-locked-page": "Çevrilebilir sayfa şu anda taşındığı için bu sayfa kilitli.",
+ "pt-deletepage-lang-title": "\"$1\" çeviri sayfasını siliniyor",
+ "pt-deletepage-tp-title": "\"$1\" çevrilebilir sayfası siliniyor",
+ "pt-deletepage-invalid-title": "Belirtilen sayfa geçerli değil.",
+ "pt-deletepage-invalid-text": "Belirtilen sayfa çevrilebilir bir sayfa veya çeviri sayfası değil.",
+ "pt-deletepage-action-check": "Silinecek sayfaları listele",
+ "pt-deletepage-action-perform": "Silme işlemini yap",
+ "pt-deletepage-action-other": "Hedefi değiştir",
+ "pt-deletepage-lang-legend": "Çeviri sayfasını sil",
+ "pt-deletepage-tp-legend": "Çevrilebilir sayfayı sil",
+ "pt-deletepage-any-legend": "Çevrilebilir sayfayı, mesaj paketini veya çeviri sayfasını sil",
+ "pt-deletepage-current": "Sayfa adı:",
+ "pt-deletepage-reason": "Sebep:",
+ "pt-deletepage-reason-details": "Diğer/ek sebep:",
+ "pt-deletepage-reason-other": "Diğer sebep",
+ "pt-deletepage-subpages": "Tüm alt sayfaları sil",
+ "pt-deletepage-list-pages": "Silinecek sayfaların listesi",
+ "pt-deletepage-list-translation": "Çeviri sayfaları",
+ "pt-deletepage-list-section": "Çeviri birimi sayfaları",
+ "pt-deletepage-list-other": "Diğer alt sayfalar",
+ "pt-deletepage-list-count": "Silinecek toplam $1 sayfa ve $2 alt sayfa.",
+ "pt-deletepage-list-no-pages": "Sayfa bulunamadı.",
+ "pt-deletepage-full-logreason": "Çevrilebilir sayfanın \"$1\" bölümü",
+ "pt-deletepage-lang-logreason": "Çeviri sayfasının bir kısmı \"$1\"",
+ "pt-deletepage-started": "Lütfen hatalar ve tamamlanma mesajı için [[$1|günlüğü]] kontrol edin.",
+ "pt-deletepage-intro": "Bu özel sayfa, çevrilebilir bir sayfanın tamamını, mesaj paketini veya bir dilde tek bir çeviri sayfasını silmenize olanak tanır.\nSilme eylemi anında gerçekleşmeyecektir, çünkü bunlara bağlı tüm sayfalar da silinecektir.\nArızalar [[$1|ilgili günlüğe]] kaydedilir ve bunların elle onarılması gerekir.",
+ "pagemigration": "Çeviri sayfası taşıma",
+ "pagemigration-summary": "Bir çeviri sayfası belirtin ve Çeviri sistemi bu sayfada etkinleştirilmeden önce yapılan tüm çevirileri geri yükleyin.",
+ "pm-import-button-label": "İçe aktar",
+ "pm-savepages-button-label": "Kaydet",
+ "pm-cancel-button-label": "İptal",
+ "pm-page-does-not-exist": "$1 mevcut değil.",
+ "pm-old-translations-missing": "$1 eski çeviriler içermiyor.",
+ "pm-extra-units-warning": "Fazladan birimler olabilir. Lütfen kaynak ve çeviri birimlerini uygun şekilde eşleştirin.",
+ "pm-pagename-missing": "Lütfen sayfa adı girin.",
+ "pm-add-icon-hover-text": "Aşağıya bir birim ekleyin",
+ "pm-swap-icon-hover-text": "Aşağıdaki birim ile değiştir",
+ "pm-delete-icon-hover-text": "Birimi sil",
+ "pm-pagetitle-placeholder": "Sayfa başlığı girin",
+ "pm-pagetitle-invalid": "Sayfa taşıma yalnızca çeviri sayfalarında çalışır, örneğin \"Sayfa/tr\". Sağlanan başlık geçerli bir başlık değil.",
+ "pm-pagetitle-missing": "Lütfen sayfa adı girin.",
+ "pm-langcode-missing": "Sayfa taşıma yalnızca çeviri sayfalarında çalışır, örneğin \"Sayfa/tr\". Sağlanan başlık bir çeviri sayfası değildir.",
+ "pm-summary-import": "[[Special:PageMigration|Sayfa taşıma]] kullanarak içe aktarılan çevirisi",
+ "pm-on-import-message-text": "Eski çeviriler içe aktarıldı. Çeviri birimlerini ayarlamak için ekleme, değiştirme ve silme seçeneklerini kullanın ve kaydetmek için \"{{int:pm-savepages-button-label}}\" düğmesini tıklayın. İptal için \"{{int:pm-cancel-button-label}}\" düğmesini tıklayın.",
+ "pm-on-save-message-text": "Çeviri birimleri kaydedildi. Artık taşımak için yeni bir çeviri sayfasının başlığını girebilir veya aşağıdaki birimlerde değişiklik yapabilir ve yeni bir düzeltme kaydedebilirsiniz.",
+ "pm-pagetitle-not-translatable": "$1 çevrilebilir bir sayfanın parçası değil.",
+ "pm-translation-unit-fetch-failed": "Sayfa için çeviri birimleri getirilirken bir hata oluştu.",
+ "tpt-translate-title": "Sayfa başlığının çevirisine izin ver",
+ "pp-save-summary": "Sayfayı çeviri için hazırladı",
+ "pagepreparation": "Çeviri için sayfayı hazırlayın",
+ "pagepreparation-summary": "Çeviriye hazırlamak için bir sayfa başlığı belirtin.",
+ "pp-pagename-placeholder": "Sayfa adı girin",
+ "pp-prepare-button-label": "Hazırla",
+ "pp-save-button-label": "Yayımla",
+ "pp-cancel-button-label": "İptal",
+ "pp-save-message": "Sayfa yayımlandı. Artık [$1 düzenleme] yapabilirsiniz.",
+ "pp-prepare-message": "Sayfa çeviri için hazırlanmıştır. Aşağıdaki farkı inceleyin. Tamamsa {{int:pp-save-button-label}}\" düğmesini tıklayın!",
+ "pp-already-prepared-message": "Sayfanın çeviri için önceden hazırlanmış olduğu anlaşılıyor. Önceki sürüme kıyasla değişiklik yok.",
+ "pp-diff-error": "Fark sunucudan getirilirken bir hata oluştu.",
+ "pp-pagename-missing": "Lütfen sayfa adı girin.",
+ "pp-diff-old-header": "Kaynak metin",
+ "pp-diff-new-header": "Hazırlanan metin",
+ "tpt-unlink-confirm": "Lütfen bu sayfayı çeviri sisteminden gerçekten kaldırmak istediğinizi onaylayın.\nDil seçici ve çevrilmiş sayfa adları çalışmaz.\nÇeviri sayfaları düzenlenebilir hale gelecektir.",
+ "tpt-unlink-button": "Çeviriden kaldır",
+ "tpt-unlink-summary": "Sayfa çeviriden kaldırıldı",
+ "tpt-generic-confirm": "Lütfen işlemi onaylayın.",
+ "tpt-generic-button": "Onayla",
+ "tpt-validation-not-insertable": "\"$1\" çeviri değişkeni ismi çeviri arayüzüne konulamaz. Özel karakter kullanmaktan sakının.",
+ "tpt-validation-name-reuse": "\"$1\" çeviri değişkeni farklı içerikle birden fazla kez tanımlanmış. Değişken isimlerini çeviri biriminde tek olacak şekilde değiştirin.",
+ "visualeditor-annotations-translate-start": "Çevrilecek içerik başlangıcı",
+ "visualeditor-annotations-translate-end": "Çevrilecek içerik sonu",
+ "visualeditor-annotations-translate-description": "Bu aralık çevrilebilir olarak işaretlenmiştir. Lütfen [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text kaynak metni değiştirme] için verilen yönergeleri uyguladığınızdan emin olun.",
+ "visualeditor-annotations-tvar-start": "Çevrilemeyecek içerik başlangıcı",
+ "visualeditor-annotations-tvar-end": "Çevrilemeyecek içerik sonu",
+ "visualeditor-annotations-tvar-description": "Bu aralık çevrilemez olarak işaretlendi. Daha fazla bilgi için lütfen [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Segmentation Kaynak metnin bölümlenmesi] sayfasına bakın."
+}
diff --git a/Translate/i18n/pagetranslation/trv.json b/Translate/i18n/pagetranslation/trv.json
new file mode 100644
index 00000000..d60c3df7
--- /dev/null
+++ b/Translate/i18n/pagetranslation/trv.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Iyuqciyang"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% wada hmjil kari)"
+}
diff --git a/Translate/i18n/pagetranslation/tt-cyrl.json b/Translate/i18n/pagetranslation/tt-cyrl.json
new file mode 100644
index 00000000..db8d29c0
--- /dev/null
+++ b/Translate/i18n/pagetranslation/tt-cyrl.json
@@ -0,0 +1,42 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ерней",
+ "Ильнар",
+ "Рашат Якупов"
+ ]
+ },
+ "pagetranslation": "Битләр тәрҗемәсе",
+ "tpt-diff-old": "Баягы текст",
+ "tpt-diff-new": "Яңа текст",
+ "tpt-nosuchpage": "«$1» бите барлыкта юк.",
+ "tpt-other-pages-title": "Бозылган битләр",
+ "tpt-select-prioritylangs-reason": "Сәбәп:",
+ "tpt-sections-prioritylangs": "Төп телләр",
+ "translate-tag-translate-link-desc": "Бу битне тәрҗемә итү",
+ "translate-tag-hasnew": "Әлеге биттә тәрҗемәләр өчен күрсәтелмәгән <span class=\"plainlinks\">[$1 үзгәртүләр]</span> бар.",
+ "tpt-translation-intro": "Әлеге бит [[$2]] сәхифәсенең <span class=\"plainlinks\">[$1 тәрҗемәсе булып тора]</span>. Тәрҗемә $3% башкарылган.",
+ "tpt-languages-legend": "Башка телләр:",
+ "tpt-languages-nonzero": "$1 ($2% тәрҗемә ителгән)",
+ "tpt-tab-translate": "Тәрҗемә итү",
+ "tpt-aggregategroup-add": "Өстәү",
+ "tpt-aggregategroup-save": "Саклау",
+ "tpt-aggregategroup-new-name": "Исем:",
+ "tpt-aggregategroup-edit-name": "Исем:",
+ "tpt-aggregategroup-edit-description": "Тасвирлама:",
+ "tpt-aggregategroup-update": "Саклау",
+ "tpt-aggregategroup-update-cancel": "Кире алу",
+ "pt-movepage-current": "Хәзерге исем:",
+ "pt-movepage-new": "Яңа исем:",
+ "pt-movepage-reason": "Сәбәп:",
+ "pt-deletepage-reason": "Сәбәп:",
+ "pt-deletepage-subpages": "Барлык асбитләрне бетерү",
+ "pm-import-button-label": "Кертү",
+ "pm-savepages-button-label": "Саклау",
+ "pm-cancel-button-label": "Кире алу",
+ "pm-page-does-not-exist": "$1 барлыкта юк.",
+ "pp-prepare-button-label": "Әзерләү",
+ "pp-save-button-label": "Саклау",
+ "pp-cancel-button-label": "Кире алу",
+ "tpt-generic-button": "Раслау"
+}
diff --git a/Translate/i18n/pagetranslation/tw.json b/Translate/i18n/pagetranslation/tw.json
new file mode 100644
index 00000000..96bdcf64
--- /dev/null
+++ b/Translate/i18n/pagetranslation/tw.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jemima2019"
+ ]
+ },
+ "pt-deletepage-reason-other": "Mmuaeɛ fofrɔ"
+}
diff --git a/Translate/i18n/pagetranslation/tzm.json b/Translate/i18n/pagetranslation/tzm.json
new file mode 100644
index 00000000..2135f0f7
--- /dev/null
+++ b/Translate/i18n/pagetranslation/tzm.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Tifinaghes"
+ ]
+ },
+ "pagetranslation": "ⵜⴰⵙⵓⵖⵍⵜ ⵏ ⵜⴰⵙⵏⴰ",
+ "tpt-diff-new": "ⴰⴹⵔⵉⵙ ⴰⵎⴰⵢⵏⵓ",
+ "tpt-select-prioritylangs-reason": "ⴰⵙⵔⴰⴳ:",
+ "tpt-languages-legend": "ⵜⵓⵜⵍⴰⵢⵉⵏ ⵢⴰⴹⵏⵉ:",
+ "tpt-aggregategroup-add": "ⵔⵏⵓ",
+ "tpt-aggregategroup-save": "ⵣⵎⵎⴻⵎ",
+ "tpt-aggregategroup-new-name": "ⴰⵙⵙⴰⵖ:",
+ "pt-movepage-current": "ⴰⵙⵙⴰⵖ ⵏ ⵖⵉⵍⴰ:",
+ "pt-movepage-new": "ⴰⵙⵙⴰⵖ ⴰⵎⴰⵢⵏⵓ:",
+ "pt-movepage-reason": "ⴰⵙⵔⴰⴳ:",
+ "pt-deletepage-current": "ⴰⵙⵙⴰⵖ ⵏ ⵜⴰⵙⵏⴰ:",
+ "pt-deletepage-reason": "ⴰⵙⵔⴰⴳ:"
+}
diff --git a/Translate/i18n/pagetranslation/udm.json b/Translate/i18n/pagetranslation/udm.json
new file mode 100644
index 00000000..d690afe1
--- /dev/null
+++ b/Translate/i18n/pagetranslation/udm.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Wadorgurt"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% берыктэмын)"
+}
diff --git a/Translate/i18n/pagetranslation/ug-arab.json b/Translate/i18n/pagetranslation/ug-arab.json
new file mode 100644
index 00000000..6b08f7e9
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ug-arab.json
@@ -0,0 +1,72 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sahran",
+ "Tel'et"
+ ]
+ },
+ "pagetranslation": "بەت تەرجىمە",
+ "tpt-section": "$1 تەرجىمە بۆلىكى",
+ "tpt-section-new": "يېڭى تەرجىمە بۆلىكى.\nئاتى: $1",
+ "tpt-section-deleted": "$1 تەرجىمە بۆلىكى",
+ "tpt-diff-old": "ئالدىنقى تېكست",
+ "tpt-diff-new": "يېڭى تېكست",
+ "tpt-sections-template": "تەرجىمە بېتى قېلىپى",
+ "tpt-nosuchpage": "$1 بەت مەۋجۇت ئەمەس",
+ "tpt-old-pages-title": "تەرجىمە قىلىۋاتقان بەتلەر",
+ "tpt-other-pages-title": "بۇزۇلغان بەتلەر",
+ "tpt-select-prioritylangs": "پەش بىلەن ئايرىلغان ئالدىنلىق تىل تىزىمى كودى:",
+ "tpt-select-prioritylangs-force": "ئالدىنلىق تىلدىن باشقا تىلغا تەرجىمە قىلىشنىڭ ئالدىنى ئالىدۇ",
+ "tpt-select-prioritylangs-reason": "سەۋەب:",
+ "tpt-sections-prioritylangs": "ئالدىنلىق تىل",
+ "tpt-rev-mark": "تەرجىمە بەلگىسى",
+ "tpt-rev-unmark": "تەرجىمىدىن چىقىرىۋەت",
+ "tpt-rev-discourage": "توسالغۇ",
+ "tpt-rev-encourage": "ئەسلىگە كەلتۈر",
+ "tpt-rev-unmark-tooltip": "تەرجىمىدىن بۇ بەتنى چىقىرىۋەت",
+ "tpt-rev-discourage-tooltip": "بۇ بەتنى يەنىمۇ ئىلگىرىلەپ تەرجىمە قىلىشتىكى توسالغۇ",
+ "tpt-rev-encourage-tooltip": "بۇ بەتنى ئادەتتىكى تەرجىمە ھالىتىگە ئەسلىگە كەلتۈرىدۇ.",
+ "translate-tag-translate-link-desc": "بۇ بەتنى تەرجىمە قىل",
+ "translate-tag-markthis": "تەرجىمە ئۈچۈن بۇ بەتكە بەلگە سال",
+ "tpt-languages-legend": "باشقا تىل",
+ "tpt-languages-nonzero": "$1 ($2% تەرجىمە قىلىنغان)",
+ "tpt-tab-translate": "تەرجىمە",
+ "tpt-priority-languages": "تەرجىمە باشقۇرغۇچى بۇ گۇرۇپپا ئالدىن تەرجىمە قىلىدىغان تىلنى $1 غا تەڭشىدى.",
+ "tpt-render-summary": "ئەسلى بەت بىلەن ماسلىشىدىغان يېڭى نەشرىگە يېڭىلاۋاتىدۇ",
+ "aggregategroups": "توپلانما گۇرۇپپا",
+ "tpt-aggregategroup-add": "قوش",
+ "tpt-aggregategroup-save": "ساقلا",
+ "tpt-aggregategroup-add-new": "يېڭى بىر توپلانما گۇرۇپپا قوش",
+ "tpt-aggregategroup-new-name": "ئاتى:",
+ "tpt-aggregategroup-new-description": "چۈشەندۈرۈش (تاللاشچان):",
+ "tpt-aggregategroup-remove-confirm": "راستلا بۇ توپلانما گۇرۇپپىنى ئۆچۈرەمسىز؟",
+ "tpt-aggregategroup-invalid-group": "گۇرۇپپا مەۋجۇت ئەمەس",
+ "pt-movepage-list-pages": "يۆتكەيدىغان بەتلەرنىڭ تىزىمى",
+ "pt-movepage-list-translation": "تەرجىمە قىلىدىغان {{PLURAL:$1|بەتلەر}}",
+ "pt-movepage-list-section": "بۆلەك بەتلەر",
+ "pt-movepage-list-other": "باشقا تارماق {{PLURAL:$1|بەتلەر}}",
+ "pt-movepage-list-count": "جەمئى {{PLURAL:$1|بەت|بەت}} يۆتكىدى.",
+ "pt-movepage-legend": "تەرجىمە قىلغىلى بولىدىغان بەتنى يۆتكە",
+ "pt-movepage-current": "نۆۋەتتىكى ئاتى:",
+ "pt-movepage-new": "يېڭى ئات:",
+ "pt-movepage-reason": "سەۋەب:",
+ "pt-movepage-subpages": "ھەممە تارماق بەتنى يۆتكە",
+ "pt-movepage-action-check": "يۆتكەشچانلىقىنى تەكشۈر",
+ "pt-movepage-action-perform": "يۆتكەشنى جەزملە",
+ "pt-movepage-action-other": "نىشاننى ئۆزگەرت",
+ "pt-deletepage-lang-title": "تەرجىمە بەت \"$1\" نى ئۆچۈرىدۇ.",
+ "pt-deletepage-tp-title": "تەرجىمە قىلغىلى بولىدىغان بەت $1 نى ئۆچۈرىدۇ.",
+ "pt-deletepage-invalid-title": "بەلگىلەنگەن بەت ئىناۋەتلىك ئەمەس.",
+ "pt-deletepage-invalid-text": "بەلگىلەنگەن بەت تەرجىمە قىلغىلى بولىدىغان بەت بولمىسىمۇ ئۇنى تەرجىمە قىلىدۇ.",
+ "pt-deletepage-action-check": "ئۆچۈرىدىغان تىزىم بەتلەر",
+ "pt-deletepage-action-perform": "ئۆچۈر",
+ "pt-deletepage-action-other": "نىشاننى ئۆزگەرت",
+ "pt-deletepage-lang-legend": "تەرجىمە بەتنى ئۆچۈر",
+ "pt-deletepage-tp-legend": "تەرجىمە قىلغىلى بولىدىغان بەتنى ئۆچۈر",
+ "pt-deletepage-any-legend": "تەرجىمە قىلغىلى بولىدىغان بەتنى ئۆچۈر ياكى تەرجىمە قىلغىلى بولىدىغان بەتنىڭ تەرجىمىسى",
+ "pt-deletepage-current": "بەت ئاتى:",
+ "pt-deletepage-reason": "سەۋەب:",
+ "pt-deletepage-subpages": "ھەممە تارماق بەتنى ئۆچۈر",
+ "pt-deletepage-list-translation": "تەرجىمە قىلىدىغان بەتلەر",
+ "pt-deletepage-list-other": "باشقا تارماق بەتلەر"
+}
diff --git a/Translate/i18n/pagetranslation/uk.json b/Translate/i18n/pagetranslation/uk.json
new file mode 100644
index 00000000..b8c3408f
--- /dev/null
+++ b/Translate/i18n/pagetranslation/uk.json
@@ -0,0 +1,282 @@
+{
+ "@metadata": {
+ "authors": [
+ "A1",
+ "AS",
+ "Ahonc",
+ "Andriykopanytsia",
+ "Base",
+ "DDPAT",
+ "Dars",
+ "Hypers",
+ "Ice bulldog",
+ "Movses",
+ "NickK",
+ "Olvin",
+ "Piramidion",
+ "Pols12",
+ "Prima klasy4na",
+ "Riwnodennyk",
+ "Vlad5250",
+ "Ата",
+ "Тест"
+ ]
+ },
+ "pagetranslation": "Переклад сторінок",
+ "right-pagetranslation": "Позначення версій сторінок для перекладу",
+ "action-pagetranslation": "керування сторінками, які можна перекладати,",
+ "tps-edit-sourcepage-text": "Ви редагуєте джерело сторінки перекладу. Будь ласка, переконайтесь, що ви знайомі із документацією:\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text Редагування вихідного тексту] \n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Markup_examples Приклади використання розмітки]",
+ "tps-edit-sourcepage-ve-warning-limited-text": "Деякі перекладні місця можуть бути не доступні для редагування в цьому редакторі. Будь ласка, скористайтеся редактором коду, щоб їх змінити.",
+ "tps-edit-sourcepage-ve-warning-title": "Попередження: Непідтримувана сторінка",
+ "tps-edit-sourcepage-ve-warning-text": "Ви редагуєте перекладабельну сторінку. Редагування таких сторінок в цьому редакторі ще не підтримується офіційно. Будь ласка, скористайтесь редактором коду.",
+ "tps-edit-sourcepage-ve-warning-button": "Гаразд",
+ "tpt-section": "Блок перекладу $1",
+ "tpt-section-new": "Новий блок перекладу.\nНазва: $1",
+ "tpt-section-deleted": "Блок перекладу $1",
+ "tpt-diff-old": "Попередній текст",
+ "tpt-diff-new": "Новий текст",
+ "tpt-submit": "Позначити цю версію для перекладу",
+ "tpt-sections-oldnew": "Нові та існуючі блоки перекладу",
+ "tpt-sections-deleted": "Вилучені блоки перекладу",
+ "tpt-sections-template": "Шаблон сторінки перекладу",
+ "tpt-action-nofuzzy": "Не відмічати переклади як застарілі",
+ "tpt-badtitle": "Зазначена назва сторінки ($1) недопустима",
+ "tpt-nosuchpage": "Сторінки $1 не існує",
+ "tpt-oldrevision": "$2 не є останньою версією сторінки [[:$1]].\nТільки останні версії можуть бути відмічені для перекладу.",
+ "tpt-notsuitable": "Сторінка $1 не підходить для перекладу.\nПереконайтеся, що вона містить теги $2 і має дійсний синтаксис.",
+ "tpt-saveok": "Сторінка [[:$1]] була відмічена для перекладу і містить $2 {{PLURAL:$2|блок перекладу|блоки перекладу|блоків перекладу}}.\nТепер сторінку можна <span class=\"plainlinks\">[$3 перекладати]</span>.",
+ "tpt-saveok-first": "Ви можете [[Special:PageMigration|імпортувати існуючий переклад]] цієї сторінки (якщо є).",
+ "tpt-offer-notify": "Ви можете <span class=\"plainlinks\">[$1 повідомити перекладачів]</span> про цю сторінку.",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|Переглянути список перекладних сторінок.]]",
+ "tpt-showpage-intro": "Нижче наведені нові, існуючі та видалені блоки перекладу.\nПеред тим, які відмітити цю версію для перекладу, переконайтесь, що зміни в блоках перекладу будуть мінімальними, щоб уникнути необов'язкової роботи для перекладачів.",
+ "tpt-mark-summary": "Позначено цю версію для перекладу",
+ "tpt-mark-nochanges": "Немає змін для перегляду. Позначення цієї сторінки на переклад не змінить ні сторінку, ні жоден блок перекладу.",
+ "tpt-edit-failed": "Не вдалося оновити сторінку: $1",
+ "tpt-duplicate": "Блок перекладу із назвою $1 вжито більше одного разу.",
+ "tpt-invalid": "Назва блоку перекладу $1 не повинна містити знак підкреслення чи косу риску.",
+ "tpt-unmarked": "Сторінка [[:$1]] більше не відмічена для перекладу.",
+ "tpt-list-nopages": "Немає сторінок, відмічених для перекладу, або готових бути відміченими для перекладу.",
+ "tpt-new-pages-title": "Сторінки, запропоновані для перекладу",
+ "tpt-old-pages-title": "Сторінки в процесі перекладу",
+ "tpt-other-pages-title": "Пошкоджені сторінки",
+ "tpt-outdated-pages-title": "Сторінки з неперевіреними змінами",
+ "tpt-new-pages": "{{PLURAL:$1|1=Ця сторінка містить|Ці сторінки містять}} текст з тегами перекладу, але жодна з версій {{PLURAL:$1|1=цієї сторінки|цих сторінок}} не відмічена для перекладу.",
+ "tpt-old-pages": "Остання версія {{PLURAL:$1|1=цієї сторінки|цих сторінок}} була відмічена для перекладу.",
+ "tpt-other-pages": "{{PLURAL:$1|1=Стара версія цієї сторінки відмічена|Старі версії цих сторінок відмічені}} для перекладу,\nале {{PLURAL:$1|1=остання версія не може бути відмічена|останні версії не можуть бути відмічені}} для перекладу.",
+ "tpt-outdated-pages": "{{PLURAL:$1|Ця сторінка має|Ці сторінки мають}} зміни, не відмічені для перекладу.",
+ "tpt-tag-discouraged": "знято",
+ "tpt-tag-oldsyntax": "старий синтаксис",
+ "tpt-tag-no-transclusion-support": "немає підтримки переключення",
+ "tpt-select-prioritylangs": "Перелік кодів пріоритетних мов (відокремлюються комою)",
+ "tpt-select-prioritylangs-force": "Запобігти перекладу іншими мовами, крім пріоритетних",
+ "tpt-select-prioritylangs-reason": "Причина:",
+ "tpt-sections-prioritylangs": "Пріоритет мов",
+ "tpt-sections-syntaxversion": "Версія синтаксису",
+ "tpt-syntaxversion-text": "Ця сторінка наразі використовує старий синтаксис сторінки джерела перекладу. Нова версія огортатиме неперекладені розділи HTML-тегом, щоб вказати правильну мову тексту. Приклад: $1. Ви можете використати новий синтаксис розмітки $2 щоб запобігти будь-якому огортанню в місцях, де це не доречно, як-то при перекладі атрибуту <code>title</code> елементів. Перейти до старої версії синтаксису неможливо.",
+ "tpt-syntaxversion-label": "Використовувати найновішу версію синтаксису для цієї сторінки",
+ "tpt-transclusion": "Включення шаблона",
+ "tpt-transclusion-label": "Увімкнути включення цієї сторінки з врахуванням її перекладеності",
+ "tpt-rev-mark": "позначити для перекладу",
+ "tpt-rev-unmark": "вилучити з перекладу",
+ "tpt-rev-discourage": "відключити",
+ "tpt-rev-encourage": "відновити",
+ "tpt-rev-mark-tooltip": "Відзначити останню версію цієї сторінки для перекладу.",
+ "tpt-rev-unmark-tooltip": "Прибрати цю сторінку з перекладу",
+ "tpt-rev-discourage-tooltip": "Відключити подальші переклади цієї сторінки",
+ "tpt-rev-encourage-tooltip": "Відновити цю сторінку для звичайного перекладу",
+ "translate-tag-translate-link-desc": "Перекласти цю сторінку",
+ "translate-tag-markthis": "Позначити цю сторінку для перекладу",
+ "translate-tag-markthisagain": "На цій сторінці {{PLURAL:$1|була здійснена|були здійснені}} <span class=\"plainlinks\">[$1 {{PLURAL:$1|зміна|зміни}}]</span> з моменту, коли вона востаннє була <span class=\"plainlinks\">[$2 відмічена до перекладу]</span>.",
+ "translate-tag-hasnew": "На цій сторінці було здійснено <span class=\"plainlinks\">[$1 зміни]</span>, які не відмічені для перекладу.",
+ "tpt-translation-intro": "Ця сторінка є <span class=\"plainlinks\">[$1 перекладом]</span> сторінки [[$2]]. Переклад виконано на $3%.",
+ "tpt-translation-intro-fuzzy": "Застарілі переклади позначені так.",
+ "tpt-languages-legend": "Інші мови:",
+ "tpt-languages-separator": "&#160;•&#32;",
+ "tpt-languages-zero": "Розпочати переклад цією мовою",
+ "tpt-languages-nonzero": "$1 ($2% перекладено)",
+ "tpt-tab-translate": "Перекласти",
+ "tpt-target-page": "Ця сторінка не може бути оновлена вручну.\nЦе – переклад сторінки [[$1]] і його можна оновити за допомогою [$2 засобу перекладу].",
+ "tpt-unknown-page": "Цей простір назв зарезервовано для перекладів текстів сторінок.\nСторінка, яку Ви намагаєтесь редагувати, скоріше за все, не відповідає жодній сторінці, відміченій для перекладу.",
+ "tpt-translation-restricted": "Адміністратор перекладу заборонив переклад цієї сторінки такою мовою.\n\nПричина: $1",
+ "tpt-translation-restricted-no-reason": "Переклад цієї сторінки на цю мову було заборонено адміністратором перекладу.",
+ "tpt-discouraged-language-force-header": "Ця сторінка не може бути перекладена на $1.",
+ "tpt-discouraged-language-force-content": "Адміністратор перекладів вирішив, що ця сторінка може бути перекладена лише на $1.",
+ "tpt-discouraged-language-header": "Переклад на $1 не є пріоритетним для цієї сторінки.",
+ "tpt-discouraged-language-content": "Адміністратор перекладів вирішив зосередити зусилля з перекладу на $1.",
+ "tpt-discouraged-language-force": "<strong>Ця сторінка не може бути перекладена мовою $2.</strong>\n\nАдміністратор перекладу вирішив, що ця сторінка може бути перекладена лише такими мовами: $3",
+ "tpt-priority-languages": "Адміністратор перекладу визначив для цієї групи пріоритетні мови $1.",
+ "tpt-priority-languages-force": "Адміністратор перекладу встановив $1 як пріоритетні мови для цієї групи. Переклад іншими мовами не дозволений.",
+ "tpt-discouraged-translation-header": "Переклад цієї сторінки не рекомендується",
+ "tpt-discouraged-translation-content": "Адміністратор перекладу не рекомендував перекладати цю сторінку. Ви все ще можете перекласти сторінку, але переклади можуть бути не корисними.",
+ "tpt-render-summary": "Оновлення для відповідності новій версії вихідної сторінки",
+ "aggregategroups": "Агреговані групи",
+ "tpt-aggregategroup-add": "Додати",
+ "tpt-aggregategroup-save": "Зберегти",
+ "tpt-aggregategroup-close": "Закрити",
+ "tpt-aggregategroup-add-new": "Додати нову загальну групу",
+ "tpt-aggregategroup-new-name": "Назва:",
+ "tpt-aggregategroup-new-description": "Опис (необов'язково):",
+ "tpt-aggregategroup-remove-confirm": "Ви дійсно бажаєте видалити цю загальну групу?",
+ "tpt-aggregategroup-invalid-group": "Група не існує",
+ "tpt-aggregategroup-edit-name": "Назва:",
+ "tpt-aggregategroup-edit-description": "Опис:",
+ "tpt-aggregategroup-update": "Зберегти",
+ "tpt-aggregategroup-update-cancel": "Скасувати",
+ "tpt-aggregategroup-expand-all-groups": "розгорнути всі групи",
+ "tpt-aggregategroup-collapse-all-groups": "згорнути всі групи",
+ "tpt-aggregategroup-expand-group": "розгорнути групу",
+ "tpt-aggregategroup-collapse-group": "згорнути групу",
+ "tpt-invalid-group": "Неприпустима група",
+ "pt-parse-open": "Незбалансований тег &lt;translate>.\nШаблон перекладу: <pre>$1</pre>",
+ "pt-parse-close": "Незбалансований тег &lt;/translate>.\nШаблон перекладу: <pre>$1</pre>",
+ "pt-parse-nested": "Вкладати один блок перекладу &lt;translate> до іншого не допускається.\nТекст тегу: <pre>$1</pre>",
+ "pt-shake-multiple": "Декілька маркерів блоку перекладу для одного блоку.\nПереконайтеся, що блоки перекладу розділені порожніми рядками.\nТекст блоку перекладу: <pre>$1</pre>",
+ "pt-shake-position": "Маркери блоку перекладу в неочікуваному місці.\nТекст блоку: <pre>$1</pre>",
+ "pt-shake-empty": "Порожній блок перекладу під маркером \"$1\".",
+ "log-description-pagetranslation": "Журнал для дій, пов'язаних з системою перекладу сторінок.",
+ "log-name-pagetranslation": "Журнал перекладу сторінок",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|позначив|позначила}} $3 для перекладу",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|вилучив|вилучила}} $3 із системи перекладу",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|здійснив|здійснила}} перейменування перекладабельної сторінки $3 на $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2|зіштовхнувся|зіштовхнулася}} із проблемою під час перейменування сторінки $3 на $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|завершив|завершила}} видалення перекладної сторінки $3",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2|не зміг|не змогла}} вилучити $3, що належить до перекладної сторінки $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|здійснив|здійснила}} вилучення сторінки-перекладу $3",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2|не зміг|не змогла}} вилучити $3, що належить до сторінки-перекладу $4",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|дозволив|дозволила}} переклад $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|відключив|відключила}} переклад $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|вилучив|вилучила}} пріоритетні мови з перекладної сторінки $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|встановив|встановила}} пріоритетні мови для перекладної сторінки $3: $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|обмежив|обмежила}} мови для перекладної сторінки $3 до $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|додав|додала}} перекладальну сторінку $3 до агрегованої групи $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2|вилучив|вилучила}} перекладальну сторінку $3 з агрегованої групи $4",
+ "log-action-filter-pagetranslation": "Тип дії:",
+ "log-action-filter-pagetranslation-mark": "Позначити до перекладу",
+ "log-action-filter-pagetranslation-unmark": "Вилучення з перекладу",
+ "log-action-filter-pagetranslation-move": "Перейменування сторінок",
+ "log-action-filter-pagetranslation-delete": "Вилучення сторінок",
+ "log-action-filter-pagetranslation-encourage": "Заохочення до перекладу",
+ "log-action-filter-pagetranslation-discourage": "Відключення перекладу",
+ "log-action-filter-pagetranslation-prioritylanguages": "Зміна пріоритетних мов",
+ "log-action-filter-pagetranslation-aggregategroups": "Зміна агрегованих груп",
+ "log-description-messagebundle": "Журнал для дій, пов'язаних з системою наборів повідомлень.",
+ "log-name-messagebundle": "Журнал наборів повідомлень",
+ "logentry-messagebundle-moveok": "$1 {{GENDER:$2|здійснив|здійснила}} перейменування набору повідомлень $3 на $4",
+ "logentry-messagebundle-movenok": "$1 {{GENDER:$2|зіштовхнувся|зіштовхнулася}} із проблемою під час перейменування набору повідомлень $3 на $4",
+ "logentry-messagebundle-deletefok": "$1 {{GENDER:$2|здійснив|здійснила}} вилучення набору повідомлень $3",
+ "logentry-messagebundle-deletefnok": "$1 {{GENDER:$2|не зміг|не змогла}} вилучити $3, що належить до набору повідомлень $4",
+ "log-action-filter-messagebundle": "Тип дії:",
+ "log-action-filter-messagebundle-move": "Перейменування наборів повідомлень",
+ "log-action-filter-messagebundle-delete": "Вилучення наборів повідомлень",
+ "pt-movepage-title": "Перейменування сторінки «$1», доступної для перекладу",
+ "pt-movepage-messagebundle-title": "Перейменувати набір повідомлень «$1»",
+ "pt-movepage-blockers": "Сторінка перекладу не може бути перейменована через {{PLURAL:$1|1=таку помилку|такі помилки}}:",
+ "pt-movepage-block-base-invalid": "Недопустима назва для основної кінцевої перекладної сторінки.",
+ "pt-movepage-block-tp-invalid": "Назва перекладу кінцевої сторінки [[:$1]] буде неправильною (можливо, занадто довга?).",
+ "pt-movepage-block-section-invalid": "Назва цільової сторінки \"[[:$1]]\" для блоку перекладу буде неправильною (можливо, занадто довга?).",
+ "pt-movepage-block-subpage-invalid": "Назва кінцевої підсторінки [[:$1]] буде неправильною (можливо, занадто довга?).",
+ "pt-movepage-block-talkpage-invalid": "Цільова назва сторінки обговорення для «[[:$1]]» буде недійсною (задовга?).",
+ "pt-movepage-block-unknown-page": "Сторінка ([[:$1]]), яку переміщують, не є частиною сторінки, яку можна перекласти.",
+ "pt-movepage-block-ns-talk-unsupported": "Сторінка ([[:$1]]) переміщується до простору назв, який не підтримує сторінки обговорення.",
+ "pt-movepage-block-rename-failed": "Під час створення нового заголовка сторінки [[:$1]] сталася помилка",
+ "pt-movepage-list-pages": "Список сторінок для перейменування",
+ "pt-movepage-list-translation": "{{PLURAL:$1|1=Сторінка|Сторінки}} перекладу",
+ "pt-movepage-list-section": "{{PLURAL:$1|1=Сторінка|Сторінки}} блоку перекладу",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Підсторінка, позначена|Підсторінки, позначені}} для перекладу",
+ "pt-movepage-list-translatable-note": "Ці сторінки повинні бути перейменовані окремо.",
+ "pt-movepage-list-other": "{{PLURAL:$1|1=Інша підсторінка|Інші підсторінки}}",
+ "pt-movepage-list-count": "Загалом будуть перейменовані $1 {{PLURAL:$1|сторінка|сторінки|сторінок}} та $2 {{PLURAL:$2|підсторінка|підсторінки|підсторінок}} та $3 {{PLURAL:$3|сторінка|сторінки|сторінок}} обговорення.",
+ "pt-movepage-page-count-limit": "Ця перекладається сторінка, що перекладається, складається з понад $1 {{PLURAL:$1|сторінки|сторінок}}. Досвід показує, що перейменування такої кількості сторінок ненадійне. Будь ласка, зв'яжіться із системним адміністратором, щоб виконати це перейменування скриптом.",
+ "pt-movepage-list-no-pages": "Сторінок не знайдено.",
+ "pt-movepage-legend": "Перейменувати сторінку, доступну для перекладу",
+ "pt-movepage-messagebundle-legend": "Перейменувати набір повідомлень",
+ "pt-movepage-current": "Поточне ім'я:",
+ "pt-movepage-new": "Нова назва:",
+ "pt-movepage-reason": "Причина:",
+ "pt-movepage-subpages": "Перейменувати всі підсторінки",
+ "pt-movepage-talkpages": "Перейменувати сторінки обговорення",
+ "pt-movepage-talkpage-exists": "(Є сторінка обговорення)",
+ "pt-movepage-action-check": "Перевірити, чи можливе перейменування",
+ "pt-movepage-action-perform": "Виконати перейменування",
+ "pt-movepage-action-other": "Змінити ціль",
+ "pt-movepage-intro": "Ця спеціальна сторінка дозволяє перейменовувати сторінки, позначені для перекладу.\nДія не буде миттєвою, оскільки потрібно перейменувати багато сторінок.\nПід час перейменування сторінок взаємодіяти з ними неможливо.\nПомилки буде записано в [[$1|журналі]] і їх потрібно буде виправити вручну.",
+ "pt-movepage-logreason": "Частина доступної для перекладу сторінки «$1»",
+ "pt-movepage-started": "Будь ласка, за деякий час перевірте [[$1|журнал]] на наявність помилок і повідомлення про завершення.",
+ "pt-locked-page": "Ця сторінка заблокована, оскільки в даний момент відбувається переміщення сторінки, що перекладається.",
+ "pt-deletepage-lang-title": "Вилучення сторінки перекладу $1",
+ "pt-deletepage-tp-title": "Видалення сторінки доступної для перекладу $1",
+ "pt-deletepage-mb-title": "Вилучення набору повідомлень «$1»",
+ "pt-deletepage-invalid-title": "Зазначена сторінка є недійсною.",
+ "pt-deletepage-invalid-text": "Зазначена сторінка недоступна для перекладу і не є перекладом.",
+ "pt-deletepage-action-check": "Список сторінок, які будуть вилучені",
+ "pt-deletepage-action-perform": "Виконати вилучення",
+ "pt-deletepage-action-other": "Змінити ціль",
+ "pt-deletepage-lang-legend": "Вилучити сторінку перекладу",
+ "pt-deletepage-tp-legend": "Вилучити сторінку перекладу",
+ "pt-deletepage-mb-legend": "Вилучити набір повідомлень",
+ "pt-deletepage-any-legend": "Вилучити перекладну сторінку, набір повідомлень або сторінку перекладу",
+ "pt-deletepage-current": "Назва сторінки:",
+ "pt-deletepage-reason": "Причина:",
+ "pt-deletepage-reason-details": "Інша/додаткова причина:",
+ "pt-deletepage-reason-other": "Інша причина",
+ "pt-deletepage-subpages": "Вилучити всі підсторінки",
+ "pt-deletepage-list-pages": "Список сторінок для вилучення",
+ "pt-deletepage-list-translation": "Сторінки перекладу",
+ "pt-deletepage-list-section": "Сторінки блоку перекладу",
+ "pt-deletepage-list-other": "Інші підсторінки",
+ "pt-deletepage-list-count": "Вилучення загалом $1 {{PLURAL:$1|сторінку|сторінки|сторінок}} та $2 {{PLURAL:$2|підсторінку|підсторінки|підсторінок}}.",
+ "pt-deletepage-list-no-pages": "Сторінок не знайдено.",
+ "pt-deletepage-full-logreason": "Частина доступної для перекладу сторінки «$1».",
+ "pt-deletepage-lang-logreason": "Частина сторінки перекладу «$1»",
+ "pt-deletepage-started": "Будь ласка, перевірте [[$1|журнал]] на наявність помилок і повідомлення про завершення.",
+ "pt-deletepage-intro": "Ця спеціальна сторінка дозволяє вам вилучити сторінку, призначену для перекладу, набір повідомлень або переклад визначеною мовою.\nЦя дія не буде миттєвою, бо потребуватиме вилучення багатьох залежних сторінок.\nЯкщо вилучення буде невдалим, його буде записано у [[$1|відповідному журналі]], і такі випадки потрібно буде усунути вручну.",
+ "pagemigration": "Міграція сторінок перекладу",
+ "pagemigration-summary": "Вкажіть сторінку перекладу і відновіть будь-який переклад, зроблений до того, як Система перекладу була включена на цій сторінці.",
+ "pm-import-button-label": "Імпортувати",
+ "pm-savepages-button-label": "Зберегти",
+ "pm-cancel-button-label": "Скасувати",
+ "pm-page-does-not-exist": "$1 не існує",
+ "pm-old-translations-missing": "$1 не містить старих перекладів",
+ "pm-extra-units-warning": "Можуть бути наявні додаткові блоки. Будь ласка, правильно співвіднесіть джерело і блоки перекладу.",
+ "pm-pagename-missing": "Будь ласка, введіть назву сторінки",
+ "pm-add-icon-hover-text": "Додати блок нижче",
+ "pm-swap-icon-hover-text": "Поміняти місцями з блоком нижче",
+ "pm-delete-icon-hover-text": "Видалити блок",
+ "pm-pagetitle-placeholder": "Введіть назву сторінки",
+ "pm-pagetitle-invalid": "Міграція сторінок працює лише на сторінках перекладу, наприклад, «Сторінка/de». Введена назва не є дійсною назвою.",
+ "pm-pagetitle-missing": "Будь ласка, введіть назву сторінки.",
+ "pm-langcode-missing": "Міграція сторінок працює лише на сторінках перекладу, наприклад, «Сторінка/de». Введена назва не є сторінкою перекладу.",
+ "pm-summary-import": "Імпортований переклад за допомогою [[Special:PageMigration|міграції сторінок]]",
+ "pm-on-import-message-text": "Було імпортовано старі переклади. Використайте опції додавання, зміни та вилучення блоків перекладу та натисніть на кнопку «{{int:pm-savepages-button-label}}» для їх збереження. Натисніть на кнопку «{{int:pm-cancel-button-label}}» для скасування.",
+ "pm-on-save-message-text": "Блоки перекладу було збережено. Тепер Ви можете ввести назву нової сторінки перекладу для її міграції, або зробити зміни до блоків нижче й зберегти нове редагування.",
+ "pm-pagetitle-not-translatable": "$1 не є частиною перекладабельної сторінки.",
+ "pm-translation-unit-fetch-failed": "Під час отримання одиниць перекладу для сторінки сталася помилка.",
+ "tpt-translate-title": "Дозволити переклад заголовка сторінки",
+ "pp-save-summary": "Підготовлена сторінка для перекладу",
+ "pagepreparation": "Підготувати сторінку для перекладу",
+ "pagepreparation-summary": "Вкажіть назву сторінки для підготовки до перекладу.",
+ "pp-pagename-placeholder": "Введіть назву сторінки",
+ "pp-prepare-button-label": "Підготувати",
+ "pp-save-button-label": "Опублікувати",
+ "pp-cancel-button-label": "Скасувати",
+ "pp-save-message": "Сторінка була опублікована. Ви можете її [$1 редагувати].",
+ "pp-prepare-message": "Сторінка була підготовлена до перекладу. Перегляньте нижче різницю між версіями. Натисніть кнопку «{{int:pp-save-button-label}}», якщо все гаразд!",
+ "pp-already-prepared-message": "Здається, ця сторінка вже була підготовлена до перекладу. Немає жодних змін у порівнянні з попередньою версією.",
+ "pp-diff-error": "Сталася помилка під час отримання різниці версій із сервера.",
+ "pp-pagename-missing": "Будь ласка, введіть назву сторінки",
+ "pp-diff-old-header": "Вихідний текст",
+ "pp-diff-new-header": "Підготовлений текст",
+ "tpt-unlink-confirm": "Будь ласка, підтвердьте, що ви дійсно хочете вилучити цю сторінку із системи перекладу.\nМовний селектор та перекладені назви сторінок припинять працювати. Перекладені сторінки стануть доступними для редагування.",
+ "tpt-unlink-button": "Вилучити з перекладу",
+ "tpt-unlink-summary": "Вилучення сторінки з перекладу",
+ "tpt-generic-confirm": "Будь ласка, підтвердіть дію.",
+ "tpt-generic-button": "Підтвердити",
+ "tpt-validation-not-insertable": "Назва змінної перекладу \"$1\" не працює як вставна в інтерфейсі перекладу. Уникайте використання спеціальних символів.",
+ "tpt-validation-name-reuse": "Змінна перекладу \"$1\" визначається кілька разів з різним змістом. Змініть назви змінних, щоб вони були унікальними наодинці перекладу.",
+ "visualeditor-annotations-translate-start": "Початок перекладу вмісту",
+ "visualeditor-annotations-translate-end": "Кінець змісту для перекладу",
+ "visualeditor-annotations-translate-description": "Цей діапазон позначений як перекладний. Переконайтеся, що ви дотримуєтесь вказівок щодо [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration/uk#Зміна_вихідного_тексту зміни вихідного тексту].",
+ "visualeditor-annotations-tvar-start": "Початок неперекладального вмісту",
+ "visualeditor-annotations-tvar-end": "Кінець неперекладального вмісту",
+ "visualeditor-annotations-tvar-description": "Цей діапазон позначений як неперекладний. Для отримання додаткової інформації зверніться до [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Segmentation Сегментації вихідного тексту]."
+}
diff --git a/Translate/i18n/pagetranslation/ur.json b/Translate/i18n/pagetranslation/ur.json
new file mode 100644
index 00000000..c28e008d
--- /dev/null
+++ b/Translate/i18n/pagetranslation/ur.json
@@ -0,0 +1,78 @@
+{
+ "@metadata": {
+ "authors": [
+ "Muhammad Shuaib",
+ "Obaid Raza",
+ "عثمان خان شاہ",
+ "පසිඳු කාවින්ද"
+ ]
+ },
+ "pagetranslation": "صفحہ ترجمہ",
+ "action-pagetranslation": "قابلِ ترجمہ صفحات کا انتظام",
+ "tpt-section": "$1 یونٹ ترجمہ",
+ "tpt-section-new": "ترجمے کے نئے یونٹ.\nنام: $1",
+ "tpt-section-deleted": "$1 یونٹ ترجمہ",
+ "tpt-diff-old": "پچھلے ٹیکسٹ",
+ "tpt-diff-new": "نئے متن",
+ "tpt-submit": "اس نسخے کو ترجمہ کے لیے نشان زد کریں",
+ "tpt-sections-oldnew": "نئے اور موجود ترجمے کے یونٹ",
+ "tpt-sections-deleted": "ترجمے کے حذف شدہ یونٹ",
+ "tpt-sections-template": "ترجمہ صفحہ سانچے",
+ "tpt-action-nofuzzy": "ترجمہ باطل نہیں ہوتا",
+ "tpt-new-pages-title": "صفحات کے ترجمہ کے لئے رشتہ آيا",
+ "tpt-old-pages-title": "ترجمہ میں صفحات",
+ "tpt-other-pages-title": "ٹوٹ کے صفحات",
+ "tpt-select-prioritylangs-reason": "وجہ:",
+ "tpt-sections-prioritylangs": "ترجیحی زبانیں",
+ "tpt-rev-mark": "ترجمہ کے لئے نشان زد کریں",
+ "tpt-rev-unmark": "ترجمہ سے حذف کریں",
+ "tpt-rev-encourage": "بحال",
+ "tpt-rev-mark-tooltip": "تازہ ترین ورژن کے ترجمہ کے لئے اس صفحے نشان زد کریں.",
+ "tpt-rev-unmark-tooltip": "اس صفحے کو ترجمہ سے حذف کریں ۔",
+ "tpt-rev-encourage-tooltip": "عمومی ترجمہ کرنے کے لئے اس صفحے کو بحال.",
+ "translate-tag-translate-link-desc": "اس صفحہ کا ترجمہ",
+ "translate-tag-markthis": "ترجمہ کے لئے اس صفحے نشان زد کریں",
+ "tpt-translation-intro": "پیش نظر صفحہ [[$2]] کا <span class=\"plainlinks\">[$1 ترجمہ شدہ نسخہ]</span> ہے اور ترجمہ $3 فیصد مکمل ہے۔",
+ "tpt-languages-legend": "دیگر زبانیں:",
+ "tpt-languages-zero": "اس زبان کے لئے ترجمہ شروع",
+ "tpt-languages-nonzero": "$1 ($2% ترجمہ ہوا)",
+ "tpt-tab-translate": "ترجمہ کریں",
+ "tpt-aggregategroup-add": "شامل کریں",
+ "tpt-aggregategroup-save": "محفوظ کریں",
+ "tpt-aggregategroup-add-new": "ایک نیا میرا گروپ شامل کریں",
+ "tpt-aggregategroup-new-name": "نام:",
+ "tpt-aggregategroup-invalid-group": "گروپ موجود نہیں",
+ "tpt-aggregategroup-edit-name": "نام:",
+ "tpt-aggregategroup-edit-description": "تفصیل:",
+ "tpt-aggregategroup-update": "محفوظ کریں",
+ "tpt-aggregategroup-update-cancel": "منسوخ",
+ "log-name-pagetranslation": "صفحہ ترجمہ لاگ ان کریں",
+ "log-action-filter-pagetranslation-move": "منتقل کردہ صفحات",
+ "pt-movepage-list-pages": "منتقل کرنے کے لئے صفحات کی فہرست",
+ "pt-movepage-list-translation": "ترجمہ {{PLURAL:$1|صفحہ|صفحات}}",
+ "pt-movepage-list-section": "ترجمہ اکائی {{PLURAL:$1|صفحہ|صفحات}}",
+ "pt-movepage-list-other": "دیگر ذیلی {{PLURAL:$1|صفحہ|صفحات}}",
+ "pt-movepage-legend": "ترجمہ صفحہ منتقل",
+ "pt-movepage-current": "موجودہ نام:",
+ "pt-movepage-new": "نیا نام:",
+ "pt-movepage-reason": "وجہ:",
+ "pt-movepage-action-perform": "اقدام کرتے ہیں",
+ "pt-movepage-action-other": "تبدیلی کا ہدف",
+ "pt-deletepage-action-check": "فہرست صفحات کو حذف کیا کرنے کے لئے",
+ "pt-deletepage-action-perform": "خارج کرتے ہیں",
+ "pt-deletepage-action-other": "تبدیلی کا ہدف",
+ "pt-deletepage-lang-legend": "ترجمہ صفحہ کو خارج",
+ "pt-deletepage-tp-legend": "ترجمہ صفحہ کو خارج",
+ "pt-deletepage-current": "صفحہ کا نام:",
+ "pt-deletepage-reason": "وجہ:",
+ "pt-deletepage-list-pages": "خارج کرنے کے لئے صفحات کی فہرست",
+ "pt-deletepage-list-translation": "ترجمہ صفحات",
+ "pt-deletepage-list-section": "اکائی کے صفحات",
+ "pt-deletepage-list-other": "دیگر ذیلی صفحات",
+ "pm-savepages-button-label": "محفوظ کریں",
+ "pm-cancel-button-label": "منسوخ",
+ "pm-page-does-not-exist": "$1 موجود نہیں ہے۔",
+ "pp-save-button-label": "محفوظ کریں",
+ "pp-cancel-button-label": "منسوخ",
+ "tpt-generic-button": "تصدیق"
+}
diff --git a/Translate/i18n/pagetranslation/uz.json b/Translate/i18n/pagetranslation/uz.json
new file mode 100644
index 00000000..e2865104
--- /dev/null
+++ b/Translate/i18n/pagetranslation/uz.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "CoderSI",
+ "Malikxan",
+ "Sociologist"
+ ]
+ },
+ "tpt-select-prioritylangs-reason": "Sabab:",
+ "translate-tag-translate-link-desc": "Bu sahifani tarjima qilish",
+ "aggregategroups": "Agregat guruhlar",
+ "log-name-pagetranslation": "Sahifalarni tarjima qilish qaydlari",
+ "pt-movepage-reason": "Sabab:",
+ "pt-deletepage-reason": "Sabab:"
+}
diff --git a/Translate/i18n/pagetranslation/vec.json b/Translate/i18n/pagetranslation/vec.json
new file mode 100644
index 00000000..45a2dd60
--- /dev/null
+++ b/Translate/i18n/pagetranslation/vec.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Candalua",
+ "Fierodelveneto"
+ ]
+ },
+ "translate-tag-translate-link-desc": "Tradusi sta pagina",
+ "tpt-translation-intro": "Sta pàjina ła xe na <span class=\"plainlinks\">[$1 version traduxesta]</span> de ła pàjina [[$2]] e ła tradusion ła xe finia al $3%",
+ "tpt-languages-nonzero": "$1 ($2% traduxesta)"
+}
diff --git a/Translate/i18n/pagetranslation/vep.json b/Translate/i18n/pagetranslation/vep.json
new file mode 100644
index 00000000..92a33f7b
--- /dev/null
+++ b/Translate/i18n/pagetranslation/vep.json
@@ -0,0 +1,36 @@
+{
+ "@metadata": {
+ "authors": [
+ "Игорь Бродский"
+ ]
+ },
+ "pagetranslation": "Lehtpoliden kändmine",
+ "right-pagetranslation": "Znamoita lehpoliden versijad kändmižen täht",
+ "tpt-section": "Kändmižühtnik $1",
+ "tpt-section-new": "Uz' kändmižühtnik. Nimi: $1",
+ "tpt-section-deleted": "Kändmižühtnik $1",
+ "tpt-diff-old": "Edeline tekst",
+ "tpt-diff-new": "Uz' tekst",
+ "tpt-submit": "Znamoita nece versii kändmižen täht.",
+ "tpt-sections-oldnew": "Uded da olijad kändmižühtnikad",
+ "tpt-sections-template": "Kändmižen lehtpolen šablon",
+ "tpt-nosuchpage": "Ei ole mugošt lehtpol't: \"$1\".",
+ "tpt-new-pages-title": "Lehtpoled kändmižen täht",
+ "tpt-old-pages-title": "Lehtpoled, kudambad kätas nügüd'",
+ "tpt-other-pages-title": "Traudüd lehtpoled",
+ "tpt-rev-encourage": "endištada",
+ "tpt-rev-mark-tooltip": "Znamoita necen lehtpolen jäl'gmäine versii kändmižen täht",
+ "translate-tag-translate-link-desc": "Käta nece lehtpol'",
+ "translate-tag-markthis": "Znamoita nece lehtpol' kändmižen täht.",
+ "tpt-languages-legend": "Toižed keled:",
+ "pt-movepage-list-other": "Toižed alalehtpoled",
+ "pt-movepage-current": "Olii nimi:",
+ "pt-movepage-new": "Uz' nimi:",
+ "pt-movepage-reason": "Sü:",
+ "pt-movepage-action-perform": "Udesnimitada",
+ "pt-movepage-action-other": "Vajehtada met",
+ "pt-deletepage-action-other": "Vajehtada met",
+ "pt-deletepage-current": "Lehtpolen nimi:",
+ "pt-deletepage-reason": "Sü:",
+ "pt-deletepage-list-other": "Toižed alalehtpoled"
+}
diff --git a/Translate/i18n/pagetranslation/vi.json b/Translate/i18n/pagetranslation/vi.json
new file mode 100644
index 00000000..1ec4691d
--- /dev/null
+++ b/Translate/i18n/pagetranslation/vi.json
@@ -0,0 +1,201 @@
+{
+ "@metadata": {
+ "authors": [
+ "Minh Nguyen",
+ "Pols12",
+ "Trần Nguyễn Minh Huy",
+ "Vinhtantran"
+ ]
+ },
+ "pagetranslation": "Biên dịch trang",
+ "right-pagetranslation": "Đánh dấu các phiên bản của trang là cần dịch",
+ "action-pagetranslation": "quản lý các trang dịch được",
+ "tpt-section": "Đơn vị dịch thuật $1",
+ "tpt-section-new": "Đơn vị dịch thuật mới.\nTên: $1",
+ "tpt-section-deleted": "Đơn vị dịch thuật $1",
+ "tpt-diff-old": "Văn bản trước",
+ "tpt-diff-new": "Văn bản mới",
+ "tpt-submit": "Đánh dấu phiên bản này là cần dịch",
+ "tpt-sections-oldnew": "Các đơn vị dịch thuật mới và hiện có",
+ "tpt-sections-deleted": "Các đơn vị dịch thuật đã bị xóa",
+ "tpt-sections-template": "Bản mẫu trang dịch",
+ "tpt-action-nofuzzy": "Đừng làm mất hiệu lực bản dịch",
+ "tpt-badtitle": "Tên trang cung cấp ($1) không phải là tên đúng",
+ "tpt-nosuchpage": "Trang $1 không tồn tại",
+ "tpt-oldrevision": "$2 không phải là phiên bản mới của trang [[:$1]]/\nChỉ có các phiên bản mới nhất mới có thể đánh dấu cần dịch được.",
+ "tpt-notsuitable": "Trang $1 không phù hợp để dịch thuật.\nHãy đảm bảo là nó có thẻ <nowiki><translate></nowiki> và có cú pháp đúng.",
+ "tpt-saveok": "Trang [[:$1]] đã được đánh dấu chờ dịch với $2 đơn vị dịch thuật.\nBạn có thể <span class=\"plainlinks\">[$3 dịch]</span> trang ngay bây giờ.",
+ "tpt-offer-notify": "Bạn có thể <span class=\"plainlinks\">[$1 báo các biên dịch viên]</span> về trang này.",
+ "tpt-showpage-intro": "Dưới đây là các đơn vị dịch thuật mới, đang tồn tại, hoặc đã bị xóa.\nTrước khi đánh dấu phiên bản này chờ dịch, hãy kiểm tra những thay đổi tại các đơn vị dịch thuật đã được thu gọn lại để tránh công việc không cần thiết cho biên dịch viên chưa.",
+ "tpt-mark-summary": "Đánh dấu phiên bản này là cần dịch",
+ "tpt-mark-nochanges": "Không có thay đổi nào để xem xét. Đánh dấu trang này để dịch sẽ không sửa đổi trang này hoặc bất kỳ mục dịch nào đang tồn tại.",
+ "tpt-edit-failed": "Không thể cập nhật trang: $1",
+ "tpt-duplicate": "Tên đơn vị dịch $1 được sử dụng hơn một lần.",
+ "tpt-unmarked": "Trang $1 không còn đánh dấu là cần dịch.",
+ "tpt-list-nopages": "Chưa có trang này được đánh dấu cần dịch hoặc chưa sẵn sàng để được đánh dấu cần dịch.",
+ "tpt-new-pages-title": "Các trang cần dịch",
+ "tpt-old-pages-title": "Các trang đang được dịch",
+ "tpt-other-pages-title": "Các trang hỏng",
+ "tpt-new-pages": "{{PLURAL:$1|Trang|Các trang}} này có chứa văn bản có thẻ cần dịch, nhưng không có phiên bản nào của {{PLURAL:$1|nó|chúng}} được đánh dấu cần dịch.",
+ "tpt-old-pages": "Một phiên bản nào đó của {{PLURAL:$1||các}} trang này đã được đánh dấu cần dịch.",
+ "tpt-other-pages": "{{PLURAL:$1|Một|Những}} phiên bản trước của trang này được đánh dấu là cần dịch, nhưng {{PLURAL:$1|phiên bản|các phiên bản}} gần đây nhất không thể được đánh dấu là cần dịch.",
+ "tpt-select-prioritylangs": "Danh sách các mã ngôn ngữ quan trọng phân tách bằng dấu phẩy:",
+ "tpt-select-prioritylangs-force": "Không cho phép dịch ra các ngôn ngữ không quan trọng",
+ "tpt-select-prioritylangs-reason": "Lý do:",
+ "tpt-sections-prioritylangs": "Ngôn ngữ quan trọng",
+ "tpt-rev-mark": "đánh dấu cần dịch",
+ "tpt-rev-unmark": "bỏ dấu cần dịch",
+ "tpt-rev-discourage": "khuyên để yên",
+ "tpt-rev-encourage": "khuyên dịch tiếp",
+ "tpt-rev-mark-tooltip": "Đánh dấu phiên bản mới nhất của trang này là cần dịch.",
+ "tpt-rev-unmark-tooltip": "Bỏ dấu cần dịch khỏi trang này.",
+ "tpt-rev-discourage-tooltip": "Khuyên để yên bản dịch hiện hành của trang này.",
+ "tpt-rev-encourage-tooltip": "Khuyên tiếp tục dịch trang này bình thường.",
+ "translate-tag-translate-link-desc": "Dịch trang này",
+ "translate-tag-markthis": "Đánh dấu trang này là cần dịch",
+ "translate-tag-markthisagain": "Trang này có <span class=\"plainlinks\">[$1 thay đổi]</span> từ khi nó được <span class=\"plainlinks\">[$2 đánh dấu cần dịch]</span> lần cuối.",
+ "translate-tag-hasnew": "Trang này có <span class=\"plainlinks\">[$1 thay đổi]</span> chưa được đánh dấu cần dịch.",
+ "tpt-translation-intro": "Trang này là một <span class=\"plainlinks\">[$1 bản dịch]</span> của trang [[$2]] và bản dịch đã hoàn thành $3%.",
+ "tpt-translation-intro-fuzzy": "Các bản dịch lỗi thời được đánh dấu như thế này.",
+ "tpt-languages-legend": "Ngôn ngữ khác:",
+ "tpt-languages-zero": "Bắt đầu bản dịch trong ngôn ngữ này",
+ "tpt-languages-nonzero": "$1 (đã biên dịch $2%)",
+ "tpt-tab-translate": "Biên dịch",
+ "tpt-target-page": "Trang này không thể cập nhật bằng tay.\nNó là một bản dịch của trang [[$1]] và có thể cập nhật bản dịch bằng cách sử dụng [$2 công cụ dịch thuật].",
+ "tpt-unknown-page": "Không gian tên này được dành cho các bản dịch trang nội dung.\nTrang bạn muốn sửa đổi dường như không tương ứng với trang nào đã được đánh dấu cần dịch.",
+ "tpt-translation-restricted": "Một người quản lý biên dịch không cho phép dịch trang ra ngôn ngữ này.\n\nLý do: $1",
+ "tpt-discouraged-language-force-header": "Không thể biên dịch trang này ra $1.",
+ "tpt-discouraged-language-force-content": "Một người quản lý biên dịch chỉ cho phép dịch trang ra $1.",
+ "tpt-discouraged-language-header": "Việc biên dịch ra $1 không phải là một ưu tiên cho trang này.",
+ "tpt-discouraged-language-content": "Một người quản lý biên dịch đã quyết định chú trọng vào việc biên dịch ra $1.",
+ "tpt-discouraged-language-force": "<strong>Không thể biên dịch trang này ra $2.</strong>\n\nMột người quản lý biên dịch chỉ cho phép dịch trang ra $3.",
+ "tpt-priority-languages": "Một người quản lý biên dịch đã đặt các ngôn ngữ quan trọng của nhóm này là $1.",
+ "tpt-render-summary": "Cập nhật đến phiên bản mới của trang nguồn",
+ "aggregategroups": "Nhóm tập hợp",
+ "tpt-aggregategroup-add": "Thêm",
+ "tpt-aggregategroup-save": "Lưu",
+ "tpt-aggregategroup-add-new": "Thêm nhóm tập hợp mới",
+ "tpt-aggregategroup-new-name": "Tên:",
+ "tpt-aggregategroup-new-description": "Miêu tả (tùy chọn):",
+ "tpt-aggregategroup-remove-confirm": "Bạn có chắc muốn xóa nhóm hợp này?",
+ "tpt-aggregategroup-invalid-group": "Nhóm không tồn tại",
+ "tpt-aggregategroup-edit-name": "Tên:",
+ "tpt-aggregategroup-edit-description": "Miêu tả:",
+ "tpt-aggregategroup-update": "Lưu",
+ "tpt-aggregategroup-update-cancel": "Hủy bỏ",
+ "tpt-invalid-group": "Nhóm không hợp lệ",
+ "pt-parse-open": "Thẻ &lt;translate> không đều.\nBản mẫu thông dịch: <pre>$1</pre>",
+ "pt-parse-close": "Thẻ &lt;/translate> không đều.\nBản mẫu thông dịch: <pre>$1</pre>",
+ "pt-parse-nested": "Không được phép bỏ đơn vị dịch thuật &lt;translate> trong đơn vị dịch thuật khác.\nVăn bản thẻ: <pre>$1</pre>",
+ "pt-shake-multiple": "Nhiều dấu hiệu cho một đơn vị dịch thuật.\nVăn bản của đơn vị dịch thuật: <pre>$1</pre>",
+ "pt-shake-position": "Dấu hiệu đơn vị dịch thuật ở vị trí không mong đợi.\nVăn bản của đơn vị dịch thuật: <pre>$1</pre>",
+ "pt-shake-empty": "Dấu hiệu “$1” có đơn vị dịch thuật rỗng.",
+ "log-description-pagetranslation": "Nhật trình các tác vụ co liên quan đến hệ thống dịch trang",
+ "log-name-pagetranslation": "Nhật trình dịch trang",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2}}đã đánh dấu $3 là cần được dịch",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2}}đã gỡ đánh dấu cần dịch khỏi $3",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2}}đã hoàn thành đổi tên của trang dịch được $3 thành $4",
+ "logentry-pagetranslation-movenok": "$1 {{GENDER:$2}}đã gặp vấn đề trong khi di chuyển $3 đến $4",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2}}đã hoàn thành xóa trang dịch được $3",
+ "logentry-pagetranslation-deletefnok": "$1 {{GENDER:$2}}đã gặp thất bại khi xóa $3 trực thuộc trang dịch được $4",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2}}đã hoàn thành xóa trang dịch được $3",
+ "logentry-pagetranslation-deletelnok": "$1 {{GENDER:$2}}đã gặp thất bại khi xóa $3 trực thuộc trang dịch được $4",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2}}đã khuyến khích dịch $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2}}đã ngừng khuyến khích dịch $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2}}đã dời các ngôn ngữ ưu tiên khỏi trang dịch được $3",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2}}đã đặt các ngôn ngữ ưu tiên cho trang dịch được $3–$5.",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2}}đã giới hạn các ngôn ngữ của trang dịch được $3 ra $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2}}đã thêm trang dịch được $3 và nhóm tập hợp $4",
+ "logentry-pagetranslation-dissociate": "$1 {{GENDER:$2}}đã rút trang dịch được $3 khỏi nhóm tập tin $4",
+ "log-action-filter-pagetranslation": "Kiểu tác vụ:",
+ "log-action-filter-pagetranslation-mark": "Đánh dấu cần dịch",
+ "log-action-filter-pagetranslation-unmark": "Gỡ khỏi hệ thống biên dịch",
+ "log-action-filter-pagetranslation-move": "Di chuyển trang",
+ "log-action-filter-pagetranslation-delete": "Xóa trang",
+ "log-action-filter-pagetranslation-encourage": "Khuyến khích biên dịch",
+ "log-action-filter-pagetranslation-discourage": "Phản đối biên dịch",
+ "log-action-filter-pagetranslation-prioritylanguages": "Thay đổi ngôn ngữ ưu tiên",
+ "log-action-filter-pagetranslation-aggregategroups": "Thay đổi nhóm tổng hợp",
+ "pt-movepage-title": "Di chuyển trang dịch được $1",
+ "pt-movepage-blockers": "Trang dịch được không thể được đổi tên vì {{PLURAL:$1|lỗi|các lỗi}} sau:",
+ "pt-movepage-block-base-invalid": "Trang đích dịch được có tên không hợp lệ.",
+ "pt-movepage-block-tp-invalid": "Bản dịch của trang đích [[:$1]] có tên không hợp lệ (có lẽ dài quá).",
+ "pt-movepage-block-section-invalid": "Trang đích của đơn vị dịch thuật, “[[:$1]]”, có tên không hợp lệ (có lẽ dài quá).",
+ "pt-movepage-block-subpage-invalid": "Trang con của trang đích “[[:$1]]” có tên không hợp lệ (có lẽ dài quá).",
+ "pt-movepage-list-pages": "Danh sách trang để di chuyển",
+ "pt-movepage-list-translation": "{{PLURAL:$1|Trang|Các trang}} biên dịch",
+ "pt-movepage-list-section": "{{PLURAL:$1|Trang|Các trang}} đơn vị dịch thuật",
+ "pt-movepage-list-other": "{{PLURAL:$1|Trang|Các trang}} con khác",
+ "pt-movepage-list-count": "Tổng cộng có $1 trang để di chuyển.",
+ "pt-movepage-legend": "Di chuyển trang dịch được",
+ "pt-movepage-current": "Tên hiện hành:",
+ "pt-movepage-new": "Tên mới:",
+ "pt-movepage-reason": "Lý do:",
+ "pt-movepage-subpages": "Di chuyển các trang con",
+ "pt-movepage-action-check": "Kiểm tra có thể di chuyển",
+ "pt-movepage-action-perform": "Di chuyển",
+ "pt-movepage-action-other": "Thay đổi trang đích",
+ "pt-movepage-intro": "Trang đặc biệt này cho phép bạn di chuyển các trang được đánh dấu là cần dịch.\nTác vụ này sẽ không được thực hiện ngay vì cần di chuyển nhiều trang một lúc.\nTrong khi các trang đang được di chuyển, không thể tương tác các trang đó.\nNhững vụ thất bại sẽ được ghi vào [[Special:Log/pagetranslation|nhật trình dịch trang]]; các trang được ảnh hưởng sẽ cần được sửa đổi bằng tay.",
+ "pt-movepage-logreason": "Một phần của trang dịch được $1.",
+ "pt-movepage-started": "Trang gốc đã được di chuyển.\nXin hãy kiểm tra những lỗi hay thông điệp kết quả thành công trong [[Special:Log/pagetranslation|nhật trình dịch trang]].",
+ "pt-locked-page": "Trang này bị khóa vì trang dịch được hiện đang được di chuyển.",
+ "pt-deletepage-lang-title": "Đang xóa trang dịch “$1”",
+ "pt-deletepage-tp-title": "Đang xóa trang dịch được “$1”",
+ "pt-deletepage-invalid-title": "Trang đã chỉ định là không hợp lệ.",
+ "pt-deletepage-invalid-text": "Trang đã chỉ định không phải là trang dịch được mà cũng không phải là trang biên dịch.",
+ "pt-deletepage-action-check": "Danh sách các trang sẽ được xóa",
+ "pt-deletepage-action-perform": "Thực hiện xóa",
+ "pt-deletepage-action-other": "Thay đổi trang đích",
+ "pt-deletepage-lang-legend": "Xóa trang dịch",
+ "pt-deletepage-tp-legend": "Xóa trang dịch được",
+ "pt-deletepage-any-legend": "Xóa trang dịch được hoặc trang biên dịch",
+ "pt-deletepage-current": "Tên trang:",
+ "pt-deletepage-reason": "Lý do:",
+ "pt-deletepage-subpages": "Xóa mọi trang con",
+ "pt-deletepage-list-pages": "Danh sách các trang sẽ được xóa",
+ "pt-deletepage-list-translation": "Các trang dịch",
+ "pt-deletepage-list-section": "Trang đơn vị dịch thuật",
+ "pt-deletepage-list-other": "Các trang con khác",
+ "pt-deletepage-list-count": "Tổng cộng $1 trang sẽ được xóa.",
+ "pt-deletepage-full-logreason": "Một phần của trang dịch được $1.",
+ "pt-deletepage-lang-logreason": "Một phần của trang dịch $1.",
+ "pt-deletepage-started": "Xin hãy kiểm tra những lỗi hay thông điệp kết quả thành công trong [[Special:Log/pagetranslation|nhật trình dịch trang]].",
+ "pt-deletepage-intro": "Trang đặc biệt này cho phép bạn xóa toàn bộ trang dịch được hoặc một trang biên dịch trong một ngôn ngữ nào đó.\nTác vụ xóa sẽ không được thực hiện ngay, bởi vì tất cả mọi trang dựa vào nó cũng sẽ bị xóa.\nCác thất bại được ghi vào [[Special:Log/pagetranslation|nhật trình dịch trang]] sẽ cần phải được sửa bằng tay.",
+ "pagemigration": "Di chuyển trang biên dịch",
+ "pagemigration-summary": "Chỉ định một trang biên dịch và phục hồi bản dịch nào được thực hiện trước khi hệ thống Biên dịch được kích hoạt trên trang đó.",
+ "pm-import-button-label": "Nhập",
+ "pm-savepages-button-label": "Lưu",
+ "pm-cancel-button-label": "Hủy bỏ",
+ "pm-page-does-not-exist": "$1 không tồn tại",
+ "pm-old-translations-missing": "$1 không chứa các bản dịch cũ",
+ "pm-extra-units-warning": "Có thể còn dư một số đơn vị dịch. Xin hãy làm cho các đơn vị nguồn và dịch hợp nhau.",
+ "pm-pagename-missing": "Vui lòng nhập tên trang",
+ "pm-add-icon-hover-text": "Thêm một đơn vị bên dưới",
+ "pm-swap-icon-hover-text": "Đổi chỗ với đơn vị bên dưới",
+ "pm-delete-icon-hover-text": "Xóa đơn vị",
+ "pm-pagetitle-placeholder": "Nhập tên trang",
+ "pm-pagetitle-invalid": "Xin vui lòng nhập một tên trang hợp lệ. Nên sử dụng định dạng <tên-trang>/<mã-ngôn-ngữ>.",
+ "pm-pagetitle-missing": "Vui lòng nhập tên trang.",
+ "pm-langcode-missing": "Hình như tên trang thiếu mã ngôn ngữ. Xin vui lòng nhập tên trang ở dạng <page-name>/<language-code>.",
+ "pm-summary-import": "Đã nhập bản dịch bằng cách [[Special:PageMigration|chuyển trang]]",
+ "pm-on-import-message-text": "Các bản dịch cũ đã được nhập. Sử dụng các nút thêm, đổi, và xóa để chỉnh sửa các đơn vị biên dịch và bấm nút “{{int:pm-savepages-button-label}}” để lưu chúng. Bấm nút “{{int:pm-cancel-button-label}}” để vứt bỏ.",
+ "pm-on-save-message-text": "Các đơn vị biên dịch đã được lưu. Bạn có thể điền tên của một trang dịch được để chuyển đổi nó hoặc thay đổi các đơn vị bên dưới và lưu phiên bản mới.",
+ "tpt-translate-title": "Cho phép dịch tên trang",
+ "pp-save-summary": "Đã chuẩn bị trang để dịch",
+ "pagepreparation": "Chuẩn bị trang để dịch",
+ "pp-pagename-placeholder": "Nhập tên trang",
+ "pp-prepare-button-label": "Chuẩn bị",
+ "pp-save-button-label": "Lưu",
+ "pp-cancel-button-label": "Hủy bỏ",
+ "pp-save-message": "Trang đã được lưu. Bạn có thể [$1 sửa đổi] nó.",
+ "pp-prepare-message": "Trang đã được chuẩn bị để dịch. Xem khác biệt bên dưới. Bấm nút “{{int:pp-save-button-label}}” nếu được.",
+ "pp-already-prepared-message": "Hình như trang đã được chuẩn bị để dịch rồi. Không có khác biệt so với phiên bản trước.",
+ "pp-pagename-missing": "Vui lòng nhập tên trang.",
+ "pp-diff-old-header": "Văn bản gốc",
+ "pp-diff-new-header": "Văn bản đã chuẩn bị",
+ "tpt-unlink-confirm": "Xin vui lòng xác nhận rằng bạn chắc chắn muốn gỡ trang này khỏi hệ thống biên dịch.\nChức năng chọn ngôn ngữ và các tên trang biên dịch sẽ không còn hoạt động.\nSẽ có thể sửa đổi các trang biên dịch.",
+ "tpt-unlink-button": "Gỡ khỏi hệ thống biên dịch",
+ "tpt-unlink-summary": "Đã gỡ trang khỏi hệ thống biên dịch",
+ "tpt-generic-confirm": "Vui lòng xác nhận tác vụ này.",
+ "tpt-generic-button": "Xác nhận"
+}
diff --git a/Translate/i18n/pagetranslation/vmw.json b/Translate/i18n/pagetranslation/vmw.json
new file mode 100644
index 00000000..b71bbf64
--- /dev/null
+++ b/Translate/i18n/pagetranslation/vmw.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gildo Máquina"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% yootaphuleliwa)"
+}
diff --git a/Translate/i18n/pagetranslation/vo.json b/Translate/i18n/pagetranslation/vo.json
new file mode 100644
index 00000000..71c87068
--- /dev/null
+++ b/Translate/i18n/pagetranslation/vo.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Malafaya",
+ "Smeira"
+ ]
+ },
+ "translate-tag-translate-link-desc": "Tradutön padi at",
+ "tpt-languages-legend": "Püks votik:",
+ "tpt-languages-nonzero": "$1 ($2% petradutöl)"
+}
diff --git a/Translate/i18n/pagetranslation/vro.json b/Translate/i18n/pagetranslation/vro.json
new file mode 100644
index 00000000..3f3a4863
--- /dev/null
+++ b/Translate/i18n/pagetranslation/vro.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Võrok"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% ümbre pant)"
+}
diff --git a/Translate/i18n/pagetranslation/wa.json b/Translate/i18n/pagetranslation/wa.json
new file mode 100644
index 00000000..e0478ebe
--- /dev/null
+++ b/Translate/i18n/pagetranslation/wa.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Reptilien.19831209BE1"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2 % ratourné{{PLURAL:$2||s}})"
+}
diff --git a/Translate/i18n/pagetranslation/war.json b/Translate/i18n/pagetranslation/war.json
new file mode 100644
index 00000000..abd6bcec
--- /dev/null
+++ b/Translate/i18n/pagetranslation/war.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "JinJian"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% an nahubad na)"
+}
diff --git a/Translate/i18n/pagetranslation/wls.json b/Translate/i18n/pagetranslation/wls.json
new file mode 100644
index 00000000..3c5dba4f
--- /dev/null
+++ b/Translate/i18n/pagetranslation/wls.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lea.Fakauvea"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% kua fakaliliu)"
+}
diff --git a/Translate/i18n/pagetranslation/wo.json b/Translate/i18n/pagetranslation/wo.json
new file mode 100644
index 00000000..3a35b6fd
--- /dev/null
+++ b/Translate/i18n/pagetranslation/wo.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ibou"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% lañu tekki)"
+}
diff --git a/Translate/i18n/pagetranslation/wuu.json b/Translate/i18n/pagetranslation/wuu.json
new file mode 100644
index 00000000..0b14e981
--- /dev/null
+++ b/Translate/i18n/pagetranslation/wuu.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Poiuyt"
+ ]
+ },
+ "tpt-languages-nonzero": "$1($2%翻译脱)",
+ "pt-movepage-reason": "理由:"
+}
diff --git a/Translate/i18n/pagetranslation/xmf.json b/Translate/i18n/pagetranslation/xmf.json
new file mode 100644
index 00000000..2e6aea77
--- /dev/null
+++ b/Translate/i18n/pagetranslation/xmf.json
@@ -0,0 +1,41 @@
+{
+ "@metadata": {
+ "authors": [
+ "Narazeni",
+ "Silovan"
+ ]
+ },
+ "pagetranslation": "ხასჷლაშ თანგუა",
+ "tps-edit-sourcepage-ve-warning-button": "OK",
+ "tpt-section-deleted": "თანგუაშ ბლოკი $1",
+ "tpt-diff-old": "კინოხიანი ტექსტი",
+ "tpt-diff-new": "ახალი ტექსტი",
+ "tpt-sections-template": "თანგუაშ ხასჷლაშ თანგი",
+ "tpt-nosuchpage": "ხასჷლა $1 ვა რე",
+ "tpt-other-pages-title": "დაღამაკებული ხასჷლეფი",
+ "tpt-outdated-pages-title": "ხასჷლეფი, ნამუეფჷთ თირუეფს ელჷნან",
+ "tpt-tag-oldsyntax": "ჯვეში სინტაქსი",
+ "tpt-select-prioritylangs-reason": "სამანჯელი:",
+ "tpt-sections-prioritylangs": "პრიორიტეტული ნინეფი",
+ "tpt-sections-syntaxversion": "სინტაქსიშ ვერსია",
+ "tpt-rev-encourage": "ახალშო ეკონწყუალა",
+ "tpt-languages-legend": "შხვა ნინეფი:",
+ "tpt-languages-zero": "თე ნინაშა თანგუაშ დოჭყაფა",
+ "tpt-languages-nonzero": "$1 ($2% თანგილი)",
+ "tpt-tab-translate": "თანგუა",
+ "tpt-target-page": "ათე ხასჷლაშ ხეთ გოახალაფა ვაშილებე. თე ხასჷლა რე [[$1]] ხასჷლაშ ნათანგა დო თიში გოახალაფა შილებე [$2 თანგუაშ ხეჭკუდით].",
+ "tpt-discouraged-language-header": "ათე ხასჷლაშო $1-შა თანგუა პრიორიტეტული ვა რე.",
+ "tpt-aggregategroup-add": "გეძინა",
+ "tpt-aggregategroup-save": "ჩუალა",
+ "tpt-aggregategroup-new-name": "ჯოხო:",
+ "tpt-aggregategroup-new-description": "ეჭარუა (ვა რე უციო):",
+ "tpt-aggregategroup-invalid-group": "ბუნა ვა რე",
+ "tpt-aggregategroup-edit-name": "ჯოხო:",
+ "tpt-aggregategroup-edit-description": "ეჭარუა:",
+ "tpt-aggregategroup-update": "ჩუალა",
+ "tpt-aggregategroup-update-cancel": "გოუქვაფა",
+ "tpt-invalid-group": "ჩილათირი ბუნა",
+ "pt-parse-open": "უდუბალანსებუ &lt;translate> ხინტკი.\nთანგუაშ თანგი: <pre>$1</pre>",
+ "log-name-pagetranslation": "ხასჷლაშ თანგუაშ ჟურნალი",
+ "log-action-filter-pagetranslation": "ქიმინუაშ ტიპი:"
+}
diff --git a/Translate/i18n/pagetranslation/xsy.json b/Translate/i18n/pagetranslation/xsy.json
new file mode 100644
index 00000000..a8fd6f56
--- /dev/null
+++ b/Translate/i18n/pagetranslation/xsy.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lalotahes"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% pinaibih ka ka:i’ )"
+}
diff --git a/Translate/i18n/pagetranslation/yi.json b/Translate/i18n/pagetranslation/yi.json
new file mode 100644
index 00000000..72d46911
--- /dev/null
+++ b/Translate/i18n/pagetranslation/yi.json
@@ -0,0 +1,131 @@
+{
+ "@metadata": {
+ "authors": [
+ "Imre",
+ "פוילישער",
+ "පසිඳු කාවින්ද"
+ ]
+ },
+ "pagetranslation": "בלאט טײַטש",
+ "right-pagetranslation": "מארקירן ווערסיעס פון בלעטער פאר איבערזעצונג",
+ "action-pagetranslation": "פֿארוואלטן איבערזעצבאַרע בלעטער",
+ "tpt-section": "איבערזעצונג איינהייט $1",
+ "tpt-section-new": "נײַע איבערזעצונג איינהייט.\nנאמען: $1",
+ "tpt-section-deleted": "איבערזעצונג איינהייט $1",
+ "tpt-diff-old": "פֿריערדיגער טעקסט",
+ "tpt-diff-new": "נײַער טעקסט",
+ "tpt-submit": "מארקירן די ווערסיע פאר איבערזעצונג",
+ "tpt-sections-oldnew": "נײַע און עקסיסטירנדע איבערזעצונג איינהייטן",
+ "tpt-sections-deleted": "אויסגעמעקטע איבערזעצונג איינהייטן",
+ "tpt-sections-template": "איבערזעצונג בלאט מוסטער",
+ "tpt-action-nofuzzy": "נישט פסל'ן איבערזעצונגען",
+ "tpt-badtitle": "געגעבענער בלאט נאמען ($1) איז נישט קיין גילטיקער טיטל",
+ "tpt-nosuchpage": "בלאט $1 עקזיסטירט נישט",
+ "tpt-oldrevision": "$2 איז נישט די לעצטע ווערסיע פונעם בלאט [[:$1]].\nנאר לעצטע ווערסיעס קען מען מארקירן פאר איבערזעצונג.",
+ "tpt-notsuitable": "בלאט $1 פאסט נישט איבערצוזעצן.\nפארזיכערט אז ער האט <nowiki><translate></nowiki> טאַגן און האט א גילטיקן סינטאקס.",
+ "tpt-saveok": "דער בלאט [[:$1]] איז געווארן מארקירט פאר איבערזעצן מיט $2 {{PLURAL:$2|איבערזעצונג אפשניט|איבערזעצונג אפשניטן}}.\nדער בלאט קען מען אצינד <span class=\"plainlinks\">[$3 איבערזעצן]</span>.",
+ "tpt-offer-notify": "איר קענט <span class=\"plainlinks\">[$1 מודיע זיין איבערזעצער]</span> וועגן דעם בלאט.",
+ "tpt-mark-summary": "מארקירט די ווערסיע פאר איבערזעצונג",
+ "tpt-edit-failed": "האט נישט געקענט דערהיינטיקן דעם בלאט: $1",
+ "tpt-duplicate": "איבערזעצונג אפשניט נאמען $1 געניצט מער ווי איין מאל.",
+ "tpt-unmarked": "בלאט $1 מער נישט מארקירט איבערצוזעצן.",
+ "tpt-list-nopages": "קיין בלעטער נישט מארקירט צום איבערזעצן אדער גרייט צו ווערן מארקירט צום איבערזעצן.",
+ "tpt-new-pages-title": "בלעטער פארגעשטעלט איבערצוזעצן",
+ "tpt-old-pages-title": "בלעטער איבערצוזעצן",
+ "tpt-other-pages-title": "צעבראכענע בלעטער",
+ "tpt-old-pages": "א ווערסיע פון {{PLURAL:$1|דעם בלאט איז|די בלעטער זענען}} געווארן מארקירט פאר איבערזעצונג.",
+ "tpt-select-prioritylangs-force": "פֿארמיידן איבערזעצונגען צו שפראכן אחוץ די פריאריטעט־שפראכן",
+ "tpt-select-prioritylangs-reason": "אורזאַך:",
+ "tpt-sections-prioritylangs": "פריאריזירטע שפראכן",
+ "tpt-rev-mark": "מארקירן פאר איבערזעצונג",
+ "tpt-rev-unmark": "אוועקנעמען פון איבערזעצונג",
+ "tpt-rev-discourage": "אפמוטיקן",
+ "tpt-rev-encourage": "אויפֿריכטן",
+ "tpt-rev-mark-tooltip": "מארקירן די לעצטע ווערזיע פון דעם בלאט פאר איבערזעצן.",
+ "tpt-rev-unmark-tooltip": "אוועקנעמען דעם בלאט פון איבערזעצן.",
+ "tpt-rev-discourage-tooltip": "אפמוטיקן נאך איבערזעצונגען אויף דעם בלאט.",
+ "tpt-rev-encourage-tooltip": "שטעלט צוריק דעם בלאט פאר נארמאלער איבערזעצונג.",
+ "translate-tag-translate-link-desc": "פֿאַרטײַטשט דעם בלאַט",
+ "translate-tag-markthis": "מארקירן דעם בלאט פאר איבערזעצונג",
+ "translate-tag-markthisagain": "דער בלאַט האט <span class=\"plainlinks\">[ $1 ענדערונגען]</span> זינט ער איז לעצט געווארן <span class=\"plainlinks\">[ $2 אנגעצייכנט פֿאַר איבערזעצונג].</span>",
+ "translate-tag-hasnew": "דער בלאַט אַנטהאַלט <span class=\"plainlinks\">[ $1 ענדערונגען]</span> וואָס זענען נישט אנגעצייכנט פֿאַר איבערזעצונג.",
+ "tpt-translation-intro": "דער דאזיקער בלאט איז א <span class=\"plainlinks\">[$1 איבערגעזעצטע ווערסיע]</span> פון דעם בלאט [[$2]] און די איבערזעצונג איז $3% פארענדיקט.",
+ "tpt-translation-intro-fuzzy": "פארעלטערטע איבערזעצונגען זענען מארקירט אזוי.",
+ "tpt-languages-legend": "אנדערע שפראַכן:",
+ "tpt-languages-zero": "אנהייבן איבערזעצן די דאזיקע שפראך",
+ "tpt-languages-nonzero": "$1 ($2% איבערגעזעצט)",
+ "tpt-tab-translate": "איבערזעצן",
+ "tpt-target-page": "מען קען נישט דערהיינטיקן דעם בלאט מאנועל.\nדער בלאט איז אן איבערזעצונג פונעם בלאט [[$1]] און מען קען דערהיינטיקן די איבערזעצונג מיט די [$2 איבערזעצונג געצייג].",
+ "tpt-discouraged-language-force-header": "מען קען נישט איבערזעצן דעם בלאט אויף $1.",
+ "tpt-discouraged-language-force-content": "אן איבערזעצונג־אדמיניסטראטאר האט באשלאסן אז דער בלעט קען מען איבערזעצן נאר אויף $1.",
+ "tpt-discouraged-language-header": "איבערזעצן אויף $1 איז נישט קיין פריאריטעט פאר דעם בלאט.",
+ "tpt-aggregategroup-add": "צולייגן",
+ "tpt-aggregategroup-save": "אויפֿהיטן",
+ "tpt-aggregategroup-new-name": "נאָמען:",
+ "tpt-aggregategroup-new-description": "באשרייבונג (אפציאנאל):",
+ "tpt-aggregategroup-remove-confirm": "איר זענט זיכער אז איר ווילט אויסמעקן די גרופע?",
+ "tpt-aggregategroup-invalid-group": "גרופע עקזיסטירט נישט",
+ "tpt-aggregategroup-edit-name": "נאָמען:",
+ "tpt-aggregategroup-edit-description": "באַשרײַבונג:",
+ "tpt-aggregategroup-update": "אויפֿהיטן",
+ "tpt-aggregategroup-update-cancel": "אַנולירן",
+ "tpt-invalid-group": "אומגילטיגע גרופע",
+ "log-name-pagetranslation": "בלאט איבערזעצונג לאגבוך",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|מארקירט}} $3 איבערצוזעצן",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|אראפגענומען}} $3 פון דער איבערזעצן סיסטעם",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|האט געקאנטשעט}} אויסמעקן איבערזעצבארן בלאט $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|האט אוועקגענומען}} פריאריטעט שפראכן פון איבערזעצבארן בלאט $3",
+ "log-action-filter-pagetranslation-mark": "מארקירן פאר איבערזעצונג",
+ "pt-movepage-title": "באוועגן איבערזעצבארן בלאט \"$1\"",
+ "pt-movepage-block-base-invalid": "דער נאמען פונעם איבערזעצבארן צילבלאט איז נישט קיין גילטיקער טיטל.",
+ "pt-movepage-block-tp-invalid": "דער ציל איבערזעצונג בלאט טיטל פֿאר \"[[:$1]]\" וואלט געווען אומגילטיק (צו לאנג?).",
+ "pt-movepage-block-subpage-invalid": "דער ציל אונטערבלאט טיטל פֿאר \"[[:$1]]\" וואלט געווען אומגילטיק (צו לאנג?).",
+ "pt-movepage-list-pages": "רשימה פון בלעטער צו באַוועגן",
+ "pt-movepage-list-translation": "טײַטש {{PLURAL:$1|בלאַט|בלעטער}}",
+ "pt-movepage-list-section": "איבערזעצונג איינהייט {{PLURAL:$1|בלאַט|בלעטער}}",
+ "pt-movepage-list-other": "אנדערע {{PLURAL:$1| אונטערבלאַט| אונטערבלעטער}}",
+ "pt-movepage-list-count": "אינגאנצן $1 {{PLURAL:$1|בלאט|בלעטער}} צו באוועגן.",
+ "pt-movepage-legend": "באוועגן איבערזעצבארן בלאט",
+ "pt-movepage-current": "אקטועלער נאמען:",
+ "pt-movepage-new": "נײַער נאָמען:",
+ "pt-movepage-reason": "אורזאַך:",
+ "pt-movepage-subpages": "באוועגן אלע אונטערבלעטער",
+ "pt-movepage-action-check": "קאנטראלירט צי די באוועגונג איז מעגלעך",
+ "pt-movepage-action-perform": "פֿירט אויס די באוועגונג",
+ "pt-movepage-action-other": "ענדערט ציל",
+ "pt-movepage-logreason": "טייל פון איבערזעצבארן בלאט \"$1\"",
+ "pt-deletepage-lang-title": "אויסמעקן איבערזעצונג בלאט \"$1\"",
+ "pt-deletepage-tp-title": "אויסמעקן איבערזעצבארן בלאט \"$1\"",
+ "pt-deletepage-invalid-title": "דער ספעציפירטער בלאט איז נישט גילטיק.",
+ "pt-deletepage-action-check": "מאכט א רשימה פון בלעטער צו ווערן אויסגעמעקט",
+ "pt-deletepage-action-perform": "אויספירן אויסמעקונג",
+ "pt-deletepage-action-other": "ענדערן ציל",
+ "pt-deletepage-lang-legend": "אויסמעקן איבערזעצונג בלאט",
+ "pt-deletepage-tp-legend": "אויסמעקן איבערזעצבארן בלאט",
+ "pt-deletepage-any-legend": "אויסמעקן איבערזעצבארן בלאט אדער איבערזעצונג בלאט",
+ "pt-deletepage-current": "בלאַט נאָמען:",
+ "pt-deletepage-reason": "אורזאַך:",
+ "pt-deletepage-subpages": "אויסמעקן אלע אונטערבלעטער",
+ "pt-deletepage-list-pages": "רשימה פון בלעטער אויסצומעקן",
+ "pt-deletepage-list-translation": "איבערזעצונג בלעטער",
+ "pt-deletepage-list-section": "איבערזעצונג איינהייט בלעטער",
+ "pt-deletepage-list-other": "אנדערע אונטערבלעטער",
+ "pt-deletepage-list-count": "אינגאנצן $1 {{PLURAL:$1|בלאט|בלעטער}} אויסצומעקן.",
+ "pt-deletepage-full-logreason": "טייל פון איבערזעצבארן בלאט ״$1״.",
+ "pt-deletepage-lang-logreason": "טייל פון איבערזעצונג בלאט \"$1\".",
+ "pagemigration": "איבערזעצונג בלאט מיגראציע",
+ "pm-import-button-label": "אימפארטירן",
+ "pm-savepages-button-label": "אויפֿהיטן",
+ "pm-cancel-button-label": "אַנולירן",
+ "pm-page-does-not-exist": "$1 עקזיסטירט נישט",
+ "pm-old-translations-missing": "$1 אנטהאלט נישט קיין אלטע איבערזעצונגען",
+ "pm-delete-icon-hover-text": "אויסמעקן איינס",
+ "pm-langcode-missing": "װײזט אױס אַז דער שפראַכקאד פֿעלט אין קעפל. ביטע איינגעבן בלאַטקעפל אין פֿארמאַט <page-name>/<language-code>.",
+ "pagepreparation": "צוגרייטן בלאט פאר איבערזעצונג",
+ "pp-pagename-placeholder": "אײַנגעבן בלאטנאמען",
+ "pp-prepare-button-label": "צוגרייטן",
+ "pp-save-button-label": "אויפֿהיטן",
+ "pp-cancel-button-label": "אַנולירן",
+ "pp-diff-old-header": "קוואל־טעקסט",
+ "tpt-generic-button": "באַשטעטיקן"
+}
diff --git a/Translate/i18n/pagetranslation/yo.json b/Translate/i18n/pagetranslation/yo.json
new file mode 100644
index 00000000..066d6c4c
--- /dev/null
+++ b/Translate/i18n/pagetranslation/yo.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Demmy",
+ "Wikicology"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% ti jẹ́ yíyípadàlédè)"
+}
diff --git a/Translate/i18n/pagetranslation/yrl.json b/Translate/i18n/pagetranslation/yrl.json
new file mode 100644
index 00000000..9116e7c0
--- /dev/null
+++ b/Translate/i18n/pagetranslation/yrl.json
@@ -0,0 +1,108 @@
+{
+ "@metadata": {
+ "authors": [
+ "Karapananguasú Kururú Teremembé",
+ "Maracajá Teremembé"
+ ]
+ },
+ "pagetranslation": "Sowa'etá sinimukanhẽẽgawa",
+ "right-pagetranslation": "Umuçãgau sowa yuçenaçawa'etá sinimukanhẽẽgawa pirí",
+ "action-pagetranslation": "umumurikuá sowa'etá sinimukanhẽẽgawara",
+ "tps-edit-sourcepage-ve-warning-title": "Mbeuçawa: Kuá sowa ti umutumuwara",
+ "tps-edit-sourcepage-ve-warning-button": "KATÚ",
+ "tpt-section": "Sinimukanhẽẽgawa yepewa $1",
+ "tpt-section-new": "Sinimukanhẽẽgawa yepewa piçaçú.\nRera: $1",
+ "tpt-section-deleted": "Sinimukanhẽẽgawa yepewa $1",
+ "tpt-diff-old": "Pinimaça tenũdéwara",
+ "tpt-diff-new": "Pinimaça piçaçú",
+ "tpt-submit": "Umuçãgau kuá yuçenaçawa sinimukanhẽẽgawa arã",
+ "tpt-sections-oldnew": "Sinimukanhẽẽgawa yepewa'etá piçaçú açui aikuewara",
+ "tpt-sections-deleted": "Sinimukanhẽẽgawa yepewa'etá taumuçaka'ana",
+ "tpt-action-nofuzzy": "Ti umuçepiĩma sinimukanhẽẽgawa'etá",
+ "tpt-badtitle": "Sowa rera ĩdé remeẽ'ana ($1) aé ti yepé sowa rera çepiwara",
+ "tpt-nosuchpage": "Ti aikué sowa $1",
+ "tpt-mark-summary": "Kuá yuçenaçawa aite kuá umuçãgau'ana sinimukanhẽẽgawa pirí",
+ "tpt-edit-failed": "Yawá ti puderiwá umukuiriwara kuá sowa: $1",
+ "tpt-old-pages-title": "Sowa'etá tauikú waá sinimukanhẽẽgawa rupí",
+ "tpt-other-pages-title": "Sowa'etá taurikú waá iwaçuçawa'etá",
+ "tpt-tag-oldsyntax": "miira kuxiĩma",
+ "tpt-sections-syntaxversion": "Miira yuçenaçawa",
+ "tpt-rev-mark": "umuçãgau sinimukanhẽẽgawa pirí",
+ "tpt-rev-unmark": "umuçaká sinimukanhẽẽgawa çui",
+ "translate-tag-translate-link-desc": "Usinimukanhẽẽga kuá sowa",
+ "translate-tag-markthis": "Umuçãgau kuá sowa sinimukanhẽẽgawa pirí",
+ "tpt-translation-intro": "Kuá sowa yepé <span class=\"plainlinks\">[$1 yuçẽnaçawa sinimukanhẽẽgawara]</span> sowa [[$2]] çui. '''Açui nesinimukanhẽẽgawa uikú $3% tereçẽmu'''.",
+ "tpt-languages-legend": "Amũ nhẽẽga'etá:",
+ "tpt-languages-zero": "Uyupirũ sinimukanhẽẽgawa kuá nhẽẽga çupé",
+ "tpt-languages-nonzero": "$1 ($2% sinimukanhẽẽgawara)",
+ "tpt-tab-translate": "Usinimukanhẽẽga",
+ "tpt-aggregategroup-add": "Umburipíri",
+ "tpt-aggregategroup-save": "Ukarawatá",
+ "tpt-aggregategroup-close": "Usikĩdá",
+ "tpt-aggregategroup-new-name": "Rera:",
+ "tpt-aggregategroup-invalid-group": "Ti aikué kuá ayurí",
+ "tpt-aggregategroup-edit-name": "Rera:",
+ "tpt-aggregategroup-update": "Ukarawatá",
+ "tpt-aggregategroup-update-cancel": "Umuamunika",
+ "tpt-aggregategroup-expand-all-groups": "umuçaĩ panhẽ ayuri'etá",
+ "tpt-aggregategroup-expand-group": "umuçaĩ ayuri'etá",
+ "tpt-invalid-group": "Ayurí çepiĩma",
+ "log-name-pagetranslation": "Sowa sinimukanhẽẽgawa mukatiuruçawa",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|umuçãgau'ana}} $3 sinimukanhẽẽgawa arã",
+ "logentry-pagetranslation-unmark": "$1 {{GENDER:$2|umuçaka'ana}} $3 sinimukanhẽẽgawa sistema çui",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|amũçenũipawa}} tereçemu'ana sowa sinimukanhẽẽgawara $3 çui $4 kití",
+ "log-action-filter-pagetranslation": "Munhãgawa nũgara:",
+ "log-action-filter-pagetranslation-mark": "Umuçãgau sinimukanhẽẽgawa pirí",
+ "log-action-filter-pagetranslation-unmark": "Muçakaçawa sinimukanhẽẽgawa çui",
+ "log-action-filter-pagetranslation-delete": "Sowa muçakaçawa'etá",
+ "pt-movepage-list-translation": "Sinimukanhẽẽgawa {{PLURAL:$1|sowa|sowa'etá}}",
+ "pt-movepage-list-section": "Sinimukanhẽẽgawa yepewa {{PLURAL:$1|sowa|sowa'etá}}",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|Sowa'í|Sowa'i'etá}} taumuçãgau'ana sinimukanhẽẽgawa pirí",
+ "pt-movepage-list-other": "Amũ {{PLURAL:$1|sowa'í|sowa'i'etá}}",
+ "pt-movepage-list-no-pages": "Ne yepé sowa uwaçẽmu'ana.",
+ "pt-movepage-current": "Rera kuiriwara:",
+ "pt-movepage-new": "Rera piçaçú:",
+ "pt-movepage-subpages": "Uyatimana panhẽ sowa'i'etá",
+ "pt-movepage-talkpages": "Uyatimana murũgetaçawa sowa'etá",
+ "pt-movepage-talkpage-exists": "(urikú murũgetaçawa sowa)",
+ "pt-movepage-action-perform": "Umunhã yatimanaçawa",
+ "pt-deletepage-lang-title": "Umuçaká uikú sinimukanhẽẽgawa sowa \"$1\"",
+ "pt-deletepage-tp-title": "Umuçaká uikú sowa sinimukanhẽẽgawara \"$1\"",
+ "pt-deletepage-action-check": "Sowa'etá kamakaçawa umuçaká pirí",
+ "pt-deletepage-action-perform": "Umuçaká",
+ "pt-deletepage-lang-legend": "Umuçaká sinimukanhẽẽgawa sowa",
+ "pt-deletepage-tp-legend": "Umuçaká sowa sinimukanhẽẽgawara",
+ "pt-deletepage-any-legend": "Umuçaká sowa sinimukanhẽẽgawara ã sinimukanhẽẽgawa sowa",
+ "pt-deletepage-current": "Sowa rera:",
+ "pt-deletepage-subpages": "Umuçaká panhẽ sowa'í'etá",
+ "pt-deletepage-list-pages": "Sowa'etá kamakaçawa umuçaká pirí",
+ "pt-deletepage-list-translation": "Sinimukanhẽẽgawa sowa'etá",
+ "pt-deletepage-list-section": "Sinimukanhẽẽgawa yepewa sowa'etá",
+ "pt-deletepage-list-other": "Amũ sowa'í'etá",
+ "pt-deletepage-list-no-pages": "Ne yepé sowa aite kuá uwaçẽmu'ana.",
+ "pm-import-button-label": "Ururi ukaripé çui",
+ "pm-savepages-button-label": "Ukarawatá",
+ "pm-cancel-button-label": "Umuamunika",
+ "pm-page-does-not-exist": "Ti aikué $1",
+ "pm-old-translations-missing": "$1 ti aikué sinimukanhẽẽgawa'etá kuxiĩma.",
+ "pm-pagename-missing": "Ayãnã, e-mburipíri sowa rera.",
+ "pm-add-icon-hover-text": "E-mburipíri yepé yepewa iwira",
+ "pm-delete-icon-hover-text": "Umuçaká yepewa",
+ "pm-pagetitle-placeholder": "E-mupinima yepé sowa rera",
+ "pm-pagetitle-missing": "Ayãnã, e-mburipíri sowa rera.",
+ "tpt-translate-title": "Uxiari usinimukanhẽẽga sowa rera",
+ "pp-save-summary": "Umũgaturú sowa sinimukanhẽẽgawa pirí",
+ "pagepreparation": "Umũgaturú kuá sowa sinimukanhẽẽgawa pirí",
+ "pp-pagename-placeholder": "E-mupinima sowa rera",
+ "pp-prepare-button-label": "Umũgaturú",
+ "pp-save-button-label": "Umuyukuau",
+ "pp-cancel-button-label": "Umuamunika",
+ "pp-save-message": "Sowa muyukuau'ana. Ĩdé remurú [$1 remurupiawa] yawá.",
+ "pp-pagename-missing": "Ayãnã, e-mburipíri sowa rera.",
+ "pp-diff-old-header": "Çatari pinimaça",
+ "pp-diff-new-header": "Pinimaçá mũgaturu'ana",
+ "tpt-unlink-button": "Umuçaká sinimukanhẽẽgawa çui",
+ "tpt-unlink-summary": "Sowa umuçaka'ana sinimukanhẽẽgawa çui",
+ "tpt-generic-confirm": "Ayãnã, e-muereté munhãgawa.",
+ "tpt-generic-button": "Umuereté"
+}
diff --git a/Translate/i18n/pagetranslation/yue.json b/Translate/i18n/pagetranslation/yue.json
new file mode 100644
index 00000000..a5ae80bc
--- /dev/null
+++ b/Translate/i18n/pagetranslation/yue.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Streetdeck",
+ "Yueman"
+ ]
+ },
+ "tpt-languages-nonzero": "$1($2% 翻譯咗)",
+ "pt-movepage-list-no-pages": "維基百科無呢個名嘅文",
+ "pt-deletepage-list-no-pages": "維基百科無呢個名嘅文"
+}
diff --git a/Translate/i18n/pagetranslation/zgh.json b/Translate/i18n/pagetranslation/zgh.json
new file mode 100644
index 00000000..39092e42
--- /dev/null
+++ b/Translate/i18n/pagetranslation/zgh.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amara-Amaziɣ",
+ "Brahim-essaidi",
+ "Hakim1bal"
+ ]
+ },
+ "tpt-languages-nonzero": "$1 ($2% ⴰⴷ ⵉⵜⵜⵢⴰⵡⵙⵓⵖⵍⵏ)",
+ "tpt-aggregategroup-add": "ⵔⵏⵓ"
+}
diff --git a/Translate/i18n/pagetranslation/zh-hans.json b/Translate/i18n/pagetranslation/zh-hans.json
new file mode 100644
index 00000000..dee2027e
--- /dev/null
+++ b/Translate/i18n/pagetranslation/zh-hans.json
@@ -0,0 +1,289 @@
+{
+ "@metadata": {
+ "authors": [
+ "A Retired User",
+ "Anakmalaysia",
+ "Chenxiaoqino",
+ "Dimension",
+ "Func",
+ "GraceL",
+ "GuoPC",
+ "Gzdavidwong",
+ "Hmgrmb",
+ "Hudafu",
+ "Hydra",
+ "Hzy980512",
+ "Lakejason0",
+ "Li3939108",
+ "Liangent",
+ "Linforest",
+ "Liuxinyu970226",
+ "Mys 721tx",
+ "NigelSoft",
+ "PhiLiP",
+ "Pseudo Classes",
+ "Shirayuki",
+ "Shizhao",
+ "Shuiwater",
+ "Slboat",
+ "SomeyaMako",
+ "Stang",
+ "Supaiku",
+ "TianyinLee",
+ "Tranve",
+ "TsuyaMarisa",
+ "VulpesVulpes825",
+ "Xiaomingyan",
+ "Xiplus",
+ "Yfdyh000",
+ "予弦",
+ "列维劳德",
+ "神樂坂秀吉",
+ "铁桶",
+ "阿pp"
+ ]
+ },
+ "pagetranslation": "页面翻译",
+ "nstab-translations": "翻译单元",
+ "right-pagetranslation": "标记翻译的页面版本",
+ "action-pagetranslation": "管理可翻译页面",
+ "tps-edit-sourcepage-text": "你正在编辑一个翻译原文页。请您确保对下面的文档非常熟悉:\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text 更改源文本]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/Page_translation_administration#Markup_examples 标记使用示例]",
+ "tps-edit-sourcepage-ve-warning-title": "警告:不支持的页面",
+ "tps-edit-sourcepage-ve-warning-text": "你正在编辑一个可翻译页面。使用此编辑器编辑本页面尚未获得官方支持。请使用源代码编辑器编辑。",
+ "tps-edit-sourcepage-ve-warning-button": "好",
+ "tpt-section": "翻译单元$1",
+ "tpt-section-new": "新翻译单元。名字:$1",
+ "tpt-section-deleted": "翻译单元$1",
+ "tpt-diff-old": "上一版本文字",
+ "tpt-diff-new": "下一版本文字",
+ "tpt-submit": "标记此版本进行翻译",
+ "tpt-sections-oldnew": "新的和现存的翻译单元",
+ "tpt-sections-deleted": "已删除的翻译模块",
+ "tpt-sections-template": "翻译页面模版",
+ "tpt-action-nofuzzy": "不要使翻译作废",
+ "tpt-badtitle": "页面名称($1)不是一个有效的标题",
+ "tpt-nosuchpage": "页面$1不存在。",
+ "tpt-oldrevision": "$2 不是页面 [[:$1]] 的最新版本。只有最新版本可以标记进行翻译。",
+ "tpt-notsuitable": "页面 $1 不适合翻译。\n请确保它包含 $2 标签且语法有效。",
+ "tpt-saveok": "页面[[:$1]]已被标记将进行翻译,共有$2个{{PLURAL:$2|翻译单位}}。\n现在可以<span class=\"plainlinks\">[$3 翻译]</span>页面。",
+ "tpt-saveok-first": "您可以[[Special:PageMigration|导入这个页面的已有翻译]](如果有的话)。",
+ "tpt-offer-notify": "您可以<span class=\"plainlinks\">[$1 通告关于此页面的翻译]</span>。",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|查看可翻译页面列表。]]",
+ "tpt-showpage-intro": "以下列出新建、现存及已删除的翻译单元。\n在标记此版本进行翻译之前,请检查对翻译单元的改动是否最小,以避免给译者带来不必要的工作。",
+ "tpt-mark-summary": "标记此版本进行翻译",
+ "tpt-mark-nochanges": "没有要复核的更改。将此页面标记翻译将既不会编辑页面,又不会编辑任何现有翻译单元。",
+ "tpt-edit-failed": "无法更新该页面:$1",
+ "tpt-duplicate": "翻译单位名称$1已被使用超过一次。",
+ "tpt-invalid": "翻译单元名称$1不得包含下划线或斜线。",
+ "tpt-unmarked": "页面[[:$1]]不再被标记进行翻译。",
+ "tpt-list-nopages": "没有被标记进行翻译或者准备被标记进行翻译的页面。",
+ "tpt-new-pages-title": "提议翻译的页面",
+ "tpt-old-pages-title": "正在翻译的页面",
+ "tpt-other-pages-title": "受损页面",
+ "tpt-outdated-pages-title": "有待定更改的页面",
+ "tpt-new-pages": "以下$1个页面包含具有翻译标记的文本,但没有被标记进行翻译的版本。",
+ "tpt-old-pages": "以下{{PLURAL:$1|此|这些}}页面有被标记进行翻译的最新版本。",
+ "tpt-other-pages": "{{PLURAL:$1|此|这些}}页面的旧版本被标记翻译,但最新版本不能标记翻译。",
+ "tpt-outdated-pages": "{{PLURAL:$1|此页面有|这些页面有}}未标记为翻译的更改。",
+ "tpt-tag-discouraged": "不建议",
+ "tpt-tag-oldsyntax": "旧的语法",
+ "tpt-tag-no-transclusion-support": "未支持嵌入",
+ "tpt-select-prioritylangs": "以逗号分隔的优先语言代码列表",
+ "tpt-select-prioritylangs-force": "不允许向优先语言以外的语言翻译",
+ "tpt-select-prioritylangs-reason": "原因:",
+ "tpt-sections-prioritylangs": "优先语言",
+ "tpt-sections-syntaxversion": "语法版本",
+ "tpt-syntaxversion-text": "本页面当前使用旧版本的可翻译页面源代码语法。新版本将用HTML标记包装未翻译的部分,以指示文本的正确语言。例如:$1。您可以使用新的标记语法$2来防止在不合适的地方进行任何类型的换行,例如在翻译元素的<code>title</code>属性时。不可能回到旧的语法版本。",
+ "tpt-syntaxversion-label": "为此页面使用新语法版本",
+ "tpt-transclusion": "模板嵌入",
+ "tpt-transclusion-label": "为该页面启用翻译感知嵌入",
+ "tpt-rev-mark": "标记进行翻译",
+ "tpt-rev-unmark": "从翻译中删除",
+ "tpt-rev-discourage": "不建议",
+ "tpt-rev-encourage": "恢复",
+ "tpt-rev-mark-tooltip": "标记本页的最新版本进行翻译。",
+ "tpt-rev-unmark-tooltip": "从翻译中移除此页面。",
+ "tpt-rev-discourage-tooltip": "不要再进一步翻译此页。",
+ "tpt-rev-encourage-tooltip": "将此页面恢复正常翻译模式。",
+ "translate-tag-translate-link-desc": "翻译本页",
+ "translate-tag-markthis": "标记此页面以备翻译",
+ "translate-tag-markthisagain": "此页面自从最近被<span class=\"plainlinks\">[$2 标记翻译]</span>以来已有<span class=\"plainlinks\">[$1 更改]</span>。",
+ "translate-tag-hasnew": "此页面有未被标记进行翻译的<span class=\"plainlinks\">[$1 更改]</span>。",
+ "tpt-translation-intro": "本页是页面[[$2]]的<span class=\"plainlinks\">[$1 翻译版本]</span>,翻译工作已完成$3%。",
+ "tpt-translation-intro-fuzzy": "过时的翻译将会这样标记。",
+ "tpt-languages-legend": "其他语言:",
+ "tpt-languages-zero": "开始这种语言的翻译",
+ "tpt-languages-nonzero": "$1($2%已翻译)",
+ "tpt-tab-translate": "翻译",
+ "tpt-target-page": "本页面无法手动更新。本页面是[[$1]]页面的翻译版,可以使用[$2 翻译工具]来更新该翻译。",
+ "tpt-unknown-page": "此命名空间为内容页面翻译保留。\n您尝试编辑的页面似乎没有对应任何被标记进行翻译的页面。",
+ "tpt-translation-restricted": "此页面到这种语言的翻译,已被翻译管理员禁止。\n\n原因:$1",
+ "tpt-translation-restricted-no-reason": "翻译管理员已阻止将此页面翻译成该语言。",
+ "tpt-discouraged-language-force-header": "此页面不能翻译成$1。",
+ "tpt-discouraged-language-force-content": "翻译管理员决定此页面只能翻译成$1。",
+ "tpt-discouraged-language-header": "此页面不应优先翻译成$1。",
+ "tpt-discouraged-language-content": "一位翻译管理员决定将翻译工作的重点放在$1。",
+ "tpt-discouraged-language-force": "<strong>此页面不能翻译到$2。</strong>\n\n一名翻译管理员已决定,此页面仅可以翻译为$3。",
+ "tpt-priority-languages": "翻译管理员已将该组需优先翻译的语言设为$1。",
+ "tpt-priority-languages-force": "翻译管理员已将此组的优先语言设置为$1。不允许翻译成其他语言。",
+ "tpt-discouraged-translation-header": "不鼓励翻译此页面",
+ "tpt-discouraged-translation-content": "翻译管理员不鼓励此页面。您仍可以翻译此页面,但翻译结果可能没有太大用处。",
+ "tpt-render-summary": "更新以匹配源页面内容的新版本",
+ "aggregategroups": "聚合组",
+ "tpt-aggregategroup-add": "添加",
+ "tpt-aggregategroup-save": "保存",
+ "tpt-aggregategroup-close": "关闭",
+ "tpt-aggregategroup-add-new": "添加新的聚合组",
+ "tpt-aggregategroup-new-name": "名称:",
+ "tpt-aggregategroup-new-description": "说明(可选):",
+ "tpt-aggregategroup-remove-confirm": "确实要删除此聚合组吗?",
+ "tpt-aggregategroup-invalid-group": "组别不存在",
+ "tpt-aggregategroup-edit-name": "名称:",
+ "tpt-aggregategroup-edit-description": "说明:",
+ "tpt-aggregategroup-update": "保存",
+ "tpt-aggregategroup-update-cancel": "取消",
+ "tpt-aggregategroup-expand-all-groups": "展开所有组",
+ "tpt-aggregategroup-collapse-all-groups": "收起所有组",
+ "tpt-aggregategroup-expand-group": "展开组",
+ "tpt-aggregategroup-collapse-group": "收起组",
+ "tpt-invalid-group": "无效组",
+ "pt-parse-open": "&lt;translate>标签不平衡。\n翻译模板:<pre>$1</pre>",
+ "pt-parse-close": "&lt;/translate>标签不平衡。\n翻译模板:<pre>$1</pre>",
+ "pt-parse-nested": "不允许嵌套&lt;translate>翻译单元。\n标签文本:<pre>$1</pre>",
+ "pt-shake-multiple": "单一翻译单元含多个翻译单元标记。\n确保翻译单元由空白行分隔。\n翻译单元文本:<pre>$1</pre>",
+ "pt-shake-position": "翻译单元标记在意外位置。翻译单元文本:<pre>$1</pre>",
+ "pt-shake-empty": "为“$1”的翻译单位标记是空的。",
+ "log-description-pagetranslation": "页面翻译系统的对应活动日志",
+ "log-name-pagetranslation": "页面翻译日志",
+ "logentry-pagetranslation-mark": "$1将$3{{GENDER:$2|标记为}}需要翻译",
+ "logentry-pagetranslation-unmark": "$1将$3从翻译系统中{{GENDER:$2|移除}}",
+ "logentry-pagetranslation-moveok": "$1{{GENDER:$2|完成了}}翻译页面$3到$4的重命名",
+ "logentry-pagetranslation-movenok": "$1在移动页面$3到$4时{{GENDER:$2|遇到了}}一个问题",
+ "logentry-pagetranslation-deletefok": "$1{{GENDER:$2|完成了}}翻译页面$3的删除",
+ "logentry-pagetranslation-deletefnok": "$1删除属于翻译页面$4的$3{{GENDER:$2|失败}}",
+ "logentry-pagetranslation-deletelok": "$1{{GENDER:$2|完成了}}翻译页面$3的删除",
+ "logentry-pagetranslation-deletelnok": "$1删除属于翻译页面$4的$3{{GENDER:$2|失败}}",
+ "logentry-pagetranslation-encourage": "$1{{GENDER:$2|鼓励}}翻译$3",
+ "logentry-pagetranslation-discourage": "$1{{GENDER:$2|不鼓励}}翻译$3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1已从翻译的页面$3的优先语言中被{{GENDER:$2|移除}}",
+ "logentry-pagetranslation-prioritylanguages": "$1将可翻译页面$3的优先语言{{GENDER:$2|设置}}为$5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1认为$3到$5对此翻译页面的贡献{{GENDER:$2|很有限}}",
+ "logentry-pagetranslation-associate": "$1{{GENDER:$2|添加}}了可翻译页面$3至信息组$4",
+ "logentry-pagetranslation-dissociate": "$1已将可翻译页面$3从信息组$4中{{GENDER:$2|移除}}",
+ "log-action-filter-pagetranslation": "操作类型:",
+ "log-action-filter-pagetranslation-mark": "标记进行翻译",
+ "log-action-filter-pagetranslation-unmark": "从翻译中移除",
+ "log-action-filter-pagetranslation-move": "页面移动",
+ "log-action-filter-pagetranslation-delete": "页面删除",
+ "log-action-filter-pagetranslation-encourage": "翻译鼓励",
+ "log-action-filter-pagetranslation-discourage": "翻译劝阻",
+ "log-action-filter-pagetranslation-prioritylanguages": "首选语言修改",
+ "log-action-filter-pagetranslation-aggregategroups": "聚合组修改",
+ "pt-movepage-title": "移动可翻译页面“$1”",
+ "pt-movepage-blockers": "可翻译页面因下列$1错误无法移动至新名称:",
+ "pt-movepage-block-base-invalid": "可翻译的目标页面名称不是一个有效标题。",
+ "pt-movepage-block-tp-invalid": "[[:$1]]的目标翻译页面的标题无效(可能太长)。",
+ "pt-movepage-block-section-invalid": "目标页面为 “[[:$1]]” 的翻译单元可能无效(太长?)。",
+ "pt-movepage-block-subpage-invalid": "[[:$1]]的子页面标题无效(可能太长)。",
+ "pt-movepage-block-talkpage-invalid": "“[[:$1]]”的目标讨论页标题无效(可能太长)。",
+ "pt-movepage-block-unknown-page": "正在移动的页面([[:$1]])似乎不是可翻译页面的一部分。",
+ "pt-movepage-block-ns-talk-unsupported": "页面([[:$1]])正在被移动到不支持讨论页的命名空间。",
+ "pt-movepage-block-rename-failed": "为页面[[:$1]]生成新标题时出现错误",
+ "pt-movepage-list-pages": "需移动页面的列表",
+ "pt-movepage-list-translation": "翻译{{PLURAL:$1|页面|页面}}",
+ "pt-movepage-list-section": "翻译单元{{PLURAL:$1|页面}}",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|子页面}}标记为翻译",
+ "pt-movepage-list-translatable-note": "这些页面必须单独移动。",
+ "pt-movepage-list-other": "其他{{PLURAL:$1|子页面}}",
+ "pt-movepage-list-count": "共有包括$2个{{PLURAL:$2|子页面}}和$3个{{PLURAL:$3|讨论页面}}的$1个{{PLURAL:$1|页面}}要移动。",
+ "pt-movepage-page-count-limit": "这个可翻译的页面包含超过$1{{PLURAL:$1|个页面}}。已发现移动这么多页面是不可靠的。请联系系统管理员通过维护脚本执行此操作。",
+ "pt-movepage-list-no-pages": "找不到页面。",
+ "pt-movepage-legend": "移动可翻译页面",
+ "pt-movepage-current": "当前名称:",
+ "pt-movepage-new": "新名称:",
+ "pt-movepage-reason": "原因:",
+ "pt-movepage-subpages": "移动所有子页面",
+ "pt-movepage-talkpages": "移动讨论页面",
+ "pt-movepage-talkpage-exists": "(拥有讨论页)",
+ "pt-movepage-action-check": "检查是否可以移动",
+ "pt-movepage-action-perform": "确认移动",
+ "pt-movepage-action-other": "更改目标",
+ "pt-movepage-intro": "本特殊页面允许您移动被标记进行翻译的页面。此移动操作将不会一瞬间,因为有很多页面要移动。当页面移动中,不能与该页面交互。任何移动失败将在[[$1|日志]]记录,并且需要手动修理。",
+ "pt-movepage-logreason": "可翻译页面“$1”的一部分",
+ "pt-movepage-started": "请过段时间后检查[[$1|日志]]内的错误和完成消息。",
+ "pt-locked-page": "此页面已被锁定,因为可翻译页面正在移动。",
+ "pt-deletepage-lang-title": "正在删除翻译页面“$1”。",
+ "pt-deletepage-tp-title": "正在删除可翻译页面“$1”。",
+ "pt-deletepage-invalid-title": "指定的页不是有效的。",
+ "pt-deletepage-invalid-text": "指定的页面不是一个可翻译页面或一个翻译信息页面。",
+ "pt-deletepage-action-check": "要删除的列表页",
+ "pt-deletepage-action-perform": "立即删除",
+ "pt-deletepage-action-other": "更改目标",
+ "pt-deletepage-lang-legend": "删除翻译页面",
+ "pt-deletepage-tp-legend": "删除可翻译页面",
+ "pt-deletepage-any-legend": "删除可翻译页面或翻译页面",
+ "pt-deletepage-current": "页面名称:",
+ "pt-deletepage-reason": "原因:",
+ "pt-deletepage-reason-details": "其他/更多原因",
+ "pt-deletepage-reason-other": "其他原因",
+ "pt-deletepage-subpages": "删除所有子页面",
+ "pt-deletepage-list-pages": "若要删除的页面列表",
+ "pt-deletepage-list-translation": "翻译页面",
+ "pt-deletepage-list-section": "翻译单元页面",
+ "pt-deletepage-list-other": "其他子页面",
+ "pt-deletepage-list-count": "共删除$1个{{PLURAL:$1|页面}}及$2个{{PLURAL:$2|子页面}}。",
+ "pt-deletepage-list-no-pages": "找不到页面。",
+ "pt-deletepage-full-logreason": "可翻译页面“$1”的一部分",
+ "pt-deletepage-lang-logreason": "翻译页面“$1”的一部分",
+ "pt-deletepage-started": "请检查[[$1|日志]]内的错误和完成消息。",
+ "pt-deletepage-intro": "本特殊页面允许您删除一种语言中一整个可翻译页面或单个翻译页面。\n因为所有相关页会一并删除,此操作不会即时完成。\n失败操作记录于[[Special:Log/pagetranslation|页面翻译日志]]中并且需要手动修理。",
+ "pagemigration": "翻译页面迁移",
+ "pagemigration-summary": "指定翻译页面并恢复翻译系统启用前做出的任何翻译。",
+ "pm-import-button-label": "导入",
+ "pm-savepages-button-label": "保存",
+ "pm-cancel-button-label": "取消",
+ "pm-page-does-not-exist": "$1不存在",
+ "pm-old-translations-missing": "$1没有旧翻译",
+ "pm-extra-units-warning": "提供的单位可能有误。请正确匹配翻译单位和源单位。",
+ "pm-pagename-missing": "请输入页面名称",
+ "pm-add-icon-hover-text": "往下面添加单位",
+ "pm-swap-icon-hover-text": "和下面的单位替换",
+ "pm-delete-icon-hover-text": "删除单位",
+ "pm-pagetitle-placeholder": "输入页面标题",
+ "pm-pagetitle-invalid": "页面迁移仅适用于翻译页面,例如“Page/de”。提供的标题不是翻译页面。",
+ "pm-pagetitle-missing": "请输入页面标题。",
+ "pm-langcode-missing": "页面迁移仅适用于翻译页面,例如“Page/de”。提供的标题不是翻译页面。",
+ "pm-summary-import": "已通过[[Special:PageMigration|页面迁移]]导入翻译",
+ "pm-on-import-message-text": "旧翻译已被导入。使用添加、交换和删除选项以调整翻译单元,并点击“{{int:pm-savepages-button-label}}”按钮添加它们。点击“{{int:pm-cancel-button-label}}”按钮丢弃。",
+ "pm-on-save-message-text": "翻译单元以保存。您现在可以输入新翻译页面的标题以迁移它,或在下方对单元做出更改并保存新版本。",
+ "pm-pagetitle-not-translatable": "$1不是一个可翻译页面的一部分。",
+ "pm-translation-unit-fetch-failed": "获取页面的翻译单元时出错。",
+ "tpt-translate-title": "允许页面标题的翻译",
+ "pp-save-summary": "准备翻译的页面",
+ "pagepreparation": "准备翻译的页面",
+ "pagepreparation-summary": "指定页面标题以准备翻译。",
+ "pp-pagename-placeholder": "输入页面名称",
+ "pp-prepare-button-label": "准备",
+ "pp-save-button-label": "发布",
+ "pp-cancel-button-label": "取消",
+ "pp-save-message": "此页面已发布。您可[$1 编辑]它。",
+ "pp-prepare-message": "此页面已准备翻译。请参见下面的差异。点击“{{int:pp-save-button-label}}”以确定。",
+ "pp-already-prepared-message": "看起来页面已经准备翻译。没有与之前版本比较的更改。",
+ "pp-diff-error": "从服务器获取差异时出错。",
+ "pp-pagename-missing": "请输入页面名。",
+ "pp-diff-old-header": "源文本",
+ "pp-diff-new-header": "准备好的文本",
+ "tpt-unlink-confirm": "请确认您真的希望从翻译系统移除此页面。语言选择器和翻译页面名将停止工作。翻译页面将可编辑。",
+ "tpt-unlink-button": "从翻译中移除",
+ "tpt-unlink-summary": "从翻译中移除页面",
+ "tpt-generic-confirm": "请确认操作。",
+ "tpt-generic-button": "确认",
+ "tpt-validation-not-insertable": "翻译变量名称“$1”在翻译界面中不能作为一个可插入变量。避免使用特殊字符。",
+ "tpt-validation-name-reuse": "翻译变量“$1”被多次定义为不同的内容。将变量名称更改为在翻译单元中是唯一的。",
+ "visualeditor-annotations-translate-start": "翻译内容的开始",
+ "visualeditor-annotations-translate-end": "翻译内容的结尾",
+ "visualeditor-annotations-translate-description": "此范围内的内容被标记为可翻译。请确保您遵循[https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Changing_the_source_text 更改源文本]的相关守则。",
+ "visualeditor-annotations-tvar-start": "不可翻译内容的开始",
+ "visualeditor-annotations-tvar-end": "不可翻译内容的结尾",
+ "visualeditor-annotations-tvar-description": "此范围内的内容被标记为不可翻译。请参考[https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration#Segmentation 源文本的分割]这一文档以获取更多信息。"
+}
diff --git a/Translate/i18n/pagetranslation/zh-hant.json b/Translate/i18n/pagetranslation/zh-hant.json
new file mode 100644
index 00000000..f3f0f311
--- /dev/null
+++ b/Translate/i18n/pagetranslation/zh-hant.json
@@ -0,0 +1,243 @@
+{
+ "@metadata": {
+ "authors": [
+ "A2093064",
+ "Alexsh",
+ "Anakmalaysia",
+ "Bowleerin",
+ "Cwlin0416",
+ "Kly",
+ "LNDDYL",
+ "Liangent",
+ "Liuxinyu970226",
+ "LuciferianThomas",
+ "Mark85296341",
+ "Pseudo Classes",
+ "Shirayuki",
+ "Simon Shek",
+ "TianyinLee",
+ "Waihorace",
+ "Winston Sung",
+ "Wrightbus",
+ "Wwycheuk",
+ "Xiplus",
+ "Zhxy 519"
+ ]
+ },
+ "pagetranslation": "頁面翻譯",
+ "right-pagetranslation": "標記需要翻譯的頁面版本",
+ "action-pagetranslation": "管理可翻譯頁面",
+ "tps-edit-sourcepage-text": "您正在編輯來源翻譯頁面。請確認您有熟悉以下文件內容:\n\n* [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration/zh#%E6%9B%B4%E6%94%B9%E6%BA%90%E6%96%87%E6%9C%AC 更改來源文字] \n* [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration/zh#%E5%B5%8C%E5%85%A5%E9%83%A8%E5%88%86%E7%A4%BA%E4%BE%8B 使用嵌入的範例]",
+ "tps-edit-sourcepage-ve-warning-title": "警告:不支援的頁面",
+ "tps-edit-sourcepage-ve-warning-text": "您正在編輯可翻譯的頁面,目前尚不支援在此編輯器裡編輯這些內容。請使用原始碼編輯器。",
+ "tps-edit-sourcepage-ve-warning-button": "確定",
+ "tpt-section": "翻譯單元 $1",
+ "tpt-section-new": "新翻譯單元。\n名稱:$1",
+ "tpt-section-deleted": "翻譯單元 $1",
+ "tpt-diff-old": "上個文字",
+ "tpt-diff-new": "新的文字",
+ "tpt-submit": "標記此版本需要翻譯",
+ "tpt-sections-oldnew": "新的和現有的翻譯單元",
+ "tpt-sections-deleted": "已刪除的翻譯單元",
+ "tpt-sections-template": "翻譯頁面模板",
+ "tpt-action-nofuzzy": "不要作廢翻譯",
+ "tpt-badtitle": "頁面名稱 ($1) 不是一個有效的標題",
+ "tpt-nosuchpage": "頁面 $1 不存在。",
+ "tpt-oldrevision": "$2 不是頁面 [[:$1]] 的最新版本。\n僅可標記最新版本的頁面需要翻譯。",
+ "tpt-notsuitable": "頁面 $1 不適合翻譯。\n請確定該頁面擁有 <nowiki><translate></nowiki> 標籤,且使用有效的語法。",
+ "tpt-saveok": "頁面 [[:$1]] 已被標記需要翻譯,包含 $2 個翻譯單元。\n現在已可 <span class=\"plainlinks\">[$3 翻譯]</span> 頁面。",
+ "tpt-saveok-first": "您可以替此頁面[[Special:PageMigration|匯入先前存在的翻譯]](如果有的話)。",
+ "tpt-offer-notify": "您可以 <span class=\"plainlinks\">[$1 通知翻譯人員]</span> 翻譯此頁。",
+ "tpt-list-pages-in-translations": "[[Special:PageTranslation|檢視可翻譯頁面清單。]]",
+ "tpt-showpage-intro": "下列為新的,已存在與已刪除的翻譯單元。\n在將此版本標記為需要翻譯之前,請先檢查翻譯單元已最小化,避免翻譯人員不必要的作業。",
+ "tpt-mark-summary": "已標記此版本用來翻譯",
+ "tpt-mark-nochanges": "沒有變更需要審查。標記此頁面需要翻譯不會編輯頁面,也沒有任何現有的翻譯單元。",
+ "tpt-edit-failed": "無法更新該頁面:$1",
+ "tpt-duplicate": "翻譯單元名稱 $1 已被使用超過一次。",
+ "tpt-invalid": "翻譯單位名稱$1不能包含底線或斜線。",
+ "tpt-unmarked": "頁面[[:$1]]已不標記用來翻譯。",
+ "tpt-list-nopages": "沒有頁面已標記需要翻譯或等待標記需要翻譯。",
+ "tpt-new-pages-title": "建議翻譯的頁面",
+ "tpt-old-pages-title": "正在翻譯的頁面",
+ "tpt-other-pages-title": "損壞的頁面",
+ "tpt-outdated-pages-title": "有待定更改的頁面",
+ "tpt-new-pages": "下列{{PLURAL:$1|頁面|頁面}}內容包含需要翻譯的標籤,\n但{{PLURAL:$1|頁面|頁面}}中目前沒有任何標記需要翻譯的版本。",
+ "tpt-old-pages": "{{PLURAL:$1|此頁面|這些頁面}}的最新版本已標記為需要翻譯。",
+ "tpt-other-pages": "下列頁面已標記需要翻譯的{{PLURAL:$1|版本|版本}}為舊版,\n最新的{{PLURAL:$1|版本|版本}}無法標記用來翻譯。",
+ "tpt-outdated-pages": "{{PLURAL:$1|此頁面|這些頁面}}有未被標記為需要翻譯的更改",
+ "tpt-tag-discouraged": "不建議",
+ "tpt-tag-oldsyntax": "舊語法",
+ "tpt-tag-no-transclusion-support": "不支援內嵌",
+ "tpt-select-prioritylangs": "優先語言代碼 (以逗號分隔):",
+ "tpt-select-prioritylangs-force": "防止翻譯成優先語言以外的語言",
+ "tpt-select-prioritylangs-reason": "原因:",
+ "tpt-sections-prioritylangs": "優先語言",
+ "tpt-sections-syntaxversion": "語法版本",
+ "tpt-syntaxversion-text": "此頁面目前使用可翻譯頁面來源語法的舊版本。新版本會包住帶有 HTML 標籤的未翻譯段落,來指示出文字上的正確語言。例如:$1。您可以使用新標記語法$2來防止在不恰當地方做出這樣的動作,例如像是在翻譯帶有 <code>title</code> 屬性的元素。但請留意這樣做會無法返回到舊語法版本。",
+ "tpt-syntaxversion-label": "使用此頁面的最新語法版本",
+ "tpt-transclusion": "模板內嵌",
+ "tpt-transclusion-label": "為該頁面啟用翻譯感知嵌入",
+ "tpt-rev-mark": "標記需要翻譯",
+ "tpt-rev-unmark": "從翻譯中刪除",
+ "tpt-rev-discourage": "不建議",
+ "tpt-rev-encourage": "還原",
+ "tpt-rev-mark-tooltip": "標記此頁面的最新版本需要翻譯。",
+ "tpt-rev-unmark-tooltip": "從翻譯中刪除此頁面。",
+ "tpt-rev-discourage-tooltip": "不建議翻譯此頁面。",
+ "tpt-rev-encourage-tooltip": "還原此頁面為一般翻譯。",
+ "translate-tag-translate-link-desc": "翻譯此頁面",
+ "translate-tag-markthis": "標記此頁面需要翻譯",
+ "translate-tag-markthisagain": "此頁面在<span class=\"plainlinks\">[$2 標記需要翻譯]</span>之後,已有<span class=\"plainlinks\">[$1 變更]</span>。",
+ "translate-tag-hasnew": "此頁面包含未被標記用來翻譯的<span class=\"plainlinks\">[$1 變更]</span>。",
+ "tpt-translation-intro": "此頁面為頁面[[$2]]的<span class=\"plainlinks\">[$1 翻譯版本]</span>,翻譯完成進度為$3%。",
+ "tpt-translation-intro-fuzzy": "過時的翻譯將會這樣標記。",
+ "tpt-languages-legend": "其他語言:",
+ "tpt-languages-zero": "開始翻譯此語言",
+ "tpt-languages-nonzero": "$1(已翻譯$2%)",
+ "tpt-tab-translate": "翻譯",
+ "tpt-target-page": "此頁面無法手動更新。此頁面是頁面[[$1]]的翻譯版本,翻譯可使用[$2 翻譯工具]更新。",
+ "tpt-unknown-page": "此命名空間是保留給內容頁面翻譯使用。\n您嘗試編輯的頁面似乎不對應被標記需要翻譯的頁面。",
+ "tpt-translation-restricted": "將這個頁面翻譯成此語言已被翻譯管理員禁止。\n\n原因:$1",
+ "tpt-translation-restricted-no-reason": "將這個頁面翻譯成此語言已被翻譯管理員禁止。",
+ "tpt-discouraged-language-force-header": "此頁面無法翻譯為 $1。",
+ "tpt-discouraged-language-force-content": "翻譯管理員決定只將此頁面翻譯為 $1。",
+ "tpt-discouraged-language-header": "翻譯為 $1 並非此頁面優先的工作。",
+ "tpt-discouraged-language-content": "翻譯管理員決定全力將此頁面翻譯為 $1。",
+ "tpt-discouraged-language-force": "<strong>此頁面不能翻譯為 $2。</strong>\n\n翻譯管理員決定只將此頁面翻譯為 $3。",
+ "tpt-priority-languages": "翻譯管理員已將此群組的優先語言設為 $1。",
+ "tpt-priority-languages-force": "翻譯管理員已設定此群組的屬性語言成$1,不允許翻譯成其它語言。",
+ "tpt-render-summary": "正在更新來源頁面以與新版本相符",
+ "aggregategroups": "集合群組",
+ "tpt-aggregategroup-add": "新增",
+ "tpt-aggregategroup-save": "儲存",
+ "tpt-aggregategroup-add-new": "新增集合群組",
+ "tpt-aggregategroup-new-name": "名稱:",
+ "tpt-aggregategroup-new-description": "描述 (選填):",
+ "tpt-aggregategroup-remove-confirm": "確實要刪除此集合群組嗎?",
+ "tpt-aggregategroup-invalid-group": "群組不存在",
+ "tpt-aggregategroup-edit-name": "名稱:",
+ "tpt-aggregategroup-edit-description": "描述:",
+ "tpt-aggregategroup-update": "儲存",
+ "tpt-aggregategroup-update-cancel": "取消",
+ "tpt-invalid-group": "無效的群組",
+ "pt-parse-open": "&lt;translate> 標籤不對稱。\n翻譯模板:<pre>$1</pre>",
+ "pt-parse-close": "&lt;/translate> 標籤不對稱。\n翻譯模板:<pre>$1</pre>",
+ "pt-parse-nested": "不允許巢狀 &lt;translate> 翻譯單元。\n標籤內容:<pre>$1</pre>",
+ "pt-shake-multiple": "一個翻譯單元中含多個翻譯單元標記。\n請確保翻譯單元是由空白行分隔。\n翻譯單元內容:<pre>$1</pre>",
+ "pt-shake-position": "翻譯單元標記在預期之外的位置。\n翻譯單元內容:<pre>$1</pre>",
+ "pt-shake-empty": "空的翻譯單元標記 \"$1\"。",
+ "log-description-pagetranslation": "頁面翻譯系統相關的操作日誌",
+ "log-name-pagetranslation": "頁面翻譯日誌",
+ "logentry-pagetranslation-mark": "$1 {{GENDER:$2|已標記}} $3 需要翻譯",
+ "logentry-pagetranslation-unmark": "$1已從翻譯系統中{{GENDER:$2|移除}}$3",
+ "logentry-pagetranslation-moveok": "$1 {{GENDER:$2|已完成}}重新命名可翻譯頁面 $3 至 $4",
+ "logentry-pagetranslation-movenok": "$1 移動 $3 至 $4 時{{GENDER:$2|發生}}問題",
+ "logentry-pagetranslation-deletefok": "$1 {{GENDER:$2|己完成}}刪除可翻譯頁面 $3",
+ "logentry-pagetranslation-deletefnok": "$1 刪除可翻譯頁面 $4 的 $3 {{GENDER:$2|失敗}}",
+ "logentry-pagetranslation-deletelok": "$1 {{GENDER:$2|已完成}}刪除可翻譯頁面 $3",
+ "logentry-pagetranslation-deletelnok": "$1 刪除可翻譯頁面 $4 的 $3 {{GENDER:$2|失敗}}",
+ "logentry-pagetranslation-encourage": "$1 {{GENDER:$2|建議}}翻譯 $3",
+ "logentry-pagetranslation-discourage": "$1 {{GENDER:$2|不建議}}翻譯 $3",
+ "logentry-pagetranslation-prioritylanguages-unset": "$1 {{GENDER:$2|移除}}可翻譯頁面 $3 的優先語言",
+ "logentry-pagetranslation-prioritylanguages": "$1 {{GENDER:$2|設定}}可翻譯頁面 $3 的優先語言為 $5",
+ "logentry-pagetranslation-prioritylanguages-force": "$1 {{GENDER:$2|限制}}可翻譯頁面 $3 的語言為 $5",
+ "logentry-pagetranslation-associate": "$1 {{GENDER:$2|已增加}}可翻譯頁面 $3 到集合群組 $4",
+ "logentry-pagetranslation-dissociate": "$1 已從集合群組 $4 中{{GENDER:$2|移除}}可翻譯頁面 $3",
+ "log-action-filter-pagetranslation": "動作類型:",
+ "log-action-filter-pagetranslation-mark": "標記需要翻譯",
+ "log-action-filter-pagetranslation-unmark": "從翻譯中移除",
+ "log-action-filter-pagetranslation-move": "頁面移動",
+ "log-action-filter-pagetranslation-delete": "頁面刪除",
+ "log-action-filter-pagetranslation-encourage": "鼓勵翻譯",
+ "log-action-filter-pagetranslation-discourage": "不鼓勵翻譯",
+ "log-action-filter-pagetranslation-prioritylanguages": "優先語言修改",
+ "log-action-filter-pagetranslation-aggregategroups": "集合群組修改",
+ "pt-movepage-title": "移動可翻譯頁面 \"$1\"",
+ "pt-movepage-blockers": "可翻譯頁面無法移動至新的名稱,由於下列{{PLURAL:$1|錯誤|錯誤}}:",
+ "pt-movepage-block-base-invalid": "目標可翻譯頁面標題名稱無效。",
+ "pt-movepage-block-tp-invalid": "目標可翻譯頁面 \"[[:$1]]\" 的標題無效 (可能過長)。",
+ "pt-movepage-block-section-invalid": "翻譯單元的目標頁面 \"[[:$1]]\" 標題無效 (可能過長)。",
+ "pt-movepage-block-subpage-invalid": "目標子頁面 \"[[:$1]]\" 的標題無效 (可能過長)。",
+ "pt-movepage-list-pages": "要移動的頁面清單",
+ "pt-movepage-list-translation": "翻譯{{PLURAL:$1|頁面|頁面}}",
+ "pt-movepage-list-section": "翻譯單元{{PLURAL:$1|頁面}}",
+ "pt-movepage-list-translatable": "{{PLURAL:$1|子頁面|子頁面}}標記為翻譯",
+ "pt-movepage-list-translatable-note": "這些頁面必須分別移動。",
+ "pt-movepage-list-other": "其它{{PLURAL:$1|子頁面|子頁面}}",
+ "pt-movepage-list-count": "共 $1 個{{PLURAL:$1|頁面}}與 $2 個{{PLURAL:$2|子頁面}}要移動。",
+ "pt-movepage-list-no-pages": "找不到頁面。",
+ "pt-movepage-legend": "移動可翻譯頁面",
+ "pt-movepage-current": "目前名稱:",
+ "pt-movepage-new": "新的名稱:",
+ "pt-movepage-reason": "原因:",
+ "pt-movepage-subpages": "移動所有子頁面",
+ "pt-movepage-action-check": "檢查是否可移動",
+ "pt-movepage-action-perform": "確認移動",
+ "pt-movepage-action-other": "變更目標",
+ "pt-movepage-intro": "此特殊頁面允許您移動已標記需要翻譯的頁面,\n由於有許多頁面要移動,移動的操作不是即時的。\n在移動頁面的過程無法即時處理有問題的的頁面,\n任何移動失敗會記錄在 [[Special:Log/pagetranslation|頁面翻譯日誌]],並需要手動修復。",
+ "pt-movepage-logreason": "可翻譯頁面 \"$1\" 的部分",
+ "pt-movepage-started": "請檢查 [[Special:Log/pagetranslation|頁面翻譯日誌]] 內的錯誤和完成訊息。",
+ "pt-locked-page": "因可翻譯頁面正在移動,此頁面已鎖定。",
+ "pt-deletepage-lang-title": "刪除翻譯頁面 \"$1\"",
+ "pt-deletepage-tp-title": "刪除可翻譯頁面 \"$1\"",
+ "pt-deletepage-invalid-title": "指定的頁面無效。",
+ "pt-deletepage-invalid-text": "指定的頁面不是可翻譯頁面或翻譯頁面。",
+ "pt-deletepage-action-check": "要刪除的頁面清單",
+ "pt-deletepage-action-perform": "確認刪除",
+ "pt-deletepage-action-other": "變更目標",
+ "pt-deletepage-lang-legend": "刪除翻譯頁面",
+ "pt-deletepage-tp-legend": "刪除可翻譯頁面",
+ "pt-deletepage-any-legend": "刪除可翻譯頁面或翻譯頁面",
+ "pt-deletepage-current": "頁面名稱:",
+ "pt-deletepage-reason": "原因:",
+ "pt-deletepage-subpages": "刪除所有子頁面",
+ "pt-deletepage-list-pages": "要刪除的頁面清單",
+ "pt-deletepage-list-translation": "翻譯網頁",
+ "pt-deletepage-list-section": "翻譯單元頁面",
+ "pt-deletepage-list-other": "其他子頁面",
+ "pt-deletepage-list-count": "共 $1 個{{PLURAL:$1|頁面}}與 $2 個{{PLURAL:$2|子頁面}}要刪除。",
+ "pt-deletepage-list-no-pages": "找不到頁面。",
+ "pt-deletepage-full-logreason": "可翻譯頁面 \"$1\" 的部分",
+ "pt-deletepage-lang-logreason": "翻譯頁面 \"$1\" 的部分",
+ "pt-deletepage-started": "請檢查 [[Special:Log/pagetranslation|頁面翻譯日誌]] 內的錯誤和完成訊息。",
+ "pt-deletepage-intro": "此特殊頁面允許您刪除可翻譯頁面或特定語言的翻譯頁面。\n由於相關的頁面也要一併刪除,刪除的操作不是即時的。\n失敗的訊息會記錄在 [[Special:Log/pagetranslation|頁面翻譯日誌]],並需要手動修復。",
+ "pagemigration": "翻譯頁面遷移",
+ "pagemigration-summary": "可指定一個翻譯頁面,還原到在翻譯系統尚未啟用之前的頁面狀態。",
+ "pm-import-button-label": "匯入",
+ "pm-savepages-button-label": "儲存",
+ "pm-cancel-button-label": "取消",
+ "pm-page-does-not-exist": "$1 不存在",
+ "pm-old-translations-missing": "$1 沒有舊的翻譯",
+ "pm-extra-units-warning": "可能存在額外的翻譯單元。請確實比對來源與翻譯單元。",
+ "pm-pagename-missing": "請輸入頁面名稱",
+ "pm-add-icon-hover-text": "新增以下單元",
+ "pm-swap-icon-hover-text": "替換以下單元",
+ "pm-delete-icon-hover-text": "刪除單元",
+ "pm-pagetitle-placeholder": "輸入頁面標題",
+ "pm-pagetitle-invalid": "請輸入一個有效的頁面標題,格式應為 <page-name>/<language-code>。",
+ "pm-pagetitle-missing": "請輸入頁面標題。",
+ "pm-langcode-missing": "標題似乎缺少語言代碼,請使用 <page-name>/<language-code> 格式輸入頁面標題。",
+ "pm-summary-import": "已使用 [[Special:PageMigration|頁面遷移]] 匯入翻譯",
+ "pm-on-import-message-text": "已匯入舊的翻譯,使用加入、交換與刪除選項來調整翻譯單元然後點選 \"{{int:pm-savepages-button-label}}\" 按鈕儲存。要放棄請點選 \"{{int:pm-cancel-button-label}}\" 按鈕。",
+ "pm-on-save-message-text": "已儲存翻譯單元。您可以輸入新翻譯頁面的標題來遷移該頁面,或更改以方單元然後儲存為一個新的修訂。",
+ "tpt-translate-title": "允許翻譯頁面標題",
+ "pp-save-summary": "已準備好等候翻譯的頁面",
+ "pagepreparation": "準備翻譯用頁面",
+ "pagepreparation-summary": "指定準備翻譯的頁面標題。",
+ "pp-pagename-placeholder": "輸入頁面名稱",
+ "pp-prepare-button-label": "準備",
+ "pp-save-button-label": "發布",
+ "pp-cancel-button-label": "取消",
+ "pp-save-message": "頁面已發布。 您可 [$1] 編輯該頁面。",
+ "pp-prepare-message": "該頁面已準備好等候翻譯。 請參考下方差異。 點選 \"{{int:pp-save-button-label}}\" 確認!",
+ "pp-already-prepared-message": "該頁面似乎已準備好等候翻譯,但與先前的版本無任何差異。",
+ "pp-diff-error": "從伺服器上擷取差異時發生錯誤。",
+ "pp-pagename-missing": "請輸入頁面名稱。",
+ "pp-diff-old-header": "來源內容",
+ "pp-diff-new-header": "準備好的內容",
+ "tpt-unlink-confirm": "請確認您真的希望自翻譯系統移除此頁面。\n該語言選擇器與已翻譯的頁面名稱將會停止運作。\n該翻譯頁面將會變成可編輯。",
+ "tpt-unlink-button": "自翻譯移除",
+ "tpt-unlink-summary": "已自翻譯移除頁面",
+ "tpt-generic-confirm": "請確認動作。",
+ "tpt-generic-button": "確認"
+}
diff --git a/Translate/i18n/pagetranslation/zh-hk.json b/Translate/i18n/pagetranslation/zh-hk.json
new file mode 100644
index 00000000..342f31c5
--- /dev/null
+++ b/Translate/i18n/pagetranslation/zh-hk.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "LuciferianThomas"
+ ]
+ },
+ "tps-edit-sourcepage-text": "您正在編輯來源翻譯頁面。請確認您有熟悉以下文件內容:\n\n* [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration/zh#%E6%9B%B4%E6%94%B9%E6%BA%90%E6%96%87%E6%9C%AC 更改來源文字] \n* [https://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_administration/zh#%E5%B5%8C%E5%85%A5%E9%83%A8%E5%88%86%E7%A4%BA%E4%BE%8B 使用嵌入的範例]",
+ "translate-tag-markthisagain": "此頁面在<span class=\"plainlinks\">[$2 標記需要翻譯]</span>之後,已有<span class=\"plainlinks\">[$1 變更]</span>。"
+}
diff --git a/Translate/i18n/sandbox/af.json b/Translate/i18n/sandbox/af.json
new file mode 100644
index 00000000..233a3a30
--- /dev/null
+++ b/Translate/i18n/sandbox/af.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "Fwolff",
+ "Naudefj",
+ "Winstonza"
+ ]
+ },
+ "managetranslatorsandbox": "Bestuur vertaler-sandput",
+ "tsb-filter-pending": "Uitstaande versoeke",
+ "tsb-reminder-title-generic": "Voltooi u bekendstelling om 'n geverifieerde vertaler te word",
+ "tsb-reminder-content-generic": "Hallo $1,\n\nDankie dat u op {{SITENAME}} geregistreer het. As u u toesvertalings voltooi, sal die administrateurs spoedig volle regte aan u toeken.\n\nGaan asseblief na $2 om 'n paar vertalings te maak.",
+ "tsb-all-languages-button-label": "Alle tale",
+ "tsb-create-user-page": "Skep 'n basiese gebruikersblad"
+}
diff --git a/Translate/i18n/sandbox/ar.json b/Translate/i18n/sandbox/ar.json
new file mode 100644
index 00000000..69aee32f
--- /dev/null
+++ b/Translate/i18n/sandbox/ar.json
@@ -0,0 +1,55 @@
+{
+ "@metadata": {
+ "authors": [
+ "Meno25",
+ "Mido",
+ "ديفيد",
+ "محمد أحمد عبد الفتاح"
+ ]
+ },
+ "managetranslatorsandbox": "إدارة ملعب المترجم",
+ "tsb-filter-pending": "الطلبات المعلقة",
+ "tsb-reminder-title-generic": "أكمل مقدمتك لتصبح مترجما",
+ "tsb-reminder-content-generic": "مرحبا $1،\n\nشكرا للتسجيل مع {{SITENAME}}.\n\nلو أنك قمت بإكمال ترجمات التجربة الخاصة بك، فالإداريون سيمنحونك صلاحية ترجمة كاملة قريبا بعد ذلك.\n\nمن فضلك تعال وقم بالمزيد من الترجمات هنا:\n$2\n\n$3،\nطاقم {{SITENAME}}",
+ "tsb-reminder-sending": "جارٍ إرسال التذكير...",
+ "tsb-reminder-sent": "{{PLURAL:$1|أرسل $1 تذكير. الوقت: $2.|أرسل $1 تذكيرات. وقت آخر واحد: $2.}}",
+ "tsb-reminder-sent-new": "تم إرسال التذكير",
+ "tsb-reminder-failed": "إرسال التذكير فشل",
+ "tsb-email-promoted-subject": "أنت الآن مترجم في {{SITENAME}}",
+ "tsb-email-promoted-body": "مرحبا {{GENDER:$1|$1}}،\n\nمبروك! أنا تحققت من ترجمات التجربة التي قمت بها في {{SITENAME}} وأعطيتك صلاحيات مترجم كاملة.\n\nتعال إلى {{SITENAME}} للمتبعة في الترجمة الآن، وكل يوم:\n$2\n\nمرحبا، وشكرا لك لمساهماتك!\n\n{{GENDER:$3|$3}}،\nطاقم {{SITENAME}}",
+ "tsb-email-rejected-subject": "طلبك لتصبح مترجما في {{SITENAME}} تم رفضه",
+ "tsb-email-rejected-body": "مرحبا {{GENDER:$1|$1}}،\n\nشكرا لك للتقدم كمترجم في {{SITENAME}}. أنا نادم لإخبارك أني رفضت طلبك، لأن جودة ترجماتك لم تستوف المتطلبات.\n\nلو أنك تعتقد أن طلبك قد تم رفضه بالخطأ، من فضلك حاول التقدم ثانية كمترجم في {{SITENAME}}. يمكنك تسجيل الدخول هنا:\n$2\n\n{{GENDER:$3|$3}}،\nطاقم {{SITENAME}}",
+ "tsb-request-count": "$1 {{PLURAL:$1|طلب|طلبات}}",
+ "tsb-all-languages-button-label": "كل اللغات",
+ "tsb-search-requests": "طلبات البحث المعلقة",
+ "tsb-accept-button-label": "اقبل",
+ "tsb-reject-button-label": "ارفض",
+ "tsb-selected-count": "{{PLURAL:$1|$1 مستخدم مختار|$1 مستخدمون مختارون}}",
+ "tsb-older-requests": "$1 {{PLURAL:$1|طلب|طلبات}} أقدم",
+ "tsb-accept-all-button-label": "اقبل الكل",
+ "tsb-reject-all-button-label": "ارفض الكل",
+ "tsb-user-posted-a-comment": "ليس مترجما",
+ "tsb-reminder-link-text": "أرسل التذكير بالبريد الإلكتروني",
+ "tsb-didnt-make-any-translations": "لم يقم هذا المستخدم بأية ترجمة.",
+ "tsb-translations-source": "المصدر",
+ "tsb-translations-user": "ترجمات {{GENDER:$1|المستخدم|المستخدمة}}",
+ "tsb-translations-current": "الترجمات الموجودة",
+ "tsb-delete-userpage-summary": "حذف صفحة المستخدم لمستخدم في الملعب",
+ "tsb-reject-confirmation": "تم رفض {{PLURAL:$1|مستخدم|مستخدمين}}",
+ "tsb-accept-confirmation": "تم قبول {{PLURAL:$1|مستخدم|مستخدمين}}",
+ "translationstash": "مرحبا",
+ "translate-translationstash-welcome": "مرحبا {{GENDER:$1|$1}}، أنت مترجم جديد",
+ "translate-translationstash-welcome-note": "تعرف على أدوات الترجمة. ترجم بعض الرسائل واحصل على صلاحيات الترجمة الكاملة للمشاركة في مشاريعك المفضلة.",
+ "translate-translationstash-initialtranslation": "ترجمتك الابتدائية",
+ "translate-translationstash-translations": "$1 أكمل {{PLURAL:$1|ترجمة|ترجمات}}",
+ "translate-translationstash-skip-button-label": "جرب واحدة أخرى",
+ "tsb-limit-reached-title": "شكرا لترجماتك",
+ "tsb-limit-reached-body": "أنت وصلت لحد الترجمة للمترجمين الجدد.\nفريقنا سيتحقق ويرقي حسابك قريبا.\nثم ستصبح قادرا على الترجمة بدون حدود.",
+ "tsb-no-requests-from-new-users": "لا طلبات من المستخدمين الجدد",
+ "tsb-create-user-page": "أنشأ صفحة مستخدم أساسية",
+ "log-name-translatorsandbox": "سجل ملعب الترجمة",
+ "log-description-translatorsandbox": "سجل بالأفعال على مستخدمي ملعب الترجمة",
+ "logentry-translatorsandbox-promoted": "{{GENDER:$2|رقى|رقت}} $1 $3 {{GENDER:$4|لمترجم|لمترجمة}}",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|رفض|رفضت}} الطلب من \"$3\" ليكون مترجما",
+ "logentry-newusers-tsbpromoted": "حساب المستخدم $3 تم {{GENDER:$2|إنشاؤه}} بواسطة الترقية من الملعب"
+}
diff --git a/Translate/i18n/sandbox/ast.json b/Translate/i18n/sandbox/ast.json
new file mode 100644
index 00000000..796c4341
--- /dev/null
+++ b/Translate/i18n/sandbox/ast.json
@@ -0,0 +1,52 @@
+{
+ "@metadata": {
+ "authors": [
+ "Xuacu"
+ ]
+ },
+ "managetranslatorsandbox": "Alministrar la zona de pruebas de los traductores",
+ "tsb-filter-pending": "Solicitúes pendientes",
+ "tsb-reminder-title-generic": "Complete la so presentación pa convertise'n traductor",
+ "tsb-reminder-content-generic": "Bones, $1:\n\nGracies por rexistrase'n {{SITENAME}}.\n\nSi completa les traducciones\nde prueba, Los alministradores pronto darán-y permisu de traducción\ncompletu.\n\nPor favor, vuelva a $2 y faiga delles traducciones más equí: $2\n\n$3, equipu de {{SITENAME}}",
+ "tsb-reminder-sending": "Unviando'l recordatoriu...",
+ "tsb-reminder-sent": "{{PLURAL:$1|Unviáu $1 recordatoriu. Hora: $2.|Unviaos $1 recordatorios. Hora del últimu: $2.}}",
+ "tsb-reminder-sent-new": "Unviar un recordatoriu",
+ "tsb-reminder-failed": "Falló unviar un recordatoriu",
+ "tsb-email-promoted-subject": "Agora yá ye traductor en {{SITENAME}}",
+ "tsb-email-promoted-body": "Hola {{GENDER:$1|$1}},\n\n¡Norabona! Vengo de revisar les traducciones de prueba que ficisti en {{SITENAME}} y dite permisu completu de traductor.\n\nVen a {{SITENAME}} pa siguir traduciendo, agora y cada día:\n$2\n\n¡{{GENDER:$1|Bienveníu|Bienvenida}}, y gracies poles tos collaboraciones!\n\n{{GENDER:$3|$3}},\nl'equipu de {{SITENAME}}",
+ "tsb-email-rejected-subject": "Refugóse la to solicitú pa ser traductor en {{SITENAME}}",
+ "tsb-email-rejected-body": "Hola {{GENDER:$1|$1}},\n\nGracies por solicitar ser traductor en {{SITENAME}}. Siento informate que refugué la to solicitú, porque la calidá de les tos traducciones nun cumple los requisitos.\n\nSi crees que la to solicitú refugóse por error, por favor, vuelvi a intentar ser traductor de {{SITENAME}}. Pues date d'alta equí:\n$2\n\n\n{{GENDER:$3|$3}},\nl'equipu de {{SITENAME}}",
+ "tsb-request-count": "{{PLURAL:$1|Una solicitú|$1 solicitúes}}",
+ "tsb-all-languages-button-label": "Toles llingües",
+ "tsb-search-requests": "Buscar solicitúes pendientes",
+ "tsb-accept-button-label": "Aceutar",
+ "tsb-reject-button-label": "Refugar",
+ "tsb-selected-count": "{{PLURAL:$1|$1 usuariu seleicionáu|$1 usuarios seleicionaos}}",
+ "tsb-older-requests": "$1 {{PLURAL:$1|solicitú anterior|solicitúes anteriores}}",
+ "tsb-accept-all-button-label": "Aceutar too",
+ "tsb-reject-all-button-label": "Refugar too",
+ "tsb-user-posted-a-comment": "Nun ye traductor",
+ "tsb-reminder-link-text": "Unviar un recordatoriu per corréu electrónicu",
+ "tsb-didnt-make-any-translations": "Esti usuariu nun fizo denguna traducción.",
+ "tsb-translations-source": "Fonte",
+ "tsb-translations-user": "Traducciones {{GENDER:$1|del usuariu|de la usuaria}}",
+ "tsb-translations-current": "Traducciones esistentes",
+ "tsb-delete-userpage-summary": "Desaniciando la páxina d'usuariu d'un usuariu de pruebes",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Usuariu refugáu|Usuarios refugaos}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Usuariu aceutáu|Usuarios aceutaos}}",
+ "translationstash": "Bienveníos",
+ "translate-translationstash-welcome": "{{GENDER:$1|Bienveníu|Bienvenida}}, $1; yá yes {{GENDER:$1|un nuevu traductor|una nueva traductora}}",
+ "translate-translationstash-welcome-note": "Avézate a les ferramientes de traducción. Traduz dellos mensaxes y consigui permisu de traducción completu pa participar nos tos proyeutos favoritos.",
+ "translate-translationstash-initialtranslation": "La so traducción inicial",
+ "translate-translationstash-translations": "$1 {{PLURAL:$1|traducción completada|traducciones completaes}}",
+ "translate-translationstash-skip-button-label": "Probar con otra",
+ "tsb-limit-reached-title": "Gracies poles sos traducciones",
+ "tsb-limit-reached-body": "Llegó a la llende de traducciones pa traductores nuevos.\nEl nuesu equipu pronto comprobará y promocionará la so cuenta.\nDarréu podrá traducir ensin llendes.",
+ "tsb-no-requests-from-new-users": "Nun hai solicitúes d'usuarios nuevos",
+ "tsb-create-user-page": "Creada una páxina d'usuariu básica",
+ "log-name-translatorsandbox": "Rexistru de la zona de pruebes de traducción",
+ "log-description-translatorsandbox": "Rexistru d'aiciones de los usuarios del entornu aislláu de traducción",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|promovió}} a $3 a {{GENDER:$4|traductor}}",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|refugó}} la solicitú de «$3» de facese traductor",
+ "logentry-newusers-tsbpromoted": "{{GENDER:$2|Creóse}} la cuenta d'usuariu $3 por promoción dende pruebes"
+}
diff --git a/Translate/i18n/sandbox/ban.json b/Translate/i18n/sandbox/ban.json
new file mode 100644
index 00000000..42395f53
--- /dev/null
+++ b/Translate/i18n/sandbox/ban.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chinamoonroll"
+ ]
+ },
+ "translationstash": "Rahajeng rauh"
+}
diff --git a/Translate/i18n/sandbox/be.json b/Translate/i18n/sandbox/be.json
new file mode 100644
index 00000000..a238e75c
--- /dev/null
+++ b/Translate/i18n/sandbox/be.json
@@ -0,0 +1,53 @@
+{
+ "@metadata": {
+ "authors": [
+ "Artsiom91",
+ "Chadyka"
+ ]
+ },
+ "managetranslatorsandbox": "Упраўленне пясочніцай перакладу",
+ "tsb-filter-pending": "Запыты, якія чакаюць апрацоўкі",
+ "tsb-reminder-title-generic": "Завершыце сваё прадстаўленне, каб стаць перакладчыкам",
+ "tsb-reminder-content-generic": "Вітаем, $1,\n\nДзякуй за рэгістрацыю ў {{SITENAME}}.\n\nКалі вы скончыце тэставыя пераклады, адміністратары дадуць вам поўны доступ да перакладу неўзабаве пасля гэтага.\n\nКалі ласка, прыходзьце і зрабіце яшчэ некалькі перакладаў тут:\n$2\n\n$3,\nСупрацоўнікі {{SITENAME}}",
+ "tsb-reminder-sending": "Адпраўка напаміну...",
+ "tsb-reminder-sent": "{{PLURAL:$1|Адпраўлены $1 напамін. Час: $2.|Адпраўленыя $1 напаміну. Час апошняга: $2.|Адпраўленыя $1 напамінаў. Час апошняга: $2.}}",
+ "tsb-reminder-sent-new": "Адпраўлены напамін",
+ "tsb-reminder-failed": "Адпраўка напаміну не ўдалася",
+ "tsb-email-promoted-subject": "Цяпер вы — перакладчык у «{{SITENAME}}»",
+ "tsb-email-promoted-body": "Вітаем $1,\n\nВіншую! Я праверыў тэставыя пераклады, якія вы зрабілі на {{SITENAME}}, і {{GENDER:$3|даў|дала}} вам поўныя правы {{GENDER:$1|перакладчыка|перакладчыцы}}.\n\nПрыходзьце ў {{SITENAME}}, каб працягваць перакладаць зараз і кожны дзень:\n$2\n\nСардэчна запрашаем і дзякуем за ваш унёсак!\n\n$3,\n{{GENDER:$3|супрацоўнік|супрацоўніца}} translatewiki",
+ "tsb-email-rejected-subject": "Ваша заяўка на пасаду перакладчыка ў {{SITENAME}} была адхілена",
+ "tsb-email-rejected-body": "Прывітанне $1,\n\nДзякуй за заяўку стаць {{GENDER:$1|перакладчыкам у|перакладчыцаю ў}} {{SITENAME}}. З жалем паведамляю, што я {{GENDER:$3|адхіліў|адхіліла}} вашу заяўку, бо якасць вашых перакладаў не адпавядала патрабаванням.\n\nКалі вы лічыце, што ваша заяўка была адхілена па памылцы, паспрабуйце яшчэ раз падаць заяўку стаць {{GENDER:$1|перакладчыкам у|перакладчыцаю ў}} {{SITENAME}}. Вы можаце зарэгістравацца тут:\n$2\n\n$3,\n{{GENDER:$3|супрацоўнік|супрацоўніца}} translatewiki",
+ "tsb-request-count": "$1 {{PLURAL:$1|запыт|запыту|запытаў}}",
+ "tsb-all-languages-button-label": "Усе мовы",
+ "tsb-search-requests": "Пошук запытаў, якія чакаюць апрацоўкі",
+ "tsb-accept-button-label": "Прыняць",
+ "tsb-reject-button-label": "Адхіліць",
+ "tsb-selected-count": "{{PLURAL:$1|Выбраны $1 удзельнік|Выбраныя $1 ўдзельнікі|Выбраныя $1 удзельнікаў}}",
+ "tsb-older-requests": "$1 {{PLURAL:$1|стары запыт|старыя запыты|старых запытаў}}",
+ "tsb-accept-all-button-label": "Прыняць усё",
+ "tsb-reject-all-button-label": "Адхіліць усё",
+ "tsb-user-posted-a-comment": "Не перакладчык",
+ "tsb-reminder-link-text": "Адправіць напамін па эл. пошце",
+ "tsb-didnt-make-any-translations": "Гэты ўдзельнік не зрабіў ніякіх перакладаў.",
+ "tsb-translations-source": "Крыніца",
+ "tsb-translations-user": "Пераклады {{GENDER:$1|ўдзельніка|ўдзельніцы}}",
+ "tsb-translations-current": "Існуючыя пераклады",
+ "tsb-delete-userpage-summary": "Выдаленне старонкі ўдзельніка пясочніцы",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Удзельнік адхілены|Удзельнікі адхіленыя}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Удзельнік прыняты|Удзельнікі прынятыя}}",
+ "translationstash": "Вітаем",
+ "translate-translationstash-welcome": "Вітаем $1, вы {{GENDER:$1|новы перакладчык|новая перакладчыца}}",
+ "translate-translationstash-welcome-note": "Пазнаёмцеся з інструментамі перакладу. Перакладзіце некаторыя паведамленні і атрымайце поўныя правы перакладчыка для ўдзелу ў вашых любімых праектах.",
+ "translate-translationstash-initialtranslation": "Ваш першапачатковы пераклад",
+ "translate-translationstash-translations": "$1 {{PLURAL:$1|выкананы пераклад|выкананыя пераклады|выкананых перакладаў}}",
+ "translate-translationstash-skip-button-label": "Паспрабуйце іншае",
+ "tsb-limit-reached-title": "Дзякуй за вашыя пераклады",
+ "tsb-limit-reached-body": "Вы дасягнулі межы перакладаў для новых перакладчыкаў.\nНаша каманда хутка пацвердзіць і павысіць ваш рахунак.\nТады вы зможаце перакладаць без абмежаванняў.",
+ "tsb-no-requests-from-new-users": "Няма запытаў ад новых удзельнікаў",
+ "tsb-create-user-page": "Створаная простая старонка ўдзельніка",
+ "log-name-translatorsandbox": "Журнал пясочніцы перакладу",
+ "log-description-translatorsandbox": "Журнал дзеянняў з удзельнікамі пясочніцы перакладаў",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|павысіў|павысіла}} $3 да {{GENDER:$4|перакладчыка|перакладчыцы}}.",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|адхіліў|адхіліла}} запыт удзельніка «$3» стаць перакладчыкам",
+ "logentry-newusers-tsbpromoted": "Рахунак $3 быў {{GENDER:$2|створаны}} павышэннем з пясочніцы"
+}
diff --git a/Translate/i18n/sandbox/bg.json b/Translate/i18n/sandbox/bg.json
new file mode 100644
index 00000000..514c5d05
--- /dev/null
+++ b/Translate/i18n/sandbox/bg.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "DCLXVI",
+ "StanProg"
+ ]
+ },
+ "tsb-all-languages-button-label": "Всички езици",
+ "tsb-accept-button-label": "Приемане",
+ "tsb-accept-all-button-label": "Приемане на всички",
+ "tsb-reject-all-button-label": "Отхвърляне на всички",
+ "tsb-translations-source": "Източник",
+ "tsb-translations-current": "Съществуващи преводи",
+ "translationstash": "Добре дошли",
+ "tsb-limit-reached-title": "Благодарности за направените преводи",
+ "logentry-translatorsandbox-promoted": "\n$1 {{GENDER:$2|повиши}} $3 на {{GENDER:$4|преводач}}"
+}
diff --git a/Translate/i18n/sandbox/blk.json b/Translate/i18n/sandbox/blk.json
new file mode 100644
index 00000000..53f5ee82
--- /dev/null
+++ b/Translate/i18n/sandbox/blk.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "咽頭べさ"
+ ]
+ },
+ "tsb-accept-all-button-label": "လက်ခံႏလို့ဒျာႏ",
+ "tsb-reject-all-button-label": "လက်ခံႏလို့တဝ်း",
+ "tsb-limit-reached-body": "လိုꩻတသာ ဘာႏသာႏပြန်ႏသားတာႏ တွိုႏလဲဥ်း ရဲးခါꩻကန့်သတ်ချက်ဖုံႏသွူ။ တညတဝ်းအခိန်ႏ နီသွဥ်းသီးစွိုꩻ ထွားစဲစ်ဆေꩻထွူ အီႏဒင်ႏထိုဖေႏယင်း နာꩻအကောက်အရန်းသွူ။ ဆီꩻရဲးထွော့ခါꩻတအဲဥ်ထဝ်းတဲင် နာꩻအီႏဘာႏသာႏပြန်ႏနွောင်ꩻသွူသနယ်။"
+}
diff --git a/Translate/i18n/sandbox/bn.json b/Translate/i18n/sandbox/bn.json
new file mode 100644
index 00000000..b5caba0a
--- /dev/null
+++ b/Translate/i18n/sandbox/bn.json
@@ -0,0 +1,51 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aftab1995",
+ "Aftabuzzaman",
+ "আজিজ",
+ "আফতাবুজ্জামান"
+ ]
+ },
+ "managetranslatorsandbox": "অনুবাদক খেলাঘর পরিচালনা",
+ "tsb-filter-pending": "অপেক্ষমান অনুরোধ",
+ "tsb-reminder-title-generic": "একজন অনুবাদক হতে আপনার পরিচিতি সমাপ্ত করুন",
+ "tsb-reminder-content-generic": "প্রিয় $1,\n\n{{SITENAME}}-এ নিবন্ধন করার জন্য ধন্যবাদ।\n\nআপনি আপনার পরীক্ষামূল অনুবাদগুলো সম্পূর্ণ করলেই, প্রশাসকগণ শীঘ্রই আপনাকে অনুবাদের জন্য পূর্ণাঙ্গ প্রবেশাধিকার প্রদান করবেন।\n\nদয়া করে আসুন এবং এখানে গিয়ে আরও কিছু অনুবাদ করুন:\n$2 \n\n$3,\n{{SITENAME}} কর্মী",
+ "tsb-reminder-sending": "অনুস্মারক পাঠানো হচ্ছে...",
+ "tsb-reminder-sent": "{{PLURAL:$1|$1টি অনুস্মারক পাঠানো হয়েছে। সময়: $2।|$1টি অনুস্মারক পাঠানো হয়েছে৷ সর্বশেষটির সময়: $2।}}",
+ "tsb-reminder-sent-new": "একটি অনুস্মারক পাঠানো হয়েছে",
+ "tsb-reminder-failed": "অনুস্মারক প্রেরণ ব্যর্থ হয়েছে",
+ "tsb-email-promoted-subject": "আপনি এখন {{SITENAME}}-এ একজন অনুবাদক",
+ "tsb-email-promoted-body": "প্রিয় {{GENDER:$1|$1}},\n\nঅভিনন্দন! আমি {{SITENAME}}-এ আপনার করা পরীক্ষামূলক অনুবাদগুলি যাচাই করে দেখেছি এবং আপনাকে পূর্ণাঙ্গ অনুবাদক অধিকার প্রদান করেছি।\n\nএখন ও প্রতিদিন অনুবাদ করা চালিয়ে যেতে, {{SITENAME}}-এ আসুন:\n$2 \n\nস্বাগত, ও আপনার অবদানের জন্য ধন্যবাদ!\n\n{{GENDER:$3|$3}},\n{{SITENAME}} কর্মী",
+ "tsb-email-rejected-subject": "{{SITENAME}}-এ অনুবাদক হওয়ার জন্য আপনার আবেদন প্রত্যাখ্যাত হয়েছে",
+ "tsb-email-rejected-body": "প্রিয় {{GENDER:$1|$1}},\n\n{{SITENAME}}-এ একজন অনুবাদক হিসেবে আবেদন করার জন্য আপনাকে ধন্যবাদ। আমি দুঃখের সাথে আপনাকে জানাচ্ছি যে আমি আপনার আবেদন প্রত্যাখ্যান করেছি, কারণ আপনার অনুবাদের গুণমান আবশ্যিক শর্ত পূরণে ব্যর্থ হয়েছে।\n\nআপনি যদি মনে করেন যে আপনার আবেদনটি ভুলবশত প্রত্যাখ্যান করা হয়েছে, তবে অনুগ্রহ করে {{SITENAME}}-এ অনুবাদক হিসেবে আবার আবেদন করার চেষ্টা করুন। আপনি এখানে সাইন আপ করতে পারেন:\n$2 \n\n{{GENDER:$3|$3}},\n{{SITENAME}} কর্মী",
+ "tsb-request-count": "$1টি {{PLURAL:$1|অনুরোধ}}",
+ "tsb-all-languages-button-label": "সকল ভাষা",
+ "tsb-search-requests": "মুলতুবি থাকা অনুরোধগুলো খুঁজুন",
+ "tsb-accept-button-label": "মঞ্জুর করুন",
+ "tsb-reject-button-label": "প্রত্যাখ্যান করুন",
+ "tsb-selected-count": "{{PLURAL:$1|$1 জন ব্যবহারকারী নির্বাচিত}}",
+ "tsb-older-requests": "$1টি পুরাতন {{PLURAL:$1|অনুরোধ}}",
+ "tsb-accept-all-button-label": "সমস্ত মঞ্জুর করুন",
+ "tsb-reject-all-button-label": "সমস্ত প্রত্যাখ্যান করুন",
+ "tsb-user-posted-a-comment": "অনুবাদক নয়",
+ "tsb-reminder-link-text": "ইমেল অনুস্মারক পাঠান",
+ "tsb-didnt-make-any-translations": "এই ব্যবহারকারী কোনও অনুবাদ করেননি।",
+ "tsb-translations-source": "উৎস",
+ "tsb-translations-user": "{{GENDER:$1|ব্যবহারকারীর}} অনুবাদসমূহ",
+ "tsb-translations-current": "বিদ্যমান অনুবাদসমূহ",
+ "tsb-delete-userpage-summary": "একজন খেলাঘর ব্যবহারকারীর ব্যবহারকারী পাতা মুছে ফেলা হচ্ছে",
+ "tsb-reject-confirmation": "{{PLURAL:$1|ব্যবহারকারী}} প্রত্যাখ্যান করেছেন",
+ "tsb-accept-confirmation": "{{PLURAL:$1|ব্যবহারকারী}} গ্রহণ করেছেন",
+ "translationstash": "স্বাগতম",
+ "translate-translationstash-welcome": "স্বাগতম {{GENDER:$1|$1}}, আপনি একজন নতুন অনুবাদক",
+ "translate-translationstash-welcome-note": "অনুবাদ সরঞ্জামসমূহে অভ্যস্ত হন। কিছু বার্তা অনুবাদ করুন এবং আপনার প্রিয় প্রকল্পে অংশগ্রহণের জন্য পূর্ণাঙ্গ অনুবাদক অধিকার অর্জন করুন।",
+ "translate-translationstash-initialtranslation": "আপনার প্রারম্ভিক অনুবাদ",
+ "translate-translationstash-translations": "$1টি {{PLURAL:$1|অনুবাদ}} সম্পন্ন",
+ "translate-translationstash-skip-button-label": "আরেকটি চেষ্টা করুন",
+ "tsb-limit-reached-title": "আপনার অনুবাদসমূহের জন্য ধন্যবাদ",
+ "tsb-limit-reached-body": "আপনি নতুন অনুবাদকদের জন্য নির্ধারিত অনুবাদের সীমায় পৌঁছেছেন।\nআমাদের দল শীঘ্রই আপনার অ্যাকাউন্ট যাচাই এবং পদোন্নতি করবে।\nতখন আপনি সীমাহীনভাবে অনুবাদ করতে পারবেন।",
+ "tsb-no-requests-from-new-users": "নতুন ব্যবহারকারীদের থেকে কোন অনুরোধ নেই",
+ "tsb-create-user-page": "প্রাথমিক ব্যবহারকারী পাতা সৃষ্টি করা হয়েছে",
+ "log-name-translatorsandbox": "খেলাঘর অনুবাদ লগ"
+}
diff --git a/Translate/i18n/sandbox/br.json b/Translate/i18n/sandbox/br.json
new file mode 100644
index 00000000..229e473f
--- /dev/null
+++ b/Translate/i18n/sandbox/br.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Y-M D"
+ ]
+ },
+ "tsb-filter-pending": "Rekedoù war gortoz",
+ "tsb-all-languages-button-label": "An holl yezhoù",
+ "tsb-accept-button-label": "Asantiñ",
+ "tsb-translations-source": "Mammenn",
+ "tsb-translations-current": "Troidigezhioù zo diouto",
+ "translationstash": "Degemer mat",
+ "tsb-limit-reached-title": "Trugarez evit ho troidigezhioù"
+}
diff --git a/Translate/i18n/sandbox/bs.json b/Translate/i18n/sandbox/bs.json
new file mode 100644
index 00000000..75340d9f
--- /dev/null
+++ b/Translate/i18n/sandbox/bs.json
@@ -0,0 +1,53 @@
+{
+ "@metadata": {
+ "authors": [
+ "Srdjan m",
+ "Srđan"
+ ]
+ },
+ "managetranslatorsandbox": "Upravljanje prevodilačkim pješčanikom",
+ "tsb-filter-pending": "Zahtjevi na čekanju",
+ "tsb-reminder-title-generic": "Dovršite uvodni rad da biste postali prevodilac",
+ "tsb-reminder-content-generic": "Zdravo, $1,\n\nHvala Vam što ste se registrirali na {{GRAMMAR:dativ|{{SITENAME}}}}.\n\nAko dovršite probne prijevode, administratori će Vam ubrzo nakon tog dodijeliti potpuni pristup prevođenju.\n\nPosjetite naredni sajt i prevedite još poruka:\n$2\n\n$3,\nosoblje {{GRAMMAR:genitiv|{{SITENAME}}}}",
+ "tsb-reminder-sending": "Šaljem podsjetnik...",
+ "tsb-reminder-sent": "{{PLURAL:$1|Poslan $1 podsjetnik. Vrijeme: $2.|Poslana $1 podsjetnika. Posljednji: $2.}}",
+ "tsb-reminder-sent-new": "Pošalji podsjetnik",
+ "tsb-reminder-failed": "Nisam uspio poslati podsjetnik",
+ "tsb-email-promoted-subject": "Sad ste prevodilac na {{GRAMMAR:dativ|{{SITENAME}}}}",
+ "tsb-email-promoted-body": "Zdravo {{GENDER:$1|$1}},\n\nČestitke! {{GENDER:$3|Pregledao|Pregledala}} sam probne prijevode koje ste napravili na {{GRAMMAR:dativ|{{SITENAME}}}} i {{GENDER:$3|dao|dala}} sam Vam puna prevodilačka prava.\n\nDođite na {{GRAMMAR:akuzativ|{{SITENAME}}}} da nastavite prevoditi sada i svaki naredni dan:\n$2\n\nDobro došli i hvala Vam na doprinosima!\n{{GENDER:$3|$3}},\nosoblje {{GRAMMAR:genitiv|{{SITENAME}}}}",
+ "tsb-email-rejected-subject": "Vaša zahtjev da postanete prevodilac na {{GRAMMAR:dativ|{{SITENAME}}}} je odbijen",
+ "tsb-email-rejected-body": "Zdravo, {{GENDER:$1|$1}},\n\nHvala Vam što ste se prijavili da budete prevodilac na {{GRAMMAR:dativ|{{SITENAME}}}}. Nažalost, moram Vas obavijestiti da sam {{GENDER:$3|odbio|odbila}} Vaš zahtjev jer kvaliteta Vaših prijevoda ne odgovara našim potrebama.\n\nAko smatrate da ste greškom odbijeni, ponovo podnesite zahtjev na {{GRAMMAR:dativ|{{SITENAME}}}}. To možete uraditi ovdje:\n$2\n\n{{GENDER:$3|$3}},\nosoblje {{GRAMMAR:genitiv|{{SITENAME}}}}",
+ "tsb-request-count": "$1 {{PLURAL:$1|zahtjev|zahtjeva}}",
+ "tsb-all-languages-button-label": "Svi jezici",
+ "tsb-search-requests": "Pretraži zahtjeve",
+ "tsb-accept-button-label": "Prihvati",
+ "tsb-reject-button-label": "Odbij",
+ "tsb-selected-count": "{{PLURAL:$1|Izabran $1 korisnik|Izabrana $1 korisnika|Izabrano $1 korisnika}}",
+ "tsb-older-requests": "$1 {{PLURAL:$1|stariji zahtjev|starija zahtjeva|starijih zahtjeva}}",
+ "tsb-accept-all-button-label": "Prihvati sve",
+ "tsb-reject-all-button-label": "Odbij sve",
+ "tsb-user-posted-a-comment": "Nije prevodilac",
+ "tsb-reminder-link-text": "Pošalji podsjetnik e-poštom",
+ "tsb-didnt-make-any-translations": "Ovaj korisnik nije napravio nijedan prijevod.",
+ "tsb-translations-source": "Izvor",
+ "tsb-translations-user": "{{GENDER:$1|Korisnički}} prijevodi",
+ "tsb-translations-current": "Postojeći prijevodi",
+ "tsb-delete-userpage-summary": "Brisanje korisničke stranice korisnika u pješčaniku",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Korisnik odbijen|Korisnici odbijeni}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Korisnik prihvaćen|Korisnici prihvaćeni}}",
+ "translationstash": "Dobro došli",
+ "translate-translationstash-welcome": "Dobro došli {{GENDER:$1|$1}}, Vi ste novi prevodilac",
+ "translate-translationstash-welcome-note": "Upoznajte se s prevodilačkim alatima. Prevedite nekoliko poruka i steknite puna prevodilačka prava da biste učestvovali u svojim omiljenim projektima.",
+ "translate-translationstash-initialtranslation": "Vaš prvobitan prijevod",
+ "translate-translationstash-translations": "$1 {{PLURAL:$1|završen prijevod|završena prijevoda|završenih prijevoda}}",
+ "translate-translationstash-skip-button-label": "Daj mi drugi",
+ "tsb-limit-reached-title": "Hvala Vam na prijevodima",
+ "tsb-limit-reached-body": "Dostigli ste maksimalan broj prijevoda za nove prevodioce.\nNaša ekipa uskoro će ih provjeriti i nadograditi Vaš račun.\nPotom ćete moći prevoditi neograničeno.",
+ "tsb-no-requests-from-new-users": "Nema zahtjeva novih korisnika",
+ "tsb-create-user-page": "Stvaranje osnovne korisničke stranice",
+ "log-name-translatorsandbox": "Zapisnik prijevoda u pješčaniku",
+ "log-description-translatorsandbox": "Zapisnik radnji poduzetih nad korisnicima u prevodilačkom pješčaniku",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|promovirao|promovirala}} je $3 u {{GENDER:$4|prevodioca}}",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|odbio|odbila}} je zahtjev korisnika/korisnice \"$3\" da postane prevodilac",
+ "logentry-newusers-tsbpromoted": "Korisnički račun $3 {{GENDER:$2|napravljen}} je promocijom iz pješčanika"
+}
diff --git a/Translate/i18n/sandbox/ce.json b/Translate/i18n/sandbox/ce.json
new file mode 100644
index 00000000..7742f3d2
--- /dev/null
+++ b/Translate/i18n/sandbox/ce.json
@@ -0,0 +1,41 @@
+{
+ "@metadata": {
+ "authors": [
+ "Умар"
+ ]
+ },
+ "managetranslatorsandbox": "Ловзаран майдан урхалладар",
+ "tsb-filter-pending": "Кечдаре хьоьжуш долу дехарш",
+ "tsb-reminder-sending": "Дагадаийтар дӀадахьийтар…",
+ "tsb-reminder-sent": "{{PLURAL:$1|ДӀадахьийтита дагадаийтар —}} $2",
+ "tsb-reminder-sent-new": "Дагадаийтар дӀадахийтина",
+ "tsb-reminder-failed": "Дагадаийтар дӀадахьийта цаделира",
+ "tsb-email-promoted-subject": "ХӀинца хьуна — «{{SITENAME}}» сайтехь гочдархочун бакъо елла",
+ "tsb-request-count": "{{PLURAL:$1|$1 дехар|1=цхьаъ дехар}}",
+ "tsb-all-languages-button-label": "Берриге меттанаш",
+ "tsb-search-requests": "Лаха дехарш",
+ "tsb-accept-button-label": "ТӀелаца",
+ "tsb-reject-button-label": "Йухатоха",
+ "tsb-selected-count": "{{PLURAL:$1|$1 декъашхо хаьржина}}",
+ "tsb-older-requests": "$1 алсамо {{PLURAL:$1|1=шира дехар|шира дехараш}}",
+ "tsb-accept-all-button-label": "ТӀеэца массо",
+ "tsb-reject-all-button-label": "Йухатоха массо",
+ "tsb-user-posted-a-comment": "Гочдархочун бакъо йац",
+ "tsb-reminder-link-text": "Электронан поште дагадаийтар дахьийта",
+ "tsb-didnt-make-any-translations": "ХӀокху декъашхочо цхьа гочдар дина дац.",
+ "tsb-translations-source": "Хьост",
+ "tsb-translations-user": "{{GENDER:$1|Декъашхочун}} гочдарш",
+ "tsb-translations-current": "Долуш долу гочдарш",
+ "translationstash": "Марша догӀийла",
+ "translate-translationstash-initialtranslation": "Хьан дуьххьарлера гочдар",
+ "translate-translationstash-translations": "$1 {{PLURAL:$1|кхочуш дина гочдар}}",
+ "translate-translationstash-skip-button-label": "Хьажа кхечуьнга",
+ "tsb-limit-reached-title": "Гочдарна баркалла",
+ "tsb-no-requests-from-new-users": "Керла декъашхошкара дехарш дац",
+ "tsb-create-user-page": "Кхоьллина коьрта декъашхочун агӀо",
+ "log-name-translatorsandbox": "Ловзаран майда",
+ "log-description-translatorsandbox": "Гочдаран ловзаран майдан чохь декъашхоша бина хийцамаш",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|вина|йина}}$3 {{GENDER:$4|гочдархо}}.",
+ "logentry-translatorsandbox-rejected": "гочдархо статусан дехар $3 $1 {{GENDER:$2|йухадаьккхина}}.",
+ "logentry-newusers-tsbpromoted": "$3 аккаунт {{GENDER:$2|кхоьллина}} ловзаран майдан чуьра дӀайаздарх"
+}
diff --git a/Translate/i18n/sandbox/ckb.json b/Translate/i18n/sandbox/ckb.json
new file mode 100644
index 00000000..db324f3b
--- /dev/null
+++ b/Translate/i18n/sandbox/ckb.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Épine"
+ ]
+ },
+ "tsb-all-languages-button-label": "ھەموو زمانەکان"
+}
diff --git a/Translate/i18n/sandbox/cs.json b/Translate/i18n/sandbox/cs.json
new file mode 100644
index 00000000..bad3ec68
--- /dev/null
+++ b/Translate/i18n/sandbox/cs.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mormegil",
+ "Vks"
+ ]
+ },
+ "tsb-email-promoted-subject": "Na {{grammar:6sg|{{SITENAME}}}} jste teď překladatelem",
+ "tsb-email-rejected-subject": "Vaše žádost stát se překladatelem na {{grammar:6sg|{{SITENAME}}}} byla zamítnuta",
+ "tsb-accept-button-label": "Přijmout",
+ "tsb-reject-button-label": "Odmítnout",
+ "tsb-accept-all-button-label": "Přijmout vše",
+ "tsb-reject-all-button-label": "Odmítnout vše",
+ "tsb-translations-source": "Zdroj",
+ "translationstash": "Vítejte",
+ "translate-translationstash-welcome": "Vítejte, {{GENDER:$1|uživateli|uživatelko}} $1, jste {{GENDER:$1|nový překladatel|nová překladatelka}}",
+ "translate-translationstash-welcome-note": "Seznamte se s překládacími nástroji. Abyste se mohli účastnit oblíbených projektů, přeložte některé zprávy a získejte plná překladatelská oprávnění.",
+ "tsb-limit-reached-title": "Děkujeme za vaše překlady"
+}
diff --git a/Translate/i18n/sandbox/cy.json b/Translate/i18n/sandbox/cy.json
new file mode 100644
index 00000000..c5f2e408
--- /dev/null
+++ b/Translate/i18n/sandbox/cy.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lloffiwr"
+ ]
+ },
+ "tsb-filter-pending": "Ceisiadau dan ystyriaeth",
+ "tsb-reminder-title-generic": "Cwblhewch eich cyflwyniad er mwyn cael bod yn gyfieithydd",
+ "tsb-email-promoted-subject": "Rydych nawr yn gyfieithydd ar {{SITENAME}}",
+ "tsb-all-languages-button-label": "Pob iaith",
+ "tsb-accept-button-label": "Derbynier",
+ "tsb-reject-button-label": "Gwrthoder",
+ "tsb-accept-all-button-label": "Derbynier y cwbl",
+ "tsb-reject-all-button-label": "Gwrthoder y cwbl",
+ "tsb-user-posted-a-comment": "Ddim yn gyfieithydd",
+ "tsb-translations-source": "Ffynhonell",
+ "tsb-translations-user": "Cyfieithiadau'r defnyddiwr",
+ "tsb-translations-current": "Cyfieithiadau presennol",
+ "translationstash": "Croeso",
+ "translate-translationstash-welcome": "Croeso {{GENDER:$1|$1}}, rydych nawr yn gyw-gyfieithydd",
+ "translate-translationstash-welcome-note": "Cyfarwyddwch â'r teclynnau cyfieithu. Cyfieithwch ambell i neges er mwyn derbyn galluoedd cyfieithydd llawn ac ymuno gyda'ch hoff brosiectau.",
+ "translate-translationstash-initialtranslation": "Eich cyfieithiad cyntaf",
+ "translate-translationstash-translations": "$1 {{PLURAL:$1|cyfieithiadau wedi eu c|cyfieithiad wedi ei g|gyfieithiad wedi eu c|chyfieithiad wedi eu c|chyfieithiad wedi eu c|cyfieithiad wedi eu c}}wblhau",
+ "translate-translationstash-skip-button-label": "Ceisio un arall",
+ "tsb-limit-reached-title": "Diolch am eich cyfieithiadau",
+ "tsb-limit-reached-body": "Rydych wedi cyrraedd y terfyn cyfieithu i gyw-gyfieithwyr. Fe fydd ein tîm yn gwirio eich cyfrif a'i uwchraddio'n fuan. Yna fe gewch gyfieithu'n ddi-derfyn.",
+ "tsb-no-requests-from-new-users": "Dim ceisiadau gan ddefnyddwyr newydd",
+ "tsb-create-user-page": "Dechrau tudalen sylfaenol i'r defnyddiwr",
+ "log-name-translatorsandbox": "Y pwll tywod cyfieithu"
+}
diff --git a/Translate/i18n/sandbox/da.json b/Translate/i18n/sandbox/da.json
new file mode 100644
index 00000000..3012cff3
--- /dev/null
+++ b/Translate/i18n/sandbox/da.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Saederup92",
+ "Sarrus"
+ ]
+ },
+ "tsb-reminder-sending": "Sender påmindelsen...",
+ "tsb-reminder-sent-new": "Sendte en påmindelse",
+ "tsb-all-languages-button-label": "Alle sprog",
+ "tsb-accept-button-label": "Accepter",
+ "tsb-reject-button-label": "Afvis",
+ "tsb-accept-all-button-label": "Accepter alle",
+ "tsb-reject-all-button-label": "Afvis alle",
+ "tsb-user-posted-a-comment": "Ikke en oversætter",
+ "tsb-translations-source": "Kilde",
+ "tsb-translations-current": "Eksisterende oversættelser",
+ "tsb-reject-confirmation": "Afviste {{PLURAL:$1|bruger|brugere}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Accepteret bruger|Accepterede brugere}}",
+ "translationstash": "Velkommen",
+ "translate-translationstash-welcome": "Velkommen {{GENDER:$1|$1}}, du er nu en ny oversætter",
+ "translate-translationstash-skip-button-label": "Prøv en anden",
+ "tsb-limit-reached-title": "Tak for dine oversættelser"
+}
diff --git a/Translate/i18n/sandbox/de-ch.json b/Translate/i18n/sandbox/de-ch.json
new file mode 100644
index 00000000..9d17accd
--- /dev/null
+++ b/Translate/i18n/sandbox/de-ch.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "J. 'mach' wust"
+ ]
+ },
+ "tsb-email-rejected-body": "Hallo $1\n\nVielen Dank für deinen Antrag auf Beförderung {{GENDER:$1|zum Übersetzer|zur Übersetzerin}} auf {{SITENAME}}. Ich bedauere, dich informieren zu müssen, dass ich deinen Antrag abgelehnt habe, da die Qualität deiner Übersetzungen nicht den Anforderungen entspricht.\n\nFalls du denkst, dass dein Antrag durch einen Fehler abgelehnt wurde, versuche, deinen Übersetzerantrag auf {{SITENAME}} erneut einzureichen. Du kannst dich hier registrieren:\n$2\n\n$3,\n{{GENDER:$3|Mitarbeiter|Mitarbeiterin}} von {{SITENAME}}"
+}
diff --git a/Translate/i18n/sandbox/de.json b/Translate/i18n/sandbox/de.json
new file mode 100644
index 00000000..08315adc
--- /dev/null
+++ b/Translate/i18n/sandbox/de.json
@@ -0,0 +1,56 @@
+{
+ "@metadata": {
+ "authors": [
+ "J. 'mach' wust",
+ "Kghbln",
+ "Metalhead64",
+ "Rillke",
+ "Umherirrender"
+ ]
+ },
+ "managetranslatorsandbox": "Übersetzer-Spielwiese konfigurieren",
+ "tsb-filter-pending": "Ausstehende Anfragen",
+ "tsb-reminder-title-generic": "Vervollständige deine Einführung, um ein Übersetzer zu werden.",
+ "tsb-reminder-content-generic": "Hallo $1,\n\nvielen Dank für die Registrierung auf {{SITENAME}}.\n\nWenn du deine Testübersetzungen vervollständigst, gewähren dir die Administratoren kurz danach vollen Übersetzungszugriff.\n\nKomm vorbei und mache hier einige weitere Übersetzungen:\n$2\n\n$3,\ndie Mitarbeiter von {{SITENAME}}",
+ "tsb-reminder-sending": "Sende die Erinnerung …",
+ "tsb-reminder-sent": "{{PLURAL:$1|Eine Erinnerung versandt. Zeit: $2.|$1 Erinnerungen versandt. Zeit der letzten: $2.}}",
+ "tsb-reminder-sent-new": "Die Erinnerung wurde versandt",
+ "tsb-reminder-failed": "Der Versand der Erinnerung ist fehlgeschlagen",
+ "tsb-email-promoted-subject": "Du bist jetzt ein Übersetzer auf {{SITENAME}}",
+ "tsb-email-promoted-body": "Hallo {{GENDER:$1|$1}},\n\nherzlichen Glückwunsch! Ich habe deine Testübersetzungen auf {{SITENAME}} überprüft und habe dir die vollen Übersetzerrechte gegeben.\n\nKomme auf {{SITENAME}}, um jetzt mit dem Übersetzen fortzufahren:\n$2\n\nWillkommen und vielen Dank für deine Beiträge!\n\n{{GENDER:$3|$3}},\nMitarbeiter von {{SITENAME}}",
+ "tsb-email-rejected-subject": "Dein Antrag auf Beförderung zum Übersetzer auf {{SITENAME}} wurde abgelehnt",
+ "tsb-email-rejected-body": "Hallo $1,\n\nvielen Dank für deinen Antrag auf Beförderung {{GENDER:$1|zum Übersetzer|zur Übersetzerin}} auf {{SITENAME}}. Ich bedauere, dich informieren zu müssen, dass ich deinen Antrag abgelehnt habe, da die Qualität deiner Übersetzungen nicht den Anforderungen entspricht.\n\nFalls du denkst, dass dein Antrag durch einen Fehler abgelehnt wurde, versuche, deinen Übersetzerantrag auf {{SITENAME}} erneut einzureichen. Du kannst dich hier registrieren:\n$2\n\n$3,\n{{GENDER:$3|Mitarbeiter|Mitarbeiterin}} von {{SITENAME}}",
+ "tsb-request-count": "{{PLURAL:$1|Eine Anfrage|$1 Anfragen}}",
+ "tsb-all-languages-button-label": "Alle Sprachen",
+ "tsb-search-requests": "Offene Anfragen durchsuchen",
+ "tsb-accept-button-label": "Akzeptieren",
+ "tsb-reject-button-label": "Ablehnen",
+ "tsb-selected-count": "{{PLURAL:$1|Ein|$1}} Benutzer ausgewählt",
+ "tsb-older-requests": "{{PLURAL:$1|Eine ältere Anfrage|$1 ältere Anfragen}}",
+ "tsb-accept-all-button-label": "Alle akzeptieren",
+ "tsb-reject-all-button-label": "Alle ablehnen",
+ "tsb-user-posted-a-comment": "Kein Übersetzer",
+ "tsb-reminder-link-text": "E-Mail-Erinnerung senden",
+ "tsb-didnt-make-any-translations": "Dieser Benutzer hat noch keine Übersetzungen durchgeführt.",
+ "tsb-translations-source": "Quelle",
+ "tsb-translations-user": "{{GENDER:$1|Benutzerübersetzungen}}",
+ "tsb-translations-current": "Vorhandene Übersetzungen",
+ "tsb-delete-userpage-summary": "Benutzerseite eines Spielwiesenbenutzers gelöscht",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Benutzer}} abgelehnt",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Benutzer}} akzeptiert",
+ "translationstash": "Willkommen",
+ "translate-translationstash-welcome": "Willkommen $1, du bist {{GENDER:$1|ein neuer Übersetzer|eine neue Übersetzerin}}.",
+ "translate-translationstash-welcome-note": "Werde mit den Übersetzungswerkzeugen vertraut. Übersetze einige Nachrichten und erhalte die vollen Übersetzerrechte zur Teilnahme an deinen Lieblingsprojekten.",
+ "translate-translationstash-initialtranslation": "Deine erste Übersetzung",
+ "translate-translationstash-translations": "{{PLURAL:$1|Eine vervollständigte Übersetzung|$1 vervollständigte Übersetzungen}}",
+ "translate-translationstash-skip-button-label": "Eine andere versuchen",
+ "tsb-limit-reached-title": "Danke für deine Übersetzungen",
+ "tsb-limit-reached-body": "Du hast das Übersetzungslimit für neue Übersetzer erreicht.\nUnser Team wird dein Benutzerkonto bald verifizieren und hochstufen.\nDu wirst dann in der Lage sein, ohne Limits zu übersetzen.",
+ "tsb-no-requests-from-new-users": "Keine Anträge von neuen Benutzern",
+ "tsb-create-user-page": "Basis-Benutzerseite erstellt",
+ "log-name-translatorsandbox": "Übersetzungsspielwiesen-Logbuch",
+ "log-description-translatorsandbox": "Es folgt ein Logbuch von Aktionen auf Übersetzungsspielwiesenbenutzer.",
+ "logentry-translatorsandbox-promoted": "$1 hat $3 {{GENDER:$4|zum Übersetzer|zur Übersetzerin}} {{GENDER:$2|befördert}}",
+ "logentry-translatorsandbox-rejected": "$1 hat die Anfrage von „$3“ zur Beförderung {{GENDER:$2|zum Übersetzer|zur Übersetzerin}} abgelehnt",
+ "logentry-newusers-tsbpromoted": "Das Benutzerkonto $3 wurde aufgrund weiterer Berechtigungen auf der Übersetzerspielwiese {{GENDER:$2|erstellt}}"
+}
diff --git a/Translate/i18n/sandbox/diq.json b/Translate/i18n/sandbox/diq.json
new file mode 100644
index 00000000..462832dd
--- /dev/null
+++ b/Translate/i18n/sandbox/diq.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "1917 Ekim Devrimi",
+ "Dılmıc",
+ "Gambollar",
+ "Gırd",
+ "Kumkumuk",
+ "Marmase",
+ "Mirzali"
+ ]
+ },
+ "tsb-request-count": "$1 {{PLURAL:$1|waştış|waştışi}}",
+ "tsb-all-languages-button-label": "Zıwani pêro",
+ "tsb-search-requests": "Telebê cıgeyrayışê pawıteyan",
+ "tsb-accept-button-label": "Qebul ke",
+ "tsb-reject-button-label": "Red ke",
+ "tsb-selected-count": "{{PLURAL:$1|$1 kerber weçineya|$1 karberi weçineyay}}",
+ "tsb-accept-all-button-label": "Hemın qebul ke",
+ "tsb-reject-all-button-label": "Hemın red ke",
+ "tsb-user-posted-a-comment": "Açarnayış niyo",
+ "tsb-translations-source": "Çıme",
+ "tsb-translations-user": "Tadayışê (çarnayışê) {{GENDER:$1|karberi}}",
+ "translationstash": "Xeyr amey",
+ "translate-translationstash-skip-button-label": "Yewbina bıcerrebne",
+ "tsb-limit-reached-title": "Çarnayışê to rê teşekur kenime",
+ "log-name-translatorsandbox": "Roceka tadayışê qumdori"
+}
diff --git a/Translate/i18n/sandbox/dsb.json b/Translate/i18n/sandbox/dsb.json
new file mode 100644
index 00000000..ced4c429
--- /dev/null
+++ b/Translate/i18n/sandbox/dsb.json
@@ -0,0 +1,51 @@
+{
+ "@metadata": {
+ "authors": [
+ "Derbeth",
+ "Michawiki"
+ ]
+ },
+ "managetranslatorsandbox": "Pśełožowarske grajkanišćo zastojaś",
+ "tsb-filter-pending": "Njedocynjone napšašowanja",
+ "tsb-reminder-title-generic": "Wudopołni swójo zapokazanje, aby pśełožowaŕ był",
+ "tsb-reminder-content-generic": "Witaj $1,\n\nźěkujomy se za registrěrowanje na {{GRAMMAR:lokatiw|{{SITENAME}}}}.\n\nJolic wudpołnjujoš swóje testowe pśełožki, administratory daju tebi pón połny pśełožowański pśistup.\n\nPśiź pšosym sem a pśewjeź dalšne pśełožki:\n$2\n\n$3,\nsobuźěłaśerje {{GRAMMAR:genitiw|{{SITENAME}}}}",
+ "tsb-reminder-sending": "Dopomnjeśe se sćelo...",
+ "tsb-reminder-sent": "{{PLURAL:$1|$1 dopomnjeśe jo se pósłało $2|$1 dopomnjeśi stej se pósłałej, slědne $2|$1 dopomnjeśa su se pósłali, slědne $2|$1 dopomnjeśow jo se pósłało, slědne $2}}",
+ "tsb-reminder-sent-new": "Dopomnjeśe jo se pósłało",
+ "tsb-reminder-failed": "Słanje dopomnjeśa njejo se raźiło",
+ "tsb-email-promoted-subject": "Sy něnto pśełožowaŕ na {{GRAMMAR:lokatiw|{{SITENAME}}}}",
+ "tsb-email-promoted-body": "Witaj {{GENDER:$1|$1}},\n\nwutšobne glukužycenje! Som testowe pśełožki pśeglědał, kótarež sy na {{GRAMMAR:lokatiw|{{SITENAME}}}} pśewjadł a som tebi połne pśełožowarske pšawa dał.\n\nPśiź pšosym k {{GRAMMAR:datiw|{{SITENAME}}}}, aby něnto a kuždy źeń dalej pśełožował:\n$2\n\nWitaj a wjeliki źěk za twóje pśinoski!\n\n{{GENDER:$3|$3}},\nsobuźěłaśerje {{GRAMMAR:genitiw|{{SITENAME}}}}",
+ "tsb-email-rejected-subject": "Twójo pówušenje za pśełožowarja na {{GRAMMAR:lokatiw|{{SITENAME}}}} jo se wótpokazało",
+ "tsb-email-rejected-body": "Witaj {{GENDER:$1|$1}},\n\nźěkujom se za procowanje ako pśełožowaŕ na {{GRAMMAR:lokatiw|{{SITENAME}}}}. Bóžko musym śi informěrowaś, až som twójo procowanje wó pówušenje za pśełožowarja wótpokazał, dokulaž kwalita twójich pśełožkow njewótpowědujo pominanjam.\n\nJolic mysliš, až twójo procowanje jo se zamólnje wótpokazało, procuj se znowego ako pśełožowarja na {{GRAMMAR:lokatiw|{{SITENAME}}}}. Móžoš se how registrěrowaś:\n$2\n\n{{GENDER:$3|$3}},\nTeam {{GRAMMAR:genitiw|{{SITENAME}}}}",
+ "tsb-request-count": "$1 {{PLURAL:$1|napšašowanje|napšašowani|napšašowanja|napšašowanjow}}",
+ "tsb-all-languages-button-label": "Wšykne rěcy",
+ "tsb-search-requests": "Napšašowanja pśepytaś",
+ "tsb-accept-button-label": "Akceptěrowaś",
+ "tsb-reject-button-label": "Wótpokazaś",
+ "tsb-selected-count": "{{PLURAL:$1|$1 wužywaŕ jo se wubrał|$1 wužywarja stej se wubrałej|$1 wužywarje su se wubrali|$1 wužywarjow jo se wubrało}}",
+ "tsb-older-requests": "$1 {{PLURAL:$1|starše napšašowanje|staršej napšašowani|starše napšašowanja|staršych napšašowanjow}}",
+ "tsb-accept-all-button-label": "Wšykne akceptěrowaś",
+ "tsb-reject-all-button-label": "Wšykne wótpokazaś",
+ "tsb-user-posted-a-comment": "Žeden pśełožowaŕ",
+ "tsb-reminder-link-text": "E-mailowe dopomnjeśe pósłaś",
+ "tsb-didnt-make-any-translations": "Toś ten wužywaŕ njejo pśełožki pśewjadł.",
+ "tsb-translations-source": "Žrědło",
+ "tsb-translations-user": "Wužywarske pśełožki",
+ "tsb-translations-current": "Eksistěrujuce pśełožki",
+ "tsb-delete-userpage-summary": "Wužywarski bok grajkanišćowego wužywarja jo se wulašował",
+ "translationstash": "Witaj",
+ "translate-translationstash-welcome": "Witaj $1, sy {{GENDER:$1|nowy pśełožowaŕ|nowa pśełožowarka}}",
+ "translate-translationstash-welcome-note": "Wopóznaj se z pśełožowańskimi rědami. Pśełož někotare powěźeńki a dobydni se połne pśełožowarske pšawa, aby se na wašych projektach wobźělił.",
+ "translate-translationstash-initialtranslation": "Twój prědny pśełožk",
+ "translate-translationstash-translations": "$1 {{PLURAL:$1|wudopołnjony pśełožk|wudopołnjonej pśełožka|wudopołnjone pśełožki|wudopołnjonych pśełožkow}}",
+ "translate-translationstash-skip-button-label": "Drugi wopytaś",
+ "tsb-limit-reached-title": "Źěkujomy se za twóje pśełožki",
+ "tsb-limit-reached-body": "Sy pśełožowański limit za nowe pśełožowarje dojśpił. Naš team buźo twójo konto skóro pśeglědowaś a aktualizěrować. Pótom móžoš bźez limitow pśełožowaś.",
+ "tsb-no-requests-from-new-users": "Žedne napšašowanja wót nowych wužywarjow",
+ "tsb-create-user-page": "Zakładny wužywarski bok napórany",
+ "log-name-translatorsandbox": "Pśełožowańske grajkanišćo",
+ "log-description-translatorsandbox": "Protokol akcijow na wužywarjach pśełožowańskego grajkanišća",
+ "logentry-translatorsandbox-promoted": "$1 jo $3 za {{GENDER:$4|pśełožowarja|pśełožwarku}} {{GENDER:$2|pówušył|pówušyła}}",
+ "logentry-translatorsandbox-rejected": "$1 jo napšašowanje wót \"$3\" na pówušenje za {{GENDER:$2|pśełožowarja|pśełožowarku}} {{GENDER:$2|wótpokazał|wótpokazała}}",
+ "logentry-newusers-tsbpromoted": "Wužywarske konto $3 jo se pśez pówušenje z grajkanišća {{GENDER:$2|załožyło}}"
+}
diff --git a/Translate/i18n/sandbox/el.json b/Translate/i18n/sandbox/el.json
new file mode 100644
index 00000000..09cda0d9
--- /dev/null
+++ b/Translate/i18n/sandbox/el.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Stam.nikos"
+ ]
+ },
+ "managetranslatorsandbox": "Διαχείριση αμμοδοχείου μεταφραστή",
+ "tsb-filter-pending": "Εκκρεμή αιτήματα",
+ "tsb-reminder-title-generic": "Ολοκληρώστε την εισαγωγή σας για να γίνετε μεταφραστής",
+ "tsb-reminder-content-generic": "Γεια σας, $1,\n\nΕυχαριστούμε για την εγγραφή σας στο {{SITENAME}}.\n\nΑν ολοκληρώσετε τις δοκιμαστικές μεταφράσεις σας, οι διαχειριστές θα σας χορηγήσουν πλήρη μεταφραστική πρόσβαση αμέσως μετά.\n\nΠαρακαλούμε ελάτε να κάνετε μερικές ακόμα μεταφράσεις εδώ:\n$2\n\n$3,\nΤο προσωπικό του {{SITENAME}}",
+ "tsb-reminder-sending": "Η υπενθύμιση αποστέλλεται...",
+ "tsb-reminder-sent": "{{PLURAL:$1|Εστάλη $1 υπενθύμιση. Ώρα: $2.|Στάλθηκαν $1 υπενθυμίσεις. Ώρα αποστολής της τελευταίας: $2.}}",
+ "tsb-reminder-sent-new": "Στάλθηκε μία υπενθύμιση",
+ "tsb-reminder-failed": "Απέτυχε η αποστολή της υπενθύμισης",
+ "tsb-email-promoted-subject": "Τώρα είστε μεταφραστής στο {{SITENAME}}",
+ "log-name-translatorsandbox": "Αμμοδοχείο μετάφρασης",
+ "log-description-translatorsandbox": "Ένα αρχείο καταγραφής ενεργειών από χρήστες του αμμοδοχείου μετάφρασης"
+}
diff --git a/Translate/i18n/sandbox/en-gb.json b/Translate/i18n/sandbox/en-gb.json
new file mode 100644
index 00000000..7b34ba8b
--- /dev/null
+++ b/Translate/i18n/sandbox/en-gb.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Shirayuki"
+ ]
+ },
+ "translate-translationstash-welcome-note": "Become familiar with the translation tools. Translate some messages and get full-translator rights to participate in your favourite projects."
+}
diff --git a/Translate/i18n/sandbox/en.json b/Translate/i18n/sandbox/en.json
new file mode 100644
index 00000000..8db0e352
--- /dev/null
+++ b/Translate/i18n/sandbox/en.json
@@ -0,0 +1,56 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nike",
+ "Siebrand Mazeland",
+ "Santhosh Thottingal",
+ "Amire80",
+ "Zoranzoki21"
+ ]
+ },
+ "managetranslatorsandbox": "Manage translator sandbox",
+ "tsb-filter-pending": "Pending requests",
+ "tsb-reminder-title-generic": "Complete your introduction to become a translator",
+ "tsb-reminder-content-generic": "Hi $1,\n\nThanks for registering with {{SITENAME}}.\n\nIf you complete your test translations, the administrators will grant you full translation access soon afterwards.\n\nPlease come over and make some more translations here:\n$2\n\n$3,\n{{SITENAME}} staff",
+ "tsb-reminder-sending": "Sending the reminder...",
+ "tsb-reminder-sent": "{{PLURAL:$1|Sent $1 reminder. Time: $2.|Sent $1 reminders. Time of the last one: $2.}}",
+ "tsb-reminder-sent-new": "Sent a reminder",
+ "tsb-reminder-failed": "Sending the reminder failed",
+ "tsb-email-promoted-subject": "You are now a translator at {{SITENAME}}",
+ "tsb-email-promoted-body": "Hi {{GENDER:$1|$1}},\n\nCongratulations! I checked the test translations that you made at {{SITENAME}} and gave you full translator rights.\n\nCome to {{SITENAME}} to continue translating now, and every day:\n$2\n\nWelcome, and thank you for your contributions!\n\n{{GENDER:$3|$3}},\n{{SITENAME}} staff",
+ "tsb-email-rejected-subject": "Your application to be a translator at {{SITENAME}} was rejected",
+ "tsb-email-rejected-body": "Hi {{GENDER:$1|$1}},\n\nThank you for applying as a translator at {{SITENAME}}. I regret to inform you that I have rejected your application, because the quality of your translations did not meet the requirements.\n\nIf you think that your application was rejected by mistake, please try to apply again as a translator at {{SITENAME}}. You can sign up here:\n$2\n\n{{GENDER:$3|$3}},\n{{SITENAME}} staff",
+ "tsb-request-count": "$1 {{PLURAL:$1|request|requests}}",
+ "tsb-all-languages-button-label": "All languages",
+ "tsb-search-requests": "Search pending requests",
+ "tsb-accept-button-label": "Accept",
+ "tsb-reject-button-label": "Reject",
+ "tsb-selected-count": "{{PLURAL:$1|$1 user selected|$1 users selected}}",
+ "tsb-older-requests": "$1 older {{PLURAL:$1|request|requests}}",
+ "tsb-accept-all-button-label": "Accept all",
+ "tsb-reject-all-button-label": "Reject all",
+ "tsb-user-posted-a-comment": "Not a translator",
+ "tsb-reminder-link-text": "Send email reminder",
+ "tsb-didnt-make-any-translations": "This user did not make any translations.",
+ "tsb-translations-source": "Source",
+ "tsb-translations-user": "{{GENDER:$1|User}} translations",
+ "tsb-translations-current": "Existing translations",
+ "tsb-delete-userpage-summary": "Deleting the user page of a sandbox user",
+ "tsb-reject-confirmation": "{{PLURAL:$1|User|Users}} rejected",
+ "tsb-accept-confirmation": "{{PLURAL:$1|User|Users}} accepted",
+ "translationstash": "Welcome",
+ "translate-translationstash-welcome": "Welcome {{GENDER:$1|$1}}, you are a new translator",
+ "translate-translationstash-welcome-note": "Become familiar with the translation tools. Translate some messages and get full-translator rights to participate in your favorite projects.",
+ "translate-translationstash-initialtranslation": "Your initial translation",
+ "translate-translationstash-translations": "$1 completed {{PLURAL:$1|translation|translations}}",
+ "translate-translationstash-skip-button-label": "Try another",
+ "tsb-limit-reached-title": "Thanks for your translations",
+ "tsb-limit-reached-body": "You reached the translation limit for new translators.\nOur team will verify and upgrade your account soon.\nThen you will be able to translate without limits.",
+ "tsb-no-requests-from-new-users": "No requests from new users",
+ "tsb-create-user-page": "Created basic user page",
+ "log-name-translatorsandbox": "Translation sandbox log",
+ "log-description-translatorsandbox": "A log of actions on translation sandbox users",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|promoted}} $3 to {{GENDER:$4|translator}}",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|rejected}} the request from \"$3\" to become a translator",
+ "logentry-newusers-tsbpromoted": "User account $3 was {{GENDER:$2|created}} by promotion from sandbox"
+}
diff --git a/Translate/i18n/sandbox/eo.json b/Translate/i18n/sandbox/eo.json
new file mode 100644
index 00000000..a02fc3cf
--- /dev/null
+++ b/Translate/i18n/sandbox/eo.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mirin"
+ ]
+ },
+ "tsb-all-languages-button-label": "Ĉiuj lingvoj",
+ "tsb-search-requests": "Serĉi petojn",
+ "tsb-accept-button-label": "Akcepti",
+ "tsb-reject-button-label": "Malakcepti",
+ "tsb-accept-all-button-label": "Akcepti ĉiujn",
+ "tsb-reject-all-button-label": "Malakcepti ĉiujn",
+ "tsb-user-posted-a-comment": "Ne estas tradukanto",
+ "tsb-didnt-make-any-translations": "Tiu uzanto ne tradukis ion ajn.",
+ "tsb-translations-source": "Fonto",
+ "translationstash": "Bonvenon",
+ "tsb-limit-reached-title": "Dankon pro viaj tradukoj"
+}
diff --git a/Translate/i18n/sandbox/es.json b/Translate/i18n/sandbox/es.json
new file mode 100644
index 00000000..9ed742f8
--- /dev/null
+++ b/Translate/i18n/sandbox/es.json
@@ -0,0 +1,54 @@
+{
+ "@metadata": {
+ "authors": [
+ "Carlosmg.dg",
+ "Fitoschido",
+ "Macofe"
+ ]
+ },
+ "managetranslatorsandbox": "Gestionar la zona de pruebas del traductor",
+ "tsb-filter-pending": "Solicitudes pendientes",
+ "tsb-reminder-title-generic": "Completa tu introducción para volverte un traductor",
+ "tsb-reminder-content-generic": "Hola, $1:\n\nGracias por registrarte en {{SITENAME}}.\n\nSi completas tus traducciones de prueba, los administradores te otorgarán los permisos de traducción en breve.\n\nTraduce un poco más, aquí:\n$2\n\n$3,\nPersonal de {{SITENAME}}",
+ "tsb-reminder-sending": "Enviando el recordatorio…",
+ "tsb-reminder-sent": "Se {{PLURAL:$1|envió $1 recordatorio $2|enviaron $1 recordatorios, el último $2}}.",
+ "tsb-reminder-sent-new": "Se envió un recordatorio",
+ "tsb-reminder-failed": "Falló el envío del recordatorio",
+ "tsb-email-promoted-subject": "Ahora tienes permisos de traductor en {{SITENAME}}",
+ "tsb-email-promoted-body": "Hola, {{GENDER:$1|$1}}:\n\n¡Enhorabuena! He revisado las traducciones de prueba que realizaste en {{SITENAME}} y te he otorgado los permisos de traducción.\n\nVen a {{SITENAME}} para seguir colaborando siempre que quieras:\n$2\n\nTe damos la bienvenida, y gracias por tus contribuciones.\n\n{{GENDER:$3|$3}},\nPersonal de {{SITENAME}}",
+ "tsb-email-rejected-subject": "Se rechazó tu solicitud para convertirte en traductor en {{SITENAME}}",
+ "tsb-email-rejected-body": "Hola, {{GENDER:$1|$1}}:\n\nGracias por solicitar ser un traductor en {{SITENAME}}. Lamento informarte que he rechazado tu solicitud, porque la calidad de tus traducciones no cumple con los requisitos.\n\nSi piensas que tu solicitud se rechazó por error, intenta solicitar nuevamente ser un traductor en {{SITENAME}}. Puedes registrarte aquí:\n$2\n\n{{GENDER:$3|$3}},\nPersonal de {{SITENAME}}",
+ "tsb-request-count": "$1 {{PLURAL:$1|solicitud|solicitudes}}",
+ "tsb-all-languages-button-label": "Todos los idiomas",
+ "tsb-search-requests": "Buscar solicitudes pendientes",
+ "tsb-accept-button-label": "Aceptar",
+ "tsb-reject-button-label": "Rechazar",
+ "tsb-selected-count": "{{PLURAL:$1|$1 usuario seleccionado|$1 usuarios seleccionados}}",
+ "tsb-older-requests": "$1 solicitud{{PLURAL:$1| anterior|es anteriores}}",
+ "tsb-accept-all-button-label": "Aceptar todos",
+ "tsb-reject-all-button-label": "Rechazar todos",
+ "tsb-user-posted-a-comment": "No es traductor",
+ "tsb-reminder-link-text": "Enviar recordatorio por correo",
+ "tsb-didnt-make-any-translations": "Este usuario no ha realizado ninguna traducción.",
+ "tsb-translations-source": "Origen",
+ "tsb-translations-user": "Traducciones {{GENDER:$1|del usuario|de la usuaria}}",
+ "tsb-translations-current": "Traducciones existentes",
+ "tsb-delete-userpage-summary": "Eliminar la página de usuario en la zona de pruebas",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Usuario rechazado|Usuarios rechazados}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Usuario aceptado|Usuarios aceptados}}",
+ "translationstash": "Te damos la bienvenida",
+ "translate-translationstash-welcome": "{{GENDER:$1|Bienvenido|Bienvenida}}, $1. Ahora eres {{GENDER:$1|un traductor|una traductora}}",
+ "translate-translationstash-welcome-note": "Familiarízate con las herramientas de traducción. Traduce algunos mensajes y obtén los permisos completos de traducción para participar en tus proyectos favoritos.",
+ "translate-translationstash-initialtranslation": "Tu primera traducción",
+ "translate-translationstash-translations": "$1 {{PLURAL:$1|traducción completada|traducciones completadas}}",
+ "translate-translationstash-skip-button-label": "Prueba con otra",
+ "tsb-limit-reached-title": "Gracias por tus traducciones",
+ "tsb-limit-reached-body": "Alcanzaste el límite de traducción para nuevos traductores.\nNuestro equipo verificará y actualizará tu cuenta pronto.\nLuego serás capaz de traducir sin límites.",
+ "tsb-no-requests-from-new-users": "No hay solicitudes de usuarios nuevos",
+ "tsb-create-user-page": "Página de usuario básica creada",
+ "log-name-translatorsandbox": "Registro de la zona de pruebas de traducción",
+ "log-description-translatorsandbox": "Un registro de acciones de usuarios en zona de pruebas de traducción",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|promovió}} $3 a {{GENDER:$4|traductor|traductora}}",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|rechazó}} la solicitud de «$3» para convertirse en traductor",
+ "logentry-newusers-tsbpromoted": "Se {{GENDER:$2|creó}} la cuenta $3 promovida de la zona de pruebas"
+}
diff --git a/Translate/i18n/sandbox/et.json b/Translate/i18n/sandbox/et.json
new file mode 100644
index 00000000..75eef9f0
--- /dev/null
+++ b/Translate/i18n/sandbox/et.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kareyac",
+ "Pikne"
+ ]
+ },
+ "tsb-accept-button-label": "Nõustu",
+ "translationstash": "Tere tulemast"
+}
diff --git a/Translate/i18n/sandbox/eu.json b/Translate/i18n/sandbox/eu.json
new file mode 100644
index 00000000..05c6175e
--- /dev/null
+++ b/Translate/i18n/sandbox/eu.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sator",
+ "Subi"
+ ]
+ },
+ "tsb-reminder-sent": "{{PLURAL:$1|Sent $1 reminder. Time: $2.|Sent $1 reminders. Time of the last one: $2.}}",
+ "tsb-reminder-sent-new": "Gogorarazpena bidali",
+ "tsb-request-count": "{{PLURAL:$1|Eskaera bat|$1 eskaera}}",
+ "tsb-all-languages-button-label": "Hizkuntza guztiak",
+ "tsb-accept-button-label": "Onartu",
+ "tsb-reject-button-label": "Ukatu",
+ "tsb-selected-count": "{{PLURAL:$1|$1 user selected|$1 lankide aukeratuak}}",
+ "tsb-accept-all-button-label": "Dena onartu",
+ "tsb-reject-all-button-label": "Dena ukatu",
+ "tsb-reminder-link-text": "Gogorarazpen posta bidali",
+ "tsb-didnt-make-any-translations": "Lankide honek ez du itzulpenik egin",
+ "tsb-translations-source": "Iturria",
+ "tsb-translations-user": "{{GENDER:$1|Lankidearen}} itzulpen",
+ "translationstash": "Ongi etorri",
+ "translate-translationstash-welcome": "Ongi etorri {{GENDER:$1|$1}}, itzultzaile berria zara",
+ "translate-translationstash-initialtranslation": "Zure hasierako itzulpena",
+ "translate-translationstash-skip-button-label": "Probatu beste bat",
+ "tsb-limit-reached-title": "Eskerrik asko zure itzulpenengatik"
+}
diff --git a/Translate/i18n/sandbox/fa.json b/Translate/i18n/sandbox/fa.json
new file mode 100644
index 00000000..102397b1
--- /dev/null
+++ b/Translate/i18n/sandbox/fa.json
@@ -0,0 +1,61 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alirezaaa",
+ "Armin1392",
+ "Beginneruser",
+ "Ebraminio",
+ "Huji",
+ "Jeeputer",
+ "Ladsgroup",
+ "Mjbmr",
+ "Physicsch",
+ "Reza1615"
+ ]
+ },
+ "managetranslatorsandbox": "مدیریت محیط آزمایش مترجم",
+ "tsb-filter-pending": "درخواست‌های در حال انتظار",
+ "tsb-reminder-title-generic": "معرفی‌ خود را کامل کنید تا یک مترجم شوید",
+ "tsb-reminder-content-generic": "سلام $1،\n\nبابت ثبت‌نام‌کردن در {{SITENAME}} متشکریم.\n\nاگر شما ترجمه‌های آزمایشی خودتان را کامل کنید، مدیران به‌زودی بعد از آن به شما دسترسی کامل ترجمه را اعطا خواهند کرد. \n\nلطفاً به پیوند زیر بروید و قدری ترجمه بیشتر در آنجا درست کنیدː\n\n$2\n\n$3،\n\nکارکنان {{SITENAME}}",
+ "tsb-reminder-sending": "در حال فرستادن یادآوری...",
+ "tsb-reminder-sent": "{{PLURAL:$1|$1 یادآوری ارسال کرد. زمان: $2.|$1 یادآوری‌ ارسال کرد. زمان آخرین مورد: $2.}}",
+ "tsb-reminder-sent-new": "ارسال یک یادآوری",
+ "tsb-reminder-failed": "ارسال‌کردن یادآوری شکست خورد",
+ "tsb-email-promoted-subject": "شما الان یک مترجم در {{SITENAME}} هستید",
+ "tsb-email-promoted-body": "سلام {{GENDER:$1|$1}}،\n\nتبریکǃ من ترجمه‌های امتحانی که شما در {{SITENAME}} ایجاد کردید را بررسی کردم و به شما تمام امتیاز مترجم را دادم.\n\nاکنون به {{SITENAME}} برای ادامه ترجمه بیایید، و هر روزː \n$2\n\nخوش‌‌آمدید، و از شما برای کمک تشکر می کنمǃ\n{{GENDER:$3|$3}}،\n{{SITENAME}} کارکنان",
+ "tsb-email-rejected-subject": "درخواست شما برای مترجم شدن در {{SITENAME}} رد شد",
+ "tsb-email-rejected-body": "سلام {{GENDER:$1|$1}}،\n\nاز شما برای درخواست به عنوان مترجم در {{SITENAME}} متشکریم. با عرض تأسف باید به شما اطلاع دهم که درخواست شما را رد کردم، زیرا کیفیت ترجمه‌های شما مناسب تقاضاهای ما نیست.\n\nاگر فکر می‌کنید که درخواست شما اشتباهاً رد شده است، لطفاً برای درخواست مجدد به عنوان مترجم در {{SITENAME}} تلاش کنید. شما می‌توانید اینجا ثبت‌نام کنیدː\n$2\n\n{{GENDER:$3|$3}}،\nکارکنان {{SITENAME}}",
+ "tsb-request-count": "$1 {{PLURAL:$1|درخواست}}",
+ "tsb-all-languages-button-label": "همهٔ زبان‌ها",
+ "tsb-search-requests": "جستجوی درخواست‌های درحال انتظار",
+ "tsb-accept-button-label": "پذیرفتن",
+ "tsb-reject-button-label": "رد کردن",
+ "tsb-selected-count": "{{PLURAL:$1|$1 کاربر انتخاب شد|$1 کاربر انتخاب شدند}}",
+ "tsb-older-requests": "$1 {{PLURAL:$1|درخواست}} قدیمی‌تر",
+ "tsb-accept-all-button-label": "پذیرفتن همه",
+ "tsb-reject-all-button-label": "رد کردن همه",
+ "tsb-user-posted-a-comment": "مترجمی نیست",
+ "tsb-reminder-link-text": "ارسال ایمیل یادآوری",
+ "tsb-didnt-make-any-translations": "این کاربر هیچ ترجمه‌ای ایجاد نکرده است.",
+ "tsb-translations-source": "منبع",
+ "tsb-translations-user": "ترجمه‌های {{GENDER:$1|کاربر}}",
+ "tsb-translations-current": "ترجمه‌های موجود",
+ "tsb-delete-userpage-summary": "درحال حذف کردن صفحه کاربر از یک کابر محیط آزمایش",
+ "tsb-reject-confirmation": "{{PLURAL:$1|کاربر رد شد|کاربران رد شدند}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|کاربر پذیرفته شد|کاربر پذیرفته شدند}}",
+ "translationstash": "خوش آمدید",
+ "translate-translationstash-welcome": "{{GENDER:$1|$1}} خوش آمدید، شما مترجمی جدید هستید",
+ "translate-translationstash-welcome-note": "با ابزارهای ترجمه آشنا شوید. چند پیام را ترجمه کنید و امتیازات کامل ترجمه را به دست بیاورید تا در پروژه‌های مورد علاقهٔ خود شرکت کنید.",
+ "translate-translationstash-initialtranslation": "ترجمه اولیهٔ شما",
+ "translate-translationstash-translations": "$1 {{PLURAL:$1|ترجمه}} تکمیل شده است",
+ "translate-translationstash-skip-button-label": "بار دیگر تلاش کنید",
+ "tsb-limit-reached-title": "تشکر بابت ترجمه‌های شما",
+ "tsb-limit-reached-body": "شما به حد ترجمه برای مترجمان جدید دست یافتید.\nتیم ما به زودی حساب شما را تأیید و به‌روزرسانی خواهد کرد.\nسپس شما قادر به ترجمهٔ بدون محدودیت خواهید بود.",
+ "tsb-no-requests-from-new-users": "هیچ درخواستی از کاربران جدید وجود ندارد",
+ "tsb-create-user-page": "صفحهٔ کاربری اولیه ایجاد شد",
+ "log-name-translatorsandbox": "سیاهه‌ٔ محیط آزمایش ترجمه",
+ "log-description-translatorsandbox": "یک سیاههٔ از کنش‌های محیط آزمایش ترجمهٔ کاربران",
+ "logentry-translatorsandbox-promoted": "$1، $3 را به {{GENDER:$4|مترجم}} {{GENDER:$2|ترفیع داد}}",
+ "logentry-translatorsandbox-rejected": "$1 درخواست «$3» را برای مترجم شدن {{GENDER:$2|رد کرد}}",
+ "logentry-newusers-tsbpromoted": "حساب کاربری $3 با تبلیغ از محیط آزمایشی {{GENDER:$2|ایجاد شده}} بود"
+}
diff --git a/Translate/i18n/sandbox/fi.json b/Translate/i18n/sandbox/fi.json
new file mode 100644
index 00000000..03569f03
--- /dev/null
+++ b/Translate/i18n/sandbox/fi.json
@@ -0,0 +1,56 @@
+{
+ "@metadata": {
+ "authors": [
+ "Crt",
+ "Nike",
+ "Pyscowicz",
+ "Uusijani",
+ "Valtlait"
+ ]
+ },
+ "managetranslatorsandbox": "Kääntäjähakemusten hallinta",
+ "tsb-filter-pending": "Avoimet hakemukset",
+ "tsb-reminder-title-generic": "Suorita harjoitus loppuun, jotta sinut voidaan hyväksyä kääntäjäksi",
+ "tsb-reminder-content-generic": "Hei $1,\n\nKiitos rekisteröitymisestä {{GRAMMAR:illative|{{SITENAME}}}}.\n\nJos saatat loppuun testikäännöksesi, ylläpitäjät antavat sinulle täyden pääsyn kääntämiseen pian sen jälkeen.\n\nTule takaisin ja tee lisää käännöksiä täällä:\n$2\n\n$3,\n{{GRAMMAR:genitive|{{SITENAME}}}} henkilökunta",
+ "tsb-reminder-sending": "Lähetetään muistutusta...",
+ "tsb-reminder-sent": "{{PLURAL:$1|$1 muistutus lähetetty $2.|$1 muistutusta lähetetty. Viimeisin $2.}}",
+ "tsb-reminder-sent-new": "Muistutus lähetetty",
+ "tsb-reminder-failed": "Muistutuksen lähettäminen epäonnistui",
+ "tsb-email-promoted-subject": "Sinut on hyväksytty kääntäjäksi {{GRAMMAR:inessive|{{SITENAME}}}}",
+ "tsb-email-promoted-body": "Hei {{GENDER:$1|$1}},\n\nOnneksi olkoon! Tarkistin {{GRAMMAR:inessive|{{SITENAME}}}} tekemäsi testikäännökset ja annoin sinulle täydet käännösoikeudet.\n\nTule {{GRAMMAR:illative|{{SITENAME}}}} jatkaaksesi kääntämistä nyt, ja joka päivä:\n$2\n\nTervetuloa, ja kiitos osallistumisestasi!\n\n{{GENDER:$3|$3}},\n{{GRAMMAR:genitive|{{SITENAME}}}} henkilökunta",
+ "tsb-email-rejected-subject": "Hakemuksesi kääntäjäksi {{GRAMMAR:inessive|{{SITENAME}}}} hylättiin",
+ "tsb-email-rejected-body": "Hei {{GENDER:$1|$1}},\n\nKiitos hakemuksestasi kääntäjänä {{GRAMMAR:inessive|{{SITENAME}}}}. Pahoittelen ilmoittaakseni sinulle että olen hylännyt hakemuksesi, koska käännöstesi laatu ei täyttänyt vaatimuksia.\n\nJos luulet, että hakemuksesi hylättiin vahingossa, yritä hakea uudelleen kääntäjäksi {{GRAMMAR:inessive|{{SITENAME}}}}. Voit rekisteröityä täällä: \n$2\n\n{{GENDER:$3|$3}},\n{{GRAMMAR:genitive|{{SITENAME}}}} henkilökunta",
+ "tsb-request-count": "$1 {{PLURAL:$1|hakemus|hakemusta}}",
+ "tsb-all-languages-button-label": "Kaikki kielet",
+ "tsb-search-requests": "Hae odottavia pyyntöjä",
+ "tsb-accept-button-label": "Hyväksy",
+ "tsb-reject-button-label": "Hylkää",
+ "tsb-selected-count": "{{PLURAL:$1|$1 käyttäjä|$1 käyttäjää}} valittu",
+ "tsb-older-requests": "$1 {{PLURAL:$1|vanhempi hakemus|vanhempaa hakemusta}}",
+ "tsb-accept-all-button-label": "Hyväksy kaikki",
+ "tsb-reject-all-button-label": "Hylkää kaikki",
+ "tsb-user-posted-a-comment": "Ei kääntäjä",
+ "tsb-reminder-link-text": "Lähetä muistutus",
+ "tsb-didnt-make-any-translations": "Käyttäjä ei ole tehnyt käännöksiä.",
+ "tsb-translations-source": "Lähde",
+ "tsb-translations-user": "{{GENDER:$1|Käyttäjän käännökset}}",
+ "tsb-translations-current": "Nykyinen käännös",
+ "tsb-delete-userpage-summary": "Hiekkalaatikkokäyttäjän käyttäsivun poisto.",
+ "tsb-reject-confirmation": "{{PLURAL:$1|käyttäjä|käyttäjää}} hylätty",
+ "tsb-accept-confirmation": "{{PLURAL:$1|käyttäjä|käyttäjää}} hyväksytty",
+ "translationstash": "Tervetuloa",
+ "translate-translationstash-welcome": "Tervetuloa {{GENDER:$1|$1}}. Olet uusi kääntäjä.",
+ "translate-translationstash-welcome-note": "Tutustu käännöstyökaluihin. Käännä muutamia viestejä, niin saat täydet käännösoikeudet lempiprojektiesi kääntämiseen.",
+ "translate-translationstash-initialtranslation": "Ensimmäinen käännöksesi",
+ "translate-translationstash-translations": "$1 {{PLURAL:$1|valmis käännös|valmista käännöstä}}",
+ "translate-translationstash-skip-button-label": "Ohita",
+ "tsb-limit-reached-title": "Kiitos käännöksistäsi",
+ "tsb-limit-reached-body": "Saavutit uusien kääntäjien käännösrajan. Tiimimme vahvistaa ja päivittää tilisi pian. Sen jälkeen voit kääntää rajattomasti.",
+ "tsb-no-requests-from-new-users": "Ei uusia hakemuksia.",
+ "tsb-create-user-page": "Luotu yksinkertainen käyttäjäsivu",
+ "log-name-translatorsandbox": "Käännöshiekkalaatikon loki",
+ "log-description-translatorsandbox": "Loki käännöshiekkalaatikon käyttäjien toimista",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|ylensi}} käyttäjän $3 {{GENDER:$4|kääntäjäksi}}",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|hylkäsi}} pyynnön käyttäjältä ”$3” ryhtyä kääntäjäksi",
+ "logentry-newusers-tsbpromoted": "Käyttäjätili $3 {{GENDER:$2|luotiin}} ylentämällä hiekkalaatikosta"
+}
diff --git a/Translate/i18n/sandbox/fit.json b/Translate/i18n/sandbox/fit.json
new file mode 100644
index 00000000..37f21722
--- /dev/null
+++ b/Translate/i18n/sandbox/fit.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Pyscowicz"
+ ]
+ },
+ "tsb-didnt-make-any-translations": "Käyttäjä ei ole tehnyt käänöksiä.",
+ "tsb-translations-source": "Lähe",
+ "tsb-translations-user": "{{GENDER:$1|Käyttäjän käänökset}}",
+ "tsb-translations-current": "Nykynen käänös",
+ "log-name-translatorsandbox": "Käänössantalootan loki"
+}
diff --git a/Translate/i18n/sandbox/fr.json b/Translate/i18n/sandbox/fr.json
new file mode 100644
index 00000000..235dc1ba
--- /dev/null
+++ b/Translate/i18n/sandbox/fr.json
@@ -0,0 +1,66 @@
+{
+ "@metadata": {
+ "authors": [
+ "Crochet.david",
+ "Derugon",
+ "Framafan",
+ "Gomoko",
+ "Linedwell",
+ "McDutchie",
+ "NemesisIII",
+ "Nobody",
+ "Pathe",
+ "Thibaut120094",
+ "TomT0m",
+ "Urhixidur",
+ "Verdy p",
+ "Wladek92",
+ "Wyz"
+ ]
+ },
+ "managetranslatorsandbox": "Gérer le bac à sable de traduction",
+ "tsb-filter-pending": "Requêtes en attente",
+ "tsb-reminder-title-generic": "Veuillez compléter votre présentation de candidature pour devenir un traducteur",
+ "tsb-reminder-content-generic": "Bonjour $1,\n\nMerci de vous être inscrit sur {{SITENAME}}.\n\nSi vous achevez vos traductions de test, les administrateurs vous accorderont peu après un plein accès aux traductions.\n\nVeuillez aller ici et faire quelques traductions supplémentaires :\n$2\n\n$3,\nL’équipe de {{SITENAME}}",
+ "tsb-reminder-sending": "Envoi du rappel en cours...",
+ "tsb-reminder-sent": "{{PLURAL:$1|$1 rappel envoyé le $2|$1 rappels envoyés. Dernier rappel : $2}}",
+ "tsb-reminder-sent-new": "Rappel envoyé",
+ "tsb-reminder-failed": "L’envoi du rappel a échoué",
+ "tsb-email-promoted-subject": "Vous êtes maintenant traducteur ou traductrice sur {{SITENAME}}",
+ "tsb-email-promoted-body": "Bonjour {{GENDER:$1|}}$1,\n\nFélicitations ! J’ai vérifié les traductions d’essai que vous avez effectuées sur {{SITENAME}} et je vous ai donné les droits complets de traduct{{GENDER:$1|eur|rice}}.\n\nVenez sur {{SITENAME}} pour continuer à traduire dès maintenant et tous les jours :\n$2\n\nBienvenue et merci pour vos contributions !\n\n{{GENDER:$3|}}$3,\nmembre de l’équipe de {{SITENAME}}.",
+ "tsb-email-rejected-subject": "Votre candidature pour devenir traducteur ou traductrice sur {{SITENAME}} a été rejetée",
+ "tsb-email-rejected-body": "Bonjour {{GENDER:$1|}}$1,\n\nMerci de votre candidature comme traducteur sur {{SITENAME}}. J’ai le regret de vous informer que j’ai rejeté votre candidature, car la qualité de vos traductions ne correspond pas aux attentes.\n\nSi vous pensez que votre candidature a été rejetée par erreur, veuillez refaire une demande comme traducteur sur {{SITENAME}}. Vous pouvez vous inscrire ici :\n$2\n\n{{GENDER:$3|}}$3,\nmembre de l’équipe de {{SITENAME}}.",
+ "tsb-request-count": "$1 demande{{PLURAL:$1||s}}",
+ "tsb-all-languages-button-label": "Toutes les langues",
+ "tsb-search-requests": "Chercher les requêtes en cours",
+ "tsb-accept-button-label": "Accepter",
+ "tsb-reject-button-label": "Rejeter",
+ "tsb-selected-count": "$1 utilisateur{{PLURAL:$1||s}} sélectionné{{PLURAL:$1||s}}",
+ "tsb-older-requests": "$1 requête{{PLURAL:$1||s}} plus ancienne{{PLURAL:$1||s}}",
+ "tsb-accept-all-button-label": "Tout accepter",
+ "tsb-reject-all-button-label": "Tout rejeter",
+ "tsb-user-posted-a-comment": "Pas un traducteur ou une traductrice",
+ "tsb-reminder-link-text": "Envoyer un courriel de rappel",
+ "tsb-didnt-make-any-translations": "Cet utilisateur n’a fait aucune traduction.",
+ "tsb-translations-source": "Source",
+ "tsb-translations-user": "Traductions de l’utilisat{{GENDER:$1|eur|rice}}",
+ "tsb-translations-current": "Traductions existantes",
+ "tsb-delete-userpage-summary": "Suppression de la page d’utilisateur d’un utilisateur du bac à sable",
+ "tsb-reject-confirmation": "Utilisateur{{PLURAL:$1||s}} rejeté{{PLURAL:$1||s}}",
+ "tsb-accept-confirmation": "Utilisateur{{PLURAL:$1||s}} accepté{{PLURAL:$1||s}}",
+ "translationstash": "Bienvenue",
+ "translate-translationstash-welcome": "Bienvenue $1, vous êtes un{{GENDER:$1||e}} nouve{{GENDER:$1|au|elle}} traduct{{GENDER:$1|eur|rice}}",
+ "translate-translationstash-welcome-note": "Familiarisez-vous avec les outils de traduction. Traduisez quelques messages et obtenez les droits complets de traducteur pour participer à vos projets favoris.",
+ "translate-translationstash-initialtranslation": "Votre traduction initiale",
+ "translate-translationstash-translations": "Vous avez achevé $1 traduction{{PLURAL:$1||s}}.",
+ "translate-translationstash-skip-button-label": "Essayer une autre",
+ "tsb-limit-reached-title": "Merci pour vos traductions",
+ "tsb-limit-reached-body": "Vous avez atteint la limite de traductions pour les nouveaux traducteurs.\nNotre équipe va vérifier et mettre à niveau votre compte bientôt.\nEnsuite, vous serez en mesure de traduire sans limites.",
+ "tsb-no-requests-from-new-users": "Aucune requête de nouveaux utilisateurs",
+ "tsb-create-user-page": "Page d’utilisateur de base créée",
+ "log-name-translatorsandbox": "Journal du bac à sable de traduction",
+ "log-description-translatorsandbox": "Un journal des actions sur les utilisateurs du bac à sable de traduction",
+ "logentry-translatorsandbox-promoted": "$1{{GENDER:$2|}} a promu $3 en traduct{{GENDER:$4|eur|rice}}.",
+ "logentry-translatorsandbox-rejected": "$1{{GENDER:$2|}} a rejeté la demande de « $3 » pour devenir traduct·eur·rice",
+ "logentry-newusers-tsbpromoted": "Le compte de l’utilisat·eur·rice $3 a été créé par promotion du bac à sable par {{GENDER:$2|}}$2"
+}
diff --git a/Translate/i18n/sandbox/fy.json b/Translate/i18n/sandbox/fy.json
new file mode 100644
index 00000000..b9de7aff
--- /dev/null
+++ b/Translate/i18n/sandbox/fy.json
@@ -0,0 +1,54 @@
+{
+ "@metadata": {
+ "authors": [
+ "PiefPafPier",
+ "Robin van der Vliet",
+ "Robin0van0der0vliet"
+ ]
+ },
+ "managetranslatorsandbox": "Oersetterssânbak beheare",
+ "tsb-filter-pending": "Net-ôfdiene oanfragen",
+ "tsb-reminder-title-generic": "Meitsje jo yntroduksje dien om oersetter te wurden",
+ "tsb-reminder-content-generic": "Goeie $1,\n\nTankjewol foar jo ynskriuwing by {{GRAMMAR:lidw|{{SITENAME}}}}.\n\nAt jo jo testoersettings dienmeitsje, sille de behearders jo sa gau mooglik dêrnei folsleine oersettagong jaan.\n\nKom del en meitsje hjir noch in pear oersettings:\n$2\n\n$3,\nStêf {{SITENAME}}",
+ "tsb-reminder-sending": "Werinnering ferstjoeren ...",
+ "tsb-reminder-sent": "{{PLURAL:$1|$1 werinnering ferstjoerd. Tiid: $2.|$1 werinnerings ferstjoerd. Tiid fan 'e lêste: $2.}}",
+ "tsb-reminder-sent-new": "Werinnering ferstjoerd",
+ "tsb-reminder-failed": "Werinnering ferstjoeren mislearre",
+ "tsb-email-promoted-subject": "Jo binne no oersetter by {{GRAMMAR:lidw|{{SITENAME}}}}",
+ "tsb-email-promoted-body": "Goeie {{GENDER:$1|$1}},\n\nLokwinske! Ik haw de testoersettings dy't jo by {{GRAMMAR:lidw|{{SITENAME}}}} makke hawwe neisjoen, en haw jo de folsleine oersettersrjochten jûn.\n\nKom nei {{GRAMMAR:lidw|{{SITENAME}}}} om fierder te gean mei oersetten, no of hokker dei dan ek:\n$2\n\nWolkom, en tankjewol foar jo bydragen!\n\n{{GENDER:$3|$3}},\nStêf {{SITENAME}}",
+ "tsb-email-rejected-subject": "Jo oanmelding om oersetter te wurden by {{GRAMMAR:lidw|{{SITENAME}}}} is ôfwiisd",
+ "tsb-email-rejected-body": "Goeie {{GENDER:$1|$1}},\n\nTankjewol foar it oanmelden as oersetter by {{GRAMMAR:lidw|{{SITENAME}}}}. Spitigernôch moat ik jo meidiele dat ik jo oanmelding ôfwiisd haw, omreden dat de kwaliteit fan jo oersettings net oan 'e easken foldocht.\n\nAt jo tinke dat jo oanmelding by fersin ôfwiisd is, besykje dan nochris en meld jo oan as oersetter. Jo kinne hjir ynskriuwe:\n$2\n\n{{GENDER:$3|$3}},\nStêf {{SITENAME}}",
+ "tsb-request-count": "$1 {{PLURAL:$1|oanfraach|oanfragen}}",
+ "tsb-all-languages-button-label": "Alle talen",
+ "tsb-search-requests": "Net-ôfdiene oanfragen trochsykje",
+ "tsb-accept-button-label": "Goedkarre",
+ "tsb-reject-button-label": "Ofwize",
+ "tsb-selected-count": "{{PLURAL:$1|$1 meidogger selektearre|$1 meidoggers selektearre}}",
+ "tsb-older-requests": "$1 âldere {{PLURAL:$1|oanfraach|oanfragen}}",
+ "tsb-accept-all-button-label": "Alles goedkarre",
+ "tsb-reject-all-button-label": "Alles ôfwize",
+ "tsb-user-posted-a-comment": "Gjin oersetter",
+ "tsb-reminder-link-text": "Werinnering e-maile",
+ "tsb-didnt-make-any-translations": "Dizze meidogger hat gjin oersettings makke.",
+ "tsb-translations-source": "Grûntekst",
+ "tsb-translations-user": "Oersettings fan 'e {{GENDER:$1|meidogger}}",
+ "tsb-translations-current": "Besteande oersettings",
+ "tsb-delete-userpage-summary": "Meidoggerside fan in sânbakmeidogger wiske",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Meidogger|Meidoggers}} ôfwiisd",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Meidogger|Meidoggers}} goedkard",
+ "translationstash": "Wolkom",
+ "translate-translationstash-welcome": "Wolkom, $1. Jo binne in nije {{GENDER:$1|oersetter|oersetster}}",
+ "translate-translationstash-welcome-note": "Meitsje jo it oersetark eigen. Set in stikmannich berjochten oer, en krij de folsleine oersettersrjochten foar jo favorite projekten.",
+ "translate-translationstash-initialtranslation": "Jo earste oersetting",
+ "translate-translationstash-translations": "$1 {{PLURAL:$1|oersetting|oersettings}} makke",
+ "translate-translationstash-skip-button-label": "Oarenien besykje",
+ "tsb-limit-reached-title": "Tankjewol foar jo oersettings",
+ "tsb-limit-reached-body": "Jo hawwe de oersetbeheining foar nije oersetters berikt.\nUs tiim sil it sa gau mooglik neisjen en jo akkount opwurdearje.\nDan kinne jo oersette sûnder beheinings.",
+ "tsb-no-requests-from-new-users": "Gjin oanfragen fan nije meidoggers",
+ "tsb-create-user-page": "Ienfâldige meidoggerside oanmakke",
+ "log-name-translatorsandbox": "Oersetsânbakloch",
+ "log-description-translatorsandbox": "In loch fan hannelings oangeande meidoggers yn 'e oersetsânbak",
+ "logentry-translatorsandbox-promoted": "$1 hat $3 ta {{GENDER:$4|oersetter}} {{GENDER:$2|promovearre}}",
+ "logentry-translatorsandbox-rejected": "$1 hat de oanfraach fan \"$3\" om oersetter te wurden {{GENDER:$2|ôfwiisd}}",
+ "logentry-newusers-tsbpromoted": "It meidochakkount $3 is by promoasje út 'e sânbak {{GENDER:$2|oanmakke}}"
+}
diff --git a/Translate/i18n/sandbox/gl.json b/Translate/i18n/sandbox/gl.json
new file mode 100644
index 00000000..cd596588
--- /dev/null
+++ b/Translate/i18n/sandbox/gl.json
@@ -0,0 +1,54 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "Elisardojm",
+ "Toliño"
+ ]
+ },
+ "managetranslatorsandbox": "Administrar a zona de probas dos tradutores",
+ "tsb-filter-pending": "Solicitudes pendentes",
+ "tsb-reminder-title-generic": "Complete a súa introdución para se converter nun tradutor",
+ "tsb-reminder-content-generic": "Boas, $1:\n\nGrazas por rexistrarse en {{SITENAME}}.\n\nSe completa as traducións de proba, os adminitradores poderán concederlle axiña acceso completo á tradución.\n\nFaga algunhas traducións máis aquí:\n$2\n\n$3,\no equipo de {{SITENAME}}",
+ "tsb-reminder-sending": "Enviando o recordatorio...",
+ "tsb-reminder-sent": "{{PLURAL:$1|Enviouse $1 recordatorio. Hora: $2.|Enviáronse $1 recordatorios. Hora do último: $2.}}",
+ "tsb-reminder-sent-new": "Enviouse un recordatorio",
+ "tsb-reminder-failed": "Erro ao enviar o recordatorio",
+ "tsb-email-promoted-subject": "Agora xa é tradutor en {{SITENAME}}",
+ "tsb-email-promoted-body": "Boas, {{GENDER:$1|$1}}:\n\nParabéns! Comprobei as traducións de proba que fixo en {{SITENAME}} e concedinlle todos os dereitos de tradutor.\n\nVaia a {{SITENAME}} para continuar coas traducións:\n$2\n\nReciba a nosa benvida e as nosas grazas polas súas contribucións!\n\n{{GENDER:$3|$3}},\no equipo de {{SITENAME}}",
+ "tsb-email-rejected-subject": "Rexeitouse a súa solicitude de converterse en tradutor en {{SITENAME}}",
+ "tsb-email-rejected-body": "Boas, {{GENDER:$1|$1}}:\n\nGrazas por enviar a súa solicitude para converterse en tradutor en {{SITENAME}}. Sinto dicirlle que rexeitamos a súa solicitude, porque a calidade das súas traducións non cumpre cos requisitos.\n\nSe cre que se rexeitou por erro a súa solicitude, pida de novo os dereitos de tradutor en {{SITENAME}}. Pode facelo aquí:\n$2\n\n{{GENDER:$3|$3}},\no equipo de {{SITENAME}}",
+ "tsb-request-count": "{{PLURAL:$1|Unha solicitude|$1 solicitudes}}",
+ "tsb-all-languages-button-label": "Todas as linguas",
+ "tsb-search-requests": "Procurar nas solicitudes",
+ "tsb-accept-button-label": "Aceptar",
+ "tsb-reject-button-label": "Rexeitar",
+ "tsb-selected-count": "{{PLURAL:$1|$1 usuario seleccionado|$1 usuarios seleccionados}}",
+ "tsb-older-requests": "{{PLURAL:$1|$1 solicitude vella|$1 solicitudes vellas}}",
+ "tsb-accept-all-button-label": "Aceptar todos",
+ "tsb-reject-all-button-label": "Rexeitar todos",
+ "tsb-user-posted-a-comment": "Non é tradutor",
+ "tsb-reminder-link-text": "Enviar un recordatorio por correo electrónico",
+ "tsb-didnt-make-any-translations": "Este usuario non fixo ningunha tradución.",
+ "tsb-translations-source": "Fonte",
+ "tsb-translations-user": "Traduccións {{GENDER:$1|do usuario|da usuaria}}",
+ "tsb-translations-current": "Traducións existentes",
+ "tsb-delete-userpage-summary": "Borro a páxina de usuario dunha zona de probas de usuario",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Usuario rexeitado|Usuarios rexeitados}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Usuario aceptado|Usuarios aceptados}}",
+ "translationstash": "Benvido",
+ "translate-translationstash-welcome": "{{GENDER:$1|Benvido|Benvida}}, $1; xa es {{GENDER:$1|un novo tradutor|unha nova tradutora}}",
+ "translate-translationstash-welcome-note": "Familiarícese coas ferramentas de tradución. Traduza algunhas mensaxes e obteña todos os dereitos de tradutor para participar nos seus proxectos favoritos.",
+ "translate-translationstash-initialtranslation": "A súa tradución inicial",
+ "translate-translationstash-translations": "$1 {{PLURAL:$1|tradución completada|traducións completadas}}",
+ "translate-translationstash-skip-button-label": "Probar outra",
+ "tsb-limit-reached-title": "Grazas polas súas traducións",
+ "tsb-limit-reached-body": "Alcanzou o límite de traducións dos tradutores novos.\nO noso equipo ha comprobar e actualizar a súa conta axiña.\nLogo diso, poderá traducir sen límites.",
+ "tsb-no-requests-from-new-users": "Non hai solicitudes de novos usuarios",
+ "tsb-create-user-page": "Creo a páxina de usuario básica",
+ "log-name-translatorsandbox": "Rexistro da zona de probas de tradución",
+ "log-description-translatorsandbox": "Un rexistro de accións sobre os usuarios da zona de probas de tradución",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|converteu a}} $3 en {{GENDER:$4|tradutor|tradutora}}",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|rexeitou}} a solicitude de $3 de converterse en tradutor",
+ "logentry-newusers-tsbpromoted": "A conta de usuario $3 {{GENDER:$2|creouse}} desde a zona de probas"
+}
diff --git a/Translate/i18n/sandbox/gu.json b/Translate/i18n/sandbox/gu.json
new file mode 100644
index 00000000..86f45c11
--- /dev/null
+++ b/Translate/i18n/sandbox/gu.json
@@ -0,0 +1,33 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ashok modhvadia",
+ "KartikMistry"
+ ]
+ },
+ "managetranslatorsandbox": "ભાષાંતર સેન્ડબોક્સનું સંચાલન કરો",
+ "tsb-filter-pending": "બાકી પડેલ વિનંતીઓ",
+ "tsb-reminder-title-generic": "ભાષાંતરકર્તા બનવા માટે તમારો પરિચય પૂરો કરો",
+ "tsb-email-promoted-subject": "તમે હવે {{SITENAME}} પર ભાષાંતરકર્તા છો",
+ "tsb-email-rejected-subject": "{{SITENAME}} પરની તમારી ભાષાંતરકર્તાની અરજી નકારવામાં આવી છે",
+ "tsb-all-languages-button-label": "બધી ભાષાઓ",
+ "tsb-search-requests": "વિનંતીઓ શોધો",
+ "tsb-accept-button-label": "સ્વિકારો",
+ "tsb-reject-button-label": "નકારો",
+ "tsb-accept-all-button-label": "બધાંને સ્વિકારો",
+ "tsb-reject-all-button-label": "બધાંને નકારો",
+ "tsb-user-posted-a-comment": "ભાષાંતરકર્તા નથી",
+ "tsb-reminder-link-text": "યાદ કરાવતો ઇમેલ મોકલો",
+ "tsb-didnt-make-any-translations": "આ સભ્યે કોઇ ભાષાંતરો કરેલ નથી.",
+ "tsb-translations-source": "સ્રોત",
+ "tsb-translations-user": "{{GENDER:$1|સભ્ય}} ભાષાંતરો",
+ "tsb-translations-current": "હાલનાં ભાષાંતરો",
+ "translationstash": "સ્વાગત",
+ "translate-translationstash-welcome": "સ્વાગત {{GENDER:$1|$1}}, તમે હવે ભાષાંતરકર્તા છો",
+ "translate-translationstash-initialtranslation": "તમારું શરુઆતનું ભાષાંતર",
+ "translate-translationstash-skip-button-label": "બીજા પ્રયત્ન કરો",
+ "tsb-limit-reached-title": "તમારા ભાષાંતરો માટે આભાર",
+ "tsb-no-requests-from-new-users": "નવા સભ્યો તરફથી કોઇ વિનંતીઓ નથી",
+ "tsb-create-user-page": "પ્રાથમિક સભ્યપાનું બનાવો",
+ "log-name-translatorsandbox": "ભાષાંતર સેન્ડબોક્સ"
+}
diff --git a/Translate/i18n/sandbox/he.json b/Translate/i18n/sandbox/he.json
new file mode 100644
index 00000000..3eea93be
--- /dev/null
+++ b/Translate/i18n/sandbox/he.json
@@ -0,0 +1,52 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80"
+ ]
+ },
+ "managetranslatorsandbox": "ניהול ארגז חול של מתרגמים",
+ "tsb-filter-pending": "בקשות ממתינות",
+ "tsb-reminder-title-generic": "נא להשלים את ההיכרות שלך כדי לקבל אישור לתרגם",
+ "tsb-reminder-content-generic": "שלום $1,\n\nתודה שנרשמת לאתר {{SITENAME}}.\n\nאם {{GENDER:$1|תסיים|תסיימי}} לעשות את תרגומי הבדיקה, המנהלים ייתנו לך גישה מלאה לתרגם קצת אחרי־כן.\n\nנשאר רק לבוא לעשות עוד כמה תרגומים כאן:\n$2\n\n$3\nצוות {{SITENAME}}",
+ "tsb-reminder-sending": "שליחת התזכורת...",
+ "tsb-reminder-sent": "{{PLURAL:$1|נשלחה תזכורת אחת $2|נשלחו $1 תזכורות, האחרונה $2}}",
+ "tsb-reminder-sent-new": "נשלחה תזכורת",
+ "tsb-reminder-failed": "שליחת התזכורת נכשלה",
+ "tsb-email-promoted-subject": "קיבלת הרשאה לתרגם באתר {{SITENAME}}",
+ "tsb-email-promoted-body": "שלום $1,\n\nברכות! בדקתי את תרגומי הבדיקה שעשית באתר {{SITENAME}} ונתתי לך הרשאות מלאות לתרגם.\n\n{{GENDER:$1|בוא|בואי}} אל {{SITENAME}} כדי להמשיך לתרגם, עכשיו וכל יום:\n$2\n\n{{GENDER:$1|ברוך הבא|ברוכה הבאה}} ותודה על {{GENDER:$1|תרומותיך|תרומותייך}}!\n\n$3,\nצוות {{SITENAME}}",
+ "tsb-email-rejected-subject": "הבקשה שלך להיות מתרגם באתר {{SITENAME}} נדחתה",
+ "tsb-email-rejected-body": "שלום $1,\n\nתודה על בקשתך להיות {{GENDER:$1|מתרגם|מתרגמת}} באתר {{SITENAME}}. אני {{GENDER:$3|מצטער|מצטערת}} להודיע לך שדחיתי את בקשתך משום שהאיכות של התרגומים שלך לא עמדה בדרישות.\n\nאם נראה לך שהבקשה נדחתה בטעות, {{GENDER:$1|נסה|נסי}} להירשם שוב בתור {{GENDER:$1|מתרגם|מתרגמת}} באתר {{SITENAME}} בכתובת הבאה:\n$2\n\n$3\nסגל {{SITENAME}}",
+ "tsb-request-count": "{{PLURAL:$1|בקשה אחת|$1 בקשות}}",
+ "tsb-all-languages-button-label": "כל השפות",
+ "tsb-search-requests": "חיפוש בקשות ממתינות",
+ "tsb-accept-button-label": "לקבל",
+ "tsb-reject-button-label": "לדחות",
+ "tsb-selected-count": "{{PLURAL:$1|נבחר משתמש אחד|נבחרו $1 משתמשים}}",
+ "tsb-older-requests": "{{PLURAL:$1|בקשה אחת ישנה|$1 בקשות ישנות|0=אין בקשות ישנות}} יותר",
+ "tsb-accept-all-button-label": "לקבל את כולם",
+ "tsb-reject-all-button-label": "לדחות את כולם",
+ "tsb-user-posted-a-comment": "לא מתרגם",
+ "tsb-reminder-link-text": "לשלוח תזכורת בדוא\"ל",
+ "tsb-didnt-make-any-translations": "המשתמש הזה לא עשה שום תרגום.",
+ "tsb-translations-source": "מחרוזת מקור",
+ "tsb-translations-user": "תרגומים של {{GENDER:$1|המשתמש|המשתמשת}}",
+ "tsb-translations-current": "תרגומים קיימים",
+ "tsb-delete-userpage-summary": "מחיקת דף משתמש של משתמש בארגז חול",
+ "tsb-reject-confirmation": "{{PLURAL:$1|משתמש נדחה|משתמשים נדחו}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|משתמש התקבל|משתמשים התקבלו}}",
+ "translationstash": "ברוך בואך",
+ "translate-translationstash-welcome": "{{GENDER:$1|ברוך הבא $1, אתה מתרגם חדש|ברוכה הבאה $1, את מתרגמת חדשה}}",
+ "translate-translationstash-welcome-note": "עכשיו נכיר לך את כלי התרגום. אנו מבקשים ממך לתרגם מספר מחרוזות כדי לקבל הרשאות תרגום מלאות ולהשתתף במיזמים שמעניינים אותך.",
+ "translate-translationstash-initialtranslation": "התרגום ההתחלתי שלך",
+ "translate-translationstash-translations": "{{PLURAL:$1|תרגום אחד הושלם|$1 תרגומים הושלמו}}",
+ "translate-translationstash-skip-button-label": "לנסות משהו אחר",
+ "tsb-limit-reached-title": "תודה על התרגומים שלך",
+ "tsb-limit-reached-body": "הגעת למגבלת התרגומים למתרגמים חדשים.\nהסגל שלנו יבדוק וישדרג את החשבון שלך בקרוב.\nאחרי־כן תהיה לך אפשרות לתרגם בלי הגבלה.",
+ "tsb-no-requests-from-new-users": "אין בקשות ממשתמשים חדשים",
+ "tsb-create-user-page": "יצירת דף משתמש בסיסי",
+ "log-name-translatorsandbox": "יומן ארגז חול של תרגומים",
+ "log-description-translatorsandbox": "יומן פעולות על משתמשים בארגז חול של תרגומים",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|קידם|קידמה}} את $3 לתפקיד {{GENDER:$4|מתרגם|מתרגמת}}",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|דחה|דחתה}} את הבקשה של \"$3\" לקבל הרשאת מתרגם",
+ "logentry-newusers-tsbpromoted": "החשבון $3 {{GENDER:$2|נוצר}} באמצעות קידום מארגז החול"
+}
diff --git a/Translate/i18n/sandbox/hi.json b/Translate/i18n/sandbox/hi.json
new file mode 100644
index 00000000..3b18da06
--- /dev/null
+++ b/Translate/i18n/sandbox/hi.json
@@ -0,0 +1,55 @@
+{
+ "@metadata": {
+ "authors": [
+ "NehalDaveND",
+ "Saurmandal",
+ "Sfic",
+ "ThisIsACreeper0101"
+ ]
+ },
+ "managetranslatorsandbox": "अनुवाद प्रयोगपृष्ठ प्रबंधित करें",
+ "tsb-filter-pending": "लंबित अनुरोध",
+ "tsb-reminder-title-generic": "अनुवादक बनने के लिए अपना परिचय पूरा करें",
+ "tsb-reminder-content-generic": "नमस्ते $1,\n\n{{SITENAME}} पर पंजीकृत करने के लिए धन्यवाद!\n\nअगर आप अपने परीक्षण अनुवादों को पूरा कर लिया है, प्रबंधक आपको जल्द ही आपको आपका पूरा अनुवाद अधिकार दे देंगे।\n\nकृपया यहाँ पर जाकर कुछ और भी अनुवादित करें:\n$2\n\n$3,\n{{SITENAME}} स्टाफ",
+ "tsb-reminder-sending": "अनुस्मारक भेजा जा रहा है...",
+ "tsb-reminder-sent": "{{PLURAL:$1|$1 अनुस्मारक भेजा गया। समय: $2।|$1 अनुस्मारक भेजे गए। आखिरी अनुस्मारक का समय: $2।}}",
+ "tsb-reminder-sent-new": "अनुस्मारक भेज दिया गया है",
+ "tsb-reminder-failed": "अनुस्मारक सेट न किया जा सका",
+ "tsb-email-promoted-subject": "अब आप {{SITENAME}} पर एक अनुवादक हैं",
+ "tsb-email-promoted-body": "नमस्ते {{GENDER:$1|$1}}जी,\n\nबधाई हो! मैंने {{SITENAME}} पर आपके परीक्षण अनुवादों को जाँचा और आपको पूरी अनुवादक अधिकार दे दी है।\n\nआज और हमेशा के लिए अनुवाद जारी रखने के लिए {{SITENAME}} पर आ जाएँ:\n$2\n\nस्वागत है, और आपके योगदान के लिए धन्यवाद!\n\n{{GENDER:$3|$3}},\n{{SITENAME}} स्टाफ",
+ "tsb-email-rejected-subject": "{{SITENAME}} पर अनुवादक होने के आपके अनुरोध को अस्वीकार कर दिया गया है",
+ "tsb-email-rejected-body": "नमस्ते {{GENDER:$1|$1}}जी,\n\nThank you for applying as a translator at {{SITENAME}} पर एक अनुवादक के रूप में अनुरोध करने के लिए धन्यवाद। मुझे दुःख के साथ आपको सूचित करने पड़ रहा है कि मैंने आपके अनुरोध को अस्वीकार कर दिया है, क्योंकि आपके अनुवादों की क्वालिटी आवश्यकताओं को पूरी नहीं कर पाई।\n\nअगर आपको लगता है कि आपके अनुरोध को गलती से अस्वीकृत कर दिया गया है, कृपया {{SITENAME}} पर अनुवादक बनने के लिए दोबारा अनुरोध करें। आप यहाँ साइन-अप कर सकते हैं:\n$2\n\n{{GENDER:$3|$3}},\n{{SITENAME}} स्टाफ",
+ "tsb-request-count": "$1 {{PLURAL:$1|अनुरोध}}",
+ "tsb-all-languages-button-label": "सभी भाषाएँ",
+ "tsb-search-requests": "लंबित अनुरोध खोजें",
+ "tsb-accept-button-label": "स्वीकार करें",
+ "tsb-reject-button-label": "अस्वीकार करें",
+ "tsb-selected-count": "{{PLURAL:$1|$1 सदस्य चुना गया है|$1 सदस्य चुने गए हैं}}",
+ "tsb-older-requests": "$1 {{PLURAL:$1|पुराना|पुराने}} अनुरोध",
+ "tsb-accept-all-button-label": "सभी स्वीकार करें",
+ "tsb-reject-all-button-label": "सभी अस्वीकार करें",
+ "tsb-user-posted-a-comment": "अनुवादक नहीं है",
+ "tsb-reminder-link-text": "ईमेल में अनुस्मारक भेजें",
+ "tsb-didnt-make-any-translations": "इस सदस्य ने कोई अनुवाद नहीं बनाया है।",
+ "tsb-translations-source": "मूल",
+ "tsb-translations-user": "{{GENDER:$1|सदस्य}} के अनुवाद",
+ "tsb-translations-current": "मौजूदा अनुवादक",
+ "tsb-delete-userpage-summary": "प्रयोगपृष्ठ सदस्य के सदस्य पृष्ठ को हटाया जा रहा है",
+ "tsb-reject-confirmation": "{{PLURAL:$1|सदस्य|सदस्यों}} को अस्वीकार किया गया",
+ "tsb-accept-confirmation": "{{PLURAL:$1|सदस्य|सदस्यों}} को स्वीकार किया गया",
+ "translationstash": "स्वागत है",
+ "translate-translationstash-welcome": "स्वागत है {{GENDER:$1|$1}} जी, आप नए अनुवादक हैं",
+ "translate-translationstash-welcome-note": "अनुवादक उपकरणों के अनुकूल हो जाएँ। कुछ संदेशों को अनुवादित करें और अपने प्रिय परियोजनाओं में हिस्सा लेने के लिए पूर्ण-अनुवादक अधिकार पाएँ।",
+ "translate-translationstash-initialtranslation": "आपका पहला अनुवाद",
+ "translate-translationstash-translations": "$1 ने अनुवाद {{PLURAL:$1|पूरा किया|पूरे किए}}",
+ "translate-translationstash-skip-button-label": "दूसरे से प्रयास करें",
+ "tsb-limit-reached-title": "आपके अनुवादों के लिए धन्यवाद",
+ "tsb-limit-reached-body": "आप नए अनुवादकों की सीमा पर पहुँच चुके हैं।\nहमारी दल जल्द ही आपके अकाउंट को जाँचकर अपग्रेड कर देंगे।\nउसके बाद आप बिना किसी सीमा के अनुवादित कर पाएँगे।",
+ "tsb-no-requests-from-new-users": "नए सदस्यों से कोई अनुरोध नहीं है",
+ "tsb-create-user-page": "साधारण सदस्य पृष्ठ बनाया गया है",
+ "log-name-translatorsandbox": "अनुवाद प्रयोगपृष्ठ लॉग",
+ "log-description-translatorsandbox": "अनुवाद प्रयोगपृष्ठ सदस्यों पर कार्यों का लॉग",
+ "logentry-translatorsandbox-promoted": "$1 ने $3 को {{GENDER:$4|अनुवादक}} में {{GENDER:$2|प्रमोट किया}}।",
+ "logentry-translatorsandbox-rejected": "$1 ने \"$3\" के अनुवादक बनने के अनुरोध को {{GENDER:$2|अस्वीकार किया}}",
+ "logentry-newusers-tsbpromoted": "सदस्य अकाउंट $3 को प्रयोगपृष्ठ के प्रमोशन की मदद से {{GENDER:$2|बनाया गया}}"
+}
diff --git a/Translate/i18n/sandbox/hr.json b/Translate/i18n/sandbox/hr.json
new file mode 100644
index 00000000..ebaa643b
--- /dev/null
+++ b/Translate/i18n/sandbox/hr.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bugoslav"
+ ]
+ },
+ "managetranslatorsandbox": "Upravljanje prevoditeljskim pješčanikom",
+ "tsb-filter-pending": "Zahtjevi na čekanju",
+ "tsb-reminder-title-generic": "Dovršite Vaše predstavljanje da bi ste postali prevoditelj/ica",
+ "translationstash": "Dobro došli",
+ "log-name-translatorsandbox": "Evidencija prijevoda u pješčaniku",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|promovirao|promovirala}} je $3 u {{GENDER:$4|prevoditelja|prevoditeljicu}}",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|odbacio|odbacila}} je zahtjev suradnika/suradnice »$3« da postane prevoditelj/ica"
+}
diff --git a/Translate/i18n/sandbox/hsb.json b/Translate/i18n/sandbox/hsb.json
new file mode 100644
index 00000000..5ea9d791
--- /dev/null
+++ b/Translate/i18n/sandbox/hsb.json
@@ -0,0 +1,50 @@
+{
+ "@metadata": {
+ "authors": [
+ "Michawiki"
+ ]
+ },
+ "managetranslatorsandbox": "Přełožowarske hrajkanišćo zrjadować",
+ "tsb-filter-pending": "Njesčinjene naprašowanja",
+ "tsb-reminder-title-generic": "Wudospołń swoje zawjedźenje, zo by so z přełožowarjom stał",
+ "tsb-reminder-content-generic": "Witaj $1,\n\ndźakujemy so za registrowanje na {{GRAMMAR:lokatiw|{{SITENAME}}}}.\n\nJeli swoje testowe přełožki wudospołnješ, administratorojo dadźa tebi potom połny přełožowanski přistup.\n\nPřińdź prošu sem a přewjedź dalše přełožki:\n$2\n\n$3,\nsobudźěłaćerjo {{GRAMMAR:genitiw|{{SITENAME}}}}",
+ "tsb-reminder-sending": "Dopomnjeće so sćele...",
+ "tsb-reminder-sent": "{{PLURAL:$1|$1 dopomnjeće je so pósłało $2|$1 dopomnjeći stej so pósłałoj, poslednje $2|$1 dopomnjeća su so pósłali, poslednje $2|$1 dopomnjećow je so pósłało, poslednje $2}}",
+ "tsb-reminder-sent-new": "Dopomnjeće je so pósłało",
+ "tsb-reminder-failed": "Słanje dopomnjeća je so njeporadźiło",
+ "tsb-email-promoted-subject": "Sy nětko přełožowar na {{GRAMMAR:lokatiw|{{SITENAME}}}}",
+ "tsb-email-promoted-body": "Witaj {{GENDER:$1|$1}},\n\nwutrobne zbožopřeće! Sym testowe přełožki přepruwował, kotrež sy na {{GRAMMAR:lokatiw|{{SITENAME}}}} přewjedł a sym tebi połne přełožowarske prawa dał.\n\nPřińdź prošu k {{GRAMMAR:datiw|{{SITENAME}}}}, zo by nětko a kóždy dźeń dale přełožował:\n$2\n\nWitaj a wulki dźak za twoje přinoški!\n\n{{GENDER:$3|$3}},\nsobudźěłaćerjo {{GRAMMAR:genitiw|{{SITENAME}}}}",
+ "tsb-email-rejected-subject": "Twóje powyšenje za přełožowarja na {{GRAMMAR:lokatiw|{{SITENAME}}}} je so wotpokazało",
+ "tsb-email-rejected-body": "Witaj {{GENDER:$1|$1}},\n\ndźakuju so za zamołwjenje jako přełožowar na {{GRAMMAR:lokatiw|{{SITENAME}}}}. Bohužel dyrbju ći zdźělić, zo sym twoje zamołwjenje wo powyšenje za přełožowarja wotpokazał, dokelž kwalita twojich přełožkow žadanjam njewotpowěduje.\n\nJeli mysliš, zo twoje zamołwjenje je so zmylnje wotpokazało, zamołw so znowa jako přełožowarja na {{GRAMMAR:lokatiw|{{SITENAME}}}}. Móžeš so tu registrować:\n$2\n\n{{GENDER:$3|$3}},\nTeam {{GRAMMAR:genitiw|{{SITENAME}}}}",
+ "tsb-request-count": "$1 {{PLURAL:$1|naprašowanje|naprašowani|naprašowanja|naprašowanjow}}",
+ "tsb-all-languages-button-label": "Wšě rěče",
+ "tsb-search-requests": "Naprašowanja přepytać",
+ "tsb-accept-button-label": "Akceptować",
+ "tsb-reject-button-label": "Wotpokazać",
+ "tsb-selected-count": "{{PLURAL:$1|$1 wužiwar je so wubrał|$1 wužiwarjej staj so wubrałoj|$1 wužiwarjo su so wubrali|$1 wužiwarjow je so wubrało}}",
+ "tsb-older-requests": "$1 {{PLURAL:$1|starše naprašowanje|staršej naprašowani|starše naprašowanja|staršich naprašowanjow}}",
+ "tsb-accept-all-button-label": "Wšě akceptować",
+ "tsb-reject-all-button-label": "Wšě wotpokazać",
+ "tsb-user-posted-a-comment": "Žadyn přełožowar",
+ "tsb-reminder-link-text": "E-mejlowe dopomnjeće pósłać",
+ "tsb-didnt-make-any-translations": "Tutón wužiwar njeje přełožki přewjedł.",
+ "tsb-translations-source": "Žórło",
+ "tsb-translations-user": "Wužiwarske přełožki",
+ "tsb-translations-current": "Eksistowace přełožki",
+ "tsb-delete-userpage-summary": "Wužiwarska strona hrajkanišćoweho wužiwarja je so zhašała",
+ "translationstash": "Witaj",
+ "translate-translationstash-welcome": "Witaj $1, sy {{GENDER:$1|nowy přełožowar|nowa přełožowarka}}",
+ "translate-translationstash-welcome-note": "Zeznaj so z přełožowanskimi nastrojemi. Přełož někotre zdźělenki a dobudź połne přełožowarske prawa, zo by so na wašich projektach wobdźělił.",
+ "translate-translationstash-initialtranslation": "Twój prěni přełožk",
+ "translate-translationstash-translations": "$1 {{PLURAL:$1|wudospołnjeny přełožk|wudospołnjenej přełožkaj|wudospołnjene přełožki|wudospołnjenych přełožkow}}",
+ "translate-translationstash-skip-button-label": "Druhi spytać",
+ "tsb-limit-reached-title": "Dźakujemy so za twoje přełožki",
+ "tsb-limit-reached-body": "Sy přełožowanski limit za nowych přełožowarjow docpěł. Naš team budźe twoje konto bórze přepruwować a aktualizować. Potom móžeš bjez limitow přełožować.",
+ "tsb-no-requests-from-new-users": "Žane naprašowanja wot nowych wužiwarjow",
+ "tsb-create-user-page": "Zakładna wužiwarska strona wutworjena",
+ "log-name-translatorsandbox": "Přełožowanske hrajkanišćo",
+ "log-description-translatorsandbox": "Protokol akcijow na wužiwarjach přełožowanskeho hrajkanišća",
+ "logentry-translatorsandbox-promoted": "$1 je $3 za {{GENDER:$4|přełožowarja|přełožwarku}} {{GENDER:$2|powyšił|powyšiła}}",
+ "logentry-translatorsandbox-rejected": "$1 je naprašowanje wot \"$3\" na powyšenje za {{GENDER:$2|přełožowarja|přełožowarku}} {{GENDER:$2|wotpokazał|wotpokazała}}",
+ "logentry-newusers-tsbpromoted": "Wužiwarske konto $3 je so přez powyšenje z hrajkanišća {{GENDER:$2|załožiło}}"
+}
diff --git a/Translate/i18n/sandbox/hu.json b/Translate/i18n/sandbox/hu.json
new file mode 100644
index 00000000..3d0aedb7
--- /dev/null
+++ b/Translate/i18n/sandbox/hu.json
@@ -0,0 +1,46 @@
+{
+ "@metadata": {
+ "authors": [
+ "Tacsipacsi"
+ ]
+ },
+ "managetranslatorsandbox": "Fordítói homokozó kezelése",
+ "tsb-filter-pending": "Függőben lévő kérések",
+ "tsb-reminder-title-generic": "Fejezd be a bemutatkozásodat a fordítóvá váláshoz",
+ "tsb-reminder-sending": "Emlékeztető küldése…",
+ "tsb-reminder-sent": "{{PLURAL:$1|Emlékeztető elküldve ekkor: $2.|$1 emlékeztető elküldve. Utolsó kézbesítve: $2.}}",
+ "tsb-reminder-sent-new": "Emlékeztető elküldve",
+ "tsb-reminder-failed": "Az emlékeztető küldése sikertelen",
+ "tsb-email-promoted-subject": "Mostantól fordító vagy a(z) {{SITENAME}} wikin",
+ "tsb-email-rejected-subject": "A fordítói jelentkezésedet a(z) {{SITENAME}} wikin elutasították",
+ "tsb-request-count": "$1 kérés",
+ "tsb-all-languages-button-label": "Minden nyelv",
+ "tsb-search-requests": "Keresés a függőben lévő kérések között",
+ "tsb-accept-button-label": "Elfogadás",
+ "tsb-reject-button-label": "Elutasítás",
+ "tsb-selected-count": "$1 felhasználó kiválasztva",
+ "tsb-older-requests": "$1 régebbi kérés",
+ "tsb-accept-all-button-label": "Összes elfogadása",
+ "tsb-reject-all-button-label": "Összes elutasítása",
+ "tsb-user-posted-a-comment": "Nem fordító",
+ "tsb-reminder-link-text": "Emlékeztető e-mail küldése",
+ "tsb-didnt-make-any-translations": "Ez a felhasználó nem készített fordításokat.",
+ "tsb-translations-source": "Forrás",
+ "tsb-translations-user": "{{GENDER:$1|Felhasználó}} fordításai",
+ "tsb-translations-current": "Létező fordítások",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Felhasználó|Felhasználók}} elutasítva",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Felhasználó|Felhasználók}} elfogadva",
+ "translationstash": "Üdvözlünk",
+ "translate-translationstash-welcome": "Helló $1, új fordító vagy",
+ "translate-translationstash-welcome-note": "Ismerkedj meg a fordítói eszközökkel. Fordíts le néhány üzenetet a teljes jogú fordítóvá váláshoz, hogy részt vehess a kedvenc projektjeidben.",
+ "translate-translationstash-initialtranslation": "Kezdeti fordításod",
+ "translate-translationstash-translations": "$1 befejezett fordítás",
+ "translate-translationstash-skip-button-label": "Próbálkozás másikkal",
+ "tsb-limit-reached-title": "Köszönjük a fordításaidat",
+ "tsb-limit-reached-body": "Elérted az új fordítók fordítási limitjét.\nA csapatunk hamarosan megerősíti és frissíti a fiókodat.\nUtána korlátlanul fordíthatsz.",
+ "tsb-no-requests-from-new-users": "Nincs kérés új felhasználóktól",
+ "tsb-create-user-page": "Alapvető felhasználói lap készítése",
+ "log-name-translatorsandbox": "Fordítói homokozó naplója",
+ "log-description-translatorsandbox": "A fordítói homokozó felhasználóinak műveleteinek naplója",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|visszautasította}} „$3” fordítóvá válási kérését"
+}
diff --git a/Translate/i18n/sandbox/hy.json b/Translate/i18n/sandbox/hy.json
new file mode 100644
index 00000000..748c461c
--- /dev/null
+++ b/Translate/i18n/sandbox/hy.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kareyac"
+ ]
+ },
+ "tsb-all-languages-button-label": "Բոլոր լեզուները",
+ "tsb-accept-button-label": "Ընդունել"
+}
diff --git a/Translate/i18n/sandbox/hyw.json b/Translate/i18n/sandbox/hyw.json
new file mode 100644
index 00000000..1f5dcdc3
--- /dev/null
+++ b/Translate/i18n/sandbox/hyw.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kareyac"
+ ]
+ },
+ "translationstash": "Բարի Եկաք"
+}
diff --git a/Translate/i18n/sandbox/ia.json b/Translate/i18n/sandbox/ia.json
new file mode 100644
index 00000000..7efa05c7
--- /dev/null
+++ b/Translate/i18n/sandbox/ia.json
@@ -0,0 +1,52 @@
+{
+ "@metadata": {
+ "authors": [
+ "McDutchie"
+ ]
+ },
+ "managetranslatorsandbox": "Gerer le cassa a sablo de traduction",
+ "tsb-filter-pending": "Requestas pendente",
+ "tsb-reminder-title-generic": "Completa le introduction pro devenir traductor",
+ "tsb-reminder-content-generic": "Salute $1,\n\nGratias pro haber te inscribite a {{SITENAME}}.\n\nSi tu completa le traductiones de test, le administratores te concedera le accesso complete de traduction in un breve periodo.\n\nVeni e face alcun altere traductiones al adresse:\n$2\n\n$3,\nLe equipa de {{SITENAME}}",
+ "tsb-reminder-sending": "Invio del rememoration...",
+ "tsb-reminder-sent": "{{PLURAL:$1|$1 rememoration inviate. Hora: $2|$1 rememorationes inviate. Hora del ultime: $2}}",
+ "tsb-reminder-sent-new": "Un rememoration inviate",
+ "tsb-reminder-failed": "Le invio del rememoration ha fallite",
+ "tsb-email-promoted-subject": "Tu es ora traductor in {{SITENAME}}",
+ "tsb-email-promoted-body": "Salute {{GENDER:$1|$1}},\n\nFelicitationes! Io ha verificate le traductiones de test que tu ha facite in {{SITENAME}} e io te ha date le derectos complete de traductor.\n\nVeni a {{SITENAME}} pro continuar a traducer ora, e omne dies:\n$2\n\nBenvenite, e gratias pro tu contributiones!\n\n{{GENDER:$3|$3}},\nLe equipa de {{SITENAME}}",
+ "tsb-email-rejected-subject": "Tu demanda pro devenir traductor in {{SITENAME}} ha essite rejectate",
+ "tsb-email-rejected-body": "Salute {{GENDER:$1|$1}},\n\nGratias pro tu candidatura como traductor in {{SITENAME}}. Io regretta de informar te que io ha rejectate tu demanda, perque le qualitate de tu traductiones non satisfaceva le requisitos.\n\nSi tu pensa que tu demanda ha essite refusate per error, per favor tenta facer un altere demanda de devenir traductor in {{SITENAME}}. Tu pote inscriber te hic:\n$2\n\n{{GENDER:$3|$3}},\nLe equipa de {{SITENAME}}",
+ "tsb-request-count": "$1 {{PLURAL:$1|requesta|requestas}}",
+ "tsb-all-languages-button-label": "Tote le linguas",
+ "tsb-search-requests": "Cercar in requestas pendente",
+ "tsb-accept-button-label": "Acceptar",
+ "tsb-reject-button-label": "Rejectar",
+ "tsb-selected-count": "{{PLURAL:$1|$1 usator seligite|$1 usatores seligite}}",
+ "tsb-older-requests": "$1 altere {{PLURAL:$1|requesta|requestas}}",
+ "tsb-accept-all-button-label": "Acceptar totes",
+ "tsb-reject-all-button-label": "Rejectar totes",
+ "tsb-user-posted-a-comment": "Non es traductor",
+ "tsb-reminder-link-text": "Inviar e-mail de rememoration",
+ "tsb-didnt-make-any-translations": "Iste usator non ha facite alcun traduction.",
+ "tsb-translations-source": "Fonte",
+ "tsb-translations-user": "Traductiones del {{GENDER:$1|usator}}",
+ "tsb-translations-current": "Traductiones existente",
+ "tsb-delete-userpage-summary": "Deletion del pagina de usator de un usator in cassa a sablo",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Usator|Usatores}} rejectate",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Usator|Usatores}} acceptate",
+ "translationstash": "Benvenite",
+ "translate-translationstash-welcome": "Benvenite {{GENDER:$1|$1}}, tu es un nove traductor",
+ "translate-translationstash-welcome-note": "Familiarisa te con le instrumentos de traduction. Traduce alcun messages e obtene le derectos complete de traduction pro participar a tu projectos favorite.",
+ "translate-translationstash-initialtranslation": "Tu prime traduction",
+ "translate-translationstash-translations": "$1 ha completate {{PLURAL:$1|traduction|traductiones}}",
+ "translate-translationstash-skip-button-label": "Essayar un altere",
+ "tsb-limit-reached-title": "Gratias pro tu traductiones",
+ "tsb-limit-reached-body": "Tu ha attingite le numero limite de traductiones pro le nove traductores. Nostre equipa va verificar e promover tu conto bentosto. Postea tu potera traducer sin limite.",
+ "tsb-no-requests-from-new-users": "Il non ha requestas de nove usatores",
+ "tsb-create-user-page": "Creation de un pagina de usator basic",
+ "log-name-translatorsandbox": "Registro del cassa a sablo de traduction",
+ "log-description-translatorsandbox": "Un registro de actiones sur usatores in le cassa a sablo de traduction",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|promoveva}} $3 a {{GENDER:$4|traductor}}",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|rejectava}} le requesta de \"$3\" de devenir traductor",
+ "logentry-newusers-tsbpromoted": "Le conto de ustor $3 ha essite {{GENDER:$2|create}} per promotion ab le cassa a sablo"
+}
diff --git a/Translate/i18n/sandbox/id.json b/Translate/i18n/sandbox/id.json
new file mode 100644
index 00000000..aed3c9a0
--- /dev/null
+++ b/Translate/i18n/sandbox/id.json
@@ -0,0 +1,52 @@
+{
+ "@metadata": {
+ "authors": [
+ "Daud I.F. Argana"
+ ]
+ },
+ "managetranslatorsandbox": "Kelola kotak pasir penerjemah",
+ "tsb-filter-pending": "Permohonan tertunda",
+ "tsb-reminder-title-generic": "Lengkapi perkenalan Anda untuk menjadi seorang penerjemah",
+ "tsb-reminder-content-generic": "Hai $1,\n\nTerima kasih telah mendaftar dengan {{SITENAME}}.\n\nJika Anda melengkapi tes penerjemahan ini, pengurus akan memberikan Anda akses terjemahan penuh.\n\nSilahkan datang dan buat lebih banyak terjemahan di sini:\n$2\n\n$3,\nStaf {{SITENAME}}",
+ "tsb-reminder-sending": "Sedang mengirim pengingat...",
+ "tsb-reminder-sent": "{{PLURAL:$1|Telah mengirim $1 pengingat. Waktu: $2.|Telah mengirim $1 pengingat. Waktu pengiriman terakhir: $2.}}",
+ "tsb-reminder-sent-new": "Pengingat telah dikirim",
+ "tsb-reminder-failed": "Pengingat gagal dikirim",
+ "tsb-email-promoted-subject": "Anda sekarang adalah seorang penerjemah di {{SITENAME}}",
+ "tsb-email-promoted-body": "Hai {{GENDER:$1|$1}},\n\nSelamat! Saya telah memeriksa tes terjemahan yang telah Anda lakukan di {{SITENAME}}, dan oleh sebab itu memberikan Anda hak penerjemah penuh.\n\nDatanglah ke {{SITENAME}} untuk terus menerjemahkan sekarang, dan setiap hari:\n$2\n\nSelamat datang dan terima kasih atas kontribusi anda!\n\n{{GENDER:$3|$3}},\nStaf {{SITENAME}}",
+ "tsb-email-rejected-subject": "Permohonan anda untuk menjadi penerjemah di {{SITENAME}} ditolak",
+ "tsb-email-rejected-body": "Hai {{GENDER:$1|$1}},\n\nTerima kasih karena memohon untuk menjadi penerjemah di {{SITENAME}}. Saya dengan sedih memberitahukan Anda bahwa saya telah menolak permohonan Anda karena mutu penerjemahan Anda tidak memenuhi syarat.\n\nJika Anda berpendapat bahwa penolakan permohonan Anda adalah kesalahan, silakan mencoba untuk memohon kembali sebagai penerjemah di {{SITENAME}}. Anda bisa mendaftar di sini:\n$2\n\n{{GENDER:$3|$3}},\nStaf {{SITENAME}}",
+ "tsb-request-count": "$1 {{PLURAL:$1|permohonan|permohonan}}",
+ "tsb-all-languages-button-label": "Semua bahasa",
+ "tsb-search-requests": "Cari permohonan tertunda",
+ "tsb-accept-button-label": "Terima",
+ "tsb-reject-button-label": "Tolak",
+ "tsb-selected-count": "{{PLURAL:$1|$1 pengguna dipilih|$1 pengguna dipilih}}",
+ "tsb-older-requests": "$1 {{PLURAL:$1|permohonan|permohonan}} yang lebih lama",
+ "tsb-accept-all-button-label": "Terima semua",
+ "tsb-reject-all-button-label": "Tolak semua",
+ "tsb-user-posted-a-comment": "Bukan penerjemah",
+ "tsb-reminder-link-text": "Kirim surel pengingat",
+ "tsb-didnt-make-any-translations": "Pengguna ini tidak membuat terjemahan apapun.",
+ "tsb-translations-source": "Sumber",
+ "tsb-translations-user": "Terjemahan {{GENDER:$1|pengguna}}",
+ "tsb-translations-current": "Terjemahan yang ada",
+ "tsb-delete-userpage-summary": "Menghapus halaman pengguna dari seorang pengguna kotak pasir",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Pengguna|Pengguna}} ditolak",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Pengguna|Pengguna}} diterima",
+ "translationstash": "Selamat datang",
+ "translate-translationstash-welcome": "Selamat datang, {{GENDER:$1|$1}}. Anda adalah seorang peneerjemah baru",
+ "translate-translationstash-welcome-note": "Biasakan diri dengan peralatan penerjemahan. Terjemahkan beberapa pesan dan dapatkan hak penerjemahan penuh untuk berpartisipasi di proyek-proyek favorit anda.",
+ "translate-translationstash-initialtranslation": "Terjemahan awal Anda",
+ "translate-translationstash-translations": "$1 menyelesaikan {{PLURAL:$1|terjemahan|terjemahan}}",
+ "translate-translationstash-skip-button-label": "Coba yang lainnya",
+ "tsb-limit-reached-title": "Terima kasih atas terjemahan Anda",
+ "tsb-limit-reached-body": "Anda telah mencapai batas penerjemahan untuk penerjemah baru.\nTim kami akan memeriksa dan memperbarui akun Anda segera.\nLalu Anda akan bisa menerjemahkan tanpa batas.",
+ "tsb-no-requests-from-new-users": "Tidak ada permohonan dari pengguna baru",
+ "tsb-create-user-page": "Membuat halaman pengguna dasar",
+ "log-name-translatorsandbox": "Catatan kotak pasir terjemahan",
+ "log-description-translatorsandbox": "Catatan tindakan kepada pengguna kotak pasir terjemahan",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|mengangkat}} $3 menjadi {{GENDER:$4|penerjemah}}",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|menolak}} permohonan dari \"$3\" untuk menjadi seorang penerjemah",
+ "logentry-newusers-tsbpromoted": "Akun pengguna $3 {{GENDER:$2|dibuat}} melalui promosi dari kotak pasir"
+}
diff --git a/Translate/i18n/sandbox/ie.json b/Translate/i18n/sandbox/ie.json
new file mode 100644
index 00000000..d63626d8
--- /dev/null
+++ b/Translate/i18n/sandbox/ie.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Renan"
+ ]
+ },
+ "tsb-translations-source": "Fonte"
+}
diff --git a/Translate/i18n/sandbox/io.json b/Translate/i18n/sandbox/io.json
new file mode 100644
index 00000000..40306df9
--- /dev/null
+++ b/Translate/i18n/sandbox/io.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joao Xavier"
+ ]
+ },
+ "tsb-request-count": "$1 {{PLURAL:$1|demando|demandi}}",
+ "tsb-didnt-make-any-translations": "Ca uzero tradukis nulo.",
+ "translationstash": "Bonveno"
+}
diff --git a/Translate/i18n/sandbox/is.json b/Translate/i18n/sandbox/is.json
new file mode 100644
index 00000000..24282b75
--- /dev/null
+++ b/Translate/i18n/sandbox/is.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sveinn í Felli"
+ ]
+ },
+ "tsb-all-languages-button-label": "Öll tungumál",
+ "tsb-accept-button-label": "Samþykkja",
+ "tsb-reject-button-label": "Hafna",
+ "tsb-accept-all-button-label": "Samþykkja allt",
+ "tsb-reject-all-button-label": "Hafna öllu",
+ "tsb-translations-source": "Uppruni",
+ "translationstash": "Velkomin"
+}
diff --git a/Translate/i18n/sandbox/it.json b/Translate/i18n/sandbox/it.json
new file mode 100644
index 00000000..01f59998
--- /dev/null
+++ b/Translate/i18n/sandbox/it.json
@@ -0,0 +1,51 @@
+{
+ "@metadata": {
+ "authors": [
+ "Beta16",
+ "Nemo bis"
+ ]
+ },
+ "managetranslatorsandbox": "Gestire la sandbox di traduzione",
+ "tsb-filter-pending": "Richieste in sospeso",
+ "tsb-reminder-title-generic": "Completa l'introduzione per diventare un traduttore",
+ "tsb-reminder-content-generic": "Ciao $1,\n\nGrazie per esserti registrato su {{SITENAME}}.\n\nSe completi i test di traduzione, gli amministratori ti concederanno l'accesso completo da traduttore in un breve periodo.\n\nVieni e fai alcune altre traduzioni su:\n$2\n\n$3,\nLo staff di {{SITENAME}}",
+ "tsb-reminder-sending": "Invio i promemoria...",
+ "tsb-reminder-sent": "{{PLURAL:$1|Inviato $1 promemoria $2. Tempo: $2.|Inviati $1 promemoria. Tempo dell'ultimo: $2.}}",
+ "tsb-reminder-sent-new": "Inviato un promemoria",
+ "tsb-reminder-failed": "Invio del promemoria non riuscito",
+ "tsb-email-promoted-subject": "Ora sei un traduttore su {{SITENAME}}",
+ "tsb-email-promoted-body": "Ciao $1,\n\nCongratulazioni! Ho controllato le traduzioni di prova che hai effettuato su {{SITENAME}} e ti ho concesso i diritti completi di {{GENDER:$1|traduttore|traduttrice|traduttore/trice}}.\n\nVieni su {{SITENAME}} per continuare a tradurre ora e ogni giorno:\n$2\n\n{{GENDER:$1|Benvenuto|Benvenuta|Benvenuto/a}} e grazie per i tuoi contributi!\n\n{{GENDER:$3|$3}},\nLo staff di {{SITENAME}}",
+ "tsb-email-rejected-subject": "La tua richiesta di essere un traduttore su {{SITENAME}} è stata rifiutata",
+ "tsb-email-rejected-body": "Ciao {{GENDER:$1|$1}},\n\nGrazie per aver richiesto di diventare un traduttore su {{SITENAME}}. Mi dispiace informarti che ho dovuto rifiutare la tua domanda, perché la qualità delle traduzioni non soddisfaceva i requisiti.\n\nSe pensi che la tua richiesta sia stata respinta per errore, prova a rifare nuovamente domanda di diventare traduttore su {{SITENAME}}. Puoi registrarti qui:\n$2\n\n{{GENDER:$3|$3}},\nlo staff di {{SITENAME}}",
+ "tsb-request-count": "{{PLURAL:$1|Una richiesta|$1 richieste}}",
+ "tsb-all-languages-button-label": "Tutte le lingue",
+ "tsb-search-requests": "Cerca richieste in sospeso",
+ "tsb-accept-button-label": "Accetta",
+ "tsb-reject-button-label": "Rifiuta",
+ "tsb-selected-count": "{{PLURAL:$1|$1 utente selezionato|$1 utenti selezionati}}",
+ "tsb-older-requests": "$1 {{PLURAL:$1|richiesta precedente|richieste precedenti}}",
+ "tsb-accept-all-button-label": "Accetta tutto",
+ "tsb-reject-all-button-label": "Rifiuta tutto",
+ "tsb-user-posted-a-comment": "Non un traduttore",
+ "tsb-reminder-link-text": "Invia email di promemoria",
+ "tsb-didnt-make-any-translations": "Questo utente non ha fatto alcuna traduzione.",
+ "tsb-translations-source": "Sorgente",
+ "tsb-translations-user": "Traduzioni {{GENDER:$1|utente}}",
+ "tsb-translations-current": "Traduzioni esistenti",
+ "tsb-delete-userpage-summary": "Cancellata la pagina utente di un'utente in prova",
+ "translationstash": "Benvenuto/a",
+ "translate-translationstash-welcome": "{{GENDER:$1|Benvenuto|Benvenuta|Benvenuto/a}} $1, ora sei {{GENDER:$1|un nuovo traduttore|una nuova traduttrice}}",
+ "translate-translationstash-welcome-note": "Acquisisci familiarità con gli strumenti di traduzione. Traduci alcuni messaggi ed ottieni i diritti completi per partecipare ai tuoi progetti preferiti.",
+ "translate-translationstash-initialtranslation": "La tua traduzione iniziale",
+ "translate-translationstash-translations": "$1 {{PLURAL:$1|traduzione completa|traduzioni complete}}",
+ "translate-translationstash-skip-button-label": "Prova con un altro",
+ "tsb-limit-reached-title": "Grazie per le tue traduzioni",
+ "tsb-limit-reached-body": "Hai raggiunto il limite di traduzioni per i nuovi traduttori.\nIl nostro team verificherà ed aggiornerà presto la tua utenza.\nSuccessivamente sarai in grado di tradurre senza limiti.",
+ "tsb-no-requests-from-new-users": "Nessuna richiesta da nuovi utenti",
+ "tsb-create-user-page": "Creata pagina utente di base",
+ "log-name-translatorsandbox": "Sandbox di traduzione",
+ "log-description-translatorsandbox": "Un registro delle azioni sugli utenti della sandbox di traduzione",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|ha promosso}} $3 a {{GENDER:$4|traduttore|traduttrice|traduttore/trice}}",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|ha rifiutato}} la richiesta di \"$3\" di diventare traduttore/trice",
+ "logentry-newusers-tsbpromoted": "L'utenza $3 è stata {{GENDER:$2|creata}} per promozione dalla sandbox"
+}
diff --git a/Translate/i18n/sandbox/ja.json b/Translate/i18n/sandbox/ja.json
new file mode 100644
index 00000000..1fcce01b
--- /dev/null
+++ b/Translate/i18n/sandbox/ja.json
@@ -0,0 +1,55 @@
+{
+ "@metadata": {
+ "authors": [
+ "Omotecho",
+ "Otokoume",
+ "Shirayuki",
+ "Sujiniku"
+ ]
+ },
+ "managetranslatorsandbox": "翻訳者サンドボックスの管理",
+ "tsb-filter-pending": "保留中の申請",
+ "tsb-reminder-title-generic": "翻訳者になるには、自己紹介を記入してください",
+ "tsb-reminder-content-generic": "こんんちは $1 さん、\n\n{{SITENAME}}への登録をありがとうございます。.\n\nテスト翻訳が完了したら、翻訳管理者よりまもなく完全な翻訳権限が承認される予定です。\n\nぜひ以下のリンク先でさらに翻訳を追加してください。\n$2\n\n$3、\n{{SITENAME}} 担当者",
+ "tsb-reminder-sending": "通知を送信しています...",
+ "tsb-reminder-sent": "{{PLURAL:$1|$2に $1 件の通知を送信しました。時間は $2 です。|$1 件の通知を送信しました。最終送信の時間は $2 です。}}",
+ "tsb-reminder-sent-new": "通知を送信しました",
+ "tsb-reminder-failed": "通知を送信できませんでした",
+ "tsb-email-promoted-subject": "あなたは{{SITENAME}}の翻訳者になりました",
+ "tsb-email-promoted-body": "こんにちは、{{GENDER:$1|$1}}さん\n\nおめでとうございます! {{SITENAME}} で行われたテスト翻訳の確認が終了し、あなたには正式な翻訳者としての権限が付与されました。\n\nこれからは自由に {{SITENAME}} での翻訳が行えます:\n$2\n\n改めまして、翻訳の寄与をありがとうございました!\n\n{{SITENAME}} スタッフ {{GENDER:$3|$3}} より",
+ "tsb-email-rejected-subject": "あなたへの{{SITENAME}}での翻訳者権限の付与申請は却下されました",
+ "tsb-email-rejected-body": "こんにちは、{{GENDER:$1|$1}}さん\n\n{{SITENAME}} の翻訳者としてお申込みいただきありがとうございます。あなたの翻訳が品質基準を満たしていなかったため、翻訳者として採用されなかったことをお知らせいたします。\n\nこの結果が間違っていると思われる場合は、{{SITENAME}} の翻訳者として再度お申し込みください。こちらからログインできます:\n$2\n\n{{SITENAME}} スタッフ {{GENDER:$3|$3}} より",
+ "tsb-request-count": "$1 {{PLURAL:$1|件の申請}}",
+ "tsb-all-languages-button-label": "すべての言語",
+ "tsb-search-requests": "未承認の申請の検索",
+ "tsb-accept-button-label": "承認",
+ "tsb-reject-button-label": "却下",
+ "tsb-selected-count": "{{PLURAL:$1|$1 人の利用者を選択しています}}",
+ "tsb-older-requests": "以前の $1 {{PLURAL:$1|件の申請}}",
+ "tsb-accept-all-button-label": "すべて受理",
+ "tsb-reject-all-button-label": "すべて却下",
+ "tsb-user-posted-a-comment": "非翻訳者",
+ "tsb-reminder-link-text": "通知を送信",
+ "tsb-didnt-make-any-translations": "この利用者は何も翻訳していません。",
+ "tsb-translations-source": "原文",
+ "tsb-translations-user": "{{GENDER:$1|利用者}}による翻訳",
+ "tsb-translations-current": "既存の翻訳",
+ "tsb-delete-userpage-summary": "サンドボックス利用者の利用者ページを削除",
+ "tsb-reject-confirmation": "{{PLURAL:$1|利用者|利用者}}を却下",
+ "tsb-accept-confirmation": "{{PLURAL:$1|利用者|利用者}}を承認",
+ "translationstash": "ようこそ",
+ "translate-translationstash-welcome": "ようこそ、$1 さん。あなたは翻訳者になりました",
+ "translate-translationstash-welcome-note": "翻訳ツールに慣れてみましょう。いくつかメッセージを翻訳して完全な翻訳者権限を取得したら、お気に入りのプロジェクトに参加してください。",
+ "translate-translationstash-initialtranslation": "あなたの最初の翻訳",
+ "translate-translationstash-translations": "{{PLURAL:$1|翻訳}}済 $1 件",
+ "translate-translationstash-skip-button-label": "スキップ",
+ "tsb-limit-reached-title": "翻訳していただいてありがとうございます",
+ "tsb-limit-reached-body": "新規翻訳者の翻訳数の上限に達しました。\n私たちのチームがまもなく、アカウントを検証してアップグレードします。\nその後、上限なしで翻訳できるようになります。",
+ "tsb-no-requests-from-new-users": "新規利用者からの申請はありません",
+ "tsb-create-user-page": "基礎的な利用者ページが作成されました",
+ "log-name-translatorsandbox": "翻訳サンドボックス記録",
+ "log-description-translatorsandbox": "翻訳サンドボックス利用者への操作の記録",
+ "logentry-translatorsandbox-promoted": "$1 が $3 を{{GENDER:$4|翻訳者}}に{{GENDER:$2|昇格させました}}",
+ "logentry-translatorsandbox-rejected": "$1 が「$3」の翻訳者権限の付与申請を{{GENDER:$2|却下しました}}",
+ "logentry-newusers-tsbpromoted": "サンドボックスからの昇格に伴い利用者アカウント $3 を{{GENDER:$2|作成}}"
+}
diff --git a/Translate/i18n/sandbox/ka.json b/Translate/i18n/sandbox/ka.json
new file mode 100644
index 00000000..660f7377
--- /dev/null
+++ b/Translate/i18n/sandbox/ka.json
@@ -0,0 +1,38 @@
+{
+ "@metadata": {
+ "authors": [
+ "David1010"
+ ]
+ },
+ "tsb-filter-pending": "მომლოდინე მოთხოვნები",
+ "tsb-reminder-title-generic": "დაასრულეთ შესავალი რათა გახდეთ მთარგმნელი",
+ "tsb-reminder-sending": "შეხსენება იგზავნება...",
+ "tsb-reminder-sent": "{{PLURAL:$1|გაიგზავნა $1 შეხსენება $2-ზე|გაიგზავნა $1 შეხსენება, ბოლო $2-ზე}}",
+ "tsb-reminder-sent-new": "შეხსენება გაგზავნილია",
+ "tsb-reminder-failed": "შეხსენების გაგზავნა ვერ მოხერხდა",
+ "tsb-email-promoted-subject": "თქვენ ახლა მთარგმნელი ხართ პროექტში „{{SITENAME}}“",
+ "tsb-email-rejected-subject": "თქვენი მთარგმნელის უფლებების მოთხოვნა პროექტისათვის „{{SITENAME}}“ უარყოფილია",
+ "tsb-request-count": "$1 {{PLURAL:$1|მოთხოვნა|მოთხოვნა}}",
+ "tsb-all-languages-button-label": "ყველა ენა",
+ "tsb-search-requests": "მოთხოვნების ძიება",
+ "tsb-accept-button-label": "მიღება",
+ "tsb-reject-button-label": "უარყოფა",
+ "tsb-selected-count": "{{PLURAL:$1|არჩეულია $1 მომხმარებელი|არჩეულია $1 მომხმარებელი}}",
+ "tsb-older-requests": "$1 ძველი {{PLURAL:$1|მოთხოვნა|მოთხოვნა}}",
+ "tsb-accept-all-button-label": "ყველას მიღება",
+ "tsb-reject-all-button-label": "ყველას უარყოფა",
+ "tsb-user-posted-a-comment": "არ არის მთარგმნელი",
+ "tsb-reminder-link-text": "შეხსენების ელ.ფოსტით გაგზავნა",
+ "tsb-didnt-make-any-translations": "ამ მომხმარებელს არცერთი თარგმანი არ შეუსრულებია.",
+ "tsb-translations-source": "წყარო",
+ "tsb-translations-user": "{{GENDER:$1|მომხმარებლის}} თარგმანები",
+ "tsb-translations-current": "არსებული თარგმანები",
+ "translationstash": "მოგესალმებით",
+ "translate-translationstash-welcome": "მოგესალმებით {{GENDER:$1|$1}}, თქვენ ახალი მთარგმნელი ხართ",
+ "translate-translationstash-initialtranslation": "თქვენი თავდაპირველი თარგმანი",
+ "translate-translationstash-translations": "$1 დასრულებული {{PLURAL:$1|თარგმანი|თარგმანი}}",
+ "translate-translationstash-skip-button-label": "სხვა სცადეთ",
+ "tsb-limit-reached-title": "მადლობა თქვენი თარგმანებისთვის",
+ "tsb-no-requests-from-new-users": "ახალი მოხმარებლებისგან მოთხოვნები არ არის",
+ "tsb-create-user-page": "მომხმარებლის საბაზო გვერდის შექმნა"
+}
diff --git a/Translate/i18n/sandbox/kaa.json b/Translate/i18n/sandbox/kaa.json
new file mode 100644
index 00000000..3fca139c
--- /dev/null
+++ b/Translate/i18n/sandbox/kaa.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nurlan"
+ ]
+ },
+ "translationstash": "Xosh keldińiz"
+}
diff --git a/Translate/i18n/sandbox/kab.json b/Translate/i18n/sandbox/kab.json
new file mode 100644
index 00000000..71fed2e4
--- /dev/null
+++ b/Translate/i18n/sandbox/kab.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Belkacem77",
+ "Bilalbill"
+ ]
+ },
+ "tsb-all-languages-button-label": "Tutlayin yakk",
+ "tsb-accept-all-button-label": "Ddeg yakk",
+ "tsb-reject-all-button-label": "Agwi yakk",
+ "tsb-user-posted-a-comment": "Mačči d amsuɣel",
+ "tsb-reminder-link-text": "Azen imayl n usmekti",
+ "tsb-didnt-make-any-translations": "Aseqdac-agi ur yettwasuɣel ara yakan.",
+ "tsb-translations-source": "Aɣbalu",
+ "tsb-translations-user": "Tisiqilin n{{GENDER:$1|useqdac|tseqdact}}",
+ "tsb-translations-current": "Tisuqilin yellan",
+ "tsb-reject-confirmation": "{{PLURAL:$1|n usqdac yettwagwin|n iseqdacen yettwagwin}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|n useqdac yettwaddgen|n iseqdacen yettwaqeblen}}",
+ "translationstash": "Ansuf",
+ "translate-translationstash-welcome": "Ansuf {{GENDER:$1|$1}}, aqla-k d amsuɣel amaynut",
+ "translate-translationstash-initialtranslation": "Tasuɣlt-ik tamezwarut",
+ "translate-translationstash-translations": "Tfukkeḍ $1 {{PLURAL:$1|n tsuqilt|n tsuqilin}}.",
+ "translate-translationstash-skip-button-label": "Arem tayeḍ",
+ "tsb-limit-reached-title": "Tanemmirt ɣef tsuqilin-ik",
+ "tsb-no-requests-from-new-users": "Ulac tuttriwin n iseqdacen imaynuten",
+ "tsb-create-user-page": "Rnu asebter aseqdac azadur",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|yessuli}} $3 ar {{GENDER:$4|umsuqel|tamsuqelt}}.",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|yugwi|tugwi}} asuter n $3 akken ad yuɣal d amsuɣel"
+}
diff --git a/Translate/i18n/sandbox/kjp.json b/Translate/i18n/sandbox/kjp.json
new file mode 100644
index 00000000..9d40b3d6
--- /dev/null
+++ b/Translate/i18n/sandbox/kjp.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Rul1902"
+ ]
+ },
+ "tsb-translations-source": "အ်ုထိုဝ်",
+ "translationstash": "အင်းၯးလင်ဖဝ်ႋ"
+}
diff --git a/Translate/i18n/sandbox/kk-cyrl.json b/Translate/i18n/sandbox/kk-cyrl.json
new file mode 100644
index 00000000..f89bddea
--- /dev/null
+++ b/Translate/i18n/sandbox/kk-cyrl.json
@@ -0,0 +1,37 @@
+{
+ "@metadata": {
+ "authors": [
+ "Arystanbek"
+ ]
+ },
+ "tsb-filter-pending": "Күтудегі сұраулар",
+ "tsb-reminder-title-generic": "Аудармашы болу үшін өзіңіз туралу таныстурды енгізуді аяқтаңыз",
+ "tsb-reminder-sent-new": "Еске салуды жіберу",
+ "tsb-reminder-failed": "Еске салуды жіберу сәтсіздікке ұшырады",
+ "tsb-email-promoted-subject": "Сіз қазір {{SITENAME}} сайтында аудармашысыз",
+ "tsb-request-count": "$1 {{PLURAL:$1|сұраным|сұраным}}",
+ "tsb-all-languages-button-label": "Барлық тілдер",
+ "tsb-search-requests": "Іздеусұраныстары",
+ "tsb-accept-button-label": "Қабылдау",
+ "tsb-reject-button-label": "Қайтару",
+ "tsb-selected-count": "{{PLURAL:$1|$1 қатысушы таңдалды|$1 қатысушылар таңдалды}}",
+ "tsb-older-requests": "$1 бұрынғы {{PLURAL:$1|сұраным|сұраным}}",
+ "tsb-accept-all-button-label": "Барлығын қабылдау",
+ "tsb-reject-all-button-label": "Барлығын қайтару",
+ "tsb-user-posted-a-comment": "Аудармашы емес",
+ "tsb-reminder-link-text": "Еске салу электронды хатын жіберу",
+ "tsb-didnt-make-any-translations": "Бұл қатысушы қандайда бір аударма жасаған жоқ.",
+ "tsb-translations-source": "Қайнары",
+ "tsb-translations-user": "{{GENDER:$1|Қатысушы}} аудармалары",
+ "tsb-translations-current": "Бар аудармалар",
+ "translationstash": "Қош келдіңіз!",
+ "translate-translationstash-welcome": "Қош келдіңіз {{GENDER:$1|$1}}, сіз жаңа аудармашысыз",
+ "translate-translationstash-initialtranslation": "Сіздің алғашқы аудармаңыз",
+ "translate-translationstash-translations": "$1 {{PLURAL:$1|аударма|аудармалар}} жасады",
+ "translate-translationstash-skip-button-label": "Басқасын көріңіз",
+ "tsb-limit-reached-title": "Аудармаларыңыз үшін рақмет",
+ "tsb-no-requests-from-new-users": "Жаңа қатысушылардан өтініш жоқ",
+ "tsb-create-user-page": "Негізгі қатысушы бетін бастау",
+ "log-name-translatorsandbox": "Аударма зертханасы",
+ "logentry-translatorsandbox-promoted": "$1 $3 есімді қатысушыны {{GENDER:$4|аудармашы}} дегенге {{GENDER:$2|дәрежесін көтерді}}"
+}
diff --git a/Translate/i18n/sandbox/km.json b/Translate/i18n/sandbox/km.json
new file mode 100644
index 00000000..03ae8d66
--- /dev/null
+++ b/Translate/i18n/sandbox/km.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "គីមស៊្រុន"
+ ]
+ },
+ "tsb-all-languages-button-label": "ភាសាទាំងអស់",
+ "tsb-limit-reached-title": "សូមអរគុណចំពោះការបកប្រែរបស់អ្នក"
+}
diff --git a/Translate/i18n/sandbox/ko.json b/Translate/i18n/sandbox/ko.json
new file mode 100644
index 00000000..fb119a2c
--- /dev/null
+++ b/Translate/i18n/sandbox/ko.json
@@ -0,0 +1,59 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bluehill",
+ "Daisy2002",
+ "Hwangjy9",
+ "Hym411",
+ "Kurousagi",
+ "MemphisA5",
+ "Priviet",
+ "Revi",
+ "Ykhwong",
+ "아라"
+ ]
+ },
+ "managetranslatorsandbox": "번역자 연습장 관리",
+ "tsb-filter-pending": "보류 중인 요청",
+ "tsb-reminder-title-generic": "검증된 번역자가 되려면 소개를 작성하세요",
+ "tsb-reminder-content-generic": "$1 님 안녕하세요.\n\n{{SITENAME}}에 등록해주셔서 감사합니다.\n테스트 번역을 완료하시면, 관리자가 곧 전체 번역 접근 권한을 부여할 것입니다.\n\n$2에 와서 조금 더 번역을 해주세요.\n\n{{SITENAME}} 직원, $3",
+ "tsb-reminder-sending": "알림 보내는 중...",
+ "tsb-reminder-sent": "{{PLURAL:$1|알림 $1개를 보냈습니다. 시간: $2.|알림 $1개를 보냈습니다. 마지막으로 보낸 시간: $2.}}",
+ "tsb-reminder-sent-new": "알림을 보냄",
+ "tsb-reminder-failed": "알림 보내기를 실패했습니다",
+ "tsb-email-promoted-subject": "당신은 {{SITENAME}}의 번역자가 됐습니다.",
+ "tsb-email-promoted-body": "안녕하세요. {{GENDER:$1|$1}} 님\n\n축하드립니다! {{SITENAME}}에서 하신 테스트 번역을 확인하고 전체 번역 권한을 부여해드렸습니다.\n\n지금 {{SITENAME}}에 오셔서 번역을 계속해주세요:\n$2\n\n오신 것을 환영하며 당신의 기여에 감사드립니다.\n\n{{SITENAME}} 직원, {{GENDER:$3|$3}}",
+ "tsb-email-rejected-subject": "당신의 {{SITENAME}}의 번역자 지원서가 거절됐습니다.",
+ "tsb-email-rejected-body": "안녕하세요. {{GENDER:$1|$1}} 님\n\n{{SITENAME}}의 번역자에 지원해주셔서 감사합니다. 안타깝게도 귀하의 지원서는 귀하의 번역이 필수 조건을 충족하지 않아 채택되지 못하였습니다.\n\n만약 당신의 지원서가 잘못 또는 실수로 채택되지 못하였다고 생각하신다면 {{SITENAME}}의 번역자로서 다시 지원해주시기 바랍니다. 여기에서 등록하실 수 있습니다: $2\n\n{{SITENAME}} 담당자, {{GENDER:$3|$3}}",
+ "tsb-request-count": "{{PLURAL:$1|요청 한 개|요청 $1개}}",
+ "tsb-all-languages-button-label": "모든 언어",
+ "tsb-search-requests": "보류 중인 요청 검색",
+ "tsb-accept-button-label": "승인",
+ "tsb-reject-button-label": "거부",
+ "tsb-selected-count": "{{PLURAL:$1|$1명의 사용자 선택됨}}",
+ "tsb-older-requests": "{{PLURAL:$1|개의 요청}}",
+ "tsb-accept-all-button-label": "모두 승인",
+ "tsb-reject-all-button-label": "모두 거절",
+ "tsb-user-posted-a-comment": "번역자 아님",
+ "tsb-reminder-link-text": "이메일 알림 보내기",
+ "tsb-didnt-make-any-translations": "이 사용자는 번역한 적이 없습니다.",
+ "tsb-translations-source": "출처",
+ "tsb-translations-user": "{{GENDER:$1|사용자}}의 번역",
+ "tsb-translations-current": "기존 번역",
+ "tsb-delete-userpage-summary": "연습 사용자의 사용자 문서 삭제",
+ "translationstash": "환영합니다",
+ "translate-translationstash-welcome": "$1님 환영합니다, 당신은 이제 번역자입니다.",
+ "translate-translationstash-welcome-note": "번역 도구에 익숙해지세요. 몇 개의 메시지를 번역하시고 완전한 번역자 권한을 얻어 좋아하는 프로젝트에 참여하세요.",
+ "translate-translationstash-initialtranslation": "내 초기 번역",
+ "translate-translationstash-translations": "완성한 {{PLURAL:$1|번역}} $1개",
+ "translate-translationstash-skip-button-label": "다른 문서",
+ "tsb-limit-reached-title": "당신의 번역에 감사드립니다.",
+ "tsb-limit-reached-body": "새 번역자를 위한 번역 제한에 도달했습니다. 저희가 당신의 계정을 확인하고 업그레이드한 후에, 제한 없이 번역하실 수 있습니다.",
+ "tsb-no-requests-from-new-users": "새 사용자의 요청 없음",
+ "tsb-create-user-page": "기본 사용자 문서를 만듦",
+ "log-name-translatorsandbox": "번역 연습장 기록",
+ "log-description-translatorsandbox": "번역 연습 사용자의 명령 기록",
+ "logentry-translatorsandbox-promoted": "$1님이 $3님을 {{GENDER:$4|번역자}}로 {{GENDER:$2|승격시켰습니다}}",
+ "logentry-translatorsandbox-rejected": "$1님이 \"$3\"님의 번역자 승격 신청을 {{GENDER:$2|거절했습니다}}",
+ "logentry-newusers-tsbpromoted": "$3 사용자 계정은 연습장에서의 승격에 따라 {{GENDER:$2|만들어졌습니다}}"
+}
diff --git a/Translate/i18n/sandbox/ksh.json b/Translate/i18n/sandbox/ksh.json
new file mode 100644
index 00000000..8914ec89
--- /dev/null
+++ b/Translate/i18n/sandbox/ksh.json
@@ -0,0 +1,51 @@
+{
+ "@metadata": {
+ "authors": [
+ "Als-Holder",
+ "Purodha"
+ ]
+ },
+ "managetranslatorsandbox": "Donn en Schpellwiß för de Övversäzer ennreeschde un verwallde.",
+ "tsb-filter-pending": "Aanfroore en der Waadeschlang",
+ "tsb-reminder-title-generic": "Maach Ding Sällefsvörschtällong fähdesch, öm enen beschtääteschten Övversäzzer ze wääde.",
+ "tsb-reminder-content-generic": "Daach $1,\nmer bedangke ons dat De Desch köözlesch {{ucfirst:{{GRAMMAR:em|{{ucfirst:{{SITENAME}}}}}}}} aanjemälldt häs. Wann Do jraad noch e paa Övversäzonge för et Pröhve fähdesch mähß, künne de Wikki_Kööbeße desch freischallde för et Övversäzze.\n\nBes esu jood un donn Desch op {{GRAMMAR:Dativ|$2}} enlogge un maach e paa Övversäzonge.\n\n$3\nvum Päsonaal {{ucfirst:{{GRAMMAR:gen|{{ucfirst:{{SITENAME}}}}}}}}",
+ "tsb-reminder-sending": "Ben de Äennerong aam schecke&nbsp;…",
+ "tsb-reminder-sent": "{{PLURAL:$1|Ein Ännerong öm $2 Uhr jeschek|$1 Änneronge jeschek, zerläz öm $2 Uhr|Kein Ännerong öm $2 Uhr jeschek}}.",
+ "tsb-reminder-sent-new": "Han de Ä'ennerong verscheck.",
+ "tsb-reminder-failed": "Han kein Äennerong verscheck. Et hät nit jeflupp.",
+ "tsb-email-promoted-subject": "Do bes jäds_ene Övversäzer em {{SITENAME}}",
+ "tsb-email-promoted-body": "Daach $1,\n\nmer han Ding Övversäzonge op {{SITENAME}} jepröhv un han Der nu de volle Rääschte als Övversäzer jejovve.\n\nKumm, un maach wigger mem Övversäze, jäz un alle Dääsch:\n$2\n\nBes wellkumme, un mer danke för Ding Beijdrähsch!\n\n{{GENDER:$3|$3}}, ene Bedriever {{GRAMMAR: 2 v|{{lcfirst:{{SITENAME}}}}}}",
+ "tsb-email-rejected-subject": "Dinge Wonsch, heh ene Övversäzer ze wähde wohd affjelehnt.",
+ "tsb-email-rejected-body": "Daach $1,\n\nmer han Ding Övversäzonge op {{SITENAME}} jepröhv un et deihd ons leid, dat se nit ons Aaanforderonge aan de Qualliteid äfölle. Dröm ham_mer Dinge Wonsch, als Övversäzer metzemaache, eez ens nit nohjejovve.\n\nWann De fengks, dat mer ons velleisch verdonn han, donn Desch eijnfach norr_ens bewärrbe. Jang derföhr op di Sigg:\n$2\n\nEne lehve Jrohß {{GENDER:$2|vum|vum|vumm Metmaacher|vun dä|vum}}\n\n$3\n\n{{GENDER:$2|enem Bedrihver|ene Bedrihverėn|enem Bedrihver|ene Bedrihverėn|Bedrihver}} {{GRAMMAR: 2 v|{{lcfirst:{{SITENAME}}}}}}",
+ "tsb-request-count": "{{PLURAL:$1|Ein|$1|Kein}} Aanfrohre",
+ "tsb-all-languages-button-label": "Alle Schprohche",
+ "tsb-search-requests": "Söhk en de Aanfohre",
+ "tsb-accept-button-label": "Aanämme",
+ "tsb-reject-button-label": "Aflehne",
+ "tsb-selected-count": "{{PLURAL:$1|Eine|$1|Keine}} Metmaacher ußjesöhk",
+ "tsb-older-requests": "{{PLURAL:$1|Ein|$1|Kein}} älldere Aanfroore",
+ "tsb-accept-all-button-label": "All aanämme",
+ "tsb-reject-all-button-label": "All aflehne",
+ "tsb-user-posted-a-comment": "Keine Övversäzer",
+ "tsb-reminder-link-text": "Schegg_en Ä'ennerong pä <i lang=\"en\" xml:lang=\"en\">e-mail</i>",
+ "tsb-didnt-make-any-translations": "Dä metmaacher hät kein Övversäzonge jemaat.",
+ "tsb-translations-source": "Quall",
+ "tsb-translations-user": "Övversäzonge {{GENDER:$1|vum Metmaacher|vun dä Metmaacherėn|vum Metmaacher|vun dä Metmaacherėn|vum Metmaacher}}",
+ "tsb-translations-current": "Övversäzonge, di ald doh sin",
+ "tsb-delete-userpage-summary": "Metmaachersigg vun enem !FUZZY!! sandbox user fottt schmiiße",
+ "translationstash": "Wellkumme",
+ "translate-translationstash-welcome": "Wellkumme $1, Do bess_en{{GENDER:$1|e||e||e}} neuje Övversäzer{{GENDER:$1||ėn||ėn|}}.",
+ "translate-translationstash-welcome-note": "Maach Desch met däm Wärkzüsch zom Övversäzze vertroud un donn e paa Täxte un Noreeschte övversäzze. Dann kriß de de kumplätte schtandattmähßeje Rääschde als ene Övversäzer un kanns aan Dinge leevste Projäkte metmaaache.",
+ "translate-translationstash-initialtranslation": "Ding eezde Övversäzong",
+ "translate-translationstash-translations": "$1 fäädeje {{PLURAL:$1|Övversäzong|Övversäzonge|Övversäzong}}",
+ "translate-translationstash-skip-button-label": "Nemm en andere",
+ "tsb-limit-reached-title": "Dangke för Ding Övversäzonge",
+ "tsb-limit-reached-body": "Do bes aan de Jräns vun Övversäzonge för Neue aanjekumme. Dinge Beijdrähsch wääde bahl jepröhv un Dinge Zohjang zum Wikki op schtandatt jeschllt. Dann kanns De onbejränz övversäze.",
+ "tsb-no-requests-from-new-users": "Kein Aanfroore vun neue Metmaacher",
+ "tsb-create-user-page": "E jrondlähje Metmaacher_Sigg aanjelaht.",
+ "log-name-translatorsandbox": "Sandkaste för et Övversäze",
+ "log-description-translatorsandbox": "Et Logbooch vun wat de Metmaacher em Sandkaste för et Övversäze jedonn han",
+ "logentry-translatorsandbox-promoted": "{{GENDER:$2|Dä Metmaacher|De Metmaacherėn|Dä Metmaacher|De Metmaacherėn|Dä Metmaacher}} $1 hät {{GENDER:$4|Dä Metmaacher|De Metmaacherėn|Dä Metmaacher|De Metmaacherėn|Dä Metmaacher}} $3 en di Jrop „Övversäzer“ jedonn.",
+ "logentry-translatorsandbox-rejected": "D{{GENDER:$2|ä Metmaacher|e Metmaacherėn|ä Metmaacher|e Metmaacherėn|ä Metmaacher}} $1 hät afjelehnt, dä Metmaacher $3 zom Övversäzer opzeschohfe.",
+ "logentry-newusers-tsbpromoted": "{{GENDER:$2|Däm|Däm|Däm Metmaacher|Dä|Däm}} $3 {{GENDER:$2|singe|singe|singe|iere|singe}} Zohjang wohd vun {{GENDER:$2|däm singe|däm singe|dämm singe|dä iehre|däm singe}} Schpellwiß för et Övversäze aanjeläät."
+}
diff --git a/Translate/i18n/sandbox/ksw.json b/Translate/i18n/sandbox/ksw.json
new file mode 100644
index 00000000..916c00a1
--- /dev/null
+++ b/Translate/i18n/sandbox/ksw.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "SawJaemin"
+ ]
+ },
+ "tsb-all-languages-button-label": "ကျိာ်ခဲလၢာ်",
+ "tsb-translations-user": "{{GENDER:$1|ပှၤသူတၢ်ဖိ}} တၢ်ကျိာ်ထံ",
+ "tsb-translations-current": "တၢ်ကျိာ်ထံတဖၣ်လၢအိၣ်ပာ်",
+ "translate-translationstash-translations": "{{PLURAL:$1|တၢ်ကျိာ်ထံ|တၢ်ကျိာ်ထံတဖၣ်}} $1 ခါဝံၤလံ"
+}
diff --git a/Translate/i18n/sandbox/ku-latn.json b/Translate/i18n/sandbox/ku-latn.json
new file mode 100644
index 00000000..fa656804
--- /dev/null
+++ b/Translate/i18n/sandbox/ku-latn.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bikarhêner",
+ "George Animal"
+ ]
+ },
+ "tsb-all-languages-button-label": "Hemû ziman",
+ "tsb-search-requests": "Li daxwaziyên li bendê bigere",
+ "tsb-accept-button-label": "Bipejirîne",
+ "tsb-translations-source": "Çavkanî"
+}
diff --git a/Translate/i18n/sandbox/lag.json b/Translate/i18n/sandbox/lag.json
new file mode 100644
index 00000000..734c29b0
--- /dev/null
+++ b/Translate/i18n/sandbox/lag.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Baba Tabita"
+ ]
+ },
+ "tsb-translations-source": "Nchoongo",
+ "translationstash": "Teenga"
+}
diff --git a/Translate/i18n/sandbox/lb.json b/Translate/i18n/sandbox/lb.json
new file mode 100644
index 00000000..e9a4f40d
--- /dev/null
+++ b/Translate/i18n/sandbox/lb.json
@@ -0,0 +1,48 @@
+{
+ "@metadata": {
+ "authors": [
+ "Robby",
+ "Soued031"
+ ]
+ },
+ "managetranslatorsandbox": "Iwwersetzer-Sandkëscht geréieren",
+ "tsb-filter-pending": "Ufroen am Suspens",
+ "tsb-reminder-title-generic": "Kompletéiert Är Virstellung fir Iwwersetzer ze ginn",
+ "tsb-reminder-sending": "Erënnerung gëtt geschéckt...",
+ "tsb-reminder-sent": "{{PLURAL:$1|Eng Erënnerung geschéckt. Zäit: $2.|$1 Erënnerunge geschéckt. Zäit vun der leschter: $2.}}",
+ "tsb-reminder-sent-new": "Eng Erënnerung schécken",
+ "tsb-reminder-failed": "D'Erënnerung schécken huet net funktionéiert",
+ "tsb-email-promoted-subject": "Dir sidd elo Iwwersetzer op {{SITENAME}}",
+ "tsb-email-rejected-subject": "Är Demande fir en Iwwersetzer op {{SITENAME}} ze gi gouf refuséiert.",
+ "tsb-email-rejected-body": "Bonjour $1,\n\nMerci fir Är Ufro als Iwwersetzer op {{SITENAME}}. Ech bedaueren Iech informéieren ze missen, datt ech Är Demande refuséiert hunn well d'Qualitéit vun Ären Iwwersetzungen net den Ufuerderungen entsprécht.\n\nWann Dir mengt Är Ufro gouf iertemlecherweis refuséiert da stellt wgl. Är Ufro als Iwwersetzer op {{SITENAME}} nach eng Kéier. Dir kënnt Iech hei registréieren:\n$2\n\n$3,\n{{GENDER:$3|Mataarbechter|Mataarbechterin|Mataarbechter}} vu(n) {{SITENAME}}",
+ "tsb-request-count": "{{PLURAL:$1|Eng Ufro|$1 Ufroen}}",
+ "tsb-all-languages-button-label": "All Sproochen",
+ "tsb-search-requests": "An Ufroe sichen",
+ "tsb-accept-button-label": "Akzeptéieren",
+ "tsb-reject-button-label": "Refuséieren",
+ "tsb-selected-count": "{{PLURAL:$1|Ee|$1}}Benotzer erausgesicht",
+ "tsb-older-requests": "$1 méi al {{PLURAL:$1|Ufro|Ufroen}}",
+ "tsb-accept-all-button-label": "All akzeptéieren",
+ "tsb-reject-all-button-label": "Alles refuséieren",
+ "tsb-user-posted-a-comment": "Keen Iwwersetzer",
+ "tsb-reminder-link-text": "E-Mail-Erënnerung schécken",
+ "tsb-didnt-make-any-translations": "Dëse Benotzer huet nach keng Iwwersetzunge gemaach.",
+ "tsb-translations-source": "Quell",
+ "tsb-translations-user": "{{GENDER:$1|Benotzer}} Iwwersetzungen",
+ "tsb-translations-current": "Iwwersetzungen déi et gëtt",
+ "tsb-delete-userpage-summary": "Benotzersäit vun engem Sandbox-Benotzer läschen",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Benotzer}} refuséiert",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Benotzer}} akzeptéiert",
+ "translationstash": "Wëllkomm",
+ "translate-translationstash-welcome": "Wëllkomm {{GENDER:$1|$1}}, Dir sidd en neien Iwwersetzer",
+ "translate-translationstash-initialtranslation": "Är éischt Iwwersetzung",
+ "translate-translationstash-translations": "{{PLURAL:$1|eng komplett Iwwersetzung|$1 komplett Iwwersetzungen}}",
+ "translate-translationstash-skip-button-label": "Probéiert eng Aner",
+ "tsb-limit-reached-title": "Merci fir Är Iwwersetzungen",
+ "tsb-limit-reached-body": "Dir hutt d'Iwwersetzungslimitt fir nei Iwwersetzer erreecht.\nEis Ekipp kuckt Äre Benotzerkont geschwënn no a setzt en erop.\nDa kënnt Dir ouni Limitatiounen iwwersetzen.",
+ "tsb-no-requests-from-new-users": "Keng Ufroe vun neie Benotzer",
+ "tsb-create-user-page": "Eng einfach Benotzersäit uleeën",
+ "log-name-translatorsandbox": "Logbuch vun der Iwwersetzungs-Sandkëscht",
+ "logentry-translatorsandbox-rejected": "$1 huet d'Ufro vum \"$3\" fir {{GENDER:$2|Iwwersetzesch|Iwwersetzer}} ze gi refuséiert",
+ "logentry-newusers-tsbpromoted": "De Benotzerkont $3 gouf {{GENDER:$2|ugeluecht}} duerch d'Promotioun aus der Sandkëscht"
+}
diff --git a/Translate/i18n/sandbox/lki.json b/Translate/i18n/sandbox/lki.json
new file mode 100644
index 00000000..3f6f916f
--- /dev/null
+++ b/Translate/i18n/sandbox/lki.json
@@ -0,0 +1,39 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hosseinblue",
+ "Lakzon"
+ ]
+ },
+ "managetranslatorsandbox": "مدیریت کاربران مترجم",
+ "tsb-filter-pending": "در حال انتظار درخواست‌ها",
+ "tsb-reminder-title-generic": "معرفی‌نامهٔ خود را برای تبدیل شدن به یک مترجم کامل کنید",
+ "tsb-reminder-content-generic": "سلام $1،\n تشکر برای ثبت‌نام با {{SITENAME}}.\nاگر شما ترجمه‌های امتحانی خود را کامل کنید، سرپرستان به شما ترجمه کامل در دسترس را زود پس از آن به شما تعطا خواهند کرد.\nلطفاً بیایید و چند ترجمه بیشتر اینجا ایجاد کنیدː\n$2\n$3،\nکارکنان {{SITENAME}}",
+ "tsb-reminder-sending": "در حال فرستادن یادآوری...",
+ "tsb-reminder-sent-new": "فرستادن یک یادآوری",
+ "tsb-reminder-failed": "عدم موفقیت در فرستادن یادآوری",
+ "tsb-email-promoted-subject": "شما در حال حاضر یک مترجم در {{SITENAME}} هستید",
+ "tsb-email-promoted-body": "سلام {{GENDER:$1|$1}}،\n\nتبریکǃ من ترجمه‌های امتحانی که شما در {{SITENAME}} ایجاد کردید را بررسی کردم و به شما تمام حقوق مترجم را دادم.\n\nاکنون به {{SITENAME}} برای ادامه ترجمه بیایید، و هر روزː \n$2\n\nخوش‌‌آمدید، و از شما برای کمک تشکر می کنمǃ\n{{GENDER:$3|$3}}،\n{{SITENAME}} کارکنان",
+ "tsb-email-rejected-subject": "درخواست شما برای مترجم شدن در {{SITENAME}} رد شد",
+ "tsb-email-rejected-body": "سلام {{GENDER:$1|$1}}،\n\nتشکر از شما برای درخواست به عنوان مترجم در {{SITENAME}}. متأسفم که به شما اطلاع دادم که درخواست شما را رد کرده‌ام، زیرا کیفیت ترجمه‌های شما، نیازها را برآورد نکرد.\n\nاگر فکر می‌کنید که درخواست شما اشتباهاً رد شده‌است، لطفاً برای درخواست مجدد به عنوان مترجم در {{SITENAME}} درخواست دهید. شما می‌توانید اینجا ثبت‌نام کنیدː\n$2\n\n{{GENDER:$3|$3}}،\n{{SITENAME}} کارکنان",
+ "tsb-request-count": "$1 {{PLURAL:$1|درخواست|درخواست‌ها}}",
+ "tsb-all-languages-button-label": "کؤل(گشت)زوونەل",
+ "tsb-search-requests": "نتایج مِنِی کردن",
+ "tsb-accept-button-label": "پذیرفتن",
+ "tsb-reject-button-label": "ردکردن",
+ "tsb-accept-all-button-label": "پذیرش همه",
+ "tsb-reject-all-button-label": "رد همه",
+ "tsb-user-posted-a-comment": "یک مترجم نیست",
+ "tsb-reminder-link-text": "ارسال ایمیل یادآور",
+ "tsb-didnt-make-any-translations": "این کاربر هیچ ترجمه‌ای انجام نداده.",
+ "tsb-translations-source": "بنچەک(منبع)",
+ "translationstash": "خؤةش هةتین/هاتین",
+ "translate-translationstash-welcome": "خؤةش هةتین {{GENDER:$1|$1}}، شما یک مترجم تازه هستید",
+ "translate-translationstash-welcome-note": "آشنا شدن با ابزارهای ترجمه. چند پیام را ترجمه کنید و تمام حقوق مترجم را برای شرکت در پروژه‌های مورد علاقه خود بدست آورید.",
+ "translate-translationstash-initialtranslation": "ترجمه‌های اولیهٔ شما",
+ "translate-translationstash-skip-button-label": "امتحان دیگری",
+ "tsb-limit-reached-title": "سپاسگزاری برای ترجمه‌های شما",
+ "log-name-translatorsandbox": "جعبه شنی ترجمه",
+ "log-description-translatorsandbox": "سیاهه‌ای از عملکرد بر روی کاربران جعبه شنی ترجمه",
+ "logentry-translatorsandbox-promoted": "$1، $3 را به {{GENDER:$4|مترجم}} {{GENDER:$2|ترفیع}} داد"
+}
diff --git a/Translate/i18n/sandbox/lrc.json b/Translate/i18n/sandbox/lrc.json
new file mode 100644
index 00000000..19ab133d
--- /dev/null
+++ b/Translate/i18n/sandbox/lrc.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mogoeilor"
+ ]
+ },
+ "tsb-all-languages-button-label": "همه زونيا",
+ "tsb-accept-button-label": "پذيرشت",
+ "tsb-reject-button-label": "رد كردن",
+ "tsb-accept-all-button-label": "همه نه قوول کو",
+ "tsb-reject-all-button-label": "همه نه رد کو",
+ "tsb-translations-source": "سرچشمه",
+ "translationstash": "خوش اومايت",
+ "translate-translationstash-skip-button-label": "يكی هنی نه امتحان بكيد",
+ "tsb-limit-reached-title": "سی والرستن تو منمونيم"
+}
diff --git a/Translate/i18n/sandbox/lt.json b/Translate/i18n/sandbox/lt.json
new file mode 100644
index 00000000..4f3943f8
--- /dev/null
+++ b/Translate/i18n/sandbox/lt.json
@@ -0,0 +1,46 @@
+{
+ "@metadata": {
+ "authors": [
+ "Eitvys200",
+ "Manvydasz"
+ ]
+ },
+ "managetranslatorsandbox": "Tvarkyti vertėjo smėlio dėžę",
+ "tsb-filter-pending": "Neišnagrinėti prašymai",
+ "tsb-reminder-title-generic": "Užbaigti įvadą ir tapti vertėju",
+ "tsb-reminder-sending": "Siunčiamas priminimas...",
+ "tsb-reminder-sent": "{{PLURAL:$1|Išsiųstas $1 priminimas. Laikas: $2.|Išsiųsti $1 priminimai. Paskutinio laikas: $2.}}",
+ "tsb-reminder-sent-new": "Išsiųstas priminimas",
+ "tsb-reminder-failed": "Priminimo išsiųsti nepavyko",
+ "tsb-email-promoted-subject": "Dabar esate {{SITENAME}} vertėjas",
+ "tsb-email-promoted-body": "Sveiki, {{GENDER:$1|$1}},\n\nSveikinu! Aš patikrinau jūsų bandomuosius vertimus, kuriuos jūs atlikote {{SITENAME}} ir suteikiau jums visas vertėjo teises.\n\nEikite į {{SITENAME}}, kad galėtumėte versti dabar ir kiekvieną dieną:\n$2\n\nSveiki atvykę ir ačiū už jūsų įnašą!\n\n{{GENDER:$3|$3}},\n{{SITENAME}} darbuotojas",
+ "tsb-email-rejected-subject": "Jūsų prašymas tapti {{SITENAME}} vertėju buvo atmestas",
+ "tsb-request-count": "$1 {{PLURAL:$1|prašymas|prašymai}}",
+ "tsb-all-languages-button-label": "Visos kalbos",
+ "tsb-search-requests": "Ieškoti prašymų",
+ "tsb-accept-button-label": "Priimti",
+ "tsb-reject-button-label": "Atmesti",
+ "tsb-selected-count": "{{PLURAL:$1|$1 pasirinktas vartotojas|$1 pasirinkti vartotojai}}",
+ "tsb-older-requests": "$1 {{PLURAL:$1|senesnis prašymas|senesni prašymai}}",
+ "tsb-accept-all-button-label": "Priimti visus",
+ "tsb-reject-all-button-label": "Atmesti visus",
+ "tsb-user-posted-a-comment": "Ne vertėjas",
+ "tsb-reminder-link-text": "Siųsti priminimą el. paštu",
+ "tsb-didnt-make-any-translations": "Šis vartotojas neatliko jokių vertimų.",
+ "tsb-translations-source": "Šaltinis",
+ "tsb-translations-user": "{{GENDER:$1|Vartotojo|Vartotojos}} vertimai",
+ "tsb-translations-current": "Egzistuojantys vertimai",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Vartotojas atmestas|Vartotojai atmesti}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Vartotojas priimtas|Vartotojai priimti}}",
+ "translationstash": "Sveiki atvykę",
+ "translate-translationstash-welcome": "Sveiki atvykę, {{GENDER:$1|$1}}, esate {{GENDER:$1|naujas vertėjas|nauja vertėja}}",
+ "translate-translationstash-welcome-note": "Susipažinkite su vertimo įrankiais. Išverskite kelis pranešimus ir gaukite pilnas vertėjo teises, kad galėtumėte dalyvauti savo mėgstamiausiuose projektuose.",
+ "translate-translationstash-initialtranslation": "Jūsų pirmininis vertimas",
+ "translate-translationstash-translations": "$1 atliko {{PLURAL:$1|vertimą|vertimus}}",
+ "translate-translationstash-skip-button-label": "Pabandyti kitą",
+ "tsb-limit-reached-title": "Ačiū už jūsų vertimus",
+ "tsb-limit-reached-body": "Jūs pasiekėte naujų vertėjų vertimų limitą.\nMūsų komanda netrukus patikrins ir atnaujins jūsų paskyra.\nTada galėsite versti be limitų.",
+ "tsb-no-requests-from-new-users": "Nėra prašymų iš naujų vartotojų",
+ "tsb-create-user-page": "Sukurti pagrindinį vartotojo puslapį",
+ "log-name-translatorsandbox": "Vertimo smėlio dėžės žurnalas"
+}
diff --git a/Translate/i18n/sandbox/lv.json b/Translate/i18n/sandbox/lv.json
new file mode 100644
index 00000000..4b533052
--- /dev/null
+++ b/Translate/i18n/sandbox/lv.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Papuass"
+ ]
+ },
+ "tsb-all-languages-button-label": "Visas valodas",
+ "tsb-search-requests": "Meklēt pieprasījumus",
+ "tsb-accept-button-label": "Pieņemt",
+ "tsb-reject-button-label": "Noraidīt",
+ "tsb-reminder-link-text": "Sūtīt e-pasta atgādinājumu"
+}
diff --git a/Translate/i18n/sandbox/mk.json b/Translate/i18n/sandbox/mk.json
new file mode 100644
index 00000000..d20b137e
--- /dev/null
+++ b/Translate/i18n/sandbox/mk.json
@@ -0,0 +1,52 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bjankuloski06"
+ ]
+ },
+ "managetranslatorsandbox": "Раководење со преведувачки песочник",
+ "tsb-filter-pending": "Барања во исчекување",
+ "tsb-reminder-title-generic": "Пополнете го вашето претставување за да станете преведувач",
+ "tsb-reminder-content-generic": "Здраво $1,\n\nВи благодариме што се зачленивте на {{SITENAME}}. \n\nАко ги пополните пробните преводи, администраторите набргу ќе ви доделат статус на полн преведувач.\n\nПојдете на $2 и направете уште некои преводи.\n\n$3, \nПерсоналот на {{SITENAME}}",
+ "tsb-reminder-sending": "Го испраќам потсетникот...",
+ "tsb-reminder-sent": "{{PLURAL:$1|Испратен еден потсетник. Време: $2|Испратени $1 потсетници: Последниот: $2}}",
+ "tsb-reminder-sent-new": "Испратен потсетник",
+ "tsb-reminder-failed": "Не успеав да испратам потсетник",
+ "tsb-email-promoted-subject": "Сега сте преведувач на {{SITENAME}}",
+ "tsb-email-promoted-body": "Здраво {{GENDER:$1|$1}},\n\nЧеститки! Го проверив пробниот превод што го направивте на {{SITENAME}} и Ви доделив полни преведувачки права.\n\nПојдете на {{SITENAME}} за да продолжите со преведување сега и секој нареден ден:\n$2\n\nДобре дојдовте и Ви благодариме за учеството!\n\n{{GENDER:$3|$3}},\nЧлен на кадарот на {{SITENAME}}",
+ "tsb-email-rejected-subject": "Вашата пријавница за преведувач на {{SITENAME}} е одбиена",
+ "tsb-email-rejected-body": "Здраво {{GENDER:$1|$1}},\n\nВи благодариме што се пријавивте за преведувач на {{SITENAME}}. За жал, ќе мораме да Ве известиме дека пријавницата Ви е одбиена бидејќи квалитетот на Вашите преводи не одговара на нашите потреби.\n\nДоколку сметате дека сте одбиени по грешка, поднесете друга на {{SITENAME}}. Тоа можете да го направите тука:\n$2\n\n{{GENDER:$3|$3}},\nКадарот на {{SITENAME}}",
+ "tsb-request-count": "{{PLURAL:$1|Едно барање|$1 барања}}",
+ "tsb-all-languages-button-label": "Сите јазици",
+ "tsb-search-requests": "Пребарајте барања во исчекување",
+ "tsb-accept-button-label": "Прифати",
+ "tsb-reject-button-label": "Одбиј",
+ "tsb-selected-count": "{{PLURAL:$1|Избран е еден корисник|Избрани се $1 корисници}}",
+ "tsb-older-requests": "{{PLURAL:$1|Едно постаро барање|$1 постари барања}}",
+ "tsb-accept-all-button-label": "Прифати ги сите",
+ "tsb-reject-all-button-label": "Одбиј ги сите",
+ "tsb-user-posted-a-comment": "Не е преведувач",
+ "tsb-reminder-link-text": "Испрати потсетник по е-пошта",
+ "tsb-didnt-make-any-translations": "Корисников нема направено ниеден превод.",
+ "tsb-translations-source": "Извор",
+ "tsb-translations-user": "{{GENDER:$1|Кориснички}} преводи",
+ "tsb-translations-current": "Постоечки преводи",
+ "tsb-delete-userpage-summary": "Бришење на корисничка страница на песочнички корисник",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Корисникот е одбиен|Корисниците се одбиени}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Корисникот е прифатен|Корисниците се прифатени}}",
+ "translationstash": "Добре дојдовте",
+ "translate-translationstash-welcome": "Добре дојдовте {{GENDER:$1|$1}}, вие сте нов преведувач",
+ "translate-translationstash-welcome-note": "Запознајте се со преводните алатки. Преведете некои пораки и стекнете полни преведувачки права за да учествувате во вашите омилени проекти.",
+ "translate-translationstash-initialtranslation": "Вашиот првичен превод",
+ "translate-translationstash-translations": "$1 {{PLURAL:$1|завршен превод|завршени преводи}}",
+ "translate-translationstash-skip-button-label": "Дај друга",
+ "tsb-limit-reached-title": "Ви благодариме за преводите",
+ "tsb-limit-reached-body": "Ја достигнавте границата на преводи од нови преведувачи.\nНаскоро нашата екипа ќе ви ја провери и надгради сметката.\nПотоа ќе можете да преведувате неограничено.",
+ "tsb-no-requests-from-new-users": "Нема барања од нови корисници",
+ "tsb-create-user-page": "Создадена основна корисничка страница",
+ "log-name-translatorsandbox": "Дневник на Преводниот песочник",
+ "log-description-translatorsandbox": "Дневник на дејства со корисници на преводниот песочник",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$4|го|ја}} {{GENDER:$2|унапреди}} $3 во {{GENDER:$4|преведувач}}",
+ "logentry-translatorsandbox-rejected": "$1 го {{GENDER:$2|одби}} барањето од „$3“ за да стане преведувач",
+ "logentry-newusers-tsbpromoted": "Корисничката сметка $3 е {{GENDER:$2|создадена}} со унапредување од песочник"
+}
diff --git a/Translate/i18n/sandbox/mnw.json b/Translate/i18n/sandbox/mnw.json
new file mode 100644
index 00000000..f45bed1e
--- /dev/null
+++ b/Translate/i18n/sandbox/mnw.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "咽頭べさ"
+ ]
+ },
+ "tsb-translations-user": "{{GENDER:$1|ညးသုင်စောဲ}} ကၠာဲဘာသာဂမၠိုင်"
+}
diff --git a/Translate/i18n/sandbox/mr.json b/Translate/i18n/sandbox/mr.json
new file mode 100644
index 00000000..15a595e4
--- /dev/null
+++ b/Translate/i18n/sandbox/mr.json
@@ -0,0 +1,53 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sureshkhole",
+ "V.narsikar"
+ ]
+ },
+ "managetranslatorsandbox": "भाषांतरासाठीची धुळपाटी संचालित करा",
+ "tsb-filter-pending": "पडून राहिलेल्या विनंत्या",
+ "tsb-reminder-title-generic": "भाषांतरकार बनण्यासाठी तुमची पुर्ण ओळख द्या",
+ "tsb-reminder-content-generic": "नमस्कार $1,\n\nया संकेतस्थळावर नोंदणी केल्याबद्दल धन्यवाद {{SITENAME}}.\nजर तुम्ही भाषांतराची चाचणी उत्तीर्ण झालात तर प्रचालक लागलीच तुम्हांला भाषांतरासाठीचे संपुर्ण अधिकार बहाल करतील.\n\nया ठिकाणी येऊन काही भाषांतरे पुर्ण करा :\n$2\n\n$3,\n{{SITENAME}} सदस्य",
+ "tsb-reminder-sending": "आठवण करुन देत आहे...",
+ "tsb-reminder-sent": "{{PLURAL:$1| $1 आठवण करुन देणारा संदेश पाठवला . वेळ: $2.|$1 आठवण करुन देणारे संदेश पाठवले. शेवटच्या संदेशाची वेळ: $2.}}",
+ "tsb-reminder-sent-new": "आठवण करुन देणारा संदेश पाठवला",
+ "tsb-reminder-failed": "आठवण करुन देणारा संदेश पाठवणे शक्य नाही.",
+ "tsb-email-promoted-subject": "तुम्ही आता {{SITENAME}} येथे भाषांतरकार आहात",
+ "tsb-email-promoted-body": "नमस्कार {{GENDER:$1|$1}},\n\nअभिनंदन! आपण {{SITENAME}} येथे केलेली चाचणी भाषांतरे मी तपासलीत व आपणास भाषांतरकाराचे पूर्ण अधिकार दिलेत.\nभाषांतर पुढे सुरु ठेवण्यास, {{SITENAME}} या संकेतस्थळावर या व दररोज या: $2\nस्वागत, आणि आपल्या योगदानाबद्दल आपणास धन्यवाद!\n\n{{GENDER:$3|$3}},\n{{SITENAME}} कर्मचारी",
+ "tsb-email-rejected-subject": "{{SITENAME}} वरील भाषांतरकार होण्यासाठीचा तुमचा अर्ज नाकारण्यात आला आहे.",
+ "tsb-email-rejected-body": "नमस्कार {{GENDER:$1|$1}},\n\n{{SITENAME}} या संकेतस्थळावर आपण भाषांतरकार होण्यासाठी अर्ज दिलात त्याबद्द्ल आपले आभार. परंतू आपल्याला हे कळवण्यास आम्हांला दु:ख होत आहे की आपल्या भाषांतराचा दर्जा कमी असल्यामुळे आमच्या अपेक्षांची पुर्तता आपल्या भाषांतराने होत नसल्याचे लक्षात आल्याने. आपला हा अर्ज नाकारण्यात आलेला आहे. \n\nजर तुम्हांला असे वाटत आहे की आपला अर्ज नजरचुकीमुळे नाकारला गेला आहे, तर आपण {{SITENAME}} ह्या ठिकाणी परत एकदा अर्ज करु शकता. येथे परत सनोंद-प्रवेश करा:\n$2\n\n{{GENDER:$3|$3}},\n{{SITENAME}} कर्मचारी",
+ "tsb-request-count": "$1 {{PLURAL:$1|विनंती|विनंत्या}}",
+ "tsb-all-languages-button-label": "सर्व भाषा",
+ "tsb-search-requests": "शोध निकाल",
+ "tsb-accept-button-label": "स्वीकारा",
+ "tsb-reject-button-label": "नामंजूर",
+ "tsb-selected-count": "{{PLURAL:$1|$1 सदस्य निवडला|$1 सदस्य निवडले}}",
+ "tsb-older-requests": "$1 जुन्या{{PLURAL:$1|विनंती|विनंत्या}}",
+ "tsb-accept-all-button-label": "सर्व स्वीकारा",
+ "tsb-reject-all-button-label": "सर्व नाकारा",
+ "tsb-user-posted-a-comment": "भाषांतरकार नाही",
+ "tsb-reminder-link-text": "वि-पत्राने आठवण करणारा संदेश पाठवा.",
+ "tsb-didnt-make-any-translations": "ह्या सदस्याने कोणतीही भाषांतरे केली नाहीत.",
+ "tsb-translations-source": "स्रोत",
+ "tsb-translations-user": "{{GENDER:$1|सदस्य}} भाषांतरे",
+ "tsb-translations-current": "सध्याची भाषांतरे",
+ "tsb-delete-userpage-summary": "धुळपाटी सदस्याचे सदस्यपान काढून टाकीत आहे",
+ "tsb-reject-confirmation": "{{PLURAL:$1|सदस्य|सदस्ये}} नाकारले",
+ "tsb-accept-confirmation": "{{PLURAL:$1|सदस्य|सदस्ये}} स्वीकारले",
+ "translationstash": "सुस्वागतम्‌",
+ "translate-translationstash-welcome": "सुस्वागतम {{GENDER:$1|$1}}, तुम्ही नविन भाषांतरकार आहात",
+ "translate-translationstash-welcome-note": "भाषांतराच्या साधनांची ओळख करुन घ्या. काही संदेशांचे भाषांतर करा, जेणेकरुन तुम्हांला भाषांतराचे संपुर्ण अधिकार मिळतील आणि मग तुम्ही तुमच्या आवडत्या प्रकल्पांमध्ये तुमचे योगदान देऊ शकाल.",
+ "translate-translationstash-initialtranslation": "तुमची सुरुवातीची भाषांतरे",
+ "translate-translationstash-translations": "$1 पुर्ण झाले {{PLURAL:$1|भाषांतर|भाषांतरे}}",
+ "translate-translationstash-skip-button-label": "दुसरे चाचपडा",
+ "tsb-limit-reached-title": "तुमच्या भाषांतराबद्दल धन्यवाद",
+ "tsb-limit-reached-body": "तुम्ही नविन भाषांतरांच्या चाचणी मर्यादेपर्यंत पोहोचला आहात.\nआमच्या तपासणी गटाकडून आपली भाषांतरे लवकरच तपासली जातील.\nआणि तुम्ही अमर्यादित भाषांतरे करु शकाल.",
+ "tsb-no-requests-from-new-users": "नविन सदस्यांपासून कोणत्याही विनंत्या नाहीत",
+ "tsb-create-user-page": "आपले सदस्यपान तयार करा",
+ "log-name-translatorsandbox": "भाषांतर धुळपाटी नोंदी",
+ "log-description-translatorsandbox": "भाषांतर धुळपाटी सदस्यांच्या क्रियांच्या नोंदी",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|पदोन्नती}} $3 to {{GENDER:$4|भाषांतरकार}}",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|नाकारले}} भाषांतरकार बनण्यासाठीचा $3 यांचा अर्ज.",
+ "logentry-newusers-tsbpromoted": "धुळपाटीवरुन पदोन्नती होऊन $3 {{GENDER:$2|created}} यांचे सदस्यखाते बनवण्यात आले."
+}
diff --git a/Translate/i18n/sandbox/ms.json b/Translate/i18n/sandbox/ms.json
new file mode 100644
index 00000000..f045cdfa
--- /dev/null
+++ b/Translate/i18n/sandbox/ms.json
@@ -0,0 +1,51 @@
+{
+ "@metadata": {
+ "authors": [
+ "Anakmalaysia",
+ "Jeluang Terluang"
+ ]
+ },
+ "managetranslatorsandbox": "Uruskan kotak pasir penterjemah",
+ "tsb-filter-pending": "Permohonan yang menunggu",
+ "tsb-reminder-title-generic": "Lengkapkan pengenalan anda untuk menjadi seorang penterjemah",
+ "tsb-reminder-content-generic": "$1,\n\nTerima kasih kerana mendaftar untuk {{SITENAME}}.\n\nSekiranya anda melengkapkan ujian penterjemahan ini, anda akan menerima akses penterjemah sepenuhnya dari pihak penyelia.\n\nSila ke $2 untuk membuat lebih banyak kerja terjemahan.\n\n$3,\nKakitangan {{SITENAME}}",
+ "tsb-reminder-sending": "Peringatan sedang dihantar...",
+ "tsb-reminder-sent": "{{PLURAL:$1|Telah menghantar $1 peringatan pada $2|Telah menghantar $1 peringatan, yang terbaru pada $2}}",
+ "tsb-reminder-sent-new": "Peringatan dihantar",
+ "tsb-reminder-failed": "Peringatan gagal dihantar",
+ "tsb-email-promoted-subject": "Anda kini seorang penterjemah di {{SITENAME}}",
+ "tsb-email-promoted-body": "{{GENDER:$1|$1}},\n\nTahniah! Saya telah memeriksa terjemahan ujian yang telah anda lakukan di {{SITENAME}}, dan ole itu memberi anda hak penterjemah sepenuhnya.\n\nDatanglah ke {{SITENAME}} untuk terus menterjemah sekarang dan setiap hari:\n$2\n\nSelamat datang dan terima kasih atas sumbangan anda!\n\n{{GENDER:$3|$3}},\nKakitangan {{SITENAME}}",
+ "tsb-email-rejected-subject": "Permohonan anda untuk menjadi penterjemah di {{SITENAME}} telah ditolak",
+ "tsb-email-rejected-body": "{{GENDER:$1|$1}},\n\nTerima kasih kerana memohon untuk menjadi penterjemah di {{SITENAME}}. Dengan dukacitanya ingin saya maklumkan bahawa saya telah menolak permohonan anda kerana mutu penterjemahan anda tidak memenuhi syarat.\n\nJika anda berpendapat bahawa penolakan permohonan anda ialah kesilapan, sila cuba untuk memohon semula sebagai penterjemah di {{SITENAME}}. Anda boleh mendaftar di sini:\n$2\n\n{{GENDER:$3|$3}},\nKakitangan {{SITENAME}}",
+ "tsb-request-count": "$1 {{PLURAL:$1|permintaan}}",
+ "tsb-all-languages-button-label": "Semua bahasa",
+ "tsb-search-requests": "Permohonan carian",
+ "tsb-accept-button-label": "Terima",
+ "tsb-reject-button-label": "Tolak",
+ "tsb-selected-count": "$1 pengguna dipilih",
+ "tsb-older-requests": "$1 permintaan lama",
+ "tsb-accept-all-button-label": "Terima semua",
+ "tsb-reject-all-button-label": "Tolak semua",
+ "tsb-user-posted-a-comment": "Bukan penterjemah",
+ "tsb-reminder-link-text": "Kirim e-mel peringatan",
+ "tsb-didnt-make-any-translations": "Pengguna ini tidak pernah melakukan sebarang penterjemahan.",
+ "tsb-translations-source": "Sumber",
+ "tsb-translations-user": "Terjemahan pengguna",
+ "tsb-translations-current": "Terjemahan sedia ada",
+ "tsb-delete-userpage-summary": "Menghapuskan halaman pengguna pengguna kotak pasir",
+ "translationstash": "Selamat datang",
+ "translate-translationstash-welcome": "Selamat datang, {{GENDER:$1|$1}}. Anda seorang penterjemah baru",
+ "translate-translationstash-welcome-note": "Biasakan diri dengan peralatan penterjemahan. Terjemahkan beberapa mesej dan dapatkan hak penterjemahan sepenuhnya untuk menyertai projek-projek kegemaran anda.",
+ "translate-translationstash-initialtranslation": "Terjemahan awal anda",
+ "translate-translationstash-translations": "$1 telah melengkapkan terjemahan",
+ "translate-translationstash-skip-button-label": "Cuba satu lagi",
+ "tsb-limit-reached-title": "Terima kasih kerana menterjemah",
+ "tsb-limit-reached-body": "Anda telah mencapai had penterjemahan untuk penterjemah baru. Pasukan kami akan menentusahkan dan menaik taraf akaun anda tidak lama lagi. Selepas itu, anda akan dapat menterjemah tanpa had.",
+ "tsb-no-requests-from-new-users": "Tiada permohonan dari pengguna baru",
+ "tsb-create-user-page": "Wujudkan halaman pengguna asas",
+ "log-name-translatorsandbox": "Kotak pasir terjemahan",
+ "log-description-translatorsandbox": "Log tindakan tentang pengguna kotak pasir penterjemahan",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|menaikkan pangkat}} $3 kepada {{GENDER:$4|penterjemah}}",
+ "logentry-translatorsandbox-rejected": "$1 telah {{GENDER:$2|menolak}} permohonan \"$3\" untuk menjadi penterjemah",
+ "logentry-newusers-tsbpromoted": "Akaun pengguna $3 telah {{GENDER:$2|dibuka}} menerusi kenaikan pangkat dari kotak pasir"
+}
diff --git a/Translate/i18n/sandbox/mt.json b/Translate/i18n/sandbox/mt.json
new file mode 100644
index 00000000..1ea336a7
--- /dev/null
+++ b/Translate/i18n/sandbox/mt.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chrisportelli",
+ "ToniSant"
+ ]
+ },
+ "tsb-all-languages-button-label": "Il-lingwi kollha",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|irrifjuta}} r-rikjesta ta' \"$3\" li jsir/ssir traduttur/traduttriċi"
+}
diff --git a/Translate/i18n/sandbox/my.json b/Translate/i18n/sandbox/my.json
new file mode 100644
index 00000000..c26a3c71
--- /dev/null
+++ b/Translate/i18n/sandbox/my.json
@@ -0,0 +1,47 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dr Lotus Black",
+ "Ninjastrikers"
+ ]
+ },
+ "managetranslatorsandbox": "ဘာသာပြန်သူ သဲပုံးကို စီမံရန်",
+ "tsb-filter-pending": "ဆိုင်းငံ့ထားသော တောင်းဆိုချက်များ",
+ "tsb-reminder-title-generic": "ဘာသာပြန်သူတစ်ဦးဖြစ်ရန် သင်၏ မိတ်ဆက်ကို ပြီးဆုံအောင်ဆောင်ရွက်ပါ",
+ "tsb-reminder-content-generic": "မင်္ဂလာပါ $1၊\n\n{{SITENAME}} တွင် မှတ်ပုံတင်သည့်အတွက် ကျေးဇူးတင်ပါသည်။\n\nသင်၏ အစမ်းဘာသာပြန်များကို ပြီးမြောက်ပါက အက်ဒမင်များသည် မကြာခင် ဘာသာပြန်အခွင့်အရေး အပြည့်အဝအပ်နှင်းပေးပါလိမ့်မည်။\n\nဤနေရာတွင် လာရောက်၍ ဘာသာပြန်ဆိုခြင်းများကို ဆောင်ရွက်ပေးပါ: \n$2\n\n$3၊\n{{SITENAME}} ဝန်ထမ်း",
+ "tsb-email-promoted-subject": "သင်သည် ယခု {{SITENAME}} တွင် ဘာသာပြန်သူတစ်ဦး ဖြစ်ပါပြီ",
+ "tsb-email-promoted-body": "မင်္ဂလာပါ {{GENDER:$1|$1}}၊\n\nဂုဏ်ယူပါသည်။ {{SITENAME}} တွင် သင် လုပ်ဆောင်ခဲ့သည့် ဘာသာပြန်အစမ်းများကို ကျွန်ုပ် စစ်ဆေးခဲ့ပြီး သင်အား ဘာသာပြန်အခွင့်အရေး အပြည့်အဝ ပေးအပ်လိုက်ပါသည်။\n\nနေ့စဉ် ဆက်လက် ဘာသာပြန်ဆိုရန် {{SITENAME}} တွင်လာရောက်ပေးပါ:\n$2\n\nကြိုဆိုပါသည်၊ သင်၏ပံ့ပိုးမှုများအတွက် ကျေးဇူးတင်ပါသည်။\n\n{{GENDER:$3|$3}}၊\n{{SITENAME}} ဝန်ထမ်း",
+ "tsb-email-rejected-subject": "{{SITENAME}} ရှိ ဘာသာပြန်သူတစ်ဦးဖြစ်ရန် သင်၏လျှောက်လွှာကို ငြင်းပယ်လိုက်သည်",
+ "tsb-email-rejected-body": "မင်္ဂလပါ {{GENDER:$1|$1}}၊\n\n{{SITENAME}} တွင် ဘာသာပြန်တစ်ဦးအဖြစ် လျှောက်လွှာတင်သည့်အတွက် ကျေးဇူးတင်ပါသည်။ သင်၏လျှောက်လွှာကို ငြင်းပယ်လိုက်သည်ဟု အသိပေးရမှာ ကျွန်ုပ် နောင်တရမိပါသည်၊ အကြောင်းမှာ သင်၏ ဘာသာပြန်အရည်အသွေးများမှာ လိုအပ်ချက်များနှင့် မကိုက်ညီသောကြောင့်ဖြစ်ပါသည်။\n\nသင်၏လျှောက်လွှာ ငြင်းပယ်ခံရသည်မှာ အမှားဟုထင်မိပါက ကျေးဇူးပြု၍ {{SITENAME}} တွင် ဘာသာပြန်တစ်ဦးအဖြစ် ထပ်မံလျှောက်လွှာတင်ပေးပါ။ ဤနေရာတွင် သင် မှတ်ပုံတင်နိုင်ပါသည်။:\n$2\n\n{{GENDER:$3|$3}}၊\n{{SITENAME}} ဝန်ထမ်း",
+ "tsb-request-count": "{{PLURAL:$1|တောင်းဆိုမှု|တောင်းဆိုမှုများ}} $1",
+ "tsb-all-languages-button-label": "ဘာသာစကားများ အားလုံး",
+ "tsb-search-requests": "ဆိုင်းငံ့ထားသော တောင်းဆိုချက်များ ရှာဖွေရန်",
+ "tsb-accept-button-label": "လက်ခံသည်",
+ "tsb-reject-button-label": "လက်မခံပါ",
+ "tsb-selected-count": "{{PLURAL:$1|$1 အသုံးပြုသူ ရွေးချယ်ထား|$1 အသုံးပြုသူများ ရွေးချယ်ထား}}",
+ "tsb-older-requests": "ပိုဟောင်းသော {{PLURAL:$1|တောင်းဆိုမှု|တောင်းဆိုမှုများ}} $1",
+ "tsb-accept-all-button-label": "အကုန် လက်ခံသည်",
+ "tsb-reject-all-button-label": "အကုန် လက်မခံပါ",
+ "tsb-user-posted-a-comment": "ဘာသာပြန်သူတစ်ဦး မဟုတ်",
+ "tsb-didnt-make-any-translations": "ဤအသုံးပြုသူသည် မည်သည့်ဘာသာပြန်မှုမျှ မလုပ်ဆောင်ခဲ့ပါ။",
+ "tsb-translations-source": "ရင်းမြစ်",
+ "tsb-translations-user": "{{GENDER:$1|အသုံးပြုသူ}} ဘာသာပြန်များ",
+ "tsb-translations-current": "ရှိနှင့်ပြီးသား ဘာသာပြန်များ",
+ "tsb-reject-confirmation": "{{PLURAL:$1|အသုံးပြုသူ|အသုံးပြုသူများ}}ကို ငြင်းပယ်လိုက်သည်",
+ "tsb-accept-confirmation": "{{PLURAL:$1|အသုံးပြုသူ|အသုံးပြုသူများ}}ကို လက်ခံလိုက်သည်",
+ "translationstash": "ကြိုဆိုပါသည်",
+ "translate-translationstash-welcome": "ကြိုဆိုပါသည် {{GENDER:$1|$1}}၊ သင်သည် လူသစ် ဘာသာပြန်သူတစ်ဦးဖြစ်သည်",
+ "translate-translationstash-welcome-note": "ဘာသာပြန် ကိရိယာများနှင့် ရင်းနှီးအောင် လုပ်ဆောင်ပါ။ မက်ဆေ့အချို့ကို ဘာသာပြန်ပြီး သင် နှစ်သက်သော ပရောဂျက်များတွင် ပါဝင်ရန် ဘာသာပြန်အခွင့်အရေး အပြည့်အဝ ရယူလိုက်ပါ။",
+ "translate-translationstash-initialtranslation": "သင်၏ ကနဦး ဘာသာပြန်ဆိုမှု",
+ "translate-translationstash-translations": "{{PLURAL:$1|ဘာသာပြန်|ဘာသာပြန်များ}} $1 ခုပြီးမြောက်သည်",
+ "translate-translationstash-skip-button-label": "နောက်တစ်ခု စမ်းကြည့်ပါ",
+ "tsb-limit-reached-title": "သင်၏ဘာသာပြန်ဆိုမှုများအတွက် ကျေးဇူးတင်ပါသည်",
+ "tsb-limit-reached-body": "လူသစ် ဘာသာပြန်သူများအတွက် ကန့်သတ်ချက်ကို သင် ရောက်ရှိသွားပါပြီ။ ကျွန်ုပ်တို့အဖွဲ့က မကြာခင် သင်၏အကောင့်ကို အတည်ပြုစစ်ဆေးပြီး အဆင့်မြှင့်တင်ပါလိမ့်မည်။ သင်သည် ကန့်သတ်ချက်မရှိဘဲ ဘာသာပြန်နိုင်တော့မည်ဖြစ်ပါသည်။",
+ "tsb-no-requests-from-new-users": "အသုံးပြုသူအသစ်များမှ တောင်းဆိုချက်များ မရှိပါ",
+ "tsb-create-user-page": "အခြေခံ အသုံးပြုသူစာမျက်နှာ ဖန်တီးရန်",
+ "log-name-translatorsandbox": "ဘာသာပြန်မှုသဲပုံး မှတ်တမ်း",
+ "log-description-translatorsandbox": "ဘာသာပြန်သဲပုံး အသုံးပြုသူများရှိ လုပ်ဆောင်ချက်များ မှတ်တမ်း",
+ "logentry-translatorsandbox-promoted": "$1 က $3 ကို {{GENDER:$4|ဘာသာပြန်သူ}}အဖြစ် {{GENDER:$2|ရာထူးတိုးပေးခဲ့သည်}}",
+ "logentry-translatorsandbox-rejected": "$1 က \"$3\" ၏ ဘာသာပြန်သူတစ်ဦးဖြစ်ရန် တောင်းဆိုမှုကို {{GENDER:$2|ငြင်းပယ်လိုက်သည်}}",
+ "logentry-newusers-tsbpromoted": "အသုံးပြုသူအကောင့် $3 သည် သဲပုံးမှရာထူးတိုးကာ {{GENDER:$2|ဖန်တီးခဲ့သည်}}"
+}
diff --git a/Translate/i18n/sandbox/nb.json b/Translate/i18n/sandbox/nb.json
new file mode 100644
index 00000000..7b63124c
--- /dev/null
+++ b/Translate/i18n/sandbox/nb.json
@@ -0,0 +1,53 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jon Harald Søby",
+ "Matěj Suchánek"
+ ]
+ },
+ "managetranslatorsandbox": "Behandle oversettelsessandkasse",
+ "tsb-filter-pending": "Ventende forespørsler",
+ "tsb-reminder-title-generic": "Fullfør introduksjonen din for å bli en oversetter",
+ "tsb-reminder-content-generic": "Hei, $1\n\nTakk for at du registrerte deg på {{SITENAME}}.\n\nOm du fullfører testoversettelsene dine vil administratorene gi deg full oversettelsestilgang snart.\n\nKom gjerne tilbake og oversett mer her:\n$2\n\n$3,\n{{GRAMMAR:genitive|{{SITENAME}}}} personale",
+ "tsb-reminder-sending": "Sender påminnelsen ...",
+ "tsb-reminder-sent": "{{PLURAL:$1|Sendte $1 påminnelse. Tid: $2|Sendte $1 påminnelser. Tiden for den siste: $2.}}",
+ "tsb-reminder-sent-new": "Sendte en påminnelse",
+ "tsb-reminder-failed": "Sending av påminnelsen mislyktes",
+ "tsb-email-promoted-subject": "Du er nå en oversetter på {{SITENAME}}",
+ "tsb-email-promoted-body": "Hei, {{GENDER:$1|$1}}\n\nGratulerer! Jeg sjekket testoversettelsene du gjorde på {{SITENAME}} og ga deg full oversettelsestilgang.\n\nKom til {{SITENAME}} for å fortsette å oversette nå:\n$2\n\nVelkommen, og takk for at du bidrar!\n\n{{GENDER:$3|$3}},\n{{GRAMMAR:genitive|{{SITENAME}}}} personale",
+ "tsb-email-rejected-subject": "Søknaden din om å bli en oversetter på {{SITENAME}} ble avvist",
+ "tsb-email-rejected-body": "Hei {{GENDER:$1|$1}}\n\nTakk for at du søkte om å bli oversetter på {{SITENAME}}. Jeg må dessverre meddele at jeg har avvist søknaden din, fordi kvaliteten på oversettelsene dine ikke oppfylte kravene.\n\nOm du mener at dette er en feil, søk om å bli oversetter på {{SITENAME}} igjen. Du kan melde deg på her:\n$2\n\n{{GENDER:$3|$3}},\n{{GRAMMAR:genitive|{{SITENAME}}}} personale",
+ "tsb-request-count": "$1 {{PLURAL:$1|forespørsel|forespørsler}}",
+ "tsb-all-languages-button-label": "Alle språk",
+ "tsb-search-requests": "Søk i ventende forespørsler",
+ "tsb-accept-button-label": "Godkjenn",
+ "tsb-reject-button-label": "Avslå",
+ "tsb-selected-count": "{{PLURAL:$1|$1 bruker|$1 brukere}} valgt",
+ "tsb-older-requests": "$1 eldre {{PLURAL:$1|forespørsel|forespørsler}}",
+ "tsb-accept-all-button-label": "Godkjenn alle",
+ "tsb-reject-all-button-label": "Avslå alle",
+ "tsb-user-posted-a-comment": "Ikke en oversetter",
+ "tsb-reminder-link-text": "Send påminnelse på epost",
+ "tsb-didnt-make-any-translations": "Brukeren har ikke gjort noen oversettelser.",
+ "tsb-translations-source": "Kilde",
+ "tsb-translations-user": "{{GENDER:$1|Brukeroversettelser}}",
+ "tsb-translations-current": "Eksisterende oversettelser",
+ "tsb-delete-userpage-summary": "Sletter brukersiden til en sandkassebruker",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Avvist bruker|Avviste brukere}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Godtatt bruker|Godtatte brukere}}",
+ "translationstash": "Velkommen",
+ "translate-translationstash-welcome": "Velkommen {{GENDER:$1|$1}}, du er en ny oversetter",
+ "translate-translationstash-welcome-note": "Bli kjent med oversettelsesverktøyene. Oversett noen beskjeder og få full oversettelsestillatelse for å delta i dine favorittprosjekter.",
+ "translate-translationstash-initialtranslation": "Din første oversettelse",
+ "translate-translationstash-translations": "$1 {{PLURAL:$1|fullført oversettelse|fullførte oversettelser}}",
+ "translate-translationstash-skip-button-label": "Prøv en annen",
+ "tsb-limit-reached-title": "Takk for oversettelsene dine",
+ "tsb-limit-reached-body": "Du har nådd grensa for oversettelser av nye oversettere.\nTeamet vårt vil sjekke og oppgradere kontoen din snart.\nDa vil du kunne oversette uten begrensninger.",
+ "tsb-no-requests-from-new-users": "Ingen forespørsler fra nye brukere",
+ "tsb-create-user-page": "Opprettet enkel brukerside",
+ "log-name-translatorsandbox": "Logg for oversettelsessandkasse",
+ "log-description-translatorsandbox": "En logg over handlinger på brukere av oversettelsessandkassa",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|forfremmet}} $3 til {{GENDER:$4|oversetter}}",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|avslo}} forespørselen fra «$3» om å bli oversetter",
+ "logentry-newusers-tsbpromoted": "Brukerkontoen $3 ble {{GENDER:$2|opprettet}} ved forfremmelse fra sandkassa"
+}
diff --git a/Translate/i18n/sandbox/ne.json b/Translate/i18n/sandbox/ne.json
new file mode 100644
index 00000000..fcd3d752
--- /dev/null
+++ b/Translate/i18n/sandbox/ne.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "NehalDaveND",
+ "सरोज कुमार ढकाल",
+ "हिमाल सुबेदी"
+ ]
+ },
+ "tsb-all-languages-button-label": "अरु भाषाहरू",
+ "tsb-older-requests": "$1 पुराना {{PLURAL:$1|अनुरोध|अनुरोधहरू}}",
+ "tsb-didnt-make-any-translations": "यस प्रयोगकर्ताले कुनै अनुवाद गरेको छैन ।",
+ "translationstash": "स्वागतम्",
+ "log-name-translatorsandbox": "अनुवाद प्रयोगस्थल"
+}
diff --git a/Translate/i18n/sandbox/nl.json b/Translate/i18n/sandbox/nl.json
new file mode 100644
index 00000000..0af95438
--- /dev/null
+++ b/Translate/i18n/sandbox/nl.json
@@ -0,0 +1,58 @@
+{
+ "@metadata": {
+ "authors": [
+ "Arent",
+ "Jeroen N",
+ "Mainframe98",
+ "Mar(c)",
+ "SPQRobin",
+ "Siebrand",
+ "Sjoerddebruin"
+ ]
+ },
+ "managetranslatorsandbox": "Vertalersszandbak beheren",
+ "tsb-filter-pending": "Aanvragen in behandeling",
+ "tsb-reminder-title-generic": "Voltooi uw introductie om vertaler te worden",
+ "tsb-reminder-content-generic": "Hallo $1,\n\nBedankt voor het registreren bij {{SITENAME}}.\n\nAls u uw testvertalingen afrondt, kunnen de beheerders u snel volledige vertaaltoegang geven.\n\nMaak alstublieft nog wat meer vertalingen:\n$2\n\n$3,\nMedewerker van {{SITENAME}}",
+ "tsb-reminder-sending": "Herinnering verzenden...",
+ "tsb-reminder-sent": "{{PLURAL:$1|$1 herinnering $2 verzonden. Verzendtijd: $2.|$1 herinneringen verzonden. Verzendtijd van de laatste: $2}}",
+ "tsb-reminder-sent-new": "Herinnering verzonden",
+ "tsb-reminder-failed": "Herinnering verzenden mislukt",
+ "tsb-email-promoted-subject": "U bent nu vertaler bij {{SITENAME}}",
+ "tsb-email-promoted-body": "Hallo {{GENDER:$1|$1}},\n\nGefeliciteerd! Ik heb de testvertalingen gecontroleerd die u op {{SITENAME}} hebt gemaakt en heb u permanente vertaalrechten gegeven.\n\nKom nu (en bij voorkeur iedere dag) naar {{SITENAME}} om door te gaan met vertalen:\n$2\n\nWelkom en dank u wel voor uw bijdragen!\n\n{{GENDER:$3|$3}},\nMedewerker van {{SITENAME}}",
+ "tsb-email-rejected-subject": "Uw aanvraag om vertaler te worden bij {{SITENAME}} is afgewezen",
+ "tsb-email-rejected-body": "Hallo {{GENDER:$1|$1}},\n\nDank u voor de aanmelding als vertaler bij {{SITENAME}}. Ik vind het jammer u moeten melden dat ik de aanmelding heb geweigerd aangezien de kwaliteit van uw vertalingen niet aan de eisen voldoet.\n\nAls u van mening bent dat deze afwijzing onjuist is, dan kunt u zich opnieuw als vertaler aanmelden bij {{SITENAME}}. U kunt zich hieronder inschrijven:\n$2\n\n{{GENDER:$3|$3}}, \n{{SITENAME}} staff",
+ "tsb-request-count": "{{PLURAL:$1|Eén verzoek|$1 verzoeken}}",
+ "tsb-all-languages-button-label": "Alle talen",
+ "tsb-search-requests": "Openstaande verzoeken zoeken",
+ "tsb-accept-button-label": "Accepteren",
+ "tsb-reject-button-label": "Afwijzen",
+ "tsb-selected-count": "{{PLURAL:$1|Eén gebruiker|$1 gebruikers}} geselecteerd",
+ "tsb-older-requests": "$1 {{PLURAL:$1|ouder verzoek|oudere verzoeken}}",
+ "tsb-accept-all-button-label": "Alles accepteren",
+ "tsb-reject-all-button-label": "Alles afwijzen",
+ "tsb-user-posted-a-comment": "Geen vertaler",
+ "tsb-reminder-link-text": "Herinnering per e-mail verzenden",
+ "tsb-didnt-make-any-translations": "Deze gebruiker heeft nog niets vertaald.",
+ "tsb-translations-source": "Bron",
+ "tsb-translations-user": "{{GENDER:$1|Gebruikersvertalingen}}",
+ "tsb-translations-current": "Bestaande vertalingen",
+ "tsb-delete-userpage-summary": "Gebruikerspagina van een zandbakgebruiker verwijderd",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Gebruiker|Gebruikers}} afgewezen",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Gebruiker|Gebruikers}} toegelaten",
+ "translationstash": "Welkomstpagina voor vertalers",
+ "translate-translationstash-welcome": "Welkom {{GENDER:$1|$1}}, u bent nu vertaler",
+ "translate-translationstash-welcome-note": "Raak vertrouwd met de vertaalhulpmiddelen. Vertaal een aantal willekeurig geselecteerde berichten en krijg volledige vertaalrechten voor uw favoriete projecten.",
+ "translate-translationstash-initialtranslation": "Uw vertaling",
+ "translate-translationstash-translations": "$1 voltooide {{PLURAL:$1|vertaling|vertalingen}}",
+ "translate-translationstash-skip-button-label": "Nog één proberen",
+ "tsb-limit-reached-title": "Bedankt voor uw vertalingen",
+ "tsb-limit-reached-body": "U hebt de limiet voor het aantal vertalingen voor nieuwe vertalers bereikt.\nOns team gaat ze snel controleren en promoveert uw account snel, zodat u zonder beperkingen kunt gaan vertalen.",
+ "tsb-no-requests-from-new-users": "Geen verzoeken van nieuwe gebruikers",
+ "tsb-create-user-page": "Eenvoudige gebruikerspagina aangemaakt",
+ "log-name-translatorsandbox": "Vertalingenzandbaklogboek",
+ "log-description-translatorsandbox": "Een logboek van de handelingen van gebruikers in de vertalingenzandbak.",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|heeft}} $3 gepromoveerd tot {{GENDER:$4|vertaler}}",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|heeft}} het verzoek van \"$3\" om vertaler te worden geweigerd",
+ "logentry-newusers-tsbpromoted": "Gebruikers $3 is {{GENDER:$2|aangemaakt}} door promotie vanuit de zandbak"
+}
diff --git a/Translate/i18n/sandbox/oc.json b/Translate/i18n/sandbox/oc.json
new file mode 100644
index 00000000..830a392f
--- /dev/null
+++ b/Translate/i18n/sandbox/oc.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cedric31"
+ ]
+ },
+ "managetranslatorsandbox": "Gerir lo nauc de sabla de traduccion",
+ "tsb-filter-pending": "Requèstas en espèra",
+ "tsb-reminder-title-generic": "Completatz vòstra presentacion per venir un traductor",
+ "tsb-reminder-content-generic": "Bonjorn $1,\n\nMercé de vos èsser inscrit sus {{SITENAME}}.\n\nSe acabatz vòstras traduccions de tèst, los administrators vos poiràn lèu acordar un plen accès a las traduccions.\n\nVenètz sus $2 e fasètz qualques traduccions mai.\n\n$2\n\n$3,\nL’equipa de {{SITENAME}}",
+ "tsb-all-languages-button-label": "Totas las lengas",
+ "tsb-didnt-make-any-translations": "Aqueste utilizaire a pas fait cap de traduccion.",
+ "tsb-translations-user": "Traduccions {{GENDER:$1|de l’utilizaire|de l’utilizaira}}",
+ "tsb-translations-current": "Traduccions existentas",
+ "translate-translationstash-translations": "Avètz acabat $1 {{PLURAL:$1|traduccion|traduccions}}.",
+ "tsb-limit-reached-title": "Mercé per vòstras traduccions"
+}
diff --git a/Translate/i18n/sandbox/pl.json b/Translate/i18n/sandbox/pl.json
new file mode 100644
index 00000000..c0eecd79
--- /dev/null
+++ b/Translate/i18n/sandbox/pl.json
@@ -0,0 +1,46 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chrumps",
+ "CiaPan",
+ "Peter Bowman"
+ ]
+ },
+ "managetranslatorsandbox": "Zarządzanie brudnopisem tłumacza",
+ "tsb-filter-pending": "Oczekujące wnioski",
+ "tsb-reminder-sending": "Wysyłanie przypomnienia...",
+ "tsb-reminder-sent": "{{PLURAL:$1|Wysłane $1 przypomnienie. Czas: $2.|Wysłane $1 przypomnienia. Czas ostatniego: $2|Wysłane $1 przypomnień. Czas ostatniego: $2}}",
+ "tsb-reminder-sent-new": "Wyślij przypomnienie",
+ "tsb-reminder-failed": "Wysłanie przypomnienia nie powiodło się",
+ "tsb-email-promoted-subject": "Teraz jesteś tłumaczem w serwisie {{SITENAME}}",
+ "tsb-email-promoted-body": "Witaj {{GENDER:$1|$1}},\n\nGratulacje! {{GENDER:$3|Sprawdziłem|Sprawdziłam}} Twoje testowe tłumaczenia wykonane w {{SITENAME}} i {{GENDER:$3|przyznałem|przyznałam}} Ci pełne prawa tłumacza.\n\nPrzyjdź do {{SITENAME}}, aby kontynuować tłumaczenie:\n$2\n\nWitamy i dziękujemy za Twój wkład!\n\n{{GENDER:$3|$3}},\nZespół {{SITENAME}}",
+ "tsb-email-rejected-subject": "Twój wniosek o uzyskanie uprawnień tłumacza witryny {{SITENAME}} został odrzucony",
+ "tsb-email-rejected-body": "Witaj {{GENDER:$1|$1}},\n\nDziękujemy za zgłoszenie się jako tłumacz w {{SITENAME}}. Z przykrością informuję, że {{GENDER:$3|odrzuciłem|odrzuciłam}} Twój wniosek, ponieważ jakość twoich tłumaczeń nie spełniała wymagań.\n\nJeśli uważasz, że Twoje zgłoszenie zostało odrzucone przez pomyłkę, spróbuj ponownie złożyć wniosek jako tłumacz w {{SITENAME}}. Możesz zarejestrować się tutaj:\n$2\n\n{{GENDER:$3|$3}},\nZespół {{SITENAME}}",
+ "tsb-request-count": "$1 {{PLURAL:$1|wniosek|wnioski|wniosków}}",
+ "tsb-all-languages-button-label": "Wszystkie języki",
+ "tsb-accept-button-label": "Akceptuj",
+ "tsb-reject-button-label": "Odrzuć",
+ "tsb-selected-count": "{{PLURAL:$1|$1 wybrany użytkownik|$1 wybranych użytkowników}}",
+ "tsb-older-requests": "$1 {{PLURAL:$1|starszy wniosek|starsze wnioski|starszych wniosków}}",
+ "tsb-accept-all-button-label": "Akceptuje wszystkie",
+ "tsb-reject-all-button-label": "Odrzuć wszystkie",
+ "tsb-didnt-make-any-translations": "Ten użytkownik nie wykonał żadnego tłumaczenia.",
+ "tsb-translations-source": "Źródło",
+ "tsb-translations-user": "Tłumaczenia {{GENDER:$1|użytkownika|użytkowniczki}}",
+ "tsb-translations-current": "Istniejące tłumaczenia",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Użytkownik odrzucony|Użytkownicy odrzuceni}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Użytkownik zaakceptowany|Użytkownicy zaakceptowani}}",
+ "translationstash": "Powitanie",
+ "translate-translationstash-welcome": "Witaj $1, jesteś {{GENDER:$1|nowym tłumaczem|nową tłumaczką}}",
+ "translate-translationstash-welcome-note": "Zapoznaj się z narzędziami tłumacza. Przetłumacz część komunikatów i zostań pełnoprawnym tłumaczem, aby uczestniczyć w wybranych projektach.",
+ "translate-translationstash-initialtranslation": "Twoje pierwotne tłumaczenie",
+ "translate-translationstash-translations": "$1 {{PLURAL:$1|ukończone tłumaczenie|ukończone tłumaczenia|ukończonych tłumaczeń}}",
+ "translate-translationstash-skip-button-label": "Spróbuj innego",
+ "tsb-limit-reached-title": "Dziękuję za Twoje tłumaczenia",
+ "tsb-no-requests-from-new-users": "Brak wniosków od nowych użytkowników",
+ "tsb-create-user-page": "Utworzono prostą stronę użytkownika",
+ "log-name-translatorsandbox": "Rejestr brudnopisu tłumaczeń",
+ "log-description-translatorsandbox": "To jest rejestr działań użytkowników brudnopisu tłumaczeń",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|awansował|awansowała}} $3 na {{GENDER:$4|tłumacza|tłumaczkę}}",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|odrzucił|odrzuciła}} wniosek „$3”, aby przyznać uprawnienia tłumacza"
+}
diff --git a/Translate/i18n/sandbox/pnb.json b/Translate/i18n/sandbox/pnb.json
new file mode 100644
index 00000000..6f845db1
--- /dev/null
+++ b/Translate/i18n/sandbox/pnb.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Abbas dhothar"
+ ]
+ },
+ "tsb-all-languages-button-label": "ساریاں بولیاں"
+}
diff --git a/Translate/i18n/sandbox/ps.json b/Translate/i18n/sandbox/ps.json
new file mode 100644
index 00000000..d2611d1e
--- /dev/null
+++ b/Translate/i18n/sandbox/ps.json
@@ -0,0 +1,34 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ahmed-Najib-Biabani-Ibrahimkhel"
+ ]
+ },
+ "managetranslatorsandbox": "ژباړن شگبکس مهارول",
+ "tsb-reminder-sent-new": "يوه يادگيرنه ولېږله",
+ "tsb-reminder-failed": "د يادگيرنې لېږنه نابرياله شوه",
+ "tsb-email-promoted-subject": "اوس تاسې په {{SITENAME}} کې يو ژباړن ياست",
+ "tsb-request-count": "$1 {{PLURAL:$1|غوښتنه|غوښتنې}}",
+ "tsb-all-languages-button-label": "ټولې ژبې",
+ "tsb-search-requests": "د پلټنې غوښتنې",
+ "tsb-accept-button-label": "منل",
+ "tsb-reject-button-label": "ردول",
+ "tsb-selected-count": "{{PLURAL:$1|$1 کارن ټاکل شوی|$1 کارنان ټاکل شوي}}",
+ "tsb-older-requests": "$1 {{PLURAL:$1|زړه غوښتنه|زړې غوښتنې}}",
+ "tsb-accept-all-button-label": "ټول منل",
+ "tsb-reject-all-button-label": "ټول ردول",
+ "tsb-user-posted-a-comment": "يو ژباړن نه دی",
+ "tsb-reminder-link-text": "د يادولو برېښليک ورلېږل",
+ "tsb-didnt-make-any-translations": "دغه کارن کومې ژباړې نه دي ترسره کړي.",
+ "tsb-translations-source": "سرچينه",
+ "tsb-translations-user": "{{GENDER:$1|کارن}} ژباړې",
+ "tsb-translations-current": "شته ژباړې",
+ "translationstash": "ښه راغلئ",
+ "translate-translationstash-welcome": "ښه راغلئ {{GENDER:$1|$1}}، تاسې يو نوی ژباړن ياست",
+ "translate-translationstash-initialtranslation": "ستاسې لومړنۍ ژباړه",
+ "translate-translationstash-translations": "$1 {{PLURAL:$1|ژباړه بشپړه شوې|ژباړې بشپړې شوي}}",
+ "translate-translationstash-skip-button-label": "بل آزمويل",
+ "tsb-limit-reached-title": "له ژباړو څخه مو مننه",
+ "tsb-create-user-page": "يو بنسټيز کارن مخ جوړول",
+ "log-name-translatorsandbox": "د ژباړې شگبکس يادښت"
+}
diff --git a/Translate/i18n/sandbox/pt-br.json b/Translate/i18n/sandbox/pt-br.json
new file mode 100644
index 00000000..b98dceb3
--- /dev/null
+++ b/Translate/i18n/sandbox/pt-br.json
@@ -0,0 +1,55 @@
+{
+ "@metadata": {
+ "authors": [
+ "Eduardo Addad de Oliveira",
+ "Eduardoaddad",
+ "Fabsouza1",
+ "Felipe L. Ewald"
+ ]
+ },
+ "managetranslatorsandbox": "Gerenciar tradutor da página de testes",
+ "tsb-filter-pending": "Solicitações pendentes",
+ "tsb-reminder-title-generic": "Complete a sua apresentação para tornar-se um tradutor",
+ "tsb-reminder-content-generic": "Oi $1,\n\nObrigado por se registrar com {{SITENAME}}.\n\nSe você completar as suas traduções de teste, os administradores irão conceder acesso de tradução completo logo depois.\n\nPor favor, faça mais traduções aqui:\n$2\n\n$3,\n equipe {{SITENAME}}",
+ "tsb-reminder-sending": "Enviando o lembrete ...",
+ "tsb-reminder-sent": "{{PLURAL:$1|Enviado $1 lembrete. Tempo: $2.|Enviados $1 lembretes. Hora do último: $2.}}",
+ "tsb-reminder-sent-new": "Enviar um lembrete",
+ "tsb-reminder-failed": "O envio do lembrete falhou",
+ "tsb-email-promoted-subject": "Você agora é tradutor em {{SITENAME}}",
+ "tsb-email-promoted-body": "Oi {{GENDER:$1|$1}},\n\nParabéns! Verifiquei as traduções de teste que você fez em {{SITENAME}} e dei-lhe direitos de tradutor completo.\n\nVá para {{SITENAME}} para continuar a traduzir agora e todos os dias:\n$2\nNBem-vindo e obrigado por suas contribuições!\n\n{{GENDER:$3|$3}},\n equipe {{SITENAME}}",
+ "tsb-email-rejected-subject": "Sua candidatura para ser um tradutor em {{SITENAME}} foi rejeitada",
+ "tsb-email-rejected-body": "Oi {{GENDER:$1|$1}},\n\nObrigado por se candidatar como tradutor em {{SITENAME}}. Lamento informar-lhe que eu rejeitei o seu pedido, porque a qualidade das suas traduções não cumpriu os requisitos.\n\nSe você acha que o seu pedido foi rejeitado por engano, tente se candidatar novamente como tradutor em {{SITENAME}}. Você pode se inscrever aqui: \n$2\n\n{{GENDER:$3|$3}},\nequipe {{SITENAME}}",
+ "tsb-request-count": "$1 {{PLURAL:$1|pedido|pedidos}}",
+ "tsb-all-languages-button-label": "Todos os idiomas",
+ "tsb-search-requests": "Pesquisar solicitações pendentes",
+ "tsb-accept-button-label": "Aceitar",
+ "tsb-reject-button-label": "Rejeitar",
+ "tsb-selected-count": "{{PLURAL:$1|$1 usuário selecionado|$1 usuários selecionados}}",
+ "tsb-older-requests": "$1 {{PLURAL:$1|pedido mais antigo|pedidos mais antigos}}",
+ "tsb-accept-all-button-label": "Aceitar todos",
+ "tsb-reject-all-button-label": "Rejeitar todas",
+ "tsb-user-posted-a-comment": "Não é um tradutor",
+ "tsb-reminder-link-text": "Enviar lembrete de e-mail",
+ "tsb-didnt-make-any-translations": "Este usuário não fez nenhuma tradução.",
+ "tsb-translations-source": "Fonte",
+ "tsb-translations-user": "{{GENDER:$1|Traduções do usuário|Traduções da usuária}}",
+ "tsb-translations-current": "Traduções existentes",
+ "tsb-delete-userpage-summary": "Excluindo a página de usuário de um usuário da página de testes",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Usuário rejeitado|Usuários rejeitados}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Usuário aceito|Usuários aceitos}}",
+ "translationstash": "Bem-vindo(a)",
+ "translate-translationstash-welcome": "Bem-vindo {{GENDER:$1|$1}}, você é um novo tradutor",
+ "translate-translationstash-welcome-note": "Familiarize-se com as ferramentas de tradução. Traduza algumas mensagens e obtenha direitos de tradutor completos para participar dos seus projetos favoritos.",
+ "translate-translationstash-initialtranslation": "Sua tradução inicial",
+ "translate-translationstash-translations": "$1 completou {{PLURAL:$1|a tradução|as traduções}}",
+ "translate-translationstash-skip-button-label": "Tentar outro",
+ "tsb-limit-reached-title": "Obrigado pelas suas traduções",
+ "tsb-limit-reached-body": "Você alcançou o limite de tradução para novos tradutores.\nO nosso time verificará e atualizará sua conta em breve.\nEntão você poderá traduzir sem limites.",
+ "tsb-no-requests-from-new-users": "Nenhuma solicitação de novos usuários",
+ "tsb-create-user-page": "Página de usuário básica criada",
+ "log-name-translatorsandbox": "Registro da página de testes de tradução",
+ "log-description-translatorsandbox": "Um registro de ações dos usuários de página de testes de tradução",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|promoveu}} $3 para {{GENDER:$4|tradutor|tradutora}}",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|rejeitou}} o pedido de \"$3\" para se tornar um tradutor",
+ "logentry-newusers-tsbpromoted": "A conta de usuário $3 foi {{GENDER:$2|criada}} por promoção da página de testes"
+}
diff --git a/Translate/i18n/sandbox/pt.json b/Translate/i18n/sandbox/pt.json
new file mode 100644
index 00000000..9d7ce712
--- /dev/null
+++ b/Translate/i18n/sandbox/pt.json
@@ -0,0 +1,56 @@
+{
+ "@metadata": {
+ "authors": [
+ "Felipe L. Ewald",
+ "Fúlvio",
+ "Hamilton Abreu",
+ "Mansil alfalb",
+ "Vitorvicentevalente"
+ ]
+ },
+ "managetranslatorsandbox": "Administrar a área de teste de tradutores",
+ "tsb-filter-pending": "Pedidos pendentes",
+ "tsb-reminder-title-generic": "Conclua a introdução para se tornar tradutor",
+ "tsb-reminder-content-generic": "Olá $1,\n\nObrigado por se registar na wiki {{SITENAME}}.\n\nSe concluir as traduções de teste, pouco depois os administradores concedem-lhe todos os privilégios de tradução.\n\nVenha à wiki e faça algumas traduções aqui:\n$2\n\n$3,\nA equipa da wiki {{SITENAME}}",
+ "tsb-reminder-sending": "A enviar a lembrança...",
+ "tsb-reminder-sent": "{{PLURAL:$1|Enviou $1 lembrança. Hora: $2.|Enviou $1 lembranças. Hora da última: $2.}}",
+ "tsb-reminder-sent-new": "Enviou uma lembrança",
+ "tsb-reminder-failed": "O envio da lembrança falhou",
+ "tsb-email-promoted-subject": "É agora tradutor na wiki {{SITENAME}}",
+ "tsb-email-promoted-body": "Olá {{GENDER:$1|$1}},\n\nParabéns! Revi as traduções de teste que fez na wiki {{SITENAME}} e concedi-lhe todos os privilégios de tradução.\n\nVenha hoje e todos os dias à wiki {{SITENAME}} para continuar a traduzir:\n$2\n\nBem-vindo(a) e obrigado pelas suas contribuições!\n\n{{GENDER:$3|$3}},\nA equipa da wiki {{SITENAME}}",
+ "tsb-email-rejected-subject": "O seu pedido para tornar-se tradutor na wiki {{SITENAME}} foi rejeitado",
+ "tsb-email-rejected-body": "Olá {{GENDER:$1|$1}},\n\nObrigado por se ter candidatado a tradutor na wiki {{SITENAME}}. Lamento informar que rejeitei o seu pedido, porque a qualidade das traduções não preencheu os requisitos.\n\nSe acredita que a rejeição resulta de um erro de avaliação, tente candidatar-se novamente a tradutor na wiki {{SITENAME}}, por favor. Pode inscrever-se aqui:\n$2\n\n{{GENDER:$3|$3}},\nA equipa da wiki {{SITENAME}}",
+ "tsb-request-count": "$1 {{PLURAL:$1|pedido|pedidos}}",
+ "tsb-all-languages-button-label": "Todas as línguas",
+ "tsb-search-requests": "Pesquisar pedidos pendentes",
+ "tsb-accept-button-label": "Aceitar",
+ "tsb-reject-button-label": "Rejeitar",
+ "tsb-selected-count": "{{PLURAL:$1|$1 utilizador selecionado|$1 utilizadores selecionados}}",
+ "tsb-older-requests": "$1 {{PLURAL:$1|pedido anterior|pedidos anteriores}}",
+ "tsb-accept-all-button-label": "Aceitar todos",
+ "tsb-reject-all-button-label": "Rejeitar todos",
+ "tsb-user-posted-a-comment": "Não é tradutor",
+ "tsb-reminder-link-text": "Enviar lembrança por correio eletrónico",
+ "tsb-didnt-make-any-translations": "Este utilizador não fez traduções.",
+ "tsb-translations-source": "Fonte",
+ "tsb-translations-user": "Traduções {{GENDER:$1|do utilizador|da utilizadora}}",
+ "tsb-translations-current": "Traduções existentes",
+ "tsb-delete-userpage-summary": "A eliminar a página de utilizador de um utilizador da área de teste de tradutores",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Utilizador rejeitado|Utilizadores rejeitados}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Utilizador aceitado|Utilizadores aceitados}}",
+ "translationstash": "Bem-vindo(a)",
+ "translate-translationstash-welcome": "{{GENDER:$1|Bem-vindo $1, é um novo tradutor|Bem-vinda $1, é uma nova tradutora}}",
+ "translate-translationstash-welcome-note": "Familiarize-se com as ferramentas de tradução. Traduza algumas mensagens e obtenha todos os privilégios de tradutor para participar nos seus projetos preferidos.",
+ "translate-translationstash-initialtranslation": "A sua tradução inicial",
+ "translate-translationstash-translations": "$1 {{PLURAL:$1|tradução concluída|traduções concluídas}}",
+ "translate-translationstash-skip-button-label": "Tentar outra",
+ "tsb-limit-reached-title": "Obrigado pelas suas traduções",
+ "tsb-limit-reached-body": "Atingiu o limite de traduções para novos tradutores.\nA nossa equipa irá verificar e atualizar a sua conta dentro de pouco tempo.\nPoderá então traduzir sem limitações.",
+ "tsb-no-requests-from-new-users": "Não há pedidos de novos utilizadores",
+ "tsb-create-user-page": "Criação de página de utilizador básica",
+ "log-name-translatorsandbox": "Registo da área de teste de tradutores",
+ "log-description-translatorsandbox": "Um registo das operações sobre utilizadores da área de teste de tradutores",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|promoveu}} $3 a {{GENDER:$4|tradutor|tradutora}}",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|rejeitou}} o pedido de \"$3\" para se tornar tradutor",
+ "logentry-newusers-tsbpromoted": "A conta $3 foi {{GENDER:$2|criada}} por promoção da área de teste"
+}
diff --git a/Translate/i18n/sandbox/qqq.json b/Translate/i18n/sandbox/qqq.json
new file mode 100644
index 00000000..8d3daff0
--- /dev/null
+++ b/Translate/i18n/sandbox/qqq.json
@@ -0,0 +1,60 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "Metalhead64",
+ "Mhutti1",
+ "Nemo bis",
+ "Nike",
+ "Purodha",
+ "Raymond",
+ "Shirayuki",
+ "Verdy p"
+ ]
+ },
+ "managetranslatorsandbox": "{{doc-special|TranslateSandbox}}",
+ "tsb-filter-pending": "A filter option on [[Special:TranslateSandbox]].\n\nFollowed by a list of the pending requests.",
+ "tsb-reminder-title-generic": "Subject of an email",
+ "tsb-reminder-content-generic": "Body of an email. Parameters:\n* $1 - user name of the recipient\n* $3 - URL to the website",
+ "tsb-reminder-sending": "Shown near {{msg-mw|tsb-reminder-link-text}} while the reminder email is being sent.",
+ "tsb-reminder-sent": "Shown near {{msg-mw|tsb-reminder-link-text}} after the reminder email was successfully sent. Parameters:\n* $1 - the number of reminders that were already sent\n* $2 - the last time a reminder was sent: {{Doc-human-timestamp|12:00|10}}",
+ "tsb-reminder-sent-new": "Shown near {{msg-mw|tsb-reminder-link-text}} after sending a new reminder.",
+ "tsb-reminder-failed": "Shown near {{msg-mw|tsb-reminder-link-text}} if sending the reminder email failed.",
+ "tsb-email-promoted-subject": "The subject for an email that announces that a user received full translation rights (\"promoted\").",
+ "tsb-email-promoted-body": "The body text for an email that announces that a user received full translation rights (\"promoted\"). Parameters:\n* $1 - the username of the new user who was promoted\n* $2 - the URL to Special:Translate at the website\n* $3 - the username of the administrator who promoted the user",
+ "tsb-email-rejected-subject": "The subject for an email that announces that a user's request to become a translator was rejected.",
+ "tsb-email-rejected-body": "The body text for an email that announces that a user's request to become a translator was rejected. Parameters:\n* $1 - the username of the new user whose request was rejected\n* $2 - the URL to Special:MainPage at the website\n* $3 - the username of the administrator who promoted the user",
+ "tsb-request-count": "Label showing number of requests. Parameters:\n* $1 - number of requests\n{{Identical|Request}}",
+ "tsb-all-languages-button-label": "Button label for filtering the requests by language.\n{{Identical|All languages}}",
+ "tsb-search-requests": "Placeholder text for request search box on top of [[Special:TranslateSandbox]].",
+ "tsb-accept-button-label": "Button label for accept button in [[Special:TranslateSandbox]].\n{{Identical|Accept}}",
+ "tsb-reject-button-label": "Button label for reject button in [[Special:TranslateSandbox]].\n{{Identical|Reject}}",
+ "tsb-selected-count": "Shows how many users are selected for accepting or rejecting. Parameters:\n* $1 - the number of users",
+ "tsb-older-requests": "A link shown at the footer of the requests list. Clicking the link selects all the requests that are older than the oldest currently-selected request.\n\nParameters:\n* $1 - the number of older requests. It can be 0, yet if so, the link is hidden per CSS class.",
+ "tsb-accept-all-button-label": "Button label for accept-all button in [[Special:TranslateSandbox]].\n\nSee also:\n* {{msg-mw|Tsb-reject-all-button-label}}",
+ "tsb-reject-all-button-label": "Button label for reject-all button in [[Special:TranslateSandbox]].\n\nSee also:\n* {{msg-mw|Tsb-accept-all-button-label}}",
+ "tsb-user-posted-a-comment": "A label that appears near some text posted by the user.",
+ "tsb-reminder-link-text": "Link text for sending reminder emails about translator signup requests.\n\nSee also:\n* {{msg-mw|Tsb-reminder-sent-new}}",
+ "tsb-didnt-make-any-translations": "Displayed instead of the translations if the selected user didn't make any translations.",
+ "tsb-translations-source": "Table header label for source messages of user translations in [[Special:TranslateSandbox]].\n{{Identical|Source}}",
+ "tsb-translations-user": "Table header label for user translations in [[Special:TranslateSandbox]].\n\nParameters:\n* $1 - user, can be used for GENDER",
+ "tsb-translations-current": "Table header label for existing translations in [[Special:TranslateSandbox]].",
+ "tsb-delete-userpage-summary": "Edit summary for deleting the user page of a sandboxed user.",
+ "tsb-reject-confirmation": "Bubble notification confirming user(s) has been rejected",
+ "tsb-accept-confirmation": "Bubble notification confirming user(s) has been accepted",
+ "translationstash": "Page title for [[Special:TranslationStash]].\n{{Identical|Welcome}}",
+ "translate-translationstash-welcome": "Title text shown for the [[Special:TranslationStash]]. Parameters:\n* $1 - user name of the new translator",
+ "translate-translationstash-welcome-note": "Title note for the [[Special:TranslationStash]].",
+ "translate-translationstash-initialtranslation": "Header for messages showing the progress of translations in [[Special:TranslationStash]].\n\nSee also:\n* {{msg-mw|Translate-translationstash-translations}}",
+ "translate-translationstash-translations": "Header for messages showing the progress of translations in [[Special:TranslationStash]]. Params:\n\t* $1 - the number of translations user has completed in the stash",
+ "translate-translationstash-skip-button-label": "Label for the skip button in translation editor.\n{{Identical|Try another}}",
+ "tsb-limit-reached-title": "Heading shown below translations when the user has reached the limit for number of translations.",
+ "tsb-limit-reached-body": "Text shown below translations when the user has reached the limit for number of translations.",
+ "tsb-no-requests-from-new-users": "Shown on [[Special:TranslateSandbox]] when there are no requests for approval from new users.",
+ "tsb-create-user-page": "Edit summary for user page creation once approved as translator. Will be in content language.",
+ "log-name-translatorsandbox": "{{doc-logpage}}",
+ "log-description-translatorsandbox": "Log page description",
+ "logentry-translatorsandbox-promoted": "{{logentry}}\n* $4 - The name of the user that was promoted, can be used for GENDER.",
+ "logentry-translatorsandbox-rejected": "{{logentry}}\n----\n$3 is a user (usually linked), who has made a request, which was rejected by $1.<br/>\n'''FIXME''': we need $4 for the plain user name which can be used with <nowiki>{{GENDER:$4|translator}}</nowiki>",
+ "logentry-newusers-tsbpromoted": "{{logentry}}\n'''FIXME''': we need $4 for the plain user name which can be used with <nowiki>{{GENDER:$4|translator}}</nowiki>"
+}
diff --git a/Translate/i18n/sandbox/qu.json b/Translate/i18n/sandbox/qu.json
new file mode 100644
index 00000000..089969d1
--- /dev/null
+++ b/Translate/i18n/sandbox/qu.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "AlimanRuna"
+ ]
+ },
+ "translate-translationstash-initialtranslation": "Qampa ñawpaq t'ikrayniyki"
+}
diff --git a/Translate/i18n/sandbox/ro.json b/Translate/i18n/sandbox/ro.json
new file mode 100644
index 00000000..d4adfe2f
--- /dev/null
+++ b/Translate/i18n/sandbox/ro.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Minisarm",
+ "NGC 54",
+ "Strainu"
+ ]
+ },
+ "managetranslatorsandbox": "Administrați pagina de teste a traducătorului",
+ "tsb-filter-pending": "Cereri în așteptare",
+ "tsb-reminder-title-generic": "Finalizați-vă propria prezentare pentru a deveni un traducător",
+ "tsb-all-languages-button-label": "Toate limbile",
+ "tsb-search-requests": "Căutare cereri în așteptare",
+ "tsb-accept-button-label": "Acceptă",
+ "tsb-reject-button-label": "Respinge",
+ "tsb-selected-count": "{{PLURAL:$1|$1 utilizator selectat|$1 utilizatori selectați|$1 de utilizatori selectați}}",
+ "tsb-older-requests": "$1 {{PLURAL:$1|cerere mai veche|cereri mai vechi|de cereri mai vechi}}",
+ "tsb-accept-all-button-label": "Acceptă tot",
+ "tsb-reject-all-button-label": "Respinge tot",
+ "tsb-user-posted-a-comment": "Nu este traducător",
+ "tsb-translations-source": "Sursă",
+ "tsb-translations-user": "Traducerile {{GENDER:$1|utilizatorului|utilizatoarei}}",
+ "tsb-translations-current": "Traduceri existente",
+ "translationstash": "Bun venit",
+ "translate-translationstash-welcome": "Bun venit, {{GENDER:$1|$1}}, sunteți {{GENDER:$1|un nou traducător|o nouă traducătoare|un nou traducător}}",
+ "translate-translationstash-initialtranslation": "Traducerea dumnevoastră inițială",
+ "translate-translationstash-translations": "$1 {{PLURAL:$1|traducere finalizată|traduceri finalizate|de traduceri finalizate}}",
+ "translate-translationstash-skip-button-label": "Încercați o alta",
+ "tsb-limit-reached-title": "Mulțumim pentru traduceri",
+ "tsb-no-requests-from-new-users": "Nicio cerere din partea utilizatorilor noi",
+ "log-name-translatorsandbox": "Jurnal traduceri cutie cu nisip"
+}
diff --git a/Translate/i18n/sandbox/roa-tara.json b/Translate/i18n/sandbox/roa-tara.json
new file mode 100644
index 00000000..06453d3e
--- /dev/null
+++ b/Translate/i18n/sandbox/roa-tara.json
@@ -0,0 +1,52 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joetaras"
+ ]
+ },
+ "managetranslatorsandbox": "Gestisce 'a sandbox de traduzione",
+ "tsb-filter-pending": "Richieste appese",
+ "tsb-reminder-title-generic": "Comblete 'a 'ndroduziona toje pe devendà 'nu traduttore",
+ "tsb-reminder-content-generic": "Cià $1,\n\nGrazie ca tè reggistrate sus a {{SITENAME}}.\n\nCe tu comblete 'u test de traduziune, l'amministrature ponne darte le privilegge pe l'accesse 'a traduzione comblete.\n\nPe piacere avìne jndr'à $2 e fà angore quacche otre traduzione.\n\n$3,\n'a squadre de {{SITENAME}}",
+ "tsb-reminder-sending": "Stoche a manne 'nu promemorie...",
+ "tsb-reminder-sent": "{{PLURAL:$1|Mannate $1 promemorie $2. Tiembe: $2.|Mannate $1 promemorie. Tiembe de l'urteme: $2.}}",
+ "tsb-reminder-sent-new": "Manne 'nu promemorie",
+ "tsb-reminder-failed": "Invie d'u promemorie sciute a male",
+ "tsb-email-promoted-subject": "Mò si traduttore sus a {{SITENAME}}",
+ "tsb-email-promoted-body": "Cià {{GENDER:$1|$1}},\n\nComblimende! Agghie condrollate le traduziune de prove ca è fatte sus a {{SITENAME}} e t'agghie date le detirre comblete de traduttore.\n\nAvìne sus a {{SITENAME}} pe condinuà a traducere mò e ogne sciurne:\n$2\n\nBovègne e grazie pe le condrebbute tune!\n\n{{GENDER:$3|$3}},\n'u staff de {{SITENAME}}",
+ "tsb-email-rejected-subject": "'A richiesta toje de devendà 'nu traduttore sus a {{SITENAME}} ha state scettate",
+ "tsb-email-rejected-body": "Cià {{GENDER:$1|$1}},\n\nGrazie purcè è fatte richieste de devendà 'nu traduttore sus a {{SITENAME}}. Me despiace 'mbormarte ca agghie rifiutate 'a richeista toje, purcé 'a qualitate de le traduziune non ge soddisfe le requisite.\n\nCe pinze ca 'a richiesta toje ha state scettate pe errore, pruéve a fà 'n'otra domande pe devendà traduttore sus a {{SITENAME}}. Puè reggistrarte aqquà:\n$2\n\n{{GENDER:$3|$3}},\n'u staff de {{SITENAME}}",
+ "tsb-request-count": "$1 {{PLURAL:$1|richieste}}",
+ "tsb-all-languages-button-label": "Tutte le lènghe",
+ "tsb-search-requests": "Cirche le richieste appese",
+ "tsb-accept-button-label": "Accette",
+ "tsb-reject-button-label": "Scitte",
+ "tsb-selected-count": "{{PLURAL:$1|$1 utene|$1 utinde}} scacchiate",
+ "tsb-older-requests": "$1 richieste {{PLURAL:$1|vecchie|vicchie}}",
+ "tsb-accept-all-button-label": "Accette tutte",
+ "tsb-reject-all-button-label": "Scitte tutte",
+ "tsb-user-posted-a-comment": "None 'nu traduttore",
+ "tsb-reminder-link-text": "Manne 'n'email de promemorie",
+ "tsb-didnt-make-any-translations": "Stu utende non g'ave fatte nisciuna traduzione.",
+ "tsb-translations-source": "Sorgende",
+ "tsb-translations-user": "Traduziune de {{GENDER:$1|l'utende}}",
+ "tsb-translations-current": "Traduziune esistende",
+ "tsb-delete-userpage-summary": "Stoche a scangelle 'a pàgene de l'utende de 'n'utende de prove",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Utende|Utinde}} scettate",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Utende|Utinde}} accettate",
+ "translationstash": "Bovègne",
+ "translate-translationstash-welcome": "Bovègne {{GENDER:$1|$1}}, mò sì {{GENDER:$1|'nu traduttore nuève|'an traduttrice nove}}",
+ "translate-translationstash-welcome-note": "Pigghie famigliarità cu le struminde de traduzione. Traduce quacche messàgge e pigghie le deritte comblete pe partecipà a le pruggette preferite da te.",
+ "translate-translationstash-initialtranslation": "'A traduzione iniziale toje",
+ "translate-translationstash-translations": "$1 {{PLURAL:$1|traduzione|traduziune}} combletate",
+ "translate-translationstash-skip-button-label": "Pruève 'n'otre",
+ "tsb-limit-reached-title": "Grazie pe le traduziune tune",
+ "tsb-limit-reached-body": "E' raggiunde 'u limite de traduziune pe tradutture nuève.\n'A squadra nostre adda condrollà e pò t'aggiorne preste l'utenza toje.\nCchiù nande puè accumenzà a traducere senza limite.",
+ "tsb-no-requests-from-new-users": "Nisciuna richieste da utinde nuève",
+ "tsb-create-user-page": "Ccrejate 'na pàgene utende de base",
+ "log-name-translatorsandbox": "Archivije de le prove de traduzione",
+ "log-description-translatorsandbox": "'N'archivije de le operaziune de le prove de traduzione de le utinde",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|promosse}} $3 a {{GENDER:$4|traduttore|traduttrice}}",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|ave scettate}} 'a richieste da \"$3\" de addevendà 'nu traduttore",
+ "logentry-newusers-tsbpromoted": "'U cunde utende $3 ha state {{GENDER:$2|ccrejate}} pe promozzione da 'a sckatele de le prove"
+}
diff --git a/Translate/i18n/sandbox/ru.json b/Translate/i18n/sandbox/ru.json
new file mode 100644
index 00000000..558a4ad2
--- /dev/null
+++ b/Translate/i18n/sandbox/ru.json
@@ -0,0 +1,58 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alexander Istomin",
+ "Kaganer",
+ "Okras",
+ "Ole Yves",
+ "Redredsonia",
+ "Stjn",
+ "Vlad5250"
+ ]
+ },
+ "managetranslatorsandbox": "Управление песочницей переводчика",
+ "tsb-filter-pending": "Запросы, ожидающие обработки",
+ "tsb-reminder-title-generic": "Завершите свой вводный курс, чтобы стать переводчиком.",
+ "tsb-reminder-content-generic": "Привет, $1!\n\nСпасибо за регистрацию на сайте «{{SITENAME}}».\n\nЕсли вы завершили свои пробные переводы, администраторы могут позднее предоставить вам полный доступ к инструменту перевода.\n\nПожалуйста, перейдите по ссылке $2 и сделайте ещё несколько переводов.\n\n$3,\nСотрудники сайта «{{SITENAME}}»",
+ "tsb-reminder-sending": "Отправка напоминания…",
+ "tsb-reminder-sent": "{{PLURAL:$1|Отправлено $1 напоминание. Время|Отправлены $1 напоминаний, время последнего|Отправлены $1 напоминания, время последнего}}: $2.",
+ "tsb-reminder-sent-new": "Напоминание отправлено",
+ "tsb-reminder-failed": "Отправка напоминания не удалась",
+ "tsb-email-promoted-subject": "Теперь вы — переводчик сайта «{{SITENAME}}»",
+ "tsb-email-promoted-body": "Привет, {{GENDER:$1|$1}}.\n\nПоздравляем! Мною были проверены тестовые переводы, которые вы сделали на {{SITENAME}}, и теперь вам предоставлены полные права переводчика.\n\nПрийдите на сайт «{{SITENAME}}», чтоб продолжать переводить его сейчас и каждый день:\n$2\n\nДобро пожаловать и спасибо за ваш вклад!\n\n{{GENDER:$3|$3}},\nСотрудник {{SITENAME}}",
+ "tsb-email-rejected-subject": "Ваша заявка на получение прав переводчика сайта {{SITENAME}} была отклонена",
+ "tsb-email-rejected-body": "Привет, {{GENDER:$1|$1}}!\n\nБлагодарим вас за участие в качестве переводчика на сайте {{SITENAME}}. Я вынужден сообщить вам, что мне пришлось отвергнуть вашу заявку, поскольку качество ваших переводов не отвечает нашим требованиям.\n\nЕсли вы считаете, что ваша заявка была отклонена по ошибке, пожалуйста, попробуйте снова подать заявку на участие в качестве переводчика на сайте {{SITENAME}}. Вы можете зарегистрироваться здесь:\n$2\n\n{{GENDER:$3|$3}},\nСотрудник {{SITENAME}}",
+ "tsb-request-count": "{{PLURAL:$1|$1 запрос|$1 запроса|$1 запросов|1=Один запрос}}",
+ "tsb-all-languages-button-label": "Все языки",
+ "tsb-search-requests": "Искать запросы на рассмотрении",
+ "tsb-accept-button-label": "Принять",
+ "tsb-reject-button-label": "Отклонить",
+ "tsb-selected-count": "{{PLURAL:$1|$1 участник выбран|$1 участника выбрано|$1 участников выбрано}}",
+ "tsb-older-requests": "$1 более {{PLURAL:$1|старый запрос|старых запроса|старых запросов}}",
+ "tsb-accept-all-button-label": "Принять все",
+ "tsb-reject-all-button-label": "Отклонить все",
+ "tsb-user-posted-a-comment": "Не переводчик",
+ "tsb-reminder-link-text": "Отправить напоминание по электронной почте",
+ "tsb-didnt-make-any-translations": "Этот участник не сделал ни одного перевода.",
+ "tsb-translations-source": "Источник",
+ "tsb-translations-user": "Переводы {{GENDER:$1|пользователя}}",
+ "tsb-translations-current": "Существующие переводы",
+ "tsb-delete-userpage-summary": "Удаление страницы участника, относящейся к участнику из песочницы",
+ "tsb-reject-confirmation": "Отклонено: $1 участник{{PLURAL:$1||а|ов}}",
+ "tsb-accept-confirmation": "Принято: $1 участник{{PLURAL:$1||а|ов}}",
+ "translationstash": "Добро пожаловать",
+ "translate-translationstash-welcome": "Добро пожаловать, {{GENDER:$1|$1}}, теперь вы новый переводчик",
+ "translate-translationstash-welcome-note": "Ознакомьтесь с инструментами перевода. Переведите несколько сообщений и получите полные права переводчика, чтобы принять участие в понравившемся проекте.",
+ "translate-translationstash-initialtranslation": "Ваш первоначальный перевод",
+ "translate-translationstash-translations": "$1 {{PLURAL:$1|завершённый перевод|завершённых перевода|завершённых переводов}}",
+ "translate-translationstash-skip-button-label": "Попробуйте другой",
+ "tsb-limit-reached-title": "Спасибо за ваши переводы",
+ "tsb-limit-reached-body": "Вы достигли предела переводов для новых переводчиков.\nНаша команда проверит и обновит вашу учётную запись в ближайшее время.\nПосле этого вы сможете переводить без ограничений.",
+ "tsb-no-requests-from-new-users": "Нет запросов от новых участников",
+ "tsb-create-user-page": "Создана основная страница участника",
+ "log-name-translatorsandbox": "Журнал песочницы для переводов",
+ "log-description-translatorsandbox": "Журнал действий с участниками песочницы переводов",
+ "logentry-translatorsandbox-promoted": "$1 сделал{{GENDER:$2||а}} $3 {{GENDER:$4|переводчиком}}",
+ "logentry-translatorsandbox-rejected": "$1 отклонил{{GENDER:$2||а}} запрос от «$3» на получение статуса переводчика.",
+ "logentry-newusers-tsbpromoted": "Учётная запись участника $3 была {{GENDER:$2|создана}} из записи в песочнице"
+}
diff --git a/Translate/i18n/sandbox/sa.json b/Translate/i18n/sandbox/sa.json
new file mode 100644
index 00000000..bd343f3e
--- /dev/null
+++ b/Translate/i18n/sandbox/sa.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "NehalDaveND"
+ ]
+ },
+ "tsb-accept-button-label": "स्वीक्रियताम्",
+ "tsb-reject-button-label": "तिरस्क्रियताम्",
+ "tsb-accept-all-button-label": "सर्वं स्वीक्रियताम्",
+ "tsb-reject-all-button-label": "सर्वं तिरस्क्रियताम्",
+ "tsb-translations-source": "स्रोतः",
+ "translationstash": "स्वागतम्"
+}
diff --git a/Translate/i18n/sandbox/sah.json b/Translate/i18n/sandbox/sah.json
new file mode 100644
index 00000000..22c0ed51
--- /dev/null
+++ b/Translate/i18n/sandbox/sah.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Туллук"
+ ]
+ },
+ "tsb-email-promoted-body": "Үтүө күнүнэн, {{GENDER:$1|$1}}\nЭҕэрдэлиибин! Мин эн {{SITENAME}}ка оҥорбут тылбаастаргын бэрэбиэркэлээтим, мантан ыла эйиэхэ тылбаасчыт толору бырааба бэриллэр.\n\nмантан ыла күн аайы тылбаастыырга, {{SITENAME}} сайтка көс\n$2\n Нөрүн нөргүй, эн кылаатын иһин махталбын тириэрдэбин\n{{GENDER:$3|$3}},\n{{SITENAME}} үлэһит"
+}
diff --git a/Translate/i18n/sandbox/scn.json b/Translate/i18n/sandbox/scn.json
new file mode 100644
index 00000000..44a8aa2a
--- /dev/null
+++ b/Translate/i18n/sandbox/scn.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ajeje Brazorf",
+ "Sarvaturi"
+ ]
+ },
+ "tsb-all-languages-button-label": "Tutti li lingui",
+ "tsb-accept-button-label": "Accetta",
+ "tsb-reject-button-label": "Rifiuta",
+ "tsb-user-posted-a-comment": "Nun n tradutturi",
+ "translationstash": "Bimminutu/a"
+}
diff --git a/Translate/i18n/sandbox/sco.json b/Translate/i18n/sandbox/sco.json
new file mode 100644
index 00000000..4e552d5b
--- /dev/null
+++ b/Translate/i18n/sandbox/sco.json
@@ -0,0 +1,48 @@
+{
+ "@metadata": {
+ "authors": [
+ "John Reid"
+ ]
+ },
+ "managetranslatorsandbox": "Manage owerseter saunpit",
+ "tsb-filter-pending": "Awaitin requests",
+ "tsb-reminder-title-generic": "Compleate yer introduction tae become aen owerseter",
+ "tsb-reminder-content-generic": "Hallo $1,\n\nThanks fer registerin wi {{SITENAME}}.\n\nGif ye compleate yer test owersets, the admeenistraters will graunt ye ful owerseter access soon efterwairds.\n\nPlease come ower n dae some mair owersets here:\n$2\n\n$3,\n{{SITENAME}} staff",
+ "tsb-reminder-sending": "Sendin the myndin...",
+ "tsb-reminder-sent": "{{PLURAL:$1|Sent $1 myndin $2|Sent $1 myndins, the laist yin $2}}",
+ "tsb-reminder-sent-new": "Sent ae myndin",
+ "tsb-reminder-failed": "Sendin the myndin failed",
+ "tsb-email-promoted-subject": "Ye'r nou aen owerseter at {{SITENAME}}",
+ "tsb-email-promoted-body": "Hallo {{GENDER:$1|$1}},\n\nWeeldun! Ah'v checkt the test owersetins that ye did at {{SITENAME}} n gae ye ful owerseter richts.\n\nCome til {{SITENAME}} tae continue owersetin nou, n ilka day:\n$2\n\nWeelcome, n thank ye fer ye contreebutions!\n\n{{GENDER:$3|$3}},\n{{SITENAME}} staff",
+ "tsb-email-rejected-subject": "Yer appleecation tae be aen owerseter at {{SITENAME}} wis turned doon",
+ "tsb-email-rejected-body": "Hallo {{GENDER:$1|$1}},\n\nThank ye fer appliein aes aen owerseter at {{SITENAME}}. Ah regret tae inform ye that Ah'v turned yer appleecation doon, cause the qualitie o yer owersets didna meet the needs.\n\nGif ye think that yer appleecation wis turned doon bi mistak, please gie appliein aes aen owerseter anither gae at {{SITENAME}}. Ye can sign up here:\n$2\n\n{{GENDER:$3|$3}},\n{{SITENAME}} staff",
+ "tsb-all-languages-button-label": "Aw leids",
+ "tsb-search-requests": "Rake requests",
+ "tsb-reject-button-label": "Turn doon",
+ "tsb-selected-count": "{{PLURAL:$1|$1 uiser selectit|$1 uisers selectit}}",
+ "tsb-older-requests": "$1 aulder {{PLURAL:$1|request|requests}}",
+ "tsb-accept-all-button-label": "Accept aw",
+ "tsb-reject-all-button-label": "Turn aw doon",
+ "tsb-user-posted-a-comment": "Na aen owerseter",
+ "tsb-reminder-link-text": "Send wab-mail myndin",
+ "tsb-didnt-make-any-translations": "This uiser didna dae onie owersets.",
+ "tsb-translations-source": "Soorce",
+ "tsb-translations-user": "{{GENDER:$1|Uiser}} owersets",
+ "tsb-translations-current": "Exeestin owersets",
+ "tsb-delete-userpage-summary": "Delytin the uiser page o ae saunpit uiser",
+ "translationstash": "Weelcome",
+ "translate-translationstash-welcome": "Weelcome {{GENDER:$1|$1}}, ye'r ae new owerseter",
+ "translate-translationstash-welcome-note": "Become familiair wi the owersetin tuils. Owerset some messages n get ful-owerseter richts tae pairteecipate in yer favorite waurks.",
+ "translate-translationstash-initialtranslation": "Yer ineetial owersetin",
+ "translate-translationstash-translations": "$1 compleated {{PLURAL:$1|owerset|owersets}}",
+ "translate-translationstash-skip-button-label": "Gie anither ae gae",
+ "tsb-limit-reached-title": "Thanks fer yer owersets",
+ "tsb-limit-reached-body": "Ye'v reached the owersetin leemit fer new owerseters.\nOor team will verefie n upgrade yer accoont suin.\nThan ye'll be able tae owerset wioot leemits.",
+ "tsb-no-requests-from-new-users": "Naw requests fae new uisers",
+ "tsb-create-user-page": "Cræft basic uiser page",
+ "log-name-translatorsandbox": "Owersetin saunpit",
+ "log-description-translatorsandbox": "Ae log o actions oan owersetin saunpit uisers",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|promoted}} $3 til {{GENDER:$4|owerseter}}",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|turned doon}} the request fae \"$3\" tae become aen owerseter",
+ "logentry-newusers-tsbpromoted": "Uiser accoont $3 wis {{GENDER:$2|cræftit}} b promotion fae saunpit"
+}
diff --git a/Translate/i18n/sandbox/sd.json b/Translate/i18n/sandbox/sd.json
new file mode 100644
index 00000000..4e84f0b4
--- /dev/null
+++ b/Translate/i18n/sandbox/sd.json
@@ -0,0 +1,40 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mehtab ahmed"
+ ]
+ },
+ "managetranslatorsandbox": "ترجميڪار مشق-پٽي سنڀاليو",
+ "tsb-filter-pending": "رڪيل درخواستون",
+ "tsb-reminder-title-generic": "ترجميڪار ٿيڻ لاءِ پنھنجو تعارف مڪمل ڪريو",
+ "tsb-reminder-sending": "تاڪيدڪار موڪليندي…",
+ "tsb-reminder-sent": "{{PLURAL:$1|$1 تاڪيدڪار موڪليل. وقت: $2.|$1 تاڪيدڪار موڪليل. آخري موڪليل جو وقت: $2.}}",
+ "tsb-reminder-sent-new": "ھڪ موڪليل تاڪيدڪار",
+ "tsb-reminder-failed": "تاڪيدڪار موڪلڻ ۾ ناڪامي",
+ "tsb-email-promoted-subject": "توھان ھاڻي {{SITENAME}} تي ترجميڪار آھيو",
+ "tsb-request-count": "$1 {{PLURAL:$1|درخواست|درخواستون}}",
+ "tsb-all-languages-button-label": "سڀ ٻوليون",
+ "tsb-search-requests": "اٽڪيل درخواستون ڳوليو",
+ "tsb-accept-button-label": "قبوليو",
+ "tsb-reject-button-label": "رد ڪريو",
+ "tsb-selected-count": "{{PLURAL:$1|$1 رڪن چونڊيل}}",
+ "tsb-older-requests": "$1 {{PLURAL:$1|پراڻي درخواست|پراڻيون درخواستون}}",
+ "tsb-accept-all-button-label": "سڀ قبوليو",
+ "tsb-reject-all-button-label": "سڀ رد ڪريو",
+ "tsb-user-posted-a-comment": "ترجميڪار نہ آھيو",
+ "tsb-didnt-make-any-translations": "ھن رڪن ڪي بہ ترجما نہ ڪيا.",
+ "tsb-translations-source": "ذريعو",
+ "tsb-translations-user": "{{GENDER:$1|رڪن}} جا ترجما",
+ "tsb-translations-current": "موجود ترجما",
+ "translationstash": "ڀليڪار",
+ "translate-translationstash-welcome": "ڀليڪار {{GENDER:$1|$1}} توھان نوان ترجميڪار آھيو",
+ "translate-translationstash-initialtranslation": "توھان جاشروعاتي ترجما",
+ "translate-translationstash-translations": "$1 مڪمل ڪيل {{PLURAL:$1|ترجمو|ترجما}}",
+ "translate-translationstash-skip-button-label": "ھڪ ٻيو آزمايو",
+ "tsb-limit-reached-title": "توھان جي ترجمن لاءِ مھرباني",
+ "tsb-no-requests-from-new-users": "نون رڪنن مان ڪي بہ درخواستون نہ آھن",
+ "tsb-create-user-page": "بنيادي واپرائيندڙ صفحو سرجيو ويو",
+ "log-name-translatorsandbox": "ترجمي جي مشق پٽيءَ جو لاگ",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|ترقي ڏن}} $3 ڏانھن {{GENDER:$4|ترجميڪار}}",
+ "logentry-newusers-tsbpromoted": "مشق-پٽيءَ جي ترقيءَ سان واپرائيندڙ کاتو $3 {{GENDER:$2|کوليو ويو}}"
+}
diff --git a/Translate/i18n/sandbox/se.json b/Translate/i18n/sandbox/se.json
new file mode 100644
index 00000000..2f4e3216
--- /dev/null
+++ b/Translate/i18n/sandbox/se.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Yupik"
+ ]
+ },
+ "tsb-all-languages-button-label": "Buot gielat"
+}
diff --git a/Translate/i18n/sandbox/sh.json b/Translate/i18n/sandbox/sh.json
new file mode 100644
index 00000000..6390c83c
--- /dev/null
+++ b/Translate/i18n/sandbox/sh.json
@@ -0,0 +1,33 @@
+{
+ "@metadata": {
+ "authors": [
+ "Vlad5250"
+ ]
+ },
+ "managetranslatorsandbox": "Upravljanje prevodilačkim pješčanikom",
+ "tsb-filter-pending": "Zahtjevi na čekanju",
+ "tsb-reminder-title-generic": "Popunite Vaše predstavljanje da bi ste postali prevodilac",
+ "tsb-reminder-sending": "Šaljem podsjetnik...",
+ "tsb-reminder-sent-new": "Poslan podsjetnik",
+ "tsb-reminder-failed": "Nisam uspio poslati podsjetnik",
+ "tsb-email-promoted-subject": "Sad ste prevodilac na {{GRAMMAR:dativ|{{SITENAME}}}}",
+ "tsb-all-languages-button-label": "Svi jezici",
+ "tsb-search-requests": "Pretražite zahtjeve na čekanju",
+ "tsb-accept-button-label": "Prihvati",
+ "tsb-reject-button-label": "Odbij",
+ "tsb-selected-count": "{{PLURAL:$1|Izabran je jedan korisnik|Izabrana su $1 korisnika|Izabrano je $1 korisnika}}",
+ "tsb-older-requests": "{{PLURAL:$1|Jedan stariji zahtjev|$1 starija zahtjeva|$1 starijih zahtjeva}}",
+ "tsb-accept-all-button-label": "Prihvati sve",
+ "tsb-reject-all-button-label": "Odbij sve",
+ "tsb-user-posted-a-comment": "Nije prevodilac",
+ "tsb-reminder-link-text": "Pošalji podsjetnik e-poštom",
+ "tsb-didnt-make-any-translations": "Korisnikov nije napravio nijedan prijevod.",
+ "tsb-translations-source": "Izvor",
+ "tsb-translations-user": "{{GENDER:$1|Korisnički}} prijevodi",
+ "tsb-translations-current": "Postojeći prijevodi",
+ "tsb-delete-userpage-summary": "Brisanje korisničku stranicu pješčaničkog korisnika",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Korisnik je odbijen|Korisnici su odbijeni}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Korisnik je prihvaćen|Korisnici su prihvaćeni}}",
+ "translationstash": "Dobro došli",
+ "translate-translationstash-welcome": "Dobro došli {{GENDER:$1|$1}}, Vi ste novi prevodilac"
+}
diff --git a/Translate/i18n/sandbox/sk.json b/Translate/i18n/sandbox/sk.json
new file mode 100644
index 00000000..094046b3
--- /dev/null
+++ b/Translate/i18n/sandbox/sk.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "LacoR",
+ "Lexected",
+ "Luky001"
+ ]
+ },
+ "tsb-reject-confirmation": "{{PLURAL:$1|Používateľ|Používatelia}} úspešne {{PLURAL:$1|zamietnutý|zamietnutí}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Používateľ|Používatelia}} úspešne {{PLURAL:$1|prijatý|prijatí}}",
+ "tsb-limit-reached-title": "Ďakujeme za vaše preklady",
+ "log-name-translatorsandbox": "Záznam z pieskoviska prekladov"
+}
diff --git a/Translate/i18n/sandbox/skr-arab.json b/Translate/i18n/sandbox/skr-arab.json
new file mode 100644
index 00000000..f66aa7b2
--- /dev/null
+++ b/Translate/i18n/sandbox/skr-arab.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Saraiki"
+ ]
+ },
+ "tsb-all-languages-button-label": "ساریاں زباناں",
+ "tsb-accept-button-label": "منظور",
+ "translationstash": "ست بسم اللہ"
+}
diff --git a/Translate/i18n/sandbox/sl.json b/Translate/i18n/sandbox/sl.json
new file mode 100644
index 00000000..f84c2f3f
--- /dev/null
+++ b/Translate/i18n/sandbox/sl.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Eleassar"
+ ]
+ },
+ "tsb-request-count": "$1 {{PLURAL:$1|zahtevek|zahtevka|zahtevki|zahtevkov}}",
+ "translationstash": "Pozdravljeni"
+}
diff --git a/Translate/i18n/sandbox/smn.json b/Translate/i18n/sandbox/smn.json
new file mode 100644
index 00000000..51837f0a
--- /dev/null
+++ b/Translate/i18n/sandbox/smn.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Seipinne"
+ ]
+ },
+ "tsb-all-languages-button-label": "Puoh kielah",
+ "tsb-translations-source": "Käldee",
+ "tsb-translations-current": "Tááláš jurgâlus",
+ "translationstash": "Tiervâpuáttim"
+}
diff --git a/Translate/i18n/sandbox/sms.json b/Translate/i18n/sandbox/sms.json
new file mode 100644
index 00000000..1a58a1c4
--- /dev/null
+++ b/Translate/i18n/sandbox/sms.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Yupik"
+ ]
+ },
+ "tsb-all-languages-button-label": "Puk ǩiõl",
+ "tsb-accept-button-label": "Priim",
+ "tsb-didnt-make-any-translations": "Tät õõʹnni ij jåårǥlâttam ni mâiʹd.",
+ "tsb-translations-source": "Käivv",
+ "translationstash": "Tiõrvpueʹttem"
+}
diff --git a/Translate/i18n/sandbox/sq.json b/Translate/i18n/sandbox/sq.json
new file mode 100644
index 00000000..497be515
--- /dev/null
+++ b/Translate/i18n/sandbox/sq.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kosovastar"
+ ]
+ },
+ "tsb-reminder-content-generic": "Përshëndetje $1,\n\nFaleminderit për regjistrimin tek {{SITENAME}}.\n\nNëse e plotëson testin tënd të përkthimeve, administratorët më pas do të japin qasje të plotë përkthimi.\n\nTë lutem eja dhe bëjë disa përkthime më shumë këtu:\n$2\n\n$3,\nstafi i {{SITENAME}}"
+}
diff --git a/Translate/i18n/sandbox/sr-ec.json b/Translate/i18n/sandbox/sr-ec.json
new file mode 100644
index 00000000..45339904
--- /dev/null
+++ b/Translate/i18n/sandbox/sr-ec.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "BadDog",
+ "Kizule",
+ "Milicevic01",
+ "Obsuser"
+ ]
+ },
+ "managetranslatorsandbox": "Управљај песком преводиоца",
+ "tsb-filter-pending": "Захтеви на чекању",
+ "tsb-reminder-title-generic": "Довршите ваше представљање како би сте постали преводилац",
+ "tsb-reminder-sending": "Слање обавештења...",
+ "tsb-all-languages-button-label": "Сви језици",
+ "tsb-accept-button-label": "Прихвати",
+ "tsb-reject-button-label": "Одбиј",
+ "tsb-accept-all-button-label": "Прихвати све",
+ "tsb-reject-all-button-label": "Одбији све",
+ "tsb-translations-source": "Извор",
+ "translationstash": "Добро дошли!",
+ "translate-translationstash-welcome": "{{GENDER:$1|Добродошао $1|Добродошла $1}}, Ви сте нови преводилац",
+ "translate-translationstash-initialtranslation": "Ваш почетни превод",
+ "tsb-create-user-page": "Направљена основна корисничка страница",
+ "log-name-translatorsandbox": "Дневник превода у песку",
+ "logentry-translatorsandbox-promoted": "$1 је {{GENDER:$2|унапредио|унапредила}} $3 у {{GENDER:$4|преводиоца}}",
+ "logentry-translatorsandbox-rejected": "$1 је {{GENDER:$2|одбио|одбила}} захтев корисника/це „$3” да постане преводилац"
+}
diff --git a/Translate/i18n/sandbox/sr-el.json b/Translate/i18n/sandbox/sr-el.json
new file mode 100644
index 00000000..b618f68b
--- /dev/null
+++ b/Translate/i18n/sandbox/sr-el.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Zoranzoki21"
+ ]
+ },
+ "tsb-all-languages-button-label": "Svi jezici",
+ "tsb-accept-button-label": "Prihvati",
+ "tsb-reject-button-label": "Odbij",
+ "tsb-accept-all-button-label": "Prihvati sve",
+ "tsb-reject-all-button-label": "Odbiji sve",
+ "tsb-translations-source": "Izvor",
+ "tsb-create-user-page": "Napravljena osnovna korisnička stranica",
+ "log-name-translatorsandbox": "Dnevnik prevoda u pesku",
+ "logentry-translatorsandbox-promoted": "$1 je {{GENDER:$2|unapredio|unapredila}} $3 u {{GENDER:$4|prevodioca}}",
+ "logentry-translatorsandbox-rejected": "$1 je {{GENDER:$2|odbio|odbila}} zahtev korisnika/ce „$3” da postane prevodilac"
+}
diff --git a/Translate/i18n/sandbox/sv.json b/Translate/i18n/sandbox/sv.json
new file mode 100644
index 00000000..2c424b4a
--- /dev/null
+++ b/Translate/i18n/sandbox/sv.json
@@ -0,0 +1,56 @@
+{
+ "@metadata": {
+ "authors": [
+ "JohanahoJ",
+ "Jopparn",
+ "Lokal Profil",
+ "Sabelöga",
+ "WikiPhoenix"
+ ]
+ },
+ "managetranslatorsandbox": "Hantera översättarsandlåda",
+ "tsb-filter-pending": "Väntande förfrågningar",
+ "tsb-reminder-title-generic": "Slutför din introduktion för att bli en översättare",
+ "tsb-reminder-content-generic": "Hej $1,\n\nTack för din registrering på {{SITENAME}}.\n\nOm du slutför dina testöversättningar kan administratörerna snart ge dig full behörighet till att översätta.\n\nVar god kom och gör några fler översättningar här:\n$2\n\n$3\npersonalen på {{SITENAME}}",
+ "tsb-reminder-sending": "Skickar påminnelsen...",
+ "tsb-reminder-sent": "Skickade {{PLURAL:$1|$1 påminnelse. Tid: $2.|$1 påminnelser. Tid för den senaste: $2.}}",
+ "tsb-reminder-sent-new": "Skickade en påminnelse",
+ "tsb-reminder-failed": "Det gick inte att skicka påminnelsen",
+ "tsb-email-promoted-subject": "Du är nu en översättare på {{SITENAME}}",
+ "tsb-email-promoted-body": "Hej {{GENDER:$1|$1}},\n\nGratulerar! Jag kollade testöversättningarna du gjorde på {{SITENAME}} och gav dig fullständiga översättningsrättigheter.\n\nKom till {{SITENAME}} för att fortsätta översätta när som helst:\n$2\n\nVälkommen och tack för dina bidrag!\n\n{{GENDER:$3|$3}},\nPersonal på {{SITENAME}}",
+ "tsb-email-rejected-subject": "Din ansökan om att bli en översättare på {{SITENAME}} avslogs",
+ "tsb-email-rejected-body": "Hej {{GENDER:$1|$1}},\n\nTack för att du ansöker om att bli översättare på {{SITENAME}}. Jag måste tyvärr meddela att jag har avslagit din ansökan, eftersom kvaliteten på dina översättningar inte uppfyllde kraven.\n\nOm du tror att din ansökan avslogs av misstag, var god försök att ansöka igen som en översättare på {{SITENAME}}. Du kan registrera dig här:\n$2\n\n{{GENDER:$3|$3}},\n{{SITENAME}} personal",
+ "tsb-request-count": "{{PLURAL:$1|En begäran|$1 begäran}}",
+ "tsb-all-languages-button-label": "Alla språk",
+ "tsb-search-requests": "Sök bland väntande förfrågningar",
+ "tsb-accept-button-label": "Acceptera",
+ "tsb-reject-button-label": "Acceptera inte",
+ "tsb-selected-count": "{{PLURAL:$1|En användare vald|$1 användare valda}}",
+ "tsb-older-requests": "$1 äldre {{PLURAL:$1|begäran}}",
+ "tsb-accept-all-button-label": "Acceptera alla",
+ "tsb-reject-all-button-label": "Avvisa alla",
+ "tsb-user-posted-a-comment": "Inte en översättare",
+ "tsb-reminder-link-text": "Skicka e-postpåminnelse",
+ "tsb-didnt-make-any-translations": "Denna användare gjorde inga översättningar.",
+ "tsb-translations-source": "Källa",
+ "tsb-translations-user": "{{GENDER:$1|Användar}}översättningar",
+ "tsb-translations-current": "Befintliga översättningar",
+ "tsb-delete-userpage-summary": "Tar bort användarsidan för en sandlådeanvändare",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Användare nekad|Användare nekade}}",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Användare accepterad|Användare accepterade}}",
+ "translationstash": "Välkommen",
+ "translate-translationstash-welcome": "Välkommen {{GENDER:$1|$1}}, du är en ny översättare",
+ "translate-translationstash-welcome-note": "Bekanta dig med översättningsverktygen. Översätt några meddelanden och få fullständiga översättningsrättigheter för att delta i dina favoritprojekt.",
+ "translate-translationstash-initialtranslation": "Din ursprungliga översättning",
+ "translate-translationstash-translations": "$1 {{PLURAL:$1|fullbordad översättning|fullbordade översättningar}}",
+ "translate-translationstash-skip-button-label": "Prova en annan",
+ "tsb-limit-reached-title": "Tack för dina översättningar",
+ "tsb-limit-reached-body": "Du har nått översättningsgränsen för nya översättare.\nVårt team kommer snart verifiera och uppgradera ditt konto.\nSedan kommer du kunna översätta utan begränsningar.",
+ "tsb-no-requests-from-new-users": "Inga förfrågningar från nya användare",
+ "tsb-create-user-page": "Skapade grundläggande användarsida",
+ "log-name-translatorsandbox": "Logg för översättningssandlåda",
+ "log-description-translatorsandbox": "En logg över åtgärder på översättningssandlådeanvändare",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|befordrade}} $3 till {{GENDER:$4|översättare}}",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|avvisade}} begäran från \"$3\" att bli en översättare",
+ "logentry-newusers-tsbpromoted": "Användarkontot $3 {{GENDER:$2|skapades}} genom befordran från sandlådan"
+}
diff --git a/Translate/i18n/sandbox/sw.json b/Translate/i18n/sandbox/sw.json
new file mode 100644
index 00000000..c08832a7
--- /dev/null
+++ b/Translate/i18n/sandbox/sw.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Yasen igra"
+ ]
+ },
+ "tsb-all-languages-button-label": "Lugha zote"
+}
diff --git a/Translate/i18n/sandbox/ta.json b/Translate/i18n/sandbox/ta.json
new file mode 100644
index 00000000..c035e286
--- /dev/null
+++ b/Translate/i18n/sandbox/ta.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Rakeshonwiki"
+ ]
+ },
+ "tsb-email-promoted-body": "வணக்கம் {{GENDER:$1|$1}},\n\nவாழ்த்துக்கள் ! நான் உங்களின் மொழிபெயப்புகளை {{SITENAME}} இல் ஆய்வு செய்தேன். இதன் மூலம் உங்களுக்கான மொழிபெயர்ப்பு உரிமத்தை வழங்குகிறேன்.\n\n{{SITENAME}} க்கு வந்து உங்களின் மொழிபெயர்ப்பை இன்றும் , என்றும் தொடருங்கள்:\n$2\n\nநல்வரவு, உங்களின் பங்களிப்ப்பிற்கு மிக்க நன்றி!\n\n{{GENDER:$3|$3}},\n{{SITENAME}} பணியாள்"
+}
diff --git a/Translate/i18n/sandbox/tcy.json b/Translate/i18n/sandbox/tcy.json
new file mode 100644
index 00000000..8337ec44
--- /dev/null
+++ b/Translate/i18n/sandbox/tcy.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "BHARATHESHA ALASANDEMAJALU",
+ "Ravi Mundkur",
+ "Vishwanatha Badikana"
+ ]
+ },
+ "tsb-email-promoted-body": "ಓಯ್{{GENDER:$1|$1}},\n\nಅಭಿನಂದನೆಲು! ಈರ್ ಅನುಮಾದೊ ಮಲ್ತಿನೆನ್ ಯಾನ್ ತೂಯೆ {{SITENAME}} ಬುಕ್ಕೊ ಈರೆಗ್ ಪೂರ್ತಿ ಅನುವಾದೊ ಮಲ್ಪುನ ಹಕ್ಕ್‌ ಕೊರ್ಪೆ.\n\nಈಡೆಗ್ ಬಲೆ {{SITENAME}} ಮುಲ್ತುಡ್ದ್ ಇತ್ತೆ ಅನುವಾದೊ ದುಂಬರಿಪುಲೆ, ಬುಕ್ಕೊ ದಿನೋಲ:\n$2\n\nಸ್ವಾಗತೊ, ಬುಕ್ಕೊ ಈರೆಗ್ ಈರೆನ ಕಾನಿಕೆಗ್ ಸೊಲ್ಮೆಲು!\n\n{{GENDER:$3|$3}},\n{{SITENAME}} ಸಿಬಂದಿ",
+ "tsb-all-languages-button-label": "ಮಾಂತಾ ಬಾಸೆಲೆಡ್",
+ "tsb-search-requests": "ನಾಡ್‍ಪತ್ತ್‌ನೆದ ಪಲಿತಾಂಸೊಲು",
+ "tsb-accept-button-label": "ಒತ್ತೋನಿ",
+ "tsb-reject-button-label": "ತಿರಸ್ಕಾರ ಮಲ್ಪುಲೆ",
+ "tsb-accept-confirmation": "{{PLURAL:$1|User|ಸದಸ್ಯೆರ್}} ಒಪ್ಪಿಯೇರ್",
+ "translationstash": "ಸೊಲ್ಮೆಲೋ",
+ "translate-translationstash-skip-button-label": "ನನೊಂಜಿ ಪ್ರಯತ್ನ ಮಾಂಪಿ",
+ "tsb-limit-reached-title": "ಈರೆನ ಅನುವಾದಾಗ್ ಉಡಲ್ ದಿಂಜಿ ಸೊಲ್ಮೆಲೋ",
+ "tsb-create-user-page": "ಸರಳ ಬಳಕೆದಾರೆ ಪುಟ ರಚಿಸಾಂಡ್"
+}
diff --git a/Translate/i18n/sandbox/te.json b/Translate/i18n/sandbox/te.json
new file mode 100644
index 00000000..df16e4db
--- /dev/null
+++ b/Translate/i18n/sandbox/te.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Veeven"
+ ]
+ },
+ "tsb-filter-pending": "వేచివున్న అభ్యర్థనలు",
+ "tsb-reminder-title-generic": "తనిఖీ అయిన అనువాదకుడిగా మారడానికి మీ పరిచయాన్ని పూర్తిచేయండి"
+}
diff --git a/Translate/i18n/sandbox/th.json b/Translate/i18n/sandbox/th.json
new file mode 100644
index 00000000..3c8322f6
--- /dev/null
+++ b/Translate/i18n/sandbox/th.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aefgh39622"
+ ]
+ },
+ "tsb-all-languages-button-label": "ทุกภาษา",
+ "tsb-accept-button-label": "ยอมรับ",
+ "tsb-reject-button-label": "ปฏิเสธ",
+ "tsb-accept-all-button-label": "ยอมรับทั้งหมด",
+ "tsb-reject-all-button-label": "ปฏิเสธทั้งหมด",
+ "tsb-user-posted-a-comment": "ไม่ใช่ผู้แปล",
+ "tsb-translations-source": "ต้นฉบับ",
+ "tsb-translations-current": "การแปลที่มีอยู่",
+ "translationstash": "ยินดีต้อนรับ",
+ "translate-translationstash-welcome": "ยินดีต้อนรับ {{GENDER:$1|$1}} คุณเป็นผู้แปลใหม่",
+ "translate-translationstash-skip-button-label": "ลองอันอื่น",
+ "tsb-limit-reached-title": "ขอบคุณที่ร่วมแปล"
+}
diff --git a/Translate/i18n/sandbox/ti.json b/Translate/i18n/sandbox/ti.json
new file mode 100644
index 00000000..4279dad8
--- /dev/null
+++ b/Translate/i18n/sandbox/ti.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joanmp17"
+ ]
+ },
+ "tsb-email-promoted-subject": "ሕጂ ኣብ {{SITENAME}} ፍቓድ ተርጓሚ ኣሎካ",
+ "tsb-all-languages-button-label": "ኩሎም ቋንቋታት",
+ "tsb-user-posted-a-comment": "ተርጓሚ ኣይኮነን",
+ "translationstash": "እንቋዕ ብደሓን መጻእካ",
+ "translate-translationstash-welcome": "{{GENDER:$1|እንቋዕ ብደሓን መጻእካ|እንቋዕ ብደሓን መጻእኪ}}፣ $1። ሕጂ {{GENDER:$1|ተርጓሚ ኢኻ|ተርጓሚት ኢኺ}}"
+}
diff --git a/Translate/i18n/sandbox/tok.json b/Translate/i18n/sandbox/tok.json
new file mode 100644
index 00000000..329369ea
--- /dev/null
+++ b/Translate/i18n/sandbox/tok.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Robin van der Vliet"
+ ]
+ },
+ "translationstash": "kama pona"
+}
diff --git a/Translate/i18n/sandbox/tr.json b/Translate/i18n/sandbox/tr.json
new file mode 100644
index 00000000..a2eaaaff
--- /dev/null
+++ b/Translate/i18n/sandbox/tr.json
@@ -0,0 +1,54 @@
+{
+ "@metadata": {
+ "authors": [
+ "BaRaN6161 TURK",
+ "Hedda",
+ "SaldırganSincap"
+ ]
+ },
+ "managetranslatorsandbox": "Çevirmen deneme tahtasını yönet",
+ "tsb-filter-pending": "Bekleyen istekler",
+ "tsb-reminder-title-generic": "Çevirmen olmak için girişinizi tamamlayın",
+ "tsb-reminder-content-generic": "Merhaba $1,\n\n{{SITENAME}} sitesine kaydolduğunuz için teşekkür ederiz.\n\nTest çevirilerinizi tamamlarsanız, hizmetliler size kısa bir süre sonra tam çeviri erişimi verir.\n\nLütfen buraya gelin ve biraz daha çeviri yapın:\n$2\n\n$3,\n{{SITENAME}} personeli",
+ "tsb-reminder-sending": "Hatırlatma gönderiliyor...",
+ "tsb-reminder-sent": "{{PLURAL:$1|$1 hatırlatma gönderildi. Saat: $2.|$1 hatırlatma gönderildi. Sonuncunun saati: $2.}}",
+ "tsb-reminder-sent-new": "Hatırlatma gönderildi",
+ "tsb-reminder-failed": "Hatırlatıcı gönderilemedi",
+ "tsb-email-promoted-subject": "Artık {{SITENAME}} sitesinde çevirmensiniz",
+ "tsb-email-promoted-body": "Merhaba {{GENDER:$1|$1}},\n\nTebrikler! {{SITENAME}} sitesinde yaptığınız test çevirilerini kontrol ettim ve size tam çevirmen hakları verdim.\n\nŞimdi ve her gün çeviriye devam etmek için {{SITENAME}} sitesine gelin:\n$2\n\nHoş geldiniz, katkılarınız için teşekkür ederiz!\n\n{{GENDER:$3|$3}},\n{{SITENAME}} personeli",
+ "tsb-email-rejected-subject": "{{SITENAME}} için çevirmen olma başvurunuz reddedildi",
+ "tsb-email-rejected-body": "Merhaba {{GENDER:$1|$1}},\n\n{{SITENAME}} web sitesinde çevirmen olarak başvurduğunuz için teşekkür ederiz. Başvurunuzu reddettiğimi bildirdiğiniz için üzgünüm, çünkü çevirilerinizin kalitesi şartları karşılamıyor.\n\nBaşvurunuzun yanlışlıkla reddedildiğini düşünüyorsanız, lütfen {{SITENAME}} sitesinde tekrar çevirmen olarak başvurmayı deneyin. Buradan kaydolabilirsiniz:\n$2\n\n{{GENDER:$3|$3}},\n{{SITENAME}} personeli",
+ "tsb-request-count": "$1 istek",
+ "tsb-all-languages-button-label": "Tüm diller",
+ "tsb-search-requests": "Bekleyen istekleri ara",
+ "tsb-accept-button-label": "Kabul et",
+ "tsb-reject-button-label": "Reddet",
+ "tsb-selected-count": "$1 kullanıcı seçildi",
+ "tsb-older-requests": "$1 daha eski istek",
+ "tsb-accept-all-button-label": "Hepsini kabul et",
+ "tsb-reject-all-button-label": "Hepsini reddet",
+ "tsb-user-posted-a-comment": "Çevirmen değil",
+ "tsb-reminder-link-text": "E-posta hatırlatıcısı gönder",
+ "tsb-didnt-make-any-translations": "Bu kullanıcı herhangi bir çeviri yapmadı.",
+ "tsb-translations-source": "Kaynak",
+ "tsb-translations-user": "{{GENDER:$1|Kullanıcı}} çevirileri",
+ "tsb-translations-current": "Mevcut çeviriler",
+ "tsb-delete-userpage-summary": "Deneme tahtası kullanıcısının kullanıcı sayfasını silniyor",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Kullanıcı}} reddedildi",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Kullanıcı}} kabul edildi",
+ "translationstash": "Hoş geldiniz",
+ "translate-translationstash-welcome": "Hoş geldiniz {{GENDER:$1|$1}}, siz yeni bir çevirmensiniz",
+ "translate-translationstash-welcome-note": "Çeviri araçlarına aşina olun. Bazı mesajları çevirin ve en sevdiğiniz projelere katılmak için tam çevirmen haklarına sahip olun.",
+ "translate-translationstash-initialtranslation": "İlk çeviriniz",
+ "translate-translationstash-translations": "Tamamlanmış $1 çeviri",
+ "translate-translationstash-skip-button-label": "Başka bir tane dene",
+ "tsb-limit-reached-title": "Çevirileriniz için teşekkürler",
+ "tsb-limit-reached-body": "Yeni çevirmenler için çeviri sınırına ulaştınız.\nEkibimiz hesabınızı yakında doğrulayacak ve yeni sürüme geçirecek.\nO zaman sınırsız çeviri yapabilirsiniz.",
+ "tsb-no-requests-from-new-users": "Yeni kullanıcılardan istek yok",
+ "tsb-create-user-page": "Temel kullanıcı sayfası oluşturuldu",
+ "log-name-translatorsandbox": "Çeviri deneme tahtası günlüğü",
+ "log-description-translatorsandbox": "Çeviri sanal alanı kullanıcıları için bir işlem günlüğü",
+ "logentry-translatorsandbox-promoted": "$1, $3 kullanıcıya {{GENDER:$4|çeviri}} {{GENDER:$2|terfi etti}}",
+ "logentry-translatorsandbox-rejected": "$1, \"$3\" kullanıcıdan çevirmen olma isteğini {{GENDER:$2|reddetti}}",
+ "logentry-newusers-tsbpromoted": "$3 kullanıcı hesabı, deneme tahtasından yükselmeyle {{GENDER:$2|oluşturuldu}}"
+}
diff --git a/Translate/i18n/sandbox/tt-cyrl.json b/Translate/i18n/sandbox/tt-cyrl.json
new file mode 100644
index 00000000..2727d68e
--- /dev/null
+++ b/Translate/i18n/sandbox/tt-cyrl.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ерней",
+ "Ильнар"
+ ]
+ },
+ "managetranslatorsandbox": "Тәрҗемәче комчылыгы белән идарә итү",
+ "tsb-request-count": "$1 {{PLURAL:$1|сорату}}",
+ "tsb-all-languages-button-label": "Барлык телләр",
+ "tsb-accept-button-label": "Кабул итү",
+ "tsb-reject-button-label": "Кире кагу",
+ "tsb-selected-count": "{{PLURAL:$1|$1 кулланучы}} сайланган",
+ "tsb-older-requests": "$1 искерәк {{PLURAL:$1|сорату}}",
+ "tsb-accept-all-button-label": "Барысын да кабул итү",
+ "tsb-reject-all-button-label": "Барысын да кире кагу",
+ "tsb-user-posted-a-comment": "Тәрҗемәче түгел",
+ "tsb-translations-source": "Чыганак",
+ "tsb-translations-user": "{{GENDER:$1|Кулланучының}} тәрҗемәләре",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Кулланучы|Кулланучылар}} кире кагылды",
+ "tsb-accept-confirmation": "{{PLURAL:$1|кулланучы}} кабул ителгән",
+ "translationstash": "Рәхим итегез",
+ "translate-translationstash-welcome": "Рәхим итегез, {{GENDER:$1|$1}}, сез яңа тәрҗемәчесез",
+ "translate-translationstash-translations": "$1 тәмамланган {{PLURAL:$1|тәрҗемә}}"
+}
diff --git a/Translate/i18n/sandbox/tyv.json b/Translate/i18n/sandbox/tyv.json
new file mode 100644
index 00000000..c79802fb
--- /dev/null
+++ b/Translate/i18n/sandbox/tyv.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Agilight"
+ ]
+ },
+ "translationstash": "Кирип моорлаңар"
+}
diff --git a/Translate/i18n/sandbox/uk.json b/Translate/i18n/sandbox/uk.json
new file mode 100644
index 00000000..234f7b18
--- /dev/null
+++ b/Translate/i18n/sandbox/uk.json
@@ -0,0 +1,60 @@
+{
+ "@metadata": {
+ "authors": [
+ "Andriykopanytsia",
+ "BaRaN6161 TURK",
+ "Base",
+ "DDPAT",
+ "Ice bulldog",
+ "Movses",
+ "Piramidion",
+ "Vlad5250",
+ "Ата"
+ ]
+ },
+ "managetranslatorsandbox": "Керування пісочницею перекладача",
+ "tsb-filter-pending": "Запити в очікуванні",
+ "tsb-reminder-title-generic": "Завершіть своє уявлення, щоб стати перекладачем",
+ "tsb-reminder-content-generic": "Привіт, $1!\n\nДякуємо за реєстрацію у проєкті {{SITENAME}}. Якщо Ви завершите свої тестові\nпереклади, адміністратори зможуть скоро надати Вам повні права на переклад.\n\nБудь ласка, перейдіть і зробіть ще декілька перекладів тут:\n$2\n\n$3,\nкоманда {{SITENAME}}",
+ "tsb-reminder-sending": "Надсилання нагадування…",
+ "tsb-reminder-sent": "{{PLURAL:$1|Надіслано $1 нагадування. Час останнього: $2.|Надіслано $1 нагадування. Час останнього: $2.|Надіслано $1 нагадувань. Час останнього: $2.|1=Надіслано $1 нагадування. Час: $2.}}",
+ "tsb-reminder-sent-new": "Надіслано нагадування",
+ "tsb-reminder-failed": "Не вдалося надіслати нагадування",
+ "tsb-email-promoted-subject": "Тепер ви - перекладач на {{SITENAME}}",
+ "tsb-email-promoted-body": "Привіт {{GENDER:$1|$1}},\n\nВітаємо! Я перевірив тестові переклади, виконані вами на {{SITENAME}}, і надав вам повні права перекладача.\n\nЗаходьте на {{SITENAME}}, щоб продовжувати переклад нині і щодня:\n$2\n\nВітаємо вас у команді перекладачів і дякуємо вам за ваш внесок!\n\n{{GENDER:$3|$3}},\nКоманда {{SITENAME}}",
+ "tsb-email-rejected-subject": "Вашу заявку на перекладача на {{SITENAME}} відхилено",
+ "tsb-email-rejected-body": "Привіт {{GENDER:$1|$1}},\n\nДякуємо вам за намагання стати перекладачем на translator at {{SITENAME}}. На жаль, я з жалем повідомляю вас, що відхиляю вашу заявку, бо якість ваших перекладів не відповідає вимогам.\n\nЯкщо ви вважаєте, що вашу заявку було відхилено помилково, спробуйте подати заявку ще раз як перекладач на {{SITENAME}}. Ви можете зареєструватися тут:\n$2\n\n{{GENDER:$3|$3}},\nКоманда {{SITENAME}}",
+ "tsb-request-count": "$1 {{PLURAL:$1|запит|запити|запитів}}",
+ "tsb-all-languages-button-label": "Усі мови",
+ "tsb-search-requests": "Пошук запитів в очікуванні",
+ "tsb-accept-button-label": "Прийняти",
+ "tsb-reject-button-label": "Відмовитися",
+ "tsb-selected-count": "{{PLURAL:$1|$1 користувач вибраний|$1 користувачі вибрані|$1 користувачів вибрано}}",
+ "tsb-older-requests": "$1 {{PLURAL:$1|старший запит|старші запити|старших запитів}}",
+ "tsb-accept-all-button-label": "Прийняти всі",
+ "tsb-reject-all-button-label": "Відхилити всі",
+ "tsb-user-posted-a-comment": "Не перекладач",
+ "tsb-reminder-link-text": "Надсилати нагадування по електронній пошті",
+ "tsb-didnt-make-any-translations": "Цей користувач не здійснив жодного перекладу.",
+ "tsb-translations-source": "Джерело",
+ "tsb-translations-user": "Переклади {{GENDER:$1|користувача|користувачки}}",
+ "tsb-translations-current": "Існуючі переклади",
+ "tsb-delete-userpage-summary": "Видалення сторінки користувача з користувача пісочниці",
+ "tsb-reject-confirmation": "{{PLURAL:$1|Користувача|Користувачів}} відхилено",
+ "tsb-accept-confirmation": "{{PLURAL:$1|Користувача|Користувачів}} прийнято",
+ "translationstash": "Ласкаво просимо",
+ "translate-translationstash-welcome": "Вітаємо {{GENDER:$1|$1}}, ви - {{GENDER:$1|новий перекладач|нова перекладачка}}",
+ "translate-translationstash-welcome-note": "Ознайомитися з інструментами перекладу. Перекладіть деякі повідомлення і отримайте повні права перекладача для участі у ваших улюблених проектах.",
+ "translate-translationstash-initialtranslation": "Ваш початковий переклад",
+ "translate-translationstash-translations": "Завершено $1 {{PLURAL:$1|переклад|переклади|перекладів|перекладу}}",
+ "translate-translationstash-skip-button-label": "Спробуйте інший",
+ "tsb-limit-reached-title": "Дякую за ваші переклади",
+ "tsb-limit-reached-body": "Вами досягнута межа перекладу для нових перекладачів.\nНаша команда невдовзі перевірить і оновить ваш обліковий запис.\nПотім зможете перекладати без обмежень.",
+ "tsb-no-requests-from-new-users": "Немає запитів від нових користувачів",
+ "tsb-create-user-page": "Створено основну сторінку користувача",
+ "log-name-translatorsandbox": "Журнал пісочниці перекладу",
+ "log-description-translatorsandbox": "Журнал дій користувачів у пісочниці перекладу",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2|підвищив|підвищила}} $3 до {{GENDER:$4|перекладача|перекладачки}}",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2|відхилив|відхилила}} запит від «$3» стати перекладачем",
+ "logentry-newusers-tsbpromoted": "Обліковий запис користувача $3 був {{GENDER:$2| створений}} шляхом заохочення з пісочниці"
+}
diff --git a/Translate/i18n/sandbox/vi.json b/Translate/i18n/sandbox/vi.json
new file mode 100644
index 00000000..8084f779
--- /dev/null
+++ b/Translate/i18n/sandbox/vi.json
@@ -0,0 +1,54 @@
+{
+ "@metadata": {
+ "authors": [
+ "Minh Nguyen",
+ "NguoiDungKhongDinhDanh",
+ "Vinhtantran"
+ ]
+ },
+ "managetranslatorsandbox": "Quản lý chỗ thử biên dịch",
+ "tsb-filter-pending": "Yêu cầu đang chờ",
+ "tsb-reminder-title-generic": "Hoàn thành lời giới thiệu của bạn để trở thành một biên dịch viên",
+ "tsb-reminder-content-generic": "Xin chào $1,\n\nCảm ơn bạn đã tham gia {{SITENAME}}.\n\nSau khi bạn dịch các bản dịch kiểm tra, các bảo quản viên sẽ sớm cấp quyền biên dịch đầy đủ cho bạn.\n\nXin vui lòng ghé vào biên dịch thêm thông điệp:\n\n$2\n\n$3,\nBan quản lý {{SITENAME}}",
+ "tsb-reminder-sending": "Đang gửi lời nhắc nhở…",
+ "tsb-reminder-sent": "Đã gửi $1 lời nhắc nhở{{PLURAL:$1||, lần cuối cùng}} vào $2.",
+ "tsb-reminder-sent-new": "Đã gửi lời nhắc nhở",
+ "tsb-reminder-failed": "Thất bại khi gửi lời nhắc nhở",
+ "tsb-email-promoted-subject": "Bạn mới trở thành biên dịch viên tại {{SITENAME}}",
+ "tsb-email-promoted-body": "Xin chào {{GENDER:$1|$1}},\n\nChào mừng bạn đã trở thành biên dịch viên tại {{SITENAME}}! Tôi đã kiểm tra các bản dịch thử nghiệm của bạn và cấp quyền biên dịch cho bạn.\n\nHãy ghé vào {{SITENAME}} mỗi ngày để tiếp tục biên dịch:\n$2\n\nCảm ơn bạn vì những đóng góp của bạn!\n\n{{GENDER:$3}}$3,\nNhóm {{SITENAME}}",
+ "tsb-email-rejected-subject": "Đơn xin trở thành biên dịch viên tại {{SITENAME}} đã bị từ chối",
+ "tsb-email-rejected-body": "Xin chào {{GENDER:$1|$1}},\n\nCảm ơn bạn đã nộp đơn xin trở thành biên dịch viên tại {{SITENAME}}. Tôi rất tiếc phải thông báo cho bạn rằng tôi đã từ chối đơn xin của bạn vì các bản dịch của bạn không đáp ứng tiêu chuẩn chất lượng.\n\nNếu bạn nghĩ rằng bạn đã bị từ chối do nhầm lẫn, xin hãy lần nữa xin trở thành biên dịch viên tại {{SITENAME}}. Chỉ việc đi vào đây:\n$2\n\n{{GENDER:$3}}$3,\nNhóm {{SITENAME}}",
+ "tsb-request-count": "{{PLURAL:$1|Một yêu cầu|$1 yêu cầu}}",
+ "tsb-all-languages-button-label": "Tất cả các ngôn ngữ",
+ "tsb-search-requests": "Yêu cầu tìm kiếm đang chờ",
+ "tsb-accept-button-label": "Chấp nhận",
+ "tsb-reject-button-label": "Từ chối",
+ "tsb-selected-count": "$1 người dùng được chọn",
+ "tsb-older-requests": "$1 yêu cầu cũ hơn",
+ "tsb-accept-all-button-label": "Chấp nhận tất cả",
+ "tsb-reject-all-button-label": "Từ chối tất cả",
+ "tsb-user-posted-a-comment": "Không phải biên dịch viên",
+ "tsb-reminder-link-text": "Nhắc nhở qua thư điện tử",
+ "tsb-didnt-make-any-translations": "Người dùng này chưa dịch thông điệp nào.",
+ "tsb-translations-source": "Nguồn",
+ "tsb-translations-user": "Bản dịch của {{GENDER:$1}}người dùng",
+ "tsb-translations-current": "Bản dịch hiện có",
+ "tsb-delete-userpage-summary": "Đã xóa trang cá nhân của người dùng chỗ thử biên dịch",
+ "tsb-reject-confirmation": "Đã từ chối {{PLURAL:$1|người dùng|những người dùng}}",
+ "tsb-accept-confirmation": "Đã chấp nhận {{PLURAL:$1|người dùng|những người dùng}}",
+ "translationstash": "Hoan nghênh",
+ "translate-translationstash-welcome": "Chào mừng {{GENDER:$1}}$1 đã trở thành biên dịch viên mới",
+ "translate-translationstash-welcome-note": "Hãy quen thuộc với các công cụ biên dịch. Hãy dịch một số thông điệp và giành được quyền biên dịch viên đầy đủ để tham gia các dự án ưa thích của bạn.",
+ "translate-translationstash-initialtranslation": "Bản dịch đầu tiên của bạn",
+ "translate-translationstash-translations": "$1 bản dịch hoàn thành",
+ "translate-translationstash-skip-button-label": "Thử cái khác",
+ "tsb-limit-reached-title": "Cảm ơn bạn đã đóng góp các bản dịch",
+ "tsb-limit-reached-body": "Bạn đã đạt đến giới hạn bản dịch cho biên dịch viên mới.\nChúng tôi sẽ kiểm tra và nâng cấp tài khoản của bạn không lâu.\nSau đó bạn sẽ có thể biên dịch thoải mái không có giới hạn.",
+ "tsb-no-requests-from-new-users": "Không có yêu cầu từ người dùng mới",
+ "tsb-create-user-page": "Đã tạo trang cá nhân cơ bản",
+ "log-name-translatorsandbox": "Nhật trình chỗ thử biên dịch",
+ "log-description-translatorsandbox": "Các tác vụ có liên quan đến người dùng chỗ thử biên dịch",
+ "logentry-translatorsandbox-promoted": "$1 {{GENDER:$2}}đã cấp quyền {{GENDER:$4}}biên dịch viên cho $3",
+ "logentry-translatorsandbox-rejected": "$1 {{GENDER:$2}}đã từ chối yêu cầu cấp quyền biên dịch viên của “$3”",
+ "logentry-newusers-tsbpromoted": "Tài khoản người dùng $3 đã được {{GENDER:$2}}tạo ra cho người dùng chỗ thử biên dịch"
+}
diff --git a/Translate/i18n/sandbox/wa.json b/Translate/i18n/sandbox/wa.json
new file mode 100644
index 00000000..66ccbe7d
--- /dev/null
+++ b/Translate/i18n/sandbox/wa.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Srtxg"
+ ]
+ },
+ "tsb-all-languages-button-label": "Tos les lingaedjes"
+}
diff --git a/Translate/i18n/sandbox/yi.json b/Translate/i18n/sandbox/yi.json
new file mode 100644
index 00000000..d6583240
--- /dev/null
+++ b/Translate/i18n/sandbox/yi.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "פוילישער"
+ ]
+ },
+ "tsb-all-languages-button-label": "אלע שפראַכן",
+ "tsb-search-requests": "זוך בקשות",
+ "tsb-accept-button-label": "אננעמען",
+ "tsb-reject-button-label": "אפווארפֿן",
+ "tsb-user-posted-a-comment": "נישט קיין איבערזעצער",
+ "tsb-translations-source": "מקור",
+ "tsb-translations-user": "{{GENDER:$1|באַניצער איבערזעצונגען}}",
+ "translationstash": "ברוך הבא!",
+ "translate-translationstash-welcome": "ברוך הבא $1, איר זענט א {{GENDER:$1|נײַער איבערזעצער|א נײַע איבערזעצערין}}"
+}
diff --git a/Translate/i18n/sandbox/yo.json b/Translate/i18n/sandbox/yo.json
new file mode 100644
index 00000000..87bd3648
--- /dev/null
+++ b/Translate/i18n/sandbox/yo.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Demmy"
+ ]
+ },
+ "translationstash": "Kú àbò"
+}
diff --git a/Translate/i18n/sandbox/zh-hans.json b/Translate/i18n/sandbox/zh-hans.json
new file mode 100644
index 00000000..0a93e26c
--- /dev/null
+++ b/Translate/i18n/sandbox/zh-hans.json
@@ -0,0 +1,62 @@
+{
+ "@metadata": {
+ "authors": [
+ "A Chinese Wikipedian",
+ "Diskdance",
+ "Ericliu1912",
+ "Hzy980512",
+ "Liuxinyu970226",
+ "Qiyue2001",
+ "Shizhao",
+ "Tranve",
+ "Xiaomingyan",
+ "Yfdyh000",
+ "铁桶"
+ ]
+ },
+ "managetranslatorsandbox": "管理译者沙盒",
+ "tsb-filter-pending": "等待的请求",
+ "tsb-reminder-title-generic": "填写您的自我介绍,成为一名译者",
+ "tsb-reminder-content-generic": "您好 $1,\n\n感谢您注册{{SITENAME}}。\n\n如果您完成您的测试翻译,我们的管理员将尽快授予您完整的翻译访问权。\n\n来这里做些翻译吧:\n$2\n\n$3,\n{{SITENAME}}员工",
+ "tsb-reminder-sending": "正在发送提醒...",
+ "tsb-reminder-sent": "{{PLURAL:$1|已发送$1份提醒。时间:$2。|已发送$1份提醒。最近一次时间:$2。}}",
+ "tsb-reminder-sent-new": "发送提醒",
+ "tsb-reminder-failed": "发送提醒失败",
+ "tsb-email-promoted-subject": "您现在是一名{{SITENAME}}的译者了",
+ "tsb-email-promoted-body": "嗨,{{GENDER:$1|$1}}:\n\n祝贺您!我检查了您在{{SITENAME}}的试验翻译,决定授予您完整的译者权限。\n\n现在以及今后的每一天都来{{SITENAME}}继续翻译吧:\n$2\n\n我们欢迎您加入译者队伍,感谢您的贡献!\n\n{{GENDER:$3|$3}},\n{{SITENAME}}工作人员",
+ "tsb-email-rejected-subject": "您在{{SITENAME}}的译者请求被拒绝",
+ "tsb-email-rejected-body": "嗨,{{GENDER:$1|$1}}:\n\n感谢您在{{SITENAME}}申请成为译者。但我不得不遗憾地通知您,我拒绝了您的申请,因为您的的译文质量不符合要求。\n\n如果您认为您的申请是被错误地拒绝了,请尝试在{{SITENAME}}重新申请成为译者。您可以在这里登记:\n$2\n\n{{GENDER:$3|$3}},\n{{SITENAME}}工作人员",
+ "tsb-request-count": "$1条{{PLURAL:$1|申请}}",
+ "tsb-all-languages-button-label": "所有语言",
+ "tsb-search-requests": "搜索待处理的请求",
+ "tsb-accept-button-label": "接受",
+ "tsb-reject-button-label": "拒绝",
+ "tsb-selected-count": "{{PLURAL:$1|$1位已选定用户}}",
+ "tsb-older-requests": "$1个旧有{{PLURAL:$1|申请}}",
+ "tsb-accept-all-button-label": "接受所有",
+ "tsb-reject-all-button-label": "拒绝所有",
+ "tsb-user-posted-a-comment": "不是一位译者",
+ "tsb-reminder-link-text": "发送电子邮件提醒",
+ "tsb-didnt-make-any-translations": "这位用户尚未作出任何翻译。",
+ "tsb-translations-source": "来源",
+ "tsb-translations-user": "{{GENDER:$1|用户}}翻译",
+ "tsb-translations-current": "现有翻译",
+ "tsb-delete-userpage-summary": "删除沙盒用户的用户页面",
+ "tsb-reject-confirmation": "{{PLURAL:$1|用户}}已被拒绝",
+ "tsb-accept-confirmation": "{{PLURAL:$1|用户}}已被接受",
+ "translationstash": "欢迎",
+ "translate-translationstash-welcome": "欢迎您{{GENDER:$1|$1}},您已成为新的译者",
+ "translate-translationstash-welcome-note": "逐渐熟悉翻译工具。翻译一些信息,获得完整的译者权限去参与你喜欢的项目。",
+ "translate-translationstash-initialtranslation": "您的初始翻译",
+ "translate-translationstash-translations": "$1完成了翻译",
+ "translate-translationstash-skip-button-label": "尝试其他",
+ "tsb-limit-reached-title": "感谢您的翻译",
+ "tsb-limit-reached-body": "您已达到新进翻译人员翻译额度之上限。\n我们将尽快审核并升级您的账户,届时您便可不受限制地翻译。",
+ "tsb-no-requests-from-new-users": "没有新用户请求",
+ "tsb-create-user-page": "创建了基础用户页",
+ "log-name-translatorsandbox": "翻译沙盒日志",
+ "log-description-translatorsandbox": "翻译沙盒用户的操作日志",
+ "logentry-translatorsandbox-promoted": "$1将$3{{GENDER:$2|提拔}}为{{GENDER:$4|译者}}",
+ "logentry-translatorsandbox-rejected": "$1{{GENDER:$2|拒绝了}}来自“$3”的成为译者请求",
+ "logentry-newusers-tsbpromoted": "用户账号$3已通过沙盒提拔{{GENDER:$2|创建}}"
+}
diff --git a/Translate/i18n/sandbox/zh-hant.json b/Translate/i18n/sandbox/zh-hant.json
new file mode 100644
index 00000000..b44a5aef
--- /dev/null
+++ b/Translate/i18n/sandbox/zh-hant.json
@@ -0,0 +1,60 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cwlin0416",
+ "Ericliu1912",
+ "Kly",
+ "LNDDYL",
+ "Liuxinyu970226",
+ "Sean",
+ "Simon Shek",
+ "Xiplus",
+ "和平奮鬥救地球"
+ ]
+ },
+ "managetranslatorsandbox": "管理翻譯人員沙盒",
+ "tsb-filter-pending": "等候的請求",
+ "tsb-reminder-title-generic": "成為翻譯人員之前,請先填寫您的自我介紹",
+ "tsb-reminder-content-generic": "您好 $1,\n\n感謝您註冊 {{SITENAME}}。\n\n在您完成翻譯測驗後,管理員會儘快授予您完整的翻譯權限。\n\n請到下列網址進行更多的翻譯工作: \n$2\n\n$3,\n{{SITENAME}} 工作團隊",
+ "tsb-reminder-sending": "傳送備忘通知中...",
+ "tsb-reminder-sent": "{{PLURAL:$1|已傳送 $1 條提醒,時間於 $2。|已傳送 $1 條提醒,最後一次時間於 $2}}",
+ "tsb-reminder-sent-new": "傳送備忘通知",
+ "tsb-reminder-failed": "傳送備忘通知失敗",
+ "tsb-email-promoted-subject": "您已成為{{SITENAME}}的翻譯人員",
+ "tsb-email-promoted-body": "您好 {{GENDER:$1|$1}},\n\n恭喜您!我已核可您在{{SITENAME}}所做的翻譯測驗並授權您所有翻譯人員的權限。\n\n您可至{{SITENAME}}繼續翻譯工作:\n$2\n\n歡迎您的加入並感謝您所做的貢獻!\n\n{{GENDER:$3|$3}},\n{{SITENAME}}工作團隊",
+ "tsb-email-rejected-subject": "您於{{SITENAME}}翻譯人員申請被拒絕",
+ "tsb-email-rejected-body": "您好 {{GENDER:$1|$1}},\n\n感謝您申請成為{{SITENAME}}的翻譯人員,很抱歉通知您我們已拒絕您的申請,因為您的翻譯水準未達我們所需的標準。\n\n若您對申請的結果有疑問,請於{{SITENAME}}再申請翻譯人員一次。 您可於此處註冊:\n$2\n\n{{GENDER:$3|$3}},\n{{SITENAME}}工作團隊",
+ "tsb-request-count": "$1 筆請求",
+ "tsb-all-languages-button-label": "所有語言",
+ "tsb-search-requests": "搜尋等候的請求",
+ "tsb-accept-button-label": "接受",
+ "tsb-reject-button-label": "拒絕",
+ "tsb-selected-count": "已選擇 $1 位使用者",
+ "tsb-older-requests": "$1 筆先前的請求",
+ "tsb-accept-all-button-label": "接受所有",
+ "tsb-reject-all-button-label": "拒絕所有",
+ "tsb-user-posted-a-comment": "非翻譯人員",
+ "tsb-reminder-link-text": "傳送電子郵件備忘通知",
+ "tsb-didnt-make-any-translations": "此使用者尚未做過任何翻譯。",
+ "tsb-translations-source": "原始碼",
+ "tsb-translations-user": "{{GENDER:$1|使用者}}翻譯",
+ "tsb-translations-current": "現有翻譯",
+ "tsb-delete-userpage-summary": "刪除沙盒使用者中的使用者頁面",
+ "tsb-reject-confirmation": "{{PLURAL:$1|使用者|使用者}}已拒絕",
+ "tsb-accept-confirmation": "{{PLURAL:$1|使用者|使用者}}已接受",
+ "translationstash": "歡迎光臨",
+ "translate-translationstash-welcome": "歡迎光臨 {{GENDER:$1|$1}},您是一名新進的翻譯人員",
+ "translate-translationstash-welcome-note": "為了要熟悉翻譯工具,請先試著翻譯部份訊息,再取得完整的翻譯人員權限以加入您想翻譯的專案。",
+ "translate-translationstash-initialtranslation": "您的第一次翻譯",
+ "translate-translationstash-translations": "已完成 $1 筆翻譯",
+ "translate-translationstash-skip-button-label": "嘗試其他",
+ "tsb-limit-reached-title": "感謝您的翻譯",
+ "tsb-limit-reached-body": "您已達到新進翻譯人員翻譯額度之上限。\n我們將儘快審核並升級您的帳號,屆時您便可不受限制地翻譯。",
+ "tsb-no-requests-from-new-users": "沒有來自新使用者的請求",
+ "tsb-create-user-page": "已建立的基本使用者頁面",
+ "log-name-translatorsandbox": "翻譯沙盒日誌",
+ "log-description-translatorsandbox": "翻譯沙盒使用者的工作日誌",
+ "logentry-translatorsandbox-promoted": "$1{{GENDER:$2|授權}}$3成為{{GENDER:$4|翻譯人員}}",
+ "logentry-translatorsandbox-rejected": "$1{{GENDER:$2|拒絕}}來自「$3」申請成為翻譯人員的請求",
+ "logentry-newusers-tsbpromoted": "使用者帳號 $3 已{{GENDER:$2|建立}},由沙盒所授權"
+}
diff --git a/Translate/i18n/search/af.json b/Translate/i18n/search/af.json
new file mode 100644
index 00000000..53cdd60e
--- /dev/null
+++ b/Translate/i18n/search/af.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fwolff"
+ ]
+ },
+ "tux-sst-facet-language": "Tale"
+}
diff --git a/Translate/i18n/search/ar.json b/Translate/i18n/search/ar.json
new file mode 100644
index 00000000..4a8d68ed
--- /dev/null
+++ b/Translate/i18n/search/ar.json
@@ -0,0 +1,36 @@
+{
+ "@metadata": {
+ "authors": [
+ "FiberAhmed",
+ "Meno25",
+ "أَحمد",
+ "ديفيد",
+ "محمد أحمد عبد الفتاح"
+ ]
+ },
+ "searchtranslations": "ابحث في الترجمات",
+ "tux-sst-edit": "عدل الترجمة",
+ "tux-sst-view-foreign": "اعرض في $1",
+ "tux-sst-search": "ابحث",
+ "tux-sst-search-ph": "ابحث في الترجمات",
+ "tux-sst-count": "{{PLURAL:$1|نتيجة واحدة عُثِر عليها|$1 نتائج عُثِر عليهم}}",
+ "tux-sst-facet-language": "اللغات",
+ "tux-sst-facet-group": "مجموعات الرسائل",
+ "tux-sst-nosolr-title": "البحث غير متوفر",
+ "tux-sst-nosolr-body": "هذا الويكي لا يوفر خدمة البحث في الترجمات.",
+ "tux-sst-solr-offline-title": "البحث غير متوفر",
+ "tux-sst-solr-offline-body": "خدمة البحث غير متوفرة مؤقتا.",
+ "tux-sst-next": "التالي »",
+ "tux-sst-prev": "« السابق",
+ "tux-sst-default": "الترجمات",
+ "tux-sst-translated": "الترجمات من $1",
+ "tux-sst-untranslated": "لا ترجمات من $1",
+ "tux-sst-outdated": "الترجمات غير المحدثة من $1",
+ "tux-sst-ellipsis-untranslated": "لا ترجمات",
+ "tux-sst-ellipsis-outdated": "ترجمات غير محدثة",
+ "tux-sst-link-all-match": "تتطلب كل كلمات البحث.",
+ "tux-sst-match-message": "إظهار الترجمات التي تطابق أي من كلمات البحث. $1",
+ "tux-sst-case-sensitive": "مراعاة حالة الأحرف",
+ "tux-sst-error-offset": "لا يمكن عرض المزيد من نتائج البحث؛ يُرجَى تضييق بحثك.",
+ "tux-sst-error-language": "لا يمكن استخدام هذه اللغة مع هذا النوع من البحث."
+}
diff --git a/Translate/i18n/search/ary.json b/Translate/i18n/search/ary.json
new file mode 100644
index 00000000..3fcdeec1
--- /dev/null
+++ b/Translate/i18n/search/ary.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ideophagous"
+ ]
+ },
+ "searchtranslations": "قلب ف طّرجامات",
+ "tux-sst-edit": "بدّل طّرجامة",
+ "tux-sst-view-foreign": "شوف ف $1",
+ "tux-sst-search": "قلّب",
+ "tux-sst-search-ph": "قلب ف طّرجامات",
+ "tux-sst-count": "{{PLURAL:$1|نتيجة وحدة لي تّلقات|$1 نتائج لي تّلقاو}}",
+ "tux-sst-facet-language": "لوغات",
+ "tux-sst-facet-group": "ڭروپات د لميساجات",
+ "tux-sst-nosolr-title": "لبحت مامتوفّرش",
+ "tux-sst-nosolr-body": "هاد لويكي ماعندهاش سربيس ديال لبحت ف طّرجامات",
+ "tux-sst-solr-offline-title": "لبحت مامتوفّرش",
+ "tux-sst-solr-offline-body": "سّربيس د لبحت مامتوفّرش مؤقتاً",
+ "tux-sst-next": "جّاي",
+ "tux-sst-prev": "لفايت",
+ "tux-sst-default": "طرجامات",
+ "tux-sst-translated": "طرجامات من $1",
+ "tux-sst-untranslated": "تا طرجامة من $1",
+ "tux-sst-outdated": "طرجامة متقادمين د $1",
+ "tux-sst-ellipsis-untranslated": "تا طرجامة",
+ "tux-sst-ellipsis-outdated": "طرجامات متقادمين",
+ "tux-sst-link-all-match": "فرض جميع لكلمات د لبحت",
+ "tux-sst-match-message": "تبيان جميع طّرجامات لي كيطابقو لكلمات د لبحت. $1",
+ "tux-sst-case-sensitive": "حضي معا لمينيسكيل/لماجيسكيل",
+ "tux-sst-error-offset": "تا نتايج د لبحت ما يقدرو يزيد يتعرضو. عافاك ضيّق لبحت ديالك.",
+ "tux-sst-error-language": "هاد لّوغة مايمكنش ليها تّخدم ب هاد نّوع د لبحت."
+}
diff --git a/Translate/i18n/search/as.json b/Translate/i18n/search/as.json
new file mode 100644
index 00000000..5d943e15
--- /dev/null
+++ b/Translate/i18n/search/as.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dibya Dutta"
+ ]
+ },
+ "tux-sst-facet-group": "বাৰ্তা গোট:"
+}
diff --git a/Translate/i18n/search/ast.json b/Translate/i18n/search/ast.json
new file mode 100644
index 00000000..73f1a223
--- /dev/null
+++ b/Translate/i18n/search/ast.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Xuacu"
+ ]
+ },
+ "searchtranslations": "Guetar nes traducciones",
+ "tux-sst-edit": "Editar traducción",
+ "tux-sst-view-foreign": "Ver en $1",
+ "tux-sst-search": "Guetar",
+ "tux-sst-search-ph": "Guetar nes traducciones",
+ "tux-sst-count": "{{PLURAL:$1|Alcontrose un resultáu|Alcontráronse $1 resultaos}}",
+ "tux-sst-facet-language": "Llingües",
+ "tux-sst-facet-group": "Grupos de mensaxes",
+ "tux-sst-nosolr-title": "La gueta nun ta disponible",
+ "tux-sst-nosolr-body": "Esta wiki nun tien un serviciu de gueta de traducciones.",
+ "tux-sst-solr-offline-title": "La gueta nun ta disponible",
+ "tux-sst-solr-offline-body": "El serviciu de gueta nun ta disponible temporalmente.",
+ "tux-sst-next": "Siguiente ›",
+ "tux-sst-prev": "‹ Anterior",
+ "tux-sst-default": "Traducciones",
+ "tux-sst-translated": "Traducciones del $1",
+ "tux-sst-untranslated": "Nun hai traducción del $1",
+ "tux-sst-outdated": "Traducciones anticuaes del $1",
+ "tux-sst-ellipsis-untranslated": "Sin traducción",
+ "tux-sst-ellipsis-outdated": "Traducciones anticuaes",
+ "tux-sst-link-all-match": "Riquir toles palabres buscaes.",
+ "tux-sst-match-message": "Amosar les traducciones que casen con cualesquiera de les palabres buscaes. $1",
+ "tux-sst-case-sensitive": "Sensible a mayúscules",
+ "tux-sst-error-offset": "Nun puen amosase más resultaos de la gueta. Tienes d'afinar la gueta.",
+ "tux-sst-error-language": "Esti idioma nun pue utilizase con esti tipu de gueta."
+}
diff --git a/Translate/i18n/search/atj.json b/Translate/i18n/search/atj.json
new file mode 100644
index 00000000..fd45c786
--- /dev/null
+++ b/Translate/i18n/search/atj.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Benoit Rochon"
+ ]
+ },
+ "tux-sst-search": "Nantona"
+}
diff --git a/Translate/i18n/search/az.json b/Translate/i18n/search/az.json
new file mode 100644
index 00000000..ec7f870f
--- /dev/null
+++ b/Translate/i18n/search/az.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Khan27",
+ "Şeyx Şamil"
+ ]
+ },
+ "searchtranslations": "Tərcümələri axtar",
+ "tux-sst-edit": "Tərcümələri redaktə et",
+ "tux-sst-search": "Axtar",
+ "tux-sst-search-ph": "Tərcümələri axtar",
+ "tux-sst-count": "{{PLURAL:$1|Bir nəticə tapıldı|$1 nəticə tapıldı}}",
+ "tux-sst-facet-language": "Dillər",
+ "tux-sst-facet-group": "Mesaj qrupları",
+ "tux-sst-nosolr-title": "Axtarış mümkün deyil",
+ "tux-sst-nosolr-body": "Bu viki üçün tərcümə axtarış sistemi yoxdur.",
+ "tux-sst-default": "Tərcümələr",
+ "tux-sst-translated": "$1 dilindən tərcümələr",
+ "tux-sst-untranslated": "$1 dilindən tərcümə yoxdur",
+ "tux-sst-ellipsis-untranslated": "Tərcümə yoxdur",
+ "tux-sst-ellipsis-outdated": "Köhnəlmiş tərcümələr"
+}
diff --git a/Translate/i18n/search/azb.json b/Translate/i18n/search/azb.json
new file mode 100644
index 00000000..7c475e46
--- /dev/null
+++ b/Translate/i18n/search/azb.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mousa"
+ ]
+ },
+ "tux-sst-edit": "چئویرمه‌نی دَییشدیر",
+ "tux-sst-search-ph": "چئویرمه‌لر آختاریشی",
+ "tux-sst-count": "{{PLURAL:$1|0=هئچ سونوج تاپیلمادی|بیر سونوج تاپیلدی|$1 سونوج تاپیلدی}}",
+ "tux-sst-facet-language": "دیل‌لر",
+ "tux-sst-facet-group": "مئساژ قروپلاری"
+}
diff --git a/Translate/i18n/search/be-tarask.json b/Translate/i18n/search/be-tarask.json
new file mode 100644
index 00000000..56b20af5
--- /dev/null
+++ b/Translate/i18n/search/be-tarask.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Renessaince",
+ "Wizardist"
+ ]
+ },
+ "searchtranslations": "Пошук перакладаў",
+ "tux-sst-edit": "Зьмяніць пераклад",
+ "tux-sst-search": "Шукаць",
+ "tux-sst-search-ph": "Пошук перакладаў",
+ "tux-sst-count": "{{PLURAL:$1|Знойдзены $1 вынік|Знойдзена $1 вынікі|Знойдзена $1 вынікаў}}",
+ "tux-sst-facet-language": "Мовы",
+ "tux-sst-facet-group": "Групы паведамленьняў",
+ "tux-sst-nosolr-title": "Пошук недаступны",
+ "tux-sst-nosolr-body": "Гэтая вікі ня мае службы пошуку перакладаў.",
+ "tux-sst-solr-offline-title": "Пошук недаступны",
+ "tux-sst-solr-offline-body": "Служба пошуку часова недаступная.",
+ "tux-sst-next": "Наступныя ›",
+ "tux-sst-prev": "‹ Папярэднія"
+}
diff --git a/Translate/i18n/search/be.json b/Translate/i18n/search/be.json
new file mode 100644
index 00000000..397ee46d
--- /dev/null
+++ b/Translate/i18n/search/be.json
@@ -0,0 +1,33 @@
+{
+ "@metadata": {
+ "authors": [
+ "Artsiom91",
+ "Chadyka"
+ ]
+ },
+ "searchtranslations": "Пошук перакладаў",
+ "tux-sst-edit": "Змяніць пераклад",
+ "tux-sst-view-foreign": "Глядзець на $1",
+ "tux-sst-search": "Пошук",
+ "tux-sst-search-ph": "Пошук перакладаў",
+ "tux-sst-count": "{{PLURAL:$1|Знойдзены $1 вынік|Знойдзена $1 вынікі|Знойдзена $1 вынікаў}}",
+ "tux-sst-facet-language": "Мовы",
+ "tux-sst-facet-group": "Групы паведамленняў",
+ "tux-sst-nosolr-title": "Пошук недаступны",
+ "tux-sst-nosolr-body": "Гэтая вікі не мае службы пошуку перакладаў.",
+ "tux-sst-solr-offline-title": "Пошук недаступны",
+ "tux-sst-solr-offline-body": "Служба пошуку часова недаступная.",
+ "tux-sst-next": "Наступныя ›",
+ "tux-sst-prev": "‹ Папярэднія",
+ "tux-sst-default": "Пераклады",
+ "tux-sst-translated": "Пераклады з $1",
+ "tux-sst-untranslated": "Няма перакладаў з $1",
+ "tux-sst-outdated": "Састарэлыя пераклады з $1",
+ "tux-sst-ellipsis-untranslated": "Няма перакладу",
+ "tux-sst-ellipsis-outdated": "Састарэлыя пераклады",
+ "tux-sst-link-all-match": "Патрабаваць усе словы для пошуку.",
+ "tux-sst-match-message": "Паказваюцца пераклады, якія адпавядаюць любому з пошукавых слоў. $1",
+ "tux-sst-case-sensitive": "З улікам рэгістра",
+ "tux-sst-error-offset": "Немагчыма паказаць больш вынікаў пошуку. Калі ласка, звузіце пошук.",
+ "tux-sst-error-language": "Гэтую мову нельга выкарыстоўваць з такім гатункам пошуку."
+}
diff --git a/Translate/i18n/search/bg.json b/Translate/i18n/search/bg.json
new file mode 100644
index 00000000..6767ea07
--- /dev/null
+++ b/Translate/i18n/search/bg.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "DCLXVI",
+ "StanProg",
+ "Vlad5250"
+ ]
+ },
+ "searchtranslations": "Търсене на преводи",
+ "tux-sst-edit": "Редактиране на превода",
+ "tux-sst-search": "Търсене",
+ "tux-sst-search-ph": "Търсене на преводи",
+ "tux-sst-facet-language": "Езици",
+ "tux-sst-facet-group": "Групи съобщения",
+ "tux-sst-solr-offline-body": "Услугата за търсене е временно недостъпна.",
+ "tux-sst-next": "Следващи ›",
+ "tux-sst-prev": "‹ Предишни",
+ "tux-sst-default": "Преводи",
+ "tux-sst-translated": "Преводи от $1",
+ "tux-sst-untranslated": "Без превод от $1",
+ "tux-sst-outdated": "Неактуални преводи от $1",
+ "tux-sst-ellipsis-outdated": "Неактуални преводи",
+ "tux-sst-case-sensitive": "Чувствително към регистъра на буквите",
+ "tux-sst-error-offset": "Не могат да бъдат показани повече резултати. Търсете по-конкретно.",
+ "tux-sst-error-language": "Този език не може да се използва за такъв вид търсене."
+}
diff --git a/Translate/i18n/search/bjn.json b/Translate/i18n/search/bjn.json
new file mode 100644
index 00000000..a41cc23e
--- /dev/null
+++ b/Translate/i18n/search/bjn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ezagren"
+ ]
+ },
+ "searchtranslations": "Gagai tarjamahan"
+}
diff --git a/Translate/i18n/search/blk.json b/Translate/i18n/search/blk.json
new file mode 100644
index 00000000..686d1f18
--- /dev/null
+++ b/Translate/i18n/search/blk.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "咽頭べさ"
+ ]
+ },
+ "tux-sst-default": "ဘာႏသာႏပြန်ႏဖုံႏ",
+ "tux-sst-untranslated": "$1 ဘာႏသာႏပြန်ႏဖိုင်ႏခါꩻအဝ်ႏတဝ်း",
+ "tux-sst-ellipsis-untranslated": "ဘာႏသာႏပြန်ႏဖိုင်ႏအဝ်ႏတဝ်း"
+}
diff --git a/Translate/i18n/search/bn.json b/Translate/i18n/search/bn.json
new file mode 100644
index 00000000..a876ea77
--- /dev/null
+++ b/Translate/i18n/search/bn.json
@@ -0,0 +1,36 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aftab1995",
+ "Aftabuzzaman",
+ "Nasir8891",
+ "আজিজ",
+ "আফতাবুজ্জামান"
+ ]
+ },
+ "searchtranslations": "অনুবাদ অনুসন্ধান",
+ "tux-sst-edit": "অনুবাদ সম্পাদনা",
+ "tux-sst-view-foreign": "$1-এ দেখুন",
+ "tux-sst-search": "অনুসন্ধান",
+ "tux-sst-search-ph": "অনুবাদ অনুসন্ধান",
+ "tux-sst-count": "{{PLURAL:$1|একটি ফলাফল পাওয়া গেছে|$1টি ফলাফল পাওয়া গেছে}}",
+ "tux-sst-facet-language": "ভাষাসমূহ",
+ "tux-sst-facet-group": "বার্তা সংকলন",
+ "tux-sst-nosolr-title": "অনুসন্ধান সম্ভব নয়",
+ "tux-sst-nosolr-body": "এই উইকিতে অনুবাদ অনুসন্ধান সক্রিয় নেই।",
+ "tux-sst-solr-offline-title": "অনুসন্ধান সক্রিয় নেই",
+ "tux-sst-solr-offline-body": "অনুসন্ধান পরিষেবাটি সাময়িকভাবে অনুপলব্ধ।",
+ "tux-sst-next": "পরবর্তী ›",
+ "tux-sst-prev": "‹ পূর্ববর্তী",
+ "tux-sst-default": "অনুবাদসমূহ",
+ "tux-sst-translated": "$1 থেকে অনুবাদ",
+ "tux-sst-untranslated": "$1 থেকে কোন অনুবাদ নেই",
+ "tux-sst-outdated": "$1 থেকে পুরাতন অনুবাদ",
+ "tux-sst-ellipsis-untranslated": "কোন অনুবাদ নেই",
+ "tux-sst-ellipsis-outdated": "পুরাতন অনুবাদ",
+ "tux-sst-link-all-match": "সমস্ত অনুসন্ধান শব্দ প্রয়োজন।",
+ "tux-sst-match-message": "যে কোনও অনুসন্ধান শব্দের সাথে মেলে এমন অনুবাদ দেখানো হচ্ছে। $1",
+ "tux-sst-case-sensitive": "অক্ষর সংবেদনশীল",
+ "tux-sst-error-offset": "আর কোন অনুসন্ধান ফলাফল দেখানো যাবে না। আপনার অনুসন্ধান সংকীর্ণ করুন।",
+ "tux-sst-error-language": "এই ধরনের অনুসন্ধানে এই ভাষা ব্যবহার করা যাবে না।"
+}
diff --git a/Translate/i18n/search/br.json b/Translate/i18n/search/br.json
new file mode 100644
index 00000000..9e2ac267
--- /dev/null
+++ b/Translate/i18n/search/br.json
@@ -0,0 +1,34 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fohanno",
+ "Fulup",
+ "Huñvreüs"
+ ]
+ },
+ "searchtranslations": "Klask troidigezhioù",
+ "tux-sst-edit": "Kemmañ an droidigezh",
+ "tux-sst-view-foreign": "Gwelet war $1",
+ "tux-sst-search": "Klask",
+ "tux-sst-search-ph": "Klask troidigezhioù",
+ "tux-sst-count": "{{PLURAL:$1|Un disoc'h kavet|$1 disoc'h kavet}}",
+ "tux-sst-facet-language": "Yezhoù",
+ "tux-sst-facet-group": "Strolladoù kemennadennoù",
+ "tux-sst-nosolr-title": "Ne c'haller ket ober enklaskoù",
+ "tux-sst-nosolr-body": "N'eus servij ebet war ar wiki-mañ evit klask troidigezhioù.",
+ "tux-sst-solr-offline-title": "Ne c'haller ket ober enklaskoù",
+ "tux-sst-solr-offline-body": "Evit ar poent ne c'haller ket ober gant ar servij klask.",
+ "tux-sst-next": "War-lerc'h›",
+ "tux-sst-prev": "‹ Kent",
+ "tux-sst-default": "Troidigezhioù",
+ "tux-sst-translated": "Troidigezhioù diwar $1",
+ "tux-sst-untranslated": "Troidigezh ebet diwar $1",
+ "tux-sst-outdated": "Troidigezhioù dispredet eus $1",
+ "tux-sst-ellipsis-untranslated": "Troidigezh ebet",
+ "tux-sst-ellipsis-outdated": "Troidigezhioù dispredet",
+ "tux-sst-link-all-match": "Klask en holl c'herioù dre ret",
+ "tux-sst-match-message": "Diskouez a ra troidigezhioù a glot gant ger pe c'her spisaet en enklask. $1",
+ "tux-sst-case-sensitive": "Diforc'hañ al lizherennoù munut diouzh ar pennlizherennoù",
+ "tux-sst-error-offset": "Ne c'haller ket diskouez muioc'h a zisoc'hoù. Resisait hoc'h enklask.",
+ "tux-sst-error-language": "Ne c'haller ket implijout ar yezh-mañ e seurt enklaskoù."
+}
diff --git a/Translate/i18n/search/bs.json b/Translate/i18n/search/bs.json
new file mode 100644
index 00000000..4854d392
--- /dev/null
+++ b/Translate/i18n/search/bs.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Obsuser",
+ "Srdjan m",
+ "Srđan"
+ ]
+ },
+ "searchtranslations": "Pretraga prijevoda",
+ "tux-sst-edit": "Uredi prijevod",
+ "tux-sst-view-foreign": "Pogledaj na $1",
+ "tux-sst-search": "Pretraži",
+ "tux-sst-search-ph": "Pretraži prijevode",
+ "tux-sst-count": "{{PLURAL:$1|Pronađen jedan rezultat|Pronađena $1 rezultata|Pronađeno $1 rezultata}}",
+ "tux-sst-facet-language": "Jezici",
+ "tux-sst-facet-group": "Grupe poruka",
+ "tux-sst-nosolr-title": "Pretraga nije dostupna",
+ "tux-sst-nosolr-body": "Ovaj wiki nema uslugu za pretragu prijevoda.",
+ "tux-sst-solr-offline-title": "Pretraga nije dostupna",
+ "tux-sst-solr-offline-body": "Usluga za pretragu privremeno nije dostupna.",
+ "tux-sst-next": "Sljedeće ›",
+ "tux-sst-prev": "‹ Prethodno",
+ "tux-sst-default": "Prijevodi",
+ "tux-sst-translated": "Prijevodi s $1",
+ "tux-sst-untranslated": "Nema prijevoda s $1",
+ "tux-sst-outdated": "Zastarjeli prijevodi s $1",
+ "tux-sst-ellipsis-untranslated": "Nema prijevoda",
+ "tux-sst-ellipsis-outdated": "Zastarjeli prijevodi",
+ "tux-sst-link-all-match": "Zahtijevaj sve riječi.",
+ "tux-sst-match-message": "Prikazani su prijevodi koji odgovaraju bilo kojoj riječi iz pretrage. $1",
+ "tux-sst-case-sensitive": "Razlikuj velika i mala slova"
+}
diff --git a/Translate/i18n/search/ca.json b/Translate/i18n/search/ca.json
new file mode 100644
index 00000000..2886d0c8
--- /dev/null
+++ b/Translate/i18n/search/ca.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fitoschido",
+ "Ssola",
+ "Toniher"
+ ]
+ },
+ "searchtranslations": "Cerca a les traduccions",
+ "tux-sst-edit": "Edita la traducció",
+ "tux-sst-view-foreign": "Mostra a $1",
+ "tux-sst-search": "Cerca",
+ "tux-sst-search-ph": "Cerca a les traduccions",
+ "tux-sst-count": "{{PLURAL:$1|S'ha trobat $1 resultat|S'han trobat $1 resultats}}",
+ "tux-sst-facet-language": "Llengües",
+ "tux-sst-facet-group": "Grups de missatges",
+ "tux-sst-nosolr-title": "Cerca no disponible",
+ "tux-sst-nosolr-body": "Aquest wiki no té un servei de cerca de les traduccions.",
+ "tux-sst-solr-offline-title": "Cerca no disponible",
+ "tux-sst-solr-offline-body": "El servei de cerca no està disponible temporalment.",
+ "tux-sst-next": "Següents →",
+ "tux-sst-prev": "← Anteriors",
+ "tux-sst-default": "Traduccions",
+ "tux-sst-translated": "Traduccions de $1",
+ "tux-sst-untranslated": "Sense traducció de $1",
+ "tux-sst-outdated": "Traduccions desactualitzades de $1",
+ "tux-sst-ellipsis-untranslated": "Sense traducció",
+ "tux-sst-ellipsis-outdated": "Traduccions desactualitzades",
+ "tux-sst-link-all-match": "Requereix totes les paraules de cerca.",
+ "tux-sst-match-message": "Es mostren les traduccions que coincideixen amb qualssevol paraules de la cerca. $1",
+ "tux-sst-case-sensitive": "Distingeix entre majúscules i minúscules"
+}
diff --git a/Translate/i18n/search/ce.json b/Translate/i18n/search/ce.json
new file mode 100644
index 00000000..0467f83f
--- /dev/null
+++ b/Translate/i18n/search/ce.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "Умар"
+ ]
+ },
+ "searchtranslations": "Гоч лахар",
+ "tux-sst-edit": "Таде гочдар",
+ "tux-sst-view-foreign": "Хьажар $1",
+ "tux-sst-search": "Лахар",
+ "tux-sst-search-ph": "Гоч лахар",
+ "tux-sst-count": "{{PLURAL:$1|Карина $1 хилам}}",
+ "tux-sst-facet-language": "Меттанаш",
+ "tux-sst-facet-group": "Хаамийн тоба",
+ "tux-sst-nosolr-title": "Лахар тӀецакхочу",
+ "tux-sst-nosolr-body": "ХӀокху вики чохь гочдарш лоьху сервис йац.",
+ "tux-sst-solr-offline-title": "Лахар тӀецакхочу",
+ "tux-sst-solr-offline-body": "Лахар хана болхбеш дац.",
+ "tux-sst-next": "РогӀера →",
+ "tux-sst-prev": "Хьалхара",
+ "tux-sst-default": "Гочдарш",
+ "tux-sst-translated": "Гочдарш тӀера $1",
+ "tux-sst-untranslated": "Гочдарш тӀера $1",
+ "tux-sst-outdated": "Ширделла гочдарш $1",
+ "tux-sst-ellipsis-untranslated": "Гочдар дац",
+ "tux-sst-ellipsis-outdated": "Ширделла гочдарш",
+ "tux-sst-link-all-match": "Дерриг дешнаш лаха.",
+ "tux-sst-match-message": "Гойтуш ду лоьхуш долучу муьлхачу дешнашца догӀурш. $1",
+ "tux-sst-case-sensitive": "регистр лоруш"
+}
diff --git a/Translate/i18n/search/ckb.json b/Translate/i18n/search/ckb.json
new file mode 100644
index 00000000..431bf0d8
--- /dev/null
+++ b/Translate/i18n/search/ckb.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lost Whispers",
+ "Sarchia",
+ "Épine"
+ ]
+ },
+ "tux-sst-search": "گەڕان",
+ "tux-sst-facet-language": "زمانەکان",
+ "tux-sst-translated": "وەرگێڕانەکان لە $1ەوە",
+ "tux-sst-match-message": "ھەموو ئەو وەرگێڕانانە پیشان دەدرێت کە لەگەڵ وشەکانی بەکارھێندراون بۆ گەڕان دەگونجێت. $1"
+}
diff --git a/Translate/i18n/search/cs.json b/Translate/i18n/search/cs.json
new file mode 100644
index 00000000..705f8afe
--- /dev/null
+++ b/Translate/i18n/search/cs.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Littledogboy",
+ "Mormegil"
+ ]
+ },
+ "searchtranslations": "Hledání v překladech",
+ "tux-sst-edit": "Editovat překlad",
+ "tux-sst-view-foreign": "Zobrazit na $1",
+ "tux-sst-search": "Hledat",
+ "tux-sst-search-ph": "Hledat v překladech",
+ "tux-sst-count": "{{PLURAL:$1|Nalezen jeden výsledek|Nalezeny $1 výsledky|Nalezeno $1 výsledků}}",
+ "tux-sst-facet-language": "Jazyky",
+ "tux-sst-facet-group": "Skupiny zpráv",
+ "tux-sst-nosolr-title": "Hledání není dostupné",
+ "tux-sst-nosolr-body": "Tato wiki nedisponuje službou pro vyhledávání překladů.",
+ "tux-sst-solr-offline-title": "Hledání není dostupné",
+ "tux-sst-solr-offline-body": "Služba pro hledání je dočasně nedostupná.",
+ "tux-sst-next": "Další ›",
+ "tux-sst-prev": "‹ Předchozí",
+ "tux-sst-default": "Překlady",
+ "tux-sst-translated": "Překlady z jazyka „$1“",
+ "tux-sst-untranslated": "Nepřeložené z jazyka $1",
+ "tux-sst-outdated": "Zastaralé překlady z jazyka $1",
+ "tux-sst-ellipsis-untranslated": "Nepřeložené",
+ "tux-sst-ellipsis-outdated": "Zastaralé překlady",
+ "tux-sst-link-all-match": "Vyžadovat všechna hledaná slova.",
+ "tux-sst-match-message": "Zobrazují se překlady, které odpovídají libovolnému z hledaných slov. $1",
+ "tux-sst-case-sensitive": "Rozlišovat velikost písmen"
+}
diff --git a/Translate/i18n/search/cu.json b/Translate/i18n/search/cu.json
new file mode 100644
index 00000000..53966dd6
--- /dev/null
+++ b/Translate/i18n/search/cu.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "ОйЛ"
+ ]
+ },
+ "tux-sst-search": "ищи",
+ "tux-sst-facet-language": "ѩꙁꙑци"
+}
diff --git a/Translate/i18n/search/cv.json b/Translate/i18n/search/cv.json
new file mode 100644
index 00000000..0b483d8f
--- /dev/null
+++ b/Translate/i18n/search/cv.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chuvash2014"
+ ]
+ },
+ "tux-sst-facet-language": "Чĕлхесем"
+}
diff --git a/Translate/i18n/search/da.json b/Translate/i18n/search/da.json
new file mode 100644
index 00000000..50e15b10
--- /dev/null
+++ b/Translate/i18n/search/da.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Byrial",
+ "Saederup92"
+ ]
+ },
+ "searchtranslations": "Søg oversættelser",
+ "tux-sst-edit": "Redigér oversættelse",
+ "tux-sst-view-foreign": "Vis på $1",
+ "tux-sst-search": "Søg",
+ "tux-sst-search-ph": "Søg oversættelser",
+ "tux-sst-count": "{{PLURAL:$1|Ét resultat fundet|$1 resultater fundet}}",
+ "tux-sst-facet-language": "Sprog",
+ "tux-sst-facet-group": "Beskedgrupper",
+ "tux-sst-nosolr-title": "Søgning er ikke tilgængelig",
+ "tux-sst-nosolr-body": "Denne wiki har ikke mulighed for oversættelsessøgning.",
+ "tux-sst-solr-offline-title": "Søgning er ikke tilgængelig",
+ "tux-sst-solr-offline-body": "Søgning er midlertidig utilgængelig.",
+ "tux-sst-next": "Næste ›",
+ "tux-sst-prev": "‹ Forrige",
+ "tux-sst-default": "Oversættelser",
+ "tux-sst-translated": "Oversættelser fra $1",
+ "tux-sst-untranslated": "Ingen oversættelser fra $1",
+ "tux-sst-outdated": "Forældede oversættelser fra $1",
+ "tux-sst-ellipsis-untranslated": "Ingen oversættelse",
+ "tux-sst-ellipsis-outdated": "Forældede oversættelser",
+ "tux-sst-link-all-match": "Kræv alle søgeord."
+}
diff --git a/Translate/i18n/search/de.json b/Translate/i18n/search/de.json
new file mode 100644
index 00000000..1a2d653b
--- /dev/null
+++ b/Translate/i18n/search/de.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Metalhead64"
+ ]
+ },
+ "searchtranslations": "Übersetzungen suchen",
+ "tux-sst-edit": "Übersetzung bearbeiten",
+ "tux-sst-view-foreign": "Auf $1 ansehen",
+ "tux-sst-search": "Suchen",
+ "tux-sst-search-ph": "Übersetzungen suchen",
+ "tux-sst-count": "{{PLURAL:$1|Ein Ergebnis gefunden|$1 Ergebnisse gefunden}}",
+ "tux-sst-facet-language": "Sprachen",
+ "tux-sst-facet-group": "Nachrichtengruppen",
+ "tux-sst-nosolr-title": "Suche nicht verfügbar",
+ "tux-sst-nosolr-body": "Dieses Wiki hat keinen Übersetzungssuchservice.",
+ "tux-sst-solr-offline-title": "Die Suche ist nicht verfügbar",
+ "tux-sst-solr-offline-body": "Der Suchdienst ist derzeit nicht verfügbar.",
+ "tux-sst-next": "Nächste ›",
+ "tux-sst-prev": "‹ Vorherige",
+ "tux-sst-default": "Übersetzungen",
+ "tux-sst-translated": "Übersetzungen von $1",
+ "tux-sst-untranslated": "Keine Übersetzung von $1",
+ "tux-sst-outdated": "Veraltete Übersetzungen von $1",
+ "tux-sst-ellipsis-untranslated": "Keine Übersetzung",
+ "tux-sst-ellipsis-outdated": "Veraltete Übersetzungen",
+ "tux-sst-link-all-match": "Alle Suchwörter erforderlich machen.",
+ "tux-sst-match-message": "Es werden Übersetzungen angezeigt, die mit jedem Suchwort übereinstimmen. $1",
+ "tux-sst-case-sensitive": "Groß-/Kleinschreibung",
+ "tux-sst-error-offset": "Es können keine weiteren Suchergebnisse angezeigt werden. Bitte schränke deine Suche ein.",
+ "tux-sst-error-language": "Diese Sprache kann nicht mit diesem Suchtyp verwendet werden."
+}
diff --git a/Translate/i18n/search/diq.json b/Translate/i18n/search/diq.json
new file mode 100644
index 00000000..84a6727f
--- /dev/null
+++ b/Translate/i18n/search/diq.json
@@ -0,0 +1,37 @@
+{
+ "@metadata": {
+ "authors": [
+ "Asmen",
+ "Gırd",
+ "Kumkumuk",
+ "Marmase",
+ "Mirzali",
+ "Orbot707"
+ ]
+ },
+ "searchtranslations": "Şıma tadayışan (çarnayışan) bıgeyrê",
+ "tux-sst-edit": "Çarnayışi bıvırne",
+ "tux-sst-view-foreign": "$1 de bıvêne",
+ "tux-sst-search": "Cı geyre",
+ "tux-sst-search-ph": "Şıma tadayışan (çarnayışan) bıgeyrê",
+ "tux-sst-count": "{{PLURAL:$1|Yew peyni vêniya|$1 peyniy vêniyay|0=teba nêvêniya}}",
+ "tux-sst-facet-language": "Zıwani",
+ "tux-sst-facet-group": "Gruba mesacan",
+ "tux-sst-nosolr-title": "Cı geyrayışo nêgurweyêno",
+ "tux-sst-nosolr-body": "Na wiki de xızmeta açarnayışi çıniya",
+ "tux-sst-solr-offline-title": "Cı geyrayışo nêgurweyêno",
+ "tux-sst-solr-offline-body": "Xızmeta cı geyrayışi ya enewke nêgurweyêna.",
+ "tux-sst-next": "Bahdoyên>",
+ "tux-sst-prev": "<Verêni",
+ "tux-sst-default": "Açarnayışi",
+ "tux-sst-translated": "$1 ra açarnayış",
+ "tux-sst-untranslated": "$1 ra nêaçarneya",
+ "tux-sst-outdated": "$1 ra açarnayışê verêni",
+ "tux-sst-ellipsis-untranslated": "Açarnayış çıniyo",
+ "tux-sst-ellipsis-outdated": "Açarnayışo vêrde",
+ "tux-sst-link-all-match": "Qıseyê ke geyrenê cı, pêro lazımê.",
+ "tux-sst-match-message": "Motena çarnayışanê ke pê qısanê cıgeyrayan kewnê tê. $1",
+ "tux-sst-case-sensitive": "Herfan rê hessas",
+ "tux-sst-error-offset": "Neticeyê asayeyê zêdêri çıniyê. Kerem ke, cıgeyrayışê xo teng ke.",
+ "tux-sst-error-language": "Tipê nê cıgeyrayışi be nê zıwani ra nêgureniyeno."
+}
diff --git a/Translate/i18n/search/dsb.json b/Translate/i18n/search/dsb.json
new file mode 100644
index 00000000..d6b42a02
--- /dev/null
+++ b/Translate/i18n/search/dsb.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "Michawiki"
+ ]
+ },
+ "searchtranslations": "Pśełožki pytaś",
+ "tux-sst-edit": "Pśełožk wobźěłaś",
+ "tux-sst-search": "Pytaś",
+ "tux-sst-search-ph": "Pśełožki pytaś",
+ "tux-sst-count": "{{PLURAL:$1|Jaden wuslědk namakany|$1 wuslědka namakanej|$1 wuslědki namakane|$1 wuslědkow namakane}}",
+ "tux-sst-facet-language": "Rěcy",
+ "tux-sst-facet-group": "Zdźěleńske kupki",
+ "tux-sst-nosolr-title": "Pytanje njestoj k dispoziciji",
+ "tux-sst-nosolr-body": "Toś ten wiki njama słužbu za pytanje pśełožkow.",
+ "tux-sst-solr-offline-title": "Pytanje njestoj k dispoziciji",
+ "tux-sst-solr-offline-body": "Pytańska słužba njestoj tuchylu k dispoziciji.",
+ "tux-sst-next": "Pśiduce wuslědki",
+ "tux-sst-prev": "Pjerwjejšne wuslědki"
+}
diff --git a/Translate/i18n/search/ee.json b/Translate/i18n/search/ee.json
new file mode 100644
index 00000000..0dca0a73
--- /dev/null
+++ b/Translate/i18n/search/ee.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aguve"
+ ]
+ },
+ "tux-sst-next": "Ŋgɔgbe",
+ "tux-sst-prev": "Megbe"
+}
diff --git a/Translate/i18n/search/el.json b/Translate/i18n/search/el.json
new file mode 100644
index 00000000..81563ca6
--- /dev/null
+++ b/Translate/i18n/search/el.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Protnet",
+ "Stam.nikos"
+ ]
+ },
+ "searchtranslations": "Αναζήτηση στις μεταφράσεις",
+ "tux-sst-edit": "Επεξεργασία μετάφρασης",
+ "tux-sst-view-foreign": "Προβολή στο $1",
+ "tux-sst-search": "Αναζήτηση",
+ "tux-sst-search-ph": "Αναζήτηση στις μεταφράσεις",
+ "tux-sst-count": "{{PLURAL:$1|Βρέθηκε ένα αποτέλεσμα|Βρέθηκαν $1 αποτελέσματα}}",
+ "tux-sst-facet-language": "Γλώσσες",
+ "tux-sst-facet-group": "Ομάδες μηνυμάτων",
+ "tux-sst-nosolr-title": "Αναζήτηση μη διαθέσιμη",
+ "tux-sst-nosolr-body": "Αυτό το wiki δεν έχει υπηρεσία αναζήτησης για μεταφράσεις.",
+ "tux-sst-solr-offline-title": "Αναζήτηση μη διαθέσιμη",
+ "tux-sst-solr-offline-body": "Η υπηρεσία αναζήτησης είναι προσωρινά μη διαθέσιμη.",
+ "tux-sst-next": "Επόμενο >",
+ "tux-sst-prev": "< Προηγούμενο",
+ "tux-sst-default": "Μεταφράσεις",
+ "tux-sst-translated": "Μεταφράσεις από $1",
+ "tux-sst-untranslated": "Καμία μετάφραση από τα $1",
+ "tux-sst-outdated": "Παρωχημένες μεταφράσεις από τα $1",
+ "tux-sst-ellipsis-untranslated": "Καμία μετάφραση",
+ "tux-sst-ellipsis-outdated": "Παρωχημένες μεταφράσεις",
+ "tux-sst-link-all-match": "Απαιτούνται όλες οι λέξεις αναζήτησης.",
+ "tux-sst-match-message": "Εμφανίζει μεταφράσεις που ταιριάζουν με οποιοαδήποτε από τις λέξεις αναζήτησης. $1",
+ "tux-sst-case-sensitive": "Διάκριση πεζών-κεφαλαίων"
+}
diff --git a/Translate/i18n/search/en.json b/Translate/i18n/search/en.json
new file mode 100644
index 00000000..8057a420
--- /dev/null
+++ b/Translate/i18n/search/en.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nike"
+ ]
+ },
+ "searchtranslations": "Search translations",
+ "tux-sst-edit": "Edit translation",
+ "tux-sst-view-foreign": "View at $1",
+ "tux-sst-search": "Search",
+ "tux-sst-search-ph": "Search translations",
+ "tux-sst-count": "{{PLURAL:$1|One result found|$1 results found}}",
+ "tux-sst-facet-language": "Languages",
+ "tux-sst-facet-group": "Message groups",
+ "tux-sst-nosolr-title": "Search unavailable",
+ "tux-sst-nosolr-body": "This wiki does not have a translation search service.",
+ "tux-sst-solr-offline-title": "Search unavailable",
+ "tux-sst-solr-offline-body": "The search service is temporarily unavailable.",
+ "tux-sst-next": "Next ›",
+ "tux-sst-prev": "‹ Previous",
+ "tux-sst-default": "Translations",
+ "tux-sst-translated": "Translations from $1",
+ "tux-sst-untranslated": "No translation from $1",
+ "tux-sst-outdated": "Outdated translations from $1",
+ "tux-sst-ellipsis-untranslated": "No translation",
+ "tux-sst-ellipsis-outdated": "Outdated translations",
+ "tux-sst-link-all-match": "Require all search words.",
+ "tux-sst-match-message": "Showing translations which match any of the search words. $1",
+ "tux-sst-case-sensitive": "Case sensitive",
+ "tux-sst-error-offset": "No more search results can be shown. Please narrow your search.",
+ "tux-sst-error-language": "This language cannot be used with this type of search."
+}
diff --git a/Translate/i18n/search/eo.json b/Translate/i18n/search/eo.json
new file mode 100644
index 00000000..431def24
--- /dev/null
+++ b/Translate/i18n/search/eo.json
@@ -0,0 +1,34 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fitoschido",
+ "Mirin",
+ "YvesNevelsteen"
+ ]
+ },
+ "searchtranslations": "Serĉi tradukojn",
+ "tux-sst-edit": "Redakti tradukon",
+ "tux-sst-view-foreign": "Vidi je $1",
+ "tux-sst-search": "Serĉi",
+ "tux-sst-search-ph": "Serĉi tradukojn",
+ "tux-sst-count": "{{PLURAL:$1|Unu rezulto trovita|$1 rezultoj trovitaj}}",
+ "tux-sst-facet-language": "Lingvoj",
+ "tux-sst-facet-group": "Mesaĝogrupoj",
+ "tux-sst-nosolr-title": "Serĉado ne estas disponebla",
+ "tux-sst-nosolr-body": "Ĉi tiu vikio ne havas servon por serĉi tradukojn.",
+ "tux-sst-solr-offline-title": "Serĉado ne estas disponebla",
+ "tux-sst-solr-offline-body": "La serĉoservo portempe ne estas disponebla.",
+ "tux-sst-next": "Sekvaj →",
+ "tux-sst-prev": "← Antaŭaj",
+ "tux-sst-default": "Tradukoj",
+ "tux-sst-translated": "Tradukoj de $1",
+ "tux-sst-untranslated": "Neniu traduko de $1",
+ "tux-sst-outdated": "Malnoviĝintaj tradukoj el $1",
+ "tux-sst-ellipsis-untranslated": "Neniu traduko",
+ "tux-sst-ellipsis-outdated": "Malaktualaj tradukoj",
+ "tux-sst-link-all-match": "Postuli ĉiujn serĉvortojn",
+ "tux-sst-match-message": "Montrante tradukojn kongruantajn al iu ajn el la serĉvortoj. $1",
+ "tux-sst-case-sensitive": "Usklecodistinga",
+ "tux-sst-error-offset": "Neniu plia serĉrezulto povas esti montrata. Bonvolu malvastigi vian serĉon.",
+ "tux-sst-error-language": "Ĉi tiu lingvo ne povas esti uzata kun tiu speco de serĉado"
+}
diff --git a/Translate/i18n/search/es.json b/Translate/i18n/search/es.json
new file mode 100644
index 00000000..4728830b
--- /dev/null
+++ b/Translate/i18n/search/es.json
@@ -0,0 +1,35 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fitoschido",
+ "Jakeukalane",
+ "Macofe",
+ "Ovruni"
+ ]
+ },
+ "searchtranslations": "Buscar en las traducciones",
+ "tux-sst-edit": "Editar traducción",
+ "tux-sst-view-foreign": "Ver en $1",
+ "tux-sst-search": "Buscar",
+ "tux-sst-search-ph": "Buscar traducciones",
+ "tux-sst-count": "Se {{PLURAL:$1|encontró un resultado|encontraron $1 resultados}}",
+ "tux-sst-facet-language": "Idiomas",
+ "tux-sst-facet-group": "Grupos de mensajes",
+ "tux-sst-nosolr-title": "Búsqueda no disponible",
+ "tux-sst-nosolr-body": "Esta wiki no tiene un servicio de búsqueda de traducciones.",
+ "tux-sst-solr-offline-title": "Búsqueda no disponible",
+ "tux-sst-solr-offline-body": "El servicio de búsqueda no está disponible temporalmente.",
+ "tux-sst-next": "Siguientes →",
+ "tux-sst-prev": "← Anteriores",
+ "tux-sst-default": "Traducciones",
+ "tux-sst-translated": "Traducciones del $1",
+ "tux-sst-untranslated": "Sin traducción del $1",
+ "tux-sst-outdated": "Traducciones desactualizadas del $1",
+ "tux-sst-ellipsis-untranslated": "Sin traducción",
+ "tux-sst-ellipsis-outdated": "Traducciones desactualizadas",
+ "tux-sst-link-all-match": "Requerir todas las palabras que se buscan.",
+ "tux-sst-match-message": "Se muestran las traducciones que coinciden con cualesquiera de las palabras buscadas. $1",
+ "tux-sst-case-sensitive": "Distinguir mayúsculas de minúsculas",
+ "tux-sst-error-offset": "No se pueden mostrar más resultados. Debe restringirse la búsqueda.",
+ "tux-sst-error-language": "Este idioma no puede utilizarse con este tipo de búsqueda."
+}
diff --git a/Translate/i18n/search/et.json b/Translate/i18n/search/et.json
new file mode 100644
index 00000000..d85e22c5
--- /dev/null
+++ b/Translate/i18n/search/et.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "Pikne"
+ ]
+ },
+ "searchtranslations": "Tõlgete otsimine",
+ "tux-sst-edit": "Redigeeri tõlget",
+ "tux-sst-search": "Otsi",
+ "tux-sst-search-ph": "Otsi tõlkeid",
+ "tux-sst-count": "{{PLURAL:$1|Üks tulemus leitud|$1 tulemust leitud}}",
+ "tux-sst-facet-language": "Keeled",
+ "tux-sst-facet-group": "Sõnumirühmad",
+ "tux-sst-nosolr-title": "Otsing pole saadaval",
+ "tux-sst-nosolr-body": "Sellel vikil pole tõlkeotsimisteenust.",
+ "tux-sst-solr-offline-title": "Otsing pole saadaval",
+ "tux-sst-solr-offline-body": "Otsimisteenus pole ajutiselt saadaval.",
+ "tux-sst-next": "Järgmised ›",
+ "tux-sst-prev": "‹ Eelmised",
+ "tux-sst-default": "Tõlked",
+ "tux-sst-translated": "Tõlgitud lähtekeelest \"$1\"",
+ "tux-sst-untranslated": "Tõlkimata lähtekeelest \"$1\"",
+ "tux-sst-ellipsis-outdated": "Iganenud tõlked",
+ "tux-sst-link-all-match": "Nõua kõiki otsisõnu.",
+ "tux-sst-match-message": "Näidatakse tõlkeid, mis vastavad vähemalt ühele otsisõnale. $1",
+ "tux-sst-case-sensitive": "Tõstutundlik"
+}
diff --git a/Translate/i18n/search/eu.json b/Translate/i18n/search/eu.json
new file mode 100644
index 00000000..c0d18248
--- /dev/null
+++ b/Translate/i18n/search/eu.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "An13sa",
+ "Subi"
+ ]
+ },
+ "searchtranslations": "Itzulpenak bilatu",
+ "tux-sst-edit": "Itzulpena aldatu",
+ "tux-sst-search": "Bilatu",
+ "tux-sst-search-ph": "Itzulpenak bilatu",
+ "tux-sst-count": "{{PLURAL:$1|Emaitza bat aurkitu da|$1 emaitza aurkitu dira}}",
+ "tux-sst-facet-language": "Hizkuntzak",
+ "tux-sst-facet-group": "Mezu-taldeak",
+ "tux-sst-nosolr-title": "Bilaketa ez dago erabilgarri",
+ "tux-sst-solr-offline-title": "Bilaketa ez dago erabilgarri",
+ "tux-sst-solr-offline-body": "Une honetan bilaketa zerbitzua ez dago erabilgarri.",
+ "tux-sst-next": "Hurrengoa >",
+ "tux-sst-prev": "< Aurrekoa",
+ "tux-sst-default": "Itzulpenak"
+}
diff --git a/Translate/i18n/search/fa.json b/Translate/i18n/search/fa.json
new file mode 100644
index 00000000..59666076
--- /dev/null
+++ b/Translate/i18n/search/fa.json
@@ -0,0 +1,36 @@
+{
+ "@metadata": {
+ "authors": [
+ "Beginneruser",
+ "Danialbehzadi",
+ "Ebraminio",
+ "Huji",
+ "Reza1615"
+ ]
+ },
+ "searchtranslations": "جستجوی ترجمه‌ها",
+ "tux-sst-edit": "ویرایش ترجمه",
+ "tux-sst-view-foreign": "نمایش در $1",
+ "tux-sst-search": "جستجو",
+ "tux-sst-search-ph": "جستجوی ترجمه‌ها",
+ "tux-sst-count": "{{PLURAL:$1|یک نتیجه یافت شد|$1 نتیجه یافت شد}}",
+ "tux-sst-facet-language": "زبان‌ها",
+ "tux-sst-facet-group": "گروه‌های پیام",
+ "tux-sst-nosolr-title": "جستجو در دسترس نیست",
+ "tux-sst-nosolr-body": "این ویکی خدمت جستجوی ترجمه ندارد.",
+ "tux-sst-solr-offline-title": "جستجوی در دسترس نیست.",
+ "tux-sst-solr-offline-body": "خدمت جستجو به طور موقت در دسترس نیست.",
+ "tux-sst-next": "بعدی ›",
+ "tux-sst-prev": "‹ قبلی",
+ "tux-sst-default": "ترجمه‌ها",
+ "tux-sst-translated": "ترجمه‌ها از $1",
+ "tux-sst-untranslated": "فاقد ترجمه از $1",
+ "tux-sst-outdated": "ترجمه‌های تاریخ گذشته از $1",
+ "tux-sst-ellipsis-untranslated": "هیچ ترجمه‌ای نیست",
+ "tux-sst-ellipsis-outdated": "ترجمه‌های تاریخ گذشته",
+ "tux-sst-link-all-match": "تمام واژه‌های جستجو شده لازمند.",
+ "tux-sst-match-message": "نمایش ترجمه‌هایی که با هر کدام از واژه‌های جستجو شده تطبیق دارد: $1",
+ "tux-sst-case-sensitive": "حساس به بزرگی و کوچکی حروف",
+ "tux-sst-error-offset": "نتایج جستجوی بیشتری را نمی‌توان نشان داد. لطفاً جستجوی خودتان را محدود کنید.",
+ "tux-sst-error-language": "این زبان با این نوع جستجو نمی‌تواند استفاده بشود."
+}
diff --git a/Translate/i18n/search/fi.json b/Translate/i18n/search/fi.json
new file mode 100644
index 00000000..a8baed2c
--- /dev/null
+++ b/Translate/i18n/search/fi.json
@@ -0,0 +1,33 @@
+{
+ "@metadata": {
+ "authors": [
+ "Crt",
+ "Nike",
+ "Silvonen",
+ "Stryn"
+ ]
+ },
+ "searchtranslations": "Etsi käännöksiä",
+ "tux-sst-edit": "Muokkaa käännöstä",
+ "tux-sst-view-foreign": "Näytä sivulla $1",
+ "tux-sst-search": "Hae",
+ "tux-sst-search-ph": "Etsi käännöksiä",
+ "tux-sst-count": "{{PLURAL:$1|Yksi hakutulos|$1 hakutulosta}}",
+ "tux-sst-facet-language": "Kielet",
+ "tux-sst-facet-group": "Viestiryhmät",
+ "tux-sst-nosolr-title": "Haku ei ole käytössä",
+ "tux-sst-nosolr-body": "Hakupalvelu ei ole käytössä tässä wikissä.",
+ "tux-sst-solr-offline-title": "Haku ei ole käytössä",
+ "tux-sst-solr-offline-body": "Hakupalvelu on tilapäisesti pois käytöstä.",
+ "tux-sst-next": "Seuraava ›",
+ "tux-sst-prev": "‹ Edellinen",
+ "tux-sst-default": "Käännökset",
+ "tux-sst-translated": "Käännetty kielestä $1",
+ "tux-sst-untranslated": "Kääntämättä kielestä $1",
+ "tux-sst-outdated": "Vanhentuneet käännökset kielestä $1",
+ "tux-sst-ellipsis-untranslated": "Kääntämättömät",
+ "tux-sst-ellipsis-outdated": "Vanhentuneet käännökset",
+ "tux-sst-link-all-match": "Vaadi kaikkien hakusanojen täsmäys.",
+ "tux-sst-match-message": "Näytetään mihin tahansa hakusanaan täsmäävät käännökset. $1",
+ "tux-sst-case-sensitive": "kirjainkoko on merkitsevä"
+}
diff --git a/Translate/i18n/search/fit.json b/Translate/i18n/search/fit.json
new file mode 100644
index 00000000..6d3bd45b
--- /dev/null
+++ b/Translate/i18n/search/fit.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Pyscowicz"
+ ]
+ },
+ "searchtranslations": "Eti käänöksiä",
+ "tux-sst-edit": "Mookkaa käänöstä",
+ "tux-sst-view-foreign": "Näytä sivula $1",
+ "tux-sst-search": "Eti",
+ "tux-sst-search-ph": "Eti käännöksiä",
+ "tux-sst-count": "{{PLURAL:$1|Yksi hakuresyltaatti|$1 hakuresyltaattia}}",
+ "tux-sst-facet-group": "Viestijoukot",
+ "tux-sst-next": "Seuraava ›",
+ "tux-sst-prev": "‹ Eelinen",
+ "tux-sst-default": "Käänökset",
+ "tux-sst-translated": "Käänetty kielestä $1",
+ "tux-sst-outdated": "Vanhentuneet käänökset kielestä $1",
+ "tux-sst-ellipsis-outdated": "Vanhentuneet käänökset",
+ "tux-sst-match-message": "Näytethään mihin tahansa hakusanaan täsmäävät käänökset. $1",
+ "tux-sst-case-sensitive": "puustaavikoko oon merkitsevä"
+}
diff --git a/Translate/i18n/search/fo.json b/Translate/i18n/search/fo.json
new file mode 100644
index 00000000..77e88615
--- /dev/null
+++ b/Translate/i18n/search/fo.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "EileenSanda"
+ ]
+ },
+ "searchtranslations": "Leita eftir týðingum",
+ "tux-sst-edit": "Rætta týðing",
+ "tux-sst-search": "Leita",
+ "tux-sst-search-ph": "Leita eftir týðingum",
+ "tux-sst-count": "{{PLURAL:$1|Eitt úrslit funnið|$1 úrslit funnin}}",
+ "tux-sst-facet-language": "Mál",
+ "tux-sst-facet-group": "Boðbólkar",
+ "tux-sst-nosolr-title": "Leiting ber ikki til",
+ "tux-sst-nosolr-body": "Henda wiki'in hevur ikki eina tænastu har til ber at leita eftir týðingum.",
+ "tux-sst-solr-offline-title": "Leitan ber ikki til",
+ "tux-sst-solr-offline-body": "Leititænastan er fyribils óvirkin.",
+ "tux-sst-next": "Næstu úrslit",
+ "tux-sst-prev": "Undarfarnu úrslit"
+}
diff --git a/Translate/i18n/search/fr.json b/Translate/i18n/search/fr.json
new file mode 100644
index 00000000..d5b9a614
--- /dev/null
+++ b/Translate/i18n/search/fr.json
@@ -0,0 +1,41 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bluenaranja",
+ "Crochet.david",
+ "Gomoko",
+ "Pols12",
+ "Thibaut120094",
+ "Titip1995",
+ "TomT0m",
+ "Urhixidur",
+ "Verdy p",
+ "Wladek92"
+ ]
+ },
+ "searchtranslations": "Recherche de traductions",
+ "tux-sst-edit": "Modifier la traduction",
+ "tux-sst-view-foreign": "Voir sur $1",
+ "tux-sst-search": "Rechercher",
+ "tux-sst-search-ph": "Recherche de traductions",
+ "tux-sst-count": "{{PLURAL:$1|0=Aucun résultat trouvé|1=Un résultat trouvé|$1 résultats trouvés}}",
+ "tux-sst-facet-language": "Langues",
+ "tux-sst-facet-group": "Groupes de messages",
+ "tux-sst-nosolr-title": "Recherche indisponible",
+ "tux-sst-nosolr-body": "Ce wiki n’a pas de service de recherche de traduction.",
+ "tux-sst-solr-offline-title": "Recherche indisponible",
+ "tux-sst-solr-offline-body": "Le service de recherche est temporairement indisponible.",
+ "tux-sst-next": "Suivant ▸",
+ "tux-sst-prev": "◂ Précédent",
+ "tux-sst-default": "Traductions",
+ "tux-sst-translated": "Originaux{{PLURAL:2|$1|}} traduits",
+ "tux-sst-untranslated": "Originaux{{PLURAL:2|$1|}} à traduire",
+ "tux-sst-outdated": "Originaux{{PLURAL:2|$1|}} à retraduire",
+ "tux-sst-ellipsis-untranslated": "Non traduits",
+ "tux-sst-ellipsis-outdated": "Traductions désuètes",
+ "tux-sst-link-all-match": "Exiger la présence de tous les termes de la recherche.",
+ "tux-sst-match-message": "Les traductions correspondant à n’importe quel mot de la recherche sont affichées. $1",
+ "tux-sst-case-sensitive": "Sensible à la casse",
+ "tux-sst-error-offset": "Il n’est pas possible d’afficher davantage de résultats de recherche. Veuillez affiner votre recherche.",
+ "tux-sst-error-language": "Cette langue ne peut pas être utilisée avec ce type de recherche."
+}
diff --git a/Translate/i18n/search/fy.json b/Translate/i18n/search/fy.json
new file mode 100644
index 00000000..ea832823
--- /dev/null
+++ b/Translate/i18n/search/fy.json
@@ -0,0 +1,34 @@
+{
+ "@metadata": {
+ "authors": [
+ "PiefPafPier",
+ "Robin van der Vliet",
+ "Robin0van0der0vliet"
+ ]
+ },
+ "searchtranslations": "Oersettings sykje",
+ "tux-sst-edit": "Oersetting bewurkje",
+ "tux-sst-view-foreign": "Op $1 besjen",
+ "tux-sst-search": "Sykje",
+ "tux-sst-search-ph": "Oersettings trochsykje",
+ "tux-sst-count": "{{PLURAL:$1|Ien treffer|$1 treffers}} fûn",
+ "tux-sst-facet-language": "Talen",
+ "tux-sst-facet-group": "Berjochtegroepen",
+ "tux-sst-nosolr-title": "Sykjen net beskikber",
+ "tux-sst-nosolr-body": "Dizze wiki hat gjin sykfunksje foar oersettings.",
+ "tux-sst-solr-offline-title": "Sykjen net beskikber",
+ "tux-sst-solr-offline-body": "De sykfunksje is tydlik net beskikber.",
+ "tux-sst-next": "Fierder ›",
+ "tux-sst-prev": "‹ Werom",
+ "tux-sst-default": "Oersettings",
+ "tux-sst-translated": "Oersettings fan $1",
+ "tux-sst-untranslated": "Gjin oersetting fan $1",
+ "tux-sst-outdated": "Ferâldere oersettings fan $1",
+ "tux-sst-ellipsis-untranslated": "Gjin oersetting",
+ "tux-sst-ellipsis-outdated": "Ferâldere oersettings",
+ "tux-sst-link-all-match": "Alle sykwurden fereaskje.",
+ "tux-sst-match-message": "Oersettings werjûn oerienkommend mei hokker sykwurd dan ek. $1",
+ "tux-sst-case-sensitive": "Haadlettergefoelich",
+ "tux-sst-error-offset": "Mear syktreffers kinne net werjûn wurde. Graach jo sykopdracht beheine.",
+ "tux-sst-error-language": "Dizze taal kin net brûkt wurde mei dit type fan sykopdracht."
+}
diff --git a/Translate/i18n/search/gcr.json b/Translate/i18n/search/gcr.json
new file mode 100644
index 00000000..fac54a95
--- /dev/null
+++ b/Translate/i18n/search/gcr.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "LeGuyanaisPure"
+ ]
+ },
+ "tux-sst-facet-language": "Lanng"
+}
diff --git a/Translate/i18n/search/gl.json b/Translate/i18n/search/gl.json
new file mode 100644
index 00000000..5951c928
--- /dev/null
+++ b/Translate/i18n/search/gl.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Elisardojm",
+ "Fitoschido",
+ "Toliño"
+ ]
+ },
+ "searchtranslations": "Procurar nas traducións",
+ "tux-sst-edit": "Editar a tradución",
+ "tux-sst-view-foreign": "Ver en $1",
+ "tux-sst-search": "Procurar",
+ "tux-sst-search-ph": "Procurar nas traducións",
+ "tux-sst-count": "{{PLURAL:$1|Atopouse 1 resultado|Atopáronse $1 resultados}}",
+ "tux-sst-facet-language": "Linguas",
+ "tux-sst-facet-group": "Grupos de mensaxes",
+ "tux-sst-nosolr-title": "A procura non está dispoñible",
+ "tux-sst-nosolr-body": "Este wiki non dispón dun servizo de procura de traducións.",
+ "tux-sst-solr-offline-title": "A procura non está dispoñible",
+ "tux-sst-solr-offline-body": "O servizo de procura non está dispoñible temporalmente.",
+ "tux-sst-next": "Seguintes →",
+ "tux-sst-prev": "← Anteriores",
+ "tux-sst-default": "Traducións",
+ "tux-sst-translated": "Traducións do $1",
+ "tux-sst-untranslated": "Non hai traducións do $1",
+ "tux-sst-outdated": "Traducións obsoletas do $1",
+ "tux-sst-ellipsis-untranslated": "Sen tradución",
+ "tux-sst-ellipsis-outdated": "Traducións obsoletas",
+ "tux-sst-link-all-match": "Esixir todas as palabras da procura.",
+ "tux-sst-match-message": "Amosando as traducións que coinciden con calquera das palabras da procura. $1",
+ "tux-sst-case-sensitive": "Distinguir entre maiúsculas e minúsculas"
+}
diff --git a/Translate/i18n/search/gom-deva.json b/Translate/i18n/search/gom-deva.json
new file mode 100644
index 00000000..6b56e3d3
--- /dev/null
+++ b/Translate/i18n/search/gom-deva.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Vaishali Parab"
+ ]
+ },
+ "tux-sst-view-foreign": " $1 चेर पळयात"
+}
diff --git a/Translate/i18n/search/gom-latn.json b/Translate/i18n/search/gom-latn.json
new file mode 100644
index 00000000..a74076a3
--- /dev/null
+++ b/Translate/i18n/search/gom-latn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "The Discoverer"
+ ]
+ },
+ "tux-sst-view-foreign": "$1 cher polloi"
+}
diff --git a/Translate/i18n/search/gu.json b/Translate/i18n/search/gu.json
new file mode 100644
index 00000000..e783b68d
--- /dev/null
+++ b/Translate/i18n/search/gu.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ashok modhvadia",
+ "Dsvyas"
+ ]
+ },
+ "searchtranslations": "ભાષાંતરો શોધો",
+ "tux-sst-edit": "ભાષાંતરો સંપાદિત કરો",
+ "tux-sst-search": "શોધો",
+ "tux-sst-search-ph": "ભાષાંતરો શોધો",
+ "tux-sst-count": "{{PLURAL:$1|એક પરિણામ મળ્યું|$1 પરિણામો મળ્યા}}",
+ "tux-sst-facet-language": "ભાષાઓ",
+ "tux-sst-facet-group": "સંદેશ જૂથો",
+ "tux-sst-nosolr-title": "શોધ ઉપલબ્ધ નથી",
+ "tux-sst-nosolr-body": "આ વિકિ પર ભાષાંતર શોધ સેવા ઉપલબ્ધ નથી.",
+ "tux-sst-solr-offline-title": "શોધ ઉપલબ્ધ નથી",
+ "tux-sst-solr-offline-body": "આ શોધ સેવા હાલ ઉપલબ્ધ નથી.",
+ "tux-sst-next": "પછીનું",
+ "tux-sst-prev": "આગલું"
+}
diff --git a/Translate/i18n/search/he.json b/Translate/i18n/search/he.json
new file mode 100644
index 00000000..ef50a50f
--- /dev/null
+++ b/Translate/i18n/search/he.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80"
+ ]
+ },
+ "searchtranslations": "חיפוש בתרגומים",
+ "tux-sst-edit": "עריכת התרגום",
+ "tux-sst-view-foreign": "להציג באתר $1",
+ "tux-sst-search": "חיפוש",
+ "tux-sst-search-ph": "חיפוש בתרגומים",
+ "tux-sst-count": "{{PLURAL:$1|נמצאה תוצאה אחת|נמצאו $1 תוצאות}}",
+ "tux-sst-facet-language": "שפות",
+ "tux-sst-facet-group": "קבוצות הודעות",
+ "tux-sst-nosolr-title": "החיפוש אינו זמין",
+ "tux-sst-nosolr-body": "בוויקי הזה אין שירות חיפוש בתרגומים.",
+ "tux-sst-solr-offline-title": "החיפוש אינו זמין",
+ "tux-sst-solr-offline-body": "זמנית שירות החיפוש אינו זמין.",
+ "tux-sst-next": "הבאות ›",
+ "tux-sst-prev": "‹ הקודמות",
+ "tux-sst-default": "תרגומים",
+ "tux-sst-translated": "תרגומים מ־$1",
+ "tux-sst-untranslated": "אין תרגומים מ־$1",
+ "tux-sst-outdated": "תרגומים מיושנים מ־$1",
+ "tux-sst-ellipsis-untranslated": "אין תרגום",
+ "tux-sst-ellipsis-outdated": "תרגומים מיושנים",
+ "tux-sst-link-all-match": "לדרוש את כל מילות החיפוש.",
+ "tux-sst-match-message": "הצגת תרגומים שמתאימים למילה כלשהי ממילות החיפוש. $1",
+ "tux-sst-case-sensitive": "תלוי־רישיות",
+ "tux-sst-error-offset": "לא היה אפשר להראות עוד תוצאות. נא לצמצם את החיפוש שלך.",
+ "tux-sst-error-language": "לא ניתן להשתמש בשפה הזאת עם סוג כזה של חיפוש."
+}
diff --git a/Translate/i18n/search/hi.json b/Translate/i18n/search/hi.json
new file mode 100644
index 00000000..45648f51
--- /dev/null
+++ b/Translate/i18n/search/hi.json
@@ -0,0 +1,35 @@
+{
+ "@metadata": {
+ "authors": [
+ "NehalDaveND",
+ "Saurmandal",
+ "Sfic",
+ "ThisIsACreeper0101"
+ ]
+ },
+ "searchtranslations": "अनुवाद खोजें",
+ "tux-sst-edit": "अनुवाद सम्पादित करें",
+ "tux-sst-view-foreign": "$1 में देखें",
+ "tux-sst-search": "खोजें",
+ "tux-sst-search-ph": "अनुवाद ढूँढे",
+ "tux-sst-count": "{{PLURAL:$1|एक अंजाम मिला|$1 अंजाम मिले}}",
+ "tux-sst-facet-language": "भाषाएँ",
+ "tux-sst-facet-group": "संदेश समूह",
+ "tux-sst-nosolr-title": "खोज अनुपलब्ध है",
+ "tux-sst-nosolr-body": "इस विकि पर अनुवाद खोजने की सेवा नहीं है।",
+ "tux-sst-solr-offline-title": "खोज अनुपलब्ध है",
+ "tux-sst-solr-offline-body": "खोज सेवा अस्थायी रूप से अनुपलब्ध है।",
+ "tux-sst-next": "अग्रिम ›",
+ "tux-sst-prev": "‹ पिछला",
+ "tux-sst-default": "अनुवाद",
+ "tux-sst-translated": "$1 से अनुवाद",
+ "tux-sst-untranslated": "$1 से कोई अनुवाद नहीं है",
+ "tux-sst-outdated": "$1 से कालग्रस्त अनुवाद",
+ "tux-sst-ellipsis-untranslated": "कोई अनुवाद नहीं है",
+ "tux-sst-ellipsis-outdated": "कालग्रस्त अनुवाद",
+ "tux-sst-link-all-match": "सभी खोज शब्दों को आवश्यक बनाएँ।",
+ "tux-sst-match-message": "किसी भी खोज शब्द से मेल खाने वाले अनुवाद दिखाए जा रहे हैं। $1",
+ "tux-sst-case-sensitive": "केस-संवेदनशील",
+ "tux-sst-error-offset": "और खोज अंजाम नहीं दिखाए जा सकते हैं। कृपया अपने दायरे को छोटा करें।",
+ "tux-sst-error-language": "इस भाषा को इस प्रकार के खोज में इस्तेमाल नहीं किया जा सकता।"
+}
diff --git a/Translate/i18n/search/hr.json b/Translate/i18n/search/hr.json
new file mode 100644
index 00000000..33428d05
--- /dev/null
+++ b/Translate/i18n/search/hr.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "MaGa"
+ ]
+ },
+ "searchtranslations": "Pretraga prijevoda",
+ "tux-sst-edit": "Uredi prijevod",
+ "tux-sst-view-foreign": "Vidi na $1",
+ "tux-sst-search": "Pretraži",
+ "tux-sst-search-ph": "Pretraga prijevoda",
+ "tux-sst-count": "{{PLURAL:$1|Pronađen jedan rezultat|Pronađena $1 rezultata|Pronađeno $1 rezultata}}",
+ "tux-sst-facet-language": "Jezici",
+ "tux-sst-facet-group": "Grupe poruka",
+ "tux-sst-nosolr-title": "Pretraživanje nije dostupno",
+ "tux-sst-nosolr-body": "Ovaj wiki nema uslugu pretrage prijevoda.",
+ "tux-sst-solr-offline-title": "Pretraživanje nije dostupno",
+ "tux-sst-solr-offline-body": "Tražilica je privremeno nedostupna.",
+ "tux-sst-next": "Sljedeće ›",
+ "tux-sst-prev": "‹ Prethodno",
+ "tux-sst-default": "Prijevodi",
+ "tux-sst-translated": "Prijevodi s $1",
+ "tux-sst-untranslated": "Nema prijevoda s $1",
+ "tux-sst-outdated": "Zastarjeli prijevodi s $1",
+ "tux-sst-ellipsis-untranslated": "Nema prijevoda",
+ "tux-sst-ellipsis-outdated": "Zastarjeli prijevodi",
+ "tux-sst-link-all-match": "Pretraga prema cijelom izrazu.",
+ "tux-sst-match-message": "Prikazuju se prijevodi koji odgovaraju svim riječima iz pretrage. $1",
+ "tux-sst-case-sensitive": "Razlikuj velika i mala slova"
+}
diff --git a/Translate/i18n/search/hsb.json b/Translate/i18n/search/hsb.json
new file mode 100644
index 00000000..daa7ca0c
--- /dev/null
+++ b/Translate/i18n/search/hsb.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "J budissin",
+ "Michawiki"
+ ]
+ },
+ "searchtranslations": "Přełožki pytać",
+ "tux-sst-edit": "Přełožk wobdźěłać",
+ "tux-sst-search": "Pytać",
+ "tux-sst-search-ph": "Přełožki pytać",
+ "tux-sst-count": "{{PLURAL:$1|Jedyn wuslědk namakany|$1 wuslědkaj namakanej|$1 wuslědki namakane|$1 wuslědkow namakane}}",
+ "tux-sst-facet-language": "Rěče",
+ "tux-sst-facet-group": "Zdźělenske skupiny",
+ "tux-sst-nosolr-title": "Pytanje k dispoziciji njesteji",
+ "tux-sst-nosolr-body": "Tutón wiki nima słužbu za pytanje přełožkow.",
+ "tux-sst-solr-offline-title": "Pytanje k dispoziciji njesteji",
+ "tux-sst-solr-offline-body": "Pytanska słužba tuchwilu k dispoziciji njesteji.",
+ "tux-sst-next": "Přichodny ›",
+ "tux-sst-prev": "‹ Předchadna",
+ "tux-sst-default": "Přełožki"
+}
diff --git a/Translate/i18n/search/hu.json b/Translate/i18n/search/hu.json
new file mode 100644
index 00000000..3a6cd83e
--- /dev/null
+++ b/Translate/i18n/search/hu.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "Tacsipacsi"
+ ]
+ },
+ "searchtranslations": "Fordítások keresése",
+ "tux-sst-edit": "Fordítás szerkesztése",
+ "tux-sst-view-foreign": "Megtekintés itt: $1",
+ "tux-sst-search": "Keresés",
+ "tux-sst-search-ph": "Fordítások keresése",
+ "tux-sst-count": "$1 találat",
+ "tux-sst-facet-language": "Nyelvek",
+ "tux-sst-facet-group": "Üzenetcsoportok",
+ "tux-sst-nosolr-title": "A kereső nem érhető el",
+ "tux-sst-nosolr-body": "Ez a wiki nem rendelkezik fordításkereső szolgáltatással.",
+ "tux-sst-solr-offline-title": "A kereső nem érhető el",
+ "tux-sst-solr-offline-body": "A keresőszolgáltatás ideiglenesen nem elérhető.",
+ "tux-sst-next": "Következő ›",
+ "tux-sst-prev": "‹ Előző",
+ "tux-sst-default": "Fordítások",
+ "tux-sst-translated": "Fordítások $1 nyelvről",
+ "tux-sst-untranslated": "Nincs fordítás $1 nyelvről",
+ "tux-sst-outdated": "Elavult fordítások $1 nyelvről",
+ "tux-sst-ellipsis-untranslated": "Nincs fordítás",
+ "tux-sst-ellipsis-outdated": "Elavult fordítások",
+ "tux-sst-link-all-match": "Az összes keresőszó megkövetelése.",
+ "tux-sst-match-message": "Minden fordítás látható, ami legalább egy keresett szót tartalmaz. $1",
+ "tux-sst-case-sensitive": "Kisbetű/nagybetű-érzékeny"
+}
diff --git a/Translate/i18n/search/hy.json b/Translate/i18n/search/hy.json
new file mode 100644
index 00000000..84ec45b3
--- /dev/null
+++ b/Translate/i18n/search/hy.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Սերգեյ Սաֆարյան"
+ ]
+ },
+ "tux-sst-edit": "Խմբագրել թարգմանությունը",
+ "tux-sst-count": "{{PLURAL:$1|Գտնվեց մեկ արդյունք|Գտնվեց $1 արդյունք}}",
+ "tux-sst-facet-language": "Լեզուներ",
+ "tux-sst-default": "Թարգմանություններ",
+ "tux-sst-translated": "Թարգմանություններ $1ից",
+ "tux-sst-untranslated": "Չկա թարգմանություն $1ից",
+ "tux-sst-outdated": "Հնացած թարգմանություններ $1ից",
+ "tux-sst-ellipsis-outdated": "Հնացած թարգմանություններ",
+ "tux-sst-case-sensitive": "հաշվի առնել տառաչափը"
+}
diff --git a/Translate/i18n/search/ia.json b/Translate/i18n/search/ia.json
new file mode 100644
index 00000000..5acc896c
--- /dev/null
+++ b/Translate/i18n/search/ia.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "McDutchie"
+ ]
+ },
+ "searchtranslations": "Cercar traductiones",
+ "tux-sst-edit": "Modificar traduction",
+ "tux-sst-view-foreign": "Vider sur $1",
+ "tux-sst-search": "Cercar",
+ "tux-sst-search-ph": "Cerca in traductiones",
+ "tux-sst-count": "{{PLURAL:$1|Un resultato trovate|$1 resultatos trovate}}",
+ "tux-sst-facet-language": "Linguas",
+ "tux-sst-facet-group": "Gruppos de messages",
+ "tux-sst-nosolr-title": "Recerca indisponibile",
+ "tux-sst-nosolr-body": "Iste wiki non ha un servicio de recerca de traductiones.",
+ "tux-sst-solr-offline-title": "Recerca indisponibile",
+ "tux-sst-solr-offline-body": "Le servicio de recerca es temporarimente indisponibile.",
+ "tux-sst-next": "Sequente ›",
+ "tux-sst-prev": "‹ Precedente",
+ "tux-sst-default": "Traductiones",
+ "tux-sst-translated": "Traductiones ab $1",
+ "tux-sst-untranslated": "Nulle traduction ab $1",
+ "tux-sst-outdated": "Traductiones obsolete ab $1",
+ "tux-sst-ellipsis-untranslated": "Nulle traduction",
+ "tux-sst-ellipsis-outdated": "Traductiones obsolete",
+ "tux-sst-link-all-match": "Requirer tote le parolas de recerca.",
+ "tux-sst-match-message": "Se monstra le traductiones que corresponde a qualcunque del parolas a cercar. $1",
+ "tux-sst-case-sensitive": "Distinguer majusculas de minusculas",
+ "tux-sst-error-offset": "Non es possibile monstrar plus resultatos del recerca. Per favor restringe tu recerca.",
+ "tux-sst-error-language": "Iste lingua non pote esser usate con iste typo de recerca."
+}
diff --git a/Translate/i18n/search/id.json b/Translate/i18n/search/id.json
new file mode 100644
index 00000000..dee98747
--- /dev/null
+++ b/Translate/i18n/search/id.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Daud I.F. Argana"
+ ]
+ },
+ "searchtranslations": "Cari terjemahan",
+ "tux-sst-edit": "Sunting terjemahan",
+ "tux-sst-view-foreign": "Lihat di $1",
+ "tux-sst-search": "Cari",
+ "tux-sst-search-ph": "Cari terjemahan",
+ "tux-sst-count": "{{PLURAL:$1|Satu hasil ditemukan|$1 hasil ditemukan}}",
+ "tux-sst-facet-language": "Bahasa",
+ "tux-sst-facet-group": "Kelompok pesan",
+ "tux-sst-nosolr-title": "Tidak bisa mencari",
+ "tux-sst-nosolr-body": "Wiki ini tidak memiliki layanan pencarian terjemahan.",
+ "tux-sst-solr-offline-title": "Tidak bisa mencari",
+ "tux-sst-solr-offline-body": "Layanan pencarian sedang tidak tersedia untuk sementara.",
+ "tux-sst-next": "Selanjutnya ›",
+ "tux-sst-prev": "‹ Sebelumnya",
+ "tux-sst-default": "Terjemahan",
+ "tux-sst-translated": "Terjemahan dari $1",
+ "tux-sst-untranslated": "Tidak ada terjemahan dari $1",
+ "tux-sst-outdated": "Terjemahan usang dari $1",
+ "tux-sst-ellipsis-untranslated": "Tidak ada terjemahan",
+ "tux-sst-ellipsis-outdated": "Terjemahan usang",
+ "tux-sst-link-all-match": "Haruskan semua kata pencarian.",
+ "tux-sst-match-message": "Tampilkan terjemahan yang cocok dengan kata-kata pencarian manapun. $1",
+ "tux-sst-case-sensitive": "Peka kapital",
+ "tux-sst-error-offset": "Tidak ada lagi hasil pencarian yang dapat ditampilkan. Tolong sempitkan pencarian Anda.",
+ "tux-sst-error-language": "Bahasa ini tidak bisa digunakan dengan jenis pencarian ini."
+}
diff --git a/Translate/i18n/search/ig.json b/Translate/i18n/search/ig.json
new file mode 100644
index 00000000..05317e20
--- /dev/null
+++ b/Translate/i18n/search/ig.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ukabia"
+ ]
+ },
+ "tux-sst-search": "Tùwe"
+}
diff --git a/Translate/i18n/search/ilo.json b/Translate/i18n/search/ilo.json
new file mode 100644
index 00000000..a3cf9481
--- /dev/null
+++ b/Translate/i18n/search/ilo.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lam-ang"
+ ]
+ },
+ "searchtranslations": "Agbiruk kadagiti patarus",
+ "tux-sst-edit": "Urnosen ti patarus",
+ "tux-sst-search": "Agbiruk",
+ "tux-sst-search-ph": "Agbiruk kadagiti patarus",
+ "tux-sst-count": "{{PLURAL:$1|Maysa a resulta a nabirukan|Dagiti $1 a resulta a nabirukan}}",
+ "tux-sst-facet-language": "Dagiti pagsasao",
+ "tux-sst-facet-group": "Dagiti grupo ti mensahe",
+ "tux-sst-nosolr-title": "Saan a magun-od ti panagbiruk",
+ "tux-sst-nosolr-body": "Daytoy a wiki ket awan ti serbisio a panagbiruk ti patarus",
+ "tux-sst-solr-offline-title": "Saan a magun-od ti panagbiruk",
+ "tux-sst-solr-offline-body": "Ti serbisio ti panagbiruk ket temporario a saan a magun-od",
+ "tux-sst-next": "Sumaruno ›",
+ "tux-sst-prev": "‹ Napalabas"
+}
diff --git a/Translate/i18n/search/inh.json b/Translate/i18n/search/inh.json
new file mode 100644
index 00000000..495c3a30
--- /dev/null
+++ b/Translate/i18n/search/inh.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Adam-Yourist",
+ "Tusholi"
+ ]
+ },
+ "tux-sst-search": "Хьалаха",
+ "tux-sst-facet-language": "Метташ",
+ "tux-sst-default": "Таржамаш"
+}
diff --git a/Translate/i18n/search/io.json b/Translate/i18n/search/io.json
new file mode 100644
index 00000000..58f128bc
--- /dev/null
+++ b/Translate/i18n/search/io.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joao Xavier"
+ ]
+ },
+ "searchtranslations": "Serchar tradukuri",
+ "tux-sst-edit": "Modifikar tradukuro",
+ "tux-sst-search": "Serchez",
+ "tux-sst-search-ph": "Serchar tradukuri",
+ "tux-sst-count": "{{PLURAL:$1|1 rezulto|$1 rezulti}} trovesis",
+ "tux-sst-facet-language": "Lingui",
+ "tux-sst-facet-group": "Grupo di mesaji",
+ "tux-sst-default": "Tradukuri",
+ "tux-sst-translated": "Tradukuri de $1",
+ "tux-sst-untranslated": "Nula tradukuro de(l) $1",
+ "tux-sst-ellipsis-untranslated": "Nula tradukuro",
+ "tux-sst-link-all-match": "Demandez omna serchata vorti.",
+ "tux-sst-match-message": "Hike montresas tradukuri qui koincidas kun irga vorto ek la serchita. $1",
+ "tux-sst-case-sensitive": "''Case sensitive''"
+}
diff --git a/Translate/i18n/search/is.json b/Translate/i18n/search/is.json
new file mode 100644
index 00000000..1d10c24f
--- /dev/null
+++ b/Translate/i18n/search/is.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sveinn í Felli"
+ ]
+ },
+ "searchtranslations": "Leita í þýðingum",
+ "tux-sst-edit": "Breyta þýðingu",
+ "tux-sst-view-foreign": "Skoða á $1",
+ "tux-sst-search": "Leita",
+ "tux-sst-search-ph": "Leita í þýðingum",
+ "tux-sst-count": "{{PLURAL:$1|En niðurstaða fannst|$1 niðurstöður fundust}}",
+ "tux-sst-facet-language": "Tungumál",
+ "tux-sst-facet-group": "Þýðingahópar",
+ "tux-sst-nosolr-title": "Leit er ekki tiltæk",
+ "tux-sst-nosolr-body": "Þetta wiki er ekki með þýðingaleitarþjónustu.",
+ "tux-sst-solr-offline-title": "Leit er ekki tiltæk",
+ "tux-sst-solr-offline-body": "Í augnablikinu er leitarþjónustan ekki tiltæk.",
+ "tux-sst-next": "Næsta ›",
+ "tux-sst-prev": "‹ Fyrra",
+ "tux-sst-default": "Þýðingar",
+ "tux-sst-translated": "Þýðingar úr $1",
+ "tux-sst-untranslated": "Engin þýðing úr $1",
+ "tux-sst-outdated": "Úreltar þýðingar frá $1",
+ "tux-sst-ellipsis-untranslated": "Engin þýðing",
+ "tux-sst-ellipsis-outdated": "Úreltar þýðingar",
+ "tux-sst-link-all-match": "Nota öll leitarorðin.",
+ "tux-sst-match-message": "Birtir þýðingar sem samsvara einhverju leitarorðanna. $1",
+ "tux-sst-case-sensitive": "Háð há/lágstöfum"
+}
diff --git a/Translate/i18n/search/it.json b/Translate/i18n/search/it.json
new file mode 100644
index 00000000..43fd732d
--- /dev/null
+++ b/Translate/i18n/search/it.json
@@ -0,0 +1,35 @@
+{
+ "@metadata": {
+ "authors": [
+ "Beta16",
+ "F. Cosoleto",
+ "Macofe",
+ "Pippinu",
+ "Sarvaturi",
+ "Statix64"
+ ]
+ },
+ "searchtranslations": "Ricerca traduzioni",
+ "tux-sst-edit": "Modifica traduzione",
+ "tux-sst-view-foreign": "Visualizza su $1",
+ "tux-sst-search": "Cerca",
+ "tux-sst-search-ph": "Cerca traduzioni",
+ "tux-sst-count": "{{PLURAL:$1|Un risultato trovato|$1 risultati trovati}}",
+ "tux-sst-facet-language": "Lingue",
+ "tux-sst-facet-group": "Gruppi di messaggi",
+ "tux-sst-nosolr-title": "Ricerca non disponibile",
+ "tux-sst-nosolr-body": "Questo wiki non ha un servizio di ricerca delle traduzioni.",
+ "tux-sst-solr-offline-title": "Ricerca non disponibile",
+ "tux-sst-solr-offline-body": "Il servizio di ricerca è temporaneamente non disponibile.",
+ "tux-sst-next": "Risultati successivi ›",
+ "tux-sst-prev": "‹ Risultati precedenti",
+ "tux-sst-default": "Traduzioni",
+ "tux-sst-translated": "Traduzioni da $1",
+ "tux-sst-untranslated": "Nessuna traduzione da $1",
+ "tux-sst-outdated": "Traduzioni non aggiornate da $1",
+ "tux-sst-ellipsis-untranslated": "Nessuna traduzione",
+ "tux-sst-ellipsis-outdated": "Traduzioni non aggiornate",
+ "tux-sst-case-sensitive": "Distingui maiuscole e minuscole",
+ "tux-sst-error-offset": "Non è possibile visualizzare ulteriori risultati. Restringi la ricerca.",
+ "tux-sst-error-language": "Questa lingua non può essere utilizzata con questo tipo di ricerca."
+}
diff --git a/Translate/i18n/search/ja.json b/Translate/i18n/search/ja.json
new file mode 100644
index 00000000..cf1e2e90
--- /dev/null
+++ b/Translate/i18n/search/ja.json
@@ -0,0 +1,36 @@
+{
+ "@metadata": {
+ "authors": [
+ "Omotecho",
+ "Otokoume",
+ "Shirayuki",
+ "Siglite3",
+ "Sujiniku"
+ ]
+ },
+ "searchtranslations": "翻訳の検索",
+ "tux-sst-edit": "翻訳を編集",
+ "tux-sst-view-foreign": "$1 で閲覧",
+ "tux-sst-search": "検索",
+ "tux-sst-search-ph": "翻訳の検索",
+ "tux-sst-count": "{{PLURAL:$1|$1 件見つかりました}}",
+ "tux-sst-facet-language": "言語",
+ "tux-sst-facet-group": "メッセージ群",
+ "tux-sst-nosolr-title": "検索は利用できません",
+ "tux-sst-nosolr-body": "このウィキには翻訳の検索サービスはありません。",
+ "tux-sst-solr-offline-title": "検索は利用できません",
+ "tux-sst-solr-offline-body": "検索サービスは一時的に利用できません。",
+ "tux-sst-next": "次 ›",
+ "tux-sst-prev": "‹ 前",
+ "tux-sst-default": "翻訳",
+ "tux-sst-translated": "$1 から翻訳済",
+ "tux-sst-untranslated": "$1 から未翻訳",
+ "tux-sst-outdated": "$1 からの翻訳が古くなっています",
+ "tux-sst-ellipsis-untranslated": "翻訳されていません",
+ "tux-sst-ellipsis-outdated": "更新されていない翻訳",
+ "tux-sst-link-all-match": "すべての検索語を含める。",
+ "tux-sst-match-message": "検索ワードのいずれかに一致する翻訳を表示しています。 $1",
+ "tux-sst-case-sensitive": "大文字・小文字を区別",
+ "tux-sst-error-offset": "これ以上の検索結果は表示できません。検索範囲を狭めてください。",
+ "tux-sst-error-language": "選択した言語はこの種の検索に使用できません。"
+}
diff --git a/Translate/i18n/search/ka.json b/Translate/i18n/search/ka.json
new file mode 100644
index 00000000..27f6b000
--- /dev/null
+++ b/Translate/i18n/search/ka.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "David1010"
+ ]
+ },
+ "searchtranslations": "თარგმანების ძიება",
+ "tux-sst-edit": "თარგმანის რედაქტირება",
+ "tux-sst-search": "ძიება",
+ "tux-sst-search-ph": "თარგმანების ძიება",
+ "tux-sst-count": "{{PLURAL:$1|ნაპოვნია ერთი შედეგი|ნაპოვნია $1 შედეგი}}",
+ "tux-sst-facet-language": "ენები",
+ "tux-sst-facet-group": "შეტყობინების ჯგუფები",
+ "tux-sst-nosolr-title": "ძიება მიუწვდომელია",
+ "tux-sst-nosolr-body": "ამ ვიკიში არ არის თარგმანების ძიების სერვისი.",
+ "tux-sst-solr-offline-title": "ძიება მიუწვდომელია",
+ "tux-sst-solr-offline-body": "ძიების სერვისი დროებით მიუწვდომელია.",
+ "tux-sst-next": "შემდეგი ›",
+ "tux-sst-prev": "‹ წინა",
+ "tux-sst-default": "თარგმანები"
+}
diff --git a/Translate/i18n/search/kaa.json b/Translate/i18n/search/kaa.json
new file mode 100644
index 00000000..b2139e5e
--- /dev/null
+++ b/Translate/i18n/search/kaa.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nurlan"
+ ]
+ },
+ "tux-sst-case-sensitive": "Háripler úlken-kishiligine bayqaǵısh"
+}
diff --git a/Translate/i18n/search/kab.json b/Translate/i18n/search/kab.json
new file mode 100644
index 00000000..adccbe24
--- /dev/null
+++ b/Translate/i18n/search/kab.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Belkacem77"
+ ]
+ },
+ "searchtranslations": "Nadi tisuqilin",
+ "tux-sst-edit": "Ẓreg tasuqilt",
+ "tux-sst-view-foreign": "Sken di $1",
+ "tux-sst-search": "Nadi",
+ "tux-sst-search-ph": "Nadi tisuqilin",
+ "tux-sst-count": "{{PLURAL:$1|0=Ulac agmuḍ|1=yiwen n ugmuḍ|$1 n igmaḍ}} yettwafen",
+ "tux-sst-facet-language": "Tutlayin",
+ "tux-sst-facet-group": "Igrawen n yiznan",
+ "tux-sst-nosolr-title": "Ulac anadi",
+ "tux-sst-nosolr-body": "Awiki-agi ur ɣur-s ara amezlu n unadi n tsuqilt.",
+ "tux-sst-solr-offline-title": "Ulac anadi",
+ "tux-sst-solr-offline-body": "Ameẓlu n unadi ulac-it akka tura.",
+ "tux-sst-next": "Ar zdat ›",
+ "tux-sst-prev": "‹ ar deffir",
+ "tux-sst-default": "Tisuqilin",
+ "tux-sst-translated": "Tisuqilin si $1",
+ "tux-sst-untranslated": "Ur yettwasuqel ara si $1",
+ "tux-sst-outdated": "Tisuqilin ifaten si $1",
+ "tux-sst-ellipsis-untranslated": "Ur yettwasuqel ara",
+ "tux-sst-ellipsis-outdated": "Tisuqilin ifaten",
+ "tux-sst-link-all-match": "Yesra akk awalen n unadi.",
+ "tux-sst-case-sensitive": "Yettqadaṛ taruẓi n usekkil"
+}
diff --git a/Translate/i18n/search/kea.json b/Translate/i18n/search/kea.json
new file mode 100644
index 00000000..c2d610df
--- /dev/null
+++ b/Translate/i18n/search/kea.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Waldyrious"
+ ]
+ },
+ "searchtranslations": "Buska tradusons",
+ "tux-sst-edit": "Muda traduson",
+ "tux-sst-view-foreign": "Odja na $1",
+ "tux-sst-search": "Buska",
+ "tux-sst-search-ph": "Buska tradusons",
+ "tux-sst-count": "{{PLURAL:$1|$1 rezultadu inkontradu}}",
+ "tux-sst-facet-language": "Línguas",
+ "tux-sst-facet-group": "Grupus di mensajens",
+ "tux-sst-nosolr-title": "Buska indispunivel",
+ "tux-sst-nosolr-body": "Es wiki ka ten un sirvisu di buska di tradusons.",
+ "tux-sst-solr-offline-title": "Buska indispunivel",
+ "tux-sst-solr-offline-body": "Sirvisu di buska ka sta dispunível nes momentu.",
+ "tux-sst-next": "Pájina siginti →",
+ "tux-sst-prev": "← Pájina antirior",
+ "tux-sst-default": "Tradusons",
+ "tux-sst-translated": "Tradusons di $1",
+ "tux-sst-untranslated": "Ninhun traduson di $1",
+ "tux-sst-outdated": "Tradusons dizatualizadu di $1",
+ "tux-sst-ellipsis-untranslated": "Sen traduson",
+ "tux-sst-ellipsis-outdated": "Tradusons dizatualizadu",
+ "tux-sst-link-all-match": "Tradusons ku tudu palabras di buska.",
+ "tux-sst-match-message": "Ta mostra tradusons ki ta inklui kualker un di kes palavra di piskiza. $1",
+ "tux-sst-case-sensitive": "Distingi letras maiúskulas di minúskulas",
+ "tux-sst-error-offset": "Ka e pusivel mostra mas rezultadus. Bu ten ki limita bus termus di buska.",
+ "tux-sst-error-language": "Es língua ka podi ser uzadu ku es tipu di piskiza."
+}
diff --git a/Translate/i18n/search/kiu.json b/Translate/i18n/search/kiu.json
new file mode 100644
index 00000000..40eae0a7
--- /dev/null
+++ b/Translate/i18n/search/kiu.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kumkumuk",
+ "Mirzali"
+ ]
+ },
+ "tux-sst-ellipsis-untranslated": "Açarnayış çıniyo",
+ "tux-sst-error-offset": "Neticê asayeyê jêdêri çinê. Kerem ke, cıcêrayışê xo teng ke.",
+ "tux-sst-error-language": "Tipê nê cıcêrayışi be nê zıwani ra nêgurenino."
+}
diff --git a/Translate/i18n/search/kjp.json b/Translate/i18n/search/kjp.json
new file mode 100644
index 00000000..53d77670
--- /dev/null
+++ b/Translate/i18n/search/kjp.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Rul1902"
+ ]
+ },
+ "searchtranslations": "မ်ုအင်းၰူ့ ဆ်ုခၠယ်",
+ "tux-sst-edit": "မ်ုအင်းတာင် ဆ်ုခၠယ်",
+ "tux-sst-view-foreign": "မ်ုယောဝ်ႋ $1 ဝယ်",
+ "tux-sst-search": "အင်းၰူ့",
+ "tux-sst-search-ph": "မ်ုအင်းၰူ့ ခၠယ်ၯင်း",
+ "tux-sst-count": "အ်ုတင်ၮေဝ်ႋ {{PLURAL:$1|၁ ၮါင်း|$1 ၮါင်း}} ဍးဝေ့ဆေဝ်ႋလှ်",
+ "tux-sst-facet-language": "ဆ်ုခၠါင်ဘာႋသာ့",
+ "tux-sst-facet-group": "လိက်ၜၠာ်ကုံရွာဲလ်ုဖး",
+ "tux-sst-nosolr-title": "ဆ်ုအင်းၰူ့ လ်ုၮေဝ်ႋသှ်ေၜး",
+ "tux-sst-next": "မေံယာႋ »",
+ "tux-sst-prev": "« မ်ုထါင်လင်ႋခါင့်",
+ "tux-sst-default": "ခၠယ့်ဖှ်ေက်ုဆာႋလ်ုဖး"
+}
diff --git a/Translate/i18n/search/kk-cyrl.json b/Translate/i18n/search/kk-cyrl.json
new file mode 100644
index 00000000..27e6f2a4
--- /dev/null
+++ b/Translate/i18n/search/kk-cyrl.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Arystanbek",
+ "СеніңШешең"
+ ]
+ },
+ "searchtranslations": "Аудармаларды іздеу",
+ "tux-sst-edit": "Аударманы өңдеу",
+ "tux-sst-view-foreign": "$1 дегеннен көру",
+ "tux-sst-search": "Іздеу",
+ "tux-sst-search-ph": "Аудармаларды іздеу",
+ "tux-sst-count": "{{PLURAL:$1|Бір нәтиже табылды|$1 нәтиже табылды}}",
+ "tux-sst-facet-language": "Тілдер",
+ "tux-sst-facet-group": "Хабарлама топтары",
+ "tux-sst-nosolr-title": "Іздеу қол жетімді емес",
+ "tux-sst-nosolr-body": "Уиикиде аударманы іздеу сервисі жоқ.",
+ "tux-sst-solr-offline-title": "Іздеу қол жетімді емес",
+ "tux-sst-solr-offline-body": "Іздеу сервисі уақытша қол жетімді емес",
+ "tux-sst-next": "Келесі →",
+ "tux-sst-prev": "‹Алдыңғы",
+ "tux-sst-default": "Аудармалар",
+ "tux-sst-translated": "$1 тілінен аудармалар",
+ "tux-sst-untranslated": "$1 тілінен аудармалар жоқ",
+ "tux-sst-outdated": "$1 тілінен жаңартылмаған аудармалар",
+ "tux-sst-ellipsis-untranslated": "Аударма жоқ",
+ "tux-sst-ellipsis-outdated": "Жаңартуды қажет ететін аудармалар",
+ "tux-sst-link-all-match": "Барлық ізделген сөздерді қажет ету.",
+ "tux-sst-match-message": "Кез келген іздеу сөздеріне сәйкес аудармалар көрсетілген. $1",
+ "tux-sst-case-sensitive": "Үлкен-кішілігін ескеру"
+}
diff --git a/Translate/i18n/search/km.json b/Translate/i18n/search/km.json
new file mode 100644
index 00000000..348daf2a
--- /dev/null
+++ b/Translate/i18n/search/km.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "គីមស៊្រុន"
+ ]
+ },
+ "searchtranslations": "ស្វែងរកការបកប្រែ",
+ "tux-sst-edit": "កែប្រែការបកប្រែ",
+ "tux-sst-view-foreign": "មើលលើ $1",
+ "tux-sst-search": "ស្វែងរក",
+ "tux-sst-search-ph": "ស្វែងរកការបកប្រែ",
+ "tux-sst-count": "រកឃើញលទ្ធផលចំនួន{{PLURAL:$1|មួយ|$1}}",
+ "tux-sst-facet-language": "ភាសា",
+ "tux-sst-facet-group": "ក្រុមសារ",
+ "tux-sst-nosolr-title": "មិនអាចស្វែងរកបានទេ",
+ "tux-sst-nosolr-body": "វិគីនេះគ្មានសេវាកម្មស្វែងរកការបកប្រែទេ។",
+ "tux-sst-solr-offline-title": "មិនអាចស្វែងរកបានទេ",
+ "tux-sst-solr-offline-body": "សេវាកម្មស្វែងរកមិនអាចប្រើប្រាស់បានទេនៅពេលនេះ។",
+ "tux-sst-next": "បន្ទាប់ ›",
+ "tux-sst-prev": "‹ មុន",
+ "tux-sst-default": "ការបកប្រែ",
+ "tux-sst-translated": "ការបកប្រែពី $1",
+ "tux-sst-untranslated": "គ្មានការបកប្រែពី $1 ទេ",
+ "tux-sst-outdated": "ការបកប្រែហួសសម័យពី $1",
+ "tux-sst-ellipsis-untranslated": "គ្មានការបកប្រែ",
+ "tux-sst-ellipsis-outdated": "ការបកប្រែហួសសម័យ",
+ "tux-sst-link-all-match": "ត្រូវការពាក្យស្វែងរកទាំងអស់។",
+ "tux-sst-match-message": "បង្ហាញការបកប្រែដែលត្រូវគ្នានឹងពាក្យស្វែករកណាមួយ។ $1",
+ "tux-sst-case-sensitive": "គិតអក្សរតូចឬធំ"
+}
diff --git a/Translate/i18n/search/kn.json b/Translate/i18n/search/kn.json
new file mode 100644
index 00000000..2dd0488c
--- /dev/null
+++ b/Translate/i18n/search/kn.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "VASANTH S.N."
+ ]
+ },
+ "searchtranslations": "ಭಾಷಾಂತರಗಳನ್ನು ಹುಡುಕಿ",
+ "tux-sst-edit": "ಅನುವಾದಗಳನ್ನು ಸಂಪಾದಿಸಿ",
+ "tux-sst-search": "ಹುಡುಕು",
+ "tux-sst-search-ph": "ಭಾಷಾಂತರಗಳನ್ನು ಹುಡುಕಿ",
+ "tux-sst-facet-language": "ಭಾಷೆಗಳು"
+}
diff --git a/Translate/i18n/search/ko.json b/Translate/i18n/search/ko.json
new file mode 100644
index 00000000..4520e786
--- /dev/null
+++ b/Translate/i18n/search/ko.json
@@ -0,0 +1,35 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nuevo Paso",
+ "SeoJeongHo",
+ "Ykhwong",
+ "아라"
+ ]
+ },
+ "searchtranslations": "번역 검색",
+ "tux-sst-edit": "번역 편집",
+ "tux-sst-view-foreign": "$1에서 보기",
+ "tux-sst-search": "검색",
+ "tux-sst-search-ph": "번역 검색",
+ "tux-sst-count": "{{PLURAL:$1|결과 한 개를 찾았습니다|결과 $1개를 찾았습니다}}",
+ "tux-sst-facet-language": "언어",
+ "tux-sst-facet-group": "메시지 그룹",
+ "tux-sst-nosolr-title": "검색을 사용할 수 없음",
+ "tux-sst-nosolr-body": "이 위키는 번역 검색 서비스가 없습니다.",
+ "tux-sst-solr-offline-title": "검색을 사용할 수 없음",
+ "tux-sst-solr-offline-body": "검색 서비스를 일시적으로 사용할 수 없습니다.",
+ "tux-sst-next": "다음 ›",
+ "tux-sst-prev": "‹ 이전",
+ "tux-sst-default": "번역",
+ "tux-sst-translated": "$1에서 번역",
+ "tux-sst-untranslated": "$1에서의 번역 없음",
+ "tux-sst-outdated": "$1에서 옮긴 오래된 번역",
+ "tux-sst-ellipsis-untranslated": "번역 없음",
+ "tux-sst-ellipsis-outdated": "오래된 번역",
+ "tux-sst-link-all-match": "모든 검색 낱말이 필요합니다.",
+ "tux-sst-match-message": "검색 낱말과 일치하는 번역을 보여줍니다. $1",
+ "tux-sst-case-sensitive": "대소문자 구분",
+ "tux-sst-error-offset": "더 많은 검색 결과를 표시할 수 없습니다. 검색 조건을 좁혀 주십시오.",
+ "tux-sst-error-language": "이 언어는 이 유형의 검색에 사용할 수 없습니다."
+}
diff --git a/Translate/i18n/search/krc.json b/Translate/i18n/search/krc.json
new file mode 100644
index 00000000..edf2406f
--- /dev/null
+++ b/Translate/i18n/search/krc.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ernác",
+ "Iltever"
+ ]
+ },
+ "tux-sst-facet-language": "Тилле"
+}
diff --git a/Translate/i18n/search/krl.json b/Translate/i18n/search/krl.json
new file mode 100644
index 00000000..bc4e2efd
--- /dev/null
+++ b/Translate/i18n/search/krl.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Likopiän tyttö",
+ "Mashoi7"
+ ]
+ },
+ "tux-sst-default": "Kiännökšet",
+ "tux-sst-untranslated": "Kiändämättäh kielespäi $1"
+}
diff --git a/Translate/i18n/search/ksh.json b/Translate/i18n/search/ksh.json
new file mode 100644
index 00000000..6e2ec8ae
--- /dev/null
+++ b/Translate/i18n/search/ksh.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "DannyS712",
+ "Purodha"
+ ]
+ },
+ "searchtranslations": "Övversäzonge söhke",
+ "tux-sst-edit": "Di Övversäzong änndere",
+ "tux-sst-view-foreign": "Op $1 beloohre",
+ "tux-sst-search": "Lohß jonn!",
+ "tux-sst-search-ph": "Övversäzonge söhke",
+ "tux-sst-count": "{{PLURAL:$1|Eine|$1|Nix}} jefonge",
+ "tux-sst-facet-language": "Schprohche",
+ "tux-sst-facet-group": "Nohreeschtejroppe",
+ "tux-sst-nosolr-title": "Söhke es nit müjjelesch.",
+ "tux-sst-nosolr-body": "En heh däm Wiki kammer nit noh Översäzonge söhke.",
+ "tux-sst-solr-offline-title": "Söhke es nit müjjelesch.",
+ "tux-sst-solr-offline-body": "Et Söhke es em Momang nit müjjelesch.",
+ "tux-sst-next": "De Nähkße ›",
+ "tux-sst-prev": "‹ De Förrėje",
+ "tux-sst-default": "Övversäzonge",
+ "tux-sst-translated": "Översäzonge us em $1",
+ "tux-sst-untranslated": "Kein Översäzonge us em $1",
+ "tux-sst-outdated": "Övverhollte Översäzonge us em $1",
+ "tux-sst-ellipsis-untranslated": "Kein Övversäzong",
+ "tux-sst-ellipsis-outdated": "Övverhollte Översäzonge",
+ "tux-sst-link-all-match": "Donn noh all dä Wööter soöhke.",
+ "tux-sst-match-message": "Mer zeije Översäzonge, di winneschsdens eij Woot vun all dä Wööter änthallde.\n$1",
+ "tux-sst-case-sensitive": "Jruhs- un Kleinschreff ongerscheijde"
+}
diff --git a/Translate/i18n/search/ksw.json b/Translate/i18n/search/ksw.json
new file mode 100644
index 00000000..67ec41f2
--- /dev/null
+++ b/Translate/i18n/search/ksw.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "SawJaemin"
+ ]
+ },
+ "searchtranslations": "ကွၢ်ဃုတၢ်ကျိာ်ထံတဖၣ်",
+ "tux-sst-search-ph": "ကွၢ်ဃုတၢ်ကျိာ်ထံတဖၣ်",
+ "tux-sst-default": "တၢ်ကျိာ်ထံတဖၣ်",
+ "tux-sst-translated": "တၢ်ကျိာ်ထံလၢ $1",
+ "tux-sst-untranslated": "တၢ်ကျိာ်ထံလၢ $1 တအိၣ်ဘၣ်",
+ "tux-sst-outdated": "တၢ်ကျိာ်ထံဒ့းလၢၤလၢ $1",
+ "tux-sst-ellipsis-untranslated": "တၢ်ကျိာ်ထံတအိၣ်ဘၣ်",
+ "tux-sst-ellipsis-outdated": "တၢ်ကျိာ်ထံတဖၣ်လၢအဒ့းလၢၤ"
+}
diff --git a/Translate/i18n/search/ku-latn.json b/Translate/i18n/search/ku-latn.json
new file mode 100644
index 00000000..ec101e9c
--- /dev/null
+++ b/Translate/i18n/search/ku-latn.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bikarhêner",
+ "George Animal"
+ ]
+ },
+ "searchtranslations": "Li wergeran bigere",
+ "tux-sst-edit": "Wergerê biguherîne",
+ "tux-sst-search": "Lêgerîn",
+ "tux-sst-search-ph": "Li wergeran bigere",
+ "tux-sst-count": "{{PLURAL:$1|Encamek hat dîtin|$1 encam hatin dîtin}}",
+ "tux-sst-facet-language": "Ziman",
+ "tux-sst-facet-group": "Komên peyaman",
+ "tux-sst-nosolr-title": "Lêgerîn tune ye",
+ "tux-sst-solr-offline-title": "Lêgerîn tune ye",
+ "tux-sst-next": "Pêşve›",
+ "tux-sst-prev": "Paşve",
+ "tux-sst-default": "Werger",
+ "tux-sst-translated": "Wergerên ji $1",
+ "tux-sst-case-sensitive": "Nivîsîna biçûk û mezin"
+}
diff --git a/Translate/i18n/search/lag.json b/Translate/i18n/search/lag.json
new file mode 100644
index 00000000..561b498f
--- /dev/null
+++ b/Translate/i18n/search/lag.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Baba Tabita"
+ ]
+ },
+ "tux-sst-view-foreign": "Laangɨra kwa $1",
+ "tux-sst-search": "Saakɨra",
+ "tux-sst-facet-language": "Ndʉʉsɨka"
+}
diff --git a/Translate/i18n/search/lb.json b/Translate/i18n/search/lb.json
new file mode 100644
index 00000000..8f6a84dc
--- /dev/null
+++ b/Translate/i18n/search/lb.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "Robby"
+ ]
+ },
+ "searchtranslations": "Iwwersetzunge sichen",
+ "tux-sst-edit": "Iwwersetzung änneren",
+ "tux-sst-view-foreign": "Op $1 kucken",
+ "tux-sst-search": "Sichen",
+ "tux-sst-search-ph": "Iwwersetzunge sichen",
+ "tux-sst-count": "{{PLURAL:$1|Ee Resultat|$1 Resultater}} fonnt",
+ "tux-sst-facet-language": "Sproochen",
+ "tux-sst-facet-group": "Gruppe vu Messagen",
+ "tux-sst-nosolr-title": "Sichen ass net disponibel",
+ "tux-sst-nosolr-body": "Dës Wiki huet d'Sichfonctioun vun den Iwwersetzungen net.",
+ "tux-sst-solr-offline-title": "Sichen ass net disponibel",
+ "tux-sst-solr-offline-body": "D'Sichfonctioun ass temporär net disponibel.",
+ "tux-sst-next": "Nächst ›",
+ "tux-sst-prev": "‹ Vireg",
+ "tux-sst-default": "Iwwersetzungen",
+ "tux-sst-translated": "Iwwersetzunge vu(n) $1",
+ "tux-sst-untranslated": "Keng Iwwersetzung vu(n) $1",
+ "tux-sst-outdated": "Vereelzt Iwwersetzung vu(n) $1",
+ "tux-sst-ellipsis-untranslated": "Keng Iwwersetzung",
+ "tux-sst-ellipsis-outdated": "Vereelzt Iwwersetzungen",
+ "tux-sst-link-all-match": "All Sichwierder verlaangen.",
+ "tux-sst-match-message": "Iwwersetzunge weise mat engem vun de gesichte Wierder. $1",
+ "tux-sst-case-sensitive": "Ënnerscheed tëscht groussen a klenge Buschtawen"
+}
diff --git a/Translate/i18n/search/lfn.json b/Translate/i18n/search/lfn.json
new file mode 100644
index 00000000..beb61b57
--- /dev/null
+++ b/Translate/i18n/search/lfn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Robin van der Vliet"
+ ]
+ },
+ "tux-sst-facet-language": "Linguas"
+}
diff --git a/Translate/i18n/search/lki.json b/Translate/i18n/search/lki.json
new file mode 100644
index 00000000..a7f33cc3
--- /dev/null
+++ b/Translate/i18n/search/lki.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hosseinblue",
+ "Lakzon"
+ ]
+ },
+ "searchtranslations": "مِنِی کردن ترجمةل",
+ "tux-sst-edit": "دةسکاری ترجمه",
+ "tux-sst-view-foreign": "مشاهده در $1",
+ "tux-sst-search": "مِنِی کِردِن(گێردین)",
+ "tux-sst-search-ph": "مِنِی کردن ترجمةل",
+ "tux-sst-count": "{{PLURAL:$1|0=هیچ نتیجه‌ای یافت نشد|یک نتیجه یافت شد|$1 نتیجه یافت شد}}",
+ "tux-sst-facet-language": "زوونەل",
+ "tux-sst-facet-group": "گروه‌های پیام",
+ "tux-sst-nosolr-title": "جستجوی ناموجود است",
+ "tux-sst-nosolr-body": "این ویکی خدمات جستجوی ترجمه ندارد.",
+ "tux-sst-solr-offline-title": "جستجوی ناموجود است",
+ "tux-sst-solr-offline-body": "خدمت جستجو به‌صورت موقت ناموجود است.",
+ "tux-sst-next": "بچۆ نووآ←",
+ "tux-sst-prev": "‹ بووه دؤما/پیشین",
+ "tux-sst-default": "چاوواشەبیەل",
+ "tux-sst-translated": "ترجمه إژ $1"
+}
diff --git a/Translate/i18n/search/lkt.json b/Translate/i18n/search/lkt.json
new file mode 100644
index 00000000..24bb3d4f
--- /dev/null
+++ b/Translate/i18n/search/lkt.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "R12ntech"
+ ]
+ },
+ "tux-sst-search": "Wóle"
+}
diff --git a/Translate/i18n/search/lrc.json b/Translate/i18n/search/lrc.json
new file mode 100644
index 00000000..4f0e52de
--- /dev/null
+++ b/Translate/i18n/search/lrc.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mogoeilor"
+ ]
+ },
+ "searchtranslations": "پی جوری لرسنيا",
+ "tux-sst-edit": "ويرايشت لرسن",
+ "tux-sst-search": "پی جوری",
+ "tux-sst-search-ph": "پی جوری لرسنيا",
+ "tux-sst-facet-language": "زونيا",
+ "tux-sst-facet-group": "پيغوم گرويا",
+ "tux-sst-nosolr-title": "پی جوری د دسرس نئ",
+ "tux-sst-solr-offline-title": "پی جوری د دسرس نئ",
+ "tux-sst-next": "نتيجيا نيايی",
+ "tux-sst-prev": "نتيجيا دمايی"
+}
diff --git a/Translate/i18n/search/lt.json b/Translate/i18n/search/lt.json
new file mode 100644
index 00000000..cc43d93f
--- /dev/null
+++ b/Translate/i18n/search/lt.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Eitvys200"
+ ]
+ },
+ "searchtranslations": "Ieškoti vertimų",
+ "tux-sst-edit": "Redaguoti vertimą",
+ "tux-sst-view-foreign": "Žiūrėti $1",
+ "tux-sst-search": "Ieškoti",
+ "tux-sst-search-ph": "Ieškoti vertimų",
+ "tux-sst-count": "{{PLURAL:$1|Rastas vienas rezultatas|Rasta $1 rezultatų}}",
+ "tux-sst-facet-language": "Kalbos",
+ "tux-sst-facet-group": "Pranešimo grupės",
+ "tux-sst-nosolr-title": "Paieška nepasiekiama",
+ "tux-sst-nosolr-body": "Ši viki neturi vertimų paieškos paslaugos.",
+ "tux-sst-solr-offline-title": "Paieška nepasiekiama",
+ "tux-sst-solr-offline-body": "Paieškos paslauga laikinai neprieinama.",
+ "tux-sst-next": "Kitas ›",
+ "tux-sst-prev": "‹ Ankstesnis",
+ "tux-sst-default": "Vertimai",
+ "tux-sst-translated": "Vertimai iš $1",
+ "tux-sst-untranslated": "nėra vertimų iš $1",
+ "tux-sst-outdated": "Pasenę vertimai iš $1",
+ "tux-sst-ellipsis-untranslated": "Nėra vertimų",
+ "tux-sst-ellipsis-outdated": "Pasenę vertimai",
+ "tux-sst-link-all-match": "Reikalauti visų paieškos žodžių."
+}
diff --git a/Translate/i18n/search/lv.json b/Translate/i18n/search/lv.json
new file mode 100644
index 00000000..66b52f17
--- /dev/null
+++ b/Translate/i18n/search/lv.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Papuass"
+ ]
+ },
+ "searchtranslations": "Meklēt tulkojumus",
+ "tux-sst-edit": "Labot tulkojumu",
+ "tux-sst-search": "Meklēt",
+ "tux-sst-search-ph": "Meklēt tulkojumus",
+ "tux-sst-count": "{{PLURAL:$1|$1 rezultāti atrasti|$1 rezultāts atrasts|$1 rezultāti atrasti}}",
+ "tux-sst-facet-language": "Valodas",
+ "tux-sst-nosolr-title": "Meklēšana nav pieejama",
+ "tux-sst-solr-offline-title": "Meklēšana nav pieejama"
+}
diff --git a/Translate/i18n/search/lzh.json b/Translate/i18n/search/lzh.json
new file mode 100644
index 00000000..3bfe7c01
--- /dev/null
+++ b/Translate/i18n/search/lzh.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jason924tw"
+ ]
+ },
+ "tux-sst-facet-language": "語"
+}
diff --git a/Translate/i18n/search/mk.json b/Translate/i18n/search/mk.json
new file mode 100644
index 00000000..2998e42f
--- /dev/null
+++ b/Translate/i18n/search/mk.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bjankuloski06"
+ ]
+ },
+ "searchtranslations": "Пребарување на преводи",
+ "tux-sst-edit": "Уреди превод",
+ "tux-sst-view-foreign": "Пог. на $1",
+ "tux-sst-search": "Пребарај",
+ "tux-sst-search-ph": "Пребарајте преводи",
+ "tux-sst-count": "{{PLURAL:$1|Пронајдена е една ставка|Пронајдени се $1 ставки}}",
+ "tux-sst-facet-language": "Јазици",
+ "tux-sst-facet-group": "Групи на пораки",
+ "tux-sst-nosolr-title": "Пребарувањето е недостапно",
+ "tux-sst-nosolr-body": "Ова вики нема пребарувач.",
+ "tux-sst-solr-offline-title": "Пребарувањето е недостапно",
+ "tux-sst-solr-offline-body": "Пребарувањето е привремено недостапно.",
+ "tux-sst-next": "Следно ›",
+ "tux-sst-prev": "‹ Претходно",
+ "tux-sst-default": "Преводи",
+ "tux-sst-translated": "Преводи од $1",
+ "tux-sst-untranslated": "Нема превод од $1",
+ "tux-sst-outdated": "Застарени преводи од $1",
+ "tux-sst-ellipsis-untranslated": "Нема превод",
+ "tux-sst-ellipsis-outdated": "Застарени преводи",
+ "tux-sst-link-all-match": "Дај за пребараното како целина",
+ "tux-sst-match-message": "Прикажани се преводите што одговараат на било кој од пребараните зборови. $1",
+ "tux-sst-case-sensitive": "Разликувај големи/мали букви",
+ "tux-sst-error-offset": "Не можам да прикажам повеќе исходни ставки. Уточнете го пребарувањето.",
+ "tux-sst-error-language": "Овој јазик не може да се користи за ваков вид пребарување."
+}
diff --git a/Translate/i18n/search/mnw.json b/Translate/i18n/search/mnw.json
new file mode 100644
index 00000000..22c29298
--- /dev/null
+++ b/Translate/i18n/search/mnw.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "咽頭べさ"
+ ]
+ },
+ "tux-sst-default": "ကၠာဲဘာသာဂမၠိုင်",
+ "tux-sst-translated": "$1 နူ ကၠာဲဘာသာဂမၠိုင်"
+}
diff --git a/Translate/i18n/search/mr.json b/Translate/i18n/search/mr.json
new file mode 100644
index 00000000..f81036f2
--- /dev/null
+++ b/Translate/i18n/search/mr.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "V.narsikar"
+ ]
+ },
+ "searchtranslations": "भाषांतर शोधा",
+ "tux-sst-edit": "भाषांतर संपादा",
+ "tux-sst-view-foreign": "$1 वर पहा",
+ "tux-sst-search": "शोधा",
+ "tux-sst-search-ph": "भाषांतर शोधा",
+ "tux-sst-count": "{{PLURAL:$1|$1 निकाल सापडला/ले}}",
+ "tux-sst-facet-language": "भाषा",
+ "tux-sst-facet-group": "संदेश गट",
+ "tux-sst-nosolr-title": "'शोध' उपलब्ध नाही",
+ "tux-sst-nosolr-body": "या विकिवर 'भाषांतर शोध सेवा' नाही.",
+ "tux-sst-solr-offline-title": "'शोध' उपलब्ध नाही",
+ "tux-sst-solr-offline-body": "'शोध' सेवा तात्पुरती अनुपलब्ध आहे.",
+ "tux-sst-next": "पुढील >",
+ "tux-sst-prev": "< मागील",
+ "tux-sst-default": "भाषांतरे",
+ "tux-sst-translated": "$1 पासुनची भाषांतरे",
+ "tux-sst-untranslated": "$1 पासूनची भाषांतरे नकोत",
+ "tux-sst-outdated": "$1 पासुनची कालबाह्य भाषांतरे",
+ "tux-sst-ellipsis-untranslated": "भाषांतर नाही",
+ "tux-sst-ellipsis-outdated": "कालबाह्य भाषांतरे",
+ "tux-sst-link-all-match": "सर्व शोध-शब्द हवेत.",
+ "tux-sst-match-message": "कोणत्याही शोधशब्दाशी जुळणारी भाषांतरे दाखवित आहे. $1"
+}
diff --git a/Translate/i18n/search/ms.json b/Translate/i18n/search/ms.json
new file mode 100644
index 00000000..04a16000
--- /dev/null
+++ b/Translate/i18n/search/ms.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "Anakmalaysia"
+ ]
+ },
+ "searchtranslations": "Cari terjemahan",
+ "tux-sst-edit": "Sunting terjemahan",
+ "tux-sst-search": "Cari",
+ "tux-sst-search-ph": "Cari terjemahan",
+ "tux-sst-count": "$1 hasil dijumpai",
+ "tux-sst-facet-language": "Bahasa",
+ "tux-sst-facet-group": "Message groups",
+ "tux-sst-nosolr-title": "Tidak boleh mencari",
+ "tux-sst-nosolr-body": "Wiki ini tiada ciri mencari terjemahan.",
+ "tux-sst-solr-offline-title": "Tidak boleh mencari",
+ "tux-sst-solr-offline-body": "Perkhidmatan pencarian tidak disediakan buat sementara waktu.",
+ "tux-sst-next": "Hasil berikutnya",
+ "tux-sst-prev": "Hasil terdahulu"
+}
diff --git a/Translate/i18n/search/mt.json b/Translate/i18n/search/mt.json
new file mode 100644
index 00000000..45c5dd9c
--- /dev/null
+++ b/Translate/i18n/search/mt.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "ToniSant"
+ ]
+ },
+ "tux-sst-facet-language": "Lingwi"
+}
diff --git a/Translate/i18n/search/mwl.json b/Translate/i18n/search/mwl.json
new file mode 100644
index 00000000..af729ddc
--- /dev/null
+++ b/Translate/i18n/search/mwl.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Athena in Wonderland",
+ "MokaAkashiyaPT"
+ ]
+ },
+ "tux-sst-default": "Traduçones"
+}
diff --git a/Translate/i18n/search/my.json b/Translate/i18n/search/my.json
new file mode 100644
index 00000000..5aa89cb6
--- /dev/null
+++ b/Translate/i18n/search/my.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dr Lotus Black",
+ "Ninjastrikers"
+ ]
+ },
+ "searchtranslations": "ဘာသာပြန်များ ရှာဖွေရန်",
+ "tux-sst-edit": "ဘာသာပြန်ကို ပြင်ဆင်ရန်",
+ "tux-sst-view-foreign": "$1 တွင် ကြည့်ရန်",
+ "tux-sst-search": "ရှာဖွေရန်",
+ "tux-sst-search-ph": "ဘာသာပြန်များ ရှာဖွေရန်",
+ "tux-sst-count": "ရလဒ် {{PLURAL:$1|၁ ခု|$1 ခု}} တွေ့ရှိခဲ့သည်",
+ "tux-sst-facet-language": "ဘာသာစကားများ",
+ "tux-sst-facet-group": "မက်ဆေ့အုပ်စုများ",
+ "tux-sst-nosolr-title": "ရှာဖွေခြင်း မရရှိနိုင်ပါ",
+ "tux-sst-nosolr-body": "ဤဝီကီတွင် ဘာသာပြန် ရှာဖွေရေးဝန်ဆောင်မှု မရှိပါ။",
+ "tux-sst-solr-offline-title": "ရှာဖွေခြင်း မရရှိနိုင်ပါ",
+ "tux-sst-solr-offline-body": "ရှာဖွေရေး ဝန်ဆောင်မှု ယာယီ မရရှိနိုင်ပါ။",
+ "tux-sst-next": "ရှေ့ »",
+ "tux-sst-prev": "« ယခင်က",
+ "tux-sst-default": "ဘာသာပြန်များ",
+ "tux-sst-translated": "$1 မှ ဘာသာပြန်များ",
+ "tux-sst-untranslated": "$1 မှ ဘာသာပြန်များ မရှိပါ",
+ "tux-sst-outdated": "$1 မှ ခေတ်နောက်ကျသော ဘာသာပြန်များ",
+ "tux-sst-ellipsis-untranslated": "ဘာသာပြန်များ မရှိပါ",
+ "tux-sst-ellipsis-outdated": "ခေတ်နောက်ကျသော ဘာသာပြန်များ",
+ "tux-sst-link-all-match": "ရှာဖွေစကားလုံးများအားလုံး လိုအပ်သည်။",
+ "tux-sst-match-message": "ရှာဖွေစကားလုံးများ၏ ကိုက်ညီသော မည်သည့်ဘာသာပြန်များကိုမဆို ပြသနေသည်။ $1",
+ "tux-sst-case-sensitive": "စာလုံးအကြီးအသေး အတိမ်းစောင်းမခံ"
+}
diff --git a/Translate/i18n/search/nah.json b/Translate/i18n/search/nah.json
new file mode 100644
index 00000000..b7d5e577
--- /dev/null
+++ b/Translate/i18n/search/nah.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Akapochtli",
+ "Languaeditor"
+ ]
+ },
+ "tux-sst-search": "Xiktemo",
+ "tux-sst-default": "Tlahtolkwapalistli"
+}
diff --git a/Translate/i18n/search/nb.json b/Translate/i18n/search/nb.json
new file mode 100644
index 00000000..fbd63d39
--- /dev/null
+++ b/Translate/i18n/search/nb.json
@@ -0,0 +1,33 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jon Harald Søby",
+ "Kingu"
+ ]
+ },
+ "searchtranslations": "Søk i oversettelser",
+ "tux-sst-edit": "Rediger oversettelse",
+ "tux-sst-view-foreign": "Vis på $1",
+ "tux-sst-search": "Søk",
+ "tux-sst-search-ph": "Søk i oversettelser",
+ "tux-sst-count": "{{PLURAL:$1|Ett resultat|$1 resultater}} funnet",
+ "tux-sst-facet-language": "Språk",
+ "tux-sst-facet-group": "Beskjedgrupper",
+ "tux-sst-nosolr-title": "Søk utilgjengelig",
+ "tux-sst-nosolr-body": "Denne wikien har ikke tjenesten for oversettelsessøk.",
+ "tux-sst-solr-offline-title": "Søk utilgjengelig",
+ "tux-sst-solr-offline-body": "Søketjenesten er midlertidig utilgjengelig.",
+ "tux-sst-next": "Neste >",
+ "tux-sst-prev": "‹ Forrige",
+ "tux-sst-default": "Oversettelser",
+ "tux-sst-translated": "Oversettelser fra $1",
+ "tux-sst-untranslated": "Ingen oversettelse fra $1",
+ "tux-sst-outdated": "Utdaterte oversettelser fra $1",
+ "tux-sst-ellipsis-untranslated": "Ingen oversettelse",
+ "tux-sst-ellipsis-outdated": "Utdaterte oversettelser",
+ "tux-sst-link-all-match": "Krev alle søkeord.",
+ "tux-sst-match-message": "Viser oversettelser som matcher noen søkeord. $1",
+ "tux-sst-case-sensitive": "Skill mellom store og små bokstaver",
+ "tux-sst-error-offset": "Ingen flere søkeresultater kan vises. Begrens søket ditt.",
+ "tux-sst-error-language": "Dette språket kan ikke brukes for denne typen søk."
+}
diff --git a/Translate/i18n/search/ne.json b/Translate/i18n/search/ne.json
new file mode 100644
index 00000000..e3a13921
--- /dev/null
+++ b/Translate/i18n/search/ne.json
@@ -0,0 +1,36 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bada Kaji",
+ "NehalDaveND",
+ "Nirajan pant",
+ "बडा काजी",
+ "हिमाल सुबेदी"
+ ]
+ },
+ "searchtranslations": "अनुवादहरू खोज्नुहोस्",
+ "tux-sst-edit": "अनुवाद सम्पादन गर्नुहोस्",
+ "tux-sst-view-foreign": "$1मा हेर्नुहोस्",
+ "tux-sst-search": "खोज्नुहोस्",
+ "tux-sst-search-ph": "अनुवादहरू खोज्नुहोस्",
+ "tux-sst-count": "{{PLURAL:$1|एउटा नतिजा भेटियो|$1 नतिजाहरू फेला पर्यो}}",
+ "tux-sst-facet-language": "भाषाहरू",
+ "tux-sst-facet-group": "सन्देश समूहहरू",
+ "tux-sst-nosolr-title": "खोजी उपलब्ध छैन",
+ "tux-sst-nosolr-body": "यो विकिमा अनुवाद खोज सेवा छैन।",
+ "tux-sst-solr-offline-title": "खोजी उपलब्ध छैन",
+ "tux-sst-solr-offline-body": "खोजी सेवा अस्थायी रूपमा उपलब्ध छैन।",
+ "tux-sst-next": "अर्को ›",
+ "tux-sst-prev": "‹ पछिल्लो",
+ "tux-sst-default": "अनुवादहरू",
+ "tux-sst-translated": "$1बाट अनुवादहरू",
+ "tux-sst-untranslated": "$1बाट कुनै अनुवाद छैन",
+ "tux-sst-outdated": "$1बाट पुरानो अनुवादहरू",
+ "tux-sst-ellipsis-untranslated": "कुनै अनुवाद छैन",
+ "tux-sst-ellipsis-outdated": "पुराना अनुवादहरू",
+ "tux-sst-link-all-match": "सबै खोज शब्दहरू चाहिन्छ।",
+ "tux-sst-match-message": "कुनै पनि खोज शब्दहरूसँग मेल खाने अनुवादहरू देखाउँदै। $1",
+ "tux-sst-case-sensitive": "केस संवेदनशील",
+ "tux-sst-error-offset": "थप खोज परिणामहरू देखाउन सकिँदैन। कृपया आफ्नो खोज संकुचित गर्नुहोस्।",
+ "tux-sst-error-language": "यस प्रकारको खोजमा यो भाषा प्रयोग गर्न सकिँदैन।"
+}
diff --git a/Translate/i18n/search/nl.json b/Translate/i18n/search/nl.json
new file mode 100644
index 00000000..985490cc
--- /dev/null
+++ b/Translate/i18n/search/nl.json
@@ -0,0 +1,36 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mainframe98",
+ "McDutchie",
+ "Robin van der Vliet",
+ "Robin0van0der0vliet",
+ "Siebrand",
+ "Sjoerddebruin"
+ ]
+ },
+ "searchtranslations": "Vertalingen zoeken",
+ "tux-sst-edit": "Vertaling bewerken",
+ "tux-sst-view-foreign": "Op $1 bekijken",
+ "tux-sst-search": "Zoeken",
+ "tux-sst-search-ph": "Vertalingen zoeken",
+ "tux-sst-count": "{{PLURAL:$1|Eén resultaat|$1 resultaten}} gevonden",
+ "tux-sst-facet-language": "Talen",
+ "tux-sst-facet-group": "Berichtengroepen",
+ "tux-sst-nosolr-title": "Zoeken is niet beschikbaar",
+ "tux-sst-nosolr-body": "Deze wiki heeft geen dienst om vertalingen te zoeken.",
+ "tux-sst-solr-offline-title": "Zoeken is niet beschikbaar",
+ "tux-sst-solr-offline-body": "De zoekdienst is tijdelijk niet beschikbaar.",
+ "tux-sst-next": "Volgende ›",
+ "tux-sst-prev": "‹ Vorige",
+ "tux-sst-default": "Vertalingen",
+ "tux-sst-translated": "Vertalingen uit het $1",
+ "tux-sst-untranslated": "Geen vertalingen voor $1",
+ "tux-sst-outdated": "Verouderde vertalingen voor $1",
+ "tux-sst-ellipsis-untranslated": "Geen vertaling",
+ "tux-sst-ellipsis-outdated": "Verouderde vertalingen",
+ "tux-sst-link-all-match": "De aanwezigheid van alle zoektermen verplichten.",
+ "tux-sst-match-message": "Toon vertalingen die een van de zoektermen bevatten. $1",
+ "tux-sst-case-sensitive": "Hoofdlettergevoelig",
+ "tux-sst-error-language": "Deze taal kan niet worden gebruikt met dit type zoekopdracht."
+}
diff --git a/Translate/i18n/search/nn.json b/Translate/i18n/search/nn.json
new file mode 100644
index 00000000..b03a2b72
--- /dev/null
+++ b/Translate/i18n/search/nn.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Njardarlogar"
+ ]
+ },
+ "searchtranslations": "Søk i omsetjingar",
+ "tux-sst-edit": "Endra omsetjing",
+ "tux-sst-search": "Søk",
+ "tux-sst-search-ph": "Søk i omsetjingar",
+ "tux-sst-count": "Fann {{PLURAL:$1|eitt|$1}} resultat",
+ "tux-sst-facet-language": "Språk",
+ "tux-sst-facet-group": "Meldingsgrupper",
+ "tux-sst-nosolr-title": "Søket er ikkje tilgjengeleg",
+ "tux-sst-nosolr-body": "Denne wikien har ikkje eit omsetjingssøk",
+ "tux-sst-solr-offline-title": "Søket er ikkje tilgjengeleg",
+ "tux-sst-solr-offline-body": "Søket er mellombels utilgjengeleg",
+ "tux-sst-next": "Neste >",
+ "tux-sst-prev": "‹ Førre",
+ "tux-sst-default": "Omsetjingar",
+ "tux-sst-translated": "Omsetjingar frå $1",
+ "tux-sst-untranslated": "Inga omsetjing frå $1",
+ "tux-sst-outdated": "Utdaterte omsetjingar frå $1",
+ "tux-sst-ellipsis-untranslated": "Inga omsetjing",
+ "tux-sst-ellipsis-outdated": "Utdaterte omsetjingar",
+ "tux-sst-link-all-match": "Krev alle søkjeord.",
+ "tux-sst-match-message": "Viser omsetjingar som passar med eitt eller fleire av søkjeorda. $1",
+ "tux-sst-case-sensitive": "Skil mellom store og små bokstavar"
+}
diff --git a/Translate/i18n/search/oc.json b/Translate/i18n/search/oc.json
new file mode 100644
index 00000000..3df21682
--- /dev/null
+++ b/Translate/i18n/search/oc.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cedric31"
+ ]
+ },
+ "searchtranslations": "Recèrca de traduccions",
+ "tux-sst-edit": "Modificar la traduccion",
+ "tux-sst-search": "Recercar",
+ "tux-sst-search-ph": "Recèrca de traduccions",
+ "tux-sst-count": "{{PLURAL:$1|0=Cap de resultat pas trobat|1=Un resultat trobat|$1 resultats trobats}}",
+ "tux-sst-facet-language": "Lengas",
+ "tux-sst-facet-group": "Gropes de messatge",
+ "tux-sst-nosolr-title": "Recèrca indisponibla",
+ "tux-sst-prev": "< Precedent",
+ "tux-sst-default": "Traduccions",
+ "tux-sst-translated": "Traduccions de $1",
+ "tux-sst-untranslated": "Pas encara traduits de $1",
+ "tux-sst-outdated": "Traduccions perimidas a partir de $1",
+ "tux-sst-ellipsis-outdated": "Traduccions obsolètas",
+ "tux-sst-link-all-match": "Requerís totes los tèrmes de recèrca",
+ "tux-sst-match-message": "Fa veire las traduccions que correspondon a cadun dels mots de la recèrca. $1",
+ "tux-sst-case-sensitive": "Sensible a la cassa"
+}
diff --git a/Translate/i18n/search/olo.json b/Translate/i18n/search/olo.json
new file mode 100644
index 00000000..7d555a09
--- /dev/null
+++ b/Translate/i18n/search/olo.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mashoi7"
+ ]
+ },
+ "tux-sst-default": "Kiännökset",
+ "tux-sst-translated": "Kiännökset kielespäi $1",
+ "tux-sst-untranslated": "Ei kiännösty kielespäi $1"
+}
diff --git a/Translate/i18n/search/om.json b/Translate/i18n/search/om.json
new file mode 100644
index 00000000..19e04130
--- /dev/null
+++ b/Translate/i18n/search/om.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Tumsaa"
+ ]
+ },
+ "tux-sst-next": "Kan itti aanu ›",
+ "tux-sst-prev": "‹ Kan darbe"
+}
diff --git a/Translate/i18n/search/pl.json b/Translate/i18n/search/pl.json
new file mode 100644
index 00000000..e143b5c0
--- /dev/null
+++ b/Translate/i18n/search/pl.json
@@ -0,0 +1,37 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chrumps",
+ "Maro21",
+ "Matma Rex",
+ "Rail",
+ "Railfail536",
+ "Woytecr"
+ ]
+ },
+ "searchtranslations": "Szukaj tłumaczenia",
+ "tux-sst-edit": "Edytuj tłumaczenie",
+ "tux-sst-view-foreign": "Zobacz w $1",
+ "tux-sst-search": "Szukaj",
+ "tux-sst-search-ph": "Szukaj tłumaczenia",
+ "tux-sst-count": "Znaleziono {{PLURAL:$1|jeden wynik|$1 wyników}}",
+ "tux-sst-facet-language": "Języki",
+ "tux-sst-facet-group": "Grupa komunikatów",
+ "tux-sst-nosolr-title": "Wyszukiwanie nie jest dostępne",
+ "tux-sst-nosolr-body": "W tej wiki nie ma usługi wyszukiwania tłumaczeń.",
+ "tux-sst-solr-offline-title": "Wyszukiwanie nie jest dostępne",
+ "tux-sst-solr-offline-body": "Wyszukiwanie jest chwilowo niedostępne",
+ "tux-sst-next": "Następne ›",
+ "tux-sst-prev": "‹ Poprzednie",
+ "tux-sst-default": "Tłumaczenia",
+ "tux-sst-translated": "Tłumaczenia z języka $1",
+ "tux-sst-untranslated": "Nieprzetłumaczone na język $1",
+ "tux-sst-outdated": "Przestarzałe tłumaczenia z $1",
+ "tux-sst-ellipsis-untranslated": "Brak tłumaczeń",
+ "tux-sst-ellipsis-outdated": "Przestarzałe tłumaczenia",
+ "tux-sst-link-all-match": "Wymuś obecność wszystkich fraz wyszukiwania.",
+ "tux-sst-match-message": "Wyświetlanie tłumaczeń pasujących do dowolnych słów wyszukiwania. $1",
+ "tux-sst-case-sensitive": "Rozróżniaj wielkość liter",
+ "tux-sst-error-offset": "Nie można pokazać więcej rezultatów. Zawęź swoje wyszukiwanie.",
+ "tux-sst-error-language": "Ten język nie może być użyty w tym typie wyszukiwania."
+}
diff --git a/Translate/i18n/search/pms.json b/Translate/i18n/search/pms.json
new file mode 100644
index 00000000..9400b265
--- /dev/null
+++ b/Translate/i18n/search/pms.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Borichèt",
+ "Dragonòt"
+ ]
+ },
+ "searchtranslations": "Arserca ëd tradussion",
+ "tux-sst-edit": "Modifiché la tradussion",
+ "tux-sst-search": "Sërca",
+ "tux-sst-search-ph": "Arserca ëd tradussion",
+ "tux-sst-count": "{{PLURAL:$1|Un arzultà trovà|$1 arzultà trovà}}",
+ "tux-sst-facet-language": "Lenghe",
+ "tux-sst-facet-group": "Partìe ëd mëssagi",
+ "tux-sst-nosolr-title": "Arserca nen disponìbil",
+ "tux-sst-nosolr-body": "La wiki a l'ha pa un servissi d'arserca ëd tradussion."
+}
diff --git a/Translate/i18n/search/pnb.json b/Translate/i18n/search/pnb.json
new file mode 100644
index 00000000..ab56ff46
--- /dev/null
+++ b/Translate/i18n/search/pnb.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Abbas dhothar"
+ ]
+ },
+ "tux-sst-facet-language": "بولیاں",
+ "tux-sst-default": "ترجمے"
+}
diff --git a/Translate/i18n/search/ps.json b/Translate/i18n/search/ps.json
new file mode 100644
index 00000000..767d32cb
--- /dev/null
+++ b/Translate/i18n/search/ps.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ahmed-Najib-Biabani-Ibrahimkhel"
+ ]
+ },
+ "searchtranslations": "ژباړې پلټل",
+ "tux-sst-edit": "ژباړه سمول",
+ "tux-sst-view-foreign": "په $1 باندې کتل",
+ "tux-sst-search": "پلټل",
+ "tux-sst-search-ph": "ژباړې پلټل",
+ "tux-sst-facet-language": "ژبې",
+ "tux-sst-facet-group": "پيغام ډلې",
+ "tux-sst-next": "راتلونکی ›",
+ "tux-sst-prev": "‹ پخوانی",
+ "tux-sst-default": "ژباړې",
+ "tux-sst-translated": "له $1 څخه ژباړې",
+ "tux-sst-untranslated": "له $1 څخه ژباړې نشته",
+ "tux-sst-outdated": "له $1 څخه نېټه اوښتې ژباړې",
+ "tux-sst-ellipsis-untranslated": "ژباړه نشته",
+ "tux-sst-ellipsis-outdated": "نېټه اوښتې ژباړې"
+}
diff --git a/Translate/i18n/search/pt-br.json b/Translate/i18n/search/pt-br.json
new file mode 100644
index 00000000..66a4fb8a
--- /dev/null
+++ b/Translate/i18n/search/pt-br.json
@@ -0,0 +1,36 @@
+{
+ "@metadata": {
+ "authors": [
+ "Eduardo Addad de Oliveira",
+ "Eduardoaddad",
+ "Felipe L. Ewald",
+ "Luckas",
+ "TheEduGobi"
+ ]
+ },
+ "searchtranslations": "Pesquisar traduções",
+ "tux-sst-edit": "Editar tradução",
+ "tux-sst-view-foreign": "Ver em $1",
+ "tux-sst-search": "Pesquisar",
+ "tux-sst-search-ph": "Pesquisar traduções",
+ "tux-sst-count": "{{PLURAL:$1|Um resultado encontrado|$1 resultados encontrados}}",
+ "tux-sst-facet-language": "Idiomas",
+ "tux-sst-facet-group": "Grupos de mensagens",
+ "tux-sst-nosolr-title": "Pesquisa indisponível",
+ "tux-sst-nosolr-body": "Esta wiki não possui um serviço de pesquisa de tradução.",
+ "tux-sst-solr-offline-title": "Pesquisa indisponível",
+ "tux-sst-solr-offline-body": "O serviço de pesquisa está temporariamente indisponível.",
+ "tux-sst-next": "Próximo »",
+ "tux-sst-prev": "‹ Anterior",
+ "tux-sst-default": "Traduções",
+ "tux-sst-translated": "Traduções de $1",
+ "tux-sst-untranslated": "Sem tradução de $1",
+ "tux-sst-outdated": "Traduções desatualizadas de $1",
+ "tux-sst-ellipsis-untranslated": "Sem tradução",
+ "tux-sst-ellipsis-outdated": "Traduções desatualizadas",
+ "tux-sst-link-all-match": "Exigir todas as palavras de pesquisa.",
+ "tux-sst-match-message": "Mostrando traduções que correspondem a qualquer das palavras da pesquisa. $1",
+ "tux-sst-case-sensitive": "Maiúsculas e minúsculas",
+ "tux-sst-error-offset": "Nenhum outro resultado de pesquisa pode ser exibido. Por favor, restrinja sua pesquisa.",
+ "tux-sst-error-language": "Esse idioma não pode ser usado com este tipo de pesquisa."
+}
diff --git a/Translate/i18n/search/pt.json b/Translate/i18n/search/pt.json
new file mode 100644
index 00000000..6b859c46
--- /dev/null
+++ b/Translate/i18n/search/pt.json
@@ -0,0 +1,37 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fúlvio",
+ "Hamilton Abreu",
+ "Luckas",
+ "Macofe",
+ "McDutchie",
+ "Vitorvicentevalente"
+ ]
+ },
+ "searchtranslations": "Pesquisar nas traduções",
+ "tux-sst-edit": "Editar a tradução",
+ "tux-sst-view-foreign": "Ver em $1",
+ "tux-sst-search": "Pesquisar",
+ "tux-sst-search-ph": "Pesquisar nas traduções",
+ "tux-sst-count": "{{PLURAL:$1|Foi encontrado um resultado|Foram encontrados $1 resultados}}",
+ "tux-sst-facet-language": "Idiomas",
+ "tux-sst-facet-group": "Grupos de mensagens",
+ "tux-sst-nosolr-title": "Pesquisa indisponível",
+ "tux-sst-nosolr-body": "Esta wiki não tem um serviço de pesquisa de traduções.",
+ "tux-sst-solr-offline-title": "Pesquisa indisponível",
+ "tux-sst-solr-offline-body": "O serviço de pesquisa está temporariamente indisponível.",
+ "tux-sst-next": "Seguintes ›",
+ "tux-sst-prev": "‹ Anteriores",
+ "tux-sst-default": "Traduções",
+ "tux-sst-translated": "Traduções de $1",
+ "tux-sst-untranslated": "Sem tradução de $1",
+ "tux-sst-outdated": "Traduções desatualizadas de $1",
+ "tux-sst-ellipsis-untranslated": "Nenhuma tradução",
+ "tux-sst-ellipsis-outdated": "Traduções desatualizadas",
+ "tux-sst-link-all-match": "Traduções com todas as palavras pesquisadas.",
+ "tux-sst-match-message": "A mostrar as traduções que contêm qualquer das palavras pesquisadas. $1",
+ "tux-sst-case-sensitive": "Maiúsculas e minúsculas",
+ "tux-sst-error-offset": "Não é possível mostrar mais resultados de pesquisa. Torne a pesquisa mais restrita, por favor.",
+ "tux-sst-error-language": "Esta língua não pode ser usada com este tipo de pesquisa."
+}
diff --git a/Translate/i18n/search/qqq.json b/Translate/i18n/search/qqq.json
new file mode 100644
index 00000000..04205662
--- /dev/null
+++ b/Translate/i18n/search/qqq.json
@@ -0,0 +1,38 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "Mormegil",
+ "Nike",
+ "Robby",
+ "Shirayuki",
+ "Verdy p",
+ "Waldyrious"
+ ]
+ },
+ "searchtranslations": "{{doc-special|SearchTranslations}}\n{{Identical|Search translation}}",
+ "tux-sst-edit": "A link text.",
+ "tux-sst-view-foreign": "A link text. Parameters:\n* $1 - the domain/host name where the link points to.",
+ "tux-sst-search": "A button text.\n{{Identical|Search}}",
+ "tux-sst-search-ph": "Placeholder text in input field.\n{{Identical|Search translation}}",
+ "tux-sst-count": "Parameters:\n* $1 - the number of search results\n\n'''See also'''\n* [[Template:Identical/Result]]\n* {{msg-mw|Tux-message-filter-result}}",
+ "tux-sst-facet-language": "Label for a facet in [[Special:SearchTranslations]].\n{{Identical|Language}}",
+ "tux-sst-facet-group": "Label for a facet in [[Special:SearchTranslations]].\n{{Identical|Message group}}",
+ "tux-sst-nosolr-title": "Used as title of error page.\n\nThe body of error message is {{msg-mw|Tux-sst-nosolr-body}}.\n{{Identical|Search unavailable}}",
+ "tux-sst-nosolr-body": "Used as error message.\n\nThe page title for this message is {{msg-mw|Tux-sst-nosolr-title}}.",
+ "tux-sst-solr-offline-title": "Used as title of error page.\n\nThe body of error message is {{msg-mw|Tux-sst-solr-offline-body}}.\n{{Identical|Search unavailable}}",
+ "tux-sst-solr-offline-body": "Used as error message.\n\nThe page title for this message is {{msg-mw|tux-sst-solr-offline-title}}.",
+ "tux-sst-next": "Link to browser more search results.\n\nSee also:\n* {{msg-mw|Tux-sst-prev}}",
+ "tux-sst-prev": "Link to browser more search results.\n\nSee also:\n* {{msg-mw|Tux-sst-next}}",
+ "tux-sst-default": "Label for a tab to show translations for the language.\n{{Identical|Translation}}",
+ "tux-sst-translated": "Label for a tab to show translated messages matching the query in the source language. Parameters:\n* $1 - the language code of the source text.\n\n'''FIXME''': the language code in $1 is not usable to translate the language name in the message ([[phab:T111175|T111175]]). If a translation cannot use that value and must hide it, but still requires a reference to \"$1\" to validate in the translate UI, you can insert a dummy code like <code><nowiki>{{PLURAL:9:|$1|}}</nowiki></code>. See also this talk thread (in French): [[MediaWiki talk:Tux-sst-outdated/fr]]",
+ "tux-sst-untranslated": "Label for a tab to show untranslated messages matching the query in the source language. Parameters:\n* $1 - the language code of the source text.\n\n'''FIXME''': the language code in $1 is not usable to translate the language name in the message ([[phab:T111175|T111175]]). If a translation cannot use that value and must hide it, but still requires a reference to \"$1\" to validate in the translate UI, you can insert a dummy code like <code><nowiki>{{PLURAL:9:|$1|}}</nowiki></code>. See also this talk thread (in French): [[MediaWiki talk:Tux-sst-outdated/fr]]",
+ "tux-sst-outdated": "Label for a tab to show outdated messages matching the query in the source language. Parameters:\n* $1 - the language code of the source text.\n\n'''FIXME''': the language code in $1 is not usable to translate the language name in the message ([[phab:T111175|T111175]]). If a translation cannot use that value and must hide it, but still requires a reference to \"$1\" to validate in the translate UI, you can insert a dummy code like <code><nowiki>{{PLURAL:9:|$1|}}</nowiki></code>. See also this talk thread (in French): [[MediaWiki talk:Tux-sst-outdated/fr]]",
+ "tux-sst-ellipsis-untranslated": "Used as label for an ellipsis to hide untranslated messages.",
+ "tux-sst-ellipsis-outdated": "Used as label for an ellipsis to hide outdated messages.",
+ "tux-sst-link-all-match": "Link to filter the results to match all search words.",
+ "tux-sst-match-message": "Used to inform users about an option to get results for all search words. Parameters:\n* $1 - {{msg-mw|tux-sst-link-all-match}}.",
+ "tux-sst-case-sensitive": "Label for a case-sensitive checkbox.",
+ "tux-sst-error-offset": "Shown on Special:SearchTranslations when offset is too large.",
+ "tux-sst-error-language": "Shown on Special:SearchTranslations when search query is invalid."
+}
diff --git a/Translate/i18n/search/qu.json b/Translate/i18n/search/qu.json
new file mode 100644
index 00000000..4fe145fa
--- /dev/null
+++ b/Translate/i18n/search/qu.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "AlimanRuna"
+ ]
+ },
+ "tux-sst-edit": "T'ikrasqata llamk'apuy",
+ "tux-sst-search-ph": "T'ikrasqakunata maskay",
+ "tux-sst-facet-language": "Rimaykuna",
+ "tux-sst-untranslated": "$1 nisqaqa manam t'ikrasqachu",
+ "tux-sst-ellipsis-untranslated": "Mana t'ikrasqa"
+}
diff --git a/Translate/i18n/search/ro.json b/Translate/i18n/search/ro.json
new file mode 100644
index 00000000..1463c6b7
--- /dev/null
+++ b/Translate/i18n/search/ro.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Minisarm"
+ ]
+ },
+ "searchtranslations": "Căutare traduceri",
+ "tux-sst-edit": "Modifică traducerea",
+ "tux-sst-view-foreign": "Vezi la $1",
+ "tux-sst-search": "Caută",
+ "tux-sst-search-ph": "Căutare traduceri",
+ "tux-sst-count": "{{PLURAL:$1|Un rezultat găsit|$1 rezultate găsite|$1 de rezultate găsite}}",
+ "tux-sst-facet-language": "Limbi",
+ "tux-sst-facet-group": "Grupuri de mesaje",
+ "tux-sst-nosolr-title": "Căutarea nu este disponibilă",
+ "tux-sst-nosolr-body": "Acest wiki nu dispune de un serviciu de căutare a traducerilor.",
+ "tux-sst-solr-offline-title": "Căutarea nu este disponibilă",
+ "tux-sst-solr-offline-body": "Serviciul de căutare este temporar indisponibil.",
+ "tux-sst-next": "Următoarele ›",
+ "tux-sst-prev": "‹ Anterioarele"
+}
diff --git a/Translate/i18n/search/roa-tara.json b/Translate/i18n/search/roa-tara.json
new file mode 100644
index 00000000..8611b471
--- /dev/null
+++ b/Translate/i18n/search/roa-tara.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joetaras"
+ ]
+ },
+ "searchtranslations": "Cirche le traduziune",
+ "tux-sst-edit": "Cange 'a traduzione",
+ "tux-sst-view-foreign": "'Ndruche sus a $1",
+ "tux-sst-search": "Cirche",
+ "tux-sst-search-ph": "Cirche le traduziune",
+ "tux-sst-count": "{{PLURAL:$1|'Nu resultate acchiate|$1 resultate acchiate}}",
+ "tux-sst-facet-language": "Lènghe",
+ "tux-sst-facet-group": "Gruppe de messàgge",
+ "tux-sst-nosolr-title": "Ricerche non disponibbile",
+ "tux-sst-nosolr-body": "Sta uicchi non g'ave 'nu servizie de ricerche pe le traduziune.",
+ "tux-sst-solr-offline-title": "Ricerche non disponibbile",
+ "tux-sst-solr-offline-body": "'U servizie de ricerche jè temboraneamende indisponibbile.",
+ "tux-sst-next": "Prossime →",
+ "tux-sst-prev": "‹ Precedende",
+ "tux-sst-default": "Traduziune",
+ "tux-sst-translated": "Traduzione da $1",
+ "tux-sst-untranslated": "Nisciuna traduzione da $1",
+ "tux-sst-outdated": "Traduziune non aggiornate da $1",
+ "tux-sst-ellipsis-untranslated": "Nisciuna traduzione",
+ "tux-sst-ellipsis-outdated": "Traduziune non aggiornate",
+ "tux-sst-link-all-match": "Vole tutte le parole de ricerche.",
+ "tux-sst-match-message": "Fà 'ndrucà le traduziune ca s'accocchiane cu quacche parole de ricerche. $1",
+ "tux-sst-case-sensitive": "Sensibbile a le maiuscole/minuscole",
+ "tux-sst-error-offset": "Nisciune otre resultate d'a recerche pò essere 'ndrucate. Pe piacere accurce 'a recerca toje.",
+ "tux-sst-error-language": "Sta lènghe non ge pò essere ausate cu stu tipe de recerche."
+}
diff --git a/Translate/i18n/search/ru.json b/Translate/i18n/search/ru.json
new file mode 100644
index 00000000..9f428689
--- /dev/null
+++ b/Translate/i18n/search/ru.json
@@ -0,0 +1,39 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kaganer",
+ "Lockal",
+ "Mailman",
+ "Okras",
+ "Ole Yves",
+ "Stjn",
+ "Translatobecomer",
+ "Vlad5250"
+ ]
+ },
+ "searchtranslations": "Поиск переводов",
+ "tux-sst-edit": "Редактировать перевод",
+ "tux-sst-view-foreign": "Смотреть в $1",
+ "tux-sst-search": "Найти",
+ "tux-sst-search-ph": "Поиск переводов",
+ "tux-sst-count": "{{PLURAL:$1|Найден $1 результат|Найдены $1 результата|Найдено $1 результатов}}",
+ "tux-sst-facet-language": "Языки",
+ "tux-sst-facet-group": "Группы сообщений",
+ "tux-sst-nosolr-title": "Поиск недоступен",
+ "tux-sst-nosolr-body": "В этой вики отсутствует сервис поиска переводов.",
+ "tux-sst-solr-offline-title": "Поиск недоступен",
+ "tux-sst-solr-offline-body": "Служба поиска временно недоступна.",
+ "tux-sst-next": "Далее ›",
+ "tux-sst-prev": "‹ Назад",
+ "tux-sst-default": "Переводы",
+ "tux-sst-translated": "Переводы с $1",
+ "tux-sst-untranslated": "Нет переводов с $1",
+ "tux-sst-outdated": "Устаревшие переводы с $1",
+ "tux-sst-ellipsis-untranslated": "Нет перевода",
+ "tux-sst-ellipsis-outdated": "Устаревшие переводы",
+ "tux-sst-link-all-match": "Считать обязательными все поисковые слова.",
+ "tux-sst-match-message": "Показаны переводы, которые соответствуют любому из поисковых слов. $1",
+ "tux-sst-case-sensitive": "с учётом регистра",
+ "tux-sst-error-offset": "Больше невозможно показать результаты. Пожалуйста, уточните поиск.",
+ "tux-sst-error-language": "Этот язык не может использоваться для такого типа поиска."
+}
diff --git a/Translate/i18n/search/rue.json b/Translate/i18n/search/rue.json
new file mode 100644
index 00000000..d0b19703
--- /dev/null
+++ b/Translate/i18n/search/rue.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Tkalyn"
+ ]
+ },
+ "tux-sst-facet-language": "Языкы"
+}
diff --git a/Translate/i18n/search/sa.json b/Translate/i18n/search/sa.json
new file mode 100644
index 00000000..3b331415
--- /dev/null
+++ b/Translate/i18n/search/sa.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "NehalDaveND"
+ ]
+ },
+ "tux-sst-search": "अन्विष्यताम्",
+ "tux-sst-facet-language": "भाषाः",
+ "tux-sst-next": "अग्रिमम् ›",
+ "tux-sst-prev": "‹ पूर्वतनम्"
+}
diff --git a/Translate/i18n/search/scn.json b/Translate/i18n/search/scn.json
new file mode 100644
index 00000000..3c6593a6
--- /dev/null
+++ b/Translate/i18n/search/scn.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ajeje Brazorf",
+ "Sarvaturi"
+ ]
+ },
+ "searchtranslations": "Arricerca traduzzioni",
+ "tux-sst-edit": "Cancia traduzzioni",
+ "tux-sst-view-foreign": "Talìa supra $1",
+ "tux-sst-count": "{{PLURAL:$1|Nu risurtatu attrauvatu|$1 risurtati attruvati}}",
+ "tux-sst-facet-language": "Lingua",
+ "tux-sst-default": "Traduzzioni",
+ "tux-sst-ellipsis-untranslated": "Nudda traduzzioni"
+}
diff --git a/Translate/i18n/search/sco.json b/Translate/i18n/search/sco.json
new file mode 100644
index 00000000..b8b21606
--- /dev/null
+++ b/Translate/i18n/search/sco.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "John Reid"
+ ]
+ },
+ "searchtranslations": "Rake owersets",
+ "tux-sst-edit": "Eedit owerset",
+ "tux-sst-search": "Rake",
+ "tux-sst-search-ph": "Rake owersets",
+ "tux-sst-count": "{{PLURAL:$1|Yin ootcome foond|$1 ootcomes foond}}",
+ "tux-sst-facet-language": "Leids",
+ "tux-sst-facet-group": "Message groops",
+ "tux-sst-nosolr-title": "Rake onavailable",
+ "tux-sst-nosolr-body": "This wiki disna hae aen owerset rake service.",
+ "tux-sst-solr-offline-title": "Rake onavailable",
+ "tux-sst-solr-offline-body": "The Rake service is tempralie onavailable.",
+ "tux-sst-next": "Nex ootcomes",
+ "tux-sst-prev": "Afore ootcomes"
+}
diff --git a/Translate/i18n/search/sd.json b/Translate/i18n/search/sd.json
new file mode 100644
index 00000000..7fc6cae7
--- /dev/null
+++ b/Translate/i18n/search/sd.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mehtab ahmed"
+ ]
+ },
+ "searchtranslations": "ترجما ڳوليو",
+ "tux-sst-edit": "ترجمو سنواريو",
+ "tux-sst-view-foreign": "$1 تي ڏسو",
+ "tux-sst-search": "ڳوليو",
+ "tux-sst-search-ph": "ترجما ڳوليو",
+ "tux-sst-count": "{{PLURAL:$1|ھڪ نتيجو لڌو|$1 نتيجا لڌا}}",
+ "tux-sst-facet-language": "ٻوليون",
+ "tux-sst-facet-group": "نياپو گروھَ",
+ "tux-sst-nosolr-title": "ڳولا غير-موجود",
+ "tux-sst-nosolr-body": "ھن وڪيءَ کي ترجمو ڳولا جي ڪا خدمت ڪونھي.",
+ "tux-sst-solr-offline-title": "ڳولا غير-موجود",
+ "tux-sst-solr-offline-body": "ڳولا خدمت عارضي طور غير-موجود آھي.",
+ "tux-sst-next": "اڳيون ›",
+ "tux-sst-prev": "‹ پويون",
+ "tux-sst-default": "ترجما",
+ "tux-sst-translated": "$1 مان ترجما",
+ "tux-sst-untranslated": "$1 مان ترجمو نہ ھجي",
+ "tux-sst-outdated": "$1 مان مدي خارج ترجما",
+ "tux-sst-ellipsis-untranslated": "ترجمو نہ ھجي",
+ "tux-sst-ellipsis-outdated": "مدي-خارج ترجما",
+ "tux-sst-link-all-match": "ڳولا جا سڀ لفظ گهرجن ٿا.",
+ "tux-sst-match-message": "ترجما ڏيکاريندي جيڪي ڳولا جي ڪنھن بہ لفظ سان ملن ٿا. $1",
+ "tux-sst-case-sensitive": "شڪل حساس",
+ "tux-sst-error-offset": "وڌيڪ ڪي بہ ڳولا نتيجا نٿا ڏيکاري سگهجن. مھرباني ڪري پنھنجي ڳولا کي سوڙھو ڪريو.",
+ "tux-sst-error-language": "ھي ٻولي ھن قسم جي ڳولا جي لاءِ استعمال نٿي ڪري سگهجي."
+}
diff --git a/Translate/i18n/search/se.json b/Translate/i18n/search/se.json
new file mode 100644
index 00000000..6763b239
--- /dev/null
+++ b/Translate/i18n/search/se.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Yupik"
+ ]
+ },
+ "tux-sst-search": "Oza",
+ "tux-sst-facet-language": "Gielat"
+}
diff --git a/Translate/i18n/search/shn.json b/Translate/i18n/search/shn.json
new file mode 100644
index 00000000..902eceea
--- /dev/null
+++ b/Translate/i18n/search/shn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Saosukham"
+ ]
+ },
+ "tux-sst-view-foreign": "ၼႄတီႈ $1"
+}
diff --git a/Translate/i18n/search/shy-latn.json b/Translate/i18n/search/shy-latn.json
new file mode 100644
index 00000000..def22ae9
--- /dev/null
+++ b/Translate/i18n/search/shy-latn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Vikoula5"
+ ]
+ },
+ "tux-sst-search": "Iruzzi"
+}
diff --git a/Translate/i18n/search/sk.json b/Translate/i18n/search/sk.json
new file mode 100644
index 00000000..26a76860
--- /dev/null
+++ b/Translate/i18n/search/sk.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Helix84",
+ "Kusavica",
+ "Sudo77(new)",
+ "Vegetator"
+ ]
+ },
+ "searchtranslations": "Hľadanie v prekladoch",
+ "tux-sst-edit": "Upraviť preklad",
+ "tux-sst-view-foreign": "Zobraziť na $1",
+ "tux-sst-search": "Hľadať",
+ "tux-sst-search-ph": "Hľadať v prekladoch",
+ "tux-sst-facet-language": "Jazyky",
+ "tux-sst-nosolr-title": "Hľadanie nie je dostupné",
+ "tux-sst-nosolr-body": "Táto wiki nemá službu pre vyhľadávanie prekladov.",
+ "tux-sst-solr-offline-title": "Hľadanie nie je dostupné",
+ "tux-sst-solr-offline-body": "Služba pre vyhľadávanie je dočasne nedostupná.",
+ "tux-sst-next": "Ďalej ›",
+ "tux-sst-prev": "‹ Predchádzajúce",
+ "tux-sst-default": "Preklady",
+ "tux-sst-translated": "Preklady z jazyka „$1“",
+ "tux-sst-untranslated": "Nepreložené z jazyka $1",
+ "tux-sst-outdated": "Zastarané preklady z jazyka $1",
+ "tux-sst-ellipsis-untranslated": "Žiadny preklad",
+ "tux-sst-ellipsis-outdated": "Zastarané preklady",
+ "tux-sst-link-all-match": "Vyžaduje všetky hľadané slová.",
+ "tux-sst-match-message": "Zobrazujú sa preklady, ktoré su totožné k ľubovoľnému z hľadaných slov. $1",
+ "tux-sst-case-sensitive": "Rozlišovať veľkosť písmen"
+}
diff --git a/Translate/i18n/search/sl.json b/Translate/i18n/search/sl.json
new file mode 100644
index 00000000..e8a1f2aa
--- /dev/null
+++ b/Translate/i18n/search/sl.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Eleassar",
+ "Janezdrilc"
+ ]
+ },
+ "searchtranslations": "Išči prevode",
+ "tux-sst-edit": "Uredi prevod",
+ "tux-sst-view-foreign": "Ogled v: $1",
+ "tux-sst-search": "Išči",
+ "tux-sst-search-ph": "Išči prevode",
+ "tux-sst-count": "{{PLURAL:$1|En najdeni zadetek|$1 najdena zadetka|$1 najdeni zadetki|$1 najdenih zadetkov}}",
+ "tux-sst-facet-language": "Jeziki",
+ "tux-sst-facet-group": "Skupine sporočil",
+ "tux-sst-nosolr-title": "Iskanje ni na voljo",
+ "tux-sst-nosolr-body": "Ta wiki ne omogoča iskanje prevodov.",
+ "tux-sst-solr-offline-title": "Iskanje ni na voljo",
+ "tux-sst-solr-offline-body": "Iskanje trenutno ni na voljo.",
+ "tux-sst-next": "Naslednji ›",
+ "tux-sst-prev": "‹ Prejšnji",
+ "tux-sst-default": "Prevodi",
+ "tux-sst-translated": "Prevodi iz jezika: $1",
+ "tux-sst-untranslated": "Ni prevodov iz jezika: $1",
+ "tux-sst-outdated": "Zastareli prevodi iz jezika: $1",
+ "tux-sst-ellipsis-untranslated": "Brez prevoda",
+ "tux-sst-ellipsis-outdated": "Zastareli prevodi",
+ "tux-sst-link-all-match": "Zahteva vse iskane besede.",
+ "tux-sst-match-message": "Prikazuje prevode, ki se ujemajo s katero koli od iskanih besed. $1",
+ "tux-sst-case-sensitive": "Razlikuj med velikimi in malimi črkami"
+}
diff --git a/Translate/i18n/search/smj.json b/Translate/i18n/search/smj.json
new file mode 100644
index 00000000..2ae73577
--- /dev/null
+++ b/Translate/i18n/search/smj.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Yupik"
+ ]
+ },
+ "tux-sst-search": "Åtså"
+}
diff --git a/Translate/i18n/search/smn.json b/Translate/i18n/search/smn.json
new file mode 100644
index 00000000..34bf7ccb
--- /dev/null
+++ b/Translate/i18n/search/smn.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Seipinne",
+ "Yupik"
+ ]
+ },
+ "searchtranslations": "Uusâ jurgâlusâid",
+ "tux-sst-edit": "Mute jurgâlus",
+ "tux-sst-view-foreign": "Čääiti siijđost $1",
+ "tux-sst-search": "Uusâ",
+ "tux-sst-search-ph": "Uusâ jurgâlusâid",
+ "tux-sst-facet-language": "Kielah",
+ "tux-sst-next": "Čuávuvâš ›",
+ "tux-sst-prev": "‹ Oovdeb",
+ "tux-sst-default": "Jurgâlusah",
+ "tux-sst-translated": "Jurgâlum kielâst $1",
+ "tux-sst-untranslated": "Jurgâlhánnáá kielâst $1",
+ "tux-sst-ellipsis-untranslated": "Ij jurgâlus",
+ "tux-sst-case-sensitive": "Puustavstuárudâh lii merhâšittee"
+}
diff --git a/Translate/i18n/search/sms.json b/Translate/i18n/search/sms.json
new file mode 100644
index 00000000..31102b7d
--- /dev/null
+++ b/Translate/i18n/search/sms.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Yupik"
+ ]
+ },
+ "searchtranslations": "Ooʒʒ jåårǥlõõzzid",
+ "tux-sst-edit": "Muuʹtt jåårǥlõõzz",
+ "tux-sst-view-foreign": "Čuäʹjet seeidast $1",
+ "tux-sst-search": "Ooʒʒ",
+ "tux-sst-search-ph": "Ooʒʒ jåårǥlõõzzid",
+ "tux-sst-count": "{{PLURAL:$1|Õhtt ooccâmpuåđõs|$1 ooccâmpuåđõõzz|$1 ooccâmpuåđõssâd}}",
+ "tux-sst-facet-language": "Ǩiõl",
+ "tux-sst-facet-group": "Saakkjoouk",
+ "tux-sst-default": "Jåårǥlõõzz",
+ "tux-sst-translated": "Jåårǥlõttum ǩiõlâst $1"
+}
diff --git a/Translate/i18n/search/sq.json b/Translate/i18n/search/sq.json
new file mode 100644
index 00000000..5714a8de
--- /dev/null
+++ b/Translate/i18n/search/sq.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kosovastar"
+ ]
+ },
+ "tux-sst-edit": "Redakto përkthimin"
+}
diff --git a/Translate/i18n/search/sr-ec.json b/Translate/i18n/search/sr-ec.json
new file mode 100644
index 00000000..4c018a17
--- /dev/null
+++ b/Translate/i18n/search/sr-ec.json
@@ -0,0 +1,37 @@
+{
+ "@metadata": {
+ "authors": [
+ "BadDog",
+ "Milicevic01",
+ "Obsuser",
+ "Zoranzoki21",
+ "Милан Јелисавчић",
+ "Сербијана"
+ ]
+ },
+ "searchtranslations": "Претрага превода",
+ "tux-sst-edit": "Измени превод",
+ "tux-sst-view-foreign": "Прикажи на $1",
+ "tux-sst-search": "Претражи",
+ "tux-sst-search-ph": "Претражите преводе",
+ "tux-sst-count": "{{PLURAL:$1|Пронађен је један резултат|Пронађена су $1 резултата|Пронађено је $1 резултата|0=Резултати нису пронађени}}",
+ "tux-sst-facet-language": "Језици",
+ "tux-sst-facet-group": "Групе порука",
+ "tux-sst-nosolr-title": "Претрага није доступна",
+ "tux-sst-nosolr-body": "Овај вики нема услугу за претрагу превода.",
+ "tux-sst-solr-offline-title": "Претрага није доступна",
+ "tux-sst-solr-offline-body": "Услуга за претрагу је привремено недоступна.",
+ "tux-sst-next": "Следеће ›",
+ "tux-sst-prev": "‹ Претходно",
+ "tux-sst-default": "Преводи",
+ "tux-sst-translated": "Преводи са $1",
+ "tux-sst-untranslated": "Нема превода са $1",
+ "tux-sst-outdated": "Застарели преводи са $1",
+ "tux-sst-ellipsis-untranslated": "Нема превода",
+ "tux-sst-ellipsis-outdated": "Застарели преводи",
+ "tux-sst-link-all-match": "Ограничи на све речи из претраге.",
+ "tux-sst-match-message": "Приказани су преводи који одговарају било којој речи из претраге. $1",
+ "tux-sst-case-sensitive": "Разликуј велика и мала слова",
+ "tux-sst-error-offset": "Није могуће приказати више резултата претраге. Сузите претрагу.",
+ "tux-sst-error-language": "Није могуће користити овај језик са овим типом претраге."
+}
diff --git a/Translate/i18n/search/sr-el.json b/Translate/i18n/search/sr-el.json
new file mode 100644
index 00000000..e0e56ede
--- /dev/null
+++ b/Translate/i18n/search/sr-el.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Obsuser"
+ ]
+ },
+ "searchtranslations": "Pretraga prevoda",
+ "tux-sst-edit": "Uredi prevod",
+ "tux-sst-search": "Pretraži",
+ "tux-sst-search-ph": "Pretraga prevoda",
+ "tux-sst-count": "{{PLURAL:$1|Jedan rezultat pronađen|$1 rezultata pronađena|$1 rezultata pronađeno}}",
+ "tux-sst-facet-language": "Jezici",
+ "tux-sst-facet-group": "Grupe poruka",
+ "tux-sst-nosolr-title": "Pretraga nedostupna",
+ "tux-sst-nosolr-body": "Ovaj viki nema servis za pretragu prevoda.",
+ "tux-sst-solr-offline-title": "Pretraga nedostupna",
+ "tux-sst-solr-offline-body": "Servis za pretragu je privremeno nedostupan.",
+ "tux-sst-next": "Napred ›",
+ "tux-sst-prev": "‹ Nazad",
+ "tux-sst-default": "Prevodi",
+ "tux-sst-translated": "Prevodi za $1",
+ "tux-sst-untranslated": "Neprevedeno za $1",
+ "tux-sst-link-all-match": "Ograniči na sve reči pretrage.",
+ "tux-sst-match-message": "Prikazani su prevodi u kojima je pronađena bilo koja od reči pretrage. $1",
+ "tux-sst-case-sensitive": "Uvažavanje verzala"
+}
diff --git a/Translate/i18n/search/sv.json b/Translate/i18n/search/sv.json
new file mode 100644
index 00000000..e1705486
--- /dev/null
+++ b/Translate/i18n/search/sv.json
@@ -0,0 +1,34 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jopparn",
+ "Sabelöga",
+ "WikiPhoenix"
+ ]
+ },
+ "searchtranslations": "Sök översättningar",
+ "tux-sst-edit": "Redigera översättning",
+ "tux-sst-view-foreign": "Visa på $1",
+ "tux-sst-search": "Sök",
+ "tux-sst-search-ph": "Sök översättningar",
+ "tux-sst-count": "{{PLURAL:$1|Ett|$1}} resultat hittades",
+ "tux-sst-facet-language": "Språk",
+ "tux-sst-facet-group": "Meddelandegrupper",
+ "tux-sst-nosolr-title": "Sökning är inte tillgänglig",
+ "tux-sst-nosolr-body": "Denna wiki har inte en tjänst för att söka efter översättningar.",
+ "tux-sst-solr-offline-title": "Sökning är inte tillgänglig",
+ "tux-sst-solr-offline-body": "Söktjänsten är inte tillgänglig för tillfället.",
+ "tux-sst-next": "Nästa ›",
+ "tux-sst-prev": "‹ Föregående",
+ "tux-sst-default": "Översättningar",
+ "tux-sst-translated": "Översättningar från $1",
+ "tux-sst-untranslated": "Inga översättningar från $1",
+ "tux-sst-outdated": "Föråldrade översättningar från $1",
+ "tux-sst-ellipsis-untranslated": "Ingen översättning",
+ "tux-sst-ellipsis-outdated": "Föråldrade översättningar",
+ "tux-sst-link-all-match": "Kräv alla sökord.",
+ "tux-sst-match-message": "Visar översättningar som överensstämmer något sökord. $1",
+ "tux-sst-case-sensitive": "Skiftlägeskänsligt",
+ "tux-sst-error-offset": "Kan inte visa fler resultat. Begränsa din sökning.",
+ "tux-sst-error-language": "Detta språk kan inte användas med denna sökningstyp."
+}
diff --git a/Translate/i18n/search/szy.json b/Translate/i18n/search/szy.json
new file mode 100644
index 00000000..b41c8bdc
--- /dev/null
+++ b/Translate/i18n/search/szy.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bunukwiki",
+ "Tokoabibi"
+ ]
+ },
+ "tux-sst-search": "kilim",
+ "tux-sst-next": "zikuzan a cacay ›",
+ "tux-sst-default": "mibelih"
+}
diff --git a/Translate/i18n/search/tay.json b/Translate/i18n/search/tay.json
new file mode 100644
index 00000000..e73456df
--- /dev/null
+++ b/Translate/i18n/search/tay.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Akamycoco"
+ ]
+ },
+ "tux-sst-search": "Hhkangi’"
+}
diff --git a/Translate/i18n/search/tcy.json b/Translate/i18n/search/tcy.json
new file mode 100644
index 00000000..125e1954
--- /dev/null
+++ b/Translate/i18n/search/tcy.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kiranpoojary",
+ "Ravi Mundkur"
+ ]
+ },
+ "searchtranslations": "ತರ್ಜುಮೆಲೆನ್ ನಾಡ್‌ಲೆ",
+ "tux-sst-error-offset": "ನನಾತ್ ನಾಡಿನ ಪಲತಾಂಶೊಲೆನ್ ತೋಜಾವರೆ ಆಪುಜಿ.ದಯಮಲ್ತ್ ಇರೆನ ನಾಡುನೆನ್ ಸಪೂರ ಮಲ್ಪುಲೆ.",
+ "tux-sst-error-language": "ಇಂಚಿನ ಬಗೆತ ನಾಡುನೆಕ್ಕ್ ಈ ಭಾಷೆನ್ ಉಪಯೋಗಿಸಾವರೆ ಆಪುಜಿ."
+}
diff --git a/Translate/i18n/search/te.json b/Translate/i18n/search/te.json
new file mode 100644
index 00000000..fdc2708f
--- /dev/null
+++ b/Translate/i18n/search/te.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Veeven"
+ ]
+ },
+ "tux-sst-facet-language": "భాషలు",
+ "tux-sst-facet-group": "సందేశాల సమూహాలు",
+ "tux-sst-default": "అనువాదాలు",
+ "tux-sst-ellipsis-untranslated": "అనువాదం లేదు",
+ "tux-sst-ellipsis-outdated": "పాతబడిన అనువాదాలు"
+}
diff --git a/Translate/i18n/search/tg-cyrl.json b/Translate/i18n/search/tg-cyrl.json
new file mode 100644
index 00000000..2ab4a6b9
--- /dev/null
+++ b/Translate/i18n/search/tg-cyrl.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "ToJack"
+ ]
+ },
+ "tux-sst-search": "Ҷустуҷӯ",
+ "tux-sst-facet-language": "Забонҳо"
+}
diff --git a/Translate/i18n/search/th.json b/Translate/i18n/search/th.json
new file mode 100644
index 00000000..747a079c
--- /dev/null
+++ b/Translate/i18n/search/th.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aefgh39622",
+ "Octahedron80"
+ ]
+ },
+ "searchtranslations": "ค้นหาการแปล",
+ "tux-sst-edit": "แก้ไขการแปล",
+ "tux-sst-view-foreign": "ดูที่ $1",
+ "tux-sst-search": "ค้นหา",
+ "tux-sst-search-ph": "ค้นหาการแปล",
+ "tux-sst-count": "ค้นพบ $1 {{PLURAL:$1|ผลลัพธ์|ผลลัพธ์}}",
+ "tux-sst-facet-language": "ภาษา",
+ "tux-sst-facet-group": "กลุ่มข้อความ",
+ "tux-sst-nosolr-title": "การค้นหาไม่สามารถใช้ได้",
+ "tux-sst-nosolr-body": "วิกินี้ไม่มีบริการค้นหาการแปล",
+ "tux-sst-solr-offline-title": "การค้นหาไม่สามารถใช้ได้",
+ "tux-sst-solr-offline-body": "บริการค้นหาไม่สามารถใช้ได้ชั่วคราว",
+ "tux-sst-next": "ถัดไป ›",
+ "tux-sst-prev": "‹ ก่อนหน้า",
+ "tux-sst-default": "การแปล",
+ "tux-sst-translated": "การแปลจาก $1",
+ "tux-sst-untranslated": "ไม่มีการแปลจาก $1",
+ "tux-sst-ellipsis-untranslated": "ไม่มีการแปล"
+}
diff --git a/Translate/i18n/search/ti.json b/Translate/i18n/search/ti.json
new file mode 100644
index 00000000..7c271a25
--- /dev/null
+++ b/Translate/i18n/search/ti.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joanmp17"
+ ]
+ },
+ "searchtranslations": "ኣብ ውሽጢ ትርጉማት ድለይ",
+ "tux-sst-edit": "ትርጉም ኣመዓራርይ",
+ "tux-sst-view-foreign": "ኣብ $1 ርኣይ",
+ "tux-sst-search": "ድለይ",
+ "tux-sst-search-ph": "ትርጉማት ድለይ",
+ "tux-sst-count": "{{PLURAL:$1|ሓደ ውጽኢት ተረኺቡ|$1 ውጺኢታት ተረኺቦም}}",
+ "tux-sst-facet-language": "ቋንቋታት",
+ "tux-sst-facet-group": "ጉጅለታት መልእኽትታት",
+ "tux-sst-nosolr-title": "ምድላይ ዘይርከብ",
+ "tux-sst-solr-offline-title": "ምድላይ ዘይርከብ",
+ "tux-sst-next": "ዝቕጽል ›",
+ "tux-sst-prev": "‹ ዝቐደመ",
+ "tux-sst-default": "ትርጉማት",
+ "tux-sst-translated": "ትርጉማት ካብ $1",
+ "tux-sst-untranslated": "ካብ $1 ብዘይ ትርጉም",
+ "tux-sst-ellipsis-untranslated": "ብዘይ ትርጉም"
+}
diff --git a/Translate/i18n/search/tr.json b/Translate/i18n/search/tr.json
new file mode 100644
index 00000000..08cbfdd7
--- /dev/null
+++ b/Translate/i18n/search/tr.json
@@ -0,0 +1,39 @@
+{
+ "@metadata": {
+ "authors": [
+ "BaRaN6161 TURK",
+ "Emperyan",
+ "Joseph",
+ "McAang",
+ "Meelo",
+ "Mirzali",
+ "Rapsar",
+ "Sayginer"
+ ]
+ },
+ "searchtranslations": "Çevirileri ara",
+ "tux-sst-edit": "Çeviriyi düzenle",
+ "tux-sst-view-foreign": "$1 üzerinde görüntüle",
+ "tux-sst-search": "Ara",
+ "tux-sst-search-ph": "Çevirileri ara",
+ "tux-sst-count": "{{PLURAL:$1|Bir sonuç bulundu|$1 sonuç bulundu}}",
+ "tux-sst-facet-language": "Diller",
+ "tux-sst-facet-group": "İleti grupları",
+ "tux-sst-nosolr-title": "Arama kullanılamıyor",
+ "tux-sst-nosolr-body": "Bu vikide bir çeviri arama hizmeti yok.",
+ "tux-sst-solr-offline-title": "Arama kullanılamıyor",
+ "tux-sst-solr-offline-body": "Arama hizmeti geçici olarak kullanılamıyor.",
+ "tux-sst-next": "Sonraki ›",
+ "tux-sst-prev": "‹ Önceki",
+ "tux-sst-default": "Çeviriler",
+ "tux-sst-translated": "$1 dilden çeviri",
+ "tux-sst-untranslated": "$1 dilden çeviri yok",
+ "tux-sst-outdated": "$1 dilden eski çeviriler",
+ "tux-sst-ellipsis-untranslated": "Çeviri yok",
+ "tux-sst-ellipsis-outdated": "Eski çeviriler",
+ "tux-sst-link-all-match": "Tüm arama kelimelerini iste.",
+ "tux-sst-match-message": "Aranan kelimelerin herhangi biriyle eşleşen çeviriler gösteriliyor. $1",
+ "tux-sst-case-sensitive": "Harfe duyarlı",
+ "tux-sst-error-offset": "Daha fazla arama sonucu gösterilemez. Lütfen aramanızı daraltın.",
+ "tux-sst-error-language": "Bu dil bu tür arama ile kullanılamaz."
+}
diff --git a/Translate/i18n/search/tt-cyrl.json b/Translate/i18n/search/tt-cyrl.json
new file mode 100644
index 00000000..d4601a26
--- /dev/null
+++ b/Translate/i18n/search/tt-cyrl.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ерней",
+ "Ильнар"
+ ]
+ },
+ "searchtranslations": "Тәрҗемәләрне эзләү",
+ "tux-sst-edit": "Тәрҗемәне үзгәртү",
+ "tux-sst-search": "Эзләү",
+ "tux-sst-search-ph": "Тәрҗемәләрне эзләү",
+ "tux-sst-count": "{{PLURAL:$1|Бер генә нәтиҗә|$1 нәтиҗә}} табылды",
+ "tux-sst-facet-language": "Телләр",
+ "tux-sst-next": "Алга таба ›",
+ "tux-sst-prev": "‹ Артка таба",
+ "tux-sst-default": "Тәрҗемәләр",
+ "tux-sst-ellipsis-untranslated": "Тәрҗемә юк",
+ "tux-sst-ellipsis-outdated": "Искергән тәрҗемәләр"
+}
diff --git a/Translate/i18n/search/udm.json b/Translate/i18n/search/udm.json
new file mode 100644
index 00000000..ed721a07
--- /dev/null
+++ b/Translate/i18n/search/udm.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kaganer"
+ ]
+ },
+ "tux-sst-facet-language": "Кылъёс"
+}
diff --git a/Translate/i18n/search/uk.json b/Translate/i18n/search/uk.json
new file mode 100644
index 00000000..d23f0a2b
--- /dev/null
+++ b/Translate/i18n/search/uk.json
@@ -0,0 +1,36 @@
+{
+ "@metadata": {
+ "authors": [
+ "Base",
+ "Dars",
+ "Movses",
+ "Vlad5250",
+ "Ата"
+ ]
+ },
+ "searchtranslations": "Пошук перекладів",
+ "tux-sst-edit": "Редагувати переклад",
+ "tux-sst-view-foreign": "Переглянути на $1",
+ "tux-sst-search": "Пошук",
+ "tux-sst-search-ph": "Пошук перекладів",
+ "tux-sst-count": "{{PLURAL:$1|Знайдено один результат|Знайдено $1 результати|Знайдено $1 результатів}}",
+ "tux-sst-facet-language": "Мови",
+ "tux-sst-facet-group": "Групи повідомлень",
+ "tux-sst-nosolr-title": "Пошук недоступний",
+ "tux-sst-nosolr-body": "У цій вікі немає служби пошуку перекладів.",
+ "tux-sst-solr-offline-title": "Пошук не доступний",
+ "tux-sst-solr-offline-body": "Сервіс пошуку тимчасово недоступний.",
+ "tux-sst-next": "Далі ›",
+ "tux-sst-prev": "‹ Назад",
+ "tux-sst-default": "Переклади",
+ "tux-sst-translated": "Переклади із $1",
+ "tux-sst-untranslated": "Немає перекладу від $1",
+ "tux-sst-outdated": "Застарілі переклади від $1",
+ "tux-sst-ellipsis-untranslated": "Без перекладу",
+ "tux-sst-ellipsis-outdated": "Застарілі переклади",
+ "tux-sst-link-all-match": "Потребуються всі слова пошуку.",
+ "tux-sst-match-message": "Показані переклади, в яких збігається хоча б одне із пошукових слів. $1",
+ "tux-sst-case-sensitive": "Чутливий до регістру",
+ "tux-sst-error-offset": "Неможливо показати більше результатів пошуку. Будь ласка, уточніть Ваш пошук.",
+ "tux-sst-error-language": "Ця мова не може бути використана із цим типом пошуку."
+}
diff --git a/Translate/i18n/search/uz.json b/Translate/i18n/search/uz.json
new file mode 100644
index 00000000..24a9fab8
--- /dev/null
+++ b/Translate/i18n/search/uz.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "CoderSI",
+ "Malikxan"
+ ]
+ },
+ "searchtranslations": "Tarjimalardan qidirish",
+ "tux-sst-edit": "Tarjimani tahrirlash",
+ "tux-sst-search": "Qidiruv",
+ "tux-sst-search-ph": "Tarjimalardan qidirish",
+ "tux-sst-count": "{{PLURAL:$1|Bitta natija topildi|$1 ta natija topildi}}",
+ "tux-sst-facet-language": "Tillar",
+ "tux-sst-facet-group": "Xabar guruhlari",
+ "tux-sst-nosolr-body": "Bu vikida tarjima qidiruv xizmati yoʻq.",
+ "tux-sst-next": "Keyingisi ›",
+ "tux-sst-prev": "< Avvalgisi",
+ "tux-sst-default": "Tarjimalar",
+ "tux-sst-translated": "$1dan tarjima qilish",
+ "tux-sst-untranslated": "$1dan tarjima yoʻq",
+ "tux-sst-outdated": "$1dan eskirgan tarjimalar",
+ "tux-sst-ellipsis-untranslated": "Tarjima yoʻq",
+ "tux-sst-ellipsis-outdated": "Eskirgan tarjimalar",
+ "tux-sst-case-sensitive": "Registrni hisobga olish"
+}
diff --git a/Translate/i18n/search/vec.json b/Translate/i18n/search/vec.json
new file mode 100644
index 00000000..dbf8ed97
--- /dev/null
+++ b/Translate/i18n/search/vec.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fierodelveneto"
+ ]
+ },
+ "tux-sst-translated": "Tradusion da $1",
+ "tux-sst-outdated": "Tradusion no rinovae da $1"
+}
diff --git a/Translate/i18n/search/vi.json b/Translate/i18n/search/vi.json
new file mode 100644
index 00000000..8292c0b7
--- /dev/null
+++ b/Translate/i18n/search/vi.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Minh Nguyen",
+ "NguoiDungKhongDinhDanh"
+ ]
+ },
+ "searchtranslations": "Tìm bản dịch",
+ "tux-sst-edit": "Sửa bản dịch",
+ "tux-sst-view-foreign": "Xem tại $1",
+ "tux-sst-search": "Tìm kiếm",
+ "tux-sst-search-ph": "Tìm bản dịch",
+ "tux-sst-count": "Tìm thấy $1 kết quả",
+ "tux-sst-facet-language": "Ngôn ngữ",
+ "tux-sst-facet-group": "Nhóm thông điệp",
+ "tux-sst-nosolr-title": "Công cụ tìm kiếm không khả dụng",
+ "tux-sst-nosolr-body": "Wiki này không có công cụ tìm bản dịch.",
+ "tux-sst-solr-offline-title": "Công cụ tìm kiếm không có sẵn",
+ "tux-sst-solr-offline-body": "Công cụ tìm kiếm tạm thời không sẵn dùng.",
+ "tux-sst-next": "Sau ›",
+ "tux-sst-prev": "‹ Trước",
+ "tux-sst-default": "Bản dịch",
+ "tux-sst-translated": "Bản dịch từ $1",
+ "tux-sst-untranslated": "Không có bản dịch từ $1",
+ "tux-sst-outdated": "Bản dịch lỗi thời từ $1",
+ "tux-sst-ellipsis-untranslated": "Không có bản dịch",
+ "tux-sst-ellipsis-outdated": "Bản dịch lỗi thời",
+ "tux-sst-link-all-match": "Bắt buộc tất cả các từ tìm kiếm.",
+ "tux-sst-match-message": "Các kết quả chứa ít nhất một trong số từ tìm kiếm.\n$1",
+ "tux-sst-case-sensitive": "Phân biệt chữ hoa/thường"
+}
diff --git a/Translate/i18n/search/wa.json b/Translate/i18n/search/wa.json
new file mode 100644
index 00000000..dad938e7
--- /dev/null
+++ b/Translate/i18n/search/wa.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Srtxg"
+ ]
+ },
+ "tux-sst-facet-language": "Lingaedjes"
+}
diff --git a/Translate/i18n/search/xmf.json b/Translate/i18n/search/xmf.json
new file mode 100644
index 00000000..2eeedbc7
--- /dev/null
+++ b/Translate/i18n/search/xmf.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Narazeni"
+ ]
+ },
+ "searchtranslations": "ნათანგეფიშ გორუა",
+ "tux-sst-edit": "თანგუაშ რედაქტირაფა",
+ "tux-sst-view-foreign": "ქოძირით $1-ის",
+ "tux-sst-search": "გორუა",
+ "tux-sst-search-ph": "ნათანგეფიშ გორუა",
+ "tux-sst-count": "{{PLURAL:$1|ნაძირებუ რე ართი შედეგი|ნაძირებუ რე $1 შედეგი}}",
+ "tux-sst-facet-language": "ნინეფი",
+ "tux-sst-facet-group": "გინაფაშ ბუნეფი",
+ "tux-sst-nosolr-title": "გორუა ვა რე ხემიოჭირინაფუ",
+ "tux-sst-nosolr-body": "თე ვიკის ვა რე ნათანგეფიშ გორუაშ ნინალა.",
+ "tux-sst-solr-offline-title": "გორუა ვა რე ხემიოჭირინაფუ",
+ "tux-sst-solr-offline-body": "გორუაშ ნინალა ობორჯეთ ვა რე ხემიოჭირინაფუ.",
+ "tux-sst-next": "გეჸვენჯი ›",
+ "tux-sst-prev": "‹ კინოხიანი",
+ "tux-sst-default": "ნათანგეფი",
+ "tux-sst-translated": "$1-შე ნათანგეფი",
+ "tux-sst-outdated": "$1-შე მოჯვეშებული ნათანგეფი",
+ "tux-sst-ellipsis-untranslated": "ვა რე ნათანგა",
+ "tux-sst-ellipsis-outdated": "მოჯვეშებული ნათანგეფი"
+}
diff --git a/Translate/i18n/search/yi.json b/Translate/i18n/search/yi.json
new file mode 100644
index 00000000..cc5a41a8
--- /dev/null
+++ b/Translate/i18n/search/yi.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "פוילישער"
+ ]
+ },
+ "searchtranslations": "זוכן איבערזעצונגען",
+ "tux-sst-edit": "רעדאַקטירן איבערזעצונג",
+ "tux-sst-view-foreign": "באקוקן אויף $1",
+ "tux-sst-search": "זוכן",
+ "tux-sst-search-ph": "זוכן איבערזעצונגען",
+ "tux-sst-count": "{{PLURAL:$1|איין רעזולטאט געטראפן|$1 רעזולטאטן געטראפן}}",
+ "tux-sst-facet-language": "שפּראַכן",
+ "tux-sst-facet-group": "מעלדונג גרופעס",
+ "tux-sst-nosolr-title": "זוך נישט פאראן",
+ "tux-sst-nosolr-body": "די וויקי האט נישט קיין איבערזעצונג זוך דינסט.",
+ "tux-sst-solr-offline-title": "זוך נישט פאראן",
+ "tux-sst-solr-offline-body": "די זוכדינסט איז צײַטווײַליק נישט פאראן.",
+ "tux-sst-next": "נעקסטע",
+ "tux-sst-prev": "פֿריערדיקע",
+ "tux-sst-default": "איבערזעצונגען",
+ "tux-sst-translated": "איבערזעצונגען פֿון $1",
+ "tux-sst-untranslated": "קיין איבערזעצונג נישט פון $1",
+ "tux-sst-outdated": "פֿארעלטערעט איבערזעצונגען פון $1",
+ "tux-sst-ellipsis-untranslated": "קיין איבערזעצונג",
+ "tux-sst-ellipsis-outdated": "פֿארעלטערטע איבערזעצונגען",
+ "tux-sst-link-all-match": "באדארפֿן אלע זוכווערטער.",
+ "tux-sst-match-message": "ווייזן איבערזעצונגען וואס פאסן צו מיט נארוועלכע פון די זוכווערטער. $1",
+ "tux-sst-case-sensitive": "גרויס/קליין-שרייבונג"
+}
diff --git a/Translate/i18n/search/yue.json b/Translate/i18n/search/yue.json
new file mode 100644
index 00000000..d5ee15dc
--- /dev/null
+++ b/Translate/i18n/search/yue.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Moon0319"
+ ]
+ },
+ "tux-sst-ellipsis-outdated": "過咗時嘅翻譯"
+}
diff --git a/Translate/i18n/search/zgh.json b/Translate/i18n/search/zgh.json
new file mode 100644
index 00000000..3322dfce
--- /dev/null
+++ b/Translate/i18n/search/zgh.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hakim1bal"
+ ]
+ },
+ "searchtranslations": "ⵔⵣⵓ ⵜⵉⵙⵓⵖⴰⵍ",
+ "tux-sst-edit": "ⵙⵏⴼⵍ ⵜⴰⵙⵓⵖⵍⵜ",
+ "tux-sst-view-foreign": "ⵙⴽⵏ ⴳ $1",
+ "tux-sst-search": "ⵔⵣⵓ",
+ "tux-sst-search-ph": "ⵔⵣⵓ ⵜⵉⵙⵓⵖⴰⵍ",
+ "tux-sst-facet-language": "ⵜⵓⵜⵍⴰⵢⵉⵏ",
+ "tux-sst-next": "ⵖⵔ ⵣⴷⴰⵜ",
+ "tux-sst-prev": "ⵖⵔ ⴷⴼⴼⵉⵔ",
+ "tux-sst-default": "ⵜⵉⵙⵓⵖⴰⵍ",
+ "tux-sst-translated": "ⵜⵉⵙⵓⵖⴰⵍ ⵙⴳ $1",
+ "tux-sst-untranslated": "ⵡⴰⵍⵓ ⵜⵉⵙⵓⵖⴰⵍ ⵙⴳ $1",
+ "tux-sst-ellipsis-untranslated": "ⵡⴰⵍⵓ ⵜⵉⵙⵓⵖⴰⵍ"
+}
diff --git a/Translate/i18n/search/zh-hans.json b/Translate/i18n/search/zh-hans.json
new file mode 100644
index 00000000..4d679c43
--- /dev/null
+++ b/Translate/i18n/search/zh-hans.json
@@ -0,0 +1,37 @@
+{
+ "@metadata": {
+ "authors": [
+ "Angrydog001",
+ "Hydra",
+ "Li3939108",
+ "Liuxinyu970226",
+ "Xiaomingyan",
+ "Yfdyh000"
+ ]
+ },
+ "searchtranslations": "搜索译文",
+ "tux-sst-edit": "编辑译文",
+ "tux-sst-view-foreign": "在$1查看",
+ "tux-sst-search": "搜索",
+ "tux-sst-search-ph": "搜索译文",
+ "tux-sst-count": "{{PLURAL:$1|找到$1个结果}}",
+ "tux-sst-facet-language": "语言",
+ "tux-sst-facet-group": "信息组",
+ "tux-sst-nosolr-title": "搜索不可用",
+ "tux-sst-nosolr-body": "本wiki没有译文搜索服务。",
+ "tux-sst-solr-offline-title": "搜索不可用",
+ "tux-sst-solr-offline-body": "搜索服务暂时不可用。",
+ "tux-sst-next": "下一页 ›",
+ "tux-sst-prev": "‹ 上一页",
+ "tux-sst-default": "翻译",
+ "tux-sst-translated": "自$1翻译",
+ "tux-sst-untranslated": "尚未从$1翻译",
+ "tux-sst-outdated": "翻译自$1但已过时",
+ "tux-sst-ellipsis-untranslated": "无译文",
+ "tux-sst-ellipsis-outdated": "已过时译文",
+ "tux-sst-link-all-match": "要求搜索的所有字词。",
+ "tux-sst-match-message": "显示匹配任何搜索字词的翻译。$1",
+ "tux-sst-case-sensitive": "区分大小写",
+ "tux-sst-error-offset": "没有更多可以显示的搜索结果。请缩小搜索范围。",
+ "tux-sst-error-language": "该语言不能用于此类型的搜索。"
+}
diff --git a/Translate/i18n/search/zh-hant.json b/Translate/i18n/search/zh-hant.json
new file mode 100644
index 00000000..92cbeb74
--- /dev/null
+++ b/Translate/i18n/search/zh-hant.json
@@ -0,0 +1,35 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cwlin0416",
+ "Kly",
+ "LNDDYL",
+ "Simon Shek"
+ ]
+ },
+ "searchtranslations": "搜尋翻譯",
+ "tux-sst-edit": "編輯翻譯",
+ "tux-sst-view-foreign": "在 $1 檢視",
+ "tux-sst-search": "搜尋",
+ "tux-sst-search-ph": "搜尋翻譯",
+ "tux-sst-count": "{{PLURAL:$1|找到 1 筆結果|找到 $1 筆結果}}",
+ "tux-sst-facet-language": "語言",
+ "tux-sst-facet-group": "訊息群組",
+ "tux-sst-nosolr-title": "無法使用搜尋",
+ "tux-sst-nosolr-body": "此 Wiki 沒有提供翻譯搜尋的服務。",
+ "tux-sst-solr-offline-title": "無法使用搜尋",
+ "tux-sst-solr-offline-body": "暫時無法使用搜尋。",
+ "tux-sst-next": "下一頁 ›",
+ "tux-sst-prev": "‹ 上一頁",
+ "tux-sst-default": "翻譯",
+ "tux-sst-translated": "翻譯自 $1",
+ "tux-sst-untranslated": "尚無來自於 $1 的翻譯",
+ "tux-sst-outdated": "來自於 $1 的過期翻譯",
+ "tux-sst-ellipsis-untranslated": "無翻譯",
+ "tux-sst-ellipsis-outdated": "已過時的翻譯",
+ "tux-sst-link-all-match": "需要全部搜尋文字。",
+ "tux-sst-match-message": "顯示符合任何搜尋關鍵字的翻譯。$1",
+ "tux-sst-case-sensitive": "大小寫視為相異",
+ "tux-sst-error-offset": "沒有更多搜尋結果可顯示出。請縮小您的搜尋。",
+ "tux-sst-error-language": "此語言不可與此搜尋類型使用。"
+}
diff --git a/Translate/messagegroups/AggregateMessageGroup.php b/Translate/messagegroups/AggregateMessageGroup.php
new file mode 100644
index 00000000..44da7864
--- /dev/null
+++ b/Translate/messagegroups/AggregateMessageGroup.php
@@ -0,0 +1,172 @@
+<?php
+/**
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Extension\Translate\MessageProcessing\StringMatcher;
+
+/**
+ * Groups multiple message groups together as one group.
+ *
+ * Limitations:
+ * - Only groups in the same namespace.
+ * - Only groups with the same source language.
+ * @ingroup MessageGroup
+ */
+class AggregateMessageGroup extends MessageGroupBase {
+ /** @var MessageGroup[] */
+ private $groups;
+
+ /** @inheritDoc */
+ public function exists() {
+ // Group exists if there are any subgroups.
+ return (bool)$this->conf['GROUPS'];
+ }
+
+ /** @inheritDoc */
+ public function load( $code ) {
+ $messages = [];
+
+ foreach ( $this->getGroups() as $group ) {
+ $messages += $group->load( $code );
+ }
+
+ return $messages;
+ }
+
+ /** @inheritDoc */
+ public function getMangler() {
+ if ( $this->mangler === null ) {
+ $this->mangler = new StringMatcher();
+ }
+
+ return $this->mangler;
+ }
+
+ /**
+ * Returns a list of message groups that this group consists of.
+ * @return MessageGroup[]
+ */
+ public function getGroups(): array {
+ if ( $this->groups === null ) {
+ $groups = [];
+ $ids = (array)$this->conf['GROUPS'];
+ $ids = MessageGroups::expandWildcards( $ids );
+
+ foreach ( $ids as $id ) {
+ // Do not try to include self and go to infinite loop.
+ if ( $id === $this->getId() ) {
+ continue;
+ }
+
+ $group = MessageGroups::getGroup( $id );
+ if ( $group === null ) {
+ error_log( "Invalid group id in {$this->getId()}: $id" );
+ continue;
+ }
+
+ if ( MessageGroups::getPriority( $group ) === 'discouraged' ) {
+ continue;
+ }
+
+ $groups[$id] = $group;
+ }
+
+ $this->groups = $groups;
+ }
+
+ return $this->groups;
+ }
+
+ protected function loadMessagesFromCache( $groups ) {
+ $messages = [];
+ foreach ( $groups as $group ) {
+ if ( $group instanceof MessageGroupOld ) {
+ $messages += $group->getDefinitions();
+ continue;
+ }
+
+ if ( $group instanceof self ) {
+ $messages += $this->loadMessagesFromCache( $group->getGroups() );
+ continue;
+ }
+ '@phan-var FileBasedMessageGroup $group';
+
+ $cache = $group->getMessageGroupCache( $group->getSourceLanguage() );
+ if ( $cache->exists() ) {
+ foreach ( $cache->getKeys() as $key ) {
+ $messages[$key] = $cache->get( $key );
+ }
+ }
+ }
+
+ return $messages;
+ }
+
+ /** @inheritDoc */
+ public function initCollection( $code ) {
+ $messages = $this->loadMessagesFromCache( $this->getGroups() );
+ $namespace = $this->getNamespace();
+ $definitions = new MessageDefinitions( $messages, $namespace );
+ $collection = MessageCollection::newFromDefinitions( $definitions, $code );
+
+ $this->setTags( $collection );
+
+ return $collection;
+ }
+
+ /** @inheritDoc */
+ public function getMessage( $key, $code ) {
+ /* Just hand over the message content retrieval to the primary message
+ * group directly. This used to iterate over the subgroups looking for
+ * the primary group, but that might actually be under some other
+ * aggregate message group.
+ * @todo Implement getMessageContent to avoid hardcoding the namespace
+ * here.
+ */
+ $title = Title::makeTitle( $this->getNamespace(), $key );
+ $handle = new MessageHandle( $title );
+ $groupId = MessageIndex::getPrimaryGroupId( $handle );
+ if ( $groupId === $this->getId() ) {
+ // Message key owned by aggregate group.
+ // Should not ever happen, but it does.
+ error_log( "AggregateMessageGroup $groupId cannot be primary owner of key $key" );
+
+ return null;
+ }
+
+ $group = MessageGroups::getGroup( $groupId );
+ if ( $group ) {
+ return $group->getMessage( $key, $code );
+ } else {
+ return null;
+ }
+ }
+
+ /** @inheritDoc */
+ public function getTags( $type = null ) {
+ $tags = [];
+
+ foreach ( $this->getGroups() as $group ) {
+ $tags = array_merge_recursive( $tags, $group->getTags( $type ) );
+ }
+
+ return $tags;
+ }
+
+ /** @inheritDoc */
+ public function getKeys() {
+ $keys = [];
+ foreach ( $this->getGroups() as $group ) {
+ // Array merge is *really* slow (tested in PHP 7.1), so avoiding it. A loop
+ // followed by array_unique (which we need anyway) is magnitudes faster.
+ foreach ( $group->getKeys() as $key ) {
+ $keys[] = $key;
+ }
+ }
+
+ return array_values( array_unique( $keys ) );
+ }
+}
diff --git a/Translate/messagegroups/FileBasedMessageGroup.php b/Translate/messagegroups/FileBasedMessageGroup.php
new file mode 100644
index 00000000..ac109f12
--- /dev/null
+++ b/Translate/messagegroups/FileBasedMessageGroup.php
@@ -0,0 +1,292 @@
+<?php
+/**
+ * This file a contains a message group implementation.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @copyright Copyright © 2010-2013, Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * This class implements default behavior for file based message groups.
+ *
+ * File based message groups are primary type of groups at translatewiki.net,
+ * while other projects may use mainly page translation message groups, or
+ * custom type of message groups.
+ * @ingroup MessageGroup
+ */
+class FileBasedMessageGroup extends MessageGroupBase implements MetaYamlSchemaExtender {
+ public const NO_FFS_CLASS = 1;
+ public const INVALID_FFS_CLASS = 2;
+
+ protected $reverseCodeMap;
+
+ /**
+ * Constructs a FileBasedMessageGroup from any normal message group.
+ * Useful for doing special Gettext exports from any group.
+ * @param MessageGroup $group
+ * @param string $targetPattern Value for FILES.targetPattern
+ * @return self
+ */
+ public static function newFromMessageGroup(
+ MessageGroup $group,
+ string $targetPattern = ''
+ ) {
+ $conf = [
+ 'BASIC' => [
+ 'class' => self::class,
+ 'id' => $group->getId(),
+ 'label' => $group->getLabel(),
+ 'namespace' => $group->getNamespace(),
+ ],
+ 'FILES' => [
+ 'sourcePattern' => '',
+ 'targetPattern' => $targetPattern,
+ ],
+ ];
+
+ $group = MessageGroupBase::factory( $conf );
+ if ( !$group instanceof self ) {
+ $actual = get_class( $group );
+ throw new DomainException( "Expected FileBasedMessageGroup, got $actual" );
+ }
+
+ return $group;
+ }
+
+ public function getFFS(): SimpleFFS {
+ $class = $this->getFromConf( 'FILES', 'class' );
+
+ if ( $class === null ) {
+ throw new RuntimeException( 'FFS class is not set.', self::NO_FFS_CLASS );
+ }
+
+ if ( !class_exists( $class ) ) {
+ throw new RuntimeException( "FFS class $class does not exist.", self::INVALID_FFS_CLASS );
+ }
+
+ return new $class( $this );
+ }
+
+ public function exists(): bool {
+ return $this->getMessageGroupCache( $this->getSourceLanguage() )->exists();
+ }
+
+ public function load( $code ) {
+ $ffs = $this->getFFS();
+ $data = $ffs->read( $code );
+
+ return $data ? $data['MESSAGES'] : [];
+ }
+
+ /**
+ * @param string $code Language tag.
+ * @return array Array with keys MESSAGES, AUTHORS and EXTRA, containing only primitive values.
+ * @since 2020.04
+ */
+ public function parseExternal( string $code ): array {
+ $supportedKeys = [ 'MESSAGES', 'AUTHORS', 'EXTRA' ];
+
+ $parsedData = $this->getFFS()->read( $code );
+
+ // Ensure we return correct keys
+ $data = [];
+ foreach ( $supportedKeys as $key ) {
+ $data[$key] = $parsedData[$key] ?? [];
+ }
+
+ return $data;
+ }
+
+ /**
+ * @param string $code Language code.
+ * @return string
+ * @throws MWException
+ */
+ public function getSourceFilePath( $code ) {
+ if ( $this->isSourceLanguage( $code ) ) {
+ $pattern = $this->getFromConf( 'FILES', 'definitionFile' );
+ if ( $pattern !== null ) {
+ return $this->replaceVariables( $pattern, $code );
+ }
+ }
+
+ $pattern = $this->getFromConf( 'FILES', 'sourcePattern' );
+ if ( $pattern === null ) {
+ throw new MWException( 'No source file pattern defined.' );
+ }
+
+ return $this->replaceVariables( $pattern, $code );
+ }
+
+ public function getTargetFilename( $code ) {
+ // Check if targetPattern explicitly defined
+ $pattern = $this->getFromConf( 'FILES', 'targetPattern' );
+ if ( $pattern !== null ) {
+ return $this->replaceVariables( $pattern, $code );
+ }
+
+ // Check if definitionFile is explicitly defined
+ if ( $this->isSourceLanguage( $code ) ) {
+ $pattern = $this->getFromConf( 'FILES', 'definitionFile' );
+ }
+
+ // Fallback to sourcePattern which must be defined
+ if ( $pattern === null ) {
+ $pattern = $this->getFromConf( 'FILES', 'sourcePattern' );
+ }
+
+ if ( $pattern === null ) {
+ throw new MWException( 'No source file pattern defined.' );
+ }
+
+ // For exports, the scripts take output directory. We want to
+ // return a path where the prefix is current directory instead
+ // of full path of the source location.
+ $pattern = str_replace( '%GROUPROOT%', '.', $pattern );
+ return $this->replaceVariables( $pattern, $code );
+ }
+
+ /**
+ * @param string $pattern
+ * @param string $code Language code.
+ * @return string
+ * @since 2014.02 Made public
+ */
+ public function replaceVariables( $pattern, $code ) {
+ global $IP, $wgTranslateGroupRoot;
+
+ $variables = [
+ '%CODE%' => $this->mapCode( $code ),
+ '%MWROOT%' => $IP,
+ '%GROUPROOT%' => $wgTranslateGroupRoot,
+ '%GROUPID%' => $this->getId(),
+ ];
+
+ return str_replace( array_keys( $variables ), array_values( $variables ), $pattern );
+ }
+
+ /**
+ * @param string $code Language code.
+ * @return string
+ */
+ public function mapCode( $code ) {
+ if ( !isset( $this->conf['FILES']['codeMap'] ) ) {
+ return $code;
+ }
+
+ if ( isset( $this->conf['FILES']['codeMap'][$code] ) ) {
+ return $this->conf['FILES']['codeMap'][$code];
+ } else {
+ if ( !isset( $this->reverseCodeMap ) ) {
+ $this->reverseCodeMap = array_flip( $this->conf['FILES']['codeMap'] );
+ }
+
+ if ( isset( $this->reverseCodeMap[$code] ) ) {
+ return 'x-invalidLanguageCode';
+ }
+
+ return $code;
+ }
+ }
+
+ public static function getExtraSchema() {
+ $schema = [
+ 'root' => [
+ '_type' => 'array',
+ '_children' => [
+ 'FILES' => [
+ '_type' => 'array',
+ '_children' => [
+ 'class' => [
+ '_type' => 'text',
+ '_not_empty' => true,
+ ],
+ 'codeMap' => [
+ '_type' => 'array',
+ '_ignore_extra_keys' => true,
+ '_children' => [],
+ ],
+ 'definitionFile' => [
+ '_type' => 'text',
+ ],
+ 'sourcePattern' => [
+ '_type' => 'text',
+ '_not_empty' => true,
+ ],
+ 'targetPattern' => [
+ '_type' => 'text',
+ ],
+ ]
+ ]
+ ]
+ ]
+ ];
+
+ return $schema;
+ }
+
+ /** @inheritDoc */
+ public function getKeys() {
+ $cache = $this->getMessageGroupCache( $this->getSourceLanguage() );
+ if ( !$cache->exists() ) {
+ return array_keys( $this->getDefinitions() );
+ } else {
+ return $cache->getKeys();
+ }
+ }
+
+ /** @inheritDoc */
+ public function initCollection( $code ) {
+ $namespace = $this->getNamespace();
+ $messages = [];
+
+ $cache = $this->getMessageGroupCache( $this->getSourceLanguage() );
+ if ( $cache->exists() ) {
+ foreach ( $cache->getKeys() as $key ) {
+ $messages[$key] = $cache->get( $key );
+ }
+ }
+
+ $definitions = new MessageDefinitions( $messages, $namespace );
+ $collection = MessageCollection::newFromDefinitions( $definitions, $code );
+ $this->setTags( $collection );
+
+ return $collection;
+ }
+
+ /** @inheritDoc */
+ public function getMessage( $key, $code ) {
+ $cache = $this->getMessageGroupCache( $code );
+ if ( $cache->exists() ) {
+ $msg = $cache->get( $key );
+
+ if ( $msg !== false ) {
+ return $msg;
+ }
+
+ // Try harder
+ $nkey = str_replace( ' ', '_', strtolower( $key ) );
+ $keys = $cache->getKeys();
+
+ foreach ( $keys as $k ) {
+ if ( $nkey === str_replace( ' ', '_', strtolower( $k ) ) ) {
+ return $cache->get( $k );
+ }
+ }
+
+ return null;
+ } else {
+ return null;
+ }
+ }
+
+ public function getMessageGroupCache( string $code ): MessageGroupCache {
+ $cacheFilePath = TranslateUtils::cacheFile(
+ "translate_groupcache-{$this->getId()}/{$code}.cdb"
+ );
+
+ return new MessageGroupCache( $this, $code, $cacheFilePath );
+ }
+}
diff --git a/Translate/messagegroups/MediaWikiExtensionMessageGroup.php b/Translate/messagegroups/MediaWikiExtensionMessageGroup.php
new file mode 100644
index 00000000..b388a2d3
--- /dev/null
+++ b/Translate/messagegroups/MediaWikiExtensionMessageGroup.php
@@ -0,0 +1,40 @@
+<?php
+declare( strict_types = 1 );
+
+/**
+ * Message group for MediaWiki extensions.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @ingroup MessageGroup
+ */
+class MediaWikiExtensionMessageGroup extends FileBasedMessageGroup {
+ /**
+ * MediaWiki extensions all should have key in their i18n files
+ * describing them. This override method implements the logic
+ * to retrieve them.
+ * @param IContextSource|null $context
+ * @return string
+ */
+ public function getDescription( IContextSource $context = null ) {
+ $language = $this->getSourceLanguage();
+ if ( $context ) {
+ $language = $context->getLanguage()->getCode();
+ }
+
+ $msgkey = $this->getFromConf( 'BASIC', 'descriptionmsg' );
+ $desc = '';
+ if ( $msgkey ) {
+ $desc = $this->getMessage( $msgkey, $language );
+ if ( (string)$desc === '' ) {
+ $desc = $this->getMessage( $msgkey, $this->getSourceLanguage() );
+ }
+ }
+
+ if ( (string)$desc === '' ) {
+ // That failed, default to 'description'
+ $desc = parent::getDescription( $context );
+ }
+
+ return $desc;
+ }
+}
diff --git a/Translate/messagegroups/MessageGroup.php b/Translate/messagegroups/MessageGroup.php
new file mode 100644
index 00000000..0a45e621
--- /dev/null
+++ b/Translate/messagegroups/MessageGroup.php
@@ -0,0 +1,164 @@
+<?php
+/**
+ * This file holds a message group interface.
+ *
+ * @file
+ * @defgroup MessageGroup Message group
+ * @author Niklas Laxström
+ * @copyright Copyright © 2010-2013, Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Extension\Translate\Validation\ValidationRunner;
+
+/**
+ * Interface for message groups.
+ *
+ * Message groups are the heart of the Translate extension. They encapsulate
+ * a set of messages each. Aside from basic information like id, label and
+ * description, the class defines which mangler, validators and file
+ * system support (FFS), if any, the group uses.
+ *
+ * @ingroup MessageGroup
+ */
+interface MessageGroup {
+ /**
+ * Returns the unique identifier for this group.
+ * @return string
+ */
+ public function getId();
+
+ /**
+ * Returns the human readable label (as plain text).
+ * Parameter $context was added in 2012-10-22.
+ * @param IContextSource|null $context Context can be used by subclasses to provide
+ * translated descriptions, for example.
+ * @return string
+ */
+ public function getLabel( IContextSource $context = null );
+
+ /**
+ * Returns a longer description about the group. Description can use wikitext.
+ * Parameter $context was added in 2012-10-22.
+ * @param IContextSource|null $context Context can be used by subclasses to provide
+ * translated descriptions, for example.
+ * @return string
+ */
+ public function getDescription( IContextSource $context = null );
+
+ /**
+ * Returns an icon for this message group if any.
+ * @return string|null File reference in one of the supported protocols:
+ * - file://Filename.ext - Accessible via MediaWiki functions
+ * @since 2012-12-04
+ */
+ public function getIcon();
+
+ /**
+ * Returns the namespace where messages are placed.
+ * @return int
+ */
+ public function getNamespace();
+
+ /**
+ * @todo Unclear usage. Perhaps rename to isSecondary with the only purpose
+ * suppress warnings about message key conflicts.
+ * @return bool
+ */
+ public function isMeta();
+
+ /**
+ * If this function returns false, the message group is ignored and treated
+ * like it would not be configured at all. Useful for graceful degradation.
+ * Try to keep the check fast to avoid performance problems.
+ * @return bool
+ */
+ public function exists();
+
+ /**
+ * Returns a message validator object or null.
+ * @return ValidationRunner|null
+ */
+ public function getValidator();
+
+ /**
+ * Return a message mangler or null.
+ * @todo Make an interface for message manglers
+ * @return \MediaWiki\Extension\Translate\MessageProcessing\StringMatcher|null
+ */
+ public function getMangler();
+
+ /**
+ * Initialises a message collection with the given language code,
+ * message definitions and message tags.
+ * @param string $code
+ * @return MessageCollection
+ */
+ public function initCollection( $code );
+
+ /**
+ * Returns a list of messages in a given language code. For some groups
+ * that list may be identical with the translation in the wiki. For other
+ * groups the messages may be loaded from a file (and differ from the
+ * current translations or definitions).
+ * @param string $code
+ * @return string[]
+ */
+ public function load( $code );
+
+ /**
+ * Shortcut for load( getSourceLanguage() ).
+ * @return string[]
+ */
+ public function getDefinitions();
+
+ /**
+ * Shortcut for array_keys( getDefinitions() ) that can be optimized by
+ * the implementing classes.
+ * @return string[] List of message keys.
+ */
+ public function getKeys();
+
+ /**
+ * Returns message tags. If type is given, only message keys with that
+ * tag are returned. Otherwise an array[tag => keys] is returned.
+ * @param string|null $type
+ * @return array
+ */
+ public function getTags( $type = null );
+
+ /**
+ * Returns the definition or translation for given message key in given
+ * language code.
+ * @param string $key Message key
+ * @param string $code Language code
+ * @return string|null
+ */
+ public function getMessage( $key, $code );
+
+ /**
+ * Returns language code depicting the language of source text.
+ * @return string
+ */
+ public function getSourceLanguage();
+
+ /**
+ * Get the message group workflow state configuration.
+ * @return MessageGroupStates
+ */
+ public function getMessageGroupStates();
+
+ /**
+ * Get all the translatable languages for a group, considering the inclusion
+ * and exclusion list.
+ * @return array|null The language codes as array keys.
+ */
+ public function getTranslatableLanguages();
+
+ /**
+ * Gets support URL defined for the group if any
+ *
+ * @return array|null
+ */
+ public function getSupportConfig(): ?array;
+}
diff --git a/Translate/messagegroups/MessageGroupBase.php b/Translate/messagegroups/MessageGroupBase.php
new file mode 100644
index 00000000..38665bdb
--- /dev/null
+++ b/Translate/messagegroups/MessageGroupBase.php
@@ -0,0 +1,346 @@
+<?php
+/**
+ * This file contains a base implementation of managed message groups.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @copyright Copyright © 2010-2013, Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Extension\Translate\MessageProcessing\StringMatcher;
+use MediaWiki\Extension\Translate\Services;
+use MediaWiki\Extension\Translate\TranslatorInterface\Insertable\CombinedInsertablesSuggester;
+use MediaWiki\Extension\Translate\TranslatorInterface\Insertable\InsertableFactory;
+use MediaWiki\Extension\Translate\Validation\ValidationRunner;
+use MediaWiki\MediaWikiServices;
+
+/**
+ * This class implements some basic functions that wrap around the YAML
+ * message group configurations. These message groups use the FFS classes
+ * and are managed with Special:ManageMessageGroups and
+ * processMessageChanges.php.
+ *
+ * @see https://www.mediawiki.org/wiki/Help:Extension:Translate/Group_configuration
+ * @ingroup MessageGroup
+ */
+abstract class MessageGroupBase implements MessageGroup {
+ protected $conf;
+ protected $namespace;
+ /** @var StringMatcher */
+ protected $mangler;
+
+ protected function __construct() {
+ }
+
+ /**
+ * @param array $conf
+ *
+ * @return MessageGroup
+ */
+ public static function factory( $conf ) {
+ $obj = new $conf['BASIC']['class']();
+ $obj->conf = $conf;
+ $obj->namespace = $obj->parseNamespace();
+
+ return $obj;
+ }
+
+ public function getConfiguration() {
+ return $this->conf;
+ }
+
+ public function getId() {
+ return $this->getFromConf( 'BASIC', 'id' );
+ }
+
+ public function getLabel( IContextSource $context = null ) {
+ return $this->getFromConf( 'BASIC', 'label' );
+ }
+
+ public function getDescription( IContextSource $context = null ) {
+ return $this->getFromConf( 'BASIC', 'description' );
+ }
+
+ public function getIcon() {
+ return $this->getFromConf( 'BASIC', 'icon' );
+ }
+
+ public function getNamespace() {
+ return $this->namespace;
+ }
+
+ public function isMeta() {
+ return $this->getFromConf( 'BASIC', 'meta' );
+ }
+
+ public function getSourceLanguage() {
+ $conf = $this->getFromConf( 'BASIC', 'sourcelanguage' );
+
+ return $conf ?? 'en';
+ }
+
+ public function getDefinitions() {
+ $defs = $this->load( $this->getSourceLanguage() );
+
+ return $defs;
+ }
+
+ protected function getFromConf( $section, $key = null ) {
+ if ( $key === null ) {
+ return $this->conf[$section] ?? null;
+ }
+ return $this->conf[$section][$key] ?? null;
+ }
+
+ public function getValidator() {
+ $validatorConfigs = $this->getFromConf( 'VALIDATORS' );
+ if ( $validatorConfigs === null ) {
+ return null;
+ }
+
+ $msgValidator = new ValidationRunner( $this->getId() );
+
+ foreach ( $validatorConfigs as $config ) {
+ try {
+ $msgValidator->addValidator( $config );
+ } catch ( Exception $e ) {
+ $id = $this->getId();
+ throw new InvalidArgumentException(
+ "Unable to construct validator for message group $id: " . $e->getMessage(),
+ 0,
+ $e
+ );
+ }
+ }
+
+ return $msgValidator;
+ }
+
+ public function getMangler() {
+ if ( !isset( $this->mangler ) ) {
+ $class = $this->getFromConf( 'MANGLER', 'class' ) ?? StringMatcher::class;
+
+ if ( $class === 'StringMatcher' || $class === StringMatcher::class ) {
+ $this->mangler = new StringMatcher();
+ $manglerConfig = $this->conf['MANGLER'] ?? null;
+ if ( $manglerConfig ) {
+ $this->mangler->setConf( $manglerConfig );
+ }
+
+ return $this->mangler;
+ }
+
+ throw new InvalidArgumentException(
+ 'Unable to create StringMangler for group ' . $this->getId() . ': ' .
+ "Custom StringManglers ($class) are currently not supported."
+ );
+ }
+
+ return $this->mangler;
+ }
+
+ /**
+ * Returns the configured InsertablesSuggester if any.
+ * @since 2013.09
+ * @return CombinedInsertablesSuggester
+ */
+ public function getInsertablesSuggester() {
+ $suggesters = [];
+ $insertableConf = $this->getFromConf( 'INSERTABLES' ) ?? [];
+
+ foreach ( $insertableConf as $config ) {
+ if ( !isset( $config['class'] ) ) {
+ throw new InvalidArgumentException(
+ 'Insertable configuration for group: ' . $this->getId() .
+ ' does not provide a class.'
+ );
+ }
+
+ if ( !is_string( $config['class'] ) ) {
+ throw new InvalidArgumentException(
+ 'Expected Insertable class to be string, got: ' . gettype( $config['class'] ) .
+ ' for group: ' . $this->getId()
+ );
+ }
+
+ $suggesters[] = InsertableFactory::make( $config['class'], $config['params'] ?? [] );
+ }
+
+ // Get validators marked as insertable
+ $messageValidator = $this->getValidator();
+ if ( $messageValidator ) {
+ $suggesters = array_merge( $suggesters, $messageValidator->getInsertableValidators() );
+ }
+
+ return new CombinedInsertablesSuggester( $suggesters );
+ }
+
+ /** @inheritDoc */
+ public function getKeys() {
+ return array_keys( $this->getDefinitions() );
+ }
+
+ public function getTags( $type = null ) {
+ if ( $type === null ) {
+ $taglist = [];
+
+ foreach ( $this->getRawTags() as $type => $patterns ) {
+ $taglist[$type] = $this->parseTags( $patterns );
+ }
+
+ return $taglist;
+ } else {
+ return $this->parseTags( $this->getRawTags( $type ) );
+ }
+ }
+
+ protected function parseTags( $patterns ) {
+ $messageKeys = $this->getKeys();
+
+ $matches = [];
+
+ /**
+ * Collect exact keys, no point running them trough string matcher
+ */
+ foreach ( $patterns as $index => $pattern ) {
+ if ( strpos( $pattern, '*' ) === false ) {
+ $matches[] = $pattern;
+ unset( $patterns[$index] );
+ }
+ }
+
+ if ( count( $patterns ) ) {
+ /**
+ * Rest of the keys contain wildcards.
+ */
+ $mangler = new StringMatcher( '', $patterns );
+
+ /**
+ * Use mangler to find messages that match.
+ */
+ foreach ( $messageKeys as $key ) {
+ if ( $mangler->matches( $key ) ) {
+ $matches[] = $key;
+ }
+ }
+ }
+
+ return $matches;
+ }
+
+ protected function getRawTags( $type = null ) {
+ if ( !isset( $this->conf['TAGS'] ) ) {
+ return [];
+ }
+
+ $tags = $this->conf['TAGS'];
+ if ( !$type ) {
+ return $tags;
+ }
+
+ return $tags[$type] ?? [];
+ }
+
+ protected function setTags( MessageCollection $collection ) {
+ foreach ( $this->getTags() as $type => $tags ) {
+ $collection->setTags( $type, $tags );
+ }
+ }
+
+ protected function parseNamespace() {
+ $ns = $this->getFromConf( 'BASIC', 'namespace' );
+
+ if ( is_int( $ns ) ) {
+ return $ns;
+ }
+
+ if ( defined( $ns ) ) {
+ return constant( $ns );
+ }
+
+ $index = MediaWikiServices::getInstance()->getContentLanguage()
+ ->getNsIndex( $ns );
+
+ if ( !$index ) {
+ throw new MWException( "No valid namespace defined, got $ns." );
+ }
+
+ return $index;
+ }
+
+ protected function isSourceLanguage( $code ) {
+ return $code === $this->getSourceLanguage();
+ }
+
+ /**
+ * Get the message group workflow state configuration.
+ * @return MessageGroupStates
+ */
+ public function getMessageGroupStates() {
+ global $wgTranslateWorkflowStates;
+ $conf = $wgTranslateWorkflowStates ?: [];
+
+ Hooks::run( 'Translate:modifyMessageGroupStates', [ $this->getId(), &$conf ] );
+
+ return new MessageGroupStates( $conf );
+ }
+
+ /** @inheritDoc */
+ public function getTranslatableLanguages() {
+ $groupConfiguration = $this->getConfiguration();
+ if ( !isset( $groupConfiguration['LANGUAGES'] ) ) {
+ // No LANGUAGES section in the configuration.
+ return null;
+ }
+
+ $codes = array_flip( array_keys( TranslateUtils::getLanguageNames( null ) ) );
+
+ $lists = $groupConfiguration['LANGUAGES'];
+ $exclusionList = $lists['exclude'] ?? null;
+ if ( $exclusionList !== null ) {
+ if ( $exclusionList === '*' ) {
+ // All excluded languages
+ $codes = [];
+ } elseif ( is_array( $exclusionList ) ) {
+ foreach ( $exclusionList as $code ) {
+ unset( $codes[$code] );
+ }
+ }
+ } else {
+ // Treat lack of explicit exclusion list the same as excluding everything. This way,
+ // when one defines only inclusions, it means that only those languages are allowed.
+ $codes = [];
+ }
+
+ $disabledLanguages = Services::getInstance()->getConfigHelper()->getDisabledTargetLanguages();
+ // DWIM with $wgTranslateDisabledTargetLanguages, e.g. languages in that list should not unexpectedly
+ // be enabled when an inclusion list is used to include any language.
+ $checks = [ $this->getId(), strtok( $this->getId(), '-' ), '*' ];
+ foreach ( $checks as $check ) {
+ if ( isset( $disabledLanguages[ $check ] ) ) {
+ foreach ( array_keys( $disabledLanguages[ $check ] ) as $excludedCode ) {
+ unset( $codes[ $excludedCode ] );
+ }
+ }
+ }
+
+ $inclusionList = $lists['include'] ?? null;
+ if ( $inclusionList !== null ) {
+ if ( $inclusionList === '*' ) {
+ // All languages included (except $wgTranslateDisabledTargetLanguages)
+ return null;
+ } elseif ( is_array( $inclusionList ) ) {
+ foreach ( $inclusionList as $code ) {
+ $codes[$code] = true;
+ }
+ }
+ }
+
+ return $codes;
+ }
+
+ public function getSupportConfig(): ?array {
+ return $this->getFromConf( 'BASIC', 'support' );
+ }
+}
diff --git a/Translate/messagegroups/MessageGroupOld.php b/Translate/messagegroups/MessageGroupOld.php
new file mode 100644
index 00000000..762f2dfa
--- /dev/null
+++ b/Translate/messagegroups/MessageGroupOld.php
@@ -0,0 +1,321 @@
+<?php
+/**
+ * This file contains the base information of unmanaged message groups.
+ * These classes don't use Yaml configuration nor Special:ManageMessageGroups
+ * nor processMessageChanges.php
+ *
+ * @file
+ * @author Niklas Laxström
+ * @author Siebrand Mazeland
+ * @copyright Copyright © 2008-2013, Niklas Laxström, Siebrand Mazeland
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Extension\Translate\MessageProcessing\StringMatcher;
+use MediaWiki\Extension\Translate\TranslatorInterface\Aid\TranslationAid;
+
+/**
+ * This is the interface and base implementation of unmanaged
+ * message groups.
+ * @todo Rename the class
+ * @ingroup MessageGroup
+ */
+abstract class MessageGroupOld implements MessageGroup {
+ /**
+ * Human-readable name of this group
+ */
+ protected $label = 'none';
+
+ /**
+ * @param IContextSource|null $context
+ * @return string
+ */
+ public function getLabel( IContextSource $context = null ) {
+ return $this->label;
+ }
+
+ /** @param string $value */
+ public function setLabel( $value ) {
+ $this->label = $value;
+ }
+
+ /**
+ * Group-wide unique id of this group. Used also for sorting.
+ */
+ protected $id = 'none';
+
+ /** @return string */
+ public function getId() {
+ return $this->id;
+ }
+
+ /** @param string $value */
+ public function setId( $value ) {
+ $this->id = $value;
+ }
+
+ /**
+ * The namespace where all the messages of this group belong.
+ * If the group has messages from multiple namespaces, set this to false
+ * and look how RecentMessageGroup implements the definitions.
+ */
+ protected $namespace = NS_MEDIAWIKI;
+
+ /**
+ * Get the namespace where all the messages of this group belong.
+ * @return int
+ */
+ public function getNamespace() {
+ return $this->namespace;
+ }
+
+ /**
+ * Set the namespace where all the messages of this group belong.
+ * @param int $ns
+ */
+ public function setNamespace( $ns ) {
+ $this->namespace = $ns;
+ }
+
+ /**
+ * Holds description of this group. Description is a wiki text snippet that
+ * gives information about this group to translators.
+ */
+ protected $description = null;
+
+ public function getDescription( IContextSource $context = null ) {
+ return $this->description;
+ }
+
+ public function setDescription( $value ) {
+ $this->description = $value;
+ }
+
+ public function getIcon() {
+ return null;
+ }
+
+ /**
+ * Meta groups consist of multiple groups or parts of other groups. This info
+ * is used on many places, like when creating message index.
+ */
+ protected $meta = false;
+
+ public function isMeta() {
+ return $this->meta;
+ }
+
+ public function getSourceLanguage() {
+ return 'en';
+ }
+
+ /**
+ * To avoid key conflicts between groups or separated changed messages between
+ * branches one can set a message key mangler.
+ */
+ protected $mangler = null;
+
+ /** @return StringMatcher */
+ public function getMangler() {
+ if ( !isset( $this->mangler ) ) {
+ $this->mangler = new StringMatcher();
+ }
+
+ return $this->mangler;
+ }
+
+ public function load( $code ) {
+ return [];
+ }
+
+ /**
+ * This function returns array of type key => definition of all messages
+ * this message group handles.
+ *
+ * @throws MWException
+ * @return string[] List of message definitions indexed by key.
+ */
+ public function getDefinitions() {
+ $defs = $this->load( $this->getSourceLanguage() );
+ if ( !is_array( $defs ) ) {
+ throw new MWException( 'Unable to load definitions for ' . $this->getLabel() );
+ }
+
+ return $defs;
+ }
+
+ /**
+ * This function can be used for meta message groups to list their "own"
+ * messages. For example branched message groups can exclude the messages they
+ * share with each other.
+ * @return array
+ */
+ public function getUniqueDefinitions() {
+ return $this->meta ? [] : $this->getDefinitions();
+ }
+
+ /** @inheritDoc */
+ public function getKeys() {
+ return array_keys( $this->getDefinitions() );
+ }
+
+ /**
+ * Returns of stored translation of message specified by the $key in language
+ * code $code.
+ *
+ * @param string $key Message key
+ * @param string $code Language code
+ * @return mixed List of stored translation or \null.
+ */
+ public function getMessage( $key, $code ) {
+ if ( !isset( $this->messages[$code] ) ) {
+ $this->messages[$code] = self::normaliseKeys( $this->load( $code ) );
+ }
+ $key = strtolower( str_replace( ' ', '_', $key ) );
+
+ return $this->messages[$code][$key] ?? null;
+ }
+
+ public static function normaliseKeys( $array ) {
+ if ( !is_array( $array ) ) {
+ return null;
+ }
+
+ $new = [];
+ foreach ( $array as $key => $v ) {
+ $key = strtolower( str_replace( ' ', '_', $key ) );
+ $new[$key] = $v;
+ }
+
+ return $new;
+ }
+
+ /**
+ * All the messages for this group, by language code.
+ */
+ protected $messages = [];
+
+ /**
+ * Returns path to the file where translation of language code $code are.
+ *
+ * @param string $code
+ * @return string Path to the file or false if not applicable.
+ */
+ public function getMessageFile( $code ) {
+ return false;
+ }
+
+ public function getPath() {
+ return false;
+ }
+
+ /**
+ * @param string $code
+ * @return bool|string
+ */
+ public function getMessageFileWithPath( $code ) {
+ $path = $this->getPath();
+ $file = $this->getMessageFile( $code );
+
+ if ( !$path || !$file ) {
+ return false;
+ }
+
+ return "$path/$file";
+ }
+
+ public function getSourceFilePath( $code ) {
+ return $this->getMessageFileWithPath( $code );
+ }
+
+ /**
+ * Creates a new MessageCollection for this group.
+ *
+ * @param string $code Language code for this collection.
+ * @param bool $unique Whether to build collection for messages unique to this
+ * group only.
+ * @return MessageCollection
+ */
+ public function initCollection( $code, $unique = false ) {
+ if ( !$unique ) {
+ $definitions = $this->getDefinitions();
+ } else {
+ $definitions = $this->getUniqueDefinitions();
+ }
+
+ $defs = new MessageDefinitions( $definitions, $this->getNamespace() );
+ $collection = MessageCollection::newFromDefinitions( $defs, $code );
+
+ foreach ( $this->getTags() as $type => $tags ) {
+ $collection->setTags( $type, $tags );
+ }
+
+ return $collection;
+ }
+
+ /**
+ * Can be overwritten to return false if something is wrong.
+ * @return bool
+ */
+ public function exists() {
+ return true;
+ }
+
+ public function getValidator() {
+ return null;
+ }
+
+ public function getTags( $type = null ) {
+ return [];
+ }
+
+ /**
+ * @param string $code
+ * @return bool
+ */
+ protected function isSourceLanguage( $code ) {
+ return $code === $this->getSourceLanguage();
+ }
+
+ /**
+ * Get the message group workflow state configuration.
+ * @return MessageGroupStates
+ */
+ public function getMessageGroupStates() {
+ global $wgTranslateWorkflowStates;
+ $conf = $wgTranslateWorkflowStates ?: [];
+
+ Hooks::run( 'Translate:modifyMessageGroupStates', [ $this->getId(), &$conf ] );
+
+ return new MessageGroupStates( $conf );
+ }
+
+ /** @inheritDoc */
+ public function getTranslatableLanguages() {
+ return null;
+ }
+
+ protected static function addContext( Message $message, IContextSource $context = null ) {
+ if ( $context ) {
+ $message->inLanguage( $context->getLanguage() );
+ } else {
+ $message->inLanguage( 'en' );
+ }
+
+ return $message;
+ }
+
+ /**
+ * List of available message types mapped to the classes
+ * implementing them. Default implementation (all).
+ *
+ * @return array
+ */
+ public function getTranslationAids() {
+ return TranslationAid::getTypes();
+ }
+
+ public function getSupportConfig(): ?array {
+ return null;
+ }
+}
diff --git a/Translate/messagegroups/RecentAdditionsMessageGroup.php b/Translate/messagegroups/RecentAdditionsMessageGroup.php
new file mode 100644
index 00000000..d6b221de
--- /dev/null
+++ b/Translate/messagegroups/RecentAdditionsMessageGroup.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * This file contains an unmanaged message group implementation.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @copyright Copyright © 2012-2013, Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Extension\Translate\SystemUsers\FuzzyBot;
+
+/**
+ * @since 2012-11-01
+ * @ingroup MessageGroup
+ */
+class RecentAdditionsMessageGroup extends RecentMessageGroup {
+ public function getId() {
+ return '!additions';
+ }
+
+ public function getLabel( IContextSource $context = null ) {
+ $msg = wfMessage( 'translate-dynagroup-additions-label' );
+ $msg = self::addContext( $msg, $context );
+
+ return $msg->plain();
+ }
+
+ public function getDescription( IContextSource $context = null ) {
+ $msg = wfMessage( 'translate-dynagroup-additions-desc' );
+ $msg = self::addContext( $msg, $context );
+
+ return $msg->plain();
+ }
+
+ protected function getQueryConditions() {
+ global $wgTranslateMessageNamespaces;
+ $db = wfGetDB( DB_REPLICA );
+ $conds = [
+ 'rc_title ' . $db->buildLike( $db->anyString(), '/en' ),
+ 'rc_namespace' => $wgTranslateMessageNamespaces,
+ 'rc_type != ' . RC_LOG,
+ 'rc_id > ' . $this->getRCCutoff(),
+ 'rc_actor' => FuzzyBot::getUser()->getActorId()
+ ];
+
+ return $conds;
+ }
+}
diff --git a/Translate/messagegroups/RecentMessageGroup.php b/Translate/messagegroups/RecentMessageGroup.php
new file mode 100644
index 00000000..aa6692a4
--- /dev/null
+++ b/Translate/messagegroups/RecentMessageGroup.php
@@ -0,0 +1,155 @@
+<?php
+/**
+ * This file contains an unmanaged message group implementation.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @author Siebrand Mazeland
+ * @copyright Copyright © 2008-2013, Niklas Laxström, Siebrand Mazeland
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * @since 2011-11-28
+ * @ingroup MessageGroup
+ */
+class RecentMessageGroup extends WikiMessageGroup {
+ /*
+ * Yes this is very ugly hack and should not be removed.
+ * @see MessageCollection::getPages()
+ */
+ protected $namespace = false;
+ protected $language;
+
+ /**
+ * These groups are always generated for one language. Method setLanguage
+ * must be called before calling getDefinitions.
+ */
+ public function __construct() {
+ }
+
+ public function setLanguage( $code ) {
+ $this->language = $code;
+ }
+
+ public function getId() {
+ return '!recent';
+ }
+
+ public function getLabel( IContextSource $context = null ) {
+ $msg = wfMessage( 'translate-dynagroup-recent-label' );
+ $msg = self::addContext( $msg, $context );
+
+ return $msg->plain();
+ }
+
+ public function getDescription( IContextSource $context = null ) {
+ $msg = wfMessage( 'translate-dynagroup-recent-desc' );
+ $msg = self::addContext( $msg, $context );
+
+ return $msg->plain();
+ }
+
+ protected function getRCCutoff() {
+ $db = wfGetDB( DB_REPLICA );
+ $tables = 'recentchanges';
+ $max = $db->selectField( $tables, 'MAX(rc_id)', [], __METHOD__ );
+
+ return max( 0, $max - 50000 );
+ }
+
+ /**
+ * Allows subclasses to partially customize the query.
+ * @return array
+ */
+ protected function getQueryConditions() {
+ global $wgTranslateMessageNamespaces;
+ $db = wfGetDB( DB_REPLICA );
+ $conds = [
+ 'rc_title ' . $db->buildLike( $db->anyString(), '/' . $this->language ),
+ 'rc_namespace' => $wgTranslateMessageNamespaces,
+ 'rc_type != ' . RC_LOG,
+ 'rc_id > ' . $this->getRCCutoff(),
+ ];
+
+ return $conds;
+ }
+
+ /**
+ * Filters out messages that should not be displayed here
+ * as they are not displayed in other places.
+ *
+ * @param MessageHandle $handle
+ * @return bool
+ */
+ protected function matchingMessage( MessageHandle $handle ): bool {
+ return MessageGroups::isTranslatableMessage( $handle, $this->language );
+ }
+
+ public function getDefinitions() {
+ if ( !$this->language ) {
+ throw new MWException( 'Language not set' );
+ }
+
+ $db = wfGetDB( DB_REPLICA );
+
+ $rcQuery = RecentChange::getQueryInfo();
+ $tables = $rcQuery['tables'];
+ $joins = $rcQuery['joins'];
+
+ $fields = [ 'rc_namespace', 'rc_title' ];
+ $conds = $this->getQueryConditions();
+ $options = [
+ 'ORDER BY' => 'rc_id DESC',
+ 'LIMIT' => 5000
+ ];
+ $res = $db->select( $tables, $fields, $conds, __METHOD__, $options, $joins );
+
+ $defs = [];
+ foreach ( $res as $row ) {
+ $title = Title::makeTitle( $row->rc_namespace, $row->rc_title );
+ $handle = new MessageHandle( $title );
+
+ if ( !$this->matchingMessage( $handle ) ) {
+ continue;
+ }
+
+ $messageKey = $handle->getKey();
+ $fullKey = $row->rc_namespace . ':' . $messageKey;
+
+ /* Note: due to bugs, getMessage might return null even for
+ * known messages. These negatives are not cached, but that
+ * should be rare enough case to not affect performance. */
+ if ( !isset( $defs[$fullKey] ) ) {
+ $group = $handle->getGroup();
+ $msg = $group->getMessage( $messageKey, $group->getSourceLanguage() );
+
+ if ( $msg !== null ) {
+ $defs[$fullKey] = $msg;
+ }
+ }
+ }
+
+ return $defs;
+ }
+
+ public function getValidator() {
+ return null;
+ }
+
+ /**
+ * Subpage language code, if any in the title, is ignored.
+ * @param MessageHandle $handle
+ * @return null|string
+ * @throws MWException
+ */
+ public function getMessageContent( MessageHandle $handle ) {
+ $groupId = MessageIndex::getPrimaryGroupId( $handle );
+ $group = MessageGroups::getGroup( $groupId );
+ if ( $group ) {
+ return $group->getMessage( $handle->getKey(), $group->getSourceLanguage() );
+ }
+
+ throw new MWException( 'Could not find group for ' . $handle->getKey() );
+ }
+}
diff --git a/Translate/messagegroups/SandboxMessageGroup.php b/Translate/messagegroups/SandboxMessageGroup.php
new file mode 100644
index 00000000..1db86c08
--- /dev/null
+++ b/Translate/messagegroups/SandboxMessageGroup.php
@@ -0,0 +1,157 @@
+<?php
+/**
+ * This file contains an unmanaged message group implementation.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Extension\Translate\TranslatorSandbox\TranslationStashStorage;
+
+/**
+ * @since 2013.06
+ * @ingroup MessageGroup
+ */
+class SandboxMessageGroup extends WikiMessageGroup {
+ /*
+ * Yes this is very ugly hack and should not be removed.
+ * @see MessageCollection::getPages()
+ */
+ protected $namespace = false;
+ protected $language;
+
+ /**
+ * #setLanguage must be called before calling getDefinitions.
+ */
+ public function __construct() {
+ }
+
+ public function setLanguage( $code ) {
+ $this->language = $code;
+ }
+
+ public function getId() {
+ return '!sandbox';
+ }
+
+ public function getLabel( IContextSource $context = null ) {
+ // Should not be visible
+ return 'Sandbox messages';
+ }
+
+ public function getDescription( IContextSource $context = null ) {
+ // Should not be visible
+ return 'Suggests messages to translate for sandboxed users';
+ }
+
+ public function getDefinitions() {
+ global $wgTranslateSandboxLimit;
+
+ // This will contain the list of messages shown to the user
+ $list = [];
+
+ // Ugly
+ $store = new TranslationStashStorage( wfGetDB( DB_PRIMARY ) );
+ $user = RequestContext::getMain()->getUser();
+ $translations = $store->getTranslations( $user );
+
+ // Add messages the user has already translated first, so he
+ // can go back and correct them.
+ foreach ( $translations as $translation ) {
+ $title = $translation->getTitle();
+ $handle = new MessageHandle( $title );
+ $index = $title->getNamespace() . ':' . $handle->getKey();
+ $list[$index] = '';
+ }
+
+ // Get some random keys
+ $all = MessageIndex::singleton()->getKeys();
+ // In case there aren't any messages
+ if ( $all === [] ) {
+ return $list;
+ }
+ $min = 0;
+ $max = count( $all ) - 1; // Indexes are zero-based
+
+ // Get some message. Will be filtered to less below.
+ for ( $i = count( $list ); $i < 100; $i++ ) {
+ $list[$all[rand( $min, $max )]] = '';
+ }
+
+ // Fetch definitions, slowly, one by one
+ $count = 0;
+
+ // Provide twice the number of messages than the limit
+ // to have a buffer in case the user skips some messages
+ $messagesToProvide = $wgTranslateSandboxLimit * 2;
+
+ foreach ( $list as $index => &$translation ) {
+ [ $ns, $page ] = explode( ':', $index, 2 );
+ $title = Title::makeTitle( $ns, "$page/{$this->language}" );
+ $handle = new MessageHandle( $title );
+
+ if ( MessageGroups::isTranslatableMessage( $handle, $this->language ) ) {
+ // Modified by reference
+ $translation = $this->getMessageContent( $handle );
+ if ( $translation === null ) {
+ // Something is not in sync or badly broken. Handle gracefully.
+ unset( $list[$index] );
+ wfWarn( "No message definition for $index while preparing the sandbox" );
+
+ continue;
+ }
+ } else {
+ // This might include messages that the user has already translated
+ // or just dated message index.
+ unset( $list[$index] );
+
+ continue;
+ }
+
+ $count++;
+
+ if ( $count === $messagesToProvide ) {
+ break;
+ }
+ }
+
+ // Remove the extra entries
+ $list = array_slice( $list, 0, $messagesToProvide );
+
+ return $list;
+ }
+
+ public function getValidator() {
+ return null;
+ }
+
+ /**
+ * Subpage language code, if any in the title, is ignored.
+ * @param MessageHandle $handle
+ * @return null|string
+ */
+ public function getMessageContent( MessageHandle $handle ) {
+ $groupId = MessageIndex::getPrimaryGroupId( $handle );
+ $group = MessageGroups::getGroup( $groupId );
+ $key = $handle->getKey();
+
+ $source = $group->getMessage( $key, $group->getSourceLanguage() );
+ if ( $source !== null ) {
+ return $source;
+ }
+
+ // Try harder
+ $keys = $group->getKeys();
+
+ // Try to find the original key with correct case
+ foreach ( $keys as $realkey ) {
+ if ( $key === strtolower( $realkey ) ) {
+ $key = $realkey;
+ break;
+ }
+ }
+
+ return $group->getMessage( $key, $group->getSourceLanguage() );
+ }
+}
diff --git a/Translate/messagegroups/WikiMessageGroup.php b/Translate/messagegroups/WikiMessageGroup.php
new file mode 100644
index 00000000..ea97a7ed
--- /dev/null
+++ b/Translate/messagegroups/WikiMessageGroup.php
@@ -0,0 +1,86 @@
+<?php
+/**
+ * This file contains an unmanaged message group implementation.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @author Siebrand Mazeland
+ * @copyright Copyright © 2008-2013, Niklas Laxström, Siebrand Mazeland
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * Group for messages that can be controlled via a page in %MediaWiki namespace.
+ *
+ * In the page comments start with # and continue till the end of the line.
+ * The page should contain list of page names in %MediaWiki namespace, without
+ * the namespace prefix. Use underscores for spaces in page names, since
+ * whitespace separates the page names from each other.
+ * @ingroup MessageGroup
+ */
+class WikiMessageGroup extends MessageGroupOld {
+ protected $source;
+
+ /**
+ * @param string $id Unique id for this group.
+ * @param string $source Mediawiki message that contains list of message keys.
+ */
+ public function __construct( $id, $source ) {
+ $this->id = $id;
+ $this->source = $source;
+ }
+
+ /**
+ * Defaults to wiki content language.
+ * @return string Language code
+ */
+ public function getSourceLanguage() {
+ global $wgLanguageCode;
+
+ return $wgLanguageCode;
+ }
+
+ /**
+ * Fetch definitions from database.
+ * @return array Array of messages keys with definitions.
+ */
+ public function getDefinitions() {
+ $definitions = [];
+
+ // In theory the page could have templates that are substitued
+ $source = wfMessage( $this->source );
+ if ( $source->isDisabled() ) {
+ return [];
+ }
+
+ $contents = $source->text();
+ $contents = preg_replace( '~^\s*#.*$~m', '', $contents );
+ $messages = preg_split( '/\s+/', $contents );
+
+ foreach ( $messages as $message ) {
+ if ( !$message ) {
+ continue;
+ }
+
+ $definitions[$message] = wfMessage( $message )->inContentLanguage()->plain();
+ }
+
+ return $definitions;
+ }
+
+ /**
+ * Returns of stored translation of message specified by the $key in language
+ * code $code.
+ *
+ * @param string $key Key of the message.
+ * @param string $code Language code.
+ * @return string|null The translation or null if it doesn't exist.
+ */
+ public function getMessage( $key, $code ) {
+ if ( $code && $this->getSourceLanguage() !== $code ) {
+ return TranslateUtils::getMessageContent( $key, $code );
+ } else {
+ return TranslateUtils::getMessageContent( $key, false );
+ }
+ }
+}
diff --git a/Translate/messagegroups/WikiPageMessageGroup.php b/Translate/messagegroups/WikiPageMessageGroup.php
new file mode 100644
index 00000000..bd619c3a
--- /dev/null
+++ b/Translate/messagegroups/WikiPageMessageGroup.php
@@ -0,0 +1,208 @@
+<?php
+/**
+ * This file contains an unmanaged message group implementation.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @author Siebrand Mazeland
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Extension\Translate\PageTranslation\Hooks;
+use MediaWiki\Extension\Translate\PageTranslation\TranslatablePageInsertablesSuggester;
+use MediaWiki\Extension\Translate\PageTranslation\TranslationUnit;
+use MediaWiki\Extension\Translate\Validation\ValidationRunner;
+use MediaWiki\MediaWikiServices;
+use MediaWiki\Revision\SlotRecord;
+
+/**
+ * Wraps the translatable page sections into a message group.
+ * @ingroup PageTranslation MessageGroup
+ */
+class WikiPageMessageGroup extends MessageGroupOld implements IDBAccessObject {
+ /** @var Title|string */
+ protected $title;
+ /** @var int */
+ protected $namespace = NS_TRANSLATIONS;
+
+ /**
+ * @param string $id
+ * @param Title|string $title
+ */
+ public function __construct( $id, $title ) {
+ $this->id = $id;
+ $this->title = $title;
+ }
+
+ public function getSourceLanguage() {
+ return $this->getTitle()->getPageLanguage()->getCode();
+ }
+
+ /** @return Title */
+ public function getTitle() {
+ if ( is_string( $this->title ) ) {
+ $this->title = Title::newFromText( $this->title );
+ }
+
+ return $this->title;
+ }
+
+ /**
+ * Only used for caching to avoid repeating database queries
+ * for example during message index rebuild.
+ */
+ protected $definitions;
+
+ /** @return string[] */
+ public function getDefinitions() {
+ if ( is_array( $this->definitions ) ) {
+ return $this->definitions;
+ }
+
+ $title = $this->getTitle();
+
+ $dbr = TranslateUtils::getSafeReadDB();
+ $tables = [ 'page', 'translate_sections' ];
+ $vars = [ 'trs_key', 'trs_text' ];
+ $conds = [
+ 'page_namespace' => $title->getNamespace(),
+ 'page_title' => $title->getDBkey(),
+ // The join condition
+ 'page_id = trs_page',
+ ];
+ $options = [ 'ORDER BY' => 'trs_order' ];
+ $res = $dbr->select( $tables, $vars, $conds, __METHOD__, $options );
+
+ $defs = [];
+
+ foreach ( $res as $r ) {
+ $section = new TranslationUnit( $r->trs_text );
+ $defs[$r->trs_key] = $section->getTextWithVariables();
+ }
+
+ $groupKeys = $this->makeGroupKeys( array_keys( $defs ) );
+ $this->definitions = array_combine( $groupKeys, array_values( $defs ) );
+
+ return $this->definitions;
+ }
+
+ /**
+ * @param string[] $keys
+ * @return string[]
+ */
+ public function makeGroupKeys( array $keys ): array {
+ $prefix = $this->getTitle()->getPrefixedDBkey() . '/';
+ return array_map( static function ( string $key ) use ( $prefix ): string {
+ return $prefix . str_replace( ' ', '_', $key );
+ }, $keys );
+ }
+
+ /**
+ * Overriding the getLabel method and deriving the label from the title.
+ * Mainly to reduce the amount of data stored in the cache.
+ *
+ * @param IContextSource|null $context
+ * @return string
+ */
+ public function getLabel( IContextSource $context = null ) {
+ return $this->getTitle()->getPrefixedText();
+ }
+
+ /**
+ * Clear caches to avoid stale data.
+ *
+ * For example JobQueue can run for a longer time, and stale definitions would
+ * cause the total number of messages to be incorrect.
+ *
+ * @since 2016.04
+ */
+ public function clearCaches() {
+ $this->definitions = null;
+ }
+
+ public function load( $code ) {
+ if ( $this->isSourceLanguage( $code ) ) {
+ return $this->getDefinitions();
+ }
+
+ return [];
+ }
+
+ /**
+ * Returns of stored translation of message specified by the $key in language
+ * code $code.
+ *
+ * @param string $key Message key
+ * @param string $code Language code
+ * @param int $flags READ_* class constant bitfield
+ * @return string|null Stored translation or null.
+ */
+ public function getMessage( $key, $code, $flags = self::READ_LATEST ) {
+ if ( $this->isSourceLanguage( $code ) ) {
+ $stuff = $this->load( $code );
+
+ $title = Title::newFromText( $key );
+ if ( $title ) {
+ $key = $title->getPrefixedDBkey();
+ }
+
+ return $stuff[$key] ?? null;
+ }
+
+ $title = Title::makeTitleSafe( $this->getNamespace(), "$key/$code" );
+ if ( Hooks::$renderingContext ) {
+ $revFlags = IDBAccessObject::READ_NORMAL; // bug T95753
+ } else {
+ $revFlags = ( $flags & self::READ_LATEST ) == self::READ_LATEST
+ ? IDBAccessObject::READ_LATEST
+ : IDBAccessObject::READ_NORMAL;
+ }
+ $rev = MediaWikiServices::getInstance()
+ ->getRevisionLookup()
+ ->getRevisionByTitle( $title, false, $revFlags );
+
+ if ( !$rev ) {
+ return null;
+ }
+
+ $content = $rev->getContent( SlotRecord::MAIN );
+ return ( $content instanceof TextContent ) ? $content->getText() : null;
+ }
+
+ /** @return ValidationRunner */
+ public function getValidator() {
+ $validator = new ValidationRunner( $this->getId() );
+ $validator->setValidators( [
+ [ 'id' => 'MediaWikiPlural' ],
+ [ 'id' => 'BraceBalance' ]
+ ] );
+
+ return $validator;
+ }
+
+ public function getInsertablesSuggester() {
+ return new TranslatablePageInsertablesSuggester();
+ }
+
+ public function getDescription( IContextSource $context = null ) {
+ $title = $this->getTitle()->getPrefixedText();
+ $target = ":$title";
+ $pageLanguageCode = $this->getSourceLanguage();
+ $inLanguageCode = $context ? $context->getLanguage()->getCode() : null;
+ $languageName = Language::fetchLanguageName( $pageLanguageCode, $inLanguageCode );
+
+ // Allow for adding a custom group description by using
+ // "MediaWiki:Tp-custom-<group ID>".
+ $customText = '';
+ $msg = wfMessage( 'tp-custom-' . $this->id );
+ self::addContext( $msg, $context );
+ if ( $msg->exists() ) {
+ $customText = $msg->plain();
+ }
+
+ $msg = wfMessage( 'translate-tag-page-desc', $title, $target, $languageName, $pageLanguageCode );
+ self::addContext( $msg, $context );
+
+ return $msg->plain() . $customText;
+ }
+}
diff --git a/Translate/messagegroups/WorkflowStatesMessageGroup.php b/Translate/messagegroups/WorkflowStatesMessageGroup.php
new file mode 100644
index 00000000..016a3856
--- /dev/null
+++ b/Translate/messagegroups/WorkflowStatesMessageGroup.php
@@ -0,0 +1,75 @@
+<?php
+/**
+ * This file contains an unmanaged message group implementation.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @author Siebrand Mazeland
+ * @copyright Copyright © 2008-2013, Niklas Laxström, Siebrand Mazeland
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Extension\Translate\SystemUsers\FuzzyBot;
+use MediaWiki\MediaWikiServices;
+
+/** @ingroup MessageGroup */
+class WorkflowStatesMessageGroup extends WikiMessageGroup {
+ // id and source are not needed
+ public function __construct() {
+ }
+
+ public function getId() {
+ return 'translate-workflow-states';
+ }
+
+ public function getLabel( IContextSource $context = null ) {
+ $msg = wfMessage( 'translate-workflowgroup-label' );
+ $msg = self::addContext( $msg, $context );
+
+ return $msg->plain();
+ }
+
+ public function getDescription( IContextSource $context = null ) {
+ $msg = wfMessage( 'translate-workflowgroup-desc' );
+ $msg = self::addContext( $msg, $context );
+
+ return $msg->plain();
+ }
+
+ public function getDefinitions() {
+ $groups = MessageGroups::getAllGroups();
+ $keys = [];
+
+ /** @var $g MessageGroup */
+ foreach ( $groups as $g ) {
+ $states = $g->getMessageGroupStates()->getStates();
+ foreach ( array_keys( $states ) as $state ) {
+ $keys["Translate-workflow-state-$state"] = $state;
+ }
+ }
+
+ $defs = TranslateUtils::getContents( array_keys( $keys ), $this->getNamespace() );
+ $wikiPageFactory = MediaWikiServices::getInstance()->getWikiPageFactory();
+ foreach ( $keys as $key => $state ) {
+ if ( !isset( $defs[$key] ) ) {
+ // @todo Use jobqueue
+ $title = Title::makeTitleSafe( $this->getNamespace(), $key );
+ $page = $wikiPageFactory->newFromTitle( $title );
+ $content = ContentHandler::makeContent( $state, $title );
+
+ $page->doUserEditContent(
+ $content,
+ FuzzyBot::getUser(),
+ wfMessage( 'translate-workflow-autocreated-summary', $state )->inContentLanguage()->text()
+ );
+ } else {
+ // Use the wiki translation as definition if available.
+ // getContents returns array( content, last author )
+ [ $content, ] = $defs[$key];
+ $keys[$key] = $content;
+ }
+ }
+
+ return $keys;
+ }
+}
diff --git a/Translate/messagegroups/loaders/AggregateMessageGroupLoader.php b/Translate/messagegroups/loaders/AggregateMessageGroupLoader.php
new file mode 100644
index 00000000..386d4f43
--- /dev/null
+++ b/Translate/messagegroups/loaders/AggregateMessageGroupLoader.php
@@ -0,0 +1,161 @@
+<?php
+/**
+ * This file contains a class to load aggregate message groups and handle
+ * the related cache.
+ *
+ * @file
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\IDatabase;
+
+/**
+ * Loads AggregateMessageGroup, and handles the related cache.
+ * @since 2019.05
+ */
+class AggregateMessageGroupLoader extends MessageGroupLoader
+ implements CachedMessageGroupLoader {
+
+ private const CACHE_KEY = 'aggregate';
+ private const CACHE_VERSION = 2;
+
+ /** @var MessageGroupWANCache */
+ protected $cache;
+ /** @var IDatabase */
+ protected $db;
+ /** @var AggregateMessageGroup[]|null */
+ protected $groups;
+
+ public function __construct( IDatabase $db, MessageGroupWANCache $cache ) {
+ $this->db = $db;
+ $this->cache = $cache;
+ $this->cache->configure(
+ [
+ 'key' => self::CACHE_KEY,
+ 'version' => self::CACHE_VERSION,
+ 'regenerator' => [ $this, 'getCacheData' ],
+ ]
+ );
+ }
+
+ /**
+ * Fetches the AggregateMessageGroups
+ *
+ * @return AggregateMessageGroup[] Key is the MessageGroup ID and value is the corresponding
+ * AggregateMessageGroup
+ */
+ public function getGroups() {
+ if ( $this->groups === null ) {
+ $this->groups = $this->initGroupsFromConf( $this->cache->getValue() );
+ }
+
+ return $this->groups;
+ }
+
+ /**
+ * Hook: TranslateInitGroupLoaders
+ *
+ * @param array &$groupLoader
+ * @param array $deps Dependencies
+ */
+ public static function registerLoader( array &$groupLoader, array $deps ) {
+ $groupLoader[] = self::getInstance(
+ $deps['database'],
+ $deps['cache']
+ );
+ }
+
+ /**
+ * Return an instance of this class using the parameters, if passed,
+ * else initialize the necessary dependencies and return an instance.
+ *
+ * @param IDatabase|null $db
+ * @param WANObjectCache|null $cache
+ * @return self
+ */
+ public static function getInstance( IDatabase $db = null, WANObjectCache $cache = null ) {
+ return new self(
+ $db ?? TranslateUtils::getSafeReadDB(),
+ new MessageGroupWANCache(
+ $cache ?? MediaWikiServices::getInstance()->getMainWANObjectCache()
+ )
+ );
+ }
+
+ /**
+ * Get all the aggregate messages groups defined in translate_metadata table
+ * and return their configuration
+ * @return array[]
+ */
+ public function getCacheData(): array {
+ $tables = [ 'translate_metadata' ];
+ $field = 'tmd_group';
+ $conds = [ 'tmd_key' => 'subgroups' ];
+ $groupIds = $this->db->selectFieldValues( $tables, $field, $conds, __METHOD__ );
+ TranslateMetadata::preloadGroups( $groupIds, __METHOD__ );
+
+ $groups = [];
+ foreach ( $groupIds as $id ) {
+ $conf = [];
+ $conf['BASIC'] = [
+ 'id' => $id,
+ 'label' => TranslateMetadata::get( $id, 'name' ),
+ 'description' => TranslateMetadata::get( $id, 'description' ),
+ 'meta' => 1,
+ 'class' => AggregateMessageGroup::class,
+ 'namespace' => NS_TRANSLATIONS,
+ ];
+ $conf['GROUPS'] = TranslateMetadata::getSubgroups( $id );
+ $groups[$id] = $conf;
+ }
+
+ return $groups;
+ }
+
+ /**
+ * Loads AggregateMessageGroup from the database
+ *
+ * @return AggregateMessageGroup[]
+ */
+ public function loadAggregateGroups(): array {
+ // get the data from the database everytime
+ // @phan-suppress-next-line PhanTypeMismatchReturn type is guaranteed via getCacheData above
+ return $this->initGroupsFromConf( $this->getCacheData() );
+ }
+
+ /**
+ * @param array[] $groups
+ * @return MessageGroup[]
+ */
+ protected function initGroupsFromConf( array $groups ): array {
+ return array_map( [ MessageGroupBase::class, 'factory' ], $groups );
+ }
+
+ /**
+ * Clear and refill the cache with the latest values
+ */
+ public function recache() {
+ $this->clearProcessCache();
+ $this->cache->touchKey();
+
+ $cacheData = $this->cache->getValue( 'recache' );
+ $this->groups = $this->initGroupsFromConf( $cacheData );
+ }
+
+ /**
+ * Clear values from the cache
+ */
+ public function clearCache() {
+ $this->clearProcessCache();
+ $this->cache->delete();
+ }
+
+ /**
+ * Clears the process cache, mainly the cached groups property.
+ */
+ protected function clearProcessCache() {
+ $this->groups = null;
+ }
+}
diff --git a/Translate/messagegroups/loaders/CachedMessageGroupLoader.php b/Translate/messagegroups/loaders/CachedMessageGroupLoader.php
new file mode 100644
index 00000000..9d115a0c
--- /dev/null
+++ b/Translate/messagegroups/loaders/CachedMessageGroupLoader.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * This file contains an interface to be implemented by group stores / loaders that
+ * use the cache.
+ *
+ * @file
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * To be implemented by MessageGroupLoaders that use the MessageGroupWANCache
+ * @since 2019.05
+ */
+interface CachedMessageGroupLoader {
+ /**
+ * Clear and refill the cache with the latest values
+ */
+ public function recache();
+
+ /**
+ * Clear values from the cache
+ */
+ public function clearCache();
+}
diff --git a/Translate/messagegroups/loaders/FileBasedMessageGroupLoader.php b/Translate/messagegroups/loaders/FileBasedMessageGroupLoader.php
new file mode 100644
index 00000000..f974b049
--- /dev/null
+++ b/Translate/messagegroups/loaders/FileBasedMessageGroupLoader.php
@@ -0,0 +1,195 @@
+<?php
+/**
+ * This file contains a class to load file based message groups and handle
+ * the related cache.
+ *
+ * @file
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\MediaWikiServices;
+
+/**
+ * Loads FileBasedMessageGroup, and handles the related cache.
+ * @since 2019.05
+ */
+class FileBasedMessageGroupLoader extends MessageGroupLoader
+ implements CachedMessageGroupLoader {
+
+ private const CACHE_KEY = 'filebased';
+ private const CACHE_VERSION = 2;
+
+ /**
+ * List of groups
+ * @var array|null
+ */
+ protected $groups;
+ /** @var MessageGroupWANCache */
+ protected $cache;
+
+ public function __construct( MessageGroupWANCache $cache ) {
+ $this->cache = $cache;
+ $this->cache->configure(
+ [
+ 'key' => self::CACHE_KEY,
+ 'version' => self::CACHE_VERSION,
+ 'regenerator' => [ $this, 'getCacheData' ],
+ 'touchedCallback' => [ $this, 'isExpired' ]
+ ]
+ );
+ }
+
+ /**
+ * Fetches FileBasedMessageGroups
+ *
+ * @return MessageGroup[] Key is the MessageGroup Id and value is the corresponding
+ * FileBasedMessageGroup
+ */
+ public function getGroups() {
+ if ( $this->groups === null ) {
+ /** @var DependencyWrapper $wrapper */
+ $wrapper = $this->cache->getValue();
+ $cacheData = $wrapper->getValue();
+ $this->initFromCacheValue( $cacheData );
+ }
+
+ return $this->groups;
+ }
+
+ /**
+ * Hook: TranslateInitGroupLoaders
+ *
+ * @param array &$groupLoader
+ * @param array $deps Dependencies
+ */
+ public static function registerLoader( array &$groupLoader, array $deps ) {
+ $groupLoader[] = self::getInstance(
+ $deps['cache']
+ );
+ }
+
+ /**
+ * Return an instance of this class using the parameters, if passed,
+ * else initialize the necessary dependencies and return an instance.
+ *
+ * @param WANObjectCache|null $cache
+ * @return self
+ */
+ public static function getInstance( WANObjectCache $cache = null ) {
+ return new self(
+ new MessageGroupWANCache(
+ $cache ?? MediaWikiServices::getInstance()->getMainWANObjectCache()
+ )
+ );
+ }
+
+ /**
+ * Generates data to be stored in the cache.
+ *
+ * @return DependencyWrapper
+ */
+ public function getCacheData() {
+ global $wgTranslateGroupFiles;
+
+ $autoload = $groups = $deps = $value = [];
+ $deps[] = new GlobalDependency( 'wgTranslateGroupFiles' );
+
+ // TODO: See if DI can be used here
+ $parser = new MessageGroupConfigurationParser();
+ foreach ( $wgTranslateGroupFiles as $configFile ) {
+ $deps[] = new FileDependency( realpath( $configFile ) );
+
+ $yaml = file_get_contents( $configFile );
+ $fgroups = $parser->getHopefullyValidConfigurations(
+ $yaml,
+ static function ( $index, $config, $errmsg ) use ( $configFile ) {
+ trigger_error( "Document $index in $configFile is invalid: $errmsg", E_USER_WARNING );
+ }
+ );
+
+ foreach ( $fgroups as $id => $conf ) {
+ if ( !empty( $conf['AUTOLOAD'] ) && is_array( $conf['AUTOLOAD'] ) ) {
+ $dir = dirname( $configFile );
+ $additions = array_map( static function ( $file ) use ( $dir ) {
+ return "$dir/$file";
+ }, $conf['AUTOLOAD'] );
+ self::appendAutoloader( $additions, $autoload );
+ }
+
+ $groups[$id] = $conf;
+ }
+ }
+ $value['groups'] = $groups;
+ $value['autoload'] = $autoload;
+
+ $wrapper = new DependencyWrapper( $value, $deps );
+ $wrapper->initialiseDeps();
+ return $wrapper;
+ }
+
+ /**
+ * Clear and refill the cache with the latest values
+ */
+ public function recache() {
+ $this->clearProcessCache();
+ $this->cache->touchKey();
+
+ /** @var DependencyWrapper $wrapper */
+ $wrapper = $this->cache->getValue( 'recache' );
+ $cacheData = $wrapper->getValue();
+ $this->initFromCacheValue( $cacheData );
+ }
+
+ /**
+ * Clear values from the cache
+ */
+ public function clearCache() {
+ $this->clearProcessCache();
+ $this->cache->delete();
+ }
+
+ /**
+ * Clears the process cache, mainly the cached groups property.
+ */
+ protected function clearProcessCache() {
+ $this->groups = null;
+ }
+
+ /**
+ * Initialize groups and autoload classes from the cache value.
+ *
+ * @param array $cacheData
+ */
+ protected function initFromCacheValue( array $cacheData ) {
+ global $wgAutoloadClasses;
+ $this->groups = [];
+
+ $autoload = $cacheData['autoload'];
+ $groupConfs = $cacheData['groups'];
+
+ foreach ( $groupConfs as $id => $conf ) {
+ $this->groups[$id] = MessageGroupBase::factory( $conf );
+ }
+
+ self::appendAutoloader( $autoload, $wgAutoloadClasses );
+ }
+
+ /**
+ * Safely merges first array to second array, throwing warning on duplicates and removing
+ * duplicates from the first array.
+ * @param array $additions Things to append
+ * @param array &$to Where to append
+ */
+ private static function appendAutoloader( array $additions, array &$to ) {
+ foreach ( $additions as $class => $file ) {
+ if ( isset( $to[$class] ) && $to[$class] !== $file ) {
+ $msg = "Autoload conflict for $class: {$to[$class]} !== $file";
+ trigger_error( $msg, E_USER_WARNING );
+ continue;
+ }
+
+ $to[$class] = $file;
+ }
+ }
+}
diff --git a/Translate/messagegroups/loaders/MessageGroupLoader.php b/Translate/messagegroups/loaders/MessageGroupLoader.php
new file mode 100644
index 00000000..e13f28f9
--- /dev/null
+++ b/Translate/messagegroups/loaders/MessageGroupLoader.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * This file contains an abstract class to be extended by group stores / loaders.
+ *
+ * @file
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ */
+
+ /**
+ * An abstract class to be implemented by group loaders / stores
+ * @since 2019.05
+ */
+abstract class MessageGroupLoader {
+ /**
+ * Fetches and returns an array of MessageGroups.
+ * @return MessageGroup[] Array of message groups with group id as the key
+ * @note Do not return an indexed based array as that would cause MessageGroups to
+ * be ovewritten.
+ */
+ abstract public function getGroups();
+
+ /**
+ * Determines if dependencies have expired. Called if data in cache is stored
+ * as a dependency wrapper.
+ * @param DependencyWrapper $wrapper
+ * @return bool true if expired, false otherwise.
+ */
+ public function isExpired( DependencyWrapper $wrapper ) {
+ return $wrapper->isExpired();
+ }
+}
diff --git a/Translate/messagegroups/loaders/TranslatablePageMessageGroupStore.php b/Translate/messagegroups/loaders/TranslatablePageMessageGroupStore.php
new file mode 100644
index 00000000..7c1770ee
--- /dev/null
+++ b/Translate/messagegroups/loaders/TranslatablePageMessageGroupStore.php
@@ -0,0 +1,181 @@
+<?php
+/**
+ * This file contains a class to interact and store Translatable wiki pages.
+ *
+ * @file
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Extension\Translate\MessageGroupProcessing\RevTagStore;
+use MediaWiki\Extension\Translate\PageTranslation\TranslatablePage;
+use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\IDatabase;
+
+/**
+ * Handles DB operations for Translatable pages, and the related cache.
+ * @since 2019.05
+ */
+class TranslatablePageMessageGroupStore extends MessageGroupLoader
+ implements CachedMessageGroupLoader
+{
+
+ private const CACHE_KEY = 'wikipage';
+ private const CACHE_VERSION = 2;
+
+ /** @var Wikimedia\Rdbms\IDatabase */
+ protected $db;
+ /** @var MessageGroupWANCache */
+ protected $cache;
+ /**
+ * List of groups
+ * @var array|null
+ */
+ protected $groups;
+
+ public function __construct( IDatabase $db, MessageGroupWANCache $cache ) {
+ $this->db = $db;
+ $this->cache = $cache;
+ $this->cache->configure(
+ [
+ 'key' => self::CACHE_KEY,
+ 'version' => self::CACHE_VERSION,
+ 'regenerator' => [ $this, 'getCacheData' ],
+ 'touchedCallback' => [ $this, 'isExpired' ]
+ ]
+ );
+ }
+
+ /**
+ * Return the WikiPageMessageGroups
+ * If local variable is set, use that otherwise fetch from the cache.
+ *
+ * @return WikiPageMessageGroup[]
+ */
+ public function getGroups() {
+ if ( $this->groups === null ) {
+ /** @var DependencyWrapper $wrapper */
+ $wrapper = $this->cache->getValue();
+ $this->groups = $this->initGroupsFromTitle( $wrapper->getValue() );
+ }
+
+ return $this->groups;
+ }
+
+ /**
+ * Clear and refill the cache with the latest values
+ */
+ public function recache() {
+ $this->clearProcessCache();
+ $this->cache->touchKey();
+
+ /** @var DependencyWrapper $wrapper */
+ $wrapper = $this->cache->getValue( 'recache' );
+ $this->groups = $this->initGroupsFromTitle( $wrapper->getValue() );
+ }
+
+ /**
+ * Clear values from the cache
+ */
+ public function clearCache() {
+ $this->clearProcessCache();
+ $this->cache->delete();
+ }
+
+ /**
+ * Clears the process cache, mainly the cached groups property.
+ */
+ protected function clearProcessCache() {
+ $this->groups = null;
+ }
+
+ /**
+ * Get the data that needs to be stored in the cache.
+ *
+ * @return DependencyWrapper
+ */
+ public function getCacheData() {
+ global $wgEnablePageTranslation;
+
+ $groupTitles = $deps = [];
+ $deps = new GlobalDependency( 'wgEnablePageTranslation' );
+
+ if ( $wgEnablePageTranslation ) {
+ $groupTitles = $this->getTranslatablePageTitles();
+ }
+
+ $wrapper = new DependencyWrapper( $groupTitles, $deps );
+ $wrapper->initialiseDeps();
+ return $wrapper;
+ }
+
+ /**
+ * Hook: TranslateInitGroupLoaders
+ *
+ * @param array &$groupLoader
+ * @param array $deps Dependencies
+ */
+ public static function registerLoader( array &$groupLoader, array $deps ) {
+ $groupLoader[] = self::getInstance(
+ $deps['database'],
+ $deps['cache']
+ );
+ }
+
+ /**
+ * Return an instance of this class using the parameters, if passed,
+ * else initialize the necessary dependencies and return an instance.
+ *
+ * @param IDatabase|null $db
+ * @param WANObjectCache|null $cache
+ * @return self
+ */
+ public static function getInstance( IDatabase $db = null, WANObjectCache $cache = null ) {
+ return new self(
+ $db ?? TranslateUtils::getSafeReadDB(),
+ new MessageGroupWANCache(
+ $cache ?? MediaWikiServices::getInstance()->getMainWANObjectCache()
+ )
+ );
+ }
+
+ /**
+ * Fetch page titles marked for translation from the database to store in the
+ * cache
+ *
+ * @return string[]
+ */
+ protected function getTranslatablePageTitles() {
+ $groupTitles = [];
+ $tables = [ 'page', 'revtag' ];
+ $vars = [ 'page_id', 'page_namespace', 'page_title' ];
+ $conds = [ 'page_id=rt_page', 'rt_type' => RevTagStore::TP_MARK_TAG ];
+ $options = [ 'GROUP BY' => 'rt_page,page_id,page_namespace,page_title' ];
+ $res = $this->db->select( $tables, $vars, $conds, __METHOD__, $options );
+
+ foreach ( $res as $r ) {
+ $title = Title::newFromRow( $r );
+ $groupTitles[] = $title->getPrefixedText();
+ }
+
+ return $groupTitles;
+ }
+
+ /**
+ * Convert page titles to WikiPageMessageGroup objects.
+ * Called after the values have been retrieved from the cache.
+ *
+ * @param string[] $titles
+ * @return WikiPageMessageGroup[]
+ */
+ protected function initGroupsFromTitle( $titles ) {
+ $groups = [];
+ foreach ( $titles as $title ) {
+ $title = Title::newFromText( $title );
+ $id = TranslatablePage::getMessageGroupIdFromTitle( $title );
+ $groups[$id] = new WikiPageMessageGroup( $id, $title );
+ }
+
+ return $groups;
+ }
+}
diff --git a/Translate/messagegroups/loaders/WorkflowStatesMessageGroupLoader.php b/Translate/messagegroups/loaders/WorkflowStatesMessageGroupLoader.php
new file mode 100644
index 00000000..dbf32a9a
--- /dev/null
+++ b/Translate/messagegroups/loaders/WorkflowStatesMessageGroupLoader.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * This file contains a class to load the WorkflowStatesMessageGroup.
+ *
+ * @file
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * Loads WorkflowStatesMessageGroup, and handles the related cache.
+ * @since 2019.05
+ */
+class WorkflowStatesMessageGroupLoader extends MessageGroupLoader {
+ /**
+ * Fetches configured WorkflowStatesMessageGroup
+ *
+ * @return WorkflowStatesMessageGroup[]
+ */
+ public function getGroups() {
+ global $wgTranslateWorkflowStates;
+ $groups = [];
+ if ( $wgTranslateWorkflowStates ) {
+ $groups['translate-workflow-states'] = new WorkflowStatesMessageGroup();
+ }
+
+ return $groups;
+ }
+
+ /**
+ * Hook: TranslateInitGroupLoaders
+ *
+ * @param array &$groupLoader
+ * @param array $deps
+ */
+ public static function registerLoader( array &$groupLoader, array $deps ) {
+ $groupLoader[] = new self();
+ }
+}
diff --git a/Translate/package-lock.json b/Translate/package-lock.json
new file mode 100644
index 00000000..eb6365c1
--- /dev/null
+++ b/Translate/package-lock.json
@@ -0,0 +1,8315 @@
+{
+ "name": "Translate",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "Translate",
+ "devDependencies": {
+ "eslint-config-wikimedia": "0.22.1",
+ "grunt": "1.5.3",
+ "grunt-banana-checker": "0.10.0",
+ "grunt-eslint": "24.0.0",
+ "grunt-stylelint": "0.17.0",
+ "stylelint-config-wikimedia": "0.13.0",
+ "svgo": "2.8.0"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
+ "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/highlight": "^7.16.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
+ "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight": {
+ "version": "7.16.10",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz",
+ "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.16.7",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "node_modules/@babel/highlight/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@es-joy/jsdoccomment": {
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.18.0.tgz",
+ "integrity": "sha512-TjT8KJULV4I6ZiwIoKr6eMs+XpRejqwJ/VA+QPDeFGe9j6bZFKmMJ81EeFsGm6JNZhnzm37aoxVROmTh2PZoyA==",
+ "dev": true,
+ "dependencies": {
+ "comment-parser": "1.3.0",
+ "esquery": "^1.4.0",
+ "jsdoc-type-pratt-parser": "~2.2.2"
+ },
+ "engines": {
+ "node": "^12 || ^14 || ^16 || ^17"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz",
+ "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.2.0",
+ "globals": "^13.9.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.0.4",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz",
+ "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==",
+ "dev": true,
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
+ "node_modules/@mdn/browser-compat-data": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-4.1.7.tgz",
+ "integrity": "sha512-rOxg9jU9L3PrwhHI5DEqKOARt/gCXku/j3RvaEfP8hxeMI6bh0Ov1TqcgoajA/D01PXKTuLfEYvF3kWuheRB7w==",
+ "dev": true
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@trysound/sax": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
+ "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/@types/minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
+ "dev": true
+ },
+ "node_modules/@types/minimist": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz",
+ "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==",
+ "dev": true
+ },
+ "node_modules/@types/normalize-package-data": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
+ "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==",
+ "dev": true
+ },
+ "node_modules/@types/parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
+ "dev": true
+ },
+ "node_modules/abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+ "dev": true
+ },
+ "node_modules/acorn": {
+ "version": "8.7.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
+ "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "node_modules/array-differ": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz",
+ "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/array-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
+ "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-slice": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
+ "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ast-metadata-inferer": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/ast-metadata-inferer/-/ast-metadata-inferer-0.7.0.tgz",
+ "integrity": "sha512-OkMLzd8xelb3gmnp6ToFvvsHLtS6CbagTkFQvQ+ZYFe3/AIl9iKikNR9G7pY3GfOR/2Xc222hwBjzI7HLkE76Q==",
+ "dev": true,
+ "dependencies": {
+ "@mdn/browser-compat-data": "^3.3.14"
+ }
+ },
+ "node_modules/ast-metadata-inferer/node_modules/@mdn/browser-compat-data": {
+ "version": "3.3.14",
+ "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-3.3.14.tgz",
+ "integrity": "sha512-n2RC9d6XatVbWFdHLimzzUJxJ1KY8LdjqrW6YvGPiRmsHkhOUx74/Ct10x5Yo7bC/Jvqx7cDEW8IMPv/+vwEzA==",
+ "dev": true
+ },
+ "node_modules/astral-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/async": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz",
+ "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==",
+ "dev": true
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "node_modules/boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+ "dev": true
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.19.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz",
+ "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==",
+ "dev": true,
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001286",
+ "electron-to-chromium": "^1.4.17",
+ "escalade": "^3.1.1",
+ "node-releases": "^2.0.1",
+ "picocolors": "^1.0.0"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ }
+ },
+ "node_modules/browserslist-config-wikimedia": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.4.0.tgz",
+ "integrity": "sha512-U/fmsaGlCKOqRIjKqXwQ44qFqiStngRTphj1Cf6IHV6J8OK8T0gu9dKc7Ljq4v7bwhnhN+YCCa4fA3nZlPNivQ==",
+ "dev": true
+ },
+ "node_modules/builtin-modules": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz",
+ "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase-keys": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
+ "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==",
+ "dev": true,
+ "dependencies": {
+ "camelcase": "^5.3.1",
+ "map-obj": "^4.0.0",
+ "quick-lru": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001310",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001310.tgz",
+ "integrity": "sha512-cb9xTV8k9HTIUA3GnPUJCk0meUnrHL5gy5QePfDjxHyNBcnzPzrHFv5GqfP7ue5b1ZyzZL0RJboD6hQlPXjhjg==",
+ "dev": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/ci-info": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz",
+ "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==",
+ "dev": true
+ },
+ "node_modules/clean-regexp": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz",
+ "integrity": "sha1-jffHquUf02h06PjQW5GAvBGj/tc=",
+ "dev": true,
+ "dependencies": {
+ "escape-string-regexp": "^1.0.5"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/clean-regexp/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "node_modules/clone-regexp": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz",
+ "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==",
+ "dev": true,
+ "dependencies": {
+ "is-regexp": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/colord": {
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz",
+ "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==",
+ "dev": true
+ },
+ "node_modules/colors": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.1.90"
+ }
+ },
+ "node_modules/commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/comment-parser": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.0.tgz",
+ "integrity": "sha512-hRpmWIKgzd81vn0ydoWoyPoALEOnF4wt8yKD35Ib1D6XC2siLiYaiqfGkYrunuKdsXGwpBpHU3+9r+RVw2NZfA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 12.0.0"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "node_modules/core-js": {
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.21.0.tgz",
+ "integrity": "sha512-YUdI3fFu4TF/2WykQ2xzSiTQdldLB4KVuL9WeAy5XONZYt5Cun/fpQvctoKbCgvPhmzADeesTk/j2Rdx77AcKQ==",
+ "dev": true,
+ "hasInstallScript": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/core-js"
+ }
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
+ "dev": true
+ },
+ "node_modules/cosmiconfig": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
+ "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/parse-json": "^4.0.0",
+ "import-fresh": "^3.2.1",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0",
+ "yaml": "^1.10.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/css-functions-list": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.0.1.tgz",
+ "integrity": "sha512-PriDuifDt4u4rkDgnqRCLnjfMatufLmWNfQnGCq34xZwpY3oabwhB9SqRBmuvWUgndbemCFlKqg+nO7C2q0SBw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.22"
+ }
+ },
+ "node_modules/css-rule-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/css-rule-stream/-/css-rule-stream-1.1.0.tgz",
+ "integrity": "sha1-N4bnGYmD2WWibjGVfgkHjLt3BaI=",
+ "dev": true,
+ "dependencies": {
+ "css-tokenize": "^1.0.1",
+ "duplexer2": "0.0.2",
+ "ldjson-stream": "^1.2.1",
+ "through2": "^0.6.3"
+ },
+ "bin": {
+ "css-rule-stream": "index.js"
+ }
+ },
+ "node_modules/css-rule-stream/node_modules/readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "node_modules/css-rule-stream/node_modules/through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": ">=1.0.33-1 <1.1.0-0",
+ "xtend": ">=4.0.0 <4.1.0-0"
+ }
+ },
+ "node_modules/css-select": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz",
+ "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==",
+ "dev": true,
+ "dependencies": {
+ "boolbase": "^1.0.0",
+ "css-what": "^5.1.0",
+ "domhandler": "^4.3.0",
+ "domutils": "^2.8.0",
+ "nth-check": "^2.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/css-select/node_modules/dom-serializer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz",
+ "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==",
+ "dev": true,
+ "dependencies": {
+ "domelementtype": "^2.0.1",
+ "domhandler": "^4.2.0",
+ "entities": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+ }
+ },
+ "node_modules/css-select/node_modules/domelementtype": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
+ "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ]
+ },
+ "node_modules/css-select/node_modules/domhandler": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz",
+ "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==",
+ "dev": true,
+ "dependencies": {
+ "domelementtype": "^2.2.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
+ }
+ },
+ "node_modules/css-select/node_modules/domutils": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
+ "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
+ "dev": true,
+ "dependencies": {
+ "dom-serializer": "^1.0.1",
+ "domelementtype": "^2.2.0",
+ "domhandler": "^4.2.0"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domutils?sponsor=1"
+ }
+ },
+ "node_modules/css-select/node_modules/entities": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
+ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/css-tokenize": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/css-tokenize/-/css-tokenize-1.0.1.tgz",
+ "integrity": "sha1-RiXLHtohwUOFi3+B1oA8HSb8FL4=",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^1.0.33"
+ }
+ },
+ "node_modules/css-tree": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz",
+ "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==",
+ "dev": true,
+ "dependencies": {
+ "mdn-data": "2.0.14",
+ "source-map": "^0.6.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/css-tree/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/css-what": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz",
+ "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true,
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/csso": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz",
+ "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==",
+ "dev": true,
+ "dependencies": {
+ "css-tree": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/dateformat": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
+ "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decamelize-keys": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
+ "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=",
+ "dev": true,
+ "dependencies": {
+ "decamelize": "^1.1.0",
+ "map-obj": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decamelize-keys/node_modules/map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "node_modules/detect-file": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/doiuse": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/doiuse/-/doiuse-4.4.1.tgz",
+ "integrity": "sha512-TUpr1/YNg20IB09tZmwGCTsTQoxj8jUld/hUZprZMj8vj0VpAJySXEWCr8WMvqvgzk0/kG/FxeSMGKode4UjPg==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.16.1",
+ "caniuse-lite": "^1.0.30001179",
+ "css-rule-stream": "^1.1.0",
+ "duplexer2": "0.0.2",
+ "ldjson-stream": "^1.2.1",
+ "multimatch": "^5.0.0",
+ "postcss": "^8.2.4",
+ "source-map": "^0.7.3",
+ "through2": "^4.0.2",
+ "yargs": "^16.2.0"
+ },
+ "bin": {
+ "doiuse": "cli.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/duplexer2": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
+ "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": "~1.1.9"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.4.67",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.67.tgz",
+ "integrity": "sha512-A6a2jEPLueEDfb7kvh7/E94RKKnIb01qL+4I7RFxtajmo+G9F5Ei7HgY5PRbQ4RDrh6DGDW66P0hD5XI2nRAcg==",
+ "dev": true
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "8.8.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.8.0.tgz",
+ "integrity": "sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ==",
+ "dev": true,
+ "dependencies": {
+ "@eslint/eslintrc": "^1.0.5",
+ "@humanwhocodes/config-array": "^0.9.2",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.1.0",
+ "eslint-utils": "^3.0.0",
+ "eslint-visitor-keys": "^3.2.0",
+ "espree": "^9.3.0",
+ "esquery": "^1.4.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob-parent": "^6.0.1",
+ "globals": "^13.6.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.0.4",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "regexpp": "^3.2.0",
+ "strip-ansi": "^6.0.1",
+ "strip-json-comments": "^3.1.0",
+ "text-table": "^0.2.0",
+ "v8-compile-cache": "^2.0.3"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-config-wikimedia": {
+ "version": "0.22.1",
+ "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.22.1.tgz",
+ "integrity": "sha512-TtN+gWJrcW0i1sEu7vPE1tHpEilrMUuTxP6UK97Amvva/KDV9/tvRUifGhw0q5uBswp+HWgF12p8rq68hZqMbA==",
+ "dev": true,
+ "dependencies": {
+ "eslint": "^8.6.0",
+ "eslint-plugin-compat": "^4.0.2",
+ "eslint-plugin-es": "^4.1.0",
+ "eslint-plugin-jsdoc": "^37.7.1",
+ "eslint-plugin-json-es": "^1.5.4",
+ "eslint-plugin-mediawiki": "^0.3.0",
+ "eslint-plugin-mocha": "^9.0.0",
+ "eslint-plugin-no-jquery": "^2.7.0",
+ "eslint-plugin-node": "^11.1.0",
+ "eslint-plugin-qunit": "^7.2.0",
+ "eslint-plugin-unicorn": "^40.1.0",
+ "eslint-plugin-vue": "^8.4.1",
+ "eslint-plugin-wdio": "^7.4.2",
+ "eslint-plugin-yml": "^0.13.0"
+ }
+ },
+ "node_modules/eslint-plugin-compat": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-4.0.2.tgz",
+ "integrity": "sha512-xqvoO54CLTVaEYGMzhu35Wzwk/As7rCvz/2dqwnFiWi0OJccEtGIn+5qq3zqIu9nboXlpdBN579fZcItC73Ycg==",
+ "dev": true,
+ "dependencies": {
+ "@mdn/browser-compat-data": "^4.1.5",
+ "ast-metadata-inferer": "^0.7.0",
+ "browserslist": "^4.16.8",
+ "caniuse-lite": "^1.0.30001304",
+ "core-js": "^3.16.2",
+ "find-up": "^5.0.0",
+ "lodash.memoize": "4.1.2",
+ "semver": "7.3.5"
+ },
+ "engines": {
+ "node": ">=9.x"
+ },
+ "peerDependencies": {
+ "eslint": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-es": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz",
+ "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==",
+ "dev": true,
+ "dependencies": {
+ "eslint-utils": "^2.0.0",
+ "regexpp": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=4.19.1"
+ }
+ },
+ "node_modules/eslint-plugin-es/node_modules/eslint-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
+ "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ }
+ },
+ "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-plugin-jsdoc": {
+ "version": "37.8.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.8.1.tgz",
+ "integrity": "sha512-whNGcSej5AVUd9+NbUV+bEMu+fKAKlDKuDzLy8nzN0dCyxGnxwwmCVQ9gzfKTq6QKowQd+eSA2COzlsK6g3a6g==",
+ "dev": true,
+ "dependencies": {
+ "@es-joy/jsdoccomment": "~0.18.0",
+ "comment-parser": "1.3.0",
+ "debug": "^4.3.3",
+ "escape-string-regexp": "^4.0.0",
+ "esquery": "^1.4.0",
+ "regextras": "^0.8.0",
+ "semver": "^7.3.5",
+ "spdx-expression-parse": "^3.0.1"
+ },
+ "engines": {
+ "node": "^12 || ^14 || ^16 || ^17"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-json-es": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.5.4.tgz",
+ "integrity": "sha512-DdjnNMUZ1iMrUXfxUQrTU7IyoEOsa4Kg0Zd6nOyOq1mUb75deK7NrcbI1FlWGdGVgqX99bUOD27i81EYiG794Q==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^3.0.0",
+ "espree": "^9.0.0"
+ },
+ "peerDependencies": {
+ "eslint": ">= 7"
+ }
+ },
+ "node_modules/eslint-plugin-mediawiki": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.3.0.tgz",
+ "integrity": "sha512-Lhyj2PSkhDzYSc1PNbURysY/WoqvY0brw558ZInT3erzf5KUlro18MTKFdV+nlht475ZgnsfHsgfg6Ut2w1SVg==",
+ "dev": true,
+ "dependencies": {
+ "eslint-plugin-vue": "^7.20.0",
+ "upath": "^2.0.1"
+ },
+ "peerDependencies": {
+ "eslint": ">=5.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-mediawiki/node_modules/acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/eslint-plugin-mediawiki/node_modules/eslint-plugin-vue": {
+ "version": "7.20.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.20.0.tgz",
+ "integrity": "sha512-oVNDqzBC9h3GO+NTgWeLMhhGigy6/bQaQbHS+0z7C4YEu/qK/yxHvca/2PTZtGNPsCrHwOTgKMrwu02A9iPBmw==",
+ "dev": true,
+ "dependencies": {
+ "eslint-utils": "^2.1.0",
+ "natural-compare": "^1.4.0",
+ "semver": "^6.3.0",
+ "vue-eslint-parser": "^7.10.0"
+ },
+ "engines": {
+ "node": ">=8.10"
+ },
+ "peerDependencies": {
+ "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-mediawiki/node_modules/eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-mediawiki/node_modules/eslint-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
+ "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ }
+ },
+ "node_modules/eslint-plugin-mediawiki/node_modules/eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-plugin-mediawiki/node_modules/espree": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
+ "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^7.1.1",
+ "acorn-jsx": "^5.2.0",
+ "eslint-visitor-keys": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-mediawiki/node_modules/estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/eslint-plugin-mediawiki/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-plugin-mediawiki/node_modules/vue-eslint-parser": {
+ "version": "7.11.0",
+ "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz",
+ "integrity": "sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.1.1",
+ "eslint-scope": "^5.1.1",
+ "eslint-visitor-keys": "^1.1.0",
+ "espree": "^6.2.1",
+ "esquery": "^1.4.0",
+ "lodash": "^4.17.21",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=8.10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=5.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-mocha": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-9.0.0.tgz",
+ "integrity": "sha512-d7knAcQj1jPCzZf3caeBIn3BnW6ikcvfz0kSqQpwPYcVGLoJV5sz0l0OJB2LR8I7dvTDbqq1oV6ylhSgzA10zg==",
+ "dev": true,
+ "dependencies": {
+ "eslint-utils": "^3.0.0",
+ "ramda": "^0.27.1"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-no-jquery": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-2.7.0.tgz",
+ "integrity": "sha512-Aeg7dA6GTH1AcWLlBtWNzOU9efK5KpNi7b0EhBO0o0M+awyzguUUo8gF6hXGjQ9n5h8/uRtYv9zOqQkeC5CG0w==",
+ "dev": true,
+ "peerDependencies": {
+ "eslint": ">=2.3.0"
+ }
+ },
+ "node_modules/eslint-plugin-node": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz",
+ "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==",
+ "dev": true,
+ "dependencies": {
+ "eslint-plugin-es": "^3.0.0",
+ "eslint-utils": "^2.0.0",
+ "ignore": "^5.1.1",
+ "minimatch": "^3.0.4",
+ "resolve": "^1.10.1",
+ "semver": "^6.1.0"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ },
+ "peerDependencies": {
+ "eslint": ">=5.16.0"
+ }
+ },
+ "node_modules/eslint-plugin-node/node_modules/eslint-plugin-es": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz",
+ "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==",
+ "dev": true,
+ "dependencies": {
+ "eslint-utils": "^2.0.0",
+ "regexpp": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=4.19.1"
+ }
+ },
+ "node_modules/eslint-plugin-node/node_modules/eslint-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
+ "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ }
+ },
+ "node_modules/eslint-plugin-node/node_modules/eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-plugin-node/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-plugin-qunit": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-qunit/-/eslint-plugin-qunit-7.2.0.tgz",
+ "integrity": "sha512-ebT6aOpmMj4vchG0hVw9Ukbutk/lgywrc8gc9w9hH2/4WjKqwMlyM7iVwqB7OAXv6gtQMJZuziT0wNjjymAuWA==",
+ "dev": true,
+ "dependencies": {
+ "eslint-utils": "^3.0.0",
+ "requireindex": "^1.2.0"
+ },
+ "engines": {
+ "node": "12.x || 14.x || >=16.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-unicorn": {
+ "version": "40.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-40.1.0.tgz",
+ "integrity": "sha512-y5doK2DF9Sr5AqKEHbHxjFllJ167nKDRU01HDcWyv4Tnmaoe9iNxMrBnaybZvWZUaE3OC5Unu0lNIevYamloig==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.15.7",
+ "ci-info": "^3.3.0",
+ "clean-regexp": "^1.0.0",
+ "eslint-utils": "^3.0.0",
+ "esquery": "^1.4.0",
+ "indent-string": "^4.0.0",
+ "is-builtin-module": "^3.1.0",
+ "lodash": "^4.17.21",
+ "pluralize": "^8.0.0",
+ "read-pkg-up": "^7.0.1",
+ "regexp-tree": "^0.1.24",
+ "safe-regex": "^2.1.1",
+ "semver": "^7.3.5",
+ "strip-indent": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.32.0"
+ }
+ },
+ "node_modules/eslint-plugin-vue": {
+ "version": "8.4.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-8.4.1.tgz",
+ "integrity": "sha512-nmWOhNmDx9TZ+yP9ZhezTkZUupSHsYA2TocRm+efPSXMOyFrVczVlaIuQcLBjCtI8CbkBiUQ3VcyQsjlIhDrhA==",
+ "dev": true,
+ "dependencies": {
+ "eslint-utils": "^3.0.0",
+ "natural-compare": "^1.4.0",
+ "semver": "^7.3.5",
+ "vue-eslint-parser": "^8.0.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-wdio": {
+ "version": "7.4.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-wdio/-/eslint-plugin-wdio-7.4.2.tgz",
+ "integrity": "sha512-tkISFycJmRFMKsEjetRcAmWSHKJKnw5rKHDxfE7Ob3tF5lbmYlCLfNKH0UwanOpSdulpe52s3K+CBHSd6qUUNQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-yml": {
+ "version": "0.13.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-0.13.0.tgz",
+ "integrity": "sha512-rZvdnhe28jIbgSIZo3qYqkl9hKslyTDfMwqIGDzz873gxghzBw0yeFG+P7sMfOkFfpqwJzZy3IKe2cIiCp4FrA==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.3.2",
+ "lodash": "^4.17.21",
+ "natural-compare": "^1.4.0",
+ "yaml-eslint-parser": "^0.5.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ota-meshi"
+ },
+ "peerDependencies": {
+ "eslint": ">=6.0.0"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz",
+ "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/eslint-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^2.0.0"
+ },
+ "engines": {
+ "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=5"
+ }
+ },
+ "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz",
+ "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz",
+ "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.7.0",
+ "acorn-jsx": "^5.3.1",
+ "eslint-visitor-keys": "^3.1.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true,
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
+ "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eventemitter2": {
+ "version": "0.4.14",
+ "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz",
+ "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=",
+ "dev": true
+ },
+ "node_modules/execall": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz",
+ "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==",
+ "dev": true,
+ "dependencies": {
+ "clone-regexp": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/expand-tilde": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "dev": true,
+ "dependencies": {
+ "homedir-polyfill": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "node_modules/fast-glob": {
+ "version": "3.2.11",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
+ "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "node_modules/fastest-levenshtein": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz",
+ "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==",
+ "dev": true
+ },
+ "node_modules/fastq": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
+ "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
+ "dev": true,
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/findup-sync": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz",
+ "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=",
+ "dev": true,
+ "dependencies": {
+ "glob": "~5.0.0"
+ },
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/findup-sync/node_modules/glob": {
+ "version": "5.0.15",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
+ "dev": true,
+ "dependencies": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/fined": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz",
+ "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==",
+ "dev": true,
+ "dependencies": {
+ "expand-tilde": "^2.0.2",
+ "is-plain-object": "^2.0.3",
+ "object.defaults": "^1.1.0",
+ "object.pick": "^1.2.0",
+ "parse-filepath": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/flagged-respawn": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz",
+ "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "dependencies": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz",
+ "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==",
+ "dev": true
+ },
+ "node_modules/for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/for-own": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+ "dev": true,
+ "dependencies": {
+ "for-in": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "node_modules/functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-stdin": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz",
+ "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/getobject": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz",
+ "integrity": "sha512-2zblDBaFcb3rB4rF77XVnuINOE2h2k/OnqXAiy0IrTxUfV1iFp3la33oAQVY9pCpWU268WFYVt2t71hlMuLsOg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.1.7",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
+ "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/global-modules": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
+ "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
+ "dev": true,
+ "dependencies": {
+ "global-prefix": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/global-prefix": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
+ "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
+ "dev": true,
+ "dependencies": {
+ "ini": "^1.3.5",
+ "kind-of": "^6.0.2",
+ "which": "^1.3.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/global-prefix/node_modules/which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
+ "node_modules/globals": {
+ "version": "13.12.1",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz",
+ "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globjoin": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz",
+ "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=",
+ "dev": true
+ },
+ "node_modules/grunt": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.5.3.tgz",
+ "integrity": "sha512-mKwmo4X2d8/4c/BmcOETHek675uOqw0RuA/zy12jaspWqvTp4+ZeQF1W+OTpcbncnaBsfbQJ6l0l4j+Sn/GmaQ==",
+ "dev": true,
+ "dependencies": {
+ "dateformat": "~3.0.3",
+ "eventemitter2": "~0.4.13",
+ "exit": "~0.1.2",
+ "findup-sync": "~0.3.0",
+ "glob": "~7.1.6",
+ "grunt-cli": "~1.4.3",
+ "grunt-known-options": "~2.0.0",
+ "grunt-legacy-log": "~3.0.0",
+ "grunt-legacy-util": "~2.0.1",
+ "iconv-lite": "~0.4.13",
+ "js-yaml": "~3.14.0",
+ "minimatch": "~3.0.4",
+ "mkdirp": "~1.0.4",
+ "nopt": "~3.0.6",
+ "rimraf": "~3.0.2"
+ },
+ "bin": {
+ "grunt": "bin/grunt"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/grunt-banana-checker": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/grunt-banana-checker/-/grunt-banana-checker-0.10.0.tgz",
+ "integrity": "sha512-Sx+P3zWjn4YmBCqzidnCEkYrACe1SLTIT8kKC6C3f21Hu6sm17U/V+re343cuK3U+iGZv15ux6bY+69buIbYrA==",
+ "dev": true,
+ "bin": {
+ "banana-checker": "src/cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/grunt-cli": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz",
+ "integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==",
+ "dev": true,
+ "dependencies": {
+ "grunt-known-options": "~2.0.0",
+ "interpret": "~1.1.0",
+ "liftup": "~3.0.1",
+ "nopt": "~4.0.1",
+ "v8flags": "~3.2.0"
+ },
+ "bin": {
+ "grunt": "bin/grunt"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/grunt-cli/node_modules/nopt": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz",
+ "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==",
+ "dev": true,
+ "dependencies": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ }
+ },
+ "node_modules/grunt-eslint": {
+ "version": "24.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-eslint/-/grunt-eslint-24.0.0.tgz",
+ "integrity": "sha512-WpTeBBFweyhMuPjGwRSQV9JFJ+EczIdlsc7Dd/1g78QVI1aZsk4g/H3e+3S5HEwsS1RKL2YZIrGj8hMLlBfN8w==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.1.2",
+ "eslint": "^8.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ },
+ "peerDependencies": {
+ "grunt": ">=1"
+ }
+ },
+ "node_modules/grunt-known-options": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-2.0.0.tgz",
+ "integrity": "sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/grunt-legacy-log": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz",
+ "integrity": "sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA==",
+ "dev": true,
+ "dependencies": {
+ "colors": "~1.1.2",
+ "grunt-legacy-log-utils": "~2.1.0",
+ "hooker": "~0.2.3",
+ "lodash": "~4.17.19"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/grunt-legacy-log-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz",
+ "integrity": "sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "~4.1.0",
+ "lodash": "~4.17.19"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/grunt-legacy-util": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz",
+ "integrity": "sha512-2bQiD4fzXqX8rhNdXkAywCadeqiPiay0oQny77wA2F3WF4grPJXCvAcyoWUJV+po/b15glGkxuSiQCK299UC2w==",
+ "dev": true,
+ "dependencies": {
+ "async": "~3.2.0",
+ "exit": "~0.1.2",
+ "getobject": "~1.0.0",
+ "hooker": "~0.2.3",
+ "lodash": "~4.17.21",
+ "underscore.string": "~3.3.5",
+ "which": "~2.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/grunt-stylelint": {
+ "version": "0.17.0",
+ "resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.17.0.tgz",
+ "integrity": "sha512-aVpqPO7h98haGRZKnj9nkMTMGjzmVQWyN/FNB/qkbcVG6pguZ48yZi8YO+ULynzNK9YFqWhWBFgAs71m7ZpK+A==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "stylelint": "^14.0.0"
+ }
+ },
+ "node_modules/grunt/node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/grunt/node_modules/js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/grunt/node_modules/sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "node_modules/hard-rejection": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
+ "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/homedir-polyfill": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
+ "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
+ "dev": true,
+ "dependencies": {
+ "parse-passwd": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/hooker": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz",
+ "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/hosted-git-info": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
+ "dev": true
+ },
+ "node_modules/html-tags": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz",
+ "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
+ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/import-lazy": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz",
+ "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "node_modules/ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "dev": true
+ },
+ "node_modules/interpret": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
+ "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=",
+ "dev": true
+ },
+ "node_modules/is-absolute": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
+ "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
+ "dev": true,
+ "dependencies": {
+ "is-relative": "^1.0.0",
+ "is-windows": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "node_modules/is-builtin-module": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.1.0.tgz",
+ "integrity": "sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg==",
+ "dev": true,
+ "dependencies": {
+ "builtin-modules": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
+ "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
+ "dev": true,
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-regexp": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz",
+ "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/is-relative": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
+ "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
+ "dev": true,
+ "dependencies": {
+ "is-unc-path": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-unc-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
+ "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
+ "dev": true,
+ "dependencies": {
+ "unc-path-regex": "^0.1.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "node_modules/isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsdoc-type-pratt-parser": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.2.tgz",
+ "integrity": "sha512-zRokSWcPLSWkoNzsWn9pq7YYSwDhKyEe+cJYT2qaPqLOOJb5sFSi46BPj81vP+e8chvCNdQL9RG86Bi9EI6MDw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "node_modules/kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/known-css-properties": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.25.0.tgz",
+ "integrity": "sha512-b0/9J1O9Jcyik1GC6KC42hJ41jKwdO/Mq8Mdo5sYN+IuRTXs2YFHZC3kZSx6ueusqa95x3wLYe/ytKjbAfGixA==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/ldjson-stream": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ldjson-stream/-/ldjson-stream-1.2.1.tgz",
+ "integrity": "sha1-kb7O2lrE7SsX5kn7d356v6AYnCs=",
+ "dev": true,
+ "dependencies": {
+ "split2": "^0.2.1",
+ "through2": "^0.6.1"
+ }
+ },
+ "node_modules/ldjson-stream/node_modules/readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "node_modules/ldjson-stream/node_modules/through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": ">=1.0.33-1 <1.1.0-0",
+ "xtend": ">=4.0.0 <4.1.0-0"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/liftup": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz",
+ "integrity": "sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw==",
+ "dev": true,
+ "dependencies": {
+ "extend": "^3.0.2",
+ "findup-sync": "^4.0.0",
+ "fined": "^1.2.0",
+ "flagged-respawn": "^1.0.1",
+ "is-plain-object": "^2.0.4",
+ "object.map": "^1.0.1",
+ "rechoir": "^0.7.0",
+ "resolve": "^1.19.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/liftup/node_modules/findup-sync": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz",
+ "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==",
+ "dev": true,
+ "dependencies": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "micromatch": "^4.0.2",
+ "resolve-dir": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true
+ },
+ "node_modules/lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
+ "dev": true
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "node_modules/lodash.truncate": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
+ "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=",
+ "dev": true
+ },
+ "node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/make-iterator": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
+ "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/map-obj": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
+ "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mathml-tag-names": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz",
+ "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdn-data": {
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
+ "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==",
+ "dev": true
+ },
+ "node_modules/meow": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz",
+ "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/minimist": "^1.2.0",
+ "camelcase-keys": "^6.2.2",
+ "decamelize": "^1.2.0",
+ "decamelize-keys": "^1.1.0",
+ "hard-rejection": "^2.1.0",
+ "minimist-options": "4.1.0",
+ "normalize-package-data": "^3.0.0",
+ "read-pkg-up": "^7.0.1",
+ "redent": "^3.0.0",
+ "trim-newlines": "^3.0.0",
+ "type-fest": "^0.18.0",
+ "yargs-parser": "^20.2.3"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/meow/node_modules/hosted-git-info": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
+ "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/meow/node_modules/normalize-package-data": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
+ "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
+ "dev": true,
+ "dependencies": {
+ "hosted-git-info": "^4.0.1",
+ "is-core-module": "^2.5.0",
+ "semver": "^7.3.4",
+ "validate-npm-package-license": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/meow/node_modules/type-fest": {
+ "version": "0.18.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
+ "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/min-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
+ "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist-options": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
+ "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
+ "dev": true,
+ "dependencies": {
+ "arrify": "^1.0.1",
+ "is-plain-obj": "^1.1.0",
+ "kind-of": "^6.0.3"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "dev": true,
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/multimatch": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz",
+ "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==",
+ "dev": true,
+ "dependencies": {
+ "@types/minimatch": "^3.0.3",
+ "array-differ": "^3.0.0",
+ "array-union": "^2.1.0",
+ "arrify": "^2.0.1",
+ "minimatch": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/multimatch/node_modules/arrify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
+ "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
+ "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
+ "dev": true,
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz",
+ "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==",
+ "dev": true
+ },
+ "node_modules/nopt": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+ "dev": true,
+ "dependencies": {
+ "abbrev": "1"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ }
+ },
+ "node_modules/normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
+ "dependencies": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "node_modules/normalize-package-data/node_modules/semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/normalize-selector": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz",
+ "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=",
+ "dev": true
+ },
+ "node_modules/nth-check": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz",
+ "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==",
+ "dev": true,
+ "dependencies": {
+ "boolbase": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/nth-check?sponsor=1"
+ }
+ },
+ "node_modules/object.defaults": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
+ "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
+ "dev": true,
+ "dependencies": {
+ "array-each": "^1.0.1",
+ "array-slice": "^1.0.0",
+ "for-own": "^1.0.0",
+ "isobject": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object.map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
+ "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
+ "dev": true,
+ "dependencies": {
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "dev": true,
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/osenv": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
+ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
+ "dev": true,
+ "dependencies": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-filepath": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
+ "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
+ "dev": true,
+ "dependencies": {
+ "is-absolute": "^1.0.0",
+ "map-cache": "^0.2.0",
+ "path-root": "^0.1.1"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parse-passwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
+ "node_modules/path-root": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
+ "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
+ "dev": true,
+ "dependencies": {
+ "path-root-regex": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-root-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
+ "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "dev": true
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pluralize": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
+ "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.4.14",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
+ "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.4",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-less": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-6.0.0.tgz",
+ "integrity": "sha512-FPX16mQLyEjLzEuuJtxA8X3ejDLNGGEG503d2YGZR5Ask1SpDN8KmZUMpzCvyalWRywAn1n1VOA5dcqfCLo5rg==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "postcss": "^8.3.5"
+ }
+ },
+ "node_modules/postcss-media-query-parser": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz",
+ "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=",
+ "dev": true
+ },
+ "node_modules/postcss-resolve-nested-selector": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz",
+ "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=",
+ "dev": true
+ },
+ "node_modules/postcss-safe-parser": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz",
+ "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.3.3"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.0.10",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
+ "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
+ "dev": true,
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+ "dev": true
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/quick-lru": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz",
+ "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ramda": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.2.tgz",
+ "integrity": "sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA==",
+ "dev": true
+ },
+ "node_modules/read-pkg": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+ "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+ "dev": true,
+ "dependencies": {
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/read-pkg-up": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
+ "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^4.1.0",
+ "read-pkg": "^5.2.0",
+ "type-fest": "^0.8.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/read-pkg/node_modules/type-fest": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+ "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "node_modules/rechoir": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz",
+ "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==",
+ "dev": true,
+ "dependencies": {
+ "resolve": "^1.9.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/redent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
+ "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
+ "dev": true,
+ "dependencies": {
+ "indent-string": "^4.0.0",
+ "strip-indent": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/regexp-tree": {
+ "version": "0.1.24",
+ "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.24.tgz",
+ "integrity": "sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==",
+ "dev": true,
+ "bin": {
+ "regexp-tree": "bin/regexp-tree"
+ }
+ },
+ "node_modules/regexpp": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ }
+ },
+ "node_modules/regextras": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz",
+ "integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.1.14"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/requireindex": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz",
+ "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.5"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
+ "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
+ "dev": true,
+ "dependencies": {
+ "is-core-module": "^2.8.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-dir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+ "dev": true,
+ "dependencies": {
+ "expand-tilde": "^2.0.0",
+ "global-modules": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve-dir/node_modules/global-modules": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+ "dev": true,
+ "dependencies": {
+ "global-prefix": "^1.0.1",
+ "is-windows": "^1.0.1",
+ "resolve-dir": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve-dir/node_modules/global-prefix": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+ "dev": true,
+ "dependencies": {
+ "expand-tilde": "^2.0.2",
+ "homedir-polyfill": "^1.0.1",
+ "ini": "^1.3.4",
+ "is-windows": "^1.0.1",
+ "which": "^1.2.14"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve-dir/node_modules/which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true,
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/safe-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz",
+ "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==",
+ "dev": true,
+ "dependencies": {
+ "regexp-tree": "~0.1.1"
+ }
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
+ },
+ "node_modules/semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/slice-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
+ "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
+ "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/spdx-correct": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
+ "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
+ "dev": true,
+ "dependencies": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-exceptions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
+ "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
+ "dev": true
+ },
+ "node_modules/spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "dev": true,
+ "dependencies": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-license-ids": {
+ "version": "3.0.11",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz",
+ "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==",
+ "dev": true
+ },
+ "node_modules/specificity": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz",
+ "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==",
+ "dev": true,
+ "bin": {
+ "specificity": "bin/specificity"
+ }
+ },
+ "node_modules/split2": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-0.2.1.tgz",
+ "integrity": "sha1-At2smtwD7Au3jBKC7Aecpuha6QA=",
+ "dev": true,
+ "dependencies": {
+ "through2": "~0.6.1"
+ }
+ },
+ "node_modules/split2/node_modules/readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "node_modules/split2/node_modules/through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": ">=1.0.33-1 <1.1.0-0",
+ "xtend": ">=4.0.0 <4.1.0-0"
+ }
+ },
+ "node_modules/sprintf-js": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
+ "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==",
+ "dev": true
+ },
+ "node_modules/stable": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
+ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
+ "dev": true
+ },
+ "node_modules/string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-indent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
+ "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
+ "dev": true,
+ "dependencies": {
+ "min-indent": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/style-search": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz",
+ "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=",
+ "dev": true
+ },
+ "node_modules/stylelint": {
+ "version": "14.8.3",
+ "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.8.3.tgz",
+ "integrity": "sha512-aLpskXwSgFEBYbFRKA/BfuyYMGuXNtn2t5GqoffNPSezvw97x/vVNWcZNF0+cwt+LBjfvyq9/MRE3OjInGRgNA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "balanced-match": "^2.0.0",
+ "colord": "^2.9.2",
+ "cosmiconfig": "^7.0.1",
+ "css-functions-list": "^3.0.1",
+ "debug": "^4.3.4",
+ "execall": "^2.0.0",
+ "fast-glob": "^3.2.11",
+ "fastest-levenshtein": "^1.0.12",
+ "file-entry-cache": "^6.0.1",
+ "get-stdin": "^8.0.0",
+ "global-modules": "^2.0.0",
+ "globby": "^11.1.0",
+ "globjoin": "^0.1.4",
+ "html-tags": "^3.2.0",
+ "ignore": "^5.2.0",
+ "import-lazy": "^4.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-plain-object": "^5.0.0",
+ "known-css-properties": "^0.25.0",
+ "mathml-tag-names": "^2.1.3",
+ "meow": "^9.0.0",
+ "micromatch": "^4.0.5",
+ "normalize-path": "^3.0.0",
+ "picocolors": "^1.0.0",
+ "postcss": "^8.4.13",
+ "postcss-media-query-parser": "^0.2.3",
+ "postcss-resolve-nested-selector": "^0.1.1",
+ "postcss-safe-parser": "^6.0.0",
+ "postcss-selector-parser": "^6.0.10",
+ "postcss-value-parser": "^4.2.0",
+ "resolve-from": "^5.0.0",
+ "specificity": "^0.4.1",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1",
+ "style-search": "^0.1.0",
+ "supports-hyperlinks": "^2.2.0",
+ "svg-tags": "^1.0.0",
+ "table": "^6.8.0",
+ "v8-compile-cache": "^2.3.0",
+ "write-file-atomic": "^4.0.1"
+ },
+ "bin": {
+ "stylelint": "bin/stylelint.js"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stylelint"
+ }
+ },
+ "node_modules/stylelint-config-recommended": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-7.0.0.tgz",
+ "integrity": "sha512-yGn84Bf/q41J4luis1AZ95gj0EQwRX8lWmGmBwkwBNSkpGSpl66XcPTulxGa/Z91aPoNGuIGBmFkcM1MejMo9Q==",
+ "dev": true,
+ "peerDependencies": {
+ "stylelint": "^14.4.0"
+ }
+ },
+ "node_modules/stylelint-config-wikimedia": {
+ "version": "0.13.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.13.0.tgz",
+ "integrity": "sha512-1R1g/uc53z2z39ejZMALwC6fTfSZhkzDjj1v8ODCWtLCiuqWuSf3HR1ZTXT5X5AtSbZq1W9+0p5HJp6rPVXkRg==",
+ "dev": true,
+ "dependencies": {
+ "browserslist-config-wikimedia": "0.4.0",
+ "postcss-less": "6.0.0",
+ "stylelint": "14.8.1",
+ "stylelint-config-recommended": "7.0.0",
+ "stylelint-no-unsupported-browser-features": "5.0.3"
+ },
+ "peerDependencies": {
+ "postcss-less": "^6.0.0"
+ }
+ },
+ "node_modules/stylelint-config-wikimedia/node_modules/balanced-match": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
+ "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
+ "dev": true
+ },
+ "node_modules/stylelint-config-wikimedia/node_modules/is-plain-object": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+ "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/stylelint-config-wikimedia/node_modules/known-css-properties": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.24.0.tgz",
+ "integrity": "sha512-RTSoaUAfLvpR357vWzAz/50Q/BmHfmE6ETSWfutT0AJiw10e6CmcdYRQJlLRd95B53D0Y2aD1jSxD3V3ySF+PA==",
+ "dev": true
+ },
+ "node_modules/stylelint-config-wikimedia/node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/stylelint-config-wikimedia/node_modules/stylelint": {
+ "version": "14.8.1",
+ "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.8.1.tgz",
+ "integrity": "sha512-0YxTop3wTeEVmQWhS7jjLFaBkvfPmffRiJ6eFIDlK++f3OklaobTYFJu32E5u/cIrFLbcW52pLqrYpihA/y0/w==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^2.0.0",
+ "colord": "^2.9.2",
+ "cosmiconfig": "^7.0.1",
+ "css-functions-list": "^3.0.1",
+ "debug": "^4.3.4",
+ "execall": "^2.0.0",
+ "fast-glob": "^3.2.11",
+ "fastest-levenshtein": "^1.0.12",
+ "file-entry-cache": "^6.0.1",
+ "get-stdin": "^8.0.0",
+ "global-modules": "^2.0.0",
+ "globby": "^11.1.0",
+ "globjoin": "^0.1.4",
+ "html-tags": "^3.2.0",
+ "ignore": "^5.2.0",
+ "import-lazy": "^4.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-plain-object": "^5.0.0",
+ "known-css-properties": "^0.24.0",
+ "mathml-tag-names": "^2.1.3",
+ "meow": "^9.0.0",
+ "micromatch": "^4.0.5",
+ "normalize-path": "^3.0.0",
+ "normalize-selector": "^0.2.0",
+ "picocolors": "^1.0.0",
+ "postcss": "^8.4.12",
+ "postcss-media-query-parser": "^0.2.3",
+ "postcss-resolve-nested-selector": "^0.1.1",
+ "postcss-safe-parser": "^6.0.0",
+ "postcss-selector-parser": "^6.0.10",
+ "postcss-value-parser": "^4.2.0",
+ "resolve-from": "^5.0.0",
+ "specificity": "^0.4.1",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1",
+ "style-search": "^0.1.0",
+ "supports-hyperlinks": "^2.2.0",
+ "svg-tags": "^1.0.0",
+ "table": "^6.8.0",
+ "v8-compile-cache": "^2.3.0",
+ "write-file-atomic": "^4.0.1"
+ },
+ "bin": {
+ "stylelint": "bin/stylelint.js"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stylelint"
+ }
+ },
+ "node_modules/stylelint-no-unsupported-browser-features": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-5.0.3.tgz",
+ "integrity": "sha512-FqfbOTk5UEkHsAKOkPH6SvajsfO9YuoWvKxd34tCRBZug9ZNeaPn141nyWkd+ncc8S1gVmO2+O6qVAMj9bvWww==",
+ "dev": true,
+ "dependencies": {
+ "doiuse": "^4.4.1",
+ "lodash": "^4.17.15",
+ "postcss": "^8.3.6"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "stylelint": ">=13.0.0"
+ }
+ },
+ "node_modules/stylelint/node_modules/balanced-match": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
+ "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/stylelint/node_modules/is-plain-object": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+ "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/stylelint/node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-hyperlinks": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz",
+ "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0",
+ "supports-color": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/svg-tags": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
+ "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=",
+ "dev": true
+ },
+ "node_modules/svgo": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz",
+ "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==",
+ "dev": true,
+ "dependencies": {
+ "@trysound/sax": "0.2.0",
+ "commander": "^7.2.0",
+ "css-select": "^4.1.3",
+ "css-tree": "^1.1.3",
+ "csso": "^4.2.0",
+ "picocolors": "^1.0.0",
+ "stable": "^0.1.8"
+ },
+ "bin": {
+ "svgo": "bin/svgo"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/table": {
+ "version": "6.8.0",
+ "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz",
+ "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^8.0.1",
+ "lodash.truncate": "^4.4.2",
+ "slice-ansi": "^4.0.0",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/table/node_modules/ajv": {
+ "version": "8.10.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz",
+ "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/table/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "node_modules/through2": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz",
+ "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": "3"
+ }
+ },
+ "node_modules/through2/node_modules/readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/through2/node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/trim-newlines": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz",
+ "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/unc-path-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
+ "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/underscore.string": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz",
+ "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==",
+ "dev": true,
+ "dependencies": {
+ "sprintf-js": "^1.1.1",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/upath": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz",
+ "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==",
+ "dev": true,
+ "engines": {
+ "node": ">=4",
+ "yarn": "*"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "node_modules/v8-compile-cache": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
+ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
+ "dev": true
+ },
+ "node_modules/v8flags": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz",
+ "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==",
+ "dev": true,
+ "dependencies": {
+ "homedir-polyfill": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "dependencies": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "node_modules/vue-eslint-parser": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-8.2.0.tgz",
+ "integrity": "sha512-hvl8OVT8imlKk/lQyhkshqwQQChzHETcBd5abiO4ePw7ib7QUZLfW+2TUrJHKUvFOCFRJrDin5KJO9OHzB5bRQ==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.3.2",
+ "eslint-scope": "^7.0.0",
+ "eslint-visitor-keys": "^3.1.0",
+ "espree": "^9.0.0",
+ "esquery": "^1.4.0",
+ "lodash": "^4.17.21",
+ "semver": "^7.3.5"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=6.0.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "node_modules/write-file-atomic": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz",
+ "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==",
+ "dev": true,
+ "dependencies": {
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.7"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16"
+ }
+ },
+ "node_modules/xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ },
+ "node_modules/yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/yaml-eslint-parser": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-0.5.0.tgz",
+ "integrity": "sha512-nJeyLA3YHAzhBTZbRAbu3W6xrSCucyxExmA+ZDtEdUFpGllxAZpto2Zxo2IG0r0eiuEiBM4e+wiAdxTziTq94g==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^3.0.0",
+ "lodash": "^4.17.21",
+ "yaml": "^1.10.2"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "dev": true,
+ "dependencies": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ }
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
+ "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.16.7"
+ }
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
+ "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
+ "dev": true
+ },
+ "@babel/highlight": {
+ "version": "7.16.10",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz",
+ "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.16.7",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "@es-joy/jsdoccomment": {
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.18.0.tgz",
+ "integrity": "sha512-TjT8KJULV4I6ZiwIoKr6eMs+XpRejqwJ/VA+QPDeFGe9j6bZFKmMJ81EeFsGm6JNZhnzm37aoxVROmTh2PZoyA==",
+ "dev": true,
+ "requires": {
+ "comment-parser": "1.3.0",
+ "esquery": "^1.4.0",
+ "jsdoc-type-pratt-parser": "~2.2.2"
+ }
+ },
+ "@eslint/eslintrc": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz",
+ "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.2.0",
+ "globals": "^13.9.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.0.4",
+ "strip-json-comments": "^3.1.1"
+ },
+ "dependencies": {
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true
+ }
+ }
+ },
+ "@humanwhocodes/config-array": {
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz",
+ "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==",
+ "dev": true,
+ "requires": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.4"
+ }
+ },
+ "@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
+ "@mdn/browser-compat-data": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-4.1.7.tgz",
+ "integrity": "sha512-rOxg9jU9L3PrwhHI5DEqKOARt/gCXku/j3RvaEfP8hxeMI6bh0Ov1TqcgoajA/D01PXKTuLfEYvF3kWuheRB7w==",
+ "dev": true
+ },
+ "@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true
+ },
+ "@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ }
+ },
+ "@trysound/sax": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
+ "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
+ "dev": true
+ },
+ "@types/minimist": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz",
+ "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==",
+ "dev": true
+ },
+ "@types/normalize-package-data": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
+ "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==",
+ "dev": true
+ },
+ "@types/parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
+ "dev": true
+ },
+ "abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+ "dev": true
+ },
+ "acorn": {
+ "version": "8.7.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
+ "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "requires": {}
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "array-differ": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz",
+ "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==",
+ "dev": true
+ },
+ "array-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
+ "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=",
+ "dev": true
+ },
+ "array-slice": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
+ "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
+ "dev": true
+ },
+ "array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ },
+ "ast-metadata-inferer": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/ast-metadata-inferer/-/ast-metadata-inferer-0.7.0.tgz",
+ "integrity": "sha512-OkMLzd8xelb3gmnp6ToFvvsHLtS6CbagTkFQvQ+ZYFe3/AIl9iKikNR9G7pY3GfOR/2Xc222hwBjzI7HLkE76Q==",
+ "dev": true,
+ "requires": {
+ "@mdn/browser-compat-data": "^3.3.14"
+ },
+ "dependencies": {
+ "@mdn/browser-compat-data": {
+ "version": "3.3.14",
+ "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-3.3.14.tgz",
+ "integrity": "sha512-n2RC9d6XatVbWFdHLimzzUJxJ1KY8LdjqrW6YvGPiRmsHkhOUx74/Ct10x5Yo7bC/Jvqx7cDEW8IMPv/+vwEzA==",
+ "dev": true
+ }
+ }
+ },
+ "astral-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "dev": true
+ },
+ "async": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz",
+ "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "browserslist": {
+ "version": "4.19.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz",
+ "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==",
+ "dev": true,
+ "requires": {
+ "caniuse-lite": "^1.0.30001286",
+ "electron-to-chromium": "^1.4.17",
+ "escalade": "^3.1.1",
+ "node-releases": "^2.0.1",
+ "picocolors": "^1.0.0"
+ }
+ },
+ "browserslist-config-wikimedia": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.4.0.tgz",
+ "integrity": "sha512-U/fmsaGlCKOqRIjKqXwQ44qFqiStngRTphj1Cf6IHV6J8OK8T0gu9dKc7Ljq4v7bwhnhN+YCCa4fA3nZlPNivQ==",
+ "dev": true
+ },
+ "builtin-modules": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz",
+ "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==",
+ "dev": true
+ },
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ },
+ "camelcase-keys": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
+ "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.3.1",
+ "map-obj": "^4.0.0",
+ "quick-lru": "^4.0.1"
+ }
+ },
+ "caniuse-lite": {
+ "version": "1.0.30001310",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001310.tgz",
+ "integrity": "sha512-cb9xTV8k9HTIUA3GnPUJCk0meUnrHL5gy5QePfDjxHyNBcnzPzrHFv5GqfP7ue5b1ZyzZL0RJboD6hQlPXjhjg==",
+ "dev": true
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "ci-info": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz",
+ "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==",
+ "dev": true
+ },
+ "clean-regexp": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz",
+ "integrity": "sha1-jffHquUf02h06PjQW5GAvBGj/tc=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ },
+ "dependencies": {
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ }
+ }
+ },
+ "cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "clone-regexp": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz",
+ "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==",
+ "dev": true,
+ "requires": {
+ "is-regexp": "^2.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "colord": {
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz",
+ "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
+ "dev": true
+ },
+ "commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "dev": true
+ },
+ "comment-parser": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.0.tgz",
+ "integrity": "sha512-hRpmWIKgzd81vn0ydoWoyPoALEOnF4wt8yKD35Ib1D6XC2siLiYaiqfGkYrunuKdsXGwpBpHU3+9r+RVw2NZfA==",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.21.0.tgz",
+ "integrity": "sha512-YUdI3fFu4TF/2WykQ2xzSiTQdldLB4KVuL9WeAy5XONZYt5Cun/fpQvctoKbCgvPhmzADeesTk/j2Rdx77AcKQ==",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
+ "dev": true
+ },
+ "cosmiconfig": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
+ "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==",
+ "dev": true,
+ "requires": {
+ "@types/parse-json": "^4.0.0",
+ "import-fresh": "^3.2.1",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0",
+ "yaml": "^1.10.0"
+ }
+ },
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "css-functions-list": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.0.1.tgz",
+ "integrity": "sha512-PriDuifDt4u4rkDgnqRCLnjfMatufLmWNfQnGCq34xZwpY3oabwhB9SqRBmuvWUgndbemCFlKqg+nO7C2q0SBw==",
+ "dev": true
+ },
+ "css-rule-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/css-rule-stream/-/css-rule-stream-1.1.0.tgz",
+ "integrity": "sha1-N4bnGYmD2WWibjGVfgkHjLt3BaI=",
+ "dev": true,
+ "requires": {
+ "css-tokenize": "^1.0.1",
+ "duplexer2": "0.0.2",
+ "ldjson-stream": "^1.2.1",
+ "through2": "^0.6.3"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": ">=1.0.33-1 <1.1.0-0",
+ "xtend": ">=4.0.0 <4.1.0-0"
+ }
+ }
+ }
+ },
+ "css-select": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz",
+ "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==",
+ "dev": true,
+ "requires": {
+ "boolbase": "^1.0.0",
+ "css-what": "^5.1.0",
+ "domhandler": "^4.3.0",
+ "domutils": "^2.8.0",
+ "nth-check": "^2.0.1"
+ },
+ "dependencies": {
+ "dom-serializer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz",
+ "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.0.1",
+ "domhandler": "^4.2.0",
+ "entities": "^2.0.0"
+ }
+ },
+ "domelementtype": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
+ "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==",
+ "dev": true
+ },
+ "domhandler": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz",
+ "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.2.0"
+ }
+ },
+ "domutils": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
+ "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "^1.0.1",
+ "domelementtype": "^2.2.0",
+ "domhandler": "^4.2.0"
+ }
+ },
+ "entities": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
+ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+ "dev": true
+ }
+ }
+ },
+ "css-tokenize": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/css-tokenize/-/css-tokenize-1.0.1.tgz",
+ "integrity": "sha1-RiXLHtohwUOFi3+B1oA8HSb8FL4=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^1.0.33"
+ }
+ },
+ "css-tree": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz",
+ "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==",
+ "dev": true,
+ "requires": {
+ "mdn-data": "2.0.14",
+ "source-map": "^0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "css-what": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz",
+ "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==",
+ "dev": true
+ },
+ "cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true
+ },
+ "csso": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz",
+ "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==",
+ "dev": true,
+ "requires": {
+ "css-tree": "^1.1.2"
+ }
+ },
+ "dateformat": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
+ "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
+ "dev": true
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "decamelize-keys": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
+ "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=",
+ "dev": true,
+ "requires": {
+ "decamelize": "^1.1.0",
+ "map-obj": "^1.0.0"
+ },
+ "dependencies": {
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ }
+ }
+ },
+ "deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "detect-file": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
+ "dev": true
+ },
+ "dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "requires": {
+ "path-type": "^4.0.0"
+ }
+ },
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "doiuse": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/doiuse/-/doiuse-4.4.1.tgz",
+ "integrity": "sha512-TUpr1/YNg20IB09tZmwGCTsTQoxj8jUld/hUZprZMj8vj0VpAJySXEWCr8WMvqvgzk0/kG/FxeSMGKode4UjPg==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.16.1",
+ "caniuse-lite": "^1.0.30001179",
+ "css-rule-stream": "^1.1.0",
+ "duplexer2": "0.0.2",
+ "ldjson-stream": "^1.2.1",
+ "multimatch": "^5.0.0",
+ "postcss": "^8.2.4",
+ "source-map": "^0.7.3",
+ "through2": "^4.0.2",
+ "yargs": "^16.2.0"
+ }
+ },
+ "duplexer2": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
+ "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~1.1.9"
+ }
+ },
+ "electron-to-chromium": {
+ "version": "1.4.67",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.67.tgz",
+ "integrity": "sha512-A6a2jEPLueEDfb7kvh7/E94RKKnIb01qL+4I7RFxtajmo+G9F5Ei7HgY5PRbQ4RDrh6DGDW66P0hD5XI2nRAcg==",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true
+ },
+ "eslint": {
+ "version": "8.8.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.8.0.tgz",
+ "integrity": "sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ==",
+ "dev": true,
+ "requires": {
+ "@eslint/eslintrc": "^1.0.5",
+ "@humanwhocodes/config-array": "^0.9.2",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.1.0",
+ "eslint-utils": "^3.0.0",
+ "eslint-visitor-keys": "^3.2.0",
+ "espree": "^9.3.0",
+ "esquery": "^1.4.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob-parent": "^6.0.1",
+ "globals": "^13.6.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.0.4",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "regexpp": "^3.2.0",
+ "strip-ansi": "^6.0.1",
+ "strip-json-comments": "^3.1.0",
+ "text-table": "^0.2.0",
+ "v8-compile-cache": "^2.0.3"
+ }
+ },
+ "eslint-config-wikimedia": {
+ "version": "0.22.1",
+ "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.22.1.tgz",
+ "integrity": "sha512-TtN+gWJrcW0i1sEu7vPE1tHpEilrMUuTxP6UK97Amvva/KDV9/tvRUifGhw0q5uBswp+HWgF12p8rq68hZqMbA==",
+ "dev": true,
+ "requires": {
+ "eslint": "^8.6.0",
+ "eslint-plugin-compat": "^4.0.2",
+ "eslint-plugin-es": "^4.1.0",
+ "eslint-plugin-jsdoc": "^37.7.1",
+ "eslint-plugin-json-es": "^1.5.4",
+ "eslint-plugin-mediawiki": "^0.3.0",
+ "eslint-plugin-mocha": "^9.0.0",
+ "eslint-plugin-no-jquery": "^2.7.0",
+ "eslint-plugin-node": "^11.1.0",
+ "eslint-plugin-qunit": "^7.2.0",
+ "eslint-plugin-unicorn": "^40.1.0",
+ "eslint-plugin-vue": "^8.4.1",
+ "eslint-plugin-wdio": "^7.4.2",
+ "eslint-plugin-yml": "^0.13.0"
+ }
+ },
+ "eslint-plugin-compat": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-4.0.2.tgz",
+ "integrity": "sha512-xqvoO54CLTVaEYGMzhu35Wzwk/As7rCvz/2dqwnFiWi0OJccEtGIn+5qq3zqIu9nboXlpdBN579fZcItC73Ycg==",
+ "dev": true,
+ "requires": {
+ "@mdn/browser-compat-data": "^4.1.5",
+ "ast-metadata-inferer": "^0.7.0",
+ "browserslist": "^4.16.8",
+ "caniuse-lite": "^1.0.30001304",
+ "core-js": "^3.16.2",
+ "find-up": "^5.0.0",
+ "lodash.memoize": "4.1.2",
+ "semver": "7.3.5"
+ }
+ },
+ "eslint-plugin-es": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz",
+ "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==",
+ "dev": true,
+ "requires": {
+ "eslint-utils": "^2.0.0",
+ "regexpp": "^3.0.0"
+ },
+ "dependencies": {
+ "eslint-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
+ "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^1.1.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-plugin-jsdoc": {
+ "version": "37.8.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.8.1.tgz",
+ "integrity": "sha512-whNGcSej5AVUd9+NbUV+bEMu+fKAKlDKuDzLy8nzN0dCyxGnxwwmCVQ9gzfKTq6QKowQd+eSA2COzlsK6g3a6g==",
+ "dev": true,
+ "requires": {
+ "@es-joy/jsdoccomment": "~0.18.0",
+ "comment-parser": "1.3.0",
+ "debug": "^4.3.3",
+ "escape-string-regexp": "^4.0.0",
+ "esquery": "^1.4.0",
+ "regextras": "^0.8.0",
+ "semver": "^7.3.5",
+ "spdx-expression-parse": "^3.0.1"
+ }
+ },
+ "eslint-plugin-json-es": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.5.4.tgz",
+ "integrity": "sha512-DdjnNMUZ1iMrUXfxUQrTU7IyoEOsa4Kg0Zd6nOyOq1mUb75deK7NrcbI1FlWGdGVgqX99bUOD27i81EYiG794Q==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^3.0.0",
+ "espree": "^9.0.0"
+ }
+ },
+ "eslint-plugin-mediawiki": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.3.0.tgz",
+ "integrity": "sha512-Lhyj2PSkhDzYSc1PNbURysY/WoqvY0brw558ZInT3erzf5KUlro18MTKFdV+nlht475ZgnsfHsgfg6Ut2w1SVg==",
+ "dev": true,
+ "requires": {
+ "eslint-plugin-vue": "^7.20.0",
+ "upath": "^2.0.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "dev": true
+ },
+ "eslint-plugin-vue": {
+ "version": "7.20.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.20.0.tgz",
+ "integrity": "sha512-oVNDqzBC9h3GO+NTgWeLMhhGigy6/bQaQbHS+0z7C4YEu/qK/yxHvca/2PTZtGNPsCrHwOTgKMrwu02A9iPBmw==",
+ "dev": true,
+ "requires": {
+ "eslint-utils": "^2.1.0",
+ "natural-compare": "^1.4.0",
+ "semver": "^6.3.0",
+ "vue-eslint-parser": "^7.10.0"
+ }
+ },
+ "eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
+ "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^1.1.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true
+ },
+ "espree": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
+ "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
+ "dev": true,
+ "requires": {
+ "acorn": "^7.1.1",
+ "acorn-jsx": "^5.2.0",
+ "eslint-visitor-keys": "^1.1.0"
+ }
+ },
+ "estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ },
+ "vue-eslint-parser": {
+ "version": "7.11.0",
+ "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz",
+ "integrity": "sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.1",
+ "eslint-scope": "^5.1.1",
+ "eslint-visitor-keys": "^1.1.0",
+ "espree": "^6.2.1",
+ "esquery": "^1.4.0",
+ "lodash": "^4.17.21",
+ "semver": "^6.3.0"
+ }
+ }
+ }
+ },
+ "eslint-plugin-mocha": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-9.0.0.tgz",
+ "integrity": "sha512-d7knAcQj1jPCzZf3caeBIn3BnW6ikcvfz0kSqQpwPYcVGLoJV5sz0l0OJB2LR8I7dvTDbqq1oV6ylhSgzA10zg==",
+ "dev": true,
+ "requires": {
+ "eslint-utils": "^3.0.0",
+ "ramda": "^0.27.1"
+ }
+ },
+ "eslint-plugin-no-jquery": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-2.7.0.tgz",
+ "integrity": "sha512-Aeg7dA6GTH1AcWLlBtWNzOU9efK5KpNi7b0EhBO0o0M+awyzguUUo8gF6hXGjQ9n5h8/uRtYv9zOqQkeC5CG0w==",
+ "dev": true,
+ "requires": {}
+ },
+ "eslint-plugin-node": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz",
+ "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==",
+ "dev": true,
+ "requires": {
+ "eslint-plugin-es": "^3.0.0",
+ "eslint-utils": "^2.0.0",
+ "ignore": "^5.1.1",
+ "minimatch": "^3.0.4",
+ "resolve": "^1.10.1",
+ "semver": "^6.1.0"
+ },
+ "dependencies": {
+ "eslint-plugin-es": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz",
+ "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==",
+ "dev": true,
+ "requires": {
+ "eslint-utils": "^2.0.0",
+ "regexpp": "^3.0.0"
+ }
+ },
+ "eslint-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
+ "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^1.1.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-plugin-qunit": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-qunit/-/eslint-plugin-qunit-7.2.0.tgz",
+ "integrity": "sha512-ebT6aOpmMj4vchG0hVw9Ukbutk/lgywrc8gc9w9hH2/4WjKqwMlyM7iVwqB7OAXv6gtQMJZuziT0wNjjymAuWA==",
+ "dev": true,
+ "requires": {
+ "eslint-utils": "^3.0.0",
+ "requireindex": "^1.2.0"
+ }
+ },
+ "eslint-plugin-unicorn": {
+ "version": "40.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-40.1.0.tgz",
+ "integrity": "sha512-y5doK2DF9Sr5AqKEHbHxjFllJ167nKDRU01HDcWyv4Tnmaoe9iNxMrBnaybZvWZUaE3OC5Unu0lNIevYamloig==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.15.7",
+ "ci-info": "^3.3.0",
+ "clean-regexp": "^1.0.0",
+ "eslint-utils": "^3.0.0",
+ "esquery": "^1.4.0",
+ "indent-string": "^4.0.0",
+ "is-builtin-module": "^3.1.0",
+ "lodash": "^4.17.21",
+ "pluralize": "^8.0.0",
+ "read-pkg-up": "^7.0.1",
+ "regexp-tree": "^0.1.24",
+ "safe-regex": "^2.1.1",
+ "semver": "^7.3.5",
+ "strip-indent": "^3.0.0"
+ }
+ },
+ "eslint-plugin-vue": {
+ "version": "8.4.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-8.4.1.tgz",
+ "integrity": "sha512-nmWOhNmDx9TZ+yP9ZhezTkZUupSHsYA2TocRm+efPSXMOyFrVczVlaIuQcLBjCtI8CbkBiUQ3VcyQsjlIhDrhA==",
+ "dev": true,
+ "requires": {
+ "eslint-utils": "^3.0.0",
+ "natural-compare": "^1.4.0",
+ "semver": "^7.3.5",
+ "vue-eslint-parser": "^8.0.1"
+ }
+ },
+ "eslint-plugin-wdio": {
+ "version": "7.4.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-wdio/-/eslint-plugin-wdio-7.4.2.tgz",
+ "integrity": "sha512-tkISFycJmRFMKsEjetRcAmWSHKJKnw5rKHDxfE7Ob3tF5lbmYlCLfNKH0UwanOpSdulpe52s3K+CBHSd6qUUNQ==",
+ "dev": true
+ },
+ "eslint-plugin-yml": {
+ "version": "0.13.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-0.13.0.tgz",
+ "integrity": "sha512-rZvdnhe28jIbgSIZo3qYqkl9hKslyTDfMwqIGDzz873gxghzBw0yeFG+P7sMfOkFfpqwJzZy3IKe2cIiCp4FrA==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.3.2",
+ "lodash": "^4.17.21",
+ "natural-compare": "^1.4.0",
+ "yaml-eslint-parser": "^0.5.0"
+ }
+ },
+ "eslint-scope": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz",
+ "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ }
+ },
+ "eslint-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^2.0.0"
+ },
+ "dependencies": {
+ "eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz",
+ "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==",
+ "dev": true
+ },
+ "espree": {
+ "version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz",
+ "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==",
+ "dev": true,
+ "requires": {
+ "acorn": "^8.7.0",
+ "acorn-jsx": "^5.3.1",
+ "eslint-visitor-keys": "^3.1.0"
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true
+ },
+ "esquery": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
+ "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.1.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.2.0"
+ }
+ },
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true
+ },
+ "eventemitter2": {
+ "version": "0.4.14",
+ "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz",
+ "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=",
+ "dev": true
+ },
+ "execall": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz",
+ "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==",
+ "dev": true,
+ "requires": {
+ "clone-regexp": "^2.1.0"
+ }
+ },
+ "exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
+ "dev": true
+ },
+ "expand-tilde": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ },
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "3.2.11",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
+ "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ }
+ }
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fastest-levenshtein": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz",
+ "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==",
+ "dev": true
+ },
+ "fastq": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
+ "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
+ "dev": true,
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^3.0.4"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "findup-sync": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz",
+ "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=",
+ "dev": true,
+ "requires": {
+ "glob": "~5.0.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "5.0.15",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
+ "dev": true,
+ "requires": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ }
+ }
+ },
+ "fined": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz",
+ "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.2",
+ "is-plain-object": "^2.0.3",
+ "object.defaults": "^1.1.0",
+ "object.pick": "^1.2.0",
+ "parse-filepath": "^1.0.1"
+ }
+ },
+ "flagged-respawn": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz",
+ "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==",
+ "dev": true
+ },
+ "flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "requires": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ }
+ },
+ "flatted": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz",
+ "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==",
+ "dev": true
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "for-own": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true
+ },
+ "get-stdin": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz",
+ "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==",
+ "dev": true
+ },
+ "getobject": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz",
+ "integrity": "sha512-2zblDBaFcb3rB4rF77XVnuINOE2h2k/OnqXAiy0IrTxUfV1iFp3la33oAQVY9pCpWU268WFYVt2t71hlMuLsOg==",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.7",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
+ "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.3"
+ }
+ },
+ "global-modules": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
+ "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
+ "dev": true,
+ "requires": {
+ "global-prefix": "^3.0.0"
+ }
+ },
+ "global-prefix": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
+ "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
+ "dev": true,
+ "requires": {
+ "ini": "^1.3.5",
+ "kind-of": "^6.0.2",
+ "which": "^1.3.1"
+ },
+ "dependencies": {
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ }
+ }
+ },
+ "globals": {
+ "version": "13.12.1",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz",
+ "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.20.2"
+ }
+ },
+ "globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "requires": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ }
+ },
+ "globjoin": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz",
+ "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=",
+ "dev": true
+ },
+ "grunt": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.5.3.tgz",
+ "integrity": "sha512-mKwmo4X2d8/4c/BmcOETHek675uOqw0RuA/zy12jaspWqvTp4+ZeQF1W+OTpcbncnaBsfbQJ6l0l4j+Sn/GmaQ==",
+ "dev": true,
+ "requires": {
+ "dateformat": "~3.0.3",
+ "eventemitter2": "~0.4.13",
+ "exit": "~0.1.2",
+ "findup-sync": "~0.3.0",
+ "glob": "~7.1.6",
+ "grunt-cli": "~1.4.3",
+ "grunt-known-options": "~2.0.0",
+ "grunt-legacy-log": "~3.0.0",
+ "grunt-legacy-util": "~2.0.1",
+ "iconv-lite": "~0.4.13",
+ "js-yaml": "~3.14.0",
+ "minimatch": "~3.0.4",
+ "mkdirp": "~1.0.4",
+ "nopt": "~3.0.6",
+ "rimraf": "~3.0.2"
+ },
+ "dependencies": {
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ }
+ }
+ },
+ "grunt-banana-checker": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/grunt-banana-checker/-/grunt-banana-checker-0.10.0.tgz",
+ "integrity": "sha512-Sx+P3zWjn4YmBCqzidnCEkYrACe1SLTIT8kKC6C3f21Hu6sm17U/V+re343cuK3U+iGZv15ux6bY+69buIbYrA==",
+ "dev": true
+ },
+ "grunt-cli": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz",
+ "integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==",
+ "dev": true,
+ "requires": {
+ "grunt-known-options": "~2.0.0",
+ "interpret": "~1.1.0",
+ "liftup": "~3.0.1",
+ "nopt": "~4.0.1",
+ "v8flags": "~3.2.0"
+ },
+ "dependencies": {
+ "nopt": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz",
+ "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==",
+ "dev": true,
+ "requires": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ }
+ }
+ },
+ "grunt-eslint": {
+ "version": "24.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-eslint/-/grunt-eslint-24.0.0.tgz",
+ "integrity": "sha512-WpTeBBFweyhMuPjGwRSQV9JFJ+EczIdlsc7Dd/1g78QVI1aZsk4g/H3e+3S5HEwsS1RKL2YZIrGj8hMLlBfN8w==",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.1.2",
+ "eslint": "^8.0.1"
+ }
+ },
+ "grunt-known-options": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-2.0.0.tgz",
+ "integrity": "sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA==",
+ "dev": true
+ },
+ "grunt-legacy-log": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz",
+ "integrity": "sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA==",
+ "dev": true,
+ "requires": {
+ "colors": "~1.1.2",
+ "grunt-legacy-log-utils": "~2.1.0",
+ "hooker": "~0.2.3",
+ "lodash": "~4.17.19"
+ }
+ },
+ "grunt-legacy-log-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz",
+ "integrity": "sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw==",
+ "dev": true,
+ "requires": {
+ "chalk": "~4.1.0",
+ "lodash": "~4.17.19"
+ }
+ },
+ "grunt-legacy-util": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz",
+ "integrity": "sha512-2bQiD4fzXqX8rhNdXkAywCadeqiPiay0oQny77wA2F3WF4grPJXCvAcyoWUJV+po/b15glGkxuSiQCK299UC2w==",
+ "dev": true,
+ "requires": {
+ "async": "~3.2.0",
+ "exit": "~0.1.2",
+ "getobject": "~1.0.0",
+ "hooker": "~0.2.3",
+ "lodash": "~4.17.21",
+ "underscore.string": "~3.3.5",
+ "which": "~2.0.2"
+ }
+ },
+ "grunt-stylelint": {
+ "version": "0.17.0",
+ "resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.17.0.tgz",
+ "integrity": "sha512-aVpqPO7h98haGRZKnj9nkMTMGjzmVQWyN/FNB/qkbcVG6pguZ48yZi8YO+ULynzNK9YFqWhWBFgAs71m7ZpK+A==",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.1.0"
+ }
+ },
+ "hard-rejection": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
+ "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==",
+ "dev": true
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "homedir-polyfill": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
+ "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
+ "dev": true,
+ "requires": {
+ "parse-passwd": "^1.0.0"
+ }
+ },
+ "hooker": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz",
+ "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=",
+ "dev": true
+ },
+ "hosted-git-info": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
+ "dev": true
+ },
+ "html-tags": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz",
+ "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==",
+ "dev": true
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ignore": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
+ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
+ "dev": true
+ },
+ "import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "import-lazy": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz",
+ "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==",
+ "dev": true
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "dev": true
+ },
+ "interpret": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
+ "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=",
+ "dev": true
+ },
+ "is-absolute": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
+ "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
+ "dev": true,
+ "requires": {
+ "is-relative": "^1.0.0",
+ "is-windows": "^1.0.1"
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-builtin-module": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.1.0.tgz",
+ "integrity": "sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg==",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "^3.0.0"
+ }
+ },
+ "is-core-module": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
+ "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true
+ },
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+ "dev": true
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "is-regexp": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz",
+ "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==",
+ "dev": true
+ },
+ "is-relative": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
+ "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
+ "dev": true,
+ "requires": {
+ "is-unc-path": "^1.0.0"
+ }
+ },
+ "is-unc-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
+ "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
+ "dev": true,
+ "requires": {
+ "unc-path-regex": "^0.1.2"
+ }
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
+ "jsdoc-type-pratt-parser": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.2.tgz",
+ "integrity": "sha512-zRokSWcPLSWkoNzsWn9pq7YYSwDhKyEe+cJYT2qaPqLOOJb5sFSi46BPj81vP+e8chvCNdQL9RG86Bi9EI6MDw==",
+ "dev": true
+ },
+ "json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ },
+ "known-css-properties": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.25.0.tgz",
+ "integrity": "sha512-b0/9J1O9Jcyik1GC6KC42hJ41jKwdO/Mq8Mdo5sYN+IuRTXs2YFHZC3kZSx6ueusqa95x3wLYe/ytKjbAfGixA==",
+ "dev": true,
+ "peer": true
+ },
+ "ldjson-stream": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ldjson-stream/-/ldjson-stream-1.2.1.tgz",
+ "integrity": "sha1-kb7O2lrE7SsX5kn7d356v6AYnCs=",
+ "dev": true,
+ "requires": {
+ "split2": "^0.2.1",
+ "through2": "^0.6.1"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": ">=1.0.33-1 <1.1.0-0",
+ "xtend": ">=4.0.0 <4.1.0-0"
+ }
+ }
+ }
+ },
+ "levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ }
+ },
+ "liftup": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz",
+ "integrity": "sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw==",
+ "dev": true,
+ "requires": {
+ "extend": "^3.0.2",
+ "findup-sync": "^4.0.0",
+ "fined": "^1.2.0",
+ "flagged-respawn": "^1.0.1",
+ "is-plain-object": "^2.0.4",
+ "object.map": "^1.0.1",
+ "rechoir": "^0.7.0",
+ "resolve": "^1.19.0"
+ },
+ "dependencies": {
+ "findup-sync": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz",
+ "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==",
+ "dev": true,
+ "requires": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "micromatch": "^4.0.2",
+ "resolve-dir": "^1.0.1"
+ }
+ }
+ }
+ },
+ "lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true
+ },
+ "locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^5.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true
+ },
+ "lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
+ "dev": true
+ },
+ "lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "lodash.truncate": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
+ "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "make-iterator": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
+ "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-obj": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
+ "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==",
+ "dev": true
+ },
+ "mathml-tag-names": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz",
+ "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==",
+ "dev": true
+ },
+ "mdn-data": {
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
+ "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==",
+ "dev": true
+ },
+ "meow": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz",
+ "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==",
+ "dev": true,
+ "requires": {
+ "@types/minimist": "^1.2.0",
+ "camelcase-keys": "^6.2.2",
+ "decamelize": "^1.2.0",
+ "decamelize-keys": "^1.1.0",
+ "hard-rejection": "^2.1.0",
+ "minimist-options": "4.1.0",
+ "normalize-package-data": "^3.0.0",
+ "read-pkg-up": "^7.0.1",
+ "redent": "^3.0.0",
+ "trim-newlines": "^3.0.0",
+ "type-fest": "^0.18.0",
+ "yargs-parser": "^20.2.3"
+ },
+ "dependencies": {
+ "hosted-git-info": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
+ "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "normalize-package-data": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
+ "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^4.0.1",
+ "is-core-module": "^2.5.0",
+ "semver": "^7.3.4",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "type-fest": {
+ "version": "0.18.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
+ "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
+ "dev": true
+ }
+ }
+ },
+ "merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dev": true,
+ "requires": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ }
+ },
+ "min-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
+ "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist-options": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
+ "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
+ "dev": true,
+ "requires": {
+ "arrify": "^1.0.1",
+ "is-plain-obj": "^1.1.0",
+ "kind-of": "^6.0.3"
+ }
+ },
+ "mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "multimatch": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz",
+ "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==",
+ "dev": true,
+ "requires": {
+ "@types/minimatch": "^3.0.3",
+ "array-differ": "^3.0.0",
+ "array-union": "^2.1.0",
+ "arrify": "^2.0.1",
+ "minimatch": "^3.0.4"
+ },
+ "dependencies": {
+ "arrify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
+ "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
+ "dev": true
+ }
+ }
+ },
+ "nanoid": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
+ "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
+ "dev": true
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "node-releases": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz",
+ "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==",
+ "dev": true
+ },
+ "nopt": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ }
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
+ },
+ "normalize-selector": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz",
+ "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=",
+ "dev": true
+ },
+ "nth-check": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz",
+ "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==",
+ "dev": true,
+ "requires": {
+ "boolbase": "^1.0.0"
+ }
+ },
+ "object.defaults": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
+ "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
+ "dev": true,
+ "requires": {
+ "array-each": "^1.0.1",
+ "array-slice": "^1.0.0",
+ "for-own": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
+ "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
+ "dev": true,
+ "requires": {
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "dev": true,
+ "requires": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
+ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
+ "dev": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "requires": {
+ "yocto-queue": "^0.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^3.0.2"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true
+ },
+ "parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "requires": {
+ "callsites": "^3.0.0"
+ }
+ },
+ "parse-filepath": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
+ "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
+ "dev": true,
+ "requires": {
+ "is-absolute": "^1.0.0",
+ "map-cache": "^0.2.0",
+ "path-root": "^0.1.1"
+ }
+ },
+ "parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ }
+ },
+ "parse-passwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
+ "path-root": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
+ "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
+ "dev": true,
+ "requires": {
+ "path-root-regex": "^0.1.0"
+ }
+ },
+ "path-root-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
+ "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
+ "dev": true
+ },
+ "path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true
+ },
+ "picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "dev": true
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true
+ },
+ "pluralize": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
+ "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==",
+ "dev": true
+ },
+ "postcss": {
+ "version": "8.4.14",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
+ "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==",
+ "dev": true,
+ "requires": {
+ "nanoid": "^3.3.4",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ }
+ },
+ "postcss-less": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-6.0.0.tgz",
+ "integrity": "sha512-FPX16mQLyEjLzEuuJtxA8X3ejDLNGGEG503d2YGZR5Ask1SpDN8KmZUMpzCvyalWRywAn1n1VOA5dcqfCLo5rg==",
+ "dev": true,
+ "requires": {}
+ },
+ "postcss-media-query-parser": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz",
+ "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=",
+ "dev": true
+ },
+ "postcss-resolve-nested-selector": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz",
+ "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=",
+ "dev": true
+ },
+ "postcss-safe-parser": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz",
+ "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==",
+ "dev": true,
+ "requires": {}
+ },
+ "postcss-selector-parser": {
+ "version": "6.0.10",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
+ "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
+ "dev": true,
+ "requires": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true
+ },
+ "queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true
+ },
+ "quick-lru": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz",
+ "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==",
+ "dev": true
+ },
+ "ramda": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.2.tgz",
+ "integrity": "sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA==",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+ "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+ "dev": true,
+ "requires": {
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+ "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+ "dev": true
+ }
+ }
+ },
+ "read-pkg-up": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
+ "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+ "dev": true,
+ "requires": {
+ "find-up": "^4.1.0",
+ "read-pkg": "^5.2.0",
+ "type-fest": "^0.8.1"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "dev": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "rechoir": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz",
+ "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==",
+ "dev": true,
+ "requires": {
+ "resolve": "^1.9.0"
+ }
+ },
+ "redent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
+ "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
+ "dev": true,
+ "requires": {
+ "indent-string": "^4.0.0",
+ "strip-indent": "^3.0.0"
+ }
+ },
+ "regexp-tree": {
+ "version": "0.1.24",
+ "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.24.tgz",
+ "integrity": "sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==",
+ "dev": true
+ },
+ "regexpp": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
+ "dev": true
+ },
+ "regextras": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz",
+ "integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==",
+ "dev": true
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
+ },
+ "require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "dev": true
+ },
+ "requireindex": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz",
+ "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.22.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
+ "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
+ "dev": true,
+ "requires": {
+ "is-core-module": "^2.8.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "resolve-dir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.0",
+ "global-modules": "^1.0.0"
+ },
+ "dependencies": {
+ "global-modules": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+ "dev": true,
+ "requires": {
+ "global-prefix": "^1.0.1",
+ "is-windows": "^1.0.1",
+ "resolve-dir": "^1.0.0"
+ }
+ },
+ "global-prefix": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.2",
+ "homedir-polyfill": "^1.0.1",
+ "ini": "^1.3.4",
+ "is-windows": "^1.0.1",
+ "which": "^1.2.14"
+ }
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ }
+ }
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true
+ },
+ "reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "requires": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz",
+ "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==",
+ "dev": true,
+ "requires": {
+ "regexp-tree": "~0.1.1"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
+ },
+ "semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true
+ },
+ "slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
+ "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ }
+ },
+ "source-map": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
+ "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
+ "dev": true
+ },
+ "source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
+ "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
+ "dev": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
+ "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
+ "dev": true
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.11",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz",
+ "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==",
+ "dev": true
+ },
+ "specificity": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz",
+ "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==",
+ "dev": true
+ },
+ "split2": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-0.2.1.tgz",
+ "integrity": "sha1-At2smtwD7Au3jBKC7Aecpuha6QA=",
+ "dev": true,
+ "requires": {
+ "through2": "~0.6.1"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": ">=1.0.33-1 <1.1.0-0",
+ "xtend": ">=4.0.0 <4.1.0-0"
+ }
+ }
+ }
+ },
+ "sprintf-js": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
+ "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==",
+ "dev": true
+ },
+ "stable": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
+ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "strip-indent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
+ "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
+ "dev": true,
+ "requires": {
+ "min-indent": "^1.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true
+ },
+ "style-search": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz",
+ "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=",
+ "dev": true
+ },
+ "stylelint": {
+ "version": "14.8.3",
+ "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.8.3.tgz",
+ "integrity": "sha512-aLpskXwSgFEBYbFRKA/BfuyYMGuXNtn2t5GqoffNPSezvw97x/vVNWcZNF0+cwt+LBjfvyq9/MRE3OjInGRgNA==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "balanced-match": "^2.0.0",
+ "colord": "^2.9.2",
+ "cosmiconfig": "^7.0.1",
+ "css-functions-list": "^3.0.1",
+ "debug": "^4.3.4",
+ "execall": "^2.0.0",
+ "fast-glob": "^3.2.11",
+ "fastest-levenshtein": "^1.0.12",
+ "file-entry-cache": "^6.0.1",
+ "get-stdin": "^8.0.0",
+ "global-modules": "^2.0.0",
+ "globby": "^11.1.0",
+ "globjoin": "^0.1.4",
+ "html-tags": "^3.2.0",
+ "ignore": "^5.2.0",
+ "import-lazy": "^4.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-plain-object": "^5.0.0",
+ "known-css-properties": "^0.25.0",
+ "mathml-tag-names": "^2.1.3",
+ "meow": "^9.0.0",
+ "micromatch": "^4.0.5",
+ "normalize-path": "^3.0.0",
+ "picocolors": "^1.0.0",
+ "postcss": "^8.4.13",
+ "postcss-media-query-parser": "^0.2.3",
+ "postcss-resolve-nested-selector": "^0.1.1",
+ "postcss-safe-parser": "^6.0.0",
+ "postcss-selector-parser": "^6.0.10",
+ "postcss-value-parser": "^4.2.0",
+ "resolve-from": "^5.0.0",
+ "specificity": "^0.4.1",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1",
+ "style-search": "^0.1.0",
+ "supports-hyperlinks": "^2.2.0",
+ "svg-tags": "^1.0.0",
+ "table": "^6.8.0",
+ "v8-compile-cache": "^2.3.0",
+ "write-file-atomic": "^4.0.1"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
+ "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
+ "dev": true,
+ "peer": true
+ },
+ "is-plain-object": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+ "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
+ "dev": true,
+ "peer": true
+ },
+ "resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true,
+ "peer": true
+ }
+ }
+ },
+ "stylelint-config-recommended": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-7.0.0.tgz",
+ "integrity": "sha512-yGn84Bf/q41J4luis1AZ95gj0EQwRX8lWmGmBwkwBNSkpGSpl66XcPTulxGa/Z91aPoNGuIGBmFkcM1MejMo9Q==",
+ "dev": true,
+ "requires": {}
+ },
+ "stylelint-config-wikimedia": {
+ "version": "0.13.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.13.0.tgz",
+ "integrity": "sha512-1R1g/uc53z2z39ejZMALwC6fTfSZhkzDjj1v8ODCWtLCiuqWuSf3HR1ZTXT5X5AtSbZq1W9+0p5HJp6rPVXkRg==",
+ "dev": true,
+ "requires": {
+ "browserslist-config-wikimedia": "0.4.0",
+ "postcss-less": "6.0.0",
+ "stylelint": "14.8.1",
+ "stylelint-config-recommended": "7.0.0",
+ "stylelint-no-unsupported-browser-features": "5.0.3"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
+ "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
+ "dev": true
+ },
+ "is-plain-object": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+ "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
+ "dev": true
+ },
+ "known-css-properties": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.24.0.tgz",
+ "integrity": "sha512-RTSoaUAfLvpR357vWzAz/50Q/BmHfmE6ETSWfutT0AJiw10e6CmcdYRQJlLRd95B53D0Y2aD1jSxD3V3ySF+PA==",
+ "dev": true
+ },
+ "resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true
+ },
+ "stylelint": {
+ "version": "14.8.1",
+ "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.8.1.tgz",
+ "integrity": "sha512-0YxTop3wTeEVmQWhS7jjLFaBkvfPmffRiJ6eFIDlK++f3OklaobTYFJu32E5u/cIrFLbcW52pLqrYpihA/y0/w==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^2.0.0",
+ "colord": "^2.9.2",
+ "cosmiconfig": "^7.0.1",
+ "css-functions-list": "^3.0.1",
+ "debug": "^4.3.4",
+ "execall": "^2.0.0",
+ "fast-glob": "^3.2.11",
+ "fastest-levenshtein": "^1.0.12",
+ "file-entry-cache": "^6.0.1",
+ "get-stdin": "^8.0.0",
+ "global-modules": "^2.0.0",
+ "globby": "^11.1.0",
+ "globjoin": "^0.1.4",
+ "html-tags": "^3.2.0",
+ "ignore": "^5.2.0",
+ "import-lazy": "^4.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-plain-object": "^5.0.0",
+ "known-css-properties": "^0.24.0",
+ "mathml-tag-names": "^2.1.3",
+ "meow": "^9.0.0",
+ "micromatch": "^4.0.5",
+ "normalize-path": "^3.0.0",
+ "normalize-selector": "^0.2.0",
+ "picocolors": "^1.0.0",
+ "postcss": "^8.4.12",
+ "postcss-media-query-parser": "^0.2.3",
+ "postcss-resolve-nested-selector": "^0.1.1",
+ "postcss-safe-parser": "^6.0.0",
+ "postcss-selector-parser": "^6.0.10",
+ "postcss-value-parser": "^4.2.0",
+ "resolve-from": "^5.0.0",
+ "specificity": "^0.4.1",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1",
+ "style-search": "^0.1.0",
+ "supports-hyperlinks": "^2.2.0",
+ "svg-tags": "^1.0.0",
+ "table": "^6.8.0",
+ "v8-compile-cache": "^2.3.0",
+ "write-file-atomic": "^4.0.1"
+ }
+ }
+ }
+ },
+ "stylelint-no-unsupported-browser-features": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-5.0.3.tgz",
+ "integrity": "sha512-FqfbOTk5UEkHsAKOkPH6SvajsfO9YuoWvKxd34tCRBZug9ZNeaPn141nyWkd+ncc8S1gVmO2+O6qVAMj9bvWww==",
+ "dev": true,
+ "requires": {
+ "doiuse": "^4.4.1",
+ "lodash": "^4.17.15",
+ "postcss": "^8.3.6"
+ }
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "supports-hyperlinks": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz",
+ "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0",
+ "supports-color": "^7.0.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true
+ },
+ "svg-tags": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
+ "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=",
+ "dev": true
+ },
+ "svgo": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz",
+ "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==",
+ "dev": true,
+ "requires": {
+ "@trysound/sax": "0.2.0",
+ "commander": "^7.2.0",
+ "css-select": "^4.1.3",
+ "css-tree": "^1.1.3",
+ "csso": "^4.2.0",
+ "picocolors": "^1.0.0",
+ "stable": "^0.1.8"
+ }
+ },
+ "table": {
+ "version": "6.8.0",
+ "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz",
+ "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==",
+ "dev": true,
+ "requires": {
+ "ajv": "^8.0.1",
+ "lodash.truncate": "^4.4.2",
+ "slice-ansi": "^4.0.0",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "8.10.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz",
+ "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
+ }
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "through2": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz",
+ "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "3"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.2.0"
+ }
+ }
+ }
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "trim-newlines": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz",
+ "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1"
+ }
+ },
+ "type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true
+ },
+ "unc-path-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
+ "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
+ "dev": true
+ },
+ "underscore.string": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz",
+ "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "^1.1.1",
+ "util-deprecate": "^1.0.2"
+ }
+ },
+ "upath": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz",
+ "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==",
+ "dev": true
+ },
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "v8-compile-cache": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
+ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
+ "dev": true
+ },
+ "v8flags": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz",
+ "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "vue-eslint-parser": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-8.2.0.tgz",
+ "integrity": "sha512-hvl8OVT8imlKk/lQyhkshqwQQChzHETcBd5abiO4ePw7ib7QUZLfW+2TUrJHKUvFOCFRJrDin5KJO9OHzB5bRQ==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.3.2",
+ "eslint-scope": "^7.0.0",
+ "eslint-visitor-keys": "^3.1.0",
+ "espree": "^9.0.0",
+ "esquery": "^1.4.0",
+ "lodash": "^4.17.21",
+ "semver": "^7.3.5"
+ }
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "write-file-atomic": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz",
+ "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==",
+ "dev": true,
+ "requires": {
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.7"
+ }
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "dev": true
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ },
+ "yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "dev": true
+ },
+ "yaml-eslint-parser": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-0.5.0.tgz",
+ "integrity": "sha512-nJeyLA3YHAzhBTZbRAbu3W6xrSCucyxExmA+ZDtEdUFpGllxAZpto2Zxo2IG0r0eiuEiBM4e+wiAdxTziTq94g==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^3.0.0",
+ "lodash": "^4.17.21",
+ "yaml": "^1.10.2"
+ }
+ },
+ "yargs": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "dev": true,
+ "requires": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "dev": true
+ },
+ "yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true
+ }
+ }
+}
diff --git a/Translate/package.json b/Translate/package.json
new file mode 100644
index 00000000..7e8b73f7
--- /dev/null
+++ b/Translate/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "Translate",
+ "private": true,
+ "scripts": {
+ "minify-svg": "svgo --config=.svgo.config.js -q -r -f resources/images/",
+ "test": "grunt test"
+ },
+ "devDependencies": {
+ "eslint-config-wikimedia": "0.22.1",
+ "grunt": "1.5.3",
+ "grunt-banana-checker": "0.10.0",
+ "grunt-eslint": "24.0.0",
+ "grunt-stylelint": "0.17.0",
+ "stylelint-config-wikimedia": "0.13.0",
+ "svgo": "2.8.0"
+ }
+}
diff --git a/Translate/resources/.eslintrc.json b/Translate/resources/.eslintrc.json
new file mode 100644
index 00000000..c9e76bcf
--- /dev/null
+++ b/Translate/resources/.eslintrc.json
@@ -0,0 +1,21 @@
+{
+ "root": true,
+ "extends": [
+ "wikimedia/client-es5",
+ "wikimedia/jquery",
+ "wikimedia/mediawiki",
+ "wikimedia/jsduck"
+ ],
+ "globals": {
+ "Chart": "readonly",
+ "moment": "readonly"
+ },
+ "rules": {
+ "max-len": "off",
+ "no-jquery/no-class-state": "off",
+ "no-jquery/no-global-selector": "off",
+ "no-jquery/no-sizzle": "warn",
+ "no-jquery/no-visibility": "error",
+ "compat/compat": "warn"
+ }
+}
diff --git a/Translate/resources/css/ext.translate.codemirror.css b/Translate/resources/css/ext.translate.codemirror.css
new file mode 100644
index 00000000..b08d3992
--- /dev/null
+++ b/Translate/resources/css/ext.translate.codemirror.css
@@ -0,0 +1,5 @@
+/* Do not highlight tvar tags outside translate tags */
+.cm-mw-ext-tvar:not( .cm-mw-tag-translate ) {
+ color: inherit;
+ font-weight: inherit;
+}
diff --git a/Translate/resources/css/ext.translate.css b/Translate/resources/css/ext.translate.css
new file mode 100644
index 00000000..67aea3c3
--- /dev/null
+++ b/Translate/resources/css/ext.translate.css
@@ -0,0 +1,10 @@
+.mw-translate-fuzzy {
+ background-color: #fdd;
+}
+
+.mw-pt-translate-header {
+ border-bottom: 1px solid #a2a9b1;
+ padding-bottom: 4px;
+ font-size: x-small;
+ text-align: center;
+}
diff --git a/Translate/resources/css/ext.translate.dropdownmenu.css b/Translate/resources/css/ext.translate.dropdownmenu.css
new file mode 100644
index 00000000..46d17ed8
--- /dev/null
+++ b/Translate/resources/css/ext.translate.dropdownmenu.css
@@ -0,0 +1,13 @@
+.tux-dropdown-menu {
+ border: 1px solid #c9c9c9;
+ /* @noflip */
+ box-shadow: 0 3px 3px -3px rgba( 0, 0, 0, 0.5 );
+ font-size: 14px;
+ margin: 0;
+ list-style: none;
+ padding: 4px;
+ z-index: 300;
+ background: #fff;
+ display: block;
+ position: absolute;
+}
diff --git a/Translate/resources/css/ext.translate.edit.documentation.less b/Translate/resources/css/ext.translate.edit.documentation.less
new file mode 100644
index 00000000..b710fc35
--- /dev/null
+++ b/Translate/resources/css/ext.translate.edit.documentation.less
@@ -0,0 +1,14 @@
+fieldset.translate-edit-documentation {
+ legend {
+ padding: 0 0.5em;
+ }
+
+ > div p:first-child {
+ margin-top: 0.2em;
+ }
+}
+
+.ve-ui-mwNoticesPopupTool-item .translate-edit-documentation {
+ margin-left: 0;
+ margin-right: 0;
+}
diff --git a/Translate/resources/css/ext.translate.editor.css b/Translate/resources/css/ext.translate.editor.css
new file mode 100644
index 00000000..c958b9c9
--- /dev/null
+++ b/Translate/resources/css/ext.translate.editor.css
@@ -0,0 +1,553 @@
+.tux-message-editor {
+ position: relative;
+ border: 1px solid #777;
+ background-color: #fff;
+ cursor: default;
+ box-shadow: 0 2px 6px rgba( 0, 0, 0, 0.3 );
+}
+
+.grid .tux-message-editor .close {
+ background: no-repeat center center;
+ /* @embed */
+ background-image: linear-gradient( transparent, transparent ), url( ../images/close.svg );
+ padding: 16px;
+ cursor: pointer;
+ float: right;
+ opacity: 0.87;
+}
+
+.grid .tux-message-editor .editor-info-toggle {
+ padding: 16px;
+ cursor: pointer;
+ float: right;
+}
+
+.tux-message-editor .editor-contract {
+ background: no-repeat center center;
+ /* @embed */
+ background-image: linear-gradient( transparent, transparent ), url( ../images/contract-ltr.svg );
+}
+
+.tux-message-editor .editor-expand {
+ background: no-repeat center center;
+ /* @embed */
+ background-image: linear-gradient( transparent, transparent ), url( ../images/expand-ltr.svg );
+}
+
+.tux-message-editor .editcolumn {
+ border-right: 1px solid #aaa;
+ transition: width 0.5s;
+ background-color: #fff;
+ z-index: 1;
+ /* Padding to have space for the arrow indicating split section */
+ padding-right: 40px;
+}
+
+.grid .tux-message-editor--expanded .editcolumn {
+ width: 100%;
+ padding-right: 5px;
+}
+
+.grid .tux-message-editor .tux-editor-titletools {
+ /* Ignore the padding added for the arrow */
+ margin-right: -40px;
+}
+
+.grid .tux-message-editor--expanded .tux-editor-titletools {
+ margin-right: -5px;
+}
+
+.tux-message-editor textarea {
+ border: 1px solid #555;
+ font-size: 16px;
+ /* The (30px + 5px paddings) 40px for bottom is for the insertables */
+ padding: 5px 5px 40px 5px;
+ /* Normalize margin across skins (esp. Timeless) */
+ margin: 0;
+ height: 100px;
+ min-height: 150px;
+ overflow-y: auto;
+ position: relative;
+ z-index: 100;
+ /* We have automatic resizing for height, and horizontal makes no sense */
+ resize: none;
+ /* Avoid weird extra space appearing at the bottom of enclosing div when
+ * the default value inline-block is used in Chrome.
+ * https://stackoverflow.com/questions/5196424/inconsistent-textarea-handling-in-browsers */
+ display: block;
+}
+
+.tux-editor-editsummary-block input {
+ border: 1px solid #c0c0c0;
+ font-size: 14px;
+ width: 100%;
+ height: 30px;
+ margin: 5px 0 0;
+ padding: 1px 4px;
+}
+
+.tux-editor-editsummary-block input:disabled {
+ background-color: #f8f8f8;
+}
+
+.tux-message-editor .editarea {
+ position: relative;
+}
+
+/* Temporary fix for T111685 */
+.grid .tux-message-editor .messagekey {
+ color: #222;
+ font-size: 13px;
+ font-weight: bold;
+ padding: 5px 0 5px 10px;
+ cursor: pointer;
+}
+
+.tux-message-editor .messagekey .caret {
+ border-top: 4px solid #222;
+ border-left: 4px solid transparent;
+ border-right: 4px solid transparent;
+ display: inline-block;
+ vertical-align: middle;
+ margin: 0 4px;
+}
+
+/* Temporary fix for T111685 */
+.grid .tux-message-editor .sourcemessage {
+ font-size: 18px;
+ line-height: 1.6em;
+ padding: 5px 0 10px 10px;
+ word-wrap: break-word;
+}
+
+.tux-message-editor .sourcemessage.long {
+ font-size: 16px;
+}
+
+.tux-message-editor .sourcemessage.longer {
+ font-size: 14px;
+}
+
+.tux-message-editor .shortcutinfo {
+ color: #54595d;
+ font-size: 13px;
+ padding: 0 5px 5px 10px;
+ display: none;
+}
+
+@media screen and ( min-width: 980px ) {
+ .tux-message-editor .shortcutinfo {
+ display: block;
+ }
+}
+
+.tux-message-editor .infocolumn-block .infocolumn {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ right: 0;
+ left: 10px;
+ padding: 0 5px;
+ overflow: auto;
+}
+
+/* Temporary fix for T111685 */
+.grid .tux-message-editor .infocolumn-block {
+ font-size: 12pt;
+ background: #fcfcfc;
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ padding: 0;
+ transition: width 0.5s;
+}
+
+.tux-message-editor__caret:before,
+.tux-message-editor__caret:after {
+ border-top: 20px solid transparent;
+ border-right: 20px solid #aaa;
+ border-bottom: 20px solid transparent;
+ content: '';
+ display: inline-block;
+ left: -21px;
+ position: absolute;
+ bottom: 50%;
+ z-index: 2;
+ transition: visibility 0s 0.5s;
+}
+
+.tux-message-editor__caret:after {
+ border-right: 20px solid #fcfcfc;
+ left: -20px;
+}
+
+.tux-message-editor--expanded .tux-message-editor__caret:before,
+.tux-message-editor--expanded .tux-message-editor__caret:after {
+ visibility: hidden;
+ transition: visibility 0s 0s;
+}
+
+.infocolumn-block .infocolumn .message-desc-editor {
+ padding: 5px 0;
+ margin-right: 5px;
+}
+
+.tux-textarea-documentation {
+ height: 100px;
+ overflow: auto;
+}
+
+.infocolumn-block .infocolumn .message-desc {
+ font-size: 16px;
+ padding: 5px 0;
+ margin-right: 5px;
+}
+
+.infocolumn-block .infocolumn .message-desc.long {
+ font-size: 14px;
+ border-bottom: 1px solid #ddd;
+}
+
+.infocolumn-block .infocolumn .message-desc.compact {
+ max-height: 100px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.message-desc-control {
+ font-size: 14px;
+ padding: 3px 0 5px 0;
+}
+
+.message-desc-control .read-more {
+ font-size: 14px;
+ color: #36c;
+ cursor: pointer;
+ margin-right: 5px;
+}
+
+.message-desc-edit {
+ background: left center no-repeat;
+ background-image: /* @embed */ linear-gradient( transparent, transparent ), url( ../images/action-edit.svg );
+ background-size: 18px 18px;
+ padding-left: 19px;
+}
+
+.tm-suggestions-title,
+.edit-summaries-title,
+.in-other-languages-title {
+ font-size: 16px;
+ font-weight: bold;
+ padding: 10px 0;
+}
+
+.edit-summaries-title {
+ display: flex;
+}
+
+.edit-summaries-title span {
+ flex: 1;
+}
+
+.edit-summaries-title a {
+ margin-right: 10px;
+ font-size: 0.75em;
+ background: left center no-repeat;
+ background-image: url( ../images/history.svg );
+ background-size: 18px 18px;
+ padding-left: 23px;
+ display: inline-flex;
+ align-items: center;
+}
+
+.edit-summaries ul {
+ margin: 0 0.2em 0.3em 0.4em;
+}
+
+.edit-summaries li > span {
+ display: flex;
+ white-space: nowrap;
+ font-size: 13px;
+}
+
+.edit-summary-message {
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.edit-summary-spacer {
+ font-weight: bold;
+ padding: 0 3px;
+}
+
+.update-without-summary {
+ color: #54595d;
+ font-size: 13px;
+}
+
+.tm-suggestion,
+.in-other-language {
+ font-size: 14px;
+ border: 1px solid #ddd;
+ border-left: 2px solid #36c;
+ padding: 5px 5px 5px 10px;
+ background-color: #f5f5f5;
+}
+
+.tux-tm-suggestion-source,
+.tux-translation-aid-error {
+ font-size: 13px;
+ margin-bottom: 15px;
+}
+
+.tux-translation-aid-error {
+ margin-top: 15px;
+ margin-right: 15px;
+}
+
+.grid .row .tm-suggestion,
+.grid .row .in-other-language {
+ margin: 0 5px 3px -5px;
+}
+
+.tm-suggestion:hover,
+.in-other-language:hover {
+ cursor: pointer;
+ box-shadow: 0 0 3px rgba( 0, 0, 0, 0.2 );
+}
+
+.in-other-language .language {
+ color: #54595d;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.tux-message-editor .help {
+ font-size: 16px;
+ padding: 10px 5px;
+}
+
+.tux-message-editor .help a {
+ font-size: 14px;
+ padding: 0 0 0 5px;
+}
+
+.tux-message-editor .tux-translation-aid-disabled:hover {
+ cursor: not-allowed;
+}
+
+.editarea .tux-notices-block {
+ position: relative;
+}
+
+.tux-notice {
+ background-color: #ffc;
+}
+
+.tux-highlight {
+ background-color: #c9c9c9;
+}
+
+.tux-notice-message {
+ font-size: 14px;
+ padding: 2px 13% 2px 5px;
+ /* 24px space for icon */
+ padding-left: 24px;
+ background-position: left;
+ background-repeat: no-repeat;
+ /* 16 (size) + 4 + 4 = 24 (padding) */
+ background-position-x: 4px;
+ background-size: 16px 16px;
+}
+
+.tux-notice .diff {
+ /** Uses an older version of the clock */
+ background-size: 14px;
+ /* 14 (size) + 5 + 5 = 24 (padding) */
+ background-position-x: 5px;
+}
+
+.tux-notice .diff-deletedline,
+.tux-notice .diff-addedline {
+ font-size: 0.75em;
+ font-family: monospace;
+}
+
+.editarea .tux-more-notices {
+ background-color: #fbf6ad;
+ position: absolute;
+ right: 0;
+ padding: 2px 5px;
+ text-align: right;
+ cursor: pointer;
+ bottom: 0;
+ font-size: 14px;
+}
+
+.tux-notice-message.warning {
+ background-image: url( ../images/label-flag.svg );
+}
+
+.tux-notice-message.error,
+.tux-notice-message.translation-saving {
+ background-color: #fee7e6;
+ color: #b32424;
+ background-image: url( ../images/label-error.svg );
+}
+
+.tux-notice-message.diff {
+ background-image: url( ../images/label-clock.svg );
+}
+
+.tux-notice-message .show-diff-link {
+ color: #36c;
+ cursor: pointer;
+ padding-left: 5px;
+}
+
+.tux-notice-message .diff td.diff-marker {
+ font-size: 1.2em;
+ padding: 0;
+}
+
+.editarea .tux-more-notices:before {
+ content: '';
+ border-bottom: 1em solid #fbf6ad;
+ border-top: 1em solid transparent;
+ border-left: 1em solid transparent;
+ border-right: 1em solid #fbf6ad;
+ display: inline-block;
+ position: absolute;
+ right: 100%;
+ top: 0;
+}
+
+.editarea .tux-more-notices.tux-has-errors {
+ background-color: #fbb;
+}
+
+.editarea .tux-more-notices.tux-has-errors:before {
+ border-bottom-color: #fbb;
+ border-right-color: #fbb;
+}
+
+.tux-editor-request-right {
+ font-size: 13px;
+ padding: 0 5px;
+ color: #54595d;
+}
+
+.tux-editor-ask-permission {
+ padding: 0 5px;
+}
+
+.tux-editor-editarea-block {
+ padding: 0 5px;
+}
+
+.tux-editor-editsummary-block {
+ padding: 0 5px;
+}
+
+.tux-editor-actions-block {
+ position: relative;
+}
+
+/* Temporary fix for T111685 */
+.grid .tux-editor-actions-block .tux-editor-insert-buttons {
+ position: absolute;
+ /* 30px + 5px padding on bottom */
+ top: -35px;
+ margin-left: 10px;
+ padding-right: 20px;
+ z-index: 110;
+}
+
+.tux-editor-insert-buttons button {
+ padding: 0 5px;
+ min-width: 30px;
+ margin-right: 5px;
+ margin-bottom: 5px;
+ border: 1px solid #ddd;
+ background: #fbfbfb;
+ color: #222;
+ font-size: 13px;
+ line-height: 30px;
+ overflow-wrap: anywhere;
+}
+
+.tux-editor-insert-buttons .tux-editor-paste-original-button {
+ background: #fbfbfb left center no-repeat;
+ /* @embed */
+ background-image: linear-gradient( transparent, transparent ), url( ../images/paste.svg );
+ background-size: 16px 16px;
+ padding-left: 18px;
+}
+
+.message-desc-editor .mw-ui-button,
+.tux-editor-control-buttons .mw-ui-button {
+ margin: 10px 5px;
+}
+
+.sourcemessage,
+.suggestiontext {
+ white-space: pre-wrap;
+}
+
+.infocolumn .loading {
+ color: #54595d;
+ padding: 10px;
+ font-size: 14px;
+}
+
+.tux-message-tools-menu li a {
+ color: #54595d;
+ display: block;
+ font-size: 14px;
+ padding: 0 2px;
+ text-decoration: none;
+}
+
+.tux-message-tools-menu li a:hover {
+ cursor: pointer;
+ background-color: #f0f0f0;
+ color: #222;
+}
+
+.tux-message-tools-menu li.selected {
+ background: right no-repeat;
+ /* @embed */
+ background-image: linear-gradient( transparent, transparent ), url( ../images/label-tick.svg );
+ color: #222;
+}
+
+/*
+ * Hide the cancel button by default, but show it in the last message.
+ * !important is used to override the button styling in ULS.
+*/
+.tux-editor-cancel-button {
+ display: none !important;
+}
+
+.last-message .tux-editor-cancel-button {
+ display: inline-block !important;
+}
+
+.last-message .tux-editor-skip-button {
+ display: none;
+}
+
+.shortcut-popup {
+ width: 18px;
+ height: 18px;
+ line-height: 18px;
+ overflow: hidden;
+ font-size: 13px;
+ text-align: center;
+ border: 1px dashed #808080;
+ border-radius: 100%;
+ z-index: 110;
+ background-color: #fff;
+ padding: 3px;
+}
diff --git a/Translate/resources/css/ext.translate.groupselector.less b/Translate/resources/css/ext.translate.groupselector.less
new file mode 100644
index 00000000..dbce8d3d
--- /dev/null
+++ b/Translate/resources/css/ext.translate.groupselector.less
@@ -0,0 +1,146 @@
+@import 'mediawiki.mixins';
+
+/**
+ * Group selector
+ */
+.tux-groupselector {
+ position: absolute;
+ top: 14px;
+ right: 0;
+ z-index: 900;
+ margin-top: 13px;
+ width: 600px;
+ padding: 0;
+ border: 1px solid #a2a9b1;
+ background-color: #f0f0f0;
+ border-radius: 5px;
+ box-shadow: 0 5px 10px rgba( 0, 0, 0, 0.2 );
+
+ &.hide {
+ display: none;
+ }
+}
+
+/* The triangle shaped callout */
+.tux-groupselector:before {
+ border-bottom: 7px solid #a2a9b1;
+ border-left: 7px solid transparent;
+ border-right: 7px solid transparent;
+ content: '';
+ display: inline-block;
+ left: 99px;
+ position: absolute;
+ top: -7px;
+}
+
+.tux-groupselector:after {
+ border-bottom: 6px solid #f0f0f0;
+ border-left: 6px solid transparent;
+ border-right: 6px solid transparent;
+ content: '';
+ display: inline-block;
+ left: 100px;
+ position: absolute;
+ top: -6px;
+}
+
+/* Remove the triangle shaped callout */
+.tux-groupselector.removecallout:before,
+.tux-groupselector.removecallout:after {
+ content: none;
+}
+
+.tux-groupselector__filter {
+ padding-top: 10px;
+}
+
+.tux-groupselector__filter__search__input {
+ font-size: 14px;
+ width: 100%;
+ height: 28px;
+ border: 1px solid #c9c9c9;
+ padding: 2px;
+ margin: 0;
+}
+
+.tux-groupselector__filter__search__icon {
+ background-image: url( ../images/search.svg );
+ background-repeat: no-repeat;
+ background-position: right center;
+ background-size: 25px;
+ height: 28px;
+}
+
+/*
+ * Group tab
+ */
+.tux-grouptab {
+ color: #222;
+ line-height: 30px;
+ height: 30px;
+ cursor: pointer;
+ padding: 2px 5px;
+ margin: 0 4px;
+ display: inline-block;
+}
+
+.tux-grouptab--selected {
+ border-bottom: 2px solid #0645ad;
+}
+
+/*
+ * Group list
+ */
+.tux-grouplist {
+ max-height: 400px;
+ overflow-y: auto;
+ overflow-x: hidden;
+ background-color: #fff;
+ min-height: 200px;
+ border-radius: 0 0 5px 5px;
+}
+
+.tux-grouplist__item {
+ position: relative;
+ border-bottom: 1px solid #eee;
+ height: 50px;
+ cursor: pointer;
+
+ &:hover {
+ background-color: #f8f8f8;
+ }
+}
+
+.grid .tux-grouplist__item__label {
+ padding-bottom: 0; /* grid override */
+ padding-left: 15px; /* grid override */
+ line-height: 32px;
+ cursor: pointer;
+ white-space: nowrap;
+}
+
+.tux-grouplist__item__label .tux-statsbar {
+ position: absolute;
+ bottom: 0;
+ width: 150px;
+}
+
+.tux-grouplist__item__icon {
+ .background-image( '../images/project.svg' );
+ background-repeat: no-repeat;
+ background-position: right center;
+ /* Keep this in sync with js! */
+ background-size: 32px;
+ height: 50px;
+}
+
+.grid .row .tux-grouplist__item__subgroups {
+ color: #72777d;
+ position: absolute; /* grid override */
+ padding: 0 15px 2px 0; /* grid override */
+ line-height: 1.25em;
+ bottom: 0;
+ right: 0;
+ text-align: right;
+ font-size: 10pt;
+}
diff --git a/Translate/resources/css/ext.translate.language.selector.css b/Translate/resources/css/ext.translate.language.selector.css
new file mode 100644
index 00000000..be167b86
--- /dev/null
+++ b/Translate/resources/css/ext.translate.language.selector.css
@@ -0,0 +1,24 @@
+.ext-translate-language-selector.ext-translate-language-selector {
+ float: right;
+ text-align: right;
+ border: medium none;
+ font-size: 13pt;
+}
+
+.ext-translate-language-selector .ext-translate-language-icon {
+ background: no-repeat scroll right center transparent;
+ background-image: linear-gradient( transparent, transparent ), url( ../images/language.svg );
+ background-size: 20px;
+ padding-right: 20px;
+}
+
+.ext-translate-language-selector .ext-translate-language-selector-expand {
+ background: no-repeat scroll right center transparent;
+ background-image: linear-gradient( transparent, transparent ), url( ../images/expand.svg );
+ background-size: 16px;
+ padding-right: 16px;
+}
+
+.ext-translate-language-selector .ext-translate-target-language {
+ padding: 0 0.5em;
+}
diff --git a/Translate/resources/css/ext.translate.loader.css b/Translate/resources/css/ext.translate.loader.css
new file mode 100644
index 00000000..07d6dc18
--- /dev/null
+++ b/Translate/resources/css/ext.translate.loader.css
@@ -0,0 +1,51 @@
+/* Loading indicator: */
+
+@-webkit-keyframes tux-loading-indicator-spin {
+ from {
+ -webkit-transform: rotate( 0deg );
+ }
+
+ to {
+ -webkit-transform: rotate( 360deg );
+ }
+}
+
+@keyframes tux-loading-indicator-spin {
+ from {
+ transform: rotate( 0deg );
+ }
+
+ to {
+ transform: rotate( 360deg );
+ }
+}
+
+.tux-loading-indicator {
+ float: left;
+ background: transparent url( ../images/loading.gif ) right bottom no-repeat;
+ /* @embed */
+ background-image: linear-gradient( transparent, transparent ), url( ../images/loading.svg );
+ background-size: 100%;
+ -webkit-animation-name: tux-loading-indicator-spin;
+ -webkit-animation-duration: 1.5s;
+ -webkit-animation-iteration-count: infinite;
+ -webkit-animation-timing-function: linear;
+ animation-name: tux-loading-indicator-spin;
+ animation-duration: 1.5s;
+ animation-iteration-count: infinite;
+ animation-timing-function: linear;
+ height: 34px;
+ width: 34px;
+ backface-visibility: hidden;
+}
+
+.tux-loading-indicator--centered {
+ top: 50%;
+ left: 50%;
+ position: absolute;
+}
+
+.tux-loading-indicator--stopped {
+ -webkit-animation: none;
+ animation: none;
+}
diff --git a/Translate/resources/css/ext.translate.messagerenamedialog.less b/Translate/resources/css/ext.translate.messagerenamedialog.less
new file mode 100644
index 00000000..bcc15d1a
--- /dev/null
+++ b/Translate/resources/css/ext.translate.messagerenamedialog.less
@@ -0,0 +1,53 @@
+.smg-rename-dialog {
+ .oo-ui-processDialog-title {
+ padding: 0 6px;
+ }
+
+ .smg-rename-msg-search {
+ margin-bottom: 1em;
+
+ .oo-ui-fieldLayout-field {
+ width: 100%;
+ }
+
+ .oo-ui-textInputWidget {
+ max-width: none;
+ }
+ }
+
+ .smg-rename-list {
+ padding: 0.4em 0.6em;
+ }
+
+ .smg-rename-list:hover {
+ cursor: pointer;
+ background-color: #e8e8e8;
+ }
+
+ .smg-rename-notice {
+ font-size: 1.1em;
+ padding: 5px 0.6em;
+ margin-bottom: 5px;
+ }
+
+ .smg-rename-notice.hide {
+ display: none;
+ }
+
+ .smg-rename-similarity {
+ font-style: italic;
+ float: right;
+ font-size: 0.9em;
+ margin-top: 0.1em;
+ }
+
+ .smg-rename-selected {
+ background-color: #dadada;
+ }
+
+ .smg-rename-msg-content {
+ font-size: 0.9em;
+ margin-top: 6px;
+ line-height: 1.5em;
+ }
+}
diff --git a/Translate/resources/css/ext.translate.messagetable.less b/Translate/resources/css/ext.translate.messagetable.less
new file mode 100644
index 00000000..d01b6b10
--- /dev/null
+++ b/Translate/resources/css/ext.translate.messagetable.less
@@ -0,0 +1,283 @@
+@import 'mediawiki.mixins';
+
+/* Default colors */
+.tux-messagelist {
+ background-color: #f8f8f8;
+ color: #222;
+ max-width: 800px;
+}
+
+.grid.ext-translate-container .row {
+ min-width: 300px !important;
+}
+
+@media screen and ( max-width: 600px ) {
+ .grid.ext-translate-container .tux-messagelist .tux-list-message {
+ width: 100%;
+ }
+
+ .tux-list-status,
+ .tux-list-edit {
+ display: none;
+ }
+}
+
+.tux-message {
+ height: auto;
+ cursor: pointer;
+}
+
+/* The "block" views of page mode and proofreading mode have 0 margin on
+ * .tux-message. To make the actual editor be of same width, set 0 margin on
+ * the open editor (overriding the -5px set by the grid) */
+.grid .tux-message.open {
+ margin: 0 auto;
+}
+
+.tux-message-item {
+ line-height: 50px;
+ height: 50px;
+ overflow: hidden;
+ margin-right: 5px !important;
+ margin-left: 5px !important;
+ vertical-align: middle;
+ border-bottom: 1px solid #c9c9c9;
+ background: #fff;
+}
+
+.tux-message-item.translated,
+.tux-message-item.translated:hover,
+.tux-message-item.proofread,
+.tux-message-item.proofread:hover {
+ background-color: #f0f0f0;
+}
+
+.tux-message-item:hover {
+ background-color: #f8f8f8;
+}
+
+.tux-list-status span,
+.tux-list-edit {
+ padding: 5px;
+ /* 15px space for icon */
+ padding-left: 20px;
+ /* Do not combine these two, unless you also fix the
+ * tux-status-* styles below. That includes you, Siebrand ;)
+ */
+ background-position: left;
+ background-repeat: no-repeat;
+}
+
+.tux-info {
+ background-color: #f0f0f0;
+}
+
+.tux-list-source {
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ unicode-bidi: -webkit-isolate;
+ unicode-bidi: -moz-isolate;
+ unicode-bidi: isolate;
+}
+
+.tux-list-translation {
+ color: #54595d;
+ white-space: nowrap;
+ padding-left: 5px;
+ text-overflow: ellipsis;
+ unicode-bidi: -webkit-isolate;
+ unicode-bidi: -moz-isolate;
+ unicode-bidi: isolate;
+}
+
+.tux-list-message {
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.tux-status-unsaved {
+ .background-image( '../images/label-pen.svg' );
+}
+
+.tux-status-translated,
+.tux-status-proofread {
+ .background-image( '../images/label-tick.svg' );
+}
+
+.tux-status-fuzzy {
+ .background-image( '../images/label-clock.svg' );
+}
+
+.tux-list-edit a {
+ .background-image( '../images/action-edit.svg' );
+ background-position: left center;
+ background-repeat: no-repeat;
+ background-size: 18px 18px;
+ padding-left: 19px;
+}
+
+.tux-messagetable-loader {
+ color: #54595d;
+ padding: 15px;
+ top: 0;
+ background: #f0f0f0 16px 50%;
+ box-shadow: 0 1px 4px rgba( 0, 0, 0, 0.3 ), 0 0 20px rgba( 0, 0, 0, 0.1 ) inset;
+}
+
+.tux-messagetable-loader-info {
+ padding-left: 46px;
+ font-size: 25px;
+}
+
+.tux-action-bar {
+ background-color: #f0f0f0;
+ color: #222;
+ box-shadow: 0 2px 6px rgba( 0, 0, 0, 0.3 );
+ transition: width 250ms;
+}
+
+@media screen and ( min-height: 500px ) {
+ .tux-action-bar.floating {
+ border-top: 1px solid #ddd;
+ position: fixed;
+ bottom: 0;
+ z-index: 200;
+ }
+}
+
+.tux-action-bar .tux-statsbar {
+ position: relative;
+ top: 30px;
+}
+
+.tux-action-bar .tux-view-switcher {
+ padding: 0 5px;
+}
+
+.tux-action-bar button {
+ min-height: 40px;
+ font-size: 14px;
+ margin: 5px 0;
+ cursor: pointer;
+ background-color: #e6e6e6;
+ font-weight: bold;
+ line-height: 1;
+ background-image: linear-gradient( #f0f0f0, #e6e6e6 );
+ border: 1px #c9c9c9 solid;
+}
+
+.tux-action-bar button:hover {
+ background-color: #f0f0f0;
+ background-image: linear-gradient( #f8f8f8, #f0f0f0 );
+}
+
+.tux-action-bar button:active,
+.tux-action-bar button.down {
+ background: #222;
+ color: #fff;
+}
+
+.tux-action-bar button.disabled,
+.tux-action-bar button.disabled:hover {
+ color: #c9c9c9;
+ cursor: default;
+ background-color: #f0f0f0;
+ border-color: #e3e3e3;
+}
+
+.tux-view-switcher button {
+ padding: 0 2px 0 0;
+}
+
+.tux-view-switcher button:first-child {
+ border-radius: 3px 0 0 3px;
+ border-right: 0;
+}
+
+.tux-view-switcher button:last-child {
+ border-radius: 0 3px 3px 0;
+ border-left: 0;
+}
+
+.tux-view-switcher button:before {
+ content: '';
+ height: 15px;
+ width: 25px;
+ display: inline-block;
+ vertical-align: bottom;
+}
+
+.tux-action-bar .translate-mode-button {
+ width: 30%;
+}
+
+.tux-action-bar .translate-mode-button:before {
+ .background-image( '../images/view-list.svg' );
+}
+
+.tux-action-bar .translate-mode-button.down:before {
+ .background-image( '../images/view-list-hi.svg' );
+}
+
+.tux-action-bar .page-mode-button {
+ width: 30%;
+}
+
+.tux-action-bar .page-mode-button:before {
+ .background-image( '../images/view-page.svg' );
+}
+
+.tux-action-bar .page-mode-button.down:before {
+ .background-image( '../images/view-page-hi.svg' );
+}
+
+.tux-action-bar .proofread-mode-button {
+ width: 36%;
+}
+
+.tux-action-bar .proofread-mode-button:before {
+ .background-image( '../images/view-proofread.svg' );
+}
+
+.tux-action-bar .proofread-mode-button.down:before {
+ .background-image( '../images/view-proofread-hi.svg' );
+}
+
+.tux-message-filter-result {
+ color: #222;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ border-bottom: 1px solid #c9c9c9;
+ background: #fff5aa;
+ padding: 5px;
+
+ & button {
+ background: inherit;
+ }
+}
+
+.tux-empty-list {
+ padding: 20px;
+}
+
+.tux-empty-list-header {
+ font-size: 25px;
+ padding: 5px 0;
+}
+
+.tux-empty-list-guide {
+ color: #54595d;
+ font-size: 15px;
+ padding: 5px 0;
+}
+
+.tux-empty-list-actions {
+ font-size: 15px;
+ padding: 8px 0;
+}
+
+.tux-empty-list-actions a {
+ cursor: pointer;
+ margin: 0 10px;
+}
diff --git a/Translate/resources/css/ext.translate.navitoggle.css b/Translate/resources/css/ext.translate.navitoggle.css
new file mode 100644
index 00000000..afe45f4b
--- /dev/null
+++ b/Translate/resources/css/ext.translate.navitoggle.css
@@ -0,0 +1,56 @@
+/**
+ * Introduces a toggle icon than can be used to hide navigation menu in vector
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+.tux-navitoggle {
+ background: no-repeat scroll right center transparent;
+ /* @embed */
+ background-image: linear-gradient( transparent, transparent ), url( ../images/expand-rtl.svg );
+ height: 40px;
+ width: 20px;
+ position: absolute;
+ top: 0;
+ z-index: 10000000004;
+ cursor: pointer;
+}
+
+.tux-navi-collapsed .tux-navitoggle {
+ background: no-repeat scroll right center transparent;
+ /* @embed */
+ background-image: linear-gradient( transparent, transparent ), url( ../images/expand-ltr.svg );
+ left: 40px !important;
+}
+
+.tux-navi-collapsed #mw-panel {
+ display: none;
+}
+
+.tux-navi-collapsed #content {
+ margin-left: 0;
+}
+
+.tux-navi-collapsed #left-navigation {
+ left: 0;
+}
+
+.tux-navi-minilogo {
+ display: none;
+ position: absolute;
+ top: 0;
+ left: 0;
+}
+
+.tux-navi-collapsed .tux-navi-minilogo {
+ display: block;
+}
+
+.tux-navi-minilogo a {
+ width: 40px;
+ height: 40px;
+ background-size: 30px;
+ display: block;
+ background-repeat: no-repeat;
+ background-position: center center;
+}
diff --git a/Translate/resources/css/ext.translate.pagemode.css b/Translate/resources/css/ext.translate.pagemode.css
new file mode 100644
index 00000000..d1f1d274
--- /dev/null
+++ b/Translate/resources/css/ext.translate.pagemode.css
@@ -0,0 +1,110 @@
+.ext-translate-container .tux-messagelist .tux-message-pagemode {
+ min-height: 50px;
+ margin: 0 auto;
+ vertical-align: middle;
+ background: #f8f8f8;
+}
+
+.ext-translate-container .tux-messagelist .tux-message-pagemode .tux-message-item-compact {
+ padding: 35px 0;
+ line-height: 50px;
+ overflow: hidden;
+ margin-right: auto;
+ margin-left: auto;
+ vertical-align: middle;
+ border-bottom: 1px solid #f0f0f0;
+ border-left: 1px solid #ddd;
+ border-right: 1px solid #ddd;
+ background: #fff;
+ max-width: 900px;
+}
+
+.ext-translate-container .tux-messagelist .tux-message-pagemode .tux-message-item-compact:hover {
+ background: #fcfcfc;
+}
+
+.ext-translate-container .tux-messagelist .tux-message-pagemode:first-child .tux-message-item-compact {
+ margin-top: 10px;
+ padding-top: 60px;
+ border-top: 1px solid #ddd;
+}
+
+.ext-translate-container .tux-messagelist .tux-message-pagemode:last-child .tux-message-item-compact {
+ margin-bottom: 10px;
+ padding-bottom: 60px;
+ border-bottom: 1px solid #ddd;
+}
+
+.tux-pagemode-source,
+.tux-pagemode-translation {
+ word-wrap: break-word;
+}
+
+.tux-message-pagemode.open .tux-pagemode-status,
+.tux-message-pagemode.open .tux-pagemode-source,
+.tux-message-pagemode.open .tux-pagemode-translation,
+.tux-message-pagemode.open .tux-pagemode-action-block {
+ display: none;
+}
+
+.tux-messagelist .tux-message-pagemode .tux-pagemode-source {
+ color: #54595d;
+ font-size: 16px;
+ line-height: 1.5em;
+ padding-right: 25px;
+ padding-left: 25px;
+}
+
+.tux-messagelist .tux-message-pagemode .tux-pagemode-translation {
+ color: #222;
+ font-size: 16px;
+ line-height: 1.5em;
+ padding-left: 20px;
+}
+
+.tux-pagemode-action-block {
+ top: -5px;
+ right: -5px;
+}
+
+.tux-pagemode-status {
+ top: -10px;
+ height: 40px;
+}
+
+.tux-pagemode-status.fuzzy {
+ background: left center no-repeat;
+ /* @embed */
+ background-image: linear-gradient( transparent, transparent ), url( ../images/outdated-ltr.svg );
+}
+
+.tux-pagemode-status.untranslated {
+ background: left center no-repeat;
+ /* @embed */
+ background-image: linear-gradient( transparent, transparent ), url( ../images/translate-ltr.svg );
+}
+
+.tux-pagemode-action {
+ background: right top no-repeat;
+ /* @embed */
+ background-image: linear-gradient( transparent, transparent ), url( ../images/check-sprite-ltr.svg );
+ height: 31px;
+ cursor: pointer;
+}
+
+.tux-pagemode-action:hover {
+ background-position: right -31px;
+}
+
+.tux-pagemode-edit {
+ background-image: /* @embed */ linear-gradient( transparent, transparent ), url( ../images/edit-mark.svg );
+ background-repeat: no-repeat;
+ background-position: right center;
+ height: 40px;
+ cursor: pointer;
+ visibility: hidden;
+}
+
+.tux-message-pagemode:hover .tux-pagemode-edit {
+ visibility: visible;
+}
diff --git a/Translate/resources/css/ext.translate.proofread.css b/Translate/resources/css/ext.translate.proofread.css
new file mode 100644
index 00000000..69eddee1
--- /dev/null
+++ b/Translate/resources/css/ext.translate.proofread.css
@@ -0,0 +1,179 @@
+.ext-translate-container .tux-messagelist .tux-message-proofread {
+ min-height: 50px;
+ margin: 0 auto;
+ vertical-align: middle;
+ background: #f8f8f8;
+}
+
+.ext-translate-container .tux-messagelist .tux-message-proofread .tux-message-item-compact {
+ padding: 30px 0;
+ overflow: hidden;
+ margin-right: auto;
+ margin-left: auto;
+ vertical-align: middle;
+ border-bottom: 1px solid #f0f0f0;
+ border-left: 1px solid #ddd;
+ border-right: 1px solid #ddd;
+ background: #fff;
+ max-width: 900px;
+}
+
+.ext-translate-container .tux-messagelist .tux-message-proofread .tux-message-item-compact:hover {
+ background: #fcfcfc;
+}
+
+.ext-translate-container .tux-messagelist .tux-message-proofread:first-child .tux-message-item-compact {
+ margin-top: 10px;
+ padding-top: 60px;
+ border-top: 1px solid #ddd;
+}
+
+.ext-translate-container .tux-messagelist .tux-message-proofread:last-child .tux-message-item-compact {
+ margin-bottom: 10px;
+ padding-bottom: 60px;
+ border-bottom: 1px solid #ddd;
+}
+
+.tux-proofread-source,
+.tux-proofread-translation {
+ word-wrap: break-word;
+ white-space: pre-wrap;
+}
+
+.tux-message-proofread.open .tux-proofread-status,
+.tux-message-proofread.open .tux-proofread-source,
+.tux-message-proofread.open .tux-proofread-translation,
+.tux-message-proofread.open .tux-proofread-action-block {
+ display: none;
+}
+
+.tux-messagelist .tux-message-proofread .tux-proofread-source {
+ color: #54595d;
+ font-size: 16px;
+ line-height: 1.5em;
+ padding-right: 25px;
+ padding-left: 25px;
+}
+
+.tux-messagelist .tux-message-proofread .tux-proofread-translation {
+ color: #222;
+ font-size: 16px;
+ line-height: 1.5em;
+ padding-left: 20px;
+}
+
+.tux-proofread-action-block {
+ top: -5px;
+ right: -5px;
+}
+
+.ext-translate-container .tux-messagelist .tux-message-proofread.own-translation,
+.ext-translate-container .tux-messagelist .tux-message-proofread.own-translation:hover {
+ background: #fbfbfb;
+}
+
+.tux-messagelist.tux-hide-own .tux-message-proofread.own-translation {
+ display: none;
+}
+
+.translated-by-self {
+ color: #72777d;
+ text-align: right;
+ font-size: 12px;
+ margin-right: 5px;
+ margin-left: auto;
+ width: 18px;
+ height: 18px; /* Icon height + 3px */
+ background: top right no-repeat;
+ /* @embed */
+ background-image: linear-gradient( transparent, transparent ), url( ../images/user-small.svg );
+}
+
+.tux-proofread-status {
+ top: -10px;
+}
+
+.tux-proofread-status.fuzzy {
+ background: left center no-repeat;
+ /* @embed */
+ background-image: linear-gradient( transparent, transparent ), url( ../images/outdated-ltr.svg );
+ height: 40px;
+}
+
+.tux-proofread-status.untranslated {
+ background: left center no-repeat;
+ /* @embed */
+ background-image: linear-gradient( transparent, transparent ), url( ../images/translate-ltr.svg );
+ height: 40px;
+}
+
+.tux-proofread-action {
+ background-position: right top;
+ background-repeat: no-repeat;
+ background-image: /* @embed */ linear-gradient( transparent, transparent ), url( ../images/check-sprite-ltr.svg );
+ /* There is 1px white row between each icon */
+ height: 30px;
+ cursor: pointer;
+}
+
+.tux-proofread-action:hover {
+ background-position: right -31px;
+}
+
+.tux-proofread-action.accepted {
+ cursor: default;
+ background-position: right -62px;
+}
+
+.proofread-by-others .tux-proofread-action {
+ background-position: right -124px;
+}
+
+.proofread-by-others .tux-proofread-action:hover {
+ background-position: right -155px;
+}
+
+.proofread-by-others .tux-proofread-action.accepted {
+ cursor: default;
+ background-position: right -186px;
+}
+
+.tux-proofread-edit {
+ background-image: /* @embed */ linear-gradient( transparent, transparent ), url( ../images/edit-mark.svg );
+ background-repeat: no-repeat;
+ background-position: right center;
+ height: 50px;
+ cursor: pointer;
+ visibility: hidden;
+ text-align: right;
+}
+
+.tux-message-proofread:hover .tux-proofread-edit {
+ visibility: visible;
+}
+
+.tux-proofread-edit-label {
+ color: #72777d;
+ position: relative;
+ display: inline-block;
+ font-size: 13px;
+ padding-top: 30px;
+ padding-right: 2px;
+}
+
+.tux-proofread-count {
+ color: #72777d;
+ font-size: 15px;
+ padding-right: 5px;
+ text-align: right;
+}
+
+.tux-proofread-count:before {
+ content: '';
+ display: inline-block;
+ background: left bottom no-repeat;
+ /* @embed */
+ background-image: linear-gradient( transparent, transparent ), url( ../images/check-small.svg );
+ height: 12px;
+ width: 14px;
+}
diff --git a/Translate/resources/css/ext.translate.quickedit.css b/Translate/resources/css/ext.translate.quickedit.css
new file mode 100644
index 00000000..ee9ad228
--- /dev/null
+++ b/Translate/resources/css/ext.translate.quickedit.css
@@ -0,0 +1,45 @@
+.mw-sp-translate-edit-fields a {
+ color: #00f;
+}
+
+.mw-sp-translate-edit-fields fieldset {
+ line-height: normal;
+ margin: 0;
+ border: 1px solid #dbdbdb;
+}
+
+.mw-sp-translate-edit-fields legend {
+ background-color: transparent;
+}
+
+/* Align the adder according to the target language */
+/* @noflip */
+.mw-translate-adder-ltr {
+ float: left;
+ padding-right: 1px;
+}
+
+/* @noflip */
+.mw-translate-adder-rtl {
+ float: right;
+ padding-left: 1px;
+}
+
+.mw-translate-edit-deftext {
+ /*
+ * Some browsers will render the monospace text too small, namely Firefox, Chrome and Safari.
+ * Specifying any valid, second value will trigger correct behavior without forcing a different font.
+ * See docs/uidesign/monospace.html of MediaWiki core source code.
+ * Also see T176636
+ */
+ font-family: monospace, monospace;
+}
+
+/* Blue tints for translate fieldsets */
+.mw-sp-translate-message-documentation {
+ background-color: #ebebeb;
+}
+
+.mw-sp-translate-edit-definition {
+ background-color: #eaf3fc;
+}
diff --git a/Translate/resources/css/ext.translate.special.aggregategroups.css b/Translate/resources/css/ext.translate.special.aggregategroups.css
new file mode 100644
index 00000000..3a6fa509
--- /dev/null
+++ b/Translate/resources/css/ext.translate.special.aggregategroups.css
@@ -0,0 +1,103 @@
+span.tp-aggregate-remove-ag-button,
+span.tp-aggregate-remove-button {
+ background: no-repeat scroll left center transparent;
+ background-image: /* @embed */ linear-gradient( transparent, transparent ), url( ../images/remove.svg );
+ padding: 10px;
+ cursor: pointer;
+}
+
+span.tp-aggregate-edit-ag-button {
+ background: no-repeat scroll left center transparent;
+ background-image: /* @embed */ linear-gradient( transparent, transparent ), url( ../images/action-edit.svg );
+ background-size: 18px 18px;
+ padding: 10px;
+ cursor: pointer;
+}
+
+a.tpt-add-new-group {
+ background: no-repeat scroll left center transparent;
+ background-image: /* @embed */ linear-gradient( transparent, transparent ), url( ../images/add.svg );
+ padding-left: 20px;
+ display: inline-block;
+ margin-bottom: 1em;
+}
+
+div.tpt-add-new-group {
+ margin-bottom: 1em;
+}
+
+h2.tp-name {
+ /** Allows the outline for the toggle icon to be visible **/
+ overflow: visible;
+}
+
+span.tp-toggle-group {
+ font-size: 16px;
+ margin-right: 1em;
+ margin-left: 0.5em;
+}
+
+.tp-toggle-group-icon {
+ background: no-repeat scroll center center transparent;
+ background-image: /* @embed */ linear-gradient( transparent, transparent ), url( ../images/expand.svg );
+ padding: 14px 18px;
+ margin: 0 2px;
+ /** Improve icon alignment with text **/
+ margin-top: -4px;
+ border: 0;
+ background-size: 20px;
+ vertical-align: middle;
+ cursor: pointer;
+}
+
+.tp-toggle-group-icon:focus {
+ outline: 1px dotted;
+}
+
+.mw-tpa-group.mw-tpa-group-open .tp-toggle-group-icon {
+ background-image: /* @embed */ linear-gradient( transparent, transparent ), url( ../images/collapse.svg );
+}
+
+.mw-tpa-group .tp-sub-groups {
+ display: none;
+}
+
+.mw-tpa-group.mw-tpa-group-open .tp-sub-groups {
+ display: block;
+}
+
+input.tp-aggregategroup-add-name {
+ width: 250px;
+}
+
+input.tp-aggregategroup-add-description {
+ width: 500px;
+}
+
+div.hidden {
+ display: none;
+}
+
+.tp-edit-group {
+ margin-top: 1.5em;
+}
+
+.tp-aggregategroup-edit-name {
+ width: 250px;
+}
+
+.tp-aggregategroup-edit-description {
+ width: 500px;
+}
+
+.client-nojs .tpt-add-new-group,
+.client-nojs .tp-aggregate-edit-ag-button,
+.client-nojs .tp-aggregate-remove-button,
+.client-nojs .tp-aggregate-remove-ag-button,
+.client-nojs .mw-tpa-group input {
+ display: none;
+}
+
+.client-js .tux-nojs {
+ display: none;
+}
diff --git a/Translate/resources/css/ext.translate.special.managegroups.css b/Translate/resources/css/ext.translate.special.managegroups.css
new file mode 100644
index 00000000..ca3ecec3
--- /dev/null
+++ b/Translate/resources/css/ext.translate.special.managegroups.css
@@ -0,0 +1,165 @@
+.mw-translate-smg-change {
+ padding-bottom: 1em;
+ margin-bottom: 2em;
+ position: relative;
+}
+
+.mw-translate-smg-change label {
+ padding: 0;
+ margin: 0;
+ margin-right: 1.1em;
+ font-size: 0.95em;
+}
+
+.mw-translate-smg-change .diff-title td {
+ padding: 0.75em 0.5em;
+}
+
+.mw-translate-smg-change.smg-change-addition td.diff-ntitle,
+.mw-translate-smg-change.smg-change-rename td.diff-ntitle {
+ padding-right: 32px;
+}
+
+.mw-translate-smg-change input[ type='radio' ] {
+ margin: 0 2px;
+ margin-top: -1px;
+ vertical-align: middle;
+}
+
+.mw-translate-smg-change .smg-rename-actions {
+ border: 0;
+ background: transparent url( ../images/ellipsis.svg ) center center no-repeat;
+ padding: 0;
+ width: 32px;
+ min-height: 32px;
+ cursor: pointer;
+ position: absolute;
+ top: 5px;
+ right: 0;
+}
+
+/** Added to override hover style added by Timeless */
+.mw-translate-smg-change .smg-rename-actions:hover {
+ background-color: transparent;
+}
+
+.mw-translate-smg-change .smg-rename-actions.loading {
+ background: transparent url( ../images/loading.gif ) center center no-repeat;
+ background-size: 90%;
+}
+
+.mw-translate-smg-change .smg-change-import-options {
+ padding: 0.75em 0.5em 0 0.5em;
+}
+
+.oo-ui-buttonElement.mw-translate-smg-submit {
+ display: block;
+}
+
+.oo-ui-buttonElement.mw-translate-smg-submit button {
+ font-size: 3em;
+ margin: auto;
+ width: 80%;
+ display: block;
+ word-wrap: break-word;
+ white-space: pre-wrap;
+}
+
+.mw-translate-smg-change .diff-lineno {
+ display: none;
+}
+
+.mw-translate-smg-header td {
+ font-size: 200%;
+ font-weight: bold;
+}
+
+.mw-translate-hide {
+ display: none;
+}
+
+.mw-message-box-warning.mw-translate-smg-submitted,
+/** MW < 1.38 **/
+.warningbox.mw-translate-smg-submitted {
+ margin-top: 2.5em;
+}
+
+.mw-translate-smg-change .mw-translate-smg-notice-important {
+ background: #fbb;
+ border: 1px solid #f58d8d;
+}
+
+/**************************
+ * Rename dropdown styles
+ **************************/
+.smg-rename-dropdown-menu {
+ list-style: none;
+ position: absolute;
+ margin: 0;
+ border: 1px solid #c9c9c9;
+ background: #fff;
+ box-shadow: 0 3px 3px -3px rgba( 0, 0, 0, 0.5 );
+ border-radius: 3px;
+ display: none;
+}
+
+.smg-rename-dropdown-menu.show {
+ display: block;
+}
+
+/* Additional class to override CSS from skins */
+.smg-rename-dropdown-menu.smg-rename-dropdown-menu button {
+ display: block;
+ background: none;
+ border: 0;
+ padding: 8px 10px;
+ width: 100%;
+ text-align: left;
+ white-space: nowrap;
+ color: #222;
+ font-size: 14px;
+ font-weight: normal;
+}
+
+.smg-rename-dropdown-menu.smg-rename-dropdown-menu button:hover {
+ cursor: pointer;
+ background-color: #f0f0f0;
+ color: #222;
+}
+
+.smg-group-sync-cache-info {
+ padding: 0.5em 1em;
+ background: #f0f0f0;
+ border-radius: 3px;
+ margin-bottom: 1em;
+}
+
+.smg-group-sync-cache-info__help {
+ position: absolute;
+ right: 1em;
+}
+
+.smg-group-sync-cache-info__group-errors {
+ margin-bottom: 0.5em;
+ background-color: #e0e0e0;
+ padding: 0.5em 1em;
+ border-radius: 3px;
+}
+
+.smg-group-sync-cache-info__message-error dt {
+ float: left;
+ text-align: right;
+ margin-right: 5px;
+}
+
+.client-nojs .smg-group-sync-cache-info__resolve-action {
+ pointer-events: none;
+ text-decoration: line-through;
+ color: inherit;
+}
+
+.smg-group-sync-cache-info__sync-actions .loading {
+ pointer-events: none;
+ color: inherit;
+ text-decoration: none;
+}
diff --git a/Translate/resources/css/ext.translate.special.managetranslatorsandbox.css b/Translate/resources/css/ext.translate.special.managetranslatorsandbox.css
new file mode 100644
index 00000000..caa8c673
--- /dev/null
+++ b/Translate/resources/css/ext.translate.special.managetranslatorsandbox.css
@@ -0,0 +1,290 @@
+/**
+ * CSS for special page.
+ * @author Niklas Laxström
+ * @author Sucheta Ghoshal
+ * @author Pau Giner
+ * @license GPL-2.0-or-later
+ */
+
+/* Hide the page title to give more space for the content */
+#firstHeading {
+ display: none;
+}
+
+/* Panes */
+.filter.pane,
+.tsb-container .search.pane {
+ border-bottom: 1px solid #575656;
+ height: 2em;
+ line-height: 50px;
+ font-size: 24px;
+}
+
+.tsb-container.grid .search.pane {
+ background: no-repeat scroll left top transparent;
+ background-image: /* @embed */ linear-gradient( transparent, transparent ), url( ../images/search.svg );
+ background-size: 22px;
+ padding-left: 30px;
+ background-position-y: 10px;
+}
+
+.tsb-container.grid .search.pane input[ type='search' ] {
+ box-sizing: border-box;
+ margin-top: 7px;
+}
+
+.request-filter-box {
+ font-size: 14px;
+ height: 28px;
+ width: 100%;
+ border: 1px solid #c9c9c9;
+ padding: 0 5px;
+}
+
+.tsb-body {
+ border: 1px solid #c9c9c9;
+ border-top: 0;
+}
+
+.requests.pane,
+.details.pane {
+ border-top: 1px solid #d3d2d2;
+}
+
+.requests.pane .requests-list,
+.details.pane {
+ overflow: auto;
+}
+
+.grid .details.pane {
+ border-left: 1px solid #ddd;
+ left: -1px;
+ padding: 5px 20px 10px 20px;
+}
+
+/* Requests pane */
+.grid .requests.pane,
+.grid .requests.pane .request,
+.grid .requests.pane .request-header {
+ margin: 0;
+ padding: 0;
+}
+
+.request {
+ border-right: 1px solid #c9c8c8;
+ border-bottom: 1px solid #c9c8c8;
+ cursor: pointer;
+}
+
+.request:last-child {
+ border-bottom: 0;
+}
+
+.request:hover {
+ background-color: #fafafa;
+}
+
+.request.selected {
+ background-color: #f0f0f0;
+}
+
+.grid .request .amount {
+ height: 100%;
+ font-size: 3em;
+ color: #96989a;
+ background-color: #f7f8f8;
+ padding: 20px 5px;
+ text-align: center;
+}
+
+.request .tsb-header,
+.request .request-selector {
+ height: 30px;
+ line-height: 30px;
+ font-size: 16px;
+ white-space: nowrap;
+}
+
+.request .email,
+.request .signup-age {
+ height: 20px;
+ line-height: 20px;
+ font-size: 12px;
+ color: #6c6d70;
+ white-space: nowrap;
+}
+
+.request .tsb-header,
+.request .username,
+.request .email {
+ padding-left: 10px;
+ text-overflow: ellipsis;
+}
+
+.request .signup-age {
+ text-align: center;
+ overflow: hidden;
+}
+
+.grid .request .request-info,
+.grid .request .approval {
+ padding-top: 5px;
+}
+
+/* Details pane */
+
+.tsb-details-no-translations {
+ color: #72777d;
+}
+
+.signup-comment-label {
+ color: #e85355;
+ font-size: 14px;
+}
+
+.signup-comment-text {
+ color: #222;
+ font-size: 16px;
+ line-height: 1.5em;
+ padding: 5px 0;
+}
+
+.details.pane > .row {
+ padding-top: 15px;
+}
+
+.details.pane .tsb-header {
+ font-size: 30px;
+ font-weight: lighter;
+}
+
+.details.pane .reminder-email {
+ color: #6c6d70;
+ font-size: 14px;
+ padding-top: 15px;
+}
+
+.details.pane .reminder-email .send-reminder {
+ padding-left: 1em;
+ padding-right: 1em;
+}
+
+.details.pane .languages {
+ color: #6c6d70;
+ font-size: 16px;
+ font-weight: lighter;
+ padding-top: 10px;
+}
+
+.details.pane .languages span {
+ margin-right: 2em;
+}
+
+.details.pane .actions {
+ font-size: 22px;
+}
+
+.actions button {
+ margin-right: 1.5em;
+}
+
+.request-header {
+ color: #72777d;
+ border-right: 1px solid #c9c9c9;
+ border-bottom: 1px solid #aaa;
+ line-height: 40px;
+ background-color: #f8f8f8;
+}
+
+.request-footer {
+ color: #72777d;
+ border-right: 1px solid #c9c9c9;
+ border-top: 1px solid #aaa;
+ line-height: 40px;
+ padding: 0 5px;
+ background-color: #f8f8f8;
+}
+
+.request-footer .selected-counter,
+.request-footer .older-requests-indicator {
+ unicode-bidi: -moz-isolate;
+ unicode-bidi: -webkit-isolate;
+ unicode-bidi: isolate;
+}
+
+.clear-language-selector,
+.language-selector {
+ margin: 10px 0;
+ border-radius: 3px;
+ background: #f8f8f8;
+ border: 1px solid #ccc;
+ cursor: pointer;
+ font-size: 1em;
+ display: block;
+ float: left;
+}
+
+.clear-language-selector {
+ border-radius: 0 3px 3px 0;
+ border-left: 0;
+}
+
+.language-selector.selected {
+ cursor: default;
+ border-radius: 3px 0 0 3px;
+ max-width: 80%;
+ max-height: 40px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.language-selector:hover {
+ border-color: #aaa;
+}
+
+.language-selector.unselected:after {
+ content: '';
+ border-top: 4px solid #aaa;
+ border-left: 4px solid transparent;
+ border-right: 4px solid transparent;
+ display: inline-block;
+ vertical-align: middle;
+ margin-left: 0.5em;
+}
+
+textarea.body {
+ height: 300px;
+}
+
+.translations .row {
+ border-bottom: 1px solid #c9c8c8;
+ padding: 10px;
+ font-size: 16px;
+ word-wrap: break-word;
+}
+
+.translations .title {
+ font-size: 16px;
+ background-color: #f7f8f8;
+ font-weight: bold;
+}
+
+.translations .info {
+ font-size: 12px;
+ color: #6c6d70;
+ /*
+ * Align autonyms consistently.
+ * The direction is set according to the language on the frontend
+ * and the alignment is flipped according to the user language.
+ */
+ text-align: left;
+}
+
+.client-nojs .grid {
+ display: none;
+}
+
+.client-js .tux-nojs {
+ display: none;
+}
diff --git a/Translate/resources/css/ext.translate.special.pagemigration.css b/Translate/resources/css/ext.translate.special.pagemigration.css
new file mode 100644
index 00000000..ced60095
--- /dev/null
+++ b/Translate/resources/css/ext.translate.special.pagemigration.css
@@ -0,0 +1,72 @@
+.mw-tpm-sp-unit__source,
+.mw-tpm-sp-unit__target {
+ overflow-y: auto;
+ height: 150px;
+ border: 2px solid #808080;
+}
+
+.mw-tpm-sp-form #title {
+ width: 35%;
+}
+
+.mw-tpm-sp-unit:last-child .mw-tpm-sp-action--swap,
+.mw-tpm-sp-unit:last-child .mw-tpm-sp-action--add {
+ display: none;
+}
+
+.mw-tpm-sp-unit {
+ padding-bottom: 10px;
+}
+
+.mw-tpm-sp-container .mw-tpm-sp-unit textarea {
+ padding: 10px;
+}
+
+.mw-tpm-sp-unit__source,
+.mw-tpm-sp-unit__target,
+.mw-tpm-sp-unit__actions {
+ height: 150px;
+}
+
+.mw-tpm-sp-action {
+ width: 25px;
+ height: 150px;
+ cursor: pointer;
+ display: inline-block;
+ margin-left: 20px;
+ background-position: center;
+ background-repeat: no-repeat;
+ background-size: 25px 25px;
+}
+
+.mw-tpm-sp-action--delete {
+ background-image: linear-gradient( transparent, transparent ), url( ../images/trash_darkgray.svg );
+}
+
+.mw-tpm-sp-action--swap {
+ background-image: linear-gradient( transparent, transparent ), url( ../images/switch.svg );
+}
+
+.mw-tpm-sp-action--add {
+ background-image: linear-gradient( transparent, transparent ), url( ../images/plus_darkgray.svg );
+}
+
+.mw-tpm-sp-error__message {
+ font-size: 0.9em;
+ word-wrap: break-word;
+ color: #c00;
+ border: 1px solid #fac5c5;
+ background-color: #fae3e3;
+}
+
+.mw-tpm-sp-instructions {
+ margin: 0.7em 0;
+}
+
+.client-nojs .mw-tpm-sp-container {
+ display: none;
+}
+
+.client-js .tux-nojs {
+ display: none;
+}
diff --git a/Translate/resources/css/ext.translate.special.pagepreparation.css b/Translate/resources/css/ext.translate.special.pagepreparation.css
new file mode 100644
index 00000000..35de8fd5
--- /dev/null
+++ b/Translate/resources/css/ext.translate.special.pagepreparation.css
@@ -0,0 +1,11 @@
+.mw-tpp-sp-form #page {
+ width: 35%;
+}
+
+.client-nojs .mw-tpp-sp-container {
+ display: none;
+}
+
+.client-js .tux-nojs {
+ display: none;
+}
diff --git a/Translate/resources/css/ext.translate.special.pagetranslation.css b/Translate/resources/css/ext.translate.special.pagetranslation.css
new file mode 100644
index 00000000..910f6533
--- /dev/null
+++ b/Translate/resources/css/ext.translate.special.pagetranslation.css
@@ -0,0 +1,26 @@
+.mw-tpt-sp-section {
+ padding-bottom: 3ex;
+}
+
+.mw-tpt-m-vertical {
+ margin: 0.5em 0 !important;
+}
+
+.mw-tpt-sp-section-type-old {
+ opacity: 0.65;
+}
+
+.mw-tpt-sp-legend {
+ font-weight: bold;
+ font-size: 110%;
+}
+
+.mw-tpt-sp-content {
+ font-size: small;
+ padding-left: 2em;
+ padding-right: 2em;
+}
+
+.client-nojs .mw-tpt-sp-markform .mw-widgets-pendingTextInputWidget {
+ display: none;
+}
diff --git a/Translate/resources/css/ext.translate.special.searchtranslations.css b/Translate/resources/css/ext.translate.special.searchtranslations.css
new file mode 100644
index 00000000..dd4b26ff
--- /dev/null
+++ b/Translate/resources/css/ext.translate.special.searchtranslations.css
@@ -0,0 +1,167 @@
+/**
+ * @author Niklas Laxström
+ * @author Pau Giner
+ * @since 2013-01-10
+ */
+
+.tux-searchpage .tux-selectedbox .facet-item {
+ background-color: #ededed;
+ margin-right: 5px;
+}
+
+.tux-searchpage .tux-searchboxform .tux-selectedbox,
+.tux-searchpage .searchcontent .facets {
+ padding: 0 15px 0 5px;
+}
+
+/* Facets */
+.tux-searchpage .facet {
+ color: #222;
+ font-size: 24px;
+ padding: 20px 0 10px 0;
+}
+
+.tux-searchpage .facet-item {
+ font-size: 16px;
+ padding: 4px 5px;
+}
+
+.tux-searchpage .facet-item:hover {
+ background: #f8f8f8;
+ cursor: pointer;
+}
+
+.grid.tux-searchpage .facet-item:first-child {
+ margin-top: 10px;
+}
+
+.tux-searchpage .facet-item .facet-count {
+ color: #aaa;
+ float: right;
+ margin-right: 5%;
+}
+
+.tux-searchpage .facet-level-0 {
+ font-size: 16px;
+}
+
+.tux-searchpage .facet-level-1 {
+ font-size: 14px;
+}
+
+.tux-searchpage .facet-level-2 {
+ font-size: 12px;
+}
+
+.tux-searchpage .facet-level-3 {
+ font-size: 10px;
+}
+
+.tux-searchpage .facet-item .facet-name.selected {
+ font-weight: bold;
+}
+
+.tux-searchpage .facet-item a:visited,
+.tux-searchpage .facet-item a:link {
+ color: #0645ad;
+}
+
+/* Results */
+.tux-searchpage .count {
+ color: #54595d;
+ font-size: 16px;
+ padding-bottom: 10px;
+}
+
+.tux-searchpage .searchcontent .results {
+ color: #222;
+ padding-left: 10px;
+}
+
+.tux-searchpage .results .tux-text {
+ text-align: left;
+ font-size: 16px;
+ padding-top: 20px;
+}
+
+.tux-searchpage .results .tux-title {
+ text-align: left;
+ color: #54595d;
+}
+
+/* Pagination links */
+.tux-searchpage .results .tux-pagination-line {
+ color: #eee;
+ font-size: 1px;
+}
+
+.tux-searchpage .results .tux-pagination-links {
+ font-size: 20px;
+ padding-top: 20px;
+ text-align: center;
+}
+
+/* Search area */
+.tux-searchpage .searchinput {
+ padding: 10px 0;
+}
+
+.tux-searchpage .searchinput .searchinputbox {
+ width: 60%;
+ display: inline-block;
+ margin-right: 5px;
+}
+
+.tux-search-operators {
+ margin: 5px 0;
+}
+
+.mw-special-SearchTranslations h1.firstHeading {
+ display: none;
+}
+
+.translate-search-more-groups,
+.translate-search-more-languages {
+ background-color: #f0f0f0;
+ font-size: 16px;
+ cursor: pointer;
+ padding: 0 6px;
+ border-radius: 2px;
+ border: 1px solid #eee;
+}
+
+.translate-search-more-groups:hover,
+.translate-search-more-languages:hover {
+ border: 1px solid #ccc;
+ text-decoration: none;
+}
+
+.translate-search-more-groups-info,
+.translate-search-more-languages-info {
+ color: #72777d;
+ font-size: 14px;
+ padding: 0 8px;
+}
+
+/* Override tabs */
+.tux-searchpage .tux-messagetable-header .seven {
+ width: 100%;
+}
+
+.tux-searchpage .tux-message-selector .more ul {
+ width: auto;
+}
+
+.tux-searchpage .tux-message-selector .more ul a {
+ white-space: pre-wrap;
+}
+
+.tux-searchpage .mw-message-box-success,
+/** MW < 1.38 **/
+.tux-searchpage .successbox {
+ margin-left: 25%;
+}
+
+.tux-search-highlight {
+ background-color: #c9c9c9;
+}
diff --git a/Translate/resources/css/ext.translate.special.supportedlanguages.css b/Translate/resources/css/ext.translate.special.supportedlanguages.css
new file mode 100644
index 00000000..97fe4826
--- /dev/null
+++ b/Translate/resources/css/ext.translate.special.supportedlanguages.css
@@ -0,0 +1,26 @@
+.mw-translate-spsl-translators {
+ text-align: justify;
+ line-height: 200%;
+}
+
+.mw-translate-spsl-translators a {
+ unicode-bidi: isolate;
+}
+
+.mw-special-SupportedLanguages h2 {
+ font-weight: bold;
+ margin-top: 2em;
+}
+
+.mw-special-SupportedLanguages .tagcloud {
+ line-height: 200%;
+ margin: 5em;
+ text-align: center;
+}
+
+.mw-special-SupportedLanguages .tagcloud .tag {
+ white-space: nowrap;
+ margin: 0.5ex;
+ color: #000;
+ unicode-bidi: isolate;
+}
diff --git a/Translate/resources/css/ext.translate.special.translate.css b/Translate/resources/css/ext.translate.special.translate.css
new file mode 100644
index 00000000..c1a67726
--- /dev/null
+++ b/Translate/resources/css/ext.translate.special.translate.css
@@ -0,0 +1,190 @@
+/*
+ * Breadcrumb for message group selector
+ */
+.tux-breadcrumb {
+ color: #222;
+ margin-top: 5px;
+ font-size: 14pt;
+ line-height: 1.25em;
+}
+
+/* Arrow between breadcrumb items */
+.tux-breadcrumb .grouplink + .grouplink:before {
+ border-left: 4px solid #777;
+ border-top: 4px solid transparent;
+ border-bottom: 4px solid transparent;
+ content: '';
+ display: inline-block;
+ vertical-align: middle;
+ position: relative;
+ left: -5px;
+}
+
+/* This applies to all items in the breadcrumb */
+.tux-breadcrumb .grouptitle {
+ float: left;
+ padding: 0 6px 0 0;
+}
+
+/* Not all of these are links, so name is wrong besides being too generic.
+ * This excludes the first item which says "message group". */
+.tux-breadcrumb .grouplink {
+ padding: 0 6px;
+}
+
+/* Color clickable groups to look as links */
+.tux-breadcrumb__item--aggregate {
+ cursor: pointer;
+ color: #0645ad;
+}
+
+.tux-message-selector {
+ font-size: 14px;
+ margin: 0;
+ padding: 6px 0 0 0;
+ list-style: none;
+}
+
+.tux-message-selector .column {
+ border: medium none;
+ font-size: 14pt;
+ cursor: pointer;
+ font-weight: normal;
+ line-height: 1.25em;
+ top: 1px;
+ display: block;
+ margin-bottom: 0;
+}
+
+.tux-message-selector .more {
+ padding: 0 40px 0 5px;
+}
+
+.tux-message-selector .more ul {
+ display: none;
+ cursor: default;
+ border: 1px solid #777;
+ border-top: 2px solid transparent;
+ padding: 3px 5px 10px 5px;
+ width: 300px;
+ z-index: 10;
+ background: #fff;
+ top: 100%;
+ left: -5px;
+}
+
+.tux-message-selector .more ul a {
+ display: block;
+ white-space: nowrap;
+ margin-left: 1px;
+}
+
+.tux-message-selector .more:hover ul {
+ display: block;
+ position: absolute;
+}
+
+.tux-message-selector .more:hover li {
+ float: none;
+}
+
+.tux-message-selector li.selected {
+ border-bottom: 2px solid #36c;
+}
+
+.tux-message-selector li.selected a {
+ color: #36c;
+}
+
+.tux-message-selector li a {
+ color: #54595d;
+ text-decoration: none;
+ white-space: nowrap;
+ margin-left: 1px;
+}
+
+.tux-message-selector label {
+ color: #54595d;
+ font-size: 12pt;
+ top: 1px;
+}
+
+.tux-editor-header {
+ color: #222;
+ font-size: 14px;
+ padding-bottom: 10px;
+}
+
+.tux-editor-header .description {
+ margin: 5px 0;
+}
+
+.tux-editor-header .mw-message-box,
+/** MW < 1.38 **/
+.tux-editor-header .warningbox {
+ margin-bottom: 5px;
+}
+
+.tux-editor-header .tux-group-warning.tux-group-warning {
+ padding: 0.5em 1.2em;
+}
+
+.tux-group-warning:empty {
+ display: none;
+}
+
+.tux-messagetable-header {
+ padding-top: 5px;
+ border-bottom: 1px solid #777;
+ /* @noflip */
+ box-shadow: 0 3px 3px -3px rgba( 0, 0, 0, 0.5 );
+ font-size: 14px;
+ margin: 0;
+ list-style: none;
+ transition: width 250ms;
+}
+
+@media screen and ( min-height: 600px ) {
+ .tux-messagetable-header.floating {
+ background: #fff;
+ position: fixed;
+ padding-top: 5px;
+ top: 0;
+ z-index: 200;
+ }
+
+ .tux-messagetable-header.floating + .tux-messagelist {
+ margin-top: 50px;
+ }
+}
+
+.tux-message-filter-box {
+ background: no-repeat url( ../images/search.svg ) 8px center;
+ background-size: 18px;
+ font-size: 14px;
+ /* FIXME: `box-sizing` lives here due to a shortcoming in Timeless, isn't needed in other skins
+ As soon as https://phabricator.wikimedia.org/T276896 is resolved, next line should be removed */
+ box-sizing: border-box !important;
+ height: 28px;
+ border: 1px solid #c9c9c9;
+ width: 100%;
+ padding: 0 5px 0 34px;
+ margin: 0;
+}
+
+.client-nojs .tux-messagetable-header {
+ display: none;
+}
+
+.client-js .tux-nojs {
+ display: none;
+}
+
+.mw-special-Translate #firstHeading {
+ display: none;
+}
+
+/** Vector 2022 specific fix for CSS grid layouts. See: T313671 */
+.mw-special-Translate.skin-vector-2022 .mw-content-container {
+ overflow-x: auto;
+}
diff --git a/Translate/resources/css/ext.translate.special.translations.css b/Translate/resources/css/ext.translate.special.translations.css
new file mode 100644
index 00000000..aa177067
--- /dev/null
+++ b/Translate/resources/css/ext.translate.special.translations.css
@@ -0,0 +1,7 @@
+.mw-sp-translate-table .mw-sp-translate-fuzzy {
+ background-color: #ffe2e2;
+}
+
+.mw-sp-translate-table td {
+ vertical-align: top;
+}
diff --git a/Translate/resources/css/ext.translate.statsbar.css b/Translate/resources/css/ext.translate.statsbar.css
new file mode 100644
index 00000000..32df390c
--- /dev/null
+++ b/Translate/resources/css/ext.translate.statsbar.css
@@ -0,0 +1,38 @@
+.tux-statsbar {
+ max-width: 400px;
+ padding: 0;
+ height: 5px;
+ background-color: #bbb;
+}
+
+.tux-statsbar span {
+ height: 5px;
+ float: left;
+ padding: 0;
+ transition: width 1s;
+}
+
+.tux-statsbar .tux-proofread {
+ background-color: #00af89;
+}
+
+.tux-statsbar .tux-translated {
+ background-color: #2a4b8d;
+}
+
+.tux-statsbar .tux-fuzzy {
+ background-color: #fc3;
+}
+
+.tux-statsbar .tux-untranslated {
+ display: none;
+}
+
+.tux-statsbar-info {
+ color: #72777d;
+ font-weight: normal;
+ line-height: 1.25em;
+ font-size: 10pt;
+ position: absolute;
+ padding-top: 5px;
+}
diff --git a/Translate/resources/css/ext.translate.statstable.less b/Translate/resources/css/ext.translate.statstable.less
new file mode 100644
index 00000000..e4e41540
--- /dev/null
+++ b/Translate/resources/css/ext.translate.statstable.less
@@ -0,0 +1,60 @@
+.groupexpander-all {
+ text-align: right;
+}
+
+.groupexpander {
+ float: right;
+}
+
+.statstable {
+ border-collapse: collapse;
+ border-style: hidden;
+ box-shadow: 0 1px 1px rgba( 0, 0, 0, 0.15 );
+
+ .statstable-hide {
+ display: none;
+ }
+
+ /* Small zebra rows effect */
+ > * > tr {
+ &.tux-statstable-even > td {
+ background-color: #f8f9fa;
+ }
+
+ &:hover > td {
+ // Work-around a Firefox issue:
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=688556
+ background-clip: padding-box;
+ filter: brightness( 0.95 );
+ }
+
+ > th {
+ background-color: #eaecf0;
+ border: 1px solid #fff;
+ padding: 0.5em;
+ font-weight: normal;
+ letter-spacing: 1px;
+ position: sticky;
+ top: 0;
+ z-index: 1;
+ }
+
+ > td {
+ background-color: #fff;
+ padding: 0.5em;
+ border-left: 1px solid #f8f9fa;
+ border-right: 1px solid #f8f9fa;
+ }
+
+ /* Align numbers to the right */
+ > td:nth-child( n+2 ):nth-child( -n+6 ) {
+ text-align: right;
+ padding-right: 1em;
+ }
+
+ /* De-emphasize 0% oudated */
+ > td:nth-child( 6 )[ data-sort-value='0.00000' ] {
+ color: #54595d;
+ }
+ }
+}
diff --git a/Translate/resources/css/ext.translate.tag.languages.less b/Translate/resources/css/ext.translate.tag.languages.less
new file mode 100644
index 00000000..50a8bdfc
--- /dev/null
+++ b/Translate/resources/css/ext.translate.tag.languages.less
@@ -0,0 +1,98 @@
+@import 'mediawiki.ui/variables.less';
+
+.mw-pt-languages {
+ background-color: #f8f9fa;
+ display: table;
+ border: 1px solid #a2a9b1;
+ box-sizing: border-box;
+ line-height: 1.2;
+ width: 100%;
+ clear: both;
+ overflow: auto;
+}
+
+/* Visually merge languages box border into translate box where available */
+.mw-pt-translate-header ~ .mw-parser-output .mw-pt-languages {
+ margin-top: -1px;
+}
+
+.mw-pt-languages-label {
+ background-color: #eaecf0;
+ padding: 0.5em;
+ font-weight: bold;
+ white-space: nowrap;
+}
+
+/* Increased specificity to override .mw-content-(rtl|ltr) ul { padding: 0; } */
+.mw-pt-languages .mw-pt-languages-list {
+ padding: 0.5em;
+}
+
+.mw-pt-languages-list {
+ li {
+ display: inline-block;
+ margin: 0;
+ }
+
+ li:after {
+ content: '@{msg-tpt-languages-separator}';
+ }
+
+ li:last-child:after {
+ content: none;
+ }
+}
+
+.mw-pt-languages-selected,
+.mw-pt-languages-ui {
+ font-weight: bold;
+}
+
+.mw-pt-progress {
+ padding-right: 11px;
+ background: transparent right center no-repeat;
+ background-size: 9px 9px;
+}
+
+/* Need very high specificity to override skin styles in the sidebar */
+#mw-panel .portal .body .mw-pt-progress--none a,
+.interwiki-x-pagetranslation.mw-pt-progress--none a {
+ color: #ba0000;
+}
+
+#mw-panel .portal .body .mw-pt-progress--none a:visited,
+.interwiki-x-pagetranslation.mw-pt-progress--none a:visited {
+ color: #a55858;
+}
+
+.mw-pt-progress--stub {
+ background-image: url( ../images/prog-1.png );
+}
+
+.mw-pt-progress--low {
+ background-image: url( ../images/prog-2.png );
+}
+
+.mw-pt-progress--med {
+ background-image: url( ../images/prog-3.png );
+}
+
+.mw-pt-progress--high {
+ background-image: url( ../images/prog-4.png );
+}
+
+.mw-pt-progress--complete {
+ background-image: url( ../images/prog-5.png );
+}
+
+@media screen and ( min-width: @width-breakpoint-tablet ) {
+ .mw-pt-languages-label {
+ display: table-cell;
+ /* Given `white-space: nowrap` above, label never shrinks underneath textual content. */
+ width: 1%;
+ }
+
+ .mw-pt-languages-list {
+ display: table-cell;
+ }
+}
diff --git a/Translate/resources/css/ext.translate.translationstats.graphbuilder.less b/Translate/resources/css/ext.translate.translationstats.graphbuilder.less
new file mode 100644
index 00000000..55a663c6
--- /dev/null
+++ b/Translate/resources/css/ext.translate.translationstats.graphbuilder.less
@@ -0,0 +1,91 @@
+/**
+ * Contains CSS for the error messages and loaders displayed.
+ * when loading the translation stats graph.
+ * @license GPL-2.0-or-later
+ */
+.mw-translate-translationstats-container {
+ @keyframes mw-translate-loading-spinner {
+ from {
+ transform: rotate( 0deg );
+ }
+
+ to {
+ transform: rotate( 360deg );
+ }
+ }
+ position: relative;
+ display: inline-block;
+ margin-right: 40px;
+ margin-top: 1em;
+ vertical-align: top;
+
+ .mw-translationstats-graph-container {
+ margin: auto;
+ }
+
+ .mw-translate-loading-spinner {
+ /* @embed */
+ background-image: url( ../images/loading.svg );
+ background-size: 100%;
+ animation-name: mw-translate-loading-spinner;
+ animation-duration: 1.5s;
+ animation-iteration-count: infinite;
+ animation-timing-function: linear;
+ height: 34px;
+ width: 34px;
+ backface-visibility: hidden;
+ position: absolute;
+ left: 48%;
+ top: 15%;
+ display: none;
+ }
+
+ .mw-translate-error-container {
+ width: 100%;
+ top: 1em;
+ position: absolute;
+ background-color: #fee7e6;
+ color: #b32424;
+ padding: 0.6em 1em;
+ text-align: center;
+ display: none;
+ }
+
+ &.mw-translate-loading .mw-translate-loading-spinner {
+ display: block;
+ }
+
+ &.mw-translate-has-error .mw-translate-error-container {
+ display: block;
+ }
+}
+
+.mw-translate-translationstats-table {
+ border: 0;
+ clip: rect( 1px, 1px, 1px, 1px );
+ height: 1px;
+ margin: -1px;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ width: 1px;
+
+ tbody td:not( :first-child ) {
+ text-align: right;
+ }
+
+ &:focus,
+ &:active {
+ clip: auto;
+ height: auto;
+ margin: 0;
+ overflow: visible;
+ position: static;
+ width: auto;
+ }
+}
+
+// Used on Special:TranslationStats
+.mw-translate-translationstats-hide {
+ display: none;
+}
diff --git a/Translate/resources/css/ext.translate.workflowselector.css b/Translate/resources/css/ext.translate.workflowselector.css
new file mode 100644
index 00000000..2391a9fa
--- /dev/null
+++ b/Translate/resources/css/ext.translate.workflowselector.css
@@ -0,0 +1,54 @@
+.tux-workflow-status {
+ background: #eee;
+ color: #222;
+ border: 1px solid #ddd;
+ cursor: pointer;
+ display: inline-block;
+ padding: 2px 4px;
+ margin-top: 5px;
+ min-width: 150px;
+ margin-bottom: 5px;
+}
+
+.tux-workflow-status:hover {
+ border: 1px solid #c9c9c9;
+}
+
+.tux-workflow-status-triangle {
+ float: right;
+}
+
+.tux-workflow-status-triangle:after {
+ margin: 3px;
+ border-left: 3px solid transparent;
+ border-right: 3px solid transparent;
+ border-top: 3px solid #555;
+ content: '';
+ display: inline-block;
+ vertical-align: middle;
+}
+
+ul.tux-workflow-status-selector {
+ min-width: 150px;
+ margin-top: -1px;
+}
+
+.tux-workflow-status-selector li {
+ color: #54595d;
+ display: block;
+ font-size: 14px;
+ padding: 0 2px;
+}
+
+.tux-workflow-status-selector li.changeable:hover {
+ background-color: #f0f0f0;
+ color: #222;
+ cursor: pointer;
+}
+
+.tux-workflow-status-selector li.selected {
+ background: right no-repeat;
+ /* @embed */
+ background-image: linear-gradient( transparent, transparent ), url( ../images/label-tick.svg );
+ color: #222;
+}
diff --git a/Translate/resources/images/action-edit.svg b/Translate/resources/images/action-edit.svg
new file mode 100644
index 00000000..9ea43ae7
--- /dev/null
+++ b/Translate/resources/images/action-edit.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15">
+ <path fill="#36c" d="m9.825 1.975-6.218 8.888h-.015l-.19 2.164 1.977-.92 6.217-8.89-1.772-1.244z"/>
+</svg>
diff --git a/Translate/resources/images/add.svg b/Translate/resources/images/add.svg
new file mode 100644
index 00000000..fb189f98
--- /dev/null
+++ b/Translate/resources/images/add.svg
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
+ <defs>
+ <linearGradient id="c">
+ <stop offset="0" stop-color="#8ccb81"/>
+ <stop offset="1" stop-color="#65ab55"/>
+ </linearGradient>
+ <linearGradient id="b">
+ <stop offset="0" stop-color="#dcf1d8"/>
+ <stop offset="1" stop-color="#89be78"/>
+ </linearGradient>
+ <linearGradient id="a">
+ <stop offset="0" stop-color="#34812c" stop-opacity=".957"/>
+ <stop offset="1" stop-color="#87b870" stop-opacity=".957"/>
+ </linearGradient>
+ <linearGradient id="f" x1="4.551" x2="11.459" y1="4.433" y2="11.341" gradientTransform="translate(-.038) scale(1.002)" gradientUnits="userSpaceOnUse" xlink:href="#c"/>
+ <linearGradient id="d" x1="2.583" x2="12.758" y1="2.521" y2="13.001" gradientTransform="translate(.253 .127)" gradientUnits="userSpaceOnUse" xlink:href="#b"/>
+ <linearGradient id="e" x1="12.758" x2="2.583" y1="13.001" y2="2.521" gradientTransform="translate(.253 .127)" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
+ </defs>
+ <path fill="url(#d)" fill-rule="evenodd" stroke="url(#e)" d="M14.9 7.95a6.85 6.85 0 1 1-13.7 0 6.85 6.85 0 1 1 13.7 0z"/>
+ <path fill="url(#f)" d="M13 8A5 5 0 1 1 3 8a5 5 0 1 1 10 0z"/>
+ <path fill="#fff" fill-opacity=".957" d="M7.032 5v2.042H5v1.995h2.063V11h2V9.005H11V7.01H9.032V5.017z"/>
+</svg>
diff --git a/Translate/resources/images/check-small.svg b/Translate/resources/images/check-small.svg
new file mode 100644
index 00000000..804d510c
--- /dev/null
+++ b/Translate/resources/images/check-small.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+ <path fill="#a2a9b1" d="M9.187 0 4.34 8.35l-1.897-1.4-1.49 1.984 3.037 2.248L5.1 12l.7-1.197 5.52-9.577L9.186 0z" overflow="visible"/>
+</svg>
diff --git a/Translate/resources/images/check-sprite-ltr.svg b/Translate/resources/images/check-sprite-ltr.svg
new file mode 100644
index 00000000..b80c25a4
--- /dev/null
+++ b/Translate/resources/images/check-sprite-ltr.svg
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="44" height="248">
+ <path fill="#eaecf0" d="M44 62H9.978l-9.8 15 9.8 15H44z" overflow="visible"/>
+ <path fill="#3e3e3e" d="M34.794 64.844 24.504 82.57l-4.03-2.974-3.16 4.215 6.447 4.775 2.357 1.735 1.488-2.542 11.714-20.33-4.525-2.604z" overflow="visible"/>
+ <path fill="#c8dbf3" d="M44 93H9.978l-9.8 15 9.8 15H44z" overflow="visible"/>
+ <path fill="#36c" stroke="#36c" stroke-width=".75" d="m34.794 95.844-10.29 17.727-4.03-2.973-3.16 4.215 6.447 4.774 2.357 1.735 1.488-2.54L39.32 98.45l-4.525-2.605z" overflow="visible"/>
+ <path fill="#eaecf0" d="M44 0H9.978l-9.8 15 9.8 15H44z" overflow="visible"/>
+ <path fill="#fff" stroke="#a2a9b1" stroke-width=".75" d="M34.794 2.844 24.504 20.57l-4.03-2.974-3.16 4.215 6.447 4.775 2.357 1.735 1.488-2.542L39.32 5.448l-4.525-2.604z" overflow="visible"/>
+ <path fill="#c8dbf3" d="M44 31H9.978l-9.8 15 9.8 15H44z" overflow="visible"/>
+ <path fill="#fff" stroke="#9ebfea" stroke-width=".75" d="M34.794 33.844 24.504 51.57l-4.03-2.974-3.16 4.215 6.447 4.775 2.357 1.735 1.488-2.542 11.714-20.33-4.525-2.604z" overflow="visible"/>
+ <path fill="#d1d3d4" d="m37.693 128.84-12.435 21.73-7.02-5.58 1.646-2.202 4.6 3.656 10.882-19.018"/>
+ <path fill="#9dbfdf" d="m35.366 158.428 2.327 1.41-12.435 21.734-7.02-5.58 1.648-2.202 4.6 3.657M8.188 166.5v3.438H4.844v3.03h3.343v3.407h2.938v-3.406h3.344v-3.033h-3.346V166.5H8.187z"/>
+ <path fill="#54595d" d="m18.237 206.99 1.647-2.2 4.6 3.656 10.882-19.018 2.327 1.41-12.435 21.734"/>
+ <path fill="#9dbfdf" d="m19.884 235.79 4.6 3.656 10.882-19.018 2.327 1.41-12.435 21.734-7.02-5.58"/>
+</svg>
diff --git a/Translate/resources/images/check-sprite-rtl.svg b/Translate/resources/images/check-sprite-rtl.svg
new file mode 100644
index 00000000..ed8e2173
--- /dev/null
+++ b/Translate/resources/images/check-sprite-rtl.svg
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="44" height="248">
+ <path fill="#eaecf0" d="M.177 62H34.2L44 77l-9.8 15H.176z" overflow="visible"/>
+ <path fill="#3e3e3e" d="M22.338 64.844 12.048 82.57 8.02 79.597 4.86 83.81l6.445 4.774 2.356 1.735 1.488-2.542 11.715-20.33-4.525-2.604z" overflow="visible"/>
+ <path fill="#c8dbf3" d="M.177 93H34.2l9.8 15-9.8 15H.176z" overflow="visible"/>
+ <path fill="#36c" stroke="#36c" stroke-width=".75" d="m22.338 95.844-10.29 17.727-4.028-2.974-3.16 4.215 6.445 4.774 2.356 1.735 1.488-2.542 11.715-20.33-4.525-2.604z" overflow="visible"/>
+ <path fill="#eaecf0" d="M.177 0H34.2L44 15l-9.8 15H.176z" overflow="visible"/>
+ <path fill="#fff" stroke="#aeaeae" stroke-width=".75" d="M22.338 2.844 12.048 20.57 8.02 17.597 4.86 21.81l6.445 4.774 2.356 1.735 1.488-2.542 11.715-20.33-4.525-2.604z" overflow="visible"/>
+ <path fill="#c8dbf3" d="M.177 31H34.2L44 46l-9.8 15H.176z" overflow="visible"/>
+ <path fill="#fff" stroke="#9ebfea" stroke-width=".75" d="M22.338 33.844 12.048 51.57 8.02 48.597 4.86 52.81l6.445 4.774 2.356 1.735 1.488-2.542 11.715-20.33-4.525-2.604z" overflow="visible"/>
+ <path fill="#d1d3d4" d="m22.91 127.428 2.328 1.41-12.435 21.734-7.02-5.58 1.646-2.202 4.6 3.656"/>
+ <path fill="#9dbfdf" d="m12.03 177.447 10.88-19.02 2.328 1.412-12.435 21.732-7.02-5.58 1.647-2.202m28.56-7.289v3.438h3.343v3.03H35.99v3.407h-2.938v-3.406h-3.344v-3.032h3.344V166.5h2.938z"/>
+ <path fill="#54595d" d="m12.803 212.572-7.02-5.58 1.646-2.202 4.6 3.656 10.88-19.018 2.328 1.41"/>
+ <path fill="#9dbfdf" d="m5.782 237.99 1.647-2.2 4.6 3.656 10.88-19.018 2.328 1.41-12.435 21.734"/>
+</svg>
diff --git a/Translate/resources/images/close.svg b/Translate/resources/images/close.svg
new file mode 100644
index 00000000..57c8603a
--- /dev/null
+++ b/Translate/resources/images/close.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path d="m3.636 2.222 14.142 14.142-1.414 1.414L2.222 3.636z"/>
+ <path d="M17.778 3.636 3.636 17.778l-1.414-1.414L16.364 2.222z"/>
+</svg>
diff --git a/Translate/resources/images/collapse.svg b/Translate/resources/images/collapse.svg
new file mode 100644
index 00000000..8e75ef65
--- /dev/null
+++ b/Translate/resources/images/collapse.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <title>
+ collapse
+ </title>
+ <path d="M1 13.75l1.5 1.5 7.5-7.5 7.5 7.5 1.5-1.5-9-9-9 9z"/>
+</svg> \ No newline at end of file
diff --git a/Translate/resources/images/contract-ltr.svg b/Translate/resources/images/contract-ltr.svg
new file mode 100644
index 00000000..1ed25c51
--- /dev/null
+++ b/Translate/resources/images/contract-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" viewBox="0 0 16 12">
+ <path fill="#a2a9b1" d="M10.52 1.412h4.293v9.257H10.52z" overflow="visible"/>
+ <path fill="none" stroke="#222" stroke-width="1.367" d="M.683.862h14.633V11.14H.683z" overflow="visible"/>
+ <path fill="#222" d="M7.03 2.22 3.688 5.53l-.406.44.408.405 3.25 3.25.843-.844L5.53 6.5h5.782V5.312H5.595l2.25-2.25-.813-.843z" overflow="visible"/>
+</svg>
diff --git a/Translate/resources/images/contract-rtl.svg b/Translate/resources/images/contract-rtl.svg
new file mode 100644
index 00000000..907ba98d
--- /dev/null
+++ b/Translate/resources/images/contract-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" viewBox="0 0 16 12">
+ <path fill="#a2a9b1" d="M5.48 1.412H1.186v9.257H5.48z" overflow="visible"/>
+ <path fill="none" stroke="#222" stroke-width="1.367" d="M15.316.862H.683V11.14h14.633z" overflow="visible"/>
+ <path fill="#222" d="m8.97 2.22-.845.842 2.28 2.25H4.69V6.5h5.78L8.19 8.78l.843.845 3.25-3.25.408-.406-.407-.44-3.31-3.31z" overflow="visible"/>
+</svg>
diff --git a/Translate/resources/images/edit-mark.svg b/Translate/resources/images/edit-mark.svg
new file mode 100644
index 00000000..e1710f09
--- /dev/null
+++ b/Translate/resources/images/edit-mark.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="33.389" height="22.857" viewBox="0 0 33.389 22.857">
+ <path fill="#c8ccd1" d="m21.325 2.915-9.343 13.31-.022.004-.284 3.238 2.968-1.38 9.344-13.31-2.663-1.863z"/>
+</svg>
diff --git a/Translate/resources/images/ellipsis.svg b/Translate/resources/images/ellipsis.svg
new file mode 100644
index 00000000..d2595c63
--- /dev/null
+++ b/Translate/resources/images/ellipsis.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <title>
+ ellipsis
+ </title>
+ <circle cx="10" cy="10" r="2"/>
+ <circle cx="3" cy="10" r="2"/>
+ <circle cx="17" cy="10" r="2"/>
+</svg>
diff --git a/Translate/resources/images/expand-ltr.svg b/Translate/resources/images/expand-ltr.svg
new file mode 100644
index 00000000..6862723c
--- /dev/null
+++ b/Translate/resources/images/expand-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" viewBox="0 0 16 12">
+ <path fill="#a2a9b1" d="M10.52 1.412h4.293v9.257H10.52z" overflow="visible"/>
+ <path fill="none" stroke="#222" stroke-width="1.367" d="M.683.862h14.633V11.14H.683z" overflow="visible"/>
+ <path fill="#222" d="m8.406 2.22-.844.842 2.282 2.25h-5.72V6.5h5.782l-2.28 2.28.843.845 3.25-3.25.405-.406-.406-.44-3.314-3.31z" overflow="visible"/>
+</svg>
diff --git a/Translate/resources/images/expand-rtl.svg b/Translate/resources/images/expand-rtl.svg
new file mode 100644
index 00000000..7e34a1f6
--- /dev/null
+++ b/Translate/resources/images/expand-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" viewBox="0 0 16 12">
+ <path fill="#a2a9b1" d="M5.48 1.412H1.186v9.257H5.48z" overflow="visible"/>
+ <path fill="none" stroke="#222" stroke-width="1.367" d="M15.316.862H.683V11.14h14.633z" overflow="visible"/>
+ <path fill="#222" d="M7.563 2.22 4.25 5.53l-.406.44.406.405 3.25 3.25.844-.844-2.25-2.28h5.75V5.312H6.156l2.25-2.25-.844-.843z" overflow="visible"/>
+</svg>
diff --git a/Translate/resources/images/expand.svg b/Translate/resources/images/expand.svg
new file mode 100644
index 00000000..ab94c298
--- /dev/null
+++ b/Translate/resources/images/expand.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <title>
+ expand
+ </title>
+ <path d="M19 6.25l-1.5-1.5-7.5 7.5-7.5-7.5L1 6.25l9 9 9-9z"/>
+</svg> \ No newline at end of file
diff --git a/Translate/resources/images/history.svg b/Translate/resources/images/history.svg
new file mode 100644
index 00000000..29ce9f95
--- /dev/null
+++ b/Translate/resources/images/history.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <title>
+ history
+ </title>
+ <path d="M9 6v5h.06l2.48 2.47 1.41-1.41L11 10.11V6z"/>
+ <path d="M10 1a9 9 0 0 0-7.85 13.35L.5 16H6v-5.5l-2.38 2.38A7 7 0 1 1 10 17v2a9 9 0 0 0 0-18z"/>
+</svg>
diff --git a/Translate/resources/images/label-clock.svg b/Translate/resources/images/label-clock.svg
new file mode 100644
index 00000000..d1bd36d9
--- /dev/null
+++ b/Translate/resources/images/label-clock.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15">
+ <path fill="#54595d" d="M7.5.125C3.44.125.125 3.44.125 7.5c0 4.06 3.316 7.375 7.375 7.375 4.06 0 7.375-3.316 7.375-7.375C14.875 3.44 11.56.125 7.5.125zm0 1.768c3.104 0 5.607 2.504 5.607 5.607s-2.504 5.607-5.607 5.607S1.893 10.604 1.893 7.5 4.396 1.893 7.5 1.893z"/>
+ <path fill="#54595d" d="M6.708 2.99v5.763h3.428v-1.21H7.918V2.99h-1.21z"/>
+</svg>
diff --git a/Translate/resources/images/label-error.svg b/Translate/resources/images/label-error.svg
new file mode 100644
index 00000000..191e4431
--- /dev/null
+++ b/Translate/resources/images/label-error.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path id="path4" d="M13.728 1H6.272L1 6.272v7.456L6.272 19h7.456L19 13.728V6.272zM11 15H9v-2h2zm0-4H9V5h2z" style="fill:#b32424;fill-opacity:1"/>
+</svg>
diff --git a/Translate/resources/images/label-flag.svg b/Translate/resources/images/label-flag.svg
new file mode 100644
index 00000000..c89b2a9d
--- /dev/null
+++ b/Translate/resources/images/label-flag.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <path id="path4" d="M17 6 3 1v18h2v-6.87L17 6z" style="fill:#ac6600;fill-opacity:1"/>
+</svg>
diff --git a/Translate/resources/images/label-pen.svg b/Translate/resources/images/label-pen.svg
new file mode 100644
index 00000000..27efaf9f
--- /dev/null
+++ b/Translate/resources/images/label-pen.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15">
+ <path fill="#54595d" d="m9.825 1.975-6.218 8.888h-.015l-.19 2.163 1.976-.92 6.218-8.89-1.77-1.243v.002z"/>
+</svg>
diff --git a/Translate/resources/images/label-tick.svg b/Translate/resources/images/label-tick.svg
new file mode 100644
index 00000000..0cbbe21c
--- /dev/null
+++ b/Translate/resources/images/label-tick.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15">
+ <path fill="#54595d" d="m10.765 1.078-5.188 8.938-2.03-1.5L1.95 10.64l3.25 2.407 1.188.875.75-1.28 5.906-10.25-2.28-1.314z"/>
+</svg>
diff --git a/Translate/resources/images/language.svg b/Translate/resources/images/language.svg
new file mode 100644
index 00000000..9262f73f
--- /dev/null
+++ b/Translate/resources/images/language.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <title>
+ language
+ </title>
+ <path d="M20 18h-1.44a.61.61 0 0 1-.4-.12.81.81 0 0 1-.23-.31L17 15h-5l-1 2.54a.77.77 0 0 1-.22.3.59.59 0 0 1-.4.14H9l4.55-11.47h1.89zm-3.53-4.31L14.89 9.5a11.62 11.62 0 0 1-.39-1.24q-.09.37-.19.69l-.19.56-1.58 4.19zm-6.3-1.58a13.43 13.43 0 0 1-2.91-1.41 11.46 11.46 0 0 0 2.81-5.37H12V4H7.31a4 4 0 0 0-.2-.56C6.87 2.79 6.6 2 6.6 2l-1.47.5s.4.89.6 1.5H0v1.33h2.15A11.23 11.23 0 0 0 5 10.7a17.19 17.19 0 0 1-5 2.1q.56.82.87 1.38a23.28 23.28 0 0 0 5.22-2.51 15.64 15.64 0 0 0 3.56 1.77zM3.63 5.33h4.91a8.11 8.11 0 0 1-2.45 4.45 9.11 9.11 0 0 1-2.46-4.45z"/>
+</svg>
diff --git a/Translate/resources/images/loading.gif b/Translate/resources/images/loading.gif
new file mode 100644
index 00000000..2212db95
--- /dev/null
+++ b/Translate/resources/images/loading.gif
Binary files differ
diff --git a/Translate/resources/images/loading.svg b/Translate/resources/images/loading.svg
new file mode 100644
index 00000000..0e4c8c5f
--- /dev/null
+++ b/Translate/resources/images/loading.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="34" height="34.031">
+ <g color="#000">
+ <path fill-opacity=".083" stroke="#54595d" stroke-opacity=".196" stroke-width=".5" d="M16.978.24C7.715.24.245 7.756.245 17.02c0 9.263 7.47 16.778 16.733 16.778 9.262 0 16.777-7.515 16.777-16.778C33.755 7.755 26.24.24 16.978.24zm0 4.15c6.966 0 12.627 5.66 12.627 12.628 0 6.967-5.66 12.583-12.627 12.583A12.56 12.56 0 0 1 4.394 17.019c0-6.967 5.617-12.627 12.584-12.627z" overflow="visible"/>
+ <path fill="none" stroke="#36c" stroke-linecap="round" stroke-width="2.258" d="M31.677 17.004a14.68 14.68 0 0 1-10.88 14.18" overflow="visible"/>
+ </g>
+</svg>
diff --git a/Translate/resources/images/outdated-ltr.svg b/Translate/resources/images/outdated-ltr.svg
new file mode 100644
index 00000000..d5e49c79
--- /dev/null
+++ b/Translate/resources/images/outdated-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="33.389" height="22.857" viewBox="0 0 33.389 22.857">
+ <path fill="#fef4ba" d="M0 0h25.922l7.467 11.43-7.468 11.428H0V0z"/>
+ <path fill="#54595d" d="M17.98 4.357c-4.06 0-7.374 3.316-7.374 7.375 0 4.06 3.315 7.375 7.375 7.375 4.06 0 7.376-3.316 7.376-7.375 0-4.06-3.316-7.375-7.375-7.375zm0 1.768c3.105 0 5.608 2.504 5.608 5.607s-2.504 5.607-5.607 5.607a5.6 5.6 0 0 1-5.606-5.608 5.599 5.599 0 0 1 5.607-5.607z"/>
+ <path fill="#54595d" d="M17.19 7.223v5.761h3.427v-1.21H18.4V7.223h-1.21z"/>
+</svg>
diff --git a/Translate/resources/images/outdated-rtl.svg b/Translate/resources/images/outdated-rtl.svg
new file mode 100644
index 00000000..eaeec849
--- /dev/null
+++ b/Translate/resources/images/outdated-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="33.389" height="22.857" viewBox="0 0 33.389 22.857">
+ <path fill="#fef4ba" d="M33.39 0H7.466L0 11.43l7.467 11.428H33.39V0z"/>
+ <path fill="#54595d" d="M15.408 4.357c-4.06 0-7.375 3.316-7.375 7.375 0 4.06 3.315 7.375 7.375 7.375 4.06 0 7.375-3.316 7.375-7.375 0-4.06-3.316-7.375-7.375-7.375zm0 1.768c3.104 0 5.607 2.504 5.607 5.607s-2.504 5.607-5.607 5.607S9.8 14.834 9.8 11.73a5.6 5.6 0 0 1 5.608-5.607z"/>
+ <path fill="#54595d" d="M14.616 7.223v5.761h3.428v-1.21h-2.218V7.223h-1.21z"/>
+</svg>
diff --git a/Translate/resources/images/paste.svg b/Translate/resources/images/paste.svg
new file mode 100644
index 00000000..bee0f59f
--- /dev/null
+++ b/Translate/resources/images/paste.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
+ <path fill="#54595d" d="M29.077 29.012c0 1.06-.86 1.92-1.92 1.92H4.844a1.92 1.92 0 0 1-1.92-1.92V4.042c0-1.06.86-1.92 1.92-1.92h22.313c1.06 0 1.92.86 1.92 1.92v24.97z"/>
+ <path fill="#f8f9fa" stroke="#54595d" stroke-miterlimit="10" stroke-width=".5" d="M5.368 4.054h21v24.35h-21z"/>
+ <path fill="#a2a9b1" d="M7.743 8.896h15.625v2.872H7.743zm0 6.194h15.625v2.875H7.743zm0 6.197h6.125v2.873H7.743z"/>
+ <path fill="#414042" d="M18.646 2.814V1.068h-5.292v1.746H10.46v2.338h11.08V2.814"/>
+</svg>
diff --git a/Translate/resources/images/plus_darkgray.svg b/Translate/resources/images/plus_darkgray.svg
new file mode 100644
index 00000000..26cbcad4
--- /dev/null
+++ b/Translate/resources/images/plus_darkgray.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 768">
+ <path fill="#54595d" d="M870.5 445.2V322.8H573.2V25.5H450.8v297.3H153.5v122.4h297.3v297.3h122.4V445.2z"/>
+</svg>
diff --git a/Translate/resources/images/prog-1.png b/Translate/resources/images/prog-1.png
new file mode 100644
index 00000000..8788c993
--- /dev/null
+++ b/Translate/resources/images/prog-1.png
Binary files differ
diff --git a/Translate/resources/images/prog-2.png b/Translate/resources/images/prog-2.png
new file mode 100644
index 00000000..1e8ff84e
--- /dev/null
+++ b/Translate/resources/images/prog-2.png
Binary files differ
diff --git a/Translate/resources/images/prog-3.png b/Translate/resources/images/prog-3.png
new file mode 100644
index 00000000..bfba1464
--- /dev/null
+++ b/Translate/resources/images/prog-3.png
Binary files differ
diff --git a/Translate/resources/images/prog-4.png b/Translate/resources/images/prog-4.png
new file mode 100644
index 00000000..132ee756
--- /dev/null
+++ b/Translate/resources/images/prog-4.png
Binary files differ
diff --git a/Translate/resources/images/prog-5.png b/Translate/resources/images/prog-5.png
new file mode 100644
index 00000000..8b86fbb4
--- /dev/null
+++ b/Translate/resources/images/prog-5.png
Binary files differ
diff --git a/Translate/resources/images/project.svg b/Translate/resources/images/project.svg
new file mode 100644
index 00000000..ce1adeb0
--- /dev/null
+++ b/Translate/resources/images/project.svg
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" xml:space="preserve">
+ <g transform="translate(-355.875 -530.201)">
+ <path d="M373.173 532.792h13.336v6.495h-13.336z" style="fill:#fff;fill-opacity:.675;stroke:#c9c9c9;stroke-width:.2572;stroke-linecap:round"/>
+ <linearGradient id="a" x1="716.994" x2="716.994" y1="-394.297" y2="-422.532" gradientTransform="matrix(1.0287 0 0 -1.0287 -365.699 126.767)" gradientUnits="userSpaceOnUse">
+ <stop offset="0" style="stop-color:#f4f4f4;stop-opacity:1"/>
+ <stop offset="1" style="stop-color:#ddd;stop-opacity:1"/>
+ </linearGradient>
+ <path d="M356.261 530.587h16.295l6.267 6.267h8.667v24.962h-31.229v-31.229z" style="fill:url(#a);stroke:#9d9d9d;stroke-width:.77149999;stroke-linecap:square"/>
+ <path d="M381.718 548.951c.006 5.437-4.396 9.848-9.832 9.854-5.436.006-9.847-4.396-9.854-9.831v-.022c-.006-5.436 4.396-9.847 9.832-9.854 5.436-.006 9.847 4.396 9.854 9.832v.021z" style="fill:#f0f0f0;stroke:#6d6d6d;stroke-width:.84439999;stroke-linecap:round"/>
+ <path d="M372.031 541.108c-.825.023-2.344.219-2.344.219s.25.477.25.688c0 .211-.062.778-.062 1.031 0 .253.925.053 1.094-.031.169-.084 1.281-1.062 1.281-1.062s.408-.612.281-.781c-.031-.044-.225-.072-.5-.064zm-4.469.718c.06.656.844 1.094.844 1.094l.125-.438c0 .001-.67-.656-.969-.656zm-.781.438s-.406.347-1.062.406c-.247.022-.745-.072-1.281-.156a9.757 9.757 0 0 0-2.281 4.938l.219-.312s.77 1.381 1.188 1.5c.418.119.892.543 1.25.781s.591 1.472.531 2.188c-.06.716.483.804.781 1.281.298.477.949 3.326 1.188 3.625.239.299.475-1.253.594-1.969.119-.716 1.688-2.034 1.688-2.75 0-.716-1.798-1.736-2.156-2.094-.358-.358-1.477-.531-2.312-.531-.835 0-.847-1.128-1.562-1.188-.715-.06.125-1 .125-1s1.958-.312 2.375-.312c.417 0 .54-1.182.719-1.719.179-.537 1.506-.486 1.625-.844s-.542-.719-.781-.719-1.259.364-1.438.125c-.179-.239 1.031-.969 1.031-.969l-.441-.281zm9.063 0c-.197.016-.374.052-.438.094-.127.084-.467.216-.594.406-.127.19-.272.624-.125.75.147.126.26.157.344.094.084-.063.729-.616.812-.531.083.085.283.594.156.594-.127 0-1.031.281-1.031.281s-.003-.171-.062-.156c-.06.015-.003.235-.062.25-.06.015-.844.375-.844.375s-.1.088-.219.188l-.25.25c-.006.007-.027.025-.031.031-.06.104-.39.599-.375.719.016.119-.07.375.094.375s1.27-.682 1.344-.562a.255.255 0 0 0 .188.125s-.074-.156 0-.156.562.188.562.188-.073-.312.031-.281c.104.03.583.594.688.594.105 0 .358-.007.344-.156-.015-.149-.068-.335.125-.469.193-.134.787-.231.906-.156.119.074.304.16.125.25-.18.089-.396-.014-.5.031-.104.044-.392.333-.406.438-.015.104.561.565.531.625-.029.06-.326.344-.625.344s-2.484-.546-2.812-.531c-.328.015-.615.099-.75.219-.135.119-.707.648-.781.812-.074.164-.398.957-.219 1.375.179.418.584 1.176 1.031 1.25.447.074.99.107 1.125.062s.859.76.875 1.312c.015.552-.039 1.938.125 2.281.164.343.291.982.812.938.521-.044.945-.168 1.125-.406.179-.238.678-1.455.812-2.156.134-.701.754-1.754.844-2.156.09-.402.102-.631-.062-.75-.164-.119-.485-.116-.5-.25-.016-.135.209-.016.344 0 .135.015.631-.022.75-.156.119-.135.324-.571.25-.75-.074-.18-.406-.562-.406-.562s1.338.161 1.875.594c.312.251.564.577.75.844a9.805 9.805 0 0 0-2.531-6.406c-.014.002-.054.031-.062.031-.232 0-2.031.344-2.031.344s-.393-.447-.688-.469a3.263 3.263 0 0 0-.564-.005zm-2.282 1.312s-.212.865.094.844c.306-.021-.094-.844-.094-.844zm-.406.375s-.365.187-.281.281c.084.094.26.147.312.062.052-.085-.031-.343-.031-.343zm5.719 8.094a.702.702 0 0 0-.344.219c-.079.095-.198.43-.156.625.042.195.218.459.281.438.063-.021.229-.084.25-.438.021-.354.078-.671.031-.75-.047-.079-.062-.094-.062-.094z" style="fill:#6d6d6d"/>
+ </g>
+</svg>
diff --git a/Translate/resources/images/remove.svg b/Translate/resources/images/remove.svg
new file mode 100644
index 00000000..db5a537c
--- /dev/null
+++ b/Translate/resources/images/remove.svg
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
+ <defs>
+ <linearGradient id="c">
+ <stop offset="0" stop-color="#fa9a87"/>
+ <stop offset="1" stop-color="#e9594d"/>
+ </linearGradient>
+ <linearGradient id="b">
+ <stop offset="0" stop-color="#fddbd4"/>
+ <stop offset="1" stop-color="#e47871"/>
+ </linearGradient>
+ <linearGradient id="a">
+ <stop offset="0" stop-color="#c14d33"/>
+ <stop offset="1" stop-color="#e0696a"/>
+ </linearGradient>
+ <linearGradient id="e" x1="12.758" x2="2.583" y1="13.001" y2="2.521" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
+ <linearGradient id="d" x1="2.583" x2="12.758" y1="2.521" y2="13.001" gradientUnits="userSpaceOnUse" xlink:href="#b"/>
+ <linearGradient id="f" x1="4.551" x2="11.459" y1="4.433" y2="11.341" gradientUnits="userSpaceOnUse" xlink:href="#c"/>
+ </defs>
+ <path fill="url(#d)" fill-rule="evenodd" stroke="url(#e)" d="M14.647 7.824a6.85 6.85 0 1 1-13.7 0 6.85 6.85 0 1 1 13.7 0z" transform="translate(.253 .127)"/>
+ <path fill="url(#f)" d="M13.006 7.982a4.988 4.988 0 1 1-9.976 0 4.988 4.988 0 1 1 9.976 0z" transform="translate(-.038) scale(1.002)"/>
+ <path fill="#fff" fill-opacity=".957" d="M5 9h6V7H5.004z"/>
+</svg>
diff --git a/Translate/resources/images/search.svg b/Translate/resources/images/search.svg
new file mode 100644
index 00000000..082b6c7b
--- /dev/null
+++ b/Translate/resources/images/search.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+ <title>
+ search
+ </title>
+ <path fill="#54595d" fill-rule="evenodd" d="M12.2 13.6a7 7 0 1 1 1.4-1.4l5.4 5.4-1.4 1.4-5.4-5.4zM13 8A5 5 0 1 1 3 8a5 5 0 0 1 10 0z"/>
+</svg>
diff --git a/Translate/resources/images/switch.svg b/Translate/resources/images/switch.svg
new file mode 100644
index 00000000..f5bb38e7
--- /dev/null
+++ b/Translate/resources/images/switch.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 768">
+ <path fill="#54595d" d="m751.863 131.86-186.744-1.106H349.324V27.837L128 233.67l221.326 188.127V318.88H565.12v215.793H462.2L650.33 756l204.726-221.327H752.14V318.88l-.278-187.02zm-90.467 90.745v4.427h-4.427v-4.427h4.425z"/>
+ <path fill="#54595d" d="M655.503 228.447c.062-1.788.05-3.578.046-5.367-.025-1.523-.09-3.04.26-4.532 1.39-4.26 2.03-2.45 9.01-5.744.176 1.704.096 3.43.095 5.144.004 1.708-.003 3.417.003 5.125.006 1.19.008 2.377.024 3.566.014.584.016 1.17.022 1.756-.028 4.033.477.91-8.24 5.074.058-1.59.057-3.18.078-4.77.085-3.247.003-6.496.118-9.742.105-2.014.248-4.026.37-6.04.145-3.94 2.308-3.068 8.245-5.887.213-.1.498.79.733 1.42.733 2.91 1.115 5.89 1.545 8.854.457 3.367.885 6.733 1.15 10.12.152 2.527.183 5.053.587 7.555.26 1.833.743 3.62 1.19 5.414.188.823.355 1.65.407 2.492.288 3.13.21 1.59-8.18 3.726-.477.123.093-.98.134-1.47.066-.776.134-1.55.185-2.327.175-2.656.19-3.618.294-6.34.114-4.458.13-8.92.042-13.378.06-1.338 0-2.536-.664-3.706-.49-.78-1.084-1.406-2.002-1.596-1.142-.125-2.296-.1-3.443-.105-.726-.004-1.08-.068-1.787.196-.342.128-1.292.682-.972.506 2.18-1.2 4.274-2.573 6.55-3.575.537-.236-.858.8-1.246 1.24-.412.468-.765.984-1.147 1.476-1.973 2.593-3.097 5.555-3.672 8.73-.33 2.2-.3 4.426-.313 6.644-.014 2.337.006 4.674.04 7.01-.027 1.143.127 2.262.595 3.304.156.295.303.587.43.894l-8.073 4.495c-.105-.3-.243-.58-.38-.864a7.759 7.759 0 0 1-.668-3.7c.014-2.338.01-4.675-.037-7.013-.023-2.277.016-4.557.307-6.817.536-3.302 1.61-6.413 3.59-9.152.234-.33 1.82-2.655 2.22-2.923 3.898-2.61 7.296-5.857 11.956-5.82 1.226 0 2.49-.06 3.675.314 1.014.462 1.74 1.232 2.333 2.17.767 1.33.954 2.665.77 4.197a963.34 963.34 0 0 0-.425 13.59c-.05 2.837-.087 5.67-.113 8.508-.005.453.346 1.087-.016 1.36-8.296 6.283-8.284 8.008-8.196 4.66-.02-.802-.1-1.598-.26-2.384-.376-1.835-.88-3.642-1.138-5.5-.442-2.542-.443-5.108-.54-7.68-.216-3.374-.638-6.722-1.096-10.07-.422-2.877-.792-5.777-1.63-8.568-1.09-2.503-1.21.16 7.562-5.02.378-.223-.205.062-.3.447-.038.153-.027.314-.04.472-.172 2.04-.458 4.072-.582 6.117-.173 3.214-.062 6.434-.03 9.652.02 1.564.02 3.13.077 4.692-9.543 5.167-8.17 7.38-8.24 3.323.006-.595.008-1.188.022-1.78.016-1.2.02-2.4.03-3.597.01-1.715.016-3.43.035-5.145.008-1.604.02-3.21-.087-4.81 8.643-4.672 9.406-6.928 7.386-2.63-.568 1.375-.443 2.85-.45 4.312-.003 1.773-.016 3.548.046 5.32l-8.203 4.18z"/>
+</svg>
diff --git a/Translate/resources/images/translate-ltr.svg b/Translate/resources/images/translate-ltr.svg
new file mode 100644
index 00000000..db1c0a45
--- /dev/null
+++ b/Translate/resources/images/translate-ltr.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="33.389" height="22.857" viewBox="0 0 33.389 22.857">
+ <path fill="#729fcf" d="M0 0h25.922l7.467 11.43-7.468 11.428H0V0z"/>
+ <path fill="#fff" d="m21.324 2.915-9.343 13.31-.02.004-.285 3.238 2.968-1.38 9.344-13.31-2.663-1.863z"/>
+</svg>
diff --git a/Translate/resources/images/translate-rtl.svg b/Translate/resources/images/translate-rtl.svg
new file mode 100644
index 00000000..043e6553
--- /dev/null
+++ b/Translate/resources/images/translate-rtl.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="33.389" height="22.857" viewBox="0 0 33.389 22.857">
+ <path fill="#729fcf" d="M33.39 0H7.466L0 11.43l7.467 11.428H33.39V0z"/>
+ <path fill="#fff" d="m21.05 2.915-9.342 13.31-.022.004-.284 3.238 2.968-1.38 9.344-13.31-2.663-1.863z"/>
+</svg>
diff --git a/Translate/resources/images/trash_darkgray.svg b/Translate/resources/images/trash_darkgray.svg
new file mode 100644
index 00000000..3da38d47
--- /dev/null
+++ b/Translate/resources/images/trash_darkgray.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="96" height="96" viewBox="0 0 96 96">
+ <path fill="#54595d" d="m13.5 28.2 8.1 63c.3 2.7 2.4 4.8 5.1 4.8h42.6c2.7 0 4.8-2.1 4.8-4.5l8.1-63H13.5v-.3zM77.4 6.6C81 6.6 84 8.1 84 9.9v7.2c0 1.8-3 1.5-6.9 1.5H18.6c-3.6 0-6.6.3-6.6-1.5V9.9c0-1.8 3-3.3 6.9-3.3l13.5-1.2L37.2 0h21.3l5.1 5.7 13.8.9z"/>
+</svg>
diff --git a/Translate/resources/images/user-small.svg b/Translate/resources/images/user-small.svg
new file mode 100644
index 00000000..ea037509
--- /dev/null
+++ b/Translate/resources/images/user-small.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15">
+ <g fill="#c8ccd1">
+ <path d="M12.28 4.776c0 2.64-2.14 4.783-4.78 4.783S2.723 7.414 2.723 4.775A4.776 4.776 0 0 1 7.502 0a4.779 4.779 0 0 1 4.78 4.776z"/>
+ <path d="M13.36 8.61h-.947a5.81 5.81 0 0 1-9.825-.001h-.942c-.445 0-.8.357-.8.8v4.795c0 .436.354.795.8.795H13.36c.44 0 .794-.36.794-.795V9.41c0-.442-.353-.8-.794-.8z"/>
+ </g>
+</svg>
diff --git a/Translate/resources/images/view-list-hi.svg b/Translate/resources/images/view-list-hi.svg
new file mode 100644
index 00000000..ac492449
--- /dev/null
+++ b/Translate/resources/images/view-list-hi.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="25" height="15" viewBox="0 0 25 15">
+ <path fill="#fff" d="M5.954 1.63h13.092V4.3H5.954zm0 4.536h13.092v2.668H5.954zm0 4.534h13.092v2.67H5.954z"/>
+</svg>
diff --git a/Translate/resources/images/view-list.svg b/Translate/resources/images/view-list.svg
new file mode 100644
index 00000000..e8f3b29f
--- /dev/null
+++ b/Translate/resources/images/view-list.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="25" height="15" viewBox="0 0 25 15">
+ <path fill="#222" d="M5.954 1.63h13.092V4.3H5.954zm0 4.536h13.092v2.668H5.954zm0 4.534h13.092v2.67H5.954z"/>
+</svg>
diff --git a/Translate/resources/images/view-page-hi.svg b/Translate/resources/images/view-page-hi.svg
new file mode 100644
index 00000000..24ad3426
--- /dev/null
+++ b/Translate/resources/images/view-page-hi.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="25" height="15" viewBox="0 0 25 15">
+ <path fill="#fff" d="M5.97 1.625v2.688h5.655V1.624H5.97zm7.405 0v2.688h5.656V1.624h-5.655zM5.97 6.156v2.688h5.655V6.156H5.97zm7.405 0v2.688h5.656V6.156h-5.655zM5.97 10.688v2.687h5.655v-2.688H5.97zm7.405 0v2.687h5.656v-2.688h-5.655z"/>
+</svg>
diff --git a/Translate/resources/images/view-page.svg b/Translate/resources/images/view-page.svg
new file mode 100644
index 00000000..61a2c027
--- /dev/null
+++ b/Translate/resources/images/view-page.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="25" height="15" viewBox="0 0 25 15">
+ <path fill="#222" d="M5.97 1.625v2.688h5.655V1.624H5.97zm7.405 0v2.688h5.656V1.624h-5.655zM5.97 6.156v2.688h5.655V6.156H5.97zm7.405 0v2.688h5.656V6.156h-5.655zM5.97 10.688v2.687h5.655v-2.688H5.97zm7.405 0v2.687h5.656v-2.688h-5.655z"/>
+</svg>
diff --git a/Translate/resources/images/view-proofread-hi.svg b/Translate/resources/images/view-proofread-hi.svg
new file mode 100644
index 00000000..52e4ce2d
--- /dev/null
+++ b/Translate/resources/images/view-proofread-hi.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="25" height="15" viewBox="0 0 25 15">
+ <path fill="#fff" d="m15.766 1.078-5.188 8.938-2.03-1.5-1.595 2.125 3.25 2.407 1.188.875.75-1.28 5.907-10.25-2.28-1.314z" overflow="visible"/>
+</svg>
diff --git a/Translate/resources/images/view-proofread.svg b/Translate/resources/images/view-proofread.svg
new file mode 100644
index 00000000..37c25f35
--- /dev/null
+++ b/Translate/resources/images/view-proofread.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="25" height="15" viewBox="0 0 25 15">
+ <path fill="#222" d="m15.766 1.078-5.188 8.938-2.03-1.5-1.595 2.125 3.25 2.407 1.188.875.75-1.28 5.907-10.25-2.28-1.314z" overflow="visible"/>
+</svg>
diff --git a/Translate/resources/js/LanguagesMultiselectWidget.js b/Translate/resources/js/LanguagesMultiselectWidget.js
new file mode 100644
index 00000000..54c2ebc1
--- /dev/null
+++ b/Translate/resources/js/LanguagesMultiselectWidget.js
@@ -0,0 +1,122 @@
+'use strict';
+/* eslint-disable no-implicit-globals */
+
+/**
+ * @class
+ * @extends OO.ui.MenuTagMultiselectWidget
+ * @mixins OO.ui.mixin.RequestManager
+ * @mixins OO.ui.mixin.PendingElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2020.07
+ */
+var LanguagesMultiselectWidget = function ( config ) {
+ this.api = config.api;
+ this.allowedValues = Object.keys( config.languages );
+ this.languages = config.languages;
+
+ LanguagesMultiselectWidget.parent.call( this, $.extend( true,
+ {
+ allowEditTags: false,
+ allowArbitary: false,
+ menu: {
+ filterFromInput: false
+ }
+ },
+ config
+ ) );
+
+ OO.ui.mixin.RequestManager.call( this, config );
+ OO.ui.mixin.PendingElement.call( this, $.extend( true, {}, config, {
+ $pending: this.$handle
+ } ) );
+
+ // No need for default values for the menu
+ this.menu.clearItems();
+};
+
+/* Setup */
+
+OO.inheritClass( LanguagesMultiselectWidget, OO.ui.MenuTagMultiselectWidget );
+OO.mixinClass( LanguagesMultiselectWidget, OO.ui.mixin.RequestManager );
+OO.mixinClass( LanguagesMultiselectWidget, OO.ui.mixin.PendingElement );
+
+/* Methods */
+
+/** @inheritdoc OO.ui.MenuTagMultiselectWidget */
+LanguagesMultiselectWidget.prototype.onInputChange = function () {
+ var widget = this;
+
+ this.getRequestData()
+ .then( function ( data ) {
+ // Reset
+ widget.menu.clearItems();
+ widget.menu.addItems( widget.getOptionsFromData( data ) );
+ } ).always( function () {
+ // Parent method
+ LanguagesMultiselectWidget.parent.prototype.onInputChange.call( widget );
+ } );
+};
+
+/**
+ * Get option widgets from the server response
+ *
+ * @param {Object} data Query result
+ * @return {OO.ui.MenuOptionWidget[]} Menu items
+ */
+LanguagesMultiselectWidget.prototype.getOptionsFromData = function ( data ) {
+ var options = [];
+
+ for ( var languageCode in data ) {
+ if ( this.languages[ languageCode ] !== undefined ) {
+ options.push( new OO.ui.MenuOptionWidget( {
+ data: languageCode,
+ label: this.languages[ languageCode ]
+ } ) );
+ }
+ }
+
+ return options;
+};
+
+/** @inheritdoc OO.ui.MenuTagMultiselectWidget */
+LanguagesMultiselectWidget.prototype.setValue = function ( valueObject ) {
+ valueObject = Array.isArray( valueObject ) ? valueObject : [ valueObject ];
+
+ this.clearItems();
+ valueObject.forEach( function ( obj ) {
+ var data;
+ if ( typeof obj === 'string' ) {
+ data = obj;
+ } else {
+ data = obj.data;
+ }
+
+ this.addTag( data, this.languages[ data ] );
+ }.bind( this ) );
+};
+
+/** @inheritdoc OO.ui.mixin.RequestManager */
+LanguagesMultiselectWidget.prototype.getRequestQuery = function () {
+ return this.input.getValue();
+};
+
+/** @inheritdoc OO.ui.mixin.RequestManager */
+LanguagesMultiselectWidget.prototype.getRequest = function () {
+ return this.api.get( {
+ action: 'languagesearch',
+ formatversion: '2',
+ search: this.getRequestQuery()
+ } );
+};
+
+/** @inheritdoc OO.ui.mixin.RequestManager */
+LanguagesMultiselectWidget.prototype.getRequestCacheDataFromResponse = function ( response ) {
+ return response.languagesearch || {};
+};
+
+module.exports = LanguagesMultiselectWidget;
diff --git a/Translate/resources/js/ext.translate.base.js b/Translate/resources/js/ext.translate.base.js
new file mode 100644
index 00000000..9c169518
--- /dev/null
+++ b/Translate/resources/js/ext.translate.base.js
@@ -0,0 +1,232 @@
+( function () {
+ 'use strict';
+
+ mw.translate = mw.translate || {};
+
+ mw.translate = $.extend( mw.translate, {
+ dirty: false,
+ // A cache for language stats loaded from API,
+ // indexed by language code
+ languagestats: {},
+
+ // Storage for language stats loader functions from API,
+ // indexed by language code
+ languageStatsLoader: {},
+
+ /**
+ * Get language stats for a language from the API.
+ *
+ * @param {string} language Language code.
+ * @return {jQuery.Deferred}
+ */
+ loadMessageGroupStatsForLanguage: function ( language ) {
+ if ( !mw.translate.languageStatsLoader[ language ] ) {
+ mw.translate.languageStatsLoader[ language ] = new mw.Api().get( {
+ action: 'query',
+ meta: 'languagestats',
+ lslanguage: language
+ } );
+ }
+
+ mw.translate.languageStatsLoader[ language ].done( function ( result ) {
+ mw.translate.languagestats[ language ] = result.query.languagestats;
+ } );
+
+ return mw.translate.languageStatsLoader[ language ];
+ },
+
+ /**
+ * Get language stats for a language and group from the API
+ *
+ * @param {string} language
+ * @param {string} group
+ * @return {jQuery.Deferred}
+ */
+ loadMessageGroupStatsForItem: function ( language, group ) {
+ var uniqueKey = group + '|' + language;
+ if ( !mw.translate.languageStatsLoader[ uniqueKey ] ) {
+ mw.translate.languageStatsLoader[ uniqueKey ] = new mw.Api().get( {
+ action: 'query',
+ meta: 'languagestats',
+ lslanguage: language,
+ lsgroup: group
+ } );
+ }
+
+ mw.translate.languageStatsLoader[ uniqueKey ]
+ .done( function ( result ) {
+ if ( result.query.languagestats && result.query.languagestats.length ) {
+ mw.translate.languagestats[ language ] = result.query.languagestats;
+ } else {
+ mw.translate.languagestats[ language ] = [];
+ }
+
+ } );
+
+ return mw.translate.languageStatsLoader[ uniqueKey ];
+ },
+
+ /**
+ * Load message group information asynchronously.
+ *
+ * @param {string} id Message group id
+ * @param {string|Array} [props] List of properties to load
+ * @return {jQuery.Promise} Object containing the requested properties on success.
+ */
+ getMessageGroup: function ( id, props ) {
+ if ( Array.isArray( props ) ) {
+ props = props.join( '|' );
+ } else if ( props === undefined ) {
+ props = 'id|label|description|icon|priority|prioritylangs|priorityforce|workflowstates';
+ }
+
+ var params = {
+ meta: 'messagegroups',
+ mgformat: 'flat',
+ mgprop: props,
+ mgroot: id,
+ formatversion: 2
+ };
+
+ var api = new mw.Api();
+
+ return api.get( params ).then( function ( result ) {
+ return result.query.messagegroups[ 0 ];
+ } );
+ },
+
+ /**
+ * Find a group from an array of message groups as returned by web api
+ * and recurse it through sub groups.
+ *
+ * @param {string} id Group id to search for.
+ * @param {Array} groups Array of message groups
+ * @return {Object} Message group object
+ */
+ findGroup: function ( id, groups ) {
+ if ( !id ) {
+ return groups;
+ }
+
+ var result;
+ groups.some( function ( group ) {
+ if ( group.id === id ) {
+ result = group;
+ return true;
+ }
+
+ if ( group.groups ) {
+ group = mw.translate.findGroup( id, group.groups );
+
+ if ( group ) {
+ result = group;
+ return true;
+ }
+ }
+
+ return false;
+ } );
+
+ return result;
+ },
+
+ /**
+ * Check if the current user is allowed to translate on this wiki.
+ *
+ * @return {boolean}
+ */
+ canTranslate: function () {
+ return mw.config.get( 'TranslateRight' );
+ },
+
+ /**
+ * Check if the current user is allowed to proofread on this wiki.
+ *
+ * @return {boolean}
+ */
+ canProofread: function () {
+ return mw.config.get( 'TranslateMessageReviewRight' );
+ },
+
+ /**
+ * Check if the current user can delete translations on this wiki.
+ *
+ * @return {boolean}
+ */
+ canDelete: function () {
+ return mw.config.get( 'DeleteRight' ) && mw.config.get( 'TranslateRight' );
+ },
+
+ /**
+ * Check if the current user can update and manage message groups.
+ *
+ * @return {boolean}
+ */
+ canManage: function () {
+ return mw.config.get( 'TranslateManageRight' );
+ },
+
+ /**
+ * Adds missing languages to the language database so that they can be used in ULS.
+ *
+ * @param {Object} languages Language tags mapped to language names
+ * @param {Array} regions Which regions to add the languages.
+ */
+ addExtraLanguagesToLanguageData: function ( languages, regions ) {
+ for ( var code in languages ) {
+ if ( code in $.uls.data.languages ) {
+ continue;
+ }
+
+ $.uls.data.addLanguage( code, {
+ script: 'Zyyy',
+ regions: regions,
+ autonym: languages[ code ]
+ } );
+ }
+ },
+
+ isDirty: function () {
+ // Something being typed in the current editor.
+ return mw.translate.dirty ||
+ // Previous editors has some unsaved edits
+ $( '.tux-status-unsaved' ).length;
+ },
+
+ /**
+ * Return the language details for usage in HTML attributes
+ *
+ * @param {string} languageCode
+ * @return {Object}
+ */
+ getLanguageDetailsForHtml: function ( languageCode ) {
+ var languageCodeForHtml = languageCode;
+ if ( languageCode === mw.config.get( 'wgTranslateDocumentationLanguageCode' ) ) {
+ languageCodeForHtml = mw.config.get( 'wgContentLanguage' );
+ }
+
+ return {
+ code: languageCodeForHtml,
+ direction: $.uls.data.getDir( languageCodeForHtml ),
+ autonym: $.uls.data.getAutonym( languageCode )
+ };
+ }
+ } );
+
+ /**
+ * A warning to be shown if a user tries to close the page or navigate away
+ * from it without saving the written translation.
+ */
+ function translateOnBeforeUnloadRegister() {
+ $( window ).on( 'beforeunload', function () {
+ if ( mw.translate.isDirty() ) {
+ // Return our message
+ return mw.msg( 'translate-js-support-unsaved-warning' );
+ }
+ } );
+ }
+
+ $( function () {
+ translateOnBeforeUnloadRegister();
+ } );
+}() );
diff --git a/Translate/resources/js/ext.translate.dropdownmenu.js b/Translate/resources/js/ext.translate.dropdownmenu.js
new file mode 100644
index 00000000..ba2afa5e
--- /dev/null
+++ b/Translate/resources/js/ext.translate.dropdownmenu.js
@@ -0,0 +1,12 @@
+( function () {
+ 'use strict';
+
+ $( function () {
+ // Hide the dropdown menu when clicking outside of it
+ $( document.documentElement ).on( 'click', function ( e ) {
+ if ( !e.isDefaultPrevented() ) {
+ $( '.tux-dropdown-menu' ).addClass( 'hide' );
+ }
+ } );
+ } );
+}() );
diff --git a/Translate/resources/js/ext.translate.edit.documentation.js b/Translate/resources/js/ext.translate.edit.documentation.js
new file mode 100644
index 00000000..158df269
--- /dev/null
+++ b/Translate/resources/js/ext.translate.edit.documentation.js
@@ -0,0 +1,46 @@
+( function () {
+ var isVeEditingSupported = mw.config.get( 'wgVersion' ) >= '1.38';
+ // TODO load ext.translate.ve unconditionally after 1.39 release: T295203
+ // (see gerrit I7a55a09514110fa7d290d6f03ce9c0b7962c9140; this should be
+ // loaded from extension.json, not from here)
+ if ( isVeEditingSupported ) {
+ mw.loader.using( 'ext.visualEditor.targetLoader' ).then( function () {
+ mw.libs.ve.targetLoader.addPlugin( 'ext.translate.ve' );
+ } );
+ } else {
+ var warningTitle = mw.msg( 'tps-edit-sourcepage-ve-warning-title' );
+ var warningText = mw.msg( 'tps-edit-sourcepage-ve-warning-text' );
+
+ var warningDialog = new OO.ui.MessageDialog(),
+ windowManager = new OO.ui.WindowManager(),
+ dialogOptions = {
+ title: warningTitle,
+ message: warningText,
+ actions: [
+ {
+ action: 'accept',
+ label: mw.msg( 'tps-edit-sourcepage-ve-warning-button' ),
+ flags: [ 'primary', 'progressive' ]
+ }
+ ]
+ },
+ isWarningShown = false;
+
+ $( 'body' ).append( windowManager.$element );
+ windowManager.addWindows( [ warningDialog ] );
+
+ $( function () {
+ mw.hook( 've.activationComplete' ).add( function () {
+ // eslint-disable-next-line no-undef
+ var surface = ve.init.target.getSurface();
+ if ( surface.getMode() === 'visual' ) {
+ // Visual mode
+ if ( !isWarningShown ) {
+ isWarningShown = true;
+ windowManager.openWindow( warningDialog, dialogOptions );
+ }
+ }
+ } );
+ } );
+ }
+}() );
diff --git a/Translate/resources/js/ext.translate.editor.helpers.js b/Translate/resources/js/ext.translate.editor.helpers.js
new file mode 100644
index 00000000..1ff54943
--- /dev/null
+++ b/Translate/resources/js/ext.translate.editor.helpers.js
@@ -0,0 +1,757 @@
+/*!
+ * Translate editor additional helper functionality
+ */
+( function () {
+ 'use strict';
+
+ function getEditSummaryTimeWithDiff( pageTitle, comment ) {
+ var diffLink = mw.util.getUrl( pageTitle, {
+ oldid: comment.revisionId,
+ diff: 'prev'
+ } );
+
+ return $( '<a>' )
+ .addClass( 'edit-summary-time' )
+ .attr( { href: diffLink } )
+ .data( 'commentTimestamp', comment.timestamp )
+ .text( comment.humanTimestamp );
+ }
+
+ function getSpacer() {
+ return '<span class="edit-summary-spacer">·</span>';
+ }
+
+ var translateEditorHelpers = {
+ showDocumentationEditor: function () {
+ var $infoColumnBlock = this.$editor.find( '.infocolumn-block' ),
+ $editColumn = this.$editor.find( '.editcolumn' ),
+ $messageDescEditor = $infoColumnBlock.find( '.message-desc-editor' ),
+ $messageDescViewer = $infoColumnBlock.find( '.message-desc-viewer' );
+
+ $infoColumnBlock
+ .removeClass( 'five' )
+ .addClass( 'seven' );
+ $editColumn
+ .removeClass( 'seven' )
+ .addClass( 'five' );
+
+ $messageDescViewer.addClass( 'hide' );
+
+ $messageDescEditor.removeClass( 'hide' );
+ $messageDescEditor.find( '.tux-textarea-documentation' ).trigger( 'focus' );
+
+ // So that the link won't be followed
+ return false;
+ },
+
+ hideDocumentationEditor: function () {
+ var $infoColumnBlock = this.$editor.find( '.infocolumn-block' ),
+ $editColumn = this.$editor.find( '.editcolumn' ),
+ $messageDescEditor = $infoColumnBlock.find( '.message-desc-editor' ),
+ $messageDescViewer = $infoColumnBlock.find( '.message-desc-viewer' );
+
+ $infoColumnBlock
+ .removeClass( 'seven' )
+ .addClass( 'five' );
+ $editColumn
+ .removeClass( 'five' )
+ .addClass( 'seven' );
+
+ $messageDescEditor.addClass( 'hide' );
+ $messageDescViewer.removeClass( 'hide' );
+ },
+
+ /**
+ * Save the documentation
+ *
+ * @return {jQuery.Promise}
+ */
+ saveDocumentation: function () {
+ var translateEditor = this,
+ api = new mw.Api(),
+ newDocumentation = translateEditor.$editor.find( '.tux-textarea-documentation' ).val();
+
+ return api.postWithToken( 'csrf', {
+ action: 'edit',
+ title: translateEditor.message.title
+ .replace( /\/[a-z-]+$/, '/' + mw.config.get( 'wgTranslateDocumentationLanguageCode' ) ),
+ text: newDocumentation
+ } ).done( function ( response ) {
+ var $messageDesc = translateEditor.$editor.find( '.infocolumn-block .message-desc' );
+
+ if ( response.edit.result === 'Success' ) {
+ api.parse(
+ newDocumentation
+ ).done( function ( parsedDocumentation ) {
+ $messageDesc.html( parsedDocumentation );
+ } ).fail( function ( errorCode, results ) {
+ // Note: It is possible for results to be undefined.
+ var errorInfo = results && results.error ? results.error.info : 'No information';
+ $messageDesc.html( newDocumentation );
+ mw.log( 'Error parsing documentation ' + errorCode + ' ' + errorInfo );
+ } ).always( function () {
+ // A collapsible element etc. may have been added
+ mw.hook( 'wikipage.content' ).fire( $messageDesc );
+ translateEditor.hideDocumentationEditor();
+ } );
+ } else {
+ mw.notify( 'Error saving message documentation' );
+ mw.log( 'Error saving documentation', response );
+ }
+ } ).fail( function ( errorCode, results ) {
+ mw.notify( 'Error saving message documentation' );
+ mw.log( 'Error saving documentation', errorCode, results );
+ } );
+ },
+
+ /**
+ * Shows the message documentation.
+ *
+ * @param {Object} documentation A documentation object as returned by API.
+ */
+ showMessageDocumentation: function ( documentation ) {
+ if ( !mw.config.get( 'wgTranslateDocumentationLanguageCode' ) ) {
+ return;
+ }
+
+ var $messageDescViewer = this.$editor.find( '.message-desc-viewer' );
+ var $descEditLink = $messageDescViewer.find( '.message-desc-edit' );
+ var $messageDoc = $messageDescViewer.find( '.message-desc' );
+
+ // Display the documentation only if it's not empty and
+ // documentation language is configured
+ if ( documentation.error ) {
+ // TODO: better error handling, especially since the presence of documentation
+ // is heavily hinted at in the UI
+ return;
+ } else if ( documentation.value ) {
+ var documentationDir = $.uls.data.getDir( documentation.language );
+
+ // Show the documentation and set appropriate
+ // lang and dir attributes.
+ // The message documentation is assumed to be written
+ // in the content language of the wiki.
+ var langAttr = {
+ lang: documentation.language,
+ dir: documentationDir
+ };
+
+ // Possible classes:
+ // * mw-content-ltr
+ // * mw-content-rtl
+ // (The direction classes are needed, because the documentation
+ // is likely to be MediaWiki-formatted text.)
+ $messageDoc
+ .attr( langAttr )
+ .addClass( 'mw-content-' + documentationDir )
+ .html( documentation.html );
+
+ $messageDoc.find( 'a[href]' ).prop( 'target', '_blank' );
+
+ this.$editor.find( '.tux-textarea-documentation' )
+ .attr( langAttr )
+ .val( documentation.value );
+
+ $descEditLink.text( mw.msg( 'tux-editor-edit-desc' ) );
+
+ if ( documentation.html.length > 500 ) {
+ var $readMore = $( '<span>' )
+ .addClass( 'read-more column' )
+ .text( mw.msg( 'tux-editor-message-desc-more' ) );
+
+ var expand = function () {
+ $messageDoc.removeClass( 'compact' );
+ $readMore.text( mw.msg( 'tux-editor-message-desc-less' ) );
+ };
+
+ var readMore = function () {
+ if ( $messageDoc.hasClass( 'compact' ) ) {
+ expand();
+ } else {
+ $messageDoc.addClass( 'compact' );
+ $readMore.text( mw.msg( 'tux-editor-message-desc-more' ) );
+ }
+ };
+
+ $readMore.on( 'click', readMore );
+
+ $messageDescViewer.find( '.message-desc-control' )
+ .prepend( $readMore );
+
+ $messageDoc.addClass( 'long compact' ).on( 'mouseenter mouseleave', expand );
+ }
+
+ // Enable dynamic content, such as collapsible elements
+ mw.hook( 'wikipage.content' ).fire( $messageDoc );
+ } else {
+ $descEditLink.text( mw.msg( 'tux-editor-add-desc' ) );
+ }
+
+ $messageDescViewer.removeClass( 'hide' );
+ },
+
+ /**
+ * Shows uneditable documentation.
+ *
+ * @param {Object} documentation A gettext object as returned by API.
+ */
+ showUneditableDocumentation: function ( documentation ) {
+ if ( documentation.error ) {
+ return;
+ }
+
+ var dir = $.uls.data.getDir( documentation.language );
+
+ // The following classes are used here:
+ // * mw-content-ltr
+ // * mw-content-rtl
+ this.$editor.find( '.uneditable-documentation' )
+ .attr( {
+ lang: documentation.language,
+ dir: dir
+ } )
+ .addClass( 'mw-content-' + dir )
+ .html( documentation.html )
+ .removeClass( 'hide' );
+ },
+
+ /**
+ * Shows the translations from other languages
+ *
+ * @param {Array} translations An inotherlanguages array as returned by the translation helpers API.
+ */
+ showAssistantLanguages: function ( translations ) {
+ if ( translations.error ) {
+ return;
+ }
+
+ if ( !translations.length ) {
+ return;
+ }
+
+ var $elements = translations.map( function ( translation ) {
+ var langAttr = {
+ lang: translation.language,
+ dir: $.uls.data.getDir( translation.language )
+ };
+
+ var $element = $( '<div>' )
+ .addClass( 'row in-other-language' )
+ .append(
+ $( '<div>' )
+ .addClass( 'nine columns suggestiontext' )
+ .attr( langAttr )
+ .text( translation.value ),
+ $( '<div>' )
+ .addClass( 'three columns language text-right' )
+ .attr( langAttr )
+ .text( $.uls.data.getAutonym( translation.language ) )
+ );
+
+ this.suggestionAdder( $element, translation.value );
+
+ return $element;
+ }.bind( this ) );
+
+ this.$editor.find( '.in-other-languages-title' )
+ .removeClass( 'hide' )
+ .after( $elements );
+ },
+
+ /**
+ * Shows the translation suggestions from Translation Memory
+ *
+ * @param {Array} translations A ttmserver array as returned by API.
+ */
+ showTranslationMemory: function ( translations ) {
+ if ( !translations.length ) {
+ return;
+ }
+
+ // Container for the suggestions
+ var $tmSuggestions = $( '<div>' ).addClass( 'tm-suggestions' );
+
+ var $heading = this.$editor.find( '.tm-suggestions-title' );
+ $heading.after( $tmSuggestions );
+
+ var $messageList = $( '.tux-messagelist' );
+ var lang = $messageList.data( 'targetlangcode' );
+ var dir = $messageList.data( 'targetlangdir' );
+
+ var suggestions = {};
+
+ translations.forEach( function ( translation ) {
+ // Remove once formatversion=2
+ if ( translation.local === '' ) {
+ translation.local = true;
+ } else if ( translation.local === undefined ) {
+ translation.local = false;
+ }
+
+ if ( translation.local && translation.location === this.message.title ) {
+ // Do not add self-suggestions
+ return;
+ }
+
+ // Check if suggestion with this value already exists
+ var suggestion = suggestions[ translation.target ];
+ if ( suggestion ) {
+ suggestion.count++;
+ suggestion.sources.push( translation );
+ suggestion.$showSourcesElement.children( 'a' ).text(
+ mw.msg(
+ 'tux-editor-n-uses',
+ mw.language.convertNumber( suggestion.count )
+ )
+ );
+
+ return;
+ }
+
+ suggestion = {};
+
+ suggestion.$showSourcesElement = $( '<div>' )
+ .addClass( 'text-right columns twelve' )
+ .append( $( '<a>' ).addClass( 'n-uses' ) );
+
+ suggestion.$element = $( '<div>' )
+ .addClass( 'row tm-suggestion' )
+ .append(
+ $( '<div>' )
+ .addClass( 'nine columns suggestiontext' )
+ .attr( {
+ lang: lang,
+ dir: dir
+ } )
+ .text( translation.target ),
+ $( '<div>' )
+ .addClass( 'three columns quality text-right' )
+ .text(
+ mw.msg(
+ 'tux-editor-tm-match',
+ mw.language.convertNumber( Math.floor( translation.quality * 100 ) )
+ )
+ ),
+ suggestion.$showSourcesElement
+ );
+
+ suggestion.count = 1;
+ suggestion.sources = [];
+ suggestion.sources.push( translation );
+
+ this.suggestionAdder( suggestion.$element, translation.target );
+
+ suggestions[ translation.target ] = suggestion;
+ }, this );
+
+ if ( $.isEmptyObject( suggestions ) ) {
+ return;
+ }
+
+ var currentSuggestionsOrder = [];
+ Object.keys( suggestions ).forEach( function ( key ) {
+ currentSuggestionsOrder.push( {
+ key: key,
+ count: suggestions[ key ].count,
+ quality: suggestions[ key ].sources[ 0 ].quality
+ } );
+ } );
+
+ currentSuggestionsOrder.sort( function ( a, b ) {
+ if ( a.quality === b.quality ) {
+ return b.count - a.count;
+ }
+ return a.quality < b.quality ? 1 : -1;
+ } );
+
+ currentSuggestionsOrder.forEach( function ( item ) {
+ var currentSuggestion = suggestions[ item.key ];
+ currentSuggestion.$showSourcesElement.on( 'click', function ( e ) {
+ this.onShowTranslationMemorySources( e, currentSuggestion );
+ }.bind( this ) );
+ $tmSuggestions.append( currentSuggestion.$element );
+ }, this );
+
+ $heading.removeClass( 'hide' );
+ },
+
+ onShowTranslationMemorySources: function ( e, suggestion ) {
+ e.stopPropagation();
+
+ if ( suggestion.$sourcesElement ) {
+ suggestion.$sourcesElement.toggleClass( 'hide' );
+ return;
+ }
+
+ // Build the sources list. Add class to show external icons :(
+ suggestion.$sourcesElement = $( '<ul>' )
+ .addClass( 'tux-tm-suggestion-source mw-parser-output' );
+
+ // Sort local suggestions first, then alphabetically
+ suggestion.sources.sort( function ( a, b ) {
+ if ( a.local === b.local ) {
+ return a.location.localeCompare( b.location );
+ } else {
+ return a.local ? -1 : 1;
+ }
+ } );
+
+ suggestion.sources.forEach( function ( translation ) {
+ suggestion.$sourcesElement.append(
+ $( '<li>' )
+ .append(
+ $( '<a>' )
+ .prop( 'target', '_blank' )
+ .prop( 'href', translation.editorUrl || translation.uri )
+ .text( translation.location )
+ .toggleClass( 'external', !translation.local )
+ )
+ );
+ } );
+ suggestion.$element.after( suggestion.$sourcesElement );
+ },
+
+ /**
+ * Shows the translation from machine translation systems
+ *
+ * @param {Array} suggestions
+ */
+ showMachineTranslations: function ( suggestions ) {
+ if ( !suggestions.length ) {
+ return;
+ }
+
+ var translateEditor = this;
+
+ var $mtSuggestions = this.$editor.find( '.tm-suggestions' );
+
+ if ( !$mtSuggestions.length ) {
+ $mtSuggestions = $( '<div>' ).addClass( 'tm-suggestions' );
+ }
+
+ this.$editor.find( '.tm-suggestions-title' )
+ .removeClass( 'hide' )
+ .after( $mtSuggestions );
+
+ var $messageList = $( '.tux-messagelist' );
+ var translationLang = $messageList.data( 'targetlangcode' );
+ var translationDir = $messageList.data( 'targetlangdir' );
+
+ suggestions.forEach( function ( translation ) {
+ var $translation;
+
+ $translation = $( '<div>' )
+ .addClass( 'row tm-suggestion' )
+ .append(
+ $( '<div>' )
+ .addClass( 'nine columns suggestiontext' )
+ .attr( {
+ lang: translationLang,
+ dir: translationDir
+ } )
+ .text( translation.target ),
+ $( '<div>' )
+ .addClass( 'three columns text-right service' )
+ .text( translation.service )
+ );
+
+ translateEditor.suggestionAdder( $translation, translation.target );
+
+ $mtSuggestions.append( $translation );
+ } );
+ },
+
+ /**
+ * Makes the $source element clickable and clicking it will replace the
+ * translation textarea with the given suggestion.
+ *
+ * @param {jQuery} $source
+ * @param {string} suggestion Text to add
+ */
+ suggestionAdder: function ( $source, suggestion ) {
+ var $target = this.$editor.find( '.tux-textarea-translation' );
+ if ( $target.get( 0 ).readOnly ) {
+ // If the textarea is disabled, then disable the translation aid.
+ // Do not add the click handler.
+ $source.addClass( 'tux-translation-aid-disabled' );
+ return;
+ }
+ var inserter = function () {
+ var selection;
+ if ( window.getSelection ) {
+ selection = window.getSelection().toString();
+ } else if ( document.selection && document.selection.type !== 'Control' ) {
+ selection = document.selection.createRange().text;
+ }
+
+ if ( !selection ) {
+ $target.val( suggestion ).trigger( 'focus' ).trigger( 'input' );
+ }
+ };
+
+ $source.on( 'click', inserter );
+ $source.addClass( 'shortcut-activated' );
+ },
+
+ /**
+ * Shows the support options for the translator.
+ *
+ * @param {Object} support A support object as returned by API.
+ */
+ showSupportOptions: function ( support ) {
+ // Support URL
+ if ( support.url ) {
+ this.$editor.find( '.help a' ).attr( 'href', support.url );
+ this.$editor.find( '.help' ).removeClass( 'hide' );
+ }
+ },
+
+ /**
+ * Adds buttons for quickly inserting insertables.
+ *
+ * @param {Object} insertables A insertables object as returned by API.
+ */
+ addInsertables: function ( insertables ) {
+ var count = insertables.length,
+ $sourceMessage = this.$editor.find( '.sourcemessage' ),
+ $buttonArea = this.$editor.find( '.tux-editor-insert-buttons' ),
+ $textarea = this.$editor.find( '.tux-textarea-translation' );
+
+ for ( var i = 0; i < count; i++ ) {
+ // The dir and lang attributes must be set here,
+ // because the language of the insertables is the language
+ // of the source message and not of the translation.
+ // The direction may appear confusing, for example,
+ // in tvar strings, which would appear with the dollar sign
+ // on the wrong end.
+ $( '<button>' )
+ .prop( {
+ lang: $sourceMessage.prop( 'lang' ),
+ dir: $sourceMessage.prop( 'dir' )
+ } )
+ .addClass( 'insertable shortcut-activated' )
+ .text( insertables[ i ].display )
+ .data( 'iid', i )
+ .appendTo( $buttonArea );
+ }
+
+ $buttonArea.on( 'click', '.insertable', function () {
+ var data = insertables[ $( this ).data( 'iid' ) ];
+ if ( data.post === '' ) { // 1-piece insertables
+ $textarea.textSelection( 'replaceSelection', data.pre );
+ } else {
+ $textarea.textSelection( 'encapsulateSelection', {
+ pre: data.pre,
+ post: data.post
+ } );
+ }
+ $textarea.trigger( 'focus' ).trigger( 'input' );
+ } );
+
+ this.resizeInsertables( $textarea );
+ },
+
+ /**
+ * Loads and shows edit summaries
+ *
+ * @param {Array} editsummaries An array of edit summaries as returned by the API
+ */
+ showEditSummaries: function ( editsummaries ) {
+ if ( !editsummaries.length ) {
+ return;
+ }
+
+ var $editSummariesContainer = this.$editor.find( '.edit-summaries' );
+
+ if ( !$editSummariesContainer.length ) {
+ $editSummariesContainer = $( '<div>' ).addClass( 'edit-summaries' );
+ }
+ var $editSummariesTitle = this.$editor.find( '.edit-summaries-title' );
+ $editSummariesTitle.after( $editSummariesContainer );
+ var $summaryList = $( '<ul>' );
+ var lastEmptySummaryCount = 0;
+ var pageTitle = this.message.title;
+ editsummaries.forEach( function ( comment ) {
+ var $summaryListItem = $( '<li>' );
+ // An additional tag is added so that display: list-item can be retained
+ // for the <li> tag
+ var $summaryItem = $( '<span>' );
+
+ if ( comment.summary === '' ) {
+ var $lastSummaryItem = $summaryList.find( 'li' ).last();
+
+ // Last item added was an empty summary and the current one is also empty,
+ // so update that instead of adding a new one.
+ if ( $lastSummaryItem.hasClass( 'update-without-summary' ) ) {
+ $lastSummaryItem.find( 'span' ).text(
+ mw.msg(
+ 'tux-editor-changes-without-summary',
+ mw.language.convertNumber( ++lastEmptySummaryCount )
+ )
+ );
+ // Remove the timestamp link if there is more than one empty summary.
+ $lastSummaryItem.find( '.edit-summary-time' ).remove();
+ // Remove the spacer since we no longer have a timestamp
+ $lastSummaryItem.find( '.edit-summary-spacer' ).remove();
+ } else {
+ // Add a new empty summary list item
+ $summaryItem.append(
+ $( '<span>' ).text(
+ mw.msg(
+ 'tux-editor-changes-without-summary',
+ mw.language.convertNumber( ++lastEmptySummaryCount )
+ )
+ ),
+ getSpacer(),
+ getEditSummaryTimeWithDiff( pageTitle, comment )
+ );
+
+ $summaryList.append(
+ $summaryListItem
+ .addClass( 'update-without-summary' )
+ .append( $summaryItem )
+ );
+ }
+ } else {
+ lastEmptySummaryCount = 0;
+ $summaryItem.append(
+ $( '<bdi>' )
+ .prop( 'lang', '' )
+ .addClass( 'edit-summary-message' )
+ .html( comment.summary ),
+ getSpacer(),
+ getEditSummaryTimeWithDiff( pageTitle, comment )
+ );
+
+ $summaryList.append( $summaryListItem.append( $summaryItem ) );
+ }
+ } );
+
+ $editSummariesContainer.append( $summaryList );
+ $editSummariesTitle.removeClass( 'hide' );
+ },
+
+ updateEditSummaryTimestamp: function () {
+ // If the editor is hidden, don't bother updating anything or setting up another timeout
+ if ( this.$editor.hasClass( 'hide' ) ) {
+ return;
+ }
+
+ var $dateEntries = this.$editor.find( '.edit-summary-time' );
+ // Edit summaries may not be loaded yet.
+ // It is also possible that there are no summary or date entries.
+ if ( $dateEntries.length !== 0 ) {
+ // There are some date entries, load moment.js and update them.
+ mw.loader.using( 'moment' ).done(
+ function () {
+ // Update the time for the edit summaries if a user leaves their
+ // browser open and comes back later.
+ $dateEntries.each( function () {
+ var $entry = $( this );
+ var timeago = moment
+ .utc( $entry.data( 'commentTimestamp' ), 'YYYYMMDDhhmmss' )
+ .fromNow();
+ $entry.text( timeago );
+ } );
+ }
+ );
+ }
+
+ setTimeout( this.updateEditSummaryTimestamp.bind( this ), 20000 );
+ },
+
+ /**
+ * Handles any necessary updates to translation helpers when an editor is reopened.
+ */
+ updateTranslationHelpers: function () {
+ this.updateEditSummaryTimestamp();
+ },
+
+ /**
+ * Loads and shows the translation helpers.
+ */
+ showTranslationHelpers: function () {
+ // API call to get translation suggestions from other languages
+ // callback should render suggestions to the editor's info column
+ var api = new mw.Api();
+
+ api.get( {
+ action: 'translationaids',
+ title: this.message.title,
+ uselang: mw.config.get( 'wgUserLanguage' )
+ } ).done( function ( result ) {
+ this.$editor.find( '.infocolumn .loading' ).remove();
+
+ if ( !result.helpers ) {
+ mw.log.warn( 'API did not return any translation helpers.' );
+ return false;
+ }
+
+ this.showMessageDocumentation( result.helpers.documentation );
+ this.showUneditableDocumentation( result.helpers.gettext );
+ this.showAssistantLanguages( result.helpers.inotherlanguages );
+ this.showTranslationMemory( result.helpers.ttmserver );
+ this.showMachineTranslations( result.helpers.mt );
+ this.showSupportOptions( result.helpers.support );
+ this.addDefinitionDiff( result.helpers.definitiondiff );
+ this.addInsertables( result.helpers.insertables );
+ this.showEditSummaries( result.helpers.editsummaries );
+
+ // Load the possible warnings as soon as possible, do not wait
+ // for the user to make changes. Otherwise users might try confirming
+ // translations which fail checks. Confirmation seems to work but
+ // the message will continue to appear outdated.
+ if ( this.message.properties &&
+ this.message.properties.status === 'fuzzy'
+ ) {
+ this.validateTranslation();
+ }
+
+ mw.hook( 'mw.translate.editor.showTranslationHelpers' ).fire(
+ result.helpers, this.$editor
+ );
+
+ }.bind( this ) ).fail( function ( errorCode, results ) {
+ // results.error may be undefined
+ var errorInfo = results && results.error && results.error.info || 'Unknown error';
+ this.$editor.find( '.infocolumn .loading' ).remove();
+ this.$editor.find( '.infocolumn' ).append(
+ $( '<div>' )
+ .text( mw.msg( 'tux-editor-loading-failed', errorInfo ) )
+ // Added warningbox for MW < 1.38
+ .addClass(
+ 'mw-message-box-warning mw-message-box warningbox tux-translation-aid-error'
+ )
+ );
+ mw.log.error( 'Error loading translation aids:', errorCode, results );
+ }.bind( this ) );
+
+ mw.hook( 'mw.translate.editor.afterEditorShown' ).add( function () {
+ // Take care of updating any helpers when the editor is opened
+ this.updateTranslationHelpers();
+ }.bind( this ) );
+ }
+ };
+
+ mw.translate = mw.translate || {};
+
+ mw.translate = $.extend( mw.translate, {
+ /**
+ * Get the documentation edit URL for a title
+ *
+ * @param {string} title Message title with namespace
+ * @return {string} URL for editing the documentation
+ */
+ getDocumentationEditURL: function ( title ) {
+ return mw.util.getUrl(
+ title + '/' + mw.config.get( 'wgTranslateDocumentationLanguageCode' ),
+ { action: 'edit' }
+ );
+ }
+ } );
+
+ // Extend the translate editor
+ mw.translate.editor = mw.translate.editor || {};
+ $.extend( mw.translate.editor, translateEditorHelpers );
+
+}() );
diff --git a/Translate/resources/js/ext.translate.editor.js b/Translate/resources/js/ext.translate.editor.js
new file mode 100644
index 00000000..794d3b6f
--- /dev/null
+++ b/Translate/resources/js/ext.translate.editor.js
@@ -0,0 +1,1452 @@
+/* global autosize */
+
+( function () {
+ 'use strict';
+
+ /**
+ * Dictionary of classes that will be used by different types of notices
+ * TODO: Should probably review and rename these classes in the future to
+ * be more unique to the translate extension? Some themes use warning,
+ * error classes to style elements, and we do take help from these.
+ */
+ var noticeTypes = {
+ warning: 'warning',
+ error: 'error',
+ translateFail: 'translation-saving',
+ diff: 'diff',
+ fuzzy: 'fuzzy',
+ getAllClasses: function () {
+ var classes = [];
+
+ for ( var prop in this ) {
+ if ( typeof this[ prop ] === 'string' ) {
+ classes.push( this[ prop ] );
+ }
+ }
+
+ return classes;
+ }
+ };
+
+ /**
+ * TranslateEditor Plugin
+ * Prepare the translation editor UI for a translation unit (message).
+ * This is mainly used with the messagetable plugin,
+ * but it is independent of messagetable.
+ * Example usage:
+ *
+ * $( 'div.messageRow' ).translateeditor( {
+ * message: messageObject // Mandatory message object
+ * } );
+ *
+ * Assumptions: The jquery element to which translateeditor is applied will
+ * internally contain the editor's generated UI. So it is going to have the same width
+ * and inherited properies of the container.
+ * The container can mark the message item with class 'message'. This is not
+ * mandatory, but if found, when the editor is opened, the message item will be hidden
+ * and the editor will appear as if the message is replaced by the editor.
+ * See the UI of Translate messagetable for a demo.
+ *
+ * @param {HTMLElement} element
+ * @param {Object} options
+ * @param {Function} [options.beforeSave] Callback to call when translation is going to be saved.
+ * @param {Function} [options.onReady] Callback to call when the editor is ready.
+ * @param {Function} [options.onSave] Callback to call when translation has been saved.
+ * @param {Function} [options.onSkip] Callback to call when a message is skipped.
+ * @param {Object} options.message Object as returned by messagecollection api.
+ * @param {mw.translate.TranslationApiStorage} [options.storage]
+ */
+ function TranslateEditor( element, options ) {
+ this.$editTrigger = $( element );
+ this.$editor = null;
+ this.options = options;
+ this.message = this.options.message;
+ this.$messageItem = this.$editTrigger.find( '.message' );
+ this.shown = false;
+ this.dirty = false;
+ this.saving = false;
+ this.expanded = false;
+ this.listen();
+ this.storage = this.options.storage || new mw.translate.TranslationApiStorage();
+ this.canDelete = mw.translate.canDelete();
+ this.editFontClass = 'mw-editfont-' + mw.user.options.get( 'editfont' );
+ this.delayValidation = delayer();
+ this.validating = null;
+ }
+
+ TranslateEditor.prototype = {
+
+ /**
+ * Initialize the plugin
+ */
+ init: function () {
+ // In case we have already created the editor earlier,
+ // don't add a new one. The existing one may have unsaved
+ // changes.
+ if ( this.$editor ) {
+ return;
+ }
+
+ this.render();
+ // onReady callback
+ if ( this.options.onReady ) {
+ this.options.onReady.call( this );
+ }
+ },
+
+ /**
+ * Render the editor UI
+ */
+ render: function () {
+ this.$editor = $( '<div>' )
+ .addClass( 'row tux-message-editor hide' )
+ .append(
+ this.prepareEditorColumn(),
+ this.prepareInfoColumn()
+ );
+
+ this.expanded = false;
+ this.$editTrigger.append( this.$editor );
+
+ if ( this.message.properties && this.message.properties.status === 'fuzzy' ) {
+ this.addNotice(
+ mw.message( 'tux-editor-outdated-notice' ).escaped(),
+ noticeTypes.fuzzy
+ );
+ }
+
+ this.showTranslationHelpers();
+ },
+
+ /**
+ * Mark the message as unsaved because of edits, can be resumed later
+ *
+ * @param {string} [highlightClass] Class for background highlighting
+ */
+ markUnsaved: function ( highlightClass ) {
+ var $tuxListStatus = this.$editTrigger.find( '.tux-list-status' );
+
+ highlightClass = highlightClass || 'tux-highlight';
+
+ $tuxListStatus.children( '.tux-status-unsaved' ).remove();
+ $tuxListStatus.children().addClass( 'hide' );
+ // `highlightClass` documented above
+ // eslint-disable-next-line mediawiki/class-doc
+ $( '<span>' )
+ .addClass( 'tux-status-unsaved ' + highlightClass )
+ .text( mw.msg( 'tux-status-unsaved' ) )
+ .appendTo( $tuxListStatus );
+ },
+
+ /**
+ * Mark the message as unsaved because of saving failure.
+ */
+ markUnsavedFailure: function () {
+ this.markUnsaved( 'tux-notice' );
+ },
+
+ /**
+ * Mark the message as no longer unsaved
+ */
+ markUnunsaved: function () {
+ var $tuxListStatus = this.$editTrigger.find( '.tux-list-status' );
+
+ $tuxListStatus.children( '.tux-status-unsaved' ).remove();
+ $tuxListStatus.children().removeClass( 'hide' );
+
+ this.dirty = false;
+ mw.translate.dirty = false;
+ },
+
+ /**
+ * Mark the message as being saved
+ */
+ markSaving: function () {
+ var $tuxListStatus = this.$editTrigger.find( '.tux-list-status' );
+
+ // Disable the save button
+ this.$editor.find( '.tux-editor-save-button' )
+ .prop( 'disabled', true );
+
+ // Add a "Saving" indicator
+ $tuxListStatus.empty();
+ $( '<span>' )
+ .addClass( 'tux-status-unsaved' )
+ .text( mw.msg( 'tux-status-saving' ) )
+ .appendTo( $tuxListStatus );
+ },
+
+ /**
+ * Mark the message as translated and successfully saved.
+ */
+ markTranslated: function () {
+ this.$editTrigger.find( '.tux-list-status' )
+ .empty()
+ .append( $( '<span>' )
+ .addClass( 'tux-status-translated' )
+ .text( mw.msg( 'tux-status-translated' ) )
+ );
+
+ this.$messageItem
+ .removeClass( 'untranslated translated fuzzy proofread' )
+ .addClass( 'translated' );
+
+ this.dirty = false;
+
+ if ( this.message.properties ) {
+ $( '.tux-action-bar .tux-statsbar' ).trigger(
+ 'change',
+ [ 'translated', this.message.properties.status ]
+ );
+
+ this.message.properties.status = 'translated';
+ // TODO: Update any other statsbar for the same group in the page.
+ }
+ },
+
+ /**
+ * Save the translation
+ */
+ save: function () {
+ var translateEditor = this;
+
+ mw.hook( 'mw.translate.editor.beforeSubmit' ).fire( translateEditor.$editor );
+ var translation = translateEditor.$editor.find( '.tux-textarea-translation' ).val();
+ var editSummary = translateEditor.$editor.find( '.tux-input-editsummary' ).val() || '';
+
+ translateEditor.saving = true;
+
+ // beforeSave callback
+ if ( translateEditor.options.beforeSave ) {
+ translateEditor.options.beforeSave( translation );
+ }
+
+ // For responsiveness and efficiency,
+ // immediately move to the next message.
+ translateEditor.next();
+
+ // Now the message definitely has a history,
+ // so make sure the history menu item is shown
+ translateEditor.$editor.find( '.message-tools-history' )
+ .removeClass( 'hide' );
+
+ // Show the delete menu item if the user can delete
+ if ( this.canDelete ) {
+ translateEditor.$editor.find( '.message-tools-delete' )
+ .removeClass( 'hide' );
+ }
+
+ // Hide translation related to saving failure before saving again.
+ translateEditor.removeNotices( noticeTypes.translateFail );
+ this.storage.save(
+ translateEditor.message.title,
+ translation,
+ editSummary
+ ).done( function ( response, xhr ) {
+ var editResp = response.edit;
+ if ( editResp.result === 'Success' ) {
+ translateEditor.message.translation = translation;
+ translateEditor.onSaveSuccess();
+ } else {
+ translateEditor.onSaveFail( mw.msg( 'tux-save-unknown-error' ) );
+ mw.log( response, xhr );
+ }
+ } ).fail( function ( errorCode, response ) {
+ if ( errorCode === 'assertuserfailed' ) {
+ // eslint-disable-next-line no-alert
+ alert( mw.msg( 'tux-session-expired' ) );
+ } else if ( errorCode === 'translate-validation-failed' ) {
+ // Cancel the translation check API call to avoid extra notices
+ // from appearing.
+ if ( translateEditor.validating ) {
+ translateEditor.validating.abort();
+ } else {
+ // Cancel the translation check API call that might be made in the future.
+ translateEditor.delayValidation( false );
+ }
+
+ translateEditor.removeNotices( [ noticeTypes.error, noticeTypes.warning ] );
+
+ if ( response.error && response.error.validation ) {
+ translateEditor.displayNotices( response.error.validation.warnings, noticeTypes.warning );
+ translateEditor.displayNotices( response.error.validation.errors, noticeTypes.error );
+ }
+ }
+
+ // This is placed at the bottom to ensure that the save error appears at the
+ // top of the notices
+ translateEditor.onSaveFail(
+ response.error && response.error.info || mw.msg( 'tux-save-unknown-error' )
+ );
+
+ // Display all the notices whenever an error occurs.
+ translateEditor.showMoreNotices();
+ } );
+ },
+
+ /**
+ * Success handler for the translation saving.
+ */
+ onSaveSuccess: function () {
+ this.markTranslated();
+ this.$editTrigger.find( '.tux-list-translation' )
+ .text( this.message.translation );
+ this.saving = false;
+
+ // remove notices if any.
+ this.removeNotices( noticeTypes.getAllClasses() );
+
+ this.$editor.find( '.tux-notice' ).empty();
+ this.$editor.find( '.tux-more-notices' )
+ .addClass( 'hide' )
+ .empty();
+
+ $( '.tux-editor-clear-translated' )
+ .removeClass( 'hide' )
+ .prop( 'disabled', false );
+
+ this.$editor.find( '.tux-input-editsummary' )
+ .val( '' )
+ .prop( 'disabled', true );
+
+ // Save callback
+ if ( this.options.onSave ) {
+ this.options.onSave( this.message.translation );
+ }
+
+ mw.translate.dirty = false;
+ mw.hook( 'mw.translate.editor.afterSubmit' ).fire( this.$editor );
+
+ if ( mw.track ) {
+ mw.track( 'ext.translate.event.translation', this.message );
+ }
+ },
+
+ /**
+ * Marks that there was a problem saving a translation.
+ *
+ * @param {string} error Strings of notices to display.
+ */
+ onSaveFail: function ( error ) {
+ this.addNotice(
+ mw.msg( 'tux-editor-save-failed', error ),
+ noticeTypes.translateFail
+ );
+ this.saving = false;
+ this.markUnsavedFailure();
+
+ // Enable the save button again
+ this.$editor.find( '.tux-editor-save-button' ).prop( 'disabled', false );
+ },
+
+ /**
+ * Skip the current message.
+ * Record it to mark as hard.
+ */
+ skip: function () {
+ // @TODO devise good algorithm for identifying hard to translate messages
+ },
+
+ /**
+ * Jump to the next translation editor row.
+ */
+ next: function () {
+ var $next = this.$editTrigger.next( '.tux-message' );
+
+ // Determine the next message to show. The immediate next one maybe hidden
+ // for example in case of filtering
+ while ( $next.length && $next.hasClass( 'hide' ) ) {
+ $next = $next.next( '.tux-message' );
+ }
+
+ // If this is the last message, just hide it
+ if ( !$next.length ) {
+ this.hide();
+
+ return;
+ }
+
+ $next.data( 'translateeditor' ).show();
+
+ // Scroll the page a little bit up, slowly.
+ if ( $( document ).height() -
+ ( $( window ).height() + window.pageYOffset + $next.height() ) > 0
+ ) {
+ $( 'html, body' ).stop().animate( {
+ scrollTop: $( '.tux-message-editor:visible' ).offset().top - 85
+ }, 500 );
+ }
+ },
+
+ /**
+ * Creates a menu element for the message tools.
+ *
+ * @param {string} className Used as the element's CSS class
+ * @param {Object} query Used as the query in the mw.Uri object
+ * @param {string} message The message of the label of the menu item
+ * @return {jQuery} The new menu item element
+ */
+ createMessageToolsItem: function ( className, query, message ) {
+ var uri = new mw.Uri();
+
+ uri.path = mw.config.get( 'wgScript' );
+ uri.query = query;
+
+ return $( '<li>' )
+ .addClass( className )
+ .append( $( '<a>' )
+ .attr( {
+ href: uri.toString(),
+ target: '_blank'
+ } )
+ .text( mw.msg( message ) )
+ );
+ },
+
+ /**
+ * Creates an element with a dropdown menu including
+ * tools for the translators.
+ *
+ * @return {jQuery} The new message tools menu element
+ */
+ createMessageTools: function () {
+ var $editItem = this.createMessageToolsItem(
+ 'message-tools-edit',
+ {
+ title: this.message.title,
+ action: 'edit'
+ },
+ 'tux-editor-message-tools-show-editor'
+ );
+
+ if ( !mw.translate.canTranslate() ) {
+ $editItem.addClass( 'hide' );
+ }
+
+ var $historyItem = this.createMessageToolsItem(
+ 'message-tools-history',
+ {
+ title: this.message.title,
+ action: 'history'
+ },
+ 'tux-editor-message-tools-history'
+ );
+
+ var $deleteItem = this.createMessageToolsItem(
+ 'message-tools-delete',
+ {
+ title: this.message.title,
+ action: 'delete'
+ },
+ 'tux-editor-message-tools-delete'
+ );
+
+ // Hide these links if the translation doesn't actually exist.
+ // They will be shown when a translation will be created.
+ if ( this.message.translation === null ) {
+ $historyItem.addClass( 'hide' );
+ $deleteItem.addClass( 'hide' );
+ } else if ( !this.canDelete ) {
+ $deleteItem.addClass( 'hide' );
+ }
+
+ // A link to Special:Translations,
+ // with translations of this message to other languages
+ var $translationsItem = this.createMessageToolsItem(
+ 'message-tools-translations',
+ {
+ title: 'Special:Translations',
+ message: this.message.title
+ },
+ 'tux-editor-message-tools-translations'
+ );
+
+ var $linkToThisItem = this.createMessageToolsItem(
+ 'message-tools-linktothis',
+ {
+ title: 'Special:Translate',
+ showMessage: this.message.key,
+ group: this.message.primaryGroup,
+ language: this.message.targetLanguage
+ },
+ 'tux-editor-message-tools-linktothis'
+ );
+
+ return $( '<ul>' )
+ .addClass( 'tux-dropdown-menu tux-message-tools-menu hide' )
+ .append( $editItem, $historyItem, $deleteItem, $translationsItem, $linkToThisItem );
+ },
+
+ prepareEditorColumn: function () {
+ var translateEditor = this,
+ $discardChangesButton = $( [] ),
+ $saveButton = $( [] ),
+ $messageTools = translateEditor.createMessageTools(),
+ canTranslate = mw.translate.canTranslate();
+
+ var $editorColumn = $( '<div>' )
+ .addClass( 'seven columns editcolumn' );
+
+ var $messageKeyLabel = $( '<div>' )
+ .addClass( 'ten columns messagekey' )
+ .text( this.message.title )
+ .append(
+ $( '<span>' ).addClass( 'caret' ),
+ $messageTools
+ )
+ .on( 'click', function ( e ) {
+ $messageTools.toggleClass( 'hide' );
+ e.stopPropagation();
+ } );
+
+ var $closeIcon = $( '<span>' )
+ .addClass( 'one column close' )
+ .attr( 'title', mw.msg( 'tux-editor-close-tooltip' ) )
+ .on( 'click', function ( e ) {
+ translateEditor.hide();
+ e.stopPropagation();
+ } );
+
+ var $infoToggleIcon = $( '<span>' )
+ // Initially the editor column is contracted,
+ // so show the expand button first
+ .addClass( 'one column editor-info-toggle editor-expand' )
+ .attr( 'title', mw.msg( 'tux-editor-expand-tooltip' ) )
+ .on( 'click', function ( e ) {
+ translateEditor.infoToggle( $( this ) );
+ e.stopPropagation();
+ } );
+
+ var $layoutActions = $( '<div>' )
+ .addClass( 'two columns layout-actions' )
+ .append( $closeIcon, $infoToggleIcon );
+
+ $editorColumn.append( $( '<div>' )
+ .addClass( 'row tux-editor-titletools' )
+ .append( $messageKeyLabel, $layoutActions )
+ );
+
+ var $messageList = $( '.tux-messagelist' );
+ var originalTranslation = this.message.translation;
+ var sourceString = this.message.definition;
+ // The following classes are used here:
+ // * mw-editfont-serif
+ // * mw-editfont-sans-serif
+ // * mw-editfont-monospace
+ var $sourceString = $( '<span>' )
+ .addClass( 'twelve columns sourcemessage ' + this.editFontClass )
+ .attr( {
+ lang: $messageList.data( 'sourcelangcode' ),
+ dir: $messageList.data( 'sourcelangdir' )
+ } )
+ .text( sourceString );
+
+ // Adjust the font size for the message string based on the length
+ if ( sourceString.length > 100 && sourceString.length < 200 ) {
+ $sourceString.addClass( 'long' );
+ }
+
+ if ( sourceString.length > 200 ) {
+ $sourceString.addClass( 'longer' );
+ }
+
+ $editorColumn.append( $( '<div>' )
+ .addClass( 'row' )
+ .append( $sourceString )
+ );
+
+ var $notices = $( '<div>' )
+ .addClass( 'tux-notice hide' );
+
+ var $moreNoticesTab = $( '<div>' )
+ .addClass( 'tux-more-notices hide' )
+ .on( 'click', function () {
+ var $this = $( this ),
+ $moreNotices = $notices.children(),
+ lastNoticeIndex = $moreNotices.length - 1;
+
+ // If the notice list is not open, only one notice is shown
+ if ( $this.hasClass( 'open' ) ) {
+ $moreNotices.each( function ( index, element ) {
+ // The first element must always be shown
+ if ( index ) {
+ $( element ).addClass( 'hide' );
+ }
+ } );
+
+ $this
+ .removeClass( 'open' )
+ .text( mw.msg( 'tux-notices-more', lastNoticeIndex ) );
+ } else {
+ $moreNotices.each( function ( index, element ) {
+ // The first element must always be shown
+ if ( index ) {
+ $( element ).removeClass( 'hide' );
+ }
+ } );
+
+ $this
+ .addClass( 'open' )
+ .text( mw.msg( 'tux-notices-hide' ) );
+ }
+
+ translateEditor.toggleMoreButtonClass();
+ } );
+
+ var $textarea = this.getTranslationEditor( this.message.targetLanguage );
+
+ // Shortcuts for various insertable things
+ $textarea.on( 'keyup keydown', function ( e ) {
+ var index, $info, direction;
+
+ if ( e.type === 'keydown' && e.altKey === true ) {
+ // Up and down arrows
+ if ( e.keyCode === 38 || e.keyCode === 40 ) {
+ direction = e.keyCode === 40 ? 1 : -1;
+ $info = translateEditor.$editor.find( '.infocolumn' );
+ $info.scrollTop( $info.scrollTop() + 100 * direction );
+ translateEditor.showShortcuts();
+ }
+ }
+
+ // Move zero to last
+ index = e.keyCode - 49;
+ if ( index === -1 ) {
+ index = 9;
+ }
+
+ // 0..9 ~ 48..57
+ if (
+ e.type === 'keydown' &&
+ e.altKey === true &&
+ e.ctrlKey === false &&
+ e.shiftKey === false &&
+ index >= 0 && index < 10
+ ) {
+ e.preventDefault();
+ e.stopPropagation();
+ translateEditor.$editor.find( '.shortcut-activated:visible' ).eq( index ).trigger( 'click' );
+ // Update numbers and locations after trigger should be completed
+ window.setTimeout( function () {
+ translateEditor.showShortcuts();
+ }, 100 );
+ }
+
+ if ( e.which === 18 && e.type === 'keyup' ) {
+ translateEditor.hideShortcuts();
+ } else if ( e.which === 18 && e.type === 'keydown' ) {
+ translateEditor.showShortcuts();
+ }
+ } );
+
+ $textarea.on( 'input', function () {
+ var $pasteSourceButton = translateEditor.$editor.find( '.tux-editor-paste-original-button' ),
+ original = translateEditor.message.translation || '',
+ current = $textarea.val() || '';
+
+ if ( original !== '' ) {
+ $discardChangesButton.removeClass( 'hide' );
+ }
+
+ /* Avoid Unsaved marking when translated message is not changed in content.
+ * - translateEditor.dirty: internal book keeping
+ * - mw.translate.dirty: "you have unchanged edits" notice
+ */
+ if ( original === current ) {
+ translateEditor.markUnunsaved();
+ } else {
+ translateEditor.dirty = true;
+ mw.translate.dirty = true;
+ }
+
+ translateEditor.makeSaveButtonJustSave( $saveButton );
+
+ // When there is content in the editor enable the button.
+ // But do not enable when some saving is not finished yet.
+ if ( current.trim() && !translateEditor.saving ) {
+ $pasteSourceButton.addClass( 'hide' );
+ $saveButton.prop( 'disabled', false );
+ } else {
+ $saveButton.prop( 'disabled', true );
+ $pasteSourceButton.removeClass( 'hide' );
+ }
+
+ translateEditor.resizeInsertables( $textarea );
+
+ translateEditor.delayValidation( function () {
+ translateEditor.validateTranslation();
+ }, 1000 );
+ } );
+
+ var $noticesBlock = $( '<div>' )
+ .addClass( 'tux-notices-block' )
+ .append( $moreNoticesTab, $notices );
+
+ var $editAreaBlock = $( '<div>' )
+ .addClass( 'row tux-editor-editarea-block' )
+ .append( $( '<div>' )
+ .addClass( 'editarea twelve columns' )
+ .append( $noticesBlock, $textarea )
+ );
+
+ $editorColumn.append( $editAreaBlock );
+
+ var $editingButtonBlock, $editSummaryBlock, $requestRight, $skipButton;
+ if ( canTranslate ) {
+ var $pasteOriginalButton = $( '<button>' )
+ .addClass( 'tux-editor-paste-original-button' )
+ .text( mw.msg( 'tux-editor-paste-original-button-label' ) )
+ .on( 'click', function () {
+ $textarea
+ .trigger( 'focus' )
+ .val( sourceString )
+ .trigger( 'input' );
+
+ $pasteOriginalButton.addClass( 'hide' );
+ } );
+
+ var $editSummary = $( '<input>' )
+ .addClass( 'tux-input-editsummary' )
+ .attr( {
+ maxlength: 255,
+ disabled: true,
+ placeholder: mw.msg( 'tux-editor-editsummary-placeholder' )
+ } )
+ .val( '' );
+
+ // Enable edit summary if there was a change to translation area
+ // or disable if there is no text in translation area
+ $textarea.on( 'input', function () {
+ if ( $editSummary.prop( 'disabled' ) ) {
+ $editSummary.prop( 'disabled', false );
+ }
+ if ( $textarea.val().trim() === '' ) {
+ $editSummary.prop( 'disabled', true );
+ }
+ } ).on( 'keydown', function ( e ) {
+ if ( !e.ctrlKey || e.keyCode !== 13 ) {
+ return;
+ }
+
+ if ( !$saveButton.is( ':disabled' ) ) {
+ $saveButton.trigger( 'click' );
+ return;
+ }
+ $skipButton.trigger( 'click' );
+ } );
+
+ if ( originalTranslation !== null ) {
+ $discardChangesButton = $( '<button>' )
+ .addClass( 'tux-editor-discard-changes-button hide' ) // Initially hidden
+ .text( mw.msg( 'tux-editor-discard-changes-button-label' ) )
+ .on( 'click', function () {
+ // Restore the translation
+ $textarea
+ .trigger( 'focus' )
+ .val( originalTranslation );
+
+ // and go back to hiding.
+ $discardChangesButton.addClass( 'hide' );
+
+ // There's nothing new to save...
+ $editSummary.val( '' ).prop( 'disabled', true );
+ $saveButton.prop( 'disabled', true );
+ // ...unless there is other action
+ translateEditor.makeSaveButtonContextSensitive( $saveButton );
+
+ translateEditor.markUnunsaved();
+ translateEditor.resizeInsertables( $textarea );
+ } );
+ }
+
+ if ( this.message.translation ) {
+ $pasteOriginalButton.addClass( 'hide' );
+ }
+
+ $editingButtonBlock = $( '<div>' )
+ .addClass( 'twelve columns tux-editor-insert-buttons' )
+ .append(
+ $pasteOriginalButton,
+ $discardChangesButton
+ );
+
+ $editSummaryBlock = $( '<div>' )
+ .addClass( 'row tux-editor-editsummary-block' )
+ .append(
+ $( '<div>' )
+ .addClass( 'twelve columns' )
+ .append( $editSummary )
+ );
+
+ $requestRight = $( [] );
+
+ $saveButton = $( '<button>' )
+ .prop( 'disabled', true )
+ .addClass( 'tux-editor-save-button mw-ui-button mw-ui-progressive' )
+ .text( mw.msg( 'tux-editor-save-button-label' ) )
+ .on( 'click', function ( e ) {
+ translateEditor.save();
+ e.stopPropagation();
+ } );
+
+ this.makeSaveButtonContextSensitive( $saveButton, this.$messageItem );
+ } else {
+ $editingButtonBlock = $( [] );
+
+ $editSummaryBlock = $( [] );
+
+ $requestRight = $( '<span>' )
+ .addClass( 'tux-editor-request-right' )
+ .text( mw.msg( 'translate-edit-nopermission' ) );
+ // Make sure wgTranslatePermissionUrl setting is not 'false'
+ if ( mw.config.get( 'wgTranslatePermissionUrl' ) !== false ) {
+ $requestRight
+ .append( $( '<a>' )
+ .text( mw.msg( 'translate-edit-askpermission' ) )
+ .addClass( 'tux-editor-ask-permission' )
+ .attr( {
+ href: mw.util.getUrl(
+ mw.config.get( 'wgTranslateUseSandbox' ) ?
+ 'Special:TranslationStash' :
+ mw.config.get( 'wgTranslatePermissionUrl' )
+ )
+ } )
+ );
+ }
+ // Disable the text area if user has no translation rights.
+ // Use readonly to allow copy-pasting (except for placeholders)
+ $textarea.prop( 'readonly', true );
+
+ $saveButton = $( [] );
+ }
+
+ $skipButton = $( '<button>' )
+ .addClass( 'tux-editor-skip-button mw-ui-button mw-ui-quiet' )
+ .text( mw.msg( 'tux-editor-skip-button-label' ) )
+ .on( 'click', function ( e ) {
+ translateEditor.skip();
+ translateEditor.next();
+
+ if ( translateEditor.options.onSkip ) {
+ translateEditor.options.onSkip.call( translateEditor );
+ }
+
+ e.stopPropagation();
+ } );
+
+ // This appears instead of "Skip" on the last message on the page
+ var $cancelButton = $( '<button>' )
+ .addClass( 'tux-editor-cancel-button mw-ui-button mw-ui-quiet' )
+ .text( mw.msg( 'tux-editor-cancel-button-label' ) )
+ .on( 'click', function ( e ) {
+ translateEditor.skip();
+ translateEditor.hide();
+
+ e.stopPropagation();
+ } );
+
+ var $controlButtonBlock = $( '<div>' )
+ .addClass( 'twelve columns tux-editor-control-buttons' )
+ .append( $requestRight, $saveButton, $skipButton, $cancelButton );
+
+ $editorColumn.append( $( '<div>' )
+ .addClass( 'row tux-editor-actions-block' )
+ .append( $editingButtonBlock )
+ );
+
+ $editorColumn.append( $editSummaryBlock );
+
+ $editorColumn.append( $( '<div>' )
+ .addClass( 'row tux-editor-actions-block' )
+ .append( $controlButtonBlock )
+ );
+
+ if ( canTranslate ) {
+ var prefix = $.fn.updateTooltipAccessKeys.getAccessKeyPrefix();
+ $editorColumn.append( $( '<div>' )
+ .addClass( 'row shortcutinfo' )
+ .text( mw.msg(
+ 'tux-editor-shortcut-info',
+ 'CTRL-ENTER',
+ ( prefix + 'd' ).toUpperCase(),
+ 'ALT',
+ ( prefix + 'b' ).toUpperCase()
+ ) )
+ );
+ }
+
+ return $editorColumn;
+ },
+
+ /**
+ * Modifies the save button to provide suitable default action for *unchanged*
+ * message. It will revert back to normal save button if the text is changed.
+ *
+ * @param {jQuery} $button The save button.
+ */
+ makeSaveButtonContextSensitive: function ( $button ) {
+ var self = this;
+
+ if ( this.message.properties.status === 'fuzzy' ) {
+ $button.prop( 'disabled', false );
+ $button.text( mw.msg( 'tux-editor-confirm-button-label' ) );
+ $button.off( 'click' );
+ $button.on( 'click', function ( e ) {
+ self.save();
+ e.stopPropagation();
+ } );
+ } else if ( this.message.proofreadable ) {
+ $button.prop( 'disabled', false );
+ $button.text( mw.msg( 'tux-editor-proofread-button-label' ) );
+ $button.off( 'click' );
+ $button.on( 'click', function ( e ) {
+ $button.prop( 'disabled', true );
+ self.message.proofreadAction();
+ self.next();
+ e.stopPropagation();
+ } );
+ }
+ },
+
+ /**
+ * Modifies the save button to just save the translation as usual. Whether the
+ * button is enabled or not is controlled elsewhere.
+ *
+ * @param {jQuery} $button The save button.
+ */
+ makeSaveButtonJustSave: function ( $button ) {
+ var self = this;
+
+ $button.text( mw.msg( 'tux-editor-save-button-label' ) );
+ $button.off( 'click' );
+ $button.on( 'click', function ( e ) {
+ self.save();
+ e.stopPropagation();
+ } );
+ },
+
+ /**
+ * Validate the current translation using the API
+ * and show the notices.
+ */
+ validateTranslation: function () {
+ var translateEditor = this,
+ $textarea = translateEditor.$editor.find( '.tux-textarea-translation' );
+
+ var api = new mw.Api();
+
+ this.validating = api.post( {
+ action: 'translationcheck',
+ title: this.message.title,
+ translation: $textarea.val()
+ } ).done( function ( data ) {
+ var warnings = data.validation.warnings,
+ errors = data.validation.errors;
+
+ translateEditor.removeNotices( [ noticeTypes.error, noticeTypes.warning ] );
+
+ if ( ( !warnings || !warnings.length ) &&
+ ( !errors || !errors.length ) ) {
+ return;
+ }
+
+ // Remove useless fuzzy notice if we have more details
+ translateEditor.removeNotices( noticeTypes.fuzzy );
+
+ // Disable confirm translation button, since fuzzy translations
+ // cannot be confirmed. The check for dirty state can be removed
+ // to prevent translations with notices.
+ if ( !translateEditor.dirty ) {
+ translateEditor.$editor.find( '.tux-editor-save-button' )
+ .prop( 'disabled', true );
+ }
+
+ // Don't allow users to save if there are errors but allow admins to save
+ // even if there are errors.
+ if ( !mw.translate.canManage() ) {
+ if ( errors && errors.length > 0 ) {
+ translateEditor.$editor.find( '.tux-editor-save-button' )
+ .prop( 'disabled', true );
+ }
+ }
+
+ translateEditor.displayNotices( warnings, noticeTypes.warning );
+ translateEditor.displayNotices( errors, noticeTypes.error );
+
+ } ).always( function () {
+ translateEditor.validating = null;
+ } );
+ },
+
+ /**
+ * Remove all notices of given types
+ *
+ * @param {(string|string[])} types
+ */
+ removeNotices: function ( types ) {
+ var $tuxNotice = this.$editor.find( '.tux-notice' ),
+ stringTypes = [],
+ allNoticeTypes = noticeTypes.getAllClasses();
+
+ if ( typeof types === 'string' ) {
+ stringTypes.push( types );
+ } else {
+ stringTypes = types;
+ }
+
+ for ( var index = 0; index < stringTypes.length; index++ ) {
+ if ( allNoticeTypes.indexOf( stringTypes[ index ] ) === -1 ) {
+ var errMsg = 'tux: Invalid notice type removeNotice - ' + stringTypes[ index ];
+ mw.log.error( errMsg );
+ throw new Error( errMsg );
+ }
+ $tuxNotice.find( '.' + stringTypes[ index ] ).remove();
+ }
+
+ var $currentNotices = $tuxNotice.children();
+ // If a single notice is shown, we can hide the more notice button,
+ // and display the hidden notice.
+ if ( $currentNotices.length <= 1 ) {
+ this.$editor.find( '.tux-more-notices' ).addClass( 'hide' );
+ $currentNotices.removeClass( 'hide' );
+ }
+ this.toggleMoreButtonClass();
+ },
+
+ /**
+ * Displays the supplied notice above the translation edit area.
+ * Newer notices are added to the top while older notices are
+ * added to the bottom. This also means that older notices will
+ * not be shown by default unless the user clicks "more notices" tab.
+ *
+ * @param {string} notice used as html for the notices display
+ * @param {string} type used to group the notices.eg: warning, diff, error
+ * @return {jQuery} the new notice element
+ */
+ addNotice: function ( notice, type ) {
+ var $notices = this.$editor.find( '.tux-notice' ),
+ $moreNoticesTab = this.$editor.find( '.tux-more-notices' ),
+ // `noticeTypes` documented above
+ // eslint-disable-next-line mediawiki/class-doc
+ $newNotice = $( '<div>' )
+ .addClass( 'tux-notice-message ' + type )
+ .html( notice );
+
+ this.$editor.find( '.tux-notice-message' ).addClass( 'hide' );
+
+ $notices
+ .removeClass( 'hide' )
+ .prepend( $newNotice );
+
+ var noticeCount = $notices.find( '.tux-notice-message' ).length;
+
+ if ( noticeCount > 1 ) {
+ $moreNoticesTab
+ .text( mw.msg( 'tux-notices-more', noticeCount - 1 ) )
+ .removeClass( 'hide open' );
+ } else {
+ $moreNoticesTab.addClass( 'hide' );
+ }
+ this.toggleMoreButtonClass();
+
+ return $newNotice;
+ },
+
+ /**
+ * Toggles the class on the more button based on the types of notice displayed, and whether
+ * the more section is expanded. This is done in order to change the background color of the
+ * button.
+ */
+ toggleMoreButtonClass: function () {
+ var $allNotices = this.$editor.find( '.tux-notice-message' ),
+ errorCount = $allNotices.filter( '.tux-notice-message.' + noticeTypes.error ).length +
+ $allNotices.filter( '.tux-notice-message.' + noticeTypes.translateFail ).length,
+ otherErrorsCount = $allNotices.length - errorCount,
+ $moreButton = this.$editor.find( '.tux-more-notices' );
+
+ if ( errorCount === 0 ) {
+ // if no error, no classes needed.
+ $moreButton.removeClass( 'tux-has-errors' );
+ } else if ( otherErrorsCount > 0 && $moreButton.hasClass( 'open' ) ) {
+ // there are other notices, and more section is expanded.
+ $moreButton.removeClass( 'tux-has-errors' );
+ } else {
+ $moreButton.addClass( 'tux-has-errors' );
+ }
+ },
+
+ prepareInfoColumn: function () {
+ var $infoColumn = $( '<div>' ).addClass( 'infocolumn' ),
+ translateEditor = this;
+
+ $infoColumn.append( $( '<div>' )
+ .addClass( 'row loading' )
+ .text( mw.msg( 'tux-editor-loading' ) )
+ );
+
+ if ( mw.config.get( 'wgTranslateDocumentationLanguageCode' ) ) {
+ var $messageDescSaveButton = $( '<button>' )
+ .addClass( 'tux-editor-savedoc-button mw-ui-button mw-ui-progressive' )
+ .prop( 'disabled', true )
+ .text( mw.msg( 'tux-editor-doc-editor-save' ) )
+ .on( 'click', function () {
+ translateEditor.saveDocumentation()
+ .done( function () {
+ // eslint-disable-next-line no-use-before-define
+ var $descEditLink = $messageDescViewer.find( '.message-desc-edit' );
+ $descEditLink.text( mw.msg( 'tux-editor-edit-desc' ) );
+ } );
+ } );
+
+ var $messageDescCancelButton = $( '<button>' )
+ .addClass( 'tux-editor-skipdoc-button mw-ui-button mw-ui-quiet' )
+ .text( mw.msg( 'tux-editor-doc-editor-cancel' ) )
+ .on( 'click', function () {
+ translateEditor.hideDocumentationEditor();
+ } );
+
+ var $messageDescTextarea = $( '<textarea>' )
+ .addClass( 'tux-textarea-documentation' )
+ .on( 'input', function () {
+ $messageDescSaveButton.prop( 'disabled', false );
+ } )
+ .prop( 'placeholder', mw.msg( 'tux-editor-doc-editor-placeholder' ) );
+
+ var $messageDescEditor = $( '<div>' )
+ .addClass( 'row message-desc-editor hide' )
+ .append(
+ $messageDescTextarea,
+ $( '<div>' )
+ .addClass( 'row' )
+ .append(
+ $messageDescSaveButton,
+ $messageDescCancelButton
+ )
+ );
+
+ var $messageDescViewer = $( '<div>' )
+ .addClass( 'message-desc-viewer hide' )
+ .append(
+ $( '<div>' )
+ .addClass( 'row message-desc' ),
+ $( '<div>' )
+ .addClass( 'row message-desc-control' )
+ .append( $( '<a>' )
+ .attr( {
+ href: mw.translate.getDocumentationEditURL(
+ this.message.title.replace( /\/[a-z-]+$/, '' )
+ ),
+ target: '_blank'
+ } )
+ .addClass( 'message-desc-edit' )
+ .on( 'click', this.showDocumentationEditor.bind( this ) )
+ )
+ );
+
+ if ( !mw.translate.canTranslate() ) {
+ $messageDescViewer.find( '.message-desc-control' ).addClass( 'hide' );
+ }
+
+ $infoColumn.append(
+ $messageDescEditor,
+ $messageDescViewer
+ );
+ }
+
+ $infoColumn.append( $( '<div>' )
+ .addClass( 'row uneditable-documentation hide mw-parser-output' )
+ );
+
+ $infoColumn.append( $( '<div>' )
+ .addClass( 'row edit-summaries-title hide' )
+ .append(
+ $( '<span>' ).text( mw.msg( 'tux-editor-latest-updates-title' ) )
+ )
+ .append( $( '<a>' )
+ .attr(
+ {
+ href: mw.util.getUrl( this.message.title, { action: 'history' } )
+ }
+ )
+ .text( mw.msg( 'tux-editor-all-changes' ) )
+ .addClass( 'edit-summaries-all-changes' ) ) );
+
+ $infoColumn.append( $( '<div>' )
+ .addClass( 'row tm-suggestions-title hide' )
+ .text( mw.msg( 'tux-editor-suggestions-title' ) )
+ );
+
+ $infoColumn.append( $( '<div>' )
+ .addClass( 'row in-other-languages-title hide' )
+ .text( mw.msg( 'tux-editor-in-other-languages' ) )
+ );
+
+ // The actual href is set when translationhelpers are loaded
+ $infoColumn.append( $( '<div>' )
+ .addClass( 'row help hide' )
+ .append(
+ $( '<span>' )
+ .text( mw.msg( 'tux-editor-need-more-help' ) ),
+ $( '<a>' )
+ .attr( {
+ href: '#',
+ target: '_blank'
+ } )
+ .text( mw.msg( 'tux-editor-ask-help' ) )
+ )
+ );
+
+ return $( '<div>' )
+ .addClass( 'five columns infocolumn-block' )
+ .append(
+ $( '<span>' ).addClass( 'tux-message-editor__caret' ),
+ $infoColumn
+ );
+ },
+
+ show: function () {
+ if ( !this.$editor ) {
+ this.init();
+ }
+
+ var $textarea = this.$editor.find( '.editcolumn textarea' );
+ // Hide all other open editors in the page
+ $( '.tux-message.open' ).each( function () {
+ $( this ).data( 'translateeditor' ).hide();
+ } );
+
+ // The access keys need to be shifted to the editor currently active
+ $( '.tux-editor-save-button, .tux-editor-save-button' ).removeAttr( 'accesskey' );
+ this.$editor.find( '.tux-editor-save-button' ).attr( 'accesskey', 's' );
+ this.$editor.find( '.tux-editor-skip-button' ).attr( 'accesskey', 'd' );
+ this.$editor.find( '.tux-input-editsummary' ).attr( 'accesskey', 'b' );
+ // @todo access key for the cancel button
+
+ this.$messageItem.addClass( 'hide' );
+ this.$editor.removeClass( 'hide' );
+ $textarea.trigger( 'focus' );
+
+ autosize( $textarea );
+ this.resizeInsertables( $textarea );
+
+ this.shown = true;
+ this.$editTrigger.addClass( 'open' );
+
+ // don't waste time, get ready with next message
+ var $next = this.$editTrigger.next( '.tux-message' );
+
+ if ( $next.length ) {
+ $next.data( 'translateeditor' ).init();
+ }
+
+ mw.hook( 'mw.translate.editor.afterEditorShown' ).fire( this.$editor );
+
+ return false;
+ },
+
+ hide: function () {
+ // If the user has made changes, make sure they are either
+ // in process of being saved or highlighted as unsaved.
+ if ( this.dirty ) {
+ if ( this.saving ) {
+ this.markSaving();
+ } else {
+ this.markUnsaved();
+ }
+ }
+
+ if ( this.$editor ) {
+ this.$editor.addClass( 'hide' );
+ }
+
+ this.hideShortcuts();
+ this.$editTrigger.removeClass( 'open' );
+ this.$messageItem.removeClass( 'hide' );
+ this.shown = false;
+
+ return false;
+ },
+
+ infoToggle: function ( toggleIcon ) {
+ if ( this.expanded ) {
+ this.contract( toggleIcon );
+ } else {
+ this.expand( toggleIcon );
+ }
+ },
+
+ contract: function ( toggleIcon ) {
+ // Change the icon image
+ toggleIcon
+ .removeClass( 'editor-contract' )
+ .addClass( 'editor-expand' )
+ .attr( 'title', mw.msg( 'tux-editor-expand-tooltip' ) );
+
+ this.$editor.removeClass( 'tux-message-editor--expanded' );
+ this.expanded = false;
+ },
+
+ expand: function ( toggleIcon ) {
+ // Change the icon image
+ toggleIcon
+ .removeClass( 'editor-expand' )
+ .addClass( 'editor-contract' )
+ .attr( 'title', mw.msg( 'tux-editor-collapse-tooltip' ) );
+
+ this.$editor.addClass( 'tux-message-editor--expanded' );
+ this.expanded = true;
+ },
+
+ /**
+ * Adds the diff between old and current definitions to the view.
+ *
+ * @param {Object} definitiondiff A definitiondiff object as returned by API.
+ */
+ addDefinitionDiff: function ( definitiondiff ) {
+ if ( !definitiondiff || definitiondiff.error ) {
+ mw.log( 'Error loading translation diff ' + definitiondiff && definitiondiff.error );
+ return;
+ }
+
+ // Load the diff styles
+ mw.loader.load( 'mediawiki.diff.styles' );
+
+ var $trigger = $( '<span>' )
+ .addClass( 'show-diff-link' )
+ .text( mw.msg( 'tux-editor-outdated-notice-diff-link' ) )
+ .on( 'click', function () {
+ $( this ).parent().html( definitiondiff.html );
+ } );
+
+ this.removeNotices( noticeTypes.fuzzy );
+ this.addNotice(
+ mw.message( 'tux-editor-outdated-notice' ).escaped(),
+ noticeTypes.diff
+ ).append( $trigger );
+ },
+
+ /**
+ * Attach event listeners
+ */
+ listen: function () {
+ var translateEditor = this;
+
+ this.$editTrigger.find( '.tux-message-item' ).on( 'click', function () {
+ translateEditor.show();
+
+ return false;
+ } );
+ },
+
+ /**
+ * Makes the textarea large enough for insertables and positions the insertables.
+ *
+ * @param {jQuery} $textarea Text area.
+ */
+ resizeInsertables: function ( $textarea ) {
+ var $buttonArea = this.$editor.find( '.tux-editor-insert-buttons' );
+ var buttonAreaHeight = $buttonArea.height();
+ $textarea.css( 'padding-bottom', buttonAreaHeight + 5 );
+ $buttonArea.css( 'top', -buttonAreaHeight );
+ autosize.update( $textarea );
+ },
+
+ /**
+ * Utility method to display a list of notices on the UI
+ *
+ * @param {Array} notices
+ * @param {string} noticeType
+ */
+ displayNotices: function ( notices, noticeType ) {
+ for ( var index = 0; index < notices.length; ++index ) {
+ this.addNotice( notices[ index ], noticeType );
+ }
+ },
+
+ /**
+ * Ensures that all the notices are displayed
+ */
+ showMoreNotices: function () {
+ var $moreNoticesTab = this.$editor.find( '.tux-more-notices' );
+ if ( $moreNoticesTab.hasClass( 'open' ) ) {
+ return;
+ }
+
+ $moreNoticesTab.trigger( 'click' );
+ },
+
+ /**
+ * Generates the translation editor element based on target language
+ *
+ * @param {string} targetLangCode
+ * @return {Object} Returns translation editor element
+ */
+ getTranslationEditor: function ( targetLangCode ) {
+ var targetLangAttrib, placeholder;
+ if ( targetLangCode === mw.config.get( 'wgTranslateDocumentationLanguageCode' ) ) {
+ targetLangAttrib = mw.config.get( 'wgContentLanguage' );
+ placeholder = mw.msg( 'tux-editor-placeholder-documentation' );
+ } else {
+ targetLangAttrib = targetLangCode;
+ placeholder = mw.msg( 'tux-editor-placeholder-language', $.uls.data.getAutonym( targetLangCode ) );
+ }
+
+ var targetLangDir = $.uls.data.getDir( targetLangAttrib );
+
+ // The following classes are used here:
+ // * mw-editfont-serif
+ // * mw-editfont-sans-serif
+ // * mw-editfont-monospace
+ return $( '<textarea>' )
+ .addClass( 'tux-textarea-translation ' + this.editFontClass )
+ .attr( {
+ lang: targetLangAttrib,
+ dir: targetLangDir
+ } )
+ .val( this.message.translation || '' )
+ .prop( 'placeholder', placeholder );
+ }
+ };
+
+ /*
+ * translateeditor PLUGIN DEFINITION
+ */
+
+ $.fn.translateeditor = function ( options ) {
+ return this.each( function () {
+ var $this = $( this ),
+ data = $this.data( 'translateeditor' );
+
+ if ( !data ) {
+ $this.data( 'translateeditor',
+ ( data = new TranslateEditor( this, options ) )
+ );
+ }
+
+ if ( typeof options === 'string' ) {
+ data[ options ].call( $this );
+ }
+ } );
+ };
+
+ mw.translate.editor = mw.translate.editor || {};
+ mw.translate.editor = $.extend( TranslateEditor.prototype, mw.translate.editor );
+
+ function delayer() {
+ return ( function () {
+ var timer = 0;
+
+ return function ( callback, milliseconds ) {
+ clearTimeout( timer );
+
+ if ( callback === false ) {
+ // sometimes we need to just cancel the timer without
+ // setting up another one
+ return;
+ }
+
+ timer = setTimeout( callback, milliseconds );
+ };
+ }() );
+ }
+}() );
diff --git a/Translate/resources/js/ext.translate.editor.shortcuts.js b/Translate/resources/js/ext.translate.editor.shortcuts.js
new file mode 100644
index 00000000..8c56ef94
--- /dev/null
+++ b/Translate/resources/js/ext.translate.editor.shortcuts.js
@@ -0,0 +1,69 @@
+/*!
+ * Translate editor shortcuts
+ */
+( function () {
+ 'use strict';
+ var translateEditorShortcuts = {
+ showShortcuts: function () {
+ // Any better way?
+ var rtl = $( document.body ).is( '.rtl' );
+
+ var editorOffset = this.$editor.offset();
+ var minTop = editorOffset.top;
+ var maxTop = minTop + this.$editor.outerHeight();
+ var middle = minTop + ( maxTop - minTop ) / 2;
+ var maxLeft = rtl ? editorOffset.left : editorOffset.left + this.$editor.outerWidth();
+
+ this.hideShortcuts();
+
+ // For scrolling up and down
+ $( '<div>' )
+ .text( '↑' )
+ .addClass( 'shortcut-popup' )
+ .appendTo( document.body )
+ .offset( { top: middle - 15, left: maxLeft } )
+ .css( 'transform', 'translate( -50%, 0 )' );
+
+ $( '<div>' )
+ .text( '↓' )
+ .addClass( 'shortcut-popup' )
+ .appendTo( document.body )
+ .offset( { top: middle + 15, left: maxLeft } )
+ .css( 'transform', 'translate( -50%, 0 )' );
+
+ this.$editor.find( '.shortcut-activated:visible' ).each( function ( index ) {
+ var offset = getStartCornerOffsetOf( $( this ), rtl );
+
+ // Let's not have numbers appear outside the editor over other content
+ if ( offset.top > maxTop || offset.top < minTop ) {
+ return;
+ }
+
+ $( '<div>' )
+ .text( index + 1 )
+ .addClass( 'shortcut-popup' )
+ .appendTo( document.body )
+ .offset( offset )
+ .css( 'transform', 'translate( -50%, -50% )' );
+ } );
+ },
+
+ hideShortcuts: function () {
+ $( '.shortcut-popup' ).remove();
+ }
+ };
+
+ function getStartCornerOffsetOf( $element, rtl ) {
+ var offset = $element.offset();
+
+ if ( rtl ) {
+ offset.left += $element.outerWidth();
+ }
+
+ return offset;
+ }
+
+ mw.translate.editor = mw.translate.editor || {};
+ $.extend( mw.translate.editor, translateEditorShortcuts );
+
+}() );
diff --git a/Translate/resources/js/ext.translate.groupselector.js b/Translate/resources/js/ext.translate.groupselector.js
new file mode 100644
index 00000000..8866f6b2
--- /dev/null
+++ b/Translate/resources/js/ext.translate.groupselector.js
@@ -0,0 +1,614 @@
+( function () {
+ 'use strict';
+
+ var groupsLoader, delay;
+
+ /**
+ * options
+ * - position: accepts same values as jquery.ui.position
+ * - onSelect:
+ * - language:
+ * - preventSelector: boolean to not allow selection of subgroups.
+ * - recent: list of recent group ids
+ * groups: list of message group ids
+ *
+ * @param {Element} element
+ * @param {Object} options
+ * @param {Object} [options.position] Accepts same values as jquery.ui.position.
+ * @param {Function} [options.onSelect] Callback with message group id when selected.
+ * @param {string} options.language Language code for statistics.
+ * @param {boolean} [options.preventSelector] Do not allow selection of subgroups.
+ * @param {string[]} [options.recent] List of recent message group ids.
+ * @param {string[]} [groups] List of message group ids to show.
+ */
+ function TranslateMessageGroupSelector( element, options, groups ) {
+ this.$trigger = $( element );
+ this.$menu = null;
+ this.$search = null;
+ this.$list = null;
+ this.$loader = null;
+
+ this.parentGroupId = null;
+ this.options = $.extend( true, {}, $.fn.msggroupselector.defaults, options );
+ // Store the explicitly given options, which can be passed to subgroup
+ // selectors.
+ this.customOptions = options;
+ this.flatGroupList = null;
+ this.groups = groups;
+ this.firstShow = true;
+
+ this.init();
+ }
+
+ TranslateMessageGroupSelector.prototype = {
+ constructor: TranslateMessageGroupSelector,
+
+ /**
+ * Initialize the plugin
+ */
+ init: function () {
+ this.parentGroupId = this.$trigger.data( 'msggroupid' );
+ this.prepareSelectorMenu();
+ this.listen();
+ },
+
+ /**
+ * Prepare the selector menu rendering
+ */
+ prepareSelectorMenu: function () {
+ this.$menu = $( '<div>' )
+ .addClass( 'tux-groupselector' )
+ .addClass( 'grid hide' );
+
+ var $searchIcon = $( '<div>' )
+ .addClass( 'two columns tux-groupselector__filter__search__icon' );
+
+ this.$search = $( '<input>' )
+ .prop( 'type', 'text' )
+ .addClass( 'tux-groupselector__filter__search__input' )
+ .prop( 'placeholder', mw.msg( 'translate-msggroupselector-search-placeholder' ) );
+
+ var $search = $( '<div>' )
+ .addClass( 'ten columns' )
+ .append( this.$search );
+
+ var $listFilters = $( '<div>' )
+ .addClass( 'tux-groupselector__filter__tabs' )
+ .addClass( 'six columns' )
+ .append(
+ $( '<div>' )
+ .addClass( 'tux-grouptab tux-grouptab--all tux-grouptab--selected' )
+ .text( mw.msg( 'translate-msggroupselector-search-all' ) )
+ );
+
+ if ( this.options.recent && this.options.recent.length ) {
+ $listFilters.append(
+ $( '<div>' )
+ .addClass( 'tux-grouptab tux-grouptab--recent' )
+ .text( mw.msg( 'translate-msggroupselector-search-recent' ) )
+ );
+ }
+
+ var $searchGroup = $( '<div>' )
+ .addClass( 'tux-groupselector__filter__search' )
+ .addClass( 'six columns' )
+ .append( $searchIcon, $search );
+
+ var $listFiltersGroup = $( '<div>' )
+ .addClass( 'tux-groupselector__filter' )
+ .addClass( 'row' )
+ .append( $listFilters, $searchGroup );
+
+ this.$list = $( '<div>' )
+ .addClass( 'tux-grouplist' )
+ .addClass( 'row' );
+
+ this.$loader = $( '<div>' )
+ .addClass( 'tux-loading-indicator tux-loading-indicator--centered' );
+
+ this.$menu.append( $listFiltersGroup, this.$loader, this.$list );
+
+ this.$menu.appendTo( document.body );
+ },
+
+ /**
+ * Show the selector
+ */
+ show: function () {
+ this.$menu.addClass( 'open' ).removeClass( 'hide' );
+ this.position();
+ // Place the focus in the message group search box.
+ this.$search.trigger( 'focus' );
+ // Start loading the groups, but assess the situation again after
+ // they are loaded, in case user has made further interactions.
+ if ( this.firstShow ) {
+ this.loadGroups().done( this.showList.bind( this ) );
+ this.firstShow = false;
+ }
+ },
+
+ /**
+ * Hide the selector
+ *
+ * @param {jQuery.Event} e
+ */
+ hide: function ( e ) {
+ // Do not hide if the trigger is clicked
+ if ( e && ( this.$trigger.is( e.target ) || this.$trigger.has( e.target ).length ) ) {
+ return;
+ }
+
+ this.$menu.addClass( 'hide' ).removeClass( 'open' );
+ },
+
+ /**
+ * Toggle the menu open/close state
+ */
+ toggle: function () {
+ if ( this.$menu.hasClass( 'open' ) ) {
+ this.hide();
+ } else {
+ this.show();
+ }
+ },
+
+ /**
+ * Attach event listeners
+ */
+ listen: function () {
+ var groupSelector = this;
+
+ // Hide the selector panel when clicking outside of it
+ $( document.documentElement ).on( 'click', this.hide.bind( this ) );
+
+ groupSelector.$trigger.on( 'click', function () {
+ groupSelector.toggle();
+ } );
+
+ groupSelector.$menu.on( 'click', function ( e ) {
+ e.preventDefault();
+ e.stopPropagation();
+ } );
+
+ // Handle click on row item. This selects the group, and in case it has
+ // subgroups, also opens a new menu to show them.
+ groupSelector.$menu.on( 'click', '.tux-grouplist__item', function () {
+ var messageGroup = $( this ).data( 'msggroup' );
+
+ groupSelector.hide();
+
+ groupSelector.$trigger.nextAll().remove();
+
+ if ( !groupSelector.options.preventSelector ) {
+ var $newLink = $( '<span>' )
+ .addClass( 'grouptitle grouplink' )
+ .text( messageGroup.label )
+ .data( 'msggroupid', messageGroup.id );
+
+ groupSelector.$trigger.after( $newLink );
+
+ if ( messageGroup.groups && messageGroup.groups.length > 0 ) {
+ // Show the new menu immediately.
+ // Pass options for callbacks, language etc. but ignore the position
+ // option unless explicitly given to allow automatic recalculation
+ // of the position compared to the new trigger.
+ $newLink
+ .addClass( 'tux-breadcrumb__item--aggregate' )
+ .msggroupselector( groupSelector.customOptions )
+ .data( 'msggroupselector' ).show();
+ }
+ }
+
+ if ( groupSelector.options.onSelect ) {
+ groupSelector.options.onSelect( messageGroup );
+ }
+ } );
+
+ // Handle the tabs All | Recent
+ var $tabs = groupSelector.$menu.find( '.tux-grouptab' );
+ $tabs.on( 'click', function () {
+ var $this = $( this );
+
+ /* Do nothing if user clicks the active tab.
+ * Fixes two things:
+ * - The blue bottom border highlight doesn't jump around
+ * - No flash when clicking recent tab again
+ */
+ if ( $this.hasClass( 'tux-grouptab--selected' ) ) {
+ return;
+ }
+
+ // This is okay as long as we only have two classes
+ $tabs.toggleClass( 'tux-grouptab--selected' );
+ groupSelector.$search.val( '' );
+ groupSelector.showList();
+ } );
+
+ this.$search.on( 'click', this.show.bind( this ) )
+ .on( 'keypress', this.keyup.bind( this ) )
+ .on( 'keyup', this.keyup.bind( this ) );
+
+ if ( this.eventSupported( 'keydown' ) ) {
+ this.$search.on( 'keydown', this.keyup.bind( this ) );
+ }
+ },
+
+ /**
+ * Handle the keypress/keyup events in the message group search box.
+ */
+ keyup: function () {
+ delay( this.showList.bind( this ), 300 );
+ },
+
+ /**
+ * Position the menu
+ */
+ position: function () {
+ if ( this.options.position.of === undefined ) {
+ // eslint-disable-next-line no-jquery/variable-pattern
+ this.options.position.of = this.$trigger;
+ }
+ this.$menu.position( this.options.position );
+ },
+
+ /**
+ * Shows suitable list for current view, taking possible filter into account
+ */
+ showList: function () {
+ var query = this.$search.val().trim().toLowerCase();
+
+ if ( query ) {
+ this.filter( query );
+ } else {
+ this.showUnfilteredList();
+ }
+ },
+
+ /**
+ * Shows an unfiltered list of groups depending on the selected tab.
+ */
+ showUnfilteredList: function () {
+ var $selected = this.$menu.find( '.tux-grouptab--selected' );
+
+ if ( $selected.hasClass( 'tux-grouptab--all' ) ) {
+ if ( this.groups ) {
+ this.showSelectedGroups( this.groups );
+ } else {
+ this.showDefaultGroups();
+ }
+ } else if ( $selected.hasClass( 'tux-grouptab--recent' ) ) {
+ this.showRecentGroups();
+ }
+ },
+
+ /**
+ * Shows the list of message groups excluding subgroups.
+ *
+ * In case a parent message group has been given, only subgroups of that
+ * message group are shown, otherwise all top-level message groups are shown.
+ */
+ showDefaultGroups: function () {
+ var groupSelector = this;
+
+ this.$loader.removeClass( 'hide' );
+
+ this.loadGroups().done( function ( groups ) {
+ var groupsToShow = mw.translate.findGroup( groupSelector.parentGroupId, groups );
+
+ // We do not want to display the group itself, only its subgroups
+ if ( groupSelector.parentGroupId ) {
+ groupsToShow = groupsToShow.groups;
+ }
+
+ groupSelector.$loader.addClass( 'hide' );
+ groupSelector.$list.empty();
+ groupSelector.addGroupRows( groupsToShow );
+ } );
+ },
+
+ /**
+ * Show recent message groups.
+ */
+ showRecentGroups: function () {
+ var recent = this.options.recent || [];
+
+ this.showSelectedGroups( recent );
+ },
+
+ /**
+ * Load message groups.
+ *
+ * @param {Array} groups List of the message group ids to show.
+ */
+ showSelectedGroups: function ( groups ) {
+ var groupSelector = this;
+ this.$loader.removeClass( 'hide' );
+ this.loadGroups()
+ .then( function ( allGroups ) {
+ var rows = [];
+ groups.forEach( function ( id ) {
+ var group = mw.translate.findGroup( id, allGroups );
+ if ( group ) {
+ rows.push( groupSelector.prepareMessageGroupRow( group ) );
+ }
+ } );
+ return rows;
+ } )
+ .always( function () {
+ groupSelector.$loader.addClass( 'hide' );
+ groupSelector.$list.empty();
+ } )
+ .done( function ( rows ) {
+ groupSelector.$list.append( rows );
+ } );
+ },
+
+ /**
+ * Flattens a message group tree.
+ *
+ * @param {Array} messageGroups An array or data object.
+ * @param {Object} foundIDs The array in which the keys are IDs of message groups that were found already.
+ */
+ flattenGroupList: function ( messageGroups, foundIDs ) {
+ var messageGroupList;
+ if ( messageGroups.groups ) {
+ messageGroupList = messageGroups.groups;
+ } else {
+ messageGroupList = messageGroups;
+ }
+
+ for ( var i = 0; i < messageGroupList.length; i++ ) {
+ // Avoid duplicate groups, and add the parent before subgroups
+ if ( !foundIDs[ messageGroupList[ i ].id ] ) {
+ this.flatGroupList.push( messageGroupList[ i ] );
+ foundIDs[ messageGroupList[ i ].id ] = true;
+ }
+
+ // In case there are subgroups, add them recursively
+ if ( messageGroupList[ i ].groups ) {
+ this.flattenGroupList( messageGroupList[ i ].groups, foundIDs );
+ }
+ }
+ },
+
+ /**
+ * Search the message groups based on label or id.
+ * Label match is prefix match, while id match is exact match.
+ *
+ * @param {string} query
+ */
+ filter: function ( query ) {
+ var self = this;
+
+ this.loadGroups().done( function ( groups ) {
+ var foundGroups = [];
+
+ if ( !self.flatGroupList ) {
+ self.flatGroupList = [];
+ var currentGroup = mw.translate.findGroup( self.parentGroupId, groups );
+ if ( self.parentGroupId ) {
+ currentGroup = currentGroup.groups;
+ }
+ self.flattenGroupList( currentGroup, {} );
+ }
+
+ // Optimization, assuming that people search the beginning
+ // of the group name.
+ var matcher = new RegExp( '\\b' + escapeRegex( query ), 'i' );
+
+ for ( var index = 0; index < self.flatGroupList.length; index++ ) {
+ if ( matcher.test( self.flatGroupList[ index ].label ) ||
+ query === self.flatGroupList[ index ].id ) {
+ foundGroups.push( self.flatGroupList[ index ] );
+ }
+ }
+
+ self.$loader.addClass( 'hide' );
+ self.$list.empty();
+ self.addGroupRows( foundGroups );
+ } );
+ },
+
+ /**
+ * Load message groups and relevant properties using the API.
+ *
+ * @return {jQuery.Promise}
+ */
+ loadGroups: function () {
+ if ( groupsLoader !== undefined ) {
+ return groupsLoader;
+ }
+
+ var params = {
+ action: 'query',
+ meta: 'messagegroups',
+ mgformat: 'tree',
+ mgprop: 'id|label|icon',
+ mgiconsize: '32',
+ mglanguageFilter: this.options.language
+ };
+
+ groupsLoader = new mw.Api()
+ .get( params )
+ .then( function ( result ) {
+ return result.query.messagegroups;
+ } )
+ .promise();
+
+ return groupsLoader;
+ },
+
+ /**
+ * Add rows with message groups to the selector.
+ *
+ * @param {Array} groups Array of message group objects to add.
+ */
+ addGroupRows: function ( groups ) {
+ var groupSelector = this,
+ $msgGroupRows = [];
+
+ if ( !groups ) {
+ return;
+ }
+
+ groups.forEach( function ( group ) {
+ $msgGroupRows.push( groupSelector.prepareMessageGroupRow( group ) );
+ } );
+
+ if ( this.parentGroupId ) {
+ var $parent = this.$list.find( '.tux-grouplist__item[data-msggroupid="' +
+ this.parentGroupId + '"]' );
+
+ if ( $parent.length ) {
+ $parent.after( $msgGroupRows );
+ return;
+ }
+ }
+
+ this.$list.append( $msgGroupRows );
+ },
+
+ /**
+ * Prepare a message group row in the selector.
+ *
+ * @param {Object} messagegroup object.
+ * @return {Object} a jQuery object with the groups selector row (<div>).
+ */
+ prepareMessageGroupRow: function ( messagegroup ) {
+ var $row = $( '<div>' )
+ .addClass( 'row tux-grouplist__item' )
+ .attr( 'data-msggroupid', messagegroup.id )
+ .data( 'msggroup', messagegroup );
+
+ var $icon = $( '<div>' )
+ .addClass( 'tux-grouplist__item__icon' )
+ .addClass( 'one column' );
+
+ var $statsbar = $( '<div>' ).languagestatsbar( {
+ language: this.options.language,
+ group: messagegroup.id
+ } );
+
+ var $label = $( '<div>' )
+ .addClass( 'tux-grouplist__item__label' )
+ .addClass( 'seven columns' )
+ .append(
+ $( '<span>' )
+ // T130390: must be attr for IE/Edge.
+ .attr( { dir: 'auto' } )
+ .text( messagegroup.label ),
+ $statsbar
+ );
+
+ var style = '';
+ if ( messagegroup.icon && messagegroup.icon.raster ) {
+ style += 'background-image: url(--);';
+ style = style.replace( /--/g, messagegroup.icon.raster );
+ }
+
+ if ( messagegroup.icon && messagegroup.icon.vector ) {
+ style += 'background-image: linear-gradient(transparent, transparent), url(--);';
+ style = style.replace( /--/g, messagegroup.icon.vector );
+ }
+
+ if ( style !== '' ) {
+ $icon.attr( 'style', style );
+ }
+
+ var $subGroupsLabel = $( [] );
+
+ if ( messagegroup.groups && messagegroup.groups.length > 0 ) {
+ $subGroupsLabel = $( '<div>' )
+ .addClass( 'tux-grouplist__item__subgroups' )
+ .addClass( 'four columns' )
+ .text( mw.msg( 'translate-msggroupselector-view-subprojects',
+ messagegroup.groups.length ) );
+ }
+
+ return $row.append( $icon, $label, $subGroupsLabel );
+ },
+
+ /**
+ * Check that a DOM event is supported by the $menu jQuery object.
+ *
+ * @param {string} eventName
+ * @return {boolean}
+ */
+ eventSupported: function ( eventName ) {
+ var $search = this.$menu.find( '.tux-groupselector__filter__search__input' ),
+ isSupported = eventName in $search;
+
+ if ( !isSupported ) {
+ this.$element.setAttribute( eventName, 'return;' );
+ isSupported = typeof this.$element[ eventName ] === 'function';
+ }
+
+ return isSupported;
+ },
+
+ /**
+ * Only shows message groups translatable to given target language
+ *
+ * @param {string} targetLanguage
+ */
+ updateTargetLanguage: function ( targetLanguage ) {
+ this.options.language = targetLanguage;
+ groupsLoader = undefined;
+ this.firstShow = true;
+ }
+ };
+
+ /*
+ * msggroupselector PLUGIN DEFINITION
+ */
+
+ $.fn.msggroupselector = function ( options, groups ) {
+ return this.each( function () {
+ var $this = $( this ),
+ data = $this.data( 'msggroupselector' );
+
+ if ( !data ) {
+ $this.data( 'msggroupselector',
+ ( data = new TranslateMessageGroupSelector( this, options, groups ) )
+ );
+ }
+
+ if ( typeof options === 'string' ) {
+ data[ options ].call( $this );
+ }
+ } );
+ };
+
+ $.fn.msggroupselector.Constructor = TranslateMessageGroupSelector;
+
+ $.fn.msggroupselector.defaults = {
+ language: 'en',
+ position: {
+ my: 'left top',
+ at: 'left-90 bottom+5'
+ }
+ };
+
+ /*
+ * Private functions
+ */
+
+ /**
+ * Escape the search query for regex match
+ *
+ * @param {string} value A search string to be escaped.
+ * @return {string} Escaped string that is safe to use for a search.
+ */
+ function escapeRegex( value ) {
+ return value.replace( /[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&' );
+ }
+
+ delay = ( function () {
+ var timer = 0;
+
+ return function ( callback, milliseconds ) {
+ clearTimeout( timer );
+ timer = setTimeout( callback, milliseconds );
+ };
+ }() );
+}() );
diff --git a/Translate/resources/js/ext.translate.messagerenamedialog.js b/Translate/resources/js/ext.translate.messagerenamedialog.js
new file mode 100644
index 00000000..3e3c2a38
--- /dev/null
+++ b/Translate/resources/js/ext.translate.messagerenamedialog.js
@@ -0,0 +1,324 @@
+/**
+ * Dialog for displaying possible renamed messages.
+ * Note that methods are not safe to call before the dialog has initialized.
+ *
+ * @copyright See AUTHORS.txt
+ * @license GPL-2.0-or-later
+ */
+
+'use strict';
+
+mw.translate = mw.translate || {};
+
+/**
+ * @class
+ * @extends OO.ui.ProcessDialog
+ *
+ * @constructor
+ * @param {Object} [config] Similar configuration as the OO.ui.ProcessDialog
+ * @param {Function} [onRenameSelect] Function to call when the rename button is pressed
+ */
+mw.translate.MessageRenameDialog = function ( config, onRenameSelect ) {
+ // HTML Elements
+ this.messageSearch = null;
+ this.searchButton = null;
+ this.panel = null;
+ this.form = null;
+ this.$notice = null;
+
+ // Data properties
+ this.possibleRenames = null;
+ this.currentGroupId = null;
+ this.targetKey = null;
+ this.selectedMessage = null;
+ this.resetProperties();
+
+ if ( !onRenameSelect ) {
+ var errMsg = 'Must provide the "onRenameSelect" callback function.';
+ mw.log.error( errMsg );
+ throw new Error( errMsg );
+ }
+ this.onRenameSelect = onRenameSelect;
+
+ // Parent constructor
+ mw.translate.MessageRenameDialog.super.call( this, config );
+};
+
+/* Inheritance */
+OO.inheritClass( mw.translate.MessageRenameDialog, OO.ui.ProcessDialog );
+
+/* Static Properties */
+mw.translate.MessageRenameDialog.static.name = 'MessageRenameDialog';
+
+mw.translate.MessageRenameDialog.static.actions = [
+ {
+ flags: [ 'primary', 'progressive' ],
+ label: mw.msg( 'translate-smg-rename-select' ),
+ action: 'select',
+ active: true
+ },
+ {
+ flags: 'safe',
+ label: mw.msg( 'translate-smg-rename-cancel' ),
+ action: 'cancel'
+ }
+];
+
+/**
+ * @inheritdoc
+ */
+mw.translate.MessageRenameDialog.prototype.initialize = function () {
+ mw.translate.MessageRenameDialog.super.prototype.initialize.call( this );
+
+ this.messageSearch = new OO.ui.TextInputWidget( {
+ placeholder: mw.msg( 'translate-smg-rename-search' )
+ } );
+
+ this.searchButton = new OO.ui.ButtonWidget( {
+ icon: 'search',
+ invisibleLabel: true
+ } );
+
+ this.panel = new OO.ui.PanelLayout( {
+ padded: true,
+ expanded: false
+ } );
+
+ this.form = new OO.ui.FormLayout( {
+ padded: true,
+ expanded: false,
+ items: [
+ new OO.ui.ActionFieldLayout( this.messageSearch, this.searchButton, {
+ classes: [ 'smg-rename-msg-search' ]
+ } )
+ ],
+ method: 'post'
+ } );
+
+ this.$notice = $( '<p>' )
+ .addClass( 'smg-rename-notice hide' );
+
+ this.form.$element.append( this.$notice );
+ this.panel.$element.append( this.form.$element );
+ this.$body.append( this.panel.$element );
+
+ this.addEvents();
+};
+
+mw.translate.MessageRenameDialog.prototype.addEvents = function () {
+ this.form.$element.on( 'click', '.smg-rename-list', this.selectMessage.bind( this ) );
+ this.messageSearch.on( 'change', OO.ui.debounce( this.filterMessages.bind( this ), 300 ) );
+};
+
+/**
+ * @inheritdoc
+ */
+mw.translate.MessageRenameDialog.prototype.getSetupProcess = function ( renameDialogData ) {
+ var dialogData = renameDialogData || {};
+ return mw.translate.MessageRenameDialog.super.prototype.getSetupProcess.call( this, dialogData )
+ .next( function () {
+ // Set up contents based on data
+ this.possibleRenames = dialogData.messages;
+ this.currentGroupId = dialogData.groupId;
+ this.targetKey = dialogData.targetKey;
+ this.selectedMessage = null;
+
+ this.displayMessages( this.possibleRenames );
+ }, this );
+};
+
+/**
+ * @inheritdoc
+ */
+mw.translate.MessageRenameDialog.prototype.getActionProcess = function ( action ) {
+ if ( action === 'cancel' ) {
+ return new OO.ui.Process( function () {
+ this.close();
+ this.emit( action );
+ }, this );
+ } else if ( action === 'select' ) {
+ if ( !this.selectedMessage ) {
+ return new OO.ui.Process( function () {
+ this.displayNotice( mw.msg( 'translate-smg-rename-select-err' ), 'error' );
+ }, this );
+ }
+ return mw.translate.MessageRenameDialog.super.prototype.getActionProcess.call( this, action )
+ .next( this.rename.bind( this ) )
+ .next( function () {
+ return this.close().closed;
+ }.bind( this ) );
+ }
+
+ return mw.translate.MessageRenameDialog.super.prototype.getActionProcess.call( this, action );
+};
+
+/**
+ * @inheritdoc
+ */
+mw.translate.MessageRenameDialog.prototype.getTeardownProcess = function ( data ) {
+ return mw.translate.MessageRenameDialog.super.prototype.getTeardownProcess.call( this, data )
+ .first( function () {
+ // Perform any cleanup as needed
+ this.clearMessages();
+ this.messageSearch.setValue( '' );
+
+ this.resetProperties();
+ }, this );
+};
+
+/**
+ * Displays the given messages on the dialog box.
+ *
+ * @param {Array} messages
+ */
+mw.translate.MessageRenameDialog.prototype.displayMessages = function ( messages ) {
+ if ( !messages.length ) {
+ this.displayNotice( mw.msg( 'translate-smg-rename-no-msg' ), 'info' );
+ return;
+ }
+
+ for ( var i = 0; i < messages.length; i++ ) {
+ this.displayMessage( messages[ i ] );
+ }
+};
+
+/**
+ * Generates the HTML to display a single message
+ *
+ * @param {Object} message
+ */
+mw.translate.MessageRenameDialog.prototype.displayMessage = function ( message ) {
+ var $title = $( '<div>' ).append(
+ $( '<a>' ).text( message.title ).addClass( 'smg-rename-msg-key' )
+ .prop( 'href', message.link )
+ .data( 'msg-key', message.key ),
+ $( '<span>' ).text(
+ mw.msg( 'percent', mw.language.convertNumber( ( message.similarity * 100 ).toFixed() ) )
+ ).addClass( 'smg-rename-similarity' )
+ );
+
+ var $content = $( '<div>' ).text( message.content ).addClass( 'smg-rename-msg-content' );
+
+ var $container = $( '<div>' ).addClass( 'smg-rename-list' );
+
+ $container.append( $title, $content );
+
+ this.form.$element.append( $container );
+};
+
+/**
+ * Callback triggered when a message is selected.
+ *
+ * @param {Object} event
+ */
+mw.translate.MessageRenameDialog.prototype.selectMessage = function ( event ) {
+ var $target = $( event.currentTarget );
+ this.selectedMessage = $target.find( '.smg-rename-msg-key' ).data( 'msgKey' );
+
+ this.form.$element.find( '.smg-rename-list' ).removeClass( 'smg-rename-selected' );
+ $target.addClass( 'smg-rename-selected' );
+
+ this.hideNotice();
+};
+
+/**
+ * Used to reset the state properties for the dialog box.
+ */
+mw.translate.MessageRenameDialog.prototype.resetProperties = function () {
+ this.possibleRenames = [];
+ this.currentGroupId = null;
+ this.targetKey = null;
+ this.selectedMessage = null;
+};
+
+/**
+ * Perform the actual rename
+ *
+ * @return {jQuery.Promise} Resolves after making call to the onRenameSelect function.
+ */
+mw.translate.MessageRenameDialog.prototype.rename = function () {
+ var deferred = $.Deferred();
+ var promise = deferred.promise();
+
+ var renameData = {
+ groupId: this.currentGroupId,
+ targetKey: this.targetKey,
+ selectedKey: this.selectedMessage
+ };
+
+ this.onRenameSelect( renameData ).done( function () {
+ return deferred.resolve();
+ } ).fail( function ( code, result ) {
+ if ( result.error ) {
+ if ( result.error.code === 'permissiondenied' ) {
+ return deferred.reject( new OO.ui.Error( result.error.info,
+ { recoverable: false } ) );
+ }
+
+ return deferred.reject( OO.ui.Error( result.error.info ) );
+ }
+ } );
+
+ return promise;
+};
+
+/**
+ * Callback function triggered to handle the search.
+ *
+ * @param {Object} searchValue
+ */
+mw.translate.MessageRenameDialog.prototype.filterMessages = function ( searchValue ) {
+ var normalizedSearchVal = searchValue.toLowerCase(), filteredMessages = [];
+
+ // if the dialog is closing, let's not do anything.
+ if ( this.isClosing() || !this.isVisible() ) {
+ return;
+ }
+
+ filteredMessages = this.possibleRenames.filter( function ( message ) {
+ if ( message.key.toLowerCase().indexOf( normalizedSearchVal ) !== -1 ) {
+ return true;
+ }
+
+ if ( message.content.toLowerCase().indexOf( normalizedSearchVal ) !== -1 ) {
+ return true;
+ }
+ return false;
+ } );
+
+ this.clearMessages();
+ this.displayMessages( filteredMessages );
+ this.updateSize();
+};
+
+/**
+ * Method use to display a notice on the dialog box
+ *
+ * @param {string} msg
+ * @param {string} type Type of notice to display.
+ */
+mw.translate.MessageRenameDialog.prototype.displayNotice = function ( msg, type ) {
+ var possibleTypes = [ 'info', 'error', 'warning' ];
+ // `type` classes documented above. Will be one of "possibleTypes".
+ // eslint-disable-next-line mediawiki/class-doc
+ this.$notice.removeClass( possibleTypes );
+ // eslint-disable-next-line mediawiki/class-doc
+ this.$notice.text( msg ).addClass( type ).removeClass( 'hide' );
+ this.updateSize();
+};
+
+/**
+ * Hide displayed notice.
+ */
+mw.translate.MessageRenameDialog.prototype.hideNotice = function () {
+ this.$notice.addClass( 'hide' );
+ this.updateSize();
+};
+
+/**
+ * Clears all messages from the DOM.
+ */
+mw.translate.MessageRenameDialog.prototype.clearMessages = function () {
+ this.form.$element.find( '.smg-rename-list' ).remove();
+ this.hideNotice();
+};
diff --git a/Translate/resources/js/ext.translate.messagetable.js b/Translate/resources/js/ext.translate.messagetable.js
new file mode 100644
index 00000000..a00ec6ff
--- /dev/null
+++ b/Translate/resources/js/ext.translate.messagetable.js
@@ -0,0 +1,975 @@
+( function () {
+ 'use strict';
+
+ var itemsClass = {
+ proofread: '.tux-message-proofread',
+ page: '.tux-message-pagemode',
+ translate: '.tux-message'
+ };
+
+ mw.translate = mw.translate || {};
+ mw.translate = $.extend( mw.translate, {
+ getMessages: function ( messageGroup, language, offset, limit, filter ) {
+ var api = new mw.Api();
+
+ return api.get( {
+ action: 'query',
+ list: 'messagecollection',
+ mcgroup: messageGroup,
+ mclanguage: language,
+ mcoffset: offset,
+ mclimit: limit,
+ mcfilter: filter,
+ mcprop: 'definition|translation|tags|properties',
+ rawcontinue: 1,
+ errorformat: 'html',
+ formatversion: 2
+ } );
+ }
+ } );
+
+ function MessageTable( container, options, settings ) {
+ this.$container = $( container );
+ this.options = options;
+ this.options = $.extend( {}, $.fn.messagetable.defaults, options );
+ this.settings = settings;
+ // mode can be proofread, page or translate
+ this.mode = this.options.mode;
+ this.firstProofreadTipShown = false;
+ this.initialized = false;
+ this.$header = this.$container.siblings( '.tux-messagetable-header' );
+ // Container is between these in the dom.
+ this.$loader = this.$container.siblings( '.tux-messagetable-loader' );
+ this.$loaderIcon = this.$loader.find( '.tux-loading-indicator' );
+ this.$loaderInfo = this.$loader.find( '.tux-messagetable-loader-info' );
+ this.$actionBar = this.$container.siblings( '.tux-action-bar' );
+ this.$statsBar = this.$actionBar.find( '.tux-message-list-statsbar' );
+ this.$proofreadOwnTranslations = this.$actionBar.find( '.tux-proofread-own-translations-button' );
+ this.messages = [];
+ this.loading = false;
+ this.init();
+ this.listen();
+ }
+
+ MessageTable.prototype = {
+ init: function () {
+ this.$actionBar.removeClass( 'hide' );
+ },
+
+ listen: function () {
+ var messageTable = this,
+ $filterInput = this.$container.parent().find( '.tux-message-filter-box' );
+
+ // Vector has transitions of 250ms which affect layout. Let those finish.
+ $( window ).on( 'scroll', mw.util.debounce( 250, function () {
+ messageTable.scroll();
+
+ if ( isLoaderVisible( messageTable.$loader ) ) {
+ messageTable.load();
+ }
+ } ) ).on( 'resize', this.throttle( function () {
+ messageTable.resize();
+ messageTable.scroll();
+ }, 250 ) );
+
+ $filterInput.on( 'input', mw.util.debounce( 250, function () {
+ messageTable.search( $filterInput.val() );
+ } ) );
+
+ this.$actionBar.find( 'button.proofread-mode-button' ).on( 'click', function () {
+ messageTable.switchMode( 'proofread' );
+ } );
+
+ this.$actionBar.find( 'button.translate-mode-button' ).on( 'click', function () {
+ messageTable.switchMode( 'translate' );
+ } );
+
+ this.$actionBar.find( 'button.page-mode-button' ).on( 'click', function () {
+ messageTable.switchMode( 'page' );
+ } );
+
+ this.$proofreadOwnTranslations.on( 'click', function () {
+ var $this = $( this ),
+ hideMessage = mw.msg( 'tux-editor-proofreading-hide-own-translations' ),
+ showMessage = mw.msg( 'tux-editor-proofreading-show-own-translations' );
+
+ if ( $this.hasClass( 'down' ) ) {
+ messageTable.setHideOwnInProofreading( false );
+ $this.removeClass( 'down' ).text( hideMessage );
+ } else {
+ messageTable.setHideOwnInProofreading( true );
+ $this.addClass( 'down' ).text( showMessage );
+ }
+ } );
+ },
+
+ /**
+ * Clear the message table
+ */
+ clear: function () {
+ this.$container.empty();
+ $( '.translate-tooltip' ).remove();
+ this.messages = [];
+ // Any ongoing loading process will notice this and will reject results.
+ this.loading = false;
+ },
+
+ /**
+ * Adds a new message using current mode.
+ *
+ * @param {Object} message
+ */
+ add: function ( message ) {
+ // Prepare the message for display
+ mw.hook( 'mw.translate.messagetable.formatMessageBeforeTable' ).fire( message );
+
+ if ( this.mode === 'translate' ) {
+ this.addTranslate( message );
+ } else if ( this.mode === 'proofread' ) {
+ this.addProofread( message );
+ } else if ( this.mode === 'page' ) {
+ this.addPageModeMessage( message );
+ }
+ },
+
+ /**
+ * Add a message to the message table for translation.
+ *
+ * @param {Object} message
+ */
+ addTranslate: function ( message ) {
+ var targetLangCode = this.$container.data( 'targetlangcode' ),
+ sourceLangCode = this.$container.data( 'sourcelangcode' ),
+ sourceLangDir = $.uls.data.getDir( sourceLangCode ),
+ status = message.properties.status,
+ statusClass = 'tux-status-' + status,
+ $messageWrapper = $( '<div>' ).addClass( 'row tux-message' ),
+ statusMsg = '';
+
+ message.proofreadable = false;
+
+ if ( message.tags.length &&
+ message.tags.indexOf( 'optional' ) >= 0 &&
+ status === 'untranslated'
+ ) {
+ status = 'optional';
+ statusClass = 'tux-status-optional';
+ }
+
+ // Fuzzy translations need warning class
+ if ( status === 'fuzzy' ) {
+ statusClass = statusClass + ' tux-notice';
+ }
+
+ // Label the status if it is not untranslated
+ if ( status !== 'untranslated' ) {
+ // Give grep a chance to find the usages:
+ // tux-status-optional, tux-status-fuzzy, tux-status-proofread,
+ // tux-status-translated, tux-status-saving, tux-status-unsaved
+ statusMsg = 'tux-status-' + status;
+ }
+
+ var targetLangDir, targetLangAttrib;
+ if ( targetLangCode === mw.config.get( 'wgTranslateDocumentationLanguageCode' ) ) {
+ targetLangAttrib = mw.config.get( 'wgContentLanguage' );
+ targetLangDir = $.uls.data.getDir( targetLangAttrib );
+ } else {
+ targetLangAttrib = targetLangCode;
+ targetLangDir = this.$container.data( 'targetlangdir' );
+ }
+
+ var $message = $( '<div>' )
+ .addClass( 'row message tux-message-item ' + status )
+ .append(
+ $( '<div>' )
+ .addClass( 'eight columns tux-list-message' )
+ .append(
+ $( '<span>' )
+ .addClass( 'tux-list-source' )
+ .attr( {
+ lang: sourceLangCode,
+ dir: sourceLangDir
+ } )
+ .text( message.definition ),
+ // Bidirectional isolation.
+ // This should be removed some day when proper
+ // unicode-bidi: isolate
+ // is supported everywhere
+ $( '<span>' )
+ .html( $( document.body ).hasClass( 'rtl' ) ? '&rlm;' : '&lrm;' ),
+ $( '<span>' )
+ .addClass( 'tux-list-translation' )
+ .attr( {
+ lang: targetLangAttrib,
+ dir: targetLangDir
+ } )
+ .text( message.translation || '' )
+ ),
+ $( '<div>' )
+ .addClass( 'two columns tux-list-status text-center' )
+ .append(
+ $( '<span>' )
+ .addClass( statusClass )
+ // The following messages are used here:
+ // * tux-status-optional
+ // * tux-status-fuzzy
+ // * tux-status-proofread
+ // * tux-status-translated
+ // * tux-status-saving
+ // * tux-status-unsaved
+ .text( statusMsg ? mw.msg( statusMsg ) : '' )
+ ),
+ $( '<div>' )
+ .addClass( 'two column tux-list-edit text-right' )
+ .append(
+ $( '<a>' )
+ .attr( {
+ title: mw.msg( 'translate-edit-title', message.key ),
+ href: mw.util.getUrl( message.title, { action: 'edit' } )
+ } )
+ .text( mw.msg( 'tux-edit' ) )
+ )
+ );
+
+ $messageWrapper.append( $message );
+ this.$container.append( $messageWrapper );
+
+ // Attach translate editor to the message
+ $messageWrapper.translateeditor( {
+ message: message
+ } );
+ },
+
+ /**
+ * Add a message to the message table for proofreading.
+ *
+ * @param {Object} message
+ */
+ addProofread: function ( message ) {
+ var $message = $( '<div>' )
+ .addClass( 'row tux-message tux-message-proofread' );
+
+ this.$container.append( $message );
+ $message.proofread( {
+ message: message,
+ sourcelangcode: this.$container.data( 'sourcelangcode' ),
+ targetlangcode: this.$container.data( 'targetlangcode' )
+ } );
+
+ var $icon = $message.find( '.tux-proofread-action' );
+ if ( $icon.length === 0 ) {
+ return;
+ }
+
+ // Add autotooltip to first available proofread action icon
+ if ( this.firstProofreadTipShown ) {
+ return;
+ }
+ this.firstProofreadTipShown = true;
+ $icon.addClass( 'autotooltip' );
+
+ mw.loader.using( 'oojs-ui-core' ).done( function () {
+ var tooltip = new OO.ui.PopupWidget( {
+ padded: true,
+ align: 'center',
+ width: 250,
+ classes: [ 'translate-tooltip' ],
+ $content: $( '<p>' ).text( $icon.prop( 'title' ) )
+ } );
+
+ setTimeout( function () {
+ var $visibleIcon = $( '.autotooltip:visible' );
+ if ( !$visibleIcon.length ) {
+ return;
+ }
+
+ var offset = $visibleIcon.offset();
+ tooltip.$element.appendTo( document.body );
+ tooltip
+ .toggle( true )
+ .toggleClipping( false )
+ .togglePositioning( false )
+ .setAnchorEdge( 'top' );
+ tooltip.$element.css( {
+ top: offset.top + $visibleIcon.outerHeight() + 5,
+ left: offset.left + $visibleIcon.outerWidth() - tooltip.$element.width() / 2 - 15
+ } );
+
+ setTimeout( function () {
+ tooltip.$element.remove();
+ }, 4000 );
+ }, 1000 );
+ } );
+ },
+
+ /**
+ * Add a message to the message table for wiki page mode.
+ *
+ * @param {Object} message
+ */
+ addPageModeMessage: function ( message ) {
+ var $message = $( '<div>' )
+ .addClass( 'row tux-message tux-message-pagemode' );
+
+ this.$container.append( $message );
+ $message.pagemode( {
+ message: message,
+ sourcelangcode: this.$container.data( 'sourcelangcode' ),
+ targetlangcode: this.$container.data( 'targetlangcode' )
+ } );
+ },
+
+ /**
+ * Search the message filter
+ *
+ * @param {string} query
+ */
+ search: function ( query ) {
+ var resultCount = 0,
+ matcher = new RegExp( '(^|\\s|\\b)' + escapeRegex( query ), 'gi' );
+
+ this.$container.find( itemsClass[ this.mode ] ).each( function () {
+ var $message = $( this ),
+ message = ( $message.data( 'translateeditor' ) ||
+ $message.data( 'pagemode' ) ||
+ $message.data( 'proofread' ) ).message;
+
+ if ( matcher.test( message.definition ) || matcher.test( message.translation ) ) {
+ $message.removeClass( 'hide' );
+ resultCount++;
+ } else {
+ $message.addClass( 'hide' );
+ }
+ } );
+
+ var $result = this.$container.find( '.tux-message-filter-result' );
+ if ( !$result.length ) {
+ var $note = $( '<div>' )
+ .addClass( 'advanced-search' );
+
+ var $button = $( '<button>' )
+ .addClass( 'mw-ui-button' )
+ .text( mw.msg( 'tux-message-filter-advanced-button' ) );
+
+ $result = $( '<div>' )
+ .addClass( 'tux-message-filter-result' )
+ .append( $note, $button );
+
+ this.$container.prepend( $result );
+ }
+
+ if ( !query ) {
+ $result.addClass( 'hide' );
+ } else {
+ $result.removeClass( 'hide' )
+ .find( '.advanced-search' )
+ .text( mw.msg( 'tux-message-filter-result', resultCount, query ) );
+ $result.find( 'button' ).on( 'click', function () {
+ window.location.href = mw.util.getUrl( 'Special:SearchTranslations', { query: query } );
+ } );
+ }
+
+ this.updateLastMessage();
+
+ // Trigger a scroll event for the window to make sure all floating toolbars
+ // are in their position.
+ $( window ).trigger( 'scroll' );
+ },
+
+ resize: function () {
+ var $messageSelector = $( '.row.tux-message-selector' );
+
+ if ( $messageSelector.is( ':hidden' ) ) {
+ return;
+ }
+
+ var actualWidth = 0;
+ // Calculate the total width required for the filters
+ $messageSelector.children( 'li' ).each( function () {
+ actualWidth += $( this ).outerWidth( true );
+ } );
+
+ // Grid row has a min width. After that scrollbars will appear.
+ // We are checking whether the message table is wider than the current grid row width.
+ if ( actualWidth >= parseInt( $( '.nine.columns' ).width(), 10 ) ) {
+ $( '.tux-message-selector .more ul' ) // Overflow menu
+ .prepend( $( '.row.tux-message-selector > li.column:last' ).prev() );
+
+ // See if more items to be pushed to the overflow menu
+ this.resize();
+ }
+ },
+
+ /**
+ * Start loading messages again with new settings.
+ *
+ * @param {Object} changes
+ */
+ changeSettings: function ( changes ) {
+ // Clear current messages
+ this.clear();
+ this.settings = $.extend( this.settings, changes );
+
+ if ( this.initialized === false ) {
+ this.switchMode( this.mode );
+ }
+
+ // Reset the number of messages remaining
+ this.$loaderInfo.text(
+ mw.msg( 'tux-messagetable-loading-messages', this.$loader.data( 'pagesize' ) )
+ );
+
+ // Update the target language
+ this.$container.data( 'targetlangcode', this.settings.language );
+
+ // Reset the statsbar
+ this.$statsBar
+ .empty()
+ .removeData()
+ .languagestatsbar( {
+ language: this.settings.language,
+ group: this.settings.group,
+ onlyLoadCurrentGroupData: true
+ } );
+
+ this.initialized = true;
+ // Reset other info and make visible
+ this.$loader
+ .removeData( 'offset' )
+ .removeAttr( 'data-offset' )
+ .removeClass( 'hide' );
+
+ if ( changes.offset ) {
+ this.$loader.data( 'offset', changes.offset );
+ }
+
+ this.$header.removeClass( 'hide' );
+ this.$actionBar.removeClass( 'hide' );
+
+ // Start loading messages
+ this.load( changes.limit );
+ },
+
+ /**
+ * @param {number} [limit] Only load this many messages and then stop even if there is more.
+ */
+ load: function ( limit ) {
+ var self = this,
+ offset = this.$loader.data( 'offset' ),
+ pageSize = limit || this.$loader.data( 'pagesize' );
+
+ if ( offset === -1 ) {
+ return;
+ }
+
+ if ( this.loading ) {
+ // Avoid duplicate loading - the offset will be wrong and it will result
+ // in duplicate messages shown in the page
+ return;
+ }
+
+ this.loading = true;
+ this.$loaderIcon.removeClass( 'tux-loading-indicator--stopped' );
+
+ mw.translate.getMessages(
+ this.settings.group,
+ this.settings.language,
+ offset,
+ pageSize,
+ this.settings.filter
+ ).done( function ( result ) {
+ var messages = result.query.messagecollection;
+
+ if ( !self.loading ) {
+ // reject. This was cancelled.
+ return;
+ }
+
+ self.clearLoadErrors();
+ if ( result.warnings ) {
+ for ( var i = 0; i !== result.warnings.length; i++ ) {
+ var currentWarning = result.warnings[ i ];
+ if ( currentWarning.code === 'translate-language-disabled-source' ) {
+ self.handleLoadErrors( [ currentWarning ] );
+ // Since translation to source language is disabled, do not display any messages
+ return;
+ }
+ if ( currentWarning.code === 'translate-language-targetlang-variant-of-source'
+ ) {
+ self.displayLoadErrors( [ currentWarning ] );
+ break;
+ }
+ }
+ }
+
+ if ( messages.length === 0 ) {
+ // And this is the first load for the filter...
+ if ( self.$container.children().length === 0 ) {
+ self.displayEmptyListHelp();
+ }
+ }
+
+ messages.forEach( function ( message, index ) {
+ message.group = self.settings.group;
+ self.add( message );
+ self.messages.push( message );
+
+ if ( index === 0 && self.mode === 'translate' ) {
+ $( '.tux-message:first' ).data( 'translateeditor' ).init();
+ }
+ } );
+
+ var state = result.query.metadata && result.query.metadata.state;
+ $( '.tux-workflow' ).workflowselector(
+ self.settings.group,
+ self.settings.language,
+ state
+ ).removeClass( 'hide' );
+
+ // Dynamically loaded messages should pass the search filter if present.
+ var query = $( '.tux-message-filter-box' ).val();
+
+ if ( query ) {
+ self.search( query );
+ }
+
+ if ( result[ 'query-continue' ] === undefined || limit ) {
+ // End of messages
+ self.$loader.data( 'offset', -1 )
+ .addClass( 'hide' );
+ } else {
+ self.$loader.data( 'offset', result[ 'query-continue' ].messagecollection.mcoffset );
+
+ var remaining = result.query.metadata.remaining;
+
+ self.$loaderInfo.text(
+ mw.msg( 'tux-messagetable-more-messages', remaining )
+ );
+
+ // Make sure the floating toolbars are visible without the need for scroll
+ $( window ).trigger( 'scroll' );
+ }
+
+ // Helpfully open the first message in show mode on page load
+ // But do not open it if we are at the bottom of the page waiting for more translation units
+ if ( self.messages.length <= pageSize ) {
+ // TODO: Refactor to avoid direct DOM access
+ $( '.tux-message-item' ).first().trigger( 'click' );
+ }
+
+ self.updateHideOwnInProofreadingToggleVisibility();
+ self.updateLastMessage();
+ } ).fail( function ( errorCode, response ) {
+ self.handleLoadErrors( response.errors, errorCode );
+ } ).always( function () {
+ self.$loaderIcon.addClass( 'tux-loading-indicator--stopped' );
+ self.loading = false;
+ } );
+ },
+
+ updateLastMessage: function () {
+ var $messages = this.$container.find( itemsClass[ this.mode ] );
+
+ // If a message was previously marked as "last", restore it to normal state
+ $messages.filter( '.last-message' ).removeClass( 'last-message' );
+
+ // At the class to the current last shown message
+ $messages
+ .not( '.hide' )
+ .last()
+ .addClass( 'last-message' );
+ },
+
+ /**
+ * Creates a uniformly styled button for different actions,
+ * shown when there are no messages to display.
+ *
+ * @param {string} labelMsg A message key for the button label.
+ * @param {Function} callback A callback for clicking the button.
+ * @return {jQuery} A button element.
+ */
+ otherActionButton: function ( labelMsg, callback ) {
+ return $( '<button>' )
+ .addClass( 'mw-ui-button mw-ui-progressive mw-ui-big' )
+ .text( mw.msg( labelMsg ) )
+ .on( 'click', callback );
+ },
+
+ /**
+ * Enables own message hiding in proofread mode.
+ *
+ * @param {boolean} enabled
+ */
+ setHideOwnInProofreading: function ( enabled ) {
+ if ( enabled ) {
+ this.$container.addClass( 'tux-hide-own' );
+ } else {
+ this.$container.removeClass( 'tux-hide-own' );
+ }
+ },
+
+ updateHideOwnInProofreadingToggleVisibility: function () {
+ if ( this.$container.find( '.tux-message-proofread.own-translation' ).length ) {
+ this.$proofreadOwnTranslations.removeClass( 'hide' );
+ } else {
+ this.$proofreadOwnTranslations.addClass( 'hide' );
+ }
+ },
+
+ /**
+ * If the user selection doesn't show anything,
+ * give some pointers to other things to do.
+ */
+ displayEmptyListHelp: function () {
+ var messageTable = this,
+ // @todo Ugly! This should be provided somehow
+ selectedTab = $( '.tux-message-selector .selected' ).data( 'title' ),
+ $wrap = $( '<div>' ).addClass( 'tux-empty-list' ),
+ $emptyListHeader = $( '<div>' ).addClass( 'tux-empty-list-header' ),
+ $guide = $( '<div>' ).addClass( 'tux-empty-list-guide' ),
+ $actions = $( '<div>' ).addClass( 'tux-empty-list-actions' );
+
+ if ( messageTable.mode === 'proofread' ) {
+ if ( selectedTab === 'all' ) {
+ $emptyListHeader.text( mw.msg( 'tux-empty-no-messages-to-display' ) );
+ $guide.append(
+ $( '<p>' )
+ .text( mw.msg( 'tux-empty-there-are-optional' ) ),
+ $( '<a>' )
+ .attr( 'href', '#' )
+ .text( mw.msg( 'tux-empty-show-optional-messages' ) )
+ .on( 'click', function ( e ) {
+ $( '#tux-option-optional' ).trigger( 'click' );
+ e.preventDefault();
+ } )
+ );
+ } else if ( selectedTab === 'outdated' ) {
+ $emptyListHeader.text( mw.msg( 'tux-empty-no-outdated-messages' ) );
+ $guide.text( mw.msg( 'tux-empty-list-other-guide' ) );
+ $actions.append( messageTable.otherActionButton(
+ 'tux-empty-list-other-action',
+ function () {
+ $( '.tux-tab-unproofread' ).trigger( 'click' );
+ // @todo untranslated
+ } )
+ );
+ // @todo View all
+ } else if ( selectedTab === 'translated' ) {
+ $emptyListHeader.text( mw.msg( 'tux-empty-nothing-to-proofread' ) );
+ $guide.text( mw.msg( 'tux-empty-you-can-help-providing' ) );
+ $actions.append( messageTable.otherActionButton(
+ 'tux-empty-list-translated-action',
+ function () {
+ messageTable.switchMode( 'translate' );
+ } )
+ );
+ } else if ( selectedTab === 'unproofread' ) {
+ $emptyListHeader.text( mw.msg( 'tux-empty-nothing-new-to-proofread' ) );
+ $guide.text( mw.msg( 'tux-empty-you-can-help-providing' ) );
+ $actions.append( messageTable.otherActionButton(
+ 'tux-empty-you-can-review-already-proofread',
+ function () {
+ $( '.tux-tab-translated' ).trigger( 'click' );
+ } )
+ );
+ }
+ } else {
+ if ( selectedTab === 'all' ) {
+ $emptyListHeader.text( mw.msg( 'tux-empty-list-all' ) );
+ $guide.text( mw.msg( 'tux-empty-list-all-guide' ) );
+ } else if ( selectedTab === 'translated' ) {
+ $emptyListHeader.text( mw.msg( 'tux-empty-list-translated' ) );
+ $guide.text( mw.msg( 'tux-empty-list-translated-guide' ) );
+ $actions.append( messageTable.otherActionButton(
+ 'tux-empty-list-translated-action',
+ function () {
+ $( '.tux-tab-untranslated' ).trigger( 'click' );
+ } )
+ );
+ } else {
+ $emptyListHeader.text( mw.msg( 'tux-empty-list-other' ) );
+
+ if ( mw.translate.canProofread() ) {
+ $guide.text( mw.msg( 'tux-empty-list-other-guide' ) );
+ $actions.append( messageTable.otherActionButton(
+ 'tux-empty-list-other-action',
+ function () {
+ messageTable.switchMode( 'proofread' );
+ } )
+ );
+ }
+
+ $actions.append( $( '<a>' )
+ .text( mw.msg( 'tux-empty-list-other-link' ) )
+ .on( 'click', function () {
+ $( '.tux-tab-all' ).trigger( 'click' );
+ } )
+ );
+ }
+ }
+
+ $wrap.append( $emptyListHeader, $guide, $actions );
+ this.$container.append( $wrap );
+ },
+
+ /**
+ * Switch the message table mode
+ *
+ * @param {string} mode The message table mode to switch to: translate, page or proofread
+ */
+ switchMode: function ( mode ) {
+ var messageTable = this,
+ filter = this.settings.filter,
+ userId = mw.config.get( 'wgUserId' );
+
+ messageTable.$actionBar.find( '.tux-view-switcher .down' ).removeClass( 'down' );
+ if ( mode === 'translate' ) {
+ messageTable.$actionBar.find( '.translate-mode-button' ).addClass( 'down' );
+ }
+ if ( mode === 'proofread' ) {
+ messageTable.$actionBar.find( '.proofread-mode-button' ).addClass( 'down' );
+ }
+ if ( mode === 'page' ) {
+ messageTable.$actionBar.find( '.page-mode-button' ).addClass( 'down' );
+ }
+
+ messageTable.firstProofreadTipShown = false;
+
+ messageTable.mode = mode;
+ mw.translate.changeUrl( { action: messageTable.mode } );
+
+ // Emulate clear without clearing loaded messages
+ messageTable.$container.empty();
+ $( '.translate-tooltip' ).remove();
+
+ var $tuxTabUntranslated = $( '.tux-message-selector > .tux-tab-untranslated' );
+ var $tuxTabUnproofread = $( '.tux-message-selector > .tux-tab-unproofread' );
+ var $hideTranslatedButton = messageTable.$actionBar.find( '.tux-editor-clear-translated' );
+
+ if ( messageTable.mode === 'proofread' ) {
+ $tuxTabUntranslated.addClass( 'hide' );
+ $tuxTabUnproofread.removeClass( 'hide' );
+
+ // Fix the filter if it is untranslated. Untranslated does not make sense
+ // for proofread mode. Keep the filter if it is not 'untranslated'
+ if ( !filter || filter.indexOf( '!translated' ) >= 0 ) {
+ messageTable.messages = [];
+ // default filter for proofread mode
+ mw.translate.changeFilter( 'translated|!reviewer:' + userId +
+ '|!last-translator:' + userId );
+ $tuxTabUnproofread.addClass( 'selected' );
+ // Own translations are not present in proofread + unreviewed mode
+ }
+
+ $hideTranslatedButton.addClass( 'hide' );
+ } else {
+ $tuxTabUntranslated.removeClass( 'hide' );
+ $tuxTabUnproofread.addClass( 'hide' );
+
+ if ( filter.indexOf( '!translated' ) > -1 ) {
+ $hideTranslatedButton.removeClass( 'hide' );
+ }
+
+ if ( filter && filter.indexOf( '!last-translator' ) >= 0 ) {
+ messageTable.messages = [];
+ // default filter for translate mode
+ mw.translate.changeFilter( '!translated' );
+ $tuxTabUntranslated.addClass( 'selected' );
+ }
+ }
+
+ if ( messageTable.messages.length ) {
+ messageTable.messages.forEach( function ( message ) {
+ messageTable.add( message );
+ } );
+ } else if ( messageTable.initialized && !messageTable.loading ) {
+ messageTable.displayEmptyListHelp();
+ }
+
+ this.$loaderInfo.text(
+ mw.msg( 'tux-messagetable-loading-messages', this.$loader.data( 'pagesize' ) )
+ );
+
+ messageTable.updateHideOwnInProofreadingToggleVisibility();
+ messageTable.updateLastMessage();
+ },
+
+ /**
+ * The scroll handler
+ */
+ scroll: function () {
+ var $window = $( window );
+
+ var windowScrollTop = $window.scrollTop();
+ var windowScrollBottom = windowScrollTop + $window.height();
+ var messageListOffset = this.$container.offset();
+ var messageListHeight = this.$container.height();
+ var messageListTop = messageListOffset.top;
+ var messageListBottom = messageListTop + messageListHeight;
+ var messageListWidth = this.$container.width();
+
+ // Header:
+ var messageTableRelativePos = messageListTop - this.$header.height() - windowScrollTop;
+ var needsTableHeaderFloat = messageTableRelativePos + 10 < 0;
+ var needsTableHeaderStick = messageTableRelativePos - 10 >= 0;
+ if ( needsTableHeaderFloat ) {
+ this.$header.addClass( 'floating' ).width( messageListWidth );
+ } else if ( needsTableHeaderStick ) {
+ // Let the element change width automatically again
+ this.$header.removeClass( 'floating' ).css( 'width', '' );
+ }
+
+ // Action bar:
+ var isActionBarFloating = this.$actionBar.hasClass( 'floating' );
+ var needsActionBarFloat = windowScrollBottom < messageListBottom;
+ var needsActionBarStick = windowScrollBottom > ( messageListBottom + this.$actionBar.height() );
+
+ if ( !isActionBarFloating && needsActionBarFloat ) {
+ this.$actionBar.addClass( 'floating' ).width( messageListWidth );
+ } else if ( isActionBarFloating && needsActionBarStick ) {
+ // Let the element change width automatically again
+ this.$actionBar.removeClass( 'floating' ).css( 'width', '' );
+ } else if ( isActionBarFloating && needsActionBarFloat ) {
+ this.$actionBar.width( messageListWidth );
+ }
+ },
+
+ /**
+ * Clear errors encountered during the loading state
+ */
+ clearLoadErrors: function () {
+ $( '.tux-editor-header .tux-group-warning .tux-api-load-error' ).remove();
+ },
+
+ /**
+ * Display errors encountered during the loading state.
+ *
+ * @param {Array} errors
+ * @param {string} errorCode
+ */
+ displayLoadErrors: function ( errors, errorCode ) {
+ var $warningContainer = $( '.tux-editor-header .tux-group-warning' );
+
+ if ( errors ) {
+ errors.forEach( function ( error ) {
+ $warningContainer.append(
+ $( '<p>' )
+ .addClass( 'tux-api-load-error' )
+ .html( error.html )
+ );
+ } );
+ } else {
+ $warningContainer.append(
+ $( '<p>' )
+ .addClass( 'tux-api-load-error' )
+ .text( mw.msg( 'api-error-unknownerror', errorCode ) )
+ );
+ }
+ },
+
+ /**
+ * Displays the errors and updates the state of the table.
+ *
+ * @param {Array} errors
+ * @param {string} errorCode
+ */
+ handleLoadErrors: function ( errors, errorCode ) {
+ this.displayLoadErrors( errors, errorCode );
+
+ $( '.tux-workflow' ).addClass( 'hide' );
+ this.$loader.data( 'offset', -1 ).addClass( 'hide' );
+ this.$actionBar.addClass( 'hide' );
+ this.$header.addClass( 'hide' );
+ },
+
+ /**
+ * Return a function, that, when invoked, will only be triggered at most once
+ * during a given window of time. If called again during that window, it will
+ * wait until the window ends and then trigger itself again.
+ *
+ * As it's not knowable to the caller whether the function will actually run
+ * when the wrapper is called, return values from the function are entirely
+ * discarded.
+ *
+ * Ported from OOUI.
+ * Imported from MediaWiki core (commit f4db95c by Esanders - 2022-02-08).
+ * TODO: replace with mw.util.throttle when Translate support MediaWiki 1.38+
+ *
+ * @param {Function} func Function to throttle
+ * @param {number} wait Throttle window length, in milliseconds
+ * @return {Function} Throttled function
+ */
+ throttle: function ( func, wait ) {
+ var context, args, timeout,
+ previous = Date.now() - wait,
+ run = function () {
+ timeout = null;
+ previous = Date.now();
+ func.apply( context, args );
+ };
+ return function () {
+ // Check how long it's been since the last time the function was
+ // called, and whether it's more or less than the requested throttle
+ // period. If it's less, run the function immediately. If it's more,
+ // set a timeout for the remaining time -- but don't replace an
+ // existing timeout, since that'd indefinitely prolong the wait.
+ var remaining = Math.max( wait - ( Date.now() - previous ), 0 );
+ context = this;
+ args = arguments;
+ if ( !timeout ) {
+ // If time is up, do setTimeout( run, 0 ) so the function
+ // always runs asynchronously, just like Promise#then .
+ timeout = setTimeout( run, remaining );
+ }
+ };
+ }
+ };
+
+ /*
+ * messagetable PLUGIN DEFINITION
+ */
+
+ $.fn.messagetable = function ( options ) {
+ return this.each( function () {
+ var $this = $( this ),
+ data = $this.data( 'messagetable' );
+
+ if ( !data ) {
+ $this.data( 'messagetable', ( data = new MessageTable( this, options ) ) );
+ }
+
+ if ( typeof options === 'string' ) {
+ data[ options ].call( $this );
+ }
+ } );
+ };
+
+ $.fn.messagetable.Constructor = MessageTable;
+
+ $.fn.messagetable.defaults = {
+ mode: new mw.Uri().query.action || 'translate'
+ };
+
+ /**
+ * Escape the search query for regex match.
+ *
+ * @param {string} value A search string to be escaped.
+ * @return {string} Escaped string that is safe to use for a search.
+ */
+ function escapeRegex( value ) {
+ return value.replace( /[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&' );
+ }
+
+ function isLoaderVisible( $loader ) {
+ var $window = $( window );
+
+ var viewportBottom = ( window.innerHeight ? window.innerHeight : $window.height() ) +
+ $window.scrollTop();
+
+ var elementTop = $loader.offset().top;
+
+ // Start already if user is reaching close to the bottom
+ return elementTop - viewportBottom < 200;
+ }
+
+}() );
diff --git a/Translate/resources/js/ext.translate.navitoggle.js b/Translate/resources/js/ext.translate.navitoggle.js
new file mode 100644
index 00000000..b421893d
--- /dev/null
+++ b/Translate/resources/js/ext.translate.navitoggle.js
@@ -0,0 +1,44 @@
+/*!
+ * Introduces a toggle icon than can be used to hide navigation menu in vector
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+( function () {
+ 'use strict';
+
+ var $body = $( document.body );
+
+ // Bail out on the new Vector skin
+ if ( $( '#mw-sidebar-button' ).length ) {
+ return;
+ }
+
+ if ( $body.width() < 1000 || mw.storage.get( 'translate-navitoggle' ) === '1' ) {
+ $body.addClass( 'tux-navi-collapsed' );
+ }
+
+ $( function () {
+ var rtl = $body.hasClass( 'rtl' );
+ var delim = rtl ?
+ $( '#mw-head-base' ).css( 'margin-right' ) :
+ $( '#mw-head-base' ).css( 'margin-left' );
+
+ var $miniLogo = $( '#p-logo' )
+ .clone()
+ .removeAttr( 'id' )
+ .addClass( 'tux-navi-minilogo' );
+
+ var $toggle = $( '<div>' )
+ .addClass( 'tux-navitoggle' )
+ .css( rtl ? 'right' : 'left', delim )
+ .on( 'click', function () {
+ $body.toggleClass( 'tux-navi-collapsed' );
+ mw.storage.set(
+ 'translate-navitoggle',
+ String( Number( $body.hasClass( 'tux-navi-collapsed' ) ) )
+ );
+ } );
+
+ $body.append( $miniLogo, $toggle );
+ } );
+}() );
diff --git a/Translate/resources/js/ext.translate.pagemode.js b/Translate/resources/js/ext.translate.pagemode.js
new file mode 100644
index 00000000..fb668a73
--- /dev/null
+++ b/Translate/resources/js/ext.translate.pagemode.js
@@ -0,0 +1,140 @@
+( function () {
+ 'use strict';
+
+ /**
+ * Page mode plugin
+ *
+ * Prepare the page mode UI with all the required actions
+ * for a translation unit (message).
+ * This is mainly used with the messagetable plugin in page mode,
+ * but it is independent of messagetable.
+ * Example usage:
+ *
+ * $( 'div.pagemode' ).pagemode( {
+ * message: messageObject, // Mandatory message object
+ * sourcelangcode: 'en', // Mandatory source language code
+ * targetlangcode: 'hi' // Mandatory target language code
+ * } );
+ *
+ * @param {Element} element
+ * @param {Object} options
+ * @param {Object} options.message
+ * @param {string} options.sourcelangcode Language code.
+ * @param {string} options.targetlangcode Language code.
+ */
+ function PageMode( element, options ) {
+ this.$message = $( element );
+ this.options = options;
+ this.message = this.options.message;
+ this.init();
+ this.listen();
+ }
+
+ PageMode.prototype = {
+
+ /**
+ * Initialize the plugin
+ */
+ init: function () {
+ var that = this;
+
+ this.message.proofreadable = false;
+
+ this.render();
+
+ this.$message.translateeditor( {
+ message: this.message,
+ beforeSave: function ( translation ) {
+ that.$message.find( '.tux-pagemode-translation' )
+ .html( mw.translate.formatMessageGently( translation || '', that.message.key ) )
+ .addClass( 'highlight' );
+ },
+ onSave: function ( translation ) {
+ that.$message.find( '.tux-pagemode-translation' )
+ .removeClass( 'highlight' );
+ that.message.translation = translation;
+
+ // `status` class is documented elsewhere
+ // eslint-disable-next-line mediawiki/class-doc
+ that.$message.find( '.tux-pagemode-status' )
+ .removeClass( 'translated fuzzy proofread untranslated' )
+ .addClass( that.message.properties.status );
+ }
+ } );
+
+ },
+
+ render: function () {
+ var sourceLangDir = $.uls.data.getDir( this.options.sourcelangcode );
+
+ var targetLangAttrib;
+ if ( this.options.targetlangcode === mw.config.get( 'wgTranslateDocumentationLanguageCode' ) ) {
+ targetLangAttrib = mw.config.get( 'wgContentLanguage' );
+ } else {
+ targetLangAttrib = this.options.targetlangcode;
+ }
+
+ var targetLangDir = $.uls.data.getDir( targetLangAttrib );
+
+ // `status` class is documented elsewhere
+ // eslint-disable-next-line mediawiki/class-doc
+ this.$message.append(
+ // `status` class is documented elsewhere
+ // eslint-disable-next-line mediawiki/class-doc
+ $( '<div>' )
+ .addClass( 'row tux-message-item-compact message ' + this.message.properties.status )
+ .append(
+ // `status` class is documented elsewhere
+ // eslint-disable-next-line mediawiki/class-doc
+ $( '<div>' )
+ .addClass( 'one column tux-pagemode-status ' + this.message.properties.status ),
+ $( '<div>' )
+ .addClass( 'five columns tux-pagemode-source' )
+ .attr( {
+ lang: this.options.sourcelangcode,
+ dir: sourceLangDir
+ } )
+ .html( mw.translate.formatMessageGently( this.message.definition, this.message.key ) ),
+ $( '<div>' )
+ .addClass( 'five columns tux-pagemode-translation' )
+ .attr( {
+ lang: targetLangAttrib,
+ dir: targetLangDir
+ } )
+ .html( mw.translate.formatMessageGently( this.message.translation || '', this.message.key ) ),
+ $( '<div>' )
+ .attr( 'title', mw.msg( 'translate-edit-title', this.message.key ) )
+ .addClass( 'tux-pagemode-edit' )
+ )
+ ).addClass( this.message.properties.status );
+ },
+
+ /**
+ * Attach event listeners
+ */
+ listen: function () {
+ var that = this;
+
+ this.$message.children( '.message' ).on( 'click', function ( e ) {
+ that.$message.data( 'translateeditor' ).show();
+ e.preventDefault();
+ } );
+ }
+ };
+
+ /*
+ * pagemode PLUGIN DEFINITION
+ */
+ $.fn.pagemode = function ( options ) {
+ return this.each( function () {
+ var $this = $( this ),
+ data = $this.data( 'pagemode' );
+
+ if ( !data ) {
+ $this.data( 'pagemode', new PageMode( this, options ) );
+ }
+ } );
+ };
+
+ $.fn.pagemode.Constructor = PageMode;
+}() );
diff --git a/Translate/resources/js/ext.translate.pagetranslation.uls.js b/Translate/resources/js/ext.translate.pagetranslation.uls.js
new file mode 100644
index 00000000..9c54557d
--- /dev/null
+++ b/Translate/resources/js/ext.translate.pagetranslation.uls.js
@@ -0,0 +1,20 @@
+( function () {
+ 'use strict';
+
+ mw.uls.changeLanguage = function ( language ) {
+ var page = 'Special:MyLanguage/' + mw.config.get( 'wgPageName' );
+
+ if ( mw.config.get( 'wgTranslatePageTranslation' ) === 'translation' ) {
+ page = page.replace( /\/[^/]+$/, '' );
+ }
+
+ if ( mw.uls.setLanguage ) {
+ mw.uls.setLanguage( language ).then( function () {
+ location.href = mw.util.getUrl( page );
+ } );
+ } else {
+ // Fallback if ULS is older than Translate (2021.03)
+ location.href = mw.util.getUrl( page, { setlang: language } );
+ }
+ };
+}() );
diff --git a/Translate/resources/js/ext.translate.parsers.js b/Translate/resources/js/ext.translate.parsers.js
new file mode 100644
index 00000000..655bf5b1
--- /dev/null
+++ b/Translate/resources/js/ext.translate.parsers.js
@@ -0,0 +1,80 @@
+/*!
+ * A set of simple tools for partial parsing and formatting of translatable
+ * messages.
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+( function () {
+ 'use strict';
+
+ mw.translate = mw.translate || {};
+ mw.translate = $.extend( mw.translate, {
+ /**
+ * Formats some common wikitext elements.
+ *
+ * @param {string} text Message text
+ * @param {string} [key] Message key
+ * @return {string} Formatted text in html
+ */
+ formatMessageGently: function ( text, key ) {
+ var protocols = mw.config.get( 'wgUrlProtocols' );
+
+ // Try to keep simple.
+ text = $( '<div>' ).text( text ).html();
+
+ // Hack for page translation page titles
+ if ( text && key && key.match( /\/Page_display_title$/ ) ) {
+ text = '=' + text + '=';
+ }
+
+ text = text.replace( /^(=+)(.*?)(=+)/, function ( match, p1, p2, p3 ) {
+ var len = Math.min( p1.length, p3.length, 6 );
+ return $( '<div>' ).append( $( '<h' + len + '>' ).html( p2 ) ).html();
+ } );
+
+ text = text.replace( /(^\*.*(\n|$))+/gm, function ( match ) {
+ match = match.replace( /^\*(.*)/gm, function ( fullMatch, p1 ) {
+ return $( '<div>' ).append( $( '<li>' ).html( p1 ) ).html();
+ } );
+ return $( '<div>' ).append( $( '<ul>' ).html( match ) ).html();
+ } );
+
+ text = text.replace( /(^#.*(\n|$))+/gm, function ( match ) {
+ match = match.replace( /^#(.*)/gm, function ( fullMatch, p1 ) {
+ return $( '<div>' ).append( $( '<li>' ).html( p1 ) ).html();
+ } );
+ return $( '<div>' ).append( $( '<ol>' ).html( match ) ).html();
+ } );
+
+ text = text.replace( /\[\[([^\]|]+?)\|(.+?)\]\]/g, function ( match, p1, p2 ) {
+ var $link = $( '<a>' ).html( p2 ).prop( 'href', mw.util.getUrl( p1 ) );
+ return $( '<div>' ).append( $link ).html();
+ } );
+
+ text = text.replace( /\[\[(.+?)\]\]/g, function ( match, p1 ) {
+ var $link = $( '<a>' ).html( p1 ).prop( 'href', mw.util.getUrl( p1 ) );
+ return $( '<div>' ).append( $link ).html();
+ } );
+
+ var externals = new RegExp( '\\[((' + protocols + ')[^ ]+) (.+?)\\]', 'g' );
+ text = text.replace( externals, function ( match, p1, p2, p3 ) {
+ var $link = $( '<a>' ).html( p3 ).prop( 'href', p1 );
+ return $( '<div>' ).append( $link ).html();
+ } );
+
+ text = text.replace( /'''(.+?)'''/g, function ( match, p1 ) {
+ return $( '<div>' ).append( $( '<strong>' ).html( p1 ) ).html();
+ } );
+
+ text = text.replace( /''(.+?)''/g, function ( match, p1 ) {
+ return $( '<div>' ).append( $( '<em>' ).html( p1 ) ).html();
+ } );
+
+ text = text.replace( /\n\n/gm, '<br />' );
+ return text;
+ }
+ } );
+
+}() );
diff --git a/Translate/resources/js/ext.translate.proofread.js b/Translate/resources/js/ext.translate.proofread.js
new file mode 100644
index 00000000..9cc73eb6
--- /dev/null
+++ b/Translate/resources/js/ext.translate.proofread.js
@@ -0,0 +1,288 @@
+( function () {
+ 'use strict';
+
+ /**
+ * Proofread Plugin
+ *
+ * Prepare a proofread UI with all the required actions
+ * for a translation unit (message).
+ * This is mainly used with the messagetable plugin in proofread mode,
+ * but it is independent of messagetable.
+ * Example usage:
+ *
+ * $( 'div.proofread' ).proofread( {
+ * message: messageObject, // Mandatory message object
+ * sourcelangcode: 'en', // Mandatory source language code
+ * targetlangcode: 'hi' // Mandatory target language code
+ * } );
+ *
+ * @param {Element} element
+ * @param {Object} options
+ * @param {Object} options.message
+ * @param {string} options.sourcelangcode Language code.
+ * @param {string} options.targetlangcode Language code.
+ */
+ function Proofread( element, options ) {
+ this.$message = $( element );
+ this.options = options;
+ this.message = this.options.message;
+ this.init();
+ this.listen();
+ }
+
+ Proofread.prototype = {
+
+ /**
+ * Initialize the plugin
+ */
+ init: function () {
+ var that = this;
+
+ this.render();
+
+ // No review before translating.
+ if ( !this.message.translation ) {
+ this.disableProofread();
+ }
+
+ // No review for fuzzy messages.
+ if ( this.message.properties.status === 'fuzzy' ) {
+ this.disableProofread();
+ }
+
+ if ( !mw.translate.canProofread() ) {
+ this.disableProofread();
+ }
+
+ this.$message.translateeditor( {
+ message: this.message,
+ beforeSave: function ( translation ) {
+ that.$message.find( '.tux-proofread-translation' )
+ .html( mw.translate.formatMessageGently( translation || '', that.message.key ) )
+ .addClass( 'highlight' );
+ },
+ onSave: function ( translation ) {
+ that.$message.find( '.tux-proofread-translation' )
+ .text( translation )
+ .removeClass( 'highlight' );
+ that.message.translation = translation;
+ that.markSelfTranslation();
+
+ // `status` class is documented elsewhere
+ // eslint-disable-next-line mediawiki/class-doc
+ that.$message.find( '.tux-proofread-status' )
+ .removeClass( 'translated fuzzy proofread untranslated' )
+ .addClass( that.message.properties.status );
+ }
+ } );
+
+ },
+
+ render: function () {
+ // List of all reviewers
+ var reviewers = this.message.properties.reviewers || [];
+ // The id of the current user, converted to string as the are in reviewers
+ var userId = String( mw.config.get( 'wgUserId' ) );
+ // List of all reviewers excluding the current user.
+ var otherReviewers = reviewers.filter( function ( element ) {
+ return element !== userId;
+ } );
+ /* Whether the current user if the last translator of this message.
+ * Accepting own translations is prohibited. */
+ var translatedBySelf = ( this.message.properties[ 'last-translator-text' ] === mw.user.getName() );
+ var proofreadBySelf = reviewers.indexOf( userId ) > -1;
+
+ var sourceLangDir = $.uls.data.getDir( this.options.sourcelangcode );
+
+ // `status` class is documented elsewhere
+ // eslint-disable-next-line mediawiki/class-doc
+ var $proofreadAction = $( '<div>' )
+ .attr( 'title', mw.msg( 'tux-proofread-action-tooltip' ) )
+ .addClass(
+ 'tux-proofread-action ' + this.message.properties.status + ' ' + ( proofreadBySelf ? 'accepted' : '' )
+ );
+
+ var $proofreadEdit = $( '<div>' )
+ .addClass( 'tux-proofread-edit' )
+ .append( $( '<span>' )
+ .addClass( 'tux-proofread-edit-label hide' )
+ .text( mw.msg( 'tux-proofread-edit-label' ) )
+ )
+ .on( 'mouseover', function () {
+ $( this ).find( '.tux-proofread-edit-label' ).removeClass( 'hide' );
+ } )
+ .on( 'mouseout', function () {
+ $( this ).find( '.tux-proofread-edit-label' ).addClass( 'hide' );
+ } );
+
+ var targetLangAttrib;
+ if ( this.options.targetlangcode === mw.config.get( 'wgTranslateDocumentationLanguageCode' ) ) {
+ targetLangAttrib = mw.config.get( 'wgContentLanguage' );
+ } else {
+ targetLangAttrib = this.options.targetlangcode;
+ }
+
+ var targetLangDir = $.uls.data.getDir( targetLangAttrib );
+
+ // `status` class is documented elsewhere
+ // eslint-disable-next-line mediawiki/class-doc
+ this.$message.append(
+ $( '<div>' )
+ .addClass( 'row tux-message-item-compact message' )
+ .append(
+ // `status` class is documented elsewhere
+ // eslint-disable-next-line mediawiki/class-doc
+ $( '<div>' )
+ .addClass( 'one column tux-proofread-status ' + this.message.properties.status ),
+ $( '<div>' )
+ .addClass( 'five columns tux-proofread-source' )
+ .attr( {
+ lang: this.options.sourcelangcode,
+ dir: sourceLangDir
+ } )
+ .text( this.message.definition ),
+ $( '<div>' )
+ .addClass( 'five columns tux-proofread-translation' )
+ .attr( {
+ lang: targetLangAttrib,
+ dir: targetLangDir
+ } )
+ .text( this.message.translation || '' ),
+ $( '<div>' )
+ .addClass( 'tux-proofread-action-block one column' )
+ .append(
+ $proofreadAction,
+ otherReviewers.length ?
+ $( '<div>' )
+ .addClass( 'tux-proofread-count' )
+ .data( 'reviewCount', reviewers.length ) // To update when accepting
+ .text( mw.language.convertNumber( reviewers.length ) ) :
+ $( [] ),
+ $proofreadEdit
+ )
+ )
+ ).addClass( this.message.properties.status );
+
+ if ( !translatedBySelf && !proofreadBySelf ) {
+ // This will get removed later if any of various other reasons prevent it
+ this.message.proofreadable = true;
+ this.message.proofreadAction = this.proofread.bind( this );
+ }
+
+ if ( translatedBySelf ) {
+ this.markSelfTranslation();
+ }
+
+ /* Here we need to check that there are reviewers in the first place
+ * before adding review markers */
+ if ( reviewers.length && otherReviewers.length ) {
+ this.$message.addClass( 'proofread-by-others' );
+ }
+ },
+
+ disableProofread: function () {
+ this.message.proofreadable = false;
+ this.$message.find( '.tux-proofread-action' )
+ .remove();
+ },
+
+ /**
+ * Mark the message self translated.
+ */
+ markSelfTranslation: function () {
+ // Own translations cannot be reviewed, so disable proofread
+ this.disableProofread();
+ if ( !this.$message.hasClass( 'own-translation' ) ) {
+ this.$message.addClass( 'own-translation' )
+ .find( '.tux-proofread-action-block' )
+ .append( $( '<div>' )
+ .addClass( 'translated-by-self' )
+ .attr( 'title', mw.msg( 'tux-proofread-translated-by-self' ) )
+ );
+ }
+ },
+ /**
+ * Mark this message as proofread.
+ */
+ proofread: function () {
+ var message = this.message,
+ $message = this.$message,
+ api = new mw.Api();
+
+ var params = {
+ action: 'translationreview',
+ revision: this.message.properties.revision
+ };
+
+ if ( !mw.user.isAnon() ) {
+ params.assert = 'user';
+ }
+
+ api.postWithToken( 'csrf', params ).done( function () {
+ $message.find( '.tux-proofread-action' )
+ .removeClass( 'tux-notice' ) // in case, it failed previously
+ .addClass( 'accepted' );
+
+ var $counter = $message.find( '.tux-proofread-count' );
+ var reviews = $counter.data( 'reviewCount' );
+ $counter.text( mw.language.convertNumber( reviews + 1 ) );
+
+ // Update stats
+ $( '.tux-action-bar .tux-statsbar' ).trigger(
+ 'change',
+ [ 'proofread', message.properties.status ]
+ );
+
+ message.properties.status = 'proofread';
+
+ if ( mw.track ) {
+ mw.track( 'ext.translate.event.proofread', message );
+ }
+ } ).fail( function ( errorCode ) {
+ $message.find( '.tux-proofread-action' ).addClass( 'tux-notice' );
+ if ( errorCode === 'assertuserfailed' ) {
+ // eslint-disable-next-line no-alert
+ alert( mw.msg( 'tux-session-expired' ) );
+ }
+ } );
+ },
+
+ /**
+ * Attach event listeners
+ */
+ listen: function () {
+ var that = this;
+
+ this.$message.find( '.tux-proofread-action' ).on( 'click', function () {
+ that.proofread();
+ return false;
+ } );
+
+ this.$message.find( '.tux-proofread-edit' ).on( 'click', function () {
+ // Make sure that the tooltip is hidden when going to the editor
+ $( '.translate-tooltip' ).remove();
+ that.$message.data( 'translateeditor' ).show();
+
+ return false;
+ } );
+ }
+ };
+
+ /*
+ * proofread PLUGIN DEFINITION
+ */
+ $.fn.proofread = function ( options ) {
+ return this.each( function () {
+ var $this = $( this ),
+ data = $this.data( 'proofread' );
+
+ if ( !data ) {
+ $this.data( 'proofread', new Proofread( this, options ) );
+ }
+
+ } );
+ };
+
+ $.fn.proofread.Constructor = Proofread;
+
+}() );
diff --git a/Translate/resources/js/ext.translate.recentgroups.js b/Translate/resources/js/ext.translate.recentgroups.js
new file mode 100644
index 00000000..360739d1
--- /dev/null
+++ b/Translate/resources/js/ext.translate.recentgroups.js
@@ -0,0 +1,31 @@
+( function () {
+ 'use strict';
+
+ mw.translate = mw.translate || {};
+
+ /**
+ * Simple wrapper for storing recent groups for an user.
+ *
+ * @class mw.translate.recentGroups
+ * @singleton
+ * @since 2016.03
+ */
+
+ mw.translate.recentGroups = {
+ get: function () {
+ return JSON.parse( mw.storage.get( 'translate-recentgroups' ) ) || [];
+ },
+
+ append: function ( value ) {
+ var items = this.get();
+
+ items.unshift( value );
+ items = items.filter( function ( item, index, array ) {
+ return array.indexOf( item ) === index;
+ } );
+ items = items.slice( 0, 5 );
+
+ mw.storage.set( 'translate-recentgroups', JSON.stringify( items ) );
+ }
+ };
+}() );
diff --git a/Translate/resources/js/ext.translate.selecttoinput.js b/Translate/resources/js/ext.translate.selecttoinput.js
new file mode 100644
index 00000000..a27fd903
--- /dev/null
+++ b/Translate/resources/js/ext.translate.selecttoinput.js
@@ -0,0 +1,36 @@
+$( function () {
+ var appendFromSelect = function ( selectid, targetid ) {
+ 'use strict';
+
+ var select = document.getElementById( selectid ),
+ target = document.getElementById( targetid );
+
+ if ( !target || !select ) {
+ return;
+ }
+
+ var atxt = select.options[ select.selectedIndex ].value;
+
+ if ( !atxt ) {
+ return;
+ }
+
+ if ( target.value.replace( /\s+/g, '' ) !== '' ) {
+ atxt = ', ' + atxt;
+ }
+
+ atxt = target.value + atxt;
+
+ atxt = atxt.replace( /\bdefault\b[,\s]*/i, '' );
+
+ target.value = atxt;
+ };
+
+ $( '.mw-translate-jssti' ).on( 'click', function () {
+ var sourceId = $( this ).data( 'translate-jssti-sourceid' ),
+ targetId = $( this ).data( 'translate-jssti-targetid' );
+
+ appendFromSelect( sourceId, targetId );
+ } );
+
+} );
diff --git a/Translate/resources/js/ext.translate.special.aggregategroups.js b/Translate/resources/js/ext.translate.special.aggregategroups.js
new file mode 100644
index 00000000..0a31fc0a
--- /dev/null
+++ b/Translate/resources/js/ext.translate.special.aggregategroups.js
@@ -0,0 +1,449 @@
+( function () {
+ 'use strict';
+
+ function getApiParams( $target ) {
+ return {
+ action: 'aggregategroups',
+ aggregategroup: $target.parents( '.mw-tpa-group' ).data( 'groupid' )
+ };
+ }
+
+ function dissociate( event ) {
+ var $target = $( event.target ),
+ api = new mw.Api();
+
+ function successFunction() {
+ $target.parent( 'li' ).remove();
+ }
+
+ var params = $.extend( getApiParams( $target ), {
+ do: 'dissociate',
+ group: $target.data( 'groupid' )
+ } );
+
+ api.postWithToken( 'csrf', params )
+ .done( successFunction )
+ .fail( function ( code, data ) {
+ // eslint-disable-next-line no-alert
+ alert( data.error && data.error.info );
+ } );
+ }
+
+ function associate( event, resp ) {
+ var $target = $( event.target ),
+ $parent = $target.parents( '.mw-tpa-group' ),
+ parentId = $parent.data( 'id' ),
+ subgroupName = $parent.find( '.tp-group-input' ).val(),
+ api = new mw.Api();
+
+ var subgroupId;
+ var successFunction = function () {
+ var aAttr, $a, spanAttr, $span, $ol;
+
+ aAttr = {
+ href: mw.util.getUrl( subgroupName ),
+ title: subgroupName
+ };
+
+ $a = $( '<a>', aAttr ).text( subgroupName );
+
+ spanAttr = {
+ class: 'tp-aggregate-remove-button',
+ 'data-groupid': subgroupId
+ };
+
+ $span = $( '<span>', spanAttr );
+
+ $ol = $( '#mw-tpa-grouplist-' + parentId );
+ $ol.append( $( '<li>' ).append( $a, $span ) );
+ $span.on( 'click', dissociate );
+ $parent.find( '.tp-group-input' ).val( '' );
+ };
+
+ // Get the label for the value and make API request if valid
+ subgroupId = '';
+ for ( var i = 0; i < resp.length; ++i ) {
+ if ( subgroupName === resp[ i ].label ) {
+ subgroupId = resp[ i ].id;
+ break;
+ }
+ }
+
+ if ( subgroupId ) {
+ var params = $.extend( getApiParams( $target ), {
+ do: 'associate',
+ group: subgroupId
+ } );
+
+ api.postWithToken( 'csrf', params )
+ .done( successFunction )
+ .fail( function ( code, data ) {
+ // eslint-disable-next-line no-alert
+ alert( data.error && data.error.info );
+ } );
+ } else {
+ // eslint-disable-next-line no-alert
+ alert( mw.msg( 'tpt-invalid-group' ) );
+ }
+ }
+
+ function removeGroup( event ) {
+ var $target = $( event.target ),
+ api = new mw.Api();
+
+ function successFunction() {
+ $( event.target ).parents( '.mw-tpa-group' ).remove();
+ }
+
+ // XXX: 'confirm' is nonstandard.
+ if ( typeof window.confirm === 'function' &&
+ // eslint-disable-next-line no-alert
+ window.confirm( mw.msg( 'tpt-aggregategroup-remove-confirm' ) ) ) {
+ var params = $.extend( getApiParams( $target ), {
+ do: 'remove'
+ } );
+
+ api.postWithToken( 'csrf', params )
+ .done( successFunction )
+ .fail( function ( code, data ) {
+ // eslint-disable-next-line no-alert
+ alert( data.error && data.error.info );
+ } );
+ }
+ }
+
+ function editGroup( event ) {
+ var $target = $( event.target ),
+ $parent = $target.closest( '.mw-tpa-group' ),
+ aggregateGroupId = $parent.data( 'groupid' ),
+ $displayGroup = $parent.children( '.tp-display-group' ),
+ $editGroup = $parent.children( '.tp-edit-group' ),
+ $aggGroupNameInputName = $editGroup.children( 'input.tp-aggregategroup-edit-name' ),
+ $aggGroupNameInputDesc = $editGroup.children( 'input.tp-aggregategroup-edit-description' ),
+ aggregateGroupName = $aggGroupNameInputName.val(),
+ aggregateGroupDesc = $aggGroupNameInputDesc.val(),
+ api = new mw.Api();
+
+ var successFunction = function () {
+ // Replace the text by the new text without altering the other 2 span tags
+ $displayGroup.children( '.tp-name' ).contents().filter( function () {
+ return this.nodeType === 3;
+ } ).replaceWith( aggregateGroupName );
+ $displayGroup.children( '.tp-desc' ).text( aggregateGroupDesc );
+ $displayGroup.removeClass( 'hidden' );
+ $editGroup.addClass( 'hidden' );
+ };
+
+ var params = {
+ action: 'aggregategroups',
+ do: 'update',
+ groupname: aggregateGroupName,
+ groupdescription: aggregateGroupDesc,
+ aggregategroup: aggregateGroupId
+ };
+
+ api.postWithToken( 'csrf', params )
+ .done( successFunction )
+ .fail( function ( code, data ) {
+ // eslint-disable-next-line no-alert
+ alert( data.error.info );
+ } );
+ }
+
+ function cancelEditGroup( event ) {
+ var $parent = $( event.target ).closest( '.mw-tpa-group' );
+
+ $parent.children( '.tp-display-group' ).removeClass( 'hidden' );
+ $parent.children( '.tp-edit-group' ).addClass( 'hidden' );
+ }
+
+ function getToggleAllGroupsLink() {
+ var $toggleLink = $( '<a>' )
+ .addClass( 'js-tp-toggle-all-groups' )
+ .attr( 'href', '#' )
+ .text( mw.msg( 'tpt-aggregategroup-expand-all-groups' ) );
+
+ var $toggleLinkParent = $( '<div>' )
+ .append( '[', $toggleLink, ']' );
+
+ $toggleLink.on( 'click', function ( event ) {
+ var $target = $( event.target );
+ var isExpanded = $target.hasClass( 'expanded' );
+ var $groupContainers = $( '.js-mw-tpa-group' );
+
+ for ( var i = 0; i < $groupContainers.length; i++ ) {
+ var $groupContainer = $groupContainers.eq( i );
+ var isContainerOpen = $groupContainer.hasClass( 'mw-tpa-group-open' );
+ if ( isExpanded === isContainerOpen ) {
+ toggleGroupContainer( $groupContainer );
+ }
+ }
+
+ $target.toggleClass( 'expanded' );
+ $target.text(
+ isExpanded ?
+ mw.msg( 'tpt-aggregategroup-expand-all-groups' ) :
+ mw.msg( 'tpt-aggregategroup-collapse-all-groups' )
+
+ );
+
+ event.preventDefault();
+ } );
+
+ return $toggleLinkParent;
+ }
+
+ function toggleGroupContainer( $groupContainer ) {
+ var $toggleTrigger = $groupContainer.find( '.js-tp-toggle-groups' );
+ var isOpen = $groupContainer.hasClass( 'mw-tpa-group-open' );
+ changeGroupToggleIconState( $toggleTrigger, !isOpen );
+ $groupContainer.toggleClass( 'mw-tpa-group-open' );
+ }
+
+ function changeGroupToggleIconState( $icon, isOpen ) {
+ var title = mw.msg( 'tpt-aggregategroup-expand-group' );
+ var ariaExpanded = 'false';
+ if ( isOpen ) {
+ title = mw.msg( 'tpt-aggregategroup-collapse-group' );
+ ariaExpanded = 'true';
+ }
+
+ $icon.attr( 'title', title )
+ .attr( 'aria-expanded', ariaExpanded );
+ }
+
+ $( function () {
+ var api = new mw.Api(),
+ exclude = [],
+ groups = [],
+ $input = $( '.tp-group-input' );
+
+ var excludeFunction = function ( event ) {
+ exclude = [];
+
+ if ( groups.length === 0 ) {
+ // Get list of subgroups using API
+ api.get( {
+ action: 'query',
+ meta: 'messagegroups',
+ mgformat: 'tree',
+ mgroot: 'all',
+ mgprop: 'label|id'
+ } ).done( function ( result ) {
+ groups = result.query.messagegroups;
+ } );
+ }
+
+ // Exclude groups already present
+ $( event.target ).closest( '.mw-tpa-group' ).find( 'li' ).each(
+ function ( key, data ) {
+ // Need to trim to remove the trailing whitespace
+ // Can't use innerText not supported by Firefox
+ var groupName = $( data ).text();
+ groupName = groupName.trim();
+ exclude.push( groupName );
+ }
+ );
+ };
+
+ var resp;
+ var autocompleteFunction = function ( request, response ) {
+ // Allow case insensitive search
+ var inp = new RegExp( request.term, 'i' );
+
+ resp = [];
+
+ Object.keys( groups ).forEach( function ( key ) {
+ if (
+ groups[ key ].label.match( inp ) &&
+ exclude.indexOf( groups[ key ].label ) === -1
+ ) {
+ resp.push( groups[ key ] );
+ }
+ } );
+
+ response( resp );
+ };
+
+ $input.on( 'focus', excludeFunction );
+ $input.autocomplete( {
+ source: autocompleteFunction,
+ minLength: 0
+ } ).focus( function () {
+ // Enable showing all groups when nothing is entered
+ $( this ).autocomplete( 'search', $( this ).val() );
+ } );
+
+ $( '.tp-aggregate-add-button' ).on( 'click', function ( event ) {
+ associate( event, resp );
+ } );
+ $( '.tp-aggregate-remove-button' ).on( 'click', dissociate );
+ $( '.tp-aggregate-remove-ag-button' ).on( 'click', removeGroup );
+ $( '.tp-aggregategroup-update' ).on( 'click', editGroup );
+ $( '.tp-aggregategroup-update-cancel' ).on( 'click', cancelEditGroup );
+
+ $( 'a.tpt-add-new-group' ).on( 'click', function ( event ) {
+ $( 'div.tpt-add-new-group' ).removeClass( 'hidden' );
+ // Link has anchor which goes top of the page
+ event.preventDefault();
+ } );
+
+ $( '.tp-aggregate-edit-ag-button' ).on( 'click', function ( event ) {
+ var $parent = $( event.target ).closest( '.mw-tpa-group' );
+
+ $parent.children( '.tp-display-group' ).addClass( 'hidden' );
+ $parent.children( '.tp-edit-group' ).removeClass( 'hidden' );
+ } );
+
+ $( '#tpt-aggregategroups-save' ).on( 'click', function () {
+ var $aggGroupNameInputName = $( 'input.tp-aggregategroup-add-name' ),
+ $aggGroupNameInputDesc = $( 'input.tp-aggregategroup-add-description' ),
+ aggregateGroupName = $aggGroupNameInputName.val(),
+ aggregateGroupDesc = $aggGroupNameInputDesc.val();
+
+ // Empty the fields. If they are not emptied, then when another group
+ // is added, the values will appear again.
+ $aggGroupNameInputName.val( '' );
+ $aggGroupNameInputDesc.val( '' );
+
+ var successFunction = function ( data ) {
+ var aggregateGroupId = data.aggregategroups.aggregategroupId;
+ var subGroupId = 'tp-subgroup-' + aggregateGroupId;
+
+ var $removeSpan = $( '<span>' ).attr( 'id', aggregateGroupId )
+ .addClass( 'tp-aggregate-remove-ag-button' );
+ var $editSpan = $( '<span>' ).attr( 'id', aggregateGroupId )
+ .addClass( 'tp-aggregate-edit-ag-button' );
+ var $toggleIcon = $( '<a>' ).addClass( 'js-tp-toggle-groups tp-toggle-group-icon' )
+ .attr( 'aria-controls', subGroupId )
+ .attr( 'role', 'button' );
+
+ var isOpen = true;
+ changeGroupToggleIconState( $toggleIcon, isOpen );
+
+ // Prints the name and the two spans in a single row
+ var $displayHeader = $( '<h2>' ).addClass( 'tp-name' ).text( aggregateGroupName )
+ .append( $editSpan, $removeSpan )
+ .prepend( $toggleIcon );
+
+ var $divDisplay = $( '<div>' ).addClass( 'tp-display-group' )
+ .append( $displayHeader )
+ .append( $( '<p>' ).addClass( 'tp-desc' ).text( aggregateGroupDesc ) );
+
+ var $saveButton = $( '<input>' )
+ .attr( {
+ type: 'button',
+ class: 'tp-aggregategroup-update'
+ } )
+ .val( mw.msg( 'tpt-aggregategroup-update' ) );
+ var $cancelButton = $( '<input>' )
+ .attr( {
+ type: 'button',
+ class: 'tp-aggregategroup-update-cancel'
+ } )
+ .val( mw.msg( 'tpt-aggregategroup-update-cancel' ) );
+ var $divEdit = $( '<div>' )
+ .addClass( 'tp-edit-group hidden' )
+ .append( $( '<label>' )
+ .text( mw.msg( 'tpt-aggregategroup-edit-name' ) ) )
+ .append( $( '<input>' )
+ .attr( {
+ class: 'tp-aggregategroup-edit-name',
+ id: 'tp-agg-name'
+ } )
+ .val( aggregateGroupName )
+ )
+ .append(
+ $( '<br>' ),
+ $( '<label>' )
+ .text( mw.msg( 'tpt-aggregategroup-edit-description' ) )
+ )
+ .append( $( '<input>' )
+ .attr( {
+ class: 'tp-aggregategroup-edit-description',
+ id: 'tp-agg-desc'
+ } )
+ .val( aggregateGroupDesc )
+ )
+ .append( $saveButton, $cancelButton );
+
+ var $div = $( '<div>' )
+ .addClass( 'mw-tpa-group js-mw-tpa-group mw-tpa-group-open' )
+ .append( $divDisplay, $divEdit );
+
+ var $subGroupContents = $( '<div>' ).addClass( 'tp-sub-groups' )
+ .attr( 'id', subGroupId )
+ .append( $( '<ol id=\'mw-tpa-grouplist-' + aggregateGroupId + '\'>' ) );
+
+ $div.data( 'groupid', aggregateGroupId );
+ $div.data( 'id', aggregateGroupId );
+
+ var $groupSelector = $( '<input>' ).attr( {
+ type: 'text',
+ class: 'tp-group-input'
+ } );
+ $groupSelector.on( 'focus', excludeFunction );
+ $groupSelector.autocomplete( {
+ source: autocompleteFunction,
+ minLength: 0
+ } ).focus( function () {
+ // Enable showing all groups when nothing is entered
+ $( this ).autocomplete( 'search', $( this ).val() );
+ } );
+ var $addButton = $( '<input>' )
+ .attr( {
+ type: 'button',
+ class: 'tp-aggregate-add-button',
+ id: aggregateGroupId
+ } )
+ .val( mw.msg( 'tpt-aggregategroup-add' ) );
+
+ $addButton.on( 'click', function ( event ) {
+ associate( event, resp );
+ } );
+
+ $subGroupContents.append( $groupSelector, $addButton );
+ $div.append( $subGroupContents );
+
+ $editSpan.on( 'click', function ( event ) {
+ var $parent = $( event.target ).closest( '.mw-tpa-group' );
+ $parent.children( '.tp-display-group' ).addClass( 'hidden' );
+ $parent.children( '.tp-edit-group' ).removeClass( 'hidden' );
+ } );
+
+ $saveButton.on( 'click', editGroup );
+ $cancelButton.on( 'click', cancelEditGroup );
+ $removeSpan.on( 'click', removeGroup );
+ $( 'div.tpt-add-new-group' ).addClass( 'hidden' );
+ $( 'div.mw-tpa-groups' ).prepend( $div );
+ };
+
+ var params = {
+ action: 'aggregategroups',
+ do: 'add',
+ groupname: aggregateGroupName,
+ groupdescription: aggregateGroupDesc
+ };
+
+ api.postWithToken( 'csrf', params )
+ .done( successFunction )
+ .fail( function ( code, data ) {
+ // eslint-disable-next-line no-alert
+ alert( data.error && data.error.info );
+ } );
+ } );
+
+ $( '#tpt-aggregategroups-close' ).on( 'click', function ( event ) {
+ $( 'div.tpt-add-new-group' ).addClass( 'hidden' );
+ event.preventDefault();
+ } );
+
+ $( '#mw-content-text' ).on( 'click', '.js-tp-toggle-groups', function ( event ) {
+ var $target = $( event.target );
+ var $groupContainer = $target.parents( '.js-mw-tpa-group' );
+ toggleGroupContainer( $groupContainer );
+ } );
+
+ $( 'div.mw-tpa-group' ).first().before( getToggleAllGroupsLink() );
+ } );
+}() );
diff --git a/Translate/resources/js/ext.translate.special.importtranslations.js b/Translate/resources/js/ext.translate.special.importtranslations.js
new file mode 100644
index 00000000..1ba24709
--- /dev/null
+++ b/Translate/resources/js/ext.translate.special.importtranslations.js
@@ -0,0 +1,20 @@
+( function () {
+ 'use strict';
+
+ function buttoner( $input ) {
+ if ( $input.val ) {
+ $( 'input[type=submit]' ).prop( 'disabled', false );
+ } else {
+ $( 'input[type=submit]' ).prop( 'disabled', true );
+ }
+ }
+
+ $( function () {
+ var $input = $( '#mw-translate-up-local-input' );
+ $input.on( 'change', function () {
+ buttoner( $input );
+ } );
+
+ buttoner( $input );
+ } );
+}() );
diff --git a/Translate/resources/js/ext.translate.special.managegroups.js b/Translate/resources/js/ext.translate.special.managegroups.js
new file mode 100644
index 00000000..c796467d
--- /dev/null
+++ b/Translate/resources/js/ext.translate.special.managegroups.js
@@ -0,0 +1,470 @@
+( function () {
+ var RenameDropdown,
+ GroupSynchronization;
+
+ $( function () {
+ RenameDropdown.init();
+ GroupSynchronization.init();
+
+ // Create and append a window manager.
+ var windowManager = new OO.ui.WindowManager();
+ windowManager.$element.appendTo( document.body );
+
+ // Create a new process dialog window.
+ var renameDialog = new mw.translate.MessageRenameDialog( {
+ classes: [ 'smg-rename-dialog' ],
+ size: 'large'
+ }, function ( renameParams ) {
+ return setRename( renameParams ).done( function ( data ) {
+ if ( data.managemessagegroups && data.managemessagegroups.success ) {
+ location.reload();
+ }
+ } ).fail( function ( code, result ) {
+ if ( result.error ) {
+ mw.notify( result.error.info, {
+ type: 'error',
+ tag: 'new-error'
+ } );
+ }
+ } );
+ } );
+
+ // Add the window to window manager using the addWindows() method.
+ windowManager.addWindows( [ renameDialog ] );
+
+ /**
+ * Attach the click handler to display the rename dropdown.
+ */
+ $( '#mw-content-text' ).on( 'click', '.smg-rename-actions', function ( event ) {
+ var $target = $( event.target );
+ var $parentContainer = $target.parents( '.mw-translate-smg-change' );
+ RenameDropdown.appendTo( event.target, $parentContainer, {
+ groupId: $target.data( 'groupId' ),
+ msgKey: $target.data( 'msgkey' ),
+ msgTitle: $target.data( 'msgtitle' )
+ } ).show();
+
+ if ( $parentContainer.hasClass( 'smg-change-addition' ) ) {
+ // For a new message, the "add as new" option is hidden.
+ RenameDropdown.hideOption( '.smg-rename-new-action' );
+ }
+ event.preventDefault();
+ } );
+
+ $( document.documentElement ).on( 'click', function ( event ) {
+ if ( !event.isDefaultPrevented() ) {
+ RenameDropdown.hide();
+ }
+ } );
+
+ /**
+ * Click handler triggered when "Add as rename" is clicked in the dropdown.
+ */
+ $( '.smg-rename-rename-action' ).on( 'click', function () {
+ var keyData = RenameDropdown.getData(),
+ $renameButton = getRenameButton( $( event.target ) );
+ toggleLoading( $renameButton, true );
+
+ getRenames( keyData.groupId, keyData.msgKey )
+ .done( function ( data ) {
+ // Open the dialog, and display possible renames.
+ windowManager.openWindow( renameDialog, {
+ messages: data.managemessagegroups[ 0 ],
+ title: mw.msg( 'translate-smg-rename-dialog-title', keyData.msgTitle ),
+ groupId: keyData.groupId,
+ targetKey: keyData.msgKey
+ } );
+ } ).fail( function ( code, result ) {
+ if ( result.error ) {
+ mw.notify( result.error.info, {
+ type: 'error',
+ tag: 'rename-error'
+ } );
+ }
+ } ).always( function () {
+ toggleLoading( $renameButton, false );
+ } );
+ } );
+
+ /**
+ * Click handler triggered when "Add as new" is clicked in the dropdown.
+ */
+ $( '.smg-rename-new-action' ).on( 'click', function () {
+ var keyData = RenameDropdown.getData(),
+ $renameButton = getRenameButton( $( event.target ) ),
+ isReloading = false;
+ toggleLoading( $renameButton, true );
+
+ setAsNew( keyData.groupId, keyData.msgKey ).done( function ( data ) {
+ if ( data.managemessagegroups && data.managemessagegroups.success ) {
+ location.reload();
+ isReloading = true;
+ }
+ } ).fail( function ( code, result ) {
+ if ( result.error ) {
+ mw.notify( result.error.info, {
+ type: 'error',
+ tag: 'new-error'
+ } );
+ }
+ } ).always( function () {
+ // If page is reloading, don't bother hiding the loader.
+ if ( isReloading === false ) {
+ toggleLoading( $renameButton, false );
+ }
+ } );
+ } );
+ } );
+
+ function getRenameButton( $target ) {
+ return $target.parents( '.mw-translate-smg-change' ).find( '.smg-rename-actions' );
+ }
+
+ function toggleLoading( $element, isLoading ) {
+ if ( isLoading ) {
+ // hide all the rename buttons, but show the current one with loading animation
+ $( '.smg-rename-actions' ).addClass( 'mw-translate-hide' );
+ $element.removeClass( 'mw-translate-hide' ).addClass( 'loading' );
+ } else {
+ $( '.smg-rename-actions' ).removeClass( 'mw-translate-hide' );
+ $element.removeClass( 'loading' );
+ }
+ }
+
+ /**
+ * Fetch the possible renames for a given message.
+ *
+ * @param {string} groupId
+ * @param {string} msgKey
+ * @return {jQuery.Promise}
+ */
+ function getRenames( groupId, msgKey ) {
+ var api = new mw.Api();
+ var params = {
+ action: 'query',
+ meta: 'managemessagegroups',
+ formatversion: 2,
+ mmggroupId: groupId,
+ mmgmessageKey: msgKey
+ };
+
+ var changesetName = getChangesetName();
+ if ( changesetName !== null ) {
+ params.mmgchangesetName = changesetName;
+ }
+
+ return api.get( params ).then( function ( result ) {
+ return result.query;
+ } );
+ }
+
+ /**
+ * Identifies and returns the group name from the URL
+ *
+ * @return {string}
+ */
+ function getChangesetName() {
+ var locationPaths = window.location.pathname.split( '/' );
+ var suffix = locationPaths.pop();
+ var pageTitle = $( '#smgPageTitle' ).val();
+
+ if ( suffix && suffix.indexOf( pageTitle ) === -1 ) {
+ return suffix;
+ }
+
+ return null;
+ }
+
+ function getChangesetModifiedTime() {
+ var modifiedTime = $( '[name="changesetModifiedTime"]' ).val();
+ modifiedTime = +modifiedTime;
+ if ( isNaN( modifiedTime ) ) {
+ return 0;
+ }
+
+ return modifiedTime;
+ }
+
+ /**
+ * Update the rename associated with a message
+ *
+ * @param {Object} renameParams
+ * @param {string} renameParams.groupId
+ * @param {string} renameParams.selectedKey Key to be matched to. This message will be renamed.
+ * @param {string} renameParams.targetKey Key from the source
+ * @return {jQuery.Promise}
+ */
+ function setRename( renameParams ) {
+ var api = new mw.Api();
+
+ var params = {
+ action: 'managemessagegroups',
+ groupId: renameParams.groupId,
+ renameMessageKey: renameParams.selectedKey,
+ messageKey: renameParams.targetKey,
+ operation: 'rename',
+ changesetModified: getChangesetModifiedTime(),
+ assert: 'user',
+ formatversion: 2
+ };
+
+ var changesetName = getChangesetName();
+ if ( changesetName !== null ) {
+ params.changesetName = changesetName;
+ }
+ return api.postWithToken( 'csrf', params );
+ }
+
+ /**
+ * Mark the message as a new message
+ *
+ * @param {string} groupId
+ * @param {string} msgKey
+ * @return {jQuery.Promise}
+ */
+ function setAsNew( groupId, msgKey ) {
+ var api = new mw.Api();
+
+ var params = {
+ action: 'managemessagegroups',
+ groupId: groupId,
+ messageKey: msgKey,
+ operation: 'new',
+ changesetModified: getChangesetModifiedTime(),
+ assert: 'user',
+ formatversion: 2
+ };
+
+ var changesetName = getChangesetName();
+ if ( changesetName !== null ) {
+ params.changesetName = changesetName;
+ }
+
+ return api.postWithToken( 'csrf', params );
+ }
+
+ RenameDropdown = ( function () {
+ var $renameMenu;
+
+ /**
+ * Initialization function. Creates the elements for the rename dropdown
+ *
+ * @chainable
+ */
+ function init() {
+ $renameMenu = getRenameDropdown().appendTo( document.body );
+ return this;
+ }
+
+ /**
+ * Returns the HTML element for the dropdown
+ *
+ * @return {jQuery}
+ */
+ function getRenameDropdown() {
+ var $addAsRename = $( '<li>' ).append(
+ $( '<button>' )
+ .attr( 'type', 'button' )
+ .addClass( 'smg-rename-new-action mw-translate-hide' )
+ .text( mw.msg( 'translate-smg-rename-new' ) )
+ ),
+ $addAsNew = $( '<li>' ).append(
+ $( '<button>' )
+ .attr( 'type', 'button' )
+ .addClass( 'smg-rename-rename-action mw-translate-hide' )
+ .text( mw.msg( 'translate-smg-rename-rename' ) )
+ );
+
+ return $( '<ul>' ).addClass( 'smg-rename-dropdown-menu' ).append(
+ $addAsRename,
+ $addAsNew
+ );
+ }
+
+ /**
+ * Displays the rename menu
+ *
+ * @chainable
+ */
+ function show() {
+ $renameMenu.addClass( 'show' );
+ return this;
+ }
+
+ /**
+ * Hides the rename menu
+ *
+ * @chainable
+ */
+ function hide() {
+ $renameMenu.removeClass( 'show' );
+ return this;
+ }
+
+ /**
+ * Appends the dropdown to a container element
+ *
+ * @param {jQuery} target Target trigger element
+ * @param {jQuery} $container Container to which to append the menu
+ * @param {Object} customData Custom data to be associated with the menu
+ * @chainable
+ */
+ function appendTo( target, $container, customData ) {
+ var $currentTarget = $( target );
+ $container.append( $renameMenu );
+ $renameMenu.css( {
+ top: $currentTarget.position().top + $currentTarget.height(),
+ left: $currentTarget.position().left - $renameMenu.width() + $currentTarget.width()
+ } ).data( 'custom-data', customData );
+
+ // When appending, show all the li's by default since based on the
+ // message type (RENAME / NEW) some li's may be hidden previously
+ $renameMenu.find( 'li' ).removeClass( 'mw-translate-hide' );
+ return this;
+ }
+
+ /**
+ * Fetch the custom data associated with rename menu
+ *
+ * @return {Object}
+ */
+ function getData() {
+ return $renameMenu.data( 'custom-data' );
+ }
+
+ /**
+ * Hide a specific option in the dropdown
+ *
+ * @param {string} optSelector
+ * @chainable
+ */
+ function hideOption( optSelector ) {
+ $renameMenu.find( optSelector ).parent().addClass( 'mw-translate-hide' );
+ return this;
+ }
+
+ return {
+ init: init,
+ appendTo: appendTo,
+ show: show,
+ hide: hide,
+ getData: getData,
+ hideOption: hideOption
+ };
+ }() );
+
+ GroupSynchronization = ( function () {
+ function init() {
+ $( '.js-group-sync-message-resolve' ).on( 'click', markMessageAsResolved );
+ $( '.js-group-sync-group-resolve' ).on( 'click', markGroupAsResolved );
+ }
+
+ function markMessageAsResolved() {
+ var $target = $( this ),
+ groupId = $target.data( 'groupId' ),
+ messageTitle = $target.data( 'msgTitle' );
+
+ showLoading( $target );
+
+ markAsResolved( 'resolveMessage', groupId, messageTitle ).done( function ( response ) {
+ var responseData = response.managegroupsynchronizationcache || null;
+ if ( responseData && responseData.success ) {
+ if ( responseData.data.groupRemainingMessageCount === 0 ) {
+ removeParentGroupBlock( $target );
+ } else {
+ // Remove the message from the DOM
+ $target.parents( '.js-group-sync-message-error' ).remove();
+ }
+ }
+ } ).fail( function ( code, result ) {
+ handleResolutionFailure( code, result, groupId, messageTitle );
+ } ).always( function () {
+ hideLoading( $target );
+ } );
+ }
+
+ function markGroupAsResolved() {
+ var $target = $( this ),
+ groupId = $target.data( 'groupId' );
+
+ showLoading( $target );
+
+ markAsResolved( 'resolveGroup', groupId ).done( function ( response ) {
+ var responseData = response.managegroupsynchronizationcache || null;
+ if ( responseData && responseData.success ) {
+ removeParentGroupBlock( $target );
+ }
+ } ).fail( function ( code, result ) {
+ handleResolutionFailure( code, result, groupId );
+ } ).always( function () {
+ hideLoading( $target );
+ } );
+ }
+
+ function markAsResolved( operation, groupId, messageTitle ) {
+ var api = new mw.Api();
+
+ var params = {
+ action: 'managegroupsynchronizationcache',
+ group: groupId,
+ operation: operation,
+ assert: 'user',
+ formatversion: 2
+ };
+
+ if ( messageTitle ) {
+ params.title = messageTitle;
+ }
+
+ return api.postWithToken( 'csrf', params );
+ }
+
+ function removeParentGroupBlock( $child ) {
+ // Remove the entire group block from DOM
+ $child.parents( '.js-group-sync-group-errors' ).remove();
+ // If all groups are resolved, remove the group sync error block
+ if ( !$( '.js-group-sync-group-errors' ).length ) {
+ $( '.js-group-sync-groups-with-error' ).remove();
+ }
+ }
+
+ function handleResolutionFailure( code, result, groupId, messageTitle ) {
+ var errorInfo = result && result.error ? result.error.info : null;
+ if ( errorInfo ) {
+ mw.notify( result.error.info, {
+ type: 'error',
+ tag: 'new-error'
+ } );
+ } else {
+ // Unknown error
+ mw.notify( mw.msg( 'translate-smg-unknown-error' ), {
+ type: 'error',
+ tag: 'new-error'
+ } );
+ }
+
+ mw.log.error( 'Error while resolving group or message. Param: ' + JSON.stringify( {
+ groupId: groupId,
+ messageTitle: messageTitle,
+ errorCode: code,
+ errorInfo: errorInfo
+ } ) );
+ }
+
+ function showLoading( $target ) {
+ $target.addClass( 'loading' )
+ .text( mw.msg( 'translate-smg-loading' ) )
+ .removeAttr( 'href' );
+ }
+
+ function hideLoading( $target ) {
+ $target.removeClass( 'loading' )
+ .text( mw.msg( 'translate-smg-group-action-resolve' ) )
+ .prop( 'href', '#' );
+ }
+
+ return {
+ init: init
+ };
+ }() );
+}() );
diff --git a/Translate/resources/js/ext.translate.special.managetranslatorsandbox.js b/Translate/resources/js/ext.translate.special.managetranslatorsandbox.js
new file mode 100644
index 00000000..af01d6c3
--- /dev/null
+++ b/Translate/resources/js/ext.translate.special.managetranslatorsandbox.js
@@ -0,0 +1,762 @@
+/*!
+ * JS for special page.
+ * @author Niklas Laxström
+ * @author Sucheta Ghoshal
+ * @author Amir E. Aharoni
+ * @author Pau Giner
+ * @license GPL-2.0-or-later
+ */
+
+( function () {
+ 'use strict';
+
+ var delay;
+
+ /**
+ * A callback for sorting translations.
+ *
+ * @param {Object} translationA Object loaded from translation stash
+ * @param {Object} translationB Object loaded from translation stash
+ * @return {number} String comparison of language codes
+ */
+ function sortTranslationsByLanguage( translationA, translationB ) {
+ var a = translationA.title.split( '/' ).pop(),
+ b = translationB.title.split( '/' ).pop();
+
+ return a.localeCompare( b );
+ }
+
+ function doApiAction( options ) {
+ var api = new mw.Api(),
+ optionsWithDefaults = $.extend( {}, { action: 'translatesandbox' }, options );
+
+ return api.postWithToken( 'csrf', optionsWithDefaults ).promise();
+ }
+
+ function removeSelectedRequests() {
+ var $selectedRequests = $( '.request-selector:checked' );
+
+ var $nextRequest = $selectedRequests
+ .first() // First selected request
+ .closest( '.request' ) // The request corresponds that checkbox
+ .prevAll( ':not(.hide)' ) // Go back till a non-hidden request
+ .first(); // The above selector gives list from bottom to top. Select the bottom one.
+
+ $selectedRequests.closest( '.request' ).remove();
+
+ updateRequestCount();
+
+ if ( !$nextRequest.length ) {
+ // If there's no request above the first checked request,
+ // try to get the first request in the column
+ $nextRequest = $( '.requests .request:not(.hide)' ).first();
+ }
+
+ if ( $nextRequest.length ) {
+ $nextRequest.trigger( 'click' );
+ updateSelectedIndicator( 1 );
+ } else {
+ updateSelectedIndicator( 0 );
+ }
+ }
+
+ /**
+ * Display the request details when user clicks on a request item
+ *
+ * @param {Object} request The request data set from backend on request items
+ */
+ function displayRequestDetails( request ) {
+ var $reminderStatus = $( '<span>' ).addClass( 'reminder-status' ),
+ $detailsPane = $( '.details.pane' );
+ if ( request.reminderscount ) {
+ var agoText = moment.isMoment( request.lastreminder ) ? moment( request.lastreminder ).fromNow() : request.lastreminder;
+ $reminderStatus.text( mw.msg(
+ 'tsb-reminder-sent',
+ request.reminderscount,
+ agoText
+ ) );
+ }
+
+ $detailsPane.empty().append(
+ $( '<div>' )
+ .addClass( 'tsb-header row' )
+ .text( request.username ),
+ $( '<div>' )
+ .addClass( 'reminder-email row' )
+ .append(
+ $( '<span>' )
+ .attr( { dir: 'ltr' } )
+ .text( request.email ),
+ $( '<a>' )
+ .prop( 'href', '#' )
+ .addClass( 'send-reminder link' )
+ .text( mw.msg( 'tsb-reminder-link-text' ) )
+ .on( 'click', function ( e ) {
+ e.preventDefault();
+
+ $reminderStatus
+ .text( mw.msg( 'tsb-reminder-sending' ) );
+
+ doApiAction( {
+ do: 'remind',
+ userid: request.userid
+ } ).done( function () {
+ request.lastreminder = moment();
+ request.reminderscount++;
+ $reminderStatus.text( mw.msg( 'tsb-reminder-sent-new' ) );
+ } ).fail( function () {
+ $reminderStatus.text( mw.msg( 'tsb-reminder-failed' ) );
+ } );
+ } ),
+ $reminderStatus
+ ),
+ $( '<div>' )
+ .addClass( 'languages row autonym' ),
+ $( '<div>' )
+ .addClass( 'signup-comment row' ),
+ $( '<div>' )
+ .addClass( 'actions row' )
+ .append(
+ $( '<button>' )
+ .addClass( 'accept mw-ui-button mw-ui-progressive' )
+ .text( mw.msg( 'tsb-accept-button-label' ) )
+ .on( 'click', function () {
+ mw.notify( mw.msg( 'tsb-accept-confirmation', 1 ) );
+
+ window.tsbUpdatingUsers = true;
+
+ doApiAction( {
+ userid: request.userid,
+ do: 'promote'
+ } ).done( function () {
+ removeSelectedRequests();
+
+ window.tsbUpdatingUsers = false;
+ } );
+ } ),
+ $( '<button>' )
+ .addClass( 'reject mw-ui-button mw-ui-destructive' )
+ .text( mw.msg( 'tsb-reject-button-label' ) )
+ .on( 'click', function () {
+ mw.notify( mw.msg( 'tsb-reject-confirmation', 1 ) );
+
+ window.tsbUpdatingUsers = true;
+
+ doApiAction( {
+ userid: request.userid,
+ do: 'delete'
+ } ).done( function () {
+ removeSelectedRequests();
+
+ window.tsbUpdatingUsers = false;
+ } );
+ } )
+ ),
+ $( '<div>' )
+ .addClass( 'translations row' )
+ );
+
+ if ( request.languagepreferences ) {
+ if ( request.languagepreferences.languages ) {
+ request.languagepreferences.languages.forEach( function ( language ) {
+ $detailsPane.find( '.languages' ).append(
+ $( '<span>' )
+ .prop( {
+ dir: $.uls.data.getDir( language ),
+ lang: language
+ } )
+ .text( $.uls.data.getAutonym( language ) )
+ );
+ } );
+ }
+
+ if ( request.languagepreferences.comment ) {
+ $detailsPane.find( '.signup-comment' ).append(
+ $( '<div>' )
+ .addClass( 'signup-comment-label' )
+ .text( mw.msg( 'tsb-user-posted-a-comment' ) ),
+ $( '<div>' )
+ .addClass( 'signup-comment-text' )
+ .text( request.languagepreferences.comment )
+ );
+ }
+ }
+
+ getUserTranslations( request.username ).done( showTranslations );
+ }
+
+ /**
+ * Get the current users translations.
+ *
+ * @param {string} user User name
+ * @return {jQuery.Promise}
+ */
+ function getUserTranslations( user ) {
+ var api = new mw.Api();
+
+ return api.postWithToken( 'csrf', {
+ action: 'translationstash',
+ subaction: 'query',
+ username: user
+ } );
+ }
+
+ function showTranslations( translations ) {
+ var $target = $( '.translations' );
+
+ $target.empty();
+
+ // Display a message if the user didn't make any translations
+ if ( !translations.translationstash.translations.length ) {
+ $target.append(
+ $( '<div>' )
+ .addClass( 'tsb-details-no-translations' )
+ .text( mw.msg( 'tsb-didnt-make-any-translations' ) )
+ );
+
+ return;
+ }
+
+ var gender = $( '.requests-list .request.selected' ).data( 'data' ).gender;
+ $target.append(
+ $( '<div>' )
+ .addClass( 'row title' )
+ .append(
+ $( '<div>' )
+ .text( mw.msg( 'tsb-translations-source' ) )
+ .addClass( 'four columns' ),
+ $( '<div>' )
+ .text( mw.msg( 'tsb-translations-user', gender ) )
+ .addClass( 'four columns' ),
+ $( '<div>' )
+ .text( mw.msg( 'tsb-translations-current' ) )
+ .addClass( 'four columns' )
+ )
+ );
+
+ translations.translationstash.translations.sort( sortTranslationsByLanguage );
+ translations.translationstash.translations.forEach( function ( translation ) {
+ showTranslation( translation );
+ } );
+ }
+
+ function showTranslation( translation ) {
+ var $target = $( '.translations' ),
+ translationLang = translation.title.split( '/' ).pop();
+
+ $target.append( $( '<div>' )
+ .addClass( 'row' )
+ .append(
+ $( '<div>' )
+ .addClass( 'four columns source' )
+ .text( translation.definition ),
+ $( '<div>' )
+ .addClass( 'four columns translation' )
+ .append(
+ $( '<div>' ).text( translation.translation ),
+ $( '<div>' )
+ .addClass( 'info autonym' )
+ .prop( {
+ dir: $.uls.data.getDir( translationLang ),
+ lang: translationLang
+ } )
+ .text(
+ $.uls.data.getAutonym( translationLang )
+ )
+ ),
+ $( '<div>' )
+ .addClass( 'four columns comparison' )
+ .append(
+ $( '<div>' ).text( translation.comparison || '' ),
+ $( '<div>' )
+ .addClass( 'info' )
+ .text( translation.title )
+ )
+ )
+ );
+ }
+
+ /**
+ * Display when multiple requests are checked.
+ */
+ function displayOnMultipleSelection() {
+ var selectedUserIDs = $( '.request-selector:checked' ).map( function ( i, checkedBox ) {
+ return $( checkedBox ).parents( 'div.request' ).data( 'data' ).userid;
+ } ).toArray();
+
+ $( '.details.pane' ).empty().append(
+ $( '<div>' )
+ .addClass( 'tsb-header row' ),
+ $( '<div>' )
+ .addClass( 'actions row' )
+ .append(
+ $( '<button>' )
+ .addClass( 'accept-all mw-ui-button mw-ui-progressive' )
+ .text( mw.msg( 'tsb-accept-all-button-label' ) )
+ .on( 'click', function () {
+ mw.notify( mw.msg( 'tsb-accept-confirmation', selectedUserIDs.length ) );
+
+ window.tsbUpdatingUsers = true;
+
+ doApiAction( {
+ userid: selectedUserIDs,
+ do: 'promote'
+ } ).done( function () {
+ removeSelectedRequests();
+
+ window.tsbUpdatingUsers = false;
+ } );
+ } ),
+ $( '<button>' )
+ .addClass( 'reject-all mw-ui-button mw-ui-destructive' )
+ .text( mw.msg( 'tsb-reject-all-button-label' ) )
+ .on( 'click', function () {
+ mw.notify( mw.msg( 'tsb-reject-confirmation', selectedUserIDs.length ) );
+
+ window.tsbUpdatingUsers = true;
+
+ doApiAction( {
+ userid: selectedUserIDs,
+ do: 'delete'
+ } ).done( function () {
+ removeSelectedRequests();
+
+ window.tsbUpdatingUsers = false;
+ } );
+ } )
+ )
+ );
+ }
+
+ /**
+ * Updates the counter of the selected users.
+ *
+ * @param {number} count The number of selected users
+ */
+ function updateSelectedIndicator( count ) {
+ var text = mw.msg( 'tsb-selected-count', mw.language.convertNumber( count ) );
+
+ $( '.requests.pane .request-footer .selected-counter' ).text( text );
+ if ( count > 1 ) {
+ $( '.details.pane .tsb-header' ).text( text );
+ }
+ }
+
+ /**
+ * Returns older requests with the same number of translations.
+ *
+ * @return {jQuery} Older requests
+ */
+ function getOlderRequests() {
+ var $lastSelectedRequest = $( '.row.request.selected' ).last(),
+ currentTranslationCount = $lastSelectedRequest.data( 'data' ).translations;
+
+ return $lastSelectedRequest.nextAll( ':not(.hide)' ).filter( function () {
+ return ( $( this ).data( 'data' ).translations === currentTranslationCount );
+ } );
+ }
+
+ /**
+ * Updates the number of older requests with the same number
+ * of translations at the link in the bottom of the requests row
+ * or hides that link if there are no such requests.
+ */
+ function indicateOlderRequests() {
+ var $olderRequests = getOlderRequests(),
+ $olderRequestsIndicator = $( '.older-requests-indicator' );
+
+ var oldRequestsCount = $olderRequests.length;
+ var oldRequestsCountString = mw.language.convertNumber( oldRequestsCount );
+
+ if ( oldRequestsCount ) {
+ $olderRequestsIndicator
+ .text( mw.msg( 'tsb-older-requests', oldRequestsCountString ) )
+ .removeClass( 'hide' );
+ } else {
+ $olderRequestsIndicator
+ .addClass( 'hide' );
+ }
+ }
+
+ /**
+ * Updates the number of requests.
+ */
+ function updateRequestCount() {
+ var $requests = $( '.requests-list .request' ),
+ visibleRequestsCount = $requests.filter( ':not(.hide)' ).length;
+
+ $( '.request-count' ).text(
+ mw.msg( 'tsb-request-count', mw.language.convertNumber( visibleRequestsCount ) )
+ );
+
+ if ( $requests.length === 0 ) {
+ $( '.details.pane' )
+ .empty()
+ .append(
+ $( '<div>' )
+ .addClass( 'tsb-header row' )
+ .text( mw.msg( 'tsb-no-requests-from-new-users' ) )
+ );
+ }
+ }
+
+ /**
+ * Sets the height of the panes to the window height.
+ */
+ function setPanesHeight() {
+ var $detailsPane = $( '.details.pane' ),
+ $requestsPane = $( '.requests.pane' ),
+ detailsHeight = $( window ).height() - $detailsPane.offset().top,
+ requestsHeight = detailsHeight -
+ $requestsPane.find( '.request-footer' ).height() -
+ $requestsPane.find( '.request-header' ).height();
+
+ $detailsPane.css( 'max-height', detailsHeight );
+ $requestsPane.find( '.requests-list' ).css( 'max-height', requestsHeight );
+ }
+
+ function selectAllRequests() {
+ var $requestCheckboxes = $( '.request-selector' ),
+ $detailsPane = $( '.details.pane' ),
+ $selectAll = $( '.request-selector-all' ),
+ $requestRows = $( '.requests .request' ),
+ selectAllChecked = $selectAll.prop( 'checked' ),
+ $visibleRows = $requestRows.not( '.hide' );
+
+ $visibleRows.each( function ( index, row ) {
+ $( row ).find( '.request-selector' ).prop( {
+ checked: selectAllChecked,
+ disabled: false
+ } );
+ } );
+
+ var selectedCount;
+ if ( selectAllChecked ) {
+ displayOnMultipleSelection();
+ $visibleRows.addClass( 'selected' );
+ selectedCount = $requestCheckboxes.filter( ':checked' ).length;
+ } else {
+ $detailsPane.empty();
+ $requestRows.removeClass( 'selected' );
+ selectedCount = 0;
+ }
+
+ updateSelectedIndicator( selectedCount );
+ indicateOlderRequests();
+ }
+
+ /**
+ * Handle click on request row
+ *
+ * @param {jQuery.Event} e
+ */
+ function onSelectRequest( e ) {
+ var $requestRow = $( e.target ).closest( '.request' ),
+ $requestRows = $( '.requests .request' ),
+ $selectAll = $( '.request-selector-all' );
+
+ displayRequestDetails( $requestRow.data( 'data' ) );
+
+ // Clicking a row makes only that row selected and unselects all other rows
+ $requestRows.each( function ( i, row ) {
+ var $row = $( row );
+
+ if ( row === $requestRow[ 0 ] ) {
+ $row.addClass( 'selected' )
+ .find( '.request-selector' ).prop( {
+ checked: true,
+ disabled: true
+ } );
+ } else {
+ $row.removeClass( 'selected' )
+ .find( '.request-selector' ).prop( {
+ checked: false,
+ disabled: false
+ } );
+ }
+ } );
+
+ $selectAll.prop( 'indeterminate', true );
+
+ updateSelectedIndicator( 1 );
+ indicateOlderRequests();
+ }
+
+ /**
+ * Event handler for request checkbox selection.
+ *
+ * @param {jQuery.Event} e
+ */
+ function requestSelectHandler( e ) {
+ var request = e.target,
+ $detailsPane = $( '.details.pane' ),
+ $requestCheckboxes = $( '.request-selector' ),
+ $selectAll = $( '.request-selector-all' ),
+ $thisRequestRow = $( request ).parents( 'div.request' );
+
+ // Uncheck the rows that were selected by clicking the row
+ $requestCheckboxes.filter( ':disabled' ).prop( 'disabled', false );
+
+ if ( request.checked ) {
+ $thisRequestRow.addClass( 'selected' );
+ } else {
+ $thisRequestRow.removeClass( 'selected' );
+ }
+
+ var $checkedBoxes = $requestCheckboxes.filter( ':checked' );
+ var checkedCount = $checkedBoxes.length;
+
+ if ( checkedCount === $requestCheckboxes.length ) {
+ // All boxes are selected
+ $selectAll.prop( {
+ checked: true,
+ indeterminate: false
+ } );
+
+ displayOnMultipleSelection();
+ } else if ( checkedCount === 0 ) {
+ // No boxes are selected
+ $selectAll.prop( {
+ checked: false,
+ indeterminate: false
+ } );
+
+ $detailsPane.empty();
+ } else if ( checkedCount === 1 ) {
+ $selectAll.prop( {
+ checked: false,
+ indeterminate: true
+ } );
+
+ $checkedBoxes.prop( 'disabled', true );
+
+ // Here we know that only one checkbox is selected,
+ // so it's OK to query the data from it
+ displayRequestDetails( $checkedBoxes.parents( 'div.request' ).data( 'data' ) );
+ } else {
+ $selectAll.prop( {
+ checked: false,
+ indeterminate: true
+ } );
+
+ displayOnMultipleSelection();
+ }
+
+ updateSelectedIndicator( checkedCount );
+ indicateOlderRequests();
+
+ e.stopPropagation();
+ }
+
+ /**
+ * Old request click handler.
+ *
+ * @param {jQuery.Event} e
+ */
+ function oldRequestSelector( e ) {
+ e.preventDefault();
+
+ getOlderRequests().each( function ( index, request ) {
+ $( request ).find( '.request-selector' )
+ .prop( 'checked', true ) // Otherwise the state doesn't actually change
+ .trigger( 'change' );
+ } );
+ }
+
+ // ======================================
+ // LanguageFilter plugin
+ // ======================================
+ function LanguageFilter( element ) {
+ this.$selector = $( element );
+ this.init();
+ }
+
+ LanguageFilter.prototype.init = function () {
+ var languageFilter = this;
+
+ var $clearButton = $( '<button>' )
+ .addClass( 'clear-language-selector hide' )
+ .text( '×' );
+
+ languageFilter.$selector.after( $clearButton );
+ // Activate language selector
+ languageFilter.$selector.uls( {
+ onSelect: function ( language ) {
+ languageFilter.$selector
+ .removeClass( 'unselected' )
+ .addClass( 'selected autonym' )
+ .prop( {
+ dir: $.uls.data.getDir( language ),
+ lang: language
+ } )
+ .text( $.uls.data.getAutonym( language ) );
+
+ languageFilter.filter( language );
+ $clearButton.removeClass( 'hide' );
+ indicateOlderRequests();
+ },
+ ulsPurpose: 'translate-special-managetranslatorsandbox',
+ quickList: mw.uls.getFrequentLanguageList
+ } );
+
+ $clearButton.on( 'click', function () {
+ var userLang = mw.config.get( 'wgUserLanguage' );
+
+ languageFilter.$selector
+ .removeClass( 'selected autonym' )
+ .prop( {
+ dir: $.uls.data.getDir( userLang ),
+ lang: userLang
+ } )
+ .addClass( 'unselected' )
+ .text( mw.msg( 'tsb-all-languages-button-label' ) );
+
+ languageFilter.filter();
+ $clearButton.addClass( 'hide' );
+ } );
+ };
+
+ /**
+ * Filter the requests by language.
+ *
+ * @param {string} [language] Language code
+ */
+ LanguageFilter.prototype.filter = function ( language ) {
+ var $requests = $( '.request' );
+
+ $requests.each( function ( index, request ) {
+ var $request = $( request ),
+ requestData = $request.data( 'data' );
+
+ if ( !language ||
+ ( requestData.languagepreferences &&
+ requestData.languagepreferences.languages &&
+ requestData.languagepreferences.languages.indexOf( language ) > -1 )
+ ) {
+ // Found language
+ $request.removeClass( 'hide' );
+ } else {
+ $request.addClass( 'hide' );
+ }
+ } );
+
+ updateAfterFiltering();
+ };
+
+ $.fn.languageFilter = function () {
+ return this.each( function () {
+ if ( !$.data( this, 'LanguageFilter' ) ) {
+ $.data( this, 'LanguageFilter', new LanguageFilter( this ) );
+ }
+ } );
+ };
+
+ // ======================================
+ // TranslatorSearch plugin
+ // ======================================
+ function TranslatorSearch( element ) {
+ this.$search = $( element );
+ this.init();
+ }
+
+ TranslatorSearch.prototype.init = function () {
+ this.$search.on( 'search keyup', this.keyup.bind( this ) );
+ };
+
+ TranslatorSearch.prototype.keyup = function () {
+ var translatorSearch = this;
+
+ // Respond to the keypress events after a small timeout to avoid freeze when typed fast
+ delay( function () {
+ var query = translatorSearch.$search.val().trim().toLowerCase();
+ translatorSearch.filter( query );
+ }, 300 );
+ };
+
+ TranslatorSearch.prototype.filter = function ( query ) {
+ var $requests = $( '.request' );
+
+ $requests.each( function ( index, request ) {
+ var $request = $( request ),
+ requestData = $request.data( 'data' );
+
+ if ( query.length === 0 ||
+ requestData.username.toLowerCase().indexOf( query ) === 0 ||
+ requestData.email.toLowerCase().indexOf( query ) === 0
+ ) {
+ $request.removeClass( 'hide' );
+ } else {
+ $request.addClass( 'hide' );
+ }
+ } );
+
+ updateAfterFiltering();
+ };
+
+ function updateAfterFiltering() {
+ var $firstVisibleUser = $( '.request:not(.hide)' ).first();
+
+ if ( $firstVisibleUser.length ) {
+ $firstVisibleUser.trigger( 'click' );
+ } else {
+ $( '.details.pane' ).empty();
+ var $selectedRequests = $( '.request-selector:checked' );
+ $selectedRequests.closest( '.request' ).removeClass( 'selected' );
+ $selectedRequests.prop( {
+ checked: false,
+ disabled: false
+ } );
+
+ updateSelectedIndicator( 0 );
+ }
+
+ updateRequestCount();
+ }
+
+ $.fn.translatorSearch = function () {
+ return this.each( function () {
+ if ( !$.data( this, 'TranslatorSearch' ) ) {
+ $.data( this, 'TranslatorSearch', new TranslatorSearch( this ) );
+ }
+ } );
+ };
+
+ delay = ( function () {
+ var timer = 0;
+
+ return function ( callback, milliseconds ) {
+ clearTimeout( timer );
+ timer = setTimeout( callback, milliseconds );
+ };
+ }() );
+
+ $( function () {
+ var $requestCheckboxes = $( '.request-selector' ),
+ $selectAll = $( '.request-selector-all' ),
+ $requestRows = $( '.requests .request' );
+
+ // Delay so we get the correct height on page load
+ window.setTimeout( setPanesHeight, 0 );
+ $( window ).on( 'resize', setPanesHeight );
+
+ $( '.request-filter-box' ).translatorSearch();
+ $( '.language-selector' ).languageFilter();
+
+ // Handle clicks for the 'Select all' checkbox
+ $selectAll.on( 'click', selectAllRequests );
+
+ // Handle clicks on request checkboxes.
+ $requestCheckboxes.on( 'click change', requestSelectHandler );
+
+ // Handle clicks on request rows.
+ $requestRows.on( 'click', onSelectRequest );
+
+ $( '.older-requests-indicator' ).on( 'click', oldRequestSelector );
+
+ if ( $requestRows.length ) {
+ $requestRows.first().trigger( 'click' );
+ }
+
+ updateRequestCount();
+ } );
+}() );
diff --git a/Translate/resources/js/ext.translate.special.operatorsuggest.js b/Translate/resources/js/ext.translate.special.operatorsuggest.js
new file mode 100644
index 00000000..eeda8822
--- /dev/null
+++ b/Translate/resources/js/ext.translate.special.operatorsuggest.js
@@ -0,0 +1,39 @@
+/*
+ * Autocomplete search operators.
+ */
+( function () {
+ 'use strict';
+
+ function autocompleteOperators( request, response ) {
+ var operators = [ 'language:', 'group:', 'filter:' ],
+ result = [],
+ lastterm = request.term.split( ' ' ).pop();
+
+ operators.forEach( function ( value ) {
+ var pos = value.indexOf( lastterm );
+ if ( pos === 0 ) {
+ result.push( value );
+ }
+ } );
+ response( result );
+ }
+
+ $( '.tux-searchpage .searchinputbox' )
+ .autocomplete( {
+ source: autocompleteOperators,
+ select: function ( event, ui ) {
+ var $value = $( this ).val(),
+ operators = $value.split( ' ' );
+
+ operators.pop();
+ operators.push( ui.item.value );
+
+ $( this ).val( operators.join( ' ' ) );
+ return false;
+ },
+
+ focus: function ( event ) {
+ event.preventDefault();
+ }
+ } );
+}() );
diff --git a/Translate/resources/js/ext.translate.special.pagemigration.js b/Translate/resources/js/ext.translate.special.pagemigration.js
new file mode 100644
index 00000000..3844dd67
--- /dev/null
+++ b/Translate/resources/js/ext.translate.special.pagemigration.js
@@ -0,0 +1,534 @@
+( function () {
+ 'use strict';
+ var noOfSourceUnits, noOfTranslationUnits,
+ pageName = '',
+ langCode = '',
+ sourceUnits = [];
+
+ /**
+ * Create translation pages using content of right hand side blocks
+ * and identifiers from left hand side blocks. Create pages only if
+ * content is not empty.
+ *
+ * @param {number} i Array index to sourceUnits.
+ * @param {string} content
+ * @return {Function} Returns a function which returns a jQuery.Promise
+ */
+ function createTranslationPage( i, content ) {
+
+ return function () {
+ var api = new mw.Api();
+
+ var identifier = sourceUnits[ i ].identifier;
+ var title = 'Translations:' + pageName + '/' + identifier + '/' + langCode;
+ var summary = $( '#pm-summary' ).val();
+
+ return api.postWithToken( 'csrf', {
+ action: 'edit',
+ watchlist: 'nochange',
+ title: title,
+ text: content,
+ summary: summary
+ } );
+ };
+ }
+
+ /**
+ * Get the old translations of a given page at given time.
+ *
+ * @param {string} fuzzyTimestamp Timestamp in MediaWiki format
+ * @param {string} pageTitle
+ * @return {jQuery.Promise}
+ * @return {Function} return.done
+ * @return {Array} return.done.data Array of old translations
+ */
+ function splitTranslationPage( fuzzyTimestamp, pageTitle ) {
+ var api = new mw.Api();
+
+ return api.get( {
+ action: 'query',
+ prop: 'revisions',
+ rvprop: 'content',
+ rvstart: fuzzyTimestamp,
+ titles: pageTitle
+ } ).then( function ( data ) {
+ var $errorBox = $( '.mw-tpm-sp-error__message' );
+ var obj;
+ for ( var page in data.query.pages ) {
+ obj = data.query.pages[ page ];
+ }
+ if ( obj === undefined ) {
+ // obj was not initialized
+ $errorBox.text( mw.msg( 'pm-page-does-not-exist', pageTitle ) ).removeClass( 'hide' );
+ return $.Deferred().reject();
+ }
+ if ( obj.revisions === undefined ) {
+ // the case of /en subpage where first edit is by FuzzyBot
+ $errorBox.text( mw.msg( 'pm-old-translations-missing', pageTitle ) ).removeClass( 'hide' );
+ return $.Deferred().reject();
+ }
+ var pageContent = obj.revisions[ 0 ][ '*' ];
+ return pageContent.split( '\n\n' );
+ } );
+ }
+
+ /**
+ * Get the timestamp before FuzzyBot's first edit on page.
+ *
+ * @param {string} pageTitle
+ * @return {jQuery.Promise}
+ * @return {Function} return.done
+ * @return {string} return.done.data
+ */
+ function getFuzzyTimestamp( pageTitle ) {
+ var api = new mw.Api();
+
+ // This api call returns the timestamp of FuzzyBot's edit
+ return api.get( {
+ action: 'query',
+ prop: 'revisions',
+ rvprop: 'timestamp',
+ rvuser: 'FuzzyBot',
+ rvdir: 'newer',
+ titles: pageTitle
+ } ).then( function ( data ) {
+ var $errorBox = $( '.mw-tpm-sp-error__message' );
+ var obj;
+ for ( var page in data.query.pages ) {
+ obj = data.query.pages[ page ];
+ }
+ // Page does not exist if missing field is present
+ if ( obj === undefined || obj.missing === '' ) {
+ $errorBox.text( mw.msg( 'pm-page-does-not-exist', pageTitle ) ).removeClass( 'hide' );
+ return $.Deferred().reject();
+ }
+
+ // Page exists, but no edit by FuzzyBot
+ if ( obj.revisions === undefined ) {
+ $errorBox.text( mw.msg( 'pm-old-translations-missing', pageTitle ) ).removeClass( 'hide' );
+ return $.Deferred().reject();
+ } else {
+ // FB over here refers to FuzzyBot
+ var timestampFB = obj.revisions[ 0 ].timestamp;
+ var dateFB = new Date( timestampFB );
+ dateFB.setSeconds( dateFB.getSeconds() - 1 );
+ var timestampOld = dateFB.toISOString();
+ mw.log( 'New Timestamp: ' + timestampOld );
+ return timestampOld;
+ }
+ } );
+ }
+
+ /**
+ * Get the translation units created by Translate extension.
+ *
+ * @param {string} page Page name
+ * @return {jQuery.Promise}
+ * @return {Function} return.done
+ * @return {Object[]} return.done.data Array of sUnit Objects
+ */
+ function getSourceUnits( page ) {
+ var api = new mw.Api();
+
+ return api.get( {
+ action: 'query',
+ list: 'messagecollection',
+ mcgroup: 'page-' + page,
+ mclanguage: 'en',
+ mcprop: 'definition'
+ } ).then( function ( data ) {
+ sourceUnits = [];
+ var result = data.query.messagecollection;
+ for ( var i = 0; i < result.length; i++ ) {
+ var sUnit = {};
+ var key = result[ i ].key;
+ sUnit.identifier = key.slice( key.lastIndexOf( '/' ) + 1 );
+ sUnit.definition = result[ i ].definition;
+ sourceUnits.push( sUnit );
+ }
+ return sourceUnits;
+ } ).fail( function ( code, result ) {
+ // Incase the group does not exist, just return an empty array.
+ var $errorContainer = $( '.mw-tpm-sp-error__message' );
+ var errorMessage = mw.msg( 'pm-translation-unit-fetch-failed' );
+ if (
+ code === 'badparameter' &&
+ result.error && result.error.info.indexOf( 'mcgroup' ) !== -1
+ ) {
+ errorMessage = mw.msg( 'pm-pagetitle-not-translatable', page );
+ }
+
+ $errorContainer
+ .text( errorMessage )
+ .removeClass( 'hide' );
+ $.Deferred().reject();
+ } );
+ }
+
+ /**
+ * Shift rows up by one unit. This is called after a unit is deleted.
+ *
+ * @param {jQuery} $start The starting node
+ */
+ function shiftRowsUp( $start ) {
+ var $current = $start,
+ $next = $start.next();
+
+ while ( $next.length ) {
+ var nextVal = $next.find( '.mw-tpm-sp-unit__target' ).val();
+ $current.find( '.mw-tpm-sp-unit__target' ).val( nextVal );
+ $current = $next;
+ $next = $current.next();
+ }
+ if ( $current.find( '.mw-tpm-sp-unit__source' ).val() ) {
+ $current.find( '.mw-tpm-sp-unit__target' ).val( '' );
+ } else {
+ $current.remove();
+ }
+ }
+
+ /**
+ * Shift rows down by one unit. This is called after a new empty unit is
+ * added.
+ *
+ * @param {jQuery} $nextRow The next row to start with
+ * @param {string} text The text of the next row
+ * @return {string} text The text of the last row
+ */
+ function shiftRowsDown( $nextRow, text ) {
+ while ( $nextRow.length ) {
+ var oldText = $nextRow.find( '.mw-tpm-sp-unit__target' ).val();
+ $nextRow.find( '.mw-tpm-sp-unit__target' ).val( text );
+ $nextRow = $nextRow.next();
+ text = oldText;
+ }
+ return text;
+ }
+
+ /**
+ * Create a new row of source text and target text with action icons.
+ *
+ * @param {string} sourceText
+ * @param {string} targetText
+ * @return {jQuery} newUnit The new row unit object
+ */
+
+ function createNewUnit( sourceText, targetText ) {
+ var $newUnit = $( '<div>' ).addClass( 'mw-tpm-sp-unit row' );
+ var $sourceUnit = $( '<textarea>' ).addClass( 'mw-tpm-sp-unit__source five columns' )
+ .prop( 'readonly', true ).attr( 'tabindex', '-1' ).val( sourceText );
+ var $targetUnit = $( '<textarea>' ).addClass( 'mw-tpm-sp-unit__target five columns' )
+ .val( targetText ).prop( 'dir', $.uls.data.getDir( langCode ) );
+ var $actionUnit = $( '<div>' ).addClass( 'mw-tpm-sp-unit__actions two columns' );
+ $actionUnit.append(
+ $( '<span>' ).addClass( 'mw-tpm-sp-action mw-tpm-sp-action--add' )
+ .attr( 'title', mw.msg( 'pm-add-icon-hover-text' ) ),
+ $( '<span>' ).addClass( 'mw-tpm-sp-action mw-tpm-sp-action--swap' )
+ .attr( 'title', mw.msg( 'pm-swap-icon-hover-text' ) ),
+ $( '<span>' ).addClass( 'mw-tpm-sp-action mw-tpm-sp-action--delete' )
+ .attr( 'title', mw.msg( 'pm-delete-icon-hover-text' ) )
+ );
+ $newUnit.append( $sourceUnit, $targetUnit, $actionUnit );
+ return $newUnit;
+ }
+
+ /**
+ * Display the source and target units alongwith the action icons.
+ *
+ * @param {Array} units
+ * @param {Array} translations
+ */
+ function displayUnits( units, translations ) {
+ noOfSourceUnits = units.length;
+ noOfTranslationUnits = translations.length;
+ var totalUnits = noOfSourceUnits > noOfTranslationUnits ? noOfSourceUnits : noOfTranslationUnits;
+ var $unitListing = $( '.mw-tpm-sp-unit-listing' );
+ $unitListing.html( '' );
+ for ( var i = 0; i < totalUnits; i++ ) {
+ var sourceText = '', targetText = '';
+ if ( units[ i ] !== undefined ) {
+ sourceText = units[ i ].definition;
+ }
+ if ( translations[ i ] !== undefined ) {
+ targetText = translations[ i ];
+ }
+ var $newUnit = createNewUnit( sourceText, targetText );
+ $unitListing.append( $newUnit );
+ }
+ }
+
+ /**
+ * Split headers from remaining text in each translation unit if present.
+ *
+ * @param {Array} translations Array of initial units obtained on splitting
+ * @return {string[]} Array having the headers split into new unit
+ */
+ function splitHeaders( translations ) {
+ return translations.map( function ( elem ) {
+ // Check https://regex101.com/r/oT7fZ2 for details
+ return elem.match( /(^==.+$|(?:(?!^==).+\n?)+)/gm );
+ } ).reduce( function ( acc, val ) {
+ // This should be an Array.prototype.flatMap when ES2019 is supported
+ return acc.concat( val );
+ }, [] );
+ }
+
+ /**
+ * Get the index of next translation unit containing h2 header.
+ *
+ * @param {number} startIndex Index to start the scan from
+ * @param {string[]} translationUnits Segmented units.
+ * @return {number} Index of the next unit found, -1 if not.
+ */
+ function getHeaderUnit( startIndex, translationUnits ) {
+ var regex = new RegExp( /^==[^=]+==$/m );
+ for ( var i = startIndex; i < translationUnits.length; i++ ) {
+ if ( regex.test( translationUnits[ i ] ) ) {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * Align h2 headers in the order they appear.
+ * Assumption: The source headers and translation headers appear in
+ * the same order.
+ *
+ * @param {Object[]} units
+ * @param {string[]} translationUnits
+ * @return {string[]}
+ */
+ function alignHeaders( units, translationUnits ) {
+ var tIndex = 0;
+ var regex = new RegExp( /^==[^=]+==$/m );
+ for ( var i = 0; i < units.length; i++ ) {
+ if ( regex.test( units[ i ].definition ) ) {
+ tIndex = getHeaderUnit( tIndex, translationUnits );
+ var mergeText = '';
+ // search is over
+ if ( tIndex === -1 ) {
+ break;
+ }
+ // remove the unit
+ var matchText = translationUnits.splice( tIndex, 1 ).toString();
+ var emptyCount = i - tIndex;
+ if ( emptyCount > 0 ) {
+ // add empty units
+ while ( emptyCount !== 0 ) {
+ translationUnits.splice( tIndex, 0, '' );
+ emptyCount -= 1;
+ }
+ } else if ( emptyCount < 0 ) {
+ // merge units until there is room for tIndex translation unit to
+ // align with ith source unit
+ while ( emptyCount !== 0 ) {
+ mergeText += translationUnits.splice( i, 1 ).toString() + '\n';
+ emptyCount += 1;
+ }
+ if ( i !== 0 ) {
+ translationUnits[ i - 1 ] += '\n' + mergeText;
+ } else {
+ matchText = mergeText + matchText;
+ }
+ }
+ // add the unit back
+ translationUnits.splice( i, 0, matchText );
+ tIndex = i + 1;
+ }
+ }
+ return translationUnits;
+ }
+
+ /**
+ * Handler for 'Save' button click event.
+ */
+ function saveHandler() {
+ var list = [];
+
+ $( '.mw-tpm-sp-error__message' ).addClass( 'hide' );
+ if ( noOfSourceUnits < noOfTranslationUnits ) {
+ $( '.mw-tpm-sp-error__message' ).text( mw.msg( 'pm-extra-units-warning' ) )
+ .removeClass( 'hide' );
+ return;
+ } else {
+ $( 'input' ).prop( 'disabled', true );
+ $( '.mw-tpm-sp-instructions' ).addClass( 'hide' );
+ for ( var i = 0; i < noOfSourceUnits; i++ ) {
+ var content = $( '.mw-tpm-sp-unit__target' ).eq( i ).val();
+ content = content.trim();
+ if ( content !== '' ) {
+ list.push( createTranslationPage( i, content ) );
+ }
+ }
+
+ $.ajaxDispatcher( list, 1 ).done( function () {
+ $( '#action-import' ).removeClass( 'hide' );
+ $( 'input' ).prop( 'disabled', false );
+ $( '.mw-tpm-sp-instructions' )
+ .text( mw.msg( 'pm-on-save-message-text' ) )
+ .removeClass( 'hide' );
+ } ).fail( function ( errmsg ) {
+ $( 'input' ).prop( 'disabled', false );
+ // eslint-disable-next-line mediawiki/msg-doc
+ $( '.mw-tpm-sp-error__message' ).text( mw.msg( errmsg ) ).removeClass( 'hide' );
+ } );
+ }
+ }
+
+ /**
+ * Handler for 'Cancel' button click event.
+ */
+ function cancelHandler() {
+ $( '.mw-tpm-sp-error__message' ).addClass( 'hide' );
+ $( '.mw-tpm-sp-instructions' ).addClass( 'hide' );
+ $( '#action-save, #action-cancel' ).addClass( 'hide' );
+ $( '#action-import' ).removeClass( 'hide' );
+ $( '.mw-tpm-sp-unit-listing' ).html( '' );
+ }
+
+ /**
+ * Handler for add new unit icon ('+') click event. Adds a translation unit
+ * below the current unit.
+ *
+ * @param {jQuery.Event} event
+ */
+ function addHandler( event ) {
+ var $nextRow = $( event.target ).closest( '.mw-tpm-sp-unit' ).next();
+ var $targetUnit = $nextRow.find( '.mw-tpm-sp-unit__target' );
+ var text = $targetUnit.val();
+ $targetUnit.val( '' );
+ $nextRow = $nextRow.next();
+ text = shiftRowsDown( $nextRow, text );
+ if ( text ) {
+ var $newUnit = createNewUnit( '', text );
+ $( '.mw-tpm-sp-unit-listing' ).append( $newUnit );
+ }
+ noOfTranslationUnits += 1;
+ }
+
+ /**
+ * Handler for delete icon ('-') click event. Deletes the unit and shifts
+ * the units up by one.
+ *
+ * @param {jQuery.Event} event
+ */
+ function deleteHandler( event ) {
+ var $rowUnit = $( event.target ).closest( '.mw-tpm-sp-unit' );
+ var sourceText = $rowUnit.find( '.mw-tpm-sp-unit__source' ).val();
+ if ( !sourceText ) {
+ $rowUnit.remove();
+ } else {
+ $rowUnit.find( '.mw-tpm-sp-unit__target' ).val( '' );
+ shiftRowsUp( $rowUnit );
+ }
+ noOfTranslationUnits -= 1;
+ }
+
+ /**
+ * Handler for swap icon click event. Swaps the text in the current unit
+ * with the text in the unit below.
+ *
+ * @param {jQuery.Event} event
+ */
+ function swapHandler( event ) {
+ var $rowUnit = $( event.target ).closest( '.mw-tpm-sp-unit' );
+ var tempText = $rowUnit.find( '.mw-tpm-sp-unit__target' ).val();
+ var nextVal = $rowUnit.next().find( '.mw-tpm-sp-unit__target' ).val();
+ $rowUnit.find( '.mw-tpm-sp-unit__target' ).val( nextVal );
+ $rowUnit.next().find( '.mw-tpm-sp-unit__target' ).val( tempText );
+ }
+
+ /**
+ * Handler for 'Import' button click event. Imports source and translation
+ * units and displays them.
+ *
+ * @param {jQuery.Event} e
+ */
+ function importHandler( e ) {
+ var $errorBox = $( '.mw-tpm-sp-error__message' ),
+ $messageBox = $( '.mw-tpm-sp-instructions' );
+
+ e.preventDefault();
+
+ var pageTitle = $( '#title' ).val().trim();
+ if ( pageTitle === '' ) {
+ $errorBox.text( mw.msg( 'pm-pagetitle-missing' ) ).removeClass( 'hide' );
+ return;
+ }
+
+ var titleObj = mw.Title.newFromText( pageTitle );
+ $messageBox.addClass( 'hide' );
+ if ( titleObj === null ) {
+ $errorBox.text( mw.msg( 'pm-pagetitle-invalid' ) ).removeClass( 'hide' );
+ return;
+ }
+
+ pageTitle = titleObj.getPrefixedDb();
+ var slashPos = pageTitle.lastIndexOf( '/' );
+
+ if ( slashPos === -1 ) {
+ $errorBox.text( mw.msg( 'pm-langcode-missing' ) ).removeClass( 'hide' );
+ return;
+ }
+
+ pageName = pageTitle.slice( 0, slashPos );
+ langCode = pageTitle.slice( slashPos + 1 );
+
+ if ( pageName === '' ) {
+ $errorBox.text( mw.msg( 'pm-pagetitle-invalid' ) ).removeClass( 'hide' );
+ return;
+ }
+
+ $errorBox.addClass( 'hide' );
+
+ var fuzzyTimestamp = null;
+ var units = null;
+ getFuzzyTimestamp( pageTitle )
+ .then( function ( response ) {
+ fuzzyTimestamp = response;
+ return getSourceUnits( pageName );
+ } )
+ .then( function ( response ) {
+ units = response;
+ return splitTranslationPage( fuzzyTimestamp, pageTitle );
+ } )
+ .then( function ( translations ) {
+ noOfSourceUnits = units.length;
+ var translationUnits = splitHeaders( translations );
+ translationUnits = alignHeaders( units, translationUnits );
+ noOfTranslationUnits = translationUnits.length;
+ displayUnits( units, translationUnits );
+ $( '#action-save, #action-cancel' ).removeClass( 'hide' );
+ $( '#action-import' ).addClass( 'hide' );
+ $messageBox.text( mw.msg( 'pm-on-import-message-text' ) ).removeClass( 'hide' );
+ } );
+ }
+
+ /**
+ * Listens to various click events
+ */
+ function listen() {
+ var $listing = $( '.mw-tpm-sp-unit-listing' );
+
+ $( '#mw-tpm-sp-primary-form' ).on( 'submit', importHandler );
+ $( '#action-import' ).on( 'click', importHandler );
+ $( '#action-save' ).on( 'click', saveHandler );
+ $( '#action-cancel' ).on( 'click', cancelHandler );
+ $listing.on( 'click', '.mw-tpm-sp-action--swap', swapHandler );
+ $listing.on( 'click', '.mw-tpm-sp-action--delete', deleteHandler );
+ $listing.on( 'click', '.mw-tpm-sp-action--add', addHandler );
+ }
+
+ $( listen );
+
+ mw.translate = mw.translate || {};
+ mw.translate = $.extend( mw.translate, {
+ getSourceUnits: getSourceUnits,
+ getFuzzyTimestamp: getFuzzyTimestamp,
+ splitTranslationPage: splitTranslationPage,
+ splitHeaders: splitHeaders,
+ alignHeaders: alignHeaders
+ } );
+
+}() );
diff --git a/Translate/resources/js/ext.translate.special.pagepreparation.js b/Translate/resources/js/ext.translate.special.pagepreparation.js
new file mode 100644
index 00000000..8b1edea9
--- /dev/null
+++ b/Translate/resources/js/ext.translate.special.pagepreparation.js
@@ -0,0 +1,419 @@
+( function () {
+ 'use strict';
+
+ /**
+ * Save the page with a given page name and given content to the wiki.
+ *
+ * @param {string} pageName Page title
+ * @param {string} pageContent Content of the page to be saved
+ * @return {jQuery.Promise}
+ */
+ function savePage( pageName, pageContent ) {
+ var api = new mw.Api();
+
+ return api.postWithToken( 'csrf', {
+ action: 'edit',
+ title: pageName,
+ text: pageContent,
+ summary: $( '#pp-summary' ).val()
+ } ).promise();
+ }
+
+ /**
+ * Get the diff between the current revision and the prepared page content.
+ *
+ * @param {string} pageName Page title
+ * @param {string} pageContent Content of the page to be saved
+ * @return {jQuery.Promise}
+ * @return {Function} return.done
+ * @return {string} return.done.data
+ */
+ function getDiff( pageName, pageContent ) {
+ var api = new mw.Api();
+
+ return api.post( {
+ action: 'query',
+ prop: 'revisions',
+ rvprop: 'content',
+ rvlimit: '1',
+ titles: pageName,
+ rvdifftotext: pageContent
+ } ).then( function ( data ) {
+ var obj;
+ for ( var page in data.query.pages ) {
+ obj = data.query.pages[ page ];
+ }
+
+ var diff;
+ if ( obj !== undefined ) {
+ diff = obj.revisions[ 0 ].diff[ '*' ];
+ }
+
+ return diff;
+ } );
+ }
+
+ /**
+ * Remove all the <translate> tags and {{translation}} templates before
+ * preparing the page. The tool will add them back wherever needed.
+ *
+ * @param {string} pageContent
+ * @return {string}
+ */
+ function cleanupTags( pageContent ) {
+ pageContent = pageContent.replace( /<\/?translate>\n?/gi, '' );
+ return pageContent;
+ }
+
+ /**
+ * Add the <languages/> bar at the top of the page, if not present.
+ * Remove the old {{languages}} template, if present.
+ *
+ * @param {string} pageContent
+ * @return {string}
+ */
+ function addLanguageBar( pageContent ) {
+ if ( !/<languages\/>/gi.test( pageContent ) ) {
+ pageContent = '<languages/>\n' + pageContent;
+ }
+ pageContent = pageContent.replace( /\{\{languages.*?\}\}/gi, '' );
+ return pageContent;
+ }
+
+ /**
+ * Add <translate> tags around Categories to make them a part of the page template
+ * and tag them with the {{translation}} template.
+ *
+ * @param {string} pageContent
+ * @return {jQuery.Promise}
+ */
+ function doCategories( pageContent ) {
+ return getNamespaceAliases( 14 ).then( function ( aliases ) {
+ aliases.push( 'category' );
+ for ( var i = 0; i < aliases.length; i++ ) {
+ aliases[ i ] = mw.util.escapeRegExp( aliases[ i ] );
+ }
+
+ var aliasList = aliases.join( '|' );
+ // Regex: https://regex101.com/r/sJ3gZ4/2
+ var categoryRegex = new RegExp( '\\[\\[((' + aliasList + ')' +
+ ':[^\\|]+)(\\|[^\\|]*?)?\\]\\]', 'gi' );
+ pageContent = pageContent.replace( categoryRegex, '\n</translate>\n' +
+ '[[$1{{#translation:}}$3]]\n<translate>\n' );
+
+ return pageContent;
+ } );
+ }
+
+ /**
+ * Add the <translate> and </translate> tags at the start and end of the page.
+ * The opening tag is added immediately after the <languages/> tag.
+ *
+ * @param {string} pageContent
+ * @return {string}
+ */
+ function addTranslateTags( pageContent ) {
+ pageContent = pageContent.replace( /(<languages\/>\n)/gi, '$1<translate>\n' );
+ pageContent = pageContent + '\n</translate>';
+ return pageContent;
+ }
+
+ /**
+ * Add newlines before and after section headers. Extra newlines resulting after
+ * this operation are cleaned up in postPreparationCleanup() function.
+ *
+ * @param {string} pageContent
+ * @return {string}
+ */
+ function addNewLines( pageContent ) {
+ pageContent = pageContent.replace( /^(==.*==)\n*/gm, '\n$1\n\n' );
+ return pageContent;
+ }
+
+ /**
+ * Add an anchor to a section header with the given headerText
+ *
+ * @param {string} headerText
+ * @param {string} pageContent
+ * @return {string}
+ */
+ function addAnchor( headerText, pageContent ) {
+ var anchorID = headerText.replace( ' ', '-' ).toLowerCase();
+
+ headerText = mw.RegExp.escape( headerText );
+ // Search for the header having text as headerText
+ // Regex: https://regex101.com/r/fD6iL1
+ var headerSearchRegex = new RegExp( '(==+[ ]*' + headerText + '[ ]*==+)', 'gi' );
+ // This is to ensure the tags and the anchor are added only once
+
+ if ( pageContent.indexOf( '<span id="' + mw.html.escape( anchorID ) + '"' ) === -1 ) {
+ pageContent = pageContent.replace( headerSearchRegex, '</translate>\n' +
+ '<span id="' + mw.html.escape( anchorID ) + '"></span>\n<translate>\n$1' );
+ }
+
+ // This is to add back the tags which were removed in cleanupTags()
+ if ( pageContent.indexOf( '</translate>\n<span id="' + anchorID + '"' ) === -1 ) {
+ var spanSearchRegex = new RegExp( '(<span id="' + mw.RegExp.escape( anchorID ) + '"></span>)', 'gi' );
+ pageContent = pageContent.replace( spanSearchRegex, '\n</translate>\n$1\n</translate>\n' );
+ }
+
+ // Replace the link text with the anchorID defined above
+ // Regex: https://regex101.com/r/kB5bK3
+ var replaceAnchorRegex = new RegExp( '(\\[\\[#)' + headerText + '(.*\\]\\])', 'gi' );
+ pageContent = pageContent.replace( replaceAnchorRegex, '$1' +
+ anchorID.replace( '$', '$$$' ) + '$2' );
+
+ return pageContent;
+ }
+
+ /**
+ * Convert all the links into two-party form and add the 'Special:MyLanguage/' prefix
+ * to links in valid namespaces for the wiki. For example, [[Example]] would be converted
+ * to [[Special:MyLanguage/Example|Example]].
+ *
+ * @param {string} pageContent
+ * @return {string}
+ */
+ function fixInternalLinks( pageContent ) {
+ var searchText = pageContent;
+
+ var normalizeRegex = new RegExp( /\[\[(?!Category)([^|]*?)\]\]/gi );
+ // First convert all links into two-party form. If a link is not having a pipe,
+ // add a pipe and duplicate the link text
+ // Regex: https://regex101.com/r/pO9nN2
+ pageContent = pageContent.replace( normalizeRegex, '[[$1|$1]]' );
+
+ var namespaces = getNamespaces();
+ var nsString = namespaces.join( '|' );
+ // Finds all the links to sections on the same page.
+ // Regex: https://regex101.com/r/cX6jT3
+ var sectionLinksRegex = new RegExp( /\[\[#(.*?)(\|(.*?))?\]\]/gi );
+ var match = sectionLinksRegex.exec( searchText );
+ while ( match !== null ) {
+ pageContent = addAnchor( match[ 1 ], pageContent );
+ match = sectionLinksRegex.exec( searchText );
+ }
+
+ var linkPrefixRegex = new RegExp( '\\[\\[((?:(?:special(?!:MyLanguage\\b)|' + nsString +
+ '):)?[^:]*?)\\]\\]', 'gi' );
+ // Add the 'Special:MyLanguage/' prefix for all internal links of valid namespaces and
+ // mainspace.
+ // Regex: https://regex101.com/r/zZ9jH9
+ pageContent = pageContent.replace( linkPrefixRegex, '[[Special:MyLanguage/$1]]' );
+ return pageContent;
+ }
+
+ /**
+ * Fetch all the aliases for a given namespace on the wiki.
+ *
+ * @param {number} namespaceID
+ * @return {jQuery.Promise}
+ * @return {Function} return.done
+ * @return {Array} return.done.data
+ */
+ function getNamespaceAliases( namespaceID ) {
+ var api = new mw.Api();
+
+ return api.get( {
+ action: 'query',
+ meta: 'siteinfo',
+ siprop: 'namespacealiases'
+ } ).then( function ( data ) {
+ var aliases = [];
+
+ for ( var alias in data.query.namespacealiases ) {
+ if ( data.query.namespacealiases[ alias ].id === namespaceID ) {
+ aliases.push( data.query.namespacealiases[ alias ][ '*' ] );
+ }
+ }
+
+ return aliases;
+ } );
+ }
+
+ /**
+ * Add translate tags around only translatable content for files and keep everything else
+ * as a part of the page template.
+ *
+ * @param {string} pageContent
+ * @return {jQuery.Promise}
+ */
+ function doFiles( pageContent ) {
+ return getNamespaceAliases( 6 ).then( function ( aliases ) {
+ aliases.push( 'file' );
+
+ for ( var i = 0; i < aliases.length; i++ ) {
+ aliases[ i ] = mw.RegExp.escape( aliases[ i ] );
+ }
+
+ var aliasList = aliases.join( '|' );
+
+ // Add translate tags for files with captions
+ var captionFilesRegex = new RegExp( '\\[\\[(' + aliasList + ')(.*\\|)(.*?)\\]\\]', 'gi' );
+ pageContent = pageContent.replace( captionFilesRegex,
+ '</translate>\n[[$1$2<translate>$3</translate>]]\n<translate>' );
+
+ // Add translate tags for files without captions
+ var fileRegex = new RegExp( '/\\[\\[((' + aliasList + ')[^\\|]*?)\\]\\]', 'gi' );
+ pageContent = pageContent.replace( fileRegex, '\n</translate>[[$1]]\n<translate>' );
+
+ return pageContent;
+ } );
+ }
+
+ /**
+ * Keep templates outside <translate>....</translate> tags
+ * Does not deal with nested templates, needs manual changes.
+ *
+ * @param {string} pageContent
+ * @return {string} pageContent
+ */
+ function doTemplates( pageContent ) {
+ // Regex: https://regex101.com/r/wA3iX0
+ var templateRegex = new RegExp( /^({{[\s\S]*?}})/gm );
+
+ pageContent = pageContent.replace( templateRegex, '</translate>\n$1\n<translate>' );
+ return pageContent;
+ }
+
+ /**
+ * Cleanup done after the page is prepared for translation by the tool.
+ *
+ * @param {string} pageContent
+ * @return {string}
+ */
+ function postPreparationCleanup( pageContent ) {
+ // Removes any extra newlines introduced by the tool
+ pageContent = pageContent.replace( /\n\n+/gi, '\n\n' );
+ // Removes redundant <translate> tags
+ pageContent = pageContent.replace( /\n<translate>(\n*?)<\/translate>/gi, '' );
+ // Removes the Special:MyLanguage/ prefix for section links
+ pageContent = pageContent.replace( /Special:MyLanguage\/#/gi, '#' );
+ return pageContent;
+ }
+
+ /**
+ * Get the current revision for the given page.
+ *
+ * @param {string} pageName
+ * @return {jQuery.Promise}
+ * @return {Function} return.done
+ * @return {string} return.done.value The current revision
+ */
+ function getPageContent( pageName ) {
+ var api = new mw.Api();
+
+ return api.get( {
+ action: 'query',
+ prop: 'revisions',
+ rvprop: 'content',
+ rvlimit: '1',
+ titles: pageName
+ } ).then( function ( data ) {
+ var obj;
+
+ for ( var page in data.query.pages ) {
+ obj = data.query.pages[ page ];
+ }
+
+ return obj.revisions[ 0 ][ '*' ];
+ } );
+ }
+
+ /**
+ * Get the list of valid namespaces for the wiki and remove unwanted
+ * ones from the list.
+ *
+ * @return {Array} Array of valid namespaces
+ */
+ function getNamespaces() {
+ var namespaces = [];
+
+ var namespacesObject = mw.config.get( 'wgNamespaceIds' );
+ for ( var key in namespacesObject ) {
+ namespaces.push( key );
+ }
+
+ // Remove all what has been already handled somewhere else
+ [ '', 'category', 'category_talk', 'special', 'file', 'file_talk' ].forEach( function ( ns ) {
+ namespaces.splice( namespaces.indexOf( ns ), 1 );
+ } );
+
+ for ( var i = 0; i < namespaces.length; i++ ) {
+ namespaces[ i ] = mw.RegExp.escape( namespaces[ i ] );
+ }
+ return namespaces;
+ }
+
+ $( function () {
+ var $input = $( '#page' );
+
+ $( '#action-cancel' ).on( 'click', function () {
+ document.location.reload( true );
+ } );
+
+ var pageContent;
+ $( '#action-save' ).on( 'click', function () {
+ var pageUrl = '';
+
+ var pageName = $input.val().trim();
+ savePage( pageName, pageContent ).done( function () {
+ pageUrl = mw.Title.newFromText( pageName ).getUrl( { action: 'edit' } );
+ $( '.messageDiv' )
+ .empty()
+ .append( mw.message( 'pp-save-message', pageUrl ).parseDom() )
+ .removeClass( 'hide' );
+ $( '.divDiff' ).addClass( 'hide' );
+ $( '#action-prepare' ).removeClass( 'hide' );
+ $input.val( '' );
+ $( '#action-save' ).addClass( 'hide' );
+ $( '#action-cancel' ).addClass( 'hide' );
+ } );
+ } );
+
+ $( '#action-prepare' ).on( 'click', function () {
+ var $messageDiv = $( '.messageDiv' );
+
+ var pageName = $input.val().trim();
+ $messageDiv.addClass( 'hide' );
+ if ( pageName === '' ) {
+ // eslint-disable-next-line no-alert
+ alert( mw.msg( 'pp-pagename-missing' ) );
+ return;
+ }
+
+ $.when( getPageContent( pageName ) ).done( function ( content ) {
+ pageContent = content;
+ pageContent = pageContent.trim();
+ pageContent = cleanupTags( pageContent );
+ pageContent = addLanguageBar( pageContent );
+ pageContent = addTranslateTags( pageContent );
+ pageContent = addNewLines( pageContent );
+ pageContent = fixInternalLinks( pageContent );
+ pageContent = doTemplates( pageContent );
+ doFiles( pageContent ).then( doCategories ).done( function ( preppedContent ) {
+ preppedContent = postPreparationCleanup( preppedContent );
+ preppedContent = preppedContent.trim();
+ getDiff( pageName, preppedContent ).done( function ( diff ) {
+ if ( diff === undefined ) {
+ $messageDiv.text( mw.msg( 'pp-diff-error' ) ).removeClass( 'hide' );
+ return;
+ }
+
+ $( '.diff tbody' ).append( diff );
+ $( '.divDiff' ).removeClass( 'hide' );
+ if ( diff !== '' ) {
+ $messageDiv.text( mw.msg( 'pp-prepare-message' ) ).removeClass( 'hide' );
+ $( '#action-prepare' ).addClass( 'hide' );
+ $( '#action-save' ).removeClass( 'hide' );
+ $( '#action-cancel' ).removeClass( 'hide' );
+ } else {
+ $messageDiv.text( mw.msg( 'pp-already-prepared-message' ) ).removeClass( 'hide' );
+ }
+ } );
+ } );
+ } );
+ } );
+ } );
+
+}() );
diff --git a/Translate/resources/js/ext.translate.special.pagetranslation.js b/Translate/resources/js/ext.translate.special.pagetranslation.js
new file mode 100644
index 00000000..ab0cee82
--- /dev/null
+++ b/Translate/resources/js/ext.translate.special.pagetranslation.js
@@ -0,0 +1,54 @@
+'use strict';
+/* eslint-disable no-implicit-globals */
+
+/*!
+ * @author Santhosh Thottingal
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+var LanguagesMultiselectWidget = require( './LanguagesMultiselectWidget.js' );
+
+// Needed for OOUI :(
+window.LanguagesMultiselectWidget = LanguagesMultiselectWidget;
+
+function configureLanguageInput( $form, $widget ) {
+ /** @type {LanguagesMultiselectWidget} */
+ var widget = OO.ui.infuse( $widget, { api: new mw.Api() } );
+
+ var $input = $( '<input>' ).prop( {
+ type: 'hidden',
+ name: 'prioritylangs',
+ value: widget.getValue()
+ } );
+
+ $form.prepend( $input );
+ widget.on( 'change', function () {
+ $input.val( widget.getValue() );
+ } );
+}
+
+function configurePostLinks( $container ) {
+ $container.on( 'click', '.mw-translate-jspost', function ( e ) {
+ var uri = new mw.Uri( e.target.href );
+
+ var params = uri.query;
+ params.token = mw.user.tokens.get( 'csrfToken' );
+ $.post( uri.path, params ).done( function () {
+ location.reload();
+ } );
+
+ e.preventDefault();
+ } );
+}
+
+// Init
+$( function () {
+ var $widgets = $( '#mw-translate-SpecialPageTranslation-prioritylangs' );
+
+ configurePostLinks( $( '#mw-content-text' ) );
+
+ if ( $widgets.length ) {
+ configureLanguageInput( $( '.mw-tpt-sp-markform' ), $widgets );
+ }
+} );
diff --git a/Translate/resources/js/ext.translate.special.searchtranslations.js b/Translate/resources/js/ext.translate.special.searchtranslations.js
new file mode 100644
index 00000000..2aea5b90
--- /dev/null
+++ b/Translate/resources/js/ext.translate.special.searchtranslations.js
@@ -0,0 +1,401 @@
+( function () {
+ 'use strict';
+
+ var resultGroups;
+
+ $( function () {
+ resultGroups = $( '.facet.groups' ).data( 'facets' );
+
+ $( '.tux-searchpage .mw-ui-button' ).on( 'click', function () {
+ var query = $( '.tux-searchpage .searchinputbox' ).val(),
+ result = lexOperators( query ),
+ $form = $( '.tux-searchpage form[name=searchform]' );
+
+ Object.keys( result ).forEach( function ( index ) {
+ var $input = $( '<input>' ).prop( 'type', 'hidden' ),
+ $elem = $form.find( 'input[name=' + index + ']' );
+
+ if ( $elem.length ) {
+ $elem.val( result[ index ] );
+ } else {
+ $form.append( $input
+ .prop( {
+ value: result[ index ],
+ name: index
+ } )
+ );
+ }
+ } );
+ } );
+
+ buildSelectedBox();
+ showLanguages();
+ showMessageGroups();
+
+ // Make the whole rows clickable
+ $( '.tux-searchpage .row .facet-item' ).on( 'click', function ( event ) {
+ window.location = $( this ).find( 'a' ).attr( 'href' );
+ event.stopPropagation();
+ } );
+ } );
+
+ // ES5-compatible Chrome, IE 9+, FF 4+, or Safari 5+ has Object.keys.
+ // Make other old browsers happy
+ if ( !Object.keys ) {
+ Object.keys = function ( obj ) {
+ var keys = [];
+ for ( var k in obj ) {
+ if ( Object.prototype.hasOwnProperty.call( obj, k ) ) {
+ keys.push( k );
+ }
+ }
+ return keys;
+ };
+ }
+
+ function showLanguages() {
+ var ulslanguages = [],
+ selectedClasss = '',
+ quickLanguageList = [],
+ unique = [];
+
+ var $languages = $( '.facet.languages' );
+ var languages = $languages.data( 'facets' );
+ var currentLanguage = $languages.data( 'language' );
+ if ( !languages ) {
+ return;
+ }
+
+ if ( currentLanguage !== '' ) {
+ var uri = new mw.Uri( location.href );
+ uri.extend( { language: '', filter: '' } );
+ addToSelectedBox( getLanguageLabel( currentLanguage ), uri.toString() );
+ }
+
+ var resultCount = Object.keys( languages ).length;
+ quickLanguageList = quickLanguageList.concat( mw.uls.getFrequentLanguageList() )
+ .concat( Object.keys( languages ) );
+
+ // Remove duplicates from the language list
+ quickLanguageList.forEach( function ( lang ) {
+ if ( languages[ lang ] && unique.indexOf( lang ) === -1 ) {
+ unique.push( lang );
+ }
+ } );
+
+ if ( currentLanguage && quickLanguageList.indexOf( currentLanguage ) >= 0 ) {
+ quickLanguageList = unique.splice( 0, 5 );
+ if ( quickLanguageList.indexOf( currentLanguage ) === -1 ) {
+ quickLanguageList = quickLanguageList.concat( currentLanguage );
+ }
+ } else {
+ quickLanguageList = unique.splice( 0, 6 );
+ }
+
+ quickLanguageList.sort( sortLanguages );
+
+ for ( var i = 0; i <= quickLanguageList.length; i++ ) {
+ var languageCode = quickLanguageList[ i ];
+ var result = languages[ languageCode ];
+ if ( !result ) {
+ continue;
+ }
+
+ if ( currentLanguage === languageCode ) {
+ selectedClasss = 'selected';
+ } else {
+ selectedClasss = '';
+ }
+
+ $languages.append( $( '<div>' )
+ .addClass( 'row facet-item' )
+ .append(
+ $( '<span>' )
+ // The following classes are used here:
+ // * selected
+ // * or no class
+ .addClass( 'facet-name ' + selectedClasss )
+ .append( $( '<a>' )
+ .attr( 'href', result.url )
+ .text( getLanguageLabel( languageCode ) )
+ ),
+ $( '<span>' )
+ .addClass( 'facet-count' )
+ .text( result.count )
+ )
+ );
+ }
+
+ Object.keys( languages ).forEach( function ( lang ) {
+ ulslanguages[ lang ] = mw.config.get( 'wgTranslateLanguages' )[ lang ];
+ } );
+
+ mw.translate.addExtraLanguagesToLanguageData( ulslanguages, [ 'SP' ] );
+
+ if ( resultCount > 6 ) {
+ var $ulsTrigger = $( '<a>' )
+ .text( '...' )
+ .addClass( 'translate-search-more-languages' );
+ var $count = $( '<span>' )
+ .addClass( 'translate-search-more-languages-info' )
+ .text( mw.msg( 'translate-search-more-languages-info', resultCount - quickLanguageList.length ) );
+ $languages.append( $ulsTrigger, $count );
+
+ $ulsTrigger.uls( {
+ onSelect: function ( language ) {
+ window.location = languages[ language ].url;
+ },
+ compact: true,
+ languages: ulslanguages,
+ ulsPurpose: 'translate-special-searchtranslations',
+ top: $languages.offset().top,
+ showRegions: [ 'SP' ].concat( $.fn.lcd.defaults.showRegions )
+ } );
+ }
+ }
+
+ function showMessageGroups() {
+ var $groups = $( '.facet.groups' );
+
+ if ( !resultGroups ) {
+ // No search results
+ return;
+ }
+
+ var groupList = Object.keys( resultGroups );
+ listGroups( groupList, undefined, $groups );
+ }
+
+ function listGroups( groupList, parentGrouppath, $parent, level ) {
+ var selectedClass = '',
+ maxListSize = 10,
+ currentGroup = $( '.facet.groups' ).data( 'group' ),
+ resultCount = groupList.length;
+
+ level = level || 0;
+ groupList.sort( sortGroups );
+ if ( level === 0 ) {
+ groupList = groupList.splice( 0, maxListSize );
+ }
+ var grouppath = getParameterByName( 'grouppath' ).split( '|' )[ 0 ];
+ if ( currentGroup && resultGroups[ grouppath ] &&
+ groupList.indexOf( grouppath ) < 0 &&
+ level === 0
+ ) {
+ // Make sure current selected group is displayed always.
+ groupList = groupList.concat( grouppath );
+ }
+ groupList.sort( sortGroups );
+ for ( var i = 0; i < groupList.length; i++ ) {
+ var groupId = groupList[ i ];
+ var group = findGroup( groupId, resultGroups );
+ if ( !group ) {
+ continue;
+ }
+
+ var uri = new mw.Uri( location.href );
+ if ( parentGrouppath !== undefined ) {
+ grouppath = parentGrouppath + '|' + groupId;
+ } else {
+ grouppath = groupId;
+ }
+ uri.extend( { group: groupId, grouppath: grouppath } );
+
+ if ( currentGroup === groupId ) {
+ selectedClass = 'selected';
+ uri.extend( { group: '', grouppath: '' } );
+ addToSelectedBox( group.label, uri.toString() );
+ } else {
+ selectedClass = '';
+ uri.extend( { group: groupId, grouppath: grouppath } );
+ }
+
+ var $groupRow = $( '<div>' )
+ // The following classes are used here:
+ // * facet-level-0
+ // * facet-level-1
+ // * facet-level-2
+ // * facet-level-3
+ .addClass( 'row facet-item facet-level-' + level )
+ .append(
+ $( '<span>' )
+ // Class name documented above
+ .addClass( 'facet-name ' + selectedClass )
+ .append( $( '<a>' )
+ .attr( 'href', uri.toString() )
+ .text( group.label )
+ ),
+ $( '<span>' )
+ .addClass( 'facet-count' )
+ .text( mw.language.convertNumber( group.count ) )
+ );
+ $parent.append( $groupRow );
+ if ( group.groups && level < 2 ) {
+ listGroups( Object.keys( group.groups ), grouppath, $groupRow, level + 1 );
+ }
+ }
+
+ if ( resultCount > maxListSize && resultCount - groupList.length > 0 && level === 0 ) {
+ var $grouSelectorTrigger = $( '<div>' )
+ .addClass( 'rowfacet-item ' )
+ .append(
+ $( '<a>' )
+ .text( '...' )
+ .addClass( 'translate-search-more-groups' ),
+ $( '<span>' )
+ .addClass( 'translate-search-more-groups-info' )
+ .text( mw.msg( 'translate-search-more-groups-info',
+ resultCount - groupList.length ) )
+ );
+ $parent.append( $grouSelectorTrigger );
+
+ var position;
+ if ( $( document.body ).hasClass( 'rtl' ) ) {
+ position = {
+ my: 'right top',
+ at: 'right+90 top+40',
+ collision: 'none'
+ };
+ } else {
+ position = {
+ my: 'left top',
+ at: 'left-90 top+40',
+ collision: 'none'
+ };
+ }
+ var options = {
+ language: mw.config.get( 'wgUserLanguage' ),
+ position: position,
+ onSelect: function ( selectedGroup ) {
+ var currentUri = new mw.Uri( location.href );
+ currentUri.extend( { group: selectedGroup.id, grouppath: selectedGroup.id } );
+ location.href = currentUri.toString();
+ },
+ preventSelector: true
+ };
+
+ $grouSelectorTrigger.msggroupselector(
+ options,
+ Object.keys( resultGroups )
+ );
+ }
+ }
+
+ function lexOperators( str ) {
+ var splitValues = str.split( ' ' ),
+ result = {},
+ query = '';
+
+ splitValues.forEach( function ( string ) {
+ matchOperators( string, function ( obj ) {
+ if ( obj === false ) {
+ query = query + ' ' + string;
+ } else {
+ result[ obj.operator ] = obj.value;
+ }
+ } );
+ } );
+ result.query = query.trim();
+
+ return result;
+ }
+
+ function matchOperators( str, callback ) {
+ var counter = false,
+ // Add operators for different filters
+ operatorRegex = [ 'language', 'group', 'filter' ];
+
+ operatorRegex.forEach( function ( value ) {
+ var regex = new RegExp( value + ':(\\S+)', 'i' );
+ var matches;
+ if ( ( matches = regex.exec( str ) ) !== null ) {
+ counter = true;
+ callback( {
+ operator: value,
+ value: matches[ 1 ]
+ } );
+ }
+ } );
+ if ( !counter ) {
+ callback( false );
+ }
+ }
+
+ function sortGroups( groupIdA, groupIdB ) {
+ var groupAName = findGroup( groupIdA, resultGroups ).count,
+ groupBName = findGroup( groupIdB, resultGroups ).count;
+
+ if ( groupAName > groupBName ) {
+ return -1;
+ } else if ( groupAName < groupBName ) {
+ return 1;
+ }
+
+ return 0;
+ }
+
+ /**
+ * Finds a specific group from a groups object containing nested groups.
+ *
+ * @param {string} targetGroupId
+ * @param {Object} groups
+ * @return {Object} Message group object, or null if group is not found
+ */
+ function findGroup( targetGroupId, groups ) {
+ var group = groups[ targetGroupId ], groupId;
+ if ( group ) {
+ return group;
+ }
+
+ for ( groupId in groups ) {
+ if ( groups[ groupId ].groups ) {
+ return findGroup( targetGroupId, groups[ groupId ].groups );
+ }
+ }
+
+ return null;
+ }
+
+ function sortLanguages( languageA, languageB ) {
+ var languageNameA = mw.config.get( 'wgULSLanguages' )[ languageA ] || languageA,
+ languageNameB = mw.config.get( 'wgULSLanguages' )[ languageB ] || languageB;
+
+ return languageNameA.localeCompare( languageNameB );
+ }
+
+ function getParameterByName( name ) {
+ var uri = new mw.Uri();
+ return uri.query[ name ] || '';
+ }
+
+ function getLanguageLabel( languageCode ) {
+ return mw.config.get( 'wgULSLanguages' )[ languageCode ] || languageCode;
+ }
+
+ // Build a selected box to show the selected items
+ function buildSelectedBox() {
+ $( '.tux-search-inputs' )
+ .removeClass( 'offset-by-three' )
+ .before(
+ $( '<div>' )
+ .addClass( 'three columns tux-selectedbox' )
+ );
+ }
+
+ function addToSelectedBox( label, url ) {
+ $( '.tux-searchpage .tux-selectedbox' ).append( $( '<div>' )
+ .addClass( 'row facet-item' )
+ .append(
+ $( '<span>' )
+ .addClass( 'facet-name selected' )
+ .append( $( '<a>' )
+ .attr( 'href', url )
+ .text( label )
+ ),
+ $( '<span>' )
+ .addClass( 'facet-count' )
+ .text( 'X' )
+ )
+ );
+ }
+}() );
diff --git a/Translate/resources/js/ext.translate.special.translate.js b/Translate/resources/js/ext.translate.special.translate.js
new file mode 100644
index 00000000..836e022e
--- /dev/null
+++ b/Translate/resources/js/ext.translate.special.translate.js
@@ -0,0 +1,454 @@
+( function () {
+ 'use strict';
+
+ var state, hideOptionalMessages = '!optional';
+
+ state = {
+ group: null,
+ language: null,
+ messageList: null
+ };
+
+ mw.translate = mw.translate || {};
+
+ mw.translate = $.extend( mw.translate, {
+
+ /**
+ * Change the group that is currently displayed
+ * in the TUX translation editor.
+ *
+ * @param {Object} group a message group object.
+ */
+ changeGroup: function ( group ) {
+ if ( !checkDirty() ) {
+ return;
+ }
+
+ state.group = group.id;
+
+ var changes = {
+ group: group.id,
+ showMessage: null
+
+ };
+
+ mw.translate.changeUrl( changes );
+ mw.translate.updateTabLinks( changes );
+ removeGroupWarnings();
+ state.messageList.changeSettings( changes );
+ updateGroupInformation( state );
+ },
+
+ changeLanguage: function ( language ) {
+ var changes = {
+ language: language,
+ showMessage: null
+ };
+
+ state.language = language;
+
+ mw.translate.changeUrl( changes );
+ mw.translate.updateTabLinks( changes );
+ removeGroupWarnings();
+ state.messageList.changeSettings( changes );
+ state.groupSelector.updateTargetLanguage( language );
+ updateGroupInformation( state );
+ },
+
+ changeFilter: function ( filter ) {
+ if ( !checkDirty() ) {
+ return;
+ }
+
+ mw.translate.changeUrl( { filter: filter, showMessage: null } );
+ state.messageList.changeSettings( { filter: getActualFilter( filter ) } );
+ },
+
+ changeUrl: function ( params, forceChange ) {
+ var uri = new mw.Uri( window.location.href );
+
+ uri.extend( params );
+
+ // Support removing keys from the query
+ Object.keys( params ).forEach( function ( key ) {
+ if ( params[ key ] === null ) {
+ delete uri.query[ key ];
+ }
+ } );
+
+ mw.hook( 'mw.translate.translationView.stateChange' ).fire( state );
+
+ if ( uri.toString() === window.location.href ) {
+ return;
+ }
+
+ // If supported by the browser and requested, change the URL with
+ // this URI but try not to leave the page.
+ if ( !forceChange && history.pushState && $( '.tux-messagelist' ).length ) {
+ history.pushState( uri, null, uri.toString() );
+ } else {
+ // For old browsers, just reload
+ window.location.href = uri.toString();
+ }
+ },
+
+ /**
+ * Updates the navigation tabs.
+ *
+ * @param {Object} params Url parameters to update.
+ * @since 2013.05
+ */
+ updateTabLinks: function ( params ) {
+ $( '.tux-tab a' ).each( function () {
+ var $a = $( this );
+ var uri = new mw.Uri( $a.prop( 'href' ) );
+ uri.extend( params );
+ $a.prop( 'href', uri.toString() );
+ } );
+ }
+ } );
+
+ function getActualFilter( filter ) {
+ var realFilters = [ '!ignored' ];
+ var uri = new mw.Uri( window.location.href );
+ if ( uri.query.optional !== '1' ) {
+ realFilters.push( hideOptionalMessages );
+ }
+ if ( filter ) {
+ realFilters.push( filter );
+ }
+
+ return realFilters.join( '|' );
+ }
+
+ function checkDirty() {
+ if ( mw.translate.isDirty() ) {
+ // eslint-disable-next-line no-alert
+ return confirm( mw.msg( 'translate-js-support-unsaved-warning' ) );
+ }
+ return true;
+ }
+
+ // Returns an array of jQuery objects of rows of translated
+ // and proofread messages in the TUX editors.
+ // Used several times.
+ function getTranslatedMessages( $translateContainer ) {
+ $translateContainer = $translateContainer || $( '.ext-translate-container' );
+ return $translateContainer.find( '.tux-message-item' )
+ .filter( '.translated, .proofread' );
+ }
+
+ /**
+ * Updates all group specific stuff on the page.
+ *
+ * @param {Object} stateInfo Information about current group and language.
+ * @param {string} stateInfo.group Message group id.
+ * @param {string} stateInfo.language Language.
+ */
+ function updateGroupInformation( stateInfo ) {
+ var props = 'id|priority|prioritylangs|priorityforce|description|label|sourcelanguage|class';
+
+ mw.translate.recentGroups.append( stateInfo.group );
+
+ mw.translate.getMessageGroup( stateInfo.group, props ).done( function ( group ) {
+ updateDescription( group );
+ updateGroupPriorityWarnings( group, stateInfo.language );
+ } );
+ }
+
+ function updateDescription( group ) {
+ var
+ api = new mw.Api(),
+ $description = $( '.tux-editor-header .description' );
+
+ if ( group.description === null ) {
+ $description.empty();
+ return;
+ }
+ var description = group.description;
+ if (
+ group.class === 'WikiPageMessageGroup' &&
+ group.sourcelanguage !== state.language &&
+ // Message documentation does not have a translation page
+ state.language !== mw.config.get( 'wgTranslateDocumentationLanguageCode' )
+ ) {
+ description = mw.msg(
+ 'translate-tag-page-wikipage-desc',
+ ':' + group.label + '/' + state.language,
+ ':' + group.label,
+ $.uls.data.getAutonym( group.sourcelanguage ),
+ group.sourcelanguage,
+ $.uls.data.getAutonym( state.language ),
+ state.language );
+ }
+
+ api.parse( description ).done( function ( parsedDescription ) {
+ // The parsed text is returned in a <p> tag,
+ // so it's removed here.
+ $description.html( parsedDescription );
+ } ).fail( function () {
+ $description.empty();
+ mw.log( 'Error parsing description for group ' + group.id );
+ } );
+ }
+
+ function updateGroupPriorityWarnings( group, language ) {
+ var $groupWarning = $( '.tux-editor-header .tux-group-warning' );
+
+ if ( group.priority === 'discouraged' ) {
+ $groupWarning.append(
+ $( '<p>' ).append( $( '<strong>' )
+ .text( mw.message( 'tpt-discouraged-translation-header' ).text() )
+ ),
+ $( '<p>' ).append( mw.message( 'tpt-discouraged-translation-content' ).parseDom() )
+ );
+ return;
+ }
+
+ if ( !group.prioritylangs || isPriorityLanguage( language, group.prioritylangs ) ) {
+ return;
+ }
+
+ // Make a comma-separated list of preferred languages
+ var $preferredLanguages = $( '<span>' );
+ group.prioritylangs.forEach( function ( languageCode, index ) {
+ // bidi isolation for language names
+ $preferredLanguages.append(
+ $( '<bdi>' ).text( $.uls.data.getAutonym( languageCode ) )
+ );
+
+ // Add comma between languages
+ if ( index + 1 !== group.prioritylangs.length ) {
+ $preferredLanguages.append( ', ' );
+ }
+ } );
+
+ var headerMessage, languagesMessage;
+ if ( group.priorityforce ) {
+ headerMessage = mw.message(
+ 'tpt-discouraged-language-force-header',
+ $.uls.data.getAutonym( language )
+ );
+ languagesMessage = mw.message(
+ 'tpt-discouraged-language-force-content',
+ $preferredLanguages
+ );
+ } else {
+ headerMessage = mw.message(
+ 'tpt-discouraged-language-header',
+ $.uls.data.getAutonym( language )
+ );
+ languagesMessage = mw.message(
+ 'tpt-discouraged-language-content',
+ $preferredLanguages
+ );
+ }
+
+ $groupWarning.append(
+ $( '<p>' ).append( $( '<strong>' ).text( headerMessage.text() ) ),
+ $( '<p>' ).append( languagesMessage.parseDom() )
+ );
+ }
+
+ function removeGroupWarnings() {
+ var $tuxHeader = $( '.tux-editor-header' );
+ $tuxHeader.find( '.tux-group-warning' ).empty();
+ }
+
+ function isPriorityLanguage( language, priorityLanguages ) {
+ // Don't show priority notice if the language is message documentation.
+ if ( language === mw.config.get( 'wgTranslateDocumentationLanguageCode' ) ) {
+ return true;
+ }
+
+ // If no priority language is set, return early.
+ if ( !priorityLanguages ) {
+ return true;
+ }
+
+ if ( priorityLanguages.indexOf( language ) !== -1 ) {
+ return true;
+ }
+
+ return false;
+ }
+
+ function setupLanguageSelector( $element ) {
+ var ulsOptions = {
+ languages: mw.config.get( 'wgTranslateLanguages' ),
+ showRegions: [ 'SP' ].concat( $.fn.lcd.defaults.showRegions ),
+ onSelect: function ( languageCode ) {
+ var languageDetails = mw.translate.getLanguageDetailsForHtml( languageCode );
+ mw.translate.changeLanguage( languageCode );
+ $element
+ .find( '.ext-translate-target-language' )
+ .text( languageDetails.autonym )
+ .prop( {
+ lang: languageDetails.code,
+ dir: languageDetails.direction
+ } );
+ },
+ ulsPurpose: 'translate-special-translate',
+ quickList: function () {
+ return mw.uls.getFrequentLanguageList();
+ }
+ };
+
+ mw.translate.addExtraLanguagesToLanguageData( ulsOptions.languages, [ 'SP' ] );
+ $element.uls( ulsOptions );
+ }
+
+ $( function () {
+ var $messageList = $( '.tux-messagelist' );
+ state.group = $( '.tux-messagetable-loader' ).data( 'messagegroup' );
+ state.language = $messageList.data( 'targetlangcode' );
+
+ if ( $messageList.length ) {
+ $messageList.messagetable();
+ state.messageList = $messageList.data( 'messagetable' );
+
+ var uri = new mw.Uri( window.location.href );
+ var filter = uri.query.filter;
+ var offset = uri.query.showMessage;
+ var limit;
+ if ( offset ) {
+ limit = uri.query.limit || 1;
+ // Default to no filters
+ filter = filter || '';
+ }
+
+ if ( filter === undefined ) {
+ filter = '!translated';
+ }
+
+ $( '.tux-message-selector li' ).each( function () {
+ var $this = $( this );
+
+ if ( $this.data( 'filter' ) === filter ) {
+ $this.addClass( 'selected' );
+ }
+ } );
+
+ mw.translate.changeUrl( {
+ group: state.group,
+ language: state.language,
+ filter: filter,
+ showMessage: offset,
+ optional: offset ? 1 : undefined
+ } );
+
+ // Start loading messages
+ var actualFilter = getActualFilter( filter );
+ state.messageList.changeSettings( {
+ group: state.group,
+ language: state.language,
+ offset: offset,
+ limit: limit,
+ filter: actualFilter
+ } );
+
+ if ( actualFilter.indexOf( hideOptionalMessages ) === -1 ) {
+ $( '#tux-option-optional' ).prop( 'checked', true );
+ }
+ }
+
+ var position;
+ if ( $( document.body ).hasClass( 'rtl' ) ) {
+ position = {
+ my: 'right top',
+ at: 'right+80 bottom+5'
+ };
+ }
+ $( '.tux-breadcrumb__item--aggregate' ).msggroupselector( {
+ onSelect: mw.translate.changeGroup,
+ language: state.language,
+ position: position,
+ recent: mw.translate.recentGroups.get()
+ } );
+ state.groupSelector = $( '.tux-breadcrumb__item--aggregate' ).data( 'msggroupselector' );
+
+ updateGroupInformation( state );
+
+ $( '.ext-translate-language-selector .uls' ).one( 'click', function () {
+ var $target = $( this );
+ mw.loader.using( 'ext.uls.mediawiki' ).done( function () {
+ setupLanguageSelector( $target );
+ $target.trigger( 'click' );
+ } );
+ } ).on( 'keypress', function () {
+ $( this ).trigger( 'click' );
+ } );
+
+ if ( $.fn.translateeditor ) {
+ // New translation editor
+ $( '.tux-message' ).translateeditor();
+ }
+
+ var $translateContainer = $( '.ext-translate-container' );
+
+ if ( mw.translate.canProofread() ) {
+ $translateContainer.find( '.proofread-mode-button' ).removeClass( 'hide' );
+ }
+
+ var $hideTranslatedButton = $translateContainer.find( '.tux-editor-clear-translated' );
+ $hideTranslatedButton
+ .prop( 'disabled', !getTranslatedMessages( $translateContainer ).length )
+ .on( 'click', function () {
+ getTranslatedMessages( $translateContainer ).remove();
+ $( this ).prop( 'disabled', true );
+ } );
+
+ // Message filter click handler
+ $translateContainer.find( '.row.tux-message-selector > li' ).on( 'click', function () {
+ var $this = $( this );
+
+ if ( $this.hasClass( 'more' ) ) {
+ return false;
+ }
+
+ var newFilter = $this.data( 'filter' );
+
+ // Remove the 'selected' class from all the items.
+ // Some of them could have been moved to under the "more" menu,
+ // so everything under .row.tux-message-selector is searched.
+ $translateContainer.find( '.row.tux-message-selector .selected' )
+ .removeClass( 'selected' );
+ mw.translate.changeFilter( newFilter );
+ $this.addClass( 'selected' );
+
+ // TODO: this could should be in messagetable
+ if ( newFilter === '!translated' ) {
+ $hideTranslatedButton
+ .removeClass( 'hide' )
+ .prop( 'disabled', !getTranslatedMessages( $translateContainer ).length );
+ } else {
+ $hideTranslatedButton.addClass( 'hide' );
+ }
+
+ return false;
+ } );
+
+ // TODO: this could should be in messagetable
+ if ( $( '.tux-messagetable-loader' ).data( 'filter' ) === '!translated' ) {
+ $hideTranslatedButton.removeClass( 'hide' );
+ } else {
+ $hideTranslatedButton.addClass( 'hide' );
+ }
+
+ // Don't let clicking the items in the "more" menu
+ // affect the rest of it.
+ $( '.row.tux-message-selector .more ul' )
+ .on( 'click', function ( e ) {
+ e.stopPropagation();
+ } );
+
+ $( '#tux-option-optional' ).on( 'change', function () {
+ var currentUri = new mw.Uri( window.location.href ),
+ checked = $( this ).prop( 'checked' );
+
+ mw.translate.changeUrl( { optional: checked ? 1 : 0 } );
+ mw.translate.changeFilter( currentUri.query.filter );
+ } );
+ } );
+
+}() );
diff --git a/Translate/resources/js/ext.translate.special.translationstats.js b/Translate/resources/js/ext.translate.special.translationstats.js
new file mode 100644
index 00000000..108d71fc
--- /dev/null
+++ b/Translate/resources/js/ext.translate.special.translationstats.js
@@ -0,0 +1,127 @@
+'use strict';
+/* eslint-disable no-implicit-globals */
+
+/*!
+ * Display translation stats via a form.
+ * @author Amir E. Aharoni
+ * @author Siebrand Mazeland
+ * @author Niklas Laxström
+ * @copyright Copyright © 2012-2013 Amir E. Aharoni, Siebrand Mazeland
+ * @license GPL-2.0-or-later
+ */
+var FormHandler = function () {
+ var $form = $( '#translationStatsConfig' ),
+ onFilter = null;
+
+ function getHeight() {
+ return parseInt( $form.find( 'input[name="height"]' ).val(), 10 );
+ }
+
+ function getWidth() {
+ return parseInt( $form.find( 'input[name="width"]' ).val(), 10 );
+ }
+
+ function getLanguages() {
+ var languages = $form.find( 'input[name="language"]' ).val().trim();
+
+ if ( languages.length > 0 ) {
+ return getSplitValues( languages );
+ }
+
+ return [];
+ }
+
+ function getGroups() {
+ var groups = $form.find( 'input[name="group"]' ).val().trim();
+
+ if ( groups.length > 0 ) {
+ return getSplitValues( groups );
+ }
+
+ return [];
+ }
+
+ function getGranularity() {
+ return $form.find( 'input[name="scale"]:checked' ).val().trim();
+ }
+
+ function getMeasure() {
+ return $form.find( 'input[name="count"]:checked' ).val().trim();
+ }
+
+ function getDays() {
+ return parseInt( $form.find( 'input[name="days"]' ).val(), 10 );
+ }
+
+ function getStart() {
+ return $form.find( '#start' ).val();
+ }
+
+ function getAllOptions() {
+ return {
+ measure: getMeasure(),
+ days: getDays(),
+ start: getStart(),
+ granularity: getGranularity(),
+ group: getGroups(),
+ language: getLanguages(),
+ height: getHeight(),
+ width: getWidth()
+ };
+ }
+
+ function getSplitValues( values ) {
+ return values.split( ',' ).map( function ( value ) {
+ return value.trim();
+ } );
+ }
+
+ function filter() {
+ if ( !this.onFilter ) {
+ return;
+ }
+
+ this.onFilter( this.getAllOptions() );
+ }
+
+ return {
+ onFilter: onFilter,
+ filter: filter,
+ getAllOptions: getAllOptions
+ };
+};
+
+$( function () {
+ var $input = $( '#start' ),
+ formHandler = new FormHandler(),
+ $graphContainer = $( '#translationStatsGraphContainer' );
+
+ var defaultDate = new Date();
+ defaultDate.setDate( 1 );
+
+ var defaultValue;
+ if ( $input.val() ) {
+ defaultValue = new Date( $input.val() );
+ }
+
+ var widget = new mw.widgets.datetime.DateTimeInputWidget( {
+ formatter: {
+ format: '${year|0}-${month|0}-${day|0}',
+ defaultDate: defaultDate
+ },
+ type: 'date',
+ value: defaultValue,
+ max: new Date()
+ } );
+
+ $input.after( widget.$element ).addClass( 'mw-translate-translationstats-hide' );
+ widget.on( 'change', function ( data ) {
+ $input.val( data + 'T00:00:00' );
+ } );
+
+ // Check if the graph container has been loaded
+ if ( $graphContainer.length !== 0 ) {
+ var graphBuilder = new mw.translate.TranslationStatsGraphBuilder( $graphContainer );
+ graphBuilder.display( formHandler.getAllOptions() );
+ }
+} );
diff --git a/Translate/resources/js/ext.translate.statsbar.js b/Translate/resources/js/ext.translate.statsbar.js
new file mode 100644
index 00000000..71691e7f
--- /dev/null
+++ b/Translate/resources/js/ext.translate.statsbar.js
@@ -0,0 +1,187 @@
+/*!
+ * Translate language statistics bar - jQuery plugin.
+ *
+ * @author Niklas Laxström
+ * @author Santhosh Thottingal
+ * @license GPL-2.0-or-later
+ * @since 2012-11-30
+ */
+
+/*
+ * Usage:
+ * $( '<div>' ).languagestatsbar( {
+ * language: 'fi',
+ * group: 'core'
+ * } );
+ * The status bar will be rendered to the newly created div. Or use any container.
+ */
+( function () {
+ 'use strict';
+
+ var LanguageStatsBar = function ( container, options ) {
+ this.$container = $( container );
+ this.group = options.group;
+ this.language = options.language;
+ this.onlyLoadCurrentGroupData = options.onlyLoadCurrentGroupData;
+ this.$statsBar = null;
+ this.elements = null;
+ this.init();
+ };
+
+ LanguageStatsBar.prototype = {
+ init: function () {
+ this.loadStats().done( this.render.bind( this ) );
+ },
+
+ /**
+ * Listen for the change events and update the statsbar
+ */
+ listen: function () {
+ var statsbar = this;
+ statsbar.$statsBar.on( 'change', function ( event, to, from ) {
+ // This updates the value in mw.translate.languagestats as a reference to
+ // the object is returned here.
+ var groupLanguageStats = statsbar.getGroupStatsWithFallback();
+ // Changing a proofread message does not create a new translation
+ if ( to === 'translated' && from !== 'proofread' ) {
+ groupLanguageStats.translated++;
+ }
+ if ( to === 'proofread' ) {
+ groupLanguageStats.proofread++;
+ }
+ if ( to === 'fuzzy' ) {
+ groupLanguageStats.fuzzy++;
+ }
+
+ if ( from === 'fuzzy' ) {
+ groupLanguageStats.fuzzy--;
+ }
+ if ( from === 'proofread' ) {
+ groupLanguageStats.proofread--;
+ }
+ // Proofreading a message does not remove translation
+ if ( from === 'translated' && to !== 'proofread' ) {
+ groupLanguageStats.translated--;
+ }
+
+ // Update the stats bar
+ statsbar.update();
+ } );
+
+ statsbar.$container.on( {
+ mouseenter: function () {
+ statsbar.elements.$info.removeClass( 'hide' );
+ },
+ mouseleave: function () {
+ statsbar.elements.$info.addClass( 'hide' );
+ }
+ } );
+ },
+
+ render: function () {
+ this.$statsBar = $( '<div>' )
+ .addClass( 'tux-statsbar' )
+ .data( 'group', this.group );
+
+ this.elements = {
+ $proofread: $( '<span>' ).addClass( 'tux-proofread' ),
+ $translated: $( '<span>' ).addClass( 'tux-translated' ),
+ $fuzzy: $( '<span>' ).addClass( 'tux-fuzzy' ),
+ $untranslated: $( '<span>' ).addClass( 'tux-untranslated' ),
+ $info: $( '<div>' ).addClass( 'tux-statsbar-info hide' )
+ };
+
+ this.update();
+ this.$statsBar.append( [
+ // Append needs an array instead of an object
+ this.elements.$proofread,
+ this.elements.$translated,
+ this.elements.$fuzzy,
+ this.elements.$untranslated,
+ this.elements.$info
+ ] );
+ this.$container.append( this.$statsBar );
+
+ this.listen();
+ },
+
+ update: function () {
+ var stats = this.getGroupStatsWithFallback();
+
+ var proofread = 100 * stats.proofread / stats.total;
+ // Proofread messages are also translated, so remove those for
+ // the bar showing only translated count.
+ var translated = stats.translated - stats.proofread;
+ translated = 100 * translated / stats.total;
+ var fuzzy = 100 * stats.fuzzy / stats.total;
+ var untranslated = 100 - proofread - translated - fuzzy;
+
+ this.elements.$proofread[ 0 ].style.width = proofread + '%';
+ this.elements.$translated[ 0 ].style.width = translated + '%';
+ this.elements.$fuzzy[ 0 ].style.width = fuzzy + '%';
+ this.elements.$untranslated[ 0 ].style.width = untranslated + '%';
+
+ translated = !translated ? 0 : translated + proofread;
+ proofread = !proofread ? 0 : proofread;
+
+ if ( fuzzy ) {
+ this.elements.$info
+ .text( mw.msg( 'translate-statsbar-tooltip-with-fuzzy',
+ translated.toFixed(), proofread.toFixed(),
+ fuzzy.toFixed() ) );
+ } else {
+ this.elements.$info
+ .text( mw.msg( 'translate-statsbar-tooltip',
+ translated.toFixed(), proofread.toFixed() ) );
+ }
+ },
+
+ getGroupStatsWithFallback: function () {
+ var statsData = mw.translate.languagestats[ this.language ] || [];
+ for ( var i = 0; i < statsData.length; i++ ) {
+ if ( statsData[ i ].group === this.group ) {
+ return statsData[ i ];
+ }
+ }
+
+ return this.getEmptyStats();
+ },
+
+ loadStats: function () {
+ if ( this.onlyLoadCurrentGroupData ) {
+ return mw.translate.loadMessageGroupStatsForItem( this.language, this.group );
+ } else {
+ return mw.translate.loadMessageGroupStatsForLanguage( this.language );
+ }
+ },
+
+ getEmptyStats: function () {
+ return {
+ proofread: 0,
+ total: 0,
+ fuzzy: 0,
+ translated: 0
+ };
+ }
+ };
+
+ /*
+ * languagestatsbar PLUGIN DEFINITION
+ */
+
+ $.fn.languagestatsbar = function ( options ) {
+ return this.each( function () {
+ var $this = $( this ),
+ data = $this.data( 'languagestatsbar' );
+
+ if ( !data ) {
+ $this.data( 'languagestatsbar', new LanguageStatsBar( this, options ) );
+ }
+ } );
+ };
+
+ $.fn.languagestatsbar.Constructor = LanguageStatsBar;
+
+ mw.translate = mw.translate || {};
+
+}() );
diff --git a/Translate/resources/js/ext.translate.storage.js b/Translate/resources/js/ext.translate.storage.js
new file mode 100644
index 00000000..85e9cb9e
--- /dev/null
+++ b/Translate/resources/js/ext.translate.storage.js
@@ -0,0 +1,42 @@
+( function () {
+ 'use strict';
+
+ /**
+ * This class can save a translation into MediaWiki pages using the
+ * MediaWiki edit WebApi.
+ *
+ * @since 2013.10
+ */
+ var TranslationApiStorage = function () {
+ // No-op for now. Could take api module as param for example.
+ };
+
+ TranslationApiStorage.prototype = {
+ /**
+ * Save the translation.
+ *
+ * @param {string} title The title of the page including language code
+ * to store the translation.
+ * @param {string} translation The translation of the message
+ * @param {string} editSummary The edit summary
+ * @return {jQuery.Promise}
+ */
+ save: function ( title, translation, editSummary ) {
+ var api = new mw.Api();
+
+ return api.postWithToken( 'csrf', {
+ action: 'edit',
+ title: title,
+ text: translation,
+ summary: editSummary,
+ // If the session expires, fail the saving instead of saving it
+ // as an anonymous user (if anonymous can save).
+ // When undefined, the parameter is not included in the request
+ assert: mw.user.isAnon() ? undefined : 'user'
+ } );
+ }
+ };
+
+ mw.translate = mw.translate || {};
+ mw.translate.TranslationApiStorage = TranslationApiStorage;
+}() );
diff --git a/Translate/resources/js/ext.translate.translationstats.embedded.js b/Translate/resources/js/ext.translate.translationstats.embedded.js
new file mode 100644
index 00000000..ca12fe16
--- /dev/null
+++ b/Translate/resources/js/ext.translate.translationstats.embedded.js
@@ -0,0 +1,83 @@
+'use strict';
+/* eslint-disable no-implicit-globals */
+
+/*!
+ * Used to embed translation stats graph on other pages.
+ * @license GPL-2.0-or-later
+ */
+var EmbeddedHandler = function ( $graphContainer ) {
+ var graphOptions = JSON.parse(
+ $graphContainer.find( '[name="translationStatsGraphOptions"]' ).val()
+ );
+
+ function getHeight() {
+ return parseInt( graphOptions.height, 10 );
+ }
+
+ function getWidth() {
+ return parseInt( graphOptions.width, 10 );
+ }
+
+ function getAllOptions() {
+ return {
+ measure: graphOptions.count,
+ days: graphOptions.days,
+ start: graphOptions.start,
+ granularity: graphOptions.scale,
+ group: graphOptions.group,
+ language: graphOptions.language,
+ height: getHeight(),
+ width: getWidth()
+ };
+ }
+
+ return {
+ getAllOptions: getAllOptions
+ };
+};
+
+$( function () {
+ var $graphContainers = $( '.mw-translate-translationstats-container' ),
+ currentGraph = 0,
+ graphInstances = [];
+
+ function loadGraph() {
+ var currentGraphBuilder = graphInstances[ currentGraph ].graphBuilder,
+ currentOptions = graphInstances[ currentGraph ].options.getAllOptions();
+
+ currentGraphBuilder
+ .display( currentOptions )
+ .always( function () {
+ ++currentGraph;
+ if ( currentGraph < graphInstances.length ) {
+ loadGraph();
+ }
+ } );
+ }
+
+ // Create graph and options instances, then display loader
+ function initGraph( $graphContainer ) {
+ var graphOptions = new EmbeddedHandler( $graphContainer );
+ var graphBuilder = new mw.translate.TranslationStatsGraphBuilder(
+ $graphContainer, graphOptions.getAllOptions()
+ );
+ graphBuilder.showLoading();
+
+ return {
+ graphBuilder: graphBuilder,
+ options: graphOptions
+ };
+ }
+
+ for ( ;currentGraph < $graphContainers.length; ++currentGraph ) {
+ graphInstances.push(
+ initGraph( $graphContainers.eq( currentGraph ) )
+ );
+ }
+
+ currentGraph = 0;
+ setTimeout( function () {
+ // Give time to display the loaders.
+ loadGraph();
+ } );
+} );
diff --git a/Translate/resources/js/ext.translate.translationstats.graphbuilder.js b/Translate/resources/js/ext.translate.translationstats.graphbuilder.js
new file mode 100644
index 00000000..c81a4c56
--- /dev/null
+++ b/Translate/resources/js/ext.translate.translationstats.graphbuilder.js
@@ -0,0 +1,345 @@
+/*!
+ * Graph component to display translation stats using ChartJS
+ * @license GPL-2.0-or-later
+ */
+
+( function () {
+ 'use strict';
+ var graphInfo = {
+ edits: mw.msg( 'translate-statsf-count-edits' ),
+ users: mw.msg( 'translate-statsf-count-users' ),
+ registrations: mw.msg( 'translate-statsf-count-registrations' ),
+ reviews: mw.msg( 'translate-statsf-count-reviews' ),
+ reviewers: mw.msg( 'translate-statsf-count-reviewers' )
+ }, granularityInfo = {
+ years: mw.msg( 'translate-statsf-scale-years' ),
+ months: mw.msg( 'translate-statsf-scale-months' ),
+ weeks: mw.msg( 'translate-statsf-scale-weeks' ),
+ days: mw.msg( 'translate-statsf-scale-days' ),
+ hours: mw.msg( 'translate-statsf-scale-hours' )
+ }, graphColors = [
+ 'skyblue', 'green', 'orange', 'blue', 'red', 'darkgreen', 'purple', 'peru',
+ 'cyan', 'salmon', 'slateblue', 'yellowgreen', 'magenta', 'aquamarine', 'gold', 'violet'
+ ],
+ GraphBuilder;
+
+ /**
+ * Used to display translation stats graph. Each instance of this class manages one
+ * instance of the graph.
+ *
+ * @param {Object} $graphContainer The title of the page including language code
+ * to store the translation.
+ * @param {Object} graphOptions Graph options, current only processes the width and height.
+ * @return {Object} Instance of the graph builder
+ */
+ GraphBuilder = function ( $graphContainer, graphOptions ) {
+ var $graphElement = $( '<canvas>' )
+ .attr( 'class', 'mw-translate-translationstats-graph' )
+ .attr( 'role', 'img' )
+ .attr( 'tabindex', 0 )
+ .text( mw.msg( 'translate-statsf-graph-alt-text-info' ) ),
+ $graphWrapper = $( '<div>' )
+ .attr( 'class', 'mw-translationstats-graph-container' ),
+ $loadingElement = $( '<div>' )
+ .attr( 'class', 'mw-translate-loading-spinner' ),
+ $errorElement = $( '<div>' )
+ .attr( 'class', 'mw-translate-error-container' ),
+ $tableElement = $( '<table>' )
+ .addClass( 'wikitable mw-translate-translationstats-table' )
+ .attr( 'tabindex', 0 )
+ .attr(
+ 'summary', mw.msg( 'translate-statsf-alt-text' )
+ ),
+ lineChart;
+
+ $graphWrapper
+ .width( graphOptions && graphOptions.width )
+ .height( graphOptions && graphOptions.height );
+
+ // Set the container height and width if passed.
+ $graphContainer.append( [
+ $graphWrapper,
+ $loadingElement,
+ $errorElement
+ ] );
+
+ $graphWrapper.append( $graphElement );
+
+ function display( options ) {
+ if ( lineChart ) {
+ cleanup();
+ }
+
+ // Set the appropriate height and width and display the loader.
+ $graphWrapper
+ .width( options.width )
+ .height( options.height );
+
+ showLoading();
+
+ return getData( options ).then( function ( graphData ) {
+ // Hide the loader before displaying the data.
+ showData( graphData, options );
+ } ).fail( function ( errorCode, results ) {
+ var errorInfo = results && results.error ? results.error.info :
+ mw.msg( 'translate-statsf-unknown-error' );
+ displayError( mw.msg( 'translate-statsf-error-message', errorInfo ) );
+ } ).always( function () {
+ hideLoading();
+ } );
+ }
+
+ function showData( apiResponse, options ) {
+ var graphData = getAxesLabelsAndData( apiResponse.data ),
+ graphDatasets = [],
+ datasetLabels = apiResponse.labels;
+
+ if ( graphData.data.length ) {
+ graphData.data.forEach( function ( dataset, datasetIndex ) {
+ var graphDataset = {
+ data: dataset,
+ fill: false,
+ borderColor: getLineColor( datasetIndex )
+ };
+
+ if ( datasetLabels[ datasetIndex ] ) {
+ graphDataset.label = datasetLabels[ datasetIndex ];
+ }
+
+ graphDatasets.push( graphDataset );
+ } );
+ }
+
+ lineChart = new Chart( $graphElement, {
+ type: 'line',
+ data: {
+ labels: graphData.axesLabels,
+ datasets: graphDatasets
+ },
+ options: {
+ maintainAspectRatio: false,
+ legend: {
+ display: datasetLabels.length !== 0
+ },
+ scales: {
+ yAxes: [ {
+ scaleLabel: {
+ display: true,
+ labelString: getXAxesLabel( options.measure )
+ },
+ ticks: {
+ beginAtZero: true,
+ precision: 0,
+ callback: function ( value ) {
+ return mw.language.convertNumber( Number( value ) );
+ }
+ }
+ } ],
+ xAxes: [ {
+ scaleLabel: {
+ display: true,
+ labelString: getYAxesLabel( options.granularity )
+ },
+ ticks: {
+ maxTicksLimit: 15
+ },
+ gridLines: {
+ display: false
+ }
+ } ]
+ },
+ tooltips: {
+ callbacks: {
+ label: function ( tooltipItem, data ) {
+ var convertedValue = mw.language.convertNumber( Number( tooltipItem.yLabel ) ),
+ label = data.datasets[ tooltipItem.datasetIndex ].label;
+
+ if ( label ) {
+ return label + ': ' + convertedValue;
+ }
+
+ return convertedValue;
+ }
+ }
+ }
+ }
+ } );
+
+ // Generate table inside the canvas element to improve accessibility.
+ showTable( graphData, datasetLabels, options );
+ }
+
+ function getAxesLabelsAndData( jsonGraphData ) {
+ var labels = [], graphData = [],
+ labelIndex = 0,
+ maxValue = 0, minValue = 0;
+
+ for ( var labelProp in jsonGraphData ) {
+ if ( labels.indexOf( labelProp ) === -1 ) {
+ labels.push( labelProp );
+ }
+
+ var labelData = jsonGraphData[ labelProp ];
+
+ for ( var i = 0; i < labelData.length; ++i ) {
+ if ( !graphData[ i ] ) {
+ graphData[ i ] = [];
+ }
+
+ var currentValue = labelData[ i ];
+ graphData[ i ][ labelIndex ] = currentValue;
+ if ( currentValue < minValue ) {
+ minValue = currentValue;
+ }
+
+ if ( currentValue > maxValue ) {
+ maxValue = currentValue;
+ }
+ }
+
+ ++labelIndex;
+ }
+
+ return {
+ axesLabels: labels,
+ data: graphData,
+ max: maxValue,
+ min: minValue
+ };
+ }
+
+ function getXAxesLabel( measure ) {
+ return graphInfo[ measure ];
+ }
+
+ function getYAxesLabel( granularity ) {
+ return granularityInfo[ granularity ];
+ }
+
+ function getData( filterOptions ) {
+ var api = new mw.Api(),
+ apiParams = {
+ action: 'translationstats',
+ count: filterOptions.measure,
+ days: filterOptions.days,
+ start: filterOptions.start || null,
+ scale: filterOptions.granularity,
+ group: filterOptions.group,
+ language: filterOptions.language,
+ formatversion: 2
+ };
+
+ // Remove null or empty array from request object
+ Object.keys( apiParams ).forEach( function ( apiParamKey ) {
+ var apiParamValue = apiParams[ apiParamKey ];
+ if (
+ apiParamValue === null ||
+ ( Array.isArray( apiParamValue ) && apiParamValue.length === 0 )
+ ) {
+ delete apiParams[ apiParamKey ];
+ }
+ } );
+
+ return api.get( apiParams ).then( function ( result ) {
+ return result.translationstats;
+ } );
+ }
+
+ function getLineColor( index ) {
+ var colorIndex = index % graphColors.length,
+ colorName = graphColors[ colorIndex ];
+ return colorName;
+ }
+
+ function displayError( errorMessage ) {
+ $errorElement.text( errorMessage );
+ $graphContainer.addClass( 'mw-translate-has-error' )
+ .height( 'auto' );
+ }
+
+ function showLoading() {
+ // show loading, and hide error messages.
+ $graphContainer.addClass( 'mw-translate-loading' )
+ .removeClass( 'mw-translate-has-error' );
+ }
+
+ function hideLoading() {
+ $graphContainer.removeClass( 'mw-translate-loading' );
+ }
+
+ function showTable( graphData, datasetLabels, options ) {
+ $tableElement
+ .append(
+ $( '<caption>' ).text( getGraphSummary( options ) )
+ )
+ .append( getTableHead( datasetLabels, options ) )
+ .append( getTableBody( graphData ) );
+
+ $graphContainer.append( $tableElement );
+ }
+
+ function getTableHead( datasetLabels, options ) {
+ var $tableHead = $( '<thead>' ),
+ $tableHeadRow = $( '<tr>' ),
+ i = 0;
+
+ $tableHeadRow.append( $( '<th>' ).text( getYAxesLabel( options.granularity ) ) );
+
+ if ( datasetLabels && datasetLabels.length ) {
+ for ( ; i < datasetLabels.length; ++i ) {
+ $tableHeadRow.append( $( '<th>' ).text( datasetLabels[ i ] ) );
+ }
+ } else {
+ $tableHeadRow.append( $( '<th>' ).text( getXAxesLabel( options.measure ) ) );
+ }
+
+ return $tableHead.append( $tableHeadRow );
+ }
+
+ function getTableBody( graphData ) {
+ var $tbody = $( '<tbody>' );
+
+ for ( var scaleIndex = 0; scaleIndex < graphData.axesLabels.length; scaleIndex++ ) {
+ var $tBodyRow = $( '<tr>' )
+ .append( $( '<td>' ).text( graphData.axesLabels[ scaleIndex ] ) );
+
+ for ( var datasetIndex = 0; datasetIndex < graphData.data.length; datasetIndex++ ) {
+ var columnValue = '';
+ if (
+ graphData.data[ datasetIndex ] &&
+ graphData.data[ datasetIndex ][ scaleIndex ] !== undefined
+ ) {
+ columnValue =
+ mw.language.convertNumber(
+ Number( graphData.data[ datasetIndex ][ scaleIndex ] )
+ );
+ }
+ $tBodyRow.append( $( '<td>' ).text( columnValue ) );
+ }
+
+ $tbody.append( $tBodyRow );
+ }
+
+ return $tbody;
+ }
+
+ function cleanup() {
+ lineChart.destroy();
+ $tableElement.remove();
+ }
+
+ function getGraphSummary( options ) {
+ return getXAxesLabel( options.measure ) + ' / ' +
+ getYAxesLabel( options.granularity );
+ }
+
+ return {
+ display: display,
+ showLoading: showLoading,
+ hideLoading: hideLoading
+ };
+ };
+
+ mw.translate = mw.translate || {};
+ mw.translate.TranslationStatsGraphBuilder = mw.translate.TranslationStatsGraphBuilder || GraphBuilder;
+}() );
diff --git a/Translate/resources/js/ext.translate.workflowselector.js b/Translate/resources/js/ext.translate.workflowselector.js
new file mode 100644
index 00000000..736bcf5d
--- /dev/null
+++ b/Translate/resources/js/ext.translate.workflowselector.js
@@ -0,0 +1,164 @@
+/*!
+ * A jQuery plugin which handles the display and change of message group
+ * workflow states.
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+( function () {
+ 'use strict';
+
+ function WorkflowSelector( container ) {
+ this.$container = $( container );
+
+ // Hide the workflow selector when clicking outside of it
+ $( document.documentElement ).on( 'click', function ( e ) {
+ if ( !e.isDefaultPrevented() ) {
+ $( container )
+ .find( '.tux-workflow-status-selector' )
+ .addClass( 'hide' );
+ }
+ } );
+ }
+
+ WorkflowSelector.prototype = {
+ /**
+ * Displays the current state and selector if relevant.
+ *
+ * @param {string} groupId
+ * @param {string} language
+ * @param {string} state
+ */
+ receiveState: function ( groupId, language, state ) {
+ var instance = this;
+
+ instance.currentState = state;
+ instance.language = language;
+
+ // Only if groupId changes, fetch the new states
+ if ( instance.groupId === groupId ) {
+ // But update the display
+ instance.display();
+ return;
+ }
+
+ instance.groupId = groupId;
+ mw.translate.getMessageGroup( groupId, 'workflowstates' )
+ .done( function ( group ) {
+ instance.states = group.workflowstates;
+ instance.display();
+ } );
+ },
+
+ /**
+ * Calls the WebApi to change the state to a new value.
+ *
+ * @param {string} state
+ * @return {jQuery.Promise}
+ */
+ changeState: function ( state ) {
+ var api = new mw.Api();
+
+ var params = {
+ action: 'groupreview',
+ group: this.groupId,
+ language: this.language,
+ state: state
+ };
+
+ return api.postWithToken( 'csrf', params );
+ },
+
+ /**
+ * Get the text which says that the current state is X.
+ *
+ * @param {string} stateName
+ * @return {string} Text which should be escaped.
+ */
+ getStateDisplay: function ( stateName ) {
+ return mw.msg( 'translate-workflowstatus', stateName );
+ },
+
+ /**
+ * Actually constructs the DOM and displays the selector.
+ */
+ display: function () {
+ var instance = this;
+
+ instance.$container.empty();
+ if ( !instance.states ) {
+ return;
+ }
+
+ var $list = $( '<ul>' )
+ .addClass( 'tux-dropdown-menu tux-workflow-status-selector hide' );
+
+ var $display = $( '<div>' )
+ .addClass( 'tux-workflow-status' )
+ .text( mw.msg( 'translate-workflow-state-' ) )
+ .on( 'click', function ( e ) {
+ $list.toggleClass( 'hide' );
+ e.stopPropagation();
+ } );
+
+ Object.keys( instance.states ).forEach( function ( key ) {
+ var data = instance.states[ key ], $state;
+
+ // Store the id also
+ data.id = key;
+
+ $state = $( '<li>' )
+ .data( 'state', data )
+ .text( data.name );
+
+ if ( data.canchange && data.id !== instance.currentState ) {
+ $state.addClass( 'changeable' );
+ } else {
+ $state.addClass( 'unchangeable' );
+ }
+
+ if ( data.id === instance.currentState ) {
+ $display.text( instance.getStateDisplay( data.name ) );
+ $display.append( $( '<span>' ).addClass( 'tux-workflow-status-triangle' ) );
+ $state.addClass( 'selected' );
+ }
+
+ $state.appendTo( $list );
+ } );
+
+ $list.find( '.changeable' ).on( 'click', function () {
+ var $this = $( this );
+
+ var state = $this.data( 'state' ).id;
+
+ $display.text( mw.msg( 'translate-workflow-set-doing' ) );
+ $display.append( $( '<span>' ).addClass( 'tux-workflow-status-triangle' ) );
+ instance.changeState( state )
+ .done( function () {
+ instance.receiveState( instance.groupId, instance.language, state );
+ } )
+ .fail( function () {
+ // eslint-disable-next-line no-alert
+ alert( 'Change of state failed' );
+ } );
+ } );
+ instance.$container.append( $display, $list );
+ }
+ };
+
+ /* workflowselector jQuery definitions */
+ $.fn.workflowselector = function ( groupId, language, state ) {
+ return this.each( function () {
+ var $this = $( this ),
+ data = $this.data( 'workflowselector' );
+
+ if ( !data ) {
+ $this.data( 'workflowselector', new WorkflowSelector( this ) );
+ }
+ $this.data( 'workflowselector' ).receiveState( groupId, language, state );
+ } );
+ };
+ $.fn.workflowselector.Constructor = WorkflowSelector;
+
+}() );
diff --git a/Translate/resources/js/jquery.ajaxdispatcher.js b/Translate/resources/js/jquery.ajaxdispatcher.js
new file mode 100644
index 00000000..feaac555
--- /dev/null
+++ b/Translate/resources/js/jquery.ajaxdispatcher.js
@@ -0,0 +1,66 @@
+( function () {
+ 'use strict';
+
+ /**
+ * Call list of callbacks returning promises in serial order and returns a list of promises.
+ *
+ * @author Niklas Laxström
+ *
+ * @param {Function[]} list List of callbacks returning promises.
+ * @param {number} maxRetries Maximum number of times a failed promise is retried.
+ * @return {jQuery.Promise}
+ */
+ function ajaxDispatcher( list, maxRetries ) {
+ var deferred = $.Deferred();
+
+ maxRetries = maxRetries || 0;
+
+ return $.when( helper( list, maxRetries ) )
+ .then( function ( promises ) {
+ return deferred.resolve( promises );
+ } ).fail( function ( errmsg ) {
+ return deferred.reject( errmsg );
+ } );
+ }
+
+ function helper( list, maxRetries ) {
+ var deferred = $.Deferred();
+
+ if ( list.length === 0 ) {
+ deferred.resolve( [] );
+ return deferred;
+ }
+
+ var first = list.slice( 0, 1 )[ 0 ];
+ var rest = list.slice( 1 );
+
+ var retries = 0;
+ var retrier = function ( result, promise ) {
+ if ( !promise.state ) {
+ return;
+ }
+
+ if ( promise.state() === 'rejected' ) {
+ if ( retries < maxRetries ) {
+ retries += 1;
+ return first.call().always( retrier );
+ }
+ }
+
+ if ( promise.state() !== 'pending' ) {
+ helper( rest, maxRetries ).always( function ( promises ) {
+ deferred.resolve( [].concat( promise, promises ) );
+ } );
+ }
+ };
+
+ first.call().always( retrier ).catch( function ( errmsg ) {
+ return deferred.reject( errmsg );
+ } );
+
+ return deferred;
+ }
+
+ $.extend( $, { ajaxDispatcher: ajaxDispatcher } );
+
+}() );
diff --git a/Translate/resources/lib/Chart.js/Chart.css b/Translate/resources/lib/Chart.js/Chart.css
new file mode 100644
index 00000000..5e749593
--- /dev/null
+++ b/Translate/resources/lib/Chart.js/Chart.css
@@ -0,0 +1,47 @@
+/*
+ * DOM element rendering detection
+ * https://davidwalsh.name/detect-node-insertion
+ */
+@keyframes chartjs-render-animation {
+ from { opacity: 0.99; }
+ to { opacity: 1; }
+}
+
+.chartjs-render-monitor {
+ animation: chartjs-render-animation 0.001s;
+}
+
+/*
+ * DOM element resizing detection
+ * https://github.com/marcj/css-element-queries
+ */
+.chartjs-size-monitor,
+.chartjs-size-monitor-expand,
+.chartjs-size-monitor-shrink {
+ position: absolute;
+ direction: ltr;
+ left: 0;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ overflow: hidden;
+ pointer-events: none;
+ visibility: hidden;
+ z-index: -1;
+}
+
+.chartjs-size-monitor-expand > div {
+ position: absolute;
+ width: 1000000px;
+ height: 1000000px;
+ left: 0;
+ top: 0;
+}
+
+.chartjs-size-monitor-shrink > div {
+ position: absolute;
+ width: 200%;
+ height: 200%;
+ left: 0;
+ top: 0;
+}
diff --git a/Translate/resources/lib/Chart.js/Chart.js b/Translate/resources/lib/Chart.js/Chart.js
new file mode 100644
index 00000000..e8d937cf
--- /dev/null
+++ b/Translate/resources/lib/Chart.js/Chart.js
@@ -0,0 +1,16151 @@
+/*!
+ * Chart.js v2.9.3
+ * https://www.chartjs.org
+ * (c) 2019 Chart.js Contributors
+ * Released under the MIT License
+ */
+(function (global, factory) {
+typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(function() { try { return require('moment'); } catch(e) { } }()) :
+typeof define === 'function' && define.amd ? define(['require'], function(require) { return factory(function() { try { return require('moment'); } catch(e) { } }()); }) :
+(global = global || self, global.Chart = factory(global.moment));
+}(this, (function (moment) { 'use strict';
+
+moment = moment && moment.hasOwnProperty('default') ? moment['default'] : moment;
+
+function createCommonjsModule(fn, module) {
+ return module = { exports: {} }, fn(module, module.exports), module.exports;
+}
+
+function getCjsExportFromNamespace (n) {
+ return n && n['default'] || n;
+}
+
+var colorName = {
+ "aliceblue": [240, 248, 255],
+ "antiquewhite": [250, 235, 215],
+ "aqua": [0, 255, 255],
+ "aquamarine": [127, 255, 212],
+ "azure": [240, 255, 255],
+ "beige": [245, 245, 220],
+ "bisque": [255, 228, 196],
+ "black": [0, 0, 0],
+ "blanchedalmond": [255, 235, 205],
+ "blue": [0, 0, 255],
+ "blueviolet": [138, 43, 226],
+ "brown": [165, 42, 42],
+ "burlywood": [222, 184, 135],
+ "cadetblue": [95, 158, 160],
+ "chartreuse": [127, 255, 0],
+ "chocolate": [210, 105, 30],
+ "coral": [255, 127, 80],
+ "cornflowerblue": [100, 149, 237],
+ "cornsilk": [255, 248, 220],
+ "crimson": [220, 20, 60],
+ "cyan": [0, 255, 255],
+ "darkblue": [0, 0, 139],
+ "darkcyan": [0, 139, 139],
+ "darkgoldenrod": [184, 134, 11],
+ "darkgray": [169, 169, 169],
+ "darkgreen": [0, 100, 0],
+ "darkgrey": [169, 169, 169],
+ "darkkhaki": [189, 183, 107],
+ "darkmagenta": [139, 0, 139],
+ "darkolivegreen": [85, 107, 47],
+ "darkorange": [255, 140, 0],
+ "darkorchid": [153, 50, 204],
+ "darkred": [139, 0, 0],
+ "darksalmon": [233, 150, 122],
+ "darkseagreen": [143, 188, 143],
+ "darkslateblue": [72, 61, 139],
+ "darkslategray": [47, 79, 79],
+ "darkslategrey": [47, 79, 79],
+ "darkturquoise": [0, 206, 209],
+ "darkviolet": [148, 0, 211],
+ "deeppink": [255, 20, 147],
+ "deepskyblue": [0, 191, 255],
+ "dimgray": [105, 105, 105],
+ "dimgrey": [105, 105, 105],
+ "dodgerblue": [30, 144, 255],
+ "firebrick": [178, 34, 34],
+ "floralwhite": [255, 250, 240],
+ "forestgreen": [34, 139, 34],
+ "fuchsia": [255, 0, 255],
+ "gainsboro": [220, 220, 220],
+ "ghostwhite": [248, 248, 255],
+ "gold": [255, 215, 0],
+ "goldenrod": [218, 165, 32],
+ "gray": [128, 128, 128],
+ "green": [0, 128, 0],
+ "greenyellow": [173, 255, 47],
+ "grey": [128, 128, 128],
+ "honeydew": [240, 255, 240],
+ "hotpink": [255, 105, 180],
+ "indianred": [205, 92, 92],
+ "indigo": [75, 0, 130],
+ "ivory": [255, 255, 240],
+ "khaki": [240, 230, 140],
+ "lavender": [230, 230, 250],
+ "lavenderblush": [255, 240, 245],
+ "lawngreen": [124, 252, 0],
+ "lemonchiffon": [255, 250, 205],
+ "lightblue": [173, 216, 230],
+ "lightcoral": [240, 128, 128],
+ "lightcyan": [224, 255, 255],
+ "lightgoldenrodyellow": [250, 250, 210],
+ "lightgray": [211, 211, 211],
+ "lightgreen": [144, 238, 144],
+ "lightgrey": [211, 211, 211],
+ "lightpink": [255, 182, 193],
+ "lightsalmon": [255, 160, 122],
+ "lightseagreen": [32, 178, 170],
+ "lightskyblue": [135, 206, 250],
+ "lightslategray": [119, 136, 153],
+ "lightslategrey": [119, 136, 153],
+ "lightsteelblue": [176, 196, 222],
+ "lightyellow": [255, 255, 224],
+ "lime": [0, 255, 0],
+ "limegreen": [50, 205, 50],
+ "linen": [250, 240, 230],
+ "magenta": [255, 0, 255],
+ "maroon": [128, 0, 0],
+ "mediumaquamarine": [102, 205, 170],
+ "mediumblue": [0, 0, 205],
+ "mediumorchid": [186, 85, 211],
+ "mediumpurple": [147, 112, 219],
+ "mediumseagreen": [60, 179, 113],
+ "mediumslateblue": [123, 104, 238],
+ "mediumspringgreen": [0, 250, 154],
+ "mediumturquoise": [72, 209, 204],
+ "mediumvioletred": [199, 21, 133],
+ "midnightblue": [25, 25, 112],
+ "mintcream": [245, 255, 250],
+ "mistyrose": [255, 228, 225],
+ "moccasin": [255, 228, 181],
+ "navajowhite": [255, 222, 173],
+ "navy": [0, 0, 128],
+ "oldlace": [253, 245, 230],
+ "olive": [128, 128, 0],
+ "olivedrab": [107, 142, 35],
+ "orange": [255, 165, 0],
+ "orangered": [255, 69, 0],
+ "orchid": [218, 112, 214],
+ "palegoldenrod": [238, 232, 170],
+ "palegreen": [152, 251, 152],
+ "paleturquoise": [175, 238, 238],
+ "palevioletred": [219, 112, 147],
+ "papayawhip": [255, 239, 213],
+ "peachpuff": [255, 218, 185],
+ "peru": [205, 133, 63],
+ "pink": [255, 192, 203],
+ "plum": [221, 160, 221],
+ "powderblue": [176, 224, 230],
+ "purple": [128, 0, 128],
+ "rebeccapurple": [102, 51, 153],
+ "red": [255, 0, 0],
+ "rosybrown": [188, 143, 143],
+ "royalblue": [65, 105, 225],
+ "saddlebrown": [139, 69, 19],
+ "salmon": [250, 128, 114],
+ "sandybrown": [244, 164, 96],
+ "seagreen": [46, 139, 87],
+ "seashell": [255, 245, 238],
+ "sienna": [160, 82, 45],
+ "silver": [192, 192, 192],
+ "skyblue": [135, 206, 235],
+ "slateblue": [106, 90, 205],
+ "slategray": [112, 128, 144],
+ "slategrey": [112, 128, 144],
+ "snow": [255, 250, 250],
+ "springgreen": [0, 255, 127],
+ "steelblue": [70, 130, 180],
+ "tan": [210, 180, 140],
+ "teal": [0, 128, 128],
+ "thistle": [216, 191, 216],
+ "tomato": [255, 99, 71],
+ "turquoise": [64, 224, 208],
+ "violet": [238, 130, 238],
+ "wheat": [245, 222, 179],
+ "white": [255, 255, 255],
+ "whitesmoke": [245, 245, 245],
+ "yellow": [255, 255, 0],
+ "yellowgreen": [154, 205, 50]
+};
+
+var conversions = createCommonjsModule(function (module) {
+/* MIT license */
+
+
+// NOTE: conversions should only return primitive values (i.e. arrays, or
+// values that give correct `typeof` results).
+// do not use box values types (i.e. Number(), String(), etc.)
+
+var reverseKeywords = {};
+for (var key in colorName) {
+ if (colorName.hasOwnProperty(key)) {
+ reverseKeywords[colorName[key]] = key;
+ }
+}
+
+var convert = module.exports = {
+ rgb: {channels: 3, labels: 'rgb'},
+ hsl: {channels: 3, labels: 'hsl'},
+ hsv: {channels: 3, labels: 'hsv'},
+ hwb: {channels: 3, labels: 'hwb'},
+ cmyk: {channels: 4, labels: 'cmyk'},
+ xyz: {channels: 3, labels: 'xyz'},
+ lab: {channels: 3, labels: 'lab'},
+ lch: {channels: 3, labels: 'lch'},
+ hex: {channels: 1, labels: ['hex']},
+ keyword: {channels: 1, labels: ['keyword']},
+ ansi16: {channels: 1, labels: ['ansi16']},
+ ansi256: {channels: 1, labels: ['ansi256']},
+ hcg: {channels: 3, labels: ['h', 'c', 'g']},
+ apple: {channels: 3, labels: ['r16', 'g16', 'b16']},
+ gray: {channels: 1, labels: ['gray']}
+};
+
+// hide .channels and .labels properties
+for (var model in convert) {
+ if (convert.hasOwnProperty(model)) {
+ if (!('channels' in convert[model])) {
+ throw new Error('missing channels property: ' + model);
+ }
+
+ if (!('labels' in convert[model])) {
+ throw new Error('missing channel labels property: ' + model);
+ }
+
+ if (convert[model].labels.length !== convert[model].channels) {
+ throw new Error('channel and label counts mismatch: ' + model);
+ }
+
+ var channels = convert[model].channels;
+ var labels = convert[model].labels;
+ delete convert[model].channels;
+ delete convert[model].labels;
+ Object.defineProperty(convert[model], 'channels', {value: channels});
+ Object.defineProperty(convert[model], 'labels', {value: labels});
+ }
+}
+
+convert.rgb.hsl = function (rgb) {
+ var r = rgb[0] / 255;
+ var g = rgb[1] / 255;
+ var b = rgb[2] / 255;
+ var min = Math.min(r, g, b);
+ var max = Math.max(r, g, b);
+ var delta = max - min;
+ var h;
+ var s;
+ var l;
+
+ if (max === min) {
+ h = 0;
+ } else if (r === max) {
+ h = (g - b) / delta;
+ } else if (g === max) {
+ h = 2 + (b - r) / delta;
+ } else if (b === max) {
+ h = 4 + (r - g) / delta;
+ }
+
+ h = Math.min(h * 60, 360);
+
+ if (h < 0) {
+ h += 360;
+ }
+
+ l = (min + max) / 2;
+
+ if (max === min) {
+ s = 0;
+ } else if (l <= 0.5) {
+ s = delta / (max + min);
+ } else {
+ s = delta / (2 - max - min);
+ }
+
+ return [h, s * 100, l * 100];
+};
+
+convert.rgb.hsv = function (rgb) {
+ var rdif;
+ var gdif;
+ var bdif;
+ var h;
+ var s;
+
+ var r = rgb[0] / 255;
+ var g = rgb[1] / 255;
+ var b = rgb[2] / 255;
+ var v = Math.max(r, g, b);
+ var diff = v - Math.min(r, g, b);
+ var diffc = function (c) {
+ return (v - c) / 6 / diff + 1 / 2;
+ };
+
+ if (diff === 0) {
+ h = s = 0;
+ } else {
+ s = diff / v;
+ rdif = diffc(r);
+ gdif = diffc(g);
+ bdif = diffc(b);
+
+ if (r === v) {
+ h = bdif - gdif;
+ } else if (g === v) {
+ h = (1 / 3) + rdif - bdif;
+ } else if (b === v) {
+ h = (2 / 3) + gdif - rdif;
+ }
+ if (h < 0) {
+ h += 1;
+ } else if (h > 1) {
+ h -= 1;
+ }
+ }
+
+ return [
+ h * 360,
+ s * 100,
+ v * 100
+ ];
+};
+
+convert.rgb.hwb = function (rgb) {
+ var r = rgb[0];
+ var g = rgb[1];
+ var b = rgb[2];
+ var h = convert.rgb.hsl(rgb)[0];
+ var w = 1 / 255 * Math.min(r, Math.min(g, b));
+
+ b = 1 - 1 / 255 * Math.max(r, Math.max(g, b));
+
+ return [h, w * 100, b * 100];
+};
+
+convert.rgb.cmyk = function (rgb) {
+ var r = rgb[0] / 255;
+ var g = rgb[1] / 255;
+ var b = rgb[2] / 255;
+ var c;
+ var m;
+ var y;
+ var k;
+
+ k = Math.min(1 - r, 1 - g, 1 - b);
+ c = (1 - r - k) / (1 - k) || 0;
+ m = (1 - g - k) / (1 - k) || 0;
+ y = (1 - b - k) / (1 - k) || 0;
+
+ return [c * 100, m * 100, y * 100, k * 100];
+};
+
+/**
+ * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance
+ * */
+function comparativeDistance(x, y) {
+ return (
+ Math.pow(x[0] - y[0], 2) +
+ Math.pow(x[1] - y[1], 2) +
+ Math.pow(x[2] - y[2], 2)
+ );
+}
+
+convert.rgb.keyword = function (rgb) {
+ var reversed = reverseKeywords[rgb];
+ if (reversed) {
+ return reversed;
+ }
+
+ var currentClosestDistance = Infinity;
+ var currentClosestKeyword;
+
+ for (var keyword in colorName) {
+ if (colorName.hasOwnProperty(keyword)) {
+ var value = colorName[keyword];
+
+ // Compute comparative distance
+ var distance = comparativeDistance(rgb, value);
+
+ // Check if its less, if so set as closest
+ if (distance < currentClosestDistance) {
+ currentClosestDistance = distance;
+ currentClosestKeyword = keyword;
+ }
+ }
+ }
+
+ return currentClosestKeyword;
+};
+
+convert.keyword.rgb = function (keyword) {
+ return colorName[keyword];
+};
+
+convert.rgb.xyz = function (rgb) {
+ var r = rgb[0] / 255;
+ var g = rgb[1] / 255;
+ var b = rgb[2] / 255;
+
+ // assume sRGB
+ r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);
+ g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);
+ b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);
+
+ var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);
+ var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);
+ var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);
+
+ return [x * 100, y * 100, z * 100];
+};
+
+convert.rgb.lab = function (rgb) {
+ var xyz = convert.rgb.xyz(rgb);
+ var x = xyz[0];
+ var y = xyz[1];
+ var z = xyz[2];
+ var l;
+ var a;
+ var b;
+
+ x /= 95.047;
+ y /= 100;
+ z /= 108.883;
+
+ x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);
+ y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);
+ z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);
+
+ l = (116 * y) - 16;
+ a = 500 * (x - y);
+ b = 200 * (y - z);
+
+ return [l, a, b];
+};
+
+convert.hsl.rgb = function (hsl) {
+ var h = hsl[0] / 360;
+ var s = hsl[1] / 100;
+ var l = hsl[2] / 100;
+ var t1;
+ var t2;
+ var t3;
+ var rgb;
+ var val;
+
+ if (s === 0) {
+ val = l * 255;
+ return [val, val, val];
+ }
+
+ if (l < 0.5) {
+ t2 = l * (1 + s);
+ } else {
+ t2 = l + s - l * s;
+ }
+
+ t1 = 2 * l - t2;
+
+ rgb = [0, 0, 0];
+ for (var i = 0; i < 3; i++) {
+ t3 = h + 1 / 3 * -(i - 1);
+ if (t3 < 0) {
+ t3++;
+ }
+ if (t3 > 1) {
+ t3--;
+ }
+
+ if (6 * t3 < 1) {
+ val = t1 + (t2 - t1) * 6 * t3;
+ } else if (2 * t3 < 1) {
+ val = t2;
+ } else if (3 * t3 < 2) {
+ val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;
+ } else {
+ val = t1;
+ }
+
+ rgb[i] = val * 255;
+ }
+
+ return rgb;
+};
+
+convert.hsl.hsv = function (hsl) {
+ var h = hsl[0];
+ var s = hsl[1] / 100;
+ var l = hsl[2] / 100;
+ var smin = s;
+ var lmin = Math.max(l, 0.01);
+ var sv;
+ var v;
+
+ l *= 2;
+ s *= (l <= 1) ? l : 2 - l;
+ smin *= lmin <= 1 ? lmin : 2 - lmin;
+ v = (l + s) / 2;
+ sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);
+
+ return [h, sv * 100, v * 100];
+};
+
+convert.hsv.rgb = function (hsv) {
+ var h = hsv[0] / 60;
+ var s = hsv[1] / 100;
+ var v = hsv[2] / 100;
+ var hi = Math.floor(h) % 6;
+
+ var f = h - Math.floor(h);
+ var p = 255 * v * (1 - s);
+ var q = 255 * v * (1 - (s * f));
+ var t = 255 * v * (1 - (s * (1 - f)));
+ v *= 255;
+
+ switch (hi) {
+ case 0:
+ return [v, t, p];
+ case 1:
+ return [q, v, p];
+ case 2:
+ return [p, v, t];
+ case 3:
+ return [p, q, v];
+ case 4:
+ return [t, p, v];
+ case 5:
+ return [v, p, q];
+ }
+};
+
+convert.hsv.hsl = function (hsv) {
+ var h = hsv[0];
+ var s = hsv[1] / 100;
+ var v = hsv[2] / 100;
+ var vmin = Math.max(v, 0.01);
+ var lmin;
+ var sl;
+ var l;
+
+ l = (2 - s) * v;
+ lmin = (2 - s) * vmin;
+ sl = s * vmin;
+ sl /= (lmin <= 1) ? lmin : 2 - lmin;
+ sl = sl || 0;
+ l /= 2;
+
+ return [h, sl * 100, l * 100];
+};
+
+// http://dev.w3.org/csswg/css-color/#hwb-to-rgb
+convert.hwb.rgb = function (hwb) {
+ var h = hwb[0] / 360;
+ var wh = hwb[1] / 100;
+ var bl = hwb[2] / 100;
+ var ratio = wh + bl;
+ var i;
+ var v;
+ var f;
+ var n;
+
+ // wh + bl cant be > 1
+ if (ratio > 1) {
+ wh /= ratio;
+ bl /= ratio;
+ }
+
+ i = Math.floor(6 * h);
+ v = 1 - bl;
+ f = 6 * h - i;
+
+ if ((i & 0x01) !== 0) {
+ f = 1 - f;
+ }
+
+ n = wh + f * (v - wh); // linear interpolation
+
+ var r;
+ var g;
+ var b;
+ switch (i) {
+ default:
+ case 6:
+ case 0: r = v; g = n; b = wh; break;
+ case 1: r = n; g = v; b = wh; break;
+ case 2: r = wh; g = v; b = n; break;
+ case 3: r = wh; g = n; b = v; break;
+ case 4: r = n; g = wh; b = v; break;
+ case 5: r = v; g = wh; b = n; break;
+ }
+
+ return [r * 255, g * 255, b * 255];
+};
+
+convert.cmyk.rgb = function (cmyk) {
+ var c = cmyk[0] / 100;
+ var m = cmyk[1] / 100;
+ var y = cmyk[2] / 100;
+ var k = cmyk[3] / 100;
+ var r;
+ var g;
+ var b;
+
+ r = 1 - Math.min(1, c * (1 - k) + k);
+ g = 1 - Math.min(1, m * (1 - k) + k);
+ b = 1 - Math.min(1, y * (1 - k) + k);
+
+ return [r * 255, g * 255, b * 255];
+};
+
+convert.xyz.rgb = function (xyz) {
+ var x = xyz[0] / 100;
+ var y = xyz[1] / 100;
+ var z = xyz[2] / 100;
+ var r;
+ var g;
+ var b;
+
+ r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);
+ g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);
+ b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);
+
+ // assume sRGB
+ r = r > 0.0031308
+ ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)
+ : r * 12.92;
+
+ g = g > 0.0031308
+ ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)
+ : g * 12.92;
+
+ b = b > 0.0031308
+ ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)
+ : b * 12.92;
+
+ r = Math.min(Math.max(0, r), 1);
+ g = Math.min(Math.max(0, g), 1);
+ b = Math.min(Math.max(0, b), 1);
+
+ return [r * 255, g * 255, b * 255];
+};
+
+convert.xyz.lab = function (xyz) {
+ var x = xyz[0];
+ var y = xyz[1];
+ var z = xyz[2];
+ var l;
+ var a;
+ var b;
+
+ x /= 95.047;
+ y /= 100;
+ z /= 108.883;
+
+ x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);
+ y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);
+ z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);
+
+ l = (116 * y) - 16;
+ a = 500 * (x - y);
+ b = 200 * (y - z);
+
+ return [l, a, b];
+};
+
+convert.lab.xyz = function (lab) {
+ var l = lab[0];
+ var a = lab[1];
+ var b = lab[2];
+ var x;
+ var y;
+ var z;
+
+ y = (l + 16) / 116;
+ x = a / 500 + y;
+ z = y - b / 200;
+
+ var y2 = Math.pow(y, 3);
+ var x2 = Math.pow(x, 3);
+ var z2 = Math.pow(z, 3);
+ y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;
+ x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;
+ z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;
+
+ x *= 95.047;
+ y *= 100;
+ z *= 108.883;
+
+ return [x, y, z];
+};
+
+convert.lab.lch = function (lab) {
+ var l = lab[0];
+ var a = lab[1];
+ var b = lab[2];
+ var hr;
+ var h;
+ var c;
+
+ hr = Math.atan2(b, a);
+ h = hr * 360 / 2 / Math.PI;
+
+ if (h < 0) {
+ h += 360;
+ }
+
+ c = Math.sqrt(a * a + b * b);
+
+ return [l, c, h];
+};
+
+convert.lch.lab = function (lch) {
+ var l = lch[0];
+ var c = lch[1];
+ var h = lch[2];
+ var a;
+ var b;
+ var hr;
+
+ hr = h / 360 * 2 * Math.PI;
+ a = c * Math.cos(hr);
+ b = c * Math.sin(hr);
+
+ return [l, a, b];
+};
+
+convert.rgb.ansi16 = function (args) {
+ var r = args[0];
+ var g = args[1];
+ var b = args[2];
+ var value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization
+
+ value = Math.round(value / 50);
+
+ if (value === 0) {
+ return 30;
+ }
+
+ var ansi = 30
+ + ((Math.round(b / 255) << 2)
+ | (Math.round(g / 255) << 1)
+ | Math.round(r / 255));
+
+ if (value === 2) {
+ ansi += 60;
+ }
+
+ return ansi;
+};
+
+convert.hsv.ansi16 = function (args) {
+ // optimization here; we already know the value and don't need to get
+ // it converted for us.
+ return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);
+};
+
+convert.rgb.ansi256 = function (args) {
+ var r = args[0];
+ var g = args[1];
+ var b = args[2];
+
+ // we use the extended greyscale palette here, with the exception of
+ // black and white. normal palette only has 4 greyscale shades.
+ if (r === g && g === b) {
+ if (r < 8) {
+ return 16;
+ }
+
+ if (r > 248) {
+ return 231;
+ }
+
+ return Math.round(((r - 8) / 247) * 24) + 232;
+ }
+
+ var ansi = 16
+ + (36 * Math.round(r / 255 * 5))
+ + (6 * Math.round(g / 255 * 5))
+ + Math.round(b / 255 * 5);
+
+ return ansi;
+};
+
+convert.ansi16.rgb = function (args) {
+ var color = args % 10;
+
+ // handle greyscale
+ if (color === 0 || color === 7) {
+ if (args > 50) {
+ color += 3.5;
+ }
+
+ color = color / 10.5 * 255;
+
+ return [color, color, color];
+ }
+
+ var mult = (~~(args > 50) + 1) * 0.5;
+ var r = ((color & 1) * mult) * 255;
+ var g = (((color >> 1) & 1) * mult) * 255;
+ var b = (((color >> 2) & 1) * mult) * 255;
+
+ return [r, g, b];
+};
+
+convert.ansi256.rgb = function (args) {
+ // handle greyscale
+ if (args >= 232) {
+ var c = (args - 232) * 10 + 8;
+ return [c, c, c];
+ }
+
+ args -= 16;
+
+ var rem;
+ var r = Math.floor(args / 36) / 5 * 255;
+ var g = Math.floor((rem = args % 36) / 6) / 5 * 255;
+ var b = (rem % 6) / 5 * 255;
+
+ return [r, g, b];
+};
+
+convert.rgb.hex = function (args) {
+ var integer = ((Math.round(args[0]) & 0xFF) << 16)
+ + ((Math.round(args[1]) & 0xFF) << 8)
+ + (Math.round(args[2]) & 0xFF);
+
+ var string = integer.toString(16).toUpperCase();
+ return '000000'.substring(string.length) + string;
+};
+
+convert.hex.rgb = function (args) {
+ var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);
+ if (!match) {
+ return [0, 0, 0];
+ }
+
+ var colorString = match[0];
+
+ if (match[0].length === 3) {
+ colorString = colorString.split('').map(function (char) {
+ return char + char;
+ }).join('');
+ }
+
+ var integer = parseInt(colorString, 16);
+ var r = (integer >> 16) & 0xFF;
+ var g = (integer >> 8) & 0xFF;
+ var b = integer & 0xFF;
+
+ return [r, g, b];
+};
+
+convert.rgb.hcg = function (rgb) {
+ var r = rgb[0] / 255;
+ var g = rgb[1] / 255;
+ var b = rgb[2] / 255;
+ var max = Math.max(Math.max(r, g), b);
+ var min = Math.min(Math.min(r, g), b);
+ var chroma = (max - min);
+ var grayscale;
+ var hue;
+
+ if (chroma < 1) {
+ grayscale = min / (1 - chroma);
+ } else {
+ grayscale = 0;
+ }
+
+ if (chroma <= 0) {
+ hue = 0;
+ } else
+ if (max === r) {
+ hue = ((g - b) / chroma) % 6;
+ } else
+ if (max === g) {
+ hue = 2 + (b - r) / chroma;
+ } else {
+ hue = 4 + (r - g) / chroma + 4;
+ }
+
+ hue /= 6;
+ hue %= 1;
+
+ return [hue * 360, chroma * 100, grayscale * 100];
+};
+
+convert.hsl.hcg = function (hsl) {
+ var s = hsl[1] / 100;
+ var l = hsl[2] / 100;
+ var c = 1;
+ var f = 0;
+
+ if (l < 0.5) {
+ c = 2.0 * s * l;
+ } else {
+ c = 2.0 * s * (1.0 - l);
+ }
+
+ if (c < 1.0) {
+ f = (l - 0.5 * c) / (1.0 - c);
+ }
+
+ return [hsl[0], c * 100, f * 100];
+};
+
+convert.hsv.hcg = function (hsv) {
+ var s = hsv[1] / 100;
+ var v = hsv[2] / 100;
+
+ var c = s * v;
+ var f = 0;
+
+ if (c < 1.0) {
+ f = (v - c) / (1 - c);
+ }
+
+ return [hsv[0], c * 100, f * 100];
+};
+
+convert.hcg.rgb = function (hcg) {
+ var h = hcg[0] / 360;
+ var c = hcg[1] / 100;
+ var g = hcg[2] / 100;
+
+ if (c === 0.0) {
+ return [g * 255, g * 255, g * 255];
+ }
+
+ var pure = [0, 0, 0];
+ var hi = (h % 1) * 6;
+ var v = hi % 1;
+ var w = 1 - v;
+ var mg = 0;
+
+ switch (Math.floor(hi)) {
+ case 0:
+ pure[0] = 1; pure[1] = v; pure[2] = 0; break;
+ case 1:
+ pure[0] = w; pure[1] = 1; pure[2] = 0; break;
+ case 2:
+ pure[0] = 0; pure[1] = 1; pure[2] = v; break;
+ case 3:
+ pure[0] = 0; pure[1] = w; pure[2] = 1; break;
+ case 4:
+ pure[0] = v; pure[1] = 0; pure[2] = 1; break;
+ default:
+ pure[0] = 1; pure[1] = 0; pure[2] = w;
+ }
+
+ mg = (1.0 - c) * g;
+
+ return [
+ (c * pure[0] + mg) * 255,
+ (c * pure[1] + mg) * 255,
+ (c * pure[2] + mg) * 255
+ ];
+};
+
+convert.hcg.hsv = function (hcg) {
+ var c = hcg[1] / 100;
+ var g = hcg[2] / 100;
+
+ var v = c + g * (1.0 - c);
+ var f = 0;
+
+ if (v > 0.0) {
+ f = c / v;
+ }
+
+ return [hcg[0], f * 100, v * 100];
+};
+
+convert.hcg.hsl = function (hcg) {
+ var c = hcg[1] / 100;
+ var g = hcg[2] / 100;
+
+ var l = g * (1.0 - c) + 0.5 * c;
+ var s = 0;
+
+ if (l > 0.0 && l < 0.5) {
+ s = c / (2 * l);
+ } else
+ if (l >= 0.5 && l < 1.0) {
+ s = c / (2 * (1 - l));
+ }
+
+ return [hcg[0], s * 100, l * 100];
+};
+
+convert.hcg.hwb = function (hcg) {
+ var c = hcg[1] / 100;
+ var g = hcg[2] / 100;
+ var v = c + g * (1.0 - c);
+ return [hcg[0], (v - c) * 100, (1 - v) * 100];
+};
+
+convert.hwb.hcg = function (hwb) {
+ var w = hwb[1] / 100;
+ var b = hwb[2] / 100;
+ var v = 1 - b;
+ var c = v - w;
+ var g = 0;
+
+ if (c < 1) {
+ g = (v - c) / (1 - c);
+ }
+
+ return [hwb[0], c * 100, g * 100];
+};
+
+convert.apple.rgb = function (apple) {
+ return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];
+};
+
+convert.rgb.apple = function (rgb) {
+ return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];
+};
+
+convert.gray.rgb = function (args) {
+ return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];
+};
+
+convert.gray.hsl = convert.gray.hsv = function (args) {
+ return [0, 0, args[0]];
+};
+
+convert.gray.hwb = function (gray) {
+ return [0, 100, gray[0]];
+};
+
+convert.gray.cmyk = function (gray) {
+ return [0, 0, 0, gray[0]];
+};
+
+convert.gray.lab = function (gray) {
+ return [gray[0], 0, 0];
+};
+
+convert.gray.hex = function (gray) {
+ var val = Math.round(gray[0] / 100 * 255) & 0xFF;
+ var integer = (val << 16) + (val << 8) + val;
+
+ var string = integer.toString(16).toUpperCase();
+ return '000000'.substring(string.length) + string;
+};
+
+convert.rgb.gray = function (rgb) {
+ var val = (rgb[0] + rgb[1] + rgb[2]) / 3;
+ return [val / 255 * 100];
+};
+});
+var conversions_1 = conversions.rgb;
+var conversions_2 = conversions.hsl;
+var conversions_3 = conversions.hsv;
+var conversions_4 = conversions.hwb;
+var conversions_5 = conversions.cmyk;
+var conversions_6 = conversions.xyz;
+var conversions_7 = conversions.lab;
+var conversions_8 = conversions.lch;
+var conversions_9 = conversions.hex;
+var conversions_10 = conversions.keyword;
+var conversions_11 = conversions.ansi16;
+var conversions_12 = conversions.ansi256;
+var conversions_13 = conversions.hcg;
+var conversions_14 = conversions.apple;
+var conversions_15 = conversions.gray;
+
+/*
+ this function routes a model to all other models.
+
+ all functions that are routed have a property `.conversion` attached
+ to the returned synthetic function. This property is an array
+ of strings, each with the steps in between the 'from' and 'to'
+ color models (inclusive).
+
+ conversions that are not possible simply are not included.
+*/
+
+function buildGraph() {
+ var graph = {};
+ // https://jsperf.com/object-keys-vs-for-in-with-closure/3
+ var models = Object.keys(conversions);
+
+ for (var len = models.length, i = 0; i < len; i++) {
+ graph[models[i]] = {
+ // http://jsperf.com/1-vs-infinity
+ // micro-opt, but this is simple.
+ distance: -1,
+ parent: null
+ };
+ }
+
+ return graph;
+}
+
+// https://en.wikipedia.org/wiki/Breadth-first_search
+function deriveBFS(fromModel) {
+ var graph = buildGraph();
+ var queue = [fromModel]; // unshift -> queue -> pop
+
+ graph[fromModel].distance = 0;
+
+ while (queue.length) {
+ var current = queue.pop();
+ var adjacents = Object.keys(conversions[current]);
+
+ for (var len = adjacents.length, i = 0; i < len; i++) {
+ var adjacent = adjacents[i];
+ var node = graph[adjacent];
+
+ if (node.distance === -1) {
+ node.distance = graph[current].distance + 1;
+ node.parent = current;
+ queue.unshift(adjacent);
+ }
+ }
+ }
+
+ return graph;
+}
+
+function link(from, to) {
+ return function (args) {
+ return to(from(args));
+ };
+}
+
+function wrapConversion(toModel, graph) {
+ var path = [graph[toModel].parent, toModel];
+ var fn = conversions[graph[toModel].parent][toModel];
+
+ var cur = graph[toModel].parent;
+ while (graph[cur].parent) {
+ path.unshift(graph[cur].parent);
+ fn = link(conversions[graph[cur].parent][cur], fn);
+ cur = graph[cur].parent;
+ }
+
+ fn.conversion = path;
+ return fn;
+}
+
+var route = function (fromModel) {
+ var graph = deriveBFS(fromModel);
+ var conversion = {};
+
+ var models = Object.keys(graph);
+ for (var len = models.length, i = 0; i < len; i++) {
+ var toModel = models[i];
+ var node = graph[toModel];
+
+ if (node.parent === null) {
+ // no possible conversion, or this node is the source model.
+ continue;
+ }
+
+ conversion[toModel] = wrapConversion(toModel, graph);
+ }
+
+ return conversion;
+};
+
+var convert = {};
+
+var models = Object.keys(conversions);
+
+function wrapRaw(fn) {
+ var wrappedFn = function (args) {
+ if (args === undefined || args === null) {
+ return args;
+ }
+
+ if (arguments.length > 1) {
+ args = Array.prototype.slice.call(arguments);
+ }
+
+ return fn(args);
+ };
+
+ // preserve .conversion property if there is one
+ if ('conversion' in fn) {
+ wrappedFn.conversion = fn.conversion;
+ }
+
+ return wrappedFn;
+}
+
+function wrapRounded(fn) {
+ var wrappedFn = function (args) {
+ if (args === undefined || args === null) {
+ return args;
+ }
+
+ if (arguments.length > 1) {
+ args = Array.prototype.slice.call(arguments);
+ }
+
+ var result = fn(args);
+
+ // we're assuming the result is an array here.
+ // see notice in conversions.js; don't use box types
+ // in conversion functions.
+ if (typeof result === 'object') {
+ for (var len = result.length, i = 0; i < len; i++) {
+ result[i] = Math.round(result[i]);
+ }
+ }
+
+ return result;
+ };
+
+ // preserve .conversion property if there is one
+ if ('conversion' in fn) {
+ wrappedFn.conversion = fn.conversion;
+ }
+
+ return wrappedFn;
+}
+
+models.forEach(function (fromModel) {
+ convert[fromModel] = {};
+
+ Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});
+ Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});
+
+ var routes = route(fromModel);
+ var routeModels = Object.keys(routes);
+
+ routeModels.forEach(function (toModel) {
+ var fn = routes[toModel];
+
+ convert[fromModel][toModel] = wrapRounded(fn);
+ convert[fromModel][toModel].raw = wrapRaw(fn);
+ });
+});
+
+var colorConvert = convert;
+
+var colorName$1 = {
+ "aliceblue": [240, 248, 255],
+ "antiquewhite": [250, 235, 215],
+ "aqua": [0, 255, 255],
+ "aquamarine": [127, 255, 212],
+ "azure": [240, 255, 255],
+ "beige": [245, 245, 220],
+ "bisque": [255, 228, 196],
+ "black": [0, 0, 0],
+ "blanchedalmond": [255, 235, 205],
+ "blue": [0, 0, 255],
+ "blueviolet": [138, 43, 226],
+ "brown": [165, 42, 42],
+ "burlywood": [222, 184, 135],
+ "cadetblue": [95, 158, 160],
+ "chartreuse": [127, 255, 0],
+ "chocolate": [210, 105, 30],
+ "coral": [255, 127, 80],
+ "cornflowerblue": [100, 149, 237],
+ "cornsilk": [255, 248, 220],
+ "crimson": [220, 20, 60],
+ "cyan": [0, 255, 255],
+ "darkblue": [0, 0, 139],
+ "darkcyan": [0, 139, 139],
+ "darkgoldenrod": [184, 134, 11],
+ "darkgray": [169, 169, 169],
+ "darkgreen": [0, 100, 0],
+ "darkgrey": [169, 169, 169],
+ "darkkhaki": [189, 183, 107],
+ "darkmagenta": [139, 0, 139],
+ "darkolivegreen": [85, 107, 47],
+ "darkorange": [255, 140, 0],
+ "darkorchid": [153, 50, 204],
+ "darkred": [139, 0, 0],
+ "darksalmon": [233, 150, 122],
+ "darkseagreen": [143, 188, 143],
+ "darkslateblue": [72, 61, 139],
+ "darkslategray": [47, 79, 79],
+ "darkslategrey": [47, 79, 79],
+ "darkturquoise": [0, 206, 209],
+ "darkviolet": [148, 0, 211],
+ "deeppink": [255, 20, 147],
+ "deepskyblue": [0, 191, 255],
+ "dimgray": [105, 105, 105],
+ "dimgrey": [105, 105, 105],
+ "dodgerblue": [30, 144, 255],
+ "firebrick": [178, 34, 34],
+ "floralwhite": [255, 250, 240],
+ "forestgreen": [34, 139, 34],
+ "fuchsia": [255, 0, 255],
+ "gainsboro": [220, 220, 220],
+ "ghostwhite": [248, 248, 255],
+ "gold": [255, 215, 0],
+ "goldenrod": [218, 165, 32],
+ "gray": [128, 128, 128],
+ "green": [0, 128, 0],
+ "greenyellow": [173, 255, 47],
+ "grey": [128, 128, 128],
+ "honeydew": [240, 255, 240],
+ "hotpink": [255, 105, 180],
+ "indianred": [205, 92, 92],
+ "indigo": [75, 0, 130],
+ "ivory": [255, 255, 240],
+ "khaki": [240, 230, 140],
+ "lavender": [230, 230, 250],
+ "lavenderblush": [255, 240, 245],
+ "lawngreen": [124, 252, 0],
+ "lemonchiffon": [255, 250, 205],
+ "lightblue": [173, 216, 230],
+ "lightcoral": [240, 128, 128],
+ "lightcyan": [224, 255, 255],
+ "lightgoldenrodyellow": [250, 250, 210],
+ "lightgray": [211, 211, 211],
+ "lightgreen": [144, 238, 144],
+ "lightgrey": [211, 211, 211],
+ "lightpink": [255, 182, 193],
+ "lightsalmon": [255, 160, 122],
+ "lightseagreen": [32, 178, 170],
+ "lightskyblue": [135, 206, 250],
+ "lightslategray": [119, 136, 153],
+ "lightslategrey": [119, 136, 153],
+ "lightsteelblue": [176, 196, 222],
+ "lightyellow": [255, 255, 224],
+ "lime": [0, 255, 0],
+ "limegreen": [50, 205, 50],
+ "linen": [250, 240, 230],
+ "magenta": [255, 0, 255],
+ "maroon": [128, 0, 0],
+ "mediumaquamarine": [102, 205, 170],
+ "mediumblue": [0, 0, 205],
+ "mediumorchid": [186, 85, 211],
+ "mediumpurple": [147, 112, 219],
+ "mediumseagreen": [60, 179, 113],
+ "mediumslateblue": [123, 104, 238],
+ "mediumspringgreen": [0, 250, 154],
+ "mediumturquoise": [72, 209, 204],
+ "mediumvioletred": [199, 21, 133],
+ "midnightblue": [25, 25, 112],
+ "mintcream": [245, 255, 250],
+ "mistyrose": [255, 228, 225],
+ "moccasin": [255, 228, 181],
+ "navajowhite": [255, 222, 173],
+ "navy": [0, 0, 128],
+ "oldlace": [253, 245, 230],
+ "olive": [128, 128, 0],
+ "olivedrab": [107, 142, 35],
+ "orange": [255, 165, 0],
+ "orangered": [255, 69, 0],
+ "orchid": [218, 112, 214],
+ "palegoldenrod": [238, 232, 170],
+ "palegreen": [152, 251, 152],
+ "paleturquoise": [175, 238, 238],
+ "palevioletred": [219, 112, 147],
+ "papayawhip": [255, 239, 213],
+ "peachpuff": [255, 218, 185],
+ "peru": [205, 133, 63],
+ "pink": [255, 192, 203],
+ "plum": [221, 160, 221],
+ "powderblue": [176, 224, 230],
+ "purple": [128, 0, 128],
+ "rebeccapurple": [102, 51, 153],
+ "red": [255, 0, 0],
+ "rosybrown": [188, 143, 143],
+ "royalblue": [65, 105, 225],
+ "saddlebrown": [139, 69, 19],
+ "salmon": [250, 128, 114],
+ "sandybrown": [244, 164, 96],
+ "seagreen": [46, 139, 87],
+ "seashell": [255, 245, 238],
+ "sienna": [160, 82, 45],
+ "silver": [192, 192, 192],
+ "skyblue": [135, 206, 235],
+ "slateblue": [106, 90, 205],
+ "slategray": [112, 128, 144],
+ "slategrey": [112, 128, 144],
+ "snow": [255, 250, 250],
+ "springgreen": [0, 255, 127],
+ "steelblue": [70, 130, 180],
+ "tan": [210, 180, 140],
+ "teal": [0, 128, 128],
+ "thistle": [216, 191, 216],
+ "tomato": [255, 99, 71],
+ "turquoise": [64, 224, 208],
+ "violet": [238, 130, 238],
+ "wheat": [245, 222, 179],
+ "white": [255, 255, 255],
+ "whitesmoke": [245, 245, 245],
+ "yellow": [255, 255, 0],
+ "yellowgreen": [154, 205, 50]
+};
+
+/* MIT license */
+
+
+var colorString = {
+ getRgba: getRgba,
+ getHsla: getHsla,
+ getRgb: getRgb,
+ getHsl: getHsl,
+ getHwb: getHwb,
+ getAlpha: getAlpha,
+
+ hexString: hexString,
+ rgbString: rgbString,
+ rgbaString: rgbaString,
+ percentString: percentString,
+ percentaString: percentaString,
+ hslString: hslString,
+ hslaString: hslaString,
+ hwbString: hwbString,
+ keyword: keyword
+};
+
+function getRgba(string) {
+ if (!string) {
+ return;
+ }
+ var abbr = /^#([a-fA-F0-9]{3,4})$/i,
+ hex = /^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i,
+ rgba = /^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i,
+ per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i,
+ keyword = /(\w+)/;
+
+ var rgb = [0, 0, 0],
+ a = 1,
+ match = string.match(abbr),
+ hexAlpha = "";
+ if (match) {
+ match = match[1];
+ hexAlpha = match[3];
+ for (var i = 0; i < rgb.length; i++) {
+ rgb[i] = parseInt(match[i] + match[i], 16);
+ }
+ if (hexAlpha) {
+ a = Math.round((parseInt(hexAlpha + hexAlpha, 16) / 255) * 100) / 100;
+ }
+ }
+ else if (match = string.match(hex)) {
+ hexAlpha = match[2];
+ match = match[1];
+ for (var i = 0; i < rgb.length; i++) {
+ rgb[i] = parseInt(match.slice(i * 2, i * 2 + 2), 16);
+ }
+ if (hexAlpha) {
+ a = Math.round((parseInt(hexAlpha, 16) / 255) * 100) / 100;
+ }
+ }
+ else if (match = string.match(rgba)) {
+ for (var i = 0; i < rgb.length; i++) {
+ rgb[i] = parseInt(match[i + 1]);
+ }
+ a = parseFloat(match[4]);
+ }
+ else if (match = string.match(per)) {
+ for (var i = 0; i < rgb.length; i++) {
+ rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);
+ }
+ a = parseFloat(match[4]);
+ }
+ else if (match = string.match(keyword)) {
+ if (match[1] == "transparent") {
+ return [0, 0, 0, 0];
+ }
+ rgb = colorName$1[match[1]];
+ if (!rgb) {
+ return;
+ }
+ }
+
+ for (var i = 0; i < rgb.length; i++) {
+ rgb[i] = scale(rgb[i], 0, 255);
+ }
+ if (!a && a != 0) {
+ a = 1;
+ }
+ else {
+ a = scale(a, 0, 1);
+ }
+ rgb[3] = a;
+ return rgb;
+}
+
+function getHsla(string) {
+ if (!string) {
+ return;
+ }
+ var hsl = /^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/;
+ var match = string.match(hsl);
+ if (match) {
+ var alpha = parseFloat(match[4]);
+ var h = scale(parseInt(match[1]), 0, 360),
+ s = scale(parseFloat(match[2]), 0, 100),
+ l = scale(parseFloat(match[3]), 0, 100),
+ a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);
+ return [h, s, l, a];
+ }
+}
+
+function getHwb(string) {
+ if (!string) {
+ return;
+ }
+ var hwb = /^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/;
+ var match = string.match(hwb);
+ if (match) {
+ var alpha = parseFloat(match[4]);
+ var h = scale(parseInt(match[1]), 0, 360),
+ w = scale(parseFloat(match[2]), 0, 100),
+ b = scale(parseFloat(match[3]), 0, 100),
+ a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);
+ return [h, w, b, a];
+ }
+}
+
+function getRgb(string) {
+ var rgba = getRgba(string);
+ return rgba && rgba.slice(0, 3);
+}
+
+function getHsl(string) {
+ var hsla = getHsla(string);
+ return hsla && hsla.slice(0, 3);
+}
+
+function getAlpha(string) {
+ var vals = getRgba(string);
+ if (vals) {
+ return vals[3];
+ }
+ else if (vals = getHsla(string)) {
+ return vals[3];
+ }
+ else if (vals = getHwb(string)) {
+ return vals[3];
+ }
+}
+
+// generators
+function hexString(rgba, a) {
+ var a = (a !== undefined && rgba.length === 3) ? a : rgba[3];
+ return "#" + hexDouble(rgba[0])
+ + hexDouble(rgba[1])
+ + hexDouble(rgba[2])
+ + (
+ (a >= 0 && a < 1)
+ ? hexDouble(Math.round(a * 255))
+ : ""
+ );
+}
+
+function rgbString(rgba, alpha) {
+ if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {
+ return rgbaString(rgba, alpha);
+ }
+ return "rgb(" + rgba[0] + ", " + rgba[1] + ", " + rgba[2] + ")";
+}
+
+function rgbaString(rgba, alpha) {
+ if (alpha === undefined) {
+ alpha = (rgba[3] !== undefined ? rgba[3] : 1);
+ }
+ return "rgba(" + rgba[0] + ", " + rgba[1] + ", " + rgba[2]
+ + ", " + alpha + ")";
+}
+
+function percentString(rgba, alpha) {
+ if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {
+ return percentaString(rgba, alpha);
+ }
+ var r = Math.round(rgba[0]/255 * 100),
+ g = Math.round(rgba[1]/255 * 100),
+ b = Math.round(rgba[2]/255 * 100);
+
+ return "rgb(" + r + "%, " + g + "%, " + b + "%)";
+}
+
+function percentaString(rgba, alpha) {
+ var r = Math.round(rgba[0]/255 * 100),
+ g = Math.round(rgba[1]/255 * 100),
+ b = Math.round(rgba[2]/255 * 100);
+ return "rgba(" + r + "%, " + g + "%, " + b + "%, " + (alpha || rgba[3] || 1) + ")";
+}
+
+function hslString(hsla, alpha) {
+ if (alpha < 1 || (hsla[3] && hsla[3] < 1)) {
+ return hslaString(hsla, alpha);
+ }
+ return "hsl(" + hsla[0] + ", " + hsla[1] + "%, " + hsla[2] + "%)";
+}
+
+function hslaString(hsla, alpha) {
+ if (alpha === undefined) {
+ alpha = (hsla[3] !== undefined ? hsla[3] : 1);
+ }
+ return "hsla(" + hsla[0] + ", " + hsla[1] + "%, " + hsla[2] + "%, "
+ + alpha + ")";
+}
+
+// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax
+// (hwb have alpha optional & 1 is default value)
+function hwbString(hwb, alpha) {
+ if (alpha === undefined) {
+ alpha = (hwb[3] !== undefined ? hwb[3] : 1);
+ }
+ return "hwb(" + hwb[0] + ", " + hwb[1] + "%, " + hwb[2] + "%"
+ + (alpha !== undefined && alpha !== 1 ? ", " + alpha : "") + ")";
+}
+
+function keyword(rgb) {
+ return reverseNames[rgb.slice(0, 3)];
+}
+
+// helpers
+function scale(num, min, max) {
+ return Math.min(Math.max(min, num), max);
+}
+
+function hexDouble(num) {
+ var str = num.toString(16).toUpperCase();
+ return (str.length < 2) ? "0" + str : str;
+}
+
+
+//create a list of reverse color names
+var reverseNames = {};
+for (var name in colorName$1) {
+ reverseNames[colorName$1[name]] = name;
+}
+
+/* MIT license */
+
+
+
+var Color = function (obj) {
+ if (obj instanceof Color) {
+ return obj;
+ }
+ if (!(this instanceof Color)) {
+ return new Color(obj);
+ }
+
+ this.valid = false;
+ this.values = {
+ rgb: [0, 0, 0],
+ hsl: [0, 0, 0],
+ hsv: [0, 0, 0],
+ hwb: [0, 0, 0],
+ cmyk: [0, 0, 0, 0],
+ alpha: 1
+ };
+
+ // parse Color() argument
+ var vals;
+ if (typeof obj === 'string') {
+ vals = colorString.getRgba(obj);
+ if (vals) {
+ this.setValues('rgb', vals);
+ } else if (vals = colorString.getHsla(obj)) {
+ this.setValues('hsl', vals);
+ } else if (vals = colorString.getHwb(obj)) {
+ this.setValues('hwb', vals);
+ }
+ } else if (typeof obj === 'object') {
+ vals = obj;
+ if (vals.r !== undefined || vals.red !== undefined) {
+ this.setValues('rgb', vals);
+ } else if (vals.l !== undefined || vals.lightness !== undefined) {
+ this.setValues('hsl', vals);
+ } else if (vals.v !== undefined || vals.value !== undefined) {
+ this.setValues('hsv', vals);
+ } else if (vals.w !== undefined || vals.whiteness !== undefined) {
+ this.setValues('hwb', vals);
+ } else if (vals.c !== undefined || vals.cyan !== undefined) {
+ this.setValues('cmyk', vals);
+ }
+ }
+};
+
+Color.prototype = {
+ isValid: function () {
+ return this.valid;
+ },
+ rgb: function () {
+ return this.setSpace('rgb', arguments);
+ },
+ hsl: function () {
+ return this.setSpace('hsl', arguments);
+ },
+ hsv: function () {
+ return this.setSpace('hsv', arguments);
+ },
+ hwb: function () {
+ return this.setSpace('hwb', arguments);
+ },
+ cmyk: function () {
+ return this.setSpace('cmyk', arguments);
+ },
+
+ rgbArray: function () {
+ return this.values.rgb;
+ },
+ hslArray: function () {
+ return this.values.hsl;
+ },
+ hsvArray: function () {
+ return this.values.hsv;
+ },
+ hwbArray: function () {
+ var values = this.values;
+ if (values.alpha !== 1) {
+ return values.hwb.concat([values.alpha]);
+ }
+ return values.hwb;
+ },
+ cmykArray: function () {
+ return this.values.cmyk;
+ },
+ rgbaArray: function () {
+ var values = this.values;
+ return values.rgb.concat([values.alpha]);
+ },
+ hslaArray: function () {
+ var values = this.values;
+ return values.hsl.concat([values.alpha]);
+ },
+ alpha: function (val) {
+ if (val === undefined) {
+ return this.values.alpha;
+ }
+ this.setValues('alpha', val);
+ return this;
+ },
+
+ red: function (val) {
+ return this.setChannel('rgb', 0, val);
+ },
+ green: function (val) {
+ return this.setChannel('rgb', 1, val);
+ },
+ blue: function (val) {
+ return this.setChannel('rgb', 2, val);
+ },
+ hue: function (val) {
+ if (val) {
+ val %= 360;
+ val = val < 0 ? 360 + val : val;
+ }
+ return this.setChannel('hsl', 0, val);
+ },
+ saturation: function (val) {
+ return this.setChannel('hsl', 1, val);
+ },
+ lightness: function (val) {
+ return this.setChannel('hsl', 2, val);
+ },
+ saturationv: function (val) {
+ return this.setChannel('hsv', 1, val);
+ },
+ whiteness: function (val) {
+ return this.setChannel('hwb', 1, val);
+ },
+ blackness: function (val) {
+ return this.setChannel('hwb', 2, val);
+ },
+ value: function (val) {
+ return this.setChannel('hsv', 2, val);
+ },
+ cyan: function (val) {
+ return this.setChannel('cmyk', 0, val);
+ },
+ magenta: function (val) {
+ return this.setChannel('cmyk', 1, val);
+ },
+ yellow: function (val) {
+ return this.setChannel('cmyk', 2, val);
+ },
+ black: function (val) {
+ return this.setChannel('cmyk', 3, val);
+ },
+
+ hexString: function () {
+ return colorString.hexString(this.values.rgb);
+ },
+ rgbString: function () {
+ return colorString.rgbString(this.values.rgb, this.values.alpha);
+ },
+ rgbaString: function () {
+ return colorString.rgbaString(this.values.rgb, this.values.alpha);
+ },
+ percentString: function () {
+ return colorString.percentString(this.values.rgb, this.values.alpha);
+ },
+ hslString: function () {
+ return colorString.hslString(this.values.hsl, this.values.alpha);
+ },
+ hslaString: function () {
+ return colorString.hslaString(this.values.hsl, this.values.alpha);
+ },
+ hwbString: function () {
+ return colorString.hwbString(this.values.hwb, this.values.alpha);
+ },
+ keyword: function () {
+ return colorString.keyword(this.values.rgb, this.values.alpha);
+ },
+
+ rgbNumber: function () {
+ var rgb = this.values.rgb;
+ return (rgb[0] << 16) | (rgb[1] << 8) | rgb[2];
+ },
+
+ luminosity: function () {
+ // http://www.w3.org/TR/WCAG20/#relativeluminancedef
+ var rgb = this.values.rgb;
+ var lum = [];
+ for (var i = 0; i < rgb.length; i++) {
+ var chan = rgb[i] / 255;
+ lum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4);
+ }
+ return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];
+ },
+
+ contrast: function (color2) {
+ // http://www.w3.org/TR/WCAG20/#contrast-ratiodef
+ var lum1 = this.luminosity();
+ var lum2 = color2.luminosity();
+ if (lum1 > lum2) {
+ return (lum1 + 0.05) / (lum2 + 0.05);
+ }
+ return (lum2 + 0.05) / (lum1 + 0.05);
+ },
+
+ level: function (color2) {
+ var contrastRatio = this.contrast(color2);
+ if (contrastRatio >= 7.1) {
+ return 'AAA';
+ }
+
+ return (contrastRatio >= 4.5) ? 'AA' : '';
+ },
+
+ dark: function () {
+ // YIQ equation from http://24ways.org/2010/calculating-color-contrast
+ var rgb = this.values.rgb;
+ var yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;
+ return yiq < 128;
+ },
+
+ light: function () {
+ return !this.dark();
+ },
+
+ negate: function () {
+ var rgb = [];
+ for (var i = 0; i < 3; i++) {
+ rgb[i] = 255 - this.values.rgb[i];
+ }
+ this.setValues('rgb', rgb);
+ return this;
+ },
+
+ lighten: function (ratio) {
+ var hsl = this.values.hsl;
+ hsl[2] += hsl[2] * ratio;
+ this.setValues('hsl', hsl);
+ return this;
+ },
+
+ darken: function (ratio) {
+ var hsl = this.values.hsl;
+ hsl[2] -= hsl[2] * ratio;
+ this.setValues('hsl', hsl);
+ return this;
+ },
+
+ saturate: function (ratio) {
+ var hsl = this.values.hsl;
+ hsl[1] += hsl[1] * ratio;
+ this.setValues('hsl', hsl);
+ return this;
+ },
+
+ desaturate: function (ratio) {
+ var hsl = this.values.hsl;
+ hsl[1] -= hsl[1] * ratio;
+ this.setValues('hsl', hsl);
+ return this;
+ },
+
+ whiten: function (ratio) {
+ var hwb = this.values.hwb;
+ hwb[1] += hwb[1] * ratio;
+ this.setValues('hwb', hwb);
+ return this;
+ },
+
+ blacken: function (ratio) {
+ var hwb = this.values.hwb;
+ hwb[2] += hwb[2] * ratio;
+ this.setValues('hwb', hwb);
+ return this;
+ },
+
+ greyscale: function () {
+ var rgb = this.values.rgb;
+ // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale
+ var val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;
+ this.setValues('rgb', [val, val, val]);
+ return this;
+ },
+
+ clearer: function (ratio) {
+ var alpha = this.values.alpha;
+ this.setValues('alpha', alpha - (alpha * ratio));
+ return this;
+ },
+
+ opaquer: function (ratio) {
+ var alpha = this.values.alpha;
+ this.setValues('alpha', alpha + (alpha * ratio));
+ return this;
+ },
+
+ rotate: function (degrees) {
+ var hsl = this.values.hsl;
+ var hue = (hsl[0] + degrees) % 360;
+ hsl[0] = hue < 0 ? 360 + hue : hue;
+ this.setValues('hsl', hsl);
+ return this;
+ },
+
+ /**
+ * Ported from sass implementation in C
+ * https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209
+ */
+ mix: function (mixinColor, weight) {
+ var color1 = this;
+ var color2 = mixinColor;
+ var p = weight === undefined ? 0.5 : weight;
+
+ var w = 2 * p - 1;
+ var a = color1.alpha() - color2.alpha();
+
+ var w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0;
+ var w2 = 1 - w1;
+
+ return this
+ .rgb(
+ w1 * color1.red() + w2 * color2.red(),
+ w1 * color1.green() + w2 * color2.green(),
+ w1 * color1.blue() + w2 * color2.blue()
+ )
+ .alpha(color1.alpha() * p + color2.alpha() * (1 - p));
+ },
+
+ toJSON: function () {
+ return this.rgb();
+ },
+
+ clone: function () {
+ // NOTE(SB): using node-clone creates a dependency to Buffer when using browserify,
+ // making the final build way to big to embed in Chart.js. So let's do it manually,
+ // assuming that values to clone are 1 dimension arrays containing only numbers,
+ // except 'alpha' which is a number.
+ var result = new Color();
+ var source = this.values;
+ var target = result.values;
+ var value, type;
+
+ for (var prop in source) {
+ if (source.hasOwnProperty(prop)) {
+ value = source[prop];
+ type = ({}).toString.call(value);
+ if (type === '[object Array]') {
+ target[prop] = value.slice(0);
+ } else if (type === '[object Number]') {
+ target[prop] = value;
+ } else {
+ console.error('unexpected color value:', value);
+ }
+ }
+ }
+
+ return result;
+ }
+};
+
+Color.prototype.spaces = {
+ rgb: ['red', 'green', 'blue'],
+ hsl: ['hue', 'saturation', 'lightness'],
+ hsv: ['hue', 'saturation', 'value'],
+ hwb: ['hue', 'whiteness', 'blackness'],
+ cmyk: ['cyan', 'magenta', 'yellow', 'black']
+};
+
+Color.prototype.maxes = {
+ rgb: [255, 255, 255],
+ hsl: [360, 100, 100],
+ hsv: [360, 100, 100],
+ hwb: [360, 100, 100],
+ cmyk: [100, 100, 100, 100]
+};
+
+Color.prototype.getValues = function (space) {
+ var values = this.values;
+ var vals = {};
+
+ for (var i = 0; i < space.length; i++) {
+ vals[space.charAt(i)] = values[space][i];
+ }
+
+ if (values.alpha !== 1) {
+ vals.a = values.alpha;
+ }
+
+ // {r: 255, g: 255, b: 255, a: 0.4}
+ return vals;
+};
+
+Color.prototype.setValues = function (space, vals) {
+ var values = this.values;
+ var spaces = this.spaces;
+ var maxes = this.maxes;
+ var alpha = 1;
+ var i;
+
+ this.valid = true;
+
+ if (space === 'alpha') {
+ alpha = vals;
+ } else if (vals.length) {
+ // [10, 10, 10]
+ values[space] = vals.slice(0, space.length);
+ alpha = vals[space.length];
+ } else if (vals[space.charAt(0)] !== undefined) {
+ // {r: 10, g: 10, b: 10}
+ for (i = 0; i < space.length; i++) {
+ values[space][i] = vals[space.charAt(i)];
+ }
+
+ alpha = vals.a;
+ } else if (vals[spaces[space][0]] !== undefined) {
+ // {red: 10, green: 10, blue: 10}
+ var chans = spaces[space];
+
+ for (i = 0; i < space.length; i++) {
+ values[space][i] = vals[chans[i]];
+ }
+
+ alpha = vals.alpha;
+ }
+
+ values.alpha = Math.max(0, Math.min(1, (alpha === undefined ? values.alpha : alpha)));
+
+ if (space === 'alpha') {
+ return false;
+ }
+
+ var capped;
+
+ // cap values of the space prior converting all values
+ for (i = 0; i < space.length; i++) {
+ capped = Math.max(0, Math.min(maxes[space][i], values[space][i]));
+ values[space][i] = Math.round(capped);
+ }
+
+ // convert to all the other color spaces
+ for (var sname in spaces) {
+ if (sname !== space) {
+ values[sname] = colorConvert[space][sname](values[space]);
+ }
+ }
+
+ return true;
+};
+
+Color.prototype.setSpace = function (space, args) {
+ var vals = args[0];
+
+ if (vals === undefined) {
+ // color.rgb()
+ return this.getValues(space);
+ }
+
+ // color.rgb(10, 10, 10)
+ if (typeof vals === 'number') {
+ vals = Array.prototype.slice.call(args);
+ }
+
+ this.setValues(space, vals);
+ return this;
+};
+
+Color.prototype.setChannel = function (space, index, val) {
+ var svalues = this.values[space];
+ if (val === undefined) {
+ // color.red()
+ return svalues[index];
+ } else if (val === svalues[index]) {
+ // color.red(color.red())
+ return this;
+ }
+
+ // color.red(100)
+ svalues[index] = val;
+ this.setValues(space, svalues);
+
+ return this;
+};
+
+if (typeof window !== 'undefined') {
+ window.Color = Color;
+}
+
+var chartjsColor = Color;
+
+/**
+ * @namespace Chart.helpers
+ */
+var helpers = {
+ /**
+ * An empty function that can be used, for example, for optional callback.
+ */
+ noop: function() {},
+
+ /**
+ * Returns a unique id, sequentially generated from a global variable.
+ * @returns {number}
+ * @function
+ */
+ uid: (function() {
+ var id = 0;
+ return function() {
+ return id++;
+ };
+ }()),
+
+ /**
+ * Returns true if `value` is neither null nor undefined, else returns false.
+ * @param {*} value - The value to test.
+ * @returns {boolean}
+ * @since 2.7.0
+ */
+ isNullOrUndef: function(value) {
+ return value === null || typeof value === 'undefined';
+ },
+
+ /**
+ * Returns true if `value` is an array (including typed arrays), else returns false.
+ * @param {*} value - The value to test.
+ * @returns {boolean}
+ * @function
+ */
+ isArray: function(value) {
+ if (Array.isArray && Array.isArray(value)) {
+ return true;
+ }
+ var type = Object.prototype.toString.call(value);
+ if (type.substr(0, 7) === '[object' && type.substr(-6) === 'Array]') {
+ return true;
+ }
+ return false;
+ },
+
+ /**
+ * Returns true if `value` is an object (excluding null), else returns false.
+ * @param {*} value - The value to test.
+ * @returns {boolean}
+ * @since 2.7.0
+ */
+ isObject: function(value) {
+ return value !== null && Object.prototype.toString.call(value) === '[object Object]';
+ },
+
+ /**
+ * Returns true if `value` is a finite number, else returns false
+ * @param {*} value - The value to test.
+ * @returns {boolean}
+ */
+ isFinite: function(value) {
+ return (typeof value === 'number' || value instanceof Number) && isFinite(value);
+ },
+
+ /**
+ * Returns `value` if defined, else returns `defaultValue`.
+ * @param {*} value - The value to return if defined.
+ * @param {*} defaultValue - The value to return if `value` is undefined.
+ * @returns {*}
+ */
+ valueOrDefault: function(value, defaultValue) {
+ return typeof value === 'undefined' ? defaultValue : value;
+ },
+
+ /**
+ * Returns value at the given `index` in array if defined, else returns `defaultValue`.
+ * @param {Array} value - The array to lookup for value at `index`.
+ * @param {number} index - The index in `value` to lookup for value.
+ * @param {*} defaultValue - The value to return if `value[index]` is undefined.
+ * @returns {*}
+ */
+ valueAtIndexOrDefault: function(value, index, defaultValue) {
+ return helpers.valueOrDefault(helpers.isArray(value) ? value[index] : value, defaultValue);
+ },
+
+ /**
+ * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the
+ * value returned by `fn`. If `fn` is not a function, this method returns undefined.
+ * @param {function} fn - The function to call.
+ * @param {Array|undefined|null} args - The arguments with which `fn` should be called.
+ * @param {object} [thisArg] - The value of `this` provided for the call to `fn`.
+ * @returns {*}
+ */
+ callback: function(fn, args, thisArg) {
+ if (fn && typeof fn.call === 'function') {
+ return fn.apply(thisArg, args);
+ }
+ },
+
+ /**
+ * Note(SB) for performance sake, this method should only be used when loopable type
+ * is unknown or in none intensive code (not called often and small loopable). Else
+ * it's preferable to use a regular for() loop and save extra function calls.
+ * @param {object|Array} loopable - The object or array to be iterated.
+ * @param {function} fn - The function to call for each item.
+ * @param {object} [thisArg] - The value of `this` provided for the call to `fn`.
+ * @param {boolean} [reverse] - If true, iterates backward on the loopable.
+ */
+ each: function(loopable, fn, thisArg, reverse) {
+ var i, len, keys;
+ if (helpers.isArray(loopable)) {
+ len = loopable.length;
+ if (reverse) {
+ for (i = len - 1; i >= 0; i--) {
+ fn.call(thisArg, loopable[i], i);
+ }
+ } else {
+ for (i = 0; i < len; i++) {
+ fn.call(thisArg, loopable[i], i);
+ }
+ }
+ } else if (helpers.isObject(loopable)) {
+ keys = Object.keys(loopable);
+ len = keys.length;
+ for (i = 0; i < len; i++) {
+ fn.call(thisArg, loopable[keys[i]], keys[i]);
+ }
+ }
+ },
+
+ /**
+ * Returns true if the `a0` and `a1` arrays have the same content, else returns false.
+ * @see https://stackoverflow.com/a/14853974
+ * @param {Array} a0 - The array to compare
+ * @param {Array} a1 - The array to compare
+ * @returns {boolean}
+ */
+ arrayEquals: function(a0, a1) {
+ var i, ilen, v0, v1;
+
+ if (!a0 || !a1 || a0.length !== a1.length) {
+ return false;
+ }
+
+ for (i = 0, ilen = a0.length; i < ilen; ++i) {
+ v0 = a0[i];
+ v1 = a1[i];
+
+ if (v0 instanceof Array && v1 instanceof Array) {
+ if (!helpers.arrayEquals(v0, v1)) {
+ return false;
+ }
+ } else if (v0 !== v1) {
+ // NOTE: two different object instances will never be equal: {x:20} != {x:20}
+ return false;
+ }
+ }
+
+ return true;
+ },
+
+ /**
+ * Returns a deep copy of `source` without keeping references on objects and arrays.
+ * @param {*} source - The value to clone.
+ * @returns {*}
+ */
+ clone: function(source) {
+ if (helpers.isArray(source)) {
+ return source.map(helpers.clone);
+ }
+
+ if (helpers.isObject(source)) {
+ var target = {};
+ var keys = Object.keys(source);
+ var klen = keys.length;
+ var k = 0;
+
+ for (; k < klen; ++k) {
+ target[keys[k]] = helpers.clone(source[keys[k]]);
+ }
+
+ return target;
+ }
+
+ return source;
+ },
+
+ /**
+ * The default merger when Chart.helpers.merge is called without merger option.
+ * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.
+ * @private
+ */
+ _merger: function(key, target, source, options) {
+ var tval = target[key];
+ var sval = source[key];
+
+ if (helpers.isObject(tval) && helpers.isObject(sval)) {
+ helpers.merge(tval, sval, options);
+ } else {
+ target[key] = helpers.clone(sval);
+ }
+ },
+
+ /**
+ * Merges source[key] in target[key] only if target[key] is undefined.
+ * @private
+ */
+ _mergerIf: function(key, target, source) {
+ var tval = target[key];
+ var sval = source[key];
+
+ if (helpers.isObject(tval) && helpers.isObject(sval)) {
+ helpers.mergeIf(tval, sval);
+ } else if (!target.hasOwnProperty(key)) {
+ target[key] = helpers.clone(sval);
+ }
+ },
+
+ /**
+ * Recursively deep copies `source` properties into `target` with the given `options`.
+ * IMPORTANT: `target` is not cloned and will be updated with `source` properties.
+ * @param {object} target - The target object in which all sources are merged into.
+ * @param {object|object[]} source - Object(s) to merge into `target`.
+ * @param {object} [options] - Merging options:
+ * @param {function} [options.merger] - The merge method (key, target, source, options)
+ * @returns {object} The `target` object.
+ */
+ merge: function(target, source, options) {
+ var sources = helpers.isArray(source) ? source : [source];
+ var ilen = sources.length;
+ var merge, i, keys, klen, k;
+
+ if (!helpers.isObject(target)) {
+ return target;
+ }
+
+ options = options || {};
+ merge = options.merger || helpers._merger;
+
+ for (i = 0; i < ilen; ++i) {
+ source = sources[i];
+ if (!helpers.isObject(source)) {
+ continue;
+ }
+
+ keys = Object.keys(source);
+ for (k = 0, klen = keys.length; k < klen; ++k) {
+ merge(keys[k], target, source, options);
+ }
+ }
+
+ return target;
+ },
+
+ /**
+ * Recursively deep copies `source` properties into `target` *only* if not defined in target.
+ * IMPORTANT: `target` is not cloned and will be updated with `source` properties.
+ * @param {object} target - The target object in which all sources are merged into.
+ * @param {object|object[]} source - Object(s) to merge into `target`.
+ * @returns {object} The `target` object.
+ */
+ mergeIf: function(target, source) {
+ return helpers.merge(target, source, {merger: helpers._mergerIf});
+ },
+
+ /**
+ * Applies the contents of two or more objects together into the first object.
+ * @param {object} target - The target object in which all objects are merged into.
+ * @param {object} arg1 - Object containing additional properties to merge in target.
+ * @param {object} argN - Additional objects containing properties to merge in target.
+ * @returns {object} The `target` object.
+ */
+ extend: Object.assign || function(target) {
+ return helpers.merge(target, [].slice.call(arguments, 1), {
+ merger: function(key, dst, src) {
+ dst[key] = src[key];
+ }
+ });
+ },
+
+ /**
+ * Basic javascript inheritance based on the model created in Backbone.js
+ */
+ inherits: function(extensions) {
+ var me = this;
+ var ChartElement = (extensions && extensions.hasOwnProperty('constructor')) ? extensions.constructor : function() {
+ return me.apply(this, arguments);
+ };
+
+ var Surrogate = function() {
+ this.constructor = ChartElement;
+ };
+
+ Surrogate.prototype = me.prototype;
+ ChartElement.prototype = new Surrogate();
+ ChartElement.extend = helpers.inherits;
+
+ if (extensions) {
+ helpers.extend(ChartElement.prototype, extensions);
+ }
+
+ ChartElement.__super__ = me.prototype;
+ return ChartElement;
+ },
+
+ _deprecated: function(scope, value, previous, current) {
+ if (value !== undefined) {
+ console.warn(scope + ': "' + previous +
+ '" is deprecated. Please use "' + current + '" instead');
+ }
+ }
+};
+
+var helpers_core = helpers;
+
+// DEPRECATIONS
+
+/**
+ * Provided for backward compatibility, use Chart.helpers.callback instead.
+ * @function Chart.helpers.callCallback
+ * @deprecated since version 2.6.0
+ * @todo remove at version 3
+ * @private
+ */
+helpers.callCallback = helpers.callback;
+
+/**
+ * Provided for backward compatibility, use Array.prototype.indexOf instead.
+ * Array.prototype.indexOf compatibility: Chrome, Opera, Safari, FF1.5+, IE9+
+ * @function Chart.helpers.indexOf
+ * @deprecated since version 2.7.0
+ * @todo remove at version 3
+ * @private
+ */
+helpers.indexOf = function(array, item, fromIndex) {
+ return Array.prototype.indexOf.call(array, item, fromIndex);
+};
+
+/**
+ * Provided for backward compatibility, use Chart.helpers.valueOrDefault instead.
+ * @function Chart.helpers.getValueOrDefault
+ * @deprecated since version 2.7.0
+ * @todo remove at version 3
+ * @private
+ */
+helpers.getValueOrDefault = helpers.valueOrDefault;
+
+/**
+ * Provided for backward compatibility, use Chart.helpers.valueAtIndexOrDefault instead.
+ * @function Chart.helpers.getValueAtIndexOrDefault
+ * @deprecated since version 2.7.0
+ * @todo remove at version 3
+ * @private
+ */
+helpers.getValueAtIndexOrDefault = helpers.valueAtIndexOrDefault;
+
+/**
+ * Easing functions adapted from Robert Penner's easing equations.
+ * @namespace Chart.helpers.easingEffects
+ * @see http://www.robertpenner.com/easing/
+ */
+var effects = {
+ linear: function(t) {
+ return t;
+ },
+
+ easeInQuad: function(t) {
+ return t * t;
+ },
+
+ easeOutQuad: function(t) {
+ return -t * (t - 2);
+ },
+
+ easeInOutQuad: function(t) {
+ if ((t /= 0.5) < 1) {
+ return 0.5 * t * t;
+ }
+ return -0.5 * ((--t) * (t - 2) - 1);
+ },
+
+ easeInCubic: function(t) {
+ return t * t * t;
+ },
+
+ easeOutCubic: function(t) {
+ return (t = t - 1) * t * t + 1;
+ },
+
+ easeInOutCubic: function(t) {
+ if ((t /= 0.5) < 1) {
+ return 0.5 * t * t * t;
+ }
+ return 0.5 * ((t -= 2) * t * t + 2);
+ },
+
+ easeInQuart: function(t) {
+ return t * t * t * t;
+ },
+
+ easeOutQuart: function(t) {
+ return -((t = t - 1) * t * t * t - 1);
+ },
+
+ easeInOutQuart: function(t) {
+ if ((t /= 0.5) < 1) {
+ return 0.5 * t * t * t * t;
+ }
+ return -0.5 * ((t -= 2) * t * t * t - 2);
+ },
+
+ easeInQuint: function(t) {
+ return t * t * t * t * t;
+ },
+
+ easeOutQuint: function(t) {
+ return (t = t - 1) * t * t * t * t + 1;
+ },
+
+ easeInOutQuint: function(t) {
+ if ((t /= 0.5) < 1) {
+ return 0.5 * t * t * t * t * t;
+ }
+ return 0.5 * ((t -= 2) * t * t * t * t + 2);
+ },
+
+ easeInSine: function(t) {
+ return -Math.cos(t * (Math.PI / 2)) + 1;
+ },
+
+ easeOutSine: function(t) {
+ return Math.sin(t * (Math.PI / 2));
+ },
+
+ easeInOutSine: function(t) {
+ return -0.5 * (Math.cos(Math.PI * t) - 1);
+ },
+
+ easeInExpo: function(t) {
+ return (t === 0) ? 0 : Math.pow(2, 10 * (t - 1));
+ },
+
+ easeOutExpo: function(t) {
+ return (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1;
+ },
+
+ easeInOutExpo: function(t) {
+ if (t === 0) {
+ return 0;
+ }
+ if (t === 1) {
+ return 1;
+ }
+ if ((t /= 0.5) < 1) {
+ return 0.5 * Math.pow(2, 10 * (t - 1));
+ }
+ return 0.5 * (-Math.pow(2, -10 * --t) + 2);
+ },
+
+ easeInCirc: function(t) {
+ if (t >= 1) {
+ return t;
+ }
+ return -(Math.sqrt(1 - t * t) - 1);
+ },
+
+ easeOutCirc: function(t) {
+ return Math.sqrt(1 - (t = t - 1) * t);
+ },
+
+ easeInOutCirc: function(t) {
+ if ((t /= 0.5) < 1) {
+ return -0.5 * (Math.sqrt(1 - t * t) - 1);
+ }
+ return 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);
+ },
+
+ easeInElastic: function(t) {
+ var s = 1.70158;
+ var p = 0;
+ var a = 1;
+ if (t === 0) {
+ return 0;
+ }
+ if (t === 1) {
+ return 1;
+ }
+ if (!p) {
+ p = 0.3;
+ }
+ if (a < 1) {
+ a = 1;
+ s = p / 4;
+ } else {
+ s = p / (2 * Math.PI) * Math.asin(1 / a);
+ }
+ return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));
+ },
+
+ easeOutElastic: function(t) {
+ var s = 1.70158;
+ var p = 0;
+ var a = 1;
+ if (t === 0) {
+ return 0;
+ }
+ if (t === 1) {
+ return 1;
+ }
+ if (!p) {
+ p = 0.3;
+ }
+ if (a < 1) {
+ a = 1;
+ s = p / 4;
+ } else {
+ s = p / (2 * Math.PI) * Math.asin(1 / a);
+ }
+ return a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p) + 1;
+ },
+
+ easeInOutElastic: function(t) {
+ var s = 1.70158;
+ var p = 0;
+ var a = 1;
+ if (t === 0) {
+ return 0;
+ }
+ if ((t /= 0.5) === 2) {
+ return 1;
+ }
+ if (!p) {
+ p = 0.45;
+ }
+ if (a < 1) {
+ a = 1;
+ s = p / 4;
+ } else {
+ s = p / (2 * Math.PI) * Math.asin(1 / a);
+ }
+ if (t < 1) {
+ return -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));
+ }
+ return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p) * 0.5 + 1;
+ },
+ easeInBack: function(t) {
+ var s = 1.70158;
+ return t * t * ((s + 1) * t - s);
+ },
+
+ easeOutBack: function(t) {
+ var s = 1.70158;
+ return (t = t - 1) * t * ((s + 1) * t + s) + 1;
+ },
+
+ easeInOutBack: function(t) {
+ var s = 1.70158;
+ if ((t /= 0.5) < 1) {
+ return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));
+ }
+ return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);
+ },
+
+ easeInBounce: function(t) {
+ return 1 - effects.easeOutBounce(1 - t);
+ },
+
+ easeOutBounce: function(t) {
+ if (t < (1 / 2.75)) {
+ return 7.5625 * t * t;
+ }
+ if (t < (2 / 2.75)) {
+ return 7.5625 * (t -= (1.5 / 2.75)) * t + 0.75;
+ }
+ if (t < (2.5 / 2.75)) {
+ return 7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375;
+ }
+ return 7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375;
+ },
+
+ easeInOutBounce: function(t) {
+ if (t < 0.5) {
+ return effects.easeInBounce(t * 2) * 0.5;
+ }
+ return effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5;
+ }
+};
+
+var helpers_easing = {
+ effects: effects
+};
+
+// DEPRECATIONS
+
+/**
+ * Provided for backward compatibility, use Chart.helpers.easing.effects instead.
+ * @function Chart.helpers.easingEffects
+ * @deprecated since version 2.7.0
+ * @todo remove at version 3
+ * @private
+ */
+helpers_core.easingEffects = effects;
+
+var PI = Math.PI;
+var RAD_PER_DEG = PI / 180;
+var DOUBLE_PI = PI * 2;
+var HALF_PI = PI / 2;
+var QUARTER_PI = PI / 4;
+var TWO_THIRDS_PI = PI * 2 / 3;
+
+/**
+ * @namespace Chart.helpers.canvas
+ */
+var exports$1 = {
+ /**
+ * Clears the entire canvas associated to the given `chart`.
+ * @param {Chart} chart - The chart for which to clear the canvas.
+ */
+ clear: function(chart) {
+ chart.ctx.clearRect(0, 0, chart.width, chart.height);
+ },
+
+ /**
+ * Creates a "path" for a rectangle with rounded corners at position (x, y) with a
+ * given size (width, height) and the same `radius` for all corners.
+ * @param {CanvasRenderingContext2D} ctx - The canvas 2D Context.
+ * @param {number} x - The x axis of the coordinate for the rectangle starting point.
+ * @param {number} y - The y axis of the coordinate for the rectangle starting point.
+ * @param {number} width - The rectangle's width.
+ * @param {number} height - The rectangle's height.
+ * @param {number} radius - The rounded amount (in pixels) for the four corners.
+ * @todo handle `radius` as top-left, top-right, bottom-right, bottom-left array/object?
+ */
+ roundedRect: function(ctx, x, y, width, height, radius) {
+ if (radius) {
+ var r = Math.min(radius, height / 2, width / 2);
+ var left = x + r;
+ var top = y + r;
+ var right = x + width - r;
+ var bottom = y + height - r;
+
+ ctx.moveTo(x, top);
+ if (left < right && top < bottom) {
+ ctx.arc(left, top, r, -PI, -HALF_PI);
+ ctx.arc(right, top, r, -HALF_PI, 0);
+ ctx.arc(right, bottom, r, 0, HALF_PI);
+ ctx.arc(left, bottom, r, HALF_PI, PI);
+ } else if (left < right) {
+ ctx.moveTo(left, y);
+ ctx.arc(right, top, r, -HALF_PI, HALF_PI);
+ ctx.arc(left, top, r, HALF_PI, PI + HALF_PI);
+ } else if (top < bottom) {
+ ctx.arc(left, top, r, -PI, 0);
+ ctx.arc(left, bottom, r, 0, PI);
+ } else {
+ ctx.arc(left, top, r, -PI, PI);
+ }
+ ctx.closePath();
+ ctx.moveTo(x, y);
+ } else {
+ ctx.rect(x, y, width, height);
+ }
+ },
+
+ drawPoint: function(ctx, style, radius, x, y, rotation) {
+ var type, xOffset, yOffset, size, cornerRadius;
+ var rad = (rotation || 0) * RAD_PER_DEG;
+
+ if (style && typeof style === 'object') {
+ type = style.toString();
+ if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {
+ ctx.save();
+ ctx.translate(x, y);
+ ctx.rotate(rad);
+ ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);
+ ctx.restore();
+ return;
+ }
+ }
+
+ if (isNaN(radius) || radius <= 0) {
+ return;
+ }
+
+ ctx.beginPath();
+
+ switch (style) {
+ // Default includes circle
+ default:
+ ctx.arc(x, y, radius, 0, DOUBLE_PI);
+ ctx.closePath();
+ break;
+ case 'triangle':
+ ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);
+ rad += TWO_THIRDS_PI;
+ ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);
+ rad += TWO_THIRDS_PI;
+ ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);
+ ctx.closePath();
+ break;
+ case 'rectRounded':
+ // NOTE: the rounded rect implementation changed to use `arc` instead of
+ // `quadraticCurveTo` since it generates better results when rect is
+ // almost a circle. 0.516 (instead of 0.5) produces results with visually
+ // closer proportion to the previous impl and it is inscribed in the
+ // circle with `radius`. For more details, see the following PRs:
+ // https://github.com/chartjs/Chart.js/issues/5597
+ // https://github.com/chartjs/Chart.js/issues/5858
+ cornerRadius = radius * 0.516;
+ size = radius - cornerRadius;
+ xOffset = Math.cos(rad + QUARTER_PI) * size;
+ yOffset = Math.sin(rad + QUARTER_PI) * size;
+ ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);
+ ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);
+ ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);
+ ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);
+ ctx.closePath();
+ break;
+ case 'rect':
+ if (!rotation) {
+ size = Math.SQRT1_2 * radius;
+ ctx.rect(x - size, y - size, 2 * size, 2 * size);
+ break;
+ }
+ rad += QUARTER_PI;
+ /* falls through */
+ case 'rectRot':
+ xOffset = Math.cos(rad) * radius;
+ yOffset = Math.sin(rad) * radius;
+ ctx.moveTo(x - xOffset, y - yOffset);
+ ctx.lineTo(x + yOffset, y - xOffset);
+ ctx.lineTo(x + xOffset, y + yOffset);
+ ctx.lineTo(x - yOffset, y + xOffset);
+ ctx.closePath();
+ break;
+ case 'crossRot':
+ rad += QUARTER_PI;
+ /* falls through */
+ case 'cross':
+ xOffset = Math.cos(rad) * radius;
+ yOffset = Math.sin(rad) * radius;
+ ctx.moveTo(x - xOffset, y - yOffset);
+ ctx.lineTo(x + xOffset, y + yOffset);
+ ctx.moveTo(x + yOffset, y - xOffset);
+ ctx.lineTo(x - yOffset, y + xOffset);
+ break;
+ case 'star':
+ xOffset = Math.cos(rad) * radius;
+ yOffset = Math.sin(rad) * radius;
+ ctx.moveTo(x - xOffset, y - yOffset);
+ ctx.lineTo(x + xOffset, y + yOffset);
+ ctx.moveTo(x + yOffset, y - xOffset);
+ ctx.lineTo(x - yOffset, y + xOffset);
+ rad += QUARTER_PI;
+ xOffset = Math.cos(rad) * radius;
+ yOffset = Math.sin(rad) * radius;
+ ctx.moveTo(x - xOffset, y - yOffset);
+ ctx.lineTo(x + xOffset, y + yOffset);
+ ctx.moveTo(x + yOffset, y - xOffset);
+ ctx.lineTo(x - yOffset, y + xOffset);
+ break;
+ case 'line':
+ xOffset = Math.cos(rad) * radius;
+ yOffset = Math.sin(rad) * radius;
+ ctx.moveTo(x - xOffset, y - yOffset);
+ ctx.lineTo(x + xOffset, y + yOffset);
+ break;
+ case 'dash':
+ ctx.moveTo(x, y);
+ ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);
+ break;
+ }
+
+ ctx.fill();
+ ctx.stroke();
+ },
+
+ /**
+ * Returns true if the point is inside the rectangle
+ * @param {object} point - The point to test
+ * @param {object} area - The rectangle
+ * @returns {boolean}
+ * @private
+ */
+ _isPointInArea: function(point, area) {
+ var epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.
+
+ return point.x > area.left - epsilon && point.x < area.right + epsilon &&
+ point.y > area.top - epsilon && point.y < area.bottom + epsilon;
+ },
+
+ clipArea: function(ctx, area) {
+ ctx.save();
+ ctx.beginPath();
+ ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);
+ ctx.clip();
+ },
+
+ unclipArea: function(ctx) {
+ ctx.restore();
+ },
+
+ lineTo: function(ctx, previous, target, flip) {
+ var stepped = target.steppedLine;
+ if (stepped) {
+ if (stepped === 'middle') {
+ var midpoint = (previous.x + target.x) / 2.0;
+ ctx.lineTo(midpoint, flip ? target.y : previous.y);
+ ctx.lineTo(midpoint, flip ? previous.y : target.y);
+ } else if ((stepped === 'after' && !flip) || (stepped !== 'after' && flip)) {
+ ctx.lineTo(previous.x, target.y);
+ } else {
+ ctx.lineTo(target.x, previous.y);
+ }
+ ctx.lineTo(target.x, target.y);
+ return;
+ }
+
+ if (!target.tension) {
+ ctx.lineTo(target.x, target.y);
+ return;
+ }
+
+ ctx.bezierCurveTo(
+ flip ? previous.controlPointPreviousX : previous.controlPointNextX,
+ flip ? previous.controlPointPreviousY : previous.controlPointNextY,
+ flip ? target.controlPointNextX : target.controlPointPreviousX,
+ flip ? target.controlPointNextY : target.controlPointPreviousY,
+ target.x,
+ target.y);
+ }
+};
+
+var helpers_canvas = exports$1;
+
+// DEPRECATIONS
+
+/**
+ * Provided for backward compatibility, use Chart.helpers.canvas.clear instead.
+ * @namespace Chart.helpers.clear
+ * @deprecated since version 2.7.0
+ * @todo remove at version 3
+ * @private
+ */
+helpers_core.clear = exports$1.clear;
+
+/**
+ * Provided for backward compatibility, use Chart.helpers.canvas.roundedRect instead.
+ * @namespace Chart.helpers.drawRoundedRectangle
+ * @deprecated since version 2.7.0
+ * @todo remove at version 3
+ * @private
+ */
+helpers_core.drawRoundedRectangle = function(ctx) {
+ ctx.beginPath();
+ exports$1.roundedRect.apply(exports$1, arguments);
+};
+
+var defaults = {
+ /**
+ * @private
+ */
+ _set: function(scope, values) {
+ return helpers_core.merge(this[scope] || (this[scope] = {}), values);
+ }
+};
+
+// TODO(v3): remove 'global' from namespace. all default are global and
+// there's inconsistency around which options are under 'global'
+defaults._set('global', {
+ defaultColor: 'rgba(0,0,0,0.1)',
+ defaultFontColor: '#666',
+ defaultFontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",
+ defaultFontSize: 12,
+ defaultFontStyle: 'normal',
+ defaultLineHeight: 1.2,
+ showLines: true
+});
+
+var core_defaults = defaults;
+
+var valueOrDefault = helpers_core.valueOrDefault;
+
+/**
+ * Converts the given font object into a CSS font string.
+ * @param {object} font - A font object.
+ * @return {string} The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font
+ * @private
+ */
+function toFontString(font) {
+ if (!font || helpers_core.isNullOrUndef(font.size) || helpers_core.isNullOrUndef(font.family)) {
+ return null;
+ }
+
+ return (font.style ? font.style + ' ' : '')
+ + (font.weight ? font.weight + ' ' : '')
+ + font.size + 'px '
+ + font.family;
+}
+
+/**
+ * @alias Chart.helpers.options
+ * @namespace
+ */
+var helpers_options = {
+ /**
+ * Converts the given line height `value` in pixels for a specific font `size`.
+ * @param {number|string} value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').
+ * @param {number} size - The font size (in pixels) used to resolve relative `value`.
+ * @returns {number} The effective line height in pixels (size * 1.2 if value is invalid).
+ * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height
+ * @since 2.7.0
+ */
+ toLineHeight: function(value, size) {
+ var matches = ('' + value).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);
+ if (!matches || matches[1] === 'normal') {
+ return size * 1.2;
+ }
+
+ value = +matches[2];
+
+ switch (matches[3]) {
+ case 'px':
+ return value;
+ case '%':
+ value /= 100;
+ break;
+ }
+
+ return size * value;
+ },
+
+ /**
+ * Converts the given value into a padding object with pre-computed width/height.
+ * @param {number|object} value - If a number, set the value to all TRBL component,
+ * else, if and object, use defined properties and sets undefined ones to 0.
+ * @returns {object} The padding values (top, right, bottom, left, width, height)
+ * @since 2.7.0
+ */
+ toPadding: function(value) {
+ var t, r, b, l;
+
+ if (helpers_core.isObject(value)) {
+ t = +value.top || 0;
+ r = +value.right || 0;
+ b = +value.bottom || 0;
+ l = +value.left || 0;
+ } else {
+ t = r = b = l = +value || 0;
+ }
+
+ return {
+ top: t,
+ right: r,
+ bottom: b,
+ left: l,
+ height: t + b,
+ width: l + r
+ };
+ },
+
+ /**
+ * Parses font options and returns the font object.
+ * @param {object} options - A object that contains font options to be parsed.
+ * @return {object} The font object.
+ * @todo Support font.* options and renamed to toFont().
+ * @private
+ */
+ _parseFont: function(options) {
+ var globalDefaults = core_defaults.global;
+ var size = valueOrDefault(options.fontSize, globalDefaults.defaultFontSize);
+ var font = {
+ family: valueOrDefault(options.fontFamily, globalDefaults.defaultFontFamily),
+ lineHeight: helpers_core.options.toLineHeight(valueOrDefault(options.lineHeight, globalDefaults.defaultLineHeight), size),
+ size: size,
+ style: valueOrDefault(options.fontStyle, globalDefaults.defaultFontStyle),
+ weight: null,
+ string: ''
+ };
+
+ font.string = toFontString(font);
+ return font;
+ },
+
+ /**
+ * Evaluates the given `inputs` sequentially and returns the first defined value.
+ * @param {Array} inputs - An array of values, falling back to the last value.
+ * @param {object} [context] - If defined and the current value is a function, the value
+ * is called with `context` as first argument and the result becomes the new input.
+ * @param {number} [index] - If defined and the current value is an array, the value
+ * at `index` become the new input.
+ * @param {object} [info] - object to return information about resolution in
+ * @param {boolean} [info.cacheable] - Will be set to `false` if option is not cacheable.
+ * @since 2.7.0
+ */
+ resolve: function(inputs, context, index, info) {
+ var cacheable = true;
+ var i, ilen, value;
+
+ for (i = 0, ilen = inputs.length; i < ilen; ++i) {
+ value = inputs[i];
+ if (value === undefined) {
+ continue;
+ }
+ if (context !== undefined && typeof value === 'function') {
+ value = value(context);
+ cacheable = false;
+ }
+ if (index !== undefined && helpers_core.isArray(value)) {
+ value = value[index];
+ cacheable = false;
+ }
+ if (value !== undefined) {
+ if (info && !cacheable) {
+ info.cacheable = false;
+ }
+ return value;
+ }
+ }
+ }
+};
+
+/**
+ * @alias Chart.helpers.math
+ * @namespace
+ */
+var exports$2 = {
+ /**
+ * Returns an array of factors sorted from 1 to sqrt(value)
+ * @private
+ */
+ _factorize: function(value) {
+ var result = [];
+ var sqrt = Math.sqrt(value);
+ var i;
+
+ for (i = 1; i < sqrt; i++) {
+ if (value % i === 0) {
+ result.push(i);
+ result.push(value / i);
+ }
+ }
+ if (sqrt === (sqrt | 0)) { // if value is a square number
+ result.push(sqrt);
+ }
+
+ result.sort(function(a, b) {
+ return a - b;
+ }).pop();
+ return result;
+ },
+
+ log10: Math.log10 || function(x) {
+ var exponent = Math.log(x) * Math.LOG10E; // Math.LOG10E = 1 / Math.LN10.
+ // Check for whole powers of 10,
+ // which due to floating point rounding error should be corrected.
+ var powerOf10 = Math.round(exponent);
+ var isPowerOf10 = x === Math.pow(10, powerOf10);
+
+ return isPowerOf10 ? powerOf10 : exponent;
+ }
+};
+
+var helpers_math = exports$2;
+
+// DEPRECATIONS
+
+/**
+ * Provided for backward compatibility, use Chart.helpers.math.log10 instead.
+ * @namespace Chart.helpers.log10
+ * @deprecated since version 2.9.0
+ * @todo remove at version 3
+ * @private
+ */
+helpers_core.log10 = exports$2.log10;
+
+var getRtlAdapter = function(rectX, width) {
+ return {
+ x: function(x) {
+ return rectX + rectX + width - x;
+ },
+ setWidth: function(w) {
+ width = w;
+ },
+ textAlign: function(align) {
+ if (align === 'center') {
+ return align;
+ }
+ return align === 'right' ? 'left' : 'right';
+ },
+ xPlus: function(x, value) {
+ return x - value;
+ },
+ leftForLtr: function(x, itemWidth) {
+ return x - itemWidth;
+ },
+ };
+};
+
+var getLtrAdapter = function() {
+ return {
+ x: function(x) {
+ return x;
+ },
+ setWidth: function(w) { // eslint-disable-line no-unused-vars
+ },
+ textAlign: function(align) {
+ return align;
+ },
+ xPlus: function(x, value) {
+ return x + value;
+ },
+ leftForLtr: function(x, _itemWidth) { // eslint-disable-line no-unused-vars
+ return x;
+ },
+ };
+};
+
+var getAdapter = function(rtl, rectX, width) {
+ return rtl ? getRtlAdapter(rectX, width) : getLtrAdapter();
+};
+
+var overrideTextDirection = function(ctx, direction) {
+ var style, original;
+ if (direction === 'ltr' || direction === 'rtl') {
+ style = ctx.canvas.style;
+ original = [
+ style.getPropertyValue('direction'),
+ style.getPropertyPriority('direction'),
+ ];
+
+ style.setProperty('direction', direction, 'important');
+ ctx.prevTextDirection = original;
+ }
+};
+
+var restoreTextDirection = function(ctx) {
+ var original = ctx.prevTextDirection;
+ if (original !== undefined) {
+ delete ctx.prevTextDirection;
+ ctx.canvas.style.setProperty('direction', original[0], original[1]);
+ }
+};
+
+var helpers_rtl = {
+ getRtlAdapter: getAdapter,
+ overrideTextDirection: overrideTextDirection,
+ restoreTextDirection: restoreTextDirection,
+};
+
+var helpers$1 = helpers_core;
+var easing = helpers_easing;
+var canvas = helpers_canvas;
+var options = helpers_options;
+var math = helpers_math;
+var rtl = helpers_rtl;
+helpers$1.easing = easing;
+helpers$1.canvas = canvas;
+helpers$1.options = options;
+helpers$1.math = math;
+helpers$1.rtl = rtl;
+
+function interpolate(start, view, model, ease) {
+ var keys = Object.keys(model);
+ var i, ilen, key, actual, origin, target, type, c0, c1;
+
+ for (i = 0, ilen = keys.length; i < ilen; ++i) {
+ key = keys[i];
+
+ target = model[key];
+
+ // if a value is added to the model after pivot() has been called, the view
+ // doesn't contain it, so let's initialize the view to the target value.
+ if (!view.hasOwnProperty(key)) {
+ view[key] = target;
+ }
+
+ actual = view[key];
+
+ if (actual === target || key[0] === '_') {
+ continue;
+ }
+
+ if (!start.hasOwnProperty(key)) {
+ start[key] = actual;
+ }
+
+ origin = start[key];
+
+ type = typeof target;
+
+ if (type === typeof origin) {
+ if (type === 'string') {
+ c0 = chartjsColor(origin);
+ if (c0.valid) {
+ c1 = chartjsColor(target);
+ if (c1.valid) {
+ view[key] = c1.mix(c0, ease).rgbString();
+ continue;
+ }
+ }
+ } else if (helpers$1.isFinite(origin) && helpers$1.isFinite(target)) {
+ view[key] = origin + (target - origin) * ease;
+ continue;
+ }
+ }
+
+ view[key] = target;
+ }
+}
+
+var Element = function(configuration) {
+ helpers$1.extend(this, configuration);
+ this.initialize.apply(this, arguments);
+};
+
+helpers$1.extend(Element.prototype, {
+ _type: undefined,
+
+ initialize: function() {
+ this.hidden = false;
+ },
+
+ pivot: function() {
+ var me = this;
+ if (!me._view) {
+ me._view = helpers$1.extend({}, me._model);
+ }
+ me._start = {};
+ return me;
+ },
+
+ transition: function(ease) {
+ var me = this;
+ var model = me._model;
+ var start = me._start;
+ var view = me._view;
+
+ // No animation -> No Transition
+ if (!model || ease === 1) {
+ me._view = helpers$1.extend({}, model);
+ me._start = null;
+ return me;
+ }
+
+ if (!view) {
+ view = me._view = {};
+ }
+
+ if (!start) {
+ start = me._start = {};
+ }
+
+ interpolate(start, view, model, ease);
+
+ return me;
+ },
+
+ tooltipPosition: function() {
+ return {
+ x: this._model.x,
+ y: this._model.y
+ };
+ },
+
+ hasValue: function() {
+ return helpers$1.isNumber(this._model.x) && helpers$1.isNumber(this._model.y);
+ }
+});
+
+Element.extend = helpers$1.inherits;
+
+var core_element = Element;
+
+var exports$3 = core_element.extend({
+ chart: null, // the animation associated chart instance
+ currentStep: 0, // the current animation step
+ numSteps: 60, // default number of steps
+ easing: '', // the easing to use for this animation
+ render: null, // render function used by the animation service
+
+ onAnimationProgress: null, // user specified callback to fire on each step of the animation
+ onAnimationComplete: null, // user specified callback to fire when the animation finishes
+});
+
+var core_animation = exports$3;
+
+// DEPRECATIONS
+
+/**
+ * Provided for backward compatibility, use Chart.Animation instead
+ * @prop Chart.Animation#animationObject
+ * @deprecated since version 2.6.0
+ * @todo remove at version 3
+ */
+Object.defineProperty(exports$3.prototype, 'animationObject', {
+ get: function() {
+ return this;
+ }
+});
+
+/**
+ * Provided for backward compatibility, use Chart.Animation#chart instead
+ * @prop Chart.Animation#chartInstance
+ * @deprecated since version 2.6.0
+ * @todo remove at version 3
+ */
+Object.defineProperty(exports$3.prototype, 'chartInstance', {
+ get: function() {
+ return this.chart;
+ },
+ set: function(value) {
+ this.chart = value;
+ }
+});
+
+core_defaults._set('global', {
+ animation: {
+ duration: 1000,
+ easing: 'easeOutQuart',
+ onProgress: helpers$1.noop,
+ onComplete: helpers$1.noop
+ }
+});
+
+var core_animations = {
+ animations: [],
+ request: null,
+
+ /**
+ * @param {Chart} chart - The chart to animate.
+ * @param {Chart.Animation} animation - The animation that we will animate.
+ * @param {number} duration - The animation duration in ms.
+ * @param {boolean} lazy - if true, the chart is not marked as animating to enable more responsive interactions
+ */
+ addAnimation: function(chart, animation, duration, lazy) {
+ var animations = this.animations;
+ var i, ilen;
+
+ animation.chart = chart;
+ animation.startTime = Date.now();
+ animation.duration = duration;
+
+ if (!lazy) {
+ chart.animating = true;
+ }
+
+ for (i = 0, ilen = animations.length; i < ilen; ++i) {
+ if (animations[i].chart === chart) {
+ animations[i] = animation;
+ return;
+ }
+ }
+
+ animations.push(animation);
+
+ // If there are no animations queued, manually kickstart a digest, for lack of a better word
+ if (animations.length === 1) {
+ this.requestAnimationFrame();
+ }
+ },
+
+ cancelAnimation: function(chart) {
+ var index = helpers$1.findIndex(this.animations, function(animation) {
+ return animation.chart === chart;
+ });
+
+ if (index !== -1) {
+ this.animations.splice(index, 1);
+ chart.animating = false;
+ }
+ },
+
+ requestAnimationFrame: function() {
+ var me = this;
+ if (me.request === null) {
+ // Skip animation frame requests until the active one is executed.
+ // This can happen when processing mouse events, e.g. 'mousemove'
+ // and 'mouseout' events will trigger multiple renders.
+ me.request = helpers$1.requestAnimFrame.call(window, function() {
+ me.request = null;
+ me.startDigest();
+ });
+ }
+ },
+
+ /**
+ * @private
+ */
+ startDigest: function() {
+ var me = this;
+
+ me.advance();
+
+ // Do we have more stuff to animate?
+ if (me.animations.length > 0) {
+ me.requestAnimationFrame();
+ }
+ },
+
+ /**
+ * @private
+ */
+ advance: function() {
+ var animations = this.animations;
+ var animation, chart, numSteps, nextStep;
+ var i = 0;
+
+ // 1 animation per chart, so we are looping charts here
+ while (i < animations.length) {
+ animation = animations[i];
+ chart = animation.chart;
+ numSteps = animation.numSteps;
+
+ // Make sure that currentStep starts at 1
+ // https://github.com/chartjs/Chart.js/issues/6104
+ nextStep = Math.floor((Date.now() - animation.startTime) / animation.duration * numSteps) + 1;
+ animation.currentStep = Math.min(nextStep, numSteps);
+
+ helpers$1.callback(animation.render, [chart, animation], chart);
+ helpers$1.callback(animation.onAnimationProgress, [animation], chart);
+
+ if (animation.currentStep >= numSteps) {
+ helpers$1.callback(animation.onAnimationComplete, [animation], chart);
+ chart.animating = false;
+ animations.splice(i, 1);
+ } else {
+ ++i;
+ }
+ }
+ }
+};
+
+var resolve = helpers$1.options.resolve;
+
+var arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];
+
+/**
+ * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',
+ * 'unshift') and notify the listener AFTER the array has been altered. Listeners are
+ * called on the 'onData*' callbacks (e.g. onDataPush, etc.) with same arguments.
+ */
+function listenArrayEvents(array, listener) {
+ if (array._chartjs) {
+ array._chartjs.listeners.push(listener);
+ return;
+ }
+
+ Object.defineProperty(array, '_chartjs', {
+ configurable: true,
+ enumerable: false,
+ value: {
+ listeners: [listener]
+ }
+ });
+
+ arrayEvents.forEach(function(key) {
+ var method = 'onData' + key.charAt(0).toUpperCase() + key.slice(1);
+ var base = array[key];
+
+ Object.defineProperty(array, key, {
+ configurable: true,
+ enumerable: false,
+ value: function() {
+ var args = Array.prototype.slice.call(arguments);
+ var res = base.apply(this, args);
+
+ helpers$1.each(array._chartjs.listeners, function(object) {
+ if (typeof object[method] === 'function') {
+ object[method].apply(object, args);
+ }
+ });
+
+ return res;
+ }
+ });
+ });
+}
+
+/**
+ * Removes the given array event listener and cleanup extra attached properties (such as
+ * the _chartjs stub and overridden methods) if array doesn't have any more listeners.
+ */
+function unlistenArrayEvents(array, listener) {
+ var stub = array._chartjs;
+ if (!stub) {
+ return;
+ }
+
+ var listeners = stub.listeners;
+ var index = listeners.indexOf(listener);
+ if (index !== -1) {
+ listeners.splice(index, 1);
+ }
+
+ if (listeners.length > 0) {
+ return;
+ }
+
+ arrayEvents.forEach(function(key) {
+ delete array[key];
+ });
+
+ delete array._chartjs;
+}
+
+// Base class for all dataset controllers (line, bar, etc)
+var DatasetController = function(chart, datasetIndex) {
+ this.initialize(chart, datasetIndex);
+};
+
+helpers$1.extend(DatasetController.prototype, {
+
+ /**
+ * Element type used to generate a meta dataset (e.g. Chart.element.Line).
+ * @type {Chart.core.element}
+ */
+ datasetElementType: null,
+
+ /**
+ * Element type used to generate a meta data (e.g. Chart.element.Point).
+ * @type {Chart.core.element}
+ */
+ dataElementType: null,
+
+ /**
+ * Dataset element option keys to be resolved in _resolveDatasetElementOptions.
+ * A derived controller may override this to resolve controller-specific options.
+ * The keys defined here are for backward compatibility for legend styles.
+ * @private
+ */
+ _datasetElementOptions: [
+ 'backgroundColor',
+ 'borderCapStyle',
+ 'borderColor',
+ 'borderDash',
+ 'borderDashOffset',
+ 'borderJoinStyle',
+ 'borderWidth'
+ ],
+
+ /**
+ * Data element option keys to be resolved in _resolveDataElementOptions.
+ * A derived controller may override this to resolve controller-specific options.
+ * The keys defined here are for backward compatibility for legend styles.
+ * @private
+ */
+ _dataElementOptions: [
+ 'backgroundColor',
+ 'borderColor',
+ 'borderWidth',
+ 'pointStyle'
+ ],
+
+ initialize: function(chart, datasetIndex) {
+ var me = this;
+ me.chart = chart;
+ me.index = datasetIndex;
+ me.linkScales();
+ me.addElements();
+ me._type = me.getMeta().type;
+ },
+
+ updateIndex: function(datasetIndex) {
+ this.index = datasetIndex;
+ },
+
+ linkScales: function() {
+ var me = this;
+ var meta = me.getMeta();
+ var chart = me.chart;
+ var scales = chart.scales;
+ var dataset = me.getDataset();
+ var scalesOpts = chart.options.scales;
+
+ if (meta.xAxisID === null || !(meta.xAxisID in scales) || dataset.xAxisID) {
+ meta.xAxisID = dataset.xAxisID || scalesOpts.xAxes[0].id;
+ }
+ if (meta.yAxisID === null || !(meta.yAxisID in scales) || dataset.yAxisID) {
+ meta.yAxisID = dataset.yAxisID || scalesOpts.yAxes[0].id;
+ }
+ },
+
+ getDataset: function() {
+ return this.chart.data.datasets[this.index];
+ },
+
+ getMeta: function() {
+ return this.chart.getDatasetMeta(this.index);
+ },
+
+ getScaleForId: function(scaleID) {
+ return this.chart.scales[scaleID];
+ },
+
+ /**
+ * @private
+ */
+ _getValueScaleId: function() {
+ return this.getMeta().yAxisID;
+ },
+
+ /**
+ * @private
+ */
+ _getIndexScaleId: function() {
+ return this.getMeta().xAxisID;
+ },
+
+ /**
+ * @private
+ */
+ _getValueScale: function() {
+ return this.getScaleForId(this._getValueScaleId());
+ },
+
+ /**
+ * @private
+ */
+ _getIndexScale: function() {
+ return this.getScaleForId(this._getIndexScaleId());
+ },
+
+ reset: function() {
+ this._update(true);
+ },
+
+ /**
+ * @private
+ */
+ destroy: function() {
+ if (this._data) {
+ unlistenArrayEvents(this._data, this);
+ }
+ },
+
+ createMetaDataset: function() {
+ var me = this;
+ var type = me.datasetElementType;
+ return type && new type({
+ _chart: me.chart,
+ _datasetIndex: me.index
+ });
+ },
+
+ createMetaData: function(index) {
+ var me = this;
+ var type = me.dataElementType;
+ return type && new type({
+ _chart: me.chart,
+ _datasetIndex: me.index,
+ _index: index
+ });
+ },
+
+ addElements: function() {
+ var me = this;
+ var meta = me.getMeta();
+ var data = me.getDataset().data || [];
+ var metaData = meta.data;
+ var i, ilen;
+
+ for (i = 0, ilen = data.length; i < ilen; ++i) {
+ metaData[i] = metaData[i] || me.createMetaData(i);
+ }
+
+ meta.dataset = meta.dataset || me.createMetaDataset();
+ },
+
+ addElementAndReset: function(index) {
+ var element = this.createMetaData(index);
+ this.getMeta().data.splice(index, 0, element);
+ this.updateElement(element, index, true);
+ },
+
+ buildOrUpdateElements: function() {
+ var me = this;
+ var dataset = me.getDataset();
+ var data = dataset.data || (dataset.data = []);
+
+ // In order to correctly handle data addition/deletion animation (an thus simulate
+ // real-time charts), we need to monitor these data modifications and synchronize
+ // the internal meta data accordingly.
+ if (me._data !== data) {
+ if (me._data) {
+ // This case happens when the user replaced the data array instance.
+ unlistenArrayEvents(me._data, me);
+ }
+
+ if (data && Object.isExtensible(data)) {
+ listenArrayEvents(data, me);
+ }
+ me._data = data;
+ }
+
+ // Re-sync meta data in case the user replaced the data array or if we missed
+ // any updates and so make sure that we handle number of datapoints changing.
+ me.resyncElements();
+ },
+
+ /**
+ * Returns the merged user-supplied and default dataset-level options
+ * @private
+ */
+ _configure: function() {
+ var me = this;
+ me._config = helpers$1.merge({}, [
+ me.chart.options.datasets[me._type],
+ me.getDataset(),
+ ], {
+ merger: function(key, target, source) {
+ if (key !== '_meta' && key !== 'data') {
+ helpers$1._merger(key, target, source);
+ }
+ }
+ });
+ },
+
+ _update: function(reset) {
+ var me = this;
+ me._configure();
+ me._cachedDataOpts = null;
+ me.update(reset);
+ },
+
+ update: helpers$1.noop,
+
+ transition: function(easingValue) {
+ var meta = this.getMeta();
+ var elements = meta.data || [];
+ var ilen = elements.length;
+ var i = 0;
+
+ for (; i < ilen; ++i) {
+ elements[i].transition(easingValue);
+ }
+
+ if (meta.dataset) {
+ meta.dataset.transition(easingValue);
+ }
+ },
+
+ draw: function() {
+ var meta = this.getMeta();
+ var elements = meta.data || [];
+ var ilen = elements.length;
+ var i = 0;
+
+ if (meta.dataset) {
+ meta.dataset.draw();
+ }
+
+ for (; i < ilen; ++i) {
+ elements[i].draw();
+ }
+ },
+
+ /**
+ * Returns a set of predefined style properties that should be used to represent the dataset
+ * or the data if the index is specified
+ * @param {number} index - data index
+ * @return {IStyleInterface} style object
+ */
+ getStyle: function(index) {
+ var me = this;
+ var meta = me.getMeta();
+ var dataset = meta.dataset;
+ var style;
+
+ me._configure();
+ if (dataset && index === undefined) {
+ style = me._resolveDatasetElementOptions(dataset || {});
+ } else {
+ index = index || 0;
+ style = me._resolveDataElementOptions(meta.data[index] || {}, index);
+ }
+
+ if (style.fill === false || style.fill === null) {
+ style.backgroundColor = style.borderColor;
+ }
+
+ return style;
+ },
+
+ /**
+ * @private
+ */
+ _resolveDatasetElementOptions: function(element, hover) {
+ var me = this;
+ var chart = me.chart;
+ var datasetOpts = me._config;
+ var custom = element.custom || {};
+ var options = chart.options.elements[me.datasetElementType.prototype._type] || {};
+ var elementOptions = me._datasetElementOptions;
+ var values = {};
+ var i, ilen, key, readKey;
+
+ // Scriptable options
+ var context = {
+ chart: chart,
+ dataset: me.getDataset(),
+ datasetIndex: me.index,
+ hover: hover
+ };
+
+ for (i = 0, ilen = elementOptions.length; i < ilen; ++i) {
+ key = elementOptions[i];
+ readKey = hover ? 'hover' + key.charAt(0).toUpperCase() + key.slice(1) : key;
+ values[key] = resolve([
+ custom[readKey],
+ datasetOpts[readKey],
+ options[readKey]
+ ], context);
+ }
+
+ return values;
+ },
+
+ /**
+ * @private
+ */
+ _resolveDataElementOptions: function(element, index) {
+ var me = this;
+ var custom = element && element.custom;
+ var cached = me._cachedDataOpts;
+ if (cached && !custom) {
+ return cached;
+ }
+ var chart = me.chart;
+ var datasetOpts = me._config;
+ var options = chart.options.elements[me.dataElementType.prototype._type] || {};
+ var elementOptions = me._dataElementOptions;
+ var values = {};
+
+ // Scriptable options
+ var context = {
+ chart: chart,
+ dataIndex: index,
+ dataset: me.getDataset(),
+ datasetIndex: me.index
+ };
+
+ // `resolve` sets cacheable to `false` if any option is indexed or scripted
+ var info = {cacheable: !custom};
+
+ var keys, i, ilen, key;
+
+ custom = custom || {};
+
+ if (helpers$1.isArray(elementOptions)) {
+ for (i = 0, ilen = elementOptions.length; i < ilen; ++i) {
+ key = elementOptions[i];
+ values[key] = resolve([
+ custom[key],
+ datasetOpts[key],
+ options[key]
+ ], context, index, info);
+ }
+ } else {
+ keys = Object.keys(elementOptions);
+ for (i = 0, ilen = keys.length; i < ilen; ++i) {
+ key = keys[i];
+ values[key] = resolve([
+ custom[key],
+ datasetOpts[elementOptions[key]],
+ datasetOpts[key],
+ options[key]
+ ], context, index, info);
+ }
+ }
+
+ if (info.cacheable) {
+ me._cachedDataOpts = Object.freeze(values);
+ }
+
+ return values;
+ },
+
+ removeHoverStyle: function(element) {
+ helpers$1.merge(element._model, element.$previousStyle || {});
+ delete element.$previousStyle;
+ },
+
+ setHoverStyle: function(element) {
+ var dataset = this.chart.data.datasets[element._datasetIndex];
+ var index = element._index;
+ var custom = element.custom || {};
+ var model = element._model;
+ var getHoverColor = helpers$1.getHoverColor;
+
+ element.$previousStyle = {
+ backgroundColor: model.backgroundColor,
+ borderColor: model.borderColor,
+ borderWidth: model.borderWidth
+ };
+
+ model.backgroundColor = resolve([custom.hoverBackgroundColor, dataset.hoverBackgroundColor, getHoverColor(model.backgroundColor)], undefined, index);
+ model.borderColor = resolve([custom.hoverBorderColor, dataset.hoverBorderColor, getHoverColor(model.borderColor)], undefined, index);
+ model.borderWidth = resolve([custom.hoverBorderWidth, dataset.hoverBorderWidth, model.borderWidth], undefined, index);
+ },
+
+ /**
+ * @private
+ */
+ _removeDatasetHoverStyle: function() {
+ var element = this.getMeta().dataset;
+
+ if (element) {
+ this.removeHoverStyle(element);
+ }
+ },
+
+ /**
+ * @private
+ */
+ _setDatasetHoverStyle: function() {
+ var element = this.getMeta().dataset;
+ var prev = {};
+ var i, ilen, key, keys, hoverOptions, model;
+
+ if (!element) {
+ return;
+ }
+
+ model = element._model;
+ hoverOptions = this._resolveDatasetElementOptions(element, true);
+
+ keys = Object.keys(hoverOptions);
+ for (i = 0, ilen = keys.length; i < ilen; ++i) {
+ key = keys[i];
+ prev[key] = model[key];
+ model[key] = hoverOptions[key];
+ }
+
+ element.$previousStyle = prev;
+ },
+
+ /**
+ * @private
+ */
+ resyncElements: function() {
+ var me = this;
+ var meta = me.getMeta();
+ var data = me.getDataset().data;
+ var numMeta = meta.data.length;
+ var numData = data.length;
+
+ if (numData < numMeta) {
+ meta.data.splice(numData, numMeta - numData);
+ } else if (numData > numMeta) {
+ me.insertElements(numMeta, numData - numMeta);
+ }
+ },
+
+ /**
+ * @private
+ */
+ insertElements: function(start, count) {
+ for (var i = 0; i < count; ++i) {
+ this.addElementAndReset(start + i);
+ }
+ },
+
+ /**
+ * @private
+ */
+ onDataPush: function() {
+ var count = arguments.length;
+ this.insertElements(this.getDataset().data.length - count, count);
+ },
+
+ /**
+ * @private
+ */
+ onDataPop: function() {
+ this.getMeta().data.pop();
+ },
+
+ /**
+ * @private
+ */
+ onDataShift: function() {
+ this.getMeta().data.shift();
+ },
+
+ /**
+ * @private
+ */
+ onDataSplice: function(start, count) {
+ this.getMeta().data.splice(start, count);
+ this.insertElements(start, arguments.length - 2);
+ },
+
+ /**
+ * @private
+ */
+ onDataUnshift: function() {
+ this.insertElements(0, arguments.length);
+ }
+});
+
+DatasetController.extend = helpers$1.inherits;
+
+var core_datasetController = DatasetController;
+
+var TAU = Math.PI * 2;
+
+core_defaults._set('global', {
+ elements: {
+ arc: {
+ backgroundColor: core_defaults.global.defaultColor,
+ borderColor: '#fff',
+ borderWidth: 2,
+ borderAlign: 'center'
+ }
+ }
+});
+
+function clipArc(ctx, arc) {
+ var startAngle = arc.startAngle;
+ var endAngle = arc.endAngle;
+ var pixelMargin = arc.pixelMargin;
+ var angleMargin = pixelMargin / arc.outerRadius;
+ var x = arc.x;
+ var y = arc.y;
+
+ // Draw an inner border by cliping the arc and drawing a double-width border
+ // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders
+ ctx.beginPath();
+ ctx.arc(x, y, arc.outerRadius, startAngle - angleMargin, endAngle + angleMargin);
+ if (arc.innerRadius > pixelMargin) {
+ angleMargin = pixelMargin / arc.innerRadius;
+ ctx.arc(x, y, arc.innerRadius - pixelMargin, endAngle + angleMargin, startAngle - angleMargin, true);
+ } else {
+ ctx.arc(x, y, pixelMargin, endAngle + Math.PI / 2, startAngle - Math.PI / 2);
+ }
+ ctx.closePath();
+ ctx.clip();
+}
+
+function drawFullCircleBorders(ctx, vm, arc, inner) {
+ var endAngle = arc.endAngle;
+ var i;
+
+ if (inner) {
+ arc.endAngle = arc.startAngle + TAU;
+ clipArc(ctx, arc);
+ arc.endAngle = endAngle;
+ if (arc.endAngle === arc.startAngle && arc.fullCircles) {
+ arc.endAngle += TAU;
+ arc.fullCircles--;
+ }
+ }
+
+ ctx.beginPath();
+ ctx.arc(arc.x, arc.y, arc.innerRadius, arc.startAngle + TAU, arc.startAngle, true);
+ for (i = 0; i < arc.fullCircles; ++i) {
+ ctx.stroke();
+ }
+
+ ctx.beginPath();
+ ctx.arc(arc.x, arc.y, vm.outerRadius, arc.startAngle, arc.startAngle + TAU);
+ for (i = 0; i < arc.fullCircles; ++i) {
+ ctx.stroke();
+ }
+}
+
+function drawBorder(ctx, vm, arc) {
+ var inner = vm.borderAlign === 'inner';
+
+ if (inner) {
+ ctx.lineWidth = vm.borderWidth * 2;
+ ctx.lineJoin = 'round';
+ } else {
+ ctx.lineWidth = vm.borderWidth;
+ ctx.lineJoin = 'bevel';
+ }
+
+ if (arc.fullCircles) {
+ drawFullCircleBorders(ctx, vm, arc, inner);
+ }
+
+ if (inner) {
+ clipArc(ctx, arc);
+ }
+
+ ctx.beginPath();
+ ctx.arc(arc.x, arc.y, vm.outerRadius, arc.startAngle, arc.endAngle);
+ ctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true);
+ ctx.closePath();
+ ctx.stroke();
+}
+
+var element_arc = core_element.extend({
+ _type: 'arc',
+
+ inLabelRange: function(mouseX) {
+ var vm = this._view;
+
+ if (vm) {
+ return (Math.pow(mouseX - vm.x, 2) < Math.pow(vm.radius + vm.hoverRadius, 2));
+ }
+ return false;
+ },
+
+ inRange: function(chartX, chartY) {
+ var vm = this._view;
+
+ if (vm) {
+ var pointRelativePosition = helpers$1.getAngleFromPoint(vm, {x: chartX, y: chartY});
+ var angle = pointRelativePosition.angle;
+ var distance = pointRelativePosition.distance;
+
+ // Sanitise angle range
+ var startAngle = vm.startAngle;
+ var endAngle = vm.endAngle;
+ while (endAngle < startAngle) {
+ endAngle += TAU;
+ }
+ while (angle > endAngle) {
+ angle -= TAU;
+ }
+ while (angle < startAngle) {
+ angle += TAU;
+ }
+
+ // Check if within the range of the open/close angle
+ var betweenAngles = (angle >= startAngle && angle <= endAngle);
+ var withinRadius = (distance >= vm.innerRadius && distance <= vm.outerRadius);
+
+ return (betweenAngles && withinRadius);
+ }
+ return false;
+ },
+
+ getCenterPoint: function() {
+ var vm = this._view;
+ var halfAngle = (vm.startAngle + vm.endAngle) / 2;
+ var halfRadius = (vm.innerRadius + vm.outerRadius) / 2;
+ return {
+ x: vm.x + Math.cos(halfAngle) * halfRadius,
+ y: vm.y + Math.sin(halfAngle) * halfRadius
+ };
+ },
+
+ getArea: function() {
+ var vm = this._view;
+ return Math.PI * ((vm.endAngle - vm.startAngle) / (2 * Math.PI)) * (Math.pow(vm.outerRadius, 2) - Math.pow(vm.innerRadius, 2));
+ },
+
+ tooltipPosition: function() {
+ var vm = this._view;
+ var centreAngle = vm.startAngle + ((vm.endAngle - vm.startAngle) / 2);
+ var rangeFromCentre = (vm.outerRadius - vm.innerRadius) / 2 + vm.innerRadius;
+
+ return {
+ x: vm.x + (Math.cos(centreAngle) * rangeFromCentre),
+ y: vm.y + (Math.sin(centreAngle) * rangeFromCentre)
+ };
+ },
+
+ draw: function() {
+ var ctx = this._chart.ctx;
+ var vm = this._view;
+ var pixelMargin = (vm.borderAlign === 'inner') ? 0.33 : 0;
+ var arc = {
+ x: vm.x,
+ y: vm.y,
+ innerRadius: vm.innerRadius,
+ outerRadius: Math.max(vm.outerRadius - pixelMargin, 0),
+ pixelMargin: pixelMargin,
+ startAngle: vm.startAngle,
+ endAngle: vm.endAngle,
+ fullCircles: Math.floor(vm.circumference / TAU)
+ };
+ var i;
+
+ ctx.save();
+
+ ctx.fillStyle = vm.backgroundColor;
+ ctx.strokeStyle = vm.borderColor;
+
+ if (arc.fullCircles) {
+ arc.endAngle = arc.startAngle + TAU;
+ ctx.beginPath();
+ ctx.arc(arc.x, arc.y, arc.outerRadius, arc.startAngle, arc.endAngle);
+ ctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true);
+ ctx.closePath();
+ for (i = 0; i < arc.fullCircles; ++i) {
+ ctx.fill();
+ }
+ arc.endAngle = arc.startAngle + vm.circumference % TAU;
+ }
+
+ ctx.beginPath();
+ ctx.arc(arc.x, arc.y, arc.outerRadius, arc.startAngle, arc.endAngle);
+ ctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true);
+ ctx.closePath();
+ ctx.fill();
+
+ if (vm.borderWidth) {
+ drawBorder(ctx, vm, arc);
+ }
+
+ ctx.restore();
+ }
+});
+
+var valueOrDefault$1 = helpers$1.valueOrDefault;
+
+var defaultColor = core_defaults.global.defaultColor;
+
+core_defaults._set('global', {
+ elements: {
+ line: {
+ tension: 0.4,
+ backgroundColor: defaultColor,
+ borderWidth: 3,
+ borderColor: defaultColor,
+ borderCapStyle: 'butt',
+ borderDash: [],
+ borderDashOffset: 0.0,
+ borderJoinStyle: 'miter',
+ capBezierPoints: true,
+ fill: true, // do we fill in the area between the line and its base axis
+ }
+ }
+});
+
+var element_line = core_element.extend({
+ _type: 'line',
+
+ draw: function() {
+ var me = this;
+ var vm = me._view;
+ var ctx = me._chart.ctx;
+ var spanGaps = vm.spanGaps;
+ var points = me._children.slice(); // clone array
+ var globalDefaults = core_defaults.global;
+ var globalOptionLineElements = globalDefaults.elements.line;
+ var lastDrawnIndex = -1;
+ var closePath = me._loop;
+ var index, previous, currentVM;
+
+ if (!points.length) {
+ return;
+ }
+
+ if (me._loop) {
+ for (index = 0; index < points.length; ++index) {
+ previous = helpers$1.previousItem(points, index);
+ // If the line has an open path, shift the point array
+ if (!points[index]._view.skip && previous._view.skip) {
+ points = points.slice(index).concat(points.slice(0, index));
+ closePath = spanGaps;
+ break;
+ }
+ }
+ // If the line has a close path, add the first point again
+ if (closePath) {
+ points.push(points[0]);
+ }
+ }
+
+ ctx.save();
+
+ // Stroke Line Options
+ ctx.lineCap = vm.borderCapStyle || globalOptionLineElements.borderCapStyle;
+
+ // IE 9 and 10 do not support line dash
+ if (ctx.setLineDash) {
+ ctx.setLineDash(vm.borderDash || globalOptionLineElements.borderDash);
+ }
+
+ ctx.lineDashOffset = valueOrDefault$1(vm.borderDashOffset, globalOptionLineElements.borderDashOffset);
+ ctx.lineJoin = vm.borderJoinStyle || globalOptionLineElements.borderJoinStyle;
+ ctx.lineWidth = valueOrDefault$1(vm.borderWidth, globalOptionLineElements.borderWidth);
+ ctx.strokeStyle = vm.borderColor || globalDefaults.defaultColor;
+
+ // Stroke Line
+ ctx.beginPath();
+
+ // First point moves to it's starting position no matter what
+ currentVM = points[0]._view;
+ if (!currentVM.skip) {
+ ctx.moveTo(currentVM.x, currentVM.y);
+ lastDrawnIndex = 0;
+ }
+
+ for (index = 1; index < points.length; ++index) {
+ currentVM = points[index]._view;
+ previous = lastDrawnIndex === -1 ? helpers$1.previousItem(points, index) : points[lastDrawnIndex];
+
+ if (!currentVM.skip) {
+ if ((lastDrawnIndex !== (index - 1) && !spanGaps) || lastDrawnIndex === -1) {
+ // There was a gap and this is the first point after the gap
+ ctx.moveTo(currentVM.x, currentVM.y);
+ } else {
+ // Line to next point
+ helpers$1.canvas.lineTo(ctx, previous._view, currentVM);
+ }
+ lastDrawnIndex = index;
+ }
+ }
+
+ if (closePath) {
+ ctx.closePath();
+ }
+
+ ctx.stroke();
+ ctx.restore();
+ }
+});
+
+var valueOrDefault$2 = helpers$1.valueOrDefault;
+
+var defaultColor$1 = core_defaults.global.defaultColor;
+
+core_defaults._set('global', {
+ elements: {
+ point: {
+ radius: 3,
+ pointStyle: 'circle',
+ backgroundColor: defaultColor$1,
+ borderColor: defaultColor$1,
+ borderWidth: 1,
+ // Hover
+ hitRadius: 1,
+ hoverRadius: 4,
+ hoverBorderWidth: 1
+ }
+ }
+});
+
+function xRange(mouseX) {
+ var vm = this._view;
+ return vm ? (Math.abs(mouseX - vm.x) < vm.radius + vm.hitRadius) : false;
+}
+
+function yRange(mouseY) {
+ var vm = this._view;
+ return vm ? (Math.abs(mouseY - vm.y) < vm.radius + vm.hitRadius) : false;
+}
+
+var element_point = core_element.extend({
+ _type: 'point',
+
+ inRange: function(mouseX, mouseY) {
+ var vm = this._view;
+ return vm ? ((Math.pow(mouseX - vm.x, 2) + Math.pow(mouseY - vm.y, 2)) < Math.pow(vm.hitRadius + vm.radius, 2)) : false;
+ },
+
+ inLabelRange: xRange,
+ inXRange: xRange,
+ inYRange: yRange,
+
+ getCenterPoint: function() {
+ var vm = this._view;
+ return {
+ x: vm.x,
+ y: vm.y
+ };
+ },
+
+ getArea: function() {
+ return Math.PI * Math.pow(this._view.radius, 2);
+ },
+
+ tooltipPosition: function() {
+ var vm = this._view;
+ return {
+ x: vm.x,
+ y: vm.y,
+ padding: vm.radius + vm.borderWidth
+ };
+ },
+
+ draw: function(chartArea) {
+ var vm = this._view;
+ var ctx = this._chart.ctx;
+ var pointStyle = vm.pointStyle;
+ var rotation = vm.rotation;
+ var radius = vm.radius;
+ var x = vm.x;
+ var y = vm.y;
+ var globalDefaults = core_defaults.global;
+ var defaultColor = globalDefaults.defaultColor; // eslint-disable-line no-shadow
+
+ if (vm.skip) {
+ return;
+ }
+
+ // Clipping for Points.
+ if (chartArea === undefined || helpers$1.canvas._isPointInArea(vm, chartArea)) {
+ ctx.strokeStyle = vm.borderColor || defaultColor;
+ ctx.lineWidth = valueOrDefault$2(vm.borderWidth, globalDefaults.elements.point.borderWidth);
+ ctx.fillStyle = vm.backgroundColor || defaultColor;
+ helpers$1.canvas.drawPoint(ctx, pointStyle, radius, x, y, rotation);
+ }
+ }
+});
+
+var defaultColor$2 = core_defaults.global.defaultColor;
+
+core_defaults._set('global', {
+ elements: {
+ rectangle: {
+ backgroundColor: defaultColor$2,
+ borderColor: defaultColor$2,
+ borderSkipped: 'bottom',
+ borderWidth: 0
+ }
+ }
+});
+
+function isVertical(vm) {
+ return vm && vm.width !== undefined;
+}
+
+/**
+ * Helper function to get the bounds of the bar regardless of the orientation
+ * @param bar {Chart.Element.Rectangle} the bar
+ * @return {Bounds} bounds of the bar
+ * @private
+ */
+function getBarBounds(vm) {
+ var x1, x2, y1, y2, half;
+
+ if (isVertical(vm)) {
+ half = vm.width / 2;
+ x1 = vm.x - half;
+ x2 = vm.x + half;
+ y1 = Math.min(vm.y, vm.base);
+ y2 = Math.max(vm.y, vm.base);
+ } else {
+ half = vm.height / 2;
+ x1 = Math.min(vm.x, vm.base);
+ x2 = Math.max(vm.x, vm.base);
+ y1 = vm.y - half;
+ y2 = vm.y + half;
+ }
+
+ return {
+ left: x1,
+ top: y1,
+ right: x2,
+ bottom: y2
+ };
+}
+
+function swap(orig, v1, v2) {
+ return orig === v1 ? v2 : orig === v2 ? v1 : orig;
+}
+
+function parseBorderSkipped(vm) {
+ var edge = vm.borderSkipped;
+ var res = {};
+
+ if (!edge) {
+ return res;
+ }
+
+ if (vm.horizontal) {
+ if (vm.base > vm.x) {
+ edge = swap(edge, 'left', 'right');
+ }
+ } else if (vm.base < vm.y) {
+ edge = swap(edge, 'bottom', 'top');
+ }
+
+ res[edge] = true;
+ return res;
+}
+
+function parseBorderWidth(vm, maxW, maxH) {
+ var value = vm.borderWidth;
+ var skip = parseBorderSkipped(vm);
+ var t, r, b, l;
+
+ if (helpers$1.isObject(value)) {
+ t = +value.top || 0;
+ r = +value.right || 0;
+ b = +value.bottom || 0;
+ l = +value.left || 0;
+ } else {
+ t = r = b = l = +value || 0;
+ }
+
+ return {
+ t: skip.top || (t < 0) ? 0 : t > maxH ? maxH : t,
+ r: skip.right || (r < 0) ? 0 : r > maxW ? maxW : r,
+ b: skip.bottom || (b < 0) ? 0 : b > maxH ? maxH : b,
+ l: skip.left || (l < 0) ? 0 : l > maxW ? maxW : l
+ };
+}
+
+function boundingRects(vm) {
+ var bounds = getBarBounds(vm);
+ var width = bounds.right - bounds.left;
+ var height = bounds.bottom - bounds.top;
+ var border = parseBorderWidth(vm, width / 2, height / 2);
+
+ return {
+ outer: {
+ x: bounds.left,
+ y: bounds.top,
+ w: width,
+ h: height
+ },
+ inner: {
+ x: bounds.left + border.l,
+ y: bounds.top + border.t,
+ w: width - border.l - border.r,
+ h: height - border.t - border.b
+ }
+ };
+}
+
+function inRange(vm, x, y) {
+ var skipX = x === null;
+ var skipY = y === null;
+ var bounds = !vm || (skipX && skipY) ? false : getBarBounds(vm);
+
+ return bounds
+ && (skipX || x >= bounds.left && x <= bounds.right)
+ && (skipY || y >= bounds.top && y <= bounds.bottom);
+}
+
+var element_rectangle = core_element.extend({
+ _type: 'rectangle',
+
+ draw: function() {
+ var ctx = this._chart.ctx;
+ var vm = this._view;
+ var rects = boundingRects(vm);
+ var outer = rects.outer;
+ var inner = rects.inner;
+
+ ctx.fillStyle = vm.backgroundColor;
+ ctx.fillRect(outer.x, outer.y, outer.w, outer.h);
+
+ if (outer.w === inner.w && outer.h === inner.h) {
+ return;
+ }
+
+ ctx.save();
+ ctx.beginPath();
+ ctx.rect(outer.x, outer.y, outer.w, outer.h);
+ ctx.clip();
+ ctx.fillStyle = vm.borderColor;
+ ctx.rect(inner.x, inner.y, inner.w, inner.h);
+ ctx.fill('evenodd');
+ ctx.restore();
+ },
+
+ height: function() {
+ var vm = this._view;
+ return vm.base - vm.y;
+ },
+
+ inRange: function(mouseX, mouseY) {
+ return inRange(this._view, mouseX, mouseY);
+ },
+
+ inLabelRange: function(mouseX, mouseY) {
+ var vm = this._view;
+ return isVertical(vm)
+ ? inRange(vm, mouseX, null)
+ : inRange(vm, null, mouseY);
+ },
+
+ inXRange: function(mouseX) {
+ return inRange(this._view, mouseX, null);
+ },
+
+ inYRange: function(mouseY) {
+ return inRange(this._view, null, mouseY);
+ },
+
+ getCenterPoint: function() {
+ var vm = this._view;
+ var x, y;
+ if (isVertical(vm)) {
+ x = vm.x;
+ y = (vm.y + vm.base) / 2;
+ } else {
+ x = (vm.x + vm.base) / 2;
+ y = vm.y;
+ }
+
+ return {x: x, y: y};
+ },
+
+ getArea: function() {
+ var vm = this._view;
+
+ return isVertical(vm)
+ ? vm.width * Math.abs(vm.y - vm.base)
+ : vm.height * Math.abs(vm.x - vm.base);
+ },
+
+ tooltipPosition: function() {
+ var vm = this._view;
+ return {
+ x: vm.x,
+ y: vm.y
+ };
+ }
+});
+
+var elements = {};
+var Arc = element_arc;
+var Line = element_line;
+var Point = element_point;
+var Rectangle = element_rectangle;
+elements.Arc = Arc;
+elements.Line = Line;
+elements.Point = Point;
+elements.Rectangle = Rectangle;
+
+var deprecated = helpers$1._deprecated;
+var valueOrDefault$3 = helpers$1.valueOrDefault;
+
+core_defaults._set('bar', {
+ hover: {
+ mode: 'label'
+ },
+
+ scales: {
+ xAxes: [{
+ type: 'category',
+ offset: true,
+ gridLines: {
+ offsetGridLines: true
+ }
+ }],
+
+ yAxes: [{
+ type: 'linear'
+ }]
+ }
+});
+
+core_defaults._set('global', {
+ datasets: {
+ bar: {
+ categoryPercentage: 0.8,
+ barPercentage: 0.9
+ }
+ }
+});
+
+/**
+ * Computes the "optimal" sample size to maintain bars equally sized while preventing overlap.
+ * @private
+ */
+function computeMinSampleSize(scale, pixels) {
+ var min = scale._length;
+ var prev, curr, i, ilen;
+
+ for (i = 1, ilen = pixels.length; i < ilen; ++i) {
+ min = Math.min(min, Math.abs(pixels[i] - pixels[i - 1]));
+ }
+
+ for (i = 0, ilen = scale.getTicks().length; i < ilen; ++i) {
+ curr = scale.getPixelForTick(i);
+ min = i > 0 ? Math.min(min, Math.abs(curr - prev)) : min;
+ prev = curr;
+ }
+
+ return min;
+}
+
+/**
+ * Computes an "ideal" category based on the absolute bar thickness or, if undefined or null,
+ * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This
+ * mode currently always generates bars equally sized (until we introduce scriptable options?).
+ * @private
+ */
+function computeFitCategoryTraits(index, ruler, options) {
+ var thickness = options.barThickness;
+ var count = ruler.stackCount;
+ var curr = ruler.pixels[index];
+ var min = helpers$1.isNullOrUndef(thickness)
+ ? computeMinSampleSize(ruler.scale, ruler.pixels)
+ : -1;
+ var size, ratio;
+
+ if (helpers$1.isNullOrUndef(thickness)) {
+ size = min * options.categoryPercentage;
+ ratio = options.barPercentage;
+ } else {
+ // When bar thickness is enforced, category and bar percentages are ignored.
+ // Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')
+ // and deprecate barPercentage since this value is ignored when thickness is absolute.
+ size = thickness * count;
+ ratio = 1;
+ }
+
+ return {
+ chunk: size / count,
+ ratio: ratio,
+ start: curr - (size / 2)
+ };
+}
+
+/**
+ * Computes an "optimal" category that globally arranges bars side by side (no gap when
+ * percentage options are 1), based on the previous and following categories. This mode
+ * generates bars with different widths when data are not evenly spaced.
+ * @private
+ */
+function computeFlexCategoryTraits(index, ruler, options) {
+ var pixels = ruler.pixels;
+ var curr = pixels[index];
+ var prev = index > 0 ? pixels[index - 1] : null;
+ var next = index < pixels.length - 1 ? pixels[index + 1] : null;
+ var percent = options.categoryPercentage;
+ var start, size;
+
+ if (prev === null) {
+ // first data: its size is double based on the next point or,
+ // if it's also the last data, we use the scale size.
+ prev = curr - (next === null ? ruler.end - ruler.start : next - curr);
+ }
+
+ if (next === null) {
+ // last data: its size is also double based on the previous point.
+ next = curr + curr - prev;
+ }
+
+ start = curr - (curr - Math.min(prev, next)) / 2 * percent;
+ size = Math.abs(next - prev) / 2 * percent;
+
+ return {
+ chunk: size / ruler.stackCount,
+ ratio: options.barPercentage,
+ start: start
+ };
+}
+
+var controller_bar = core_datasetController.extend({
+
+ dataElementType: elements.Rectangle,
+
+ /**
+ * @private
+ */
+ _dataElementOptions: [
+ 'backgroundColor',
+ 'borderColor',
+ 'borderSkipped',
+ 'borderWidth',
+ 'barPercentage',
+ 'barThickness',
+ 'categoryPercentage',
+ 'maxBarThickness',
+ 'minBarLength'
+ ],
+
+ initialize: function() {
+ var me = this;
+ var meta, scaleOpts;
+
+ core_datasetController.prototype.initialize.apply(me, arguments);
+
+ meta = me.getMeta();
+ meta.stack = me.getDataset().stack;
+ meta.bar = true;
+
+ scaleOpts = me._getIndexScale().options;
+ deprecated('bar chart', scaleOpts.barPercentage, 'scales.[x/y]Axes.barPercentage', 'dataset.barPercentage');
+ deprecated('bar chart', scaleOpts.barThickness, 'scales.[x/y]Axes.barThickness', 'dataset.barThickness');
+ deprecated('bar chart', scaleOpts.categoryPercentage, 'scales.[x/y]Axes.categoryPercentage', 'dataset.categoryPercentage');
+ deprecated('bar chart', me._getValueScale().options.minBarLength, 'scales.[x/y]Axes.minBarLength', 'dataset.minBarLength');
+ deprecated('bar chart', scaleOpts.maxBarThickness, 'scales.[x/y]Axes.maxBarThickness', 'dataset.maxBarThickness');
+ },
+
+ update: function(reset) {
+ var me = this;
+ var rects = me.getMeta().data;
+ var i, ilen;
+
+ me._ruler = me.getRuler();
+
+ for (i = 0, ilen = rects.length; i < ilen; ++i) {
+ me.updateElement(rects[i], i, reset);
+ }
+ },
+
+ updateElement: function(rectangle, index, reset) {
+ var me = this;
+ var meta = me.getMeta();
+ var dataset = me.getDataset();
+ var options = me._resolveDataElementOptions(rectangle, index);
+
+ rectangle._xScale = me.getScaleForId(meta.xAxisID);
+ rectangle._yScale = me.getScaleForId(meta.yAxisID);
+ rectangle._datasetIndex = me.index;
+ rectangle._index = index;
+ rectangle._model = {
+ backgroundColor: options.backgroundColor,
+ borderColor: options.borderColor,
+ borderSkipped: options.borderSkipped,
+ borderWidth: options.borderWidth,
+ datasetLabel: dataset.label,
+ label: me.chart.data.labels[index]
+ };
+
+ if (helpers$1.isArray(dataset.data[index])) {
+ rectangle._model.borderSkipped = null;
+ }
+
+ me._updateElementGeometry(rectangle, index, reset, options);
+
+ rectangle.pivot();
+ },
+
+ /**
+ * @private
+ */
+ _updateElementGeometry: function(rectangle, index, reset, options) {
+ var me = this;
+ var model = rectangle._model;
+ var vscale = me._getValueScale();
+ var base = vscale.getBasePixel();
+ var horizontal = vscale.isHorizontal();
+ var ruler = me._ruler || me.getRuler();
+ var vpixels = me.calculateBarValuePixels(me.index, index, options);
+ var ipixels = me.calculateBarIndexPixels(me.index, index, ruler, options);
+
+ model.horizontal = horizontal;
+ model.base = reset ? base : vpixels.base;
+ model.x = horizontal ? reset ? base : vpixels.head : ipixels.center;
+ model.y = horizontal ? ipixels.center : reset ? base : vpixels.head;
+ model.height = horizontal ? ipixels.size : undefined;
+ model.width = horizontal ? undefined : ipixels.size;
+ },
+
+ /**
+ * Returns the stacks based on groups and bar visibility.
+ * @param {number} [last] - The dataset index
+ * @returns {string[]} The list of stack IDs
+ * @private
+ */
+ _getStacks: function(last) {
+ var me = this;
+ var scale = me._getIndexScale();
+ var metasets = scale._getMatchingVisibleMetas(me._type);
+ var stacked = scale.options.stacked;
+ var ilen = metasets.length;
+ var stacks = [];
+ var i, meta;
+
+ for (i = 0; i < ilen; ++i) {
+ meta = metasets[i];
+ // stacked | meta.stack
+ // | found | not found | undefined
+ // false | x | x | x
+ // true | | x |
+ // undefined | | x | x
+ if (stacked === false || stacks.indexOf(meta.stack) === -1 ||
+ (stacked === undefined && meta.stack === undefined)) {
+ stacks.push(meta.stack);
+ }
+ if (meta.index === last) {
+ break;
+ }
+ }
+
+ return stacks;
+ },
+
+ /**
+ * Returns the effective number of stacks based on groups and bar visibility.
+ * @private
+ */
+ getStackCount: function() {
+ return this._getStacks().length;
+ },
+
+ /**
+ * Returns the stack index for the given dataset based on groups and bar visibility.
+ * @param {number} [datasetIndex] - The dataset index
+ * @param {string} [name] - The stack name to find
+ * @returns {number} The stack index
+ * @private
+ */
+ getStackIndex: function(datasetIndex, name) {
+ var stacks = this._getStacks(datasetIndex);
+ var index = (name !== undefined)
+ ? stacks.indexOf(name)
+ : -1; // indexOf returns -1 if element is not present
+
+ return (index === -1)
+ ? stacks.length - 1
+ : index;
+ },
+
+ /**
+ * @private
+ */
+ getRuler: function() {
+ var me = this;
+ var scale = me._getIndexScale();
+ var pixels = [];
+ var i, ilen;
+
+ for (i = 0, ilen = me.getMeta().data.length; i < ilen; ++i) {
+ pixels.push(scale.getPixelForValue(null, i, me.index));
+ }
+
+ return {
+ pixels: pixels,
+ start: scale._startPixel,
+ end: scale._endPixel,
+ stackCount: me.getStackCount(),
+ scale: scale
+ };
+ },
+
+ /**
+ * Note: pixel values are not clamped to the scale area.
+ * @private
+ */
+ calculateBarValuePixels: function(datasetIndex, index, options) {
+ var me = this;
+ var chart = me.chart;
+ var scale = me._getValueScale();
+ var isHorizontal = scale.isHorizontal();
+ var datasets = chart.data.datasets;
+ var metasets = scale._getMatchingVisibleMetas(me._type);
+ var value = scale._parseValue(datasets[datasetIndex].data[index]);
+ var minBarLength = options.minBarLength;
+ var stacked = scale.options.stacked;
+ var stack = me.getMeta().stack;
+ var start = value.start === undefined ? 0 : value.max >= 0 && value.min >= 0 ? value.min : value.max;
+ var length = value.start === undefined ? value.end : value.max >= 0 && value.min >= 0 ? value.max - value.min : value.min - value.max;
+ var ilen = metasets.length;
+ var i, imeta, ivalue, base, head, size, stackLength;
+
+ if (stacked || (stacked === undefined && stack !== undefined)) {
+ for (i = 0; i < ilen; ++i) {
+ imeta = metasets[i];
+
+ if (imeta.index === datasetIndex) {
+ break;
+ }
+
+ if (imeta.stack === stack) {
+ stackLength = scale._parseValue(datasets[imeta.index].data[index]);
+ ivalue = stackLength.start === undefined ? stackLength.end : stackLength.min >= 0 && stackLength.max >= 0 ? stackLength.max : stackLength.min;
+
+ if ((value.min < 0 && ivalue < 0) || (value.max >= 0 && ivalue > 0)) {
+ start += ivalue;
+ }
+ }
+ }
+ }
+
+ base = scale.getPixelForValue(start);
+ head = scale.getPixelForValue(start + length);
+ size = head - base;
+
+ if (minBarLength !== undefined && Math.abs(size) < minBarLength) {
+ size = minBarLength;
+ if (length >= 0 && !isHorizontal || length < 0 && isHorizontal) {
+ head = base - minBarLength;
+ } else {
+ head = base + minBarLength;
+ }
+ }
+
+ return {
+ size: size,
+ base: base,
+ head: head,
+ center: head + size / 2
+ };
+ },
+
+ /**
+ * @private
+ */
+ calculateBarIndexPixels: function(datasetIndex, index, ruler, options) {
+ var me = this;
+ var range = options.barThickness === 'flex'
+ ? computeFlexCategoryTraits(index, ruler, options)
+ : computeFitCategoryTraits(index, ruler, options);
+
+ var stackIndex = me.getStackIndex(datasetIndex, me.getMeta().stack);
+ var center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);
+ var size = Math.min(
+ valueOrDefault$3(options.maxBarThickness, Infinity),
+ range.chunk * range.ratio);
+
+ return {
+ base: center - size / 2,
+ head: center + size / 2,
+ center: center,
+ size: size
+ };
+ },
+
+ draw: function() {
+ var me = this;
+ var chart = me.chart;
+ var scale = me._getValueScale();
+ var rects = me.getMeta().data;
+ var dataset = me.getDataset();
+ var ilen = rects.length;
+ var i = 0;
+
+ helpers$1.canvas.clipArea(chart.ctx, chart.chartArea);
+
+ for (; i < ilen; ++i) {
+ var val = scale._parseValue(dataset.data[i]);
+ if (!isNaN(val.min) && !isNaN(val.max)) {
+ rects[i].draw();
+ }
+ }
+
+ helpers$1.canvas.unclipArea(chart.ctx);
+ },
+
+ /**
+ * @private
+ */
+ _resolveDataElementOptions: function() {
+ var me = this;
+ var values = helpers$1.extend({}, core_datasetController.prototype._resolveDataElementOptions.apply(me, arguments));
+ var indexOpts = me._getIndexScale().options;
+ var valueOpts = me._getValueScale().options;
+
+ values.barPercentage = valueOrDefault$3(indexOpts.barPercentage, values.barPercentage);
+ values.barThickness = valueOrDefault$3(indexOpts.barThickness, values.barThickness);
+ values.categoryPercentage = valueOrDefault$3(indexOpts.categoryPercentage, values.categoryPercentage);
+ values.maxBarThickness = valueOrDefault$3(indexOpts.maxBarThickness, values.maxBarThickness);
+ values.minBarLength = valueOrDefault$3(valueOpts.minBarLength, values.minBarLength);
+
+ return values;
+ }
+
+});
+
+var valueOrDefault$4 = helpers$1.valueOrDefault;
+var resolve$1 = helpers$1.options.resolve;
+
+core_defaults._set('bubble', {
+ hover: {
+ mode: 'single'
+ },
+
+ scales: {
+ xAxes: [{
+ type: 'linear', // bubble should probably use a linear scale by default
+ position: 'bottom',
+ id: 'x-axis-0' // need an ID so datasets can reference the scale
+ }],
+ yAxes: [{
+ type: 'linear',
+ position: 'left',
+ id: 'y-axis-0'
+ }]
+ },
+
+ tooltips: {
+ callbacks: {
+ title: function() {
+ // Title doesn't make sense for scatter since we format the data as a point
+ return '';
+ },
+ label: function(item, data) {
+ var datasetLabel = data.datasets[item.datasetIndex].label || '';
+ var dataPoint = data.datasets[item.datasetIndex].data[item.index];
+ return datasetLabel + ': (' + item.xLabel + ', ' + item.yLabel + ', ' + dataPoint.r + ')';
+ }
+ }
+ }
+});
+
+var controller_bubble = core_datasetController.extend({
+ /**
+ * @protected
+ */
+ dataElementType: elements.Point,
+
+ /**
+ * @private
+ */
+ _dataElementOptions: [
+ 'backgroundColor',
+ 'borderColor',
+ 'borderWidth',
+ 'hoverBackgroundColor',
+ 'hoverBorderColor',
+ 'hoverBorderWidth',
+ 'hoverRadius',
+ 'hitRadius',
+ 'pointStyle',
+ 'rotation'
+ ],
+
+ /**
+ * @protected
+ */
+ update: function(reset) {
+ var me = this;
+ var meta = me.getMeta();
+ var points = meta.data;
+
+ // Update Points
+ helpers$1.each(points, function(point, index) {
+ me.updateElement(point, index, reset);
+ });
+ },
+
+ /**
+ * @protected
+ */
+ updateElement: function(point, index, reset) {
+ var me = this;
+ var meta = me.getMeta();
+ var custom = point.custom || {};
+ var xScale = me.getScaleForId(meta.xAxisID);
+ var yScale = me.getScaleForId(meta.yAxisID);
+ var options = me._resolveDataElementOptions(point, index);
+ var data = me.getDataset().data[index];
+ var dsIndex = me.index;
+
+ var x = reset ? xScale.getPixelForDecimal(0.5) : xScale.getPixelForValue(typeof data === 'object' ? data : NaN, index, dsIndex);
+ var y = reset ? yScale.getBasePixel() : yScale.getPixelForValue(data, index, dsIndex);
+
+ point._xScale = xScale;
+ point._yScale = yScale;
+ point._options = options;
+ point._datasetIndex = dsIndex;
+ point._index = index;
+ point._model = {
+ backgroundColor: options.backgroundColor,
+ borderColor: options.borderColor,
+ borderWidth: options.borderWidth,
+ hitRadius: options.hitRadius,
+ pointStyle: options.pointStyle,
+ rotation: options.rotation,
+ radius: reset ? 0 : options.radius,
+ skip: custom.skip || isNaN(x) || isNaN(y),
+ x: x,
+ y: y,
+ };
+
+ point.pivot();
+ },
+
+ /**
+ * @protected
+ */
+ setHoverStyle: function(point) {
+ var model = point._model;
+ var options = point._options;
+ var getHoverColor = helpers$1.getHoverColor;
+
+ point.$previousStyle = {
+ backgroundColor: model.backgroundColor,
+ borderColor: model.borderColor,
+ borderWidth: model.borderWidth,
+ radius: model.radius
+ };
+
+ model.backgroundColor = valueOrDefault$4(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));
+ model.borderColor = valueOrDefault$4(options.hoverBorderColor, getHoverColor(options.borderColor));
+ model.borderWidth = valueOrDefault$4(options.hoverBorderWidth, options.borderWidth);
+ model.radius = options.radius + options.hoverRadius;
+ },
+
+ /**
+ * @private
+ */
+ _resolveDataElementOptions: function(point, index) {
+ var me = this;
+ var chart = me.chart;
+ var dataset = me.getDataset();
+ var custom = point.custom || {};
+ var data = dataset.data[index] || {};
+ var values = core_datasetController.prototype._resolveDataElementOptions.apply(me, arguments);
+
+ // Scriptable options
+ var context = {
+ chart: chart,
+ dataIndex: index,
+ dataset: dataset,
+ datasetIndex: me.index
+ };
+
+ // In case values were cached (and thus frozen), we need to clone the values
+ if (me._cachedDataOpts === values) {
+ values = helpers$1.extend({}, values);
+ }
+
+ // Custom radius resolution
+ values.radius = resolve$1([
+ custom.radius,
+ data.r,
+ me._config.radius,
+ chart.options.elements.point.radius
+ ], context, index);
+
+ return values;
+ }
+});
+
+var valueOrDefault$5 = helpers$1.valueOrDefault;
+
+var PI$1 = Math.PI;
+var DOUBLE_PI$1 = PI$1 * 2;
+var HALF_PI$1 = PI$1 / 2;
+
+core_defaults._set('doughnut', {
+ animation: {
+ // Boolean - Whether we animate the rotation of the Doughnut
+ animateRotate: true,
+ // Boolean - Whether we animate scaling the Doughnut from the centre
+ animateScale: false
+ },
+ hover: {
+ mode: 'single'
+ },
+ legendCallback: function(chart) {
+ var list = document.createElement('ul');
+ var data = chart.data;
+ var datasets = data.datasets;
+ var labels = data.labels;
+ var i, ilen, listItem, listItemSpan;
+
+ list.setAttribute('class', chart.id + '-legend');
+ if (datasets.length) {
+ for (i = 0, ilen = datasets[0].data.length; i < ilen; ++i) {
+ listItem = list.appendChild(document.createElement('li'));
+ listItemSpan = listItem.appendChild(document.createElement('span'));
+ listItemSpan.style.backgroundColor = datasets[0].backgroundColor[i];
+ if (labels[i]) {
+ listItem.appendChild(document.createTextNode(labels[i]));
+ }
+ }
+ }
+
+ return list.outerHTML;
+ },
+ legend: {
+ labels: {
+ generateLabels: function(chart) {
+ var data = chart.data;
+ if (data.labels.length && data.datasets.length) {
+ return data.labels.map(function(label, i) {
+ var meta = chart.getDatasetMeta(0);
+ var style = meta.controller.getStyle(i);
+
+ return {
+ text: label,
+ fillStyle: style.backgroundColor,
+ strokeStyle: style.borderColor,
+ lineWidth: style.borderWidth,
+ hidden: isNaN(data.datasets[0].data[i]) || meta.data[i].hidden,
+
+ // Extra data used for toggling the correct item
+ index: i
+ };
+ });
+ }
+ return [];
+ }
+ },
+
+ onClick: function(e, legendItem) {
+ var index = legendItem.index;
+ var chart = this.chart;
+ var i, ilen, meta;
+
+ for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {
+ meta = chart.getDatasetMeta(i);
+ // toggle visibility of index if exists
+ if (meta.data[index]) {
+ meta.data[index].hidden = !meta.data[index].hidden;
+ }
+ }
+
+ chart.update();
+ }
+ },
+
+ // The percentage of the chart that we cut out of the middle.
+ cutoutPercentage: 50,
+
+ // The rotation of the chart, where the first data arc begins.
+ rotation: -HALF_PI$1,
+
+ // The total circumference of the chart.
+ circumference: DOUBLE_PI$1,
+
+ // Need to override these to give a nice default
+ tooltips: {
+ callbacks: {
+ title: function() {
+ return '';
+ },
+ label: function(tooltipItem, data) {
+ var dataLabel = data.labels[tooltipItem.index];
+ var value = ': ' + data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];
+
+ if (helpers$1.isArray(dataLabel)) {
+ // show value on first line of multiline label
+ // need to clone because we are changing the value
+ dataLabel = dataLabel.slice();
+ dataLabel[0] += value;
+ } else {
+ dataLabel += value;
+ }
+
+ return dataLabel;
+ }
+ }
+ }
+});
+
+var controller_doughnut = core_datasetController.extend({
+
+ dataElementType: elements.Arc,
+
+ linkScales: helpers$1.noop,
+
+ /**
+ * @private
+ */
+ _dataElementOptions: [
+ 'backgroundColor',
+ 'borderColor',
+ 'borderWidth',
+ 'borderAlign',
+ 'hoverBackgroundColor',
+ 'hoverBorderColor',
+ 'hoverBorderWidth',
+ ],
+
+ // Get index of the dataset in relation to the visible datasets. This allows determining the inner and outer radius correctly
+ getRingIndex: function(datasetIndex) {
+ var ringIndex = 0;
+
+ for (var j = 0; j < datasetIndex; ++j) {
+ if (this.chart.isDatasetVisible(j)) {
+ ++ringIndex;
+ }
+ }
+
+ return ringIndex;
+ },
+
+ update: function(reset) {
+ var me = this;
+ var chart = me.chart;
+ var chartArea = chart.chartArea;
+ var opts = chart.options;
+ var ratioX = 1;
+ var ratioY = 1;
+ var offsetX = 0;
+ var offsetY = 0;
+ var meta = me.getMeta();
+ var arcs = meta.data;
+ var cutout = opts.cutoutPercentage / 100 || 0;
+ var circumference = opts.circumference;
+ var chartWeight = me._getRingWeight(me.index);
+ var maxWidth, maxHeight, i, ilen;
+
+ // If the chart's circumference isn't a full circle, calculate size as a ratio of the width/height of the arc
+ if (circumference < DOUBLE_PI$1) {
+ var startAngle = opts.rotation % DOUBLE_PI$1;
+ startAngle += startAngle >= PI$1 ? -DOUBLE_PI$1 : startAngle < -PI$1 ? DOUBLE_PI$1 : 0;
+ var endAngle = startAngle + circumference;
+ var startX = Math.cos(startAngle);
+ var startY = Math.sin(startAngle);
+ var endX = Math.cos(endAngle);
+ var endY = Math.sin(endAngle);
+ var contains0 = (startAngle <= 0 && endAngle >= 0) || endAngle >= DOUBLE_PI$1;
+ var contains90 = (startAngle <= HALF_PI$1 && endAngle >= HALF_PI$1) || endAngle >= DOUBLE_PI$1 + HALF_PI$1;
+ var contains180 = startAngle === -PI$1 || endAngle >= PI$1;
+ var contains270 = (startAngle <= -HALF_PI$1 && endAngle >= -HALF_PI$1) || endAngle >= PI$1 + HALF_PI$1;
+ var minX = contains180 ? -1 : Math.min(startX, startX * cutout, endX, endX * cutout);
+ var minY = contains270 ? -1 : Math.min(startY, startY * cutout, endY, endY * cutout);
+ var maxX = contains0 ? 1 : Math.max(startX, startX * cutout, endX, endX * cutout);
+ var maxY = contains90 ? 1 : Math.max(startY, startY * cutout, endY, endY * cutout);
+ ratioX = (maxX - minX) / 2;
+ ratioY = (maxY - minY) / 2;
+ offsetX = -(maxX + minX) / 2;
+ offsetY = -(maxY + minY) / 2;
+ }
+
+ for (i = 0, ilen = arcs.length; i < ilen; ++i) {
+ arcs[i]._options = me._resolveDataElementOptions(arcs[i], i);
+ }
+
+ chart.borderWidth = me.getMaxBorderWidth();
+ maxWidth = (chartArea.right - chartArea.left - chart.borderWidth) / ratioX;
+ maxHeight = (chartArea.bottom - chartArea.top - chart.borderWidth) / ratioY;
+ chart.outerRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);
+ chart.innerRadius = Math.max(chart.outerRadius * cutout, 0);
+ chart.radiusLength = (chart.outerRadius - chart.innerRadius) / (me._getVisibleDatasetWeightTotal() || 1);
+ chart.offsetX = offsetX * chart.outerRadius;
+ chart.offsetY = offsetY * chart.outerRadius;
+
+ meta.total = me.calculateTotal();
+
+ me.outerRadius = chart.outerRadius - chart.radiusLength * me._getRingWeightOffset(me.index);
+ me.innerRadius = Math.max(me.outerRadius - chart.radiusLength * chartWeight, 0);
+
+ for (i = 0, ilen = arcs.length; i < ilen; ++i) {
+ me.updateElement(arcs[i], i, reset);
+ }
+ },
+
+ updateElement: function(arc, index, reset) {
+ var me = this;
+ var chart = me.chart;
+ var chartArea = chart.chartArea;
+ var opts = chart.options;
+ var animationOpts = opts.animation;
+ var centerX = (chartArea.left + chartArea.right) / 2;
+ var centerY = (chartArea.top + chartArea.bottom) / 2;
+ var startAngle = opts.rotation; // non reset case handled later
+ var endAngle = opts.rotation; // non reset case handled later
+ var dataset = me.getDataset();
+ var circumference = reset && animationOpts.animateRotate ? 0 : arc.hidden ? 0 : me.calculateCircumference(dataset.data[index]) * (opts.circumference / DOUBLE_PI$1);
+ var innerRadius = reset && animationOpts.animateScale ? 0 : me.innerRadius;
+ var outerRadius = reset && animationOpts.animateScale ? 0 : me.outerRadius;
+ var options = arc._options || {};
+
+ helpers$1.extend(arc, {
+ // Utility
+ _datasetIndex: me.index,
+ _index: index,
+
+ // Desired view properties
+ _model: {
+ backgroundColor: options.backgroundColor,
+ borderColor: options.borderColor,
+ borderWidth: options.borderWidth,
+ borderAlign: options.borderAlign,
+ x: centerX + chart.offsetX,
+ y: centerY + chart.offsetY,
+ startAngle: startAngle,
+ endAngle: endAngle,
+ circumference: circumference,
+ outerRadius: outerRadius,
+ innerRadius: innerRadius,
+ label: helpers$1.valueAtIndexOrDefault(dataset.label, index, chart.data.labels[index])
+ }
+ });
+
+ var model = arc._model;
+
+ // Set correct angles if not resetting
+ if (!reset || !animationOpts.animateRotate) {
+ if (index === 0) {
+ model.startAngle = opts.rotation;
+ } else {
+ model.startAngle = me.getMeta().data[index - 1]._model.endAngle;
+ }
+
+ model.endAngle = model.startAngle + model.circumference;
+ }
+
+ arc.pivot();
+ },
+
+ calculateTotal: function() {
+ var dataset = this.getDataset();
+ var meta = this.getMeta();
+ var total = 0;
+ var value;
+
+ helpers$1.each(meta.data, function(element, index) {
+ value = dataset.data[index];
+ if (!isNaN(value) && !element.hidden) {
+ total += Math.abs(value);
+ }
+ });
+
+ /* if (total === 0) {
+ total = NaN;
+ }*/
+
+ return total;
+ },
+
+ calculateCircumference: function(value) {
+ var total = this.getMeta().total;
+ if (total > 0 && !isNaN(value)) {
+ return DOUBLE_PI$1 * (Math.abs(value) / total);
+ }
+ return 0;
+ },
+
+ // gets the max border or hover width to properly scale pie charts
+ getMaxBorderWidth: function(arcs) {
+ var me = this;
+ var max = 0;
+ var chart = me.chart;
+ var i, ilen, meta, arc, controller, options, borderWidth, hoverWidth;
+
+ if (!arcs) {
+ // Find the outmost visible dataset
+ for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {
+ if (chart.isDatasetVisible(i)) {
+ meta = chart.getDatasetMeta(i);
+ arcs = meta.data;
+ if (i !== me.index) {
+ controller = meta.controller;
+ }
+ break;
+ }
+ }
+ }
+
+ if (!arcs) {
+ return 0;
+ }
+
+ for (i = 0, ilen = arcs.length; i < ilen; ++i) {
+ arc = arcs[i];
+ if (controller) {
+ controller._configure();
+ options = controller._resolveDataElementOptions(arc, i);
+ } else {
+ options = arc._options;
+ }
+ if (options.borderAlign !== 'inner') {
+ borderWidth = options.borderWidth;
+ hoverWidth = options.hoverBorderWidth;
+
+ max = borderWidth > max ? borderWidth : max;
+ max = hoverWidth > max ? hoverWidth : max;
+ }
+ }
+ return max;
+ },
+
+ /**
+ * @protected
+ */
+ setHoverStyle: function(arc) {
+ var model = arc._model;
+ var options = arc._options;
+ var getHoverColor = helpers$1.getHoverColor;
+
+ arc.$previousStyle = {
+ backgroundColor: model.backgroundColor,
+ borderColor: model.borderColor,
+ borderWidth: model.borderWidth,
+ };
+
+ model.backgroundColor = valueOrDefault$5(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));
+ model.borderColor = valueOrDefault$5(options.hoverBorderColor, getHoverColor(options.borderColor));
+ model.borderWidth = valueOrDefault$5(options.hoverBorderWidth, options.borderWidth);
+ },
+
+ /**
+ * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly
+ * @private
+ */
+ _getRingWeightOffset: function(datasetIndex) {
+ var ringWeightOffset = 0;
+
+ for (var i = 0; i < datasetIndex; ++i) {
+ if (this.chart.isDatasetVisible(i)) {
+ ringWeightOffset += this._getRingWeight(i);
+ }
+ }
+
+ return ringWeightOffset;
+ },
+
+ /**
+ * @private
+ */
+ _getRingWeight: function(dataSetIndex) {
+ return Math.max(valueOrDefault$5(this.chart.data.datasets[dataSetIndex].weight, 1), 0);
+ },
+
+ /**
+ * Returns the sum of all visibile data set weights. This value can be 0.
+ * @private
+ */
+ _getVisibleDatasetWeightTotal: function() {
+ return this._getRingWeightOffset(this.chart.data.datasets.length);
+ }
+});
+
+core_defaults._set('horizontalBar', {
+ hover: {
+ mode: 'index',
+ axis: 'y'
+ },
+
+ scales: {
+ xAxes: [{
+ type: 'linear',
+ position: 'bottom'
+ }],
+
+ yAxes: [{
+ type: 'category',
+ position: 'left',
+ offset: true,
+ gridLines: {
+ offsetGridLines: true
+ }
+ }]
+ },
+
+ elements: {
+ rectangle: {
+ borderSkipped: 'left'
+ }
+ },
+
+ tooltips: {
+ mode: 'index',
+ axis: 'y'
+ }
+});
+
+core_defaults._set('global', {
+ datasets: {
+ horizontalBar: {
+ categoryPercentage: 0.8,
+ barPercentage: 0.9
+ }
+ }
+});
+
+var controller_horizontalBar = controller_bar.extend({
+ /**
+ * @private
+ */
+ _getValueScaleId: function() {
+ return this.getMeta().xAxisID;
+ },
+
+ /**
+ * @private
+ */
+ _getIndexScaleId: function() {
+ return this.getMeta().yAxisID;
+ }
+});
+
+var valueOrDefault$6 = helpers$1.valueOrDefault;
+var resolve$2 = helpers$1.options.resolve;
+var isPointInArea = helpers$1.canvas._isPointInArea;
+
+core_defaults._set('line', {
+ showLines: true,
+ spanGaps: false,
+
+ hover: {
+ mode: 'label'
+ },
+
+ scales: {
+ xAxes: [{
+ type: 'category',
+ id: 'x-axis-0'
+ }],
+ yAxes: [{
+ type: 'linear',
+ id: 'y-axis-0'
+ }]
+ }
+});
+
+function scaleClip(scale, halfBorderWidth) {
+ var tickOpts = scale && scale.options.ticks || {};
+ var reverse = tickOpts.reverse;
+ var min = tickOpts.min === undefined ? halfBorderWidth : 0;
+ var max = tickOpts.max === undefined ? halfBorderWidth : 0;
+ return {
+ start: reverse ? max : min,
+ end: reverse ? min : max
+ };
+}
+
+function defaultClip(xScale, yScale, borderWidth) {
+ var halfBorderWidth = borderWidth / 2;
+ var x = scaleClip(xScale, halfBorderWidth);
+ var y = scaleClip(yScale, halfBorderWidth);
+
+ return {
+ top: y.end,
+ right: x.end,
+ bottom: y.start,
+ left: x.start
+ };
+}
+
+function toClip(value) {
+ var t, r, b, l;
+
+ if (helpers$1.isObject(value)) {
+ t = value.top;
+ r = value.right;
+ b = value.bottom;
+ l = value.left;
+ } else {
+ t = r = b = l = value;
+ }
+
+ return {
+ top: t,
+ right: r,
+ bottom: b,
+ left: l
+ };
+}
+
+
+var controller_line = core_datasetController.extend({
+
+ datasetElementType: elements.Line,
+
+ dataElementType: elements.Point,
+
+ /**
+ * @private
+ */
+ _datasetElementOptions: [
+ 'backgroundColor',
+ 'borderCapStyle',
+ 'borderColor',
+ 'borderDash',
+ 'borderDashOffset',
+ 'borderJoinStyle',
+ 'borderWidth',
+ 'cubicInterpolationMode',
+ 'fill'
+ ],
+
+ /**
+ * @private
+ */
+ _dataElementOptions: {
+ backgroundColor: 'pointBackgroundColor',
+ borderColor: 'pointBorderColor',
+ borderWidth: 'pointBorderWidth',
+ hitRadius: 'pointHitRadius',
+ hoverBackgroundColor: 'pointHoverBackgroundColor',
+ hoverBorderColor: 'pointHoverBorderColor',
+ hoverBorderWidth: 'pointHoverBorderWidth',
+ hoverRadius: 'pointHoverRadius',
+ pointStyle: 'pointStyle',
+ radius: 'pointRadius',
+ rotation: 'pointRotation'
+ },
+
+ update: function(reset) {
+ var me = this;
+ var meta = me.getMeta();
+ var line = meta.dataset;
+ var points = meta.data || [];
+ var options = me.chart.options;
+ var config = me._config;
+ var showLine = me._showLine = valueOrDefault$6(config.showLine, options.showLines);
+ var i, ilen;
+
+ me._xScale = me.getScaleForId(meta.xAxisID);
+ me._yScale = me.getScaleForId(meta.yAxisID);
+
+ // Update Line
+ if (showLine) {
+ // Compatibility: If the properties are defined with only the old name, use those values
+ if (config.tension !== undefined && config.lineTension === undefined) {
+ config.lineTension = config.tension;
+ }
+
+ // Utility
+ line._scale = me._yScale;
+ line._datasetIndex = me.index;
+ // Data
+ line._children = points;
+ // Model
+ line._model = me._resolveDatasetElementOptions(line);
+
+ line.pivot();
+ }
+
+ // Update Points
+ for (i = 0, ilen = points.length; i < ilen; ++i) {
+ me.updateElement(points[i], i, reset);
+ }
+
+ if (showLine && line._model.tension !== 0) {
+ me.updateBezierControlPoints();
+ }
+
+ // Now pivot the point for animation
+ for (i = 0, ilen = points.length; i < ilen; ++i) {
+ points[i].pivot();
+ }
+ },
+
+ updateElement: function(point, index, reset) {
+ var me = this;
+ var meta = me.getMeta();
+ var custom = point.custom || {};
+ var dataset = me.getDataset();
+ var datasetIndex = me.index;
+ var value = dataset.data[index];
+ var xScale = me._xScale;
+ var yScale = me._yScale;
+ var lineModel = meta.dataset._model;
+ var x, y;
+
+ var options = me._resolveDataElementOptions(point, index);
+
+ x = xScale.getPixelForValue(typeof value === 'object' ? value : NaN, index, datasetIndex);
+ y = reset ? yScale.getBasePixel() : me.calculatePointY(value, index, datasetIndex);
+
+ // Utility
+ point._xScale = xScale;
+ point._yScale = yScale;
+ point._options = options;
+ point._datasetIndex = datasetIndex;
+ point._index = index;
+
+ // Desired view properties
+ point._model = {
+ x: x,
+ y: y,
+ skip: custom.skip || isNaN(x) || isNaN(y),
+ // Appearance
+ radius: options.radius,
+ pointStyle: options.pointStyle,
+ rotation: options.rotation,
+ backgroundColor: options.backgroundColor,
+ borderColor: options.borderColor,
+ borderWidth: options.borderWidth,
+ tension: valueOrDefault$6(custom.tension, lineModel ? lineModel.tension : 0),
+ steppedLine: lineModel ? lineModel.steppedLine : false,
+ // Tooltip
+ hitRadius: options.hitRadius
+ };
+ },
+
+ /**
+ * @private
+ */
+ _resolveDatasetElementOptions: function(element) {
+ var me = this;
+ var config = me._config;
+ var custom = element.custom || {};
+ var options = me.chart.options;
+ var lineOptions = options.elements.line;
+ var values = core_datasetController.prototype._resolveDatasetElementOptions.apply(me, arguments);
+
+ // The default behavior of lines is to break at null values, according
+ // to https://github.com/chartjs/Chart.js/issues/2435#issuecomment-216718158
+ // This option gives lines the ability to span gaps
+ values.spanGaps = valueOrDefault$6(config.spanGaps, options.spanGaps);
+ values.tension = valueOrDefault$6(config.lineTension, lineOptions.tension);
+ values.steppedLine = resolve$2([custom.steppedLine, config.steppedLine, lineOptions.stepped]);
+ values.clip = toClip(valueOrDefault$6(config.clip, defaultClip(me._xScale, me._yScale, values.borderWidth)));
+
+ return values;
+ },
+
+ calculatePointY: function(value, index, datasetIndex) {
+ var me = this;
+ var chart = me.chart;
+ var yScale = me._yScale;
+ var sumPos = 0;
+ var sumNeg = 0;
+ var i, ds, dsMeta, stackedRightValue, rightValue, metasets, ilen;
+
+ if (yScale.options.stacked) {
+ rightValue = +yScale.getRightValue(value);
+ metasets = chart._getSortedVisibleDatasetMetas();
+ ilen = metasets.length;
+
+ for (i = 0; i < ilen; ++i) {
+ dsMeta = metasets[i];
+ if (dsMeta.index === datasetIndex) {
+ break;
+ }
+
+ ds = chart.data.datasets[dsMeta.index];
+ if (dsMeta.type === 'line' && dsMeta.yAxisID === yScale.id) {
+ stackedRightValue = +yScale.getRightValue(ds.data[index]);
+ if (stackedRightValue < 0) {
+ sumNeg += stackedRightValue || 0;
+ } else {
+ sumPos += stackedRightValue || 0;
+ }
+ }
+ }
+
+ if (rightValue < 0) {
+ return yScale.getPixelForValue(sumNeg + rightValue);
+ }
+ return yScale.getPixelForValue(sumPos + rightValue);
+ }
+ return yScale.getPixelForValue(value);
+ },
+
+ updateBezierControlPoints: function() {
+ var me = this;
+ var chart = me.chart;
+ var meta = me.getMeta();
+ var lineModel = meta.dataset._model;
+ var area = chart.chartArea;
+ var points = meta.data || [];
+ var i, ilen, model, controlPoints;
+
+ // Only consider points that are drawn in case the spanGaps option is used
+ if (lineModel.spanGaps) {
+ points = points.filter(function(pt) {
+ return !pt._model.skip;
+ });
+ }
+
+ function capControlPoint(pt, min, max) {
+ return Math.max(Math.min(pt, max), min);
+ }
+
+ if (lineModel.cubicInterpolationMode === 'monotone') {
+ helpers$1.splineCurveMonotone(points);
+ } else {
+ for (i = 0, ilen = points.length; i < ilen; ++i) {
+ model = points[i]._model;
+ controlPoints = helpers$1.splineCurve(
+ helpers$1.previousItem(points, i)._model,
+ model,
+ helpers$1.nextItem(points, i)._model,
+ lineModel.tension
+ );
+ model.controlPointPreviousX = controlPoints.previous.x;
+ model.controlPointPreviousY = controlPoints.previous.y;
+ model.controlPointNextX = controlPoints.next.x;
+ model.controlPointNextY = controlPoints.next.y;
+ }
+ }
+
+ if (chart.options.elements.line.capBezierPoints) {
+ for (i = 0, ilen = points.length; i < ilen; ++i) {
+ model = points[i]._model;
+ if (isPointInArea(model, area)) {
+ if (i > 0 && isPointInArea(points[i - 1]._model, area)) {
+ model.controlPointPreviousX = capControlPoint(model.controlPointPreviousX, area.left, area.right);
+ model.controlPointPreviousY = capControlPoint(model.controlPointPreviousY, area.top, area.bottom);
+ }
+ if (i < points.length - 1 && isPointInArea(points[i + 1]._model, area)) {
+ model.controlPointNextX = capControlPoint(model.controlPointNextX, area.left, area.right);
+ model.controlPointNextY = capControlPoint(model.controlPointNextY, area.top, area.bottom);
+ }
+ }
+ }
+ }
+ },
+
+ draw: function() {
+ var me = this;
+ var chart = me.chart;
+ var meta = me.getMeta();
+ var points = meta.data || [];
+ var area = chart.chartArea;
+ var canvas = chart.canvas;
+ var i = 0;
+ var ilen = points.length;
+ var clip;
+
+ if (me._showLine) {
+ clip = meta.dataset._model.clip;
+
+ helpers$1.canvas.clipArea(chart.ctx, {
+ left: clip.left === false ? 0 : area.left - clip.left,
+ right: clip.right === false ? canvas.width : area.right + clip.right,
+ top: clip.top === false ? 0 : area.top - clip.top,
+ bottom: clip.bottom === false ? canvas.height : area.bottom + clip.bottom
+ });
+
+ meta.dataset.draw();
+
+ helpers$1.canvas.unclipArea(chart.ctx);
+ }
+
+ // Draw the points
+ for (; i < ilen; ++i) {
+ points[i].draw(area);
+ }
+ },
+
+ /**
+ * @protected
+ */
+ setHoverStyle: function(point) {
+ var model = point._model;
+ var options = point._options;
+ var getHoverColor = helpers$1.getHoverColor;
+
+ point.$previousStyle = {
+ backgroundColor: model.backgroundColor,
+ borderColor: model.borderColor,
+ borderWidth: model.borderWidth,
+ radius: model.radius
+ };
+
+ model.backgroundColor = valueOrDefault$6(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));
+ model.borderColor = valueOrDefault$6(options.hoverBorderColor, getHoverColor(options.borderColor));
+ model.borderWidth = valueOrDefault$6(options.hoverBorderWidth, options.borderWidth);
+ model.radius = valueOrDefault$6(options.hoverRadius, options.radius);
+ },
+});
+
+var resolve$3 = helpers$1.options.resolve;
+
+core_defaults._set('polarArea', {
+ scale: {
+ type: 'radialLinear',
+ angleLines: {
+ display: false
+ },
+ gridLines: {
+ circular: true
+ },
+ pointLabels: {
+ display: false
+ },
+ ticks: {
+ beginAtZero: true
+ }
+ },
+
+ // Boolean - Whether to animate the rotation of the chart
+ animation: {
+ animateRotate: true,
+ animateScale: true
+ },
+
+ startAngle: -0.5 * Math.PI,
+ legendCallback: function(chart) {
+ var list = document.createElement('ul');
+ var data = chart.data;
+ var datasets = data.datasets;
+ var labels = data.labels;
+ var i, ilen, listItem, listItemSpan;
+
+ list.setAttribute('class', chart.id + '-legend');
+ if (datasets.length) {
+ for (i = 0, ilen = datasets[0].data.length; i < ilen; ++i) {
+ listItem = list.appendChild(document.createElement('li'));
+ listItemSpan = listItem.appendChild(document.createElement('span'));
+ listItemSpan.style.backgroundColor = datasets[0].backgroundColor[i];
+ if (labels[i]) {
+ listItem.appendChild(document.createTextNode(labels[i]));
+ }
+ }
+ }
+
+ return list.outerHTML;
+ },
+ legend: {
+ labels: {
+ generateLabels: function(chart) {
+ var data = chart.data;
+ if (data.labels.length && data.datasets.length) {
+ return data.labels.map(function(label, i) {
+ var meta = chart.getDatasetMeta(0);
+ var style = meta.controller.getStyle(i);
+
+ return {
+ text: label,
+ fillStyle: style.backgroundColor,
+ strokeStyle: style.borderColor,
+ lineWidth: style.borderWidth,
+ hidden: isNaN(data.datasets[0].data[i]) || meta.data[i].hidden,
+
+ // Extra data used for toggling the correct item
+ index: i
+ };
+ });
+ }
+ return [];
+ }
+ },
+
+ onClick: function(e, legendItem) {
+ var index = legendItem.index;
+ var chart = this.chart;
+ var i, ilen, meta;
+
+ for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {
+ meta = chart.getDatasetMeta(i);
+ meta.data[index].hidden = !meta.data[index].hidden;
+ }
+
+ chart.update();
+ }
+ },
+
+ // Need to override these to give a nice default
+ tooltips: {
+ callbacks: {
+ title: function() {
+ return '';
+ },
+ label: function(item, data) {
+ return data.labels[item.index] + ': ' + item.yLabel;
+ }
+ }
+ }
+});
+
+var controller_polarArea = core_datasetController.extend({
+
+ dataElementType: elements.Arc,
+
+ linkScales: helpers$1.noop,
+
+ /**
+ * @private
+ */
+ _dataElementOptions: [
+ 'backgroundColor',
+ 'borderColor',
+ 'borderWidth',
+ 'borderAlign',
+ 'hoverBackgroundColor',
+ 'hoverBorderColor',
+ 'hoverBorderWidth',
+ ],
+
+ /**
+ * @private
+ */
+ _getIndexScaleId: function() {
+ return this.chart.scale.id;
+ },
+
+ /**
+ * @private
+ */
+ _getValueScaleId: function() {
+ return this.chart.scale.id;
+ },
+
+ update: function(reset) {
+ var me = this;
+ var dataset = me.getDataset();
+ var meta = me.getMeta();
+ var start = me.chart.options.startAngle || 0;
+ var starts = me._starts = [];
+ var angles = me._angles = [];
+ var arcs = meta.data;
+ var i, ilen, angle;
+
+ me._updateRadius();
+
+ meta.count = me.countVisibleElements();
+
+ for (i = 0, ilen = dataset.data.length; i < ilen; i++) {
+ starts[i] = start;
+ angle = me._computeAngle(i);
+ angles[i] = angle;
+ start += angle;
+ }
+
+ for (i = 0, ilen = arcs.length; i < ilen; ++i) {
+ arcs[i]._options = me._resolveDataElementOptions(arcs[i], i);
+ me.updateElement(arcs[i], i, reset);
+ }
+ },
+
+ /**
+ * @private
+ */
+ _updateRadius: function() {
+ var me = this;
+ var chart = me.chart;
+ var chartArea = chart.chartArea;
+ var opts = chart.options;
+ var minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);
+
+ chart.outerRadius = Math.max(minSize / 2, 0);
+ chart.innerRadius = Math.max(opts.cutoutPercentage ? (chart.outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);
+ chart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount();
+
+ me.outerRadius = chart.outerRadius - (chart.radiusLength * me.index);
+ me.innerRadius = me.outerRadius - chart.radiusLength;
+ },
+
+ updateElement: function(arc, index, reset) {
+ var me = this;
+ var chart = me.chart;
+ var dataset = me.getDataset();
+ var opts = chart.options;
+ var animationOpts = opts.animation;
+ var scale = chart.scale;
+ var labels = chart.data.labels;
+
+ var centerX = scale.xCenter;
+ var centerY = scale.yCenter;
+
+ // var negHalfPI = -0.5 * Math.PI;
+ var datasetStartAngle = opts.startAngle;
+ var distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);
+ var startAngle = me._starts[index];
+ var endAngle = startAngle + (arc.hidden ? 0 : me._angles[index]);
+
+ var resetRadius = animationOpts.animateScale ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);
+ var options = arc._options || {};
+
+ helpers$1.extend(arc, {
+ // Utility
+ _datasetIndex: me.index,
+ _index: index,
+ _scale: scale,
+
+ // Desired view properties
+ _model: {
+ backgroundColor: options.backgroundColor,
+ borderColor: options.borderColor,
+ borderWidth: options.borderWidth,
+ borderAlign: options.borderAlign,
+ x: centerX,
+ y: centerY,
+ innerRadius: 0,
+ outerRadius: reset ? resetRadius : distance,
+ startAngle: reset && animationOpts.animateRotate ? datasetStartAngle : startAngle,
+ endAngle: reset && animationOpts.animateRotate ? datasetStartAngle : endAngle,
+ label: helpers$1.valueAtIndexOrDefault(labels, index, labels[index])
+ }
+ });
+
+ arc.pivot();
+ },
+
+ countVisibleElements: function() {
+ var dataset = this.getDataset();
+ var meta = this.getMeta();
+ var count = 0;
+
+ helpers$1.each(meta.data, function(element, index) {
+ if (!isNaN(dataset.data[index]) && !element.hidden) {
+ count++;
+ }
+ });
+
+ return count;
+ },
+
+ /**
+ * @protected
+ */
+ setHoverStyle: function(arc) {
+ var model = arc._model;
+ var options = arc._options;
+ var getHoverColor = helpers$1.getHoverColor;
+ var valueOrDefault = helpers$1.valueOrDefault;
+
+ arc.$previousStyle = {
+ backgroundColor: model.backgroundColor,
+ borderColor: model.borderColor,
+ borderWidth: model.borderWidth,
+ };
+
+ model.backgroundColor = valueOrDefault(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));
+ model.borderColor = valueOrDefault(options.hoverBorderColor, getHoverColor(options.borderColor));
+ model.borderWidth = valueOrDefault(options.hoverBorderWidth, options.borderWidth);
+ },
+
+ /**
+ * @private
+ */
+ _computeAngle: function(index) {
+ var me = this;
+ var count = this.getMeta().count;
+ var dataset = me.getDataset();
+ var meta = me.getMeta();
+
+ if (isNaN(dataset.data[index]) || meta.data[index].hidden) {
+ return 0;
+ }
+
+ // Scriptable options
+ var context = {
+ chart: me.chart,
+ dataIndex: index,
+ dataset: dataset,
+ datasetIndex: me.index
+ };
+
+ return resolve$3([
+ me.chart.options.elements.arc.angle,
+ (2 * Math.PI) / count
+ ], context, index);
+ }
+});
+
+core_defaults._set('pie', helpers$1.clone(core_defaults.doughnut));
+core_defaults._set('pie', {
+ cutoutPercentage: 0
+});
+
+// Pie charts are Doughnut chart with different defaults
+var controller_pie = controller_doughnut;
+
+var valueOrDefault$7 = helpers$1.valueOrDefault;
+
+core_defaults._set('radar', {
+ spanGaps: false,
+ scale: {
+ type: 'radialLinear'
+ },
+ elements: {
+ line: {
+ fill: 'start',
+ tension: 0 // no bezier in radar
+ }
+ }
+});
+
+var controller_radar = core_datasetController.extend({
+ datasetElementType: elements.Line,
+
+ dataElementType: elements.Point,
+
+ linkScales: helpers$1.noop,
+
+ /**
+ * @private
+ */
+ _datasetElementOptions: [
+ 'backgroundColor',
+ 'borderWidth',
+ 'borderColor',
+ 'borderCapStyle',
+ 'borderDash',
+ 'borderDashOffset',
+ 'borderJoinStyle',
+ 'fill'
+ ],
+
+ /**
+ * @private
+ */
+ _dataElementOptions: {
+ backgroundColor: 'pointBackgroundColor',
+ borderColor: 'pointBorderColor',
+ borderWidth: 'pointBorderWidth',
+ hitRadius: 'pointHitRadius',
+ hoverBackgroundColor: 'pointHoverBackgroundColor',
+ hoverBorderColor: 'pointHoverBorderColor',
+ hoverBorderWidth: 'pointHoverBorderWidth',
+ hoverRadius: 'pointHoverRadius',
+ pointStyle: 'pointStyle',
+ radius: 'pointRadius',
+ rotation: 'pointRotation'
+ },
+
+ /**
+ * @private
+ */
+ _getIndexScaleId: function() {
+ return this.chart.scale.id;
+ },
+
+ /**
+ * @private
+ */
+ _getValueScaleId: function() {
+ return this.chart.scale.id;
+ },
+
+ update: function(reset) {
+ var me = this;
+ var meta = me.getMeta();
+ var line = meta.dataset;
+ var points = meta.data || [];
+ var scale = me.chart.scale;
+ var config = me._config;
+ var i, ilen;
+
+ // Compatibility: If the properties are defined with only the old name, use those values
+ if (config.tension !== undefined && config.lineTension === undefined) {
+ config.lineTension = config.tension;
+ }
+
+ // Utility
+ line._scale = scale;
+ line._datasetIndex = me.index;
+ // Data
+ line._children = points;
+ line._loop = true;
+ // Model
+ line._model = me._resolveDatasetElementOptions(line);
+
+ line.pivot();
+
+ // Update Points
+ for (i = 0, ilen = points.length; i < ilen; ++i) {
+ me.updateElement(points[i], i, reset);
+ }
+
+ // Update bezier control points
+ me.updateBezierControlPoints();
+
+ // Now pivot the point for animation
+ for (i = 0, ilen = points.length; i < ilen; ++i) {
+ points[i].pivot();
+ }
+ },
+
+ updateElement: function(point, index, reset) {
+ var me = this;
+ var custom = point.custom || {};
+ var dataset = me.getDataset();
+ var scale = me.chart.scale;
+ var pointPosition = scale.getPointPositionForValue(index, dataset.data[index]);
+ var options = me._resolveDataElementOptions(point, index);
+ var lineModel = me.getMeta().dataset._model;
+ var x = reset ? scale.xCenter : pointPosition.x;
+ var y = reset ? scale.yCenter : pointPosition.y;
+
+ // Utility
+ point._scale = scale;
+ point._options = options;
+ point._datasetIndex = me.index;
+ point._index = index;
+
+ // Desired view properties
+ point._model = {
+ x: x, // value not used in dataset scale, but we want a consistent API between scales
+ y: y,
+ skip: custom.skip || isNaN(x) || isNaN(y),
+ // Appearance
+ radius: options.radius,
+ pointStyle: options.pointStyle,
+ rotation: options.rotation,
+ backgroundColor: options.backgroundColor,
+ borderColor: options.borderColor,
+ borderWidth: options.borderWidth,
+ tension: valueOrDefault$7(custom.tension, lineModel ? lineModel.tension : 0),
+
+ // Tooltip
+ hitRadius: options.hitRadius
+ };
+ },
+
+ /**
+ * @private
+ */
+ _resolveDatasetElementOptions: function() {
+ var me = this;
+ var config = me._config;
+ var options = me.chart.options;
+ var values = core_datasetController.prototype._resolveDatasetElementOptions.apply(me, arguments);
+
+ values.spanGaps = valueOrDefault$7(config.spanGaps, options.spanGaps);
+ values.tension = valueOrDefault$7(config.lineTension, options.elements.line.tension);
+
+ return values;
+ },
+
+ updateBezierControlPoints: function() {
+ var me = this;
+ var meta = me.getMeta();
+ var area = me.chart.chartArea;
+ var points = meta.data || [];
+ var i, ilen, model, controlPoints;
+
+ // Only consider points that are drawn in case the spanGaps option is used
+ if (meta.dataset._model.spanGaps) {
+ points = points.filter(function(pt) {
+ return !pt._model.skip;
+ });
+ }
+
+ function capControlPoint(pt, min, max) {
+ return Math.max(Math.min(pt, max), min);
+ }
+
+ for (i = 0, ilen = points.length; i < ilen; ++i) {
+ model = points[i]._model;
+ controlPoints = helpers$1.splineCurve(
+ helpers$1.previousItem(points, i, true)._model,
+ model,
+ helpers$1.nextItem(points, i, true)._model,
+ model.tension
+ );
+
+ // Prevent the bezier going outside of the bounds of the graph
+ model.controlPointPreviousX = capControlPoint(controlPoints.previous.x, area.left, area.right);
+ model.controlPointPreviousY = capControlPoint(controlPoints.previous.y, area.top, area.bottom);
+ model.controlPointNextX = capControlPoint(controlPoints.next.x, area.left, area.right);
+ model.controlPointNextY = capControlPoint(controlPoints.next.y, area.top, area.bottom);
+ }
+ },
+
+ setHoverStyle: function(point) {
+ var model = point._model;
+ var options = point._options;
+ var getHoverColor = helpers$1.getHoverColor;
+
+ point.$previousStyle = {
+ backgroundColor: model.backgroundColor,
+ borderColor: model.borderColor,
+ borderWidth: model.borderWidth,
+ radius: model.radius
+ };
+
+ model.backgroundColor = valueOrDefault$7(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));
+ model.borderColor = valueOrDefault$7(options.hoverBorderColor, getHoverColor(options.borderColor));
+ model.borderWidth = valueOrDefault$7(options.hoverBorderWidth, options.borderWidth);
+ model.radius = valueOrDefault$7(options.hoverRadius, options.radius);
+ }
+});
+
+core_defaults._set('scatter', {
+ hover: {
+ mode: 'single'
+ },
+
+ scales: {
+ xAxes: [{
+ id: 'x-axis-1', // need an ID so datasets can reference the scale
+ type: 'linear', // scatter should not use a category axis
+ position: 'bottom'
+ }],
+ yAxes: [{
+ id: 'y-axis-1',
+ type: 'linear',
+ position: 'left'
+ }]
+ },
+
+ tooltips: {
+ callbacks: {
+ title: function() {
+ return ''; // doesn't make sense for scatter since data are formatted as a point
+ },
+ label: function(item) {
+ return '(' + item.xLabel + ', ' + item.yLabel + ')';
+ }
+ }
+ }
+});
+
+core_defaults._set('global', {
+ datasets: {
+ scatter: {
+ showLine: false
+ }
+ }
+});
+
+// Scatter charts use line controllers
+var controller_scatter = controller_line;
+
+// NOTE export a map in which the key represents the controller type, not
+// the class, and so must be CamelCase in order to be correctly retrieved
+// by the controller in core.controller.js (`controllers[meta.type]`).
+
+var controllers = {
+ bar: controller_bar,
+ bubble: controller_bubble,
+ doughnut: controller_doughnut,
+ horizontalBar: controller_horizontalBar,
+ line: controller_line,
+ polarArea: controller_polarArea,
+ pie: controller_pie,
+ radar: controller_radar,
+ scatter: controller_scatter
+};
+
+/**
+ * Helper function to get relative position for an event
+ * @param {Event|IEvent} event - The event to get the position for
+ * @param {Chart} chart - The chart
+ * @returns {object} the event position
+ */
+function getRelativePosition(e, chart) {
+ if (e.native) {
+ return {
+ x: e.x,
+ y: e.y
+ };
+ }
+
+ return helpers$1.getRelativePosition(e, chart);
+}
+
+/**
+ * Helper function to traverse all of the visible elements in the chart
+ * @param {Chart} chart - the chart
+ * @param {function} handler - the callback to execute for each visible item
+ */
+function parseVisibleItems(chart, handler) {
+ var metasets = chart._getSortedVisibleDatasetMetas();
+ var metadata, i, j, ilen, jlen, element;
+
+ for (i = 0, ilen = metasets.length; i < ilen; ++i) {
+ metadata = metasets[i].data;
+ for (j = 0, jlen = metadata.length; j < jlen; ++j) {
+ element = metadata[j];
+ if (!element._view.skip) {
+ handler(element);
+ }
+ }
+ }
+}
+
+/**
+ * Helper function to get the items that intersect the event position
+ * @param {ChartElement[]} items - elements to filter
+ * @param {object} position - the point to be nearest to
+ * @return {ChartElement[]} the nearest items
+ */
+function getIntersectItems(chart, position) {
+ var elements = [];
+
+ parseVisibleItems(chart, function(element) {
+ if (element.inRange(position.x, position.y)) {
+ elements.push(element);
+ }
+ });
+
+ return elements;
+}
+
+/**
+ * Helper function to get the items nearest to the event position considering all visible items in teh chart
+ * @param {Chart} chart - the chart to look at elements from
+ * @param {object} position - the point to be nearest to
+ * @param {boolean} intersect - if true, only consider items that intersect the position
+ * @param {function} distanceMetric - function to provide the distance between points
+ * @return {ChartElement[]} the nearest items
+ */
+function getNearestItems(chart, position, intersect, distanceMetric) {
+ var minDistance = Number.POSITIVE_INFINITY;
+ var nearestItems = [];
+
+ parseVisibleItems(chart, function(element) {
+ if (intersect && !element.inRange(position.x, position.y)) {
+ return;
+ }
+
+ var center = element.getCenterPoint();
+ var distance = distanceMetric(position, center);
+ if (distance < minDistance) {
+ nearestItems = [element];
+ minDistance = distance;
+ } else if (distance === minDistance) {
+ // Can have multiple items at the same distance in which case we sort by size
+ nearestItems.push(element);
+ }
+ });
+
+ return nearestItems;
+}
+
+/**
+ * Get a distance metric function for two points based on the
+ * axis mode setting
+ * @param {string} axis - the axis mode. x|y|xy
+ */
+function getDistanceMetricForAxis(axis) {
+ var useX = axis.indexOf('x') !== -1;
+ var useY = axis.indexOf('y') !== -1;
+
+ return function(pt1, pt2) {
+ var deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;
+ var deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;
+ return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));
+ };
+}
+
+function indexMode(chart, e, options) {
+ var position = getRelativePosition(e, chart);
+ // Default axis for index mode is 'x' to match old behaviour
+ options.axis = options.axis || 'x';
+ var distanceMetric = getDistanceMetricForAxis(options.axis);
+ var items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);
+ var elements = [];
+
+ if (!items.length) {
+ return [];
+ }
+
+ chart._getSortedVisibleDatasetMetas().forEach(function(meta) {
+ var element = meta.data[items[0]._index];
+
+ // don't count items that are skipped (null data)
+ if (element && !element._view.skip) {
+ elements.push(element);
+ }
+ });
+
+ return elements;
+}
+
+/**
+ * @interface IInteractionOptions
+ */
+/**
+ * If true, only consider items that intersect the point
+ * @name IInterfaceOptions#boolean
+ * @type Boolean
+ */
+
+/**
+ * Contains interaction related functions
+ * @namespace Chart.Interaction
+ */
+var core_interaction = {
+ // Helper function for different modes
+ modes: {
+ single: function(chart, e) {
+ var position = getRelativePosition(e, chart);
+ var elements = [];
+
+ parseVisibleItems(chart, function(element) {
+ if (element.inRange(position.x, position.y)) {
+ elements.push(element);
+ return elements;
+ }
+ });
+
+ return elements.slice(0, 1);
+ },
+
+ /**
+ * @function Chart.Interaction.modes.label
+ * @deprecated since version 2.4.0
+ * @todo remove at version 3
+ * @private
+ */
+ label: indexMode,
+
+ /**
+ * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something
+ * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item
+ * @function Chart.Interaction.modes.index
+ * @since v2.4.0
+ * @param {Chart} chart - the chart we are returning items from
+ * @param {Event} e - the event we are find things at
+ * @param {IInteractionOptions} options - options to use during interaction
+ * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned
+ */
+ index: indexMode,
+
+ /**
+ * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something
+ * If the options.intersect is false, we find the nearest item and return the items in that dataset
+ * @function Chart.Interaction.modes.dataset
+ * @param {Chart} chart - the chart we are returning items from
+ * @param {Event} e - the event we are find things at
+ * @param {IInteractionOptions} options - options to use during interaction
+ * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned
+ */
+ dataset: function(chart, e, options) {
+ var position = getRelativePosition(e, chart);
+ options.axis = options.axis || 'xy';
+ var distanceMetric = getDistanceMetricForAxis(options.axis);
+ var items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);
+
+ if (items.length > 0) {
+ items = chart.getDatasetMeta(items[0]._datasetIndex).data;
+ }
+
+ return items;
+ },
+
+ /**
+ * @function Chart.Interaction.modes.x-axis
+ * @deprecated since version 2.4.0. Use index mode and intersect == true
+ * @todo remove at version 3
+ * @private
+ */
+ 'x-axis': function(chart, e) {
+ return indexMode(chart, e, {intersect: false});
+ },
+
+ /**
+ * Point mode returns all elements that hit test based on the event position
+ * of the event
+ * @function Chart.Interaction.modes.intersect
+ * @param {Chart} chart - the chart we are returning items from
+ * @param {Event} e - the event we are find things at
+ * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned
+ */
+ point: function(chart, e) {
+ var position = getRelativePosition(e, chart);
+ return getIntersectItems(chart, position);
+ },
+
+ /**
+ * nearest mode returns the element closest to the point
+ * @function Chart.Interaction.modes.intersect
+ * @param {Chart} chart - the chart we are returning items from
+ * @param {Event} e - the event we are find things at
+ * @param {IInteractionOptions} options - options to use
+ * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned
+ */
+ nearest: function(chart, e, options) {
+ var position = getRelativePosition(e, chart);
+ options.axis = options.axis || 'xy';
+ var distanceMetric = getDistanceMetricForAxis(options.axis);
+ return getNearestItems(chart, position, options.intersect, distanceMetric);
+ },
+
+ /**
+ * x mode returns the elements that hit-test at the current x coordinate
+ * @function Chart.Interaction.modes.x
+ * @param {Chart} chart - the chart we are returning items from
+ * @param {Event} e - the event we are find things at
+ * @param {IInteractionOptions} options - options to use
+ * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned
+ */
+ x: function(chart, e, options) {
+ var position = getRelativePosition(e, chart);
+ var items = [];
+ var intersectsItem = false;
+
+ parseVisibleItems(chart, function(element) {
+ if (element.inXRange(position.x)) {
+ items.push(element);
+ }
+
+ if (element.inRange(position.x, position.y)) {
+ intersectsItem = true;
+ }
+ });
+
+ // If we want to trigger on an intersect and we don't have any items
+ // that intersect the position, return nothing
+ if (options.intersect && !intersectsItem) {
+ items = [];
+ }
+ return items;
+ },
+
+ /**
+ * y mode returns the elements that hit-test at the current y coordinate
+ * @function Chart.Interaction.modes.y
+ * @param {Chart} chart - the chart we are returning items from
+ * @param {Event} e - the event we are find things at
+ * @param {IInteractionOptions} options - options to use
+ * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned
+ */
+ y: function(chart, e, options) {
+ var position = getRelativePosition(e, chart);
+ var items = [];
+ var intersectsItem = false;
+
+ parseVisibleItems(chart, function(element) {
+ if (element.inYRange(position.y)) {
+ items.push(element);
+ }
+
+ if (element.inRange(position.x, position.y)) {
+ intersectsItem = true;
+ }
+ });
+
+ // If we want to trigger on an intersect and we don't have any items
+ // that intersect the position, return nothing
+ if (options.intersect && !intersectsItem) {
+ items = [];
+ }
+ return items;
+ }
+ }
+};
+
+var extend = helpers$1.extend;
+
+function filterByPosition(array, position) {
+ return helpers$1.where(array, function(v) {
+ return v.pos === position;
+ });
+}
+
+function sortByWeight(array, reverse) {
+ return array.sort(function(a, b) {
+ var v0 = reverse ? b : a;
+ var v1 = reverse ? a : b;
+ return v0.weight === v1.weight ?
+ v0.index - v1.index :
+ v0.weight - v1.weight;
+ });
+}
+
+function wrapBoxes(boxes) {
+ var layoutBoxes = [];
+ var i, ilen, box;
+
+ for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {
+ box = boxes[i];
+ layoutBoxes.push({
+ index: i,
+ box: box,
+ pos: box.position,
+ horizontal: box.isHorizontal(),
+ weight: box.weight
+ });
+ }
+ return layoutBoxes;
+}
+
+function setLayoutDims(layouts, params) {
+ var i, ilen, layout;
+ for (i = 0, ilen = layouts.length; i < ilen; ++i) {
+ layout = layouts[i];
+ // store width used instead of chartArea.w in fitBoxes
+ layout.width = layout.horizontal
+ ? layout.box.fullWidth && params.availableWidth
+ : params.vBoxMaxWidth;
+ // store height used instead of chartArea.h in fitBoxes
+ layout.height = layout.horizontal && params.hBoxMaxHeight;
+ }
+}
+
+function buildLayoutBoxes(boxes) {
+ var layoutBoxes = wrapBoxes(boxes);
+ var left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);
+ var right = sortByWeight(filterByPosition(layoutBoxes, 'right'));
+ var top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);
+ var bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));
+
+ return {
+ leftAndTop: left.concat(top),
+ rightAndBottom: right.concat(bottom),
+ chartArea: filterByPosition(layoutBoxes, 'chartArea'),
+ vertical: left.concat(right),
+ horizontal: top.concat(bottom)
+ };
+}
+
+function getCombinedMax(maxPadding, chartArea, a, b) {
+ return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);
+}
+
+function updateDims(chartArea, params, layout) {
+ var box = layout.box;
+ var maxPadding = chartArea.maxPadding;
+ var newWidth, newHeight;
+
+ if (layout.size) {
+ // this layout was already counted for, lets first reduce old size
+ chartArea[layout.pos] -= layout.size;
+ }
+ layout.size = layout.horizontal ? box.height : box.width;
+ chartArea[layout.pos] += layout.size;
+
+ if (box.getPadding) {
+ var boxPadding = box.getPadding();
+ maxPadding.top = Math.max(maxPadding.top, boxPadding.top);
+ maxPadding.left = Math.max(maxPadding.left, boxPadding.left);
+ maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);
+ maxPadding.right = Math.max(maxPadding.right, boxPadding.right);
+ }
+
+ newWidth = params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right');
+ newHeight = params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom');
+
+ if (newWidth !== chartArea.w || newHeight !== chartArea.h) {
+ chartArea.w = newWidth;
+ chartArea.h = newHeight;
+
+ // return true if chart area changed in layout's direction
+ return layout.horizontal ? newWidth !== chartArea.w : newHeight !== chartArea.h;
+ }
+}
+
+function handleMaxPadding(chartArea) {
+ var maxPadding = chartArea.maxPadding;
+
+ function updatePos(pos) {
+ var change = Math.max(maxPadding[pos] - chartArea[pos], 0);
+ chartArea[pos] += change;
+ return change;
+ }
+ chartArea.y += updatePos('top');
+ chartArea.x += updatePos('left');
+ updatePos('right');
+ updatePos('bottom');
+}
+
+function getMargins(horizontal, chartArea) {
+ var maxPadding = chartArea.maxPadding;
+
+ function marginForPositions(positions) {
+ var margin = {left: 0, top: 0, right: 0, bottom: 0};
+ positions.forEach(function(pos) {
+ margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);
+ });
+ return margin;
+ }
+
+ return horizontal
+ ? marginForPositions(['left', 'right'])
+ : marginForPositions(['top', 'bottom']);
+}
+
+function fitBoxes(boxes, chartArea, params) {
+ var refitBoxes = [];
+ var i, ilen, layout, box, refit, changed;
+
+ for (i = 0, ilen = boxes.length; i < ilen; ++i) {
+ layout = boxes[i];
+ box = layout.box;
+
+ box.update(
+ layout.width || chartArea.w,
+ layout.height || chartArea.h,
+ getMargins(layout.horizontal, chartArea)
+ );
+ if (updateDims(chartArea, params, layout)) {
+ changed = true;
+ if (refitBoxes.length) {
+ // Dimensions changed and there were non full width boxes before this
+ // -> we have to refit those
+ refit = true;
+ }
+ }
+ if (!box.fullWidth) { // fullWidth boxes don't need to be re-fitted in any case
+ refitBoxes.push(layout);
+ }
+ }
+
+ return refit ? fitBoxes(refitBoxes, chartArea, params) || changed : changed;
+}
+
+function placeBoxes(boxes, chartArea, params) {
+ var userPadding = params.padding;
+ var x = chartArea.x;
+ var y = chartArea.y;
+ var i, ilen, layout, box;
+
+ for (i = 0, ilen = boxes.length; i < ilen; ++i) {
+ layout = boxes[i];
+ box = layout.box;
+ if (layout.horizontal) {
+ box.left = box.fullWidth ? userPadding.left : chartArea.left;
+ box.right = box.fullWidth ? params.outerWidth - userPadding.right : chartArea.left + chartArea.w;
+ box.top = y;
+ box.bottom = y + box.height;
+ box.width = box.right - box.left;
+ y = box.bottom;
+ } else {
+ box.left = x;
+ box.right = x + box.width;
+ box.top = chartArea.top;
+ box.bottom = chartArea.top + chartArea.h;
+ box.height = box.bottom - box.top;
+ x = box.right;
+ }
+ }
+
+ chartArea.x = x;
+ chartArea.y = y;
+}
+
+core_defaults._set('global', {
+ layout: {
+ padding: {
+ top: 0,
+ right: 0,
+ bottom: 0,
+ left: 0
+ }
+ }
+});
+
+/**
+ * @interface ILayoutItem
+ * @prop {string} position - The position of the item in the chart layout. Possible values are
+ * 'left', 'top', 'right', 'bottom', and 'chartArea'
+ * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area
+ * @prop {boolean} fullWidth - if true, and the item is horizontal, then push vertical boxes down
+ * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)
+ * @prop {function} update - Takes two parameters: width and height. Returns size of item
+ * @prop {function} getPadding - Returns an object with padding on the edges
+ * @prop {number} width - Width of item. Must be valid after update()
+ * @prop {number} height - Height of item. Must be valid after update()
+ * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update
+ * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update
+ * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update
+ * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update
+ */
+
+// The layout service is very self explanatory. It's responsible for the layout within a chart.
+// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need
+// It is this service's responsibility of carrying out that layout.
+var core_layouts = {
+ defaults: {},
+
+ /**
+ * Register a box to a chart.
+ * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.
+ * @param {Chart} chart - the chart to use
+ * @param {ILayoutItem} item - the item to add to be layed out
+ */
+ addBox: function(chart, item) {
+ if (!chart.boxes) {
+ chart.boxes = [];
+ }
+
+ // initialize item with default values
+ item.fullWidth = item.fullWidth || false;
+ item.position = item.position || 'top';
+ item.weight = item.weight || 0;
+ item._layers = item._layers || function() {
+ return [{
+ z: 0,
+ draw: function() {
+ item.draw.apply(item, arguments);
+ }
+ }];
+ };
+
+ chart.boxes.push(item);
+ },
+
+ /**
+ * Remove a layoutItem from a chart
+ * @param {Chart} chart - the chart to remove the box from
+ * @param {ILayoutItem} layoutItem - the item to remove from the layout
+ */
+ removeBox: function(chart, layoutItem) {
+ var index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;
+ if (index !== -1) {
+ chart.boxes.splice(index, 1);
+ }
+ },
+
+ /**
+ * Sets (or updates) options on the given `item`.
+ * @param {Chart} chart - the chart in which the item lives (or will be added to)
+ * @param {ILayoutItem} item - the item to configure with the given options
+ * @param {object} options - the new item options.
+ */
+ configure: function(chart, item, options) {
+ var props = ['fullWidth', 'position', 'weight'];
+ var ilen = props.length;
+ var i = 0;
+ var prop;
+
+ for (; i < ilen; ++i) {
+ prop = props[i];
+ if (options.hasOwnProperty(prop)) {
+ item[prop] = options[prop];
+ }
+ }
+ },
+
+ /**
+ * Fits boxes of the given chart into the given size by having each box measure itself
+ * then running a fitting algorithm
+ * @param {Chart} chart - the chart
+ * @param {number} width - the width to fit into
+ * @param {number} height - the height to fit into
+ */
+ update: function(chart, width, height) {
+ if (!chart) {
+ return;
+ }
+
+ var layoutOptions = chart.options.layout || {};
+ var padding = helpers$1.options.toPadding(layoutOptions.padding);
+
+ var availableWidth = width - padding.width;
+ var availableHeight = height - padding.height;
+ var boxes = buildLayoutBoxes(chart.boxes);
+ var verticalBoxes = boxes.vertical;
+ var horizontalBoxes = boxes.horizontal;
+
+ // Essentially we now have any number of boxes on each of the 4 sides.
+ // Our canvas looks like the following.
+ // The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and
+ // B1 is the bottom axis
+ // There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays
+ // These locations are single-box locations only, when trying to register a chartArea location that is already taken,
+ // an error will be thrown.
+ //
+ // |----------------------------------------------------|
+ // | T1 (Full Width) |
+ // |----------------------------------------------------|
+ // | | | T2 | |
+ // | |----|-------------------------------------|----|
+ // | | | C1 | | C2 | |
+ // | | |----| |----| |
+ // | | | | |
+ // | L1 | L2 | ChartArea (C0) | R1 |
+ // | | | | |
+ // | | |----| |----| |
+ // | | | C3 | | C4 | |
+ // | |----|-------------------------------------|----|
+ // | | | B1 | |
+ // |----------------------------------------------------|
+ // | B2 (Full Width) |
+ // |----------------------------------------------------|
+ //
+
+ var params = Object.freeze({
+ outerWidth: width,
+ outerHeight: height,
+ padding: padding,
+ availableWidth: availableWidth,
+ vBoxMaxWidth: availableWidth / 2 / verticalBoxes.length,
+ hBoxMaxHeight: availableHeight / 2
+ });
+ var chartArea = extend({
+ maxPadding: extend({}, padding),
+ w: availableWidth,
+ h: availableHeight,
+ x: padding.left,
+ y: padding.top
+ }, padding);
+
+ setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);
+
+ // First fit vertical boxes
+ fitBoxes(verticalBoxes, chartArea, params);
+
+ // Then fit horizontal boxes
+ if (fitBoxes(horizontalBoxes, chartArea, params)) {
+ // if the area changed, re-fit vertical boxes
+ fitBoxes(verticalBoxes, chartArea, params);
+ }
+
+ handleMaxPadding(chartArea);
+
+ // Finally place the boxes to correct coordinates
+ placeBoxes(boxes.leftAndTop, chartArea, params);
+
+ // Move to opposite side of chart
+ chartArea.x += chartArea.w;
+ chartArea.y += chartArea.h;
+
+ placeBoxes(boxes.rightAndBottom, chartArea, params);
+
+ chart.chartArea = {
+ left: chartArea.left,
+ top: chartArea.top,
+ right: chartArea.left + chartArea.w,
+ bottom: chartArea.top + chartArea.h
+ };
+
+ // Finally update boxes in chartArea (radial scale for example)
+ helpers$1.each(boxes.chartArea, function(layout) {
+ var box = layout.box;
+ extend(box, chart.chartArea);
+ box.update(chartArea.w, chartArea.h);
+ });
+ }
+};
+
+/**
+ * Platform fallback implementation (minimal).
+ * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939
+ */
+
+var platform_basic = {
+ acquireContext: function(item) {
+ if (item && item.canvas) {
+ // Support for any object associated to a canvas (including a context2d)
+ item = item.canvas;
+ }
+
+ return item && item.getContext('2d') || null;
+ }
+};
+
+var platform_dom = "/*\n * DOM element rendering detection\n * https://davidwalsh.name/detect-node-insertion\n */\n@keyframes chartjs-render-animation {\n\tfrom { opacity: 0.99; }\n\tto { opacity: 1; }\n}\n\n.chartjs-render-monitor {\n\tanimation: chartjs-render-animation 0.001s;\n}\n\n/*\n * DOM element resizing detection\n * https://github.com/marcj/css-element-queries\n */\n.chartjs-size-monitor,\n.chartjs-size-monitor-expand,\n.chartjs-size-monitor-shrink {\n\tposition: absolute;\n\tdirection: ltr;\n\tleft: 0;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\toverflow: hidden;\n\tpointer-events: none;\n\tvisibility: hidden;\n\tz-index: -1;\n}\n\n.chartjs-size-monitor-expand > div {\n\tposition: absolute;\n\twidth: 1000000px;\n\theight: 1000000px;\n\tleft: 0;\n\ttop: 0;\n}\n\n.chartjs-size-monitor-shrink > div {\n\tposition: absolute;\n\twidth: 200%;\n\theight: 200%;\n\tleft: 0;\n\ttop: 0;\n}\n";
+
+var platform_dom$1 = /*#__PURE__*/Object.freeze({
+__proto__: null,
+'default': platform_dom
+});
+
+var stylesheet = getCjsExportFromNamespace(platform_dom$1);
+
+var EXPANDO_KEY = '$chartjs';
+var CSS_PREFIX = 'chartjs-';
+var CSS_SIZE_MONITOR = CSS_PREFIX + 'size-monitor';
+var CSS_RENDER_MONITOR = CSS_PREFIX + 'render-monitor';
+var CSS_RENDER_ANIMATION = CSS_PREFIX + 'render-animation';
+var ANIMATION_START_EVENTS = ['animationstart', 'webkitAnimationStart'];
+
+/**
+ * DOM event types -> Chart.js event types.
+ * Note: only events with different types are mapped.
+ * @see https://developer.mozilla.org/en-US/docs/Web/Events
+ */
+var EVENT_TYPES = {
+ touchstart: 'mousedown',
+ touchmove: 'mousemove',
+ touchend: 'mouseup',
+ pointerenter: 'mouseenter',
+ pointerdown: 'mousedown',
+ pointermove: 'mousemove',
+ pointerup: 'mouseup',
+ pointerleave: 'mouseout',
+ pointerout: 'mouseout'
+};
+
+/**
+ * The "used" size is the final value of a dimension property after all calculations have
+ * been performed. This method uses the computed style of `element` but returns undefined
+ * if the computed style is not expressed in pixels. That can happen in some cases where
+ * `element` has a size relative to its parent and this last one is not yet displayed,
+ * for example because of `display: none` on a parent node.
+ * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value
+ * @returns {number} Size in pixels or undefined if unknown.
+ */
+function readUsedSize(element, property) {
+ var value = helpers$1.getStyle(element, property);
+ var matches = value && value.match(/^(\d+)(\.\d+)?px$/);
+ return matches ? Number(matches[1]) : undefined;
+}
+
+/**
+ * Initializes the canvas style and render size without modifying the canvas display size,
+ * since responsiveness is handled by the controller.resize() method. The config is used
+ * to determine the aspect ratio to apply in case no explicit height has been specified.
+ */
+function initCanvas(canvas, config) {
+ var style = canvas.style;
+
+ // NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it
+ // returns null or '' if no explicit value has been set to the canvas attribute.
+ var renderHeight = canvas.getAttribute('height');
+ var renderWidth = canvas.getAttribute('width');
+
+ // Chart.js modifies some canvas values that we want to restore on destroy
+ canvas[EXPANDO_KEY] = {
+ initial: {
+ height: renderHeight,
+ width: renderWidth,
+ style: {
+ display: style.display,
+ height: style.height,
+ width: style.width
+ }
+ }
+ };
+
+ // Force canvas to display as block to avoid extra space caused by inline
+ // elements, which would interfere with the responsive resize process.
+ // https://github.com/chartjs/Chart.js/issues/2538
+ style.display = style.display || 'block';
+
+ if (renderWidth === null || renderWidth === '') {
+ var displayWidth = readUsedSize(canvas, 'width');
+ if (displayWidth !== undefined) {
+ canvas.width = displayWidth;
+ }
+ }
+
+ if (renderHeight === null || renderHeight === '') {
+ if (canvas.style.height === '') {
+ // If no explicit render height and style height, let's apply the aspect ratio,
+ // which one can be specified by the user but also by charts as default option
+ // (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.
+ canvas.height = canvas.width / (config.options.aspectRatio || 2);
+ } else {
+ var displayHeight = readUsedSize(canvas, 'height');
+ if (displayWidth !== undefined) {
+ canvas.height = displayHeight;
+ }
+ }
+ }
+
+ return canvas;
+}
+
+/**
+ * Detects support for options object argument in addEventListener.
+ * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support
+ * @private
+ */
+var supportsEventListenerOptions = (function() {
+ var supports = false;
+ try {
+ var options = Object.defineProperty({}, 'passive', {
+ // eslint-disable-next-line getter-return
+ get: function() {
+ supports = true;
+ }
+ });
+ window.addEventListener('e', null, options);
+ } catch (e) {
+ // continue regardless of error
+ }
+ return supports;
+}());
+
+// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.
+// https://github.com/chartjs/Chart.js/issues/4287
+var eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;
+
+function addListener(node, type, listener) {
+ node.addEventListener(type, listener, eventListenerOptions);
+}
+
+function removeListener(node, type, listener) {
+ node.removeEventListener(type, listener, eventListenerOptions);
+}
+
+function createEvent(type, chart, x, y, nativeEvent) {
+ return {
+ type: type,
+ chart: chart,
+ native: nativeEvent || null,
+ x: x !== undefined ? x : null,
+ y: y !== undefined ? y : null,
+ };
+}
+
+function fromNativeEvent(event, chart) {
+ var type = EVENT_TYPES[event.type] || event.type;
+ var pos = helpers$1.getRelativePosition(event, chart);
+ return createEvent(type, chart, pos.x, pos.y, event);
+}
+
+function throttled(fn, thisArg) {
+ var ticking = false;
+ var args = [];
+
+ return function() {
+ args = Array.prototype.slice.call(arguments);
+ thisArg = thisArg || this;
+
+ if (!ticking) {
+ ticking = true;
+ helpers$1.requestAnimFrame.call(window, function() {
+ ticking = false;
+ fn.apply(thisArg, args);
+ });
+ }
+ };
+}
+
+function createDiv(cls) {
+ var el = document.createElement('div');
+ el.className = cls || '';
+ return el;
+}
+
+// Implementation based on https://github.com/marcj/css-element-queries
+function createResizer(handler) {
+ var maxSize = 1000000;
+
+ // NOTE(SB) Don't use innerHTML because it could be considered unsafe.
+ // https://github.com/chartjs/Chart.js/issues/5902
+ var resizer = createDiv(CSS_SIZE_MONITOR);
+ var expand = createDiv(CSS_SIZE_MONITOR + '-expand');
+ var shrink = createDiv(CSS_SIZE_MONITOR + '-shrink');
+
+ expand.appendChild(createDiv());
+ shrink.appendChild(createDiv());
+
+ resizer.appendChild(expand);
+ resizer.appendChild(shrink);
+ resizer._reset = function() {
+ expand.scrollLeft = maxSize;
+ expand.scrollTop = maxSize;
+ shrink.scrollLeft = maxSize;
+ shrink.scrollTop = maxSize;
+ };
+
+ var onScroll = function() {
+ resizer._reset();
+ handler();
+ };
+
+ addListener(expand, 'scroll', onScroll.bind(expand, 'expand'));
+ addListener(shrink, 'scroll', onScroll.bind(shrink, 'shrink'));
+
+ return resizer;
+}
+
+// https://davidwalsh.name/detect-node-insertion
+function watchForRender(node, handler) {
+ var expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});
+ var proxy = expando.renderProxy = function(e) {
+ if (e.animationName === CSS_RENDER_ANIMATION) {
+ handler();
+ }
+ };
+
+ helpers$1.each(ANIMATION_START_EVENTS, function(type) {
+ addListener(node, type, proxy);
+ });
+
+ // #4737: Chrome might skip the CSS animation when the CSS_RENDER_MONITOR class
+ // is removed then added back immediately (same animation frame?). Accessing the
+ // `offsetParent` property will force a reflow and re-evaluate the CSS animation.
+ // https://gist.github.com/paulirish/5d52fb081b3570c81e3a#box-metrics
+ // https://github.com/chartjs/Chart.js/issues/4737
+ expando.reflow = !!node.offsetParent;
+
+ node.classList.add(CSS_RENDER_MONITOR);
+}
+
+function unwatchForRender(node) {
+ var expando = node[EXPANDO_KEY] || {};
+ var proxy = expando.renderProxy;
+
+ if (proxy) {
+ helpers$1.each(ANIMATION_START_EVENTS, function(type) {
+ removeListener(node, type, proxy);
+ });
+
+ delete expando.renderProxy;
+ }
+
+ node.classList.remove(CSS_RENDER_MONITOR);
+}
+
+function addResizeListener(node, listener, chart) {
+ var expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});
+
+ // Let's keep track of this added resizer and thus avoid DOM query when removing it.
+ var resizer = expando.resizer = createResizer(throttled(function() {
+ if (expando.resizer) {
+ var container = chart.options.maintainAspectRatio && node.parentNode;
+ var w = container ? container.clientWidth : 0;
+ listener(createEvent('resize', chart));
+ if (container && container.clientWidth < w && chart.canvas) {
+ // If the container size shrank during chart resize, let's assume
+ // scrollbar appeared. So we resize again with the scrollbar visible -
+ // effectively making chart smaller and the scrollbar hidden again.
+ // Because we are inside `throttled`, and currently `ticking`, scroll
+ // events are ignored during this whole 2 resize process.
+ // If we assumed wrong and something else happened, we are resizing
+ // twice in a frame (potential performance issue)
+ listener(createEvent('resize', chart));
+ }
+ }
+ }));
+
+ // The resizer needs to be attached to the node parent, so we first need to be
+ // sure that `node` is attached to the DOM before injecting the resizer element.
+ watchForRender(node, function() {
+ if (expando.resizer) {
+ var container = node.parentNode;
+ if (container && container !== resizer.parentNode) {
+ container.insertBefore(resizer, container.firstChild);
+ }
+
+ // The container size might have changed, let's reset the resizer state.
+ resizer._reset();
+ }
+ });
+}
+
+function removeResizeListener(node) {
+ var expando = node[EXPANDO_KEY] || {};
+ var resizer = expando.resizer;
+
+ delete expando.resizer;
+ unwatchForRender(node);
+
+ if (resizer && resizer.parentNode) {
+ resizer.parentNode.removeChild(resizer);
+ }
+}
+
+/**
+ * Injects CSS styles inline if the styles are not already present.
+ * @param {HTMLDocument|ShadowRoot} rootNode - the node to contain the <style>.
+ * @param {string} css - the CSS to be injected.
+ */
+function injectCSS(rootNode, css) {
+ // https://stackoverflow.com/q/3922139
+ var expando = rootNode[EXPANDO_KEY] || (rootNode[EXPANDO_KEY] = {});
+ if (!expando.containsStyles) {
+ expando.containsStyles = true;
+ css = '/* Chart.js */\n' + css;
+ var style = document.createElement('style');
+ style.setAttribute('type', 'text/css');
+ style.appendChild(document.createTextNode(css));
+ rootNode.appendChild(style);
+ }
+}
+
+var platform_dom$2 = {
+ /**
+ * When `true`, prevents the automatic injection of the stylesheet required to
+ * correctly detect when the chart is added to the DOM and then resized. This
+ * switch has been added to allow external stylesheet (`dist/Chart(.min)?.js`)
+ * to be manually imported to make this library compatible with any CSP.
+ * See https://github.com/chartjs/Chart.js/issues/5208
+ */
+ disableCSSInjection: false,
+
+ /**
+ * This property holds whether this platform is enabled for the current environment.
+ * Currently used by platform.js to select the proper implementation.
+ * @private
+ */
+ _enabled: typeof window !== 'undefined' && typeof document !== 'undefined',
+
+ /**
+ * Initializes resources that depend on platform options.
+ * @param {HTMLCanvasElement} canvas - The Canvas element.
+ * @private
+ */
+ _ensureLoaded: function(canvas) {
+ if (!this.disableCSSInjection) {
+ // If the canvas is in a shadow DOM, then the styles must also be inserted
+ // into the same shadow DOM.
+ // https://github.com/chartjs/Chart.js/issues/5763
+ var root = canvas.getRootNode ? canvas.getRootNode() : document;
+ var targetNode = root.host ? root : document.head;
+ injectCSS(targetNode, stylesheet);
+ }
+ },
+
+ acquireContext: function(item, config) {
+ if (typeof item === 'string') {
+ item = document.getElementById(item);
+ } else if (item.length) {
+ // Support for array based queries (such as jQuery)
+ item = item[0];
+ }
+
+ if (item && item.canvas) {
+ // Support for any object associated to a canvas (including a context2d)
+ item = item.canvas;
+ }
+
+ // To prevent canvas fingerprinting, some add-ons undefine the getContext
+ // method, for example: https://github.com/kkapsner/CanvasBlocker
+ // https://github.com/chartjs/Chart.js/issues/2807
+ var context = item && item.getContext && item.getContext('2d');
+
+ // `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the item is
+ // inside an iframe or when running in a protected environment. We could guess the
+ // types from their toString() value but let's keep things flexible and assume it's
+ // a sufficient condition if the item has a context2D which has item as `canvas`.
+ // https://github.com/chartjs/Chart.js/issues/3887
+ // https://github.com/chartjs/Chart.js/issues/4102
+ // https://github.com/chartjs/Chart.js/issues/4152
+ if (context && context.canvas === item) {
+ // Load platform resources on first chart creation, to make it possible to
+ // import the library before setting platform options.
+ this._ensureLoaded(item);
+ initCanvas(item, config);
+ return context;
+ }
+
+ return null;
+ },
+
+ releaseContext: function(context) {
+ var canvas = context.canvas;
+ if (!canvas[EXPANDO_KEY]) {
+ return;
+ }
+
+ var initial = canvas[EXPANDO_KEY].initial;
+ ['height', 'width'].forEach(function(prop) {
+ var value = initial[prop];
+ if (helpers$1.isNullOrUndef(value)) {
+ canvas.removeAttribute(prop);
+ } else {
+ canvas.setAttribute(prop, value);
+ }
+ });
+
+ helpers$1.each(initial.style || {}, function(value, key) {
+ canvas.style[key] = value;
+ });
+
+ // The canvas render size might have been changed (and thus the state stack discarded),
+ // we can't use save() and restore() to restore the initial state. So make sure that at
+ // least the canvas context is reset to the default state by setting the canvas width.
+ // https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html
+ // eslint-disable-next-line no-self-assign
+ canvas.width = canvas.width;
+
+ delete canvas[EXPANDO_KEY];
+ },
+
+ addEventListener: function(chart, type, listener) {
+ var canvas = chart.canvas;
+ if (type === 'resize') {
+ // Note: the resize event is not supported on all browsers.
+ addResizeListener(canvas, listener, chart);
+ return;
+ }
+
+ var expando = listener[EXPANDO_KEY] || (listener[EXPANDO_KEY] = {});
+ var proxies = expando.proxies || (expando.proxies = {});
+ var proxy = proxies[chart.id + '_' + type] = function(event) {
+ listener(fromNativeEvent(event, chart));
+ };
+
+ addListener(canvas, type, proxy);
+ },
+
+ removeEventListener: function(chart, type, listener) {
+ var canvas = chart.canvas;
+ if (type === 'resize') {
+ // Note: the resize event is not supported on all browsers.
+ removeResizeListener(canvas);
+ return;
+ }
+
+ var expando = listener[EXPANDO_KEY] || {};
+ var proxies = expando.proxies || {};
+ var proxy = proxies[chart.id + '_' + type];
+ if (!proxy) {
+ return;
+ }
+
+ removeListener(canvas, type, proxy);
+ }
+};
+
+// DEPRECATIONS
+
+/**
+ * Provided for backward compatibility, use EventTarget.addEventListener instead.
+ * EventTarget.addEventListener compatibility: Chrome, Opera 7, Safari, FF1.5+, IE9+
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener
+ * @function Chart.helpers.addEvent
+ * @deprecated since version 2.7.0
+ * @todo remove at version 3
+ * @private
+ */
+helpers$1.addEvent = addListener;
+
+/**
+ * Provided for backward compatibility, use EventTarget.removeEventListener instead.
+ * EventTarget.removeEventListener compatibility: Chrome, Opera 7, Safari, FF1.5+, IE9+
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener
+ * @function Chart.helpers.removeEvent
+ * @deprecated since version 2.7.0
+ * @todo remove at version 3
+ * @private
+ */
+helpers$1.removeEvent = removeListener;
+
+// @TODO Make possible to select another platform at build time.
+var implementation = platform_dom$2._enabled ? platform_dom$2 : platform_basic;
+
+/**
+ * @namespace Chart.platform
+ * @see https://chartjs.gitbooks.io/proposals/content/Platform.html
+ * @since 2.4.0
+ */
+var platform = helpers$1.extend({
+ /**
+ * @since 2.7.0
+ */
+ initialize: function() {},
+
+ /**
+ * Called at chart construction time, returns a context2d instance implementing
+ * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.
+ * @param {*} item - The native item from which to acquire context (platform specific)
+ * @param {object} options - The chart options
+ * @returns {CanvasRenderingContext2D} context2d instance
+ */
+ acquireContext: function() {},
+
+ /**
+ * Called at chart destruction time, releases any resources associated to the context
+ * previously returned by the acquireContext() method.
+ * @param {CanvasRenderingContext2D} context - The context2d instance
+ * @returns {boolean} true if the method succeeded, else false
+ */
+ releaseContext: function() {},
+
+ /**
+ * Registers the specified listener on the given chart.
+ * @param {Chart} chart - Chart from which to listen for event
+ * @param {string} type - The ({@link IEvent}) type to listen for
+ * @param {function} listener - Receives a notification (an object that implements
+ * the {@link IEvent} interface) when an event of the specified type occurs.
+ */
+ addEventListener: function() {},
+
+ /**
+ * Removes the specified listener previously registered with addEventListener.
+ * @param {Chart} chart - Chart from which to remove the listener
+ * @param {string} type - The ({@link IEvent}) type to remove
+ * @param {function} listener - The listener function to remove from the event target.
+ */
+ removeEventListener: function() {}
+
+}, implementation);
+
+core_defaults._set('global', {
+ plugins: {}
+});
+
+/**
+ * The plugin service singleton
+ * @namespace Chart.plugins
+ * @since 2.1.0
+ */
+var core_plugins = {
+ /**
+ * Globally registered plugins.
+ * @private
+ */
+ _plugins: [],
+
+ /**
+ * This identifier is used to invalidate the descriptors cache attached to each chart
+ * when a global plugin is registered or unregistered. In this case, the cache ID is
+ * incremented and descriptors are regenerated during following API calls.
+ * @private
+ */
+ _cacheId: 0,
+
+ /**
+ * Registers the given plugin(s) if not already registered.
+ * @param {IPlugin[]|IPlugin} plugins plugin instance(s).
+ */
+ register: function(plugins) {
+ var p = this._plugins;
+ ([]).concat(plugins).forEach(function(plugin) {
+ if (p.indexOf(plugin) === -1) {
+ p.push(plugin);
+ }
+ });
+
+ this._cacheId++;
+ },
+
+ /**
+ * Unregisters the given plugin(s) only if registered.
+ * @param {IPlugin[]|IPlugin} plugins plugin instance(s).
+ */
+ unregister: function(plugins) {
+ var p = this._plugins;
+ ([]).concat(plugins).forEach(function(plugin) {
+ var idx = p.indexOf(plugin);
+ if (idx !== -1) {
+ p.splice(idx, 1);
+ }
+ });
+
+ this._cacheId++;
+ },
+
+ /**
+ * Remove all registered plugins.
+ * @since 2.1.5
+ */
+ clear: function() {
+ this._plugins = [];
+ this._cacheId++;
+ },
+
+ /**
+ * Returns the number of registered plugins?
+ * @returns {number}
+ * @since 2.1.5
+ */
+ count: function() {
+ return this._plugins.length;
+ },
+
+ /**
+ * Returns all registered plugin instances.
+ * @returns {IPlugin[]} array of plugin objects.
+ * @since 2.1.5
+ */
+ getAll: function() {
+ return this._plugins;
+ },
+
+ /**
+ * Calls enabled plugins for `chart` on the specified hook and with the given args.
+ * This method immediately returns as soon as a plugin explicitly returns false. The
+ * returned value can be used, for instance, to interrupt the current action.
+ * @param {Chart} chart - The chart instance for which plugins should be called.
+ * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').
+ * @param {Array} [args] - Extra arguments to apply to the hook call.
+ * @returns {boolean} false if any of the plugins return false, else returns true.
+ */
+ notify: function(chart, hook, args) {
+ var descriptors = this.descriptors(chart);
+ var ilen = descriptors.length;
+ var i, descriptor, plugin, params, method;
+
+ for (i = 0; i < ilen; ++i) {
+ descriptor = descriptors[i];
+ plugin = descriptor.plugin;
+ method = plugin[hook];
+ if (typeof method === 'function') {
+ params = [chart].concat(args || []);
+ params.push(descriptor.options);
+ if (method.apply(plugin, params) === false) {
+ return false;
+ }
+ }
+ }
+
+ return true;
+ },
+
+ /**
+ * Returns descriptors of enabled plugins for the given chart.
+ * @returns {object[]} [{ plugin, options }]
+ * @private
+ */
+ descriptors: function(chart) {
+ var cache = chart.$plugins || (chart.$plugins = {});
+ if (cache.id === this._cacheId) {
+ return cache.descriptors;
+ }
+
+ var plugins = [];
+ var descriptors = [];
+ var config = (chart && chart.config) || {};
+ var options = (config.options && config.options.plugins) || {};
+
+ this._plugins.concat(config.plugins || []).forEach(function(plugin) {
+ var idx = plugins.indexOf(plugin);
+ if (idx !== -1) {
+ return;
+ }
+
+ var id = plugin.id;
+ var opts = options[id];
+ if (opts === false) {
+ return;
+ }
+
+ if (opts === true) {
+ opts = helpers$1.clone(core_defaults.global.plugins[id]);
+ }
+
+ plugins.push(plugin);
+ descriptors.push({
+ plugin: plugin,
+ options: opts || {}
+ });
+ });
+
+ cache.descriptors = descriptors;
+ cache.id = this._cacheId;
+ return descriptors;
+ },
+
+ /**
+ * Invalidates cache for the given chart: descriptors hold a reference on plugin option,
+ * but in some cases, this reference can be changed by the user when updating options.
+ * https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167
+ * @private
+ */
+ _invalidate: function(chart) {
+ delete chart.$plugins;
+ }
+};
+
+var core_scaleService = {
+ // Scale registration object. Extensions can register new scale types (such as log or DB scales) and then
+ // use the new chart options to grab the correct scale
+ constructors: {},
+ // Use a registration function so that we can move to an ES6 map when we no longer need to support
+ // old browsers
+
+ // Scale config defaults
+ defaults: {},
+ registerScaleType: function(type, scaleConstructor, scaleDefaults) {
+ this.constructors[type] = scaleConstructor;
+ this.defaults[type] = helpers$1.clone(scaleDefaults);
+ },
+ getScaleConstructor: function(type) {
+ return this.constructors.hasOwnProperty(type) ? this.constructors[type] : undefined;
+ },
+ getScaleDefaults: function(type) {
+ // Return the scale defaults merged with the global settings so that we always use the latest ones
+ return this.defaults.hasOwnProperty(type) ? helpers$1.merge({}, [core_defaults.scale, this.defaults[type]]) : {};
+ },
+ updateScaleDefaults: function(type, additions) {
+ var me = this;
+ if (me.defaults.hasOwnProperty(type)) {
+ me.defaults[type] = helpers$1.extend(me.defaults[type], additions);
+ }
+ },
+ addScalesToLayout: function(chart) {
+ // Adds each scale to the chart.boxes array to be sized accordingly
+ helpers$1.each(chart.scales, function(scale) {
+ // Set ILayoutItem parameters for backwards compatibility
+ scale.fullWidth = scale.options.fullWidth;
+ scale.position = scale.options.position;
+ scale.weight = scale.options.weight;
+ core_layouts.addBox(chart, scale);
+ });
+ }
+};
+
+var valueOrDefault$8 = helpers$1.valueOrDefault;
+var getRtlHelper = helpers$1.rtl.getRtlAdapter;
+
+core_defaults._set('global', {
+ tooltips: {
+ enabled: true,
+ custom: null,
+ mode: 'nearest',
+ position: 'average',
+ intersect: true,
+ backgroundColor: 'rgba(0,0,0,0.8)',
+ titleFontStyle: 'bold',
+ titleSpacing: 2,
+ titleMarginBottom: 6,
+ titleFontColor: '#fff',
+ titleAlign: 'left',
+ bodySpacing: 2,
+ bodyFontColor: '#fff',
+ bodyAlign: 'left',
+ footerFontStyle: 'bold',
+ footerSpacing: 2,
+ footerMarginTop: 6,
+ footerFontColor: '#fff',
+ footerAlign: 'left',
+ yPadding: 6,
+ xPadding: 6,
+ caretPadding: 2,
+ caretSize: 5,
+ cornerRadius: 6,
+ multiKeyBackground: '#fff',
+ displayColors: true,
+ borderColor: 'rgba(0,0,0,0)',
+ borderWidth: 0,
+ callbacks: {
+ // Args are: (tooltipItems, data)
+ beforeTitle: helpers$1.noop,
+ title: function(tooltipItems, data) {
+ var title = '';
+ var labels = data.labels;
+ var labelCount = labels ? labels.length : 0;
+
+ if (tooltipItems.length > 0) {
+ var item = tooltipItems[0];
+ if (item.label) {
+ title = item.label;
+ } else if (item.xLabel) {
+ title = item.xLabel;
+ } else if (labelCount > 0 && item.index < labelCount) {
+ title = labels[item.index];
+ }
+ }
+
+ return title;
+ },
+ afterTitle: helpers$1.noop,
+
+ // Args are: (tooltipItems, data)
+ beforeBody: helpers$1.noop,
+
+ // Args are: (tooltipItem, data)
+ beforeLabel: helpers$1.noop,
+ label: function(tooltipItem, data) {
+ var label = data.datasets[tooltipItem.datasetIndex].label || '';
+
+ if (label) {
+ label += ': ';
+ }
+ if (!helpers$1.isNullOrUndef(tooltipItem.value)) {
+ label += tooltipItem.value;
+ } else {
+ label += tooltipItem.yLabel;
+ }
+ return label;
+ },
+ labelColor: function(tooltipItem, chart) {
+ var meta = chart.getDatasetMeta(tooltipItem.datasetIndex);
+ var activeElement = meta.data[tooltipItem.index];
+ var view = activeElement._view;
+ return {
+ borderColor: view.borderColor,
+ backgroundColor: view.backgroundColor
+ };
+ },
+ labelTextColor: function() {
+ return this._options.bodyFontColor;
+ },
+ afterLabel: helpers$1.noop,
+
+ // Args are: (tooltipItems, data)
+ afterBody: helpers$1.noop,
+
+ // Args are: (tooltipItems, data)
+ beforeFooter: helpers$1.noop,
+ footer: helpers$1.noop,
+ afterFooter: helpers$1.noop
+ }
+ }
+});
+
+var positioners = {
+ /**
+ * Average mode places the tooltip at the average position of the elements shown
+ * @function Chart.Tooltip.positioners.average
+ * @param elements {ChartElement[]} the elements being displayed in the tooltip
+ * @returns {object} tooltip position
+ */
+ average: function(elements) {
+ if (!elements.length) {
+ return false;
+ }
+
+ var i, len;
+ var x = 0;
+ var y = 0;
+ var count = 0;
+
+ for (i = 0, len = elements.length; i < len; ++i) {
+ var el = elements[i];
+ if (el && el.hasValue()) {
+ var pos = el.tooltipPosition();
+ x += pos.x;
+ y += pos.y;
+ ++count;
+ }
+ }
+
+ return {
+ x: x / count,
+ y: y / count
+ };
+ },
+
+ /**
+ * Gets the tooltip position nearest of the item nearest to the event position
+ * @function Chart.Tooltip.positioners.nearest
+ * @param elements {Chart.Element[]} the tooltip elements
+ * @param eventPosition {object} the position of the event in canvas coordinates
+ * @returns {object} the tooltip position
+ */
+ nearest: function(elements, eventPosition) {
+ var x = eventPosition.x;
+ var y = eventPosition.y;
+ var minDistance = Number.POSITIVE_INFINITY;
+ var i, len, nearestElement;
+
+ for (i = 0, len = elements.length; i < len; ++i) {
+ var el = elements[i];
+ if (el && el.hasValue()) {
+ var center = el.getCenterPoint();
+ var d = helpers$1.distanceBetweenPoints(eventPosition, center);
+
+ if (d < minDistance) {
+ minDistance = d;
+ nearestElement = el;
+ }
+ }
+ }
+
+ if (nearestElement) {
+ var tp = nearestElement.tooltipPosition();
+ x = tp.x;
+ y = tp.y;
+ }
+
+ return {
+ x: x,
+ y: y
+ };
+ }
+};
+
+// Helper to push or concat based on if the 2nd parameter is an array or not
+function pushOrConcat(base, toPush) {
+ if (toPush) {
+ if (helpers$1.isArray(toPush)) {
+ // base = base.concat(toPush);
+ Array.prototype.push.apply(base, toPush);
+ } else {
+ base.push(toPush);
+ }
+ }
+
+ return base;
+}
+
+/**
+ * Returns array of strings split by newline
+ * @param {string} value - The value to split by newline.
+ * @returns {string[]} value if newline present - Returned from String split() method
+ * @function
+ */
+function splitNewlines(str) {
+ if ((typeof str === 'string' || str instanceof String) && str.indexOf('\n') > -1) {
+ return str.split('\n');
+ }
+ return str;
+}
+
+
+/**
+ * Private helper to create a tooltip item model
+ * @param element - the chart element (point, arc, bar) to create the tooltip item for
+ * @return new tooltip item
+ */
+function createTooltipItem(element) {
+ var xScale = element._xScale;
+ var yScale = element._yScale || element._scale; // handle radar || polarArea charts
+ var index = element._index;
+ var datasetIndex = element._datasetIndex;
+ var controller = element._chart.getDatasetMeta(datasetIndex).controller;
+ var indexScale = controller._getIndexScale();
+ var valueScale = controller._getValueScale();
+
+ return {
+ xLabel: xScale ? xScale.getLabelForIndex(index, datasetIndex) : '',
+ yLabel: yScale ? yScale.getLabelForIndex(index, datasetIndex) : '',
+ label: indexScale ? '' + indexScale.getLabelForIndex(index, datasetIndex) : '',
+ value: valueScale ? '' + valueScale.getLabelForIndex(index, datasetIndex) : '',
+ index: index,
+ datasetIndex: datasetIndex,
+ x: element._model.x,
+ y: element._model.y
+ };
+}
+
+/**
+ * Helper to get the reset model for the tooltip
+ * @param tooltipOpts {object} the tooltip options
+ */
+function getBaseModel(tooltipOpts) {
+ var globalDefaults = core_defaults.global;
+
+ return {
+ // Positioning
+ xPadding: tooltipOpts.xPadding,
+ yPadding: tooltipOpts.yPadding,
+ xAlign: tooltipOpts.xAlign,
+ yAlign: tooltipOpts.yAlign,
+
+ // Drawing direction and text direction
+ rtl: tooltipOpts.rtl,
+ textDirection: tooltipOpts.textDirection,
+
+ // Body
+ bodyFontColor: tooltipOpts.bodyFontColor,
+ _bodyFontFamily: valueOrDefault$8(tooltipOpts.bodyFontFamily, globalDefaults.defaultFontFamily),
+ _bodyFontStyle: valueOrDefault$8(tooltipOpts.bodyFontStyle, globalDefaults.defaultFontStyle),
+ _bodyAlign: tooltipOpts.bodyAlign,
+ bodyFontSize: valueOrDefault$8(tooltipOpts.bodyFontSize, globalDefaults.defaultFontSize),
+ bodySpacing: tooltipOpts.bodySpacing,
+
+ // Title
+ titleFontColor: tooltipOpts.titleFontColor,
+ _titleFontFamily: valueOrDefault$8(tooltipOpts.titleFontFamily, globalDefaults.defaultFontFamily),
+ _titleFontStyle: valueOrDefault$8(tooltipOpts.titleFontStyle, globalDefaults.defaultFontStyle),
+ titleFontSize: valueOrDefault$8(tooltipOpts.titleFontSize, globalDefaults.defaultFontSize),
+ _titleAlign: tooltipOpts.titleAlign,
+ titleSpacing: tooltipOpts.titleSpacing,
+ titleMarginBottom: tooltipOpts.titleMarginBottom,
+
+ // Footer
+ footerFontColor: tooltipOpts.footerFontColor,
+ _footerFontFamily: valueOrDefault$8(tooltipOpts.footerFontFamily, globalDefaults.defaultFontFamily),
+ _footerFontStyle: valueOrDefault$8(tooltipOpts.footerFontStyle, globalDefaults.defaultFontStyle),
+ footerFontSize: valueOrDefault$8(tooltipOpts.footerFontSize, globalDefaults.defaultFontSize),
+ _footerAlign: tooltipOpts.footerAlign,
+ footerSpacing: tooltipOpts.footerSpacing,
+ footerMarginTop: tooltipOpts.footerMarginTop,
+
+ // Appearance
+ caretSize: tooltipOpts.caretSize,
+ cornerRadius: tooltipOpts.cornerRadius,
+ backgroundColor: tooltipOpts.backgroundColor,
+ opacity: 0,
+ legendColorBackground: tooltipOpts.multiKeyBackground,
+ displayColors: tooltipOpts.displayColors,
+ borderColor: tooltipOpts.borderColor,
+ borderWidth: tooltipOpts.borderWidth
+ };
+}
+
+/**
+ * Get the size of the tooltip
+ */
+function getTooltipSize(tooltip, model) {
+ var ctx = tooltip._chart.ctx;
+
+ var height = model.yPadding * 2; // Tooltip Padding
+ var width = 0;
+
+ // Count of all lines in the body
+ var body = model.body;
+ var combinedBodyLength = body.reduce(function(count, bodyItem) {
+ return count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length;
+ }, 0);
+ combinedBodyLength += model.beforeBody.length + model.afterBody.length;
+
+ var titleLineCount = model.title.length;
+ var footerLineCount = model.footer.length;
+ var titleFontSize = model.titleFontSize;
+ var bodyFontSize = model.bodyFontSize;
+ var footerFontSize = model.footerFontSize;
+
+ height += titleLineCount * titleFontSize; // Title Lines
+ height += titleLineCount ? (titleLineCount - 1) * model.titleSpacing : 0; // Title Line Spacing
+ height += titleLineCount ? model.titleMarginBottom : 0; // Title's bottom Margin
+ height += combinedBodyLength * bodyFontSize; // Body Lines
+ height += combinedBodyLength ? (combinedBodyLength - 1) * model.bodySpacing : 0; // Body Line Spacing
+ height += footerLineCount ? model.footerMarginTop : 0; // Footer Margin
+ height += footerLineCount * (footerFontSize); // Footer Lines
+ height += footerLineCount ? (footerLineCount - 1) * model.footerSpacing : 0; // Footer Line Spacing
+
+ // Title width
+ var widthPadding = 0;
+ var maxLineWidth = function(line) {
+ width = Math.max(width, ctx.measureText(line).width + widthPadding);
+ };
+
+ ctx.font = helpers$1.fontString(titleFontSize, model._titleFontStyle, model._titleFontFamily);
+ helpers$1.each(model.title, maxLineWidth);
+
+ // Body width
+ ctx.font = helpers$1.fontString(bodyFontSize, model._bodyFontStyle, model._bodyFontFamily);
+ helpers$1.each(model.beforeBody.concat(model.afterBody), maxLineWidth);
+
+ // Body lines may include some extra width due to the color box
+ widthPadding = model.displayColors ? (bodyFontSize + 2) : 0;
+ helpers$1.each(body, function(bodyItem) {
+ helpers$1.each(bodyItem.before, maxLineWidth);
+ helpers$1.each(bodyItem.lines, maxLineWidth);
+ helpers$1.each(bodyItem.after, maxLineWidth);
+ });
+
+ // Reset back to 0
+ widthPadding = 0;
+
+ // Footer width
+ ctx.font = helpers$1.fontString(footerFontSize, model._footerFontStyle, model._footerFontFamily);
+ helpers$1.each(model.footer, maxLineWidth);
+
+ // Add padding
+ width += 2 * model.xPadding;
+
+ return {
+ width: width,
+ height: height
+ };
+}
+
+/**
+ * Helper to get the alignment of a tooltip given the size
+ */
+function determineAlignment(tooltip, size) {
+ var model = tooltip._model;
+ var chart = tooltip._chart;
+ var chartArea = tooltip._chart.chartArea;
+ var xAlign = 'center';
+ var yAlign = 'center';
+
+ if (model.y < size.height) {
+ yAlign = 'top';
+ } else if (model.y > (chart.height - size.height)) {
+ yAlign = 'bottom';
+ }
+
+ var lf, rf; // functions to determine left, right alignment
+ var olf, orf; // functions to determine if left/right alignment causes tooltip to go outside chart
+ var yf; // function to get the y alignment if the tooltip goes outside of the left or right edges
+ var midX = (chartArea.left + chartArea.right) / 2;
+ var midY = (chartArea.top + chartArea.bottom) / 2;
+
+ if (yAlign === 'center') {
+ lf = function(x) {
+ return x <= midX;
+ };
+ rf = function(x) {
+ return x > midX;
+ };
+ } else {
+ lf = function(x) {
+ return x <= (size.width / 2);
+ };
+ rf = function(x) {
+ return x >= (chart.width - (size.width / 2));
+ };
+ }
+
+ olf = function(x) {
+ return x + size.width + model.caretSize + model.caretPadding > chart.width;
+ };
+ orf = function(x) {
+ return x - size.width - model.caretSize - model.caretPadding < 0;
+ };
+ yf = function(y) {
+ return y <= midY ? 'top' : 'bottom';
+ };
+
+ if (lf(model.x)) {
+ xAlign = 'left';
+
+ // Is tooltip too wide and goes over the right side of the chart.?
+ if (olf(model.x)) {
+ xAlign = 'center';
+ yAlign = yf(model.y);
+ }
+ } else if (rf(model.x)) {
+ xAlign = 'right';
+
+ // Is tooltip too wide and goes outside left edge of canvas?
+ if (orf(model.x)) {
+ xAlign = 'center';
+ yAlign = yf(model.y);
+ }
+ }
+
+ var opts = tooltip._options;
+ return {
+ xAlign: opts.xAlign ? opts.xAlign : xAlign,
+ yAlign: opts.yAlign ? opts.yAlign : yAlign
+ };
+}
+
+/**
+ * Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment
+ */
+function getBackgroundPoint(vm, size, alignment, chart) {
+ // Background Position
+ var x = vm.x;
+ var y = vm.y;
+
+ var caretSize = vm.caretSize;
+ var caretPadding = vm.caretPadding;
+ var cornerRadius = vm.cornerRadius;
+ var xAlign = alignment.xAlign;
+ var yAlign = alignment.yAlign;
+ var paddingAndSize = caretSize + caretPadding;
+ var radiusAndPadding = cornerRadius + caretPadding;
+
+ if (xAlign === 'right') {
+ x -= size.width;
+ } else if (xAlign === 'center') {
+ x -= (size.width / 2);
+ if (x + size.width > chart.width) {
+ x = chart.width - size.width;
+ }
+ if (x < 0) {
+ x = 0;
+ }
+ }
+
+ if (yAlign === 'top') {
+ y += paddingAndSize;
+ } else if (yAlign === 'bottom') {
+ y -= size.height + paddingAndSize;
+ } else {
+ y -= (size.height / 2);
+ }
+
+ if (yAlign === 'center') {
+ if (xAlign === 'left') {
+ x += paddingAndSize;
+ } else if (xAlign === 'right') {
+ x -= paddingAndSize;
+ }
+ } else if (xAlign === 'left') {
+ x -= radiusAndPadding;
+ } else if (xAlign === 'right') {
+ x += radiusAndPadding;
+ }
+
+ return {
+ x: x,
+ y: y
+ };
+}
+
+function getAlignedX(vm, align) {
+ return align === 'center'
+ ? vm.x + vm.width / 2
+ : align === 'right'
+ ? vm.x + vm.width - vm.xPadding
+ : vm.x + vm.xPadding;
+}
+
+/**
+ * Helper to build before and after body lines
+ */
+function getBeforeAfterBodyLines(callback) {
+ return pushOrConcat([], splitNewlines(callback));
+}
+
+var exports$4 = core_element.extend({
+ initialize: function() {
+ this._model = getBaseModel(this._options);
+ this._lastActive = [];
+ },
+
+ // Get the title
+ // Args are: (tooltipItem, data)
+ getTitle: function() {
+ var me = this;
+ var opts = me._options;
+ var callbacks = opts.callbacks;
+
+ var beforeTitle = callbacks.beforeTitle.apply(me, arguments);
+ var title = callbacks.title.apply(me, arguments);
+ var afterTitle = callbacks.afterTitle.apply(me, arguments);
+
+ var lines = [];
+ lines = pushOrConcat(lines, splitNewlines(beforeTitle));
+ lines = pushOrConcat(lines, splitNewlines(title));
+ lines = pushOrConcat(lines, splitNewlines(afterTitle));
+
+ return lines;
+ },
+
+ // Args are: (tooltipItem, data)
+ getBeforeBody: function() {
+ return getBeforeAfterBodyLines(this._options.callbacks.beforeBody.apply(this, arguments));
+ },
+
+ // Args are: (tooltipItem, data)
+ getBody: function(tooltipItems, data) {
+ var me = this;
+ var callbacks = me._options.callbacks;
+ var bodyItems = [];
+
+ helpers$1.each(tooltipItems, function(tooltipItem) {
+ var bodyItem = {
+ before: [],
+ lines: [],
+ after: []
+ };
+ pushOrConcat(bodyItem.before, splitNewlines(callbacks.beforeLabel.call(me, tooltipItem, data)));
+ pushOrConcat(bodyItem.lines, callbacks.label.call(me, tooltipItem, data));
+ pushOrConcat(bodyItem.after, splitNewlines(callbacks.afterLabel.call(me, tooltipItem, data)));
+
+ bodyItems.push(bodyItem);
+ });
+
+ return bodyItems;
+ },
+
+ // Args are: (tooltipItem, data)
+ getAfterBody: function() {
+ return getBeforeAfterBodyLines(this._options.callbacks.afterBody.apply(this, arguments));
+ },
+
+ // Get the footer and beforeFooter and afterFooter lines
+ // Args are: (tooltipItem, data)
+ getFooter: function() {
+ var me = this;
+ var callbacks = me._options.callbacks;
+
+ var beforeFooter = callbacks.beforeFooter.apply(me, arguments);
+ var footer = callbacks.footer.apply(me, arguments);
+ var afterFooter = callbacks.afterFooter.apply(me, arguments);
+
+ var lines = [];
+ lines = pushOrConcat(lines, splitNewlines(beforeFooter));
+ lines = pushOrConcat(lines, splitNewlines(footer));
+ lines = pushOrConcat(lines, splitNewlines(afterFooter));
+
+ return lines;
+ },
+
+ update: function(changed) {
+ var me = this;
+ var opts = me._options;
+
+ // Need to regenerate the model because its faster than using extend and it is necessary due to the optimization in Chart.Element.transition
+ // that does _view = _model if ease === 1. This causes the 2nd tooltip update to set properties in both the view and model at the same time
+ // which breaks any animations.
+ var existingModel = me._model;
+ var model = me._model = getBaseModel(opts);
+ var active = me._active;
+
+ var data = me._data;
+
+ // In the case where active.length === 0 we need to keep these at existing values for good animations
+ var alignment = {
+ xAlign: existingModel.xAlign,
+ yAlign: existingModel.yAlign
+ };
+ var backgroundPoint = {
+ x: existingModel.x,
+ y: existingModel.y
+ };
+ var tooltipSize = {
+ width: existingModel.width,
+ height: existingModel.height
+ };
+ var tooltipPosition = {
+ x: existingModel.caretX,
+ y: existingModel.caretY
+ };
+
+ var i, len;
+
+ if (active.length) {
+ model.opacity = 1;
+
+ var labelColors = [];
+ var labelTextColors = [];
+ tooltipPosition = positioners[opts.position].call(me, active, me._eventPosition);
+
+ var tooltipItems = [];
+ for (i = 0, len = active.length; i < len; ++i) {
+ tooltipItems.push(createTooltipItem(active[i]));
+ }
+
+ // If the user provided a filter function, use it to modify the tooltip items
+ if (opts.filter) {
+ tooltipItems = tooltipItems.filter(function(a) {
+ return opts.filter(a, data);
+ });
+ }
+
+ // If the user provided a sorting function, use it to modify the tooltip items
+ if (opts.itemSort) {
+ tooltipItems = tooltipItems.sort(function(a, b) {
+ return opts.itemSort(a, b, data);
+ });
+ }
+
+ // Determine colors for boxes
+ helpers$1.each(tooltipItems, function(tooltipItem) {
+ labelColors.push(opts.callbacks.labelColor.call(me, tooltipItem, me._chart));
+ labelTextColors.push(opts.callbacks.labelTextColor.call(me, tooltipItem, me._chart));
+ });
+
+
+ // Build the Text Lines
+ model.title = me.getTitle(tooltipItems, data);
+ model.beforeBody = me.getBeforeBody(tooltipItems, data);
+ model.body = me.getBody(tooltipItems, data);
+ model.afterBody = me.getAfterBody(tooltipItems, data);
+ model.footer = me.getFooter(tooltipItems, data);
+
+ // Initial positioning and colors
+ model.x = tooltipPosition.x;
+ model.y = tooltipPosition.y;
+ model.caretPadding = opts.caretPadding;
+ model.labelColors = labelColors;
+ model.labelTextColors = labelTextColors;
+
+ // data points
+ model.dataPoints = tooltipItems;
+
+ // We need to determine alignment of the tooltip
+ tooltipSize = getTooltipSize(this, model);
+ alignment = determineAlignment(this, tooltipSize);
+ // Final Size and Position
+ backgroundPoint = getBackgroundPoint(model, tooltipSize, alignment, me._chart);
+ } else {
+ model.opacity = 0;
+ }
+
+ model.xAlign = alignment.xAlign;
+ model.yAlign = alignment.yAlign;
+ model.x = backgroundPoint.x;
+ model.y = backgroundPoint.y;
+ model.width = tooltipSize.width;
+ model.height = tooltipSize.height;
+
+ // Point where the caret on the tooltip points to
+ model.caretX = tooltipPosition.x;
+ model.caretY = tooltipPosition.y;
+
+ me._model = model;
+
+ if (changed && opts.custom) {
+ opts.custom.call(me, model);
+ }
+
+ return me;
+ },
+
+ drawCaret: function(tooltipPoint, size) {
+ var ctx = this._chart.ctx;
+ var vm = this._view;
+ var caretPosition = this.getCaretPosition(tooltipPoint, size, vm);
+
+ ctx.lineTo(caretPosition.x1, caretPosition.y1);
+ ctx.lineTo(caretPosition.x2, caretPosition.y2);
+ ctx.lineTo(caretPosition.x3, caretPosition.y3);
+ },
+ getCaretPosition: function(tooltipPoint, size, vm) {
+ var x1, x2, x3, y1, y2, y3;
+ var caretSize = vm.caretSize;
+ var cornerRadius = vm.cornerRadius;
+ var xAlign = vm.xAlign;
+ var yAlign = vm.yAlign;
+ var ptX = tooltipPoint.x;
+ var ptY = tooltipPoint.y;
+ var width = size.width;
+ var height = size.height;
+
+ if (yAlign === 'center') {
+ y2 = ptY + (height / 2);
+
+ if (xAlign === 'left') {
+ x1 = ptX;
+ x2 = x1 - caretSize;
+ x3 = x1;
+
+ y1 = y2 + caretSize;
+ y3 = y2 - caretSize;
+ } else {
+ x1 = ptX + width;
+ x2 = x1 + caretSize;
+ x3 = x1;
+
+ y1 = y2 - caretSize;
+ y3 = y2 + caretSize;
+ }
+ } else {
+ if (xAlign === 'left') {
+ x2 = ptX + cornerRadius + (caretSize);
+ x1 = x2 - caretSize;
+ x3 = x2 + caretSize;
+ } else if (xAlign === 'right') {
+ x2 = ptX + width - cornerRadius - caretSize;
+ x1 = x2 - caretSize;
+ x3 = x2 + caretSize;
+ } else {
+ x2 = vm.caretX;
+ x1 = x2 - caretSize;
+ x3 = x2 + caretSize;
+ }
+ if (yAlign === 'top') {
+ y1 = ptY;
+ y2 = y1 - caretSize;
+ y3 = y1;
+ } else {
+ y1 = ptY + height;
+ y2 = y1 + caretSize;
+ y3 = y1;
+ // invert drawing order
+ var tmp = x3;
+ x3 = x1;
+ x1 = tmp;
+ }
+ }
+ return {x1: x1, x2: x2, x3: x3, y1: y1, y2: y2, y3: y3};
+ },
+
+ drawTitle: function(pt, vm, ctx) {
+ var title = vm.title;
+ var length = title.length;
+ var titleFontSize, titleSpacing, i;
+
+ if (length) {
+ var rtlHelper = getRtlHelper(vm.rtl, vm.x, vm.width);
+
+ pt.x = getAlignedX(vm, vm._titleAlign);
+
+ ctx.textAlign = rtlHelper.textAlign(vm._titleAlign);
+ ctx.textBaseline = 'middle';
+
+ titleFontSize = vm.titleFontSize;
+ titleSpacing = vm.titleSpacing;
+
+ ctx.fillStyle = vm.titleFontColor;
+ ctx.font = helpers$1.fontString(titleFontSize, vm._titleFontStyle, vm._titleFontFamily);
+
+ for (i = 0; i < length; ++i) {
+ ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFontSize / 2);
+ pt.y += titleFontSize + titleSpacing; // Line Height and spacing
+
+ if (i + 1 === length) {
+ pt.y += vm.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing
+ }
+ }
+ }
+ },
+
+ drawBody: function(pt, vm, ctx) {
+ var bodyFontSize = vm.bodyFontSize;
+ var bodySpacing = vm.bodySpacing;
+ var bodyAlign = vm._bodyAlign;
+ var body = vm.body;
+ var drawColorBoxes = vm.displayColors;
+ var xLinePadding = 0;
+ var colorX = drawColorBoxes ? getAlignedX(vm, 'left') : 0;
+
+ var rtlHelper = getRtlHelper(vm.rtl, vm.x, vm.width);
+
+ var fillLineOfText = function(line) {
+ ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyFontSize / 2);
+ pt.y += bodyFontSize + bodySpacing;
+ };
+
+ var bodyItem, textColor, labelColors, lines, i, j, ilen, jlen;
+ var bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);
+
+ ctx.textAlign = bodyAlign;
+ ctx.textBaseline = 'middle';
+ ctx.font = helpers$1.fontString(bodyFontSize, vm._bodyFontStyle, vm._bodyFontFamily);
+
+ pt.x = getAlignedX(vm, bodyAlignForCalculation);
+
+ // Before body lines
+ ctx.fillStyle = vm.bodyFontColor;
+ helpers$1.each(vm.beforeBody, fillLineOfText);
+
+ xLinePadding = drawColorBoxes && bodyAlignForCalculation !== 'right'
+ ? bodyAlign === 'center' ? (bodyFontSize / 2 + 1) : (bodyFontSize + 2)
+ : 0;
+
+ // Draw body lines now
+ for (i = 0, ilen = body.length; i < ilen; ++i) {
+ bodyItem = body[i];
+ textColor = vm.labelTextColors[i];
+ labelColors = vm.labelColors[i];
+
+ ctx.fillStyle = textColor;
+ helpers$1.each(bodyItem.before, fillLineOfText);
+
+ lines = bodyItem.lines;
+ for (j = 0, jlen = lines.length; j < jlen; ++j) {
+ // Draw Legend-like boxes if needed
+ if (drawColorBoxes) {
+ var rtlColorX = rtlHelper.x(colorX);
+
+ // Fill a white rect so that colours merge nicely if the opacity is < 1
+ ctx.fillStyle = vm.legendColorBackground;
+ ctx.fillRect(rtlHelper.leftForLtr(rtlColorX, bodyFontSize), pt.y, bodyFontSize, bodyFontSize);
+
+ // Border
+ ctx.lineWidth = 1;
+ ctx.strokeStyle = labelColors.borderColor;
+ ctx.strokeRect(rtlHelper.leftForLtr(rtlColorX, bodyFontSize), pt.y, bodyFontSize, bodyFontSize);
+
+ // Inner square
+ ctx.fillStyle = labelColors.backgroundColor;
+ ctx.fillRect(rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), bodyFontSize - 2), pt.y + 1, bodyFontSize - 2, bodyFontSize - 2);
+ ctx.fillStyle = textColor;
+ }
+
+ fillLineOfText(lines[j]);
+ }
+
+ helpers$1.each(bodyItem.after, fillLineOfText);
+ }
+
+ // Reset back to 0 for after body
+ xLinePadding = 0;
+
+ // After body lines
+ helpers$1.each(vm.afterBody, fillLineOfText);
+ pt.y -= bodySpacing; // Remove last body spacing
+ },
+
+ drawFooter: function(pt, vm, ctx) {
+ var footer = vm.footer;
+ var length = footer.length;
+ var footerFontSize, i;
+
+ if (length) {
+ var rtlHelper = getRtlHelper(vm.rtl, vm.x, vm.width);
+
+ pt.x = getAlignedX(vm, vm._footerAlign);
+ pt.y += vm.footerMarginTop;
+
+ ctx.textAlign = rtlHelper.textAlign(vm._footerAlign);
+ ctx.textBaseline = 'middle';
+
+ footerFontSize = vm.footerFontSize;
+
+ ctx.fillStyle = vm.footerFontColor;
+ ctx.font = helpers$1.fontString(footerFontSize, vm._footerFontStyle, vm._footerFontFamily);
+
+ for (i = 0; i < length; ++i) {
+ ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFontSize / 2);
+ pt.y += footerFontSize + vm.footerSpacing;
+ }
+ }
+ },
+
+ drawBackground: function(pt, vm, ctx, tooltipSize) {
+ ctx.fillStyle = vm.backgroundColor;
+ ctx.strokeStyle = vm.borderColor;
+ ctx.lineWidth = vm.borderWidth;
+ var xAlign = vm.xAlign;
+ var yAlign = vm.yAlign;
+ var x = pt.x;
+ var y = pt.y;
+ var width = tooltipSize.width;
+ var height = tooltipSize.height;
+ var radius = vm.cornerRadius;
+
+ ctx.beginPath();
+ ctx.moveTo(x + radius, y);
+ if (yAlign === 'top') {
+ this.drawCaret(pt, tooltipSize);
+ }
+ ctx.lineTo(x + width - radius, y);
+ ctx.quadraticCurveTo(x + width, y, x + width, y + radius);
+ if (yAlign === 'center' && xAlign === 'right') {
+ this.drawCaret(pt, tooltipSize);
+ }
+ ctx.lineTo(x + width, y + height - radius);
+ ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);
+ if (yAlign === 'bottom') {
+ this.drawCaret(pt, tooltipSize);
+ }
+ ctx.lineTo(x + radius, y + height);
+ ctx.quadraticCurveTo(x, y + height, x, y + height - radius);
+ if (yAlign === 'center' && xAlign === 'left') {
+ this.drawCaret(pt, tooltipSize);
+ }
+ ctx.lineTo(x, y + radius);
+ ctx.quadraticCurveTo(x, y, x + radius, y);
+ ctx.closePath();
+
+ ctx.fill();
+
+ if (vm.borderWidth > 0) {
+ ctx.stroke();
+ }
+ },
+
+ draw: function() {
+ var ctx = this._chart.ctx;
+ var vm = this._view;
+
+ if (vm.opacity === 0) {
+ return;
+ }
+
+ var tooltipSize = {
+ width: vm.width,
+ height: vm.height
+ };
+ var pt = {
+ x: vm.x,
+ y: vm.y
+ };
+
+ // IE11/Edge does not like very small opacities, so snap to 0
+ var opacity = Math.abs(vm.opacity < 1e-3) ? 0 : vm.opacity;
+
+ // Truthy/falsey value for empty tooltip
+ var hasTooltipContent = vm.title.length || vm.beforeBody.length || vm.body.length || vm.afterBody.length || vm.footer.length;
+
+ if (this._options.enabled && hasTooltipContent) {
+ ctx.save();
+ ctx.globalAlpha = opacity;
+
+ // Draw Background
+ this.drawBackground(pt, vm, ctx, tooltipSize);
+
+ // Draw Title, Body, and Footer
+ pt.y += vm.yPadding;
+
+ helpers$1.rtl.overrideTextDirection(ctx, vm.textDirection);
+
+ // Titles
+ this.drawTitle(pt, vm, ctx);
+
+ // Body
+ this.drawBody(pt, vm, ctx);
+
+ // Footer
+ this.drawFooter(pt, vm, ctx);
+
+ helpers$1.rtl.restoreTextDirection(ctx, vm.textDirection);
+
+ ctx.restore();
+ }
+ },
+
+ /**
+ * Handle an event
+ * @private
+ * @param {IEvent} event - The event to handle
+ * @returns {boolean} true if the tooltip changed
+ */
+ handleEvent: function(e) {
+ var me = this;
+ var options = me._options;
+ var changed = false;
+
+ me._lastActive = me._lastActive || [];
+
+ // Find Active Elements for tooltips
+ if (e.type === 'mouseout') {
+ me._active = [];
+ } else {
+ me._active = me._chart.getElementsAtEventForMode(e, options.mode, options);
+ if (options.reverse) {
+ me._active.reverse();
+ }
+ }
+
+ // Remember Last Actives
+ changed = !helpers$1.arrayEquals(me._active, me._lastActive);
+
+ // Only handle target event on tooltip change
+ if (changed) {
+ me._lastActive = me._active;
+
+ if (options.enabled || options.custom) {
+ me._eventPosition = {
+ x: e.x,
+ y: e.y
+ };
+
+ me.update(true);
+ me.pivot();
+ }
+ }
+
+ return changed;
+ }
+});
+
+/**
+ * @namespace Chart.Tooltip.positioners
+ */
+var positioners_1 = positioners;
+
+var core_tooltip = exports$4;
+core_tooltip.positioners = positioners_1;
+
+var valueOrDefault$9 = helpers$1.valueOrDefault;
+
+core_defaults._set('global', {
+ elements: {},
+ events: [
+ 'mousemove',
+ 'mouseout',
+ 'click',
+ 'touchstart',
+ 'touchmove'
+ ],
+ hover: {
+ onHover: null,
+ mode: 'nearest',
+ intersect: true,
+ animationDuration: 400
+ },
+ onClick: null,
+ maintainAspectRatio: true,
+ responsive: true,
+ responsiveAnimationDuration: 0
+});
+
+/**
+ * Recursively merge the given config objects representing the `scales` option
+ * by incorporating scale defaults in `xAxes` and `yAxes` array items, then
+ * returns a deep copy of the result, thus doesn't alter inputs.
+ */
+function mergeScaleConfig(/* config objects ... */) {
+ return helpers$1.merge({}, [].slice.call(arguments), {
+ merger: function(key, target, source, options) {
+ if (key === 'xAxes' || key === 'yAxes') {
+ var slen = source[key].length;
+ var i, type, scale;
+
+ if (!target[key]) {
+ target[key] = [];
+ }
+
+ for (i = 0; i < slen; ++i) {
+ scale = source[key][i];
+ type = valueOrDefault$9(scale.type, key === 'xAxes' ? 'category' : 'linear');
+
+ if (i >= target[key].length) {
+ target[key].push({});
+ }
+
+ if (!target[key][i].type || (scale.type && scale.type !== target[key][i].type)) {
+ // new/untyped scale or type changed: let's apply the new defaults
+ // then merge source scale to correctly overwrite the defaults.
+ helpers$1.merge(target[key][i], [core_scaleService.getScaleDefaults(type), scale]);
+ } else {
+ // scales type are the same
+ helpers$1.merge(target[key][i], scale);
+ }
+ }
+ } else {
+ helpers$1._merger(key, target, source, options);
+ }
+ }
+ });
+}
+
+/**
+ * Recursively merge the given config objects as the root options by handling
+ * default scale options for the `scales` and `scale` properties, then returns
+ * a deep copy of the result, thus doesn't alter inputs.
+ */
+function mergeConfig(/* config objects ... */) {
+ return helpers$1.merge({}, [].slice.call(arguments), {
+ merger: function(key, target, source, options) {
+ var tval = target[key] || {};
+ var sval = source[key];
+
+ if (key === 'scales') {
+ // scale config merging is complex. Add our own function here for that
+ target[key] = mergeScaleConfig(tval, sval);
+ } else if (key === 'scale') {
+ // used in polar area & radar charts since there is only one scale
+ target[key] = helpers$1.merge(tval, [core_scaleService.getScaleDefaults(sval.type), sval]);
+ } else {
+ helpers$1._merger(key, target, source, options);
+ }
+ }
+ });
+}
+
+function initConfig(config) {
+ config = config || {};
+
+ // Do NOT use mergeConfig for the data object because this method merges arrays
+ // and so would change references to labels and datasets, preventing data updates.
+ var data = config.data = config.data || {};
+ data.datasets = data.datasets || [];
+ data.labels = data.labels || [];
+
+ config.options = mergeConfig(
+ core_defaults.global,
+ core_defaults[config.type],
+ config.options || {});
+
+ return config;
+}
+
+function updateConfig(chart) {
+ var newOptions = chart.options;
+
+ helpers$1.each(chart.scales, function(scale) {
+ core_layouts.removeBox(chart, scale);
+ });
+
+ newOptions = mergeConfig(
+ core_defaults.global,
+ core_defaults[chart.config.type],
+ newOptions);
+
+ chart.options = chart.config.options = newOptions;
+ chart.ensureScalesHaveIDs();
+ chart.buildOrUpdateScales();
+
+ // Tooltip
+ chart.tooltip._options = newOptions.tooltips;
+ chart.tooltip.initialize();
+}
+
+function nextAvailableScaleId(axesOpts, prefix, index) {
+ var id;
+ var hasId = function(obj) {
+ return obj.id === id;
+ };
+
+ do {
+ id = prefix + index++;
+ } while (helpers$1.findIndex(axesOpts, hasId) >= 0);
+
+ return id;
+}
+
+function positionIsHorizontal(position) {
+ return position === 'top' || position === 'bottom';
+}
+
+function compare2Level(l1, l2) {
+ return function(a, b) {
+ return a[l1] === b[l1]
+ ? a[l2] - b[l2]
+ : a[l1] - b[l1];
+ };
+}
+
+var Chart = function(item, config) {
+ this.construct(item, config);
+ return this;
+};
+
+helpers$1.extend(Chart.prototype, /** @lends Chart */ {
+ /**
+ * @private
+ */
+ construct: function(item, config) {
+ var me = this;
+
+ config = initConfig(config);
+
+ var context = platform.acquireContext(item, config);
+ var canvas = context && context.canvas;
+ var height = canvas && canvas.height;
+ var width = canvas && canvas.width;
+
+ me.id = helpers$1.uid();
+ me.ctx = context;
+ me.canvas = canvas;
+ me.config = config;
+ me.width = width;
+ me.height = height;
+ me.aspectRatio = height ? width / height : null;
+ me.options = config.options;
+ me._bufferedRender = false;
+ me._layers = [];
+
+ /**
+ * Provided for backward compatibility, Chart and Chart.Controller have been merged,
+ * the "instance" still need to be defined since it might be called from plugins.
+ * @prop Chart#chart
+ * @deprecated since version 2.6.0
+ * @todo remove at version 3
+ * @private
+ */
+ me.chart = me;
+ me.controller = me; // chart.chart.controller #inception
+
+ // Add the chart instance to the global namespace
+ Chart.instances[me.id] = me;
+
+ // Define alias to the config data: `chart.data === chart.config.data`
+ Object.defineProperty(me, 'data', {
+ get: function() {
+ return me.config.data;
+ },
+ set: function(value) {
+ me.config.data = value;
+ }
+ });
+
+ if (!context || !canvas) {
+ // The given item is not a compatible context2d element, let's return before finalizing
+ // the chart initialization but after setting basic chart / controller properties that
+ // can help to figure out that the chart is not valid (e.g chart.canvas !== null);
+ // https://github.com/chartjs/Chart.js/issues/2807
+ console.error("Failed to create chart: can't acquire context from the given item");
+ return;
+ }
+
+ me.initialize();
+ me.update();
+ },
+
+ /**
+ * @private
+ */
+ initialize: function() {
+ var me = this;
+
+ // Before init plugin notification
+ core_plugins.notify(me, 'beforeInit');
+
+ helpers$1.retinaScale(me, me.options.devicePixelRatio);
+
+ me.bindEvents();
+
+ if (me.options.responsive) {
+ // Initial resize before chart draws (must be silent to preserve initial animations).
+ me.resize(true);
+ }
+
+ me.initToolTip();
+
+ // After init plugin notification
+ core_plugins.notify(me, 'afterInit');
+
+ return me;
+ },
+
+ clear: function() {
+ helpers$1.canvas.clear(this);
+ return this;
+ },
+
+ stop: function() {
+ // Stops any current animation loop occurring
+ core_animations.cancelAnimation(this);
+ return this;
+ },
+
+ resize: function(silent) {
+ var me = this;
+ var options = me.options;
+ var canvas = me.canvas;
+ var aspectRatio = (options.maintainAspectRatio && me.aspectRatio) || null;
+
+ // the canvas render width and height will be casted to integers so make sure that
+ // the canvas display style uses the same integer values to avoid blurring effect.
+
+ // Set to 0 instead of canvas.size because the size defaults to 300x150 if the element is collapsed
+ var newWidth = Math.max(0, Math.floor(helpers$1.getMaximumWidth(canvas)));
+ var newHeight = Math.max(0, Math.floor(aspectRatio ? newWidth / aspectRatio : helpers$1.getMaximumHeight(canvas)));
+
+ if (me.width === newWidth && me.height === newHeight) {
+ return;
+ }
+
+ canvas.width = me.width = newWidth;
+ canvas.height = me.height = newHeight;
+ canvas.style.width = newWidth + 'px';
+ canvas.style.height = newHeight + 'px';
+
+ helpers$1.retinaScale(me, options.devicePixelRatio);
+
+ if (!silent) {
+ // Notify any plugins about the resize
+ var newSize = {width: newWidth, height: newHeight};
+ core_plugins.notify(me, 'resize', [newSize]);
+
+ // Notify of resize
+ if (options.onResize) {
+ options.onResize(me, newSize);
+ }
+
+ me.stop();
+ me.update({
+ duration: options.responsiveAnimationDuration
+ });
+ }
+ },
+
+ ensureScalesHaveIDs: function() {
+ var options = this.options;
+ var scalesOptions = options.scales || {};
+ var scaleOptions = options.scale;
+
+ helpers$1.each(scalesOptions.xAxes, function(xAxisOptions, index) {
+ if (!xAxisOptions.id) {
+ xAxisOptions.id = nextAvailableScaleId(scalesOptions.xAxes, 'x-axis-', index);
+ }
+ });
+
+ helpers$1.each(scalesOptions.yAxes, function(yAxisOptions, index) {
+ if (!yAxisOptions.id) {
+ yAxisOptions.id = nextAvailableScaleId(scalesOptions.yAxes, 'y-axis-', index);
+ }
+ });
+
+ if (scaleOptions) {
+ scaleOptions.id = scaleOptions.id || 'scale';
+ }
+ },
+
+ /**
+ * Builds a map of scale ID to scale object for future lookup.
+ */
+ buildOrUpdateScales: function() {
+ var me = this;
+ var options = me.options;
+ var scales = me.scales || {};
+ var items = [];
+ var updated = Object.keys(scales).reduce(function(obj, id) {
+ obj[id] = false;
+ return obj;
+ }, {});
+
+ if (options.scales) {
+ items = items.concat(
+ (options.scales.xAxes || []).map(function(xAxisOptions) {
+ return {options: xAxisOptions, dtype: 'category', dposition: 'bottom'};
+ }),
+ (options.scales.yAxes || []).map(function(yAxisOptions) {
+ return {options: yAxisOptions, dtype: 'linear', dposition: 'left'};
+ })
+ );
+ }
+
+ if (options.scale) {
+ items.push({
+ options: options.scale,
+ dtype: 'radialLinear',
+ isDefault: true,
+ dposition: 'chartArea'
+ });
+ }
+
+ helpers$1.each(items, function(item) {
+ var scaleOptions = item.options;
+ var id = scaleOptions.id;
+ var scaleType = valueOrDefault$9(scaleOptions.type, item.dtype);
+
+ if (positionIsHorizontal(scaleOptions.position) !== positionIsHorizontal(item.dposition)) {
+ scaleOptions.position = item.dposition;
+ }
+
+ updated[id] = true;
+ var scale = null;
+ if (id in scales && scales[id].type === scaleType) {
+ scale = scales[id];
+ scale.options = scaleOptions;
+ scale.ctx = me.ctx;
+ scale.chart = me;
+ } else {
+ var scaleClass = core_scaleService.getScaleConstructor(scaleType);
+ if (!scaleClass) {
+ return;
+ }
+ scale = new scaleClass({
+ id: id,
+ type: scaleType,
+ options: scaleOptions,
+ ctx: me.ctx,
+ chart: me
+ });
+ scales[scale.id] = scale;
+ }
+
+ scale.mergeTicksOptions();
+
+ // TODO(SB): I think we should be able to remove this custom case (options.scale)
+ // and consider it as a regular scale part of the "scales"" map only! This would
+ // make the logic easier and remove some useless? custom code.
+ if (item.isDefault) {
+ me.scale = scale;
+ }
+ });
+ // clear up discarded scales
+ helpers$1.each(updated, function(hasUpdated, id) {
+ if (!hasUpdated) {
+ delete scales[id];
+ }
+ });
+
+ me.scales = scales;
+
+ core_scaleService.addScalesToLayout(this);
+ },
+
+ buildOrUpdateControllers: function() {
+ var me = this;
+ var newControllers = [];
+ var datasets = me.data.datasets;
+ var i, ilen;
+
+ for (i = 0, ilen = datasets.length; i < ilen; i++) {
+ var dataset = datasets[i];
+ var meta = me.getDatasetMeta(i);
+ var type = dataset.type || me.config.type;
+
+ if (meta.type && meta.type !== type) {
+ me.destroyDatasetMeta(i);
+ meta = me.getDatasetMeta(i);
+ }
+ meta.type = type;
+ meta.order = dataset.order || 0;
+ meta.index = i;
+
+ if (meta.controller) {
+ meta.controller.updateIndex(i);
+ meta.controller.linkScales();
+ } else {
+ var ControllerClass = controllers[meta.type];
+ if (ControllerClass === undefined) {
+ throw new Error('"' + meta.type + '" is not a chart type.');
+ }
+
+ meta.controller = new ControllerClass(me, i);
+ newControllers.push(meta.controller);
+ }
+ }
+
+ return newControllers;
+ },
+
+ /**
+ * Reset the elements of all datasets
+ * @private
+ */
+ resetElements: function() {
+ var me = this;
+ helpers$1.each(me.data.datasets, function(dataset, datasetIndex) {
+ me.getDatasetMeta(datasetIndex).controller.reset();
+ }, me);
+ },
+
+ /**
+ * Resets the chart back to it's state before the initial animation
+ */
+ reset: function() {
+ this.resetElements();
+ this.tooltip.initialize();
+ },
+
+ update: function(config) {
+ var me = this;
+ var i, ilen;
+
+ if (!config || typeof config !== 'object') {
+ // backwards compatibility
+ config = {
+ duration: config,
+ lazy: arguments[1]
+ };
+ }
+
+ updateConfig(me);
+
+ // plugins options references might have change, let's invalidate the cache
+ // https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167
+ core_plugins._invalidate(me);
+
+ if (core_plugins.notify(me, 'beforeUpdate') === false) {
+ return;
+ }
+
+ // In case the entire data object changed
+ me.tooltip._data = me.data;
+
+ // Make sure dataset controllers are updated and new controllers are reset
+ var newControllers = me.buildOrUpdateControllers();
+
+ // Make sure all dataset controllers have correct meta data counts
+ for (i = 0, ilen = me.data.datasets.length; i < ilen; i++) {
+ me.getDatasetMeta(i).controller.buildOrUpdateElements();
+ }
+
+ me.updateLayout();
+
+ // Can only reset the new controllers after the scales have been updated
+ if (me.options.animation && me.options.animation.duration) {
+ helpers$1.each(newControllers, function(controller) {
+ controller.reset();
+ });
+ }
+
+ me.updateDatasets();
+
+ // Need to reset tooltip in case it is displayed with elements that are removed
+ // after update.
+ me.tooltip.initialize();
+
+ // Last active contains items that were previously in the tooltip.
+ // When we reset the tooltip, we need to clear it
+ me.lastActive = [];
+
+ // Do this before render so that any plugins that need final scale updates can use it
+ core_plugins.notify(me, 'afterUpdate');
+
+ me._layers.sort(compare2Level('z', '_idx'));
+
+ if (me._bufferedRender) {
+ me._bufferedRequest = {
+ duration: config.duration,
+ easing: config.easing,
+ lazy: config.lazy
+ };
+ } else {
+ me.render(config);
+ }
+ },
+
+ /**
+ * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`
+ * hook, in which case, plugins will not be called on `afterLayout`.
+ * @private
+ */
+ updateLayout: function() {
+ var me = this;
+
+ if (core_plugins.notify(me, 'beforeLayout') === false) {
+ return;
+ }
+
+ core_layouts.update(this, this.width, this.height);
+
+ me._layers = [];
+ helpers$1.each(me.boxes, function(box) {
+ // _configure is called twice, once in core.scale.update and once here.
+ // Here the boxes are fully updated and at their final positions.
+ if (box._configure) {
+ box._configure();
+ }
+ me._layers.push.apply(me._layers, box._layers());
+ }, me);
+
+ me._layers.forEach(function(item, index) {
+ item._idx = index;
+ });
+
+ /**
+ * Provided for backward compatibility, use `afterLayout` instead.
+ * @method IPlugin#afterScaleUpdate
+ * @deprecated since version 2.5.0
+ * @todo remove at version 3
+ * @private
+ */
+ core_plugins.notify(me, 'afterScaleUpdate');
+ core_plugins.notify(me, 'afterLayout');
+ },
+
+ /**
+ * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`
+ * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.
+ * @private
+ */
+ updateDatasets: function() {
+ var me = this;
+
+ if (core_plugins.notify(me, 'beforeDatasetsUpdate') === false) {
+ return;
+ }
+
+ for (var i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {
+ me.updateDataset(i);
+ }
+
+ core_plugins.notify(me, 'afterDatasetsUpdate');
+ },
+
+ /**
+ * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`
+ * hook, in which case, plugins will not be called on `afterDatasetUpdate`.
+ * @private
+ */
+ updateDataset: function(index) {
+ var me = this;
+ var meta = me.getDatasetMeta(index);
+ var args = {
+ meta: meta,
+ index: index
+ };
+
+ if (core_plugins.notify(me, 'beforeDatasetUpdate', [args]) === false) {
+ return;
+ }
+
+ meta.controller._update();
+
+ core_plugins.notify(me, 'afterDatasetUpdate', [args]);
+ },
+
+ render: function(config) {
+ var me = this;
+
+ if (!config || typeof config !== 'object') {
+ // backwards compatibility
+ config = {
+ duration: config,
+ lazy: arguments[1]
+ };
+ }
+
+ var animationOptions = me.options.animation;
+ var duration = valueOrDefault$9(config.duration, animationOptions && animationOptions.duration);
+ var lazy = config.lazy;
+
+ if (core_plugins.notify(me, 'beforeRender') === false) {
+ return;
+ }
+
+ var onComplete = function(animation) {
+ core_plugins.notify(me, 'afterRender');
+ helpers$1.callback(animationOptions && animationOptions.onComplete, [animation], me);
+ };
+
+ if (animationOptions && duration) {
+ var animation = new core_animation({
+ numSteps: duration / 16.66, // 60 fps
+ easing: config.easing || animationOptions.easing,
+
+ render: function(chart, animationObject) {
+ var easingFunction = helpers$1.easing.effects[animationObject.easing];
+ var currentStep = animationObject.currentStep;
+ var stepDecimal = currentStep / animationObject.numSteps;
+
+ chart.draw(easingFunction(stepDecimal), stepDecimal, currentStep);
+ },
+
+ onAnimationProgress: animationOptions.onProgress,
+ onAnimationComplete: onComplete
+ });
+
+ core_animations.addAnimation(me, animation, duration, lazy);
+ } else {
+ me.draw();
+
+ // See https://github.com/chartjs/Chart.js/issues/3781
+ onComplete(new core_animation({numSteps: 0, chart: me}));
+ }
+
+ return me;
+ },
+
+ draw: function(easingValue) {
+ var me = this;
+ var i, layers;
+
+ me.clear();
+
+ if (helpers$1.isNullOrUndef(easingValue)) {
+ easingValue = 1;
+ }
+
+ me.transition(easingValue);
+
+ if (me.width <= 0 || me.height <= 0) {
+ return;
+ }
+
+ if (core_plugins.notify(me, 'beforeDraw', [easingValue]) === false) {
+ return;
+ }
+
+ // Because of plugin hooks (before/afterDatasetsDraw), datasets can't
+ // currently be part of layers. Instead, we draw
+ // layers <= 0 before(default, backward compat), and the rest after
+ layers = me._layers;
+ for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {
+ layers[i].draw(me.chartArea);
+ }
+
+ me.drawDatasets(easingValue);
+
+ // Rest of layers
+ for (; i < layers.length; ++i) {
+ layers[i].draw(me.chartArea);
+ }
+
+ me._drawTooltip(easingValue);
+
+ core_plugins.notify(me, 'afterDraw', [easingValue]);
+ },
+
+ /**
+ * @private
+ */
+ transition: function(easingValue) {
+ var me = this;
+
+ for (var i = 0, ilen = (me.data.datasets || []).length; i < ilen; ++i) {
+ if (me.isDatasetVisible(i)) {
+ me.getDatasetMeta(i).controller.transition(easingValue);
+ }
+ }
+
+ me.tooltip.transition(easingValue);
+ },
+
+ /**
+ * @private
+ */
+ _getSortedDatasetMetas: function(filterVisible) {
+ var me = this;
+ var datasets = me.data.datasets || [];
+ var result = [];
+ var i, ilen;
+
+ for (i = 0, ilen = datasets.length; i < ilen; ++i) {
+ if (!filterVisible || me.isDatasetVisible(i)) {
+ result.push(me.getDatasetMeta(i));
+ }
+ }
+
+ result.sort(compare2Level('order', 'index'));
+
+ return result;
+ },
+
+ /**
+ * @private
+ */
+ _getSortedVisibleDatasetMetas: function() {
+ return this._getSortedDatasetMetas(true);
+ },
+
+ /**
+ * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`
+ * hook, in which case, plugins will not be called on `afterDatasetsDraw`.
+ * @private
+ */
+ drawDatasets: function(easingValue) {
+ var me = this;
+ var metasets, i;
+
+ if (core_plugins.notify(me, 'beforeDatasetsDraw', [easingValue]) === false) {
+ return;
+ }
+
+ metasets = me._getSortedVisibleDatasetMetas();
+ for (i = metasets.length - 1; i >= 0; --i) {
+ me.drawDataset(metasets[i], easingValue);
+ }
+
+ core_plugins.notify(me, 'afterDatasetsDraw', [easingValue]);
+ },
+
+ /**
+ * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`
+ * hook, in which case, plugins will not be called on `afterDatasetDraw`.
+ * @private
+ */
+ drawDataset: function(meta, easingValue) {
+ var me = this;
+ var args = {
+ meta: meta,
+ index: meta.index,
+ easingValue: easingValue
+ };
+
+ if (core_plugins.notify(me, 'beforeDatasetDraw', [args]) === false) {
+ return;
+ }
+
+ meta.controller.draw(easingValue);
+
+ core_plugins.notify(me, 'afterDatasetDraw', [args]);
+ },
+
+ /**
+ * Draws tooltip unless a plugin returns `false` to the `beforeTooltipDraw`
+ * hook, in which case, plugins will not be called on `afterTooltipDraw`.
+ * @private
+ */
+ _drawTooltip: function(easingValue) {
+ var me = this;
+ var tooltip = me.tooltip;
+ var args = {
+ tooltip: tooltip,
+ easingValue: easingValue
+ };
+
+ if (core_plugins.notify(me, 'beforeTooltipDraw', [args]) === false) {
+ return;
+ }
+
+ tooltip.draw();
+
+ core_plugins.notify(me, 'afterTooltipDraw', [args]);
+ },
+
+ /**
+ * Get the single element that was clicked on
+ * @return An object containing the dataset index and element index of the matching element. Also contains the rectangle that was draw
+ */
+ getElementAtEvent: function(e) {
+ return core_interaction.modes.single(this, e);
+ },
+
+ getElementsAtEvent: function(e) {
+ return core_interaction.modes.label(this, e, {intersect: true});
+ },
+
+ getElementsAtXAxis: function(e) {
+ return core_interaction.modes['x-axis'](this, e, {intersect: true});
+ },
+
+ getElementsAtEventForMode: function(e, mode, options) {
+ var method = core_interaction.modes[mode];
+ if (typeof method === 'function') {
+ return method(this, e, options);
+ }
+
+ return [];
+ },
+
+ getDatasetAtEvent: function(e) {
+ return core_interaction.modes.dataset(this, e, {intersect: true});
+ },
+
+ getDatasetMeta: function(datasetIndex) {
+ var me = this;
+ var dataset = me.data.datasets[datasetIndex];
+ if (!dataset._meta) {
+ dataset._meta = {};
+ }
+
+ var meta = dataset._meta[me.id];
+ if (!meta) {
+ meta = dataset._meta[me.id] = {
+ type: null,
+ data: [],
+ dataset: null,
+ controller: null,
+ hidden: null, // See isDatasetVisible() comment
+ xAxisID: null,
+ yAxisID: null,
+ order: dataset.order || 0,
+ index: datasetIndex
+ };
+ }
+
+ return meta;
+ },
+
+ getVisibleDatasetCount: function() {
+ var count = 0;
+ for (var i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {
+ if (this.isDatasetVisible(i)) {
+ count++;
+ }
+ }
+ return count;
+ },
+
+ isDatasetVisible: function(datasetIndex) {
+ var meta = this.getDatasetMeta(datasetIndex);
+
+ // meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,
+ // the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.
+ return typeof meta.hidden === 'boolean' ? !meta.hidden : !this.data.datasets[datasetIndex].hidden;
+ },
+
+ generateLegend: function() {
+ return this.options.legendCallback(this);
+ },
+
+ /**
+ * @private
+ */
+ destroyDatasetMeta: function(datasetIndex) {
+ var id = this.id;
+ var dataset = this.data.datasets[datasetIndex];
+ var meta = dataset._meta && dataset._meta[id];
+
+ if (meta) {
+ meta.controller.destroy();
+ delete dataset._meta[id];
+ }
+ },
+
+ destroy: function() {
+ var me = this;
+ var canvas = me.canvas;
+ var i, ilen;
+
+ me.stop();
+
+ // dataset controllers need to cleanup associated data
+ for (i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {
+ me.destroyDatasetMeta(i);
+ }
+
+ if (canvas) {
+ me.unbindEvents();
+ helpers$1.canvas.clear(me);
+ platform.releaseContext(me.ctx);
+ me.canvas = null;
+ me.ctx = null;
+ }
+
+ core_plugins.notify(me, 'destroy');
+
+ delete Chart.instances[me.id];
+ },
+
+ toBase64Image: function() {
+ return this.canvas.toDataURL.apply(this.canvas, arguments);
+ },
+
+ initToolTip: function() {
+ var me = this;
+ me.tooltip = new core_tooltip({
+ _chart: me,
+ _chartInstance: me, // deprecated, backward compatibility
+ _data: me.data,
+ _options: me.options.tooltips
+ }, me);
+ },
+
+ /**
+ * @private
+ */
+ bindEvents: function() {
+ var me = this;
+ var listeners = me._listeners = {};
+ var listener = function() {
+ me.eventHandler.apply(me, arguments);
+ };
+
+ helpers$1.each(me.options.events, function(type) {
+ platform.addEventListener(me, type, listener);
+ listeners[type] = listener;
+ });
+
+ // Elements used to detect size change should not be injected for non responsive charts.
+ // See https://github.com/chartjs/Chart.js/issues/2210
+ if (me.options.responsive) {
+ listener = function() {
+ me.resize();
+ };
+
+ platform.addEventListener(me, 'resize', listener);
+ listeners.resize = listener;
+ }
+ },
+
+ /**
+ * @private
+ */
+ unbindEvents: function() {
+ var me = this;
+ var listeners = me._listeners;
+ if (!listeners) {
+ return;
+ }
+
+ delete me._listeners;
+ helpers$1.each(listeners, function(listener, type) {
+ platform.removeEventListener(me, type, listener);
+ });
+ },
+
+ updateHoverStyle: function(elements, mode, enabled) {
+ var prefix = enabled ? 'set' : 'remove';
+ var element, i, ilen;
+
+ for (i = 0, ilen = elements.length; i < ilen; ++i) {
+ element = elements[i];
+ if (element) {
+ this.getDatasetMeta(element._datasetIndex).controller[prefix + 'HoverStyle'](element);
+ }
+ }
+
+ if (mode === 'dataset') {
+ this.getDatasetMeta(elements[0]._datasetIndex).controller['_' + prefix + 'DatasetHoverStyle']();
+ }
+ },
+
+ /**
+ * @private
+ */
+ eventHandler: function(e) {
+ var me = this;
+ var tooltip = me.tooltip;
+
+ if (core_plugins.notify(me, 'beforeEvent', [e]) === false) {
+ return;
+ }
+
+ // Buffer any update calls so that renders do not occur
+ me._bufferedRender = true;
+ me._bufferedRequest = null;
+
+ var changed = me.handleEvent(e);
+ // for smooth tooltip animations issue #4989
+ // the tooltip should be the source of change
+ // Animation check workaround:
+ // tooltip._start will be null when tooltip isn't animating
+ if (tooltip) {
+ changed = tooltip._start
+ ? tooltip.handleEvent(e)
+ : changed | tooltip.handleEvent(e);
+ }
+
+ core_plugins.notify(me, 'afterEvent', [e]);
+
+ var bufferedRequest = me._bufferedRequest;
+ if (bufferedRequest) {
+ // If we have an update that was triggered, we need to do a normal render
+ me.render(bufferedRequest);
+ } else if (changed && !me.animating) {
+ // If entering, leaving, or changing elements, animate the change via pivot
+ me.stop();
+
+ // We only need to render at this point. Updating will cause scales to be
+ // recomputed generating flicker & using more memory than necessary.
+ me.render({
+ duration: me.options.hover.animationDuration,
+ lazy: true
+ });
+ }
+
+ me._bufferedRender = false;
+ me._bufferedRequest = null;
+
+ return me;
+ },
+
+ /**
+ * Handle an event
+ * @private
+ * @param {IEvent} event the event to handle
+ * @return {boolean} true if the chart needs to re-render
+ */
+ handleEvent: function(e) {
+ var me = this;
+ var options = me.options || {};
+ var hoverOptions = options.hover;
+ var changed = false;
+
+ me.lastActive = me.lastActive || [];
+
+ // Find Active Elements for hover and tooltips
+ if (e.type === 'mouseout') {
+ me.active = [];
+ } else {
+ me.active = me.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions);
+ }
+
+ // Invoke onHover hook
+ // Need to call with native event here to not break backwards compatibility
+ helpers$1.callback(options.onHover || options.hover.onHover, [e.native, me.active], me);
+
+ if (e.type === 'mouseup' || e.type === 'click') {
+ if (options.onClick) {
+ // Use e.native here for backwards compatibility
+ options.onClick.call(me, e.native, me.active);
+ }
+ }
+
+ // Remove styling for last active (even if it may still be active)
+ if (me.lastActive.length) {
+ me.updateHoverStyle(me.lastActive, hoverOptions.mode, false);
+ }
+
+ // Built in hover styling
+ if (me.active.length && hoverOptions.mode) {
+ me.updateHoverStyle(me.active, hoverOptions.mode, true);
+ }
+
+ changed = !helpers$1.arrayEquals(me.active, me.lastActive);
+
+ // Remember Last Actives
+ me.lastActive = me.active;
+
+ return changed;
+ }
+});
+
+/**
+ * NOTE(SB) We actually don't use this container anymore but we need to keep it
+ * for backward compatibility. Though, it can still be useful for plugins that
+ * would need to work on multiple charts?!
+ */
+Chart.instances = {};
+
+var core_controller = Chart;
+
+// DEPRECATIONS
+
+/**
+ * Provided for backward compatibility, use Chart instead.
+ * @class Chart.Controller
+ * @deprecated since version 2.6
+ * @todo remove at version 3
+ * @private
+ */
+Chart.Controller = Chart;
+
+/**
+ * Provided for backward compatibility, not available anymore.
+ * @namespace Chart
+ * @deprecated since version 2.8
+ * @todo remove at version 3
+ * @private
+ */
+Chart.types = {};
+
+/**
+ * Provided for backward compatibility, not available anymore.
+ * @namespace Chart.helpers.configMerge
+ * @deprecated since version 2.8.0
+ * @todo remove at version 3
+ * @private
+ */
+helpers$1.configMerge = mergeConfig;
+
+/**
+ * Provided for backward compatibility, not available anymore.
+ * @namespace Chart.helpers.scaleMerge
+ * @deprecated since version 2.8.0
+ * @todo remove at version 3
+ * @private
+ */
+helpers$1.scaleMerge = mergeScaleConfig;
+
+var core_helpers = function() {
+
+ // -- Basic js utility methods
+
+ helpers$1.where = function(collection, filterCallback) {
+ if (helpers$1.isArray(collection) && Array.prototype.filter) {
+ return collection.filter(filterCallback);
+ }
+ var filtered = [];
+
+ helpers$1.each(collection, function(item) {
+ if (filterCallback(item)) {
+ filtered.push(item);
+ }
+ });
+
+ return filtered;
+ };
+ helpers$1.findIndex = Array.prototype.findIndex ?
+ function(array, callback, scope) {
+ return array.findIndex(callback, scope);
+ } :
+ function(array, callback, scope) {
+ scope = scope === undefined ? array : scope;
+ for (var i = 0, ilen = array.length; i < ilen; ++i) {
+ if (callback.call(scope, array[i], i, array)) {
+ return i;
+ }
+ }
+ return -1;
+ };
+ helpers$1.findNextWhere = function(arrayToSearch, filterCallback, startIndex) {
+ // Default to start of the array
+ if (helpers$1.isNullOrUndef(startIndex)) {
+ startIndex = -1;
+ }
+ for (var i = startIndex + 1; i < arrayToSearch.length; i++) {
+ var currentItem = arrayToSearch[i];
+ if (filterCallback(currentItem)) {
+ return currentItem;
+ }
+ }
+ };
+ helpers$1.findPreviousWhere = function(arrayToSearch, filterCallback, startIndex) {
+ // Default to end of the array
+ if (helpers$1.isNullOrUndef(startIndex)) {
+ startIndex = arrayToSearch.length;
+ }
+ for (var i = startIndex - 1; i >= 0; i--) {
+ var currentItem = arrayToSearch[i];
+ if (filterCallback(currentItem)) {
+ return currentItem;
+ }
+ }
+ };
+
+ // -- Math methods
+ helpers$1.isNumber = function(n) {
+ return !isNaN(parseFloat(n)) && isFinite(n);
+ };
+ helpers$1.almostEquals = function(x, y, epsilon) {
+ return Math.abs(x - y) < epsilon;
+ };
+ helpers$1.almostWhole = function(x, epsilon) {
+ var rounded = Math.round(x);
+ return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);
+ };
+ helpers$1.max = function(array) {
+ return array.reduce(function(max, value) {
+ if (!isNaN(value)) {
+ return Math.max(max, value);
+ }
+ return max;
+ }, Number.NEGATIVE_INFINITY);
+ };
+ helpers$1.min = function(array) {
+ return array.reduce(function(min, value) {
+ if (!isNaN(value)) {
+ return Math.min(min, value);
+ }
+ return min;
+ }, Number.POSITIVE_INFINITY);
+ };
+ helpers$1.sign = Math.sign ?
+ function(x) {
+ return Math.sign(x);
+ } :
+ function(x) {
+ x = +x; // convert to a number
+ if (x === 0 || isNaN(x)) {
+ return x;
+ }
+ return x > 0 ? 1 : -1;
+ };
+ helpers$1.toRadians = function(degrees) {
+ return degrees * (Math.PI / 180);
+ };
+ helpers$1.toDegrees = function(radians) {
+ return radians * (180 / Math.PI);
+ };
+
+ /**
+ * Returns the number of decimal places
+ * i.e. the number of digits after the decimal point, of the value of this Number.
+ * @param {number} x - A number.
+ * @returns {number} The number of decimal places.
+ * @private
+ */
+ helpers$1._decimalPlaces = function(x) {
+ if (!helpers$1.isFinite(x)) {
+ return;
+ }
+ var e = 1;
+ var p = 0;
+ while (Math.round(x * e) / e !== x) {
+ e *= 10;
+ p++;
+ }
+ return p;
+ };
+
+ // Gets the angle from vertical upright to the point about a centre.
+ helpers$1.getAngleFromPoint = function(centrePoint, anglePoint) {
+ var distanceFromXCenter = anglePoint.x - centrePoint.x;
+ var distanceFromYCenter = anglePoint.y - centrePoint.y;
+ var radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);
+
+ var angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);
+
+ if (angle < (-0.5 * Math.PI)) {
+ angle += 2.0 * Math.PI; // make sure the returned angle is in the range of (-PI/2, 3PI/2]
+ }
+
+ return {
+ angle: angle,
+ distance: radialDistanceFromCenter
+ };
+ };
+ helpers$1.distanceBetweenPoints = function(pt1, pt2) {
+ return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));
+ };
+
+ /**
+ * Provided for backward compatibility, not available anymore
+ * @function Chart.helpers.aliasPixel
+ * @deprecated since version 2.8.0
+ * @todo remove at version 3
+ */
+ helpers$1.aliasPixel = function(pixelWidth) {
+ return (pixelWidth % 2 === 0) ? 0 : 0.5;
+ };
+
+ /**
+ * Returns the aligned pixel value to avoid anti-aliasing blur
+ * @param {Chart} chart - The chart instance.
+ * @param {number} pixel - A pixel value.
+ * @param {number} width - The width of the element.
+ * @returns {number} The aligned pixel value.
+ * @private
+ */
+ helpers$1._alignPixel = function(chart, pixel, width) {
+ var devicePixelRatio = chart.currentDevicePixelRatio;
+ var halfWidth = width / 2;
+ return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;
+ };
+
+ helpers$1.splineCurve = function(firstPoint, middlePoint, afterPoint, t) {
+ // Props to Rob Spencer at scaled innovation for his post on splining between points
+ // http://scaledinnovation.com/analytics/splines/aboutSplines.html
+
+ // This function must also respect "skipped" points
+
+ var previous = firstPoint.skip ? middlePoint : firstPoint;
+ var current = middlePoint;
+ var next = afterPoint.skip ? middlePoint : afterPoint;
+
+ var d01 = Math.sqrt(Math.pow(current.x - previous.x, 2) + Math.pow(current.y - previous.y, 2));
+ var d12 = Math.sqrt(Math.pow(next.x - current.x, 2) + Math.pow(next.y - current.y, 2));
+
+ var s01 = d01 / (d01 + d12);
+ var s12 = d12 / (d01 + d12);
+
+ // If all points are the same, s01 & s02 will be inf
+ s01 = isNaN(s01) ? 0 : s01;
+ s12 = isNaN(s12) ? 0 : s12;
+
+ var fa = t * s01; // scaling factor for triangle Ta
+ var fb = t * s12;
+
+ return {
+ previous: {
+ x: current.x - fa * (next.x - previous.x),
+ y: current.y - fa * (next.y - previous.y)
+ },
+ next: {
+ x: current.x + fb * (next.x - previous.x),
+ y: current.y + fb * (next.y - previous.y)
+ }
+ };
+ };
+ helpers$1.EPSILON = Number.EPSILON || 1e-14;
+ helpers$1.splineCurveMonotone = function(points) {
+ // This function calculates Bézier control points in a similar way than |splineCurve|,
+ // but preserves monotonicity of the provided data and ensures no local extremums are added
+ // between the dataset discrete points due to the interpolation.
+ // See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation
+
+ var pointsWithTangents = (points || []).map(function(point) {
+ return {
+ model: point._model,
+ deltaK: 0,
+ mK: 0
+ };
+ });
+
+ // Calculate slopes (deltaK) and initialize tangents (mK)
+ var pointsLen = pointsWithTangents.length;
+ var i, pointBefore, pointCurrent, pointAfter;
+ for (i = 0; i < pointsLen; ++i) {
+ pointCurrent = pointsWithTangents[i];
+ if (pointCurrent.model.skip) {
+ continue;
+ }
+
+ pointBefore = i > 0 ? pointsWithTangents[i - 1] : null;
+ pointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;
+ if (pointAfter && !pointAfter.model.skip) {
+ var slopeDeltaX = (pointAfter.model.x - pointCurrent.model.x);
+
+ // In the case of two points that appear at the same x pixel, slopeDeltaX is 0
+ pointCurrent.deltaK = slopeDeltaX !== 0 ? (pointAfter.model.y - pointCurrent.model.y) / slopeDeltaX : 0;
+ }
+
+ if (!pointBefore || pointBefore.model.skip) {
+ pointCurrent.mK = pointCurrent.deltaK;
+ } else if (!pointAfter || pointAfter.model.skip) {
+ pointCurrent.mK = pointBefore.deltaK;
+ } else if (this.sign(pointBefore.deltaK) !== this.sign(pointCurrent.deltaK)) {
+ pointCurrent.mK = 0;
+ } else {
+ pointCurrent.mK = (pointBefore.deltaK + pointCurrent.deltaK) / 2;
+ }
+ }
+
+ // Adjust tangents to ensure monotonic properties
+ var alphaK, betaK, tauK, squaredMagnitude;
+ for (i = 0; i < pointsLen - 1; ++i) {
+ pointCurrent = pointsWithTangents[i];
+ pointAfter = pointsWithTangents[i + 1];
+ if (pointCurrent.model.skip || pointAfter.model.skip) {
+ continue;
+ }
+
+ if (helpers$1.almostEquals(pointCurrent.deltaK, 0, this.EPSILON)) {
+ pointCurrent.mK = pointAfter.mK = 0;
+ continue;
+ }
+
+ alphaK = pointCurrent.mK / pointCurrent.deltaK;
+ betaK = pointAfter.mK / pointCurrent.deltaK;
+ squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);
+ if (squaredMagnitude <= 9) {
+ continue;
+ }
+
+ tauK = 3 / Math.sqrt(squaredMagnitude);
+ pointCurrent.mK = alphaK * tauK * pointCurrent.deltaK;
+ pointAfter.mK = betaK * tauK * pointCurrent.deltaK;
+ }
+
+ // Compute control points
+ var deltaX;
+ for (i = 0; i < pointsLen; ++i) {
+ pointCurrent = pointsWithTangents[i];
+ if (pointCurrent.model.skip) {
+ continue;
+ }
+
+ pointBefore = i > 0 ? pointsWithTangents[i - 1] : null;
+ pointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;
+ if (pointBefore && !pointBefore.model.skip) {
+ deltaX = (pointCurrent.model.x - pointBefore.model.x) / 3;
+ pointCurrent.model.controlPointPreviousX = pointCurrent.model.x - deltaX;
+ pointCurrent.model.controlPointPreviousY = pointCurrent.model.y - deltaX * pointCurrent.mK;
+ }
+ if (pointAfter && !pointAfter.model.skip) {
+ deltaX = (pointAfter.model.x - pointCurrent.model.x) / 3;
+ pointCurrent.model.controlPointNextX = pointCurrent.model.x + deltaX;
+ pointCurrent.model.controlPointNextY = pointCurrent.model.y + deltaX * pointCurrent.mK;
+ }
+ }
+ };
+ helpers$1.nextItem = function(collection, index, loop) {
+ if (loop) {
+ return index >= collection.length - 1 ? collection[0] : collection[index + 1];
+ }
+ return index >= collection.length - 1 ? collection[collection.length - 1] : collection[index + 1];
+ };
+ helpers$1.previousItem = function(collection, index, loop) {
+ if (loop) {
+ return index <= 0 ? collection[collection.length - 1] : collection[index - 1];
+ }
+ return index <= 0 ? collection[0] : collection[index - 1];
+ };
+ // Implementation of the nice number algorithm used in determining where axis labels will go
+ helpers$1.niceNum = function(range, round) {
+ var exponent = Math.floor(helpers$1.log10(range));
+ var fraction = range / Math.pow(10, exponent);
+ var niceFraction;
+
+ if (round) {
+ if (fraction < 1.5) {
+ niceFraction = 1;
+ } else if (fraction < 3) {
+ niceFraction = 2;
+ } else if (fraction < 7) {
+ niceFraction = 5;
+ } else {
+ niceFraction = 10;
+ }
+ } else if (fraction <= 1.0) {
+ niceFraction = 1;
+ } else if (fraction <= 2) {
+ niceFraction = 2;
+ } else if (fraction <= 5) {
+ niceFraction = 5;
+ } else {
+ niceFraction = 10;
+ }
+
+ return niceFraction * Math.pow(10, exponent);
+ };
+ // Request animation polyfill - https://www.paulirish.com/2011/requestanimationframe-for-smart-animating/
+ helpers$1.requestAnimFrame = (function() {
+ if (typeof window === 'undefined') {
+ return function(callback) {
+ callback();
+ };
+ }
+ return window.requestAnimationFrame ||
+ window.webkitRequestAnimationFrame ||
+ window.mozRequestAnimationFrame ||
+ window.oRequestAnimationFrame ||
+ window.msRequestAnimationFrame ||
+ function(callback) {
+ return window.setTimeout(callback, 1000 / 60);
+ };
+ }());
+ // -- DOM methods
+ helpers$1.getRelativePosition = function(evt, chart) {
+ var mouseX, mouseY;
+ var e = evt.originalEvent || evt;
+ var canvas = evt.target || evt.srcElement;
+ var boundingRect = canvas.getBoundingClientRect();
+
+ var touches = e.touches;
+ if (touches && touches.length > 0) {
+ mouseX = touches[0].clientX;
+ mouseY = touches[0].clientY;
+
+ } else {
+ mouseX = e.clientX;
+ mouseY = e.clientY;
+ }
+
+ // Scale mouse coordinates into canvas coordinates
+ // by following the pattern laid out by 'jerryj' in the comments of
+ // https://www.html5canvastutorials.com/advanced/html5-canvas-mouse-coordinates/
+ var paddingLeft = parseFloat(helpers$1.getStyle(canvas, 'padding-left'));
+ var paddingTop = parseFloat(helpers$1.getStyle(canvas, 'padding-top'));
+ var paddingRight = parseFloat(helpers$1.getStyle(canvas, 'padding-right'));
+ var paddingBottom = parseFloat(helpers$1.getStyle(canvas, 'padding-bottom'));
+ var width = boundingRect.right - boundingRect.left - paddingLeft - paddingRight;
+ var height = boundingRect.bottom - boundingRect.top - paddingTop - paddingBottom;
+
+ // We divide by the current device pixel ratio, because the canvas is scaled up by that amount in each direction. However
+ // the backend model is in unscaled coordinates. Since we are going to deal with our model coordinates, we go back here
+ mouseX = Math.round((mouseX - boundingRect.left - paddingLeft) / (width) * canvas.width / chart.currentDevicePixelRatio);
+ mouseY = Math.round((mouseY - boundingRect.top - paddingTop) / (height) * canvas.height / chart.currentDevicePixelRatio);
+
+ return {
+ x: mouseX,
+ y: mouseY
+ };
+
+ };
+
+ // Private helper function to convert max-width/max-height values that may be percentages into a number
+ function parseMaxStyle(styleValue, node, parentProperty) {
+ var valueInPixels;
+ if (typeof styleValue === 'string') {
+ valueInPixels = parseInt(styleValue, 10);
+
+ if (styleValue.indexOf('%') !== -1) {
+ // percentage * size in dimension
+ valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];
+ }
+ } else {
+ valueInPixels = styleValue;
+ }
+
+ return valueInPixels;
+ }
+
+ /**
+ * Returns if the given value contains an effective constraint.
+ * @private
+ */
+ function isConstrainedValue(value) {
+ return value !== undefined && value !== null && value !== 'none';
+ }
+
+ /**
+ * Returns the max width or height of the given DOM node in a cross-browser compatible fashion
+ * @param {HTMLElement} domNode - the node to check the constraint on
+ * @param {string} maxStyle - the style that defines the maximum for the direction we are using ('max-width' / 'max-height')
+ * @param {string} percentageProperty - property of parent to use when calculating width as a percentage
+ * @see {@link https://www.nathanaeljones.com/blog/2013/reading-max-width-cross-browser}
+ */
+ function getConstraintDimension(domNode, maxStyle, percentageProperty) {
+ var view = document.defaultView;
+ var parentNode = helpers$1._getParentNode(domNode);
+ var constrainedNode = view.getComputedStyle(domNode)[maxStyle];
+ var constrainedContainer = view.getComputedStyle(parentNode)[maxStyle];
+ var hasCNode = isConstrainedValue(constrainedNode);
+ var hasCContainer = isConstrainedValue(constrainedContainer);
+ var infinity = Number.POSITIVE_INFINITY;
+
+ if (hasCNode || hasCContainer) {
+ return Math.min(
+ hasCNode ? parseMaxStyle(constrainedNode, domNode, percentageProperty) : infinity,
+ hasCContainer ? parseMaxStyle(constrainedContainer, parentNode, percentageProperty) : infinity);
+ }
+
+ return 'none';
+ }
+ // returns Number or undefined if no constraint
+ helpers$1.getConstraintWidth = function(domNode) {
+ return getConstraintDimension(domNode, 'max-width', 'clientWidth');
+ };
+ // returns Number or undefined if no constraint
+ helpers$1.getConstraintHeight = function(domNode) {
+ return getConstraintDimension(domNode, 'max-height', 'clientHeight');
+ };
+ /**
+ * @private
+ */
+ helpers$1._calculatePadding = function(container, padding, parentDimension) {
+ padding = helpers$1.getStyle(container, padding);
+
+ return padding.indexOf('%') > -1 ? parentDimension * parseInt(padding, 10) / 100 : parseInt(padding, 10);
+ };
+ /**
+ * @private
+ */
+ helpers$1._getParentNode = function(domNode) {
+ var parent = domNode.parentNode;
+ if (parent && parent.toString() === '[object ShadowRoot]') {
+ parent = parent.host;
+ }
+ return parent;
+ };
+ helpers$1.getMaximumWidth = function(domNode) {
+ var container = helpers$1._getParentNode(domNode);
+ if (!container) {
+ return domNode.clientWidth;
+ }
+
+ var clientWidth = container.clientWidth;
+ var paddingLeft = helpers$1._calculatePadding(container, 'padding-left', clientWidth);
+ var paddingRight = helpers$1._calculatePadding(container, 'padding-right', clientWidth);
+
+ var w = clientWidth - paddingLeft - paddingRight;
+ var cw = helpers$1.getConstraintWidth(domNode);
+ return isNaN(cw) ? w : Math.min(w, cw);
+ };
+ helpers$1.getMaximumHeight = function(domNode) {
+ var container = helpers$1._getParentNode(domNode);
+ if (!container) {
+ return domNode.clientHeight;
+ }
+
+ var clientHeight = container.clientHeight;
+ var paddingTop = helpers$1._calculatePadding(container, 'padding-top', clientHeight);
+ var paddingBottom = helpers$1._calculatePadding(container, 'padding-bottom', clientHeight);
+
+ var h = clientHeight - paddingTop - paddingBottom;
+ var ch = helpers$1.getConstraintHeight(domNode);
+ return isNaN(ch) ? h : Math.min(h, ch);
+ };
+ helpers$1.getStyle = function(el, property) {
+ return el.currentStyle ?
+ el.currentStyle[property] :
+ document.defaultView.getComputedStyle(el, null).getPropertyValue(property);
+ };
+ helpers$1.retinaScale = function(chart, forceRatio) {
+ var pixelRatio = chart.currentDevicePixelRatio = forceRatio || (typeof window !== 'undefined' && window.devicePixelRatio) || 1;
+ if (pixelRatio === 1) {
+ return;
+ }
+
+ var canvas = chart.canvas;
+ var height = chart.height;
+ var width = chart.width;
+
+ canvas.height = height * pixelRatio;
+ canvas.width = width * pixelRatio;
+ chart.ctx.scale(pixelRatio, pixelRatio);
+
+ // If no style has been set on the canvas, the render size is used as display size,
+ // making the chart visually bigger, so let's enforce it to the "correct" values.
+ // See https://github.com/chartjs/Chart.js/issues/3575
+ if (!canvas.style.height && !canvas.style.width) {
+ canvas.style.height = height + 'px';
+ canvas.style.width = width + 'px';
+ }
+ };
+ // -- Canvas methods
+ helpers$1.fontString = function(pixelSize, fontStyle, fontFamily) {
+ return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;
+ };
+ helpers$1.longestText = function(ctx, font, arrayOfThings, cache) {
+ cache = cache || {};
+ var data = cache.data = cache.data || {};
+ var gc = cache.garbageCollect = cache.garbageCollect || [];
+
+ if (cache.font !== font) {
+ data = cache.data = {};
+ gc = cache.garbageCollect = [];
+ cache.font = font;
+ }
+
+ ctx.font = font;
+ var longest = 0;
+ var ilen = arrayOfThings.length;
+ var i, j, jlen, thing, nestedThing;
+ for (i = 0; i < ilen; i++) {
+ thing = arrayOfThings[i];
+
+ // Undefined strings and arrays should not be measured
+ if (thing !== undefined && thing !== null && helpers$1.isArray(thing) !== true) {
+ longest = helpers$1.measureText(ctx, data, gc, longest, thing);
+ } else if (helpers$1.isArray(thing)) {
+ // if it is an array lets measure each element
+ // to do maybe simplify this function a bit so we can do this more recursively?
+ for (j = 0, jlen = thing.length; j < jlen; j++) {
+ nestedThing = thing[j];
+ // Undefined strings and arrays should not be measured
+ if (nestedThing !== undefined && nestedThing !== null && !helpers$1.isArray(nestedThing)) {
+ longest = helpers$1.measureText(ctx, data, gc, longest, nestedThing);
+ }
+ }
+ }
+ }
+
+ var gcLen = gc.length / 2;
+ if (gcLen > arrayOfThings.length) {
+ for (i = 0; i < gcLen; i++) {
+ delete data[gc[i]];
+ }
+ gc.splice(0, gcLen);
+ }
+ return longest;
+ };
+ helpers$1.measureText = function(ctx, data, gc, longest, string) {
+ var textWidth = data[string];
+ if (!textWidth) {
+ textWidth = data[string] = ctx.measureText(string).width;
+ gc.push(string);
+ }
+ if (textWidth > longest) {
+ longest = textWidth;
+ }
+ return longest;
+ };
+
+ /**
+ * @deprecated
+ */
+ helpers$1.numberOfLabelLines = function(arrayOfThings) {
+ var numberOfLines = 1;
+ helpers$1.each(arrayOfThings, function(thing) {
+ if (helpers$1.isArray(thing)) {
+ if (thing.length > numberOfLines) {
+ numberOfLines = thing.length;
+ }
+ }
+ });
+ return numberOfLines;
+ };
+
+ helpers$1.color = !chartjsColor ?
+ function(value) {
+ console.error('Color.js not found!');
+ return value;
+ } :
+ function(value) {
+ /* global CanvasGradient */
+ if (value instanceof CanvasGradient) {
+ value = core_defaults.global.defaultColor;
+ }
+
+ return chartjsColor(value);
+ };
+
+ helpers$1.getHoverColor = function(colorValue) {
+ /* global CanvasPattern */
+ return (colorValue instanceof CanvasPattern || colorValue instanceof CanvasGradient) ?
+ colorValue :
+ helpers$1.color(colorValue).saturate(0.5).darken(0.1).rgbString();
+ };
+};
+
+function abstract() {
+ throw new Error(
+ 'This method is not implemented: either no adapter can ' +
+ 'be found or an incomplete integration was provided.'
+ );
+}
+
+/**
+ * Date adapter (current used by the time scale)
+ * @namespace Chart._adapters._date
+ * @memberof Chart._adapters
+ * @private
+ */
+
+/**
+ * Currently supported unit string values.
+ * @typedef {('millisecond'|'second'|'minute'|'hour'|'day'|'week'|'month'|'quarter'|'year')}
+ * @memberof Chart._adapters._date
+ * @name Unit
+ */
+
+/**
+ * @class
+ */
+function DateAdapter(options) {
+ this.options = options || {};
+}
+
+helpers$1.extend(DateAdapter.prototype, /** @lends DateAdapter */ {
+ /**
+ * Returns a map of time formats for the supported formatting units defined
+ * in Unit as well as 'datetime' representing a detailed date/time string.
+ * @returns {{string: string}}
+ */
+ formats: abstract,
+
+ /**
+ * Parses the given `value` and return the associated timestamp.
+ * @param {any} value - the value to parse (usually comes from the data)
+ * @param {string} [format] - the expected data format
+ * @returns {(number|null)}
+ * @function
+ */
+ parse: abstract,
+
+ /**
+ * Returns the formatted date in the specified `format` for a given `timestamp`.
+ * @param {number} timestamp - the timestamp to format
+ * @param {string} format - the date/time token
+ * @return {string}
+ * @function
+ */
+ format: abstract,
+
+ /**
+ * Adds the specified `amount` of `unit` to the given `timestamp`.
+ * @param {number} timestamp - the input timestamp
+ * @param {number} amount - the amount to add
+ * @param {Unit} unit - the unit as string
+ * @return {number}
+ * @function
+ */
+ add: abstract,
+
+ /**
+ * Returns the number of `unit` between the given timestamps.
+ * @param {number} max - the input timestamp (reference)
+ * @param {number} min - the timestamp to substract
+ * @param {Unit} unit - the unit as string
+ * @return {number}
+ * @function
+ */
+ diff: abstract,
+
+ /**
+ * Returns start of `unit` for the given `timestamp`.
+ * @param {number} timestamp - the input timestamp
+ * @param {Unit} unit - the unit as string
+ * @param {number} [weekday] - the ISO day of the week with 1 being Monday
+ * and 7 being Sunday (only needed if param *unit* is `isoWeek`).
+ * @function
+ */
+ startOf: abstract,
+
+ /**
+ * Returns end of `unit` for the given `timestamp`.
+ * @param {number} timestamp - the input timestamp
+ * @param {Unit} unit - the unit as string
+ * @function
+ */
+ endOf: abstract,
+
+ // DEPRECATIONS
+
+ /**
+ * Provided for backward compatibility for scale.getValueForPixel(),
+ * this method should be overridden only by the moment adapter.
+ * @deprecated since version 2.8.0
+ * @todo remove at version 3
+ * @private
+ */
+ _create: function(value) {
+ return value;
+ }
+});
+
+DateAdapter.override = function(members) {
+ helpers$1.extend(DateAdapter.prototype, members);
+};
+
+var _date = DateAdapter;
+
+var core_adapters = {
+ _date: _date
+};
+
+/**
+ * Namespace to hold static tick generation functions
+ * @namespace Chart.Ticks
+ */
+var core_ticks = {
+ /**
+ * Namespace to hold formatters for different types of ticks
+ * @namespace Chart.Ticks.formatters
+ */
+ formatters: {
+ /**
+ * Formatter for value labels
+ * @method Chart.Ticks.formatters.values
+ * @param value the value to display
+ * @return {string|string[]} the label to display
+ */
+ values: function(value) {
+ return helpers$1.isArray(value) ? value : '' + value;
+ },
+
+ /**
+ * Formatter for linear numeric ticks
+ * @method Chart.Ticks.formatters.linear
+ * @param tickValue {number} the value to be formatted
+ * @param index {number} the position of the tickValue parameter in the ticks array
+ * @param ticks {number[]} the list of ticks being converted
+ * @return {string} string representation of the tickValue parameter
+ */
+ linear: function(tickValue, index, ticks) {
+ // If we have lots of ticks, don't use the ones
+ var delta = ticks.length > 3 ? ticks[2] - ticks[1] : ticks[1] - ticks[0];
+
+ // If we have a number like 2.5 as the delta, figure out how many decimal places we need
+ if (Math.abs(delta) > 1) {
+ if (tickValue !== Math.floor(tickValue)) {
+ // not an integer
+ delta = tickValue - Math.floor(tickValue);
+ }
+ }
+
+ var logDelta = helpers$1.log10(Math.abs(delta));
+ var tickString = '';
+
+ if (tickValue !== 0) {
+ var maxTick = Math.max(Math.abs(ticks[0]), Math.abs(ticks[ticks.length - 1]));
+ if (maxTick < 1e-4) { // all ticks are small numbers; use scientific notation
+ var logTick = helpers$1.log10(Math.abs(tickValue));
+ var numExponential = Math.floor(logTick) - Math.floor(logDelta);
+ numExponential = Math.max(Math.min(numExponential, 20), 0);
+ tickString = tickValue.toExponential(numExponential);
+ } else {
+ var numDecimal = -1 * Math.floor(logDelta);
+ numDecimal = Math.max(Math.min(numDecimal, 20), 0); // toFixed has a max of 20 decimal places
+ tickString = tickValue.toFixed(numDecimal);
+ }
+ } else {
+ tickString = '0'; // never show decimal places for 0
+ }
+
+ return tickString;
+ },
+
+ logarithmic: function(tickValue, index, ticks) {
+ var remain = tickValue / (Math.pow(10, Math.floor(helpers$1.log10(tickValue))));
+
+ if (tickValue === 0) {
+ return '0';
+ } else if (remain === 1 || remain === 2 || remain === 5 || index === 0 || index === ticks.length - 1) {
+ return tickValue.toExponential();
+ }
+ return '';
+ }
+ }
+};
+
+var isArray = helpers$1.isArray;
+var isNullOrUndef = helpers$1.isNullOrUndef;
+var valueOrDefault$a = helpers$1.valueOrDefault;
+var valueAtIndexOrDefault = helpers$1.valueAtIndexOrDefault;
+
+core_defaults._set('scale', {
+ display: true,
+ position: 'left',
+ offset: false,
+
+ // grid line settings
+ gridLines: {
+ display: true,
+ color: 'rgba(0,0,0,0.1)',
+ lineWidth: 1,
+ drawBorder: true,
+ drawOnChartArea: true,
+ drawTicks: true,
+ tickMarkLength: 10,
+ zeroLineWidth: 1,
+ zeroLineColor: 'rgba(0,0,0,0.25)',
+ zeroLineBorderDash: [],
+ zeroLineBorderDashOffset: 0.0,
+ offsetGridLines: false,
+ borderDash: [],
+ borderDashOffset: 0.0
+ },
+
+ // scale label
+ scaleLabel: {
+ // display property
+ display: false,
+
+ // actual label
+ labelString: '',
+
+ // top/bottom padding
+ padding: {
+ top: 4,
+ bottom: 4
+ }
+ },
+
+ // label settings
+ ticks: {
+ beginAtZero: false,
+ minRotation: 0,
+ maxRotation: 50,
+ mirror: false,
+ padding: 0,
+ reverse: false,
+ display: true,
+ autoSkip: true,
+ autoSkipPadding: 0,
+ labelOffset: 0,
+ // We pass through arrays to be rendered as multiline labels, we convert Others to strings here.
+ callback: core_ticks.formatters.values,
+ minor: {},
+ major: {}
+ }
+});
+
+/** Returns a new array containing numItems from arr */
+function sample(arr, numItems) {
+ var result = [];
+ var increment = arr.length / numItems;
+ var i = 0;
+ var len = arr.length;
+
+ for (; i < len; i += increment) {
+ result.push(arr[Math.floor(i)]);
+ }
+ return result;
+}
+
+function getPixelForGridLine(scale, index, offsetGridLines) {
+ var length = scale.getTicks().length;
+ var validIndex = Math.min(index, length - 1);
+ var lineValue = scale.getPixelForTick(validIndex);
+ var start = scale._startPixel;
+ var end = scale._endPixel;
+ var epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.
+ var offset;
+
+ if (offsetGridLines) {
+ if (length === 1) {
+ offset = Math.max(lineValue - start, end - lineValue);
+ } else if (index === 0) {
+ offset = (scale.getPixelForTick(1) - lineValue) / 2;
+ } else {
+ offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;
+ }
+ lineValue += validIndex < index ? offset : -offset;
+
+ // Return undefined if the pixel is out of the range
+ if (lineValue < start - epsilon || lineValue > end + epsilon) {
+ return;
+ }
+ }
+ return lineValue;
+}
+
+function garbageCollect(caches, length) {
+ helpers$1.each(caches, function(cache) {
+ var gc = cache.gc;
+ var gcLen = gc.length / 2;
+ var i;
+ if (gcLen > length) {
+ for (i = 0; i < gcLen; ++i) {
+ delete cache.data[gc[i]];
+ }
+ gc.splice(0, gcLen);
+ }
+ });
+}
+
+/**
+ * Returns {width, height, offset} objects for the first, last, widest, highest tick
+ * labels where offset indicates the anchor point offset from the top in pixels.
+ */
+function computeLabelSizes(ctx, tickFonts, ticks, caches) {
+ var length = ticks.length;
+ var widths = [];
+ var heights = [];
+ var offsets = [];
+ var i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel, widest, highest;
+
+ for (i = 0; i < length; ++i) {
+ label = ticks[i].label;
+ tickFont = ticks[i].major ? tickFonts.major : tickFonts.minor;
+ ctx.font = fontString = tickFont.string;
+ cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};
+ lineHeight = tickFont.lineHeight;
+ width = height = 0;
+ // Undefined labels and arrays should not be measured
+ if (!isNullOrUndef(label) && !isArray(label)) {
+ width = helpers$1.measureText(ctx, cache.data, cache.gc, width, label);
+ height = lineHeight;
+ } else if (isArray(label)) {
+ // if it is an array let's measure each element
+ for (j = 0, jlen = label.length; j < jlen; ++j) {
+ nestedLabel = label[j];
+ // Undefined labels and arrays should not be measured
+ if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {
+ width = helpers$1.measureText(ctx, cache.data, cache.gc, width, nestedLabel);
+ height += lineHeight;
+ }
+ }
+ }
+ widths.push(width);
+ heights.push(height);
+ offsets.push(lineHeight / 2);
+ }
+ garbageCollect(caches, length);
+
+ widest = widths.indexOf(Math.max.apply(null, widths));
+ highest = heights.indexOf(Math.max.apply(null, heights));
+
+ function valueAt(idx) {
+ return {
+ width: widths[idx] || 0,
+ height: heights[idx] || 0,
+ offset: offsets[idx] || 0
+ };
+ }
+
+ return {
+ first: valueAt(0),
+ last: valueAt(length - 1),
+ widest: valueAt(widest),
+ highest: valueAt(highest)
+ };
+}
+
+function getTickMarkLength(options) {
+ return options.drawTicks ? options.tickMarkLength : 0;
+}
+
+function getScaleLabelHeight(options) {
+ var font, padding;
+
+ if (!options.display) {
+ return 0;
+ }
+
+ font = helpers$1.options._parseFont(options);
+ padding = helpers$1.options.toPadding(options.padding);
+
+ return font.lineHeight + padding.height;
+}
+
+function parseFontOptions(options, nestedOpts) {
+ return helpers$1.extend(helpers$1.options._parseFont({
+ fontFamily: valueOrDefault$a(nestedOpts.fontFamily, options.fontFamily),
+ fontSize: valueOrDefault$a(nestedOpts.fontSize, options.fontSize),
+ fontStyle: valueOrDefault$a(nestedOpts.fontStyle, options.fontStyle),
+ lineHeight: valueOrDefault$a(nestedOpts.lineHeight, options.lineHeight)
+ }), {
+ color: helpers$1.options.resolve([nestedOpts.fontColor, options.fontColor, core_defaults.global.defaultFontColor])
+ });
+}
+
+function parseTickFontOptions(options) {
+ var minor = parseFontOptions(options, options.minor);
+ var major = options.major.enabled ? parseFontOptions(options, options.major) : minor;
+
+ return {minor: minor, major: major};
+}
+
+function nonSkipped(ticksToFilter) {
+ var filtered = [];
+ var item, index, len;
+ for (index = 0, len = ticksToFilter.length; index < len; ++index) {
+ item = ticksToFilter[index];
+ if (typeof item._index !== 'undefined') {
+ filtered.push(item);
+ }
+ }
+ return filtered;
+}
+
+function getEvenSpacing(arr) {
+ var len = arr.length;
+ var i, diff;
+
+ if (len < 2) {
+ return false;
+ }
+
+ for (diff = arr[0], i = 1; i < len; ++i) {
+ if (arr[i] - arr[i - 1] !== diff) {
+ return false;
+ }
+ }
+ return diff;
+}
+
+function calculateSpacing(majorIndices, ticks, axisLength, ticksLimit) {
+ var evenMajorSpacing = getEvenSpacing(majorIndices);
+ var spacing = (ticks.length - 1) / ticksLimit;
+ var factors, factor, i, ilen;
+
+ // If the major ticks are evenly spaced apart, place the minor ticks
+ // so that they divide the major ticks into even chunks
+ if (!evenMajorSpacing) {
+ return Math.max(spacing, 1);
+ }
+
+ factors = helpers$1.math._factorize(evenMajorSpacing);
+ for (i = 0, ilen = factors.length - 1; i < ilen; i++) {
+ factor = factors[i];
+ if (factor > spacing) {
+ return factor;
+ }
+ }
+ return Math.max(spacing, 1);
+}
+
+function getMajorIndices(ticks) {
+ var result = [];
+ var i, ilen;
+ for (i = 0, ilen = ticks.length; i < ilen; i++) {
+ if (ticks[i].major) {
+ result.push(i);
+ }
+ }
+ return result;
+}
+
+function skipMajors(ticks, majorIndices, spacing) {
+ var count = 0;
+ var next = majorIndices[0];
+ var i, tick;
+
+ spacing = Math.ceil(spacing);
+ for (i = 0; i < ticks.length; i++) {
+ tick = ticks[i];
+ if (i === next) {
+ tick._index = i;
+ count++;
+ next = majorIndices[count * spacing];
+ } else {
+ delete tick.label;
+ }
+ }
+}
+
+function skip(ticks, spacing, majorStart, majorEnd) {
+ var start = valueOrDefault$a(majorStart, 0);
+ var end = Math.min(valueOrDefault$a(majorEnd, ticks.length), ticks.length);
+ var count = 0;
+ var length, i, tick, next;
+
+ spacing = Math.ceil(spacing);
+ if (majorEnd) {
+ length = majorEnd - majorStart;
+ spacing = length / Math.floor(length / spacing);
+ }
+
+ next = start;
+
+ while (next < 0) {
+ count++;
+ next = Math.round(start + count * spacing);
+ }
+
+ for (i = Math.max(start, 0); i < end; i++) {
+ tick = ticks[i];
+ if (i === next) {
+ tick._index = i;
+ count++;
+ next = Math.round(start + count * spacing);
+ } else {
+ delete tick.label;
+ }
+ }
+}
+
+var Scale = core_element.extend({
+
+ zeroLineIndex: 0,
+
+ /**
+ * Get the padding needed for the scale
+ * @method getPadding
+ * @private
+ * @returns {Padding} the necessary padding
+ */
+ getPadding: function() {
+ var me = this;
+ return {
+ left: me.paddingLeft || 0,
+ top: me.paddingTop || 0,
+ right: me.paddingRight || 0,
+ bottom: me.paddingBottom || 0
+ };
+ },
+
+ /**
+ * Returns the scale tick objects ({label, major})
+ * @since 2.7
+ */
+ getTicks: function() {
+ return this._ticks;
+ },
+
+ /**
+ * @private
+ */
+ _getLabels: function() {
+ var data = this.chart.data;
+ return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];
+ },
+
+ // These methods are ordered by lifecyle. Utilities then follow.
+ // Any function defined here is inherited by all scale types.
+ // Any function can be extended by the scale type
+
+ /**
+ * Provided for backward compatibility, not available anymore
+ * @function Chart.Scale.mergeTicksOptions
+ * @deprecated since version 2.8.0
+ * @todo remove at version 3
+ */
+ mergeTicksOptions: function() {
+ // noop
+ },
+
+ beforeUpdate: function() {
+ helpers$1.callback(this.options.beforeUpdate, [this]);
+ },
+
+ /**
+ * @param {number} maxWidth - the max width in pixels
+ * @param {number} maxHeight - the max height in pixels
+ * @param {object} margins - the space between the edge of the other scales and edge of the chart
+ * This space comes from two sources:
+ * - padding - space that's required to show the labels at the edges of the scale
+ * - thickness of scales or legends in another orientation
+ */
+ update: function(maxWidth, maxHeight, margins) {
+ var me = this;
+ var tickOpts = me.options.ticks;
+ var sampleSize = tickOpts.sampleSize;
+ var i, ilen, labels, ticks, samplingEnabled;
+
+ // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)
+ me.beforeUpdate();
+
+ // Absorb the master measurements
+ me.maxWidth = maxWidth;
+ me.maxHeight = maxHeight;
+ me.margins = helpers$1.extend({
+ left: 0,
+ right: 0,
+ top: 0,
+ bottom: 0
+ }, margins);
+
+ me._ticks = null;
+ me.ticks = null;
+ me._labelSizes = null;
+ me._maxLabelLines = 0;
+ me.longestLabelWidth = 0;
+ me.longestTextCache = me.longestTextCache || {};
+ me._gridLineItems = null;
+ me._labelItems = null;
+
+ // Dimensions
+ me.beforeSetDimensions();
+ me.setDimensions();
+ me.afterSetDimensions();
+
+ // Data min/max
+ me.beforeDataLimits();
+ me.determineDataLimits();
+ me.afterDataLimits();
+
+ // Ticks - `this.ticks` is now DEPRECATED!
+ // Internal ticks are now stored as objects in the PRIVATE `this._ticks` member
+ // and must not be accessed directly from outside this class. `this.ticks` being
+ // around for long time and not marked as private, we can't change its structure
+ // without unexpected breaking changes. If you need to access the scale ticks,
+ // use scale.getTicks() instead.
+
+ me.beforeBuildTicks();
+
+ // New implementations should return an array of objects but for BACKWARD COMPAT,
+ // we still support no return (`this.ticks` internally set by calling this method).
+ ticks = me.buildTicks() || [];
+
+ // Allow modification of ticks in callback.
+ ticks = me.afterBuildTicks(ticks) || ticks;
+
+ // Ensure ticks contains ticks in new tick format
+ if ((!ticks || !ticks.length) && me.ticks) {
+ ticks = [];
+ for (i = 0, ilen = me.ticks.length; i < ilen; ++i) {
+ ticks.push({
+ value: me.ticks[i],
+ major: false
+ });
+ }
+ }
+
+ me._ticks = ticks;
+
+ // Compute tick rotation and fit using a sampled subset of labels
+ // We generally don't need to compute the size of every single label for determining scale size
+ samplingEnabled = sampleSize < ticks.length;
+ labels = me._convertTicksToLabels(samplingEnabled ? sample(ticks, sampleSize) : ticks);
+
+ // _configure is called twice, once here, once from core.controller.updateLayout.
+ // Here we haven't been positioned yet, but dimensions are correct.
+ // Variables set in _configure are needed for calculateTickRotation, and
+ // it's ok that coordinates are not correct there, only dimensions matter.
+ me._configure();
+
+ // Tick Rotation
+ me.beforeCalculateTickRotation();
+ me.calculateTickRotation();
+ me.afterCalculateTickRotation();
+
+ me.beforeFit();
+ me.fit();
+ me.afterFit();
+
+ // Auto-skip
+ me._ticksToDraw = tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto') ? me._autoSkip(ticks) : ticks;
+
+ if (samplingEnabled) {
+ // Generate labels using all non-skipped ticks
+ labels = me._convertTicksToLabels(me._ticksToDraw);
+ }
+
+ me.ticks = labels; // BACKWARD COMPATIBILITY
+
+ // IMPORTANT: after this point, we consider that `this.ticks` will NEVER change!
+
+ me.afterUpdate();
+
+ // TODO(v3): remove minSize as a public property and return value from all layout boxes. It is unused
+ // make maxWidth and maxHeight private
+ return me.minSize;
+ },
+
+ /**
+ * @private
+ */
+ _configure: function() {
+ var me = this;
+ var reversePixels = me.options.ticks.reverse;
+ var startPixel, endPixel;
+
+ if (me.isHorizontal()) {
+ startPixel = me.left;
+ endPixel = me.right;
+ } else {
+ startPixel = me.top;
+ endPixel = me.bottom;
+ // by default vertical scales are from bottom to top, so pixels are reversed
+ reversePixels = !reversePixels;
+ }
+ me._startPixel = startPixel;
+ me._endPixel = endPixel;
+ me._reversePixels = reversePixels;
+ me._length = endPixel - startPixel;
+ },
+
+ afterUpdate: function() {
+ helpers$1.callback(this.options.afterUpdate, [this]);
+ },
+
+ //
+
+ beforeSetDimensions: function() {
+ helpers$1.callback(this.options.beforeSetDimensions, [this]);
+ },
+ setDimensions: function() {
+ var me = this;
+ // Set the unconstrained dimension before label rotation
+ if (me.isHorizontal()) {
+ // Reset position before calculating rotation
+ me.width = me.maxWidth;
+ me.left = 0;
+ me.right = me.width;
+ } else {
+ me.height = me.maxHeight;
+
+ // Reset position before calculating rotation
+ me.top = 0;
+ me.bottom = me.height;
+ }
+
+ // Reset padding
+ me.paddingLeft = 0;
+ me.paddingTop = 0;
+ me.paddingRight = 0;
+ me.paddingBottom = 0;
+ },
+ afterSetDimensions: function() {
+ helpers$1.callback(this.options.afterSetDimensions, [this]);
+ },
+
+ // Data limits
+ beforeDataLimits: function() {
+ helpers$1.callback(this.options.beforeDataLimits, [this]);
+ },
+ determineDataLimits: helpers$1.noop,
+ afterDataLimits: function() {
+ helpers$1.callback(this.options.afterDataLimits, [this]);
+ },
+
+ //
+ beforeBuildTicks: function() {
+ helpers$1.callback(this.options.beforeBuildTicks, [this]);
+ },
+ buildTicks: helpers$1.noop,
+ afterBuildTicks: function(ticks) {
+ var me = this;
+ // ticks is empty for old axis implementations here
+ if (isArray(ticks) && ticks.length) {
+ return helpers$1.callback(me.options.afterBuildTicks, [me, ticks]);
+ }
+ // Support old implementations (that modified `this.ticks` directly in buildTicks)
+ me.ticks = helpers$1.callback(me.options.afterBuildTicks, [me, me.ticks]) || me.ticks;
+ return ticks;
+ },
+
+ beforeTickToLabelConversion: function() {
+ helpers$1.callback(this.options.beforeTickToLabelConversion, [this]);
+ },
+ convertTicksToLabels: function() {
+ var me = this;
+ // Convert ticks to strings
+ var tickOpts = me.options.ticks;
+ me.ticks = me.ticks.map(tickOpts.userCallback || tickOpts.callback, this);
+ },
+ afterTickToLabelConversion: function() {
+ helpers$1.callback(this.options.afterTickToLabelConversion, [this]);
+ },
+
+ //
+
+ beforeCalculateTickRotation: function() {
+ helpers$1.callback(this.options.beforeCalculateTickRotation, [this]);
+ },
+ calculateTickRotation: function() {
+ var me = this;
+ var options = me.options;
+ var tickOpts = options.ticks;
+ var numTicks = me.getTicks().length;
+ var minRotation = tickOpts.minRotation || 0;
+ var maxRotation = tickOpts.maxRotation;
+ var labelRotation = minRotation;
+ var labelSizes, maxLabelWidth, maxLabelHeight, maxWidth, tickWidth, maxHeight, maxLabelDiagonal;
+
+ if (!me._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !me.isHorizontal()) {
+ me.labelRotation = minRotation;
+ return;
+ }
+
+ labelSizes = me._getLabelSizes();
+ maxLabelWidth = labelSizes.widest.width;
+ maxLabelHeight = labelSizes.highest.height - labelSizes.highest.offset;
+
+ // Estimate the width of each grid based on the canvas width, the maximum
+ // label width and the number of tick intervals
+ maxWidth = Math.min(me.maxWidth, me.chart.width - maxLabelWidth);
+ tickWidth = options.offset ? me.maxWidth / numTicks : maxWidth / (numTicks - 1);
+
+ // Allow 3 pixels x2 padding either side for label readability
+ if (maxLabelWidth + 6 > tickWidth) {
+ tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));
+ maxHeight = me.maxHeight - getTickMarkLength(options.gridLines)
+ - tickOpts.padding - getScaleLabelHeight(options.scaleLabel);
+ maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);
+ labelRotation = helpers$1.toDegrees(Math.min(
+ Math.asin(Math.min((labelSizes.highest.height + 6) / tickWidth, 1)),
+ Math.asin(Math.min(maxHeight / maxLabelDiagonal, 1)) - Math.asin(maxLabelHeight / maxLabelDiagonal)
+ ));
+ labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));
+ }
+
+ me.labelRotation = labelRotation;
+ },
+ afterCalculateTickRotation: function() {
+ helpers$1.callback(this.options.afterCalculateTickRotation, [this]);
+ },
+
+ //
+
+ beforeFit: function() {
+ helpers$1.callback(this.options.beforeFit, [this]);
+ },
+ fit: function() {
+ var me = this;
+ // Reset
+ var minSize = me.minSize = {
+ width: 0,
+ height: 0
+ };
+
+ var chart = me.chart;
+ var opts = me.options;
+ var tickOpts = opts.ticks;
+ var scaleLabelOpts = opts.scaleLabel;
+ var gridLineOpts = opts.gridLines;
+ var display = me._isVisible();
+ var isBottom = opts.position === 'bottom';
+ var isHorizontal = me.isHorizontal();
+
+ // Width
+ if (isHorizontal) {
+ minSize.width = me.maxWidth;
+ } else if (display) {
+ minSize.width = getTickMarkLength(gridLineOpts) + getScaleLabelHeight(scaleLabelOpts);
+ }
+
+ // height
+ if (!isHorizontal) {
+ minSize.height = me.maxHeight; // fill all the height
+ } else if (display) {
+ minSize.height = getTickMarkLength(gridLineOpts) + getScaleLabelHeight(scaleLabelOpts);
+ }
+
+ // Don't bother fitting the ticks if we are not showing the labels
+ if (tickOpts.display && display) {
+ var tickFonts = parseTickFontOptions(tickOpts);
+ var labelSizes = me._getLabelSizes();
+ var firstLabelSize = labelSizes.first;
+ var lastLabelSize = labelSizes.last;
+ var widestLabelSize = labelSizes.widest;
+ var highestLabelSize = labelSizes.highest;
+ var lineSpace = tickFonts.minor.lineHeight * 0.4;
+ var tickPadding = tickOpts.padding;
+
+ if (isHorizontal) {
+ // A horizontal axis is more constrained by the height.
+ var isRotated = me.labelRotation !== 0;
+ var angleRadians = helpers$1.toRadians(me.labelRotation);
+ var cosRotation = Math.cos(angleRadians);
+ var sinRotation = Math.sin(angleRadians);
+
+ var labelHeight = sinRotation * widestLabelSize.width
+ + cosRotation * (highestLabelSize.height - (isRotated ? highestLabelSize.offset : 0))
+ + (isRotated ? 0 : lineSpace); // padding
+
+ minSize.height = Math.min(me.maxHeight, minSize.height + labelHeight + tickPadding);
+
+ var offsetLeft = me.getPixelForTick(0) - me.left;
+ var offsetRight = me.right - me.getPixelForTick(me.getTicks().length - 1);
+ var paddingLeft, paddingRight;
+
+ // Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned
+ // which means that the right padding is dominated by the font height
+ if (isRotated) {
+ paddingLeft = isBottom ?
+ cosRotation * firstLabelSize.width + sinRotation * firstLabelSize.offset :
+ sinRotation * (firstLabelSize.height - firstLabelSize.offset);
+ paddingRight = isBottom ?
+ sinRotation * (lastLabelSize.height - lastLabelSize.offset) :
+ cosRotation * lastLabelSize.width + sinRotation * lastLabelSize.offset;
+ } else {
+ paddingLeft = firstLabelSize.width / 2;
+ paddingRight = lastLabelSize.width / 2;
+ }
+
+ // Adjust padding taking into account changes in offsets
+ // and add 3 px to move away from canvas edges
+ me.paddingLeft = Math.max((paddingLeft - offsetLeft) * me.width / (me.width - offsetLeft), 0) + 3;
+ me.paddingRight = Math.max((paddingRight - offsetRight) * me.width / (me.width - offsetRight), 0) + 3;
+ } else {
+ // A vertical axis is more constrained by the width. Labels are the
+ // dominant factor here, so get that length first and account for padding
+ var labelWidth = tickOpts.mirror ? 0 :
+ // use lineSpace for consistency with horizontal axis
+ // tickPadding is not implemented for horizontal
+ widestLabelSize.width + tickPadding + lineSpace;
+
+ minSize.width = Math.min(me.maxWidth, minSize.width + labelWidth);
+
+ me.paddingTop = firstLabelSize.height / 2;
+ me.paddingBottom = lastLabelSize.height / 2;
+ }
+ }
+
+ me.handleMargins();
+
+ if (isHorizontal) {
+ me.width = me._length = chart.width - me.margins.left - me.margins.right;
+ me.height = minSize.height;
+ } else {
+ me.width = minSize.width;
+ me.height = me._length = chart.height - me.margins.top - me.margins.bottom;
+ }
+ },
+
+ /**
+ * Handle margins and padding interactions
+ * @private
+ */
+ handleMargins: function() {
+ var me = this;
+ if (me.margins) {
+ me.margins.left = Math.max(me.paddingLeft, me.margins.left);
+ me.margins.top = Math.max(me.paddingTop, me.margins.top);
+ me.margins.right = Math.max(me.paddingRight, me.margins.right);
+ me.margins.bottom = Math.max(me.paddingBottom, me.margins.bottom);
+ }
+ },
+
+ afterFit: function() {
+ helpers$1.callback(this.options.afterFit, [this]);
+ },
+
+ // Shared Methods
+ isHorizontal: function() {
+ var pos = this.options.position;
+ return pos === 'top' || pos === 'bottom';
+ },
+ isFullWidth: function() {
+ return this.options.fullWidth;
+ },
+
+ // Get the correct value. NaN bad inputs, If the value type is object get the x or y based on whether we are horizontal or not
+ getRightValue: function(rawValue) {
+ // Null and undefined values first
+ if (isNullOrUndef(rawValue)) {
+ return NaN;
+ }
+ // isNaN(object) returns true, so make sure NaN is checking for a number; Discard Infinite values
+ if ((typeof rawValue === 'number' || rawValue instanceof Number) && !isFinite(rawValue)) {
+ return NaN;
+ }
+
+ // If it is in fact an object, dive in one more level
+ if (rawValue) {
+ if (this.isHorizontal()) {
+ if (rawValue.x !== undefined) {
+ return this.getRightValue(rawValue.x);
+ }
+ } else if (rawValue.y !== undefined) {
+ return this.getRightValue(rawValue.y);
+ }
+ }
+
+ // Value is good, return it
+ return rawValue;
+ },
+
+ _convertTicksToLabels: function(ticks) {
+ var me = this;
+ var labels, i, ilen;
+
+ me.ticks = ticks.map(function(tick) {
+ return tick.value;
+ });
+
+ me.beforeTickToLabelConversion();
+
+ // New implementations should return the formatted tick labels but for BACKWARD
+ // COMPAT, we still support no return (`this.ticks` internally changed by calling
+ // this method and supposed to contain only string values).
+ labels = me.convertTicksToLabels(ticks) || me.ticks;
+
+ me.afterTickToLabelConversion();
+
+ // BACKWARD COMPAT: synchronize `_ticks` with labels (so potentially `this.ticks`)
+ for (i = 0, ilen = ticks.length; i < ilen; ++i) {
+ ticks[i].label = labels[i];
+ }
+
+ return labels;
+ },
+
+ /**
+ * @private
+ */
+ _getLabelSizes: function() {
+ var me = this;
+ var labelSizes = me._labelSizes;
+
+ if (!labelSizes) {
+ me._labelSizes = labelSizes = computeLabelSizes(me.ctx, parseTickFontOptions(me.options.ticks), me.getTicks(), me.longestTextCache);
+ me.longestLabelWidth = labelSizes.widest.width;
+ }
+
+ return labelSizes;
+ },
+
+ /**
+ * @private
+ */
+ _parseValue: function(value) {
+ var start, end, min, max;
+
+ if (isArray(value)) {
+ start = +this.getRightValue(value[0]);
+ end = +this.getRightValue(value[1]);
+ min = Math.min(start, end);
+ max = Math.max(start, end);
+ } else {
+ value = +this.getRightValue(value);
+ start = undefined;
+ end = value;
+ min = value;
+ max = value;
+ }
+
+ return {
+ min: min,
+ max: max,
+ start: start,
+ end: end
+ };
+ },
+
+ /**
+ * @private
+ */
+ _getScaleLabel: function(rawValue) {
+ var v = this._parseValue(rawValue);
+ if (v.start !== undefined) {
+ return '[' + v.start + ', ' + v.end + ']';
+ }
+
+ return +this.getRightValue(rawValue);
+ },
+
+ /**
+ * Used to get the value to display in the tooltip for the data at the given index
+ * @param index
+ * @param datasetIndex
+ */
+ getLabelForIndex: helpers$1.noop,
+
+ /**
+ * Returns the location of the given data point. Value can either be an index or a numerical value
+ * The coordinate (0, 0) is at the upper-left corner of the canvas
+ * @param value
+ * @param index
+ * @param datasetIndex
+ */
+ getPixelForValue: helpers$1.noop,
+
+ /**
+ * Used to get the data value from a given pixel. This is the inverse of getPixelForValue
+ * The coordinate (0, 0) is at the upper-left corner of the canvas
+ * @param pixel
+ */
+ getValueForPixel: helpers$1.noop,
+
+ /**
+ * Returns the location of the tick at the given index
+ * The coordinate (0, 0) is at the upper-left corner of the canvas
+ */
+ getPixelForTick: function(index) {
+ var me = this;
+ var offset = me.options.offset;
+ var numTicks = me._ticks.length;
+ var tickWidth = 1 / Math.max(numTicks - (offset ? 0 : 1), 1);
+
+ return index < 0 || index > numTicks - 1
+ ? null
+ : me.getPixelForDecimal(index * tickWidth + (offset ? tickWidth / 2 : 0));
+ },
+
+ /**
+ * Utility for getting the pixel location of a percentage of scale
+ * The coordinate (0, 0) is at the upper-left corner of the canvas
+ */
+ getPixelForDecimal: function(decimal) {
+ var me = this;
+
+ if (me._reversePixels) {
+ decimal = 1 - decimal;
+ }
+
+ return me._startPixel + decimal * me._length;
+ },
+
+ getDecimalForPixel: function(pixel) {
+ var decimal = (pixel - this._startPixel) / this._length;
+ return this._reversePixels ? 1 - decimal : decimal;
+ },
+
+ /**
+ * Returns the pixel for the minimum chart value
+ * The coordinate (0, 0) is at the upper-left corner of the canvas
+ */
+ getBasePixel: function() {
+ return this.getPixelForValue(this.getBaseValue());
+ },
+
+ getBaseValue: function() {
+ var me = this;
+ var min = me.min;
+ var max = me.max;
+
+ return me.beginAtZero ? 0 :
+ min < 0 && max < 0 ? max :
+ min > 0 && max > 0 ? min :
+ 0;
+ },
+
+ /**
+ * Returns a subset of ticks to be plotted to avoid overlapping labels.
+ * @private
+ */
+ _autoSkip: function(ticks) {
+ var me = this;
+ var tickOpts = me.options.ticks;
+ var axisLength = me._length;
+ var ticksLimit = tickOpts.maxTicksLimit || axisLength / me._tickSize() + 1;
+ var majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];
+ var numMajorIndices = majorIndices.length;
+ var first = majorIndices[0];
+ var last = majorIndices[numMajorIndices - 1];
+ var i, ilen, spacing, avgMajorSpacing;
+
+ // If there are too many major ticks to display them all
+ if (numMajorIndices > ticksLimit) {
+ skipMajors(ticks, majorIndices, numMajorIndices / ticksLimit);
+ return nonSkipped(ticks);
+ }
+
+ spacing = calculateSpacing(majorIndices, ticks, axisLength, ticksLimit);
+
+ if (numMajorIndices > 0) {
+ for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {
+ skip(ticks, spacing, majorIndices[i], majorIndices[i + 1]);
+ }
+ avgMajorSpacing = numMajorIndices > 1 ? (last - first) / (numMajorIndices - 1) : null;
+ skip(ticks, spacing, helpers$1.isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);
+ skip(ticks, spacing, last, helpers$1.isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);
+ return nonSkipped(ticks);
+ }
+ skip(ticks, spacing);
+ return nonSkipped(ticks);
+ },
+
+ /**
+ * @private
+ */
+ _tickSize: function() {
+ var me = this;
+ var optionTicks = me.options.ticks;
+
+ // Calculate space needed by label in axis direction.
+ var rot = helpers$1.toRadians(me.labelRotation);
+ var cos = Math.abs(Math.cos(rot));
+ var sin = Math.abs(Math.sin(rot));
+
+ var labelSizes = me._getLabelSizes();
+ var padding = optionTicks.autoSkipPadding || 0;
+ var w = labelSizes ? labelSizes.widest.width + padding : 0;
+ var h = labelSizes ? labelSizes.highest.height + padding : 0;
+
+ // Calculate space needed for 1 tick in axis direction.
+ return me.isHorizontal()
+ ? h * cos > w * sin ? w / cos : h / sin
+ : h * sin < w * cos ? h / cos : w / sin;
+ },
+
+ /**
+ * @private
+ */
+ _isVisible: function() {
+ var me = this;
+ var chart = me.chart;
+ var display = me.options.display;
+ var i, ilen, meta;
+
+ if (display !== 'auto') {
+ return !!display;
+ }
+
+ // When 'auto', the scale is visible if at least one associated dataset is visible.
+ for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {
+ if (chart.isDatasetVisible(i)) {
+ meta = chart.getDatasetMeta(i);
+ if (meta.xAxisID === me.id || meta.yAxisID === me.id) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ },
+
+ /**
+ * @private
+ */
+ _computeGridLineItems: function(chartArea) {
+ var me = this;
+ var chart = me.chart;
+ var options = me.options;
+ var gridLines = options.gridLines;
+ var position = options.position;
+ var offsetGridLines = gridLines.offsetGridLines;
+ var isHorizontal = me.isHorizontal();
+ var ticks = me._ticksToDraw;
+ var ticksLength = ticks.length + (offsetGridLines ? 1 : 0);
+
+ var tl = getTickMarkLength(gridLines);
+ var items = [];
+ var axisWidth = gridLines.drawBorder ? valueAtIndexOrDefault(gridLines.lineWidth, 0, 0) : 0;
+ var axisHalfWidth = axisWidth / 2;
+ var alignPixel = helpers$1._alignPixel;
+ var alignBorderValue = function(pixel) {
+ return alignPixel(chart, pixel, axisWidth);
+ };
+ var borderValue, i, tick, lineValue, alignedLineValue;
+ var tx1, ty1, tx2, ty2, x1, y1, x2, y2, lineWidth, lineColor, borderDash, borderDashOffset;
+
+ if (position === 'top') {
+ borderValue = alignBorderValue(me.bottom);
+ ty1 = me.bottom - tl;
+ ty2 = borderValue - axisHalfWidth;
+ y1 = alignBorderValue(chartArea.top) + axisHalfWidth;
+ y2 = chartArea.bottom;
+ } else if (position === 'bottom') {
+ borderValue = alignBorderValue(me.top);
+ y1 = chartArea.top;
+ y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;
+ ty1 = borderValue + axisHalfWidth;
+ ty2 = me.top + tl;
+ } else if (position === 'left') {
+ borderValue = alignBorderValue(me.right);
+ tx1 = me.right - tl;
+ tx2 = borderValue - axisHalfWidth;
+ x1 = alignBorderValue(chartArea.left) + axisHalfWidth;
+ x2 = chartArea.right;
+ } else {
+ borderValue = alignBorderValue(me.left);
+ x1 = chartArea.left;
+ x2 = alignBorderValue(chartArea.right) - axisHalfWidth;
+ tx1 = borderValue + axisHalfWidth;
+ tx2 = me.left + tl;
+ }
+
+ for (i = 0; i < ticksLength; ++i) {
+ tick = ticks[i] || {};
+
+ // autoskipper skipped this tick (#4635)
+ if (isNullOrUndef(tick.label) && i < ticks.length) {
+ continue;
+ }
+
+ if (i === me.zeroLineIndex && options.offset === offsetGridLines) {
+ // Draw the first index specially
+ lineWidth = gridLines.zeroLineWidth;
+ lineColor = gridLines.zeroLineColor;
+ borderDash = gridLines.zeroLineBorderDash || [];
+ borderDashOffset = gridLines.zeroLineBorderDashOffset || 0.0;
+ } else {
+ lineWidth = valueAtIndexOrDefault(gridLines.lineWidth, i, 1);
+ lineColor = valueAtIndexOrDefault(gridLines.color, i, 'rgba(0,0,0,0.1)');
+ borderDash = gridLines.borderDash || [];
+ borderDashOffset = gridLines.borderDashOffset || 0.0;
+ }
+
+ lineValue = getPixelForGridLine(me, tick._index || i, offsetGridLines);
+
+ // Skip if the pixel is out of the range
+ if (lineValue === undefined) {
+ continue;
+ }
+
+ alignedLineValue = alignPixel(chart, lineValue, lineWidth);
+
+ if (isHorizontal) {
+ tx1 = tx2 = x1 = x2 = alignedLineValue;
+ } else {
+ ty1 = ty2 = y1 = y2 = alignedLineValue;
+ }
+
+ items.push({
+ tx1: tx1,
+ ty1: ty1,
+ tx2: tx2,
+ ty2: ty2,
+ x1: x1,
+ y1: y1,
+ x2: x2,
+ y2: y2,
+ width: lineWidth,
+ color: lineColor,
+ borderDash: borderDash,
+ borderDashOffset: borderDashOffset,
+ });
+ }
+
+ items.ticksLength = ticksLength;
+ items.borderValue = borderValue;
+
+ return items;
+ },
+
+ /**
+ * @private
+ */
+ _computeLabelItems: function() {
+ var me = this;
+ var options = me.options;
+ var optionTicks = options.ticks;
+ var position = options.position;
+ var isMirrored = optionTicks.mirror;
+ var isHorizontal = me.isHorizontal();
+ var ticks = me._ticksToDraw;
+ var fonts = parseTickFontOptions(optionTicks);
+ var tickPadding = optionTicks.padding;
+ var tl = getTickMarkLength(options.gridLines);
+ var rotation = -helpers$1.toRadians(me.labelRotation);
+ var items = [];
+ var i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;
+
+ if (position === 'top') {
+ y = me.bottom - tl - tickPadding;
+ textAlign = !rotation ? 'center' : 'left';
+ } else if (position === 'bottom') {
+ y = me.top + tl + tickPadding;
+ textAlign = !rotation ? 'center' : 'right';
+ } else if (position === 'left') {
+ x = me.right - (isMirrored ? 0 : tl) - tickPadding;
+ textAlign = isMirrored ? 'left' : 'right';
+ } else {
+ x = me.left + (isMirrored ? 0 : tl) + tickPadding;
+ textAlign = isMirrored ? 'right' : 'left';
+ }
+
+ for (i = 0, ilen = ticks.length; i < ilen; ++i) {
+ tick = ticks[i];
+ label = tick.label;
+
+ // autoskipper skipped this tick (#4635)
+ if (isNullOrUndef(label)) {
+ continue;
+ }
+
+ pixel = me.getPixelForTick(tick._index || i) + optionTicks.labelOffset;
+ font = tick.major ? fonts.major : fonts.minor;
+ lineHeight = font.lineHeight;
+ lineCount = isArray(label) ? label.length : 1;
+
+ if (isHorizontal) {
+ x = pixel;
+ textOffset = position === 'top'
+ ? ((!rotation ? 0.5 : 1) - lineCount) * lineHeight
+ : (!rotation ? 0.5 : 0) * lineHeight;
+ } else {
+ y = pixel;
+ textOffset = (1 - lineCount) * lineHeight / 2;
+ }
+
+ items.push({
+ x: x,
+ y: y,
+ rotation: rotation,
+ label: label,
+ font: font,
+ textOffset: textOffset,
+ textAlign: textAlign
+ });
+ }
+
+ return items;
+ },
+
+ /**
+ * @private
+ */
+ _drawGrid: function(chartArea) {
+ var me = this;
+ var gridLines = me.options.gridLines;
+
+ if (!gridLines.display) {
+ return;
+ }
+
+ var ctx = me.ctx;
+ var chart = me.chart;
+ var alignPixel = helpers$1._alignPixel;
+ var axisWidth = gridLines.drawBorder ? valueAtIndexOrDefault(gridLines.lineWidth, 0, 0) : 0;
+ var items = me._gridLineItems || (me._gridLineItems = me._computeGridLineItems(chartArea));
+ var width, color, i, ilen, item;
+
+ for (i = 0, ilen = items.length; i < ilen; ++i) {
+ item = items[i];
+ width = item.width;
+ color = item.color;
+
+ if (width && color) {
+ ctx.save();
+ ctx.lineWidth = width;
+ ctx.strokeStyle = color;
+ if (ctx.setLineDash) {
+ ctx.setLineDash(item.borderDash);
+ ctx.lineDashOffset = item.borderDashOffset;
+ }
+
+ ctx.beginPath();
+
+ if (gridLines.drawTicks) {
+ ctx.moveTo(item.tx1, item.ty1);
+ ctx.lineTo(item.tx2, item.ty2);
+ }
+
+ if (gridLines.drawOnChartArea) {
+ ctx.moveTo(item.x1, item.y1);
+ ctx.lineTo(item.x2, item.y2);
+ }
+
+ ctx.stroke();
+ ctx.restore();
+ }
+ }
+
+ if (axisWidth) {
+ // Draw the line at the edge of the axis
+ var firstLineWidth = axisWidth;
+ var lastLineWidth = valueAtIndexOrDefault(gridLines.lineWidth, items.ticksLength - 1, 1);
+ var borderValue = items.borderValue;
+ var x1, x2, y1, y2;
+
+ if (me.isHorizontal()) {
+ x1 = alignPixel(chart, me.left, firstLineWidth) - firstLineWidth / 2;
+ x2 = alignPixel(chart, me.right, lastLineWidth) + lastLineWidth / 2;
+ y1 = y2 = borderValue;
+ } else {
+ y1 = alignPixel(chart, me.top, firstLineWidth) - firstLineWidth / 2;
+ y2 = alignPixel(chart, me.bottom, lastLineWidth) + lastLineWidth / 2;
+ x1 = x2 = borderValue;
+ }
+
+ ctx.lineWidth = axisWidth;
+ ctx.strokeStyle = valueAtIndexOrDefault(gridLines.color, 0);
+ ctx.beginPath();
+ ctx.moveTo(x1, y1);
+ ctx.lineTo(x2, y2);
+ ctx.stroke();
+ }
+ },
+
+ /**
+ * @private
+ */
+ _drawLabels: function() {
+ var me = this;
+ var optionTicks = me.options.ticks;
+
+ if (!optionTicks.display) {
+ return;
+ }
+
+ var ctx = me.ctx;
+ var items = me._labelItems || (me._labelItems = me._computeLabelItems());
+ var i, j, ilen, jlen, item, tickFont, label, y;
+
+ for (i = 0, ilen = items.length; i < ilen; ++i) {
+ item = items[i];
+ tickFont = item.font;
+
+ // Make sure we draw text in the correct color and font
+ ctx.save();
+ ctx.translate(item.x, item.y);
+ ctx.rotate(item.rotation);
+ ctx.font = tickFont.string;
+ ctx.fillStyle = tickFont.color;
+ ctx.textBaseline = 'middle';
+ ctx.textAlign = item.textAlign;
+
+ label = item.label;
+ y = item.textOffset;
+ if (isArray(label)) {
+ for (j = 0, jlen = label.length; j < jlen; ++j) {
+ // We just make sure the multiline element is a string here..
+ ctx.fillText('' + label[j], 0, y);
+ y += tickFont.lineHeight;
+ }
+ } else {
+ ctx.fillText(label, 0, y);
+ }
+ ctx.restore();
+ }
+ },
+
+ /**
+ * @private
+ */
+ _drawTitle: function() {
+ var me = this;
+ var ctx = me.ctx;
+ var options = me.options;
+ var scaleLabel = options.scaleLabel;
+
+ if (!scaleLabel.display) {
+ return;
+ }
+
+ var scaleLabelFontColor = valueOrDefault$a(scaleLabel.fontColor, core_defaults.global.defaultFontColor);
+ var scaleLabelFont = helpers$1.options._parseFont(scaleLabel);
+ var scaleLabelPadding = helpers$1.options.toPadding(scaleLabel.padding);
+ var halfLineHeight = scaleLabelFont.lineHeight / 2;
+ var position = options.position;
+ var rotation = 0;
+ var scaleLabelX, scaleLabelY;
+
+ if (me.isHorizontal()) {
+ scaleLabelX = me.left + me.width / 2; // midpoint of the width
+ scaleLabelY = position === 'bottom'
+ ? me.bottom - halfLineHeight - scaleLabelPadding.bottom
+ : me.top + halfLineHeight + scaleLabelPadding.top;
+ } else {
+ var isLeft = position === 'left';
+ scaleLabelX = isLeft
+ ? me.left + halfLineHeight + scaleLabelPadding.top
+ : me.right - halfLineHeight - scaleLabelPadding.top;
+ scaleLabelY = me.top + me.height / 2;
+ rotation = isLeft ? -0.5 * Math.PI : 0.5 * Math.PI;
+ }
+
+ ctx.save();
+ ctx.translate(scaleLabelX, scaleLabelY);
+ ctx.rotate(rotation);
+ ctx.textAlign = 'center';
+ ctx.textBaseline = 'middle';
+ ctx.fillStyle = scaleLabelFontColor; // render in correct colour
+ ctx.font = scaleLabelFont.string;
+ ctx.fillText(scaleLabel.labelString, 0, 0);
+ ctx.restore();
+ },
+
+ draw: function(chartArea) {
+ var me = this;
+
+ if (!me._isVisible()) {
+ return;
+ }
+
+ me._drawGrid(chartArea);
+ me._drawTitle();
+ me._drawLabels();
+ },
+
+ /**
+ * @private
+ */
+ _layers: function() {
+ var me = this;
+ var opts = me.options;
+ var tz = opts.ticks && opts.ticks.z || 0;
+ var gz = opts.gridLines && opts.gridLines.z || 0;
+
+ if (!me._isVisible() || tz === gz || me.draw !== me._draw) {
+ // backward compatibility: draw has been overridden by custom scale
+ return [{
+ z: tz,
+ draw: function() {
+ me.draw.apply(me, arguments);
+ }
+ }];
+ }
+
+ return [{
+ z: gz,
+ draw: function() {
+ me._drawGrid.apply(me, arguments);
+ me._drawTitle.apply(me, arguments);
+ }
+ }, {
+ z: tz,
+ draw: function() {
+ me._drawLabels.apply(me, arguments);
+ }
+ }];
+ },
+
+ /**
+ * @private
+ */
+ _getMatchingVisibleMetas: function(type) {
+ var me = this;
+ var isHorizontal = me.isHorizontal();
+ return me.chart._getSortedVisibleDatasetMetas()
+ .filter(function(meta) {
+ return (!type || meta.type === type)
+ && (isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id);
+ });
+ }
+});
+
+Scale.prototype._draw = Scale.prototype.draw;
+
+var core_scale = Scale;
+
+var isNullOrUndef$1 = helpers$1.isNullOrUndef;
+
+var defaultConfig = {
+ position: 'bottom'
+};
+
+var scale_category = core_scale.extend({
+ determineDataLimits: function() {
+ var me = this;
+ var labels = me._getLabels();
+ var ticksOpts = me.options.ticks;
+ var min = ticksOpts.min;
+ var max = ticksOpts.max;
+ var minIndex = 0;
+ var maxIndex = labels.length - 1;
+ var findIndex;
+
+ if (min !== undefined) {
+ // user specified min value
+ findIndex = labels.indexOf(min);
+ if (findIndex >= 0) {
+ minIndex = findIndex;
+ }
+ }
+
+ if (max !== undefined) {
+ // user specified max value
+ findIndex = labels.indexOf(max);
+ if (findIndex >= 0) {
+ maxIndex = findIndex;
+ }
+ }
+
+ me.minIndex = minIndex;
+ me.maxIndex = maxIndex;
+ me.min = labels[minIndex];
+ me.max = labels[maxIndex];
+ },
+
+ buildTicks: function() {
+ var me = this;
+ var labels = me._getLabels();
+ var minIndex = me.minIndex;
+ var maxIndex = me.maxIndex;
+
+ // If we are viewing some subset of labels, slice the original array
+ me.ticks = (minIndex === 0 && maxIndex === labels.length - 1) ? labels : labels.slice(minIndex, maxIndex + 1);
+ },
+
+ getLabelForIndex: function(index, datasetIndex) {
+ var me = this;
+ var chart = me.chart;
+
+ if (chart.getDatasetMeta(datasetIndex).controller._getValueScaleId() === me.id) {
+ return me.getRightValue(chart.data.datasets[datasetIndex].data[index]);
+ }
+
+ return me._getLabels()[index];
+ },
+
+ _configure: function() {
+ var me = this;
+ var offset = me.options.offset;
+ var ticks = me.ticks;
+
+ core_scale.prototype._configure.call(me);
+
+ if (!me.isHorizontal()) {
+ // For backward compatibility, vertical category scale reverse is inverted.
+ me._reversePixels = !me._reversePixels;
+ }
+
+ if (!ticks) {
+ return;
+ }
+
+ me._startValue = me.minIndex - (offset ? 0.5 : 0);
+ me._valueRange = Math.max(ticks.length - (offset ? 0 : 1), 1);
+ },
+
+ // Used to get data value locations. Value can either be an index or a numerical value
+ getPixelForValue: function(value, index, datasetIndex) {
+ var me = this;
+ var valueCategory, labels, idx;
+
+ if (!isNullOrUndef$1(index) && !isNullOrUndef$1(datasetIndex)) {
+ value = me.chart.data.datasets[datasetIndex].data[index];
+ }
+
+ // If value is a data object, then index is the index in the data array,
+ // not the index of the scale. We need to change that.
+ if (!isNullOrUndef$1(value)) {
+ valueCategory = me.isHorizontal() ? value.x : value.y;
+ }
+ if (valueCategory !== undefined || (value !== undefined && isNaN(index))) {
+ labels = me._getLabels();
+ value = helpers$1.valueOrDefault(valueCategory, value);
+ idx = labels.indexOf(value);
+ index = idx !== -1 ? idx : index;
+ if (isNaN(index)) {
+ index = value;
+ }
+ }
+ return me.getPixelForDecimal((index - me._startValue) / me._valueRange);
+ },
+
+ getPixelForTick: function(index) {
+ var ticks = this.ticks;
+ return index < 0 || index > ticks.length - 1
+ ? null
+ : this.getPixelForValue(ticks[index], index + this.minIndex);
+ },
+
+ getValueForPixel: function(pixel) {
+ var me = this;
+ var value = Math.round(me._startValue + me.getDecimalForPixel(pixel) * me._valueRange);
+ return Math.min(Math.max(value, 0), me.ticks.length - 1);
+ },
+
+ getBasePixel: function() {
+ return this.bottom;
+ }
+});
+
+// INTERNAL: static default options, registered in src/index.js
+var _defaults = defaultConfig;
+scale_category._defaults = _defaults;
+
+var noop = helpers$1.noop;
+var isNullOrUndef$2 = helpers$1.isNullOrUndef;
+
+/**
+ * Generate a set of linear ticks
+ * @param generationOptions the options used to generate the ticks
+ * @param dataRange the range of the data
+ * @returns {number[]} array of tick values
+ */
+function generateTicks(generationOptions, dataRange) {
+ var ticks = [];
+ // To get a "nice" value for the tick spacing, we will use the appropriately named
+ // "nice number" algorithm. See https://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks
+ // for details.
+
+ var MIN_SPACING = 1e-14;
+ var stepSize = generationOptions.stepSize;
+ var unit = stepSize || 1;
+ var maxNumSpaces = generationOptions.maxTicks - 1;
+ var min = generationOptions.min;
+ var max = generationOptions.max;
+ var precision = generationOptions.precision;
+ var rmin = dataRange.min;
+ var rmax = dataRange.max;
+ var spacing = helpers$1.niceNum((rmax - rmin) / maxNumSpaces / unit) * unit;
+ var factor, niceMin, niceMax, numSpaces;
+
+ // Beyond MIN_SPACING floating point numbers being to lose precision
+ // such that we can't do the math necessary to generate ticks
+ if (spacing < MIN_SPACING && isNullOrUndef$2(min) && isNullOrUndef$2(max)) {
+ return [rmin, rmax];
+ }
+
+ numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);
+ if (numSpaces > maxNumSpaces) {
+ // If the calculated num of spaces exceeds maxNumSpaces, recalculate it
+ spacing = helpers$1.niceNum(numSpaces * spacing / maxNumSpaces / unit) * unit;
+ }
+
+ if (stepSize || isNullOrUndef$2(precision)) {
+ // If a precision is not specified, calculate factor based on spacing
+ factor = Math.pow(10, helpers$1._decimalPlaces(spacing));
+ } else {
+ // If the user specified a precision, round to that number of decimal places
+ factor = Math.pow(10, precision);
+ spacing = Math.ceil(spacing * factor) / factor;
+ }
+
+ niceMin = Math.floor(rmin / spacing) * spacing;
+ niceMax = Math.ceil(rmax / spacing) * spacing;
+
+ // If min, max and stepSize is set and they make an evenly spaced scale use it.
+ if (stepSize) {
+ // If very close to our whole number, use it.
+ if (!isNullOrUndef$2(min) && helpers$1.almostWhole(min / spacing, spacing / 1000)) {
+ niceMin = min;
+ }
+ if (!isNullOrUndef$2(max) && helpers$1.almostWhole(max / spacing, spacing / 1000)) {
+ niceMax = max;
+ }
+ }
+
+ numSpaces = (niceMax - niceMin) / spacing;
+ // If very close to our rounded value, use it.
+ if (helpers$1.almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {
+ numSpaces = Math.round(numSpaces);
+ } else {
+ numSpaces = Math.ceil(numSpaces);
+ }
+
+ niceMin = Math.round(niceMin * factor) / factor;
+ niceMax = Math.round(niceMax * factor) / factor;
+ ticks.push(isNullOrUndef$2(min) ? niceMin : min);
+ for (var j = 1; j < numSpaces; ++j) {
+ ticks.push(Math.round((niceMin + j * spacing) * factor) / factor);
+ }
+ ticks.push(isNullOrUndef$2(max) ? niceMax : max);
+
+ return ticks;
+}
+
+var scale_linearbase = core_scale.extend({
+ getRightValue: function(value) {
+ if (typeof value === 'string') {
+ return +value;
+ }
+ return core_scale.prototype.getRightValue.call(this, value);
+ },
+
+ handleTickRangeOptions: function() {
+ var me = this;
+ var opts = me.options;
+ var tickOpts = opts.ticks;
+
+ // If we are forcing it to begin at 0, but 0 will already be rendered on the chart,
+ // do nothing since that would make the chart weird. If the user really wants a weird chart
+ // axis, they can manually override it
+ if (tickOpts.beginAtZero) {
+ var minSign = helpers$1.sign(me.min);
+ var maxSign = helpers$1.sign(me.max);
+
+ if (minSign < 0 && maxSign < 0) {
+ // move the top up to 0
+ me.max = 0;
+ } else if (minSign > 0 && maxSign > 0) {
+ // move the bottom down to 0
+ me.min = 0;
+ }
+ }
+
+ var setMin = tickOpts.min !== undefined || tickOpts.suggestedMin !== undefined;
+ var setMax = tickOpts.max !== undefined || tickOpts.suggestedMax !== undefined;
+
+ if (tickOpts.min !== undefined) {
+ me.min = tickOpts.min;
+ } else if (tickOpts.suggestedMin !== undefined) {
+ if (me.min === null) {
+ me.min = tickOpts.suggestedMin;
+ } else {
+ me.min = Math.min(me.min, tickOpts.suggestedMin);
+ }
+ }
+
+ if (tickOpts.max !== undefined) {
+ me.max = tickOpts.max;
+ } else if (tickOpts.suggestedMax !== undefined) {
+ if (me.max === null) {
+ me.max = tickOpts.suggestedMax;
+ } else {
+ me.max = Math.max(me.max, tickOpts.suggestedMax);
+ }
+ }
+
+ if (setMin !== setMax) {
+ // We set the min or the max but not both.
+ // So ensure that our range is good
+ // Inverted or 0 length range can happen when
+ // ticks.min is set, and no datasets are visible
+ if (me.min >= me.max) {
+ if (setMin) {
+ me.max = me.min + 1;
+ } else {
+ me.min = me.max - 1;
+ }
+ }
+ }
+
+ if (me.min === me.max) {
+ me.max++;
+
+ if (!tickOpts.beginAtZero) {
+ me.min--;
+ }
+ }
+ },
+
+ getTickLimit: function() {
+ var me = this;
+ var tickOpts = me.options.ticks;
+ var stepSize = tickOpts.stepSize;
+ var maxTicksLimit = tickOpts.maxTicksLimit;
+ var maxTicks;
+
+ if (stepSize) {
+ maxTicks = Math.ceil(me.max / stepSize) - Math.floor(me.min / stepSize) + 1;
+ } else {
+ maxTicks = me._computeTickLimit();
+ maxTicksLimit = maxTicksLimit || 11;
+ }
+
+ if (maxTicksLimit) {
+ maxTicks = Math.min(maxTicksLimit, maxTicks);
+ }
+
+ return maxTicks;
+ },
+
+ _computeTickLimit: function() {
+ return Number.POSITIVE_INFINITY;
+ },
+
+ handleDirectionalChanges: noop,
+
+ buildTicks: function() {
+ var me = this;
+ var opts = me.options;
+ var tickOpts = opts.ticks;
+
+ // Figure out what the max number of ticks we can support it is based on the size of
+ // the axis area. For now, we say that the minimum tick spacing in pixels must be 40
+ // We also limit the maximum number of ticks to 11 which gives a nice 10 squares on
+ // the graph. Make sure we always have at least 2 ticks
+ var maxTicks = me.getTickLimit();
+ maxTicks = Math.max(2, maxTicks);
+
+ var numericGeneratorOptions = {
+ maxTicks: maxTicks,
+ min: tickOpts.min,
+ max: tickOpts.max,
+ precision: tickOpts.precision,
+ stepSize: helpers$1.valueOrDefault(tickOpts.fixedStepSize, tickOpts.stepSize)
+ };
+ var ticks = me.ticks = generateTicks(numericGeneratorOptions, me);
+
+ me.handleDirectionalChanges();
+
+ // At this point, we need to update our max and min given the tick values since we have expanded the
+ // range of the scale
+ me.max = helpers$1.max(ticks);
+ me.min = helpers$1.min(ticks);
+
+ if (tickOpts.reverse) {
+ ticks.reverse();
+
+ me.start = me.max;
+ me.end = me.min;
+ } else {
+ me.start = me.min;
+ me.end = me.max;
+ }
+ },
+
+ convertTicksToLabels: function() {
+ var me = this;
+ me.ticksAsNumbers = me.ticks.slice();
+ me.zeroLineIndex = me.ticks.indexOf(0);
+
+ core_scale.prototype.convertTicksToLabels.call(me);
+ },
+
+ _configure: function() {
+ var me = this;
+ var ticks = me.getTicks();
+ var start = me.min;
+ var end = me.max;
+ var offset;
+
+ core_scale.prototype._configure.call(me);
+
+ if (me.options.offset && ticks.length) {
+ offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;
+ start -= offset;
+ end += offset;
+ }
+ me._startValue = start;
+ me._endValue = end;
+ me._valueRange = end - start;
+ }
+});
+
+var defaultConfig$1 = {
+ position: 'left',
+ ticks: {
+ callback: core_ticks.formatters.linear
+ }
+};
+
+var DEFAULT_MIN = 0;
+var DEFAULT_MAX = 1;
+
+function getOrCreateStack(stacks, stacked, meta) {
+ var key = [
+ meta.type,
+ // we have a separate stack for stack=undefined datasets when the opts.stacked is undefined
+ stacked === undefined && meta.stack === undefined ? meta.index : '',
+ meta.stack
+ ].join('.');
+
+ if (stacks[key] === undefined) {
+ stacks[key] = {
+ pos: [],
+ neg: []
+ };
+ }
+
+ return stacks[key];
+}
+
+function stackData(scale, stacks, meta, data) {
+ var opts = scale.options;
+ var stacked = opts.stacked;
+ var stack = getOrCreateStack(stacks, stacked, meta);
+ var pos = stack.pos;
+ var neg = stack.neg;
+ var ilen = data.length;
+ var i, value;
+
+ for (i = 0; i < ilen; ++i) {
+ value = scale._parseValue(data[i]);
+ if (isNaN(value.min) || isNaN(value.max) || meta.data[i].hidden) {
+ continue;
+ }
+
+ pos[i] = pos[i] || 0;
+ neg[i] = neg[i] || 0;
+
+ if (opts.relativePoints) {
+ pos[i] = 100;
+ } else if (value.min < 0 || value.max < 0) {
+ neg[i] += value.min;
+ } else {
+ pos[i] += value.max;
+ }
+ }
+}
+
+function updateMinMax(scale, meta, data) {
+ var ilen = data.length;
+ var i, value;
+
+ for (i = 0; i < ilen; ++i) {
+ value = scale._parseValue(data[i]);
+ if (isNaN(value.min) || isNaN(value.max) || meta.data[i].hidden) {
+ continue;
+ }
+
+ scale.min = Math.min(scale.min, value.min);
+ scale.max = Math.max(scale.max, value.max);
+ }
+}
+
+var scale_linear = scale_linearbase.extend({
+ determineDataLimits: function() {
+ var me = this;
+ var opts = me.options;
+ var chart = me.chart;
+ var datasets = chart.data.datasets;
+ var metasets = me._getMatchingVisibleMetas();
+ var hasStacks = opts.stacked;
+ var stacks = {};
+ var ilen = metasets.length;
+ var i, meta, data, values;
+
+ me.min = Number.POSITIVE_INFINITY;
+ me.max = Number.NEGATIVE_INFINITY;
+
+ if (hasStacks === undefined) {
+ for (i = 0; !hasStacks && i < ilen; ++i) {
+ meta = metasets[i];
+ hasStacks = meta.stack !== undefined;
+ }
+ }
+
+ for (i = 0; i < ilen; ++i) {
+ meta = metasets[i];
+ data = datasets[meta.index].data;
+ if (hasStacks) {
+ stackData(me, stacks, meta, data);
+ } else {
+ updateMinMax(me, meta, data);
+ }
+ }
+
+ helpers$1.each(stacks, function(stackValues) {
+ values = stackValues.pos.concat(stackValues.neg);
+ me.min = Math.min(me.min, helpers$1.min(values));
+ me.max = Math.max(me.max, helpers$1.max(values));
+ });
+
+ me.min = helpers$1.isFinite(me.min) && !isNaN(me.min) ? me.min : DEFAULT_MIN;
+ me.max = helpers$1.isFinite(me.max) && !isNaN(me.max) ? me.max : DEFAULT_MAX;
+
+ // Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero
+ me.handleTickRangeOptions();
+ },
+
+ // Returns the maximum number of ticks based on the scale dimension
+ _computeTickLimit: function() {
+ var me = this;
+ var tickFont;
+
+ if (me.isHorizontal()) {
+ return Math.ceil(me.width / 40);
+ }
+ tickFont = helpers$1.options._parseFont(me.options.ticks);
+ return Math.ceil(me.height / tickFont.lineHeight);
+ },
+
+ // Called after the ticks are built. We need
+ handleDirectionalChanges: function() {
+ if (!this.isHorizontal()) {
+ // We are in a vertical orientation. The top value is the highest. So reverse the array
+ this.ticks.reverse();
+ }
+ },
+
+ getLabelForIndex: function(index, datasetIndex) {
+ return this._getScaleLabel(this.chart.data.datasets[datasetIndex].data[index]);
+ },
+
+ // Utils
+ getPixelForValue: function(value) {
+ var me = this;
+ return me.getPixelForDecimal((+me.getRightValue(value) - me._startValue) / me._valueRange);
+ },
+
+ getValueForPixel: function(pixel) {
+ return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;
+ },
+
+ getPixelForTick: function(index) {
+ var ticks = this.ticksAsNumbers;
+ if (index < 0 || index > ticks.length - 1) {
+ return null;
+ }
+ return this.getPixelForValue(ticks[index]);
+ }
+});
+
+// INTERNAL: static default options, registered in src/index.js
+var _defaults$1 = defaultConfig$1;
+scale_linear._defaults = _defaults$1;
+
+var valueOrDefault$b = helpers$1.valueOrDefault;
+var log10 = helpers$1.math.log10;
+
+/**
+ * Generate a set of logarithmic ticks
+ * @param generationOptions the options used to generate the ticks
+ * @param dataRange the range of the data
+ * @returns {number[]} array of tick values
+ */
+function generateTicks$1(generationOptions, dataRange) {
+ var ticks = [];
+
+ var tickVal = valueOrDefault$b(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min))));
+
+ var endExp = Math.floor(log10(dataRange.max));
+ var endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));
+ var exp, significand;
+
+ if (tickVal === 0) {
+ exp = Math.floor(log10(dataRange.minNotZero));
+ significand = Math.floor(dataRange.minNotZero / Math.pow(10, exp));
+
+ ticks.push(tickVal);
+ tickVal = significand * Math.pow(10, exp);
+ } else {
+ exp = Math.floor(log10(tickVal));
+ significand = Math.floor(tickVal / Math.pow(10, exp));
+ }
+ var precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;
+
+ do {
+ ticks.push(tickVal);
+
+ ++significand;
+ if (significand === 10) {
+ significand = 1;
+ ++exp;
+ precision = exp >= 0 ? 1 : precision;
+ }
+
+ tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;
+ } while (exp < endExp || (exp === endExp && significand < endSignificand));
+
+ var lastTick = valueOrDefault$b(generationOptions.max, tickVal);
+ ticks.push(lastTick);
+
+ return ticks;
+}
+
+var defaultConfig$2 = {
+ position: 'left',
+
+ // label settings
+ ticks: {
+ callback: core_ticks.formatters.logarithmic
+ }
+};
+
+// TODO(v3): change this to positiveOrDefault
+function nonNegativeOrDefault(value, defaultValue) {
+ return helpers$1.isFinite(value) && value >= 0 ? value : defaultValue;
+}
+
+var scale_logarithmic = core_scale.extend({
+ determineDataLimits: function() {
+ var me = this;
+ var opts = me.options;
+ var chart = me.chart;
+ var datasets = chart.data.datasets;
+ var isHorizontal = me.isHorizontal();
+ function IDMatches(meta) {
+ return isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id;
+ }
+ var datasetIndex, meta, value, data, i, ilen;
+
+ // Calculate Range
+ me.min = Number.POSITIVE_INFINITY;
+ me.max = Number.NEGATIVE_INFINITY;
+ me.minNotZero = Number.POSITIVE_INFINITY;
+
+ var hasStacks = opts.stacked;
+ if (hasStacks === undefined) {
+ for (datasetIndex = 0; datasetIndex < datasets.length; datasetIndex++) {
+ meta = chart.getDatasetMeta(datasetIndex);
+ if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta) &&
+ meta.stack !== undefined) {
+ hasStacks = true;
+ break;
+ }
+ }
+ }
+
+ if (opts.stacked || hasStacks) {
+ var valuesPerStack = {};
+
+ for (datasetIndex = 0; datasetIndex < datasets.length; datasetIndex++) {
+ meta = chart.getDatasetMeta(datasetIndex);
+ var key = [
+ meta.type,
+ // we have a separate stack for stack=undefined datasets when the opts.stacked is undefined
+ ((opts.stacked === undefined && meta.stack === undefined) ? datasetIndex : ''),
+ meta.stack
+ ].join('.');
+
+ if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {
+ if (valuesPerStack[key] === undefined) {
+ valuesPerStack[key] = [];
+ }
+
+ data = datasets[datasetIndex].data;
+ for (i = 0, ilen = data.length; i < ilen; i++) {
+ var values = valuesPerStack[key];
+ value = me._parseValue(data[i]);
+ // invalid, hidden and negative values are ignored
+ if (isNaN(value.min) || isNaN(value.max) || meta.data[i].hidden || value.min < 0 || value.max < 0) {
+ continue;
+ }
+ values[i] = values[i] || 0;
+ values[i] += value.max;
+ }
+ }
+ }
+
+ helpers$1.each(valuesPerStack, function(valuesForType) {
+ if (valuesForType.length > 0) {
+ var minVal = helpers$1.min(valuesForType);
+ var maxVal = helpers$1.max(valuesForType);
+ me.min = Math.min(me.min, minVal);
+ me.max = Math.max(me.max, maxVal);
+ }
+ });
+
+ } else {
+ for (datasetIndex = 0; datasetIndex < datasets.length; datasetIndex++) {
+ meta = chart.getDatasetMeta(datasetIndex);
+ if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {
+ data = datasets[datasetIndex].data;
+ for (i = 0, ilen = data.length; i < ilen; i++) {
+ value = me._parseValue(data[i]);
+ // invalid, hidden and negative values are ignored
+ if (isNaN(value.min) || isNaN(value.max) || meta.data[i].hidden || value.min < 0 || value.max < 0) {
+ continue;
+ }
+
+ me.min = Math.min(value.min, me.min);
+ me.max = Math.max(value.max, me.max);
+
+ if (value.min !== 0) {
+ me.minNotZero = Math.min(value.min, me.minNotZero);
+ }
+ }
+ }
+ }
+ }
+
+ me.min = helpers$1.isFinite(me.min) ? me.min : null;
+ me.max = helpers$1.isFinite(me.max) ? me.max : null;
+ me.minNotZero = helpers$1.isFinite(me.minNotZero) ? me.minNotZero : null;
+
+ // Common base implementation to handle ticks.min, ticks.max
+ this.handleTickRangeOptions();
+ },
+
+ handleTickRangeOptions: function() {
+ var me = this;
+ var tickOpts = me.options.ticks;
+ var DEFAULT_MIN = 1;
+ var DEFAULT_MAX = 10;
+
+ me.min = nonNegativeOrDefault(tickOpts.min, me.min);
+ me.max = nonNegativeOrDefault(tickOpts.max, me.max);
+
+ if (me.min === me.max) {
+ if (me.min !== 0 && me.min !== null) {
+ me.min = Math.pow(10, Math.floor(log10(me.min)) - 1);
+ me.max = Math.pow(10, Math.floor(log10(me.max)) + 1);
+ } else {
+ me.min = DEFAULT_MIN;
+ me.max = DEFAULT_MAX;
+ }
+ }
+ if (me.min === null) {
+ me.min = Math.pow(10, Math.floor(log10(me.max)) - 1);
+ }
+ if (me.max === null) {
+ me.max = me.min !== 0
+ ? Math.pow(10, Math.floor(log10(me.min)) + 1)
+ : DEFAULT_MAX;
+ }
+ if (me.minNotZero === null) {
+ if (me.min > 0) {
+ me.minNotZero = me.min;
+ } else if (me.max < 1) {
+ me.minNotZero = Math.pow(10, Math.floor(log10(me.max)));
+ } else {
+ me.minNotZero = DEFAULT_MIN;
+ }
+ }
+ },
+
+ buildTicks: function() {
+ var me = this;
+ var tickOpts = me.options.ticks;
+ var reverse = !me.isHorizontal();
+
+ var generationOptions = {
+ min: nonNegativeOrDefault(tickOpts.min),
+ max: nonNegativeOrDefault(tickOpts.max)
+ };
+ var ticks = me.ticks = generateTicks$1(generationOptions, me);
+
+ // At this point, we need to update our max and min given the tick values since we have expanded the
+ // range of the scale
+ me.max = helpers$1.max(ticks);
+ me.min = helpers$1.min(ticks);
+
+ if (tickOpts.reverse) {
+ reverse = !reverse;
+ me.start = me.max;
+ me.end = me.min;
+ } else {
+ me.start = me.min;
+ me.end = me.max;
+ }
+ if (reverse) {
+ ticks.reverse();
+ }
+ },
+
+ convertTicksToLabels: function() {
+ this.tickValues = this.ticks.slice();
+
+ core_scale.prototype.convertTicksToLabels.call(this);
+ },
+
+ // Get the correct tooltip label
+ getLabelForIndex: function(index, datasetIndex) {
+ return this._getScaleLabel(this.chart.data.datasets[datasetIndex].data[index]);
+ },
+
+ getPixelForTick: function(index) {
+ var ticks = this.tickValues;
+ if (index < 0 || index > ticks.length - 1) {
+ return null;
+ }
+ return this.getPixelForValue(ticks[index]);
+ },
+
+ /**
+ * Returns the value of the first tick.
+ * @param {number} value - The minimum not zero value.
+ * @return {number} The first tick value.
+ * @private
+ */
+ _getFirstTickValue: function(value) {
+ var exp = Math.floor(log10(value));
+ var significand = Math.floor(value / Math.pow(10, exp));
+
+ return significand * Math.pow(10, exp);
+ },
+
+ _configure: function() {
+ var me = this;
+ var start = me.min;
+ var offset = 0;
+
+ core_scale.prototype._configure.call(me);
+
+ if (start === 0) {
+ start = me._getFirstTickValue(me.minNotZero);
+ offset = valueOrDefault$b(me.options.ticks.fontSize, core_defaults.global.defaultFontSize) / me._length;
+ }
+
+ me._startValue = log10(start);
+ me._valueOffset = offset;
+ me._valueRange = (log10(me.max) - log10(start)) / (1 - offset);
+ },
+
+ getPixelForValue: function(value) {
+ var me = this;
+ var decimal = 0;
+
+ value = +me.getRightValue(value);
+
+ if (value > me.min && value > 0) {
+ decimal = (log10(value) - me._startValue) / me._valueRange + me._valueOffset;
+ }
+ return me.getPixelForDecimal(decimal);
+ },
+
+ getValueForPixel: function(pixel) {
+ var me = this;
+ var decimal = me.getDecimalForPixel(pixel);
+ return decimal === 0 && me.min === 0
+ ? 0
+ : Math.pow(10, me._startValue + (decimal - me._valueOffset) * me._valueRange);
+ }
+});
+
+// INTERNAL: static default options, registered in src/index.js
+var _defaults$2 = defaultConfig$2;
+scale_logarithmic._defaults = _defaults$2;
+
+var valueOrDefault$c = helpers$1.valueOrDefault;
+var valueAtIndexOrDefault$1 = helpers$1.valueAtIndexOrDefault;
+var resolve$4 = helpers$1.options.resolve;
+
+var defaultConfig$3 = {
+ display: true,
+
+ // Boolean - Whether to animate scaling the chart from the centre
+ animate: true,
+ position: 'chartArea',
+
+ angleLines: {
+ display: true,
+ color: 'rgba(0,0,0,0.1)',
+ lineWidth: 1,
+ borderDash: [],
+ borderDashOffset: 0.0
+ },
+
+ gridLines: {
+ circular: false
+ },
+
+ // label settings
+ ticks: {
+ // Boolean - Show a backdrop to the scale label
+ showLabelBackdrop: true,
+
+ // String - The colour of the label backdrop
+ backdropColor: 'rgba(255,255,255,0.75)',
+
+ // Number - The backdrop padding above & below the label in pixels
+ backdropPaddingY: 2,
+
+ // Number - The backdrop padding to the side of the label in pixels
+ backdropPaddingX: 2,
+
+ callback: core_ticks.formatters.linear
+ },
+
+ pointLabels: {
+ // Boolean - if true, show point labels
+ display: true,
+
+ // Number - Point label font size in pixels
+ fontSize: 10,
+
+ // Function - Used to convert point labels
+ callback: function(label) {
+ return label;
+ }
+ }
+};
+
+function getTickBackdropHeight(opts) {
+ var tickOpts = opts.ticks;
+
+ if (tickOpts.display && opts.display) {
+ return valueOrDefault$c(tickOpts.fontSize, core_defaults.global.defaultFontSize) + tickOpts.backdropPaddingY * 2;
+ }
+ return 0;
+}
+
+function measureLabelSize(ctx, lineHeight, label) {
+ if (helpers$1.isArray(label)) {
+ return {
+ w: helpers$1.longestText(ctx, ctx.font, label),
+ h: label.length * lineHeight
+ };
+ }
+
+ return {
+ w: ctx.measureText(label).width,
+ h: lineHeight
+ };
+}
+
+function determineLimits(angle, pos, size, min, max) {
+ if (angle === min || angle === max) {
+ return {
+ start: pos - (size / 2),
+ end: pos + (size / 2)
+ };
+ } else if (angle < min || angle > max) {
+ return {
+ start: pos - size,
+ end: pos
+ };
+ }
+
+ return {
+ start: pos,
+ end: pos + size
+ };
+}
+
+/**
+ * Helper function to fit a radial linear scale with point labels
+ */
+function fitWithPointLabels(scale) {
+
+ // Right, this is really confusing and there is a lot of maths going on here
+ // The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9
+ //
+ // Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif
+ //
+ // Solution:
+ //
+ // We assume the radius of the polygon is half the size of the canvas at first
+ // at each index we check if the text overlaps.
+ //
+ // Where it does, we store that angle and that index.
+ //
+ // After finding the largest index and angle we calculate how much we need to remove
+ // from the shape radius to move the point inwards by that x.
+ //
+ // We average the left and right distances to get the maximum shape radius that can fit in the box
+ // along with labels.
+ //
+ // Once we have that, we can find the centre point for the chart, by taking the x text protrusion
+ // on each side, removing that from the size, halving it and adding the left x protrusion width.
+ //
+ // This will mean we have a shape fitted to the canvas, as large as it can be with the labels
+ // and position it in the most space efficient manner
+ //
+ // https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif
+
+ var plFont = helpers$1.options._parseFont(scale.options.pointLabels);
+
+ // Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.
+ // Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points
+ var furthestLimits = {
+ l: 0,
+ r: scale.width,
+ t: 0,
+ b: scale.height - scale.paddingTop
+ };
+ var furthestAngles = {};
+ var i, textSize, pointPosition;
+
+ scale.ctx.font = plFont.string;
+ scale._pointLabelSizes = [];
+
+ var valueCount = scale.chart.data.labels.length;
+ for (i = 0; i < valueCount; i++) {
+ pointPosition = scale.getPointPosition(i, scale.drawingArea + 5);
+ textSize = measureLabelSize(scale.ctx, plFont.lineHeight, scale.pointLabels[i]);
+ scale._pointLabelSizes[i] = textSize;
+
+ // Add quarter circle to make degree 0 mean top of circle
+ var angleRadians = scale.getIndexAngle(i);
+ var angle = helpers$1.toDegrees(angleRadians) % 360;
+ var hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);
+ var vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);
+
+ if (hLimits.start < furthestLimits.l) {
+ furthestLimits.l = hLimits.start;
+ furthestAngles.l = angleRadians;
+ }
+
+ if (hLimits.end > furthestLimits.r) {
+ furthestLimits.r = hLimits.end;
+ furthestAngles.r = angleRadians;
+ }
+
+ if (vLimits.start < furthestLimits.t) {
+ furthestLimits.t = vLimits.start;
+ furthestAngles.t = angleRadians;
+ }
+
+ if (vLimits.end > furthestLimits.b) {
+ furthestLimits.b = vLimits.end;
+ furthestAngles.b = angleRadians;
+ }
+ }
+
+ scale.setReductions(scale.drawingArea, furthestLimits, furthestAngles);
+}
+
+function getTextAlignForAngle(angle) {
+ if (angle === 0 || angle === 180) {
+ return 'center';
+ } else if (angle < 180) {
+ return 'left';
+ }
+
+ return 'right';
+}
+
+function fillText(ctx, text, position, lineHeight) {
+ var y = position.y + lineHeight / 2;
+ var i, ilen;
+
+ if (helpers$1.isArray(text)) {
+ for (i = 0, ilen = text.length; i < ilen; ++i) {
+ ctx.fillText(text[i], position.x, y);
+ y += lineHeight;
+ }
+ } else {
+ ctx.fillText(text, position.x, y);
+ }
+}
+
+function adjustPointPositionForLabelHeight(angle, textSize, position) {
+ if (angle === 90 || angle === 270) {
+ position.y -= (textSize.h / 2);
+ } else if (angle > 270 || angle < 90) {
+ position.y -= textSize.h;
+ }
+}
+
+function drawPointLabels(scale) {
+ var ctx = scale.ctx;
+ var opts = scale.options;
+ var pointLabelOpts = opts.pointLabels;
+ var tickBackdropHeight = getTickBackdropHeight(opts);
+ var outerDistance = scale.getDistanceFromCenterForValue(opts.ticks.reverse ? scale.min : scale.max);
+ var plFont = helpers$1.options._parseFont(pointLabelOpts);
+
+ ctx.save();
+
+ ctx.font = plFont.string;
+ ctx.textBaseline = 'middle';
+
+ for (var i = scale.chart.data.labels.length - 1; i >= 0; i--) {
+ // Extra pixels out for some label spacing
+ var extra = (i === 0 ? tickBackdropHeight / 2 : 0);
+ var pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + 5);
+
+ // Keep this in loop since we may support array properties here
+ var pointLabelFontColor = valueAtIndexOrDefault$1(pointLabelOpts.fontColor, i, core_defaults.global.defaultFontColor);
+ ctx.fillStyle = pointLabelFontColor;
+
+ var angleRadians = scale.getIndexAngle(i);
+ var angle = helpers$1.toDegrees(angleRadians);
+ ctx.textAlign = getTextAlignForAngle(angle);
+ adjustPointPositionForLabelHeight(angle, scale._pointLabelSizes[i], pointLabelPosition);
+ fillText(ctx, scale.pointLabels[i], pointLabelPosition, plFont.lineHeight);
+ }
+ ctx.restore();
+}
+
+function drawRadiusLine(scale, gridLineOpts, radius, index) {
+ var ctx = scale.ctx;
+ var circular = gridLineOpts.circular;
+ var valueCount = scale.chart.data.labels.length;
+ var lineColor = valueAtIndexOrDefault$1(gridLineOpts.color, index - 1);
+ var lineWidth = valueAtIndexOrDefault$1(gridLineOpts.lineWidth, index - 1);
+ var pointPosition;
+
+ if ((!circular && !valueCount) || !lineColor || !lineWidth) {
+ return;
+ }
+
+ ctx.save();
+ ctx.strokeStyle = lineColor;
+ ctx.lineWidth = lineWidth;
+ if (ctx.setLineDash) {
+ ctx.setLineDash(gridLineOpts.borderDash || []);
+ ctx.lineDashOffset = gridLineOpts.borderDashOffset || 0.0;
+ }
+
+ ctx.beginPath();
+ if (circular) {
+ // Draw circular arcs between the points
+ ctx.arc(scale.xCenter, scale.yCenter, radius, 0, Math.PI * 2);
+ } else {
+ // Draw straight lines connecting each index
+ pointPosition = scale.getPointPosition(0, radius);
+ ctx.moveTo(pointPosition.x, pointPosition.y);
+
+ for (var i = 1; i < valueCount; i++) {
+ pointPosition = scale.getPointPosition(i, radius);
+ ctx.lineTo(pointPosition.x, pointPosition.y);
+ }
+ }
+ ctx.closePath();
+ ctx.stroke();
+ ctx.restore();
+}
+
+function numberOrZero(param) {
+ return helpers$1.isNumber(param) ? param : 0;
+}
+
+var scale_radialLinear = scale_linearbase.extend({
+ setDimensions: function() {
+ var me = this;
+
+ // Set the unconstrained dimension before label rotation
+ me.width = me.maxWidth;
+ me.height = me.maxHeight;
+ me.paddingTop = getTickBackdropHeight(me.options) / 2;
+ me.xCenter = Math.floor(me.width / 2);
+ me.yCenter = Math.floor((me.height - me.paddingTop) / 2);
+ me.drawingArea = Math.min(me.height - me.paddingTop, me.width) / 2;
+ },
+
+ determineDataLimits: function() {
+ var me = this;
+ var chart = me.chart;
+ var min = Number.POSITIVE_INFINITY;
+ var max = Number.NEGATIVE_INFINITY;
+
+ helpers$1.each(chart.data.datasets, function(dataset, datasetIndex) {
+ if (chart.isDatasetVisible(datasetIndex)) {
+ var meta = chart.getDatasetMeta(datasetIndex);
+
+ helpers$1.each(dataset.data, function(rawValue, index) {
+ var value = +me.getRightValue(rawValue);
+ if (isNaN(value) || meta.data[index].hidden) {
+ return;
+ }
+
+ min = Math.min(value, min);
+ max = Math.max(value, max);
+ });
+ }
+ });
+
+ me.min = (min === Number.POSITIVE_INFINITY ? 0 : min);
+ me.max = (max === Number.NEGATIVE_INFINITY ? 0 : max);
+
+ // Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero
+ me.handleTickRangeOptions();
+ },
+
+ // Returns the maximum number of ticks based on the scale dimension
+ _computeTickLimit: function() {
+ return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));
+ },
+
+ convertTicksToLabels: function() {
+ var me = this;
+
+ scale_linearbase.prototype.convertTicksToLabels.call(me);
+
+ // Point labels
+ me.pointLabels = me.chart.data.labels.map(function() {
+ var label = helpers$1.callback(me.options.pointLabels.callback, arguments, me);
+ return label || label === 0 ? label : '';
+ });
+ },
+
+ getLabelForIndex: function(index, datasetIndex) {
+ return +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);
+ },
+
+ fit: function() {
+ var me = this;
+ var opts = me.options;
+
+ if (opts.display && opts.pointLabels.display) {
+ fitWithPointLabels(me);
+ } else {
+ me.setCenterPoint(0, 0, 0, 0);
+ }
+ },
+
+ /**
+ * Set radius reductions and determine new radius and center point
+ * @private
+ */
+ setReductions: function(largestPossibleRadius, furthestLimits, furthestAngles) {
+ var me = this;
+ var radiusReductionLeft = furthestLimits.l / Math.sin(furthestAngles.l);
+ var radiusReductionRight = Math.max(furthestLimits.r - me.width, 0) / Math.sin(furthestAngles.r);
+ var radiusReductionTop = -furthestLimits.t / Math.cos(furthestAngles.t);
+ var radiusReductionBottom = -Math.max(furthestLimits.b - (me.height - me.paddingTop), 0) / Math.cos(furthestAngles.b);
+
+ radiusReductionLeft = numberOrZero(radiusReductionLeft);
+ radiusReductionRight = numberOrZero(radiusReductionRight);
+ radiusReductionTop = numberOrZero(radiusReductionTop);
+ radiusReductionBottom = numberOrZero(radiusReductionBottom);
+
+ me.drawingArea = Math.min(
+ Math.floor(largestPossibleRadius - (radiusReductionLeft + radiusReductionRight) / 2),
+ Math.floor(largestPossibleRadius - (radiusReductionTop + radiusReductionBottom) / 2));
+ me.setCenterPoint(radiusReductionLeft, radiusReductionRight, radiusReductionTop, radiusReductionBottom);
+ },
+
+ setCenterPoint: function(leftMovement, rightMovement, topMovement, bottomMovement) {
+ var me = this;
+ var maxRight = me.width - rightMovement - me.drawingArea;
+ var maxLeft = leftMovement + me.drawingArea;
+ var maxTop = topMovement + me.drawingArea;
+ var maxBottom = (me.height - me.paddingTop) - bottomMovement - me.drawingArea;
+
+ me.xCenter = Math.floor(((maxLeft + maxRight) / 2) + me.left);
+ me.yCenter = Math.floor(((maxTop + maxBottom) / 2) + me.top + me.paddingTop);
+ },
+
+ getIndexAngle: function(index) {
+ var chart = this.chart;
+ var angleMultiplier = 360 / chart.data.labels.length;
+ var options = chart.options || {};
+ var startAngle = options.startAngle || 0;
+
+ // Start from the top instead of right, so remove a quarter of the circle
+ var angle = (index * angleMultiplier + startAngle) % 360;
+
+ return (angle < 0 ? angle + 360 : angle) * Math.PI * 2 / 360;
+ },
+
+ getDistanceFromCenterForValue: function(value) {
+ var me = this;
+
+ if (helpers$1.isNullOrUndef(value)) {
+ return NaN;
+ }
+
+ // Take into account half font size + the yPadding of the top value
+ var scalingFactor = me.drawingArea / (me.max - me.min);
+ if (me.options.ticks.reverse) {
+ return (me.max - value) * scalingFactor;
+ }
+ return (value - me.min) * scalingFactor;
+ },
+
+ getPointPosition: function(index, distanceFromCenter) {
+ var me = this;
+ var thisAngle = me.getIndexAngle(index) - (Math.PI / 2);
+ return {
+ x: Math.cos(thisAngle) * distanceFromCenter + me.xCenter,
+ y: Math.sin(thisAngle) * distanceFromCenter + me.yCenter
+ };
+ },
+
+ getPointPositionForValue: function(index, value) {
+ return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));
+ },
+
+ getBasePosition: function(index) {
+ var me = this;
+ var min = me.min;
+ var max = me.max;
+
+ return me.getPointPositionForValue(index || 0,
+ me.beginAtZero ? 0 :
+ min < 0 && max < 0 ? max :
+ min > 0 && max > 0 ? min :
+ 0);
+ },
+
+ /**
+ * @private
+ */
+ _drawGrid: function() {
+ var me = this;
+ var ctx = me.ctx;
+ var opts = me.options;
+ var gridLineOpts = opts.gridLines;
+ var angleLineOpts = opts.angleLines;
+ var lineWidth = valueOrDefault$c(angleLineOpts.lineWidth, gridLineOpts.lineWidth);
+ var lineColor = valueOrDefault$c(angleLineOpts.color, gridLineOpts.color);
+ var i, offset, position;
+
+ if (opts.pointLabels.display) {
+ drawPointLabels(me);
+ }
+
+ if (gridLineOpts.display) {
+ helpers$1.each(me.ticks, function(label, index) {
+ if (index !== 0) {
+ offset = me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]);
+ drawRadiusLine(me, gridLineOpts, offset, index);
+ }
+ });
+ }
+
+ if (angleLineOpts.display && lineWidth && lineColor) {
+ ctx.save();
+ ctx.lineWidth = lineWidth;
+ ctx.strokeStyle = lineColor;
+ if (ctx.setLineDash) {
+ ctx.setLineDash(resolve$4([angleLineOpts.borderDash, gridLineOpts.borderDash, []]));
+ ctx.lineDashOffset = resolve$4([angleLineOpts.borderDashOffset, gridLineOpts.borderDashOffset, 0.0]);
+ }
+
+ for (i = me.chart.data.labels.length - 1; i >= 0; i--) {
+ offset = me.getDistanceFromCenterForValue(opts.ticks.reverse ? me.min : me.max);
+ position = me.getPointPosition(i, offset);
+ ctx.beginPath();
+ ctx.moveTo(me.xCenter, me.yCenter);
+ ctx.lineTo(position.x, position.y);
+ ctx.stroke();
+ }
+
+ ctx.restore();
+ }
+ },
+
+ /**
+ * @private
+ */
+ _drawLabels: function() {
+ var me = this;
+ var ctx = me.ctx;
+ var opts = me.options;
+ var tickOpts = opts.ticks;
+
+ if (!tickOpts.display) {
+ return;
+ }
+
+ var startAngle = me.getIndexAngle(0);
+ var tickFont = helpers$1.options._parseFont(tickOpts);
+ var tickFontColor = valueOrDefault$c(tickOpts.fontColor, core_defaults.global.defaultFontColor);
+ var offset, width;
+
+ ctx.save();
+ ctx.font = tickFont.string;
+ ctx.translate(me.xCenter, me.yCenter);
+ ctx.rotate(startAngle);
+ ctx.textAlign = 'center';
+ ctx.textBaseline = 'middle';
+
+ helpers$1.each(me.ticks, function(label, index) {
+ if (index === 0 && !tickOpts.reverse) {
+ return;
+ }
+
+ offset = me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]);
+
+ if (tickOpts.showLabelBackdrop) {
+ width = ctx.measureText(label).width;
+ ctx.fillStyle = tickOpts.backdropColor;
+
+ ctx.fillRect(
+ -width / 2 - tickOpts.backdropPaddingX,
+ -offset - tickFont.size / 2 - tickOpts.backdropPaddingY,
+ width + tickOpts.backdropPaddingX * 2,
+ tickFont.size + tickOpts.backdropPaddingY * 2
+ );
+ }
+
+ ctx.fillStyle = tickFontColor;
+ ctx.fillText(label, 0, -offset);
+ });
+
+ ctx.restore();
+ },
+
+ /**
+ * @private
+ */
+ _drawTitle: helpers$1.noop
+});
+
+// INTERNAL: static default options, registered in src/index.js
+var _defaults$3 = defaultConfig$3;
+scale_radialLinear._defaults = _defaults$3;
+
+var deprecated$1 = helpers$1._deprecated;
+var resolve$5 = helpers$1.options.resolve;
+var valueOrDefault$d = helpers$1.valueOrDefault;
+
+// Integer constants are from the ES6 spec.
+var MIN_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991;
+var MAX_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
+
+var INTERVALS = {
+ millisecond: {
+ common: true,
+ size: 1,
+ steps: 1000
+ },
+ second: {
+ common: true,
+ size: 1000,
+ steps: 60
+ },
+ minute: {
+ common: true,
+ size: 60000,
+ steps: 60
+ },
+ hour: {
+ common: true,
+ size: 3600000,
+ steps: 24
+ },
+ day: {
+ common: true,
+ size: 86400000,
+ steps: 30
+ },
+ week: {
+ common: false,
+ size: 604800000,
+ steps: 4
+ },
+ month: {
+ common: true,
+ size: 2.628e9,
+ steps: 12
+ },
+ quarter: {
+ common: false,
+ size: 7.884e9,
+ steps: 4
+ },
+ year: {
+ common: true,
+ size: 3.154e10
+ }
+};
+
+var UNITS = Object.keys(INTERVALS);
+
+function sorter(a, b) {
+ return a - b;
+}
+
+function arrayUnique(items) {
+ var hash = {};
+ var out = [];
+ var i, ilen, item;
+
+ for (i = 0, ilen = items.length; i < ilen; ++i) {
+ item = items[i];
+ if (!hash[item]) {
+ hash[item] = true;
+ out.push(item);
+ }
+ }
+
+ return out;
+}
+
+function getMin(options) {
+ return helpers$1.valueOrDefault(options.time.min, options.ticks.min);
+}
+
+function getMax(options) {
+ return helpers$1.valueOrDefault(options.time.max, options.ticks.max);
+}
+
+/**
+ * Returns an array of {time, pos} objects used to interpolate a specific `time` or position
+ * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is
+ * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other
+ * extremity (left + width or top + height). Note that it would be more optimized to directly
+ * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need
+ * to create the lookup table. The table ALWAYS contains at least two items: min and max.
+ *
+ * @param {number[]} timestamps - timestamps sorted from lowest to highest.
+ * @param {string} distribution - If 'linear', timestamps will be spread linearly along the min
+ * and max range, so basically, the table will contains only two items: {min, 0} and {max, 1}.
+ * If 'series', timestamps will be positioned at the same distance from each other. In this
+ * case, only timestamps that break the time linearity are registered, meaning that in the
+ * best case, all timestamps are linear, the table contains only min and max.
+ */
+function buildLookupTable(timestamps, min, max, distribution) {
+ if (distribution === 'linear' || !timestamps.length) {
+ return [
+ {time: min, pos: 0},
+ {time: max, pos: 1}
+ ];
+ }
+
+ var table = [];
+ var items = [min];
+ var i, ilen, prev, curr, next;
+
+ for (i = 0, ilen = timestamps.length; i < ilen; ++i) {
+ curr = timestamps[i];
+ if (curr > min && curr < max) {
+ items.push(curr);
+ }
+ }
+
+ items.push(max);
+
+ for (i = 0, ilen = items.length; i < ilen; ++i) {
+ next = items[i + 1];
+ prev = items[i - 1];
+ curr = items[i];
+
+ // only add points that breaks the scale linearity
+ if (prev === undefined || next === undefined || Math.round((next + prev) / 2) !== curr) {
+ table.push({time: curr, pos: i / (ilen - 1)});
+ }
+ }
+
+ return table;
+}
+
+// @see adapted from https://www.anujgakhar.com/2014/03/01/binary-search-in-javascript/
+function lookup(table, key, value) {
+ var lo = 0;
+ var hi = table.length - 1;
+ var mid, i0, i1;
+
+ while (lo >= 0 && lo <= hi) {
+ mid = (lo + hi) >> 1;
+ i0 = table[mid - 1] || null;
+ i1 = table[mid];
+
+ if (!i0) {
+ // given value is outside table (before first item)
+ return {lo: null, hi: i1};
+ } else if (i1[key] < value) {
+ lo = mid + 1;
+ } else if (i0[key] > value) {
+ hi = mid - 1;
+ } else {
+ return {lo: i0, hi: i1};
+ }
+ }
+
+ // given value is outside table (after last item)
+ return {lo: i1, hi: null};
+}
+
+/**
+ * Linearly interpolates the given source `value` using the table items `skey` values and
+ * returns the associated `tkey` value. For example, interpolate(table, 'time', 42, 'pos')
+ * returns the position for a timestamp equal to 42. If value is out of bounds, values at
+ * index [0, 1] or [n - 1, n] are used for the interpolation.
+ */
+function interpolate$1(table, skey, sval, tkey) {
+ var range = lookup(table, skey, sval);
+
+ // Note: the lookup table ALWAYS contains at least 2 items (min and max)
+ var prev = !range.lo ? table[0] : !range.hi ? table[table.length - 2] : range.lo;
+ var next = !range.lo ? table[1] : !range.hi ? table[table.length - 1] : range.hi;
+
+ var span = next[skey] - prev[skey];
+ var ratio = span ? (sval - prev[skey]) / span : 0;
+ var offset = (next[tkey] - prev[tkey]) * ratio;
+
+ return prev[tkey] + offset;
+}
+
+function toTimestamp(scale, input) {
+ var adapter = scale._adapter;
+ var options = scale.options.time;
+ var parser = options.parser;
+ var format = parser || options.format;
+ var value = input;
+
+ if (typeof parser === 'function') {
+ value = parser(value);
+ }
+
+ // Only parse if its not a timestamp already
+ if (!helpers$1.isFinite(value)) {
+ value = typeof format === 'string'
+ ? adapter.parse(value, format)
+ : adapter.parse(value);
+ }
+
+ if (value !== null) {
+ return +value;
+ }
+
+ // Labels are in an incompatible format and no `parser` has been provided.
+ // The user might still use the deprecated `format` option for parsing.
+ if (!parser && typeof format === 'function') {
+ value = format(input);
+
+ // `format` could return something else than a timestamp, if so, parse it
+ if (!helpers$1.isFinite(value)) {
+ value = adapter.parse(value);
+ }
+ }
+
+ return value;
+}
+
+function parse(scale, input) {
+ if (helpers$1.isNullOrUndef(input)) {
+ return null;
+ }
+
+ var options = scale.options.time;
+ var value = toTimestamp(scale, scale.getRightValue(input));
+ if (value === null) {
+ return value;
+ }
+
+ if (options.round) {
+ value = +scale._adapter.startOf(value, options.round);
+ }
+
+ return value;
+}
+
+/**
+ * Figures out what unit results in an appropriate number of auto-generated ticks
+ */
+function determineUnitForAutoTicks(minUnit, min, max, capacity) {
+ var ilen = UNITS.length;
+ var i, interval, factor;
+
+ for (i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {
+ interval = INTERVALS[UNITS[i]];
+ factor = interval.steps ? interval.steps : MAX_INTEGER;
+
+ if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {
+ return UNITS[i];
+ }
+ }
+
+ return UNITS[ilen - 1];
+}
+
+/**
+ * Figures out what unit to format a set of ticks with
+ */
+function determineUnitForFormatting(scale, numTicks, minUnit, min, max) {
+ var i, unit;
+
+ for (i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {
+ unit = UNITS[i];
+ if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {
+ return unit;
+ }
+ }
+
+ return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];
+}
+
+function determineMajorUnit(unit) {
+ for (var i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {
+ if (INTERVALS[UNITS[i]].common) {
+ return UNITS[i];
+ }
+ }
+}
+
+/**
+ * Generates a maximum of `capacity` timestamps between min and max, rounded to the
+ * `minor` unit using the given scale time `options`.
+ * Important: this method can return ticks outside the min and max range, it's the
+ * responsibility of the calling code to clamp values if needed.
+ */
+function generate(scale, min, max, capacity) {
+ var adapter = scale._adapter;
+ var options = scale.options;
+ var timeOpts = options.time;
+ var minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, capacity);
+ var stepSize = resolve$5([timeOpts.stepSize, timeOpts.unitStepSize, 1]);
+ var weekday = minor === 'week' ? timeOpts.isoWeekday : false;
+ var first = min;
+ var ticks = [];
+ var time;
+
+ // For 'week' unit, handle the first day of week option
+ if (weekday) {
+ first = +adapter.startOf(first, 'isoWeek', weekday);
+ }
+
+ // Align first ticks on unit
+ first = +adapter.startOf(first, weekday ? 'day' : minor);
+
+ // Prevent browser from freezing in case user options request millions of milliseconds
+ if (adapter.diff(max, min, minor) > 100000 * stepSize) {
+ throw min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor;
+ }
+
+ for (time = first; time < max; time = +adapter.add(time, stepSize, minor)) {
+ ticks.push(time);
+ }
+
+ if (time === max || options.bounds === 'ticks') {
+ ticks.push(time);
+ }
+
+ return ticks;
+}
+
+/**
+ * Returns the start and end offsets from edges in the form of {start, end}
+ * where each value is a relative width to the scale and ranges between 0 and 1.
+ * They add extra margins on the both sides by scaling down the original scale.
+ * Offsets are added when the `offset` option is true.
+ */
+function computeOffsets(table, ticks, min, max, options) {
+ var start = 0;
+ var end = 0;
+ var first, last;
+
+ if (options.offset && ticks.length) {
+ first = interpolate$1(table, 'time', ticks[0], 'pos');
+ if (ticks.length === 1) {
+ start = 1 - first;
+ } else {
+ start = (interpolate$1(table, 'time', ticks[1], 'pos') - first) / 2;
+ }
+ last = interpolate$1(table, 'time', ticks[ticks.length - 1], 'pos');
+ if (ticks.length === 1) {
+ end = last;
+ } else {
+ end = (last - interpolate$1(table, 'time', ticks[ticks.length - 2], 'pos')) / 2;
+ }
+ }
+
+ return {start: start, end: end, factor: 1 / (start + 1 + end)};
+}
+
+function setMajorTicks(scale, ticks, map, majorUnit) {
+ var adapter = scale._adapter;
+ var first = +adapter.startOf(ticks[0].value, majorUnit);
+ var last = ticks[ticks.length - 1].value;
+ var major, index;
+
+ for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {
+ index = map[major];
+ if (index >= 0) {
+ ticks[index].major = true;
+ }
+ }
+ return ticks;
+}
+
+function ticksFromTimestamps(scale, values, majorUnit) {
+ var ticks = [];
+ var map = {};
+ var ilen = values.length;
+ var i, value;
+
+ for (i = 0; i < ilen; ++i) {
+ value = values[i];
+ map[value] = i;
+
+ ticks.push({
+ value: value,
+ major: false
+ });
+ }
+
+ // We set the major ticks separately from the above loop because calling startOf for every tick
+ // is expensive when there is a large number of ticks
+ return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);
+}
+
+var defaultConfig$4 = {
+ position: 'bottom',
+
+ /**
+ * Data distribution along the scale:
+ * - 'linear': data are spread according to their time (distances can vary),
+ * - 'series': data are spread at the same distance from each other.
+ * @see https://github.com/chartjs/Chart.js/pull/4507
+ * @since 2.7.0
+ */
+ distribution: 'linear',
+
+ /**
+ * Scale boundary strategy (bypassed by min/max time options)
+ * - `data`: make sure data are fully visible, ticks outside are removed
+ * - `ticks`: make sure ticks are fully visible, data outside are truncated
+ * @see https://github.com/chartjs/Chart.js/pull/4556
+ * @since 2.7.0
+ */
+ bounds: 'data',
+
+ adapters: {},
+ time: {
+ parser: false, // false == a pattern string from https://momentjs.com/docs/#/parsing/string-format/ or a custom callback that converts its argument to a moment
+ unit: false, // false == automatic or override with week, month, year, etc.
+ round: false, // none, or override with week, month, year, etc.
+ displayFormat: false, // DEPRECATED
+ isoWeekday: false, // override week start day - see https://momentjs.com/docs/#/get-set/iso-weekday/
+ minUnit: 'millisecond',
+ displayFormats: {}
+ },
+ ticks: {
+ autoSkip: false,
+
+ /**
+ * Ticks generation input values:
+ * - 'auto': generates "optimal" ticks based on scale size and time options.
+ * - 'data': generates ticks from data (including labels from data {t|x|y} objects).
+ * - 'labels': generates ticks from user given `data.labels` values ONLY.
+ * @see https://github.com/chartjs/Chart.js/pull/4507
+ * @since 2.7.0
+ */
+ source: 'auto',
+
+ major: {
+ enabled: false
+ }
+ }
+};
+
+var scale_time = core_scale.extend({
+ initialize: function() {
+ this.mergeTicksOptions();
+ core_scale.prototype.initialize.call(this);
+ },
+
+ update: function() {
+ var me = this;
+ var options = me.options;
+ var time = options.time || (options.time = {});
+ var adapter = me._adapter = new core_adapters._date(options.adapters.date);
+
+ // DEPRECATIONS: output a message only one time per update
+ deprecated$1('time scale', time.format, 'time.format', 'time.parser');
+ deprecated$1('time scale', time.min, 'time.min', 'ticks.min');
+ deprecated$1('time scale', time.max, 'time.max', 'ticks.max');
+
+ // Backward compatibility: before introducing adapter, `displayFormats` was
+ // supposed to contain *all* unit/string pairs but this can't be resolved
+ // when loading the scale (adapters are loaded afterward), so let's populate
+ // missing formats on update
+ helpers$1.mergeIf(time.displayFormats, adapter.formats());
+
+ return core_scale.prototype.update.apply(me, arguments);
+ },
+
+ /**
+ * Allows data to be referenced via 't' attribute
+ */
+ getRightValue: function(rawValue) {
+ if (rawValue && rawValue.t !== undefined) {
+ rawValue = rawValue.t;
+ }
+ return core_scale.prototype.getRightValue.call(this, rawValue);
+ },
+
+ determineDataLimits: function() {
+ var me = this;
+ var chart = me.chart;
+ var adapter = me._adapter;
+ var options = me.options;
+ var unit = options.time.unit || 'day';
+ var min = MAX_INTEGER;
+ var max = MIN_INTEGER;
+ var timestamps = [];
+ var datasets = [];
+ var labels = [];
+ var i, j, ilen, jlen, data, timestamp, labelsAdded;
+ var dataLabels = me._getLabels();
+
+ for (i = 0, ilen = dataLabels.length; i < ilen; ++i) {
+ labels.push(parse(me, dataLabels[i]));
+ }
+
+ for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {
+ if (chart.isDatasetVisible(i)) {
+ data = chart.data.datasets[i].data;
+
+ // Let's consider that all data have the same format.
+ if (helpers$1.isObject(data[0])) {
+ datasets[i] = [];
+
+ for (j = 0, jlen = data.length; j < jlen; ++j) {
+ timestamp = parse(me, data[j]);
+ timestamps.push(timestamp);
+ datasets[i][j] = timestamp;
+ }
+ } else {
+ datasets[i] = labels.slice(0);
+ if (!labelsAdded) {
+ timestamps = timestamps.concat(labels);
+ labelsAdded = true;
+ }
+ }
+ } else {
+ datasets[i] = [];
+ }
+ }
+
+ if (labels.length) {
+ min = Math.min(min, labels[0]);
+ max = Math.max(max, labels[labels.length - 1]);
+ }
+
+ if (timestamps.length) {
+ timestamps = ilen > 1 ? arrayUnique(timestamps).sort(sorter) : timestamps.sort(sorter);
+ min = Math.min(min, timestamps[0]);
+ max = Math.max(max, timestamps[timestamps.length - 1]);
+ }
+
+ min = parse(me, getMin(options)) || min;
+ max = parse(me, getMax(options)) || max;
+
+ // In case there is no valid min/max, set limits based on unit time option
+ min = min === MAX_INTEGER ? +adapter.startOf(Date.now(), unit) : min;
+ max = max === MIN_INTEGER ? +adapter.endOf(Date.now(), unit) + 1 : max;
+
+ // Make sure that max is strictly higher than min (required by the lookup table)
+ me.min = Math.min(min, max);
+ me.max = Math.max(min + 1, max);
+
+ // PRIVATE
+ me._table = [];
+ me._timestamps = {
+ data: timestamps,
+ datasets: datasets,
+ labels: labels
+ };
+ },
+
+ buildTicks: function() {
+ var me = this;
+ var min = me.min;
+ var max = me.max;
+ var options = me.options;
+ var tickOpts = options.ticks;
+ var timeOpts = options.time;
+ var timestamps = me._timestamps;
+ var ticks = [];
+ var capacity = me.getLabelCapacity(min);
+ var source = tickOpts.source;
+ var distribution = options.distribution;
+ var i, ilen, timestamp;
+
+ if (source === 'data' || (source === 'auto' && distribution === 'series')) {
+ timestamps = timestamps.data;
+ } else if (source === 'labels') {
+ timestamps = timestamps.labels;
+ } else {
+ timestamps = generate(me, min, max, capacity);
+ }
+
+ if (options.bounds === 'ticks' && timestamps.length) {
+ min = timestamps[0];
+ max = timestamps[timestamps.length - 1];
+ }
+
+ // Enforce limits with user min/max options
+ min = parse(me, getMin(options)) || min;
+ max = parse(me, getMax(options)) || max;
+
+ // Remove ticks outside the min/max range
+ for (i = 0, ilen = timestamps.length; i < ilen; ++i) {
+ timestamp = timestamps[i];
+ if (timestamp >= min && timestamp <= max) {
+ ticks.push(timestamp);
+ }
+ }
+
+ me.min = min;
+ me.max = max;
+
+ // PRIVATE
+ // determineUnitForFormatting relies on the number of ticks so we don't use it when
+ // autoSkip is enabled because we don't yet know what the final number of ticks will be
+ me._unit = timeOpts.unit || (tickOpts.autoSkip
+ ? determineUnitForAutoTicks(timeOpts.minUnit, me.min, me.max, capacity)
+ : determineUnitForFormatting(me, ticks.length, timeOpts.minUnit, me.min, me.max));
+ me._majorUnit = !tickOpts.major.enabled || me._unit === 'year' ? undefined
+ : determineMajorUnit(me._unit);
+ me._table = buildLookupTable(me._timestamps.data, min, max, distribution);
+ me._offsets = computeOffsets(me._table, ticks, min, max, options);
+
+ if (tickOpts.reverse) {
+ ticks.reverse();
+ }
+
+ return ticksFromTimestamps(me, ticks, me._majorUnit);
+ },
+
+ getLabelForIndex: function(index, datasetIndex) {
+ var me = this;
+ var adapter = me._adapter;
+ var data = me.chart.data;
+ var timeOpts = me.options.time;
+ var label = data.labels && index < data.labels.length ? data.labels[index] : '';
+ var value = data.datasets[datasetIndex].data[index];
+
+ if (helpers$1.isObject(value)) {
+ label = me.getRightValue(value);
+ }
+ if (timeOpts.tooltipFormat) {
+ return adapter.format(toTimestamp(me, label), timeOpts.tooltipFormat);
+ }
+ if (typeof label === 'string') {
+ return label;
+ }
+ return adapter.format(toTimestamp(me, label), timeOpts.displayFormats.datetime);
+ },
+
+ /**
+ * Function to format an individual tick mark
+ * @private
+ */
+ tickFormatFunction: function(time, index, ticks, format) {
+ var me = this;
+ var adapter = me._adapter;
+ var options = me.options;
+ var formats = options.time.displayFormats;
+ var minorFormat = formats[me._unit];
+ var majorUnit = me._majorUnit;
+ var majorFormat = formats[majorUnit];
+ var tick = ticks[index];
+ var tickOpts = options.ticks;
+ var major = majorUnit && majorFormat && tick && tick.major;
+ var label = adapter.format(time, format ? format : major ? majorFormat : minorFormat);
+ var nestedTickOpts = major ? tickOpts.major : tickOpts.minor;
+ var formatter = resolve$5([
+ nestedTickOpts.callback,
+ nestedTickOpts.userCallback,
+ tickOpts.callback,
+ tickOpts.userCallback
+ ]);
+
+ return formatter ? formatter(label, index, ticks) : label;
+ },
+
+ convertTicksToLabels: function(ticks) {
+ var labels = [];
+ var i, ilen;
+
+ for (i = 0, ilen = ticks.length; i < ilen; ++i) {
+ labels.push(this.tickFormatFunction(ticks[i].value, i, ticks));
+ }
+
+ return labels;
+ },
+
+ /**
+ * @private
+ */
+ getPixelForOffset: function(time) {
+ var me = this;
+ var offsets = me._offsets;
+ var pos = interpolate$1(me._table, 'time', time, 'pos');
+ return me.getPixelForDecimal((offsets.start + pos) * offsets.factor);
+ },
+
+ getPixelForValue: function(value, index, datasetIndex) {
+ var me = this;
+ var time = null;
+
+ if (index !== undefined && datasetIndex !== undefined) {
+ time = me._timestamps.datasets[datasetIndex][index];
+ }
+
+ if (time === null) {
+ time = parse(me, value);
+ }
+
+ if (time !== null) {
+ return me.getPixelForOffset(time);
+ }
+ },
+
+ getPixelForTick: function(index) {
+ var ticks = this.getTicks();
+ return index >= 0 && index < ticks.length ?
+ this.getPixelForOffset(ticks[index].value) :
+ null;
+ },
+
+ getValueForPixel: function(pixel) {
+ var me = this;
+ var offsets = me._offsets;
+ var pos = me.getDecimalForPixel(pixel) / offsets.factor - offsets.end;
+ var time = interpolate$1(me._table, 'pos', pos, 'time');
+
+ // DEPRECATION, we should return time directly
+ return me._adapter._create(time);
+ },
+
+ /**
+ * @private
+ */
+ _getLabelSize: function(label) {
+ var me = this;
+ var ticksOpts = me.options.ticks;
+ var tickLabelWidth = me.ctx.measureText(label).width;
+ var angle = helpers$1.toRadians(me.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);
+ var cosRotation = Math.cos(angle);
+ var sinRotation = Math.sin(angle);
+ var tickFontSize = valueOrDefault$d(ticksOpts.fontSize, core_defaults.global.defaultFontSize);
+
+ return {
+ w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),
+ h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)
+ };
+ },
+
+ /**
+ * Crude approximation of what the label width might be
+ * @private
+ */
+ getLabelWidth: function(label) {
+ return this._getLabelSize(label).w;
+ },
+
+ /**
+ * @private
+ */
+ getLabelCapacity: function(exampleTime) {
+ var me = this;
+ var timeOpts = me.options.time;
+ var displayFormats = timeOpts.displayFormats;
+
+ // pick the longest format (milliseconds) for guestimation
+ var format = displayFormats[timeOpts.unit] || displayFormats.millisecond;
+ var exampleLabel = me.tickFormatFunction(exampleTime, 0, ticksFromTimestamps(me, [exampleTime], me._majorUnit), format);
+ var size = me._getLabelSize(exampleLabel);
+ var capacity = Math.floor(me.isHorizontal() ? me.width / size.w : me.height / size.h);
+
+ if (me.options.offset) {
+ capacity--;
+ }
+
+ return capacity > 0 ? capacity : 1;
+ }
+});
+
+// INTERNAL: static default options, registered in src/index.js
+var _defaults$4 = defaultConfig$4;
+scale_time._defaults = _defaults$4;
+
+var scales = {
+ category: scale_category,
+ linear: scale_linear,
+ logarithmic: scale_logarithmic,
+ radialLinear: scale_radialLinear,
+ time: scale_time
+};
+
+var FORMATS = {
+ datetime: 'MMM D, YYYY, h:mm:ss a',
+ millisecond: 'h:mm:ss.SSS a',
+ second: 'h:mm:ss a',
+ minute: 'h:mm a',
+ hour: 'hA',
+ day: 'MMM D',
+ week: 'll',
+ month: 'MMM YYYY',
+ quarter: '[Q]Q - YYYY',
+ year: 'YYYY'
+};
+
+core_adapters._date.override(typeof moment === 'function' ? {
+ _id: 'moment', // DEBUG ONLY
+
+ formats: function() {
+ return FORMATS;
+ },
+
+ parse: function(value, format) {
+ if (typeof value === 'string' && typeof format === 'string') {
+ value = moment(value, format);
+ } else if (!(value instanceof moment)) {
+ value = moment(value);
+ }
+ return value.isValid() ? value.valueOf() : null;
+ },
+
+ format: function(time, format) {
+ return moment(time).format(format);
+ },
+
+ add: function(time, amount, unit) {
+ return moment(time).add(amount, unit).valueOf();
+ },
+
+ diff: function(max, min, unit) {
+ return moment(max).diff(moment(min), unit);
+ },
+
+ startOf: function(time, unit, weekday) {
+ time = moment(time);
+ if (unit === 'isoWeek') {
+ return time.isoWeekday(weekday).valueOf();
+ }
+ return time.startOf(unit).valueOf();
+ },
+
+ endOf: function(time, unit) {
+ return moment(time).endOf(unit).valueOf();
+ },
+
+ // DEPRECATIONS
+
+ /**
+ * Provided for backward compatibility with scale.getValueForPixel().
+ * @deprecated since version 2.8.0
+ * @todo remove at version 3
+ * @private
+ */
+ _create: function(time) {
+ return moment(time);
+ },
+} : {});
+
+core_defaults._set('global', {
+ plugins: {
+ filler: {
+ propagate: true
+ }
+ }
+});
+
+var mappers = {
+ dataset: function(source) {
+ var index = source.fill;
+ var chart = source.chart;
+ var meta = chart.getDatasetMeta(index);
+ var visible = meta && chart.isDatasetVisible(index);
+ var points = (visible && meta.dataset._children) || [];
+ var length = points.length || 0;
+
+ return !length ? null : function(point, i) {
+ return (i < length && points[i]._view) || null;
+ };
+ },
+
+ boundary: function(source) {
+ var boundary = source.boundary;
+ var x = boundary ? boundary.x : null;
+ var y = boundary ? boundary.y : null;
+
+ if (helpers$1.isArray(boundary)) {
+ return function(point, i) {
+ return boundary[i];
+ };
+ }
+
+ return function(point) {
+ return {
+ x: x === null ? point.x : x,
+ y: y === null ? point.y : y,
+ };
+ };
+ }
+};
+
+// @todo if (fill[0] === '#')
+function decodeFill(el, index, count) {
+ var model = el._model || {};
+ var fill = model.fill;
+ var target;
+
+ if (fill === undefined) {
+ fill = !!model.backgroundColor;
+ }
+
+ if (fill === false || fill === null) {
+ return false;
+ }
+
+ if (fill === true) {
+ return 'origin';
+ }
+
+ target = parseFloat(fill, 10);
+ if (isFinite(target) && Math.floor(target) === target) {
+ if (fill[0] === '-' || fill[0] === '+') {
+ target = index + target;
+ }
+
+ if (target === index || target < 0 || target >= count) {
+ return false;
+ }
+
+ return target;
+ }
+
+ switch (fill) {
+ // compatibility
+ case 'bottom':
+ return 'start';
+ case 'top':
+ return 'end';
+ case 'zero':
+ return 'origin';
+ // supported boundaries
+ case 'origin':
+ case 'start':
+ case 'end':
+ return fill;
+ // invalid fill values
+ default:
+ return false;
+ }
+}
+
+function computeLinearBoundary(source) {
+ var model = source.el._model || {};
+ var scale = source.el._scale || {};
+ var fill = source.fill;
+ var target = null;
+ var horizontal;
+
+ if (isFinite(fill)) {
+ return null;
+ }
+
+ // Backward compatibility: until v3, we still need to support boundary values set on
+ // the model (scaleTop, scaleBottom and scaleZero) because some external plugins and
+ // controllers might still use it (e.g. the Smith chart).
+
+ if (fill === 'start') {
+ target = model.scaleBottom === undefined ? scale.bottom : model.scaleBottom;
+ } else if (fill === 'end') {
+ target = model.scaleTop === undefined ? scale.top : model.scaleTop;
+ } else if (model.scaleZero !== undefined) {
+ target = model.scaleZero;
+ } else if (scale.getBasePixel) {
+ target = scale.getBasePixel();
+ }
+
+ if (target !== undefined && target !== null) {
+ if (target.x !== undefined && target.y !== undefined) {
+ return target;
+ }
+
+ if (helpers$1.isFinite(target)) {
+ horizontal = scale.isHorizontal();
+ return {
+ x: horizontal ? target : null,
+ y: horizontal ? null : target
+ };
+ }
+ }
+
+ return null;
+}
+
+function computeCircularBoundary(source) {
+ var scale = source.el._scale;
+ var options = scale.options;
+ var length = scale.chart.data.labels.length;
+ var fill = source.fill;
+ var target = [];
+ var start, end, center, i, point;
+
+ if (!length) {
+ return null;
+ }
+
+ start = options.ticks.reverse ? scale.max : scale.min;
+ end = options.ticks.reverse ? scale.min : scale.max;
+ center = scale.getPointPositionForValue(0, start);
+ for (i = 0; i < length; ++i) {
+ point = fill === 'start' || fill === 'end'
+ ? scale.getPointPositionForValue(i, fill === 'start' ? start : end)
+ : scale.getBasePosition(i);
+ if (options.gridLines.circular) {
+ point.cx = center.x;
+ point.cy = center.y;
+ point.angle = scale.getIndexAngle(i) - Math.PI / 2;
+ }
+ target.push(point);
+ }
+ return target;
+}
+
+function computeBoundary(source) {
+ var scale = source.el._scale || {};
+
+ if (scale.getPointPositionForValue) {
+ return computeCircularBoundary(source);
+ }
+ return computeLinearBoundary(source);
+}
+
+function resolveTarget(sources, index, propagate) {
+ var source = sources[index];
+ var fill = source.fill;
+ var visited = [index];
+ var target;
+
+ if (!propagate) {
+ return fill;
+ }
+
+ while (fill !== false && visited.indexOf(fill) === -1) {
+ if (!isFinite(fill)) {
+ return fill;
+ }
+
+ target = sources[fill];
+ if (!target) {
+ return false;
+ }
+
+ if (target.visible) {
+ return fill;
+ }
+
+ visited.push(fill);
+ fill = target.fill;
+ }
+
+ return false;
+}
+
+function createMapper(source) {
+ var fill = source.fill;
+ var type = 'dataset';
+
+ if (fill === false) {
+ return null;
+ }
+
+ if (!isFinite(fill)) {
+ type = 'boundary';
+ }
+
+ return mappers[type](source);
+}
+
+function isDrawable(point) {
+ return point && !point.skip;
+}
+
+function drawArea(ctx, curve0, curve1, len0, len1) {
+ var i, cx, cy, r;
+
+ if (!len0 || !len1) {
+ return;
+ }
+
+ // building first area curve (normal)
+ ctx.moveTo(curve0[0].x, curve0[0].y);
+ for (i = 1; i < len0; ++i) {
+ helpers$1.canvas.lineTo(ctx, curve0[i - 1], curve0[i]);
+ }
+
+ if (curve1[0].angle !== undefined) {
+ cx = curve1[0].cx;
+ cy = curve1[0].cy;
+ r = Math.sqrt(Math.pow(curve1[0].x - cx, 2) + Math.pow(curve1[0].y - cy, 2));
+ for (i = len1 - 1; i > 0; --i) {
+ ctx.arc(cx, cy, r, curve1[i].angle, curve1[i - 1].angle, true);
+ }
+ return;
+ }
+
+ // joining the two area curves
+ ctx.lineTo(curve1[len1 - 1].x, curve1[len1 - 1].y);
+
+ // building opposite area curve (reverse)
+ for (i = len1 - 1; i > 0; --i) {
+ helpers$1.canvas.lineTo(ctx, curve1[i], curve1[i - 1], true);
+ }
+}
+
+function doFill(ctx, points, mapper, view, color, loop) {
+ var count = points.length;
+ var span = view.spanGaps;
+ var curve0 = [];
+ var curve1 = [];
+ var len0 = 0;
+ var len1 = 0;
+ var i, ilen, index, p0, p1, d0, d1, loopOffset;
+
+ ctx.beginPath();
+
+ for (i = 0, ilen = count; i < ilen; ++i) {
+ index = i % count;
+ p0 = points[index]._view;
+ p1 = mapper(p0, index, view);
+ d0 = isDrawable(p0);
+ d1 = isDrawable(p1);
+
+ if (loop && loopOffset === undefined && d0) {
+ loopOffset = i + 1;
+ ilen = count + loopOffset;
+ }
+
+ if (d0 && d1) {
+ len0 = curve0.push(p0);
+ len1 = curve1.push(p1);
+ } else if (len0 && len1) {
+ if (!span) {
+ drawArea(ctx, curve0, curve1, len0, len1);
+ len0 = len1 = 0;
+ curve0 = [];
+ curve1 = [];
+ } else {
+ if (d0) {
+ curve0.push(p0);
+ }
+ if (d1) {
+ curve1.push(p1);
+ }
+ }
+ }
+ }
+
+ drawArea(ctx, curve0, curve1, len0, len1);
+
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+}
+
+var plugin_filler = {
+ id: 'filler',
+
+ afterDatasetsUpdate: function(chart, options) {
+ var count = (chart.data.datasets || []).length;
+ var propagate = options.propagate;
+ var sources = [];
+ var meta, i, el, source;
+
+ for (i = 0; i < count; ++i) {
+ meta = chart.getDatasetMeta(i);
+ el = meta.dataset;
+ source = null;
+
+ if (el && el._model && el instanceof elements.Line) {
+ source = {
+ visible: chart.isDatasetVisible(i),
+ fill: decodeFill(el, i, count),
+ chart: chart,
+ el: el
+ };
+ }
+
+ meta.$filler = source;
+ sources.push(source);
+ }
+
+ for (i = 0; i < count; ++i) {
+ source = sources[i];
+ if (!source) {
+ continue;
+ }
+
+ source.fill = resolveTarget(sources, i, propagate);
+ source.boundary = computeBoundary(source);
+ source.mapper = createMapper(source);
+ }
+ },
+
+ beforeDatasetsDraw: function(chart) {
+ var metasets = chart._getSortedVisibleDatasetMetas();
+ var ctx = chart.ctx;
+ var meta, i, el, view, points, mapper, color;
+
+ for (i = metasets.length - 1; i >= 0; --i) {
+ meta = metasets[i].$filler;
+
+ if (!meta || !meta.visible) {
+ continue;
+ }
+
+ el = meta.el;
+ view = el._view;
+ points = el._children || [];
+ mapper = meta.mapper;
+ color = view.backgroundColor || core_defaults.global.defaultColor;
+
+ if (mapper && color && points.length) {
+ helpers$1.canvas.clipArea(ctx, chart.chartArea);
+ doFill(ctx, points, mapper, view, color, el._loop);
+ helpers$1.canvas.unclipArea(ctx);
+ }
+ }
+ }
+};
+
+var getRtlHelper$1 = helpers$1.rtl.getRtlAdapter;
+var noop$1 = helpers$1.noop;
+var valueOrDefault$e = helpers$1.valueOrDefault;
+
+core_defaults._set('global', {
+ legend: {
+ display: true,
+ position: 'top',
+ align: 'center',
+ fullWidth: true,
+ reverse: false,
+ weight: 1000,
+
+ // a callback that will handle
+ onClick: function(e, legendItem) {
+ var index = legendItem.datasetIndex;
+ var ci = this.chart;
+ var meta = ci.getDatasetMeta(index);
+
+ // See controller.isDatasetVisible comment
+ meta.hidden = meta.hidden === null ? !ci.data.datasets[index].hidden : null;
+
+ // We hid a dataset ... rerender the chart
+ ci.update();
+ },
+
+ onHover: null,
+ onLeave: null,
+
+ labels: {
+ boxWidth: 40,
+ padding: 10,
+ // Generates labels shown in the legend
+ // Valid properties to return:
+ // text : text to display
+ // fillStyle : fill of coloured box
+ // strokeStyle: stroke of coloured box
+ // hidden : if this legend item refers to a hidden item
+ // lineCap : cap style for line
+ // lineDash
+ // lineDashOffset :
+ // lineJoin :
+ // lineWidth :
+ generateLabels: function(chart) {
+ var datasets = chart.data.datasets;
+ var options = chart.options.legend || {};
+ var usePointStyle = options.labels && options.labels.usePointStyle;
+
+ return chart._getSortedDatasetMetas().map(function(meta) {
+ var style = meta.controller.getStyle(usePointStyle ? 0 : undefined);
+
+ return {
+ text: datasets[meta.index].label,
+ fillStyle: style.backgroundColor,
+ hidden: !chart.isDatasetVisible(meta.index),
+ lineCap: style.borderCapStyle,
+ lineDash: style.borderDash,
+ lineDashOffset: style.borderDashOffset,
+ lineJoin: style.borderJoinStyle,
+ lineWidth: style.borderWidth,
+ strokeStyle: style.borderColor,
+ pointStyle: style.pointStyle,
+ rotation: style.rotation,
+
+ // Below is extra data used for toggling the datasets
+ datasetIndex: meta.index
+ };
+ }, this);
+ }
+ }
+ },
+
+ legendCallback: function(chart) {
+ var list = document.createElement('ul');
+ var datasets = chart.data.datasets;
+ var i, ilen, listItem, listItemSpan;
+
+ list.setAttribute('class', chart.id + '-legend');
+
+ for (i = 0, ilen = datasets.length; i < ilen; i++) {
+ listItem = list.appendChild(document.createElement('li'));
+ listItemSpan = listItem.appendChild(document.createElement('span'));
+ listItemSpan.style.backgroundColor = datasets[i].backgroundColor;
+ if (datasets[i].label) {
+ listItem.appendChild(document.createTextNode(datasets[i].label));
+ }
+ }
+
+ return list.outerHTML;
+ }
+});
+
+/**
+ * Helper function to get the box width based on the usePointStyle option
+ * @param {object} labelopts - the label options on the legend
+ * @param {number} fontSize - the label font size
+ * @return {number} width of the color box area
+ */
+function getBoxWidth(labelOpts, fontSize) {
+ return labelOpts.usePointStyle && labelOpts.boxWidth > fontSize ?
+ fontSize :
+ labelOpts.boxWidth;
+}
+
+/**
+ * IMPORTANT: this class is exposed publicly as Chart.Legend, backward compatibility required!
+ */
+var Legend = core_element.extend({
+
+ initialize: function(config) {
+ var me = this;
+ helpers$1.extend(me, config);
+
+ // Contains hit boxes for each dataset (in dataset order)
+ me.legendHitBoxes = [];
+
+ /**
+ * @private
+ */
+ me._hoveredItem = null;
+
+ // Are we in doughnut mode which has a different data type
+ me.doughnutMode = false;
+ },
+
+ // These methods are ordered by lifecycle. Utilities then follow.
+ // Any function defined here is inherited by all legend types.
+ // Any function can be extended by the legend type
+
+ beforeUpdate: noop$1,
+ update: function(maxWidth, maxHeight, margins) {
+ var me = this;
+
+ // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)
+ me.beforeUpdate();
+
+ // Absorb the master measurements
+ me.maxWidth = maxWidth;
+ me.maxHeight = maxHeight;
+ me.margins = margins;
+
+ // Dimensions
+ me.beforeSetDimensions();
+ me.setDimensions();
+ me.afterSetDimensions();
+ // Labels
+ me.beforeBuildLabels();
+ me.buildLabels();
+ me.afterBuildLabels();
+
+ // Fit
+ me.beforeFit();
+ me.fit();
+ me.afterFit();
+ //
+ me.afterUpdate();
+
+ return me.minSize;
+ },
+ afterUpdate: noop$1,
+
+ //
+
+ beforeSetDimensions: noop$1,
+ setDimensions: function() {
+ var me = this;
+ // Set the unconstrained dimension before label rotation
+ if (me.isHorizontal()) {
+ // Reset position before calculating rotation
+ me.width = me.maxWidth;
+ me.left = 0;
+ me.right = me.width;
+ } else {
+ me.height = me.maxHeight;
+
+ // Reset position before calculating rotation
+ me.top = 0;
+ me.bottom = me.height;
+ }
+
+ // Reset padding
+ me.paddingLeft = 0;
+ me.paddingTop = 0;
+ me.paddingRight = 0;
+ me.paddingBottom = 0;
+
+ // Reset minSize
+ me.minSize = {
+ width: 0,
+ height: 0
+ };
+ },
+ afterSetDimensions: noop$1,
+
+ //
+
+ beforeBuildLabels: noop$1,
+ buildLabels: function() {
+ var me = this;
+ var labelOpts = me.options.labels || {};
+ var legendItems = helpers$1.callback(labelOpts.generateLabels, [me.chart], me) || [];
+
+ if (labelOpts.filter) {
+ legendItems = legendItems.filter(function(item) {
+ return labelOpts.filter(item, me.chart.data);
+ });
+ }
+
+ if (me.options.reverse) {
+ legendItems.reverse();
+ }
+
+ me.legendItems = legendItems;
+ },
+ afterBuildLabels: noop$1,
+
+ //
+
+ beforeFit: noop$1,
+ fit: function() {
+ var me = this;
+ var opts = me.options;
+ var labelOpts = opts.labels;
+ var display = opts.display;
+
+ var ctx = me.ctx;
+
+ var labelFont = helpers$1.options._parseFont(labelOpts);
+ var fontSize = labelFont.size;
+
+ // Reset hit boxes
+ var hitboxes = me.legendHitBoxes = [];
+
+ var minSize = me.minSize;
+ var isHorizontal = me.isHorizontal();
+
+ if (isHorizontal) {
+ minSize.width = me.maxWidth; // fill all the width
+ minSize.height = display ? 10 : 0;
+ } else {
+ minSize.width = display ? 10 : 0;
+ minSize.height = me.maxHeight; // fill all the height
+ }
+
+ // Increase sizes here
+ if (!display) {
+ me.width = minSize.width = me.height = minSize.height = 0;
+ return;
+ }
+ ctx.font = labelFont.string;
+
+ if (isHorizontal) {
+ // Labels
+
+ // Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one
+ var lineWidths = me.lineWidths = [0];
+ var totalHeight = 0;
+
+ ctx.textAlign = 'left';
+ ctx.textBaseline = 'middle';
+
+ helpers$1.each(me.legendItems, function(legendItem, i) {
+ var boxWidth = getBoxWidth(labelOpts, fontSize);
+ var width = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;
+
+ if (i === 0 || lineWidths[lineWidths.length - 1] + width + 2 * labelOpts.padding > minSize.width) {
+ totalHeight += fontSize + labelOpts.padding;
+ lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;
+ }
+
+ // Store the hitbox width and height here. Final position will be updated in `draw`
+ hitboxes[i] = {
+ left: 0,
+ top: 0,
+ width: width,
+ height: fontSize
+ };
+
+ lineWidths[lineWidths.length - 1] += width + labelOpts.padding;
+ });
+
+ minSize.height += totalHeight;
+
+ } else {
+ var vPadding = labelOpts.padding;
+ var columnWidths = me.columnWidths = [];
+ var columnHeights = me.columnHeights = [];
+ var totalWidth = labelOpts.padding;
+ var currentColWidth = 0;
+ var currentColHeight = 0;
+
+ helpers$1.each(me.legendItems, function(legendItem, i) {
+ var boxWidth = getBoxWidth(labelOpts, fontSize);
+ var itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;
+
+ // If too tall, go to new column
+ if (i > 0 && currentColHeight + fontSize + 2 * vPadding > minSize.height) {
+ totalWidth += currentColWidth + labelOpts.padding;
+ columnWidths.push(currentColWidth); // previous column width
+ columnHeights.push(currentColHeight);
+ currentColWidth = 0;
+ currentColHeight = 0;
+ }
+
+ // Get max width
+ currentColWidth = Math.max(currentColWidth, itemWidth);
+ currentColHeight += fontSize + vPadding;
+
+ // Store the hitbox width and height here. Final position will be updated in `draw`
+ hitboxes[i] = {
+ left: 0,
+ top: 0,
+ width: itemWidth,
+ height: fontSize
+ };
+ });
+
+ totalWidth += currentColWidth;
+ columnWidths.push(currentColWidth);
+ columnHeights.push(currentColHeight);
+ minSize.width += totalWidth;
+ }
+
+ me.width = minSize.width;
+ me.height = minSize.height;
+ },
+ afterFit: noop$1,
+
+ // Shared Methods
+ isHorizontal: function() {
+ return this.options.position === 'top' || this.options.position === 'bottom';
+ },
+
+ // Actually draw the legend on the canvas
+ draw: function() {
+ var me = this;
+ var opts = me.options;
+ var labelOpts = opts.labels;
+ var globalDefaults = core_defaults.global;
+ var defaultColor = globalDefaults.defaultColor;
+ var lineDefault = globalDefaults.elements.line;
+ var legendHeight = me.height;
+ var columnHeights = me.columnHeights;
+ var legendWidth = me.width;
+ var lineWidths = me.lineWidths;
+
+ if (!opts.display) {
+ return;
+ }
+
+ var rtlHelper = getRtlHelper$1(opts.rtl, me.left, me.minSize.width);
+ var ctx = me.ctx;
+ var fontColor = valueOrDefault$e(labelOpts.fontColor, globalDefaults.defaultFontColor);
+ var labelFont = helpers$1.options._parseFont(labelOpts);
+ var fontSize = labelFont.size;
+ var cursor;
+
+ // Canvas setup
+ ctx.textAlign = rtlHelper.textAlign('left');
+ ctx.textBaseline = 'middle';
+ ctx.lineWidth = 0.5;
+ ctx.strokeStyle = fontColor; // for strikethrough effect
+ ctx.fillStyle = fontColor; // render in correct colour
+ ctx.font = labelFont.string;
+
+ var boxWidth = getBoxWidth(labelOpts, fontSize);
+ var hitboxes = me.legendHitBoxes;
+
+ // current position
+ var drawLegendBox = function(x, y, legendItem) {
+ if (isNaN(boxWidth) || boxWidth <= 0) {
+ return;
+ }
+
+ // Set the ctx for the box
+ ctx.save();
+
+ var lineWidth = valueOrDefault$e(legendItem.lineWidth, lineDefault.borderWidth);
+ ctx.fillStyle = valueOrDefault$e(legendItem.fillStyle, defaultColor);
+ ctx.lineCap = valueOrDefault$e(legendItem.lineCap, lineDefault.borderCapStyle);
+ ctx.lineDashOffset = valueOrDefault$e(legendItem.lineDashOffset, lineDefault.borderDashOffset);
+ ctx.lineJoin = valueOrDefault$e(legendItem.lineJoin, lineDefault.borderJoinStyle);
+ ctx.lineWidth = lineWidth;
+ ctx.strokeStyle = valueOrDefault$e(legendItem.strokeStyle, defaultColor);
+
+ if (ctx.setLineDash) {
+ // IE 9 and 10 do not support line dash
+ ctx.setLineDash(valueOrDefault$e(legendItem.lineDash, lineDefault.borderDash));
+ }
+
+ if (labelOpts && labelOpts.usePointStyle) {
+ // Recalculate x and y for drawPoint() because its expecting
+ // x and y to be center of figure (instead of top left)
+ var radius = boxWidth * Math.SQRT2 / 2;
+ var centerX = rtlHelper.xPlus(x, boxWidth / 2);
+ var centerY = y + fontSize / 2;
+
+ // Draw pointStyle as legend symbol
+ helpers$1.canvas.drawPoint(ctx, legendItem.pointStyle, radius, centerX, centerY, legendItem.rotation);
+ } else {
+ // Draw box as legend symbol
+ ctx.fillRect(rtlHelper.leftForLtr(x, boxWidth), y, boxWidth, fontSize);
+ if (lineWidth !== 0) {
+ ctx.strokeRect(rtlHelper.leftForLtr(x, boxWidth), y, boxWidth, fontSize);
+ }
+ }
+
+ ctx.restore();
+ };
+
+ var fillText = function(x, y, legendItem, textWidth) {
+ var halfFontSize = fontSize / 2;
+ var xLeft = rtlHelper.xPlus(x, boxWidth + halfFontSize);
+ var yMiddle = y + halfFontSize;
+
+ ctx.fillText(legendItem.text, xLeft, yMiddle);
+
+ if (legendItem.hidden) {
+ // Strikethrough the text if hidden
+ ctx.beginPath();
+ ctx.lineWidth = 2;
+ ctx.moveTo(xLeft, yMiddle);
+ ctx.lineTo(rtlHelper.xPlus(xLeft, textWidth), yMiddle);
+ ctx.stroke();
+ }
+ };
+
+ var alignmentOffset = function(dimension, blockSize) {
+ switch (opts.align) {
+ case 'start':
+ return labelOpts.padding;
+ case 'end':
+ return dimension - blockSize;
+ default: // center
+ return (dimension - blockSize + labelOpts.padding) / 2;
+ }
+ };
+
+ // Horizontal
+ var isHorizontal = me.isHorizontal();
+ if (isHorizontal) {
+ cursor = {
+ x: me.left + alignmentOffset(legendWidth, lineWidths[0]),
+ y: me.top + labelOpts.padding,
+ line: 0
+ };
+ } else {
+ cursor = {
+ x: me.left + labelOpts.padding,
+ y: me.top + alignmentOffset(legendHeight, columnHeights[0]),
+ line: 0
+ };
+ }
+
+ helpers$1.rtl.overrideTextDirection(me.ctx, opts.textDirection);
+
+ var itemHeight = fontSize + labelOpts.padding;
+ helpers$1.each(me.legendItems, function(legendItem, i) {
+ var textWidth = ctx.measureText(legendItem.text).width;
+ var width = boxWidth + (fontSize / 2) + textWidth;
+ var x = cursor.x;
+ var y = cursor.y;
+
+ rtlHelper.setWidth(me.minSize.width);
+
+ // Use (me.left + me.minSize.width) and (me.top + me.minSize.height)
+ // instead of me.right and me.bottom because me.width and me.height
+ // may have been changed since me.minSize was calculated
+ if (isHorizontal) {
+ if (i > 0 && x + width + labelOpts.padding > me.left + me.minSize.width) {
+ y = cursor.y += itemHeight;
+ cursor.line++;
+ x = cursor.x = me.left + alignmentOffset(legendWidth, lineWidths[cursor.line]);
+ }
+ } else if (i > 0 && y + itemHeight > me.top + me.minSize.height) {
+ x = cursor.x = x + me.columnWidths[cursor.line] + labelOpts.padding;
+ cursor.line++;
+ y = cursor.y = me.top + alignmentOffset(legendHeight, columnHeights[cursor.line]);
+ }
+
+ var realX = rtlHelper.x(x);
+
+ drawLegendBox(realX, y, legendItem);
+
+ hitboxes[i].left = rtlHelper.leftForLtr(realX, hitboxes[i].width);
+ hitboxes[i].top = y;
+
+ // Fill the actual label
+ fillText(realX, y, legendItem, textWidth);
+
+ if (isHorizontal) {
+ cursor.x += width + labelOpts.padding;
+ } else {
+ cursor.y += itemHeight;
+ }
+ });
+
+ helpers$1.rtl.restoreTextDirection(me.ctx, opts.textDirection);
+ },
+
+ /**
+ * @private
+ */
+ _getLegendItemAt: function(x, y) {
+ var me = this;
+ var i, hitBox, lh;
+
+ if (x >= me.left && x <= me.right && y >= me.top && y <= me.bottom) {
+ // See if we are touching one of the dataset boxes
+ lh = me.legendHitBoxes;
+ for (i = 0; i < lh.length; ++i) {
+ hitBox = lh[i];
+
+ if (x >= hitBox.left && x <= hitBox.left + hitBox.width && y >= hitBox.top && y <= hitBox.top + hitBox.height) {
+ // Touching an element
+ return me.legendItems[i];
+ }
+ }
+ }
+
+ return null;
+ },
+
+ /**
+ * Handle an event
+ * @private
+ * @param {IEvent} event - The event to handle
+ */
+ handleEvent: function(e) {
+ var me = this;
+ var opts = me.options;
+ var type = e.type === 'mouseup' ? 'click' : e.type;
+ var hoveredItem;
+
+ if (type === 'mousemove') {
+ if (!opts.onHover && !opts.onLeave) {
+ return;
+ }
+ } else if (type === 'click') {
+ if (!opts.onClick) {
+ return;
+ }
+ } else {
+ return;
+ }
+
+ // Chart event already has relative position in it
+ hoveredItem = me._getLegendItemAt(e.x, e.y);
+
+ if (type === 'click') {
+ if (hoveredItem && opts.onClick) {
+ // use e.native for backwards compatibility
+ opts.onClick.call(me, e.native, hoveredItem);
+ }
+ } else {
+ if (opts.onLeave && hoveredItem !== me._hoveredItem) {
+ if (me._hoveredItem) {
+ opts.onLeave.call(me, e.native, me._hoveredItem);
+ }
+ me._hoveredItem = hoveredItem;
+ }
+
+ if (opts.onHover && hoveredItem) {
+ // use e.native for backwards compatibility
+ opts.onHover.call(me, e.native, hoveredItem);
+ }
+ }
+ }
+});
+
+function createNewLegendAndAttach(chart, legendOpts) {
+ var legend = new Legend({
+ ctx: chart.ctx,
+ options: legendOpts,
+ chart: chart
+ });
+
+ core_layouts.configure(chart, legend, legendOpts);
+ core_layouts.addBox(chart, legend);
+ chart.legend = legend;
+}
+
+var plugin_legend = {
+ id: 'legend',
+
+ /**
+ * Backward compatibility: since 2.1.5, the legend is registered as a plugin, making
+ * Chart.Legend obsolete. To avoid a breaking change, we export the Legend as part of
+ * the plugin, which one will be re-exposed in the chart.js file.
+ * https://github.com/chartjs/Chart.js/pull/2640
+ * @private
+ */
+ _element: Legend,
+
+ beforeInit: function(chart) {
+ var legendOpts = chart.options.legend;
+
+ if (legendOpts) {
+ createNewLegendAndAttach(chart, legendOpts);
+ }
+ },
+
+ beforeUpdate: function(chart) {
+ var legendOpts = chart.options.legend;
+ var legend = chart.legend;
+
+ if (legendOpts) {
+ helpers$1.mergeIf(legendOpts, core_defaults.global.legend);
+
+ if (legend) {
+ core_layouts.configure(chart, legend, legendOpts);
+ legend.options = legendOpts;
+ } else {
+ createNewLegendAndAttach(chart, legendOpts);
+ }
+ } else if (legend) {
+ core_layouts.removeBox(chart, legend);
+ delete chart.legend;
+ }
+ },
+
+ afterEvent: function(chart, e) {
+ var legend = chart.legend;
+ if (legend) {
+ legend.handleEvent(e);
+ }
+ }
+};
+
+var noop$2 = helpers$1.noop;
+
+core_defaults._set('global', {
+ title: {
+ display: false,
+ fontStyle: 'bold',
+ fullWidth: true,
+ padding: 10,
+ position: 'top',
+ text: '',
+ weight: 2000 // by default greater than legend (1000) to be above
+ }
+});
+
+/**
+ * IMPORTANT: this class is exposed publicly as Chart.Legend, backward compatibility required!
+ */
+var Title = core_element.extend({
+ initialize: function(config) {
+ var me = this;
+ helpers$1.extend(me, config);
+
+ // Contains hit boxes for each dataset (in dataset order)
+ me.legendHitBoxes = [];
+ },
+
+ // These methods are ordered by lifecycle. Utilities then follow.
+
+ beforeUpdate: noop$2,
+ update: function(maxWidth, maxHeight, margins) {
+ var me = this;
+
+ // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)
+ me.beforeUpdate();
+
+ // Absorb the master measurements
+ me.maxWidth = maxWidth;
+ me.maxHeight = maxHeight;
+ me.margins = margins;
+
+ // Dimensions
+ me.beforeSetDimensions();
+ me.setDimensions();
+ me.afterSetDimensions();
+ // Labels
+ me.beforeBuildLabels();
+ me.buildLabels();
+ me.afterBuildLabels();
+
+ // Fit
+ me.beforeFit();
+ me.fit();
+ me.afterFit();
+ //
+ me.afterUpdate();
+
+ return me.minSize;
+
+ },
+ afterUpdate: noop$2,
+
+ //
+
+ beforeSetDimensions: noop$2,
+ setDimensions: function() {
+ var me = this;
+ // Set the unconstrained dimension before label rotation
+ if (me.isHorizontal()) {
+ // Reset position before calculating rotation
+ me.width = me.maxWidth;
+ me.left = 0;
+ me.right = me.width;
+ } else {
+ me.height = me.maxHeight;
+
+ // Reset position before calculating rotation
+ me.top = 0;
+ me.bottom = me.height;
+ }
+
+ // Reset padding
+ me.paddingLeft = 0;
+ me.paddingTop = 0;
+ me.paddingRight = 0;
+ me.paddingBottom = 0;
+
+ // Reset minSize
+ me.minSize = {
+ width: 0,
+ height: 0
+ };
+ },
+ afterSetDimensions: noop$2,
+
+ //
+
+ beforeBuildLabels: noop$2,
+ buildLabels: noop$2,
+ afterBuildLabels: noop$2,
+
+ //
+
+ beforeFit: noop$2,
+ fit: function() {
+ var me = this;
+ var opts = me.options;
+ var minSize = me.minSize = {};
+ var isHorizontal = me.isHorizontal();
+ var lineCount, textSize;
+
+ if (!opts.display) {
+ me.width = minSize.width = me.height = minSize.height = 0;
+ return;
+ }
+
+ lineCount = helpers$1.isArray(opts.text) ? opts.text.length : 1;
+ textSize = lineCount * helpers$1.options._parseFont(opts).lineHeight + opts.padding * 2;
+
+ me.width = minSize.width = isHorizontal ? me.maxWidth : textSize;
+ me.height = minSize.height = isHorizontal ? textSize : me.maxHeight;
+ },
+ afterFit: noop$2,
+
+ // Shared Methods
+ isHorizontal: function() {
+ var pos = this.options.position;
+ return pos === 'top' || pos === 'bottom';
+ },
+
+ // Actually draw the title block on the canvas
+ draw: function() {
+ var me = this;
+ var ctx = me.ctx;
+ var opts = me.options;
+
+ if (!opts.display) {
+ return;
+ }
+
+ var fontOpts = helpers$1.options._parseFont(opts);
+ var lineHeight = fontOpts.lineHeight;
+ var offset = lineHeight / 2 + opts.padding;
+ var rotation = 0;
+ var top = me.top;
+ var left = me.left;
+ var bottom = me.bottom;
+ var right = me.right;
+ var maxWidth, titleX, titleY;
+
+ ctx.fillStyle = helpers$1.valueOrDefault(opts.fontColor, core_defaults.global.defaultFontColor); // render in correct colour
+ ctx.font = fontOpts.string;
+
+ // Horizontal
+ if (me.isHorizontal()) {
+ titleX = left + ((right - left) / 2); // midpoint of the width
+ titleY = top + offset;
+ maxWidth = right - left;
+ } else {
+ titleX = opts.position === 'left' ? left + offset : right - offset;
+ titleY = top + ((bottom - top) / 2);
+ maxWidth = bottom - top;
+ rotation = Math.PI * (opts.position === 'left' ? -0.5 : 0.5);
+ }
+
+ ctx.save();
+ ctx.translate(titleX, titleY);
+ ctx.rotate(rotation);
+ ctx.textAlign = 'center';
+ ctx.textBaseline = 'middle';
+
+ var text = opts.text;
+ if (helpers$1.isArray(text)) {
+ var y = 0;
+ for (var i = 0; i < text.length; ++i) {
+ ctx.fillText(text[i], 0, y, maxWidth);
+ y += lineHeight;
+ }
+ } else {
+ ctx.fillText(text, 0, 0, maxWidth);
+ }
+
+ ctx.restore();
+ }
+});
+
+function createNewTitleBlockAndAttach(chart, titleOpts) {
+ var title = new Title({
+ ctx: chart.ctx,
+ options: titleOpts,
+ chart: chart
+ });
+
+ core_layouts.configure(chart, title, titleOpts);
+ core_layouts.addBox(chart, title);
+ chart.titleBlock = title;
+}
+
+var plugin_title = {
+ id: 'title',
+
+ /**
+ * Backward compatibility: since 2.1.5, the title is registered as a plugin, making
+ * Chart.Title obsolete. To avoid a breaking change, we export the Title as part of
+ * the plugin, which one will be re-exposed in the chart.js file.
+ * https://github.com/chartjs/Chart.js/pull/2640
+ * @private
+ */
+ _element: Title,
+
+ beforeInit: function(chart) {
+ var titleOpts = chart.options.title;
+
+ if (titleOpts) {
+ createNewTitleBlockAndAttach(chart, titleOpts);
+ }
+ },
+
+ beforeUpdate: function(chart) {
+ var titleOpts = chart.options.title;
+ var titleBlock = chart.titleBlock;
+
+ if (titleOpts) {
+ helpers$1.mergeIf(titleOpts, core_defaults.global.title);
+
+ if (titleBlock) {
+ core_layouts.configure(chart, titleBlock, titleOpts);
+ titleBlock.options = titleOpts;
+ } else {
+ createNewTitleBlockAndAttach(chart, titleOpts);
+ }
+ } else if (titleBlock) {
+ core_layouts.removeBox(chart, titleBlock);
+ delete chart.titleBlock;
+ }
+ }
+};
+
+var plugins = {};
+var filler = plugin_filler;
+var legend = plugin_legend;
+var title = plugin_title;
+plugins.filler = filler;
+plugins.legend = legend;
+plugins.title = title;
+
+/**
+ * @namespace Chart
+ */
+
+
+core_controller.helpers = helpers$1;
+
+// @todo dispatch these helpers into appropriated helpers/helpers.* file and write unit tests!
+core_helpers();
+
+core_controller._adapters = core_adapters;
+core_controller.Animation = core_animation;
+core_controller.animationService = core_animations;
+core_controller.controllers = controllers;
+core_controller.DatasetController = core_datasetController;
+core_controller.defaults = core_defaults;
+core_controller.Element = core_element;
+core_controller.elements = elements;
+core_controller.Interaction = core_interaction;
+core_controller.layouts = core_layouts;
+core_controller.platform = platform;
+core_controller.plugins = core_plugins;
+core_controller.Scale = core_scale;
+core_controller.scaleService = core_scaleService;
+core_controller.Ticks = core_ticks;
+core_controller.Tooltip = core_tooltip;
+
+// Register built-in scales
+
+core_controller.helpers.each(scales, function(scale, type) {
+ core_controller.scaleService.registerScaleType(type, scale, scale._defaults);
+});
+
+// Load to register built-in adapters (as side effects)
+
+
+// Loading built-in plugins
+
+for (var k in plugins) {
+ if (plugins.hasOwnProperty(k)) {
+ core_controller.plugins.register(plugins[k]);
+ }
+}
+
+core_controller.platform.initialize();
+
+var src = core_controller;
+if (typeof window !== 'undefined') {
+ window.Chart = core_controller;
+}
+
+// DEPRECATIONS
+
+/**
+ * Provided for backward compatibility, not available anymore
+ * @namespace Chart.Chart
+ * @deprecated since version 2.8.0
+ * @todo remove at version 3
+ * @private
+ */
+core_controller.Chart = core_controller;
+
+/**
+ * Provided for backward compatibility, not available anymore
+ * @namespace Chart.Legend
+ * @deprecated since version 2.1.5
+ * @todo remove at version 3
+ * @private
+ */
+core_controller.Legend = plugins.legend._element;
+
+/**
+ * Provided for backward compatibility, not available anymore
+ * @namespace Chart.Title
+ * @deprecated since version 2.1.5
+ * @todo remove at version 3
+ * @private
+ */
+core_controller.Title = plugins.title._element;
+
+/**
+ * Provided for backward compatibility, use Chart.plugins instead
+ * @namespace Chart.pluginService
+ * @deprecated since version 2.1.5
+ * @todo remove at version 3
+ * @private
+ */
+core_controller.pluginService = core_controller.plugins;
+
+/**
+ * Provided for backward compatibility, inheriting from Chart.PlugingBase has no
+ * effect, instead simply create/register plugins via plain JavaScript objects.
+ * @interface Chart.PluginBase
+ * @deprecated since version 2.5.0
+ * @todo remove at version 3
+ * @private
+ */
+core_controller.PluginBase = core_controller.Element.extend({});
+
+/**
+ * Provided for backward compatibility, use Chart.helpers.canvas instead.
+ * @namespace Chart.canvasHelpers
+ * @deprecated since version 2.6.0
+ * @todo remove at version 3
+ * @private
+ */
+core_controller.canvasHelpers = core_controller.helpers.canvas;
+
+/**
+ * Provided for backward compatibility, use Chart.layouts instead.
+ * @namespace Chart.layoutService
+ * @deprecated since version 2.7.3
+ * @todo remove at version 3
+ * @private
+ */
+core_controller.layoutService = core_controller.layouts;
+
+/**
+ * Provided for backward compatibility, not available anymore.
+ * @namespace Chart.LinearScaleBase
+ * @deprecated since version 2.8
+ * @todo remove at version 3
+ * @private
+ */
+core_controller.LinearScaleBase = scale_linearbase;
+
+/**
+ * Provided for backward compatibility, instead we should create a new Chart
+ * by setting the type in the config (`new Chart(id, {type: '{chart-type}'}`).
+ * @deprecated since version 2.8.0
+ * @todo remove at version 3
+ */
+core_controller.helpers.each(
+ [
+ 'Bar',
+ 'Bubble',
+ 'Doughnut',
+ 'Line',
+ 'PolarArea',
+ 'Radar',
+ 'Scatter'
+ ],
+ function(klass) {
+ core_controller[klass] = function(ctx, cfg) {
+ return new core_controller(ctx, core_controller.helpers.merge(cfg || {}, {
+ type: klass.charAt(0).toLowerCase() + klass.slice(1)
+ }));
+ };
+ }
+);
+
+return src;
+
+})));
diff --git a/Translate/resources/lib/jquery.autosize.js b/Translate/resources/lib/jquery.autosize.js
new file mode 100644
index 00000000..8771c81b
--- /dev/null
+++ b/Translate/resources/lib/jquery.autosize.js
@@ -0,0 +1,288 @@
+/*!
+ autosize 4.0.2
+ license: MIT
+ http://www.jacklmoore.com/autosize
+*/
+( function ( global, factory ) {
+ if ( typeof define === 'function' && define.amd ) {
+ define( [ 'module', 'exports' ], factory );
+ } else if ( typeof exports !== 'undefined' ) {
+ factory( module, exports );
+ } else {
+ var mod = {
+ exports: {}
+ };
+ factory( mod, mod.exports );
+ global.autosize = mod.exports;
+ }
+}( this, function ( module, exports ) {
+ 'use strict';
+
+ var map = typeof Map === 'function' ? new Map() : ( function () {
+ var keys = [],
+ values = [];
+
+ return {
+ has: function has( key ) {
+ return keys.indexOf( key ) > -1;
+ },
+ get: function get( key ) {
+ return values[ keys.indexOf( key ) ];
+ },
+ set: function set( key, value ) {
+ if ( keys.indexOf( key ) === -1 ) {
+ keys.push( key );
+ values.push( value );
+ }
+ },
+ delete: function _delete( key ) {
+ var index = keys.indexOf( key );
+ if ( index > -1 ) {
+ keys.splice( index, 1 );
+ values.splice( index, 1 );
+ }
+ }
+ };
+ }() ),
+
+ createEvent = function createEvent( name ) {
+ return new Event( name, { bubbles: true } );
+ };
+ try {
+ new Event( 'test' );
+ } catch ( e ) {
+ // IE does not support `new Event()`
+ createEvent = function createEvent( name ) {
+ var evt = document.createEvent( 'Event' );
+ evt.initEvent( name, true, false );
+ return evt;
+ };
+ }
+
+ function assign( ta ) {
+ if ( !ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || map.has( ta ) ) { return; }
+
+ var heightOffset = null,
+ clientWidth = null,
+ cachedHeight = null;
+
+ function init() {
+ var style = window.getComputedStyle( ta, null );
+
+ if ( style.resize === 'vertical' ) {
+ ta.style.resize = 'none';
+ } else if ( style.resize === 'both' ) {
+ ta.style.resize = 'horizontal';
+ }
+
+ if ( style.boxSizing === 'content-box' ) {
+ heightOffset = -( parseFloat( style.paddingTop ) + parseFloat( style.paddingBottom ) );
+ } else {
+ heightOffset = parseFloat( style.borderTopWidth ) + parseFloat( style.borderBottomWidth );
+ }
+ // Fix when a textarea is not on document body and heightOffset is Not a Number
+ if ( isNaN( heightOffset ) ) {
+ heightOffset = 0;
+ }
+
+ update();
+ }
+
+ function changeOverflow( value ) {
+ {
+ // Chrome/Safari-specific fix:
+ // When the textarea y-overflow is hidden, Chrome/Safari do not reflow the text to account for the space
+ // made available by removing the scrollbar. The following forces the necessary text reflow.
+ var width = ta.style.width;
+ ta.style.width = '0px';
+ // Force reflow:
+ /* jshint ignore:start */
+ ta.offsetWidth;
+ /* jshint ignore:end */
+ ta.style.width = width;
+ }
+
+ ta.style.overflowY = value;
+ }
+
+ function getParentOverflows( el ) {
+ var arr = [];
+
+ while ( el && el.parentNode && el.parentNode instanceof Element ) {
+ if ( el.parentNode.scrollTop ) {
+ arr.push( {
+ node: el.parentNode,
+ scrollTop: el.parentNode.scrollTop
+ } );
+ }
+ el = el.parentNode;
+ }
+
+ return arr;
+ }
+
+ function resize() {
+ if ( ta.scrollHeight === 0 ) {
+ // If the scrollHeight is 0, then the element probably has display:none or is detached from the DOM.
+ return;
+ }
+
+ var overflows = getParentOverflows( ta ),
+ docTop = document.documentElement && document.documentElement.scrollTop; // Needed for Mobile IE (ticket #240)
+
+ ta.style.height = '';
+ ta.style.height = ta.scrollHeight + heightOffset + 'px';
+
+ // used to check if an update is actually necessary on window.resize
+ clientWidth = ta.clientWidth;
+
+ // prevents scroll-position jumping
+ overflows.forEach( function ( el ) {
+ el.node.scrollTop = el.scrollTop;
+ } );
+
+ if ( docTop ) {
+ document.documentElement.scrollTop = docTop;
+ }
+ }
+
+ function update() {
+ resize();
+
+ var styleHeight = Math.round( parseFloat( ta.style.height ) ),
+ computed = window.getComputedStyle( ta, null ),
+
+ // Using offsetHeight as a replacement for computed.height in IE, because IE does not account use of border-box
+ actualHeight = computed.boxSizing === 'content-box' ? Math.round( parseFloat( computed.height ) ) : ta.offsetHeight;
+
+ // The actual height not matching the style height (set via the resize method) indicates that
+ // the max-height has been exceeded, in which case the overflow should be allowed.
+ if ( actualHeight < styleHeight ) {
+ if ( computed.overflowY === 'hidden' ) {
+ changeOverflow( 'scroll' );
+ resize();
+ actualHeight = computed.boxSizing === 'content-box' ? Math.round( parseFloat( window.getComputedStyle( ta, null ).height ) ) : ta.offsetHeight;
+ }
+ } else {
+ // Normally keep overflow set to hidden, to avoid flash of scrollbar as the textarea expands.
+ if ( computed.overflowY !== 'hidden' ) {
+ changeOverflow( 'hidden' );
+ resize();
+ actualHeight = computed.boxSizing === 'content-box' ? Math.round( parseFloat( window.getComputedStyle( ta, null ).height ) ) : ta.offsetHeight;
+ }
+ }
+
+ if ( cachedHeight !== actualHeight ) {
+ cachedHeight = actualHeight;
+ var evt = createEvent( 'autosize:resized' );
+ try {
+ ta.dispatchEvent( evt );
+ } catch ( err ) {
+ // Firefox will throw an error on dispatchEvent for a detached element
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=889376
+ }
+ }
+ }
+
+ var pageResize = function pageResize() {
+ if ( ta.clientWidth !== clientWidth ) {
+ update();
+ }
+ },
+
+ destroy = function ( style ) {
+ window.removeEventListener( 'resize', pageResize, false );
+ ta.removeEventListener( 'input', update, false );
+ ta.removeEventListener( 'keyup', update, false );
+ ta.removeEventListener( 'autosize:destroy', destroy, false );
+ ta.removeEventListener( 'autosize:update', update, false );
+
+ Object.keys( style ).forEach( function ( key ) {
+ ta.style[ key ] = style[ key ];
+ } );
+
+ map.delete( ta );
+ }.bind( ta, {
+ height: ta.style.height,
+ resize: ta.style.resize,
+ overflowY: ta.style.overflowY,
+ overflowX: ta.style.overflowX,
+ wordWrap: ta.style.wordWrap
+ } );
+
+ ta.addEventListener( 'autosize:destroy', destroy, false );
+
+ // IE9 does not fire onpropertychange or oninput for deletions,
+ // so binding to onkeyup to catch most of those events.
+ // There is no way that I know of to detect something like 'cut' in IE9.
+ if ( 'onpropertychange' in ta && 'oninput' in ta ) {
+ ta.addEventListener( 'keyup', update, false );
+ }
+
+ window.addEventListener( 'resize', pageResize, false );
+ ta.addEventListener( 'input', update, false );
+ ta.addEventListener( 'autosize:update', update, false );
+ ta.style.overflowX = 'hidden';
+ ta.style.wordWrap = 'break-word';
+
+ map.set( ta, {
+ destroy: destroy,
+ update: update
+ } );
+
+ init();
+ }
+
+ function destroy( ta ) {
+ var methods = map.get( ta );
+ if ( methods ) {
+ methods.destroy();
+ }
+ }
+
+ function update( ta ) {
+ var methods = map.get( ta );
+ if ( methods ) {
+ methods.update();
+ }
+ }
+
+ var autosize = null;
+
+ // Do nothing in Node.js environment and IE8 (or lower)
+ if ( typeof window === 'undefined' || typeof window.getComputedStyle !== 'function' ) {
+ autosize = function autosize( el ) {
+ return el;
+ };
+ autosize.destroy = function ( el ) {
+ return el;
+ };
+ autosize.update = function ( el ) {
+ return el;
+ };
+ } else {
+ autosize = function autosize( el, options ) {
+ if ( el ) {
+ Array.prototype.forEach.call( el.length ? el : [ el ], function ( x ) {
+ return assign( x, options );
+ } );
+ }
+ return el;
+ };
+ autosize.destroy = function ( el ) {
+ if ( el ) {
+ Array.prototype.forEach.call( el.length ? el : [ el ], destroy );
+ }
+ return el;
+ };
+ autosize.update = function ( el ) {
+ if ( el ) {
+ Array.prototype.forEach.call( el.length ? el : [ el ], update );
+ }
+ return el;
+ };
+ }
+
+ exports.default = autosize;
+ module.exports = exports.default;
+} ) );
diff --git a/Translate/resources/src/.eslintrc.json b/Translate/resources/src/.eslintrc.json
new file mode 100644
index 00000000..cfa86a9b
--- /dev/null
+++ b/Translate/resources/src/.eslintrc.json
@@ -0,0 +1,5 @@
+{
+ "rules": {
+ "no-implicit-globals": "off"
+ }
+}
diff --git a/Translate/resources/src/ext.translate.special.languagestats/entity.selector.css b/Translate/resources/src/ext.translate.special.languagestats/entity.selector.css
new file mode 100644
index 00000000..ea18fff1
--- /dev/null
+++ b/Translate/resources/src/ext.translate.special.languagestats/entity.selector.css
@@ -0,0 +1,8 @@
+.tes-entity-selector .tes-error-label {
+ background: #fee7e6;
+ color: #b32424;
+}
+
+.tes-entity-selector-hide {
+ display: none;
+}
diff --git a/Translate/resources/src/ext.translate.special.languagestats/entity.selector.js b/Translate/resources/src/ext.translate.special.languagestats/entity.selector.js
new file mode 100644
index 00000000..e7950ec2
--- /dev/null
+++ b/Translate/resources/src/ext.translate.special.languagestats/entity.selector.js
@@ -0,0 +1,149 @@
+/**
+ * @class
+ * @extends OO.ui.TextInputWidget
+ * @mixins OO.ui.mixin.LookupElement
+ *
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2022.02
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {Function} [onFail] Callback function triggered when an error occurs
+ * @cfg {Function} [onSelect] Callback function triggered when an item is selected
+ * @cfg {Array} [entityType] Entity type to query for - "groups" and/or "messages"
+ */
+var EntitySelectorWidget = function ( config ) {
+ // Parent constructor
+ OO.ui.TextInputWidget.call( this, {
+ classes: [ 'tes-entity-selector' ],
+ placeholder: mw.msg( 'translate-tes-type-to-search' )
+ } );
+ // Mixin constructors
+ OO.ui.mixin.LookupElement.call( this );
+
+ this.groupNotFoundLabel = new OO.ui.MenuOptionWidget( {
+ label: mw.msg( 'translate-tes-group-not-found' ),
+ disabled: true,
+ highlightable: false,
+ pressable: false,
+ classes: [ 'tes-optgroup-label' ]
+ } );
+
+ this.errorLabel = new OO.ui.MenuOptionWidget( {
+ disabled: true,
+ highlightable: false,
+ pressable: false,
+ icon: 'error',
+ classes: [ 'tes-error-label' ]
+ } );
+
+ var noop = function () {};
+ this.failureCallback = config.onFail || noop;
+ this.selectCallback = config.onSelect || noop;
+ this.entityTypeToFetch = config.entityType;
+ if ( this.entityTypeToFetch && !Array.isArray( this.entityTypeToFetch ) ) {
+ throw new Error( 'entityType must be an array.' );
+ }
+
+ this.selectedEntity = null;
+};
+
+OO.inheritClass( EntitySelectorWidget, OO.ui.TextInputWidget );
+OO.mixinClass( EntitySelectorWidget, OO.ui.mixin.LookupElement );
+
+EntitySelectorWidget.prototype.getLookupRequest = function () {
+ var value = this.getValue();
+ var widget = this;
+
+ if ( value === '' ) {
+ return $.Deferred().resolve( [] );
+ }
+
+ // Detect if there is an existing request pending
+ // and abort it if it is.
+ if ( this.isPending() ) {
+ this.abortLookupRequest();
+ }
+
+ var deferred = $.Deferred();
+ var currentRequestTimeout = setTimeout(
+ function () {
+ currentRequestTimeout = null;
+ makeRequest( value, widget.entityTypeToFetch, deferred, widget.failureCallback );
+ },
+ 250
+ );
+
+ deferred.abort = function () {
+ clearTimeout( currentRequestTimeout );
+ currentRequestTimeout = null;
+ // Stop showing the loader
+ widget.popPending();
+ };
+
+ return deferred;
+};
+
+function makeRequest( value, entityType, deferred, cbFailure ) {
+ var api = new mw.Api();
+ api.get( {
+ action: 'translationentitysearch',
+ query: value,
+ entitytype: entityType
+ } ).then( function ( result ) {
+ deferred.resolve( result.translationentitysearch );
+ }, function ( msg, error ) {
+ mw.log.error( error );
+ cbFailure( error, mw.msg( 'translate-tes-server-error' ) );
+ deferred.resolve( error );
+ } );
+}
+
+EntitySelectorWidget.prototype.getLookupMenuOptionsFromData = function ( response ) {
+ var finalResult = [];
+
+ if ( response && response.error ) {
+ this.errorLabel.setLabel( mw.msg( 'translate-tes-server-error' ) );
+ finalResult.push( this.errorLabel );
+ return finalResult;
+ }
+
+ var groups = response.groups;
+ if ( groups.length === 0 ) {
+ finalResult.push( this.groupNotFoundLabel );
+ return finalResult;
+ }
+
+ for ( var i = 0; i !== groups.length; ++i ) {
+ finalResult.push(
+ new OO.ui.MenuOptionWidget( {
+ data: groups[ i ].group,
+ label: groups[ i ].label
+ } )
+ );
+ }
+
+ return finalResult;
+};
+
+EntitySelectorWidget.prototype.getLookupCacheDataFromResponse = function ( response ) {
+ return response || [];
+};
+
+/**
+ * Override the LookupElement method to use the label as selected value instead
+ * of data.
+ *
+ * @param {OO.ui.MenuOptionWidget} item
+ */
+EntitySelectorWidget.prototype.onLookupMenuChoose = function ( item ) {
+ this.selectedEntity = item;
+ this.setValue( item.getLabel() );
+ this.selectCallback( item.getData() );
+};
+
+EntitySelectorWidget.prototype.getSelectedEntity = function () {
+ return this.selectedEntity.getData();
+};
+
+module.exports = EntitySelectorWidget;
diff --git a/Translate/resources/src/ext.translate.special.languagestats/index.js b/Translate/resources/src/ext.translate.special.languagestats/index.js
new file mode 100644
index 00000000..70215d8a
--- /dev/null
+++ b/Translate/resources/src/ext.translate.special.languagestats/index.js
@@ -0,0 +1,275 @@
+/*!
+ * Collapsing script for Special:LanguageStats in MediaWiki Extension:Translate
+ * @author Krinkle <krinklemail (at) gmail (dot) com>
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later, CC-BY-SA-3.0
+ */
+
+( function () {
+ 'use strict';
+
+ var $columns;
+
+ /**
+ * Add css class to every other visible row.
+ * It's not possible to do zebra colors with CSS only if there are hidden rows.
+ *
+ * @param {jQuery} $table
+ */
+ function doZebra( $table ) {
+ $table.find( 'tr:visible:odd' ).toggleClass( 'tux-statstable-even', false );
+ $table.find( 'tr:visible:even' ).toggleClass( 'tux-statstable-even', true );
+ }
+
+ function addExpanders( $table ) {
+ var $metaRows = $( 'tr.AggregateMessageGroup', $table );
+
+ // Quick return
+ if ( !$metaRows.length ) {
+ return;
+ }
+
+ $metaRows.each( function () {
+ var $parent = $( this ),
+ thisGroupId = $parent.attr( 'data-groupid' ),
+ $children = $( 'tr[data-parentgroup="' + thisGroupId + '"]', $table );
+
+ // Only do the collapse stuff if this Meta-group actually has children on this page
+ if ( !$children.length ) {
+ return;
+ }
+
+ // Build toggle link
+ var $toggler = $( '<span>' ).addClass( 'groupexpander collapsed' )
+ .append(
+ '[',
+ $( '<a>' )
+ .attr( 'href', '#' )
+ .text( mw.msg( 'translate-langstats-expand' ) ),
+ ']'
+ )
+ .on( 'click', function ( e ) {
+ var $el = $( this );
+ // Switch the state and toggle the rows
+ if ( $el.hasClass( 'collapsed' ) ) {
+ $children.removeClass( 'statstable-hide' ).trigger( 'show' );
+ doZebra( $table );
+ $el.removeClass( 'collapsed' ).addClass( 'expanded' );
+ $el.find( '> a' ).text( mw.msg( 'translate-langstats-collapse' ) );
+ } else {
+ $children.addClass( 'statstable-hide' ).trigger( 'hide' );
+ doZebra( $table );
+ $el.addClass( 'collapsed' ).removeClass( 'expanded' );
+ $el.find( '> a' ).text( mw.msg( 'translate-langstats-expand' ) );
+ }
+
+ e.preventDefault();
+ } );
+
+ // Add the toggle link to the first cell of the meta group table-row
+ $parent.find( ' > td' ).first().append( $toggler );
+
+ // Handle hide/show recursively, so that collapsing parent group
+ // hides all sub groups regardless of nesting level
+ $parent.on( 'hide show', function ( event ) {
+ // Reuse $toggle, $parent and $children from parent scope
+ if ( $toggler.hasClass( 'expanded' ) ) {
+ $children.trigger( event.type )[ event.type ]();
+ }
+ } );
+ } );
+
+ // Create, bind and append the toggle-all button
+ var $allChildRows = $( 'tr[data-parentgroup]', $table );
+ var $allTogglesCache = null;
+ var $toggleAllButton = $( '<span>' ).addClass( 'collapsed' )
+ .append(
+ '[',
+ $( '<a>' )
+ .attr( 'href', '#' )
+ .text( mw.msg( 'translate-langstats-expandall' ) ),
+ ']'
+ )
+ .on( 'click', function ( e ) {
+ var $el = $( this ),
+ $allToggles = $allTogglesCache || $( '.groupexpander', $table );
+
+ // Switch the state and toggle the rows
+ // and update the local toggles too
+ if ( $el.hasClass( 'collapsed' ) ) {
+ $allChildRows.removeClass( 'statstable-hide' );
+ $el.add( $allToggles ).removeClass( 'collapsed' ).addClass( 'expanded' );
+ $el.find( '> a' ).text( mw.msg( 'translate-langstats-collapseall' ) );
+ $allToggles.find( '> a' ).text( mw.msg( 'translate-langstats-collapse' ) );
+ } else {
+ $allChildRows.addClass( 'statstable-hide' );
+ $el.add( $allToggles ).addClass( 'collapsed' ).removeClass( 'expanded' );
+ $el.find( '> a' ).text( mw.msg( 'translate-langstats-expandall' ) );
+ $allToggles.find( '> a' ).text( mw.msg( 'translate-langstats-expand' ) );
+ }
+
+ doZebra( $table );
+ e.preventDefault();
+ } );
+
+ // Initially hide them
+ $allChildRows.addClass( 'statstable-hide' );
+ doZebra( $table );
+
+ // Add the toggle-all button above the table
+ $( '<p>' ).addClass( 'groupexpander-all' ).append( $toggleAllButton ).insertBefore( $table );
+ }
+
+ function applySorting( $table ) {
+ var sort = {},
+ re = /#sortable:(\d+)=(asc|desc)/,
+ match = re.exec( location.hash );
+
+ if ( match ) {
+ var index = parseInt( match[ 1 ], 10 );
+ sort[ index ] = match[ 2 ];
+ }
+ $table.tablesorter( { sortList: [ sort ] } );
+
+ $table.on( 'sortEnd.tablesorter', function () {
+ $table.find( '.headerSortDown, .headerSortUp' ).each( function () {
+ var headerIndex = $table.find( 'th' ).index( $( this ) ),
+ dir = $( this ).hasClass( 'headerSortUp' ) ? 'asc' : 'desc';
+ location.hash = 'sortable:' + headerIndex + '=' + dir;
+
+ doZebra( $table );
+ } );
+ } );
+ }
+
+ function narrowTable( $table, enable ) {
+ var labelColumnCount = 1,
+ // 0-indexed
+ defaultValueColumn = 2;
+
+ if ( $columns === undefined ) {
+ $columns = $table.find( 'thead > tr > th ' ).map( function ( index, value ) {
+ return value.textContent;
+ } );
+ }
+
+ var $select = makeValueColumnSelector( $columns, labelColumnCount, defaultValueColumn );
+ // Prevent table sorter from making the select inaccessible
+ $select.on( 'mousedown click', function ( e ) {
+ e.stopPropagation();
+ } ).on( 'change', function () {
+ showValueColumn( $table, $select, labelColumnCount );
+ } );
+
+ if ( enable ) {
+ showValueColumn( $table, $select, labelColumnCount );
+ } else {
+ // Restore original headings
+ $table.find( 'thead > tr > th' ).map( function ( index ) {
+ return $( this ).text( $columns[ index ] );
+ } );
+ $table.find( 'tr > *' ).removeClass( 'statstable-hide' );
+ }
+
+ }
+
+ function makeValueColumnSelector( headings, skip, def ) {
+ var $select = $( '<select>' );
+
+ for ( var i = skip; i < headings.length; i++ ) {
+ $( '<option>' )
+ .text( headings[ i ] )
+ .val( i )
+ .prop( 'selected', i === def )
+ .appendTo( $select );
+ }
+
+ return $select;
+ }
+
+ function showValueColumn( $table, $select, skip ) {
+ var index = parseInt( $select.val(), 10 );
+ var cssQuery = 'th:nth-child(_)'.replace( '_', index + 1 );
+ $table.find( cssQuery ).html( $select );
+
+ for ( var i = 0; i < $select.children().length; i++ ) {
+ cssQuery = 'tr > *:nth-child(_)'.replace( '_', i + skip + 1 );
+ $table.find( cssQuery ).toggleClass( 'statstable-hide', i + skip !== index );
+ }
+ }
+
+ function activateGroupEntitySelector( $group ) {
+ // hide the group selector, and get its value
+ $group.addClass( 'tes-entity-selector-hide' );
+ var groupName = $group.find( 'select option:selected' ).text();
+
+ // load the entity selector and set the value
+ var entitySelector = getEntitySelector( onEntitySelect );
+ entitySelector.setValue( groupName );
+
+ $group.after( entitySelector.$element );
+ }
+
+ function onEntitySelect( selectedItem ) {
+ $( 'select[name="group"]' ).val( selectedItem );
+ }
+
+ function getEntitySelector( onSelect ) {
+ var EntitySelector = require( './entity.selector.js' );
+ return new EntitySelector( {
+ onSelect: onSelect,
+ entityType: [ 'groups' ]
+ } );
+ }
+
+ $( function () {
+ var $table = $( '.statstable' );
+
+ activateGroupEntitySelector( $( '#group' ) );
+
+ // Sometimes the table is not present on the page
+ if ( !$table.length ) {
+ return;
+ }
+
+ // Calculate absolute minimum table width
+ if ( window.ResizeObserver ) {
+ $table.css( 'max-width', '1px' );
+ }
+
+ applySorting( $table );
+ addExpanders( $table );
+
+ if ( !window.ResizeObserver ) {
+ return;
+ }
+
+ var minimumTableWidth;
+ // Hopefully previous stuff have time to render by now to have accurate picture of the width
+ ( window.requestAnimationFrame || setTimeout )( function () {
+ minimumTableWidth = $table.outerWidth();
+ $table.css( 'max-width', '' );
+ } );
+
+ var isNarrowMode;
+ new ResizeObserver( function ( entries ) {
+ var shouldCollapse = entries[ 0 ].contentRect.width < minimumTableWidth;
+ // Some fudge to avoid flapping
+ var shouldExpand = entries[ 0 ].contentRect.width - 20 > minimumTableWidth;
+
+ var newMode;
+ if ( isNarrowMode && shouldExpand ) {
+ newMode = false;
+ } else if ( !isNarrowMode && shouldCollapse ) {
+ newMode = true;
+ } else {
+ newMode = isNarrowMode;
+ }
+
+ if ( newMode !== isNarrowMode ) {
+ isNarrowMode = newMode;
+ narrowTable( $table, isNarrowMode );
+ }
+ } ).observe( $table.parent().get( 0 ) );
+ } );
+}() );
diff --git a/Translate/resources/src/ext.translate.specialTranslationStash/index.css b/Translate/resources/src/ext.translate.specialTranslationStash/index.css
new file mode 100644
index 00000000..52b93d85
--- /dev/null
+++ b/Translate/resources/src/ext.translate.specialTranslationStash/index.css
@@ -0,0 +1,82 @@
+/**
+ * @author Santhosh Thottingal
+ * @license GPL-2.0-or-later
+ * @since 2013.10
+ */
+
+h1.firstHeading {
+ display: none;
+}
+
+h1 {
+ text-decoration: none;
+ border-bottom: 0;
+}
+
+.translate-welcome-header > p {
+ color: #54595d;
+ font-size: 1.2em;
+}
+
+.translate-welcome-header {
+ background-color: #f8f8f8;
+ background-image: linear-gradient( #fafafa, #f8f8f8 );
+ border-bottom: 1px solid #eee;
+ padding: 10px;
+}
+
+.limit-reached > p {
+ color: #57585a;
+ font-size: 1.2em;
+}
+
+.limit-reached {
+ margin-top: 10px;
+ background-color: #fbf9ce;
+ padding: 10px;
+}
+
+.translate-stash-control {
+ color: #54595d;
+ font-size: 1.5em;
+ padding: 35px 10px 20px 5px;
+}
+
+.tux-messagelist {
+ padding: 0 20px;
+ background: none;
+}
+
+.tux-loading-indicator {
+ position: relative;
+ top: 50%;
+ left: 50%;
+}
+
+.messagekey {
+ visibility: hidden;
+}
+
+.message-desc-control,
+.layout-actions .close,
+.tux-message-item,
+.tux-message-item.translated.hide {
+ display: none;
+}
+
+.tux-message:first-child .tux-message-item {
+ border-top: 1px solid #c9c9c9;
+}
+
+.tux-message-item.translated {
+ display: block;
+}
+
+.sourcemessage {
+ top: -10px;
+}
+
+/** Vector 2022 specific fix for CSS grid layouts. See: T313671 */
+.mw-special-TranslationStash.skin-vector-2022 .mw-content-container {
+ overflow-x: auto;
+}
diff --git a/Translate/resources/src/ext.translate.specialTranslationStash/index.js b/Translate/resources/src/ext.translate.specialTranslationStash/index.js
new file mode 100644
index 00000000..b0d501fb
--- /dev/null
+++ b/Translate/resources/src/ext.translate.specialTranslationStash/index.js
@@ -0,0 +1,255 @@
+/*!
+ * TranslationStash front-end logic.
+ *
+ * @author Santhosh Thottingal
+ * @license GPL-2.0-or-later
+ * @since 2013.10
+ */
+'use strict';
+
+var userTranslations = {},
+ TranslationStashStorage = require( './storage.js' ),
+ translationStorage = new TranslationStashStorage();
+
+mw.translate.canTranslate = function () {
+ // At this page, the new translator can translate
+ return true;
+};
+
+function getMessages( messageGroup, language, offset, limit ) {
+ var deferred = new mw.Api().get( {
+ action: 'query',
+ list: 'messagecollection',
+ mcgroup: messageGroup,
+ mclanguage: language,
+ mcoffset: offset,
+ mclimit: limit,
+ mcprop: 'definition'
+ } );
+
+ return deferred.promise();
+}
+
+function addMessage( message ) {
+ var $messageTable = $( '.tux-messagelist' ),
+ sourceLanguage = $messageTable.data( 'sourcelangcode' ),
+ sourceLanguageDir = $.uls.data.getDir( sourceLanguage ),
+ targetLanguage = $messageTable.data( 'targetlangcode' ),
+ targetLanguageDir = $.uls.data.getDir( targetLanguage ),
+ status = message.properties.status,
+ statusClass = 'tux-status-' + status;
+
+ var statusMsg;
+ if ( status === 'translated' ) {
+ // tux-status-translated
+ statusMsg = 'tux-status-' + status;
+ }
+
+ var $messageWrapper = $( '<div>' )
+ .addClass( 'row tux-message' );
+
+ var $message = $( '<div>' )
+ .addClass( 'row message tux-message-item ' + status )
+ .append(
+ $( '<div>' )
+ .addClass( 'eight columns tux-list-message' )
+ .append(
+ $( '<span>' )
+ .addClass( 'tux-list-source' )
+ .attr( {
+ lang: sourceLanguage,
+ dir: sourceLanguageDir
+ } )
+ .text( message.definition ),
+ // Bidirectional isolation.
+ // This should be removed some day when proper
+ // unicode-bidi: isolate
+ // is supported everywhere
+ $( '<span>' )
+ .html( $( document.body ).hasClass( 'rtl' ) ? '&rlm;' : '&lrm;' ),
+ $( '<span>' )
+ .addClass( 'tux-list-translation' )
+ .attr( {
+ lang: targetLanguage,
+ dir: targetLanguageDir
+ } )
+ .text( message.translation || '' )
+ ),
+ $( '<div>' )
+ .addClass( 'two columns tux-list-status text-center' )
+ .append(
+ $( '<span>' )
+ .addClass( statusClass )
+ // The following messages are used here:
+ // * tux-status-optional
+ // * tux-status-fuzzy
+ // * tux-status-proofread
+ // * tux-status-translated
+ // * tux-status-saving
+ // * tux-status-unsaved
+ .text( statusMsg ? mw.msg( statusMsg ) : '' )
+ ),
+ $( '<div>' )
+ .addClass( 'two column tux-list-edit text-right' )
+ .append(
+ $( '<a>' )
+ .attr( {
+ title: mw.msg( 'translate-edit-title', message.key )
+ } )
+ .text( mw.msg( 'tux-edit' ) )
+ )
+ );
+
+ $messageWrapper.append( $message );
+ $messageTable.append( $messageWrapper );
+ // Attach translate editor to the message
+ $messageWrapper.translateeditor( {
+ message: message,
+ storage: translationStorage,
+ onSave: updateStats,
+ onSkip: function () {
+ var $next = this.$editTrigger.next( '.tux-message' );
+
+ // If there is text in the skipped message, avoid showing the
+ // regular "you have unsaved messages" when navigating away,
+ // because there is no way to get back to these messages.
+ this.markUnunsaved();
+
+ // This can happen when it's
+ // the last message in the translation stash
+ if ( !$next.length ) {
+ // Reload the page to get more messages
+ // when we get to the last one
+ window.location.reload();
+ }
+ },
+ onReady: function () {
+ this.$editor.find( '.tux-editor-skip-button' )
+ .text( mw.msg( 'translate-translationstash-skip-button-label' ) );
+ }
+ } );
+}
+
+/**
+ * Updates the translation count at the top of the message list and
+ * displays warning when translation limit has been reached.
+ * Relies on classes stash-stats and tux-status-translated.
+ */
+function updateStats() {
+ var $target = $( '.stash-stats' );
+
+ var count = $( '.tux-status-translated' ).length;
+ if ( count === 0 ) {
+ return;
+ }
+
+ $target.text( mw.msg(
+ 'translate-translationstash-translations',
+ mw.language.convertNumber( count )
+ ) );
+
+ if ( count >= mw.config.get( 'wgTranslateSandboxLimit' ) ) {
+ // Remove the untranslated message to disallow translation beyond the limit
+ $( '.tux-message' ).has( '.untranslated' ).remove();
+
+ // Show a message telling that the limit was reached
+ $( '.limit-reached' )
+ .empty()
+ .append( $( '<h1>' ).text( mw.msg( 'tsb-limit-reached-title' ) ) )
+ .append( $( '<p>' ).text( mw.msg( 'tsb-limit-reached-body' ) ) )
+ .removeClass( 'hide' );
+ }
+}
+
+function loadMessages() {
+ var $messageTable = $( '.tux-messagelist' ),
+ messagegroup = '!sandbox';
+
+ $( '<div>' )
+ .addClass( 'tux-loading-indicator' )
+ .appendTo( $messageTable );
+
+ getMessages( messagegroup, $messageTable.data( 'targetlangcode' ) )
+ .done( function ( result ) {
+ var messages = result.query.messagecollection;
+
+ $messageTable.empty();
+ messages.forEach( function ( message ) {
+ message.properties = {};
+ message.properties.status = 'untranslated';
+
+ message.group = messagegroup;
+ if ( userTranslations[ message.title ] ) {
+ message.translation = userTranslations[ message.title ].translation;
+ message.properties.status = 'translated';
+ }
+
+ addMessage( message );
+ } );
+
+ // Show the editor for the first untranslated message.
+ var $untranslated = $( '.tux-message' )
+ .has( '.tux-message-item.untranslated' )
+ .first();
+ if ( $untranslated.length ) {
+ $untranslated.data( 'translateeditor' ).show();
+ }
+
+ updateStats();
+ } ).fail( function ( errorCode, response ) {
+ $messageTable.empty().addClass( 'error' )
+ .text( 'Error: ' + errorCode + ' - ' +
+ ( response.error && response.error.info || 'Unknown error' )
+ );
+ } );
+}
+
+$( function () {
+ var $messageTable = $( '.tux-messagelist' ),
+ $ulsTrigger = $( '.ext-translate-language-selector > .uls' );
+
+ // Some links in helpers will navigate away by default. But since the messages
+ // will change on this page on every load, we want to avoid that. Force the
+ // links to open on new window/tab.
+ mw.hook( 'mw.translate.editor.showTranslationHelpers' ).add( function ( helpers, $editor ) {
+ $editor.find( 'a' ).prop( 'target', '_blank' );
+ } );
+
+ $ulsTrigger.uls( {
+ ulsPurpose: 'translate-special-translationstash',
+ onSelect: function ( languageCode ) {
+ var languageDetails = mw.translate.getLanguageDetailsForHtml( languageCode );
+
+ $ulsTrigger
+ .find( '.ext-translate-target-language' )
+ .text( languageDetails.autonym )
+ .prop( {
+ lang: languageDetails.code,
+ dir: languageDetails.direction
+ } );
+
+ $messageTable
+ .empty()
+ .data( {
+ targetlangcode: languageCode,
+ targetlangdir: languageDetails.direction
+ } );
+
+ loadMessages();
+ }
+ } ).on( 'keypress', function () {
+ $( this ).trigger( 'click' );
+ } );
+
+ // Get the user translations if any(possibly from an early attempt)
+ // and new messages to try.
+ translationStorage.getUserTranslations()
+ .done( function ( translations ) {
+ if ( translations.translationstash.translations ) {
+ translations.translationstash.translations.forEach( function ( translation ) {
+ userTranslations[ translation.title ] = translation;
+ } );
+ }
+ loadMessages();
+ } );
+} );
diff --git a/Translate/resources/src/ext.translate.specialTranslationStash/storage.js b/Translate/resources/src/ext.translate.specialTranslationStash/storage.js
new file mode 100644
index 00000000..22821aed
--- /dev/null
+++ b/Translate/resources/src/ext.translate.specialTranslationStash/storage.js
@@ -0,0 +1,52 @@
+'use strict';
+
+/**
+ * This class can save translation to translation stash.
+ *
+ * @since 2013.10
+ */
+var TranslationStashStorage = function () {
+ // No-op for now. Could take api module as param for example.
+};
+
+TranslationStashStorage.prototype = {
+ /**
+ * Save the translation.
+ *
+ * @param {string} title The title of the page including language code
+ * to store the translation.
+ * @param {string} translation The translation of the message
+ * @return {jQuery.Promise}
+ */
+ save: function ( title, translation ) {
+ var api = new mw.Api();
+
+ return api.postWithToken( 'csrf', {
+ action: 'translationstash',
+ subaction: 'add',
+ title: title,
+ translation: translation
+ } ).then( function () {
+ // Fake normal save API
+ return { edit: { result: 'Success' } };
+ } );
+ },
+
+ /**
+ * Get the current users translations.
+ *
+ * @param {string} user User name
+ * @return {jQuery.Promise}
+ */
+ getUserTranslations: function ( user ) {
+ var api = new mw.Api();
+
+ return api.postWithToken( 'csrf', {
+ action: 'translationstash',
+ subaction: 'query',
+ username: user
+ } ).promise();
+ }
+};
+
+module.exports = TranslationStashStorage;
diff --git a/Translate/resources/src/ve-translate/.eslintrc.json b/Translate/resources/src/ve-translate/.eslintrc.json
new file mode 100644
index 00000000..1d9cfb0a
--- /dev/null
+++ b/Translate/resources/src/ve-translate/.eslintrc.json
@@ -0,0 +1,5 @@
+{
+ "globals": {
+ "ve": "readonly"
+ }
+}
diff --git a/Translate/resources/src/ve-translate/ve.ce.MWTranslateAnnotationNode.js b/Translate/resources/src/ve-translate/ve.ce.MWTranslateAnnotationNode.js
new file mode 100644
index 00000000..1d000e11
--- /dev/null
+++ b/Translate/resources/src/ve-translate/ve.ce.MWTranslateAnnotationNode.js
@@ -0,0 +1,31 @@
+/*!
+ * VisualEditor ContentEditable MWTranslateAnnotationNode class.
+ */
+
+/**
+ * ContentEditable MediaWiki translate annotation node.
+ *
+ * @class
+ * @abstract
+ * @extends ve.ce.MWAnnotationNode
+ *
+ * @constructor
+ * @param {ve.dm.MWTranslateAnnotationNode} model Model to observe
+ * @param {Object} [config] Configuration options
+ */
+ve.ce.MWTranslateAnnotationNode = function VeCeMWTranslateAnnotationNode() {
+ // Parent constructor
+ ve.ce.MWTranslateAnnotationNode.super.apply( this, arguments );
+};
+
+/* Inheritance */
+
+OO.inheritClass( ve.ce.MWTranslateAnnotationNode, ve.ce.MWAnnotationNode );
+
+/* Static members */
+
+ve.ce.MWTranslateAnnotationNode.static.name = 'mwTranslateAnnotation';
+
+/* Registration */
+
+ve.ce.nodeFactory.register( ve.ce.MWTranslateAnnotationNode );
diff --git a/Translate/resources/src/ve-translate/ve.dm.MWTranslateAnnotationNode.js b/Translate/resources/src/ve-translate/ve.dm.MWTranslateAnnotationNode.js
new file mode 100644
index 00000000..d2e8d898
--- /dev/null
+++ b/Translate/resources/src/ve-translate/ve.dm.MWTranslateAnnotationNode.js
@@ -0,0 +1,58 @@
+/*!
+ * VisualEditor DataModel MWTranslateAnnotationNode class.
+ */
+
+/**
+ * DataModel MediaWiki translate annotation node.
+ *
+ * @class
+ * @abstract
+ * @extends ve.dm.MWAnnotationNode
+ *
+ * @constructor
+ * @param {Object} [element] Reference to element in linear model
+ * @param {ve.dm.Node[]} [children]
+ */
+ve.dm.MWTranslateAnnotationNode = function VeDmMWTranslateAnnotationNode() {
+ // Parent constructor
+ ve.dm.MWTranslateAnnotationNode.super.apply( this, arguments );
+};
+
+/* Inheritance */
+
+OO.inheritClass( ve.dm.MWTranslateAnnotationNode, ve.dm.MWAnnotationNode );
+
+/* Static members */
+
+ve.dm.MWTranslateAnnotationNode.static.name = 'mwTranslateAnnotation';
+
+ve.dm.MWTranslateAnnotationNode.static.matchRdfaTypes = [
+ 'mw:Annotation/translate',
+ 'mw:Annotation/translate/End',
+ 'mw:Annotation/tvar',
+ 'mw:Annotation/tvar/End'
+];
+
+/* Methods */
+
+ve.dm.MWTranslateAnnotationNode.static.toDataElement = function ( domElements ) {
+ // 'Parent' method
+ var element = ve.dm.MWTranslateAnnotationNode.super.static.toDataElement.call( this, domElements );
+
+ element.type = 'mwTranslateAnnotation';
+ return element;
+};
+
+ve.dm.MWTranslateAnnotationNode.prototype.getWikitextTag = function () {
+ var map = {
+ 'mw:Annotation/translate': '<translate>',
+ 'mw:Annotation/translate/End': '</translate>',
+ 'mw:Annotation/tvar': '<tvar>',
+ 'mw:Annotation/tvar/End': '</tvar>'
+ };
+ return map[ this.getAttribute( 'type' ) ];
+};
+
+/* Registration */
+
+ve.dm.modelRegistry.register( ve.dm.MWTranslateAnnotationNode );
diff --git a/Translate/resources/src/ve-translate/ve.ui.MWTranslateAnnotationContextItem.js b/Translate/resources/src/ve-translate/ve.ui.MWTranslateAnnotationContextItem.js
new file mode 100644
index 00000000..a69a0953
--- /dev/null
+++ b/Translate/resources/src/ve-translate/ve.ui.MWTranslateAnnotationContextItem.js
@@ -0,0 +1,64 @@
+/*!
+ * VisualEditor MWTranslateAnnotationContextItem class.
+ */
+
+/**
+ * Context item for a MWTranslateAnnotation
+ *
+ * @class
+ * @extends ve.ui.MWAnnotationContextItem
+ *
+ * @constructor
+ * @param {ve.ui.Context} context Context item is in
+ * @param {ve.dm.Model} model Model item is related to
+ * @param {Object} config Configuration options
+ */
+ve.ui.MWTranslateAnnotationContextItem = function VeUiMWTranslateAnnotationContextItem() {
+ // Parent constructor
+ ve.ui.MWTranslateAnnotationContextItem.super.apply( this, arguments );
+};
+
+/* Inheritance */
+
+OO.inheritClass( ve.ui.MWTranslateAnnotationContextItem, ve.ui.MWAnnotationContextItem );
+
+/* Static Properties */
+
+ve.ui.MWTranslateAnnotationContextItem.static.name = 'mwTranslateAnnotation';
+
+ve.ui.MWTranslateAnnotationContextItem.static.modelClasses = [
+ ve.dm.MWTranslateAnnotationNode
+];
+
+/* Methods */
+
+ve.ui.MWTranslateAnnotationContextItem.prototype.getLabelMessage = function () {
+ var map = {
+ 'mw:Annotation/translate': 'visualeditor-annotations-translate-start',
+ 'mw:Annotation/translate/End': 'visualeditor-annotations-translate-end',
+ 'mw:Annotation/tvar': 'visualeditor-annotations-tvar-start',
+ 'mw:Annotation/tvar/End': 'visualeditor-annotations-tvar-end'
+ };
+
+ var type = this.model.getAttribute( 'type' );
+ // eslint-disable-next-line mediawiki/msg-doc
+ var msg = mw.message( map[ type ] );
+ return msg.text();
+};
+
+ve.ui.MWTranslateAnnotationContextItem.prototype.getDescriptionMessage = function () {
+ var type = this.model.getAttribute( 'type' );
+ if ( type.indexOf( '/End', type.length - 4 ) !== -1 ) {
+ return '';
+ }
+ var map = {
+ 'mw:Annotation/translate': 'visualeditor-annotations-translate-description',
+ 'mw:Annotation/tvar': 'visualeditor-annotations-tvar-description'
+ };
+
+ // eslint-disable-next-line mediawiki/msg-doc
+ var msg = mw.message( map[ type ] );
+ return msg.parseDom();
+};
+
+ve.ui.contextItemFactory.register( ve.ui.MWTranslateAnnotationContextItem );
diff --git a/Translate/scripts/TranslateCliLogger.php b/Translate/scripts/TranslateCliLogger.php
new file mode 100644
index 00000000..b2526fc6
--- /dev/null
+++ b/Translate/scripts/TranslateCliLogger.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Simple helper to log things to the console.
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+use Psr\Log\AbstractLogger;
+
+class TranslateCliLogger extends AbstractLogger {
+ /** @var callable */
+ private $logger;
+
+ public function __construct( callable $logger ) {
+ $this->logger = $logger;
+ }
+
+ public function log( $level, $msg, array $context = [] ) {
+ ( $this->logger )( "LOG $level: $msg" );
+ }
+}
diff --git a/Translate/scripts/TranslateStatsOutput.php b/Translate/scripts/TranslateStatsOutput.php
new file mode 100644
index 00000000..cbeea176
--- /dev/null
+++ b/Translate/scripts/TranslateStatsOutput.php
@@ -0,0 +1,25 @@
+<?php
+
+/**
+ * Provides heading, summaryheading and free text addition for stats output in
+ * wiki format.
+ *
+ * @ingroup Stats
+ */
+class TranslateStatsOutput extends WikiStatsOutput {
+ public function heading() {
+ echo '{| class="mw-ext-translate-groupstatistics sortable wikitable" border="2" ' .
+ 'cellpadding="4" cellspacing="0" style="background-color: #F9F9F9; border: ' .
+ '1px #AAAAAA solid; border-collapse: collapse; clear:both;" width="100%"' . "\n";
+ }
+
+ public function summaryheading() {
+ echo "\n" . '{| class="mw-ext-translate-groupstatistics sortable wikitable" ' .
+ 'border="2" cellpadding="4" cellspacing="0" style="background-color: #F9F9F9; ' .
+ 'border: 1px #AAAAAA solid; border-collapse: collapse; clear:both;"' . "\n";
+ }
+
+ public function addFreeText( $freeText ) {
+ echo $freeText;
+ }
+}
diff --git a/Translate/scripts/__bootstrap.php b/Translate/scripts/__bootstrap.php
new file mode 100644
index 00000000..d401adaa
--- /dev/null
+++ b/Translate/scripts/__bootstrap.php
@@ -0,0 +1,19 @@
+<?php
+declare( strict_types = 1 );
+
+/*
+ * Boilerpate code for bootstrapping maintenance scripts.
+ *
+ * This code must be in global scope. Callers must define $class;
+ */
+$env = getenv( 'MW_INSTALL_PATH' );
+$IP = $env !== false ? $env : __DIR__ . '/../../..';
+require_once "$IP/maintenance/Maintenance.php";
+// Manually load required classes, as autoloader is not available until RUN_MAINTENANCE_IF_MAIN
+require_once __DIR__ . '/../src/Utilities/BaseMaintenanceScript.php';
+// $maintClass must be after Maintenance.php
+// @phan-suppress-next-line PhanUndeclaredGlobalVariable
+$maintClass = $class;
+$file = strtr( $maintClass, [ 'MediaWiki\\Extension\\Translate\\' => '', '\\' => '/' ] );
+require_once __DIR__ . "/../src/$file.php";
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/Translate/scripts/backport.php b/Translate/scripts/backport.php
new file mode 100644
index 00000000..b38d7781
--- /dev/null
+++ b/Translate/scripts/backport.php
@@ -0,0 +1,6 @@
+<?php
+
+use MediaWiki\Extension\Translate\Synchronization\BackportTranslationsMaintenanceScript;
+
+$class = BackportTranslationsMaintenanceScript::class;
+require_once '__bootstrap.php';
diff --git a/Translate/scripts/characterEditStats.php b/Translate/scripts/characterEditStats.php
new file mode 100644
index 00000000..d8a3d87b
--- /dev/null
+++ b/Translate/scripts/characterEditStats.php
@@ -0,0 +1,144 @@
+<?php
+/**
+ * Show number of characters translated over a given period of time.
+ *
+ * @author Santhosh Thottingal
+ * @copyright Copyright © 2013 Santhosh Thottingal
+ * @license GPL-2.0-or-later
+ * @file
+ * @ingroup Script Stats
+ */
+
+// Standard boilerplate to define $IP
+use MediaWiki\Extension\Translate\SystemUsers\FuzzyBot;
+use MediaWiki\MediaWikiServices;
+
+if ( getenv( 'MW_INSTALL_PATH' ) !== false ) {
+ $IP = getenv( 'MW_INSTALL_PATH' );
+} else {
+ $dir = __DIR__;
+ $IP = "$dir/../../..";
+}
+require_once "$IP/maintenance/Maintenance.php";
+
+class CharacterEditStats extends Maintenance {
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Script to show number of characters translated .' );
+ $this->addOption(
+ 'top',
+ '(optional) Show given number of language codes (default: show all)',
+ false, /*required*/
+ true /*has arg*/
+ );
+ $this->addOption(
+ 'days',
+ '(optional) Calculate for given number of days (default: 30)',
+ false, /*required*/
+ true /*has arg*/
+ );
+ $this->addOption(
+ 'ns',
+ '(optional) Comma separated list of namespace IDs',
+ false, /*required*/
+ true /*has arg*/
+ );
+ $this->requireExtension( 'Translate' );
+ }
+
+ public function execute() {
+ global $wgSitename, $wgTranslateMessageNamespaces;
+
+ $days = (int)$this->getOption( 'days', 30 );
+ $top = (int)$this->getOption( 'top', -1 );
+
+ $namespaces = [];
+ if ( $this->hasOption( 'ns' ) ) {
+ $input = explode( ',', $this->getOption( 'ns' ) );
+
+ foreach ( $input as $namespace ) {
+ if ( is_numeric( $namespace ) ) {
+ $namespaces[] = $namespace;
+ }
+ }
+ } else {
+ $namespaces = $wgTranslateMessageNamespaces;
+ }
+
+ // Select set of edits to report on
+ $rows = $this->getRevisionsFromHistory( $days, $namespaces );
+
+ // Get counts for edits per language code after filtering out edits by FuzzyBot
+ $codes = [];
+
+ foreach ( $rows as $_ ) {
+ // Filter out edits by FuzzyBot
+ if ( $_->user_text === FuzzyBot::getName() ) {
+ continue;
+ }
+
+ $handle = new MessageHandle( Title::newFromText( $_->title ) );
+ $code = $handle->getCode();
+
+ if ( !isset( $codes[$code] ) ) {
+ $codes[$code] = 0;
+ }
+
+ $codes[$code] += $_->length;
+ }
+
+ // Sort counts and report descending up to $top rows.
+ arsort( $codes );
+ $i = 0;
+ $total = 0;
+ $this->output( "Character edit stats for last $days days in $wgSitename\n" );
+ $this->output( "code\tname\tedit\n" );
+ $this->output( "-----------------------\n" );
+ foreach ( $codes as $code => $num ) {
+ if ( $i++ === $top ) {
+ break;
+ }
+ $language = Language::fetchLanguageName( $code );
+ if ( !$language ) {
+ // this will be very rare, but avoid division by zero in next line
+ continue;
+ }
+ $charRatio = mb_strlen( $language, 'UTF-8' ) / strlen( $language );
+ $num = (int)( $num * $charRatio );
+ $total += $num;
+ $this->output( "$code\t$language\t$num\n" );
+ }
+ $this->output( "-----------------------\n" );
+ $this->output( "Total\t\t$total\n" );
+ }
+
+ private function getRevisionsFromHistory( $days, array $namespaces ) {
+ $dbr = wfGetDB( DB_REPLICA );
+ $cutoff = $dbr->addQuotes( $dbr->timestamp( time() - $days * 24 * 3600 ) );
+
+ $revQuery = MediaWikiServices::getInstance()->getRevisionStore()->getQueryInfo( [ 'page' ] );
+ $revUserText = $revQuery['fields']['rev_user_text'] ?? 'rev_user_text';
+
+ $conds = [
+ "rev_timestamp > $cutoff",
+ 'page_namespace' => $namespaces,
+ ];
+
+ $res = $dbr->select(
+ $revQuery['tables'],
+ [
+ 'title' => 'page_title',
+ 'user_text' => $revUserText,
+ 'length' => 'rev_len',
+ ],
+ $conds,
+ __METHOD__,
+ [],
+ $revQuery['joins']
+ );
+ return iterator_to_array( $res );
+ }
+}
+
+$maintClass = CharacterEditStats::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/Translate/scripts/cleanupTranslationProgressStats.php b/Translate/scripts/cleanupTranslationProgressStats.php
new file mode 100644
index 00000000..ce636628
--- /dev/null
+++ b/Translate/scripts/cleanupTranslationProgressStats.php
@@ -0,0 +1,6 @@
+<?php
+
+use MediaWiki\Extension\Translate\Statistics\CleanupTranslationProgressStatsMaintenanceScript;
+
+$class = CleanupTranslationProgressStatsMaintenanceScript::class;
+require_once '__bootstrap.php';
diff --git a/Translate/scripts/clearGroupSyncCache.php b/Translate/scripts/clearGroupSyncCache.php
new file mode 100644
index 00000000..2492f18f
--- /dev/null
+++ b/Translate/scripts/clearGroupSyncCache.php
@@ -0,0 +1,6 @@
+<?php
+
+use MediaWiki\Extension\Translate\Synchronization\ClearGroupSyncCacheMaintenanceScript;
+
+$class = ClearGroupSyncCacheMaintenanceScript::class;
+require_once '__bootstrap.php';
diff --git a/Translate/scripts/completeExternalTranslation.php b/Translate/scripts/completeExternalTranslation.php
new file mode 100644
index 00000000..cf6bb6db
--- /dev/null
+++ b/Translate/scripts/completeExternalTranslation.php
@@ -0,0 +1,6 @@
+<?php
+
+use MediaWiki\Extension\Translate\Synchronization\CompleteExternalTranslationMaintenanceScript;
+
+$class = CompleteExternalTranslationMaintenanceScript::class;
+require_once '__bootstrap.php';
diff --git a/Translate/scripts/createCheckIndex.php b/Translate/scripts/createCheckIndex.php
new file mode 100644
index 00000000..46ba6071
--- /dev/null
+++ b/Translate/scripts/createCheckIndex.php
@@ -0,0 +1,169 @@
+<?php
+/**
+ * Creates serialised database of messages that need checking for problems.
+ *
+ * @author Niklas Laxström
+ * @author Siebrand Mazeland
+ * @copyright Copyright © 2008-2013, Niklas Laxström, Siebrand Mazeland
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+// Standard boilerplate to define $IP
+
+use MediaWiki\Extension\Translate\MessageGroupProcessing\RevTagStore;
+use Mediawiki\Languages\LanguageNameUtils;
+use MediaWiki\MediaWikiServices;
+
+if ( getenv( 'MW_INSTALL_PATH' ) !== false ) {
+ $IP = getenv( 'MW_INSTALL_PATH' );
+} else {
+ $dir = __DIR__;
+ $IP = "$dir/../../..";
+}
+require_once "$IP/maintenance/Maintenance.php";
+
+class CreateCheckIndex extends Maintenance {
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Creates serialised database of messages that need ' .
+ 'checking for problems.' );
+ $this->addOption(
+ 'group',
+ 'Comma separated list of group IDs to process (can use * as wildcard).',
+ true, /*required*/
+ true /*has arg*/
+ );
+
+ $this->addOption(
+ 'verbose',
+ '(optional) Enable verbose logging. Default: off',
+ false, /*required*/
+ false /*has arg*/
+ );
+ $this->requireExtension( 'Translate' );
+ }
+
+ public function execute() {
+ $codes = MediaWikiServices::getInstance()
+ ->getLanguageNameUtils()
+ ->getLanguageNames( null, LanguageNameUtils::ALL );
+
+ // Exclude the documentation language code
+ global $wgTranslateDocumentationLanguageCode;
+ if ( $wgTranslateDocumentationLanguageCode ) {
+ unset( $codes[$wgTranslateDocumentationLanguageCode] );
+ }
+
+ $reqGroupsPattern = $this->getOption( 'group' );
+ $reqGroups = explode( ',', $reqGroupsPattern );
+ $reqGroups = array_map( 'trim', $reqGroups );
+ $reqGroups = MessageGroups::expandWildcards( $reqGroups );
+
+ $verbose = $this->hasOption( 'verbose' );
+
+ if ( !$reqGroups ) {
+ $this->fatalError( "Pattern '$reqGroupsPattern' did not match any groups" );
+ }
+
+ $groups = MessageGroups::singleton()->getGroups();
+ $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+
+ /** @var MessageGroup $g */
+ foreach ( $reqGroups as $id ) {
+ $g = MessageGroups::getGroup( $id );
+ // Aliases may have changed the id
+ $id = $g->getId();
+ $sourceLanguage = $g->getSourceLanguage();
+
+ $validator = $g->getValidator();
+ if ( !$validator ) {
+ unset( $g );
+ $this->output( "Skipping group $id due to lack of validators" );
+ continue;
+ }
+
+ // Initialise messages, using unique definitions if appropriate
+ // @phan-suppress-next-line PhanParamTooMany MessageGroupOld takes two args
+ $collection = $g->initCollection( $sourceLanguage, true );
+ if ( !count( $collection ) ) {
+ continue;
+ }
+
+ $this->output( "Processing group $id: ", $id );
+
+ // Skip source language code
+ $langCodes = $codes;
+ unset( $langCodes[$sourceLanguage] );
+
+ $langCodes = array_keys( $langCodes );
+ sort( $langCodes );
+
+ foreach ( $langCodes as $code ) {
+ $this->output( "$code ", $id );
+
+ $problematic = [];
+
+ $collection->resetForNewLanguage( $code );
+ $collection->loadTranslations();
+ $collection->filter( 'ignored' );
+ $collection->filter( 'fuzzy' );
+ $collection->filter( 'translated', false );
+
+ foreach ( $collection as $key => $message ) {
+ $result = $validator->quickValidate( $message, $code );
+ if ( $result->hasIssues() ) {
+ if ( $verbose ) {
+ // Print it
+ $nsText = $contLang->getNsText( $g->getNamespace() );
+ $this->output( "# [[$nsText:$key/$code]]\n" );
+ }
+
+ // Add it to the array
+ $problematic[] = [ $g->getNamespace(), "$key/$code" ];
+ }
+ }
+
+ self::tagFuzzy( $problematic );
+ }
+ }
+ }
+
+ public static function tagFuzzy( array $problematic ): void {
+ if ( $problematic === [] ) {
+ return;
+ }
+
+ $titleConditions = [];
+ $dbw = wfGetDB( DB_PRIMARY );
+
+ foreach ( $problematic as $p ) {
+ // Normalize page key
+ $title = Title::makeTitleSafe( $p[0], $p[1] );
+ $titleText = $title->getDBkey();
+ $titleConditions[] = $dbw->makeList(
+ [
+ 'page_namespace' => $p[0],
+ 'page_title' => $titleText
+ ],
+ LIST_AND
+ );
+ }
+
+ $conds = $dbw->makeList( $titleConditions, LIST_OR );
+
+ $res = $dbw->select( 'page', [ 'page_id', 'page_latest' ], $conds, __METHOD__ );
+ $inserts = [];
+ foreach ( $res as $row ) {
+ $inserts[] = [
+ 'rt_page' => $row->page_id,
+ 'rt_revision' => $row->page_latest,
+ 'rt_type' => RevTagStore::FUZZY_TAG
+ ];
+ }
+ $dbw->replace( 'revtag', [ [ 'rt_type', 'rt_page', 'rt_revision' ] ], $inserts, __METHOD__ );
+ }
+}
+
+$maintClass = CreateCheckIndex::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/Translate/scripts/createMessageIndex.php b/Translate/scripts/createMessageIndex.php
new file mode 100644
index 00000000..a83585bd
--- /dev/null
+++ b/Translate/scripts/createMessageIndex.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Creates a database of keys in all groups, so that namespace and key can be
+ * used to get the group they belong to. This is used as a fallback when there
+ * is no other way to know which message group a message belongs to.
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+// Standard boilerplate to define $IP
+if ( getenv( 'MW_INSTALL_PATH' ) !== false ) {
+ $IP = getenv( 'MW_INSTALL_PATH' );
+} else {
+ $dir = __DIR__;
+ $IP = "$dir/../../..";
+}
+require_once "$IP/maintenance/Maintenance.php";
+
+class CreateMessageIndex extends Maintenance {
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Creates or updates a message index.' );
+ $this->requireExtension( 'Translate' );
+ }
+
+ public function execute() {
+ MessageGroups::singleton()->recache();
+ MessageIndex::singleton()->rebuild();
+ }
+}
+
+$maintClass = CreateMessageIndex::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/Translate/scripts/deleteEqualTranslations.php b/Translate/scripts/deleteEqualTranslations.php
new file mode 100644
index 00000000..c85e775d
--- /dev/null
+++ b/Translate/scripts/deleteEqualTranslations.php
@@ -0,0 +1,6 @@
+<?php
+
+use MediaWiki\Extension\Translate\Diagnostics\DeleteEqualTranslationsMaintenanceScript;
+
+$class = DeleteEqualTranslationsMaintenanceScript::class;
+require_once '__bootstrap.php';
diff --git a/Translate/scripts/expand-groupspec.php b/Translate/scripts/expand-groupspec.php
new file mode 100644
index 00000000..daaac068
--- /dev/null
+++ b/Translate/scripts/expand-groupspec.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * Script that expands a message group specification (such as page-News*,page-Help*).
+ *
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+// Standard boilerplate to define $IP
+if ( getenv( 'MW_INSTALL_PATH' ) !== false ) {
+ $IP = getenv( 'MW_INSTALL_PATH' );
+} else {
+ $dir = __DIR__;
+ $IP = "$dir/../../..";
+}
+require_once "$IP/maintenance/Maintenance.php";
+
+class TranslateExpandGroupSpec extends Maintenance {
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Expands a message group specification.' );
+ $this->addOption(
+ 'exportable',
+ 'List only groups that can be exported',
+ false, /*required*/
+ false /*has arg*/
+ );
+
+ $this->addArg(
+ 'specification',
+ 'For example page-*,main',
+ true /*required*/
+ );
+ $this->requireExtension( 'Translate' );
+ }
+
+ public function execute() {
+ $spec = $this->getArg( 0 );
+ $patterns = explode( ',', trim( $spec ) );
+ $ids = MessageGroups::expandWildcards( $patterns );
+
+ if ( $this->getOption( 'exportable' ) ) {
+ foreach ( $ids as $index => $id ) {
+ if ( !MessageGroups::getGroup( $id ) instanceof FileBasedMessageGroup ) {
+ unset( $ids[ $index ] );
+ }
+ }
+ }
+
+ if ( $ids !== [] ) {
+ // This should not be affected by --quiet
+ echo implode( "\n", $ids ) . "\n";
+ }
+ }
+}
+
+$maintClass = TranslateExpandGroupSpec::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/Translate/scripts/export-rename-language.php b/Translate/scripts/export-rename-language.php
new file mode 100644
index 00000000..dae5b0da
--- /dev/null
+++ b/Translate/scripts/export-rename-language.php
@@ -0,0 +1,150 @@
+<?php
+/**
+ * Script to automate renaming of language codes in supported repos.
+ *
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+// Standard boilerplate to define $IP
+if ( getenv( 'MW_INSTALL_PATH' ) !== false ) {
+ $IP = getenv( 'MW_INSTALL_PATH' );
+} else {
+ $dir = __DIR__;
+ $IP = "$dir/../../..";
+}
+require_once "$IP/maintenance/Maintenance.php";
+
+class ExportRenameLanguage extends Maintenance {
+ private const MARKER = '%CODE%';
+
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Renames language codes in repos.' );
+ $this->addOption(
+ 'group',
+ 'Comma separated list of group IDs (can use * as wildcard)',
+ true, /*required*/
+ true /*has arg*/
+ );
+ $this->addOption(
+ 'source-language',
+ 'Language code',
+ true, /*required*/
+ true /*has arg*/
+ );
+
+ $this->addOption(
+ 'target-language',
+ 'Language code',
+ true, /*required*/
+ true /*has arg*/
+ );
+ $this->addOption(
+ 'target',
+ 'Target directory for exported files',
+ true, /*required*/
+ true /*has arg*/
+ );
+ $this->requireExtension( 'Translate' );
+ }
+
+ public function execute() {
+ $target = rtrim( $this->getOption( 'target' ), '/' );
+ $sourceLanguage = $this->getOption( 'source-language' );
+ $targetLanguage = $this->getOption( 'target-language' );
+
+ if ( !is_writable( $target ) ) {
+ $this->fatalError( "Target directory is not writable ($target)." );
+ }
+
+ $groupIds = explode( ',', trim( $this->getOption( 'group' ) ) );
+ $groupIds = MessageGroups::expandWildcards( $groupIds );
+ $groups = MessageGroups::getGroupsById( $groupIds );
+ $groups = $this->filterGroups( $groups );
+
+ if ( $groups === [] ) {
+ $this->fatalError( 'EE1: No valid message groups identified.' );
+ }
+
+ foreach ( $groups as $group ) {
+ // Source path can be wrong if source language is the source language of the
+ // message group. This is because getTargetFilename doesn't check definitionFile
+ // property first.
+ $sourcePath = $group->getTargetFilename( $sourceLanguage );
+ $targetPath = $group->getTargetFilename( $targetLanguage );
+
+ if ( !file_exists( "$target/$sourcePath" ) ) {
+ continue;
+ }
+
+ $this->output( "Renaming $sourcePath to $targetPath\n" );
+ $this->renameFile( "$target/$sourcePath", "$target/$targetPath" );
+
+ $pathPattern = "$target/" . $group->getTargetFilename( self::MARKER );
+ $pathToRemove = '';
+ $needsCleanup = $this->needsCleanup( $pathPattern, $sourceLanguage, $pathToRemove );
+ if ( $needsCleanup === 'yes' ) {
+ $this->output( "Removing empty directory $pathToRemove\n" );
+ rmdir( $pathToRemove );
+ } elseif ( $needsCleanup === 'maybe' ) {
+ $this->output( "Not removing (yet?) non-empty directory $pathToRemove\n" );
+ }
+ }
+
+ $this->output( "Done\n" );
+ }
+
+ /**
+ * @param MessageGroup[] $groups
+ * @return FileBasedMessageGroup[]
+ */
+ private function filterGroups( array $groups ) {
+ $return = [];
+ foreach ( $groups as $groupId => $group ) {
+ if ( !$group instanceof FileBasedMessageGroup ) {
+ $this->output( "Skipping non-file based message group $groupId.\n" );
+ continue;
+ }
+ $return[$groupId] = $group;
+ }
+ return $return;
+ }
+
+ private function renameFile( $source, $target ) {
+ // In case %CODE% is in the path
+ if ( !is_dir( dirname( $target ) ) ) {
+ mkdir( dirname( $target ), 0777, true );
+ }
+
+ rename( $source, $target );
+ }
+
+ private function isDirectoryEmpty( $dir ) {
+ return array_diff( scandir( $dir ), [ '..', '.' ] ) === [];
+ }
+
+ private function needsCleanup( $pathPattern, $sourceLanguage, &$pathToRemove ) {
+ do {
+ $currentComponent = basename( $pathPattern );
+ if ( strpos( $currentComponent, self::MARKER ) === false ) {
+ $pathPattern = dirname( $pathPattern );
+ continue;
+ }
+
+ $pathToRemove = str_replace( self::MARKER, $sourceLanguage, $pathPattern );
+ if ( !is_dir( $pathToRemove ) ) {
+ // %CODE% is in the filename
+ return 'no';
+ }
+
+ return $this->isDirectoryEmpty( $pathToRemove ) ? 'yes' : 'maybe';
+ } while ( $currentComponent !== '' );
+
+ // This should never be reached.
+ return 'no';
+ }
+}
+
+$maintClass = ExportRenameLanguage::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/Translate/scripts/export.php b/Translate/scripts/export.php
new file mode 100644
index 00000000..ed802ff4
--- /dev/null
+++ b/Translate/scripts/export.php
@@ -0,0 +1,6 @@
+<?php
+
+use MediaWiki\Extension\Translate\Synchronization\ExportTranslationsMaintenanceScript;
+
+$class = ExportTranslationsMaintenanceScript::class;
+require_once '__bootstrap.php';
diff --git a/Translate/scripts/exportTtmServerDump.php b/Translate/scripts/exportTtmServerDump.php
new file mode 100644
index 00000000..0fc921ba
--- /dev/null
+++ b/Translate/scripts/exportTtmServerDump.php
@@ -0,0 +1,6 @@
+<?php
+
+use MediaWiki\Extension\Translate\TtmServer\ExportTtmServerDumpMaintenanceScript;
+
+$class = ExportTtmServerDumpMaintenanceScript::class;
+require_once '__bootstrap.php';
diff --git a/Translate/scripts/fallbacks-graph.php b/Translate/scripts/fallbacks-graph.php
new file mode 100644
index 00000000..f58e166b
--- /dev/null
+++ b/Translate/scripts/fallbacks-graph.php
@@ -0,0 +1,91 @@
+<?php
+/**
+ * Script for creating graphml xml file of language fallbacks.
+ *
+ * @author Niklas Laxström
+ *
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+use MediaWiki\MediaWikiServices;
+
+// Standard boilerplate to define $IP
+if ( getenv( 'MW_INSTALL_PATH' ) !== false ) {
+ $IP = getenv( 'MW_INSTALL_PATH' );
+} else {
+ $dir = __DIR__;
+ $IP = "$dir/../../..";
+}
+require_once "$IP/maintenance/Maintenance.php";
+
+/// Creates graphml xml file of language fallbacks.
+class FallbacksCompare extends Maintenance {
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Creates graphml xml file of language fallbacks.' );
+ }
+
+ public function execute() {
+ $template = <<<XML
+<?xml version="1.0" encoding="UTF-8"?>
+<graphml
+ xmlns="http://graphml.graphdrawing.org/xmlns"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns
+ http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd"
+ xmlns:y="http://www.yworks.com/xml/graphml">
+
+ <key id="code" for="node" yfiles.type="nodegraphics"/>
+ <graph id="G" edgedefault="directed">
+$1
+ </graph>
+</graphml>
+
+XML;
+
+ $langs = MediaWikiServices::getInstance()
+ ->getLanguageNameUtils()
+ ->getLanguageNames();
+ $nodes = $edges = [];
+ foreach ( $langs as $code => $name ) {
+ $fallbacks = Language::getFallbacksFor( $code, Language::STRICT_FALLBACKS );
+ if ( $fallbacks === [] ) {
+ continue;
+ }
+
+ $nodes[$code] = $this->createNode( $code );
+
+ $prev = $code;
+ foreach ( $fallbacks as $fb ) {
+ $nodes[$fb] = $this->createNode( $fb );
+ $edges[$fb . $prev] = Xml::element( 'edge', [ 'source' => $prev, 'target' => $fb ] );
+ $prev = $fb;
+ }
+ }
+
+ $output = array_merge( $nodes, $edges );
+ $output = "\t\t" . implode( "\n\t\t", $output );
+ echo str_replace( '$1', $output, $template );
+ }
+
+ protected function createNode( $code ) {
+ return Xml::openElement( 'node', [ 'id' => $code ] )
+ . Xml::openElement( 'data', [ 'key' => 'code' ] )
+ . Xml::openElement( 'y:Shapenode' )
+ . Xml::element(
+ 'y:Geometry',
+ [ 'height' => 40, 'width' => max( 40, 20 * strlen( $code ) ) ],
+ ''
+ )
+ . Xml::element( 'y:NodeLabel', [ 'fontSize' => '24' ], $code )
+ . Xml::element( 'y:BorderStyle', [ 'hasColor' => 'false' ], '' )
+ . Xml::element( 'y:Fill', [ 'hasColor' => 'false' ], '' )
+ . Xml::closeElement( 'y:Shapenode' )
+ . Xml::closeElement( 'data' )
+ . Xml::closeElement( 'node' );
+ }
+}
+
+$maintClass = FallbacksCompare::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/Translate/scripts/findUnsynchronizedDefinitions.php b/Translate/scripts/findUnsynchronizedDefinitions.php
new file mode 100644
index 00000000..a82664d0
--- /dev/null
+++ b/Translate/scripts/findUnsynchronizedDefinitions.php
@@ -0,0 +1,6 @@
+<?php
+
+use MediaWiki\Extension\Translate\Diagnostics\FindUnsynchronizedDefinitionsMaintenanceScript;
+
+$class = FindUnsynchronizedDefinitionsMaintenanceScript::class;
+require_once '__bootstrap.php';
diff --git a/Translate/scripts/fuzzy.php b/Translate/scripts/fuzzy.php
new file mode 100644
index 00000000..9e44896e
--- /dev/null
+++ b/Translate/scripts/fuzzy.php
@@ -0,0 +1,5 @@
+<?php
+use MediaWiki\Extension\Translate\Diagnostics\FuzzyTranslationsMaintenanceScript;
+
+$class = FuzzyTranslationsMaintenanceScript::class;
+require_once '__bootstrap.php';
diff --git a/Translate/scripts/groupStatistics.php b/Translate/scripts/groupStatistics.php
new file mode 100644
index 00000000..59a6f8ca
--- /dev/null
+++ b/Translate/scripts/groupStatistics.php
@@ -0,0 +1,671 @@
+<?php
+/**
+ * Commandline script to general statistics about the localisation level of
+ * one or more message groups.
+ *
+ * @file
+ * @ingroup Script Stats
+ * @author Niklas Laxström
+ * @author Siebrand Mazeland
+ * @copyright Copyright © 2007-2013, Niklas Laxström, Siebrand Mazeland
+ * @license GPL-2.0-or-later
+ */
+
+// Standard boilerplate to define $IP
+if ( getenv( 'MW_INSTALL_PATH' ) !== false ) {
+ $IP = getenv( 'MW_INSTALL_PATH' );
+} else {
+ $dir = __DIR__;
+ $IP = "$dir/../../..";
+}
+require_once "$IP/maintenance/Maintenance.php";
+
+class GroupStatistics extends Maintenance {
+ /**
+ * Array of the most spoken languages in the world.
+ * Source: https://stats.wikimedia.org/EN/Sitemap.htm.
+ *
+ * Key value pairs of:
+ * [MediaWiki localisation code] => array(
+ * [position in top 50],
+ * [speakers in millions],
+ * [continent where localisation is spoken]
+ * )
+ */
+ public $mostSpokenLanguages = [
+ 'en' => [ 1, 1500, 'multiple' ],
+ 'zh-hans' => [ 2, 1300, 'asia' ],
+ 'zh-hant' => [ 2, 1300, 'asia' ],
+ 'hi' => [ 3, 550, 'asia' ],
+ 'ar' => [ 4, 530, 'multiple' ],
+ 'es' => [ 5, 500, 'multiple' ],
+ 'ms' => [ 6, 300, 'asia' ],
+ 'pt' => [ 7, 290, 'multiple' ],
+ 'pt-br' => [ 7, 290, 'america' ],
+ 'ru' => [ 8, 278, 'multiple' ],
+ 'id' => [ 9, 250, 'asia' ],
+ 'bn' => [ 10, 230, 'asia' ],
+ 'fr' => [ 11, 200, 'multiple' ],
+ 'de' => [ 12, 185, 'europe' ],
+ 'ja' => [ 13, 132, 'asia' ],
+ 'fa' => [ 14, 107, 'asia' ],
+ 'pnb' => [ 15, 104, 'asia' ], // Most spoken variant
+ 'tl' => [ 16, 90, 'asia' ],
+ 'mr' => [ 17, 90, 'asia' ],
+ 'vi' => [ 18, 80, 'asia' ],
+ 'jv' => [ 19, 80, 'asia' ],
+ 'te' => [ 20, 80, 'asia' ],
+ 'ko' => [ 21, 78, 'asia' ],
+ 'wuu' => [ 22, 77, 'asia' ],
+ 'arz' => [ 23, 76, 'africa' ],
+ 'th' => [ 24, 73, 'asia' ],
+ 'yue' => [ 25, 71, 'asia' ],
+ 'tr' => [ 26, 70, 'multiple' ],
+ 'it' => [ 27, 70, 'europe' ],
+ 'ta' => [ 28, 66, 'asia' ],
+ 'ur' => [ 29, 60, 'asia' ],
+ 'my' => [ 30, 52, 'asia' ],
+ 'sw' => [ 31, 50, 'africa' ],
+ 'nan' => [ 32, 49, 'asia' ],
+ 'kn' => [ 33, 47, 'asia' ],
+ 'gu' => [ 34, 46, 'asia' ],
+ 'uk' => [ 35, 45, 'europe' ],
+ 'pl' => [ 36, 43, 'europe' ],
+ 'sd' => [ 37, 41, 'asia' ],
+ 'ha' => [ 38, 39, 'africa' ],
+ 'ml' => [ 39, 37, 'asia' ],
+ 'gan-hans' => [ 40, 35, 'asia' ],
+ 'gan-hant' => [ 40, 35, 'asia' ],
+ 'hak' => [ 41, 34, 'asia' ],
+ 'or' => [ 42, 31, 'asia' ],
+ 'ne' => [ 43, 30, 'asia' ],
+ 'ro' => [ 44, 28, 'europe' ],
+ 'su' => [ 45, 27, 'asia' ],
+ 'az' => [ 46, 27, 'asia' ],
+ 'nl' => [ 47, 27, 'europe' ],
+ 'zu' => [ 48, 26, 'africa' ],
+ 'ps' => [ 49, 26, 'asia' ],
+ 'ckb' => [ 50, 26, 'asia' ],
+ 'ku-latn' => [ 50, 26, 'asia' ],
+ ];
+ /**
+ * Variable with key-value pairs with a named index and an array of key-value
+ * pairs where the key is a MessageGroup ID and the value is a weight of the
+ * group in the sum of the values for all the groups in the array.
+ *
+ * Definitions in this variable can be used to report weighted meta localisation
+ * scores for the 50 most spoken languages.
+ *
+ * @todo Allow weighted reporting for all available languages.
+ */
+ public $localisedWeights = [
+ 'wikimedia' => [
+ // 'core-0-mostused' => 40,
+ 'core' => 50,
+ 'ext-0-wikimedia' => 50
+ ],
+ 'fundraiser' => [
+ 'ext-di-di' => 16,
+ 'ext-di-pfpg' => 84,
+ ],
+ 'mediawiki' => [
+ // 'core-0-mostused' => 30,
+ 'core' => 50,
+ 'ext-0-wikimedia' => 25,
+ 'ext-0-all' => 25
+ ]
+ ];
+ /**
+ * Code map to map localisation codes to Wikimedia project codes. Only
+ * exclusion and remapping is defined here. It is assumed that the first part
+ * of the localisation code is the WMF project name otherwise (zh-hans -> zh).
+ */
+ public $wikimediaCodeMap = [
+ // Codes containing a dash
+ 'bat-smg' => 'bat-smg',
+ 'cbk-zam' => 'cbk-zam',
+ 'map-bms' => 'map-bms',
+ 'nds-nl' => 'nds-nl',
+ 'roa-rup' => 'roa-rup',
+ 'roa-tara' => 'roa-tara',
+
+ // Remaps
+ 'be-tarask' => 'be-x-old',
+ 'gsw' => 'als',
+ 'ike-cans' => 'iu',
+ 'ike-latn' => 'iu',
+ 'lzh' => 'zh-classical',
+ 'nan' => 'zh-min-nan',
+ 'vro' => 'fiu-vro',
+ 'yue' => 'zh-yue',
+
+ // Ignored language codes. See reason.
+ 'als' => '', // gsw
+ 'be-x-old' => '', // be-tarask
+ 'crh' => '', // crh-*
+ 'de-at' => '', // de
+ 'de-ch' => '', // de
+ 'de-formal' => '', // de, not reporting formal form
+ 'dk' => '', // da
+ 'en-au' => '', // en
+ 'en-ca' => '', // no MW code
+ 'en-gb' => '', // no MW code
+ 'es-419' => '', // no MW code
+ 'fiu-vro' => '', // vro
+ 'gan' => '', // gan-*
+ 'got' => '', // extinct. not reporting formal form
+ 'hif' => '', // hif-*
+ 'hu-formal' => '', // not reporting
+ 'iu' => '', // ike-*
+ 'kk' => '', // kk-*
+ 'kk-cn' => '', // kk-arab
+ 'kk-kz' => '', // kk-cyrl
+ 'kk-tr' => '', // kk-latn
+ 'ko-kp' => '', // ko
+ 'ku' => '', // ku-*
+ 'ku-arab' => '', // ckb
+ 'nb' => '', // no
+ 'nl-be' => '', // no MW code
+ 'nl-informal' => '', // nl, not reporting informal form
+ 'ruq' => '', // ruq-*
+ 'simple' => '', // en
+ 'sr' => '', // sr-*
+ 'tg' => '', // tg-*
+ 'tp' => '', // tokipona
+ 'tt' => '', // tt-*
+ 'ug' => '', // ug-*
+ 'zh' => '', // zh-*
+ 'zh-classical' => '', // lzh
+ 'zh-cn' => '', // zh
+ 'zh-sg' => '', // zh
+ 'zh-hk' => '', // zh
+ 'zh-min-nan' => '', // nan
+ 'zh-mo' => '', // zh
+ 'zh-my' => '', // zh
+ 'zh-tw' => '', // zh
+ 'zh-yue' => '', // yue
+ ];
+
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Script to generate statistics about the localisation ' .
+ 'level of one or more message groups.' );
+ $this->addOption(
+ 'groups',
+ '(optional) Comma separated list of groups',
+ false, /*required*/
+ true /*has arg*/
+ );
+ $this->addOption(
+ 'output',
+ '(optional) csv: Comma Separated Values, wiki: MediaWiki syntax, ' .
+ 'text: Text with tabs. Default: default',
+ false, /*required*/
+ true /*has arg*/
+ );
+ $this->addOption(
+ 'skiplanguages',
+ '(optional) Comma separated list of languages to be skipped',
+ false, /*required*/
+ true /*has arg*/
+ );
+ $this->addOption(
+ 'skipzero',
+ '(optional) Skip languages that do not have any localisation at all'
+ );
+ $this->addOption(
+ 'legenddetail',
+ '(optional) Page name for legend to be transcluded at the top of the details table',
+ false, /*required*/
+ true /*has arg*/
+ );
+ $this->addOption(
+ 'legendsummary',
+ '(optional) Page name for legend to be transcluded at the top of the summary table',
+ false, /*required*/
+ true /*has arg*/
+ );
+ $this->addOption(
+ 'fuzzy',
+ '(optional) Add column for fuzzy counts'
+ );
+ $this->addOption(
+ 'speakers',
+ '(optional) Add column for number of speakers (est.). ' .
+ 'Only valid when combined with "most"'
+ );
+ $this->addOption(
+ 'nol10n',
+ '(optional) Do not add localised language name if I18ntags is installed'
+ );
+ $this->addOption(
+ 'continent',
+ '(optional) Add a continent column. Only available when output is ' .
+ '"wiki" or not specified.'
+ );
+ $this->addOption(
+ 'summary',
+ '(optional) Add a summary with counts and scores per continent category ' .
+ 'and totals. Only available for a valid "most" value.',
+ false, /*required*/
+ true /*has arg*/
+ );
+ $this->addOption(
+ 'wmfscore',
+ 'Only output WMF language code and weighted score for all ' .
+ 'language codes for weighing group "wikimedia" in CSV. This ' .
+ 'report must keep a stable layout as it is used/will be ' .
+ 'used in the Wikimedia statistics.'
+ );
+ $this->addOption(
+ 'most',
+ '(optional) "mediawiki" or "wikimedia". Report on the 50 most ' .
+ 'spoken languages. Skipzero is ignored. If a valid scope is ' .
+ 'defined, the group list and fuzzy are ignored and the ' .
+ 'localisation levels are weighted and reported.',
+ false, /*required*/
+ true /*has arg*/
+ );
+ $this->requireExtension( 'Translate' );
+ }
+
+ public function execute() {
+ $output = $this->getOption( 'output', 'default' );
+
+ // Select an output engine
+ switch ( $output ) {
+ case 'wiki':
+ $out = new WikiStatsOutput();
+ break;
+ case 'text':
+ $out = new TextStatsOutput();
+ break;
+ case 'csv':
+ $out = new CsvStatsOutput();
+ break;
+ default:
+ $out = new TranslateStatsOutput();
+ }
+
+ $skipLanguages = [];
+ if ( $this->hasOption( 'skiplanguages' ) ) {
+ $skipLanguages = array_map(
+ 'trim',
+ explode( ',', $this->getOption( 'skiplanguages' ) )
+ );
+ }
+
+ $reportScore = false;
+ // Check if score should be reported and prepare weights
+ $most = $this->getOption( 'most' );
+ $weights = [];
+ if ( $most && isset( $this->localisedWeights[$most] ) ) {
+ $reportScore = true;
+
+ foreach ( $this->localisedWeights[$most] as $weight ) {
+ $weights[] = $weight;
+ }
+ }
+
+ // check if l10n should be done
+ $l10n = false;
+ if ( ( $output === 'wiki' || $output === 'default' ) &&
+ !$this->hasOption( 'nol10n' )
+ ) {
+ $l10n = true;
+ }
+
+ $wmfscore = $this->hasOption( 'wmfscore' );
+
+ // Get groups from input
+ $groups = [];
+ if ( $reportScore ) {
+ $reqGroups = array_keys( $this->localisedWeights[$most] );
+ } elseif ( $wmfscore ) {
+ $reqGroups = array_keys( $this->localisedWeights['wikimedia'] );
+ } else {
+ $reqGroups = array_map( 'trim', explode( ',', $this->getOption( 'groups' ) ) );
+ }
+
+ // List of all groups
+ $allGroups = MessageGroups::singleton()->getGroups();
+
+ // Get list of valid groups
+ foreach ( $reqGroups as $id ) {
+ // Page translation group ids use spaces which are not nice on command line
+ $id = str_replace( '_', ' ', $id );
+ if ( isset( $allGroups[$id] ) ) {
+ $groups[$id] = $allGroups[$id];
+ } else {
+ $this->output( "Unknown group: $id" );
+ }
+ }
+
+ if ( $wmfscore ) {
+ // Override/set parameters
+ $out = new CsvStatsOutput();
+ $reportScore = true;
+
+ $weights = [];
+ foreach ( $this->localisedWeights['wikimedia'] as $weight ) {
+ $weights[] = $weight;
+ }
+ $wmfscores = [];
+ }
+
+ if ( !count( $groups ) ) {
+ $this->fatalError( 'No groups given' );
+ }
+
+ // List of all languages.
+ $languages = TranslateUtils::getLanguageNames( null );
+ // Default sorting order by language code, users can sort wiki output.
+ ksort( $languages );
+
+ if ( $this->hasOption( 'legenddetail' ) ) {
+ $out->addFreeText( '{{' . $this->getOption( 'legenddetail' ) . "}}\n" );
+ }
+
+ $totalWeight = 0;
+ if ( $reportScore ) {
+ if ( $wmfscore ) {
+ foreach ( $this->localisedWeights['wikimedia'] as $weight ) {
+ $totalWeight += $weight;
+ }
+ } else {
+ foreach ( $this->localisedWeights[$most] as $weight ) {
+ $totalWeight += $weight;
+ }
+ }
+ }
+
+ $showContinent = $this->getOption( 'continent' );
+ if ( !$wmfscore ) {
+ // Output headers
+ $out->heading();
+
+ $out->blockstart();
+
+ if ( $most ) {
+ $out->element( ( $l10n ? '{{int:translate-gs-pos}}' : 'Pos.' ), true );
+ }
+
+ $out->element( ( $l10n ? '{{int:translate-gs-code}}' : 'Code' ), true );
+ $out->element( ( $l10n ? '{{int:translate-page-language}}' : 'Language' ), true );
+ if ( $showContinent ) {
+ $out->element( ( $l10n ? '{{int:translate-gs-continent}}' : 'Continent' ), true );
+ }
+
+ if ( $most && $this->hasOption( 'speakers' ) ) {
+ $out->element( ( $l10n ? '{{int:translate-gs-speakers}}' : 'Speakers' ), true );
+ }
+
+ if ( $reportScore ) {
+ $out->element(
+ ( $l10n ? '{{int:translate-gs-score}}' : 'Score' ) . ' (' . $totalWeight . ')',
+ true
+ );
+ }
+
+ /** @var MessageGroup $g */
+ foreach ( $groups as $g ) {
+ // Add unprocessed description of group as heading
+ if ( $reportScore ) {
+ $gid = $g->getId();
+ $heading = $g->getLabel() . ' (' . $this->localisedWeights[$most][$gid] . ')';
+ } else {
+ $heading = $g->getLabel();
+ }
+ $out->element( $heading, true );
+ if ( !$reportScore && $this->hasOption( 'fuzzy' ) ) {
+ $out->element( ( $l10n ? '{{int:translate-percentage-fuzzy}}' : 'Fuzzy' ), true );
+ }
+ }
+
+ $out->blockend();
+ }
+
+ $rows = [];
+ foreach ( $languages as $code => $name ) {
+ // Skip list
+ if ( in_array( $code, $skipLanguages ) ) {
+ continue;
+ }
+ $rows[$code] = [];
+ }
+
+ foreach ( $groups as $groupName => $g ) {
+ $stats = MessageGroupStats::forGroup( $groupName );
+
+ // Perform the statistic calculations on every language
+ foreach ( $languages as $code => $name ) {
+ // Skip list
+ if ( !$most && in_array( $code, $skipLanguages ) ) {
+ continue;
+ }
+
+ // Do not calculate if we do not need it for anything.
+ if ( $wmfscore && isset( $this->wikimediaCodeMap[$code] )
+ && $this->wikimediaCodeMap[$code] === ''
+ ) {
+ continue;
+ }
+
+ // If --most is set, skip all other
+ if ( $most && !isset( $this->mostSpokenLanguages[$code] ) ) {
+ continue;
+ }
+
+ $total = $stats[$code][MessageGroupStats::TOTAL];
+ $translated = $stats[$code][MessageGroupStats::TRANSLATED];
+ $fuzzy = $stats[$code][MessageGroupStats::FUZZY];
+
+ $rows[$code][] = [ false, $translated, $total ];
+
+ if ( $this->hasOption( 'fuzzy' ) ) {
+ $rows[$code][] = [ true, $fuzzy, $total ];
+ }
+ }
+ }
+
+ // init summary array
+ $summarise = false;
+ if ( $this->hasOption( 'summary' ) ) {
+ $summarise = true;
+ $summary = [];
+ }
+
+ foreach ( $languages as $code => $name ) {
+ // Skip list
+ if ( !$most && in_array( $code, $skipLanguages ) ) {
+ continue;
+ }
+
+ // Skip unneeded
+ if ( $wmfscore && isset( $this->wikimediaCodeMap[$code] )
+ && $this->wikimediaCodeMap[$code] === ''
+ ) {
+ continue;
+ }
+
+ // If --most is set, skip all other
+ if ( $most && !isset( $this->mostSpokenLanguages[$code] ) ) {
+ continue;
+ }
+
+ $columns = $rows[$code];
+
+ $allZero = true;
+ foreach ( $columns as $fields ) {
+ if ( (int)$fields[1] !== 0 ) {
+ $allZero = false;
+ }
+ }
+
+ // Skip dummy languages if requested
+ if ( $allZero && $this->hasOption( 'skipzero' ) ) {
+ continue;
+ }
+
+ // Output the row
+ if ( !$wmfscore ) {
+ $out->blockstart();
+ }
+
+ // Fill language position field
+ if ( $most ) {
+ $out->element( $this->mostSpokenLanguages[$code][0] );
+ }
+
+ // Fill language name field
+ if ( !$wmfscore ) {
+ // Fill language code field
+ $out->element( $code );
+
+ if ( $l10n && function_exists( 'efI18nTagsInit' ) ) {
+ $out->element( '{{#languagename:' . $code . '}}' );
+ } else {
+ $out->element( $name );
+ }
+ }
+
+ // Fill continent field
+ if ( $showContinent ) {
+ if ( $this->mostSpokenLanguages[$code][2] === 'multiple' ) {
+ $continent = ( $l10n ? '{{int:translate-gs-multiple}}' : 'Multiple' );
+ } else {
+ $continent = $l10n ?
+ '{{int:timezoneregion-' . $this->mostSpokenLanguages[$code][2] . '}}' :
+ ucfirst( $this->mostSpokenLanguages[$code][2] );
+ }
+
+ $out->element( $continent );
+ }
+
+ // Fill speakers field
+ if ( $most && $this->hasOption( 'speakers' ) ) {
+ $out->element( number_format( $this->mostSpokenLanguages[$code][1] ) );
+ }
+
+ // Fill the score field
+ if ( $reportScore ) {
+ // Keep count
+ $i = 0;
+ // Start with 0 points
+ $score = 0;
+
+ foreach ( $columns as $fields ) {
+ list( , $upper, $total ) = $fields;
+ // Weigh the score and add it to the current score
+ $score += ( $weights[$i] * $upper ) / $total;
+ $i++;
+ }
+
+ // Report a round numbers
+ $score = number_format( $score, 0 );
+
+ if ( $summarise ) {
+ $continent = $this->mostSpokenLanguages[$code][2];
+ if ( isset( $summary[$continent] ) ) {
+ $newcount = $summary[$continent][0] + 1;
+ $newscore = $summary[$continent][1] + (int)$score;
+ } else {
+ $newcount = 1;
+ $newscore = $score;
+ }
+
+ $summary[$continent] = [ $newcount, $newscore ];
+ }
+
+ if ( $wmfscore ) {
+ // Multiple variants can be used for the same wiki.
+ // Store the scores in an array and output them later
+ // when they can be averaged.
+ $wmfcode = $this->wikimediaCodeMap[$code] ?? explode( '-', $code, 2 )[0];
+
+ if ( isset( $wmfscores[$wmfcode] ) ) {
+ $count = $wmfscores[$wmfcode]['count'] + 1;
+ $tmpWmfScore = (int)$wmfscores[$wmfcode]['score'];
+ $tmpWmfCount = (int)$wmfscores[$wmfcode]['count'];
+ $score = ( ( $tmpWmfCount * $tmpWmfScore ) + (int)$score ) / $count;
+ $wmfscores[$wmfcode] = [ 'score' => $score, 'count' => $count ];
+ } else {
+ $wmfscores[$wmfcode] = [ 'score' => $score, 'count' => 1 ];
+ }
+ } else {
+ $out->element( $score );
+ }
+ }
+
+ // Fill fields for groups
+ if ( !$wmfscore ) {
+ foreach ( $columns as $fields ) {
+ list( $invert, $upper, $total ) = $fields;
+ $c = $out->formatPercent( $upper, $total, $invert );
+ $out->element( $c );
+ }
+
+ $out->blockend();
+ }
+ }
+
+ $out->footer();
+
+ if ( $reportScore && $this->hasOption( 'summary' ) ) {
+ if ( $this->hasOption( 'legendsummary' ) ) {
+ $out->addFreeText( '{{' . $this->getOption( 'legendsummary' ) . "}}\n" );
+ }
+
+ $out->summaryheading();
+
+ $out->blockstart();
+
+ $out->element( $l10n ? '{{int:translate-gs-continent}}' : 'Continent', true );
+ $out->element( $l10n ? '{{int:translate-gs-count}}' : 'Count', true );
+ $out->element( $l10n ? '{{int:translate-gs-avgscore}}' : 'Avg. score', true );
+
+ $out->blockend();
+
+ ksort( $summary );
+
+ $totals = [ 0, 0 ];
+
+ foreach ( $summary as $key => $values ) {
+ $out->blockstart();
+
+ if ( $key === 'multiple' ) {
+ $out->element( $l10n ? '{{int:translate-gs-multiple}}' : 'Multiple' );
+ } else {
+ $out->element( $l10n ? '{{int:timezoneregion-' . $key . '}}' : ucfirst( $key ) );
+ }
+ $out->element( $values[0] );
+ $out->element( number_format( $values[1] / $values[0] ) );
+
+ $out->blockend();
+
+ $totals[0] += $values[0];
+ $totals[1] += $values[1];
+ }
+
+ $out->blockstart();
+ $out->element( $l10n ? '{{int:translate-gs-total}}' : 'Total' );
+ $out->element( $totals[0] );
+ $out->element( number_format( $totals[1] / $totals[0] ) );
+ $out->blockend();
+
+ $out->footer();
+ }
+
+ // Custom output
+ if ( $wmfscore ) {
+ ksort( $wmfscores );
+
+ foreach ( $wmfscores as $code => $stats ) {
+ echo $code . ';' . number_format( $stats['score'] ) . ";\n";
+ }
+ }
+ }
+}
+
+$maintClass = GroupStatistics::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/Translate/scripts/importTranslationsFromCsv.php b/Translate/scripts/importTranslationsFromCsv.php
new file mode 100644
index 00000000..0e3791cb
--- /dev/null
+++ b/Translate/scripts/importTranslationsFromCsv.php
@@ -0,0 +1,5 @@
+<?php
+use MediaWiki\Extension\Translate\MessageGroupProcessing\ImportTranslationsFromCsv;
+
+$class = ImportTranslationsFromCsv::class;
+require_once '__bootstrap.php';
diff --git a/Translate/scripts/languageeditstats.php b/Translate/scripts/languageeditstats.php
new file mode 100644
index 00000000..2cea8ed0
--- /dev/null
+++ b/Translate/scripts/languageeditstats.php
@@ -0,0 +1,109 @@
+<?php
+/**
+ * Shows a top list of language codes with edits in a given time period
+ *
+ * @author Niklas Laxström
+ * @author Siebrand Mazeland
+ * @copyright Copyright © 2008-2010 Niklas Laxström, Siebrand Mazeland
+ * @license GPL-2.0-or-later
+ * @file
+ * @ingroup Script Stats
+ */
+
+// Standard boilerplate to define $IP
+use MediaWiki\Extension\Translate\SystemUsers\FuzzyBot;
+
+if ( getenv( 'MW_INSTALL_PATH' ) !== false ) {
+ $IP = getenv( 'MW_INSTALL_PATH' );
+} else {
+ $dir = __DIR__;
+ $IP = "$dir/../../..";
+}
+require_once "$IP/maintenance/Maintenance.php";
+
+class Languageeditstats extends Maintenance {
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Script to show number of edits per language for all message groups.' );
+ $this->addOption(
+ 'top',
+ '(optional) Show given number of language codes (default: 10)',
+ false, /*required*/
+ true /*has arg*/
+ );
+ $this->addOption(
+ 'days',
+ '(optional) Calculate for given number of days (default: 7)',
+ false, /*required*/
+ true /*has arg*/
+ );
+ $this->addOption(
+ 'bots',
+ '(optional) Include bot edits'
+ );
+ $this->addOption(
+ 'ns',
+ '(optional) Comma separated list of namespace IDs',
+ false, /*required*/
+ true /*has arg*/
+ );
+ $this->requireExtension( 'Translate' );
+ }
+
+ public function execute() {
+ $hours = ( $this->getOption( 'days' ) ?: 7 ) * 24;
+ $top = (int)$this->getOption( 'top' ) ?: 10;
+ $bots = $this->hasOption( 'bots' );
+
+ $namespaces = [];
+ if ( $this->hasOption( 'ns' ) ) {
+ $input = explode( ',', $this->getOption( 'ns' ) );
+
+ foreach ( $input as $namespace ) {
+ if ( is_numeric( $namespace ) ) {
+ $namespaces[] = $namespace;
+ }
+ }
+ }
+
+ /**
+ * Select set of edits to report on
+ */
+ $rows = TranslateUtils::translationChanges( $hours, $bots, $namespaces );
+
+ /**
+ * Get counts for edits per language code after filtering out edits by FuzzyBot
+ */
+ $codes = [];
+ foreach ( $rows as $_ ) {
+ // Filter out edits by FuzzyBot
+ if ( $_->rc_user_text === FuzzyBot::getName() ) {
+ continue;
+ }
+
+ [ , $code ] = TranslateUtils::figureMessage( $_->rc_title );
+
+ if ( !isset( $codes[$code] ) ) {
+ $codes[$code] = 0;
+ }
+
+ $codes[$code]++;
+ }
+
+ /**
+ * Sort counts and report descending up to $top rows.
+ */
+ arsort( $codes );
+ $i = 0;
+ foreach ( $codes as $code => $num ) {
+ if ( $i++ === $top ) {
+ break;
+ }
+
+ $this->output( "$code\t$num\n" );
+ }
+ }
+}
+
+$maintClass = Languageeditstats::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/Translate/scripts/migrate-schema2.php b/Translate/scripts/migrate-schema2.php
new file mode 100644
index 00000000..1b0ccf45
--- /dev/null
+++ b/Translate/scripts/migrate-schema2.php
@@ -0,0 +1,72 @@
+<?php
+/**
+ * Script to convert Translate extension database schema to v2
+ *
+ * @author Niklas Laxström
+ * @copyright Copyright © 2011, Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+// Standard boilerplate to define $IP
+if ( getenv( 'MW_INSTALL_PATH' ) !== false ) {
+ $IP = getenv( 'MW_INSTALL_PATH' );
+} else {
+ $dir = __DIR__;
+ $IP = "$dir/../../..";
+}
+require_once "$IP/maintenance/Maintenance.php";
+
+/**
+ * Script to convert Translate extension database schema to v2.
+ * Essentially gets rid of revtag_type table, which was unnecessary
+ * abstraction.
+ */
+class TSchema2 extends Maintenance {
+
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Migrates database schema to version 2.' );
+ $this->requireExtension( 'Translate' );
+ }
+
+ public function execute() {
+ $dbw = wfGetDB( DB_PRIMARY );
+ if ( !$dbw->tableExists( 'revtag', __METHOD__ ) ) {
+ $this->fatalError( "Table revtag doesn't exist. Translate extension is not installed?" );
+ }
+
+ if ( !$dbw->tableExists( 'revtag_type', __METHOD__ ) ) {
+ $this->fatalError( "Table revtag_type doesn't exist. Migration is already done." );
+ }
+
+ if ( $dbw->getType() !== 'mysql' ) {
+ $this->error( 'This migration script only supports mysql. Please help ' .
+ "us to write routine for {$dbw->getType()}.", 1 );
+ }
+
+ $table = $dbw->tableName( 'revtag' );
+ $dbw->query( "ALTER TABLE $table MODIFY rt_type varbinary(60) not null", __METHOD__ );
+
+ $res = $dbw->select(
+ 'revtag_type',
+ [ 'rtt_id', 'rtt_name' ],
+ [],
+ __METHOD__
+ );
+
+ foreach ( $res as $row ) {
+ $dbw->update(
+ 'revtag',
+ [ 'rt_type' => $row->rtt_name ],
+ [ 'rt_type' => (string)$row->rtt_id ],
+ __METHOD__
+ );
+ }
+
+ $dbw->dropTable( 'revtag_type', __METHOD__ );
+ }
+}
+
+$maintClass = TSchema2::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/Translate/scripts/moveTranslatableBundle.php b/Translate/scripts/moveTranslatableBundle.php
new file mode 100644
index 00000000..5f0c54d5
--- /dev/null
+++ b/Translate/scripts/moveTranslatableBundle.php
@@ -0,0 +1,6 @@
+<?php
+
+use MediaWiki\Extension\Translate\PageTranslation\MoveTranslatableBundleMaintenanceScript;
+
+$class = MoveTranslatableBundleMaintenanceScript::class;
+require_once '__bootstrap.php';
diff --git a/Translate/scripts/moveTranslatablePage.php b/Translate/scripts/moveTranslatablePage.php
new file mode 100644
index 00000000..012aca9c
--- /dev/null
+++ b/Translate/scripts/moveTranslatablePage.php
@@ -0,0 +1,12 @@
+<?php
+
+use MediaWiki\Extension\Translate\PageTranslation\MoveTranslatableBundleMaintenanceScript;
+
+trigger_error(
+ 'The script moveTranslatablePage.php has been deprecated. '
+ . 'Use moveTranslatableBundle.php instead.',
+ E_USER_DEPRECATED
+ );
+
+$class = MoveTranslatableBundleMaintenanceScript::class;
+require_once '__bootstrap.php';
diff --git a/Translate/scripts/plural-comparison.php b/Translate/scripts/plural-comparison.php
new file mode 100644
index 00000000..a1ba9116
--- /dev/null
+++ b/Translate/scripts/plural-comparison.php
@@ -0,0 +1,162 @@
+<?php
+/**
+ * Script for comparing different plural implementations.
+ *
+ * @author Niklas Laxström
+ *
+ * @copyright Copyright © 2010, Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+use CLDRPluralRuleParser\Evaluator;
+use MediaWiki\Languages\LanguageNameUtils;
+use MediaWiki\MediaWikiServices;
+
+// Standard boilerplate to define $IP
+if ( getenv( 'MW_INSTALL_PATH' ) !== false ) {
+ $IP = getenv( 'MW_INSTALL_PATH' );
+} else {
+ $IP = __DIR__ . '/../../..';
+}
+require_once "$IP/maintenance/Maintenance.php";
+
+/// Script for comparing different plural implementations.
+class PluralCompare extends Maintenance {
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Script for comparing different plural implementations.' );
+ }
+
+ public function execute() {
+ $mwLanguages = $this->loadMediaWiki();
+ $gtLanguages = $this->loadGettext();
+ $clLanguages = $this->loadCLDR();
+
+ $all = MediaWikiServices::getInstance()
+ ->getLanguageNameUtils()
+ ->getLanguageNames( null, LanguageNameUtils::ALL );
+ $allkeys = array_keys( $all + $mwLanguages + $gtLanguages + $clLanguages );
+ sort( $allkeys );
+
+ $this->output( sprintf( "%12s %3s %3s %4s\n", 'Code', 'MW', 'Get', 'CLDR' ) );
+ foreach ( $allkeys as $code ) {
+ $mw = isset( $mwLanguages[$code] ) ? '+' : '';
+ $gt = isset( $gtLanguages[$code] ) ? '+' : '';
+ $cl = isset( $clLanguages[$code] ) ? '+' : '';
+
+ if ( $mw === '' ) {
+ $fallbacks = Language::getFallbacksFor( $code );
+ foreach ( $fallbacks as $fcode ) {
+ if ( $fcode !== 'en' && isset( $mwLanguages[$fcode] ) ) {
+ $mw = '.';
+ }
+ }
+ }
+
+ $error = '';
+ if ( substr_count( sprintf( '%s%s%s', $mw, $gt, $cl ), '+' ) > 1 ) {
+ $error = $this->tryMatch( $code, $mw, $gtLanguages, $clLanguages );
+ }
+
+ $this->output( sprintf( "%12s %-3s %-3s %-4s %s\n", $code, $mw, $gt, $cl, $error ) );
+ }
+ }
+
+ protected function tryMatch( $code, $mws, $gtLanguages, $clLanguages ) {
+ if ( $mws !== '' ) {
+ $mwExp = true;
+ $lang = Language::factory( $code );
+ } else {
+ $mwExp = false;
+ }
+
+ if ( isset( $gtLanguages[$code] ) ) {
+ $gtExp = 'return (int) ' . str_replace( 'n', '$i', $gtLanguages[$code] ) . ';';
+ } else {
+ $gtExp = false;
+ }
+
+ $cldrExp = $clLanguages[$code] ?? false;
+
+ for ( $i = 0; $i <= 250; $i++ ) {
+ $mw = $gt = $cl = '?';
+
+ if ( $mwExp ) {
+ // @phan-suppress-next-line PhanPossiblyUndeclaredVariable
+ $exp = $lang->getCompiledPluralRules();
+ $mw = Evaluator::evaluateCompiled( $i, $exp );
+ }
+
+ if ( $gtExp ) {
+ $gt = eval( $gtExp );
+ }
+
+ if ( $cldrExp ) {
+ $cl = Evaluator::evaluate( $i, $cldrExp );
+ }
+
+ if ( self::comp( $mw, $gt ) && self::comp( $gt, $cl ) && self::comp( $cl, $mw ) ) {
+ continue;
+ }
+
+ return "$i: $mw $gt $cl";
+ }
+
+ return '';
+ }
+
+ public static function comp( $a, $b ) {
+ return $a === '?' || $b === '?' || $a === $b;
+ }
+
+ protected function loadPluralFile( $fileName ) {
+ $doc = new DOMDocument;
+ $doc->load( $fileName );
+ $rulesets = $doc->getElementsByTagName( 'pluralRules' );
+ $plurals = [];
+ foreach ( $rulesets as $ruleset ) {
+ $codes = $ruleset->getAttribute( 'locales' );
+ $rules = [];
+ $ruleElements = $ruleset->getElementsByTagName( 'pluralRule' );
+ foreach ( $ruleElements as $elt ) {
+ $rules[] = $elt->nodeValue;
+ }
+ foreach ( explode( ' ', $codes ) as $code ) {
+ $plurals[$code] = $rules;
+ }
+ }
+
+ return $plurals;
+ }
+
+ public function loadCLDR() {
+ global $IP;
+
+ return $this->loadPluralFile( "$IP/languages/data/plurals.xml" );
+ }
+
+ public function loadMediaWiki() {
+ global $IP;
+
+ $rules = $this->loadPluralFile( "$IP/languages/data/plurals.xml" );
+ $rulesMW = $this->loadPluralFile( "$IP/languages/data/plurals-mediawiki.xml" );
+
+ return array_merge( $rules, $rulesMW );
+ }
+
+ public function loadGettext() {
+ $gtData = file_get_contents( __DIR__ . '/../data/plural-gettext.txt' );
+ $gtLanguages = [];
+ foreach ( preg_split( '/\n|\r/', $gtData, -1, PREG_SPLIT_NO_EMPTY ) as $line ) {
+ list( $code, $rule ) = explode( "\t", $line );
+ $rule = preg_replace( '/^.*?plural=/', '', $rule );
+ $gtLanguages[$code] = $rule;
+ }
+
+ return $gtLanguages;
+ }
+}
+
+$maintClass = PluralCompare::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/Translate/scripts/poimport.php b/Translate/scripts/poimport.php
new file mode 100644
index 00000000..e5fd509c
--- /dev/null
+++ b/Translate/scripts/poimport.php
@@ -0,0 +1,322 @@
+<?php
+/**
+ * Imports gettext files exported from Special:Translate back.
+ *
+ * @author Niklas Laxström
+ * @author Siebrand Mazeland
+ * @copyright Copyright © 2007-2013 Niklas Laxström, Siebrand Mazeland
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+use MediaWiki\MediaWikiServices;
+
+// Standard boilerplate to define $IP
+if ( getenv( 'MW_INSTALL_PATH' ) !== false ) {
+ $IP = getenv( 'MW_INSTALL_PATH' );
+} else {
+ $dir = __DIR__;
+ $IP = "$dir/../../..";
+}
+require_once "$IP/maintenance/Maintenance.php";
+
+class Poimport extends Maintenance {
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Po file importer (does not make changes unless specified).' );
+ $this->addOption(
+ 'file',
+ 'Gettext file to import (Translate specific formatting)',
+ true, /*required*/
+ true /*has arg*/
+ );
+ $this->addOption(
+ 'user',
+ 'User who makes edits to wiki',
+ true, /*required*/
+ true /*has arg*/
+ );
+ $this->addOption(
+ 'really',
+ '(optional) Actually make changes',
+ false, /*required*/
+ false /*has arg*/
+ );
+ $this->requireExtension( 'Translate' );
+ }
+
+ public function execute() {
+ // Parse the po file.
+ $p = new PoImporter( $this->getOption( 'file' ) );
+ $p->setProgressCallback( [ $this, 'myOutput' ] );
+ list( $changes, $group ) = $p->parse();
+
+ if ( !count( $changes ) ) {
+ $this->output( "No changes to import\n" );
+ exit( 0 );
+ }
+
+ // Import changes to wiki.
+ $w = new WikiWriter(
+ $changes,
+ $group,
+ $this->getOption( 'user' ),
+ !$this->hasOption( 'really' )
+ );
+
+ $w->setProgressCallback( [ $this, 'myOutput' ] );
+ $w->execute();
+ }
+
+ /**
+ * Public alternative for protected Maintenance::output() as we need to get
+ * messages from the ChangeSyncer class to the commandline.
+ * @param string $text The text to show to the user
+ * @param string|null $channel Unique identifier for the channel.
+ * @param bool $error Whether this is an error message
+ */
+ public function myOutput( $text, $channel = null, $error = false ) {
+ if ( $error ) {
+ $this->error( $text );
+ } else {
+ $this->output( $text, $channel );
+ }
+ }
+}
+
+/**
+ * Parses a po file that has been exported from Mediawiki. Other files are not
+ * supported.
+ */
+class PoImporter {
+ /** @var callable Function to report progress updates */
+ private $progressCallback;
+ /**
+ * Path to file to parse.
+ * @var string
+ */
+ private $file;
+
+ /** @param string $file File to import */
+ public function __construct( $file ) {
+ $this->file = $file;
+ }
+
+ public function setProgressCallback( $callback ) {
+ $this->progressCallback = $callback;
+ }
+
+ /// @see Maintenance::output for param docs
+ protected function reportProgress( $text, $channel = null, $severity = 'status' ) {
+ if ( is_callable( $this->progressCallback ) ) {
+ $useErrorOutput = $severity === 'error';
+ call_user_func( $this->progressCallback, $text, $channel, $useErrorOutput );
+ }
+ }
+
+ /**
+ * Loads translations for comparison.
+ *
+ * @param string $id Id of MessageGroup.
+ * @param string $code Language code.
+ * @return MessageCollection
+ */
+ protected function initMessages( $id, $code ) {
+ $group = MessageGroups::getGroup( $id );
+
+ $messages = $group->initCollection( $code );
+ $messages->loadTranslations();
+
+ return $messages;
+ }
+
+ /**
+ * Parses relevant stuff from the po file.
+ * @return array|bool
+ */
+ public function parse() {
+ $data = file_get_contents( $this->file );
+ $data = str_replace( "\r\n", "\n", $data );
+
+ $matches = [];
+ if ( preg_match( '/X-Language-Code:\s+(.*)\\\n/', $data, $matches ) ) {
+ $code = $matches[1];
+ $this->reportProgress( "Detected language as $code", 'code' );
+ } else {
+ $this->reportProgress( 'Unable to determine language code', 'code', 'error' );
+
+ return false;
+ }
+
+ if ( preg_match( '/X-Message-Group:\s+(.*)\\\n/', $data, $matches ) ) {
+ $groupId = $matches[1];
+ $this->reportProgress( "Detected message group as $groupId", 'group' );
+ } else {
+ $this->reportProgress( 'Unable to determine message group', 'group', 'error' );
+
+ return false;
+ }
+
+ $contents = $this->initMessages( $groupId, $code );
+
+ echo "----\n";
+
+ $poformat = '".*"\n?(^".*"$\n?)*';
+ $quotePattern = '/(^"|"$\n?)/m';
+
+ $sections = preg_split( '/\n{2,}/', $data );
+ $changes = [];
+ foreach ( $sections as $section ) {
+ $matches = [];
+ if ( preg_match( "/^msgctxt\s($poformat)/mx", $section, $matches ) ) {
+ // Remove quoting
+ $key = preg_replace( $quotePattern, '', $matches[1] );
+
+ // Ignore unknown keys
+ if ( !isset( $contents[$key] ) ) {
+ continue;
+ }
+ } else {
+ continue;
+ }
+ $matches = [];
+ if ( preg_match( "/^msgstr\s($poformat)/mx", $section, $matches ) ) {
+ // Remove quoting
+ $translation = preg_replace( $quotePattern, '', $matches[1] );
+ // Restore new lines and remove quoting
+ $translation = stripcslashes( $translation );
+ } else {
+ continue;
+ }
+
+ // Fuzzy messages
+ if ( preg_match( '/^#, fuzzy$/m', $section ) ) {
+ $translation = TRANSLATE_FUZZY . $translation;
+ }
+
+ $oldtranslation = (string)$contents[$key]->translation();
+
+ if ( $translation !== $oldtranslation ) {
+ if ( $translation === '' ) {
+ $this->reportProgress( "Skipping empty translation in the po file for $key!\n" );
+ } else {
+ if ( $oldtranslation === '' ) {
+ $this->reportProgress( "New translation for $key\n" );
+ } else {
+ $this->reportProgress( "Translation of $key differs:\n$translation\n" );
+ }
+ $changes["$key/$code"] = $translation;
+ }
+ }
+ }
+
+ return [ $changes, $groupId ];
+ }
+}
+
+/**
+ * Import changes to wiki as given user
+ */
+class WikiWriter {
+ /** @var callable|null Function to report progress updates */
+ private $progressCallback;
+ /** @var User */
+ private $user;
+ /** @var string[] */
+ private $changes;
+ /** @var bool */
+ private $dryrun;
+ /** @var MessageGroup|null */
+ private $group;
+
+ /**
+ * @param string[] $changes Array of key/langcode => translation.
+ * @param string $groupId Group ID.
+ * @param string $user User who makes the edits in wiki.
+ * @param bool $dryrun Do not do anything that affects the database.
+ */
+ public function __construct( array $changes, $groupId, $user, $dryrun = true ) {
+ $this->changes = $changes;
+ $this->group = MessageGroups::getGroup( $groupId );
+ $this->user = User::newFromName( $user );
+ $this->dryrun = $dryrun;
+ }
+
+ public function setProgressCallback( $callback ) {
+ $this->progressCallback = $callback;
+ }
+
+ /// @see Maintenance::output for param docs
+ protected function reportProgress( $text, $channel, $severity = 'status' ) {
+ if ( is_callable( $this->progressCallback ) ) {
+ $useErrorOutput = $severity === 'error';
+ call_user_func( $this->progressCallback, $text, $channel, $useErrorOutput );
+ }
+ }
+
+ /**
+ * Updates pages on by one.
+ */
+ public function execute() {
+ if ( !$this->group ) {
+ $this->reportProgress( 'Given group does not exist.', 'groupId', 'error' );
+
+ return;
+ }
+
+ if ( !$this->user->idForName() ) {
+ $this->reportProgress( 'Given user does not exist.', 'user', 'error' );
+
+ return;
+ }
+
+ $count = count( $this->changes );
+ $this->reportProgress( "Going to update $count pages.", 'pagecount' );
+
+ $ns = $this->group->getNamespace();
+
+ foreach ( $this->changes as $title => $text ) {
+ $this->updateMessage( $ns, $title, $text );
+ }
+ }
+
+ /**
+ * Actually adds the new translation.
+ * @param int $namespace
+ * @param string $page
+ * @param string $text
+ */
+ private function updateMessage( $namespace, $page, $text ) {
+ $title = Title::makeTitleSafe( $namespace, $page );
+
+ if ( !$title instanceof Title ) {
+ $this->reportProgress( 'INVALID TITLE!', $page, 'error' );
+
+ return;
+ }
+ $this->reportProgress( "Updating {$title->getPrefixedText()}... ", $title );
+
+ if ( $this->dryrun ) {
+ $this->reportProgress( 'DRY RUN!', $title );
+
+ return;
+ }
+
+ $page = MediaWikiServices::getInstance()->getWikiPageFactory()->newFromTitle( $title );
+ $content = ContentHandler::makeContent( $text, $title );
+ $status = $page->doUserEditContent(
+ $content,
+ $this->user,
+ 'Updating translation from gettext import'
+ );
+
+ if ( $status === true || ( is_object( $status ) && $status->isOK() ) ) {
+ $this->reportProgress( 'OK!', $title );
+ } else {
+ $this->reportProgress( 'Failed!', $title );
+ }
+ }
+}
+
+$maintClass = Poimport::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/Translate/scripts/populateFuzzy.php b/Translate/scripts/populateFuzzy.php
new file mode 100644
index 00000000..023f8912
--- /dev/null
+++ b/Translate/scripts/populateFuzzy.php
@@ -0,0 +1,107 @@
+<?php
+/**
+ * A script to populate fuzzy tags to revtag table.
+ *
+ * @author Niklas Laxström
+ * @copyright Copyright © 2009-2013, Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+// Standard boilerplate to define $IP
+
+use MediaWiki\Extension\Translate\MessageGroupProcessing\RevTagStore;
+use MediaWiki\MediaWikiServices;
+use MediaWiki\Revision\SlotRecord;
+
+if ( getenv( 'MW_INSTALL_PATH' ) !== false ) {
+ $IP = getenv( 'MW_INSTALL_PATH' );
+} else {
+ $dir = __DIR__;
+ $IP = "$dir/../../..";
+}
+require_once "$IP/maintenance/Maintenance.php";
+
+/// A script to populate fuzzy tags to revtag table.
+class PopulateFuzzy extends Maintenance {
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'A script to populate fuzzy tags to revtag table.' );
+ $this->addOption(
+ 'namespace',
+ '(optional) Namepace name or id',
+ /*required*/false,
+ /*has arg*/true
+ );
+ $this->setBatchSize( 5000 );
+ $this->requireExtension( 'Translate' );
+ }
+
+ public function execute() {
+ global $wgTranslateMessageNamespaces;
+
+ $namespace = $this->getOption( 'namespace', $wgTranslateMessageNamespaces );
+ $nsInfo = MediaWikiServices::getInstance()->getNamespaceInfo();
+ if ( is_string( $namespace ) && !$nsInfo->exists( $namespace ) ) {
+ $namespace = $nsInfo->getCanonicalIndex( $namespace );
+ if ( $namespace === null ) {
+ $this->fatalError( 'Bad namespace' );
+ }
+ }
+
+ $dbw = MediaWikiServices::getInstance()->getDBLoadBalancer()
+ ->getMaintenanceConnectionRef( DB_PRIMARY );
+ $revStore = MediaWikiServices::getInstance()->getRevisionStore();
+ $queryInfo = $revStore->getQueryInfo( [ 'page' ] );
+
+ $limit = $this->getBatchSize();
+ $offset = 0;
+ while ( true ) {
+ $inserts = [];
+ $this->output( '.', 0 );
+ $options = [ 'LIMIT' => $limit, 'OFFSET' => $offset ];
+ $res = $dbw->select(
+ $queryInfo['tables'],
+ $queryInfo['fields'],
+ [
+ 'page_latest = rev_id',
+ 'page_namespace' => $namespace,
+ ],
+ __METHOD__,
+ $options,
+ $queryInfo['joins']
+ );
+
+ if ( !$res->numRows() ) {
+ break;
+ }
+
+ $slots = $revStore->getContentBlobsForBatch( $res, [ SlotRecord::MAIN ] )->getValue();
+ foreach ( $res as $r ) {
+ if ( isset( $slots[$r->rev_id] ) ) {
+ $text = $slots[$r->rev_id][SlotRecord::MAIN]->blob_data;
+ } else {
+ $content = $revStore->newRevisionFromRow( $r )
+ ->getContent( SlotRecord::MAIN );
+ $text = TranslateUtils::getTextFromTextContent( $content );
+ }
+ if ( strpos( $text, TRANSLATE_FUZZY ) !== false ) {
+ $inserts[] = [
+ 'rt_page' => $r->page_id,
+ 'rt_revision' => $r->rev_id,
+ 'rt_type' => RevTagStore::FUZZY_TAG
+ ];
+ }
+ }
+
+ $offset += $limit;
+
+ if ( $inserts ) {
+ $dbw->replace( 'revtag', [ [ 'rt_type', 'rt_page', 'rt_revision' ] ], $inserts, __METHOD__ );
+ }
+ }
+ }
+}
+
+$maintClass = PopulateFuzzy::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/Translate/scripts/processMessageChanges.php b/Translate/scripts/processMessageChanges.php
new file mode 100644
index 00000000..d9e75e94
--- /dev/null
+++ b/Translate/scripts/processMessageChanges.php
@@ -0,0 +1,196 @@
+<?php
+/**
+ * Script for processing message changes in file based message groups.
+ *
+ * @author Niklas Laxström
+ *
+ * @copyright Copyright © 2012-2013, Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+// Standard boilerplate to define $IP
+if ( getenv( 'MW_INSTALL_PATH' ) !== false ) {
+ $IP = getenv( 'MW_INSTALL_PATH' );
+} else {
+ $dir = __DIR__;
+ $IP = "$dir/../../..";
+}
+require_once "$IP/maintenance/Maintenance.php";
+
+use MediaWiki\Extension\Translate\MessageSync\MessageSourceChange;
+use MediaWiki\Extension\Translate\Services;
+use MediaWiki\Extension\Translate\Utilities\StringComparators\SimpleStringComparator;
+use MediaWiki\MediaWikiServices;
+
+/**
+ * Script for processing message changes in file based message groups.
+ *
+ * We used to process changes during web request, but that was too slow. With
+ * this command line script we can do all the work needed even if it takes
+ * some time.
+ *
+ * @since 2012-04-23
+ */
+class ProcessMessageChanges extends Maintenance {
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Script for processing message changes in file based message groups' );
+ $this->addOption(
+ 'group',
+ '(optional) Comma separated list of group IDs to process (can use * as wildcard). ' .
+ 'Default: "*"',
+ false, /*required*/
+ true /*has arg*/
+ );
+ $this->addOption(
+ 'skipgroup',
+ '(optional) Comma separated list of group IDs to not process (can use * ' .
+ 'as wildcard). Overrides --group parameter.',
+ false, /*required*/
+ true /*has arg*/
+ );
+ $this->addOption(
+ 'name',
+ '(optional) Unique name to avoid conflicts with multiple invocations of this script.',
+ false, /*required*/
+ true /*has arg*/
+ );
+ $this->addOption(
+ 'safe-import',
+ '(optional) Import "safe" changes: message additions when no other kind of changes.'
+ );
+ $this->addOption(
+ 'skip-group-sync-check',
+ '(optional) Skip importing group if synchronization is still in progress or if there ' .
+ 'was an error during synchronization. See: ' .
+ 'https://www.mediawiki.org/wiki/Help:Extension:Translate/Group_management#Strong_synchronization'
+ );
+ $this->requireExtension( 'Translate' );
+ }
+
+ public function execute() {
+ $name = $this->getOption( 'name', MessageChangeStorage::DEFAULT_NAME );
+ if ( !MessageChangeStorage::isValidCdbName( $name ) ) {
+ $this->fatalError( 'Invalid name' );
+ }
+
+ $groups = $this->getGroups();
+ $changes = [];
+ $comparator = new ExternalMessageSourceStateComparator( new SimpleStringComparator() );
+
+ $scripted = $this->hasOption( 'safe-import' );
+ $skipGroupSyncCache = $this->hasOption( 'skip-group-sync-check' );
+
+ $services = Services::getInstance();
+ $groupSyncCache = $services->getGroupSynchronizationCache();
+ $groupSyncCacheEnabled = MediaWikiServices::getInstance()->getMainConfig()
+ ->get( 'TranslateGroupSynchronizationCache' );
+
+ /** @var FileBasedMessageGroup $group */
+ foreach ( $groups as $id => $group ) {
+ if ( $groupSyncCacheEnabled && !$skipGroupSyncCache ) {
+ if ( $groupSyncCache->isGroupBeingProcessed( $id ) ) {
+ $this->error( "Group $id is currently being synchronized; skipping processing of changes\n" );
+ continue;
+ }
+
+ if ( $groupSyncCache->groupHasErrors( $id ) ) {
+ $this->error( "Skipping $id due to an error during synchronization\n" );
+ continue;
+ }
+ }
+
+ if ( !$scripted ) {
+ $this->output( "Processing $id\n" );
+ }
+ try {
+ $changes[$id] = $comparator->processGroup( $group, $comparator::ALL_LANGUAGES );
+ } catch ( Exception $e ) {
+ $errorMsg = "Exception occurred while processing group: $id.\nException: $e";
+ $this->error( $errorMsg );
+ error_log( $errorMsg );
+ }
+ }
+
+ // Remove all groups without changes
+ $changes = array_filter( $changes, static function ( MessageSourceChange $change ) {
+ return $change->getAllModifications() !== [];
+ } );
+
+ if ( $changes === [] ) {
+ if ( !$scripted ) {
+ $this->output( "No changes found\n" );
+ }
+
+ return;
+ }
+
+ if ( $scripted ) {
+ $importer = $services->getExternalMessageSourceStateImporter();
+ $info = $importer->importSafe( $changes, $name );
+ $this->printChangeInfo( $info );
+
+ return;
+ }
+
+ $file = MessageChangeStorage::getCdbPath( $name );
+
+ MessageChangeStorage::writeChanges( $changes, $file );
+ $url = SpecialPage::getTitleFor( 'ManageMessageGroups', $name )->getFullURL();
+ $this->output( "Process changes at $url\n" );
+ }
+
+ /**
+ * Gets list of message groups filtered by user input.
+ * @return FileBasedMessageGroup[]
+ */
+ protected function getGroups() {
+ $groups = MessageGroups::getGroupsByType( FileBasedMessageGroup::class );
+
+ // Include all if option not given
+ $include = $this->getOption( 'group', '*' );
+ $include = explode( ',', $include );
+ $include = array_map( 'trim', $include );
+ $include = MessageGroups::expandWildcards( $include );
+
+ // Exclude nothing if option not given
+ $exclude = $this->getOption( 'skipgroup', '' );
+ $exclude = explode( ',', $exclude );
+ $exclude = array_map( 'trim', $exclude );
+ $exclude = MessageGroups::expandWildcards( $exclude );
+
+ // Flip to allow isset
+ $include = array_flip( $include );
+ $exclude = array_flip( $exclude );
+
+ $groups = array_filter( $groups,
+ static function ( MessageGroup $group ) use ( $include, $exclude ) {
+ $id = $group->getId();
+
+ return isset( $include[$id] ) && !isset( $exclude[$id] );
+ }
+ );
+
+ return $groups;
+ }
+
+ protected function printChangeInfo( array $info ) {
+ foreach ( $info['processed'] as $group => $languages ) {
+ $newMessageCount = array_sum( $languages );
+ if ( $newMessageCount ) {
+ $this->output( "Imported $newMessageCount new messages or translations for $group.\n" );
+ }
+ }
+
+ if ( $info['skipped'] !== [] ) {
+ $skipped = implode( ', ', array_keys( $info['skipped'] ) );
+ $this->output( "There are changes to check for groups $skipped.\n" );
+ $url = SpecialPage::getTitleFor( 'ManageMessageGroups', $info['name'] )->getFullURL();
+ $this->output( "You can process them at $url\n" );
+ }
+ }
+}
+
+$maintClass = ProcessMessageChanges::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/Translate/scripts/queryGroupSyncCache.php b/Translate/scripts/queryGroupSyncCache.php
new file mode 100644
index 00000000..f8b0fce0
--- /dev/null
+++ b/Translate/scripts/queryGroupSyncCache.php
@@ -0,0 +1,6 @@
+<?php
+
+use MediaWiki\Extension\Translate\Synchronization\QueryGroupSyncCacheMaintenanceScript;
+
+$class = QueryGroupSyncCacheMaintenanceScript::class;
+require_once '__bootstrap.php';
diff --git a/Translate/scripts/refresh-translatable-pages.php b/Translate/scripts/refresh-translatable-pages.php
new file mode 100644
index 00000000..5e91d602
--- /dev/null
+++ b/Translate/scripts/refresh-translatable-pages.php
@@ -0,0 +1,77 @@
+<?php
+/**
+ * Script to ensure all translation pages are up to date.
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+// Standard boilerplate to define $IP
+
+use MediaWiki\Extension\Translate\PageTranslation\TranslatablePage;
+use MediaWiki\Extension\Translate\PageTranslation\UpdateTranslatablePageJob;
+use MediaWiki\MediaWikiServices;
+
+if ( getenv( 'MW_INSTALL_PATH' ) !== false ) {
+ $IP = getenv( 'MW_INSTALL_PATH' );
+} else {
+ $dir = __DIR__;
+ $IP = "$dir/../../..";
+}
+require_once "$IP/maintenance/Maintenance.php";
+
+/**
+ * Script to ensure all translation pages are up to date
+ * @since 2013-04
+ */
+class RefreshTranslatablePages extends Maintenance {
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Ensure all translation pages are up to date.' );
+ $this->setBatchSize( 300 );
+ $this->addOption( 'jobqueue', 'Use JobQueue (asynchronous)' );
+ $this->requireExtension( 'Translate' );
+ }
+
+ public function execute() {
+ $groups = MessageGroups::singleton()->getGroups();
+ $mwInstance = MediaWikiServices::getInstance();
+ $lbFactory = $mwInstance->getDBLoadBalancerFactory();
+ $jobQueueGroup = $mwInstance->getJobQueueGroup();
+
+ $counter = 0;
+ $useJobQueue = $this->hasOption( 'jobqueue' );
+
+ /** @var MessageGroup $group */
+ foreach ( $groups as $group ) {
+ if ( !$group instanceof WikiPageMessageGroup ) {
+ continue;
+ }
+
+ $counter++;
+ if ( ( $counter % $this->mBatchSize ) === 0 ) {
+ $lbFactory->waitForReplication();
+ }
+
+ $page = TranslatablePage::newFromTitle( $group->getTitle() );
+ $jobs = UpdateTranslatablePageJob::getRenderJobs( $page );
+ if ( $useJobQueue ) {
+ $jobQueueGroup->push( $jobs );
+ } else {
+ foreach ( $jobs as $job ) {
+ $job->run();
+ }
+ }
+ }
+
+ if ( $useJobQueue ) {
+ $this->output( "Queued refresh for $counter translatable pages.\n" );
+ } else {
+ $this->output( "Refreshed $counter translatable pages.\n" );
+ }
+ }
+}
+
+$maintClass = RefreshTranslatablePages::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/Translate/scripts/syncTranslatableBundleStatus.php b/Translate/scripts/syncTranslatableBundleStatus.php
new file mode 100644
index 00000000..4f74ecd9
--- /dev/null
+++ b/Translate/scripts/syncTranslatableBundleStatus.php
@@ -0,0 +1,6 @@
+<?php
+
+use MediaWiki\Extension\Translate\Diagnostics\SyncTranslatableBundleStatusMaintenanceScript;
+
+$class = SyncTranslatableBundleStatusMaintenanceScript::class;
+require_once '__bootstrap.php';
diff --git a/Translate/scripts/test-mt.php b/Translate/scripts/test-mt.php
new file mode 100644
index 00000000..e538530c
--- /dev/null
+++ b/Translate/scripts/test-mt.php
@@ -0,0 +1,93 @@
+<?php
+/**
+ * Script to test web services from the command line
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+use MediaWiki\Extension\Translate\WebService\QueryAggregator;
+use MediaWiki\Extension\Translate\WebService\TranslationWebService;
+
+// Standard boilerplate to define $IP
+if ( getenv( 'MW_INSTALL_PATH' ) !== false ) {
+ $IP = getenv( 'MW_INSTALL_PATH' );
+} else {
+ $dir = __DIR__;
+ $IP = "$dir/../../..";
+}
+require_once "$IP/maintenance/Maintenance.php";
+
+class TestMT extends Maintenance {
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Test webservices.' );
+
+ $this->addOption(
+ 'service',
+ 'Which service to use',
+ true, /*required*/
+ true /*has arg*/
+ );
+
+ $this->addOption(
+ 'from',
+ 'Source language tag',
+ true, /*required*/
+ true /*has arg*/
+ );
+
+ $this->addOption(
+ 'to',
+ 'Target language tag',
+ true, /*required*/
+ true /*has arg*/
+ );
+
+ $this->addArg(
+ 'text',
+ 'Text to translate',
+ true /*required*/
+ );
+ $this->requireExtension( 'Translate' );
+ }
+
+ public function execute() {
+ global $wgTranslateTranslationServices;
+
+ $name = $this->getOption( 'service' );
+
+ if ( !isset( $wgTranslateTranslationServices[ $name ] ) ) {
+ $this->fatalError( "Unknown service.\n" );
+ }
+
+ $service = TranslationWebService::factory( $name, $wgTranslateTranslationServices[ $name ] );
+ $service->setLogger( new TranslateCliLogger( function ( $msg ) {
+ $this->output( "$msg\n" );
+ } ) );
+
+ $from = $this->getOption( 'from' );
+ $to = $this->getOption( 'to' );
+ $text = $this->getArg( 0 );
+
+ if ( !$service->isSupportedLanguagePair( $from, $to ) ) {
+ $this->fatalError( "Unsupported language pair.\n" );
+ }
+
+ $query = $service->getQueries( $text, $from, $to );
+ if ( $query === [] ) {
+ $this->fatalError( "Service query error.\n" );
+ }
+
+ $agg = new QueryAggregator();
+ $id = $agg->addQuery( $query[ 0 ] );
+ $agg->run();
+ $res = $agg->getResponse( $id );
+
+ $this->output( $service->getResultData( $res ), 1 );
+ }
+}
+
+$maintClass = TestMT::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/Translate/scripts/translator-stats-process.php b/Translate/scripts/translator-stats-process.php
new file mode 100644
index 00000000..5c8fbbcf
--- /dev/null
+++ b/Translate/scripts/translator-stats-process.php
@@ -0,0 +1,120 @@
+<?php
+/**
+ * Script to gather translator stats.
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+// Standard boilerplate to define $IP
+if ( getenv( 'MW_INSTALL_PATH' ) !== false ) {
+ $IP = getenv( 'MW_INSTALL_PATH' );
+} else {
+ $dir = __DIR__;
+ $IP = "$dir/../../..";
+}
+require_once "$IP/maintenance/Maintenance.php";
+
+class TSP extends Maintenance {
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Script to calculate monthly stats about tsv data produced ' .
+ 'by translator-stats.php.' );
+ $this->addArg(
+ 'file',
+ 'tsv file to process'
+ );
+ }
+
+ protected function median( $a ) {
+ sort( $a );
+ $len = count( $a );
+ if ( $len === 0 ) {
+ return 0;
+ } elseif ( $len === 1 ) {
+ return $a[0];
+ } elseif ( $len % 2 === 0 ) {
+ return $a[$len / 2];
+ } else {
+ return ( $a[floor( $len / 2 )] + $a[ceil( $len / 2 )] ) / 2;
+ }
+ }
+
+ public function execute() {
+ $handle = fopen( $this->getArg( 0 ), 'r' );
+ // remove heading
+ // @phan-suppress-next-line PhanPluginUseReturnValueInternalKnown
+ fgets( $handle );
+
+ $data = [];
+ while ( true ) {
+ $l = fgets( $handle );
+ if ( $l === false ) {
+ break;
+ }
+
+ $fields = explode( "\t", trim( $l, "\n" ) );
+ $reg = $fields[1];
+ $month = substr( $reg, 0, 4 ) . '-' . substr( $reg, 4, 2 ) . '-01';
+ $data[$month][] = $fields;
+ }
+
+ fclose( $handle );
+
+ ksort( $data );
+
+ echo "period\tnew\tpromoted\tgood\tmedian promotion time\t" .
+ "avg promotion time\tsandbox approval rate\n";
+
+ foreach ( $data as $key => $period ) {
+ $total = 0;
+ $promoted = 0;
+ $good = 0;
+ $delay = [];
+ $avg = 'N/A';
+ $sbar = [];
+
+ foreach ( $period as $p ) {
+ list( , $reg, $edits, $translator, $promtime, $method ) = $p;
+ $total++;
+ if ( $translator === 'translator' ) {
+ $promoted++;
+ }
+
+ if ( $edits > 100 ) {
+ $good++;
+ }
+
+ if ( $promtime ) {
+ $delay[] = wfTimestamp( TS_UNIX, $promtime ) - wfTimestamp( TS_UNIX, $reg );
+ }
+
+ if ( $method === 'sandbox' ) {
+ if ( $promtime ) {
+ $sbar[] = true;
+ } else {
+ $sbar[] = false;
+ }
+ }
+
+ }
+
+ $median = round( $this->median( $delay ) / 3600 );
+ if ( count( $delay ) ) {
+ $avg = round( array_sum( $delay ) / count( $delay ) / 3600 );
+ }
+
+ if ( $sbar === [] ) {
+ $sbar = 'N/A';
+ } else {
+ $sbar = count( array_filter( $sbar ) ) / count( $sbar );
+ }
+
+ echo "$key\t$total\t$promoted\t$good\t$median\t$avg\t$sbar\n";
+ }
+ }
+}
+
+$maintClass = TSP::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/Translate/scripts/translator-stats.php b/Translate/scripts/translator-stats.php
new file mode 100644
index 00000000..9a24e657
--- /dev/null
+++ b/Translate/scripts/translator-stats.php
@@ -0,0 +1,130 @@
+<?php
+/**
+ * Script to gather translator stats.
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+// Standard boilerplate to define $IP
+if ( getenv( 'MW_INSTALL_PATH' ) !== false ) {
+ $IP = getenv( 'MW_INSTALL_PATH' );
+} else {
+ $dir = __DIR__;
+ $IP = "$dir/../../..";
+}
+require_once "$IP/maintenance/Maintenance.php";
+
+class TS extends Maintenance {
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Script to gather translator stats in tsv format. ' .
+ 'You can further process the output with translate-stats-process.php' );
+ }
+
+ public function execute() {
+ global $wgDisableUserGroupExpiry;
+
+ $dbr = wfGetDB( DB_REPLICA );
+ $users = $dbr->select(
+ [ 'user', 'user_groups' ],
+ [
+ 'user_name',
+ 'user_registration',
+ 'user_editcount',
+ 'ug_group',
+ ],
+ [
+ 'user_registration is not null'
+ ],
+ __METHOD__,
+ [
+ 'ORDER BY' => 'user_id ASC',
+ ],
+ [
+ 'user_groups' => [
+ 'LEFT JOIN',
+ [
+ 'user_id=ug_user',
+ 'ug_group' => 'translator',
+ ( isset( $wgDisableUserGroupExpiry ) && !$wgDisableUserGroupExpiry ) ?
+ 'ug_expiry IS NULL OR ug_expiry >= ' . $dbr->addQuotes( $dbr->timestamp() ) :
+ ''
+ ]
+ ]
+ ]
+ );
+
+ echo "username\tregistration ts\tedit count\tis translator?\tpromoted ts\tmethod\n";
+
+ $rejected = $dbr->select(
+ [ 'logging' ],
+ [
+ 'log_title',
+ 'log_timestamp',
+ ],
+ [
+ 'log_type' => 'translatorsandbox',
+ 'log_action' => 'rejected',
+ ],
+ __METHOD__
+ );
+
+ foreach ( $rejected as $r ) {
+ echo "{$r->log_title}\t{$r->log_timestamp}\t0\t\t\tsandbox\n";
+ }
+
+ foreach ( $users as $u ) {
+ $logs = $dbr->select(
+ 'logging',
+ [
+ 'log_type',
+ 'log_action',
+ 'log_timestamp',
+ 'log_params',
+ ],
+ [
+ 'log_title' => $u->user_name,
+ 'log_type' => [ 'rights', 'translatorsandbox' ],
+ ],
+ __METHOD__,
+ [
+ 'ORDER BY' => 'log_id ASC',
+ ]
+ );
+
+ $promoted = null;
+ $method = 'normal';
+ foreach ( $logs as $log ) {
+ if ( $log->log_action === 'promoted' ) {
+ $promoted = $log->log_timestamp;
+ $method = 'sandbox';
+ break;
+ } elseif ( $log->log_action === 'rights' ) {
+ // phpcs:disable Generic.PHP.NoSilencedErrors.Discouraged
+ $data = @unserialize( $log->log_params );
+ if ( $data === false ) {
+ $lines = explode( "\n", $log->log_params, 3 );
+ if ( strpos( $lines[1], 'translator' ) !== false ) {
+ $promoted = $log->log_timestamp;
+ break;
+ }
+ } elseif (
+ isset( $data['5::newgroups'] ) &&
+ in_array( 'translator', $data['5::newgroups'] )
+ ) {
+ $promoted = $log->log_timestamp;
+ break;
+ }
+ }
+ }
+
+ echo "{$u->user_name}\t{$u->user_registration}\t{$u->user_editcount}" .
+ "\t{$u->ug_group}\t{$promoted}\t{$method}\n";
+ }
+ }
+}
+
+$maintClass = TS::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/Translate/scripts/ttmserver-export.php b/Translate/scripts/ttmserver-export.php
new file mode 100644
index 00000000..a487c4e9
--- /dev/null
+++ b/Translate/scripts/ttmserver-export.php
@@ -0,0 +1,319 @@
+<?php
+/**
+ * Script to bootstrap TTMServer translation memory
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+// Standard boilerplate to define $IP
+if ( getenv( 'MW_INSTALL_PATH' ) !== false ) {
+ $IP = getenv( 'MW_INSTALL_PATH' );
+} else {
+ $dir = __DIR__;
+ $IP = "$dir/../../..";
+}
+require_once "$IP/maintenance/Maintenance.php";
+
+/**
+ * Script to bootstrap TTMServer translation memory.
+ * @since 2012-01-26
+ */
+class TTMServerBootstrap extends Maintenance {
+ /** @var int */
+ private $start;
+
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Script to bootstrap TTMServer.' );
+ $this->addOption(
+ 'threads',
+ '(optional) Number of threads',
+ /*required*/false,
+ /*has arg*/true
+ );
+ $this->addOption(
+ 'ttmserver',
+ '(optional) Server configuration identifier',
+ /*required*/false,
+ /*has arg*/true
+ );
+ // This option erases all data, empties the index and rebuilds it.
+ $this->addOption(
+ 'reindex',
+ 'Update the index mapping. Warning: Clears all existing data in the index.'
+ );
+ $this->addOption(
+ 'dry-run',
+ 'Do not make any changes to the index.'
+ );
+ $this->addOption(
+ 'verbose',
+ 'Output more status information.'
+ );
+ $this->addOption(
+ 'clean',
+ 'Only run setup and and cleanup. Skip inserting content.'
+ );
+ $this->setBatchSize( 500 );
+ $this->requireExtension( 'Translate' );
+ $this->start = microtime( true );
+ }
+
+ public function statusLine( $text, $channel = null ) {
+ $pid = sprintf( '%5s', getmypid() );
+ $prefix = sprintf( '%6.2f', microtime( true ) - $this->start );
+ $mem = sprintf( '%5.1fM', memory_get_usage( true ) / ( 1024 * 1024 ) );
+ $this->output( "$pid $prefix $mem $text", $channel );
+ }
+
+ public function execute() {
+ global $wgTranslateTranslationServices,
+ $wgTranslateTranslationDefaultService;
+
+ $configKey = $this->getOption( 'ttmserver', $wgTranslateTranslationDefaultService );
+ if ( !isset( $wgTranslateTranslationServices[$configKey] ) ) {
+ $this->fatalError( 'Translation memory is not configured properly' );
+ }
+
+ $dryRun = $this->getOption( 'dry-run' );
+ if ( $dryRun ) {
+ $config = [ 'class' => FakeTTMServer::class ];
+ } else {
+ $config = $wgTranslateTranslationServices[$configKey];
+ }
+
+ $server = $this->getServer( $config );
+ $this->logInfo( "Implementation: " . get_class( $server ) . "\n" );
+
+ // Do as little as possible in the main thread, to not clobber forked processes.
+ // See also #resetStateForFork.
+ $pid = pcntl_fork();
+ if ( $pid === 0 ) {
+ $this->resetStateForFork();
+ $server = $this->getServer( $config );
+ $this->beginBootstrap( $server );
+ exit();
+ } elseif ( $pid === -1 ) {
+ // Fork failed do it serialized
+ $this->beginBootstrap( $server );
+ } else {
+ // Main thread
+ $this->statusLine( "Forked thread $pid to handle bootstrapping\n" );
+ $status = 0;
+ pcntl_waitpid( $pid, $status );
+ // beginBootstrap probably failed, give up.
+ if ( !$this->verifyChildStatus( $pid, $status ) ) {
+ $this->fatalError( 'Bootstrap failed.' );
+ }
+ }
+
+ $hasErrors = false;
+ $threads = $this->getOption( 'threads', 1 );
+ $pids = [];
+
+ if ( $this->hasOption( 'clean' ) ) {
+ $groups = [];
+ } else {
+ $groups = MessageGroups::singleton()->getGroups();
+ }
+ foreach ( $groups as $id => $group ) {
+ /** @var MessageGroup $group */
+ if ( $group->isMeta() ) {
+ continue;
+ }
+
+ // Fork to increase speed with parallelism. Also helps with memory usage if there are leaks.
+ $pid = pcntl_fork();
+
+ if ( $pid === 0 ) {
+ $this->resetStateForFork();
+ $server = $this->getServer( $config );
+ $this->exportGroup( $group, $server );
+ exit();
+ } elseif ( $pid === -1 ) {
+ // Fork failed do it serialized
+ $this->exportGroup( $group, $server );
+ } else {
+ // Main thread
+ $this->statusLine( "Forked thread $pid to handle $id\n" );
+ $pids[$pid] = true;
+
+ // If we hit the thread limit, wait for any child to finish.
+ if ( count( $pids ) >= $threads ) {
+ $status = 0;
+ $pid = pcntl_wait( $status );
+ $hasErrors = $hasErrors || !$this->verifyChildStatus( $pid, $status );
+ unset( $pids[$pid] );
+ }
+ }
+ }
+
+ // Return control after all threads have finished.
+ foreach ( array_keys( $pids ) as $pid ) {
+ $status = 0;
+ pcntl_waitpid( $pid, $status );
+ $hasErrors = $hasErrors || !$this->verifyChildStatus( $pid, $status );
+ }
+
+ // It's okay to do this in the main thread as it is the last thing
+ $this->endBootstrap( $server );
+
+ if ( $hasErrors ) {
+ $this->fatalError( '!!! Some threads failed. Review the script output !!!' );
+ }
+ }
+
+ private function getServer( array $config ): WritableTTMServer {
+ $server = TTMServer::factory( $config );
+ if ( !$server instanceof WritableTTMServer ) {
+ $this->fatalError( "Service must implement WritableTTMServer" );
+ }
+
+ if ( method_exists( $server, 'setLogger' ) ) {
+ // @phan-suppress-next-line PhanUndeclaredMethod
+ $server->setLogger( $this );
+ }
+
+ if ( $this->getOption( 'reindex', false ) ) {
+ // This doesn't do the update, just sets a flag to do it
+ $server->setDoReIndex();
+ }
+
+ return $server;
+ }
+
+ protected function beginBootstrap( WritableTTMServer $server ) {
+ $this->statusLine( "Cleaning up old entries...\n" );
+ $server->beginBootstrap();
+ }
+
+ protected function endBootstrap( WritableTTMServer $server ) {
+ $this->statusLine( "Optimizing...\n" );
+ $server->endBootstrap();
+ }
+
+ protected function exportGroup( MessageGroup $group, WritableTTMServer $server ) {
+ $times = [
+ 'total' => -microtime( true ),
+ 'stats' => 0,
+ 'init' => 0,
+ 'trans' => 0,
+ ];
+ $countItems = 0;
+
+ $id = $group->getId();
+ $sourceLanguage = $group->getSourceLanguage();
+
+ $times[ 'stats' ] -= microtime( true );
+ $stats = MessageGroupStats::forGroup( $id );
+ $times[ 'stats' ] += microtime( true );
+
+ $times[ 'init' ] -= microtime( true );
+ $collection = $group->initCollection( $sourceLanguage );
+ $collection->filter( 'ignored' );
+ $collection->initMessages();
+
+ $server->beginBatch();
+ $inserts = [];
+ foreach ( $collection->keys() as $mkey => $titleValue ) {
+ $title = Title::newFromLinkTarget( $titleValue );
+ $handle = new MessageHandle( $title );
+ $inserts[] = [ $handle, $sourceLanguage, $collection[$mkey]->definition() ];
+ $countItems++;
+ }
+
+ while ( $inserts !== [] ) {
+ $batch = array_splice( $inserts, 0, $this->mBatchSize );
+ $server->batchInsertDefinitions( $batch );
+ }
+ $inserts = [];
+ $times[ 'init' ] += microtime( true );
+
+ $times[ 'trans' ] -= microtime( true );
+ foreach ( $stats as $targetLanguage => $numbers ) {
+ if ( $targetLanguage === $sourceLanguage ) {
+ continue;
+ }
+ if ( $numbers[MessageGroupStats::TRANSLATED] === 0 ) {
+ continue;
+ }
+
+ $collection->resetForNewLanguage( $targetLanguage );
+ $collection->filter( 'ignored' );
+ $collection->filter( 'translated', false );
+ $collection->loadTranslations();
+
+ foreach ( $collection->keys() as $mkey => $titleValue ) {
+ $title = Title::newFromLinkTarget( $titleValue );
+ $handle = new MessageHandle( $title );
+ $inserts[] = [ $handle, $sourceLanguage, $collection[$mkey]->translation() ];
+ $countItems++;
+ }
+
+ while ( count( $inserts ) >= $this->mBatchSize ) {
+ $batch = array_splice( $inserts, 0, $this->mBatchSize );
+ $server->batchInsertTranslations( $batch );
+ }
+ }
+
+ while ( $inserts !== [] ) {
+ $batch = array_splice( $inserts, 0, $this->mBatchSize );
+ $server->batchInsertTranslations( $batch );
+ }
+
+ $server->endBatch();
+ $times[ 'trans' ] += microtime( true );
+ $times[ 'total' ] += microtime( true );
+
+ if ( $countItems !== 0 ) {
+ $debug = sprintf(
+ "Total %.1f s for %d items >> stats/init/trans %%: %d/%d/%d >> %.1f ms/item",
+ $times[ 'total' ],
+ $countItems,
+ $times[ 'stats'] / $times[ 'total' ] * 100,
+ $times[ 'init'] / $times[ 'total' ] * 100,
+ $times[ 'trans'] / $times[ 'total' ] * 100,
+ $times[ 'total' ] / $countItems * 1000
+ );
+ $this->logInfo( "Finished exporting $id. $debug\n" );
+ }
+ }
+
+ private function logInfo( string $text ) {
+ if ( $this->getOption( 'verbose', false ) ) {
+ $this->statusLine( $text );
+ }
+ }
+
+ protected function resetStateForFork() {
+ // Make sure all existing connections are dead,
+ // we can't use them in forked children.
+ MediaWiki\MediaWikiServices::resetChildProcessServices();
+ // Temporary workaround for https://phabricator.wikimedia.org/T258860.
+ // This script just moves data around, so skipping the message cache should not
+ // cause any major issues. Things like message documentation language name and
+ // main page name were being checked from the message cache and sometimes failing.
+ MediaWiki\MediaWikiServices::getInstance()->getMessageCache()->disable();
+ }
+
+ private function verifyChildStatus( int $pid, int $status ): bool {
+ if ( pcntl_wifexited( $status ) ) {
+ $code = pcntl_wexitstatus( $status );
+ if ( $code ) {
+ $this->output( "Pid $pid exited with status $code !!\n" );
+ return false;
+ }
+ } elseif ( pcntl_wifsignaled( $status ) ) {
+ $signum = pcntl_wtermsig( $status );
+ $this->output( "Pid $pid terminated by signal $signum !!\n" );
+ return false;
+ }
+
+ return true;
+ }
+}
+
+$maintClass = TTMServerBootstrap::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/Translate/scripts/updateTranslatorActivity.php b/Translate/scripts/updateTranslatorActivity.php
new file mode 100644
index 00000000..30921ffa
--- /dev/null
+++ b/Translate/scripts/updateTranslatorActivity.php
@@ -0,0 +1,6 @@
+<?php
+
+use MediaWiki\Extension\Translate\Statistics\UpdateTranslatorActivityMaintenanceScript;
+
+$class = UpdateTranslatorActivityMaintenanceScript::class;
+require_once '__bootstrap.php';
diff --git a/Translate/scripts/yaml-tests.php b/Translate/scripts/yaml-tests.php
new file mode 100644
index 00000000..0f7bb830
--- /dev/null
+++ b/Translate/scripts/yaml-tests.php
@@ -0,0 +1,95 @@
+<?php
+/**
+ * Script for comparing supported YAML parser implementations
+ *
+ * @author Niklas Laxström
+ *
+ * @copyright Copyright © 2010, Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+// Standard boilerplate to define $IP
+if ( getenv( 'MW_INSTALL_PATH' ) !== false ) {
+ $IP = getenv( 'MW_INSTALL_PATH' );
+} else {
+ $dir = __DIR__;
+ $IP = "$dir/../../..";
+}
+require_once "$IP/maintenance/Maintenance.php";
+
+class YamlTests extends Maintenance {
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Script for comparing supported YAML parser implementations.' );
+ $this->requireExtension( 'Translate' );
+ }
+
+ public function execute() {
+ global $wgTranslateGroupFiles, $wgTranslateYamlLibrary;
+ $documents = [];
+ $times = [];
+ $mems = [];
+ $mempeaks = [];
+
+ foreach ( [ 'syck', 'spyc', 'phpyaml' ] as $driver ) {
+ $mempeaks[$driver] = -memory_get_peak_usage( true );
+ $mems[$driver] = -memory_get_usage( true );
+ $times[$driver] = -microtime( true );
+ $wgTranslateYamlLibrary = $driver;
+ $documents[$driver] = [];
+ foreach ( $wgTranslateGroupFiles as $file ) {
+ foreach ( self::parseGroupFile( $file ) as $id => $docu ) {
+ $documents[$driver]["$file-$id"] = $docu;
+ }
+ }
+
+ $times[$driver] += microtime( true );
+ $mems[$driver] += memory_get_usage( true );
+ $mempeaks[$driver] += memory_get_peak_usage( true );
+
+ self::sortNestedArrayAssoc( $documents[$driver] );
+ file_put_contents( "yaml-test-$driver.txt", var_export( $documents[$driver], true ) );
+ file_put_contents( "yaml-output-$driver.txt", TranslateYaml::dump( $documents[$driver] ) );
+ }
+ var_dump( $times );
+ var_dump( $mems );
+ var_dump( $mempeaks );
+ }
+
+ public static function parseGroupFile( $filename ) {
+ $data = file_get_contents( $filename );
+ $documents = preg_split( "/^---$/m", $data, -1, PREG_SPLIT_NO_EMPTY );
+ $groups = [];
+ $template = false;
+ foreach ( $documents as $document ) {
+ $document = TranslateYaml::loadString( $document );
+ if ( isset( $document['TEMPLATE'] ) ) {
+ $template = $document['TEMPLATE'];
+ } else {
+ if ( !isset( $document['BASIC']['id'] ) ) {
+ trigger_error( 'No path ./BASIC/id (group id not defined) ' .
+ "in yaml document located in $filename" );
+ continue;
+ }
+ $groups[$document['BASIC']['id']] = $document;
+ }
+ }
+
+ return array_map( static function ( array $group ) use ( $template ): array {
+ return MessageGroupConfigurationParser::mergeTemplate( $template, $group );
+ }, $groups );
+ }
+
+ public static function sortNestedArrayAssoc( &$a ) {
+ ksort( $a );
+ foreach ( $a as &$value ) {
+ if ( is_array( $value ) ) {
+ self::sortNestedArrayAssoc( $value );
+ }
+ }
+ }
+}
+
+$maintClass = YamlTests::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/Translate/sonar-project.properties b/Translate/sonar-project.properties
new file mode 100644
index 00000000..9fdb9230
--- /dev/null
+++ b/Translate/sonar-project.properties
@@ -0,0 +1,4 @@
+sonar.sources=.
+sonar.exclusions=data/**/*,sql/**/*,tests/**/*,resources/lib/**/*
+sonar.tests=tests/phpunit,tests/qunit
+sonar.test.exclusions=tests/phpunit/data
diff --git a/Translate/sql/abstractSchemaChanges/patch-revtag-unique-to-pk.json b/Translate/sql/abstractSchemaChanges/patch-revtag-unique-to-pk.json
new file mode 100644
index 00000000..88c87e8a
--- /dev/null
+++ b/Translate/sql/abstractSchemaChanges/patch-revtag-unique-to-pk.json
@@ -0,0 +1,82 @@
+{
+ "comment": "Convert unique index to primary key (T243985)",
+ "before": {
+ "name": "revtag",
+ "comment": "Revision tags",
+ "columns": [
+ {
+ "name": "rt_type",
+ "type": "binary",
+ "options": { "notnull": true, "length": 60 }
+ },
+ {
+ "name": "rt_page",
+ "comment": "Link to page.page_id",
+ "type": "integer",
+ "options": { "notnull": true }
+ },
+ {
+ "name": "rt_revision",
+ "comment": "Link to revision.rev_id",
+ "type": "integer",
+ "options": { "notnull": true }
+ },
+ {
+ "name": "rt_value",
+ "type": "blob",
+ "options": { "length": 65530, "notnull": false }
+ }
+ ],
+ "indexes": [
+ {
+ "name": "rt_type_page_revision",
+ "comment": "Index for finding all revisions in a page with a given tag",
+ "columns": [ "rt_type", "rt_page", "rt_revision" ],
+ "unique": true
+ },
+ {
+ "name": "rt_revision_type",
+ "comment": "Index for finding the tags on a given revision",
+ "columns": [ "rt_revision", "rt_type" ],
+ "unique": false
+ }
+ ]
+ },
+ "after": {
+ "name": "revtag",
+ "comment": "Revision tags",
+ "columns": [
+ {
+ "name": "rt_type",
+ "type": "binary",
+ "options": { "notnull": true, "length": 60 }
+ },
+ {
+ "name": "rt_page",
+ "comment": "Link to page.page_id",
+ "type": "integer",
+ "options": { "notnull": true }
+ },
+ {
+ "name": "rt_revision",
+ "comment": "Link to revision.rev_id",
+ "type": "integer",
+ "options": { "notnull": true }
+ },
+ {
+ "name": "rt_value",
+ "type": "blob",
+ "options": { "length": 65530, "notnull": false }
+ }
+ ],
+ "indexes": [
+ {
+ "name": "rt_revision_type",
+ "comment": "Index for finding the tags on a given revision",
+ "columns": [ "rt_revision", "rt_type" ],
+ "unique": false
+ }
+ ],
+ "pk": [ "rt_type", "rt_page", "rt_revision" ]
+ }
+}
diff --git a/Translate/sql/abstractSchemaChanges/patch-translate_messageindex-unique-to-pk.json b/Translate/sql/abstractSchemaChanges/patch-translate_messageindex-unique-to-pk.json
new file mode 100644
index 00000000..2bcc4593
--- /dev/null
+++ b/Translate/sql/abstractSchemaChanges/patch-translate_messageindex-unique-to-pk.json
@@ -0,0 +1,43 @@
+{
+ "comment": "Convert unique index to primary key (T312258)",
+ "before": {
+ "name": "translate_messageindex",
+ "columns": [
+ {
+ "name": "tmi_key",
+ "type": "binary",
+ "options": { "notnull": true, "length": 255 }
+ },
+ {
+ "name": "tmi_value",
+ "type": "binary",
+ "options": { "notnull": true, "length": 255 }
+ }
+ ],
+ "pk": [],
+ "indexes": [
+ {
+ "name": "tmi_key",
+ "columns": [ "tmi_key" ],
+ "unique": true
+ }
+ ]
+ },
+ "after": {
+ "name": "translate_messageindex",
+ "columns": [
+ {
+ "name": "tmi_key",
+ "type": "binary",
+ "options": { "notnull": true, "length": 255 }
+ },
+ {
+ "name": "tmi_value",
+ "type": "binary",
+ "options": { "notnull": true, "length": 255 }
+ }
+ ],
+ "pk": [ "tmi_key" ],
+ "indexes": []
+ }
+}
diff --git a/Translate/sql/abstractSchemaChanges/patch-translate_tmt-unique-to-pk.json b/Translate/sql/abstractSchemaChanges/patch-translate_tmt-unique-to-pk.json
new file mode 100644
index 00000000..08be73c4
--- /dev/null
+++ b/Translate/sql/abstractSchemaChanges/patch-translate_tmt-unique-to-pk.json
@@ -0,0 +1,59 @@
+{
+ "comment": "Convert unique index to primary key (T312260)",
+ "before": {
+ "name": "translate_tmt",
+ "comment": "Stored translations",
+ "columns": [
+ {
+ "name": "tmt_sid",
+ "type": "integer",
+ "options": { "unsigned": true, "notnull": true }
+ },
+ {
+ "name": "tmt_lang",
+ "comment": "Language code",
+ "type": "binary",
+ "options": { "notnull": true, "length": 20 }
+ },
+ {
+ "name": "tmt_text",
+ "comment": "The actual text",
+ "type": "blob",
+ "options": { "length": 16777215, "notnull": true }
+ }
+ ],
+ "pk": [],
+ "indexes": [
+ {
+ "name": "tms_sid_lang",
+ "columns": [ "tmt_sid", "tmt_lang" ],
+ "unique": true
+ }
+ ]
+ },
+ "after": {
+ "name": "translate_tmt",
+ "comment": "Stored translations",
+ "columns": [
+ {
+ "name": "tmt_sid",
+ "type": "integer",
+ "options": { "unsigned": true, "notnull": true }
+ },
+ {
+ "name": "tmt_lang",
+ "comment": "Language code",
+ "type": "binary",
+ "options": { "notnull": true, "length": 20 }
+ },
+ {
+ "name": "tmt_text",
+ "comment": "The actual text",
+ "type": "blob",
+ "options": { "length": 16777215, "notnull": true }
+ }
+ ],
+ "pk": [ "tmt_sid", "tmt_lang" ],
+ "indexes": []
+ }
+}
diff --git a/Translate/sql/mysql/patch-revtag-unique-to-pk.sql b/Translate/sql/mysql/patch-revtag-unique-to-pk.sql
new file mode 100644
index 00000000..988787d8
--- /dev/null
+++ b/Translate/sql/mysql/patch-revtag-unique-to-pk.sql
@@ -0,0 +1,7 @@
+-- This file is automatically generated using maintenance/generateSchemaChangeSql.php.
+-- Source: sql/abstractSchemaChanges/patch-revtag-unique-to-pk.json
+-- Do not modify this file directly.
+-- See https://www.mediawiki.org/wiki/Manual:Schema_changes
+DROP INDEX rt_type_page_revision ON /*_*/revtag;
+ALTER TABLE /*_*/revtag
+ADD PRIMARY KEY (rt_type, rt_page, rt_revision); \ No newline at end of file
diff --git a/Translate/sql/mysql/patch-translate_messageindex-unique-to-pk.sql b/Translate/sql/mysql/patch-translate_messageindex-unique-to-pk.sql
new file mode 100644
index 00000000..a4bd7386
--- /dev/null
+++ b/Translate/sql/mysql/patch-translate_messageindex-unique-to-pk.sql
@@ -0,0 +1,7 @@
+-- This file is automatically generated using maintenance/generateSchemaChangeSql.php.
+-- Source: sql/abstractSchemaChanges/patch-translate_messageindex-unique-to-pk.json
+-- Do not modify this file directly.
+-- See https://www.mediawiki.org/wiki/Manual:Schema_changes
+DROP INDEX tmi_key ON /*_*/translate_messageindex;
+ALTER TABLE /*_*/translate_messageindex
+ADD PRIMARY KEY (tmi_key); \ No newline at end of file
diff --git a/Translate/sql/mysql/patch-translate_tmt-unique-to-pk.sql b/Translate/sql/mysql/patch-translate_tmt-unique-to-pk.sql
new file mode 100644
index 00000000..02f73178
--- /dev/null
+++ b/Translate/sql/mysql/patch-translate_tmt-unique-to-pk.sql
@@ -0,0 +1,7 @@
+-- This file is automatically generated using maintenance/generateSchemaChangeSql.php.
+-- Source: sql/abstractSchemaChanges/patch-translate_tmt-unique-to-pk.json
+-- Do not modify this file directly.
+-- See https://www.mediawiki.org/wiki/Manual:Schema_changes
+DROP INDEX tms_sid_lang ON /*_*/translate_tmt;
+ALTER TABLE /*_*/translate_tmt
+ADD PRIMARY KEY (tmt_sid, tmt_lang); \ No newline at end of file
diff --git a/Translate/sql/mysql/revtag.sql b/Translate/sql/mysql/revtag.sql
new file mode 100644
index 00000000..a9a9c463
--- /dev/null
+++ b/Translate/sql/mysql/revtag.sql
@@ -0,0 +1,8 @@
+CREATE TABLE /*_*/revtag (
+ rt_type VARBINARY(60) NOT NULL,
+ rt_page INT NOT NULL,
+ rt_revision INT NOT NULL,
+ rt_value BLOB DEFAULT NULL,
+ INDEX rt_revision_type (rt_revision, rt_type),
+ PRIMARY KEY(rt_type, rt_page, rt_revision)
+) /*$wgDBTableOptions*/;
diff --git a/Translate/sql/mysql/translate_cache-alter-varbinary.sql b/Translate/sql/mysql/translate_cache-alter-varbinary.sql
new file mode 100644
index 00000000..cdfbf68f
--- /dev/null
+++ b/Translate/sql/mysql/translate_cache-alter-varbinary.sql
@@ -0,0 +1,30 @@
+ALTER TABLE /*_*/translate_cache
+ MODIFY tc_key VARBINARY(255) NOT NULL;
+
+ALTER TABLE /*_*/translate_groupreviews
+ MODIFY tgr_group VARBINARY(200) NOT NULL,
+ MODIFY tgr_lang VARBINARY(20) NOT NULL;
+
+ALTER TABLE /*_*/translate_groupstats
+ MODIFY tgs_group VARBINARY(100) NOT NULL,
+ MODIFY tgs_lang VARBINARY(20) NOT NULL;
+
+ALTER TABLE /*_*/translate_messageindex
+ MODIFY tmi_key VARBINARY(255) NOT NULL,
+ MODIFY tmi_value VARBINARY(255) NOT NULL;
+
+ALTER TABLE /*_*/translate_metadata
+ MODIFY tmd_group VARBINARY(200) NOT NULL,
+ MODIFY tmd_key VARBINARY(20) NOT NULL;
+
+ALTER TABLE /*_*/translate_sections
+ MODIFY trs_key VARBINARY(255) NOT NULL;
+
+ALTER TABLE /*_*/translate_stash
+ MODIFY ts_title VARBINARY(255) NOT NULL;
+
+ALTER TABLE /*_*/translate_tms
+ MODIFY tms_lang VARBINARY(20) NOT NULL;
+
+ALTER TABLE /*_*/translate_tmt
+ MODIFY tmt_lang VARBINARY(20) NOT NULL;
diff --git a/Translate/sql/mysql/translate_cache.sql b/Translate/sql/mysql/translate_cache.sql
new file mode 100644
index 00000000..edd54f38
--- /dev/null
+++ b/Translate/sql/mysql/translate_cache.sql
@@ -0,0 +1,8 @@
+CREATE TABLE /*_*/translate_cache (
+ tc_key VARBINARY(255) NOT NULL,
+ tc_value MEDIUMBLOB DEFAULT NULL,
+ tc_exptime VARBINARY(14) DEFAULT NULL,
+ tc_tag VARBINARY(255) DEFAULT NULL,
+ INDEX tc_tag (tc_tag),
+ PRIMARY KEY(tc_key)
+) /*$wgDBTableOptions*/;
diff --git a/Translate/sql/mysql/translate_groupreviews.sql b/Translate/sql/mysql/translate_groupreviews.sql
new file mode 100644
index 00000000..00605a9c
--- /dev/null
+++ b/Translate/sql/mysql/translate_groupreviews.sql
@@ -0,0 +1,6 @@
+CREATE TABLE /*_*/translate_groupreviews (
+ tgr_group VARBINARY(200) NOT NULL,
+ tgr_lang VARBINARY(20) NOT NULL,
+ tgr_state VARBINARY(32) NOT NULL,
+ PRIMARY KEY(tgr_group, tgr_lang)
+) /*$wgDBTableOptions*/;
diff --git a/Translate/sql/mysql/translate_groupstats.sql b/Translate/sql/mysql/translate_groupstats.sql
new file mode 100644
index 00000000..bcf0473a
--- /dev/null
+++ b/Translate/sql/mysql/translate_groupstats.sql
@@ -0,0 +1,10 @@
+CREATE TABLE /*_*/translate_groupstats (
+ tgs_group VARBINARY(100) NOT NULL,
+ tgs_lang VARBINARY(20) NOT NULL,
+ tgs_total INT UNSIGNED DEFAULT NULL,
+ tgs_translated INT UNSIGNED DEFAULT NULL,
+ tgs_fuzzy INT UNSIGNED DEFAULT NULL,
+ tgs_proofread INT UNSIGNED DEFAULT NULL,
+ INDEX tgs_lang (tgs_lang),
+ PRIMARY KEY(tgs_group, tgs_lang)
+) /*$wgDBTableOptions*/;
diff --git a/Translate/sql/mysql/translate_messageindex.sql b/Translate/sql/mysql/translate_messageindex.sql
new file mode 100644
index 00000000..58491a00
--- /dev/null
+++ b/Translate/sql/mysql/translate_messageindex.sql
@@ -0,0 +1,5 @@
+CREATE TABLE /*_*/translate_messageindex (
+ tmi_key VARBINARY(255) NOT NULL,
+ tmi_value VARBINARY(255) NOT NULL,
+ PRIMARY KEY(tmi_key)
+) /*$wgDBTableOptions*/;
diff --git a/Translate/sql/mysql/translate_metadata.sql b/Translate/sql/mysql/translate_metadata.sql
new file mode 100644
index 00000000..52b6b5aa
--- /dev/null
+++ b/Translate/sql/mysql/translate_metadata.sql
@@ -0,0 +1,6 @@
+CREATE TABLE /*_*/translate_metadata (
+ tmd_group VARBINARY(200) NOT NULL,
+ tmd_key VARBINARY(20) NOT NULL,
+ tmd_value MEDIUMBLOB NOT NULL,
+ PRIMARY KEY(tmd_group, tmd_key)
+) /*$wgDBTableOptions*/;
diff --git a/Translate/sql/mysql/translate_reviews.sql b/Translate/sql/mysql/translate_reviews.sql
new file mode 100644
index 00000000..c95202f1
--- /dev/null
+++ b/Translate/sql/mysql/translate_reviews.sql
@@ -0,0 +1,6 @@
+CREATE TABLE /*_*/translate_reviews (
+ trr_user INT NOT NULL,
+ trr_page INT NOT NULL,
+ trr_revision INT NOT NULL,
+ PRIMARY KEY(trr_page, trr_revision, trr_user)
+) /*$wgDBTableOptions*/;
diff --git a/Translate/sql/mysql/translate_sections.sql b/Translate/sql/mysql/translate_sections.sql
new file mode 100644
index 00000000..a7ac83a4
--- /dev/null
+++ b/Translate/sql/mysql/translate_sections.sql
@@ -0,0 +1,8 @@
+CREATE TABLE /*_*/translate_sections (
+ trs_page INT UNSIGNED NOT NULL,
+ trs_key VARBINARY(255) NOT NULL,
+ trs_text MEDIUMBLOB NOT NULL,
+ trs_order INT UNSIGNED DEFAULT NULL,
+ INDEX trs_page_order (trs_page, trs_order),
+ PRIMARY KEY(trs_page, trs_key)
+) /*$wgDBTableOptions*/;
diff --git a/Translate/sql/mysql/translate_stash.sql b/Translate/sql/mysql/translate_stash.sql
new file mode 100644
index 00000000..16e136a9
--- /dev/null
+++ b/Translate/sql/mysql/translate_stash.sql
@@ -0,0 +1,8 @@
+CREATE TABLE /*_*/translate_stash (
+ ts_user INT NOT NULL,
+ ts_namespace INT NOT NULL,
+ ts_title VARBINARY(255) NOT NULL,
+ ts_value MEDIUMBLOB NOT NULL,
+ ts_metadata MEDIUMBLOB NOT NULL,
+ PRIMARY KEY(ts_user, ts_namespace, ts_title)
+) /*$wgDBTableOptions*/;
diff --git a/Translate/sql/mysql/translate_tm.sql b/Translate/sql/mysql/translate_tm.sql
new file mode 100644
index 00000000..a3736b47
--- /dev/null
+++ b/Translate/sql/mysql/translate_tm.sql
@@ -0,0 +1,24 @@
+CREATE TABLE /*_*/translate_tms (
+ tms_sid INT UNSIGNED AUTO_INCREMENT NOT NULL,
+ tms_lang VARBINARY(20) NOT NULL,
+ tms_len INT UNSIGNED NOT NULL,
+ tms_text MEDIUMBLOB NOT NULL,
+ tms_context MEDIUMBLOB NOT NULL,
+ INDEX tms_lang_len (tms_lang, tms_len),
+ PRIMARY KEY(tms_sid)
+) /*$wgDBTableOptions*/;
+
+
+CREATE TABLE /*_*/translate_tmt (
+ tmt_sid INT UNSIGNED NOT NULL,
+ tmt_lang VARBINARY(20) NOT NULL,
+ tmt_text MEDIUMBLOB NOT NULL,
+ PRIMARY KEY(tmt_sid, tmt_lang)
+) /*$wgDBTableOptions*/;
+
+
+CREATE TABLE /*_*/translate_tmf (
+ tmf_sid INT UNSIGNED NOT NULL,
+ tmf_text TEXT NOT NULL,
+ FULLTEXT INDEX tmf_text (tmf_text)
+) ENGINE = MyISAM DEFAULT CHARSET = utf8mb4;
diff --git a/Translate/sql/mysql/translate_translatable_bundles.sql b/Translate/sql/mysql/translate_translatable_bundles.sql
new file mode 100644
index 00000000..4b5e545e
--- /dev/null
+++ b/Translate/sql/mysql/translate_translatable_bundles.sql
@@ -0,0 +1,10 @@
+CREATE TABLE /*_*/translate_translatable_bundles (
+ ttb_page_id INT UNSIGNED NOT NULL,
+ ttb_type SMALLINT UNSIGNED NOT NULL,
+ ttb_status SMALLINT UNSIGNED NOT NULL,
+ ttb_sortkey VARBINARY(255) NOT NULL,
+ UNIQUE INDEX ttb_type_sortkey_status (
+ ttb_type, ttb_sortkey, ttb_status
+ ),
+ PRIMARY KEY(ttb_page_id)
+) /*$wgDBTableOptions*/;
diff --git a/Translate/sql/postgres/patch-revtag-unique-to-pk.sql b/Translate/sql/postgres/patch-revtag-unique-to-pk.sql
new file mode 100644
index 00000000..027f685d
--- /dev/null
+++ b/Translate/sql/postgres/patch-revtag-unique-to-pk.sql
@@ -0,0 +1,7 @@
+-- This file is automatically generated using maintenance/generateSchemaChangeSql.php.
+-- Source: sql/abstractSchemaChanges/patch-revtag-unique-to-pk.json
+-- Do not modify this file directly.
+-- See https://www.mediawiki.org/wiki/Manual:Schema_changes
+DROP INDEX rt_type_page_revision;
+ALTER TABLE revtag
+ADD PRIMARY KEY (rt_type, rt_page, rt_revision); \ No newline at end of file
diff --git a/Translate/sql/postgres/patch-translate_messageindex-unique-to-pk.sql b/Translate/sql/postgres/patch-translate_messageindex-unique-to-pk.sql
new file mode 100644
index 00000000..f4780290
--- /dev/null
+++ b/Translate/sql/postgres/patch-translate_messageindex-unique-to-pk.sql
@@ -0,0 +1,7 @@
+-- This file is automatically generated using maintenance/generateSchemaChangeSql.php.
+-- Source: sql/abstractSchemaChanges/patch-translate_messageindex-unique-to-pk.json
+-- Do not modify this file directly.
+-- See https://www.mediawiki.org/wiki/Manual:Schema_changes
+DROP INDEX tmi_key;
+ALTER TABLE translate_messageindex
+ADD PRIMARY KEY (tmi_key); \ No newline at end of file
diff --git a/Translate/sql/postgres/patch-translate_tmt-unique-to-pk.sql b/Translate/sql/postgres/patch-translate_tmt-unique-to-pk.sql
new file mode 100644
index 00000000..c9dba3ee
--- /dev/null
+++ b/Translate/sql/postgres/patch-translate_tmt-unique-to-pk.sql
@@ -0,0 +1,7 @@
+-- This file is automatically generated using maintenance/generateSchemaChangeSql.php.
+-- Source: sql/abstractSchemaChanges/patch-translate_tmt-unique-to-pk.json
+-- Do not modify this file directly.
+-- See https://www.mediawiki.org/wiki/Manual:Schema_changes
+DROP INDEX tms_sid_lang;
+ALTER TABLE translate_tmt
+ADD PRIMARY KEY (tmt_sid, tmt_lang); \ No newline at end of file
diff --git a/Translate/sql/postgres/tables-generated.sql b/Translate/sql/postgres/tables-generated.sql
new file mode 100644
index 00000000..42e3c5e5
--- /dev/null
+++ b/Translate/sql/postgres/tables-generated.sql
@@ -0,0 +1,129 @@
+-- This file is automatically generated using maintenance/generateSchemaSql.php.
+-- Source: extensions/Translate/sql/tables.json
+-- Do not modify this file directly.
+-- See https://www.mediawiki.org/wiki/Manual:Schema_changes
+CREATE TABLE translate_sections (
+ trs_page INT NOT NULL,
+ trs_key TEXT NOT NULL,
+ trs_text TEXT NOT NULL,
+ trs_order INT DEFAULT NULL,
+ PRIMARY KEY(trs_page, trs_key)
+);
+
+CREATE INDEX trs_page_order ON translate_sections (trs_page, trs_order);
+
+
+CREATE TABLE revtag (
+ rt_type TEXT NOT NULL,
+ rt_page INT NOT NULL,
+ rt_revision INT NOT NULL,
+ rt_value TEXT DEFAULT NULL,
+ PRIMARY KEY(rt_type, rt_page, rt_revision)
+);
+
+CREATE INDEX rt_revision_type ON revtag (rt_revision, rt_type);
+
+
+CREATE TABLE translate_groupstats (
+ tgs_group TEXT NOT NULL,
+ tgs_lang TEXT NOT NULL,
+ tgs_total INT DEFAULT NULL,
+ tgs_translated INT DEFAULT NULL,
+ tgs_fuzzy INT DEFAULT NULL,
+ tgs_proofread INT DEFAULT NULL,
+ PRIMARY KEY(tgs_group, tgs_lang)
+);
+
+CREATE INDEX tgs_lang ON translate_groupstats (tgs_lang);
+
+
+CREATE TABLE translate_reviews (
+ trr_user INT NOT NULL,
+ trr_page INT NOT NULL,
+ trr_revision INT NOT NULL,
+ PRIMARY KEY(trr_page, trr_revision, trr_user)
+);
+
+
+CREATE TABLE translate_groupreviews (
+ tgr_group TEXT NOT NULL,
+ tgr_lang TEXT NOT NULL,
+ tgr_state TEXT NOT NULL,
+ PRIMARY KEY(tgr_group, tgr_lang)
+);
+
+
+CREATE TABLE translate_tms (
+ tms_sid SERIAL NOT NULL,
+ tms_lang TEXT NOT NULL,
+ tms_len INT NOT NULL,
+ tms_text TEXT NOT NULL,
+ tms_context TEXT NOT NULL,
+ PRIMARY KEY(tms_sid)
+);
+
+CREATE INDEX tms_lang_len ON translate_tms (tms_lang, tms_len);
+
+
+CREATE TABLE translate_tmt (
+ tmt_sid INT NOT NULL,
+ tmt_lang TEXT NOT NULL,
+ tmt_text TEXT NOT NULL,
+ PRIMARY KEY(tmt_sid, tmt_lang)
+);
+
+
+CREATE TABLE translate_tmf (
+ tmf_sid INT NOT NULL, tmf_text TEXT NOT NULL
+);
+
+CREATE INDEX tmf_text ON translate_tmf (tmf_text);
+
+
+CREATE TABLE translate_metadata (
+ tmd_group TEXT NOT NULL,
+ tmd_key TEXT NOT NULL,
+ tmd_value TEXT NOT NULL,
+ PRIMARY KEY(tmd_group, tmd_key)
+);
+
+
+CREATE TABLE translate_messageindex (
+ tmi_key TEXT NOT NULL,
+ tmi_value TEXT NOT NULL,
+ PRIMARY KEY(tmi_key)
+);
+
+
+CREATE TABLE translate_stash (
+ ts_user INT NOT NULL,
+ ts_namespace INT NOT NULL,
+ ts_title TEXT NOT NULL,
+ ts_value TEXT NOT NULL,
+ ts_metadata TEXT NOT NULL,
+ PRIMARY KEY(ts_user, ts_namespace, ts_title)
+);
+
+
+CREATE TABLE translate_cache (
+ tc_key TEXT NOT NULL,
+ tc_value TEXT DEFAULT NULL,
+ tc_exptime TIMESTAMPTZ DEFAULT NULL,
+ tc_tag TEXT DEFAULT NULL,
+ PRIMARY KEY(tc_key)
+);
+
+CREATE INDEX tc_tag ON translate_cache (tc_tag);
+
+
+CREATE TABLE translate_translatable_bundles (
+ ttb_page_id INT NOT NULL,
+ ttb_type SMALLINT NOT NULL,
+ ttb_status SMALLINT NOT NULL,
+ ttb_sortkey TEXT NOT NULL,
+ PRIMARY KEY(ttb_page_id)
+);
+
+CREATE UNIQUE INDEX ttb_type_sortkey_status ON translate_translatable_bundles (
+ ttb_type, ttb_sortkey, ttb_status
+);
diff --git a/Translate/sql/sqlite/patch-revtag-unique-to-pk.sql b/Translate/sql/sqlite/patch-revtag-unique-to-pk.sql
new file mode 100644
index 00000000..6bbcfc89
--- /dev/null
+++ b/Translate/sql/sqlite/patch-revtag-unique-to-pk.sql
@@ -0,0 +1,16 @@
+-- This file is automatically generated using maintenance/generateSchemaChangeSql.php.
+-- Source: sql/abstractSchemaChanges/patch-revtag-unique-to-pk.json
+-- Do not modify this file directly.
+-- See https://www.mediawiki.org/wiki/Manual:Schema_changes
+DROP INDEX rt_type_page_revision;
+DROP INDEX rt_revision_type;
+CREATE TEMPORARY TABLE /*_*/__temp__revtag AS
+SELECT rt_type, rt_page, rt_revision, rt_value
+FROM /*_*/revtag;
+DROP TABLE /*_*/revtag;
+CREATE TABLE /*_*/revtag ( rt_type BLOB NOT NULL, rt_page INTEGER NOT NULL, rt_revision INTEGER NOT NULL, rt_value BLOB DEFAULT NULL, PRIMARY KEY(rt_type, rt_page, rt_revision) );
+INSERT INTO /*_*/revtag ( rt_type, rt_page, rt_revision, rt_value )
+SELECT rt_type, rt_page, rt_revision, rt_value
+FROM /*_*/__temp__revtag;
+DROP TABLE /*_*/__temp__revtag;
+CREATE INDEX rt_revision_type ON /*_*/revtag (rt_revision, rt_type); \ No newline at end of file
diff --git a/Translate/sql/sqlite/patch-translate_messageindex-unique-to-pk.sql b/Translate/sql/sqlite/patch-translate_messageindex-unique-to-pk.sql
new file mode 100644
index 00000000..a2e60b80
--- /dev/null
+++ b/Translate/sql/sqlite/patch-translate_messageindex-unique-to-pk.sql
@@ -0,0 +1,14 @@
+-- This file is automatically generated using maintenance/generateSchemaChangeSql.php.
+-- Source: sql/abstractSchemaChanges/patch-translate_messageindex-unique-to-pk.json
+-- Do not modify this file directly.
+-- See https://www.mediawiki.org/wiki/Manual:Schema_changes
+DROP INDEX tmi_key;
+CREATE TEMPORARY TABLE /*_*/__temp__translate_messageindex AS
+SELECT tmi_key, tmi_value
+FROM /*_*/translate_messageindex;
+DROP TABLE /*_*/translate_messageindex;
+CREATE TABLE /*_*/translate_messageindex ( tmi_key BLOB NOT NULL, tmi_value BLOB NOT NULL, PRIMARY KEY(tmi_key) );
+INSERT INTO /*_*/translate_messageindex (tmi_key, tmi_value)
+SELECT tmi_key, tmi_value
+FROM /*_*/__temp__translate_messageindex;
+DROP TABLE /*_*/__temp__translate_messageindex; \ No newline at end of file
diff --git a/Translate/sql/sqlite/patch-translate_tmt-unique-to-pk.sql b/Translate/sql/sqlite/patch-translate_tmt-unique-to-pk.sql
new file mode 100644
index 00000000..a0f8fdab
--- /dev/null
+++ b/Translate/sql/sqlite/patch-translate_tmt-unique-to-pk.sql
@@ -0,0 +1,14 @@
+-- This file is automatically generated using maintenance/generateSchemaChangeSql.php.
+-- Source: sql/abstractSchemaChanges/patch-translate_tmt-unique-to-pk.json
+-- Do not modify this file directly.
+-- See https://www.mediawiki.org/wiki/Manual:Schema_changes
+DROP INDEX tms_sid_lang;
+CREATE TEMPORARY TABLE /*_*/__temp__translate_tmt AS
+SELECT tmt_sid, tmt_lang, tmt_text
+FROM /*_*/translate_tmt;
+DROP TABLE /*_*/translate_tmt;
+CREATE TABLE /*_*/translate_tmt ( tmt_sid INTEGER UNSIGNED NOT NULL, tmt_lang BLOB NOT NULL, tmt_text BLOB NOT NULL, PRIMARY KEY(tmt_sid, tmt_lang) );
+INSERT INTO /*_*/translate_tmt (tmt_sid, tmt_lang, tmt_text)
+SELECT tmt_sid, tmt_lang, tmt_text
+FROM /*_*/__temp__translate_tmt;
+DROP TABLE /*_*/__temp__translate_tmt; \ No newline at end of file
diff --git a/Translate/sql/sqlite/revtag.sql b/Translate/sql/sqlite/revtag.sql
new file mode 100644
index 00000000..cf511e8f
--- /dev/null
+++ b/Translate/sql/sqlite/revtag.sql
@@ -0,0 +1,9 @@
+CREATE TABLE /*_*/revtag (
+ rt_type BLOB NOT NULL,
+ rt_page INTEGER NOT NULL,
+ rt_revision INTEGER NOT NULL,
+ rt_value BLOB DEFAULT NULL,
+ PRIMARY KEY(rt_type, rt_page, rt_revision)
+);
+
+CREATE INDEX rt_revision_type ON /*_*/revtag (rt_revision, rt_type);
diff --git a/Translate/sql/sqlite/translate_cache.sql b/Translate/sql/sqlite/translate_cache.sql
new file mode 100644
index 00000000..c9b70f00
--- /dev/null
+++ b/Translate/sql/sqlite/translate_cache.sql
@@ -0,0 +1,9 @@
+CREATE TABLE /*_*/translate_cache (
+ tc_key BLOB NOT NULL,
+ tc_value BLOB DEFAULT NULL,
+ tc_exptime BLOB DEFAULT NULL,
+ tc_tag BLOB DEFAULT NULL,
+ PRIMARY KEY(tc_key)
+);
+
+CREATE INDEX tc_tag ON /*_*/translate_cache (tc_tag);
diff --git a/Translate/sql/sqlite/translate_groupreviews.sql b/Translate/sql/sqlite/translate_groupreviews.sql
new file mode 100644
index 00000000..25a9f2b6
--- /dev/null
+++ b/Translate/sql/sqlite/translate_groupreviews.sql
@@ -0,0 +1,6 @@
+CREATE TABLE /*_*/translate_groupreviews (
+ tgr_group BLOB NOT NULL,
+ tgr_lang BLOB NOT NULL,
+ tgr_state BLOB NOT NULL,
+ PRIMARY KEY(tgr_group, tgr_lang)
+);
diff --git a/Translate/sql/sqlite/translate_groupstats.sql b/Translate/sql/sqlite/translate_groupstats.sql
new file mode 100644
index 00000000..d89bee8f
--- /dev/null
+++ b/Translate/sql/sqlite/translate_groupstats.sql
@@ -0,0 +1,11 @@
+CREATE TABLE /*_*/translate_groupstats (
+ tgs_group BLOB NOT NULL,
+ tgs_lang BLOB NOT NULL,
+ tgs_total INTEGER UNSIGNED DEFAULT NULL,
+ tgs_translated INTEGER UNSIGNED DEFAULT NULL,
+ tgs_fuzzy INTEGER UNSIGNED DEFAULT NULL,
+ tgs_proofread INTEGER UNSIGNED DEFAULT NULL,
+ PRIMARY KEY(tgs_group, tgs_lang)
+);
+
+CREATE INDEX tgs_lang ON /*_*/translate_groupstats (tgs_lang);
diff --git a/Translate/sql/sqlite/translate_messageindex.sql b/Translate/sql/sqlite/translate_messageindex.sql
new file mode 100644
index 00000000..078a88aa
--- /dev/null
+++ b/Translate/sql/sqlite/translate_messageindex.sql
@@ -0,0 +1,5 @@
+CREATE TABLE /*_*/translate_messageindex (
+ tmi_key BLOB NOT NULL,
+ tmi_value BLOB NOT NULL,
+ PRIMARY KEY(tmi_key)
+);
diff --git a/Translate/sql/sqlite/translate_metadata.sql b/Translate/sql/sqlite/translate_metadata.sql
new file mode 100644
index 00000000..e13329d6
--- /dev/null
+++ b/Translate/sql/sqlite/translate_metadata.sql
@@ -0,0 +1,6 @@
+CREATE TABLE /*_*/translate_metadata (
+ tmd_group BLOB NOT NULL,
+ tmd_key BLOB NOT NULL,
+ tmd_value BLOB NOT NULL,
+ PRIMARY KEY(tmd_group, tmd_key)
+);
diff --git a/Translate/sql/sqlite/translate_reviews.sql b/Translate/sql/sqlite/translate_reviews.sql
new file mode 100644
index 00000000..e3eb1ee8
--- /dev/null
+++ b/Translate/sql/sqlite/translate_reviews.sql
@@ -0,0 +1,6 @@
+CREATE TABLE /*_*/translate_reviews (
+ trr_user INTEGER NOT NULL,
+ trr_page INTEGER NOT NULL,
+ trr_revision INTEGER NOT NULL,
+ PRIMARY KEY(trr_page, trr_revision, trr_user)
+);
diff --git a/Translate/sql/sqlite/translate_sections.sql b/Translate/sql/sqlite/translate_sections.sql
new file mode 100644
index 00000000..5908d8cf
--- /dev/null
+++ b/Translate/sql/sqlite/translate_sections.sql
@@ -0,0 +1,9 @@
+CREATE TABLE /*_*/translate_sections (
+ trs_page INTEGER UNSIGNED NOT NULL,
+ trs_key BLOB NOT NULL,
+ trs_text BLOB NOT NULL,
+ trs_order INTEGER UNSIGNED DEFAULT NULL,
+ PRIMARY KEY(trs_page, trs_key)
+);
+
+CREATE INDEX trs_page_order ON /*_*/translate_sections (trs_page, trs_order);
diff --git a/Translate/sql/sqlite/translate_stash.sql b/Translate/sql/sqlite/translate_stash.sql
new file mode 100644
index 00000000..f45f7b78
--- /dev/null
+++ b/Translate/sql/sqlite/translate_stash.sql
@@ -0,0 +1,8 @@
+CREATE TABLE /*_*/translate_stash (
+ ts_user INTEGER NOT NULL,
+ ts_namespace INTEGER NOT NULL,
+ ts_title BLOB NOT NULL,
+ ts_value BLOB NOT NULL,
+ ts_metadata BLOB NOT NULL,
+ PRIMARY KEY(ts_user, ts_namespace, ts_title)
+);
diff --git a/Translate/sql/sqlite/translate_tm.sql b/Translate/sql/sqlite/translate_tm.sql
new file mode 100644
index 00000000..1b0744de
--- /dev/null
+++ b/Translate/sql/sqlite/translate_tm.sql
@@ -0,0 +1,22 @@
+CREATE TABLE /*_*/translate_tms (
+ tms_sid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
+ tms_lang BLOB NOT NULL, tms_len INTEGER UNSIGNED NOT NULL,
+ tms_text BLOB NOT NULL, tms_context BLOB NOT NULL
+);
+
+CREATE INDEX tms_lang_len ON /*_*/translate_tms (tms_lang, tms_len);
+
+
+CREATE TABLE /*_*/translate_tmt (
+ tmt_sid INTEGER UNSIGNED NOT NULL,
+ tmt_lang BLOB NOT NULL,
+ tmt_text BLOB NOT NULL,
+ PRIMARY KEY(tmt_sid, tmt_lang)
+);
+
+
+CREATE TABLE /*_*/translate_tmf (
+ tmf_sid INTEGER UNSIGNED NOT NULL, tmf_text CLOB NOT NULL
+);
+
+CREATE INDEX tmf_text ON /*_*/translate_tmf (tmf_text);
diff --git a/Translate/sql/sqlite/translate_translatable_bundles.sql b/Translate/sql/sqlite/translate_translatable_bundles.sql
new file mode 100644
index 00000000..04b70adf
--- /dev/null
+++ b/Translate/sql/sqlite/translate_translatable_bundles.sql
@@ -0,0 +1,11 @@
+CREATE TABLE /*_*/translate_translatable_bundles (
+ ttb_page_id INTEGER UNSIGNED NOT NULL,
+ ttb_type SMALLINT UNSIGNED NOT NULL,
+ ttb_status SMALLINT UNSIGNED NOT NULL,
+ ttb_sortkey BLOB NOT NULL,
+ PRIMARY KEY(ttb_page_id)
+);
+
+CREATE UNIQUE INDEX ttb_type_sortkey_status ON /*_*/translate_translatable_bundles (
+ ttb_type, ttb_sortkey, ttb_status
+);
diff --git a/Translate/sql/tables.json b/Translate/sql/tables.json
new file mode 100644
index 00000000..b753caa0
--- /dev/null
+++ b/Translate/sql/tables.json
@@ -0,0 +1,415 @@
+[
+ {
+ "name": "translate_sections",
+ "columns": [
+ {
+ "name": "trs_page",
+ "comment": "Key to page_id",
+ "type": "integer",
+ "options": { "notnull": true, "unsigned": true }
+ },
+ {
+ "name": "trs_key",
+ "comment": "Customizable section name",
+ "type": "binary",
+ "options": { "notnull": true, "length": 255 }
+ },
+ {
+ "name": "trs_text",
+ "comment": "Section contents",
+ "type": "blob",
+ "options": { "notnull": true, "length": 16777215 }
+ },
+ {
+ "name": "trs_order",
+ "comment": "Section order",
+ "type": "integer",
+ "options": { "notnull": false, "unsigned": true }
+ }
+ ],
+ "indexes": [
+ {
+ "name": "trs_page_order",
+ "columns": [ "trs_page", "trs_order" ],
+ "unique": false
+ }
+ ],
+ "pk": [ "trs_page", "trs_key" ]
+ },
+ {
+ "name": "revtag",
+ "comment": "Revision tags",
+ "columns": [
+ {
+ "name": "rt_type",
+ "type": "binary",
+ "options": { "notnull": true, "length": 60 }
+ },
+ {
+ "name": "rt_page",
+ "comment": "Link to page.page_id",
+ "type": "integer",
+ "options": { "notnull": true }
+ },
+ {
+ "name": "rt_revision",
+ "comment": "Link to revision.rev_id",
+ "type": "integer",
+ "options": { "notnull": true }
+ },
+ {
+ "name": "rt_value",
+ "type": "blob",
+ "options": { "length": 65530, "notnull": false }
+ }
+ ],
+ "indexes": [
+ {
+ "name": "rt_revision_type",
+ "comment": "Index for finding the tags on a given revision",
+ "columns": [ "rt_revision", "rt_type" ],
+ "unique": false
+ }
+ ],
+ "pk": [ "rt_type", "rt_page", "rt_revision" ]
+ },
+ {
+ "name": "translate_groupstats",
+ "columns": [
+ {
+ "name": "tgs_group",
+ "type": "binary",
+ "options": { "notnull": true, "length": 100 }
+ },
+ {
+ "name": "tgs_lang",
+ "type": "binary",
+ "options": { "notnull": true, "length": 20 }
+ },
+ {
+ "name": "tgs_total",
+ "type": "integer",
+ "options": { "notnull": false, "unsigned": true }
+ },
+ {
+ "name": "tgs_translated",
+ "type": "integer",
+ "options": { "notnull": false, "unsigned": true }
+ },
+ {
+ "name": "tgs_fuzzy",
+ "type": "integer",
+ "options": { "notnull": false, "unsigned": true }
+ },
+ {
+ "name": "tgs_proofread",
+ "type": "integer",
+ "options": { "notnull": false, "unsigned": true }
+ }
+ ],
+ "indexes": [
+ {
+ "name": "tgs_lang",
+ "columns": [ "tgs_lang" ],
+ "unique": false
+ }
+ ],
+ "pk": [ "tgs_group", "tgs_lang" ]
+ },
+ {
+ "name": "translate_reviews",
+ "comment": "Translation reviews; to store reviews of a page revision by a user.",
+ "columns": [
+ {
+ "name": "trr_user",
+ "type": "integer",
+ "options": { "notnull": true }
+ },
+ {
+ "name": "trr_page",
+ "comment": "Link to page.page_id",
+ "type": "integer",
+ "options": { "notnull": true }
+ },
+ {
+ "name": "trr_revision",
+ "comment": "Link to revision.rev_id",
+ "type": "integer",
+ "options": { "notnull": true }
+ }
+ ],
+ "pk": [ "trr_page", "trr_revision", "trr_user" ],
+ "indexes": []
+ },
+ {
+ "name": "translate_groupreviews",
+ "comment": "Message group workflow states",
+ "columns": [
+ {
+ "name": "tgr_group",
+ "comment": "The length we need to accommodate 'page-' + the full pagename including prefix. That could be 255 + prefix (length not limited), but page translation section pages limit that to shorter, because it needs to accommodate /sectionname/languagecode suffix to the page name.",
+ "type": "binary",
+ "options": { "notnull": true, "length": 200 }
+ },
+ {
+ "name": "tgr_lang",
+ "type": "binary",
+ "options": { "notnull": true, "length": 20 }
+ },
+ {
+ "name": "tgr_state",
+ "comment": "Any of user configured values from $wgTranslateWorkflowStates",
+ "type": "binary",
+ "options": { "notnull": true, "length": 32 }
+ }
+ ],
+ "pk": [ "tgr_group", "tgr_lang" ],
+ "indexes": []
+ },
+ {
+ "name": "translate_tms",
+ "columns": [
+ {
+ "name": "tms_sid",
+ "type": "integer",
+ "options": { "unsigned": true, "notnull": true, "autoincrement": true }
+ },
+ {
+ "name": "tms_lang",
+ "comment": "Language code",
+ "type": "binary",
+ "options": { "notnull": true, "length": 20 }
+ },
+ {
+ "name": "tms_len",
+ "comment": "Length of the string in characters",
+ "type": "integer",
+ "options": { "unsigned": true, "notnull": true }
+ },
+ {
+ "name": "tms_text",
+ "comment": "The actual text",
+ "type": "blob",
+ "options": { "length": 16777215, "notnull": true }
+ },
+ {
+ "name": "tms_context",
+ "comment": "Identifier where this text came from",
+ "type": "blob",
+ "options": { "length": 16777215, "notnull": true }
+ }
+ ],
+ "pk": [ "tms_sid" ],
+ "indexes": [
+ {
+ "name": "tms_lang_len",
+ "columns": [ "tms_lang", "tms_len" ],
+ "unique": false
+ }
+ ]
+ },
+ {
+ "name": "translate_tmt",
+ "comment": "Stored translations",
+ "columns": [
+ {
+ "name": "tmt_sid",
+ "type": "integer",
+ "options": { "unsigned": true, "notnull": true }
+ },
+ {
+ "name": "tmt_lang",
+ "comment": "Language code",
+ "type": "binary",
+ "options": { "notnull": true, "length": 20 }
+ },
+ {
+ "name": "tmt_text",
+ "comment": "The actual text",
+ "type": "blob",
+ "options": { "length": 16777215, "notnull": true }
+ }
+ ],
+ "pk": [ "tmt_sid", "tmt_lang" ],
+ "indexes": []
+ },
+ {
+ "name": "translate_tmf",
+ "comment": "Fulltext search index",
+ "columns": [
+ {
+ "name": "tmf_sid",
+ "type": "integer",
+ "options": { "unsigned": true, "notnull": true }
+ },
+ {
+ "name": "tmf_text",
+ "type": "text",
+ "options": { "length": 65535 }
+ }
+ ],
+ "pk": [],
+ "indexes": [
+ {
+ "name": "tmf_text",
+ "columns": [ "tmf_text" ],
+ "unique": false,
+ "flags": [
+ "fulltext"
+ ]
+ }
+ ],
+ "table_options": [
+ "ENGINE=MyISAM",
+ "DEFAULT CHARSET=utf8mb4"
+ ]
+ },
+ {
+ "name": "translate_metadata",
+ "comment": "Translate group metadata",
+ "columns": [
+ {
+ "name": "tmd_group",
+ "type": "binary",
+ "options": { "notnull": true, "length": 200 }
+ },
+ {
+ "name": "tmd_key",
+ "type": "binary",
+ "options": { "notnull": true, "length": 20 }
+ },
+ {
+ "name": "tmd_value",
+ "type": "blob",
+ "options": { "length": 16777215, "notnull": true }
+ }
+ ],
+ "pk": [ "tmd_group", "tmd_key" ],
+ "indexes": []
+ },
+ {
+ "name": "translate_messageindex",
+ "columns": [
+ {
+ "name": "tmi_key",
+ "type": "binary",
+ "options": { "notnull": true, "length": 255 }
+ },
+ {
+ "name": "tmi_value",
+ "type": "binary",
+ "options": { "notnull": true, "length": 255 }
+ }
+ ],
+ "pk": [ "tmi_key" ],
+ "indexes": []
+ },
+ {
+ "name": "translate_stash",
+ "columns": [
+ {
+ "name": "ts_user",
+ "type": "integer",
+ "options": { "notnull": true }
+ },
+ {
+ "name": "ts_namespace",
+ "type": "integer",
+ "options": { "notnull": true }
+ },
+ {
+ "name": "ts_title",
+ "type": "binary",
+ "options": { "notnull": true, "length": 255 }
+ },
+ {
+ "name": "ts_value",
+ "type": "blob",
+ "options": { "length": 16777215, "notnull": true }
+ },
+ {
+ "name": "ts_metadata",
+ "type": "blob",
+ "options": { "length": 16777215, "notnull": true }
+ }
+ ],
+ "pk": [ "ts_user", "ts_namespace", "ts_title" ],
+ "indexes": []
+ },
+ {
+ "name": "translate_cache",
+ "comment": "",
+ "columns": [
+ {
+ "name": "tc_key",
+ "comment": "Cache key",
+ "type": "binary",
+ "options": { "notnull": true, "length": 255 }
+ },
+ {
+ "name": "tc_value",
+ "comment": "Cache value",
+ "type": "blob",
+ "options": { "length": 16777215, "notnull": false }
+ },
+ {
+ "name": "tc_exptime",
+ "comment": "Key expiry time",
+ "type": "mwtimestamp",
+ "options": { "notnull": false }
+ },
+ {
+ "name": "tc_tag",
+ "comment": "Tag and group cache keys",
+ "type": "binary",
+ "options": { "notnull": false, "length": 255 }
+ }
+ ],
+ "pk": [ "tc_key" ],
+ "indexes": [
+ {
+ "name": "tc_tag",
+ "columns": [ "tc_tag" ],
+ "unique": false
+ }
+ ]
+ },
+ {
+ "name": "translate_translatable_bundles",
+ "comment": "Translatable bundles with their current status.",
+ "columns": [
+ {
+ "name": "ttb_page_id",
+ "comment": "Key to page.page_id",
+ "type": "integer",
+ "options": { "unsigned": true, "notnull": true }
+ },
+ {
+ "name": "ttb_type",
+ "comment": "Type of the translatable bundle",
+ "type": "smallint",
+ "options": { "unsigned": true, "notnull": true }
+ },
+ {
+ "name": "ttb_status",
+ "comment": "Current status of the translatable bundle",
+ "type": "smallint",
+ "options": { "unsigned": true, "notnull": true }
+ },
+ {
+ "name": "ttb_sortkey",
+ "comment": "Sortkey for the translatable bundle.",
+ "type": "binary",
+ "options": { "length": 255, "notnull": true }
+ }
+ ],
+ "indexes": [
+ {
+ "name": "ttb_type_sortkey_status",
+ "columns": [ "ttb_type", "ttb_sortkey", "ttb_status" ],
+ "unique": true
+ }
+ ],
+ "pk": [ "ttb_page_id" ]
+ }
+]
diff --git a/Translate/sql/translate_reviews-patch-01-primary-key.sql b/Translate/sql/translate_reviews-patch-01-primary-key.sql
new file mode 100644
index 00000000..9017fb53
--- /dev/null
+++ b/Translate/sql/translate_reviews-patch-01-primary-key.sql
@@ -0,0 +1,3 @@
+ALTER TABLE /*_*/translate_reviews
+ ADD PRIMARY KEY (trr_page, trr_revision, trr_user),
+ DROP INDEX /*i*/trr_user_page_revision;
diff --git a/Translate/src/Cache/PersistentCache.php b/Translate/src/Cache/PersistentCache.php
new file mode 100644
index 00000000..28d91c75
--- /dev/null
+++ b/Translate/src/Cache/PersistentCache.php
@@ -0,0 +1,31 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Cache;
+
+/** Defines what method should be provided by a class implementing a persistent cache */
+interface PersistentCache {
+ /** @return PersistentCacheEntry[] */
+ public function get( string ...$keynames ): array;
+
+ public function getWithLock( string $keyname ): ?PersistentCacheEntry;
+
+ public function has( string $keyname ): bool;
+
+ public function hasEntryWithTag( string $tag ): bool;
+
+ public function hasExpiredEntry( string $keyname ): bool;
+
+ public function setExpiry( string $keyname, int $expiryTime ): void;
+
+ /** @return PersistentCacheEntry[] */
+ public function getByTag( string $tag ): array;
+
+ public function set( PersistentCacheEntry ...$cacheEntry ): void;
+
+ public function delete( string ...$keyname ): void;
+
+ public function deleteEntriesWithTag( string $tag ): void;
+
+ public function clear(): void;
+}
diff --git a/Translate/src/Cache/PersistentCacheEntry.php b/Translate/src/Cache/PersistentCacheEntry.php
new file mode 100644
index 00000000..a84a1fdc
--- /dev/null
+++ b/Translate/src/Cache/PersistentCacheEntry.php
@@ -0,0 +1,76 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Cache;
+
+use DateTime;
+use InvalidArgumentException;
+
+/**
+ * Represents a single result from the persistent cache
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2020.12
+ */
+class PersistentCacheEntry {
+ private const MAX_KEY_LENGTH = 255;
+ private const MAX_TAG_LENGTH = 255;
+
+ /** @var string */
+ private $key;
+ /** @var mixed */
+ private $value;
+ /** @var int|null */
+ private $exptime;
+ /** @var string|null */
+ private $tag;
+
+ public function __construct(
+ string $key,
+ $value = null,
+ int $exptime = null,
+ string $tag = null
+ ) {
+ if ( strlen( $key ) > self::MAX_KEY_LENGTH ) {
+ throw new InvalidArgumentException(
+ "The length of key: $key is greater than allowed " . self::MAX_KEY_LENGTH
+ );
+ }
+
+ if ( $tag && strlen( $tag ) > self::MAX_TAG_LENGTH ) {
+ throw new InvalidArgumentException(
+ "The length of tag: $tag is greater than allowed " . self::MAX_TAG_LENGTH
+ );
+ }
+
+ $this->key = $key;
+ $this->value = $value;
+ $this->exptime = $exptime;
+ $this->tag = $tag;
+ }
+
+ public function key(): string {
+ return $this->key;
+ }
+
+ /** @return mixed */
+ public function value() {
+ return $this->value;
+ }
+
+ public function exptime(): ?int {
+ return $this->exptime;
+ }
+
+ public function tag(): ?string {
+ return $this->tag;
+ }
+
+ public function hasExpired(): bool {
+ if ( $this->exptime ) {
+ return $this->exptime < ( new DateTime() )->getTimestamp();
+ }
+
+ return false;
+ }
+}
diff --git a/Translate/src/Cache/PersistentDatabaseCache.php b/Translate/src/Cache/PersistentDatabaseCache.php
new file mode 100644
index 00000000..625c2b83
--- /dev/null
+++ b/Translate/src/Cache/PersistentDatabaseCache.php
@@ -0,0 +1,194 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Cache;
+
+use ArrayIterator;
+use Iterator;
+use MediaWiki\Json\JsonCodec;
+use Wikimedia\Rdbms\ILoadBalancer;
+
+/**
+ * A persistent cache implementation using the database.
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2020.12
+ */
+class PersistentDatabaseCache implements PersistentCache {
+ private const TABLE_NAME = 'translate_cache';
+
+ /** @var ILoadBalancer */
+ private $loadBalancer;
+ /** @var JsonCodec */
+ private $jsonCodec;
+
+ public function __construct( ILoadBalancer $loadBalancer, JsonCodec $jsonCodec ) {
+ $this->loadBalancer = $loadBalancer;
+ $this->jsonCodec = $jsonCodec;
+ }
+
+ /** @return PersistentCacheEntry[] */
+ public function get( string ...$keynames ): array {
+ $dbr = $this->loadBalancer->getConnectionRef( DB_REPLICA );
+ $rows = $dbr->select(
+ self::TABLE_NAME,
+ [ 'tc_key', 'tc_value', 'tc_exptime', 'tc_tag' ],
+ [ 'tc_key ' => $keynames ],
+ __METHOD__
+ );
+
+ return $this->buildEntries( $rows );
+ }
+
+ public function getWithLock( string $keyname ): ?PersistentCacheEntry {
+ $dbr = $this->loadBalancer->getConnectionRef( DB_PRIMARY );
+
+ $conds = [ 'tc_key' => $keyname ];
+
+ $rows = $dbr->select(
+ self::TABLE_NAME,
+ [ 'tc_key', 'tc_value', 'tc_exptime', 'tc_tag' ],
+ $conds,
+ __METHOD__,
+ [ 'FOR UPDATE' ]
+ );
+
+ $entries = $this->buildEntries( $rows );
+ return count( $entries ) ? $entries[0] : null;
+ }
+
+ /** @return PersistentCacheEntry[] */
+ public function getByTag( string $tag ): array {
+ $dbr = $this->loadBalancer->getConnectionRef( DB_REPLICA );
+ $rows = $dbr->select(
+ self::TABLE_NAME,
+ [ 'tc_key', 'tc_value', 'tc_exptime', 'tc_tag' ],
+ [ 'tc_tag' => $tag ],
+ __METHOD__
+ );
+
+ return $this->buildEntries( $rows );
+ }
+
+ public function has( string $keyname ): bool {
+ $dbr = $this->loadBalancer->getConnectionRef( DB_REPLICA );
+ $hasRow = $dbr->selectRow(
+ self::TABLE_NAME,
+ 'tc_key',
+ [ 'tc_key' => $keyname ],
+ __METHOD__
+ );
+
+ return (bool)$hasRow;
+ }
+
+ public function hasEntryWithTag( string $tag ): bool {
+ $dbr = $this->loadBalancer->getConnectionRef( DB_REPLICA );
+ $hasRow = $dbr->selectRow(
+ self::TABLE_NAME,
+ 'tc_key',
+ [ 'tc_tag' => $tag ],
+ __METHOD__
+ );
+
+ return (bool)$hasRow;
+ }
+
+ public function hasExpiredEntry( string $keyname ): bool {
+ $dbr = $this->loadBalancer->getConnectionRef( DB_REPLICA );
+ $row = $dbr->selectRow(
+ self::TABLE_NAME,
+ 'tc_expired',
+ [ 'tc_key' => $keyname ],
+ __METHOD__
+ );
+
+ if ( $row === false ) {
+ return false;
+ }
+
+ $rows = new ArrayIterator( [ $row ] );
+ $entry = $this->buildEntries( $rows )[0];
+ return $entry->hasExpired();
+ }
+
+ public function set( PersistentCacheEntry ...$entries ): void {
+ $dbw = $this->loadBalancer->getConnectionRef( DB_PRIMARY );
+
+ foreach ( $entries as $entry ) {
+ $value = $this->jsonCodec->serialize( $entry->value() );
+ $rowsToInsert = [
+ 'tc_key' => $entry->key(),
+ 'tc_value' => $value,
+ 'tc_exptime' => $entry->exptime(),
+ 'tc_tag' => $entry->tag()
+ ];
+
+ $rowsToUpdate = [
+ 'tc_value' => $value,
+ 'tc_exptime' => $entry->exptime(),
+ 'tc_tag' => $entry->tag()
+ ];
+
+ $dbw->upsert(
+ self::TABLE_NAME,
+ $rowsToInsert,
+ 'tc_key',
+ $rowsToUpdate,
+ __METHOD__
+ );
+ }
+ }
+
+ public function setExpiry( string $keyname, int $expiryTime ): void {
+ $dbw = $this->loadBalancer->getConnectionRef( DB_PRIMARY );
+ $dbw->update(
+ self::TABLE_NAME,
+ [ 'tc_exptime' => $expiryTime ],
+ [ 'tc_key' => $keyname ],
+ __METHOD__
+ );
+ }
+
+ public function delete( string ...$keynames ): void {
+ $dbw = $this->loadBalancer->getConnectionRef( DB_PRIMARY );
+ $dbw->delete(
+ self::TABLE_NAME,
+ [ 'tc_key' => $keynames ],
+ __METHOD__
+ );
+ }
+
+ public function deleteEntriesWithTag( string $tag ): void {
+ $dbw = $this->loadBalancer->getConnectionRef( DB_PRIMARY );
+ $dbw->delete(
+ self::TABLE_NAME,
+ [ 'tc_tag' => $tag ],
+ __METHOD__
+ );
+ }
+
+ public function clear(): void {
+ $dbw = $this->loadBalancer->getConnectionRef( DB_PRIMARY );
+ $dbw->delete(
+ self::TABLE_NAME,
+ '*',
+ __METHOD__
+ );
+ }
+
+ /** @return PersistentCacheEntry[] */
+ private function buildEntries( Iterator $rows ): array {
+ $entries = [];
+ foreach ( $rows as $row ) {
+ $entries[] = new PersistentCacheEntry(
+ $row->tc_key,
+ $this->jsonCodec->unserialize( $row->tc_value ),
+ $row->tc_exptime ? (int)$row->tc_exptime : null,
+ $row->tc_tag
+ );
+ }
+
+ return $entries;
+ }
+}
diff --git a/Translate/src/Diagnostics/DeleteEqualTranslationsMaintenanceScript.php b/Translate/src/Diagnostics/DeleteEqualTranslationsMaintenanceScript.php
new file mode 100644
index 00000000..9cb23577
--- /dev/null
+++ b/Translate/src/Diagnostics/DeleteEqualTranslationsMaintenanceScript.php
@@ -0,0 +1,150 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Diagnostics;
+
+use MediaWiki\Extension\Translate\SystemUsers\FuzzyBot;
+use MediaWiki\Extension\Translate\Utilities\BaseMaintenanceScript;
+use MediaWiki\MediaWikiServices;
+use MessageCollection;
+use MessageGroups;
+use SplObjectStorage;
+use Title;
+use TitleValue;
+use TMessage;
+use const SORT_NUMERIC;
+
+/**
+ * @since 2021.01
+ * @license GPL-2.0-or-later
+ * @author Niklas Laxström
+ */
+class DeleteEqualTranslationsMaintenanceScript extends BaseMaintenanceScript {
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Delete translations that are equal to the definition' );
+
+ $this->addOption(
+ 'group',
+ 'Which group to scan',
+ self::REQUIRED,
+ self::HAS_ARG
+ );
+ $this->addOption(
+ 'language',
+ 'Which language to scan',
+ self::REQUIRED,
+ self::HAS_ARG
+ );
+ $this->addOption(
+ 'really',
+ 'Delete the listed pages instead of just listing them'
+ );
+ $this->addOption(
+ 'comment',
+ 'Comment for the deletions'
+ );
+
+ $this->requireExtension( 'Translate' );
+ }
+
+ /** @inheritDoc */
+ public function execute() {
+ $groupId = $this->getOption( 'group' );
+ $language = $this->getOption( 'language' );
+ $group = MessageGroups::getGroup( $groupId );
+ if ( !$group ) {
+ $this->fatalError( "Message group '$groupId' does not exist" );
+ }
+
+ $collection = $group->initCollection( $language );
+ $equalMessages = $this->getEqualMessages( $collection );
+ $equalMessageCount = count( $equalMessages );
+ if ( $equalMessageCount === 0 ) {
+ $this->output( "No translations equal to definition found\n" );
+ return;
+ }
+
+ $stats = $this->getUserStats( $equalMessages );
+ $this->printUserStats( $stats, $equalMessageCount );
+ $this->output( "\n" );
+ $this->printMessages( $equalMessages );
+
+ if ( $this->hasOption( 'really' ) ) {
+ $comment = $this->getOption( 'comment' ) ?? '';
+ $this->deleteMessages( $equalMessages, $comment );
+ } else {
+ $this->output( "This is a dry-run. Run again with --really to delete these messages\n" );
+ }
+ }
+
+ private function getEqualMessages( MessageCollection $collection ): SplObjectStorage {
+ $collection->filter( 'translated', false );
+ $collection->loadTranslations();
+
+ $messages = new SplObjectStorage();
+ foreach ( $collection->keys() as $key => $titleValue ) {
+ /** @var TMessage $message */
+ $message = $collection[$key];
+
+ if ( $message->definition() === $message->translation() ) {
+ $messages->attach( $titleValue, $message );
+ }
+ }
+
+ return $messages;
+ }
+
+ private function getUserStats( SplObjectStorage $messages ): array {
+ $stats = [];
+ foreach ( $messages as $key ) {
+ /** @var TMessage $message */
+ $message = $messages[$key];
+ $index = $message->getProperty( 'last-translator-text' );
+ $stats[$index] = ( $stats[$index] ?? 0 ) + 1;
+ }
+
+ return $stats;
+ }
+
+ private function printUserStats( array $stats, int $equalMessageCount ): void {
+ $this->output( "Found $equalMessageCount message(s) created by these user(s):\n" );
+ arsort( $stats, SORT_NUMERIC );
+ foreach ( $stats as $userName => $count ) {
+ $this->output( sprintf( "%6d | %s\n", $count, $userName ) );
+ }
+ }
+
+ private function printMessages( SplObjectStorage $messages ): void {
+ /** @var TitleValue $key */
+ foreach ( $messages as $key ) {
+ /** @var TMessage $message */
+ $message = $messages[$key];
+ $title = Title::newFromLinkTarget( $key );
+ $this->output(
+ sprintf( "== %s ==\n%s\n\n", $title->getPrefixedText(), $message->translation() )
+ );
+ }
+ }
+
+ private function deleteMessages( SplObjectStorage $messages, string $reason ): void {
+ $user = FuzzyBot::getUser();
+ $wikiPageFactory = MediaWikiServices::getInstance()->getWikiPageFactory();
+
+ /** @var TitleValue $key */
+ foreach ( $messages as $key ) {
+ $title = Title::newFromLinkTarget( $key );
+ $page = $wikiPageFactory->newFromTitle( $title );
+ $status = $page->doDeleteArticleReal(
+ $reason,
+ $user
+ );
+ if ( $status->isOK() ) {
+ $this->output( ".", 'deletions' );
+ } else {
+ $pageName = $title->getPrefixedText();
+ $this->output( "FAILED to delete page $pageName\n" );
+ }
+ }
+ }
+}
diff --git a/Translate/src/Diagnostics/FindUnsynchronizedDefinitionsMaintenanceScript.php b/Translate/src/Diagnostics/FindUnsynchronizedDefinitionsMaintenanceScript.php
new file mode 100644
index 00000000..cc95475f
--- /dev/null
+++ b/Translate/src/Diagnostics/FindUnsynchronizedDefinitionsMaintenanceScript.php
@@ -0,0 +1,116 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Diagnostics;
+
+use FileBasedMessageGroup;
+use MediaWiki\Extension\Translate\Utilities\BaseMaintenanceScript;
+use MessageGroups;
+use Title;
+
+/**
+ * @since 2021.01
+ * @license GPL-2.0-or-later
+ * @author Niklas Laxström
+ */
+class FindUnsynchronizedDefinitionsMaintenanceScript extends BaseMaintenanceScript {
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription(
+ 'This scripts finds definition pages in the wiki that do not have the expected ' .
+ 'content with regards to the message group definition cache for file based message ' .
+ 'groups. This causes the definition diff to appear for translations when it should ' .
+ 'not. See https://phabricator.wikimedia.org/T270844'
+ );
+
+ $this->addArg(
+ 'group-pattern',
+ 'For example page-*,main',
+ self::REQUIRED
+ );
+ $this->addOption(
+ 'ignore-trailing-whitespace',
+ 'Ignore trailing whitespace',
+ self::OPTIONAL,
+ self::NO_ARG,
+ 'w'
+ );
+ $this->addOption(
+ 'fix',
+ 'Try to fix the issues by triggering reprocessing'
+ );
+
+ $this->requireExtension( 'Translate' );
+ }
+
+ /** @inheritDoc */
+ public function execute() {
+ $spec = $this->getArg( 0 );
+ $ignoreTrailingWhitespace = $this->getOption( 'ignore-trailing-whitespace' );
+ $patterns = explode( ',', trim( $spec ) );
+ $groupIds = MessageGroups::expandWildcards( $patterns );
+ $groups = MessageGroups::getGroupsById( $groupIds );
+
+ foreach ( $groups as $index => $group ) {
+ if ( !$group instanceof FileBasedMessageGroup ) {
+ unset( $groups[ $index ] );
+ }
+ }
+
+ $matched = count( $groups );
+ $this->output( "Pattern matched $matched file based message group(s).\n" );
+ $this->output( "Left side is the expected value. Right side is the actual value in wiki.\n" );
+
+ $groupsWithIssues = [];
+ foreach ( $groups as $group ) {
+ $sourceLanguage = $group->getSourceLanguage();
+ $collection = $group->initCollection( $sourceLanguage );
+ $collection->loadTranslations();
+
+ foreach ( $collection->keys() as $mkey => $title ) {
+ $message = $collection[$mkey];
+ $definition = $message->definition() ?? '';
+ $translation = $message->translation() ?? '';
+
+ $differs = $ignoreTrailingWhitespace
+ ? rtrim( $definition ) !== $translation
+ : $definition !== $translation;
+
+ if ( $differs ) {
+ $groupsWithIssues[$group->getId()] = $group;
+ echo Title::newFromLinkTarget( $title )->getPrefixedText() . "\n";
+ echo $this->getSideBySide( "'$definition'", "'$translation'", 80 ) . "\n";
+ }
+ }
+ }
+
+ if ( $this->hasOption( 'fix' ) && $groupsWithIssues ) {
+ foreach ( $groupsWithIssues as $group ) {
+ '@phan-var FileBasedMessageGroup $group';
+ $cache = $group->getMessageGroupCache( $group->getSourceLanguage() );
+ $cache->invalidate();
+ }
+ $script = realpath( __DIR__ . '/../../scripts/processMessageChanges.php' );
+ $groupPattern = implode( ',', array_keys( $groupsWithIssues ) );
+ $command = "php '$script' --group='$groupPattern'";
+ echo "Now run the following command and finish the sync in the wiki:\n$command\n";
+ }
+ }
+
+ private function getSideBySide( string $a, string $b, int $width ): string {
+ $wrapWidth = (int)floor( ( $width - 3 ) / 2 );
+ $aArray = explode( "\n", wordwrap( $a, $wrapWidth, "\n", true ) );
+ $bArray = explode( "\n", wordwrap( $b, $wrapWidth, "\n", true ) );
+ $lines = max( count( $aArray ), count( $bArray ) );
+
+ $out = '';
+ for ( $i = 0; $i < $lines; $i++ ) {
+ $out .= sprintf(
+ "%-{$wrapWidth}s | %-{$wrapWidth}s\n",
+ $aArray[$i] ?? '',
+ $bArray[$i] ?? ''
+ );
+ }
+ return $out;
+ }
+}
diff --git a/Translate/src/Diagnostics/FuzzyTranslationsMaintenanceScript.php b/Translate/src/Diagnostics/FuzzyTranslationsMaintenanceScript.php
new file mode 100644
index 00000000..3105d0b8
--- /dev/null
+++ b/Translate/src/Diagnostics/FuzzyTranslationsMaintenanceScript.php
@@ -0,0 +1,245 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Diagnostics;
+
+use ActorMigration;
+use ContentHandler;
+use IDBAccessObject;
+use MediaWiki\Extension\Translate\SystemUsers\FuzzyBot;
+use MediaWiki\Extension\Translate\Utilities\BaseMaintenanceScript;
+use MediaWiki\MediaWikiServices;
+use MediaWiki\Revision\RevisionStore;
+use MediaWiki\Revision\SlotRecord;
+use MediaWiki\User\UserFactory;
+use Title;
+use TranslateUtils;
+use User;
+use Wikimedia\Rdbms\ILoadBalancer;
+use Wikimedia\Rdbms\IResultWrapper;
+
+/**
+ * @since 2022.01
+ * @license GPL-2.0-or-later
+ * @author Niklas Laxström
+ */
+class FuzzyTranslationsMaintenanceScript extends BaseMaintenanceScript {
+ /** @var ActorMigration */
+ private $actorMigration;
+ /** @var UserFactory */
+ private $userFactory;
+ /** @var RevisionStore */
+ private $revisionStore;
+ /** @var ILoadBalancer */
+ private $DBLoadBalancer;
+
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Fuzzy bot command line script.' );
+ $this->addArg(
+ 'arg',
+ 'Title pattern or username if user option is provided.'
+ );
+ $this->addOption(
+ 'really',
+ '(optional) Really fuzzy, no dry-run'
+ );
+ $this->addOption(
+ 'skiplanguages',
+ '(optional) Skip some languages (comma separated)',
+ false, /*required*/
+ true /*has arg*/
+ );
+ $this->addOption(
+ 'comment',
+ '(optional) Comment for updating',
+ false, /*required*/
+ true /*has arg*/
+ );
+ $this->addOption(
+ 'user',
+ '(optional) Fuzzy the translations made by user given as an argument.',
+ false, /*required*/
+ false /*has arg*/
+ );
+ $this->requireExtension( 'Translate' );
+ }
+
+ private function initServices() {
+ $mwServices = MediaWikiServices::getInstance();
+ $this->actorMigration = $mwServices->getActorMigration();
+ $this->userFactory = $mwServices->getUserFactory();
+ $this->revisionStore = $mwServices->getRevisionStore();
+ $this->DBLoadBalancer = $mwServices->getDBLoadBalancer();
+ }
+
+ public function execute() {
+ $this->initServices();
+
+ $skipLanguages = [];
+ if ( $this->hasOption( 'skiplanguages' ) ) {
+ $skipLanguages = array_map(
+ 'trim',
+ explode( ',', $this->getOption( 'skiplanguages' ) )
+ );
+ }
+
+ if ( $this->hasOption( 'user' ) ) {
+ $user = $this->userFactory->newFromName( $this->getArg( 0 ) );
+ $pages = $this->getPagesForUser( $user, $skipLanguages );
+ } else {
+ $pages = $this->getPagesForPattern( $this->getArg( 0 ), $skipLanguages );
+ }
+
+ $dryrun = !$this->hasOption( 'really' );
+ $comment = $this->getOption( 'comment' );
+ $this->fuzzyTranslations( $pages, $dryrun, $comment );
+ }
+
+ private function fuzzyTranslations( array $pages, bool $dryrun, $comment ) {
+ $count = count( $pages );
+ $this->output( "Found $count pages to update.", 'pagecount' );
+
+ foreach ( $pages as [ $title, $text ] ) {
+ $this->updateMessage( $title, TRANSLATE_FUZZY . $text, $dryrun, $comment );
+ }
+ }
+
+ /**
+ * Gets the message contents from database rows.
+ * @param IResultWrapper $rows
+ * @return array containing page titles and the text content of the page
+ */
+ private function getMessageContentsFromRows( $rows ) {
+ $messagesContents = [];
+ $slots = $this->revisionStore->getContentBlobsForBatch( $rows, [ SlotRecord::MAIN ] )->getValue();
+ foreach ( $rows as $row ) {
+ $title = Title::makeTitle( $row->page_namespace, $row->page_title );
+ if ( isset( $slots[$row->rev_id] ) ) {
+ $text = $slots[$row->rev_id][SlotRecord::MAIN]->blob_data;
+ } else {
+ $content = $this->revisionStore
+ ->newRevisionFromRow( $row, IDBAccessObject::READ_NORMAL, $title )
+ ->getContent( SlotRecord::MAIN );
+ $text = TranslateUtils::getTextFromTextContent( $content );
+ }
+ $messagesContents[] = [ $title, $text ];
+ }
+ return $messagesContents;
+ }
+
+ /// Searches pages that match given patterns
+ private function getPagesForPattern( $pattern, $skipLanguages = [] ) {
+ $dbr = $this->DBLoadBalancer->getMaintenanceConnectionRef( DB_REPLICA );
+
+ $search = [];
+ foreach ( (array)$pattern as $title ) {
+ $title = Title::newFromText( $title );
+ $ns = $title->getNamespace();
+ if ( !isset( $search[$ns] ) ) {
+ $search[$ns] = [];
+ }
+ $search[$ns][] = 'page_title' . $dbr->buildLike( $title->getDBkey(), $dbr->anyString() );
+ }
+
+ $title_conds = [];
+ foreach ( $search as $ns => $names ) {
+ if ( $ns === NS_MAIN ) {
+ $ns = $this->getConfig()->get( 'TranslateMessageNamespaces' );
+ }
+ $titles = $dbr->makeList( $names, LIST_OR );
+ $title_conds[] = $dbr->makeList( [ 'page_namespace' => $ns, $titles ], LIST_AND );
+ }
+
+ $conds = [
+ 'page_latest=rev_id',
+ $dbr->makeList( $title_conds, LIST_OR ),
+ ];
+
+ if ( count( $skipLanguages ) ) {
+ $skiplist = $dbr->makeList( $skipLanguages );
+ $conds[] = "substring_index(page_title, '/', -1) NOT IN ($skiplist)";
+ }
+
+ $queryInfo = $this->revisionStore->getQueryInfo( [ 'page' ] );
+ $rows = $dbr->select(
+ $queryInfo['tables'],
+ $queryInfo['fields'],
+ $conds,
+ __METHOD__,
+ [],
+ $queryInfo['joins']
+ );
+ return $this->getMessageContentsFromRows( $rows );
+ }
+
+ private function getPagesForUser( User $user, $skipLanguages = [] ) {
+ $dbr = $this->DBLoadBalancer->getMaintenanceConnectionRef( DB_REPLICA );
+
+ $revWhere = $this->actorMigration->getWhere( $dbr, 'rev_user', $user );
+ $conds = [
+ 'page_latest=rev_id',
+ $revWhere['conds'],
+ 'page_namespace' => $this->getConfig()->get( 'TranslateMessageNamespaces' ),
+ 'page_title' . $dbr->buildLike( $dbr->anyString(), '/', $dbr->anyString() ),
+ ];
+ if ( count( $skipLanguages ) ) {
+ $skiplist = $dbr->makeList( $skipLanguages );
+ $conds[] = "substring_index(page_title, '/', -1) NOT IN ($skiplist)";
+ }
+
+ $queryInfo = $this->revisionStore->getQueryInfo( [ 'page', 'user' ] );
+ $rows = $dbr->select(
+ $queryInfo['tables'],
+ $queryInfo['fields'],
+ $conds,
+ __METHOD__,
+ [],
+ $queryInfo['joins'] + $revWhere['joins']
+ );
+
+ return $this->getMessageContentsFromRows( $rows );
+ }
+
+ /**
+ * Does the actual edit if possible.
+ * @param Title $title
+ * @param string $text
+ * @param bool $dryrun Whether to really do it or just show what would be done.
+ * @param string|null $comment Edit summary.
+ */
+ private function updateMessage( $title, $text, $dryrun, $comment = null ) {
+ $this->output( "Updating {$title->getPrefixedText()}... ", $title );
+ if ( !$title instanceof Title ) {
+ $this->output( 'INVALID TITLE!', $title );
+
+ return;
+ }
+
+ $documentationLanguageCode = $this->getConfig()->get( 'TranslateDocumentationLanguageCode' );
+ $items = explode( '/', $title->getText(), 2 );
+ if ( isset( $items[1] ) && $items[1] === $documentationLanguageCode ) {
+ $this->output( 'IGNORED!', $title );
+
+ return;
+ }
+
+ if ( $dryrun ) {
+ $this->output( 'DRY RUN!', $title );
+
+ return;
+ }
+
+ $wikipage = MediaWikiServices::getInstance()->getWikiPageFactory()->newFromTitle( $title );
+ $content = ContentHandler::makeContent( $text, $title );
+ $status = $wikipage->doUserEditContent(
+ $content,
+ FuzzyBot::getUser(),
+ $comment ?: 'Marking as fuzzy',
+ EDIT_FORCE_BOT | EDIT_UPDATE
+ );
+
+ $success = $status && $status->isOK();
+ $this->output( $success ? 'OK' : 'FAILED', $title );
+ }
+}
diff --git a/Translate/src/Diagnostics/SyncTranslatableBundleStatusMaintenanceScript.php b/Translate/src/Diagnostics/SyncTranslatableBundleStatusMaintenanceScript.php
new file mode 100644
index 00000000..0b17a27c
--- /dev/null
+++ b/Translate/src/Diagnostics/SyncTranslatableBundleStatusMaintenanceScript.php
@@ -0,0 +1,240 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Diagnostics;
+
+use Maintenance;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\RevTagStore;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\TranslatableBundle;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\TranslatableBundleFactory;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\TranslatableBundleStatus;
+use MediaWiki\Extension\Translate\PageTranslation\PageTranslationSpecialPage;
+use MediaWiki\Extension\Translate\PageTranslation\TranslatablePage;
+use MediaWiki\Extension\Translate\PageTranslation\TranslatablePageStatus;
+use MediaWiki\Extension\Translate\Services;
+use MediaWiki\MediaWikiServices;
+use RuntimeException;
+use Title;
+
+/**
+ * Script to identify the status of the translatable bundles in the rev_tag table
+ * and update them in the translatable_bundles page.
+ */
+class SyncTranslatableBundleStatusMaintenanceScript extends Maintenance {
+ private const INDENT_SPACER = ' ';
+
+ private $statusNameMapping = [];
+
+ private const SYNC_BATCH_STATUS = 15;
+
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Sync translatable bundle status with values from the rev_tag table' );
+ $this->requireExtension( 'Translate' );
+ }
+
+ public function execute() {
+ $this->statusNameMapping = [
+ TranslatablePageStatus::PROPOSED => 'Proposed',
+ TranslatablePageStatus::ACTIVE => 'Active',
+ TranslatablePageStatus::OUTDATED => 'Outdated',
+ TranslatablePageStatus::BROKEN => 'Broken'
+ ];
+
+ $this->output( "Fetching translatable bundles and their statues\n\n" );
+ $translatableBundles = $this->fetchTranslatableBundles();
+ $translatableBundleStatuses = Services::getInstance()
+ ->getTranslatableBundleStatusStore()
+ ->getAllWithStatus();
+
+ $differences = $this->identifyDifferences( $translatableBundles, $translatableBundleStatuses );
+
+ $this->outputDifferences( $differences['missing'], 'Missing' );
+ $this->outputDifferences( $differences['incorrect'], 'Incorrect' );
+ $this->outputDifferences( $differences['extra'], 'Extra' );
+
+ $this->output( "\nSynchronizing...\n\n" );
+
+ $this->syncStatus( $differences['missing'], 'Missing' );
+ $this->syncStatus( $differences['incorrect'], 'Incorrect' );
+ $this->removeStatus( $differences['extra'] );
+ }
+
+ private function fetchTranslatableBundles(): array {
+ // Fetch the translatabale pages
+ $resultWrapper = PageTranslationSpecialPage::loadPagesFromDB();
+ return PageTranslationSpecialPage::buildPageArray( $resultWrapper );
+
+ // TODO: Fetch message bundles
+ }
+
+ /**
+ * This function compares the bundles and bundles statuses to identify,
+ * - Missing bundles in translatable statuses
+ * - Extra bundles in translatable statuses
+ * - Incorrect statuses in translatable statuses
+ * The data from the rev_tag table is treated as the source of truth.
+ */
+ private function identifyDifferences(
+ array $translatableBundles,
+ array $translatableBundleStatuses
+ ): array {
+ $result = [
+ 'missing' => [],
+ 'extra' => [],
+ 'incorrect' => []
+ ];
+
+ $bundleFactory = Services::getInstance()->getTranslatableBundleFactory();
+ foreach ( $translatableBundles as $bundleId => $bundleInfo ) {
+ $title = $bundleInfo['title'];
+ $bundle = $this->getTranslatableBundle( $bundleFactory, $title );
+ $bundleStatus = $this->determineStatus( $bundle, $bundleInfo );
+
+ if ( !$bundleStatus ) {
+ // Ignore pages for which status could not be determined.
+ continue;
+ }
+
+ if ( !isset( $translatableBundleStatuses[$bundleId] ) ) {
+ // Identify missing records in translatable_bundles
+ $response = [
+ 'title' => $title,
+ 'status' => $bundleStatus,
+ 'page_id' => $bundleId
+ ];
+ $result['missing'][] = $response;
+ } elseif ( !$bundleStatus->isEqual( $translatableBundleStatuses[$bundleId] ) ) {
+ // Identify incorrect records in translatable_bundles
+ $response = [
+ 'title' => $title,
+ 'status' => $bundleStatus,
+ 'page_id' => $bundleId
+ ];
+ $result['incorrect'][] = $response;
+ }
+ }
+
+ // Identify extra records in translatable_bundles
+ $extraStatusBundleIds = array_diff_key( $translatableBundleStatuses, $translatableBundles );
+ foreach ( $extraStatusBundleIds as $extraBundleId => $statusId ) {
+ $title = Title::newFromID( $extraBundleId );
+ $response = [
+ 'title' => $title,
+ // TODO: This should be determined dynamically when we start supporting MessageBundles
+ 'status' => new TranslatablePageStatus( $statusId ),
+ 'page_id' => $extraBundleId
+ ];
+
+ $result['extra'][] = $response;
+ }
+
+ return $result;
+ }
+
+ private function determineStatus(
+ TranslatableBundle $bundle,
+ array $bundleInfo
+ ): ?TranslatableBundleStatus {
+ if ( $bundle instanceof TranslatablePage ) {
+ return $bundle->determineStatus(
+ $bundleInfo[RevTagStore::TP_READY_TAG] ?? null,
+ $bundleInfo[RevTagStore::TP_MARK_TAG] ?? null,
+ $bundleInfo['latest']
+ );
+ } else {
+ // TODO: Add determineStatus as a function to TranslatableBundle abstract class and then
+ // implement it in MessageBundle. It may not take the same set of parameters though.
+ throw new RuntimeException( 'Method determineStatus not implemented for MessageBundle' );
+ }
+ }
+
+ private function getTranslatableBundle(
+ TranslatableBundleFactory $tbFactory,
+ Title $title
+ ): TranslatableBundle {
+ $bundle = $tbFactory->getBundle( $title );
+ if ( $bundle ) {
+ return $bundle;
+ }
+
+ // This page has a revision tag, lets assume that this is a translatable page
+ // Broken pages for example will not be in the cache
+ // TODO: Is there a better way to handle this?
+ $tpPage = TranslatablePage::newFromTitle( $title );
+ return $tpPage;
+ }
+
+ private function syncStatus( array $bundlesWithDifference, string $differenceType ): void {
+ if ( !$bundlesWithDifference ) {
+ $this->output( "No \"$differenceType\" bundle statuses\n" );
+ return;
+ }
+
+ $this->output( "Syncing \"$differenceType\" bundle statuses\n" );
+
+ $bundleFactory = Services::getInstance()->getTranslatableBundleFactory();
+ $tpStore = Services::getInstance()->getTranslatablePageStore();
+ $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
+
+ $bundleCountProcessed = 0;
+ foreach ( $bundlesWithDifference as $bundleInfo ) {
+ $pageId = $bundleInfo['page_id'];
+ $bundleTitle = $bundleInfo['title'] ?? null;
+ if ( !$bundleTitle instanceof Title ) {
+ $this->fatalError( "No title for page with id: $pageId \n" );
+ }
+
+ $bundle = $this->getTranslatableBundle( $bundleFactory, $bundleTitle );
+ if ( $bundle instanceof TranslatablePage ) {
+ // TODO: Eventually we want to add this method to the TranslatableBundleStore
+ // and then call updateStatus on it. After that we won't have to check for the
+ // type of the translatable bundle.
+ $tpStore->updateStatus( $bundleTitle );
+ }
+
+ if ( $bundleCountProcessed % self::SYNC_BATCH_STATUS === 0 ) {
+ $lbFactory->waitForReplication();
+ }
+
+ ++$bundleCountProcessed;
+ }
+
+ $this->output( "Completed sync for \"$differenceType\" bundle statuses\n" );
+ }
+
+ private function removeStatus( array $extraBundleInfo ): void {
+ if ( !$extraBundleInfo ) {
+ $this->output( "No \"extra\" bundle statuses\n" );
+ return;
+ }
+ $this->output( "Removing \"extra\" bundle statuses\n" );
+ $pageIds = [];
+ foreach ( $extraBundleInfo as $bundleInfo ) {
+ $pageIds[] = $bundleInfo['page_id'];
+ }
+
+ $tbStatusStore = Services::getInstance()->getTranslatableBundleStatusStore();
+ $tbStatusStore->removeStatus( ...$pageIds );
+ $this->output( "Removed \"extra\" bundle statuses\n" );
+ }
+
+ private function outputDifferences( array $bundlesWithDifference, string $differenceType ): void {
+ if ( $bundlesWithDifference ) {
+ $this->output( "$differenceType translatable bundles statuses:\n" );
+ foreach ( $bundlesWithDifference as $bundle ) {
+ $this->outputBundleInfo( $bundle );
+ }
+ } else {
+ $this->output( "No \"$differenceType\" translatable bundle statuses found!\n" );
+ }
+ }
+
+ private function outputBundleInfo( array $bundle ): void {
+ $titlePrefixedDbKey = $bundle['title'] instanceof Title ?
+ $bundle['title']->getPrefixedDBkey() : '<Title not available>';
+ $id = str_pad( (string)$bundle['page_id'], 7, ' ', STR_PAD_LEFT );
+ $status = $this->statusNameMapping[ $bundle['status']->getId() ];
+ $this->output( self::INDENT_SPACER . "* [Id: $id] $titlePrefixedDbKey: $status\n" );
+ }
+}
diff --git a/Translate/src/Jobs/GenericTranslateJob.php b/Translate/src/Jobs/GenericTranslateJob.php
new file mode 100644
index 00000000..400d0967
--- /dev/null
+++ b/Translate/src/Jobs/GenericTranslateJob.php
@@ -0,0 +1,71 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Jobs;
+
+use Job;
+use MediaWiki\Logger\LoggerFactory;
+use Psr\Log\LoggerInterface;
+
+/**
+ * Generic Job class extended by other jobs. Provides logging functionality.
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2019.08
+ */
+abstract class GenericTranslateJob extends Job {
+ /** @var LoggerInterface */
+ private $logger;
+
+ /** @var string Channel name to be used during logging */
+ private const CHANNEL_NAME = 'Translate.Jobs';
+
+ /**
+ * Returns a logger instance with the channel name. Can have only a single
+ * channel per job, so once instantiated, the same instance is returned.
+ */
+ private function getLogger(): LoggerInterface {
+ if ( $this->logger ) {
+ return $this->logger;
+ }
+
+ $this->logger = LoggerFactory::getInstance( self::CHANNEL_NAME );
+ return $this->logger;
+ }
+
+ /** @phan-return array{0:string,1:array} */
+ private function formatLogEntry( string $msg, array $context = [] ): array {
+ $prefix = $this->getType();
+ if ( isset( $this->title ) ) {
+ $prefix .= ' [{job_title}]';
+ $context['job_title'] = $this->title->getPrefixedText();
+ }
+
+ return [ "$prefix: $msg", $context ];
+ }
+
+ protected function logDebug( string $msg, array $context = [] ): void {
+ [ $msg, $context ] = $this->formatLogEntry( $msg, $context );
+ $this->getLogger()->debug( $msg, $context );
+ }
+
+ protected function logInfo( string $msg, array $context = [] ): void {
+ [ $msg, $context ] = $this->formatLogEntry( $msg, $context );
+ $this->getLogger()->info( $msg, $context );
+ }
+
+ protected function logNotice( string $msg, array $context = [] ): void {
+ [ $msg, $context ] = $this->formatLogEntry( $msg, $context );
+ $this->getLogger()->notice( $msg, $context );
+ }
+
+ protected function logWarning( string $msg, array $context = [] ): void {
+ [ $msg, $context ] = $this->formatLogEntry( $msg, $context );
+ $this->getLogger()->warning( $msg, $context );
+ }
+
+ protected function logError( string $msg, array $context = [] ): void {
+ [ $msg, $context ] = $this->formatLogEntry( $msg, $context );
+ $this->getLogger()->error( $msg, $context );
+ }
+}
diff --git a/Translate/src/MessageBundleTranslation/Hooks.php b/Translate/src/MessageBundleTranslation/Hooks.php
new file mode 100644
index 00000000..33f70d6d
--- /dev/null
+++ b/Translate/src/MessageBundleTranslation/Hooks.php
@@ -0,0 +1,147 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageBundleTranslation;
+
+use Content;
+use IContextSource;
+use MediaWiki\Hook\EditFilterMergedContentHook;
+use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\MediaWikiServices;
+use MediaWiki\Revision\SlotRecord;
+use MediaWiki\Storage\Hook\PageSaveCompleteHook;
+use MessageGroupWANCache;
+use Psr\Log\LoggerInterface;
+use Status;
+use User;
+use WANObjectCache;
+use Wikimedia\Rdbms\ILoadBalancer;
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2021.05
+ */
+class Hooks implements EditFilterMergedContentHook, PageSaveCompleteHook {
+ public const CONSTRUCTOR_OPTIONS = [
+ 'TranslateEnableMessageBundleIntegration',
+ ];
+
+ /** @var ?self */
+ private static $instance;
+ /** @var LoggerInterface */
+ private $logger;
+ /** @var ILoadBalancer */
+ private $loadBalancer;
+ /** @var MessageBundleStore */
+ private $messageBundleStore;
+ /** @var WANObjectCache */
+ private $WANObjectCache;
+ /** @var bool */
+ private $enableIntegration;
+
+ public function __construct(
+ LoggerInterface $logger,
+ ILoadBalancer $loadBalancer,
+ WANObjectCache $WANObjectCache,
+ MessageBundleStore $messageBundleStore,
+ bool $enableIntegration
+ ) {
+ $this->logger = $logger;
+ $this->loadBalancer = $loadBalancer;
+ $this->WANObjectCache = $WANObjectCache;
+ $this->messageBundleStore = $messageBundleStore;
+ $this->enableIntegration = $enableIntegration;
+ }
+
+ public static function getInstance(): self {
+ $services = MediaWikiServices::getInstance();
+ self::$instance = self::$instance ??
+ new self(
+ LoggerFactory::getInstance( 'Translate.MessageBundle' ),
+ $services->getDBLoadBalancer(),
+ $services->getMainWANObjectCache(),
+ $services->get( 'Translate:MessageBundleStore' ),
+ $services->getMainConfig()->get( 'TranslateEnableMessageBundleIntegration' )
+ );
+ return self::$instance;
+ }
+
+ /** @inheritDoc */
+ public function onEditFilterMergedContent(
+ IContextSource $context,
+ Content $content,
+ Status $status,
+ $summary,
+ User $user,
+ $minoredit
+ ): void {
+ if ( $content instanceof MessageBundleContent ) {
+ try {
+ // Validation is performed in the store because injecting services into the
+ // Content class is not straightforward
+ $this->messageBundleStore->validate( $context->getTitle(), $content );
+ } catch ( MalformedBundle $e ) {
+ // MalformedBundle implements MessageSpecifier, but for unknown reason it gets
+ // cast to a string if we don't convert it to a proper message.
+ $status->fatal( 'translate-messagebundle-validation-error', $context->msg( $e ) );
+ }
+ }
+ }
+
+ /** @inheritDoc */
+ public function onPageSaveComplete(
+ $wikiPage,
+ $user,
+ $summary,
+ $flags,
+ $revisionRecord,
+ $editResult
+ ): void {
+ if ( !$this->enableIntegration ) {
+ return;
+ }
+
+ $method = __METHOD__;
+ $content = $revisionRecord->getContent( SlotRecord::MAIN );
+ $pageTitle = $wikiPage->getTitle();
+
+ if ( $content === null ) {
+ $this->logger->debug( "Unable to access content of page {pageName} in $method", [
+ 'pageName' => $pageTitle->getPrefixedText()
+ ] );
+ return;
+ }
+
+ if ( !$content instanceof MessageBundleContent ) {
+ return;
+ }
+
+ try {
+ $this->messageBundleStore->save( $pageTitle, $revisionRecord, $content );
+ } catch ( MalformedBundle $e ) {
+ // This should not happen, as it should not be possible to save a page with invalid content
+ $this->logger->warning( "Page {pageName} is not a valid message bundle in $method", [
+ 'pageName' => $pageTitle->getPrefixedText(),
+ 'exception' => $e,
+ ] );
+ return;
+ }
+ }
+
+ /** Hook: TranslateInitGroupLoaders */
+ public static function onTranslateInitGroupLoaders( array &$groupLoader ): void {
+ self::getInstance()->onTranslateInitGroupLoadersImpl( $groupLoader );
+ }
+
+ public function onTranslateInitGroupLoadersImpl( array &$groupLoader ): void {
+ if ( !$this->enableIntegration ) {
+ return;
+ }
+
+ $groupLoader[] = new MessageBundleMessageGroupLoader(
+ $this->loadBalancer->getConnectionRef( DB_REPLICA ),
+ new MessageGroupWANCache( $this->WANObjectCache )
+ );
+ }
+}
diff --git a/Translate/src/MessageBundleTranslation/MalformedBundle.php b/Translate/src/MessageBundleTranslation/MalformedBundle.php
new file mode 100644
index 00000000..3e453c1c
--- /dev/null
+++ b/Translate/src/MessageBundleTranslation/MalformedBundle.php
@@ -0,0 +1,40 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageBundleTranslation;
+
+use Exception;
+use MessageSpecifier;
+use Throwable;
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2021.05
+ */
+class MalformedBundle extends Exception implements MessageSpecifier {
+ /** @var string */
+ private $key;
+ /** @var array */
+ private $params;
+
+ public function __construct(
+ string $key,
+ array $params = [],
+ ?Throwable $previous = null
+ ) {
+ parent::__construct( $key, 0, $previous );
+ $this->key = $key;
+ $this->params = $params;
+ }
+
+ /** @inheritDoc */
+ public function getKey() {
+ return $this->key;
+ }
+
+ /** @inheritDoc */
+ public function getParams() {
+ return $this->params;
+ }
+}
diff --git a/Translate/src/MessageBundleTranslation/MessageBundle.php b/Translate/src/MessageBundleTranslation/MessageBundle.php
new file mode 100644
index 00000000..1298a1f2
--- /dev/null
+++ b/Translate/src/MessageBundleTranslation/MessageBundle.php
@@ -0,0 +1,84 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageBundleTranslation;
+
+use MediaWiki\Extension\Translate\MessageGroupProcessing\RevTagStore;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\TranslatableBundle;
+use MediaWiki\MediaWikiServices;
+use Title;
+use Wikimedia\Rdbms\Database;
+
+/**
+ * @author Abijeet Patro
+ * @author Niklas Laxström
+ * @since 2022.04
+ * @license GPL-2.0-or-later
+ */
+class MessageBundle extends TranslatableBundle {
+ /** @var Title */
+ private $title;
+
+ public function __construct( Title $title ) {
+ $this->title = $title;
+ }
+
+ /** @inheritDoc */
+ public function getTitle(): Title {
+ return $this->title;
+ }
+
+ /** @inheritDoc */
+ public function getMessageGroupId(): string {
+ return MessageBundleMessageGroup::getGroupId( $this->title->getPrefixedText() );
+ }
+
+ /** @inheritDoc */
+ public function getTranslationPages(): array {
+ // MessageBundle do not have translation pages
+ return [];
+ }
+
+ /** @inheritDoc */
+ public function getTranslationUnitPages( ?string $code = null ): array {
+ return $this->getTranslationUnitPagesByTitle( $this->title, $code );
+ }
+
+ /** @inheritDoc */
+ public function isMoveable(): bool {
+ return true;
+ }
+
+ /** @inheritDoc */
+ public function isDeletable(): bool {
+ return true;
+ }
+
+ public static function isSourcePage( Title $title ): bool {
+ $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
+ $cacheKey = $cache->makeKey( 'messagebundle', 'source' );
+
+ $translatablePageIds = $cache->getWithSetCallback(
+ $cacheKey,
+ $cache::TTL_HOUR * 2,
+ static function ( $oldValue, &$ttl, array &$setOpts ) {
+ $dbr = wfGetDB( DB_REPLICA );
+ $setOpts += Database::getCacheSetOptions( $dbr );
+
+ return RevTagStore::getTranslatableBundleIds( RevTagStore::MB_VALID_TAG );
+ },
+ [
+ 'checkKeys' => [ $cacheKey ],
+ 'pcTTL' => $cache::TTL_PROC_SHORT,
+ 'pcGroup' => __CLASS__ . ':1'
+ ]
+ );
+
+ return in_array( $title->getArticleID(), $translatablePageIds );
+ }
+
+ public static function clearSourcePageCache(): void {
+ $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
+ $cache->touchCheckKey( $cache->makeKey( 'messagebundle', 'source' ) );
+ }
+}
diff --git a/Translate/src/MessageBundleTranslation/MessageBundleContent.php b/Translate/src/MessageBundleTranslation/MessageBundleContent.php
new file mode 100644
index 00000000..7e7664d2
--- /dev/null
+++ b/Translate/src/MessageBundleTranslation/MessageBundleContent.php
@@ -0,0 +1,192 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageBundleTranslation;
+
+use FormatJson;
+use JsonContent;
+use Message;
+use Status;
+use User;
+use WikiPage;
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2021.05
+ */
+class MessageBundleContent extends JsonContent {
+ public const CONTENT_MODEL_ID = 'translate-messagebundle';
+ // List of supported metadata keys
+ /** @phpcs-require-sorted-array */
+ public const METADATA_KEYS = [
+ 'allowOnlyPriorityLanguages',
+ 'description',
+ 'priorityLanguages',
+ 'sourceLanguage'
+ ];
+ /** @var array|null */
+ private $messages;
+ /** @var MessageBundleMetadata|null */
+ private $metadata;
+
+ public function __construct( $text, $modelId = self::CONTENT_MODEL_ID ) {
+ parent::__construct( $text, $modelId );
+ }
+
+ public function isValid(): bool {
+ try {
+ $this->getMessages();
+ $this->getMetadata();
+ return parent::isValid();
+ } catch ( MalformedBundle $e ) {
+ return false;
+ }
+ }
+
+ /** @throws MalformedBundle */
+ public function validate(): void {
+ $this->getMessages();
+ $this->getMetadata();
+ }
+
+ public function prepareSave( WikiPage $page, $flags, $parentRevId, User $user ) {
+ // TODO: Should be removed when it is no longer needed for backwards compatibility.
+
+ // This will give an informative error message when trying to change the content model
+ try {
+ $this->getMessages();
+ $this->getMetadata();
+ return Status::newGood();
+ } catch ( MalformedBundle $e ) {
+ // XXX: We have no context source nor is there Message::messageParam :(
+ return Status::newFatal( 'translate-messagebundle-validation-error', wfMessage( $e ) );
+ }
+ }
+
+ /** @throws MalformedBundle */
+ public function getMessages(): array {
+ if ( $this->messages ) {
+ return $this->messages;
+ }
+
+ $data = $this->getRawData();
+ // Remove the metadata since we are not concerned with it.
+ unset( $data['@metadata'] );
+
+ foreach ( $data as $key => $value ) {
+ if ( $key === '' ) {
+ throw new MalformedBundle( 'translate-messagebundle-error-key-empty' );
+ }
+
+ if ( strlen( $key ) > 100 ) {
+ throw new MalformedBundle(
+ 'translate-messagebundle-error-key-too-long',
+ [ $key ]
+ );
+ }
+
+ if ( !preg_match( '/^[a-zA-Z0-9-_.]+$/', $key ) ) {
+ throw new MalformedBundle(
+ 'translate-messagebundle-error-key-invalid-characters',
+ [ $key ]
+ );
+ }
+
+ if ( !is_string( $value ) ) {
+ throw new MalformedBundle(
+ 'translate-messagebundle-error-invalid-value',
+ [ $key ]
+ );
+ }
+
+ if ( trim( $value ) === '' ) {
+ throw new MalformedBundle(
+ 'translate-messagebundle-error-empty-value',
+ [ $key ]
+ );
+ }
+ }
+
+ $this->messages = $data;
+ return $this->messages;
+ }
+
+ public function getMetadata(): MessageBundleMetadata {
+ if ( $this->metadata ) {
+ return $this->metadata;
+ }
+
+ $data = $this->getRawData();
+ $metadata = $data['@metadata'] ?? [];
+
+ if ( !is_array( $metadata ) ) {
+ throw new MalformedBundle( 'translate-messagebundle-error-metadata-type' );
+ }
+
+ foreach ( $metadata as $key => $value ) {
+ if ( !in_array( $key, self::METADATA_KEYS ) ) {
+ throw new MalformedBundle(
+ 'translate-messagebundle-error-invalid-metadata',
+ [ $key, Message::listParam( self::METADATA_KEYS ) ]
+ );
+ }
+ }
+
+ $sourceLanguage = $metadata['sourceLanguage'] ?? null;
+ if ( $sourceLanguage && !is_string( $sourceLanguage ) ) {
+ throw new MalformedBundle(
+ 'translate-messagebundle-error-invalid-sourcelanguage', [ $sourceLanguage ]
+ );
+ }
+
+ $priorityLanguageCodes = $metadata['priorityLanguages'] ?? null;
+ if ( $priorityLanguageCodes ) {
+ if ( !is_array( $priorityLanguageCodes ) ) {
+ throw new MalformedBundle( 'translate-messagebundle-error-invalid-prioritylanguage-format' );
+ }
+
+ $priorityLanguageCodes = array_unique( $priorityLanguageCodes );
+ }
+
+ $description = $metadata['description'] ?? null;
+ if ( $description !== null ) {
+ if ( !is_string( $description ) ) {
+ throw new MalformedBundle(
+ 'translate-messagebundle-error-invalid-description'
+ );
+ }
+
+ $description = trim( $description ) === '' ? null : trim( $description );
+ }
+
+ $this->metadata = new MessageBundleMetadata(
+ $sourceLanguage,
+ $priorityLanguageCodes,
+ (bool)( $metadata['allowOnlyPriorityLanguages'] ?? false ),
+ $description
+ );
+ return $this->metadata;
+ }
+
+ private function getRawData(): array {
+ $status = FormatJson::parse( $this->getText(), FormatJson::FORCE_ASSOC );
+ if ( !$status->isOK() ) {
+ throw new MalformedBundle(
+ 'translate-messagebundle-error-parsing',
+ [ $status->getMessage()->text() ]
+ );
+ }
+
+ $data = $status->getValue();
+ // Crude check that we have an associative array (or empty array)
+ if ( !is_array( $data ) || ( $data !== [] && array_values( $data ) === $data ) ) {
+ throw new MalformedBundle(
+ 'translate-messagebundle-error-invalid-array',
+ [ gettype( $data ) ]
+ );
+ }
+
+ return $data;
+ }
+}
diff --git a/Translate/src/MessageBundleTranslation/MessageBundleContentHandler.php b/Translate/src/MessageBundleTranslation/MessageBundleContentHandler.php
new file mode 100644
index 00000000..20064323
--- /dev/null
+++ b/Translate/src/MessageBundleTranslation/MessageBundleContentHandler.php
@@ -0,0 +1,43 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageBundleTranslation;
+
+use Content;
+use MediaWiki\Content\ValidationParams;
+use StatusValue;
+use TextContentHandler;
+use const CONTENT_FORMAT_JSON;
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2021.05
+ */
+class MessageBundleContentHandler extends TextContentHandler {
+ public function __construct( $modelId = MessageBundleContent::CONTENT_MODEL_ID ) {
+ parent::__construct( $modelId, [ CONTENT_FORMAT_JSON ] );
+ }
+
+ protected function getContentClass(): string {
+ return MessageBundleContent::class;
+ }
+
+ public function makeEmptyContent(): Content {
+ $class = $this->getContentClass();
+ return new $class( '{}' );
+ }
+
+ public function validateSave( Content $content, ValidationParams $validationParams ) {
+ // This will give an informative error message when trying to change the content model
+ try {
+ if ( $content instanceof MessageBundleContent ) {
+ $content->validate();
+ }
+ return StatusValue::newGood();
+ } catch ( MalformedBundle $e ) {
+ // XXX: We have no context source nor is there Message::messageParam :(
+ return StatusValue::newFatal( 'translate-messagebundle-validation-error', wfMessage( $e ) );
+ }
+ }
+}
diff --git a/Translate/src/MessageBundleTranslation/MessageBundleMessageGroup.php b/Translate/src/MessageBundleTranslation/MessageBundleMessageGroup.php
new file mode 100644
index 00000000..19da5191
--- /dev/null
+++ b/Translate/src/MessageBundleTranslation/MessageBundleMessageGroup.php
@@ -0,0 +1,231 @@
+<?php
+
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageBundleTranslation;
+
+use Hooks as MediaWikiHooks;
+use IContextSource;
+use LogicException;
+use MediaWiki\Extension\Translate\MessageProcessing\StringMatcher;
+use MediaWiki\Extension\Translate\Validation\ValidationRunner;
+use MediaWiki\MediaWikiServices;
+use MediaWiki\Revision\SlotRecord;
+use MessageCollection;
+use MessageDefinitions;
+use MessageGroup;
+use MessageGroupStates;
+use Title;
+use const NS_TRANSLATIONS;
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2021.12
+ */
+class MessageBundleMessageGroup implements MessageGroup {
+ /** @var string Name of the bundle (prefixed text of the bundle page) */
+ private $name;
+ /** @var string */
+ private $groupId;
+ /** @var int */
+ private $pageId;
+ /** @var int */
+ private $revisionId;
+ /** @var array */
+ private $data;
+ /** @var string */
+ private $description;
+
+ public function __construct(
+ string $groupId,
+ string $name,
+ int $pageId,
+ int $revisionId,
+ ?string $description
+ ) {
+ $this->groupId = $groupId;
+ $this->name = $name;
+ $this->pageId = $pageId;
+ $this->revisionId = $revisionId;
+ $this->description = $description;
+ }
+
+ /** Suggested default naming pattern */
+ public static function getGroupId( string $name ): string {
+ return "messagebundle-$name";
+ }
+
+ public function getBundlePageId(): int {
+ return $this->pageId;
+ }
+
+ private function getData(): array {
+ if ( !$this->data ) {
+ $revisionStore = MediaWikiServices::getInstance()->getRevisionStore();
+ $revision = $revisionStore->getRevisionById( $this->revisionId );
+
+ if ( $revision === null ) {
+ throw new LogicException( "Could not find revision id $this->revisionId" );
+ }
+
+ $content = $revision->getContent( SlotRecord::MAIN );
+ if ( !$content instanceof MessageBundleContent ) {
+ throw new LogicException(
+ "Content with revision id $this->revisionId has wrong content format"
+ );
+ }
+
+ $data = json_decode( $content->getText(), true );
+ if ( !$data ) {
+ throw new LogicException(
+ "Content with revision id $this->revisionId is not valid JSON"
+ );
+ }
+
+ $this->data = $data;
+ }
+
+ return $this->data;
+ }
+
+ private function makeGroupKeys( array $keys ): array {
+ $result = [];
+ foreach ( $keys as $key ) {
+ $result[] = str_replace( ' ', '_', "$this->name/$key" );
+ }
+ return $result;
+ }
+
+ /** @inheritDoc */
+ public function getId(): string {
+ return $this->groupId;
+ }
+
+ /** @inheritDoc */
+ public function getLabel( IContextSource $context = null ): string {
+ return $this->name;
+ }
+
+ /** @inheritDoc */
+ public function getDescription( IContextSource $context = null ): string {
+ $titleText = Title::newFromID( $this->pageId )->getPrefixedText();
+ $linkTargetText = ":$titleText";
+ if ( $context ) {
+ $message = $context->msg( 'translate-messagebundle-group-description' );
+ } else {
+ $message = wfMessage( 'translate-messagebundle-group-description' )
+ ->inContentLanguage();
+ }
+
+ $plainMessage = $message->params( $titleText, $linkTargetText )->plain();
+
+ if ( $this->description === null ) {
+ return $plainMessage;
+ }
+
+ return $plainMessage . ' ' . $this->description;
+ }
+
+ /** @inheritDoc */
+ public function getIcon(): ?string {
+ return null;
+ }
+
+ /** @inheritDoc */
+ public function getNamespace(): int {
+ return NS_TRANSLATIONS;
+ }
+
+ /** @inheritDoc */
+ public function isMeta(): bool {
+ return false;
+ }
+
+ /** @inheritDoc */
+ public function exists(): bool {
+ return true;
+ }
+
+ /** @inheritDoc */
+ public function getValidator(): ?ValidationRunner {
+ return null;
+ }
+
+ /** @inheritDoc */
+ public function getMangler(): ?StringMatcher {
+ return null;
+ }
+
+ /** @inheritDoc */
+ public function initCollection( $code ): MessageCollection {
+ $defs = new MessageDefinitions( $this->getDefinitions(), $this->getNamespace() );
+ $collection = MessageCollection::newFromDefinitions( $defs, $code );
+
+ foreach ( $this->getTags() as $type => $tags ) {
+ $collection->setTags( $type, $tags );
+ }
+
+ return $collection;
+ }
+
+ /** @inheritDoc */
+ public function load( $code ): array {
+ return [];
+ }
+
+ /** @inheritDoc */
+ public function getDefinitions(): array {
+ $data = $this->getData();
+ unset( $data['@metadata'] );
+
+ return array_combine(
+ $this->makeGroupKeys( array_keys( $data ) ),
+ array_values( $data )
+ );
+ }
+
+ /** @inheritDoc */
+ public function getKeys(): array {
+ return array_keys( $this->getDefinitions() );
+ }
+
+ /** @inheritDoc */
+ public function getTags( $type = null ): array {
+ return [];
+ }
+
+ /** @inheritDoc */
+ public function getMessage( $key, $code ): ?string {
+ if ( $code === $this->getSourceLanguage() ) {
+ return $this->getDefinitions()[$key] ?? null;
+ }
+
+ return null;
+ }
+
+ /** @inheritDoc */
+ public function getSourceLanguage(): string {
+ return Title::newFromText( $this->name )->getPageLanguage()->getCode();
+ }
+
+ /** @inheritDoc */
+ public function getMessageGroupStates(): MessageGroupStates {
+ global $wgTranslateWorkflowStates;
+ $conf = $wgTranslateWorkflowStates ?: [];
+
+ MediaWikiHooks::run( 'Translate:modifyMessageGroupStates', [ $this->getId(), &$conf ] );
+
+ return new MessageGroupStates( $conf );
+ }
+
+ /** @inheritDoc */
+ public function getTranslatableLanguages(): ?array {
+ return null;
+ }
+
+ /** @inheritDoc */
+ public function getSupportConfig(): ?array {
+ return null;
+ }
+}
diff --git a/Translate/src/MessageBundleTranslation/MessageBundleMessageGroupLoader.php b/Translate/src/MessageBundleTranslation/MessageBundleMessageGroupLoader.php
new file mode 100644
index 00000000..b3b750fb
--- /dev/null
+++ b/Translate/src/MessageBundleTranslation/MessageBundleMessageGroupLoader.php
@@ -0,0 +1,114 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageBundleTranslation;
+
+use CachedMessageGroupLoader;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\RevTagStore;
+use MessageGroupLoader;
+use MessageGroupWANCache;
+use Title;
+use TranslateMetadata;
+use Wikimedia\Rdbms\IDatabase;
+
+/**
+ * @since 2021.12
+ * @author Niklas Laxström
+ * @copyright GPL-2.0-or-later
+ */
+class MessageBundleMessageGroupLoader extends MessageGroupLoader implements CachedMessageGroupLoader {
+ private const CACHE_KEY = 'messageBundle';
+ private const CACHE_VERSION = 1;
+
+ /** @var MessageGroupWANCache */
+ protected $cache;
+ /** @var IDatabase */
+ protected $db;
+ /** @var ?array List of groups */
+ protected $groups;
+
+ public function __construct( IDatabase $db, MessageGroupWANCache $cache ) {
+ $this->db = $db;
+ $this->cache = $cache;
+ $this->cache->configure(
+ [
+ 'key' => self::CACHE_KEY,
+ 'version' => self::CACHE_VERSION,
+ 'regenerator' => function () {
+ return $this->getCacheData();
+ }
+ ]
+ );
+ }
+
+ /** @return MessageBundleMessageGroup[] */
+ public function getGroups(): array {
+ if ( $this->groups === null ) {
+ $cacheData = $this->cache->getValue();
+ $this->groups = $this->initGroupsFromConf( $cacheData );
+ }
+
+ return $this->groups;
+ }
+
+ public function getCacheData(): array {
+ $cacheData = [];
+ $tables = [ 'page', 'revtag' ];
+ $vars = [ 'page_id', 'page_namespace', 'page_title', 'rt_revision' => 'MAX(rt_revision)' ];
+ $conds = [ 'page_id=rt_page', 'rt_type' => RevTagStore::MB_VALID_TAG ];
+ $options = [
+ 'GROUP BY' => 'page_id,page_namespace,page_title'
+ ];
+ $res = $this->db->select( $tables, $vars, $conds, __METHOD__, $options );
+
+ foreach ( $res as $r ) {
+ $title = Title::newFromRow( $r );
+ $cacheData[] = [
+ $title->getPrefixedText(),
+ (int)$r->page_id,
+ (int)$r->rt_revision,
+ ];
+ }
+
+ return $cacheData;
+ }
+
+ /** @return MessageBundleMessageGroup[] */
+ private function initGroupsFromConf( array $cacheData ): array {
+ $groups = [];
+ $groupIds = [];
+
+ // First get all the group ids
+ foreach ( $cacheData as $conf ) {
+ $groupIds[] = MessageBundleMessageGroup::getGroupId( $conf[0] );
+ }
+
+ // Preload all the metadata
+ TranslateMetadata::preloadGroups( $groupIds, __METHOD__ );
+
+ // Loop over all the group ids and create the MessageBundleMessageGroup
+ foreach ( $groupIds as $index => $groupId ) {
+ $conf = $cacheData[$index];
+ $description = TranslateMetadata::get( $groupId, 'description' );
+ $description = $description !== false ? $description : null;
+ $groups[$groupId] = new MessageBundleMessageGroup( $groupId, $conf[0], $conf[1], $conf[2], $description );
+ }
+
+ return $groups;
+ }
+
+ /** @inheritDoc */
+ public function recache(): void {
+ $this->groups = null;
+ $this->cache->touchKey();
+
+ $cacheData = $this->cache->getValue( 'recache' );
+ $this->groups = $this->initGroupsFromConf( $cacheData );
+ }
+
+ /** @inheritDoc */
+ public function clearCache(): void {
+ $this->groups = null;
+ $this->cache->delete();
+ }
+}
diff --git a/Translate/src/MessageBundleTranslation/MessageBundleMetadata.php b/Translate/src/MessageBundleTranslation/MessageBundleMetadata.php
new file mode 100644
index 00000000..0ec69a17
--- /dev/null
+++ b/Translate/src/MessageBundleTranslation/MessageBundleMetadata.php
@@ -0,0 +1,49 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageBundleTranslation;
+
+/**
+ * Represents metadata for a message bundle
+ * @author Abijeet Patro
+ * @since 2022.05
+ * @license GPL-2.0-or-later
+ */
+class MessageBundleMetadata {
+ /** @var string|null */
+ private $sourceLanguageCode;
+ /** @var array|null */
+ private $priorityLanguageCodes;
+ /** @var bool */
+ private $allowOnlyPriorityLanguages;
+ /** @var string|null */
+ private $description;
+
+ public function __construct(
+ ?string $sourceLanguageCode,
+ ?array $priorityLanguageCodes,
+ bool $allowOnlyPriorityLanguages,
+ ?string $description
+ ) {
+ $this->sourceLanguageCode = $sourceLanguageCode;
+ $this->priorityLanguageCodes = $priorityLanguageCodes;
+ $this->allowOnlyPriorityLanguages = $allowOnlyPriorityLanguages;
+ $this->description = $description;
+ }
+
+ public function getSourceLanguageCode(): ?string {
+ return $this->sourceLanguageCode;
+ }
+
+ public function getPriorityLanguages(): ?array {
+ return $this->priorityLanguageCodes;
+ }
+
+ public function areOnlyPriorityLanguagesAllowed(): bool {
+ return $this->allowOnlyPriorityLanguages;
+ }
+
+ public function getDescription(): ?string {
+ return $this->description;
+ }
+}
diff --git a/Translate/src/MessageBundleTranslation/MessageBundleStore.php b/Translate/src/MessageBundleTranslation/MessageBundleStore.php
new file mode 100644
index 00000000..de200f31
--- /dev/null
+++ b/Translate/src/MessageBundleTranslation/MessageBundleStore.php
@@ -0,0 +1,194 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageBundleTranslation;
+
+use InvalidArgumentException;
+use JobQueueGroup;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\RevTagStore;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\TranslatableBundle;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\TranslatableBundleStore;
+use MediaWiki\Languages\LanguageNameUtils;
+use MediaWiki\Revision\RevisionRecord;
+use Message;
+use MessageGroups;
+use MessageIndex;
+use RequestContext;
+use SpecialPageLanguage;
+use Title;
+use TranslateMetadata;
+
+/**
+ * @author Abijeet Patro
+ * @author Niklas Laxström
+ * @since 2022.04
+ * @license GPL-2.0-or-later
+ */
+class MessageBundleStore implements TranslatableBundleStore {
+ /** @var RevTagStore */
+ private $revTagStore;
+ /** @var JobQueueGroup */
+ private $jobQueue;
+ /** @var LanguageNameUtils */
+ private $languageNameUtils;
+ /** @var MessageIndex */
+ private $messageIndex;
+ private const METADATA_KEYS_DB = [
+ 'priorityforce',
+ 'prioritylangs'
+ ];
+
+ public function __construct(
+ RevTagStore $revTagStore,
+ JobQueueGroup $jobQueue,
+ LanguageNameUtils $languageNameUtils,
+ MessageIndex $messageIndex
+ ) {
+ $this->revTagStore = $revTagStore;
+ $this->jobQueue = $jobQueue;
+ $this->languageNameUtils = $languageNameUtils;
+ $this->messageIndex = $messageIndex;
+ }
+
+ public function move( Title $oldName, Title $newName ): void {
+ $oldBundle = new MessageBundle( $oldName );
+ $newBundle = new MessageBundle( $newName );
+
+ TranslateMetadata::moveMetadata(
+ $oldBundle->getMessageGroupId(),
+ $newBundle->getMessageGroupId(),
+ self::METADATA_KEYS_DB
+ );
+
+ MessageBundle::clearSourcePageCache();
+
+ // Re-render the bundles to get everything in sync
+ MessageGroups::singleton()->recache();
+ // Update message index now so that, when after this job the MoveTranslationUnits hook
+ // runs in deferred updates, it will not run MessageIndexRebuildJob (T175834).
+ $this->messageIndex->rebuild();
+ }
+
+ public function handleNullRevisionInsert( TranslatableBundle $bundle, RevisionRecord $revision ): void {
+ if ( !$bundle instanceof MessageBundle ) {
+ throw new InvalidArgumentException(
+ 'Expected $bundle to be of type MessageBundle, got ' . get_class( $bundle )
+ );
+ }
+
+ $this->revTagStore->replaceTag( $bundle->getTitle(), RevTagStore::MB_VALID_TAG, $revision->getId() );
+ MessageBundle::clearSourcePageCache();
+ }
+
+ public function delete( Title $title ): void {
+ $this->revTagStore->removeTags( $title, RevTagStore::MB_VALID_TAG );
+
+ $bundle = new MessageBundle( $title );
+ TranslateMetadata::clearMetadata( $bundle->getMessageGroupId(), self::METADATA_KEYS_DB );
+
+ MessageBundle::clearSourcePageCache();
+
+ MessageGroups::singleton()->recache();
+ $this->messageIndex->rebuild();
+ }
+
+ public function validate( Title $pageTitle, MessageBundleContent $content ): void {
+ $content->validate();
+ // Verify that the language code is valid
+ $metadata = $content->getMetadata();
+ $sourceLanguageCode = $metadata->getSourceLanguageCode();
+ if ( $sourceLanguageCode ) {
+ if ( !$this->languageNameUtils->isKnownLanguageTag( $sourceLanguageCode ) ) {
+ throw new MalformedBundle(
+ 'translate-messagebundle-error-invalid-sourcelanguage', [ $sourceLanguageCode ]
+ );
+ }
+
+ $revisionId = $this->revTagStore->getLatestRevisionWithTag( $pageTitle, RevTagStore::MB_VALID_TAG );
+ // If request wants the source language to be changed after creation, then throw an exception
+ if ( $revisionId !== null && $sourceLanguageCode !== $pageTitle->getPageLanguage()->getCode() ) {
+ throw new MalformedBundle( 'translate-messagebundle-sourcelanguage-changed' );
+ }
+
+ }
+
+ $priorityLanguageCodes = $metadata->getPriorityLanguages();
+ if ( $priorityLanguageCodes ) {
+ $invalidLanguageCodes = [];
+ foreach ( $priorityLanguageCodes as $languageCode ) {
+ if ( !is_string( $languageCode ) ) {
+ throw new MalformedBundle( 'translate-messagebundle-error-invalid-prioritylanguage-format' );
+ }
+
+ if ( !$this->languageNameUtils->isKnownLanguageTag( $languageCode ) ) {
+ $invalidLanguageCodes[] = $languageCode;
+ }
+ }
+
+ if ( $invalidLanguageCodes ) {
+ throw new MalformedBundle(
+ 'translate-messagebundle-error-invalid-prioritylanguage',
+ [ Message::listParam( $invalidLanguageCodes ), count( $invalidLanguageCodes ) ]
+ );
+ }
+ }
+ }
+
+ public function save(
+ Title $pageTitle,
+ RevisionRecord $revisionRecord,
+ MessageBundleContent $content
+ ): void {
+ // Validate the content before saving
+ $this->validate( $pageTitle, $content );
+
+ $previousRevisionId = $this->revTagStore->getLatestRevisionWithTag( $pageTitle, RevTagStore::MB_VALID_TAG );
+ if ( $previousRevisionId !== null ) {
+ $this->revTagStore->removeTags( $pageTitle, RevTagStore::MB_VALID_TAG );
+ }
+
+ if ( $content->isValid() ) {
+ // Bundle is valid and contains translatable messages
+ $this->revTagStore->replaceTag( $pageTitle, RevTagStore::MB_VALID_TAG, $revisionRecord->getId() );
+ MessageBundle::clearSourcePageCache();
+
+ // Defer most of the heavy work to the job queue
+ $job = UpdateMessageBundleJob::newJob( $pageTitle, $revisionRecord->getId(), $previousRevisionId );
+
+ $this->jobQueue->push( $job );
+
+ // A new message bundle, set the source language.
+ $definedLanguageCode = $content->getMetadata()->getSourceLanguageCode();
+ $pageLanguageCode = $pageTitle->getPageLanguage()->getCode();
+ if ( $previousRevisionId === null ) {
+ if ( $definedLanguageCode !== $pageLanguageCode ) {
+ $context = RequestContext::getMain();
+ SpecialPageLanguage::changePageLanguage(
+ $context,
+ $pageTitle,
+ $definedLanguageCode,
+ wfMessage( 'translate-messagebundle-change-sourcelanguage' )->inContentLanguage()
+ );
+ }
+ }
+
+ // Save the metadata
+ $messageBundle = new MessageBundle( $pageTitle );
+ $groupId = $messageBundle->getMessageGroupId();
+
+ $metadata = $content->getMetadata();
+ $priorityForce = $metadata->areOnlyPriorityLanguagesAllowed() ? 'on' : false;
+ $priorityLanguages = $metadata->getPriorityLanguages();
+ $priorityLanguages = $priorityLanguages ? implode( ',', $priorityLanguages ) : false;
+
+ TranslateMetadata::set( $groupId, 'prioritylangs', $priorityLanguages );
+ TranslateMetadata::set( $groupId, 'priorityforce', $priorityForce );
+
+ $description = $metadata->getDescription();
+ TranslateMetadata::set( $groupId, 'description', $description ?? false );
+ }
+
+ // What should we do if there are no messages? Use the previous version? Remove the group?
+ // Currently, the bundle is removed from translation.
+ }
+}
diff --git a/Translate/src/MessageBundleTranslation/UpdateMessageBundleJob.php b/Translate/src/MessageBundleTranslation/UpdateMessageBundleJob.php
new file mode 100644
index 00000000..9340d51f
--- /dev/null
+++ b/Translate/src/MessageBundleTranslation/UpdateMessageBundleJob.php
@@ -0,0 +1,141 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageBundleTranslation;
+
+use Job;
+use MediaWiki\Extension\Translate\Services;
+use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\MediaWikiServices;
+use MessageGroups;
+use MessageGroupStats;
+use MessageIndexRebuildJob;
+use MessageUpdateJob;
+use Title;
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2021.12
+ */
+class UpdateMessageBundleJob extends Job {
+ /** @inheritDoc */
+ public function __construct( Title $title, $params = [] ) {
+ parent::__construct( 'UpdateMessageBundle', $title, $params );
+ }
+
+ public static function newJob( Title $bundlePageTitle, int $revisionId, ?int $previousRevisionId ): self {
+ return new self(
+ $bundlePageTitle,
+ [
+ 'revisionId' => $revisionId,
+ 'previousRevisionId' => $previousRevisionId,
+ ]
+ );
+ }
+
+ /** @inheritDoc */
+ public function run(): void {
+ $mwInstance = MediaWikiServices::getInstance();
+ $lb = $mwInstance->getDBLoadBalancerFactory();
+ $jobQueue = $mwInstance->getJobQueueGroup();
+ $logger = LoggerFactory::getInstance( 'Translate.MessageBundle' );
+ $messageIndex = Services::getInstance()->getMessageIndex();
+
+ $logger->info( 'UpdateMessageBundleJob: Starting job for: ' . $this->getTitle()->getPrefixedText() );
+
+ // Not sure if this is necessary, but it should ensure that this job, which was created
+ // when a revision was saved, can read that revision from the replica. In addition, this
+ // may potentially do a bunch of more writes that could cause more replication lag.
+ if ( !$lb->waitForReplication() ) {
+ $logger->warning( 'UpdateMessageBundleJob: Continuing despite replication lag' );
+ }
+
+ // Setup
+ $bundlePageTitle = $this->getTitle();
+ $name = $bundlePageTitle->getPrefixedText();
+ $pageId = $bundlePageTitle->getId();
+ $groupId = MessageBundleMessageGroup::getGroupId( $name );
+ $params = $this->getParams();
+ // We don't care about the group description, so no need to pass it through
+ $group = new MessageBundleMessageGroup( $groupId, $name, $pageId, $params['revisionId'], null );
+ $messages = $group->getDefinitions();
+ $previousMessages = [];
+ if ( $params['previousRevisionId'] ) {
+ $groupPreviousVersion = new MessageBundleMessageGroup(
+ $groupId, $name, $pageId, $params['previousRevisionId'], null
+ );
+ $previousMessages = $groupPreviousVersion->getDefinitions();
+ }
+
+ // Fill in the front-cache. Ideally this should be done right away, but hopefully
+ // this is okay since we only trigger message group cache rebuild later in this job.
+ // It's possible that some other change triggers it earlier and makes the new group
+ // available before this step is complete.
+ $newKeys = array_diff( array_keys( $messages ), array_keys( $previousMessages ) );
+ $messageIndex->storeInterim( $group, $newKeys );
+
+ // Create jobs that will update the '/' source language pages. These pages should
+ // exist so that the editor can show differences for changed messages. Also compare
+ // against previous version (if any) to determine whether to mark translations as
+ // outdated. There is no support for renames.
+ $jobs = [];
+ $namespace = $group->getNamespace();
+ $code = $group->getSourceLanguage();
+ foreach ( $messages as $key => $value ) {
+ $title = Title::makeTitle( $namespace, "$key/$code" );
+ $fuzzy = $this->shouldFuzzy( $previousMessages, $newKeys, $key, $value );
+ $jobs[] = MessageUpdateJob::newJob( $title, $value, $fuzzy );
+ }
+ $jobQueue->push( $jobs );
+ $logger->info(
+ 'UpdateMessageBundleJob: Added {number} MessageUpdateJobs to the job queue for: {title}',
+ [
+ 'number' => count( $jobs ),
+ 'title' => $name
+ ]
+ );
+
+ // This is somewhat slow, so it has been postponed until now, but it's needed to
+ // make the group available for the message index rebuild.
+ MessageGroups::singleton()->recache();
+
+ $logger->info(
+ 'UpdateMessageBundleJob: {title}: Recaching message groups',
+ [ 'title' => $name ]
+ );
+
+ // Schedule message index update. Thanks to front caching, it is okay if this takes
+ // a while (and on large wikis it does take a while!). Running it as a separate job
+ // also allows de-duplication.
+ $job = MessageIndexRebuildJob::newJob();
+ $jobQueue->push( $job );
+ $logger->info(
+ 'UpdateMessageBundleJob: {title}: Queue MessageIndexRebuildJob',
+ [ 'title' => $name ]
+ );
+
+ // Refresh or fill translations statistics. If this a new group, this prevents
+ // calculating the stats on the fly during read requests. If an existing group, this
+ // makes sure that the statistics are up-to-date.
+ MessageGroupStats::forGroup(
+ $groupId,
+ MessageGroupStats::FLAG_NO_CACHE | MessageGroupStats::FLAG_IMMEDIATE_WRITES
+ );
+ }
+
+ private function shouldFuzzy(
+ ?array $previousMessages,
+ array $newKeys,
+ string $key,
+ string $value
+ ): bool {
+ // Mark new keys as fuzzy
+ if ( in_array( $key, $newKeys ) ) {
+ return true;
+ }
+
+ $previousValue = $previousMessages[$key] ?? null;
+ return $previousMessages !== null && $previousValue !== $value;
+ }
+}
diff --git a/Translate/src/MessageGroupProcessing/AggregateGroupsActionApi.php b/Translate/src/MessageGroupProcessing/AggregateGroupsActionApi.php
new file mode 100644
index 00000000..57f06376
--- /dev/null
+++ b/Translate/src/MessageGroupProcessing/AggregateGroupsActionApi.php
@@ -0,0 +1,275 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageGroupProcessing;
+
+use AggregateMessageGroup;
+use ApiBase;
+use ApiMain;
+use JobQueueGroup;
+use ManualLogEntry;
+use MediaWiki\Logger\LoggerFactory;
+use MessageGroups;
+use MessageIndexRebuildJob;
+use Title;
+use TranslateMetadata;
+use Wikimedia\ParamValidator\ParamValidator;
+use WikiPageMessageGroup;
+
+/**
+ * API module for managing aggregate message groups
+ * Only supports aggregate message groups defined inside the wiki.
+ * Aggregate message group defined in YAML configuration cannot be altered.
+ * @author Santhosh Thottingal
+ * @author Niklas Laxström
+ * @copyright Copyright © 2012-2013, Santhosh Thottingal
+ * @license GPL-2.0-or-later
+ * @ingroup API TranslateAPI
+ */
+class AggregateGroupsActionApi extends ApiBase {
+ /** @var JobQueueGroup */
+ private $jobQueueGroup;
+ /** @var string */
+ protected static $right = 'translate-manage';
+
+ public function __construct(
+ ApiMain $main,
+ string $action,
+ JobQueueGroup $jobQueueGroup
+ ) {
+ parent::__construct( $main, $action );
+ $this->jobQueueGroup = $jobQueueGroup;
+ }
+
+ public function execute(): void {
+ $this->checkUserRightsAny( self::$right );
+ $block = $this->getUser()->getBlock();
+ if ( $block && $block->isSitewide() ) {
+ $this->dieBlocked( $block );
+ }
+
+ $params = $this->extractRequestParams();
+ $action = $params['do'];
+ $output = [];
+ if ( $action === 'associate' || $action === 'dissociate' ) {
+ // Group is mandatory only for these two actions
+ if ( !isset( $params['group'] ) ) {
+ $this->dieWithError( [ 'apierror-missingparam', 'group' ] );
+ }
+ if ( !isset( $params['aggregategroup'] ) ) {
+ $this->dieWithError( [ 'apierror-missingparam', 'aggregategroup' ] );
+ }
+ $aggregateGroup = $params['aggregategroup'];
+ $subgroups = TranslateMetadata::getSubgroups( $aggregateGroup );
+ if ( $subgroups === null ) {
+ // For a newly created aggregate group, it may contain no subgroups, but null
+ // means the group does not exist or something has gone wrong.
+
+ $this->dieWithError( 'apierror-translate-invalidaggregategroup', 'invalidaggregategroup' );
+ }
+
+ $subgroupId = $params['group'];
+ $group = MessageGroups::getGroup( $subgroupId );
+
+ // Add or remove from the list
+ if ( $action === 'associate' ) {
+ if ( !$group instanceof WikiPageMessageGroup ) {
+ $this->dieWithError( 'apierror-translate-invalidgroup', 'invalidgroup' );
+ }
+
+ $subgroups[] = $subgroupId;
+ $subgroups = array_unique( $subgroups );
+ } elseif ( $action === 'dissociate' ) {
+ // Allow removal of non-existing groups
+ $subgroups = array_flip( $subgroups );
+ unset( $subgroups[$subgroupId] );
+ $subgroups = array_flip( $subgroups );
+ }
+
+ TranslateMetadata::setSubgroups( $aggregateGroup, $subgroups );
+
+ $logParams = [
+ 'aggregategroup' => TranslateMetadata::get( $aggregateGroup, 'name' ),
+ 'aggregategroup-id' => $aggregateGroup,
+ ];
+
+ /* Note that to allow removing no longer existing groups from
+ * aggregate message groups, the message group object $group
+ * might not always be available. In this case we need to fake
+ * some title. */
+ $title = $group instanceof WikiPageMessageGroup ?
+ $group->getTitle() :
+ Title::newFromText( "Special:Translate/$subgroupId" );
+
+ $entry = new ManualLogEntry( 'pagetranslation', $action );
+ $entry->setPerformer( $this->getUser() );
+ $entry->setTarget( $title );
+ // @todo
+ // $entry->setComment( $comment );
+ $entry->setParameters( $logParams );
+
+ $logid = $entry->insert();
+ $entry->publish( $logid );
+ } elseif ( $action === 'remove' ) {
+ if ( !isset( $params['aggregategroup'] ) ) {
+ $this->dieWithError( [ 'apierror-missingparam', 'aggregategroup' ] );
+ }
+
+ $aggregateGroupId = $params['aggregategroup'];
+ $group = MessageGroups::getGroup( $aggregateGroupId );
+ if ( !$group || !( $group instanceof AggregateMessageGroup ) ) {
+ $this->dieWithError(
+ 'apierror-translate-invalidaggregategroupname', 'invalidaggregategroupname'
+ );
+ }
+
+ TranslateMetadata::deleteGroup( $params['aggregategroup'] );
+ $logger = LoggerFactory::getInstance( 'Translate' );
+ $logger->info(
+ 'Aggregate group {groupId} has been deleted.',
+ [ 'groupId' => $aggregateGroupId ]
+ );
+ } elseif ( $action === 'add' ) {
+ if ( !isset( $params['groupname'] ) ) {
+ $this->dieWithError( [ 'apierror-missingparam', 'groupname' ] );
+ }
+ $name = trim( $params['groupname'] );
+ if ( strlen( $name ) === 0 ) {
+ $this->dieWithError(
+ 'apierror-translate-invalidaggregategroupname', 'invalidaggregategroupname'
+ );
+ }
+
+ if ( !isset( $params['groupdescription'] ) ) {
+ $this->dieWithError( [ 'apierror-missingparam', 'groupdescription' ] );
+ }
+ $desc = trim( $params['groupdescription'] );
+
+ $aggregateGroupId = self::generateAggregateGroupId( $name );
+
+ // Throw error if group already exists
+ $nameExists = MessageGroups::labelExists( $name );
+ if ( $nameExists ) {
+ $this->dieWithError( 'apierror-translate-duplicateaggregategroup', 'duplicateaggregategroup' );
+ }
+
+ // ID already exists- Generate a new ID by adding a number to it.
+ $idExists = MessageGroups::getGroup( $aggregateGroupId );
+ if ( $idExists ) {
+ $i = 1;
+ do {
+ $tempId = $aggregateGroupId . '-' . $i;
+ $idExists = MessageGroups::getGroup( $tempId );
+ $i++;
+ } while ( $idExists );
+ $aggregateGroupId = $tempId;
+ }
+
+ TranslateMetadata::set( $aggregateGroupId, 'name', $name );
+ TranslateMetadata::set( $aggregateGroupId, 'description', $desc );
+ TranslateMetadata::setSubgroups( $aggregateGroupId, [] );
+
+ // Once new aggregate group added, we need to show all the pages that can be added to that.
+ $output['groups'] = self::getAllPages();
+ $output['aggregategroupId'] = $aggregateGroupId;
+ // @todo Logging
+ } elseif ( $action === 'update' ) {
+ if ( !isset( $params['groupname'] ) ) {
+ $this->dieWithError( [ 'apierror-missingparam', 'groupname' ] );
+ }
+ $name = trim( $params['groupname'] );
+ if ( strlen( $name ) === 0 ) {
+ $this->dieWithError(
+ 'apierror-translate-invalidaggregategroupname', 'invalidaggregategroupname'
+ );
+ }
+ $desc = trim( $params['groupdescription'] );
+ $aggregateGroupId = $params['aggregategroup'];
+
+ $oldName = TranslateMetadata::get( $aggregateGroupId, 'name' );
+ $oldDesc = TranslateMetadata::get( $aggregateGroupId, 'description' );
+
+ // Error if the label exists already
+ $exists = MessageGroups::labelExists( $name );
+ if ( $exists && $oldName !== $name ) {
+ $this->dieWithError( 'apierror-translate-duplicateaggregategroup', 'duplicateaggregategroup' );
+ }
+
+ if ( $oldName === $name && $oldDesc === $desc ) {
+ $this->dieWithError( 'apierror-translate-invalidupdate', 'invalidupdate' );
+ }
+ TranslateMetadata::set( $aggregateGroupId, 'name', $name );
+ TranslateMetadata::set( $aggregateGroupId, 'description', $desc );
+ }
+
+ // If we got this far, nothing has failed
+ $output['result'] = 'ok';
+ $this->getResult()->addValue( null, $this->getModuleName(), $output );
+ // Cache needs to be cleared after any changes to groups
+ MessageGroups::singleton()->recache();
+ $this->jobQueueGroup->push( MessageIndexRebuildJob::newJob() );
+ }
+
+ protected function generateAggregateGroupId( string $aggregateGroupName, string $prefix = 'agg-' ): string {
+ // The database field has maximum limit of 200 bytes
+ if ( strlen( $aggregateGroupName ) + strlen( $prefix ) >= 200 ) {
+ return $prefix . substr( sha1( $aggregateGroupName ), 0, 5 );
+ } else {
+ $pattern = '/[\x00-\x1f\x23\x27\x2c\x2e\x3c\x3e\x5b\x5d\x7b\x7c\x7d\x7f\s]+/i';
+ return $prefix . preg_replace( $pattern, '_', $aggregateGroupName );
+ }
+ }
+
+ public function isWriteMode(): bool {
+ return true;
+ }
+
+ public function needsToken(): string {
+ return 'csrf';
+ }
+
+ protected function getAllowedParams(): array {
+ return [
+ 'do' => [
+ ParamValidator::PARAM_TYPE => [ 'associate', 'dissociate', 'remove', 'add', 'update' ],
+ ParamValidator::PARAM_REQUIRED => true,
+ ],
+ 'aggregategroup' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ],
+ 'group' => [
+ // Not providing list of values, to allow dissociation of unknown groups
+ ParamValidator::PARAM_TYPE => 'string',
+ ],
+ 'groupname' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ],
+ 'groupdescription' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ],
+ 'token' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_REQUIRED => true,
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages(): array {
+ return [
+ 'action=aggregategroups&do=associate&group=groupId&aggregategroup=aggregateGroupId'
+ => 'apihelp-aggregategroups-example-1',
+ ];
+ }
+
+ public static function getAllPages(): array {
+ $groups = MessageGroups::getAllGroups();
+ $pages = [];
+ foreach ( $groups as $group ) {
+ if ( $group instanceof WikiPageMessageGroup ) {
+ $pages[$group->getId()] = $group->getTitle()->getPrefixedText();
+ }
+ }
+
+ return $pages;
+ }
+}
diff --git a/Translate/src/MessageGroupProcessing/AggregateGroupsSpecialPage.php b/Translate/src/MessageGroupProcessing/AggregateGroupsSpecialPage.php
new file mode 100644
index 00000000..1b43ad2a
--- /dev/null
+++ b/Translate/src/MessageGroupProcessing/AggregateGroupsSpecialPage.php
@@ -0,0 +1,315 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageGroupProcessing;
+
+use AggregateMessageGroup;
+use Html;
+use MediaWiki\Cache\LinkBatchFactory;
+use MessageGroups;
+use SpecialPage;
+use TranslateMetadata;
+use WikiPageMessageGroup;
+use Xml;
+
+/**
+ * Contains logic for special page Special:AggregateGroups.
+ *
+ * @author Santhosh Thottingal
+ * @author Niklas Laxström
+ * @author Siebrand Mazeland
+ * @author Kunal Grover
+ * @license GPL-2.0-or-later
+ */
+class AggregateGroupsSpecialPage extends SpecialPage {
+ /** @var bool */
+ private $hasPermission = false;
+ /** @var LinkBatchFactory */
+ private $linkBatchFactory;
+
+ public function __construct( LinkBatchFactory $linkBatchFactory ) {
+ parent::__construct( 'AggregateGroups', 'translate-manage' );
+ $this->linkBatchFactory = $linkBatchFactory;
+ }
+
+ protected function getGroupName(): string {
+ return 'translation';
+ }
+
+ public function execute( $parameters ) {
+ $this->setHeaders();
+ $this->addHelpLink( 'Help:Extension:Translate/Page translation administration' );
+
+ $out = $this->getOutput();
+ $out->addModuleStyles( 'ext.translate.specialpages.styles' );
+
+ // Check permissions
+ if ( $this->getUser()->isAllowed( 'translate-manage' ) ) {
+ $this->hasPermission = true;
+ }
+
+ $groupsPreload = MessageGroups::getGroupsByType( AggregateMessageGroup::class );
+ TranslateMetadata::preloadGroups( array_keys( $groupsPreload ), __METHOD__ );
+
+ $groups = MessageGroups::getAllGroups();
+ uasort( $groups, [ MessageGroups::class, 'groupLabelSort' ] );
+ $aggregates = [];
+ $pages = [];
+ foreach ( $groups as $group ) {
+ if ( $group instanceof WikiPageMessageGroup ) {
+ $pages[] = $group;
+ } elseif ( $group instanceof AggregateMessageGroup ) {
+ // Filter out AggregateGroups configured in YAML
+ $subgroups = TranslateMetadata::getSubgroups( $group->getId() );
+ if ( $subgroups !== null ) {
+ $aggregates[] = $group;
+ }
+ }
+ }
+
+ if ( !$pages ) {
+ // @todo Use different message
+ $out->addWikiMsg( 'tpt-list-nopages' );
+
+ return;
+ }
+
+ $this->showAggregateGroups( $aggregates );
+ }
+
+ protected function showAggregateGroup( AggregateMessageGroup $group ): string {
+ $id = $group->getId();
+ $label = $group->getLabel();
+ $desc = $group->getDescription( $this->getContext() );
+
+ $edit = '';
+ $remove = '';
+ $editGroup = '';
+ $select = '';
+ $addButton = '';
+
+ // Add divs for editing Aggregate Groups
+ if ( $this->hasPermission ) {
+ // Group edit and remove buttons
+ $edit = Html::element( 'span', [ 'class' => 'tp-aggregate-edit-ag-button' ] );
+ $remove = Html::element( 'span', [ 'class' => 'tp-aggregate-remove-ag-button' ] );
+
+ // Edit group div
+ $editGroupNameLabel = $this->msg( 'tpt-aggregategroup-edit-name' )->escaped();
+ $editGroupName = Html::input(
+ 'tp-agg-name',
+ $label,
+ 'text',
+ [ 'class' => 'tp-aggregategroup-edit-name', 'maxlength' => '200' ]
+ );
+ $editGroupDescriptionLabel = $this->msg( 'tpt-aggregategroup-edit-description' )->escaped();
+ $editGroupDescription = Html::input(
+ 'tp-agg-desc',
+ $desc,
+ 'text',
+ [ 'class' => 'tp-aggregategroup-edit-description' ]
+ );
+ $saveButton = Xml::submitButton(
+ $this->msg( 'tpt-aggregategroup-update' )->text(),
+ [ 'class' => 'tp-aggregategroup-update' ]
+ );
+ $cancelButton = Xml::submitButton(
+ $this->msg( 'tpt-aggregategroup-update-cancel' )->text(),
+ [ 'class' => 'tp-aggregategroup-update-cancel' ]
+ );
+ $editGroup = Html::rawElement(
+ 'div',
+ [ 'class' => 'tp-edit-group hidden' ],
+ $editGroupNameLabel .
+ $editGroupName .
+ '<br />' .
+ $editGroupDescriptionLabel .
+ $editGroupDescription .
+ $saveButton .
+ $cancelButton
+ );
+
+ // Subgroups selector
+ $select = Html::input( 'tp-subgroups-input', '', 'text', [ 'class' => 'tp-group-input' ] );
+ $addButton = Html::element( 'input',
+ [
+ 'type' => 'button',
+ 'value' => $this->msg( 'tpt-aggregategroup-add' )->text(),
+ 'class' => 'tp-aggregate-add-button'
+ ]
+ );
+ }
+
+ // Not calling $parent->getGroups() because it has done filtering already
+ $subGroups = TranslateMetadata::getSubgroups( $id );
+ $shouldExpand = count( $subGroups ) <= 3;
+ $subGroupsId = $this->htmlIdForGroup( $group->getId(), 'tp-subgroup-' );
+
+ // Aggregate Group info div
+ $groupName = Html::rawElement(
+ 'h2',
+ [ 'class' => 'tp-name' ],
+ $this->getGroupToggleIcon( $subGroupsId, $shouldExpand ) . htmlspecialchars( $label ) . $edit . $remove
+ );
+ $groupDesc = Html::element(
+ 'p',
+ [ 'class' => 'tp-desc' ],
+ $desc
+ );
+ $groupInfo = Html::rawElement(
+ 'div',
+ [ 'class' => 'tp-display-group' ],
+ $groupName . $groupDesc
+ );
+
+ $out = Html::openElement(
+ 'div',
+ [
+ 'class' => 'mw-tpa-group js-mw-tpa-group' . ( $shouldExpand ? ' mw-tpa-group-open' : '' ),
+ 'data-groupid' => $id,
+ 'data-id' => $this->htmlIdForGroup( $group->getId() )
+ ]
+ );
+ $out .= $groupInfo;
+ $out .= $editGroup;
+ $out .= Html::openElement( 'div', [ 'class' => 'tp-sub-groups', 'id' => $subGroupsId ] );
+ $out .= $this->listSubgroups( $id, $subGroups );
+ $out .= $select . $addButton;
+ $out .= Html::closeElement( 'div' );
+ $out .= '</div>';
+
+ return $out;
+ }
+
+ /** @param AggregateMessageGroup[] $aggregates */
+ private function showAggregateGroups( array $aggregates ): void {
+ $out = $this->getOutput();
+ $out->addModules( 'ext.translate.special.aggregategroups' );
+
+ $nojs = Html::errorBox(
+ $this->msg( 'tux-nojs' )->plain(),
+ '',
+ 'tux-nojs'
+ );
+
+ $out->addHTML( $nojs );
+
+ // Add new group if user has permissions
+ if ( $this->hasPermission ) {
+ $out->addHTML(
+ "<a class='tpt-add-new-group' href='#'>" .
+ $this->msg( 'tpt-aggregategroup-add-new' )->escaped() .
+ '</a>'
+ );
+ $newGroupNameLabel = $this->msg( 'tpt-aggregategroup-new-name' )->escaped();
+ $newGroupName = Html::element( 'input', [ 'class' => 'tp-aggregategroup-add-name', 'maxlength' => '200' ] );
+ $newGroupDescriptionLabel = $this->msg( 'tpt-aggregategroup-new-description' )->escaped();
+ $newGroupDescription = Html::element( 'input', [ 'class' => 'tp-aggregategroup-add-description' ] );
+ $saveButton = Html::element(
+ 'input',
+ [
+ 'type' => 'button',
+ 'value' => $this->msg( 'tpt-aggregategroup-save' )->text(),
+ 'id' => 'tpt-aggregategroups-save',
+ 'class' => 'tp-aggregate-save-button'
+ ]
+ );
+ $closeButton = Html::element(
+ 'input',
+ [
+ 'type' => 'button',
+ 'value' => $this->msg( 'tpt-aggregategroup-close' )->text(),
+ 'id' => 'tpt-aggregategroups-close'
+ ]
+ );
+ $newGroupDiv = Html::rawElement(
+ 'div',
+ [ 'class' => 'tpt-add-new-group hidden' ],
+ "$newGroupNameLabel $newGroupName<br />" .
+ "$newGroupDescriptionLabel $newGroupDescription<br />$saveButton $closeButton"
+ );
+ $out->addHTML( $newGroupDiv );
+ }
+
+ $out->addHTML( Html::openElement( 'div', [ 'class' => 'mw-tpa-groups' ] ) );
+ /** @var AggregateMessageGroup $group */
+ foreach ( $aggregates as $group ) {
+ $out->addHTML( $this->showAggregateGroup( $group ) );
+ }
+ $out->addHTML( Html::closeElement( 'div' ) );
+ }
+
+ private function listSubgroups( string $groupId, array $subGroupIds ): string {
+ $id = $this->htmlIdForGroup( $groupId, 'mw-tpa-grouplist-' );
+ $out = Html::openElement( 'ol', [ 'id' => $id ] );
+
+ // Get the respective groups and sort them
+ $subgroups = MessageGroups::getGroupsById( $subGroupIds );
+ '@phan-var WikiPageMessageGroup[] $subgroups';
+ uasort( $subgroups, [ MessageGroups::class, 'groupLabelSort' ] );
+
+ // Avoid potentially thousands of separate database queries
+ $lb = $this->linkBatchFactory->newLinkBatch();
+ foreach ( $subgroups as $group ) {
+ $lb->addObj( $group->getTitle() );
+ }
+ $lb->setCaller( __METHOD__ );
+ $lb->execute();
+
+ // Add missing invalid group ids back, not returned by getGroupsById
+ foreach ( $subGroupIds as $id ) {
+ if ( !isset( $subgroups[$id] ) ) {
+ $subgroups[$id] = null;
+ }
+ }
+
+ foreach ( $subgroups as $id => $group ) {
+ $remove = '';
+ if ( $this->hasPermission ) {
+ $remove = Html::element(
+ 'span',
+ [ 'class' => 'tp-aggregate-remove-button', 'data-groupid' => $id ]
+ );
+ }
+
+ if ( $group ) {
+ $text = $this->getLinkRenderer()->makeKnownLink( $group->getTitle() );
+ $note = htmlspecialchars( MessageGroups::getPriority( $id ) );
+ } else {
+ $text = htmlspecialchars( $id );
+ $note = $this->msg( 'tpt-aggregategroup-invalid-group' )->escaped();
+ }
+
+ $out .= Html::rawElement( 'li', [], "$text$remove $note" );
+ }
+ $out .= Html::closeElement( 'ol' );
+
+ return $out;
+ }
+
+ private function htmlIdForGroup( string $groupId, string $prefix = '' ): string {
+ $id = sha1( $groupId );
+ $id = substr( $id, 5, 8 );
+
+ return $prefix . $id;
+ }
+
+ private function getGroupToggleIcon( string $targetElementId, bool $shouldExpand ): string {
+ if ( $shouldExpand ) {
+ $title = $this->msg( 'tpt-aggregategroup-collapse-group' )->plain();
+ } else {
+ $title = $this->msg( 'tpt-aggregategroup-expand-group' )->plain();
+ }
+
+ return Html::rawElement(
+ 'button',
+ [
+ 'type' => 'button',
+ 'title' => $title,
+ 'class' => 'js-tp-toggle-groups tp-toggle-group-icon',
+ 'aria-expanded' => $shouldExpand ? 'true' : 'false',
+ 'aria-controls' => $targetElementId
+ ]
+ );
+ }
+}
diff --git a/Translate/src/MessageGroupProcessing/CsvTranslationImporter.php b/Translate/src/MessageGroupProcessing/CsvTranslationImporter.php
new file mode 100644
index 00000000..83a9f9a8
--- /dev/null
+++ b/Translate/src/MessageGroupProcessing/CsvTranslationImporter.php
@@ -0,0 +1,249 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageGroupProcessing;
+
+use CommentStoreComment;
+use ContentHandler;
+use MediaWiki\Page\WikiPageFactory;
+use MediaWiki\Permissions\Authority;
+use MediaWiki\Revision\SlotRecord;
+use MessageHandle;
+use SplFileObject;
+use Status;
+use Title;
+use TranslateUtils;
+
+/**
+ * Parse, validate and import translations from a CSV file
+ * @since 2022.06
+ * @license GPL-2.0-or-later
+ * @author Abijeet Patro
+ */
+class CsvTranslationImporter {
+ /** @var WikiPageFactory */
+ private $wikiPageFactory;
+
+ public function __construct( WikiPageFactory $wikiPageFactory ) {
+ $this->wikiPageFactory = $wikiPageFactory;
+ }
+
+ /** Parse and validate the CSV file */
+ public function parseFile( string $csvFilePath ): Status {
+ if ( !file_exists( $csvFilePath ) || !is_file( $csvFilePath ) ) {
+ return Status::newFatal(
+ "CSV file path '$csvFilePath' does not exist, is not readable or is not a file"
+ );
+ }
+
+ $indexedLanguageCodes = [];
+ $currentRowCount = -1;
+ $importData = [];
+ $invalidRows = [
+ 'emptyTitleRows' => [],
+ 'invalidTitleRows' => [],
+ 'groupNotFoundRows' => []
+ ];
+
+ $csvFileContent = new SplFileObject( $csvFilePath, 'r' );
+ while ( !$csvFileContent->eof() ) {
+ // Increment the row count at the beginning since we have a bunch of jump statements
+ // at various placaes
+ ++$currentRowCount;
+
+ $csvRow = $csvFileContent->fgetcsv();
+ if ( $this->isCsvRowEmpty( $csvRow ) ) {
+ continue;
+ }
+
+ if ( $currentRowCount === 0 ) {
+ // Validate the header
+ $status = $this->getLanguagesFromHeader( $csvRow );
+ if ( !$status->isGood() ) {
+ return $status;
+ }
+ /** @var string[] */
+ $indexedLanguageCodes = $status->getValue();
+ continue;
+ }
+
+ $rowData = [ 'translations' => [] ];
+ $messageTitle = isset( $csvRow[0] ) ? trim( $csvRow[0] ) : null;
+ if ( !$messageTitle ) {
+ $invalidRows['emptyTitleRows'][] = $currentRowCount + 1;
+ continue;
+ }
+
+ $handle = $this->getMessageHandleIfValid( $messageTitle );
+ if ( $handle === null ) {
+ $invalidRows['invalidTitleRows'][] = $currentRowCount + 1;
+ continue;
+ }
+
+ // Ensure that the group is present
+ $group = $handle->getGroup();
+ if ( !$group ) {
+ $invalidRows['groupNotFoundRows'][] = $currentRowCount + 1;
+ continue;
+ }
+
+ $sourceLanguage = $group->getSourceLanguage();
+
+ $rowData['messageTitle'] = $messageTitle;
+ foreach ( $indexedLanguageCodes as $languageCode => $index ) {
+ if ( $sourceLanguage === $languageCode ) {
+ continue;
+ }
+
+ $rowData['translations'][$languageCode] = $csvRow[$index] ?? null;
+ }
+ $importData[] = $rowData;
+ }
+
+ $status = new Status();
+ if ( $invalidRows['emptyTitleRows'] ) {
+ $status->fatal(
+ 'Empty message titles found on row(s): ' . implode( ',', $invalidRows['emptyTitleRows'] )
+ );
+ }
+
+ if ( $invalidRows['invalidTitleRows'] ) {
+ $status->fatal(
+ 'Invalid message title(s) found on row(s): ' . implode( ',', $invalidRows['invalidTitleRows'] )
+ );
+ }
+
+ if ( $invalidRows['groupNotFoundRows'] ) {
+ $status->fatal(
+ 'Group not found for message(s) on row(s) ' . implode( ',', $invalidRows['invalidTitleRows'] )
+ );
+ }
+
+ if ( !$status->isGood() ) {
+ return $status;
+ }
+
+ return Status::newGood( $importData );
+ }
+
+ /** Import the data returned from the parseFile method */
+ public function importData(
+ array $messagesWithTranslations,
+ Authority $authority,
+ string $comment,
+ ?callable $progressReporter = null
+ ): Status {
+ $commentStoreComment = CommentStoreComment::newUnsavedComment( $comment );
+
+ // Loop over each translation to import
+ $importStatus = new Status();
+ $failedStatuses = [];
+ $currentTranslation = 0;
+ foreach ( $messagesWithTranslations as $messageTranslation ) {
+ $messageTitleText = $messageTranslation['messageTitle'];
+ $messageTitle = Title::newFromText( $messageTitleText );
+ $messageHandle = new MessageHandle( $messageTitle );
+
+ $translationImportStatuses = [];
+
+ // Import each translation for the current message
+ $translations = $messageTranslation['translations'];
+ foreach ( $translations as $languageCode => $translation ) {
+ // Skip empty translations
+ if ( $translation === null || trim( $translation ) === '' ) {
+ continue;
+ }
+
+ $translationTitle = $messageHandle->getTitleForLanguage( $languageCode );
+
+ // Perform the update for the translation page
+ $updater = $this->wikiPageFactory->newFromTitle( $translationTitle )
+ ->newPageUpdater( $authority );
+ $content = ContentHandler::makeContent( $translation, $translationTitle );
+ $updater->setContent( SlotRecord::MAIN, $content );
+ $updater->setFlags( EDIT_FORCE_BOT );
+ $updater->saveRevision( $commentStoreComment );
+
+ $status = $updater->getStatus();
+ $translationImportStatuses[] = $status;
+ if ( !$status->isOK() ) {
+ $failedStatuses[ $translationTitle->getPrefixedText() ] = $status;
+ }
+ }
+
+ ++$currentTranslation;
+ if ( $progressReporter ) {
+ call_user_func(
+ $progressReporter,
+ $messageTitle,
+ $translationImportStatuses,
+ count( $messagesWithTranslations ),
+ $currentTranslation
+ );
+ }
+ }
+
+ if ( $failedStatuses ) {
+ foreach ( $failedStatuses as $failedStatus ) {
+ $importStatus->merge( $failedStatus );
+ }
+
+ $importStatus->setResult( false, $failedStatuses );
+ }
+
+ return $importStatus;
+ }
+
+ private function getLanguagesFromHeader( array $csvHeader ): Status {
+ if ( count( $csvHeader ) < 2 ) {
+ return Status::newFatal(
+ 'CSV has < 2 columns. Assuming that there are no languages to import'
+ );
+ }
+
+ $languageCodesInHeader = array_slice( $csvHeader, 2 );
+ if ( $languageCodesInHeader === [] ) {
+ return Status::newFatal( 'No languages found for import' );
+ }
+
+ $invalidLanguageCodes = [];
+ $indexedLanguageCodes = [];
+ // First two columns are message title and definition
+ $originalLanguageIndex = 2;
+ foreach ( $languageCodesInHeader as $languageCode ) {
+ if ( !TranslateUtils::isSupportedLanguageCode( strtolower( $languageCode ) ) ) {
+ $invalidLanguageCodes[] = $languageCode;
+ } else {
+ // Language codes maybe in upper case, convert to lower case for further use.
+ $indexedLanguageCodes[ strtolower( $languageCode ) ] = $originalLanguageIndex;
+ }
+ ++$originalLanguageIndex;
+ }
+
+ if ( $invalidLanguageCodes ) {
+ return Status::newFatal(
+ 'Invalid language codes detected in CSV header: ' . implode( ', ', $invalidLanguageCodes )
+ );
+ }
+
+ return Status::newGood( $indexedLanguageCodes );
+ }
+
+ private function getMessageHandleIfValid( string $messageTitle ): ?MessageHandle {
+ $title = Title::newFromText( $messageTitle );
+ if ( $title === null ) {
+ return null;
+ }
+
+ $handle = new MessageHandle( $title );
+ if ( $handle->isValid() ) {
+ return $handle;
+ }
+
+ return null;
+ }
+
+ private function isCsvRowEmpty( array $csvRow ): bool {
+ return count( $csvRow ) === 1 && ( $csvRow[0] === null || trim( $csvRow[0] ) === '' );
+ }
+}
diff --git a/Translate/src/MessageGroupProcessing/DeleteTranslatableBundleJob.php b/Translate/src/MessageGroupProcessing/DeleteTranslatableBundleJob.php
new file mode 100644
index 00000000..080b2b40
--- /dev/null
+++ b/Translate/src/MessageGroupProcessing/DeleteTranslatableBundleJob.php
@@ -0,0 +1,133 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageGroupProcessing;
+
+use Job;
+use MediaWiki\Extension\Translate\PageTranslation\Hooks;
+use MediaWiki\Extension\Translate\PageTranslation\TranslatablePage;
+use MediaWiki\Extension\Translate\Services;
+use MediaWiki\Extension\Translate\SystemUsers\FuzzyBot;
+use MediaWiki\MediaWikiServices;
+use Title;
+use User;
+
+/**
+ * Job for deleting translatable bundles and translation pages.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @ingroup PageTranslation JobQueue
+ */
+class DeleteTranslatableBundleJob extends Job {
+ public static function newJob(
+ Title $target,
+ string $base,
+ string $bundleType,
+ bool $isTranslatableBundle,
+ User $performer,
+ string $reason
+ ): self {
+ $params = [
+ 'translation' => $isTranslatableBundle,
+ 'base' => $base,
+ 'bundleType' => $bundleType,
+ 'performer' => $performer->getName(),
+ 'reason' => $reason
+ ];
+
+ return new self( $target, $params );
+ }
+
+ public function __construct( Title $title, array $params = [] ) {
+ parent::__construct( 'DeleteTranslatableBundleJob', $title, $params );
+ }
+
+ public function run() {
+ $title = $this->title;
+ $fuzzyBot = FuzzyBot::getUser();
+ $summary = $this->getSummary();
+ $base = $this->getBase();
+ $performer = $this->getPerformer();
+ $reason = $this->getReason();
+ $mwInstance = MediaWikiServices::getInstance();
+
+ Hooks::$allowTargetEdit = true;
+ Hooks::$jobQueueRunning = true;
+
+ $wikipage = $mwInstance->getWikiPageFactory()->newFromTitle( $title );
+ $deletePage = $mwInstance->getDeletePageFactory()->newDeletePage( $wikipage, $fuzzyBot );
+ $status = $deletePage->setSuppress( false )
+ ->forceImmediate( true )
+ ->deleteUnsafe( "{$summary}: $reason" );
+
+ $bundleFactory = Services::getInstance()->getTranslatableBundleFactory();
+ // Since the page has been removed from cache, create a bundle from the class name.
+ $bundle = $bundleFactory->getBundleFromClass( Title::newFromText( $base ), $this->getBundleType() );
+ $logger = $bundleFactory->getPageDeleteLogger( $bundle );
+
+ if ( !$status->isGood() ) {
+ if ( $this->isTranslation() ) {
+ $logger->logPageError( $performer, $reason, $status );
+ } else {
+ $logger->logBundleError( $performer, $reason, $status );
+ }
+ }
+
+ Hooks::$allowTargetEdit = false;
+
+ $cache = $mwInstance->getMainObjectStash();
+ $pageKey = $cache->makeKey( 'pt-base', $base );
+ $pages = (array)$cache->get( $pageKey );
+ $lastitem = array_pop( $pages );
+ if ( $title->getPrefixedText() === $lastitem ) {
+ $cache->delete( $pageKey );
+
+ if ( $this->isTranslation() ) {
+ $logger->logPageSuccess( $performer, $reason );
+ } else {
+ $logger->logBundleSuccess( $performer, $reason );
+ }
+
+ $title->invalidateCache();
+ Hooks::$jobQueueRunning = false;
+ }
+
+ return true;
+ }
+
+ public function getSummary(): string {
+ $base = $this->getBase();
+ if ( $this->isTranslation() ) {
+ $msg = wfMessage( 'pt-deletepage-lang-logreason', $base )->inContentLanguage()->text();
+ } else {
+ $msg = wfMessage( 'pt-deletepage-full-logreason', $base )->inContentLanguage()->text();
+ }
+
+ return $msg;
+ }
+
+ public function getReason(): string {
+ return $this->params['reason'];
+ }
+
+ private function isTranslation(): bool {
+ // Use 'full' property if 'translation' is missing. This will happen
+ // if the job is added before param 'full' was changed to 'translation'
+ // Remove after MLEB 2022.07
+ return $this->params['translation'] ?? !$this->params['full'];
+ }
+
+ public function getPerformer(): User {
+ $userFactory = MediaWikiServices::getInstance()->getUserFactory();
+ return $userFactory->newFromName( $this->params['performer'] );
+ }
+
+ public function getBase(): string {
+ return $this->params['base'];
+ }
+
+ private function getBundleType(): string {
+ // Default to TranslatablePage if param is not present
+ return $this->params['bundleType'] ?? TranslatablePage::class;
+ }
+}
diff --git a/Translate/src/MessageGroupProcessing/GroupReviewActionApi.php b/Translate/src/MessageGroupProcessing/GroupReviewActionApi.php
new file mode 100644
index 00000000..7cbe12c3
--- /dev/null
+++ b/Translate/src/MessageGroupProcessing/GroupReviewActionApi.php
@@ -0,0 +1,119 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageGroupProcessing;
+
+use ApiBase;
+use ApiMain;
+use Mediawiki\Languages\LanguageNameUtils;
+use MessageGroups;
+use Wikimedia\ParamValidator\ParamValidator;
+
+/**
+ * API module for switching workflow states for message groups
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @ingroup API TranslateAPI
+ */
+class GroupReviewActionApi extends ApiBase {
+ protected static $right = 'translate-groupreview';
+ /** @var LanguageNameUtils */
+ private $languageNameUtils;
+ /** @var MessageGroupReview */
+ private $messageGroupReview;
+
+ public function __construct(
+ ApiMain $main,
+ string $action,
+ LanguageNameUtils $languageNameUtils,
+ MessageGroupReview $messageGroupReview
+ ) {
+ parent::__construct( $main, $action );
+ $this->languageNameUtils = $languageNameUtils;
+ $this->messageGroupReview = $messageGroupReview;
+ }
+
+ public function execute() {
+ $user = $this->getUser();
+ $requestParams = $this->extractRequestParams();
+
+ $group = MessageGroups::getGroup( $requestParams['group'] );
+ $code = $requestParams['language'];
+
+ if ( !$group || MessageGroups::isDynamic( $group ) ) {
+ $this->dieWithError( [ 'apierror-badparameter', 'group' ] );
+ }
+ $stateConfig = $group->getMessageGroupStates()->getStates();
+ if ( !$stateConfig ) {
+ $this->dieWithError( 'apierror-translate-groupreviewdisabled', 'disabled' );
+ }
+
+ $this->checkUserRightsAny( self::$right );
+
+ if ( $user->getBlock() ) {
+ $this->dieBlocked( $user->getBlock() );
+ }
+
+ $languages = $this->languageNameUtils->getLanguageNames();
+ if ( !isset( $languages[$code] ) ) {
+ $this->dieWithError( [ 'apierror-badparameter', 'language' ] );
+ }
+
+ $targetState = $requestParams['state'];
+ if ( !isset( $stateConfig[$targetState] ) ) {
+ $this->dieWithError( 'apierror-translate-invalidstate', 'invalidstate' );
+ }
+
+ if ( is_array( $stateConfig[$targetState] )
+ && isset( $stateConfig[$targetState]['right'] )
+ ) {
+ $this->checkUserRightsAny( $stateConfig[$targetState]['right'] );
+ }
+
+ $this->messageGroupReview->changeState( $group, $code, $targetState, $user );
+
+ $output = [ 'review' => [
+ 'group' => $group->getId(),
+ 'language' => $code,
+ 'state' => $targetState,
+ ] ];
+
+ $this->getResult()->addValue( null, $this->getModuleName(), $output );
+ }
+
+ public function isWriteMode(): bool {
+ return true;
+ }
+
+ public function needsToken(): string {
+ return 'csrf';
+ }
+
+ protected function getAllowedParams(): array {
+ return [
+ 'group' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_REQUIRED => true,
+ ],
+ 'language' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_DEFAULT => 'en',
+ ],
+ 'state' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_REQUIRED => true,
+ ],
+ 'token' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_REQUIRED => true,
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages(): array {
+ return [
+ 'action=groupreview&group=page-Example&language=de&state=ready&token=foo'
+ => 'apihelp-groupreview-example-1',
+ ];
+ }
+}
diff --git a/Translate/src/MessageGroupProcessing/ImportTranslationsFromCsv.php b/Translate/src/MessageGroupProcessing/ImportTranslationsFromCsv.php
new file mode 100644
index 00000000..261daf92
--- /dev/null
+++ b/Translate/src/MessageGroupProcessing/ImportTranslationsFromCsv.php
@@ -0,0 +1,146 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageGroupProcessing;
+
+use MediaWiki\Extension\Translate\Services;
+use MediaWiki\Extension\Translate\Utilities\BaseMaintenanceScript;
+use MediaWiki\MediaWikiServices;
+use Title;
+
+/**
+ * Script to import translations from a CSV file
+ * @since 2022.06
+ * @license GPL-2.0-or-later
+ * @author Abijeet Patro
+ */
+class ImportTranslationsFromCsv extends BaseMaintenanceScript {
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Import translations for a CSV file' );
+
+ $this->addArg(
+ 'file',
+ 'Path to CSV file to import',
+ self::REQUIRED
+ );
+
+ $this->addOption(
+ 'summary',
+ 'The change summary when updating the translations',
+ self::REQUIRED,
+ self::HAS_ARG
+ );
+
+ $this->addOption(
+ 'user',
+ 'User ID of the user performing the import',
+ self::REQUIRED,
+ self::HAS_ARG
+ );
+
+ $this->addOption(
+ 'really',
+ 'Should the import actually be performed',
+ self::OPTIONAL,
+ self::NO_ARG
+ );
+
+ $this->requireExtension( 'Translate' );
+ }
+
+ public function execute() {
+ $csvFilePath = $this->getArg( 0 );
+
+ $username = $this->getOption( 'user' );
+ $summary = $this->getOption( 'summary' );
+
+ // Validate the parameters
+ if ( trim( $summary ) === '' ) {
+ $this->fatalError( 'Please provide a non-empty "summary"' );
+ }
+
+ $userFactory = MediaWikiServices::getInstance()->getUserFactory();
+ $user = $userFactory->newFromName( $username );
+
+ if ( $user === null || !$user->isRegistered() ) {
+ $this->fatalError( "User $username does not exist." );
+ }
+
+ // Validate and parse the CSV file
+ $csvImporter = Services::getInstance()->getCsvTranslationImporter();
+ $status = $csvImporter->parseFile( $csvFilePath );
+
+ if ( $status->isOK() ) {
+ $messagesWithTranslations = $status->getValue();
+ $output = "\n";
+ foreach ( $messagesWithTranslations as $messageTranslations ) {
+ $translations = $messageTranslations[ 'translations' ];
+ $output .= '* ' . count( $this->filterEmptyTranslations( $translations ) ) .
+ ' translation(s) to import for ' .
+ $messageTranslations['messageTitle'] . "\n";
+ }
+
+ $this->output( $output . "\n" );
+ } else {
+ $this->error( "Error during processing:\n" );
+ $this->error( (string)$status );
+ $this->fatalError( 'Exiting...' );
+ }
+
+ if ( !$this->hasOption( 'really' ) ) {
+ $this->output( "\nUse option --really to perform the import.\n" );
+ return true;
+ }
+
+ // Start the actual import of translations
+ $this->output( "\nProceeding with import...\n\n" );
+ $importStatus = $csvImporter->importData(
+ $status->getValue(), $user, trim( $summary ), [ $this, 'progressReporter' ]
+ );
+
+ if ( $importStatus->isOK() ) {
+ $this->output( "\nSuccess: Import done\n" );
+ } else {
+ $this->output( "\nImport failed. See errors:\n" );
+ $failedImportStatuses = $importStatus->getValue();
+ foreach ( $failedImportStatuses as $translationTitleText => $status ) {
+ $this->output( "\nImport failed for $translationTitleText:\n" );
+ $this->output( $status );
+ }
+
+ return false;
+ }
+
+ return true;
+ }
+
+ public function progressReporter(
+ Title $title,
+ array $messageImportStatuses,
+ int $total,
+ int $processed
+ ): void {
+ $paddedProcessed = str_pad( (string)$processed, strlen( (string)$total ), ' ', STR_PAD_LEFT );
+ $progressCounter = "($paddedProcessed/$total)";
+
+ $successCount = 0;
+ $failCount = 0;
+ foreach ( $messageImportStatuses as $messageImportStatus ) {
+ if ( $messageImportStatus->isOK() ) {
+ $successCount++;
+ } else {
+ $failCount++;
+ }
+ }
+
+ $this->output(
+ "$progressCounter Imported translations for {$title->getPrefixedText()} with $failCount " .
+ "failure(s) and $successCount successful import(s) ...\n"
+ );
+ }
+
+ private function filterEmptyTranslations( array $translations ): array {
+ return array_filter( $translations, 'strlen' );
+ }
+}
diff --git a/Translate/src/MessageGroupProcessing/ManageMessageGroupsActionApi.php b/Translate/src/MessageGroupProcessing/ManageMessageGroupsActionApi.php
new file mode 100644
index 00000000..2363e3e5
--- /dev/null
+++ b/Translate/src/MessageGroupProcessing/ManageMessageGroupsActionApi.php
@@ -0,0 +1,339 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageGroupProcessing;
+
+use ApiBase;
+use Exception;
+use FormatJson;
+use MediaWiki\Extension\Translate\MessageSync\MessageSourceChange;
+use MediaWiki\Extension\Translate\Utilities\StringComparators\SimpleStringComparator;
+use MessageChangeStorage;
+use MessageGroup;
+use MessageGroups;
+use Title;
+use TranslateUtils;
+use Wikimedia\ParamValidator\ParamValidator;
+
+/**
+ * API module for managing message group changes.
+ * Marks message as a rename of another message or as a new message.
+ * Updates the cdb file.
+ * @author Abijeet Patro
+ * @since 2019.10
+ * @license GPL-2.0-or-later
+ * @ingroup API TranslateAPI
+ */
+class ManageMessageGroupsActionApi extends ApiBase {
+ private const RIGHT = 'translate-manage';
+
+ public function execute(): void {
+ $this->checkUserRightsAny( self::RIGHT );
+ $params = $this->extractRequestParams();
+
+ $groupId = $params['groupId'];
+ $op = $params['operation'];
+ $msgKey = $params['messageKey'];
+ $name = $params['changesetName'] ?? MessageChangeStorage::DEFAULT_NAME;
+ $changesetModifiedTime = $params['changesetModified'];
+ $keyToRename = null;
+
+ if ( !MessageChangeStorage::isValidCdbName( $name ) ) {
+ $this->dieWithError(
+ [ 'apierror-translate-invalid-changeset-name', wfEscapeWikiText( $name ) ],
+ 'invalidchangeset'
+ );
+ }
+ $cdbPath = MessageChangeStorage::getCdbPath( $name );
+
+ if ( !MessageChangeStorage::isModifiedSince( $cdbPath, $changesetModifiedTime ) ) {
+ // Changeset file has been modified since the time the page was generated.
+ $this->dieWithError( [ 'apierror-translate-changeset-modified' ] );
+ }
+
+ if ( $op === 'rename' ) {
+ if ( !isset( $params['renameMessageKey'] ) ) {
+ $this->dieWithError( [ 'apierror-missingparam', 'renameMessageKey' ] );
+ }
+ $keyToRename = $params['renameMessageKey'];
+ }
+
+ $sourceChanges = MessageChangeStorage::getGroupChanges( $cdbPath, $groupId );
+ if ( $sourceChanges->getAllModifications() === [] ) {
+ $this->dieWithError( [ 'apierror-translate-smg-nochanges' ] );
+ }
+
+ $group = MessageGroups::getGroup( $groupId );
+ if ( $group === null ) {
+ $this->dieWithError( 'apierror-translate-invalidgroup', 'invalidgroup' );
+ }
+
+ try {
+ if ( $op === 'rename' ) {
+ $this->handleRename(
+ $group, $sourceChanges, $msgKey, $keyToRename, $group->getSourceLanguage()
+ );
+ } elseif ( $op === 'new' ) {
+ $this->handleNew( $sourceChanges, $msgKey, $group->getSourceLanguage() );
+ } else {
+ $this->dieWithError(
+ [ 'apierror-translate-invalid-operation', wfEscapeWikiText( $op ),
+ wfEscapeWikiText( implode( '/', [ 'new' , 'rename' ] ) ) ],
+ 'invalidoperation'
+ );
+ }
+ } catch ( Exception $ex ) {
+ // Log necessary parameters and rethrow.
+ $data = [
+ 'op' => $op,
+ 'newMsgKey' => $msgKey,
+ 'msgKey' => $keyToRename,
+ 'groupId' => $group->getId(),
+ 'group' => $group->getLabel(),
+ 'groupSourceLang' => $group->getSourceLanguage(),
+ 'exception' => $ex
+ ];
+
+ error_log(
+ "Error while running: ManageMessageGroupsActionApi::execute. Inputs: \n" .
+ FormatJson::encode( $data, true )
+ );
+
+ throw $ex;
+ }
+
+ // Write the source changes back to file.
+ MessageChangeStorage::writeGroupChanges( $sourceChanges, $groupId, $cdbPath );
+
+ $this->getResult()->addValue( null, $this->getModuleName(), [
+ 'success' => 1
+ ] );
+ }
+
+ /** Handles rename requests */
+ protected function handleRename(
+ MessageGroup $group,
+ MessageSourceChange $sourceChanges,
+ string $msgKey,
+ string $keyToRename,
+ string $sourceLanguage
+ ): void {
+ $languages = $sourceChanges->getLanguages();
+
+ foreach ( $languages as $code ) {
+ $msgState = $renameMsgState = null;
+
+ $isSourceLang = $sourceLanguage === $code;
+ if ( $isSourceLang ) {
+ $this->handleSourceRename( $sourceChanges, $code, $msgKey, $keyToRename );
+ continue;
+ }
+
+ // Check for changes with the new key, then with the old key.
+ // If there are no changes, we won't find anything at all, and
+ // can skip this languageCode.
+ $msg = $sourceChanges->findMessage( $code, $msgKey, [
+ MessageSourceChange::ADDITION,
+ MessageSourceChange::RENAME
+ ], $msgState );
+
+ // This case will arise if the message key has been changed in the source
+ // language, but has not been modified in this language code.
+ // NOTE: We are also searching under deletions. This means that if the source
+ // language key is renamed, but one of the non source language keys is removed,
+ // renaming it will not remove the translation, but only rename it. This
+ // scenario is highly unlikely though.
+ $msg = $msg ?? $sourceChanges->findMessage( $code, $keyToRename, [
+ MessageSourceChange::DELETION,
+ MessageSourceChange::CHANGE,
+ MessageSourceChange::RENAME
+ ], $msgState );
+
+ if ( $msg === null ) {
+ continue;
+ }
+
+ // Check for the renamed message in the rename list, and deleted list.
+ $renameMsg = $sourceChanges->findMessage(
+ $code, $keyToRename, [ MessageSourceChange::RENAME, MessageSourceChange::DELETION ],
+ $renameMsgState
+ );
+
+ // content / msg will not be present if the message was deleted from the wiki or
+ // was for some reason unavailable during processing incoming changes. We're going
+ // to try and load it here again from the database. Very rare chance of this happening.
+ if ( $renameMsg === null || !isset( $renameMsg['content'] ) ) {
+ $title = Title::newFromText(
+ TranslateUtils::title( $keyToRename, $code, $group->getNamespace() ),
+ $group->getNamespace()
+ );
+
+ $renameContent = TranslateUtils::getContentForTitle( $title, true ) ?? '';
+
+ $renameMsg = [
+ 'key' => $keyToRename,
+ 'content' => $renameContent
+ ];
+
+ // If the message was found in changes, this will be set, otherwise set it
+ // to none
+ if ( $renameMsgState === null ) {
+ $renameMsgState = MessageSourceChange::NONE;
+ }
+ }
+
+ // Remove previous states
+ if ( $msgState === MessageSourceChange::RENAME ) {
+ $msgState = $sourceChanges->breakRename( $code, $msg['key'] );
+ } else {
+ $sourceChanges->removeBasedOnType( $code, [ $msg['key'] ], $msgState );
+ }
+
+ if ( $renameMsgState === MessageSourceChange::RENAME ) {
+ $renameMsgState = $sourceChanges->breakRename( $code, $renameMsg['key'] );
+ } elseif ( $renameMsgState !== MessageSourceChange::NONE ) {
+ $sourceChanges->removeBasedOnType( $code, [ $keyToRename ], $renameMsgState );
+ }
+
+ // This is done in case the key has not been renamed in the non-source language.
+ $msg['key'] = $msgKey;
+
+ // Add as rename
+ $stringComparator = new SimpleStringComparator();
+ $similarity = $stringComparator->getSimilarity(
+ $msg['content'],
+ $renameMsg['content']
+ );
+ $sourceChanges->addRename( $code, $msg, $renameMsg, $similarity );
+ $sourceChanges->setRenameState( $code, $msgKey, $msgState );
+ $sourceChanges->setRenameState( $code, $keyToRename, $renameMsgState );
+ }
+ }
+
+ protected function handleSourceRename(
+ MessageSourceChange $sourceChanges,
+ string $code,
+ string $msgKey,
+ string $keyToRename
+ ): void {
+ $msgState = $renameMsgState = null;
+
+ $msg = $sourceChanges->findMessage(
+ $code, $msgKey, [ MessageSourceChange::ADDITION, MessageSourceChange::RENAME ], $msgState
+ );
+
+ $renameMsg = $sourceChanges->findMessage(
+ $code,
+ $keyToRename,
+ [ MessageSourceChange::DELETION, MessageSourceChange::RENAME ],
+ $renameMsgState
+ );
+
+ if ( $msg === null || $renameMsg === null ) {
+ $this->dieWithError( 'apierror-translate-rename-key-invalid' );
+ }
+
+ if ( $msgState === MessageSourceChange::RENAME ) {
+ // @phan-suppress-next-line PhanTypeArraySuspiciousNullable T240141
+ $msgState = $sourceChanges->breakRename( $code, $msg['key'] );
+ }
+
+ if ( $renameMsgState === MessageSourceChange::RENAME ) {
+ // @phan-suppress-next-line PhanTypeArraySuspiciousNullable T240141
+ $renameMsgState = $sourceChanges->breakRename( $code, $renameMsg['key'] );
+ }
+
+ // Ensure that one of them is an ADDITION, and one is DELETION
+ if ( $msgState !== MessageSourceChange::ADDITION ||
+ $renameMsgState !== MessageSourceChange::DELETION ) {
+ $this->dieWithError( [
+ 'apierror-translate-rename-state-invalid',
+ wfEscapeWikiText( $msgState ), wfEscapeWikiText( $renameMsgState )
+ ] );
+ }
+
+ // Remove previous states
+ $sourceChanges->removeAdditions( $code, [ $msgKey ] );
+ $sourceChanges->removeDeletions( $code, [ $keyToRename ] );
+
+ // Add as rename
+ $stringComparator = new SimpleStringComparator();
+ $similarity = $stringComparator->getSimilarity(
+ // @phan-suppress-next-line PhanTypeArraySuspiciousNullable T240141
+ $msg['content'],
+ // @phan-suppress-next-line PhanTypeArraySuspiciousNullable T240141
+ $renameMsg['content']
+ );
+ $sourceChanges->addRename( $code, $msg, $renameMsg, $similarity );
+ }
+
+ /** Handles add message as new request */
+ protected function handleNew(
+ MessageSourceChange $sourceChanges,
+ string $msgKey,
+ string $sourceLang
+ ): void {
+ $msgState = null;
+ $languages = $sourceChanges->getLanguages();
+
+ foreach ( $languages as $code ) {
+ $msg = $sourceChanges->findMessage(
+ $code, $msgKey, [ MessageSourceChange::RENAME ], $msgState
+ );
+
+ if ( $code === $sourceLang && $msg === null ) {
+ $this->dieWithError( 'apierror-translate-addition-key-invalid' );
+ }
+
+ if ( $code === $sourceLang && $msgState !== MessageSourceChange::RENAME ) {
+ $this->dieWithError( 'apierror-translate-rename-msg-new' );
+ }
+
+ // For any other language, its possible for the message to be not found.
+ if ( $msg === null ) {
+ continue;
+ }
+
+ // breakRename will add the message back to its previous state, nothing more to do
+ $sourceChanges->breakRename( $code, $msg['key'] );
+ }
+ }
+
+ protected function getAllowedParams(): array {
+ return [
+ 'groupId' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_REQUIRED => true,
+ ],
+ 'renameMessageKey' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_REQUIRED => false,
+ ],
+ 'messageKey' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_REQUIRED => true,
+ ],
+ 'operation' => [
+ ParamValidator::PARAM_TYPE => [ 'rename', 'new' ],
+ ParamValidator::PARAM_ISMULTI => false,
+ ParamValidator::PARAM_REQUIRED => true,
+ ],
+ 'changesetName' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_DEFAULT => MessageChangeStorage::DEFAULT_NAME
+ ],
+ 'changesetModified' => [
+ ParamValidator::PARAM_TYPE => 'integer',
+ ParamValidator::PARAM_REQUIRED => true,
+ ]
+ ];
+ }
+
+ public function isInternal(): bool {
+ return true;
+ }
+
+ public function needsToken(): string {
+ return 'csrf';
+ }
+}
diff --git a/Translate/src/MessageGroupProcessing/MessageGroupReview.php b/Translate/src/MessageGroupProcessing/MessageGroupReview.php
new file mode 100644
index 00000000..5a43cfac
--- /dev/null
+++ b/Translate/src/MessageGroupProcessing/MessageGroupReview.php
@@ -0,0 +1,81 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageGroupProcessing;
+
+use ManualLogEntry;
+use MediaWiki\HookContainer\HookContainer;
+use MessageGroup;
+use SpecialPage;
+use User;
+use Wikimedia\Rdbms\ILoadBalancer;
+
+/**
+ * Provides methods to get and change the state of a message group
+ * @author Eugene Wang'ombe
+ * @since 2022.07
+ * @license GPL-2.0-or-later
+ */
+class MessageGroupReview {
+
+ /** @var HookContainer */
+ protected $hookContainer;
+ /** @var ILoadBalancer */
+ protected $loadBalancer;
+
+ public function __construct( ILoadBalancer $loadBalancer, HookContainer $hookContainer ) {
+ $this->loadBalancer = $loadBalancer;
+ $this->hookContainer = $hookContainer;
+ }
+
+ /** @return mixed|false — The value from the field, or false if nothing was found */
+ public function getState( MessageGroup $group, string $code ) {
+ $dbw = $this->loadBalancer->getMaintenanceConnectionRef( DB_PRIMARY );
+ $table = 'translate_groupreviews';
+
+ $field = 'tgr_state';
+ $conds = [
+ 'tgr_group' => $group->getId(),
+ 'tgr_lang' => $code
+ ];
+
+ return $dbw->selectField( $table, $field, $conds, __METHOD__ );
+ }
+
+ public function changeState( MessageGroup $group, string $code, string $newState, User $user ): bool {
+ $currentState = self::getState( $group, $code );
+ if ( $currentState === $newState ) {
+ return false;
+ }
+
+ $table = 'translate_groupreviews';
+ $index = [ 'tgr_group', 'tgr_lang' ];
+ $row = [
+ 'tgr_group' => $group->getId(),
+ 'tgr_lang' => $code,
+ 'tgr_state' => $newState,
+ ];
+ $dbw = $this->loadBalancer->getMaintenanceConnectionRef( DB_PRIMARY );
+ $dbw->replace( $table, [ $index ], $row, __METHOD__ );
+
+ $entry = new ManualLogEntry( 'translationreview', 'group' );
+ $entry->setPerformer( $user );
+ $entry->setTarget( SpecialPage::getTitleFor( 'Translate', $group->getId() ) );
+ // @todo
+ // $entry->setComment( $comment );
+ $entry->setParameters( [
+ '4::language' => $code,
+ '5::group-label' => $group->getLabel(),
+ '6::old-state' => $currentState,
+ '7::new-state' => $newState,
+ ] );
+
+ $logid = $entry->insert();
+ $entry->publish( $logid );
+
+ $this->hookContainer->run( 'TranslateEventMessageGroupStateChange',
+ [ $group, $code, $currentState, $newState ] );
+
+ return true;
+ }
+}
diff --git a/Translate/src/MessageGroupProcessing/MoveTranslatableBundleJob.php b/Translate/src/MessageGroupProcessing/MoveTranslatableBundleJob.php
new file mode 100644
index 00000000..18e9a7fa
--- /dev/null
+++ b/Translate/src/MessageGroupProcessing/MoveTranslatableBundleJob.php
@@ -0,0 +1,66 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageGroupProcessing;
+
+use Job;
+use MediaWiki\Extension\Translate\PageTranslation\TranslatableBundleMover;
+use MediaWiki\Extension\Translate\Services;
+use MediaWiki\MediaWikiServices;
+use Title;
+use User;
+
+/**
+ * Contains class with job for moving translation pages.
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @ingroup PageTranslation JobQueue
+ */
+class MoveTranslatableBundleJob extends Job {
+ /** @var TranslatableBundleMover */
+ private $bundleMover;
+
+ public static function newJob(
+ Title $source,
+ Title $target,
+ array $moves,
+ string $summary,
+ User $performer
+ ): self {
+ $params = [
+ 'source' => $source->getPrefixedText(),
+ 'target' => $target->getPrefixedText(),
+ 'moves' => $moves,
+ 'summary' => $summary,
+ 'performer' => $performer->getName(),
+ ];
+
+ $self = new self( $target, $params );
+
+ return $self;
+ }
+
+ public function __construct( Title $title, array $params = [] ) {
+ parent::__construct( 'MoveTranslatableBundleJob', $title, $params );
+ $this->bundleMover = Services::getInstance()->getTranslatableBundleMover();
+ }
+
+ public function run() {
+ $sourceTitle = Title::newFromText( $this->params['source'] );
+ $targetTitle = Title::newFromText( $this->params['target'] );
+
+ $userFactory = MediaWikiServices::getInstance()->getUserFactory();
+ $performer = $userFactory->newFromName( $this->params['performer'] );
+
+ $this->bundleMover->moveSynchronously(
+ $sourceTitle,
+ $targetTitle,
+ $this->params['moves'],
+ $performer,
+ $this->params['summary']
+ );
+
+ return true;
+ }
+}
diff --git a/Translate/src/MessageGroupProcessing/PageDeleteLogger.php b/Translate/src/MessageGroupProcessing/PageDeleteLogger.php
new file mode 100644
index 00000000..c02a387a
--- /dev/null
+++ b/Translate/src/MessageGroupProcessing/PageDeleteLogger.php
@@ -0,0 +1,73 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageGroupProcessing;
+
+use ManualLogEntry;
+use Status;
+use Title;
+use User;
+
+/**
+ * Helper class for logging translatable bundle and translation page deletions
+ * @author Abijeet Patro
+ * @author Niklas Laxström
+ * @since 2022.05
+ * @license GPL-2.0-or-later
+ */
+class PageDeleteLogger {
+ /** @var string */
+ private $logType;
+ /** @var Title */
+ private $baseSourceTitle;
+
+ public function __construct( Title $baseSourceTitle, string $logType ) {
+ $this->baseSourceTitle = $baseSourceTitle;
+ $this->logType = $logType;
+ }
+
+ public function logBundleSuccess( User $performer, string $reason ): void {
+ $entry = $this->getManualLogEntry( $this->logType, 'deletefok', $performer, $reason );
+ $logid = $entry->insert();
+ $entry->publish( $logid );
+ }
+
+ public function logPageSuccess( User $performer, string $reason ): void {
+ $entry = $this->getManualLogEntry( $this->logType, 'deletelok', $performer, $reason );
+ $logid = $entry->insert();
+ $entry->publish( $logid );
+ }
+
+ public function logBundleError( User $performer, string $reason, Status $error ): void {
+ $entry = $this->getManualLogEntry( $this->logType, 'deletefnok', $performer, $reason );
+ $this->publishError( $entry, $error );
+ }
+
+ public function logPageError( User $performer, string $reason, Status $error ): void {
+ $entry = $this->getManualLogEntry( $this->logType, 'deletelnok', $performer, $reason );
+ $this->publishError( $entry, $error );
+ }
+
+ private function publishError( ManualLogEntry $entry, Status $error ): void {
+ $entry->setParameters( [
+ 'target' => $this->baseSourceTitle->getPrefixedText(),
+ 'error' => $error->getErrorsArray(),
+ ] );
+ $logid = $entry->insert();
+ $entry->publish( $logid );
+ }
+
+ private function getManualLogEntry(
+ string $logType, string $logKey, User $performer, string $reason
+ ): ManualLogEntry {
+ $entry = new ManualLogEntry( $logType, $logKey );
+ $entry->setPerformer( $performer );
+ $entry->setTarget( $this->baseSourceTitle );
+ $entry->setParameters( [
+ 'target' => $this->baseSourceTitle->getPrefixedText(),
+ ] );
+ $entry->setComment( $reason );
+
+ return $entry;
+ }
+}
diff --git a/Translate/src/MessageGroupProcessing/PageMoveLogger.php b/Translate/src/MessageGroupProcessing/PageMoveLogger.php
new file mode 100644
index 00000000..16368a4a
--- /dev/null
+++ b/Translate/src/MessageGroupProcessing/PageMoveLogger.php
@@ -0,0 +1,49 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageGroupProcessing;
+
+use ManualLogEntry;
+use Status;
+use Title;
+use User;
+
+/**
+ * Helper class for logging translatable bundle moves
+ * @author Abijeet Patro
+ * @author Niklas Laxström
+ * @since 2022.03
+ * @license GPL-2.0-or-later
+ */
+class PageMoveLogger {
+ /** @var string */
+ private $logType;
+ /** @var Title */
+ private $baseSourceTitle;
+
+ public function __construct( Title $baseSourceTitle, string $logType ) {
+ $this->baseSourceTitle = $baseSourceTitle;
+ $this->logType = $logType;
+ }
+
+ public function logSuccess( User $performer, Title $target ): void {
+ $entry = new ManualLogEntry( $this->logType, 'moveok' );
+ $entry->setPerformer( $performer );
+ $entry->setTarget( $this->baseSourceTitle );
+ $entry->setParameters( [ 'target' => $target->getPrefixedText() ] );
+ $logid = $entry->insert();
+ $entry->publish( $logid );
+ }
+
+ public function logError( User $performer, Title $source, Title $target, Status $error ): void {
+ $entry = new ManualLogEntry( $this->logType, 'movenok' );
+ $entry->setPerformer( $performer );
+ $entry->setTarget( $source );
+ $entry->setParameters( [
+ 'target' => $target->getPrefixedText(),
+ 'error' => $error->getErrorsArray(),
+ ] );
+ $logid = $entry->insert();
+ $entry->publish( $logid );
+ }
+}
diff --git a/Translate/src/MessageGroupProcessing/QueryManageMessageGroupsActionApi.php b/Translate/src/MessageGroupProcessing/QueryManageMessageGroupsActionApi.php
new file mode 100644
index 00000000..41d6bf3f
--- /dev/null
+++ b/Translate/src/MessageGroupProcessing/QueryManageMessageGroupsActionApi.php
@@ -0,0 +1,144 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageGroupProcessing;
+
+use ApiQuery;
+use ApiQueryBase;
+use MediaWiki\Extension\Translate\MessageSync\MessageSourceChange;
+use MediaWiki\Extension\Translate\Utilities\StringComparators\SimpleStringComparator;
+use MessageChangeStorage;
+use MessageGroups;
+use Title;
+use TranslateUtils;
+use Wikimedia\ParamValidator\ParamValidator;
+
+/**
+ * API module for querying message group changes.
+ * @author Abijeet Patro
+ * @since 2019.10
+ * @license GPL-2.0-or-later
+ * @ingroup API TranslateAPI
+ */
+class QueryManageMessageGroupsActionApi extends ApiQueryBase {
+ private const RIGHT = 'translate-manage';
+
+ public function __construct( ApiQuery $query, string $moduleName ) {
+ parent::__construct( $query, $moduleName, 'mmg' );
+ }
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+ $groupId = $params['groupId'];
+ $msgKey = $params['messageKey'];
+ $name = $params['changesetName'] ?? MessageChangeStorage::DEFAULT_NAME;
+
+ $user = $this->getUser();
+ $allowed = $user->isAllowed( self::RIGHT );
+
+ if ( !$allowed ) {
+ $this->dieWithError( 'apierror-permissiondenied-generic', 'permissiondenied' );
+ }
+
+ $group = MessageGroups::getGroup( $groupId );
+ if ( !$group ) {
+ $this->dieWithError( 'apierror-translate-invalidgroup', 'invalidgroup' );
+ }
+
+ if ( !MessageChangeStorage::isValidCdbName( $name ) ) {
+ $this->dieWithError(
+ [ 'apierror-translate-invalid-changeset-name', wfEscapeWikiText( $name ) ],
+ 'invalidchangeset'
+ );
+ }
+ $cdbPath = MessageChangeStorage::getCdbPath( $name );
+
+ $sourceChanges = MessageChangeStorage::getGroupChanges( $cdbPath, $groupId );
+
+ if ( $sourceChanges->getAllModifications() === [] ) {
+ $this->dieWithError( [ 'apierror-translate-smg-nochanges' ] );
+ }
+
+ $messages = $this->getPossibleRenames(
+ $sourceChanges, $group->getNamespace(), $msgKey, $group->getSourceLanguage()
+ );
+
+ $result = $this->getResult();
+ $result->addValue( [ 'query', $this->getModuleName() ], null, $messages );
+ }
+
+ /** Fetches the messages that can be used as possible renames for a given message. */
+ protected function getPossibleRenames(
+ MessageSourceChange $sourceChanges,
+ int $groupNamespace,
+ string $msgKey,
+ string $languageCode
+ ): array {
+ $deletions = $sourceChanges->getDeletions( $languageCode );
+ $targetMsg = $sourceChanges->findMessage(
+ $languageCode, $msgKey, [ MessageSourceChange::ADDITION, MessageSourceChange::RENAME ]
+ );
+ $stringComparator = new SimpleStringComparator();
+ $renameList = [];
+
+ // compare deleted messages with the target message and get the similarity.
+ foreach ( $deletions as $deletion ) {
+ if ( $deletion['content'] === null ) {
+ continue;
+ }
+
+ $similarity = $stringComparator->getSimilarity(
+ $deletion['content'],
+ // @phan-suppress-next-line PhanTypeArraySuspiciousNullable
+ $targetMsg['content']
+ );
+
+ $title = Title::makeTitle(
+ $groupNamespace,
+ TranslateUtils::title( $deletion['key'], $languageCode, $groupNamespace )
+ );
+
+ $renameList[] = [
+ 'key' => $deletion['key'],
+ 'content' => $deletion['content'],
+ 'similarity' => $similarity,
+ 'link' => $title->getFullURL(),
+ 'title' => $title->getPrefixedText()
+ ];
+ }
+
+ // sort them based on similarity
+ usort( $renameList, static function ( $a, $b ) {
+ return -( $a['similarity'] <=> $b['similarity'] );
+ } );
+
+ return $renameList;
+ }
+
+ protected function getAllowedParams(): array {
+ $params = parent::getAllowedParams();
+ $params['groupId'] = [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_REQUIRED => true,
+ ];
+
+ $params['messageKey'] = [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_REQUIRED => true,
+ ];
+
+ $params['changesetName'] = [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_DEFAULT => MessageChangeStorage::DEFAULT_NAME
+ ];
+
+ return $params;
+ }
+
+ protected function getExamplesMessages(): array {
+ return [
+ 'action=query&meta=managemessagegroup&mmggroupId=hello
+ &mmgchangesetName=default&mmgmessageKey=world' => 'apihelp-query+managemessagegroups-example-1',
+ ];
+ }
+}
diff --git a/Translate/src/MessageGroupProcessing/QueryMessageGroupsActionApi.php b/Translate/src/MessageGroupProcessing/QueryMessageGroupsActionApi.php
new file mode 100644
index 00000000..0a9bbefd
--- /dev/null
+++ b/Translate/src/MessageGroupProcessing/QueryMessageGroupsActionApi.php
@@ -0,0 +1,341 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageGroupProcessing;
+
+use AggregateMessageGroup;
+use ApiQuery;
+use ApiQueryBase;
+use MediaWiki\Extension\Translate\MessageProcessing\StringMatcher;
+use MediaWiki\HookContainer\HookContainer;
+use MessageGroup;
+use MessageGroups;
+use TranslateMetadata;
+use TranslateUtils;
+use Wikimedia\ParamValidator\ParamValidator;
+use WikiPageMessageGroup;
+
+/**
+ * Api module for querying MessageGroups.
+ * @author Niklas Laxström
+ * @author Harry Burt
+ * @copyright Copyright © 2012-2013, Harry Burt
+ * @license GPL-2.0-or-later
+ * @ingroup API TranslateAPI
+ */
+class QueryMessageGroupsActionApi extends ApiQueryBase {
+ /** @var HookContainer */
+ private $hookContainer;
+
+ public function __construct(
+ ApiQuery $query,
+ string $moduleName,
+ HookContainer $hookContainer
+ ) {
+ parent::__construct( $query, $moduleName, 'mg' );
+ $this->hookContainer = $hookContainer;
+ }
+
+ public function execute(): void {
+ $params = $this->extractRequestParams();
+ $filter = $params['filter'];
+
+ $groups = [];
+ $props = array_flip( $params['prop'] );
+
+ $needsMetadata = isset( $props['prioritylangs'] ) || isset( $props['priorityforce'] );
+
+ // Parameter root as all for all pages subgroups
+ if ( $params['root'] === 'all' ) {
+ $allGroups = MessageGroups::getAllGroups();
+ foreach ( $allGroups as $id => $group ) {
+ if ( $group instanceof WikiPageMessageGroup ) {
+ $groups[$id] = $group;
+ }
+ }
+ } elseif ( $params['format'] === 'flat' ) {
+ if ( $params['root'] !== '' ) {
+ $group = MessageGroups::getGroup( $params['root'] );
+ if ( $group ) {
+ $groups[$params['root']] = $group;
+ }
+ } else {
+ $groups = MessageGroups::getAllGroups();
+ usort( $groups, [ 'MessageGroups', 'groupLabelSort' ] );
+ }
+ TranslateMetadata::preloadGroups( array_keys( $groups ), __METHOD__ );
+ } elseif ( $params['root'] !== '' ) {
+ // format=tree from now on, as it is the only other valid option
+ $group = MessageGroups::getGroup( $params['root'] );
+ if ( $group instanceof AggregateMessageGroup ) {
+ $childIds = [];
+ $groups = MessageGroups::subGroups( $group, $childIds );
+ // The parent group is the first, ignore it
+ array_shift( $groups );
+ }
+ } else {
+ $groups = MessageGroups::getGroupStructure();
+ }
+
+ if ( $needsMetadata && $groups ) {
+ TranslateMetadata::preloadGroups( array_keys( $groups ), __METHOD__ );
+ }
+
+ if ( $params['root'] === '' ) {
+ $dynamicGroups = [];
+ foreach ( array_keys( MessageGroups::getDynamicGroups() ) as $id ) {
+ $dynamicGroups[$id] = MessageGroups::getGroup( $id );
+ }
+ // Have dynamic groups appear first in the list
+ $groups = $dynamicGroups + $groups;
+ }
+ '@phan-var (MessageGroup|array)[] $groups';
+
+ // Do not list the sandbox group. The code that knows it
+ // exists can access it directly.
+ if ( isset( $groups['!sandbox'] ) ) {
+ unset( $groups['!sandbox'] );
+ }
+
+ $result = $this->getResult();
+ $matcher = new StringMatcher( '', $filter );
+ /** @var MessageGroup|array $mixed */
+ foreach ( $groups as $mixed ) {
+ // array when Format = tree
+ $group = is_array( $mixed ) ? reset( $mixed ) : $mixed;
+ if ( $filter !== [] && !$matcher->matches( $group->getId() ) ) {
+ continue;
+ }
+
+ if (
+ $params['languageFilter'] !== '' &&
+ TranslateMetadata::isExcluded( $group->getId(), $params['languageFilter'] )
+ ) {
+ continue;
+ }
+
+ $a = $this->formatGroup( $mixed, $props );
+
+ $result->setIndexedTagName( $a, 'group' );
+
+ // @todo Add a continue?
+ $fit = $result->addValue( [ 'query', $this->getModuleName() ], null, $a );
+ if ( !$fit ) {
+ // Even if we're not going to give a continue, no point carrying on
+ // if the result is full
+ break;
+ }
+ }
+
+ $result->addIndexedTagName( [ 'query', $this->getModuleName() ], 'group' );
+ }
+
+ /**
+ * @param array|MessageGroup $mixed
+ * @param array $props List of props as the array keys
+ */
+ protected function formatGroup( $mixed, array $props, int $depth = 0 ): array {
+ $params = $this->extractRequestParams();
+ $context = $this->getContext();
+
+ // Default
+ $g = $mixed;
+ $subgroups = [];
+
+ // Format = tree and has subgroups
+ if ( is_array( $mixed ) ) {
+ $g = array_shift( $mixed );
+ $subgroups = $mixed;
+ }
+
+ $a = [];
+
+ $groupId = $g->getId();
+
+ if ( isset( $props['id'] ) ) {
+ $a['id'] = $groupId;
+ }
+
+ if ( isset( $props['label'] ) ) {
+ $a['label'] = $g->getLabel( $context );
+ }
+
+ if ( isset( $props['description'] ) ) {
+ $a['description'] = $g->getDescription( $context );
+ }
+
+ if ( isset( $props['class'] ) ) {
+ $a['class'] = get_class( $g );
+ }
+
+ if ( isset( $props['namespace'] ) ) {
+ $a['namespace'] = $g->getNamespace();
+ }
+
+ if ( isset( $props['exists'] ) ) {
+ $a['exists'] = $g->exists();
+ }
+
+ if ( isset( $props['icon'] ) ) {
+ $formats = TranslateUtils::getIcon( $g, $params['iconsize'] );
+ if ( $formats ) {
+ $a['icon'] = $formats;
+ }
+ }
+
+ if ( isset( $props['priority'] ) ) {
+ $priority = MessageGroups::getPriority( $g );
+ $a['priority'] = $priority ?: 'default';
+ }
+
+ if ( isset( $props['prioritylangs'] ) ) {
+ $prioritylangs = TranslateMetadata::get( $groupId, 'prioritylangs' );
+ $a['prioritylangs'] = $prioritylangs ? explode( ',', $prioritylangs ) : false;
+ }
+
+ if ( isset( $props['priorityforce'] ) ) {
+ $a['priorityforce'] = ( TranslateMetadata::get( $groupId, 'priorityforce' ) === 'on' );
+ }
+
+ if ( isset( $props['workflowstates'] ) ) {
+ $a['workflowstates'] = $this->getWorkflowStates( $g );
+ }
+
+ if ( isset( $props['sourcelanguage'] ) ) {
+ $a['sourcelanguage'] = $g->getSourceLanguage();
+ }
+
+ $this->hookContainer->run(
+ 'TranslateProcessAPIMessageGroupsProperties',
+ [ &$a, $props, $params, $g ]
+ );
+
+ // Depth only applies to tree format
+ if ( $depth >= $params['depth'] && $params['format'] === 'tree' ) {
+ $a['groupcount'] = count( $subgroups );
+
+ // Prevent going further down in the three
+ return $a;
+ }
+
+ // Always empty array for flat format, only sometimes for tree format
+ if ( $subgroups !== [] ) {
+ foreach ( $subgroups as $sg ) {
+ $a['groups'][] = $this->formatGroup( $sg, $props );
+ }
+ $result = $this->getResult();
+ $result->setIndexedTagName( $a['groups'], 'group' );
+ }
+
+ return $a;
+ }
+
+ /**
+ * Get the workflow states applicable to the given message group
+ * @return bool|array Associative array with states as key and localized state
+ * labels as values
+ */
+ private function getWorkflowStates( MessageGroup $group ) {
+ if ( MessageGroups::isDynamic( $group ) ) {
+ return false;
+ }
+
+ $stateConfig = $group->getMessageGroupStates()->getStates();
+
+ if ( !is_array( $stateConfig ) || $stateConfig === [] ) {
+ return false;
+ }
+
+ $user = $this->getUser();
+
+ foreach ( $stateConfig as $state => $config ) {
+ if ( is_array( $config ) ) {
+ // Check if user is allowed to change states generally
+ $allowed = $user->isAllowed( 'translate-groupreview' );
+ // Check further restrictions
+ if ( $allowed && isset( $config['right'] ) ) {
+ $allowed = $user->isAllowed( $config['right'] );
+ }
+
+ if ( $allowed ) {
+ $stateConfig[$state]['canchange'] = 1;
+ }
+
+ $stateConfig[$state]['name'] =
+ $this->msg( "translate-workflow-state-$state" )->text();
+ }
+ }
+
+ return $stateConfig;
+ }
+
+ protected function getAllowedParams(): array {
+ $allowedParams = [
+ 'depth' => [
+ ParamValidator::PARAM_TYPE => 'integer',
+ ParamValidator::PARAM_DEFAULT => 100,
+ ],
+ 'filter' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_DEFAULT => '',
+ ParamValidator::PARAM_ISMULTI => true,
+ ],
+ 'format' => [
+ ParamValidator::PARAM_TYPE => [ 'flat', 'tree' ],
+ ParamValidator::PARAM_DEFAULT => 'flat',
+ ],
+ 'iconsize' => [
+ ParamValidator::PARAM_TYPE => 'integer',
+ ParamValidator::PARAM_DEFAULT => 64,
+ ],
+ 'prop' => [
+ ParamValidator::PARAM_TYPE => array_keys( $this->getPropertyList() ),
+ ParamValidator::PARAM_DEFAULT => 'id|label|description|class|exists',
+ ParamValidator::PARAM_ISMULTI => true,
+ ],
+ 'root' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_DEFAULT => '',
+ ],
+ 'languageFilter' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_DEFAULT => '',
+ ]
+ ];
+ $this->hookContainer->run( 'TranslateGetAPIMessageGroupsParameterList', [ &$allowedParams ] );
+
+ return $allowedParams;
+ }
+
+ /**
+ * Returns an array of properties and their descriptions. Descriptions are ignored.
+ * Descriptions come from apihelp-query+messagegroups-param-prop and that is not
+ * extensible.
+ */
+ private function getPropertyList(): array {
+ $properties = array_flip( [
+ 'id',
+ 'label',
+ 'description',
+ 'class',
+ 'namespace',
+ 'exists',
+ 'icon',
+ 'priority',
+ 'prioritylangs',
+ 'priorityforce',
+ 'workflowstates',
+ 'sourcelanguage'
+ ] );
+
+ $this->hookContainer->run( 'TranslateGetAPIMessageGroupsPropertyDescs', [ &$properties ] );
+
+ return $properties;
+ }
+
+ protected function getExamplesMessages(): array {
+ return [
+ 'action=query&meta=messagegroups' => 'apihelp-query+messagegroups-example-1',
+ ];
+ }
+}
diff --git a/Translate/src/MessageGroupProcessing/RevTagStore.php b/Translate/src/MessageGroupProcessing/RevTagStore.php
new file mode 100644
index 00000000..503be8aa
--- /dev/null
+++ b/Translate/src/MessageGroupProcessing/RevTagStore.php
@@ -0,0 +1,149 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageGroupProcessing;
+
+use MediaWiki\Page\PageIdentity;
+use TranslateUtils;
+
+/**
+ * Class to manage revision tags for translatable bundles.
+ * @author Abijeet Patro
+ * @author Niklas Laxström
+ * @since 2022.04
+ * @license GPL-2.0-or-later
+ */
+class RevTagStore {
+ /** Indicates that a translation is fuzzy (outdated or not passing validation). */
+ public const FUZZY_TAG = 'fuzzy';
+ /** Stores the revision id of the source text which was translated. Used for showing
+ * diffs for outdated messages.
+ */
+ public const TRANSVER_PROP = 'tp:transver';
+ /** Indicates a revision of a page that can be marked for translation. */
+ public const TP_MARK_TAG = 'tp:mark';
+ /** Indicates a revision of a translatable page that is marked for translation. */
+ public const TP_READY_TAG = 'tp:tag';
+ /** Indicates a revision of a page that is a valid message bundle. */
+ public const MB_VALID_TAG = 'mb:valid';
+
+ // TODO: Convert to a normal member variable once RevTagStore is a service.
+ /** @var array */
+ private static $tagCache = [];
+
+ /** Add tag for the given revisionId, while deleting it from others */
+ public function replaceTag(
+ PageIdentity $identity,
+ string $tag,
+ int $revisionId,
+ ?array $value = null
+ ): void {
+ if ( !$identity->exists() ) {
+ return;
+ }
+
+ $articleId = $identity->getId();
+
+ $dbw = wfGetDB( DB_PRIMARY );
+ $conds = [
+ 'rt_page' => $articleId,
+ 'rt_type' => $tag
+ ];
+ $dbw->delete( 'revtag', $conds, __METHOD__ );
+
+ if ( $value !== null ) {
+ $conds['rt_value'] = serialize( implode( '|', $value ) );
+ }
+
+ $conds['rt_revision'] = $revisionId;
+ $dbw->insert( 'revtag', $conds, __METHOD__ );
+
+ self::$tagCache[$articleId][$tag] = $revisionId;
+ }
+
+ public function getLatestRevisionWithTag( PageIdentity $identity, string $tag ): ?int {
+ $response = $this->getLatestRevisionsForTags( $identity, $tag );
+ return $response[$tag] ?? null;
+ }
+
+ /** @return null|int[] */
+ public function getLatestRevisionsForTags( PageIdentity $identity, string ...$tags ): ?array {
+ if ( !$identity->exists() ) {
+ return null;
+ }
+
+ $articleId = $identity->getId();
+
+ $response = [];
+ $remainingTags = [];
+
+ // ATTENTION: Cache should only be updated on POST requests.
+ foreach ( $tags as $tag ) {
+ if ( isset( self::$tagCache[$articleId][$tag] ) ) {
+ $response[$tag] = self::$tagCache[$articleId][$tag];
+ } else {
+ $remainingTags[] = $tag;
+ }
+ }
+
+ if ( !$remainingTags ) {
+ // All tags were available in the cache, no need to run any queries.
+ return $response;
+ }
+
+ $dbr = TranslateUtils::getSafeReadDB();
+ $vars = [ 'MAX(rt_revision) AS rt_revision', 'rt_type' ];
+ $conds = [
+ 'rt_page' => $articleId,
+ 'rt_type' => $remainingTags
+ ];
+
+ $options = [ 'GROUP BY' => [ 'rt_type' ] ];
+ $results = $dbr->select( 'revtag', $vars, $conds, __METHOD__, $options );
+
+ foreach ( $results as $row ) {
+ $response[$row->rt_type] = (int)$row->rt_revision;
+ }
+
+ return $response;
+ }
+
+ public function removeTags( PageIdentity $identity, string ...$tag ): void {
+ if ( !$identity->exists() ) {
+ return;
+ }
+
+ $articleId = $identity->getId();
+
+ $dbw = wfGetDB( DB_PRIMARY );
+ $conds = [
+ 'rt_page' => $articleId,
+ 'rt_type' => $tag,
+ ];
+ $dbw->delete( 'revtag', $conds, __METHOD__ );
+
+ unset( self::$tagCache[$articleId] );
+ }
+
+ /** Get a list of page ids where the latest revision is either tagged or marked */
+ public static function getTranslatableBundleIds( string ...$revTags ): array {
+ $dbr = TranslateUtils::getSafeReadDB();
+
+ $tables = [ 'revtag', 'page' ];
+ $fields = 'rt_page';
+ $conds = [
+ 'rt_page = page_id',
+ 'rt_revision = page_latest',
+ 'rt_type' => $revTags,
+ ];
+ $options = [ 'GROUP BY' => 'rt_page' ];
+
+ $res = $dbr->select( $tables, $fields, $conds, __METHOD__, $options );
+ $results = [];
+ foreach ( $res as $row ) {
+ $results[] = (int)$row->rt_page;
+ }
+
+ return $results;
+ }
+}
diff --git a/Translate/src/MessageGroupProcessing/SubpageListBuilder.php b/Translate/src/MessageGroupProcessing/SubpageListBuilder.php
new file mode 100644
index 00000000..3ab2ccb3
--- /dev/null
+++ b/Translate/src/MessageGroupProcessing/SubpageListBuilder.php
@@ -0,0 +1,159 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageGroupProcessing;
+
+use MediaWiki\Cache\LinkBatchFactory;
+use Title;
+use TranslateUtils;
+
+/**
+ * Generates list of subpages for the translatable bundle that can be
+ * moved or deleted
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2022.04
+ */
+class SubpageListBuilder {
+ /** @var TranslatableBundleFactory */
+ private $bundleFactory;
+ /** @var LinkBatchFactory */
+ private $linkBatchFactory;
+
+ public function __construct(
+ TranslatableBundleFactory $bundleFactory,
+ LinkBatchFactory $linkBatchFactory
+ ) {
+ $this->bundleFactory = $bundleFactory;
+ $this->linkBatchFactory = $linkBatchFactory;
+ }
+
+ public function getSubpagesPerType( TranslatableBundle $bundle, bool $fetchTalkPages ): array {
+ $classifiedSubPages = $this->getEmptyResultSet();
+
+ $classifiedSubPages['translationPages'] = $bundle->getTranslationPages();
+ $classifiedSubPages['translationUnitPages'] = $bundle->getTranslationUnitPages();
+
+ // It's possible that subpages may not be allowed and getSubpages will return an
+ // empty array but that's not a problem.
+ $allSubpages = $bundle->getTitle()->getSubpages();
+
+ // Index the subpages
+ $allSubpagesIndexed = [];
+ foreach ( $allSubpages as $page ) {
+ $allSubpagesIndexed[ $page->getPrefixedDBkey() ] = $page;
+ }
+
+ // Remove translation pages from subpages
+ foreach ( $classifiedSubPages[ 'translationPages' ] as $translationPage ) {
+ if ( isset( $allSubpagesIndexed[ $translationPage->getPrefixedDBkey() ] ) ) {
+ unset( $allSubpagesIndexed[ $translationPage->getPrefixedDBkey() ] );
+ }
+ }
+
+ // Remove subpages that are translatable bundles
+ foreach ( $allSubpagesIndexed as $index => $subpage ) {
+ if ( $this->bundleFactory->getBundle( $subpage ) ) {
+ $classifiedSubPages['translatableSubpages'][] = $subpage;
+ unset( $allSubpagesIndexed[$index] );
+ }
+ }
+
+ // Remove translation pages for translatable pages found
+ $allSubpagesIndexed = $this->filterOtherTranslationPages(
+ $allSubpagesIndexed, $classifiedSubPages['translatableSubpages']
+ );
+
+ $classifiedSubPages['normalSubpages'] = $allSubpagesIndexed;
+
+ if ( $fetchTalkPages && !$bundle->getTitle()->isTalkPage() ) {
+ // We don't fetch talk pages for translatable subpages
+ $talkPages = $this->getTalkPages(
+ array_merge(
+ [ $bundle->getTitle() ],
+ $classifiedSubPages['translationPages'],
+ $classifiedSubPages['translationUnitPages'],
+ $classifiedSubPages['normalSubpages']
+ )
+ );
+
+ $translatableTalkPages = [];
+ foreach ( $talkPages as $key => $talkPage ) {
+ if ( $talkPage === null ) {
+ continue;
+ }
+
+ if ( $this->bundleFactory->getBundle( $talkPage ) ) {
+ $translatableTalkPages[] = $talkPage;
+ unset( $talkPages[$key] );
+ }
+ }
+
+ $classifiedSubPages['talkPages'] = $talkPages;
+ $classifiedSubPages['translatableTalkPages'] = $translatableTalkPages;
+ }
+
+ return $classifiedSubPages;
+ }
+
+ public function getEmptyResultSet(): array {
+ return [
+ 'translationPages' => [],
+ 'translatableSubpages' => [],
+ 'translationUnitPages' => [],
+ 'normalSubpages' => [],
+ 'talkPages' => [],
+ 'translatableTalkPages' => []
+ ];
+ }
+
+ /**
+ * Remove translation pages for translatable pages from the list of all pages
+ * @param Title[] $allPages
+ * @param Title[] $translatablePages
+ */
+ private function filterOtherTranslationPages( array $allPages, array $translatablePages ): array {
+ $mappedTranslatablePages = [];
+ foreach ( $translatablePages as $index => $page ) {
+ $mappedTranslatablePages[ $page->getText() ] = $index;
+ }
+
+ foreach ( $allPages as $prefixedDbKeyTitle => $subpage ) {
+ [ $key, ] = TranslateUtils::figureMessage( $subpage->getText() );
+ if ( isset( $mappedTranslatablePages[ $key ] ) ) {
+ unset( $allPages[ $prefixedDbKeyTitle ] );
+ }
+ }
+
+ return $allPages;
+ }
+
+ /**
+ * To identify the talk pages, we first gather the possible talk pages into an array
+ * and then check that they exist. Title::exists perform a database check so we gather
+ * them into LinkBatch to reduce the performance impact.
+ * @param Title[] $pages
+ * @return Title[]
+ */
+ private function getTalkPages( array $pages ): array {
+ $lb = $this->linkBatchFactory->newLinkBatch();
+ $talkPageList = [];
+
+ foreach ( $pages as $page ) {
+ $talkPage = $page->getTalkPageIfDefined();
+ $talkPageList[ $page->getPrefixedDBkey() ] = $talkPage;
+ if ( $talkPage ) {
+ $lb->addObj( $talkPage );
+ }
+ }
+
+ $lb->setCaller( __METHOD__ )->execute();
+ foreach ( $talkPageList as $index => $talkPage ) {
+ if ( !$talkPage || !$talkPage->exists() ) {
+ $talkPageList[$index] = null;
+ }
+ }
+
+ return $talkPageList;
+ }
+}
diff --git a/Translate/src/MessageGroupProcessing/TranslatableBundle.php b/Translate/src/MessageGroupProcessing/TranslatableBundle.php
new file mode 100644
index 00000000..cab9bba4
--- /dev/null
+++ b/Translate/src/MessageGroupProcessing/TranslatableBundle.php
@@ -0,0 +1,95 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageGroupProcessing;
+
+use MessageHandle;
+use Title;
+
+/**
+ * Translatable bundle represents a message group where its translatable content is
+ * defined on a wiki page.
+ *
+ * This interface was created to support moving message bundles using the code developed for
+ * moving translatable pages.
+ *
+ * See also WikiMessageGroup which is not considered to be a translatable bundle.
+ * @author Abijeet Patro
+ * @author Niklas Laxström
+ * @since 2022.03
+ * @license GPL-2.0-or-later
+ */
+abstract class TranslatableBundle {
+ /** Return the title of the page where the translatable bundle is defined */
+ abstract public function getTitle(): Title;
+
+ /**
+ * Return the message group id for the bundle
+ * Note that the message group id may refer to a message group that does not exist.
+ */
+ abstract public function getMessageGroupId(): string;
+
+ /**
+ * Return the available translation pages for the bundle
+ * @see Translation page: https://www.mediawiki.org/wiki/Help:Extension:Translate/Glossary
+ * @return Title[]
+ */
+ abstract public function getTranslationPages(): array;
+
+ /**
+ * Return the available translation units for the bundle
+ * @see Translation unit: https://www.mediawiki.org/wiki/Help:Extension:Translate/Glossary
+ * @return Title[]
+ */
+ abstract public function getTranslationUnitPages( ?string $code = null ): array;
+
+ /** Check if this translatable bundle is moveable */
+ abstract public function isMoveable(): bool;
+
+ /** Check if this is a deletable translatable bundle */
+ abstract public function isDeletable(): bool;
+
+ protected function getTranslationUnitPagesByTitle( Title $title, ?string $code = null ): array {
+ $dbw = wfGetDB( DB_PRIMARY );
+
+ $base = $title->getPrefixedDBkey();
+ // Including the / used as separator
+ $baseLength = strlen( $base ) + 1;
+
+ if ( $code === null ) {
+ $like = $dbw->buildLike( "$base/", $dbw->anyString() );
+ } else {
+ $like = $dbw->buildLike( "$base/", $dbw->anyString(), "/$code" );
+ }
+
+ $fields = [ 'page_namespace', 'page_title' ];
+ $conds = [
+ 'page_namespace' => NS_TRANSLATIONS,
+ 'page_title ' . $like
+ ];
+ $res = $dbw->select( 'page', $fields, $conds, __METHOD__ );
+
+ // Only include pages which belong to this translatable page.
+ // Problematic cases are when pages Foo and Foo/bar are both
+ // translatable. Then when querying for Foo, we also get units
+ // belonging to Foo/bar.
+ $units = [];
+ foreach ( $res as $row ) {
+ $title = Title::newFromRow( $row );
+
+ // Strip the language code and the name of the
+ // translatable to get plain translation unit id
+ $handle = new MessageHandle( $title );
+ $key = substr( $handle->getKey(), $baseLength );
+ if ( strpos( $key, '/' ) !== false ) {
+ // Probably belongs to translatable subpage
+ continue;
+ }
+
+ // We have a match :)
+ $units[] = $title;
+ }
+
+ return $units;
+ }
+}
diff --git a/Translate/src/MessageGroupProcessing/TranslatableBundleFactory.php b/Translate/src/MessageGroupProcessing/TranslatableBundleFactory.php
new file mode 100644
index 00000000..0485fd5c
--- /dev/null
+++ b/Translate/src/MessageGroupProcessing/TranslatableBundleFactory.php
@@ -0,0 +1,93 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageGroupProcessing;
+
+use InvalidArgumentException;
+use MediaWiki\Extension\Translate\MessageBundleTranslation\MessageBundle;
+use MediaWiki\Extension\Translate\MessageBundleTranslation\MessageBundleStore;
+use MediaWiki\Extension\Translate\PageTranslation\TranslatablePage;
+use Title;
+
+/**
+ * Create instances of various classes based on the type of TranslatableBundle
+ * @author Abijeet Patro
+ * @author Niklas Laxström
+ * @since 2022.03
+ * @license GPL-2.0-or-later
+ */
+class TranslatableBundleFactory {
+ /** @var TranslatablePageStore */
+ private $translatablePageStore;
+ /** @var MessageBundleStore */
+ private $messageBundleStore;
+
+ public function __construct(
+ TranslatablePageStore $translatablePageStore,
+ MessageBundleStore $messageBundleStore
+ ) {
+ $this->translatablePageStore = $translatablePageStore;
+ $this->messageBundleStore = $messageBundleStore;
+ }
+
+ /** Returns a TranslatableBundle if Title is a valid translatable bundle else returns null */
+ public function getBundle( Title $title ): ?TranslatableBundle {
+ if ( TranslatablePage::isSourcePage( $title ) ) {
+ $translatablePage = TranslatablePage::newFromTitle( $title );
+ return $translatablePage;
+ } elseif ( MessageBundle::isSourcePage( $title ) ) {
+ $messageBundle = new MessageBundle( $title );
+ return $messageBundle;
+ }
+
+ return null;
+ }
+
+ /** Return a TranslatableBundle from the Title, throwing an error if it is not a TranslatableBundle */
+ public function getValidBundle( Title $title ): TranslatableBundle {
+ $bundle = $this->getBundle( $title );
+ if ( $bundle ) {
+ return $bundle;
+ }
+
+ throw new InvalidArgumentException( "{$title->getPrefixedText()} is not a TranslatableBundle" );
+ }
+
+ public function getBundleFromClass( Title $title, string $bundleType ): TranslatableBundle {
+ if ( $bundleType === MessageBundle::class ) {
+ return new MessageBundle( $title );
+ } else {
+ return TranslatablePage::newFromTitle( $title );
+ }
+ }
+
+ public function getPageMoveLogger( TranslatableBundle $bundle ): PageMoveLogger {
+ if ( $bundle instanceof TranslatablePage ) {
+ return new PageMoveLogger( $bundle->getTitle(), 'pagetranslation' );
+ } elseif ( $bundle instanceof MessageBundle ) {
+ return new PageMoveLogger( $bundle->getTitle(), 'messagebundle' );
+ }
+
+ throw new InvalidArgumentException( "Unknown TranslatableBundle type: " . get_class( $bundle ) );
+ }
+
+ public function getPageDeleteLogger( TranslatableBundle $bundle ): PageDeleteLogger {
+ if ( $bundle instanceof TranslatablePage ) {
+ return new PageDeleteLogger( $bundle->getTitle(), 'pagetranslation' );
+ } elseif ( $bundle instanceof MessageBundle ) {
+ return new PageDeleteLogger( $bundle->getTitle(), 'messagebundle' );
+ }
+
+ throw new InvalidArgumentException( "Unknown TranslatableBundle type: " . get_class( $bundle ) );
+ }
+
+ public function getStore( TranslatableBundle $bundle ): TranslatableBundleStore {
+ if ( $bundle instanceof TranslatablePage ) {
+ return $this->translatablePageStore;
+ } elseif ( $bundle instanceof MessageBundle ) {
+ return $this->messageBundleStore;
+ }
+
+ throw new InvalidArgumentException( "Unknown TranslatableBundle type: " . get_class( $bundle ) );
+ }
+}
diff --git a/Translate/src/MessageGroupProcessing/TranslatableBundleLogFormatter.php b/Translate/src/MessageGroupProcessing/TranslatableBundleLogFormatter.php
new file mode 100644
index 00000000..368c566d
--- /dev/null
+++ b/Translate/src/MessageGroupProcessing/TranslatableBundleLogFormatter.php
@@ -0,0 +1,110 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageGroupProcessing;
+
+use Linker;
+use LogFormatter;
+use MediaWiki\MediaWikiServices;
+use Message;
+use Title;
+use TranslateUtils;
+
+/**
+ * Class for formatting translatable bundle logs.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+class TranslatableBundleLogFormatter extends LogFormatter {
+ public function getMessageParameters(): array {
+ $params = parent::getMessageParameters();
+ $legacy = $this->entry->getParameters();
+
+ $type = $this->entry->getFullType();
+ switch ( $type ) {
+ case 'pagetranslation/mark':
+ $revision = $legacy['revision'];
+
+ $targetPage = $this->makePageLink(
+ $this->entry->getTarget(),
+ [ 'oldid' => $revision ]
+ );
+
+ $params[2] = Message::rawParam( $targetPage );
+ break;
+
+ case 'pagetranslation/moveok':
+ case 'pagetranslation/movenok':
+ case 'pagetranslation/deletefnok':
+ case 'pagetranslation/deletelnok':
+ case 'messagebundle/moveok':
+ case 'messagebundle/movenok':
+ $target = $legacy['target'];
+
+ $moveTarget = $this->makePageLink( Title::newFromText( $target ) );
+ $params[3] = Message::rawParam( $moveTarget );
+ break;
+
+ case 'pagetranslation/prioritylanguages':
+ $params[3] = $legacy['force'];
+ $languages = $legacy['languages'];
+ if ( $languages !== false ) {
+ $lang = $this->context->getLanguage();
+ $inLanguage = $lang->getCode();
+
+ $languages = array_map(
+ static function ( string $code ) use ( $inLanguage ): string {
+ return TranslateUtils::getLanguageName( trim( $code ), $inLanguage );
+ },
+ preg_split( '/,/', $languages, -1, PREG_SPLIT_NO_EMPTY )
+ );
+
+ $params[4] = $lang->listToText( $languages );
+ }
+ break;
+
+ case 'pagetranslation/associate':
+ case 'pagetranslation/dissociate':
+ $params[3] = $legacy['aggregategroup'];
+ break;
+ }
+
+ return $params;
+ }
+
+ public function getComment(): string {
+ $legacy = $this->entry->getParameters();
+ if ( isset( $legacy['reason'] ) ) {
+ if ( method_exists( MediaWikiServices::class, 'getCommentFormatter' ) ) {
+ $commentFormatter = MediaWikiServices::getInstance()->getCommentFormatter();
+ $comment = $commentFormatter->formatBlock( (string)$legacy['reason'] );
+ } else {
+ // < MW 1.38
+ $comment = Linker::commentBlock( (string)$legacy['reason'] );
+ }
+
+ // No hard coded spaces thanx
+ return ltrim( $comment );
+ }
+
+ return parent::getComment();
+ }
+
+ protected function getMessageKey(): string {
+ $key = parent::getMessageKey();
+ $type = $this->entry->getFullType();
+
+ // logentry-pagetranslation-prioritylanguages-unset
+ // logentry-pagetranslation-prioritylanguages-force
+ if ( $type === 'pagetranslation/prioritylanguages' ) {
+ $params = $this->getMessageParameters();
+ if ( !isset( $params[4] ) ) {
+ $key .= '-unset';
+ } elseif ( $params['3'] === 'on' ) {
+ $key .= '-force';
+ }
+ }
+
+ return $key;
+ }
+}
diff --git a/Translate/src/MessageGroupProcessing/TranslatableBundleStatus.php b/Translate/src/MessageGroupProcessing/TranslatableBundleStatus.php
new file mode 100644
index 00000000..42c1c0a2
--- /dev/null
+++ b/Translate/src/MessageGroupProcessing/TranslatableBundleStatus.php
@@ -0,0 +1,10 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageGroupProcessing;
+
+interface TranslatableBundleStatus {
+ public function getId(): int;
+
+ public function isEqual( int $status ): bool;
+}
diff --git a/Translate/src/MessageGroupProcessing/TranslatableBundleStatusStore.php b/Translate/src/MessageGroupProcessing/TranslatableBundleStatusStore.php
new file mode 100644
index 00000000..166de6dc
--- /dev/null
+++ b/Translate/src/MessageGroupProcessing/TranslatableBundleStatusStore.php
@@ -0,0 +1,110 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageGroupProcessing;
+
+use Collation;
+use InvalidArgumentException;
+use MediaWiki\Extension\Translate\MessageBundleTranslation\MessageBundle;
+use MediaWiki\Extension\Translate\PageTranslation\TranslatablePage;
+use Title;
+use Wikimedia\Rdbms\IDatabase;
+use Wikimedia\Rdbms\IMaintainableDatabase;
+
+/**
+ * Store service for looking up and storing status for translatable bundle status.
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2022.09
+ */
+class TranslatableBundleStatusStore {
+ private const TABLE_NAME = 'translate_translatable_bundles';
+ /** @var IDatabase */
+ private $database;
+ /** @var Collation */
+ private $collation;
+ /** @var IMaintainableDatabase */
+ private $dbMaintainance;
+ /** @var ?bool */
+ private $tableExists = null;
+
+ public function __construct(
+ IDatabase $database,
+ Collation $collation,
+ IMaintainableDatabase $dbMaintainance
+ ) {
+ $this->database = $database;
+ $this->collation = $collation;
+ $this->dbMaintainance = $dbMaintainance;
+ }
+
+ public function setStatus( Title $title, TranslatableBundleStatus $status, string $bundleType ): void {
+ if ( !$this->doesTableExist() ) {
+ return;
+ }
+
+ $sortKey = substr( $this->collation->getSortKey( $title->getPrefixedDBkey() ), 0, 255 );
+ $bundleTypeId = $this->getBundleTypeId( $bundleType );
+ $this->database->replace(
+ self::TABLE_NAME,
+ [ 'ttb_page_id' ],
+ [
+ 'ttb_page_id' => $title->getArticleID(),
+ 'ttb_type' => $bundleTypeId,
+ 'ttb_status' => $status->getId(),
+ 'ttb_sortkey' => $sortKey
+ ],
+ __METHOD__
+ );
+ }
+
+ /** Return all bundles in an array with key being page id, value being status */
+ public function getAllWithStatus(): array {
+ if ( !$this->doesTableExist() ) {
+ return [];
+ }
+
+ $resultSet = $this->database->newSelectQueryBuilder()
+ ->select( [ 'ttb_page_id' , 'ttb_status' ] )
+ ->from( self::TABLE_NAME )
+ ->fetchResultSet();
+
+ $result = [];
+ foreach ( $resultSet as $row ) {
+ $result[$row->ttb_page_id] = (int)$row->ttb_status;
+ }
+
+ return $result;
+ }
+
+ public function removeStatus( int ...$pageIds ): void {
+ if ( !$this->doesTableExist() ) {
+ return;
+ }
+
+ $this->database->delete(
+ self::TABLE_NAME,
+ [ 'ttb_page_id' => $pageIds ],
+ __METHOD__
+ );
+ }
+
+ private function getBundleTypeId( string $bundle ): int {
+ if ( $bundle === TranslatablePage::class ) {
+ return 1;
+ } elseif ( $bundle === MessageBundle::class ) {
+ return 2;
+ }
+
+ throw new InvalidArgumentException( "Unknown translatable bundle type: $bundle" );
+ }
+
+ /** TODO: Remove this check once table is available on Wikimedia sites that use Translate */
+ private function doesTableExist(): bool {
+ if ( $this->tableExists === null ) {
+ $this->tableExists = $this->dbMaintainance->tableExists( self::TABLE_NAME, __METHOD__ );
+ }
+
+ return $this->tableExists;
+ }
+}
diff --git a/Translate/src/MessageGroupProcessing/TranslatableBundleStore.php b/Translate/src/MessageGroupProcessing/TranslatableBundleStore.php
new file mode 100644
index 00000000..fddb32d9
--- /dev/null
+++ b/Translate/src/MessageGroupProcessing/TranslatableBundleStore.php
@@ -0,0 +1,22 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageGroupProcessing;
+
+use MediaWiki\Revision\RevisionRecord;
+use Title;
+
+/**
+ * Translatable bundle store manages bundles of certain type.
+ * @author Abijeet Patro
+ * @author Niklas Laxström
+ * @since 2022.03
+ * @license GPL-2.0-or-later
+ */
+interface TranslatableBundleStore {
+ public function move( Title $oldName, Title $newName ): void;
+
+ public function handleNullRevisionInsert( TranslatableBundle $bundle, RevisionRecord $revision ): void;
+
+ public function delete( Title $title ): void;
+}
diff --git a/Translate/src/MessageGroupProcessing/TranslatablePageStore.php b/Translate/src/MessageGroupProcessing/TranslatablePageStore.php
new file mode 100644
index 00000000..fd8bba59
--- /dev/null
+++ b/Translate/src/MessageGroupProcessing/TranslatablePageStore.php
@@ -0,0 +1,201 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageGroupProcessing;
+
+use AggregateMessageGroup;
+use DeferredUpdates;
+use InvalidArgumentException;
+use JobQueueGroup;
+use MediaWiki\Extension\Translate\PageTranslation\TranslatablePage;
+use MediaWiki\Extension\Translate\PageTranslation\UpdateTranslatablePageJob;
+use MediaWiki\Revision\RevisionRecord;
+use MessageGroups;
+use MessageIndex;
+use Title;
+use TranslateMetadata;
+use Wikimedia\Rdbms\ILoadBalancer;
+
+/**
+ * @author Abijeet Patro
+ * @author Niklas Laxström
+ * @since 2022.03
+ * @license GPL-2.0-or-later
+ */
+class TranslatablePageStore implements TranslatableBundleStore {
+ /** @var MessageIndex */
+ private $messageIndex;
+ /** @var JobQueueGroup */
+ private $jobQueue;
+ /** @var RevTagStore */
+ private $revTagStore;
+ /** @var ILoadBalancer */
+ private $loadBalancer;
+ /** @var TranslatableBundleStatusStore */
+ private $translatableBundleStatusStore;
+
+ public function __construct(
+ MessageIndex $messageIndex,
+ JobQueueGroup $jobQueue,
+ RevTagStore $revTagStore,
+ ILoadBalancer $loadBalancer,
+ TranslatableBundleStatusStore $translatableBundleStatusStore
+ ) {
+ $this->messageIndex = $messageIndex;
+ $this->jobQueue = $jobQueue;
+ $this->revTagStore = $revTagStore;
+ $this->loadBalancer = $loadBalancer;
+ $this->translatableBundleStatusStore = $translatableBundleStatusStore;
+ }
+
+ public function move( Title $oldName, Title $newName ): void {
+ $oldTranslatablePage = TranslatablePage::newFromTitle( $oldName );
+ $newTranslatablePage = TranslatablePage::newFromTitle( $newName );
+ $oldGroupId = $oldTranslatablePage->getMessageGroupId();
+ $newGroupId = $newTranslatablePage->getMessageGroupId();
+
+ TranslateMetadata::moveMetadata( $oldGroupId, $newGroupId, TranslatablePage::METADATA_KEYS );
+
+ $this->moveMetadata( $oldGroupId, $newGroupId );
+
+ TranslatablePage::clearSourcePageCache();
+
+ // Re-render the pages to get everything in sync
+ MessageGroups::singleton()->recache();
+ // Update message index now so that, when after this job the MoveTranslationUnits hook
+ // runs in deferred updates, it will not run MessageIndexRebuildJob (T175834).
+ $this->messageIndex->rebuild();
+
+ $job = UpdateTranslatablePageJob::newFromPage( TranslatablePage::newFromTitle( $newName ) );
+ $this->jobQueue->push( $job );
+ }
+
+ public function handleNullRevisionInsert( TranslatableBundle $bundle, RevisionRecord $revision ): void {
+ if ( !$bundle instanceof TranslatablePage ) {
+ throw new InvalidArgumentException(
+ 'Expected $bundle to be of type TranslatablePage, got ' . get_class( $bundle )
+ );
+ }
+
+ $this->revTagStore->replaceTag( $bundle->getTitle(), RevTagStore::TP_READY_TAG, $revision->getId() );
+ TranslatablePage::clearSourcePageCache();
+ }
+
+ /** Delete a translatable page */
+ public function delete( Title $title ): void {
+ $dbw = $this->loadBalancer->getConnection( DB_PRIMARY );
+ $dbw->delete( 'translate_sections', [ 'trs_page' => $title->getArticleID() ], __METHOD__ );
+
+ $this->unmark( $title );
+ }
+
+ /** Unmark a translatable page */
+ public function unmark( Title $title ): void {
+ $translatablePage = TranslatablePage::newFromTitle( $title );
+ $translatablePage->getTranslationPercentages();
+ foreach ( $translatablePage->getTranslationPages() as $page ) {
+ $page->invalidateCache();
+ }
+
+ $groupId = $translatablePage->getMessageGroupId();
+ TranslateMetadata::clearMetadata( $groupId, TranslatablePage::METADATA_KEYS );
+ $this->removeFromAggregateGroups( $groupId );
+
+ // Remove tags after all group related work is done in order to avoid breaking calls to
+ // TranslatablePage::getMessageGroup incase the group cache is not populated
+ $this->revTagStore->removeTags( $title, RevTagStore::TP_MARK_TAG, RevTagStore::TP_READY_TAG );
+ $this->translatableBundleStatusStore->removeStatus( $title->getArticleID() );
+
+ MessageGroups::singleton()->recache();
+ $this->messageIndex->rebuild();
+
+ TranslatablePage::clearSourcePageCache();
+ }
+
+ /** Queues an update for the status of the translatable page. Update is not done immediately. */
+ public function performStatusUpdate( Title $title ): void {
+ DeferredUpdates::addCallableUpdate(
+ function () use ( $title ) {
+ $this->updateStatus( $title );
+ }
+ );
+ }
+
+ /** @internal public only for testing. Use ::performStatusUpdate instead */
+ public function updateStatus( Title $title ): ?TranslatableBundleStatus {
+ $revTags = $this->revTagStore->getLatestRevisionsForTags(
+ $title,
+ RevTagStore::TP_MARK_TAG,
+ RevTagStore::TP_READY_TAG
+ );
+
+ $status = TranslatablePage::determineStatus(
+ $revTags[RevTagStore::TP_READY_TAG] ?? null,
+ $revTags[RevTagStore::TP_MARK_TAG] ?? null,
+ $title->getLatestRevID( Title::READ_LATEST )
+ );
+
+ if ( $status ) {
+ $this->translatableBundleStatusStore->setStatus(
+ $title, $status, TranslatablePage::class
+ );
+ }
+
+ return $status;
+ }
+
+ private function moveMetadata( string $oldGroupId, string $newGroupId ): void {
+ // Make the changes in aggregate groups metadata, if present in any of them.
+ $aggregateGroups = MessageGroups::getGroupsByType( AggregateMessageGroup::class );
+ TranslateMetadata::preloadGroups( array_keys( $aggregateGroups ), __METHOD__ );
+
+ foreach ( $aggregateGroups as $id => $group ) {
+ $subgroups = TranslateMetadata::get( $id, 'subgroups' );
+ if ( $subgroups === false ) {
+ continue;
+ }
+
+ $subgroups = explode( ',', $subgroups );
+ $subgroups = array_flip( $subgroups );
+ if ( isset( $subgroups[$oldGroupId] ) ) {
+ $subgroups[$newGroupId] = $subgroups[$oldGroupId];
+ unset( $subgroups[$oldGroupId] );
+ $subgroups = array_flip( $subgroups );
+ TranslateMetadata::set(
+ $group->getId(),
+ 'subgroups',
+ implode( ',', $subgroups )
+ );
+ }
+ }
+
+ // Move discouraged status
+ $priority = MessageGroups::getPriority( $oldGroupId );
+ if ( $priority !== '' ) {
+ MessageGroups::setPriority( $newGroupId, $priority );
+ MessageGroups::setPriority( $oldGroupId, '' );
+ }
+ }
+
+ private function removeFromAggregateGroups( string $groupId ): void {
+ // remove the page from aggregate groups, if present in any of them.
+ $aggregateGroups = MessageGroups::getGroupsByType( AggregateMessageGroup::class );
+ TranslateMetadata::preloadGroups( array_keys( $aggregateGroups ), __METHOD__ );
+ foreach ( $aggregateGroups as $group ) {
+ $subgroups = TranslateMetadata::get( $group->getId(), 'subgroups' );
+ if ( $subgroups !== false ) {
+ $subgroups = explode( ',', $subgroups );
+ $subgroups = array_flip( $subgroups );
+ if ( isset( $subgroups[$groupId] ) ) {
+ unset( $subgroups[$groupId] );
+ $subgroups = array_flip( $subgroups );
+ TranslateMetadata::set(
+ $group->getId(),
+ 'subgroups',
+ implode( ',', $subgroups )
+ );
+ }
+ }
+ }
+ }
+}
diff --git a/Translate/src/MessageLoading/QueryMessageCollectionActionApi.php b/Translate/src/MessageLoading/QueryMessageCollectionActionApi.php
new file mode 100644
index 00000000..cff8a1dc
--- /dev/null
+++ b/Translate/src/MessageLoading/QueryMessageCollectionActionApi.php
@@ -0,0 +1,330 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageLoading;
+
+use ApiBase;
+use ApiPageSet;
+use ApiQuery;
+use ApiQueryGeneratorBase;
+use ApiResult;
+use MediaWiki\Extension\Translate\Utilities\ConfigHelper;
+use MediaWiki\Languages\LanguageNameUtils;
+use MessageGroups;
+use MessageHandle;
+use MWException;
+use Title;
+use TMessage;
+use TranslateUtils;
+use Wikimedia\ParamValidator\ParamValidator;
+use Wikimedia\ParamValidator\TypeDef\IntegerDef;
+use Wikimedia\Rdbms\ILoadBalancer;
+
+/**
+ * Api module for querying MessageCollection.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @ingroup API TranslateAPI
+ */
+class QueryMessageCollectionActionApi extends ApiQueryGeneratorBase {
+ /** @var ConfigHelper */
+ private $configHelper;
+ /** @var LanguageNameUtils */
+ private $languageNameUtils;
+ /** @var ILoadBalancer */
+ private $loadBalancer;
+
+ public function __construct(
+ ApiQuery $query,
+ string $moduleName,
+ ConfigHelper $configHelper,
+ LanguageNameUtils $languageNameUtils,
+ ILoadBalancer $loadBalancer
+ ) {
+ parent::__construct( $query, $moduleName, 'mc' );
+ $this->configHelper = $configHelper;
+ $this->languageNameUtils = $languageNameUtils;
+ $this->loadBalancer = $loadBalancer;
+ }
+
+ public function execute(): void {
+ $this->run();
+ }
+
+ /** @inheritDoc */
+ public function getCacheMode( $params ): string {
+ return 'public';
+ }
+
+ /** @inheritDoc */
+ public function executeGenerator( $resultPageSet ): void {
+ $this->run( $resultPageSet );
+ }
+
+ private function validateLanguageCode( string $code ): void {
+ if ( !TranslateUtils::isSupportedLanguageCode( $code ) ) {
+ $this->dieWithError( [ 'apierror-translate-invalidlanguage', $code ] );
+ }
+ }
+
+ private function run( ApiPageSet $resultPageSet = null ): void {
+ $params = $this->extractRequestParams();
+
+ $group = MessageGroups::getGroup( $params['group'] );
+ if ( !$group ) {
+ $this->dieWithError( [ 'apierror-badparameter', 'mcgroup' ] );
+ }
+
+ $languageCode = $params[ 'language' ];
+ $this->validateLanguageCode( $languageCode );
+ $sourceLanguageCode = $group->getSourceLanguage();
+
+ // Even though translation to source language maybe disabled, we still want to
+ // fetch the message collections for the source language.
+ if ( $sourceLanguageCode === $languageCode ) {
+ $name = $this->getLanguageName( $languageCode );
+ $this->addWarning( [ 'apiwarn-translate-language-disabled-source', wfEscapeWikiText( $name ) ] );
+ } else {
+ $languages = $group->getTranslatableLanguages();
+ if ( $languages === null ) {
+ $checks = [
+ $group->getId(),
+ strtok( $group->getId(), '-' ),
+ '*'
+ ];
+
+ $disabledLanguages = $this->configHelper->getDisabledTargetLanguages();
+ foreach ( $checks as $check ) {
+ if ( isset( $disabledLanguages[ $check ][ $languageCode ] ) ) {
+ $name = $this->getLanguageName( $languageCode );
+ $reason = $disabledLanguages[ $check ][ $languageCode ];
+ $this->dieWithError( [ 'apierror-translate-language-disabled-reason', $name, $reason ] );
+ }
+ }
+ } elseif ( !isset( $languages[ $languageCode ] ) ) {
+ // Not a translatable language
+ $name = $this->getLanguageName( $languageCode );
+ $this->dieWithError( [ 'apierror-translate-language-disabled', $name ] );
+ }
+
+ // A check for cases where the source language of group messages
+ // is a variant of the target language being translated into.
+ if ( strtok( $sourceLanguageCode, '-' ) === strtok( $languageCode, '-' ) ) {
+ $sourceLaguageName = $this->getLanguageName( $sourceLanguageCode );
+ $targetLaguageName = $this->getLanguageName( $languageCode );
+ $this->addWarning( [
+ 'apiwarn-translate-language-targetlang-variant-of-source',
+ wfEscapeWikiText( $targetLaguageName ),
+ wfEscapeWikiText( $sourceLaguageName ) ]
+ );
+ }
+ }
+
+ if ( MessageGroups::isDynamic( $group ) ) {
+ /** @var RecentMessageGroup $group */
+ // @phan-suppress-next-line PhanUndeclaredMethod
+ $group->setLanguage( $params['language'] );
+ }
+
+ $messages = $group->initCollection( $params['language'] );
+
+ foreach ( $params['filter'] as $filter ) {
+ $value = null;
+ if ( strpos( $filter, ':' ) !== false ) {
+ list( $filter, $value ) = explode( ':', $filter, 2 );
+ }
+ /* The filtering params here are swapped wrt MessageCollection.
+ * There (fuzzy) means do not show fuzzy, which is the same as !fuzzy
+ * here and fuzzy here means (fuzzy, false) there. */
+ try {
+ if ( $filter[0] === '!' ) {
+ $messages->filter( substr( $filter, 1 ), true, $value );
+ } else {
+ $messages->filter( $filter, false, $value );
+ }
+ } catch ( MWException $e ) {
+ $this->dieWithError(
+ [ 'apierror-translate-invalidfilter', wfEscapeWikiText( $e->getMessage() ) ],
+ 'invalidfilter'
+ );
+ }
+ }
+
+ $resultSize = count( $messages );
+ $offsets = $messages->slice( $params['offset'], $params['limit'] );
+ $batchSize = count( $messages );
+ list( /*$backwardsOffset*/, $forwardsOffset, $startOffset ) = $offsets;
+
+ $result = $this->getResult();
+ $result->addValue(
+ [ 'query', 'metadata' ],
+ 'state',
+ self::getWorkflowState( $group->getId(), $params['language'] )
+ );
+
+ $result->addValue( [ 'query', 'metadata' ], 'resultsize', $resultSize );
+ $result->addValue(
+ [ 'query', 'metadata' ],
+ 'remaining',
+ $resultSize - $startOffset - $batchSize
+ );
+
+ $messages->loadTranslations();
+
+ $pages = [];
+
+ if ( $forwardsOffset !== false ) {
+ $this->setContinueEnumParameter( 'offset', $forwardsOffset );
+ }
+
+ $props = array_flip( $params['prop'] );
+
+ /** @var Title $title */
+ foreach ( $messages->keys() as $mkey => $titleValue ) {
+ $title = Title::newFromLinkTarget( $titleValue );
+
+ if ( $resultPageSet === null ) {
+ $data = $this->extractMessageData( $result, $props, $messages[$mkey] );
+ $data['title'] = $title->getPrefixedText();
+ $data['targetLanguage'] = $messages->getLanguage();
+
+ $handle = new MessageHandle( $title );
+
+ if ( $handle->isValid() ) {
+ $data['primaryGroup'] = $handle->getGroup()->getId();
+ }
+
+ $result->addValue( [ 'query', $this->getModuleName() ], null, $data );
+ } else {
+ $pages[] = $title;
+ }
+ }
+
+ if ( $resultPageSet === null ) {
+ $result->addIndexedTagName(
+ [ 'query', $this->getModuleName() ],
+ 'message'
+ );
+ } else {
+ $resultPageSet->populateFromTitles( $pages );
+ }
+ }
+
+ private function getLanguageName( string $languageCode ): string {
+ return $this
+ ->languageNameUtils
+ ->getLanguageName( $languageCode, $this->getLanguage()->getCode() );
+ }
+
+ private function extractMessageData(
+ ApiResult $result,
+ array $props,
+ TMessage $message
+ ): array {
+ $data = [ 'key' => $message->key() ];
+
+ if ( isset( $props['definition'] ) ) {
+ $data['definition'] = $message->definition();
+ }
+ if ( isset( $props['translation'] ) ) {
+ // Remove !!FUZZY!! from translation if present.
+ $translation = $message->translation();
+ if ( $translation !== null ) {
+ $translation = str_replace( TRANSLATE_FUZZY, '', $translation );
+ }
+ $data['translation'] = $translation;
+ }
+ if ( isset( $props['tags'] ) ) {
+ $data['tags'] = $message->getTags();
+ $result->setIndexedTagName( $data['tags'], 'tag' );
+ }
+ // BC
+ if ( isset( $props['revision'] ) ) {
+ $data['revision'] = $message->getProperty( 'revision' );
+ }
+ if ( isset( $props['properties'] ) ) {
+ foreach ( $message->getPropertyNames() as $prop ) {
+ $data['properties'][$prop] = $message->getProperty( $prop );
+ ApiResult::setIndexedTagNameRecursive( $data['properties'], 'val' );
+ }
+ }
+
+ return $data;
+ }
+
+ /**
+ * Get the current workflow state for the message group for the given language
+ * @return string|bool State id or false.
+ */
+ private function getWorkflowState( string $groupId, string $language ) {
+ $dbr = $this->loadBalancer->getConnection( DB_REPLICA );
+ return $dbr->newSelectQueryBuilder()
+ ->select( 'tgr_state' )
+ ->from( 'translate_groupreviews' )
+ ->where( [
+ 'tgr_group' => $groupId,
+ 'tgr_lang' => $language
+ ] )
+ ->caller( __METHOD__ )
+ ->fetchField();
+ }
+
+ /** @inheritDoc */
+ protected function getAllowedParams(): array {
+ return [
+ 'group' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_REQUIRED => true,
+ ],
+ 'language' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_DEFAULT => 'en',
+ ],
+ 'limit' => [
+ ParamValidator::PARAM_DEFAULT => 500,
+ ParamValidator::PARAM_TYPE => 'limit',
+ IntegerDef::PARAM_MIN => 1,
+ IntegerDef::PARAM_MAX => ApiBase::LIMIT_BIG2,
+ IntegerDef::PARAM_MAX2 => ApiBase::LIMIT_BIG2,
+ ],
+ 'offset' => [
+ ParamValidator::PARAM_DEFAULT => '',
+ ParamValidator::PARAM_TYPE => 'string',
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ 'filter' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_DEFAULT => '!optional|!ignored',
+ ParamValidator::PARAM_ISMULTI => true,
+ ],
+ 'prop' => [
+ ParamValidator::PARAM_TYPE => [
+ 'definition',
+ 'translation',
+ 'tags',
+ 'revision',
+ 'properties'
+ ],
+ ParamValidator::PARAM_DEFAULT => 'definition|translation',
+ ParamValidator::PARAM_ISMULTI => true,
+ ApiBase::PARAM_HELP_MSG =>
+ [ 'apihelp-query+messagecollection-param-prop', TRANSLATE_FUZZY ],
+ ],
+ ];
+ }
+
+ /** @inheritDoc */
+ protected function getExamplesMessages(): array {
+ return [
+ 'action=query&meta=siteinfo&siprop=languages'
+ => 'apihelp-query+messagecollection-example-1',
+ 'action=query&list=messagecollection&mcgroup=page-Example'
+ => 'apihelp-query+messagecollection-example-2',
+ 'action=query&list=messagecollection&mcgroup=page-Example&mclanguage=fi&' .
+ 'mcprop=definition|translation|tags&mcfilter=optional'
+ => 'apihelp-query+messagecollection-example-3',
+ 'action=query&generator=messagecollection&gmcgroup=page-Example&gmclanguage=nl&prop=revisions'
+ => 'apihelp-query+messagecollection-example-4',
+ ];
+ }
+}
diff --git a/Translate/src/MessageLoading/QueryMessageTranslationsActionApi.php b/Translate/src/MessageLoading/QueryMessageTranslationsActionApi.php
new file mode 100644
index 00000000..5f76247f
--- /dev/null
+++ b/Translate/src/MessageLoading/QueryMessageTranslationsActionApi.php
@@ -0,0 +1,102 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageLoading;
+
+use ApiBase;
+use ApiQuery;
+use ApiQueryBase;
+use ApiResult;
+use MessageHandle;
+use Title;
+use TranslateUtils;
+use Wikimedia\ParamValidator\ParamValidator;
+
+/**
+ * Api module for querying message translations.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @ingroup API TranslateAPI
+ */
+class QueryMessageTranslationsActionApi extends ApiQueryBase {
+ public function __construct( ApiQuery $query, string $moduleName ) {
+ parent::__construct( $query, $moduleName, 'mt' );
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+
+ public function execute(): void {
+ $params = $this->extractRequestParams();
+
+ $title = Title::newFromText( $params['title'] );
+ if ( !$title ) {
+ $this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $params['title'] ) ] );
+ }
+
+ $handle = new MessageHandle( $title );
+ if ( !$handle->isValid() ) {
+ $this->dieWithError( 'apierror-translate-nomessagefortitle', 'nomessagefortitle' );
+ }
+
+ $namespace = $title->getNamespace();
+ $pageInfo = TranslateUtils::getTranslations( $handle );
+
+ $result = $this->getResult();
+ $count = 0;
+
+ foreach ( $pageInfo as $key => $info ) {
+ if ( ++$count <= $params['offset'] ) {
+ continue;
+ }
+
+ $tTitle = Title::makeTitle( $namespace, $key );
+ $tHandle = new MessageHandle( $tTitle );
+
+ $data = [
+ 'title' => $tTitle->getPrefixedText(),
+ 'language' => $tHandle->getCode(),
+ 'lasttranslator' => $info[1],
+ ];
+
+ $fuzzy = MessageHandle::hasFuzzyString( $info[0] ) || $tHandle->isFuzzy();
+
+ if ( $fuzzy ) {
+ $data['fuzzy'] = 'fuzzy';
+ }
+
+ $translation = str_replace( TRANSLATE_FUZZY, '', $info[0] );
+ ApiResult::setContentValue( $data, 'translation', $translation );
+
+ $fit = $result->addValue( [ 'query', $this->getModuleName() ], null, $data );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'offset', $count );
+ break;
+ }
+ }
+
+ $result->addIndexedTagName( [ 'query', $this->getModuleName() ], 'message' );
+ }
+
+ protected function getAllowedParams(): array {
+ return [
+ 'title' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_REQUIRED => true,
+ ],
+ 'offset' => [
+ ParamValidator::PARAM_DEFAULT => 0,
+ ParamValidator::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages(): array {
+ return [
+ 'action=query&meta=messagetranslations&mttitle=MediaWiki:January'
+ => 'apihelp-query+messagetranslations-example-1',
+ ];
+ }
+}
diff --git a/Translate/src/MessageProcessing/ArrayFlattener.php b/Translate/src/MessageProcessing/ArrayFlattener.php
new file mode 100644
index 00000000..5e063bc5
--- /dev/null
+++ b/Translate/src/MessageProcessing/ArrayFlattener.php
@@ -0,0 +1,288 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageProcessing;
+
+use MWException;
+use TranslateUtils;
+
+/**
+ * Flattens message arrays for further processing. Supports parsing CLDR
+ * plural messages and converting them into MediaWiki's {{PLURAL}} syntax
+ * in a single message.
+ *
+ * @author Niklas Laxström
+ * @author Erik Moeller
+ * @license GPL-2.0-or-later
+ * @since 2016.01
+ */
+class ArrayFlattener {
+ /** @var string */
+ protected $sep;
+ /** @var bool */
+ protected $parseCLDRPlurals;
+ // For CLDR pluralization rules
+ protected static $pluralWords = [
+ 'zero' => 1,
+ 'one' => 1,
+ 'many' => 1,
+ 'few' => 1,
+ 'other' => 1,
+ 'two' => 1
+ ];
+
+ public function __construct( string $sep = '.', bool $parseCLDRPlurals = false ) {
+ $this->sep = $sep;
+ $this->parseCLDRPlurals = $parseCLDRPlurals;
+ }
+
+ /**
+ * Flattens multidimensional array.
+ * @param array $unflat Array of messages
+ */
+ public function flatten( array $unflat ): array {
+ $flat = [];
+
+ foreach ( $unflat as $key => $value ) {
+ if ( !is_array( $value ) ) {
+ $flat[$key] = $value;
+ continue;
+ }
+
+ $plurals = false;
+ if ( $this->parseCLDRPlurals ) {
+ $plurals = $this->flattenCLDRPlurals( $value );
+ }
+
+ if ( $this->parseCLDRPlurals && $plurals ) {
+ $flat[$key] = $plurals;
+ } else {
+ $temp = [];
+ foreach ( $value as $subKey => $subValue ) {
+ $newKey = "$key{$this->sep}$subKey";
+ $temp[$newKey] = $subValue;
+ }
+ $flat += $this->flatten( $temp );
+ }
+
+ // Can as well keep only one copy around.
+ unset( $unflat[$key] );
+ }
+
+ return $flat;
+ }
+
+ /**
+ * Flattens arrays that contain CLDR plural keywords into single values using
+ * MediaWiki's plural syntax.
+ * @throws MWException
+ * @return bool|string
+ */
+ public function flattenCLDRPlurals( array $messages ) {
+ $hasNonPluralKeys = false;
+ $pluralKeys = [];
+ foreach ( $messages as $key => $value ) {
+ if ( is_array( $value ) ) {
+ // Plurals can only happen in the lowest level of the structure
+ return false;
+ }
+
+ // Check if we find any reserved plural keyword
+ if ( isset( self::$pluralWords[$key] ) ) {
+ $pluralKeys[] = $key;
+ } else {
+ $hasNonPluralKeys = true;
+ }
+ }
+
+ // No plural keys at all, we can skip
+ if ( !$pluralKeys ) {
+ return false;
+ }
+
+ // Mixed plural keys with other keys, should not happen
+ if ( $hasNonPluralKeys ) {
+ // Allow `other` with other keys, as long it is is only one of the reserved ones
+ if ( $pluralKeys === [ 'other' ] ) {
+ return false;
+ }
+
+ $keys = implode( ', ', array_keys( $messages ) );
+ throw new MWException( "Reserved plural keywords mixed with other keys: $keys." );
+ }
+
+ $pls = '{{PLURAL';
+ foreach ( $messages as $key => $value ) {
+ if ( $key === 'other' ) {
+ continue;
+ }
+
+ $pls .= "|$key=$value";
+ }
+
+ // Put the "other" alternative last, without other= prefix.
+ $other = isset( $messages['other'] ) ? '|' . $messages['other'] : '';
+ $pls .= "$other}}";
+
+ return $pls;
+ }
+
+ /**
+ * Performs the reverse operation of flatten.
+ * @param array $flat Array of messages
+ */
+ public function unflatten( array $flat ): array {
+ $unflat = [];
+
+ if ( $this->parseCLDRPlurals ) {
+ $unflattenedPlurals = [];
+ foreach ( $flat as $key => $value ) {
+ $plurals = false;
+ if ( !is_array( $value ) ) {
+ $plurals = $this->unflattenCLDRPlurals( $key, $value );
+ }
+ if ( is_array( $plurals ) ) {
+ $unflattenedPlurals += $plurals;
+ } else {
+ $unflattenedPlurals[$key] = $value;
+ }
+ }
+ $flat = $unflattenedPlurals;
+ }
+
+ foreach ( $flat as $key => $value ) {
+ $path = explode( $this->sep, $key );
+ if ( count( $path ) === 1 ) {
+ $unflat[$key] = $value;
+ continue;
+ }
+
+ $pointer = &$unflat;
+ do {
+ // Extract the level and make sure it exists.
+ $level = array_shift( $path );
+ if ( !isset( $pointer[$level] ) ) {
+ $pointer[$level] = [];
+ }
+
+ // Update the pointer to the new reference.
+ $tmpPointer = &$pointer[$level];
+ unset( $pointer );
+ $pointer = &$tmpPointer;
+ unset( $tmpPointer );
+
+ // If next level is the last, add it into the array.
+ if ( count( $path ) === 1 ) {
+ $lastKey = array_shift( $path );
+ $pointer[$lastKey] = $value;
+ }
+ } while ( count( $path ) );
+ }
+
+ return $unflat;
+ }
+
+ /**
+ * Converts the plural syntax to array of CLDR style plurals
+ * @return bool|array
+ */
+ public function unflattenCLDRPlurals( string $key, string $message ) {
+ // Quick escape.
+ if ( strpos( $message, '{{PLURAL' ) === false ) {
+ return false;
+ }
+
+ /*
+ * Replace all variables with placeholders. Possible source of bugs
+ * if other characters that given below are used.
+ */
+ $regex = '/\{[a-z_-]+}/i';
+ $placeholders = [];
+ $match = [];
+
+ while ( preg_match( $regex, $message, $match ) ) {
+ $uniqkey = TranslateUtils::getPlaceholder();
+ $placeholders[$uniqkey] = $match[0];
+ $search = preg_quote( $match[0], '~' );
+ $message = preg_replace( "~$search~", $uniqkey, $message );
+ }
+
+ // Then replace (possible multiple) plural instances into placeholders.
+ $regex = '~\{\{PLURAL\|(.*?)}}~s';
+ $matches = [];
+ $match = [];
+
+ while ( preg_match( $regex, $message, $match ) ) {
+ $uniqkey = TranslateUtils::getPlaceholder();
+ $matches[$uniqkey] = $match;
+ $message = preg_replace( $regex, $uniqkey, $message, 1 );
+ }
+
+ // No plurals, should not happen.
+ if ( !count( $matches ) ) {
+ return false;
+ }
+
+ // The final array of alternative plurals forms.
+ $alts = [];
+
+ /*
+ * Then loop trough each plural block and replacing the placeholders
+ * to construct the alternatives. Produces invalid output if there is
+ * multiple plural bocks which don't have the same set of keys.
+ */
+ $pluralChoice = implode( '|', array_keys( self::$pluralWords ) );
+ $regex = "~($pluralChoice)\s*=\s*(.*)~s";
+ foreach ( $matches as $ph => $plu ) {
+ $forms = explode( '|', $plu[1] );
+
+ foreach ( $forms as $form ) {
+ $match = [];
+ if ( preg_match( $regex, $form, $match ) ) {
+ $formWord = "$key{$this->sep}{$match[1]}";
+ $value = $match[2];
+ } else {
+ $formWord = "$key{$this->sep}other";
+ $value = $form;
+ }
+
+ if ( !isset( $alts[$formWord] ) ) {
+ $alts[$formWord] = $message;
+ }
+
+ $string = $alts[$formWord];
+ $alts[$formWord] = str_replace( $ph, $value, $string );
+ }
+ }
+
+ // Replace other variables.
+ foreach ( $alts as &$value ) {
+ $value = str_replace( array_keys( $placeholders ), array_values( $placeholders ), $value );
+ }
+
+ if ( !isset( $alts["$key{$this->sep}other"] ) ) {
+ // Ensure other form is always present, even if missing from the translation
+ $alts["$key{$this->sep}other"] = end( $alts );
+ }
+
+ return $alts;
+ }
+
+ /** Compares two strings for equal content, taking PLURAL expansion into account. */
+ public function compareContent( string $a, string $b ): bool {
+ if ( !$this->parseCLDRPlurals ) {
+ return $a === $b;
+ }
+
+ $a2 = $this->unflattenCLDRPlurals( 'prefix', $a );
+ $b2 = $this->unflattenCLDRPlurals( 'prefix', $b );
+
+ // Fall back to regular comparison if parsing fails.
+ if ( $a2 === false || $b2 === false ) {
+ return $a === $b;
+ }
+
+ // Require key-value pairs to match, but ignore order and types (all should be strings).
+ return $a2 == $b2;
+ }
+}
diff --git a/Translate/src/MessageProcessing/StringMangler.php b/Translate/src/MessageProcessing/StringMangler.php
new file mode 100644
index 00000000..4d440910
--- /dev/null
+++ b/Translate/src/MessageProcessing/StringMangler.php
@@ -0,0 +1,66 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageProcessing;
+
+/**
+ * Interface that key-mangling classes must implement. Mangling is done to:
+ * - converting characters which would be invalid in titles to something valid
+ * - prefixing a set of messages to avoid conflicts when sharing a namespace
+ * with multiple message groups.
+ *
+ * The operations have to be reversible so that
+ * x equals unmangle( mangle( x ) ).
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+interface StringMangler {
+ /** General way to pass configuration to the mangler. */
+ public function setConf( array $configuration ): void;
+
+ /**
+ * Match strings against a pattern.
+ *
+ * If string matches, mangle() prefixes the key.
+ */
+ public function matches( string $key ): bool;
+
+ /** Mangle a string. */
+ public function mangle( string $key ): string;
+
+ /**
+ * Mangle a list of strings.
+ *
+ * @param string[] $list
+ * @return string[]
+ */
+ public function mangleList( array $list ): array;
+
+ /**
+ * Mangle the keys of an array.
+ *
+ * @param array<string,mixed> $array
+ * @return array<string,mixed>
+ */
+ public function mangleArray( array $array ): array;
+
+ /** Reverse mangling of a string. */
+ public function unmangle( string $key ): string;
+
+ /**
+ * Reverse mangling a list of strings.
+ *
+ * @param string[] $list
+ * @return string[]
+ */
+ public function unmangleList( array $list ): array;
+
+ /**
+ * Reverse mangling of the keys of an array.
+ *
+ * @param array<string,mixed> $array
+ * @return array<string,mixed>
+ */
+ public function unmangleArray( array $array ): array;
+}
diff --git a/Translate/src/MessageProcessing/StringMatcher.php b/Translate/src/MessageProcessing/StringMatcher.php
new file mode 100644
index 00000000..b04a97ff
--- /dev/null
+++ b/Translate/src/MessageProcessing/StringMatcher.php
@@ -0,0 +1,207 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageProcessing;
+
+use MetaYamlSchemaExtender;
+use Title;
+
+/**
+ * The versatile default implementation of StringMangler interface.
+ * It supports exact matches and patterns with any-wildcard (*).
+ * All matching strings are prefixed with the same prefix.
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+class StringMatcher implements StringMangler, MetaYamlSchemaExtender {
+ /** @var string Prefix for mangled message keys */
+ protected $sPrefix = '';
+ /** @var string[] Exact message keys */
+ protected $aExact = [];
+ /** @var int[] Patterns of type foo* */
+ protected $aPrefix = [];
+ /** @var string[] Patterns that contain wildcard anywhere else than in the end */
+ protected $aRegex = [];
+
+ public function __construct( string $prefix = '', array $patterns = [] ) {
+ $this->sPrefix = $prefix;
+ $this->init( $patterns );
+ }
+
+ /**
+ * Preprocesses the patterns.
+ *
+ * They are split into exact keys, prefix matches and pattern matches to
+ * speed up matching process.
+ *
+ * @param string[] $strings Key patterns.
+ */
+ protected function init( array $strings ): void {
+ foreach ( $strings as $string ) {
+ $pos = strpos( $string, '*' );
+ if ( $pos === false ) {
+ $this->aExact[] = $string;
+ } elseif ( $pos + 1 === strlen( $string ) ) {
+ $prefix = substr( $string, 0, -1 );
+ $this->aPrefix[$prefix] = strlen( $prefix );
+ } else {
+ $string = str_replace( '\\*', '.+', preg_quote( $string, '/' ) );
+ $this->aRegex[] = "/^$string$/";
+ }
+ }
+ }
+
+ protected static function getValidKeyChars(): string {
+ static $valid = null;
+ if ( $valid === null ) {
+ $valid = strtr(
+ Title::legalChars(),
+ [
+ '=' => '', // equals sign, which is itself usef for escaping
+ '&' => '', // ampersand, for entities
+ '%' => '', // percent sign, which is used in URL encoding
+ ]
+ );
+ }
+
+ return $valid;
+ }
+
+ /** @inheritDoc */
+ public function setConf( array $conf ): void {
+ $this->sPrefix = $conf['prefix'];
+ $this->init( $conf['patterns'] );
+ }
+
+ /** @inheritDoc */
+ public function matches( string $key ): bool {
+ if ( in_array( $key, $this->aExact ) ) {
+ return true;
+ }
+
+ foreach ( $this->aPrefix as $prefix => $len ) {
+ if ( strncmp( $key, $prefix, $len ) === 0 ) {
+ return true;
+ }
+ }
+
+ foreach ( $this->aRegex as $regex ) {
+ if ( preg_match( $regex, $key ) ) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /** @inheritDoc */
+ public function mangle( string $key ): string {
+ if ( $this->matches( $key ) ) {
+ $key = $this->sPrefix . $key;
+ }
+
+ $escaper = static function ( $match ) {
+ $esc = '';
+ foreach ( str_split( $match[0] ) as $c ) {
+ $esc .= '=' . sprintf( '%02X', ord( $c ) );
+ }
+ return $esc;
+ };
+
+ // Apply a "quoted-printable"-like escaping
+ $valid = self::getValidKeyChars();
+ $key = preg_replace_callback( "/[^$valid]/", $escaper, $key );
+ // Additional limitations in MediaWiki, see MediaWikiTitleCodec::splitTitleString
+ $key = preg_replace_callback( '/(~~~|^[ _]|[ _]$|[ _]{2,}|^:)/', $escaper, $key );
+ // TODO: length check + truncation
+ // TODO: forbid path travels
+
+ return $key;
+ }
+
+ /** @inheritDoc */
+ public function mangleList( array $list ): array {
+ return array_map( [ $this, 'mangle' ], $list );
+ }
+
+ /** @inheritDoc */
+ public function mangleArray( array $array ): array {
+ $out = [];
+ foreach ( $array as $key => $value ) {
+ $out[$this->mangle( (string)$key )] = $value;
+ }
+
+ return $out;
+ }
+
+ /** @inheritDoc */
+ public function unmangle( string $key ): string {
+ // Unescape the "quoted-printable"-like escaping,
+ // which is applied in mangle
+ $unescapedString = preg_replace_callback(
+ '/=([A-F0-9]{2})/',
+ static function ( $match ) {
+ return chr( hexdec( $match[1] ) );
+ },
+ $key
+ );
+
+ if ( strncmp( $unescapedString, $this->sPrefix, strlen( $this->sPrefix ) ) === 0 ) {
+ $unmangled = substr( $unescapedString, strlen( $this->sPrefix ) );
+
+ // Check if this string should be mangled / un-mangled to begin with
+ if ( $this->matches( $unmangled ) ) {
+ return $unmangled;
+ }
+ }
+ return $unescapedString;
+ }
+
+ /** @inheritDoc */
+ public function unmangleList( array $list ): array {
+ foreach ( $list as $index => $key ) {
+ $list[$index] = $this->unmangle( $key );
+ }
+
+ return $list;
+ }
+
+ /** @inheritDoc */
+ public function unmangleArray( array $array ): array {
+ $out = [];
+ foreach ( $array as $key => $value ) {
+ $out[$this->unmangle( $key )] = $value;
+ }
+
+ return $out;
+ }
+
+ /** @inheritDoc */
+ public static function getExtraSchema(): array {
+ $schema = [
+ 'root' => [
+ '_type' => 'array',
+ '_children' => [
+ 'MANGLER' => [
+ '_type' => 'array',
+ '_children' => [
+ 'prefix' => [
+ '_type' => 'text',
+ '_not_empty' => true,
+ ],
+ 'patterns' => [
+ '_type' => 'array',
+ '_required' => true,
+ '_ignore_extra_keys' => true,
+ '_children' => [],
+ ],
+ ],
+ ],
+ ],
+ ],
+ ];
+
+ return $schema;
+ }
+}
diff --git a/Translate/src/MessageProcessing/TranslateReplaceTitle.php b/Translate/src/MessageProcessing/TranslateReplaceTitle.php
new file mode 100644
index 00000000..07fc36b3
--- /dev/null
+++ b/Translate/src/MessageProcessing/TranslateReplaceTitle.php
@@ -0,0 +1,69 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageProcessing;
+
+use MessageHandle;
+use Title;
+use TitleArray;
+use TranslateUtils;
+
+/**
+ * Helper class that cotains utility methods to help with identifying and replace titles.
+ * @author Abijeet Patro
+ * @since 2019.10
+ * @license GPL-2.0-or-later
+ */
+class TranslateReplaceTitle {
+ /**
+ * Returns two lists: a set of message handles that would be moved/renamed by
+ * the current text replacement, and the set of message handles that would ordinarily
+ * be moved but are not movable, due to permissions or any other reason.
+ * @return Title[][]
+ */
+ public static function getTitlesForMove(
+ MessageHandle $sourceMessageHandle, string $replacement
+ ): array {
+ $titlesForMove = [];
+ $namespace = $sourceMessageHandle->getTitle()->getNamespace();
+
+ $titles = self::getMatchingTitles( $sourceMessageHandle );
+
+ foreach ( $titles as $title ) {
+ $handle = new MessageHandle( $title );
+ // This takes care of situations where we have two different titles
+ // foo and foo/bar, both will be matched and fetched but the slash
+ // does not represent a language separator
+ if ( $handle->getKey() !== $sourceMessageHandle->getKey() ) {
+ continue;
+ }
+ $targetTitle = Title::makeTitle(
+ $namespace,
+ TranslateUtils::title( $replacement, $handle->getCode(), $namespace )
+ );
+ $titlesForMove[] = [ $title, $targetTitle ];
+ }
+
+ return $titlesForMove;
+ }
+
+ private static function getMatchingTitles( MessageHandle $handle ): TitleArray {
+ $dbr = wfGetDB( DB_PRIMARY );
+
+ $tables = [ 'page' ];
+ $vars = [ 'page_title', 'page_namespace', 'page_id' ];
+
+ $comparisonCond = 'page_title ' . $dbr->buildLike(
+ $handle->getTitleForBase()->getDBkey(), '/', $dbr->anyString()
+ );
+
+ $conds = [
+ $comparisonCond,
+ 'page_namespace' => $handle->getTitle()->getNamespace(),
+ ];
+
+ $result = $dbr->select( $tables, $vars, $conds, __METHOD__ );
+
+ return TitleArray::newFromResult( $result );
+ }
+}
diff --git a/Translate/src/MessageSync/MessageSourceChange.php b/Translate/src/MessageSync/MessageSourceChange.php
new file mode 100644
index 00000000..92cf42e6
--- /dev/null
+++ b/Translate/src/MessageSync/MessageSourceChange.php
@@ -0,0 +1,553 @@
+<?php
+/**
+ * Contains a class to track changes to the messages when importing messages from remote source.
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+namespace MediaWiki\Extension\Translate\MessageSync;
+
+use InvalidArgumentException;
+
+/**
+ * Class is use to track the changes made when importing messages from the remote sources
+ * using processMessageChanges. Also provides an interface to query these changes, and
+ * update them.
+ * @since 2019.10
+ */
+class MessageSourceChange {
+ /**
+ * @var array[][][]
+ * @phpcs:ignore Generic.Files.LineLength
+ * @phan-var array<string,array<string,array<string|int,array{key:string,content:string,similarity?:float,matched_to?:string,previous_state?:string}>>>
+ */
+ protected $changes = [];
+ public const ADDITION = 'addition';
+ public const CHANGE = 'change';
+ public const DELETION = 'deletion';
+ public const RENAME = 'rename';
+ public const NONE = 'none';
+
+ private const SIMILARITY_THRESHOLD = 0.9;
+
+ /**
+ * Contains a mapping of message type, and the corresponding addition function
+ * @var callable[]
+ */
+ protected $addFunctionMap;
+ /**
+ * Contains a mapping of message type, and the corresponding removal function
+ * @var callable[]
+ */
+ protected $removeFunctionMap;
+
+ /** @param array[][][] $changes */
+ public function __construct( $changes = [] ) {
+ $this->changes = $changes;
+ $this->addFunctionMap = [
+ self::ADDITION => [ $this, 'addAddition' ],
+ self::DELETION => [ $this, 'addDeletion' ],
+ self::CHANGE => [ $this, 'addChange' ]
+ ];
+
+ $this->removeFunctionMap = [
+ self::ADDITION => [ $this, 'removeAdditions' ],
+ self::DELETION => [ $this, 'removeDeletions' ],
+ self::CHANGE => [ $this, 'removeChanges' ]
+ ];
+ }
+
+ /**
+ * Add a change under a message group for a specific language
+ * @param string $language
+ * @param string $key
+ * @param string $content
+ */
+ public function addChange( $language, $key, $content ) {
+ $this->addModification( $language, self::CHANGE, $key, $content );
+ }
+
+ /**
+ * Add an addition under a message group for a specific language
+ * @param string $language
+ * @param string $key
+ * @param string $content
+ */
+ public function addAddition( $language, $key, $content ) {
+ $this->addModification( $language, self::ADDITION, $key, $content );
+ }
+
+ /**
+ * Adds a deletion under a message group for a specific language
+ * @param string $language
+ * @param string $key
+ * @param string $content
+ */
+ public function addDeletion( $language, $key, $content ) {
+ $this->addModification( $language, self::DELETION, $key, $content );
+ }
+
+ /**
+ * Adds a rename under a message group for a specific language
+ * @param string $language
+ * @param string[] $addedMessage
+ * @param string[] $deletedMessage
+ * @param float $similarity
+ */
+ public function addRename( $language, $addedMessage, $deletedMessage, $similarity = 0 ) {
+ $this->changes[$language][self::RENAME][$addedMessage['key']] = [
+ 'content' => $addedMessage['content'],
+ 'similarity' => $similarity,
+ 'matched_to' => $deletedMessage['key'],
+ 'previous_state' => self::ADDITION,
+ 'key' => $addedMessage['key']
+ ];
+
+ $this->changes[$language][self::RENAME][$deletedMessage['key']] = [
+ 'content' => $deletedMessage['content'],
+ 'similarity' => $similarity,
+ 'matched_to' => $addedMessage['key'],
+ 'previous_state' => self::DELETION,
+ 'key' => $deletedMessage['key']
+ ];
+ }
+
+ public function setRenameState( $language, $msgKey, $state ) {
+ $possibleStates = [ self::ADDITION, self::CHANGE, self::DELETION,
+ self::NONE, self::RENAME ];
+ if ( !in_array( $state, $possibleStates ) ) {
+ throw new InvalidArgumentException(
+ "Invalid state passed - '$state'. Possible states - "
+ . implode( ', ', $possibleStates )
+ );
+ }
+
+ $languageChanges = null;
+ if ( isset( $this->changes[ $language ] ) ) {
+ $languageChanges = &$this->changes[ $language ];
+ }
+ if ( $languageChanges !== null && isset( $languageChanges[ 'rename' ][ $msgKey ] ) ) {
+ $languageChanges[ 'rename' ][ $msgKey ][ 'previous_state' ] = $state;
+ }
+ }
+
+ /**
+ * @param string $language
+ * @param string $type
+ * @param string $key
+ * @param string $content
+ */
+ protected function addModification( $language, $type, $key, $content ) {
+ $this->changes[$language][$type][] = [
+ 'key' => $key,
+ 'content' => $content,
+ ];
+ }
+
+ /**
+ * Fetch changes for a message group under a language
+ * @param string $language
+ * @return array[]
+ */
+ public function getChanges( $language ) {
+ return $this->getModification( $language, self::CHANGE );
+ }
+
+ /**
+ * Fetch deletions for a message group under a language
+ * @param string $language
+ * @return array[]
+ */
+ public function getDeletions( $language ) {
+ return $this->getModification( $language, self::DELETION );
+ }
+
+ /**
+ * Fetch additions for a message group under a language
+ * @param string $language
+ * @return array[]
+ */
+ public function getAdditions( $language ) {
+ return $this->getModification( $language, self::ADDITION );
+ }
+
+ /**
+ * Finds a message with the given key across different types of modifications.
+ * @param string $language
+ * @param string $key
+ * @param string[] $possibleStates
+ * @param string|null &$modificationType
+ * @return array|null
+ */
+ public function findMessage( $language, $key, $possibleStates = [], &$modificationType = null ) {
+ $allChanges = [];
+ $allChanges[self::ADDITION] = $this->getAdditions( $language );
+ $allChanges[self::DELETION] = $this->getDeletions( $language );
+ $allChanges[self::CHANGE] = $this->getChanges( $language );
+ $allChanges[self::RENAME] = $this->getRenames( $language );
+
+ if ( $possibleStates === [] ) {
+ $possibleStates = [ self::ADDITION, self::CHANGE, self::DELETION, self::RENAME ];
+ }
+
+ foreach ( $allChanges as $type => $modifications ) {
+ if ( !in_array( $type, $possibleStates ) ) {
+ continue;
+ }
+
+ if ( $type === self::RENAME ) {
+ if ( isset( $modifications[$key] ) ) {
+ $modificationType = $type;
+ return $modifications[$key];
+ }
+ continue;
+ }
+
+ foreach ( $modifications as $modification ) {
+ $currentKey = $modification['key'];
+ if ( $currentKey === $key ) {
+ $modificationType = $type;
+ return $modification;
+ }
+ }
+ }
+
+ $modificationType = null;
+ return null;
+ }
+
+ /**
+ * Break renames, and put messages back into their previous state.
+ * @param string $languageCode
+ * @param string $msgKey
+ * @return string|null previous state of the message
+ */
+ public function breakRename( $languageCode, $msgKey ) {
+ $msg = $this->findMessage( $languageCode, $msgKey, [ self::RENAME ] );
+ if ( $msg === null ) {
+ return null;
+ }
+ $matchedMsg = $this->getMatchedMessage( $languageCode, $msg['key'] );
+ if ( $matchedMsg === null ) {
+ return null;
+ }
+
+ // Remove them from the renames array
+ $this->removeRenames( $languageCode, [ $matchedMsg['key'], $msg['key'] ] );
+
+ $matchedMsgState = $matchedMsg[ 'previous_state' ];
+ $msgState = $msg[ 'previous_state' ];
+
+ // Add them to the changes under the appropriate state
+ if ( $matchedMsgState !== self::NONE ) {
+ if ( $matchedMsgState === self::CHANGE ) {
+ $matchedMsg['key'] = $msg['key'];
+ }
+ call_user_func(
+ $this->addFunctionMap[ $matchedMsgState ],
+ $languageCode,
+ $matchedMsg['key'],
+ $matchedMsg['content']
+ );
+ }
+
+ if ( $msgState !== self::NONE ) {
+ if ( $msgState === self::CHANGE ) {
+ $msg['key'] = $matchedMsg['key'];
+ }
+ call_user_func(
+ $this->addFunctionMap[ $msgState ],
+ $languageCode,
+ $msg['key'],
+ $msg['content']
+ );
+ }
+
+ return $msgState;
+ }
+
+ /**
+ * Fetch renames for a message group under a language
+ * @param string $language
+ * @return array[]
+ */
+ public function getRenames( $language ) {
+ $renames = $this->getModification( $language, self::RENAME );
+ foreach ( $renames as $key => &$rename ) {
+ $rename['key'] = $key;
+ }
+
+ return $renames;
+ }
+
+ /**
+ * @param string $language
+ * @param string $type
+ * @return array[]
+ */
+ protected function getModification( $language, $type ) {
+ return $this->changes[$language][$type] ?? [];
+ }
+
+ /**
+ * Remove additions for a language under the group.
+ * @param string $language
+ * @param array|null $keysToRemove
+ */
+ public function removeAdditions( $language, $keysToRemove ) {
+ $this->removeModification( $language, self::ADDITION, $keysToRemove );
+ }
+
+ /**
+ * Remove deletions for a language under the group.
+ * @param string $language
+ * @param array|null $keysToRemove
+ */
+ public function removeDeletions( $language, $keysToRemove ) {
+ $this->removeModification( $language, self::DELETION, $keysToRemove );
+ }
+
+ /**
+ * Remove changes for a language under the group.
+ * @param string $language
+ * @param array|null $keysToRemove
+ */
+ public function removeChanges( $language, $keysToRemove ) {
+ $this->removeModification( $language, self::CHANGE, $keysToRemove );
+ }
+
+ /**
+ * Remove renames for a language under the group.
+ * @param string $language
+ * @param array|null $keysToRemove
+ */
+ public function removeRenames( $language, $keysToRemove ) {
+ $this->removeModification( $language, self::RENAME, $keysToRemove );
+ }
+
+ /**
+ * Remove modifications based on the type. Avoids usage of ugly if / switch
+ * statement.
+ * @param string $language
+ * @param array $keysToRemove
+ * @param string $type One of ADDITION, CHANGE, DELETION
+ */
+ public function removeBasedOnType( $language, $keysToRemove, $type ) {
+ $callable = $this->removeFunctionMap[ $type ] ?? null;
+
+ if ( $callable === null ) {
+ throw new InvalidArgumentException( 'Type should be one of ' .
+ implode( ', ', [ self::ADDITION, self::CHANGE, self::DELETION ] ) .
+ ". Invalid type $type passed."
+ );
+ }
+
+ call_user_func( $callable, $language, $keysToRemove );
+ }
+
+ /**
+ * Remove all language related changes for a group.
+ * @param string $language
+ */
+ public function removeChangesForLanguage( $language ) {
+ unset( $this->changes[ $language ] );
+ }
+
+ protected function removeModification( $language, $type, $keysToRemove = null ) {
+ if ( !isset( $this->changes[$language][$type] ) ) {
+ return;
+ }
+
+ if ( $keysToRemove === null ) {
+ unset( $this->changes[$language][$type] );
+ }
+
+ if ( $keysToRemove === [] ) {
+ return;
+ }
+
+ if ( $type === self::RENAME ) {
+ $this->changes[$language][$type] =
+ array_diff_key( $this->changes[$language][$type], array_flip( $keysToRemove ) );
+ } else {
+ $this->changes[$language][$type] = array_filter(
+ $this->changes[$language][$type],
+ static function ( $change ) use ( $keysToRemove ) {
+ return !in_array( $change['key'], $keysToRemove, true );
+ }
+ );
+ }
+ }
+
+ /**
+ * Return all modifications for the group.
+ * @return array[][][]
+ */
+ public function getAllModifications() {
+ return $this->changes;
+ }
+
+ /**
+ * Get all for a language under the group.
+ * @param string $language
+ * @return array[][]
+ */
+ public function getModificationsForLanguage( $language ) {
+ return $this->changes[$language] ?? [];
+ }
+
+ /**
+ * Loads the changes, and returns an instance of the class.
+ * @param array $changesData
+ * @return self
+ */
+ public static function loadModifications( $changesData ) {
+ return new self( $changesData );
+ }
+
+ /**
+ * Get all language keys with modifications under the group
+ * @return string[]
+ */
+ public function getLanguages() {
+ return array_keys( $this->changes );
+ }
+
+ /**
+ * Determines if the group has only a certain type of change under a language.
+ *
+ * @param string $language
+ * @param string $type
+ * @return bool
+ */
+ public function hasOnly( $language, $type ) {
+ $deletions = $this->getDeletions( $language );
+ $additions = $this->getAdditions( $language );
+ $renames = $this->getRenames( $language );
+ $changes = $this->getChanges( $language );
+ $hasOnlyAdditions = $hasOnlyRenames =
+ $hasOnlyChanges = $hasOnlyDeletions = true;
+
+ if ( $deletions ) {
+ $hasOnlyAdditions = $hasOnlyRenames = $hasOnlyChanges = false;
+ }
+
+ if ( $renames ) {
+ $hasOnlyDeletions = $hasOnlyAdditions = $hasOnlyChanges = false;
+ }
+
+ if ( $changes ) {
+ $hasOnlyAdditions = $hasOnlyRenames = $hasOnlyDeletions = false;
+ }
+
+ if ( $additions ) {
+ $hasOnlyDeletions = $hasOnlyRenames = $hasOnlyChanges = false;
+ }
+
+ if ( $type === self::DELETION ) {
+ $response = $hasOnlyDeletions;
+ } elseif ( $type === self::RENAME ) {
+ $response = $hasOnlyRenames;
+ } elseif ( $type === self::CHANGE ) {
+ $response = $hasOnlyChanges;
+ } elseif ( $type === self::ADDITION ) {
+ $response = $hasOnlyAdditions;
+ } else {
+ throw new InvalidArgumentException( "Unknown $type passed." );
+ }
+
+ return $response;
+ }
+
+ /**
+ * Checks if the previous state of a renamed message matches a given value
+ * @param string $languageCode
+ * @param string $key
+ * @param string[] $types
+ * @return bool
+ */
+ public function isPreviousState( $languageCode, $key, array $types ) {
+ $msg = $this->findMessage( $languageCode, $key, [ self::RENAME ] );
+
+ return isset( $msg['previous_state'] ) && in_array( $msg['previous_state'], $types );
+ }
+
+ /**
+ * Get matched rename message for a given key
+ * @param string $languageCode
+ * @param string $key
+ * @return array Matched message if found, else null
+ */
+ public function getMatchedMessage( $languageCode, $key ) {
+ $matchedKey = $this->getMatchedKey( $languageCode, $key );
+ if ( $matchedKey ) {
+ return $this->changes[ $languageCode ][ self::RENAME ][ $matchedKey ] ?? null;
+ }
+
+ return null;
+ }
+
+ /**
+ * Get matched rename key for a given key
+ * @param string $languageCode
+ * @param string $key
+ * @return string|null Matched key if found, else null
+ */
+ public function getMatchedKey( $languageCode, $key ) {
+ return $this->changes[ $languageCode ][ self::RENAME ][ $key ][ 'matched_to' ] ?? null;
+ }
+
+ /**
+ * Returns the calculated similarity for a rename
+ * @param string $languageCode
+ * @param string $key
+ * @return float|null
+ */
+ public function getSimilarity( $languageCode, $key ) {
+ $msg = $this->findMessage( $languageCode, $key, [ self::RENAME ] );
+
+ return $msg[ 'similarity' ] ?? null;
+ }
+
+ /**
+ * Checks if a given key is equal to matched rename message
+ * @param string $languageCode
+ * @param string $key
+ * @return bool
+ */
+ public function isEqual( $languageCode, $key ) {
+ $msg = $this->findMessage( $languageCode, $key, [ self::RENAME ] );
+ return $msg && $this->areStringsEqual( $msg[ 'similarity' ] );
+ }
+
+ /**
+ * Checks if a given key is similar to matched rename message
+ *
+ * @param string $languageCode
+ * @param string $key
+ * @return bool
+ */
+ public function isSimilar( $languageCode, $key ) {
+ $msg = $this->findMessage( $languageCode, $key, [ self::RENAME ] );
+ return $msg && $this->areStringsSimilar( $msg[ 'similarity' ] );
+ }
+
+ /**
+ * Checks if the similarity percent passed passes the min threshold
+ * @param float $similarity
+ * @return bool
+ */
+ public function areStringsSimilar( $similarity ) {
+ return $similarity >= self::SIMILARITY_THRESHOLD;
+ }
+
+ /**
+ * Checks if the similarity percent passed
+ * @param float $similarity
+ * @return bool
+ */
+ public function areStringsEqual( $similarity ) {
+ return $similarity === 1;
+ }
+}
diff --git a/Translate/src/PageTranslation/DeleteTranslatableBundleSpecialPage.php b/Translate/src/PageTranslation/DeleteTranslatableBundleSpecialPage.php
new file mode 100644
index 00000000..8c57b2a6
--- /dev/null
+++ b/Translate/src/PageTranslation/DeleteTranslatableBundleSpecialPage.php
@@ -0,0 +1,458 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use BagOStuff;
+use ErrorPageError;
+use HTMLForm;
+use JobQueueGroup;
+use MediaWiki\Extension\Translate\MessageBundleTranslation\MessageBundle;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\DeleteTranslatableBundleJob;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\SubpageListBuilder;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\TranslatableBundle;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\TranslatableBundleFactory;
+use MediaWiki\Permissions\PermissionManager;
+use OutputPage;
+use PermissionsError;
+use ReadOnlyError;
+use SpecialPage;
+use Title;
+use TranslateUtils;
+use WebRequest;
+use Xml;
+
+/**
+ * Special page which enables deleting translations of translatable bundles and translation pages
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @ingroup SpecialPage PageTranslation
+ */
+class DeleteTranslatableBundleSpecialPage extends SpecialPage {
+ // Basic form parameters both as text and as titles
+ private $text;
+ /** @var Title */
+ private $title;
+ // Other form parameters
+ /// There must be reason for everything.
+ private $reason;
+ /// Allow skipping non-translation subpages.
+ private $doSubpages = false;
+ /// Contains the language code if we are working with translation page
+ private $code;
+ /** @var BagOStuff */
+ private $mainCache;
+ /** @var PermissionManager */
+ private $permissionManager;
+ /** @var TranslatableBundleFactory */
+ private $bundleFactory;
+ /** @var SubpageListBuilder */
+ private $subpageBuilder;
+ /** @var JobQueueGroup */
+ private $jobQueueGroup;
+ /** @var ?string */
+ private $entityType;
+ private const PAGE_TITLE_MSG = [
+ 'messagebundle' => 'pt-deletepage-mb-title',
+ 'translatablepage' => 'pt-deletepage-tp-title',
+ 'translationpage' => 'pt-deletepage-lang-title'
+ ];
+ private const WRAPPER_LEGEND_MSG = [
+ 'messagebundle' => 'pt-deletepage-mb-legend',
+ 'translatablepage' => 'pt-deletepage-tp-title',
+ 'translationpage' => 'pt-deletepage-tp-legend'
+ ];
+ private const LOG_PAGE = [
+ 'messagebundle' => 'Special:Log/messagebundle',
+ 'translatablepage' => 'Special:Log/pagetranslation',
+ 'translationpage' => 'Special:Log/pagetranslation'
+ ];
+
+ public function __construct(
+ BagOStuff $mainCache,
+ PermissionManager $permissionManager,
+ TranslatableBundleFactory $bundleFactory,
+ SubpageListBuilder $subpageBuilder,
+ JobQueueGroup $jobQueueGroup
+ ) {
+ parent::__construct( 'PageTranslationDeletePage', 'pagetranslation' );
+ $this->mainCache = $mainCache;
+ $this->permissionManager = $permissionManager;
+ $this->bundleFactory = $bundleFactory;
+ $this->subpageBuilder = $subpageBuilder;
+ $this->jobQueueGroup = $jobQueueGroup;
+ }
+
+ public function doesWrites() {
+ return true;
+ }
+
+ public function isListed() {
+ return false;
+ }
+
+ public function execute( $par ) {
+ $this->addhelpLink( 'Help:Deletion_and_undeletion' );
+
+ $request = $this->getRequest();
+
+ $par = (string)$par;
+
+ // Yes, the use of getVal() and getText() is wanted, see bug T22365
+ $this->text = $request->getVal( 'wpTitle', $par );
+ $this->title = Title::newFromText( $this->text );
+ $this->reason = $this->getDeleteReason( $request );
+ $this->doSubpages = $request->getBool( 'subpages' );
+
+ if ( !$this->doBasicChecks() ) {
+ return;
+ }
+
+ $out = $this->getOutput();
+
+ // Real stuff starts here
+ $this->entityType = $this->identifyEntityType();
+ if ( !$this->entityType ) {
+ throw new ErrorPageError( 'pt-deletepage-invalid-title', 'pt-deletepage-invalid-text' );
+ }
+
+ if ( $this->isTranslation() ) {
+ [ , $this->code ] = TranslateUtils::figureMessage( $this->title->getText() );
+ } else {
+ $this->code = null;
+ }
+
+ $out->setPageTitle(
+ $this->msg( self::PAGE_TITLE_MSG[ $this->entityType ], $this->title->getPrefixedText() )
+ );
+
+ if ( !$this->getUser()->isAllowed( 'pagetranslation' ) ) {
+ throw new PermissionsError( 'pagetranslation' );
+ }
+
+ // Is there really no better way to do this?
+ $subactionText = $request->getText( 'subaction' );
+ switch ( $subactionText ) {
+ case $this->msg( 'pt-deletepage-action-check' )->text():
+ $subaction = 'check';
+ break;
+ case $this->msg( 'pt-deletepage-action-perform' )->text():
+ $subaction = 'perform';
+ break;
+ case $this->msg( 'pt-deletepage-action-other' )->text():
+ $subaction = '';
+ break;
+ default:
+ $subaction = '';
+ }
+
+ if ( $subaction === 'check' && $this->checkToken() && $request->wasPosted() ) {
+ $this->showConfirmation();
+ } elseif ( $subaction === 'perform' && $this->checkToken() && $request->wasPosted() ) {
+ $this->performAction();
+ } else {
+ $this->showForm();
+ }
+ }
+
+ /**
+ * Do the basic checks whether moving is possible and whether
+ * the input looks anywhere near sane.
+ * @throws PermissionsError|ErrorPageError|ReadOnlyError
+ * @return bool
+ */
+ private function doBasicChecks(): bool {
+ // Check rights
+ if ( !$this->userCanExecute( $this->getUser() ) ) {
+ $this->displayRestrictionError();
+ }
+
+ if ( $this->title === null ) {
+ throw new ErrorPageError( 'notargettitle', 'notargettext' );
+ }
+
+ if ( !$this->title->exists() ) {
+ throw new ErrorPageError( 'nopagetitle', 'nopagetext' );
+ }
+
+ $permissionErrors = $this->permissionManager->getPermissionErrors(
+ 'delete', $this->getUser(), $this->title
+ );
+ if ( count( $permissionErrors ) ) {
+ throw new PermissionsError( 'delete', $permissionErrors );
+ }
+
+ # Check for database lock
+ $this->checkReadOnly();
+
+ // Let the caller know it's safe to continue
+ return true;
+ }
+
+ /**
+ * Checks token. Use before real actions happen. Have to use wpEditToken
+ * for compatibility for SpecialMovepage.php.
+ * @return bool
+ */
+ private function checkToken(): bool {
+ return $this->getContext()->getCsrfTokenSet()->matchTokenField( 'wpEditToken' );
+ }
+
+ /** The query form. */
+ private function showForm(): void {
+ $this->getOutput()->addWikiMsg( 'pt-deletepage-intro', self::LOG_PAGE[ $this->entityType ] );
+
+ $formDescriptor = $this->getCommonFormFields();
+
+ HTMLForm::factory( 'ooui', $formDescriptor, $this->getContext() )
+ ->setAction( $this->getPageTitle( $this->text )->getLocalURL() )
+ ->setSubmitName( 'subaction' )
+ ->setSubmitTextMsg( 'pt-deletepage-action-check' )
+ ->setWrapperLegendMsg( 'pt-deletepage-any-legend' )
+ ->prepareForm()
+ ->displayForm( false );
+ }
+
+ /**
+ * The second form, which still allows changing some things.
+ * Lists all the action which would take place.
+ */
+ private function showConfirmation(): void {
+ $out = $this->getOutput();
+ $count = 0;
+ $subpageCount = 0;
+
+ $out->addWikiMsg( 'pt-deletepage-intro', self::LOG_PAGE[ $this->entityType ] );
+
+ $subpages = $this->getPagesForDeletion();
+
+ $out->wrapWikiMsg( '== $1 ==', 'pt-deletepage-list-pages' );
+
+ if ( !$this->isTranslation() ) {
+ $count++;
+ $out->addWikiTextAsInterface(
+ $this->getChangeLine( $this->title )
+ );
+ }
+
+ $out->wrapWikiMsg( '=== $1 ===', 'pt-deletepage-list-translation' );
+ $lines = [];
+ foreach ( $subpages[ 'translationPages' ] as $old ) {
+ $count++;
+ $lines[] = $this->getChangeLine( $old );
+ }
+ $this->listPages( $out, $lines );
+
+ $out->wrapWikiMsg( '=== $1 ===', 'pt-deletepage-list-section' );
+
+ $lines = [];
+ foreach ( $subpages[ 'translationUnitPages' ] as $old ) {
+ $count++;
+ $lines[] = $this->getChangeLine( $old );
+ }
+ $this->listPages( $out, $lines );
+
+ if ( TranslateUtils::allowsSubpages( $this->title ) ) {
+ $out->wrapWikiMsg( '=== $1 ===', 'pt-deletepage-list-other' );
+ $subpages = $subpages[ 'normalSubpages' ];
+ $lines = [];
+ foreach ( $subpages as $old ) {
+ $subpageCount++;
+ $lines[] = $this->getChangeLine( $old );
+ }
+ $this->listPages( $out, $lines );
+ }
+
+ $totalPageCount = $count + $subpageCount;
+
+ $out->addWikiTextAsInterface( "----\n" );
+ $out->addWikiMsg(
+ 'pt-deletepage-list-count',
+ $this->getLanguage()->formatNum( $totalPageCount ),
+ $this->getLanguage()->formatNum( $subpageCount )
+ );
+
+ $formDescriptor = $this->getCommonFormFields();
+ $formDescriptor['subpages'] = [
+ 'type' => 'check',
+ 'name' => 'subpages',
+ 'id' => 'mw-subpages',
+ 'label' => $this->msg( 'pt-deletepage-subpages' )->text(),
+ 'default' => $this->doSubpages,
+ ];
+
+ $htmlForm = HTMLForm::factory( 'ooui', $formDescriptor, $this->getContext() );
+ $htmlForm
+ ->setWrapperLegendMsg(
+ $this->msg( self::WRAPPER_LEGEND_MSG[ $this->entityType ], $this->title->getPrefixedText() )
+ )
+ ->setAction( $this->getPageTitle( $this->text )->getLocalURL() )
+ ->setSubmitTextMsg( 'pt-deletepage-action-perform' )
+ ->setSubmitName( 'subaction' )
+ ->addButton( [
+ 'name' => 'subaction',
+ 'value' => $this->msg( 'pt-deletepage-action-other' )->text(),
+ ] )
+ ->prepareForm()
+ ->displayForm( false );
+ }
+
+ /** @return string One line of wikitext, without trailing newline. */
+ private function getChangeLine( Title $title ): string {
+ return '* ' . $title->getPrefixedText();
+ }
+
+ private function performAction(): void {
+ $jobs = [];
+ $target = $this->title;
+ $base = $this->title->getPrefixedText();
+ $isTranslation = $this->isTranslation();
+ $subpageList = $this->getPagesForDeletion();
+ $bundle = $this->getValidBundleFromTitle();
+ $bundleType = get_class( $bundle );
+
+ $user = $this->getUser();
+ foreach ( $subpageList[ 'translationPages' ] as $old ) {
+ $jobs[$old->getPrefixedText()] = DeleteTranslatableBundleJob::newJob(
+ $old, $base, $bundleType, $isTranslation, $user, $this->reason
+ );
+ }
+
+ foreach ( $subpageList[ 'translationUnitPages' ] as $old ) {
+ $jobs[$old->getPrefixedText()] = DeleteTranslatableBundleJob::newJob(
+ $old, $base, $bundleType, $isTranslation, $user, $this->reason
+ );
+ }
+
+ if ( $this->doSubpages ) {
+ foreach ( $subpageList[ 'normalSubpages' ] as $old ) {
+ $jobs[$old->getPrefixedText()] = DeleteTranslatableBundleJob::newJob(
+ $old, $base, $bundleType, $isTranslation, $user, $this->reason
+ );
+ }
+ }
+
+ if ( !$isTranslation ) {
+ $jobs[$this->title->getPrefixedText()] = DeleteTranslatableBundleJob::newJob(
+ $this->title, $base, $bundleType, $isTranslation, $user, $this->reason
+ );
+ }
+
+ $this->jobQueueGroup->push( $jobs );
+
+ $this->mainCache->set(
+ $this->mainCache->makeKey( 'pt-base', $target->getPrefixedText() ),
+ array_keys( $jobs ),
+ 6 * $this->mainCache::TTL_HOUR
+ );
+
+ if ( !$isTranslation ) {
+ $this->bundleFactory->getStore( $bundle )->delete( $this->title );
+ }
+
+ $this->getOutput()->addWikiMsg( 'pt-deletepage-started', self::LOG_PAGE[ $this->entityType ] );
+ }
+
+ private function getCommonFormFields(): array {
+ $dropdownOptions = $this->msg( 'deletereason-dropdown' )->inContentLanguage()->text();
+
+ $options = Xml::listDropDownOptions(
+ $dropdownOptions,
+ [
+ 'other' => $this->msg( 'pt-deletepage-reason-other' )->inContentLanguage()->text()
+ ]
+ );
+
+ return [
+ 'wpTitle' => [
+ 'type' => 'text',
+ 'name' => 'wpTitle',
+ 'label-message' => 'pt-deletepage-current',
+ 'size' => 30,
+ 'default' => $this->text,
+ 'readonly' => true,
+ ],
+ 'wpDeleteReasonList' => [
+ 'type' => 'select',
+ 'name' => 'wpDeleteReasonList',
+ 'label-message' => 'pt-deletepage-reason',
+ 'options' => $options,
+ ],
+ 'wpReason' => [
+ 'type' => 'text',
+ 'name' => 'wpReason',
+ 'label-message' => 'pt-deletepage-reason-details',
+ 'default' => $this->reason,
+ ]
+ ];
+ }
+
+ private function listPages( OutputPage $out, array $lines ): void {
+ if ( $lines ) {
+ $out->addWikiTextAsInterface( implode( "\n", $lines ) );
+ } else {
+ $out->addWikiMsg( 'pt-deletepage-list-no-pages' );
+ }
+ }
+
+ private function getDeleteReason( WebRequest $request ): string {
+ $dropdownSelection = $request->getText( 'wpDeleteReasonList', 'other' );
+ $reasonInput = $request->getText( 'wpReason' );
+
+ if ( $dropdownSelection === 'other' ) {
+ return $reasonInput;
+ } elseif ( $reasonInput !== '' ) {
+ // Entry from drop down menu + additional comment
+ $separator = $this->msg( 'colon-separator' )->inContentLanguage()->text();
+ return "$dropdownSelection$separator$reasonInput";
+ } else {
+ return $dropdownSelection;
+ }
+ }
+
+ private function getPagesForDeletion(): array {
+ if ( $this->isTranslation() ) {
+ $resultSet = $this->subpageBuilder->getEmptyResultSet();
+
+ [ $titleKey, ] = TranslateUtils::figureMessage( $this->title->getPrefixedDBkey() );
+ $translatablePage = TranslatablePage::newFromTitle( Title::newFromText( $titleKey ) );
+
+ $resultSet['translationPages'] = [ $this->title ];
+ $resultSet['translationUnitPages'] = $translatablePage->getTranslationUnitPages( $this->code );
+ return $resultSet;
+ } else {
+ $bundle = $this->bundleFactory->getValidBundle( $this->title );
+ return $this->subpageBuilder->getSubpagesPerType( $bundle, false );
+ }
+ }
+
+ private function getValidBundleFromTitle(): TranslatableBundle {
+ $bundleTitle = $this->title;
+ if ( $this->isTranslation() ) {
+ [ $key, ] = TranslateUtils::figureMessage( $this->title->getPrefixedDBkey() );
+ $bundleTitle = Title::newFromText( $key );
+ }
+
+ return $this->bundleFactory->getValidBundle( $bundleTitle );
+ }
+
+ /** Indentify type of entity being deleted: messagebundle, translatablepage, or translations */
+ private function identifyEntityType(): ?string {
+ $bundle = $this->bundleFactory->getBundle( $this->title );
+ if ( $bundle ) {
+ if ( $bundle instanceof MessageBundle ) {
+ return 'messagebundle';
+ } else {
+ return 'translatablepage';
+ }
+ } elseif ( TranslatablePage::isTranslationPage( $this->title ) ) {
+ return 'translationpage';
+ }
+
+ return null;
+ }
+
+ private function isTranslation(): bool {
+ return $this->entityType === 'translationpage';
+ }
+}
diff --git a/Translate/src/PageTranslation/Hooks.php b/Translate/src/PageTranslation/Hooks.php
new file mode 100644
index 00000000..b71f7897
--- /dev/null
+++ b/Translate/src/PageTranslation/Hooks.php
@@ -0,0 +1,1666 @@
+<?php
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use Article;
+use CommentStoreComment;
+use Content;
+use DeferredUpdates;
+use Exception;
+use Html;
+use IContextSource;
+use Language;
+use LanguageCode;
+use LinkBatch;
+use ManualLogEntry;
+use MediaWiki\Extension\Translate\MessageBundleTranslation\MessageBundleMessageGroup;
+use MediaWiki\Extension\Translate\Services;
+use MediaWiki\Extension\Translate\SystemUsers\FuzzyBot;
+use MediaWiki\Linker\LinkTarget;
+use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\MediaWikiServices;
+use MediaWiki\Page\PageIdentity;
+use MediaWiki\Revision\MutableRevisionRecord;
+use MediaWiki\Revision\RenderedRevision;
+use MediaWiki\Revision\RevisionRecord;
+use MediaWiki\Revision\SlotRecord;
+use MediaWiki\Storage\EditResult;
+use MediaWiki\User\UserIdentity;
+use MessageGroupStats;
+use MessageHandle;
+use ObjectCache;
+use OutputPage;
+use Parser;
+use ParserOutput;
+use RequestContext;
+use Skin;
+use SpecialPage;
+use Status;
+use StubUserLang;
+use TextContent;
+use Title;
+use TranslateMetadata;
+use TranslateUtils;
+use User;
+use UserBlockedError;
+use Wikimedia\ScopedCallback;
+use WikiPage;
+use WikiPageMessageGroup;
+use WikitextContent;
+
+/**
+ * Hooks for page translation.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @ingroup PageTranslation
+ */
+class Hooks {
+ // Uuugly hacks
+ public static $allowTargetEdit = false;
+ // Check if job queue is running
+ public static $jobQueueRunning = false;
+ // Check if we are just rendering tags or such
+ public static $renderingContext = false;
+ // Used to communicate data between LanguageLinks and SkinTemplateGetLanguageLink hooks.
+ private static $languageLinkData = [];
+
+ /**
+ * Hook: ParserBeforeInternalParse
+ * @param Parser $wikitextParser
+ * @param null|string &$text
+ * @param-taint $text escapes_htmlnoent
+ * @param mixed $state
+ */
+ public static function renderTagPage( $wikitextParser, &$text, $state ): void {
+ if ( $text === null ) {
+ // SMW is unhelpfully sending null text if source contains section tags. Do not explode.
+ return;
+ }
+
+ self::preprocessTagPage( $wikitextParser, $text, $state );
+
+ // Skip further interface message parsing
+ if ( $wikitextParser->getOptions()->getInterfaceMessage() ) {
+ return;
+ }
+
+ // For section previews, perform additional clean-up, given tags are often
+ // unbalanced when we preview one section only.
+ if ( $wikitextParser->getOptions()->getIsSectionPreview() ) {
+ $translatablePageParser = Services::getInstance()->getTranslatablePageParser();
+ $text = $translatablePageParser->cleanupTags( $text );
+ }
+
+ // Set display title
+ $title = MediaWikiServices::getInstance()
+ ->getTitleFactory()
+ ->castFromPageReference( $wikitextParser->getPage() );
+
+ if ( !$title ) {
+ return;
+ }
+
+ $page = TranslatablePage::isTranslationPage( $title );
+ if ( !$page ) {
+ return;
+ }
+
+ try {
+ self::$renderingContext = true;
+ [ , $code ] = TranslateUtils::figureMessage( $title->getText() );
+ $name = $page->getPageDisplayTitle( $code );
+ if ( $name ) {
+ $name = $wikitextParser->recursivePreprocess( $name );
+
+ $langConv = MediaWikiServices::getInstance()->getLanguageConverterFactory()
+ ->getLanguageConverter( $wikitextParser->getTargetLanguage() );
+ $name = $langConv->convert( $name );
+ $wikitextParser->getOutput()->setDisplayTitle( $name );
+ }
+ self::$renderingContext = false;
+ } catch ( Exception $e ) {
+ LoggerFactory::getInstance( 'Translate' )->error(
+ 'T302754 Failed to set display title for page {title}',
+ [
+ 'title' => $title->getPrefixedDBkey(),
+ 'text' => $text,
+ 'pageid' => $title->getId(),
+ ]
+ );
+
+ // Re-throw to preserve behavior
+ throw $e;
+ }
+
+ $extensionData = [
+ 'languagecode' => $code,
+ 'messagegroupid' => $page->getMessageGroupId(),
+ 'sourcepagetitle' => [
+ 'namespace' => $page->getTitle()->getNamespace(),
+ 'dbkey' => $page->getTitle()->getDBkey()
+ ]
+ ];
+
+ $wikitextParser->getOutput()->setExtensionData(
+ 'translate-translation-page', $extensionData
+ );
+
+ // Disable edit section links
+ $wikitextParser->getOutput()->setExtensionData( 'Translate-noeditsection', true );
+ }
+
+ /**
+ * Hook: ParserBeforePreprocess
+ * @param Parser $wikitextParser
+ * @param string &$text
+ * @param-taint $text escapes_htmlnoent
+ * @param mixed $state
+ */
+ public static function preprocessTagPage( $wikitextParser, &$text, $state ): void {
+ $translatablePageParser = Services::getInstance()->getTranslatablePageParser();
+
+ if ( $translatablePageParser->containsMarkup( $text ) ) {
+ try {
+ $parserOutput = $translatablePageParser->parse( $text );
+ // If parsing succeeds, replace text and add styles
+ $text = $parserOutput->sourcePageTextForRendering(
+ $wikitextParser->getTargetLanguage()
+ );
+ $wikitextParser->getOutput()->addModuleStyles( [
+ 'ext.translate',
+ ] );
+ } catch ( ParsingFailure $e ) {
+ wfDebug( 'ParsingFailure caught; expected' );
+ }
+ } else {
+ // If the text doesn't contain <translate> markup, it can still contain <tvar> in the
+ // context of a Parsoid template expansion sub-pipeline. We strip these as well.
+ $unit = new TranslationUnit( $text );
+ $text = $unit->getTextForTrans();
+ }
+ }
+
+ /**
+ * Hook: ParserOutputPostCacheTransform
+ * @param ParserOutput $out
+ * @param string &$text
+ * @param array &$options
+ */
+ public static function onParserOutputPostCacheTransform(
+ ParserOutput $out,
+ &$text,
+ array &$options
+ ) {
+ if ( $out->getExtensionData( 'Translate-noeditsection' ) ) {
+ $options['enableSectionEditLinks'] = false;
+ }
+ }
+
+ /**
+ * This sets &$revRecord to the revision of transcluded page translation if it exists,
+ * or sets it to the source language if the page translation does not exist.
+ * The page translation is chosen based on language of the source page.
+ *
+ * Hook: BeforeParserFetchTemplateRevisionRecord
+ * @param LinkTarget|null $contextLink
+ * @param LinkTarget|null $templateLink
+ * @param bool &$skip
+ * @param RevisionRecord|null &$revRecord
+ */
+ public static function fetchTranslatableTemplateAndTitle(
+ ?LinkTarget $contextLink,
+ ?LinkTarget $templateLink,
+ bool &$skip,
+ ?RevisionRecord &$revRecord
+ ): void {
+ if ( !$templateLink ) {
+ return;
+ }
+
+ $templateTitle = Title::castFromLinkTarget( $templateLink );
+
+ $templateTranslationPage = TranslatablePage::isTranslationPage( $templateTitle );
+ if ( $templateTranslationPage ) {
+ // Template is referring to a translation page, fetch it and incase it doesn't
+ // exist, fetch the source fallback
+ $revRecord = $templateTranslationPage->getRevisionRecordWithFallback();
+ return;
+ }
+
+ if ( !TranslatablePage::isSourcePage( $templateTitle ) ) {
+ return;
+ }
+
+ $translatableTemplatePage = TranslatablePage::newFromTitle( $templateTitle );
+
+ if ( !( $translatableTemplatePage->supportsTransclusion() ?? false ) ) {
+ // Page being transcluded does not support language aware transclusion
+ return;
+ }
+
+ $store = MediaWikiServices::getInstance()->getRevisionStore();
+
+ if ( $contextLink ) {
+ // Fetch the context page language, and then check if template is present in that language
+ $templateTranslationTitle = $templateTitle->getSubpage(
+ Title::castFromLinkTarget( $contextLink )->getPageLanguage()->getCode()
+ );
+
+ if ( $templateTranslationTitle ) {
+ if ( $templateTranslationTitle->exists() ) {
+ // Template is present in the context page language, fetch the revision record and return
+ $revRecord = $store->getRevisionByTitle( $templateTranslationTitle );
+ } else {
+ // In case the template has not been translated to the context page language,
+ // we assign a MutableRevisionRecord in order to add a dependency, so that when
+ // it is created, the newly created page is loaded rather than the fallback
+ $revRecord = new MutableRevisionRecord( $templateTranslationTitle );
+ }
+ return;
+ }
+ }
+
+ // Context page information not available OR the template translation title could not be determined.
+ // Fetch and return the RevisionRecord of the template in the source language
+ $sourceTemplateTitle = $templateTitle->getSubpage(
+ $translatableTemplatePage->getMessageGroup()->getSourceLanguage()
+ );
+ if ( $sourceTemplateTitle && $sourceTemplateTitle->exists() ) {
+ $revRecord = $store->getRevisionByTitle( $sourceTemplateTitle );
+ }
+ }
+
+ /**
+ * Set the right page content language for translated pages ("Page/xx").
+ * Hook: PageContentLanguage
+ * @param Title $title
+ * @param Language|StubUserLang|string &$pageLang
+ */
+ public static function onPageContentLanguage( Title $title, &$pageLang ) {
+ // For translation pages, parse plural, grammar etc with correct language,
+ // and set the right direction
+ if ( TranslatablePage::isTranslationPage( $title ) ) {
+ [ , $code ] = TranslateUtils::figureMessage( $title->getText() );
+ $pageLang = MediaWikiServices::getInstance()->getLanguageFactory()->getLanguage( $code );
+ }
+ }
+
+ /**
+ * Display an edit notice for translatable source pages if it's enabled
+ * Hook: TitleGetEditNotices
+ * @param Title $title
+ * @param int $oldid
+ * @param array &$notices
+ */
+ public static function onTitleGetEditNotices( Title $title, int $oldid, array &$notices ) {
+ if ( TranslatablePage::isSourcePage( $title ) ) {
+ $msg = wfMessage( 'translate-edit-tag-warning' )->inContentLanguage();
+ if ( !$msg->isDisabled() ) {
+ $notices['translate-tag'] = $msg->parseAsBlock();
+ }
+
+ $notices[] = Html::warningBox(
+ wfMessage( 'tps-edit-sourcepage-text' )->parse(),
+ 'translate-edit-documentation'
+ );
+ // TECHNICALLY this would only be necessary for 1.38+, but the way the message is
+ // written is also true for 1.37-; therefore it's reasonable to not add another version
+ // check here.
+ // The check is "we're using visual editor for WYSIWYG" (as opposed to "for wikitext
+ // edition") - the message will not be displayed in that case.
+ $request = RequestContext::getMain()->getRequest();
+ if ( $request->getVal( 'action' ) === 'visualeditor' &&
+ $request->getVal( 'paction' ) !== 'wikitext'
+ ) {
+ $notices[] = Html::warningBox(
+ wfMessage( 'tps-edit-sourcepage-ve-warning-limited-text' )->parse(),
+ 'translate-edit-documentation'
+ );
+ }
+ }
+ }
+
+ /**
+ * Hook: BeforePageDisplay
+ * @param OutputPage $out
+ * @param Skin $skin
+ * @return true
+ */
+ public static function onBeforePageDisplay( OutputPage $out, Skin $skin ) {
+ global $wgTranslatePageTranslationULS;
+
+ $title = $out->getTitle();
+ $isSource = TranslatablePage::isSourcePage( $title );
+ $isTranslation = TranslatablePage::isTranslationPage( $title );
+
+ if ( $isSource || $isTranslation ) {
+ if ( $wgTranslatePageTranslationULS ) {
+ $out->addModules( 'ext.translate.pagetranslation.uls' );
+ }
+
+ if ( $isSource ) {
+ // Adding a help notice
+ $out->addModuleStyles( 'ext.translate.edit.documentation.styles' );
+ $out->addModules( 'ext.translate.edit.documentation' );
+ }
+
+ if ( $isTranslation ) {
+ // Source pages get this module via <translate>, but for translation
+ // pages we need to add it manually.
+ $out->addModuleStyles( 'ext.translate' );
+ $out->addJsConfigVars( 'wgTranslatePageTranslation', 'translation' );
+ } else {
+ $out->addJsConfigVars( 'wgTranslatePageTranslation', 'source' );
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Hook: onVisualEditorBeforeEditor
+ * @param OutputPage $out
+ * @param Skin $skin
+ * @return bool
+ */
+ public static function onVisualEditorBeforeEditor( OutputPage $out, Skin $skin ) {
+ return !TranslatablePage::isTranslationPage( $out->getTitle() );
+ }
+
+ /**
+ * This is triggered after an edit to translation unit page
+ * @param WikiPage $wikiPage
+ * @param User $user
+ * @param TextContent $content
+ * @param string $summary
+ * @param bool $minor
+ * @param int $flags
+ * @param MessageHandle $handle
+ * @return true
+ */
+ public static function onSectionSave(
+ WikiPage $wikiPage,
+ User $user,
+ TextContent $content,
+ $summary,
+ $minor,
+ $flags,
+ MessageHandle $handle
+ ) {
+ // FuzzyBot may do some duplicate work already worked on by other jobs
+ if ( $user->equals( FuzzyBot::getUser() ) ) {
+ return true;
+ }
+
+ $group = $handle->getGroup();
+ if ( !$group instanceof WikiPageMessageGroup ) {
+ return true;
+ }
+
+ // Finally we know the title and can construct a Translatable page
+ $page = TranslatablePage::newFromTitle( $group->getTitle() );
+
+ // Update the target translation page
+ if ( !$handle->isDoc() ) {
+ $code = $handle->getCode();
+ DeferredUpdates::addCallableUpdate(
+ function () use ( $page, $code, $user, $flags, $summary, $handle ) {
+ $unitTitle = $handle->getTitle();
+ self::updateTranslationPage( $page, $code, $user, $flags, $summary, null, $unitTitle );
+ }
+ );
+ }
+
+ return true;
+ }
+
+ private static function updateTranslationPage(
+ TranslatablePage $page,
+ string $code,
+ User $user,
+ int $flags,
+ string $summary,
+ ?string $triggerAction = null,
+ ?Title $unitTitle = null
+ ): void {
+ $source = $page->getTitle();
+ $target = $source->getSubpage( $code );
+ $mwInstance = MediaWikiServices::getInstance();
+
+ // We don't know and don't care
+ $flags &= ~EDIT_NEW & ~EDIT_UPDATE;
+
+ // Update the target page
+ $unitTitleText = $unitTitle ? $unitTitle->getPrefixedText() : null;
+ $job = RenderTranslationPageJob::newJob( $target, $triggerAction, $unitTitleText );
+ $job->setUser( $user );
+ $job->setSummary( $summary );
+ $job->setFlags( $flags );
+ $mwInstance->getJobQueueGroup()->push( $job );
+
+ // Invalidate caches so that language bar is up-to-date
+ $pages = $page->getTranslationPages();
+ $wikiPageFactory = $mwInstance->getWikiPageFactory();
+ foreach ( $pages as $title ) {
+ if ( $title->equals( $target ) ) {
+ // Handled by the RenderTranslationPageJob
+ continue;
+ }
+
+ $wikiPage = $wikiPageFactory->newFromTitle( $title );
+ $wikiPage->doPurge();
+ }
+ $sourceWikiPage = $wikiPageFactory->newFromTitle( $source );
+ $sourceWikiPage->doPurge();
+ }
+
+ /**
+ * @param string $data
+ * @param array $params
+ * @param Parser $parser
+ * @return string
+ */
+ public static function languages( $data, $params, $parser ) {
+ global $wgPageTranslationLanguageList;
+
+ if ( $wgPageTranslationLanguageList === 'sidebar-only' ) {
+ return '';
+ }
+
+ self::$renderingContext = true;
+ $context = new ScopedCallback( static function () {
+ self::$renderingContext = false;
+ } );
+
+ // Add a dummy language link that is removed in self::addLanguageLinks.
+ if ( $wgPageTranslationLanguageList === 'sidebar-fallback' ) {
+ $parser->getOutput()->addLanguageLink( 'x-pagetranslation-tag' );
+ }
+
+ $currentTitle = $parser->getTitle();
+ $pageStatus = self::getTranslatablePageStatus( $currentTitle );
+ if ( !$pageStatus ) {
+ return '';
+ }
+
+ $page = $pageStatus[ 'page' ];
+ $status = $pageStatus[ 'languages' ];
+ $pageTitle = $page->getTitle();
+
+ // Sort by language code, which seems to be the only sane method
+ ksort( $status );
+
+ // This way the parser knows to fragment the parser cache by language code
+ $userLang = $parser->getOptions()->getUserLangObj();
+ $userLangCode = $userLang->getCode();
+ // Should call $page->getMessageGroup()->getSourceLanguage(), but
+ // group is sometimes null on WMF during page moves, reason unknown.
+ // This should do the same thing for now.
+ $sourceLanguage = $pageTitle->getPageLanguage()->getCode();
+
+ $languages = [];
+ $langFactory = MediaWikiServices::getInstance()->getLanguageFactory();
+ foreach ( $status as $code => $percent ) {
+ // Get autonyms (null)
+ $name = TranslateUtils::getLanguageName( $code, null );
+
+ // Add links to other languages
+ $suffix = ( $code === $sourceLanguage ) ? '' : "/$code";
+ $targetTitleString = $pageTitle->getDBkey() . $suffix;
+ $subpage = Title::makeTitle( $pageTitle->getNamespace(), $targetTitleString );
+
+ $classes = [];
+ if ( $code === $userLangCode ) {
+ $classes[] = 'mw-pt-languages-ui';
+ }
+
+ $linker = $parser->getLinkRenderer();
+ $lang = $langFactory->getLanguage( $code );
+ if ( $currentTitle->equals( $subpage ) ) {
+ $classes[] = 'mw-pt-languages-selected';
+ $classes = array_merge( $classes, self::tpProgressIcon( (float)$percent ) );
+ $attribs = [
+ 'class' => $classes,
+ 'lang' => $lang->getHtmlCode(),
+ 'dir' => $lang->getDir(),
+ ];
+
+ $contents = Html::Element( 'span', $attribs, $name );
+ } elseif ( $subpage->isKnown() ) {
+ $pagename = $page->getPageDisplayTitle( $code );
+ if ( !is_string( $pagename ) ) {
+ $pagename = $subpage->getPrefixedText();
+ }
+
+ $classes = array_merge( $classes, self::tpProgressIcon( (float)$percent ) );
+
+ $title = wfMessage( 'tpt-languages-nonzero' )
+ ->inLanguage( $userLang )
+ ->params( $pagename )
+ ->numParams( 100 * $percent )
+ ->text();
+ $attribs = [
+ 'title' => $title,
+ 'class' => $classes,
+ 'lang' => $lang->getHtmlCode(),
+ 'dir' => $lang->getDir(),
+ ];
+
+ $contents = $linker->makeKnownLink( $subpage, $name, $attribs );
+ } else {
+ /* When language is included because it is a priority language,
+ * but translation does not yet exists, link directly to the
+ * translation view. */
+ $specialTranslateTitle = SpecialPage::getTitleFor( 'Translate' );
+ $params = [
+ 'group' => $page->getMessageGroupId(),
+ 'language' => $code,
+ 'task' => 'view'
+ ];
+
+ $classes[] = 'new'; // For red link color
+
+ $attribs = [
+ 'title' => wfMessage( 'tpt-languages-zero' )->inLanguage( $userLang )->text(),
+ 'class' => $classes,
+ 'lang' => $lang->getHtmlCode(),
+ 'dir' => $lang->getDir(),
+ ];
+ $contents = $linker->makeKnownLink( $specialTranslateTitle, $name, $attribs, $params );
+ }
+ $languages[ $name ] = Html::rawElement( 'li', [], $contents );
+ }
+
+ // Sort languages by autonym
+ ksort( $languages );
+ $languages = array_values( $languages );
+ $languages = implode( "\n", $languages );
+
+ $out = Html::openElement( 'div', [
+ 'class' => 'mw-pt-languages noprint',
+ 'lang' => $userLang->getHtmlCode(),
+ 'dir' => $userLang->getDir()
+ ] );
+ $out .= Html::rawElement( 'div', [ 'class' => 'mw-pt-languages-label' ],
+ wfMessage( 'tpt-languages-legend' )->inLanguage( $userLang )->escaped()
+ );
+ $out .= Html::rawElement(
+ 'ul',
+ [ 'class' => 'mw-pt-languages-list' ],
+ $languages
+ );
+ $out .= Html::closeElement( 'div' );
+
+ $parser->getOutput()->addModuleStyles( [
+ 'ext.translate.tag.languages',
+ ] );
+
+ return $out;
+ }
+
+ /**
+ * Return icon CSS class for given progress status: percentages
+ * are too accurate and take more space than simple images.
+ * @param float $percent
+ * @return string[]
+ */
+ private static function tpProgressIcon( float $percent ) {
+ $classes = [ 'mw-pt-progress' ];
+ $percent *= 100;
+ if ( $percent < 20 ) {
+ $classes[] = 'mw-pt-progress--stub';
+ } elseif ( $percent < 40 ) {
+ $classes[] = 'mw-pt-progress--low';
+ } elseif ( $percent < 60 ) {
+ $classes[] = 'mw-pt-progress--med';
+ } elseif ( $percent < 80 ) {
+ $classes[] = 'mw-pt-progress--high';
+ } else {
+ $classes[] = 'mw-pt-progress--complete';
+ }
+ return $classes;
+ }
+
+ /**
+ * Returns translatable page and language stats for given title.
+ * @param Title $title
+ * @return array|null Returns null if not a translatable page.
+ */
+ private static function getTranslatablePageStatus( Title $title ) {
+ // Check if this is a source page or a translation page
+ $page = TranslatablePage::newFromTitle( $title );
+ if ( $page->getMarkedTag() === null ) {
+ $page = TranslatablePage::isTranslationPage( $title );
+ }
+
+ if ( $page === false || $page->getMarkedTag() === null ) {
+ return null;
+ }
+
+ $status = $page->getTranslationPercentages();
+ if ( !$status ) {
+ return null;
+ }
+
+ // If priority languages have been set always show those languages
+ $priorityLangs = TranslateMetadata::get( $page->getMessageGroupId(), 'prioritylangs' );
+ $priorityForce = TranslateMetadata::get( $page->getMessageGroupId(), 'priorityforce' );
+ $filter = null;
+ if ( (string)$priorityLangs !== '' ) {
+ $filter = array_flip( explode( ',', $priorityLangs ) );
+ }
+ if ( $filter !== null ) {
+ // If translation is restricted to some languages, only show them
+ if ( $priorityForce === 'on' ) {
+ // Do not filter the source language link
+ $filter[$page->getMessageGroup()->getSourceLanguage()] = true;
+ $status = array_intersect_key( $status, $filter );
+ }
+ foreach ( $filter as $langCode => $value ) {
+ if ( !isset( $status[$langCode] ) ) {
+ // We need to show all priority languages even if no translation started
+ $status[$langCode] = 0;
+ }
+ }
+ }
+
+ return [
+ 'page' => $page,
+ 'languages' => $status
+ ];
+ }
+
+ /**
+ * Hooks: LanguageLinks
+ * @param Title $title Title of the page for which links are needed.
+ * @param array &$languageLinks List of language links to modify.
+ */
+ public static function addLanguageLinks( Title $title, array &$languageLinks ) {
+ global $wgPageTranslationLanguageList;
+
+ $hasLanguagesTag = false;
+ foreach ( $languageLinks as $index => $name ) {
+ if ( $name === 'x-pagetranslation-tag' ) {
+ $hasLanguagesTag = true;
+ unset( $languageLinks[ $index ] );
+ }
+ }
+
+ if ( $wgPageTranslationLanguageList === 'tag-only' ) {
+ return;
+ }
+
+ if ( $wgPageTranslationLanguageList === 'sidebar-fallback' && $hasLanguagesTag ) {
+ return;
+ }
+
+ // $wgPageTranslationLanguageList === 'sidebar-always' OR 'sidebar-only'
+
+ $status = self::getTranslatablePageStatus( $title );
+ if ( !$status ) {
+ return;
+ }
+
+ self::$renderingContext = true;
+ $context = new ScopedCallback( static function () {
+ self::$renderingContext = false;
+ } );
+
+ $page = $status[ 'page' ];
+ $languages = $status[ 'languages' ];
+ $mwServices = MediaWikiServices::getInstance();
+ $en = $mwServices->getLanguageFactory()->getLanguage( 'en' );
+
+ $newLanguageLinks = [];
+
+ // Batch the Title::exists queries used below
+ $lb = new LinkBatch();
+ foreach ( array_keys( $languages ) as $code ) {
+ $title = $page->getTitle()->getSubpage( $code );
+ $lb->addObj( $title );
+ }
+ $lb->execute();
+ $languageNameUtils = $mwServices->getLanguageNameUtils();
+ foreach ( $languages as $code => $percentage ) {
+ $title = $page->getTitle()->getSubpage( $code );
+ $key = "x-pagetranslation:{$title->getPrefixedText()}";
+ $translatedName = $page->getPageDisplayTitle( $code ) ?: $title->getPrefixedText();
+
+ if ( $title->exists() ) {
+ $href = $title->getLocalURL();
+ $classes = self::tpProgressIcon( (float)$percentage );
+ $title = wfMessage( 'tpt-languages-nonzero' )
+ ->params( $translatedName )
+ ->numParams( 100 * $percentage );
+ } else {
+ $href = SpecialPage::getTitleFor( 'Translate' )->getLocalURL( [
+ 'group' => $page->getMessageGroupId(),
+ 'language' => $code,
+ ] );
+ $classes = [ 'mw-pt-progress--none' ];
+ $title = wfMessage( 'tpt-languages-zero' );
+ }
+
+ self::$languageLinkData[ $key ] = [
+ 'href' => $href,
+ 'language' => $code,
+ 'percentage' => $percentage,
+ 'classes' => $classes,
+ 'autonym' => $en->ucfirst( $languageNameUtils->getLanguageName( $code ) ),
+ 'title' => $title,
+ ];
+
+ $newLanguageLinks[ $key ] = self::$languageLinkData[ $key ][ 'autonym' ];
+ }
+
+ asort( $newLanguageLinks );
+ $languageLinks = array_merge( array_keys( $newLanguageLinks ), $languageLinks );
+ }
+
+ /**
+ * Hooks: SkinTemplateGetLanguageLink
+ * @param array &$link
+ * @param Title $linkTitle
+ * @param Title $pageTitle
+ * @param OutputPage $out
+ */
+ public static function formatLanguageLink(
+ array &$link,
+ Title $linkTitle,
+ Title $pageTitle,
+ OutputPage $out
+ ) {
+ if ( substr( $link[ 'text' ], 0, 18 ) !== 'x-pagetranslation:' ) {
+ return;
+ }
+
+ if ( !isset( self::$languageLinkData[ $link[ 'text' ] ] ) ) {
+ return;
+ }
+
+ $data = self::$languageLinkData[ $link[ 'text' ] ];
+
+ $link[ 'class' ] .= ' ' . implode( ' ', $data[ 'classes' ] );
+ $link[ 'href' ] = $data[ 'href' ];
+ $link[ 'text' ] = $data[ 'autonym' ];
+ $link[ 'title' ] = $data[ 'title' ]->inLanguage( $out->getLanguage()->getCode() )->text();
+ $link[ 'lang'] = LanguageCode::bcp47( $data[ 'language' ] );
+ $link[ 'hreflang'] = LanguageCode::bcp47( $data[ 'language' ] );
+
+ $out->addModuleStyles( 'ext.translate.tag.languages' );
+ }
+
+ /**
+ * Display nice error when editing content.
+ * Hook: EditFilterMergedContent
+ * @param IContextSource $context
+ * @param Content $content
+ * @param Status $status
+ * @param string $summary
+ * @return true
+ */
+ public static function tpSyntaxCheckForEditContent(
+ $context,
+ $content,
+ $status,
+ $summary
+ ) {
+ $syntaxErrorStatus = self::tpSyntaxError( $context->getTitle(), $content );
+
+ if ( $syntaxErrorStatus ) {
+ $status->merge( $syntaxErrorStatus );
+ return $syntaxErrorStatus->isGood();
+ }
+
+ return true;
+ }
+
+ private static function tpSyntaxError( ?PageIdentity $page, ?Content $content ): ?Status {
+ // T163254: Ignore translation markup on non-wikitext pages
+ if ( !$content instanceof WikitextContent || !$page ) {
+ return null;
+ }
+
+ $text = $content->getText();
+
+ // See T154500
+ $text = str_replace( [ "\r\n", "\r" ], "\n", rtrim( $text ) );
+ $status = Status::newGood();
+ $parser = Services::getInstance()->getTranslatablePageParser();
+ if ( $parser->containsMarkup( $text ) ) {
+ try {
+ $parser->parse( $text );
+ } catch ( ParsingFailure $e ) {
+ $status->fatal( ...( $e->getMessageSpecification() ) );
+ }
+ }
+
+ return $status;
+ }
+
+ /**
+ * When attempting to save, last resort. Edit page would only display
+ * edit conflict if there wasn't tpSyntaxCheckForEditPage.
+ * Hook: MultiContentSave
+ * @param RenderedRevision $renderedRevision
+ * @param UserIdentity $user
+ * @param CommentStoreComment $summary
+ * @param int $flags
+ * @param Status $hookStatus
+ * @return bool
+ */
+ public static function tpSyntaxCheck(
+ RenderedRevision $renderedRevision,
+ UserIdentity $user,
+ CommentStoreComment $summary,
+ $flags,
+ Status $hookStatus
+ ) {
+ $content = $renderedRevision->getRevision()->getContent( SlotRecord::MAIN );
+
+ $status = self::tpSyntaxError(
+ $renderedRevision->getRevision()->getPage(),
+ $content
+ );
+
+ if ( $status ) {
+ $hookStatus->merge( $status );
+ return $status->isGood();
+ }
+
+ return true;
+ }
+
+ /**
+ * Hook: PageSaveComplete
+ *
+ * @param WikiPage $wikiPage
+ * @param UserIdentity $userIdentity
+ * @param string $summary
+ * @param int $flags
+ * @param RevisionRecord $revisionRecord
+ * @param EditResult $editResult
+ * @return true
+ */
+ public static function addTranstagAfterSave(
+ WikiPage $wikiPage,
+ UserIdentity $userIdentity,
+ string $summary,
+ int $flags,
+ RevisionRecord $revisionRecord,
+ EditResult $editResult
+ ) {
+ $content = $wikiPage->getContent();
+
+ // T163254: Disable page translation on non-wikitext pages
+ if ( $content instanceof WikitextContent ) {
+ $text = $content->getText();
+ } else {
+ // Not applicable
+ return true;
+ }
+
+ $parser = Services::getInstance()->getTranslatablePageParser();
+ if ( $parser->containsMarkup( $text ) ) {
+ // Add the ready tag
+ $page = TranslatablePage::newFromTitle( $wikiPage->getTitle() );
+ $page->addReadyTag( $revisionRecord->getId() );
+ }
+
+ // Schedule a deferred status update for the translatable page.
+ $tpStatusUpdater = Services::getInstance()->getTranslatablePageStore();
+ $tpStatusUpdater->performStatusUpdate( $wikiPage->getTitle() );
+
+ return true;
+ }
+
+ /**
+ * Page moving and page protection (and possibly other things) creates null
+ * revisions. These revisions re-use the previous text already stored in
+ * the database. Those however do not trigger re-parsing of the page and
+ * thus the ready tag is not updated. This watches for new revisions,
+ * checks if they reuse existing text, checks whether the parent version
+ * is the latest version and has a ready tag. If that is the case,
+ * also adds a ready tag for the new revision (which is safe, because
+ * the text hasn't changed). The interface will say that there has been
+ * a change, but shows no change in the content. This lets the user to
+ * re-mark the translations of the page title as outdated (if enabled
+ * for translation).
+ * Hook: RevisionRecordInserted
+ * @param RevisionRecord $rev
+ */
+ public static function updateTranstagOnNullRevisions( RevisionRecord $rev ) {
+ $parentId = $rev->getParentId();
+ if ( $parentId === 0 || $parentId === null ) {
+ // No parent, bail out.
+ return;
+ }
+
+ $prevRev = MediaWikiServices::getInstance()
+ ->getRevisionLookup()
+ ->getRevisionById( $parentId );
+
+ if ( !$prevRev || !$rev->hasSameContent( $prevRev ) ) {
+ // Not a null revision, bail out.
+ return;
+ }
+
+ $title = Title::newFromLinkTarget( $rev->getPageAsLinkTarget() );
+ $bundleFactory = Services::getInstance()->getTranslatableBundleFactory();
+ $bundle = $bundleFactory->getBundle( $title );
+
+ if ( $bundle ) {
+ $bundleStore = $bundleFactory->getStore( $bundle );
+ $bundleStore->handleNullRevisionInsert( $bundle, $rev );
+ }
+ }
+
+ /**
+ * Prevent creation of orphan translation units in Translations namespace.
+ * Hook: getUserPermissionsErrorsExpensive
+ *
+ * @param Title $title
+ * @param User $user
+ * @param string $action
+ * @param mixed &$result
+ * @return bool
+ */
+ public static function onGetUserPermissionsErrorsExpensive(
+ Title $title,
+ User $user,
+ $action,
+ &$result
+ ) {
+ $handle = new MessageHandle( $title );
+
+ if ( !$handle->isPageTranslation() || $action === 'read' ) {
+ return true;
+ }
+
+ $isValid = true;
+ $groupId = null;
+
+ if ( $handle->isValid() ) {
+ $group = $handle->getGroup();
+ $groupId = $group->getId();
+ $permissionTitleCheck = null;
+
+ if ( $group instanceof WikiPageMessageGroup ) {
+ $permissionTitleCheck = $group->getTitle();
+ } elseif ( $group instanceof MessageBundleMessageGroup ) {
+ // TODO: This check for MessageBundle related permission should be in
+ // the MessageBundleTranslation/Hook
+ $permissionTitleCheck = Title::newFromID( $group->getBundlePageId() );
+ }
+
+ if ( $permissionTitleCheck ) {
+ // Check for blocks
+ $permissionManager = MediaWikiServices::getInstance()->getPermissionManager();
+ if ( $permissionManager->isBlockedFrom( $user, $permissionTitleCheck ) ) {
+ $block = $user->getBlock();
+ if ( $block ) {
+ $error = new UserBlockedError( $block, $user );
+ $result = $error->getMessageObject()->parseAsBlock();
+ return false;
+ }
+ }
+ }
+ }
+
+ // Allow editing units that become orphaned in regular use, so that
+ // people can delete them or fix links or other issues in them.
+ if ( $action !== 'create' ) {
+ return true;
+ }
+
+ if ( !$handle->isValid() ) {
+ // TODO: These checks may no longer be needed
+ // Sometimes the message index can be out of date. Either the rebuild job failed or
+ // it just hasn't finished yet. Do a secondary check to make sure we are not
+ // inconveniencing translators for no good reason.
+ // See https://phabricator.wikimedia.org/T221119
+ $statsdDataFactory = MediaWikiServices::getInstance()->getStatsdDataFactory();
+ $statsdDataFactory->increment( 'translate.slow_translatable_page_check' );
+ $translatablePage = self::checkTranslatablePageSlow( $title );
+ if ( $translatablePage ) {
+ $groupId = $translatablePage->getMessageGroupId();
+ $statsdDataFactory->increment( 'translate.slow_translatable_page_check_valid' );
+ } else {
+ $isValid = false;
+ }
+ }
+
+ if ( $isValid ) {
+ $error = self::getTranslationRestrictions( $handle, $groupId );
+ $result = $error ?: $result;
+ return $error === [];
+ }
+
+ // Don't allow editing invalid messages that do not belong to any translatable page
+ LoggerFactory::getInstance( 'Translate' )->info(
+ 'Unknown translation page: {title}',
+ [ 'title' => $title->getPrefixedDBkey() ]
+ );
+ $result = [ 'tpt-unknown-page' ];
+ return false;
+ }
+
+ private static function checkTranslatablePageSlow( LinkTarget $unit ): ?TranslatablePage {
+ $parts = TranslatablePage::parseTranslationUnit( $unit );
+ $translationPageTitle = Title::newFromText(
+ $parts[ 'sourcepage' ] . '/' . $parts[ 'language' ]
+ );
+ if ( !$translationPageTitle ) {
+ return null;
+ }
+
+ $translatablePage = TranslatablePage::isTranslationPage( $translationPageTitle );
+ if ( !$translatablePage ) {
+ return null;
+ }
+
+ $factory = Services::getInstance()->getTranslationUnitStoreFactory();
+ $store = $factory->getReader( $translatablePage->getTitle() );
+ $units = $store->getNames();
+
+ if ( !in_array( $parts[ 'section' ], $units ) ) {
+ return null;
+ }
+
+ return $translatablePage;
+ }
+
+ /**
+ * Prevent editing of restricted languages when prioritized.
+ *
+ * @param MessageHandle $handle
+ * @param string $groupId
+ * @return array array containing error message if restricted, empty otherwise
+ */
+ private static function getTranslationRestrictions( MessageHandle $handle, $groupId ) {
+ global $wgTranslateDocumentationLanguageCode;
+
+ // Allow adding message documentation even when translation is restricted
+ if ( $handle->getCode() === $wgTranslateDocumentationLanguageCode ) {
+ return [];
+ }
+
+ // Check if anything is prevented for the group in the first place
+ $force = TranslateMetadata::get( $groupId, 'priorityforce' );
+ if ( $force !== 'on' ) {
+ return [];
+ }
+
+ // And finally check whether the language is in the inclusion list
+ $languages = TranslateMetadata::get( $groupId, 'prioritylangs' );
+ $filter = array_flip( explode( ',', $languages ) );
+ if ( !isset( $filter[$handle->getCode()] ) ) {
+ $reason = TranslateMetadata::get( $groupId, 'priorityreason' );
+ if ( $reason ) {
+ return [ 'tpt-translation-restricted', $reason ];
+ }
+
+ return [ 'tpt-translation-restricted-no-reason' ];
+ }
+
+ return [];
+ }
+
+ /**
+ * Prevent editing of translation pages directly.
+ * Hook: getUserPermissionsErrorsExpensive
+ * @param Title $title
+ * @param User $user
+ * @param string $action
+ * @param bool &$result
+ * @return bool
+ */
+ public static function preventDirectEditing( Title $title, User $user, $action, &$result ) {
+ if ( self::$allowTargetEdit ) {
+ return true;
+ }
+
+ $inclusionList = [
+ 'read', 'deletedtext', 'deletedhistory',
+ 'deleterevision', 'suppressrevision', 'viewsuppressed', // T286884
+ 'review', // FlaggedRevs
+ 'patrol', // T151172
+ ];
+ $needsPageTranslationRight = in_array( $action, [ 'delete', 'undelete' ] );
+ if ( in_array( $action, $inclusionList ) ||
+ $needsPageTranslationRight && $user->isAllowed( 'pagetranslation' )
+ ) {
+ return true;
+ }
+
+ $page = TranslatablePage::isTranslationPage( $title );
+ if ( $page !== false && $page->getMarkedTag() ) {
+ if ( $needsPageTranslationRight ) {
+ $result = User::newFatalPermissionDeniedStatus( 'pagetranslation' )->getMessage();
+ return false;
+ }
+
+ [ , $code ] = TranslateUtils::figureMessage( $title->getText() );
+ $mwService = MediaWikiServices::getInstance();
+
+ if ( method_exists( $mwService, 'getUrlUtils' ) ) {
+ $translationUrl = $mwService->getUrlUtils()->expand(
+ $page->getTranslationUrl( $code ), PROTO_RELATIVE
+ );
+ } else {
+ // < MW 1.39
+ $translationUrl = wfExpandUrl( $page->getTranslationUrl( $code ), PROTO_RELATIVE );
+ }
+
+ $result = [
+ 'tpt-target-page',
+ ':' . $page->getTitle()->getPrefixedText(),
+ // This url shouldn't get cached
+ $translationUrl
+ ];
+
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Redirects the delete action to our own for translatable pages.
+ * Hook: ArticleConfirmDelete
+ *
+ * @param Article $article
+ * @param OutputPage $out
+ * @param string &$reason
+ *
+ * @return bool
+ */
+ public static function disableDelete( $article, $out, &$reason ) {
+ $title = $article->getTitle();
+ $bundle = Services::getInstance()->getTranslatableBundleFactory()->getBundle( $title );
+ $isDeletableBundle = $bundle && $bundle->isDeletable();
+ if ( $isDeletableBundle || TranslatablePage::isTranslationPage( $title ) ) {
+ $new = SpecialPage::getTitleFor(
+ 'PageTranslationDeletePage',
+ $title->getPrefixedText()
+ );
+ $out->redirect( $new->getFullURL() );
+ }
+
+ return true;
+ }
+
+ /**
+ * Hook: ArticleViewHeader
+ *
+ * @param Article $article
+ * @param bool|ParserOutput|null &$outputDone
+ * @param bool &$pcache
+ * @return bool
+ */
+ public static function translatablePageHeader( $article, &$outputDone, &$pcache ) {
+ if ( $article->getOldID() ) {
+ return true;
+ }
+
+ $transPage = TranslatablePage::isTranslationPage( $article->getTitle() );
+ $context = $article->getContext();
+ if ( $transPage ) {
+ self::translationPageHeader( $context, $transPage );
+ } else {
+ // Check for pages that are tagged or marked
+ self::sourcePageHeader( $context );
+ }
+
+ return true;
+ }
+
+ private static function sourcePageHeader( IContextSource $context ) {
+ $linker = MediaWikiServices::getInstance()->getLinkRenderer();
+
+ $language = $context->getLanguage();
+ $title = $context->getTitle();
+
+ $page = TranslatablePage::newFromTitle( $title );
+
+ $marked = $page->getMarkedTag();
+ $ready = $page->getReadyTag();
+ $latest = $title->getLatestRevID();
+
+ $actions = [];
+ if ( $marked && $context->getUser()->isAllowed( 'translate' ) ) {
+ $actions[] = self::getTranslateLink( $context, $page, null );
+ }
+
+ $hasChanges = $ready === $latest && $marked !== $latest;
+ if ( $hasChanges ) {
+ $diffUrl = $title->getFullURL( [ 'oldid' => $marked, 'diff' => $latest ] );
+
+ if ( $context->getUser()->isAllowed( 'pagetranslation' ) ) {
+ $pageTranslation = SpecialPage::getTitleFor( 'PageTranslation' );
+ $params = [ 'target' => $title->getPrefixedText(), 'do' => 'mark' ];
+
+ if ( $marked === null ) {
+ // This page has never been marked
+ $linkDesc = $context->msg( 'translate-tag-markthis' )->text();
+ $actions[] = $linker->makeKnownLink( $pageTranslation, $linkDesc, [], $params );
+ } else {
+ $markUrl = $pageTranslation->getFullURL( $params );
+ $actions[] = $context->msg( 'translate-tag-markthisagain', $diffUrl, $markUrl )
+ ->parse();
+ }
+ } else {
+ $actions[] = $context->msg( 'translate-tag-hasnew', $diffUrl )->parse();
+ }
+ }
+
+ if ( !count( $actions ) ) {
+ return;
+ }
+
+ $header = Html::rawElement(
+ 'div',
+ [
+ 'class' => 'mw-pt-translate-header noprint nomobile',
+ 'dir' => $language->getDir(),
+ 'lang' => $language->getHtmlCode(),
+ ],
+ $language->semicolonList( $actions )
+ );
+
+ $context->getOutput()->addHTML( $header );
+ }
+
+ private static function getTranslateLink(
+ IContextSource $context,
+ TranslatablePage $page,
+ ?string $langCode
+ ): string {
+ $linker = MediaWikiServices::getInstance()->getLinkRenderer();
+
+ return $linker->makeKnownLink(
+ SpecialPage::getTitleFor( 'Translate' ),
+ $context->msg( 'translate-tag-translate-link-desc' )->text(),
+ [],
+ [
+ 'group' => $page->getMessageGroupId(),
+ 'language' => $langCode,
+ 'action' => 'page',
+ 'filter' => '',
+ ]
+ );
+ }
+
+ private static function translationPageHeader( IContextSource $context, TranslatablePage $page ) {
+ global $wgTranslateKeepOutdatedTranslations;
+
+ $title = $context->getTitle();
+ if ( !$title->exists() ) {
+ return;
+ }
+
+ [ , $code ] = TranslateUtils::figureMessage( $title->getText() );
+
+ // Get the translation percentage
+ $pers = $page->getTranslationPercentages();
+ $per = 0;
+ if ( isset( $pers[$code] ) ) {
+ $per = $pers[$code] * 100;
+ }
+
+ $language = $context->getLanguage();
+ $output = $context->getOutput();
+
+ if ( $page->getSourceLanguageCode() === $code ) {
+ // If we are on the source language page, link to translate for user's language
+ $msg = self::getTranslateLink( $context, $page, $language->getCode() );
+ } else {
+ $mwService = MediaWikiServices::getInstance();
+
+ if ( method_exists( $mwService, 'getUrlUtils' ) ) {
+ $translationUrl = $mwService->getUrlUtils()->expand(
+ $page->getTranslationUrl( $code ), PROTO_RELATIVE
+ );
+ } else {
+ // < MW 1.39
+ $translationUrl = wfExpandUrl( $page->getTranslationUrl( $code ), PROTO_RELATIVE );
+ }
+
+ $msg = $context->msg( 'tpt-translation-intro',
+ $translationUrl,
+ ':' . $page->getTitle()->getPrefixedText(),
+ $language->formatNum( $per )
+ )->parse();
+ }
+
+ $header = Html::rawElement(
+ 'div',
+ [
+ 'class' => 'mw-pt-translate-header noprint',
+ 'dir' => $language->getDir(),
+ 'lang' => $language->getHtmlCode(),
+ ],
+ $msg
+ );
+
+ $output->addHTML( $header );
+
+ if ( $wgTranslateKeepOutdatedTranslations ) {
+ $groupId = $page->getMessageGroupId();
+ // This is already calculated and cached by above call to getTranslationPercentages
+ $stats = MessageGroupStats::forItem( $groupId, $code );
+ if ( $stats[MessageGroupStats::FUZZY] ) {
+ // Only show if there is fuzzy messages
+ $wrap = Html::rawElement(
+ 'div',
+ [
+ 'class' => 'mw-pt-translate-header',
+ 'dir' => $language->getDir(),
+ 'lang' => $language->getHtmlCode()
+ ],
+ '<span class="mw-translate-fuzzy">$1</span>'
+ );
+
+ $output->wrapWikiMsg( $wrap, [ 'tpt-translation-intro-fuzzy' ] );
+ }
+ }
+ }
+
+ /**
+ * Hook: SpecialPage_initList
+ * @param array &$list
+ * @return true
+ */
+ public static function replaceMovePage( &$list ) {
+ $movePageSpec = $list['Movepage'] ?? null;
+
+ // This should never happen, but apparently is happening? See: T296568
+ if ( $movePageSpec === null ) {
+ return true;
+ }
+
+ $list['Movepage'] = [
+ 'class' => MoveTranslatableBundleSpecialPage::class,
+ 'services' => [
+ 'ObjectFactory',
+ 'PermissionManager',
+ 'Translate:TranslatableBundleMover',
+ 'Translate:TranslatableBundleFactory'
+ ],
+ 'args' => [
+ $movePageSpec
+ ]
+ ];
+
+ return true;
+ }
+
+ /**
+ * Hook: getUserPermissionsErrorsExpensive
+ * @param Title $title
+ * @param User $user
+ * @param string $action
+ * @param mixed &$result
+ * @return bool
+ */
+ public static function lockedPagesCheck( Title $title, User $user, $action, &$result ) {
+ if ( $action === 'read' ) {
+ return true;
+ }
+
+ $cache = ObjectCache::getInstance( CACHE_ANYTHING );
+ $key = $cache->makeKey( 'pt-lock', sha1( $title->getPrefixedText() ) );
+ if ( $cache->get( $key ) === 'locked' ) {
+ $result = [ 'pt-locked-page' ];
+
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Hook: SkinSubPageSubtitle
+ * @param array &$subpages
+ * @param ?Skin $skin
+ * @param OutputPage $out
+ * @return bool
+ */
+ public static function replaceSubtitle( &$subpages, ?Skin $skin, OutputPage $out ) {
+ $linker = MediaWikiServices::getInstance()->getLinkRenderer();
+
+ $isTranslationPage = TranslatablePage::isTranslationPage( $out->getTitle() );
+ if ( !$isTranslationPage
+ && !TranslatablePage::isSourcePage( $out->getTitle() )
+ ) {
+ return true;
+ }
+
+ // Copied from Skin::subPageSubtitle()
+ $nsInfo = MediaWikiServices::getInstance()->getNamespaceInfo();
+ if (
+ $out->isArticle() &&
+ $nsInfo->hasSubpages( $out->getTitle()->getNamespace() )
+ ) {
+ $ptext = $out->getTitle()->getPrefixedText();
+ if ( strpos( $ptext, '/' ) !== false ) {
+ $links = explode( '/', $ptext );
+ array_pop( $links );
+ if ( $isTranslationPage ) {
+ // Also remove language code page
+ array_pop( $links );
+ }
+ $c = 0;
+ $growinglink = '';
+ $display = '';
+ $lang = $skin->getLanguage();
+
+ foreach ( $links as $link ) {
+ $growinglink .= $link;
+ $display .= $link;
+ $linkObj = Title::newFromText( $growinglink );
+
+ if ( is_object( $linkObj ) && $linkObj->isKnown() ) {
+ $getlink = $linker->makeKnownLink(
+ SpecialPage::getTitleFor( 'MyLanguage', $growinglink ),
+ $display
+ );
+
+ $c++;
+
+ if ( $c > 1 ) {
+ $subpages .= $lang->getDirMarkEntity() . $skin->msg( 'pipe-separator' )->escaped();
+ } else {
+ $subpages .= '&lt; ';
+ }
+
+ $subpages .= $getlink;
+ $display = '';
+ } else {
+ $display .= '/';
+ }
+
+ $growinglink .= '/';
+ }
+ }
+
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Converts the edit tab (if exists) for translation pages to translate tab.
+ * Hook: SkinTemplateNavigation::Universal
+ * @param Skin $skin
+ * @param array &$tabs
+ * @return true
+ */
+ public static function translateTab( Skin $skin, array &$tabs ) {
+ $title = $skin->getTitle();
+ $handle = new MessageHandle( $title );
+ $code = $handle->getCode();
+ $page = TranslatablePage::isTranslationPage( $title );
+ if ( !$page ) {
+ return true;
+ }
+ // The source language has a subpage too, but cannot be translated
+ if ( $page->getSourceLanguageCode() === $code ) {
+ return true;
+ }
+
+ if ( isset( $tabs['views']['edit'] ) ) {
+ $tabs['views']['edit']['text'] = $skin->msg( 'tpt-tab-translate' )->text();
+ $tabs['views']['edit']['href'] = $page->getTranslationUrl( $code );
+ }
+
+ return true;
+ }
+
+ /**
+ * Hook to update source and destination translation pages on moving translation units
+ * Hook: PageMoveComplete
+ *
+ * @param LinkTarget $oldLinkTarget
+ * @param LinkTarget $newLinkTarget
+ * @param UserIdentity $userIdentity
+ * @param int $oldid
+ * @param int $newid
+ * @param string $reason
+ * @param RevisionRecord $revisionRecord
+ */
+ public static function onMovePageTranslationUnits(
+ LinkTarget $oldLinkTarget,
+ LinkTarget $newLinkTarget,
+ UserIdentity $userIdentity,
+ int $oldid,
+ int $newid,
+ string $reason,
+ RevisionRecord $revisionRecord
+ ) {
+ $user = MediaWikiServices::getInstance()->getUserFactory()->newFromUserIdentity( $userIdentity );
+ // MoveTranslatableBundleJob takes care of handling updates because it performs
+ // a lot of moves at once. As a performance optimization, skip this hook if
+ // we detect moves from that job. As there isn't a good way to pass information
+ // to this hook what originated the move, we use some heuristics.
+ if ( defined( 'MEDIAWIKI_JOB_RUNNER' ) && $user->equals( FuzzyBot::getUser() ) ) {
+ return;
+ }
+
+ $oldTitle = Title::newFromLinkTarget( $oldLinkTarget );
+ $newTitle = Title::newFromLinkTarget( $newLinkTarget );
+ $groupLast = null;
+ foreach ( [ $oldTitle, $newTitle ] as $title ) {
+ $handle = new MessageHandle( $title );
+ if ( !$handle->isValid() ) {
+ continue;
+ }
+
+ // Documentation pages are never translation pages
+ if ( $handle->isDoc() ) {
+ continue;
+ }
+
+ $group = $handle->getGroup();
+ if ( !$group instanceof WikiPageMessageGroup ) {
+ continue;
+ }
+
+ $language = $handle->getCode();
+
+ // Ignore pages such as Translations:Page/unit without language code
+ if ( (string)$language === '' ) {
+ continue;
+ }
+
+ // Update the page only once if source and destination units
+ // belong to the same page
+ if ( $group !== $groupLast ) {
+ $groupLast = $group;
+ $page = TranslatablePage::newFromTitle( $group->getTitle() );
+ self::updateTranslationPage( $page, $language, $user, 0, $reason );
+ }
+ }
+ }
+
+ /**
+ * Hook to update translation page on deleting a translation unit
+ * Hook: ArticleDeleteComplete
+ * @param WikiPage $unit
+ * @param User $user
+ * @param string $reason
+ * @param int $id
+ * @param Content $content
+ * @param ManualLogEntry $logEntry
+ */
+ public static function onDeleteTranslationUnit(
+ WikiPage $unit,
+ User $user,
+ $reason,
+ $id,
+ $content,
+ $logEntry
+ ) {
+ // Do the update. In case job queue is doing the work, the update is not done here
+ if ( self::$jobQueueRunning ) {
+ return;
+ }
+
+ $title = $unit->getTitle();
+
+ $handle = new MessageHandle( $title );
+ if ( !$handle->isValid() ) {
+ return;
+ }
+
+ $group = $handle->getGroup();
+ if ( !$group instanceof WikiPageMessageGroup ) {
+ return;
+ }
+
+ $target = $group->getTitle();
+ $langCode = $handle->getCode();
+ $fname = __METHOD__;
+
+ $dbw = MediaWikiServices::getInstance()->getDBLoadBalancer()->getConnection( DB_PRIMARY );
+ $callback = function () use (
+ $dbw,
+ $target,
+ $handle,
+ $langCode,
+ $user,
+ $reason,
+ $fname
+ ) {
+ $translationPageTitle = $target->getSubpage( $langCode );
+ // Do a more thorough check for the translation page in case the translation page is deleted in a
+ // different transaction.
+ if ( !$translationPageTitle || !$translationPageTitle->exists( Title::READ_LATEST ) ) {
+ return;
+ }
+
+ $dbw->startAtomic( $fname );
+
+ $page = TranslatablePage::newFromTitle( $target );
+
+ MessageGroupStats::forItem(
+ $page->getMessageGroupId(),
+ $langCode,
+ MessageGroupStats::FLAG_NO_CACHE
+ );
+
+ if ( !$handle->isDoc() ) {
+ $unitTitle = $handle->getTitle();
+ // Assume that $user and $reason for the first deletion is the same for all
+ self::updateTranslationPage(
+ $page, $langCode, $user, 0, $reason, RenderTranslationPageJob::ACTION_DELETE, $unitTitle
+ );
+ }
+
+ $dbw->endAtomic( $fname );
+ };
+
+ $dbw->onTransactionCommitOrIdle( $callback, __METHOD__ );
+ }
+}
diff --git a/Translate/src/PageTranslation/ImpossiblePageMove.php b/Translate/src/PageTranslation/ImpossiblePageMove.php
new file mode 100644
index 00000000..425cef7b
--- /dev/null
+++ b/Translate/src/PageTranslation/ImpossiblePageMove.php
@@ -0,0 +1,27 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use Exception;
+use SplObjectStorage;
+
+/**
+ * Exception thrown when a translatable page move is not possible
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2021.09
+ */
+class ImpossiblePageMove extends Exception {
+ /** @var SplObjectStorage */
+ private $blockers;
+
+ public function __construct( SplObjectStorage $blockers ) {
+ parent::__construct();
+ $this->blockers = $blockers;
+ }
+
+ public function getBlockers(): SplObjectStorage {
+ return $this->blockers;
+ }
+}
diff --git a/Translate/src/PageTranslation/InvalidPageTitleRename.php b/Translate/src/PageTranslation/InvalidPageTitleRename.php
new file mode 100644
index 00000000..4fbb01ef
--- /dev/null
+++ b/Translate/src/PageTranslation/InvalidPageTitleRename.php
@@ -0,0 +1,15 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use Exception;
+
+/**
+ * Exception thrown when a rename for a title fails
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2021.09
+ */
+class InvalidPageTitleRename extends Exception {
+}
diff --git a/Translate/src/PageTranslation/MigrateTranslatablePageSpecialPage.php b/Translate/src/PageTranslation/MigrateTranslatablePageSpecialPage.php
new file mode 100644
index 00000000..ac83dc1a
--- /dev/null
+++ b/Translate/src/PageTranslation/MigrateTranslatablePageSpecialPage.php
@@ -0,0 +1,84 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use FormatJson;
+use Html;
+use SpecialPage;
+
+/**
+ * Contains code for Special:PageMigration to migrate to page transation
+ * @author Pratik Lahoti
+ * @license GPL-2.0-or-later
+ */
+class MigrateTranslatablePageSpecialPage extends SpecialPage {
+ public function __construct() {
+ parent::__construct( 'PageMigration', 'pagetranslation' );
+ }
+
+ protected function getGroupName() {
+ return 'translation';
+ }
+
+ public function getDescription() {
+ return $this->msg( 'pagemigration' )->text();
+ }
+
+ public function execute( $par ) {
+ $output = $this->getOutput();
+ $this->setHeaders();
+ $this->checkPermissions();
+ $this->addHelpLink( 'Help:Extension:Translate/Page translation administration' );
+ $this->outputHeader( 'pagemigration-summary' );
+ $output->addModules( 'ext.translate.special.pagemigration' );
+ $output->addModuleStyles( [
+ 'ext.translate.specialpages.styles',
+ 'jquery.uls.grid'
+ ] );
+
+ # Do stuff
+ # ...
+ $out = '';
+ $out .= Html::openElement( 'div', [ 'class' => 'mw-tpm-sp-container grid' ] );
+ $out .= Html::openElement( 'div', [ 'class' => 'mw-tpm-sp-error row',
+ 'id' => 'mw-tpm-sp-error-div' ] );
+ $out .= Html::element( 'div',
+ [ 'class' => 'mw-tpm-sp-error__message five columns hide' ] );
+ $out .= Html::closeElement( 'div' );
+ $out .= Html::openElement( 'form', [ 'class' => 'mw-tpm-sp-form row',
+ 'id' => 'mw-tpm-sp-primary-form', 'action' => '' ] );
+ $out .= Html::element( 'input', [ 'id' => 'pm-summary', 'type' => 'hidden',
+ 'value' => $this->msg( 'pm-summary-import' )->inContentLanguage()->text() ] );
+ $out .= "\n";
+ $out .= Html::element( 'input', [ 'id' => 'title', 'class' => 'mw-searchInput mw-ui-input',
+ 'data-mw-searchsuggest' => FormatJson::encode( [
+ 'wrapAsLink' => false
+ ] ), 'placeholder' => $this->msg( 'pm-pagetitle-placeholder' )->text() ] );
+ $out .= "\n";
+ $out .= Html::element( 'input', [ 'id' => 'action-import',
+ 'class' => 'mw-ui-button mw-ui-progressive', 'type' => 'button',
+ 'value' => $this->msg( 'pm-import-button-label' )->text() ] );
+ $out .= "\n";
+ $out .= Html::element( 'input', [ 'id' => 'action-save',
+ 'class' => 'mw-ui-button mw-ui-progressive hide', 'type' => 'button',
+ 'value' => $this->msg( 'pm-savepages-button-label' )->text() ] );
+ $out .= "\n";
+ $out .= Html::element( 'input', [ 'id' => 'action-cancel',
+ 'class' => 'mw-ui-button mw-ui-quiet hide', 'type' => 'button',
+ 'value' => $this->msg( 'pm-cancel-button-label' )->text() ] );
+ $out .= Html::closeElement( 'form' );
+ $out .= Html::element( 'div', [ 'class' => 'mw-tpm-sp-instructions hide' ] );
+ $out .= Html::rawElement( 'div', [ 'class' => 'mw-tpm-sp-unit-listing' ] );
+ $out .= Html::closeElement( 'div' );
+
+ $output->addHTML( $out );
+ $output->addHTML(
+ Html::errorBox(
+ $this->msg( 'tux-nojs' )->plain(),
+ '',
+ 'tux-nojs'
+ )
+ );
+ }
+}
diff --git a/Translate/src/PageTranslation/MoveTranslatableBundleMaintenanceScript.php b/Translate/src/PageTranslation/MoveTranslatableBundleMaintenanceScript.php
new file mode 100644
index 00000000..18315516
--- /dev/null
+++ b/Translate/src/PageTranslation/MoveTranslatableBundleMaintenanceScript.php
@@ -0,0 +1,285 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use Closure;
+use MalformedTitleException;
+use MediaWiki\Extension\Translate\Services;
+use MediaWiki\Extension\Translate\Utilities\BaseMaintenanceScript;
+use MediaWiki\MediaWikiServices;
+use Message;
+use SplObjectStorage;
+use Status;
+use Title;
+use TitleParser;
+
+class MoveTranslatableBundleMaintenanceScript extends BaseMaintenanceScript {
+ /** @var TranslatableBundleMover */
+ private $bundleMover;
+ /** @var TitleParser */
+ private $titleParser;
+
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Review and move translatable bundles including their subpages' );
+
+ $this->addArg(
+ 'current-page',
+ ' Current name of the page representing a translatable bundle',
+ self::REQUIRED
+ );
+
+ $this->addArg(
+ 'new-page',
+ 'New translatable bundle name',
+ self::REQUIRED
+ );
+
+ $this->addArg(
+ 'user',
+ 'User performing the move',
+ self::REQUIRED
+ );
+
+ $this->addOption(
+ 'reason',
+ 'Reason for moving the translatable bundle',
+ self::OPTIONAL,
+ self::HAS_ARG
+ );
+
+ $this->addOption(
+ 'skip-subpages',
+ 'Skip moving subpages under the current page'
+ );
+
+ $this->addOption(
+ 'skip-talkpages',
+ 'Skip moving talk pages under pages being moved'
+ );
+
+ $this->requireExtension( 'Translate' );
+ }
+
+ /** @inheritDoc */
+ public function execute() {
+ $this->bundleMover = Services::getInstance()->getTranslatableBundleMover();
+
+ $mwService = MediaWikiServices::getInstance();
+ $this->titleParser = $mwService->getTitleParser();
+
+ $currentBundleName = $this->getArg( 0 );
+ $newBundleName = $this->getArg( 1 );
+ $username = $this->getArg( 2 );
+ $reason = $this->getOption( 'reason', '' );
+ $moveSubpages = !$this->hasOption( 'skip-subpages' );
+ $moveTalkpages = !$this->hasOption( 'skip-talkpages' );
+
+ $userFactory = $mwService->getUserFactory();
+ $user = $userFactory->newFromName( $username );
+
+ if ( $user === null || !$user->isRegistered() ) {
+ $this->fatalError( "User $username does not exist." );
+ }
+
+ $outputMsg = "Check if '$currentBundleName' can be moved to '$newBundleName'";
+ $subpageMsg = 'excluding subpages';
+ if ( $moveSubpages ) {
+ $subpageMsg = 'including subpages';
+ }
+
+ $talkpageMsg = 'excluding talkpages';
+ if ( $moveTalkpages ) {
+ $talkpageMsg = 'including talkpages';
+ }
+
+ $this->output( "$outputMsg ($subpageMsg; $talkpageMsg)\n" );
+
+ try {
+ $currentTitle = $this->getTitleFromInput( $currentBundleName ?? '' );
+ $newTitle = $this->getTitleFromInput( $newBundleName ?? '' );
+ } catch ( MalformedTitleException $e ) {
+ $this->error( 'Invalid title: current-bundle or new-bundle' );
+ $this->fatalError( $e->getMessageObject()->text() );
+ }
+
+ // When moving translatable bundles from script, remove all limits on the number of
+ // pages that can be moved
+ $this->bundleMover->disablePageMoveLimit();
+ try {
+ $pageCollection = $this->bundleMover->getPageMoveCollection(
+ $currentTitle,
+ $newTitle,
+ $user,
+ $reason,
+ $moveSubpages,
+ $moveTalkpages
+ );
+ } catch ( ImpossiblePageMove $e ) {
+ $fatalErrorMsg = $this->parseErrorMessage( $e->getBlockers() );
+ $this->fatalError( $fatalErrorMsg );
+ }
+
+ $this->displayPagesToMove( $pageCollection );
+
+ $haveConfirmation = $this->getConfirmation();
+ if ( !$haveConfirmation ) {
+ $this->output( "Exiting...\n" );
+ return;
+ }
+
+ $this->output( "Starting page move\n" );
+
+ $pagesToMove = $pageCollection->getListOfPages();
+
+ $this->bundleMover->moveSynchronously(
+ $currentTitle,
+ $newTitle,
+ $pagesToMove,
+ $user,
+ $reason,
+ Closure::fromCallable( [ $this, 'progressCallback' ] )
+ );
+
+ $this->logSeparator();
+ $this->output( "Finished moving '$currentBundleName' to '$newBundleName' $subpageMsg\n" );
+ }
+
+ private function parseErrorMessage( SplObjectStorage $errors ): string {
+ $errorMsg = wfMessage( 'pt-movepage-blockers', count( $errors ) )->text() . "\n";
+ foreach ( $errors as $title ) {
+ $titleText = $title->getPrefixedText();
+ $errorMsg .= "$titleText\n";
+ $errorMsg .= $errors[ $title ]->getWikiText( false, 'pt-movepage-error-placeholder', 'en' );
+ $errorMsg .= "\n";
+ }
+
+ return $errorMsg;
+ }
+
+ private function progressCallback( Title $previous, Title $new, Status $status, int $total, int $processed ): void {
+ $previousTitleText = $previous->getPrefixedText();
+ $newTitleText = $new->getPrefixedText();
+ $paddedProcessed = str_pad( (string)$processed, strlen( (string)$total ), ' ', STR_PAD_LEFT );
+ $progressCounter = "($paddedProcessed/$total)";
+
+ if ( $status->isOK() ) {
+ $this->output( "$progressCounter $previousTitleText --> $newTitleText\n" );
+ } else {
+ $this->output( "$progressCounter Failed to move $previousTitleText to $newTitleText\n" );
+ $this->output( "\tReason:" . $status->getWikiText() . "\n" );
+ }
+ }
+
+ private function displayPagesToMove( PageMoveCollection $pageCollection ): void {
+ $infoMessage = "\nThe following pages will be moved:\n";
+ $count = 0;
+ $subpagesCount = 0;
+ $talkpagesCount = 0;
+
+ /** @var PageMoveOperation[][] */
+ $pagesToMove = [
+ 'pt-movepage-list-pages' => [ $pageCollection->getTranslatablePage() ],
+ 'pt-movepage-list-translation' => $pageCollection->getTranslationPagesPair(),
+ 'pt-movepage-list-section' => $pageCollection->getUnitPagesPair()
+ ];
+
+ $subpages = $pageCollection->getSubpagesPair();
+ if ( $subpages ) {
+ $pagesToMove[ 'pt-movepage-list-other'] = $subpages;
+ }
+
+ foreach ( $pagesToMove as $type => $pages ) {
+ $lines = [];
+ $infoMessage .= $this->getSectionHeader( $type, $pages );
+ if ( !count( $pages ) ) {
+ continue;
+ }
+
+ foreach ( $pages as $pagePairs ) {
+ $count++;
+
+ if ( $type === 'pt-movepage-list-other' ) {
+ $subpagesCount++;
+ }
+
+ $old = $pagePairs->getOldTitle();
+ $new = $pagePairs->getNewTitle();
+
+ if ( $new ) {
+ $line = '* ' . $old->getPrefixedText() . ' → ' . $new->getPrefixedText();
+ if ( $pagePairs->hasTalkpage() ) {
+ $count++;
+ $talkpagesCount++;
+ $line .= ' ' . $this->message( 'pt-movepage-talkpage-exists' )->text();
+ }
+
+ $lines[] = $line;
+ }
+ }
+
+ $infoMessage .= implode( "\n", $lines ) . "\n";
+ }
+
+ $translatableSubpages = $pageCollection->getTranslatableSubpages();
+ $infoMessage .= $this->getSectionHeader( 'pt-movepage-list-translatable', $translatableSubpages );
+
+ if ( $translatableSubpages ) {
+ $lines = [];
+ $infoMessage .= $this->message( 'pt-movepage-list-translatable-note' )->text() . "\n";
+ foreach ( $translatableSubpages as $page ) {
+ $lines[] = '* ' . $page->getPrefixedText();
+ }
+
+ $infoMessage .= implode( "\n", $lines ) . "\n";
+ }
+
+ $this->output( $infoMessage );
+
+ $this->logSeparator();
+ $this->output(
+ $this->message( 'pt-movepage-list-count' )
+ ->numParams( $count, $subpagesCount, $talkpagesCount )
+ ->text() . "\n"
+ );
+ $this->logSeparator();
+ $this->output( "\n" );
+ }
+
+ private function getSectionHeader( string $type, array $pages ): string {
+ $infoMessage = $this->getSeparator();
+ $pageCount = count( $pages );
+
+ // $type can be: pt-movepage-list-pages, pt-movepage-list-translation, pt-movepage-list-section
+ // pt-movepage-list-other
+ $infoMessage .= $this->message( $type )->numParams( $pageCount )->text() . "\n\n";
+ if ( !$pageCount ) {
+ $infoMessage .= $this->message( 'pt-movepage-list-no-pages' )->text() . "\n";
+ }
+
+ return $infoMessage;
+ }
+
+ private function getConfirmation(): bool {
+ $line = self::readconsole( 'Type "MOVE" to begin the move operation: ' );
+ return strtolower( $line ) === 'move';
+ }
+
+ private function getSeparator( int $width = 15 ): string {
+ return str_repeat( '-', $width ) . "\n";
+ }
+
+ private function logSeparator( int $width = 15 ): void {
+ $this->output( $this->getSeparator( $width ) );
+ }
+
+ private function message( string $key ): Message {
+ return ( new Message( $key ) )->inLanguage( 'en' );
+ }
+
+ private function getTitleFromInput( string $pageName ): Title {
+ $titleValue = $this->titleParser->parseTitle( $pageName );
+ return Title::newFromLinkTarget( $titleValue );
+ }
+}
diff --git a/Translate/src/PageTranslation/MoveTranslatableBundleSpecialPage.php b/Translate/src/PageTranslation/MoveTranslatableBundleSpecialPage.php
new file mode 100644
index 00000000..a5283977
--- /dev/null
+++ b/Translate/src/PageTranslation/MoveTranslatableBundleSpecialPage.php
@@ -0,0 +1,429 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use CommentStore;
+use ErrorPageError;
+use Html;
+use HTMLForm;
+use InvalidArgumentException;
+use MediaWiki\Extension\Translate\MessageBundleTranslation\MessageBundle;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\TranslatableBundle;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\TranslatableBundleFactory;
+use MediaWiki\Permissions\PermissionManager;
+use Message;
+use OutputPage;
+use PermissionsError;
+use ReadOnlyError;
+use SplObjectStorage;
+use ThrottledError;
+use Title;
+use UnlistedSpecialPage;
+use Wikimedia\ObjectFactory\ObjectFactory;
+
+/**
+ * Replacement for Special:Movepage to allow renaming a translatable bundle and
+ * all pages associated with it.
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @ingroup SpecialPage PageTranslation
+ */
+class MoveTranslatableBundleSpecialPage extends UnlistedSpecialPage {
+ // Form parameters both as text and as titles
+ /** @var string */
+ private $oldText;
+ /** @var string */
+ private $reason;
+ /** @var bool */
+ private $moveTalkpages = true;
+ /** @var bool */
+ private $moveSubpages = true;
+ // Dependencies
+ /** @var ObjectFactory */
+ private $objectFactory;
+ /** @var TranslatableBundleMover */
+ private $bundleMover;
+ /** @var PermissionManager */
+ private $permissionManager;
+ /** @var TranslatableBundleFactory */
+ private $bundleFactory;
+ private $movePageSpec;
+ // Other
+ /** @var Title */
+ private $oldTitle;
+
+ public function __construct(
+ ObjectFactory $objectFactory,
+ PermissionManager $permissionManager,
+ TranslatableBundleMover $bundleMover,
+ TranslatableBundleFactory $bundleFactory,
+ $movePageSpec
+ ) {
+ parent::__construct( 'Movepage' );
+ $this->objectFactory = $objectFactory;
+ $this->permissionManager = $permissionManager;
+ $this->bundleMover = $bundleMover;
+ $this->bundleFactory = $bundleFactory;
+ $this->movePageSpec = $movePageSpec;
+ }
+
+ public function doesWrites(): bool {
+ return true;
+ }
+
+ protected function getGroupName(): string {
+ return 'pagetools';
+ }
+
+ /** @inheritDoc */
+ public function execute( $par ) {
+ $request = $this->getRequest();
+ $user = $this->getUser();
+ $this->addHelpLink( 'Help:Extension:Translate/Move_translatable_page' );
+
+ $this->oldText = $request->getText(
+ 'wpOldTitle',
+ $request->getText( 'target', $par ?? '' )
+ );
+ $newText = $request->getText( 'wpNewTitle' );
+
+ $this->oldTitle = Title::newFromText( $this->oldText );
+ $newTitle = Title::newFromText( $newText );
+ // Normalize input
+ if ( $this->oldTitle ) {
+ $this->oldText = $this->oldTitle->getPrefixedText();
+ }
+
+ $this->reason = $request->getText( 'reason' );
+
+ // This will throw exceptions if there is an error.
+ $this->doBasicChecks();
+
+ // Real stuff starts here
+ $bundle = $this->bundleFactory->getBundle( $this->oldTitle );
+ if ( $bundle && $bundle->isMoveable() ) {
+ $this->getOutput()->setPageTitle( $this->getSpecialPageTitle( $bundle ) );
+
+ if ( !$user->isAllowed( 'pagetranslation' ) ) {
+ throw new PermissionsError( 'pagetranslation' );
+ }
+
+ $subaction = $this->getSubactionFromRequest( $request->getText( 'subaction' ) );
+
+ $isValidPostRequest = $this->checkToken() && $request->wasPosted();
+ if ( $isValidPostRequest && $subaction === 'check' ) {
+ try {
+ $pageCollection = $this->bundleMover->getPageMoveCollection(
+ $this->oldTitle,
+ $newTitle,
+ $user,
+ $this->reason,
+ $this->moveSubpages,
+ $this->moveTalkpages
+ );
+ } catch ( ImpossiblePageMove $e ) {
+ $this->showErrors( $e->getBlockers() );
+ $this->showForm( $bundle );
+ return;
+ }
+
+ $this->showConfirmation( $pageCollection, $bundle );
+ } elseif ( $isValidPostRequest && $subaction === 'perform' ) {
+ $this->moveSubpages = $request->getBool( 'subpages' );
+ $this->moveTalkpages = $request->getBool( 'talkpages' );
+
+ $this->bundleMover->moveAsynchronously(
+ $this->oldTitle,
+ $newTitle,
+ $this->moveSubpages,
+ $this->getUser(),
+ $this->msg( 'pt-movepage-logreason', $this->oldTitle )->inContentLanguage()->text(),
+ $this->moveTalkpages
+ );
+ $this->getOutput()->addWikiMsg(
+ 'pt-movepage-started',
+ $this->getLogPageWikiLink( $this->bundleFactory->getValidBundle( $this->oldTitle ) )
+ );
+ } else {
+ $this->showForm( $bundle );
+ }
+ } else {
+ // Delegate... don't want to reimplement this
+ $sp = $this->objectFactory->createObject( $this->movePageSpec );
+ $sp->execute( $par );
+ }
+ }
+
+ /**
+ * Do the basic checks whether moving is possible and whether
+ * the input looks anywhere near sane.
+ * @throws PermissionsError|ErrorPageError|ReadOnlyError|ThrottledError
+ */
+ protected function doBasicChecks(): void {
+ $this->checkReadOnly();
+
+ if ( $this->oldTitle === null ) {
+ throw new ErrorPageError( 'notargettitle', 'notargettext' );
+ }
+
+ if ( !$this->oldTitle->exists() ) {
+ throw new ErrorPageError( 'nopagetitle', 'nopagetext' );
+ }
+
+ if ( $this->getUser()->pingLimiter( 'move' ) ) {
+ throw new ThrottledError;
+ }
+
+ // Check rights
+ $permErrors = $this->permissionManager
+ ->getPermissionErrors( 'move', $this->getUser(), $this->oldTitle );
+ if ( count( $permErrors ) ) {
+ throw new PermissionsError( 'move', $permErrors );
+ }
+ }
+
+ /** Checks token to protect against CSRF. */
+ protected function checkToken(): bool {
+ return $this->getContext()->getCsrfTokenSet()->matchTokenField( 'wpEditToken' );
+ }
+
+ /** Pretty-print the list of errors. */
+ protected function showErrors( SplObjectStorage $errors ): void {
+ // If there are many errors, for performance reasons we must parse them all at once
+ $s = '';
+ $context = 'pt-movepage-error-placeholder';
+ foreach ( $errors as $title ) {
+ $titleText = $title->getPrefixedText();
+ $s .= "'''$titleText'''\n\n";
+ $s .= $errors[ $title ]->getWikiText( false, $context );
+ }
+
+ $out = $this->getOutput();
+ $out->addHTML(
+ Html::errorBox(
+ $out->msg(
+ 'pt-movepage-blockers',
+ $this->getLanguage()->formatNum( count( $errors ) )
+ )->parseAsBlock() .
+ $out->parseAsContent( $s )
+ )
+ );
+ }
+
+ /** The query form. */
+ public function showForm( TranslatableBundle $bundle ) {
+ $this->getOutput()->addWikiMsg(
+ 'pt-movepage-intro',
+ $this->getLogPageWikiLink(
+ $this->bundleFactory->getBundle( Title::newFromText( $this->oldText ) )
+ )
+ );
+
+ HTMLForm::factory( 'ooui', $this->getCommonFormFields(), $this->getContext() )
+ ->setMethod( 'post' )
+ ->setAction( $this->getPageTitle( $this->oldText )->getLocalURL() )
+ ->setSubmitName( 'subaction' )
+ ->setSubmitTextMsg( 'pt-movepage-action-check' )
+ ->setWrapperLegendMsg(
+ $bundle instanceof MessageBundle ? 'pt-movepage-messagebundle-legend' : 'pt-movepage-legend'
+ )
+ ->prepareForm()
+ ->displayForm( false );
+ }
+
+ /**
+ * The second form, which still allows changing some things.
+ * Lists all the action which would take place.
+ */
+ protected function showConfirmation( PageMoveCollection $pageCollection, TranslatableBundle $bundle ): void {
+ $out = $this->getOutput();
+
+ $out->addWikiMsg(
+ 'pt-movepage-intro',
+ $this->getLogPageWikiLink(
+ $this->bundleFactory->getBundle( Title::newFromText( $this->oldText ) )
+ )
+ );
+
+ $count = 0;
+ $subpagesCount = 0;
+ $talkpagesCount = 0;
+
+ /** @var PageMoveOperation[][] */
+ $pagesToMove = [
+ 'pt-movepage-list-pages' => [ $pageCollection->getTranslatablePage() ],
+ 'pt-movepage-list-translation' => $pageCollection->getTranslationPagesPair(),
+ 'pt-movepage-list-section' => $pageCollection->getUnitPagesPair()
+ ];
+
+ $subpages = $pageCollection->getSubpagesPair();
+ if ( $subpages ) {
+ $pagesToMove[ 'pt-movepage-list-other'] = $subpages;
+ }
+
+ foreach ( $pagesToMove as $type => $pages ) {
+ $this->addSectionHeaderAndMessage( $out, $type, $pages );
+
+ if ( !$pages ) {
+ continue;
+ }
+
+ $lines = [];
+
+ foreach ( $pages as $pagePairs ) {
+ $count++;
+
+ if ( $type === 'pt-movepage-list-other' ) {
+ $subpagesCount++;
+ }
+
+ $old = $pagePairs->getOldTitle();
+ $new = $pagePairs->getNewTitle();
+ $line = '* ' . $old->getPrefixedText() . ' → ' . $new->getPrefixedText();
+ if ( $pagePairs->hasTalkpage() ) {
+ $count++;
+ $talkpagesCount++;
+ $line .= ' ' . $this->msg( 'pt-movepage-talkpage-exists' )->text();
+ }
+
+ $lines[] = $line;
+ }
+
+ $out->addWikiTextAsInterface( implode( "\n", $lines ) );
+ }
+
+ $translatableSubpages = $pageCollection->getTranslatableSubpages();
+ $sectionType = 'pt-movepage-list-translatable';
+ $this->addSectionHeaderAndMessage( $out, $sectionType, $translatableSubpages );
+ if ( $translatableSubpages ) {
+ $lines = [];
+ $out->wrapWikiMsg( "'''$1'''", $this->msg( 'pt-movepage-list-translatable-note' ) );
+ foreach ( $translatableSubpages as $page ) {
+ $lines[] = '* ' . $page->getPrefixedText();
+ }
+ $out->addWikiTextAsInterface( implode( "\n", $lines ) );
+ }
+
+ $out->addWikiTextAsInterface( "----\n" );
+ $out->addWikiMsg(
+ 'pt-movepage-list-count',
+ $this->getLanguage()->formatNum( $count ),
+ $this->getLanguage()->formatNum( $subpagesCount ),
+ $this->getLanguage()->formatNum( $talkpagesCount )
+ );
+
+ $formDescriptor = array_merge(
+ $this->getCommonFormFields(),
+ [
+ 'subpages' => [
+ 'type' => 'check',
+ 'name' => 'subpages',
+ 'id' => 'mw-subpages',
+ 'label-message' => 'pt-movepage-subpages',
+ 'default' => $this->moveSubpages,
+ ],
+ 'talkpages' => [
+ 'type' => 'check',
+ 'name' => 'talkpages',
+ 'id' => 'mw-talkpages',
+ 'label-message' => 'pt-movepage-talkpages',
+ 'default' => $this->moveTalkpages
+ ]
+ ]
+ );
+
+ $htmlForm = HTMLForm::factory( 'ooui', $formDescriptor, $this->getContext() );
+ $htmlForm
+ ->addButton( [
+ 'name' => 'subaction',
+ 'value' => $this->msg( 'pt-movepage-action-other' )->text(),
+ ] )
+ ->setMethod( 'post' )
+ ->setAction( $this->getPageTitle( $this->oldText )->getLocalURL() )
+ ->setSubmitName( 'subaction' )
+ ->setSubmitTextMsg( 'pt-movepage-action-perform' )
+ ->setWrapperLegendMsg(
+ $bundle instanceof MessageBundle ? 'pt-movepage-messagebundle-legend' : 'pt-movepage-legend'
+ )
+ ->prepareForm()
+ ->displayForm( false );
+ }
+
+ /** Add section header and no page message if there are no pages */
+ private function addSectionHeaderAndMessage( OutputPage $out, string $type, array $pages ): void {
+ $pageCount = count( $pages );
+ $out->wrapWikiMsg( '=== $1 ===', [ $type, $pageCount ] );
+
+ if ( !$pageCount ) {
+ $out->addWikiMsg( 'pt-movepage-list-no-pages' );
+ }
+ }
+
+ private function getSubactionFromRequest( string $subactionText ): string {
+ switch ( $subactionText ) {
+ case $this->msg( 'pt-movepage-action-check' )->text():
+ return 'check';
+ case $this->msg( 'pt-movepage-action-perform' )->text():
+ return 'perform';
+ case $this->msg( 'pt-movepage-action-other' )->text():
+ return 'show-form';
+ default:
+ return 'show-form';
+ }
+ }
+
+ private function getCommonFormFields(): array {
+ return [
+ 'wpOldTitle' => [
+ 'type' => 'text',
+ 'name' => 'wpOldTitle',
+ 'label-message' => 'pt-movepage-current',
+ 'default' => $this->oldText,
+ 'readonly' => true,
+ ],
+ 'wpNewTitle' => [
+ 'type' => 'text',
+ 'name' => 'wpNewTitle',
+ 'label-message' => 'pt-movepage-new',
+ ],
+ 'reason' => [
+ 'type' => 'text',
+ 'name' => 'reason',
+ 'label-message' => 'pt-movepage-reason',
+ 'maxlength' => CommentStore::COMMENT_CHARACTER_LIMIT,
+ 'default' => $this->reason,
+ ],
+ 'subpages' => [
+ 'type' => 'hidden',
+ 'name' => 'subpages',
+ 'default' => $this->moveSubpages,
+ ],
+ 'talkpages' => [
+ 'type' => 'hidden',
+ 'name' => 'talkpages',
+ 'default' => $this->moveTalkpages
+ ]
+ ];
+ }
+
+ private function getSpecialPageTitle( TranslatableBundle $bundle ): Message {
+ if ( $bundle instanceof TranslatablePage ) {
+ return $this->msg( 'pt-movepage-title', $this->oldText );
+ } elseif ( $bundle instanceof MessageBundle ) {
+ return $this->msg( 'pt-movepage-messagebundle-title', $this->oldText );
+ }
+
+ throw new InvalidArgumentException( 'TranslatableBundle is neither a TranslatablePage or MessageBundle' );
+ }
+
+ private function getLogPageWikiLink( ?TranslatableBundle $bundle ): string {
+ if ( $bundle instanceof MessageBundle ) {
+ return 'Special:Log/messagebundle';
+ }
+
+ // Default to page translation log in case of errors
+ return 'Special:Log/pagetranslation';
+ }
+}
diff --git a/Translate/src/PageTranslation/PageMoveCollection.php b/Translate/src/PageTranslation/PageMoveCollection.php
new file mode 100644
index 00000000..338b914c
--- /dev/null
+++ b/Translate/src/PageTranslation/PageMoveCollection.php
@@ -0,0 +1,144 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use Title;
+
+/**
+ * Collection of pages potentially affected by a page move operation.
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2021.09
+ */
+class PageMoveCollection {
+ /** @var PageMoveOperation|null */
+ private $translatablePage;
+ /** @var PageMoveOperation[] */
+ private $translationPagePairs;
+ /** @var PageMoveOperation[] */
+ private $unitPagesPairs;
+ /** @var PageMoveOperation[] */
+ private $subpagesPairs;
+ /** @var PageMoveOperation[] */
+ private $talkpagesPairs;
+ /** @var Title[] */
+ private $translatableSubpages;
+
+ /**
+ * @param PageMoveOperation $translatablePage Translatable page
+ * @param PageMoveOperation[] $translationPagePairs Translation pages
+ * @param PageMoveOperation[] $unitPagesPairs Translation unit pages
+ * @param PageMoveOperation[] $subpagesPairs Non translatable sub pages
+ * @param array $translatableSubpages Translatable sub pages
+ */
+ public function __construct(
+ PageMoveOperation $translatablePage,
+ array $translationPagePairs,
+ array $unitPagesPairs,
+ array $subpagesPairs,
+ array $translatableSubpages
+ ) {
+ $this->translatablePage = $translatablePage;
+ $this->translationPagePairs = $translationPagePairs;
+ $this->unitPagesPairs = $unitPagesPairs;
+ $this->subpagesPairs = $subpagesPairs;
+ $this->translatableSubpages = $translatableSubpages;
+
+ // Populate the talk pages from the various inputs.
+ $this->talkpagesPairs = $this->getTalkpages(
+ $this->translatablePage, ...$translationPagePairs, ...$unitPagesPairs, ...$subpagesPairs
+ );
+ }
+
+ public function getTranslatablePage(): PageMoveOperation {
+ return $this->translatablePage;
+ }
+
+ /** @return PageMoveOperation[] */
+ public function getTranslationPagesPair(): array {
+ return $this->translationPagePairs;
+ }
+
+ /** @return PageMoveOperation[] */
+ public function getUnitPagesPair(): array {
+ return $this->unitPagesPairs;
+ }
+
+ /** @return PageMoveOperation[] */
+ public function getSubpagesPair(): array {
+ return $this->subpagesPairs;
+ }
+
+ /** @return Title[] */
+ public function getTranslatableSubpages(): array {
+ return $this->translatableSubpages;
+ }
+
+ /** @return Title[] */
+ public function getTranslationPages(): array {
+ return $this->getOldPagesFromList( $this->translationPagePairs );
+ }
+
+ /** @return Title[] */
+ public function getUnitPages(): array {
+ return $this->getOldPagesFromList( $this->unitPagesPairs );
+ }
+
+ /** @return Title[] */
+ public function getSubpages(): array {
+ return $this->getOldPagesFromList( $this->subpagesPairs );
+ }
+
+ /** @return string[] */
+ public function getListOfPages(): array {
+ $pageList = [
+ $this->translatablePage->getOldTitle()->getPrefixedText() =>
+ $this->translatablePage->getNewTitle() ?
+ $this->translatablePage->getNewTitle()->getPrefixedText() : null
+ ];
+ $pageList = array_merge( $pageList, $this->getPagePairFromList( $this->translationPagePairs ) );
+ $pageList = array_merge( $pageList, $this->getPagePairFromList( $this->unitPagesPairs ) );
+ $pageList = array_merge( $pageList, $this->getPagePairFromList( $this->subpagesPairs ) );
+ $pageList = array_merge( $pageList, $this->getPagePairFromList( $this->talkpagesPairs ) );
+
+ return $pageList;
+ }
+
+ /**
+ * @param PageMoveOperation[] $pagePairs
+ * @return Title[]
+ */
+ private function getOldPagesFromList( array $pagePairs ): array {
+ $oldTitles = [];
+ foreach ( $pagePairs as $pair ) {
+ $oldTitles[] = $pair->getOldTitle();
+ }
+
+ return $oldTitles;
+ }
+
+ /** @return string[] */
+ private function getPagePairFromList( array $pagePairs ): array {
+ $pairs = [];
+ foreach ( $pagePairs as $pair ) {
+ $pairs[ $pair->getOldTitle()->getPrefixedText() ] =
+ $pair->getNewTitle() ? $pair->getNewTitle()->getPrefixedText() : null;
+ }
+
+ return $pairs;
+ }
+
+ /** @return PageMoveOperation[] */
+ private function getTalkpages( PageMoveOperation ...$allMoveOperations ): array {
+ $talkpagesPairs = [];
+ foreach ( $allMoveOperations as $moveOperation ) {
+ if ( $moveOperation->hasTalkpage() ) {
+ $talkpagesPairs[] = new PageMoveOperation(
+ $moveOperation->getOldTalkpage(), $moveOperation->getNewTalkpage()
+ );
+ }
+ }
+ return $talkpagesPairs;
+ }
+}
diff --git a/Translate/src/PageTranslation/PageMoveOperation.php b/Translate/src/PageTranslation/PageMoveOperation.php
new file mode 100644
index 00000000..2cfbb5ea
--- /dev/null
+++ b/Translate/src/PageTranslation/PageMoveOperation.php
@@ -0,0 +1,61 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use Title;
+
+/**
+ * Represents a single page being moved including the talk page.
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2021.09
+ */
+class PageMoveOperation {
+ /** @var Title */
+ private $old;
+ /** @var Title|null */
+ private $new;
+ /** @var Title|null */
+ private $oldTalkpage;
+ /** @var Title|null */
+ private $newTalkpage;
+ /** @var InvalidPageTitleRename|null */
+ private $invalidPageTitleRename;
+
+ public function __construct( Title $old, ?Title $new, ?InvalidPageTitleRename $e = null ) {
+ $this->old = $old;
+ $this->new = $new;
+ $this->invalidPageTitleRename = $e;
+ }
+
+ public function getOldTitle(): Title {
+ return $this->old;
+ }
+
+ public function getNewTitle(): ?Title {
+ return $this->new;
+ }
+
+ public function getOldTalkpage(): ?Title {
+ return $this->oldTalkpage;
+ }
+
+ public function getNewTalkpage(): ?Title {
+ return $this->newTalkpage;
+ }
+
+ public function hasTalkpage(): bool {
+ return $this->oldTalkpage !== null;
+ }
+
+ public function getRenameErrorCode(): int {
+ return $this->invalidPageTitleRename ?
+ $this->invalidPageTitleRename->getCode() : PageTitleRenamer::NO_ERROR;
+ }
+
+ public function setTalkpage( Title $oldTalkpage, ?Title $newTalkpage ): void {
+ $this->oldTalkpage = $oldTalkpage;
+ $this->newTalkpage = $newTalkpage;
+ }
+}
diff --git a/Translate/src/PageTranslation/PageTitleRenamer.php b/Translate/src/PageTranslation/PageTitleRenamer.php
new file mode 100644
index 00000000..45ccee6d
--- /dev/null
+++ b/Translate/src/PageTranslation/PageTitleRenamer.php
@@ -0,0 +1,105 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use Title;
+
+/**
+ * Contains logic to determine the new title of translatable pages and
+ * dependent pages being moved
+ * @author Niklas Laxström
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2021.09
+ */
+class PageTitleRenamer {
+ public const NO_ERROR = 0;
+ public const UNKNOWN_PAGE = 1;
+ public const NS_TALK_UNSUPPORTED = 2;
+ public const RENAME_FAILED = 3;
+ public const INVALID_TITLE = 4;
+
+ private const IMPOSSIBLE = null;
+ private $map = [];
+
+ public function __construct( Title $source, Title $target ) {
+ $this->map[$source->getNamespace()] = [
+ $target->getNamespace(),
+ $source->getText(),
+ $target->getText(),
+ ];
+
+ $sourceTalkPage = $source->getTalkPageIfDefined();
+ $targetTalkPage = $target->getTalkPageIfDefined();
+ if ( $sourceTalkPage ) {
+ if ( !$targetTalkPage ) {
+ $this->map[$sourceTalkPage->getNamespace()] = [
+ self::IMPOSSIBLE,
+ null,
+ null,
+ ];
+ } else {
+ $this->map[$sourceTalkPage->getNamespace()] = [
+ $targetTalkPage->getNamespace(),
+ $source->getText(),
+ $target->getText(),
+ ];
+ }
+ }
+
+ $this->map[NS_TRANSLATIONS] = [
+ NS_TRANSLATIONS,
+ $source->getPrefixedText(),
+ $target->getPrefixedText(),
+ ];
+
+ $this->map[NS_TRANSLATIONS_TALK] = [
+ NS_TRANSLATIONS_TALK,
+ $source->getPrefixedText(),
+ $target->getPrefixedText(),
+ ];
+ }
+
+ public function getNewTitle( Title $title ): Title {
+ $instructions = $this->map[$title->getNamespace()] ?? null;
+ if ( $instructions === null ) {
+ throw new InvalidPageTitleRename(
+ 'Trying to move a page which is not part of the translatable page', self::UNKNOWN_PAGE
+ );
+ }
+
+ [ $newNamespace, $search, $replace ] = $instructions;
+
+ if ( $newNamespace === self::IMPOSSIBLE ) {
+ throw new InvalidPageTitleRename(
+ 'Trying to move a talk page to a namespace which does not have talk pages',
+ self::NS_TALK_UNSUPPORTED
+ );
+ }
+
+ $oldTitleText = $title->getText();
+
+ // Check if the old title matches the string being replaced, if so there is no
+ // need to run preg_replace. This will happen if the page is being moved from
+ // one namespace to another.
+ if ( $oldTitleText === $replace ) {
+ return Title::makeTitleSafe( $newNamespace, $replace );
+ }
+
+ $searchQuoted = preg_quote( $search, '~' );
+ $newText = preg_replace( "~^$searchQuoted~", $replace, $oldTitleText, 1 );
+
+ // If old and new title + namespace are same, the renaming failed.
+ if ( $oldTitleText === $newText && $newNamespace === $title->getNamespace() ) {
+ throw new InvalidPageTitleRename( 'Renaming failed', self::RENAME_FAILED );
+ }
+
+ $title = Title::makeTitleSafe( $newNamespace, $newText );
+ if ( $title === null ) {
+ throw new InvalidPageTitleRename( 'Invalid target title', self::INVALID_TITLE );
+ }
+
+ return $title;
+ }
+}
diff --git a/Translate/src/PageTranslation/PageTranslationSpecialPage.php b/Translate/src/PageTranslation/PageTranslationSpecialPage.php
new file mode 100644
index 00000000..252111e4
--- /dev/null
+++ b/Translate/src/PageTranslation/PageTranslationSpecialPage.php
@@ -0,0 +1,1312 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use ContentHandler;
+use DifferenceEngine;
+use Html;
+use JobQueueGroup;
+use ManualLogEntry;
+use MediaWiki\Cache\LinkBatchFactory;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\RevTagStore;
+use MediaWiki\Extension\Translate\Synchronization\MessageWebImporter;
+use MediaWiki\Extension\Translate\Utilities\LanguagesMultiselectWidget;
+use MediaWiki\Extension\TranslationNotifications\SpecialNotifyTranslators;
+use MediaWiki\Languages\LanguageFactory;
+use MediaWiki\Languages\LanguageNameUtils;
+use MediaWiki\MediaWikiServices;
+use MediaWiki\Revision\RevisionRecord;
+use MediaWiki\User\UserIdentity;
+use Message;
+use MessageGroups;
+use MessageGroupStatsRebuildJob;
+use MessageIndex;
+use MWException;
+use OOUI\ButtonInputWidget;
+use OOUI\CheckboxInputWidget;
+use OOUI\FieldLayout;
+use OOUI\FieldsetLayout;
+use OOUI\TextInputWidget;
+use PermissionsError;
+use SpecialPage;
+use Status;
+use Title;
+use TranslateMetadata;
+use TranslateUtils;
+use UserBlockedError;
+use WebRequest;
+use Wikimedia\Rdbms\ILoadBalancer;
+use Wikimedia\Rdbms\IResultWrapper;
+use Xml;
+use function count;
+use function wfEscapeWikiText;
+use const EDIT_FORCE_BOT;
+use const EDIT_UPDATE;
+
+/**
+ * A special page for marking revisions of pages for translation.
+ *
+ * This page is the main tool for translation administrators in the wiki.
+ * It will list all pages in their various states and provides actions
+ * that are suitable for given translatable page.
+ *
+ * @author Niklas Laxström
+ * @author Siebrand Mazeland
+ * @license GPL-2.0-or-later
+ */
+class PageTranslationSpecialPage extends SpecialPage {
+ private const LATEST_SYNTAX_VERSION = '2';
+ private const DEFAULT_SYNTAX_VERSION = '1';
+ private const DISPLAY_STATUS_MAPPING = [
+ TranslatablePageStatus::PROPOSED => 'proposed',
+ TranslatablePageStatus::ACTIVE => 'active',
+ TranslatablePageStatus::OUTDATED => 'outdated',
+ TranslatablePageStatus::BROKEN => 'broken'
+ ];
+ /** @var LanguageNameUtils */
+ private $languageNameUtils;
+ /** @var LanguageFactory */
+ private $languageFactory;
+ /** @var TranslationUnitStoreFactory */
+ private $translationUnitStoreFactory;
+ /** @var TranslatablePageParser */
+ private $translatablePageParser;
+ /** @var LinkBatchFactory */
+ private $linkBatchFactory;
+ /** @var JobQueueGroup */
+ private $jobQueueGroup;
+ /** @var ILoadBalancer */
+ private $loadBalancer;
+ /** @var MessageIndex */
+ private $messageIndex;
+
+ public function __construct(
+ LanguageNameUtils $languageNameUtils,
+ LanguageFactory $languageFactory,
+ TranslationUnitStoreFactory $translationUnitStoreFactory,
+ TranslatablePageParser $translatablePageParser,
+ LinkBatchFactory $linkBatchFactory,
+ JobQueueGroup $jobQueueGroup,
+ ILoadBalancer $loadBalancer,
+ MessageIndex $messageIndex
+ ) {
+ parent::__construct( 'PageTranslation' );
+ $this->languageNameUtils = $languageNameUtils;
+ $this->languageFactory = $languageFactory;
+ $this->translationUnitStoreFactory = $translationUnitStoreFactory;
+ $this->translatablePageParser = $translatablePageParser;
+ $this->linkBatchFactory = $linkBatchFactory;
+ $this->jobQueueGroup = $jobQueueGroup;
+ $this->loadBalancer = $loadBalancer;
+ $this->messageIndex = $messageIndex;
+ }
+
+ public function doesWrites(): bool {
+ return true;
+ }
+
+ protected function getGroupName(): string {
+ return 'translation';
+ }
+
+ public function execute( $parameters ) {
+ $this->setHeaders();
+
+ $user = $this->getUser();
+ $request = $this->getRequest();
+
+ $target = $request->getText( 'target', $parameters ?? '' );
+ $revision = $request->getInt( 'revision', 0 );
+ $action = $request->getVal( 'do' );
+ $out = $this->getOutput();
+ $out->addModules( 'ext.translate.special.pagetranslation' );
+ $out->addHelpLink( 'Help:Extension:Translate/Page_translation_example' );
+ $out->enableOOUI();
+
+ if ( $target === '' ) {
+ $this->listPages();
+
+ return;
+ }
+
+ // Anything else than listing the pages need permissions
+ if ( !$user->isAllowed( 'pagetranslation' ) ) {
+ throw new PermissionsError( 'pagetranslation' );
+ }
+
+ $title = Title::newFromText( $target );
+ if ( !$title ) {
+ $out->wrapWikiMsg( Html::errorBox( '$1' ), [ 'tpt-badtitle', $target ] );
+ $out->addWikiMsg( 'tpt-list-pages-in-translations' );
+
+ return;
+ } elseif ( !$title->exists() ) {
+ $out->wrapWikiMsg(
+ Html::errorBox( '$1' ),
+ [ 'tpt-nosuchpage', $title->getPrefixedText() ]
+ );
+ $out->addWikiMsg( 'tpt-list-pages-in-translations' );
+
+ return;
+ }
+
+ // Check for blocks
+ $permissionManager = MediaWikiServices::getInstance()->getPermissionManager();
+ if ( $permissionManager->isBlockedFrom( $user, $title, !$request->wasPosted() ) ) {
+ $block = $user->getBlock();
+ if ( $block ) {
+ throw new UserBlockedError(
+ $block,
+ $user,
+ $this->getLanguage(),
+ $request->getIP()
+ );
+ }
+
+ throw new PermissionsError( 'pagetranslation', [ 'badaccess-group0' ] );
+
+ }
+
+ // Check token for all POST actions here
+ $csrfTokenSet = $this->getContext()->getCsrfTokenSet();
+ if ( $request->wasPosted() && !$csrfTokenSet->matchTokenField( 'token' ) ) {
+ throw new PermissionsError( 'pagetranslation' );
+ }
+
+ if ( $action === 'mark' ) {
+ // Has separate form
+ $this->onActionMark( $title, $revision );
+
+ return;
+ }
+
+ // On GET requests, show form which has token
+ if ( !$request->wasPosted() ) {
+ if ( $action === 'unlink' ) {
+ $this->showUnlinkConfirmation( $title );
+ } else {
+ $params = [
+ 'do' => $action,
+ 'target' => $title->getPrefixedText(),
+ 'revision' => $revision,
+ ];
+ $this->showGenericConfirmation( $params );
+ }
+
+ return;
+ }
+
+ if ( $action === 'discourage' || $action === 'encourage' ) {
+ $id = TranslatablePage::getMessageGroupIdFromTitle( $title );
+ $current = MessageGroups::getPriority( $id );
+
+ if ( $action === 'encourage' ) {
+ $new = '';
+ } else {
+ $new = 'discouraged';
+ }
+
+ if ( $new !== $current ) {
+ MessageGroups::setPriority( $id, $new );
+ $entry = new ManualLogEntry( 'pagetranslation', $action );
+ $entry->setPerformer( $user );
+ $entry->setTarget( $title );
+ $logid = $entry->insert();
+ $entry->publish( $logid );
+ }
+
+ // Defer stats purging of parent aggregate groups. Shared groups can contain other
+ // groups as well, which we do not need to update. We could filter non-aggregate
+ // groups out, or use MessageGroups::getParentGroups, though it has an inconvenient
+ // return value format for this use case.
+ $group = MessageGroups::getGroup( $id );
+ $sharedGroupIds = MessageGroups::getSharedGroups( $group );
+ if ( $sharedGroupIds !== [] ) {
+ $job = MessageGroupStatsRebuildJob::newRefreshGroupsJob( $sharedGroupIds );
+ $this->jobQueueGroup->push( $job );
+ }
+
+ // Show updated page with a notice
+ $this->listPages();
+
+ return;
+ }
+
+ if ( $action === 'unlink' ) {
+ $page = TranslatablePage::newFromTitle( $title );
+
+ $content = ContentHandler::makeContent(
+ $page->getStrippedSourcePageText(),
+ $title
+ );
+
+ $status = MediaWikiServices::getInstance()->getWikiPageFactory()->newFromTitle( $title )->doUserEditContent(
+ $content,
+ $this->getUser(),
+ $this->msg( 'tpt-unlink-summary' )->inContentLanguage()->text(),
+ EDIT_FORCE_BOT | EDIT_UPDATE
+ );
+
+ if ( !$status->isOK() ) {
+ $out->wrapWikiMsg(
+ Html::errorBox( '$1' ),
+ [ 'tpt-edit-failed', $status->getWikiText() ]
+ );
+ $out->addWikiMsg( 'tpt-list-pages-in-translations' );
+
+ return;
+ }
+
+ $page = TranslatablePage::newFromTitle( $title );
+ $this->unmarkPage( $page, $user );
+ $out->wrapWikiMsg(
+ Html::successBox( '$1' ),
+ [ 'tpt-unmarked', $title->getPrefixedText() ]
+ );
+ $out->addWikiMsg( 'tpt-list-pages-in-translations' );
+
+ return;
+ }
+
+ if ( $action === 'unmark' ) {
+ $page = TranslatablePage::newFromTitle( $title );
+ $this->unmarkPage( $page, $user );
+ $out->wrapWikiMsg(
+ Html::successBox( '$1' ),
+ [ 'tpt-unmarked', $title->getPrefixedText() ]
+ );
+ $out->addWikiMsg( 'tpt-list-pages-in-translations' );
+ }
+ }
+
+ protected function onActionMark( Title $title, int $revision ): void {
+ $request = $this->getRequest();
+ $out = $this->getOutput();
+
+ $out->addModuleStyles( 'ext.translate.specialpages.styles' );
+
+ if ( $revision === 0 ) {
+ // Get the latest revision
+ $revision = (int)$title->getLatestRevID();
+ }
+
+ // This also catches the case where revision does not belong to the title
+ if ( $revision !== (int)$title->getLatestRevID() ) {
+ // We do want to notify the reviewer if the underlying page changes during review
+ $target = $title->getFullURL( [ 'oldid' => $revision ] );
+ $link = "<span class='plainlinks'>[$target $revision]</span>";
+ $out->wrapWikiMsg(
+ Html::warningBox( '$1' ),
+ [ 'tpt-oldrevision', $title->getPrefixedText(), $link ]
+ );
+ $out->addWikiMsg( 'tpt-list-pages-in-translations' );
+
+ return;
+ }
+
+ // newFromRevision never fails, but getReadyTag might fail if revision does not belong
+ // to the page (checked above)
+ $page = TranslatablePage::newFromRevision( $title, $revision );
+ if ( $page->getReadyTag() !== $title->getLatestRevID() ) {
+ $out->wrapWikiMsg(
+ Html::errorBox( '$1' ),
+ [ 'tpt-notsuitable', $title->getPrefixedText(), Message::plaintextParam( '<translate>' ) ]
+ );
+ $out->addWikiMsg( 'tpt-list-pages-in-translations' );
+
+ return;
+ }
+
+ $firstMark = $page->getMarkedTag() === null;
+
+ $parse = $this->translatablePageParser->parse( $page->getText() );
+ [ $units, $deletedUnits ] = $this->prepareTranslationUnits( $page, $parse );
+
+ $error = $this->validateUnitIds( $units );
+
+ // Non-fatal error which prevents saving
+ if ( !$error && $request->wasPosted() ) {
+ // Check if user wants to translate title
+ // If not, remove it from the list of units
+ if ( !$request->getCheck( 'translatetitle' ) ) {
+ $units = array_filter( $units, static function ( $s ) {
+ return $s->id !== TranslatablePage::DISPLAY_TITLE_UNIT_ID;
+ } );
+ }
+
+ $setVersion = $firstMark || $request->getCheck( 'use-latest-syntax' );
+ $transclusion = $request->getCheck( 'transclusion' );
+
+ $err = $this->markForTranslation( $page, $parse, $units, $setVersion, $transclusion );
+
+ if ( $err ) {
+ call_user_func_array( [ $out, 'addWikiMsg' ], $err );
+ } else {
+ $this->showSuccess( $page, $firstMark, count( $units ) );
+ }
+
+ return;
+ }
+
+ $this->showPage( $page, $parse, $units, $deletedUnits, $firstMark );
+ }
+
+ /**
+ * Displays success message and other instructions after a page has been marked for translation.
+ * @param TranslatablePage $page
+ * @param bool $firstMark true if it is the first time the page is being marked for translation.
+ * @param int $unitCount
+ * @return void
+ */
+ private function showSuccess(
+ TranslatablePage $page, bool $firstMark, int $unitCount
+ ): void {
+ $titleText = $page->getTitle()->getPrefixedText();
+ $num = $this->getLanguage()->formatNum( $unitCount );
+ $link = SpecialPage::getTitleFor( 'Translate' )->getFullURL( [
+ 'group' => $page->getMessageGroupId(),
+ 'action' => 'page',
+ 'filter' => '',
+ ] );
+
+ $this->getOutput()->wrapWikiMsg(
+ Html::successBox( '$1' ),
+ [ 'tpt-saveok', $titleText, $num, $link ]
+ );
+
+ // If the page is being marked for translation for the first time
+ // add a link to Special:PageMigration.
+ if ( $firstMark ) {
+ $this->getOutput()->addWikiMsg( 'tpt-saveok-first' );
+ }
+
+ // If TranslationNotifications is installed, and the user can notify
+ // translators, add a convenience link.
+ if ( method_exists( SpecialNotifyTranslators::class, 'execute' ) &&
+ $this->getUser()->isAllowed( SpecialNotifyTranslators::$right )
+ ) {
+ $link = SpecialPage::getTitleFor( 'NotifyTranslators' )->getFullURL(
+ [ 'tpage' => $page->getTitle()->getArticleID() ]
+ );
+ $this->getOutput()->addWikiMsg( 'tpt-offer-notify', $link );
+ }
+
+ $this->getOutput()->addWikiMsg( 'tpt-list-pages-in-translations' );
+ }
+
+ protected function showGenericConfirmation( array $params ): void {
+ $formParams = [
+ 'method' => 'post',
+ 'action' => $this->getPageTitle()->getLocalURL(),
+ ];
+
+ $params['title'] = $this->getPageTitle()->getPrefixedText();
+ $params['token'] = $this->getContext()->getCsrfTokenSet()->getToken();
+
+ $hidden = '';
+ foreach ( $params as $key => $value ) {
+ $hidden .= Html::hidden( $key, $value );
+ }
+
+ $this->getOutput()->addHTML(
+ Html::openElement( 'form', $formParams ) .
+ $hidden .
+ $this->msg( 'tpt-generic-confirm' )->parseAsBlock() .
+ Xml::submitButton(
+ $this->msg( 'tpt-generic-button' )->text(),
+ [ 'class' => 'mw-ui-button mw-ui-progressive' ]
+ ) .
+ Html::closeElement( 'form' )
+ );
+ }
+
+ protected function showUnlinkConfirmation( Title $target ): void {
+ $formParams = [
+ 'method' => 'post',
+ 'action' => $this->getPageTitle()->getLocalURL(),
+ ];
+
+ $this->getOutput()->addHTML(
+ Html::openElement( 'form', $formParams ) .
+ Html::hidden( 'do', 'unlink' ) .
+ Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() ) .
+ Html::hidden( 'target', $target->getPrefixedText() ) .
+ Html::hidden( 'token', $this->getContext()->getCsrfTokenSet()->getToken() ) .
+ $this->msg( 'tpt-unlink-confirm', $target->getPrefixedText() )->parseAsBlock() .
+ Xml::submitButton(
+ $this->msg( 'tpt-unlink-button' )->text(),
+ [ 'class' => 'mw-ui-button mw-ui-destructive' ]
+ ) .
+ Html::closeElement( 'form' )
+ );
+ }
+
+ protected function unmarkPage( TranslatablePage $page, UserIdentity $user ): void {
+ $page->unmarkTranslatablePage();
+ $page->getTitle()->invalidateCache();
+
+ $entry = new ManualLogEntry( 'pagetranslation', 'unmark' );
+ $entry->setPerformer( $user );
+ $entry->setTarget( $page->getTitle() );
+ $logid = $entry->insert();
+ $entry->publish( $logid );
+ }
+
+ /**
+ * TODO: Move this function to SyncTranslatableBundleStatusMaintenanceScript once we
+ * start using the translatable_bundles table for fetching the translatabale pages
+ */
+ public static function loadPagesFromDB(): IResultWrapper {
+ $dbr = TranslateUtils::getSafeReadDB();
+ $tables = [ 'page', 'revtag' ];
+ $vars = [
+ 'page_id',
+ 'page_namespace',
+ 'page_title',
+ 'page_latest',
+ 'MAX(rt_revision) AS rt_revision',
+ 'rt_type'
+ ];
+ $conds = [
+ 'page_id=rt_page',
+ 'rt_type' => [ RevTagStore::TP_MARK_TAG, RevTagStore::TP_READY_TAG ],
+ ];
+ $options = [
+ 'ORDER BY' => 'page_namespace, page_title',
+ 'GROUP BY' => 'page_id, page_namespace, page_title, page_latest, rt_type',
+ ];
+
+ return $dbr->select( $tables, $vars, $conds, __METHOD__, $options );
+ }
+
+ /**
+ * TODO: Move this function to SyncTranslatableBundleStatusMaintenanceScript once we
+ * start using the translatable_bundles table for fetching the translatabale pages
+ */
+ public static function buildPageArray( IResultWrapper $res ): array {
+ $pages = [];
+ foreach ( $res as $r ) {
+ // We have multiple rows for same page, because of different tags
+ if ( !isset( $pages[$r->page_id] ) ) {
+ $pages[$r->page_id] = [];
+ $title = Title::newFromRow( $r );
+ $pages[$r->page_id]['title'] = $title;
+ $pages[$r->page_id]['latest'] = (int)$title->getLatestRevID();
+ }
+
+ $tag = $r->rt_type;
+ $pages[$r->page_id][$tag] = (int)$r->rt_revision;
+ }
+
+ return $pages;
+ }
+
+ /**
+ * Classify a list of pages and amend them with additional metadata.
+ *
+ * @param array[] $pages
+ * @return array[]
+ * @phan-return array{proposed:array[],active:array[],broken:array[],outdated:array[]}
+ */
+ private function classifyPages( array $pages ): array {
+ // Preload stuff for performance
+ $messageGroupIdsForPreload = [];
+ foreach ( $pages as $i => $page ) {
+ $id = TranslatablePage::getMessageGroupIdFromTitle( $page['title'] );
+ $messageGroupIdsForPreload[] = $id;
+ $pages[$i]['groupid'] = $id;
+ }
+ // Performance optimization: load only data we need to classify the pages
+ $metadata = TranslateMetadata::loadBasicMetadataForTranslatablePages(
+ $messageGroupIdsForPreload,
+ [ 'transclusion', 'version' ]
+ );
+
+ $out = [
+ // The ideal state for pages: marked and up to date
+ 'active' => [],
+ 'proposed' => [],
+ 'outdated' => [],
+ 'broken' => [],
+ ];
+
+ foreach ( $pages as $page ) {
+ $groupId = $page['groupid'];
+ $group = MessageGroups::getGroup( $groupId );
+ $page['discouraged'] = MessageGroups::getPriority( $group ) === 'discouraged';
+ $page['version'] = $metadata[$groupId]['version'] ?? self::DEFAULT_SYNTAX_VERSION;
+ $page['transclusion'] = $metadata[$groupId]['transclusion'] ?? false;
+
+ // TODO: Eventually we should query the status directly from the TranslatableBundleStore
+ $tpStatus = TranslatablePage::determineStatus(
+ $page[RevTagStore::TP_READY_TAG] ?? null,
+ $page[RevTagStore::TP_MARK_TAG] ?? null,
+ $page['latest']
+ );
+
+ if ( !$tpStatus ) {
+ // Ignore pages for which status could not be determined.
+ continue;
+ }
+
+ $out[self::DISPLAY_STATUS_MAPPING[$tpStatus->getId()]][] = $page;
+ }
+
+ return $out;
+ }
+
+ public function listPages(): void {
+ $out = $this->getOutput();
+
+ $res = self::loadPagesFromDB();
+ $allPages = self::buildPageArray( $res );
+ if ( !count( $allPages ) ) {
+ $out->addWikiMsg( 'tpt-list-nopages' );
+
+ return;
+ }
+
+ $lb = $this->linkBatchFactory->newLinkBatch();
+ $lb->setCaller( __METHOD__ );
+ foreach ( $allPages as $page ) {
+ $lb->addObj( $page['title'] );
+ }
+ $lb->execute();
+
+ $types = $this->classifyPages( $allPages );
+
+ $pages = $types['proposed'];
+ if ( $pages ) {
+ $out->wrapWikiMsg( '== $1 ==', 'tpt-new-pages-title' );
+ $out->addWikiMsg( 'tpt-new-pages', count( $pages ) );
+ $out->addHTML( $this->getPageList( $pages, 'proposed' ) );
+ }
+
+ $pages = $types['broken'];
+ if ( $pages ) {
+ $out->wrapWikiMsg( '== $1 ==', 'tpt-other-pages-title' );
+ $out->addWikiMsg( 'tpt-other-pages', count( $pages ) );
+ $out->addHTML( $this->getPageList( $pages, 'broken' ) );
+ }
+
+ $pages = $types['outdated'];
+ if ( $pages ) {
+ $out->wrapWikiMsg( '== $1 ==', 'tpt-outdated-pages-title' );
+ $out->addWikiMsg( 'tpt-outdated-pages', count( $pages ) );
+ $out->addHTML( $this->getPageList( $pages, 'outdated' ) );
+ }
+
+ $pages = $types['active'];
+ if ( $pages ) {
+ $out->wrapWikiMsg( '== $1 ==', 'tpt-old-pages-title' );
+ $out->addWikiMsg( 'tpt-old-pages', count( $pages ) );
+ $out->addHTML( $this->getPageList( $pages, 'active' ) );
+ }
+ }
+
+ private function actionLinks( array $page, string $type ): string {
+ // Performance optimization to avoid calling $this->msg in a loop
+ static $messageCache = null;
+ if ( $messageCache === null ) {
+ $messageCache = [
+ 'mark' => $this->msg( 'tpt-rev-mark' )->text(),
+ 'mark-tooltip' => $this->msg( 'tpt-rev-mark-tooltip' )->text(),
+ 'encourage' => $this->msg( 'tpt-rev-encourage' )->text(),
+ 'encourage-tooltip' => $this->msg( 'tpt-rev-encourage-tooltip' )->text(),
+ 'discourage' => $this->msg( 'tpt-rev-discourage' )->text(),
+ 'discourage-tooltip' => $this->msg( 'tpt-rev-discourage-tooltip' )->text(),
+ 'unmark' => $this->msg( 'tpt-rev-unmark' )->text(),
+ 'unmark-tooltip' => $this->msg( 'tpt-rev-unmark-tooltip' )->text(),
+ 'pipe-separator' => $this->msg( 'pipe-separator' )->escaped(),
+ ];
+ }
+
+ $actions = [];
+ /** @var Title $title */
+ $title = $page['title'];
+ $user = $this->getUser();
+
+ // Class to allow one-click POSTs
+ $js = [ 'class' => 'mw-translate-jspost' ];
+
+ if ( $user->isAllowed( 'pagetranslation' ) ) {
+ // Enable re-marking of all pages to allow changing of priority languages
+ // or migration to the new syntax version
+ if ( $type !== 'broken' ) {
+ $actions[] = $this->getLinkRenderer()->makeKnownLink(
+ $this->getPageTitle(),
+ $messageCache['mark'],
+ [ 'title' => $messageCache['mark-tooltip'] ],
+ [
+ 'do' => 'mark',
+ 'target' => $title->getPrefixedText(),
+ 'revision' => $title->getLatestRevID(),
+ ]
+ );
+ }
+
+ if ( $type !== 'proposed' ) {
+ if ( $page['discouraged'] ) {
+ $actions[] = $this->getLinkRenderer()->makeKnownLink(
+ $this->getPageTitle(),
+ $messageCache['encourage'],
+ [ 'title' => $messageCache['encourage-tooltip'] ] + $js,
+ [
+ 'do' => 'encourage',
+ 'target' => $title->getPrefixedText(),
+ 'revision' => -1,
+ ]
+ );
+ } else {
+ $actions[] = $this->getLinkRenderer()->makeKnownLink(
+ $this->getPageTitle(),
+ $messageCache['discourage'],
+ [ 'title' => $messageCache['discourage-tooltip'] ] + $js,
+ [
+ 'do' => 'discourage',
+ 'target' => $title->getPrefixedText(),
+ 'revision' => -1,
+ ]
+ );
+ }
+
+ $actions[] = $this->getLinkRenderer()->makeKnownLink(
+ $this->getPageTitle(),
+ $messageCache['unmark'],
+ [ 'title' => $messageCache['unmark-tooltip'] ],
+ [
+ 'do' => $type === 'broken' ? 'unmark' : 'unlink',
+ 'target' => $title->getPrefixedText(),
+ 'revision' => -1,
+ ]
+ );
+ }
+ }
+
+ if ( !$actions ) {
+ return '';
+ }
+
+ return '<div>' . implode( $messageCache['pipe-separator'], $actions ) . '</div>';
+ }
+
+ /**
+ * Validate translation unit IDs.
+ * @param TranslationUnit[] $units
+ * @return bool Whether there were any errors
+ */
+ private function validateUnitIds( array $units ): bool {
+ $usedNames = [];
+ $status = Status::newGood();
+
+ $ic = preg_quote( TranslationUnit::UNIT_MARKER_INVALID_CHARS, '~' );
+ foreach ( $units as $s ) {
+ if ( preg_match( "~[$ic]~", $s->id ) ) {
+ $status->fatal( 'tpt-invalid', $s->id );
+ }
+
+ // We need to do checks for both new and existing units.
+ // Someone might have tampered with the page source adding
+ // duplicate or invalid markers.
+ if ( isset( $usedNames[$s->id] ) ) {
+ // If the same ID is used three or more times, the same
+ // error will be added more than once, but that's okay,
+ // Status::fatal will deduplicate
+ $status->fatal( 'tpt-duplicate', $s->id );
+ }
+ $usedNames[$s->id] = true;
+ }
+
+ if ( $status->isOK() ) {
+ return false;
+ } else {
+ $this->getOutput()->addHTML(
+ Html::errorBox(
+ $status->getHTML( false, false, $this->getLanguage() )
+ )
+ );
+ return true;
+ }
+ }
+
+ /** @return TranslationUnit[][] */
+ private function prepareTranslationUnits( TranslatablePage $page, ParserOutput $parse ): array {
+ $highest = (int)TranslateMetadata::get( $page->getMessageGroupId(), 'maxid' );
+
+ $store = $this->translationUnitStoreFactory->getReader( $page->getTitle() );
+ $storedUnits = $store->getUnits();
+ $parsedUnits = $parse->units();
+
+ // Prepend the display title unit, which is not part of the page contents
+ $displayTitle = new TranslationUnit(
+ $page->getTitle()->getPrefixedText(),
+ TranslatablePage::DISPLAY_TITLE_UNIT_ID
+ );
+ $parsedUnits = [ TranslatablePage::DISPLAY_TITLE_UNIT_ID => $displayTitle ] + $parsedUnits;
+
+ // Figure out the largest used translation unit id
+ foreach ( array_keys( $storedUnits ) as $key ) {
+ $highest = max( $highest, (int)$key );
+ }
+ foreach ( $parsedUnits as $_ ) {
+ $highest = max( $highest, (int)$_->id );
+ }
+
+ foreach ( $parsedUnits as $s ) {
+ $s->type = 'old';
+
+ if ( $s->id === TranslationUnit::NEW_UNIT_ID ) {
+ $s->type = 'new';
+ $s->id = (string)( ++$highest );
+ } else {
+ if ( isset( $storedUnits[$s->id] ) ) {
+ $storedText = $storedUnits[$s->id]->text;
+ if ( $s->text !== $storedText ) {
+ $s->type = 'changed';
+ $s->oldText = $storedText;
+ }
+ }
+ }
+ }
+
+ // Figure out which units were deleted by removing the still existing units
+ $deletedUnits = $storedUnits;
+ foreach ( $parsedUnits as $s ) {
+ unset( $deletedUnits[$s->id] );
+ }
+
+ return [ $parsedUnits, $deletedUnits ];
+ }
+
+ private function showPage(
+ TranslatablePage $page,
+ ParserOutput $parse,
+ array $sections,
+ array $deletedUnits,
+ bool $firstMark
+ ): void {
+ $out = $this->getOutput();
+ $out->setSubtitle( $this->getLinkRenderer()->makeKnownLink( $page->getTitle() ) );
+ $out->addWikiMsg( 'tpt-showpage-intro' );
+
+ $formParams = [
+ 'method' => 'post',
+ 'action' => $this->getPageTitle()->getLocalURL(),
+ 'class' => 'mw-tpt-sp-markform',
+ ];
+
+ $out->addHTML(
+ Xml::openElement( 'form', $formParams ) .
+ Html::hidden( 'do', 'mark' ) .
+ Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() ) .
+ Html::hidden( 'revision', $page->getRevision() ) .
+ Html::hidden( 'target', $page->getTitle()->getPrefixedText() ) .
+ Html::hidden( 'token', $this->getContext()->getCsrfTokenSet()->getToken() )
+ );
+
+ $out->wrapWikiMsg( '==$1==', 'tpt-sections-oldnew' );
+
+ $diffOld = $this->msg( 'tpt-diff-old' )->escaped();
+ $diffNew = $this->msg( 'tpt-diff-new' )->escaped();
+ $hasChanges = false;
+
+ // Check whether page title was previously marked for translation.
+ // If the page is marked for translation the first time, default to checked.
+ $defaultChecked = $firstMark || $page->hasPageDisplayTitle();
+
+ $sourceLanguage = $this->languageFactory->getLanguage( $page->getSourceLanguageCode() );
+
+ foreach ( $sections as $s ) {
+ if ( $s->id === TranslatablePage::DISPLAY_TITLE_UNIT_ID ) {
+ // Set section type as new if title previously unchecked
+ $s->type = $defaultChecked ? $s->type : 'new';
+
+ // Checkbox for page title optional translation
+ $checkBox = new FieldLayout(
+ new CheckboxInputWidget( [
+ 'name' => 'translatetitle',
+ 'selected' => $defaultChecked,
+ ] ),
+ [
+ 'label' => $this->msg( 'tpt-translate-title' )->text(),
+ 'align' => 'inline',
+ 'classes' => [ 'mw-tpt-m-vertical' ]
+ ]
+ );
+ $out->addHTML( $checkBox->toString() );
+ }
+
+ if ( $s->type === 'new' ) {
+ $hasChanges = true;
+ $name = $this->msg( 'tpt-section-new', $s->id )->escaped();
+ } else {
+ $name = $this->msg( 'tpt-section', $s->id )->escaped();
+ }
+
+ if ( $s->type === 'changed' ) {
+ $hasChanges = true;
+ $diff = new DifferenceEngine();
+ $diff->setTextLanguage( $sourceLanguage );
+ $diff->setReducedLineNumbers();
+
+ $oldContent = ContentHandler::makeContent( $s->getOldText(), $diff->getTitle() );
+ $newContent = ContentHandler::makeContent( $s->getText(), $diff->getTitle() );
+
+ $diff->setContent( $oldContent, $newContent );
+
+ $text = $diff->getDiff( $diffOld, $diffNew );
+ $diffOld = $diffNew = null;
+ $diff->showDiffStyle();
+
+ $id = "tpt-sect-{$s->id}-action-nofuzzy";
+ $checkLabel = new FieldLayout(
+ new CheckboxInputWidget( [
+ 'name' => $id,
+ 'selected' => false,
+ ] ),
+ [
+ 'label' => $this->msg( 'tpt-action-nofuzzy' )->text(),
+ 'align' => 'inline',
+ 'classes' => [ 'mw-tpt-m-vertical' ]
+ ]
+ );
+ $text = $checkLabel->toString() . $text;
+ } else {
+ $text = TranslateUtils::convertWhiteSpaceToHTML( $s->getText() );
+ }
+
+ # For changed text, the language is set by $diff->setTextLanguage()
+ $lang = $s->type === 'changed' ? null : $sourceLanguage;
+ $out->addHTML( MessageWebImporter::makeSectionElement(
+ $name,
+ $s->type,
+ $text,
+ $lang
+ ) );
+
+ foreach ( $s->getIssues() as $issue ) {
+ $severity = $issue->getSeverity();
+ if ( $severity === TranslationUnitIssue::WARNING ) {
+ $box = Html::warningBox( $this->msg( $issue )->escaped() );
+ } elseif ( $severity === TranslationUnitIssue::ERROR ) {
+ $box = Html::errorBox( $this->msg( $issue )->escaped() );
+ } else {
+ throw new MWException(
+ "Unknown severity: $severity for key: {$issue->getKey()}"
+ );
+ }
+
+ $out->addHTML( $box );
+ }
+ }
+
+ if ( $deletedUnits ) {
+ $hasChanges = true;
+ $out->wrapWikiMsg( '==$1==', 'tpt-sections-deleted' );
+
+ foreach ( $deletedUnits as $s ) {
+ $name = $this->msg( 'tpt-section-deleted', $s->id )->escaped();
+ $text = TranslateUtils::convertWhiteSpaceToHTML( $s->getText() );
+ $out->addHTML( MessageWebImporter::makeSectionElement(
+ $name,
+ 'deleted',
+ $text,
+ $sourceLanguage
+ ) );
+ }
+ }
+
+ // Display template changes if applicable
+ if ( $page->getMarkedTag() !== null ) {
+ $hasChanges = true;
+ $newTemplate = $parse->sourcePageTemplateForDiffs();
+ $oldPage = TranslatablePage::newFromRevision(
+ $page->getTitle(),
+ $page->getMarkedTag()
+ );
+ $oldTemplate = $this->translatablePageParser
+ ->parse( $oldPage->getText() )
+ ->sourcePageTemplateForDiffs();
+
+ if ( $oldTemplate !== $newTemplate ) {
+ $out->wrapWikiMsg( '==$1==', 'tpt-sections-template' );
+
+ $diff = new DifferenceEngine();
+ $diff->setTextLanguage( $sourceLanguage );
+
+ $oldContent = ContentHandler::makeContent( $oldTemplate, $diff->getTitle() );
+ $newContent = ContentHandler::makeContent( $newTemplate, $diff->getTitle() );
+
+ $diff->setContent( $oldContent, $newContent );
+
+ $text = $diff->getDiff(
+ $this->msg( 'tpt-diff-old' )->escaped(),
+ $this->msg( 'tpt-diff-new' )->escaped()
+ );
+ $diff->showDiffStyle();
+ $diff->setReducedLineNumbers();
+
+ $out->addHTML( Xml::tags( 'div', [], $text ) );
+ }
+ }
+
+ if ( !$hasChanges ) {
+ $out->wrapWikiMsg( Html::successBox( '$1' ), 'tpt-mark-nochanges' );
+ }
+
+ $this->priorityLanguagesForm( $page );
+
+ // If an existing page does not have the supportsTransclusion flag, keep the checkbox unchecked,
+ // If the page is being marked for translation for the first time, the checkbox can be checked
+ $this->templateTransclusionForm( $page->supportsTransclusion() ?? $firstMark );
+
+ $version = TranslateMetadata::getWithDefaultValue(
+ $page->getMessageGroupId(), 'version', self::DEFAULT_SYNTAX_VERSION
+ );
+ $this->syntaxVersionForm( $version, $firstMark );
+
+ $submitButton = new FieldLayout(
+ new ButtonInputWidget( [
+ 'label' => $this->msg( 'tpt-submit' )->text(),
+ 'type' => 'submit',
+ 'flags' => [ 'primary', 'progressive' ],
+ ] ),
+ [
+ 'label' => null,
+ 'align' => 'top',
+ ]
+ );
+
+ $out->addHTML( $submitButton->toString() );
+ $out->addHTML( '</form>' );
+ }
+
+ private function priorityLanguagesForm( TranslatablePage $page ): void {
+ $groupId = $page->getMessageGroupId();
+ $interfaceLanguage = $this->getLanguage()->getCode();
+ $storedLanguages = (string)TranslateMetadata::get( $groupId, 'prioritylangs' );
+ $default = $storedLanguages !== '' ? explode( ',', $storedLanguages ) : [];
+
+ $priorityReason = TranslateMetadata::get( $groupId, 'priorityreason' );
+ $priorityReason = $priorityReason !== false ? $priorityReason : '';
+
+ $form = new FieldsetLayout( [
+ 'items' => [
+ new FieldLayout(
+ new LanguagesMultiselectWidget( [
+ 'infusable' => true,
+ 'name' => 'prioritylangs',
+ 'id' => 'mw-translate-SpecialPageTranslation-prioritylangs',
+ 'languages' => TranslateUtils::getLanguageNames( $interfaceLanguage ),
+ 'default' => $default,
+ ] ),
+ [
+ 'label' => $this->msg( 'tpt-select-prioritylangs' )->text(),
+ 'align' => 'top',
+ ]
+ ),
+ new FieldLayout(
+ new CheckboxInputWidget( [
+ 'name' => 'forcelimit',
+ 'selected' => TranslateMetadata::get( $groupId, 'priorityforce' ) === 'on',
+ ] ),
+ [
+ 'label' => $this->msg( 'tpt-select-prioritylangs-force' )->text(),
+ 'align' => 'inline',
+ ]
+ ),
+ new FieldLayout(
+ new TextInputWidget( [
+ 'name' => 'priorityreason',
+ 'value' => $priorityReason
+ ] ),
+ [
+ 'label' => $this->msg( 'tpt-select-prioritylangs-reason' )->text(),
+ 'align' => 'top',
+ ]
+ ),
+
+ ],
+ ] );
+
+ $this->getOutput()->wrapWikiMsg( '==$1==', 'tpt-sections-prioritylangs' );
+ $this->getOutput()->addHTML( $form->toString() );
+ }
+
+ private function syntaxVersionForm( string $version, bool $firstMark ): void {
+ $out = $this->getOutput();
+
+ if ( $version === self::LATEST_SYNTAX_VERSION || $firstMark ) {
+ return;
+ }
+
+ $out->wrapWikiMsg( '==$1==', 'tpt-sections-syntaxversion' );
+ $out->addWikiMsg(
+ 'tpt-syntaxversion-text',
+ '<code>' . wfEscapeWikiText( '<span lang="en" dir="ltr">...</span>' ) . '</code>',
+ '<code>' . wfEscapeWikiText( '<translate nowrap>...</translate>' ) . '</code>'
+ );
+
+ $checkBox = new FieldLayout(
+ new CheckboxInputWidget( [
+ 'name' => 'use-latest-syntax'
+ ] ),
+ [
+ 'label' => $out->msg( 'tpt-syntaxversion-label' )->text(),
+ 'align' => 'inline',
+ ]
+ );
+
+ $out->addHTML( $checkBox->toString() );
+ }
+
+ private function templateTransclusionForm( bool $supportsTransclusion ): void {
+ $out = $this->getOutput();
+ $out->wrapWikiMsg( '==$1==', 'tpt-transclusion' );
+
+ $checkBox = new FieldLayout(
+ new CheckboxInputWidget( [
+ 'name' => 'transclusion',
+ 'selected' => $supportsTransclusion
+ ] ),
+ [
+ 'label' => $out->msg( 'tpt-transclusion-label' )->text(),
+ 'align' => 'inline',
+ ]
+ );
+
+ $out->addHTML( $checkBox->toString() );
+ }
+
+ /**
+ * This function does the heavy duty of marking a page.
+ * - Updates the source page with section markers.
+ * - Updates translate_sections table
+ * - Updates revtags table
+ * - Sets up renderjobs to update the translation pages
+ * - Invalidates caches
+ * - Adds interim cache for MessageIndex
+ *
+ * @param TranslatablePage $page
+ * @param ParserOutput $parse
+ * @param TranslationUnit[] $sections
+ * @param bool $updateVersion
+ * @param bool $transclusion
+ * @return array|bool
+ */
+ protected function markForTranslation(
+ TranslatablePage $page,
+ ParserOutput $parse,
+ array $sections,
+ bool $updateVersion,
+ bool $transclusion
+ ) {
+ // Add the section markers to the source page
+ $wikiPage = MediaWikiServices::getInstance()->getWikiPageFactory()->newFromTitle( $page->getTitle() );
+ $content = ContentHandler::makeContent(
+ $parse->sourcePageTextForSaving(),
+ $page->getTitle()
+ );
+
+ $status = $wikiPage->doUserEditContent(
+ $content,
+ $this->getUser(),
+ $this->msg( 'tpt-mark-summary' )->inContentLanguage()->text(),
+ EDIT_FORCE_BOT | EDIT_UPDATE
+ );
+
+ if ( !$status->isOK() ) {
+ return [ 'tpt-edit-failed', $status->getWikiText() ];
+ }
+
+ // @phan-suppress-next-line PhanTypeArraySuspiciousNullable
+ $newRevisionRecord = $status->value['revision-record'];
+ // In theory it is either null or RevisionRecord object,
+ // not a RevisionRecord object with null id, but who knows
+ if ( $newRevisionRecord instanceof RevisionRecord ) {
+ $newRevisionId = $newRevisionRecord->getId();
+ } else {
+ $newRevisionId = null;
+ }
+
+ // Probably a no-change edit, so no new revision was assigned.
+ // Get the latest revision manually
+ // Could also occur on the off chance $newRevisionRecord->getId() returns null
+ if ( $newRevisionId === null ) {
+ $newRevisionId = $page->getTitle()->getLatestRevID();
+ }
+
+ $inserts = [];
+ $changed = [];
+ $groupId = $page->getMessageGroupId();
+ $maxid = (int)TranslateMetadata::get( $groupId, 'maxid' );
+
+ $pageId = $page->getTitle()->getArticleID();
+ /** @var TranslationUnit $s */
+ foreach ( array_values( $sections ) as $index => $s ) {
+ $maxid = max( $maxid, (int)$s->id );
+ $changed[] = $s->id;
+
+ if ( $this->getRequest()->getCheck( "tpt-sect-{$s->id}-action-nofuzzy" ) ) {
+ // UpdateTranslatablePageJob will only fuzzy when type is changed
+ $s->type = 'old';
+ }
+
+ $inserts[] = [
+ 'trs_page' => $pageId,
+ 'trs_key' => $s->id,
+ 'trs_text' => $s->getText(),
+ 'trs_order' => $index
+ ];
+ }
+
+ $dbw = $this->loadBalancer->getConnection( DB_PRIMARY );
+ $dbw->delete(
+ 'translate_sections',
+ [ 'trs_page' => $page->getTitle()->getArticleID() ],
+ __METHOD__
+ );
+ $dbw->insert( 'translate_sections', $inserts, __METHOD__ );
+ TranslateMetadata::set( $groupId, 'maxid', $maxid );
+ if ( $updateVersion ) {
+ TranslateMetadata::set( $groupId, 'version', self::LATEST_SYNTAX_VERSION );
+ }
+
+ $page->setTransclusion( $transclusion );
+
+ $page->addMarkedTag( $newRevisionId );
+ MessageGroups::singleton()->recache();
+
+ // Store interim cache
+ $group = $page->getMessageGroup();
+ $newKeys = $group->makeGroupKeys( $changed );
+ $this->messageIndex->storeInterim( $group, $newKeys );
+
+ $job = UpdateTranslatablePageJob::newFromPage( $page, $sections );
+ $this->jobQueueGroup->push( $job );
+
+ $this->handlePriorityLanguages( $this->getRequest(), $page );
+
+ // Logging
+ $entry = new ManualLogEntry( 'pagetranslation', 'mark' );
+ $entry->setPerformer( $this->getUser() );
+ $entry->setTarget( $page->getTitle() );
+ $entry->setParameters( [
+ 'revision' => $newRevisionId,
+ 'changed' => count( $changed ),
+ ] );
+ $logid = $entry->insert();
+ $entry->publish( $logid );
+
+ // Clear more caches
+ $page->getTitle()->invalidateCache();
+
+ return false;
+ }
+
+ /**
+ * @param WebRequest $request
+ * @param TranslatablePage $page
+ * @return void
+ */
+ protected function handlePriorityLanguages( WebRequest $request, TranslatablePage $page ): void {
+ // Get the priority languages from the request
+ // We've to do some extra work here because if JS is disabled, we will be getting
+ // the values split by newline.
+ $npLangs = rtrim( trim( $request->getVal( 'prioritylangs', '' ) ), ',' );
+ $npLangs = implode( ',', explode( "\n", $npLangs ) );
+ $npLangs = array_map( 'trim', explode( ',', $npLangs ) );
+ $npLangs = array_unique( $npLangs );
+
+ $npForce = $request->getCheck( 'forcelimit' ) ? 'on' : 'off';
+ $npReason = trim( $request->getText( 'priorityreason' ) );
+
+ // Remove invalid language codes.
+ $languages = $this->languageNameUtils->getLanguageNames();
+ foreach ( $npLangs as $index => $language ) {
+ if ( !array_key_exists( $language, $languages ) ) {
+ unset( $npLangs[$index] );
+ }
+ }
+ $npLangs = implode( ',', $npLangs );
+ if ( $npLangs === '' ) {
+ $npLangs = false;
+ $npForce = false;
+ $npReason = false;
+ }
+
+ $groupId = $page->getMessageGroupId();
+ // old priority languages
+ $opLangs = TranslateMetadata::get( $groupId, 'prioritylangs' );
+ $opForce = TranslateMetadata::get( $groupId, 'priorityforce' );
+ $opReason = TranslateMetadata::get( $groupId, 'priorityreason' );
+
+ TranslateMetadata::set( $groupId, 'prioritylangs', $npLangs );
+ TranslateMetadata::set( $groupId, 'priorityforce', $npForce );
+ TranslateMetadata::set( $groupId, 'priorityreason', $npReason );
+
+ if ( $opLangs !== $npLangs || $opForce !== $npForce || $opReason !== $npReason ) {
+ $params = [
+ 'languages' => $npLangs,
+ 'force' => $npForce,
+ 'reason' => $npReason,
+ ];
+
+ $entry = new ManualLogEntry( 'pagetranslation', 'prioritylanguages' );
+ $entry->setPerformer( $this->getUser() );
+ $entry->setTarget( $page->getTitle() );
+ $entry->setParameters( $params );
+ $entry->setComment( $npReason );
+ $logid = $entry->insert();
+ $entry->publish( $logid );
+ }
+ }
+
+ private function getPageList( array $pages, string $type ): string {
+ $items = [];
+ $tagsTextCache = [];
+
+ $tagDiscouraged = $this->msg( 'tpt-tag-discouraged' )->escaped();
+ $tagOldSyntax = $this->msg( 'tpt-tag-oldsyntax' )->escaped();
+ $tagNoTransclusionSupport = $this->msg( 'tpt-tag-no-transclusion-support' )->escaped();
+
+ foreach ( $pages as $page ) {
+ $link = $this->getLinkRenderer()->makeKnownLink( $page['title'] );
+ $acts = $this->actionLinks( $page, $type );
+ $tags = [];
+ if ( $page['discouraged'] ) {
+ $tags[] = $tagDiscouraged;
+ }
+ if ( $type !== 'proposed' ) {
+ if ( $page['version'] !== self::LATEST_SYNTAX_VERSION ) {
+ $tags[] = $tagOldSyntax;
+ }
+
+ if ( $page['transclusion'] !== '1' ) {
+ $tags[] = $tagNoTransclusionSupport;
+ }
+ }
+
+ $tagList = '';
+ if ( $tags ) {
+ // Performance optimization to avoid calling $this->msg in a loop
+ $tagsKey = implode( '', $tags );
+ $tagsTextCache[$tagsKey] = $tagsTextCache[$tagsKey] ??
+ $this->msg( 'parentheses' )
+ ->rawParams( $this->getLanguage()->pipeList( $tags ) )
+ ->escaped();
+
+ $tagList = Html::rawElement(
+ 'span',
+ [ 'class' => 'mw-tpt-actions' ],
+ $tagsTextCache[$tagsKey]
+ );
+ }
+
+ $items[] = "<li>$link $tagList $acts</li>";
+ }
+
+ return '<ol>' . implode( "", $items ) . '</ol>';
+ }
+}
diff --git a/Translate/src/PageTranslation/ParserOutput.php b/Translate/src/PageTranslation/ParserOutput.php
new file mode 100644
index 00000000..3a61aace
--- /dev/null
+++ b/Translate/src/PageTranslation/ParserOutput.php
@@ -0,0 +1,109 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use InvalidArgumentException;
+use Language;
+
+/**
+ * Represents a parsing output produced by TranslatablePageParser.
+ *
+ * It is required generate translatable and translation page sources or just get the list of
+ * translations units.
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2020.08
+ */
+class ParserOutput {
+ /** @var string */
+ private $template;
+ /** @var Section[] */
+ private $sectionMap;
+ /** @var TranslationUnit[] */
+ private $unitMap;
+
+ public function __construct( string $template, array $sectionMap, array $unitMap ) {
+ $this->assertContainsOnlyInstancesOf( Section::class, '$sectionMap', $sectionMap );
+ $this->assertContainsOnlyInstancesOf( TranslationUnit::class, '$unitMap', $unitMap );
+
+ $this->template = $template;
+ $this->sectionMap = $sectionMap;
+ $this->unitMap = $unitMap;
+ }
+
+ /** Returns template that contains <translate> tags */
+ public function sourcePageTemplate(): string {
+ $replacements = [];
+ foreach ( $this->sectionMap as $ph => $section ) {
+ $replacements[$ph] = $section->wrappedContents();
+ }
+
+ return strtr( $this->template, $replacements );
+ }
+
+ /** Returns template that does not contain <translate> tags */
+ public function translationPageTemplate(): string {
+ $replacements = [];
+ foreach ( $this->sectionMap as $ph => $section ) {
+ $replacements[$ph] = $section->contents();
+ }
+
+ return strtr( $this->template, $replacements );
+ }
+
+ /** @return TranslationUnit[] */
+ public function units(): array {
+ return $this->unitMap;
+ }
+
+ /** Returns the source page wikitext used for rendering the page. */
+ public function sourcePageTextForRendering( Language $sourceLanguage ): string {
+ $text = $this->translationPageTemplate();
+
+ foreach ( $this->unitMap as $ph => $s ) {
+ $t = $s->getTextForRendering( null, $sourceLanguage, $sourceLanguage, false );
+ $text = str_replace( $ph, $t, $text );
+ }
+
+ return $text;
+ }
+
+ /** Returns the source page with translation unit markers. */
+ public function sourcePageTextForSaving(): string {
+ $text = $this->sourcePageTemplate();
+
+ foreach ( $this->unitMap as $ph => $s ) {
+ $text = str_replace( $ph, $s->getMarkedText(), $text );
+ }
+
+ return $text;
+ }
+
+ /** Returns the page text with translation tags and unit placeholders for easy diffs */
+ public function sourcePageTemplateForDiffs(): string {
+ $text = $this->sourcePageTemplate();
+
+ foreach ( $this->unitMap as $ph => $s ) {
+ $text = str_replace( $ph, "<!--T:{$s->id}-->", $text );
+ }
+
+ return $text;
+ }
+
+ private function assertContainsOnlyInstancesOf(
+ string $expected,
+ string $name,
+ array $x
+ ): void {
+ foreach ( $x as $item ) {
+ if ( !$item instanceof $expected ) {
+ $actual = gettype( $item );
+ throw new InvalidArgumentException(
+ "Parameter $name must only contain instances of class $expected. Got $actual."
+ );
+ }
+ }
+ }
+}
diff --git a/Translate/src/PageTranslation/ParsingFailure.php b/Translate/src/PageTranslation/ParsingFailure.php
new file mode 100644
index 00000000..8db15c04
--- /dev/null
+++ b/Translate/src/PageTranslation/ParsingFailure.php
@@ -0,0 +1,42 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use RuntimeException;
+
+/**
+ * Represents any kind of failure to parse a translatable page source code.
+ *
+ * This is an internal exception that includes information to produce translated error messages, but
+ * actually displaying them to users is handled by MediaWiki core.
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2020.08
+ */
+class ParsingFailure extends RuntimeException {
+ /**
+ * @var array
+ * @phan-var non-empty-array
+ */
+ private $messageSpec;
+
+ /**
+ * @param string $message
+ * @param array $messageSpec
+ * @phan-param non-empty-array $messageSpec
+ */
+ public function __construct( string $message, array $messageSpec ) {
+ parent::__construct( $message );
+ $this->messageSpec = $messageSpec;
+ }
+
+ /**
+ * @return array
+ * @phan-return non-empty-array
+ */
+ public function getMessageSpecification(): array {
+ return $this->messageSpec;
+ }
+}
diff --git a/Translate/src/PageTranslation/PrepareTranslatablePageSpecialPage.php b/Translate/src/PageTranslation/PrepareTranslatablePageSpecialPage.php
new file mode 100644
index 00000000..8b36db59
--- /dev/null
+++ b/Translate/src/PageTranslation/PrepareTranslatablePageSpecialPage.php
@@ -0,0 +1,75 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use DifferenceEngine;
+use Html;
+use SpecialPage;
+
+/**
+ * Contains code to prepare a page for translation
+ * @author Pratik Lahoti
+ * @license GPL-2.0-or-later
+ */
+class PrepareTranslatablePageSpecialPage extends SpecialPage {
+ public function __construct() {
+ parent::__construct( 'PagePreparation', 'pagetranslation' );
+ }
+
+ protected function getGroupName() {
+ return 'translation';
+ }
+
+ public function execute( $par ) {
+ $request = $this->getRequest();
+ $output = $this->getOutput();
+ $this->setHeaders();
+ $this->checkPermissions();
+ $this->outputHeader();
+ $inputValue = htmlspecialchars( $request->getText( 'page', $par ) );
+ $pagenamePlaceholder = $this->msg( 'pp-pagename-placeholder' )->escaped();
+ $prepareButtonValue = $this->msg( 'pp-prepare-button-label' )->escaped();
+ $saveButtonValue = $this->msg( 'pp-save-button-label' )->escaped();
+ $cancelButtonValue = $this->msg( 'pp-cancel-button-label' )->escaped();
+ $summaryValue = $this->msg( 'pp-save-summary' )->inContentLanguage()->escaped();
+ $output->addModules( 'ext.translate.special.pagepreparation' );
+ $output->addModuleStyles( [
+ 'ext.translate.specialpages.styles',
+ 'jquery.uls.grid'
+ ] );
+
+ $out = '';
+ $diff = new DifferenceEngine( $this->getContext() );
+ $diffHeader = $diff->addHeader( ' ', $this->msg( 'pp-diff-old-header' )->escaped(),
+ $this->msg( 'pp-diff-new-header' )->escaped() );
+
+ $out = <<<HTML
+<div class="mw-tpp-sp-container grid">
+ <form class="mw-tpp-sp-form row" name="mw-tpp-sp-input-form" action="">
+ <input id="pp-summary" type="hidden" value="{$summaryValue}" />
+ <input name="page" id="page" class="mw-searchInput mw-ui-input"
+ placeholder="{$pagenamePlaceholder}" value="{$inputValue}"/>
+ <button id="action-prepare" class="mw-ui-button mw-ui-progressive" type="button">
+ {$prepareButtonValue}</button>
+ <button id="action-save" class="mw-ui-button mw-ui-progressive hide" type="button">
+ {$saveButtonValue}</button>
+ <button id="action-cancel" class="mw-ui-button mw-ui-quiet hide" type="button">
+ {$cancelButtonValue}</button>
+ </form>
+ <div class="messageDiv hide"></div>
+ <div class="divDiff hide">
+ {$diffHeader}
+ </div>
+</div>
+HTML;
+ $output->addHTML( $out );
+ $output->addHTML(
+ Html::errorBox(
+ $this->msg( 'tux-nojs' )->plain(),
+ '',
+ 'tux-nojs'
+ )
+ );
+ }
+}
diff --git a/Translate/src/PageTranslation/RenderTranslationPageJob.php b/Translate/src/PageTranslation/RenderTranslationPageJob.php
new file mode 100644
index 00000000..ec2951a7
--- /dev/null
+++ b/Translate/src/PageTranslation/RenderTranslationPageJob.php
@@ -0,0 +1,169 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use CommentStoreComment;
+use MediaWiki\Extension\Translate\Jobs\GenericTranslateJob;
+use MediaWiki\Extension\Translate\SystemUsers\FuzzyBot;
+use MediaWiki\MediaWikiServices;
+use MediaWiki\Revision\SlotRecord;
+use MediaWiki\User\UserIdentity;
+use MediaWiki\User\UserRigorOptions;
+use RecentChange;
+use Title;
+use User;
+
+/**
+ * Job for updating translation pages when translation or template changes.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @ingroup PageTranslation JobQueue
+ */
+class RenderTranslationPageJob extends GenericTranslateJob {
+ public const ACTION_DELETE = 'delete';
+
+ public static function newJob(
+ Title $target,
+ ?string $triggerAction = null,
+ ?string $unitTitleText = null
+ ): self {
+ $job = new self( $target, [ 'triggerAction' => $triggerAction, 'unitTitle' => $unitTitleText ] );
+ $job->setUser( FuzzyBot::getUser() );
+ $job->setFlags( EDIT_FORCE_BOT );
+ $job->setSummary( wfMessage( 'tpt-render-summary' )->inContentLanguage()->text() );
+
+ return $job;
+ }
+
+ public function __construct( Title $title, array $params = [] ) {
+ parent::__construct( 'RenderTranslationPageJob', $title, $params );
+ $this->removeDuplicates = true;
+ }
+
+ public function run(): bool {
+ $this->logJobStart();
+ $mwServices = MediaWikiServices::getInstance();
+ // We may be doing double wait here if this job was spawned by TranslationUpdateJob
+ $lb = $mwServices->getDBLoadBalancerFactory();
+ if ( !$lb->waitForReplication() ) {
+ $this->logWarning( 'Continuing despite replication lag' );
+ }
+
+ // Initialization
+ $title = $this->title;
+
+ $tpPage = TranslatablePage::getTranslationPageFromTitle( $title );
+ if ( !$tpPage ) {
+ $this->logError( 'Cannot render translation page!' );
+ return false;
+ }
+
+ // Other stuff
+ $user = $this->getUser();
+ $summary = $this->getSummary();
+ $flags = $this->getFlags();
+
+ // We should not re-create the translation page if a translation unit is being deleted
+ // because it is possible that the translation page may also be queued for deletion.
+ // Hence set the flag to EDIT_UPDATE and remove EDIT_NEW if its added
+ if ( $this->isDeleteTrigger() ) {
+ $flags = ( $flags | EDIT_UPDATE ) & ~EDIT_NEW;
+ }
+
+ // @todo FuzzyBot hack
+ Hooks::$allowTargetEdit = true;
+ $commentStoreComment = CommentStoreComment::newUnsavedComment( $summary );
+ $content = $tpPage->getPageContent( $mwServices->getParser() );
+
+ $pageUpdater = $mwServices->getWikiPageFactory()
+ ->newFromTitle( $title )
+ ->newPageUpdater( $user );
+ $pageUpdater->setContent( SlotRecord::MAIN, $content );
+
+ if ( $user->authorizeWrite( 'autopatrol', $title ) ) {
+ $pageUpdater->setRcPatrolStatus( RecentChange::PRC_AUTOPATROLLED );
+ }
+
+ $pageUpdater->saveRevision( $commentStoreComment, $flags );
+ $status = $pageUpdater->getStatus();
+
+ if ( !$status->isGood() ) {
+ if ( $this->isDeleteTrigger() && $status->hasMessage( 'edit-gone-missing' ) ) {
+ $this->logInfo( 'Translation page missing with delete trigger' );
+ } else {
+ $this->logError(
+ 'Error while editing content in page.',
+ [
+ 'content' => $content->getTextForSummary(),
+ 'errors' => $status->getErrors()
+ ]
+ );
+ }
+ }
+
+ $this->logInfo( 'Finished page edit operation' );
+ Hooks::$allowTargetEdit = false;
+
+ $this->logInfo( 'Finished TranslateRenderJob' );
+ return true;
+ }
+
+ public function setFlags( int $flags ): void {
+ $this->params['flags'] = $flags;
+ }
+
+ private function getFlags(): int {
+ return $this->params['flags'];
+ }
+
+ public function setSummary( string $summary ): void {
+ $this->params['summary'] = $summary;
+ }
+
+ /** @inheritDoc */
+ public function getDeduplicationInfo(): array {
+ $info = parent::getDeduplicationInfo();
+ // Unit title is only passed for logging and should not be used for de-duplication
+ unset( $info['params']['unitTitle'] );
+ return $info;
+ }
+
+ private function getSummary(): string {
+ return $this->params['summary'];
+ }
+
+ /** @param UserIdentity|string $user */
+ public function setUser( $user ): void {
+ if ( $user instanceof UserIdentity ) {
+ $this->params['user'] = $user->getName();
+ } else {
+ $this->params['user'] = $user;
+ }
+ }
+
+ /** Get a user object for doing edits. */
+ private function getUser(): User {
+ $userFactory = MediaWikiServices::getInstance()->getUserFactory();
+ return $userFactory->newFromName( $this->params['user'], UserRigorOptions::RIGOR_NONE );
+ }
+
+ private function isDeleteTrigger(): bool {
+ $triggerAction = $this->params['triggerAction'] ?? null;
+ return $triggerAction === self::ACTION_DELETE;
+ }
+
+ private function logJobStart(): void {
+ $unitTitleText = $this->params['unitTitle'] ?? null;
+ $logMessage = 'Starting TranslateRenderJob ';
+ if ( $unitTitleText ) {
+ $logMessage .= "trigged by $unitTitleText ";
+ }
+
+ if ( $this->isDeleteTrigger() ) {
+ $logMessage .= '- [deletion] ';
+ }
+
+ $this->logInfo( trim( $logMessage ) );
+ }
+}
diff --git a/Translate/src/PageTranslation/Section.php b/Translate/src/PageTranslation/Section.php
new file mode 100644
index 00000000..9e065ae0
--- /dev/null
+++ b/Translate/src/PageTranslation/Section.php
@@ -0,0 +1,34 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+/**
+ * Section is one pair of <translate>...</translate> tags.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2020.08
+ */
+class Section {
+ /** @var string */
+ private $open;
+ /** @var string */
+ private $contents;
+ /** @var string */
+ private $close;
+
+ public function __construct( string $open, string $contents, string $close ) {
+ $this->open = $open;
+ $this->contents = $contents;
+ $this->close = $close;
+ }
+
+ public function contents(): string {
+ // If <translate> tags are on their own line, avoid build-up of newlines
+ return preg_replace( '/\A\n|\n\z/', '', $this->contents );
+ }
+
+ public function wrappedContents(): string {
+ return $this->open . $this->contents . $this->close;
+ }
+}
diff --git a/Translate/src/PageTranslation/TestingParsingPlaceholderFactory.php b/Translate/src/PageTranslation/TestingParsingPlaceholderFactory.php
new file mode 100644
index 00000000..fb0e0b63
--- /dev/null
+++ b/Translate/src/PageTranslation/TestingParsingPlaceholderFactory.php
@@ -0,0 +1,19 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use MediaWiki\Extension\Translate\Utilities\ParsingPlaceholderFactory;
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2020.08
+ */
+class TestingParsingPlaceholderFactory extends ParsingPlaceholderFactory {
+ private $i = 0;
+
+ public function make(): string {
+ return '<' . $this->i++ . '>';
+ }
+}
diff --git a/Translate/src/PageTranslation/TranslatableBundleMover.php b/Translate/src/PageTranslation/TranslatableBundleMover.php
new file mode 100644
index 00000000..22a0a59c
--- /dev/null
+++ b/Translate/src/PageTranslation/TranslatableBundleMover.php
@@ -0,0 +1,373 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use JobQueueGroup;
+use LogicException;
+use MediaWiki\Cache\LinkBatchFactory;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\MoveTranslatableBundleJob;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\SubpageListBuilder;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\TranslatableBundle;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\TranslatableBundleFactory;
+use MediaWiki\Extension\Translate\SystemUsers\FuzzyBot;
+use MediaWiki\Page\MovePageFactory;
+use Message;
+use ObjectCache;
+use SplObjectStorage;
+use Status;
+use Title;
+use User;
+
+/**
+ * Contains the core logic to validate and move translatable bundles
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2021.03
+ */
+class TranslatableBundleMover {
+ private const LOCK_TIMEOUT = 3600 * 2;
+ private const FETCH_TRANSLATABLE_SUBPAGES = true;
+ /** @var MovePageFactory */
+ private $movePageFactory;
+ /** @var int|null */
+ private $pageMoveLimit;
+ /** @var JobQueueGroup */
+ private $jobQueue;
+ /** @var LinkBatchFactory */
+ private $linkBatchFactory;
+ /** @var TranslatableBundleFactory */
+ private $bundleFactory;
+ /** @var SubpageListBuilder */
+ private $subpageBuilder;
+ /** @var bool */
+ private $pageMoveLimitEnabled = true;
+
+ public function __construct(
+ MovePageFactory $movePageFactory,
+ JobQueueGroup $jobQueue,
+ LinkBatchFactory $linkBatchFactory,
+ TranslatableBundleFactory $bundleFactory,
+ SubpageListBuilder $subpageBuilder,
+ ?int $pageMoveLimit
+ ) {
+ $this->movePageFactory = $movePageFactory;
+ $this->jobQueue = $jobQueue;
+ $this->pageMoveLimit = $pageMoveLimit;
+ $this->linkBatchFactory = $linkBatchFactory;
+ $this->bundleFactory = $bundleFactory;
+ $this->subpageBuilder = $subpageBuilder;
+ }
+
+ public function getPageMoveCollection(
+ Title $source,
+ ?Title $target,
+ User $user,
+ string $reason,
+ bool $moveSubPages,
+ bool $moveTalkPages
+ ): PageMoveCollection {
+ $blockers = new SplObjectStorage();
+
+ if ( !$target ) {
+ $blockers[$source] = Status::newFatal( 'pt-movepage-block-base-invalid' );
+ throw new ImpossiblePageMove( $blockers );
+ }
+
+ if ( $target->inNamespaces( NS_MEDIAWIKI, NS_TRANSLATIONS ) ) {
+ $blockers[$source] = Status::newFatal( 'immobile-target-namespace', $target->getNsText() );
+ throw new ImpossiblePageMove( $blockers );
+ }
+
+ $movePage = $this->movePageFactory->newMovePage( $source, $target );
+ $status = $movePage->isValidMove();
+ $status->merge( $movePage->checkPermissions( $user, $reason ) );
+ if ( !$status->isOK() ) {
+ $blockers[$source] = $status;
+ }
+
+ // Don't spam the same errors for all pages if base page fails
+ if ( count( $blockers ) ) {
+ throw new ImpossiblePageMove( $blockers );
+ }
+
+ $pageCollection = $this->getPagesToMove(
+ $source, $target, $moveSubPages, self::FETCH_TRANSLATABLE_SUBPAGES, $moveTalkPages
+ );
+
+ // Collect all the old and new titles for checks
+ $titles = [
+ 'tp' => $pageCollection->getTranslationPagesPair(),
+ 'subpage' => $pageCollection->getSubpagesPair(),
+ 'section' => $pageCollection->getUnitPagesPair()
+ ];
+
+ // Check that all new titles are valid and count them. Add 1 for source page.
+ $moveCount = 1;
+ $lb = $this->linkBatchFactory->newLinkBatch();
+ foreach ( $titles as $type => $list ) {
+ $moveCount += count( $list );
+ // Give grep a chance to find the usages:
+ // pt-movepage-block-tp-invalid, pt-movepage-block-section-invalid,
+ // pt-movepage-block-subpage-invalid
+ foreach ( $list as $pair ) {
+ $old = $pair->getOldTitle();
+ $new = $pair->getNewTitle();
+
+ if ( $new === null ) {
+ $blockers[$old] = $this->getRenameMoveBlocker( $old, $type, $pair->getRenameErrorCode() );
+ continue;
+ }
+ $lb->addObj( $old );
+ $lb->addObj( $new );
+ }
+ }
+
+ if ( $this->pageMoveLimitEnabled ) {
+ if ( $this->pageMoveLimit !== null && $moveCount > $this->pageMoveLimit ) {
+ $blockers[$source] = Status::newFatal(
+ 'pt-movepage-page-count-limit',
+ Message::numParam( $this->pageMoveLimit )
+ );
+ }
+ }
+
+ // Stop further validation if there are blockers already.
+ if ( count( $blockers ) ) {
+ throw new ImpossiblePageMove( $blockers );
+ }
+
+ // Check that there are no move blockers
+ $lb->setCaller( __METHOD__ )->execute();
+ foreach ( $titles as $type => $list ) {
+ foreach ( $list as $pair ) {
+ $old = $pair->getOldTitle();
+ $new = $pair->getNewTitle();
+
+ /* This method has terrible performance:
+ * - 2 queries by core
+ * - 3 queries by lqt
+ * - and no obvious way to preload the data! */
+ $movePage = $this->movePageFactory->newMovePage( $old, $new );
+ $status = $movePage->isValidMove();
+ // Do not check for permissions here, as these pages are not editable/movable
+ // in regular use
+ if ( !$status->isOK() ) {
+ $blockers[$old] = $status;
+ }
+
+ /* Because of the poor performance, check only one of the possibly thousands
+ * of section pages and assume rest are fine. This assumes section pages are
+ * listed last in the array. */
+ if ( $type === 'section' ) {
+ break;
+ }
+ }
+ }
+
+ if ( count( $blockers ) ) {
+ throw new ImpossiblePageMove( $blockers );
+ }
+
+ return $pageCollection;
+ }
+
+ public function moveAsynchronously(
+ Title $source,
+ Title $target,
+ bool $moveSubPages,
+ User $user,
+ string $summary,
+ bool $moveTalkPages
+ ): void {
+ $pageCollection = $this->getPagesToMove(
+ $source, $target, $moveSubPages, !self::FETCH_TRANSLATABLE_SUBPAGES, $moveTalkPages
+ );
+ $pagesToMove = $pageCollection->getListOfPages();
+
+ $job = MoveTranslatableBundleJob::newJob( $source, $target, $pagesToMove, $summary, $user );
+ $this->lock( array_keys( $pagesToMove ) );
+ $this->lock( array_values( $pagesToMove ) );
+
+ $this->jobQueue->push( $job );
+ }
+
+ /**
+ * @param Title $source
+ * @param Title $target
+ * @param string[] $pagesToMove
+ * @param User $performer
+ * @param string $summary
+ * @return void
+ */
+ public function moveSynchronously(
+ Title $source,
+ Title $target,
+ array $pagesToMove,
+ User $performer,
+ string $summary,
+ callable $progressCallback = null
+ ): void {
+ $sourceBundle = $this->bundleFactory->getValidBundle( $source );
+
+ $this->move( $sourceBundle, $performer, $pagesToMove, $summary, $progressCallback );
+
+ $this->bundleFactory->getStore( $sourceBundle )->move( $source, $target );
+
+ $this->bundleFactory->getPageMoveLogger( $sourceBundle )
+ ->logSuccess( $performer, $target );
+ }
+
+ public function disablePageMoveLimit(): void {
+ $this->pageMoveLimitEnabled = false;
+ }
+
+ public function enablePageMoveLimit(): void {
+ $this->pageMoveLimitEnabled = true;
+ }
+
+ private function getPagesToMove(
+ Title $source,
+ Title $target,
+ bool $moveSubPages,
+ bool $fetchTranslatableSubpages,
+ bool $moveTalkPages
+ ): PageMoveCollection {
+ $sourceBundle = $this->bundleFactory->getValidBundle( $source );
+
+ $classifiedSubpages = $this->subpageBuilder->getSubpagesPerType( $sourceBundle, $moveTalkPages );
+
+ $talkPages = $moveTalkPages ? $classifiedSubpages['talkPages'] : [];
+ $subpages = $moveSubPages ? $classifiedSubpages['normalSubpages'] : [];
+ $relatedTranslatablePageList = [];
+ if ( $fetchTranslatableSubpages ) {
+ $relatedTranslatablePageList = array_merge(
+ $classifiedSubpages['translatableSubpages'],
+ $classifiedSubpages['translatableTalkPages']
+ );
+ }
+
+ $pageTitleRenamer = new PageTitleRenamer( $source, $target );
+ $createOps = static function ( array $pages ) use ( $pageTitleRenamer, $talkPages ) {
+ $ops = [];
+ foreach ( $pages as $from ) {
+ $to = $pageTitleRenamer->getNewTitle( $from );
+ $op = new PageMoveOperation( $from, $to );
+
+ $talkPage = $talkPages[ $from->getPrefixedDBkey() ] ?? null;
+ if ( $talkPage ) {
+ $op->setTalkpage( $talkPage, $pageTitleRenamer->getNewTitle( $talkPage ) );
+ }
+ $ops[] = $op;
+ }
+
+ return $ops;
+ };
+
+ return new PageMoveCollection(
+ $createOps( [ $source ] )[0],
+ $createOps( $classifiedSubpages['translationPages'] ),
+ $createOps( $classifiedSubpages['translationUnitPages'] ),
+ $createOps( $subpages ),
+ $relatedTranslatablePageList
+ );
+ }
+
+ /** @param string[] $titles */
+ private function lock( array $titles ): void {
+ $cache = ObjectCache::getInstance( CACHE_ANYTHING );
+ $data = [];
+ foreach ( $titles as $title ) {
+ $data[$cache->makeKey( 'pt-lock', sha1( $title ) )] = 'locked';
+ }
+
+ // Do not lock pages indefinitely during translatable page moves since
+ // they can fail. Add a timeout so that the locks expire by themselves.
+ // Timeout value has been chosen by a gut feeling
+ $cache->setMulti( $data, self::LOCK_TIMEOUT );
+ }
+
+ /** @param string[] $titles */
+ private function unlock( array $titles ): void {
+ $cache = ObjectCache::getInstance( CACHE_ANYTHING );
+ foreach ( $titles as $title ) {
+ $cache->delete( $cache->makeKey( 'pt-lock', sha1( $title ) ) );
+ }
+ }
+
+ /**
+ * @param TranslatableBundle $sourceBundle
+ * @param User $performer
+ * @param string[] $pagesToMove
+ * @param string $summary
+ * @param callable|null $progressCallback
+ * @return void
+ */
+ private function move(
+ TranslatableBundle $sourceBundle,
+ User $performer,
+ array $pagesToMove,
+ string $summary,
+ callable $progressCallback = null
+ ): void {
+ $fuzzybot = FuzzyBot::getUser();
+
+ Hooks::$allowTargetEdit = true;
+
+ $processed = 0;
+ foreach ( $pagesToMove as $source => $target ) {
+ $sourceTitle = Title::newFromText( $source );
+ $targetTitle = Title::newFromText( $target );
+
+ if ( $source === $sourceBundle->getTitle()->getPrefixedText() ) {
+ $user = $performer;
+ } else {
+ $user = $fuzzybot;
+ }
+
+ $mover = $this->movePageFactory->newMovePage( $sourceTitle, $targetTitle );
+ $status = $mover->move( $user, $summary, false );
+ $processed++;
+
+ if ( $progressCallback ) {
+ $progressCallback(
+ $sourceTitle,
+ $targetTitle,
+ $status,
+ count( $pagesToMove ),
+ $processed
+ );
+ }
+
+ if ( !$status->isOK() ) {
+ $this->bundleFactory->getPageMoveLogger( $sourceBundle )
+ ->logError( $performer, $sourceTitle, $targetTitle, $status );
+ }
+
+ $this->unlock( [ $source, $target ] );
+ }
+
+ Hooks::$allowTargetEdit = false;
+ }
+
+ private function getRenameMoveBlocker( Title $old, string $pageType, int $renameError ): Status {
+ if ( $renameError === PageTitleRenamer::NO_ERROR ) {
+ throw new LogicException(
+ 'Trying to fetch MoveBlocker when there was no error during rename. Title: ' .
+ $old->getPrefixedText() . ', page type: ' . $pageType
+ );
+ }
+
+ if ( $renameError === PageTitleRenamer::UNKNOWN_PAGE ) {
+ $status = Status::newFatal( 'pt-movepage-block-unknown-page', $old->getPrefixedText() );
+ } elseif ( $renameError === PageTitleRenamer::NS_TALK_UNSUPPORTED ) {
+ $status = Status::newFatal( 'pt-movepage-block-ns-talk-unsupported', $old->getPrefixedText() );
+ } elseif ( $renameError === PageTitleRenamer::RENAME_FAILED ) {
+ $status = Status::newFatal( 'pt-movepage-block-rename-failed', $old->getPrefixedText() );
+ } else {
+ return Status::newFatal( "pt-movepage-block-$pageType-invalid", $old->getPrefixedText() );
+ }
+
+ return $status;
+ }
+}
diff --git a/Translate/src/PageTranslation/TranslatablePage.php b/Translate/src/PageTranslation/TranslatablePage.php
new file mode 100644
index 00000000..900c7b8e
--- /dev/null
+++ b/Translate/src/PageTranslation/TranslatablePage.php
@@ -0,0 +1,586 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use LogicException;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\RevTagStore;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\TranslatableBundle;
+use MediaWiki\Extension\Translate\Services;
+use MediaWiki\Linker\LinkTarget;
+use MediaWiki\MediaWikiServices;
+use MediaWiki\Revision\RevisionLookup;
+use MediaWiki\Revision\RevisionRecord;
+use MediaWiki\Revision\SlotRecord;
+use MessageGroups;
+use MessageGroupStats;
+use MessageHandle;
+use MWException;
+use RuntimeException;
+use SpecialPage;
+use TextContent;
+use Title;
+use TranslateMetadata;
+use TranslateUtils;
+use Wikimedia\Rdbms\Database;
+use Wikimedia\Rdbms\IResultWrapper;
+use WikiPageMessageGroup;
+
+/**
+ * Mixed bag of methods related to translatable pages.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @ingroup PageTranslation
+ */
+class TranslatablePage extends TranslatableBundle {
+ /**
+ * List of keys in the metadata table that need to be handled for moves and deletions
+ * @phpcs-require-sorted-array
+ */
+ public const METADATA_KEYS = [
+ 'maxid',
+ 'priorityforce',
+ 'prioritylangs',
+ 'priorityreason',
+ 'transclusion',
+ 'version'
+ ];
+ /** @var string Name of the section which contains the translated page title. */
+ public const DISPLAY_TITLE_UNIT_ID = 'Page display title';
+
+ /** @var Title */
+ protected $title;
+ /** @var RevTagStore */
+ protected $revTagStore;
+ /** @var ?string Text contents of the page. */
+ protected $text;
+ /** @var ?int Revision of the page, if applicable. */
+ protected $revision;
+ /** @var string From which source this object was constructed: text, revision or title */
+ protected $source;
+ /** @var ?bool Whether the title should be translated */
+ protected $pageDisplayTitle;
+ /** @var ?string */
+ private $targetLanguage;
+
+ /** @param Title $title Title object for the page */
+ protected function __construct( Title $title ) {
+ $this->title = $title;
+ $this->revTagStore = new RevTagStore();
+ }
+
+ /**
+ * Constructs a translatable page from given text.
+ * Some functions will fail unless you set revision
+ * parameter manually.
+ */
+ public static function newFromText( Title $title, string $text ): self {
+ $obj = new self( $title );
+ $obj->text = $text;
+ $obj->source = 'text';
+
+ return $obj;
+ }
+
+ /**
+ * Constructs a translatable page from given revision.
+ * The revision must belong to the title given or unspecified
+ * behavior will happen.
+ * @throws MWException
+ */
+ public static function newFromRevision( Title $title, int $revision ): self {
+ $rev = MediaWikiServices::getInstance()
+ ->getRevisionLookup()
+ ->getRevisionByTitle( $title, $revision );
+ if ( $rev === null ) {
+ throw new MWException( 'Revision is null' );
+ }
+
+ $obj = new self( $title );
+ $obj->source = 'revision';
+ $obj->revision = $revision;
+
+ return $obj;
+ }
+
+ /**
+ * Constructs a translatable page from title.
+ * The text of last marked revision is loaded when needed.
+ */
+ public static function newFromTitle( Title $title ): self {
+ $obj = new self( $title );
+ $obj->source = 'title';
+
+ return $obj;
+ }
+
+ /** @inheritDoc */
+ public function getTitle(): Title {
+ return $this->title;
+ }
+
+ /** Returns the text for this translatable page. */
+ public function getText(): string {
+ if ( $this->text !== null ) {
+ return $this->text;
+ }
+
+ $page = $this->getTitle()->getPrefixedDBkey();
+
+ if ( $this->source === 'title' ) {
+ $revision = $this->getMarkedTag();
+ if ( !is_int( $revision ) ) {
+ throw new LogicException(
+ "Trying to load a text for $page which is not marked for translation"
+ );
+ }
+ $this->revision = $revision;
+ }
+
+ $flags = TranslateUtils::shouldReadFromPrimary()
+ ? RevisionLookup::READ_LATEST
+ : RevisionLookup::READ_NORMAL;
+ $rev = MediaWikiServices::getInstance()
+ ->getRevisionLookup()
+ ->getRevisionByTitle( $this->getTitle(), $this->revision, $flags );
+ $content = $rev->getContent( SlotRecord::MAIN );
+ $text = ( $content instanceof TextContent ) ? $content->getText() : null;
+
+ if ( !is_string( $text ) ) {
+ throw new RuntimeException( "Failed to load text for $page" );
+ }
+
+ $this->text = $text;
+
+ return $this->text;
+ }
+
+ /**
+ * Revision is null if object was constructed using newFromText.
+ * @return null|int
+ */
+ public function getRevision(): ?int {
+ return $this->revision;
+ }
+
+ /**
+ * Returns the source language of this translatable page. In other words
+ * the language in which the page without language code is written.
+ * @since 2013-01-28
+ */
+ public function getSourceLanguageCode(): string {
+ return $this->getTitle()->getPageLanguage()->getCode();
+ }
+
+ /** @inheritDoc */
+ public function getMessageGroupId(): string {
+ return self::getMessageGroupIdFromTitle( $this->getTitle() );
+ }
+
+ /** Constructs MessageGroup id for any title. */
+ public static function getMessageGroupIdFromTitle( Title $title ): string {
+ return 'page-' . $title->getPrefixedText();
+ }
+
+ /**
+ * Returns MessageGroup used for translating this page. It may still be empty
+ * if the page has not been ever marked.
+ */
+ public function getMessageGroup(): ?WikiPageMessageGroup {
+ $groupId = $this->getMessageGroupId();
+ $group = MessageGroups::getGroup( $groupId );
+ if ( !$group || $group instanceof WikiPageMessageGroup ) {
+ return $group;
+ }
+
+ throw new RuntimeException(
+ "Expected $groupId to be of type WikiPageMessageGroup; got " .
+ get_class( $group )
+ );
+ }
+
+ /** Check whether title is marked for translation */
+ public function hasPageDisplayTitle(): bool {
+ // Cached value
+ if ( $this->pageDisplayTitle !== null ) {
+ return $this->pageDisplayTitle;
+ }
+
+ // Check if title section exists in list of sections
+ $factory = Services::getInstance()->getTranslationUnitStoreFactory();
+ $store = $factory->getReader( $this->getTitle() );
+ $this->pageDisplayTitle = in_array( self::DISPLAY_TITLE_UNIT_ID, $store->getNames() );
+
+ return $this->pageDisplayTitle;
+ }
+
+ /** Get translated page title. */
+ public function getPageDisplayTitle( string $languageCode ): ?string {
+ // Return null if title not marked for translation
+ if ( !$this->hasPageDisplayTitle() ) {
+ return null;
+ }
+
+ // Display title from DB
+ $section = str_replace( ' ', '_', self::DISPLAY_TITLE_UNIT_ID );
+ $page = $this->getTitle()->getPrefixedDBkey();
+
+ try {
+ $group = $this->getMessageGroup();
+ } catch ( RuntimeException $e ) {
+ return null;
+ }
+
+ // Sanity check, seems to happen during moves
+ if ( !$group ) {
+ return null;
+ }
+
+ return $group->getMessage( "$page/$section", $languageCode, $group::READ_NORMAL );
+ }
+
+ public function getStrippedSourcePageText(): string {
+ $parser = Services::getInstance()->getTranslatablePageParser();
+ $text = $parser->cleanupTags( $this->getText() );
+ $text = preg_replace( '~<languages\s*/>\n?~s', '', $text );
+
+ return $text;
+ }
+
+ public static function getTranslationPageFromTitle( Title $title ): ?TranslationPage {
+ $self = self::isTranslationPage( $title );
+ if ( !$self ) {
+ return null;
+ }
+
+ return $self->getTranslationPage( $self->targetLanguage );
+ }
+
+ public function getTranslationPage( string $targetLanguage ): TranslationPage {
+ $mwServices = MediaWikiServices::getInstance();
+ $config = $mwServices->getMainConfig();
+ $parser = Services::getInstance()->getTranslatablePageParser();
+ $parserOutput = $parser->parse( $this->getText() );
+ $pageVersion = (int)TranslateMetadata::get( $this->getMessageGroupId(), 'version' );
+ $wrapUntranslated = $pageVersion >= 2;
+ $languageFactory = $mwServices->getLanguageFactory();
+
+ return new TranslationPage(
+ $parserOutput,
+ $this->getMessageGroup(),
+ $languageFactory->getLanguage( $targetLanguage ),
+ $languageFactory->getLanguage( $this->getSourceLanguageCode() ),
+ $config->get( 'TranslateKeepOutdatedTranslations' ),
+ $wrapUntranslated,
+ $this->getTitle()
+ );
+ }
+
+ protected static $tagCache = [];
+
+ /** Adds a tag which indicates that this page is suitable for translation. */
+ public function addMarkedTag( int $revision, array $value = null ) {
+ $this->revTagStore->replaceTag( $this->getTitle(), RevTagStore::TP_MARK_TAG, $revision, $value );
+ self::clearSourcePageCache();
+ }
+
+ /** Adds a tag which indicates that this page source is ready for marking for translation. */
+ public function addReadyTag( int $revision ): void {
+ $this->revTagStore->replaceTag( $this->getTitle(), RevTagStore::TP_READY_TAG, $revision );
+ if ( !self::isSourcePage( $this->getTitle() ) ) {
+ self::clearSourcePageCache();
+ }
+ }
+
+ /** Returns the latest revision which has marked tag, if any. */
+ public function getMarkedTag(): ?int {
+ return $this->revTagStore->getLatestRevisionWithTag( $this->getTitle(), RevTagStore::TP_MARK_TAG );
+ }
+
+ /** Returns the latest revision which has ready tag, if any. */
+ public function getReadyTag(): ?int {
+ return $this->revTagStore->getLatestRevisionWithTag( $this->getTitle(), RevTagStore::TP_READY_TAG );
+ }
+
+ /**
+ * Removes all page translation feature data from the database.
+ * Does not remove translated sections or translation pages.
+ */
+ public function unmarkTranslatablePage(): void {
+ $tpPageStore = Services::getInstance()->getTranslatablePageStore();
+ $tpPageStore->unmark( $this->getTitle() );
+ }
+
+ /**
+ * Produces a link to translation view of a translation page.
+ * @param string|bool $code MediaWiki language code. Default: false.
+ * @return string Relative url
+ */
+ public function getTranslationUrl( $code = false ): string {
+ $params = [
+ 'group' => $this->getMessageGroupId(),
+ 'action' => 'page',
+ 'filter' => '',
+ 'language' => $code,
+ ];
+
+ $translate = SpecialPage::getTitleFor( 'Translate' );
+
+ return $translate->getLocalURL( $params );
+ }
+
+ public function getMarkedRevs(): IResultWrapper {
+ $db = TranslateUtils::getSafeReadDB();
+
+ $fields = [ 'rt_revision', 'rt_value' ];
+ $conds = [
+ 'rt_page' => $this->getTitle()->getArticleID(),
+ 'rt_type' => RevTagStore::TP_MARK_TAG,
+ ];
+ $options = [ 'ORDER BY' => 'rt_revision DESC' ];
+
+ return $db->select( 'revtag', $fields, $conds, __METHOD__, $options );
+ }
+
+ /** @inheritDoc */
+ public function getTranslationPages(): array {
+ $mwServices = MediaWikiServices::getInstance();
+
+ $messageGroup = $this->getMessageGroup();
+ $knownLanguageCodes = $messageGroup ? $messageGroup->getTranslatableLanguages() : null;
+ $knownLanguageCodes = $knownLanguageCodes ?? TranslateUtils::getLanguageNames( null );
+
+ $prefixedDbTitleKey = $this->getTitle()->getDBkey() . '/';
+ $baseNamespace = $this->getTitle()->getNamespace();
+
+ // Build a link batch query for all translation pages
+ $linkBatch = $mwServices->getLinkBatchFactory()->newLinkBatch();
+ foreach ( array_keys( $knownLanguageCodes ) as $code ) {
+ $linkBatch->add( $baseNamespace, $prefixedDbTitleKey . $code );
+ }
+
+ $translationPages = [];
+ foreach ( $linkBatch->getPageIdentities() as $pageIdentity ) {
+ if ( $pageIdentity->exists() ) {
+ $translationPages[] = Title::castFromPageIdentity( $pageIdentity );
+ }
+ }
+
+ return $translationPages;
+ }
+
+ /** @inheritDoc */
+ public function getTranslationUnitPages( ?string $code = null ): array {
+ return $this->getTranslationUnitPagesByTitle( $this->title, $code );
+ }
+
+ public function getTranslationPercentages(): array {
+ // Calculate percentages for the available translations
+ try {
+ $group = $this->getMessageGroup();
+ } catch ( RuntimeException $e ) {
+ return [];
+ }
+
+ if ( !$group ) {
+ return [];
+ }
+
+ $titles = $this->getTranslationPages();
+ $temp = MessageGroupStats::forGroup( $this->getMessageGroupId() );
+ $stats = [];
+
+ foreach ( $titles as $t ) {
+ $handle = new MessageHandle( $t );
+ $code = $handle->getCode();
+
+ // Sometimes we want to display 0.00 for pages for which translation
+ // hasn't started yet.
+ $stats[$code] = 0.00;
+ if ( ( $temp[$code][MessageGroupStats::TOTAL] ?? 0 ) > 0 ) {
+ $total = $temp[$code][MessageGroupStats::TOTAL];
+ $translated = $temp[$code][MessageGroupStats::TRANSLATED];
+ $percentage = $translated / $total;
+ $stats[$code] = sprintf( '%.2f', $percentage );
+ }
+ }
+
+ // Content language is always up-to-date
+ $stats[$this->getSourceLanguageCode()] = 1.00;
+
+ return $stats;
+ }
+
+ public function getTransRev( string $suffix ) {
+ $title = Title::makeTitle( NS_TRANSLATIONS, $suffix );
+
+ $db = TranslateUtils::getSafeReadDB();
+ $fields = 'rt_value';
+ $conds = [
+ 'rt_page' => $title->getArticleID(),
+ 'rt_type' => RevTagStore::TRANSVER_PROP,
+ ];
+ $options = [ 'ORDER BY' => 'rt_revision DESC' ];
+
+ return $db->selectField( 'revtag', $fields, $conds, __METHOD__, $options );
+ }
+
+ public function supportsTransclusion(): ?bool {
+ $transclusion = TranslateMetadata::get( $this->getMessageGroupId(), 'transclusion' );
+ if ( $transclusion === false ) {
+ return null;
+ }
+
+ return $transclusion === '1';
+ }
+
+ public function setTransclusion( bool $supportsTransclusion ): void {
+ TranslateMetadata::set(
+ $this->getMessageGroupId(),
+ 'transclusion',
+ $supportsTransclusion ? '1' : '0'
+ );
+ }
+
+ public function getRevisionRecordWithFallback(): ?RevisionRecord {
+ $title = $this->getTitle();
+ $store = MediaWikiServices::getInstance()->getRevisionStore();
+ $revRecord = $store->getRevisionByTitle( $title->getSubpage( $this->targetLanguage ) );
+ if ( $revRecord ) {
+ return $revRecord;
+ }
+
+ // Fetch the source fallback
+ $sourceLanguage = $this->getMessageGroup()->getSourceLanguage();
+ return $store->getRevisionByTitle( $title->getSubpage( $sourceLanguage ) );
+ }
+
+ /** @inheritDoc */
+ public function isMoveable(): bool {
+ return $this->getMarkedTag() !== null;
+ }
+
+ /** @inheritDoc */
+ public function isDeletable(): bool {
+ return $this->getMarkedTag() !== null;
+ }
+
+ /** @return bool|self */
+ public static function isTranslationPage( Title $title ) {
+ $handle = new MessageHandle( $title );
+ $key = $handle->getKey();
+ $code = $handle->getCode();
+
+ if ( $key === '' || $code === '' ) {
+ return false;
+ }
+
+ $codes = MediaWikiServices::getInstance()->getLanguageNameUtils()->getLanguageNames();
+ global $wgTranslateDocumentationLanguageCode;
+ unset( $codes[$wgTranslateDocumentationLanguageCode] );
+
+ if ( !isset( $codes[$code] ) ) {
+ return false;
+ }
+
+ $newtitle = self::changeTitleText( $title, $key );
+
+ if ( !$newtitle ) {
+ return false;
+ }
+
+ $page = self::newFromTitle( $newtitle );
+
+ if ( $page->getMarkedTag() === null ) {
+ return false;
+ }
+
+ $page->targetLanguage = $code;
+
+ return $page;
+ }
+
+ private static function changeTitleText( Title $title, string $text ): ?Title {
+ return Title::makeTitleSafe( $title->getNamespace(), $text );
+ }
+
+ /** Helper to guess translation page from translation unit. */
+ public static function parseTranslationUnit( LinkTarget $translationUnit ): array {
+ // Format is Translations:SourcePageNamespace:SourcePageName/SectionName/LanguageCode.
+ // We will drop the namespace immediately here.
+ $parts = explode( '/', $translationUnit->getText() );
+
+ // LanguageCode and SectionName are guaranteed to not have '/'.
+ $language = array_pop( $parts );
+ $section = array_pop( $parts );
+ $sourcepage = implode( '/', $parts );
+
+ return [
+ 'sourcepage' => $sourcepage,
+ 'section' => $section,
+ 'language' => $language
+ ];
+ }
+
+ public static function isSourcePage( Title $title ): bool {
+ $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
+ $cacheKey = $cache->makeKey( 'pagetranslation', 'sourcepages' );
+
+ $translatablePageIds = $cache->getWithSetCallback(
+ $cacheKey,
+ $cache::TTL_HOUR * 2,
+ static function ( $oldValue, &$ttl, array &$setOpts ) {
+ $dbr = MediaWikiServices::getInstance()->getDBLoadBalancer()->getConnection( DB_REPLICA );
+ $setOpts += Database::getCacheSetOptions( $dbr );
+
+ return RevTagStore::getTranslatableBundleIds(
+ RevTagStore::TP_MARK_TAG, RevTagStore::TP_READY_TAG
+ );
+ },
+ [
+ 'checkKeys' => [ $cacheKey ],
+ 'pcTTL' => $cache::TTL_PROC_SHORT,
+ 'pcGroup' => __CLASS__ . ':1'
+ ]
+ );
+
+ return in_array( $title->getArticleID(), $translatablePageIds );
+ }
+
+ /** Clears the source page cache */
+ public static function clearSourcePageCache(): void {
+ $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
+ $cache->touchCheckKey( $cache->makeKey( 'pagetranslation', 'sourcepages' ) );
+ }
+
+ public static function determineStatus(
+ ?int $readyRevisionId,
+ ?int $markRevisionId,
+ int $latestRevisionId
+ ): ?TranslatablePageStatus {
+ $status = null;
+ if ( $markRevisionId === null ) {
+ // Never marked, check that the latest version is ready
+ if ( $readyRevisionId === $latestRevisionId ) {
+ $status = TranslatablePageStatus::PROPOSED;
+ } else {
+ // Otherwise, ignore such pages
+ return null;
+ }
+ } elseif ( $readyRevisionId === $latestRevisionId ) {
+ if ( $markRevisionId === $readyRevisionId ) {
+ // Marked and latest version is fine
+ $status = TranslatablePageStatus::ACTIVE;
+ } else {
+ $status = TranslatablePageStatus::OUTDATED;
+ }
+ } else {
+ // Marked but latest version is not fine
+ $status = TranslatablePageStatus::BROKEN;
+ }
+
+ return new TranslatablePageStatus( $status );
+ }
+}
+
+class_alias( TranslatablePage::class, 'TranslatablePage' );
diff --git a/Translate/src/PageTranslation/TranslatablePageInsertablesSuggester.php b/Translate/src/PageTranslation/TranslatablePageInsertablesSuggester.php
new file mode 100644
index 00000000..1c77f32e
--- /dev/null
+++ b/Translate/src/PageTranslation/TranslatablePageInsertablesSuggester.php
@@ -0,0 +1,43 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use MediaWiki\Extension\Translate\TranslatorInterface\Insertable\Insertable;
+use MediaWiki\Extension\Translate\TranslatorInterface\Insertable\MediaWikiInsertablesSuggester;
+
+/**
+ * Insertables for translation variables in translatable pages.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2013.11
+ */
+class TranslatablePageInsertablesSuggester extends MediaWikiInsertablesSuggester {
+ /**
+ * Translatable pages allow naming the variables. Almost anything is
+ * allowed in a variable name, but here we are stricter to avoid too many
+ * incorrect matches when variable name is followed by non-space characters.
+ * @internal For use in this namespace only
+ */
+ public const NAME_PATTERN = '\$[\pL\pN_$-]+';
+
+ public function getInsertables( string $text ): array {
+ $insertables = parent::getInsertables( $text );
+
+ $matches = [];
+ $pattern = '/' . self::NAME_PATTERN . '/';
+ preg_match_all( $pattern, $text, $matches, PREG_SET_ORDER );
+
+ $new = array_map( static function ( $match ) {
+ // Numerical ones are already handled by parent
+ if ( ctype_digit( substr( $match[0], 1 ) ) ) {
+ return null;
+ }
+
+ return new Insertable( $match[0], $match[0] );
+ }, $matches );
+
+ $new = array_filter( $new );
+ return array_merge( $insertables, $new );
+ }
+}
diff --git a/Translate/src/PageTranslation/TranslatablePageParser.php b/Translate/src/PageTranslation/TranslatablePageParser.php
new file mode 100644
index 00000000..ff52eb3b
--- /dev/null
+++ b/Translate/src/PageTranslation/TranslatablePageParser.php
@@ -0,0 +1,216 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use MediaWiki\Extension\Translate\Utilities\ParsingPlaceholderFactory;
+
+/**
+ * Generates ParserOutput from text or removes all tags from a text.
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2020.08
+ */
+class TranslatablePageParser {
+ private $placeholderFactory;
+
+ public function __construct( ParsingPlaceholderFactory $placeholderFactory ) {
+ $this->placeholderFactory = $placeholderFactory;
+ }
+
+ public function containsMarkup( string $text ): bool {
+ $nowiki = [];
+ $text = $this->armourNowiki( $nowiki, $text );
+ return preg_match( '~</?translate[ >]~', $text ) !== 0;
+ }
+
+ /**
+ * Remove all opening and closing translate tags following the same whitespace rules as the
+ * regular parsing. This doesn't try to parse the page, so it can handle unbalanced tags.
+ */
+ public function cleanupTags( string $text ): string {
+ $nowiki = [];
+ $text = $this->armourNowiki( $nowiki, $text );
+ $text = preg_replace( '~<translate( nowrap)?>\n?~s', '', $text );
+ $text = preg_replace( '~\n?</translate>~s', '', $text );
+ // Markers: headers and the rest
+ $ic = preg_quote( TranslationUnit::UNIT_MARKER_INVALID_CHARS, '~' );
+ $text = preg_replace( "~(^=.*=) <!--T:[^$ic]+-->$~um", '\1', $text );
+ $text = preg_replace( "~<!--T:[^$ic]+-->[\n ]?~um", '', $text );
+ // Remove variables
+ $unit = new TranslationUnit( $text );
+ $text = $unit->getTextForTrans();
+
+ $text = $this->unarmourNowiki( $nowiki, $text );
+ return $text;
+ }
+
+ /** @throws ParsingFailure */
+ public function parse( string $text ): ParserOutput {
+ $nowiki = [];
+ $text = $this->armourNowiki( $nowiki, $text );
+
+ $sections = [];
+ $tagPlaceHolders = [];
+
+ while ( true ) {
+ $re = '~(<translate(?: nowrap)?>)(.*?)</translate>~s';
+ $matches = [];
+ $ok = preg_match( $re, $text, $matches, PREG_OFFSET_CAPTURE );
+
+ if ( $ok === 0 || $ok === false ) {
+ break; // No match or failure
+ }
+
+ $contentWithTags = $matches[0][0];
+ $contentWithoutTags = $matches[2][0];
+ // These are offsets to the content inside the tags in $text
+ $offsetStart = $matches[0][1];
+ $offsetEnd = $offsetStart + strlen( $contentWithTags );
+
+ // Replace the whole match with a placeholder
+ $ph = $this->placeholderFactory->make();
+ $text = substr( $text, 0, $offsetStart ) . $ph . substr( $text, $offsetEnd );
+
+ if ( preg_match( '~<translate( nowrap)?>~', $contentWithoutTags ) !== 0 ) {
+ throw new ParsingFailure(
+ 'Nested tags',
+ [ 'pt-parse-nested', $contentWithoutTags ]
+ );
+ }
+
+ $openTag = $matches[1][0];
+ $canWrap = $openTag !== '<translate nowrap>';
+
+ // Parse the content inside the tags
+ $contentWithoutTags = $this->unarmourNowiki( $nowiki, $contentWithoutTags );
+ $parse = $this->parseSection( $contentWithoutTags, $canWrap );
+
+ // Update list of sections and the template with the results
+ $sections += $parse['sections'];
+ $tagPlaceHolders[$ph] = new Section( $openTag, $parse['template'], '</translate>' );
+ }
+
+ $prettyTemplate = $text;
+ foreach ( $tagPlaceHolders as $ph => $value ) {
+ $prettyTemplate = str_replace( $ph, '[...]', $prettyTemplate );
+ }
+
+ if ( preg_match( '~<translate( nowrap)?>~', $text ) !== 0 ) {
+ throw new ParsingFailure(
+ 'Unmatched opening tag',
+ [ 'pt-parse-open', $prettyTemplate ]
+ );
+ } elseif ( strpos( $text, '</translate>' ) !== false ) {
+ throw new ParsingFailure(
+ "Unmatched closing tag",
+ [ 'pt-parse-close', $prettyTemplate ]
+ );
+ }
+
+ $text = $this->unarmourNowiki( $nowiki, $text );
+
+ return new ParserOutput( $text, $tagPlaceHolders, $sections );
+ }
+
+ /**
+ * Splits the content marked with \<translate> tags into translation units, which are
+ * separated with two or more newlines. Extra whitespace is captured in the template and
+ * is not included in the translation units.
+ * @internal
+ */
+ public function parseSection( string $text, bool $canWrap ): array {
+ $flags = PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE;
+ $parts = preg_split( '~(^\s*|\s*\n\n\s*|\s*$)~', $text, -1, $flags );
+
+ $inline = preg_match( '~\n~', $text ) === 0;
+
+ $template = '';
+ $sections = [];
+
+ foreach ( $parts as $_ ) {
+ if ( trim( $_ ) === '' ) {
+ $template .= $_;
+ } else {
+ $ph = $this->placeholderFactory->make();
+ $tpsection = $this->parseUnit( $_ );
+ $tpsection->setIsInline( $inline );
+ $tpsection->setCanWrap( $canWrap );
+ $sections[$ph] = $tpsection;
+ $template .= $ph;
+ }
+ }
+
+ return [
+ 'template' => $template,
+ 'sections' => $sections,
+ ];
+ }
+
+ /**
+ * Checks if this unit already contains a section marker. If there
+ * is not, a new one will be created. Marker will have the value of
+ * -1, which will later be replaced with a real value.
+ * @internal
+ */
+ public function parseUnit( string $content ): TranslationUnit {
+ $re = '~<!--T:(.*?)-->~';
+ $matches = [];
+ $count = preg_match_all( $re, $content, $matches, PREG_SET_ORDER );
+
+ if ( $count > 1 ) {
+ throw new ParsingFailure(
+ 'Multiple translation unit markers',
+ [ 'pt-shake-multiple', $content ]
+ );
+ }
+
+ // If no id given in the source, default to a new section id
+ $id = TranslationUnit::NEW_UNIT_ID;
+ if ( $count === 1 ) {
+ foreach ( $matches as $match ) {
+ [ /*full*/, $id ] = $match;
+
+ // Currently handle only these two standard places.
+ // Is this too strict?
+ $rer1 = '~^<!--T:(.*?)-->( |\n)~'; // Normal sections
+ $rer2 = '~\s*<!--T:(.*?)-->$~m'; // Sections with title
+ $content = preg_replace( $rer1, '', $content );
+ $content = preg_replace( $rer2, '', $content );
+
+ if ( preg_match( $re, $content ) === 1 ) {
+ throw new ParsingFailure(
+ 'Translation unit marker is in unsupported position',
+ [ 'pt-shake-position', $content ]
+ );
+ } elseif ( trim( $content ) === '' ) {
+ throw new ParsingFailure(
+ 'Translation unit has no content besides marker',
+ [ 'pt-shake-empty', $id ]
+ );
+ }
+ }
+ }
+
+ return new TranslationUnit( $content, $id );
+ }
+
+ /** @internal */
+ public function armourNowiki( array &$holders, string $text ): string {
+ $re = '~(<nowiki>)(.*?)(</nowiki>)~s';
+
+ while ( preg_match( $re, $text, $matches ) ) {
+ $ph = $this->placeholderFactory->make();
+ $text = str_replace( $matches[0], $ph, $text );
+ $holders[$ph] = $matches[0];
+ }
+
+ return $text;
+ }
+
+ /** @internal */
+ public function unarmourNowiki( array $holders, string $text ): string {
+ return strtr( $text, $holders );
+ }
+}
diff --git a/Translate/src/PageTranslation/TranslatablePageStatus.php b/Translate/src/PageTranslation/TranslatablePageStatus.php
new file mode 100644
index 00000000..02a3f25c
--- /dev/null
+++ b/Translate/src/PageTranslation/TranslatablePageStatus.php
@@ -0,0 +1,37 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use InvalidArgumentException;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\TranslatableBundleStatus;
+
+/**
+ * Stores and validates possible statuses for TranslatablePage
+ * @author Abijeet Patro
+ * @since 2022.09
+ * @license GPL-2.0-or-later
+ */
+class TranslatablePageStatus implements TranslatableBundleStatus {
+ public const PROPOSED = 1;
+ public const ACTIVE = 2;
+ public const OUTDATED = 3;
+ public const BROKEN = 4;
+
+ private $status;
+
+ public function __construct( int $status ) {
+ if ( !in_array( $status, [ self::PROPOSED, self::ACTIVE, self::OUTDATED, self::BROKEN ] ) ) {
+ throw new InvalidArgumentException( "Invalid status: $status" );
+ }
+ $this->status = $status;
+ }
+
+ public function isEqual( int $status ): bool {
+ return $this->status === $status;
+ }
+
+ public function getId(): int {
+ return $this->status;
+ }
+}
diff --git a/Translate/src/PageTranslation/TranslateExt.php b/Translate/src/PageTranslation/TranslateExt.php
new file mode 100644
index 00000000..d96c620e
--- /dev/null
+++ b/Translate/src/PageTranslation/TranslateExt.php
@@ -0,0 +1,18 @@
+<?php
+
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use Wikimedia\Parsoid\Ext\ExtensionModule;
+
+class TranslateExt implements ExtensionModule {
+
+ /** @inheritDoc */
+ public function getConfig(): array {
+ return [
+ 'name' => 'Translate',
+ 'annotations' => [ 'translate', 'tvar' ]
+ ];
+ }
+}
diff --git a/Translate/src/PageTranslation/TranslationPage.php b/Translate/src/PageTranslation/TranslationPage.php
new file mode 100644
index 00000000..a2b22936
--- /dev/null
+++ b/Translate/src/PageTranslation/TranslationPage.php
@@ -0,0 +1,118 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use Content;
+use ContentHandler;
+use Language;
+use MessageCollection;
+use Parser;
+use Title;
+use TMessage;
+use WikiPageMessageGroup;
+
+/**
+ * Generates wikitext source code for translation pages.
+ *
+ * Also handles loading of translations, but that can be skipped and translations given directly.
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2020.08
+ */
+class TranslationPage {
+ /** @var ParserOutput */
+ private $output;
+ /** @var WikiPageMessageGroup */
+ private $group;
+ /** @var Language */
+ private $targetLanguage;
+ /** @var Language */
+ private $sourceLanguage;
+ /** @var bool */
+ private $showOutdated;
+ /** @var bool */
+ private $wrapUntranslated;
+ /** @var Title */
+ private $sourcePageTitle;
+
+ public function __construct(
+ ParserOutput $output,
+ WikiPageMessageGroup $group,
+ Language $targetLanguage,
+ Language $sourceLanguage,
+ bool $showOutdated,
+ bool $wrapUntranslated,
+ Title $sourcePageTitle
+ ) {
+ $this->output = $output;
+ $this->group = $group;
+ $this->targetLanguage = $targetLanguage;
+ $this->sourceLanguage = $sourceLanguage;
+ $this->showOutdated = $showOutdated;
+ $this->wrapUntranslated = $wrapUntranslated;
+ $this->sourcePageTitle = $sourcePageTitle;
+ }
+
+ /** @since 2021.07 */
+ public function getPageContent( Parser $parser ): Content {
+ $text = $this->generateSource( $parser );
+ $model = $this->sourcePageTitle->getContentModel();
+ return ContentHandler::makeContent( $text, null, $model );
+ }
+
+ public function getMessageCollection(): MessageCollection {
+ return $this->group->initCollection( $this->targetLanguage->getCode() );
+ }
+
+ public function filterMessageCollection( MessageCollection $collection ): void {
+ $collection->loadTranslations();
+ if ( $this->showOutdated ) {
+ $collection->filter( 'hastranslation', false );
+ } else {
+ $collection->filter( 'translated', false );
+ }
+ }
+
+ /** @return TMessage[] */
+ public function extractMessages( MessageCollection $collection ): array {
+ $messages = [];
+ $prefix = $this->sourcePageTitle->getPrefixedDBkey() . '/';
+ foreach ( $this->output->units() as $unit ) {
+ $messages[$unit->id] = $collection[$prefix . $unit->id] ?? null;
+ }
+
+ return $messages;
+ }
+
+ /**
+ * @param Parser $parser
+ * @param TMessage[] $messages
+ */
+ public function generateSourceFromTranslations( Parser $parser, array $messages ): string {
+ $replacements = [];
+ foreach ( $this->output->units() as $placeholder => $unit ) {
+ /** @var TMessage $msg */
+ $msg = $messages[$unit->id] ?? null;
+ $replacements[$placeholder] = $unit->getTextForRendering(
+ $msg,
+ $this->sourceLanguage,
+ $this->targetLanguage,
+ $this->wrapUntranslated,
+ $parser
+ );
+ }
+
+ $template = $this->output->translationPageTemplate();
+ return strtr( $template, $replacements );
+ }
+
+ /** Generate translation page source using default options. */
+ private function generateSource( Parser $parser ): string {
+ $collection = $this->getMessageCollection();
+ $this->filterMessageCollection( $collection );
+ $messages = $this->extractMessages( $collection );
+ return $this->generateSourceFromTranslations( $parser, $messages );
+ }
+}
diff --git a/Translate/src/PageTranslation/TranslationUnit.php b/Translate/src/PageTranslation/TranslationUnit.php
new file mode 100644
index 00000000..0b69842f
--- /dev/null
+++ b/Translate/src/PageTranslation/TranslationUnit.php
@@ -0,0 +1,314 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use Html;
+use Language;
+use Parser;
+use TMessage;
+use const PREG_SET_ORDER;
+
+/**
+ * This class represents one translation unit in a translatable page.
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @ingroup PageTranslation
+ */
+class TranslationUnit {
+ public const UNIT_MARKER_INVALID_CHARS = "_/\n<>";
+ public const NEW_UNIT_ID = '-1';
+ // Deprecated syntax. Example: <tvar|1>...</>
+ public const TVAR_OLD_SYNTAX_REGEX = '~<tvar\|([^>]+)>(.*?)</>~us';
+ // Current syntax. Example: <tvar name=1>...</tvar>
+ public const TVAR_NEW_SYNTAX_REGEX = <<<'REGEXP'
+~
+<tvar \s+ name \s* = \s*
+( ( ' (?<key1> [^']* ) ' ) | ( " (?<key2> [^"]* ) " ) | (?<key3> [^"'\s>]* ) )
+\s* > (?<value>.*?) </tvar \s* >
+~xusi
+REGEXP;
+
+ /** @var string Unit name */
+ public $id;
+ /** @var string Unit text. */
+ public $text;
+ /** @var string Is this new, existing, changed or deleted unit. */
+ public $type;
+ /** @var string|null Text of previous version of this unit. */
+ public $oldText = null;
+ /**
+ * @var bool Whether this unit is inline unit.
+ * E.g. "Something <translate>foo</translate> bar".
+ */
+ protected $inline = false;
+ /** @var bool Whether wrapping the unit is allowed */
+ private $canWrap = true;
+ /** @var int Version number for the serialization. */
+ private $version = 1;
+ /** @var string[] List of properties to serialize. */
+ private static $properties = [ 'version', 'id', 'text', 'type', 'oldText', 'inline' ];
+
+ public function __construct(
+ string $text,
+ string $id = self::NEW_UNIT_ID,
+ string $type = 'new',
+ string $oldText = null
+ ) {
+ $this->text = $text;
+ $this->id = $id;
+ $this->type = $type;
+ $this->oldText = $oldText;
+ }
+
+ public function setIsInline( bool $value ): void {
+ $this->inline = $value;
+ }
+
+ public function isInline(): bool {
+ return $this->inline;
+ }
+
+ public function setCanWrap( bool $value ): void {
+ $this->canWrap = $value;
+ }
+
+ public function canWrap(): bool {
+ return $this->canWrap;
+ }
+
+ /** Returns unit text unmodified */
+ public function getText(): string {
+ return $this->text;
+ }
+
+ /** Returns the text with tvars replaces with placeholders */
+ public function getTextWithVariables(): string {
+ $variableReplacements = [];
+ foreach ( $this->getVariables() as $variable ) {
+ $variableReplacements[$variable->getDefinition()] = $variable->getName();
+ }
+
+ return strtr( $this->text, $variableReplacements );
+ }
+
+ /** Returns unit text with variables replaced. */
+ public function getTextForTrans(): string {
+ $variableReplacements = [];
+ foreach ( $this->getVariables() as $variable ) {
+ $variableReplacements[$variable->getDefinition()] = $variable->getValue();
+ }
+
+ return strtr( $this->text, $variableReplacements );
+ }
+
+ /** Returns the unit text with updated or added unit marker */
+ public function getMarkedText(): string {
+ $id = $this->id;
+ $header = "<!--T:$id-->";
+
+ if ( $this->getHeading( $this->text ) !== null ) {
+ $text = $this->text . ' ' . $header;
+ } else {
+ if ( $this->inline ) {
+ $text = $header . ' ' . $this->text;
+ } else {
+ $text = $header . "\n" . $this->text;
+ }
+ }
+
+ return $text;
+ }
+
+ /** Returns oldtext, or current text if not available */
+ public function getOldText(): string {
+ return $this->oldText ?? $this->text;
+ }
+
+ /** @return TranslationVariable[] */
+ public function getVariables(): array {
+ $vars = [];
+
+ $matches = [];
+ preg_match_all( self::TVAR_OLD_SYNTAX_REGEX, $this->text, $matches, PREG_SET_ORDER );
+ foreach ( $matches as $m ) {
+ $vars[] = new TranslationVariable( $m[0], '$' . $m[1], $m[2] );
+ }
+
+ $matches = [];
+ preg_match_all( self::TVAR_NEW_SYNTAX_REGEX, $this->text, $matches, PREG_SET_ORDER );
+ foreach ( $matches as $m ) {
+ $vars[] = new TranslationVariable(
+ $m[0],
+ // Maximum of one of these is non-empty string
+ '$' . ( $m['key1'] . $m['key2'] . $m['key3'] ),
+ $m['value']
+ );
+ }
+
+ return $vars;
+ }
+
+ /** Serialize this object to a PHP array */
+ public function serializeToArray(): array {
+ $data = [];
+ foreach ( self::$properties as $index => $property ) {
+ // Because this is used for the JobQueue, use a list
+ // instead of an array to save space.
+ $data[$index] = $this->$property;
+ }
+
+ return $data;
+ }
+
+ public static function unserializeFromArray( array $data ): self {
+ // Give dummy default text, will be overridden
+ $unit = new self( '' );
+ foreach ( self::$properties as $index => $property ) {
+ $unit->$property = $data[$index];
+ }
+
+ return $unit;
+ }
+
+ public function getTextForRendering(
+ ?TMessage $msg,
+ Language $sourceLanguage,
+ Language $targetLanguage,
+ bool $wrapUntranslated,
+ ?Parser $parser = null
+ ): string {
+ $attributes = [];
+ $headingText = null;
+
+ if ( $msg && $msg->translation() !== null ) {
+ $content = $msg->translation();
+ $headingText = $this->getHeading( $msg->definition() );
+
+ if ( $msg->hasTag( 'fuzzy' ) ) {
+ // We do not ever want to show explicit fuzzy marks in the rendered pages
+ $content = str_replace( TRANSLATE_FUZZY, '', $content );
+ $attributes['class'] = 'mw-translate-fuzzy';
+ }
+ $translationLanguage = $targetLanguage->getCode();
+ } else {
+ $content = $this->getTextWithVariables();
+ if ( $wrapUntranslated ) {
+ $attributes['lang'] = $sourceLanguage->getHtmlCode();
+ $attributes['dir'] = $sourceLanguage->getDir();
+ $attributes['class'] = 'mw-content-' . $sourceLanguage->getDir();
+ }
+ $translationLanguage = $sourceLanguage->getCode();
+ }
+
+ if ( $this->canWrap() && $attributes ) {
+ $tag = $this->isInline() ? 'span' : 'div';
+ $content = $this->isInline() ? $content : "\n$content\n";
+ $content = Html::rawElement( $tag, $attributes, $content );
+ }
+
+ $variableReplacements = [];
+ foreach ( $this->getVariables() as $variable ) {
+ $variableReplacements[$variable->getName()] = $variable->getValue();
+ }
+
+ if (
+ $parser &&
+ $this->shouldAddAnchor(
+ $sourceLanguage,
+ $targetLanguage,
+ $headingText,
+ $msg,
+ $this->isInline()
+ )
+ ) {
+ $sectionName = substr( $parser->guessSectionNameFromWikiText( $headingText ), 1 );
+ $attributes = [ 'id' => $sectionName ];
+ $content = Html::rawElement( 'span', $attributes, '' ) . "\n$content";
+ }
+
+ $content = strtr( $content, $variableReplacements );
+
+ // Allow wrapping this inside variables
+ $content = preg_replace(
+ '/{{\s*TRANSLATIONLANGUAGE\s*}}/',
+ $translationLanguage,
+ $content
+ );
+
+ return $content;
+ }
+
+ /** @return TranslationUnitIssue[] */
+ public function getIssues(): array {
+ $issues = $usedNames = [];
+ foreach ( $this->getVariables() as $variable ) {
+ $name = $variable->getName();
+ $pattern = '/^' . TranslatablePageInsertablesSuggester::NAME_PATTERN . '$/u';
+ if ( !preg_match( $pattern, $name ) ) {
+ // Key by name to avoid multiple issues of the same name
+ $issues[$name] = new TranslationUnitIssue(
+ TranslationUnitIssue::WARNING,
+ 'tpt-validation-not-insertable',
+ [ wfEscapeWikiText( $name ) ]
+ );
+ }
+
+ $usedNames[ $name ][] = $variable->getValue();
+ }
+
+ foreach ( $usedNames as $name => $contents ) {
+ $uniqueValueCount = count( array_unique( $contents ) );
+ if ( $uniqueValueCount > 1 ) {
+ $issues[] = new TranslationUnitIssue(
+ TranslationUnitIssue::ERROR,
+ 'tpt-validation-name-reuse',
+ [ wfEscapeWikiText( $name ) ]
+ );
+ }
+ }
+
+ return array_values( $issues );
+ }
+
+ /** Mimic the behavior of how Parser handles headings including handling of unbalanced "=" signs */
+ private function getHeading( string $text ): ?string {
+ $match = [];
+ preg_match( '/^(={1,6})[ \t]*(.+?)[ \t]*\1\s*$/', $text, $match );
+ return $match[2] ?? null;
+ }
+
+ private function shouldAddAnchor(
+ Language $sourceLanguage,
+ Language $targetLanguage,
+ ?string $headingText,
+ ?TMessage $msg,
+ bool $isInline
+ ): bool {
+ // If its not a heading, don't bother adding an anchor
+ if ( $headingText === null ) {
+ return false;
+ }
+
+ // We only add an anchor for a translation. See: https://phabricator.wikimedia.org/T62544
+ if ( $sourceLanguage->getCode() === $targetLanguage->getCode() ) {
+ return false;
+ }
+
+ // Translation and the source text are same, avoid adding an anchor that would create
+ // an id attribute with duplicate value
+ if ( $msg && $msg->translation() === $msg->definition() ) {
+ return false;
+ }
+
+ // If nowrap attribute is set, do not add the anchor
+ if ( !$this->canWrap() ) {
+ return false;
+ }
+
+ // We don't add anchors for inline translate tags to avoid breaking input like this:
+ // Text here <translate>== not a heading ==</translate>
+ return !$isInline;
+ }
+}
diff --git a/Translate/src/PageTranslation/TranslationUnitIssue.php b/Translate/src/PageTranslation/TranslationUnitIssue.php
new file mode 100644
index 00000000..65f9508b
--- /dev/null
+++ b/Translate/src/PageTranslation/TranslationUnitIssue.php
@@ -0,0 +1,46 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use InvalidArgumentException;
+use MediaWiki\Extension\Translate\Validation\ValidationIssue;
+use MessageSpecifier;
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2021.05
+ * @see ValidationIssue (similar, but different use case)
+ */
+class TranslationUnitIssue implements MessageSpecifier {
+ public const ERROR = 'error';
+ public const WARNING = 'warning';
+ /** @var string self::ERROR|self::WARNING */
+ private $severity;
+ /** @var string */
+ private $messageKey;
+ /** @var array */
+ private $messageParams;
+
+ public function __construct( string $severity, string $messageKey, array $messageParams = [] ) {
+ if ( !in_array( $severity, [ self::ERROR, self::WARNING ] ) ) {
+ throw new InvalidArgumentException( 'Invalid value for severity: ' . $severity );
+ }
+ $this->severity = $severity;
+ $this->messageKey = $messageKey;
+ $this->messageParams = $messageParams;
+ }
+
+ public function getSeverity(): string {
+ return $this->severity;
+ }
+
+ public function getKey(): string {
+ return $this->messageKey;
+ }
+
+ public function getParams(): array {
+ return $this->messageParams;
+ }
+}
diff --git a/Translate/src/PageTranslation/TranslationUnitReader.php b/Translate/src/PageTranslation/TranslationUnitReader.php
new file mode 100644
index 00000000..fbaf462a
--- /dev/null
+++ b/Translate/src/PageTranslation/TranslationUnitReader.php
@@ -0,0 +1,17 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+/**
+ * @license GPL-2.0-or-later
+ * @author Niklas Laxström
+ * @since 2021.05
+ */
+interface TranslationUnitReader {
+ /** @return TranslationUnit[] */
+ public function getUnits(): array;
+
+ /** @return string[] */
+ public function getNames(): array;
+}
diff --git a/Translate/src/PageTranslation/TranslationUnitStore.php b/Translate/src/PageTranslation/TranslationUnitStore.php
new file mode 100644
index 00000000..878d1ef0
--- /dev/null
+++ b/Translate/src/PageTranslation/TranslationUnitStore.php
@@ -0,0 +1,58 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use Wikimedia\Rdbms\IDatabase;
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2021.05
+ */
+class TranslationUnitStore implements TranslationUnitReader {
+ private const TABLE = 'translate_sections';
+ /** @var IDatabase */
+ private $db;
+ /** @var int */
+ private $pageId;
+
+ public function __construct( IDatabase $db, int $pageId ) {
+ $this->db = $db;
+ $this->pageId = $pageId;
+ }
+
+ public function getUnits(): array {
+ $res = $this->db->select(
+ self::TABLE,
+ [ 'trs_key', 'trs_text' ],
+ [ 'trs_page' => $this->pageId ],
+ __METHOD__
+ );
+
+ $units = [];
+ foreach ( $res as $row ) {
+ $units[$row->trs_key] = new TranslationUnit( $row->trs_text, $row->trs_key );
+ }
+
+ return $units;
+ }
+
+ /** @return string[] */
+ public function getNames(): array {
+ return $this->db->selectFieldValues(
+ self::TABLE,
+ 'trs_key',
+ [ 'trs_page' => $this->pageId ],
+ __METHOD__
+ );
+ }
+
+ public function delete(): void {
+ $this->db->delete(
+ self::TABLE,
+ [ 'trs_page' => $this->pageId ],
+ __METHOD__
+ );
+ }
+}
diff --git a/Translate/src/PageTranslation/TranslationUnitStoreFactory.php b/Translate/src/PageTranslation/TranslationUnitStoreFactory.php
new file mode 100644
index 00000000..3c2cefb2
--- /dev/null
+++ b/Translate/src/PageTranslation/TranslationUnitStoreFactory.php
@@ -0,0 +1,42 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use LogicException;
+use Title;
+use Wikimedia\Rdbms\ILoadBalancer;
+use const DB_PRIMARY;
+use const DB_REPLICA;
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2021.05
+ */
+class TranslationUnitStoreFactory {
+ /** @var ILoadBalancer */
+ private $lb;
+
+ public function __construct( ILoadBalancer $lb ) {
+ $this->lb = $lb;
+ }
+
+ public function getReader( Title $page ): TranslationUnitReader {
+ $pageId = $page->getArticleID();
+ if ( $pageId === 0 ) {
+ throw new LogicException( 'Page must exist' );
+ }
+
+ return new TranslationUnitStore( $this->lb->getConnectionRef( DB_REPLICA ), $pageId );
+ }
+
+ public function getWriter( Title $page ): TranslationUnitStore {
+ $pageId = $page->getArticleID();
+ if ( $pageId === 0 ) {
+ throw new LogicException( 'Page must exist' );
+ }
+
+ return new TranslationUnitStore( $this->lb->getConnectionRef( DB_PRIMARY ), $pageId );
+ }
+}
diff --git a/Translate/src/PageTranslation/TranslationVariable.php b/Translate/src/PageTranslation/TranslationVariable.php
new file mode 100644
index 00000000..c5958af6
--- /dev/null
+++ b/Translate/src/PageTranslation/TranslationVariable.php
@@ -0,0 +1,38 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+/**
+ * This class represents one translation variable in a translation unit.
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2021.03
+ */
+class TranslationVariable {
+ /** @var string */
+ private $definition;
+ /** @var string */
+ private $name;
+ /** @var string */
+ private $value;
+
+ public function __construct( string $definition, string $name, string $value ) {
+ $this->definition = $definition;
+ $this->name = $name;
+ $this->value = $value;
+ }
+
+ public function getDefinition(): string {
+ return $this->definition;
+ }
+
+ public function getName(): string {
+ return $this->name;
+ }
+
+ public function getValue(): string {
+ return $this->value;
+ }
+}
diff --git a/Translate/src/PageTranslation/UpdateTranslatablePageJob.php b/Translate/src/PageTranslation/UpdateTranslatablePageJob.php
new file mode 100644
index 00000000..62c74b84
--- /dev/null
+++ b/Translate/src/PageTranslation/UpdateTranslatablePageJob.php
@@ -0,0 +1,178 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use MediaWiki\Extension\Translate\Jobs\GenericTranslateJob;
+use MediaWiki\MediaWikiServices;
+use MessageGroups;
+use MessageGroupStats;
+use MessageIndexRebuildJob;
+use MessageUpdateJob;
+use RunnableJob;
+use Title;
+
+/**
+ * Job for updating translation units and translation pages when
+ * a translatable page is marked for translation.
+ */
+class UpdateTranslatablePageJob extends GenericTranslateJob {
+ /** @inheritDoc */
+ public function __construct( Title $title, array $params = [] ) {
+ parent::__construct( 'UpdateTranslatablePageJob', $title, $params );
+ }
+
+ /**
+ * Create a job that updates a translation page.
+ *
+ * If a list of sections is provided, then the job will also update translation
+ * unit pages.
+ *
+ * @param TranslatablePage $page
+ * @param TranslationUnit[] $sections
+ */
+ public static function newFromPage( TranslatablePage $page, array $sections = [] ): self {
+ $params = [];
+ $params[ 'sections' ] = [];
+ foreach ( $sections as $section ) {
+ $params[ 'sections' ][] = $section->serializeToArray();
+ }
+
+ return new self( $page->getTitle(), $params );
+ }
+
+ public function run(): bool {
+ // WARNING: Nothing here must not depend on message index being up to date.
+ // For performance reasons, message index rebuild is run a separate job after
+ // everything else is updated.
+
+ // START: This section does not care about replication lag
+ $this->logInfo( 'Starting UpdateTranslatablePageJob' );
+
+ $sections = $this->params[ 'sections' ];
+ foreach ( $sections as $index => $section ) {
+ // Old jobs stored sections as objects because they were serialized and
+ // unserialized transparently. That is no longer supported, so we
+ // convert manually to primitive types first (to an PHP array).
+ if ( is_array( $section ) ) {
+ $sections[ $index ] = TranslationUnit::unserializeFromArray( $section );
+ }
+ }
+
+ /**
+ * Units should be updated before the render jobs are run so that the
+ * latest changes can take effect on the translation pages.
+ */
+ $page = TranslatablePage::newFromTitle( $this->title );
+ $unitJobs = self::getTranslationUnitJobs( $page, $sections );
+ foreach ( $unitJobs as $job ) {
+ $job->run();
+ }
+
+ $this->logInfo(
+ 'Finished running ' . count( $unitJobs ) . ' MessageUpdate jobs for '
+ . count( $sections ) . ' sections'
+ );
+ // END: This section does not care about replication lag
+ $mwServices = MediaWikiServices::getInstance();
+ $lb = $mwServices->getDBLoadBalancerFactory();
+ if ( !$lb->waitForReplication() ) {
+ $this->logWarning( 'Continuing despite replication lag' );
+ }
+
+ // Ensure we are using the latest group definitions. This is needed so
+ // that in long running scripts we do see the page which was just
+ // marked for translation. Otherwise getMessageGroup in the next line
+ // returns null. There is no need to regenerate the global cache.
+ MessageGroups::singleton()->clearProcessCache();
+ // Ensure fresh definitions for stats
+ $page->getMessageGroup()->clearCaches();
+
+ $this->logInfo( 'Cleared caches' );
+
+ // Refresh translations statistics, we want these to be up to date for the
+ // RenderJobs, for displaying up to date statistics on the translation pages.
+ $id = $page->getMessageGroupId();
+ MessageGroupStats::forGroup(
+ $id,
+ MessageGroupStats::FLAG_NO_CACHE | MessageGroupStats::FLAG_IMMEDIATE_WRITES
+ );
+ $this->logInfo( 'Updated the message group stats' );
+
+ // Try to avoid stale statistics on the base page
+ $wikiPage = $mwServices->getWikiPageFactory()->newFromTitle( $page->getTitle() );
+ $wikiPage->doPurge();
+ $this->logInfo( 'Finished purging' );
+
+ // These can be run independently and in parallel if possible
+ $jobQueueGroup = $mwServices->getJobQueueGroup();
+ $renderJobs = self::getRenderJobs( $page );
+ $jobQueueGroup->push( $renderJobs );
+ $this->logInfo( 'Added ' . count( $renderJobs ) . ' RenderJobs to the queue' );
+
+ // Schedule message index update. Thanks to front caching, it is okay if this takes
+ // a while (and on large wikis it does take a while!). Running it as a separate job
+ // also allows de-duplication in case multiple translatable pages are being marked
+ // for translation in a short period of time.
+ $job = MessageIndexRebuildJob::newJob();
+ $jobQueueGroup->push( $job );
+
+ $this->logInfo( 'Finished UpdateTranslatablePageJob' );
+
+ return true;
+ }
+
+ /**
+ * Creates jobs needed to create or update all translation unit definition pages.
+ * @param TranslatablePage $page
+ * @param TranslationUnit[] $units
+ * @return RunnableJob[]
+ */
+ private static function getTranslationUnitJobs( TranslatablePage $page, array $units ): array {
+ $jobs = [];
+
+ $code = $page->getSourceLanguageCode();
+ $prefix = $page->getTitle()->getPrefixedText();
+
+ foreach ( $units as $unit ) {
+ $unitName = $unit->id;
+ $title = Title::makeTitle( NS_TRANSLATIONS, "$prefix/$unitName/$code" );
+
+ $fuzzy = $unit->type === 'changed';
+ $jobs[] = MessageUpdateJob::newJob( $title, $unit->getTextWithVariables(), $fuzzy );
+ }
+
+ return $jobs;
+ }
+
+ /**
+ * Creates jobs needed to create or update all translation pages.
+ * @return RunnableJob[]
+ */
+ public static function getRenderJobs( TranslatablePage $page ): array {
+ $jobs = [];
+
+ $jobTitles = $page->getTranslationPages();
+ // Ensure that we create the source language page when page is marked for translation.
+ $jobTitles[] = $page->getTitle()->getSubpage( $page->getSourceLanguageCode() );
+ // In some cases translation page may be missing even though translations exist. One such case
+ // is when FuzzyBot makes edits, which supresses render jobs. There may also be bugs with the
+ // render jobs failing. Add jobs based on message group stats to create self-healing process.
+ $stats = MessageGroupStats::forGroup( $page->getMessageGroupId() );
+ foreach ( $stats as $languageCode => $languageStats ) {
+ if ( $languageStats[MessageGroupStats::TRANSLATED] > 0 ) {
+ $jobTitles[] = $page->getTitle()->getSubpage( $languageCode );
+ }
+ }
+
+ // These jobs can be deduplicated by the job queue as well, but it's simple to do it here ourselves.
+ // Titles have __toString method that returns the prefixed text so array_unique should work.
+ $jobTitles = array_unique( $jobTitles );
+ foreach ( $jobTitles as $t ) {
+ $jobs[] = RenderTranslationPageJob::newJob( $t );
+ }
+
+ return $jobs;
+ }
+
+}
diff --git a/Translate/src/ServiceWiring.php b/Translate/src/ServiceWiring.php
new file mode 100644
index 00000000..b72a9bde
--- /dev/null
+++ b/Translate/src/ServiceWiring.php
@@ -0,0 +1,227 @@
+<?php
+/**
+ * List of services in this extension with construction instructions.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Config\ServiceOptions;
+use MediaWiki\Extension\Translate\Cache\PersistentCache;
+use MediaWiki\Extension\Translate\Cache\PersistentDatabaseCache;
+use MediaWiki\Extension\Translate\MessageBundleTranslation\MessageBundleStore;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\CsvTranslationImporter;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\MessageGroupReview;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\RevTagStore;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\SubpageListBuilder;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\TranslatableBundleFactory;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\TranslatableBundleStatusStore;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\TranslatablePageStore;
+use MediaWiki\Extension\Translate\PageTranslation\TranslatableBundleMover;
+use MediaWiki\Extension\Translate\PageTranslation\TranslatablePageParser;
+use MediaWiki\Extension\Translate\PageTranslation\TranslationUnitStoreFactory;
+use MediaWiki\Extension\Translate\Statistics\ProgressStatsTableFactory;
+use MediaWiki\Extension\Translate\Statistics\TranslationStatsDataProvider;
+use MediaWiki\Extension\Translate\Statistics\TranslatorActivity;
+use MediaWiki\Extension\Translate\Statistics\TranslatorActivityQuery;
+use MediaWiki\Extension\Translate\Synchronization\ExternalMessageSourceStateImporter;
+use MediaWiki\Extension\Translate\Synchronization\GroupSynchronizationCache;
+use MediaWiki\Extension\Translate\TranslatorInterface\EntitySearch;
+use MediaWiki\Extension\Translate\TranslatorSandbox\TranslationStashReader;
+use MediaWiki\Extension\Translate\TranslatorSandbox\TranslationStashStorage;
+use MediaWiki\Extension\Translate\TtmServer\TtmServerFactory;
+use MediaWiki\Extension\Translate\Utilities\ConfigHelper;
+use MediaWiki\Extension\Translate\Utilities\ParsingPlaceholderFactory;
+use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\MediaWikiServices;
+
+/** @phpcs-require-sorted-array */
+return [
+ 'Translate:ConfigHelper' => static function (): ConfigHelper {
+ return new ConfigHelper();
+ },
+
+ 'Translate:CsvTranslationImporter' => static function ( MediaWikiServices $services ): CsvTranslationImporter {
+ return new CsvTranslationImporter( $services->getWikiPageFactory() );
+ },
+
+ 'Translate:EntitySearch' => static function ( MediaWikiServices $services ): EntitySearch {
+ return new EntitySearch(
+ $services->getMainWANObjectCache(),
+ $services->getCollationFactory()->makeCollation( 'uca-default-u-kn' ),
+ MessageGroups::singleton(),
+ $services->getNamespaceInfo(),
+ $services->get( 'Translate:MessageIndex' ),
+ $services->getTitleParser(),
+ $services->getTitleFormatter()
+ );
+ },
+
+ 'Translate:ExternalMessageSourceStateImporter' => static function (
+ MediaWikiServices $services
+ ): ExternalMessageSourceStateImporter {
+ return new ExternalMessageSourceStateImporter(
+ $services->getMainConfig(),
+ $services->get( 'Translate:GroupSynchronizationCache' ),
+ $services->getJobQueueGroup(),
+ LoggerFactory::getInstance( 'Translate.GroupSynchronization' ),
+ $services->get( 'Translate:MessageIndex' )
+ );
+ },
+
+ 'Translate:GroupSynchronizationCache' => static function (
+ MediaWikiServices $services
+ ): GroupSynchronizationCache {
+ return new GroupSynchronizationCache( $services->get( 'Translate:PersistentCache' ) );
+ },
+
+ 'Translate:MessageBundleStore' => static function ( MediaWikiServices $services ): MessageBundleStore {
+ return new MessageBundleStore(
+ new RevTagStore(),
+ $services->getJobQueueGroup(),
+ $services->getLanguageNameUtils(),
+ $services->get( 'Translate:MessageIndex' )
+ );
+ },
+
+ 'Translate:MessageGroupReview' => static function ( MediaWikiServices $services ): MessageGroupReview {
+ return new MessageGroupReview(
+ $services->getDBLoadBalancer(),
+ $services->getHookContainer()
+ );
+ },
+
+ 'Translate:MessageIndex' => static function ( MediaWikiServices $services ): MessageIndex {
+ $params = $services->getMainConfig()->get( 'TranslateMessageIndex' );
+ if ( is_string( $params ) ) {
+ $params = (array)$params;
+ }
+
+ $class = array_shift( $params );
+ // @phan-suppress-next-line PhanTypeExpectedObjectOrClassName
+ return new $class( $params );
+ },
+
+ 'Translate:ParsingPlaceholderFactory' => static function (): ParsingPlaceholderFactory {
+ return new ParsingPlaceholderFactory();
+ },
+
+ 'Translate:PersistentCache' => static function ( MediaWikiServices $services ): PersistentCache {
+ return new PersistentDatabaseCache(
+ $services->getDBLoadBalancer(),
+ $services->getJsonCodec()
+ );
+ },
+
+ 'Translate:ProgressStatsTableFactory' => static function ( MediaWikiServices $services ): ProgressStatsTableFactory
+ {
+ return new ProgressStatsTableFactory(
+ $services->getLinkRenderer(),
+ $services->get( 'Translate:ConfigHelper' )
+ );
+ },
+
+ 'Translate:SubpageListBuilder' => static function ( MediaWikiServices $services ): SubpageListBuilder
+ {
+ return new SubpageListBuilder(
+ $services->get( 'Translate:TranslatableBundleFactory' ),
+ $services->getLinkBatchFactory()
+ );
+ },
+
+ 'Translate:TranslatableBundleFactory' => static function ( MediaWikiServices $services ): TranslatableBundleFactory
+ {
+ return new TranslatableBundleFactory(
+ $services->get( 'Translate:TranslatablePageStore' ),
+ $services->get( 'Translate:MessageBundleStore' )
+ );
+ },
+
+ 'Translate:TranslatableBundleMover' => static function ( MediaWikiServices $services ): TranslatableBundleMover
+ {
+ return new TranslatableBundleMover(
+ $services->getMovePageFactory(),
+ $services->getJobQueueGroup(),
+ $services->getLinkBatchFactory(),
+ $services->get( 'Translate:TranslatableBundleFactory' ),
+ $services->get( 'Translate:SubpageListBuilder' ),
+ $services->getMainConfig()->get( 'TranslatePageMoveLimit' )
+ );
+ },
+
+ 'Translate:TranslatableBundleStatusStore' =>
+ static function ( MediaWikiServices $services ): TranslatableBundleStatusStore {
+ return new TranslatableBundleStatusStore(
+ $services->getDBLoadBalancer()->getConnection( DB_PRIMARY ),
+ $services->getCollationFactory()->makeCollation( 'uca-default-u-kn' ),
+ $services->getDBLoadBalancer()->getMaintenanceConnectionRef( DB_PRIMARY )
+ );
+ },
+
+ 'Translate:TranslatablePageParser' => static function ( MediaWikiServices $services ): TranslatablePageParser
+ {
+ return new TranslatablePageParser(
+ $services->get( 'Translate:ParsingPlaceholderFactory' )
+ );
+ },
+
+ 'Translate:TranslatablePageStore' => static function ( MediaWikiServices $services ): TranslatablePageStore
+ {
+ return new TranslatablePageStore(
+ $services->get( 'Translate:MessageIndex' ),
+ $services->getJobQueueGroup(),
+ new RevTagStore(),
+ $services->getDBLoadBalancer(),
+ $services->get( 'Translate:TranslatableBundleStatusStore' )
+ );
+ },
+
+ 'Translate:TranslationStashReader' => static function ( MediaWikiServices $services ): TranslationStashReader
+ {
+ $db = $services->getDBLoadBalancer()->getConnectionRef( DB_REPLICA );
+ return new TranslationStashStorage( $db );
+ },
+
+ 'Translate:TranslationStatsDataProvider' => static function (
+ MediaWikiServices $services
+ ): TranslationStatsDataProvider {
+ return new TranslationStatsDataProvider(
+ new ServiceOptions(
+ TranslationStatsDataProvider::CONSTRUCTOR_OPTIONS,
+ $services->getMainConfig()
+ ),
+ $services->getObjectFactory()
+ );
+ },
+
+ 'Translate:TranslationUnitStoreFactory' => static function (
+ MediaWikiServices $services
+ ): TranslationUnitStoreFactory {
+ return new TranslationUnitStoreFactory( $services->getDBLoadBalancer() );
+ },
+
+ 'Translate:TranslatorActivity' => static function ( MediaWikiServices $services ): TranslatorActivity {
+ $query = new TranslatorActivityQuery(
+ $services->getMainConfig(),
+ $services->getDBLoadBalancer()
+ );
+
+ return new TranslatorActivity(
+ $services->getMainObjectStash(),
+ $query,
+ $services->getJobQueueGroup()
+ );
+ },
+
+ 'Translate:TtmServerFactory' => static function ( MediaWikiServices $services ): TtmServerFactory {
+ $config = $services->getMainConfig();
+
+ $default = $config->get( 'TranslateTranslationDefaultService' );
+ if ( $default === false ) {
+ $default = null;
+ }
+
+ return new TtmServerFactory( $config->get( 'TranslateTranslationServices' ), $default );
+ }
+];
diff --git a/Translate/src/Services.php b/Translate/src/Services.php
new file mode 100644
index 00000000..e5aaf130
--- /dev/null
+++ b/Translate/src/Services.php
@@ -0,0 +1,160 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate;
+
+use MediaWiki\Extension\Translate\Cache\PersistentCache;
+use MediaWiki\Extension\Translate\MessageBundleTranslation\MessageBundleStore;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\CsvTranslationImporter;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\MessageGroupReview;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\TranslatableBundleFactory;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\TranslatableBundleStatusStore;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\TranslatablePageStore;
+use MediaWiki\Extension\Translate\PageTranslation\TranslatableBundleMover;
+use MediaWiki\Extension\Translate\PageTranslation\TranslatablePageParser;
+use MediaWiki\Extension\Translate\PageTranslation\TranslationUnitStoreFactory;
+use MediaWiki\Extension\Translate\Statistics\ProgressStatsTableFactory;
+use MediaWiki\Extension\Translate\Statistics\TranslationStatsDataProvider;
+use MediaWiki\Extension\Translate\Statistics\TranslatorActivity;
+use MediaWiki\Extension\Translate\Synchronization\ExternalMessageSourceStateImporter;
+use MediaWiki\Extension\Translate\Synchronization\GroupSynchronizationCache;
+use MediaWiki\Extension\Translate\TranslatorInterface\EntitySearch;
+use MediaWiki\Extension\Translate\TranslatorSandbox\TranslationStashReader;
+use MediaWiki\Extension\Translate\TtmServer\TtmServerFactory;
+use MediaWiki\Extension\Translate\Utilities\ConfigHelper;
+use MediaWiki\Extension\Translate\Utilities\ParsingPlaceholderFactory;
+use MediaWiki\MediaWikiServices;
+use MessageIndex;
+use Psr\Container\ContainerInterface;
+
+/**
+ * Minimal service container.
+ *
+ * Main purpose is to give type-hinted getters for services defined in this extension.
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2020.04
+ */
+class Services implements ContainerInterface {
+ /** @var ContainerInterface */
+ private $container;
+
+ private function __construct( ContainerInterface $container ) {
+ $this->container = $container;
+ }
+
+ public static function getInstance(): Services {
+ return new self( MediaWikiServices::getInstance() );
+ }
+
+ /** @inheritDoc */
+ public function get( $id ) {
+ return $this->container->get( $id );
+ }
+
+ /** @inheritDoc */
+ public function has( $id ) {
+ return $this->container->has( $id );
+ }
+
+ public function getConfigHelper(): ConfigHelper {
+ return $this->get( 'Translate:ConfigHelper' );
+ }
+
+ /** @since 2022.06 */
+ public function getCsvTranslationImporter(): CsvTranslationImporter {
+ return $this->get( 'Translate:CsvTranslationImporter' );
+ }
+
+ /** @since 2021.10 */
+ public function getEntitySearch(): EntitySearch {
+ return $this->get( 'Translate:EntitySearch' );
+ }
+
+ public function getExternalMessageSourceStateImporter(): ExternalMessageSourceStateImporter {
+ return $this->get( 'Translate:ExternalMessageSourceStateImporter' );
+ }
+
+ public function getGroupSynchronizationCache(): GroupSynchronizationCache {
+ return $this->get( 'Translate:GroupSynchronizationCache' );
+ }
+
+ /** @since 2022.06 */
+ public function getMessageBundleStore(): MessageBundleStore {
+ return $this->get( 'Translate:MessageBundleStore' );
+ }
+
+ /** @since 2020.10 */
+ public function getMessageIndex(): MessageIndex {
+ return $this->get( 'Translate:MessageIndex' );
+ }
+
+ /** @since 2022.07 */
+ public function getMessageGroupReview(): MessageGroupReview {
+ return $this->get( 'Translate:MessageGroupReview' );
+ }
+
+ /** @since 2020.07 */
+ public function getParsingPlaceholderFactory(): ParsingPlaceholderFactory {
+ return $this->get( 'Translate:ParsingPlaceholderFactory' );
+ }
+
+ /** @since 2020.12 */
+ public function getPersistentCache(): PersistentCache {
+ return $this->get( 'Translate:PersistentCache' );
+ }
+
+ /** @since 2020.12 */
+ public function getProgressStatsTableFactory(): ProgressStatsTableFactory {
+ return $this->get( 'Translate:ProgressStatsTableFactory' );
+ }
+
+ /** @since 2022.03 */
+ public function getTranslatableBundleFactory(): TranslatableBundleFactory {
+ return $this->get( 'Translate:TranslatableBundleFactory' );
+ }
+
+ /** @since 2022.02 */
+ public function getTranslatableBundleMover(): TranslatableBundleMover {
+ return $this->get( 'Translate:TranslatableBundleMover' );
+ }
+
+ /** @since 2022.10 */
+ public function getTranslatableBundleStatusStore(): TranslatableBundleStatusStore {
+ return $this->get( 'Translate:TranslatableBundleStatusStore' );
+ }
+
+ public function getTranslatablePageParser(): TranslatablePageParser {
+ return $this->get( 'Translate:TranslatablePageParser' );
+ }
+
+ /** @since 2022.03 */
+ public function getTranslatablePageStore(): TranslatablePageStore {
+ return $this->get( 'Translate:TranslatablePageStore' );
+ }
+
+ /** @since 2020.11 */
+ public function getTranslationStashReader(): TranslationStashReader {
+ return $this->get( 'Translate:TranslationStashReader' );
+ }
+
+ /** @since 2020.09 */
+ public function getTranslationStatsDataProvider(): TranslationStatsDataProvider {
+ return $this->get( 'Translate:TranslationStatsDataProvider' );
+ }
+
+ /** @since 2021.05 */
+ public function getTranslationUnitStoreFactory(): TranslationUnitStoreFactory {
+ return $this->get( 'Translate:TranslationUnitStoreFactory' );
+ }
+
+ public function getTranslatorActivity(): TranslatorActivity {
+ return $this->get( 'Translate:TranslatorActivity' );
+ }
+
+ /** @since 2021.01 */
+ public function getTtmServerFactory(): TtmServerFactory {
+ return $this->get( 'Translate:TtmServerFactory' );
+ }
+}
diff --git a/Translate/src/Statistics/ActiveLanguagesSpecialPage.php b/Translate/src/Statistics/ActiveLanguagesSpecialPage.php
new file mode 100644
index 00000000..4b40fdd9
--- /dev/null
+++ b/Translate/src/Statistics/ActiveLanguagesSpecialPage.php
@@ -0,0 +1,382 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Statistics;
+
+use Config;
+use Html;
+use HtmlArmor;
+use InvalidArgumentException;
+use Language;
+use LanguageCode;
+use LinkBatch;
+use MediaWiki\Config\ServiceOptions;
+use MediaWiki\Extension\Translate\Utilities\ConfigHelper;
+use MediaWiki\Languages\LanguageNameUtils;
+use MediaWiki\Logger\LoggerFactory;
+use ObjectCache;
+use SpecialPage;
+use Title;
+use Wikimedia\Rdbms\ILoadBalancer;
+
+/**
+ * This special page shows active languages and active translators per language.
+ *
+ * @author Niklas Laxström
+ * @author Siebrand Mazeland
+ * @license GPL-2.0-or-later
+ * @ingroup SpecialPage TranslateSpecialPage Stats
+ */
+class ActiveLanguagesSpecialPage extends SpecialPage {
+ /** @var ServiceOptions */
+ private $options;
+ /** @var TranslatorActivity */
+ private $translatorActivity;
+ /** @var LanguageNameUtils */
+ private $langNameUtils;
+ /** @var ILoadBalancer */
+ private $loadBalancer;
+ /** @var ConfigHelper */
+ private $configHelper;
+ /** @var Language */
+ private $contentLanguage;
+ /** @var ProgressStatsTableFactory */
+ private $progressStatsTableFactory;
+ /** @var StatsTable */
+ private $progressStatsTable;
+ /** @var int Cutoff time for inactivity in days */
+ private $period = 180;
+
+ public const CONSTRUCTOR_OPTIONS = [
+ 'TranslateMessageNamespaces',
+ ];
+
+ public function __construct(
+ Config $config,
+ TranslatorActivity $translatorActivity,
+ LanguageNameUtils $langNameUtils,
+ ILoadBalancer $loadBalancer,
+ ConfigHelper $configHelper,
+ Language $contentLanguage,
+ ProgressStatsTableFactory $progressStatsTableFactory
+ ) {
+ parent::__construct( 'SupportedLanguages' );
+ $this->options = new ServiceOptions( self::CONSTRUCTOR_OPTIONS, $config );
+ $this->translatorActivity = $translatorActivity;
+ $this->langNameUtils = $langNameUtils;
+ $this->loadBalancer = $loadBalancer;
+ $this->configHelper = $configHelper;
+ $this->contentLanguage = $contentLanguage;
+ $this->progressStatsTableFactory = $progressStatsTableFactory;
+ }
+
+ protected function getGroupName() {
+ return 'translation';
+ }
+
+ public function getDescription() {
+ return $this->msg( 'supportedlanguages' )->text();
+ }
+
+ public function execute( $par ) {
+ $out = $this->getOutput();
+ $lang = $this->getLanguage();
+ $this->progressStatsTable = $this->progressStatsTableFactory->newFromContext( $this->getContext() );
+
+ $this->setHeaders();
+ $out->addModuleStyles( 'ext.translate.specialpages.styles' );
+
+ $out->addHelpLink(
+ 'Help:Extension:Translate/Statistics_and_reporting#List_of_languages_and_translators'
+ );
+
+ $this->outputHeader( 'supportedlanguages-summary' );
+ $dbr = $this->loadBalancer->getConnectionRef( DB_REPLICA );
+ $dbType = $dbr->getType();
+ if ( $dbType === 'sqlite' || $dbType === 'postgres' ) {
+ $out->addHTML(
+ Html::errorBox(
+ // Messages used: supportedlanguages-sqlite-error, supportedlanguages-postgres-error
+ $out->msg( 'supportedlanguages-' . $dbType . '-error' )->parse()
+ )
+ );
+ return;
+ }
+
+ $out->addWikiMsg( 'supportedlanguages-localsummary' );
+
+ $names = $this->langNameUtils->getLanguageNames( null, 'all' );
+ $languages = $this->languageCloud();
+ // There might be all sorts of subpages which are not languages
+ $languages = array_intersect_key( $languages, $names );
+
+ $this->outputLanguageCloud( $languages, $names );
+ $out->addWikiMsg( 'supportedlanguages-count', $lang->formatNum( count( $languages ) ) );
+
+ if ( !$par ) {
+ return;
+ }
+
+ // Convert formatted language tag like zh-Hant to internal format like zh-hant
+ $language = strtolower( $par );
+ try {
+ $data = $this->translatorActivity->inLanguage( $language );
+ } catch ( StatisticsUnavailable $e ) {
+ // generic-pool-error is from MW core
+ $out->addHTML( Html::errorBox( $this->msg( 'generic-pool-error' )->parse() ) );
+ return;
+ } catch ( InvalidArgumentException $e ) {
+ $errorMessageHtml = $this->msg( 'translate-activelanguages-invalid-code' )
+ ->params( LanguageCode::bcp47( $language ) )
+ ->parse();
+ $out->addHTML( Html::errorBox( $errorMessageHtml ) );
+ return;
+ }
+
+ $users = $data['users'];
+ $users = $this->filterUsers( $users, $language );
+ $this->preQueryUsers( $users );
+ $this->showLanguage( $language, $users, (int)$data['asOfTime'] );
+ }
+
+ private function showLanguage( string $code, array $users, int $cachedAt ): void {
+ $out = $this->getOutput();
+ $lang = $this->getLanguage();
+ $bcp47Code = LanguageCode::bcp47( $code );
+
+ // Information to be used inside the foreach loop.
+ $linkInfo = [];
+ $linkInfo['rc']['title'] = SpecialPage::getTitleFor( 'Recentchanges' );
+ $linkInfo['rc']['msg'] = $this->msg( 'supportedlanguages-recenttranslations' )->text();
+ $linkInfo['stats']['title'] = SpecialPage::getTitleFor( 'LanguageStats' );
+ $linkInfo['stats']['msg'] = $this->msg( 'languagestats' )->text();
+
+ $local = $this->langNameUtils->getLanguageName( $code, $lang->getCode(), 'all' );
+ $native = $this->langNameUtils->getLanguageName( $code, null, 'all' );
+
+ if ( $local !== $native ) {
+
+ $headerText = $this->msg( 'supportedlanguages-portallink' )
+ ->params( $bcp47Code, $local, $native )->escaped();
+ } else {
+ // No CLDR, so a less localised header and link title.
+ $headerText = $this->msg( 'supportedlanguages-portallink-nocldr' )
+ ->params( $bcp47Code, $native )->escaped();
+ }
+
+ $out->addHTML( Html::rawElement( 'h2', [ 'id' => $code ], $headerText ) );
+
+ // Add useful links for language stats and recent changes for the language.
+ $links = [];
+ $links[] = $this->getLinkRenderer()->makeKnownLink(
+ $linkInfo['stats']['title'],
+ $linkInfo['stats']['msg'],
+ [],
+ [
+ 'code' => $code,
+ 'suppresscomplete' => '1'
+ ]
+ );
+ $links[] = $this->getLinkRenderer()->makeKnownLink(
+ $linkInfo['rc']['title'],
+ $linkInfo['rc']['msg'],
+ [],
+ [
+ 'translations' => 'only',
+ 'trailer' => '/' . $code
+ ]
+ );
+ $linkList = $lang->listToText( $links );
+
+ $out->addHTML( '<p>' . $linkList . "</p>\n" );
+ $this->makeUserList( $users );
+
+ $ageString = $this->getLanguage()->formatTimePeriod(
+ time() - $cachedAt,
+ [ 'noabbrevs' => true, 'avoid' => 'avoidseconds' ]
+ );
+ $out->addWikiMsg( 'supportedlanguages-colorlegend', $this->getColorLegend() );
+ $out->addWikiMsg( 'translate-supportedlanguages-cached', $ageString );
+ }
+
+ private function languageCloud(): array {
+ // TODO: Inject a factory when such a thing is available in MediaWiki core
+ $cache = ObjectCache::getInstance( CACHE_ANYTHING );
+ $cachekey = $cache->makeKey( 'translate-supportedlanguages-language-cloud', 'v2' );
+
+ $data = $cache->get( $cachekey );
+ if ( is_array( $data ) ) {
+ return $data;
+ }
+
+ $dbr = $this->loadBalancer->getConnectionRef( DB_REPLICA );
+ $tables = [ 'recentchanges' ];
+ $fields = [ 'substring_index(rc_title, \'/\', -1) as lang', 'count(*) as count' ];
+ $timestamp = $dbr->timestamp( wfTimestamp( TS_UNIX ) - 60 * 60 * 24 * $this->period );
+ $conds = [
+ 'rc_timestamp > ' . $dbr->addQuotes( $timestamp ),
+ 'rc_namespace' => $this->options->get( 'TranslateMessageNamespaces' ),
+ 'rc_title' . $dbr->buildLike( $dbr->anyString(), '/', $dbr->anyString() ),
+ ];
+ $options = [ 'GROUP BY' => 'lang', 'HAVING' => 'count > 20', 'ORDER BY' => 'NULL' ];
+
+ $res = $dbr->select( $tables, $fields, $conds, __METHOD__, $options );
+
+ $data = [];
+ foreach ( $res as $row ) {
+ $data[$row->lang] = (int)$row->count;
+ }
+
+ $cache->set( $cachekey, $data, 3600 );
+
+ return $data;
+ }
+
+ protected function filterUsers( array $users, string $code ): array {
+ foreach ( $users as $index => $user ) {
+ $username = $user[TranslatorActivityQuery::USER_NAME];
+ // We do not know the group
+ if ( $this->configHelper->isAuthorExcluded( '#', $code, $username ) ) {
+ unset( $users[$index] );
+ }
+ }
+
+ return $users;
+ }
+
+ protected function outputLanguageCloud( array $languages, array $names ) {
+ global $wgTranslateDocumentationLanguageCode;
+
+ $out = $this->getOutput();
+
+ $out->addHTML( '<div class="tagcloud autonym">' );
+
+ foreach ( $languages as $k => $v ) {
+ $name = $names[$k];
+ $langAttribute = $k;
+ $size = round( log( $v ) * 20 ) + 10;
+
+ if ( $langAttribute === $wgTranslateDocumentationLanguageCode ) {
+ $langAttribute = $this->contentLanguage->getHtmlCode();
+ }
+
+ $params = [
+ 'href' => $this->getPageTitle( $k )->getLocalURL(),
+ 'class' => 'tag',
+ 'style' => "font-size:$size%",
+ 'lang' => $langAttribute,
+ ];
+
+ $tag = Html::element( 'a', $params, $name );
+ $out->addHTML( $tag . "\n" );
+ }
+ $out->addHTML( '</div>' );
+ }
+
+ private function makeUserList( array $userStats ): void {
+ $day = 60 * 60 * 24;
+
+ // Scale of the activity colors, anything
+ // longer than this is just inactive
+ $period = $this->period;
+
+ $links = [];
+ // List users in descending order by number of translations in this language
+ usort( $userStats, static function ( $a, $b ) {
+ return -(
+ $a[TranslatorActivityQuery::USER_TRANSLATIONS]
+ <=>
+ $b[TranslatorActivityQuery::USER_TRANSLATIONS]
+ );
+ } );
+
+ foreach ( $userStats as $stats ) {
+ $username = $stats[TranslatorActivityQuery::USER_NAME];
+ $title = Title::makeTitleSafe( NS_USER, $username );
+ if ( !$title ) {
+ LoggerFactory::getInstance( 'Translate' )->warning(
+ "T248125: Got Title-invalid username '{username}'",
+ [ 'username' => $username ]
+ );
+ continue;
+ }
+
+ $count = $stats[TranslatorActivityQuery::USER_TRANSLATIONS];
+ $lastTranslationTimestamp = $stats[TranslatorActivityQuery::USER_LAST_ACTIVITY];
+
+ $enc = htmlspecialchars( $username );
+
+ $attribs = [];
+ $styles = [];
+ $styles['font-size'] = round( log( $count, 10 ) * 30 ) + 70 . '%';
+
+ $last = wfTimestamp( TS_UNIX ) - wfTimestamp( TS_UNIX, $lastTranslationTimestamp );
+ $last = round( $last / $day );
+ $attribs['title'] =
+ $this->msg( 'supportedlanguages-activity', $username )
+ ->numParams( $count, $last )
+ ->text();
+ $last = max( 1, min( $period, $last ) );
+ $styles['border-bottom'] =
+ '3px solid #' . $this->progressStatsTable->getBackgroundColor( ( $period - $last ) / $period );
+
+ $stylestr = $this->formatStyle( $styles );
+ if ( $stylestr ) {
+ $attribs['style'] = $stylestr;
+ }
+
+ $links[] =
+ $this->getLinkRenderer()->makeLink( $title, new HtmlArmor( $enc ), $attribs );
+ }
+
+ // for GENDER support
+ $usernameForGender = '';
+ if ( count( $userStats ) === 1 ) {
+ $usernameForGender = $userStats[0][TranslatorActivityQuery::USER_NAME];
+ }
+
+ $linkList = $this->getLanguage()->listToText( $links );
+ $html = "<p class='mw-translate-spsl-translators'>";
+ $html .= $this->msg( 'supportedlanguages-translators' )
+ ->rawParams( $linkList )
+ ->numParams( count( $links ) )
+ ->params( $usernameForGender )
+ ->escaped();
+ $html .= "</p>\n";
+ $this->getOutput()->addHTML( $html );
+ }
+
+ protected function formatStyle( $styles ) {
+ $stylestr = '';
+ foreach ( $styles as $key => $value ) {
+ $stylestr .= "$key:$value;";
+ }
+
+ return $stylestr;
+ }
+
+ protected function preQueryUsers( array $users ): void {
+ $lb = new LinkBatch();
+ foreach ( $users as $data ) {
+ $username = $data[TranslatorActivityQuery::USER_NAME];
+ $user = Title::capitalize( $username, NS_USER );
+ $lb->add( NS_USER, $user );
+ $lb->add( NS_USER_TALK, $user );
+ }
+ $lb->execute();
+ }
+
+ protected function getColorLegend() {
+ $legend = '';
+ $period = $this->period;
+
+ for ( $i = 0; $i <= $period; $i += 30 ) {
+ $iFormatted = htmlspecialchars( $this->getLanguage()->formatNum( $i ) );
+ $legend .= '<span style="background-color:#' .
+ $this->progressStatsTable->getBackgroundColor( ( $period - $i ) / $period ) .
+ "\"> $iFormatted</span>";
+ }
+
+ return $legend;
+ }
+}
diff --git a/Translate/src/Statistics/CleanupTranslationProgressStatsMaintenanceScript.php b/Translate/src/Statistics/CleanupTranslationProgressStatsMaintenanceScript.php
new file mode 100644
index 00000000..be378e9f
--- /dev/null
+++ b/Translate/src/Statistics/CleanupTranslationProgressStatsMaintenanceScript.php
@@ -0,0 +1,85 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Statistics;
+
+use Maintenance;
+use MediaWiki\MediaWikiServices;
+use MessageGroups;
+use MessageGroupStats;
+use RawMessage;
+use TranslateUtils;
+use const DB_PRIMARY;
+
+/**
+ * @since 2021.03
+ * @license GPL-2.0-or-later
+ * @author Niklas Laxström
+ */
+class CleanupTranslationProgressStatsMaintenanceScript extends Maintenance {
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Remove obsolete entries from translate_groupstats table' );
+ $this->requireExtension( 'Translate' );
+ }
+
+ public function execute() {
+ $services = MediaWikiServices::getInstance();
+ $db = $services->getDBLoadBalancer()->getConnectionRef( DB_PRIMARY );
+
+ $dbGroupIds = $db->selectFieldValues(
+ 'translate_groupstats',
+ 'DISTINCT(tgs_group)',
+ '*',
+ __METHOD__
+ );
+ $knownGroupIds = array_map(
+ [ MessageGroupStats::class, 'getDatabaseIdForGroupId' ],
+ array_keys( MessageGroups::singleton()->getGroups() )
+ );
+ $unknownGroupIds = array_diff( $dbGroupIds, $knownGroupIds );
+
+ if ( $unknownGroupIds !== [] ) {
+ $msg = ( new RawMessage( "Removing rows for $1 unknown group{{PLURAL:$1||s}}:\n" ) )
+ ->numParams( count( $unknownGroupIds ) )
+ ->inLanguage( 'en' )
+ ->text();
+ $this->output( $msg );
+ foreach ( $unknownGroupIds as $id ) {
+ $this->output( "* $id\n" );
+ }
+ $db->delete(
+ 'translate_groupstats',
+ [ 'tgs_group' => $unknownGroupIds ],
+ __METHOD__
+ );
+ }
+
+ $dbLanguages = $db->selectFieldValues(
+ 'translate_groupstats',
+ 'DISTINCT(tgs_lang)',
+ '*',
+ __METHOD__
+ );
+ $knownLanguages = array_keys( TranslateUtils::getLanguageNames( 'en' ) );
+ $unknownLanguages = array_diff( $dbLanguages, $knownLanguages );
+
+ if ( $unknownLanguages !== [] ) {
+ $msg = ( new RawMessage( "Removing rows for $1 unknown language{{PLURAL:$1||s}}:\n" ) )
+ ->numParams( count( $unknownLanguages ) )
+ ->inLanguage( 'en' )
+ ->text();
+ $this->output( $msg );
+ foreach ( $unknownLanguages as $languageCode ) {
+ $this->output( "* $languageCode\n" );
+ }
+ $db->delete(
+ 'translate_groupstats',
+ [ 'tgs_lang' => $unknownLanguages ],
+ __METHOD__
+ );
+ }
+
+ $this->output( "Done.\n" );
+ }
+}
diff --git a/Translate/src/Statistics/LanguageStatsSpecialPage.php b/Translate/src/Statistics/LanguageStatsSpecialPage.php
new file mode 100644
index 00000000..d8f45eee
--- /dev/null
+++ b/Translate/src/Statistics/LanguageStatsSpecialPage.php
@@ -0,0 +1,526 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Statistics;
+
+use AggregateMessageGroup;
+use DeferredUpdates;
+use DerivativeContext;
+use Html;
+use HTMLForm;
+use IContextSource;
+use JobQueueGroup;
+use MediaWiki\Cache\LinkBatchFactory;
+use Mediawiki\Languages\LanguageNameUtils;
+use MessageGroup;
+use MessageGroups;
+use MessageGroupStats;
+use MessageGroupStatsRebuildJob;
+use ObjectCache;
+use SpecialPage;
+use TranslateUtils;
+use Wikimedia\Rdbms\ILoadBalancer;
+use WikiPageMessageGroup;
+
+/**
+ * Implements includable special page Special:LanguageStats which provides
+ * translation statistics for all defined message groups.
+ *
+ * Loosely based on the statistics code in phase3/maintenance/language
+ *
+ * Use {{Special:LanguageStats/nl/1}} to show for 'nl' and suppress completely
+ * translated groups.
+ *
+ * @author Siebrand Mazeland
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @ingroup SpecialPage TranslateSpecialPage Stats
+ */
+class LanguageStatsSpecialPage extends SpecialPage {
+ /** @var LanguageNameUtils */
+ private $languageNameUtils;
+ /** @var StatsTable */
+ private $table;
+ /** @var array */
+ private $targetValueName = [ 'code', 'language' ];
+ /** Most of the displayed numbers added together at the bottom of the table. */
+ private $totals;
+ /**
+ * Flag to set if nothing to show.
+ * @var bool
+ */
+ private $nothing = false;
+ /**
+ * Flag to set if not all numbers are available.
+ * @var bool
+ */
+ private $incomplete = false;
+ /**
+ * Whether to hide rows which are fully translated.
+ * @var bool
+ */
+ private $noComplete = true;
+ /**
+ * Whether to hide rows which are fully untranslated.
+ * @var bool
+ */
+ private $noEmpty = false;
+ /** The target of stats, language code or group id. */
+ private $target;
+ /**
+ * Whether to regenerate stats. Activated by action=purge in query params.
+ * @var bool
+ */
+ private $purge;
+ /**
+ * Helper variable to avoid overcounting message groups that appear
+ * multiple times in the list with different parents. Aggregate message
+ * group stats are always excluded from totals.
+ * @var array
+ */
+ private $statsCounted = [];
+ /** @var array */
+ private $states;
+ /** @var LinkBatchFactory */
+ private $linkBatchFactory;
+ /** @var ProgressStatsTableFactory */
+ private $progressStatsTableFactory;
+ /** @var JobQueueGroup */
+ private $jobQueueGroup;
+ /** @var ILoadBalancer */
+ private $loadBalancer;
+
+ public function __construct(
+ LinkBatchFactory $linkBatchFactory,
+ ProgressStatsTableFactory $progressStatsTableFactory,
+ LanguageNameUtils $languageNameUtils,
+ JobQueueGroup $jobQueueGroup,
+ ILoadBalancer $loadBalancer
+ ) {
+ parent::__construct( 'LanguageStats' );
+ $this->totals = MessageGroupStats::getEmptyStats();
+ $this->linkBatchFactory = $linkBatchFactory;
+ $this->progressStatsTableFactory = $progressStatsTableFactory;
+ $this->languageNameUtils = $languageNameUtils;
+ $this->jobQueueGroup = $jobQueueGroup;
+ $this->loadBalancer = $loadBalancer;
+ }
+
+ public function isIncludable() {
+ return true;
+ }
+
+ protected function getGroupName() {
+ return 'translation';
+ }
+
+ public function execute( $par ) {
+ $this->target = $this->getLanguage()->getCode();
+ $request = $this->getRequest();
+
+ $this->purge = $request->getVal( 'action' ) === 'purge';
+ if ( $this->purge && !$request->wasPosted() ) {
+ self::showPurgeForm( $this->getContext() );
+ return;
+ }
+
+ $this->table = $this->progressStatsTableFactory->newFromContext( $this->getContext() );
+
+ $this->setHeaders();
+ $this->outputHeader();
+
+ $out = $this->getOutput();
+
+ $out->addModules( 'ext.translate.special.languagestats' );
+ $out->addModuleStyles( 'ext.translate.statstable' );
+
+ $params = $par ? explode( '/', $par ) : [];
+
+ if ( isset( $params[0] ) && trim( $params[0] ) ) {
+ $this->target = $params[0];
+ }
+
+ if ( isset( $params[1] ) ) {
+ $this->noComplete = (bool)$params[1];
+ }
+
+ if ( isset( $params[2] ) ) {
+ $this->noEmpty = (bool)$params[2];
+ }
+
+ // Whether the form has been submitted, only relevant if not including
+ $submitted = !$this->including() && $request->getVal( 'x' ) === 'D';
+
+ // Default booleans to false if the form was submitted
+ foreach ( $this->targetValueName as $key ) {
+ $this->target = $request->getVal( $key, $this->target );
+ }
+ $this->noComplete = $request->getBool(
+ 'suppresscomplete',
+ $this->noComplete && !$submitted
+ );
+ $this->noEmpty = $request->getBool( 'suppressempty', $this->noEmpty && !$submitted );
+
+ if ( !$this->including() ) {
+ $out->addHelpLink( 'Help:Extension:Translate/Statistics_and_reporting' );
+ $this->addForm();
+ }
+
+ if ( $this->isValidValue( $this->target ) ) {
+ $this->outputIntroduction();
+
+ $stats = $this->loadStatistics( $this->target, MessageGroupStats::FLAG_CACHE_ONLY );
+ $output = $this->getTable( $stats );
+ if ( $this->incomplete ) {
+ $out->wrapWikiMsg(
+ "<div class='error'>$1</div>",
+ 'translate-langstats-incomplete'
+ );
+ }
+
+ if ( $this->incomplete || $this->purge ) {
+ DeferredUpdates::addCallableUpdate( function () {
+ // Attempt to recache on the fly the missing stats, unless a
+ // purge was requested, because that is likely to time out.
+ // Even though this is executed inside a deferred update, it
+ // counts towards the maximum execution time limit. If that is
+ // reached, or any other failure happens, no updates at all
+ // will be written into the database, as it does only single
+ // update at the end. Hence we always add a job too, so that
+ // even the slower updates will get done at some point. In
+ // regular case (no purge), the job sees that the stats are
+ // already updated, so it is not much of an overhead.
+ $jobParams = $this->getCacheRebuildJobParameters( $this->target );
+ $jobParams[ 'purge' ] = $this->purge;
+ $this->jobQueueGroup->push( MessageGroupStatsRebuildJob::newJob( $jobParams ) );
+
+ // $this->purge is only true if request was posted
+ if ( !$this->purge ) {
+ $this->loadStatistics( $this->target );
+ }
+ } );
+ }
+ if ( $this->nothing ) {
+ $out->wrapWikiMsg( "<div class='error'>$1</div>", 'translate-mgs-nothing' );
+ }
+ $out->addHTML( $output );
+ } elseif ( $submitted ) {
+ $this->invalidTarget();
+ }
+ }
+
+ /**
+ * Get stats.
+ * @param string $target For which target to get stats
+ * @param int $flags See MessageGroupStats for possible flags
+ * @return array[]
+ */
+ private function loadStatistics( string $target, int $flags = 0 ): array {
+ return MessageGroupStats::forLanguage( $target, $flags );
+ }
+
+ private function getCacheRebuildJobParameters( $target ): array {
+ return [ 'languagecode' => $target ];
+ }
+
+ /** Return true if language exist in the list of allowed languages or false otherwise. */
+ private function isValidValue( string $value ): bool {
+ $langs = $this->languageNameUtils->getLanguageNames();
+
+ return isset( $langs[$value] );
+ }
+
+ /** Called when the target is unknown. */
+ private function invalidTarget(): void {
+ $this->getOutput()->wrapWikiMsg(
+ "<div class='error'>$1</div>",
+ 'translate-page-no-such-language'
+ );
+ }
+
+ public static function showPurgeForm( IContextSource $context ): void {
+ $formDescriptor = [
+ 'intro' => [
+ 'type' => 'info',
+ 'vertical-label' => true,
+ 'raw' => true,
+ 'default' => $context->msg( 'confirm-purge-top' )->parse()
+ ],
+ ];
+
+ $derivativeContext = new DerivativeContext( $context );
+ $requestValues = $derivativeContext->getRequest()->getQueryValues();
+
+ HTMLForm::factory( 'ooui', $formDescriptor, $derivativeContext )
+ ->setWrapperLegendMsg( 'confirm-purge-title' )
+ ->setSubmitTextMsg( 'confirm_purge_button' )
+ ->addHiddenFields( $requestValues )
+ ->show();
+ }
+
+ /** HTMLForm for the top form rendering. */
+ private function addForm(): void {
+ $formDescriptor = [
+ 'language' => [
+ 'type' => 'text',
+ 'name' => 'language',
+ 'id' => 'language',
+ 'label' => $this->msg( 'translate-language-code-field-name' )->text(),
+ 'size' => 10,
+ 'default' => $this->target,
+ ],
+ 'suppresscomplete' => [
+ 'type' => 'check',
+ 'label' => $this->msg( 'translate-suppress-complete' )->text(),
+ 'name' => 'suppresscomplete',
+ 'id' => 'suppresscomplete',
+ 'default' => $this->noComplete,
+ ],
+ 'suppressempty' => [
+ 'type' => 'check',
+ 'label' => $this->msg( 'translate-ls-noempty' )->text(),
+ 'name' => 'suppressempty',
+ 'id' => 'suppressempty',
+ 'default' => $this->noEmpty,
+ ],
+ ];
+
+ $context = new DerivativeContext( $this->getContext() );
+ $context->setTitle( $this->getPageTitle() ); // Remove subpage
+
+ $htmlForm = HtmlForm::factory( 'ooui', $formDescriptor, $context );
+
+ /* Since these pages are in the tabgroup with Special:Translate,
+ * it makes sense to retain the selected group/language parameter
+ * on post requests even when not relevant to the current page. */
+ $val = $this->getRequest()->getVal( 'group' );
+ if ( $val !== null ) {
+ $htmlForm->addHiddenField( 'group', $val );
+ }
+
+ $htmlForm
+ ->addHiddenField( 'x', 'D' ) // To detect submission
+ ->setMethod( 'get' )
+ ->setSubmitTextMsg( 'translate-ls-submit' )
+ ->setWrapperLegendMsg( 'translate-mgs-fieldset' )
+ ->prepareForm()
+ ->displayForm( false );
+ }
+
+ /** Output something helpful to guide the confused user. */
+ private function outputIntroduction(): void {
+ $languageName = TranslateUtils::getLanguageName(
+ $this->target,
+ $this->getLanguage()->getCode()
+ );
+
+ $rcInLangLink = $this->getLinkRenderer()->makeKnownLink(
+ SpecialPage::getTitleFor( 'Translate', '!recent' ),
+ $this->msg( 'languagestats-recenttranslations' )->text(),
+ [],
+ [
+ 'action' => 'proofread',
+ 'language' => $this->target
+ ]
+ );
+
+ $out = $this->msg( 'languagestats-stats-for', $languageName )->rawParams( $rcInLangLink )
+ ->parseAsBlock();
+ $this->getOutput()->addHTML( $out );
+ }
+
+ /** If workflow states are configured, adds a workflow states column */
+ private function addWorkflowStatesColumn(): void {
+ global $wgTranslateWorkflowStates;
+
+ if ( $wgTranslateWorkflowStates ) {
+ $this->states = $this->getWorkflowStates();
+
+ // An array where keys are state names and values are numbers
+ $this->table->addExtraColumn( $this->msg( 'translate-stats-workflow' ) );
+ }
+ }
+
+ private function getWorkflowStateCell( string $messageGroupId ): string {
+ // This will be set by addWorkflowStatesColumn if needed
+ if ( !isset( $this->states ) ) {
+ return '';
+ }
+
+ return $this->table->makeWorkflowStateCell(
+ $this->states[$messageGroupId] ?? null,
+ MessageGroups::getGroup( $messageGroupId ),
+ $this->target
+ );
+ }
+
+ private function getTable( array $stats ): string {
+ $table = $this->table;
+
+ $this->addWorkflowStatesColumn();
+ $out = '';
+
+ // This avoids a database query per translatable page, which would be caused by
+ // $group->getSourceLanguage() in $this->getWorkflowStateCell without preloading
+ $lb = $this->linkBatchFactory->newLinkBatch();
+ foreach ( MessageGroups::getAllGroups() as $group ) {
+ if ( $group instanceof WikiPageMessageGroup ) {
+ $lb->addObj( $group->getTitle() );
+ }
+ }
+ $lb->setCaller( __METHOD__ )->execute();
+
+ $structure = MessageGroups::getGroupStructure();
+ foreach ( $structure as $item ) {
+ $out .= $this->makeGroupGroup( $item, $stats );
+ }
+
+ if ( $out ) {
+ $table->setMainColumnHeader( $this->msg( 'translate-ls-column-group' ) );
+ $out = $table->createHeader() . "\n" . $out;
+ $out .= Html::closeElement( 'tbody' );
+
+ $out .= Html::openElement( 'tfoot' );
+ $out .= $table->makeTotalRow(
+ $this->msg( 'translate-languagestats-overall' ),
+ $this->totals
+ );
+ $out .= Html::closeElement( 'tfoot' );
+
+ $out .= Html::closeElement( 'table' );
+
+ return $out;
+ } else {
+ $this->nothing = true;
+
+ return '';
+ }
+ }
+
+ /**
+ * Creates a html table row for given (top-level) message group.
+ * If $item is an array, meaning that the first group is an
+ * AggregateMessageGroup and the latter are its children, it will recurse
+ * and create rows for them too.
+ * @param MessageGroup|MessageGroup[] $item
+ * @param array $cache Cache as returned by MessageGroupStats::forLanguage
+ * @param MessageGroup|null $parent MessageGroup (do not use, used internally only)
+ */
+ private function makeGroupGroup( $item, array $cache, MessageGroup $parent = null ): string {
+ if ( !is_array( $item ) ) {
+ return $this->makeGroupRow( $item, $cache, $parent );
+ }
+
+ // The first group in the array is the parent AggregateMessageGroup
+ $out = '';
+ $top = array_shift( $item );
+ $out .= $this->makeGroupRow( $top, $cache, $parent );
+
+ // Rest are children
+ foreach ( $item as $subgroup ) {
+ $out .= $this->makeGroupGroup( $subgroup, $cache, $top );
+ }
+
+ return $out;
+ }
+
+ /**
+ * Actually creates the table for single message group, unless it
+ * is in the exclusion list or hidden by filters.
+ */
+ private function makeGroupRow(
+ MessageGroup $group,
+ array $cache,
+ MessageGroup $parent = null
+ ): string {
+ $groupId = $group->getId();
+
+ if ( $this->table->isExcluded( $groupId, $this->target ) ) {
+ return '';
+ }
+
+ $stats = $cache[$groupId];
+ $total = $stats[MessageGroupStats::TOTAL];
+ $translated = $stats[MessageGroupStats::TRANSLATED];
+ $fuzzy = $stats[MessageGroupStats::FUZZY];
+
+ // Quick checks to see whether filters apply
+ if ( $this->noComplete && $fuzzy === 0 && $translated === $total ) {
+ return '';
+ }
+ if ( $this->noEmpty && $translated === 0 && $fuzzy === 0 ) {
+ return '';
+ }
+
+ if ( $total === null ) {
+ $this->incomplete = true;
+ }
+
+ // Calculation of summary row values
+ if ( !$group instanceof AggregateMessageGroup &&
+ !isset( $this->statsCounted[$groupId] )
+ ) {
+ $this->totals = MessageGroupStats::multiAdd( $this->totals, $stats );
+ $this->statsCounted[$groupId] = true;
+ }
+
+ // Place any state checks like $this->incomplete above this
+ $params = $stats;
+ $params[] = $this->states[$groupId] ?? '';
+ $params[] = md5( $groupId );
+ $params[] = $this->getLanguage()->getCode();
+ $params[] = md5( $this->target );
+ $params[] = $parent ? $parent->getId() : '!';
+
+ $cache = ObjectCache::getInstance( CACHE_ANYTHING );
+
+ return $cache->getWithSetCallback(
+ $cache->makeKey( __METHOD__ . '-v3', implode( '-', $params ) ),
+ $cache::TTL_DAY,
+ function () use ( $translated, $total, $groupId, $group, $parent, $stats ) {
+ // Any data variable read below should be part of the cache key above
+ $extra = [];
+ if ( $translated === $total ) {
+ $extra = [ 'action' => 'proofread' ];
+ }
+
+ $rowParams = [];
+ $rowParams['data-groupid'] = $groupId;
+ $rowParams['class'] = get_class( $group );
+ if ( $parent ) {
+ $rowParams['data-parentgroup'] = $parent->getId();
+ }
+
+ return "\t" .
+ Html::openElement( 'tr', $rowParams ) .
+ "\n\t\t" .
+ Html::rawElement(
+ 'td',
+ [],
+ $this->table->makeGroupLink( $group, $this->target, $extra )
+ ) . $this->table->makeNumberColumns( $stats ) .
+ $this->getWorkflowStateCell( $groupId ) .
+ "\n\t" .
+ Html::closeElement( 'tr' ) .
+ "\n";
+ }
+ );
+ }
+
+ private function getWorkflowStates(): array {
+ $db = $this->loadBalancer->getConnection( DB_REPLICA );
+ $res = $db->select(
+ 'translate_groupreviews',
+ [ 'tgr_state', 'tgr_group' ],
+ [ 'tgr_lang' => $this->target ],
+ __METHOD__
+ );
+
+ $states = [];
+ foreach ( $res as $row ) {
+ $states[$row->tgr_group] = $row->tgr_state;
+ }
+
+ return $states;
+ }
+}
diff --git a/Translate/src/Statistics/MessageGroupStatsSpecialPage.php b/Translate/src/Statistics/MessageGroupStatsSpecialPage.php
new file mode 100644
index 00000000..a9edb20a
--- /dev/null
+++ b/Translate/src/Statistics/MessageGroupStatsSpecialPage.php
@@ -0,0 +1,483 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Statistics;
+
+use DeferredUpdates;
+use Html;
+use HTMLForm;
+use JobQueueGroup;
+use MessageGroups;
+use MessageGroupStats;
+use MessageGroupStatsRebuildJob;
+use SpecialPage;
+use TranslateMetadata;
+use TranslateUtils;
+use Wikimedia\Rdbms\ILoadBalancer;
+
+/**
+ * Implements includable special page Special:MessageGroupStats which provides
+ * translation statistics for all languages for a group.
+ *
+ * @author Niklas Laxström
+ * @author Siebrand Mazeland
+ * @license GPL-2.0-or-later
+ * @ingroup SpecialPage TranslateSpecialPage Stats
+ */
+class MessageGroupStatsSpecialPage extends SpecialPage {
+ /** @var StatsTable */
+ private $table;
+ /** @var array */
+ private $targetValueName = [ 'group' ];
+ /** Most of the displayed numbers added together at the bottom of the table. */
+ private $totals;
+ /**
+ * Flag to set if nothing to show.
+ * @var bool
+ */
+ private $nothing = false;
+ /**
+ * Flag to set if not all numbers are available.
+ * @var bool
+ */
+ private $incomplete = false;
+ /**
+ * Whether to hide rows which are fully translated.
+ * @var bool
+ */
+ private $noComplete = true;
+ /**
+ * Whether to hide rows which are fully untranslated.
+ * @var bool
+ */
+ private $noEmpty = false;
+ /** The target of stats: group id. */
+ private $target;
+ /**
+ * Whether to regenerate stats. Activated by action=purge in query params.
+ * @var bool
+ */
+ private $purge;
+ /** @var array */
+ private $states;
+ /** @var ProgressStatsTableFactory */
+ private $progressStatsTableFactory;
+ private $names;
+ private $translate;
+ /** @var int */
+ private $numberOfShownLanguages;
+ /** @var JobQueueGroup */
+ private $jobQueueGroup;
+ /** @var ILoadBalancer */
+ private $loadBalancer;
+
+ public function __construct(
+ ProgressStatsTableFactory $progressStatsTableFactory,
+ JobQueueGroup $jobQueueGroup,
+ ILoadBalancer $loadBalancer
+ ) {
+ parent::__construct( 'MessageGroupStats' );
+ $this->progressStatsTableFactory = $progressStatsTableFactory;
+ $this->jobQueueGroup = $jobQueueGroup;
+ $this->loadBalancer = $loadBalancer;
+ $this->totals = MessageGroupStats::getEmptyStats();
+ }
+
+ public function getDescription() {
+ return $this->msg( 'translate-mgs-pagename' )->text();
+ }
+
+ public function isIncludable() {
+ return true;
+ }
+
+ protected function getGroupName() {
+ return 'translation';
+ }
+
+ public function execute( $par ) {
+ $request = $this->getRequest();
+
+ $this->purge = $request->getVal( 'action' ) === 'purge';
+ if ( $this->purge && !$request->wasPosted() ) {
+ LanguageStatsSpecialPage::showPurgeForm( $this->getContext() );
+ return;
+ }
+
+ $this->table = $this->progressStatsTableFactory->newFromContext( $this->getContext() );
+
+ $this->setHeaders();
+ $this->outputHeader();
+
+ $out = $this->getOutput();
+
+ $out->addModules( 'ext.translate.special.languagestats' );
+ $out->addModuleStyles( 'ext.translate.statstable' );
+
+ $params = $par ? explode( '/', $par ) : [];
+
+ if ( isset( $params[0] ) && trim( $params[0] ) ) {
+ $this->target = $params[0];
+ }
+
+ if ( isset( $params[1] ) ) {
+ $this->noComplete = (bool)$params[1];
+ }
+
+ if ( isset( $params[2] ) ) {
+ $this->noEmpty = (bool)$params[2];
+ }
+
+ // Whether the form has been submitted, only relevant if not including
+ $submitted = !$this->including() && $request->getVal( 'x' ) === 'D';
+
+ // Default booleans to false if the form was submitted
+ foreach ( $this->targetValueName as $key ) {
+ $this->target = $request->getVal( $key, $this->target );
+ }
+ $this->noComplete = $request->getBool(
+ 'suppresscomplete',
+ $this->noComplete && !$submitted
+ );
+ $this->noEmpty = $request->getBool( 'suppressempty', $this->noEmpty && !$submitted );
+
+ if ( !$this->including() ) {
+ $out->addHelpLink( 'Help:Extension:Translate/Statistics_and_reporting' );
+ $this->addForm();
+ }
+
+ if ( $this->isValidValue( $this->target ) ) {
+ $this->outputIntroduction();
+
+ $stats = $this->loadStatistics( $this->target, MessageGroupStats::FLAG_CACHE_ONLY );
+ $output = $this->getTable( $stats );
+ if ( $this->incomplete ) {
+ $out->wrapWikiMsg(
+ "<div class='error'>$1</div>",
+ 'translate-langstats-incomplete'
+ );
+ }
+
+ if ( $this->incomplete || $this->purge ) {
+ DeferredUpdates::addCallableUpdate( function () {
+ // Attempt to recache on the fly the missing stats, unless a
+ // purge was requested, because that is likely to time out.
+ // Even though this is executed inside a deferred update, it
+ // counts towards the maximum execution time limit. If that is
+ // reached, or any other failure happens, no updates at all
+ // will be written into the database, as it does only single
+ // update at the end. Hence we always add a job too, so that
+ // even the slower updates will get done at some point. In
+ // regular case (no purge), the job sees that the stats are
+ // already updated, so it is not much of an overhead.
+ $jobParams = $this->getCacheRebuildJobParameters( $this->target );
+ $jobParams[ 'purge' ] = $this->purge;
+ $job = MessageGroupStatsRebuildJob::newJob( $jobParams );
+ $this->jobQueueGroup->push( $job );
+
+ // $this->purge is only true if request was posted
+ if ( !$this->purge ) {
+ $this->loadStatistics( $this->target );
+ }
+ } );
+ }
+ if ( $this->nothing ) {
+ $out->wrapWikiMsg( "<div class='error'>$1</div>", 'translate-mgs-nothing' );
+ }
+ $out->addHTML( $output );
+ } elseif ( $submitted ) {
+ $this->invalidTarget();
+ }
+ }
+
+ // endregion
+
+ private function loadStatistics( string $target, int $flags = 0 ): array {
+ return MessageGroupStats::forGroup( $target, $flags );
+ }
+
+ private function getCacheRebuildJobParameters( string $target ): array {
+ return [ 'groupid' => $target ];
+ }
+
+ private function isValidValue( ?string $value ): bool {
+ if ( $value === null ) {
+ return false;
+ }
+
+ $group = MessageGroups::getGroup( $value );
+ if ( $group ) {
+ if ( MessageGroups::isDynamic( $group ) ) {
+ /* Dynamic groups are not listed, but it is possible to end up
+ * on this page with a dynamic group by navigating from
+ * translation or proofreading activity or by giving group id
+ * of dynamic group explicitly. Ignore dynamic group to avoid
+ * throwing exceptions later. */
+ $group = false;
+ } else {
+ $this->target = $group->getId();
+ }
+ }
+
+ return (bool)$group;
+ }
+
+ private function invalidTarget(): void {
+ $this->getOutput()->wrapWikiMsg(
+ "<div class='error'>$1</div>",
+ [ 'translate-mgs-invalid-group', $this->target ]
+ );
+ }
+
+ private function outputIntroduction(): void {
+ $priorityLangs = TranslateMetadata::get( $this->target, 'prioritylangs' );
+ if ( $priorityLangs ) {
+ $hasPriorityForce = TranslateMetadata::get( $this->target, 'priorityforce' ) === 'on';
+ if ( $hasPriorityForce ) {
+ $this->getOutput()->addWikiMsg( 'tpt-priority-languages-force', $priorityLangs );
+ } else {
+ $this->getOutput()->addWikiMsg( 'tpt-priority-languages', $priorityLangs );
+ }
+ }
+ }
+
+ /** If workflow states are configured, adds a workflow states column */
+ private function addWorkflowStatesColumn(): void {
+ global $wgTranslateWorkflowStates;
+
+ if ( $wgTranslateWorkflowStates ) {
+ $this->states = $this->getWorkflowStates();
+
+ // An array where keys are state names and values are numbers
+ $this->table->addExtraColumn( $this->msg( 'translate-stats-workflow' ) );
+ }
+ }
+
+ /** If workflow states are configured, adds a cell with the workflow state to the row */
+ private function getWorkflowStateCell( string $language ): string {
+ // This will be set by addWorkflowStatesColumn if needed
+ if ( !isset( $this->states ) ) {
+ return '';
+ }
+
+ return $this->table->makeWorkflowStateCell(
+ $this->states[$language] ?? null,
+ MessageGroups::getGroup( $this->target ),
+ $language
+ );
+ }
+
+ private function addForm(): void {
+ $formDescriptor = [
+ 'select' => [
+ 'type' => 'select',
+ 'name' => 'group',
+ 'id' => 'group',
+ 'label' => $this->msg( 'translate-mgs-group' )->text(),
+ 'options' => $this->getGroupOptions(),
+ 'default' => $this->target
+ ],
+ 'nocomplete-check' => [
+ 'type' => 'check',
+ 'name' => 'suppresscomplete',
+ 'id' => 'suppresscomplete',
+ 'label' => $this->msg( 'translate-mgs-nocomplete' )->text(),
+ 'default' => $this->noComplete,
+ ],
+ 'noempty-check' => [
+ 'type' => 'check',
+ 'name' => 'suppressempty',
+ 'id' => 'suppressempty',
+ 'label' => $this->msg( 'translate-mgs-noempty' )->text(),
+ 'default' => $this->noEmpty,
+ ]
+ ];
+
+ $htmlForm = HTMLForm::factory( 'ooui', $formDescriptor, $this->getContext() );
+
+ /* Since these pages are in the tabgroup with Special:Translate,
+ * it makes sense to retain the selected group/language parameter
+ * on post requests even when not relevant to the current page. */
+ $val = $this->getRequest()->getVal( 'language' );
+ if ( $val !== null ) {
+ $htmlForm->addHiddenField( 'language', $val );
+ }
+
+ $htmlForm
+ ->addHiddenField( 'x', 'D' ) // To detect submission
+ ->setMethod( 'get' )
+ ->setSubmitTextMsg( 'translate-mgs-submit' )
+ ->setWrapperLegendMsg( 'translate-mgs-fieldset' )
+ ->prepareForm()
+ ->displayForm( false );
+ }
+
+ private function getTable( array $stats ): string {
+ $table = $this->table;
+
+ $this->addWorkflowStatesColumn();
+ $out = '';
+
+ $this->numberOfShownLanguages = 0;
+ $languages = array_keys(
+ TranslateUtils::getLanguageNames( $this->getLanguage()->getCode() )
+ );
+ sort( $languages );
+ $this->filterPriorityLangs( $languages, $this->target, $stats );
+ foreach ( $languages as $code ) {
+ if ( $table->isExcluded( $this->target, $code ) ) {
+ continue;
+ }
+ $out .= $this->makeRow( $code, $stats );
+ }
+
+ if ( $out ) {
+ $table->setMainColumnHeader( $this->msg( 'translate-mgs-column-language' ) );
+ $out = $table->createHeader() . "\n" . $out;
+ $out .= Html::closeElement( 'tbody' );
+
+ $out .= Html::openElement( 'tfoot' );
+ $out .= $table->makeTotalRow(
+ $this->msg( 'translate-mgs-totals' )
+ ->numParams( $this->numberOfShownLanguages ),
+ $this->totals
+ );
+ $out .= Html::closeElement( 'tfoot' );
+
+ $out .= Html::closeElement( 'table' );
+
+ return $out;
+ } else {
+ $this->nothing = true;
+
+ return '';
+ }
+ }
+
+ /**
+ * Filter an array of languages based on whether a priority set of
+ * languages present for the passed group. If priority languages are
+ * present, to that list add languages with more than 0% translation.
+ */
+ private function filterPriorityLangs( array &$languages, string $group, array $cache ): void {
+ $filterLangs = TranslateMetadata::get( $group, 'prioritylangs' );
+ if ( $filterLangs === false || strlen( $filterLangs ) === 0 ) {
+ // No restrictions, keep everything
+ return;
+ }
+ $filter = array_flip( explode( ',', $filterLangs ) );
+ foreach ( $languages as $id => $code ) {
+ if ( isset( $filter[$code] ) ) {
+ continue;
+ }
+ $translated = $cache[$code][1];
+ if ( $translated === 0 ) {
+ unset( $languages[$id] );
+ }
+ }
+ }
+
+ private function makeRow( string $code, array $cache ): string {
+ $stats = $cache[$code];
+ $total = $stats[MessageGroupStats::TOTAL];
+ $translated = $stats[MessageGroupStats::TRANSLATED];
+ $fuzzy = $stats[MessageGroupStats::FUZZY];
+
+ if ( $total === null ) {
+ $this->incomplete = true;
+ $extra = [];
+ } else {
+ if ( $this->noComplete && $fuzzy === 0 && $translated === $total ) {
+ return '';
+ }
+
+ if ( $this->noEmpty && $translated === 0 && $fuzzy === 0 ) {
+ return '';
+ }
+
+ // Skip below 2% if "don't show without translations" is checked.
+ if ( $this->noEmpty && ( $translated / $total ) < 0.02 ) {
+ return '';
+ }
+
+ if ( $translated === $total ) {
+ $extra = [ 'action' => 'proofread' ];
+ } else {
+ $extra = [];
+ }
+ }
+ $this->numberOfShownLanguages += 1;
+ $this->totals = MessageGroupStats::multiAdd( $this->totals, $stats );
+
+ $rowParams = [];
+ if ( $this->numberOfShownLanguages % 2 === 0 ) {
+ $rowParams[ 'class' ] = 'tux-statstable-even';
+ }
+
+ $out = "\t" . Html::openElement( 'tr', $rowParams );
+ $out .= "\n\t\t" . $this->getMainColumnCell( $code, $extra );
+ $out .= $this->table->makeNumberColumns( $stats );
+ $out .= $this->getWorkflowStateCell( $code );
+
+ $out .= "\n\t" . Html::closeElement( 'tr' ) . "\n";
+
+ return $out;
+ }
+
+ private function getMainColumnCell( string $code, array $params ): string {
+ if ( !isset( $this->names ) ) {
+ $this->names = TranslateUtils::getLanguageNames( $this->getLanguage()->getCode() );
+ $this->translate = SpecialPage::getTitleFor( 'Translate' );
+ }
+
+ $queryParameters = $params + [
+ 'group' => $this->target,
+ 'language' => $code
+ ];
+
+ if ( isset( $this->names[$code] ) ) {
+ $text = "$code: {$this->names[$code]}";
+ } else {
+ $text = $code;
+ }
+ $link = $this->getLinkRenderer()->makeKnownLink(
+ $this->translate,
+ $text,
+ [],
+ $queryParameters
+ );
+
+ return Html::rawElement( 'td', [], $link );
+ }
+
+ private function getWorkflowStates(): array {
+ $db = $this->loadBalancer->getConnection( DB_REPLICA );
+ $res = $db->select(
+ 'translate_groupreviews',
+ [ 'tgr_state', 'tgr_lang' ],
+ [ 'tgr_group' => $this->target ],
+ __METHOD__
+ );
+
+ $states = [];
+ foreach ( $res as $row ) {
+ $states[$row->tgr_lang] = $row->tgr_state;
+ }
+
+ return $states;
+ }
+
+ /** Creates a simple message group options. */
+ private function getGroupOptions(): array {
+ $options = [];
+ $groups = MessageGroups::getAllGroups();
+
+ foreach ( $groups as $id => $class ) {
+ if ( MessageGroups::getGroup( $id )->exists() ) {
+ $options[$class->getLabel()] = $id;
+ }
+ }
+
+ return $options;
+ }
+}
diff --git a/Translate/src/Statistics/ProgressStatsTableFactory.php b/Translate/src/Statistics/ProgressStatsTableFactory.php
new file mode 100644
index 00000000..de91426f
--- /dev/null
+++ b/Translate/src/Statistics/ProgressStatsTableFactory.php
@@ -0,0 +1,38 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Statistics;
+
+use IContextSource;
+use MediaWiki\Extension\Translate\Utilities\ConfigHelper;
+use MediaWiki\Linker\LinkRenderer;
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2021.10
+ */
+class ProgressStatsTableFactory {
+ /** @var LinkRenderer */
+ private $linkRenderer;
+ /** @var ConfigHelper */
+ private $configHelper;
+
+ public function __construct(
+ LinkRenderer $linkRenderer,
+ ConfigHelper $configHelper
+ ) {
+ $this->linkRenderer = $linkRenderer;
+ $this->configHelper = $configHelper;
+ }
+
+ public function newFromContext( IContextSource $contextSource ): StatsTable {
+ return new StatsTable(
+ $this->linkRenderer,
+ $this->configHelper,
+ $contextSource,
+ $contextSource->getLanguage()
+ );
+ }
+
+}
diff --git a/Translate/src/Statistics/QueryLanguageStatsActionApi.php b/Translate/src/Statistics/QueryLanguageStatsActionApi.php
new file mode 100644
index 00000000..9cb5c1b7
--- /dev/null
+++ b/Translate/src/Statistics/QueryLanguageStatsActionApi.php
@@ -0,0 +1,96 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Statistics;
+
+use ApiQuery;
+use IJobSpecification;
+use JobQueueGroup;
+use MessageGroups;
+use MessageGroupStats;
+use MessageGroupStatsRebuildJob;
+use TranslateUtils;
+use Wikimedia\ParamValidator\ParamValidator;
+
+/**
+ * Api module for querying language stats.
+ * @ingroup API TranslateAPI
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+class QueryLanguageStatsActionApi extends QueryStatsActionApi {
+ public function __construct(
+ ApiQuery $query,
+ string $moduleName,
+ JobQueueGroup $jobQueueGroup
+ ) {
+ parent::__construct( $query, $moduleName, 'ls', $jobQueueGroup );
+ }
+
+ // ApiStatsQuery methods
+
+ /** @inheritDoc */
+ protected function validateTargetParamater( array $params ): string {
+ $requested = $params[ 'language' ];
+ if ( !TranslateUtils::isSupportedLanguageCode( $requested ) ) {
+ $this->dieWithError( [ 'apierror-translate-invalidlanguage', $requested ] );
+ }
+
+ return $requested;
+ }
+
+ /** @inheritDoc */
+ protected function loadStatistics( string $target, int $flags = 0 ): array {
+ $groupId = $this->getParameter( 'group' );
+ $group = $groupId !== null ? MessageGroups::getGroup( $groupId ) : null;
+ if ( $groupId ) {
+ if ( !$group ) {
+ $this->dieWithError( [ 'apierror-badparameter', 'group' ] );
+ }
+
+ return [ $groupId => MessageGroupStats::forItem( $group->getId(), $target, $flags ) ];
+ } else {
+ return MessageGroupStats::forLanguage( $target, $flags );
+ }
+ }
+
+ /** @inheritDoc */
+ protected function makeStatsItem( string $item, array $stats ): array {
+ $data = $this->makeItem( $stats );
+ $data['group'] = $item;
+
+ return $data;
+ }
+
+ /** @inheritDoc */
+ protected function getCacheRebuildJob( string $target ): IJobSpecification {
+ return MessageGroupStatsRebuildJob::newJob( [ 'languagecode' => $target ] );
+ }
+
+ // Api methods
+
+ /** @inheritDoc */
+ protected function getAllowedParams(): array {
+ $params = parent::getAllowedParams();
+ $params['language'] = [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_REQUIRED => true,
+ ];
+
+ $params['group'] = [
+ ParamValidator::PARAM_TYPE => 'string',
+ ];
+
+ return $params;
+ }
+
+ /** @inheritDoc */
+ protected function getExamplesMessages(): array {
+ return [
+ 'action=query&meta=languagestats&lslanguage=fi'
+ => 'apihelp-query+languagestats-example-1',
+ 'action=query&meta=languagestats&lslanguage=fi&group=A'
+ => 'apihelp-query+languagestats-example-2'
+ ];
+ }
+}
diff --git a/Translate/src/Statistics/QueryMessageGroupStatsActionApi.php b/Translate/src/Statistics/QueryMessageGroupStatsActionApi.php
new file mode 100644
index 00000000..d089ebc1
--- /dev/null
+++ b/Translate/src/Statistics/QueryMessageGroupStatsActionApi.php
@@ -0,0 +1,122 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Statistics;
+
+use ApiQuery;
+use IJobSpecification;
+use JobQueueGroup;
+use MessageGroups;
+use MessageGroupStats;
+use MessageGroupStatsRebuildJob;
+use Wikimedia\ParamValidator\ParamValidator;
+
+/**
+ * Api module for querying message group stats.
+ * @ingroup API TranslateAPI
+ * @author Tim Gerundt
+ * @author Niklas Laxström
+ * @copyright Copyright © 2012-2013, Tim Gerundt
+ * @license GPL-2.0-or-later
+ */
+class QueryMessageGroupStatsActionApi extends QueryStatsActionApi {
+ /**
+ * Whether to hide rows which are fully translated.
+ * @var bool
+ */
+ private $noComplete = false;
+ /**
+ * Whether to hide rows which are fully untranslated.
+ * @var bool
+ */
+ private $noEmpty = false;
+
+ public function __construct(
+ ApiQuery $query,
+ string $moduleName,
+ JobQueueGroup $jobQueueGroup
+ ) {
+ parent::__construct( $query, $moduleName, 'mgs', $jobQueueGroup );
+ }
+
+ // ApiStatsQuery methods
+
+ /** @inheritDoc */
+ protected function validateTargetParamater( array $params ): string {
+ $group = MessageGroups::getGroup( $params['group'] );
+ if ( !$group ) {
+ $this->dieWithError( [ 'apierror-badparameter', 'mgsgroup' ] );
+ } elseif ( MessageGroups::isDynamic( $group ) ) {
+ $this->dieWithError( 'apierror-translate-nodynamicgroups', 'invalidparam' );
+ }
+
+ return $group->getId();
+ }
+
+ /** @inheritDoc */
+ protected function loadStatistics( string $target, int $flags = 0 ): array {
+ return MessageGroupStats::forGroup( $target, $flags );
+ }
+
+ /** @inheritDoc */
+ public function execute() {
+ $params = $this->extractRequestParams();
+
+ $this->noComplete = $params['suppresscomplete'];
+ $this->noEmpty = $params['suppressempty'];
+
+ parent::execute();
+ }
+
+ /** @inheritDoc */
+ protected function makeStatsItem( string $item, array $stats ): ?array {
+ $data = $this->makeItem( $stats );
+
+ if ( $this->noComplete && $data['fuzzy'] === 0 && $data['translated'] === $data['total'] ) {
+ return null;
+ }
+
+ if ( $this->noEmpty && $data['translated'] === 0 && $data['fuzzy'] === 0 ) {
+ return null;
+ }
+
+ // Skip below 2% if "don't show without translations" is checked.
+ if ( $this->noEmpty && ( $data['translated'] / $data['total'] ) < 0.02 ) {
+ return null;
+ }
+
+ $data['code'] = $item; // For BC
+ $data['language'] = $item;
+
+ return $data;
+ }
+
+ /** @inheritDoc */
+ protected function getCacheRebuildJob( string $target ): IJobSpecification {
+ return MessageGroupStatsRebuildJob::newJob( [ 'groupid' => $target ] );
+ }
+
+ // Api methods
+
+ /** @inheritDoc */
+ protected function getAllowedParams(): array {
+ $params = parent::getAllowedParams();
+ $params['group'] = [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_REQUIRED => true,
+ ];
+
+ $params['suppresscomplete'] = false;
+ $params['suppressempty'] = false;
+
+ return $params;
+ }
+
+ /** @inheritDoc */
+ protected function getExamplesMessages(): array {
+ return [
+ 'action=query&meta=messagegroupstats&mgsgroup=page-Example'
+ => 'apihelp-query+messagegroupstats-example-1',
+ ];
+ }
+}
diff --git a/Translate/src/Statistics/QueryStatsActionApi.php b/Translate/src/Statistics/QueryStatsActionApi.php
new file mode 100644
index 00000000..92bebdc7
--- /dev/null
+++ b/Translate/src/Statistics/QueryStatsActionApi.php
@@ -0,0 +1,114 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Statistics;
+
+use ApiBase;
+use ApiQuery;
+use ApiQueryBase;
+use DeferredUpdates;
+use IJobSpecification;
+use JobQueueGroup;
+use MessageGroupStats;
+use Wikimedia\ParamValidator\ParamValidator;
+
+/**
+ * A base module for querying message group related stats.
+ *
+ * @ingroup API TranslateAPI
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2012-11-30
+ */
+abstract class QueryStatsActionApi extends ApiQueryBase {
+ /** @var JobQueueGroup */
+ private $jobQueueGroup;
+
+ public function __construct(
+ ApiQuery $queryModule,
+ string $moduleName,
+ string $paramPrefix,
+ JobQueueGroup $jobQueueGroup
+ ) {
+ parent::__construct( $queryModule, $moduleName, $paramPrefix );
+ $this->jobQueueGroup = $jobQueueGroup;
+ }
+
+ public function getCacheMode( $params ): string {
+ return 'public';
+ }
+
+ /**
+ * Implement this to implement input validation and return the name of the target that
+ * is then given to loadStats.
+ */
+ abstract protected function validateTargetParamater( array $params ): string;
+
+ /**
+ * Implement this to load stats.
+ * @param string $target
+ * @param int $flags See MessageGroupStats for possible flags
+ * @return array[]
+ */
+ abstract protected function loadStatistics( string $target, int $flags = 0 ): array;
+
+ /** Implement this to load each individual stat item */
+ abstract protected function makeStatsItem( string $item, array $stats ): ?array;
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+
+ $target = $this->validateTargetParamater( $params );
+ $cache = $this->loadStatistics( $target, MessageGroupStats::FLAG_CACHE_ONLY );
+
+ $result = $this->getResult();
+ $incomplete = false;
+
+ foreach ( $cache as $item => $stats ) {
+ if ( $item < $params['offset'] ) {
+ continue;
+ }
+
+ if ( $stats[MessageGroupStats::TOTAL] === null ) {
+ $incomplete = true;
+ $this->setContinueEnumParameter( 'offset', $item );
+ break;
+ }
+
+ $data = $this->makeStatsItem( $item, $stats );
+ if ( $data === null ) {
+ continue;
+ }
+ $result->addValue( [ 'query', $this->getModuleName() ], null, $data );
+ }
+
+ $result->addIndexedTagName( [ 'query', $this->getModuleName() ], 'stats' );
+
+ if ( $incomplete ) {
+ DeferredUpdates::addCallableUpdate( function () use ( $target ): void {
+ $this->jobQueueGroup->push( $this->getCacheRebuildJob( $target ) );
+ } );
+ }
+ }
+
+ protected function makeItem( array $stats ): array {
+ return [
+ 'total' => $stats[MessageGroupStats::TOTAL],
+ 'translated' => $stats[MessageGroupStats::TRANSLATED],
+ 'fuzzy' => $stats[MessageGroupStats::FUZZY],
+ 'proofread' => $stats[MessageGroupStats::PROOFREAD],
+ ];
+ }
+
+ abstract protected function getCacheRebuildJob( string $target ): IJobSpecification;
+
+ protected function getAllowedParams(): array {
+ return [
+ 'offset' => [
+ ParamValidator::PARAM_DEFAULT => '0',
+ ParamValidator::PARAM_TYPE => 'string',
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ ];
+ }
+}
diff --git a/Translate/src/Statistics/QueryTranslationStatsActionApi.php b/Translate/src/Statistics/QueryTranslationStatsActionApi.php
new file mode 100644
index 00000000..fafb7e57
--- /dev/null
+++ b/Translate/src/Statistics/QueryTranslationStatsActionApi.php
@@ -0,0 +1,84 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Statistics;
+
+use ApiBase;
+use ApiMain;
+use MediaWiki\Extension\Translate\Services;
+use Wikimedia\ParamValidator\ParamValidator;
+use Wikimedia\ParamValidator\TypeDef\IntegerDef;
+
+/**
+ * Api module for querying translation statistics
+ * @ingroup API TranslateAPI
+ * @since 2020.09
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ */
+class QueryTranslationStatsActionApi extends ApiBase {
+ /** @var TranslationStatsDataProvider */
+ private $dataProvider;
+
+ public function __construct( ApiMain $mainModule, $moduleName ) {
+ parent::__construct( $mainModule, $moduleName );
+ $this->dataProvider = Services::getInstance()->getTranslationStatsDataProvider();
+ }
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+ $graphOpts = new TranslationStatsGraphOptions();
+ $graphOpts->bindArray( $params );
+
+ $language = $this->getLanguage();
+
+ [ $labels, $data ] = $this->dataProvider->getGraphData( $graphOpts, $language );
+ $output = [
+ 'labels' => $labels,
+ 'data' => $data
+ ];
+
+ $this->getResult()->addValue( null, $this->getModuleName(), $output );
+ }
+
+ protected function getAllowedParams() {
+ return [
+ 'count' => [
+ ParamValidator::PARAM_TYPE => $this->dataProvider->getGraphTypes(),
+ ParamValidator::PARAM_REQUIRED => true,
+ ],
+ 'days' => [
+ ParamValidator::PARAM_TYPE => 'integer',
+ ParamValidator::PARAM_REQUIRED => true,
+ ParamValidator::PARAM_DEFAULT => 30,
+ IntegerDef::PARAM_MIN => 1,
+ IntegerDef::PARAM_MAX => 10000,
+ ApiBase::PARAM_RANGE_ENFORCE => true
+ ],
+ 'group' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_ISMULTI => true
+ ],
+ 'language' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_ISMULTI => true
+ ],
+ 'scale' => [
+ ParamValidator::PARAM_TYPE => TranslationStatsGraphOptions::VALID_SCALES,
+ ParamValidator::PARAM_DEFAULT => 'days'
+ ],
+ 'start' => [
+ ParamValidator::PARAM_TYPE => 'timestamp'
+ ]
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=translationstats&count=edits&days=30'
+ => 'apihelp-translationstats-example-1',
+ 'action=translationstats&count=edits&days=30&language=en|fr'
+ => 'apihelp-translationstats-example-2'
+ ];
+ }
+}
diff --git a/Translate/src/Statistics/ReviewPerLanguageStats.php b/Translate/src/Statistics/ReviewPerLanguageStats.php
new file mode 100644
index 00000000..c0efa0e5
--- /dev/null
+++ b/Translate/src/Statistics/ReviewPerLanguageStats.php
@@ -0,0 +1,110 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Statistics;
+
+use TranslateUtils;
+
+/**
+ * Graph which provides statistics on number of reviews and reviewers.
+ * @ingroup Stats
+ * @license GPL-2.0-or-later
+ * @since 2012.03
+ */
+class ReviewPerLanguageStats extends TranslatePerLanguageStats {
+ public function preQuery( &$tables, &$fields, &$conds, &$type, &$options, &$joins, $start, $end ) {
+ global $wgTranslateMessageNamespaces;
+
+ $db = wfGetDB( DB_REPLICA );
+
+ $tables = [ 'logging' ];
+ $fields = [ 'log_timestamp' ];
+ $joins = [];
+
+ $conds = [
+ 'log_namespace' => $wgTranslateMessageNamespaces,
+ 'log_action' => 'message',
+ ];
+
+ $timeConds = self::makeTimeCondition( 'log_timestamp', $start, $end );
+ $conds = array_merge( $conds, $timeConds );
+
+ $options = [ 'ORDER BY' => 'log_timestamp' ];
+
+ $this->groups = $this->opts->getGroups();
+
+ $namespaces = self::namespacesFromGroups( $this->groups );
+ if ( count( $namespaces ) ) {
+ $conds['log_namespace'] = $namespaces;
+ }
+
+ $languages = [];
+ foreach ( $this->opts->getLanguages() as $code ) {
+ $languages[] = 'log_title ' . $db->buildLike( $db->anyString(), "/$code" );
+ }
+ if ( count( $languages ) ) {
+ $conds[] = $db->makeList( $languages, LIST_OR );
+ }
+
+ $fields[] = 'log_title';
+
+ if ( $this->groups ) {
+ $fields[] = 'log_namespace';
+ }
+
+ if ( $this->opts->getValue( 'count' ) === 'reviewers' ) {
+ $fields[] = 'log_actor';
+ }
+
+ $type .= '-reviews';
+ }
+
+ public function indexOf( $row ) {
+ if ( $this->opts->getValue( 'count' ) === 'reviewers' ) {
+ $date = $this->formatTimestamp( $row->log_timestamp );
+
+ if ( isset( $this->seenUsers[$date][$row->log_actor] ) ) {
+ return false;
+ }
+
+ $this->seenUsers[$date][$row->log_actor] = 1;
+ }
+
+ // Do not consider language-less pages.
+ if ( strpos( $row->log_title, '/' ) === false ) {
+ return false;
+ }
+
+ // No filters, just one key to track.
+ if ( !$this->groups && !$this->opts->getLanguages() ) {
+ return [ 'all' ];
+ }
+
+ // The key-building needs to be in sync with ::labels().
+ list( $key, $code ) = TranslateUtils::figureMessage( $row->log_title );
+
+ $groups = [];
+ $codes = [];
+
+ if ( $this->groups ) {
+ /* Get list of keys that the message belongs to, and filter
+ * out those which are not requested. */
+ $groups = TranslateUtils::messageKeyToGroups( $row->log_namespace, $key );
+ $groups = array_intersect( $this->groups, $groups );
+ }
+
+ if ( $this->opts->getLanguages() ) {
+ $codes = [ $code ];
+ }
+
+ return $this->combineTwoArrays( $groups, $codes );
+ }
+
+ public function labels() {
+ return $this->combineTwoArrays( $this->groups, $this->opts->getLanguages() );
+ }
+
+ public function getTimestamp( $row ) {
+ return $row->log_timestamp;
+ }
+}
diff --git a/Translate/src/Statistics/StatisticsUnavailable.php b/Translate/src/Statistics/StatisticsUnavailable.php
new file mode 100644
index 00000000..53edb371
--- /dev/null
+++ b/Translate/src/Statistics/StatisticsUnavailable.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+namespace MediaWiki\Extension\Translate\Statistics;
+
+use RuntimeException;
+
+/** @since 2020.04 */
+class StatisticsUnavailable extends RuntimeException {
+}
diff --git a/Translate/src/Statistics/StatsTable.php b/Translate/src/Statistics/StatsTable.php
new file mode 100644
index 00000000..b1d03dbe
--- /dev/null
+++ b/Translate/src/Statistics/StatsTable.php
@@ -0,0 +1,341 @@
+<?php
+declare( strict_types=1 );
+
+namespace MediaWiki\Extension\Translate\Statistics;
+
+use Html;
+use HtmlArmor;
+use Language;
+use MediaWiki\Extension\Translate\Utilities\ConfigHelper;
+use MediaWiki\Linker\LinkRenderer;
+use Message;
+use MessageGroup;
+use MessageGroups;
+use MessageGroupStats;
+use MessageLocalizer;
+use SpecialPage;
+use TitleValue;
+use TranslateMetadata;
+use Xml;
+
+/**
+ * Implements generation of HTML stats table.
+ * @author Siebrand Mazeland
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+class StatsTable {
+ /** @var TitleValue */
+ protected $translate;
+ /** @var LinkRenderer */
+ private $linkRenderer;
+ /** @var ConfigHelper */
+ private $configHelper;
+ /** @var MessageLocalizer */
+ private $messageLocalizer;
+ /** @var Language */
+ protected $language;
+ /** @var string */
+ protected $mainColumnHeader;
+ /** @var Message[] */
+ protected $extraColumns = [];
+
+ public function __construct(
+ LinkRenderer $linkRenderer,
+ ConfigHelper $configHelper,
+ MessageLocalizer $messageLocalizer,
+ Language $language
+ ) {
+ $this->translate = SpecialPage::getTitleValueFor( 'Translate' );
+ $this->linkRenderer = $linkRenderer;
+ $this->configHelper = $configHelper;
+ $this->messageLocalizer = $messageLocalizer;
+ $this->language = $language;
+ }
+
+ /**
+ * Statistics table element (heading or regular cell)
+ * @param string $in Element contents.
+ * @param string $bgcolor Backround color in ABABAB format.
+ * @param string $sort Value used for sorting.
+ * @return string Html td element.
+ */
+ public function element( string $in, string $bgcolor = '', string $sort = '' ): string {
+ $attributes = [];
+
+ if ( $sort ) {
+ $attributes['data-sort-value'] = $sort;
+ }
+
+ if ( $bgcolor ) {
+ $attributes['style'] = 'background-color: #' . $bgcolor;
+ }
+
+ $element = Html::element( 'td', $attributes, $in );
+
+ return $element;
+ }
+
+ public function getBackgroundColor( float $percentage, bool $fuzzy = false ): string {
+ if ( $fuzzy ) {
+ // Steeper scale for fuzzy
+ // (0), [0-2), [2-4), ... [12-100)
+ $index = min( 7, ceil( 50 * $percentage ) );
+ $colors = [
+ '', 'fedbd7', 'fecec8', 'fec1b9',
+ 'fcb5ab', 'fba89d', 'f89b8f', 'f68d81'
+ ];
+ return $colors[ $index ];
+ }
+
+ // https://gka.github.io/palettes/#colors=#36c,#eaf3ff|steps=20|bez=1|coL=1
+ // Color groups for (0-10], (10-20], ... (90-100], (100)
+ $index = floor( $percentage * 10 );
+ $colors = [
+ 'eaf3ff', 'e2ebfc', 'dae3fa', 'd2dbf7', 'c9d4f5',
+ 'c1ccf2', 'b8c4ef', 'b1bced', 'a8b4ea', '9fade8',
+ '96a6e5'
+ ];
+
+ return $colors[ $index ];
+ }
+
+ private function getMainColumnHeader(): string {
+ return $this->mainColumnHeader;
+ }
+
+ public function setMainColumnHeader( Message $msg ): void {
+ $this->mainColumnHeader = $this->createColumnHeader( $msg );
+ }
+
+ /** @return string HTML */
+ private function createColumnHeader( Message $msg ): string {
+ return Html::element( 'th', [], $msg->text() );
+ }
+
+ public function addExtraColumn( Message $column ): void {
+ $this->extraColumns[] = $column;
+ }
+
+ /** @return Message[] */
+ private function getOtherColumnHeaders(): array {
+ return array_merge( [
+ $this->messageLocalizer->msg( 'translate-total' ),
+ $this->messageLocalizer->msg( 'translate-untranslated' ),
+ $this->messageLocalizer->msg( 'translate-percentage-complete' ),
+ $this->messageLocalizer->msg( 'translate-percentage-proofread' ),
+ $this->messageLocalizer->msg( 'translate-percentage-fuzzy' ),
+ ], $this->extraColumns );
+ }
+
+ /** @return string HTML */
+ public function createHeader(): string {
+ // Create table header
+ $out = Html::openElement(
+ 'table',
+ [ 'class' => 'statstable' ]
+ );
+
+ $out .= "\n\t" . Html::openElement( 'thead' );
+ $out .= "\n\t" . Html::openElement( 'tr' );
+
+ $out .= "\n\t\t" . $this->getMainColumnHeader();
+ foreach ( $this->getOtherColumnHeaders() as $label ) {
+ $out .= "\n\t\t" . $this->createColumnHeader( $label );
+ }
+ $out .= "\n\t" . Html::closeElement( 'tr' );
+ $out .= "\n\t" . Html::closeElement( 'thead' );
+ $out .= "\n\t" . Html::openElement( 'tbody' );
+
+ return $out;
+ }
+
+ /**
+ * Makes a row with aggregate numbers.
+ * @param Message $message
+ * @param array $stats ( total, translate, fuzzy )
+ * @return string HTML
+ */
+ public function makeTotalRow( Message $message, array $stats ): string {
+ $out = "\t" . Html::openElement( 'tr' );
+ $out .= "\n\t\t" . Html::element( 'td', [], $message->text() );
+ $out .= $this->makeNumberColumns( $stats );
+ $out .= "\n\t" . Xml::closeElement( 'tr' ) . "\n";
+
+ return $out;
+ }
+
+ /**
+ * Makes partial row from completion numbers
+ * @return string HTML
+ */
+ public function makeNumberColumns( array $stats ): string {
+ $total = $stats[MessageGroupStats::TOTAL];
+ $translated = $stats[MessageGroupStats::TRANSLATED];
+ $fuzzy = $stats[MessageGroupStats::FUZZY];
+ $proofread = $stats[MessageGroupStats::PROOFREAD];
+
+ if ( $total === null ) {
+ $na = "\n\t\t" . Html::element( 'td', [ 'data-sort-value' => -1 ], '...' );
+ $nap = "\n\t\t" . $this->element( '...', 'AFAFAF', '-1' );
+ $out = $na . $na . $nap . $nap;
+
+ return $out;
+ }
+
+ $out = "\n\t\t" . Html::element( 'td',
+ [ 'data-sort-value' => $total ],
+ $this->language->formatNum( $total ) );
+
+ $out .= "\n\t\t" . Html::element( 'td',
+ [ 'data-sort-value' => $total - $translated ],
+ $this->language->formatNum( $total - $translated ) );
+
+ if ( $total === 0 ) {
+ $transRatio = 0;
+ $fuzzyRatio = 0;
+ $proofRatio = 0;
+ } else {
+ $transRatio = $translated / $total;
+ $fuzzyRatio = $fuzzy / $total;
+ $proofRatio = $translated === 0 ? 0 : $proofread / $translated;
+ }
+
+ $out .= "\n\t\t" . $this->element( $this->formatPercentage( $transRatio, 'floor' ),
+ $this->getBackgroundColor( $transRatio ),
+ sprintf( '%1.5f', $transRatio ) );
+
+ $out .= "\n\t\t" . $this->element( $this->formatPercentage( $proofRatio, 'floor' ),
+ $this->getBackgroundColor( $proofRatio ),
+ sprintf( '%1.5f', $proofRatio ) );
+
+ $out .= "\n\t\t" . $this->element( $this->formatPercentage( $fuzzyRatio, 'ceil' ),
+ $this->getBackgroundColor( $fuzzyRatio, true ),
+ sprintf( '%1.5f', $fuzzyRatio ) );
+
+ return $out;
+ }
+
+ public function makeWorkflowStateCell( ?string $state, MessageGroup $group, string $language ): string {
+ if ( $state === null ) {
+ return "\n\t\t" . $this->element( '', '', '-1' );
+ }
+
+ if ( $group->getSourceLanguage() === $language ) {
+ return "\n\t\t" . $this->element( '', '', '-1' );
+ }
+
+ $stateConfig = $group->getMessageGroupStates()->getStates();
+ $sortValue = '-1';
+ $stateColor = '';
+ if ( isset( $stateConfig[$state] ) ) {
+ $sortIndex = array_flip( array_keys( $stateConfig ) );
+ $sortValue = $sortIndex[$state] + 1;
+
+ if ( is_string( $stateConfig[$state] ) ) {
+ // BC for old configuration format
+ $stateColor = $stateConfig[$state];
+ } elseif ( isset( $stateConfig[$state]['color'] ) ) {
+ $stateColor = $stateConfig[$state]['color'];
+ }
+ }
+
+ $stateMessage = $this->messageLocalizer->msg( "translate-workflow-state-$state" );
+ $stateText = $stateMessage->isBlank() ? $state : $stateMessage->text();
+
+ return "\n\t\t" . $this->element(
+ $stateText,
+ $stateColor,
+ (string)$sortValue
+ );
+ }
+
+ /**
+ * Makes a nice print from plain float.
+ * @param int|float $num
+ * @param string $to floor or ceil
+ * @return string Plain text
+ */
+ public function formatPercentage( $num, string $to = 'floor' ): string {
+ $num = $to === 'floor' ? floor( 100 * $num ) : ceil( 100 * $num );
+ $fmt = $this->language->formatNum( $num );
+
+ return $this->messageLocalizer->msg( 'percent', $fmt )->text();
+ }
+
+ /**
+ * Gets the name of group with some extra formatting.
+ * @return string HTML
+ */
+ private function getGroupLabel( MessageGroup $group ): string {
+ $groupLabel = htmlspecialchars( $group->getLabel() );
+
+ // Bold for meta groups.
+ if ( $group->isMeta() ) {
+ $groupLabel = Html::rawElement( 'b', [], $groupLabel );
+ }
+
+ return $groupLabel;
+ }
+
+ /**
+ * Gets the name of group linked to translation tool.
+ * @param MessageGroup $group
+ * @param string $code Language code
+ * @param array $params Any extra query parameters.
+ * @return string HTML
+ */
+ public function makeGroupLink( MessageGroup $group, string $code, array $params ): string {
+ $queryParameters = $params + [
+ 'group' => $group->getId(),
+ 'language' => $code
+ ];
+
+ return $this->linkRenderer->makeLink(
+ $this->translate,
+ new HtmlArmor( $this->getGroupLabel( $group ) ),
+ [],
+ $queryParameters
+ );
+ }
+
+ /**
+ * Check whether translations in given group in given language
+ * has been disabled.
+ * @param string $groupId Message group id
+ * @param string $code Language code
+ */
+ public function isExcluded( string $groupId, string $code ): bool {
+ $excluded = null;
+
+ $checks = [
+ $groupId,
+ strtok( $groupId, '-' ),
+ '*'
+ ];
+
+ $disabledLanguages = $this->configHelper->getDisabledTargetLanguages();
+
+ foreach ( $checks as $check ) {
+ if ( isset( $disabledLanguages[$check] ) && isset( $disabledLanguages[$check][$code] ) ) {
+ $excluded = $disabledLanguages[$check][$code];
+ }
+
+ if ( $excluded !== null ) {
+ break;
+ }
+ }
+
+ $group = MessageGroups::getGroup( $groupId );
+ $languages = $group->getTranslatableLanguages();
+ if ( $languages !== null && !isset( $languages[$code] ) ) {
+ $excluded = true;
+ }
+
+ if ( TranslateMetadata::isExcluded( $groupId, $code ) ) {
+ $excluded = true;
+ }
+
+ return (bool)$excluded;
+ }
+}
diff --git a/Translate/src/Statistics/TranslatePerLanguageStats.php b/Translate/src/Statistics/TranslatePerLanguageStats.php
new file mode 100644
index 00000000..768a7161
--- /dev/null
+++ b/Translate/src/Statistics/TranslatePerLanguageStats.php
@@ -0,0 +1,194 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Statistics;
+
+use MediaWiki\MediaWikiServices;
+use MessageGroups;
+use TranslateUtils;
+
+/**
+ * Graph which provides statistics on active users and number of translations.
+ * @ingroup Stats
+ * @license GPL-2.0-or-later
+ * @since 2010.07
+ */
+class TranslatePerLanguageStats extends TranslationStatsBase {
+ /** @var array For client side group by time period */
+ protected $seenUsers;
+ protected $groups;
+
+ public function __construct( TranslationStatsGraphOptions $opts ) {
+ parent::__construct( $opts );
+ // This query is slow. Set a lower limit, but allow seeing one year at once.
+ $opts->boundValue( 'days', 1, 400 );
+ }
+
+ public function preQuery( &$tables, &$fields, &$conds, &$type, &$options, &$joins, $start, $end ) {
+ global $wgTranslateMessageNamespaces;
+
+ $db = wfGetDB( DB_REPLICA );
+
+ $tables = [ 'recentchanges' ];
+ $fields = [ 'rc_timestamp' ];
+ $joins = [];
+
+ $conds = [
+ 'rc_namespace' => $wgTranslateMessageNamespaces,
+ 'rc_bot' => 0,
+ 'rc_type != ' . RC_LOG,
+ ];
+
+ $timeConds = self::makeTimeCondition( 'rc_timestamp', $start, $end );
+ $conds = array_merge( $conds, $timeConds );
+
+ $options = [ 'ORDER BY' => 'rc_timestamp' ];
+
+ $this->groups = array_map( [ MessageGroups::class, 'normalizeId' ], $this->opts->getGroups() );
+
+ $namespaces = self::namespacesFromGroups( $this->groups );
+ if ( count( $namespaces ) ) {
+ $conds['rc_namespace'] = $namespaces;
+ }
+
+ $languages = [];
+ foreach ( $this->opts->getLanguages() as $code ) {
+ $languages[] = 'rc_title ' . $db->buildLike( $db->anyString(), "/$code" );
+ }
+ if ( count( $languages ) ) {
+ $conds[] = $db->makeList( $languages, LIST_OR );
+ }
+
+ $fields[] = 'rc_title';
+
+ if ( $this->groups ) {
+ $fields[] = 'rc_namespace';
+ }
+
+ if ( $this->opts->getValue( 'count' ) === 'users' ) {
+ $fields[] = 'rc_actor';
+ }
+
+ $type .= '-perlang';
+ }
+
+ public function indexOf( $row ) {
+ if ( $this->opts->getValue( 'count' ) === 'users' ) {
+ $date = $this->formatTimestamp( $row->rc_timestamp );
+
+ if ( isset( $this->seenUsers[$date][$row->rc_actor] ) ) {
+ return false;
+ }
+
+ $this->seenUsers[$date][$row->rc_actor] = true;
+ }
+
+ // Do not consider language-less pages.
+ if ( strpos( $row->rc_title, '/' ) === false ) {
+ return false;
+ }
+
+ // No filters, just one key to track.
+ if ( !$this->groups && !$this->opts->getLanguages() ) {
+ return [ 'all' ];
+ }
+
+ // The key-building needs to be in sync with ::labels().
+ [ $key, $code ] = TranslateUtils::figureMessage( $row->rc_title );
+
+ $groups = [];
+ $codes = [];
+
+ if ( $this->groups ) {
+ /*
+ * Get list of keys that the message belongs to, and filter
+ * out those which are not requested.
+ */
+ $groups = TranslateUtils::messageKeyToGroups( $row->rc_namespace, $key );
+ $groups = array_intersect( $this->groups, $groups );
+ }
+
+ if ( $this->opts->getLanguages() ) {
+ $codes = [ $code ];
+ }
+
+ return $this->combineTwoArrays( $groups, $codes );
+ }
+
+ public function labels() {
+ return $this->combineTwoArrays( $this->groups, $this->opts->getLanguages() );
+ }
+
+ public function getTimestamp( $row ) {
+ return $row->rc_timestamp;
+ }
+
+ /**
+ * Makes a label for variable. If group or language code filters, or both
+ * are used, combine those in a pretty way.
+ * @param string $group Group name.
+ * @param string $code Language code.
+ * @return string Label.
+ */
+ protected function makeLabel( $group, $code ) {
+ if ( $group || $code ) {
+ return "$group@$code";
+ } else {
+ return 'all';
+ }
+ }
+
+ /**
+ * Cross-product of two lists with string results, where either
+ * list can be empty.
+ * @param string[] $groups Group names.
+ * @param string[] $codes Language codes.
+ * @return string[] Labels.
+ */
+ protected function combineTwoArrays( $groups, $codes ) {
+ if ( !count( $groups ) ) {
+ $groups[] = false;
+ }
+
+ if ( !count( $codes ) ) {
+ $codes[] = false;
+ }
+
+ $items = [];
+ foreach ( $groups as $group ) {
+ foreach ( $codes as $code ) {
+ $items[] = $this->makeLabel( $group, $code );
+ }
+ }
+
+ return $items;
+ }
+
+ /**
+ * Returns unique index for given item in the scale being used.
+ * Called a lot, so performance intensive.
+ * @param string $timestamp Timestamp in mediawiki format.
+ * @return string
+ */
+ protected function formatTimestamp( $timestamp ) {
+ switch ( $this->opts->getValue( 'scale' ) ) {
+ case 'hours':
+ $cut = 4;
+ break;
+ case 'days':
+ $cut = 6;
+ break;
+ case 'months':
+ $cut = 8;
+ break;
+ case 'years':
+ $cut = 10;
+ break;
+ default:
+ return MediaWikiServices::getInstance()->getContentLanguage()
+ ->sprintfDate( $this->getDateFormat(), $timestamp );
+ }
+
+ return substr( $timestamp, 0, -$cut );
+ }
+}
diff --git a/Translate/src/Statistics/TranslateRegistrationStats.php b/Translate/src/Statistics/TranslateRegistrationStats.php
new file mode 100644
index 00000000..fe605f15
--- /dev/null
+++ b/Translate/src/Statistics/TranslateRegistrationStats.php
@@ -0,0 +1,25 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Statistics;
+
+/**
+ * Graph which provides statistics about amount of registered users in a given time.
+ * @ingroup Stats
+ * @license GPL-2.0-or-later
+ * @since 2010.07
+ */
+class TranslateRegistrationStats extends TranslationStatsBase {
+ public function preQuery( &$tables, &$fields, &$conds, &$type, &$options, &$joins, $start, $end ) {
+ $tables = 'user';
+ $fields = 'user_registration';
+ $conds = self::makeTimeCondition( 'user_registration', $start, $end );
+ $type .= '-registration';
+ $options = [];
+ $joins = [];
+ }
+
+ public function getTimestamp( $row ) {
+ return $row->user_registration;
+ }
+}
diff --git a/Translate/src/Statistics/TranslationStatsBase.php b/Translate/src/Statistics/TranslationStatsBase.php
new file mode 100644
index 00000000..b7191151
--- /dev/null
+++ b/Translate/src/Statistics/TranslationStatsBase.php
@@ -0,0 +1,77 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Statistics;
+
+use MessageGroups;
+
+/**
+ * Provides some hand default implementations for TranslationStatsInterface.
+ * @ingroup Stats
+ * @license GPL-2.0-or-later
+ * @since 2010.07
+ */
+abstract class TranslationStatsBase implements TranslationStatsInterface {
+ /** @var TranslationStatsGraphOptions */
+ protected $opts;
+
+ public function __construct( TranslationStatsGraphOptions $opts ) {
+ $this->opts = $opts;
+ }
+
+ public function indexOf( $row ) {
+ return [ 'all' ];
+ }
+
+ public function labels() {
+ return [ 'all' ];
+ }
+
+ public function getDateFormat() {
+ $dateFormat = 'Y-m-d';
+ $scale = $this->opts->getValue( 'scale' );
+ if ( $scale === 'years' ) {
+ $dateFormat = 'Y';
+ } elseif ( $scale === 'months' ) {
+ $dateFormat = 'Y-m';
+ } elseif ( $scale === 'weeks' ) {
+ $dateFormat = 'Y-\WW';
+ } elseif ( $scale === 'hours' ) {
+ $dateFormat .= ';H';
+ }
+
+ return $dateFormat;
+ }
+
+ protected static function makeTimeCondition( $field, $start, $end ) {
+ $db = wfGetDB( DB_REPLICA );
+
+ $conds = [];
+ if ( $start !== null ) {
+ $conds[] = "$field >= " . $db->addQuotes( $db->timestamp( $start ) );
+ }
+ if ( $end !== null ) {
+ $conds[] = "$field <= " . $db->addQuotes( $db->timestamp( $end ) );
+ }
+
+ return $conds;
+ }
+
+ /**
+ * @since 2012-03-05
+ * @param array $groupIds
+ * @return array
+ */
+ protected static function namespacesFromGroups( $groupIds ) {
+ $namespaces = [];
+ foreach ( $groupIds as $id ) {
+ $group = MessageGroups::getGroup( $id );
+ if ( $group ) {
+ $namespace = $group->getNamespace();
+ $namespaces[$namespace] = true;
+ }
+ }
+
+ return array_keys( $namespaces );
+ }
+}
diff --git a/Translate/src/Statistics/TranslationStatsDataProvider.php b/Translate/src/Statistics/TranslationStatsDataProvider.php
new file mode 100644
index 00000000..763eb2d0
--- /dev/null
+++ b/Translate/src/Statistics/TranslationStatsDataProvider.php
@@ -0,0 +1,246 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Statistics;
+
+use Language;
+use MediaWiki\Config\ServiceOptions;
+use MessageGroups;
+use TranslateUtils;
+use Wikimedia\ObjectFactory\ObjectFactory;
+use const TS_MW;
+
+/**
+ * Provides translation stats data
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2020.09
+ */
+class TranslationStatsDataProvider {
+ public const CONSTRUCTOR_OPTIONS = [
+ 'TranslateStatsProviders'
+ ];
+
+ /** @var ObjectFactory */
+ private $objectFactory;
+ /** @var ServiceOptions */
+ private $options;
+
+ public function __construct( ServiceOptions $options, ObjectFactory $objectFactory ) {
+ $this->options = $options;
+ $this->objectFactory = $objectFactory;
+ }
+
+ private function getGraphSpecifications(): array {
+ return array_filter( $this->options->get( 'TranslateStatsProviders' ) );
+ }
+
+ public function getGraphTypes(): array {
+ return array_keys( $this->getGraphSpecifications() );
+ }
+
+ /**
+ * Fetches and preprocesses graph data that can be fed to graph drawer.
+ * @param TranslationStatsGraphOptions $opts
+ * @param Language $language
+ * @return array ( string => array ) Data indexed by their date labels.
+ */
+ public function getGraphData( TranslationStatsGraphOptions $opts, Language $language ): array {
+ $dbr = wfGetDB( DB_REPLICA );
+
+ $so = $this->getStatsProvider( $opts->getValue( 'count' ), $opts );
+
+ $fixedStart = $opts->getValue( 'start' ) !== '';
+
+ $now = time();
+ $period = 3600 * 24 * $opts->getValue( 'days' );
+
+ if ( $fixedStart ) {
+ $cutoff = (int)wfTimestamp( TS_UNIX, $opts->getValue( 'start' ) );
+ } else {
+ $cutoff = $now - $period;
+ }
+ $cutoff = self::roundTimestampToCutoff( $opts->getValue( 'scale' ), $cutoff, 'earlier' );
+
+ $start = $cutoff;
+
+ if ( $fixedStart ) {
+ $end = self::roundTimestampToCutoff( $opts->getValue( 'scale' ), $start + $period, 'later' ) - 1;
+ } else {
+ $end = null;
+ }
+
+ $tables = [];
+ $fields = [];
+ $conds = [];
+ $type = __METHOD__;
+ $options = [];
+ $joins = [];
+
+ $so->preQuery( $tables, $fields, $conds, $type, $options, $joins, $start, $end );
+ $res = $dbr->select( $tables, $fields, $conds, $type, $options, $joins );
+ wfDebug( __METHOD__ . "-queryend\n" );
+
+ // Start processing the data
+ $dateFormat = $so->getDateFormat();
+ $increment = self::getIncrement( $opts->getValue( 'scale' ) );
+
+ $labels = $so->labels();
+ $keys = array_keys( $labels );
+ $values = array_pad( [], count( $labels ), 0 );
+ $defaults = array_combine( $keys, $values );
+
+ $data = [];
+ // Allow 10 seconds in the future for processing time
+ $lastValue = $end ?? $now + 10;
+ while ( $cutoff <= $lastValue ) {
+ $date = $language->sprintfDate( $dateFormat, wfTimestamp( TS_MW, $cutoff ) );
+ $cutoff += $increment;
+ $data[$date] = $defaults;
+ }
+ // Ensure $lastValue is within range, in case the loop above jumped over it
+ $data[$language->sprintfDate( $dateFormat, wfTimestamp( TS_MW, $lastValue ) )] = $defaults;
+
+ // Processing
+ $labelToIndex = array_flip( $labels );
+
+ foreach ( $res as $row ) {
+ $indexLabels = $so->indexOf( $row );
+ if ( $indexLabels === false ) {
+ continue;
+ }
+
+ foreach ( $indexLabels as $i ) {
+ if ( !isset( $labelToIndex[$i] ) ) {
+ continue;
+ }
+ $date = $language->sprintfDate( $dateFormat, $so->getTimestamp( $row ) );
+ // Ignore values outside range
+ if ( !isset( $data[$date] ) ) {
+ continue;
+ }
+
+ $data[$date][$labelToIndex[$i]]++;
+ }
+ }
+
+ // Don't display dummy label
+ if ( count( $labels ) === 1 && $labels[0] === 'all' ) {
+ $labels = [];
+ }
+
+ foreach ( $labels as &$label ) {
+ if ( strpos( $label, '@' ) === false ) {
+ continue;
+ }
+ [ $groupId, $code ] = explode( '@', $label, 2 );
+ if ( $code && $groupId ) {
+ $code = TranslateUtils::getLanguageName( $code, $language->getCode() ) . " ($code)";
+ $group = MessageGroups::getGroup( $groupId );
+ $group = $group ? $group->getLabel() : $groupId;
+ $label = "$group @ $code";
+ } elseif ( $code ) {
+ $label = TranslateUtils::getLanguageName( $code, $language->getCode() ) . " ($code)";
+ } elseif ( $groupId ) {
+ $group = MessageGroups::getGroup( $groupId );
+ $label = $group ? $group->getLabel() : $groupId;
+ }
+ }
+
+ // Indicator that the last value is not full
+ if ( $end === null ) {
+ // Warning: do not user array_splice, which does not preserve numerical keys
+ $last = end( $data );
+ $key = key( $data );
+ unset( $data[$key] );
+ $data[ "$key*" ] = $last;
+ }
+
+ return [ $labels, $data ];
+ }
+
+ /** @noinspection PhpIncompatibleReturnTypeInspection */
+ private function getStatsProvider( string $type, TranslationStatsGraphOptions $opts ): TranslationStatsInterface {
+ $specs = $this->getGraphSpecifications();
+ return $this->objectFactory->createObject(
+ $specs[$type],
+ [
+ 'allowClassName' => true,
+ 'extraArgs' => [ $opts ],
+ ]
+ );
+ }
+
+ /**
+ * Gets the closest earliest timestamp that corresponds to start of a
+ * period in given scale, like, midnight, monday or first day of the month.
+ */
+ private static function roundTimestampToCutoff(
+ string $scale, int $cutoff, string $direction = 'earlier'
+ ): int {
+ $dir = $direction === 'earlier' ? -1 : 1;
+
+ /* Ensure that the first item in the graph has full data even
+ * if it doesn't align with the given 'days' boundary */
+ if ( $scale === 'hours' ) {
+ $cutoff += self::roundingAddition( $cutoff, 3600, $dir );
+ } elseif ( $scale === 'days' ) {
+ $cutoff += self::roundingAddition( $cutoff, 86400, $dir );
+ } elseif ( $scale === 'weeks' ) {
+ /* Here we assume that week starts on monday, which does not
+ * always hold true. Go Xwards day by day until we are on monday */
+ while ( date( 'D', $cutoff ) !== 'Mon' ) {
+ $cutoff += $dir * 86400;
+ }
+ // Round to nearest day
+ $cutoff -= ( $cutoff % 86400 );
+ } elseif ( $scale === 'months' ) {
+ // Go Xwards/ day by day until we are on the first day of the month
+ while ( date( 'j', $cutoff ) !== '1' ) {
+ $cutoff += $dir * 86400;
+ }
+ // Round to nearest day
+ $cutoff -= ( $cutoff % 86400 );
+ } elseif ( $scale === 'years' ) {
+ // Go Xwards/ day by day until we are on the first day of the year
+ while ( date( 'z', $cutoff ) !== '0' ) {
+ $cutoff += $dir * 86400;
+ }
+ // Round to nearest day
+ $cutoff -= ( $cutoff % 86400 );
+ }
+
+ return $cutoff;
+ }
+
+ private static function roundingAddition( int $ts, int $amount, int $dir ): int {
+ if ( $dir === -1 ) {
+ return -1 * ( $ts % $amount );
+ } else {
+ return $amount - ( $ts % $amount );
+ }
+ }
+
+ /**
+ * Returns an increment in seconds for a given scale.
+ * The increment must be small enough that we will hit every item in the
+ * scale when using different multiples of the increment. It should be
+ * large enough to avoid hitting the same item multiple times.
+ */
+ private static function getIncrement( string $scale ): int {
+ $increment = 3600 * 24;
+ if ( $scale === 'years' ) {
+ $increment = 3600 * 24 * 350;
+ } elseif ( $scale === 'months' ) {
+ /* We use increment to fill up the values. Use number small enough
+ * to ensure we hit each month */
+ $increment = 3600 * 24 * 15;
+ } elseif ( $scale === 'weeks' ) {
+ $increment = 3600 * 24 * 7;
+ } elseif ( $scale === 'hours' ) {
+ $increment = 3600;
+ }
+
+ return $increment;
+ }
+}
diff --git a/Translate/src/Statistics/TranslationStatsGraphOptions.php b/Translate/src/Statistics/TranslationStatsGraphOptions.php
new file mode 100644
index 00000000..3eb6b8a2
--- /dev/null
+++ b/Translate/src/Statistics/TranslationStatsGraphOptions.php
@@ -0,0 +1,110 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Statistics;
+
+use FormOptions;
+
+/**
+ * Encapsulates graph options
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2020.09
+ */
+class TranslationStatsGraphOptions {
+ /** @var FormOptions */
+ private $formOptions;
+ /** @var string[] */
+ public const VALID_SCALES = [ 'years', 'months', 'weeks', 'days', 'hours' ];
+
+ public function __construct() {
+ $this->formOptions = new FormOptions();
+ $this->formOptions->add( 'preview', false );
+ $this->formOptions->add( 'language', [] );
+ $this->formOptions->add( 'count', 'edits' );
+ $this->formOptions->add( 'scale', 'days' );
+ $this->formOptions->add( 'days', 30 );
+ $this->formOptions->add( 'width', 800 );
+ $this->formOptions->add( 'height', 600 );
+ $this->formOptions->add( 'group', [] );
+ $this->formOptions->add( 'uselang', '' );
+ $this->formOptions->add( 'start', '' );
+ }
+
+ public function bindArray( array $inputs ): void {
+ foreach ( $inputs as $key => $value ) {
+ if ( $this->formOptions->validateName( $key ) ) {
+ $this->formOptions[$key] = $value;
+ }
+ }
+ }
+
+ public function hasValue( string $key ): bool {
+ return isset( $this->formOptions[$key] );
+ }
+
+ public function setValue( string $key, $value ): void {
+ $this->formOptions[$key] = $value;
+ }
+
+ public function getValue( string $key ) {
+ return $this->formOptions[$key];
+ }
+
+ public function normalize( array $validCounts ): void {
+ $this->formOptions->validateIntBounds( 'days', 1, 10000 );
+ $this->formOptions->validateIntBounds( 'width', 200, 1000 );
+ $this->formOptions->validateIntBounds( 'height', 200, 1000 );
+
+ if ( $this->formOptions['start'] !== '' ) {
+ $timestamp = wfTimestamp( TS_ISO_8601, $this->formOptions['start'] );
+ if ( $timestamp ) {
+ $this->formOptions['start'] = rtrim( $timestamp, 'Z' );
+ } else {
+ $this->formOptions['start'] = '';
+ }
+ }
+
+ if ( !in_array( $this->formOptions['scale'], self::VALID_SCALES ) ) {
+ $this->formOptions['scale'] = 'days';
+ }
+
+ if ( $this->formOptions['scale'] === 'hours' ) {
+ $this->formOptions->validateIntBounds( 'days', 1, 4 );
+ }
+
+ if ( !in_array( $this->formOptions['count'], $validCounts ) ) {
+ $this->formOptions['count'] = 'edits';
+ }
+
+ foreach ( [ 'group', 'language' ] as $t ) {
+ if ( is_string( $this->formOptions[$t] ) ) {
+ $this->formOptions[$t] = explode( ',', $this->formOptions[$t] );
+ }
+
+ $values = array_map( 'trim', $this->formOptions[$t] );
+ $values = array_splice( $values, 0, 4 );
+ if ( $t === 'group' ) {
+ // BC for old syntax which replaced _ to | which was not allowed
+ $values = preg_replace( '~^page_~', 'page-', $values );
+ }
+ $this->formOptions[$t] = $values;
+ }
+ }
+
+ public function getGroups(): array {
+ return $this->formOptions['group'];
+ }
+
+ public function getLanguages(): array {
+ return $this->formOptions['language'];
+ }
+
+ public function getFormOptions(): FormOptions {
+ return $this->formOptions;
+ }
+
+ public function boundValue( string $key, int $min, int $max ): void {
+ $this->formOptions->validateIntBounds( $key, $min, $max );
+ }
+}
diff --git a/Translate/src/Statistics/TranslationStatsInterface.php b/Translate/src/Statistics/TranslationStatsInterface.php
new file mode 100644
index 00000000..97cc9b05
--- /dev/null
+++ b/Translate/src/Statistics/TranslationStatsInterface.php
@@ -0,0 +1,66 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Statistics;
+
+use stdClass;
+
+/**
+ * Interface for producing different kinds of graphs.
+ * The graphs are based on data queried from the database.
+ *
+ * @ingroup Stats
+ * @license GPL-2.0-or-later
+ * @since 2010.07
+ */
+interface TranslationStatsInterface {
+ /**
+ * Constructor. The implementation can access the graph options, but not
+ * define new ones.
+ * @param TranslationStatsGraphOptions $opts
+ */
+ public function __construct( TranslationStatsGraphOptions $opts );
+
+ /**
+ * Query details that the graph must fill.
+ * @param array &$tables Empty list. Append table names.
+ * @param array &$fields Empty list. Append field names.
+ * @param array &$conds Empty array. Append select conditions.
+ * @param string &$type Append graph type (used to identify queries).
+ * @param array &$options Empty array. Append extra query options.
+ * @param array &$joins Empty array. Append extra join conditions.
+ * @param string $start Precalculated start cutoff timestamp
+ * @param string $end Precalculated end cutoff timestamp
+ */
+ public function preQuery( &$tables, &$fields, &$conds, &$type, &$options, &$joins, $start, $end );
+
+ /**
+ * Return the indexes which this result contributes to.
+ * Return 'all' if only one variable is measured. Return false if none.
+ * @param stdClass $row Database Result Row
+ * @return array|false
+ */
+ public function indexOf( $row );
+
+ /**
+ * Return the names of the variables being measured.
+ * Return 'all' if only one variable is measured. Must match indexes
+ * returned by indexOf() and contain them all.
+ * @return string[]
+ */
+ public function labels();
+
+ /**
+ * Return the timestamp associated with this result row.
+ * @param stdClass $row Database Result Row
+ * @return string Timestamp.
+ */
+ public function getTimestamp( $row );
+
+ /**
+ * Return time formatting string.
+ * @see Language::sprintfDate()
+ * @return string
+ */
+ public function getDateFormat();
+}
diff --git a/Translate/src/Statistics/TranslationStatsSpecialPage.php b/Translate/src/Statistics/TranslationStatsSpecialPage.php
new file mode 100644
index 00000000..25e03a7b
--- /dev/null
+++ b/Translate/src/Statistics/TranslationStatsSpecialPage.php
@@ -0,0 +1,250 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Statistics;
+
+use FormOptions;
+use Html;
+use MediaWiki\Extension\Translate\Utilities\JsSelectToInput;
+use MessageGroup;
+use MessageGroups;
+use SpecialPage;
+use TranslateUtils;
+use Xml;
+use XmlSelect;
+use function wfEscapeWikiText;
+
+/**
+ * Includable special page for generating graphs for statistics.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @author Siebrand Mazeland
+ * @license GPL-2.0-or-later
+ */
+class TranslationStatsSpecialPage extends SpecialPage {
+ /** @var TranslationStatsDataProvider */
+ private $dataProvider;
+ private const GRAPH_CONTAINER_ID = 'translationStatsGraphContainer';
+ private const GRAPH_CONTAINER_CLASS = 'mw-translate-translationstats-container';
+
+ public function __construct( TranslationStatsDataProvider $dataProvider ) {
+ parent::__construct( 'TranslationStats' );
+ $this->dataProvider = $dataProvider;
+ }
+
+ /** @inheritDoc */
+ public function isIncludable(): bool {
+ return true;
+ }
+
+ /** @inheritDoc */
+ protected function getGroupName(): string {
+ return 'translation';
+ }
+
+ /** @inheritDoc */
+ public function execute( $par ): void {
+ $graphOpts = new TranslationStatsGraphOptions();
+ $graphOpts->bindArray( $this->getRequest()->getValues() );
+
+ $pars = explode( ';', (string)$par );
+ foreach ( $pars as $item ) {
+ if ( strpos( $item, '=' ) === false ) {
+ continue;
+ }
+
+ [ $key, $value ] = array_map( 'trim', explode( '=', $item, 2 ) );
+ if ( $graphOpts->hasValue( $key ) ) {
+ $graphOpts->setValue( $key, $value );
+ }
+ }
+
+ $graphOpts->normalize( $this->dataProvider->getGraphTypes() );
+ $opts = $graphOpts->getFormOptions();
+
+ if ( $this->including() ) {
+ $this->getOutput()->addHTML( $this->embed( $opts ) );
+ } else {
+ $this->form( $opts );
+ }
+ }
+
+ /**
+ * Constructs the form which can be used to generate custom graphs.
+ *
+ * @suppress SecurityCheck-DoubleEscaped Intentionally outputting what user should type
+ */
+ private function form( FormOptions $opts ): void {
+ $script = $this->getConfig()->get( 'Script' );
+
+ $this->setHeaders();
+ $out = $this->getOutput();
+ $out->addModules( 'ext.translate.special.translationstats' );
+ $out->addHelpLink( 'Help:Extension:Translate/Statistics_and_reporting' );
+ $out->addWikiMsg( 'translate-statsf-intro' );
+ $out->addHTML(
+ Xml::fieldset( $this->msg( 'translate-statsf-options' )->text() ) . Html::openElement(
+ 'form',
+ [ 'action' => $script, 'id' => 'translationStatsConfig' ]
+ ) . Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() ) .
+ Html::hidden( 'preview', 1 ) . '<table>'
+ );
+ $submit = Xml::submitButton( $this->msg( 'translate-statsf-submit' )->text() );
+ $out->addHTML(
+ $this->eInput( 'width', $opts ) . $this->eInput( 'height', $opts ) .
+ '<tr><td colspan="2"><hr /></td></tr>' . $this->eInput( 'start', $opts, 24 ) .
+ $this->eInput( 'days', $opts ) .
+ $this->eRadio( 'scale', $opts, [ 'years', 'months', 'weeks', 'days', 'hours' ] ) .
+ $this->eRadio( 'count', $opts, $this->dataProvider->getGraphTypes() ) .
+ '<tr><td colspan="2"><hr /></td></tr>' . $this->eLanguage( 'language', $opts ) .
+ $this->eGroup( 'group', $opts ) . '<tr><td colspan="2"><hr /></td></tr>' .
+ '<tr><td colspan="2">' . $submit . '</td></tr>'
+ );
+ $out->addHTML( '</table></form></fieldset>' );
+ if ( !$opts['preview'] ) {
+ return;
+ }
+ $spiParams = [];
+ foreach ( $opts->getChangedValues() as $key => $v ) {
+ if ( $key === 'preview' ) {
+ continue;
+ }
+ if ( is_array( $v ) ) {
+ $v = implode( ',', $v );
+ if ( !strlen( $v ) ) {
+ continue;
+ }
+ }
+ $spiParams[] = $key . '=' . wfEscapeWikiText( $v );
+ }
+ if ( $spiParams ) {
+ $spiParams = '/' . implode( ';', $spiParams );
+ }
+ $titleText = $this->getPageTitle()->getPrefixedText();
+ $out->addHTML( Html::element( 'hr' ) );
+ // Element to render the graph
+ $out->addHTML(
+ Html::rawElement(
+ 'div',
+ [
+ 'id' => self::GRAPH_CONTAINER_ID,
+ 'style' => 'margin: 2em auto; display: block',
+ 'class' => self::GRAPH_CONTAINER_CLASS,
+ ]
+ )
+ );
+
+ $out->addHTML(
+ Html::element(
+ 'pre',
+ [ 'aria-label' => $this->msg( 'translate-statsf-embed' )->text() ],
+ "{{{$titleText}{$spiParams}}}"
+ )
+ );
+ }
+
+ /// Construct HTML for a table row with label and input in two columns.
+ private function eInput( string $name, FormOptions $opts, int $width = 4 ): string {
+ $value = $opts[$name];
+ return '<tr><td>' . $this->eLabel( $name ) . '</td><td>' .
+ Xml::input( $name, $width, $value, [ 'id' => $name ] ) . '</td></tr>' . "\n";
+ }
+
+ /// Construct HTML for a label for option.
+ private function eLabel( string $name ): string {
+ // Give grep a chance to find the usages:
+ // translate-statsf-width, translate-statsf-height, translate-statsf-start,
+ // translate-statsf-days, translate-statsf-scale, translate-statsf-count,
+ // translate-statsf-language, translate-statsf-group
+ $label = 'translate-statsf-' . $name;
+ $label = $this->msg( $label )->escaped();
+ return Xml::tags( 'label', [ 'for' => $name ], $label );
+ }
+
+ /// Construct HTML for a table row with label and radio input in two columns.
+ private function eRadio( string $name, FormOptions $opts, array $alts ): string {
+ // Give grep a chance to find the usages:
+ // translate-statsf-scale, translate-statsf-count
+ $label = 'translate-statsf-' . $name;
+ $label = $this->msg( $label )->escaped();
+ $s = '<tr><td>' . $label . '</td><td>';
+ $options = [];
+ foreach ( $alts as $alt ) {
+ $id = "$name-$alt";
+ $radio = Xml::radio(
+ $name,
+ $alt,
+ $alt === $opts[$name],
+ [ 'id' => $id ]
+ ) . ' ';
+ $options[] = $radio . ' ' . $this->eLabel( $id );
+ }
+ $s .= implode( ' ', $options );
+ $s .= '</td></tr>' . "\n";
+ return $s;
+ }
+
+ /// Construct HTML for a table row with label and language selector in two columns.
+ private function eLanguage( string $name, FormOptions $opts ): string {
+ $value = implode( ',', $opts[$name] );
+
+ $select = $this->languageSelector();
+ $select->setTargetId( 'language' );
+ return '<tr><td>' . $this->eLabel( $name ) . '</td><td>' . $select->getHtmlAndPrepareJS() .
+ '<br />' . Xml::input( $name, 20, $value, [ 'id' => $name ] ) . '</td></tr>' . "\n";
+ }
+
+ /// Construct a JavaScript enhanced language selector.
+ private function languageSelector(): JsSelectToInput {
+ $languages = TranslateUtils::getLanguageNames( $this->getLanguage()->getCode() );
+ ksort( $languages );
+ $selector = new XmlSelect( 'mw-language-selector', 'mw-language-selector' );
+ foreach ( $languages as $code => $name ) {
+ $selector->addOption( "$code - $name", $code );
+ }
+ return new JsSelectToInput( $selector );
+ }
+
+ /// Constructs HTML for a table row with label and group selector in two columns.
+ private function eGroup( string $name, FormOptions $opts ): string {
+ $value = implode( ',', $opts[$name] );
+
+ $select = $this->groupSelector();
+ $select->setTargetId( 'group' );
+ return '<tr><td>' . $this->eLabel( $name ) . '</td><td>' . $select->getHtmlAndPrepareJS() .
+ '<br />' . Xml::input( $name, 20, $value, [ 'id' => $name ] ) . '</td></tr>' . "\n";
+ }
+
+ /// Construct a JavaScript enhanced group selector.
+ private function groupSelector(): JsSelectToInput {
+ $groups = MessageGroups::singleton()->getGroups();
+ /** @var MessageGroup $group */
+ foreach ( $groups as $key => $group ) {
+ if ( !$group->exists() ) {
+ unset( $groups[$key] );
+ }
+ }
+ ksort( $groups );
+ $selector = new XmlSelect( 'mw-group-selector', 'mw-group-selector' );
+ /** @var MessageGroup $name */
+ foreach ( $groups as $code => $name ) {
+ $selector->addOption( $name->getLabel(), $code );
+ }
+ return new JsSelectToInput( $selector );
+ }
+
+ private function embed( FormOptions $opts ): string {
+ $this->getOutput()->addModules( 'ext.translate.translationstats.embedded' );
+ return Html::rawElement(
+ 'div',
+ [
+ 'class' => self::GRAPH_CONTAINER_CLASS,
+ ],
+ Html::hidden(
+ 'translationStatsGraphOptions',
+ json_encode( $opts->getAllValues() )
+ )
+ );
+ }
+}
diff --git a/Translate/src/Statistics/TranslatorActivity.php b/Translate/src/Statistics/TranslatorActivity.php
new file mode 100644
index 00000000..87c043c4
--- /dev/null
+++ b/Translate/src/Statistics/TranslatorActivity.php
@@ -0,0 +1,150 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Statistics;
+
+use BagOStuff;
+use InvalidArgumentException;
+use JobQueueGroup;
+use PoolCounterWorkViaCallback;
+use TranslateUtils;
+use Wikimedia\Timestamp\ConvertibleTimestamp;
+
+/**
+ * Handles caching of translator activity.
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2020.04
+ */
+class TranslatorActivity {
+ public const CACHE_TIME = 3 * 24 * 3600;
+ // 25 hours so that it's easy to configure the maintenance script run daily
+ public const CACHE_STALE = 25 * 3600;
+ private $cache;
+ private $query;
+ private $jobQueue;
+
+ public function __construct(
+ BagOStuff $cache,
+ TranslatorActivityQuery $query,
+ JobQueueGroup $jobQueue
+ ) {
+ $this->cache = $cache;
+ $this->query = $query;
+ $this->jobQueue = $jobQueue;
+ }
+
+ /**
+ * Get translations activity for a given language.
+ * @throws StatisticsUnavailable If loading statistics is temporarily not possible.
+ */
+ public function inLanguage( string $language ): array {
+ if ( !$this->isValidLanguage( $language ) ) {
+ throw new InvalidArgumentException( "Invalid language tag '$language'" );
+ }
+
+ $cachedValue = $this->getFromCache( $language );
+
+ if ( is_array( $cachedValue ) ) {
+ if ( $this->isStale( $cachedValue ) ) {
+ $this->queueCacheRefresh( $language );
+ }
+
+ return $cachedValue;
+ }
+
+ $queriedValue = $this->doQueryAndCache( $language );
+ if ( !$queriedValue ) {
+ throw new StatisticsUnavailable( "Unable to load stats" );
+ }
+
+ return $queriedValue;
+ }
+
+ private function getFromCache( string $language ) {
+ $cacheKey = $this->getCacheKey( $language );
+ return $this->cache->get( $cacheKey );
+ }
+
+ private function getCacheKey( string $language ): string {
+ return $this->cache->makeKey( 'translate-translator-activity-v4', $language );
+ }
+
+ private function isStale( array $value ): bool {
+ $age = intval( ConvertibleTimestamp::now( TS_UNIX ) ) - $value['asOfTime'];
+ return $age >= self::CACHE_STALE;
+ }
+
+ private function queueCacheRefresh( string $language ): void {
+ $job = UpdateTranslatorActivityJob::newJobForLanguage( $language );
+ $this->jobQueue->push( $job );
+ }
+
+ private function doQueryAndCache( string $language ) {
+ $now = (int)ConvertibleTimestamp::now( TS_UNIX );
+
+ $work = new PoolCounterWorkViaCallback(
+ 'TranslateFetchTranslators', "TranslateFetchTranslators-$language", [
+ 'doWork' => function () use ( $language, $now ) {
+ $users = $this->query->inLanguage( $language );
+ $data = [ 'users' => $users, 'asOfTime' => $now ];
+ $this->addToCache( $data, $language );
+ return $data;
+ },
+ 'doCachedWork' => function () use ( $language ) {
+ $data = $this->getFromCache( $language );
+ // Use new cache value from other thread
+ return is_array( $data ) ? $data : false;
+ },
+ ]
+ );
+
+ return $work->execute();
+ }
+
+ private function addToCache( array $value, string $language ): void {
+ $cacheKey = $this->getCacheKey( $language );
+ $this->cache->set( $cacheKey, $value, self::CACHE_TIME );
+ }
+
+ /** Update cache for all languages, even if not stale. */
+ public function updateAllLanguages(): void {
+ $now = (int)ConvertibleTimestamp::now( TS_UNIX );
+
+ $data = $this->query->inAllLanguages();
+ // In case there is no activity for a supported languages, cache empty results
+ $validLanguages = TranslateUtils::getLanguageNames( null );
+ foreach ( $validLanguages as $language ) {
+ $data[$language] = $data[$language] ?? [];
+ }
+
+ foreach ( $data as $language => $users ) {
+ if ( !$this->isValidLanguage( $language ) ) {
+ continue;
+ }
+
+ $data = [ 'users' => $users, 'asOfTime' => $now ];
+ $this->addToCache( $data, $language );
+ }
+ }
+
+ /**
+ * Update cache for one language, even if not stale.
+ * @throws StatisticsUnavailable If loading statistics is temporarily not possible.
+ */
+ public function updateLanguage( string $language ): void {
+ if ( !$this->isValidLanguage( $language ) ) {
+ throw new InvalidArgumentException( "Invalid language tag '$language'" );
+ }
+
+ $queriedValue = $this->doQueryAndCache( $language );
+ if ( !$queriedValue ) {
+ throw new StatisticsUnavailable( 'Unable to load stats' );
+ }
+ }
+
+ private function isValidLanguage( string $language ): bool {
+ return TranslateUtils::isSupportedLanguageCode( $language );
+ }
+}
diff --git a/Translate/src/Statistics/TranslatorActivityQuery.php b/Translate/src/Statistics/TranslatorActivityQuery.php
new file mode 100644
index 00000000..65e84b15
--- /dev/null
+++ b/Translate/src/Statistics/TranslatorActivityQuery.php
@@ -0,0 +1,123 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Statistics;
+
+use ActorMigration;
+use Config;
+use MediaWiki\Config\ServiceOptions;
+use Wikimedia\Rdbms\ILoadBalancer;
+
+/**
+ * Gathers translator activity from the database.
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2020.04
+ */
+class TranslatorActivityQuery {
+ public const USER_NAME = 0;
+ public const USER_TRANSLATIONS = 1;
+ public const USER_LAST_ACTIVITY = 2;
+ /** @var Config|ServiceOptions */
+ private $options;
+ /** @var ILoadBalancer */
+ private $loadBalancer;
+
+ public function __construct( $options, ILoadBalancer $loadBalancer ) {
+ $this->options = $options;
+ $this->loadBalancer = $loadBalancer;
+ }
+
+ /**
+ * Fetch the translators for a language
+ *
+ * @param string $code Language tag
+ * @return array<int,array<string|int|string>> Translation stats per user
+ */
+ public function inLanguage( string $code ): array {
+ $dbr = $this->loadBalancer->getConnection( DB_REPLICA, 'vslow' );
+
+ $actorQuery = ActorMigration::newMigration()->getJoin( 'rev_user' );
+
+ $tables = [ 'page', 'revision' ] + $actorQuery['tables'];
+ $fields = [
+ 'rev_user_text' => $actorQuery['fields']['rev_user_text'],
+ 'MAX(rev_timestamp) as lastedit',
+ 'count(page_id) as count',
+ ];
+ $conds = [
+ 'page_title' . $dbr->buildLike( $dbr->anyString(), '/', $code ),
+ 'page_namespace' => $this->options->get( 'TranslateMessageNamespaces' ),
+ ];
+ $options = [
+ 'GROUP BY' => $actorQuery['fields']['rev_user_text'],
+ 'ORDER BY' => 'NULL',
+ ];
+ $joins = [
+ 'revision' => [ 'JOIN', 'page_id=rev_page' ],
+ ] + $actorQuery['joins'];
+
+ $res = $dbr->select( $tables, $fields, $conds, __METHOD__, $options, $joins );
+
+ $data = [];
+ foreach ( $res as $row ) {
+ // Warning: user names may be numbers that get casted to ints in array keys
+ $data[] = [
+ self::USER_NAME => $row->rev_user_text,
+ self::USER_TRANSLATIONS => (int)$row->count,
+ self::USER_LAST_ACTIVITY => $row->lastedit,
+ ];
+ }
+
+ return $data;
+ }
+
+ /**
+ * Fetch the translators for all languages.
+ *
+ * This is faster than doing each language separately.
+ *
+ * @return array<string,array<int,array<string|int|string>>> Map of language tags to
+ * translation stats per user
+ */
+ public function inAllLanguages(): array {
+ $dbr = $this->loadBalancer->getConnection( DB_REPLICA, 'vslow' );
+
+ $actorQuery = ActorMigration::newMigration()->getJoin( 'rev_user' );
+
+ $tables = [ 'page', 'revision' ] + $actorQuery['tables'];
+ $fields = [
+ 'rev_user_text' => $actorQuery['fields']['rev_user_text'],
+ 'substring_index(page_title, \'/\', -1) as lang',
+ 'MAX(rev_timestamp) as lastedit',
+ 'count(page_id) as count',
+ ];
+ $conds = [
+ 'page_title' . $dbr->buildLike( $dbr->anyString(), '/', $dbr->anyString() ),
+ 'page_namespace' => $this->options->get( 'TranslateMessageNamespaces' ),
+ ];
+ $options = [
+ 'GROUP BY' => [ 'lang', $actorQuery['fields']['rev_user_text'] ],
+ 'ORDER BY' => 'NULL',
+ ];
+
+ $joins = [
+ 'revision' => [ 'JOIN', 'page_id=rev_page' ],
+ ] + $actorQuery['joins'];
+
+ $res = $dbr->select( $tables, $fields, $conds, __METHOD__, $options, $joins );
+
+ $data = [];
+ foreach ( $res as $row ) {
+ // Warning: user names may be numbers that get casted to ints in array keys
+ $data[$row->lang][] = [
+ self::USER_NAME => $row->rev_user_text,
+ self::USER_TRANSLATIONS => (int)$row->count,
+ self::USER_LAST_ACTIVITY => $row->lastedit,
+ ];
+ }
+
+ return $data;
+ }
+}
diff --git a/Translate/src/Statistics/UpdateTranslatorActivityJob.php b/Translate/src/Statistics/UpdateTranslatorActivityJob.php
new file mode 100644
index 00000000..8ed24361
--- /dev/null
+++ b/Translate/src/Statistics/UpdateTranslatorActivityJob.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+namespace MediaWiki\Extension\Translate\Statistics;
+
+use GenericParameterJob;
+use MediaWiki\Extension\Translate\Jobs\GenericTranslateJob;
+use MediaWiki\Extension\Translate\Services;
+
+/** @since 2020.04 */
+class UpdateTranslatorActivityJob extends GenericTranslateJob implements GenericParameterJob {
+ public function __construct( array $params ) {
+ parent::__construct( 'UpdateTranslatorActivity', $params );
+ $this->removeDuplicates = true;
+ }
+
+ public static function newJobForLanguage( string $language ): self {
+ return new self( [ 'language' => $language ] );
+ }
+
+ public function run() {
+ $activity = Services::getInstance()->getTranslatorActivity();
+
+ try {
+ $activity->updateLanguage( $this->getParams()['language'] );
+ } catch ( StatisticsUnavailable $e ) {
+ $this->logInfo( $e->getMessage() );
+ // The job will be retried according to JobQueue configuration
+ return false;
+ }
+
+ return true;
+ }
+}
diff --git a/Translate/src/Statistics/UpdateTranslatorActivityMaintenanceScript.php b/Translate/src/Statistics/UpdateTranslatorActivityMaintenanceScript.php
new file mode 100644
index 00000000..7ebd0d40
--- /dev/null
+++ b/Translate/src/Statistics/UpdateTranslatorActivityMaintenanceScript.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+namespace MediaWiki\Extension\Translate\Statistics;
+
+use Maintenance;
+use MediaWiki\Extension\Translate\Services;
+
+/** @since 2020.04 */
+class UpdateTranslatorActivityMaintenanceScript extends Maintenance {
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Updates cached translator activity statistics' );
+ $this->requireExtension( 'Translate' );
+ }
+
+ public function execute() {
+ Services::getInstance()->getTranslatorActivity()->updateAllLanguages();
+ $this->output( "Done.\n" );
+ }
+}
diff --git a/Translate/src/Synchronization/BackportTranslationsMaintenanceScript.php b/Translate/src/Synchronization/BackportTranslationsMaintenanceScript.php
new file mode 100644
index 00000000..02373402
--- /dev/null
+++ b/Translate/src/Synchronization/BackportTranslationsMaintenanceScript.php
@@ -0,0 +1,306 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Synchronization;
+
+use FileBasedMessageGroup;
+use JsonFFS;
+use MediaWiki\Extension\Translate\Utilities\BaseMaintenanceScript;
+use MediaWiki\Logger\LoggerFactory;
+use MessageGroups;
+use RuntimeException;
+use SimpleFFS;
+use TranslateUtils;
+
+/**
+ * Script to backport translations from one branch to another.
+ *
+ * @since 2021.05
+ * @license GPL-2.0-or-later
+ * @author Niklas Laxström
+ */
+class BackportTranslationsMaintenanceScript extends BaseMaintenanceScript {
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Backport translations from one branch to another.' );
+
+ $this->addOption(
+ 'group',
+ 'Comma separated list of message group IDs (supports * wildcard) to backport',
+ self::REQUIRED,
+ self::HAS_ARG
+ );
+ $this->addOption(
+ 'source-path',
+ 'Source path for reading updated translations. Defaults to $wgTranslateGroupRoot.',
+ self::OPTIONAL,
+ self::HAS_ARG
+ );
+ $this->addOption(
+ 'target-path',
+ 'Target path for writing backported translations',
+ self::REQUIRED,
+ self::HAS_ARG
+ );
+ $this->addOption(
+ 'filter-path',
+ 'Only export a group if its export path matches this prefix (relative to target-path)',
+ self::OPTIONAL,
+ self::HAS_ARG
+ );
+ $this->addOption(
+ 'never-export-languages',
+ 'Languages to not export',
+ self::OPTIONAL,
+ self::HAS_ARG
+ );
+ $this->requireExtension( 'Translate' );
+ }
+
+ /** @inheritDoc */
+ public function execute() {
+ $config = $this->getConfig();
+ $logger = LoggerFactory::getInstance( 'Translate.GroupSynchronization' );
+ $groupPattern = $this->getOption( 'group' ) ?? '';
+ $logger->info(
+ 'Starting backports for groups {groups}',
+ [ 'groups' => $groupPattern ]
+ );
+
+ $sourcePath = $this->getOption( 'source-path' ) ?: $config->get( 'TranslateGroupRoot' );
+ if ( !is_readable( $sourcePath ) ) {
+ $this->fatalError( "Source directory is not readable ($sourcePath)." );
+ }
+
+ $targetPath = $this->getOption( 'target-path' );
+ if ( !is_writable( $targetPath ) ) {
+ $this->fatalError( "Target directory is not writable ($targetPath)." );
+ }
+
+ $groupIds = MessageGroups::expandWildcards( explode( ',', trim( $groupPattern ) ) );
+ $groups = MessageGroups::getGroupsById( $groupIds );
+ if ( $groups === [] ) {
+ $this->fatalError( "Pattern $groupPattern did not match any message groups." );
+ }
+
+ $neverExportLanguages = $this->csv2array(
+ $this->getOption( 'never-export-languages' ) ?? ''
+ );
+ $supportedLanguages = TranslateUtils::getLanguageNames( 'en' );
+
+ foreach ( $groups as $group ) {
+ $groupId = $group->getId();
+ if ( !$group instanceof FileBasedMessageGroup ) {
+ if ( !$this->hasOption( 'filter-path' ) ) {
+ $this->error( "Skipping $groupId: Not instance of FileBasedMessageGroup" );
+ }
+ continue;
+ }
+
+ if ( !$group->getFFS() instanceof JsonFFS ) {
+ $this->error( "Skipping $groupId: Only JSON format is supported" );
+ continue;
+ }
+
+ if ( $this->hasOption( 'filter-path' ) ) {
+ $filter = $this->getOption( 'filter-path' );
+ $exportPath = $group->getTargetFilename( '*' );
+ if ( !$this->matchPath( $filter, $exportPath ) ) {
+ continue;
+ }
+ }
+
+ /** @var FileBasedMessageGroup $group */
+ $sourceLanguage = $group->getSourceLanguage();
+ try {
+ $sourceDefinitions = $this->loadDefinitions( $group, $sourcePath, $sourceLanguage );
+ $targetDefinitions = $this->loadDefinitions( $group, $targetPath, $sourceLanguage );
+ } catch ( RuntimeException $e ) {
+ $this->output(
+ "Skipping $groupId: Error while loading definitions: {$e->getMessage()}\n"
+ );
+ continue;
+ }
+
+ $keyCompatibilityMap = $this->getKeyCompatibilityMap(
+ $sourceDefinitions['MESSAGES'],
+ $targetDefinitions['MESSAGES'],
+ $group->getFFS()
+ );
+
+ if ( array_filter( $keyCompatibilityMap ) === [] ) {
+ $this->output( "Skipping $groupId: No compatible keys found\n" );
+ continue;
+ }
+
+ $summary = [];
+ $languages = array_keys( $group->getTranslatableLanguages() ?? $supportedLanguages );
+ $languagesToSkip = $neverExportLanguages;
+ $languagesToSkip[] = $sourceLanguage;
+ $languages = array_diff( $languages, $languagesToSkip );
+
+ foreach ( $languages as $language ) {
+ $status = $this->backport(
+ $group,
+ $sourcePath,
+ $targetPath,
+ $keyCompatibilityMap,
+ $language
+ );
+
+ $summary[$status][] = $language;
+ }
+
+ $numUpdated = count( $summary[ 'updated' ] ?? [] );
+ $numAdded = count( $summary[ 'new' ] ?? [] );
+ if ( ( $numUpdated + $numAdded ) > 0 ) {
+ $this->output(
+ sprintf(
+ "%s: Compatible keys: %d. Updated %d languages, %d new (%s)\n",
+ $group->getId(),
+ count( $keyCompatibilityMap ),
+ $numUpdated,
+ $numAdded,
+ implode( ', ', $summary[ 'new' ] ?? [] )
+ )
+ );
+ }
+ }
+ }
+
+ private function csv2array( string $input ): array {
+ return array_filter(
+ array_map( 'trim', explode( ',', $input ) ),
+ static function ( $v ) {
+ return $v !== '';
+ }
+ );
+ }
+
+ private function matchPath( string $prefix, string $full ): bool {
+ $prefix = "./$prefix";
+ $length = strlen( $prefix );
+ return substr( $full, 0, $length ) === $prefix;
+ }
+
+ private function loadDefinitions(
+ FileBasedMessageGroup $group,
+ string $path,
+ string $language
+ ): array {
+ $file = $path . '/' . $group->getTargetFilename( $language );
+
+ if ( !file_exists( $file ) ) {
+ throw new RuntimeException( "File $file does not exist" );
+ }
+
+ $contents = file_get_contents( $file );
+ return $group->getFFS()->readFromVariable( $contents );
+ }
+
+ /**
+ * Compares two arrays and returns a new array with keys from the target array with associated values
+ * being a boolean indicating whether the source array value is compatible with the target array value.
+ *
+ * Target array key order was chosen because in backporting we want to use the order of keys in the
+ * backport target (stable branch). Comparison is done with SimpleFFS::isContentEqual.
+ *
+ * @return array<string,bool> Keys in target order
+ */
+ private function getKeyCompatibilityMap( array $source, array $target, SimpleFFS $ffs ): array {
+ $keys = [];
+ foreach ( $target as $key => $value ) {
+ $keys[$key] = isset( $source[ $key ] ) && $ffs->isContentEqual( $source[ $key ], $value );
+ }
+ return $keys;
+ }
+
+ private function backport(
+ FileBasedMessageGroup $group,
+ string $source,
+ string $targetPath,
+ array $keyCompatibilityMap,
+ string $language
+ ): string {
+ try {
+ $sourceTemplate = $this->loadDefinitions( $group, $source, $language );
+ } catch ( RuntimeException $e ) {
+ return 'no definitions';
+ }
+
+ try {
+ $targetTemplate = $this->loadDefinitions( $group, $targetPath, $language );
+ } catch ( RuntimeException $e ) {
+ $targetTemplate = [
+ 'MESSAGES' => [],
+ 'AUTHORS' => [],
+ ];
+ }
+
+ // Amend the target with compatible things from the source
+ $hasUpdates = false;
+
+ $ffs = $group->getFFS();
+
+ // This has been checked before, but checking again to keep Phan and IDEs happy.
+ // Remove once support for other FFS are added.
+ if ( !$ffs instanceof JsonFFS ) {
+ throw new RuntimeException(
+ "Expected FFS type: " . JsonFFS::class . '; got: ' . get_class( $ffs )
+ );
+ }
+
+ $combinedMessages = [];
+ // $keyCompatibilityMap has the target (stable branch) source language key order
+ foreach ( $keyCompatibilityMap as $key => $isCompatible ) {
+ $sourceValue = $sourceTemplate['MESSAGES'][$key] ?? null;
+ $targetValue = $targetTemplate['MESSAGES'][$key] ?? null;
+
+ // Use existing translation value from the target (stable branch) as the default
+ if ( $targetValue !== null ) {
+ $combinedMessages[$key] = $targetValue;
+ }
+
+ // If the source (development branch) has a different translation for a compatible key
+ // replace the target (stable branch) translation with it.
+ if ( !$isCompatible ) {
+ continue;
+ }
+ if ( $sourceValue !== null && !$ffs->isContentEqual( $sourceValue, $targetValue ) ) {
+ // Keep track if we actually overwrote any values, so we can report back stats
+ $hasUpdates = true;
+ $combinedMessages[$key] = $sourceValue;
+ }
+ }
+
+ if ( !$hasUpdates ) {
+ return 'no updates';
+ }
+
+ // Copy over all authors (we do not know per-message level)
+ $combinedAuthors = array_merge(
+ $targetTemplate[ 'AUTHORS' ] ?? [],
+ $sourceTemplate[ 'AUTHORS' ] ?? []
+ );
+ $combinedAuthors = array_unique( $combinedAuthors );
+ $combinedAuthors = $ffs->filterAuthors( $combinedAuthors, $language );
+
+ $targetTemplate['AUTHORS'] = $combinedAuthors;
+ $targetTemplate['MESSAGES'] = $combinedMessages;
+
+ $backportedContent = $ffs->generateFile( $targetTemplate );
+
+ $targetFilename = $targetPath . '/' . $group->getTargetFilename( $language );
+ if ( file_exists( $targetFilename ) ) {
+ $currentContent = file_get_contents( $targetFilename );
+
+ if ( $ffs->shouldOverwrite( $currentContent, $backportedContent ) ) {
+ file_put_contents( $targetFilename, $backportedContent );
+ }
+ return 'updated';
+ } else {
+ file_put_contents( $targetFilename, $backportedContent );
+ return 'new';
+ }
+ }
+}
diff --git a/Translate/src/Synchronization/ClearGroupSyncCacheMaintenanceScript.php b/Translate/src/Synchronization/ClearGroupSyncCacheMaintenanceScript.php
new file mode 100644
index 00000000..d5cf1568
--- /dev/null
+++ b/Translate/src/Synchronization/ClearGroupSyncCacheMaintenanceScript.php
@@ -0,0 +1,83 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Synchronization;
+
+use MediaWiki\Extension\Translate\Services;
+use MediaWiki\Extension\Translate\Utilities\BaseMaintenanceScript;
+use MediaWiki\MediaWikiServices;
+
+/**
+ * Clear the contents of the group synchronization cache
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2021.01
+ */
+class ClearGroupSyncCacheMaintenanceScript extends BaseMaintenanceScript {
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Clear the contents of the group synchronization cache for a single or all groups' );
+
+ $this->addOption(
+ 'group',
+ '(optional) Group Id being cleared',
+ self::OPTIONAL,
+ self::HAS_ARG
+ );
+ $this->addOption(
+ 'all',
+ '(optional) Clear all groups'
+ );
+
+ $this->requireExtension( 'Translate' );
+ }
+
+ public function execute() {
+ $config = MediaWikiServices::getInstance()->getMainConfig();
+
+ if ( !$config->get( 'TranslateGroupSynchronizationCache' ) ) {
+ $this->fatalError( 'GroupSynchronizationCache is not enabled' );
+ }
+
+ $this->validateParamsAndArgs();
+ $groupId = $this->getOption( 'group' );
+ $all = $this->hasOption( 'all' );
+ $groupSyncCache = Services::getInstance()->getGroupSynchronizationCache();
+
+ if ( $groupId ) {
+ $this->clearGroupFromSync( $groupSyncCache, $groupId );
+ $this->output( "Ended synchronization for group: $groupId\n" );
+ } elseif ( $all ) {
+ // Remove all groups
+ $groupsInSync = $groupSyncCache->getGroupsInSync();
+ $this->output( 'Found ' . count( $groupsInSync ) . " groups in sync.\n" );
+ foreach ( $groupsInSync as $groupId ) {
+ $this->clearGroupFromSync( $groupSyncCache, $groupId );
+ $this->output( "Ended synchronization for group: $groupId\n" );
+ }
+ }
+ }
+
+ public function validateParamsAndArgs() {
+ parent::validateParamsAndArgs();
+
+ $group = $this->getOption( 'group' );
+ $all = $this->hasOption( 'all' );
+
+ if ( $all && $group !== null ) {
+ $this->fatalError( 'The "all" and "group" options cannot be used together.' );
+ }
+
+ if ( !$all && $group === null ) {
+ $this->fatalError( 'One of "all" OR "group" options must be specified.' );
+ }
+ }
+
+ private function clearGroupFromSync( GroupSynchronizationCache $groupSyncCache, string $groupId ): void {
+ if ( !$groupSyncCache->isGroupBeingProcessed( $groupId ) ) {
+ $this->fatalError( "$groupId is currently not being processed" );
+ }
+
+ $groupSyncCache->forceEndSync( $groupId );
+ }
+}
diff --git a/Translate/src/Synchronization/CompleteExternalTranslationMaintenanceScript.php b/Translate/src/Synchronization/CompleteExternalTranslationMaintenanceScript.php
new file mode 100644
index 00000000..729caf52
--- /dev/null
+++ b/Translate/src/Synchronization/CompleteExternalTranslationMaintenanceScript.php
@@ -0,0 +1,93 @@
+<?php
+
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Synchronization;
+
+use Maintenance;
+use MediaWiki\Extension\Translate\Services;
+use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\MediaWikiServices;
+use MessageIndexRebuildJob;
+
+/**
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2020.06
+ */
+class CompleteExternalTranslationMaintenanceScript extends Maintenance {
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription(
+ 'Check and run MessageIndexRebuild and MessageGroupStats update once ' .
+ 'MessageUpdateJobs are done. Intended to be run periodically'
+ );
+ $this->requireExtension( 'Translate' );
+ }
+
+ public function execute() {
+ $mwServices = MediaWikiServices::getInstance();
+ $config = $mwServices->getMainConfig();
+
+ if ( !$config->get( 'TranslateGroupSynchronizationCache' ) ) {
+ $this->fatalError( 'GroupSynchronizationCache is not enabled' );
+ }
+
+ $logger = LoggerFactory::getInstance( 'Translate.GroupSynchronization' );
+ $groupSyncCache = Services::getInstance()->getGroupSynchronizationCache();
+ $groupsInSync = $groupSyncCache->getGroupsInSync();
+ if ( !$groupsInSync ) {
+ $logger->info( 'All message groups are in sync' );
+ return;
+ }
+
+ $logger->info( 'Group synchronization is in progress' );
+
+ $groupsInProgress = [];
+ foreach ( $groupsInSync as $groupId ) {
+ $groupResponse = $groupSyncCache->getSynchronizationStatus( $groupId );
+
+ if ( $groupResponse->isDone() ) {
+ $groupSyncCache->endSync( $groupId );
+ continue;
+ }
+
+ if ( $groupResponse->hasTimedOut() ) {
+ $remainingMessages = $groupResponse->getRemainingMessages();
+ $logger->warning(
+ 'MessageUpdateJobs timed out for group - {groupId}; ' .
+ 'Messages - {messages}; ' .
+ 'Jobs remaining - {jobRemaining}',
+ [
+ 'groupId' => $groupId ,
+ 'jobRemaining' => count( $remainingMessages ),
+ 'messages' => implode( ', ', array_keys( $remainingMessages ) )
+ ]
+ );
+
+ $count = count( $remainingMessages );
+ wfLogWarning( "MessageUpdateJob timed out for group $groupId with $count message(s) remaining" );
+ $groupSyncCache->forceEndSync( $groupId );
+
+ $groupSyncCache->addGroupErrors( $groupResponse );
+
+ } else {
+ $groupsInProgress[] = $groupId;
+ }
+ }
+
+ if ( !$groupsInProgress ) {
+ // No groups in progress.
+ $logger->info( 'All message groups are now in sync.' );
+ $mwServices->getJobQueueGroup()->push( MessageIndexRebuildJob::newJob() );
+ }
+
+ $logger->info(
+ "Script completed successfully. " .
+ "{inProgressGroupCount} group synchronization(s) is/are in progress",
+ [
+ 'inProgressGroupCount' => count( $groupsInProgress )
+ ]
+ );
+ }
+}
diff --git a/Translate/src/Synchronization/DisplayGroupSynchronizationInfo.php b/Translate/src/Synchronization/DisplayGroupSynchronizationInfo.php
new file mode 100644
index 00000000..e86634c8
--- /dev/null
+++ b/Translate/src/Synchronization/DisplayGroupSynchronizationInfo.php
@@ -0,0 +1,261 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Synchronization;
+
+use Html;
+use Language;
+use MediaWiki\Linker\LinkRenderer;
+use MessageLocalizer;
+use Title;
+
+/**
+ * Display Group synchronization related information
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2021.02
+ */
+class DisplayGroupSynchronizationInfo {
+ /** @var MessageLocalizer */
+ private $localizer;
+ /** @var LinkRenderer */
+ private $linkRenderer;
+
+ public function __construct( MessageLocalizer $localizer, LinkRenderer $linkRenderer ) {
+ $this->localizer = $localizer;
+ $this->linkRenderer = $linkRenderer;
+ }
+
+ /** @param string[] $groupsInSync */
+ public function getGroupsInSyncHtml( array $groupsInSync, string $wrapperClass ): string {
+ sort( $groupsInSync );
+
+ if ( !$groupsInSync ) {
+ return Html::rawElement(
+ 'p',
+ [ 'class' => $wrapperClass ],
+ $this->localizer->msg( 'translate-smg-no-groups-in-sync' )->escaped()
+ . $this->addGroupSyncHelp( $wrapperClass )
+ );
+ }
+
+ $htmlGroupItems = [];
+ foreach ( $groupsInSync as $groupId ) {
+ $htmlGroupItems[] = Html::element( 'li', [], $groupId );
+ }
+
+ return $this->getGroupSyncInfoHtml(
+ $wrapperClass,
+ 'translate-smg-groups-in-sync',
+ 'translate-smg-groups-in-sync-list',
+ Html::rawElement( 'ul', [], implode( '', $htmlGroupItems ) ),
+ $this->addGroupSyncHelp( $wrapperClass )
+ );
+ }
+
+ public function getHtmlForGroupsWithError(
+ GroupSynchronizationCache $groupSynchronizationCache,
+ string $wrapperClass,
+ Language $currentLang
+ ): string {
+ $groupsWithErrors = $groupSynchronizationCache->getGroupsWithErrors();
+ if ( !$groupsWithErrors ) {
+ return '';
+ }
+
+ $htmlGroupItems = [];
+ foreach ( $groupsWithErrors as $groupId ) {
+ $groupErrorResponse = $groupSynchronizationCache->getGroupErrorInfo( $groupId );
+ $htmlGroupItems[] = $this->getHtmlForGroupErrors( $groupErrorResponse, $currentLang, $wrapperClass );
+ }
+
+ return $this->getGroupSyncInfoHtml(
+ $wrapperClass . ' js-group-sync-groups-with-error',
+ 'translate-smg-groups-with-error-title',
+ 'translate-smg-groups-with-error-desc',
+ implode( '', $htmlGroupItems )
+ );
+ }
+
+ private function addGroupSyncHelp( string $wrapperClass ): string {
+ return Html::element(
+ 'a',
+ [
+ 'href' => 'https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Translate/' .
+ 'Group_management#Strong_synchronization',
+ 'target' => '_blank',
+ 'class' => "{$wrapperClass}__help",
+ ],
+ '[' . $this->localizer->msg( 'translate-smg-strong-sync-help' )->text() . ']'
+ );
+ }
+
+ private function getGroupSyncInfoHtml(
+ string $className,
+ string $summaryMsgKey,
+ string $descriptionMsgKey,
+ string $htmlContent,
+ string $preHtmlContent = null
+ ): string {
+ $output = Html::openElement( 'div', [ 'class' => $className ] );
+ if ( $preHtmlContent ) {
+ $output .= $preHtmlContent;
+ }
+
+ $output .= Html::openElement( 'details' );
+ $output .= Html::element( 'summary', [], $this->localizer->msg( $summaryMsgKey )->text() );
+ $output .= Html::element( 'p', [], $this->localizer->msg( $descriptionMsgKey )->text() );
+ $output .= $htmlContent;
+ $output .= Html::closeElement( 'details' );
+ $output .= Html::closeElement( 'div' );
+
+ return $output;
+ }
+
+ private function getHtmlForGroupErrors(
+ GroupSynchronizationResponse $groupErrorResponse,
+ Language $language,
+ string $wrapperClass
+ ): string {
+ $groupId = $groupErrorResponse->getGroupId();
+ $output = Html::openElement(
+ 'details',
+ [ 'class' => "{$wrapperClass}__group_errors js-group-sync-group-errors" ]
+ );
+
+ $groupResolveAction = Html::linkButton(
+ $this->localizer->msg( 'translate-smg-group-action-resolve' )->text(),
+ [
+ 'class' => "{$wrapperClass}__resolve-action js-group-sync-group-resolve",
+ 'href' => '#',
+ 'data-group-id' => $groupId,
+ ]
+ );
+
+ $output .= Html::rawElement(
+ 'summary',
+ [],
+ $groupId . ' ' .
+ Html::rawElement(
+ 'span',
+ [ 'class' => "{$wrapperClass}__sync-actions" ],
+ $this->localizer->msg( 'parentheses' )
+ ->rawParams( $groupResolveAction )->escaped()
+
+ )
+ );
+
+ $errorMessages = $groupErrorResponse->getRemainingMessages();
+
+ $output .= Html::openElement( 'ol' );
+ foreach ( $errorMessages as $message ) {
+ $output .= Html::rawElement(
+ 'li',
+ [ 'class' => "{$wrapperClass}__message-error js-group-sync-message-error" ],
+ $this->getErrorMessageHtml( $groupId, $message, $language, $wrapperClass )
+ );
+ }
+ $output .= Html::closeElement( 'ol' );
+
+ $output .= Html::closeElement( 'details' );
+
+ return $output;
+ }
+
+ private function getErrorMessageHtml(
+ string $groupId,
+ MessageUpdateParameter $message,
+ Language $language,
+ string $wrapperClass
+ ): string {
+ $messageTitle = Title::newFromText( $message->getPageName() );
+ $actions = [];
+ if ( $messageTitle->exists() ) {
+ $output = $this->linkRenderer->makeLink( $messageTitle, $message->getPageName() );
+ $actions[] = $this->linkRenderer->makeLink(
+ $messageTitle,
+ $this->localizer->msg( 'translate-smg-group-message-action-history' )->text(),
+ [],
+ [ 'action' => 'history' ]
+ );
+ } else {
+ $output = $this->linkRenderer->makeBrokenLink( $messageTitle, $message->getPageName() );
+ }
+
+ $actions[] = Html::linkButton(
+ $this->localizer->msg( 'translate-smg-group-action-resolve' )->text(),
+ [
+ 'class' => "{$wrapperClass}__resolve-action js-group-sync-message-resolve",
+ 'href' => '#',
+ 'data-group-id' => $groupId,
+ 'data-msg-title' => $message->getPageName(),
+ ]
+ );
+
+ $output .= ' ' . Html::rawElement(
+ 'span',
+ [ 'class' => "{$wrapperClass}__sync-actions" ],
+ $this->localizer->msg( 'parentheses' )
+ ->rawParams( $language->pipeList( $actions ) )->escaped()
+ );
+
+ $output .= $this->getMessageInfoHtml( $message, $language );
+
+ return $output;
+ }
+
+ private function getMessageInfoHtml( MessageUpdateParameter $message, Language $language ): string {
+ $output = Html::openElement( 'dl' );
+
+ $tags = [];
+ if ( $message->isFuzzy() ) {
+ $tags[] = $this->localizer->msg( 'translate-smg-group-message-tag-outdated' )->text();
+ }
+
+ if ( $message->isRename() ) {
+ $tags[] = $this->localizer->msg( 'translate-smg-group-message-tag-rename' )->text();
+ }
+
+ if ( $tags ) {
+ $output .= $this->getMessagePropHtml(
+ $this->localizer->msg( 'translate-smg-group-message-tag-label' )
+ ->numParams( count( $tags ) )->text(),
+ implode( $this->localizer->msg( 'pipe-separator' )->text(), $tags )
+ );
+ }
+
+ $output .= $this->getMessagePropHtml(
+ $this->localizer->msg( 'translate-smg-group-message-message-content' )->text(),
+ $message->getContent()
+ );
+
+ if ( $message->isRename() ) {
+ $output .= $this->getMessagePropHtml(
+ $this->localizer->msg( 'translate-smg-group-message-message-target' )->text(),
+ $message->getTargetValue()
+ );
+
+ $output .= $this->getMessagePropHtml(
+ $this->localizer->msg( 'translate-smg-group-message-message-replacement' )->text(),
+ $message->getReplacementValue()
+ );
+
+ if ( $message->getOtherLangs() ) {
+ $output .= $this->getMessagePropHtml(
+ $this->localizer->msg( 'translate-smg-group-message-message-other-langs' )->text(),
+ implode(
+ $this->localizer->msg( 'comma-separator' )->text(),
+ array_keys( $message->getOtherLangs() )
+ )
+ );
+ }
+ }
+
+ $output .= Html::closeElement( 'dl' );
+ return $output;
+ }
+
+ private function getMessagePropHtml( string $label, string $value ): string {
+ return Html::element( 'dt', [], $label ) . Html::element( 'dd', [], $value );
+ }
+}
diff --git a/Translate/src/Synchronization/ExportTranslationsMaintenanceScript.php b/Translate/src/Synchronization/ExportTranslationsMaintenanceScript.php
new file mode 100644
index 00000000..97305411
--- /dev/null
+++ b/Translate/src/Synchronization/ExportTranslationsMaintenanceScript.php
@@ -0,0 +1,434 @@
+<?php
+
+namespace MediaWiki\Extension\Translate\Synchronization;
+
+use FileBasedMessageGroup;
+use GettextFFS;
+use MediaWiki\Extension\Translate\Services;
+use MediaWiki\Extension\Translate\Utilities\BaseMaintenanceScript;
+use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\MediaWikiServices;
+use MessageGroup;
+use MessageGroups;
+use MessageGroupStats;
+
+/**
+ * Script to export translations of message groups to files.
+ *
+ * @author Niklas Laxström
+ * @author Siebrand Mazeland
+ * @copyright Copyright © 2008-2013, Niklas Laxström, Siebrand Mazeland
+ * @license GPL-2.0-or-later
+ */
+class ExportTranslationsMaintenanceScript extends BaseMaintenanceScript {
+ /// The translation file should be deleted if it exists
+ private const ACTION_DELETE = 'delete';
+ /// The translation file should be created or updated
+ private const ACTION_CREATE = 'create';
+ /// The translation file should be updated if exists, but not created as a new
+ private const ACTION_UPDATE = 'update';
+
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Export translations to files.' );
+
+ $this->addOption(
+ 'group',
+ 'Comma separated list of message group IDs (supports * wildcard) to export',
+ self::REQUIRED,
+ self::HAS_ARG
+ );
+ $this->addOption(
+ 'lang',
+ 'Comma separated list of language codes to export or * for all languages',
+ self::REQUIRED,
+ self::HAS_ARG
+ );
+ $this->addOption(
+ 'always-export-languages',
+ '(optional) Comma separated list of languages to export ignoring export threshold',
+ self::OPTIONAL,
+ self::HAS_ARG
+ );
+ $this->addOption(
+ 'never-export-languages',
+ '(optional) Comma separated list of languages to never export (overrides everything else)',
+ self::OPTIONAL,
+ self::HAS_ARG
+ );
+ $this->addOption(
+ 'skip-source-language',
+ '(optional) Do not export the source language of each message group',
+ self::OPTIONAL,
+ self::NO_ARG
+ );
+ $this->addOption(
+ 'target',
+ 'Target directory for exported files',
+ self::REQUIRED,
+ self::HAS_ARG
+ );
+ $this->addOption(
+ 'skip',
+ '(deprecated) See --never-export-languages',
+ self::OPTIONAL,
+ self::HAS_ARG
+ );
+ $this->addOption(
+ 'skipgroup',
+ '(optional) Comma separated list of message group IDs (supports * wildcard) to not export',
+ self::OPTIONAL,
+ self::HAS_ARG
+ );
+ $this->addOption(
+ 'threshold',
+ '(optional) Threshold for translation completion percentage that must be exceeded for initial export',
+ self::OPTIONAL,
+ self::HAS_ARG
+ );
+ $this->addOption(
+ 'removal-threshold',
+ '(optional) Threshold for translation completion percentage that must be exceeded to keep the file',
+ self::OPTIONAL,
+ self::HAS_ARG
+ );
+ $this->addOption(
+ 'no-fuzzy',
+ '(optional) Do not include any messages marked as fuzzy/outdated'
+ );
+ $this->addOption(
+ 'offline-gettext-format',
+ '(optional) Export languages in offline Gettext format. Give a file pattern with '
+ . '%GROUPID% and %CODE%. Empty pattern defaults to %GROUPID%/%CODE%.po.',
+ self::OPTIONAL,
+ self::HAS_ARG
+ );
+ $this->addOption(
+ 'skip-group-sync-check',
+ '(optional) Skip exporting group if synchronization is still in progress or if there ' .
+ 'was an error during synchronization. See: ' .
+ 'https://www.mediawiki.org/wiki/Help:Extension:Translate/Group_management#Strong_synchronization'
+ );
+
+ $this->requireExtension( 'Translate' );
+ }
+
+ public function execute() {
+ $logger = LoggerFactory::getInstance( 'Translate.GroupSynchronization' );
+ $groupPattern = $this->getOption( 'group' ) ?? '';
+ $groupSkipPattern = $this->getOption( 'skipgroup' ) ?? '';
+ $skipGroupSyncCheck = $this->hasOption( 'skip-group-sync-check' );
+
+ $logger->info(
+ 'Starting exports for groups {groups}',
+ [ 'groups' => $groupPattern ]
+ );
+ $exportStartTime = microtime( true );
+
+ $target = $this->getOption( 'target' );
+ if ( !is_writable( $target ) ) {
+ $this->fatalError( "Target directory is not writable ($target)." );
+ }
+
+ $exportThreshold = $this->getOption( 'threshold' );
+ $removalThreshold = $this->getOption( 'removal-threshold' );
+ $noFuzzy = $this->hasOption( 'no-fuzzy' );
+ $requestedLanguages = $this->parseLanguageCodes( $this->getOption( 'lang' ) );
+ $alwaysExportLanguages = $this->csv2array(
+ $this->getOption( 'always-export-languages' ) ?? ''
+ );
+ $neverExportLanguages = $this->csv2array(
+ $this->getOption( 'never-export-languages' ) ??
+ $this->getOption( 'skip' ) ??
+ ''
+ );
+ $skipSourceLanguage = $this->hasOption( 'skip-source-language' );
+
+ $forOffline = $this->hasOption( 'offline-gettext-format' );
+ $offlineTargetPattern = $this->getOption( 'offline-gettext-format' ) ?: "%GROUPID%/%CODE%.po";
+
+ $groups = $this->getMessageGroups( $groupPattern, $groupSkipPattern, $forOffline );
+ if ( $groups === [] ) {
+ $this->fatalError( 'EE1: No valid message groups identified.' );
+ }
+
+ $groupSyncCacheEnabled = MediaWikiServices::getInstance()->getMainConfig()
+ ->get( 'TranslateGroupSynchronizationCache' );
+ $groupSyncCache = Services::getInstance()->getGroupSynchronizationCache();
+
+ foreach ( $groups as $groupId => $group ) {
+ if ( $groupSyncCacheEnabled && !$skipGroupSyncCheck ) {
+ if ( !$this->canGroupBeExported( $groupSyncCache, $groupId ) ) {
+ continue;
+ }
+ }
+
+ if ( $exportThreshold !== null || $removalThreshold !== null ) {
+ $logger->info( 'Calculating stats for group {groupId}', [ 'groupId' => $groupId ] );
+ $tStartTime = microtime( true );
+
+ $languageExportActions = $this->getLanguageExportActions(
+ $groupId,
+ $requestedLanguages,
+ $alwaysExportLanguages,
+ (int)$exportThreshold,
+ (int)$removalThreshold
+ );
+
+ $tEndTime = microtime( true );
+ $logger->info(
+ 'Finished calculating stats for group {groupId}. Time: {duration} secs',
+ [
+ 'groupId' => $groupId,
+ 'duration' => round( $tEndTime - $tStartTime, 3 ),
+ ]
+ );
+ } else {
+ // Convert list to an associative array
+ $languageExportActions = array_fill_keys( $requestedLanguages, self::ACTION_CREATE );
+
+ foreach ( $alwaysExportLanguages as $code ) {
+ $languageExportActions[ $code ] = self::ACTION_CREATE;
+ }
+ }
+
+ foreach ( $neverExportLanguages as $code ) {
+ unset( $languageExportActions[ $code ] );
+ }
+
+ if ( $skipSourceLanguage ) {
+ unset( $languageExportActions[ $group->getSourceLanguage() ] );
+ }
+
+ if ( $languageExportActions === [] ) {
+ continue;
+ }
+
+ $this->output( "Exporting group $groupId\n" );
+ $logger->info( 'Exporting group {groupId}', [ 'groupId' => $groupId ] );
+
+ if ( $forOffline ) {
+ $fileBasedGroup = FileBasedMessageGroup::newFromMessageGroup( $group, $offlineTargetPattern );
+ $ffs = new GettextFFS( $fileBasedGroup );
+ $ffs->setOfflineMode( true );
+ } else {
+ $fileBasedGroup = $group;
+ // At this point $group should be an instance of FileBasedMessageGroup
+ // This is primarily to keep linting tools / IDE happy.
+ if ( !$fileBasedGroup instanceof FileBasedMessageGroup ) {
+ $this->fatalError( "EE2: Unexportable message group $groupId" );
+ }
+ $ffs = $fileBasedGroup->getFFS();
+ }
+
+ $ffs->setWritePath( $target );
+ $sourceLanguage = $group->getSourceLanguage();
+ $collection = $group->initCollection( $sourceLanguage );
+
+ $inclusionList = $group->getTranslatableLanguages();
+
+ $langExportTimes = [
+ 'collection' => 0,
+ 'ffs' => 0,
+ ];
+
+ $languagesExportedCount = 0;
+
+ $langStartTime = microtime( true );
+ foreach ( $languageExportActions as $lang => $action ) {
+ // Do not export languages that are excluded (or not included).
+ // Also check that inclusion list is not null, which means that all
+ // languages are allowed for translation and export.
+ if ( is_array( $inclusionList ) && !isset( $inclusionList[$lang] ) ) {
+ continue;
+ }
+
+ $targetFilePath = $target . '/' . $fileBasedGroup->getTargetFilename( $lang );
+ if ( $action === self::ACTION_DELETE ) {
+ // phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged
+ @$ok = unlink( $targetFilePath );
+ if ( $ok ) {
+ $logger->info( "Removed $targetFilePath due to removal threshold" );
+ }
+ continue;
+ } elseif ( $action === self::ACTION_UPDATE && !file_exists( $targetFilePath ) ) {
+ // Language is under export threshold, do not export yet
+ $logger->info( "Not creating $targetFilePath due to export threshold" );
+ continue;
+ }
+
+ $startTime = microtime( true );
+ $collection->resetForNewLanguage( $lang );
+ $collection->loadTranslations();
+ // Don't export ignored, unless it is the source language
+ // or message documentation
+ global $wgTranslateDocumentationLanguageCode;
+ if ( $lang !== $wgTranslateDocumentationLanguageCode
+ && $lang !== $sourceLanguage
+ ) {
+ $collection->filter( 'ignored' );
+ }
+
+ if ( $noFuzzy ) {
+ $collection->filter( 'fuzzy' );
+ }
+
+ $languagesExportedCount++;
+
+ $endTime = microtime( true );
+ $langExportTimes['collection'] += ( $endTime - $startTime );
+
+ $startTime = microtime( true );
+ $ffs->write( $collection );
+ $endTime = microtime( true );
+ $langExportTimes['ffs'] += ( $endTime - $startTime );
+ }
+ $langEndTime = microtime( true );
+
+ $logger->info(
+ 'Done exporting {count} languages for group {groupId}. Time taken {duration} secs.',
+ [
+ 'count' => $languagesExportedCount,
+ 'groupId' => $groupId,
+ 'duration' => round( $langEndTime - $langStartTime, 3 ),
+ ]
+ );
+
+ foreach ( $langExportTimes as $type => $time ) {
+ $logger->info(
+ 'Time taken by "{type}" for group {groupId} – {duration} secs.',
+ [
+ 'groupId' => $groupId,
+ 'type' => $type,
+ 'duration' => round( $time, 3 ),
+ ]
+ );
+ }
+ }
+
+ $exportEndTime = microtime( true );
+ $logger->info(
+ 'Finished export process for groups {groups}. Time: {duration} secs.',
+ [
+ 'groups' => $groupPattern,
+ 'duration' => round( $exportEndTime - $exportStartTime, 3 ),
+ ]
+ );
+ }
+
+ /** @return MessageGroup[] */
+ private function getMessageGroups(
+ string $groupPattern,
+ string $excludePattern,
+ bool $forOffline
+ ): array {
+ $groupIds = MessageGroups::expandWildcards( explode( ',', trim( $groupPattern ) ) );
+ $groups = MessageGroups::getGroupsById( $groupIds );
+ if ( !$forOffline ) {
+ foreach ( $groups as $groupId => $group ) {
+ if ( $group->isMeta() ) {
+ $this->output( "Skipping meta message group $groupId.\n" );
+ unset( $groups[$groupId] );
+ continue;
+ }
+
+ if ( !$group instanceof FileBasedMessageGroup ) {
+ $this->output( "EE2: Unexportable message group $groupId.\n" );
+ unset( $groups[$groupId] );
+ }
+ }
+ }
+
+ $skipIds = MessageGroups::expandWildcards( explode( ',', trim( $excludePattern ) ) );
+ foreach ( $skipIds as $groupId ) {
+ if ( isset( $groups[$groupId] ) ) {
+ unset( $groups[$groupId] );
+ $this->output( "Group $groupId is in skipgroup.\n" );
+ }
+ }
+
+ return $groups;
+ }
+
+ /** @return string[] */
+ private function getLanguageExportActions(
+ string $groupId,
+ array $requestedLanguages,
+ array $alwaysExportLanguages,
+ int $exportThreshold = 0,
+ int $removalThreshold = 0
+ ): array {
+ $stats = MessageGroupStats::forGroup( $groupId );
+
+ $languages = [];
+
+ foreach ( $requestedLanguages as $code ) {
+ // Statistics unavailable. This should only happen if unknown language code requested.
+ if ( !isset( $stats[$code] ) ) {
+ continue;
+ }
+
+ $total = $stats[$code][MessageGroupStats::TOTAL];
+ $translated = $stats[$code][MessageGroupStats::TRANSLATED];
+ $percentage = $total === 0 ? 0 : $translated / $total * 100;
+
+ if ( $percentage === 0 || $percentage < $removalThreshold ) {
+ $languages[$code] = self::ACTION_DELETE;
+ } elseif ( $percentage > $exportThreshold ) {
+ $languages[$code] = self::ACTION_CREATE;
+ } else {
+ $languages[$code] = self::ACTION_UPDATE;
+ }
+ }
+
+ foreach ( $alwaysExportLanguages as $code ) {
+ $languages[$code] = self::ACTION_CREATE;
+ // DWIM: Do not export languages with zero translations, even if requested
+ if ( ( $stats[$code][MessageGroupStats::TRANSLATED] ?? null ) === 0 ) {
+ $languages[$code] = self::ACTION_DELETE;
+ }
+ }
+
+ return $languages;
+ }
+
+ private function canGroupBeExported( GroupSynchronizationCache $groupSyncCache, string $groupId ): bool {
+ if ( $groupSyncCache->isGroupBeingProcessed( $groupId ) ) {
+ $this->error( "Group $groupId is currently being synchronized; skipping exports\n" );
+ return false;
+ }
+
+ if ( $groupSyncCache->groupHasErrors( $groupId ) ) {
+ $this->error( "Skipping $groupId due to synchronization error\n" );
+ return false;
+ }
+
+ if ( $groupSyncCache->isGroupInReview( $groupId ) ) {
+ $this->error( "Group $groupId is currently in review. Review changes on Special:ManageMessageGroups\n" );
+ return false;
+ }
+ return true;
+ }
+
+ /** @return string[] */
+ private function csv2array( string $input ): array {
+ return array_filter(
+ array_map( 'trim', explode( ',', $input ) ),
+ static function ( $v ) {
+ return $v !== '';
+ }
+ );
+ }
+
+ /** @return string[] */
+ private function parseLanguageCodes( string $input ): array {
+ if ( $input === '*' ) {
+ $languageNameUtils = MediaWikiServices::getInstance()->getLanguageNameUtils();
+ $languages = $languageNameUtils->getLanguageNames();
+ ksort( $languages );
+ return array_keys( $languages );
+ }
+
+ return $this->csv2array( $input );
+ }
+}
diff --git a/Translate/src/Synchronization/ExportTranslationsSpecialPage.php b/Translate/src/Synchronization/ExportTranslationsSpecialPage.php
new file mode 100644
index 00000000..837ffc17
--- /dev/null
+++ b/Translate/src/Synchronization/ExportTranslationsSpecialPage.php
@@ -0,0 +1,347 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Synchronization;
+
+use FileBasedMessageGroup;
+use GettextFFS;
+use Html;
+use HTMLForm;
+use LogicException;
+use MediaWiki\Extension\Translate\PageTranslation\TranslatablePage;
+use Message;
+use MessageCollection;
+use MessageGroup;
+use MessageGroups;
+use MessageHandle;
+use Parser;
+use SpecialPage;
+use Status;
+use Title;
+use TitleFormatter;
+use TranslateUtils;
+use WikiPageMessageGroup;
+
+/**
+ * This special page allows exporting groups for offline translation.
+ *
+ * @author Niklas Laxström
+ * @author Siebrand Mazeland
+ * @license GPL-2.0-or-later
+ * @ingroup SpecialPage TranslateSpecialPage
+ */
+class ExportTranslationsSpecialPage extends SpecialPage {
+ /** Maximum size of a group until exporting is not allowed due to performance reasons. */
+ public const MAX_EXPORT_SIZE = 10000;
+ /** @var string */
+ protected $language;
+ /** @var string */
+ protected $format;
+ /** @var string */
+ protected $groupId;
+ /** @var TitleFormatter */
+ private $titleFormatter;
+ /** @var Parser */
+ private $parser;
+ /** @var string[] */
+ private const VALID_FORMATS = [ 'export-as-po', 'export-to-file', 'export-as-csv' ];
+
+ public function __construct( TitleFormatter $titleFormatter, Parser $parser ) {
+ parent::__construct( 'ExportTranslations' );
+ $this->titleFormatter = $titleFormatter;
+ $this->parser = $parser;
+ }
+
+ /** @param null|string $par */
+ public function execute( $par ) {
+ $out = $this->getOutput();
+ $request = $this->getRequest();
+ $lang = $this->getLanguage();
+
+ $this->setHeaders();
+
+ $this->groupId = $request->getText( 'group', $par ?? '' );
+ $this->language = $request->getVal( 'language', $lang->getCode() );
+ $this->format = $request->getText( 'format' );
+
+ $this->outputForm();
+
+ if ( $this->groupId ) {
+ $status = $this->checkInput();
+ if ( !$status->isGood() ) {
+ $out->wrapWikiTextAsInterface(
+ 'error',
+ $status->getWikiText( false, false, $lang )
+ );
+ return;
+ }
+
+ $this->doExport();
+ }
+ }
+
+ private function outputForm(): void {
+ $fields = [
+ 'group' => [
+ 'type' => 'select',
+ 'name' => 'group',
+ 'id' => 'group',
+ 'label-message' => 'translate-page-group',
+ 'options' => $this->getGroupOptions(),
+ 'default' => $this->groupId,
+ ],
+ 'language' => [
+ // @todo Apply ULS to this field
+ 'type' => 'select',
+ 'name' => 'language',
+ 'id' => 'language',
+ 'label-message' => 'translate-page-language',
+ 'options' => $this->getLanguageOptions(),
+ 'default' => $this->language,
+ ],
+ 'format' => [
+ 'type' => 'radio',
+ 'name' => 'format',
+ 'id' => 'format',
+ 'label-message' => 'translate-export-form-format',
+ 'flatlist' => true,
+ 'options' => $this->getFormatOptions(),
+ 'default' => $this->format,
+ ],
+ ];
+ HTMLForm::factory( 'ooui', $fields, $this->getContext() )
+ ->setMethod( 'get' )
+ ->setWrapperLegendMsg( 'translate-page-settings-legend' )
+ ->setSubmitTextMsg( 'translate-submit' )
+ ->prepareForm()
+ ->displayForm( false );
+ }
+
+ private function getGroupOptions(): array {
+ $selected = $this->groupId;
+ $groups = MessageGroups::getAllGroups();
+ uasort( $groups, [ MessageGroups::class, 'groupLabelSort' ] );
+
+ $options = [];
+ foreach ( $groups as $id => $group ) {
+ if ( !$group->exists()
+ || ( MessageGroups::getPriority( $group ) === 'discouraged' && $id !== $selected )
+ ) {
+ continue;
+ }
+
+ $options[$group->getLabel()] = $id;
+ }
+
+ return $options;
+ }
+
+ /** @return string[] */
+ private function getLanguageOptions(): array {
+ $languages = TranslateUtils::getLanguageNames( 'en' );
+ $options = [];
+ foreach ( $languages as $code => $name ) {
+ $options["$code - $name"] = $code;
+ }
+
+ return $options;
+ }
+
+ /** @return string[] */
+ private function getFormatOptions(): array {
+ $options = [];
+ foreach ( self::VALID_FORMATS as $format ) {
+ // translate-taskui-export-to-file, translate-taskui-export-as-po
+ $options[ $this->msg( "translate-taskui-$format" )->escaped() ] = $format;
+ }
+ return $options;
+ }
+
+ private function checkInput(): Status {
+ $status = Status::newGood();
+
+ $msgGroup = MessageGroups::getGroup( $this->groupId );
+ if ( $msgGroup === null ) {
+ $status->fatal( 'translate-page-no-such-group' );
+ } elseif ( MessageGroups::isDynamic( $msgGroup ) ) {
+ $status->fatal( 'translate-export-not-supported' );
+ }
+
+ $langNames = TranslateUtils::getLanguageNames( 'en' );
+ if ( !isset( $langNames[$this->language] ) ) {
+ $status->fatal( 'translate-page-no-such-language' );
+ }
+
+ // Do not show this error if invalid format is specified for translatable page
+ // groups as we can show a textarea box containing the translation page text
+ // (however it's not currently supported for other groups).
+ if (
+ !$msgGroup instanceof WikiPageMessageGroup
+ && $this->format
+ && !in_array( $this->format, self::VALID_FORMATS )
+ ) {
+ $status->fatal( 'translate-export-invalid-format' );
+ }
+
+ if ( $this->format === 'export-to-file'
+ && !$msgGroup instanceof FileBasedMessageGroup
+ ) {
+ $status->fatal( 'translate-export-format-notsupported' );
+ }
+
+ if ( $msgGroup && !MessageGroups::isDynamic( $msgGroup ) ) {
+ $size = count( $msgGroup->getKeys() );
+ if ( $size > self::MAX_EXPORT_SIZE ) {
+ $status->fatal(
+ 'translate-export-group-too-large',
+ Message::numParam( self::MAX_EXPORT_SIZE )
+ );
+ }
+ }
+
+ return $status;
+ }
+
+ private function doExport(): void {
+ $out = $this->getOutput();
+ $group = MessageGroups::getGroup( $this->groupId );
+ $collection = $this->setupCollection( $group );
+
+ switch ( $this->format ) {
+ case 'export-as-po':
+ $out->disable();
+
+ $ffs = null;
+ if ( $group instanceof FileBasedMessageGroup ) {
+ $ffs = $group->getFFS();
+ }
+
+ if ( !$ffs instanceof GettextFFS ) {
+ if ( !$group instanceof FileBasedMessageGroup ) {
+ $group = FileBasedMessageGroup::newFromMessageGroup( $group );
+ }
+
+ $ffs = new GettextFFS( $group );
+ }
+
+ $ffs->setOfflineMode( true );
+
+ $filename = "{$group->getId()}_{$this->language}.po";
+ $this->sendExportHeaders( $filename );
+
+ echo $ffs->writeIntoVariable( $collection );
+ break;
+
+ case 'export-to-file':
+ $out->disable();
+
+ // This will never happen since its checked previously but add the check to keep
+ // phan and IDE happy. See checkInput method
+ if ( !$group instanceof FileBasedMessageGroup ) {
+ throw new LogicException(
+ "'export-to-file' requested for a non FileBasedMessageGroup {$group->getId()}"
+ );
+ }
+
+ $filename = basename( $group->getSourceFilePath( $collection->getLanguage() ) );
+ $this->sendExportHeaders( $filename );
+
+ echo $group->getFFS()->writeIntoVariable( $collection );
+ break;
+
+ case 'export-as-csv':
+ $out->disable();
+ $filename = "{$group->getId()}_{$this->language}.csv";
+ $this->sendExportHeaders( $filename );
+ $this->exportCSV( $collection, $group->getSourceLanguage() );
+ break;
+
+ default:
+ // @todo Add web viewing for groups other than WikiPageMessageGroup
+ if ( !$group instanceof WikiPageMessageGroup ) {
+ return;
+ }
+
+ $translatablePage = TranslatablePage::newFromTitle( $group->getTitle() );
+ $translationPage = $translatablePage->getTranslationPage( $collection->getLanguage() );
+
+ $translationPage->filterMessageCollection( $collection );
+ $messages = $translationPage->extractMessages( $collection );
+ $text = $translationPage->generateSourceFromTranslations( $this->parser, $messages );
+
+ $displayTitle = $translatablePage->getPageDisplayTitle( $this->language );
+ if ( $displayTitle ) {
+ $text = "{{DISPLAYTITLE:$displayTitle}}$text";
+ }
+
+ $box = Html::element(
+ 'textarea',
+ [ 'id' => 'wpTextbox', 'rows' => 40, ],
+ $text
+ );
+ $out->addHTML( $box );
+
+ }
+ }
+
+ private function setupCollection( MessageGroup $group ): MessageCollection {
+ $collection = $group->initCollection( $this->language );
+
+ // Don't export ignored, unless it is the source language or message documentation
+ $translateDocCode = $this->getConfig()->get( 'TranslateDocumentationLanguageCode' );
+ if ( $this->language !== $translateDocCode
+ && $this->language !== $group->getSourceLanguage()
+ ) {
+ $collection->filter( 'ignored' );
+ }
+
+ $collection->loadTranslations();
+
+ return $collection;
+ }
+
+ /** Send the appropriate response headers for the export */
+ private function sendExportHeaders( string $fileName ): void {
+ $response = $this->getRequest()->response();
+ $response->header( 'Content-Type: text/plain; charset=UTF-8' );
+ $response->header( "Content-Disposition: attachment; filename=\"$fileName\"" );
+ }
+
+ private function exportCSV( MessageCollection $collection, string $sourceLanguageCode ): void {
+ $fp = fopen( 'php://output', 'w' );
+ $exportingSourceLanguage = $sourceLanguageCode === $this->language;
+
+ $header = [
+ $this->msg( 'translate-export-csv-message-title' )->text(),
+ $this->msg( 'translate-export-csv-definition' )->text()
+ ];
+
+ if ( !$exportingSourceLanguage ) {
+ $header[] = $this->language;
+ }
+
+ fputcsv( $fp, $header );
+
+ foreach ( $collection->keys() as $messageKey => $titleValue ) {
+ $message = $collection[ $messageKey ];
+ $prefixedTitleText = $this->titleFormatter->getPrefixedText( $titleValue );
+
+ $handle = new MessageHandle( Title::newFromText( $prefixedTitleText ) );
+ $sourceLanguageTitle = $handle->getTitleForLanguage( $sourceLanguageCode );
+
+ $row = [ $sourceLanguageTitle->getPrefixedText(), $message->definition() ];
+
+ if ( !$exportingSourceLanguage ) {
+ $row[] = $message->translation();
+ }
+
+ fputcsv( $fp, $row );
+ }
+
+ fclose( $fp );
+ }
+
+ protected function getGroupName() {
+ return 'translation';
+ }
+}
diff --git a/Translate/src/Synchronization/ExternalMessageSourceStateImporter.php b/Translate/src/Synchronization/ExternalMessageSourceStateImporter.php
new file mode 100644
index 00000000..05b1b479
--- /dev/null
+++ b/Translate/src/Synchronization/ExternalMessageSourceStateImporter.php
@@ -0,0 +1,273 @@
+<?php
+declare( strict_types = 1 );
+
+/**
+ * Finds external changes for file based message groups.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2016.02
+ */
+
+namespace MediaWiki\Extension\Translate\Synchronization;
+
+use Config;
+use FileBasedMessageGroup;
+use JobQueueGroup;
+use MediaWiki\Extension\Translate\MessageSync\MessageSourceChange;
+use MessageChangeStorage;
+use MessageGroups;
+use MessageHandle;
+use MessageIndex;
+use MessageUpdateJob;
+use Psr\Log\LoggerInterface;
+use RuntimeException;
+use Title;
+use function wfWarn;
+
+class ExternalMessageSourceStateImporter {
+ /** @var Config */
+ private $config;
+ /** @var GroupSynchronizationCache */
+ private $groupSynchronizationCache;
+ /** @var JobQueueGroup */
+ private $jobQueueGroup;
+ /** @var LoggerInterface */
+ private $logger;
+ /** @var MessageIndex */
+ private $messageIndex;
+
+ public function __construct(
+ Config $config,
+ GroupSynchronizationCache $groupSynchronizationCache,
+ JobQueueGroup $jobQueueGroup,
+ LoggerInterface $logger,
+ MessageIndex $messageIndex
+ ) {
+ $this->config = $config;
+ $this->groupSynchronizationCache = $groupSynchronizationCache;
+ $this->jobQueueGroup = $jobQueueGroup;
+ $this->logger = $logger;
+ $this->messageIndex = $messageIndex;
+ }
+
+ /**
+ * @param MessageSourceChange[] $changeData
+ * @param string $name
+ * @return array
+ */
+ public function importSafe( array $changeData, string $name ): array {
+ $processed = [];
+ $skipped = [];
+ $jobs = [];
+
+ $groupSyncCacheEnabled = $this->config->get( 'TranslateGroupSynchronizationCache' );
+
+ foreach ( $changeData as $groupId => $changesForGroup ) {
+ $group = MessageGroups::getGroup( $groupId );
+ if ( !$group ) {
+ unset( $changeData[$groupId] );
+ continue;
+ }
+
+ if ( !$group instanceof FileBasedMessageGroup ) {
+ $this->logger->warning(
+ '[ExternalMessageSourceStateImporter] Expected FileBasedMessageGroup, ' .
+ 'but got {class} for group {groupId}',
+ [
+ 'class' => get_class( $group ),
+ 'groupId' => $groupId
+ ]
+ );
+ unset( $changeData[$groupId] );
+ continue;
+ }
+
+ $processed[$groupId] = [];
+ $languages = $changesForGroup->getLanguages();
+ $groupJobs = [];
+
+ $groupSafeLanguages = self::identifySafeLanguages( $group, $changesForGroup );
+
+ foreach ( $languages as $language ) {
+ if ( !$groupSafeLanguages[ $language ] ) {
+ $skipped[$groupId] = true;
+ continue;
+ }
+
+ $additions = $changesForGroup->getAdditions( $language );
+ if ( $additions === [] ) {
+ continue;
+ }
+
+ [ $groupLanguageJobs, $groupProcessed ] = $this->createMessageUpdateJobs(
+ $group, $additions, $language
+ );
+
+ $groupJobs = array_merge( $groupJobs, $groupLanguageJobs );
+ $processed[$groupId][$language] = $groupProcessed;
+
+ $changesForGroup->removeChangesForLanguage( $language );
+ $group->getMessageGroupCache( $language )->create();
+ }
+
+ // Mark the skipped group as in review
+ if ( $groupSyncCacheEnabled && isset( $skipped[$groupId] ) ) {
+ $this->groupSynchronizationCache->markGroupAsInReview( $groupId );
+ }
+
+ if ( $groupJobs !== [] ) {
+ if ( $groupSyncCacheEnabled ) {
+ $this->updateGroupSyncInfo( $groupId, $groupJobs );
+ }
+ $jobs = array_merge( $jobs, $groupJobs );
+ }
+ }
+
+ // Remove groups where everything was imported
+ $changeData = array_filter( $changeData, static function ( MessageSourceChange $change ) {
+ return $change->getAllModifications() !== [];
+ } );
+
+ // Remove groups with no imports
+ $processed = array_filter( $processed );
+
+ $file = MessageChangeStorage::getCdbPath( $name );
+ MessageChangeStorage::writeChanges( $changeData, $file );
+ $this->jobQueueGroup->push( $jobs );
+
+ return [
+ 'processed' => $processed,
+ 'skipped' => $skipped,
+ 'name' => $name,
+ ];
+ }
+
+ /** Creates MessageUpdateJobs additions for a language under a group */
+ private function createMessageUpdateJobs(
+ FileBasedMessageGroup $group,
+ array $additions,
+ string $language
+ ): array {
+ $groupId = $group->getId();
+ $jobs = [];
+ $processed = 0;
+ foreach ( $additions as $addition ) {
+ $namespace = $group->getNamespace();
+ $name = "{$addition['key']}/$language";
+
+ $title = Title::makeTitleSafe( $namespace, $name );
+ if ( !$title ) {
+ wfWarn( "Invalid title for group $groupId key {$addition['key']}" );
+ continue;
+ }
+
+ $jobs[] = MessageUpdateJob::newJob( $title, $addition['content'] );
+ $processed++;
+ }
+
+ return [ $jobs, $processed ];
+ }
+
+ /**
+ * @param string $groupId
+ * @param MessageUpdateJob[] $groupJobs
+ */
+ private function updateGroupSyncInfo( string $groupId, array $groupJobs ): void {
+ $messageParams = [];
+ $groupMessageKeys = [];
+ foreach ( $groupJobs as $job ) {
+ $messageParams[] = MessageUpdateParameter::createFromJob( $job );
+ // Ensure there are no duplicates as the same key may be present in
+ // multiple languages
+ $groupMessageKeys[( new MessageHandle( $job->getTitle() ) )->getKey()] = true;
+ }
+
+ $group = MessageGroups::getGroup( $groupId );
+ if ( $group === null ) {
+ // How did we get here? This should never happen.
+ throw new RuntimeException( "Did not find group $groupId" );
+ }
+
+ $this->messageIndex->storeInterim( $group, array_keys( $groupMessageKeys ) );
+
+ $this->groupSynchronizationCache->addMessages( $groupId, ...$messageParams );
+ $this->groupSynchronizationCache->markGroupForSync( $groupId );
+
+ $this->logger->info(
+ '[ExternalMessageSourceStateImporter] Synchronization started for {groupId}',
+ [ 'groupId' => $groupId ]
+ );
+ }
+
+ /**
+ * Identifies languages in a message group that are safe to import
+ * @return array<string,bool>
+ */
+ private static function identifySafeLanguages(
+ FileBasedMessageGroup $group,
+ MessageSourceChange $changesForGroup
+ ): array {
+ $sourceLanguage = $group->getSourceLanguage();
+ $safeLanguagesMap = [];
+ $modifiedLanguages = $changesForGroup->getLanguages();
+
+ // Set all languages to not safe to start with.
+ $safeLanguagesMap[ $sourceLanguage ] = false;
+ foreach ( $modifiedLanguages as $language ) {
+ $safeLanguagesMap[ $language ] = false;
+ }
+
+ if ( !$changesForGroup->hasOnly( $sourceLanguage, MessageSourceChange::ADDITION ) ) {
+ return $safeLanguagesMap;
+ }
+
+ $sourceLanguageKeyCache = [];
+ foreach ( $changesForGroup->getAdditions( $sourceLanguage ) as $change ) {
+ if ( $change['content'] === '' ) {
+ return $safeLanguagesMap;
+ }
+
+ $sourceLanguageKeyCache[ $change['key'] ] = true;
+ }
+
+ $safeLanguagesMap[ $sourceLanguage ] = true;
+
+ $groupNamespace = $group->getNamespace();
+
+ // Remove source language from the modifiedLanguage list if present since it's already processed.
+ // The $sourceLanguageKeyCache will only have values if sourceLanguage has safe changes.
+ if ( $sourceLanguageKeyCache ) {
+ array_splice( $modifiedLanguages, array_search( $sourceLanguage, $modifiedLanguages ), 1 );
+ }
+
+ foreach ( $modifiedLanguages as $language ) {
+ if ( !$changesForGroup->hasOnly( $language, MessageSourceChange::ADDITION ) ) {
+ continue;
+ }
+
+ foreach ( $changesForGroup->getAdditions( $language ) as $change ) {
+ if ( $change['content'] === '' ) {
+ continue 2;
+ }
+
+ $msgKey = $change['key'];
+
+ if ( !isset( $sourceLanguageKeyCache[ $msgKey ] ) ) {
+ // This is either a new external translation which is not added in the same sync
+ // as the source language key, or this translation does not have a corresponding
+ // definition. We will check the message index to determine which of the two.
+ $sourceHandle = new MessageHandle( Title::makeTitle( $groupNamespace, $msgKey ) );
+ $sourceLanguageKeyCache[ $msgKey ] = $sourceHandle->isValid();
+ }
+
+ if ( !$sourceLanguageKeyCache[ $msgKey ] ) {
+ continue 2;
+ }
+ }
+
+ $safeLanguagesMap[ $language ] = true;
+ }
+
+ return $safeLanguagesMap;
+ }
+}
diff --git a/Translate/src/Synchronization/GroupSynchronizationCache.php b/Translate/src/Synchronization/GroupSynchronizationCache.php
new file mode 100644
index 00000000..d581ff69
--- /dev/null
+++ b/Translate/src/Synchronization/GroupSynchronizationCache.php
@@ -0,0 +1,489 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Synchronization;
+
+use DateTime;
+use InvalidArgumentException;
+use LogicException;
+use MediaWiki\Extension\Translate\Cache\PersistentCache;
+use MediaWiki\Extension\Translate\Cache\PersistentCacheEntry;
+use RuntimeException;
+
+/**
+ * Message group synchronization cache. Handles storage of data in the cache
+ * to track which groups are currently being synchronized.
+ * Stores:
+ *
+ * 1. Groups in sync:
+ * - Key: {hash($groupId)}_$groupId
+ * - Value: $groupId
+ * - Tag: See GroupSynchronizationCache::getGroupsTag()
+ * - Exptime: Set when startSyncTimer is called
+ *
+ * 2. Message under each group being modified:
+ * - Key: {hash($groupId_$messageKey)}_$messageKey
+ * - Value: MessageUpdateParameter
+ * - Tag: gsc_$groupId
+ * - Exptime: none
+ *
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2020.06
+ */
+class GroupSynchronizationCache {
+ /** @var PersistentCache */
+ private $cache;
+ /** @var int */
+ private $initialTimeoutSeconds;
+ /** @var int */
+ private $incrementalTimeoutSeconds;
+
+ /** @var string Cache tag used for groups */
+ private const GROUP_LIST_TAG = 'gsc_%group_in_sync%';
+ /** @var string Cache tag used for tracking groups that have errors */
+ private const GROUP_ERROR_TAG = 'gsc_%group_with_error%';
+ /** @var string Cache tag used for tracking groups that are in review */
+ private const GROUP_IN_REVIEW_TAG = 'gsc_%group_in_review%';
+
+ // The timeout is set to 40 minutes initially, and then incremented by 10 minutes
+ // each time a message is marked as processed if group is about to expire.
+ public function __construct(
+ PersistentCache $cache,
+ int $initialTimeoutSeconds = 2400,
+ int $incrementalTimeoutSeconds = 600
+
+ ) {
+ $this->cache = $cache;
+ $this->initialTimeoutSeconds = $initialTimeoutSeconds;
+ $this->incrementalTimeoutSeconds = $incrementalTimeoutSeconds;
+ }
+
+ /**
+ * Get the groups currently in sync
+ * @return string[]
+ */
+ public function getGroupsInSync(): array {
+ $groupsInSyncEntries = $this->cache->getByTag( self::GROUP_LIST_TAG );
+ /** @var string[] */
+ $groups = [];
+ foreach ( $groupsInSyncEntries as $entry ) {
+ $groups[] = $entry->value();
+ }
+
+ return $groups;
+ }
+
+ /** Start synchronization process for a group and starts the expiry time */
+ public function markGroupForSync( string $groupId ): void {
+ $expTime = $this->getExpireTime( $this->initialTimeoutSeconds );
+ $this->cache->set(
+ new PersistentCacheEntry(
+ $this->getGroupKey( $groupId ),
+ $groupId,
+ $expTime,
+ self::GROUP_LIST_TAG
+ )
+ );
+ }
+
+ public function getSyncEndTime( string $groupId ): ?int {
+ $cacheEntry = $this->cache->get( $this->getGroupKey( $groupId ) );
+ return $cacheEntry ? $cacheEntry[0]->exptime() : null;
+ }
+
+ /** End synchronization for a group. Deletes the group key */
+ public function endSync( string $groupId ): void {
+ if ( $this->cache->hasEntryWithTag( $this->getGroupTag( $groupId ) ) ) {
+ throw new InvalidArgumentException(
+ 'Cannot end synchronization for a group that still has messages to be processed.'
+ );
+ }
+
+ $groupKey = $this->getGroupKey( $groupId );
+ $this->cache->delete( $groupKey );
+ }
+
+ /** End synchronization for a group. Deletes the group key and messages */
+ public function forceEndSync( string $groupId ): void {
+ $this->cache->deleteEntriesWithTag( $this->getGroupTag( $groupId ) );
+ $this->endSync( $groupId );
+ }
+
+ /** Add messages for a group to the cache */
+ public function addMessages( string $groupId, MessageUpdateParameter ...$messageParams ): void {
+ $messagesToAdd = [];
+ $groupTag = $this->getGroupTag( $groupId );
+ foreach ( $messageParams as $messageParam ) {
+ $titleKey = $this->getMessageKeys( $groupId, $messageParam->getPageName() )[0];
+ $messagesToAdd[] = new PersistentCacheEntry(
+ $titleKey,
+ $messageParam,
+ null,
+ $groupTag
+ );
+ }
+
+ $this->cache->set( ...$messagesToAdd );
+ }
+
+ /** Check if the group is in synchronization */
+ public function isGroupBeingProcessed( string $groupId ): bool {
+ $groupEntry = $this->cache->get( $this->getGroupKey( $groupId ) );
+ return $groupEntry !== [];
+ }
+
+ /**
+ * Return all messages in a group
+ * @param string $groupId
+ * @return MessageUpdateParameter[] Returns a key value pair, with the key being the
+ * messageKey and value being MessageUpdateParameter
+ */
+ public function getGroupMessages( string $groupId ): array {
+ $messageEntries = $this->cache->getByTag( $this->getGroupTag( $groupId ) );
+
+ $allMessageParams = [];
+ foreach ( $messageEntries as $entry ) {
+ $message = $entry->value();
+ if ( $message instanceof MessageUpdateParameter ) {
+ $allMessageParams[$message->getPageName()] = $message;
+ } else {
+ // Should not happen, but handle primarily to keep phan happy.
+ throw $this->invalidArgument( $message, MessageUpdateParameter::class );
+ }
+ }
+
+ return $allMessageParams;
+ }
+
+ /** Check if a message is being processed */
+ public function isMessageBeingProcessed( string $groupId, string $messageKey ): bool {
+ $messageCacheKey = $this->getMessageKeys( $groupId, $messageKey );
+ return $this->cache->has( $messageCacheKey[0] );
+ }
+
+ /** Get the current synchronization status of the group. Does not perform any updates. */
+ public function getSynchronizationStatus( string $groupId ): GroupSynchronizationResponse {
+ if ( !$this->isGroupBeingProcessed( $groupId ) ) {
+ // Group is currently not being processed.
+ throw new LogicException(
+ 'Sync requested for a group currently not being processed. Check if ' .
+ 'group is being processed by calling isGroupBeingProcessed() first'
+ );
+ }
+
+ $remainingMessages = $this->getGroupMessages( $groupId );
+
+ // No messages are present
+ if ( !$remainingMessages ) {
+ return new GroupSynchronizationResponse( $groupId, [], false );
+ }
+
+ $syncExpTime = $this->getSyncEndTime( $groupId );
+ if ( $syncExpTime === null ) {
+ // This should not happen
+ throw new RuntimeException(
+ "Unexpected condition. Group: $groupId; Messages present, but group key not found."
+ );
+ }
+
+ $hasTimedOut = $this->hasGroupTimedOut( $syncExpTime );
+
+ return new GroupSynchronizationResponse(
+ $groupId,
+ $remainingMessages,
+ $hasTimedOut
+ );
+ }
+
+ /** Remove messages from the cache. */
+ public function removeMessages( string $groupId, string ...$messageKeys ): void {
+ $messageCacheKeys = $this->getMessageKeys( $groupId, ...$messageKeys );
+
+ $this->cache->delete( ...$messageCacheKeys );
+ }
+
+ public function addGroupErrors( GroupSynchronizationResponse $response ): void {
+ $groupId = $response->getGroupId();
+ $remainingMessages = $response->getRemainingMessages();
+
+ if ( !$remainingMessages ) {
+ throw new LogicException( 'Cannot add a group without any remaining messages to the errors list' );
+ }
+
+ $groupMessageErrorTag = $this->getGroupMessageErrorTag( $groupId );
+
+ $entriesToSave = [];
+ foreach ( $remainingMessages as $messageParam ) {
+ $titleErrorKey = $this->getMessageErrorKey( $groupId, $messageParam->getPageName() )[0];
+ $entriesToSave[] = new PersistentCacheEntry(
+ $titleErrorKey,
+ $messageParam,
+ null,
+ $groupMessageErrorTag
+ );
+ }
+
+ $this->cache->set( ...$entriesToSave );
+
+ $groupErrorKey = $this->getGroupErrorKey( $groupId );
+
+ // Check if the group already has errors
+ $groupInfo = $this->cache->get( $groupErrorKey );
+ if ( $groupInfo ) {
+ return;
+ }
+
+ // Group did not have an error previously, add it now. When adding,
+ // remove the remaining messages from the GroupSynchronizationResponse to
+ // avoid the value in the cache becoming too big. The remaining messages
+ // are stored as separate items in the cache.
+ $trimmedGroupSyncResponse = new GroupSynchronizationResponse(
+ $groupId,
+ [],
+ $response->hasTimedOut()
+ );
+
+ $entriesToSave[] = new PersistentCacheEntry(
+ $groupErrorKey,
+ $trimmedGroupSyncResponse,
+ null,
+ self::GROUP_ERROR_TAG
+ );
+
+ $this->cache->set( ...$entriesToSave );
+ }
+
+ /**
+ * Return the groups that have errors
+ * @return string[]
+ */
+ public function getGroupsWithErrors(): array {
+ $groupsInSyncEntries = $this->cache->getByTag( self::GROUP_ERROR_TAG );
+ /** @var string[] */
+ $groupIds = [];
+ foreach ( $groupsInSyncEntries as $entry ) {
+ $groupResponse = $entry->value();
+ if ( $groupResponse instanceof GroupSynchronizationResponse ) {
+ $groupIds[] = $groupResponse->getGroupId();
+ } else {
+ // Should not happen, but handle primarily to keep phan happy.
+ throw $this->invalidArgument( $groupResponse, GroupSynchronizationResponse::class );
+ }
+ }
+
+ return $groupIds;
+ }
+
+ /** Fetch information about a particular group that has errors including messages that failed */
+ public function getGroupErrorInfo( string $groupId ): GroupSynchronizationResponse {
+ $groupMessageErrorTag = $this->getGroupMessageErrorTag( $groupId );
+ $groupMessageEntries = $this->cache->getByTag( $groupMessageErrorTag );
+
+ $groupErrorKey = $this->getGroupErrorKey( $groupId );
+ $groupResponseEntry = $this->cache->get( $groupErrorKey );
+ $groupResponse = $groupResponseEntry[0] ? $groupResponseEntry[0]->value() : null;
+ if ( $groupResponse ) {
+ if ( !$groupResponse instanceof GroupSynchronizationResponse ) {
+ // Should not happen, but handle primarily to keep phan happy.
+ throw $this->invalidArgument( $groupResponse, GroupSynchronizationResponse::class );
+ }
+ } else {
+ throw new LogicException( 'Requested to fetch errors for a group that has no errors.' );
+ }
+
+ $messageParams = [];
+ foreach ( $groupMessageEntries as $messageEntries ) {
+ $messageParam = $messageEntries->value();
+ if ( $messageParam instanceof MessageUpdateParameter ) {
+ $messageParams[] = $messageParam;
+ } else {
+ // Should not happen, but handle primarily to keep phan happy.
+ throw $this->invalidArgument( $messageParam, MessageUpdateParameter::class );
+ }
+ }
+
+ return new GroupSynchronizationResponse(
+ $groupId,
+ $messageParams,
+ $groupResponse->hasTimedOut()
+ );
+ }
+
+ /** Marks all messages in a group and the group itself as resolved */
+ public function markGroupAsResolved( string $groupId ): GroupSynchronizationResponse {
+ $groupSyncResponse = $this->getGroupErrorInfo( $groupId );
+ $errorMessages = $groupSyncResponse->getRemainingMessages();
+
+ $errorMessageKeys = [];
+ foreach ( $errorMessages as $message ) {
+ $errorMessageKeys[] = $this->getMessageErrorKey( $groupId, $message->getPageName() )[0];
+ }
+
+ $this->cache->delete( ...$errorMessageKeys );
+ return $this->syncGroupErrors( $groupId );
+ }
+
+ /** Marks errors for a message as resolved */
+ public function markMessageAsResolved( string $groupId, string $messagePageName ): void {
+ $messageErrorKey = $this->getMessageErrorKey( $groupId, $messagePageName )[0];
+ $messageInCache = $this->cache->get( $messageErrorKey );
+ if ( !$messageInCache ) {
+ throw new InvalidArgumentException(
+ 'Message does not appear to have synchronization errors'
+ );
+ }
+
+ $this->cache->delete( $messageErrorKey );
+ }
+
+ /** Checks if the group has errors */
+ public function groupHasErrors( string $groupId ): bool {
+ $groupErrorKey = $this->getGroupErrorKey( $groupId );
+ return $this->cache->has( $groupErrorKey );
+ }
+
+ /** Checks if group has unresolved error messages. If not clears the group from error list */
+ public function syncGroupErrors( string $groupId ): GroupSynchronizationResponse {
+ $groupSyncResponse = $this->getGroupErrorInfo( $groupId );
+ if ( $groupSyncResponse->getRemainingMessages() ) {
+ return $groupSyncResponse;
+ }
+
+ // No remaining messages left, remove group from errors list.
+ $groupErrorKey = $this->getGroupErrorKey( $groupId );
+ $this->cache->delete( $groupErrorKey );
+
+ return $groupSyncResponse;
+ }
+
+ public function markGroupAsInReview( string $groupId ): void {
+ $groupReviewKey = $this->getGroupReviewKey( $groupId );
+ $this->cache->set(
+ new PersistentCacheEntry(
+ $groupReviewKey,
+ $groupId,
+ null,
+ self::GROUP_IN_REVIEW_TAG
+ )
+ );
+ }
+
+ public function markGroupAsReviewed( string $groupId ): void {
+ $groupReviewKey = $this->getGroupReviewKey( $groupId );
+ $this->cache->delete( $groupReviewKey );
+ }
+
+ public function isGroupInReview( string $groupId ): bool {
+ return $this->cache->has( $this->getGroupReviewKey( $groupId ) );
+ }
+
+ public function extendGroupExpiryTime( string $groupId ): void {
+ $groupKey = $this->getGroupKey( $groupId );
+ $groupEntry = $this->cache->get( $groupKey );
+
+ if ( $groupEntry === [] ) {
+ // Group is currently not being processed.
+ throw new LogicException(
+ 'Requested extension of expiry time for a group that is not being processed. ' .
+ 'Check if group is being processed by calling isGroupBeingProcessed() first'
+ );
+ }
+
+ if ( $groupEntry[0]->hasExpired() ) {
+ throw new InvalidArgumentException(
+ 'Cannot extend expiry time for a group that has already expired.'
+ );
+ }
+
+ $newExpiryTime = $this->getExpireTime( $this->incrementalTimeoutSeconds );
+
+ // We start with the initial timeout minutes, we only change the timeout if the group
+ // is actually about to expire.
+ if ( $newExpiryTime < $groupEntry[0]->exptime() ) {
+ return;
+ }
+
+ $this->cache->setExpiry( $groupKey, $newExpiryTime );
+ }
+
+ /** @internal - Internal; For testing use only */
+ public function getGroupExpiryTime( $groupId ): int {
+ $groupKey = $this->getGroupKey( $groupId );
+ $groupEntry = $this->cache->get( $groupKey );
+ if ( $groupEntry === [] ) {
+ throw new InvalidArgumentException( "$groupId currently not in processing!" );
+ }
+
+ return $groupEntry[0]->exptime();
+ }
+
+ private function hasGroupTimedOut( int $syncExpTime ): bool {
+ return ( new DateTime() )->getTimestamp() > $syncExpTime;
+ }
+
+ private function getExpireTime( int $timeoutSeconds ): int {
+ $currentTime = ( new DateTime() )->getTimestamp();
+ $expTime = ( new DateTime() )
+ ->setTimestamp( $currentTime + $timeoutSeconds )
+ ->getTimestamp();
+
+ return $expTime;
+ }
+
+ private function invalidArgument( $value, string $expectedType ): RuntimeException {
+ $valueType = $value ? get_class( $value ) : gettype( $value );
+ return new RuntimeException( "Expected $expectedType, got $valueType" );
+ }
+
+ // Cache keys / tag related functions start here.
+
+ private function getGroupTag( string $groupId ): string {
+ return 'gsc_' . $groupId;
+ }
+
+ private function getGroupKey( string $groupId ): string {
+ $hash = substr( hash( 'sha256', $groupId ), 0, 40 );
+ return substr( "{$hash}_$groupId", 0, 255 );
+ }
+
+ /** @return string[] */
+ private function getMessageKeys( string $groupId, string ...$messages ): array {
+ $messageKeys = [];
+ foreach ( $messages as $message ) {
+ $key = $groupId . '_' . $message;
+ $hash = substr( hash( 'sha256', $key ), 0, 40 );
+ $finalKey = substr( $hash . '_' . $key, 0, 255 );
+ $messageKeys[] = $finalKey;
+ }
+
+ return $messageKeys;
+ }
+
+ private function getGroupErrorKey( string $groupId ): string {
+ $hash = substr( hash( 'sha256', $groupId ), 0, 40 );
+ return substr( "{$hash}_gsc_error_$groupId", 0, 255 );
+ }
+
+ /** @return string[] */
+ private function getMessageErrorKey( string $groupId, string ...$messages ): array {
+ $messageKeys = [];
+ foreach ( $messages as $message ) {
+ $key = $groupId . '_' . $message;
+ $hash = substr( hash( 'sha256', $key ), 0, 40 );
+ $finalKey = substr( $hash . '_gsc_error_' . $key, 0, 255 );
+ $messageKeys[] = $finalKey;
+ }
+
+ return $messageKeys;
+ }
+
+ private function getGroupMessageErrorTag( string $groupId ): string {
+ return "gsc_%error%_$groupId";
+ }
+
+ private function getGroupReviewKey( string $groupId ): string {
+ $hash = substr( hash( 'sha256', $groupId ), 0, 40 );
+ return substr( "{$hash}_gsc_%review%_$groupId", 0, 255 );
+ }
+}
diff --git a/Translate/src/Synchronization/GroupSynchronizationResponse.php b/Translate/src/Synchronization/GroupSynchronizationResponse.php
new file mode 100644
index 00000000..e855a5c3
--- /dev/null
+++ b/Translate/src/Synchronization/GroupSynchronizationResponse.php
@@ -0,0 +1,66 @@
+<?php
+
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Synchronization;
+
+use JsonSerializable;
+use MediaWiki\Json\JsonUnserializable;
+use MediaWiki\Json\JsonUnserializableTrait;
+use MediaWiki\Json\JsonUnserializer;
+
+/**
+ * Class encapsulating the response returned by the GroupSynchronizationCache
+ * when requested for an update on a group synchronization status.
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2020.06
+ */
+class GroupSynchronizationResponse implements JsonSerializable, JsonUnserializable {
+ use JsonUnserializableTrait;
+
+ /** @var MessageUpdateParameter[] */
+ private $remainingMessages;
+ /** @var string */
+ private $groupId;
+ /** @var bool */
+ private $timeout;
+
+ public function __construct(
+ string $groupId, array $remainingMessages, bool $hasTimedOut
+ ) {
+ $this->groupId = $groupId;
+ $this->remainingMessages = $remainingMessages;
+ $this->timeout = $hasTimedOut;
+ }
+
+ public function isDone(): bool {
+ return $this->remainingMessages === [];
+ }
+
+ /** @return MessageUpdateParameter[] */
+ public function getRemainingMessages(): array {
+ return $this->remainingMessages;
+ }
+
+ public function getGroupId(): string {
+ return $this->groupId;
+ }
+
+ public function hasTimedOut(): bool {
+ return $this->timeout;
+ }
+
+ /** @return mixed[] */
+ protected function toJsonArray(): array {
+ return get_object_vars( $this );
+ }
+
+ public static function newFromJsonArray( JsonUnserializer $unserializer, array $params ) {
+ return new self(
+ $params['groupId'],
+ $params['remainingMessages'],
+ $params['timeout']
+ );
+ }
+}
diff --git a/Translate/src/Synchronization/ImportTranslationsSpecialPage.php b/Translate/src/Synchronization/ImportTranslationsSpecialPage.php
new file mode 100644
index 00000000..1aad5585
--- /dev/null
+++ b/Translate/src/Synchronization/ImportTranslationsSpecialPage.php
@@ -0,0 +1,232 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Synchronization;
+
+use BagOStuff;
+use FileBasedMessageGroup;
+use GettextFFS;
+use GettextParseException;
+use Html;
+use MessageGroupBase;
+use MessageGroups;
+use SpecialPage;
+use Xml;
+
+/**
+ * Special page to import Gettext (.po) files exported using Translate extension.
+ * Does not support generic Gettext files.
+ *
+ * @author Niklas Laxström
+ * @author Siebrand Mazeland
+ * @license GPL-2.0-or-later
+ * @ingroup SpecialPage TranslateSpecialPage
+ */
+class ImportTranslationsSpecialPage extends SpecialPage {
+ /** @var BagOStuff */
+ private $cache;
+
+ public function __construct( BagOStuff $cache ) {
+ parent::__construct( 'ImportTranslations', 'translate-import' );
+ $this->cache = $cache;
+ }
+
+ public function doesWrites() {
+ return true;
+ }
+
+ protected function getGroupName() {
+ return 'translation';
+ }
+
+ /**
+ * Special page entry point.
+ * @param null|string $parameters
+ * @throws \PermissionsError
+ */
+ public function execute( $parameters ) {
+ $this->setHeaders();
+
+ // Security and validity checks
+ if ( !$this->userCanExecute( $this->getUser() ) ) {
+ $this->displayRestrictionError();
+ }
+
+ if ( !$this->getRequest()->wasPosted() ) {
+ $this->outputForm();
+
+ return;
+ }
+
+ $csrfTokenSet = $this->getContext()->getCsrfTokenSet();
+ if ( !$csrfTokenSet->matchTokenField( 'token' ) ) {
+ $this->getOutput()->addWikiMsg( 'session_fail_preview' );
+ $this->outputForm();
+
+ return;
+ }
+
+ if ( $this->getRequest()->getCheck( 'process' ) ) {
+ $data = $this->getCachedData();
+ if ( !$data ) {
+ $this->getOutput()->addWikiMsg( 'session_fail_preview' );
+ $this->outputForm();
+
+ return;
+ }
+ } else {
+ /**
+ * Proceed to loading and parsing if possible
+ * @todo: use a Status object instead?
+ */
+ $file = null;
+ $msg = $this->loadFile( $file );
+ if ( $this->checkError( $msg ) ) {
+ return;
+ }
+
+ $msg = $this->parseFile( $file );
+ if ( $this->checkError( $msg ) ) {
+ return;
+ }
+
+ $data = $msg[1];
+ $this->setCachedData( $data );
+ }
+
+ $messages = $data['MESSAGES'];
+ $group = $data['EXTRA']['METADATA']['group'];
+ $code = $data['EXTRA']['METADATA']['code'];
+
+ if ( !MessageGroups::exists( $group ) ) {
+ $errorWrap = "<div class='error'>\n$1\n</div>";
+ $this->getOutput()->wrapWikiMsg( $errorWrap, 'translate-import-err-stale-group' );
+
+ return;
+ }
+
+ $importer = new MessageWebImporter( $this->getPageTitle(), $group, $code );
+ $importer->setUser( $this->getUser() );
+ $alldone = $importer->execute( $messages );
+
+ if ( $alldone ) {
+ $this->deleteCachedData();
+ }
+ }
+
+ /**
+ * Checks for error state from the return value of loadFile and parseFile
+ * functions. Prints the error and the form and returns true if there is an
+ * error. Returns false and does nothing if there is no error.
+ */
+ private function checkError( array $msg ): bool {
+ // Give grep a chance to find the usages:
+ // translate-import-err-dl-failed, translate-import-err-ul-failed,
+ // translate-import-err-invalid-title, translate-import-err-no-such-file,
+ // translate-import-err-stale-group, translate-import-err-no-headers,
+ if ( $msg[0] !== 'ok' ) {
+ $errorWrap = "<div class='error'>\n$1\n</div>";
+ $msg[0] = 'translate-import-err-' . $msg[0];
+ $this->getOutput()->wrapWikiMsg( $errorWrap, $msg );
+ $this->outputForm();
+
+ return true;
+ }
+
+ return false;
+ }
+
+ /** Constructs and outputs file input form with supported methods. */
+ private function outputForm(): void {
+ $this->getOutput()->addModules( 'ext.translate.special.importtranslations' );
+ $this->getOutput()->addHelpLink( 'Help:Extension:Translate/Off-line_translation' );
+ /** Ugly but necessary form building ahead, ohoy */
+ $this->getOutput()->addHTML(
+ Xml::openElement( 'form', [
+ 'action' => $this->getPageTitle()->getLocalURL(),
+ 'method' => 'post',
+ 'enctype' => 'multipart/form-data',
+ 'id' => 'mw-translate-import',
+ ] ) .
+ Html::hidden( 'token', $this->getContext()->getCsrfTokenSet()->getToken() ) .
+ Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() ) .
+ Xml::inputLabel(
+ $this->msg( 'translate-import-from-local' )->text(),
+ 'upload-local', // name
+ 'mw-translate-up-local-input', // id
+ 50, // size
+ $this->getRequest()->getText( 'upload-local' ),
+ [ 'type' => 'file' ]
+ ) .
+ Xml::submitButton( $this->msg( 'translate-import-load' )->text() ) .
+ Xml::closeElement( 'form' )
+ );
+ }
+
+ /** Try to get the file data from any of the supported methods. */
+ private function loadFile( ?string &$filedata ): array {
+ $filename = $this->getRequest()->getFileTempname( 'upload-local' );
+
+ if ( !is_uploaded_file( $filename ) ) {
+ return [ 'ul-failed' ];
+ }
+
+ $filedata = file_get_contents( $filename );
+
+ return [ 'ok' ];
+ }
+
+ /** Try parsing file. */
+ private function parseFile( string $data ): array {
+ /** Construct a dummy group for us...
+ * @todo Time to rethink the interface again?
+ * @var FileBasedMessageGroup $group
+ */
+ $group = MessageGroupBase::factory( [
+ 'FILES' => [
+ 'class' => GettextFFS::class,
+ 'CtxtAsKey' => true,
+ ],
+ 'BASIC' => [
+ 'class' => FileBasedMessageGroup::class,
+ 'namespace' => -1,
+ ]
+ ] );
+ '@phan-var FileBasedMessageGroup $group';
+
+ $ffs = new GettextFFS( $group );
+
+ try {
+ $parseOutput = $ffs->readFromVariable( $data );
+ } catch ( GettextParseException $e ) {
+ return [ 'no-headers' ];
+ }
+
+ // Special data added by GettextFFS
+ $metadata = $parseOutput['EXTRA']['METADATA'];
+
+ // This should catch everything that is not a Gettext file exported from us
+ if ( !isset( $metadata['code'] ) || !isset( $metadata['group'] ) ) {
+ return [ 'no-headers' ];
+ }
+
+ return [ 'ok', $parseOutput ];
+ }
+
+ private function setCachedData( $data ): void {
+ $key = $this->cache->makeKey( 'translate', 'webimport', $this->getUser()->getId() );
+ $this->cache->set( $key, $data, 60 * 30 );
+ }
+
+ private function getCachedData() {
+ $key = $this->cache->makeKey( 'translate', 'webimport', $this->getUser()->getId() );
+
+ return $this->cache->get( $key );
+ }
+
+ private function deleteCachedData(): bool {
+ $key = $this->cache->makeKey( 'translate', 'webimport', $this->getUser()->getId() );
+
+ return $this->cache->delete( $key );
+ }
+}
diff --git a/Translate/src/Synchronization/ManageGroupSynchronizationCacheActionApi.php b/Translate/src/Synchronization/ManageGroupSynchronizationCacheActionApi.php
new file mode 100644
index 00000000..e263dffc
--- /dev/null
+++ b/Translate/src/Synchronization/ManageGroupSynchronizationCacheActionApi.php
@@ -0,0 +1,138 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Synchronization;
+
+use ApiBase;
+use ApiMain;
+use Exception;
+use FormatJson;
+use MediaWiki\Logger\LoggerFactory;
+use MessageGroups;
+use Psr\Log\LoggerInterface;
+use Wikimedia\ParamValidator\ParamValidator;
+
+/**
+ * Api module for managing group synchronization cache
+ * @ingroup API TranslateAPI
+ * @since 2021.03
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ */
+class ManageGroupSynchronizationCacheActionApi extends ApiBase {
+ private const RIGHT = 'translate-manage';
+ private const VALID_OPS = [ 'resolveMessage', 'resolveGroup' ];
+ /** @var GroupSynchronizationCache */
+ private $groupSyncCache;
+ /** @var LoggerInterface */
+ private $groupSyncLog;
+
+ public function __construct( ApiMain $mainModule, $moduleName, GroupSynchronizationCache $groupSyncCache ) {
+ parent::__construct( $mainModule, $moduleName );
+ $this->groupSyncCache = $groupSyncCache;
+ $this->groupSyncLog = LoggerFactory::getInstance( 'Translate.GroupSynchronization' );
+ }
+
+ public function execute() {
+ $this->checkUserRightsAny( self::RIGHT );
+ $block = $this->getUser()->getBlock();
+ if ( $block && $block->isSitewide() ) {
+ $this->dieBlocked( $block );
+ }
+
+ $params = $this->extractRequestParams();
+ $operation = $params['operation'];
+ $groupId = $params['group'];
+ $titleStr = $params['title'] ?? null;
+
+ $group = MessageGroups::getGroup( $groupId );
+ if ( $group === null ) {
+ $this->dieWithError( 'apierror-translate-invalidgroup', 'invalidgroup' );
+ }
+
+ try {
+ if ( $operation === 'resolveMessage' ) {
+ if ( $titleStr === null ) {
+ $this->dieWithError( [ 'apierror-missingparam', 'title' ] );
+ }
+ $this->markAsResolved( $groupId, $titleStr );
+ } elseif ( $operation === 'resolveGroup' ) {
+ $this->markAsResolved( $groupId );
+ }
+ } catch ( Exception $e ) {
+ $data = [
+ 'requestParams' => $params,
+ 'exceptionMessage' => $e->getMessage()
+ ];
+
+ $this->groupSyncLog->error(
+ "Error while running: ManageGroupSynchronizationCacheActionApi::execute. Details: \n" .
+ FormatJson::encode( $data, true )
+ );
+
+ $this->dieWithError(
+ [
+ 'apierror-translate-operation-error',
+ wfEscapeWikiText( $e->getMessage() )
+ ]
+ );
+ }
+ }
+
+ private function markAsResolved( string $groupId, ?string $messageTitle = null ): void {
+ if ( $messageTitle === null ) {
+ $currentGroupStatus = $this->groupSyncCache->markGroupAsResolved( $groupId );
+ $this->groupSyncLog->info(
+ '{user} resolved group {groupId}.',
+ [
+ 'user' => $this->getUser()->getName(),
+ 'groupId' => $groupId
+ ]
+ );
+ } else {
+ $this->groupSyncCache->markMessageAsResolved( $groupId, $messageTitle );
+ $currentGroupStatus = $this->groupSyncCache->syncGroupErrors( $groupId );
+ $this->groupSyncLog->info(
+ '{user} resolved message {messageTitle} in group {groupId}.',
+ [
+ 'user' => $this->getUser()->getName(),
+ 'groupId' => $groupId,
+ 'messageTitle' => $messageTitle
+ ]
+ );
+ }
+
+ $this->getResult()->addValue( null, $this->getModuleName(), [
+ 'success' => 1,
+ 'data' => [
+ 'groupRemainingMessageCount' => count( $currentGroupStatus->getRemainingMessages() )
+ ]
+ ] );
+ }
+
+ protected function getAllowedParams() {
+ return [
+ 'operation' => [
+ ParamValidator::PARAM_TYPE => self::VALID_OPS,
+ ParamValidator::PARAM_ISMULTI => false,
+ ParamValidator::PARAM_REQUIRED => true,
+ ],
+ 'title' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_REQUIRED => false
+ ],
+ 'group' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_REQUIRED => true
+ ]
+ ];
+ }
+
+ public function isInternal() {
+ return true;
+ }
+
+ public function needsToken() {
+ return 'csrf';
+ }
+}
diff --git a/Translate/src/Synchronization/ManageGroupsSpecialPage.php b/Translate/src/Synchronization/ManageGroupsSpecialPage.php
new file mode 100644
index 00000000..b01e8415
--- /dev/null
+++ b/Translate/src/Synchronization/ManageGroupsSpecialPage.php
@@ -0,0 +1,1115 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Synchronization;
+
+use ContentHandler;
+use DeferredUpdates;
+use DifferenceEngine;
+use DisabledSpecialPage;
+use Exception;
+use FileBasedMessageGroup;
+use Html;
+use JobQueueGroup;
+use Language;
+use LinkBatch;
+use MediaWiki\Extension\Translate\MessageSync\MessageSourceChange;
+use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\MediaWikiServices;
+use MediaWiki\Revision\RevisionLookup;
+use MediaWiki\Revision\SlotRecord;
+use MessageChangeStorage;
+use MessageGroup;
+use MessageGroups;
+use MessageHandle;
+use MessageIndex;
+use MessageUpdateJob;
+use NamespaceInfo;
+use OOUI\ButtonInputWidget;
+use OutputPage;
+use PermissionsError;
+use Skin;
+use SpecialPage;
+use TextContent;
+use Title;
+use TranslateUtils;
+use UserBlockedError;
+use WebRequest;
+use Xml;
+
+/**
+ * Class for special page Special:ManageMessageGroups. On this special page
+ * file based message groups can be managed (FileBasedMessageGroup). This page
+ * allows updating of the file cache, import and fuzzy for source language
+ * messages, as well as import/update of messages in other languages.
+ *
+ * @author Niklas Laxström
+ * @author Siebrand Mazeland
+ * @ingroup SpecialPage TranslateSpecialPage
+ * @license GPL-2.0-or-later
+ */
+class ManageGroupsSpecialPage extends SpecialPage {
+ private const GROUP_SYNC_INFO_WRAPPER_CLASS = 'smg-group-sync-cache-info';
+ private const RIGHT = 'translate-manage';
+ /** @var DifferenceEngine */
+ protected $diff;
+ /** @var string Path to the change cdb file. */
+ protected $cdb;
+ /** @var bool Has the necessary right specified by the RIGHT constant */
+ protected $hasRight = false;
+ /** @var Language */
+ private $contLang;
+ /** @var NamespaceInfo */
+ private $nsInfo;
+ /** @var RevisionLookup */
+ private $revLookup;
+ /** @var GroupSynchronizationCache */
+ private $synchronizationCache;
+ /** @var DisplayGroupSynchronizationInfo */
+ private $displayGroupSyncInfo;
+ /** @var JobQueueGroup */
+ private $jobQueueGroup;
+ /** @var MessageIndex */
+ private $messageIndex;
+
+ public function __construct(
+ Language $contLang,
+ NamespaceInfo $nsInfo,
+ RevisionLookup $revLookup,
+ GroupSynchronizationCache $synchronizationCache,
+ JobQueueGroup $jobQueueGroup,
+ MessageIndex $messageIndex
+ ) {
+ // Anyone is allowed to see, but actions are restricted
+ parent::__construct( 'ManageMessageGroups' );
+ $this->contLang = $contLang;
+ $this->nsInfo = $nsInfo;
+ $this->revLookup = $revLookup;
+ $this->synchronizationCache = $synchronizationCache;
+ $this->displayGroupSyncInfo = new DisplayGroupSynchronizationInfo( $this, $this->getLinkRenderer() );
+ $this->jobQueueGroup = $jobQueueGroup;
+ $this->messageIndex = $messageIndex;
+ }
+
+ public function doesWrites() {
+ return true;
+ }
+
+ protected function getGroupName() {
+ return 'translation';
+ }
+
+ public function getDescription() {
+ return $this->msg( 'managemessagegroups' )->text();
+ }
+
+ public function execute( $par ) {
+ $this->setHeaders();
+
+ $out = $this->getOutput();
+ $out->addModuleStyles( 'ext.translate.specialpages.styles' );
+ $out->addModules( 'ext.translate.special.managegroups' );
+ $out->addHelpLink( 'Help:Extension:Translate/Group_management' );
+
+ $name = $par ?: MessageChangeStorage::DEFAULT_NAME;
+
+ $this->cdb = MessageChangeStorage::getCdbPath( $name );
+ if ( !MessageChangeStorage::isValidCdbName( $name ) || !file_exists( $this->cdb ) ) {
+ if ( $this->getConfig()->get( 'TranslateGroupSynchronizationCache' ) ) {
+ $out->addHTML(
+ $this->displayGroupSyncInfo->getGroupsInSyncHtml(
+ $this->synchronizationCache->getGroupsInSync(),
+ self::GROUP_SYNC_INFO_WRAPPER_CLASS
+ )
+ );
+
+ $out->addHTML(
+ $this->displayGroupSyncInfo->getHtmlForGroupsWithError(
+ $this->synchronizationCache,
+ self::GROUP_SYNC_INFO_WRAPPER_CLASS,
+ $this->getLanguage()
+ )
+ );
+ }
+
+ // @todo Tell them when changes was last checked/process
+ // or how to initiate recheck.
+ $out->addWikiMsg( 'translate-smg-nochanges' );
+
+ return;
+ }
+
+ $user = $this->getUser();
+ $this->hasRight = $user->isAllowed( self::RIGHT );
+
+ $req = $this->getRequest();
+ if ( !$req->wasPosted() ) {
+ $this->showChanges( $this->getLimit() );
+
+ return;
+ }
+
+ $block = $user->getBlock();
+ if ( $block && $block->isSitewide() ) {
+ throw new UserBlockedError(
+ $block,
+ $user,
+ $this->getLanguage(),
+ $req->getIP()
+ );
+ }
+
+ $csrfTokenSet = $this->getContext()->getCsrfTokenSet();
+ if ( !$this->hasRight || !$csrfTokenSet->matchTokenField( 'token' ) ) {
+ throw new PermissionsError( self::RIGHT );
+ }
+
+ $this->processSubmit();
+ }
+
+ /** How many changes can be shown per page. */
+ protected function getLimit(): int {
+ $limits = [
+ 1000, // Default max
+ ini_get( 'max_input_vars' ),
+ ini_get( 'suhosin.post.max_vars' ),
+ ini_get( 'suhosin.request.max_vars' )
+ ];
+ // Ignore things not set
+ $limits = array_filter( $limits );
+ return (int)min( $limits );
+ }
+
+ protected function getLegend(): string {
+ $text = $this->diff->addHeader(
+ '',
+ $this->msg( 'translate-smg-left' )->escaped(),
+ $this->msg( 'translate-smg-right' )->escaped()
+ );
+
+ return Html::rawElement( 'div', [ 'class' => 'mw-translate-smg-header' ], $text );
+ }
+
+ protected function showChanges( int $limit ): void {
+ $diff = new DifferenceEngine( $this->getContext() );
+ $diff->showDiffStyle();
+ $diff->setReducedLineNumbers();
+ $this->diff = $diff;
+
+ $out = $this->getOutput();
+ $out->addHTML(
+ '' .
+ Html::openElement( 'form', [ 'method' => 'post' ] ) .
+ Html::hidden( 'title', $this->getPageTitle()->getPrefixedText(), [
+ 'id' => 'smgPageTitle'
+ ] ) .
+ Html::hidden( 'token', $this->getContext()->getCsrfTokenSet()->getToken() ) .
+ Html::hidden( 'changesetModifiedTime',
+ MessageChangeStorage::getLastModifiedTime( $this->cdb ) ) .
+ $this->getLegend()
+ );
+
+ // The above count as three
+ $limit -= 3;
+
+ $groupSyncCacheEnabled = $this->getConfig()->get( 'TranslateGroupSynchronizationCache' );
+ if ( $groupSyncCacheEnabled ) {
+ $out->addHTML(
+ $this->displayGroupSyncInfo->getGroupsInSyncHtml(
+ $this->synchronizationCache->getGroupsInSync(),
+ self::GROUP_SYNC_INFO_WRAPPER_CLASS
+ )
+ );
+
+ $out->addHTML(
+ $this->displayGroupSyncInfo->getHtmlForGroupsWithError(
+ $this->synchronizationCache,
+ self::GROUP_SYNC_INFO_WRAPPER_CLASS,
+ $this->getLanguage()
+ )
+ );
+ }
+
+ $reader = \Cdb\Reader::open( $this->cdb );
+ $groups = $this->getGroupsFromCdb( $reader );
+ foreach ( $groups as $id => $group ) {
+ $sourceChanges = MessageSourceChange::loadModifications(
+ TranslateUtils::deserialize( $reader->get( $id ) )
+ );
+ $out->addHTML( Html::element( 'h2', [], $group->getLabel() ) );
+
+ if ( $groupSyncCacheEnabled && $this->synchronizationCache->groupHasErrors( $id ) ) {
+ $out->addHTML(
+ Html::warningBox( $this->msg( 'translate-smg-group-sync-error-warn' )->escaped(), 'center' )
+ );
+ }
+
+ // Reduce page existance queries to one per group
+ $lb = new LinkBatch();
+ $ns = $group->getNamespace();
+ $isCap = $this->nsInfo->isCapitalized( $ns );
+ $languages = $sourceChanges->getLanguages();
+
+ foreach ( $languages as $language ) {
+ $languageChanges = $sourceChanges->getModificationsForLanguage( $language );
+ foreach ( $languageChanges as $type => $changes ) {
+ foreach ( $changes as $params ) {
+ // Constructing title objects is way slower
+ $key = $params['key'];
+ if ( $isCap ) {
+ $key = $this->contLang->ucfirst( $key );
+ }
+ $lb->add( $ns, "$key/$language" );
+ }
+ }
+ }
+ $lb->execute();
+
+ foreach ( $languages as $language ) {
+ // Handle and generate UI for additions, deletions, change
+ $changes = [];
+ $changes[ MessageSourceChange::ADDITION ] = $sourceChanges->getAdditions( $language );
+ $changes[ MessageSourceChange::DELETION ] = $sourceChanges->getDeletions( $language );
+ $changes[ MessageSourceChange::CHANGE ] = $sourceChanges->getChanges( $language );
+
+ foreach ( $changes as $type => $messages ) {
+ foreach ( $messages as $params ) {
+ $change = $this->formatChange( $group, $sourceChanges, $language, $type, $params, $limit );
+ $out->addHTML( $change );
+
+ if ( $limit <= 0 ) {
+ // We need to restrict the changes per page per form submission
+ // limitations as well as performance.
+ $out->wrapWikiMsg( "<div class=warning>\n$1\n</div>", 'translate-smg-more' );
+ break 4;
+ }
+ }
+ }
+
+ // Handle and generate UI for renames
+ $this->showRenames( $group, $sourceChanges, $out, $language, $limit );
+ }
+ }
+
+ $out->enableOOUI();
+ $button = new ButtonInputWidget( [
+ 'type' => 'submit',
+ 'label' => $this->msg( 'translate-smg-submit' )->plain(),
+ 'disabled' => !$this->hasRight ? 'disabled' : null,
+ 'classes' => [ 'mw-translate-smg-submit' ],
+ 'title' => !$this->hasRight ? $this->msg( 'translate-smg-notallowed' )->plain() : null,
+ 'flags' => [ 'primary', 'progressive' ],
+ ] );
+ $out->addHTML( $button );
+ $out->addHTML( Html::closeElement( 'form' ) );
+ }
+
+ protected function formatChange(
+ MessageGroup $group,
+ MessageSourceChange $changes,
+ string $language,
+ string $type,
+ array $params,
+ int &$limit
+ ): string {
+ $key = $params['key'];
+ $title = Title::makeTitleSafe( $group->getNamespace(), "$key/$language" );
+ $id = self::changeId( $group->getId(), $language, $type, $key );
+ $noticeHtml = '';
+ $isReusedKey = false;
+
+ if ( $title && $type === 'addition' && $title->exists() ) {
+ // The message has for some reason dropped out from cache
+ // or perhaps it is being reused. In any case treat it
+ // as a change for display, so the admin can see if
+ // action is needed and let the message be processed.
+ // Otherwise it will end up in the postponed category
+ // forever and will prevent rebuilding the cache, which
+ // leads to many other annoying problems.
+ $type = 'change';
+ $noticeHtml .= Html::warningBox( $this->msg( 'translate-manage-key-reused' )->text() );
+ $isReusedKey = true;
+ } elseif ( $title && ( $type === 'deletion' || $type === 'change' ) && !$title->exists() ) {
+ // This happens if a message key has been renamed
+ // The change can be ignored.
+ return '';
+ }
+
+ $text = '';
+ $titleLink = $this->getLinkRenderer()->makeLink( $title );
+
+ if ( $type === 'deletion' ) {
+ $content = $this->revLookup
+ ->getRevisionByTitle( $title )
+ ->getContent( SlotRecord::MAIN );
+ $wiki = ( $content instanceof TextContent ) ? $content->getText() : '';
+
+ if ( $wiki === '' ) {
+ $noticeHtml .= Html::warningBox(
+ $this->msg( 'translate-manage-empty-content' )->text()
+ );
+ }
+
+ $oldContent = ContentHandler::makeContent( (string)$wiki, $title );
+ $newContent = ContentHandler::makeContent( '', $title );
+ $this->diff->setContent( $oldContent, $newContent );
+ $text = $this->diff->getDiff( $titleLink, '', $noticeHtml );
+ } elseif ( $type === 'addition' ) {
+ $menu = '';
+ $sourceLanguage = $group->getSourceLanguage();
+ if ( $sourceLanguage === $language ) {
+ if ( $this->hasRight ) {
+ $menu = Html::rawElement(
+ 'button',
+ [
+ 'class' => 'smg-rename-actions',
+ 'type' => 'button',
+ 'data-group-id' => $group->getId(),
+ 'data-lang' => $language,
+ 'data-msgkey' => $key,
+ 'data-msgtitle' => $title->getFullText()
+ ],
+ ''
+ );
+ }
+ } elseif ( !self::isMessageDefinitionPresent( $group, $changes, $key ) ) {
+ $noticeHtml .= Html::warningBox(
+ $this->msg( 'translate-manage-source-message-not-found' )->text(),
+ 'mw-translate-smg-notice-important'
+ );
+
+ // Automatically ignore messages that don't have a definitions
+ $menu = Html::hidden( "msg/$id", 'ignore', [ 'id' => "i/$id" ] );
+ $limit--;
+ }
+
+ if ( $params['content'] === '' ) {
+ $noticeHtml .= Html::warningBox(
+ $this->msg( 'translate-manage-empty-content' )->text()
+ );
+ }
+
+ $oldContent = ContentHandler::makeContent( '', $title );
+ $newContent = ContentHandler::makeContent( (string)$params['content'], $title );
+ $this->diff->setContent( $oldContent, $newContent );
+ $text = $this->diff->getDiff( '', $titleLink . $menu, $noticeHtml );
+ } elseif ( $type === 'change' ) {
+ $wiki = TranslateUtils::getContentForTitle( $title, true );
+
+ $actions = '';
+ $sourceLanguage = $group->getSourceLanguage();
+
+ // Option to fuzzy is only available for source languages, and should be used
+ // if content has changed.
+ $shouldFuzzy = $sourceLanguage === $language && $wiki !== $params['content'];
+
+ if ( $sourceLanguage === $language ) {
+ $label = $this->msg( 'translate-manage-action-fuzzy' )->text();
+ $actions .= Xml::radioLabel( $label, "msg/$id", "fuzzy", "f/$id", $shouldFuzzy );
+ }
+
+ if (
+ $sourceLanguage !== $language &&
+ $isReusedKey &&
+ !self::isMessageDefinitionPresent( $group, $changes, $key )
+ ) {
+ $noticeHtml .= Html::warningBox(
+ $this->msg( 'translate-manage-source-message-not-found' )->text(),
+ 'mw-translate-smg-notice-important'
+ );
+
+ // Automatically ignore messages that don't have a definitions
+ $actions .= Html::hidden( "msg/$id", 'ignore', [ 'id' => "i/$id" ] );
+ $limit--;
+ } else {
+ $label = $this->msg( 'translate-manage-action-import' )->text();
+ $actions .= Xml::radioLabel( $label, "msg/$id", "import", "imp/$id", !$shouldFuzzy );
+
+ $label = $this->msg( 'translate-manage-action-ignore' )->text();
+ $actions .= Xml::radioLabel( $label, "msg/$id", "ignore", "i/$id" );
+ $limit--;
+ }
+
+ $oldContent = ContentHandler::makeContent( (string)$wiki, $title );
+ $newContent = ContentHandler::makeContent( (string)$params['content'], $title );
+
+ $this->diff->setContent( $oldContent, $newContent );
+ $text .= $this->diff->getDiff( $titleLink, $actions, $noticeHtml );
+ }
+
+ $hidden = Html::hidden( $id, 1 );
+ $limit--;
+ $text .= $hidden;
+ $classes = "mw-translate-smg-change smg-change-$type";
+
+ if ( $limit < 0 ) {
+ // Don't add if one of the fields might get dropped of at submission
+ return '';
+ }
+
+ return Html::rawElement( 'div', [ 'class' => $classes ], $text );
+ }
+
+ protected function processSubmit(): void {
+ $req = $this->getRequest();
+ $out = $this->getOutput();
+ $errorGroups = [];
+
+ $modificationJobs = $renameJobData = [];
+ $lastModifiedTime = intval( $req->getVal( 'changesetModifiedTime' ) );
+
+ if ( !MessageChangeStorage::isModifiedSince( $this->cdb, $lastModifiedTime ) ) {
+ $out->addWikiMsg( 'translate-smg-changeset-modified' );
+ return;
+ }
+
+ $reader = \Cdb\Reader::open( $this->cdb );
+ $groups = $this->getGroupsFromCdb( $reader );
+ $groupSyncCacheEnabled = $this->getConfig()->get( 'TranslateGroupSynchronizationCache' );
+ $postponed = [];
+
+ foreach ( $groups as $groupId => $group ) {
+ try {
+ $changes = TranslateUtils::deserialize( $reader->get( $groupId ) );
+ if ( $groupSyncCacheEnabled && $this->synchronizationCache->groupHasErrors( $groupId ) ) {
+ $postponed[$groupId] = $changes;
+ continue;
+ }
+
+ $sourceChanges = MessageSourceChange::loadModifications( $changes );
+ $groupModificationJobs = [];
+ $groupRenameJobData = [];
+ $languages = $sourceChanges->getLanguages();
+ foreach ( $languages as $language ) {
+ // Handle changes, additions, deletions
+ $this->handleModificationsSubmit(
+ $group,
+ $sourceChanges,
+ $req,
+ $language,
+ $postponed,
+ $groupModificationJobs
+ );
+
+ // Handle renames, this might also add modification jobs based on user selection.
+ $this->handleRenameSubmit(
+ $group,
+ $sourceChanges,
+ $req,
+ $language,
+ $postponed,
+ $groupRenameJobData,
+ $groupModificationJobs
+ );
+
+ if ( !isset( $postponed[$groupId][$language] ) ) {
+ $group->getMessageGroupCache( $language )->create();
+ }
+ }
+
+ if ( $groupSyncCacheEnabled && !isset( $postponed[ $groupId ] ) ) {
+ $this->synchronizationCache->markGroupAsReviewed( $groupId );
+ }
+
+ $modificationJobs[$groupId] = $groupModificationJobs;
+ $renameJobData[$groupId] = $groupRenameJobData;
+ } catch ( Exception $e ) {
+ error_log(
+ "ManageGroupsSpecialPage: Error in processSubmit. Group: $groupId\n" .
+ "Exception: $e"
+ );
+
+ $errorGroups[] = $group->getLabel();
+ }
+ }
+
+ $renameJobs = $this->createRenameJobs( $renameJobData );
+ $this->startSync( $modificationJobs, $renameJobs );
+
+ $reader->close();
+ rename( $this->cdb, $this->cdb . '-' . wfTimestamp() );
+
+ if ( $errorGroups ) {
+ $errorMsg = $this->getProcessingErrorMessage( $errorGroups, count( $groups ) );
+ $out->addHTML(
+ Html::warningBox(
+ $errorMsg,
+ 'mw-translate-smg-submitted'
+ )
+ );
+ }
+
+ if ( count( $postponed ) ) {
+ $postponedSourceChanges = [];
+ foreach ( $postponed as $groupId => $changes ) {
+ $postponedSourceChanges[$groupId] = MessageSourceChange::loadModifications( $changes );
+ }
+ MessageChangeStorage::writeChanges( $postponedSourceChanges, $this->cdb );
+
+ $this->showChanges( $this->getLimit() );
+ } elseif ( $errorGroups === [] ) {
+ $out->addWikiMsg( 'translate-smg-submitted' );
+ }
+ }
+
+ protected static function changeId(
+ string $groupId,
+ string $language,
+ string $type,
+ string $key
+ ): string {
+ return 'smg/' . substr( sha1( "$groupId/$language/$type/$key" ), 0, 7 );
+ }
+
+ /**
+ * Adds the task-based tabs on Special:Translate and few other special pages.
+ * Hook: SkinTemplateNavigation::Universal
+ */
+ public static function tabify( Skin $skin, array &$tabs ): void {
+ $title = $skin->getTitle();
+ if ( !$title->isSpecialPage() ) {
+ return;
+ }
+ $specialPageFactory = MediaWikiServices::getInstance()->getSpecialPageFactory();
+ [ $alias, ] = $specialPageFactory->resolveAlias( $title->getText() );
+
+ $pagesInGroup = [
+ 'ManageMessageGroups' => 'namespaces',
+ 'AggregateGroups' => 'namespaces',
+ 'SupportedLanguages' => 'views',
+ 'TranslationStats' => 'views',
+ ];
+ if ( !isset( $pagesInGroup[$alias] ) ) {
+ return;
+ }
+
+ $tabs['namespaces'] = [];
+ foreach ( $pagesInGroup as $spName => $section ) {
+ $spClass = $specialPageFactory->getPage( $spName );
+
+ if ( $spClass === null || $spClass instanceof DisabledSpecialPage ) {
+ continue; // Page explicitly disabled
+ }
+ $spTitle = $spClass->getPageTitle();
+
+ $tabs[$section][strtolower( $spName )] = [
+ 'text' => $spClass->getDescription(),
+ 'href' => $spTitle->getLocalURL(),
+ 'class' => $alias === $spName ? 'selected' : '',
+ ];
+ }
+ }
+
+ /**
+ * Check if the message definition is present as an incoming addition
+ * OR exists already on the wiki
+ */
+ private static function isMessageDefinitionPresent(
+ MessageGroup $group,
+ MessageSourceChange $changes,
+ string $msgKey
+ ): bool {
+ $sourceLanguage = $group->getSourceLanguage();
+ if ( $changes->findMessage( $sourceLanguage, $msgKey, [ MessageSourceChange::ADDITION ] ) ) {
+ return true;
+ }
+
+ $namespace = $group->getNamespace();
+ $sourceHandle = new MessageHandle( Title::makeTitle( $namespace, $msgKey ) );
+ return $sourceHandle->isValid();
+ }
+
+ private function showRenames(
+ MessageGroup $group,
+ MessageSourceChange $sourceChanges,
+ OutputPage $out,
+ string $language,
+ int &$limit
+ ): void {
+ $changes = $sourceChanges->getRenames( $language );
+ foreach ( $changes as $key => $params ) {
+ // Since we're removing items from the array within the loop add
+ // a check here to ensure that the current key is still set.
+ if ( !isset( $changes[ $key ] ) ) {
+ continue;
+ }
+
+ if ( $group->getSourceLanguage() !== $language &&
+ $sourceChanges->isEqual( $language, $key ) ) {
+ // This is a translation rename, that does not have any changes.
+ // We can group this along with the source rename.
+ continue;
+ }
+
+ // Determine added key, and corresponding removed key.
+ $firstMsg = $params;
+ $secondKey = $sourceChanges->getMatchedKey( $language, $key );
+ $secondMsg = $sourceChanges->getMatchedMessage( $language, $key );
+
+ if (
+ $sourceChanges->isPreviousState(
+ $language,
+ $key,
+ [ MessageSourceChange::ADDITION, MessageSourceChange::CHANGE ]
+ )
+ ) {
+ $addedMsg = $firstMsg;
+ $deletedMsg = $secondMsg;
+ } else {
+ $addedMsg = $secondMsg;
+ $deletedMsg = $firstMsg;
+ }
+
+ $change = $this->formatRename(
+ $group,
+ $addedMsg,
+ $deletedMsg,
+ $language,
+ $sourceChanges->isEqual( $language, $key ),
+ $limit
+ );
+ $out->addHTML( $change );
+
+ // no need to process the second key again.
+ unset( $changes[$secondKey] );
+
+ if ( $limit <= 0 ) {
+ // We need to restrict the changes per page per form submission
+ // limitations as well as performance.
+ $out->wrapWikiMsg( "<div class=warning>\n$1\n</div>", 'translate-smg-more' );
+ break;
+ }
+ }
+ }
+
+ private function formatRename(
+ MessageGroup $group,
+ array $addedMsg,
+ array $deletedMsg,
+ string $language,
+ bool $isEqual,
+ int &$limit
+ ): string {
+ $addedKey = $addedMsg['key'];
+ $deletedKey = $deletedMsg['key'];
+ $actions = '';
+
+ $addedTitle = Title::makeTitleSafe( $group->getNamespace(), "$addedKey/$language" );
+ $deletedTitle = Title::makeTitleSafe( $group->getNamespace(), "$deletedKey/$language" );
+ $id = self::changeId( $group->getId(), $language, MessageSourceChange::RENAME, $addedKey );
+
+ $addedTitleLink = $this->getLinkRenderer()->makeLink( $addedTitle );
+ $deletedTitleLink = $this->getLinkRenderer()->makeLink( $deletedTitle );
+
+ $renameSelected = true;
+ if ( $group->getSourceLanguage() === $language ) {
+ if ( !$isEqual ) {
+ $renameSelected = false;
+ $label = $this->msg( 'translate-manage-action-rename-fuzzy' )->text();
+ $actions .= Xml::radioLabel( $label, "msg/$id", "renamefuzzy", "rf/$id", true );
+ }
+
+ $label = $this->msg( 'translate-manage-action-rename' )->text();
+ $actions .= Xml::radioLabel( $label, "msg/$id", "rename", "imp/$id", $renameSelected );
+ } else {
+ $label = $this->msg( 'translate-manage-action-import' )->text();
+ $actions .= Xml::radioLabel( $label, "msg/$id", "import", "imp/$id", true );
+ }
+
+ if ( $group->getSourceLanguage() !== $language ) {
+ // Allow user to ignore changes to non-source languages.
+ $label = $this->msg( 'translate-manage-action-ignore-change' )->text();
+ $actions .= Xml::radioLabel( $label, "msg/$id", "ignore", "i/$id" );
+ }
+ $limit--;
+
+ $addedContent = ContentHandler::makeContent( (string)$addedMsg['content'], $addedTitle );
+ $deletedContent = ContentHandler::makeContent( (string)$deletedMsg['content'], $deletedTitle );
+ $this->diff->setContent( $deletedContent, $addedContent );
+
+ $menu = '';
+ if ( $group->getSourceLanguage() === $language && $this->hasRight ) {
+ // Only show rename and add as new option for source language.
+ $menu = Html::rawElement(
+ 'button',
+ [
+ 'class' => 'smg-rename-actions',
+ 'type' => 'button',
+ 'data-group-id' => $group->getId(),
+ 'data-msgkey' => $addedKey,
+ 'data-msgtitle' => $addedTitle->getFullText()
+ ], ''
+ );
+ }
+
+ $actions = Html::rawElement( 'div', [ 'class' => 'smg-change-import-options' ], $actions );
+
+ $text = $this->diff->getDiff(
+ $deletedTitleLink,
+ $addedTitleLink . $menu . $actions,
+ $isEqual ? htmlspecialchars( $addedMsg['content'] ) : ''
+ );
+
+ $hidden = Html::hidden( $id, 1 );
+ $limit--;
+ $text .= $hidden;
+
+ return Html::rawElement(
+ 'div',
+ [ 'class' => 'mw-translate-smg-change smg-change-rename' ],
+ $text
+ );
+ }
+
+ private function getRenameJobParams(
+ array $currentMsg,
+ MessageSourceChange $sourceChanges,
+ string $languageCode,
+ int $groupNamespace,
+ string $selectedVal,
+ bool $isSourceLang = true
+ ): ?array {
+ if ( $selectedVal === 'ignore' ) {
+ return null;
+ }
+
+ $params = [];
+ $replacementContent = '';
+ $currentMsgKey = $currentMsg['key'];
+ $matchedMsg = $sourceChanges->getMatchedMessage( $languageCode, $currentMsgKey );
+ $matchedMsgKey = $matchedMsg['key'];
+
+ if (
+ $sourceChanges->isPreviousState(
+ $languageCode,
+ $currentMsgKey,
+ [ MessageSourceChange::ADDITION, MessageSourceChange::CHANGE ]
+ )
+ ) {
+ $params['target'] = $matchedMsgKey;
+ $params['replacement'] = $currentMsgKey;
+ $replacementContent = $currentMsg['content'];
+ } else {
+ $params['target'] = $currentMsgKey;
+ $params['replacement'] = $matchedMsgKey;
+ $replacementContent = $matchedMsg['content'];
+ }
+
+ $params['fuzzy'] = $selectedVal === 'renamefuzzy';
+
+ $params['content'] = $replacementContent;
+
+ if ( $isSourceLang ) {
+ $params['targetTitle'] = Title::newFromText(
+ TranslateUtils::title( $params['target'], $languageCode, $groupNamespace ),
+ $groupNamespace
+ );
+ $params['others'] = [];
+ }
+
+ return $params;
+ }
+
+ private function handleRenameSubmit(
+ MessageGroup $group,
+ MessageSourceChange $sourceChanges,
+ WebRequest $req,
+ string $language,
+ array &$postponed,
+ array &$jobData,
+ array &$modificationJobs
+ ): void {
+ $groupId = $group->getId();
+ $renames = $sourceChanges->getRenames( $language );
+ $isSourceLang = $group->getSourceLanguage() === $language;
+ $groupNamespace = $group->getNamespace();
+
+ foreach ( $renames as $key => $params ) {
+ // Since we're removing items from the array within the loop add
+ // a check here to ensure that the current key is still set.
+ if ( !isset( $renames[$key] ) ) {
+ continue;
+ }
+
+ $id = self::changeId( $groupId, $language, MessageSourceChange::RENAME, $key );
+
+ [ $renameMissing, $isCurrentKeyPresent ] = $this->isRenameMissing(
+ $req,
+ $sourceChanges,
+ $id,
+ $key,
+ $language,
+ $groupId,
+ $isSourceLang
+ );
+
+ if ( $renameMissing ) {
+ // we probably hit the limit with number of post parameters since neither
+ // addition or deletion key is present.
+ $postponed[$groupId][$language][MessageSourceChange::RENAME][$key] = $params;
+ continue;
+ }
+
+ if ( !$isCurrentKeyPresent ) {
+ // still don't process this key, and wait for the matched rename
+ continue;
+ }
+
+ $selectedVal = $req->getVal( "msg/$id" );
+ $jobParams = $this->getRenameJobParams(
+ $params,
+ $sourceChanges,
+ $language,
+ $groupNamespace,
+ $selectedVal,
+ $isSourceLang
+ );
+
+ if ( $jobParams === null ) {
+ continue;
+ }
+
+ $targetStr = $jobParams[ 'target' ];
+ if ( $isSourceLang ) {
+ $jobData[ $targetStr ] = $jobParams;
+ } elseif ( isset( $jobData[ $targetStr ] ) ) {
+ // We are grouping the source rename, and content changes in other languages
+ // for the message together into a single job in order to avoid race conditions
+ // since jobs are not guaranteed to be run in order.
+ $jobData[ $targetStr ][ 'others' ][ $language ] = $jobParams[ 'content' ];
+ } else {
+ // the source was probably ignored, we should add this as a modification instead,
+ // since the source is not going to be renamed.
+ $title = Title::newFromText(
+ TranslateUtils::title( $targetStr, $language, $groupNamespace ),
+ $groupNamespace
+ );
+ $modificationJobs[] = MessageUpdateJob::newJob( $title, $jobParams['content'] );
+ }
+
+ // remove the matched key in order to avoid double processing.
+ $matchedKey = $sourceChanges->getMatchedKey( $language, $key );
+ unset( $renames[$matchedKey] );
+ }
+ }
+
+ private function handleModificationsSubmit(
+ MessageGroup $group,
+ MessageSourceChange $sourceChanges,
+ WebRequest $req,
+ string $language,
+ array &$postponed,
+ array &$messageUpdateJob
+ ): void {
+ $groupId = $group->getId();
+ $subchanges = $sourceChanges->getModificationsForLanguage( $language );
+
+ // Ignore renames
+ unset( $subchanges[ MessageSourceChange::RENAME ] );
+
+ // Handle additions, deletions, and changes.
+ foreach ( $subchanges as $type => $messages ) {
+ foreach ( $messages as $index => $params ) {
+ $key = $params['key'];
+ $id = self::changeId( $groupId, $language, $type, $key );
+ $title = Title::makeTitleSafe( $group->getNamespace(), "$key/$language" );
+
+ if ( !$this->isTitlePresent( $title, $type ) ) {
+ continue;
+ }
+
+ if ( !$req->getCheck( $id ) ) {
+ // We probably hit the limit with number of post parameters.
+ $postponed[$groupId][$language][$type][$index] = $params;
+ continue;
+ }
+
+ $selectedVal = $req->getVal( "msg/$id" );
+ if ( $type === MessageSourceChange::DELETION || $selectedVal === 'ignore' ) {
+ continue;
+ }
+
+ $fuzzy = $selectedVal === 'fuzzy';
+ $messageUpdateJob[] = MessageUpdateJob::newJob( $title, $params['content'], $fuzzy );
+ }
+ }
+ }
+
+ /** @return MessageUpdateJob[][] */
+ private function createRenameJobs( array $jobParams ): array {
+ $jobs = [];
+ foreach ( $jobParams as $groupId => $groupJobParams ) {
+ $jobs[$groupId] = $jobs[$groupId] ?? [];
+ foreach ( $groupJobParams as $params ) {
+ $jobs[$groupId][] = MessageUpdateJob::newRenameJob(
+ $params['targetTitle'],
+ $params['target'],
+ $params['replacement'],
+ $params['fuzzy'],
+ $params['content'],
+ $params['others']
+ );
+ }
+ }
+
+ return $jobs;
+ }
+
+ /** Checks if a title still exists and can be processed. */
+ private function isTitlePresent( Title $title, string $type ): bool {
+ // phpcs:ignore SlevomatCodingStandard.ControlStructures.UselessIfConditionWithReturn
+ if (
+ ( $type === MessageSourceChange::DELETION || $type === MessageSourceChange::CHANGE ) &&
+ !$title->exists()
+ ) {
+ // This means that this change was probably introduced due to a rename
+ // which removed the key. No need to process.
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Checks if a renamed message key is missing from the user request submission.
+ * Checks the current key and the matched key. This is needed because as the
+ * keys in the wiki are not submitted along with the request, only the incoming
+ * modified keys are submitted.
+ * @return bool[]
+ * $response = [
+ * 0 => (bool) True if rename is missing, false otherwise.
+ * 1 => (bool) Was the current $id found?
+ * ]
+ */
+ private function isRenameMissing(
+ WebRequest $req,
+ MessageSourceChange $sourceChanges,
+ string $id,
+ string $key,
+ string $language,
+ string $groupId,
+ bool $isSourceLang
+ ): array {
+ if ( $req->getCheck( $id ) ) {
+ return [ false, true ];
+ }
+
+ $isCurrentKeyPresent = false;
+
+ // Checked the matched key is also missing to confirm if its truly missing
+ $matchedKey = $sourceChanges->getMatchedKey( $language, $key );
+ $matchedId = self::changeId( $groupId, $language, MessageSourceChange::RENAME, $matchedKey );
+ if ( $req->getCheck( $matchedId ) ) {
+ return [ false, $isCurrentKeyPresent ];
+ }
+
+ // For non source language, if strings are equal, they are not shown on the UI
+ // and hence not submitted.
+ return [
+ $isSourceLang || !$sourceChanges->isEqual( $language, $matchedKey ),
+ $isCurrentKeyPresent
+ ];
+ }
+
+ private function getProcessingErrorMessage( array $errorGroups, int $totalGroupCount ): string {
+ // Number of error groups, are less than the total groups processed.
+ if ( count( $errorGroups ) < $totalGroupCount ) {
+ $errorMsg = $this->msg( 'translate-smg-submitted-with-failure' )
+ ->numParams( count( $errorGroups ) )
+ ->params(
+ $this->getLanguage()->commaList( $errorGroups ),
+ $this->msg( 'translate-smg-submitted-others-processing' )
+ )->text();
+ } else {
+ $errorMsg = trim(
+ $this->msg( 'translate-smg-submitted-with-failure' )
+ ->numParams( count( $errorGroups ) )
+ ->params( $this->getLanguage()->commaList( $errorGroups ), '' )
+ ->text()
+ );
+ }
+
+ return $errorMsg;
+ }
+
+ /** @return FileBasedMessageGroup[] */
+ private function getGroupsFromCdb( \Cdb\Reader $reader ): array {
+ $groups = [];
+ $groupIds = TranslateUtils::deserialize( $reader->get( '#keys' ) );
+ foreach ( $groupIds as $id ) {
+ $groups[$id] = MessageGroups::getGroup( $id );
+ }
+ return array_filter( $groups );
+ }
+
+ /**
+ * Add jobs to the queue, updates the interim cache, and start sync process for the group.
+ * @param MessageUpdateJob[][] $modificationJobs
+ * @param MessageUpdateJob[][] $renameJobs
+ */
+ private function startSync( array $modificationJobs, array $renameJobs ): void {
+ // We are adding an empty array for groups that have no jobs. This is mainly done to
+ // avoid adding unnecessary checks. Remove those using array_filter
+ $modificationGroupIds = array_keys( array_filter( $modificationJobs ) );
+ $renameGroupIds = array_keys( array_filter( $renameJobs ) );
+ $uniqueGroupIds = array_unique( array_merge( $modificationGroupIds, $renameGroupIds ) );
+ $jobQueueInstance = $this->jobQueueGroup;
+
+ foreach ( $uniqueGroupIds as $groupId ) {
+ $messages = [];
+ $messageKeys = [];
+ $groupJobs = [];
+
+ $groupRenameJobs = $renameJobs[$groupId] ?? [];
+ /** @var MessageUpdateJob $job */
+ foreach ( $groupRenameJobs as $job ) {
+ $groupJobs[] = $job;
+ $messageUpdateParam = MessageUpdateParameter::createFromJob( $job );
+ $messages[] = $messageUpdateParam;
+
+ // Build the handle to add the message key in interim cache
+ $replacement = $messageUpdateParam->getReplacementValue();
+ $targetTitle = Title::makeTitle( $job->getTitle()->getNamespace(), $replacement );
+ $messageKeys[] = ( new MessageHandle( $targetTitle ) )->getKey();
+ }
+
+ $groupModificationJobs = $modificationJobs[$groupId] ?? [];
+ /** @var MessageUpdateJob $job */
+ foreach ( $groupModificationJobs as $job ) {
+ $groupJobs[] = $job;
+ $messageUpdateParam = MessageUpdateParameter::createFromJob( $job );
+ $messages[] = $messageUpdateParam;
+
+ $messageKeys[] = ( new MessageHandle( $job->getTitle() ) )->getKey();
+ }
+
+ // Store all message keys in the interim cache - we're particularly interested in new
+ // and renamed messages, but it's cleaner to just store everything.
+ $group = MessageGroups::getGroup( $groupId );
+ $this->messageIndex->storeInterim( $group, $messageKeys );
+
+ if ( $this->getConfig()->get( 'TranslateGroupSynchronizationCache' ) ) {
+ $this->synchronizationCache->addMessages( $groupId, ...$messages );
+ $this->synchronizationCache->markGroupForSync( $groupId );
+
+ LoggerFactory::getInstance( 'Translate.GroupSynchronization' )->info(
+ '[' . __CLASS__ . '] Synchronization started for {groupId} by {user}',
+ [
+ 'groupId' => $groupId,
+ 'user' => $this->getUser()->getName()
+ ]
+ );
+ }
+
+ // There is posibility for a race condition here: the translate_cache table / group sync
+ // cache is not yet populated with the messages to be processed, but the jobs start
+ // running and try to remove the message from the cache. This results in a "Key not found"
+ // error. Avoid this condition by using a DeferredUpdate.
+ DeferredUpdates::addCallableUpdate(
+ static function () use ( $jobQueueInstance, $groupJobs ) {
+ $jobQueueInstance->push( $groupJobs );
+ }
+ );
+
+ }
+ }
+}
diff --git a/Translate/src/Synchronization/MessageUpdateParameter.php b/Translate/src/Synchronization/MessageUpdateParameter.php
new file mode 100644
index 00000000..e5dbdb21
--- /dev/null
+++ b/Translate/src/Synchronization/MessageUpdateParameter.php
@@ -0,0 +1,99 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Synchronization;
+
+use JsonSerializable;
+use MediaWiki\Json\JsonUnserializable;
+use MediaWiki\Json\JsonUnserializableTrait;
+use MediaWiki\Json\JsonUnserializer;
+use MessageUpdateJob;
+
+/**
+ * Store params for MessageUpdateJob.
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2020.06
+ */
+class MessageUpdateParameter implements JsonSerializable, JsonUnserializable {
+ use JsonUnserializableTrait;
+
+ /** @var string */
+ private $pageName;
+ /** @var bool */
+ private $rename;
+ /** @var bool */
+ private $fuzzy;
+ /** @var string */
+ private $content;
+ /** @var string */
+ private $target;
+ /** @var string */
+ private $replacement;
+ /** @var array|null */
+ private $otherLangs;
+
+ public function __construct( array $params ) {
+ $this->assignPropsFromArray( $params );
+ }
+
+ public function getPageName(): string {
+ return $this->pageName;
+ }
+
+ public function isRename(): bool {
+ return $this->rename;
+ }
+
+ public function getReplacementValue(): string {
+ return $this->replacement;
+ }
+
+ public function getTargetValue(): string {
+ return $this->target;
+ }
+
+ public function getContent(): string {
+ return $this->content;
+ }
+
+ public function isFuzzy(): bool {
+ return $this->fuzzy;
+ }
+
+ public function getOtherLangs(): ?array {
+ return $this->otherLangs;
+ }
+
+ public static function newFromJsonArray( JsonUnserializer $unserializer, array $params ) {
+ return new self( $params );
+ }
+
+ /** @return mixed[] */
+ protected function toJsonArray(): array {
+ return get_object_vars( $this );
+ }
+
+ private function assignPropsFromArray( array $params ) {
+ // We are using "rename" as value for $params['rename']
+ // at some places otherwise this could be simplified to
+ // $params['rename'] ?? false
+ $this->rename = isset( $params['rename'] ) && $params['rename'];
+ $this->fuzzy = $params['fuzzy'];
+ $this->content = $params['content'];
+ $this->pageName = $params['title'] ?? $params['pageName'];
+
+ if ( $this->rename ) {
+ $this->target = $params['target'];
+ $this->replacement = $params['replacement'];
+ $this->otherLangs = $params['otherLangs'] ?? [];
+ }
+ }
+
+ /** Create a new instance of the class from MessageUpdateJob */
+ public static function createFromJob( MessageUpdateJob $job ): self {
+ $jobParams = $job->getParams();
+ $jobParams['title'] = $job->getTitle()->getPrefixedDBkey();
+ return new self( $jobParams );
+ }
+}
diff --git a/Translate/src/Synchronization/MessageWebImporter.php b/Translate/src/Synchronization/MessageWebImporter.php
new file mode 100644
index 00000000..405a2bf8
--- /dev/null
+++ b/Translate/src/Synchronization/MessageWebImporter.php
@@ -0,0 +1,608 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Synchronization;
+
+use ContentHandler;
+use DifferenceEngine;
+use Html;
+use Language;
+use MediaWiki\Extension\Translate\SystemUsers\FuzzyBot;
+use MediaWiki\MediaWikiServices;
+use MediaWiki\Revision\SlotRecord;
+use MessageGroup;
+use MessageGroups;
+use MessageHandle;
+use MWException;
+use OutputPage;
+use RequestContext;
+use Sanitizer;
+use Title;
+use TranslateUtils;
+use User;
+use Xml;
+
+/**
+ * Class which encapsulates message importing. It scans for changes (new, changed, deleted),
+ * displays them in pretty way with diffs and finally executes the actions the user choices.
+ *
+ * @author Niklas Laxström
+ * @author Siebrand Mazeland
+ * @copyright Copyright © 2009-2013, Niklas Laxström, Siebrand Mazeland
+ * @license GPL-2.0-or-later
+ */
+class MessageWebImporter {
+ /** @var Title */
+ protected $title;
+ /** @var User */
+ protected $user;
+ /** @var MessageGroup */
+ protected $group;
+ protected $code;
+ protected $time;
+ /** @var OutputPage */
+ protected $out;
+ /**
+ * Maximum processing time in seconds.
+ */
+ protected $processingTime = 43;
+
+ /**
+ * @param Title|null $title
+ * @param MessageGroup|string|null $group
+ * @param string $code
+ */
+ public function __construct( Title $title = null, $group = null, $code = 'en' ) {
+ $this->setTitle( $title );
+ $this->setGroup( $group );
+ $this->setCode( $code );
+ }
+
+ /** Wrapper for consistency with SpecialPage */
+ public function getTitle(): Title {
+ return $this->title;
+ }
+
+ public function setTitle( Title $title ): void {
+ $this->title = $title;
+ }
+
+ public function getUser(): User {
+ return $this->user ?: RequestContext::getMain()->getUser();
+ }
+
+ public function setUser( User $user ): void {
+ $this->user = $user;
+ }
+
+ public function getGroup(): MessageGroup {
+ return $this->group;
+ }
+
+ /** @param MessageGroup|string $group MessageGroup object or group ID */
+ public function setGroup( $group ): void {
+ if ( $group instanceof MessageGroup ) {
+ $this->group = $group;
+ } else {
+ $this->group = MessageGroups::getGroup( $group );
+ }
+ }
+
+ public function getCode(): string {
+ return $this->code;
+ }
+
+ public function setCode( string $code = 'en' ): void {
+ $this->code = $code;
+ }
+
+ protected function getAction(): string {
+ return $this->getTitle()->getLocalURL();
+ }
+
+ protected function doHeader(): string {
+ $formParams = [
+ 'method' => 'post',
+ 'action' => $this->getAction(),
+ 'class' => 'mw-translate-manage'
+ ];
+
+ $csrfTokenSet = RequestContext::getMain()->getCsrfTokenSet();
+ return Xml::openElement( 'form', $formParams ) .
+ Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) .
+ Html::hidden( 'token', $csrfTokenSet->getToken() ) .
+ Html::hidden( 'process', 1 );
+ }
+
+ protected function doFooter(): string {
+ return '</form>';
+ }
+
+ protected function allowProcess(): bool {
+ $context = RequestContext::getMain();
+ $request = $context->getRequest();
+ $csrfTokenSet = $context->getCsrfTokenSet();
+
+ return $request->wasPosted()
+ && $request->getBool( 'process', false )
+ && $csrfTokenSet->matchTokenField( 'token' );
+ }
+
+ protected function getActions(): array {
+ if ( $this->code === 'en' ) {
+ return [ 'import', 'fuzzy', 'ignore' ];
+ }
+
+ return [ 'import', 'conflict', 'ignore' ];
+ }
+
+ protected function getDefaultAction( bool $fuzzy, ?string $action ): string {
+ if ( $action ) {
+ return $action;
+ }
+
+ return $fuzzy ? 'conflict' : 'import';
+ }
+
+ public function execute( array $messages ): bool {
+ $context = RequestContext::getMain();
+ $this->out = $context->getOutput();
+
+ // Set up diff engine
+ $diff = new DifferenceEngine();
+ $diff->showDiffStyle();
+ $diff->setReducedLineNumbers();
+
+ // Check whether we do processing
+ $process = $this->allowProcess();
+
+ // Initialise collection
+ $group = $this->getGroup();
+ $code = $this->getCode();
+ $collection = $group->initCollection( $code );
+ $collection->loadTranslations();
+
+ $this->out->addHTML( $this->doHeader() );
+
+ // Initialise variable to keep track whether all changes were imported
+ // or not. If we're allowed to process, initially assume they were.
+ $alldone = $process;
+
+ // Determine changes for each message.
+ $changed = [];
+
+ foreach ( $messages as $key => $value ) {
+ $fuzzy = false;
+ $old = null;
+
+ if ( isset( $collection[$key] ) ) {
+ // This returns null if no existing translation is found
+ $old = $collection[$key]->translation();
+ }
+
+ // No changes at all, ignore
+ if ( (string)$old === (string)$value ) {
+ continue;
+ }
+
+ if ( $old === null ) {
+ // We found a new translation for this message of the
+ // current group: import it.
+ if ( $process ) {
+ $action = 'import';
+ self::doAction(
+ $action,
+ $group,
+ $key,
+ $code,
+ $value,
+ '',
+ $this->getUser()
+ );
+ }
+ // Show the user that we imported the new translation
+ $para = '<code class="mw-tmi-new">' . htmlspecialchars( $key ) . '</code>';
+ $name = $context->msg( 'translate-manage-import-new' )->rawParams( $para )
+ ->escaped();
+ $text = TranslateUtils::convertWhiteSpaceToHTML( $value );
+ $changed[] = self::makeSectionElement( $name, 'new', $text );
+ } else {
+ $oldContent = ContentHandler::makeContent( $old, $diff->getTitle() );
+ $newContent = ContentHandler::makeContent( $value, $diff->getTitle() );
+ $diff->setContent( $oldContent, $newContent );
+ $text = $diff->getDiff( '', '' );
+
+ // This is a changed translation. Note it for the next steps.
+ $type = 'changed';
+
+ // Get the user instructions for the current message,
+ // submitted together with the form
+ $action = $context->getRequest()
+ ->getVal( self::escapeNameForPHP( "action-$type-$key" ) );
+
+ if ( $process ) {
+ if ( $changed === [] ) {
+ // Initialise the HTML list showing the changes performed
+ $changed[] = '<ul>';
+ }
+
+ if ( $action === null ) {
+ // We have been told to process the messages, but not
+ // what to do with this one. Tell the user.
+ $message = $context->msg(
+ 'translate-manage-inconsistent',
+ wfEscapeWikiText( "action-$type-$key" )
+ )->parse();
+ $changed[] = "<li>$message</li></ul>";
+
+ // Also stop any further processing for the other messages.
+ $process = false;
+ } else {
+ // Check processing time
+ if ( !isset( $this->time ) ) {
+ $this->time = wfTimestamp();
+ }
+
+ // We have all the necessary information on this changed
+ // translation: actually process the message
+ $messageKeyAndParams = self::doAction(
+ $action,
+ $group,
+ $key,
+ $code,
+ $value,
+ '',
+ $this->getUser()
+ );
+
+ // Show what we just did, adding to the list of changes
+ $msgKey = array_shift( $messageKeyAndParams );
+ $params = $messageKeyAndParams;
+ $message = $context->msg( $msgKey, $params )->parse();
+ $changed[] = "<li>$message</li>";
+
+ // Stop processing further messages if too much time
+ // has been spent.
+ if ( $this->checkProcessTime() ) {
+ $process = false;
+ $message = $context->msg( 'translate-manage-toolong' )
+ ->numParams( $this->processingTime )->parse();
+ $changed[] = "<li>$message</li></ul>";
+ }
+
+ continue;
+ }
+ }
+
+ // We are not processing messages, or no longer, or this was an
+ // unactionable translation. We will eventually return false
+ $alldone = false;
+
+ // Prepare to ask the user what to do with this message
+ $actions = $this->getActions();
+ $defaction = $this->getDefaultAction( $fuzzy, $action );
+
+ $act = [];
+
+ // Give grep a chance to find the usages:
+ // translate-manage-action-import, translate-manage-action-conflict,
+ // translate-manage-action-ignore, translate-manage-action-fuzzy
+ foreach ( $actions as $action ) {
+ $label = $context->msg( "translate-manage-action-$action" )->text();
+ $name = self::escapeNameForPHP( "action-$type-$key" );
+ $id = Sanitizer::escapeIdForAttribute( "action-$key-$action" );
+ $act[] = Xml::radioLabel( $label, $name, $action, $id, $action === $defaction );
+ }
+
+ $param = '<code class="mw-tmi-diff">' . htmlspecialchars( $key ) . '</code>';
+ $name = $context->msg( 'translate-manage-import-diff' )
+ ->rawParams( $param, implode( ' ', $act ) )
+ ->escaped();
+
+ $changed[] = self::makeSectionElement( $name, $type, $text );
+ }
+ }
+
+ if ( !$process ) {
+ $collection->filter( 'hastranslation', false );
+ $keys = $collection->getMessageKeys();
+
+ $diff = array_diff( $keys, array_keys( $messages ) );
+
+ foreach ( $diff as $s ) {
+ $para = '<code class="mw-tmi-deleted">' . htmlspecialchars( $s ) . '</code>';
+ $name = $context->msg( 'translate-manage-import-deleted' )->rawParams( $para )->escaped();
+ $text = TranslateUtils::convertWhiteSpaceToHTML( $collection[$s]->translation() );
+ $changed[] = self::makeSectionElement( $name, 'deleted', $text );
+ }
+ }
+
+ if ( $process || ( $changed === [] && $code !== 'en' ) ) {
+ if ( $changed === [] ) {
+ $this->out->addWikiMsg( 'translate-manage-nochanges-other' );
+ }
+
+ if ( $changed === [] || strpos( end( $changed ), '<li>' ) !== 0 ) {
+ $changed[] = '<ul>';
+ }
+
+ $message = $context->msg( 'translate-manage-import-done' )->parse();
+ $changed[] = "<li>$message</li></ul>";
+ $this->out->addHTML( implode( "\n", $changed ) );
+ } else {
+ // END
+ if ( $changed !== [] ) {
+ if ( $code === 'en' ) {
+ $this->out->addWikiMsg( 'translate-manage-intro-en' );
+ } else {
+ $lang = TranslateUtils::getLanguageName(
+ $code,
+ $context->getLanguage()->getCode()
+ );
+ $this->out->addWikiMsg( 'translate-manage-intro-other', $lang );
+ }
+ $this->out->addHTML( Html::hidden( 'language', $code ) );
+ $this->out->addHTML( implode( "\n", $changed ) );
+ $this->out->addHTML( Xml::submitButton( $context->msg( 'translate-manage-submit' )->text() ) );
+ } else {
+ $this->out->addWikiMsg( 'translate-manage-nochanges' );
+ }
+ }
+
+ $this->out->addHTML( $this->doFooter() );
+
+ return $alldone;
+ }
+
+ /**
+ * Perform an action on a given group/key/code
+ *
+ * @param string $action Options: 'import', 'conflict' or 'ignore'
+ * @param MessageGroup $group
+ * @param string $key Message key
+ * @param string $code Language code
+ * @param string $message Contents for the $key/code combination
+ * @param string $comment Edit summary (default: empty) - see Article::doEdit
+ * @param User|null $user User that will make the edit (default: null - RequestContext user).
+ * See Article::doEdit.
+ * @param int $editFlags Integer bitfield: see Article::doEdit
+ * @throws MWException
+ * @return array Action result
+ */
+ public static function doAction(
+ string $action,
+ MessageGroup $group,
+ string $key,
+ string $code,
+ string $message,
+ string $comment = '',
+ User $user = null,
+ int $editFlags = 0
+ ): array {
+ global $wgTranslateDocumentationLanguageCode;
+
+ $title = self::makeTranslationTitle( $group, $key, $code );
+
+ if ( $action === 'import' || $action === 'conflict' ) {
+ if ( $action === 'import' ) {
+ $comment = wfMessage( 'translate-manage-import-summary' )->inContentLanguage()->plain();
+ } else {
+ $comment = wfMessage( 'translate-manage-conflict-summary' )->inContentLanguage()->plain();
+ $message = self::makeTextFuzzy( $message );
+ }
+
+ return self::doImport( $title, $message, $comment, $user, $editFlags );
+ } elseif ( $action === 'ignore' ) {
+ return [ 'translate-manage-import-ignore', $key ];
+ } elseif ( $action === 'fuzzy' && $code !== 'en' &&
+ $code !== $wgTranslateDocumentationLanguageCode
+ ) {
+ $message = self::makeTextFuzzy( $message );
+
+ return self::doImport( $title, $message, $comment, $user, $editFlags );
+ } elseif ( $action === 'fuzzy' && $code === 'en' ) {
+ return self::doFuzzy( $title, $message, $comment, $user, $editFlags );
+ } else {
+ throw new MWException( "Unhandled action $action" );
+ }
+ }
+
+ protected function checkProcessTime() {
+ return wfTimestamp() - $this->time >= $this->processingTime;
+ }
+
+ /**
+ * @throws MWException
+ * @return string[]
+ */
+ public static function doImport(
+ Title $title,
+ string $message,
+ string $summary,
+ ?User $user,
+ int $editFlags = 0
+ ): array {
+ $wikiPage = MediaWikiServices::getInstance()->getWikiPageFactory()->newFromTitle( $title );
+ $content = ContentHandler::makeContent( $message, $title );
+ $status = $wikiPage->doUserEditContent(
+ $content,
+ $user,
+ $summary,
+ $editFlags
+ );
+ $success = $status->isOK();
+
+ if ( $success ) {
+ return [ 'translate-manage-import-ok',
+ wfEscapeWikiText( $title->getPrefixedText() )
+ ];
+ }
+
+ $text = "Failed to import new version of page {$title->getPrefixedText()}\n";
+ $text .= "{$status->getWikiText()}";
+ throw new MWException( $text );
+ }
+
+ /** @return string[] */
+ public static function doFuzzy(
+ Title $title,
+ string $message,
+ string $comment,
+ ?User $user,
+ int $editFlags = 0
+ ): array {
+ $context = RequestContext::getMain();
+ $services = MediaWikiServices::getInstance();
+
+ if ( !$context->getUser()->isAllowed( 'translate-manage' ) ) {
+ return [ 'badaccess-group0' ];
+ }
+
+ // Edit with fuzzybot if there is no user.
+ if ( !$user ) {
+ $user = FuzzyBot::getUser();
+ }
+
+ // Work on all subpages of base title.
+ $handle = new MessageHandle( $title );
+ $titleText = $handle->getKey();
+
+ $revStore = $services->getRevisionStore();
+ $queryInfo = $revStore->getQueryInfo( [ 'page' ] );
+ $dbw = $services->getDBLoadBalancer()->getConnectionRef( DB_PRIMARY );
+ $rows = $dbw->select(
+ $queryInfo['tables'],
+ $queryInfo['fields'],
+ [
+ 'page_namespace' => $title->getNamespace(),
+ 'page_latest=rev_id',
+ 'page_title' . $dbw->buildLike( "$titleText/", $dbw->anyString() ),
+ ],
+ __METHOD__,
+ [],
+ $queryInfo['joins']
+ );
+
+ $changed = [];
+ $slots = $revStore->getContentBlobsForBatch( $rows, [ SlotRecord::MAIN ] )->getValue();
+
+ foreach ( $rows as $row ) {
+ global $wgTranslateDocumentationLanguageCode;
+
+ $ttitle = Title::makeTitle( (int)$row->page_namespace, $row->page_title );
+
+ // No fuzzy for English original or documentation language code.
+ if ( $ttitle->getSubpageText() === 'en' ||
+ $ttitle->getSubpageText() === $wgTranslateDocumentationLanguageCode
+ ) {
+ // Use imported text, not database text.
+ $text = $message;
+ } elseif ( isset( $slots[$row->rev_id] ) ) {
+ $slot = $slots[$row->rev_id][SlotRecord::MAIN];
+ $text = self::makeTextFuzzy( $slot->blob_data );
+ } else {
+ $text = self::makeTextFuzzy(
+ TranslateUtils::getTextFromTextContent(
+ $revStore->newRevisionFromRow( $row )->getContent( SlotRecord::MAIN )
+ )
+ );
+ }
+
+ // Do actual import
+ $changed[] = self::doImport(
+ $ttitle,
+ $text,
+ $comment,
+ $user,
+ $editFlags
+ );
+ }
+
+ // Format return text
+ $text = '';
+ foreach ( $changed as $c ) {
+ $key = array_shift( $c );
+ $text .= '* ' . $context->msg( $key, $c )->plain() . "\n";
+ }
+
+ return [ 'translate-manage-import-fuzzy', "\n" . $text ];
+ }
+
+ /**
+ * Given a group, message key and language code, creates a title for the
+ * translation page.
+ *
+ * @param MessageGroup $group
+ * @param string $key Message key
+ * @param string $code Language code
+ * @return Title
+ */
+ public static function makeTranslationTitle( MessageGroup $group, string $key, string $code ): Title {
+ $ns = $group->getNamespace();
+
+ return Title::makeTitleSafe( $ns, "$key/$code" );
+ }
+
+ /**
+ * Make section elements.
+ *
+ * @param string $legend Legend as raw html.
+ * @param string $type Contents of type class.
+ * @param string $content Contents as raw html.
+ * @param Language|null $lang The language in which the text is written.
+ * @return string Section element as html.
+ */
+ public static function makeSectionElement(
+ string $legend,
+ string $type,
+ string $content,
+ Language $lang = null
+ ): string {
+ $containerParams = [ 'class' => "mw-tpt-sp-section mw-tpt-sp-section-type-{$type}" ];
+ $legendParams = [ 'class' => 'mw-tpt-sp-legend' ];
+ $contentParams = [ 'class' => 'mw-tpt-sp-content' ];
+ if ( $lang ) {
+ $contentParams['dir'] = $lang->getDir();
+ $contentParams['lang'] = $lang->getCode();
+ }
+
+ $output = Html::rawElement( 'div', $containerParams,
+ Html::rawElement( 'div', $legendParams, $legend ) .
+ Html::rawElement( 'div', $contentParams, $content )
+ );
+
+ return $output;
+ }
+
+ /**
+ * Prepends translation with fuzzy tag and ensures there is only one of them.
+ *
+ * @param string $message Message content
+ * @return string Message prefixed with TRANSLATE_FUZZY tag
+ */
+ public static function makeTextFuzzy( string $message ): string {
+ $message = str_replace( TRANSLATE_FUZZY, '', $message );
+
+ return TRANSLATE_FUZZY . $message;
+ }
+
+ /**
+ * Escape name such that it validates as name and id parameter in html, and
+ * so that we can get it back with WebRequest::getVal(). Especially dot and
+ * spaces are difficult for the latter.
+ */
+ public static function escapeNameForPHP( string $name ): string {
+ $replacements = [
+ '(' => '(OP)',
+ ' ' => '(SP)',
+ "\t" => '(TAB)',
+ '.' => '(DOT)',
+ "'" => '(SQ)',
+ "\"" => '(DQ)',
+ '%' => '(PC)',
+ '&' => '(AMP)',
+ ];
+
+ return strtr( $name, $replacements );
+ }
+}
diff --git a/Translate/src/Synchronization/QueryGroupSyncCacheMaintenanceScript.php b/Translate/src/Synchronization/QueryGroupSyncCacheMaintenanceScript.php
new file mode 100644
index 00000000..101ecab7
--- /dev/null
+++ b/Translate/src/Synchronization/QueryGroupSyncCacheMaintenanceScript.php
@@ -0,0 +1,97 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Synchronization;
+
+use MediaWiki\Extension\Translate\Services;
+use MediaWiki\Extension\Translate\Utilities\BaseMaintenanceScript;
+use MediaWiki\MediaWikiServices;
+
+/**
+ * Query information in the group synchronization cache.
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2021.01
+ */
+class QueryGroupSyncCacheMaintenanceScript extends BaseMaintenanceScript {
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Query the contents of the group synchronization cache' );
+
+ $this->addOption(
+ 'group',
+ '(optional) Group Id being queried',
+ self::OPTIONAL,
+ self::HAS_ARG
+ );
+
+ $this->requireExtension( 'Translate' );
+ }
+
+ public function execute() {
+ $config = MediaWikiServices::getInstance()->getMainConfig();
+
+ if ( !$config->get( 'TranslateGroupSynchronizationCache' ) ) {
+ $this->fatalError( 'GroupSynchronizationCache is not enabled' );
+ }
+
+ $groupSyncCache = Services::getInstance()->getGroupSynchronizationCache();
+
+ $groupId = $this->getOption( 'group' );
+ if ( $groupId ) {
+ $groupMessages = $groupSyncCache->getGroupMessages( $groupId );
+ $this->displayGroupMessages( $groupId, $groupMessages );
+ } else {
+ $groups = $groupSyncCache->getGroupsInSync();
+ $this->displayGroups( $groups );
+ }
+ }
+
+ private function displayGroups( array $groupIds ): void {
+ if ( !$groupIds ) {
+ $this->output( "No groups found in synchronization\n" );
+ return;
+ }
+
+ $this->output( "Groups found in sync:\n" );
+ foreach ( $groupIds as $groupId ) {
+ $this->output( "\t- $groupId\n" );
+ }
+ }
+
+ /**
+ * @param string $groupId
+ * @param MessageUpdateParameter[] $groupMessages
+ */
+ private function displayGroupMessages( string $groupId, array $groupMessages ): void {
+ if ( !$groupMessages ) {
+ $this->output( "No messages found for group $groupId\n" );
+ return;
+ }
+
+ $this->output( "Messages in group $groupId:\n" );
+ foreach ( $groupMessages as $message ) {
+ $this->displayMessageDetails( $message );
+ }
+ }
+
+ private function displayMessageDetails( MessageUpdateParameter $messageParam ): void {
+ $tags = [];
+ if ( $messageParam->isRename() ) {
+ $tags[] = 'rename';
+ }
+
+ if ( $messageParam->isFuzzy() ) {
+ $tags[] = 'fuzzy';
+ }
+
+ $otherLangs = $messageParam->getOtherLangs() ?: [ 'N/A' ];
+ $this->output( "\t- Title: " . $messageParam->getPageName() . "\n" );
+ $this->output( "\t Tags: " . ( $tags ? implode( ', ', $tags ) : 'N/A' ) . "\n" );
+ if ( $messageParam->isRename() ) {
+ $this->output( "\t Target: " . $messageParam->getTargetValue() . "\n" );
+ $this->output( "\t Replacement: " . $messageParam->getReplacementValue() . "\n" );
+ $this->output( "\t Other languages: " . ( implode( ', ', $otherLangs ) ) . "\n" );
+ }
+ }
+}
diff --git a/Translate/src/SystemUsers/FuzzyBot.php b/Translate/src/SystemUsers/FuzzyBot.php
new file mode 100644
index 00000000..a6d337d5
--- /dev/null
+++ b/Translate/src/SystemUsers/FuzzyBot.php
@@ -0,0 +1,25 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\SystemUsers;
+
+use User;
+
+/**
+ * FuzzyBot - the misunderstood workhorse.
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2012-01-02
+ */
+class FuzzyBot {
+ public static function getUser(): User {
+ return User::newSystemUser( self::getName(), [ 'steal' => true ] );
+ }
+
+ public static function getName(): string {
+ global $wgTranslateFuzzyBotName;
+
+ return $wgTranslateFuzzyBotName;
+ }
+}
diff --git a/Translate/src/SystemUsers/TranslateUserManager.php b/Translate/src/SystemUsers/TranslateUserManager.php
new file mode 100644
index 00000000..52dd3db3
--- /dev/null
+++ b/Translate/src/SystemUsers/TranslateUserManager.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * System account to handle user related modifications
+ *
+ * @file
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ */
+
+namespace MediaWiki\Extension\Translate\SystemUsers;
+
+use User;
+
+/** @since 2019.08 */
+class TranslateUserManager {
+ public static function getUser() {
+ return User::newSystemUser( self::getName(), [ 'steal' => true ] );
+ }
+
+ public static function getName() {
+ global $wgTranslateUserManagerName;
+
+ return $wgTranslateUserManagerName;
+ }
+}
diff --git a/Translate/src/TranslatorInterface/Aid/CurrentTranslationAid.php b/Translate/src/TranslatorInterface/Aid/CurrentTranslationAid.php
new file mode 100644
index 00000000..5fba67a3
--- /dev/null
+++ b/Translate/src/TranslatorInterface/Aid/CurrentTranslationAid.php
@@ -0,0 +1,39 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Aid;
+
+use Hooks;
+use MessageHandle;
+use TranslateUtils;
+
+/**
+ * Translation aid that provides the current saved translation.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2013-01-01
+ * @ingroup TranslationAids
+ */
+class CurrentTranslationAid extends TranslationAid {
+ public function getData(): array {
+ $title = $this->handle->getTitle();
+ $translation = TranslateUtils::getMessageContent(
+ $this->handle->getKey(),
+ $this->handle->getCode(),
+ $title->getNamespace()
+ );
+
+ Hooks::run( 'TranslatePrefillTranslation', [ &$translation, $this->handle ] );
+ // If we have still no translation, use the empty string so that
+ // string handler functions don't error out on PHP 8.1+
+ $translation = $translation ?? '';
+ $fuzzy = MessageHandle::hasFuzzyString( $translation ) || $this->handle->isFuzzy();
+ $translation = str_replace( TRANSLATE_FUZZY, '', $translation );
+
+ return [
+ 'language' => $this->handle->getCode(),
+ 'fuzzy' => $fuzzy,
+ 'value' => $translation,
+ ];
+ }
+}
diff --git a/Translate/src/TranslatorInterface/Aid/DocumentationAid.php b/Translate/src/TranslatorInterface/Aid/DocumentationAid.php
new file mode 100644
index 00000000..1884f386
--- /dev/null
+++ b/Translate/src/TranslatorInterface/Aid/DocumentationAid.php
@@ -0,0 +1,35 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Aid;
+
+use MediaWiki\Extension\Translate\TranslatorInterface\TranslationHelperException;
+use MediaWiki\MediaWikiServices;
+use TranslateUtils;
+
+/**
+ * Translation aid that provides the message documentation.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2013-01-01
+ * @ingroup TranslationAids
+ */
+class DocumentationAid extends TranslationAid {
+ public function getData(): array {
+ global $wgTranslateDocumentationLanguageCode;
+ if ( !$wgTranslateDocumentationLanguageCode ) {
+ throw new TranslationHelperException( 'Message documentation is disabled' );
+ }
+
+ $page = $this->handle->getKey();
+ $ns = $this->handle->getTitle()->getNamespace();
+
+ $info = TranslateUtils::getMessageContent( $page, $wgTranslateDocumentationLanguageCode, $ns );
+
+ return [
+ 'language' => MediaWikiServices::getInstance()->getContentLanguage()->getCode(),
+ 'value' => $info,
+ 'html' => $this->context->getOutput()->parseAsInterface( $info )
+ ];
+ }
+}
diff --git a/Translate/src/TranslatorInterface/Aid/EditSummariesAid.php b/Translate/src/TranslatorInterface/Aid/EditSummariesAid.php
new file mode 100644
index 00000000..65c6601b
--- /dev/null
+++ b/Translate/src/TranslatorInterface/Aid/EditSummariesAid.php
@@ -0,0 +1,75 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Aid;
+
+use Linker;
+use MediaWiki\MediaWikiServices;
+use MWTimestamp;
+
+/**
+ * Translation aid that provides last X edit summaries for a translation
+ *
+ * @author Eugene Wang'ombe
+ * @license GPL-2.0-or-later
+ * @since 2022.04
+ */
+class EditSummariesAid extends TranslationAid {
+ private const COMMENT_COUNT = 3;
+
+ public function getData(): array {
+ $pageTitle = $this->handle->getTitle();
+ if ( !$pageTitle->exists() ) {
+ return [];
+ }
+
+ $mwService = MediaWikiServices::getInstance();
+ $revisionFactory = $mwService->getRevisionFactory();
+
+ // Build the query to fetch the last x revisions
+ $dbr = $mwService->getDBLoadBalancer()->getConnectionRef( DB_REPLICA );
+ $options = [ 'ORDER BY' => 'rev_timestamp DESC, rev_id DESC' ];
+ $options[ 'LIMIT' ] = self::COMMENT_COUNT;
+ $aid = $pageTitle->getArticleID();
+ $revQuery = $revisionFactory->getQueryInfo();
+ $result = $dbr->select(
+ $revQuery[ 'tables' ],
+ $revQuery[ 'fields' ],
+ [ 'rev_page' => $aid ],
+ __METHOD__,
+ $options,
+ $revQuery[ 'joins' ]
+ );
+
+ $editSummaries = [];
+ $commentFormatter = method_exists( $mwService, 'getCommentFormatter' )
+ ? $mwService->getCommentFormatter() : null;
+ foreach ( $result as $row ) {
+ $revision = $revisionFactory->newRevisionFromRow( $row );
+ $comment = $revision->getComment();
+
+ // The result of getComment() may return null. In that case
+ // skip processing of the summary.
+ if ( !$comment ) {
+ continue;
+ }
+
+ if ( $commentFormatter ) {
+ $message = $commentFormatter->format( $comment->message->text() );
+ } else {
+ // <= MW 1.37
+ $message = Linker::formatComment( $comment->message->text() );
+ }
+
+ $editSummaries[] = [
+ 'humanTimestamp' => $this->context->getLanguage()
+ ->getHumanTimestamp( new MWTimestamp( $revision->getTimestamp() ) ),
+ 'timestamp' => $revision->getTimestamp(),
+ 'summary' => $message,
+ 'revisionId' => $revision->getId()
+ ];
+ }
+
+ return $editSummaries;
+ }
+}
diff --git a/Translate/src/TranslatorInterface/Aid/GettextDocumentationAid.php b/Translate/src/TranslatorInterface/Aid/GettextDocumentationAid.php
new file mode 100644
index 00000000..68d3dc0d
--- /dev/null
+++ b/Translate/src/TranslatorInterface/Aid/GettextDocumentationAid.php
@@ -0,0 +1,81 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Aid;
+
+use FileBasedMessageGroup;
+use GettextFFS;
+use MediaWiki\Extension\Translate\TranslatorInterface\TranslationHelperException;
+use MediaWiki\MediaWikiServices;
+
+/**
+ * Translation aid that provides Gettext documentation.
+ * @ingroup TranslationAids
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2013-01-01
+ */
+class GettextDocumentationAid extends TranslationAid {
+ public function getData(): array {
+ // We need to get the primary group to get the correct file
+ // So $group can be different from $this->group
+ $group = $this->handle->getGroup();
+ if ( !$group instanceof FileBasedMessageGroup ) {
+ throw new TranslationHelperException( 'Not a FileBasedMessageGroup group' );
+ }
+
+ $ffs = $group->getFFS();
+ if ( !$ffs instanceof GettextFFS ) {
+ throw new TranslationHelperException( 'Group is not using GettextFFS' );
+ }
+
+ $cache = $group->getMessageGroupCache( $group->getSourceLanguage() );
+ if ( !$cache->exists() ) {
+ throw new TranslationHelperException( 'Definitions are not cached' );
+ }
+
+ $extra = $cache->getExtra();
+ $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+ $messageKey = $contLang->lcfirst( $this->handle->getKey() );
+ $messageKey = str_replace( ' ', '_', $messageKey );
+
+ $help = $extra['TEMPLATE'][$messageKey]['comments'] ?? null;
+ if ( !$help ) {
+ throw new TranslationHelperException( "No comments found for key '$messageKey'" );
+ }
+
+ $conf = $group->getConfiguration();
+ if ( isset( $conf['BASIC']['codeBrowser'] ) ) {
+ $pattern = $conf['BASIC']['codeBrowser'];
+ $pattern = str_replace( '%FILE%', '\1', $pattern );
+ $pattern = str_replace( '%LINE%', '\2', $pattern );
+ $pattern = "[$pattern \\1:\\2]";
+ } else {
+ $pattern = "\\1:\\2";
+ }
+
+ $out = '';
+ foreach ( $help as $type => $lines ) {
+ if ( $type === ':' ) {
+ $files = '';
+ foreach ( $lines as $line ) {
+ $files .= ' ' . preg_replace( '/([^ :]+):(\d+)/', $pattern, $line );
+ }
+ $out .= "<nowiki>#:</nowiki> $files<br />";
+ } else {
+ foreach ( $lines as $line ) {
+ $out .= "<nowiki>#$type</nowiki> $line<br />";
+ }
+ }
+ }
+
+ $html = $this->context->getOutput()->parseAsContent( $out );
+
+ return [
+ 'language' => $contLang->getCode(),
+ // @todo Provide raw data when possible
+ // 'value' => $help,
+ 'html' => $html,
+ ];
+ }
+}
diff --git a/Translate/src/TranslatorInterface/Aid/GroupsAid.php b/Translate/src/TranslatorInterface/Aid/GroupsAid.php
new file mode 100644
index 00000000..c775788c
--- /dev/null
+++ b/Translate/src/TranslatorInterface/Aid/GroupsAid.php
@@ -0,0 +1,15 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Aid;
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2021.05
+ */
+class GroupsAid extends TranslationAid {
+ public function getData(): array {
+ return [ '**' => 'group' ] + $this->handle->getGroupIds();
+ }
+}
diff --git a/Translate/src/TranslatorInterface/Aid/InOtherLanguagesAid.php b/Translate/src/TranslatorInterface/Aid/InOtherLanguagesAid.php
new file mode 100644
index 00000000..a8eafcfa
--- /dev/null
+++ b/Translate/src/TranslatorInterface/Aid/InOtherLanguagesAid.php
@@ -0,0 +1,80 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Aid;
+
+use MediaWiki\MediaWikiServices;
+
+/**
+ * Translation aid that provides the "in other languages" suggestions.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2013-01-01
+ * @ingroup TranslationAids
+ */
+class InOtherLanguagesAid extends TranslationAid {
+ public function getData(): array {
+ $suggestions = [
+ '**' => 'suggestion',
+ ];
+
+ // Fuzzy translations are not included in these
+ $translations = $this->dataProvider->getGoodTranslations();
+ $code = $this->handle->getCode();
+
+ $sourceLanguage = $this->handle->getGroup()->getSourceLanguage();
+
+ foreach ( $this->getFallbacks( $code ) as $fallbackCode ) {
+ if ( !isset( $translations[$fallbackCode] ) ) {
+ continue;
+ }
+
+ if ( $fallbackCode === $sourceLanguage ) {
+ continue;
+ }
+
+ $suggestions[] = [
+ 'language' => $fallbackCode,
+ 'value' => $translations[$fallbackCode],
+ ];
+ }
+
+ return $suggestions;
+ }
+
+ /**
+ * Get the languages for "in other languages". That would be translation
+ * assistant languages with defined language fallbacks additionally.
+ * @param string $code
+ * @return string[] List of language codes
+ */
+ protected function getFallbacks( string $code ): array {
+ global $wgTranslateLanguageFallbacks;
+ $mwServices = MediaWikiServices::getInstance();
+
+ // User preference has the final say
+ $userOptionLookup = $mwServices->getUserOptionsLookup();
+ $preference = $userOptionLookup->getOption( $this->context->getUser(), 'translate-editlangs' );
+ if ( $preference !== 'default' ) {
+ $fallbacks = array_map( 'trim', explode( ',', $preference ) );
+ foreach ( $fallbacks as $k => $v ) {
+ if ( $v === $code ) {
+ unset( $fallbacks[$k] );
+ }
+ }
+
+ return $fallbacks;
+ }
+
+ // Global configuration settings
+ $fallbacks = [];
+ if ( isset( $wgTranslateLanguageFallbacks[$code] ) ) {
+ $fallbacks = (array)$wgTranslateLanguageFallbacks[$code];
+ }
+
+ $list = $mwServices->getLanguageFallback()->getAll( $code );
+ $fallbacks = array_merge( $list, $fallbacks );
+
+ return array_unique( $fallbacks );
+ }
+}
diff --git a/Translate/src/TranslatorInterface/Aid/InsertablesAid.php b/Translate/src/TranslatorInterface/Aid/InsertablesAid.php
new file mode 100644
index 00000000..62484aa4
--- /dev/null
+++ b/Translate/src/TranslatorInterface/Aid/InsertablesAid.php
@@ -0,0 +1,55 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Aid;
+
+use MediaWiki\Extension\Translate\TranslatorInterface\TranslationHelperException;
+
+/**
+ * Translation aid that suggests insertables. Insertable is a string that
+ * usually does not need translation and is difficult to type manually.
+ * @ingroup TranslationAids
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2013.09
+ */
+class InsertablesAid extends TranslationAid {
+ public function getData(): array {
+ // We need to get the primary group to get the correct file
+ // So $group can be different from $this->group
+ $group = $this->handle->getGroup();
+
+ // This was added later, so not all classes have it. In addition
+ // the message group class hierarchy doesn't lend itself easily
+ // to the user of interfaces for this purpose.
+ if ( !method_exists( $group, 'getInsertablesSuggester' ) ) {
+ throw new TranslationHelperException( 'Group does not have insertable suggesters' );
+ }
+
+ // @phan-suppress-next-line PhanUndeclaredMethod
+ $suggester = $group->getInsertablesSuggester();
+
+ // It is okay to return null suggester
+ if ( !$suggester ) {
+ throw new TranslationHelperException( 'Group does not have insertable suggesters' );
+ }
+
+ $insertables = $suggester->getInsertables( $this->dataProvider->getDefinition() );
+ $blob = [];
+ foreach ( $insertables as $insertable ) {
+ $displayText = $insertable->getDisplayText();
+
+ // The keys are used for de-duplication
+ $blob[$displayText] = [
+ 'display' => $displayText,
+ 'pre' => $insertable->getPreText(),
+ 'post' => $insertable->getPostText(),
+ ];
+ }
+
+ $blob = array_values( $blob );
+ $blob['**'] = 'insertable';
+
+ return $blob;
+ }
+}
diff --git a/Translate/src/TranslatorInterface/Aid/MachineTranslationAid.php b/Translate/src/TranslatorInterface/Aid/MachineTranslationAid.php
new file mode 100644
index 00000000..bcc8de68
--- /dev/null
+++ b/Translate/src/TranslatorInterface/Aid/MachineTranslationAid.php
@@ -0,0 +1,100 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Aid;
+
+use MediaWiki\Extension\Translate\TranslatorInterface\TranslationHelperException;
+use MediaWiki\Extension\Translate\WebService\TranslationWebService;
+use MediaWiki\Extension\Translate\WebService\TranslationWebServiceConfigurationException;
+
+/**
+ * Translation aid that provides suggestion from machine translation services.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2013-01-01 | 2015.02 extends QueryAggregatorAwareTranslationAid
+ * @ingroup TranslationAids
+ */
+class MachineTranslationAid extends QueryAggregatorAwareTranslationAid {
+ public function populateQueries(): void {
+ $definition = $this->dataProvider->getDefinition();
+ $translations = $this->dataProvider->getGoodTranslations();
+ $from = $this->group->getSourceLanguage();
+ $to = $this->handle->getCode();
+
+ if ( trim( $definition ) === '' ) {
+ return;
+ }
+
+ foreach ( $this->getWebServices() as $service ) {
+ if ( $service->checkTranslationServiceFailure() ) {
+ continue;
+ }
+
+ try {
+ if ( $service->isSupportedLanguagePair( $from, $to ) ) {
+ $this->storeQuery( $service, $from, $to, $definition );
+ continue;
+ }
+
+ // Search for translations which we can use as a source for MT
+ // @todo: Support setting priority of languages like Yandex used to have
+ foreach ( $translations as $from => $text ) {
+ if ( !$service->isSupportedLanguagePair( $from, $to ) ) {
+ continue;
+ }
+
+ $this->storeQuery( $service, $from, $to, $text );
+ break;
+ }
+ } catch ( TranslationWebServiceConfigurationException $e ) {
+ throw new TranslationHelperException( $service->getName() . ': ' . $e->getMessage() );
+ }
+ }
+ }
+
+ public function getData(): array {
+ $suggestions = [ '**' => 'suggestion' ];
+
+ foreach ( $this->getQueryData() as $queryData ) {
+ $suggestions[] = $this->formatSuggestion( $queryData );
+ }
+
+ return array_filter( $suggestions );
+ }
+
+ protected function formatSuggestion( array $queryData ): ?array {
+ $service = $queryData['service'];
+ $response = $queryData['response'];
+ $sourceLanguage = $queryData['language'];
+ $sourceText = $queryData['text'];
+
+ $result = $service->getResultData( $response );
+ if ( $result === null ) {
+ return null;
+ }
+
+ return [
+ 'target' => $result,
+ 'service' => $service->getName(),
+ 'source_language' => $sourceLanguage,
+ 'source' => $sourceText,
+ ];
+ }
+
+ /** @return TranslationWebService[] */
+ private function getWebServices(): array {
+ global $wgTranslateTranslationServices;
+
+ $services = [];
+ foreach ( $wgTranslateTranslationServices as $name => $config ) {
+ $service = TranslationWebService::factory( $name, $config );
+ if ( !$service || $service->getType() !== 'mt' ) {
+ continue;
+ }
+
+ $services[$name] = $service;
+ }
+
+ return $services;
+ }
+}
diff --git a/Translate/src/TranslatorInterface/Aid/MessageDefinitionAid.php b/Translate/src/TranslatorInterface/Aid/MessageDefinitionAid.php
new file mode 100644
index 00000000..070ed297
--- /dev/null
+++ b/Translate/src/TranslatorInterface/Aid/MessageDefinitionAid.php
@@ -0,0 +1,23 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Aid;
+
+/**
+ * Translation aid that provides the message definition.
+ * This usually matches the content of the page ns:key/source_language.
+ * @ingroup TranslationAids
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2013-01-01
+ */
+class MessageDefinitionAid extends TranslationAid {
+ public function getData(): array {
+ $language = $this->group->getSourceLanguage();
+
+ return [
+ 'value' => $this->dataProvider->getDefinition(),
+ 'language' => $language,
+ ];
+ }
+}
diff --git a/Translate/src/TranslatorInterface/Aid/QueryAggregatorAwareTranslationAid.php b/Translate/src/TranslatorInterface/Aid/QueryAggregatorAwareTranslationAid.php
new file mode 100644
index 00000000..0a132872
--- /dev/null
+++ b/Translate/src/TranslatorInterface/Aid/QueryAggregatorAwareTranslationAid.php
@@ -0,0 +1,69 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Aid;
+
+use MediaWiki\Extension\Translate\WebService\QueryAggregator;
+use MediaWiki\Extension\Translate\WebService\QueryAggregatorAware;
+use MediaWiki\Extension\Translate\WebService\TranslationWebService;
+
+/**
+ * Helper class for translation aids that use web services.
+ * @ingroup TranslationAids
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2015.02
+ */
+abstract class QueryAggregatorAwareTranslationAid
+ extends TranslationAid
+ implements QueryAggregatorAware
+{
+ private $queries = [];
+ /** @var QueryAggregator */
+ private $aggregator;
+
+ public function setQueryAggregator( QueryAggregator $aggregator ): void {
+ $this->aggregator = $aggregator;
+ }
+
+ /**
+ * Stores a web service query for later execution.
+ * @param TranslationWebService $service
+ * @param string $from
+ * @param string $to
+ * @param string $text
+ * @return void
+ */
+ protected function storeQuery(
+ TranslationWebService $service,
+ string $from,
+ string $to,
+ string $text
+ ): void {
+ $queries = $service->getQueries( $text, $from, $to );
+ foreach ( $queries as $query ) {
+ $this->queries[] = [
+ 'id' => $this->aggregator->addQuery( $query ),
+ 'language' => $from,
+ 'text' => $text,
+ 'service' => $service,
+ ];
+ }
+ }
+
+ /**
+ * Returns all stored queries.
+ * @return array Map of executed queries:
+ * - language: string: source language
+ * - text: string: source text
+ * - response: TranslationQueryResponse
+ */
+ protected function getQueryData(): array {
+ foreach ( $this->queries as &$queryData ) {
+ $queryData['response'] = $this->aggregator->getResponse( $queryData['id'] );
+ unset( $queryData['id'] );
+ }
+
+ return $this->queries;
+ }
+}
diff --git a/Translate/src/TranslatorInterface/Aid/SupportAid.php b/Translate/src/TranslatorInterface/Aid/SupportAid.php
new file mode 100644
index 00000000..9ef907d3
--- /dev/null
+++ b/Translate/src/TranslatorInterface/Aid/SupportAid.php
@@ -0,0 +1,87 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Aid;
+
+use MediaWiki\Extension\Translate\TranslatorInterface\TranslationHelperException;
+use MessageHandle;
+use Title;
+use TranslateUtils;
+
+/**
+ * Translation aid that provides an url where users can ask for help
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2013-01-02
+ * @ingroup TranslationAids
+ */
+class SupportAid extends TranslationAid {
+ public function getData(): array {
+ return [
+ 'url' => self::getSupportUrl( $this->handle ),
+ ];
+ }
+
+ /**
+ * Target URL for a link provided by a support button/aid.
+ * @param MessageHandle $handle MessageHandle object for the translation message.
+ * @return string
+ * @throws TranslationHelperException
+ */
+ public static function getSupportUrl( MessageHandle $handle ): string {
+ $title = $handle->getTitle();
+ $config = self::getConfig( $handle );
+
+ $placeholders = [
+ '%MESSAGE%' => $title->getPrefixedText(),
+ '%MESSAGE_URL%' => TranslateUtils::getEditorUrl( $handle )
+ ];
+
+ // Preprocess params
+ $params = [];
+ if ( isset( $config['params'] ) ) {
+ foreach ( $config['params'] as $key => $value ) {
+ $params[$key] = strtr( $value, $placeholders );
+ }
+ }
+
+ // Return the URL or make one from the page
+ if ( isset( $config['url'] ) ) {
+ return wfAppendQuery( $config['url'], $params );
+ } elseif ( isset( $config['page'] ) ) {
+ $page = Title::newFromText( $config['page'] );
+ if ( $page ) {
+ return $page->getFullURL( $params );
+ }
+ }
+
+ throw new TranslationHelperException( 'Support page not configured properly' );
+ }
+
+ /**
+ * Fetches Support URL config
+ * @param MessageHandle $handle
+ * @return array
+ * @throws TranslationHelperException
+ */
+ private static function getConfig( MessageHandle $handle ): array {
+ global $wgTranslateSupportUrl, $wgTranslateSupportUrlNamespace;
+
+ if ( !$handle->isValid() ) {
+ throw new TranslationHelperException( 'Invalid MessageHandle' );
+ }
+
+ // Fetch group level configuration if possible, fallback to namespace based, or default
+ $group = $handle->getGroup();
+ $namespace = $handle->getTitle()->getNamespace();
+ $config = $group->getSupportConfig()
+ ?? $wgTranslateSupportUrlNamespace[$namespace]
+ ?? $wgTranslateSupportUrl;
+
+ if ( !$config ) {
+ throw new TranslationHelperException( 'Support page not configured' );
+ }
+
+ return $config;
+ }
+}
diff --git a/Translate/src/TranslatorInterface/Aid/TTMServerAid.php b/Translate/src/TranslatorInterface/Aid/TTMServerAid.php
new file mode 100644
index 00000000..f209100f
--- /dev/null
+++ b/Translate/src/TranslatorInterface/Aid/TTMServerAid.php
@@ -0,0 +1,221 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Aid;
+
+use Exception;
+use IContextSource;
+use MediaWiki\Extension\Translate\Services;
+use MediaWiki\Extension\Translate\TranslatorInterface\TranslationHelperException;
+use MediaWiki\Extension\Translate\TtmServer\TtmServerFactory;
+use MediaWiki\Extension\Translate\WebService\RemoteTTMServerWebService;
+use MediaWiki\Extension\Translate\WebService\TranslationWebService;
+use MessageGroup;
+use MessageHandle;
+use ReadableTTMServer;
+use Title;
+use TranslateUtils;
+use TTMServer;
+
+/**
+ * Translation aid that provides suggestion from translation memory.
+ * @ingroup TranslationAids
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2013-01-01 | 2015.02 extends QueryAggregatorAwareTranslationAid
+ */
+class TTMServerAid extends QueryAggregatorAwareTranslationAid {
+ /** @var array[] */
+ private $services;
+ /** @var TtmServerFactory */
+ private $ttmServerFactory;
+
+ public function __construct(
+ MessageGroup $group,
+ MessageHandle $handle,
+ IContextSource $context,
+ TranslationAidDataProvider $dataProvider
+ ) {
+ parent::__construct( $group, $handle, $context, $dataProvider );
+ $this->ttmServerFactory = Services::getInstance()->getTtmServerFactory();
+ }
+
+ public function populateQueries(): void {
+ $text = $this->dataProvider->getDefinition();
+ $from = $this->group->getSourceLanguage();
+ $to = $this->handle->getCode();
+
+ if ( trim( $text ) === '' ) {
+ return;
+ }
+
+ foreach ( $this->getWebServices() as $service ) {
+ $this->storeQuery( $service, $from, $to, $text );
+ }
+ }
+
+ public function getData(): array {
+ $text = $this->dataProvider->getDefinition();
+ if ( trim( $text ) === '' ) {
+ return [];
+ }
+
+ $suggestions = [];
+ $from = $this->group->getSourceLanguage();
+ $to = $this->handle->getCode();
+
+ foreach ( $this->getInternalServices() as $name => $service ) {
+ try {
+ $queryData = $service->query( $from, $to, $text );
+ } catch ( TranslationHelperException $e ) {
+ throw $e;
+ } catch ( Exception $e ) {
+ // Not ideal to catch all exceptions
+ continue;
+ }
+
+ $sugs = $this->formatInternalSuggestions( $queryData, $service, $name, $from );
+ $suggestions = array_merge( $suggestions, $sugs );
+ }
+
+ // Results from web services
+ foreach ( $this->getQueryData() as $queryData ) {
+ $sugs = $this->formatWebSuggestions( $queryData );
+ $suggestions = array_merge( $suggestions, $sugs );
+ }
+
+ $suggestions = TTMServer::sortSuggestions( $suggestions );
+ // Must be here to not mess up the sorting function
+ $suggestions['**'] = 'suggestion';
+
+ return $suggestions;
+ }
+
+ protected function formatWebSuggestions( array $queryData ): array {
+ $service = $queryData['service'];
+ $response = $queryData['response'];
+ $sourceLanguage = $queryData['language'];
+ $sourceText = $queryData['text'];
+
+ // getResultData returns a null on failure instead of throwing an exception
+ $items = $service->getResultData( $response );
+ if ( $items === null ) {
+ return [];
+ }
+
+ $localPrefix = Title::makeTitle( NS_MAIN, '' )->getFullURL( '', false, PROTO_CANONICAL );
+ $localPrefixLength = strlen( $localPrefix );
+
+ foreach ( $items as &$item ) {
+ $local = strncmp( $item['uri'], $localPrefix, $localPrefixLength ) === 0;
+ $item = array_merge( $item, [
+ 'service' => $service->getName(),
+ 'source_language' => $sourceLanguage,
+ 'source' => $sourceText,
+ 'local' => $local,
+ ] );
+
+ // TtmServerActionApi expands this... need to fix it again to be the bare name
+ if ( $local ) {
+ $pagename = urldecode( substr( $item['location'], $localPrefixLength ) );
+ $item['location'] = $pagename;
+ $handle = new MessageHandle( Title::newfromText( $pagename ) );
+ $item['editorUrl'] = TranslateUtils::getEditorUrl( $handle );
+ }
+ }
+ return $items;
+ }
+
+ protected function formatInternalSuggestions(
+ array $queryData,
+ ReadableTTMServer $s,
+ string $serviceName,
+ string $sourceLanguage
+ ): array {
+ $items = [];
+
+ foreach ( $queryData as $item ) {
+ $local = $s->isLocalSuggestion( $item );
+
+ $item['service'] = $serviceName;
+ $item['source_language'] = $sourceLanguage;
+ $item['local'] = $local;
+ // Likely only needed for non-public DatabaseTTMServer
+ $item['uri'] = $item['uri'] ?? $s->expandLocation( $item );
+ if ( $local ) {
+ $handle = new MessageHandle( Title::newfromText( $item[ 'location' ] ) );
+ $item['editorUrl'] = TranslateUtils::getEditorUrl( $handle );
+ }
+ $items[] = $item;
+ }
+
+ return $items;
+ }
+
+ /** @return ReadableTTMServer[] */
+ private function getInternalServices(): array {
+ $services = $this->getQueryableServices();
+ foreach ( $services as $name => $config ) {
+ if ( $config['type'] === 'ttmserver' ) {
+ $services[$name] = $this->ttmServerFactory->create( $name );
+ } else {
+ unset( $services[$name] );
+ }
+ }
+
+ return $services;
+ }
+
+ /** @return RemoteTTMServerWebService[] */
+ private function getWebServices(): array {
+ $services = $this->getQueryableServices();
+ foreach ( $services as $name => $config ) {
+ if ( $config['type'] === 'remote-ttmserver' ) {
+ $services[$name] = TranslationWebService::factory( $name, $config );
+ } else {
+ unset( $services[$name] );
+ }
+ }
+
+ return $services;
+ }
+
+ private function getQueryableServices(): array {
+ if ( !$this->services ) {
+ global $wgTranslateTranslationServices;
+ $this->services = $this->getQueryableServicesUncached(
+ $wgTranslateTranslationServices );
+ }
+
+ return $this->services;
+ }
+
+ private function getQueryableServicesUncached( array $services ): array {
+ // First remove mirrors of the primary service
+ $primary = $this->ttmServerFactory->getDefault();
+ $mirrors = $primary->getMirrors();
+ foreach ( $mirrors as $mirrorName ) {
+ unset( $services[$mirrorName] );
+ }
+
+ // Then remove non-ttmservers
+ foreach ( $services as $name => $config ) {
+ $type = $config['type'];
+ if ( $type !== 'ttmserver' && $type !== 'remote-ttmserver' ) {
+ unset( $services[$name] );
+ }
+ }
+
+ // Then determine the query method. Prefer HTTP queries that can be run parallel.
+ foreach ( $services as $name => &$config ) {
+ $public = $config['public'] ?? false;
+ if ( $config['type'] === 'ttmserver' && $public ) {
+ $config['type'] = 'remote-ttmserver';
+ $config['service'] = $name;
+ $config['url'] = wfExpandUrl( wfScript( 'api' ), PROTO_CANONICAL );
+ }
+ }
+
+ return $services;
+ }
+}
diff --git a/Translate/src/TranslatorInterface/Aid/TranslationAid.php b/Translate/src/TranslatorInterface/Aid/TranslationAid.php
new file mode 100644
index 00000000..3733dd50
--- /dev/null
+++ b/Translate/src/TranslatorInterface/Aid/TranslationAid.php
@@ -0,0 +1,80 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Aid;
+
+use IContextSource;
+use MediaWiki\Extension\Translate\TranslatorInterface\TranslationHelperException;
+use MessageGroup;
+use MessageHandle;
+
+/**
+ * Multipurpose class for translation aids:
+ * - interface for translation aid classes
+ * - listing of available translation aids
+ *
+ * @defgroup TranslationAids Translation Aids
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2013-01-01
+ */
+abstract class TranslationAid {
+ /** @var MessageGroup */
+ protected $group;
+ /** @var MessageHandle */
+ protected $handle;
+ /** @var IContextSource */
+ protected $context;
+ /** @var TranslationAidDataProvider */
+ protected $dataProvider;
+
+ public function __construct(
+ MessageGroup $group,
+ MessageHandle $handle,
+ IContextSource $context,
+ TranslationAidDataProvider $dataProvider
+ ) {
+ $this->group = $group;
+ $this->handle = $handle;
+ $this->context = $context;
+ $this->dataProvider = $dataProvider;
+ }
+
+ /**
+ * Translation aid class should implement this function. Return value should
+ * be an array with keys and values. Because these are used in the MediaWiki
+ * API, lists (numeric keys) should have key '**' set to element name that
+ * describes the list values. For example if the translation aid provides
+ * translation suggestions, it would return an array which has key '**' set
+ * to 'suggestion' and then list of arrays, each containing fields for the
+ * information of the suggestions. See InOtherLanguagesAid for example.
+ *
+ * @throws TranslationHelperException Used to signal unexpected errors to aid
+ * debugging
+ * @return array
+ */
+ abstract public function getData(): array;
+
+ /**
+ * List of available message types mapped to the classes
+ * implementing them.
+ *
+ * @return array
+ */
+ public static function getTypes(): array {
+ return [
+ 'groups' => GroupsAid::class,
+ 'definition' => MessageDefinitionAid::class,
+ 'translation' => CurrentTranslationAid::class,
+ 'inotherlanguages' => InOtherLanguagesAid::class,
+ 'documentation' => DocumentationAid::class,
+ 'mt' => MachineTranslationAid::class,
+ 'definitiondiff' => UpdatedDefinitionAid::class,
+ 'ttmserver' => TTMServerAid::class,
+ 'support' => SupportAid::class,
+ 'gettext' => GettextDocumentationAid::class,
+ 'insertables' => InsertablesAid::class,
+ 'editsummaries' => EditSummariesAid::class,
+ ];
+ }
+}
diff --git a/Translate/src/TranslatorInterface/Aid/TranslationAidDataProvider.php b/Translate/src/TranslatorInterface/Aid/TranslationAidDataProvider.php
new file mode 100644
index 00000000..93baae6e
--- /dev/null
+++ b/Translate/src/TranslatorInterface/Aid/TranslationAidDataProvider.php
@@ -0,0 +1,149 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Aid;
+
+use Content;
+use ContentHandler;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\RevTagStore;
+use MediaWiki\Extension\Translate\TranslatorInterface\TranslationHelperException;
+use MediaWiki\MediaWikiServices;
+use MediaWiki\Revision\RevisionRecord;
+use MediaWiki\Revision\SlotRecord;
+use MessageGroup;
+use MessageHandle;
+use TextContent;
+use Wikimedia\Rdbms\IDatabase;
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2018.01
+ */
+class TranslationAidDataProvider {
+ /** @var MessageHandle */
+ private $handle;
+ /** @var MessageGroup */
+ private $group;
+ /** @var string|null */
+ private $definition;
+ /** @var array */
+ private $translations;
+
+ public function __construct( MessageHandle $handle ) {
+ $this->handle = $handle;
+ $this->group = $handle->getGroup();
+ }
+
+ /**
+ * Get the message definition. Cached for performance.
+ * @return string
+ */
+ public function getDefinition(): string {
+ if ( $this->definition !== null ) {
+ return $this->definition;
+ }
+
+ // Optional performance optimization
+ if ( method_exists( $this->group, 'getMessageContent' ) ) {
+ // @phan-suppress-next-line PhanUndeclaredMethod
+ $this->definition = $this->group->getMessageContent( $this->handle );
+ } else {
+ $this->definition = $this->group->getMessage(
+ $this->handle->getKey(),
+ $this->group->getSourceLanguage()
+ );
+ }
+
+ if ( $this->definition === null ) {
+ throw new TranslationHelperException(
+ 'Did not find message definition for ' . $this->handle->getTitle()->getPrefixedText() .
+ ' in group ' . $this->group->getId()
+ );
+ }
+ return $this->definition;
+ }
+
+ public function hasDefinition(): bool {
+ try {
+ $this->getDefinition();
+ return true;
+ } catch ( TranslationHelperException $e ) {
+ return false;
+ }
+ }
+
+ public function getDefinitionContent(): Content {
+ return ContentHandler::makeContent( $this->getDefinition(), $this->handle->getTitle() );
+ }
+
+ /**
+ * Get the translations in all languages. Cached for performance.
+ * Fuzzy translation are not included.
+ * @return array Language code => Translation
+ */
+ public function getGoodTranslations(): array {
+ if ( $this->translations !== null ) {
+ return $this->translations;
+ }
+
+ $data = self::loadTranslationData( wfGetDB( DB_REPLICA ), $this->handle );
+ $translations = [];
+ $prefixLength = strlen( $this->handle->getTitleForBase()->getDBKey() . '/' );
+ $languageNameUtils = MediaWikiServices::getInstance()->getLanguageNameUtils();
+
+ foreach ( $data as $page => $translation ) {
+ // Could use MessageHandle here, but that queries the message index.
+ // Instead we can get away with simple string manipulation.
+ $code = substr( $page, $prefixLength );
+ if ( !$languageNameUtils->isKnownLanguageTag( $code ) ) {
+ continue;
+ }
+
+ $translations[ $code ] = $translation;
+ }
+
+ $this->translations = $translations;
+
+ return $translations;
+ }
+
+ private static function loadTranslationData( IDatabase $db, MessageHandle $handle ): array {
+ $revisionStore = MediaWikiServices::getInstance()->getRevisionStore();
+ $queryInfo = $revisionStore->getQueryInfo( [ 'page' ] );
+ $tables = $queryInfo[ 'tables' ];
+ $fields = $queryInfo[ 'fields' ];
+ $conds = [];
+ $options = [];
+ $joins = $queryInfo[ 'joins' ];
+
+ // The list of pages we want to select, and their latest versions
+ $conds['page_namespace'] = $handle->getTitle()->getNamespace();
+ $base = $handle->getKey();
+ $conds[] = 'page_title ' . $db->buildLike( "$base/", $db->anyString() );
+ $conds[] = 'rev_id=page_latest';
+
+ // For fuzzy tags we also need:
+ $tables[] = 'revtag';
+ $conds[ 'rt_type' ] = null;
+ $joins[ 'revtag' ] = [
+ 'LEFT JOIN',
+ [ 'page_id=rt_page', 'page_latest=rt_revision', 'rt_type' => RevTagStore::FUZZY_TAG ]
+ ];
+
+ $rows = $db->select( $tables, $fields, $conds, __METHOD__, $options, $joins );
+
+ $pages = [];
+ $revisions = $revisionStore->newRevisionsFromBatch( $rows, [ 'slots' => [ SlotRecord::MAIN ] ] )
+ ->getValue();
+ foreach ( $rows as $row ) {
+ /** @var RevisionRecord|null $rev */
+ $rev = $revisions[$row->rev_id];
+ if ( $rev && $rev->getContent( SlotRecord::MAIN ) instanceof TextContent ) {
+ $pages[$row->page_title] = $rev->getContent( SlotRecord::MAIN )->getText();
+ }
+ }
+
+ return $pages;
+ }
+}
diff --git a/Translate/src/TranslatorInterface/Aid/TranslationAidsActionApi.php b/Translate/src/TranslatorInterface/Aid/TranslationAidsActionApi.php
new file mode 100644
index 00000000..24a2cf78
--- /dev/null
+++ b/Translate/src/TranslatorInterface/Aid/TranslationAidsActionApi.php
@@ -0,0 +1,154 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Aid;
+
+use ApiBase;
+use MediaWiki\Extension\Translate\TranslatorInterface\TranslationHelperException;
+use MediaWiki\Extension\Translate\WebService\QueryAggregator;
+use MediaWiki\Extension\Translate\WebService\QueryAggregatorAware;
+use MediaWiki\Logger\LoggerFactory;
+use MessageGroups;
+use MessageHandle;
+use Title;
+use Wikimedia\ParamValidator\ParamValidator;
+
+/**
+ * Api module for querying message aids.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @ingroup API TranslateAPI
+ */
+class TranslationAidsActionApi extends ApiBase {
+ public function execute() {
+ $params = $this->extractRequestParams();
+
+ $title = Title::newFromText( $params['title'] );
+ if ( !$title ) {
+ $this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $params['title'] ) ] );
+ }
+
+ $handle = new MessageHandle( $title );
+ if ( !$handle->isValid() ) {
+ $this->dieWithError( 'apierror-translate-nomessagefortitle', 'nomessagefortitle' );
+ }
+
+ if ( (string)$params['group'] !== '' ) {
+ $group = MessageGroups::getGroup( $params['group'] );
+ } else {
+ $group = $handle->getGroup();
+ }
+
+ if ( !$group ) {
+ $this->dieWithError( 'apierror-translate-invalidgroup', 'invalidgroup' );
+ }
+
+ $data = [];
+ $times = [];
+
+ $props = $params['prop'];
+ $aggregator = new QueryAggregator();
+
+ // Figure out the intersection of supported and requested aids
+ $types = TranslationAid::getTypes();
+ $props = array_intersect( $props, array_keys( $types ) );
+
+ $result = $this->getResult();
+
+ // Create list of aids, populate web services queries
+ /** @var TranslationAid[] $aids */
+ $aids = [];
+
+ $dataProvider = new TranslationAidDataProvider( $handle );
+
+ // Message definition should not be empty, but sometimes is.
+ // See: https://phabricator.wikimedia.org/T285830
+ // Identify and log.
+ if ( !$dataProvider->hasDefinition() ) {
+ LoggerFactory::getInstance( 'Translate' )->warning(
+ 'Message definition is empty! Title: {title}, group: {group}, key: {key}',
+ [
+ 'title' => $handle->getTitle()->getPrefixedText(),
+ 'group' => $group->getId(),
+ 'key' => $handle->getKey()
+ ]
+ );
+ }
+
+ foreach ( $props as $type ) {
+ // Do not proceed if translation aid is not supported for this message group
+ if ( !isset( $types[$type] ) ) {
+ $types[$type] = UnsupportedTranslationAid::class;
+ }
+
+ $class = $types[$type];
+ $obj = new $class( $group, $handle, $this, $dataProvider );
+
+ if ( $obj instanceof QueryAggregatorAware ) {
+ $obj->setQueryAggregator( $aggregator );
+ try {
+ $obj->populateQueries();
+ } catch ( TranslationHelperException $e ) {
+ $data[$type] = [ 'error' => $e->getMessage() ];
+ // Prevent processing this aids and thus overwriting our error
+ continue;
+ }
+ }
+
+ $aids[$type] = $obj;
+ }
+
+ // Execute all web service queries asynchronously to save time
+ $start = microtime( true );
+ $aggregator->run();
+ $times['query_aggregator'] = round( microtime( true ) - $start, 3 );
+
+ // Construct the result data structure
+ foreach ( $aids as $type => $obj ) {
+ $start = microtime( true );
+
+ try {
+ $aid = $obj->getData();
+ } catch ( TranslationHelperException $e ) {
+ $aid = [ 'error' => $e->getMessage() ];
+ }
+
+ if ( isset( $aid['**'] ) ) {
+ $result->setIndexedTagName( $aid, $aid['**'] );
+ unset( $aid['**'] );
+ }
+
+ $data[$type] = $aid;
+ $times[$type] = round( microtime( true ) - $start, 3 );
+ }
+
+ $result->addValue( null, 'helpers', $data );
+ $result->addValue( null, 'times', $times );
+ }
+
+ protected function getAllowedParams(): array {
+ $props = array_keys( TranslationAid::getTypes() );
+
+ return [
+ 'title' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_REQUIRED => true,
+ ],
+ 'group' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ],
+ 'prop' => [
+ ParamValidator::PARAM_DEFAULT => implode( '|', $props ),
+ ParamValidator::PARAM_TYPE => $props,
+ ParamValidator::PARAM_ISMULTI => true,
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages() {
+ return [
+ 'action=translationaids&title=MediaWiki:January/fi'
+ => 'apihelp-translationaids-example-1',
+ ];
+ }
+}
diff --git a/Translate/src/TranslatorInterface/Aid/UnsupportedTranslationAid.php b/Translate/src/TranslatorInterface/Aid/UnsupportedTranslationAid.php
new file mode 100644
index 00000000..38c3530a
--- /dev/null
+++ b/Translate/src/TranslatorInterface/Aid/UnsupportedTranslationAid.php
@@ -0,0 +1,20 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Aid;
+
+use MediaWiki\Extension\Translate\TranslatorInterface\TranslationHelperException;
+
+/**
+ * Dummy translation aid that always errors
+ * @author Harry Burt
+ * @license GPL-2.0-or-later
+ * @since 2013-03-29
+ * @ingroup TranslationAids
+ * @phan-file-suppress PhanPluginNeverReturnMethod
+ */
+class UnsupportedTranslationAid extends TranslationAid {
+ public function getData(): array {
+ throw new TranslationHelperException( 'This translation aid is disabled' );
+ }
+}
diff --git a/Translate/src/TranslatorInterface/Aid/UpdatedDefinitionAid.php b/Translate/src/TranslatorInterface/Aid/UpdatedDefinitionAid.php
new file mode 100644
index 00000000..bf264fb8
--- /dev/null
+++ b/Translate/src/TranslatorInterface/Aid/UpdatedDefinitionAid.php
@@ -0,0 +1,91 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Aid;
+
+use DifferenceEngine;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\RevTagStore;
+use MediaWiki\Extension\Translate\TranslatorInterface\TranslationHelperException;
+use MediaWiki\MediaWikiServices;
+use MediaWiki\Revision\SlotRecord;
+use Title;
+use TranslateUtils;
+use WikitextContent;
+
+/**
+ * Translation aid that provides the message definition.
+ * This usually matches the content of the page ns:key/source_language.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2013-01-01
+ * @ingroup TranslationAids
+ */
+class UpdatedDefinitionAid extends TranslationAid {
+ public function getData(): array {
+ $db = TranslateUtils::getSafeReadDB();
+ $conds = [
+ 'rt_page' => $this->handle->getTitle()->getArticleID(),
+ 'rt_type' => RevTagStore::TRANSVER_PROP,
+ ];
+ $options = [
+ 'ORDER BY' => 'rt_revision DESC',
+ ];
+
+ $translationRevision = $db->selectField( 'revtag', 'rt_value', $conds, __METHOD__, $options );
+ if ( $translationRevision === false ) {
+ throw new TranslationHelperException( 'No definition revision recorded' );
+ }
+
+ $definitionTitle = Title::makeTitleSafe(
+ $this->handle->getTitle()->getNamespace(),
+ $this->handle->getKey() . '/' . $this->group->getSourceLanguage()
+ );
+
+ if ( !$definitionTitle || !$definitionTitle->exists() ) {
+ throw new TranslationHelperException( 'Definition page does not exist' );
+ }
+
+ // Using getRevisionById instead of byTitle, because the page might have been renamed
+ $oldRevRecord = MediaWikiServices::getInstance()
+ ->getRevisionLookup()
+ ->getRevisionById( $translationRevision );
+ if ( !$oldRevRecord ) {
+ throw new TranslationHelperException( 'Old definition version does not exist anymore' );
+ }
+
+ $oldContent = $oldRevRecord->getContent( SlotRecord::MAIN );
+ $newContent = $this->dataProvider->getDefinitionContent();
+
+ if ( !$oldContent ) {
+ throw new TranslationHelperException( 'Old definition version does not exist anymore' );
+ }
+
+ if ( !$oldContent instanceof WikitextContent || !$newContent instanceof WikitextContent ) {
+ throw new TranslationHelperException( 'Can only work on Wikitext content' );
+ }
+
+ if ( $oldContent->equals( $newContent ) ) {
+ throw new TranslationHelperException( 'No changes' );
+ }
+
+ $diff = new DifferenceEngine( $this->context );
+ $diff->setTextLanguage( wfGetLangObj( $this->group->getSourceLanguage() ) );
+ $diff->setContent( $oldContent, $newContent );
+ $diff->setReducedLineNumbers();
+ $diff->showDiffStyle();
+
+ $html = $diff->getDiff(
+ $this->context->msg( 'tpt-diff-old' )->escaped(),
+ $this->context->msg( 'tpt-diff-new' )->escaped()
+ );
+
+ return [
+ 'value_old' => $oldContent->getText(),
+ 'value_new' => $newContent->getText(),
+ 'revisionid_old' => $oldRevRecord->getId(),
+ 'revisionid_new' => $definitionTitle->getLatestRevID(),
+ 'language' => $this->group->getSourceLanguage(),
+ 'html' => $html,
+ ];
+ }
+}
diff --git a/Translate/src/TranslatorInterface/EntitySearch.php b/Translate/src/TranslatorInterface/EntitySearch.php
new file mode 100644
index 00000000..cf6b621e
--- /dev/null
+++ b/Translate/src/TranslatorInterface/EntitySearch.php
@@ -0,0 +1,249 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface;
+
+use Collation;
+use MalformedTitleException;
+use MessageGroups;
+use MessageIndex;
+use NamespaceInfo;
+use SplMinHeap;
+use TitleFormatter;
+use TitleParser;
+use WANObjectCache;
+use Wikimedia\LightweightObjectStore\ExpirationAwareness;
+
+/**
+ * Service for searching message groups and message keys.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2021.10
+ */
+class EntitySearch {
+ private const FIELD_DELIMITER = "\x7F";
+ private const ROW_DELIMITER = "\n";
+
+ /** @var WANObjectCache */
+ private $cache;
+ /** @var Collation */
+ private $collation;
+ /** @var MessageGroups */
+ private $messageGroupFactory;
+ /** @var NamespaceInfo */
+ private $namespaceInfo;
+ /** @var MessageIndex */
+ private $messageIndex;
+ /** @var TitleParser */
+ private $titleParser;
+ /** @var TitleFormatter */
+ private $titleFormatter;
+
+ public function __construct(
+ WANObjectCache $cache,
+ Collation $collation,
+ MessageGroups $messageGroupFactory,
+ NamespaceInfo $namespaceInfo,
+ MessageIndex $messageIndex,
+ TitleParser $titleParser,
+ TitleFormatter $titleFormatter
+ ) {
+ $this->cache = $cache;
+ $this->collation = $collation;
+ $this->messageGroupFactory = $messageGroupFactory;
+ $this->namespaceInfo = $namespaceInfo;
+ $this->messageIndex = $messageIndex;
+ $this->titleParser = $titleParser;
+ $this->titleFormatter = $titleFormatter;
+ }
+
+ public function searchStaticMessageGroups( string $query, int $maxResults ): array {
+ $cache = $this->cache;
+ // None of the static groups currently use language-dependent labels. This
+ // may need revisiting later and splitting the cache by language.
+ $key = $cache->makeKey( 'Translate', 'EntitySearch', 'static-groups' );
+ $haystack = $cache->getWithSetCallback(
+ $key,
+ ExpirationAwareness::TTL_WEEK,
+ function (): string {
+ return $this->getStaticMessageGroupsHaystack();
+ },
+ [
+ // Calling touchCheckKey() on this key purges the cache
+ 'checkKeys' => [ $this->messageGroupFactory->getCacheKey() ],
+ // Avoid querying cache servers multiple times in a web request
+ 'pcTTL' => ExpirationAwareness::TTL_PROC_LONG
+ ]
+ );
+
+ // Algorithm: Construct one big string with one entity per line. Then run
+ // preg_match_all twice over it, first to collect prefix match (to show them
+ // first), then to match words if more results are needed.
+ $results = [];
+
+ $delimiter = self::FIELD_DELIMITER;
+ $anything = "[^$delimiter\n]";
+ $query = preg_quote( $query, '/' );
+ // Prefix match
+ $pattern = "/^($query$anything*)$delimiter($anything+)$/miu";
+ preg_match_all( $pattern, $haystack, $matches, PREG_SET_ORDER );
+ foreach ( $matches as [ , $label, $groupId ] ) {
+ // Index by $groupId to avoid duplicates from the prefix match and the word match
+ $results[$groupId] = [
+ 'label' => $label,
+ 'group' => $groupId,
+ ];
+
+ if ( count( $results ) >= $maxResults ) {
+ return array_values( $results );
+ }
+ }
+
+ // Word match
+ $pattern = "/^($anything*\b$query$anything*)$delimiter($anything+)$/miu";
+ preg_match_all( $pattern, $haystack, $matches, PREG_SET_ORDER );
+ foreach ( $matches as [ , $label, $groupId ] ) {
+ $results[$groupId] = [
+ 'label' => $label,
+ 'group' => $groupId,
+ ];
+
+ if ( count( $results ) >= $maxResults ) {
+ return array_values( $results );
+ }
+ }
+
+ return array_values( $results );
+ }
+
+ public function searchMessages( string $query, int $maxResults ): array {
+ // Optimized based on requirements:
+ // * "Natural" sorting of results
+ // * No need to show which message group things belong to
+ // * Match at any point in the message
+ // * Return full keys of prefixes that match multiple messages
+
+ $cache = $this->cache;
+ $key = $cache->makeKey( 'Translate', 'EntitySearch', 'messages' );
+ $haystack = $cache->getWithSetCallback(
+ $key,
+ ExpirationAwareness::TTL_WEEK,
+ function (): string {
+ // This can get rather large. On translatewiki.net it is multiple megabytes
+ // uncompressed. With compression (assumed to happen implicitly in the
+ // caching layer) it's under a megabyte.
+ return $this->getMessagesHaystack();
+ },
+ [
+ // Calling touchCheckKey() on this key purges the cache
+ 'checkKeys' => [ $this->messageIndex->getStatusCacheKey() ],
+ // Avoid querying cache servers multiple times in a web request
+ 'pcTTL' => ExpirationAwareness::TTL_PROC_LONG
+ ]
+ );
+
+ // Algorithm: Construct one big string with one entity per line. Then run
+ // preg_match_all over it. Because we will have many more matches than search
+ // results, this may be more efficient than calling preg_match iteratively.
+ // On the other hand, it can use a lot of memory to construct the array for
+ // all the matches.
+ $results = [];
+ $rowDelimiter = self::ROW_DELIMITER;
+ $anything = "[^$rowDelimiter]";
+ $query = preg_quote( $query, '/' );
+
+ // Word match
+ $pattern = "/^($anything*\b$query)$anything*$/miu";
+ preg_match_all( $pattern, $haystack, $matches, PREG_SET_ORDER );
+ $previousPrefixMatch = null;
+ foreach ( $matches as [ $full, $prefixMatch ] ) {
+ // This is a bit tricky. If we are at the maximum results, continue processing
+ // until the prefix changes, to get an accurate count
+ if ( count( $results ) >= $maxResults && $previousPrefixMatch !== $prefixMatch ) {
+ break;
+ }
+
+ if ( $full === $prefixMatch ) {
+ $results[$full] = [ $full, 1, true, $full ];
+ } else {
+ if ( !isset( $results["$prefixMatch*"] ) ) {
+ $results["$prefixMatch*"] = [ "$prefixMatch*", 0, false, $full ];
+ }
+ $results["$prefixMatch*"][1]++;
+ }
+ $previousPrefixMatch = $prefixMatch;
+ }
+
+ // Convert partial matches with single results to full match
+ foreach ( $results as $index => [ $label, $count, $isExact, $full ] ) {
+ if ( $count === 1 && !$isExact ) {
+ $results[$index][0] = $full;
+ }
+ }
+
+ // Drop unnecessary fields, pretty format title
+ foreach ( $results as &$value ) {
+ try {
+ $title = $this->titleParser->parseTitle( $value[0] );
+ $label = $this->titleFormatter->getPrefixedText( $title );
+ } catch ( MalformedTitleException $e ) {
+ $label = $value[0];
+ }
+ $value = [
+ 'pattern' => $label,
+ 'count' => $value[1]
+ ];
+ }
+
+ return array_values( $results );
+ }
+
+ private function getStaticMessageGroupsHaystack(): string {
+ $groups = $this->messageGroupFactory->getGroups();
+ $data = new SplMinHeap();
+ foreach ( $groups as $group ) {
+ $label = $group->getLabel();
+ // Ensure there are no special chars that will break matching
+ $label = strtr( $label, [ self::FIELD_DELIMITER => '', self::ROW_DELIMITER => '' ] );
+ $sortKey = $this->collation->getSortKey( $label );
+ // It is unlikely that different groups have the same label (or sort key),
+ // but it's possible, so cannot use a hashmap here.
+ $data->insert( [ $sortKey, $label, $group->getId() ] );
+ }
+
+ $haystack = '';
+ foreach ( $data as [ , $label, $groupId ] ) {
+ $haystack .= $label . self::FIELD_DELIMITER . $groupId . self::ROW_DELIMITER;
+ }
+
+ return $haystack;
+ }
+
+ private function getMessagesHaystack(): string {
+ $namespaceMap = [];
+ $data = new SplMinHeap();
+ $keys = $this->messageIndex->getKeys();
+ foreach ( $keys as $key ) {
+ // Normalize "_" to " " so that \b in regexp matches words separated by underscores
+ $key = strtr( $key, [ '_' => ' ' ] );
+
+ [ $namespaceId, $label ] = explode( ':', $key, 2 );
+ if ( !isset( $namespaceMap[$namespaceId] ) ) {
+ $namespaceMap[$namespaceId] = $this->namespaceInfo->getCanonicalName( (int)$namespaceId );
+ }
+ $label = $namespaceMap[$namespaceId] . ":$label";
+
+ // Ensure there are no special chars that will break matching
+ $label = strtr( $label, [ self::ROW_DELIMITER => '' ] );
+ $sortKey = $this->collation->getSortKey( $label );
+ $data->insert( [ $sortKey, $label ] );
+ }
+
+ $haystack = '';
+ foreach ( $data as [ , $label ] ) {
+ $haystack .= $label . self::ROW_DELIMITER;
+ }
+
+ return $haystack;
+ }
+}
diff --git a/Translate/src/TranslatorInterface/Insertable/CombinedInsertablesSuggester.php b/Translate/src/TranslatorInterface/Insertable/CombinedInsertablesSuggester.php
new file mode 100644
index 00000000..c4a2662e
--- /dev/null
+++ b/Translate/src/TranslatorInterface/Insertable/CombinedInsertablesSuggester.php
@@ -0,0 +1,31 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Insertable;
+
+/**
+ * A class to combine multiple insertables suggesters.
+ * @author Geoffrey Mon
+ * @license GPL-2.0-or-later
+ * @since 2020.12
+ */
+class CombinedInsertablesSuggester implements InsertablesSuggester {
+
+ /** @var InsertablesSuggester[] */
+ protected $suggesters = [];
+
+ /** @param InsertablesSuggester[] $suggesters Array of InsertablesSuggester objects to combine. */
+ public function __construct( array $suggesters = [] ) {
+ $this->suggesters = $suggesters;
+ }
+
+ public function getInsertables( string $text ): array {
+ $insertables = [];
+ foreach ( $this->suggesters as $suggester ) {
+ $new = $suggester->getInsertables( $text );
+ $insertables = array_merge( $insertables, $new );
+ }
+
+ return array_unique( $insertables, SORT_REGULAR );
+ }
+}
diff --git a/Translate/src/TranslatorInterface/Insertable/HtmlTagInsertablesSuggester.php b/Translate/src/TranslatorInterface/Insertable/HtmlTagInsertablesSuggester.php
new file mode 100644
index 00000000..d2599396
--- /dev/null
+++ b/Translate/src/TranslatorInterface/Insertable/HtmlTagInsertablesSuggester.php
@@ -0,0 +1,28 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Insertable;
+
+/**
+ * Suggester for HTML tags
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2020.12
+ */
+class HtmlTagInsertablesSuggester implements InsertablesSuggester {
+ /** @var InsertablesSuggester */
+ private $suggester;
+
+ public function __construct() {
+ $this->suggester = new RegexInsertablesSuggester( [
+ 'regex' => '~(?<open><([a-z][a-z0-9]*)\b[^>]*>).*?(?<close></\2>)~',
+ 'display' => '$open$close',
+ 'pre' => '$open',
+ 'post' => '$close',
+ ] );
+ }
+
+ public function getInsertables( string $text ): array {
+ return $this->suggester->getInsertables( $text );
+ }
+}
diff --git a/Translate/src/TranslatorInterface/Insertable/Insertable.php b/Translate/src/TranslatorInterface/Insertable/Insertable.php
new file mode 100644
index 00000000..fc02cea7
--- /dev/null
+++ b/Translate/src/TranslatorInterface/Insertable/Insertable.php
@@ -0,0 +1,48 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Insertable;
+
+/**
+ * Insertable is a string that usually does not need translation and is
+ * difficult to type manually.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2020.12
+ */
+class Insertable {
+ /** @var string What to show to the user */
+ protected $display;
+ /**
+ * @var string What to insert before selection, or what to replace
+ * the selection with, if $post remains empty.
+ */
+ protected $pre;
+ /** @var string What to insert after selection */
+ protected $post;
+
+ /**
+ * @param string $display What to show to the user
+ * @param string $pre What to insert before selection, or replace
+ * selection if $post remains empty
+ * @param string $post What to insert after selection. If it is not
+ * given, $pre will replace selection.
+ */
+ public function __construct( string $display, string $pre = '', string $post = '' ) {
+ $this->display = $display;
+ $this->pre = $pre;
+ $this->post = $post;
+ }
+
+ public function getPreText(): string {
+ return $this->pre;
+ }
+
+ public function getPostText(): string {
+ return $this->post;
+ }
+
+ public function getDisplayText(): string {
+ return $this->display;
+ }
+}
diff --git a/Translate/src/TranslatorInterface/Insertable/InsertableFactory.php b/Translate/src/TranslatorInterface/Insertable/InsertableFactory.php
new file mode 100644
index 00000000..f723b6ce
--- /dev/null
+++ b/Translate/src/TranslatorInterface/Insertable/InsertableFactory.php
@@ -0,0 +1,48 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Insertable;
+
+use InvalidArgumentException;
+
+/**
+ * A factory class used to instantiate instances of Insertables
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2020.12
+ */
+class InsertableFactory {
+ /**
+ * Takes a InsertableSuggester class name, and returns an instance of that class.
+ * @param string $class
+ * @param array|string|null $params
+ * @throws InvalidArgumentException
+ */
+ public static function make( string $class, $params = null ): InsertablesSuggester {
+ // FIXME: We should look at using "id / class" similar to what we do with the ValidatorFactory
+ $checkedClasses = [];
+
+ // This check is done for custom insertables that might be added for certain groups.
+ if ( !class_exists( $class ) ) {
+ $checkedClasses[] = $class;
+ // Custom class not found, so lets try to load pre-provided Insertables.
+ $class = __NAMESPACE__ . '\\' . $class;
+ }
+
+ if ( !class_exists( $class ) ) {
+ $checkedClasses[] = $class;
+ throw new InvalidArgumentException(
+ 'Could not find InsertableSuggester with class: ' . implode( ', ', $checkedClasses )
+ );
+ }
+
+ $suggester = new $class( $params );
+ if ( !$suggester instanceof InsertablesSuggester ) {
+ throw new InvalidArgumentException(
+ "$class does not implement the InsertableSuggester interface"
+ );
+ }
+
+ return $suggester;
+ }
+}
diff --git a/Translate/src/TranslatorInterface/Insertable/InsertablesSuggester.php b/Translate/src/TranslatorInterface/Insertable/InsertablesSuggester.php
new file mode 100644
index 00000000..39a39dc4
--- /dev/null
+++ b/Translate/src/TranslatorInterface/Insertable/InsertablesSuggester.php
@@ -0,0 +1,19 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Insertable;
+
+/**
+ * Interface for InsertablesSuggesters. Insertable is a string that usually does
+ * not need translation and is difficult to type manually.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2020.12
+ */
+interface InsertablesSuggester {
+ /**
+ * Returns the insertables in the message text.
+ * @return Insertable[]
+ */
+ public function getInsertables( string $text ): array;
+}
diff --git a/Translate/src/TranslatorInterface/Insertable/MediaWikiInsertablesSuggester.php b/Translate/src/TranslatorInterface/Insertable/MediaWikiInsertablesSuggester.php
new file mode 100644
index 00000000..e8471217
--- /dev/null
+++ b/Translate/src/TranslatorInterface/Insertable/MediaWikiInsertablesSuggester.php
@@ -0,0 +1,42 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Insertable;
+
+/**
+ * InsertablesSuggester implementation for MediaWiki message translations.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2020.12
+ */
+class MediaWikiInsertablesSuggester implements InsertablesSuggester {
+ public function getInsertables( string $text ): array {
+ $insertables = [];
+
+ $matches = [];
+ // MediaWiki apihelp messages often have parameters like $1user, which should
+ // be unchanged in translation.
+ preg_match_all( '/\$(1[a-z]+|[0-9]+)/', $text, $matches, PREG_SET_ORDER );
+ $new = array_map( static function ( $match ) {
+ return new Insertable( $match[0], $match[0] );
+ }, $matches );
+ $insertables = array_merge( $insertables, $new );
+
+ $matches = [];
+ preg_match_all(
+ '/({{((?:PLURAL|GENDER|GRAMMAR):[^|]*)\|).*?(}})/i',
+ $text,
+ $matches,
+ PREG_SET_ORDER
+ );
+ $new = array_map( static function ( $match ) {
+ return new Insertable( $match[2], $match[1], $match[3] );
+ }, $matches );
+ $insertables = array_merge( $insertables, $new );
+
+ return array_merge(
+ $insertables,
+ ( new HtmlTagInsertablesSuggester() )->getInsertables( $text )
+ );
+ }
+}
diff --git a/Translate/src/TranslatorInterface/Insertable/NumericalParameterInsertablesSuggester.php b/Translate/src/TranslatorInterface/Insertable/NumericalParameterInsertablesSuggester.php
new file mode 100644
index 00000000..7a8e15a4
--- /dev/null
+++ b/Translate/src/TranslatorInterface/Insertable/NumericalParameterInsertablesSuggester.php
@@ -0,0 +1,31 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Insertable;
+
+/**
+ * Insertables suggester for numerical parameters such as $1, $2, $3
+ * @author Geoffrey Mon
+ * @license GPL-2.0-or-later
+ * @since 2020.12
+ */
+class NumericalParameterInsertablesSuggester implements InsertablesSuggester {
+ public function getInsertables( string $text ): array {
+ $insertables = [];
+
+ // $1, $2, $3 etc.
+ $matches = [];
+ preg_match_all(
+ '/\$\d+/',
+ $text,
+ $matches,
+ PREG_SET_ORDER
+ );
+ $new = array_map( static function ( $match ) {
+ return new Insertable( $match[0], $match[0] );
+ }, $matches );
+ $insertables = array_merge( $insertables, $new );
+
+ return $insertables;
+ }
+}
diff --git a/Translate/src/TranslatorInterface/Insertable/RegexInsertablesSuggester.php b/Translate/src/TranslatorInterface/Insertable/RegexInsertablesSuggester.php
new file mode 100644
index 00000000..7b789ec1
--- /dev/null
+++ b/Translate/src/TranslatorInterface/Insertable/RegexInsertablesSuggester.php
@@ -0,0 +1,124 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Insertable;
+
+use InvalidArgumentException;
+
+/**
+ * Regex InsertablesSuggester implementation that can be extended or used
+ * for insertables in message groups
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2020.12
+ */
+class RegexInsertablesSuggester implements InsertablesSuggester {
+ /**
+ * The regex to run on the message. The regex must use named group captures
+ * @var string
+ */
+ protected $regex = null;
+ /**
+ * The named parameter from the regex that should be used for
+ * insertable display.
+ * @var string
+ */
+ protected $display = null;
+ /**
+ * The named parameter from the regex that should be used as pre
+ * @var string
+ */
+ protected $pre = null;
+ /**
+ * The named paramater from the regex that should be used as post
+ * @var string
+ */
+ protected $post = null;
+
+ /**
+ * Constructor function
+ * @param array|string $params If params is specified as a string, it is used as the regex.
+ * Eg: "/\$[a-z0-9]+/". In this case `display` is the first value from the regex match.
+ * `pre` is also the first value from the regex match, `post` is left empty.
+ *
+ * If params is specified as a collection / array, see below for further details.
+ *
+ * Example:
+ *
+ * ```
+ * params:
+ * regex: "/(?<pre>\[)[^]]+(?<post>\]\([^)]+\))/"
+ * display: "$pre $post"
+ * pre: "$pre"
+ * post: "$post"
+ * ```
+ *
+ * Details:
+ *
+ * $params = [
+ * 'regex' => (string, required) The regex to be used for insertable. Must use named captures.
+ * When specifying named captures, do not use the $ symbol in the name. In the above
+ * example, two named captures are used - `pre` and `post`
+ * 'display' => (string) Mandatory value. The display value for the insertable. Named captures
+ * prefixed with $ are used here.
+ * 'pre' => (string) The pre value for the insertable. Named captures prefixed with $ are used
+ * here. If not specified, is set to the display value.
+ * 'post' => (string) The post value for the insertable. Named captures prefixed with $ are used
+ * here. If not specified, defaults to an empty string.
+ * ]
+ */
+ public function __construct( $params ) {
+ if ( is_string( $params ) ) {
+ $this->regex = $params;
+ } elseif ( is_array( $params ) ) {
+ // Validate if the array is in a proper format.
+ $this->regex = $params['regex'] ?? null;
+ $this->display = $params['display'] ?? null;
+ $this->pre = $params['pre'] ?? null;
+ $this->post = $params['post'] ?? null;
+ }
+
+ if ( $this->regex === null ) {
+ throw new InvalidArgumentException(
+ 'Invalid configuration for the RegexInsertablesSuggester. Did not find a regex specified'
+ );
+ }
+
+ if ( $this->display !== null && $this->pre === null ) {
+ // if display value is set, and pre value is not set, set the display to pre.
+ // makes the configuration easier.
+ $this->pre = $this->display;
+ }
+ }
+
+ public function getInsertables( string $text ): array {
+ $matches = [];
+ preg_match_all( $this->regex, $text, $matches, PREG_SET_ORDER );
+
+ return array_map( [ $this, 'mapInsertables' ], $matches );
+ }
+
+ protected function mapInsertables( array $match ) {
+ if ( $this->display === null ) {
+ return new Insertable( $match[0], $match[0] );
+ }
+
+ $replacements = [];
+ // add '$' to the other keys for replacement.
+ foreach ( $match as $key => $value ) {
+ if ( !is_int( $key ) ) {
+ $tmpKey = '$' . $key;
+ $replacements[ $tmpKey ] = $value;
+ }
+ }
+
+ $displayVal = strtr( $this->display, $replacements );
+ $preVal = strtr( $this->pre, $replacements );
+ $postVal = '';
+ if ( $this->post !== null ) {
+ $postVal = strtr( $this->post, $replacements );
+ }
+
+ return new Insertable( $displayVal, $preVal, $postVal );
+ }
+}
diff --git a/Translate/src/TranslatorInterface/Insertable/UrlInsertablesSuggester.php b/Translate/src/TranslatorInterface/Insertable/UrlInsertablesSuggester.php
new file mode 100644
index 00000000..8a4ca4bc
--- /dev/null
+++ b/Translate/src/TranslatorInterface/Insertable/UrlInsertablesSuggester.php
@@ -0,0 +1,28 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Insertable;
+
+/**
+ * Suggester for URLs
+ * @author Jon Harald Søby
+ * @license GPL-2.0-or-later
+ * @since 2022.01
+ */
+class UrlInsertablesSuggester implements InsertablesSuggester {
+ /** @var InsertablesSuggester */
+ private $suggester;
+
+ public function __construct() {
+ $this->suggester = new RegexInsertablesSuggester( [
+ 'regex' => '~(?<domain>(https?:)?//([\w\-]+\.)+[\w\-]{2,})(?<slug>(/[\w\-/_?&#$%()!?=.:]*|\b))?~',
+ 'display' => '$domain/',
+ 'pre' => '$domain$slug',
+ 'post' => '',
+ ] );
+ }
+
+ public function getInsertables( string $text ): array {
+ return $this->suggester->getInsertables( $text );
+ }
+}
diff --git a/Translate/src/TranslatorInterface/LegacyInterfaceHookHandler.php b/Translate/src/TranslatorInterface/LegacyInterfaceHookHandler.php
new file mode 100644
index 00000000..d2c79438
--- /dev/null
+++ b/Translate/src/TranslatorInterface/LegacyInterfaceHookHandler.php
@@ -0,0 +1,84 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface;
+
+use DifferenceEngine;
+use EditPage;
+use MediaWiki\Diff\Hook\ArticleContentOnDiffHook;
+use MediaWiki\Hook\AlternateEditHook;
+use MediaWiki\Hook\EditPage__showEditForm_initialHook;
+use MediaWiki\Languages\LanguageFactory;
+use MessageHandle;
+use OutputPage;
+
+/**
+ * Integration point to MediaWiki for the legacy translation aids.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+class LegacyInterfaceHookHandler
+ implements AlternateEditHook, ArticleContentOnDiffHook, EditPage__showEditForm_initialHook
+{
+ /** @var LanguageFactory */
+ private $languageFactory;
+
+ public function __construct( LanguageFactory $languageFactory ) {
+ $this->languageFactory = $languageFactory;
+ }
+
+ /**
+ * Do not show the usual introductory messages on edit page for messages.
+ * @param EditPage $editPage
+ */
+ public function onAlternateEdit( $editPage ): void {
+ $handle = new MessageHandle( $editPage->getTitle() );
+ if ( $handle->isValid() ) {
+ $editPage->suppressIntro = true;
+ }
+ }
+
+ /**
+ * Enhances the action=edit view for wikitext editor with some translation aids
+ * @param EditPage $editPage
+ * @param OutputPage $out
+ */
+ // phpcs:disable MediaWiki.NamingConventions.LowerCamelFunctionsName.FunctionName
+ public function onEditPage__showEditForm_initial( $editPage, $out ): void {
+ // phpcs:enable
+ $handle = new MessageHandle( $editPage->getTitle() );
+ if ( !$handle->isValid() ) {
+ return;
+ }
+
+ $context = $out->getContext();
+ $request = $context->getRequest();
+
+ if ( $editPage->firsttime && !$request->getCheck( 'oldid' ) &&
+ !$request->getCheck( 'undo' ) ) {
+ if ( $handle->isFuzzy() ) {
+ $editPage->textbox1 = TRANSLATE_FUZZY . $editPage->textbox1;
+ }
+ }
+
+ $th = new LegacyTranslationAids( $handle, $context, $this->languageFactory );
+ $editPage->editFormTextTop .= $th->getBoxes();
+ }
+
+ /**
+ * Enhances the action=diff view with some translations aids
+ * @param DifferenceEngine $diffEngine
+ * @param OutputPage $output
+ */
+ public function onArticleContentOnDiff( $diffEngine, $output ): void {
+ $title = $diffEngine->getTitle();
+ $handle = new MessageHandle( $title );
+
+ if ( !$handle->isValid() ) {
+ return;
+ }
+
+ $th = new LegacyTranslationAids( $handle, $diffEngine->getContext(), $this->languageFactory );
+ $output->addHTML( $th->getBoxes() );
+ }
+}
diff --git a/Translate/src/TranslatorInterface/LegacyTranslationAids.php b/Translate/src/TranslatorInterface/LegacyTranslationAids.php
new file mode 100644
index 00000000..6dc9ff9a
--- /dev/null
+++ b/Translate/src/TranslatorInterface/LegacyTranslationAids.php
@@ -0,0 +1,159 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface;
+
+use Html;
+use IContextSource;
+use MediaWiki\Extension\Translate\TranslatorInterface\Aid\MessageDefinitionAid;
+use MediaWiki\Extension\Translate\TranslatorInterface\Aid\TranslationAidDataProvider;
+use MediaWiki\Languages\LanguageFactory;
+use MessageGroup;
+use MessageHandle;
+use Title;
+use TranslateUtils;
+
+/**
+ * Provides minimal translation aids which integrate with the edit page and on diffs for
+ * translatable messages.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+class LegacyTranslationAids {
+ /** @var MessageHandle */
+ private $handle;
+ /** @var MessageGroup */
+ private $group;
+ /** @var IContextSource */
+ private $context;
+ /** @var LanguageFactory */
+ private $languageFactory;
+
+ public function __construct(
+ MessageHandle $handle,
+ IContextSource $context,
+ LanguageFactory $languageFactory
+ ) {
+ $this->handle = $handle;
+ $this->context = $context;
+ $this->group = $handle->getGroup();
+ $this->languageFactory = $languageFactory;
+ }
+
+ private function getDefinition(): ?string {
+ $obj = new MessageDefinitionAid(
+ $this->group,
+ $this->handle,
+ $this->context,
+ new TranslationAidDataProvider( $this->handle )
+ );
+
+ return $obj->getData()['value'];
+ }
+
+ /**
+ * Returns block element HTML snippet that contains the translation aids.
+ * Not all boxes are shown all the time depending on whether they have
+ * any information to show and on configuration variables.
+ * @return string Block level HTML snippet or empty string.
+ */
+ public function getBoxes(): string {
+ $boxes = [];
+
+ try {
+ $boxes[] = $this->getDocumentationBox();
+ } catch ( TranslationHelperException $e ) {
+ $boxes[] = "<!-- Documentation not available: {$e->getMessage()} -->";
+ }
+
+ try {
+ $boxes[] = $this->getDefinitionBox();
+ } catch ( TranslationHelperException $e ) {
+ $boxes[] = "<!-- Definition not available: {$e->getMessage()} -->";
+ }
+
+ $this->context->getOutput()->addModuleStyles( 'ext.translate.quickedit' );
+ return Html::rawElement(
+ 'div',
+ [ 'class' => 'mw-sp-translate-edit-fields' ],
+ implode( "\n\n", $boxes )
+ );
+ }
+
+ private function getDefinitionBox(): string {
+ $definition = $this->getDefinition();
+ if ( (string)$definition === '' ) {
+ throw new TranslationHelperException( 'Message lacks definition' );
+ }
+
+ $linkTag = self::ajaxEditLink( $this->handle->getTitle(), $this->group->getLabel() );
+ $label =
+ wfMessage( 'translate-edit-definition' )->escaped() .
+ wfMessage( 'word-separator' )->escaped() .
+ wfMessage( 'parentheses' )->rawParams( $linkTag )->escaped();
+
+ $sl = $this->languageFactory->getLanguage( $this->group->getSourceLanguage() );
+
+ $msg = Html::rawElement( 'div',
+ [
+ 'class' => 'mw-translate-edit-deftext',
+ 'dir' => $sl->getDir(),
+ 'lang' => $sl->getHtmlCode(),
+ ],
+ TranslateUtils::convertWhiteSpaceToHTML( $definition )
+ );
+
+ $class = [ 'class' => 'mw-sp-translate-edit-definition' ];
+
+ return TranslateUtils::fieldset( $label, $msg, $class );
+ }
+
+ private function getDocumentationBox(): string {
+ global $wgTranslateDocumentationLanguageCode;
+
+ if ( !$wgTranslateDocumentationLanguageCode ) {
+ throw new TranslationHelperException( 'Message documentation language code is not defined' );
+ }
+
+ $page = $this->handle->getKey();
+ $ns = $this->handle->getTitle()->getNamespace();
+
+ $title = $this->handle->getTitleForLanguage( $wgTranslateDocumentationLanguageCode );
+ $edit = $this->ajaxEditLink(
+ $title,
+ $this->context->msg( 'translate-edit-contribute' )->text()
+ );
+ $info = TranslateUtils::getMessageContent( $page, $wgTranslateDocumentationLanguageCode, $ns );
+
+ $class = 'mw-sp-translate-edit-info';
+
+ // The information is most likely in English
+ $divAttribs = [ 'dir' => 'ltr', 'lang' => 'en', 'class' => 'mw-content-ltr' ];
+
+ if ( (string)$info === '' ) {
+ $info = $this->context->msg( 'translate-edit-no-information' )->plain();
+ $class = 'mw-sp-translate-edit-noinfo';
+ $lang = $this->context->getLanguage();
+ // The message saying that there's no info, should be translated
+ $divAttribs = [ 'dir' => $lang->getDir(), 'lang' => $lang->getHtmlCode() ];
+ }
+ $class .= ' mw-sp-translate-message-documentation';
+
+ $contents = $this->context->getOutput()->parseInlineAsInterface( $info );
+
+ return TranslateUtils::fieldset(
+ $this->context->msg( 'translate-edit-information' )->rawParams( $edit )->escaped(),
+ Html::rawElement( 'div', $divAttribs, $contents ), [ 'class' => $class ]
+ );
+ }
+
+ private function ajaxEditLink( Title $target, string $linkText ): string {
+ $handle = new MessageHandle( $target );
+ $uri = TranslateUtils::getEditorUrl( $handle );
+ return Html::element(
+ 'a',
+ [ 'href' => $uri ],
+ $linkText
+ );
+ }
+}
diff --git a/Translate/src/TranslatorInterface/MessageTable.php b/Translate/src/TranslatorInterface/MessageTable.php
new file mode 100644
index 00000000..5dab7796
--- /dev/null
+++ b/Translate/src/TranslatorInterface/MessageTable.php
@@ -0,0 +1,90 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface;
+
+use ContextSource;
+use Hooks;
+use Html;
+use IContextSource;
+use Language;
+use MessageGroup;
+
+/**
+ * Display messages for translation & review
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+class MessageTable extends ContextSource {
+ protected $group;
+ protected $language;
+
+ public function __construct( IContextSource $context, MessageGroup $group, string $language ) {
+ $this->setContext( $context );
+ $this->group = $group;
+ if ( Language::isKnownLanguageTag( $language ) ) {
+ $this->language = $language;
+ } else {
+ $this->language = $context->getLanguage()->getCode();
+ }
+ }
+
+ public function fullTable(): string {
+ $modules = [];
+ Hooks::run( 'TranslateBeforeAddModules', [ &$modules ] );
+ $this->getOutput()->addModules( $modules );
+
+ $sourceLang = Language::factory( $this->group->getSourceLanguage() );
+ $targetLang = Language::factory( $this->language );
+ $batchSize = 100;
+
+ $list = Html::element( 'div', [
+ 'class' => 'row tux-messagelist',
+ 'data-grouptype' => get_class( $this->group ),
+ 'data-sourcelangcode' => $sourceLang->getCode(),
+ 'data-sourcelangdir' => $sourceLang->getDir(),
+ 'data-targetlangcode' => $targetLang->getCode(),
+ 'data-targetlangdir' => $targetLang->getDir(),
+ ] );
+
+ $groupId = htmlspecialchars( $this->group->getId() );
+ $msg = $this->msg( 'tux-messagetable-loading-messages' )
+ ->numParams( $batchSize )
+ ->escaped();
+
+ $loader = <<<HTML
+<div class="tux-messagetable-loader hide" data-messagegroup="$groupId" data-pagesize="$batchSize">
+ <span class="tux-loading-indicator"></span>
+ <div class="tux-messagetable-loader-info">$msg</div>
+</div>
+HTML;
+
+ $hideOwn = $this->msg( 'tux-editor-proofreading-hide-own-translations' )->escaped();
+ $clearTranslated = $this->msg( 'tux-editor-clear-translated' )->escaped();
+ $modeTranslate = $this->msg( 'tux-editor-translate-mode' )->escaped();
+ $modePage = $this->msg( 'tux-editor-page-mode' )->escaped();
+ $modeProofread = $this->msg( 'tux-editor-proofreading-mode' )->escaped();
+
+ $actionbar = <<<HTML
+<div class="tux-action-bar hide row">
+ <div class="three columns tux-message-list-statsbar" data-messagegroup="$groupId"></div>
+ <div class="three columns text-center">
+ <button class="toggle button tux-proofread-own-translations-button hide">
+ $hideOwn
+ </button>
+ <button class="toggle button tux-editor-clear-translated hide">$clearTranslated</button>
+ </div>
+ <div class="six columns tux-view-switcher text-center">
+ <button class="toggle down translate-mode-button">$modeTranslate
+ </button><button class="toggle down page-mode-button">$modePage
+ </button><button class="toggle hide proofread-mode-button">$modeProofread
+ </button>
+ </div>
+</div>
+HTML;
+
+ // Actual message table is fetched and rendered at client side. This just provides
+ // the loader and action bar.
+ return $list . $loader . $actionbar;
+ }
+}
diff --git a/Translate/src/TranslatorInterface/ReviewTranslationActionApi.php b/Translate/src/TranslatorInterface/ReviewTranslationActionApi.php
new file mode 100644
index 00000000..dedebc35
--- /dev/null
+++ b/Translate/src/TranslatorInterface/ReviewTranslationActionApi.php
@@ -0,0 +1,174 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface;
+
+use ApiBase;
+use ApiMain;
+use ManualLogEntry;
+use MediaWiki\Revision\RevisionLookup;
+use MediaWiki\Revision\RevisionRecord;
+use MessageHandle;
+use Status;
+use TitleFormatter;
+use User;
+use Wikimedia\ParamValidator\ParamValidator;
+use Wikimedia\Rdbms\ILoadBalancer;
+
+/**
+ * API module for marking translations as reviewed
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @ingroup API TranslateAPI
+ */
+class ReviewTranslationActionApi extends ApiBase {
+ protected static $right = 'translate-messagereview';
+ /** @var RevisionLookup */
+ private $revisionLookup;
+ /** @var TitleFormatter */
+ private $titleFormatter;
+ /** @var ILoadBalancer */
+ private $loadBalancer;
+
+ public function __construct(
+ ApiMain $main,
+ string $moduleName,
+ RevisionLookup $revisionLookup,
+ TitleFormatter $titleFormatter,
+ ILoadBalancer $loadBalancer
+ ) {
+ parent::__construct( $main, $moduleName );
+ $this->revisionLookup = $revisionLookup;
+ $this->titleFormatter = $titleFormatter;
+ $this->loadBalancer = $loadBalancer;
+ }
+
+ public function execute() {
+ $this->checkUserRightsAny( self::$right );
+
+ $params = $this->extractRequestParams();
+
+ $revRecord = $this->revisionLookup->getRevisionById( $params['revision'] );
+ if ( !$revRecord ) {
+ $this->dieWithError( [ 'apierror-nosuchrevid', $params['revision'] ], 'invalidrevision' );
+ }
+
+ $status = $this->getReviewBlockers( $this->getUser(), $revRecord );
+ if ( !$status->isGood() ) {
+ if ( $status->hasMessage( 'blocked' ) ) {
+ $this->dieBlocked( $this->getUser()->getBlock() );
+ } else {
+ $this->dieStatus( $status );
+ }
+ }
+
+ $ok = $this->doReview( $this->getUser(), $revRecord );
+ if ( !$ok ) {
+ $this->addWarning( 'apiwarn-translate-alreadyreviewedbyyou' );
+ }
+
+ $prefixedText = $this->titleFormatter->getPrefixedText( $revRecord->getPageAsLinkTarget() );
+ $output = [ 'review' => [
+ 'title' => $prefixedText,
+ 'pageid' => $revRecord->getPageId(),
+ 'revision' => $revRecord->getId()
+ ] ];
+
+ $this->getResult()->addValue( null, $this->getModuleName(), $output );
+ }
+
+ /**
+ * Executes the real stuff. No checks done!
+ * @return bool whether the action was recorded.
+ */
+ private function doReview( User $user, RevisionRecord $revRecord ): bool {
+ $dbw = $this->loadBalancer->getConnection( DB_PRIMARY );
+ $table = 'translate_reviews';
+ $row = [
+ 'trr_user' => $user->getId(),
+ 'trr_page' => $revRecord->getPageId(),
+ 'trr_revision' => $revRecord->getId(),
+ ];
+ $options = [ 'IGNORE' ];
+ $dbw->insert( $table, $row, __METHOD__, $options );
+
+ if ( !$dbw->affectedRows() ) {
+ return false;
+ }
+
+ $title = $revRecord->getPageAsLinkTarget();
+
+ $entry = new ManualLogEntry( 'translationreview', 'message' );
+ $entry->setPerformer( $user );
+ $entry->setTarget( $title );
+ $entry->setParameters( [
+ '4::revision' => $revRecord->getId(),
+ ] );
+
+ $logid = $entry->insert();
+ $entry->publish( $logid );
+
+ $handle = new MessageHandle( $title );
+ $this->getHookContainer()->run( 'TranslateEventTranslationReview', [ $handle ] );
+
+ return true;
+ }
+
+ /**
+ * Validates review action by checking permissions and other things.
+ * @return Status Contains error key that describes the review blocker.
+ */
+ private function getReviewBlockers( User $user, RevisionRecord $revRecord ): Status {
+ if ( !$user->isAllowed( self::$right ) ) {
+ return Status::newFatal( 'apierror-permissiondenied-generic' );
+ }
+
+ if ( $user->getBlock() ) {
+ return Status::newFatal( 'blocked' );
+ }
+
+ $title = $revRecord->getPageAsLinkTarget();
+ $handle = new MessageHandle( $title );
+ if ( !$handle->isValid() ) {
+ return Status::newFatal( 'apierror-translate-unknownmessage' );
+ }
+
+ if ( $user->equals( $revRecord->getUser() ) ) {
+ return Status::newFatal( 'apierror-translate-owntranslation' );
+ }
+
+ if ( $handle->isFuzzy() ) {
+ return Status::newFatal( 'apierror-translate-fuzzymessage' );
+ }
+
+ return Status::newGood();
+ }
+
+ public function isWriteMode(): bool {
+ return true;
+ }
+
+ public function needsToken(): string {
+ return 'csrf';
+ }
+
+ protected function getAllowedParams(): array {
+ return [
+ 'revision' => [
+ ParamValidator::PARAM_TYPE => 'integer',
+ ParamValidator::PARAM_REQUIRED => true,
+ ],
+ 'token' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_REQUIRED => true,
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages(): array {
+ return [
+ 'action=translationreview&revision=1&token=foo'
+ => 'apihelp-translationreview-example-1',
+ ];
+ }
+}
diff --git a/Translate/src/TranslatorInterface/TranslateSpecialPage.php b/Translate/src/TranslatorInterface/TranslateSpecialPage.php
new file mode 100644
index 00000000..964c6908
--- /dev/null
+++ b/Translate/src/TranslatorInterface/TranslateSpecialPage.php
@@ -0,0 +1,466 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface;
+
+use AggregateMessageGroup;
+use ErrorPageError;
+use Hooks;
+use Html;
+use Language;
+use MediaWiki\Languages\LanguageFactory;
+use MediaWiki\Languages\LanguageNameUtils;
+use MediaWiki\MediaWikiServices;
+use MessageGroup;
+use MessageGroups;
+use MWException;
+use Skin;
+use SpecialPage;
+use TranslateUtils;
+use Xml;
+
+/**
+ * Implements the core of Translate extension - a special page which shows
+ * a list of messages in a format defined by Tasks.
+ *
+ * @author Niklas Laxström
+ * @author Siebrand Mazeland
+ * @license GPL-2.0-or-later
+ * @ingroup SpecialPage TranslateSpecialPage
+ */
+class TranslateSpecialPage extends SpecialPage {
+ /** @var MessageGroup */
+ protected $group;
+ protected $defaults;
+ protected $nondefaults = [];
+ protected $options;
+ /** @var Language */
+ private $contentLanguage;
+ /** @var LanguageFactory */
+ private $languageFactory;
+ /** @var LanguageNameUtils */
+ private $languageNameUtils;
+
+ public function __construct(
+ Language $contentLanguage,
+ LanguageFactory $languageFactory,
+ LanguageNameUtils $languageNameUtils
+ ) {
+ parent::__construct( 'Translate' );
+ $this->contentLanguage = $contentLanguage;
+ $this->languageFactory = $languageFactory;
+ $this->languageNameUtils = $languageNameUtils;
+ }
+
+ public function doesWrites() {
+ return true;
+ }
+
+ protected function getGroupName() {
+ return 'translation';
+ }
+
+ /**
+ * Access point for this special page.
+ *
+ * @param string|null $parameters
+ * @throws ErrorPageError
+ */
+ public function execute( $parameters ) {
+ $out = $this->getOutput();
+ $out->addModuleStyles( [
+ 'ext.translate.special.translate.styles',
+ 'jquery.uls.grid',
+ 'mediawiki.ui.button'
+ ] );
+
+ $this->setHeaders();
+
+ $this->setup( $parameters );
+
+ // Redirect old export URLs to Special:ExportTranslations
+ if ( $this->getRequest()->getText( 'taction' ) === 'export' ) {
+ $exportPage = SpecialPage::getTitleFor( 'ExportTranslations' );
+ $out->redirect( $exportPage->getLocalURL( $this->nondefaults ) );
+ }
+
+ $out->addModules( 'ext.translate.special.translate' );
+ $out->addJsConfigVars( 'wgTranslateLanguages', TranslateUtils::getLanguageNames( null ) );
+
+ $out->addHTML( Html::openElement( 'div', [
+ 'class' => 'grid ext-translate-container',
+ ] ) );
+
+ $out->addHTML( $this->tuxSettingsForm() );
+ $out->addHTML( $this->messageSelector() );
+
+ $table = new MessageTable( $this->getContext(), $this->group, $this->options['language'] );
+ $output = $table->fullTable();
+
+ $out->addHTML( $output );
+ $out->addHTML( Html::closeElement( 'div' ) );
+ }
+
+ protected function setup( ?string $parameters ): void {
+ $request = $this->getRequest();
+
+ $defaults = [
+ /* str */'language' => $this->getLanguage()->getCode(),
+ /* str */'group' => '!additions',
+ ];
+
+ // Dump everything here
+ $nondefaults = [];
+
+ $parameters = $parameters !== null ? array_map( 'trim', explode( ';', $parameters ) ) : [];
+ $pars = [];
+
+ foreach ( $parameters as $_ ) {
+ if ( $_ === '' ) {
+ continue;
+ }
+
+ if ( strpos( $_, '=' ) !== false ) {
+ [ $key, $value ] = array_map( 'trim', explode( '=', $_, 2 ) );
+ } else {
+ $key = 'group';
+ $value = $_;
+ }
+
+ $pars[$key] = $value;
+ }
+
+ foreach ( $defaults as $v => $t ) {
+ if ( is_bool( $t ) ) {
+ $r = isset( $pars[$v] ) ? (bool)$pars[$v] : $defaults[$v];
+ $r = $request->getBool( $v, $r );
+ } elseif ( is_int( $t ) ) {
+ $r = isset( $pars[$v] ) ? (int)$pars[$v] : $defaults[$v];
+ $r = $request->getInt( $v, $r );
+ } elseif ( is_string( $t ) ) {
+ $r = isset( $pars[$v] ) ? (string)$pars[$v] : $defaults[$v];
+ $r = $request->getText( $v, $r );
+ }
+
+ if ( !isset( $r ) ) {
+ throw new MWException( '$r was not set' );
+ }
+
+ if ( $defaults[$v] !== $r ) {
+ $nondefaults[$v] = $r;
+ }
+ }
+
+ $this->defaults = $defaults;
+ $this->nondefaults = $nondefaults;
+ Hooks::run( 'TranslateGetSpecialTranslateOptions', [ &$defaults, &$nondefaults ] );
+
+ $this->options = $nondefaults + $defaults;
+ $this->group = MessageGroups::getGroup( $this->options['group'] );
+ if ( $this->group ) {
+ $this->options['group'] = $this->group->getId();
+ } else {
+ $this->group = MessageGroups::getGroup( $this->defaults['group'] );
+ }
+
+ if ( !Language::isKnownLanguageTag( $this->options['language'] ) ) {
+ $this->options['language'] = $this->defaults['language'];
+ }
+
+ if ( MessageGroups::isDynamic( $this->group ) ) {
+ // @phan-suppress-next-line PhanUndeclaredMethod
+ $this->group->setLanguage( $this->options['language'] );
+ }
+ }
+
+ protected function tuxSettingsForm(): string {
+ $nojs = Html::errorBox(
+ $this->msg( 'tux-nojs' )->plain(),
+ '',
+ 'tux-nojs'
+ );
+
+ $attrs = [ 'class' => 'row tux-editor-header' ];
+ $selectors = $this->tuxGroupSelector() .
+ $this->tuxLanguageSelector() .
+ $this->tuxGroupDescription() .
+ $this->tuxWorkflowSelector() .
+ $this->tuxGroupWarning();
+
+ return Html::rawElement( 'div', $attrs, $selectors ) . $nojs;
+ }
+
+ protected function messageSelector(): string {
+ $output = Html::openElement( 'div', [ 'class' => 'row tux-messagetable-header hide' ] );
+ $output .= Html::openElement( 'div', [ 'class' => 'nine columns' ] );
+ $output .= Html::openElement( 'ul', [ 'class' => 'row tux-message-selector' ] );
+ $userId = $this->getUser()->getId();
+ $tabs = [
+ 'all' => '',
+ 'untranslated' => '!translated',
+ 'outdated' => 'fuzzy',
+ 'translated' => 'translated',
+ 'unproofread' => "translated|!reviewer:$userId|!last-translator:$userId",
+ ];
+
+ $params = $this->nondefaults;
+
+ foreach ( $tabs as $tab => $filter ) {
+ // Possible classes and messages, for grepping:
+ // tux-tab-all
+ // tux-tab-untranslated
+ // tux-tab-outdated
+ // tux-tab-translated
+ // tux-tab-unproofread
+ $tabClass = "tux-tab-$tab";
+ $taskParams = [ 'filter' => $filter ] + $params;
+ ksort( $taskParams );
+ $href = $this->getPageTitle()->getLocalURL( $taskParams );
+ $link = Html::element( 'a', [ 'href' => $href ], $this->msg( $tabClass )->text() );
+ $output .= Html::rawElement( 'li', [
+ 'class' => 'column ' . $tabClass,
+ 'data-filter' => $filter,
+ 'data-title' => $tab,
+ ], $link );
+ }
+
+ // Check boxes for the "more" tab.
+ // The array keys are used as the name attribute of the checkbox.
+ // in the id attribute as tux-option-KEY,
+ // and and also for the data-filter attribute.
+ // The message is shown as the check box's label.
+ $options = [
+ 'optional' => $this->msg( 'tux-message-filter-optional-messages-label' )->text(),
+ ];
+
+ $container = Html::openElement( 'ul', [ 'class' => 'column tux-message-selector' ] );
+ foreach ( $options as $optFilter => $optLabel ) {
+ $container .= Html::rawElement( 'li',
+ [ 'class' => 'column' ],
+ Xml::checkLabel(
+ $optLabel,
+ $optFilter,
+ "tux-option-$optFilter",
+ isset( $this->nondefaults[$optFilter] ),
+ [ 'data-filter' => $optFilter ]
+ )
+ );
+ }
+
+ $container .= Html::closeElement( 'ul' );
+
+ // @todo FIXME: Hard coded "ellipsis".
+ $output .= Html::openElement( 'li', [ 'class' => 'column more' ] ) .
+ '...' .
+ $container .
+ Html::closeElement( 'li' );
+
+ $output .= Html::closeElement( 'ul' );
+ $output .= Html::closeElement( 'div' ); // close nine columns
+ $output .= Html::openElement( 'div', [ 'class' => 'three columns' ] );
+ $output .= Html::rawElement(
+ 'div',
+ [ 'class' => 'tux-message-filter-wrapper' ],
+ Html::element( 'input', [
+ 'class' => 'tux-message-filter-box',
+ 'type' => 'search',
+ 'placeholder' => $this->msg( 'tux-message-filter-placeholder' )->text()
+ ] )
+ );
+
+ // close three columns and the row
+ $output .= Html::closeElement( 'div' ) . Html::closeElement( 'div' );
+
+ return $output;
+ }
+
+ protected function tuxGroupSelector(): string {
+ $groupClass = [ 'grouptitle', 'grouplink' ];
+ if ( $this->group instanceof AggregateMessageGroup ) {
+ $groupClass[] = 'tux-breadcrumb__item--aggregate';
+ }
+
+ // @todo FIXME The selector should have expanded parent-child lists
+ $output = Html::openElement( 'div', [
+ 'class' => 'eight columns tux-breadcrumb',
+ 'data-language' => $this->options['language'],
+ ] ) .
+ Html::element( 'span',
+ [ 'class' => 'grouptitle' ],
+ $this->msg( 'translate-msggroupselector-projects' )->text()
+ ) .
+ Html::element( 'span',
+ [ 'class' => 'grouptitle grouplink tux-breadcrumb__item--aggregate' ],
+ $this->msg( 'translate-msggroupselector-search-all' )->text()
+ ) .
+ Html::element( 'span',
+ [
+ 'class' => $groupClass,
+ 'data-msggroupid' => $this->group->getId(),
+ ],
+ $this->group->getLabel( $this->getContext() )
+ ) .
+ Html::closeElement( 'div' );
+
+ return $output;
+ }
+
+ protected function tuxLanguageSelector(): string {
+ global $wgTranslateDocumentationLanguageCode;
+
+ if ( $this->options['language'] === $wgTranslateDocumentationLanguageCode ) {
+ $targetLangName = $this->msg( 'translate-documentation-language' )->text();
+ $targetLanguage = $this->contentLanguage;
+ } else {
+ $targetLangName = $this->languageNameUtils->getLanguageName( $this->options['language'] );
+ $targetLanguage = $this->languageFactory->getLanguage( $this->options['language'] );
+ }
+
+ $label = Html::element( 'span', [], $this->msg( 'tux-languageselector' )->text() );
+
+ $languageIcon = Html::element(
+ 'span',
+ [ 'class' => 'ext-translate-language-icon' ]
+ );
+
+ $targetLanguageName = Html::element(
+ 'span',
+ [
+ 'class' => 'ext-translate-target-language',
+ 'dir' => $targetLanguage->getDir(),
+ 'lang' => $targetLanguage->getHtmlCode()
+ ],
+ $targetLangName
+ );
+
+ $expandIcon = Html::element(
+ 'span',
+ [ 'class' => 'ext-translate-language-selector-expand' ]
+ );
+
+ $value = Html::rawElement(
+ 'span',
+ [
+ 'class' => 'uls mw-ui-button',
+ 'tabindex' => 0,
+ 'title' => $this->msg( 'tux-select-target-language' )->text()
+ ],
+ $languageIcon . $targetLanguageName . $expandIcon
+ );
+
+ return Html::rawElement(
+ 'div',
+ [ 'class' => 'four columns ext-translate-language-selector' ],
+ "$label $value"
+ );
+ }
+
+ protected function tuxGroupDescription(): string {
+ // Initialize an empty warning box to be filled client-side.
+ return Html::rawElement(
+ 'div',
+ [ 'class' => 'twelve columns description' ],
+ $this->getGroupDescription( $this->group )
+ );
+ }
+
+ protected function getGroupDescription( MessageGroup $group ): string {
+ $description = $group->getDescription( $this->getContext() );
+ return $description === null ?
+ '' : $this->getOutput()->parseAsInterface( $description );
+ }
+
+ protected function tuxGroupWarning(): string {
+ if ( $this->options['group'] === '' ) {
+ return Html::warningBox(
+ $this->msg( 'tux-translate-page-no-such-group' )->parse(),
+ 'tux-group-warning twelve column'
+ );
+ }
+
+ // Initialize an empty warning box to be filled client-side.
+ return Html::warningBox( '', 'tux-group-warning twelve column' );
+ }
+
+ protected function tuxWorkflowSelector(): string {
+ return Html::element( 'div', [ 'class' => 'tux-workflow twelve columns' ] );
+ }
+
+ /**
+ * Adds the task-based tabs on Special:Translate and few other special pages.
+ * Hook: SkinTemplateNavigation::Universal
+ */
+ public static function tabify( Skin $skin, array &$tabs ): bool {
+ $title = $skin->getTitle();
+ if ( !$title->isSpecialPage() ) {
+ return true;
+ }
+ [ $alias, $sub ] = MediaWikiServices::getInstance()
+ ->getSpecialPageFactory()->resolveAlias( $title->getText() );
+
+ $pagesInGroup = [ 'Translate', 'LanguageStats', 'MessageGroupStats', 'ExportTranslations' ];
+ if ( !in_array( $alias, $pagesInGroup, true ) ) {
+ return true;
+ }
+
+ // Extract subpage syntax, otherwise the values are not passed forward
+ $params = [];
+ if ( $sub !== null && trim( $sub ) !== '' ) {
+ if ( $alias === 'Translate' || $alias === 'MessageGroupStats' ) {
+ $params['group'] = $sub;
+ } elseif ( $alias === 'LanguageStats' ) {
+ // Breaks if additional parameters besides language are code provided
+ $params['language'] = $sub;
+ }
+ }
+
+ $request = $skin->getRequest();
+ // However, query string params take precedence
+ $params['language'] = $request->getVal( 'language' );
+ $params['group'] = $request->getVal( 'group' );
+
+ $translate = SpecialPage::getTitleFor( 'Translate' );
+ $languagestats = SpecialPage::getTitleFor( 'LanguageStats' );
+ $messagegroupstats = SpecialPage::getTitleFor( 'MessageGroupStats' );
+
+ // Clear the special page tab that might be there already
+ $tabs['namespaces'] = [];
+
+ $tabs['namespaces']['translate'] = [
+ 'text' => wfMessage( 'translate-taction-translate' )->text(),
+ 'href' => $translate->getLocalURL( $params ),
+ 'class' => 'tux-tab',
+ ];
+
+ if ( $alias === 'Translate' ) {
+ $tabs['namespaces']['translate']['class'] .= ' selected';
+ }
+
+ $tabs['views']['lstats'] = [
+ 'text' => wfMessage( 'translate-taction-lstats' )->text(),
+ 'href' => $languagestats->getLocalURL( $params ),
+ 'class' => 'tux-tab',
+ ];
+ if ( $alias === 'LanguageStats' ) {
+ $tabs['views']['lstats']['class'] .= ' selected';
+ }
+
+ $tabs['views']['mstats'] = [
+ 'text' => wfMessage( 'translate-taction-mstats' )->text(),
+ 'href' => $messagegroupstats->getLocalURL( $params ),
+ 'class' => 'tux-tab',
+ ];
+
+ if ( $alias === 'MessageGroupStats' ) {
+ $tabs['views']['mstats']['class'] .= ' selected';
+ }
+
+ $tabs['views']['export'] = [
+ 'text' => wfMessage( 'translate-taction-export' )->text(),
+ 'href' => SpecialPage::getTitleFor( 'ExportTranslations' )->getLocalURL( $params ),
+ 'class' => 'tux-tab',
+ ];
+
+ return true;
+ }
+}
diff --git a/Translate/src/TranslatorInterface/TranslationEntitySearchActionApi.php b/Translate/src/TranslatorInterface/TranslationEntitySearchActionApi.php
new file mode 100644
index 00000000..d9e24c20
--- /dev/null
+++ b/Translate/src/TranslatorInterface/TranslationEntitySearchActionApi.php
@@ -0,0 +1,72 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface;
+
+use ApiBase;
+use ApiMain;
+use Wikimedia\ParamValidator\ParamValidator;
+use Wikimedia\ParamValidator\TypeDef\NumericDef;
+
+/**
+ * Action API module for searching message groups and message keys.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+class TranslationEntitySearchActionApi extends ApiBase {
+ /** @var EntitySearch */
+ private $entitySearch;
+ private const GROUPS = 'groups';
+ private const MESSAGES = 'messages';
+
+ public function __construct( ApiMain $mainModule, $moduleName, EntitySearch $entitySearch ) {
+ parent::__construct( $mainModule, $moduleName );
+ $this->entitySearch = $entitySearch;
+ }
+
+ public function execute() {
+ $query = $this->getParameter( 'query' );
+ $maxResults = $this->getParameter( 'limit' );
+ $entityTypes = $this->getParameter( 'entitytype' );
+
+ $searchResults = [];
+ $remainingResults = $maxResults;
+
+ if ( in_array( self::GROUPS, $entityTypes ) ) {
+ $searchResults[ self::GROUPS ] = $this->entitySearch
+ ->searchStaticMessageGroups( $query, $maxResults );
+ $remainingResults = $maxResults - count( $searchResults[ self::GROUPS ] );
+ }
+
+ if ( in_array( self::MESSAGES, $entityTypes ) && $remainingResults > 0 ) {
+ $searchResults[ self::MESSAGES ] = $this->entitySearch
+ ->searchMessages( $query, $remainingResults );
+ }
+
+ $this->getResult()->addValue( null, $this->getModuleName(), $searchResults );
+ }
+
+ protected function getAllowedParams(): array {
+ return [
+ 'entitytype' => [
+ ParamValidator::PARAM_TYPE => [ self::GROUPS, self::MESSAGES ],
+ ParamValidator::PARAM_ISMULTI => true,
+ ParamValidator::PARAM_DEFAULT => implode( '|', [ self::GROUPS, self::MESSAGES ] )
+ ],
+ 'query' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_REQUIRED => true
+ ],
+ 'limit' => [
+ ParamValidator::PARAM_TYPE => 'limit',
+ ParamValidator::PARAM_DEFAULT => 10,
+ NumericDef::PARAM_MAX => ApiBase::LIMIT_SML1
+ ],
+ ];
+ }
+
+ public function isInternal(): bool {
+ // Temporarily until stable
+ return true;
+ }
+}
diff --git a/Translate/src/TranslatorInterface/TranslationHelperException.php b/Translate/src/TranslatorInterface/TranslationHelperException.php
new file mode 100644
index 00000000..bf395b37
--- /dev/null
+++ b/Translate/src/TranslatorInterface/TranslationHelperException.php
@@ -0,0 +1,17 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface;
+
+use MWException;
+
+/**
+ * Translation helpers can throw this exception when they cannot do
+ * anything useful with the current message. This helps in debugging
+ * why some fields are not shown.
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+class TranslationHelperException extends MWException {
+}
diff --git a/Translate/src/TranslatorInterface/TranslationsSpecialPage.php b/Translate/src/TranslatorInterface/TranslationsSpecialPage.php
new file mode 100644
index 00000000..e9d31375
--- /dev/null
+++ b/Translate/src/TranslatorInterface/TranslationsSpecialPage.php
@@ -0,0 +1,279 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface;
+
+use DerivativeContext;
+use Html;
+use HtmlArmor;
+use HTMLForm;
+use Language;
+use MediaWiki\Languages\LanguageNameUtils;
+use MessageHandle;
+use SpecialAllPages;
+use Title;
+use TranslateUtils;
+use Xml;
+
+/**
+ * Implements a special page which shows all translations for a message.
+ * Bits taken from SpecialPrefixindex.php and TranslateTasks.php
+ *
+ * @author Siebrand Mazeland
+ * @author Niklas Laxstörm
+ * @license GPL-2.0-or-later
+ * @ingroup SpecialPage TranslateSpecialPage
+ */
+class TranslationsSpecialPage extends SpecialAllPages {
+ /** @var Language */
+ private $contentLanguage;
+ /** @var LanguageNameUtils */
+ private $languageNameUtils;
+
+ public function __construct( Language $contentLanguage, LanguageNameUtils $languageNameUtils ) {
+ parent::__construct();
+ $this->mName = 'Translations';
+ $this->contentLanguage = $contentLanguage;
+ $this->languageNameUtils = $languageNameUtils;
+ }
+
+ protected function getGroupName() {
+ return 'translation';
+ }
+
+ public function getDescription() {
+ return $this->msg( 'translations' )->text();
+ }
+
+ /**
+ * Entry point : initialise variables and call subfunctions.
+ * @param string|null $par Message key. Becomes "MediaWiki:Allmessages" when called like
+ * Special:Translations/MediaWiki:Allmessages (default null)
+ */
+ public function execute( $par ) {
+ $this->setHeaders();
+ $this->outputHeader();
+
+ $out = $this->getOutput();
+ $out->addModuleStyles( 'ext.translate.specialpages.styles' );
+
+ $par = (string)$par;
+
+ if ( $this->including() ) {
+ $title = Title::newFromText( $par );
+ if ( !$title ) {
+ $out->addWikiMsg( 'translate-translations-including-no-param' );
+ } else {
+ $this->showTranslations( $title );
+ }
+
+ return;
+ }
+
+ /**
+ * GET values.
+ */
+ $request = $this->getRequest();
+ $message = $request->getText( 'message' );
+ $namespace = $request->getInt( 'namespace', NS_MAIN );
+
+ if ( $message !== '' ) {
+ $title = Title::newFromText( $message, $namespace );
+ } else {
+ $title = Title::newFromText( $par, $namespace );
+ }
+
+ $out->addHelpLink(
+ 'Help:Extension:Translate/Statistics_and_reporting#Translations_in_all_languages'
+ );
+
+ if ( !$title ) {
+ $title = Title::makeTitle( NS_MEDIAWIKI, '' );
+ $this->namespaceMessageForm( $title );
+ } else {
+ $this->namespaceMessageForm( $title );
+ $out->addHTML( '<br />' );
+ $this->showTranslations( $title );
+ }
+ }
+
+ /**
+ * Message input fieldset
+ *
+ * @param Title|null $title (default: null)
+ */
+ protected function namespaceMessageForm( Title $title = null ): void {
+ $options = [];
+
+ foreach ( $this->getSortedNamespaces() as $text => $index ) {
+ $options[ $text ] = $index;
+ }
+
+ $formDescriptor = [
+ 'textbox' => [
+ 'type' => 'text',
+ 'name' => 'message',
+ 'id' => 'message',
+ 'label-message' => 'translate-translations-messagename',
+ 'size' => 30,
+ 'default' => $title->getText(),
+ ],
+ 'selector' => [
+ 'type' => 'select',
+ 'name' => 'namespace',
+ 'id' => 'namespace',
+ 'label-message' => 'translate-translations-project',
+ 'options' => $options,
+ 'default' => $title->getNamespace(),
+ ]
+ ];
+
+ $context = new DerivativeContext( $this->getContext() );
+ $context->setTitle( $this->getPageTitle() ); // Remove subpage
+
+ HTMLForm::factory( 'ooui', $formDescriptor, $context )
+ ->setMethod( 'get' )
+ ->setSubmitTextMsg( 'allpagessubmit' )
+ ->setWrapperLegendMsg( 'translate-translations-fieldset-title' )
+ ->prepareForm()
+ ->displayForm( false );
+ }
+
+ /**
+ * Returns sorted array of namespaces.
+ *
+ * @return array ( string => int )
+ */
+ public function getSortedNamespaces(): array {
+ global $wgTranslateMessageNamespaces;
+
+ $nslist = [];
+ foreach ( $wgTranslateMessageNamespaces as $ns ) {
+ $nslist[$this->contentLanguage->getFormattedNsText( $ns )] = $ns;
+ }
+ ksort( $nslist );
+
+ return $nslist;
+ }
+
+ /**
+ * Builds a table with all translations of $title.
+ *
+ * @param Title $title (default: null)
+ */
+ protected function showTranslations( Title $title ): void {
+ $handle = new MessageHandle( $title );
+ $namespace = $title->getNamespace();
+ $message = $handle->getKey();
+
+ if ( !$handle->isValid() ) {
+ $this->getOutput()->addWikiMsg( 'translate-translations-no-message', $title->getPrefixedText() );
+
+ return;
+ }
+
+ $dbr = wfGetDB( DB_REPLICA );
+
+ $res = $dbr->select( 'page',
+ [ 'page_namespace', 'page_title' ],
+ [
+ 'page_namespace' => $namespace,
+ 'page_title ' . $dbr->buildLike( "$message/", $dbr->anyString() ),
+ ],
+ __METHOD__,
+ [ 'ORDER BY' => 'page_title', ]
+ );
+
+ if ( !$res->numRows() ) {
+ $this->getOutput()->addWikiMsg(
+ 'translate-translations-no-message',
+ $title->getPrefixedText()
+ );
+
+ return;
+ } else {
+ $this->getOutput()->addWikiMsg(
+ 'translate-translations-count',
+ $this->getLanguage()->formatNum( $res->numRows() )
+ );
+ }
+
+ // Normal output.
+ $titles = [];
+
+ foreach ( $res as $s ) {
+ $titles[] = $s->page_title;
+ }
+
+ $pageInfo = TranslateUtils::getContents( $titles, $namespace );
+
+ $tableheader = Xml::openElement( 'table', [
+ 'class' => 'mw-sp-translate-table sortable wikitable'
+ ] );
+
+ $tableheader .= Xml::openElement( 'tr' );
+ $tableheader .= Xml::element( 'th', null, $this->msg( 'allmessagesname' )->text() );
+ $tableheader .= Xml::element( 'th', null, $this->msg( 'allmessagescurrent' )->text() );
+ $tableheader .= Xml::closeElement( 'tr' );
+
+ // Adapted version of TranslateUtils:makeListing() by Nikerabbit.
+ $out = $tableheader;
+
+ $historyText = '&#160;<sup>' .
+ $this->msg( 'translate-translations-history-short' )->escaped() .
+ '</sup>&#160;';
+ $separator = $this->msg( 'word-separator' )->plain();
+
+ $tools = [];
+ foreach ( $res as $s ) {
+ $key = $s->page_title;
+ $tTitle = Title::makeTitle( $s->page_namespace, $key );
+ $tHandle = new MessageHandle( $tTitle );
+
+ $code = $tHandle->getCode();
+
+ $text = TranslateUtils::getLanguageName( $code, $this->getLanguage()->getCode() );
+ $text .= $separator;
+ $text .= $this->msg( 'parentheses' )->params( $code )->plain();
+ $tools['edit'] = Html::element(
+ 'a',
+ [ 'href' => TranslateUtils::getEditorUrl( $tHandle ) ],
+ $text
+ );
+
+ $tools['history'] = $this->getLinkRenderer()->makeLink(
+ $tTitle,
+ new HtmlArmor( $historyText ),
+ [
+ 'title' => $this->msg( 'history-title', $tTitle->getPrefixedDBkey() )->text()
+ ],
+ [ 'action' => 'history' ]
+ );
+
+ $class = '';
+ if ( MessageHandle::hasFuzzyString( $pageInfo[$key][0] ) || $tHandle->isFuzzy() ) {
+ $class = 'mw-sp-translate-fuzzy';
+ }
+
+ $languageAttributes = [];
+ if ( $this->languageNameUtils->isKnownLanguageTag( $code ) ) {
+ $language = $tHandle->getEffectiveLanguage();
+ $languageAttributes = [
+ 'lang' => $language->getHtmlCode(),
+ 'dir' => $language->getDir(),
+ ];
+ }
+
+ $formattedContent = TranslateUtils::convertWhiteSpaceToHTML( $pageInfo[$key][0] );
+
+ $leftColumn = $tools['history'] . $tools['edit'];
+ $out .= Xml::tags( 'tr', [ 'class' => $class ],
+ Xml::tags( 'td', null, $leftColumn ) .
+ Xml::tags( 'td', $languageAttributes, $formattedContent )
+ );
+ }
+
+ $out .= Xml::closeElement( 'table' );
+ $this->getOutput()->addHTML( $out );
+ }
+}
diff --git a/Translate/src/TranslatorSandbox/ManageTranslatorSandboxSpecialPage.php b/Translate/src/TranslatorSandbox/ManageTranslatorSandboxSpecialPage.php
new file mode 100644
index 00000000..1cac0bd9
--- /dev/null
+++ b/Translate/src/TranslatorSandbox/ManageTranslatorSandboxSpecialPage.php
@@ -0,0 +1,223 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorSandbox;
+
+use FormatJson;
+use Html;
+use MediaWiki\Config\ServiceOptions;
+use MediaWiki\User\UserOptionsLookup;
+use MWTimestamp;
+use Sanitizer;
+use SpecialPage;
+use TranslateSandbox;
+use User;
+
+/**
+ * Special page for managing sandboxed users.
+ *
+ * @author Niklas Laxström
+ * @author Amir E. Aharoni
+ * @license GPL-2.0-or-later
+ * @ingroup SpecialPage TranslateSpecialPage
+ */
+class ManageTranslatorSandboxSpecialPage extends SpecialPage {
+ /** @var TranslationStashReader */
+ private $stash;
+ /** @var UserOptionsLookup */
+ private $userOptionsLookup;
+
+ public const CONSTRUCTOR_OPTIONS = [
+ 'TranslateUseSandbox',
+ ];
+
+ public function __construct(
+ TranslationStashReader $stash,
+ UserOptionsLookup $userOptionsLookup,
+ ServiceOptions $options
+ ) {
+ $this->stash = $stash;
+ $this->userOptionsLookup = $userOptionsLookup;
+
+ parent::__construct(
+ 'ManageTranslatorSandbox',
+ 'translate-sandboxmanage',
+ $options->get( 'TranslateUseSandbox' )
+ );
+ }
+
+ public function doesWrites() {
+ return true;
+ }
+
+ protected function getGroupName() {
+ return 'translation';
+ }
+
+ public function execute( $params ) {
+ $this->setHeaders();
+ $this->checkPermissions();
+ $out = $this->getOutput();
+ $out->addModuleStyles(
+ [
+ 'ext.translate.special.managetranslatorsandbox.styles',
+ 'mediawiki.ui.button',
+ 'jquery.uls.grid',
+ ]
+ );
+ $out->addModules( 'ext.translate.special.managetranslatorsandbox' );
+
+ $this->showPage();
+ }
+
+ /** Generates the whole page html and appends it to output */
+ private function showPage(): void {
+ $out = $this->getOutput();
+
+ $nojs = Html::errorBox(
+ $this->msg( 'tux-nojs' )->plain(),
+ '',
+ 'tux-nojs'
+ );
+ $out->addHTML( $nojs );
+
+ $out->addHTML(
+ <<<HTML
+<div class="grid tsb-container">
+ <div class="row">
+ <div class="nine columns pane filter">{$this->makeFilter()}</div>
+ <div class="three columns pane search">{$this->makeSearchBox()}</div>
+ </div>
+ <div class="row tsb-body">
+ <div class="four columns pane requests">
+ {$this->makeList()}
+ <div class="request-footer">
+ <span class="selected-counter">
+ {$this->msg( 'tsb-selected-count' )->numParams( 0 )->escaped()}
+ </span>
+ &nbsp;
+ <a href="#" class="older-requests-indicator"></a>
+ </div>
+ </div>
+ <div class="eight columns pane details"></div>
+ </div>
+</div>
+HTML
+ );
+ }
+
+ private function makeFilter(): string {
+ return $this->msg( 'tsb-filter-pending' )->escaped();
+ }
+
+ private function makeSearchBox(): string {
+ return <<<HTML
+<input class="request-filter-box right"
+ placeholder="{$this->msg( 'tsb-search-requests' )->escaped()}" type="search" />
+HTML;
+ }
+
+ private function makeList(): string {
+ $items = [];
+ $requests = [];
+ $users = TranslateSandbox::getUsers();
+
+ /** @var User $user */
+ foreach ( $users as $user ) {
+ $reminders = $this->userOptionsLookup->getOption( $user, 'translate-sandbox-reminders' );
+ $reminders = $reminders ? explode( '|', $reminders ) : [];
+ $remindersCount = count( $reminders );
+ if ( $remindersCount ) {
+ $lastReminderTimestamp = new MWTimestamp( end( $reminders ) );
+ $lastReminderAgo = htmlspecialchars(
+ $this->getHumanTimestamp( $lastReminderTimestamp )
+ );
+ } else {
+ $lastReminderAgo = '';
+ }
+
+ $requests[] = [
+ 'username' => $user->getName(),
+ 'email' => $user->getEmail(),
+ 'gender' => $this->userOptionsLookup->getOption( $user, 'gender' ),
+ 'registrationdate' => $user->getRegistration(),
+ 'translations' => count( $this->stash->getTranslations( $user ) ),
+ 'languagepreferences' => FormatJson::decode(
+ $this->userOptionsLookup->getOption( $user, 'translate-sandbox' )
+ ),
+ 'userid' => $user->getId(),
+ 'reminderscount' => $remindersCount,
+ 'lastreminder' => $lastReminderAgo,
+ ];
+ }
+
+ // Sort the requests based on translations and registration date
+ usort( $requests, [ $this, 'translatorRequestSort' ] );
+
+ foreach ( $requests as $request ) {
+ $items[] = $this->makeRequestItem( $request );
+ }
+
+ $requestsList = implode( "\n", $items );
+
+ return <<<HTML
+<div class="row request-header">
+ <div class="four columns">
+ <button class="language-selector unselected">
+ {$this->msg( 'tsb-all-languages-button-label' )->escaped()}
+ </button>
+ </div>
+ <div class="five columns request-count"></div>
+ <div class="three columns text-center">
+ <input class="request-selector-all" name="request" type="checkbox" />
+ </div>
+</div>
+<div class="requests-list">
+ {$requestsList}
+</div>
+HTML;
+ }
+
+ private function makeRequestItem( array $request ): string {
+ $requestdataEnc = htmlspecialchars( FormatJson::encode( $request ) );
+ $nameEnc = htmlspecialchars( $request['username'] );
+ $nameEncForId =
+ htmlspecialchars(
+ Sanitizer::escapeIdForAttribute( 'tsb-request-' . $request['username'] )
+ );
+ $emailEnc = htmlspecialchars( $request['email'] );
+ $countEnc = htmlspecialchars( (string)$request['translations'] );
+ $timestamp = new MWTimestamp( $request['registrationdate'] );
+ $agoEnc = htmlspecialchars( $this->getHumanTimestamp( $timestamp ) );
+
+ return <<<HTML
+<div class="row request" data-data="$requestdataEnc" id="$nameEncForId">
+ <div class="two columns amount">
+ <div class="translation-count">$countEnc</div>
+ </div>
+ <div class="seven columns request-info">
+ <div class="row username">$nameEnc</div>
+ <div class="row email" dir="ltr">$emailEnc</div>
+ </div>
+ <div class="three columns approval text-center">
+ <input class="row request-selector" name="request" type="checkbox" />
+ <div class="row signup-age">$agoEnc</div>
+ </div>
+</div>
+HTML;
+ }
+
+ private function getHumanTimestamp( MWTimestamp $ts ): string {
+ return $this->getLanguage()->getHumanTimestamp( $ts, null, $this->getUser() );
+ }
+
+ /**
+ * Sorts groups by descending order of number of translations,
+ * registration date and username
+ */
+ private function translatorRequestSort( array $a, array $b ): int {
+ return $b['translations'] <=> $a['translations']
+ ?: $b['registrationdate'] <=> $a['registrationdate']
+ ?: strnatcasecmp( $a['username'], $b['username'] );
+ }
+}
diff --git a/Translate/src/TranslatorSandbox/StashedTranslation.php b/Translate/src/TranslatorSandbox/StashedTranslation.php
new file mode 100644
index 00000000..b9b3104a
--- /dev/null
+++ b/Translate/src/TranslatorSandbox/StashedTranslation.php
@@ -0,0 +1,48 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorSandbox;
+
+use Title;
+use User;
+
+/**
+ * Value object for stashed translation which you can construct.
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2013.06 (namespaced in 2020.11)
+ */
+class StashedTranslation {
+ /** @var User */
+ protected $user;
+ /** @var Title */
+ protected $title;
+ /** @var string */
+ protected $value;
+ /** @var array|null */
+ protected $metadata;
+
+ public function __construct( User $user, Title $title, string $value, array $metadata = null ) {
+ $this->user = $user;
+ $this->title = $title;
+ $this->value = $value;
+ $this->metadata = $metadata;
+ }
+
+ public function getUser(): User {
+ return $this->user;
+ }
+
+ public function getTitle(): Title {
+ return $this->title;
+ }
+
+ public function getValue(): string {
+ return $this->value;
+ }
+
+ public function getMetadata(): ?array {
+ return $this->metadata;
+ }
+}
diff --git a/Translate/src/TranslatorSandbox/TranslationStashActionApi.php b/Translate/src/TranslatorSandbox/TranslationStashActionApi.php
new file mode 100644
index 00000000..4aa4418c
--- /dev/null
+++ b/Translate/src/TranslatorSandbox/TranslationStashActionApi.php
@@ -0,0 +1,161 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorSandbox;
+
+use ApiBase;
+use ApiMain;
+use FormatJson;
+use MediaWiki\User\UserFactory;
+use MessageGroups;
+use MessageHandle;
+use MessageIndex;
+use Title;
+use Wikimedia\ParamValidator\ParamValidator;
+use Wikimedia\Rdbms\ILoadBalancer;
+
+/**
+ * WebAPI module for storing translations for users who are in a sandbox.
+ * Access is controlled by hooks in TranslateSandbox class.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2013.06
+ */
+class TranslationStashActionApi extends ApiBase {
+ /** @var ILoadBalancer */
+ private $loadBalancer;
+ /** @var UserFactory */
+ private $userFactory;
+
+ public function __construct(
+ ApiMain $mainModule,
+ string $moduleName,
+ ILoadBalancer $loadBalancer,
+ UserFactory $userFactory
+ ) {
+ parent::__construct( $mainModule, $moduleName );
+ $this->loadBalancer = $loadBalancer;
+ $this->userFactory = $userFactory;
+ }
+
+ public function execute(): void {
+ $params = $this->extractRequestParams();
+
+ // The user we are operating on, not necessarly the user making the request
+ $user = $this->getUser();
+
+ if ( isset( $params['username'] ) ) {
+ if ( $this->getUser()->isAllowed( 'translate-sandboxmanage' ) ) {
+ $user = $this->userFactory->newFromName( $params['username'] );
+ if ( !$user ) {
+ $this->dieWithError( [ 'apierror-badparameter', 'username' ], 'invalidparam' );
+ }
+ } else {
+ $this->dieWithError( [ 'apierror-badparameter', 'username' ], 'invalidparam' );
+ }
+ }
+
+ $stash = new TranslationStashStorage( $this->loadBalancer->getConnection( DB_PRIMARY ) );
+ $action = $params['subaction'];
+
+ if ( $action === 'add' ) {
+ if ( !isset( $params['title'] ) ) {
+ $this->dieWithError( [ 'apierror-missingparam', 'title' ] );
+ }
+ if ( !isset( $params['translation'] ) ) {
+ $this->dieWithError( [ 'apierror-missingparam', 'translation' ] );
+ }
+
+ // @todo: Return value of Title::newFromText not checked
+ $translation = new StashedTranslation(
+ $user,
+ Title::newFromText( $params['title'] ),
+ $params['translation'],
+ FormatJson::decode( $params['metadata'], true )
+ );
+ $stash->addTranslation( $translation );
+ }
+
+ $output = [];
+ if ( $action === 'query' ) {
+ $output['translations'] = [];
+
+ $translations = $stash->getTranslations( $user );
+ foreach ( $translations as $translation ) {
+ $output['translations'][] = $this->formatTranslation( $translation );
+ }
+ }
+
+ // If we got this far, nothing has failed
+ $output['result'] = 'ok';
+ $this->getResult()->addValue( null, $this->getModuleName(), $output );
+ }
+
+ private function formatTranslation( StashedTranslation $translation ): array {
+ $title = $translation->getTitle();
+ $handle = new MessageHandle( $title );
+
+ // Prepare for the worst
+ $definition = '';
+ $comparison = '';
+ if ( $handle->isValid() ) {
+ $groupId = MessageIndex::getPrimaryGroupId( $handle );
+ $group = MessageGroups::getGroup( $groupId );
+
+ $key = $handle->getKey();
+
+ $definition = $group->getMessage( $key, $group->getSourceLanguage() );
+ $comparison = $group->getMessage( $key, $handle->getCode() );
+ }
+
+ return [
+ 'title' => $title->getPrefixedText(),
+ 'definition' => $definition,
+ 'translation' => $translation->getValue(),
+ 'comparison' => $comparison,
+ 'metadata' => $translation->getMetadata(),
+ ];
+ }
+
+ public function isWriteMode(): bool {
+ return true;
+ }
+
+ public function needsToken(): string {
+ return 'csrf';
+ }
+
+ protected function getAllowedParams(): array {
+ return [
+ 'subaction' => [
+ ParamValidator::PARAM_TYPE => [ 'add', 'query' ],
+ ParamValidator::PARAM_REQUIRED => true,
+ ],
+ 'title' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ],
+ 'translation' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ],
+ 'metadata' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ],
+ 'token' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_REQUIRED => true,
+ ],
+ 'username' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ],
+ ];
+ }
+
+ protected function getExamplesMessages(): array {
+ return [
+ 'action=translationstash&subaction=add&title=MediaWiki:Jan/fi&translation=tammikuu&metadata={}'
+ => 'apihelp-translationstash-example-1',
+ 'action=translationstash&subaction=query'
+ => 'apihelp-translationstash-example-2',
+ ];
+ }
+}
diff --git a/Translate/src/TranslatorSandbox/TranslationStashReader.php b/Translate/src/TranslatorSandbox/TranslationStashReader.php
new file mode 100644
index 00000000..9ad6a0f6
--- /dev/null
+++ b/Translate/src/TranslatorSandbox/TranslationStashReader.php
@@ -0,0 +1,20 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorSandbox;
+
+use User;
+
+/*
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2020.11
+ */
+interface TranslationStashReader {
+ /**
+ * Gets all stashed translations for the given user.
+ *
+ * @return StashedTranslation[]
+ */
+ public function getTranslations( User $user ): array;
+}
diff --git a/Translate/src/TranslatorSandbox/TranslationStashSpecialPage.php b/Translate/src/TranslatorSandbox/TranslationStashSpecialPage.php
new file mode 100644
index 00000000..712beb39
--- /dev/null
+++ b/Translate/src/TranslatorSandbox/TranslationStashSpecialPage.php
@@ -0,0 +1,223 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorSandbox;
+
+use FormatJson;
+use Html;
+use Language;
+use MediaWiki\Config\ServiceOptions;
+use MediaWiki\Languages\LanguageFactory;
+use MediaWiki\Languages\LanguageNameUtils;
+use MediaWiki\User\UserOptionsLookup;
+use SpecialPage;
+use Title;
+use TranslateSandbox;
+use TranslateUtils;
+
+/**
+ * Special page for new users to translate example messages.
+ *
+ * @author Santhosh Thottingal
+ * @license GPL-2.0-or-later
+ * @ingroup SpecialPage TranslateSpecialPage
+ */
+class TranslationStashSpecialPage extends SpecialPage {
+ /** @var TranslationStashReader */
+ private $stash;
+ /** @var ServiceOptions */
+ private $options;
+ /** @var LanguageNameUtils */
+ private $languageNameUtils;
+ /** @var UserOptionsLookup */
+ private $userOptionsLookup;
+ /** @var LanguageFactory */
+ private $languageFactory;
+
+ public const CONSTRUCTOR_OPTIONS = [
+ 'TranslateSandboxLimit',
+ ];
+
+ public function __construct(
+ LanguageNameUtils $languageNameUtils,
+ TranslationStashReader $stash,
+ UserOptionsLookup $userOptionsLookup,
+ LanguageFactory $languageFactory,
+ ServiceOptions $options
+ ) {
+ parent::__construct( 'TranslationStash' );
+ $this->languageNameUtils = $languageNameUtils;
+ $this->stash = $stash;
+ $this->userOptionsLookup = $userOptionsLookup;
+ $this->languageFactory = $languageFactory;
+ $this->options = $options;
+ }
+
+ public function doesWrites() {
+ return true;
+ }
+
+ protected function getGroupName() {
+ return 'translation';
+ }
+
+ public function execute( $params ) {
+ $limit = $this->options->get( 'TranslateSandboxLimit' );
+
+ $this->setHeaders();
+ $out = $this->getOutput();
+
+ if ( !$this->hasPermissionToUse() ) {
+ $out->redirect( Title::newMainPage()->getLocalURL() );
+
+ return;
+ }
+
+ $out->addJsConfigVars( 'wgTranslateSandboxLimit', $limit );
+ $out->addModules( 'ext.translate.specialTranslationStash' );
+ $out->addModuleStyles( 'mediawiki.ui.button' );
+ $this->showPage();
+ }
+
+ /** Checks that the user is in the sandbox. */
+ private function hasPermissionToUse(): bool {
+ return TranslateSandbox::isSandboxed( $this->getUser() );
+ }
+
+ /** Generates the whole page html and appends it to output */
+ private function showPage(): void {
+ $out = $this->getOutput();
+ $user = $this->getUser();
+
+ $count = count( $this->stash->getTranslations( $user ) );
+ if ( $count === 0 ) {
+ $progress = $this->msg( 'translate-translationstash-initialtranslation' )->parse();
+ } else {
+ $progress = $this->msg( 'translate-translationstash-translations' )
+ ->numParams( $count )
+ ->parse();
+ }
+
+ $out->addHTML(
+ <<<HTML
+<div class="grid">
+ <div class="row translate-welcome-header">
+ <h1>
+ {$this->msg( 'translate-translationstash-welcome', $user->getName() )->parse()}
+ </h1>
+ <p>
+ {$this->msg( 'translate-translationstash-welcome-note' )->parse()}
+ </p>
+ </div>
+ <div class="row translate-stash-control">
+ <div class="six columns stash-stats">
+ {$progress}
+ </div>
+ <div class="six columns ext-translate-language-selector">
+ {$this->tuxLanguageSelector()}
+ </div>
+ </div>
+ {$this->getMessageTable()}
+ <div class="row limit-reached hide"></div>
+</div>
+HTML
+ );
+ }
+
+ private function getMessageTable(): string {
+ $sourceLang = $this->getSourceLanguage();
+ $targetLang = $this->getTargetLanguage();
+
+ return Html::element(
+ 'div',
+ [
+ 'class' => 'row tux-messagelist',
+ 'data-sourcelangcode' => $sourceLang->getCode(),
+ 'data-sourcelangdir' => $sourceLang->getDir(),
+ 'data-targetlangcode' => $targetLang->getCode(),
+ 'data-targetlangdir' => $targetLang->getDir(),
+ ]
+ );
+ }
+
+ private function tuxLanguageSelector(): string {
+ // The name will be displayed in the UI language,
+ // so use for lang and dir
+ $language = $this->getTargetLanguage();
+ $targetLangName = $this->languageNameUtils->getLanguageName( $language->getCode() );
+
+ $label = Html::element( 'span', [], $this->msg( 'tux-languageselector' )->text() );
+
+ $languageIcon = Html::element(
+ 'span',
+ [ 'class' => 'ext-translate-language-icon' ]
+ );
+
+ $targetLanguageName = Html::element(
+ 'span',
+ [
+ 'class' => 'ext-translate-target-language',
+ 'dir' => $language->getDir(),
+ 'lang' => $language->getHtmlCode()
+ ],
+ $targetLangName
+ );
+
+ $expandIcon = Html::element(
+ 'span',
+ [ 'class' => 'ext-translate-language-selector-expand' ]
+ );
+
+ $value = Html::rawElement(
+ 'span',
+ [
+ 'class' => 'uls mw-ui-button',
+ 'tabindex' => 0,
+ 'title' => $this->msg( 'tux-select-target-language' )->text()
+ ],
+ $languageIcon . $targetLanguageName . $expandIcon
+ );
+
+ return Html::rawElement(
+ 'div',
+ [ 'class' => 'columns ext-translate-language-selector' ],
+ "$label $value"
+ );
+ }
+
+ /** Returns the source language for messages. */
+ protected function getSourceLanguage(): Language {
+ // Bad
+ return $this->languageFactory->getLanguage( 'en' );
+ }
+
+ /** Returns the default target language for messages. */
+ private function getTargetLanguage(): Language {
+ $ui = $this->getLanguage();
+ $source = $this->getSourceLanguage();
+ if ( !$ui->equals( $source ) ) {
+ return $ui;
+ }
+
+ $options = FormatJson::decode(
+ $this->userOptionsLookup->getOption( $this->getUser(), 'translate-sandbox' ),
+ true
+ );
+ $supported = TranslateUtils::getLanguageNames( 'en' );
+
+ if ( isset( $options['languages'] ) ) {
+ foreach ( $options['languages'] as $code ) {
+ if ( !isset( $supported[$code] ) ) {
+ continue;
+ }
+
+ if ( $code !== $source->getCode() ) {
+ return $this->languageFactory->getLanguage( $code );
+ }
+ }
+ }
+
+ // User has not chosen any valid language. Pick the source.
+ return $this->languageFactory->getLanguage( $source->getCode() );
+ }
+}
diff --git a/Translate/src/TranslatorSandbox/TranslationStashStorage.php b/Translate/src/TranslatorSandbox/TranslationStashStorage.php
new file mode 100644
index 00000000..e8a086a3
--- /dev/null
+++ b/Translate/src/TranslatorSandbox/TranslationStashStorage.php
@@ -0,0 +1,67 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorSandbox;
+
+use Title;
+use User;
+use Wikimedia\Rdbms\IDatabase;
+
+/**
+ * Storage class for stashed translations. This one uses sql tables as storage.
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2013.06 (namespaced in 2020.11)
+ */
+class TranslationStashStorage implements TranslationStashReader, TranslationStashWriter {
+ /** @var IDatabase */
+ protected $db;
+ /** @var string */
+ protected $dbTable;
+
+ public function __construct( IDatabase $db, string $table = 'translate_stash' ) {
+ $this->db = $db;
+ $this->dbTable = $table;
+ }
+
+ public function getTranslations( User $user ): array {
+ $conds = [ 'ts_user' => $user->getId() ];
+ $fields = [ 'ts_namespace', 'ts_title', 'ts_value', 'ts_metadata' ];
+
+ $res = $this->db->select( $this->dbTable, $fields, $conds, __METHOD__ );
+
+ $objects = [];
+ foreach ( $res as $row ) {
+ $objects[] = new StashedTranslation(
+ $user,
+ Title::makeTitle( (int)$row->ts_namespace, $row->ts_title ),
+ $row->ts_value,
+ unserialize( $row->ts_metadata )
+ );
+ }
+
+ return $objects;
+ }
+
+ public function addTranslation( StashedTranslation $item ): void {
+ $row = [
+ 'ts_user' => $item->getUser()->getId(),
+ 'ts_title' => $item->getTitle()->getDBkey(),
+ 'ts_namespace' => $item->getTitle()->getNamespace(),
+ 'ts_value' => $item->getValue(),
+ 'ts_metadata' => serialize( $item->getMetadata() ),
+ ];
+
+ $indexes = [
+ [ 'ts_user', 'ts_namespace', 'ts_title' ],
+ ];
+
+ $this->db->replace( $this->dbTable, $indexes, $row, __METHOD__ );
+ }
+
+ public function deleteTranslations( User $user ): void {
+ $conds = [ 'ts_user' => $user->getId() ];
+ $this->db->delete( $this->dbTable, $conds, __METHOD__ );
+ }
+}
diff --git a/Translate/src/TranslatorSandbox/TranslationStashWriter.php b/Translate/src/TranslatorSandbox/TranslationStashWriter.php
new file mode 100644
index 00000000..3f0427a4
--- /dev/null
+++ b/Translate/src/TranslatorSandbox/TranslationStashWriter.php
@@ -0,0 +1,17 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorSandbox;
+
+use User;
+
+interface TranslationStashWriter {
+ /**
+ * Adds a new translation to the stash. If the same key already exists, the
+ * previous translation and metadata will be replaced with the new one.
+ */
+ public function addTranslation( StashedTranslation $item ): void;
+
+ /** Delete all stashed translations for the given user. */
+ public function deleteTranslations( User $user ): void;
+}
diff --git a/Translate/src/TranslatorSandbox/TranslatorSandboxActionApi.php b/Translate/src/TranslatorSandbox/TranslatorSandboxActionApi.php
new file mode 100644
index 00000000..fde28946
--- /dev/null
+++ b/Translate/src/TranslatorSandbox/TranslatorSandboxActionApi.php
@@ -0,0 +1,267 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorSandbox;
+
+use ApiBase;
+use ApiMain;
+use CommentStoreComment;
+use ContentHandler;
+use FormatJson;
+use ManualLogEntry;
+use MediaWiki\Config\ServiceOptions;
+use MediaWiki\Page\WikiPageFactory;
+use MediaWiki\Revision\SlotRecord;
+use MediaWiki\User\UserFactory;
+use MediaWiki\User\UserNameUtils;
+use MediaWiki\User\UserOptionsLookup;
+use MediaWiki\User\UserOptionsManager;
+use MWException;
+use Sanitizer;
+use TranslateSandbox;
+use User;
+use Wikimedia\ParamValidator\ParamValidator;
+
+/**
+ * WebAPI for the sandbox feature of Translate.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @ingroup API TranslateAPI
+ */
+class TranslatorSandboxActionApi extends ApiBase {
+ /** @var UserFactory */
+ private $userFactory;
+ /** @var UserNameUtils */
+ private $userNameUtils;
+ /** @var UserOptionsManager */
+ private $userOptionsManager;
+ /** @var WikiPageFactory */
+ private $wikiPageFactory;
+ /** @var UserOptionsLookup */
+ private $userOptionsLookup;
+ /** @var ServiceOptions */
+ private $options;
+
+ public const CONSTRUCTOR_OPTIONS = [
+ 'TranslateUseSandbox',
+ ];
+
+ public function __construct(
+ ApiMain $mainModule,
+ string $moduleName,
+ UserFactory $userFactory,
+ UserNameUtils $userNameUtils,
+ UserOptionsManager $userOptionsManager,
+ WikiPageFactory $wikiPageFactory,
+ UserOptionsLookup $userOptionsLookup,
+ ServiceOptions $options
+ ) {
+ parent::__construct( $mainModule, $moduleName );
+ $this->userFactory = $userFactory;
+ $this->userNameUtils = $userNameUtils;
+ $this->userOptionsManager = $userOptionsManager;
+ $this->wikiPageFactory = $wikiPageFactory;
+ $this->userOptionsLookup = $userOptionsLookup;
+ $this->options = $options;
+ }
+
+ public function execute(): void {
+ if ( !$this->options->get( 'TranslateUseSandbox' ) ) {
+ $this->dieWithError( 'apierror-translate-sandboxdisabled', 'sandboxdisabled' );
+ }
+
+ $params = $this->extractRequestParams();
+ switch ( $params['do'] ) {
+ case 'create':
+ $this->doCreate();
+ break;
+ case 'delete':
+ $this->doDelete();
+ break;
+ case 'promote':
+ $this->doPromote();
+ break;
+ case 'remind':
+ $this->doRemind();
+ break;
+ default:
+ $this->dieWithError( [ 'apierror-badparameter', 'do' ] );
+ }
+ }
+
+ private function doCreate(): void {
+ $params = $this->extractRequestParams();
+
+ // Do validations
+ foreach ( explode( '|', 'username|password|email' ) as $field ) {
+ if ( !isset( $params[$field] ) ) {
+ $this->dieWithError( [ 'apierror-missingparam', $field ], 'missingparam' );
+ }
+ }
+
+ $username = $params['username'];
+
+ $canonicalName = $this->userNameUtils->getCanonical( $username, UserNameUtils::RIGOR_CREATABLE );
+
+ if ( $canonicalName === false ) {
+ $this->dieWithError( 'noname', 'invalidusername' );
+ }
+
+ $user = $this->userFactory->newFromName( $username );
+ if ( $user->getId() !== 0 ) {
+ $this->dieWithError( 'userexists', 'nonfreeusername' );
+ }
+
+ $password = $params['password'];
+ $passwordValidityStatus = $user->checkPasswordValidity( $password );
+ if ( !$passwordValidityStatus->isGood() ) {
+ $this->dieStatus( $passwordValidityStatus );
+ }
+
+ $email = $params['email'];
+ if ( !Sanitizer::validateEmail( $email ) ) {
+ $this->dieWithError( 'invalidemailaddress', 'invalidemail' );
+ }
+
+ $user = TranslateSandbox::addUser( $username, $email, $password );
+ $output = [ 'user' => [
+ 'name' => $user->getName(),
+ 'id' => $user->getId(),
+ ] ];
+
+ $this->userOptionsManager->setOption( $user, 'language', $this->getContext()->getLanguage()->getCode() );
+ $this->userOptionsManager->saveOptions( $user );
+
+ $this->getResult()->addValue( null, $this->getModuleName(), $output );
+ }
+
+ private function doDelete(): void {
+ $this->checkUserRightsAny( 'translate-sandboxmanage' );
+
+ $params = $this->extractRequestParams();
+
+ foreach ( $params['userid'] as $userId ) {
+ $user = $this->userFactory->newFromId( $userId );
+ $userpage = $user->getUserPage();
+
+ TranslateSandbox::sendEmail( $this->getUser(), $user, 'rejection' );
+
+ try {
+ TranslateSandbox::deleteUser( $user );
+ } catch ( MWException $e ) {
+ $this->dieWithError(
+ [ 'apierror-translate-sandbox-invalidparam', wfEscapeWikiText( $e->getMessage() ) ],
+ 'invalidparam'
+ );
+ }
+
+ $logEntry = new ManualLogEntry( 'translatorsandbox', 'rejected' );
+ $logEntry->setPerformer( $this->getUser() );
+ $logEntry->setTarget( $userpage );
+ $logid = $logEntry->insert();
+ $logEntry->publish( $logid );
+ }
+ }
+
+ private function doPromote(): void {
+ $this->checkUserRightsAny( 'translate-sandboxmanage' );
+
+ $params = $this->extractRequestParams();
+
+ foreach ( $params['userid'] as $userId ) {
+ $user = $this->userFactory->newFromId( $userId );
+
+ try {
+ TranslateSandbox::promoteUser( $user );
+ } catch ( MWException $e ) {
+ $this->dieWithError(
+ [ 'apierror-translate-sandbox-invalidparam', wfEscapeWikiText( $e->getMessage() ) ],
+ 'invalidparam'
+ );
+ }
+
+ TranslateSandbox::sendEmail( $this->getUser(), $user, 'promotion' );
+
+ $logEntry = new ManualLogEntry( 'translatorsandbox', 'promoted' );
+ $logEntry->setPerformer( $this->getUser() );
+ $logEntry->setTarget( $user->getUserPage() );
+ $logEntry->setParameters( [
+ '4::userid' => $user->getId(),
+ ] );
+ $logid = $logEntry->insert();
+ $logEntry->publish( $logid );
+
+ $this->createUserPage( $user );
+ }
+ }
+
+ private function doRemind(): void {
+ $params = $this->extractRequestParams();
+
+ foreach ( $params['userid'] as $userId ) {
+ $target = $this->userFactory->newFromId( $userId );
+
+ try {
+ TranslateSandbox::sendEmail( $this->getUser(), $target, 'reminder' );
+ } catch ( MWException $e ) {
+ $this->dieWithError(
+ [ 'apierror-translate-sandbox-invalidparam', wfEscapeWikiText( $e->getMessage() ) ],
+ 'invalidparam'
+ );
+ }
+ }
+ }
+
+ /** Create a user page for a user with a babel template based on the signup preferences. */
+ private function createUserPage( User $user ): void {
+ $userpage = $user->getUserPage();
+
+ if ( $userpage->exists() ) {
+ return;
+ }
+
+ $languagePrefs = FormatJson::decode(
+ $this->userOptionsLookup->getOption( $user, 'translate-sandbox' ),
+ true
+ );
+ $languages = implode( '|', $languagePrefs[ 'languages' ] ?? [] );
+ $babeltext = "{{#babel:$languages}}";
+ $summary = $this->msg( 'tsb-create-user-page' )->inContentLanguage()->text();
+
+ $page = $this->wikiPageFactory->newFromTitle( $userpage );
+ $content = ContentHandler::makeContent( $babeltext, $userpage );
+
+ $page->newPageUpdater( $user )
+ ->setContent( SlotRecord::MAIN, $content )
+ ->saveRevision( CommentStoreComment::newUnsavedComment( trim( $summary ) ), EDIT_NEW );
+ }
+
+ public function isWriteMode(): bool {
+ return true;
+ }
+
+ public function needsToken(): string {
+ return 'csrf';
+ }
+
+ protected function getAllowedParams(): array {
+ return [
+ 'do' => [
+ ParamValidator::PARAM_TYPE => [ 'create', 'delete', 'promote', 'remind' ],
+ ParamValidator::PARAM_REQUIRED => true,
+ ],
+ 'userid' => [
+ ParamValidator::PARAM_TYPE => 'integer',
+ ParamValidator::PARAM_DEFAULT => 0,
+ ParamValidator::PARAM_ISMULTI => true,
+ ],
+ 'token' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_REQUIRED => true,
+ ],
+ 'username' => [ ParamValidator::PARAM_TYPE => 'string' ],
+ 'password' => [ ParamValidator::PARAM_TYPE => 'string' ],
+ 'email' => [ ParamValidator::PARAM_TYPE => 'string' ],
+ ];
+ }
+}
diff --git a/Translate/src/TtmServer/ExportTtmServerDumpMaintenanceScript.php b/Translate/src/TtmServer/ExportTtmServerDumpMaintenanceScript.php
new file mode 100644
index 00000000..5817f4aa
--- /dev/null
+++ b/Translate/src/TtmServer/ExportTtmServerDumpMaintenanceScript.php
@@ -0,0 +1,193 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TtmServer;
+
+use FormatJson;
+use Language;
+use MediaWiki\Extension\Translate\Utilities\BaseMaintenanceScript;
+use MediaWiki\Extension\Translate\Utilities\ParallelExecutor;
+use MediaWiki\MediaWikiServices;
+use MessageGroup;
+use MessageGroups;
+use MessageGroupStats;
+use MessageHandle;
+use TMessage;
+use WikiMap;
+
+/**
+ * @since 2020.11
+ * @license GPL-2.0-or-later
+ * @author Niklas Laxström
+ */
+class ExportTtmServerDumpMaintenanceScript extends BaseMaintenanceScript {
+ /** @var Language */
+ private $contentLanguage;
+
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Creates a dump file that can be imported to a TTMServer' );
+
+ $this->addOption(
+ 'output-directory',
+ 'Which directory to output files to',
+ self::REQUIRED,
+ self::HAS_ARG,
+ 'o'
+ );
+ $this->addOption(
+ 'threads',
+ 'How many threads to use',
+ self::OPTIONAL,
+ self::HAS_ARG,
+ 'n'
+ );
+
+ $availableMethods = array_keys( $this->getAvailableCompressionWrappers() );
+ $values = count( $availableMethods ) ? implode( ', ', $availableMethods ) : 'NONE';
+ $this->addOption(
+ 'compress',
+ "Use a compression filter. Possible values: $values",
+ self::OPTIONAL,
+ self::HAS_ARG,
+ 'c'
+ );
+
+ $this->requireExtension( 'Translate' );
+ }
+
+ /** @return string[] */
+ private function getAvailableCompressionWrappers(): array {
+ $out = [];
+ $filters = stream_get_filters();
+ foreach ( $filters as $f ) {
+ if ( preg_match( '/^compress\..+$/', $f ) ) {
+ $out[$f] = $f . '://';
+ }
+ }
+ return $out;
+ }
+
+ public function execute() {
+ $this->contentLanguage = MediaWikiServices::getInstance()->getContentLanguage();
+
+ $threads = (int)$this->getOption( 'threads', 1 );
+ $outputDir = $this->getOption( 'output-directory' );
+ $requestedWrapper = $this->getOption( 'compress' );
+ $availableWrappers = $this->getAvailableCompressionWrappers();
+ if ( $requestedWrapper && !isset( $availableWrappers[$requestedWrapper] ) ) {
+ $this->fatalError(
+ "Compression wrapper '$requestedWrapper' is not supported"
+ );
+ }
+ $wrapper = $availableWrappers[$requestedWrapper] ?? '';
+ $suffix = $requestedWrapper ? ".$requestedWrapper" : '';
+
+ $executor = new ParallelExecutor( $threads );
+
+ $groups = $this->getGroupsInPerformanceOrder();
+ foreach ( $groups as $groupId => $group ) {
+ $path = $wrapper . rtrim( $outputDir, '/' ) . '/' . $groupId . '.json' . $suffix;
+
+ $executor->runInParallel(
+ function ( int $pid ) use ( $groupId ) {
+ $this->output( "Forked process $pid to process $groupId\n" );
+ },
+ function () use ( $group, $path ) {
+ $output = FormatJson::encode(
+ $this->getOutput( $group ),
+ true,
+ FormatJson::ALL_OK
+ );
+ file_put_contents( $path, $output );
+ }
+ );
+ }
+
+ $this->output( "Done.\n" );
+ }
+
+ /**
+ * Return groups sorted by number of messages.
+ *
+ * For parallel processing, it makes sense to process large groups first so that smaller
+ * ones can execute in parallel threads, rather than waiting for large group(s) to process
+ * while other threads have nothing to do. Do not spend time on gathering statistics in case
+ * they are not present.
+ *
+ * @return MessageGroup[]
+ */
+ private function getGroupsInPerformanceOrder(): array {
+ $groupStats = MessageGroupStats::forLanguage(
+ $this->contentLanguage->getCode(),
+ MessageGroupStats::FLAG_CACHE_ONLY
+ );
+
+ uasort(
+ $groupStats,
+ function ( array $a, array $b ): int {
+ return -1 * $this->sortGroupsBySize( $a, $b );
+ }
+ );
+
+ $groups = [];
+ foreach ( array_keys( $groupStats ) as $groupId ) {
+ $group = MessageGroups::getGroup( $groupId );
+ if ( $group->isMeta() ) {
+ continue;
+ }
+
+ $groups[$group->getId()] = $group;
+ }
+
+ return $groups;
+ }
+
+ private function sortGroupsBySize( array $a, array $b ): int {
+ return $a[MessageGroupStats::TOTAL] <=> $b[MessageGroupStats::TOTAL];
+ }
+
+ private function getOutput( MessageGroup $group ): array {
+ $out = [];
+
+ $groupId = $group->getId();
+ $sourceLanguage = $group->getSourceLanguage();
+
+ $stats = MessageGroupStats::forGroup( $groupId );
+ $collection = $group->initCollection( $sourceLanguage );
+ foreach ( $stats as $language => $numbers ) {
+ if ( $numbers[MessageGroupStats::TRANSLATED] === 0 ) {
+ continue;
+ }
+
+ $collection->resetForNewLanguage( $language );
+ $collection->filter( 'ignored' );
+ $collection->filter( 'translated', false );
+ $collection->loadTranslations();
+
+ foreach ( $collection->keys() as $mkey => $titleValue ) {
+ $handle = new MessageHandle( $titleValue );
+ /** @var TMessage $message */
+ $message = $collection[$mkey];
+
+ if ( !isset( $out[$mkey] ) ) {
+ $out[$mkey] = [
+ 'wikiId' => WikiMap::getCurrentWikiId(),
+ 'title' => $handle->getTitleForBase()->getPrefixedText(),
+ 'sourceLanguage' => $sourceLanguage,
+ 'primaryGroup' => $groupId,
+ 'values' => [],
+ ];
+ }
+
+ $out[$mkey]['values'][] = [
+ 'language' => $language,
+ 'value' => $message->translation(),
+ 'revision' => $message->getProperty( 'revision' ),
+ ];
+ }
+ }
+
+ return array_values( $out );
+ }
+}
diff --git a/Translate/src/TtmServer/SearchTranslationsActionApi.php b/Translate/src/TtmServer/SearchTranslationsActionApi.php
new file mode 100644
index 00000000..679f485c
--- /dev/null
+++ b/Translate/src/TtmServer/SearchTranslationsActionApi.php
@@ -0,0 +1,165 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TtmServer;
+
+use ApiBase;
+use ApiMain;
+use Config;
+use CrossLanguageTranslationSearchQuery;
+use MediaWiki\Config\ServiceOptions;
+use SearchableTTMServer;
+use Wikimedia\ParamValidator\ParamValidator;
+use Wikimedia\ParamValidator\TypeDef\IntegerDef;
+
+/**
+ * API module for search translations
+ * @license GPL-2.0-or-later
+ */
+class SearchTranslationsActionApi extends ApiBase {
+ /** @var TtmServerFactory */
+ private $ttmServerFactory;
+ /** @var ServiceOptions */
+ private $options;
+
+ private const CONSTRUCTOR_OPTIONS = [
+ 'LanguageCode',
+ 'TranslateTranslationDefaultService',
+ 'TranslateTranslationServices',
+ ];
+
+ public function __construct(
+ ApiMain $main,
+ string $moduleName,
+ Config $config,
+ TtmServerFactory $ttmServerFactory
+ ) {
+ parent::__construct( $main, $moduleName );
+ $this->options = new ServiceOptions( self::CONSTRUCTOR_OPTIONS, $config );
+ $this->ttmServerFactory = $ttmServerFactory;
+ }
+
+ public function execute(): void {
+ if ( !$this->getSearchableTtmServers() ) {
+ $this->dieWithError( 'apierror-translate-notranslationservices' );
+ }
+
+ $params = $this->extractRequestParams();
+
+ $server = $this->ttmServerFactory->create( $params[ 'service' ] );
+ if ( !$server instanceof SearchableTTMServer ) {
+ $this->dieWithError( 'apierror-translate-notranslationservices' );
+ }
+
+ $result = $this->getResult();
+
+ if ( $params['filter'] !== '' ) {
+ $translationSearch = new CrossLanguageTranslationSearchQuery( $params, $server );
+ $documents = $translationSearch->getDocuments();
+ $total = $translationSearch->getTotalHits();
+ } else {
+ $searchResults = $server->search(
+ $params['query'],
+ $params,
+ [ '', '' ]
+ );
+ $documents = $server->getDocuments( $searchResults );
+ $total = $server->getTotalHits( $searchResults );
+ }
+ $result->addValue( [ 'search', 'metadata' ], 'total', $total );
+ $result->addValue( 'search', 'translations', $documents );
+ }
+
+ /** @return string[] */
+ private function getSearchableTtmServers(): array {
+ $ttmServiceIds = $this->ttmServerFactory->getNames();
+
+ $good = [];
+ foreach ( $ttmServiceIds as $serviceId ) {
+ $ttmServer = $this->ttmServerFactory->create( $serviceId );
+ if ( $ttmServer instanceof SearchableTTMServer ) {
+ $good[] = $serviceId;
+ }
+ }
+
+ return $good;
+ }
+
+ protected function getAllowedFilters(): array {
+ return [
+ '',
+ 'translated',
+ 'fuzzy',
+ 'untranslated'
+ ];
+ }
+
+ protected function getAllowedParams(): array {
+ $available = $this->getSearchableTtmServers();
+
+ $filters = $this->getAllowedFilters();
+
+ $ret = [
+ 'service' => [
+ ParamValidator::PARAM_TYPE => $available,
+ ],
+ 'query' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_REQUIRED => true,
+ ],
+ 'sourcelanguage' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_DEFAULT => $this->options->get( 'LanguageCode' ),
+ ],
+ 'language' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_DEFAULT => '',
+ ],
+ 'group' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_DEFAULT => '',
+ ],
+ 'filter' => [
+ ParamValidator::PARAM_TYPE => $filters,
+ ParamValidator::PARAM_DEFAULT => '',
+ ],
+ 'match' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_DEFAULT => '',
+ ],
+ 'case' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_DEFAULT => '0',
+ ],
+ 'offset' => [
+ ParamValidator::PARAM_TYPE => 'integer',
+ ParamValidator::PARAM_DEFAULT => 0,
+ ],
+ 'limit' => [
+ ParamValidator::PARAM_DEFAULT => 25,
+ ParamValidator::PARAM_TYPE => 'limit',
+ IntegerDef::PARAM_MIN => 1,
+ IntegerDef::PARAM_MAX => ApiBase::LIMIT_SML1,
+ IntegerDef::PARAM_MAX2 => ApiBase::LIMIT_SML2
+ ],
+ ];
+
+ if ( $available ) {
+ // Don't add this if no services are available, it makes
+ // ApiStructureTest unhappy
+ $ret['service'][ParamValidator::PARAM_DEFAULT] =
+ $this->options->get( 'TranslateTranslationDefaultService' );
+ }
+
+ return $ret;
+ }
+
+ protected function getExamplesMessages(): array {
+ return [
+ 'action=searchtranslations&language=fr&query=aide'
+ => 'apihelp-searchtranslations-example-1',
+ 'action=searchtranslations&language=fr&query=edit&filter=untranslated'
+ => 'apihelp-searchtranslations-example-2',
+ ];
+ }
+}
diff --git a/Translate/src/TtmServer/SearchTranslationsSpecialPage.php b/Translate/src/TtmServer/SearchTranslationsSpecialPage.php
new file mode 100644
index 00000000..1f4447fa
--- /dev/null
+++ b/Translate/src/TtmServer/SearchTranslationsSpecialPage.php
@@ -0,0 +1,614 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TtmServer;
+
+use CrossLanguageTranslationSearchQuery;
+use ErrorPageError;
+use FormatJson;
+use FormOptions;
+use Html;
+use Language;
+use MediaWiki\Extension\Translate\TranslatorInterface\Aid\CurrentTranslationAid;
+use MediaWiki\Extension\Translate\TranslatorInterface\Aid\TranslationAidDataProvider;
+use Message;
+use MessageGroups;
+use MessageHandle;
+use SearchableTTMServer;
+use SpecialPage;
+use Title;
+use TranslateUtils;
+use TTMServerException;
+use WikiMap;
+use Xml;
+
+/**
+ * Contains logic to search for translations
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @ingroup SpecialPage TranslateSpecialPage
+ */
+class SearchTranslationsSpecialPage extends SpecialPage {
+ /** @var FormOptions */
+ protected $opts;
+ /**
+ * Placeholders used for highlighting. Search backend can mark the beginning and
+ * end but we need to run htmlspecialchars on the result first and then
+ * replace the placeholders with the html. It is assumed placeholders
+ * don't contain any chars that are escaped in html.
+ * @var array
+ */
+ protected $hl = [];
+ /**
+ * How many search results to display per page
+ * @var int
+ */
+ protected $limit = 25;
+ /** @var TtmServerFactory */
+ private $ttmServerFactory;
+
+ public function __construct( TtmServerFactory $ttmServerFactory ) {
+ parent::__construct( 'SearchTranslations' );
+ $this->hl = [
+ TranslateUtils::getPlaceholder(),
+ TranslateUtils::getPlaceholder(),
+ ];
+
+ $this->ttmServerFactory = $ttmServerFactory;
+ }
+
+ public function execute( $par ) {
+ global $wgLanguageCode;
+ $this->setHeaders();
+ $this->checkPermissions();
+
+ $server = $this->ttmServerFactory->getDefault();
+ if ( !$server instanceof SearchableTTMServer ) {
+ throw new ErrorPageError( 'tux-sst-nosolr-title', 'tux-sst-nosolr-body' );
+ }
+
+ $out = $this->getOutput();
+ $out->addModuleStyles( 'jquery.uls.grid' );
+ $out->addModuleStyles( 'ext.translate.specialpages.styles' );
+ $out->addModuleStyles( 'ext.translate.special.translate.styles' );
+ $out->addModuleStyles( [ 'mediawiki.ui.button', 'mediawiki.ui.input', 'mediawiki.ui.checkbox' ] );
+ $out->addModules( 'ext.translate.special.searchtranslations' );
+ $out->addModules( 'ext.translate.special.searchtranslations.operatorsuggest' );
+ $out->addHelpLink( 'Help:Extension:Translate#searching' );
+ $out->addJsConfigVars( 'wgTranslateLanguages', TranslateUtils::getLanguageNames( null ) );
+
+ $this->opts = $opts = new FormOptions();
+ $opts->add( 'query', '' );
+ $opts->add( 'sourcelanguage', $wgLanguageCode );
+ $opts->add( 'language', '' );
+ $opts->add( 'group', '' );
+ $opts->add( 'grouppath', '' );
+ $opts->add( 'filter', '' );
+ $opts->add( 'match', '' );
+ $opts->add( 'case', '' );
+ $opts->add( 'limit', $this->limit );
+ $opts->add( 'offset', 0 );
+
+ $opts->fetchValuesFromRequest( $this->getRequest() );
+
+ $queryString = $opts->getValue( 'query' );
+
+ if ( $queryString === '' ) {
+ $this->showEmptySearch();
+ return;
+ }
+
+ $search = $this->getSearchInput( $queryString );
+
+ $options = $params = $opts->getAllValues();
+ $filter = $opts->getValue( 'filter' );
+ try {
+ if ( $opts->getValue( 'language' ) === '' ) {
+ $options['language'] = $this->getLanguage()->getCode();
+ }
+ $translationSearch = new CrossLanguageTranslationSearchQuery( $options, $server );
+ if ( in_array( $filter, $translationSearch->getAvailableFilters() ) ) {
+ if ( $options['language'] === $options['sourcelanguage'] ) {
+ $this->showSearchError( $search, $this->msg( 'tux-sst-error-language' ) );
+ return;
+ }
+
+ $opts->setValue( 'language', $options['language'] );
+ $documents = $translationSearch->getDocuments();
+ $total = $translationSearch->getTotalHits();
+ $resultset = $translationSearch->getResultSet();
+ } else {
+ $resultset = $server->search( $queryString, $params, $this->hl );
+ $documents = $server->getDocuments( $resultset );
+ $total = $server->getTotalHits( $resultset );
+ }
+ } catch ( TTMServerException $e ) {
+ $message = $e->getMessage();
+ // Known exceptions
+ if ( preg_match( '/^Result window is too large/', $message ) ) {
+ $this->showSearchError( $search, $this->msg( 'tux-sst-error-offset' ) );
+ return;
+ }
+
+ // Other exceptions
+ error_log( 'Translation search server unavailable: ' . $e->getMessage() );
+ throw new ErrorPageError( 'tux-sst-solr-offline-title', 'tux-sst-solr-offline-body' );
+ }
+
+ // Part 1: facets
+ $facets = $server->getFacets( $resultset );
+ $facetHtml = '';
+
+ if ( $facets['language'] !== [] ) {
+ if ( $filter !== '' ) {
+ $facets['language'] = array_merge(
+ $facets['language'],
+ [ $opts->getValue( 'language' ) => $total ]
+ );
+ }
+ $facetHtml = Html::element( 'div',
+ [ 'class' => 'row facet languages',
+ 'data-facets' => FormatJson::encode( $this->getLanguages( $facets['language'] ) ),
+ 'data-language' => $opts->getValue( 'language' ),
+ ],
+ $this->msg( 'tux-sst-facet-language' )->text()
+ );
+ }
+
+ if ( $facets['group'] !== [] ) {
+ $facetHtml .= Html::element( 'div',
+ [ 'class' => 'row facet groups',
+ 'data-facets' => FormatJson::encode( $this->getGroups( $facets['group'] ) ),
+ 'data-group' => $opts->getValue( 'group' ) ],
+ $this->msg( 'tux-sst-facet-group' )->text()
+ );
+ }
+
+ // Part 2: results
+ $resultsHtml = '';
+
+ $title = Title::newFromText( $queryString );
+ if ( $title && !in_array( $filter, $translationSearch->getAvailableFilters() ) ) {
+ $handle = new MessageHandle( $title );
+ $code = $handle->getCode();
+ $language = $opts->getValue( 'language' );
+ if ( $code !== '' && $code !== $language && $handle->isValid() ) {
+ $dataProvider = new TranslationAidDataProvider( $handle );
+ $aid = new CurrentTranslationAid(
+ $handle->getGroup(),
+ $handle,
+ $this->getContext(),
+ $dataProvider
+ );
+ $document = [
+ 'wiki' => WikiMap::getCurrentWikiId(),
+ 'localid' => $handle->getTitleForBase()->getPrefixedText(),
+ 'content' => $aid->getData()['value'],
+ 'language' => $handle->getCode(),
+ ];
+ array_unshift( $documents, $document );
+ $total++;
+ }
+ }
+
+ foreach ( $documents as $document ) {
+ $text = $document['content'];
+ $text = TranslateUtils::convertWhiteSpaceToHTML( $text );
+
+ list( $pre, $post ) = $this->hl;
+ $text = str_replace( $pre, '<strong class="tux-search-highlight">', $text );
+ $text = str_replace( $post, '</strong>', $text );
+
+ $title = Title::newFromText( $document['localid'] . '/' . $document['language'] );
+ if ( !$title ) {
+ // Should not ever happen but who knows...
+ continue;
+ }
+
+ $resultAttribs = [
+ 'class' => 'row tux-message',
+ 'data-title' => $title->getPrefixedText(),
+ 'data-language' => $document['language'],
+ ];
+
+ $handle = new MessageHandle( $title );
+
+ if ( $handle->isValid() ) {
+ $uri = TranslateUtils::getEditorUrl( $handle );
+ $link = Html::element(
+ 'a',
+ [ 'href' => $uri ],
+ $this->msg( 'tux-sst-edit' )->text()
+ );
+ } else {
+ $url = wfParseUrl( $document['uri'] );
+ $domain = $url['host'];
+ $link = Html::element(
+ 'a',
+ [ 'href' => $document['uri'] ],
+ $this->msg( 'tux-sst-view-foreign', $domain )->text()
+ );
+ }
+
+ $access = Html::rawElement(
+ 'div',
+ [ 'class' => 'row tux-edit tux-message-item' ],
+ $link
+ );
+
+ $titleText = $title->getPrefixedText();
+ $titleAttribs = [
+ 'class' => 'row tux-title',
+ 'dir' => 'ltr',
+ ];
+
+ $language = Language::factory( $document['language'] );
+ $textAttribs = [
+ 'class' => 'row tux-text',
+ 'lang' => $language->getHtmlCode(),
+ 'dir' => $language->getDir(),
+ ];
+
+ $resultsHtml .= Html::openElement( 'div', $resultAttribs )
+ . Html::rawElement( 'div', $textAttribs, $text )
+ . Html::element( 'div', $titleAttribs, $titleText )
+ . $access
+ . Html::closeElement( 'div' );
+ }
+
+ $resultsHtml .= Html::rawElement( 'hr', [ 'class' => 'tux-pagination-line' ] );
+
+ $prev = $next = '';
+ $offset = $this->opts->getValue( 'offset' );
+ $params = $this->opts->getChangedValues();
+
+ if ( $total - $offset > $this->limit ) {
+ $newParams = [ 'offset' => $offset + $this->limit ] + $params;
+ $attribs = [
+ 'class' => 'mw-ui-button pager-next',
+ 'href' => $this->getPageTitle()->getLocalURL( $newParams ),
+ ];
+ $next = Html::element( 'a', $attribs, $this->msg( 'tux-sst-next' )->text() );
+ }
+ if ( $offset ) {
+ $newParams = [ 'offset' => max( 0, $offset - $this->limit ) ] + $params;
+ $attribs = [
+ 'class' => 'mw-ui-button pager-prev',
+ 'href' => $this->getPageTitle()->getLocalURL( $newParams ),
+ ];
+ $prev = Html::element( 'a', $attribs, $this->msg( 'tux-sst-prev' )->text() );
+ }
+
+ $resultsHtml .= Html::rawElement( 'div', [ 'class' => 'tux-pagination-links' ],
+ "$prev $next"
+ );
+
+ $count = $this->msg( 'tux-sst-count' )->numParams( $total )->escaped();
+
+ $this->showSearch( $search, $count, $facetHtml, $resultsHtml, $total );
+ }
+
+ private function getLanguages( array $facet ): array {
+ $output = [];
+
+ $nondefaults = $this->opts->getChangedValues();
+ $selected = $this->opts->getValue( 'language' );
+ $filter = $this->opts->getValue( 'filter' );
+
+ foreach ( $facet as $key => $value ) {
+ if ( $filter !== '' && $key === $selected ) {
+ unset( $nondefaults['language'] );
+ unset( $nondefaults['filter'] );
+ } elseif ( $filter !== '' ) {
+ $nondefaults['language'] = $key;
+ $nondefaults['filter'] = $filter;
+ } elseif ( $key === $selected ) {
+ unset( $nondefaults['language'] );
+ } else {
+ $nondefaults['language'] = $key;
+ }
+
+ $url = $this->getPageTitle()->getLocalURL( $nondefaults );
+ $value = $this->getLanguage()->formatNum( $value );
+
+ $output[$key] = [
+ 'count' => $value,
+ 'url' => $url
+ ];
+ }
+
+ return $output;
+ }
+
+ private function getGroups( array $facet ): array {
+ $structure = MessageGroups::getGroupStructure();
+ return $this->makeGroupFacetRows( $structure, $facet );
+ }
+
+ private function makeGroupFacetRows(
+ array $groups,
+ array $counts,
+ int $level = 0,
+ string $pathString = ''
+ ): array {
+ $output = [];
+
+ $nondefaults = $this->opts->getChangedValues();
+ $selected = $this->opts->getValue( 'group' );
+ $path = explode( '|', $this->opts->getValue( 'grouppath' ) );
+
+ foreach ( $groups as $mixed ) {
+ $subgroups = $group = $mixed;
+
+ if ( is_array( $mixed ) ) {
+ $group = array_shift( $subgroups );
+ } else {
+ $subgroups = [];
+ }
+ '@phan-var \MessageGroup $group';
+ $id = $group->getId();
+
+ if ( $id !== $selected && !isset( $counts[$id] ) ) {
+ continue;
+ }
+
+ if ( $id === $selected ) {
+ unset( $nondefaults['group'] );
+ $nondefaults['grouppath'] = $pathString;
+ } else {
+ $nondefaults['group'] = $id;
+ $nondefaults['grouppath'] = $pathString . $id;
+ }
+
+ $value = $counts[$id] ?? 0;
+
+ $output[$id] = [
+ 'id' => $id,
+ 'count' => $value,
+ 'label' => $group->getLabel(),
+ ];
+
+ if ( isset( $path[$level] ) && $path[$level] === $id ) {
+ $output[$id]['groups'] = $this->makeGroupFacetRows(
+ $subgroups,
+ $counts,
+ $level + 1,
+ "$pathString$id|"
+ );
+ }
+ }
+
+ return $output;
+ }
+
+ private function showSearch(
+ string $search,
+ string $count,
+ string $facets,
+ string $results,
+ int $total
+ ): void {
+ $messageSelector = $this->messageSelector();
+ $this->getOutput()->addHTML( <<<HTML
+<div class="grid tux-searchpage">
+ <div class="row tux-searchboxform">
+ <div class="tux-search-tabs offset-by-three">$messageSelector</div>
+ <div class="row tux-search-options">
+ <div class="offset-by-three nine columns tux-search-inputs">
+ <div class="row searchinput">$search</div>
+ <div class="row count">$count</div>
+ </div>
+ </div>
+ </div>
+HTML
+ );
+
+ $query = trim( $this->opts->getValue( 'query' ) );
+ $hasSpace = preg_match( '/\s/', $query );
+ $match = $this->opts->getValue( 'match' );
+ $size = 100;
+ if ( $total > $size && $match !== 'all' && $hasSpace ) {
+ $params = $this->opts->getChangedValues();
+ $params = [ 'match' => 'all' ] + $params;
+ $linkText = $this->msg( 'tux-sst-link-all-match' )->text();
+ $link = $this->getPageTitle()->getFullURL( $params );
+ $link = "<span class='plainlinks'>[$link $linkText]</span>";
+
+ $out = $this->getOutput();
+ $out->addHTML(
+ Html::successBox(
+ $out->msg( 'tux-sst-match-message', $link )->parse()
+ )
+ );
+ }
+
+ $this->getOutput()->addHTML( <<<HTML
+ <div class="row searchcontent">
+ <div class="three columns facets">$facets</div>
+ <div class="nine columns results">$results</div>
+ </div>
+</div>
+HTML
+ );
+ }
+
+ private function showEmptySearch(): void {
+ $search = $this->getSearchInput( '' );
+ $this->getOutput()->addHTML( <<<HTML
+<div class="grid tux-searchpage">
+ <div class="row searchinput">
+ <div class="nine columns offset-by-three">$search</div>
+ </div>
+</div>
+HTML
+ );
+ }
+
+ private function showSearchError( string $search, Message $message ): void {
+ $messageSelector = $this->messageSelector();
+ $messageHTML = Html::errorBox(
+ $message->escaped(),
+ '',
+ 'row'
+ );
+ $this->getOutput()->addHTML( <<<HTML
+<div class="grid tux-searchpage">
+ <div class="row tux-searchboxform">
+ <div class="tux-search-tabs offset-by-three">$messageSelector</div>
+ <div class="row tux-search-options">
+ <div class="offset-by-three nine columns tux-search-inputs">
+ <div class="row searchinput">$search</div>
+ $messageHTML
+ </div>
+ </div>
+ </div>
+</div>
+HTML
+ );
+ }
+
+ /** Build ellipsis to select options */
+ private function ellipsisSelector( string $key, string $value ): string {
+ $nondefaults = $this->opts->getChangedValues();
+ $taskParams = [ 'filter' => $value ] + $nondefaults;
+ ksort( $taskParams );
+ $href = $this->getPageTitle()->getLocalURL( $taskParams );
+ $link = Html::element( 'a',
+ [ 'href' => $href ],
+ // Messages for grepping:
+ // tux-sst-ellipsis-untranslated
+ // tux-sst-ellipsis-outdated
+ $this->msg( 'tux-sst-ellipsis-' . $key )->text()
+ );
+
+ $container = Html::rawElement( 'li', [
+ 'class' => 'column',
+ 'data-filter' => $value,
+ 'data-title' => $key,
+ ], $link );
+
+ return $container;
+ }
+
+ /** Design the tabs */
+ private function messageSelector(): string {
+ $nondefaults = $this->opts->getChangedValues();
+ $output = Html::openElement( 'div', [ 'class' => 'row tux-messagetable-header' ] );
+ $output .= Html::openElement( 'div', [ 'class' => 'nine columns' ] );
+ $output .= Html::openElement( 'ul', [ 'class' => 'row tux-message-selector' ] );
+ $tabs = [
+ 'default' => '',
+ 'translated' => 'translated',
+ 'untranslated' => 'untranslated'
+ ];
+
+ $ellipsisOptions = [
+ 'outdated' => 'fuzzy'
+ ];
+
+ $selected = $this->opts->getValue( 'filter' );
+ if ( in_array( $selected, $ellipsisOptions ) ) {
+ $ellipsisOptions = array_slice( $tabs, -1 );
+
+ // Remove the last tab
+ array_pop( $tabs );
+ $tabs = array_merge( $tabs, [ 'outdated' => $selected ] );
+ } elseif ( !in_array( $selected, $tabs ) ) {
+ $selected = '';
+ }
+
+ $container = Html::openElement( 'ul', [ 'class' => 'column tux-message-selector' ] );
+ foreach ( $ellipsisOptions as $optKey => $optValue ) {
+ $container .= $this->ellipsisSelector( $optKey, $optValue );
+ }
+
+ $sourcelanguage = $this->opts->getValue( 'sourcelanguage' );
+ $sourcelanguage = TranslateUtils::getLanguageName( $sourcelanguage );
+ foreach ( $tabs as $tab => $filter ) {
+ // Messages for grepping:
+ // tux-sst-default
+ // tux-sst-translated
+ // tux-sst-untranslated
+ // tux-sst-outdated
+ $tabClass = "tux-sst-$tab";
+ $taskParams = [ 'filter' => $filter ] + $nondefaults;
+ ksort( $taskParams );
+ $href = $this->getPageTitle()->getLocalURL( $taskParams );
+ if ( $tab === 'default' ) {
+ $link = Html::element(
+ 'a',
+ [ 'href' => $href ],
+ $this->msg( $tabClass )->text()
+ );
+ } else {
+ $link = Html::element(
+ 'a',
+ [ 'href' => $href ],
+ $this->msg( $tabClass, $sourcelanguage )->text()
+ );
+ }
+
+ if ( $selected === $filter ) {
+ $tabClass .= ' selected';
+ }
+ $output .= Html::rawElement( 'li', [
+ 'class' => [ 'column', $tabClass ],
+ 'data-filter' => $filter,
+ 'data-title' => $tab,
+ ], $link );
+ }
+
+ // More column
+ $output .= Html::openElement( 'li', [ 'class' => 'column more' ] ) .
+ '...' .
+ $container .
+ Html::closeElement( 'li' );
+
+ $output .= Html::closeElement( 'ul' ) . Html::closeElement( 'div' ) . Html::closeElement( 'div' );
+
+ return $output;
+ }
+
+ private function getSearchInput( string $query ) {
+ $attribs = [
+ 'placeholder' => $this->msg( 'tux-sst-search-ph' )->text(),
+ 'class' => 'searchinputbox mw-ui-input',
+ 'dir' => $this->getLanguage()->getDir(),
+ ];
+
+ $title = Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() );
+ $input = Xml::input( 'query', false, $query, $attribs );
+ $submit = Xml::submitButton(
+ $this->msg( 'tux-sst-search' )->text(),
+ [ 'class' => 'mw-ui-button mw-ui-progressive' ]
+ );
+
+ $nondefaults = $this->opts->getChangedValues();
+ $checkLabel = Xml::checkLabel(
+ $this->msg( 'tux-sst-case-sensitive' )->text(),
+ 'case',
+ 'tux-case-sensitive',
+ isset( $nondefaults['case'] )
+ );
+ $checkLabel = Html::openElement(
+ 'div',
+ [ 'class' => 'tux-search-operators mw-ui-checkbox' ]
+ ) .
+ $checkLabel .
+ Html::closeElement( 'div' );
+
+ $lang = $this->getRequest()->getVal( 'language' );
+ $language = $lang === null ? '' : Html::hidden( 'language', $lang );
+
+ $form = Html::rawElement( 'form', [ 'action' => wfScript(), 'name' => 'searchform' ],
+ $title . $input . $submit . $checkLabel . $language
+ );
+
+ return $form;
+ }
+
+ protected function getGroupName() {
+ return 'translation';
+ }
+}
diff --git a/Translate/src/TtmServer/ServiceCreationFailure.php b/Translate/src/TtmServer/ServiceCreationFailure.php
new file mode 100644
index 00000000..62959edb
--- /dev/null
+++ b/Translate/src/TtmServer/ServiceCreationFailure.php
@@ -0,0 +1,14 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TtmServer;
+
+use RuntimeException;
+
+/**
+ * @since 2021.01
+ * @license GPL-2.0-or-later
+ * @author Niklas Laxström
+ */
+class ServiceCreationFailure extends RuntimeException {
+}
diff --git a/Translate/src/TtmServer/TtmServerActionApi.php b/Translate/src/TtmServer/TtmServerActionApi.php
new file mode 100644
index 00000000..deb13681
--- /dev/null
+++ b/Translate/src/TtmServer/TtmServerActionApi.php
@@ -0,0 +1,122 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TtmServer;
+
+use ApiBase;
+use ApiMain;
+use Config;
+use MediaWiki\Config\ServiceOptions;
+use ReadableTTMServer;
+use Wikimedia\ParamValidator\ParamValidator;
+
+/**
+ * API module for TTMServer
+ * @ingroup API TranslateAPI TTMServer
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2012-01-26
+ */
+class TtmServerActionApi extends ApiBase {
+ /** @var TtmServerFactory */
+ private $ttmServerFactory;
+ /** @var ServiceOptions */
+ private $options;
+
+ private const CONSTRUCTOR_OPTIONS = [
+ 'LanguageCode',
+ 'TranslateTranslationDefaultService',
+ 'TranslateTranslationServices',
+ ];
+
+ public function __construct(
+ ApiMain $mainModule,
+ string $moduleName,
+ TtmServerFactory $ttmServerFactory,
+ Config $config
+ ) {
+ parent::__construct( $mainModule, $moduleName );
+ $this->ttmServerFactory = $ttmServerFactory;
+ $this->options = new ServiceOptions( self::CONSTRUCTOR_OPTIONS, $config );
+ }
+
+ public function execute(): void {
+ if ( !$this->getAvailableTranslationServices() ) {
+ $this->dieWithError( 'apierror-translate-notranslationservices' );
+ }
+
+ $params = $this->extractRequestParams();
+
+ $server = $this->ttmServerFactory->create( $params[ 'service' ] );
+ if ( !$server instanceof ReadableTTMServer ) {
+ $this->dieWithError( 'apierror-translate-notranslationservices' );
+ }
+
+ $suggestions = $server->query(
+ $params['sourcelanguage'],
+ $params['targetlanguage'],
+ $params['text']
+ );
+
+ $result = $this->getResult();
+ foreach ( $suggestions as $sug ) {
+ $sug['location'] = $server->expandLocation( $sug );
+ unset( $sug['wiki'] );
+ $result->addValue( $this->getModuleName(), null, $sug );
+ }
+
+ $result->addIndexedTagName( $this->getModuleName(), 'suggestion' );
+ }
+
+ private function getAvailableTranslationServices(): array {
+ $translationServices = $this->options->get( 'TranslateTranslationServices' );
+
+ $good = [];
+ foreach ( $translationServices as $id => $config ) {
+ $public = $config['public'] ?? false;
+ if ( $config['type'] === 'ttmserver' && $public ) {
+ $good[] = $id;
+ }
+ }
+
+ return $good;
+ }
+
+ protected function getAllowedParams(): array {
+ $available = $this->getAvailableTranslationServices();
+
+ $ret = [
+ 'service' => [
+ ParamValidator::PARAM_TYPE => $available,
+ ],
+ 'sourcelanguage' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_REQUIRED => true,
+ ],
+ 'targetlanguage' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_REQUIRED => true,
+ ],
+ 'text' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_REQUIRED => true,
+ ],
+ ];
+
+ if ( $available ) {
+ // Don't add this if no services are available, it makes
+ // ApiStructureTest unhappy
+ $ret['service'][ParamValidator::PARAM_DEFAULT] =
+ $this->options->get( 'TranslateTranslationDefaultService' );
+ }
+
+ return $ret;
+ }
+
+ protected function getExamplesMessages(): array {
+ return [
+ 'action=ttmserver&sourcelanguage=en&targetlanguage=fi&text=Help'
+ => 'apihelp-ttmserver-example-1',
+ ];
+ }
+}
diff --git a/Translate/src/TtmServer/TtmServerFactory.php b/Translate/src/TtmServer/TtmServerFactory.php
new file mode 100644
index 00000000..90b73f11
--- /dev/null
+++ b/Translate/src/TtmServer/TtmServerFactory.php
@@ -0,0 +1,91 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TtmServer;
+
+use DatabaseTTMServer;
+use FakeTTMServer;
+use RemoteTTMServer;
+use TTMServer;
+use WritableTTMServer;
+
+/**
+ * @since 2021.01
+ * @license GPL-2.0-or-later
+ * @author Niklas Laxström
+ */
+class TtmServerFactory {
+ /** @var array */
+ private $configs;
+ /** @var ?string */
+ private $default;
+
+ /** @see https://www.mediawiki.org/wiki/Help:Extension:Translate/Translation_memories#Configuration */
+ public function __construct( array $configs, ?string $default = null ) {
+ $this->configs = $configs;
+ $this->default = $default;
+ }
+
+ /** @return string[] */
+ public function getNames(): array {
+ $ttmServersIds = [];
+ foreach ( $this->configs as $serviceId => $config ) {
+ $type = $config['type'] ?? '';
+ if ( $type === 'ttmserver' || $type === 'remote-ttmserver' ) {
+ $ttmServersIds[] = $serviceId;
+ }
+ }
+ return $ttmServersIds;
+ }
+
+ public function has( string $name ): bool {
+ $ttmServersIds = $this->getNames();
+ return in_array( $name, $ttmServersIds );
+ }
+
+ public function create( string $name ): TTMServer {
+ if ( !$this->has( $name ) ) {
+ throw new ServiceCreationFailure( "No configuration for name '$name'" );
+ }
+
+ $config = $this->configs[$name];
+ if ( !is_array( $config ) ) {
+ throw new ServiceCreationFailure( "Invalid configuration for name '$name'" );
+ }
+
+ if ( isset( $config['class'] ) ) {
+ $class = $config['class'];
+ return new $class( $config );
+ } elseif ( isset( $config['type'] ) ) {
+ $type = $config['type'];
+ switch ( $type ) {
+ case 'ttmserver':
+ return new DatabaseTTMServer( $config );
+ case 'remote-ttmserver':
+ return new RemoteTTMServer( $config );
+ default:
+ throw new ServiceCreationFailure( "Unknown type for name '$name': $type" );
+ }
+ }
+
+ throw new ServiceCreationFailure( "Invalid configuration for name '$name': type not specified" );
+ }
+
+ /** Return the primary service or a no-op fallback if primary cannot be constructed. */
+ public function getDefault(): WritableTTMServer {
+ $service = null;
+
+ try {
+ if ( $this->default !== null ) {
+ $service = $this->create( $this->default );
+ }
+ } catch ( ServiceCreationFailure $e ) {
+ }
+
+ if ( $service instanceof WritableTTMServer ) {
+ return $service;
+ }
+
+ return new FakeTTMServer();
+ }
+}
diff --git a/Translate/src/Utilities/BaseMaintenanceScript.php b/Translate/src/Utilities/BaseMaintenanceScript.php
new file mode 100644
index 00000000..a47cf5e5
--- /dev/null
+++ b/Translate/src/Utilities/BaseMaintenanceScript.php
@@ -0,0 +1,21 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Utilities;
+
+use Maintenance;
+
+/**
+ * Constants for making code for maintenance scripts more readable.
+ *
+ * Hopefully temporary until https://phabricator.wikimedia.org/T271787 is fixed.
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+abstract class BaseMaintenanceScript extends Maintenance {
+ protected const OPTIONAL = false;
+ protected const REQUIRED = true;
+ protected const HAS_ARG = true;
+ protected const NO_ARG = false;
+}
diff --git a/Translate/src/Utilities/ConfigHelper.php b/Translate/src/Utilities/ConfigHelper.php
new file mode 100644
index 00000000..e028d38c
--- /dev/null
+++ b/Translate/src/Utilities/ConfigHelper.php
@@ -0,0 +1,53 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Utilities;
+
+/**
+ * A helper class added to work with configuration values of the Translate Extension
+ *
+ * Also used temporarily to simplify deprecation of old configuration variables. New
+ * variable names, if set, are given preference over the old ones.
+ * See: https://phabricator.wikimedia.org/T277965
+ *
+ * @author Abijeet Patro.
+ * @license GPL-2.0-or-later
+ * @since 2021.06
+ */
+class ConfigHelper {
+ /** @return bool|string */
+ public function getValidationExclusionFile() {
+ global $wgTranslateValidationExclusionFile;
+ return $wgTranslateValidationExclusionFile;
+ }
+
+ public function getTranslateAuthorExclusionList(): array {
+ global $wgTranslateAuthorExclusionList;
+ return $wgTranslateAuthorExclusionList;
+ }
+
+ public function getDisabledTargetLanguages(): array {
+ global $wgTranslateDisabledTargetLanguages;
+ return $wgTranslateDisabledTargetLanguages;
+ }
+
+ public function isAuthorExcluded( string $groupId, string $languageCode, string $username ): bool {
+ $hash = "$groupId;$languageCode;$username";
+ $authorExclusionList = $this->getTranslateAuthorExclusionList();
+ $excluded = false;
+
+ foreach ( $authorExclusionList as $rule ) {
+ list( $type, $regex ) = $rule;
+
+ if ( preg_match( $regex, $hash ) ) {
+ if ( $type === 'include' ) {
+ return false;
+ } else {
+ $excluded = true;
+ }
+ }
+ }
+
+ return $excluded;
+ }
+}
diff --git a/Translate/src/Utilities/GettextPlural.php b/Translate/src/Utilities/GettextPlural.php
new file mode 100644
index 00000000..f14dba66
--- /dev/null
+++ b/Translate/src/Utilities/GettextPlural.php
@@ -0,0 +1,201 @@
+<?php
+/**
+ * @file
+ * @license GPL-2.0-or-later
+ */
+
+namespace MediaWiki\Extension\Translate\Utilities;
+
+use GettextPluralException;
+use InvalidArgumentException;
+use TranslateUtils;
+
+/** @since 2019.09 */
+class GettextPlural {
+ private const PRE = '{{PLURAL:GETTEXT|';
+ private const POST = '}}';
+
+ /**
+ * Returns Gettext plural rule for given language.
+ *
+ * @param string $code Language tag in MediaWiki internal format.
+ * @return string Empty string if no plural rule found
+ */
+ public static function getPluralRule( $code ) {
+ global $wgTranslateDocumentationLanguageCode;
+
+ if ( $code === $wgTranslateDocumentationLanguageCode ) {
+ return 'nplurals=1; plural=0;';
+ }
+
+ $rulefile = __DIR__ . '/../../data/plural-gettext.txt';
+ $rules = file_get_contents( $rulefile );
+ foreach ( explode( "\n", $rules ) as $line ) {
+ if ( trim( $line ) === '' ) {
+ continue;
+ }
+ [ $rulecode, $rule ] = explode( "\t", $line );
+ if ( $rulecode === $code ) {
+ return $rule;
+ }
+ }
+
+ return '';
+ }
+
+ /**
+ * Returns how many plural forms are expected by a given plural rule.
+ *
+ * @param string $rule Gettext style plural rule.
+ * @return int
+ * @throws InvalidArgumentException
+ */
+ public static function getPluralCount( $rule ) {
+ $m = [];
+ $ok = preg_match( '/nplurals=([0-9]+).*;/', $rule, $m );
+ if ( !$ok ) {
+ throw new InvalidArgumentException( "Rule $rule is malformed" );
+ }
+ return (int)$m[ 1 ];
+ }
+
+ /**
+ * Quick way to check if the text contains plural syntax.
+ *
+ * @param string $text
+ * @return bool
+ */
+ public static function hasPlural( $text ) {
+ return strpos( $text, self::PRE ) !== false;
+ }
+
+ /**
+ * Format plural forms as single string suitable for translation.
+ *
+ * @param string[] $forms
+ * @return string
+ */
+ public static function flatten( array $forms ) {
+ return self::PRE . implode( '|', $forms ) . self::POST;
+ }
+
+ /**
+ * Format translation with plural forms as array of forms.
+ *
+ * Reverse of flatten. Do note that A may be != flatten( unflatten( A ) ) because
+ * translators can place part of the text outside the plural markup or use multiple
+ * instances of the markup.
+ *
+ * @param string $text
+ * @param int $expectedPluralCount
+ * @return string[]
+ */
+ public static function unflatten( $text, $expectedPluralCount ) {
+ [ $template, $instanceMap ] = self::parsePluralForms( $text );
+ return self::expandTemplate( $template, $instanceMap, $expectedPluralCount );
+ }
+
+ /**
+ * Replaces problematic markup which can confuse our plural syntax markup with placeholders
+ *
+ * @param string $text
+ * @return array [ string $text, array $map ]
+ */
+ private static function armour( $text ) {
+ // |/| is commonly used in KDE to support inflections. It needs to be escaped
+ // to avoid it messing up the plural markup.
+ $replacements = [
+ '|/|' => TranslateUtils::getPlaceholder(),
+ ];
+ // {0} is a common variable format
+ preg_match_all( '/\{\d+\}/', $text, $matches );
+ foreach ( $matches[0] as $m ) {
+ $replacements[$m] = TranslateUtils::getPlaceholder();
+ }
+
+ $text = strtr( $text, $replacements );
+ $map = array_flip( $replacements );
+
+ return [ $text, $map ];
+ }
+
+ /**
+ * Reverse of armour.
+ *
+ * @param string $text
+ * @param array $map Map returned by armour.
+ * @return string
+ */
+ private static function unarmour( $text, array $map ) {
+ return strtr( $text, $map );
+ }
+
+ /**
+ * Parses plural markup into a structure form.
+ *
+ * @param string $text
+ * @return array [ string $template, array $instanceMap ]
+ */
+ public static function parsePluralForms( $text ) {
+ $m = [];
+ $pre = preg_quote( self::PRE, '/' );
+ $post = preg_quote( self::POST, '/' );
+
+ [ $armouredText, $armourMap ] = self::armour( $text );
+
+ $ok = preg_match_all( "/$pre(.*)$post/Us", $armouredText, $m );
+ if ( $ok === false ) {
+ throw new GettextPluralException( "Plural regular expression failed for text: $text" );
+ }
+
+ $template = $armouredText;
+ $instanceMap = [];
+
+ foreach ( $m[0] as $instanceIndex => $instanceText ) {
+ $ph = TranslateUtils::getPlaceholder();
+
+ // Using preg_replace instead of str_replace because of the limit parameter
+ $pattern = '/' . preg_quote( $instanceText, '/' ) . '/';
+ $template = preg_replace( $pattern, $ph, $template, 1 );
+
+ $instanceForms = explode( '|', $m[ 1 ][ $instanceIndex ] );
+ foreach ( $instanceForms as $i => $v ) {
+ $instanceForms[ $i ] = self::unarmour( $v, $armourMap );
+ }
+
+ $instanceMap[$ph] = $instanceForms;
+ }
+
+ $template = self::unarmour( $template, $armourMap );
+ return [ $template, $instanceMap ];
+ }
+
+ /**
+ * Gives fully expanded forms given a template and parsed plural markup instances.
+ *
+ * @param string $template
+ * @param array $instanceMap
+ * @param int $expectedPluralCount
+ * @return string[]
+ */
+ public static function expandTemplate( $template, array $instanceMap, $expectedPluralCount ) {
+ $formArray = [];
+ for ( $formIndex = 0; $formIndex < $expectedPluralCount; $formIndex++ ) {
+ // Start with the whole string
+ $form = $template;
+
+ // Loop over each plural markup instance and replace it with the plural form belonging
+ // to the current index
+ foreach ( $instanceMap as $ph => $instanceForms ) {
+ // For missing forms, fall back to empty text.
+ // Extra forms are excluded because $formIndex < $expectedPluralCount
+ $replacement = $instanceForms[ $formIndex ] ?? '';
+ $form = str_replace( $ph, $replacement, $form );
+ }
+
+ $formArray[ $formIndex ] = $form;
+ }
+
+ return $formArray;
+ }
+}
diff --git a/Translate/src/Utilities/HTMLJsSelectToInputField.php b/Translate/src/Utilities/HTMLJsSelectToInputField.php
new file mode 100644
index 00000000..e755e0e9
--- /dev/null
+++ b/Translate/src/Utilities/HTMLJsSelectToInputField.php
@@ -0,0 +1,70 @@
+<?php
+declare( strict_types=1 );
+
+namespace MediaWiki\Extension\Translate\Utilities;
+
+use HTMLTextField;
+
+/**
+ * Implementation of JsSelectToInput class which is compatible with MediaWiki's preferences system
+ * @author Niklas Laxström
+ * @copyright Copyright © 2010 Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+class HTMLJsSelectToInputField extends HTMLTextField {
+ /** @inheritDoc */
+ public function getInputHTML( $value ): string {
+ $input = parent::getInputHTML( $value );
+
+ if ( isset( $this->mParams['select'] ) ) {
+ /** @var JsSelectToInput $select */
+ $select = $this->mParams['select'];
+ $input = $select->getHtmlAndPrepareJS() . '<br />' . $input;
+ }
+
+ return $input;
+ }
+
+ /** @return string[] */
+ protected function tidy( string $value ): array {
+ $value = array_map( 'trim', explode( ',', $value ) );
+ $value = array_unique( array_filter( $value ) );
+
+ return $value;
+ }
+
+ /** @inheritDoc */
+ public function validate( $value, $alldata ) {
+ $p = parent::validate( $value, $alldata );
+
+ if ( $p !== true ) {
+ return $p;
+ }
+
+ if ( !isset( $this->mParams['valid-values'] ) ) {
+ return true;
+ }
+
+ if ( $value === 'default' ) {
+ return true;
+ }
+
+ $codes = $this->tidy( $value );
+ $valid = array_flip( $this->mParams['valid-values'] );
+
+ foreach ( $codes as $code ) {
+ if ( !isset( $valid[$code] ) ) {
+ return wfMessage( 'translate-pref-editassistlang-bad', $code )->parseAsBlock();
+ }
+ }
+
+ return true;
+ }
+
+ /** @inheritDoc */
+ public function filter( $value, $alldata ) {
+ $value = parent::filter( $value, $alldata );
+
+ return implode( ', ', $this->tidy( $value ) );
+ }
+}
diff --git a/Translate/src/Utilities/JsSelectToInput.php b/Translate/src/Utilities/JsSelectToInput.php
new file mode 100644
index 00000000..35db8616
--- /dev/null
+++ b/Translate/src/Utilities/JsSelectToInput.php
@@ -0,0 +1,101 @@
+<?php
+declare( strict_types=1 );
+
+namespace MediaWiki\Extension\Translate\Utilities;
+
+use MWException;
+use RequestContext;
+use Xml;
+use XmlSelect;
+
+/**
+ * Code for JavaScript enhanced \<option> selectors.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+class JsSelectToInput {
+ /// Id of the text field where stuff is appended
+ protected $targetId;
+ /// Id of the \<option> field
+ protected $sourceId;
+ /** @var XmlSelect */
+ protected $select;
+ /// Id on the button
+ protected $buttonId;
+ /** @var string Text for the append button */
+ protected $msg = 'translate-jssti-add';
+
+ public function __construct( XmlSelect $select = null ) {
+ $this->select = $select;
+ }
+
+ public function getSourceId(): string {
+ return $this->sourceId;
+ }
+
+ public function setTargetId( string $id ) {
+ $this->targetId = $id;
+ }
+
+ public function getTargetId(): string {
+ return $this->targetId;
+ }
+
+ /** Set the message key. */
+ public function setMessage( string $message ): void {
+ $this->msg = $message;
+ }
+
+ /** @return string a message key. */
+ public function getMessage(): string {
+ return $this->msg;
+ }
+
+ /**
+ * Returns the whole input element and injects needed JavaScript
+ * @throws MWException
+ * @return string Html code.
+ */
+ public function getHtmlAndPrepareJS(): string {
+ $this->sourceId = $this->select->getAttribute( 'id' );
+
+ if ( !is_string( $this->sourceId ) ) {
+ throw new MWException( 'ID needs to be specified for the selector' );
+ }
+
+ self::injectJs();
+ $html = $this->select->getHTML();
+ $html .= $this->getButton( $this->msg, $this->sourceId, $this->targetId );
+
+ return $html;
+ }
+
+ /**
+ * Constructs the append button.
+ * @param string $msg Message key.
+ * @param string $source Html id.
+ * @param string $target Html id.
+ * @return string
+ */
+ protected function getButton( string $msg, string $source, string $target ): string {
+ $html = Xml::element( 'input', [
+ 'type' => 'button',
+ 'value' => wfMessage( $msg )->text(),
+ 'class' => 'mw-translate-jssti',
+ 'data-translate-jssti-sourceid' => $source,
+ 'data-translate-jssti-targetid' => $target
+ ] );
+
+ return $html;
+ }
+
+ /** Inject needed JavaScript in the page. */
+ public static function injectJs(): void {
+ static $done = false;
+ if ( $done ) {
+ return;
+ }
+
+ RequestContext::getMain()->getOutput()->addModules( 'ext.translate.selecttoinput' );
+ }
+}
diff --git a/Translate/src/Utilities/LanguagesMultiselectWidget.php b/Translate/src/Utilities/LanguagesMultiselectWidget.php
new file mode 100644
index 00000000..bd91a77e
--- /dev/null
+++ b/Translate/src/Utilities/LanguagesMultiselectWidget.php
@@ -0,0 +1,33 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Utilities;
+
+use MediaWiki\Widget\TagMultiselectWidget;
+
+/**
+ * Widget to select multiple languages.
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2020.07
+ */
+class LanguagesMultiselectWidget extends TagMultiselectWidget {
+ /** @var array */
+ private $languages;
+
+ public function __construct( array $config = [] ) {
+ parent::__construct( $config );
+ $this->languages = $config['languages'];
+ }
+
+ protected function getJavaScriptClassName() {
+ return 'LanguagesMultiselectWidget';
+ }
+
+ public function getConfig( &$config ) {
+ $config['languages'] = $this->languages;
+
+ return parent::getConfig( $config );
+ }
+}
diff --git a/Translate/src/Utilities/ParallelExecutor.php b/Translate/src/Utilities/ParallelExecutor.php
new file mode 100644
index 00000000..e53b9c3c
--- /dev/null
+++ b/Translate/src/Utilities/ParallelExecutor.php
@@ -0,0 +1,54 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Utilities;
+
+use MediaWiki\MediaWikiServices;
+
+/**
+ * Helper class for maintenance scripts to run things in parallel.
+ *
+ * See also ForkContoller and https://phabricator.wikimedia.org/T201970.
+ *
+ * @since 2020.11
+ * @license GPL-2.0-or-later
+ * @author Niklas Laxström
+ */
+class ParallelExecutor {
+ /** @var int[] */
+ private $pids = [];
+ /** @var int */
+ private $threads;
+
+ public function __construct( int $threads = 1 ) {
+ $this->threads = $threads;
+ }
+
+ public function runInParallel( callable $mainThread, callable $forkThread ): void {
+ // Fork to increase speed with parallelism. Also helps with memory usage if there are leaks.
+ $pid = -1;
+ if ( function_exists( 'pcntl_fork' ) ) {
+ $pid = pcntl_fork();
+ }
+
+ if ( $pid === 0 ) {
+ MediaWikiServices::resetChildProcessServices();
+ $forkThread();
+ exit();
+ } elseif ( $pid === -1 ) {
+ // Fork failed do it serialized
+ $forkThread();
+ } else {
+ // Main thread
+ $mainThread( $pid );
+ $this->pids[$pid] = true;
+
+ // If we hit the thread limit, wait for any child to finish.
+ if ( count( $this->pids ) >= $this->threads ) {
+ $status = 0;
+ $pid = pcntl_wait( $status );
+ unset( $this->pids[$pid] );
+ }
+ }
+ }
+}
diff --git a/Translate/src/Utilities/ParsingPlaceholderFactory.php b/Translate/src/Utilities/ParsingPlaceholderFactory.php
new file mode 100644
index 00000000..9bb381ce
--- /dev/null
+++ b/Translate/src/Utilities/ParsingPlaceholderFactory.php
@@ -0,0 +1,23 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Utilities;
+
+/**
+ * Create unique placeholders that can be used when parsing (wiki)text.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2020.07
+ */
+class ParsingPlaceholderFactory {
+ private $i = 0;
+
+ /** Return value is guaranteed to only contain [a-zA-Z0-9\x7f] */
+ public function make(): string {
+ return "\x7fUNIQ" .
+ dechex( mt_rand( 0, 0x7fffffff ) ) .
+ dechex( mt_rand( 0, 0x7fffffff ) ) .
+ '-' .
+ $this->i++;
+ }
+}
diff --git a/Translate/src/Utilities/SmartFormatPlural.php b/Translate/src/Utilities/SmartFormatPlural.php
new file mode 100644
index 00000000..c307b9ab
--- /dev/null
+++ b/Translate/src/Utilities/SmartFormatPlural.php
@@ -0,0 +1,64 @@
+<?php
+/**
+ * @file
+ * @license GPL-2.0-or-later
+ */
+
+namespace MediaWiki\Extension\Translate\Utilities;
+
+/**
+ * Implements partial support for SmartFormat plural syntax parsing.
+ * @see https://github.com/axuno/SmartFormat/wiki/Pluralization
+ * @since 2019.11
+ */
+class SmartFormatPlural {
+ /**
+ * Example input:
+ * {0} {0:message|messages} older than {1} {1:week|weeks} {0:has|have} been deleted.
+ * Example output:
+ * [
+ * '0' => [
+ * [
+ * 'forms' => [ 'message', 'messages' ],
+ * 'original' => '{0:message|messages}',
+ * ],
+ * [
+ * 'forms' => [ 'has', 'have' ],
+ * 'original' => '{0:has|have}',
+ * ],
+ * ],
+ * '1' => [
+ * [
+ * 'forms' => [ 'week', 'weeks' ],
+ * 'original' => '{1:week|weeks}',
+ * ],
+ * ],
+ * ]
+ *
+ * @param string $text
+ * @return array
+ */
+ public static function getPluralInstances( string $text ): array {
+ // ldns = Large Deeply-Nested Structure
+ $ldns = [];
+
+ // Named variables seem to be supported by the spec, but we limit ourselves
+ // only to numbers. Example syntax {0:message|messages}
+ $regex = '/\{(\d+):([^}]+)\}/Us';
+ $matches = [];
+ preg_match_all( $regex, $text, $matches, PREG_SET_ORDER );
+
+ foreach ( $matches as $instance ) {
+ $original = $instance[ 0 ];
+ $variable = $instance[ 1 ];
+ $forms = explode( '|', $instance[ 2 ] );
+ $ldns[ $variable ] = $ldns[ $variable ] ?? [];
+ $ldns[ $variable ][] = [
+ 'forms' => $forms,
+ 'original' => $original,
+ ];
+ }
+
+ return $ldns;
+ }
+}
diff --git a/Translate/src/Utilities/StringComparators/SimpleStringComparator.php b/Translate/src/Utilities/StringComparators/SimpleStringComparator.php
new file mode 100644
index 00000000..c2f24bbb
--- /dev/null
+++ b/Translate/src/Utilities/StringComparators/SimpleStringComparator.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Contains a simple string compare class.
+ * @license GPL-2.0-or-later
+ */
+
+namespace MediaWiki\Extension\Translate\Utilities\StringComparators;
+
+/**
+ * A simple string comparator, that compares two strings and determines if they are an exact match.
+ * @since 2019.10
+ */
+class SimpleStringComparator implements StringComparator {
+ /** @inheritDoc */
+ public function getSimilarity( $addedMessage, $deletedMessage ) {
+ if ( $addedMessage === $deletedMessage ) {
+ return 1;
+ }
+
+ if ( trim( mb_strtolower( $addedMessage ) ) === trim( mb_strtolower( $deletedMessage ) ) ) {
+ // This is an arbitrarily chosen number to differentiate it from an exact match.
+ return 0.95;
+ }
+
+ return 0;
+ }
+}
diff --git a/Translate/src/Utilities/StringComparators/StringComparator.php b/Translate/src/Utilities/StringComparators/StringComparator.php
new file mode 100644
index 00000000..15bbbb38
--- /dev/null
+++ b/Translate/src/Utilities/StringComparators/StringComparator.php
@@ -0,0 +1,18 @@
+<?php
+
+namespace MediaWiki\Extension\Translate\Utilities\StringComparators;
+
+/**
+ * An interface to be implemented by comparators that will compare percentage
+ * of similarity between strings.
+ */
+interface StringComparator {
+ /**
+ * Compares the two messages and returns a similarity percentage
+ *
+ * @param string $a
+ * @param string $b
+ * @return float 0-1 with 1 being an exact match
+ */
+ public function getSimilarity( $a, $b );
+}
diff --git a/Translate/src/Utilities/UnicodePlural.php b/Translate/src/Utilities/UnicodePlural.php
new file mode 100644
index 00000000..8e7788ed
--- /dev/null
+++ b/Translate/src/Utilities/UnicodePlural.php
@@ -0,0 +1,191 @@
+<?php
+/**
+ * @file
+ * @license GPL-2.0-or-later
+ */
+
+namespace MediaWiki\Extension\Translate\Utilities;
+
+use RuntimeException;
+use TranslateUtils;
+
+/** @since 2019.09 */
+class UnicodePlural {
+ private const PRE = '{{PLURAL|';
+ private const POST = '}}';
+
+ /**
+ * Returns CLDR plural rule for given language.
+ *
+ * @param string $code Language tag in MediaWiki internal format.
+ * @return array|null Empty string if no plural rule found
+ */
+ public static function getPluralKeywords( $code ) {
+ $filePath = __DIR__ . '/../../data/plural-cldr.json';
+ $ruleData = json_decode( file_get_contents( $filePath ), true );
+
+ $ruleSet = $ruleData[ 'supplemental' ][ 'plurals-type-cardinal' ][ $code ] ?? null;
+ if ( $ruleSet === null ) {
+ return null;
+ }
+
+ $keywords = [];
+ foreach ( array_keys( $ruleSet ) as $name ) {
+ $keywords[] = str_replace( 'pluralRule-count-', '', $name );
+ }
+
+ return $keywords;
+ }
+
+ /**
+ * Quick way to check if the text contains plural syntax.
+ *
+ * @param string $text
+ * @return bool
+ */
+ public static function hasPlural( $text ) {
+ return strpos( $text, self::PRE ) !== false;
+ }
+
+ /**
+ * Format plural forms map as single string suitable for translation.
+ *
+ * This does not check validity of forms. Use ::convertFormListToFormMap for that.
+ * @param string[] $forms
+ * @return string
+ */
+ public static function flattenMap( array $forms ) {
+ $list = [];
+ foreach ( $forms as $keyword => $value ) {
+ $list[] = [ $keyword, $value ];
+ }
+
+ return self::flattenList( $list );
+ }
+
+ /**
+ * Format plural forms list as single string.
+ *
+ * This does not check validity of forms.
+ * @param array[] $formList [ keyword, form ] pairs.
+ * @return string
+ */
+ public static function flattenList( array $formList ) {
+ $formatted = [];
+ foreach ( $formList as list( $keyword, $value ) ) {
+ $formatted[] = self::formatForm( $keyword, $value );
+ }
+
+ return self::PRE . implode( '|', $formatted ) . self::POST;
+ }
+
+ private static function formatForm( $keyword, $value ) {
+ $prefix = $keyword === 'other' ? '' : "$keyword=";
+ return $prefix . $value;
+ }
+
+ /**
+ * Format translation with plural forms as array of forms.
+ *
+ * Reverse of flatten. Do note that A may be != flatten( unflatten( A ) ) because
+ * translators can place part of the text outside the plural markup or use multiple
+ * instances of the markup.
+ *
+ * @param string $text
+ * @param string[] $expectedKeywords
+ * @return string[]
+ */
+ public static function unflatten( $text, $expectedKeywords ) {
+ list( $template, $instanceMap ) = self::parsePluralForms( $text );
+ return self::expandTemplate( $template, $instanceMap, $expectedKeywords );
+ }
+
+ /**
+ * Parses plural markup into a structure form.
+ *
+ * @param string $text
+ * @return array [ string $template, array $instanceMap ]
+ */
+ public static function parsePluralForms( $text ) {
+ $m = [];
+ $pre = preg_quote( self::PRE, '/' );
+ $post = preg_quote( self::POST, '/' );
+
+ $ok = preg_match_all( "/$pre(.*)$post/Us", $text, $m );
+ if ( $ok === false ) {
+ throw new RuntimeException( "Plural regular expression failed for text: $text" );
+ }
+
+ $template = $text;
+ $instanceMap = [];
+
+ foreach ( $m[0] as $instanceIndex => $instanceText ) {
+ $ph = TranslateUtils::getPlaceholder();
+
+ // Using preg_replace instead of str_replace because of the limit parameter
+ $pattern = '/' . preg_quote( $instanceText, '/' ) . '/';
+ $template = preg_replace( $pattern, $ph, $template, 1 );
+
+ $instanceForms = [];
+ foreach ( explode( '|', $m[ 1 ][ $instanceIndex ] ) as $form ) {
+ $m2 = [];
+ $ok = preg_match( "~\s*([a-z]+)\s*=(.+)~s", $form, $m2 );
+ $keyword = $ok ? $m2[ 1 ] : 'other';
+ $value = $ok ? trim( $m2[ 2 ] ) : $form;
+ $instanceForms[] = [ $keyword, $value ];
+ }
+
+ $instanceMap[$ph] = $instanceForms;
+ }
+
+ return [ $template, $instanceMap ];
+ }
+
+ /**
+ * Gives fully expanded forms given a template and parsed plural markup instances.
+ *
+ * @param string $template
+ * @param array $instanceMap
+ * @param string[] $expectedKeywords
+ * @return string[]
+ */
+ public static function expandTemplate( $template, array $instanceMap, $expectedKeywords ) {
+ $formArray = [];
+
+ // Convert from list of forms to map of forms for easier processing
+ foreach ( $instanceMap as $ph => $list ) {
+ $instanceMap[ $ph ] = self::convertFormListToFormMap( $list, $expectedKeywords );
+ }
+
+ foreach ( $expectedKeywords as $keyword ) {
+ // Start with the whole string
+ $form = $template;
+
+ // Loop over each plural markup instance and replace it with the plural form belonging
+ // to the current index
+ foreach ( $instanceMap as $ph => $instanceFormMap ) {
+ // For missing forms, fall back to empty text.
+ $replacement = $instanceFormMap[ $keyword ] ?? '';
+ $form = str_replace( $ph, $replacement, $form );
+ }
+
+ $formArray[ $keyword ] = $form;
+ }
+
+ return $formArray;
+ }
+
+ public static function convertFormListToFormMap( array $formList, array $expectedKeywords ) {
+ $formMap = [];
+ foreach ( $formList as list( $keyword, $value ) ) {
+ $formMap[ $keyword ] = $value;
+ }
+
+ $sortedFormMap = [];
+ foreach ( $expectedKeywords as $keyword ) {
+ $sortedFormMap[ $keyword ] = $formMap[ $keyword ] ?? null;
+ }
+
+ return $sortedFormMap;
+ }
+}
diff --git a/Translate/src/Validation/CheckTranslationActionApi.php b/Translate/src/Validation/CheckTranslationActionApi.php
new file mode 100644
index 00000000..6fac7db2
--- /dev/null
+++ b/Translate/src/Validation/CheckTranslationActionApi.php
@@ -0,0 +1,87 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Validation;
+
+use ApiBase;
+use FatMessage;
+use MessageHandle;
+use Title;
+use Wikimedia\ParamValidator\ParamValidator;
+
+/** @license GPL-2.0-or-later */
+class CheckTranslationActionApi extends ApiBase {
+ public function execute(): void {
+ $params = $this->extractRequestParams();
+
+ $title = Title::newFromText( $params[ 'title' ] );
+ if ( !$title ) {
+ $this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $params['title'] ) ] );
+ }
+ $handle = new MessageHandle( $title );
+ $translation = $params[ 'translation' ];
+
+ $validationResult = $this->validateTranslation( $handle, $translation );
+
+ $validationOutput = [ 'errors' => [], 'warnings' => [] ];
+ if ( $validationResult ) {
+ $validationOutput['errors'] =
+ $validationResult->getDescriptiveErrors( $this->getContext() );
+ $validationOutput['warnings'] =
+ $validationResult->getDescriptiveWarnings( $this->getContext() );
+ }
+
+ $this->getResult()->addValue( null, 'validation', $validationOutput );
+ }
+
+ private function validateTranslation( MessageHandle $handle, string $translation ): ?ValidationResult {
+ if ( $handle->isDoc() || !$handle->isValid() ) {
+ return null;
+ }
+
+ $messageValidator = $handle->getGroup()->getValidator();
+ if ( !$messageValidator ) {
+ return null;
+ }
+
+ $definition = $this->getDefinition( $handle );
+ if ( $definition === null ) {
+ // Very unlikely to happen since the handle is already found to be valid
+ return null;
+ }
+
+ $message = new FatMessage( $handle->getKey(), $definition );
+ $message->setTranslation( $translation );
+
+ $validationResult = $messageValidator->validateMessage( $message, $handle->getCode() );
+
+ return $validationResult;
+ }
+
+ private function getDefinition( MessageHandle $handle ): ?string {
+ $group = $handle->getGroup();
+ if ( method_exists( $group, 'getMessageContent' ) ) {
+ // @phan-suppress-next-line PhanUndeclaredMethod
+ return $group->getMessageContent( $handle );
+ } else {
+ return $group->getMessage( $handle->getKey(), $group->getSourceLanguage() );
+ }
+ }
+
+ protected function getAllowedParams(): array {
+ return [
+ 'title' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_REQUIRED => true,
+ ],
+ 'translation' => [
+ ParamValidator::PARAM_TYPE => 'string',
+ ParamValidator::PARAM_REQUIRED => true,
+ ],
+ ];
+ }
+
+ public function isInternal(): bool {
+ return true;
+ }
+}
diff --git a/Translate/src/Validation/MessageValidator.php b/Translate/src/Validation/MessageValidator.php
new file mode 100644
index 00000000..b7f1cd1f
--- /dev/null
+++ b/Translate/src/Validation/MessageValidator.php
@@ -0,0 +1,24 @@
+<?php
+/**
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Validation;
+
+use TMessage;
+
+/**
+ * Interim interface for message validators.
+ *
+ * In the future, it is expected that this will be deprecated and replaced with
+ * a MessageRecordValidator interface.
+ *
+ * @since 2020.06
+ */
+interface MessageValidator {
+ public function getIssues( TMessage $message, string $targetLanguage ): ValidationIssues;
+}
diff --git a/Translate/src/Validation/ValidationIssue.php b/Translate/src/Validation/ValidationIssue.php
new file mode 100644
index 00000000..1d544894
--- /dev/null
+++ b/Translate/src/Validation/ValidationIssue.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+namespace MediaWiki\Extension\Translate\Validation;
+
+/**
+ * Value object.
+ *
+ * @newable
+ * @since 2020.06
+ */
+class ValidationIssue {
+ /** @var string */
+ private $type;
+ /** @var string */
+ private $subType;
+ /** @var string */
+ private $messageKey;
+ /** @var array */
+ private $messageParams;
+
+ /** @stable for calling */
+ public function __construct(
+ string $type,
+ string $subType,
+ string $messageKey,
+ array $messageParams = []
+ ) {
+ $this->type = $type;
+ $this->subType = $subType;
+ $this->messageKey = $messageKey;
+ $this->messageParams = $messageParams;
+ }
+
+ public function type(): string {
+ return $this->type;
+ }
+
+ public function subType(): string {
+ return $this->subType;
+ }
+
+ public function messageKey(): string {
+ return $this->messageKey;
+ }
+
+ public function messageParams(): array {
+ return $this->messageParams;
+ }
+}
diff --git a/Translate/src/Validation/ValidationIssues.php b/Translate/src/Validation/ValidationIssues.php
new file mode 100644
index 00000000..fdaa0069
--- /dev/null
+++ b/Translate/src/Validation/ValidationIssues.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+namespace MediaWiki\Extension\Translate\Validation;
+
+use ArrayIterator;
+use Countable;
+use IteratorAggregate;
+use Traversable;
+
+/**
+ * Mutable collection for validation issues.
+ *
+ * @newable
+ * @since 2020.06
+ */
+class ValidationIssues implements Countable, IteratorAggregate {
+ /** @var ValidationIssue[] */
+ private $issues = [];
+
+ /** Add a new validation issue to the collection. */
+ public function add( ValidationIssue $issue ) {
+ $this->issues[] = $issue;
+ }
+
+ /** Merge another collection to this collection. */
+ public function merge( ValidationIssues $issues ) {
+ $this->issues = array_merge( $this->issues, $issues->issues );
+ }
+
+ /**
+ * Check whether this collection is not empty.
+ *
+ * @return bool False if empty, true otherwise
+ */
+ public function hasIssues(): bool {
+ return $this->issues !== [];
+ }
+
+ /** @return Traversable<ValidationIssue> */
+ public function getIterator(): Traversable {
+ return new ArrayIterator( $this->issues );
+ }
+
+ /** @inheritDoc */
+ public function count(): int {
+ return count( $this->issues );
+ }
+}
diff --git a/Translate/src/Validation/ValidationResult.php b/Translate/src/Validation/ValidationResult.php
new file mode 100644
index 00000000..ec7d3e0a
--- /dev/null
+++ b/Translate/src/Validation/ValidationResult.php
@@ -0,0 +1,102 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Validation;
+
+use IContextSource;
+use InvalidArgumentException;
+
+/**
+ * Container for validation issues returned by MessageValidator.
+ *
+ * @author Abijeet Patro
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2020.06 (originally 2019.06)
+ */
+class ValidationResult {
+ /** @var ValidationIssues */
+ protected $errors;
+ /** @var ValidationIssues */
+ protected $warnings;
+
+ public function __construct( ValidationIssues $errors, ValidationIssues $warnings ) {
+ $this->errors = $errors;
+ $this->warnings = $warnings;
+ }
+
+ public function hasIssues(): bool {
+ return $this->hasWarnings() || $this->hasErrors();
+ }
+
+ public function getIssues(): ValidationIssues {
+ $issues = new ValidationIssues();
+ $issues->merge( $this->errors );
+ $issues->merge( $this->warnings );
+ return $issues;
+ }
+
+ public function hasWarnings(): bool {
+ return $this->warnings->hasIssues();
+ }
+
+ public function hasErrors(): bool {
+ return $this->errors->hasIssues();
+ }
+
+ public function getWarnings(): ValidationIssues {
+ return $this->warnings;
+ }
+
+ public function getErrors(): ValidationIssues {
+ return $this->errors;
+ }
+
+ public function getDescriptiveWarnings( IContextSource $context ): array {
+ return $this->expandMessages( $context, $this->warnings );
+ }
+
+ public function getDescriptiveErrors( IContextSource $context ): array {
+ return $this->expandMessages( $context, $this->errors );
+ }
+
+ private function expandMessages( IContextSource $context, ValidationIssues $issues ): array {
+ $expandMessage = function ( ValidationIssue $issue ) use ( $context ): string {
+ $params = $this->fixMessageParams( $context, $issue->messageParams() );
+ return $context->msg( $issue->messageKey() )->params( $params )->parse();
+ };
+
+ return array_map( $expandMessage, iterator_to_array( $issues ) );
+ }
+
+ private function fixMessageParams( IContextSource $context, array $params ): array {
+ $out = [];
+ $lang = $context->getLanguage();
+
+ foreach ( $params as $param ) {
+ if ( !is_array( $param ) ) {
+ $out[] = $param;
+ } else {
+ [ $type, $value ] = $param;
+ if ( $type === 'COUNT' ) {
+ $out[] = $lang->formatNum( $value );
+ } elseif ( $type === 'PARAMS' ) {
+ $out[] = $lang->commaList( $value );
+ } elseif ( $type === 'PLAIN-PARAMS' ) {
+ $value = array_map( 'wfEscapeWikiText', $value );
+ $out[] = $lang->commaList( $value );
+ } elseif ( $type === 'PLAIN' ) {
+ $out[] = wfEscapeWikiText( $value );
+ } elseif ( $type === 'MESSAGE' ) {
+ $messageKey = array_shift( $value );
+ $messageParams = $this->fixMessageParams( $context, $value );
+ $out[] = $context->msg( $messageKey )->params( $messageParams );
+ } else {
+ throw new InvalidArgumentException( "Unknown type $type" );
+ }
+ }
+ }
+
+ return $out;
+ }
+}
diff --git a/Translate/src/Validation/ValidationRunner.php b/Translate/src/Validation/ValidationRunner.php
new file mode 100644
index 00000000..5e6c41da
--- /dev/null
+++ b/Translate/src/Validation/ValidationRunner.php
@@ -0,0 +1,385 @@
+<?php
+/**
+ * Message validation framework.
+ *
+ * @file
+ * @defgroup MessageValidator Message Validators
+ * @author Abijeet Patro
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+namespace MediaWiki\Extension\Translate\Validation;
+
+use Exception;
+use FormatJson;
+use InvalidArgumentException;
+use MediaWiki\Extension\Translate\Services;
+use MediaWiki\Extension\Translate\TranslatorInterface\Insertable\InsertablesSuggester;
+use PHPVariableLoader;
+use RuntimeException;
+use TMessage;
+
+/**
+ * Message validator is used to run validators to find common mistakes so that
+ * translators can fix them quickly. This is an improvement over the old Message
+ * Checker framework because it allows maintainers to enforce a validation so
+ * that translations that do not pass validation are not saved.
+ *
+ * To create your own validator, implement the MessageValidator interface.
+ *
+ * There are two types of notices - error and warning.
+ *
+ * @link https://www.mediawiki.org/wiki/Help:Extension:Translate/Group_configuration#VALIDATORS
+ * @link https://www.mediawiki.org/wiki/Help:Extension:Translate/Validators
+ *
+ * @ingroup MessageValidator
+ * @since 2019.06
+ */
+class ValidationRunner {
+ /** @var array List of validator data */
+ protected $validators = [];
+ /** @var string Message group id */
+ protected $groupId;
+ /** @var string[][] */
+ private static $ignorePatterns;
+
+ public function __construct( string $groupId ) {
+ if ( self::$ignorePatterns === null ) {
+ // TODO: Review if this logic belongs in this class.
+ self::reloadIgnorePatterns();
+ }
+
+ $this->groupId = $groupId;
+ }
+
+ /** Normalise validator keys. */
+ protected static function foldValue( string $value ): string {
+ return str_replace( ' ', '_', strtolower( $value ) );
+ }
+
+ /**
+ * Set the validators for this group.
+ *
+ * Removes the existing validators.
+ *
+ * @param array $validatorConfigs List of Validator configurations
+ * @see addValidator()
+ */
+ public function setValidators( array $validatorConfigs ): void {
+ $this->validators = [];
+ foreach ( $validatorConfigs as $config ) {
+ $this->addValidator( $config );
+ }
+ }
+
+ /** Add a validator for this group. */
+ public function addValidator( array $validatorConfig ): void {
+ $validatorId = $validatorConfig['id'] ?? null;
+ $className = $validatorConfig['class'] ?? null;
+
+ if ( $validatorId !== null ) {
+ $validator = ValidatorFactory::get(
+ $validatorId,
+ $validatorConfig['params'] ?? null
+ );
+ } elseif ( $className !== null ) {
+ $validator = ValidatorFactory::loadInstance(
+ $className,
+ $validatorConfig['params'] ?? null
+ );
+ } else {
+ throw new InvalidArgumentException(
+ 'Validator configuration does not specify the \'class\' or \'id\'.'
+ );
+ }
+
+ $isInsertable = $validatorConfig['insertable'] ?? false;
+ if ( $isInsertable && !$validator instanceof InsertablesSuggester ) {
+ $actualClassName = get_class( $validator );
+ throw new InvalidArgumentException(
+ "Insertable validator $actualClassName does not implement InsertablesSuggester interface."
+ );
+ }
+
+ $this->validators[] = [
+ 'instance' => $validator,
+ 'insertable' => $isInsertable,
+ 'enforce' => $validatorConfig['enforce'] ?? false,
+ 'include' => $validatorConfig['keymatch'] ?? $validatorConfig['include'] ?? false,
+ 'exclude' => $validatorConfig['exclude'] ?? false
+ ];
+ }
+
+ /**
+ * Return the currently set validators for this group.
+ *
+ * @return MessageValidator[] List of validators
+ */
+ public function getValidators(): array {
+ return array_map(
+ static function ( $validator ) {
+ return $validator['instance'];
+ },
+ $this->validators
+ );
+ }
+
+ /**
+ * Return currently set validators that are insertable.
+ *
+ * @return MessageValidator[] List of insertable
+ * validators
+ */
+ public function getInsertableValidators(): array {
+ $insertableValidators = [];
+ foreach ( $this->validators as $validator ) {
+ if ( $validator['insertable'] === true ) {
+ $insertableValidators[] = $validator['instance'];
+ }
+ }
+
+ return $insertableValidators;
+ }
+
+ /**
+ * Validate a translation of a message.
+ *
+ * Returns a ValidationResult that contains methods to print the issues.
+ */
+ public function validateMessage(
+ TMessage $message,
+ string $code,
+ bool $ignoreWarnings = false
+ ): ValidationResult {
+ $errors = new ValidationIssues();
+ $warnings = new ValidationIssues();
+
+ foreach ( $this->validators as $validator ) {
+ $this->runValidation(
+ $validator,
+ $message,
+ $code,
+ $errors,
+ $warnings,
+ $ignoreWarnings
+ );
+ }
+
+ $errors = $this->filterValidations( $message->key(), $errors, $code );
+ $warnings = $this->filterValidations( $message->key(), $warnings, $code );
+
+ return new ValidationResult( $errors, $warnings );
+ }
+
+ /** Validate a message, and return as soon as any validation fails. */
+ public function quickValidate(
+ TMessage $message,
+ string $code,
+ bool $ignoreWarnings = false
+ ): ValidationResult {
+ $errors = new ValidationIssues();
+ $warnings = new ValidationIssues();
+
+ foreach ( $this->validators as $validator ) {
+ $this->runValidation(
+ $validator,
+ $message,
+ $code,
+ $errors,
+ $warnings,
+ $ignoreWarnings
+ );
+
+ $errors = $this->filterValidations( $message->key(), $errors, $code );
+ $warnings = $this->filterValidations( $message->key(), $warnings, $code );
+
+ if ( $warnings->hasIssues() || $errors->hasIssues() ) {
+ break;
+ }
+ }
+
+ return new ValidationResult( $errors, $warnings );
+ }
+
+ /** @internal Should only be used by tests and inside this class. */
+ public static function reloadIgnorePatterns(): void {
+ $validationExclusionFile = Services::getInstance()->getConfigHelper()->getValidationExclusionFile();
+
+ if ( $validationExclusionFile === false ) {
+ self::$ignorePatterns = [];
+ return;
+ }
+
+ $list = PHPVariableLoader::loadVariableFromPHPFile(
+ $validationExclusionFile,
+ 'validationExclusionList'
+ );
+ $keys = [ 'group', 'check', 'subcheck', 'code', 'message' ];
+
+ if ( $list && !is_array( $list ) ) {
+ throw new InvalidArgumentException(
+ "validationExclusionList defined in $validationExclusionFile must be an array"
+ );
+ }
+
+ foreach ( $list as $key => $pattern ) {
+ foreach ( $keys as $checkKey ) {
+ if ( !isset( $pattern[$checkKey] ) ) {
+ $list[$key][$checkKey] = '#';
+ } elseif ( is_array( $pattern[$checkKey] ) ) {
+ $list[$key][$checkKey] =
+ array_map(
+ [ self::class, 'foldValue' ],
+ $pattern[$checkKey]
+ );
+ } else {
+ $list[$key][$checkKey] = self::foldValue( $pattern[$checkKey] );
+ }
+ }
+ }
+
+ self::$ignorePatterns = $list;
+ }
+
+ /** Filter validations based on a ignore list. */
+ private function filterValidations(
+ string $messageKey,
+ ValidationIssues $issues,
+ string $targetLanguage
+ ): ValidationIssues {
+ $filteredIssues = new ValidationIssues();
+
+ foreach ( $issues as $issue ) {
+ foreach ( self::$ignorePatterns as $pattern ) {
+ if ( $this->shouldIgnore( $messageKey, $issue, $this->groupId, $targetLanguage, $pattern ) ) {
+ continue 2;
+ }
+ }
+ $filteredIssues->add( $issue );
+ }
+
+ return $filteredIssues;
+ }
+
+ private function shouldIgnore(
+ string $messageKey,
+ ValidationIssue $issue,
+ string $messageGroupId,
+ string $targetLanguage,
+ array $pattern
+ ): bool {
+ return $this->matchesIgnorePattern( $pattern['group'], $messageGroupId )
+ && $this->matchesIgnorePattern( $pattern['check'], $issue->type() )
+ && $this->matchesIgnorePattern( $pattern['subcheck'], $issue->subType() )
+ && $this->matchesIgnorePattern( $pattern['message'], $messageKey )
+ && $this->matchesIgnorePattern( $pattern['code'], $targetLanguage );
+ }
+
+ /**
+ * Match validation information against a ignore pattern.
+ *
+ * @param string|string[] $pattern
+ * @param string $value The actual value in the validation produced by the validator
+ * @return bool True if the pattern matches the value.
+ */
+ private function matchesIgnorePattern( $pattern, string $value ): bool {
+ if ( $pattern === '#' ) {
+ return true;
+ } elseif ( is_array( $pattern ) ) {
+ return in_array( strtolower( $value ), $pattern, true );
+ } else {
+ return strtolower( $value ) === $pattern;
+ }
+ }
+
+ /**
+ * Check if key matches validator's key patterns.
+ * Only relevant if the 'include' or 'exclude' option is specified in the validator.
+ *
+ * @param string $key
+ * @param string[] $keyMatches
+ * @return bool True if the key matches one of the matchers, false otherwise.
+ */
+ protected function doesKeyMatch( string $key, array $keyMatches ): bool {
+ $normalizedKey = lcfirst( $key );
+ foreach ( $keyMatches as $match ) {
+ if ( is_string( $match ) ) {
+ if ( lcfirst( $match ) === $normalizedKey ) {
+ return true;
+ }
+ continue;
+ }
+
+ // The value is neither a string nor an array, should never happen but still handle it.
+ if ( !is_array( $match ) ) {
+ throw new InvalidArgumentException(
+ "Invalid key matcher configuration passed. Expected type: array or string. " .
+ "Received: " . gettype( $match ) . ". match value: " . FormatJson::encode( $match )
+ );
+ }
+
+ $matcherType = $match['type'];
+ $pattern = $match['pattern'];
+
+ // If regex matches, or wildcard matches return true, else continue processing.
+ if (
+ ( $matcherType === 'regex' && preg_match( $pattern, $normalizedKey ) === 1 ) ||
+ ( $matcherType === 'wildcard' && fnmatch( $pattern, $normalizedKey ) )
+ ) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Run the validator to produce warnings and errors.
+ *
+ * May also skip validation depending on validator configuration and $ignoreWarnings.
+ */
+ private function runValidation(
+ array $validatorData,
+ TMessage $message,
+ string $targetLanguage,
+ ValidationIssues $errors,
+ ValidationIssues $warnings,
+ bool $ignoreWarnings
+ ): void {
+ // Check if key match has been specified, and then check if the key matches it.
+ /** @var MessageValidator $validator */
+ $validator = $validatorData['instance'];
+
+ $definition = $message->definition();
+ if ( $definition === null ) {
+ // This should NOT happen, but add a check since it seems to be happening
+ // See: https://phabricator.wikimedia.org/T255669
+ return;
+ }
+
+ try {
+ $includedKeys = $validatorData['include'];
+ if ( $includedKeys !== false && !$this->doesKeyMatch( $message->key(), $includedKeys ) ) {
+ return;
+ }
+
+ $excludedKeys = $validatorData['exclude'];
+ if ( $excludedKeys !== false && $this->doesKeyMatch( $message->key(), $excludedKeys ) ) {
+ return;
+ }
+
+ if ( $validatorData['enforce'] === true ) {
+ $errors->merge( $validator->getIssues( $message, $targetLanguage ) );
+ } elseif ( !$ignoreWarnings ) {
+ $warnings->merge( $validator->getIssues( $message, $targetLanguage ) );
+ }
+ // else: caller does not want warnings, skip running the validator
+ } catch ( Exception $e ) {
+ throw new RuntimeException(
+ 'An error occurred while validating message: ' . $message->key() . '; group: ' .
+ $this->groupId . "; validator: " . get_class( $validator ) . "\n. Exception: $e"
+ );
+ }
+ }
+}
diff --git a/Translate/src/Validation/ValidatorFactory.php b/Translate/src/Validation/ValidatorFactory.php
new file mode 100644
index 00000000..f3942a09
--- /dev/null
+++ b/Translate/src/Validation/ValidatorFactory.php
@@ -0,0 +1,113 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Validation;
+
+use InvalidArgumentException;
+use MediaWiki\Extension\Translate\Validation\Validators\BraceBalanceValidator;
+use MediaWiki\Extension\Translate\Validation\Validators\EscapeCharacterValidator;
+use MediaWiki\Extension\Translate\Validation\Validators\GettextNewlineValidator;
+use MediaWiki\Extension\Translate\Validation\Validators\GettextPluralValidator;
+use MediaWiki\Extension\Translate\Validation\Validators\InsertableRegexValidator;
+use MediaWiki\Extension\Translate\Validation\Validators\InsertableRubyVariableValidator;
+use MediaWiki\Extension\Translate\Validation\Validators\IosVariableValidator;
+use MediaWiki\Extension\Translate\Validation\Validators\MatchSetValidator;
+use MediaWiki\Extension\Translate\Validation\Validators\MediaWikiLinkValidator;
+use MediaWiki\Extension\Translate\Validation\Validators\MediaWikiPageNameValidator;
+use MediaWiki\Extension\Translate\Validation\Validators\MediaWikiParameterValidator;
+use MediaWiki\Extension\Translate\Validation\Validators\MediaWikiPluralValidator;
+use MediaWiki\Extension\Translate\Validation\Validators\MediaWikiTimeListValidator;
+use MediaWiki\Extension\Translate\Validation\Validators\NewlineValidator;
+use MediaWiki\Extension\Translate\Validation\Validators\NotEmptyValidator;
+use MediaWiki\Extension\Translate\Validation\Validators\NumericalParameterValidator;
+use MediaWiki\Extension\Translate\Validation\Validators\PrintfValidator;
+use MediaWiki\Extension\Translate\Validation\Validators\PythonInterpolationValidator;
+use MediaWiki\Extension\Translate\Validation\Validators\ReplacementValidator;
+use MediaWiki\Extension\Translate\Validation\Validators\SmartFormatPluralValidator;
+use MediaWiki\Extension\Translate\Validation\Validators\UnicodePluralValidator;
+use MediaWiki\MediaWikiServices;
+
+/**
+ * A factory class used to instantiate instances of pre-provided Validators
+ *
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2019.06
+ */
+class ValidatorFactory {
+ /** @var string[] */
+ private static $validators = [
+ 'BraceBalance' => BraceBalanceValidator::class,
+ 'EscapeCharacter' => EscapeCharacterValidator::class,
+ 'GettextNewline' => GettextNewlineValidator::class,
+ 'GettextPlural' => GettextPluralValidator::class,
+ 'InsertableRegex' => InsertableRegexValidator::class,
+ 'InsertableRubyVariable' => InsertableRubyVariableValidator::class,
+ 'IosVariable' => IosVariableValidator::class,
+ 'MatchSet' => MatchSetValidator::class,
+ 'MediaWikiLink' => MediaWikiLinkValidator::class,
+ 'MediaWikiPageName' => MediaWikiPageNameValidator::class,
+ 'MediaWikiParameter' => MediaWikiParameterValidator::class,
+ 'MediaWikiPlural' => [
+ 'class' => MediaWikiPluralValidator::class,
+ 'services' => [
+ 'LanguageFactory',
+ 'ParserFactory',
+ 'UserFactory'
+ ]
+ ],
+ 'MediaWikiTimeList' => MediaWikiTimeListValidator::class,
+ 'Newline' => NewlineValidator::class,
+ 'NotEmpty' => NotEmptyValidator::class,
+ 'NumericalParameter' => NumericalParameterValidator::class,
+ 'Printf' => PrintfValidator::class,
+ 'PythonInterpolation' => PythonInterpolationValidator::class,
+ 'Replacement' => ReplacementValidator::class,
+ 'SmartFormatPlural' => SmartFormatPluralValidator::class,
+ 'UnicodePlural' => UnicodePluralValidator::class,
+ ];
+
+ /**
+ * Returns a validator instance based on the id specified
+ *
+ * @param string $id Id of the pre-defined validator class
+ * @param mixed|null $params
+ * @throws InvalidArgumentException
+ * @return MessageValidator
+ */
+ public static function get( $id, $params = null ) {
+ if ( !isset( self::$validators[ $id ] ) ) {
+ throw new InvalidArgumentException( "Could not find validator with id - '$id'. " );
+ }
+
+ $spec = self::$validators[ $id ];
+ if ( is_string( $spec ) ) {
+ $spec = [ 'class' => $spec ];
+ }
+
+ if ( $params ) {
+ // Pass the given params as one item, instead of expanding
+ $spec['args'] = [ $params ];
+ }
+
+ // Phan seems to misunderstand the param type as callable instead of an array
+ // @phan-suppress-next-line PhanTypeInvalidCallableArraySize
+ return MediaWikiServices::getInstance()->getObjectFactory()->createObject( $spec );
+ }
+
+ /**
+ * Takes a Validator class name, and returns an instance of that class.
+ *
+ * @param string $class Custom validator class name
+ * @param mixed|null $params
+ * @throws InvalidArgumentException
+ * @return MessageValidator
+ */
+ public static function loadInstance( $class, $params = null ): MessageValidator {
+ if ( !class_exists( $class ) ) {
+ throw new InvalidArgumentException( "Could not find validator class - '$class'. " );
+ }
+
+ return new $class( $params );
+ }
+}
diff --git a/Translate/src/Validation/Validators/BraceBalanceValidator.php b/Translate/src/Validation/Validators/BraceBalanceValidator.php
new file mode 100644
index 00000000..32cd3ec0
--- /dev/null
+++ b/Translate/src/Validation/Validators/BraceBalanceValidator.php
@@ -0,0 +1,55 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Validation\Validators;
+
+use MediaWiki\Extension\Translate\Validation\MessageValidator;
+use MediaWiki\Extension\Translate\Validation\ValidationIssue;
+use MediaWiki\Extension\Translate\Validation\ValidationIssues;
+use TMessage;
+
+/**
+ * Handles brace balance validation
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2019.06
+ */
+class BraceBalanceValidator implements MessageValidator {
+ public function getIssues( TMessage $message, string $targetLanguage ): ValidationIssues {
+ $definition = $message->definition();
+ $translation = $message->translation();
+ $balanceIssues = [];
+ $braceTypes = [
+ [ '{', '}' ],
+ [ '[', ']' ],
+ [ '(', ')' ],
+ ];
+
+ foreach ( $braceTypes as [ $open, $close ] ) {
+ $definitionBalance = $this->getBalance( $definition, $open, $close );
+ $translationBalance = $this->getBalance( $translation, $open, $close );
+
+ if ( $definitionBalance === 0 && $translationBalance !== 0 ) {
+ $balanceIssues[] = "$open$close: $translationBalance";
+ }
+ }
+
+ $issues = new ValidationIssues();
+ if ( $balanceIssues ) {
+ $params = [
+ [ 'PARAMS', $balanceIssues ],
+ [ 'COUNT', count( $balanceIssues ) ],
+ ];
+
+ // Create an issue if braces are unbalanced in translation, but balanced in the definition
+ $issue = new ValidationIssue( 'balance', 'brace', 'translate-checks-balance', $params );
+ $issues->add( $issue );
+ }
+
+ return $issues;
+ }
+
+ private function getBalance( string $source, string $str1, string $str2 ): int {
+ return substr_count( $source, $str1 ) - substr_count( $source, $str2 );
+ }
+}
diff --git a/Translate/src/Validation/Validators/EscapeCharacterValidator.php b/Translate/src/Validation/Validators/EscapeCharacterValidator.php
new file mode 100644
index 00000000..08a466ef
--- /dev/null
+++ b/Translate/src/Validation/Validators/EscapeCharacterValidator.php
@@ -0,0 +1,89 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Validation\Validators;
+
+use InvalidArgumentException;
+use MediaWiki\Extension\Translate\Validation\MessageValidator;
+use MediaWiki\Extension\Translate\Validation\ValidationIssue;
+use MediaWiki\Extension\Translate\Validation\ValidationIssues;
+use TMessage;
+
+/**
+ * Ensures that only the specified escape characters are present.
+ * @license GPL-2.0-or-later
+ * @since 2020.01
+ */
+class EscapeCharacterValidator implements MessageValidator {
+ /** @var string[] */
+ protected $allowedCharacters;
+ /** @var string */
+ protected $regex;
+
+ /** List of valid escape characters recognized. */
+ private const VALID_CHARS = [ '\t', '\n', '\\\'', '\"', '\f', '\r', '\a', '\b', '\\\\' ];
+
+ public function __construct( array $params ) {
+ $this->allowedCharacters = $params['values'] ?? [];
+
+ if ( $this->allowedCharacters === [] || !is_array( $this->allowedCharacters ) ) {
+ throw new InvalidArgumentException(
+ 'No values provided for EscapeCharacter validator.'
+ );
+ }
+
+ $this->regex = $this->buildRegex( $this->allowedCharacters );
+ }
+
+ public function getIssues( TMessage $message, string $targetLanguage ): ValidationIssues {
+ $issues = new ValidationIssues();
+ $translation = $message->translation();
+ preg_match_all( "/$this->regex/U", $translation, $transVars );
+
+ // Check for missing variables in the translation
+ $params = $transVars[0];
+ if ( count( $params ) ) {
+ $messageParams = [
+ [ 'PARAMS', $params ],
+ [ 'COUNT', count( $params ) ],
+ [ 'PARAMS', $this->allowedCharacters ],
+ [ 'COUNT', count( $this->allowedCharacters ) ]
+ ];
+
+ $issue =
+ new ValidationIssue(
+ 'escape', 'invalid', 'translate-checks-escape', $messageParams
+ );
+ $issues->add( $issue );
+ }
+
+ return $issues;
+ }
+
+ private function buildRegex( array $allowedCharacters ): string {
+ $regex = '\\\\[^';
+ $prefix = '';
+ foreach ( $allowedCharacters as $character ) {
+ if ( !in_array( $character, self::VALID_CHARS ) ) {
+ throw new InvalidArgumentException(
+ "Invalid escape character encountered: $character during configuration." .
+ 'Valid escape characters include: ' . implode( ', ', self::VALID_CHARS )
+ );
+ }
+
+ if ( $character !== '\\' ) {
+ $character = stripslashes( $character );
+ // negative look ahead, to avoid "\\ " being treated as an accidental escape
+ $prefix = '(?<!\\\\)';
+ }
+
+ // This is done because in the regex we need slashes for some characters such as
+ // \", \', but not for others such as \n, \t etc
+ $normalizedChar = addslashes( $character );
+ $regex .= $normalizedChar;
+ }
+ $regex .= ']';
+
+ return $prefix . $regex;
+ }
+}
diff --git a/Translate/src/Validation/Validators/GettextNewlineValidator.php b/Translate/src/Validation/Validators/GettextNewlineValidator.php
new file mode 100644
index 00000000..46172b04
--- /dev/null
+++ b/Translate/src/Validation/Validators/GettextNewlineValidator.php
@@ -0,0 +1,47 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Validation\Validators;
+
+use MediaWiki\Extension\Translate\Validation\ValidationIssues;
+use TMessage;
+
+/**
+ * Ensures that the translation has the same number of newlines as the source
+ * message at the beginning and end of the string. This works specifically
+ * for GettextFFS.
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2019.09
+ */
+class GettextNewlineValidator extends NewlineValidator {
+ public function getIssues( TMessage $message, string $targetLanguage ): ValidationIssues {
+ $translation = $message->translation();
+ $definition = $message->definition();
+
+ // ending newlines in GetText are bounded by a "\"
+ $definition = $this->removeTrailingSlash( $definition );
+ $translation = $this->removeTrailingSlash( $translation );
+
+ $definitionStartNewline = $this->getStartingNewLinesCount( $definition );
+ $definitionEndNewline = $this->getEndingNewLineCount( $definition );
+
+ $translationStartNewline = $this->getStartingNewLinesCount( $translation );
+ $translationEndNewline = $this->getEndingNewLineCount( $translation );
+
+ $failingChecks = array_merge(
+ $this->validateStartingNewline( $definitionStartNewline, $translationStartNewline ),
+ $this->validateEndingNewline( $definitionEndNewline, $translationEndNewline )
+ );
+
+ return $this->createIssues( $failingChecks );
+ }
+
+ private function removeTrailingSlash( string $str ): string {
+ if ( substr( $str, -strlen( '\\' ) ) === '\\' ) {
+ return substr( $str, 0, -1 );
+ }
+
+ return $str;
+ }
+}
diff --git a/Translate/src/Validation/Validators/GettextPluralValidator.php b/Translate/src/Validation/Validators/GettextPluralValidator.php
new file mode 100644
index 00000000..0fdc5a59
--- /dev/null
+++ b/Translate/src/Validation/Validators/GettextPluralValidator.php
@@ -0,0 +1,106 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Validation\Validators;
+
+use MediaWiki\Extension\Translate\Utilities\GettextPlural;
+use MediaWiki\Extension\Translate\Validation\MessageValidator;
+use MediaWiki\Extension\Translate\Validation\ValidationIssue;
+use MediaWiki\Extension\Translate\Validation\ValidationIssues;
+use TMessage;
+
+/**
+ * @license GPL-2.0-or-later
+ * @since 2019.09
+ */
+class GettextPluralValidator implements MessageValidator {
+ public function getIssues( TMessage $message, string $targetLanguage ): ValidationIssues {
+ $issues = new ValidationIssues();
+
+ $pluralRule = GettextPlural::getPluralRule( $targetLanguage );
+ // Skip validation for languages for which we do not know the plural rule
+ if ( !$pluralRule ) {
+ return $issues;
+ }
+
+ $definition = $message->definition();
+ $translation = $message->translation();
+ $expectedPluralCount = GettextPlural::getPluralCount( $pluralRule );
+ $definitionHasPlural = GettextPlural::hasPlural( $definition );
+ $translationHasPlural = GettextPlural::hasPlural( $translation );
+
+ $presence = $this->pluralPresenceCheck(
+ $definitionHasPlural,
+ $translationHasPlural,
+ $expectedPluralCount
+ );
+
+ if ( $presence === 'ok' ) {
+ [ $msgcode, $data ] = $this->pluralFormCountCheck( $translation, $expectedPluralCount );
+ if ( $msgcode === 'invalid-count' ) {
+ $issue = new ValidationIssue(
+ 'plural',
+ 'forms',
+ 'translate-checks-gettext-plural-count',
+ [
+ [ 'COUNT', $expectedPluralCount ],
+ [ 'COUNT', $data[ 'count' ] ],
+ ]
+ );
+ $issues->add( $issue );
+ }
+ } elseif ( $presence === 'missing' ) {
+ $issue = new ValidationIssue(
+ 'plural',
+ 'missing',
+ 'translate-checks-gettext-plural-missing'
+ );
+ $issues->add( $issue );
+ } elseif ( $presence === 'unsupported' ) {
+ $issue = new ValidationIssue(
+ 'plural',
+ 'unsupported',
+ 'translate-checks-gettext-plural-unsupported'
+ );
+ $issues->add( $issue );
+ }
+ // else not-applicable: Plural is not present in translation, but that is fine
+
+ return $issues;
+ }
+
+ private function pluralPresenceCheck(
+ $definitionHasPlural,
+ $translationHasPlural,
+ $expectedPluralCount
+ ) {
+ if ( !$definitionHasPlural && $translationHasPlural ) {
+ return 'unsupported';
+ } elseif ( $definitionHasPlural && !$translationHasPlural ) {
+ if ( $expectedPluralCount > 1 ) {
+ return 'missing';
+ } else {
+ // It's okay to omit plural completely for languages without variance
+ return 'not-applicable';
+ }
+ } elseif ( !$definitionHasPlural && !$translationHasPlural ) {
+ return 'not-applicable';
+ }
+
+ // Both have plural
+ return 'ok';
+ }
+
+ private function pluralFormCountCheck( $text, $expectedPluralCount ) {
+ [ , $instanceMap ] = GettextPlural::parsePluralForms( $text );
+
+ foreach ( $instanceMap as $forms ) {
+ $formsCount = count( $forms );
+ if ( $formsCount !== $expectedPluralCount ) {
+ return [ 'invalid-count', [ 'count' => $formsCount ] ];
+ }
+ }
+
+ return [ 'ok', [] ];
+ }
+}
diff --git a/Translate/src/Validation/Validators/InsertableRegexValidator.php b/Translate/src/Validation/Validators/InsertableRegexValidator.php
new file mode 100644
index 00000000..2c6f1198
--- /dev/null
+++ b/Translate/src/Validation/Validators/InsertableRegexValidator.php
@@ -0,0 +1,78 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Validation\Validators;
+
+use InvalidArgumentException;
+use MediaWiki\Extension\Translate\TranslatorInterface\Insertable\RegexInsertablesSuggester;
+use MediaWiki\Extension\Translate\Validation\MessageValidator;
+use MediaWiki\Extension\Translate\Validation\ValidationIssue;
+use MediaWiki\Extension\Translate\Validation\ValidationIssues;
+use TMessage;
+
+/**
+ * A generic regex validator and insertable that can be reused by other classes.
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2019.06
+ */
+class InsertableRegexValidator extends RegexInsertablesSuggester implements MessageValidator {
+ /** @var string */
+ private $validationRegex;
+
+ public function __construct( $params ) {
+ parent::__construct( $params );
+
+ if ( is_string( $params ) ) {
+ $this->validationRegex = $params;
+ } elseif ( is_array( $params ) ) {
+ $this->validationRegex = $params['regex'] ?? null;
+ }
+
+ if ( $this->validationRegex === null ) {
+ throw new InvalidArgumentException( 'The configuration for InsertableRegexValidator does not ' .
+ 'specify a regular expression.' );
+ }
+ }
+
+ public function getIssues( TMessage $message, string $targetLanguage ): ValidationIssues {
+ $issues = new ValidationIssues();
+
+ preg_match_all( $this->validationRegex, $message->definition(), $definitionMatch );
+ preg_match_all( $this->validationRegex, $message->translation(), $translationMatch );
+ $definitionVariables = $definitionMatch[0];
+ $translationVariables = $translationMatch[0];
+
+ $missingVariables = array_diff( $definitionVariables, $translationVariables );
+ if ( $missingVariables ) {
+ $issue = new ValidationIssue(
+ 'variable',
+ 'missing',
+ 'translate-checks-parameters',
+ [
+ [ 'PLAIN-PARAMS', $missingVariables ],
+ [ 'COUNT', count( $missingVariables ) ]
+ ]
+ );
+
+ $issues->add( $issue );
+ }
+
+ $unknownVariables = array_diff( $translationVariables, $definitionVariables );
+ if ( $unknownVariables ) {
+ $issue = new ValidationIssue(
+ 'variable',
+ 'unknown',
+ 'translate-checks-parameters-unknown',
+ [
+ [ 'PLAIN-PARAMS', $unknownVariables ],
+ [ 'COUNT', count( $unknownVariables ) ]
+ ]
+ );
+
+ $issues->add( $issue );
+ }
+
+ return $issues;
+ }
+}
diff --git a/Translate/src/Validation/Validators/InsertableRubyVariableValidator.php b/Translate/src/Validation/Validators/InsertableRubyVariableValidator.php
new file mode 100644
index 00000000..eda700a1
--- /dev/null
+++ b/Translate/src/Validation/Validators/InsertableRubyVariableValidator.php
@@ -0,0 +1,16 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Validation\Validators;
+
+/**
+ * An insertable Ruby variable validator that also acts as an InsertableSuggester
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2019.06
+ */
+class InsertableRubyVariableValidator extends InsertableRegexValidator {
+ public function __construct() {
+ parent::__construct( '/%{[a-zA-Z_]+}/' );
+ }
+}
diff --git a/Translate/src/Validation/Validators/IosVariableValidator.php b/Translate/src/Validation/Validators/IosVariableValidator.php
new file mode 100644
index 00000000..dcb0142d
--- /dev/null
+++ b/Translate/src/Validation/Validators/IosVariableValidator.php
@@ -0,0 +1,21 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Validation\Validators;
+
+// phpcs:disable Generic.Files.LineLength.TooLong
+/**
+ * An insertable IOS variable validator.
+ * See: https://github.com/dcordero/Rubustrings/blob/61d477bffbb318ca3ffed9c2afc49ec301931d93/lib/rubustrings/action.rb#L91
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2020.03
+ */
+class IosVariableValidator extends InsertableRegexValidator {
+ public function __construct() {
+ parent::__construct(
+ "/%(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|\'[^$])?" .
+ "(-)?(\d+)?(?:\.(\d+))?(hh|ll|[hlLzjt])?([b-fiosuxX@])/"
+ );
+ }
+}
diff --git a/Translate/src/Validation/Validators/MatchSetValidator.php b/Translate/src/Validation/Validators/MatchSetValidator.php
new file mode 100644
index 00000000..70c4f836
--- /dev/null
+++ b/Translate/src/Validation/Validators/MatchSetValidator.php
@@ -0,0 +1,64 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Validation\Validators;
+
+use InvalidArgumentException;
+use MediaWiki\Extension\Translate\Validation\MessageValidator;
+use MediaWiki\Extension\Translate\Validation\ValidationIssue;
+use MediaWiki\Extension\Translate\Validation\ValidationIssues;
+use TMessage;
+
+/**
+ * Ensures that the translation for a message matches a value from a list.
+ * @license GPL-2.0-or-later
+ * @since 2019.12
+ */
+class MatchSetValidator implements MessageValidator {
+ /** @var string[] */
+ protected $possibleValues;
+ /** @var string[] */
+ protected $normalizedValues;
+ /** @var bool */
+ protected $caseSensitive;
+
+ public function __construct( array $params ) {
+ $this->possibleValues = $params['values'] ?? [];
+ $this->caseSensitive = (bool)( $params['caseSensitive'] ?? true );
+
+ if ( $this->possibleValues === [] ) {
+ throw new InvalidArgumentException( 'No values provided for MatchSet validator.' );
+ }
+
+ if ( $this->caseSensitive ) {
+ $this->normalizedValues = $this->possibleValues;
+ } else {
+ $this->normalizedValues = array_map( 'strtolower', $this->possibleValues );
+ }
+ }
+
+ public function getIssues( TMessage $message, string $targetLanguage ): ValidationIssues {
+ $issues = new ValidationIssues();
+
+ $translation = $message->translation();
+ if ( $this->caseSensitive ) {
+ $translation = strtolower( $translation );
+ }
+
+ if ( array_search( $translation, $this->normalizedValues, true ) === false ) {
+ $issue = new ValidationIssue(
+ 'value-not-present',
+ 'invalid',
+ 'translate-checks-value-not-present',
+ [
+ [ 'PLAIN-PARAMS', $this->possibleValues ],
+ [ 'COUNT', count( $this->possibleValues ) ]
+ ]
+ );
+
+ $issues->add( $issue );
+ }
+
+ return $issues;
+ }
+}
diff --git a/Translate/src/Validation/Validators/MediaWikiLinkValidator.php b/Translate/src/Validation/Validators/MediaWikiLinkValidator.php
new file mode 100644
index 00000000..df6c7ebc
--- /dev/null
+++ b/Translate/src/Validation/Validators/MediaWikiLinkValidator.php
@@ -0,0 +1,72 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Validation\Validators;
+
+use MediaWiki\Extension\Translate\Validation\MessageValidator;
+use MediaWiki\Extension\Translate\Validation\ValidationIssue;
+use MediaWiki\Extension\Translate\Validation\ValidationIssues;
+use TMessage;
+
+/**
+ * Checks if the translation uses links that are discouraged. Valid links are those that link
+ * to Special: or {{ns:special}}: or project pages trough MediaWiki messages like
+ * {{MediaWiki:helppage-url}}:. Also links in the definition are allowed.
+ * @license GPL-2.0-or-later
+ * @since 2020.02
+ */
+class MediaWikiLinkValidator implements MessageValidator {
+ public function getIssues( TMessage $message, string $targetLanguage ): ValidationIssues {
+ $issues = new ValidationIssues();
+
+ $definition = $message->definition();
+ $translation = $message->translation();
+
+ $links = $this->getLinksMissingInTarget( $definition, $translation );
+ if ( $links !== [] ) {
+ $issue = new ValidationIssue(
+ 'links',
+ 'missing',
+ 'translate-checks-links-missing',
+ [
+ [ 'PARAMS', $links ],
+ [ 'COUNT', count( $links ) ],
+ ]
+ );
+ $issues->add( $issue );
+ }
+
+ $links = $this->getLinksMissingInTarget( $translation, $definition );
+ if ( $links !== [] ) {
+ $issue = new ValidationIssue(
+ 'links',
+ 'extra',
+ 'translate-checks-links',
+ [
+ [ 'PARAMS', $links ],
+ [ 'COUNT', count( $links ) ],
+ ]
+ );
+ $issues->add( $issue );
+ }
+
+ return $issues;
+ }
+
+ private function getLinksMissingInTarget( string $source, string $target ): array {
+ global $wgLegalTitleChars;
+ $tc = $wgLegalTitleChars . '#%{}';
+ $matches = $links = [];
+
+ preg_match_all( "/\[\[([{$tc}]+)(\\|(.+?))?]]/sDu", $source, $matches );
+ $count = count( $matches[0] );
+ for ( $i = 0; $i < $count; $i++ ) {
+ $backMatch = preg_quote( $matches[1][$i], '/' );
+ if ( preg_match( "/\[\[$backMatch/", $target ) !== 1 ) {
+ $links[] = "[[{$matches[1][$i]}{$matches[2][$i]}]]";
+ }
+ }
+
+ return $links;
+ }
+}
diff --git a/Translate/src/Validation/Validators/MediaWikiPageNameValidator.php b/Translate/src/Validation/Validators/MediaWikiPageNameValidator.php
new file mode 100644
index 00000000..815d1963
--- /dev/null
+++ b/Translate/src/Validation/Validators/MediaWikiPageNameValidator.php
@@ -0,0 +1,39 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Validation\Validators;
+
+use MediaWiki\Extension\Translate\Validation\MessageValidator;
+use MediaWiki\Extension\Translate\Validation\ValidationIssue;
+use MediaWiki\Extension\Translate\Validation\ValidationIssues;
+use TMessage;
+
+/**
+ * Ensures that translations do not translate namespaces.
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2020.02
+ */
+class MediaWikiPageNameValidator implements MessageValidator {
+ public function getIssues( TMessage $message, string $targetLanguage ): ValidationIssues {
+ $issues = new ValidationIssues();
+
+ $definition = $message->definition();
+ $translation = $message->translation();
+
+ $namespaces = 'help|project|\{\{ns:project}}|mediawiki';
+ $matches = [];
+ if ( preg_match( "/^($namespaces):[\w\s]+$/ui", $definition, $matches ) &&
+ !preg_match( "/^{$matches[1]}:.+$/u", $translation )
+ ) {
+ $issue = new ValidationIssue(
+ 'pagename',
+ 'namespace',
+ 'translate-checks-pagename'
+ );
+ $issues->add( $issue );
+ }
+
+ return $issues;
+ }
+}
diff --git a/Translate/src/Validation/Validators/MediaWikiParameterValidator.php b/Translate/src/Validation/Validators/MediaWikiParameterValidator.php
new file mode 100644
index 00000000..66d9aecb
--- /dev/null
+++ b/Translate/src/Validation/Validators/MediaWikiParameterValidator.php
@@ -0,0 +1,15 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Validation\Validators;
+
+/**
+ * An insertable wiki parameter validator that also acts as an InsertableSuggester
+ * @license GPL-2.0-or-later
+ * @since 2019.12
+ */
+class MediaWikiParameterValidator extends InsertableRegexValidator {
+ public function __construct() {
+ parent::__construct( '/\$[1-9]/' );
+ }
+}
diff --git a/Translate/src/Validation/Validators/MediaWikiPluralValidator.php b/Translate/src/Validation/Validators/MediaWikiPluralValidator.php
new file mode 100644
index 00000000..507e56cc
--- /dev/null
+++ b/Translate/src/Validation/Validators/MediaWikiPluralValidator.php
@@ -0,0 +1,162 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Validation\Validators;
+
+use MediaWiki\Extension\Translate\Validation\MessageValidator;
+use MediaWiki\Extension\Translate\Validation\ValidationIssue;
+use MediaWiki\Extension\Translate\Validation\ValidationIssues;
+use MediaWiki\Languages\LanguageFactory;
+use MediaWiki\User\UserFactory;
+use Parser;
+use ParserFactory;
+use ParserOptions;
+use PPFrame;
+use TMessage;
+
+/**
+ * Handles plural validation for MediaWiki inline plural syntax.
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2019.06
+ */
+class MediaWikiPluralValidator implements MessageValidator {
+ /** @var LanguageFactory */
+ private $languageFactory;
+ /** @var ParserFactory */
+ private $parserFactory;
+ /** @var UserFactory */
+ private $userFactory;
+
+ public function __construct(
+ LanguageFactory $languageFactory,
+ ParserFactory $parserFactory,
+ UserFactory $userFactory
+ ) {
+ $this->languageFactory = $languageFactory;
+ $this->parserFactory = $parserFactory;
+ $this->userFactory = $userFactory;
+ }
+
+ public function getIssues( TMessage $message, string $targetLanguage ): ValidationIssues {
+ $issues = new ValidationIssues();
+ $this->pluralCheck( $message, $issues );
+ $this->pluralFormsCheck( $message, $targetLanguage, $issues );
+
+ return $issues;
+ }
+
+ private function pluralCheck( TMessage $message, ValidationIssues $issues ): void {
+ $definition = $message->definition();
+ $translation = $message->translation();
+
+ if (
+ stripos( $definition, '{{plural:' ) !== false &&
+ stripos( $translation, '{{plural:' ) === false
+ ) {
+ $issue = new ValidationIssue( 'plural', 'missing', 'translate-checks-plural' );
+ $issues->add( $issue );
+ }
+ }
+
+ protected function pluralFormsCheck(
+ TMessage $message, string $code, ValidationIssues $issues
+ ): void {
+ $translation = $message->translation();
+ // Are there any plural forms for this language in this message?
+ if ( stripos( $translation, '{{plural:' ) === false ) {
+ return;
+ }
+
+ $plurals = $this->getPluralForms( $translation );
+ $allowed = $this->getPluralFormCount( $code );
+
+ foreach ( $plurals as $forms ) {
+ $forms = self::removeExplicitPluralForms( $forms );
+ $provided = count( $forms );
+
+ if ( $provided > $allowed ) {
+ $issue = new ValidationIssue(
+ 'plural',
+ 'forms',
+ 'translate-checks-plural-forms',
+ [
+ [ 'COUNT', $provided ],
+ [ 'COUNT', $allowed ],
+ ]
+ );
+
+ $issues->add( $issue );
+ }
+
+ // Are the last two forms identical?
+ if ( $provided > 1 && $forms[$provided - 1] === $forms[$provided - 2] ) {
+ $issue = new ValidationIssue( 'plural', 'dupe', 'translate-checks-plural-dupe' );
+ $issues->add( $issue );
+ }
+ }
+ }
+
+ /** Returns the number of plural forms %MediaWiki supports for a language. */
+ public function getPluralFormCount( string $code ): int {
+ $forms = $this->languageFactory->getLanguage( $code )->getPluralRules();
+
+ // +1 for the 'other' form
+ return count( $forms ) + 1;
+ }
+
+ /**
+ * Ugly home made probably awfully slow looping parser that parses {{PLURAL}} instances from
+ * a message and returns array of invocations having array of forms.
+ *
+ * @return array[]
+ */
+ public function getPluralForms( string $translation ): array {
+ // Stores the forms from plural invocations
+ $plurals = [];
+
+ $cb = static function ( $parser, $frame, $args ) use ( &$plurals ) {
+ $forms = [];
+
+ foreach ( $args as $index => $form ) {
+ // The first arg is the number, we skip it
+ if ( $index !== 0 ) {
+ // Collect the raw text
+ $forms[] = $frame->expand( $form, PPFrame::RECOVER_ORIG );
+ // Expand the text to process embedded plurals
+ $frame->expand( $form );
+ }
+ }
+ $plurals[] = $forms;
+
+ return '';
+ };
+
+ // Setup parser
+ $parser = $this->parserFactory->create();
+ $parser->setFunctionHook( 'plural', $cb, Parser::SFH_NO_HASH | Parser::SFH_OBJECT_ARGS );
+
+ // Setup things needed for preprocess
+ $title = null;
+ $options = ParserOptions::newFromUserAndLang(
+ $this->userFactory->newAnonymous(),
+ $this->languageFactory->getLanguage( 'en' )
+ );
+
+ $parser->preprocess( $translation, $title, $options );
+
+ return $plurals;
+ }
+
+ /** Remove forms that start with an explicit number. */
+ public static function removeExplicitPluralForms( array $forms ): array {
+ // Handle explicit 0= and 1= forms
+ foreach ( $forms as $index => $form ) {
+ if ( preg_match( '/^[0-9]+=/', $form ) ) {
+ unset( $forms[$index] );
+ }
+ }
+
+ return array_values( $forms );
+ }
+}
diff --git a/Translate/src/Validation/Validators/MediaWikiTimeListValidator.php b/Translate/src/Validation/Validators/MediaWikiTimeListValidator.php
new file mode 100644
index 00000000..fad5fd70
--- /dev/null
+++ b/Translate/src/Validation/Validators/MediaWikiTimeListValidator.php
@@ -0,0 +1,81 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Validation\Validators;
+
+use MediaWiki\Extension\Translate\Validation\MessageValidator;
+use MediaWiki\Extension\Translate\Validation\ValidationIssue;
+use MediaWiki\Extension\Translate\Validation\ValidationIssues;
+use TMessage;
+
+/**
+ * "Time list" message format validation for MediaWiki.
+ *
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2019.06
+ */
+class MediaWikiTimeListValidator implements MessageValidator {
+ public function getIssues( TMessage $message, string $targetLanguage ): ValidationIssues {
+ $issues = new ValidationIssues();
+
+ $definition = $message->definition();
+ $translation = $message->translation();
+ $defArray = explode( ',', $definition );
+ $traArray = explode( ',', $translation );
+
+ $defCount = count( $defArray );
+ $traCount = count( $traArray );
+ if ( $defCount !== $traCount ) {
+ $issue = new ValidationIssue(
+ 'miscmw',
+ 'timelist-count',
+ 'translate-checks-format',
+ [
+ [
+ 'MESSAGE',
+ [
+ 'translate-checks-parametersnotequal',
+ [ 'COUNT', $traCount ],
+ [ 'COUNT', $defCount ],
+ ]
+ ]
+ ]
+ );
+ $issues->add( $issue );
+
+ return $issues;
+ }
+
+ for ( $i = 0; $i < $defCount; $i++ ) {
+ $defItems = array_map( 'trim', explode( ':', $defArray[$i] ) );
+ $traItems = array_map( 'trim', explode( ':', $traArray[$i] ) );
+
+ if ( count( $traItems ) !== 2 ) {
+ $issue = new ValidationIssue(
+ 'miscmw',
+ 'timelist-format',
+ 'translate-checks-format',
+ [ [ 'MESSAGE', [ 'translate-checks-malformed', $traArray[$i] ] ] ]
+ );
+
+ $issues->add( $issue );
+ continue;
+ }
+
+ if ( $traItems[1] !== $defItems[1] ) {
+ $issue = new ValidationIssue(
+ 'miscmw',
+ 'timelist-format-value',
+ 'translate-checks-format',
+ // FIXME: i18n missing.
+ [ "<samp><nowiki>$traItems[1] !== $defItems[1]</nowiki></samp>" ]
+ );
+
+ $issues->add( $issue );
+ }
+ }
+
+ return $issues;
+ }
+}
diff --git a/Translate/src/Validation/Validators/NewlineValidator.php b/Translate/src/Validation/Validators/NewlineValidator.php
new file mode 100644
index 00000000..367a546d
--- /dev/null
+++ b/Translate/src/Validation/Validators/NewlineValidator.php
@@ -0,0 +1,100 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Validation\Validators;
+
+use MediaWiki\Extension\Translate\Validation\MessageValidator;
+use MediaWiki\Extension\Translate\Validation\ValidationIssue;
+use MediaWiki\Extension\Translate\Validation\ValidationIssues;
+use TMessage;
+
+/**
+ * Ensures that the translation has the same number of newlines as the source
+ * message at the beginning of the string.
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2019.09
+ */
+class NewlineValidator implements MessageValidator {
+ public function getIssues( TMessage $message, string $targetLanguage ): ValidationIssues {
+ $translation = $message->translation();
+ $definition = $message->definition();
+
+ $definitionStartNewline = $this->getStartingNewLinesCount( $definition );
+ $translationStartNewline = $this->getStartingNewLinesCount( $translation );
+
+ $failingChecks = $this->validateStartingNewline(
+ $definitionStartNewline, $translationStartNewline
+ );
+
+ return $this->createIssues( $failingChecks );
+ }
+
+ protected function getStartingNewLinesCount( string $str ): int {
+ return strspn( $str, "\n" );
+ }
+
+ protected function getEndingNewLineCount( string $str ): int {
+ return strspn( strrev( $str ), "\n" );
+ }
+
+ protected function validateStartingNewline(
+ int $definitionStartNewline,
+ int $translationStartNewline
+ ): array {
+ $failingChecks = [];
+ if ( $definitionStartNewline < $translationStartNewline ) {
+ // Extra whitespace at beginning
+ $failingChecks[] = [
+ 'extra-start',
+ $translationStartNewline - $definitionStartNewline
+ ];
+ } elseif ( $definitionStartNewline > $translationStartNewline ) {
+ // Missing whitespace at beginning
+ $failingChecks[] = [
+ 'missing-start',
+ $definitionStartNewline - $translationStartNewline
+ ];
+ }
+
+ return $failingChecks;
+ }
+
+ protected function validateEndingNewline(
+ int $definitionEndNewline,
+ int $translationEndNewline
+ ): array {
+ $failingChecks = [];
+ if ( $definitionEndNewline < $translationEndNewline ) {
+ // Extra whitespace at end
+ $failingChecks[] = [
+ 'extra-end',
+ $translationEndNewline - $definitionEndNewline
+ ];
+ } elseif ( $definitionEndNewline > $translationEndNewline ) {
+ // Missing whitespace at end
+ $failingChecks[] = [
+ 'missing-end',
+ $definitionEndNewline - $translationEndNewline
+ ];
+ }
+
+ return $failingChecks;
+ }
+
+ protected function createIssues( array $failingChecks ): ValidationIssues {
+ $issues = new ValidationIssues();
+ foreach ( $failingChecks as [ $subType, $count ] ) {
+ $issue = new ValidationIssue(
+ 'newline',
+ $subType,
+ "translate-checks-newline-$subType",
+ [ 'COUNT', $count ]
+ );
+
+ $issues->add( $issue );
+ }
+
+ return $issues;
+ }
+}
diff --git a/Translate/src/Validation/Validators/NotEmptyValidator.php b/Translate/src/Validation/Validators/NotEmptyValidator.php
new file mode 100644
index 00000000..53bc591f
--- /dev/null
+++ b/Translate/src/Validation/Validators/NotEmptyValidator.php
@@ -0,0 +1,28 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Validation\Validators;
+
+use MediaWiki\Extension\Translate\Validation\MessageValidator;
+use MediaWiki\Extension\Translate\Validation\ValidationIssue;
+use MediaWiki\Extension\Translate\Validation\ValidationIssues;
+use TMessage;
+
+class NotEmptyValidator implements MessageValidator {
+ public function getIssues( TMessage $message, string $targetLanguage ): ValidationIssues {
+ $translation = $message->translation();
+ $issues = new ValidationIssues();
+
+ if ( $translation !== null && trim( $translation ) === '' ) {
+ $issues->add(
+ new ValidationIssue(
+ 'empty',
+ 'empty',
+ 'translate-checks-empty'
+ )
+ );
+ }
+
+ return $issues;
+ }
+}
diff --git a/Translate/src/Validation/Validators/NumericalParameterValidator.php b/Translate/src/Validation/Validators/NumericalParameterValidator.php
new file mode 100644
index 00000000..a26f1509
--- /dev/null
+++ b/Translate/src/Validation/Validators/NumericalParameterValidator.php
@@ -0,0 +1,15 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Validation\Validators;
+
+/**
+ * An insertable numerical parameter validator that also acts as an InsertableSuggester
+ * @license GPL-2.0-or-later
+ * @since 2020.03
+ */
+class NumericalParameterValidator extends InsertableRegexValidator {
+ public function __construct() {
+ parent::__construct( '/\$\d+/' );
+ }
+}
diff --git a/Translate/src/Validation/Validators/PrintfValidator.php b/Translate/src/Validation/Validators/PrintfValidator.php
new file mode 100644
index 00000000..2f150f6d
--- /dev/null
+++ b/Translate/src/Validation/Validators/PrintfValidator.php
@@ -0,0 +1,16 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Validation\Validators;
+
+/**
+ * A validator that checks for missing and unknown printf formatting characters
+ * in translations. Can also be used as an Insertable suggester
+ * @license GPL-2.0-or-later
+ * @since 2019.12
+ */
+class PrintfValidator extends InsertableRegexValidator {
+ public function __construct() {
+ parent::__construct( '/%(\d+\$)?(\.\d+)?[sduf]/U' );
+ }
+}
diff --git a/Translate/src/Validation/Validators/PythonInterpolationValidator.php b/Translate/src/Validation/Validators/PythonInterpolationValidator.php
new file mode 100644
index 00000000..990cf319
--- /dev/null
+++ b/Translate/src/Validation/Validators/PythonInterpolationValidator.php
@@ -0,0 +1,16 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Validation\Validators;
+
+/**
+ * An insertable python interpolation validator that also acts as an InsertableSuggester
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @since 2020.02
+ */
+class PythonInterpolationValidator extends InsertableRegexValidator {
+ public function __construct() {
+ parent::__construct( '/\%(?:\([a-zA-Z0-9_]*?\))?[diouxXeEfFgGcrs]/U' );
+ }
+}
diff --git a/Translate/src/Validation/Validators/ReplacementValidator.php b/Translate/src/Validation/Validators/ReplacementValidator.php
new file mode 100644
index 00000000..72fc1791
--- /dev/null
+++ b/Translate/src/Validation/Validators/ReplacementValidator.php
@@ -0,0 +1,52 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Validation\Validators;
+
+use InvalidArgumentException;
+use MediaWiki\Extension\Translate\Validation\MessageValidator;
+use MediaWiki\Extension\Translate\Validation\ValidationIssue;
+use MediaWiki\Extension\Translate\Validation\ValidationIssues;
+use TMessage;
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2020.07
+ */
+class ReplacementValidator implements MessageValidator {
+ private $search;
+ private $replace;
+
+ public function __construct( array $params ) {
+ $this->search = $params['search'] ?? null;
+ $this->replace = $params['replace'] ?? null;
+ if ( !is_string( $this->search ) ) {
+ throw new InvalidArgumentException( '`search` is not a string' );
+ }
+
+ if ( !is_string( $this->replace ) ) {
+ throw new InvalidArgumentException( '`replace` is not a string' );
+ }
+ }
+
+ public function getIssues( TMessage $message, string $targetLanguage ): ValidationIssues {
+ $issues = new ValidationIssues();
+
+ if ( strpos( $message->translation(), $this->search ) !== false ) {
+ $issue = new ValidationIssue(
+ 'replacement',
+ 'replacement',
+ 'translate-checks-replacement',
+ [
+ [ 'PLAIN', $this->search ],
+ [ 'PLAIN', $this->replace ],
+ ]
+ );
+
+ $issues->add( $issue );
+ }
+
+ return $issues;
+ }
+}
diff --git a/Translate/src/Validation/Validators/SmartFormatPluralValidator.php b/Translate/src/Validation/Validators/SmartFormatPluralValidator.php
new file mode 100644
index 00000000..969032aa
--- /dev/null
+++ b/Translate/src/Validation/Validators/SmartFormatPluralValidator.php
@@ -0,0 +1,110 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Validation\Validators;
+
+use MediaWiki\Extension\Translate\TranslatorInterface\Insertable\Insertable;
+use MediaWiki\Extension\Translate\TranslatorInterface\Insertable\InsertablesSuggester;
+use MediaWiki\Extension\Translate\Utilities\SmartFormatPlural;
+use MediaWiki\Extension\Translate\Utilities\UnicodePlural;
+use MediaWiki\Extension\Translate\Validation\MessageValidator;
+use MediaWiki\Extension\Translate\Validation\ValidationIssue;
+use MediaWiki\Extension\Translate\Validation\ValidationIssues;
+use TMessage;
+
+/**
+ * @license GPL-2.0-or-later
+ * @since 2019.11
+ */
+class SmartFormatPluralValidator implements MessageValidator, InsertablesSuggester {
+ public function getIssues( TMessage $message, string $targetLanguage ): ValidationIssues {
+ $issues = new ValidationIssues();
+
+ $expectedKeywords = UnicodePlural::getPluralKeywords( $targetLanguage );
+ // Skip validation for languages for which we do not know the plural rule
+ if ( $expectedKeywords === null ) {
+ return $issues;
+ }
+
+ $definition = $message->definition();
+ $translation = $message->translation();
+ $expectedPluralCount = count( $expectedKeywords );
+ $definitionPlurals = SmartFormatPlural::getPluralInstances( $definition );
+ $translationPlurals = SmartFormatPlural::getPluralInstances( $translation );
+
+ $unsupportedVariables = array_diff(
+ array_keys( $translationPlurals ), array_keys( $definitionPlurals )
+ );
+
+ foreach ( $unsupportedVariables as $unsupportedVariable ) {
+ $issue = new ValidationIssue(
+ 'plural',
+ 'unsupported',
+ 'translate-checks-smartformat-plural-unsupported',
+ [
+ [ 'PLAIN', '{' . $unsupportedVariable . '}' ],
+ ]
+ );
+
+ $issues->add( $issue );
+ }
+
+ if ( $expectedPluralCount > 1 ) {
+ $missingVariables = array_diff(
+ array_keys( $definitionPlurals ), array_keys( $translationPlurals )
+ );
+
+ foreach ( $missingVariables as $missingVariable ) {
+ $issue = new ValidationIssue(
+ 'plural',
+ 'missing',
+ 'translate-checks-smartformat-plural-missing',
+ [
+ [ 'PLAIN', '{' . $missingVariable . '}' ],
+ ]
+ );
+
+ $issues->add( $issue );
+ }
+ }
+
+ // This returns only translation plurals for variables that exists in source
+ $commonVariables = array_intersect_key( $translationPlurals, $definitionPlurals );
+ foreach ( $commonVariables as $pluralInstances ) {
+ foreach ( $pluralInstances as $pluralInstance ) {
+ $actualPluralCount = count( $pluralInstance[ 'forms' ] );
+ if ( $actualPluralCount !== $expectedPluralCount ) {
+ $issue = new ValidationIssue(
+ 'plural',
+ 'forms',
+ 'translate-checks-smartformat-plural-count',
+ [
+ [ 'COUNT', $expectedPluralCount ],
+ [ 'COUNT', $actualPluralCount ],
+ [ 'PLAIN', $pluralInstance[ 'original' ] ],
+ ]
+ );
+
+ $issues->add( $issue );
+ }
+ }
+ }
+
+ return $issues;
+ }
+
+ public function getInsertables( string $text ): array {
+ $definitionPlurals = SmartFormatPlural::getPluralInstances( $text );
+ $insertables = [];
+
+ // This could be more language specific if we were given more information, but
+ // we only have text.
+ foreach ( array_keys( $definitionPlurals ) as $variable ) {
+ $pre = '{' . "$variable:";
+ $post = '|}';
+ $insertables[] = new Insertable( "$pre$post", $pre, $post );
+ }
+
+ return $insertables;
+ }
+}
diff --git a/Translate/src/Validation/Validators/UnicodePluralValidator.php b/Translate/src/Validation/Validators/UnicodePluralValidator.php
new file mode 100644
index 00000000..ddd9baa1
--- /dev/null
+++ b/Translate/src/Validation/Validators/UnicodePluralValidator.php
@@ -0,0 +1,110 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Validation\Validators;
+
+use MediaWiki\Extension\Translate\Utilities\UnicodePlural;
+use MediaWiki\Extension\Translate\Validation\MessageValidator;
+use MediaWiki\Extension\Translate\Validation\ValidationIssue;
+use MediaWiki\Extension\Translate\Validation\ValidationIssues;
+use TMessage;
+
+/**
+ * This is a very strict validator class for Unicode CLDR based plural markup.
+ *
+ * It requires all forms to be present and in correct order. Whitespace around keywords
+ * and values is trimmed. The keyword `other` is left out, though it is allowed in input.
+ * @since 2019.09
+ * @license GPL-2.0-or-later
+ */
+class UnicodePluralValidator implements MessageValidator {
+ public function getIssues( TMessage $message, string $targetLanguage ): ValidationIssues {
+ $issues = new ValidationIssues();
+
+ $expectedKeywords = UnicodePlural::getPluralKeywords( $targetLanguage );
+ // Skip validation for languages for which we do not know the plural rule
+ if ( $expectedKeywords === null ) {
+ return $issues;
+ }
+
+ $definition = $message->definition();
+ $translation = $message->translation();
+ $definitionHasPlural = UnicodePlural::hasPlural( $definition );
+ $translationHasPlural = UnicodePlural::hasPlural( $translation );
+
+ $presence = $this->pluralPresenceCheck(
+ $definitionHasPlural,
+ $translationHasPlural
+ );
+
+ // Using same check keys as MediaWikiPluralValidator
+ if ( $presence === 'missing' ) {
+ $issue = new ValidationIssue( 'plural', 'missing', 'translate-checks-unicode-plural-missing' );
+ $issues->add( $issue );
+ } elseif ( $presence === 'unsupported' ) {
+ $issue = new ValidationIssue( 'plural', 'unsupported', 'translate-checks-unicode-plural-unsupported' );
+ $issues->add( $issue );
+ } elseif ( $presence === 'ok' ) {
+ [ $msgcode, $actualKeywords ] =
+ $this->pluralFormCheck( $translation, $expectedKeywords );
+ if ( $msgcode === 'invalid' ) {
+ $expectedExample = UnicodePlural::flattenList(
+ array_map( [ $this, 'createFormExample' ], $expectedKeywords )
+ );
+ $actualExample = UnicodePlural::flattenList(
+ array_map( [ $this, 'createFormExample' ], $actualKeywords )
+ );
+
+ $issue = new ValidationIssue(
+ 'plural',
+ 'forms',
+ 'translate-checks-unicode-plural-invalid',
+ [
+ [ 'PLAIN', $expectedExample ],
+ [ 'PLAIN', $actualExample ],
+ ]
+ );
+ $issues->add( $issue );
+ }
+ } // else: not-applicable
+
+ return $issues;
+ }
+
+ private function createFormExample( string $keyword ): array {
+ return [ $keyword, '…' ];
+ }
+
+ private function pluralPresenceCheck(
+ bool $definitionHasPlural,
+ bool $translationHasPlural
+ ): string {
+ if ( !$definitionHasPlural && $translationHasPlural ) {
+ return 'unsupported';
+ } elseif ( $definitionHasPlural && !$translationHasPlural ) {
+ return 'missing';
+ } elseif ( !$definitionHasPlural && !$translationHasPlural ) {
+ return 'not-applicable';
+ }
+
+ // Both have plural
+ return 'ok';
+ }
+
+ private function pluralFormCheck( string $text, array $expectedKeywords ): array {
+ [ , $instanceMap ] = UnicodePlural::parsePluralForms( $text );
+
+ foreach ( $instanceMap as $forms ) {
+ $actualKeywords = [];
+ foreach ( $forms as [ $keyword, ] ) {
+ $actualKeywords[] = $keyword;
+ }
+
+ if ( $actualKeywords !== $expectedKeywords ) {
+ return [ 'invalid', $actualKeywords ];
+ }
+ }
+
+ return [ 'ok', [] ];
+ }
+}
diff --git a/Translate/src/WebService/ApertiumWebService.php b/Translate/src/WebService/ApertiumWebService.php
new file mode 100644
index 00000000..7b6d1258
--- /dev/null
+++ b/Translate/src/WebService/ApertiumWebService.php
@@ -0,0 +1,107 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\WebService;
+
+use FormatJson;
+use LanguageCode;
+use MediaWiki\Http\HttpRequestFactory;
+use Sanitizer;
+use TranslateUtils;
+
+/**
+ * Implements support Apetrium translator api.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @ingroup TranslationWebService
+ * @since 2013-01-01
+ * @see https://wiki.apertium.org/wiki/Apertium_web_service
+ */
+class ApertiumWebService extends TranslationWebService {
+ // Exclusions per https://phabricator.wikimedia.org/T177434
+ private const EXCLUDED_TARGET_LANGUAGES = [ 'fr', 'es', 'nl' ];
+
+ /** @var HttpRequestFactory */
+ private $httpRequestFactory;
+
+ public function __construct(
+ HttpRequestFactory $httpRequestFactory,
+ string $serviceName,
+ array $config
+ ) {
+ parent::__construct( $serviceName, $config );
+ $this->httpRequestFactory = $httpRequestFactory;
+ }
+
+ /** @inheritDoc */
+ public function getType(): string {
+ return 'mt';
+ }
+
+ /** @inheritDoc */
+ protected function mapCode( string $code ): string {
+ return str_replace( '-', '_', LanguageCode::bcp47( $code ) );
+ }
+
+ /** @inheritDoc */
+ protected function doPairs(): array {
+ $pairs = [];
+ $json = $this->httpRequestFactory->get(
+ $this->config['pairs'],
+ [ 'timeout' => $this->config['timeout'] ],
+ __METHOD__
+ );
+ $response = FormatJson::decode( $json );
+
+ if ( !is_object( $response ) ) {
+ $error = 'Malformed reply from remote server: ' . (string)$json;
+ throw new TranslationWebServiceException( $error );
+ }
+
+ foreach ( $response->responseData as $pair ) {
+ $source = $pair->sourceLanguage;
+ $target = $pair->targetLanguage;
+ if ( !in_array( $target, self::EXCLUDED_TARGET_LANGUAGES ) ) {
+ $pairs[$source][$target] = true;
+ }
+ }
+
+ return $pairs;
+ }
+
+ /** @inheritDoc */
+ protected function getQuery( string $text, string $sourceLanguage, string $targetLanguage ): TranslationQuery {
+ if ( !isset( $this->config['key'] ) ) {
+ throw new TranslationWebServiceConfigurationException( 'API key is not set' );
+ }
+
+ $text = trim( $text );
+ $text = $this->wrapUntranslatable( $text );
+
+ $params = [
+ 'q' => $text,
+ 'langpair' => "$sourceLanguage|$targetLanguage",
+ 'x-application' => 'MediaWiki Translate extension ' . TranslateUtils::getVersion(),
+ ];
+
+ return TranslationQuery::factory( $this->config['url'] )
+ ->timeout( intval( $this->config['timeout'] ) )
+ ->queryParameters( $params );
+ }
+
+ /** @inheritDoc */
+ protected function parseResponse( TranslationQueryResponse $reply ): string {
+ $body = $reply->getBody();
+ $response = FormatJson::decode( $body );
+ if ( !is_object( $response ) ) {
+ throw new TranslationWebServiceException( 'Invalid json: ' . serialize( $body ) );
+ } elseif ( $response->responseStatus !== 200 ) {
+ throw new TranslationWebServiceException( $response->responseDetails );
+ }
+
+ $text = Sanitizer::decodeCharReferences( $response->responseData->translatedText );
+ $text = $this->unwrapUntranslatable( $text );
+
+ return trim( $text );
+ }
+}
diff --git a/Translate/src/WebService/CaighdeanWebService.php b/Translate/src/WebService/CaighdeanWebService.php
new file mode 100644
index 00000000..ab2a16c7
--- /dev/null
+++ b/Translate/src/WebService/CaighdeanWebService.php
@@ -0,0 +1,98 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\WebService;
+
+use FormatJson;
+
+/**
+ * Implements support Caighdean translator api.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @ingroup TranslationWebService
+ * @since 2017.04
+ * @see https://github.com/kscanne/caighdean/blob/master/API.md
+ */
+class CaighdeanWebService extends TranslationWebService {
+ /** @inheritDoc */
+ public function getType(): string {
+ return 'mt';
+ }
+
+ /** @inheritDoc */
+ public function mapCode( string $code ): string {
+ return $code;
+ }
+
+ /** @inheritDoc */
+ protected function doPairs(): array {
+ $pairs = [
+ 'gd' => [ 'ga' => true ],
+ 'gv' => [ 'ga' => true ],
+ ];
+
+ return $pairs;
+ }
+
+ /** @inheritDoc */
+ protected function getQuery( string $text, string $sourceLanguage, string $targetLanguage ): TranslationQuery {
+ if ( !isset( $this->config['url'] ) ) {
+ throw new TranslationWebServiceConfigurationException( '`url` not set in configuration' );
+ }
+
+ $text = trim( $text );
+ if ( $text === '' ) {
+ throw new TranslationWebServiceInvalidInputException( 'Input is empty' );
+ }
+
+ $data = wfArrayToCgi( [
+ 'foinse' => $sourceLanguage,
+ 'teacs' => $text,
+ ] );
+
+ // Maximum payload is 16 KiB. Based ont testing 16000 bytes is safe by leaving 224
+ // bytes for other things.
+ if ( strlen( $data ) > 16000 ) {
+ throw new TranslationWebServiceInvalidInputException( 'Input is over 16000 bytes long' );
+ }
+
+ return TranslationQuery::factory( $this->config['url'] )
+ ->timeout( intval( $this->config['timeout'] ) )
+ ->postWithData( $data )
+ ->attachProcessingInstructions( $text );
+ }
+
+ /** @inheritDoc */
+ protected function parseResponse( TranslationQueryResponse $reply ): string {
+ $body = $reply->getBody();
+ $response = FormatJson::decode( $body );
+ if ( !is_array( $response ) ) {
+ throw new TranslationWebServiceException( 'Invalid json: ' . serialize( $body ) );
+ }
+
+ $text = '';
+ $originalText = $reply->getQuery()->getProcessingInstructions();
+ foreach ( $response as list( $sourceToken, $targetToken ) ) {
+ $separator = ' ';
+ $pos = strpos( $originalText, $sourceToken );
+ // Try to keep the effects local. If we fail to match at token, we could accidentally
+ // scan very far ahead in the text, find a false match and not find matches for all
+ // of the tokens in the between.
+ if ( $pos !== false && $pos < 50 ) {
+ // Remove the portion of text we have processed. $pos should be zero, unless
+ // we failed to match something earlier.
+ $originalText = substr( $originalText, $pos + strlen( $sourceToken ) );
+ if ( preg_match( '/^\s+/', $originalText, $match ) ) {
+ $separator = $match[ 0 ];
+ $originalText = substr( $originalText, strlen( $separator ) );
+ } else {
+ $separator = '';
+ }
+ }
+
+ $text .= $targetToken . $separator;
+ }
+
+ return $text;
+ }
+}
diff --git a/Translate/src/WebService/CxserverWebService.php b/Translate/src/WebService/CxserverWebService.php
new file mode 100644
index 00000000..0e7bfc7b
--- /dev/null
+++ b/Translate/src/WebService/CxserverWebService.php
@@ -0,0 +1,100 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\WebService;
+
+use FormatJson;
+use MediaWiki\Http\HttpRequestFactory;
+
+/**
+ * Contains a class for querying external translation service.
+ * Implements support for cxserver api
+ * @ingroup TranslationWebService
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2015.02
+ */
+class CxserverWebService extends TranslationWebService {
+ // Exclusions per https://phabricator.wikimedia.org/T177434
+ private const EXCLUDED_APERTIUM_TARGET_LANGUAGES = [ 'fr', 'es', 'nl' ];
+ /** @var HttpRequestFactory */
+ private $httpRequestFactory;
+
+ public function __construct(
+ HttpRequestFactory $httpRequestFactory,
+ string $serviceName,
+ array $config
+ ) {
+ parent::__construct( $serviceName, $config );
+ $this->httpRequestFactory = $httpRequestFactory;
+ }
+
+ /** @inheritDoc */
+ public function getType(): string {
+ return 'mt';
+ }
+
+ /** @inheritDoc */
+ protected function mapCode( string $code ): string {
+ return $code;
+ }
+
+ /** @inheritDoc */
+ protected function doPairs(): array {
+ if ( !isset( $this->config['host'] ) ) {
+ throw new TranslationWebServiceConfigurationException( 'Cxserver host not set' );
+ }
+
+ $pairs = [];
+
+ $url = $this->config['host'] . '/v1/list/mt';
+ $json = $this->httpRequestFactory->get( $url, [ $this->config['timeout'] ], __METHOD__ );
+ $response = FormatJson::decode( $json, true );
+
+ if ( !is_array( $response ) ) {
+ $exception = 'Malformed reply from remote server: ' . (string)$json;
+ throw new TranslationWebServiceException( $exception );
+ }
+
+ foreach ( $response['Apertium'] as $source => $targets ) {
+ $filteredTargets = array_diff( $targets, self::EXCLUDED_APERTIUM_TARGET_LANGUAGES );
+ foreach ( $filteredTargets as $target ) {
+ $pairs[$source][$target] = true;
+ }
+ }
+
+ return $pairs;
+ }
+
+ /** @inheritDoc */
+ protected function getQuery( string $text, string $sourceLanguage, string $targetLanguage ): TranslationQuery {
+ if ( !isset( $this->config['host'] ) ) {
+ throw new TranslationWebServiceConfigurationException( 'Cxserver host not set' );
+ }
+
+ $text = trim( $text );
+ $text = $this->wrapUntranslatable( $text );
+ $url = $this->config['host'] . "/v1/mt/$sourceLanguage/$targetLanguage/Apertium";
+
+ return TranslationQuery::factory( $url )
+ ->timeout( intval( $this->config['timeout'] ) )
+ ->postWithData( wfArrayToCgi( [ 'html' => $text ] ) );
+ }
+
+ /** @inheritDoc */
+ protected function parseResponse( TranslationQueryResponse $reply ): string {
+ $body = $reply->getBody();
+ $response = FormatJson::decode( $body );
+ if ( !is_object( $response ) ) {
+ throw new TranslationWebServiceException( 'Invalid json: ' . serialize( $body ) );
+ }
+
+ $text = $response->contents;
+ if ( preg_match( '~^<div>(.*)</div>$~', $text ) ) {
+ $text = preg_replace( '~^<div>(.*)</div>$~', '\1', $text );
+ }
+ $text = $this->unwrapUntranslatable( $text );
+
+ return trim( $text );
+ }
+}
diff --git a/Translate/src/WebService/GoogleTranslateWebService.php b/Translate/src/WebService/GoogleTranslateWebService.php
new file mode 100644
index 00000000..4d46fe6d
--- /dev/null
+++ b/Translate/src/WebService/GoogleTranslateWebService.php
@@ -0,0 +1,131 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\WebService;
+
+use FormatJson;
+use MediaWiki\Http\HttpRequestFactory;
+use Sanitizer;
+
+/**
+ * Implements support for Google Translate API
+ * @author Carsten Schmitz / LimeSurvey GmbH
+ * @license GPL-2.0-or-later
+ * @since 2020.05
+ * @ingroup TranslationWebService
+ * @see https://cloud.google.com/translate/docs/reference/rest
+ */
+class GoogleTranslateWebService extends TranslationWebService {
+ private const PUBLIC_API = 'https://translation.googleapis.com/language/translate/v2';
+ /** @var HttpRequestFactory */
+ private $httpRequestFactory;
+
+ public function __construct(
+ HttpRequestFactory $httpRequestFactory,
+ string $serviceName,
+ array $config
+ ) {
+ parent::__construct( $serviceName, $config );
+ $this->httpRequestFactory = $httpRequestFactory;
+ }
+
+ /** @inheritDoc */
+ public function getType(): string {
+ return 'mt';
+ }
+
+ /** @inheritDoc */
+ protected function mapCode( string $code ): string {
+ /** @phpcs-require-sorted-array */
+ $map = [
+ 'be-tarask' => 'be',
+ 'zh-cn' => 'zh-CN',
+ 'zh-hans' => 'zh-CN',
+ 'zh-hant' => 'zh-TW',
+ 'zh-tw' => 'zh-TW',
+ ];
+
+ return $map[$code] ?? $code;
+ }
+
+ /** @inheritDoc */
+ public function isSupportedLanguagePair( string $sourceLanguage, string $targetLanguage ): bool {
+ $pairs = $this->getSupportedLanguagePairs();
+ $from = $this->mapCode( $sourceLanguage );
+ $to = $this->mapCode( $targetLanguage );
+
+ // As long as the source & target language exist at Google it is fine
+ return isset( $pairs[$from] ) && isset( $pairs[$to] ) && $from !== $to;
+ }
+
+ /** @inheritDoc */
+ protected function doPairs(): array {
+ if ( !isset( $this->config['key'] ) ) {
+ throw new TranslationWebServiceConfigurationException( 'API key is not set' );
+ }
+
+ $api = $this->config['pairs'] ?? self::PUBLIC_API . '/languages';
+ $params = [
+ 'key' => $this->config['key'],
+ ];
+
+ $json = $this->httpRequestFactory->get(
+ wfAppendQuery( $api, wfArrayToCgi( $params ) ),
+ [ 'timeout' => $this->config['timeout'] ],
+ __METHOD__
+ );
+ $response = FormatJson::decode( $json );
+
+ if ( !is_object( $response ) ) {
+ $exception = 'Malformed reply from remote server: ' . (string)$json;
+ throw new TranslationWebServiceException( $exception );
+ }
+
+ $pairs = [];
+ foreach ( $response->data->languages as $language ) {
+ // Google can translate from any language to any language
+ $pairs[$language->language] = true;
+ }
+
+ return $pairs;
+ }
+
+ /** @inheritDoc */
+ protected function getQuery( string $text, string $sourceLanguage, string $targetLanguage ): TranslationQuery {
+ if ( !isset( $this->config['key'] ) ) {
+ throw new TranslationWebServiceConfigurationException( 'API key is not set' );
+ }
+ # https://cloud.google.com/translate/docs/reference/translate
+ if ( strlen( $text ) > 10000 ) {
+ // There is no limitation but we don't want the translation service to be abused, don't we?
+ throw new TranslationWebServiceInvalidInputException( 'Source text too long' );
+ }
+
+ $url = $this->config['url'] ?? self::PUBLIC_API;
+ $text = trim( $text );
+ $text = $this->wrapUntranslatable( $text );
+
+ return TranslationQuery::factory( $url )
+ ->timeout( intval( $this->config['timeout'] ?? 3 ) )
+ ->postWithData( wfArrayToCgi( [
+ 'key' => $this->config['key'],
+ 'q' => $text,
+ 'target' => $targetLanguage,
+ 'source' => $sourceLanguage,
+ 'format' => 'html',
+ ] ) );
+ }
+
+ /** @inheritDoc */
+ protected function parseResponse( TranslationQueryResponse $reply ): string {
+ $body = $reply->getBody();
+ $response = FormatJson::decode( $body );
+ if ( !is_object( $response ) ) {
+ throw new TranslationWebServiceException( 'Invalid json: ' . serialize( $body ) );
+ }
+ $text = Sanitizer::decodeCharReferences( $response->data->translations[0]->translatedText );
+ $text = $this->unwrapUntranslatable( $text );
+
+ return trim( $text );
+ }
+}
diff --git a/Translate/src/WebService/MicrosoftWebService.php b/Translate/src/WebService/MicrosoftWebService.php
new file mode 100644
index 00000000..accff91d
--- /dev/null
+++ b/Translate/src/WebService/MicrosoftWebService.php
@@ -0,0 +1,163 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\WebService;
+
+use MediaWiki\Http\HttpRequestFactory;
+
+/**
+ * Implements support for Microsoft translation api v3.
+ * @author Niklas Laxström
+ * @author Ulrich Strauss
+ * @license GPL-2.0-or-later
+ * @since 2013-01-01
+ * @see https://docs.microsoft.com/fi-fi/azure/cognitive-services/Translator/reference/v3-0-reference
+ * @ingroup TranslationWebService
+ */
+class MicrosoftWebService extends TranslationWebService {
+ /** @var HttpRequestFactory */
+ private $httpRequestFactory;
+
+ public function __construct(
+ HttpRequestFactory $httpRequestFactory,
+ string $serviceName,
+ array $config
+ ) {
+ parent::__construct( $serviceName, $config );
+ $this->httpRequestFactory = $httpRequestFactory;
+ }
+
+ /** @inheritDoc */
+ public function getType(): string {
+ return 'mt';
+ }
+
+ /** @inheritDoc */
+ protected function mapCode( string $code ): string {
+ $map = [
+ 'tl' => 'fil',
+ 'zh-hant' => 'zh-Hant',
+ 'zh-hans' => 'zh-Hans',
+ 'sr-ec' => 'sr-Cyrl',
+ 'sr-el' => 'sr-Latn',
+ 'pt-br' => 'pt',
+ ];
+
+ return $map[$code] ?? $code;
+ }
+
+ /** @inheritDoc */
+ protected function doPairs(): array {
+ if ( !isset( $this->config['key'] ) ) {
+ throw new TranslationWebServiceConfigurationException( 'key is not set' );
+ }
+
+ $key = $this->config['key'];
+
+ $options = [];
+ $options['method'] = 'GET';
+ $options['timeout'] = $this->config['timeout'];
+
+ $url = $this->config['url'] . '/languages?api-version=3.0';
+
+ $req = $this->httpRequestFactory->create( $url, $options, __METHOD__ );
+ $req->setHeader( 'Ocp-Apim-Subscription-Key', $key );
+
+ $status = $req->execute();
+ if ( !$status->isOK() ) {
+ $error = $req->getContent();
+ // Most likely a timeout or other general error
+ throw new TranslationWebServiceException(
+ 'Http::get failed:' . serialize( $error ) . serialize( $status )
+ );
+ }
+
+ $json = $req->getContent();
+ $response = json_decode( $json, true );
+ if ( !isset( $response[ 'translation' ] ) ) {
+ throw new TranslationWebServiceException(
+ 'Unable to fetch list of available languages: ' . $json
+ );
+ }
+
+ $languages = array_keys( $response[ 'translation' ] );
+
+ // Let's make a cartesian product, assuming we can translate from any language to any language
+ $pairs = [];
+ foreach ( $languages as $from ) {
+ foreach ( $languages as $to ) {
+ $pairs[$from][$to] = true;
+ }
+ }
+
+ return $pairs;
+ }
+
+ /** @inheritDoc */
+ protected function getQuery( string $text, string $sourceLanguage, string $targetLanguage ): TranslationQuery {
+ if ( !isset( $this->config['key'] ) ) {
+ throw new TranslationWebServiceConfigurationException( 'key is not set' );
+ }
+
+ $key = $this->config['key'];
+ $text = trim( $text );
+ $text = $this->wrapUntranslatable( $text );
+
+ $url = $this->config['url'] . '/translate';
+ $params = [
+ 'api-version' => '3.0',
+ 'from' => $sourceLanguage,
+ 'to' => $targetLanguage,
+ 'textType' => 'html',
+ ];
+ $headers = [
+ 'Ocp-Apim-Subscription-Key' => $key,
+ 'Content-Type' => 'application/json',
+ ];
+ $body = json_encode( [ [ 'Text' => $text ] ] );
+
+ if ( $body === false ) {
+ throw new TranslationWebServiceInvalidInputException( 'Could not JSON encode source text' );
+ }
+
+ if ( strlen( $body ) > 5000 ) {
+ throw new TranslationWebServiceInvalidInputException( 'Source text too long' );
+ }
+
+ return TranslationQuery::factory( $url )
+ ->timeout( intval( $this->config['timeout'] ) )
+ ->queryParameters( $params )
+ ->queryHeaders( $headers )
+ ->postWithData( $body );
+ }
+
+ /** @inheritDoc */
+ protected function parseResponse( TranslationQueryResponse $reply ): string {
+ $body = $reply->getBody();
+
+ $response = json_decode( $body, true );
+ if ( !isset( $response[ 0 ][ 'translations' ][ 0 ][ 'text' ] ) ) {
+ throw new TranslationWebServiceException(
+ 'Unable to parse translation response: ' . $body
+ );
+ }
+
+ $text = $response[ 0 ][ 'translations' ][ 0 ][ 'text' ];
+ $text = $this->unwrapUntranslatable( $text );
+
+ return $text;
+ }
+
+ /** @inheritDoc */
+ protected function wrapUntranslatable( string $text ): string {
+ $pattern = '~%[^% ]+%|\$\d|{VAR:[^}]+}|{?{(PLURAL|GRAMMAR|GENDER):[^|]+\||%(\d\$)?[sd]~';
+ $wrap = '<span class="notranslate">\0</span>';
+ return preg_replace( $pattern, $wrap, $text );
+ }
+
+ /** @inheritDoc */
+ protected function unwrapUntranslatable( string $text ): string {
+ $pattern = '~<span class="notranslate">\s*(.*?)\s*</span>~';
+ return preg_replace( $pattern, '\1', $text );
+ }
+}
diff --git a/Translate/src/WebService/QueryAggregator.php b/Translate/src/WebService/QueryAggregator.php
new file mode 100644
index 00000000..cd35be47
--- /dev/null
+++ b/Translate/src/WebService/QueryAggregator.php
@@ -0,0 +1,87 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\WebService;
+
+use MediaWiki\MediaWikiServices;
+use RuntimeException;
+use TranslateUtils;
+
+/**
+ * Web service utility class. Runs multiple web service queries asynchronously to save time.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2015.02
+ * @ingroup TranslationWebService
+ */
+class QueryAggregator {
+ protected $queries = [];
+ protected $responses = [];
+ protected $timeout = 0;
+ protected $hasRun = false;
+
+ /**
+ * Register a query to be run.
+ * @return mixed Query id that can be used to fetch results.
+ */
+ public function addQuery( TranslationQuery $query ) {
+ $this->queries[] = $query;
+
+ $this->timeout = max( $query->getTimeout(), $this->timeout );
+ return count( $this->queries ) - 1;
+ }
+
+ /**
+ * Returns a response for a query.
+ * @param mixed $id Query id.
+ * @throws RuntimeException if called before run() has been called.
+ */
+ public function getResponse( $id ): TranslationQueryResponse {
+ if ( !$this->hasRun ) {
+ throw new RuntimeException( 'Tried to get response before queries ran' );
+ }
+
+ return new TranslationQueryResponse( $this->responses[$id], $this->queries[$id] );
+ }
+
+ /** Runs all the queries. */
+ public function run(): void {
+ global $wgSitename;
+
+ $version = TranslateUtils::getVersion();
+
+ $clientOptions = [
+ 'reqTimeout' => $this->timeout,
+ 'connTimeout' => 3,
+ 'userAgent' => "MediaWiki Translate extension $version for $wgSitename"
+ ];
+
+ $httpRequestFactory = MediaWikiServices::getInstance()->getHttpRequestFactory();
+
+ $http = $httpRequestFactory->createMultiClient( $clientOptions );
+ $responses = $http->runMulti( $this->getMultiHttpQueries( $this->queries ) );
+ foreach ( $responses as $index => $response ) {
+ $this->responses[$index] = $response;
+ }
+ $this->hasRun = true;
+ }
+
+ /**
+ * Formats queries for format used by MultiHttpClient class.
+ * @param TranslationQuery[] $queries
+ * @return array[]
+ */
+ protected function getMultiHttpQueries( array $queries ): array {
+ $converter = static function ( TranslationQuery $q ) {
+ return [
+ 'url' => $q->getUrl(),
+ 'method' => $q->getMethod(),
+ 'query' => $q->getQueryParameters(),
+ 'body' => $q->getBody(),
+ 'headers' => $q->getHeaders(),
+ ];
+ };
+
+ return array_map( $converter, $queries );
+ }
+}
diff --git a/Translate/src/WebService/QueryAggregatorAware.php b/Translate/src/WebService/QueryAggregatorAware.php
new file mode 100644
index 00000000..d9d742f1
--- /dev/null
+++ b/Translate/src/WebService/QueryAggregatorAware.php
@@ -0,0 +1,16 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\WebService;
+
+/**
+ * Interface for classes that want to use QueryAggregator.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2015.12
+ */
+interface QueryAggregatorAware {
+ public function setQueryAggregator( QueryAggregator $aggregator ): void;
+
+ public function populateQueries(): void;
+}
diff --git a/Translate/src/WebService/RESTBaseWebService.php b/Translate/src/WebService/RESTBaseWebService.php
new file mode 100644
index 00000000..ab43b18a
--- /dev/null
+++ b/Translate/src/WebService/RESTBaseWebService.php
@@ -0,0 +1,94 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\WebService;
+
+use FormatJson;
+use MediaWiki\Http\HttpRequestFactory;
+
+/**
+ * Implements support for cxserver proxied through RESTBase
+ * @ingroup TranslationWebService
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2017.10
+ */
+class RESTBaseWebService extends TranslationWebService {
+ /** @var HttpRequestFactory */
+ private $httpRequestFactory;
+
+ public function __construct(
+ HttpRequestFactory $httpRequestFactory,
+ string $serviceName,
+ array $config
+ ) {
+ parent::__construct( $serviceName, $config );
+ $this->httpRequestFactory = $httpRequestFactory;
+ }
+
+ /** @inheritDoc */
+ public function getType(): string {
+ return 'mt';
+ }
+
+ /** @inheritDoc */
+ protected function mapCode( string $code ): string {
+ return $code;
+ }
+
+ /** @inheritDoc */
+ protected function doPairs(): array {
+ if ( !isset( $this->config['host'] ) ) {
+ throw new TranslationWebServiceConfigurationException( 'RESTBase host not set' );
+ }
+
+ $pairs = [];
+
+ $url = $this->config['host'] . '/rest_v1/transform/list/tool/mt/';
+ $json = $this->httpRequestFactory->get( $url, [ $this->config['timeout'] ], __METHOD__ );
+ $response = FormatJson::decode( $json, true );
+
+ if ( !is_array( $response ) ) {
+ $exception = 'Malformed reply from remote server: ' . $url . ' ' . (string)$json;
+ throw new TranslationWebServiceException( $exception );
+ }
+
+ foreach ( $response['Apertium'] as $source => $targets ) {
+ foreach ( $targets as $target ) {
+ $pairs[$source][$target] = true;
+ }
+ }
+
+ return $pairs;
+ }
+
+ /** @inheritDoc */
+ protected function getQuery( string $text, string $sourceLanguage, string $targetLanguage ): TranslationQuery {
+ if ( !isset( $this->config['host'] ) ) {
+ throw new TranslationWebServiceConfigurationException( 'RESTBase host not set' );
+ }
+
+ $text = trim( $text );
+ $text = $this->wrapUntranslatable( $text );
+ $url = $this->config['host'] . "/rest_v1/transform/html/from/$sourceLanguage/to/$targetLanguage/Apertium";
+
+ return TranslationQuery::factory( $url )
+ ->timeout( intval( $this->config['timeout'] ) )
+ ->postWithData( wfArrayToCgi( [ 'html' => $text ] ) );
+ }
+
+ /** @inheritDoc */
+ protected function parseResponse( TranslationQueryResponse $reply ): string {
+ $body = $reply->getBody();
+
+ $response = FormatJson::decode( $body );
+ if ( !is_object( $response ) ) {
+ throw new TranslationWebServiceException( 'Invalid json: ' . serialize( $body ) );
+ }
+
+ $text = $response->contents;
+ $text = $this->unwrapUntranslatable( $text );
+
+ return trim( $text );
+ }
+}
diff --git a/Translate/src/WebService/RemoteTTMServerWebService.php b/Translate/src/WebService/RemoteTTMServerWebService.php
new file mode 100644
index 00000000..3587d097
--- /dev/null
+++ b/Translate/src/WebService/RemoteTTMServerWebService.php
@@ -0,0 +1,65 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\WebService;
+
+use FormatJson;
+
+/**
+ * Class for querying external translation service. Implements support for ttmserver via MediaWiki API.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2013-01-01
+ * @ingroup TranslationWebService
+ * @see https://www.mediawiki.org/wiki/Help:Extension:Translate/Translation_memories
+ */
+class RemoteTTMServerWebService extends TranslationWebService {
+ /** @inheritDoc */
+ public function getType(): string {
+ return 'ttmserver';
+ }
+
+ /** @inheritDoc */
+ protected function mapCode( string $code ): string {
+ return $code; // Unused
+ }
+
+ /** @inheritDoc */
+ protected function doPairs(): array {
+ return []; // Unused
+ }
+
+ /** @inheritDoc */
+ protected function getQuery( string $text, string $sourceLanguage, string $targetLanguage ): TranslationQuery {
+ $params = [
+ 'format' => 'json',
+ 'action' => 'ttmserver',
+ 'sourcelanguage' => $sourceLanguage,
+ 'targetlanguage' => $targetLanguage,
+ 'text' => $text
+ ];
+
+ if ( isset( $this->config['service'] ) ) {
+ $params['service'] = $this->config['service'];
+ }
+
+ return TranslationQuery::factory( $this->config['url'] )
+ ->timeout( intval( $this->config['timeout'] ) )
+ ->queryParameters( $params );
+ }
+
+ /** @inheritDoc */
+ protected function parseResponse( TranslationQueryResponse $reply ) {
+ $body = $reply->getBody();
+ $parsed = FormatJson::decode( $body, true );
+ if ( !is_array( $parsed ) ) {
+ throw new TranslationWebServiceException( 'Invalid json: ' . serialize( $body ) );
+ }
+
+ if ( !isset( $parsed['ttmserver'] ) ) {
+ throw new TranslationWebServiceException( 'Unexpected reply from remote server' );
+ }
+
+ return $parsed['ttmserver'];
+ }
+}
diff --git a/Translate/src/WebService/TranslationQuery.php b/Translate/src/WebService/TranslationQuery.php
new file mode 100644
index 00000000..3c5ac763
--- /dev/null
+++ b/Translate/src/WebService/TranslationQuery.php
@@ -0,0 +1,94 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\WebService;
+
+/**
+ * Mutable objects that represents a HTTP(S) query.
+ * NB: Too lazy to make TranslationQueryFactory to make this class immutable.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2015.02
+ */
+class TranslationQuery {
+ private $url;
+ private $timeout = 0;
+ private $method = 'GET';
+ private $params = [];
+ private $body;
+ private $headers = [];
+ /** @var mixed Arbitrary data that is returned with TranslationQueryResponse */
+ private $instructions;
+
+ // URL is mandatory, so using it here
+ public static function factory( string $url ): TranslationQuery {
+ $obj = new self();
+ $obj->url = $url;
+ return $obj;
+ }
+
+ /** Make this a POST request with given data. */
+ public function postWithData( string $data ): TranslationQuery {
+ $this->method = 'POST';
+ $this->body = $data;
+ return $this;
+ }
+
+ public function queryParameters( array $params ): TranslationQuery {
+ $this->params = $params;
+ return $this;
+ }
+
+ public function queryHeaders( array $headers ): TranslationQuery {
+ $this->headers = $headers;
+ return $this;
+ }
+
+ public function timeout( int $timeout ): TranslationQuery {
+ $this->timeout = $timeout;
+ return $this;
+ }
+
+ /**
+ * Attach arbitrary data that is necessary to process the results.
+ * @param mixed $data
+ * @since 2017.04
+ */
+ public function attachProcessingInstructions( $data ): TranslationQuery {
+ $this->instructions = $data;
+ return $this;
+ }
+
+ public function getTimeout(): int {
+ return $this->timeout;
+ }
+
+ public function getUrl(): string {
+ return $this->url;
+ }
+
+ public function getMethod(): string {
+ return $this->method;
+ }
+
+ public function getQueryParameters(): array {
+ return $this->params;
+ }
+
+ public function getBody(): ?string {
+ return $this->body;
+ }
+
+ public function getHeaders(): array {
+ return $this->headers;
+ }
+
+ /**
+ * Get previously attached result processing instructions.
+ * @return mixed
+ * @since 2017.04
+ */
+ public function getProcessingInstructions() {
+ return $this->instructions;
+ }
+}
diff --git a/Translate/src/WebService/TranslationQueryResponse.php b/Translate/src/WebService/TranslationQueryResponse.php
new file mode 100644
index 00000000..4936363b
--- /dev/null
+++ b/Translate/src/WebService/TranslationQueryResponse.php
@@ -0,0 +1,55 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\WebService;
+
+/**
+ * Value object that represents a HTTP(S) query response.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2015.02
+ */
+class TranslationQueryResponse {
+ private $code;
+ private $reason;
+ private $headers;
+ private $body;
+ private $error;
+ /** @var TranslationQuery */
+ private $query;
+
+ public function __construct( array $data, TranslationQuery $query ) {
+ $response = $data['response'];
+
+ $this->code = (int)$response['code'];
+ $this->reason = $response['reason'];
+ $this->headers = $response['headers'];
+ $this->body = $response['body'];
+ $this->error = $response['error'];
+ $this->query = $query;
+ }
+
+ public function getStatusCode(): int {
+ return $this->code;
+ }
+
+ public function getStatusMessage() {
+ if ( $this->code === 0 ) {
+ return $this->error;
+ } else {
+ return $this->reason;
+ }
+ }
+
+ public function getBody() {
+ return $this->body;
+ }
+
+ /**
+ * Get the TranslationQuery that was made for this request.
+ * @since 2017.04
+ */
+ public function getQuery(): TranslationQuery {
+ return $this->query;
+ }
+}
diff --git a/Translate/src/WebService/TranslationWebService.php b/Translate/src/WebService/TranslationWebService.php
new file mode 100644
index 00000000..0a086b67
--- /dev/null
+++ b/Translate/src/WebService/TranslationWebService.php
@@ -0,0 +1,335 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\WebService;
+
+use Exception;
+use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\MediaWikiServices;
+use ObjectCache;
+use Psr\Log\LoggerAwareInterface;
+use Psr\Log\LoggerInterface;
+
+/**
+ * Multipurpose class:
+ * - 1) Interface for web services.
+ * - 2) Source text picking logic.
+ * - 3) Factory class.
+ * - 4) Service failure tracking and suspending.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2013-01-01
+ * @defgroup TranslationWebService Translation Web Services
+ */
+abstract class TranslationWebService implements LoggerAwareInterface {
+ /* Public api */
+
+ /**
+ * Get a webservice handler.
+ * @see $wgTranslateTranslationServices
+ */
+ public static function factory( string $serviceName, array $config ): ?TranslationWebService {
+ $handlers = [
+ 'microsoft' => [
+ 'class' => MicrosoftWebService::class,
+ 'deps' => [ 'HttpRequestFactory' ]
+ ],
+ 'apertium' => [
+ 'class' => ApertiumWebService::class,
+ 'deps' => [ 'HttpRequestFactory' ]
+ ],
+ 'yandex' => [
+ 'class' => YandexWebService::class,
+ 'deps' => [ 'HttpRequestFactory' ]
+ ],
+ 'google' => [
+ 'class' => GoogleTranslateWebService::class,
+ 'deps' => [ 'HttpRequestFactory' ]
+ ],
+ 'remote-ttmserver' => [
+ 'class' => RemoteTTMServerWebService::class
+ ],
+ 'cxserver' => [
+ 'class' => CxserverWebService::class,
+ 'deps' => [ 'HttpRequestFactory' ]
+ ],
+ 'restbase' => [
+ 'class' => RESTBaseWebService::class,
+ 'deps' => [ 'HttpRequestFactory' ]
+ ],
+ 'caighdean' => [
+ 'class' => CaighdeanWebService::class
+ ],
+ ];
+
+ if ( !isset( $config['timeout'] ) ) {
+ $config['timeout'] = 3;
+ }
+
+ $serviceDetails = $handlers[$config['type']] ?? null;
+ if ( $serviceDetails ) {
+ $objectFactory = MediaWikiServices::getInstance()->getObjectFactory();
+ $spec = [
+ 'class' => $serviceDetails['class'],
+ 'args' => [ $serviceName, $config ],
+ 'services' => $serviceDetails['deps'] ?? [],
+ ];
+
+ // @phan-suppress-next-line PhanTypeInvalidCallableArraySize due to annotations on createObject?
+ $serviceObject = $objectFactory->createObject( $spec );
+ if ( $serviceObject instanceof LoggerAwareInterface ) {
+ $serviceObject->setLogger( LoggerFactory::getInstance( 'translationservices' ) );
+ }
+
+ return $serviceObject;
+ }
+
+ return null;
+ }
+
+ /**
+ * Gets the name of this service, for example to display it for the user.
+ * @since 2014.02
+ */
+ public function getName(): string {
+ return $this->service;
+ }
+
+ /**
+ * Get queries for this service. Queries from multiple services can be
+ * collected and run asynchronously with QueryAggregator.
+ * @return TranslationQuery[]
+ * @since 2015.12
+ * @throws TranslationWebServiceConfigurationException
+ */
+ public function getQueries( string $text, string $sourceLanguage, string $targetLanguage ): array {
+ $from = $this->mapCode( $sourceLanguage );
+ $to = $this->mapCode( $targetLanguage );
+
+ try {
+ return [ $this->getQuery( $text, $from, $to ) ];
+ } catch ( TranslationWebServiceException $e ) {
+ $this->reportTranslationServiceFailure( $e->getMessage() );
+ return [];
+ } catch ( TranslationWebServiceInvalidInputException $e ) {
+ // Not much we can do about this, just ignore.
+ return [];
+ }
+ }
+
+ /**
+ * Get the web service specific response returned by QueryAggregator.
+ * @return mixed|null Returns null on error.
+ * @since 2015.12
+ */
+ public function getResultData( TranslationQueryResponse $response ) {
+ if ( $response->getStatusCode() !== 200 ) {
+ $this->reportTranslationServiceFailure(
+ 'STATUS: ' . $response->getStatusMessage() . "\n" .
+ 'BODY: ' . $response->getBody()
+ );
+ return null;
+ }
+
+ try {
+ return $this->parseResponse( $response );
+ } catch ( TranslationWebServiceException $e ) {
+ $this->reportTranslationServiceFailure( $e->getMessage() );
+ return null;
+ }
+ }
+
+ /**
+ * Returns the type of this web service.
+ * @see \MediaWiki\Extension\Translate\TranslatorInterface\Aid\TranslationAid::getTypes
+ */
+ abstract public function getType(): string;
+
+ /* Service api */
+
+ /**
+ * Map a MediaWiki (almost standard) language code to the code used by the
+ * translation service.
+ */
+ abstract protected function mapCode( string $code ): string;
+
+ /**
+ * Get the list of supported language pairs for the web service. The codes
+ * should be the ones used by the service. Caching is handled by the public
+ * getSupportedLanguagePairs.
+ * @return array $list[source language][target language] = true
+ * @throws TranslationWebServiceException
+ * @throws TranslationWebServiceConfigurationException
+ */
+ abstract protected function doPairs(): array;
+
+ /**
+ * Get the query. See getQueries for the public method.
+ * @param string $text Text to translate.
+ * @param string $sourceLanguage Language code of the text, as used by the service.
+ * @param string $targetLanguage Language code of the translation, as used by the service.
+ * @since 2015.02
+ * @throws TranslationWebServiceException
+ * @throws TranslationWebServiceConfigurationException
+ * @throws TranslationWebServiceInvalidInputException
+ */
+ abstract protected function getQuery(
+ string $text, string $sourceLanguage, string $targetLanguage
+ ): TranslationQuery;
+
+ /**
+ * Get the response. See getResultData for the public method.
+ * @since 2015.02
+ * @throws TranslationWebServiceException
+ */
+ abstract protected function parseResponse( TranslationQueryResponse $response );
+
+ /* Default implementation */
+
+ /** @var string Name of this webservice. */
+ protected $service;
+ /** @var array */
+ protected $config;
+ /** @var LoggerInterface */
+ protected $logger;
+
+ public function __construct( string $service, array $config ) {
+ $this->service = $service;
+ $this->config = $config;
+ }
+
+ /**
+ * Test whether given language pair is supported by the service.
+ * @since 2015.12
+ * @throws TranslationWebServiceConfigurationException
+ */
+ public function isSupportedLanguagePair( string $sourceLanguage, string $targetLanguage ): bool {
+ $pairs = $this->getSupportedLanguagePairs();
+ $from = $this->mapCode( $sourceLanguage );
+ $to = $this->mapCode( $targetLanguage );
+
+ return isset( $pairs[$sourceLanguage][$targetLanguage] );
+ }
+
+ /**
+ * @see self::doPairs
+ * @throws TranslationWebServiceConfigurationException
+ */
+ protected function getSupportedLanguagePairs(): array {
+ $cache = ObjectCache::getInstance( CACHE_ANYTHING );
+
+ return $cache->getWithSetCallback(
+ $cache->makeKey( 'translate-tmsug-pairs-' . $this->service ),
+ $cache::TTL_DAY,
+ function ( &$ttl ) use ( $cache ) {
+ try {
+ $pairs = $this->doPairs();
+ } catch ( Exception $e ) {
+ $pairs = [];
+ $this->reportTranslationServiceFailure( $e->getMessage() );
+ $ttl = $cache::TTL_UNCACHEABLE;
+ }
+
+ return $pairs;
+ }
+ );
+ }
+
+ /**
+ * Some mangling that tries to keep some parts of the message unmangled
+ * by the translation service. Most of them support either class=notranslate
+ * or translate=no.
+ */
+ protected function wrapUntranslatable( string $text ): string {
+ $text = str_replace( "\n", '!N!', $text );
+ $pattern = '~%[^% ]+%|\$\d|{VAR:[^}]+}|{?{(PLURAL|GRAMMAR|GENDER):[^|]+\||%(\d\$)?[sd]~';
+ $wrap = '<span class="notranslate" translate="no">\0</span>';
+ return preg_replace( $pattern, $wrap, $text );
+ }
+
+ /** Undo the hopyfully untouched mangling done by wrapUntranslatable. */
+ protected function unwrapUntranslatable( string $text ): string {
+ $text = str_replace( '!N!', "\n", $text );
+ $pattern = '~<span class="notranslate" translate="no">(.*?)</span>~';
+ return preg_replace( $pattern, '\1', $text );
+ }
+
+ /* Failure handling and suspending */
+
+ public function setLogger( LoggerInterface $logger ): void {
+ $this->logger = $logger;
+ }
+
+ /**
+ * @var int How many failures during failure period need to happen to
+ * consider the service being temporarily off-line.
+ */
+ protected $serviceFailureCount = 5;
+ /**
+ * @var int How long after the last detected failure we clear the status and
+ * try again.
+ */
+ protected $serviceFailurePeriod = 900;
+
+ /** Checks whether the service has exceeded failure count */
+ public function checkTranslationServiceFailure(): bool {
+ $service = $this->service;
+ $cache = ObjectCache::getInstance( CACHE_ANYTHING );
+
+ $key = $cache->makeKey( "translate-service-$service" );
+ $value = $cache->get( $key );
+ if ( !is_string( $value ) ) {
+ return false;
+ }
+
+ list( $count, $failed ) = explode( '|', $value, 2 );
+
+ if ( $failed + ( 2 * $this->serviceFailurePeriod ) < wfTimestamp() ) {
+ if ( $count >= $this->serviceFailureCount ) {
+ $this->logger->warning( "Translation service $service (was) restored" );
+ }
+ $cache->delete( $key );
+
+ return false;
+ } elseif ( $failed + $this->serviceFailurePeriod < wfTimestamp() ) {
+ /* We are in suspicious mode and one failure is enough to update
+ * failed timestamp. If the service works however, let's use it.
+ * Previous failures are forgotten after another failure period
+ * has passed */
+ return false;
+ }
+
+ // Check the failure count against the limit
+ return $count >= $this->serviceFailureCount;
+ }
+
+ /** Increases the failure count for this service */
+ protected function reportTranslationServiceFailure( string $msg ): void {
+ $service = $this->service;
+ $this->logger->warning( "Translation service $service problem: $msg" );
+
+ $cache = ObjectCache::getInstance( CACHE_ANYTHING );
+ $key = $cache->makeKey( "translate-service-$service" );
+
+ $value = $cache->get( $key );
+ if ( !is_string( $value ) ) {
+ $count = 0;
+ } else {
+ list( $count, ) = explode( '|', $value, 2 );
+ }
+
+ $count++;
+ $failed = wfTimestamp();
+ $cache->set(
+ $key,
+ "$count|$failed",
+ $this->serviceFailurePeriod * 5
+ );
+
+ if ( $count === $this->serviceFailureCount ) {
+ $this->logger->error( "Translation service $service suspended" );
+ } elseif ( $count > $this->serviceFailureCount ) {
+ $this->logger->warning( "Translation service $service still suspended" );
+ }
+ }
+}
diff --git a/Translate/src/WebService/TranslationWebServiceConfigurationException.php b/Translate/src/WebService/TranslationWebServiceConfigurationException.php
new file mode 100644
index 00000000..29a00d1f
--- /dev/null
+++ b/Translate/src/WebService/TranslationWebServiceConfigurationException.php
@@ -0,0 +1,18 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\WebService;
+
+use Exception;
+
+/**
+ * Used to signal a configuration mistake in an external web service. This is in
+ * contrast to TranslationWebServiceException that signals a failure in the web
+ * service itself.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2017.04
+ * @ingroup TranslationWebService
+ */
+class TranslationWebServiceConfigurationException extends Exception {
+}
diff --git a/Translate/src/WebService/TranslationWebServiceException.php b/Translate/src/WebService/TranslationWebServiceException.php
new file mode 100644
index 00000000..08fd04f5
--- /dev/null
+++ b/Translate/src/WebService/TranslationWebServiceException.php
@@ -0,0 +1,17 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\WebService;
+
+use MWException;
+
+/**
+ * Used to signal a failure in an external web service. If the web service has
+ * too many failures in a short period, it is suspended to avoid wasting time.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2013-01-01
+ * @ingroup TranslationWebService
+ */
+class TranslationWebServiceException extends MWException {
+}
diff --git a/Translate/src/WebService/TranslationWebServiceInvalidInputException.php b/Translate/src/WebService/TranslationWebServiceInvalidInputException.php
new file mode 100644
index 00000000..6dcb1e22
--- /dev/null
+++ b/Translate/src/WebService/TranslationWebServiceInvalidInputException.php
@@ -0,0 +1,20 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\WebService;
+
+use Exception;
+
+/**
+ * Used to signal that the requested input is rejected and cannot be used with
+ * an external web service. This is in contrast to a failure in the web service
+ * itself that is not in our control. Most common case for this is input that is
+ * too long.
+ * service itself.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2017.04
+ * @ingroup TranslationWebService
+ */
+class TranslationWebServiceInvalidInputException extends Exception {
+}
diff --git a/Translate/src/WebService/YandexWebService.php b/Translate/src/WebService/YandexWebService.php
new file mode 100644
index 00000000..08358474
--- /dev/null
+++ b/Translate/src/WebService/YandexWebService.php
@@ -0,0 +1,114 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\WebService;
+
+use FormatJson;
+use MediaWiki\Http\HttpRequestFactory;
+use Sanitizer;
+
+/**
+ * Implements support for Yandex translation api v1.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2013-01-01
+ * @ingroup TranslationWebService
+ * @see https://tech.yandex.com/translate/
+ */
+class YandexWebService extends TranslationWebService {
+ /** @var HttpRequestFactory */
+ private $httpRequestFactory;
+
+ public function __construct(
+ HttpRequestFactory $httpRequestFactory,
+ string $serviceName,
+ array $config
+ ) {
+ parent::__construct( $serviceName, $config );
+ $this->httpRequestFactory = $httpRequestFactory;
+ }
+
+ /** @inheritDoc */
+ public function getType(): string {
+ return 'mt';
+ }
+
+ /** @inheritDoc */
+ protected function mapCode( string $code ): string {
+ if ( $code === 'be-tarask' ) {
+ $code = 'be';
+ }
+ return $code;
+ }
+
+ /** @inheritDoc */
+ protected function doPairs(): array {
+ if ( !isset( $this->config['key'] ) ) {
+ throw new TranslationWebServiceConfigurationException( 'API key is not set' );
+ }
+
+ $pairs = [];
+
+ $params = [
+ 'key' => $this->config['key'],
+ ];
+
+ $url = $this->config['pairs'] . '?' . wfArrayToCgi( $params );
+ $json = $this->httpRequestFactory->get( $url, [ 'timeout' => $this->config['timeout'] ], __METHOD__ );
+ $response = FormatJson::decode( $json );
+
+ if ( !is_object( $response ) ) {
+ $exception = 'Malformed reply from remote server: ' . (string)$json;
+ throw new TranslationWebServiceException( $exception );
+ }
+
+ foreach ( $response->dirs as $pair ) {
+ list( $source, $target ) = explode( '-', $pair );
+ $pairs[$source][$target] = true;
+ }
+
+ return $pairs;
+ }
+
+ /** @inheritDoc */
+ protected function getQuery( string $text, string $sourceLanguage, string $targetLanguage ): TranslationQuery {
+ if ( !isset( $this->config['key'] ) ) {
+ throw new TranslationWebServiceConfigurationException( 'API key is not set' );
+ }
+
+ # https://tech.yandex.com/translate/doc/dg/reference/translate-docpage/
+ if ( strlen( $text ) > 10000 ) {
+ throw new TranslationWebServiceInvalidInputException( 'Source text too long' );
+ }
+
+ $text = trim( $text );
+ $text = $this->wrapUntranslatable( $text );
+
+ return TranslationQuery::factory( $this->config['url'] )
+ ->timeout( intval( $this->config['timeout'] ) )
+ ->postWithData( wfArrayToCgi(
+ [
+ 'key' => $this->config['key'],
+ 'text' => $text,
+ 'lang' => "$sourceLanguage-$targetLanguage",
+ 'format' => 'html',
+ ]
+ ) );
+ }
+
+ /** @inheritDoc */
+ protected function parseResponse( TranslationQueryResponse $reply ): string {
+ $body = $reply->getBody();
+ $response = FormatJson::decode( $body );
+ if ( !is_object( $response ) ) {
+ throw new TranslationWebServiceException( 'Invalid json: ' . serialize( $body ) );
+ } elseif ( $response->code !== 200 ) {
+ throw new TranslationWebServiceException( $response->message );
+ }
+
+ $text = Sanitizer::decodeCharReferences( $response->text[0] );
+ $text = $this->unwrapUntranslatable( $text );
+
+ return trim( $text );
+ }
+}
diff --git a/Translate/tests/generateRandomSandboxData.php b/Translate/tests/generateRandomSandboxData.php
new file mode 100644
index 00000000..2994f8f0
--- /dev/null
+++ b/Translate/tests/generateRandomSandboxData.php
@@ -0,0 +1,113 @@
+<?php
+/**
+ * Script to generate some random data to help testing sandbox.
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+use MediaWiki\Extension\Translate\TranslatorSandbox\StashedTranslation;
+use MediaWiki\Extension\Translate\TranslatorSandbox\TranslationStashStorage;
+use MediaWiki\MediaWikiServices;
+
+// Standard boilerplate to define $IP
+if ( getenv( 'MW_INSTALL_PATH' ) !== false ) {
+ $IP = getenv( 'MW_INSTALL_PATH' );
+} else {
+ $dir = __DIR__;
+ $IP = "$dir/../../..";
+}
+require_once "$IP/maintenance/Maintenance.php";
+
+class TranslateGenerateRandomSandboxData extends Maintenance {
+
+ public function execute() {
+ $users = 10;
+
+ // For number of translations, limited to [0,20]
+ $mean = 15;
+ $stddev = 20;
+
+ $stash = new TranslationStashStorage( wfGetDB( DB_PRIMARY ) );
+
+ $languages = array_keys( MediaWikiServices::getInstance()->getLanguageNameUtils()->getLanguageNames() );
+
+ for ( $i = 0; $i < $users; $i++ ) {
+ $username = 'Pupu' . wfRandomString( 6 );
+ $password = wfRandomString( 12 );
+ $email = "$username.$password@blackhole.io";
+ $user = TranslateSandbox::addUser( $username, $password, $email );
+
+ $language = $languages[rand( 0, count( $languages ) - 1 )];
+
+ $count = wfGaussMs( $mean, $stddev );
+ $count = min( 20, $count );
+ $count = max( 0, $count );
+
+ for ( $j = 0; $j < $count; $j++ ) {
+ $title = Title::makeTitle( NS_MEDIAWIKI, wfRandomString( 24 ) . '/' . $language );
+
+ $value = [ 'Pupu söi' ];
+ for ( $k = rand( 0, 20 ); $k > 0; $k-- ) {
+ $value[] = wfRandomString( rand( 1, 28 ) );
+ }
+
+ $value = implode( "\n", $value );
+ $translation = new StashedTranslation( $user, $title, $value );
+ $stash->addTranslation( $translation );
+ }
+ }
+ }
+}
+
+/*
+ * Gauss functions are based on Mark Baker's code from
+ * https://stackoverflow.com/questions/5188900/bell-curve-algorithm-with-php
+ */
+
+function wfGauss() {
+ static $useExists = false;
+ static $useValue;
+
+ if ( $useExists ) {
+ // Use value from a previous call to this function
+ $useExists = false;
+ return $useValue;
+ } else {
+ // Polar form of the Box-Muller transformation
+ $w = 2.0;
+ while ( ( $w >= 1.0 ) || ( $w == 0.0 ) ) {
+ $x = wfRandomPn();
+ $y = wfRandomPn();
+ $w = ( $x * $x ) + ( $y * $y );
+ }
+ $w = sqrt( ( -2.0 * log( $w ) ) / $w );
+
+ // Set value for next call to this function
+ $useValue = $y * $w;
+ $useExists = true;
+
+ return $x * $w;
+ }
+}
+
+function wfGaussMs( $mean, $stddev ) {
+ // Adjust our gaussian random to fit the mean and standard deviation.
+ // The division by 4 is an arbitrary value to help fit the distribution
+ // within our required range, and gives a best fit for $stddev = 1.0.
+ return wfGauss() * ( $stddev / 4 ) + $mean;
+}
+
+function wfRandom01() {
+ // Returns random number using mt_rand() with a flat distribution from 0 to 1 inclusive
+ return (float)mt_rand() / (float)mt_getrandmax();
+}
+
+function wfRandomPn() {
+ // Returns random number using mt_rand() with a flat distribution from -1 to 1 inclusive
+ return ( 2.0 * wfRandom01() ) - 1.0;
+}
+
+$maintClass = TranslateGenerateRandomSandboxData::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/Translate/tests/parser/translateParserTests-knownFailures.json b/Translate/tests/parser/translateParserTests-knownFailures.json
new file mode 100644
index 00000000..a47a2755
--- /dev/null
+++ b/Translate/tests/parser/translateParserTests-knownFailures.json
@@ -0,0 +1,21 @@
+{
+ "Old tvar syntax should not break too hard.": {
+ "selser [[0,0,4,0,0]]": "<translate><tvar|plop>1d7pnti</></translate>",
+ "selser [[0,0,3,0,0]]": "<translate><tvar|plop></></translate>",
+ "selser [[0,0,2,0,0]]": "<translate><tvar|plop>f6ryf4pouet</></translate>",
+ "selser [1]": "<translate><tvar|plop>pouet</></translate>",
+ "selser [2]": "1wugpjz\n\n<translate><tvar|plop>pouet</></translate>"
+ },
+ "Old tvar syntax should not pull content in cell attributes": {
+ "selser [[0,1]]": "{|\n|<translate>hello <tvar|var>variable</></translate>\n|}",
+ "selser [2]": "oqu4bc\n{|\n|<translate>hello <tvar|var>variable</></translate>\n|}",
+ "selser [[0,2]]": "{|\n<!--1h991tb-->|<translate>hello <tvar|var>variable</></translate>\n|}",
+ "selser [[0,[2,0]]]": "{|\n<!--1kdae4o-->|<translate>hello <tvar|var>variable</></translate>\n|}",
+ "selser [[0,[1,0]]]": "{|\n|<translate>hello <tvar|var>variable</></translate>\n|}",
+ "selser [[0,[1,3]]]": "{|\n|<translate>hello <tvar|var>variable</></translate>\n|}",
+ "selser [[0,[[[0,3,0,4,0,0]],4]]]": "{|\n|<translate><tvar|var>1efb5fq</></translate><!--337162-->\n|}",
+ "selser [1]": "{| data-foobar=\"ha6ug8\"\n|<translate>hello <tvar|var>variable</></translate>\n|}",
+ "selser [[3,2]]": "{|<!--1m2nle5-->\n|<translate>hello <tvar|var>variable</></translate>\n|}",
+ "selser [[4,2]]": "{|<!--174dxgt--><!--p8iktb-->\n|<translate>hello <tvar|var>variable</></translate>\n|}"
+ }
+}
diff --git a/Translate/tests/parser/translateParserTests.txt b/Translate/tests/parser/translateParserTests.txt
new file mode 100644
index 00000000..abd64f70
--- /dev/null
+++ b/Translate/tests/parser/translateParserTests.txt
@@ -0,0 +1,106 @@
+!! options
+version=2
+parsoid-compatible
+!! end
+
+# Force the test runner to ensure the extension is loaded
+!! functionhooks
+translation
+!! endfunctionhooks
+
+!! article
+Template:1x
+!! text
+{{{1}}}
+!! endarticle
+
+!! test
+#translation as magic word for valid language code
+!! options
+title=[[Test/mr]]
+!! wikitext
+{{#translation:}}
+!! html/php
+<p>/mr
+</p>
+!! html/parsoid
+<p><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"#translation:","function":"translation"},"params":{},"i":0}}]}'>/mr</span></p>
+!! end
+
+!! test
+#translation as magic word for source page
+!! options
+title=[[Test]]
+!! wikitext
+{{#translation:}}
+!! html/php
+
+!! html/parsoid
+<span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"#translation:","function":"translation"},"params":{},"i":0}}]}'></span>
+!! end
+
+!! test
+#translation as magic word for invalid language code
+!! options
+title=[[Test/ugaaa]]
+!! wikitext
+{{#translation:}}
+!! html
+
+!! html/parsoid
+<span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"#translation:","function":"translation"},"params":{},"i":0}}]}'></span>
+!! end
+
+!! test
+Old tvar syntax should not break too hard.
+!! options
+# html2wt and wt2wt are expected to break because we serialize to new syntax.
+# html2html breaks because the wtOffsets break.
+parsoid={
+ "modes": ["wt2html", "selser"]
+}
+!! wikitext
+<translate><tvar|plop>pouet</></translate>
+!! html/parsoid
+<p><meta typeof="mw:Annotation/translate" data-mw='{"rangeId":"mwa0","extendedRange":false,"wtOffsets":[0,11]}'/><meta typeof="mw:Annotation/tvar" data-mw='{"attrs":{"name":"plop"},"rangeId":"mwa1","extendedRange":false,"wtOffsets":[11,22]}'/>pouet<meta typeof="mw:Annotation/tvar/End" data-mw='{"wtOffsets":[27,30]}'/><meta typeof="mw:Annotation/translate/End" data-mw='{"wtOffsets":[30,42]}'/></p>
+!! end
+
+!! test
+Old tvar syntax should not pull content in cell attributes
+!! options
+# html2wt and wt2wt are expected to break because we serialize to new syntax.
+# html2html breaks because the wtOffsets break.
+parsoid={
+ "modes": ["wt2html", "selser"]
+}
+!! wikitext
+{|
+|<translate>hello <tvar|var>variable</></translate>
+|}
+!! html/parsoid
+<table>
+<tbody><tr data-parsoid='{"autoInsertedStart":true}'><td><meta typeof="mw:Annotation/translate" data-mw='{"rangeId":"mwa0","extendedRange":false,"wtOffsets":[4,15]}'/>hello <meta typeof="mw:Annotation/tvar" data-mw='{"attrs":{"name":"var"},"rangeId":"mwa1","extendedRange":false,"wtOffsets":[21,31]}'/>variable<meta typeof="mw:Annotation/tvar/End" data-mw='{"wtOffsets":[39,42]}'/><meta typeof="mw:Annotation/translate/End" data-mw='{"wtOffsets":[42,54]}'/></td></tr>
+</tbody></table>
+!! end
+
+!! test
+Annotation markers starting lines should neither insert pre nor merge ranges
+!! wikitext
+<translate><!--T:1--> translate 1</translate>
+<translate><!--T:2--> translate 2</translate>
+!! html/parsoid
+<p data-parsoid='{"dsr":[0,91,0,0]}'><meta typeof="mw:Annotation/translate" data-parsoid='{"dsr":[0,11,null,null]}' data-mw='{"rangeId":"mwa0","extendedRange":false,"wtOffsets":[0,11]}'/><!--T:1--> translate 1<meta typeof="mw:Annotation/translate/End" data-parsoid='{"dsr":[33,45,null,null]}' data-mw='{"wtOffsets":[33,45]}'/>
+<meta typeof="mw:Annotation/translate" data-parsoid='{"dsr":[46,57,null,null]}' data-mw='{"rangeId":"mwa1","extendedRange":false,"wtOffsets":[46,57]}'/><!--T:2--> translate 2<meta typeof="mw:Annotation/translate/End" data-parsoid='{"dsr":[79,91,null,null]}' data-mw='{"wtOffsets":[79,91]}'/></p>
+!! end
+
+!! test
+tvar in a template should get stripped
+!! options
+parsoid={
+ "modes": ["wt2html"]
+}
+!! wikitext
+<translate>{{1x|<tvar|var>hello</>}}</translate>
+!! html/parsoid
+<p><meta typeof="mw:Annotation/translate" data-mw='{"rangeId":"mwa0","extendedRange":false,"wtOffsets":[0,11]}'/><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"1x","href":"./Template:1x"},"params":{"1":{"wt":"&lt;tvar|var>hello&lt;/>"}},"i":0}}]}'>hello</span><meta typeof="mw:Annotation/translate/End" data-mw='{"wtOffsets":[36,48]}'/></p>
+!! end
diff --git a/Translate/tests/phpunit/Cache/PersistentDatabaseCacheTest.php b/Translate/tests/phpunit/Cache/PersistentDatabaseCacheTest.php
new file mode 100644
index 00000000..3776095e
--- /dev/null
+++ b/Translate/tests/phpunit/Cache/PersistentDatabaseCacheTest.php
@@ -0,0 +1,353 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Cache;
+
+use DateInterval;
+use DateTime;
+use InvalidArgumentException;
+use MediaWiki\MediaWikiServices;
+use MediaWikiIntegrationTestCase;
+
+/**
+ * @covers \MediaWiki\Extension\Translate\Cache\PersistentDatabaseCache
+ * @covers \MediaWiki\Extension\Translate\Cache\PersistentCacheEntry
+ */
+class PersistentDatabaseCacheTest extends MediaWikiIntegrationTestCase {
+ /** @var PersistentDatabaseCache */
+ private $persistentCache;
+
+ protected function setUp(): void {
+ parent::setUp();
+ $mwServices = MediaWikiServices::getInstance();
+ $lb = $mwServices->getDBLoadBalancer();
+ $jsonCodec = $mwServices->getJsonCodec();
+ $this->persistentCache = new PersistentDatabaseCache( $lb, $jsonCodec );
+ }
+
+ protected function tearDown(): void {
+ $this->persistentCache->clear();
+ parent::tearDown();
+ }
+
+ /** @dataProvider provideTestSet */
+ public function testGetSet(
+ string $keyname,
+ $value,
+ ?int $exptime,
+ ?string $tag
+ ) {
+ $entry = new PersistentCacheEntry(
+ $keyname,
+ $value,
+ $exptime,
+ $tag
+ );
+
+ $this->persistentCache->set( $entry );
+
+ $getEntries = $this->persistentCache->get( $keyname );
+ $this->assertCacheEntryEqual( $entry, $getEntries[0] );
+ }
+
+ /** @dataProvider provideTestSetMulti */
+ public function testGetSetMulti( array $inputs, int $exptime = null, string $tag = null ) {
+ $entries = $this->getEntriesFromInput( $inputs, $exptime, $tag );
+ $this->persistentCache->set( ...$entries );
+
+ $getEntries = $this->persistentCache->get( ...array_keys( $inputs ) );
+
+ foreach ( $entries as $index => $entry ) {
+ $this->assertCacheEntryEqual(
+ $entry,
+ $getEntries[$index]
+ );
+ }
+ }
+
+ public function testHas() {
+ $entry = new PersistentCacheEntry( 'hello', null, null, null );
+ $this->persistentCache->set( $entry );
+ $this->assertTrue( $this->persistentCache->has( 'hello' ) );
+ $this->assertFalse( $this->persistentCache->has( 'hello2' ) );
+ }
+
+ /** @dataProvider provideTestHasEntryWithTag */
+ public function testHasEntryWithTag(
+ array $input,
+ string $tagToSearch,
+ bool $expected,
+ string $message
+ ) {
+ $entry = new PersistentCacheEntry(
+ $input['keyname'],
+ $input['value'],
+ $input['exptime'],
+ $input['tag']
+ );
+ $this->persistentCache->set( $entry );
+
+ $hasTag = $this->persistentCache->hasEntryWithTag( $tagToSearch );
+ $this->assertSame( $expected, $hasTag, $message );
+ }
+
+ /** @dataProvider provideTestHasExpired */
+ public function testHasExpiredEntry( array $input, bool $expected ) {
+ $entry = new PersistentCacheEntry(
+ $input['keyname'],
+ $input['value'],
+ $input['exptime'],
+ $input['tag']
+ );
+
+ $this->persistentCache->set( $entry );
+
+ $getEntry = $this->persistentCache->get( $input['keyname'] )[0];
+
+ $this->assertSame( $expected, $entry->hasExpired() );
+ $this->assertSame( $expected, $getEntry->hasExpired() );
+ }
+
+ /** @dataProvider provideTestGetByTag */
+ public function testGetByTag(
+ array $inputs, ?int $exptime, ?string $inputTag, string $searchTag, int $count
+ ) {
+ $entries = $this->getEntriesFromInput( $inputs, $exptime, $inputTag );
+
+ $this->persistentCache->set( ...$entries );
+ $entries = $this->persistentCache->getByTag( $searchTag );
+
+ $this->assertCount( $count, $entries );
+ }
+
+ public function testDelete() {
+ $testTag = 'test';
+ $entry = new PersistentCacheEntry( 'hello', null, null, $testTag );
+ $secondEntry = new PersistentCacheEntry( 'hello2', null, null, $testTag );
+
+ $this->persistentCache->set( $entry );
+ $this->persistentCache->set( $secondEntry );
+
+ $getEntries = $this->persistentCache->getByTag( $testTag );
+
+ $this->assertCount( 2, $getEntries );
+
+ $this->persistentCache->delete( 'hello', 'hello2' );
+
+ $getEntries = $this->persistentCache->getByTag( $testTag );
+ $this->assertEmpty( $getEntries );
+ }
+
+ public function testDeleteEntriesWithTag() {
+ $testTag = 'test';
+ $anotherTestTag = 'test2';
+ $entry = new PersistentCacheEntry( 'hello', null, null, $testTag );
+ $secondEntry = new PersistentCacheEntry( 'hello2', null, null, $testTag );
+ $thirdEntry = new PersistentCacheEntry( 'hello2', null, null, $anotherTestTag );
+
+ $this->persistentCache->set( $entry );
+ $this->persistentCache->set( $secondEntry );
+ $this->persistentCache->set( $thirdEntry );
+
+ $this->persistentCache->deleteEntriesWithTag( $testTag );
+
+ $testTagEntries = $this->persistentCache->getByTag( $testTag );
+ $this->assertEmpty( $testTagEntries );
+
+ $anotherTagEntries = $this->persistentCache->getByTag( $anotherTestTag );
+ $this->assertNotEmpty( $anotherTagEntries );
+ }
+
+ public function testKeyLength() {
+ $longTestKey = str_repeat( 'verylongkey', 30 );
+
+ $this->expectException( InvalidArgumentException::class );
+ $this->expectExceptionMessageMatches( '/the length of key/i' );
+
+ new PersistentCacheEntry( $longTestKey, null, null );
+ }
+
+ public function testTagLength() {
+ $longTestTag = str_repeat( 'verylongtag', 30 );
+
+ $this->expectException( InvalidArgumentException::class );
+ $this->expectExceptionMessageMatches( '/the length of tag/i' );
+
+ new PersistentCacheEntry( 'testkey', null, null, $longTestTag );
+ }
+
+ public function testExtendGroupExpiryTime() {
+ $tomorrow = ( new DateTime() )->add( new DateInterval( 'P1D' ) );
+ $key = 'hello';
+ $incrementedTime = $tomorrow->getTimestamp() + 100;
+
+ $entry = new PersistentCacheEntry( $key, 'value', $tomorrow->getTimestamp() );
+
+ $this->persistentCache->set( $entry );
+ $this->persistentCache->setExpiry( $key, $incrementedTime );
+
+ $cacheEntry = $this->persistentCache->get( $key );
+ $this->assertEquals( $incrementedTime, $cacheEntry[0]->exptime() );
+ }
+
+ public function provideTestSet() {
+ yield [
+ 'keyname' => 'hello',
+ 'value' => 'World',
+ 'exptime' => ( new DateTime() )->getTimestamp(),
+ 'tag' => null
+ ];
+
+ yield [
+ 'keyname' => 'hello',
+ 'value' => 'World',
+ 'exptime' => null,
+ 'tag' => 'test'
+ ];
+
+ yield [
+ 'keyname' => 'key',
+ 'value' => null,
+ 'exptime' => null,
+ 'tag' => null
+ ];
+ }
+
+ public function provideTestSetMulti() {
+ yield [
+ 'inputs' => [
+ 'key' => 'value',
+ 'key2' => 'value2'
+ ],
+ 'exptime' => null,
+ 'tag' => null
+ ];
+
+ yield [
+ 'inputs' => [
+ 'key5' => 'value5',
+ 'key6' => null
+ ],
+ 'exptime' => ( new DateTime() )->getTimestamp(),
+ 'tag' => 'test'
+ ];
+ }
+
+ public function provideTestHasEntryWithTag() {
+ $testTag = 'test';
+ $today = new DateTime();
+ $tomorrow = ( new DateTime() )->add( new DateInterval( 'P1D' ) );
+ $yesterday = ( new DateTime() )->sub( new DateInterval( 'P1D' ) );
+
+ yield [
+ 'input' => [
+ 'keyname' => 'hello',
+ 'value' => 'World',
+ 'exptime' => $today->getTimestamp(),
+ 'tag' => null
+ ],
+ 'expectedTag' => $testTag,
+ 'hasEntryWithTag' => false,
+ 'testMessage' => 'return false if no tag is present'
+ ];
+
+ yield [
+ 'input' => [
+ 'keyname' => 'hello',
+ 'value' => 'World',
+ 'exptime' => $tomorrow->getTimestamp(),
+ 'tag' => $testTag
+ ],
+ 'expectedTag' => $testTag,
+ 'hasEntryWithTag' => true,
+ 'testMessage' => 'return true if tag is present'
+ ];
+
+ yield [
+ 'input' => [
+ 'keyname' => 'hello',
+ 'value' => 'World',
+ 'exptime' => $yesterday->getTimestamp(),
+ 'tag' => $testTag
+ ],
+ 'expectedTag' => $testTag,
+ 'hasEntryWithTag' => true,
+ 'testMessage' => 'return true for entries that have expired'
+ ];
+ }
+
+ public function provideTestHasExpired() {
+ $tomorrow = ( new DateTime() )->add( new DateInterval( 'P1D' ) );
+ $yesterday = ( new DateTime() )->sub( new DateInterval( 'P1D' ) );
+
+ yield [
+ 'input' => [
+ 'keyname' => 'hello',
+ 'value' => 'World',
+ 'exptime' => $tomorrow->getTimestamp(),
+ 'tag' => null
+ ],
+ 'hasEntryExpired' => false,
+ ];
+
+ yield [
+ 'input' => [
+ 'keyname' => 'hello',
+ 'value' => 'World',
+ 'exptime' => $yesterday->getTimestamp(),
+ 'tag' => null
+ ],
+ 'hasEntryExpired' => true,
+ ];
+ }
+
+ public function provideTestGetByTag() {
+ $testTag = 'test';
+ yield [
+ 'inputs' => [
+ 'key' => 'value',
+ 'key2' => 'value2'
+ ],
+ 'exptime' => null,
+ 'tag' => $testTag,
+ 'test2',
+ 'expectedEntryCount' => 0
+ ];
+
+ yield [
+ 'input' => [
+ 'key5' => 'value5',
+ 'key6' => null
+ ],
+ 'exptime' => ( new DateTime() )->getTimestamp(),
+ 'tag' => $testTag,
+ 'expectedTag' => $testTag,
+ 'expectedEntryCount' => 2
+ ];
+ }
+
+ private function assertCacheEntryEqual(
+ PersistentCacheEntry $expected,
+ PersistentCacheEntry $actual
+ ): void {
+ $this->assertSame( $expected->key(), $actual->key() );
+ $this->assertEquals( $expected->value(), $actual->value() );
+ $this->assertSame( $expected->exptime(), $actual->exptime() );
+ $this->assertSame( $expected->tag(), $actual->tag() );
+ }
+
+ /** @return PersistentCacheEntry[] */
+ private function getEntriesFromInput( array $inputs, ?int $exptime, ?string $tag ): array {
+ $entries = [];
+ foreach ( $inputs as $key => $value ) {
+ $entries[] = new PersistentCacheEntry(
+ $key,
+ $value,
+ $exptime,
+ $tag
+ );
+ }
+
+ return $entries;
+ }
+}
diff --git a/Translate/tests/phpunit/ElasticSearchTTMServerTest.php b/Translate/tests/phpunit/ElasticSearchTTMServerTest.php
new file mode 100644
index 00000000..6fcf9e2a
--- /dev/null
+++ b/Translate/tests/phpunit/ElasticSearchTTMServerTest.php
@@ -0,0 +1,37 @@
+<?php
+declare( strict_types = 1 );
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @covers \ElasticSearchTTMServer
+ */
+class ElasticSearchTTMServerTest extends MediaWikiIntegrationTestCase {
+ public function setUp(): void {
+ parent::setUp();
+
+ $this->config = [
+ 'primary' => [
+ 'class' => ElasticSearchTTMServer::class,
+ 'mirrors' => [ 'secondary' ],
+ ],
+ 'secondary' => [
+ 'class' => ElasticSearchTTMServer::class,
+ 'mirrors' => [ 'primary', 'unknown' ],
+ ],
+ ];
+
+ $this->setMwGlobals( [
+ 'wgTranslateTranslationServices' => $this->config,
+ 'wgTranslateTranslationDefaultService' => 'primary',
+ ] );
+ }
+
+ public function testMirrorsConfig() {
+ $primary = TTMServer::factory( $this->config['primary'] );
+ $this->assertEquals( [ 'secondary' ], $primary->getMirrors() );
+ $secondary = TTMServer::factory( $this->config['secondary'] );
+ $this->expectException( TTMServerException::class );
+ $secondary->getMirrors();
+ }
+}
diff --git a/Translate/tests/phpunit/ExclusionInclusionListTest.php b/Translate/tests/phpunit/ExclusionInclusionListTest.php
new file mode 100644
index 00000000..fdfdfc1f
--- /dev/null
+++ b/Translate/tests/phpunit/ExclusionInclusionListTest.php
@@ -0,0 +1,86 @@
+<?php
+/**
+ * @file
+ * @author Santhosh Thottingal
+ * @copyright Copyright © 2012-2013, Santhosh Thottingal
+ * @license GPL-2.0-or-later
+ */
+
+/** @covers FileBasedMessageGroup */
+class ExclusionInclusionListTest extends MediaWikiIntegrationTestCase {
+
+ /** @var MessageGroup */
+ protected $group;
+ protected $codes;
+ protected $groupConfiguration = [
+ 'BASIC' => [
+ 'class' => FileBasedMessageGroup::class,
+ 'id' => 'test-id',
+ 'label' => 'Test Label',
+ 'namespace' => 'NS_MEDIAWIKI',
+ 'description' => 'Test description',
+ ],
+ 'FILES' => [
+ 'class' => TestFFS::class,
+ ],
+ ];
+
+ protected function setUp(): void {
+ parent::setUp();
+ $this->group = MessageGroupBase::factory( $this->groupConfiguration );
+ $this->codes = array_flip( array_keys( TranslateUtils::getLanguageNames( 'en' ) ) );
+ }
+
+ protected function tearDown(): void {
+ unset( $this->group );
+ parent::tearDown();
+ }
+
+ public function testNoLanguageConf() {
+ $translatableLanguages = $this->group->getTranslatableLanguages();
+ $this->assertNull( $translatableLanguages );
+ }
+
+ public function testAllExclusionList() {
+ $conf = $this->groupConfiguration;
+ $conf['LANGUAGES'] = [
+ 'exclude' => '*',
+ ];
+ $group = MessageGroupBase::factory( $conf );
+ $translatableLanguages = $group->getTranslatableLanguages();
+ $this->assertEquals( count( $translatableLanguages ), 0 );
+ }
+
+ public function testAllInclusionList() {
+ $conf = $this->groupConfiguration;
+ $conf['LANGUAGES'] = [
+ 'include' => '*',
+ ];
+ $group = MessageGroupBase::factory( $conf );
+ $translatableLanguages = $group->getTranslatableLanguages();
+ $this->assertNull( $translatableLanguages );
+ }
+
+ public function testInclusionListOverridesExclusionList() {
+ $conf = $this->groupConfiguration;
+ $conf['LANGUAGES'] = [
+ 'include' => [ 'en', 'hi', 'ta' ],
+ 'exclude' => [ 'ta' ],
+ ];
+ $group = MessageGroupBase::factory( $conf );
+ $translatableLanguages = $group->getTranslatableLanguages();
+ $this->assertTrue( isset( $translatableLanguages['ta'] ) );
+ $this->assertTrue( isset( $translatableLanguages['hi'] ) );
+ }
+
+ public function testSomeExclusionList() {
+ $conf = $this->groupConfiguration;
+ $conf['LANGUAGES'] = [
+ 'exclude' => [ 'or', 'hi' ],
+ ];
+ $group = MessageGroupBase::factory( $conf );
+ $translatableLanguages = $group->getTranslatableLanguages();
+ $this->assertTrue( !isset( $translatableLanguages['hi'] ) );
+ $this->assertTrue( isset( $translatableLanguages['he'] ) );
+ }
+}
diff --git a/Translate/tests/phpunit/FakeTTMServerTest.php b/Translate/tests/phpunit/FakeTTMServerTest.php
new file mode 100644
index 00000000..811fb6ad
--- /dev/null
+++ b/Translate/tests/phpunit/FakeTTMServerTest.php
@@ -0,0 +1,26 @@
+<?php
+declare( strict_types = 1 );
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @covers \FakeTTMServer
+ */
+class FakeTTMServerTest extends MediaWikiIntegrationTestCase {
+ public function testFakeTTMServer() {
+ $server = new FakeTTMServer();
+ $this->assertEquals(
+ [],
+ $server->query( 'en', 'fi', 'daa' ),
+ 'FakeTTMServer returns no suggestions for all queries'
+ );
+
+ $title = $this->createMock( Title::class );
+ $handle = new MessageHandle( $title );
+
+ $this->assertNull(
+ $server->update( $handle, 'text' ),
+ 'FakeTTMServer update is no-op and always succeeds'
+ );
+ }
+}
diff --git a/Translate/tests/phpunit/HookDocTest.php b/Translate/tests/phpunit/HookDocTest.php
new file mode 100644
index 00000000..f50f704a
--- /dev/null
+++ b/Translate/tests/phpunit/HookDocTest.php
@@ -0,0 +1,157 @@
+<?php
+/**
+ * Checks hook documentation is up to date.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @copyright Copyright © 2012-2013, Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+/** @coversNothing */
+class HookDocTest extends MediaWikiIntegrationTestCase {
+ protected $documented = [];
+ protected $used = [];
+ protected $paths = [
+ 'php' => [
+ '',
+ 'ffs',
+ 'messagegroups',
+ 'src/TranslatorInterface',
+ 'src/MessageGroupProcessing',
+ 'src/TranslatorInterface/Aid',
+ 'src/PageTranslation',
+ 'ttmserver',
+ 'utils',
+ 'src/WebService',
+ ],
+ 'js' => [
+ 'resources/js',
+ ],
+ ];
+
+ protected function setUp(): void {
+ parent::setUp();
+ $contents = file_get_contents( __DIR__ . '/../../hooks.txt' );
+ $blocks = preg_split( '/\n\n/', $contents );
+ $type = false;
+
+ foreach ( $blocks as $block ) {
+ if ( $block === '=== PHP events ===' ) {
+ $type = 'php';
+ continue;
+ } elseif ( $block === '=== JavaScript events ===' ) {
+ $type = 'js';
+ continue;
+ } elseif ( !$type ) {
+ continue;
+ }
+
+ if ( $type ) {
+ list( $name, $params ) = self::parseDocBlock( $block );
+ $this->documented[$type][$name] = $params;
+ }
+ }
+
+ $prefix = __DIR__ . '/../..';
+ foreach ( $this->paths['php'] as $path ) {
+ $path = "$prefix/$path/";
+ $hooks = self::getHooksFromPath( $path, [ self::class, 'getPHPHooksFromFile' ] );
+ foreach ( $hooks as $name => $params ) {
+ $this->used['php'][$name] = $params;
+ }
+ }
+
+ foreach ( $this->paths['js'] as $path ) {
+ $path = "$prefix/$path/";
+ $hooks = self::getHooksFromPath( $path, [ self::class, 'getJSHooksFromFile' ] );
+ foreach ( $hooks as $name => $params ) {
+ $this->used['js'][$name] = $params;
+ }
+ }
+ }
+
+ protected static function getJSHooksFromFile( $file ) {
+ $content = file_get_contents( $file );
+ $m = [];
+ preg_match_all( '/\bmw\.hook\(\s*[\'"]([^\'"]+)[\'"]\s*\).fire\(/', $content, $m );
+ $hooks = [];
+ foreach ( $m[1] as $hook ) {
+ $hooks[$hook] = [];
+ }
+
+ return $hooks;
+ }
+
+ protected static function getPHPHooksFromFile( $file ) {
+ $content = file_get_contents( $file );
+ $m = [];
+ // Match Hooks::run( ... )
+ preg_match_all( '/\bHooks::run\(\s*[\'"]([^\'"]+)/', $content, $m );
+ $hooks = [];
+ foreach ( $m[1] as $hook ) {
+ $hooks[$hook] = [];
+ }
+
+ // Match hookContainer->run( ... )
+ preg_match_all( '/->run\(\s*[\'"]([^\'"]+)/', $content, $m );
+ foreach ( $m[1] as $hook ) {
+ $hooks[$hook] = [];
+ }
+
+ return $hooks;
+ }
+
+ protected static function getHooksFromPath( $path, $callback ) {
+ $hooks = [];
+ $dh = opendir( $path );
+ if ( $dh ) {
+ $file = readdir( $dh );
+ while ( $file !== false ) {
+ if ( filetype( $path . $file ) === 'file' ) {
+ $hooks = array_merge( $hooks, call_user_func( $callback, $path . $file ) );
+ }
+ $file = readdir( $dh );
+ }
+ closedir( $dh );
+ }
+
+ return $hooks;
+ }
+
+ protected static function parseDocBlock( $block ) {
+ preg_match( '/^;([^ ]+):/', $block, $match );
+ $name = $match[1];
+ preg_match_all( '/^ ([^ ]+)\s+([ ^])/', $block, $matches, PREG_SET_ORDER );
+ $params = [];
+ foreach ( $matches as $match ) {
+ $params[$match[2]] = $match[1];
+ }
+
+ return [ $name, $params ];
+ }
+
+ public function testHookIsDocumentedPHP() {
+ foreach ( $this->used['php'] as $hook => $params ) {
+ $this->assertArrayHasKey( $hook, $this->documented['php'], "PHP hook $hook is documented" );
+ }
+ }
+
+ public function testHookExistsPHP() {
+ foreach ( $this->documented['php'] as $hook => $params ) {
+ $this->assertArrayHasKey( $hook, $this->used['php'], "Documented php hook $hook exists" );
+ }
+ }
+
+ public function testHookIsDocumentedJS() {
+ foreach ( $this->used['js'] as $hook => $params ) {
+ $this->assertArrayHasKey( $hook, $this->documented['js'], "Js hook $hook is documented" );
+ }
+ }
+
+ public function testHookExistsJS() {
+ foreach ( $this->documented['js'] as $hook => $params ) {
+ $this->assertArrayHasKey( $hook, $this->used['js'], "Documented js hook $hook exists" );
+ }
+ }
+}
diff --git a/Translate/tests/phpunit/Makefile b/Translate/tests/phpunit/Makefile
new file mode 100644
index 00000000..992d6e7b
--- /dev/null
+++ b/Translate/tests/phpunit/Makefile
@@ -0,0 +1,12 @@
+ifndef MW_INSTALL_PATH
+ MW_INSTALL_PATH=../../../..
+endif
+
+TARGETS = ffs/ messagegroups/ tag/ unit/ utils/ [A-Z]*/ *Test.php
+
+default:
+ php ${MW_INSTALL_PATH}/tests/phpunit/phpunit.php .
+
+.PHONY: $(TARGETS)
+$(TARGETS):
+ php ${MW_INSTALL_PATH}/tests/phpunit/phpunit.php $@
diff --git a/Translate/tests/phpunit/MessageCollectionTest.php b/Translate/tests/phpunit/MessageCollectionTest.php
new file mode 100644
index 00000000..c8a31423
--- /dev/null
+++ b/Translate/tests/phpunit/MessageCollectionTest.php
@@ -0,0 +1,109 @@
+<?php
+/**
+ * @author Niklas Laxström
+ * @file
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * @group Database
+ * @group medium
+ * @covers MessageCollection
+ */
+class MessageCollectionTest extends MediaWikiIntegrationTestCase {
+ protected function setUp(): void {
+ parent::setUp();
+
+ $this->setMwGlobals( [
+ 'wgTranslateTranslationServices' => [],
+ ] );
+ $this->setTemporaryHook( 'TranslatePostInitGroups', [ $this, 'getTestGroups' ] );
+
+ $mg = MessageGroups::singleton();
+ $mg->setCache( new WANObjectCache( [ 'cache' => new HashBagOStuff() ] ) );
+ $mg->recache();
+
+ MessageIndex::setInstance( new HashMessageIndex() );
+ MessageIndex::singleton()->rebuild();
+ }
+
+ public function getTestGroups( &$list ) {
+ $messages = [
+ 'translated' => 'bunny',
+ 'untranslated' => 'fanny',
+ 'changedtranslated_1' => 'bunny',
+ 'changedtranslated_2' => 'fanny'
+ ];
+ $list['test-group'] = new MockWikiMessageGroup( 'test-group', $messages );
+
+ return false;
+ }
+
+ public function testMessage() {
+ $user = $this->getTestSysop()->getUser();
+ $title = Title::newFromText( 'MediaWiki:Translated/fi' );
+ $page = $this->getServiceContainer()->getWikiPageFactory()->newFromTitle( $title );
+ $content = ContentHandler::makeContent( 'pupuliini', $title );
+
+ $status = $page->doUserEditContent( $content, $user, __METHOD__ );
+
+ $value = $status->getValue();
+ $revisionRecord = $value['revision-record'];
+ $revisionId = $revisionRecord->getId();
+
+ $group = MessageGroups::getGroup( 'test-group' );
+ $collection = $group->initCollection( 'fi' );
+ $collection->loadTranslations();
+
+ /** @var TMessage $translated */
+ $translated = $collection['translated'];
+ $this->assertInstanceOf( TMessage::class, $translated );
+ $this->assertEquals( 'translated', $translated->key() );
+ $this->assertEquals( 'bunny', $translated->definition() );
+ $this->assertEquals( 'pupuliini', $translated->translation() );
+ $this->assertEquals( $user->getName(), $translated->getProperty( 'last-translator-text' ) );
+ $this->assertEquals( $user->getId(), $translated->getProperty( 'last-translator-id' ) );
+ $this->assertEquals(
+ 'translated',
+ $translated->getProperty( 'status' ),
+ 'message status is translated'
+ );
+ $this->assertEquals( $revisionId, $translated->getProperty( 'revision' ) );
+
+ /** @var TMessage $untranslated */
+ $untranslated = $collection['untranslated'];
+ $this->assertInstanceOf( TMessage::class, $untranslated );
+ $this->assertNull( $untranslated->translation(), 'no translation is null' );
+ $this->assertNull( $untranslated->getProperty( 'last-translator-text' ) );
+ $this->assertNull( $untranslated->getProperty( 'last-translator-id' ) );
+ $this->assertEquals(
+ 'untranslated',
+ $untranslated->getProperty( 'status' ),
+ 'message status is untranslated'
+ );
+ $this->assertNull( $untranslated->getProperty( 'revision' ) );
+ }
+
+ /** @covers MessageCollection::filterChanged */
+ public function testFilterChanged() {
+ $this->assertTrue(
+ $this->editPage( 'MediaWiki:Changedtranslated_1/fi', 'pupuliini_1' )->isGood()
+ );
+ $this->assertTrue(
+ $this->editPage( 'MediaWiki:Changedtranslated_2/fi', 'pupuliini_modified' )->isGood()
+ );
+ $group = MessageGroups::getGroup( 'test-group' );
+ $collection = $group->initCollection( 'fi' );
+ $collection->loadTranslations();
+ $this->assertArrayHasKey( 'changedtranslated_1', $collection->keys() );
+ $this->assertArrayHasKey( 'changedtranslated_2', $collection->keys() );
+ // Trick message collection to think it was loaded from file.
+ $collection->setInFile( [
+ 'changedtranslated_1' => 'pupuliini_1',
+ 'changedtranslated_2' => 'pupuliini_2'
+ ] );
+ $collection->filter( 'changed' );
+ $this->assertContains( 'changedtranslated_2', $collection->getMessageKeys() );
+ $this->assertNotContains( 'changedtranslated_1', $collection->getMessageKeys() );
+ }
+}
diff --git a/Translate/tests/phpunit/MessageGroupBaseTest.php b/Translate/tests/phpunit/MessageGroupBaseTest.php
new file mode 100644
index 00000000..5cd59d6c
--- /dev/null
+++ b/Translate/tests/phpunit/MessageGroupBaseTest.php
@@ -0,0 +1,247 @@
+<?php
+declare( strict_types = 1 );
+
+use MediaWiki\Extension\Translate\TranslatorInterface\Insertable\Insertable;
+use MediaWiki\Extension\Translate\TranslatorInterface\Insertable\InsertablesSuggester;
+use MediaWiki\Extension\Translate\Validation\MessageValidator;
+use MediaWiki\Extension\Translate\Validation\ValidationIssues;
+use MediaWiki\Extension\Translate\Validation\ValidationRunner;
+
+/**
+ * @license GPL-2.0-or-later
+ * @covers MessageGroupBase
+ */
+class MessageGroupBaseTest extends MediaWikiIntegrationTestCase {
+ /** @var MessageGroup */
+ protected $group;
+ protected $groupConfiguration = [
+ 'BASIC' => [
+ 'class' => FileBasedMessageGroup::class,
+ 'id' => 'test-id',
+ 'label' => 'Test Label',
+ 'namespace' => 'NS_MEDIAWIKI',
+ 'description' => 'Test description',
+ ],
+ ];
+
+ protected function setUp(): void {
+ parent::setUp();
+ $this->group = MessageGroupBase::factory( $this->groupConfiguration );
+ }
+
+ protected function tearDown(): void {
+ unset( $this->group );
+ parent::tearDown();
+ }
+
+ public function testGetConfiguration() {
+ $this->assertEquals(
+ $this->groupConfiguration,
+ $this->group->getConfiguration(),
+ 'configuration should not change.'
+ );
+ }
+
+ public function testGetId() {
+ $this->assertEquals(
+ $this->groupConfiguration['BASIC']['id'],
+ $this->group->getId(),
+ 'id comes from config.'
+ );
+ }
+
+ public function testGetSourceLanguage() {
+ $this->assertEquals(
+ 'en',
+ $this->group->getSourceLanguage(),
+ 'source language defaults to en.'
+ );
+ }
+
+ public function testGetNamespaceConstant() {
+ $this->assertEquals(
+ NS_MEDIAWIKI,
+ $this->group->getNamespace(),
+ 'should parse string namespace contant.'
+ );
+ }
+
+ public function testGetNamespaceNumber() {
+ $conf = $this->groupConfiguration;
+ $conf['BASIC']['namespace'] = NS_FILE;
+ $this->group = MessageGroupBase::factory( $conf );
+
+ $this->assertEquals(
+ NS_FILE,
+ $this->group->getNamespace(),
+ 'should parse integer namespace number.'
+ );
+ }
+
+ public function testGetNamespaceString() {
+ $conf = $this->groupConfiguration;
+ $conf['BASIC']['namespace'] = 'image';
+ $this->group = MessageGroupBase::factory( $conf );
+
+ $this->assertEquals(
+ NS_FILE,
+ $this->group->getNamespace(),
+ 'should parse string namespace name.'
+ );
+ }
+
+ public function testGetNamespaceInvalid() {
+ $conf = $this->groupConfiguration;
+ $conf['BASIC']['namespace'] = 'ergweofijwef';
+ $this->expectException( MWException::class );
+ $this->expectExceptionMessage( 'No valid namespace defined' );
+ MessageGroupBase::factory( $conf );
+ }
+
+ public function testModifyMessageGroupStates() {
+ // Create a basic workflow.
+ $this->setMwGlobals( [
+ 'wgTranslateWorkflowStates' => [
+ 'progress' => [ 'color' => 'd33' ],
+ 'proofreading' => [ 'color' => 'fc3' ],
+ ],
+ ] );
+ // Install a special permission when the group ID is matched.
+ $this->setTemporaryHook(
+ 'Translate:modifyMessageGroupStates',
+ static function ( $groupId, &$conf ) {
+ if ( $groupId === 'test-id' ) {
+ // No users have this.
+ $conf['proofreading']['right'] = 'inobtanium';
+ }
+ }
+ );
+
+ $expectedStates = [
+ 'progress' => [ 'color' => 'd33' ],
+ 'proofreading' => [ 'color' => 'fc3', 'right' => 'inobtanium' ],
+ ];
+ $states = $this->group->getMessageGroupStates()->getStates();
+ $this->assertEquals( $expectedStates, $states );
+ }
+
+ public function testInsertableValidatorConfiguration() {
+ $conf = $this->groupConfiguration;
+
+ $conf['INSERTABLES'] = [
+ [ 'class' => AnotherFakeInsertablesSuggester::class ]
+ ];
+ $conf['VALIDATORS'] = [];
+ $conf['VALIDATORS'][] = [
+ 'class' => FakeInsertableValidator::class,
+ 'insertable' => true,
+ 'params' => 'TEST'
+ ];
+
+ $conf['VALIDATORS'][] = [
+ 'class' => AnotherFakeInsertableValidator::class,
+ 'insertable' => false,
+ 'params' => 'TEST2'
+ ];
+
+ $this->group = MessageGroupBase::factory( $conf );
+ $messageValidators = $this->group->getValidator();
+ $insertables = $this->group->getInsertablesSuggester()->getInsertables( '' );
+
+ $this->assertInstanceOf( ValidationRunner::class, $messageValidators,
+ "should correctly fetch a 'ValidationRunner' using the 'VALIDATOR' configuration."
+ );
+
+ // Returns insertables from,
+ // 1. INSERTABLES > AnotherFakeInsertablesSuggester
+ // 2. VALIDATORS > FakeInsertableValidator ( insertable => true )
+ // Does not return VALIDATORS > AnotherFakeInsertableValidator ( insertable => false )
+ $this->assertCount( 2, $insertables,
+ "should not add non-insertable validator when 'insertable' is false."
+ );
+
+ $this->assertEquals(
+ new Insertable( 'Fake', 'Insertable', 'Validator' ),
+ $insertables[1],
+ "should correctly fetch an 'InsertableValidator' when 'insertable' is true."
+ );
+ }
+
+ public function testInsertableArrayConfiguration() {
+ $conf = $this->groupConfiguration;
+
+ $conf['INSERTABLES'] = [
+ [
+ 'class' => FakeInsertableValidator::class,
+ 'params' => 'Regex'
+ ],
+ [
+ 'class' => AnotherFakeInsertableValidator::class,
+ 'params' => 'Regex'
+ ]
+ ];
+
+ $this->group = MessageGroupBase::factory( $conf );
+ $insertables = $this->group->getInsertablesSuggester()->getInsertables( '' );
+
+ $this->assertCount( 2, $insertables,
+ "should fetch the correct count of 'Insertables' when 'InsertablesSuggesters' " .
+ "are configured using the array configuration."
+ );
+
+ $this->assertEquals(
+ new Insertable( 'Another', 'Fake Insertable', 'Validator' ),
+ $insertables[1],
+ "should fetch the correct 'Insertables' when 'InsertablesSuggesters' " .
+ "are configured using the array configuration."
+ );
+ }
+
+ public function testGetManglers() {
+ $conf = $this->groupConfiguration;
+ $conf['MANGLER'] = [
+ 'class' => 'StringMatcher',
+ 'prefix' => 'msg-prefix-',
+ 'patterns' => [ '*' ]
+ ];
+ $this->group = MessageGroupBase::factory( $conf );
+
+ $manglers = $this->group->getMangler();
+ $this->assertNotNull( $manglers );
+
+ $key = $manglers->mangle( 'key' );
+ $this->assertEquals( 'msg-prefix-key', $key, 'message should be mangled as per configuration' );
+ }
+}
+
+class FakeInsertablesSuggester implements InsertablesSuggester {
+ public function getInsertables( string $text ): array {
+ return [ new Insertable( 'Fake', 'Insertables', 'Suggester' ) ];
+ }
+}
+
+class AnotherFakeInsertablesSuggester implements InsertablesSuggester {
+ public function getInsertables( string $text ): array {
+ return [ new Insertable( 'AnotherFake', 'Insertables', 'Suggester' ) ];
+ }
+}
+
+class FakeInsertableValidator implements MessageValidator, InsertablesSuggester {
+ public function getIssues( TMessage $message, string $targetLanguage ): ValidationIssues {
+ return new ValidationIssues();
+ }
+
+ public function getInsertables( string $text ): array {
+ return [ new Insertable( 'Fake', 'Insertable', 'Validator' ) ];
+ }
+}
+
+class AnotherFakeInsertableValidator implements MessageValidator, InsertablesSuggester {
+ public function getIssues( TMessage $message, string $targetLanguage ): ValidationIssues {
+ return new ValidationIssues();
+ }
+
+ public function getInsertables( string $text ): array {
+ return [ new Insertable( 'Another', 'Fake Insertable', 'Validator' ) ];
+ }
+}
diff --git a/Translate/tests/phpunit/MessageGroupProcessing/ManageMessageGroupsActionApiTest.php b/Translate/tests/phpunit/MessageGroupProcessing/ManageMessageGroupsActionApiTest.php
new file mode 100644
index 00000000..0d971ea9
--- /dev/null
+++ b/Translate/tests/phpunit/MessageGroupProcessing/ManageMessageGroupsActionApiTest.php
@@ -0,0 +1,224 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageGroupProcessing;
+
+use ApiTestCase;
+use ApiUsageException;
+use CommentStoreComment;
+use ContentHandler;
+use DateInterval;
+use DateTime;
+use HashBagOStuff;
+use MediaWiki\Extension\Translate\MessageSync\MessageSourceChange;
+use MessageChangeStorage;
+use MessageGroups;
+use MockWikiMessageGroup;
+use Title;
+use TranslateUtils;
+use User;
+use WANObjectCache;
+
+/**
+ * @group medium
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\MessageGroupProcessing\ManageMessageGroupsActionApi
+ */
+class ManageMessageGroupsActionApiTest extends ApiTestCase {
+ /** @var User */
+ protected $user;
+
+ protected function setUp(): void {
+ parent::setUp();
+ $this->setMwGlobals( [
+ 'wgTranslateCacheDirectory' => $this->getNewTempDirectory(),
+ ] );
+
+ $this->setGroupPermissions( 'translate-admin', 'translate-manage', true );
+ $this->user = $this->getTestUser( 'translate-admin' )->getUser();
+
+ $this->setTemporaryHook( 'TranslateInitGroupLoaders', [] );
+ $this->setTemporaryHook( 'TranslatePostInitGroups', [ $this, 'getTestGroups' ] );
+ $this->setupTestData();
+
+ $mg = MessageGroups::singleton();
+ $mg->setCache( new WANObjectCache( [ 'cache' => new HashBagOStuff() ] ) );
+ $mg->recache();
+ }
+
+ public function getTestGroups( array &$list ): bool {
+ $group = new MockWikiMessageGroup( 'testgroup-api', [] );
+ $list['testgroup-api'] = $group;
+
+ // Adding this manually, since this will not be present in the list of changes
+ // and will be fetched manually from the database.
+ $title = Title::makeTitle( $group->getNamespace(),
+ TranslateUtils::title( 'keyDeleted', 'en-gb', $group->getNamespace() ) );
+ $content = ContentHandler::makeContent( 'world 23', $title );
+ $page = $this->getServiceContainer()->getWikiPageFactory()->newFromTitle( $title );
+ $updater = $page
+ ->newPageUpdater( self::getTestSysop()->getUser() )
+ ->setContent( 'main', $content );
+
+ $updater->saveRevision( CommentStoreComment::newUnsavedComment( __METHOD__ ) );
+
+ return false;
+ }
+
+ public function testRename(): void {
+ $filePath = self::getStoragePath();
+
+ $this->doApiRequestWithToken(
+ [
+ 'action' => 'managemessagegroups',
+ 'groupId' => 'testgroup-api',
+ 'renameMessageKey' => 'keyDeleted',
+ 'messageKey' => 'keyAdded',
+ 'operation' => 'rename',
+ 'changesetName' => MessageChangeStorage::DEFAULT_NAME,
+ 'changesetModified' => time(),
+ ], null, $this->user, 'csrf'
+ );
+
+ $sourceChanges = MessageChangeStorage::getGroupChanges( $filePath, 'testgroup-api' );
+ $deletedMsg = $sourceChanges->findMessage( 'en', 'keyDeleted',
+ [ MessageSourceChange::DELETION ] );
+
+ $this->assertNull( $deletedMsg, 'previously deleted message ' .
+ 'no longer has the deleted state' );
+
+ $renameDeleted = $sourceChanges->findMessage( 'en', 'keyDeleted',
+ [ MessageSourceChange::RENAME ] );
+
+ $this->assertArrayHasKey( 'key', $renameDeleted, 'previously deleted message is ' .
+ 'added to the renamed state. ' );
+
+ $this->assertTrue( $sourceChanges->isPreviousState( 'en', 'keyDeleted', [
+ MessageSourceChange::DELETION ] ),
+ 'previous state of the deleted message after being added to rename is deleted.' );
+
+ $renameDeleted = $sourceChanges->findMessage( 'en-gb', 'keyDeleted',
+ [ MessageSourceChange::RENAME ] );
+ $this->assertArrayHasKey( 'key', $renameDeleted, 'non-source language messages are ' .
+ 'also updated as per the source language changes.' );
+ }
+
+ public function testRenameWithPreviousRename(): void {
+ $filePath = self::getStoragePath();
+
+ $this->doApiRequestWithToken(
+ [
+ 'action' => 'managemessagegroups',
+ 'groupId' => 'testgroup-api',
+ 'renameMessageKey' => 'keyDeleted',
+ 'messageKey' => 'renameAdded',
+ 'operation' => 'rename',
+ 'changesetName' => MessageChangeStorage::DEFAULT_NAME,
+ 'changesetModified' => time(),
+ ], null, $this->user, 'csrf'
+ );
+
+ $sourceChanges = MessageChangeStorage::getGroupChanges( $filePath, 'testgroup-api' );
+ $deletedMsg = $sourceChanges->findMessage( 'en', 'renameDeleted',
+ [ MessageSourceChange::DELETION ] );
+
+ $this->assertArrayHasKey( 'key', $deletedMsg, 'previously renamed message is ' .
+ 'restored to the deleted state when the matched message is renamed with ' .
+ 'another key.' );
+
+ $renameDeleted = $sourceChanges->findMessage( 'en', 'keyDeleted',
+ [ MessageSourceChange::RENAME ] );
+ $this->assertArrayHasKey( 'key', $renameDeleted, 'newly renamed message is ' .
+ 'added to the renamed state.' );
+ }
+
+ public function testAddAsNew(): void {
+ $filePath = self::getStoragePath();
+
+ $this->doApiRequestWithToken(
+ [
+ 'action' => 'managemessagegroups',
+ 'groupId' => 'testgroup-api',
+ 'messageKey' => 'renameAdded',
+ 'operation' => 'new',
+ 'changesetName' => MessageChangeStorage::DEFAULT_NAME,
+ 'changesetModified' => time()
+ ], null, $this->user, 'csrf'
+ );
+
+ $sourceChanges = MessageChangeStorage::getGroupChanges( $filePath, 'testgroup-api' );
+ $deletedMsg = $sourceChanges->findMessage( 'en', 'renameDeleted',
+ [ MessageSourceChange::DELETION ] );
+ $addedMsg = $sourceChanges->findMessage( 'en', 'renameAdded',
+ [ MessageSourceChange::ADDITION ] );
+
+ $this->assertArrayHasKey( 'key', $deletedMsg, 'previously renamed message is ' .
+ ' updated when an add as new operation is performed.' );
+ $this->assertEquals( 'renameDeleted', $deletedMsg['key'] );
+
+ $this->assertArrayHasKey( 'key', $addedMsg, 'previously renamed message is ' .
+ ' updated when an add as new operation is performed.' );
+ $this->assertEquals( 'renameAdded', $addedMsg['key'] );
+
+ $deletedMsg = $sourceChanges->findMessage( 'en-gb', 'renameDeleted',
+ [ MessageSourceChange::DELETION ] );
+ $addedMsg = $sourceChanges->findMessage( 'en-gb', 'renameAdded',
+ [ MessageSourceChange::ADDITION ] );
+
+ $this->assertArrayHasKey( 'key', $deletedMsg, 'previously renamed message in ' .
+ 'non-source language is updated when an add as new operation is performed.' );
+ $this->assertArrayHasKey( 'key', $addedMsg, 'previously renamed message in ' .
+ 'non-source language is updated when an add as new operation is performed.' );
+ }
+
+ public function testAjaxAtomicity(): void {
+ $date = new DateTime();
+ // subtract period of 1 day
+ $date->sub( new DateInterval( 'P1D' ) );
+
+ $this->expectException( ApiUsageException::class );
+ $this->doApiRequestWithToken(
+ [
+ 'action' => 'managemessagegroups',
+ 'groupId' => 'testgroup-api',
+ 'messageKey' => 'renameAdded',
+ 'operation' => 'new',
+ 'changesetName' => MessageChangeStorage::DEFAULT_NAME,
+ 'changesetModified' => $date->getTimestamp(),
+ ], null, $this->user, 'csrf'
+ );
+ }
+
+ private static function getStoragePath(): string {
+ return MessageChangeStorage::getCdbPath( MessageChangeStorage::DEFAULT_NAME );
+ }
+
+ private function setupTestData(): void {
+ $sourceChanges = new MessageSourceChange();
+
+ $sourceChanges->addAddition( 'en', 'keyAdded', 'world 12' );
+ $sourceChanges->addDeletion( 'en', 'keyDeleted', 'world 23' );
+ $sourceChanges->addRename( 'en', [
+ 'key' => 'renameAdded',
+ 'content' => 'renameAdded content'
+ ], [
+ 'key' => 'renameDeleted',
+ 'content' => 'renameDeleted content'
+ ] );
+
+ $sourceChanges->addRename( 'en-gb', [
+ 'key' => 'renameAdded',
+ 'content' => 'renameAdded content'
+ ], [
+ 'key' => 'renameDeleted',
+ 'content' => 'renameDeleted content'
+ ] );
+ $sourceChanges->addAddition( 'en-gb', 'keyAdded', 'world 12' );
+ $sourceChanges->addDeletion( 'en-gb', 'keyDeleted', 'world 23' );
+
+ $changeData = [];
+ $changeData['testgroup-api'] = $sourceChanges;
+
+ MessageChangeStorage::writeChanges( $changeData, self::getStoragePath() );
+ }
+}
diff --git a/Translate/tests/phpunit/MessageGroupProcessing/MessageGroupReviewTest.php b/Translate/tests/phpunit/MessageGroupProcessing/MessageGroupReviewTest.php
new file mode 100644
index 00000000..b6cf456b
--- /dev/null
+++ b/Translate/tests/phpunit/MessageGroupProcessing/MessageGroupReviewTest.php
@@ -0,0 +1,30 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageGroupProcessing;
+
+use MediaWiki\Extension\Translate\Services;
+use MediaWiki\Extension\Translate\SystemUsers\FuzzyBot;
+use MediaWikiIntegrationTestCase;
+use WikiMessageGroup;
+
+/**
+ * Unit tests for message group state change api.
+ * @author Niklas Laxström
+ * @group Database
+ * @covers \MediaWiki\Extension\Translate\MessageGroupProcessing\MessageGroupReview
+ */
+class MessageGroupReviewTest extends MediaWikiIntegrationTestCase {
+ public function testGetSetState(): void {
+ $group = new WikiMessageGroup( 'testgroup', 'wewgweg' );
+ $messageGroupReview = Services::getInstance()->getMessageGroupReview();
+ $ok = $messageGroupReview->changeState( $group, 'fi', 'newstate', FuzzyBot::getUser() );
+ $this->assertTrue( $ok, 'state was changed' );
+
+ $state = $messageGroupReview->getState( $group, 'fi' );
+ $this->assertEquals( 'newstate', $state, 'state was changed to expected value' );
+
+ $ok = $messageGroupReview->changeState( $group, 'fi', 'newstate', FuzzyBot::getUser() );
+ $this->assertFalse( $ok, 'state was not changed again' );
+ }
+}
diff --git a/Translate/tests/phpunit/MessageGroupProcessing/QueryManageMessageGroupsActionApiTest.php b/Translate/tests/phpunit/MessageGroupProcessing/QueryManageMessageGroupsActionApiTest.php
new file mode 100644
index 00000000..966a8c54
--- /dev/null
+++ b/Translate/tests/phpunit/MessageGroupProcessing/QueryManageMessageGroupsActionApiTest.php
@@ -0,0 +1,117 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageGroupProcessing;
+
+use ApiTestCase;
+use HashBagOStuff;
+use MediaWiki\Extension\Translate\MessageSync\MessageSourceChange;
+use MessageChangeStorage;
+use MessageGroups;
+use MockWikiMessageGroup;
+use User;
+use WANObjectCache;
+
+/**
+ * @group medium
+ * @covers MediaWiki\Extension\Translate\MessageGroupProcessing\QueryManageMessageGroupsActionApi
+ * @license GPL-2.0-or-later
+ */
+class QueryManageMessageGroupsActionApiTest extends ApiTestCase {
+ /** @var User */
+ protected $user;
+
+ protected function setUp(): void {
+ parent::setUp();
+ $this->setMwGlobals( [
+ 'wgTranslateCacheDirectory' => $this->getNewTempDirectory()
+ ] );
+
+ $this->setGroupPermissions( 'translate-admin', 'translate-manage', true );
+ $this->user = $this->getTestUser( 'translate-admin' )->getUser();
+
+ $this->setTemporaryHook( 'TranslateInitGroupLoaders', [] );
+ $this->setTemporaryHook( 'TranslatePostInitGroups', [ $this, 'getTestGroups' ] );
+ $this->setupTestData();
+
+ $mg = MessageGroups::singleton();
+ $mg->setCache( new WANObjectCache( [ 'cache' => new HashBagOStuff() ] ) );
+ $mg->recache();
+ }
+
+ public function getTestGroups( array &$list ): bool {
+ $group = new MockWikiMessageGroup( 'testgroup-api', [] );
+ $list['testgroup-api'] = $group;
+
+ return false;
+ }
+
+ public function testGetRenames(): void {
+ $data = $this->doApiRequest(
+ [
+ 'action' => 'query',
+ 'meta' => 'managemessagegroups',
+ 'mmggroupId' => 'testgroup-api',
+ 'mmgmessageKey' => 'keyAdded1',
+ 'mmgchangesetName' => MessageChangeStorage::DEFAULT_NAME,
+ ], null, false, $this->user
+ );
+
+ $apiRespose = $data[0]['query']['managemessagegroups'][0];
+ $this->assertCount( 3, $apiRespose, 'rename suggestions lists deleted messages from ' .
+ ' the source language' );
+
+ $testData = $this->getRenameMessages();
+ foreach ( $apiRespose as $index => $msg ) {
+ $this->assertEquals( $msg['key'], $testData[ $index ][0],
+ 'rename suggestion has key set' );
+ $this->assertEquals( $msg['content'], $testData[ $index ][1],
+ 'rename suggestion has content set' );
+ $this->assertEquals( $msg['similarity'], $testData[ $index][2],
+ 'rename suggestion has similarity' );
+ $this->assertArrayHasKey( 'link', $msg, 'rename suggestion has link to message' );
+ $this->assertArrayHasKey( 'title', $msg, 'rename suggestion has message title' );
+ }
+ }
+
+ public function getRenameMessages(): array {
+ return [
+ [
+ 'keyDeleted1',
+ 'keyDeleted1 content',
+ 1
+ ],
+ [
+ 'keyDeleted2',
+ 'keyDeleted2 content',
+ 0
+ ],
+ [
+ 'keyDeleted3',
+ 'keyDeleted3 content',
+ 0
+ ]
+ ];
+ }
+
+ private static function getStoragePath(): string {
+ return MessageChangeStorage::getCdbPath( MessageChangeStorage::DEFAULT_NAME );
+ }
+
+ private function setupTestData(): void {
+ $sourceChanges = new MessageSourceChange();
+
+ $renameData = $this->getRenameMessages();
+ foreach ( $renameData as $rename ) {
+ $sourceChanges->addDeletion( 'en', $rename[0], $rename[1] );
+ }
+
+ $sourceChanges->addDeletion( 'en-gb', 'keyGbDeleted1', 'keyGbDeleted1 content' );
+ $sourceChanges->addAddition( 'en', 'keyAdded1', 'keyDeleted1 content' );
+
+ $changeData = [];
+ $changeData['testgroup-api'] = $sourceChanges;
+
+ MessageChangeStorage::writeChanges( $changeData, self::getStoragePath() );
+ }
+}
diff --git a/Translate/tests/phpunit/MessageGroupProcessing/QueryMessageGroupsActionApiTest.php b/Translate/tests/phpunit/MessageGroupProcessing/QueryMessageGroupsActionApiTest.php
new file mode 100644
index 00000000..0e1011ad
--- /dev/null
+++ b/Translate/tests/phpunit/MessageGroupProcessing/QueryMessageGroupsActionApiTest.php
@@ -0,0 +1,162 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageGroupProcessing;
+
+use ApiTestCase;
+use HashBagOStuff;
+use MessageGroups;
+use WANObjectCache;
+use WikiMessageGroup;
+
+/**
+ * @author Harry Burt
+ * @copyright Copyright © 2012-2013, Harry Burt
+ * @license GPL-2.0-or-later
+ * @group medium
+ * @covers \MediaWiki\Extension\Translate\MessageGroupProcessing\QueryMessageGroupsActionApi
+ */
+class QueryMessageGroupsActionApiTest extends ApiTestCase {
+
+ protected function setUp(): void {
+ parent::setUp();
+
+ $this->setMwGlobals( [
+ 'wgTranslateTranslationServices' => [],
+ ] );
+ $this->setTemporaryHook( 'TranslateInitGroupLoaders', [] );
+ $this->setTemporaryHook( 'TranslatePostInitGroups', [ $this, 'getTestGroups' ] );
+
+ $mg = MessageGroups::singleton();
+ $mg->setCache( new WANObjectCache( [ 'cache' => new HashBagOStuff() ] ) );
+ $mg->recache();
+ }
+
+ public function getTestGroups( array &$list ): bool {
+ $exampleMessageGroup = new WikiMessageGroup( 'theid', 'thesource' );
+ $exampleMessageGroup->setLabel( 'thelabel' ); // Example
+ $exampleMessageGroup->setNamespace( 5 ); // Example
+ $list['theid'] = $exampleMessageGroup;
+
+ $anotherExampleMessageGroup = new WikiMessageGroup( 'anotherid', 'thesource' );
+ $anotherExampleMessageGroup->setLabel( 'thelabel' ); // Example
+ $anotherExampleMessageGroup->setNamespace( 5 ); // Example
+ $list['anotherid'] = $anotherExampleMessageGroup;
+
+ return false;
+ }
+
+ public function testAPIAccuracy(): void {
+ list( $data ) = $this->doApiRequest(
+ [
+ 'action' => 'query',
+ 'meta' => 'messagegroups',
+ 'mgprop' => 'id|label|class|namespace|exists',
+ // @see https://gerrit.wikimedia.org/r/#/c/160222/
+ 'continue' => ''
+ ]
+ );
+
+ // Check structure
+ $this->assertArrayNotHasKey( 'warnings', $data );
+ $this->assertArrayHasKey( 'query', $data );
+ $this->assertCount( 1, $data['query'] );
+ $this->assertArrayHasKey( 'messagegroups', $data['query'] );
+
+ // Basic content checks
+ $items = $data['query']['messagegroups'];
+
+ // Ignore dynamic groups
+ foreach ( $items as $index => $group ) {
+ if ( $group['id'][0] === '!' ) {
+ unset( $items[$index] );
+ }
+ }
+
+ // Renumber keys
+ $items = array_values( $items );
+
+ $this->assertCount( 2, $items, 'Only the two groups specified are in the api' );
+ $this->assertStringEndsWith( 'id', $items[0]['id'] );
+ $this->assertStringEndsWith( 'id', $items[1]['id'] );
+ $this->assertSame( 'thelabel', $items[0]['label'] );
+ $this->assertSame( 'thelabel', $items[1]['label'] );
+ $this->assertTrue( $items[0]['exists'] );
+ $this->assertTrue( $items[1]['exists'] );
+ $this->assertSame( 5, $items[0]['namespace'] );
+ $this->assertSame( 5, $items[1]['namespace'] );
+ $this->assertSame( WikiMessageGroup::class, $items[0]['class'] );
+ $this->assertSame( WikiMessageGroup::class, $items[1]['class'] );
+ }
+
+ public function testAPIFilterAccuracy(): void {
+ $ids = [ 'MadeUpGroup' ];
+ $ids += array_keys( MessageGroups::getAllGroups() );
+
+ foreach ( $ids as $id ) {
+ list( $data ) = $this->doApiRequest(
+ [
+ 'action' => 'query',
+ 'meta' => 'messagegroups',
+ 'mgprop' => 'id|label|class|namespace|exists',
+ 'mgfilter' => $id,
+ // @see https://gerrit.wikimedia.org/r/#/c/160222/
+ 'continue' => ''
+ ]
+ );
+
+ if ( $id === 'MadeUpGroup' ) {
+ // Check structure (shouldn't find anything)
+ $this->assertArrayNotHasKey( 'warnings', $data );
+ $this->assertArrayHasKey( 'query', $data );
+ $this->assertCount( 1, $data['query'] );
+ $this->assertArrayHasKey( 'messagegroups', $data['query'] );
+ $this->assertCount( 0, $data['query']['messagegroups'] );
+ continue;
+ }
+
+ // Check structure (filter is unique given these names)
+ $this->assertArrayNotHasKey( 'warnings', $data );
+ $this->assertArrayHasKey( 'query', $data );
+ $this->assertCount( 1, $data['query'] );
+ $this->assertArrayHasKey( 'messagegroups', $data['query'] );
+ $this->assertCount( 1, $data['query']['messagegroups'] );
+
+ // Check content
+ $item = $data['query']['messagegroups'][0];
+ $this->assertCount( 5, $item );
+
+ $this->assertSame( $id, $item['id'] );
+ $this->assertSame( 'thelabel', $item['label'] );
+ $this->assertTrue( $item['exists'] );
+ $this->assertStringEndsWith( 'id', $item['id'] ); // theid, anotherid
+ $this->assertSame( 5, $item['namespace'] );
+ $this->assertSame( WikiMessageGroup::class, $item['class'] );
+ }
+ }
+
+ public function testBadProperty(): void {
+ list( $data ) = $this->doApiRequest(
+ [
+ 'action' => 'query',
+ 'meta' => 'messagegroups',
+ 'mgprop' => 'madeupproperty',
+ // @see https://gerrit.wikimedia.org/r/#/c/160222/
+ 'continue' => ''
+ ]
+ );
+
+ $this->assertArrayHasKey( 'query', $data );
+ $this->assertCount( 1, $data['query'] );
+ $this->assertArrayHasKey( 'messagegroups', $data['query'] );
+ // This doesn't work. invalid properties are only warnings,
+ // so we ged empty groups listed
+ // $this->assertCount( 0, $data['query']['messagegroups'] );
+
+ $this->assertArrayHasKey( 'warnings', $data );
+ $this->assertCount( 1, $data['warnings'] );
+ $this->assertArrayHasKey( 'messagegroups', $data['warnings'] );
+ $this->assertCount( 1, $data['warnings']['messagegroups'] );
+ $this->assertArrayHasKey( 'warnings', $data['warnings']['messagegroups'] );
+ }
+}
diff --git a/Translate/tests/phpunit/MessageGroupStatesUpdaterJobTest.php b/Translate/tests/phpunit/MessageGroupStatesUpdaterJobTest.php
new file mode 100644
index 00000000..cff2c155
--- /dev/null
+++ b/Translate/tests/phpunit/MessageGroupStatesUpdaterJobTest.php
@@ -0,0 +1,225 @@
+<?php
+
+use MediaWiki\Extension\Translate\MessageGroupProcessing\GroupReviewActionApi;
+use MediaWiki\MediaWikiServices;
+
+/**
+ * @group Database
+ * @group medium
+ * @covers MessageGroupStatesUpdaterJob
+ */
+class MessageGroupStatesUpdaterJobTest extends ApiTestCase {
+ protected function setUp(): void {
+ parent::setUp();
+ $this->setMwGlobals( [
+ 'wgTranslateTranslationServices' => [],
+ 'wgTranslateMessageNamespaces' => [ NS_MEDIAWIKI ],
+ ] );
+ $this->setTemporaryHook( 'TranslatePostInitGroups', [ $this, 'getTestGroups' ] );
+
+ $mg = MessageGroups::singleton();
+ $mg->setCache( new WANObjectCache( [ 'cache' => new HashBagOStuff() ] ) );
+ $mg->recache();
+ }
+
+ public function getTestGroups( &$list ) {
+ $messages = [ 'key1' => 'msg1', 'key2' => 'msg2' ];
+ $list['group-trans'] = new MessageGroupWithTransitions( 'group-trans', $messages );
+ $list['group-notrans'] = new MessageGroupWithoutTransitions( 'group-notrans', [] );
+
+ return false;
+ }
+
+ public function testGetGroupsWithTransitions() {
+ $handle = new MockMessageHandle();
+ $groups = MessageGroupStatesUpdaterJob::getGroupsWithTransitions( $handle );
+ foreach ( $groups as $id => $transitions ) {
+ $this->assertEquals( 'group-trans', $id );
+ }
+ }
+
+ /** @dataProvider provideStatValues */
+ public function testGetStatValue( $type, $expected ) {
+ $stats = [
+ MessageGroupStats::TOTAL => 666,
+ MessageGroupStats::FUZZY => 111,
+ MessageGroupStats::TRANSLATED => 222,
+ MessageGroupStats::PROOFREAD => 111,
+ ];
+ $actual = MessageGroupStatesUpdaterJob::getStatValue( $stats, $type );
+ $this->assertEquals( $expected, $actual );
+ }
+
+ public static function provideStatValues() {
+ return [
+ [ 'UNTRANSLATED', 333 ],
+ [ 'OUTDATED', 111 ],
+ [ 'TRANSLATED', 222 ],
+ [ 'PROOFREAD', 111 ],
+ ];
+ }
+
+ /** @dataProvider provideMatchCondition */
+ public function testMatchCondition( $expected, $value, $condition, $max ) {
+ $actual = MessageGroupStatesUpdaterJob::matchCondition( $value, $condition, $max );
+ $this->assertEquals( $expected, $actual );
+ }
+
+ public static function provideMatchCondition() {
+ return [
+ [ true, 0, 'ZERO', 666 ],
+ [ false, 1, 'ZERO', 666 ],
+ [ true, 1, 'NONZERO', 666 ],
+ [ false, 0, 'NONZERO', 666 ],
+ [ true, 666, 'MAX', 666 ],
+ [ false, 0, 'MAX', 666 ],
+ [ false, 12, 'MAX', 666 ],
+ ];
+ }
+
+ public function testGetNewState() {
+ $group = MessageGroups::getGroup( 'group-trans' );
+ $transitions = $group->getMessageGroupStates()->getConditions();
+
+ $stats = [ 5, 0, 0, 0 ];
+ $newstate = MessageGroupStatesUpdaterJob::getNewState( $stats, $transitions );
+ $this->assertEquals( 'unset', $newstate, 'all zero, should be unset' );
+
+ $stats = [ 5, 1, 0, 0 ];
+ $newstate = MessageGroupStatesUpdaterJob::getNewState( $stats, $transitions );
+ $this->assertEquals( 'inprogress', $newstate, 'one translated message' );
+
+ $stats = [ 5, 0, 1, 0 ];
+ $newstate = MessageGroupStatesUpdaterJob::getNewState( $stats, $transitions );
+ $this->assertEquals( 'inprogress', $newstate, 'one outdated message' );
+
+ $stats = [ 5, 1, 1, 0 ];
+ $newstate = MessageGroupStatesUpdaterJob::getNewState( $stats, $transitions );
+ $this->assertEquals( 'inprogress', $newstate, 'one translated and one outdated message' );
+
+ $stats = [ 5, 5, 0, 0 ];
+ $newstate = MessageGroupStatesUpdaterJob::getNewState( $stats, $transitions );
+ $this->assertEquals( 'proofreading', $newstate, 'all translated' );
+ }
+
+ /**
+ * @group Broken
+ * This tests fails regularly on WMF CI but haven't been able to reproduce locally.
+ */
+ public function testHooks() {
+ $user = $this->getTestSysop()->getUser();
+ $group = MessageGroups::getGroup( 'group-trans' );
+
+ // In the beginning...
+ $currentState = GroupReviewActionApi::getState( $group, 'fi' );
+ $this->assertFalse( $currentState, 'groups start from unset state' );
+
+ // First translation
+ $title = Title::newFromText( 'MediaWiki:key1/fi' );
+ $page = $this->getServiceContainer()->getWikiPageFactory()->newFromTitle( $title );
+ $content = ContentHandler::makeContent( 'trans1', $title );
+
+ $status = $page->doUserEditContent( $content, $user, __METHOD__ );
+
+ self::translateRunJobs();
+ $currentState = GroupReviewActionApi::getState( $group, 'fi' );
+ $this->assertEquals( 'inprogress', $currentState, 'in progress after first translation' );
+
+ // First review
+ $this->doApiRequestWithToken( [
+ 'action' => 'translationreview',
+ 'revision' => self::getRevisionRecordId( $status )
+ ], null, $user );
+
+ self::translateRunJobs();
+ $currentState = GroupReviewActionApi::getState( $group, 'fi' );
+ $this->assertEquals( 'inprogress', $currentState, 'in progress while untranslated messages' );
+
+ // Second translation
+ $title = Title::newFromText( 'MediaWiki:key2/fi' );
+ $page = $this->getServiceContainer()->getWikiPageFactory()->newFromTitle( $title );
+ $content = ContentHandler::makeContent( 'trans2', $title );
+
+ $status = $page->doUserEditContent( $content, $user, __METHOD__ );
+
+ self::translateRunJobs();
+ $currentState = GroupReviewActionApi::getState( $group, 'fi' );
+ $this->assertEquals( 'proofreading', $currentState, 'proofreading after second translation' );
+
+ // Second review
+ $this->doApiRequestWithToken( [
+ 'action' => 'translationreview',
+ 'revision' => self::getRevisionRecordId( $status )
+ ], null, $user );
+ self::translateRunJobs();
+ $currentState = GroupReviewActionApi::getState( $group, 'fi' );
+ $this->assertEquals( 'ready', $currentState, 'ready when all proofread' );
+
+ // Change to translation
+ $title = Title::newFromText( 'MediaWiki:key1/fi' );
+ $page = $this->getServiceContainer()->getWikiPageFactory()->newFromTitle( $title );
+ $content = ContentHandler::makeContent( 'trans1 updated', $title );
+
+ $page->doUserEditContent( $content, $user, __METHOD__ );
+
+ self::translateRunJobs();
+ $currentState = GroupReviewActionApi::getState( $group, 'fi' );
+ $this->assertEquals(
+ 'proofreading',
+ $currentState,
+ 'back to proofreading after translation changed'
+ );
+ }
+
+ protected static function getRevisionRecordId( Status $s ) {
+ $value = $s->getValue();
+
+ return $value['revision-record']->getId();
+ }
+
+ protected static function translateRunJobs() {
+ $jobQueueGroup = MediaWikiServices::getInstance()->getJobQueueGroup();
+ do {
+ $job = $jobQueueGroup->pop();
+ if ( !$job ) {
+ break;
+ }
+ $job->run();
+ } while ( true );
+ }
+}
+
+class MockMessageHandle extends MessageHandle {
+ public function __construct() {
+ }
+
+ public function getGroupIds() {
+ return [ 'group-trans', 'group-notrans' ];
+ }
+}
+
+class MessageGroupWithoutTransitions extends MockWikiMessageGroup {
+ public function getMessageGroupStates() {
+ return new MessageGroupStates();
+ }
+}
+
+class MessageGroupWithTransitions extends MockWikiMessageGroup {
+ public function getMessageGroupStates() {
+ return new MessageGroupStates( [
+ 'state conditions' => [
+ [ 'ready', [ 'PROOFREAD' => 'MAX' ] ],
+ [ 'proofreading', [ 'TRANSLATED' => 'MAX' ] ],
+ [
+ 'unset',
+ [
+ 'UNTRANSLATED' => 'MAX',
+ 'OUTDATED' => 'ZERO',
+ 'TRANSLATED' => 'ZERO'
+ ]
+ ],
+ [ 'inprogress', [ 'UNTRANSLATED' => 'NONZERO' ] ],
+ ]
+ ] );
+ }
+}
diff --git a/Translate/tests/phpunit/MessageGroupsTest.php b/Translate/tests/phpunit/MessageGroupsTest.php
new file mode 100644
index 00000000..26b9768f
--- /dev/null
+++ b/Translate/tests/phpunit/MessageGroupsTest.php
@@ -0,0 +1,97 @@
+<?php
+/**
+ * @author Niklas Laxström
+ * @file
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * @group Database
+ * ^ See AggregateMessageGroup::getGroups -> MessageGroups::getPriority
+ * @covers MessageGroups
+ */
+class MessageGroupsTest extends MediaWikiIntegrationTestCase {
+ protected function setUp(): void {
+ parent::setUp();
+
+ $conf = [
+ __DIR__ . '/data/ParentGroups.yaml',
+ __DIR__ . '/data/ValidatorGroup.yaml'
+ ];
+
+ $this->setMwGlobals( [
+ 'wgTranslateGroupFiles' => $conf,
+ 'wgTranslateTranslationServices' => [],
+ 'wgTranslateMessageNamespaces' => [ NS_MEDIAWIKI ],
+ ] );
+
+ $this->setTemporaryHook( 'TranslateInitGroupLoaders',
+ 'FileBasedMessageGroupLoader::registerLoader' );
+
+ $mg = MessageGroups::singleton();
+ $mg->setCache( new WANObjectCache( [ 'cache' => new HashBagOStuff() ] ) );
+ $mg->recache();
+
+ MessageIndex::setInstance( new HashMessageIndex() );
+ MessageIndex::singleton()->rebuild();
+ }
+
+ /** @dataProvider provideGroups */
+ public function testGetParentGroups( $expected, $target ) {
+ $group = MessageGroups::getGroup( $target );
+ $got = MessageGroups::getParentGroups( $group );
+ $this->assertEquals( $expected, $got );
+ }
+
+ public static function provideGroups() {
+ $cases = [];
+ $cases[] = [
+ [ [ 'root1' ], [ 'root2' ] ],
+ 'twoparents'
+ ];
+
+ $cases[] = [
+ [ [ 'root3', 'sub1' ], [ 'root3', 'sub2' ] ],
+ 'oneparent-twopaths'
+ ];
+
+ $cases[] = [
+ [
+ [ 'root4' ],
+ [ 'root4', 'nested1' ],
+ [ 'root4', 'nested1', 'nested2' ],
+ [ 'root4', 'nested2' ],
+ ],
+ 'multilevelnested'
+ ];
+
+ return $cases;
+ }
+
+ public function testHaveSingleSourceLanguage() {
+ $this->setMwGlobals( [
+ 'wgTranslateGroupFiles' => [ __DIR__ . '/data/MixedSourceLanguageGroups.yaml' ],
+ ] );
+ MessageGroups::singleton()->recache();
+
+ $enGroup1 = MessageGroups::getGroup( 'EnglishGroup1' );
+ $enGroup2 = MessageGroups::getGroup( 'EnglishGroup2' );
+ $teGroup1 = MessageGroups::getGroup( 'TeluguGroup1' );
+
+ $this->assertEquals( 'en', MessageGroups::haveSingleSourceLanguage(
+ [ $enGroup1, $enGroup2 ] )
+ );
+ $this->assertSame( '', MessageGroups::haveSingleSourceLanguage(
+ [ $enGroup1, $enGroup2, $teGroup1 ] )
+ );
+ }
+
+ public function testGroupYAMLParsing() {
+ $group = MessageGroups::getGroup( 'test-validator-group' );
+ $msgValidator = $group->getValidator();
+ $suggester = $group->getInsertablesSuggester();
+
+ $this->assertCount( 1, $msgValidator->getValidators() );
+ $this->assertCount( 2, $suggester->getInsertables( "$1 \case" ) );
+ }
+}
diff --git a/Translate/tests/phpunit/MessageIndexTest.php b/Translate/tests/phpunit/MessageIndexTest.php
new file mode 100644
index 00000000..318dd5bb
--- /dev/null
+++ b/Translate/tests/phpunit/MessageIndexTest.php
@@ -0,0 +1,262 @@
+<?php
+/**
+ * Tests for different MessageIndex backends.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+use Wikimedia\TestingAccessWrapper;
+
+/**
+ * @group Database
+ * @group large
+ * @covers MessageIndex
+ */
+class MessageIndexTest extends MediaWikiIntegrationTestCase {
+ protected function setUp(): void {
+ parent::setUp();
+ $this->setMwGlobals( [
+ 'wgTranslateCacheDirectory' => $this->getNewTempDirectory(),
+ 'wgTranslateTranslationServices' => [],
+ 'wgTranslateMessageNamespaces' => [ NS_MEDIAWIKI ]
+ ] );
+
+ $this->setTemporaryHook( 'TranslatePostInitGroups', [ $this, 'getTestGroups' ] );
+
+ $mg = MessageGroups::singleton();
+ $mg->setCache( new WANObjectCache( [ 'cache' => ObjectCache::getInstance( 'hash' ) ] ) );
+ $mg->recache();
+ }
+
+ public function getTestGroups( &$list ) {
+ $messages = [
+ 'translated' => 'bunny',
+ 'untranslated' => 'fanny',
+ 'changedtranslated_1' => 'bunny',
+ 'changedtranslated_2' => 'fanny'
+ ];
+ $list['test-group'] =
+ new MockWikiMessageGroup( 'test-group', $messages );
+
+ return false;
+ }
+
+ public function provideTranslateMessageIndexConfig() {
+ yield [ 'DatabaseMessageIndex', DatabaseMessageIndex::class ];
+ yield [ [ 'DatabaseMessageIndex' ], DatabaseMessageIndex::class ];
+ yield [ [ 'SerializedMessageIndex' ], SerializedMessageIndex::class ];
+ }
+
+ /** @dataProvider provideTranslateMessageIndexConfig */
+ public function testSingleton( $configValue, $expectedClass ) {
+ $this->setMwGlobals( [
+ 'wgTranslateMessageIndex' => $configValue,
+ ] );
+ $wrapIndex = TestingAccessWrapper::newFromClass( MessageIndex::class );
+ $wrapIndex->instance = null;
+
+ $object = MessageIndex::singleton();
+
+ $this->assertInstanceOf( $expectedClass, $object );
+ }
+
+ /** @dataProvider provideTestGetArrayDiff */
+ public function testGetArrayDiff( $expected, $old, $new ) {
+ $actual = MessageIndex::getArrayDiff( $old, $new );
+ $this->assertEquals( $expected['keys'], $actual['keys'], 'key diff' );
+ $this->assertEquals( $expected['values'], $actual['values'], 'value diff' );
+ }
+
+ public function provideTestGetArrayDiff() {
+ $tests = [];
+
+ // Addition
+ $old = [];
+ $new = [
+ 'label' => 'carpet',
+ ];
+ $expected = [
+ 'keys' => [
+ 'add' => [
+ 'label' => [
+ [],
+ [ 'carpet' ],
+ ],
+ ],
+ 'del' => [],
+ 'mod' => [],
+ ],
+ 'values' => [ 'carpet' ],
+ ];
+ $tests[] = [ $expected, $old, $new ];
+
+ // Deletion
+ $old = [
+ 'bath' => [ 'goal', 'morals', 'coronation' ],
+ ];
+ $new = [];
+ $expected = [
+ 'keys' => [
+ 'add' => [],
+ 'del' => [
+ 'bath' => [
+ [ 'goal', 'morals', 'coronation' ],
+ [],
+ ],
+ ],
+ 'mod' => [],
+ ],
+ 'values' => [ 'goal', 'morals', 'coronation' ],
+ ];
+ $tests[] = [ $expected, $old, $new ];
+
+ // No change
+ $old = $new = [
+ 'label' => 'carpet',
+ 'salt' => [ 'morals' ],
+ 'bath' => [ 'goal', 'morals', 'coronation' ],
+ ];
+ $expected = [
+ 'keys' => [
+ 'add' => [],
+ 'del' => [],
+ 'mod' => [],
+ ],
+ 'values' => [],
+ ];
+ $tests[] = [ $expected, $old, $new ];
+
+ // Modification
+ $old = [
+ 'bath' => [ 'goal', 'morals', 'coronation' ],
+ ];
+ $new = [
+ 'bath' => [ 'goal', 'beliefs', 'coronation', 'showcase' ],
+ ];
+ $expected = [
+ 'keys' => [
+ 'add' => [],
+ 'del' => [],
+ 'mod' => [
+ 'bath' => [
+ [ 'goal', 'morals', 'coronation' ],
+ [ 'goal', 'beliefs', 'coronation', 'showcase' ],
+ ],
+ ],
+ ],
+ 'values' => [ 'morals', 'beliefs', 'showcase' ],
+ ];
+ $tests[] = [ $expected, $old, $new ];
+
+ return $tests;
+ }
+
+ protected static function getTestData() {
+ static $data = null;
+ if ( $data === null ) {
+ $data = unserialize( file_get_contents( __DIR__ . '/data/messageindexdata.ser' ) );
+ }
+
+ return $data;
+ }
+
+ /** @dataProvider provideMessageIndexImplementation */
+ public function testMessageIndexImplementation( $mi ) {
+ $data = self::getTestData();
+ /** @var TestableDatabaseMessageIndex|TestableCDBMessageIndex|TestableSerializedMessageIndex */
+ $diff = MessageIndex::getArrayDiff( [], $data );
+ $mi->store( $data, $diff['keys'] );
+
+ $tests = array_rand( $data, 10 );
+ foreach ( $tests as $key ) {
+ $this->assertSame(
+ $data[$key],
+ $mi->get( $key ),
+ "Values are preserved for random key $key"
+ );
+ }
+
+ $cached = $mi->retrieve();
+
+ $tests = array_rand( $data, 10 );
+ foreach ( $tests as $key ) {
+ $this->assertSame(
+ $data[$key],
+ $mi->get( $key ),
+ "Values are preserved after retrieve for random key $key"
+ );
+ }
+
+ $this->assertCount(
+ count( $data ),
+ $cached,
+ 'Cache has same number of elements'
+ );
+ $this->assertEquals( $data, $cached, 'Cache is preserved' );
+ }
+
+ public static function provideMessageIndexImplementation() {
+ return [
+ [ new TestableDatabaseMessageIndex() ],
+ [ new TestableCDBMessageIndex() ],
+ [ new TestableSerializedMessageIndex() ],
+ [ new TestableHashMessageIndex() ],
+ // Not testing CachedMessageIndex because there is no easy way to mockup those.
+ ];
+ }
+
+ public function testInterimCache() {
+ $group = MessageGroups::getGroup( 'test-group' );
+ MessageIndex::singleton()->storeInterim( $group, [
+ 'translated_changed',
+ ] );
+
+ $handle = new MessageHandle(
+ Title::makeTitle( $group->getNamespace(), 'translated_changed' )
+ );
+
+ $this->assertTrue( $handle->isValid() );
+ }
+}
+
+class TestableDatabaseMessageIndex extends DatabaseMessageIndex {
+ public function store( array $a, array $diff ) {
+ parent::store( $a, $diff );
+ }
+
+ public function get( $a ) {
+ return parent::get( $a );
+ }
+}
+
+class TestableCDBMessageIndex extends CDBMessageIndex {
+ public function store( array $a, array $diff ) {
+ parent::store( $a, $diff );
+ }
+
+ public function get( $a ) {
+ return parent::get( $a );
+ }
+}
+
+class TestableSerializedMessageIndex extends SerializedMessageIndex {
+ public function store( array $a, array $diff ) {
+ parent::store( $a, $diff );
+ }
+
+ public function get( $a ) {
+ return parent::get( $a );
+ }
+}
+
+class TestableHashMessageIndex extends HashMessageIndex {
+ public function store( array $a, array $diff ) {
+ parent::store( $a, $diff );
+ }
+
+ public function get( $a ) {
+ return parent::get( $a );
+ }
+}
diff --git a/Translate/tests/phpunit/MessageLoading/QueryMessageCollectionActionApiTest.php b/Translate/tests/phpunit/MessageLoading/QueryMessageCollectionActionApiTest.php
new file mode 100644
index 00000000..d9fa9412
--- /dev/null
+++ b/Translate/tests/phpunit/MessageLoading/QueryMessageCollectionActionApiTest.php
@@ -0,0 +1,68 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageLoading;
+
+use ApiTestCase;
+use HashBagOStuff;
+use MessageGroups;
+use WANObjectCache;
+use WikiMessageGroup;
+
+/**
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @group medium
+ * @covers \MediaWiki\Extension\Translate\MessageLoading\QueryMessageCollectionActionApi
+ */
+class QueryMessageCollectionActionApiTest extends ApiTestCase {
+ protected function setUp(): void {
+ parent::setUp();
+
+ $this->setTemporaryHook(
+ 'TranslatePostInitGroups',
+ static function ( &$list ) {
+ $exampleMessageGroup = new WikiMessageGroup( 'theid', 'thesource' );
+ $exampleMessageGroup->setLabel( 'thelabel' ); // Example
+ $exampleMessageGroup->setNamespace( 5 ); // Example
+ $list['theid'] = $exampleMessageGroup;
+
+ $anotherExampleMessageGroup = new WikiMessageGroup( 'anotherid', 'thesource' );
+ $anotherExampleMessageGroup->setLabel( 'thelabel' ); // Example
+ $anotherExampleMessageGroup->setNamespace( 5 ); // Example
+ $list['anotherid'] = $anotherExampleMessageGroup;
+
+ return false;
+ }
+ );
+
+ $mg = MessageGroups::singleton();
+ $mg->setCache( new WANObjectCache( [ 'cache' => new HashBagOStuff() ] ) );
+ $mg->recache();
+ }
+
+ public function testSameAsSourceLanguage(): void {
+ global $wgLanguageCode;
+
+ $groups = MessageGroups::getAllGroups();
+ list( $response ) = $this->doApiRequest(
+ [
+ 'mcgroup' => $groups['anotherid']->getId(),
+ 'action' => 'query',
+ 'list' => 'messagecollection',
+ 'mcprop' => 'definition|translation|tags|properties',
+ // @see https://gerrit.wikimedia.org/r/#/c/160222/
+ 'continue' => '',
+ 'errorformat' => 'html',
+ 'mclanguage' => $wgLanguageCode
+ ]
+ );
+
+ $this->assertArrayHasKey( 'warnings', $response,
+ 'warning triggered when source language same as target language.' );
+ $this->assertCount( 1, $response['warnings'],
+ 'warning triggered when source language same as target language.' );
+ $this->assertArrayNotHasKey( 'errors', $response,
+ 'no error triggered when source language same as target language.' );
+ }
+}
diff --git a/Translate/tests/phpunit/MessageProcessing/CsvTranslationImporterTest.php b/Translate/tests/phpunit/MessageProcessing/CsvTranslationImporterTest.php
new file mode 100644
index 00000000..59580aa0
--- /dev/null
+++ b/Translate/tests/phpunit/MessageProcessing/CsvTranslationImporterTest.php
@@ -0,0 +1,123 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageProcessing;
+
+use HashBagOStuff;
+use HashMessageIndex;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\CsvTranslationImporter;
+use MediaWiki\Page\WikiPageFactory;
+use MediaWikiIntegrationTestCase;
+use MessageGroups;
+use MessageIndex;
+use MockWikiMessageGroup;
+use WANObjectCache;
+
+/** @covers \MediaWiki\Extension\Translate\MessageGroupProcessing\CsvTranslationImporter */
+class CsvTranslationImporterTest extends MediaWikiIntegrationTestCase {
+ protected function setUp(): void {
+ parent::setUp();
+
+ $this->setMwGlobals( [
+ 'wgTranslateCacheDirectory' => $this->getNewTempDirectory(),
+ 'wgTranslateTranslationServices' => [],
+ 'wgTranslateMessageNamespaces' => [ NS_MEDIAWIKI ]
+ ] );
+
+ $this->setTemporaryHook( 'TranslatePostInitGroups', [ $this, 'getTestGroups' ] );
+
+ $mg = MessageGroups::singleton();
+ $mg->setCache( new WANObjectCache( [ 'cache' => new HashBagOStuff() ] ) );
+ $mg->recache();
+
+ MessageIndex::setInstance( new HashMessageIndex() );
+ MessageIndex::singleton()->rebuild();
+ }
+
+ public function getTestGroups( &$list ) {
+ $messages = [
+ 't1' => 'bunny',
+ 't2' => 'fanny',
+ 't3' => 'bunny',
+ 't4' => 'fanny'
+ ];
+ $list['test-group'] =
+ new MockWikiMessageGroup( 'test-group', $messages );
+
+ return false;
+ }
+
+ /** @dataProvider provideTestParseFile */
+ public function testParseFile( string $filepath, array $errors, ?array $csvRows ): void {
+ $csvTranslationImporter = new CsvTranslationImporter( $this->createMock( WikiPageFactory::class ) );
+ $status = $csvTranslationImporter->parseFile( $filepath );
+
+ foreach ( $errors as $error ) {
+ $this->assertStringContainsString( $error, json_encode( $status->getErrors() ) );
+ }
+
+ if ( $csvRows ) {
+ foreach ( $csvRows as $index => $row ) {
+ $this->assertArrayEquals( $csvRows[$index], $status->getValue()[$index] );
+ }
+
+ }
+ }
+
+ public function provideTestParseFile() {
+ yield [
+ 'filenotexists.csv',
+ [ 'not exist, is not readable or is not a file' ],
+ null
+ ];
+
+ yield [
+ __DIR__ . '/../data/csv-to-import/invalid-unit.csv',
+ [
+ 'Empty message titles found',
+ 'Invalid message title(s) found on row(s): 4'
+ ],
+ null
+ ];
+
+ yield [
+ __DIR__ . '/../data/csv-to-import/invalid-code.csv',
+ [ 'Invalid language codes detected' ],
+ null
+ ];
+
+ yield [
+ __DIR__ . '/../data/csv-to-import/invalid-csv.csv',
+ [ 'No languages found for import' ],
+ null
+ ];
+
+ yield [
+ __DIR__ . '/../data/csv-to-import/valid.csv',
+ [],
+ [
+ [
+ 'unitTitle' => 'MediaWiki:t1',
+ 'translations' => [
+ 'fr' => 'bunny - fr',
+ 'es' => 'bunny - es'
+ ]
+ ],
+ [
+ 'unitTitle' => 'MediaWiki:t3',
+ 'translations' => [
+ 'fr' => 'bunny - fr',
+ 'es' => null
+ ]
+ ],
+ [
+ 'unitTitle' => 'MediaWiki:t4',
+ 'translations' => [
+ 'fr' => null,
+ 'es' => null
+ ]
+ ]
+ ]
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/MessageProcessing/StringMatcherTest.php b/Translate/tests/phpunit/MessageProcessing/StringMatcherTest.php
new file mode 100644
index 00000000..6b4ed774
--- /dev/null
+++ b/Translate/tests/phpunit/MessageProcessing/StringMatcherTest.php
@@ -0,0 +1,112 @@
+<?php
+
+namespace MediaWiki\Extension\Translate\MessageProcessing;
+
+use MediaWikiIntegrationTestCase;
+use Title;
+
+/**
+ * The StringMatcher class is responsible for making sure message keys
+ * from external sources are valid titles in MediaWiki.
+ * @author Niklas Laxström
+ * @file
+ */
+
+/** @covers \MediaWiki\Extension\Translate\MessageProcessing\StringMatcher */
+class StringMatcherTest extends MediaWikiIntegrationTestCase {
+ /** @dataProvider messageKeyProvider */
+ public function testKeyPrefixing(
+ string $key, string $expected, string $prefix, array $rules
+ ): void {
+ $matcher = new StringMatcher( $prefix, $rules );
+ $mangled = $matcher->mangle( $key );
+ $title = Title::makeTitleSafe( NS_MEDIAWIKI, $mangled );
+ $this->assertInstanceOf( Title::class, $title, "Key '$mangled' did not produce valid title" );
+ $unmangled = $matcher->unmangle( $mangled );
+ $this->assertEquals( $key, $unmangled, 'Mangling is reversible' );
+ $this->assertEquals( $expected, $mangled, 'Message is prefixed correctly' );
+ }
+
+ public function messageKeyProvider(): array {
+ // The fourth parameter causes the key to be prefixed or unprefixed
+ $keys = [
+ [ 'key', 'p-key', 'p-', [ 'key' ], 'Exact match' ],
+ [ 'key', 'key', 'p-', [ 'bar' ], 'Exact not match' ],
+ [ 'key', 'p-key', 'p-', [ 'k*' ], 'Prefix match' ],
+ [ 'key', 'key', 'p-', [ 'b*' ], 'Prefix not match' ],
+ [ 'key', 'p-key', 'p-', [ '*y' ], 'Suffix match' ],
+ [ 'key', 'key', 'p-', [ '*r' ], 'Suffix not match' ],
+ [ 'key', 'p-key', 'p-', [ 'k*y' ], 'Wildcard match' ],
+ [ 'key', 'key', 'p-', [ '*a*' ], 'Wildcard not match' ],
+ [ 'key', 'p-key', 'p-', [ 'key', '*ey', 'ke*' ], 'Multiple rules match' ],
+ [ 'key', 'key', 'p-', [ '*a*', '*ar', 'ba*' ], 'Multiple rules not match' ],
+ [ 'key', 'p-key', 'p-', [ '*' ], 'All match' ],
+ [
+ '[k.ssa]', 'p-=5Bk.ssa=5D', 'p-', [ '[k.s*' ],
+ 'Message key with special chars'
+ ],
+ [
+ '[kissa]', '=5Bkissa=5D', 'p-', [ '[k.s*' ],
+ 'Message key with special chars'
+ ],
+ [ 'keyblah/i', 'p-keyblah/i', 'p-', [ 'key*/i' ], 'Slash in pattern does not trigger modifier' ],
+ [
+ 'p-key', 'p-key', 'p-', [ 'b-*' ],
+ 'Unmangle does not remove prefix if pattern doesn\'t match'
+ ]
+ ];
+
+ return $keys;
+ }
+
+ /** @dataProvider problematicMessageKeyProvider */
+ public function testKeyMangling( string $key ): void {
+ $matcher = new StringMatcher();
+ $mangled = $matcher->mangle( $key );
+ $title = Title::makeTitleSafe( NS_MEDIAWIKI, $mangled );
+ $this->assertInstanceOf( Title::class, $title, "Key '$mangled' did not produce a valid title" );
+
+ $unmangled = $matcher->unmangle( $mangled );
+ $this->assertEquals( $key, $unmangled, 'Mangling is reversible' );
+ }
+
+ /** @dataProvider problematicMessageKeyProvider */
+ public function testKeyManglingWithPrefixing( string $key ): void {
+ $matcher = new StringMatcher( 'prefix', [ '*' ] );
+ $mangled = $matcher->mangle( $key );
+ $title = Title::makeTitleSafe( NS_MEDIAWIKI, $mangled );
+ $this->assertInstanceOf( Title::class, $title, "Key '$mangled' did not produce a valid title" );
+
+ $unmangled = $matcher->unmangle( $mangled );
+ $this->assertEquals( $key, $unmangled, 'Mangling is reversible' );
+ }
+
+ public function problematicMessageKeyProvider(): array {
+ $keys = [
+ [ 'key', 'simple string' ],
+ [ 'key[]', 'string with brackets' ],
+ [ 'key%AB', 'string with invalid url encoding' ],
+ [ 'key&amp;', 'string with html entity' ],
+ [ 'key=2A', 'string with fake escaping' ],
+ [ 'общегосударственные', 'Unicode string' ],
+ [ ' la la land_', 'string starting or ending with spaces or underscores' ],
+ [ 'one two__three _four', 'multiple spaces consisting of spaces or underscores' ],
+ [ 'Signed by ~~~', 'Magic tilde expansion' ],
+ [ ':iam', 'string starting with a colon' ],
+ ];
+
+ // Add tests for ranges of exotic ASCII characters
+ foreach ( range( 0, 7 ) as $k ) {
+ $key = '';
+ foreach ( range( 0, 15 ) as $c ) {
+ $key .= chr( $c + 16 * $k );
+ }
+
+ $start = $k * 16;
+ $end = $start + 16;
+ $keys[] = [ $key, "ASCII range $start..$end" ];
+ }
+
+ return $keys;
+ }
+}
diff --git a/Translate/tests/phpunit/PageTranslation/HooksTest.php b/Translate/tests/phpunit/PageTranslation/HooksTest.php
new file mode 100644
index 00000000..4717a63e
--- /dev/null
+++ b/Translate/tests/phpunit/PageTranslation/HooksTest.php
@@ -0,0 +1,232 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use CommentStoreComment;
+use ContentHandler;
+use HashBagOStuff;
+use HashMessageIndex;
+use MediaWiki\MediaWikiServices;
+use MediaWiki\Revision\RevisionRecord;
+use MediaWiki\Revision\SlotRecord;
+use MediaWikiIntegrationTestCase;
+use MessageGroups;
+use MessageIndex;
+use MockWikiValidationMessageGroup;
+use ParserOptions;
+use RequestContext;
+use Status;
+use Title;
+use TranslateHooks;
+use WANObjectCache;
+use Wikimedia\TestingAccessWrapper;
+
+/**
+ * Test for various code using hooks.
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @group Database
+ * @group medium
+ * @covers TranslateHooks
+ */
+class HooksTest extends MediaWikiIntegrationTestCase {
+ protected function setUp(): void {
+ parent::setUp();
+
+ $this->setMwGlobals( [
+ 'wgHooks' => [],
+ 'wgEnablePageTranslation' => true,
+ 'wgTranslateTranslationServices' => [],
+ 'wgTranslateMessageNamespaces' => [ NS_MEDIAWIKI ],
+ 'wgGroupPermissions' => [
+ 'sysop' => [
+ 'translate-manage' => true,
+ ],
+ ],
+ ] );
+
+ TranslateHooks::setupTranslate();
+ $this->setTemporaryHook( 'TranslateInitGroupLoaders',
+ [ 'TranslatablePageMessageGroupStore::registerLoader' ] );
+
+ $this->setTemporaryHook(
+ 'TranslatePostInitGroups',
+ [ $this, 'getTestGroups' ]
+ );
+
+ $mg = MessageGroups::singleton();
+ $mg->setCache( new WANObjectCache( [ 'cache' => new HashBagOStuff() ] ) );
+ $mg->recache();
+
+ $hashIndex = new HashMessageIndex();
+ MessageIndex::setInstance( $hashIndex );
+ $hashIndex->rebuild();
+ }
+
+ public function getTestGroups( array &$groups, array &$deps, array &$autoload ) {
+ $messages = [
+ 'translated' => 'bunny',
+ 'untranslated' => 'fanny',
+ ];
+ $groups['test-group'] = new MockWikiValidationMessageGroup( 'test-group', $messages );
+
+ return false;
+ }
+
+ public function testRenderTagPage() {
+ // Setup objects
+ $superUser = $this->getTestSysop()->getUser();
+ $translatablePageTitle = Title::newFromText( 'Vuosaari' );
+ $pageUpdater = $this->getServiceContainer()
+ ->getWikiPageFactory()
+ ->newFromTitle( $translatablePageTitle )
+ ->newPageUpdater( $superUser );
+ $text = '<translate>pupu</translate>';
+ $content = ContentHandler::makeContent( $text, $translatablePageTitle );
+ $translatablePage = TranslatablePage::newFromTitle( $translatablePageTitle );
+ $parser = $this->getServiceContainer()->getParserFactory()->getInstance();
+ $options = ParserOptions::newFromUser( $superUser );
+ $messageGroups = MessageGroups::singleton();
+
+ // Create the page
+ $commentStoreComment = CommentStoreComment::newUnsavedComment( __METHOD__ );
+ $pageUpdater->setContent( SlotRecord::MAIN, $content );
+ $pageUpdater->saveRevision( $commentStoreComment );
+ $editStatus = $pageUpdater->getStatus();
+
+ $messageGroups->recache();
+
+ // Check that we don't interfere with non-translatable pages at all
+ $parserOutput = $parser->parse( $text, $translatablePageTitle, $options );
+ $actual = $parserOutput->getExtensionData( 'translate-translation-page' );
+ $expected = null;
+ $this->assertSame( $expected, $actual, 'Extension data is not set on unmarked source page' );
+
+ // Mark the page for translation
+ $latestRevisionId = $editStatus->value['revision-record']->getId();
+ $translatablePage->addMarkedTag( $latestRevisionId );
+ $messageGroups->recache();
+ $translationPageTitle = Title::newFromText( 'Vuosaari/fi' );
+ RenderTranslationPageJob::newJob( $translationPageTitle )->run();
+
+ // Check that we don't add data to translatable pages
+ $parserOutput = $parser->parse( $text, $translatablePageTitle, $options );
+ $actual = $parserOutput->getExtensionData( 'translate-translation-page' );
+ $expected = null;
+ $this->assertSame( $expected, $actual, 'Extension data is not set on marked source page' );
+
+ // Check that our code works for translation pages
+ $parserOutput = $parser->parse( 'fi-pupu', $translationPageTitle, $options );
+ $actual = $parserOutput->getExtensionData( 'translate-translation-page' );
+ $this->assertIsArray( $actual, 'Extension data is set on marked page' );
+ $actualTitle = Title::makeTitle(
+ $actual[ 'sourcepagetitle' ][ 'namespace' ],
+ $actual[ 'sourcepagetitle' ][ 'dbkey' ]
+ );
+ $this->assertSame(
+ 'Vuosaari',
+ $actualTitle->getPrefixedText(),
+ 'Source page title is correct'
+ );
+ $this->assertSame(
+ 'fi',
+ $actual[ 'languagecode' ],
+ 'Language code is correct'
+ );
+ $this->assertSame(
+ 'page-Vuosaari',
+ $actual[ 'messagegroupid' ],
+ 'Message group id is correct'
+ );
+ }
+
+ public function testValidateMessagePermission() {
+ $plainUser = $this->getMutableTestUser()->getUser();
+
+ $title = Title::newFromText( 'MediaWiki:translated/fi' );
+ $content = ContentHandler::makeContent( 'pupuliini', $title );
+ $status = new Status();
+
+ $requestContext = new RequestContext();
+ $requestContext->setLanguage( 'en-gb' );
+ $requestContext->setTitle( $title );
+
+ TranslateHooks::validateMessage( $requestContext, $content, $status, '', $plainUser );
+
+ $this->assertFalse( $status->isOK(),
+ 'translation with errors is not saved if a normal user is translating.' );
+ $this->assertGreaterThan( 0, $status->getErrors(),
+ 'errors are specified when translation fails validation.' );
+
+ $newStatus = new Status();
+ $superUser = $this->getTestSysop()->getUser();
+
+ TranslateHooks::validateMessage( $requestContext, $content, $newStatus, '', $superUser );
+
+ $this->assertTrue( $newStatus->isOK(),
+ "translation with errors is saved if user with 'translate-manage' permission is translating." );
+ }
+
+ /** @covers MediaWiki\Extension\Translate\PageTranslation\Hooks::updateTranstagOnNullRevisions */
+ public function testTagNullRevision() {
+ $title = Title::newFromText( 'translated' );
+ $status = $this->editPage(
+ $title->getPrefixedDBkey(),
+ '<translate>Test text</translate>'
+ );
+ $this->assertTrue( $status->isGood(), 'Sanity: must create revision 1' );
+ /** @var RevisionRecord $rev1 */
+ $rev1 = $status->getValue()['revision-record'];
+
+ $translatablePage = TranslatablePage::newFromTitle( $title );
+ $this->assertEquals(
+ $rev1->getId(),
+ $translatablePage->getReadyTag(),
+ 'Sanity: must tag revision 1 ready for translate'
+ );
+
+ $wikiPage = $this->getServiceContainer()->getWikiPageFactory()->newFromID( $title->getArticleID() );
+
+ if ( method_exists( MediaWikiServices::class, 'getProtectPageFactory' ) ) {
+ // MW 1.38+
+ $protectPage = TestingAccessWrapper::newFromObject(
+ $this->getServiceContainer()->getProtectPageFactory()
+ ->newProtectPage( $wikiPage, $this->getTestUser()->getUser() )
+ );
+
+ $nullRev = $protectPage->insertNullProtectionRevision(
+ 'test comment',
+ [ 'edit' => 'sysop' ],
+ [ 'edit' => '20200101040404' ],
+ false,
+ 'Testing',
+ $this->getTestUser()->getUser()
+ );
+ } else {
+ $nullRev = $wikiPage->insertNullProtectionRevision(
+ 'test comment',
+ [ 'edit' => 'sysop' ],
+ [ 'edit' => '20200101040404' ],
+ false,
+ 'Testing',
+ $this->getTestUser()->getUser()
+ );
+ }
+
+ $this->assertNotNull( $nullRev, 'Sanity: must create null revision' );
+ $this->assertEquals(
+ $translatablePage->getReadyTag(),
+ $nullRev->getId(),
+ 'Must update ready tag for null revision'
+ );
+
+ $status = $this->editPage( $title->getPrefixedDBkey(), 'Modified test text' );
+ $this->assertTrue( $status->isGood(), 'Sanity: must create revision 2' );
+ $this->assertEquals(
+ $translatablePage->getReadyTag(),
+ $nullRev->getId(),
+ 'Must not update ready tag for non-null revision'
+ );
+ }
+}
diff --git a/Translate/tests/phpunit/PageTranslation/PageTitleRenamerTest.php b/Translate/tests/phpunit/PageTranslation/PageTitleRenamerTest.php
new file mode 100644
index 00000000..1ac63913
--- /dev/null
+++ b/Translate/tests/phpunit/PageTranslation/PageTitleRenamerTest.php
@@ -0,0 +1,162 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use MediaWikiIntegrationTestCase;
+use Title;
+
+/**
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\PageTranslation\PageTitleRenamer
+ * @covers \MediaWiki\Extension\Translate\PageTranslation\InvalidPageTitleRename
+ */
+class PageTitleRenamerTest extends MediaWikiIntegrationTestCase {
+ /** @dataProvider provideNewPageTitle */
+ public function testGetNewTitle( string $source, string $target, array $titlesToCheck ): void {
+ $sourceTitle = Title::newFromText( $source );
+ $targetTitle = Title::newFromText( $target );
+
+ $pageTitleRenamer = new PageTitleRenamer( $sourceTitle, $targetTitle );
+ $this->assertEquals(
+ $pageTitleRenamer->getNewTitle( $sourceTitle )->getPrefixedText(),
+ $targetTitle->getPrefixedText()
+ );
+
+ foreach ( $titlesToCheck as $original => $renamed ) {
+ $originalTitle = Title::newFromText( $original );
+ $newRenamedTitle = $pageTitleRenamer->getNewTitle( $originalTitle );
+
+ $renamedTitle = Title::newFromText( $renamed );
+ $this->assertEquals(
+ $renamedTitle->getPrefixedText(),
+ $newRenamedTitle->getPrefixedText()
+ );
+ }
+ }
+
+ /** @dataProvider provideNewPageTitleException */
+ public function testGetNewTitleException(
+ string $source,
+ string $target,
+ string $titleToRename,
+ int $exceptionCode
+ ): void {
+ $sourceTitle = Title::newFromText( $source );
+ $targetTitle = Title::newFromText( $target );
+
+ $pageTitleRenamer = new PageTitleRenamer( $sourceTitle, $targetTitle );
+
+ $this->expectException( InvalidPageTitleRename::class );
+ $this->expectExceptionCode( $exceptionCode );
+
+ $pageTitleRenamer->getNewTitle( Title::newFromText( $titleToRename ) );
+ }
+
+ public function provideNewPageTitle() {
+ yield [
+ 'Main Page',
+ 'New Main Page',
+ [
+ // Subpage
+ 'Main Page/Hello' => 'New Main Page/Hello',
+ // Talk page
+ 'Talk:Main Page' => 'Talk:New Main Page',
+ // Translation page
+ 'Main Page/es' => 'New Main Page/es',
+ // Translation page talk page
+ 'Talk:Main Page/es' => 'Talk:New Main Page/es',
+ // Translation
+ 'Translations:Main Page/1/es' => 'Translations:New Main Page/1/es',
+ // Translation talk
+ 'Translations talk:Main Page/1/es' => 'Translations talk:New Main Page/1/es'
+ ]
+ ];
+
+ yield [
+ 'Help:Foo',
+ 'Category:Bar',
+ [
+ // Talk page
+ 'Help talk:Foo' => 'Category talk:Bar',
+ // Sub page
+ 'Help:Foo/Hello' => 'Category:Bar/Hello',
+ // Sub page
+ 'Help:Foo/Help:Foo' => 'Category:Bar/Help:Foo',
+ // Translation page
+ 'Help:Foo/en-gb' => 'Category:Bar/en-gb',
+ // Translation
+ 'Translations:Help:Foo/1/en-gb' => 'Translations:Category:Bar/1/en-gb',
+ // Translation talk
+ 'Translations talk:Help:Foo/1/en-gb' => 'Translations talk:Category:Bar/1/en-gb'
+ ]
+ ];
+
+ yield [
+ 'Help talk:Foo',
+ 'Category talk:Bar',
+ [
+ // Translation page
+ 'Help talk:Foo/en-gb' => 'Category talk:Bar/en-gb',
+ // Translation
+ 'Translations:Help talk:Foo/1/en-gb' => 'Translations:Category talk:Bar/1/en-gb',
+ // Translation talk
+ 'Translations talk:Help talk:Foo/1/en-gb' => 'Translations talk:Category talk:Bar/1/en-gb'
+ ]
+ ];
+
+ yield [
+ 'Foo/done',
+ 'Template:Foo/done',
+ [
+ // Translation page
+ 'Foo/done/en' => 'Template:Foo/done/en',
+ // Translation page
+ 'Foo/done/ko' => 'Template:Foo/done/ko',
+ // Talk page
+ 'Talk:Foo/done/ko' => 'Template talk:Foo/done/ko',
+ // Translation
+ 'Foo/done/1/ko' => 'Template:Foo/done/1/ko'
+ ]
+ ];
+
+ yield [
+ 'Template:Foo/done',
+ 'Foo/done',
+ [
+ // Translation page
+ 'Template:Foo/done/en' => 'Foo/done/en',
+ // Translation page
+ 'Template:Foo/done/ko' => 'Foo/done/ko',
+ // Talk page
+ 'Template talk:Foo/done/ko' => 'Talk:Foo/done/ko',
+ // Translation
+ 'Template:Foo/done/1/ko' => 'Foo/done/1/ko'
+ ]
+ ];
+ }
+
+ public function provideNewPageTitleException() {
+ yield 'Moving a page not part of translatable page' => [
+ 'Main Page',
+ 'New Main Page',
+ 'Category:Bar',
+ PageTitleRenamer::UNKNOWN_PAGE
+ ];
+
+ yield 'Rename failure because there are no common strings' => [
+ 'Main Page',
+ 'Main Page 2',
+ 'Example',
+ PageTitleRenamer::RENAME_FAILED
+ ];
+
+ yield 'Namespace does not support talkpages' => [
+ 'Main Page',
+ 'Special:New Main Page',
+ 'Talk:Main Page',
+ PageTitleRenamer::NS_TALK_UNSUPPORTED
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/PageTranslation/TranslationPageTest.php b/Translate/tests/phpunit/PageTranslation/TranslationPageTest.php
new file mode 100644
index 00000000..fdcb70d4
--- /dev/null
+++ b/Translate/tests/phpunit/PageTranslation/TranslationPageTest.php
@@ -0,0 +1,154 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use FatMessage;
+use Language;
+use MediaWikiIntegrationTestCase;
+use Parser;
+use Title;
+use WikiPageMessageGroup;
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\PageTranslation\TranslationPage
+ */
+class TranslationPageTest extends MediaWikiIntegrationTestCase {
+ /** @dataProvider provideTestGenerateSourceFromTranslations */
+ public function testGenerateSourceFromTranslations(
+ bool $inline,
+ bool $canWrap,
+ bool $wrapUntranslated,
+ array $messages,
+ string $expected
+ ) {
+ // This test skips all the message loading from database
+
+ $template = '<S>';
+ $unitMap = [];
+ foreach ( $messages as $id => $m ) {
+ /** @var FatMessage $m */
+ $unit = new TranslationUnit( $m->definition(), (string)$id );
+ $unit->setIsInline( $inline );
+ $unit->setCanWrap( $canWrap );
+
+ $unitMap[$unit->id] = $unit;
+ }
+
+ // Then create appropriate units in the section. We are using the array keys, which
+ // works as long as there are less than ten units.
+ $sectionMap = [ '<S>' => new Section( '', implode( ' | ', array_keys( $unitMap ) ), '' ) ];
+ $output = new ParserOutput( $template, $sectionMap, $unitMap );
+
+ $translationPage = new TranslationPage(
+ $output,
+ $this->createStub( WikiPageMessageGroup::class ),
+ Language::factory( 'ar' ),
+ Language::factory( 'en' ),
+ true /*$showOutdated*/,
+ $wrapUntranslated,
+ Title::newFromText( __METHOD__ )
+ );
+
+ $actual = $translationPage->generateSourceFromTranslations(
+ $this->createStub( Parser::class ), $messages
+ );
+ $this->assertSame( $expected, $actual );
+ }
+
+ public function provideTestGenerateSourceFromTranslations() {
+ $inline = true;
+ $block = false;
+
+ $wrap = true;
+ $nowrap = false;
+
+ $wrapUntranslated = true;
+
+ $sectionText = 'Hello';
+
+ $okMessage = new FatMessage( 'ignoredKey', $sectionText );
+ $okMessage->setTranslation( 'Hallo' );
+
+ $fuzzyMessage = new FatMessage( 'ignoredKey', $sectionText );
+ $fuzzyMessage->setTranslation( 'hallo' );
+ $fuzzyMessage->addTag( 'fuzzy' );
+
+ $untranslatedMessage = new FatMessage( 'ignoredKey', $sectionText );
+
+ $identicalMessage = new FatMessage( 'ignoredKey', $sectionText );
+ $identicalMessage->setTranslation( $sectionText );
+
+ $inlineWrappedOutdated = '<span class="mw-translate-fuzzy">hallo</span>';
+ $inlineWrappedUntranslated = '<span lang="en" dir="ltr" class="mw-content-ltr">Hello</span>';
+ $blockWrappedOutdated = "<div class=\"mw-translate-fuzzy\">\nhallo\n</div>";
+ $blockWrappedUntranslated = "<div lang=\"en\" dir=\"ltr\" class=\"mw-content-ltr\">\nHello\n</div>";
+
+ // Matrix of (inline|block) * (no)wrap * (no)wrapUntranslated
+ yield [
+ $inline,
+ $wrap,
+ $wrapUntranslated,
+ [ $okMessage, $fuzzyMessage, $identicalMessage, $untranslatedMessage ],
+ "Hallo | $inlineWrappedOutdated | Hello | $inlineWrappedUntranslated"
+ ];
+
+ yield [
+ $inline,
+ $wrap,
+ !$wrapUntranslated,
+ [ $okMessage, $fuzzyMessage, $identicalMessage, $untranslatedMessage ],
+ "Hallo | $inlineWrappedOutdated | Hello | Hello"
+ ];
+
+ yield [
+ $inline,
+ $nowrap,
+ $wrapUntranslated,
+ [ $okMessage, $fuzzyMessage, $identicalMessage, $untranslatedMessage ],
+ 'Hallo | hallo | Hello | Hello',
+ ];
+
+ yield [
+ $inline,
+ $nowrap,
+ !$wrapUntranslated,
+ [ $okMessage, $fuzzyMessage, $identicalMessage, $untranslatedMessage ],
+ 'Hallo | hallo | Hello | Hello',
+ ];
+
+ yield [
+ $block,
+ $wrap,
+ $wrapUntranslated,
+ [ $okMessage, $fuzzyMessage, $identicalMessage, $untranslatedMessage ],
+ "Hallo | $blockWrappedOutdated | Hello | $blockWrappedUntranslated"
+ ];
+
+ yield [
+ $block,
+ $wrap,
+ !$wrapUntranslated,
+ [ $okMessage, $fuzzyMessage, $identicalMessage, $untranslatedMessage ],
+ "Hallo | $blockWrappedOutdated | Hello | Hello"
+ ];
+
+ yield [
+ $block,
+ $nowrap,
+ $wrapUntranslated,
+ [ $okMessage, $fuzzyMessage, $identicalMessage, $untranslatedMessage ],
+ 'Hallo | hallo | Hello | Hello',
+ ];
+
+ yield [
+ $block,
+ $nowrap,
+ !$wrapUntranslated,
+ [ $okMessage, $fuzzyMessage, $identicalMessage, $untranslatedMessage ],
+ 'Hallo | hallo | Hello | Hello',
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/ServicesTest.php b/Translate/tests/phpunit/ServicesTest.php
new file mode 100644
index 00000000..13676178
--- /dev/null
+++ b/Translate/tests/phpunit/ServicesTest.php
@@ -0,0 +1,30 @@
+<?php
+declare( strict_types = 1 );
+
+use MediaWiki\Extension\Translate\Services;
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\Services
+ */
+class ServicesTest extends MediaWikiIntegrationTestCase {
+ public function testNoExceptions() {
+ $services = Services::getInstance();
+ $class = new ReflectionClass( Services::class );
+ $reflectionMethods = $class->getMethods( ReflectionMethod::IS_PUBLIC );
+ $methods = [];
+ foreach ( $reflectionMethods as $methodObj ) {
+ $method = $methodObj->getName();
+ if ( !$methodObj->isStatic() && preg_match( '/^get[A-Z]/', $method ) ) {
+ $methods[] = $method;
+ }
+ }
+
+ foreach ( $methods as $method ) {
+ $services->$method();
+ }
+
+ $this->assertTrue( true, 'All services can be constructed' );
+ }
+}
diff --git a/Translate/tests/phpunit/Statistics/TranslatorActivityTest.php b/Translate/tests/phpunit/Statistics/TranslatorActivityTest.php
new file mode 100644
index 00000000..b605f332
--- /dev/null
+++ b/Translate/tests/phpunit/Statistics/TranslatorActivityTest.php
@@ -0,0 +1,148 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\Statistics;
+
+use EmptyBagOStuff;
+use HashBagOStuff;
+use InvalidArgumentException;
+use JobQueueGroup;
+use MediaWiki\Languages\LanguageNameUtils;
+use MediaWikiIntegrationTestCase;
+use Wikimedia\Timestamp\ConvertibleTimestamp;
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\Statistics\TranslatorActivity
+ */
+class TranslatorActivityTest extends MediaWikiIntegrationTestCase {
+ public function testInvalidLanguage() {
+ $cache = $this->createMock( EmptyBagOStuff::class );
+ $query = $this->createMock( TranslatorActivityQuery::class );
+ $jobQueue = $this->createMock( JobQueueGroup::class );
+ $languageValidator = $this->createMock( LanguageNameUtils::class );
+ $languageValidator->method( 'isKnownLanguageTag' )->willReturn( false );
+
+ $service = new TranslatorActivity( $cache, $query, $jobQueue, $languageValidator );
+
+ $this->expectException( InvalidArgumentException::class );
+ $service->inLanguage( 'not-a-valid-language-code' );
+ }
+
+ public function testInLanguage() {
+ $language = 'en';
+ $translators = $this->getExampleData();
+ $cacheKey = 'cache:en';
+ $fakeTime1 = 1;
+ $expected = [
+ 'users' => $translators,
+ 'asOfTime' => $fakeTime1,
+ ];
+
+ $cache = $this->createMock( HashBagOStuff::class );
+ $cache->method( 'makeKey' )->willReturn( $cacheKey );
+ $cache->expects( $this->once() )->method( 'set' )->with( $cacheKey, $expected );
+ $query = $this->createMock( TranslatorActivityQuery::class );
+ $query
+ ->method( 'inLanguage' )
+ ->willReturn( $translators )
+ ->with( $language );
+ $jobQueue = $this->createMock( JobQueueGroup::class );
+ $jobQueue->expects( $this->never() )->method( 'push' );
+ $languageValidator = $this->createMock( LanguageNameUtils::class );
+ $languageValidator->method( 'isKnownLanguageTag' )->willReturn( true );
+
+ $service = new TranslatorActivity( $cache, $query, $jobQueue, $languageValidator );
+
+ ConvertibleTimestamp::setFakeTime( $fakeTime1 );
+ $actual = $service->inLanguage( $language );
+
+ $this->assertEquals( $expected, $actual, 'Correct value is returned' );
+ }
+
+ public function testInLanguageStale() {
+ $language = 'en';
+ $translators = $this->getExampleData();
+ $fakeTime1 = 1;
+ $fakeTime2 = $fakeTime1 + TranslatorActivity::CACHE_STALE;
+ $expected = [
+ 'users' => $translators,
+ 'asOfTime' => $fakeTime1,
+ ];
+
+ $cache = new HashBagOStuff();
+ $query = $this->createMock( TranslatorActivityQuery::class );
+ $query
+ ->method( 'inLanguage' )
+ ->willReturn( $translators )
+ ->with( $language );
+ $jobQueue = $this->createMock( JobQueueGroup::class );
+ $jobQueue->expects( $this->once() )->method( 'push' );
+ $languageValidator = $this->createMock( LanguageNameUtils::class );
+ $languageValidator->method( 'isKnownLanguageTag' )->willReturn( true );
+
+ $service = new TranslatorActivity( $cache, $query, $jobQueue, $languageValidator );
+
+ ConvertibleTimestamp::setFakeTime( $fakeTime1 );
+ $cache->setMockTime( $fakeTime1 );
+ $service->inLanguage( $language );
+
+ ConvertibleTimestamp::setFakeTime( $fakeTime2 );
+ $cache->setMockTime( $fakeTime2 );
+ $actual = $service->inLanguage( $language );
+
+ $this->assertEquals( $expected, $actual, 'Correct value is returned' );
+ }
+
+ public function testInLanguageExpired() {
+ $language = 'en';
+ $translators = $this->getExampleData();
+ $fakeTime1 = 1;
+ $fakeTime2 = $fakeTime1 + TranslatorActivity::CACHE_TIME;
+ $expected = [
+ 'users' => $translators,
+ 'asOfTime' => $fakeTime2,
+ ];
+
+ $cache = new HashBagOStuff();
+ $query = $this->createMock( TranslatorActivityQuery::class );
+ $query
+ ->method( 'inLanguage' )
+ ->willReturn( $translators )
+ ->with( $language );
+ $jobQueue = $this->createMock( JobQueueGroup::class );
+ $jobQueue->expects( $this->never() )->method( 'push' );
+ $languageValidator = $this->createMock( LanguageNameUtils::class );
+ $languageValidator->method( 'isKnownLanguageTag' )->willReturn( true );
+
+ $service = new TranslatorActivity( $cache, $query, $jobQueue, $languageValidator );
+
+ ConvertibleTimestamp::setFakeTime( $fakeTime1 );
+ $cache->setMockTime( $fakeTime1 );
+ $service->inLanguage( $language );
+
+ ConvertibleTimestamp::setFakeTime( $fakeTime2 );
+ $cache->setMockTime( $fakeTime2 );
+ $actual = $service->inLanguage( $language );
+
+ $this->assertEquals( $expected, $actual, 'Correct value is returned' );
+ }
+
+ private function getExampleData(): array {
+ $translators = [
+ [
+ TranslatorActivityQuery::USER_NAME => 'Hunter',
+ TranslatorActivityQuery::USER_TRANSLATIONS => 1234,
+ TranslatorActivityQuery::USER_LAST_ACTIVITY => 10,
+ ],
+ [
+ TranslatorActivityQuery::USER_NAME => 'Farmer',
+ TranslatorActivityQuery::USER_TRANSLATIONS => 2,
+ TranslatorActivityQuery::USER_LAST_ACTIVITY => 20,
+ ],
+ ];
+
+ return $translators;
+ }
+}
diff --git a/Translate/tests/phpunit/Synchronization/GroupSynchronizationCacheTest.php b/Translate/tests/phpunit/Synchronization/GroupSynchronizationCacheTest.php
new file mode 100644
index 00000000..22b24ec6
--- /dev/null
+++ b/Translate/tests/phpunit/Synchronization/GroupSynchronizationCacheTest.php
@@ -0,0 +1,370 @@
+<?php
+
+namespace MediaWiki\Extension\Translate\Synchronization;
+
+use InvalidArgumentException;
+use LogicException;
+use MediaWiki\Extension\Translate\Cache\PersistentDatabaseCache;
+use MediaWiki\MediaWikiServices;
+use MediaWikiIntegrationTestCase;
+
+/**
+ * @covers \MediaWiki\Extension\Translate\Synchronization\GroupSynchronizationCache
+ * @covers \MediaWiki\Extension\Translate\Synchronization\GroupSynchronizationResponse
+ */
+class GroupSynchronizationCacheTest extends MediaWikiIntegrationTestCase {
+ /** @var GroupSynchronizationCache */
+ private $groupSyncCache;
+
+ protected function setUp(): void {
+ parent::setUp();
+ $this->groupSyncCache = $this->getGroupSynchronizationCache();
+ }
+
+ public function testIsGroupBeingProcessed() {
+ $groupId = 'hello';
+ $this->groupSyncCache->markGroupForSync( $groupId );
+
+ $this->assertTrue( $this->groupSyncCache->isGroupBeingProcessed( $groupId ) );
+
+ $this->groupSyncCache->endSync( $groupId );
+
+ $this->assertFalse( $this->groupSyncCache->isGroupBeingProcessed( $groupId ) );
+ }
+
+ public function testGetGroupMessages() {
+ $groupId = 'hello';
+ $title = 'Title';
+
+ $this->groupSyncCache->markGroupForSync( $groupId );
+ $messageParam = $this->getMessageParam( $groupId, $title );
+ $this->groupSyncCache->addMessages( $groupId, $messageParam );
+
+ $this->assertEquals(
+ [ $title => $messageParam ],
+ $this->groupSyncCache->getGroupMessages( $groupId )
+ );
+
+ $this->groupSyncCache->removeMessages( $groupId, $title );
+
+ $this->assertSame( [], $this->groupSyncCache->getGroupMessages( $groupId ) );
+ }
+
+ public function testMultiGetGroupMessages() {
+ $groupId = 'hello';
+
+ $addedMessages = [
+ 'Title' => $this->getMessageParam( $groupId, 'Title' ),
+ 'Title_ABC' => $this->getMessageParam( $groupId, 'Title_ABC' )
+ ];
+
+ $this->groupSyncCache->addMessages( $groupId, ...array_values( $addedMessages ) );
+
+ $messages = $this->groupSyncCache->getGroupMessages( $groupId );
+ $this->assertEquals( $addedMessages, $messages );
+ }
+
+ public function testIsMessageBeingProcessed() {
+ $groupId = 'hello';
+ $title = 'Title';
+
+ $this->groupSyncCache->addMessages(
+ $groupId, $this->getMessageParam( $groupId, $title )
+ );
+
+ $this->assertTrue( $this->groupSyncCache->isMessageBeingProcessed( $groupId, $title ) );
+
+ $this->groupSyncCache->removeMessages( $groupId, $title );
+
+ $this->assertFalse( $this->groupSyncCache->isMessageBeingProcessed( $groupId, $title ) );
+ }
+
+ public function testGetGroupsInSync() {
+ $groupId = 'hello';
+
+ $this->groupSyncCache->markGroupForSync( $groupId );
+ $this->assertSame( [ $groupId ], $this->groupSyncCache->getGroupsInSync() );
+
+ $this->groupSyncCache->endSync( $groupId );
+ $this->assertSame( [], $this->groupSyncCache->getGroupsInSync() );
+ }
+
+ public function testEndSync() {
+ $groupId = 'group-id';
+ $title = 'hello';
+
+ $this->startGroupSync( $groupId, $title );
+
+ $this->expectExceptionMessageMatches( '/cannot end synchronization/i' );
+ $this->expectException( InvalidArgumentException::class );
+
+ $this->groupSyncCache->endSync( $groupId );
+
+ $messages = $this->groupSyncCache->getGroupMessages( $groupId );
+ $this->assertNotEmpty( $messages, 'endSync should not remove group messages' );
+ $this->assertIsInt(
+ $this->groupSyncCache->getSyncEndTime( $groupId ),
+ 'endSync should not remove the group key'
+ );
+ }
+
+ public function testForceEndSync() {
+ $groupId = 'group-id';
+ $title = 'hello';
+
+ $this->startGroupSync( $groupId, $title );
+
+ $this->groupSyncCache->forceEndSync( $groupId );
+
+ $messages = $this->groupSyncCache->getGroupMessages( $groupId );
+ $this->assertEmpty( $messages, 'forceEndSync should remove group messages' );
+ $this->assertNull(
+ $this->groupSyncCache->getSyncEndTime( $groupId ),
+ 'forceEndSync should remove the group key'
+ );
+ }
+
+ /** @dataProvider provideGetSynchronizationStatus */
+ public function testGetSynchronizationStatus(
+ GroupSynchronizationCache $syncCache,
+ string $groupId,
+ array $titlesToAdd,
+ array $titlesToRemove,
+ bool $hasTimedOut = false
+ ) {
+ $syncCache->markGroupForSync( $groupId );
+
+ $this->assertTrue( $syncCache->isGroupBeingProcessed( $groupId ) );
+
+ $addedMessages = [];
+ foreach ( $titlesToAdd as $title ) {
+ $messageParam = $this->getMessageParam( $groupId, $title );
+ $syncCache->addMessages( $groupId, $messageParam );
+ $addedMessages[$title] = $messageParam;
+ }
+
+ $this->assertEqualsCanonicalizing( $addedMessages, $syncCache->getGroupMessages( $groupId ) );
+
+ $syncCache->removeMessages( $groupId, ...$titlesToRemove );
+
+ $groupSyncResponse = $syncCache->getSynchronizationStatus( $groupId );
+
+ $diffTitles = array_values( array_diff( $titlesToAdd, $titlesToRemove ) );
+ $diffMessages = [];
+ foreach ( $diffTitles as $title ) {
+ $diffMessages[$title] = $addedMessages[$title];
+ }
+
+ $this->assertEquals( $diffMessages, $syncCache->getGroupMessages( $groupId ) );
+
+ if ( $diffMessages === [] ) {
+ // getSynchronizationStatus does not perform any updates
+ $this->assertContains( $groupId, $this->groupSyncCache->getGroupsInSync() );
+ }
+
+ $this->assertSame( $diffMessages === [], $groupSyncResponse->isDone() );
+ $this->assertSame( $hasTimedOut, $groupSyncResponse->hasTimedOut() );
+ $this->assertEquals( $diffMessages, $groupSyncResponse->getRemainingMessages() );
+ $this->assertSame( $groupId, $groupSyncResponse->getGroupId() );
+ }
+
+ public function testAddGroupErrors() {
+ $this->assertEmpty( $this->groupSyncCache->getGroupsWithErrors() );
+
+ $groupId = 'test-group';
+ $groupSyncResponse = $this->addTestGroupError( $groupId );
+ $this->assertContains( $groupId, $this->groupSyncCache->getGroupsWithErrors() );
+ $this->assertEquals( $groupSyncResponse, $this->groupSyncCache->getGroupErrorInfo( $groupId ) );
+
+ $this->groupSyncCache->addGroupErrors( $groupSyncResponse );
+ $this->assertContains(
+ $groupId,
+ $this->groupSyncCache->getGroupsWithErrors(),
+ 'Multiple additions of group errors don\'t duplicate entries in cache'
+ );
+ $this->assertEquals(
+ $groupSyncResponse,
+ $this->groupSyncCache->getGroupErrorInfo( $groupId ),
+ 'Multiple additions of group errors don\'t duplicate entries in cache'
+ );
+ }
+
+ public function testMarkGroupAsResolved() {
+ $groupId = 'test-group';
+ $this->addTestGroupError( $groupId );
+
+ $this->assertContains( $groupId, $this->groupSyncCache->getGroupsWithErrors() );
+ $this->groupSyncCache->markGroupAsResolved( $groupId );
+ $this->assertNotContains( $groupId, $this->groupSyncCache->getGroupsWithErrors() );
+ }
+
+ public function testMarkMessageAsResolved() {
+ $groupId = 'test-group';
+ $groupSyncResponse = $this->addTestGroupError( $groupId );
+
+ $this->assertContains( $groupId, $this->groupSyncCache->getGroupsWithErrors() );
+
+ $errorMessages = $groupSyncResponse->getRemainingMessages();
+ $pageName = $errorMessages[0]->getPageName();
+ $this->groupSyncCache->markMessageAsResolved( $groupId, $pageName );
+
+ $fixedGroupSyncResponse = $this->groupSyncCache->syncGroupErrors( $groupId );
+ $fixedErrorMessages = $fixedGroupSyncResponse->getRemainingMessages();
+
+ $this->assertCount( count( $errorMessages ) - 1, $fixedErrorMessages );
+ }
+
+ public function testAddGroupErrorsEmpty() {
+ $groupId = 'test-group';
+ $groupHasTimedOut = true;
+ $groupSyncResponse = new GroupSynchronizationResponse( $groupId, [], $groupHasTimedOut );
+
+ $this->expectException( LogicException::class );
+ $this->groupSyncCache->addGroupErrors( $groupSyncResponse );
+ }
+
+ public function testGroupHasErrors() {
+ $groupId = 'test-group';
+ $this->addTestGroupError( $groupId );
+ $this->assertTrue( $this->groupSyncCache->groupHasErrors( $groupId ) );
+
+ $this->groupSyncCache->markGroupAsResolved( $groupId );
+ $this->assertFalse( $this->groupSyncCache->groupHasErrors( $groupId ) );
+ }
+
+ public function testGroupInReview() {
+ $groupId = 'test-group';
+ $this->groupSyncCache->markGroupAsInReview( $groupId );
+ $this->assertTrue( $this->groupSyncCache->isGroupInReview( $groupId ) );
+
+ $this->groupSyncCache->markGroupAsInReview( $groupId );
+ $this->assertTrue( $this->groupSyncCache->isGroupInReview( $groupId ) );
+ }
+
+ /** @dataProvider provideExtendGroupExpiryTime */
+ public function testExtendGroupExpiryTime( int $initialExpiryTime, string $expectedCondition ) {
+ $groupId = 'test-group-id';
+ $this->groupSyncCache = $this->getGroupSynchronizationCache( $initialExpiryTime );
+
+ $this->startGroupSync( $groupId, 'hello' );
+
+ $initialExpiryTime = $this->groupSyncCache->getGroupExpiryTime( $groupId );
+
+ $this->groupSyncCache->extendGroupExpiryTime( $groupId );
+
+ $extendedExpiryTime = $this->groupSyncCache->getGroupExpiryTime( $groupId );
+
+ $this->$expectedCondition( $initialExpiryTime, $extendedExpiryTime );
+ }
+
+ public function testExtendInvalidGroupExpiryTime() {
+ $this->expectException( LogicException::class );
+ $this->expectExceptionMessageMatches( '/group that is not being processed/i' );
+
+ $this->groupSyncCache->extendGroupExpiryTime( 'testGroupId' );
+ }
+
+ public function testExtendTimedOutGroupExpiryTime() {
+ $groupSyncCache = $this->getGroupSynchronizationCache( -1 );
+ $this->groupSyncCache = $groupSyncCache;
+
+ $this->expectException( LogicException::class );
+ $this->expectExceptionMessageMatches( '/group that has already expired/i' );
+
+ $groupId = 'test-group-id';
+ $this->startGroupSync( $groupId, 'hello' );
+ $this->groupSyncCache->extendGroupExpiryTime( $groupId );
+ }
+
+ public function provideGetSynchronizationStatus() {
+ $groupId = 'hello';
+
+ yield [
+ $this->getGroupSynchronizationCache(),
+ $groupId,
+ [ 'Title', 'Title1' ],
+ [ 'Title' ],
+ false
+ ];
+
+ yield [
+ $this->getGroupSynchronizationCache(),
+ $groupId,
+ [ 'Hello' ],
+ [ 'Hello' ],
+ false
+ ];
+
+ yield [
+ $this->getGroupSynchronizationCache( -1 ),
+ $groupId,
+ [ 'Hello' ],
+ [ 'Hello' ],
+ false
+ ];
+
+ yield [
+ $this->getGroupSynchronizationCache( -1 ),
+ $groupId,
+ [ 'Hello', 'Title' ],
+ [ 'Hello' ],
+ true
+ ];
+ }
+
+ public function provideExtendGroupExpiryTime() {
+ yield 'group expiry time is extended when it is about to expire' => [
+ 10,
+ 'assertGreaterThan'
+ ];
+
+ yield 'group expiry time is not extended when it is not going to expire' => [
+ 5000,
+ 'assertEquals'
+ ];
+ }
+
+ private function getMessageParam( string $groupId, string $title ): MessageUpdateParameter {
+ return new MessageUpdateParameter( [
+ 'fuzzy' => true,
+ 'content' => 'Hello',
+ 'title' => $title,
+ 'groupId' => $groupId
+ ] );
+ }
+
+ private function getGroupSynchronizationCache( int $timeout = null ): GroupSynchronizationCache {
+ $mwServices = MediaWikiServices::getInstance();
+ $lb = $mwServices->getDBLoadBalancer();
+ $jsonCodec = $mwServices->getJsonCodec();
+ $persistentCache = new PersistentDatabaseCache( $lb, $jsonCodec );
+ $persistentCache->clear();
+
+ if ( $timeout ) {
+ return new GroupSynchronizationCache( $persistentCache, $timeout );
+ } else {
+ return new GroupSynchronizationCache( $persistentCache );
+ }
+ }
+
+ private function startGroupSync( string $groupId, string $title ): void {
+ $this->groupSyncCache->markGroupForSync( $groupId );
+ $this->groupSyncCache->addMessages( $groupId, $this->getMessageParam( $groupId, $title ) );
+ }
+
+ private function addTestGroupError( string $groupId ): GroupSynchronizationResponse {
+ $groupHasTimedOut = true;
+ $groupSyncResponse = new GroupSynchronizationResponse(
+ $groupId,
+ [
+ $this->getMessageParam( $groupId, 'title1' ),
+ $this->getMessageParam( $groupId, 'title2' ),
+ $this->getMessageParam( $groupId, 'title3' )
+ ],
+ $groupHasTimedOut
+ );
+
+ $this->groupSyncCache->addGroupErrors( $groupSyncResponse );
+ return $groupSyncResponse;
+ }
+}
diff --git a/Translate/tests/phpunit/Synchronization/MessageWebImporterTest.php b/Translate/tests/phpunit/Synchronization/MessageWebImporterTest.php
new file mode 100644
index 00000000..822c02c8
--- /dev/null
+++ b/Translate/tests/phpunit/Synchronization/MessageWebImporterTest.php
@@ -0,0 +1,69 @@
+<?php
+
+namespace MediaWiki\Extension\Translate\Synchronization;
+
+use HashBagOStuff;
+use HashMessageIndex;
+use MediaWikiIntegrationTestCase;
+use MessageGroups;
+use MessageIndex;
+use MockWikiMessageGroup;
+use RequestContext;
+use Title;
+use WANObjectCache;
+
+/** @group Database */
+class MessageWebImporterTest extends MediaWikiIntegrationTestCase {
+ private const PAGE = 'MediaWiki:' . __METHOD__ . '_translated';
+
+ protected function setUp(): void {
+ parent::setUp();
+ $this->setTemporaryHook( 'TranslatePostInitGroups', [ $this, 'getTestGroups' ] );
+
+ $mg = MessageGroups::singleton();
+ $mg->setCache( new WANObjectCache( [ 'cache' => new HashBagOStuff() ] ) );
+ $mg->recache();
+ MessageIndex::setInstance( new HashMessageIndex() );
+ MessageIndex::singleton()->rebuild();
+ $this->overrideUserPermissions( RequestContext::getMain()->getUser(), [
+ 'translate-manage' // needed for MessageWebImporter::doFuzzy for testDoFuzzy
+ ] );
+ }
+
+ public function getTestGroups( &$list ) {
+ $list['test-group'] = new MockWikiMessageGroup( 'test-group', [
+ self::PAGE => 'bunny',
+ ] );
+ return false;
+ }
+
+ /** @covers \MediaWiki\Extension\Translate\Synchronization\MessageWebImporter::doFuzzy */
+ public function testDoFuzzy() {
+ $this->assertTrue(
+ $this->editPage( self::PAGE . '/en', 'English Original' )->isGood(),
+ 'Sanity: Must create English original translation'
+ );
+ $this->assertTrue(
+ $this->editPage( self::PAGE . '/fi', 'Finnish Original' )->isGood(),
+ 'Sanity: Must create Finnish original translation'
+ );
+
+ $result = MessageWebImporter::doFuzzy(
+ Title::newFromText( self::PAGE ),
+ 'English Changed', '', null
+ );
+ $this->assertEquals( 'translate-manage-import-fuzzy', $result[0] );
+ $this->assertEquals(
+ 'English Changed',
+ $this->getServiceContainer()->getWikiPageFactory()
+ ->newFromTitle( Title::newFromText( self::PAGE . '/en' ) )->getContent()->serialize(),
+ 'Must change the content of the English translation'
+ );
+ $this->assertEquals(
+ TRANSLATE_FUZZY . 'Finnish Original',
+ $this->getServiceContainer()->getWikiPageFactory()
+ ->newFromTitle( Title::newFromText( self::PAGE . '/fi' ) )->getContent()->serialize(),
+ 'Must change the content of the Finnish translation'
+ );
+ }
+}
diff --git a/Translate/tests/phpunit/TTMServerMessageUpdateJobTest.php b/Translate/tests/phpunit/TTMServerMessageUpdateJobTest.php
new file mode 100644
index 00000000..d152f872
--- /dev/null
+++ b/Translate/tests/phpunit/TTMServerMessageUpdateJobTest.php
@@ -0,0 +1,302 @@
+<?php
+/**
+ * @file
+ * @author David Causse
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * Mostly test mirroring and failure modes.
+ * @covers TTMServerMessageUpdateJob
+ */
+class TTMServerMessageUpdateJobTest extends MediaWikiIntegrationTestCase {
+ /**
+ * @var WritableTTMServer[] used to link our mocks with TestableTTMServer built by the
+ * factory
+ */
+ public static $mockups = [];
+
+ protected function setUp(): void {
+ parent::setUp();
+ self::$mockups = [];
+ $this->setMwGlobals( [
+ 'wgTranslateTranslationServices' => [
+ 'primary' => [
+ 'class' => TestableTTMServer::class,
+ // will be used as the key in static::$mockups to attach the
+ // mock to the newly created TestableTTMServer instance
+ 'name' => 'primary',
+ 'mirrors' => [ 'secondary' ],
+ ],
+ 'secondary' => [
+ 'class' => TestableTTMServer::class,
+ 'name' => 'secondary',
+ ]
+ ],
+ 'wgTranslateTranslationDefaultService' => 'primary'
+ ] );
+ }
+
+ protected function tearDown(): void {
+ parent::tearDown();
+ self::$mockups = [];
+ }
+
+ /**
+ * Normal mode, we ensure that update is called on primary and its mirror without any resent
+ * jobs
+ */
+ public function testReplication() {
+ $mock = $this->getMockBuilder( WritableTTMServer::class )
+ ->getMock();
+ $mock->expects( $this->atLeastOnce() )
+ ->method( 'update' );
+ static::$mockups['primary'] = $mock;
+ $mock = $this->getMockBuilder( WritableTTMServer::class )
+ ->getMock();
+ $mock->expects( $this->atLeastOnce() )
+ ->method( 'update' );
+ static::$mockups['secondary'] = $mock;
+
+ $job = new TestableTTMServerMessageUpdateJob(
+ Title::makeTitle( NS_MAIN, 'Main Page' ),
+ [ 'command' => 'refresh' ],
+ $this->getMockBuilder( MessageHandle::class )
+ ->disableOriginalConstructor()
+ ->getMock()
+ );
+ $job->run();
+ $this->assertEmpty( $job->getResentJobs() );
+ }
+
+ /**
+ * The mirror failed, we ensure that we resend a job
+ * with the appropriate params.
+ */
+ public function testReplicationError() {
+ $mock = $this->getMockBuilder( WritableTTMServer::class )
+ ->getMock();
+ $mock->expects( $this->atLeastOnce() )
+ ->method( 'update' );
+ static::$mockups['primary'] = $mock;
+ $mock = $this->getMockBuilder( WritableTTMServer::class )
+ ->getMock();
+ $mock->expects( $this->atLeastOnce() )
+ ->method( 'update' )
+ ->will( $this->throwException( new TTMServerException ) );
+ static::$mockups['secondary'] = $mock;
+
+ $job = new TestableTTMServerMessageUpdateJob(
+ Title::makeTitle( NS_MAIN, 'Main Page' ),
+ [ 'command' => 'refresh' ],
+ $this->getMockBuilder( MessageHandle::class )
+ ->disableOriginalConstructor()
+ ->getMock()
+ );
+ $job->run();
+ $this->assertCount( 1, $job->getResentJobs() );
+ $expectedParams = [
+ 'errorCount' => 1,
+ 'service' => 'secondary',
+ 'command' => 'refresh'
+ ];
+ $actualParams = array_intersect_key(
+ $job->getResentJobs()[0]->getParams(),
+ $expectedParams
+ );
+ $this->assertEquals( $expectedParams, $actualParams );
+ }
+
+ /**
+ * All services failed, we ensure that we resend 2 jobs for
+ * each services
+ */
+ public function testAllServicesInError() {
+ $mock = $this->getMockBuilder( WritableTTMServer::class )
+ ->getMock();
+ $mock->expects( $this->atLeastOnce() )
+ ->method( 'update' )
+ ->will( $this->throwException( new TTMServerException ) );
+ static::$mockups['primary'] = $mock;
+ $mock = $this->getMockBuilder( WritableTTMServer::class )
+ ->getMock();
+ $mock->expects( $this->atLeastOnce() )
+ ->method( 'update' )
+ ->will( $this->throwException( new TTMServerException ) );
+ static::$mockups['secondary'] = $mock;
+
+ $job = new TestableTTMServerMessageUpdateJob(
+ Title::makeTitle( NS_MAIN, 'Main Page' ),
+ [ 'command' => 'refresh' ],
+ $this->getMockBuilder( MessageHandle::class )
+ ->disableOriginalConstructor()
+ ->getMock()
+ );
+ $job->run();
+ $this->assertCount( 2, $job->getResentJobs() );
+ $expectedParams = [
+ 'errorCount' => 1,
+ 'service' => 'primary',
+ 'command' => 'refresh'
+ ];
+ $actualParams = array_intersect_key(
+ $job->getResentJobs()[0]->getParams(),
+ $expectedParams
+ );
+ $this->assertEquals( $expectedParams, $actualParams );
+
+ $expectedParams = [
+ 'errorCount' => 1,
+ 'service' => 'secondary',
+ 'command' => 'refresh'
+ ];
+ $actualParams = array_intersect_key(
+ $job->getResentJobs()[1]->getParams(),
+ $expectedParams
+ );
+ $this->assertEquals( $expectedParams, $actualParams );
+ }
+
+ /**
+ * We simulate a resent job after a failure, this job is directed to a specific service, we
+ * ensure that we do not replicate the write to its mirror
+ */
+ public function testJobOnSingleService() {
+ $mock = $this->getMockBuilder( WritableTTMServer::class )
+ ->getMock();
+ $mock->expects( $this->atLeastOnce() )
+ ->method( 'update' );
+ static::$mockups['primary'] = $mock;
+ $mock = $this->getMockBuilder( WritableTTMServer::class )
+ ->getMock();
+ $mock->expects( $this->never() )
+ ->method( 'update' );
+ static::$mockups['secondary'] = $mock;
+
+ $job = new TestableTTMServerMessageUpdateJob(
+ Title::makeTitle( NS_MAIN, 'Main Page' ),
+ [
+ 'errorCount' => 1,
+ 'service' => 'primary',
+ 'command' => 'refresh'
+ ],
+ $this->getMockBuilder( MessageHandle::class )
+ ->disableOriginalConstructor()
+ ->getMock()
+ );
+ $job->run();
+ $this->assertEmpty( $job->getResentJobs() );
+ }
+
+ /**
+ * We simulate a job that failed multiple times and we fail again, we encure that we adandon
+ * the job by not resending it to queue
+ */
+ public function testAbandonedJob() {
+ $mock = $this->getMockBuilder( WritableTTMServer::class )
+ ->getMock();
+ $mock->expects( $this->atLeastOnce() )
+ ->method( 'update' )
+ ->will( $this->throwException( new TTMServerException ) );
+ static::$mockups['primary'] = $mock;
+ $mock = $this->getMockBuilder( WritableTTMServer::class )
+ ->getMock();
+ $mock->expects( $this->never() )
+ ->method( 'update' );
+ static::$mockups['secondary'] = $mock;
+
+ $job = new TestableTTMServerMessageUpdateJob(
+ Title::makeTitle( NS_MAIN, 'Main Page' ),
+ [
+ 'errorCount' => 4,
+ 'service' => 'primary',
+ 'command' => 'refresh'
+ ],
+ $this->getMockBuilder( MessageHandle::class )
+ ->disableOriginalConstructor()
+ ->getMock()
+ );
+ $job->run();
+ $this->assertEmpty( $job->getResentJobs() );
+ }
+
+}
+
+/**
+ * Test subclass to override methods that we are not able to mock
+ * easily.
+ * For the context of the test we can only test the 'refresh' command
+ * because other ones would need to have a more complex context to prepare
+ */
+class TestableTTMServerMessageUpdateJob extends TTMServerMessageUpdateJob {
+ private $resentJobs = [];
+ private $handleMock;
+
+ public function __construct( Title $title, $params, $handleMock ) {
+ parent::__construct( $title, $params );
+ $this->handleMock = $handleMock;
+ }
+
+ public function resend( TTMServerMessageUpdateJob $job ) {
+ $this->resentJobs[] = $job;
+ }
+
+ protected function getHandle() {
+ return $this->handleMock;
+ }
+
+ protected function getTranslation( MessageHandle $handle ) {
+ return 'random text';
+ }
+
+ public function getResentJobs() {
+ return $this->resentJobs;
+ }
+}
+
+/**
+ * This "testable" TTMServer implementation allows to:
+ * - test TTMServer specific methods
+ * - attach our mocks to the Test static context, this is needed because
+ * the factory always creates a new instance of the service
+ */
+class TestableTTMServer extends TTMServer implements WritableTTMServer {
+ private $delegate;
+
+ public function __construct( array $config ) {
+ parent::__construct( $config );
+ $this->delegate = TTMServerMessageUpdateJobTest::$mockups[$config['name']];
+ }
+
+ public function update( MessageHandle $handle, $targetText ) {
+ $this->delegate->update( $handle, $targetText );
+ }
+
+ public function beginBootstrap() {
+ $this->delegate->beginBootstrap();
+ }
+
+ public function beginBatch() {
+ $this->delegate->beginBatch();
+ }
+
+ public function batchInsertDefinitions( array $batch ) {
+ $this->delegate->batchInsertDefinitions( $batch );
+ }
+
+ public function batchInsertTranslations( array $batch ) {
+ $this->delegate->batchInsertTranslations( $batch );
+ }
+
+ public function endBatch() {
+ $this->delegate->endBatch();
+ }
+
+ public function endBootstrap() {
+ $this->delegate->endBootstrap();
+ }
+
+ public function setDoReIndex() {
+ return $this->delegate->setDoReIndex();
+ }
+}
diff --git a/Translate/tests/phpunit/TranslateHooksTest.php b/Translate/tests/phpunit/TranslateHooksTest.php
new file mode 100644
index 00000000..ada0b09b
--- /dev/null
+++ b/Translate/tests/phpunit/TranslateHooksTest.php
@@ -0,0 +1,91 @@
+<?php
+/**
+ * Test for various code using hooks.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * @group Database
+ * @group medium
+ * @covers TranslateHooks
+ */
+class TranslateHooksTest extends MediaWikiLangTestCase {
+ protected function setUp(): void {
+ parent::setUp();
+
+ $this->setMwGlobals( [
+ 'wgTranslateDocumentationLanguageCode' => 'qqq',
+ 'wgTranslateTranslationServices' => [],
+ 'wgTranslateMessageNamespaces' => [ NS_MEDIAWIKI ],
+ ] );
+ $this->setTemporaryHook( 'TranslatePostInitGroups', [ $this, 'getTestGroups' ] );
+
+ $mg = MessageGroups::singleton();
+ $mg->setCache( new WANObjectCache( [ 'cache' => new HashBagOStuff() ] ) );
+ $mg->recache();
+
+ MessageIndex::setInstance( new HashMessageIndex() );
+ MessageIndex::singleton()->rebuild();
+ }
+
+ public function getTestGroups( &$list ) {
+ $messages = [
+ 'ugakey1' => 'value1',
+ 'ugakey2' => 'value2',
+ ];
+
+ $list['testgroup'] = new MockWikiMessageGroup( 'testgroup', $messages );
+
+ return false;
+ }
+
+ public function testPreventCategorization() {
+ $user = $this->getTestSysop()->getUser();
+ $title = Title::makeTitle( NS_MEDIAWIKI, 'Ugakey1/fi' );
+ $wikipage = $this->getServiceContainer()->getWikiPageFactory()->newFromTitle( $title );
+ $content = ContentHandler::makeContent( '[[Category:Shouldnotbe]]', $title );
+
+ $wikipage->doUserEditContent( $content, $user, __METHOD__ );
+ $this->assertEquals(
+ [],
+ $title->getParentCategories(),
+ 'translation of known message'
+ );
+
+ $title = Title::makeTitle( NS_MEDIAWIKI, 'Ugakey2/qqq' );
+ $wikipage = $this->getServiceContainer()->getWikiPageFactory()->newFromTitle( $title );
+ $content = ContentHandler::makeContent( '[[Category:Shouldbe]]', $title );
+
+ $wikipage->doUserEditContent( $content, $user, __METHOD__ );
+ $this->assertEquals(
+ [ 'Category:Shouldbe' => 'MediaWiki:Ugakey2/qqq' ],
+ $title->getParentCategories(),
+ 'message docs'
+ );
+
+ $title = Title::makeTitle( NS_MEDIAWIKI, 'Ugakey3/no' );
+ $wikipage = $this->getServiceContainer()->getWikiPageFactory()->newFromTitle( $title );
+ $content = ContentHandler::makeContent( '[[Category:Shouldbealso]]', $title );
+
+ $wikipage->doUserEditContent( $content, $user, __METHOD__ );
+ $this->assertEquals( [], $title->getParentCategories(), 'unknown message' );
+ }
+
+ public function testSearchProfile() {
+ $profiles = [
+ 'files' => [],
+ 'all' => [],
+ 'advanced' => []
+ ];
+
+ $expected = [ 'files', 'translation', 'all', 'advanced' ];
+
+ TranslateHooks::searchProfile( $profiles );
+
+ $this->assertEquals( $expected, array_keys( $profiles ) );
+ }
+
+}
diff --git a/Translate/tests/phpunit/TranslateSandboxTest.php b/Translate/tests/phpunit/TranslateSandboxTest.php
new file mode 100644
index 00000000..dfe97284
--- /dev/null
+++ b/Translate/tests/phpunit/TranslateSandboxTest.php
@@ -0,0 +1,128 @@
+<?php
+/**
+ * Test for the utilities for the sandbox feature of Translate.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\MediaWikiServices;
+
+/**
+ * @group Database
+ * @covers TranslateSandbox
+ */
+class TranslateSandboxTest extends MediaWikiIntegrationTestCase {
+ protected function setUp(): void {
+ parent::setUp();
+ $this->setMwGlobals( [
+ 'wgTranslateUseSandbox' => true,
+ 'wgTranslateSandboxPromotedGroup' => 'translator',
+ ] );
+
+ // Make sure the hooks are installed even if $wgTranslateUseSandbox is false.
+ TranslateHooks::setupTranslate();
+ $this->tablesUsed[] = 'user';
+ }
+
+ /**
+ * @param User $user
+ * @return array|string[]
+ */
+ private function getUserGroups( User $user ): array {
+ $userGroupManager = MediaWikiServices::getInstance()->getUserGroupManager();
+ $groups = $userGroupManager->getUserGroups( $user );
+
+ return $groups;
+ }
+
+ public function testAddUser() {
+ $user = TranslateSandbox::addUser( 'Test user', 'test@blackhole.io', 'test password' );
+ $this->assertTrue( $user->isRegistered(), 'User exists' );
+
+ $groups = array_unique( $this->getUserGroups( $user ) );
+
+ $this->assertSame( [ 'translate-sandboxed' ], $groups, 'User is in the sandboxed group' );
+ }
+
+ public function testDeleteUser() {
+ $user = TranslateSandbox::addUser( 'Test user2', 'test@blackhole.io', 'test password' );
+ TranslateSandbox::deleteUser( $user );
+ $this->assertFalse( $user->isRegistered(), 'User no longer exists' );
+ }
+
+ public function testDeleteUserPromoted() {
+ $user = TranslateSandbox::addUser( 'Test user3', 'test@blackhole.io', 'test password' );
+ TranslateSandbox::promoteUser( $user );
+ $this->expectException( MWException::class );
+ $this->expectExceptionMessage( 'Not a sandboxed user' );
+ TranslateSandbox::deleteUser( $user );
+ }
+
+ public function testGetUsers() {
+ $atStart = TranslateSandbox::getUsers()->count();
+
+ $user = TranslateSandbox::addUser( 'Test user4', 'test@blackhole.io', 'test password' );
+
+ $this->assertEquals(
+ $atStart + 1, TranslateSandbox::getUsers()->count(),
+ 'One sandboxed user created'
+ );
+
+ TranslateSandbox::deleteUser( $user );
+ $this->assertEquals(
+ $atStart, TranslateSandbox::getUsers()->count(),
+ 'No sandboxed users after deleted'
+ );
+ }
+
+ public function testGetUsersPromotion() {
+ $atStart = TranslateSandbox::getUsers()->count();
+
+ $user = TranslateSandbox::addUser( 'Test user5', 'test@blackhole.io', 'test password' );
+ $this->assertEquals(
+ $atStart + 1,
+ TranslateSandbox::getUsers()->count(),
+ 'One sandboxed user created'
+ );
+
+ TranslateSandbox::promoteUser( $user );
+ $this->assertEquals(
+ $atStart,
+ TranslateSandbox::getUsers()->count(),
+ 'No sandboxed users after promotion'
+ );
+ }
+
+ public function testPromoteUser() {
+ $user = TranslateSandbox::addUser( 'Test user6', 'test@blackhole.io', 'test password' );
+ TranslateSandbox::promoteUser( $user );
+
+ $this->assertContains( 'translator', $this->getUserGroups( $user ) );
+ }
+
+ public function testPermissions() {
+ $user = TranslateSandbox::addUser( 'Test user7', 'test@blackhole.io', 'test password' );
+ $title = Title::makeTitle( NS_USER_TALK, $user->getName() );
+ $pm = MediaWikiServices::getInstance()->getPermissionManager();
+
+ $this->assertFalse(
+ $pm->userCan( 'edit', $user, $title ),
+ 'Sandboxed users cannot edit their own talk page'
+ );
+ TranslateSandbox::promoteUser( $user );
+ $this->assertTrue(
+ $pm->userCan( 'edit', $user, $title ),
+ 'Promoted users can edit their own talk page'
+ );
+ }
+
+ public function testIsSandboxed() {
+ $userNotInGroup = $this->getTestUser()->getUser();
+ $userInGroup = $this->getTestUser( [ 'translate-sandboxed' ] )->getUser();
+
+ $this->assertTrue( TranslateSandbox::isSandboxed( $userInGroup ) );
+ $this->assertFalse( TranslateSandbox::isSandboxed( $userNotInGroup ) );
+ }
+}
diff --git a/Translate/tests/phpunit/TranslateUtilsTest.php b/Translate/tests/phpunit/TranslateUtilsTest.php
new file mode 100644
index 00000000..2c374932
--- /dev/null
+++ b/Translate/tests/phpunit/TranslateUtilsTest.php
@@ -0,0 +1,46 @@
+<?php
+
+use MediaWiki\Revision\RevisionRecord;
+
+/**
+ * @group Database
+ * @covers TranslateUtils
+ */
+class TranslateUtilsTest extends MediaWikiIntegrationTestCase {
+
+ /**
+ * Creates a new page with name and text, returns a revision
+ * @param string $name
+ * @param string $text
+ * @return RevisionRecord
+ * @throws MWException
+ */
+ private function createPageWithNameAndText( $name, $text, $user ) {
+ $status = $this->editPage( $name, $text, '', NS_MAIN, $user );
+ $this->assertTrue( $status->isOK() );
+ return $status->getValue()['revision-record'];
+ }
+
+ /**
+ * @covers TranslateUtils::getContents
+ * @throws MWException
+ */
+ public function testGetContents() {
+ $user = $this->getTestUser()->getUser();
+ $title1 = __METHOD__ . '_Page1';
+ $this->createPageWithNameAndText( $title1, $title1 . 'TEXT', $user );
+ $title2 = __METHOD__ . '_Page2';
+ $this->createPageWithNameAndText( $title2, $title2 . 'TEXT', $user );
+ $result = TranslateUtils::getContents( [ $title1, $title2, 'Does_Not_Exist' ], NS_MAIN );
+ $this->assertEquals( [
+ $title1 => [
+ $title1 . 'TEXT',
+ $user->getName()
+ ],
+ $title2 => [
+ $title2 . 'TEXT',
+ $user->getName()
+ ]
+ ], $result );
+ }
+}
diff --git a/Translate/tests/phpunit/TranslateYamlTest.php b/Translate/tests/phpunit/TranslateYamlTest.php
new file mode 100644
index 00000000..26c1fa08
--- /dev/null
+++ b/Translate/tests/phpunit/TranslateYamlTest.php
@@ -0,0 +1,83 @@
+<?php
+
+/**
+ * Tests for yaml wrapper.
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @covers TranslateYaml
+ */
+class TranslateYamlTest extends MediaWikiIntegrationTestCase {
+ protected function setUp(): void {
+ parent::setUp();
+
+ $this->setMwGlobals( [
+ 'wgTranslateYamlLibrary' => 'phpyaml',
+ ] );
+ }
+
+ /**
+ * TODO: test other drivers too.
+ * @requires function yaml_parse
+ * @dataProvider provideTestLoadString
+ */
+ public function testLoadStringPhpyaml( $input, $expected, $comment ) {
+ $output = TranslateYaml::loadString( $input );
+ $this->assertEquals( $expected, $output, $comment );
+ }
+
+ public function provideTestLoadString() {
+ $tests = [];
+ $tests[] = [
+ 'a: b',
+ [ 'a' => 'b' ],
+ 'Simple key-value'
+ ];
+
+ $tests[] = [
+ 'a: !php/object "O:8:\"stdClass\":1:{s:1:\"a\";s:1:\"b\";}"',
+ [ 'a' => 'O:8:"stdClass":1:{s:1:"a";s:1:"b";}' ],
+ 'PHP objects must not be unserialized'
+ ];
+
+ return $tests;
+ }
+
+ /**
+ * Tests workaround for https://bugs.php.net/bug.php?id=76309
+ * @requires function yaml_emit
+ */
+ public function testBug76309() {
+ $input = [
+ 'a' => '2.',
+ 'b' => '22222222222222222222222222222222222222222222222222222222222222.',
+ 'c' => 2.0,
+ 'd' => "2.0"
+ ];
+
+ global $wgTranslateYamlLibrary;
+ if ( $wgTranslateYamlLibrary === 'phpyaml'
+ && version_compare( phpversion( 'yaml' ), '2.2.0', '>=' )
+ ) {
+ // https://bugs.php.net/bug.php?id=79866
+ $c = '2';
+ } else {
+ $c = '2.000000';
+ }
+
+ $expected = <<<YAML
+---
+a: "2."
+b: "22222222222222222222222222222222222222222222222222222222222222."
+c: $c
+d: "2.0"
+...
+
+YAML;
+
+ $output = TranslateYaml::dump( $input );
+ $this->assertEquals( $expected, $output, "Floaty strings outputted as strings" );
+ $parsed = TranslateYaml::loadString( $output );
+ $this->assertEquals( $input, $parsed, "Floaty strings roundtrip" );
+ }
+}
diff --git a/Translate/tests/phpunit/TranslationFuzzyUpdaterTest.php b/Translate/tests/phpunit/TranslationFuzzyUpdaterTest.php
new file mode 100644
index 00000000..6c2bd704
--- /dev/null
+++ b/Translate/tests/phpunit/TranslationFuzzyUpdaterTest.php
@@ -0,0 +1,98 @@
+<?php
+/**
+ * Tests for fuzzy flag change on edits.
+ * @author Niklas Laxström
+ * @file
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Extension\Translate\MessageGroupProcessing\RevTagStore;
+use MediaWiki\MediaWikiServices;
+use MediaWiki\Revision\RevisionRecord;
+
+/**
+ * Tests for fuzzy flag change on edits.
+ * @group Database
+ * @group medium
+ * @covers TranslateEditAddons
+ */
+class TranslationFuzzyUpdaterTest extends MediaWikiIntegrationTestCase {
+ protected function setUp(): void {
+ parent::setUp();
+
+ $this->setMwGlobals( [
+ 'wgTranslateTranslationServices' => [],
+ 'wgTranslateMessageNamespaces' => [ NS_MEDIAWIKI ],
+ ] );
+ $this->setTemporaryHook( 'TranslatePostInitGroups', [ $this, 'getTestGroups' ] );
+
+ $mg = MessageGroups::singleton();
+ $mg->setCache( new WANObjectCache( [ 'cache' => new HashBagOStuff() ] ) );
+ $mg->recache();
+
+ MessageIndex::setInstance( new HashMessageIndex() );
+ MessageIndex::singleton()->rebuild();
+ }
+
+ public function getTestGroups( &$list ) {
+ $messages = [ 'ugakey' => '$1 of $2', ];
+ $list['test-group'] = new MockWikiMessageGroup( 'test-group', $messages );
+
+ $otherMessages = [ 'nlkey' => 'Test message' ];
+ $list['validation-test-group'] = new MockWikiValidationMessageGroup(
+ 'validation-test-group', $otherMessages );
+
+ return false;
+ }
+
+ public function testParsing() {
+ $user = $this->getTestUser()->getUser();
+ $title = Title::newFromText( 'MediaWiki:Ugakey/nl' );
+ $page = $this->getServiceContainer()->getWikiPageFactory()->newFromTitle( $title );
+ $content = ContentHandler::makeContent( '$1 van $2', $title );
+ $status = $page->doUserEditContent( $content, $user, __METHOD__ );
+ $value = $status->getValue();
+ /** @var RevisionRecord $revisionRecord */
+ $revisionRecord = $value['revision-record'];
+ $revisionId = $revisionRecord->getId();
+
+ $dbw = wfGetDB( DB_PRIMARY );
+ $conds = [
+ 'rt_page' => $title->getArticleID(),
+ 'rt_type' => RevTagStore::FUZZY_TAG,
+ 'rt_revision' => $revisionId
+ ];
+
+ $index = array_keys( $conds );
+ $dbw->replace( 'revtag', [ $index ], $conds, __METHOD__ );
+
+ $handle = new MessageHandle( $title );
+ $this->assertTrue( $handle->isValid(), 'Message is known' );
+ $this->assertTrue( $handle->isFuzzy(), 'Message is fuzzy after database fuzzying' );
+ // Update the translation without the fuzzy string
+ $content = ContentHandler::makeContent( '$1 van $2', $title );
+ $page->doUserEditContent( $content, $user, __METHOD__ );
+ $this->assertFalse( $handle->isFuzzy(), 'Message is unfuzzy after edit' );
+
+ $content = ContentHandler::makeContent( '!!FUZZY!!$1 van $2', $title );
+ $page->doUserEditContent( $content, $user, __METHOD__ );
+ $this->assertTrue( $handle->isFuzzy(), 'Message is fuzzy after manual fuzzying' );
+
+ // Update the translation without the fuzzy string
+ $content = ContentHandler::makeContent( '$1 van $2', $title );
+ $page->doUserEditContent( $content, $user, __METHOD__ );
+ $this->assertFalse( $handle->isFuzzy(), 'Message is unfuzzy after edit' );
+ }
+
+ public function testValidationFuzzy() {
+ $user = $this->getTestUser()->getUser();
+ $title = Title::newFromText( 'MediaWiki:nlkey/en-gb' );
+ $page = MediaWikiServices::getInstance()->getWikiPageFactory()->newFromTitle( $title );
+ $content = ContentHandler::makeContent( 'Test message', $title );
+ $page->doUserEditContent( $content, $user, __METHOD__ );
+
+ $handle = new MessageHandle( $title );
+ $this->assertTrue( $handle->isValid(), 'Message is known' );
+ $this->assertTrue( $handle->isFuzzy(), 'Message is fuzzy due to validation failure' );
+ }
+}
diff --git a/Translate/tests/phpunit/TranslatorInterface/Aid/TranslationAidDataProviderTest.php b/Translate/tests/phpunit/TranslatorInterface/Aid/TranslationAidDataProviderTest.php
new file mode 100644
index 00000000..51e9fe27
--- /dev/null
+++ b/Translate/tests/phpunit/TranslatorInterface/Aid/TranslationAidDataProviderTest.php
@@ -0,0 +1,67 @@
+<?php
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Aid;
+
+use HashMessageIndex;
+use MediaWikiIntegrationTestCase;
+use MessageGroups;
+use MessageHandle;
+use MessageIndex;
+use MockWikiMessageGroup;
+use ObjectCache;
+use Title;
+use WANObjectCache;
+
+/**
+ * @group Database
+ * @covers \MediaWiki\Extension\Translate\TranslatorInterface\Aid\TranslationAidDataProvider
+ */
+class TranslationAidDataProviderTest extends MediaWikiIntegrationTestCase {
+
+ protected function setUp(): void {
+ parent::setUp();
+ $this->setMwGlobals( [
+ 'wgTranslateMessageNamespaces' => [ NS_MEDIAWIKI ]
+ ] );
+ $this->setTemporaryHook( 'TranslatePostInitGroups', [ $this, 'getTestGroups' ] );
+
+ $mg = MessageGroups::singleton();
+ $mg->setCache( new WANObjectCache( [ 'cache' => ObjectCache::getInstance( 'hash' ) ] ) );
+ $mg->recache();
+ MessageIndex::setInstance( new HashMessageIndex() );
+ MessageIndex::singleton()->rebuild();
+ }
+
+ public function getTestGroups( &$list ) {
+ $messages = [
+ 'TestPage' => 'bunny',
+ ];
+ $list['test-group'] = new MockWikiMessageGroup( 'test-group', $messages );
+ return false;
+ }
+
+ /**
+ * @covers \MediaWiki\Extension\Translate\TranslatorInterface\Aid\TranslationAidDataProvider::getGoodTranslations
+ * @throws MWException
+ */
+ public function testGetGoodTranslations() {
+ $title = 'MediaWiki:TestPage';
+ // Create some translations
+ $this->assertTrue(
+ $this->editPage( $title . '/fi', 'Test Finnish Translation' )->isGood(),
+ 'Sanity: must successfully edit ' . $title . '/fi page'
+ );
+ $this->assertTrue(
+ $this->editPage( $title . '/ru', 'Test Russian Translation' )->isGood(),
+ 'Sanity: must successfully edit ' . $title . '/ru page'
+ );
+
+ $messageHandle = new MessageHandle( Title::newFromText( $title ) );
+ $this->assertTrue( $messageHandle->isValid(), 'Sanity: MessageHandle must be valid' );
+ $dataProvider = new TranslationAidDataProvider( $messageHandle );
+ $this->assertEquals( [
+ 'ru' => 'Test Russian Translation',
+ 'fi' => 'Test Finnish Translation'
+ ], $dataProvider->getGoodTranslations() );
+ }
+}
diff --git a/Translate/tests/phpunit/TranslatorInterface/EntitySearchTest.php b/Translate/tests/phpunit/TranslatorInterface/EntitySearchTest.php
new file mode 100644
index 00000000..4bd8a78c
--- /dev/null
+++ b/Translate/tests/phpunit/TranslatorInterface/EntitySearchTest.php
@@ -0,0 +1,224 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface;
+
+use Generator;
+use HashBagOStuff;
+use HashMessageIndex;
+use MediaWikiIntegrationTestCase;
+use MessageGroup;
+use MessageGroups;
+use MessageIndex;
+use WANObjectCache;
+
+/**
+ * @covers \MediaWiki\Extension\Translate\TranslatorInterface\EntitySearch
+ * @license GPL-2.0-or-later
+ */
+class EntitySearchTest extends MediaWikiIntegrationTestCase {
+ public function getMessageGroupFactoryStub(): MessageGroups {
+ $data = <<<EOF
+Page
+Translatable page
+Pägë
+Translatable pägë
+Page 1
+Page 10
+Page 2
+Page Page Page Page
+page page page page
+EOF;
+ $data = explode( "\n", $data );
+ $stubGroups = [];
+ foreach ( $data as $dataItem ) {
+ $stubGroup = $this->createStub( MessageGroup::class );
+ $stubGroup->method( 'getLabel' )->willReturn( $dataItem );
+ $stubGroup->method( 'getId' )->willReturn( $this->makeGroupId( $dataItem ) );
+ $stubGroups[] = $stubGroup;
+ }
+
+ $stub = $this->createStub( MessageGroups::class );
+ $stub->method( 'getGroups' )->willReturn( $stubGroups );
+ return $stub;
+ }
+
+ private function makeGroupId( string $x ): string {
+ return "page-$x";
+ }
+
+ /** @dataProvider provideTestSearchStaticMessageGroups */
+ public function testSearchStaticMessageGroups( string $query, int $maxResults, array $expected ) {
+ $mediaWikiServices = $this->getServiceContainer();
+ $entitySearch = new EntitySearch(
+ new WANObjectCache( [ 'cache' => new HashBagOStuff() ] ),
+ $mediaWikiServices->getCollationFactory()->makeCollation( 'uca-default-u-kn' ),
+ $this->getMessageGroupFactoryStub(),
+ $mediaWikiServices->getNamespaceInfo(),
+ new HashMessageIndex(),
+ $mediaWikiServices->getTitleFormatter(),
+ $mediaWikiServices->getTitleParser()
+ );
+
+ $actual = $entitySearch->searchStaticMessageGroups( $query, $maxResults );
+ $this->assertEquals( $expected, $actual );
+ }
+
+ public function provideTestSearchStaticMessageGroups(): Generator {
+ yield [
+ 'Page',
+ 10,
+ [
+ [
+ 'label' => 'Page',
+ 'group' => 'page-Page',
+ ],
+ [
+ 'label' => 'Page 1',
+ 'group' => 'page-Page 1',
+ ],
+ [
+ 'label' => 'Page 2',
+ 'group' => 'page-Page 2',
+ ],
+ [
+ 'label' => 'Page 10',
+ 'group' => 'page-Page 10',
+ ],
+ [
+ 'label' => 'page page page page',
+ 'group' => 'page-page page page page',
+ ],
+ [
+ 'label' => 'Page Page Page Page',
+ 'group' => 'page-Page Page Page Page',
+ ],
+ [
+ 'label' => 'Translatable page',
+ 'group' => 'page-Translatable page',
+ ],
+ ]
+ ];
+
+ yield [
+ 'P',
+ 1,
+ [
+
+ [
+ 'label' => 'Page',
+ 'group' => 'page-Page',
+ ],
+ ]
+ ];
+
+ yield [
+ 'Pägë',
+ 10,
+ [
+ [
+ 'label' => 'Pägë',
+ 'group' => 'page-Pägë',
+ ],
+ [
+ 'label' => 'Translatable pägë',
+ 'group' => 'page-Translatable pägë',
+ ],
+ ]
+ ];
+
+ yield [
+ 'Book',
+ 10,
+ []
+ ];
+ }
+
+ public function getMessageIndexStub(): MessageIndex {
+ $data = <<<EOF
+8:title
+8:page title
+8:CAPITAL TITLE
+8:big_bunny
+8:prefix
+9:prefix-1
+9:prefix-2
+9:prefix-3
+EOF;
+ $data = explode( "\n", $data );
+ $stub = $this->createStub( MessageIndex::class );
+ $stub->method( 'getKeys' )->willReturn( $data );
+ return $stub;
+ }
+
+ /** @dataProvider provideTestSearchMessages */
+ public function testSearchMessages( string $query, int $maxResults, array $expected ) {
+ $mediaWikiServices = $this->getServiceContainer();
+ $entitySearch = new EntitySearch(
+ new WANObjectCache( [ 'cache' => new HashBagOStuff() ] ),
+ $mediaWikiServices->getCollationFactory()->makeCollation( 'uca-default-u-kn' ),
+ $this->createStub( MessageGroups::class ),
+ $mediaWikiServices->getNamespaceInfo(),
+ $this->getMessageIndexStub(),
+ $mediaWikiServices->getTitleFormatter(),
+ $mediaWikiServices->getTitleParser()
+ );
+
+ $actual = $entitySearch->searchMessages( $query, $maxResults );
+ $this->assertEquals( $expected, $actual );
+ }
+
+ public function provideTestSearchMessages(): Generator {
+ yield 'prefix and infix case-insensitive matching at word boundaries' => [
+ 'title',
+ 10,
+ [
+ [
+ 'pattern' => 'MediaWiki:CAPITAL TITLE',
+ 'count' => 1,
+ ],
+ [
+ 'pattern' => 'MediaWiki:Page title',
+ 'count' => 1,
+ ],
+ [
+ 'pattern' => 'MediaWiki:Title',
+ 'count' => 1,
+ ],
+ ]
+ ];
+
+ yield 'matching at underscore boundaries' => [
+ 'bunny',
+ 1,
+ [
+
+ [
+ 'pattern' => 'MediaWiki:Big bunny',
+ 'count' => 1,
+ ],
+ ]
+ ];
+
+ yield 'prefix collapsing' => [
+ 'prefix',
+ 2,
+ [
+ [
+ 'pattern' => 'MediaWiki talk:Prefix*',
+ 'count' => 3,
+ ],
+ [
+ 'pattern' => 'MediaWiki:Prefix',
+ 'count' => 1,
+ ],
+ ]
+ ];
+
+ yield [
+ 'No match',
+ 10,
+ []
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/TranslatorInterface/ReviewTranslationActionApiTest.php b/Translate/tests/phpunit/TranslatorInterface/ReviewTranslationActionApiTest.php
new file mode 100644
index 00000000..b527a629
--- /dev/null
+++ b/Translate/tests/phpunit/TranslatorInterface/ReviewTranslationActionApiTest.php
@@ -0,0 +1,160 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface;
+
+use ApiTestCase;
+use ApiUsageException;
+use ContentHandler;
+use HashBagOStuff;
+use HashMessageIndex;
+use InvalidArgumentException;
+use MediaWiki\MediaWikiServices;
+use MessageGroups;
+use MessageIndex;
+use MockWikiMessageGroup;
+use Title;
+use User;
+use WANObjectCache;
+
+/**
+ * @group Database
+ * @group medium
+ * @covers \MediaWiki\Extension\Translate\TranslatorInterface\ReviewTranslationActionApi
+ */
+class ReviewTranslationActionApiTest extends ApiTestCase {
+ protected function setUp(): void {
+ parent::setUp();
+
+ $this->setMwGlobals( [
+ 'wgGroupPermissions' => [
+ 'sysop' => [
+ 'translate-messagereview' => true,
+ ],
+ '*' => [
+ 'read' => true,
+ 'writeapi' => true
+ ]
+ ],
+ 'wgTranslateMessageNamespaces' => [ NS_MEDIAWIKI ],
+ ] );
+ $this->setTemporaryHook( 'TranslatePostInitGroups', [ $this, 'getTestGroups' ] );
+
+ $mg = MessageGroups::singleton();
+ $mg->setCache( new WANObjectCache( [ 'cache' => new HashBagOStuff() ] ) );
+ $mg->recache();
+
+ MessageIndex::setInstance( new HashMessageIndex() );
+ MessageIndex::singleton()->rebuild();
+ }
+
+ public function getTestGroups( &$list ): bool {
+ $messages = [
+ 'ugakey1' => 'value1',
+ 'ugakey2' => 'value2',
+ ];
+
+ $list['testgroup'] = new MockWikiMessageGroup( 'testgroup', $messages );
+
+ return false;
+ }
+
+ /** @dataProvider provideTestGetReviewBlockers */
+ public function testGetReviewBlockers(
+ string $exceptionMessage,
+ string $reviewerName,
+ string $editorName,
+ string $titleString,
+ string $content
+ ): void {
+ $title = Title::makeTitle( NS_MEDIAWIKI, $titleString );
+ $content = ContentHandler::makeContent( $content, $title );
+
+ $this->getServiceContainer()->getWikiPageFactory()->newFromTitle( $title )->doUserEditContent(
+ $content,
+ $this->getUser( $editorName ),
+ __METHOD__
+ );
+
+ $revRecord = MediaWikiServices::getInstance()
+ ->getRevisionLookup()
+ ->getRevisionByTitle( $title );
+
+ if ( $exceptionMessage ) {
+ $this->expectException( ApiUsageException::class );
+ $this->expectExceptionMessageMatches( '/' . $exceptionMessage . '/i' );
+ }
+
+ $result = $this->doApiRequestWithToken( [
+ 'action' => 'translationreview',
+ 'revision' => $revRecord->getId()
+ ], null, $this->getUser( $reviewerName ) );
+
+ if ( !$exceptionMessage ) {
+ $this->assertArrayHasKey( 'translationreview', $result[0] );
+ }
+ }
+
+ public function provideTestGetReviewBlockers() {
+ yield [
+ "don't have permission",
+ 'plainUser',
+ 'superUser1',
+ 'Ugakey1/fi',
+ 'trans1',
+ 'Unpriviledged user is not allowed to change state'
+ ];
+
+ yield [
+ 'own translations',
+ 'superUser1',
+ 'superUser1',
+ 'Ugakey1/fi',
+ 'trans1',
+ 'Cannot approve own translation'
+ ];
+
+ yield [
+ 'Cannot review fuzzy',
+ 'superUser1',
+ 'superUser2',
+ 'Ugakey2/fi',
+ '!!FUZZY!!trans2',
+ 'Cannot approve fuzzy translation'
+ ];
+
+ yield [
+ 'Unknown message',
+ 'superUser1',
+ 'superUser2',
+ 'Ugakey3/fi',
+ 'unknown message',
+ 'Cannot approve unknown translation'
+ ];
+
+ yield [
+ '',
+ 'superUser2',
+ 'superUser1',
+ 'Ugakey1/fi',
+ 'trans1',
+ 'Can approve non-fuzzy known non-own translation'
+ ];
+ }
+
+ private static $testUsers = [];
+
+ private function getUser( string $name ): User {
+ if ( self::$testUsers === [] ) {
+ self::$testUsers[ 'plainUser' ] = $this->getMutableTestUser()->getUser();
+ self::$testUsers[ 'superUser1' ] = $this->getMutableTestUser( [ 'sysop', 'bureaucrat' ] )->getUser();
+ self::$testUsers[ 'superUser2' ] = $this->getMutableTestUser( [ 'sysop', 'bureaucrat' ] )->getUser();
+ }
+
+ if ( isset( self::$testUsers[ $name ] ) ) {
+ return self::$testUsers[ $name ];
+ }
+
+ throw new InvalidArgumentException( "Unknown user: $name" );
+ }
+}
diff --git a/Translate/tests/phpunit/TranslatorSandbox/TranslationStashStorageTest.php b/Translate/tests/phpunit/TranslatorSandbox/TranslationStashStorageTest.php
new file mode 100644
index 00000000..3760204b
--- /dev/null
+++ b/Translate/tests/phpunit/TranslatorSandbox/TranslationStashStorageTest.php
@@ -0,0 +1,43 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorSandbox;
+
+use MediaWikiIntegrationTestCase;
+use Title;
+use User;
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @group Database
+ * @covers \MediaWiki\Extension\Translate\TranslatorSandbox\TranslationStashStorage
+ */
+class TranslationStashStorageTest extends MediaWikiIntegrationTestCase {
+ public function testAdd() {
+ $storage = new TranslationStashStorage( wfGetDB( DB_PRIMARY ) );
+
+ $translation1 = new StashedTranslation(
+ User::newFromId( 1 ),
+ Title::makeTitle( NS_MAIN, __METHOD__ ),
+ 'test value',
+ [ 'kissa', 'kala' ]
+ );
+
+ $translation2 = new StashedTranslation(
+ User::newFromId( 2 ),
+ Title::makeTitle( NS_MAIN, __METHOD__ ),
+ 'test value 2',
+ [ 'kissa', 'kala' ]
+ );
+
+ $storage->addTranslation( $translation1 );
+ $storage->addTranslation( $translation2 );
+
+ $ret = $storage->getTranslations( User::newFromId( 1 ) );
+ $this->assertCount( 1, $ret, 'One stashed translation for this user' );
+
+ // AssertSame required same reference, assert equals only same content
+ $this->assertEquals( $translation1, $ret[0], 'Data roundtrips' );
+ }
+}
diff --git a/Translate/tests/phpunit/Validation/ValidationRunnerTest.php b/Translate/tests/phpunit/Validation/ValidationRunnerTest.php
new file mode 100644
index 00000000..a98283f6
--- /dev/null
+++ b/Translate/tests/phpunit/Validation/ValidationRunnerTest.php
@@ -0,0 +1,279 @@
+<?php
+/**
+ * Tests for Message Validator and ValidatorResult.
+ *
+ * @file
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Extension\Translate\Validation\ValidationRunner;
+
+/**
+ * @covers \MediaWiki\Extension\Translate\Validation\ValidationRunner
+ * @covers \MediaWiki\Extension\Translate\Validation\ValidationResult
+ */
+class ValidationRunnerTest extends MediaWikiIntegrationTestCase {
+ protected function setUp(): void {
+ parent::setUp();
+
+ $this->setTemporaryHook(
+ 'TranslatePostInitGroups',
+ [ $this, 'getTestGroups' ]
+ );
+
+ $mg = MessageGroups::singleton();
+ $mg->setCache( new WANObjectCache( [ 'cache' => new HashBagOStuff() ] ) );
+ $mg->recache();
+
+ MessageIndex::setInstance( new HashMessageIndex() );
+ MessageIndex::singleton()->rebuild();
+
+ // Run with empty ignore list by default
+ $this->setMwGlobals( 'wgTranslateValidationExclusionFile', false );
+ ValidationRunner::reloadIgnorePatterns();
+ }
+
+ public function getTestGroups( &$list ) {
+ $messages = [
+ 'translated' => 'bunny',
+ 'untranslated' => 'fanny',
+ 'testing-key' => 'test this!',
+ 'regex-key-test' => 'regex test',
+ 'non-matching-key' => 'non matching key',
+ 'key-excluded' => '',
+ 'regex-exclude' => '',
+ 'wildcard-exclude' => ''
+ ];
+
+ $list['test-group'] = new MockWikiValidationMessageGroup( 'test-group', $messages );
+ }
+
+ public function testValidateMessage() {
+ $group = MessageGroups::getGroup( 'test-group' );
+ $collection = $group->initCollection( 'en-gb' );
+ $collection->loadTranslations();
+
+ $msgValidator = $group->getValidator();
+ $validationResult = $msgValidator->validateMessage(
+ $collection[ 'translated' ],
+ 'en-gb'
+ );
+
+ $this->assertTrue(
+ $validationResult->hasErrors(),
+ 'errors are correctly identified.'
+ );
+ $this->assertTrue(
+ $validationResult->hasWarnings(),
+ 'warnings are correctly identified.'
+ );
+
+ $this->assertCount(
+ 1,
+ $validationResult->getWarnings(),
+ 'there is 1 warning returned as per the validator.'
+ );
+
+ $this->assertCount(
+ 2,
+ $validationResult->getErrors(),
+ 'there are 2 errors returned as per the validator.'
+ );
+
+ $validationResult = $msgValidator->validateMessage(
+ $collection[ 'translated' ],
+ 'en-gb',
+ true // ignore warnings
+ );
+
+ $this->assertTrue(
+ $validationResult->hasErrors(),
+ 'errors are correctly identified if ignore warnings is set.'
+ );
+ $this->assertFalse(
+ $validationResult->hasWarnings(),
+ 'warnings are ignored if ignore warnings is set.'
+ );
+ }
+
+ public function testQuickValidate() {
+ $group = MessageGroups::getGroup( 'test-group' );
+ $collection = $group->initCollection( 'en-gb' );
+ $collection->loadTranslations();
+
+ $msgValidator = $group->getValidator();
+ $validationResult = $msgValidator->quickValidate( $collection[ 'translated' ], 'en-gb' );
+
+ $this->assertTrue(
+ $validationResult->hasIssues(),
+ 'either errors or warnings are set.'
+ );
+
+ $this->assertFalse(
+ $validationResult->hasWarnings() && $validationResult->hasErrors(),
+ 'either error or warnings are set, but not both.'
+ );
+
+ $this->assertCount(
+ 1,
+ $validationResult->getIssues(),
+ 'there is a single warning or error returned as per the validator.'
+ );
+
+ $validationResult = $msgValidator->quickValidate(
+ $collection[ 'translated' ],
+ 'en-gb',
+ true // ignore warnings
+ );
+
+ $this->assertTrue(
+ $validationResult->hasErrors(),
+ 'errors are identified if ignore warnings is set.'
+ );
+ $this->assertFalse(
+ $validationResult->hasWarnings(),
+ 'warnings are not identified if ignore warnings is set.'
+ );
+ }
+
+ public function testDescriptiveMessage() {
+ $group = MessageGroups::getGroup( 'test-group' );
+ $collection = $group->initCollection( 'en-gb' );
+ $collection->loadTranslations();
+
+ $msgValidator = $group->getValidator();
+ $validationResult = $msgValidator->validateMessage( $collection[ 'translated' ], 'en-gb' );
+
+ $requestContext = new RequestContext();
+ $requestContext->setLanguage( 'en' );
+
+ $this->assertCount(
+ count( $validationResult->getErrors() ),
+ $validationResult->getDescriptiveErrors( $requestContext ),
+ 'the number of descriptive errors messages matches the number of errors.'
+ );
+ $this->assertCount(
+ count( $validationResult->getWarnings() ),
+ $validationResult->getDescriptiveWarnings( $requestContext ),
+ 'the number of descriptive warnings messages matches the number of warnings.'
+ );
+
+ $this->assertIsString(
+ $validationResult->getDescriptiveWarnings( $requestContext )[0],
+ 'warning messages are of type string.'
+ );
+ $this->assertIsString(
+ $validationResult->getDescriptiveErrors( $requestContext )[0],
+ 'error messages are of type string'
+ );
+ }
+
+ public function testIgnoreList() {
+ $this->setMwGlobals( [
+ 'wgTranslateValidationExclusionFile' => __DIR__ . '/../data/validation-exclusion-list.php'
+ ] );
+
+ $group = MessageGroups::getGroup( 'test-group' );
+ $collection = $group->initCollection( 'en-gb' );
+ $collection->loadTranslations();
+
+ $collectionFr = $group->initCollection( 'fr' );
+ $collectionFr->loadTranslations();
+
+ $msgValidator = $group->getValidator();
+ $msgValidator::reloadIgnorePatterns();
+
+ $validationResult = $msgValidator->validateMessage( $collection[ 'translated' ], 'en-gb' );
+ $this->assertCount(
+ 1,
+ $validationResult->getIssues(),
+ 'warnings or errors are filtered as per validation-exclusion-list.'
+ );
+
+ $validationResult = $msgValidator->validateMessage( $collectionFr[ 'translated' ], 'fr' );
+ $this->assertGreaterThan(
+ 1,
+ count( $validationResult->getIssues() ),
+ 'warnings or errors are filtered as per validation-exclusion-list only for specific language code.'
+ );
+
+ $validationResult = $msgValidator->quickValidate( $collection['translated'], 'en-gb' );
+ $this->assertCount(
+ 1,
+ $validationResult->getIssues(),
+ 'warnings or errors are filtered as per validation-exclusion-list.'
+ );
+
+ $validationResult = $msgValidator->quickValidate( $collectionFr[ 'translated' ], 'fr' );
+ $this->assertCount(
+ 1,
+ $validationResult->getIssues(),
+ 'warnings or errors are filtered as per validation-exclusion-list only for specific language code.'
+ );
+
+ $validationResult = $msgValidator->validateMessage( $collectionFr['regex-key-test'], 'fr' );
+ $this->assertCount(
+ 0,
+ $validationResult->getIssues(),
+ 'warnings or errors are filtered as per validation-exclusion-list for specific message key.'
+ );
+ }
+
+ public function testKeyInclusion() {
+ $group = MessageGroups::getGroup( 'test-group' );
+ $collection = $group->initCollection( 'en-gb' );
+ $collection->loadTranslations();
+
+ $msgValidator = $group->getValidator();
+ $validationResult = $msgValidator->validateMessage( $collection['testing-key'], 'en-gb' );
+ $this->assertCount(
+ 0,
+ $validationResult->getErrors(),
+ 'no errors are raised for a non matching key!'
+ );
+
+ $validationResult = $msgValidator->validateMessage( $collection['regex-key-test'], 'en-gb' );
+ $this->assertCount(
+ 2,
+ $validationResult->getErrors(),
+ 'errors are raised for a matching key matched via regex!'
+ );
+
+ $validationResult = $msgValidator->validateMessage( $collection['translated'], 'en-gb' );
+ $this->assertCount(
+ 2,
+ $validationResult->getErrors(),
+ 'errors are raised for a matching key matched via a direct match!'
+ );
+ }
+
+ public function testKeyExclusion() {
+ $group = MessageGroups::getGroup( 'test-group' );
+ $collection = $group->initCollection( 'en-gb' );
+ $collection->loadTranslations();
+ $msgValidator = $group->getValidator();
+
+ $validationResult = $msgValidator->validateMessage( $collection['regex-key-test'], 'en-gb' );
+ $this->assertGreaterThan(
+ 0,
+ count( $validationResult->getErrors() ),
+ 'errors are raised for a matching key matched via regex!'
+ );
+
+ $excludedKeys = [
+ 'key-excluded',
+ 'regex-exclude',
+ 'wildcard-exclude'
+ ];
+
+ foreach ( $excludedKeys as $key ) {
+ $validationResult = $msgValidator->validateMessage( $collection[$key], 'en-gb' );
+ $this->assertCount(
+ 0,
+ $validationResult->getErrors(),
+ 'errors are not raised for an excluded key: ' . $key
+ );
+ }
+ }
+}
diff --git a/Translate/tests/phpunit/Validation/Validators/MediaWikiPluralValidatorTest.php b/Translate/tests/phpunit/Validation/Validators/MediaWikiPluralValidatorTest.php
new file mode 100644
index 00000000..eac0775b
--- /dev/null
+++ b/Translate/tests/phpunit/Validation/Validators/MediaWikiPluralValidatorTest.php
@@ -0,0 +1,120 @@
+<?php
+declare( strict_types = 1 );
+
+use MediaWiki\Extension\Translate\Validation\Validators\MediaWikiPluralValidator;
+
+/**
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\Validation\Validators\MediaWikiPluralValidator
+ */
+class MediaWikiPluralValidatorTest extends MediaWikiIntegrationTestCase {
+ private function getTestInstance(): MediaWikiPluralValidator {
+ $services = $this->getServiceContainer();
+ return new MediaWikiPluralValidator(
+ $services->getLanguageFactory(),
+ $services->getParserFactory(),
+ $services->getUserFactory()
+ );
+ }
+
+ /** @dataProvider getPluralFormCountProvider */
+ public function testGetPluralFormCount( $expected, $code, $comment ) {
+ $validator = $this->getTestInstance();
+ $provided = $validator->getPluralFormCount( $code );
+ $this->assertEquals( $expected, $provided, $comment );
+ }
+
+ public function getPluralFormCountProvider() {
+ yield [ 2, 'en', 'English has two plural forms' ];
+ yield [ 3, 'ro', 'Romanian has three plural forms' ];
+ yield [ 5, 'br', 'Breton has five plural forms' ];
+ }
+
+ /** @dataProvider getPluralFormsProvider */
+ public function testGetPluralForms( $expected, $string, $comment ) {
+ $validator = $this->getTestInstance();
+ $provided = $validator->getPluralForms( $string );
+ $this->assertSame( $expected, $provided, $comment );
+ }
+
+ public function getPluralFormsProvider() {
+ yield [
+ [ [ '1', '2' ] ],
+ 'a{{PLURAL:#|1|2}}b',
+ 'one plural magic word is parsed correctly'
+ ];
+
+ yield [
+ [ [ '1', '2' ], [ '3', '4' ] ],
+ '{{PLURAL:#|1|2}}{{PLURAL:#|3|4}}',
+ 'two plural magic words are parsed correctly'
+ ];
+
+ yield [
+ [ [ '1', '2{{}}3' ] ],
+ 'a{{PLURAL:#|1|2{{}}3}}',
+ 'one plural magic word with curlies inside is parsed correctly'
+ ];
+
+ yield [
+ [ [ '0=0', '1=one', '1', '2' ] ],
+ 'a{{PLURAL:#|0=0|1=one|1|2}}',
+ 'one plural magic word with explicit forms is parsed correctly'
+ ];
+
+ yield [
+ [],
+ 'a{{PLURAL:#|0=0|1=one|1|2}',
+ 'unclosed plural tag is ignored'
+ ];
+
+ yield [
+ [ [ '1=foo', '{{GENDER:#|he}}' ] ],
+ 'a{{PLURAL:#|1=foo|{{GENDER:#|he}}}}',
+ 'pipes in subtemplates are ignored'
+ ];
+
+ yield [
+ [ [ '[[Special:A|письмо]]', '[[Special:A|писем]]', '[[Special:A|письма]]' ] ],
+ '{{PLURAL:#|[[Special:A|письмо]]|[[Special:A|писем]]|[[Special:A|письма]]}}',
+ 'pipes in links are ignored'
+ ];
+
+ yield [
+ [
+ [ 'a', 'b' ],
+ [ 'c', 'd' ],
+ [ '{{PLURAL:#|a|b}}', '{{PLURAL:#|c|d}}' ],
+ ],
+ '{{PLURAL:#|{{PLURAL:#|a|b}}|{{PLURAL:#|c|d}}}}',
+ 'nested plurals are handled correctly'
+ ];
+ }
+
+ /** @dataProvider removeExplicitPluralFormsProvider */
+ public function testRemoveExplicitPluralForms( $expected, $forms, $comment ) {
+ $provided = MediaWikiPluralValidator::removeExplicitPluralForms( $forms );
+ $this->assertEquals( $expected, $provided, $comment );
+ }
+
+ public function removeExplicitPluralFormsProvider() {
+ yield [
+ [ '1', '2' ],
+ [ '1', '2' ],
+ 'default forms are not removed',
+ ];
+
+ yield [
+ [ '1', '2' ],
+ [ '0=0', '1', '0=0', '2', '1=one' ],
+ 'explicit forms are removed regardless of position',
+ ];
+
+ yield [
+ [ '1', '2' ],
+ [ '1', '2', '500=lots' ],
+ 'works for any number',
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/WikiPageMessageGroupTest.php b/Translate/tests/phpunit/WikiPageMessageGroupTest.php
new file mode 100644
index 00000000..aaa3f858
--- /dev/null
+++ b/Translate/tests/phpunit/WikiPageMessageGroupTest.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+use MediaWiki\Extension\Translate\Validation\ValidationRunner;
+
+/**
+ * @group medium
+ * @covers WikiPageMessageGroup
+ */
+class WikiPageMessageGroupTest extends MediaWikiIntegrationTestCase {
+ protected function setUp(): void {
+ parent::setUp();
+
+ $this->setTemporaryHook(
+ 'TranslatePostInitGroups',
+ static function ( &$list ) {
+ $anotherPageMessageGroup = new WikiPageMessageGroup( 'anotherpageid', 'mypage' );
+ $anotherPageMessageGroup->setLabel( 'thelabel' ); // Example
+ $anotherPageMessageGroup->setNamespace( 5 ); // Example
+
+ $list['anotherpageid'] = $anotherPageMessageGroup;
+
+ return false;
+ }
+ );
+
+ $this->setTemporaryHook( 'TranslateInitGroupLoaders', [] );
+
+ $mg = MessageGroups::singleton();
+ $mg->setCache( new WANObjectCache( [ 'cache' => new HashBagOStuff() ] ) );
+ $mg->recache();
+ }
+
+ public function testMessageValidator() {
+ $group = MessageGroups::getGroup( 'anotherpageid' );
+ $msgValidator = $group->getValidator();
+
+ $this->assertInstanceOf( ValidationRunner::class, $msgValidator,
+ 'returns a valid object of ValidationRunner class.' );
+ }
+}
diff --git a/Translate/tests/phpunit/data/AppleFFSTest1.strings b/Translate/tests/phpunit/data/AppleFFSTest1.strings
new file mode 100644
index 00000000..305ac2ff
--- /dev/null
+++ b/Translate/tests/phpunit/data/AppleFFSTest1.strings
@@ -0,0 +1,30 @@
+
+/* Class = "IBUIButton"; normalTitle = "Save"; ObjectID = "7Wa-ox-cAd"; */
+"7Wa-ox-cAd.normalTitle" = "Save";
+
+/* Class = "IBUIButton"; normalTitle = "◃"; ObjectID = "8HR-Gs-iaC"; */
+"8HR-Gs-iaC.normalTitle" = "◃";
+
+/* Class = "IBUITextField"; placeholder = "Enter captcha text from image above"; ObjectID = "AIA-vO-cLI"; */
+"AIA-vO-cLI.placeholder" = "Enter captcha text from image above";
+
+/* Class = "IBUIButton"; normalTitle = "Cancel"; ObjectID = "P0o-I6-RDJ"; */
+"P0o-I6-RDJ.normalTitle" = "Cancel";
+
+/* Class = "IBUIButton"; normalTitle = "Show another captcha"; ObjectID = "QGI-DM-j1P"; */
+"QGI-DM-j1P.normalTitle" = "Show another captcha";
+
+/* Class = "IBUIButton"; normalTitle = "≣"; ObjectID = "UVB-P9-soS"; */
+"UVB-P9-soS.normalTitle" = "≣";
+
+/* Class = "IBUILabel"; text = "Canonical Language"; ObjectID = "Vkd-3W-cSt"; */
+"Vkd-3W-cSt.text" = "Canonical Language";
+
+/* Class = "IBUIButton"; normalTitle = "Aあ"; ObjectID = "atP-34-Uka"; */
+"atP-34-Uka.normalTitle" = "Aあ";
+
+/* Class = "IBUIButton"; normalTitle = "◃"; ObjectID = "cq9-Zs-YsN"; */
+"cq9-Zs-YsN.normalTitle" = "◃";
+
+/* Class = "IBUILabel"; text = "Language"; ObjectID = "djd-0J-VZY"; */
+"djd-0J-VZY.text" = "Language";
diff --git a/Translate/tests/phpunit/data/AppleInfoPlistFfsTest1.strings b/Translate/tests/phpunit/data/AppleInfoPlistFfsTest1.strings
new file mode 100644
index 00000000..2eebe7e7
--- /dev/null
+++ b/Translate/tests/phpunit/data/AppleInfoPlistFfsTest1.strings
@@ -0,0 +1,6 @@
+/*
+ InfoPlist.strings
+*/
+
+NSPhotoLibraryUsageDescription = "Test Message!";
+NSFaceIDUsageDescription = "Hello World";
diff --git a/Translate/tests/phpunit/data/Example-result.i18n.php b/Translate/tests/phpunit/data/Example-result.i18n.php
new file mode 100644
index 00000000..ae3aa743
--- /dev/null
+++ b/Translate/tests/phpunit/data/Example-result.i18n.php
@@ -0,0 +1,55 @@
+<?php
+/**
+ * Internationalisation file for extension ....
+ *
+ * @file
+ * @ingroup Extensions
+ */
+
+$messages = [];
+
+$messages['en'] = [
+ 'translatedmessage' => 'The database has been automatically locked due to inactivity from the administrators.',
+ 'fuzzymessage' => 'Auto-locks the wiki database if the sysops are all inactive for some time',
+];
+
+/** Message documentation (Message documentation)
+ * @author Purodha
+ * @author The Evil IP address
+ */
+$messages['qqq'] = [
+ 'fuzzymessage' => '{{desc}}',
+];
+
+/** Afrikaans (Afrikaans)
+ * @author Naudefj
+ */
+$messages['af'] = [
+ 'translatedmessage' => 'Die databasis is outomaties gesluit omdat die administrateurs nie aktief is nie.',
+ 'fuzzymessage' => "Sluit die wiki outomaties as die administrateurs vir 'n geruime tyd nie aktief is nie",
+];
+
+/** Gheg Albanian (Gegë)
+ * @author Bresta
+ */
+$messages['aln'] = [
+ 'translatedmessage' => 'Baza e të dhânave âsht bllokue automatikisht për shkak të mosaktivitetit të administruesve.',
+ 'fuzzymessage' => 'E vetë-bllokon bazën e të dhânave nëse administruesit janë joaktiv për nji kohë të caktueme.',
+];
+
+/** Arabic (العربية)
+ * @author Meno25
+ * @author OsamaK
+ */
+$messages['ar'] = [
+ 'translatedmessage' => 'تم غلق قاعدة البيانات تلقائيا نظرا لعدم نشاط مدراء النظام.',
+ 'fuzzymessage' => 'قفل قاعدة بيانات الويكي تلقائيا إذا كان كل مدراء النظام غير نشطين لبعض الوقت',
+];
+
+/** Finnish (suomi)
+ * @author Nike the bunny
+ */
+$messages['fi'] = [
+ 'translatedmsg' => 'translation',
+ 'fuzzymsg' => 'translation', # Fuzzy
+];
diff --git a/Translate/tests/phpunit/data/Example.i18n.php b/Translate/tests/phpunit/data/Example.i18n.php
new file mode 100644
index 00000000..46c4c0c9
--- /dev/null
+++ b/Translate/tests/phpunit/data/Example.i18n.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Internationalisation file for extension ....
+ *
+ * @file
+ * @ingroup Extensions
+ */
+
+$messages = [];
+
+$messages['en'] = [
+ 'translatedmessage' => 'The database has been automatically locked due to inactivity from the administrators.',
+ 'fuzzymessage' => 'Auto-locks the wiki database if the sysops are all inactive for some time',
+];
+
+/** Message documentation (Message documentation)
+ * @author Purodha
+ * @author The Evil IP address
+ */
+$messages['qqq'] = [
+ 'fuzzymessage' => '{{desc}}',
+];
+
+/** Afrikaans (Afrikaans)
+ * @author Naudefj
+ */
+$messages['af'] = [
+ 'translatedmessage' => 'Die databasis is outomaties gesluit omdat die administrateurs nie aktief is nie.',
+ 'fuzzymessage' => "Sluit die wiki outomaties as die administrateurs vir 'n geruime tyd nie aktief is nie",
+];
+
+/** Gheg Albanian (Gegë)
+ * @author Bresta
+ */
+$messages['aln'] = [
+ 'translatedmessage' => 'Baza e të dhânave âsht bllokue automatikisht për shkak të mosaktivitetit të administruesve.',
+ 'fuzzymessage' => 'E vetë-bllokon bazën e të dhânave nëse administruesit janë joaktiv për nji kohë të caktueme.',
+];
+
+/** Arabic (العربية)
+ * @author Meno25
+ * @author OsamaK
+ */
+$messages['ar'] = [
+ 'translatedmessage' => 'تم غلق قاعدة البيانات تلقائيا نظرا لعدم نشاط مدراء النظام.',
+ 'fuzzymessage' => 'قفل قاعدة بيانات الويكي تلقائيا إذا كان كل مدراء النظام غير نشطين لبعض الوقت',
+];
diff --git a/Translate/tests/phpunit/data/IniFFSTest1.ini b/Translate/tests/phpunit/data/IniFFSTest1.ini
new file mode 100644
index 00000000..372cef48
--- /dev/null
+++ b/Translate/tests/phpunit/data/IniFFSTest1.ini
@@ -0,0 +1,8 @@
+; Author: The king of very small kingdom
+[fi]
+hello = Hello
+world = World!
+all = all = all
+
+foo.bar = bar
+quote = We're having fun? \ No newline at end of file
diff --git a/Translate/tests/phpunit/data/IniFFSTest2.ini b/Translate/tests/phpunit/data/IniFFSTest2.ini
new file mode 100644
index 00000000..96a93c79
--- /dev/null
+++ b/Translate/tests/phpunit/data/IniFFSTest2.ini
@@ -0,0 +1,6 @@
+; Exported from $wgSitename
+; Author: Nike the bunny
+[fi]
+translatedmsg = translation
+; Fuzzy
+fuzzymsg = translation
diff --git a/Translate/tests/phpunit/data/MediaWikiExtensionTest-conf2.yaml b/Translate/tests/phpunit/data/MediaWikiExtensionTest-conf2.yaml
new file mode 100644
index 00000000..6d9a4cd1
--- /dev/null
+++ b/Translate/tests/phpunit/data/MediaWikiExtensionTest-conf2.yaml
@@ -0,0 +1,42 @@
+BASIC:
+ class: MediaWikiExtensionMessageGroup
+ id: ext-wikimediamessages
+ namespace: 8
+ label: Wikimedia Messages
+ description: Plop
+
+FILES:
+ class: JsonFFS
+ sourcePattern: "%GROUPROOT%/mediawiki-extensions/extensions/WikimediaMessages/i18n/%CODE%.json"
+ aliasFile: FooBar.alias.php
+ magicFile: FooBar.magic.php
+ aliasFileSource: "%GROUPROOT%/mediawiki-extensions/extensions/FooBar.alias.php"
+ magicFileSource: "%GROUPROOT%/mediawiki-extensions/extensions/FooBar.magic.php"
+
+VALIDATORS:
+ - id: BraceBalance
+ - id: MediaWikiLink
+ - id: MediaWikiPageName
+ - id: MediaWikiParameter
+ - id: MediaWikiPlural
+
+INSERTABLES:
+ - class: "MediaWiki\\Extension\\Translate\\TranslatorInterface\\Insertable\\MediaWikiInsertablesSuggester"
+
+MANGLER:
+ class: "MediaWiki\\Extension\\Translate\\MessageProcessing\\StringMatcher"
+ prefix: wmf-
+ patterns:
+ - sidebar
+ - grouppage-Staff
+ - group-Staff
+ - group-Staff-member
+
+TAGS:
+ optional:
+ - grouppage-recursive-export
+ - "*-extensionname"
+ - skinname-*
+ ignored:
+ - wmf-sidebar
+ - robots.txt
diff --git a/Translate/tests/phpunit/data/MediaWikiExtensionTest-conf3.yaml b/Translate/tests/phpunit/data/MediaWikiExtensionTest-conf3.yaml
new file mode 100644
index 00000000..1decb745
--- /dev/null
+++ b/Translate/tests/phpunit/data/MediaWikiExtensionTest-conf3.yaml
@@ -0,0 +1,25 @@
+BASIC:
+ class: MediaWikiExtensionMessageGroup
+ id: ext-examplejsonextension
+ namespace: 8
+ label: Example JsonExtension
+ descriptionmsg: examplejsonextension-desc
+
+FILES:
+ class: JsonFFS
+ sourcePattern: "%GROUPROOT%/mediawiki-extensions/extensions/ExampleJsonExtension/i18n/%CODE%.json"
+
+VALIDATORS:
+ - id: BraceBalance
+ - id: MediaWikiLink
+ - id: MediaWikiPageName
+ - id: MediaWikiParameter
+ - id: MediaWikiPlural
+
+INSERTABLES:
+ - class: "MediaWiki\\Extension\\Translate\\TranslatorInterface\\Insertable\\MediaWikiInsertablesSuggester"
+
+TAGS:
+ optional:
+ - "*-extensionname"
+ - skinname-*
diff --git a/Translate/tests/phpunit/data/MediaWikiExtensionTest-conf4.yaml b/Translate/tests/phpunit/data/MediaWikiExtensionTest-conf4.yaml
new file mode 100644
index 00000000..ad0c6c38
--- /dev/null
+++ b/Translate/tests/phpunit/data/MediaWikiExtensionTest-conf4.yaml
@@ -0,0 +1,25 @@
+BASIC:
+ class: MediaWikiExtensionMessageGroup
+ id: ext-exampleextension2
+ namespace: 8
+ label: Example Extension 2
+ descriptionmsg: exampleextension2-desc
+
+FILES:
+ class: JsonFFS
+ sourcePattern: "%GROUPROOT%/mediawiki-extensions/extensions/foo"
+
+VALIDATORS:
+ - id: BraceBalance
+ - id: MediaWikiLink
+ - id: MediaWikiPageName
+ - id: MediaWikiParameter
+ - id: MediaWikiPlural
+
+INSERTABLES:
+ - class: "MediaWiki\\Extension\\Translate\\TranslatorInterface\\Insertable\\MediaWikiInsertablesSuggester"
+
+TAGS:
+ optional:
+ - "*-extensionname"
+ - skinname-*
diff --git a/Translate/tests/phpunit/data/MessageLoaderGroups.yaml b/Translate/tests/phpunit/data/MessageLoaderGroups.yaml
new file mode 100644
index 00000000..74cee9e1
--- /dev/null
+++ b/Translate/tests/phpunit/data/MessageLoaderGroups.yaml
@@ -0,0 +1,7 @@
+---
+# test for FileBasedMessageGroupLoader
+BASIC:
+ id: message-loader-group
+ label: Message Loader Group
+ class: FileBasedMessageGroup
+ namespace: 10
diff --git a/Translate/tests/phpunit/data/MixedSourceLanguageGroups.yaml b/Translate/tests/phpunit/data/MixedSourceLanguageGroups.yaml
new file mode 100644
index 00000000..16d6ff41
--- /dev/null
+++ b/Translate/tests/phpunit/data/MixedSourceLanguageGroups.yaml
@@ -0,0 +1,31 @@
+# This is for testing groups with different source languages
+
+BASIC:
+ id: EnglishGroup1
+ namespace: 8
+ label: English Group 1
+ class: FileBasedMessageGroup
+ sourcelanguage: en
+
+FILES:
+ class: SimpleFFS
+---
+BASIC:
+ id: EnglishGroup2
+ namespace: 8
+ label: English Group 2
+ class: FileBasedMessageGroup
+ sourcelanguage: en
+
+FILES:
+ class: SimpleFFS
+---
+BASIC:
+ id: TeluguGroup1
+ namespace: 8
+ label: Telugu Group 1
+ class: FileBasedMessageGroup
+ sourcelanguage: te
+
+FILES:
+ class: SimpleFFS
diff --git a/Translate/tests/phpunit/data/ParentGroups.yaml b/Translate/tests/phpunit/data/ParentGroups.yaml
new file mode 100644
index 00000000..f9bf36ad
--- /dev/null
+++ b/Translate/tests/phpunit/data/ParentGroups.yaml
@@ -0,0 +1,95 @@
+TEMPLATE:
+ BASIC:
+ label: TestGroup
+ meta: yes
+ class: AggregateMessageGroup
+ namespace: 8
+
+# Test case 1 starts
+---
+BASIC:
+ id: root1
+
+GROUPS:
+ - twoparents
+
+---
+BASIC:
+ id: root2
+
+GROUPS:
+ - twoparents
+
+---
+BASIC:
+ class: MockFileBasedMessageGroup
+ id: twoparents
+
+GROUPS:
+ -
+
+# Test case 2 starts
+---
+BASIC:
+ class: MockFileBasedMessageGroup
+ id: oneparent-twopaths
+
+GROUPS:
+ -
+
+---
+BASIC:
+ id: root3
+
+GROUPS:
+ - sub1
+ - sub2
+
+---
+BASIC:
+ id: sub1
+
+GROUPS:
+ - oneparent-twopaths
+
+---
+BASIC:
+ id: sub2
+
+GROUPS:
+ - oneparent-twopaths
+
+
+# Test case 3 starts
+---
+BASIC:
+ class: MockFileBasedMessageGroup
+ id: multilevelnested
+
+GROUPS:
+ -
+
+---
+BASIC:
+ id: root4
+
+GROUPS:
+ - multilevelnested
+ - nested1
+ - nested2
+
+---
+BASIC:
+ id: nested1
+
+GROUPS:
+ - multilevelnested
+ - nested2
+
+---
+BASIC:
+ id: nested2
+
+GROUPS:
+ - multilevelnested
+
diff --git a/Translate/tests/phpunit/data/ValidatorGroup.yaml b/Translate/tests/phpunit/data/ValidatorGroup.yaml
new file mode 100644
index 00000000..d0b1059d
--- /dev/null
+++ b/Translate/tests/phpunit/data/ValidatorGroup.yaml
@@ -0,0 +1,16 @@
+---
+BASIC:
+ id: test-validator-group
+ label: Test Validator Group
+ class: MockFileBasedMessageGroup
+ namespace: 1122
+
+VALIDATORS:
+ - id: InsertableRegex
+ enforce: true
+ insertable: true
+ params: /\$[0-9]+/
+
+INSERTABLES:
+ - class: RegexInsertablesSuggester
+ params: /\\[a-z0-9${}]+/
diff --git a/Translate/tests/phpunit/data/csv-to-import/invalid-code.csv b/Translate/tests/phpunit/data/csv-to-import/invalid-code.csv
new file mode 100644
index 00000000..7ad07832
--- /dev/null
+++ b/Translate/tests/phpunit/data/csv-to-import/invalid-code.csv
@@ -0,0 +1,5 @@
+"Translation message title","Message definition",fr,es,code
+"MediaWikit1/en","bunny","bunny - fr","bunny - es","bunny - code"
+"MediaWiki:t2/en","fanny","fanny - fr","fanny - es"
+"MediaWiki:t3/en","bunny","bunny - fr"
+"MediaWiki:t4/en","fanny"
diff --git a/Translate/tests/phpunit/data/csv-to-import/invalid-csv.csv b/Translate/tests/phpunit/data/csv-to-import/invalid-csv.csv
new file mode 100644
index 00000000..82978c30
--- /dev/null
+++ b/Translate/tests/phpunit/data/csv-to-import/invalid-csv.csv
@@ -0,0 +1,5 @@
+"Translation message title","Message definition"
+"MediaWiki:t1","bunny","bunny - fr","bunny - es"
+
+
+"MediaWiki:t5","fanny"
diff --git a/Translate/tests/phpunit/data/csv-to-import/invalid-unit.csv b/Translate/tests/phpunit/data/csv-to-import/invalid-unit.csv
new file mode 100644
index 00000000..b17bd885
--- /dev/null
+++ b/Translate/tests/phpunit/data/csv-to-import/invalid-unit.csv
@@ -0,0 +1,4 @@
+"Translation message title","Message definition",fr,es
+"MediaWiki:t1","bunny","bunny - fr","bunny - es"
+"", "hello"
+"MediaWiki:t5","fanny"
diff --git a/Translate/tests/phpunit/data/csv-to-import/valid.csv b/Translate/tests/phpunit/data/csv-to-import/valid.csv
new file mode 100644
index 00000000..de3f740f
--- /dev/null
+++ b/Translate/tests/phpunit/data/csv-to-import/valid.csv
@@ -0,0 +1,4 @@
+"Translation message title","Message definition",fr,ES
+"MediaWiki:t1","bunny","bunny - fr","bunny - es"
+"MediaWiki:t3","bunny","bunny - fr"
+"MediaWiki:t4","fanny"
diff --git a/Translate/tests/phpunit/data/jsontest_fi.json b/Translate/tests/phpunit/data/jsontest_fi.json
new file mode 100644
index 00000000..45d9efb6
--- /dev/null
+++ b/Translate/tests/phpunit/data/jsontest_fi.json
@@ -0,0 +1,7 @@
+{
+ "@metadata": {
+ "metakey": "metavalue"
+ },
+ "translatedmsg": "käännös",
+ "fuzzymsg": "väännös"
+}
diff --git a/Translate/tests/phpunit/data/mediawiki-extensions.txt b/Translate/tests/phpunit/data/mediawiki-extensions.txt
new file mode 100644
index 00000000..37554f24
--- /dev/null
+++ b/Translate/tests/phpunit/data/mediawiki-extensions.txt
@@ -0,0 +1,18 @@
+Wikimedia Messages
+desc = Plop
+ignored = sidebar, robots.txt
+optional = grouppage-recursive-export
+prefix = wmf- | sidebar, grouppage-Staff, group-Staff, group-Staff-member
+aliasfile = FooBar.alias.php
+magicfile = FooBar.magic.php
+
+Example JsonExtension
+
+Example Extension 2
+file = foo
+
+Languages Modified
+languages = +foo, -bar
+
+Languages Set
+languages = foo, bar
diff --git a/Translate/tests/phpunit/data/messageindexdata.ser b/Translate/tests/phpunit/data/messageindexdata.ser
new file mode 100644
index 00000000..9b6ec27b
--- /dev/null
+++ b/Translate/tests/phpunit/data/messageindexdata.ser
@@ -0,0 +1 @@
+a:49286:{s:19:"8:svyrernqbaylreebe";s:4:"pber";s:20:"8:hfreybtbhg-fhzznel";R:2;s:15:"8:rznvyqvfnoyrq";R:2;s:21:"8:punatrrznvy-fhzznel";R:2;s:10:"8:perngvat";R:2;s:20:"8:qrsnhygzrffntrgrkg";R:2;s:24:"8:punatrcnffjbeq-fhzznel";R:2;s:35:"8:hcybnq-pbcl-hcybnq-vainyvq-qbznva";R:2;s:22:"8:onpxraq-snvy-znkfvmr";R:2;s:28:"8:svyrwbheany-snvy-qopbaarpg";R:2;s:26:"8:svyrwbheany-snvy-qodhrel";R:2;s:24:"8:funerqhcybnq-qrfp-rqvg";R:2;s:26:"8:funerqhcybnq-qrfp-perngr";R:2;s:26:"8:hahfrqpngrtbevrf-fhzznel";R:2;s:22:"8:hahfrqvzntrf-fhzznel";R:2;s:25:"8:nyycntrf-uvqr-erqverpgf";R:2;s:30:"8:qryrgrqpbagevohgvbaf-fhzznel";R:2;s:20:"8:yvaxfrnepu-fhzznel";R:2;s:19:"8:rznvyhfre-fhzznel";R:2;s:19:"8:jngpuyvfg-fhzznel";R:2;s:18:"8:haqryrgr-fhzznel";R:2;s:23:"8:pbagevohgvbaf-fhzznel";R:2;s:33:"8:fc-pbagevohgvbaf-sbbgre-arjovrf";R:2;s:17:"8:haoybpx-fhzznel";R:2;s:18:"8:zbircntr-fhzznel";R:2;s:16:"8:rkcbeg-fhzznel";R:2;s:16:"8:vzcbeg-fhzznel";R:2;s:23:"8:rqvgjngpuyvfg-fhzznel";R:2;s:17:"8:irefvba-fhzznel";R:2;s:14:"8:gntf-fhzznel";R:2;s:22:"8:pbzcnercntrf-fhzznel";R:2;s:49:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt";s:12:"bhg-rby-fvgr";s:47:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt";R:3;s:37:"1202:serrpby.qrfxgbcragel.trarevpanzr";s:11:"bhg-serrpby";s:33:"1202:serrpby.qrfxgbcragel.pbzzrag";R:4;s:7:"1202:bx";R:4;s:11:"1202:pnapry";R:4;s:10:"1202:erfrg";R:4;s:9:"1202:fnir";R:4;s:12:"1202:qvfcynl";R:4;s:8:"1202:lrf";R:4;s:7:"1202:ab";R:4;s:10:"1202:pybfr";R:4;s:12:"1202:bcgvbaf";R:4;s:8:"1202:naq";R:4;s:9:"1202:ybnq";R:4;s:11:"1202:haybnq";R:4;s:9:"1202:svyy";R:4;s:11:"1202:eranzr";R:4;s:14:"1202:novyvgvrf";R:4;s:14:"1202:zbqvsvref";R:4;s:9:"1202:gehr";R:4;s:10:"1202:snyfr";R:4;s:9:"1202:zber";R:4;s:9:"1202:abar";R:4;s:12:"1202:abguvat";R:4;s:8:"1202:nyy";R:4;s:24:"1202:abgnccyvpnoyr.fubeg";R:4;s:10:"1202:ehyrf";R:4;s:15:"1202:qvssvphygl";R:4;s:9:"1202:grfg";R:4;s:10:"1202:zhfvp";R:4;s:12:"1202:pheerag";R:4;s:9:"1202:uryc";R:4;s:13:"1202:yvfg.nqq";R:4;s:16:"1202:yvfg.erzbir";R:4;s:12:"1202:yvfg.hc";R:4;s:14:"1202:yvfg.qbja";R:4;s:14:"1202:yvfg.rqvg";R:4;s:16:"1202:svyr.oebjfr";R:4;s:18:"1202:bcgvba.erzbir";R:4;s:10:"1202:jvqgu";R:4;s:11:"1202:urvtug";R:4;s:21:"1202:vagrtrenobirmreb";R:4;s:24:"1202:arjynathntrfryrpgrq";R:4;s:31:"1202:nhgbqrgrpgynathntrfryrpgrq";R:4;s:21:"1202:fvatyrcynlretnzr";R:4;s:24:"1202:wbvazhygvcynlretnzr";R:4;s:25:"1202:fgnegzhygvcynlretnzr";R:4;s:9:"1202:anzr";R:4;s:9:"1202:ubfg";R:4;s:9:"1202:cbeg";R:4;s:12:"1202:cynlref";R:4;s:17:"1202:cynlreangvba";R:4;s:14:"1202:tnzrfgngr";R:4;s:22:"1202:fgnegfreirebacbeg";R:4;s:17:"1202:choyvpfreire";R:4;s:22:"1202:qrsnhygcynlreanzr";R:4;s:18:"1202:trgfreireyvfg";R:4;s:12:"1202:pbaarpg";R:4;s:17:"1202:ninvynovyvgl";R:4;s:26:"1202:angvbafgngr.ninvynoyr";R:4;s:24:"1202:angvbafgngr.nv_bayl";R:4;s:30:"1202:angvbafgngr.abg_ninvynoyr";R:4;s:14:"1202:irelfznyy";R:4;s:10:"1202:fznyy";R:4;s:11:"1202:zrqvhz";R:4;s:10:"1202:ynetr";R:4;s:14:"1202:irelynetr";R:4;s:12:"1202:irelqel";R:4;s:8:"1202:qel";R:4;s:11:"1202:abezny";R:4;s:8:"1202:jrg";R:4;s:12:"1202:ireljrg";R:4;s:9:"1202:pbyq";R:4;s:11:"1202:puvyyl";R:4;s:14:"1202:grzcrengr";R:4;s:9:"1202:jnez";R:4;s:8:"1202:ubg";R:4;s:14:"1202:fgnegtnzr";R:4;s:16:"1202:tnzrbcgvbaf";R:4;s:24:"1202:znctrarengbebcgvbaf";R:4;s:13:"1202:vnzernql";R:4;s:32:"1202:cynlrebcgvbaf.fryrpgcynlref";R:4;s:34:"1202:cynlrebcgvbaf.rhebcrnacynlref";R:4;s:32:"1202:cynlrebcgvbaf.angvircynlref";R:4;s:23:"1202:cynlrebcgvbaf.abar";R:4;s:24:"1202:cynlrebcgvbaf.svkrq";R:4;s:29:"1202:cynlrebcgvbaf.fryrpgnoyr";R:4;s:31:"1202:cynlrebcgvbaf.fryrpgpbybef";R:4;s:37:"1202:cynlrebcgvbaf.angvbanynqinagntrf";R:4;s:11:"1202:cynlre";R:4;s:11:"1202:angvba";R:4;s:10:"1202:pbybe";R:4;s:14:"1202:nqinagntr";R:4;s:10:"1202:zbirf";R:4;s:18:"1202:fbafbsyvoregl";R:4;s:13:"1202:ohvyqvat";R:4;s:10:"1202:tbbqf";R:4;s:15:"1202:tbyqnzbhag";R:4;s:19:"1202:pnetbbapneevre";R:4;s:23:"1202:pnetbbapneevreybat";R:4;s:18:"1202:bhgfvqrpbybal";R:4;s:28:"1202:pbybalcnary.ohlohvyqvat";R:4;s:27:"1202:pbybalcnary.eroryynory";R:4;s:30:"1202:pbybalcnary.eblnyvfgynory";R:4;s:27:"1202:pbybalcnary.obahfynory";R:4;s:32:"1202:pbybalcnary.cbchyngvbaynory";R:4;s:34:"1202:pbybalcnary.zvavzhzpbybalfvmr";R:4;s:34:"1202:pbybalcnary.pheeragylohvyqvat";R:4;s:27:"1202:pbybalcnary.ohvyqdhrhr";R:4;s:29:"1202:pbybalcnary.pyvpxgbohvyq";R:4;s:28:"1202:pbybalcnary.pbzcnpgivrj";R:4;s:24:"1202:pbybalcnary.fubjnyy";R:4;s:28:"1202:pbybalcnary.haohvyqnoyr";R:4;s:28:"1202:pbybalcnary.abgorfggvyr";R:4;s:33:"1202:pbybalcnary.erqhprcbchyngvba";R:4;s:25:"1202:pbybalcnary.erdhverf";R:4;s:35:"1202:pbybalcnary.cbchyngvbagbbfznyy";R:4;s:22:"1202:pbybalcnary.havgf";R:4;s:26:"1202:pbybalcnary.ohvyqvatf";R:4;s:10:"1202:gheaf";R:4;s:26:"1202:gheafgbpbzcyrgr.fubeg";R:4;s:25:"1202:gheafgbpbzcyrgr.ybat";R:4;s:15:"1202:jnvgvatsbe";R:4;s:20:"1202:pubbfrvzzvtenag";R:4;s:17:"1202:nofgenpghavg";R:4;s:13:"1202:pbybavfg";R:4;s:14:"1202:pbybavfgf";R:4;s:11:"1202:gbevrf";R:4;s:12:"1202:pebffrf";R:4;s:12:"1202:zvffvba";R:4;s:11:"1202:fcevat";R:4;s:11:"1202:nhghza";R:4;s:14:"1202:lrne.lrne";R:4;s:16:"1202:lrne.fcevat";R:4;s:16:"1202:lrne.nhghza";R:4;s:43:"1202:jnebsvaqrcraqrapr.vaqrcraqraprqrpynerq";R:4;s:27:"1202:chepunfrqvnybt.pyvpxba";R:4;s:26:"1202:erpehvgqvnybt.pyvpxba";R:4;s:24:"1202:genvaqvnybt.pyvpxba";R:4;s:21:"1202:genvaqvnybt.qbar";R:4;s:31:"1202:dhvgqvnybt.nerlbhfher.grkg";R:4;s:33:"1202:ergverqvnybt.nerlbhfher.grkg";R:4;s:34:"1202:sbhaqvatsngureqvnybt.abzvangr";R:4;s:29:"1202:reebezrffntr.fubjybtsvyr";R:4;s:21:"1202:genqrvgrz.pbybal";R:4;s:26:"1202:genqrvgrz.pbybal.ybat";R:4;s:19:"1202:genqrvgrz.tbyq";R:4;s:24:"1202:genqrvgrz.tbyq.ybat";R:4;s:20:"1202:genqrvgrz.tbbqf";R:4;s:21:"1202:genqrvgrz.fgnapr";R:4;s:19:"1202:genqrvgrz.havg";R:4;s:28:"1202:artbgvngvbaqvnybt.bssre";R:4;s:29:"1202:artbgvngvbaqvnybt.qrznaq";R:4;s:31:"1202:artbgvngvbaqvnybt.rkpunatr";R:4;s:30:"1202:artbgvngvbaqvnybt.fhzznel";R:4;s:29:"1202:artbgvngvbaqvnybt.npprcg";R:4;s:29:"1202:artbgvngvbaqvnybt.pnapry";R:4;s:27:"1202:artbgvngvbaqvnybt.fraq";R:4;s:26:"1202:artbgvngvbaqvnybt.nqq";R:4;s:30:"1202:artbgvngvbaqvnybt.abguvat";R:4;s:36:"1202:artbgvngvbaqvnybt.bssrenpprcgrq";R:4;s:36:"1202:artbgvngvbaqvnybt.bssreerwrpgrq";R:4;s:25:"1202:genafnpgvba.chepunfr";R:4;s:22:"1202:genafnpgvba.cevpr";R:4;s:21:"1202:genafnpgvba.fnyr";R:4;s:20:"1202:genafnpgvba.gnk";R:4;s:20:"1202:genafnpgvba.arg";R:4;s:17:"1202:grafvba.jnel";R:4;s:18:"1202:grafvba.unccl";R:4;s:20:"1202:grafvba.pbagrag";R:4;s:23:"1202:grafvba.qvfcyrnfrq";R:4;s:18:"1202:grafvba.natel";R:4;s:20:"1202:grafvba.ungrshy";R:4;s:12:"1202:grafvba";R:4;s:15:"1202:abfhpusvyr";R:4;s:17:"1202:tbgbguvfgvyr";R:4;s:15:"1202:tbgbrhebcr";R:4;s:19:"1202:nggnpxgvyrbqqf";R:4;s:14:"1202:qhzcpnetb";R:4;s:9:"1202:gvyr";R:4;s:22:"1202:svygre.fnirqtnzrf";R:4;s:23:"1202:svygre.tnzrbcgvbaf";R:4;s:36:"1202:svygre.tnzrbcgvbafnaqfnirqtnzrf";R:4;s:15:"1202:svygre.kzy";R:4;s:16:"1202:haqreercnve";R:4;s:33:"1202:riragcnary.zrrgvat_rhebcrnaf";R:4;s:31:"1202:riragcnary.zrrgvat_angvirf";R:4;s:29:"1202:riragcnary.zrrgvat_nmgrp";R:4;s:28:"1202:riragcnary.zrrgvat_vapn";R:4;s:23:"1202:ghgbevny.fgnegtnzr";R:4;s:25:"1202:ghgbevny.ohvyqpbybal";R:4;s:11:"1202:pbybal";R:4;s:15:"1202:frggyrzrag";R:4;s:13:"1202:arjjbeyq";R:4;s:26:"1202:ybnqvatfnirtnzr.gvgyr";R:4;s:33:"1202:ybnqvatfnirtnzr.fvatyrcynlre";R:4;s:39:"1202:ybnqvatfnirtnzr.cevingrzhygvcynlre";R:4;s:38:"1202:ybnqvatfnirtnzr.choyvpzhygvcynlre";R:4;s:31:"1202:ybnqvatfnirtnzr.freireanzr";R:4;s:25:"1202:ybnqvatfnirtnzr.cbeg";R:4;s:20:"1202:rqvgbe.erfbhepr";R:4;s:28:"1202:rqvgbe.erzbirfrggyrzrag";R:4;s:33:"1202:rqvgbe.erzbirfrggyrzrag.grkg";R:4;s:19:"1202:rqvgbe.zncfvmr";R:4;s:29:"1202:ohvyqvatgbbygvc.oerrqvat";R:4;s:17:"1202:zrahone.tnzr";R:4;s:17:"1202:zrahone.ivrj";R:4;s:18:"1202:zrahone.gbbyf";R:4;s:19:"1202:zrahone.beqref";R:4;s:22:"1202:zrahone.pbybcrqvn";R:4;s:20:"1202:zrahone.grnpure";R:4;s:18:"1202:zrahone.qroht";R:4;s:34:"1202:zrahone.qroht.fubjpbbeqvangrf";R:4;s:34:"1202:zrahone.qroht.fubjpbybalinyhr";R:4;s:41:"1202:zrahone.qroht.fubjpbzzbabhgcbfginyhr";R:4;s:28:"1202:zrahone.qroht.fxvcgheaf";R:4;s:36:"1202:zrahone.qroht.fgbcfxvccvatgheaf";R:4;s:30:"1202:zrahone.qroht.nqqohvyqvat";R:4;s:36:"1202:zrahone.qroht.nqqsbhaqvatsngure";R:4;s:29:"1202:zrahone.qroht.ehazbanepu";R:4;s:26:"1202:zrahone.qroht.nqqtbyq";R:4;s:33:"1202:zrahone.qroht.nqqvzzvtengvba";R:4;s:29:"1202:zrahone.qroht.nqqyvoregl";R:4;s:44:"1202:zrahone.qroht.fgrcenaqbzahzoretrarengbe";R:4;s:30:"1202:zrahone.qroht.enaqbzinyhr";R:4;s:32:"1202:zrahone.qroht.qvfcynlcnaryf";R:4;s:38:"1202:zrahone.qroht.qvfcynlzbanepucnary";R:4;s:38:"1202:zrahone.qroht.qvfcynlivpgbelcnary";R:4;s:38:"1202:zrahone.qroht.qvfcynlrhebcrfgnghf";R:4;s:38:"1202:zrahone.qroht.qvfcynlreebezrffntr";R:4;s:24:"1202:zrahone.qroht.hfrnv";R:4;s:34:"1202:zrahone.qroht.erirnyragverznc";R:4;s:30:"1202:zrahone.qroht.pbzcnerzncf";R:4;s:44:"1202:zrahone.qroht.pbzcnerzncf.purpxpbzcyrgr";R:4;s:38:"1202:zrahone.qroht.pbzcnerzncf.ceboyrz";R:4;s:35:"1202:zrahone.qroht.fubjerfbheprxrlf";R:4;s:29:"1202:zrahone.qroht.fgngvfgvpf";R:4;s:32:"1202:zrahone.qroht.zrzbelznantre";R:4;s:43:"1202:zrahone.qroht.zrzbelznantre.serrzrzbel";R:4;s:44:"1202:zrahone.qroht.zrzbelznantre.gbgnyzrzbel";R:4;s:42:"1202:zrahone.qroht.zrzbelznantre.znkzrzbel";R:4;s:35:"1202:zrahone.qroht.zrzbelznantre.tp";R:4;s:19:"1202:zrahone.ercbeg";R:4;s:23:"1202:zrahone.fgnghfyvar";R:4;s:30:"1202:svaqfrggyrzragqvnybt.anzr";R:4;s:31:"1202:zrgnfreire.pbhyqabgpbaarpg";R:4;s:34:"1202:zrgnfreire.pbzzhavpngvbareebe";R:4;s:32:"1202:vasbcnary.raqgheacnary.grkg";R:4;s:23:"1202:raqgheaqvnybt.anzr";R:4;s:29:"1202:raqgheaqvnybt.nerlbhfher";R:4;s:59:"1202:zrahone.gbbyf.qrgrezvaruvtufrnf.qvfggbynaqsebzuvtufrnf";R:4;s:54:"1202:zrahone.gbbyf.qrgrezvaruvtufrnf.znkqvfgnaprgbrqtr";R:4;s:25:"1202:fgbcpheeragtnzr.grkg";R:4;s:24:"1202:fgbcpheeragtnzr.lrf";R:4;s:23:"1202:fgbcpheeragtnzr.ab";R:4;s:20:"1202:fgbcfreire.grkg";R:4;s:19:"1202:fgbcfreire.lrf";R:4;s:18:"1202:fgbcfreire.ab";R:4;s:35:"1202:pbaarpgpbagebyyre.pubvprcynlre";R:4;s:19:"1202:erpbaarpg.grkg";R:4;s:18:"1202:erpbaarpg.lrf";R:4;s:17:"1202:erpbaarpg.ab";R:4;s:17:"1202:snvyrqgbfnir";R:4;s:21:"1202:pbhyqabgfnirtnzr";R:4;s:21:"1202:pbhyqabgybnqtnzr";R:4;s:17:"1202:svyrabgsbhaq";R:4;s:25:"1202:vapbzcngvoyrirefvbaf";R:4;s:27:"1202:bcratnzr.havzcyrzragrq";R:4;s:16:"1202:qverpgvba.a";R:4;s:17:"1202:qverpgvba.ar";R:4;s:16:"1202:qverpgvba.r";R:4;s:17:"1202:qverpgvba.fr";R:4;s:16:"1202:qverpgvba.f";R:4;s:17:"1202:qverpgvba.fj";R:4;s:16:"1202:qverpgvba.j";R:4;s:17:"1202:qverpgvba.aj";R:4;s:18:"1202:freire.erwrpg";R:4;s:25:"1202:freire.genqr.abtbbqf";R:4;s:23:"1202:pyv.net.qrohtyriry";R:4;s:21:"1202:pyv.net.qrohteha";R:4;s:23:"1202:pyv.net.qvzrafvbaf";R:4;s:22:"1202:pyv.net.qverpgbel";R:4;s:17:"1202:pyv.net.svyr";R:4;s:17:"1202:pyv.net.sbag";R:4;s:19:"1202:pyv.net.ybpnyr";R:4;s:21:"1202:pyv.net.ybtyriry";R:4;s:17:"1202:pyv.net.anzr";R:4;s:17:"1202:pyv.net.cbeg";R:4;s:17:"1202:pyv.net.frrq";R:4;s:20:"1202:pyv.net.gvzrbhg";R:4;s:23:"1202:pyv.purpx-fnirtnzr";R:4;s:31:"1202:pyv.purpx-fnirtnzr.fhpprff";R:4;s:31:"1202:pyv.purpx-fnirtnzr.snvyher";R:4;s:14:"1202:pyv.qroht";R:4;s:18:"1202:pyv.qroht-eha";R:4;s:23:"1202:pyv.qrsnhyg-ybpnyr";R:4;s:19:"1202:pyv.reebe.cbeg";R:4;s:29:"1202:pyv.reebe.ubzr.abgrkvfgf";R:4;s:26:"1202:pyv.reebe.ubzr.abernq";R:4;s:27:"1202:pyv.reebe.ubzr.abjevgr";R:4;s:21:"1202:pyv.serrpby-qngn";R:4;s:13:"1202:pyv.sbag";R:4;s:13:"1202:pyv.uryc";R:4;s:23:"1202:pyv.ubzr-qverpgbel";R:4;s:22:"1202:pyv.ybnq-fnirtnzr";R:4;s:20:"1202:pyv.ybt-pbafbyr";R:4;s:17:"1202:pyv.ybt-svyr";R:4;s:18:"1202:pyv.ybt-yriry";R:4;s:22:"1202:pyv.ab-wnin-purpx";R:4;s:24:"1202:pyv.ab-zrzbel-purpx";R:4;s:17:"1202:pyv.ab-vageb";R:4;s:17:"1202:pyv.ab-fbhaq";R:4;s:16:"1202:pyv.cevingr";R:4;s:13:"1202:pyv.frrq";R:4;s:20:"1202:pyv.freire-anzr";R:4;s:15:"1202:pyv.freire";R:4;s:15:"1202:pyv.fcynfu";R:4;s:11:"1202:pyv.gp";R:4;s:16:"1202:pyv.gvzrbhg";R:4;s:16:"1202:pyv.irefvba";R:4;s:17:"1202:pyv.jvaqbjrq";R:4;s:21:"1202:tnzrbcgvbaf.anzr";R:4;s:33:"1202:tnzrbcgvbaf.fubegqrfpevcgvba";R:4;s:25:"1202:tnzrbcgvbaf.znc.anzr";R:4;s:37:"1202:tnzrbcgvbaf.znc.fubegqrfpevcgvba";R:4;s:31:"1202:zbqry.bcgvba.sbtbsjne.anzr";R:4;s:43:"1202:zbqry.bcgvba.sbtbsjne.fubegqrfpevcgvba";R:4;s:40:"1202:zbqry.bcgvba.rkcybengvbacbvagf.anzr";R:4;s:52:"1202:zbqry.bcgvba.rkcybengvbacbvagf.fubegqrfpevcgvba";R:4;s:34:"1202:zbqry.bcgvba.gheafgbfnvy.anzr";R:4;s:46:"1202:zbqry.bcgvba.gheafgbfnvy.fubegqrfpevcgvba";R:4;s:38:"1202:zbqry.bcgvba.nzcuvovbhfzbirf.anzr";R:4;s:50:"1202:zbqry.bcgvba.nzcuvovbhfzbirf.fubegqrfpevcgvba";R:4;s:52:"1202:zbqry.bcgvba.frggyrzragnpgvbafpbagnpgpuvrs.anzr";R:4;s:64:"1202:zbqry.bcgvba.frggyrzragnpgvbafpbagnpgpuvrs.fubegqrfpevcgvba";R:4;s:43:"1202:zbqry.bcgvba.raunaprqzvffvbanevrf.anzr";R:4;s:55:"1202:zbqry.bcgvba.raunaprqzvffvbanevrf.fubegqrfpevcgvba";R:4;s:56:"1202:zbqry.bcgvba.pbagvahrsbhaqvatsngureerpehvgzrag.anzr";R:4;s:68:"1202:zbqry.bcgvba.pbagvahrsbhaqvatsngureerpehvgzrag.fubegqrfpevcgvba";R:4;s:46:"1202:zbqry.bcgvba.frggyrzragyvzvgzbqvsvre.anzr";R:4;s:58:"1202:zbqry.bcgvba.frggyrzragyvzvgzbqvsvre.fubegqrfpevcgvba";R:4;s:40:"1202:zbqry.bcgvba.fgnegvatcbfvgvbaf.anzr";R:4;s:52:"1202:zbqry.bcgvba.fgnegvatcbfvgvbaf.fubegqrfpevcgvba";R:4;s:43:"1202:zbqry.bcgvba.fgnegvatcbfvgvbaf.pynffvp";R:4;s:42:"1202:zbqry.bcgvba.fgnegvatcbfvgvbaf.enaqbz";R:4;s:46:"1202:zbqry.bcgvba.fgnegvatcbfvgvbaf.uvfgbevpny";R:4;s:28:"1202:tnzrbcgvbaf.pbybal.anzr";R:4;s:40:"1202:tnzrbcgvbaf.pbybal.fubegqrfpevcgvba";R:4;s:42:"1202:zbqry.bcgvba.phfgbzvtaberoblpbgg.anzr";R:4;s:54:"1202:zbqry.bcgvba.phfgbzvtaberoblpbgg.fubegqrfpevcgvba";R:4;s:45:"1202:zbqry.bcgvba.rkcregfunirpbaarpgvbaf.anzr";R:4;s:57:"1202:zbqry.bcgvba.rkcregfunirpbaarpgvbaf.fubegqrfpevcgvba";R:4;s:45:"1202:zbqry.bcgvba.fnircebqhpgvbabiresybj.anzr";R:4;s:57:"1202:zbqry.bcgvba.fnircebqhpgvbabiresybj.fubegqrfpevcgvba";R:4;s:44:"1202:zbqry.bcgvba.nyybjfghqragfryrpgvba.anzr";R:4;s:56:"1202:zbqry.bcgvba.nyybjfghqragfryrpgvba.fubegqrfpevcgvba";R:4;s:39:"1202:tnzrbcgvbaf.ivpgbelpbaqvgvbaf.anzr";R:4;s:51:"1202:tnzrbcgvbaf.ivpgbelpbaqvgvbaf.fubegqrfpevcgvba";R:4;s:39:"1202:zbqry.bcgvba.ivpgbelqrsrngers.anzr";R:4;s:51:"1202:zbqry.bcgvba.ivpgbelqrsrngers.fubegqrfpevcgvba";R:4;s:45:"1202:zbqry.bcgvba.ivpgbelqrsrngrhebcrnaf.anzr";R:4;s:57:"1202:zbqry.bcgvba.ivpgbelqrsrngrhebcrnaf.fubegqrfpevcgvba";R:4;s:42:"1202:zbqry.bcgvba.ivpgbelqrsrnguhznaf.anzr";R:4;s:54:"1202:zbqry.bcgvba.ivpgbelqrsrnguhznaf.fubegqrfpevcgvba";R:4;s:27:"1202:tnzrbcgvbaf.lrnef.anzr";R:4;s:39:"1202:tnzrbcgvbaf.lrnef.fubegqrfpevcgvba";R:4;s:35:"1202:zbqry.bcgvba.fgnegvatlrne.anzr";R:4;s:47:"1202:zbqry.bcgvba.fgnegvatlrne.fubegqrfpevcgvba";R:4;s:33:"1202:zbqry.bcgvba.frnfbalrne.anzr";R:4;s:45:"1202:zbqry.bcgvba.frnfbalrne.fubegqrfpevcgvba";R:4;s:31:"1202:zbqry.bcgvba.ynfglrne.anzr";R:4;s:42:"1202:zbqry.bcgvba.znaqngbelpbyballrne.anzr";R:4;s:54:"1202:zbqry.bcgvba.znaqngbelpbyballrne.fubegqrfpevcgvba";R:4;s:43:"1202:zbqry.bcgvba.ynfglrne.fubegqrfpevcgvba";R:4;s:39:"1202:zbqry.bcgvba.ynfgpbybavnylrne.anzr";R:4;s:51:"1202:zbqry.bcgvba.ynfgpbybavnylrne.fubegqrfpevcgvba";R:4;s:36:"1202:zbqry.bcgvba.fgnegvatzbarl.anzr";R:4;s:48:"1202:zbqry.bcgvba.fgnegvatzbarl.fubegqrfpevcgvba";R:4;s:39:"1202:zbqry.bcgvba.pebffrfvaperzrag.anzr";R:4;s:51:"1202:zbqry.bcgvba.pebffrfvaperzrag.fubegqrfpevcgvba";R:4;s:41:"1202:zbqry.bcgvba.onqtbireazragyvzvg.anzr";R:4;s:53:"1202:zbqry.bcgvba.onqtbireazragyvzvg.fubegqrfpevcgvba";R:4;s:45:"1202:zbqry.bcgvba.irelonqtbireazragyvzvg.anzr";R:4;s:57:"1202:zbqry.bcgvba.irelonqtbireazragyvzvg.fubegqrfpevcgvba";R:4;s:38:"1202:zbqry.bcgvba.ynaqcevprsnpgbe.anzr";R:4;s:50:"1202:zbqry.bcgvba.ynaqcevprsnpgbe.fubegqrfpevcgvba";R:4;s:43:"1202:zbqry.bcgvba.sbhaqvatsnguresnpgbe.anzr";R:4;s:55:"1202:zbqry.bcgvba.sbhaqvatsnguresnpgbe.fubegqrfpevcgvba";R:4;s:36:"1202:zbqry.bcgvba.neernefsnpgbe.anzr";R:4;s:48:"1202:zbqry.bcgvba.neernefsnpgbe.fubegqrfpevcgvba";R:4;s:47:"1202:zbqry.bcgvba.angvirpbairegcebonovyvgl.anzr";R:4;s:59:"1202:zbqry.bcgvba.angvirpbairegcebonovyvgl.fubegqrfpevcgvba";R:4;s:38:"1202:zbqry.bcgvba.oheacebonovyvgl.anzr";R:4;s:50:"1202:zbqry.bcgvba.oheacebonovyvgl.fubegqrfpevcgvba";R:4;s:43:"1202:zbqry.bcgvba.erpehvgcevprvapernfr.anzr";R:4;s:55:"1202:zbqry.bcgvba.erpehvgcevprvapernfr.fubegqrfpevcgvba";R:4;s:39:"1202:zbqry.bcgvba.ybjrepncvapernfr.anzr";R:4;s:51:"1202:zbqry.bcgvba.ybjrepncvapernfr.fubegqrfpevcgvba";R:4;s:43:"1202:zbqry.bcgvba.cevprvapernfrcreglcr.anzr";R:4;s:55:"1202:zbqry.bcgvba.cevprvapernfrcreglcr.fubegqrfpevcgvba";R:4;s:46:"1202:zbqry.bcgvba.cevprvapernfr.negvyyrel.anzr";R:4;s:58:"1202:zbqry.bcgvba.cevprvapernfr.negvyyrel.fubegqrfpevcgvba";R:4;s:34:"1202:zbqry.bcgvba.ersfgeratgu.anzr";R:4;s:46:"1202:zbqry.bcgvba.ersfgeratgu.fubegqrfpevcgvba";R:4;s:38:"1202:zbqry.bcgvba.zbanepuzrqqyvat.anzr";R:4;s:50:"1202:zbqry.bcgvba.zbanepuzrqqyvat.fubegqrfpevcgvba";R:4;s:36:"1202:zbqry.bcgvba.gnknqwhfgzrag.anzr";R:4;s:48:"1202:zbqry.bcgvba.gnknqwhfgzrag.fubegqrfpevcgvba";R:4;s:37:"1202:zbqry.bcgvba.zrepranelcevpr.anzr";R:4;s:49:"1202:zbqry.bcgvba.zrepranelcevpr.fubegqrfpevcgvba";R:4;s:33:"1202:zbqry.bcgvba.znkvzhzgnk.anzr";R:4;s:45:"1202:zbqry.bcgvba.znkvzhzgnk.fubegqrfpevcgvba";R:4;s:36:"1202:zbqry.bcgvba.angvirqrznaqf.anzr";R:4;s:48:"1202:zbqry.bcgvba.angvirqrznaqf.fubegqrfpevcgvba";R:4;s:40:"1202:zbqry.bcgvba.erpehvgnoyr.fybg0.anzr";R:4;s:52:"1202:zbqry.bcgvba.erpehvgnoyr.fybg0.fubegqrfpevcgvba";R:4;s:40:"1202:zbqry.bcgvba.erpehvgnoyr.fybg1.anzr";R:4;s:52:"1202:zbqry.bcgvba.erpehvgnoyr.fybg1.fubegqrfpevcgvba";R:4;s:40:"1202:zbqry.bcgvba.erpehvgnoyr.fybg2.anzr";R:4;s:52:"1202:zbqry.bcgvba.erpehvgnoyr.fybg2.fubegqrfpevcgvba";R:4;s:37:"1202:zbqry.bcgvba.gvyrcebqhpgvba.anzr";R:4;s:49:"1202:zbqry.bcgvba.gvyrcebqhpgvba.fubegqrfpevcgvba";R:4;s:40:"1202:zbqry.bcgvba.ohvyqbaangvirynaq.anzr";R:4;s:52:"1202:zbqry.bcgvba.ohvyqbaangvirynaq.fubegqrfpevcgvba";R:4;s:47:"1202:zbqry.bcgvba.ohvyqbaangvirynaq.nyjnlf.anzr";R:4;s:59:"1202:zbqry.bcgvba.ohvyqbaangvirynaq.nyjnlf.fubegqrfpevcgvba";R:4;s:46:"1202:zbqry.bcgvba.ohvyqbaangvirynaq.svefg.anzr";R:4;s:58:"1202:zbqry.bcgvba.ohvyqbaangvirynaq.svefg.fubegqrfpevcgvba";R:4;s:60:"1202:zbqry.bcgvba.ohvyqbaangvirynaq.svefgnaqhapbagnpgrq.anzr";R:4;s:72:"1202:zbqry.bcgvba.ohvyqbaangvirynaq.svefgnaqhapbagnpgrq.fubegqrfpevcgvba";R:4;s:46:"1202:zbqry.bcgvba.ohvyqbaangvirynaq.arire.anzr";R:4;s:58:"1202:zbqry.bcgvba.ohvyqbaangvirynaq.arire.fubegqrfpevcgvba";R:4;s:42:"1202:zbqry.bcgvba.rkcregfgnegvathavgf.anzr";R:4;s:54:"1202:zbqry.bcgvba.rkcregfgnegvathavgf.fubegqrfpevcgvba";R:4;s:42:"1202:zbqry.bcgvba.havgfgunghfraboryyf.anzr";R:4;s:54:"1202:zbqry.bcgvba.havgfgunghfraboryyf.fubegqrfpevcgvba";R:4;s:37:"1202:zbqry.bcgvba.zbanepufhccbeg.anzr";R:4;s:49:"1202:zbqry.bcgvba.zbanepufhccbeg.fubegqrfpevcgvba";R:4;s:39:"1202:zbqry.bcgvba.ehzbheqvssvphygl.anzr";R:4;s:51:"1202:zbqry.bcgvba.ehzbheqvssvphygl.fubegqrfpevcgvba";R:4;s:43:"1202:zbqry.bcgvba.gernfhergenafcbegsrr.anzr";R:4;s:55:"1202:zbqry.bcgvba.gernfhergenafcbegsrr.fubegqrfpevcgvba";R:4;s:34:"1202:zbqry.bcgvba.gryrcbegers.anzr";R:4;s:46:"1202:zbqry.bcgvba.gryrcbegers.fubegqrfpevcgvba";R:4;s:39:"1202:zbqry.bcgvba.fuvcgenqrcranygl.anzr";R:4;s:51:"1202:zbqry.bcgvba.fuvcgenqrcranygl.fubegqrfpevcgvba";R:4;s:30:"1202:zbqry.bcgvba.ersfvmr.anzr";R:4;s:42:"1202:zbqry.bcgvba.ersfvmr.fubegqrfpevcgvba";R:4;s:39:"1202:zbqry.bcgvba.ersfvmr.fbyqvref.anzr";R:4;s:51:"1202:zbqry.bcgvba.ersfvmr.fbyqvref.fubegqrfpevcgvba";R:4;s:39:"1202:zbqry.bcgvba.ersfvmr.qentbbaf.anzr";R:4;s:51:"1202:zbqry.bcgvba.ersfvmr.qentbbaf.fubegqrfpevcgvba";R:4;s:39:"1202:zbqry.bcgvba.ersfvmr.zrabsjne.anzr";R:4;s:51:"1202:zbqry.bcgvba.ersfvmr.zrabsjne.fubegqrfpevcgvba";R:4;s:40:"1202:zbqry.bcgvba.ersfvmr.negvyyrel.anzr";R:4;s:52:"1202:zbqry.bcgvba.ersfvmr.negvyyrel.fubegqrfpevcgvba";R:4;s:33:"1202:zbqry.bcgvba.vzzvtenagf.anzr";R:4;s:45:"1202:zbqry.bcgvba.vzzvtenagf.fubegqrfpevcgvba";R:4;s:17:"1202:irelybj.anzr";R:4;s:13:"1202:ybj.anzr";R:4;s:16:"1202:zrqvhz.anzr";R:4;s:14:"1202:uvtu.anzr";R:4;s:18:"1202:ireluvtu.anzr";R:4;s:30:"1202:zbqry.qvssvphygl.irelrnfl";R:4;s:26:"1202:zbqry.qvssvphygl.rnfl";R:4;s:28:"1202:zbqry.qvssvphygl.zrqvhz";R:4;s:26:"1202:zbqry.qvssvphygl.uneq";R:4;s:30:"1202:zbqry.qvssvphygl.ireluneq";R:4;s:28:"1202:zbqry.qvssvphygl.phfgbz";R:4;s:23:"1202:pyvragbcgvbaf.anzr";R:4;s:35:"1202:pyvragbcgvbaf.fubegqrfpevcgvba";R:4;s:33:"1202:zbqry.bcgvba.nhgbfpebyy.anzr";R:4;s:45:"1202:zbqry.bcgvba.nhgbfpebyy.fubegqrfpevcgvba";R:4;s:23:"1202:npgvbaznantre.anzr";R:4;s:35:"1202:npgvbaznantre.fubegqrfpevcgvba";R:4;s:28:"1202:pyvragbcgvbaf.zbqf.anzr";R:4;s:40:"1202:pyvragbcgvbaf.zbqf.fubegqrfpevcgvba";R:4;s:18:"1202:hfrezbqf.anzr";R:4;s:30:"1202:hfrezbqf.fubegqrfpevcgvba";R:4;s:27:"1202:pyvragbcgvbaf.thv.anzr";R:4;s:39:"1202:pyvragbcgvbaf.thv.fubegqrfpevcgvba";R:4;s:37:"1202:zbqry.bcgvba.ynathntrbcgvba.anzr";R:4;s:49:"1202:zbqry.bcgvba.ynathntrbcgvba.fubegqrfpevcgvba";R:4;s:56:"1202:pyvragbcgvbaf.thv.ynathntrbcgvba.nhgbqrgrpgynathntr";R:4;s:49:"1202:zbqry.bcgvba.thvzvaahzoregbqvfcynltbbqf.anzr";R:4;s:61:"1202:zbqry.bcgvba.thvzvaahzoregbqvfcynltbbqf.fubegqrfpevcgvba";R:4;s:54:"1202:zbqry.bcgvba.thvzvaahzoregbqvfcynltbbqfpbhag.anzr";R:4;s:66:"1202:zbqry.bcgvba.thvzvaahzoregbqvfcynltbbqfpbhag.fubegqrfpevcgvba";R:4;s:38:"1202:zbqry.bcgvba.zncfpebyybaqent.anzr";R:4;s:50:"1202:zbqry.bcgvba.zncfpebyybaqent.fubegqrfpevcgvba";R:4;s:41:"1202:zbqry.bcgvba.qvfcynlpbzcnffebfr.anzr";R:4;s:53:"1202:zbqry.bcgvba.qvfcynlpbzcnffebfr.fubegqrfpevcgvba";R:4;s:41:"1202:zbqry.bcgvba.qvfcynlzncpbagebyf.anzr";R:4;s:53:"1202:zbqry.bcgvba.qvfcynlzncpbagebyf.fubegqrfpevcgvba";R:4;s:34:"1202:zbqry.bcgvba.zncpbagebyf.anzr";R:4;s:46:"1202:zbqry.bcgvba.zncpbagebyf.fubegqrfpevcgvba";R:4;s:27:"1202:pbearezncpbagebyf.anzr";R:4;s:39:"1202:pbearezncpbagebyf.fubegqrfpevcgvba";R:4;s:28:"1202:pynffvpzncpbagebyf.anzr";R:4;s:40:"1202:pynffvpzncpbagebyf.fubegqrfpevcgvba";R:4;s:38:"1202:zbqry.bcgvba.qvfcynlgvyrgrkg.anzr";R:4;s:50:"1202:zbqry.bcgvba.qvfcynlgvyrgrkg.fubegqrfpevcgvba";R:4;s:44:"1202:pyvragbcgvbaf.thv.qvfcynlgvyrgrkg.rzcgl";R:4;s:44:"1202:pyvragbcgvbaf.thv.qvfcynlgvyrgrkg.anzrf";R:4;s:45:"1202:pyvragbcgvbaf.thv.qvfcynlgvyrgrkg.bjaref";R:4;s:46:"1202:pyvragbcgvbaf.thv.qvfcynlgvyrgrkg.ertvbaf";R:4;s:42:"1202:zbqry.bcgvba.qvfcynlpbybalynoryf.anzr";R:4;s:54:"1202:zbqry.bcgvba.qvfcynlpbybalynoryf.fubegqrfpevcgvba";R:4;s:47:"1202:pyvragbcgvbaf.thv.qvfcynlpbybalynoryf.abar";R:4;s:50:"1202:pyvragbcgvbaf.thv.qvfcynlpbybalynoryf.pynffvp";R:4;s:49:"1202:pyvragbcgvbaf.thv.qvfcynlpbybalynoryf.zbqrea";R:4;s:37:"1202:zbqry.bcgvba.qvfcynlobeqref.anzr";R:4;s:49:"1202:zbqry.bcgvba.qvfcynlobeqref.fubegqrfpevcgvba";R:4;s:34:"1202:zbqry.bcgvba.qvfcynltevq.anzr";R:4;s:46:"1202:zbqry.bcgvba.qvfcynltevq.fubegqrfpevcgvba";R:4;s:40:"1202:zbqry.bcgvba.havgynfgzbirqrynl.anzr";R:4;s:52:"1202:zbqry.bcgvba.havgynfgzbirqrynl.fubegqrfpevcgvba";R:4;s:33:"1202:zbqry.bcgvba.hfrcvkzncf.anzr";R:4;s:45:"1202:zbqry.bcgvba.hfrcvkzncf.fubegqrfpevcgvba";R:4;s:45:"1202:zbqry.bcgvba.erzrzorecnarycbfvgvbaf.anzr";R:4;s:57:"1202:zbqry.bcgvba.erzrzorecnarycbfvgvbaf.fubegqrfpevcgvba";R:4;s:41:"1202:zbqry.bcgvba.zbirnavzngvbafcrrq.anzr";R:4;s:53:"1202:zbqry.bcgvba.zbirnavzngvbafcrrq.fubegqrfpevcgvba";R:4;s:45:"1202:pyvragbcgvbaf.thv.zbirnavzngvbafcrrq.bss";R:4;s:46:"1202:pyvragbcgvbaf.thv.zbirnavzngvbafcrrq.fybj";R:4;s:48:"1202:pyvragbcgvbaf.thv.zbirnavzngvbafcrrq.abezny";R:4;s:46:"1202:pyvragbcgvbaf.thv.zbirnavzngvbafcrrq.snfg";R:4;s:46:"1202:zbqry.bcgvba.rarzlzbirnavzngvbafcrrq.anzr";R:4;s:58:"1202:zbqry.bcgvba.rarzlzbirnavzngvbafcrrq.fubegqrfpevcgvba";R:4;s:50:"1202:pyvragbcgvbaf.thv.rarzlzbirnavzngvbafcrrq.bss";R:4;s:51:"1202:pyvragbcgvbaf.thv.rarzlzbirnavzngvbafcrrq.fybj";R:4;s:53:"1202:pyvragbcgvbaf.thv.rarzlzbirnavzngvbafcrrq.abezny";R:4;s:51:"1202:pyvragbcgvbaf.thv.rarzlzbirnavzngvbafcrrq.snfg";R:4;s:38:"1202:zbqry.bcgvba.fzbbgueraqrevat.anzr";R:4;s:50:"1202:zbqry.bcgvba.fzbbgueraqrevat.fubegqrfpevcgvba";R:4;s:39:"1202:zbqry.bcgvba.qrsnhygmbbzyriry.anzr";R:4;s:51:"1202:zbqry.bcgvba.qrsnhygmbbzyriry.fubegqrfpevcgvba";R:4;s:39:"1202:zbqry.bcgvba.pbybe.onpxtebhaq.anzr";R:4;s:51:"1202:zbqry.bcgvba.pbybe.onpxtebhaq.fubegqrfpevcgvba";R:4;s:49:"1202:pyvragbcgvbaf.zvavznc.pbybe.onpxtebhaq.oynpx";R:4;s:58:"1202:pyvragbcgvbaf.zvavznc.pbybe.onpxtebhaq.tenl.qnex.irel";R:4;s:53:"1202:pyvragbcgvbaf.zvavznc.pbybe.onpxtebhaq.tenl.qnex";R:4;s:48:"1202:pyvragbcgvbaf.zvavznc.pbybe.onpxtebhaq.tenl";R:4;s:54:"1202:pyvragbcgvbaf.zvavznc.pbybe.onpxtebhaq.tenl.yvtug";R:4;s:59:"1202:pyvragbcgvbaf.zvavznc.pbybe.onpxtebhaq.tenl.yvtug.irel";R:4;s:54:"1202:pyvragbcgvbaf.zvavznc.pbybe.onpxtebhaq.oyhr.yvtug";R:4;s:32:"1202:pyvragbcgvbaf.zrffntrf.anzr";R:4;s:44:"1202:pyvragbcgvbaf.zrffntrf.fubegqrfpevcgvba";R:4;s:39:"1202:zbqry.bcgvba.whzcgbnpgvirhavg.anzr";R:4;s:51:"1202:zbqry.bcgvba.whzcgbnpgvirhavg.fubegqrfpevcgvba";R:4;s:35:"1202:zbqry.bcgvba.nyjnlfpragre.anzr";R:4;s:47:"1202:zbqry.bcgvba.nyjnlfpragre.fubegqrfpevcgvba";R:4;s:48:"1202:zbqry.bcgvba.thvznkahzorebstbbqfvzntrf.anzr";R:4;s:60:"1202:zbqry.bcgvba.thvznkahzorebstbbqfvzntrf.fubegqrfpevcgvba";R:4;s:37:"1202:zbqry.bcgvba.thvfubjjneavat.anzr";R:4;s:49:"1202:zbqry.bcgvba.thvfubjjneavat.fubegqrfpevcgvba";R:4;s:43:"1202:zbqry.bcgvba.thvfubjfbafbsyvoregl.anzr";R:4;s:55:"1202:zbqry.bcgvba.thvfubjfbafbsyvoregl.fubegqrfpevcgvba";R:4;s:50:"1202:zbqry.bcgvba.thvfubjtbireazragrssvpvrapl.anzr";R:4;s:62:"1202:zbqry.bcgvba.thvfubjtbireazragrssvpvrapl.fubegqrfpevcgvba";R:4;s:47:"1202:zbqry.bcgvba.thvfubjjnerubhfrpncnpvgl.anzr";R:4;s:59:"1202:zbqry.bcgvba.thvfubjjnerubhfrpncnpvgl.fubegqrfpevcgvba";R:4;s:42:"1202:zbqry.bcgvba.thvfubjhavgvzcebirq.anzr";R:4;s:54:"1202:zbqry.bcgvba.thvfubjhavgvzcebirq.fubegqrfpevcgvba";R:4;s:41:"1202:zbqry.bcgvba.thvfubjhavgqrzbgrq.anzr";R:4;s:53:"1202:zbqry.bcgvba.thvfubjhavgqrzbgrq.fubegqrfpevcgvba";R:4;s:47:"1202:zbqry.bcgvba.thvfubjohvyqvatpbzcyrgrq.anzr";R:4;s:59:"1202:zbqry.bcgvba.thvfubjohvyqvatpbzcyrgrq.fubegqrfpevcgvba";R:4;s:39:"1202:zbqry.bcgvba.thvfubjhavgnqqrq.anzr";R:4;s:51:"1202:zbqry.bcgvba.thvfubjhavgnqqrq.fubegqrfpevcgvba";R:4;s:38:"1202:zbqry.bcgvba.thvfubjhavgybfg.anzr";R:4;s:50:"1202:zbqry.bcgvba.thvfubjhavgybfg.fubegqrfpevcgvba";R:4;s:46:"1202:zbqry.bcgvba.thvfubjsbervtaqvcybznpl.anzr";R:4;s:58:"1202:zbqry.bcgvba.thvfubjsbervtaqvcybznpl.fubegqrfpevcgvba";R:4;s:42:"1202:zbqry.bcgvba.thvfubjznexrgcevprf.anzr";R:4;s:54:"1202:zbqry.bcgvba.thvfubjznexrgcevprf.fubegqrfpevcgvba";R:4;s:42:"1202:zbqry.bcgvba.thvfubjzvffvattbbqf.anzr";R:4;s:54:"1202:zbqry.bcgvba.thvfubjzvffvattbbqf.fubegqrfpevcgvba";R:4;s:35:"1202:zbqry.bcgvba.thvfubjtvsgf.anzr";R:4;s:47:"1202:zbqry.bcgvba.thvfubjtvsgf.fubegqrfpevcgvba";R:4;s:37:"1202:zbqry.bcgvba.thvfubjqrznaqf.anzr";R:4;s:49:"1202:zbqry.bcgvba.thvfubjqrznaqf.fubegqrfpevcgvba";R:4;s:43:"1202:zbqry.bcgvba.thvfubjtbbqfzbirzrag.anzr";R:4;s:55:"1202:zbqry.bcgvba.thvfubjtbbqfzbirzrag.fubegqrfpevcgvba";R:4;s:39:"1202:zbqry.bcgvba.thvfubjcerpbzong.anzr";R:4;s:51:"1202:zbqry.bcgvba.thvfubjcerpbzong.fubegqrfpevcgvba";R:4;s:41:"1202:zbqry.bcgvba.thvfubjabgorfggvyr.anzr";R:4;s:53:"1202:zbqry.bcgvba.thvfubjabgorfggvyr.fubegqrfpevcgvba";R:4;s:44:"1202:zbqry.bcgvba.thvfubjpbybaljneavatf.anzr";R:4;s:56:"1202:zbqry.bcgvba.thvfubjpbybaljneavatf.fubegqrfpevcgvba";R:4;s:41:"1202:zbqry.bcgvba.thvzrffntrftebhcol.anzr";R:4;s:53:"1202:zbqry.bcgvba.thvzrffntrftebhcol.fubegqrfpevcgvba";R:4;s:54:"1202:pyvragbcgvbaf.zrffntrf.thvzrffntrftebhcol.abguvat";R:4;s:51:"1202:pyvragbcgvbaf.zrffntrf.thvzrffntrftebhcol.glcr";R:4;s:53:"1202:pyvragbcgvbaf.zrffntrf.thvzrffntrftebhcol.fbhepr";R:4;s:39:"1202:zbqry.bcgvba.pbybalpbzcnengbe.anzr";R:4;s:51:"1202:zbqry.bcgvba.pbybalpbzcnengbe.fubegqrfpevcgvba";R:4;s:46:"1202:pyvragbcgvbaf.thv.pbybalpbzcnengbe.olanzr";R:4;s:45:"1202:pyvragbcgvbaf.thv.pbybalpbzcnengbe.olntr";R:4;s:50:"1202:pyvragbcgvbaf.thv.pbybalpbzcnengbe.olcbfvgvba";R:4;s:46:"1202:pyvragbcgvbaf.thv.pbybalpbzcnengbe.olfvmr";R:4;s:45:"1202:pyvragbcgvbaf.thv.pbybalpbzcnengbe.olfby";R:4;s:29:"1202:pyvragbcgvbaf.nhqvb.anzr";R:4;s:41:"1202:pyvragbcgvbaf.nhqvb.fubegqrfpevcgvba";R:4;s:45:"1202:pyvragbcgvbaf.nhqvb.nhqvbzvkre.nhgbzngvp";R:4;s:33:"1202:zbqry.bcgvba.nhqvbzvkre.anzr";R:4;s:45:"1202:zbqry.bcgvba.nhqvbzvkre.fubegqrfpevcgvba";R:4;s:34:"1202:zbqry.bcgvba.nhqvbibyhzr.anzr";R:4;s:46:"1202:zbqry.bcgvba.nhqvbibyhzr.fubegqrfpevcgvba";R:4;s:34:"1202:zbqry.bcgvba.nhqvbnyregf.anzr";R:4;s:46:"1202:zbqry.bcgvba.nhqvbnyregf.fubegqrfpevcgvba";R:4;s:33:"1202:pyvragbcgvbaf.fnirtnzrf.anzr";R:4;s:45:"1202:pyvragbcgvbaf.fnirtnzrf.fubegqrfpevcgvba";R:4;s:43:"1202:zbqry.bcgvba.fubjfnirtnzrfrggvatf.anzr";R:4;s:55:"1202:zbqry.bcgvba.fubjfnirtnzrfrggvatf.fubegqrfpevcgvba";R:4;s:55:"1202:pyvragbcgvbaf.fnirtnzrf.fubjfnirtnzrfrggvatf.arire";R:4;s:61:"1202:pyvragbcgvbaf.fnirtnzrf.fubjfnirtnzrfrggvatf.zhygvcynlre";R:4;s:56:"1202:pyvragbcgvbaf.fnirtnzrf.fubjfnirtnzrfrggvatf.nyjnlf";R:4;s:48:"1202:pyvragbcgvbaf.fnirtnzrf.nhgbfnir.svyrcersvk";R:4;s:46:"1202:pyvragbcgvbaf.fnirtnzrf.nhgbfnir.ynfgghea";R:4;s:52:"1202:pyvragbcgvbaf.fnirtnzrf.nhgbfnir.orsberynfgghea";R:4;s:37:"1202:zbqry.bcgvba.nhgbfnircrevbq.anzr";R:4;s:49:"1202:zbqry.bcgvba.nhgbfnircrevbq.fubegqrfpevcgvba";R:4;s:42:"1202:zbqry.bcgvba.nhgbfnirtrarengvbaf.anzr";R:4;s:54:"1202:zbqry.bcgvba.nhgbfnirtrarengvbaf.fubegqrfpevcgvba";R:4;s:39:"1202:zbqry.bcgvba.nhgbfnirinyvqvgl.anzr";R:4;s:51:"1202:zbqry.bcgvba.nhgbfnirinyvqvgl.fubegqrfpevcgvba";R:4;s:37:"1202:zbqry.bcgvba.nhgbfnirqryrgr.anzr";R:4;s:49:"1202:zbqry.bcgvba.nhgbfnirqryrgr.fubegqrfpevcgvba";R:4;s:33:"1202:pyvragbcgvbaf.jnerubhfr.anzr";R:4;s:45:"1202:pyvragbcgvbaf.jnerubhfr.fubegqrfpevcgvba";R:4;s:34:"1202:zbqry.bcgvba.phfgbzfgbpx.anzr";R:4;s:46:"1202:zbqry.bcgvba.phfgbzfgbpx.fubegqrfpevcgvba";R:4;s:31:"1202:zbqry.bcgvba.ybjyriry.anzr";R:4;s:43:"1202:zbqry.bcgvba.ybjyriry.fubegqrfpevcgvba";R:4;s:32:"1202:zbqry.bcgvba.uvtuyriry.anzr";R:4;s:44:"1202:zbqry.bcgvba.uvtuyriry.fubegqrfpevcgvba";R:4;s:29:"1202:pyvragbcgvbaf.bgure.anzr";R:4;s:41:"1202:pyvragbcgvbaf.bgure.fubegqrfpevcgvba";R:4;s:40:"1202:zbqry.bcgvba.nhgbybnqrzvtenagf.anzr";R:4;s:52:"1202:zbqry.bcgvba.nhgbybnqrzvtenagf.fubegqrfpevcgvba";R:4;s:34:"1202:zbqry.bcgvba.nhgbraqghea.anzr";R:4;s:46:"1202:zbqry.bcgvba.nhgbraqghea.fubegqrfpevcgvba";R:4;s:40:"1202:zbqry.bcgvba.fubjraqgheaqvnybt.anzr";R:4;s:52:"1202:zbqry.bcgvba.fubjraqgheaqvnybt.fubegqrfpevcgvba";R:4;s:42:"1202:zbqry.bcgvba.pbzcnpgpbybalercbeg.anzr";R:4;s:54:"1202:zbqry.bcgvba.pbzcnpgpbybalercbeg.fubegqrfpevcgvba";R:4;s:35:"1202:zbqry.bcgvba.ynobheercbeg.anzr";R:4;s:39:"1202:pyvragbcgvbaf.ynobheercbeg.pynffvp";R:4;s:39:"1202:pyvragbcgvbaf.ynobheercbeg.pbzcnpg";R:4;s:35:"1202:zbqry.bcgvba.pbybalercbeg.anzr";R:4;s:39:"1202:pyvragbcgvbaf.pbybalercbeg.pynffvp";R:4;s:39:"1202:pyvragbcgvbaf.pbybalercbeg.pbzcnpg";R:4;s:43:"1202:zbqry.bcgvba.vaqvnaqrznaqerfcbafr.anzr";R:4;s:55:"1202:zbqry.bcgvba.vaqvnaqrznaqerfcbafr.fubegqrfpevcgvba";R:4;s:43:"1202:pyvragbcgvbaf.vaqvnaqrznaqerfcbafr.nfx";R:4;s:46:"1202:pyvragbcgvbaf.vaqvnaqrznaqerfcbafr.npprcg";R:4;s:46:"1202:pyvragbcgvbaf.vaqvnaqrznaqerfcbafr.erwrpg";R:4;s:45:"1202:zbqry.bcgvba.haybnqbiresybjerfcbafr.anzr";R:4;s:57:"1202:zbqry.bcgvba.haybnqbiresybjerfcbafr.fubegqrfpevcgvba";R:4;s:45:"1202:pyvragbcgvbaf.haybnqbiresybjerfcbafr.nfx";R:4;s:47:"1202:pyvragbcgvbaf.haybnqbiresybjerfcbafr.arire";R:4;s:48:"1202:pyvragbcgvbaf.haybnqbiresybjerfcbafr.nyjnlf";R:4;s:29:"1202:znctrarengbebcgvbaf.anzr";R:4;s:41:"1202:znctrarengbebcgvbaf.fubegqrfpevcgvba";R:4;s:31:"1202:zbqry.bcgvba.zncjvqgu.anzr";R:4;s:43:"1202:zbqry.bcgvba.zncjvqgu.fubegqrfpevcgvba";R:4;s:32:"1202:zbqry.bcgvba.zncurvtug.anzr";R:4;s:44:"1202:zbqry.bcgvba.zncurvtug.fubegqrfpevcgvba";R:4;s:31:"1202:zbqry.bcgvba.ynaqznff.anzr";R:4;s:43:"1202:zbqry.bcgvba.ynaqznff.fubegqrfpevcgvba";R:4;s:40:"1202:zbqry.bcgvba.ynaqtrarengbeglcr.anzr";R:4;s:52:"1202:zbqry.bcgvba.ynaqtrarengbeglcr.fubegqrfpevcgvba";R:4;s:46:"1202:zbqry.bcgvba.cersreerqqvfgnaprgbrqtr.anzr";R:4;s:58:"1202:zbqry.bcgvba.cersreerqqvfgnaprgbrqtr.fubegqrfpevcgvba";R:4;s:44:"1202:zbqry.bcgvba.znkvzhzqvfgnaprgbrqtr.anzr";R:4;s:56:"1202:zbqry.bcgvba.znkvzhzqvfgnaprgbrqtr.fubegqrfpevcgvba";R:4;s:40:"1202:zbqry.bcgvba.qvfgnaprgbuvtufrn.anzr";R:4;s:52:"1202:zbqry.bcgvba.qvfgnaprgbuvtufrn.fubegqrfpevcgvba";R:4;s:34:"1202:zbqry.bcgvba.evireahzore.anzr";R:4;s:46:"1202:zbqry.bcgvba.evireahzore.fubegqrfpevcgvba";R:4;s:37:"1202:zbqry.bcgvba.zbhagnvaahzore.anzr";R:4;s:49:"1202:zbqry.bcgvba.zbhagnvaahzore.fubegqrfpevcgvba";R:4;s:35:"1202:zbqry.bcgvba.ehzbheahzore.anzr";R:4;s:47:"1202:zbqry.bcgvba.ehzbheahzore.fubegqrfpevcgvba";R:4;s:39:"1202:zbqry.bcgvba.frggyrzragahzore.anzr";R:4;s:51:"1202:zbqry.bcgvba.frggyrzragahzore.fubegqrfpevcgvba";R:4;s:35:"1202:zbqry.bcgvba.sberfgahzore.anzr";R:4;s:47:"1202:zbqry.bcgvba.sberfgahzore.fubegqrfpevcgvba";R:4;s:34:"1202:zbqry.bcgvba.obahfahzore.anzr";R:4;s:46:"1202:zbqry.bcgvba.obahfahzore.fubegqrfpevcgvba";R:4;s:31:"1202:zbqry.bcgvba.uhzvqvgl.anzr";R:4;s:43:"1202:zbqry.bcgvba.uhzvqvgl.fubegqrfpevcgvba";R:4;s:34:"1202:zbqry.bcgvba.grzcrengher.anzr";R:4;s:46:"1202:zbqry.bcgvba.grzcrengher.fubegqrfpevcgvba";R:4;s:33:"1202:zbqry.bcgvba.vzcbegsvyr.anzr";R:4;s:45:"1202:zbqry.bcgvba.vzcbegsvyr.fubegqrfpevcgvba";R:4;s:36:"1202:zbqry.bcgvba.vzcbeggreenva.anzr";R:4;s:48:"1202:zbqry.bcgvba.vzcbeggreenva.fubegqrfpevcgvba";R:4;s:36:"1202:zbqry.bcgvba.vzcbegobahfrf.anzr";R:4;s:48:"1202:zbqry.bcgvba.vzcbegobahfrf.fubegqrfpevcgvba";R:4;s:36:"1202:zbqry.bcgvba.vzcbegehzbhef.anzr";R:4;s:48:"1202:zbqry.bcgvba.vzcbegehzbhef.fubegqrfpevcgvba";R:4;s:40:"1202:zbqry.bcgvba.vzcbegfrggyrzragf.anzr";R:4;s:52:"1202:zbqry.bcgvba.vzcbegfrggyrzragf.fubegqrfpevcgvba";R:4;s:38:"1202:zbqry.bcgvba.zvavzhzyngvghqr.anzr";R:4;s:50:"1202:zbqry.bcgvba.zvavzhzyngvghqr.fubegqrfpevcgvba";R:4;s:38:"1202:zbqry.bcgvba.znkvzhzyngvghqr.anzr";R:4;s:50:"1202:zbqry.bcgvba.znkvzhzyngvghqr.fubegqrfpevcgvba";R:4;s:36:"1202:znctrarengbebcgvbaf.vzcbeg.anzr";R:4;s:48:"1202:znctrarengbebcgvbaf.vzcbeg.fubegqrfpevcgvba";R:4;s:43:"1202:znctrarengbebcgvbaf.ynaqtrarengbe.anzr";R:4;s:55:"1202:znctrarengbebcgvbaf.ynaqtrarengbe.fubegqrfpevcgvba";R:4;s:46:"1202:znctrarengbebcgvbaf.greenvatrarengbe.anzr";R:4;s:58:"1202:znctrarengbebcgvbaf.greenvatrarengbe.fubegqrfpevcgvba";R:4;s:31:"1202:zbqry.frggyrzrag.pnzc.anzr";R:4;s:33:"1202:zbqry.frggyrzrag.pnzc.cyheny";R:4;s:39:"1202:zbqry.frggyrzrag.pnzc.pncvgny.anzr";R:4;s:34:"1202:zbqry.frggyrzrag.ivyyntr.anzr";R:4;s:36:"1202:zbqry.frggyrzrag.ivyyntr.cyheny";R:4;s:42:"1202:zbqry.frggyrzrag.ivyyntr.pncvgny.anzr";R:4;s:31:"1202:zbqry.frggyrzrag.vapn.anzr";R:4;s:33:"1202:zbqry.frggyrzrag.vapn.cyheny";R:4;s:39:"1202:zbqry.frggyrzrag.vapn.pncvgny.anzr";R:4;s:32:"1202:zbqry.frggyrzrag.nmgrp.anzr";R:4;s:34:"1202:zbqry.frggyrzrag.nmgrp.cyheny";R:4;s:40:"1202:zbqry.frggyrzrag.nmgrp.pncvgny.anzr";R:4;s:23:"1202:rirag.svefgynaqvat";R:4;s:25:"1202:rirag.zrrgvatangvirf";R:4;s:27:"1202:rirag.zrrgvatrhebcrnaf";R:4;s:23:"1202:rirag.zrrgvatnmgrp";R:4;s:22:"1202:rirag.zrrgvatvapn";R:4;s:23:"1202:tbbqfgenafsre.grkg";R:4;s:18:"1202:ragrefbzrgrkg";R:4;s:29:"1202:genqrcebcbfvgvba.jrypbzr";R:4;s:27:"1202:genqrcebcbfvgvba.gbohl";R:4;s:28:"1202:genqrcebcbfvgvba.gbfryy";R:4;s:28:"1202:genqrcebcbfvgvba.gbtvsg";R:4;s:28:"1202:genqrcebcbfvgvba.pnapry";R:4;s:24:"1202:ohlcebcbfvgvba.grkg";R:4;s:27:"1202:ohlcebcbfvgvba.abguvat";R:4;s:26:"1202:ohlcebcbfvgvba.pnapry";R:4;s:25:"1202:fryycebcbfvgvba.grkg";R:4;s:28:"1202:fryycebcbfvgvba.abguvat";R:4;s:27:"1202:fryycebcbfvgvba.pnapry";R:4;s:24:"1202:genqr.abguvatgbfryy";R:4;s:23:"1202:genqr.abgenqrtbbqf";R:4;s:18:"1202:genqr.abgenqr";R:4;s:24:"1202:genqr.abgenqrunttyr";R:4;s:25:"1202:genqr.abgenqrubfgvyr";R:4;s:21:"1202:genqr.abgenqrjne";R:4;s:13:"1202:ohl.grkg";R:4;s:18:"1202:ohl.gnxrbssre";R:4;s:17:"1202:ohl.zbertbyq";R:4;s:14:"1202:fryy.grkg";R:4;s:19:"1202:fryy.gnxrbssre";R:4;s:18:"1202:fryy.zbertbyq";R:4;s:14:"1202:fryy.tvsg";R:4;s:14:"1202:tvsg.grkg";R:4;s:24:"1202:oblpbggrqtbbqf.grkg";R:4;s:30:"1202:oblpbggrqtbbqf.cnlneernef";R:4;s:29:"1202:oblpbggrqtbbqf.qhzctbbqf";R:4;s:40:"1202:qrpynervaqrcraqrapr.nerlbhfher.grkg";R:4;s:39:"1202:qrpynervaqrcraqrapr.nerlbhfher.lrf";R:4;s:38:"1202:qrpynervaqrcraqrapr.nerlbhfher.ab";R:4;s:38:"1202:qrpynervaqrcraqrapr.qrsnhygangvba";R:4;s:39:"1202:qrpynervaqrcraqrapr.qrsnhygpbhagel";R:4;s:37:"1202:qrpynervaqrcraqrapr.ragrepbhagel";R:4;s:36:"1202:qrpynervaqrcraqrapr.ragreangvba";R:4;s:33:"1202:qrpynervaqrcraqrapr.naabhapr";R:4;s:42:"1202:qrpynervaqrcraqrapr.vagreiragvbasbepr";R:4;s:49:"1202:qrpynervaqrcraqrapr.vagreiragvbasbeprneevirf";R:4;s:20:"1202:vaqvnaynaq.grkg";R:4;s:19:"1202:vaqvnaynaq.cnl";R:4;s:20:"1202:vaqvnaynaq.gnxr";R:4;s:22:"1202:vaqvnaynaq.pnapry";R:4;s:27:"1202:vaqvnaqrznaq.sbbq.grkg";R:4;s:26:"1202:vaqvnaqrznaq.sbbq.lrf";R:4;s:25:"1202:vaqvnaqrznaq.sbbq.ab";R:4;s:27:"1202:vaqvnaqrznaq.tbyq.grkg";R:4;s:26:"1202:vaqvnaqrznaq.tbyq.lrf";R:4;s:25:"1202:vaqvnaqrznaq.tbyq.ab";R:4;s:28:"1202:vaqvnaqrznaq.bgure.grkg";R:4;s:27:"1202:vaqvnaqrznaq.bgure.lrf";R:4;s:26:"1202:vaqvnaqrznaq.bgure.ab";R:4;s:31:"1202:rkcyberybfgpvglehzbhe.grkg";R:4;s:29:"1202:rkcyberzbhaqfehzbhe.grkg";R:4;s:30:"1202:rkcyberybfgpvglehzbhe.lrf";R:4;s:29:"1202:rkcyberybfgpvglehzbhe.ab";R:4;s:25:"1202:jnerubhfrqvnybt.anzr";R:4;s:27:"1202:jnerubhfrqvnybt.rkcbeg";R:4;s:44:"1202:jnerubhfrqvnybt.rkcbeg.fubegqrfpevcgvba";R:4;s:46:"1202:jnerubhfrqvnybt.ybjyriry.fubegqrfpevcgvba";R:4;s:47:"1202:jnerubhfrqvnybt.uvtuyriry.fubegqrfpevcgvba";R:4;s:49:"1202:jnerubhfrqvnybt.rkcbegyriry.fubegqrfpevcgvba";R:4;s:26:"1202:genqrebhgrqvnybt.anzr";R:4;s:30:"1202:genqrebhgrqvnybt.arjebhgr";R:4;s:31:"1202:genqrebhgrqvnybt.rqvgebhgr";R:4;s:33:"1202:genqrebhgrqvnybt.erzbirebhgr";R:4;s:35:"1202:genqrebhgrqvnybt.qrnffvtaebhgr";R:4;s:38:"1202:genqrebhgrqvnybt.qrnffvta.gbbygvc";R:4;s:29:"1202:genqrebhgrqvnybt.nqqfgbc";R:4;s:32:"1202:genqrebhgrqvnybt.erzbirfgbc";R:4;s:31:"1202:genqrebhgrqvnybt.anzrynory";R:4;s:38:"1202:genqrebhgrqvnybt.qrfgvangvbaynory";R:4;s:35:"1202:genqrebhgrqvnybt.qhcyvpngranzr";R:4;s:36:"1202:genqrebhgrqvnybt.abgrabhtufgbcf";R:4;s:22:"1202:genqrebhgr.oebxra";R:4;s:22:"1202:genqrebhgr.abjbex";R:4;s:22:"1202:genqrebhgr.abcngu";R:4;s:24:"1202:genqrebhgr.fxvcfgbc";R:4;s:33:"1202:genqrebhgr.jnerubhfrpncnpvgl";R:4;s:29:"1202:genqrebhgr.ernffvtaebhgr";R:4;s:20:"1202:genqrebhgr.ybnq";R:4;s:33:"1202:genqrebhgr.ybnqvzcbegyvzvgrq";R:4;s:33:"1202:genqrebhgr.ybnqrkcbegyvzvgrq";R:4;s:22:"1202:genqrebhgr.haybnq";R:4;s:24:"1202:genqrebhgr.biresybj";R:4;s:24:"1202:genqrebhgr.abhaybnq";R:4;s:17:"1202:phfgbzf.fnyr";R:4;s:18:"1202:rhebcr.abtnzr";R:4;s:26:"1202:rhebcr.yrnirpbybavfgf";R:4;s:18:"1202:uvtufrnf.grkg";R:4;s:17:"1202:uvtufrnf.lrf";R:4;s:16:"1202:uvtufrnf.ab";R:4;s:19:"1202:qvfrzonex.grkg";R:4;s:21:"1202:qvfrzonex.pnapry";R:4;s:16:"1202:rzonex.grkg";R:4;s:18:"1202:rzonex.pnapry";R:4;s:25:"1202:nzrffntrsebzgurpebja";R:4;s:30:"1202:pnfuvagernfhergenva.beqre";R:4;s:29:"1202:pnfuvagernfhergenva.serr";R:4;s:28:"1202:pnfuvagernfhergenva.cnl";R:4;s:28:"1202:pnfuvagernfhergenva.lrf";R:4;s:27:"1202:pnfuvagernfhergenva.ab";R:4;s:21:"1202:qvfonaqhavg.grkg";R:4;s:20:"1202:qvfonaqhavg.lrf";R:4;s:19:"1202:qvfonaqhavg.ab";R:4;s:21:"1202:ybbgpnetb.urnqre";R:4;s:17:"1202:arjynaq.grkg";R:4;s:16:"1202:arjynaq.lrf";R:4;s:22:"1202:jrypbzrbssre.grkg";R:4;s:23:"1202:jrypbzrfvzcyr.grkg";R:4;s:16:"1202:jrypbzr.lrf";R:4;s:15:"1202:jrypbzr.ab";R:4;s:26:"1202:abpynvzernfba.greenva";R:4;s:25:"1202:abpynvzernfba.ehzbhe";R:4;s:24:"1202:abpynvzernfba.jngre";R:4;s:29:"1202:abpynvzernfba.frggyrzrag";R:4;s:25:"1202:abpynvzernfba.jbexrq";R:4;s:28:"1202:abpynvzernfba.rhebcrnaf";R:4;s:26:"1202:abpynvzernfba.angvirf";R:4;s:32:"1202:abnqqernfba.nyernql_cerfrag";R:4;s:27:"1202:abnqqernfba.jebat_glcr";R:4;s:34:"1202:abnqqernfba.pncnpvgl_rkprrqrq";R:4;s:34:"1202:abnqqernfba.bpphcvrq_ol_rarzl";R:4;s:31:"1202:abnqqernfba.bjarq_ol_rarzl";R:4;s:31:"1202:abnqqernfba.nabgure_pbybal";R:4;s:30:"1202:abnqqernfba.pbybal_pragre";R:4;s:32:"1202:abnqqernfba.zvffvat_novyvgl";R:4;s:30:"1202:abnqqernfba.zvffvat_fxvyy";R:4;s:31:"1202:abnqqernfba.pynvz_erdhverq";R:4;s:24:"1202:ohvyqpbybal.onqhavg";R:4;s:27:"1202:ohvyqpbybal.ynaqybpxrq";R:4;s:23:"1202:ohvyqpbybal.absbbq";R:4;s:36:"1202:ohvyqpbybal.abohvyqvatzngrevnyf";R:4;s:27:"1202:ohvyqpbybal.vaqvnaynaq";R:4;s:29:"1202:ohvyqpbybal.rhebcrnaynaq";R:4;s:24:"1202:ohvyqpbybal.bjaynaq";R:4;s:20:"1202:ohvyqpbybal.lrf";R:4;s:19:"1202:ohvyqpbybal.ab";R:4;s:20:"1202:anzrertvba.grkg";R:4;s:20:"1202:anzrpbybal.grkg";R:4;s:19:"1202:anzrpbybal.lrf";R:4;s:18:"1202:anzrpbybal.ab";R:4;s:25:"1202:anzrpbybal.abghavdhr";R:4;s:22:"1202:eranzrpbybal.grkg";R:4;s:21:"1202:eranzrpbybal.lrf";R:4;s:20:"1202:eranzrpbybal.ab";R:4;s:20:"1202:eranzrhavg.grkg";R:4;s:19:"1202:eranzrhavg.lrf";R:4;s:18:"1202:eranzrhavg.ab";R:4;s:23:"1202:nonaqbapbybal.grkg";R:4;s:22:"1202:nonaqbapbybal.lrf";R:4;s:21:"1202:nonaqbapbybal.ab";R:4;s:18:"1202:qrsrngrq.grkg";R:4;s:17:"1202:qrsrngrq.lrf";R:4;s:16:"1202:qrsrngrq.ab";R:4;s:30:"1202:qrsrngrqfvatyrcynlre.grkg";R:4;s:29:"1202:qrsrngrqfvatyrcynlre.lrf";R:4;s:28:"1202:qrsrngrqfvatyrcynlre.ab";R:4;s:17:"1202:ivpgbel.grkg";R:4;s:16:"1202:ivpgbel.lrf";R:4;s:21:"1202:ivpgbel.pbagvahr";R:4;s:24:"1202:ivpgbel.abrhebcrnaf";R:4;s:19:"1202:uvtufpberf.lrf";R:4;s:18:"1202:uvtufpberf.ab";R:4;s:27:"1202:fryrpgqrfgvangvba.grkg";R:4;s:29:"1202:fryrpgqrfgvangvba.pnapry";R:4;s:29:"1202:fryrpgqrfgvangvba.snvyrq";R:4;s:37:"1202:fryrpgqrfgvangvba.baylzlpbybavrf";R:4;s:39:"1202:fryrpgqrfgvangvba.qrfgvangvbagheaf";R:4;s:34:"1202:fryrpgqrfgvangvba.fbegolbjare";R:4;s:33:"1202:fryrpgqrfgvangvba.fbegolanzr";R:4;s:37:"1202:fryrpgqrfgvangvba.fbegolqvfgnapr";R:4;s:29:"1202:pubbfrguvfsbhaqvatsngure";R:4;s:18:"1202:abgrabhtutbyq";R:4;s:25:"1202:zbir.abnpprffornpurq";R:4;s:25:"1202:zbir.abnpprffpbagnpg";R:4;s:23:"1202:zbir.abnpprfftbbqf";R:4;s:23:"1202:zbir.abnpprfffxvyy";R:4;s:23:"1202:zbir.abnpprffgenqr";R:4;s:28:"1202:zbir.abnpprfffrggyrzrag";R:4;s:21:"1202:zbir.abnpprffjne";R:4;s:23:"1202:zbir.abnpprffjngre";R:4;s:23:"1202:zbir.abnggnpxjngre";R:4;s:16:"1202:abglbheghea";R:4;s:20:"1202:gjbgheafcrelrne";R:4;s:24:"1202:cnlsbeohvyqvat.grkg";R:4;s:23:"1202:cnlsbeohvyqvat.lrf";R:4;s:22:"1202:cnlsbeohvyqvat.ab";R:4;s:33:"1202:vaqvnafrggyrzrag.anzrhaxabja";R:4;s:36:"1202:vaqvnafrggyrzrag.yrneanoyrfxvyy";R:4;s:34:"1202:vaqvnafrggyrzrag.uvtuyljnagrq";R:4;s:33:"1202:vaqvnafrggyrzrag.bgurejnagrq";R:4;s:34:"1202:vaqvnafrggyrzrag.zbfgnynezvat";R:4;s:33:"1202:vaqvnafrggyrzrag.abzberfxvyy";R:4;s:36:"1202:vaqvnafrggyrzrag.pnagyrneafxvyy";R:4;s:34:"1202:vaqvnafrggyrzrag.fxvyyhaxabja";R:4;s:31:"1202:vaqvnafrggyrzrag.fxvyyabar";R:4;s:36:"1202:vaqvnafrggyrzrag.grafvbahaxabja";R:4;s:40:"1202:vaqvnafrggyrzrag.jnagrqtbbqfhaxabja";R:4;s:37:"1202:vaqvnafrggyrzrag.jnagrqtbbqfabar";R:4;s:33:"1202:vaqvnafrggyrzrag.nynez.unccl";R:4;s:35:"1202:vaqvnafrggyrzrag.nynez.pbagrag";R:4;s:38:"1202:vaqvnafrggyrzrag.nynez.qvfcyrnfrq";R:4;s:33:"1202:vaqvnafrggyrzrag.nynez.natel";R:4;s:35:"1202:vaqvnafrggyrzrag.nynez.ungrshy";R:4;s:35:"1202:vaqvnafrggyrzrag.zvffvba.unccl";R:4;s:37:"1202:vaqvnafrggyrzrag.zvffvba.pbagrag";R:4;s:40:"1202:vaqvnafrggyrzrag.zvffvba.qvfcyrnfrq";R:4;s:35:"1202:vaqvnafrggyrzrag.zvffvba.natel";R:4;s:37:"1202:vaqvnafrggyrzrag.zvffvba.ungrshy";R:4;s:43:"1202:vaqvnafrggyrzrag.zvffvba.rarzlqrabhapr";R:4;s:40:"1202:vaqvnafrggyrzrag.zvffvba.abqrabhapr";R:4;s:39:"1202:vaqvnafrggyrzrag.zvffvba.qrabhaprq";R:4;s:35:"1202:vaqvnafrggyrzrag.pncvgnyohearq";R:4;s:20:"1202:yrneafxvyy.grkg";R:4;s:19:"1202:yrneafxvyy.lrf";R:4;s:18:"1202:yrneafxvyy.ab";R:4;s:19:"1202:yrneafxvyy.qvr";R:4;s:21:"1202:yrneafxvyy.yrnir";R:4;s:30:"1202:fpbhgfrggyrzrag.terrgvatf";R:4;s:26:"1202:fpbhgfrggyrzrag.fxvyy";R:4;s:28:"1202:fpbhgfrggyrzrag.genqr.1";R:4;s:28:"1202:fpbhgfrggyrzrag.genqr.2";R:4;s:28:"1202:fpbhgfrggyrzrag.genqr.3";R:4;s:26:"1202:fpbhgfrggyrzrag.fcrnx";R:4;s:28:"1202:fpbhgfrggyrzrag.gevohgr";R:4;s:27:"1202:fpbhgfrggyrzrag.nggnpx";R:4;s:31:"1202:fpbhgfrggyrzrag.fcrnxgnyrf";R:4;s:31:"1202:fpbhgfrggyrzrag.fcrnxornqf";R:4;s:33:"1202:fpbhgfrggyrzrag.fcrnxabguvat";R:4;s:29:"1202:fpbhgfrggyrzrag.fcrnxqvr";R:4;s:33:"1202:fpbhgfrggyrzrag.gevohgrnterr";R:4;s:36:"1202:fpbhgfrggyrzrag.gevohgrqvfnterr";R:4;s:32:"1202:fpbhgfrggyrzrag.rkcregfpbhg";R:4;s:21:"1202:fpbhgpbybal.grkg";R:4;s:26:"1202:fpbhgpbybal.artbgvngr";R:4;s:20:"1202:fpbhgpbybal.fcl";R:4;s:23:"1202:fpbhgpbybal.nggnpx";R:4;s:34:"1202:zvffvbanelfrggyrzrag.dhrfgvba";R:4;s:35:"1202:zvffvbanelfrggyrzrag.rfgnoyvfu";R:4;s:32:"1202:zvffvbanelfrggyrzrag.urerfl";R:4;s:32:"1202:zvffvbanelfrggyrzrag.vapvgr";R:4;s:40:"1202:zvffvbanelfrggyrzrag.vapvgrdhrfgvba";R:4;s:39:"1202:zvffvbanelfrggyrzrag.vapvgrpbasvez";R:4;s:40:"1202:zvffvbanelfrggyrzrag.vapvgrtbyqsnvy";R:4;s:32:"1202:zvffvbanelfrggyrzrag.pnapry";R:4;s:27:"1202:freire.abebhgrgbfreire";R:4;s:27:"1202:freire.pbhyqabgpbaarpg";R:4;s:25:"1202:freire.pbhyqabgfgneg";R:4;s:26:"1202:freire.nyernqlfgnegrq";R:4;s:26:"1202:freire.znkvzhzcynlref";R:4;s:25:"1202:freire.hfreanzrvahfr";R:4;s:23:"1202:freire.abgnyyernql";R:4;s:31:"1202:freire.jebatserrpbyirefvba";R:4;s:30:"1202:freire.baylnqzvapnaynhapu";R:4;s:32:"1202:freire.vainyvqcynlreangvbaf";R:4;s:19:"1202:freire.gvzrbhg";R:4;s:29:"1202:freire.reebefgnegvattnzr";R:4;s:37:"1202:qvfcynlgvyrgrkgnpgvba.rzcgl.anzr";R:4;s:37:"1202:qvfcynlgvyrgrkgnpgvba.anzrf.anzr";R:4;s:38:"1202:qvfcynlgvyrgrkgnpgvba.bjaref.anzr";R:4;s:39:"1202:qvfcynlgvyrgrkgnpgvba.ertvbaf.anzr";R:4;s:21:"1202:qrohtnpgvba.anzr";R:4;s:21:"1202:nobhgnpgvba.anzr";R:4;s:22:"1202:npgvirnpgvba.anzr";R:4;s:32:"1202:nffvtagenqrebhgrnpgvba.anzr";R:4;s:39:"1202:nffvtagenqrebhgrnpgvba.nppryrengbe";R:4;s:27:"1202:ohvyqpbybalnpgvba.anzr";R:4;s:34:"1202:ohvyqpbybalnpgvba.nppryrengbe";R:4;s:22:"1202:pragrenpgvba.anzr";R:4;s:29:"1202:pragrenpgvba.nppryrengbe";R:4;s:34:"1202:punatrjvaqbjrqzbqrnpgvba.anzr";R:4;s:41:"1202:punatrjvaqbjrqzbqrnpgvba.nppryrengbe";R:4;s:20:"1202:pungnpgvba.anzr";R:4;s:27:"1202:pungnpgvba.nppryrengbe";R:4;s:27:"1202:pyrnesberfgnpgvba.anzr";R:4;s:34:"1202:pyrnesberfgnpgvba.nppryrengbe";R:4;s:27:"1202:pyrnebeqrefnpgvba.anzr";R:4;s:34:"1202:pyrnebeqrefnpgvba.nppryrengbe";R:4;s:25:"1202:pbybcrqvnnpgvba.anzr";R:4;s:33:"1202:pbybcrqvnnpgvba.greenva.anzr";R:4;s:35:"1202:pbybcrqvnnpgvba.erfbheprf.anzr";R:4;s:31:"1202:pbybcrqvnnpgvba.havgf.anzr";R:4;s:31:"1202:pbybcrqvnnpgvba.tbbqf.anzr";R:4;s:32:"1202:pbybcrqvnnpgvba.fxvyyf.anzr";R:4;s:35:"1202:pbybcrqvnnpgvba.ohvyqvatf.anzr";R:4;s:33:"1202:pbybcrqvnnpgvba.snguref.anzr";R:4;s:33:"1202:pbybcrqvnnpgvba.angvbaf.anzr";R:4;s:38:"1202:pbybcrqvnnpgvba.angvba_glcrf.anzr";R:4;s:34:"1202:pbybcrqvnnpgvba.pbaprcgf.anzr";R:4;s:24:"1202:pbagvahrnpgvba.anzr";R:4;s:31:"1202:pbagvahrnpgvba.nppryrengbe";R:4;s:35:"1202:qrpynervaqrcraqraprnpgvba.anzr";R:4;s:33:"1202:qrgrezvaruvtufrnfnpgvba.anzr";R:4;s:27:"1202:qvfonaqhavgnpgvba.anzr";R:4;s:34:"1202:qvfonaqhavgnpgvba.nppryrengbe";R:4;s:30:"1202:qvfcynlobeqrefnpgvba.anzr";R:4;s:37:"1202:qvfcynlobeqrefnpgvba.nppryrengbe";R:4;s:27:"1202:qvfcynltevqnpgvba.anzr";R:4;s:34:"1202:qvfcynltevqnpgvba.nppryrengbe";R:4;s:23:"1202:raqgheanpgvba.anzr";R:4;s:30:"1202:raqgheanpgvba.nppryrengbe";R:4;s:22:"1202:rhebcrnpgvba.anzr";R:4;s:29:"1202:rhebcrnpgvba.nppryrengbe";R:4;s:33:"1202:rkrphgrtbgbbeqrefnpgvba.anzr";R:4;s:40:"1202:rkrphgrtbgbbeqrefnpgvba.nppryrengbe";R:4;s:29:"1202:punatrnpgvba.nppryrengbe";R:4;s:34:"1202:punatrnpgvba.ragrepbybal.anzr";R:4;s:36:"1202:punatrnpgvba.fryrpgpneevre.anzr";R:4;s:37:"1202:punatrnpgvba.arkghavgbagvyr.anzr";R:4;s:22:"1202:punatrnpgvba.anzr";R:4;s:30:"1202:svaqfrggyrzragnpgvba.anzr";R:4;s:37:"1202:svaqfrggyrzragnpgvba.nppryrengbe";R:4;s:23:"1202:sbegvslnpgvba.anzr";R:4;s:30:"1202:sbegvslnpgvba.nppryrengbe";R:4;s:20:"1202:tbgbnpgvba.anzr";R:4;s:27:"1202:tbgbnpgvba.nppryrengbe";R:4;s:24:"1202:tbgbgvyrnpgvba.anzr";R:4;s:31:"1202:tbgbgvyrnpgvba.nppryrengbe";R:4;s:20:"1202:ybnqnpgvba.anzr";R:4;s:27:"1202:ybnqnpgvba.nppryrengbe";R:4;s:27:"1202:zncpbagebyfnpgvba.anzr";R:4;s:34:"1202:zncpbagebyfnpgvba.nppryrengbe";R:4;s:25:"1202:zncrqvgbenpgvba.anzr";R:4;s:29:"1202:zvavzncmbbzvanpgvba.anzr";R:4;s:36:"1202:zvavzncmbbzvanpgvba.nppryrengbe";R:4;s:39:"1202:zvavzncmbbzvanpgvba.frpbaqnel.anzr";R:4;s:46:"1202:zvavzncmbbzvanpgvba.frpbaqnel.nppryrengbe";R:4;s:30:"1202:zvavzncmbbzbhgnpgvba.anzr";R:4;s:37:"1202:zvavzncmbbzbhgnpgvba.nppryrengbe";R:4;s:40:"1202:zvavzncmbbzbhgnpgvba.frpbaqnel.anzr";R:4;s:47:"1202:zvavzncmbbzbhgnpgvba.frpbaqnel.nppryrengbe";R:4;s:29:"1202:zbirnpgvba.r.nppryrengbe";R:4;s:22:"1202:zbirnpgvba.r.anzr";R:4;s:39:"1202:zbirnpgvba.r.frpbaqnel.nppryrengbe";R:4;s:32:"1202:zbirnpgvba.r.frpbaqnel.anzr";R:4;s:29:"1202:zbirnpgvba.a.nppryrengbe";R:4;s:22:"1202:zbirnpgvba.a.anzr";R:4;s:39:"1202:zbirnpgvba.a.frpbaqnel.nppryrengbe";R:4;s:32:"1202:zbirnpgvba.a.frpbaqnel.anzr";R:4;s:30:"1202:zbirnpgvba.ar.nppryrengbe";R:4;s:23:"1202:zbirnpgvba.ar.anzr";R:4;s:40:"1202:zbirnpgvba.ar.frpbaqnel.nppryrengbe";R:4;s:33:"1202:zbirnpgvba.ar.frpbaqnel.anzr";R:4;s:30:"1202:zbirnpgvba.aj.nppryrengbe";R:4;s:23:"1202:zbirnpgvba.aj.anzr";R:4;s:40:"1202:zbirnpgvba.aj.frpbaqnel.nppryrengbe";R:4;s:33:"1202:zbirnpgvba.aj.frpbaqnel.anzr";R:4;s:29:"1202:zbirnpgvba.f.nppryrengbe";R:4;s:22:"1202:zbirnpgvba.f.anzr";R:4;s:39:"1202:zbirnpgvba.f.frpbaqnel.nppryrengbe";R:4;s:32:"1202:zbirnpgvba.f.frpbaqnel.anzr";R:4;s:30:"1202:zbirnpgvba.fr.nppryrengbe";R:4;s:23:"1202:zbirnpgvba.fr.anzr";R:4;s:40:"1202:zbirnpgvba.fr.frpbaqnel.nppryrengbe";R:4;s:33:"1202:zbirnpgvba.fr.frpbaqnel.anzr";R:4;s:30:"1202:zbirnpgvba.fj.nppryrengbe";R:4;s:23:"1202:zbirnpgvba.fj.anzr";R:4;s:40:"1202:zbirnpgvba.fj.frpbaqnel.nppryrengbe";R:4;s:33:"1202:zbirnpgvba.fj.frpbaqnel.anzr";R:4;s:29:"1202:zbirnpgvba.j.nppryrengbe";R:4;s:22:"1202:zbirnpgvba.j.anzr";R:4;s:39:"1202:zbirnpgvba.j.frpbaqnel.nppryrengbe";R:4;s:32:"1202:zbirnpgvba.j.frpbaqnel.anzr";R:4;s:19:"1202:arjnpgvba.anzr";R:4;s:26:"1202:arjnpgvba.nppryrengbe";R:4;s:27:"1202:arjrzcglzncnpgvba.anzr";R:4;s:20:"1202:bcranpgvba.anzr";R:4;s:27:"1202:bcranpgvba.nppryrengbe";R:4;s:20:"1202:cybjnpgvba.anzr";R:4;s:27:"1202:cybjnpgvba.nppryrengbe";R:4;s:27:"1202:cersreraprfnpgvba.anzr";R:4;s:34:"1202:cersreraprfnpgvba.nppryrengbe";R:4;s:20:"1202:dhvgnpgvba.anzr";R:4;s:27:"1202:dhvgnpgvba.nppryrengbe";R:4;s:25:"1202:erpbaarpgnpgvba.anzr";R:4;s:32:"1202:erpbaarpgnpgvba.nppryrengbe";R:4;s:22:"1202:eranzrnpgvba.anzr";R:4;s:29:"1202:eranzrnpgvba.nppryrengbe";R:4;s:30:"1202:ercbegeryvtvbanpgvba.anzr";R:4;s:37:"1202:ercbegeryvtvbanpgvba.nppryrengbe";R:4;s:28:"1202:ercbegynobhenpgvba.anzr";R:4;s:35:"1202:ercbegynobhenpgvba.nppryrengbe";R:4;s:28:"1202:ercbegpbybalnpgvba.anzr";R:4;s:35:"1202:ercbegpbybalnpgvba.nppryrengbe";R:4;s:29:"1202:ercbegsbervtanpgvba.anzr";R:4;s:36:"1202:ercbegsbervtanpgvba.nppryrengbe";R:4;s:28:"1202:ercbegvaqvnanpgvba.anzr";R:4;s:35:"1202:ercbegvaqvnanpgvba.nppryrengbe";R:4;s:30:"1202:ercbegpbaterffnpgvba.anzr";R:4;s:37:"1202:ercbegpbaterffnpgvba.nppryrengbe";R:4;s:30:"1202:ercbegzvyvgnelnpgvba.anzr";R:4;s:37:"1202:ercbegzvyvgnelnpgvba.nppryrengbe";R:4;s:27:"1202:ercbeganinynpgvba.anzr";R:4;s:34:"1202:ercbeganinynpgvba.nppryrengbe";R:4;s:27:"1202:ercbeggenqrnpgvba.anzr";R:4;s:34:"1202:ercbeggenqrnpgvba.nppryrengbe";R:4;s:26:"1202:ercbeggheanpgvba.anzr";R:4;s:33:"1202:ercbeggheanpgvba.nppryrengbe";R:4;s:34:"1202:ercbegerdhverzragfnpgvba.anzr";R:4;s:41:"1202:ercbegerdhverzragfnpgvba.nppryrengbe";R:4;s:31:"1202:ercbegrqhpngvbanpgvba.anzr";R:4;s:38:"1202:ercbegrqhpngvbanpgvba.nppryrengbe";R:4;s:27:"1202:ercbegpnetbnpgvba.anzr";R:4;s:34:"1202:ercbegpnetbnpgvba.nppryrengbe";R:4;s:33:"1202:ercbegrkcybengvbanpgvba.anzr";R:4;s:40:"1202:ercbegrkcybengvbanpgvba.nppryrengbe";R:4;s:29:"1202:ercbeguvfgbelnpgvba.anzr";R:4;s:36:"1202:ercbeguvfgbelnpgvba.nppryrengbe";R:4;s:32:"1202:ercbegcebqhpgvbanpgvba.anzr";R:4;s:39:"1202:ercbegcebqhpgvbanpgvba.nppryrengbe";R:4;s:32:"1202:ercbeguvtufpberfnpgvba.anzr";R:4;s:20:"1202:ebnqnpgvba.anzr";R:4;s:27:"1202:ebnqnpgvba.nppryrengbe";R:4;s:26:"1202:qvssvphyglnpgvba.anzr";R:4;s:33:"1202:qvssvphyglnpgvba.nppryrengbe";R:4;s:27:"1202:tnzrbcgvbafnpgvba.anzr";R:4;s:34:"1202:tnzrbcgvbafnpgvba.nppryrengbe";R:4;s:24:"1202:fubjznvanpgvba.anzr";R:4;s:35:"1202:znctrarengbebcgvbafnpgvba.anzr";R:4;s:42:"1202:znctrarengbebcgvbafnpgvba.nppryrengbe";R:4;s:22:"1202:ergvernpgvba.anzr";R:4;s:20:"1202:fnirnpgvba.anzr";R:4;s:27:"1202:fnirnpgvba.nppryrengbe";R:4;s:27:"1202:fnirnaqdhvgnpgvba.anzr";R:4;s:34:"1202:fnirnaqdhvgnpgvba.nppryrengbe";R:4;s:24:"1202:fpnyrzncnpgvba.anzr";R:4;s:22:"1202:fragelnpgvba.anzr";R:4;s:29:"1202:fragelnpgvba.nppryrengbe";R:4;s:25:"1202:gvyrcbchcnpgvba.anzr";R:4;s:32:"1202:gvyrcbchcnpgvba.nppryrengbe";R:4;s:24:"1202:fxvchavgnpgvba.anzr";R:4;s:31:"1202:fxvchavgnpgvba.nppryrengbe";R:4;s:30:"1202:gbttyrivrjzbqrnpgvba.anzr";R:4;s:37:"1202:gbttyrivrjzbqrnpgvba.nppryrengbe";R:4;s:26:"1202:genqrebhgrnpgvba.anzr";R:4;s:33:"1202:genqrebhgrnpgvba.nppryrengbe";R:4;s:22:"1202:haybnqnpgvba.anzr";R:4;s:29:"1202:haybnqnpgvba.nppryrengbe";R:4;s:20:"1202:jnvgnpgvba.anzr";R:4;s:27:"1202:jnvgnpgvba.nppryrengbe";R:4;s:22:"1202:mbbzvanpgvba.anzr";R:4;s:29:"1202:mbbzvanpgvba.nppryrengbe";R:4;s:23:"1202:mbbzbhgnpgvba.anzr";R:4;s:30:"1202:mbbzbhgnpgvba.nppryrengbe";R:4;s:17:"1202:npgvingrhavg";R:4;s:21:"1202:npgvingrnyyhavgf";R:4;s:16:"1202:sbegvslhavg";R:4;s:15:"1202:fragelhavg";R:4;s:20:"1202:pyrnehavgbeqref";R:4;s:14:"1202:yrnirgbja";R:4;s:20:"1202:pyrnefcrpvnyvgl";R:4;s:31:"1202:pyrnefcrpvnyvgl.nerlbhfher";R:4;s:31:"1202:pyrnefcrpvnyvgl.vzcbffvoyr";R:4;s:20:"1202:nffvtagbgrnpure";R:4;s:21:"1202:nffvtagenqrebhgr";R:4;s:25:"1202:zrah.havg.ncceragvpr";R:4;s:25:"1202:zrah.havg.rkcrevrapr";R:4;s:19:"1202:fubjcebqhpgvba";R:4;s:21:"1202:fubjcebqhpgvivgl";R:4;s:24:"1202:fgnghf.fgnegvattnzr";R:4;s:23:"1202:fgnghf.ybnqvattnzr";R:4;s:22:"1202:fgnghf.fnivattnzr";R:4;s:16:"1202:tnzrfgngr.0";R:4;s:16:"1202:tnzrfgngr.1";R:4;s:16:"1202:tnzrfgngr.2";R:4;s:12:"1202:erpehvg";R:4;s:13:"1202:chepunfr";R:4;s:10:"1202:genva";R:4;s:19:"1202:tbvatgbnzrevpn";R:4;s:18:"1202:tbvatgbrhebcr";R:4;s:9:"1202:fnvy";R:4;s:11:"1202:vacbeg";R:4;s:10:"1202:qbpxf";R:4;s:10:"1202:pnetb";R:4;s:10:"1202:fnyrf";R:4;s:12:"1202:baobneq";R:4;s:12:"1202:tbvatgb";R:4;s:17:"1202:arneybpngvba";R:4;s:17:"1202:anzrybpngvba";R:4;s:15:"1202:vaybpngvba";R:4;s:21:"1202:vaqvnafrggyrzrag";R:4;s:18:"1202:vaqvnapncvgny";R:4;s:26:"1202:vaqvnafrggyrzragbjare";R:4;s:23:"1202:vaqvnapncvgnybjare";R:4;s:12:"1202:pncvgny";R:4;s:14:"1202:tbyqgvgyr";R:4;s:8:"1202:gnk";R:4;s:9:"1202:tbyq";R:4;s:36:"1202:zbqry.novyvgl.pncghertbbqf.anzr";R:4;s:48:"1202:zbqry.novyvgl.pncghertbbqf.fubegqrfpevcgvba";R:4;s:34:"1202:zbqry.novyvgl.pneeltbbqf.anzr";R:4;s:46:"1202:zbqry.novyvgl.pneeltbbqf.fubegqrfpevcgvba";R:4;s:34:"1202:zbqry.novyvgl.pneelhavgf.anzr";R:4;s:46:"1202:zbqry.novyvgl.pneelhavgf.fubegqrfpevcgvba";R:4;s:35:"1202:zbqry.novyvgl.sbhaqpbybal.anzr";R:4;s:47:"1202:zbqry.novyvgl.sbhaqpbybal.fubegqrfpevcgvba";R:4;s:33:"1202:zbqry.novyvgl.aninyhavg.anzr";R:4;s:45:"1202:zbqry.novyvgl.aninyhavg.fubegqrfpevcgvba";R:4;s:43:"1202:zbqry.novyvgl.ryrpgsbhaqvatsngure.anzr";R:4;s:55:"1202:zbqry.novyvgl.ryrpgsbhaqvatsngure.fubegqrfpevcgvba";R:4;s:38:"1202:zbqry.novyvgl.pnaerpehvghavg.anzr";R:4;s:50:"1202:zbqry.novyvgl.pnaerpehvghavg.fubegqrfpevcgvba";R:4;s:47:"1202:zbqry.novyvgl.eblnyrkcrqvgvbanelsbepr.anzr";R:4;s:59:"1202:zbqry.novyvgl.eblnyrkcrqvgvbanelsbepr.fubegqrfpevcgvba";R:4;s:37:"1202:zbqry.novyvgl.nzohfucranygl.anzr";R:4;s:49:"1202:zbqry.novyvgl.nzohfucranygl.fubegqrfpevcgvba";R:4;s:31:"1202:zbqry.novyvgl.unfcbeg.anzr";R:4;s:43:"1202:zbqry.novyvgl.unfcbeg.fubegqrfpevcgvba";R:4;s:44:"1202:zbqry.novyvgl.vaqrcraqraprqrpynerq.anzr";R:4;s:56:"1202:zbqry.novyvgl.vaqrcraqraprqrpynerq.fubegqrfpevcgvba";R:4;s:30:"1202:zbqry.novyvgl.angvir.anzr";R:4;s:42:"1202:zbqry.novyvgl.angvir.fubegqrfpevcgvba";R:4;s:36:"1202:zbqry.novyvgl.zbirgbrhebcr.anzr";R:4;s:48:"1202:zbqry.novyvgl.zbirgbrhebcr.fubegqrfpevcgvba";R:4;s:30:"1202:zbqry.novyvgl.haqrnq.anzr";R:4;s:42:"1202:zbqry.novyvgl.haqrnq.fubegqrfpevcgvba";R:4;s:38:"1202:zbqry.novyvgl.cyhaqreangvirf.anzr";R:4;s:50:"1202:zbqry.novyvgl.cyhaqreangvirf.fubegqrfpevcgvba";R:4;s:45:"1202:zbqry.novyvgl.nibvqrkprffcebqhpgvba.anzr";R:4;s:57:"1202:zbqry.novyvgl.nibvqrkprffcebqhpgvba.fubegqrfpevcgvba";R:4;s:29:"1202:zbqry.novyvgl.ohvyq.anzr";R:4;s:41:"1202:zbqry.novyvgl.ohvyq.fubegqrfpevcgvba";R:4;s:38:"1202:zbqry.novyvgl.nhgbcebqhpgvba.anzr";R:4;s:50:"1202:zbqry.novyvgl.nhgbcebqhpgvba.fubegqrfpevcgvba";R:4;s:45:"1202:zbqry.novyvgl.rkcregfhfrpbaarpgvbaf.anzr";R:4;s:57:"1202:zbqry.novyvgl.rkcregfhfrpbaarpgvbaf.fubegqrfpevcgvba";R:4;s:29:"1202:zbqry.novyvgl.grnpu.anzr";R:4;s:41:"1202:zbqry.novyvgl.grnpu.fubegqrfpevcgvba";R:4;s:36:"1202:zbqry.novyvgl.obzoneqfuvcf.anzr";R:4;s:48:"1202:zbqry.novyvgl.obzoneqfuvcf.fubegqrfpevcgvba";R:4;s:38:"1202:zbqry.novyvgl.cebqhprvajngre.anzr";R:4;s:50:"1202:zbqry.novyvgl.cebqhprvajngre.fubegqrfpevcgvba";R:4;s:35:"1202:zbqry.novyvgl.ercnvehavgf.anzr";R:4;s:47:"1202:zbqry.novyvgl.ercnvehavgf.fubegqrfpevcgvba";R:4;s:30:"1202:zbqry.novyvgl.rkcbeg.anzr";R:4;s:42:"1202:zbqry.novyvgl.rkcbeg.fubegqrfpevcgvba";R:4;s:39:"1202:zbqry.novyvgl.qerffzvffvbanel.anzr";R:4;s:51:"1202:zbqry.novyvgl.qerffzvffvbanel.fubegqrfpevcgvba";R:4;s:35:"1202:zbqry.zbqvsvre.genqrobahf.anzr";R:4;s:47:"1202:zbqry.zbqvsvre.genqrobahf.fubegqrfpevcgvba";R:4;s:44:"1202:zbqry.zbqvsvre.angvirnynezzbqvsvre.anzr";R:4;s:56:"1202:zbqry.zbqvsvre.angvirnynezzbqvsvre.fubegqrfpevcgvba";R:4;s:45:"1202:zbqry.zbqvsvre.eryvtvbhfhaerfgobahf.anzr";R:4;s:57:"1202:zbqry.zbqvsvre.eryvtvbhfhaerfgobahf.fubegqrfpevcgvba";R:4;s:43:"1202:zbqry.zbqvsvre.angvirpbairegobahf.anzr";R:4;s:55:"1202:zbqry.zbqvsvre.angvirpbairegobahf.fubegqrfpevcgvba";R:4;s:38:"1202:zbqry.zbqvsvre.zbirzragobahf.anzr";R:4;s:50:"1202:zbqry.zbqvsvre.zbirzragobahf.fubegqrfpevcgvba";R:4;s:37:"1202:zbqry.zbqvsvre.obzoneqobahf.anzr";R:4;s:49:"1202:zbqry.zbqvsvre.obzoneqobahf.fubegqrfpevcgvba";R:4;s:32:"1202:zbqry.zbqvsvre.qrsrapr.anzr";R:4;s:44:"1202:zbqry.zbqvsvre.qrsrapr.fubegqrfpevcgvba";R:4;s:41:"1202:zbqry.zbqvsvre.jnerubhfrfgbentr.anzr";R:4;s:53:"1202:zbqry.zbqvsvre.jnerubhfrfgbentr.fubegqrfpevcgvba";R:4;s:48:"1202:zbqry.zbqvsvre.jnerubhfrfgbentr.qrfpevcgvba";R:4;s:42:"1202:zbqry.zbqvsvre.zvavzhzpbybalfvmr.anzr";R:4;s:54:"1202:zbqry.zbqvsvre.zvavzhzpbybalfvmr.fubegqrfpevcgvba";R:4;s:40:"1202:zbqry.zbqvsvre.oerrqvatqvivfbe.anzr";R:4;s:52:"1202:zbqry.zbqvsvre.oerrqvatqvivfbe.fubegqrfpevcgvba";R:4;s:39:"1202:zbqry.zbqvsvre.oerrqvatsnpgbe.anzr";R:4;s:51:"1202:zbqry.zbqvsvre.oerrqvatsnpgbe.fubegqrfpevcgvba";R:4;s:53:"1202:zbqry.zbqvsvre.pbafhzrbaylfhecyhfcebqhpgvba.anzr";R:4;s:65:"1202:zbqry.zbqvsvre.pbafhzrbaylfhecyhfcebqhpgvba.fubegqrfpevcgvba";R:4;s:39:"1202:zbqry.zbqvsvre.bssraprntnvafg.anzr";R:4;s:51:"1202:zbqry.zbqvsvre.bssraprntnvafg.fubegqrfpevcgvba";R:4;s:33:"1202:zbqry.pbybal.pbybavfgfgneirq";R:4;s:31:"1202:zbqry.pbybal.pbybalfgneirq";R:4;s:30:"1202:zbqry.pbybal.snzvarsrnerq";R:4;s:30:"1202:zbqry.pbybal.ohvyqarrqcbc";R:4;s:37:"1202:zbqry.pbybal.ohvyqnoyrarrqftbbqf";R:4;s:40:"1202:zbqry.pbybal.vafhssvpvragcebqhpgvba";R:4;s:29:"1202:zbqry.pbybal.pnaabgohvyq";R:4;s:31:"1202:zbqry.pbybal.ohvyqvaternql";R:4;s:37:"1202:zbqry.pbybal.abgohvyqvatnalguvat";R:4;s:29:"1202:zbqry.pbybal.arjpbybavfg";R:4;s:28:"1202:zbqry.pbybal.arjpbaireg";R:4;s:27:"1202:zbqry.pbybal.havgernql";R:4;s:28:"1202:zbqry.pbybal.havgpunatr";R:4;s:29:"1202:zbqry.pbybal.fbyvapernfr";R:4;s:29:"1202:zbqry.pbybal.fbyqrpernfr";R:4;s:24:"1202:zbqry.pbybal.fby100";R:4;s:23:"1202:zbqry.pbybal.fby50";R:4;s:28:"1202:zbqry.pbybal.ybfgfby100";R:4;s:27:"1202:zbqry.pbybal.ybfgfby50";R:4;s:35:"1202:zbqry.pbybal.irelonqtbireazrag";R:4;s:31:"1202:zbqry.pbybal.onqtbireazrag";R:4;s:37:"1202:zbqry.pbybal.tbireazragvzcebirq1";R:4;s:37:"1202:zbqry.pbybal.tbireazragvzcebirq2";R:4;s:31:"1202:zbqry.pbybal.jbexrerivpgrq";R:4;s:30:"1202:zbqry.havg.neevirvarhebcr";R:4;s:30:"1202:zbqry.havg.vaqvnagernfher";R:4;s:26:"1202:zbqry.havg.vaqvnaenvq";R:4;s:30:"1202:zbqry.havg.vaqvnafhecevfr";R:4;s:30:"1202:zbqry.havg.pbybalpncgherq";R:4;s:32:"1202:zbqry.havg.pbybalpncgherqol";R:4;s:29:"1202:zbqry.havg.pbybaloheavat";R:4;s:35:"1202:zbqry.havg.pbybaloheavat.bgure";R:4;s:28:"1202:zbqry.havg.havgcebzbgrq";R:4;s:28:"1202:zbqry.havg.havgrqhpngrq";R:4;s:33:"1202:zbqry.havg.rdhvczragpncgherq";R:4;s:26:"1202:zbqry.havg.rkcrevrapr";R:4;s:45:"1202:zbqry.havg.rarzlfuvcqnzntrqolobzoneqzrag";R:4;s:40:"1202:zbqry.havg.fuvcqnzntrqolobzoneqzrag";R:4;s:26:"1202:zbqry.havg.fuvcrinqrq";R:4;s:31:"1202:zbqry.havg.rarzlfuvcrinqrq";R:4;s:27:"1202:zbqry.havg.fuvcqnzntrq";R:4;s:32:"1202:zbqry.havg.rarzlfuvcqnzntrq";R:4;s:24:"1202:zbqry.havg.fuvcfhax";R:4;s:29:"1202:zbqry.havg.rarzlfuvcfhax";R:4;s:37:"1202:zbqry.havg.fuvcrinqrqobzoneqzrag";R:4;s:37:"1202:zbqry.havg.fuvcfhaxolobzoneqzrag";R:4;s:28:"1202:zbqry.havg.havgercnverq";R:4;s:22:"1202:zbqry.havg.fybjrq";R:4;s:31:"1202:zbqry.havg.havgfynhtugrerq";R:4;s:29:"1202:zbqry.havg.havgjvapbybal";R:4;s:33:"1202:zbqry.havg.havgybfrnhgbrdhvc";R:4;s:27:"1202:zbqry.havg.havgqrzbgrq";R:4;s:36:"1202:zbqry.havg.havgqrzbgrqgbhanezrq";R:4;s:29:"1202:zbqry.havg.havgqrfgeblrq";R:4;s:28:"1202:zbqry.havg.havgpncgherq";R:4;s:36:"1202:zbqry.havg.arjpbairegsebznggnpx";R:4;s:44:"1202:zbqry.havg.pnfuvagernfhergenva.pbybavny";R:4;s:47:"1202:zbqry.havg.pnfuvagernfhergenva.vaqrcraqrag";R:4;s:50:"1202:zbqry.havg.pnfuvagernfhergenva.bgure.pbybavny";R:4;s:53:"1202:zbqry.havg.pnfuvagernfhergenva.bgure.vaqrcraqrag";R:4;s:20:"1202:zbqry.havg.tvsg";R:4;s:27:"1202:zbqry.havg.abzbergbbyf";R:4;s:31:"1202:zbqry.havg.ohvyqvatqnzntrq";R:4;s:27:"1202:zbqry.havg.tbbqffgbyra";R:4;s:29:"1202:zbqry.havg.vaqvnacyhaqre";R:4;s:28:"1202:zbqry.havg.oheazvffvbaf";R:4;s:32:"1202:zbqry.havg.nhgbzngvpqrsrapr";R:4;s:25:"1202:zbqry.havg.nggevgvba";R:4;s:33:"1202:zbqry.havg.pbasvezpnapryjbex";R:4;s:33:"1202:zbqry.havg.bpphcngvba.npgvir";R:4;s:44:"1202:zbqry.havg.bpphcngvba.npgvirabzbirfyrsg";R:4;s:36:"1202:zbqry.havg.bpphcngvba.sbegvsvrq";R:4;s:37:"1202:zbqry.havg.bpphcngvba.sbegvslvat";R:4;s:33:"1202:zbqry.havg.bpphcngvba.fragel";R:4;s:36:"1202:zbqry.havg.bpphcngvba.va_pbybal";R:4;s:36:"1202:zbqry.havg.bpphcngvba.vzcebivat";R:4;s:38:"1202:zbqry.havg.bpphcngvba.haqreercnve";R:4;s:34:"1202:zbqry.havg.bpphcngvba.fxvccrq";R:4;s:39:"1202:zbqry.havg.bpphcngvba.vagenqrebhgr";R:4;s:41:"1202:zbqry.havg.bpphcngvba.tbvatfbzrjurer";R:4;s:36:"1202:zbqry.havg.bpphcngvba.gb_rhebcr";R:4;s:37:"1202:zbqry.havg.bpphcngvba.gb_nzrevpn";R:4;s:34:"1202:zbqry.havg.bpphcngvba.haxabja";R:4;s:34:"1202:zbqry.ohvyqvat.jnerubhfrrzcgl";R:4;s:33:"1202:zbqry.ohvyqvat.jnerubhfrshyy";R:4;s:37:"1202:zbqry.ohvyqvat.jnerubhfrbireshyy";R:4;s:34:"1202:zbqry.ohvyqvat.jnerubhfrjnfgr";R:4;s:37:"1202:zbqry.ohvyqvat.jnerubhfrfbbashyy";R:4;s:34:"1202:zbqry.ohvyqvat.abgrabhtuvachg";R:4;s:29:"1202:zbqry.ohvyqvat.abfghqrag";R:4;s:26:"1202:zbqry.rhebcr.rzvtengr";R:4;s:28:"1202:zbqry.rhebcr.cnlneernef";R:4;s:32:"1202:zbqry.rhebcr.pnagcnlneernef";R:4;s:46:"1202:zbqry.cynlre.sbhaqvatsngurewbvarqpbaterff";R:4;s:29:"1202:zbqry.cynlre.fbyvapernfr";R:4;s:29:"1202:zbqry.cynlre.fbyqrpernfr";R:4;s:30:"1202:zbqry.cynlre.vaqrcraqrapr";R:4;s:39:"1202:zbqry.cynlre.vaqrcraqrapr.naabhapr";R:4;s:42:"1202:zbqry.cynlre.vaqrcraqrapr.havgffrvmrq";R:4;s:44:"1202:zbqry.cynlre.vaqrcraqrapr.havgfnpdhverq";R:4;s:39:"1202:zbqry.cynlre.pbagvaragnynezlzhfgre";R:4;s:41:"1202:zbqry.rirag.qrpynervaqrcraqrapr.anzr";R:4;s:21:"1202:zbqry.fgnapr.jne";R:4;s:23:"1202:zbqry.fgnapr.crnpr";R:4;s:28:"1202:zbqry.fgnapr.prnfr_sver";R:4;s:26:"1202:zbqry.fgnapr.nyyvnapr";R:4;s:31:"1202:zbqry.znexrg.cevprvapernfr";R:4;s:31:"1202:zbqry.znexrg.cevprqrpernfr";R:4;s:29:"1202:zbqry.znexrg.vaqrcraqrag";R:4;s:39:"1202:zbqry.zbanepu.npgvba.envfr_gnk_jne";R:4;s:43:"1202:zbqry.zbanepu.npgvba.envfr_gnk_jne.lrf";R:4;s:42:"1202:zbqry.zbanepu.npgvba.envfr_gnk_jne.ab";R:4;s:39:"1202:zbqry.zbanepu.npgvba.envfr_gnk_npg";R:4;s:43:"1202:zbqry.zbanepu.npgvba.envfr_gnk_npg.lrf";R:4;s:42:"1202:zbqry.zbanepu.npgvba.envfr_gnk_npg.ab";R:4;s:43:"1202:zbqry.zbanepu.pbybaltbbqfcnegl.uneobhe";R:4;s:46:"1202:zbqry.zbanepu.pbybaltbbqfcnegl.ynaqybpxrq";R:4;s:39:"1202:zbqry.zbanepu.npgvba.ybjre_gnk_jne";R:4;s:42:"1202:zbqry.zbanepu.npgvba.ybjre_gnk_jne.ab";R:4;s:41:"1202:zbqry.zbanepu.npgvba.ybjre_gnk_bgure";R:4;s:44:"1202:zbqry.zbanepu.npgvba.ybjre_gnk_bgure.ab";R:4;s:35:"1202:zbqry.zbanepu.npgvba.ybjre_gnk";R:4;s:38:"1202:zbqry.zbanepu.npgvba.ybjre_gnk.ab";R:4;s:35:"1202:zbqry.zbanepu.npgvba.jnvir_gnk";R:4;s:38:"1202:zbqry.zbanepu.npgvba.jnvir_gnk.ab";R:4;s:35:"1202:zbqry.zbanepu.npgvba.sbepr_gnk";R:4;s:38:"1202:zbqry.zbanepu.npgvba.sbepr_gnk.ab";R:4;s:36:"1202:zbqry.zbanepu.npgvba.nqq_gb_ers";R:4;s:39:"1202:zbqry.zbanepu.npgvba.nqq_gb_ers.ab";R:4;s:37:"1202:zbqry.zbanepu.npgvba.qrpyner_jne";R:4;s:40:"1202:zbqry.zbanepu.npgvba.qrpyner_jne.ab";R:4;s:38:"1202:zbqry.zbanepu.npgvba.fhccbeg_ynaq";R:4;s:41:"1202:zbqry.zbanepu.npgvba.fhccbeg_ynaq.ab";R:4;s:37:"1202:zbqry.zbanepu.npgvba.fhccbeg_frn";R:4;s:40:"1202:zbqry.zbanepu.npgvba.fhccbeg_frn.ab";R:4;s:43:"1202:zbqry.zbanepu.npgvba.bssre_zrepranevrf";R:4;s:47:"1202:zbqry.zbanepu.npgvba.bssre_zrepranevrf.lrf";R:4;s:46:"1202:zbqry.zbanepu.npgvba.bssre_zrepranevrf.ab";R:4;s:37:"1202:zbqry.zbanepu.npgvba.qvfcyrnfher";R:4;s:40:"1202:zbqry.zbanepu.npgvba.qvfcyrnfher.ab";R:4;s:26:"1202:zbqry.zrffntr.qrsnhyg";R:4;s:26:"1202:zbqry.zrffntr.jneavat";R:4;s:34:"1202:zbqry.zrffntr.fbaf_bs_yvoregl";R:4;s:40:"1202:zbqry.zrffntr.tbireazrag_rssvpvrapl";R:4;s:37:"1202:zbqry.zrffntr.jnerubhfr_pncnpvgl";R:4;s:32:"1202:zbqry.zrffntr.havg_vzcebirq";R:4;s:31:"1202:zbqry.zrffntr.havg_qrzbgrq";R:4;s:28:"1202:zbqry.zrffntr.havg_ybfg";R:4;s:29:"1202:zbqry.zrffntr.havg_nqqrq";R:4;s:37:"1202:zbqry.zrffntr.ohvyqvat_pbzcyrgrq";R:4;s:36:"1202:zbqry.zrffntr.sbervta_qvcybznpl";R:4;s:32:"1202:zbqry.zrffntr.znexrg_cevprf";R:4;s:35:"1202:zbqry.zrffntr.ybfg_pvgl_ehzbhe";R:4;s:32:"1202:zbqry.zrffntr.zvffvat_tbbqf";R:4;s:27:"1202:zbqry.zrffntr.ghgbevny";R:4;s:32:"1202:zbqry.zrffntr.pbzong_erfhyg";R:4;s:29:"1202:zbqry.zrffntr.tvsg_tbbqf";R:4;s:26:"1202:zbqry.zrffntr.qrznaqf";R:4;s:33:"1202:zbqry.zrffntr.tbbqf_zbirzrag";R:4;s:25:"1202:zbqry.zrffntr.vtaber";R:4;s:25:"1202:zbqry.zrffntr.svygre";R:4;s:40:"1202:zbqry.novyvgl.ohvyqphfgbzubhfr.anzr";R:4;s:36:"1202:zbqry.novyvgl.ohvyqsnpgbel.anzr";R:4;s:27:"1202:zbqry.gvyr.cynvaf.anzr";R:4;s:30:"1202:zbqry.gvyr.tenffynaq.anzr";R:4;s:28:"1202:zbqry.gvyr.cenvevr.anzr";R:4;s:29:"1202:zbqry.gvyr.fninaanu.anzr";R:4;s:26:"1202:zbqry.gvyr.znefu.anzr";R:4;s:26:"1202:zbqry.gvyr.fjnzc.anzr";R:4;s:27:"1202:zbqry.gvyr.qrfreg.anzr";R:4;s:27:"1202:zbqry.gvyr.ghaqen.anzr";R:4;s:32:"1202:zbqry.gvyr.zvkrqsberfg.anzr";R:4;s:34:"1202:zbqry.gvyr.pbavsresberfg.anzr";R:4;s:36:"1202:zbqry.gvyr.oebnqyrnssberfg.anzr";R:4;s:35:"1202:zbqry.gvyr.gebcvpnysberfg.anzr";R:4;s:34:"1202:zbqry.gvyr.jrgynaqsberfg.anzr";R:4;s:31:"1202:zbqry.gvyr.envasberfg.anzr";R:4;s:32:"1202:zbqry.gvyr.fpehosberfg.anzr";R:4;s:33:"1202:zbqry.gvyr.obernysberfg.anzr";R:4;s:27:"1202:zbqry.gvyr.nepgvp.anzr";R:4;s:26:"1202:zbqry.gvyr.bprna.anzr";R:4;s:25:"1202:zbqry.gvyr.ynxr.anzr";R:4;s:29:"1202:zbqry.gvyr.uvtufrnf.anzr";R:4;s:26:"1202:zbqry.gvyr.uvyyf.anzr";R:4;s:30:"1202:zbqry.gvyr.zbhagnvaf.anzr";R:4;s:31:"1202:zbqry.gvyr.terngevire.anzr";R:4;s:33:"1202:zbqry.gvyr.erfbheprrkunhfgrq";R:4;s:15:"1202:harkcyberq";R:4;s:10:"1202:evire";R:4;s:15:"1202:zvabeevire";R:4;s:15:"1202:znwbeevire";R:4;s:38:"1202:zbqry.bcgvba.thvfubjghgbevny.anzr";R:4;s:50:"1202:zbqry.bcgvba.thvfubjghgbevny.fubegqrfpevcgvba";R:4;s:34:"1202:zbqry.gvyr.cynvaf.qrfpevcgvba";R:4;s:37:"1202:zbqry.gvyr.tenffynaq.qrfpevcgvba";R:4;s:35:"1202:zbqry.gvyr.cenvevr.qrfpevcgvba";R:4;s:36:"1202:zbqry.gvyr.fninaanu.qrfpevcgvba";R:4;s:33:"1202:zbqry.gvyr.znefu.qrfpevcgvba";R:4;s:33:"1202:zbqry.gvyr.fjnzc.qrfpevcgvba";R:4;s:34:"1202:zbqry.gvyr.qrfreg.qrfpevcgvba";R:4;s:34:"1202:zbqry.gvyr.ghaqen.qrfpevcgvba";R:4;s:39:"1202:zbqry.gvyr.zvkrqsberfg.qrfpevcgvba";R:4;s:41:"1202:zbqry.gvyr.pbavsresberfg.qrfpevcgvba";R:4;s:43:"1202:zbqry.gvyr.oebnqyrnssberfg.qrfpevcgvba";R:4;s:42:"1202:zbqry.gvyr.gebcvpnysberfg.qrfpevcgvba";R:4;s:41:"1202:zbqry.gvyr.jrgynaqsberfg.qrfpevcgvba";R:4;s:38:"1202:zbqry.gvyr.envasberfg.qrfpevcgvba";R:4;s:39:"1202:zbqry.gvyr.fpehosberfg.qrfpevcgvba";R:4;s:40:"1202:zbqry.gvyr.obernysberfg.qrfpevcgvba";R:4;s:34:"1202:zbqry.gvyr.nepgvp.qrfpevcgvba";R:4;s:33:"1202:zbqry.gvyr.bprna.qrfpevcgvba";R:4;s:36:"1202:zbqry.gvyr.uvtufrnf.qrfpevcgvba";R:4;s:33:"1202:zbqry.gvyr.uvyyf.qrfpevcgvba";R:4;s:37:"1202:zbqry.gvyr.zbhagnvaf.qrfpevcgvba";R:4;s:38:"1202:zbqry.gvyr.terngevire.qrfpevcgvba";R:4;s:32:"1202:zbqry.gvyr.ynxr.qrfpevcgvba";R:4;s:29:"1202:zbqry.erfbhepr.tnzr.anzr";R:4;s:33:"1202:zbqry.erfbhepr.zvarenyf.anzr";R:4;s:28:"1202:zbqry.erfbhepr.ber.anzr";R:4;s:31:"1202:zbqry.erfbhepr.fvyire.anzr";R:4;s:31:"1202:zbqry.erfbhepr.yhzore.anzr";R:4;s:29:"1202:zbqry.erfbhepr.shef.anzr";R:4;s:32:"1202:zbqry.erfbhepr.gbonppb.anzr";R:4;s:30:"1202:zbqry.erfbhepr.fhtne.anzr";R:4;s:31:"1202:zbqry.erfbhepr.pbggba.anzr";R:4;s:30:"1202:zbqry.erfbhepr.bnfvf.anzr";R:4;s:30:"1202:zbqry.erfbhepr.tenva.anzr";R:4;s:29:"1202:zbqry.erfbhepr.svfu.anzr";R:4;s:36:"1202:zbqry.erfbhepr.tnzr.qrfpevcgvba";R:4;s:40:"1202:zbqry.erfbhepr.zvarenyf.qrfpevcgvba";R:4;s:35:"1202:zbqry.erfbhepr.ber.qrfpevcgvba";R:4;s:38:"1202:zbqry.erfbhepr.fvyire.qrfpevcgvba";R:4;s:38:"1202:zbqry.erfbhepr.yhzore.qrfpevcgvba";R:4;s:36:"1202:zbqry.erfbhepr.shef.qrfpevcgvba";R:4;s:39:"1202:zbqry.erfbhepr.gbonppb.qrfpevcgvba";R:4;s:37:"1202:zbqry.erfbhepr.fhtne.qrfpevcgvba";R:4;s:38:"1202:zbqry.erfbhepr.pbggba.qrfpevcgvba";R:4;s:37:"1202:zbqry.erfbhepr.bnfvf.qrfpevcgvba";R:4;s:37:"1202:zbqry.erfbhepr.tenva.qrfpevcgvba";R:4;s:36:"1202:zbqry.erfbhepr.svfu.qrfpevcgvba";R:4;s:20:"1202:zbqry.havg.glcr";R:4;s:33:"1202:zbqry.havg.serrpbybavfg.anzr";R:4;s:33:"1202:zbqry.havg.rkcregsnezre.anzr";R:4;s:36:"1202:zbqry.havg.rkcregsvfurezna.anzr";R:4;s:37:"1202:zbqry.havg.rkcregshegenccre.anzr";R:4;s:38:"1202:zbqry.havg.rkcregfvyirezvare.anzr";R:4;s:37:"1202:zbqry.havg.rkcregyhzorewnpx.anzr";R:4;s:35:"1202:zbqry.havg.rkcregberzvare.anzr";R:4;s:39:"1202:zbqry.havg.znfgrefhtnecynagre.anzr";R:4;s:40:"1202:zbqry.havg.znfgrepbggbacynagre.anzr";R:4;s:41:"1202:zbqry.havg.znfgregbonppbcynagre.anzr";R:4;s:38:"1202:zbqry.havg.sveroenaqcernpure.anzr";R:4;s:36:"1202:zbqry.havg.znfgrepnecragre.anzr";R:4;s:36:"1202:zbqry.havg.znfgreqvfgvyyre.anzr";R:4;s:33:"1202:zbqry.havg.znfgrejrnire.anzr";R:4;s:38:"1202:zbqry.havg.znfgregbonppbavfg.anzr";R:4;s:36:"1202:zbqry.havg.znfgreshegenqre.anzr";R:4;s:37:"1202:zbqry.havg.znfgreoynpxfzvgu.anzr";R:4;s:35:"1202:zbqry.havg.znfgrethafzvgu.anzr";R:4;s:34:"1202:zbqry.havg.frnfbarqfpbhg.anzr";R:4;s:33:"1202:zbqry.havg.uneqlcvbarre.anzr";R:4;s:36:"1202:zbqry.havg.uneqlcvbarre.cvbarre";R:4;s:35:"1202:zbqry.havg.irgrenafbyqvre.anzr";R:4;s:38:"1202:zbqry.havg.irgrenafbyqvre.fbyqvre";R:4;s:38:"1202:zbqry.havg.irgrenafbyqvre.qentbba";R:4;s:37:"1202:zbqry.havg.wrfhvgzvffvbanel.anzr";R:4;s:43:"1202:zbqry.havg.wrfhvgzvffvbanel.zvffvbanel";R:4;s:38:"1202:zbqry.havg.vaqragherqfreinag.anzr";R:4;s:34:"1202:zbqry.havg.crgglpevzvany.anzr";R:4;s:34:"1202:zbqry.havg.vaqvnapbaireg.anzr";R:4;s:26:"1202:zbqry.havg.oenir.anzr";R:4;s:29:"1202:zbqry.havg.oenir.fbyqvre";R:4;s:29:"1202:zbqry.havg.oenir.qentbba";R:4;s:36:"1202:zbqry.havg.pbybavnyerthyne.anzr";R:4;s:39:"1202:zbqry.havg.pbybavnyerthyne.fbyqvre";R:4;s:39:"1202:zbqry.havg.pbybavnyerthyne.qentbba";R:4;s:33:"1202:zbqry.havg.xvatferthyne.anzr";R:4;s:36:"1202:zbqry.havg.xvatferthyne.fbyqvre";R:4;s:36:"1202:zbqry.havg.xvatferthyne.qentbba";R:4;s:28:"1202:zbqry.havg.pneniry.anzr";R:4;s:28:"1202:zbqry.havg.sevtngr.anzr";R:4;s:28:"1202:zbqry.havg.tnyyrba.anzr";R:4;s:28:"1202:zbqry.havg.znabjne.anzr";R:4;s:32:"1202:zbqry.havg.zrepunagzna.anzr";R:4;s:30:"1202:zbqry.havg.cevingrre.anzr";R:4;s:37:"1202:zbqry.havg.qnzntrqnegvyyrel.anzr";R:4;s:34:"1202:zbqry.havg.gernfhergenva.anzr";R:4;s:31:"1202:zbqry.havg.jntbagenva.anzr";R:4;s:29:"1202:zbqry.havg.zvyxznvq.anzr";R:4;s:35:"1202:zbqry.havg.ryqrefgngrfzna.anzr";R:4;s:40:"1202:zbqry.havg.uneqlcvbarre.abzbergbbyf";R:4;s:39:"1202:zbqry.havg.irgrenafbyqvre.pncgherq";R:4;s:30:"1202:zbqry.havg.negvyyrel.anzr";R:4;s:33:"1202:zbqry.havg.negvyyrel.qrzbgrq";R:4;s:42:"1202:zbqry.havg.qnzntrqnegvyyrel.qrfgeblrq";R:4;s:29:"1202:zbqry.havg.eriratre.anzr";R:4;s:35:"1202:zbqry.havg.sylvatqhgpuzna.anzr";R:4;s:27:"1202:zbqry.havg.haqrnq.anzr";R:4;s:26:"1202:zbqry.havg.fpbhg.anzr";R:4;s:28:"1202:zbqry.havg.cvbarre.anzr";R:4;s:28:"1202:zbqry.havg.fbyqvre.anzr";R:4;s:28:"1202:zbqry.havg.qentbba.anzr";R:4;s:31:"1202:zbqry.havg.zvffvbanel.anzr";R:4;s:25:"1202:zbqry.havg.ebyr.anzr";R:4;s:28:"1202:zbqry.havg.ebyr.qrsnhyg";R:4;s:26:"1202:zbqry.havg.ebyr.fpbhg";R:4;s:28:"1202:zbqry.havg.ebyr.cvbarre";R:4;s:28:"1202:zbqry.havg.ebyr.fbyqvre";R:4;s:28:"1202:zbqry.havg.ebyr.qentbba";R:4;s:31:"1202:zbqry.havg.ebyr.zvffvbanel";R:4;s:28:"1202:zbqry.havg.hanezrq.anzr";R:4;s:26:"1202:zbqry.havg.nezrq.anzr";R:4;s:28:"1202:zbqry.havg.zbhagrq.anzr";R:4;s:26:"1202:zbqry.havg.angvbahavg";R:4;s:25:"1202:zbqry.havg.jbexvatnf";R:4;s:38:"1202:zbqry.havg.rkcregsnezre.jbexvatnf";R:4;s:41:"1202:zbqry.havg.rkcregsvfurezna.jbexvatnf";R:4;s:42:"1202:zbqry.havg.rkcregshegenccre.jbexvatnf";R:4;s:43:"1202:zbqry.havg.rkcregfvyirezvare.jbexvatnf";R:4;s:42:"1202:zbqry.havg.rkcregyhzorewnpx.jbexvatnf";R:4;s:40:"1202:zbqry.havg.rkcregberzvare.jbexvatnf";R:4;s:44:"1202:zbqry.havg.znfgrefhtnecynagre.jbexvatnf";R:4;s:45:"1202:zbqry.havg.znfgrepbggbacynagre.jbexvatnf";R:4;s:46:"1202:zbqry.havg.znfgregbonppbcynagre.jbexvatnf";R:4;s:43:"1202:zbqry.havg.sveroenaqcernpure.jbexvatnf";R:4;s:40:"1202:zbqry.havg.ryqrefgngrfzna.jbexvatnf";R:4;s:41:"1202:zbqry.havg.znfgrepnecragre.jbexvatnf";R:4;s:41:"1202:zbqry.havg.znfgreqvfgvyyre.jbexvatnf";R:4;s:38:"1202:zbqry.havg.znfgrejrnire.jbexvatnf";R:4;s:43:"1202:zbqry.havg.znfgregbonppbavfg.jbexvatnf";R:4;s:41:"1202:zbqry.havg.znfgreshegenqre.jbexvatnf";R:4;s:42:"1202:zbqry.havg.znfgreoynpxfzvgu.jbexvatnf";R:4;s:40:"1202:zbqry.havg.znfgrethafzvgu.jbexvatnf";R:4;s:39:"1202:zbqry.havg.frnfbarqfpbhg.jbexvatnf";R:4;s:38:"1202:zbqry.havg.uneqlcvbarre.jbexvatnf";R:4;s:40:"1202:zbqry.havg.irgrenafbyqvre.jbexvatnf";R:4;s:42:"1202:zbqry.havg.wrfhvgzvffvbanel.jbexvatnf";R:4;s:40:"1202:zbqry.havg.serrpbybavfg.qrfpevcgvba";R:4;s:40:"1202:zbqry.havg.rkcregsnezre.qrfpevcgvba";R:4;s:43:"1202:zbqry.havg.rkcregsvfurezna.qrfpevcgvba";R:4;s:44:"1202:zbqry.havg.rkcregshegenccre.qrfpevcgvba";R:4;s:45:"1202:zbqry.havg.rkcregfvyirezvare.qrfpevcgvba";R:4;s:44:"1202:zbqry.havg.rkcregyhzorewnpx.qrfpevcgvba";R:4;s:42:"1202:zbqry.havg.rkcregberzvare.qrfpevcgvba";R:4;s:46:"1202:zbqry.havg.znfgrefhtnecynagre.qrfpevcgvba";R:4;s:47:"1202:zbqry.havg.znfgrepbggbacynagre.qrfpevcgvba";R:4;s:48:"1202:zbqry.havg.znfgregbonppbcynagre.qrfpevcgvba";R:4;s:45:"1202:zbqry.havg.sveroenaqcernpure.qrfpevcgvba";R:4;s:42:"1202:zbqry.havg.ryqrefgngrfzna.qrfpevcgvba";R:4;s:43:"1202:zbqry.havg.znfgrepnecragre.qrfpevcgvba";R:4;s:43:"1202:zbqry.havg.znfgreqvfgvyyre.qrfpevcgvba";R:4;s:40:"1202:zbqry.havg.znfgrejrnire.qrfpevcgvba";R:4;s:45:"1202:zbqry.havg.znfgregbonppbavfg.qrfpevcgvba";R:4;s:43:"1202:zbqry.havg.znfgreshegenqre.qrfpevcgvba";R:4;s:44:"1202:zbqry.havg.znfgreoynpxfzvgu.qrfpevcgvba";R:4;s:42:"1202:zbqry.havg.znfgrethafzvgu.qrfpevcgvba";R:4;s:41:"1202:zbqry.havg.frnfbarqfpbhg.qrfpevcgvba";R:4;s:40:"1202:zbqry.havg.uneqlcvbarre.qrfpevcgvba";R:4;s:42:"1202:zbqry.havg.irgrenafbyqvre.qrfpevcgvba";R:4;s:44:"1202:zbqry.havg.wrfhvgzvffvbanel.qrfpevcgvba";R:4;s:45:"1202:zbqry.havg.vaqragherqfreinag.qrfpevcgvba";R:4;s:41:"1202:zbqry.havg.crgglpevzvany.qrfpevcgvba";R:4;s:41:"1202:zbqry.havg.vaqvnapbaireg.qrfpevcgvba";R:4;s:33:"1202:zbqry.havg.oenir.qrfpevcgvba";R:4;s:43:"1202:zbqry.havg.pbybavnyerthyne.qrfpevcgvba";R:4;s:40:"1202:zbqry.havg.xvatferthyne.qrfpevcgvba";R:4;s:35:"1202:zbqry.havg.pneniry.qrfpevcgvba";R:4;s:35:"1202:zbqry.havg.sevtngr.qrfpevcgvba";R:4;s:35:"1202:zbqry.havg.tnyyrba.qrfpevcgvba";R:4;s:35:"1202:zbqry.havg.znabjne.qrfpevcgvba";R:4;s:39:"1202:zbqry.havg.zrepunagzna.qrfpevcgvba";R:4;s:37:"1202:zbqry.havg.cevingrre.qrfpevcgvba";R:4;s:37:"1202:zbqry.havg.negvyyrel.qrfpevcgvba";R:4;s:44:"1202:zbqry.havg.qnzntrqnegvyyrel.qrfpevcgvba";R:4;s:41:"1202:zbqry.havg.gernfhergenva.qrfpevcgvba";R:4;s:38:"1202:zbqry.havg.jntbagenva.qrfpevcgvba";R:4;s:36:"1202:zbqry.havg.zvyxznvq.qrfpevcgvba";R:4;s:36:"1202:zbqry.havg.eriratre.qrfpevcgvba";R:4;s:42:"1202:zbqry.havg.sylvatqhgpuzna.qrfpevcgvba";R:4;s:34:"1202:zbqry.havg.haqrnq.qrfpevcgvba";R:4;s:35:"1202:zbqry.havg.cvbarre.qrfpevcgvba";R:4;s:35:"1202:zbqry.havg.fbyqvre.qrfpevcgvba";R:4;s:35:"1202:zbqry.havg.qentbba.qrfpevcgvba";R:4;s:33:"1202:zbqry.havg.fpbhg.qrfpevcgvba";R:4;s:38:"1202:zbqry.havg.zvffvbanel.qrfpevcgvba";R:4;s:26:"1202:zbqry.tbbqf.sbbq.anzr";R:4;s:28:"1202:zbqry.tbbqf.sbbq.jbexnf";R:4;s:31:"1202:zbqry.tbbqf.sbbq.jbexvatnf";R:4;s:27:"1202:zbqry.tbbqf.tenva.anzr";R:4;s:29:"1202:zbqry.tbbqf.tenva.jbexnf";R:4;s:32:"1202:zbqry.tbbqf.tenva.jbexvatnf";R:4;s:26:"1202:zbqry.tbbqf.zrng.anzr";R:4;s:28:"1202:zbqry.tbbqf.zrng.jbexnf";R:4;s:31:"1202:zbqry.tbbqf.zrng.jbexvatnf";R:4;s:26:"1202:zbqry.tbbqf.svfu.anzr";R:4;s:28:"1202:zbqry.tbbqf.svfu.jbexnf";R:4;s:31:"1202:zbqry.tbbqf.svfu.jbexvatnf";R:4;s:27:"1202:zbqry.tbbqf.fhtne.anzr";R:4;s:29:"1202:zbqry.tbbqf.fhtne.jbexnf";R:4;s:32:"1202:zbqry.tbbqf.fhtne.jbexvatnf";R:4;s:29:"1202:zbqry.tbbqf.gbonppb.anzr";R:4;s:31:"1202:zbqry.tbbqf.gbonppb.jbexnf";R:4;s:34:"1202:zbqry.tbbqf.gbonppb.jbexvatnf";R:4;s:28:"1202:zbqry.tbbqf.pbggba.anzr";R:4;s:30:"1202:zbqry.tbbqf.pbggba.jbexnf";R:4;s:33:"1202:zbqry.tbbqf.pbggba.jbexvatnf";R:4;s:26:"1202:zbqry.tbbqf.shef.anzr";R:4;s:28:"1202:zbqry.tbbqf.shef.jbexnf";R:4;s:31:"1202:zbqry.tbbqf.shef.jbexvatnf";R:4;s:28:"1202:zbqry.tbbqf.yhzore.anzr";R:4;s:30:"1202:zbqry.tbbqf.yhzore.jbexnf";R:4;s:33:"1202:zbqry.tbbqf.yhzore.jbexvatnf";R:4;s:25:"1202:zbqry.tbbqf.ber.anzr";R:4;s:27:"1202:zbqry.tbbqf.ber.jbexnf";R:4;s:30:"1202:zbqry.tbbqf.ber.jbexvatnf";R:4;s:28:"1202:zbqry.tbbqf.fvyire.anzr";R:4;s:30:"1202:zbqry.tbbqf.fvyire.jbexnf";R:4;s:33:"1202:zbqry.tbbqf.fvyire.jbexvatnf";R:4;s:25:"1202:zbqry.tbbqf.ehz.anzr";R:4;s:27:"1202:zbqry.tbbqf.ehz.jbexnf";R:4;s:30:"1202:zbqry.tbbqf.ehz.jbexvatnf";R:4;s:28:"1202:zbqry.tbbqf.pvtnef.anzr";R:4;s:30:"1202:zbqry.tbbqf.pvtnef.jbexnf";R:4;s:33:"1202:zbqry.tbbqf.pvtnef.jbexvatnf";R:4;s:27:"1202:zbqry.tbbqf.pybgu.anzr";R:4;s:29:"1202:zbqry.tbbqf.pybgu.jbexnf";R:4;s:32:"1202:zbqry.tbbqf.pybgu.jbexvatnf";R:4;s:27:"1202:zbqry.tbbqf.pbngf.anzr";R:4;s:29:"1202:zbqry.tbbqf.pbngf.jbexnf";R:4;s:32:"1202:zbqry.tbbqf.pbngf.jbexvatnf";R:4;s:27:"1202:zbqry.tbbqf.gbbyf.anzr";R:4;s:29:"1202:zbqry.tbbqf.gbbyf.jbexnf";R:4;s:32:"1202:zbqry.tbbqf.gbbyf.jbexvatnf";R:4;s:29:"1202:zbqry.tbbqf.zhfxrgf.anzr";R:4;s:31:"1202:zbqry.tbbqf.zhfxrgf.jbexnf";R:4;s:34:"1202:zbqry.tbbqf.zhfxrgf.jbexvatnf";R:4;s:27:"1202:zbqry.tbbqf.oryyf.anzr";R:4;s:29:"1202:zbqry.tbbqf.oryyf.jbexnf";R:4;s:32:"1202:zbqry.tbbqf.oryyf.jbexvatnf";R:4;s:29:"1202:zbqry.tbbqf.pebffrf.anzr";R:4;s:31:"1202:zbqry.tbbqf.pebffrf.jbexnf";R:4;s:34:"1202:zbqry.tbbqf.pebffrf.jbexvatnf";R:4;s:29:"1202:zbqry.tbbqf.unzzref.anzr";R:4;s:31:"1202:zbqry.tbbqf.unzzref.jbexnf";R:4;s:34:"1202:zbqry.tbbqf.unzzref.jbexvatnf";R:4;s:32:"1202:zbqry.tbbqf.genqrtbbqf.anzr";R:4;s:28:"1202:zbqry.tbbqf.ubefrf.anzr";R:4;s:33:"1202:zbqry.tbbqf.ubefrf.qrfgeblrq";R:4;s:24:"1202:zbqry.tbbqf.haxabja";R:4;s:26:"1202:zbqry.tbbqf.oblpbggrq";R:4;s:31:"1202:zbqry.tbbqf.tbbqfoblpbggrq";R:4;s:28:"1202:zbqry.tbbqf.tbbqfnzbhag";R:4;s:33:"1202:zbqry.tbbqf.sbbq.qrfpevcgvba";R:4;s:34:"1202:zbqry.tbbqf.tenva.qrfpevcgvba";R:4;s:33:"1202:zbqry.tbbqf.zrng.qrfpevcgvba";R:4;s:34:"1202:zbqry.tbbqf.fhtne.qrfpevcgvba";R:4;s:36:"1202:zbqry.tbbqf.gbonppb.qrfpevcgvba";R:4;s:35:"1202:zbqry.tbbqf.pbggba.qrfpevcgvba";R:4;s:33:"1202:zbqry.tbbqf.shef.qrfpevcgvba";R:4;s:35:"1202:zbqry.tbbqf.yhzore.qrfpevcgvba";R:4;s:32:"1202:zbqry.tbbqf.ber.qrfpevcgvba";R:4;s:35:"1202:zbqry.tbbqf.fvyire.qrfpevcgvba";R:4;s:35:"1202:zbqry.tbbqf.ubefrf.qrfpevcgvba";R:4;s:32:"1202:zbqry.tbbqf.ehz.qrfpevcgvba";R:4;s:35:"1202:zbqry.tbbqf.pvtnef.qrfpevcgvba";R:4;s:34:"1202:zbqry.tbbqf.pybgu.qrfpevcgvba";R:4;s:34:"1202:zbqry.tbbqf.pbngf.qrfpevcgvba";R:4;s:39:"1202:zbqry.tbbqf.genqrtbbqf.qrfpevcgvba";R:4;s:34:"1202:zbqry.tbbqf.gbbyf.qrfpevcgvba";R:4;s:36:"1202:zbqry.tbbqf.zhfxrgf.qrfpevcgvba";R:4;s:33:"1202:zbqry.tbbqf.svfu.qrfpevcgvba";R:4;s:34:"1202:zbqry.tbbqf.oryyf.qrfpevcgvba";R:4;s:36:"1202:zbqry.tbbqf.pebffrf.qrfpevcgvba";R:4;s:36:"1202:zbqry.tbbqf.unzzref.qrfpevcgvba";R:4;s:33:"1202:zbqry.vzcebirzrag.evire.anzr";R:4;s:40:"1202:zbqry.vzcebirzrag.evire.qrfpevcgvba";R:4;s:32:"1202:zbqry.vzcebirzrag.ebnq.anzr";R:4;s:39:"1202:zbqry.vzcebirzrag.ebnq.qrfpevcgvba";R:4;s:34:"1202:zbqry.vzcebirzrag.ebnq.npgvba";R:4;s:44:"1202:zbqry.vzcebirzrag.ebnq.bpphcngvbafgevat";R:4;s:32:"1202:zbqry.vzcebirzrag.cybj.anzr";R:4;s:39:"1202:zbqry.vzcebirzrag.cybj.qrfpevcgvba";R:4;s:34:"1202:zbqry.vzcebirzrag.cybj.npgvba";R:4;s:44:"1202:zbqry.vzcebirzrag.cybj.bpphcngvbafgevat";R:4;s:39:"1202:zbqry.vzcebirzrag.pyrnesberfg.anzr";R:4;s:41:"1202:zbqry.vzcebirzrag.pyrnesberfg.npgvba";R:4;s:51:"1202:zbqry.vzcebirzrag.pyrnesberfg.bpphcngvbafgevat";R:4;s:41:"1202:zbqry.vzcebirzrag.svfuobahfynaq.anzr";R:4;s:48:"1202:zbqry.vzcebirzrag.svfuobahfynaq.qrfpevcgvba";R:4;s:42:"1202:zbqry.vzcebirzrag.svfuobahfevire.anzr";R:4;s:49:"1202:zbqry.vzcebirzrag.svfuobahfevire.qrfpevcgvba";R:4;s:29:"1202:zbqry.angvba.ncnpur.anzr";R:4;s:30:"1202:zbqry.angvba.ncnpur.ehyre";R:4;s:29:"1202:zbqry.angvba.nenjnx.anzr";R:4;s:30:"1202:zbqry.angvba.nenjnx.ehyre";R:4;s:28:"1202:zbqry.angvba.nmgrp.anzr";R:4;s:29:"1202:zbqry.angvba.nmgrp.ehyre";R:4;s:31:"1202:zbqry.angvba.purebxrr.anzr";R:4;s:32:"1202:zbqry.angvba.purebxrr.ehyre";R:4;s:27:"1202:zbqry.angvba.vapn.anzr";R:4;s:28:"1202:zbqry.angvba.vapn.ehyre";R:4;s:31:"1202:zbqry.angvba.vebdhbvf.anzr";R:4;s:32:"1202:zbqry.angvba.vebdhbvf.ehyre";R:4;s:28:"1202:zbqry.angvba.fvbhk.anzr";R:4;s:29:"1202:zbqry.angvba.fvbhk.ehyre";R:4;s:27:"1202:zbqry.angvba.ghcv.anzr";R:4;s:28:"1202:zbqry.angvba.ghcv.ehyre";R:4;s:31:"1202:zbqry.angvba.qnavfu.rhebcr";R:4;s:29:"1202:zbqry.angvba.qnavfu.anzr";R:4;s:36:"1202:zbqry.angvba.qnavfu.arjynaqanzr";R:4;s:30:"1202:zbqry.angvba.qnavfu.ehyre";R:4;s:32:"1202:zbqry.angvba.qnavfuers.anzr";R:4;s:33:"1202:zbqry.angvba.qnavfuers.ehyre";R:4;s:30:"1202:zbqry.angvba.qhgpu.rhebcr";R:4;s:28:"1202:zbqry.angvba.qhgpu.anzr";R:4;s:35:"1202:zbqry.angvba.qhgpu.arjynaqanzr";R:4;s:29:"1202:zbqry.angvba.qhgpu.ehyre";R:4;s:31:"1202:zbqry.angvba.qhgpuers.anzr";R:4;s:32:"1202:zbqry.angvba.qhgpuers.ehyre";R:4;s:32:"1202:zbqry.angvba.ratyvfu.rhebcr";R:4;s:30:"1202:zbqry.angvba.ratyvfu.anzr";R:4;s:37:"1202:zbqry.angvba.ratyvfu.arjynaqanzr";R:4;s:31:"1202:zbqry.angvba.ratyvfu.ehyre";R:4;s:33:"1202:zbqry.angvba.ratyvfuers.anzr";R:4;s:34:"1202:zbqry.angvba.ratyvfuers.ehyre";R:4;s:31:"1202:zbqry.angvba.serapu.rhebcr";R:4;s:29:"1202:zbqry.angvba.serapu.anzr";R:4;s:36:"1202:zbqry.angvba.serapu.arjynaqanzr";R:4;s:30:"1202:zbqry.angvba.serapu.ehyre";R:4;s:32:"1202:zbqry.angvba.serapuers.anzr";R:4;s:33:"1202:zbqry.angvba.serapuers.ehyre";R:4;s:35:"1202:zbqry.angvba.cbeghthrfr.rhebcr";R:4;s:33:"1202:zbqry.angvba.cbeghthrfr.anzr";R:4;s:40:"1202:zbqry.angvba.cbeghthrfr.arjynaqanzr";R:4;s:34:"1202:zbqry.angvba.cbeghthrfr.ehyre";R:4;s:36:"1202:zbqry.angvba.cbeghthrfrers.anzr";R:4;s:37:"1202:zbqry.angvba.cbeghthrfrers.ehyre";R:4;s:32:"1202:zbqry.angvba.ehffvna.rhebcr";R:4;s:30:"1202:zbqry.angvba.ehffvna.anzr";R:4;s:37:"1202:zbqry.angvba.ehffvna.arjynaqanzr";R:4;s:31:"1202:zbqry.angvba.ehffvna.ehyre";R:4;s:33:"1202:zbqry.angvba.ehffvnaers.anzr";R:4;s:34:"1202:zbqry.angvba.ehffvnaers.ehyre";R:4;s:32:"1202:zbqry.angvba.fcnavfu.rhebcr";R:4;s:30:"1202:zbqry.angvba.fcnavfu.anzr";R:4;s:37:"1202:zbqry.angvba.fcnavfu.arjynaqanzr";R:4;s:31:"1202:zbqry.angvba.fcnavfu.ehyre";R:4;s:33:"1202:zbqry.angvba.fcnavfuers.anzr";R:4;s:34:"1202:zbqry.angvba.fcnavfuers.ehyre";R:4;s:32:"1202:zbqry.angvba.fjrqvfu.rhebcr";R:4;s:30:"1202:zbqry.angvba.fjrqvfu.anzr";R:4;s:37:"1202:zbqry.angvba.fjrqvfu.arjynaqanzr";R:4;s:31:"1202:zbqry.angvba.fjrqvfu.ehyre";R:4;s:33:"1202:zbqry.angvba.fjrqvfuers.anzr";R:4;s:34:"1202:zbqry.angvba.fjrqvfuers.ehyre";R:4;s:30:"1202:zbqry.angvba.ghexvfu.anzr";R:4;s:29:"1202:zbqry.angvba.trezna.anzr";R:4;s:31:"1202:zbqry.angvba.cehffvna.anzr";R:4;s:31:"1202:zbqry.angvba.nhfgevna.anzr";R:4;s:35:"1202:zbqry.angvba.haxabjararzl.anzr";R:4;s:31:"1202:zbqry.angvbaglcr.abar.anzr";R:4;s:43:"1202:zbqry.angvbaglcr.abar.fubegqrfpevcgvba";R:4;s:34:"1202:zbqry.angvbaglcr.qrsnhyg.anzr";R:4;s:46:"1202:zbqry.angvbaglcr.qrsnhyg.fubegqrfpevcgvba";R:4;s:32:"1202:zbqry.angvbaglcr.genqr.anzr";R:4;s:44:"1202:zbqry.angvbaglcr.genqr.fubegqrfpevcgvba";R:4;s:38:"1202:zbqry.angvbaglcr.pbbcrengvba.anzr";R:4;s:50:"1202:zbqry.angvbaglcr.pbbcrengvba.fubegqrfpevcgvba";R:4;s:38:"1202:zbqry.angvbaglcr.vzzvtengvba.anzr";R:4;s:50:"1202:zbqry.angvbaglcr.vzzvtengvba.fubegqrfpevcgvba";R:4;s:35:"1202:zbqry.angvbaglcr.pbadhrfg.anzr";R:4;s:47:"1202:zbqry.angvbaglcr.pbadhrfg.fubegqrfpevcgvba";R:4;s:32:"1202:zbqry.angvbaglcr.aniny.anzr";R:4;s:44:"1202:zbqry.angvbaglcr.aniny.fubegqrfpevcgvba";R:4;s:35:"1202:zbqry.angvbaglcr.ohvyqvat.anzr";R:4;s:47:"1202:zbqry.angvbaglcr.ohvyqvat.fubegqrfpevcgvba";R:4;s:38:"1202:zbqry.angvbaglcr.shegenccvat.anzr";R:4;s:50:"1202:zbqry.angvbaglcr.shegenccvat.fubegqrfpevcgvba";R:4;s:38:"1202:zbqry.angvbaglcr.ntevphygher.anzr";R:4;s:50:"1202:zbqry.angvbaglcr.ntevphygher.fubegqrfpevcgvba";R:4;s:30:"1202:zbqry.angvbaglcr.ers.anzr";R:4;s:42:"1202:zbqry.angvbaglcr.ers.fubegqrfpevcgvba";R:4;s:33:"1202:zbqry.angvbaglcr.ncnpur.anzr";R:4;s:40:"1202:zbqry.angvbaglcr.ncnpur.qrfpevcgvba";R:4;s:33:"1202:zbqry.angvbaglcr.nenjnx.anzr";R:4;s:40:"1202:zbqry.angvbaglcr.nenjnx.qrfpevcgvba";R:4;s:32:"1202:zbqry.angvbaglcr.nmgrp.anzr";R:4;s:39:"1202:zbqry.angvbaglcr.nmgrp.qrfpevcgvba";R:4;s:35:"1202:zbqry.angvbaglcr.purebxrr.anzr";R:4;s:42:"1202:zbqry.angvbaglcr.purebxrr.qrfpevcgvba";R:4;s:31:"1202:zbqry.angvbaglcr.vapn.anzr";R:4;s:38:"1202:zbqry.angvbaglcr.vapn.qrfpevcgvba";R:4;s:35:"1202:zbqry.angvbaglcr.vebdhbvf.anzr";R:4;s:42:"1202:zbqry.angvbaglcr.vebdhbvf.qrfpevcgvba";R:4;s:32:"1202:zbqry.angvbaglcr.fvbhk.anzr";R:4;s:39:"1202:zbqry.angvbaglcr.fvbhk.qrfpevcgvba";R:4;s:31:"1202:zbqry.angvbaglcr.ghcv.anzr";R:4;s:38:"1202:zbqry.angvbaglcr.ghcv.qrfpevcgvba";R:4;s:37:"1202:zbqry.uvfgbel.qvfpbire_arj_jbeyq";R:4;s:34:"1202:zbqry.uvfgbel.qvfpbire_ertvba";R:4;s:30:"1202:zbqry.uvfgbel.zrrg_angvba";R:4;s:31:"1202:zbqry.uvfgbel.pvgl_bs_tbyq";R:4;s:31:"1202:zbqry.uvfgbel.sbhaq_pbybal";R:4;s:33:"1202:zbqry.uvfgbel.nonaqba_pbybal";R:4;s:33:"1202:zbqry.uvfgbel.pbadhre_pbybal";R:4;s:35:"1202:zbqry.uvfgbel.pbybal_qrfgeblrq";R:4;s:35:"1202:zbqry.uvfgbel.pbybal_pbadhrerq";R:4;s:37:"1202:zbqry.uvfgbel.qrfgebl_frggyrzrag";R:4;s:33:"1202:zbqry.uvfgbel.qrfgebl_angvba";R:4;s:35:"1202:zbqry.uvfgbel.angvba_qrfgeblrq";R:4;s:34:"1202:zbqry.uvfgbel.sbhaqvat_sngure";R:4;s:39:"1202:zbqry.uvfgbel.qrpyner_vaqrcraqrapr";R:4;s:31:"1202:zbqry.uvfgbel.vaqrcraqrapr";R:4;s:37:"1202:zbqry.uvfgbel.fcnavfu_fhpprffvba";R:4;s:37:"1202:zbqry.qvcybznpl.nggnpx.prnfrsver";R:4;s:33:"1202:zbqry.qvcybznpl.nggnpx.crnpr";R:4;s:36:"1202:zbqry.qvcybznpl.nggnpx.nyyvnapr";R:4;s:35:"1202:zbqry.qvcybznpl.nggnpx.pbasvez";R:4;s:33:"1202:zbqry.qvcybznpl.jne.qrpynerq";R:4;s:31:"1202:zbqry.qvcybznpl.jne.bguref";R:4;s:40:"1202:zbqry.qvcybznpl.prnfr_sver.qrpynerq";R:4;s:38:"1202:zbqry.qvcybznpl.prnfr_sver.bguref";R:4;s:35:"1202:zbqry.qvcybznpl.crnpr.qrpynerq";R:4;s:33:"1202:zbqry.qvcybznpl.crnpr.bguref";R:4;s:38:"1202:zbqry.qvcybznpl.nyyvnapr.qrpynerq";R:4;s:36:"1202:zbqry.qvcybznpl.nyyvnapr.bguref";R:4;s:38:"1202:zbqry.qvcybznpl.fcnavfufhpprffvba";R:4;s:34:"1202:zbqry.qvcybznpl.qrnq.rhebcrna";R:4;s:32:"1202:zbqry.qvcybznpl.qrnq.angvir";R:4;s:32:"1202:ybfgpvglehzbhe.ohevnytebhaq";R:4;s:26:"1202:ybfgpvglehzbhe.pvobyn";R:4;s:28:"1202:ybfgpvglehzbhe.pbybavfg";R:4;s:38:"1202:ybfgpvglehzbhe.rkcrqvgvbainavfurf";R:4;s:35:"1202:ybfgpvglehzbhe.sbhagnvabslbhgu";R:4;s:48:"1202:ybfgpvglehzbhe.sbhagnvabslbhgujvgubhgrhebcr";R:4;s:25:"1202:ybfgpvglehzbhe.yrnea";R:4;s:26:"1202:ybfgpvglehzbhe.znlnaf";R:4;s:33:"1202:ybfgpvglehzbhe.zbhaqfabguvat";R:4;s:34:"1202:ybfgpvglehzbhe.zbhaqfgernfher";R:4;s:34:"1202:ybfgpvglehzbhe.zbhaqfgevaxrgf";R:4;s:29:"1202:ybfgpvglehzbhe.abguvat.0";R:4;s:25:"1202:ybfgpvglehzbhe.ehvaf";R:4;s:31:"1202:ybfgpvglehzbhe.gevonypuvrs";R:4;s:30:"1202:ybfgpvglehzbhe.pvglanzr.0";R:4;s:30:"1202:ybfgpvglehzbhe.pvglanzr.1";R:4;s:30:"1202:ybfgpvglehzbhe.pvglanzr.2";R:4;s:30:"1202:ybfgpvglehzbhe.pvglanzr.3";R:4;s:30:"1202:ybfgpvglehzbhe.pvglanzr.4";R:4;s:30:"1202:ybfgpvglehzbhe.pvglanzr.5";R:4;s:30:"1202:ybfgpvglehzbhe.pvglanzr.6";R:4;s:37:"1202:zbqry.ohvyqnoyrglcr.abguvat.anzr";R:4;s:33:"1202:zbqry.ohvyqvat.gbjaunyy.anzr";R:4;s:39:"1202:zbqry.ohvyqvat.pnecragreubhfr.anzr";R:4;s:35:"1202:zbqry.ohvyqvat.yhzorezvyy.anzr";R:4;s:40:"1202:zbqry.ohvyqvat.oynpxfzvguubhfr.anzr";R:4;s:39:"1202:zbqry.ohvyqvat.oynpxfzvgufubc.anzr";R:4;s:34:"1202:zbqry.ohvyqvat.vebajbexf.anzr";R:4;s:41:"1202:zbqry.ohvyqvat.gbonppbavfgubhfr.anzr";R:4;s:40:"1202:zbqry.ohvyqvat.gbonppbavfgfubc.anzr";R:4;s:37:"1202:zbqry.ohvyqvat.pvtnesnpgbel.anzr";R:4;s:36:"1202:zbqry.ohvyqvat.jrnireubhfr.anzr";R:4;s:35:"1202:zbqry.ohvyqvat.jrnirefubc.anzr";R:4;s:36:"1202:zbqry.ohvyqvat.grkgvyrzvyy.anzr";R:4;s:39:"1202:zbqry.ohvyqvat.qvfgvyyreubhfr.anzr";R:4;s:38:"1202:zbqry.ohvyqvat.ehzqvfgvyyrel.anzr";R:4;s:35:"1202:zbqry.ohvyqvat.ehzsnpgbel.anzr";R:4;s:39:"1202:zbqry.ohvyqvat.shegenqreubhfr.anzr";R:4;s:39:"1202:zbqry.ohvyqvat.shegenqvatcbfg.anzr";R:4;s:35:"1202:zbqry.ohvyqvat.shesnpgbel.anzr";R:4;s:36:"1202:zbqry.ohvyqvat.fpubbyubhfr.anzr";R:4;s:32:"1202:zbqry.ohvyqvat.pbyyrtr.anzr";R:4;s:35:"1202:zbqry.ohvyqvat.havirefvgl.anzr";R:4;s:31:"1202:zbqry.ohvyqvat.nezbel.anzr";R:4;s:33:"1202:zbqry.ohvyqvat.zntnmvar.anzr";R:4;s:32:"1202:zbqry.ohvyqvat.nefrany.anzr";R:4;s:31:"1202:zbqry.ohvyqvat.puncry.anzr";R:4;s:31:"1202:zbqry.ohvyqvat.puhepu.anzr";R:4;s:34:"1202:zbqry.ohvyqvat.pngurqeny.anzr";R:4;s:33:"1202:zbqry.ohvyqvat.fgbpxnqr.anzr";R:4;s:29:"1202:zbqry.ohvyqvat.sbeg.anzr";R:4;s:33:"1202:zbqry.ohvyqvat.sbegerff.anzr";R:4;s:30:"1202:zbqry.ohvyqvat.qrcbg.anzr";R:4;s:34:"1202:zbqry.ohvyqvat.jnerubhfr.anzr";R:4;s:43:"1202:zbqry.ohvyqvat.jnerubhfrrkcnafvba.anzr";R:4;s:32:"1202:zbqry.ohvyqvat.pbhagel.anzr";R:4;s:32:"1202:zbqry.ohvyqvat.fgnoyrf.anzr";R:4;s:30:"1202:zbqry.ohvyqvat.qbpxf.anzr";R:4;s:32:"1202:zbqry.ohvyqvat.qelqbpx.anzr";R:4;s:33:"1202:zbqry.ohvyqvat.fuvclneq.anzr";R:4;s:38:"1202:zbqry.ohvyqvat.cevagvatcerff.anzr";R:4;s:34:"1202:zbqry.ohvyqvat.arjfcncre.anzr";R:4;s:36:"1202:zbqry.ohvyqvat.phfgbzubhfr.anzr";R:4;s:40:"1202:zbqry.ohvyqvat.gbjaunyy.qrfpevcgvba";R:4;s:46:"1202:zbqry.ohvyqvat.pnecragreubhfr.qrfpevcgvba";R:4;s:42:"1202:zbqry.ohvyqvat.yhzorezvyy.qrfpevcgvba";R:4;s:47:"1202:zbqry.ohvyqvat.oynpxfzvguubhfr.qrfpevcgvba";R:4;s:46:"1202:zbqry.ohvyqvat.oynpxfzvgufubc.qrfpevcgvba";R:4;s:41:"1202:zbqry.ohvyqvat.vebajbexf.qrfpevcgvba";R:4;s:48:"1202:zbqry.ohvyqvat.gbonppbavfgubhfr.qrfpevcgvba";R:4;s:47:"1202:zbqry.ohvyqvat.gbonppbavfgfubc.qrfpevcgvba";R:4;s:44:"1202:zbqry.ohvyqvat.pvtnesnpgbel.qrfpevcgvba";R:4;s:43:"1202:zbqry.ohvyqvat.jrnireubhfr.qrfpevcgvba";R:4;s:42:"1202:zbqry.ohvyqvat.jrnirefubc.qrfpevcgvba";R:4;s:43:"1202:zbqry.ohvyqvat.grkgvyrzvyy.qrfpevcgvba";R:4;s:46:"1202:zbqry.ohvyqvat.qvfgvyyreubhfr.qrfpevcgvba";R:4;s:45:"1202:zbqry.ohvyqvat.ehzqvfgvyyrel.qrfpevcgvba";R:4;s:42:"1202:zbqry.ohvyqvat.ehzsnpgbel.qrfpevcgvba";R:4;s:46:"1202:zbqry.ohvyqvat.shegenqreubhfr.qrfpevcgvba";R:4;s:46:"1202:zbqry.ohvyqvat.shegenqvatcbfg.qrfpevcgvba";R:4;s:42:"1202:zbqry.ohvyqvat.shesnpgbel.qrfpevcgvba";R:4;s:43:"1202:zbqry.ohvyqvat.fpubbyubhfr.qrfpevcgvba";R:4;s:39:"1202:zbqry.ohvyqvat.pbyyrtr.qrfpevcgvba";R:4;s:42:"1202:zbqry.ohvyqvat.havirefvgl.qrfpevcgvba";R:4;s:38:"1202:zbqry.ohvyqvat.nezbel.qrfpevcgvba";R:4;s:40:"1202:zbqry.ohvyqvat.zntnmvar.qrfpevcgvba";R:4;s:39:"1202:zbqry.ohvyqvat.nefrany.qrfpevcgvba";R:4;s:38:"1202:zbqry.ohvyqvat.puncry.qrfpevcgvba";R:4;s:38:"1202:zbqry.ohvyqvat.puhepu.qrfpevcgvba";R:4;s:41:"1202:zbqry.ohvyqvat.pngurqeny.qrfpevcgvba";R:4;s:40:"1202:zbqry.ohvyqvat.fgbpxnqr.qrfpevcgvba";R:4;s:36:"1202:zbqry.ohvyqvat.sbeg.qrfpevcgvba";R:4;s:40:"1202:zbqry.ohvyqvat.sbegerff.qrfpevcgvba";R:4;s:37:"1202:zbqry.ohvyqvat.qrcbg.qrfpevcgvba";R:4;s:41:"1202:zbqry.ohvyqvat.jnerubhfr.qrfpevcgvba";R:4;s:50:"1202:zbqry.ohvyqvat.jnerubhfrrkcnafvba.qrfpevcgvba";R:4;s:39:"1202:zbqry.ohvyqvat.pbhagel.qrfpevcgvba";R:4;s:39:"1202:zbqry.ohvyqvat.fgnoyrf.qrfpevcgvba";R:4;s:37:"1202:zbqry.ohvyqvat.qbpxf.qrfpevcgvba";R:4;s:39:"1202:zbqry.ohvyqvat.qelqbpx.qrfpevcgvba";R:4;s:40:"1202:zbqry.ohvyqvat.fuvclneq.qrfpevcgvba";R:4;s:45:"1202:zbqry.ohvyqvat.cevagvatcerff.qrfpevcgvba";R:4;s:41:"1202:zbqry.ohvyqvat.arjfcncre.qrfpevcgvba";R:4;s:43:"1202:zbqry.ohvyqvat.phfgbzubhfr.qrfpevcgvba";R:4;s:40:"1202:zbqry.sbhaqvatsngure.nqnzfzvgu.anzr";R:4;s:47:"1202:zbqry.sbhaqvatsngure.nqnzfzvgu.qrfpevcgvba";R:4;s:40:"1202:zbqry.sbhaqvatsngure.nqnzfzvgu.grkg";R:4;s:49:"1202:zbqry.sbhaqvatsngure.nqnzfzvgu.ovegunaqqrngu";R:4;s:42:"1202:zbqry.sbhaqvatsngure.wnpboshttre.anzr";R:4;s:49:"1202:zbqry.sbhaqvatsngure.wnpboshttre.qrfpevcgvba";R:4;s:42:"1202:zbqry.sbhaqvatsngure.wnpboshttre.grkg";R:4;s:51:"1202:zbqry.sbhaqvatsngure.wnpboshttre.ovegunaqqrngu";R:4;s:42:"1202:zbqry.sbhaqvatsngure.crgrezvahvg.anzr";R:4;s:49:"1202:zbqry.sbhaqvatsngure.crgrezvahvg.qrfpevcgvba";R:4;s:42:"1202:zbqry.sbhaqvatsngure.crgrezvahvg.grkg";R:4;s:51:"1202:zbqry.sbhaqvatsngure.crgrezvahvg.ovegunaqqrngu";R:4;s:46:"1202:zbqry.sbhaqvatsngure.crgrefghlirfnag.anzr";R:4;s:53:"1202:zbqry.sbhaqvatsngure.crgrefghlirfnag.qrfpevcgvba";R:4;s:46:"1202:zbqry.sbhaqvatsngure.crgrefghlirfnag.grkg";R:4;s:55:"1202:zbqry.sbhaqvatsngure.crgrefghlirfnag.ovegunaqqrngu";R:4;s:40:"1202:zbqry.sbhaqvatsngure.wnaqrjvgg.anzr";R:4;s:47:"1202:zbqry.sbhaqvatsngure.wnaqrjvgg.qrfpevcgvba";R:4;s:40:"1202:zbqry.sbhaqvatsngure.wnaqrjvgg.grkg";R:4;s:49:"1202:zbqry.sbhaqvatsngure.wnaqrjvgg.ovegunaqqrngu";R:4;s:48:"1202:zbqry.sbhaqvatsngure.sreqvanaqzntryyna.anzr";R:4;s:55:"1202:zbqry.sbhaqvatsngure.sreqvanaqzntryyna.qrfpevcgvba";R:4;s:48:"1202:zbqry.sbhaqvatsngure.sreqvanaqzntryyna.grkg";R:4;s:57:"1202:zbqry.sbhaqvatsngure.sreqvanaqzntryyna.ovegunaqqrngu";R:4;s:50:"1202:zbqry.sbhaqvatsngure.senapvfpbqrpbebanqb.anzr";R:4;s:57:"1202:zbqry.sbhaqvatsngure.senapvfpbqrpbebanqb.qrfpevcgvba";R:4;s:50:"1202:zbqry.sbhaqvatsngure.senapvfpbqrpbebanqb.grkg";R:4;s:59:"1202:zbqry.sbhaqvatsngure.senapvfpbqrpbebanqb.ovegunaqqrngu";R:4;s:45:"1202:zbqry.sbhaqvatsngure.ureanaqbqrfbgb.anzr";R:4;s:52:"1202:zbqry.sbhaqvatsngure.ureanaqbqrfbgb.qrfpevcgvba";R:4;s:45:"1202:zbqry.sbhaqvatsngure.ureanaqbqrfbgb.grkg";R:4;s:54:"1202:zbqry.sbhaqvatsngure.ureanaqbqrfbgb.ovegunaqqrngu";R:4;s:42:"1202:zbqry.sbhaqvatsngure.uraeluhqfba.anzr";R:4;s:49:"1202:zbqry.sbhaqvatsngure.uraeluhqfba.qrfpevcgvba";R:4;s:42:"1202:zbqry.sbhaqvatsngure.uraeluhqfba.grkg";R:4;s:51:"1202:zbqry.sbhaqvatsngure.uraeluhqfba.ovegunaqqrngu";R:4;s:38:"1202:zbqry.sbhaqvatsngure.ynfnyyr.anzr";R:4;s:45:"1202:zbqry.sbhaqvatsngure.ynfnyyr.qrfpevcgvba";R:4;s:38:"1202:zbqry.sbhaqvatsngure.ynfnyyr.grkg";R:4;s:47:"1202:zbqry.sbhaqvatsngure.ynfnyyr.ovegunaqqrngu";R:4;s:43:"1202:zbqry.sbhaqvatsngure.ureanapbegrf.anzr";R:4;s:50:"1202:zbqry.sbhaqvatsngure.ureanapbegrf.qrfpevcgvba";R:4;s:43:"1202:zbqry.sbhaqvatsngure.ureanapbegrf.grkg";R:4;s:52:"1202:zbqry.sbhaqvatsngure.ureanapbegrf.ovegunaqqrngu";R:4;s:47:"1202:zbqry.sbhaqvatsngure.trbetrjnfuvatgba.anzr";R:4;s:54:"1202:zbqry.sbhaqvatsngure.trbetrjnfuvatgba.qrfpevcgvba";R:4;s:47:"1202:zbqry.sbhaqvatsngure.trbetrjnfuvatgba.grkg";R:4;s:56:"1202:zbqry.sbhaqvatsngure.trbetrjnfuvatgba.ovegunaqqrngu";R:4;s:41:"1202:zbqry.sbhaqvatsngure.cnhyerirer.anzr";R:4;s:48:"1202:zbqry.sbhaqvatsngure.cnhyerirer.qrfpevcgvba";R:4;s:41:"1202:zbqry.sbhaqvatsngure.cnhyerirer.grkg";R:4;s:50:"1202:zbqry.sbhaqvatsngure.cnhyerirer.ovegunaqqrngu";R:4;s:43:"1202:zbqry.sbhaqvatsngure.senapvfqenxr.anzr";R:4;s:50:"1202:zbqry.sbhaqvatsngure.senapvfqenxr.qrfpevcgvba";R:4;s:43:"1202:zbqry.sbhaqvatsngure.senapvfqenxr.grkg";R:4;s:52:"1202:zbqry.sbhaqvatsngure.senapvfqenxr.ovegunaqqrngu";R:4;s:44:"1202:zbqry.sbhaqvatsngure.wbuacnhywbarf.anzr";R:4;s:51:"1202:zbqry.sbhaqvatsngure.wbuacnhywbarf.qrfpevcgvba";R:4;s:44:"1202:zbqry.sbhaqvatsngure.wbuacnhywbarf.grkg";R:4;s:53:"1202:zbqry.sbhaqvatsngure.wbuacnhywbarf.ovegunaqqrngu";R:4;s:46:"1202:zbqry.sbhaqvatsngure.gubznfwrssrefba.anzr";R:4;s:53:"1202:zbqry.sbhaqvatsngure.gubznfwrssrefba.qrfpevcgvba";R:4;s:46:"1202:zbqry.sbhaqvatsngure.gubznfwrssrefba.grkg";R:4;s:55:"1202:zbqry.sbhaqvatsngure.gubznfwrssrefba.ovegunaqqrngu";R:4;s:41:"1202:zbqry.sbhaqvatsngure.cbpnubagnf.anzr";R:4;s:48:"1202:zbqry.sbhaqvatsngure.cbpnubagnf.qrfpevcgvba";R:4;s:41:"1202:zbqry.sbhaqvatsngure.cbpnubagnf.grkg";R:4;s:50:"1202:zbqry.sbhaqvatsngure.cbpnubagnf.ovegunaqqrngu";R:4;s:42:"1202:zbqry.sbhaqvatsngure.gubznfcnvar.anzr";R:4;s:49:"1202:zbqry.sbhaqvatsngure.gubznfcnvar.qrfpevcgvba";R:4;s:42:"1202:zbqry.sbhaqvatsngure.gubznfcnvar.grkg";R:4;s:51:"1202:zbqry.sbhaqvatsngure.gubznfcnvar.ovegunaqqrngu";R:4;s:43:"1202:zbqry.sbhaqvatsngure.fvzbaobyvine.anzr";R:4;s:50:"1202:zbqry.sbhaqvatsngure.fvzbaobyvine.qrfpevcgvba";R:4;s:43:"1202:zbqry.sbhaqvatsngure.fvzbaobyvine.grkg";R:4;s:52:"1202:zbqry.sbhaqvatsngure.fvzbaobyvine.ovegunaqqrngu";R:4;s:47:"1202:zbqry.sbhaqvatsngure.orawnzvasenaxyva.anzr";R:4;s:54:"1202:zbqry.sbhaqvatsngure.orawnzvasenaxyva.qrfpevcgvba";R:4;s:47:"1202:zbqry.sbhaqvatsngure.orawnzvasenaxyva.grkg";R:4;s:56:"1202:zbqry.sbhaqvatsngure.orawnzvasenaxyva.ovegunaqqrngu";R:4;s:46:"1202:zbqry.sbhaqvatsngure.jvyyvnzoerjfgre.anzr";R:4;s:53:"1202:zbqry.sbhaqvatsngure.jvyyvnzoerjfgre.qrfpevcgvba";R:4;s:46:"1202:zbqry.sbhaqvatsngure.jvyyvnzoerjfgre.grkg";R:4;s:55:"1202:zbqry.sbhaqvatsngure.jvyyvnzoerjfgre.ovegunaqqrngu";R:4;s:42:"1202:zbqry.sbhaqvatsngure.jvyyvnzcraa.anzr";R:4;s:49:"1202:zbqry.sbhaqvatsngure.jvyyvnzcraa.qrfpevcgvba";R:4;s:42:"1202:zbqry.sbhaqvatsngure.jvyyvnzcraa.grkg";R:4;s:51:"1202:zbqry.sbhaqvatsngure.jvyyvnzcraa.ovegunaqqrngu";R:4;s:50:"1202:zbqry.sbhaqvatsngure.sngurewrnaqroerorhs.anzr";R:4;s:57:"1202:zbqry.sbhaqvatsngure.sngurewrnaqroerorhs.qrfpevcgvba";R:4;s:50:"1202:zbqry.sbhaqvatsngure.sngurewrnaqroerorhs.grkg";R:4;s:59:"1202:zbqry.sbhaqvatsngure.sngurewrnaqroerorhs.ovegunaqqrngu";R:4;s:46:"1202:zbqry.sbhaqvatsngure.whnaqrfrchyirqn.anzr";R:4;s:53:"1202:zbqry.sbhaqvatsngure.whnaqrfrchyirqn.qrfpevcgvba";R:4;s:46:"1202:zbqry.sbhaqvatsngure.whnaqrfrchyirqn.grkg";R:4;s:55:"1202:zbqry.sbhaqvatsngure.whnaqrfrchyirqn.ovegunaqqrngu";R:4;s:50:"1202:zbqry.sbhaqvatsngure.onegbybzrqrynfpnfnf.anzr";R:4;s:57:"1202:zbqry.sbhaqvatsngure.onegbybzrqrynfpnfnf.qrfpevcgvba";R:4;s:50:"1202:zbqry.sbhaqvatsngure.onegbybzrqrynfpnfnf.grkg";R:4;s:59:"1202:zbqry.sbhaqvatsngure.onegbybzrqrynfpnfnf.ovegunaqqrngu";R:4;s:31:"1202:zbqry.sbhaqvatsngure.genqr";R:4;s:37:"1202:zbqry.sbhaqvatsngure.rkcybengvba";R:4;s:34:"1202:zbqry.sbhaqvatsngure.zvyvgnel";R:4;s:35:"1202:zbqry.sbhaqvatsngure.cbyvgvpny";R:4;s:35:"1202:zbqry.sbhaqvatsngure.eryvtvbhf";R:4;s:26:"1202:zbqry.ebyr.fpbhg.anzr";R:4;s:28:"1202:zbqry.ebyr.fbyqvre.anzr";R:4;s:28:"1202:zbqry.ebyr.qentbba.anzr";R:4;s:28:"1202:zbqry.ebyr.cvbarre.anzr";R:4;s:31:"1202:zbqry.ebyr.zvffvbanel.anzr";R:4;s:29:"1202:zbqry.ebyr.vasnagel.anzr";R:4;s:28:"1202:zbqry.ebyr.pninyel.anzr";R:4;s:33:"1202:zbqry.ebyr.zbhagrqoenir.anzr";R:4;s:31:"1202:zbqry.ebyr.nezrqoenir.anzr";R:4;s:34:"1202:zbqry.ebyr.angvirqentbba.anzr";R:4;s:39:"1202:zbqry.rdhvczrag.vaqvna.ubefrf.anzr";R:4;s:38:"1202:zbqry.rdhvczrag.vaqvna.ubefrf.nqq";R:4;s:41:"1202:zbqry.rdhvczrag.vaqvna.ubefrf.erzbir";R:4;s:39:"1202:zbqry.rdhvczrag.vaqvna.ubefrf.abar";R:4;s:32:"1202:zbqry.rdhvczrag.ubefrf.anzr";R:4;s:31:"1202:zbqry.rdhvczrag.ubefrf.nqq";R:4;s:34:"1202:zbqry.rdhvczrag.ubefrf.erzbir";R:4;s:32:"1202:zbqry.rdhvczrag.ubefrf.abar";R:4;s:40:"1202:zbqry.rdhvczrag.vaqvna.zhfxrgf.anzr";R:4;s:39:"1202:zbqry.rdhvczrag.vaqvna.zhfxrgf.nqq";R:4;s:42:"1202:zbqry.rdhvczrag.vaqvna.zhfxrgf.erzbir";R:4;s:40:"1202:zbqry.rdhvczrag.vaqvna.zhfxrgf.abar";R:4;s:33:"1202:zbqry.rdhvczrag.zhfxrgf.anzr";R:4;s:32:"1202:zbqry.rdhvczrag.zhfxrgf.nqq";R:4;s:35:"1202:zbqry.rdhvczrag.zhfxrgf.erzbir";R:4;s:33:"1202:zbqry.rdhvczrag.zhfxrgf.abar";R:4;s:31:"1202:zbqry.rdhvczrag.gbbyf.anzr";R:4;s:30:"1202:zbqry.rdhvczrag.gbbyf.nqq";R:4;s:33:"1202:zbqry.rdhvczrag.gbbyf.erzbir";R:4;s:31:"1202:zbqry.rdhvczrag.gbbyf.abar";R:4;s:36:"1202:zbqry.rdhvczrag.zvffvbanel.anzr";R:4;s:35:"1202:zbqry.rdhvczrag.zvffvbanel.nqq";R:4;s:38:"1202:zbqry.rdhvczrag.zvffvbanel.erzbir";R:4;s:36:"1202:zbqry.rdhvczrag.zvffvbanel.abar";R:4;s:30:"1202:zbqry.rdhvczrag.erzbirnyy";R:4;s:28:"1202:zbqry.rdhvczrag.qentbba";R:4;s:33:"1202:zbqry.yvzvg.jntbagenvaf.anzr";R:4;s:40:"1202:zbqry.yvzvg.jntbagenvaf.qrfpevcgvba";R:4;s:41:"1202:zbqry.yvzvg.vaqrcraqrapr.eroryf.anzr";R:4;s:48:"1202:zbqry.yvzvg.vaqrcraqrapr.eroryf.qrfpevcgvba";R:4;s:43:"1202:zbqry.yvzvg.vaqrcraqrapr.pbybavrf.anzr";R:4;s:50:"1202:zbqry.yvzvg.vaqrcraqrapr.pbybavrf.qrfpevcgvba";R:4;s:39:"1202:zbqry.yvzvg.vaqrcraqrapr.lrne.anzr";R:4;s:46:"1202:zbqry.yvzvg.vaqrcraqrapr.lrne.qrfpevcgvba";R:4;s:30:"1202:zbqry.fpbcr.vfvaqvna.anzr";R:4;s:33:"1202:pbybcrqvn.ohvyqvatf.erdhverf";R:4;s:29:"1202:pbybcrqvn.ohvyqvatf.pbfg";R:4;s:35:"1202:pbybcrqvn.ohvyqvatf.fcrpvnyvfg";R:4;s:35:"1202:pbybcrqvn.ohvyqvatf.cebqhpgvba";R:4;s:32:"1202:pbybcrqvn.ohvyqvatf.grnpurf";R:4;s:30:"1202:pbybcrqvn.ohvyqvatf.abgrf";R:4;s:34:"1202:pbybcrqvn.ohvyqvatf.nhgbohvyg";R:4;s:34:"1202:pbybcrqvn.ohvyqvatf.zbqvsvref";R:4;s:35:"1202:pbybcrqvn.ohvyqvatf.jbexcynprf";R:4;s:35:"1202:pbybcrqvn.greenva.greenvavzntr";R:4;s:35:"1202:pbybcrqvn.greenva.qrsrafrobahf";R:4;s:35:"1202:pbybcrqvn.greenva.zbirzragpbfg";R:4;s:31:"1202:pbybcrqvn.greenva.erfbhepr";R:4;s:33:"1202:pbybcrqvn.greenva.cebqhpgvba";R:4;s:34:"1202:pbybcrqvn.greenva.qrfpevcgvba";R:4;s:39:"1202:pbybcrqvn.erfbhepr.obahfcebqhpgvba";R:4;s:35:"1202:pbybcrqvn.erfbhepr.qrfpevcgvba";R:4;s:34:"1202:pbybcrqvn.havg.bssrafvircbjre";R:4;s:34:"1202:pbybcrqvn.havg.qrsrafvircbjre";R:4;s:25:"1202:pbybcrqvn.havg.cevpr";R:4;s:33:"1202:pbybcrqvn.havg.tbbqferdhverq";R:4;s:31:"1202:pbybcrqvn.havg.qrfpevcgvba";R:4;s:25:"1202:pbybcrqvn.havg.fxvyy";R:4;s:26:"1202:pbybcrqvn.havg.fpubby";R:4;s:27:"1202:pbybcrqvn.havg.angvirf";R:4;s:28:"1202:pbybcrqvn.havg.pncnpvgl";R:4;s:28:"1202:pbybcrqvn.havg.zbirzrag";R:4;s:35:"1202:pbybcrqvn.havg.cebqhpgvbaobahf";R:4;s:32:"1202:pbybcrqvn.havg.erdhverzragf";R:4;s:29:"1202:pbybcrqvn.tbbqf.vfsnezrq";R:4;s:31:"1202:pbybcrqvn.tbbqf.vzcebirqol";R:4;s:32:"1202:pbybcrqvn.tbbqf.vzcebirzrag";R:4;s:30:"1202:pbybcrqvn.tbbqf.ohvyqvatf";R:4;s:33:"1202:pbybcrqvn.tbbqf.nyyohvyqvatf";R:4;s:26:"1202:pbybcrqvn.tbbqf.havgf";R:4;s:29:"1202:pbybcrqvn.tbbqf.nyyhavgf";R:4;s:30:"1202:pbybcrqvn.tbbqf.rdhvczrag";R:4;s:29:"1202:pbybcrqvn.tbbqf.znqrsebz";R:4;s:26:"1202:pbybcrqvn.tbbqf.znxrf";R:4;s:32:"1202:pbybcrqvn.tbbqf.qrfpevcgvba";R:4;s:35:"1202:pbybcrqvn.tbbqf.oerrqvatahzore";R:4;s:41:"1202:pbybcrqvn.sbhaqvatsngure.qrfpevcgvba";R:4;s:27:"1202:pbybcrqvn.angvba.ehyre";R:4;s:38:"1202:pbybcrqvn.angvba.qrsnhygnqinagntr";R:4;s:38:"1202:pbybcrqvn.angvba.pheeragnqinagntr";R:4;s:31:"1202:pbybcrqvn.angvbaglcr.havgf";R:4;s:36:"1202:pbybcrqvn.angvbaglcr.ntterffvba";R:4;s:40:"1202:pbybcrqvn.angvbaglcr.ntterffvba.ybj";R:4;s:44:"1202:pbybcrqvn.angvbaglcr.ntterffvba.nirentr";R:4;s:41:"1202:pbybcrqvn.angvbaglcr.ntterffvba.uvtu";R:4;s:45:"1202:pbybcrqvn.angvbaglcr.ahzorebsfrggyrzragf";R:4;s:49:"1202:pbybcrqvn.angvbaglcr.ahzorebsfrggyrzragf.ybj";R:4;s:53:"1202:pbybcrqvn.angvbaglcr.ahzorebsfrggyrzragf.nirentr";R:4;s:50:"1202:pbybcrqvn.angvbaglcr.ahzorebsfrggyrzragf.uvtu";R:4;s:43:"1202:pbybcrqvn.angvbaglcr.glcrbsfrggyrzragf";R:4;s:33:"1202:pbybcrqvn.angvbaglcr.ertvbaf";R:4;s:32:"1202:pbybcrqvn.angvbaglcr.fxvyyf";R:4;s:34:"1202:pbybcrqvn.pbaprcgf.gnkrf.anzr";R:4;s:41:"1202:pbybcrqvn.pbaprcgf.gnkrf.qrfpevcgvba";R:4;s:39:"1202:pbybcrqvn.pbaprcgf.rssvpvrapl.anzr";R:4;s:46:"1202:pbybcrqvn.pbaprcgf.rssvpvrapl.qrfpevcgvba";R:4;s:41:"1202:pbybcrqvn.pbaprcgf.vaqrcraqrapr.anzr";R:4;s:48:"1202:pbybcrqvn.pbaprcgf.vaqrcraqrapr.qrfpevcgvba";R:4;s:37:"1202:ercbeg.pbagvaragnypbaterff.gvgyr";R:4;s:36:"1202:ercbeg.pbagvaragnypbaterff.abar";R:4;s:42:"1202:ercbeg.pbagvaragnypbaterff.erpehvgvat";R:4;s:39:"1202:ercbeg.pbagvaragnypbaterff.ryrpgrq";R:4;s:28:"1202:ercbeg.vaqvna.puvrsgnva";R:4;s:36:"1202:ercbeg.vaqvna.glcrbsfrggyrzragf";R:4;s:38:"1202:ercbeg.vaqvna.ahzorebsfrggyrzragf";R:4;s:31:"1202:ercbeg.vaqvna.gevorgrafvba";R:4;s:31:"1202:ercbeg.vaqvna.zbfgnynezvat";R:4;s:37:"1202:ercbeg.vaqvna.abxabjafrggyrzragf";R:4;s:26:"1202:ercbeg.vaqvna.grafvba";R:4;s:30:"1202:ercbeg.vaqvna.fxvyygnhtug";R:4;s:33:"1202:ercbeg.vaqvna.genqrvagrerfgf";R:4;s:18:"1202:ercbeg.ynobhe";R:4;s:26:"1202:ercbeg.ynobhe.qrgnvyf";R:4;s:31:"1202:ercbeg.ynobhe.nyypbybavfgf";R:4;s:26:"1202:ercbeg.ynobhe.fhzznel";R:4;s:37:"1202:ercbeg.ynobhe.abgpbhagrq.gbbygvc";R:4;s:37:"1202:ercbeg.ynobhe.fhogenpgrq.gbbygvc";R:4;s:36:"1202:ercbeg.ynobhe.havggbgny.gbbygvc";R:4;s:46:"1202:ercbeg.ynobhe.cbgragvnycebqhpgvba.gbbygvc";R:4;s:40:"1202:ercbeg.ynobhe.argcebqhpgvba.gbbygvc";R:4;s:26:"1202:ercbeg.ynobhe.grnpure";R:4;s:26:"1202:ercbeg.ynobhe.fhgqrag";R:4;s:27:"1202:ercbeg.ynobhe.yrneavat";R:4;s:32:"1202:ercbeg.ynobhe.yrneavatbgure";R:4;s:32:"1202:ercbeg.ynobhe.bgurehavgglcr";R:4;s:33:"1202:ercbeg.ynobhe.jbexvatnfbgure";R:4;s:29:"1202:ercbeg.ynobhe.abgjbexvat";R:4;s:37:"1202:ercbeg.ynobhe.abgjbexvat.gbbygvc";R:4;s:33:"1202:ercbeg.ynobhe.rkcregfjbexvat";R:4;s:34:"1202:ercbeg.ynobhe.nzngrhefjbexvat";R:4;s:27:"1202:ercbeg.ynobhe.pnagenva";R:4;s:30:"1202:ercbeg.pbybal.anzr.urnqre";R:4;s:35:"1202:ercbeg.pbybal.anzr.qrfpevcgvba";R:4;s:33:"1202:ercbeg.pbybal.rkcyber.urnqre";R:4;s:38:"1202:ercbeg.pbybal.rkcyber.qrfpevcgvba";R:4;s:40:"1202:ercbeg.pbybal.rkcybevat.qrfpevcgvba";R:4;s:30:"1202:ercbeg.pbybal.cybj.urnqre";R:4;s:35:"1202:ercbeg.pbybal.cybj.qrfpevcgvba";R:4;s:38:"1202:ercbeg.pbybal.cybjvat.qrfpevcgvba";R:4;s:30:"1202:ercbeg.pbybal.ebnq.urnqre";R:4;s:35:"1202:ercbeg.pbybal.ebnq.qrfpevcgvba";R:4;s:43:"1202:ercbeg.pbybal.ebnqohvyqvat.qrfpevcgvba";R:4;s:36:"1202:ercbeg.pbybal.cebqhpgvba.urnqre";R:4;s:41:"1202:ercbeg.pbybal.cebqhpgvba.qrfpevcgvba";R:4;s:45:"1202:ercbeg.pbybal.cebqhpgvba.ybj.qrfpevcgvba";R:4;s:46:"1202:ercbeg.pbybal.cebqhpgvba.uvtu.qrfpevcgvba";R:4;s:47:"1202:ercbeg.pbybal.cebqhpgvba.jnfgr.qrfpevcgvba";R:4;s:48:"1202:ercbeg.pbybal.cebqhpgvba.rkcbeg.qrfpevcgvba";R:4;s:36:"1202:ercbeg.pbybal.ovegu.qrfpevcgvba";R:4;s:39:"1202:ercbeg.pbybal.neevivat.qrfpevcgvba";R:4;s:39:"1202:ercbeg.pbybal.fgneivat.qrfpevcgvba";R:4;s:32:"1202:ercbeg.pbybal.znxvat.urnqre";R:4;s:37:"1202:ercbeg.pbybal.znxvat.qrfpevcgvba";R:4;s:52:"1202:ercbeg.pbybal.znxvat.abpbafgehpgvba.qrfpevcgvba";R:4;s:50:"1202:ercbeg.pbybal.znxvat.pbafgehpgvat.qrfpevcgvba";R:4;s:46:"1202:ercbeg.pbybal.znxvat.oybpxvat.qrfpevcgvba";R:4;s:45:"1202:ercbeg.pbybal.znxvat.abgrnpu.qrfpevcgvba";R:4;s:47:"1202:ercbeg.pbybal.znxvat.rqhpngvat.qrfpevcgvba";R:4;s:33:"1202:ercbeg.pbybal.vzcebir.urnqre";R:4;s:38:"1202:ercbeg.pbybal.vzcebir.qrfpevcgvba";R:4;s:40:"1202:ercbeg.pbybal.vzcebivat.qrfpevcgvba";R:4;s:30:"1202:ercbeg.pbybal.tebj.urnqre";R:4;s:35:"1202:ercbeg.pbybal.tebj.qrfpevcgvba";R:4;s:38:"1202:ercbeg.pbybal.tebjvat.qrfpevcgvba";R:4;s:40:"1202:ercbeg.pbybal.fuevaxvat.qrfpevcgvba";R:4;s:32:"1202:ercbeg.pbybal.jnagrq.urnqre";R:4;s:37:"1202:ercbeg.pbybal.jnagrq.qrfpevcgvba";R:4;s:38:"1202:ercbeg.pbybal.jnagvat.qrfpevcgvba";R:4;s:27:"1202:ercbeg.genqr.havgffbyq";R:4;s:29:"1202:ercbeg.genqr.orsbergnkrf";R:4;s:28:"1202:ercbeg.genqr.nsgregnkrf";R:4;s:28:"1202:ercbeg.genqr.pnetbhavgf";R:4;s:28:"1202:ercbeg.genqr.gbgnyhavgf";R:4;s:28:"1202:ercbeg.genqr.gbgnyqrygn";R:4;s:32:"1202:ercbeg.genqr.unfphfgbzubhfr";R:4;s:27:"1202:ercbeg.zvyvgnel.sbeprf";R:4;s:23:"1202:ercbeg.nyypbybavrf";R:4;s:22:"1202:ercbeg.cebqhpgvba";R:4;s:17:"1202:ercbeg.havgf";R:4;s:17:"1202:ercbeg.ngfrn";R:4;s:18:"1202:ercbeg.baynaq";R:4;s:28:"1202:ercbeg.ahzorebspbybavrf";R:4;s:25:"1202:ercbeg.ahzorebshavgf";R:4;s:28:"1202:ercbeg.zvyvgnelfgeratgu";R:4;s:25:"1202:ercbeg.aninyfgeratgu";R:4;s:25:"1202:ercbeg.fbafbsyvoregl";R:4;s:18:"1202:ercbeg.fgnapr";R:4;s:21:"1202:ercbeg.50creprag";R:4;s:22:"1202:ercbeg.100creprag";R:4;s:22:"1202:ercbeg.arkgzrzore";R:4;s:38:"1202:ercbeg.erdhverzragf.onqnffvtazrag";R:4;s:33:"1202:ercbeg.erdhverzragf.abrkcreg";R:4;s:37:"1202:ercbeg.erdhverzragf.zvffvattbbqf";R:4;s:32:"1202:ercbeg.erdhverzragf.fhecyhf";R:4;s:39:"1202:ercbeg.erdhverzragf.zvfhfrqrkcregf";R:4;s:39:"1202:ercbeg.erdhverzragf.frirenyrkcregf";R:4;s:40:"1202:ercbeg.erdhverzragf.pnagenvarkcregf";R:4;s:28:"1202:ercbeg.erdhverzragf.zrg";R:4;s:36:"1202:ercbeg.erdhverzragf.rkcybergvyr";R:4;s:34:"1202:ercbeg.erdhverzragf.pyrnegvyr";R:4;s:35:"1202:ercbeg.erdhverzragf.cybjpragre";R:4;s:33:"1202:ercbeg.erdhverzragf.cybjgvyr";R:4;s:33:"1202:ercbeg.erdhverzragf.ebnqgvyr";R:4;s:36:"1202:ercbeg.rkcybengvba.anzrbsertvba";R:4;s:36:"1202:ercbeg.rkcybengvba.glcrbsertvba";R:4;s:36:"1202:ercbeg.rkcybengvba.qvfpbirerqva";R:4;s:36:"1202:ercbeg.rkcybengvba.qvfpbirerqol";R:4;s:37:"1202:ercbeg.rkcybengvba.inyhrbsertvba";R:4;s:32:"1202:ercbeg.uvtufpberf.cerfvqrag";R:4;s:31:"1202:ercbeg.uvtufpberf.tbireabe";R:4;s:35:"1202:ercbeg.uvtufpberf.vaqrcraqrapr";R:4;s:28:"1202:ercbeg.uvtufpberf.havgf";R:4;s:31:"1202:ercbeg.uvtufpberf.pbybavrf";R:4;s:28:"1202:ercbeg.uvtufpberf.fpber";R:4;s:33:"1202:ercbeg.uvtufpberf.qvssvphygl";R:4;s:29:"1202:ercbeg.uvtufpberf.angvba";R:4;s:33:"1202:ercbeg.uvtufpberf.angvbaglcr";R:4;s:30:"1202:ercbeg.uvtufpberf.ergverq";R:4;s:27:"1202:ercbeg.uvtufpberf.ghea";R:4;s:28:"1202:ercbeg.cebqhpgvba.gvgyr";R:4;s:34:"1202:ercbeg.cebqhpgvba.fryrpgtbbqf";R:4;s:29:"1202:ercbeg.cebqhpgvba.hcqngr";R:4;s:33:"1202:ercbeg.sbervtanssnvef.abgvpr";R:4;s:30:"1202:ercbeg.rqhpngvba.fghqragf";R:4;s:30:"1202:ercbeg.rqhpngvba.grnpuref";R:4;s:23:"1202:nobhgcnary.irefvba";R:4;s:28:"1202:nobhgcnary.bssvpvnyfvgr";R:4;s:25:"1202:nobhgcnary.fscebwrpg";R:4;s:31:"1202:nobhgcnary.yrtnyqvfpynvzre";R:4;s:25:"1202:nobhgcnary.pbclevtug";R:4;s:34:"1202:zbqry.fbhepr.onfrbssrapr.anzr";R:4;s:35:"1202:zbqry.fbhepr.pnetbcranygl.anzr";R:4;s:34:"1202:zbqry.fbhepr.nggnpxobahf.anzr";R:4;s:38:"1202:zbqry.fbhepr.zbirzragcranygl.anzr";R:4;s:34:"1202:zbqry.fbhepr.nzohfuobahf.anzr";R:4;s:41:"1202:zbqry.fbhepr.negvyyrelvagurbcra.anzr";R:4;s:34:"1202:zbqry.fbhepr.svanyerfhyg.anzr";R:4;s:34:"1202:zbqry.fbhepr.onfrqrsrapr.anzr";R:4;s:32:"1202:zbqry.fbhepr.sbegvsvrq.anzr";R:4;s:43:"1202:zbqry.fbhepr.negvyyrelntnvafgenvq.anzr";R:4;s:39:"1202:zbqry.fbhepr.nzcuvovbhfnggnpx.anzr";R:4;s:34:"1202:zbqry.fbhepr.fbyzbqvsvre.anzr";R:4;s:39:"1202:zbqry.fbhepr.pbybaltbbqfcnegl.anzr";R:4;s:34:"1202:zbqry.fbhepr.fuvcgenqrcranygl";R:4;s:17:"1202:fuvcanzr.0.0";R:4;s:17:"1202:fuvcanzr.1.0";R:4;s:17:"1202:fuvcanzr.2.0";R:4;s:17:"1202:fuvcanzr.3.0";R:4;s:40:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.0";R:4;s:40:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.1";R:4;s:40:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.2";R:4;s:40:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.3";R:4;s:40:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.4";R:4;s:40:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.5";R:4;s:40:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.6";R:4;s:40:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.7";R:4;s:40:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.8";R:4;s:40:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.9";R:4;s:41:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.10";R:4;s:41:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.11";R:4;s:41:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.12";R:4;s:41:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.13";R:4;s:41:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.14";R:4;s:41:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.15";R:4;s:41:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.16";R:4;s:41:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.17";R:4;s:41:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.18";R:4;s:41:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.19";R:4;s:41:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.20";R:4;s:41:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.21";R:4;s:41:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.22";R:4;s:41:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.23";R:4;s:41:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.24";R:4;s:41:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.25";R:4;s:41:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.26";R:4;s:41:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.27";R:4;s:41:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.28";R:4;s:41:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.29";R:4;s:41:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.30";R:4;s:41:"1202:zbqry.angvba.qhgpu.frggyrzraganzr.31";R:4;s:38:"1202:zbqry.angvba.qhgpu.ertvba.evire.1";R:4;s:38:"1202:zbqry.angvba.qhgpu.ertvba.evire.2";R:4;s:38:"1202:zbqry.angvba.qhgpu.ertvba.evire.3";R:4;s:38:"1202:zbqry.angvba.qhgpu.ertvba.evire.4";R:4;s:38:"1202:zbqry.angvba.qhgpu.ertvba.evire.5";R:4;s:38:"1202:zbqry.angvba.qhgpu.ertvba.evire.6";R:4;s:38:"1202:zbqry.angvba.qhgpu.ertvba.evire.7";R:4;s:38:"1202:zbqry.angvba.qhgpu.ertvba.evire.8";R:4;s:41:"1202:zbqry.angvba.qhgpu.ertvba.zbhagnva.1";R:4;s:41:"1202:zbqry.angvba.qhgpu.ertvba.zbhagnva.2";R:4;s:41:"1202:zbqry.angvba.qhgpu.ertvba.zbhagnva.3";R:4;s:41:"1202:zbqry.angvba.qhgpu.ertvba.zbhagnva.4";R:4;s:41:"1202:zbqry.angvba.qhgpu.ertvba.zbhagnva.5";R:4;s:41:"1202:zbqry.angvba.qhgpu.ertvba.zbhagnva.6";R:4;s:41:"1202:zbqry.angvba.qhgpu.ertvba.zbhagnva.7";R:4;s:41:"1202:zbqry.angvba.qhgpu.ertvba.zbhagnva.8";R:4;s:41:"1202:zbqry.angvba.qhgpu.ertvba.zbhagnva.9";R:4;s:37:"1202:zbqry.angvba.qhgpu.ertvba.ynaq.1";R:4;s:37:"1202:zbqry.angvba.qhgpu.ertvba.ynaq.2";R:4;s:37:"1202:zbqry.angvba.qhgpu.ertvba.ynaq.3";R:4;s:37:"1202:zbqry.angvba.qhgpu.ertvba.ynaq.4";R:4;s:37:"1202:zbqry.angvba.qhgpu.ertvba.ynaq.5";R:4;s:37:"1202:zbqry.angvba.qhgpu.ertvba.ynaq.6";R:4;s:37:"1202:zbqry.angvba.qhgpu.ertvba.ynaq.7";R:4;s:37:"1202:zbqry.angvba.qhgpu.ertvba.ynaq.8";R:4;s:37:"1202:zbqry.angvba.qhgpu.ertvba.ynaq.9";R:4;s:38:"1202:zbqry.angvba.qhgpu.ertvba.ynaq.10";R:4;s:42:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.0";R:4;s:42:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.1";R:4;s:42:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.2";R:4;s:42:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.3";R:4;s:42:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.4";R:4;s:42:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.5";R:4;s:42:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.6";R:4;s:42:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.7";R:4;s:42:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.8";R:4;s:42:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.9";R:4;s:43:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.10";R:4;s:43:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.11";R:4;s:43:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.12";R:4;s:43:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.13";R:4;s:43:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.14";R:4;s:43:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.15";R:4;s:43:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.16";R:4;s:43:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.17";R:4;s:43:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.18";R:4;s:43:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.19";R:4;s:43:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.20";R:4;s:43:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.21";R:4;s:43:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.22";R:4;s:43:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.23";R:4;s:43:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.24";R:4;s:43:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.25";R:4;s:43:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.26";R:4;s:43:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.27";R:4;s:43:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.28";R:4;s:43:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.29";R:4;s:43:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.30";R:4;s:43:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.31";R:4;s:43:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.32";R:4;s:43:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.33";R:4;s:43:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.34";R:4;s:43:"1202:zbqry.angvba.ratyvfu.frggyrzraganzr.35";R:4;s:39:"1202:zbqry.angvba.ratyvfu.ertvba.ynaq.1";R:4;s:39:"1202:zbqry.angvba.ratyvfu.ertvba.ynaq.2";R:4;s:39:"1202:zbqry.angvba.ratyvfu.ertvba.ynaq.3";R:4;s:39:"1202:zbqry.angvba.ratyvfu.ertvba.ynaq.4";R:4;s:39:"1202:zbqry.angvba.ratyvfu.ertvba.ynaq.5";R:4;s:39:"1202:zbqry.angvba.ratyvfu.ertvba.ynaq.6";R:4;s:39:"1202:zbqry.angvba.ratyvfu.ertvba.ynaq.7";R:4;s:39:"1202:zbqry.angvba.ratyvfu.ertvba.ynaq.8";R:4;s:39:"1202:zbqry.angvba.ratyvfu.ertvba.ynaq.9";R:4;s:40:"1202:zbqry.angvba.ratyvfu.ertvba.ynaq.10";R:4;s:40:"1202:zbqry.angvba.ratyvfu.ertvba.evire.1";R:4;s:40:"1202:zbqry.angvba.ratyvfu.ertvba.evire.2";R:4;s:40:"1202:zbqry.angvba.ratyvfu.ertvba.evire.3";R:4;s:40:"1202:zbqry.angvba.ratyvfu.ertvba.evire.4";R:4;s:40:"1202:zbqry.angvba.ratyvfu.ertvba.evire.5";R:4;s:40:"1202:zbqry.angvba.ratyvfu.ertvba.evire.6";R:4;s:40:"1202:zbqry.angvba.ratyvfu.ertvba.evire.7";R:4;s:40:"1202:zbqry.angvba.ratyvfu.ertvba.evire.8";R:4;s:40:"1202:zbqry.angvba.ratyvfu.ertvba.evire.9";R:4;s:41:"1202:zbqry.angvba.ratyvfu.ertvba.evire.10";R:4;s:43:"1202:zbqry.angvba.ratyvfu.ertvba.zbhagnva.1";R:4;s:43:"1202:zbqry.angvba.ratyvfu.ertvba.zbhagnva.2";R:4;s:43:"1202:zbqry.angvba.ratyvfu.ertvba.zbhagnva.3";R:4;s:43:"1202:zbqry.angvba.ratyvfu.ertvba.zbhagnva.4";R:4;s:43:"1202:zbqry.angvba.ratyvfu.ertvba.zbhagnva.5";R:4;s:43:"1202:zbqry.angvba.ratyvfu.ertvba.zbhagnva.6";R:4;s:43:"1202:zbqry.angvba.ratyvfu.ertvba.zbhagnva.7";R:4;s:43:"1202:zbqry.angvba.ratyvfu.ertvba.zbhagnva.8";R:4;s:43:"1202:zbqry.angvba.ratyvfu.ertvba.zbhagnva.9";R:4;s:41:"1202:zbqry.angvba.serapu.frggyrzraganzr.0";R:4;s:41:"1202:zbqry.angvba.serapu.frggyrzraganzr.1";R:4;s:41:"1202:zbqry.angvba.serapu.frggyrzraganzr.2";R:4;s:41:"1202:zbqry.angvba.serapu.frggyrzraganzr.3";R:4;s:41:"1202:zbqry.angvba.serapu.frggyrzraganzr.4";R:4;s:41:"1202:zbqry.angvba.serapu.frggyrzraganzr.5";R:4;s:41:"1202:zbqry.angvba.serapu.frggyrzraganzr.6";R:4;s:41:"1202:zbqry.angvba.serapu.frggyrzraganzr.7";R:4;s:41:"1202:zbqry.angvba.serapu.frggyrzraganzr.8";R:4;s:41:"1202:zbqry.angvba.serapu.frggyrzraganzr.9";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.10";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.11";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.12";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.13";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.14";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.15";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.16";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.17";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.18";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.19";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.20";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.21";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.22";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.23";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.24";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.25";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.26";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.27";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.28";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.29";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.30";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.31";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.32";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.33";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.34";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.35";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.36";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.37";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.38";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.39";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.40";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.41";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.42";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.43";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.44";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.45";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.46";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.47";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.48";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.49";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.50";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.51";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.52";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.53";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.54";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.55";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.56";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.57";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.58";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.59";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.60";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.61";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.62";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.63";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.64";R:4;s:42:"1202:zbqry.angvba.serapu.frggyrzraganzr.65";R:4;s:38:"1202:zbqry.angvba.serapu.ertvba.ynaq.1";R:4;s:38:"1202:zbqry.angvba.serapu.ertvba.ynaq.2";R:4;s:38:"1202:zbqry.angvba.serapu.ertvba.ynaq.3";R:4;s:38:"1202:zbqry.angvba.serapu.ertvba.ynaq.4";R:4;s:38:"1202:zbqry.angvba.serapu.ertvba.ynaq.5";R:4;s:38:"1202:zbqry.angvba.serapu.ertvba.ynaq.6";R:4;s:38:"1202:zbqry.angvba.serapu.ertvba.ynaq.7";R:4;s:39:"1202:zbqry.angvba.serapu.ertvba.evire.1";R:4;s:39:"1202:zbqry.angvba.serapu.ertvba.evire.2";R:4;s:39:"1202:zbqry.angvba.serapu.ertvba.evire.3";R:4;s:39:"1202:zbqry.angvba.serapu.ertvba.evire.4";R:4;s:39:"1202:zbqry.angvba.serapu.ertvba.evire.5";R:4;s:39:"1202:zbqry.angvba.serapu.ertvba.evire.6";R:4;s:39:"1202:zbqry.angvba.serapu.ertvba.evire.7";R:4;s:39:"1202:zbqry.angvba.serapu.ertvba.evire.8";R:4;s:39:"1202:zbqry.angvba.serapu.ertvba.evire.9";R:4;s:40:"1202:zbqry.angvba.serapu.ertvba.evire.10";R:4;s:42:"1202:zbqry.angvba.serapu.ertvba.zbhagnva.1";R:4;s:42:"1202:zbqry.angvba.serapu.ertvba.zbhagnva.2";R:4;s:42:"1202:zbqry.angvba.serapu.ertvba.zbhagnva.3";R:4;s:42:"1202:zbqry.angvba.serapu.ertvba.zbhagnva.4";R:4;s:42:"1202:zbqry.angvba.serapu.ertvba.zbhagnva.5";R:4;s:42:"1202:zbqry.angvba.serapu.ertvba.zbhagnva.6";R:4;s:42:"1202:zbqry.angvba.serapu.ertvba.zbhagnva.7";R:4;s:42:"1202:zbqry.angvba.serapu.ertvba.zbhagnva.8";R:4;s:42:"1202:zbqry.angvba.serapu.ertvba.zbhagnva.9";R:4;s:43:"1202:zbqry.angvba.serapu.ertvba.zbhagnva.10";R:4;s:42:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.0";R:4;s:42:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.1";R:4;s:42:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.2";R:4;s:42:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.3";R:4;s:42:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.4";R:4;s:42:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.5";R:4;s:42:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.6";R:4;s:42:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.7";R:4;s:42:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.8";R:4;s:42:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.9";R:4;s:43:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.10";R:4;s:43:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.11";R:4;s:43:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.12";R:4;s:43:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.13";R:4;s:43:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.14";R:4;s:43:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.15";R:4;s:43:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.16";R:4;s:43:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.17";R:4;s:43:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.18";R:4;s:43:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.19";R:4;s:43:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.20";R:4;s:43:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.21";R:4;s:43:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.22";R:4;s:43:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.23";R:4;s:43:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.24";R:4;s:43:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.25";R:4;s:43:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.26";R:4;s:43:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.27";R:4;s:43:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.28";R:4;s:43:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.29";R:4;s:43:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.30";R:4;s:43:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.31";R:4;s:43:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.32";R:4;s:43:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.33";R:4;s:43:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.34";R:4;s:43:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.35";R:4;s:43:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.36";R:4;s:43:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.37";R:4;s:43:"1202:zbqry.angvba.fcnavfu.frggyrzraganzr.38";R:4;s:39:"1202:zbqry.angvba.fcnavfu.ertvba.ynaq.1";R:4;s:39:"1202:zbqry.angvba.fcnavfu.ertvba.ynaq.2";R:4;s:39:"1202:zbqry.angvba.fcnavfu.ertvba.ynaq.3";R:4;s:39:"1202:zbqry.angvba.fcnavfu.ertvba.ynaq.4";R:4;s:39:"1202:zbqry.angvba.fcnavfu.ertvba.ynaq.5";R:4;s:40:"1202:zbqry.angvba.fcnavfu.ertvba.evire.1";R:4;s:40:"1202:zbqry.angvba.fcnavfu.ertvba.evire.2";R:4;s:40:"1202:zbqry.angvba.fcnavfu.ertvba.evire.3";R:4;s:40:"1202:zbqry.angvba.fcnavfu.ertvba.evire.4";R:4;s:40:"1202:zbqry.angvba.fcnavfu.ertvba.evire.5";R:4;s:43:"1202:zbqry.angvba.fcnavfu.ertvba.zbhagnva.1";R:4;s:43:"1202:zbqry.angvba.fcnavfu.ertvba.zbhagnva.2";R:4;s:43:"1202:zbqry.angvba.fcnavfu.ertvba.zbhagnva.3";R:4;s:43:"1202:zbqry.angvba.fcnavfu.ertvba.zbhagnva.4";R:4;s:43:"1202:zbqry.angvba.fcnavfu.ertvba.zbhagnva.5";R:4;s:45:"1202:zbqry.angvba.cbeghthrfr.frggyrzraganzr.0";R:4;s:45:"1202:zbqry.angvba.cbeghthrfr.frggyrzraganzr.1";R:4;s:45:"1202:zbqry.angvba.cbeghthrfr.frggyrzraganzr.2";R:4;s:45:"1202:zbqry.angvba.cbeghthrfr.frggyrzraganzr.3";R:4;s:45:"1202:zbqry.angvba.cbeghthrfr.frggyrzraganzr.4";R:4;s:45:"1202:zbqry.angvba.cbeghthrfr.frggyrzraganzr.5";R:4;s:45:"1202:zbqry.angvba.cbeghthrfr.frggyrzraganzr.6";R:4;s:45:"1202:zbqry.angvba.cbeghthrfr.frggyrzraganzr.7";R:4;s:45:"1202:zbqry.angvba.cbeghthrfr.frggyrzraganzr.8";R:4;s:45:"1202:zbqry.angvba.cbeghthrfr.frggyrzraganzr.9";R:4;s:46:"1202:zbqry.angvba.cbeghthrfr.frggyrzraganzr.10";R:4;s:46:"1202:zbqry.angvba.cbeghthrfr.frggyrzraganzr.11";R:4;s:46:"1202:zbqry.angvba.cbeghthrfr.frggyrzraganzr.12";R:4;s:46:"1202:zbqry.angvba.cbeghthrfr.frggyrzraganzr.13";R:4;s:46:"1202:zbqry.angvba.cbeghthrfr.frggyrzraganzr.14";R:4;s:46:"1202:zbqry.angvba.cbeghthrfr.frggyrzraganzr.15";R:4;s:46:"1202:zbqry.angvba.cbeghthrfr.frggyrzraganzr.16";R:4;s:46:"1202:zbqry.angvba.cbeghthrfr.frggyrzraganzr.17";R:4;s:46:"1202:zbqry.angvba.cbeghthrfr.frggyrzraganzr.18";R:4;s:46:"1202:zbqry.angvba.cbeghthrfr.frggyrzraganzr.19";R:4;s:46:"1202:zbqry.angvba.cbeghthrfr.frggyrzraganzr.20";R:4;s:46:"1202:zbqry.angvba.cbeghthrfr.frggyrzraganzr.21";R:4;s:46:"1202:zbqry.angvba.cbeghthrfr.frggyrzraganzr.22";R:4;s:46:"1202:zbqry.angvba.cbeghthrfr.frggyrzraganzr.23";R:4;s:46:"1202:zbqry.angvba.cbeghthrfr.frggyrzraganzr.24";R:4;s:46:"1202:zbqry.angvba.cbeghthrfr.frggyrzraganzr.25";R:4;s:46:"1202:zbqry.angvba.cbeghthrfr.frggyrzraganzr.26";R:4;s:46:"1202:zbqry.angvba.cbeghthrfr.frggyrzraganzr.27";R:4;s:46:"1202:zbqry.angvba.cbeghthrfr.frggyrzraganzr.28";R:4;s:46:"1202:zbqry.angvba.cbeghthrfr.frggyrzraganzr.29";R:4;s:42:"1202:zbqry.angvba.cbeghthrfr.ertvba.ynaq.1";R:4;s:42:"1202:zbqry.angvba.cbeghthrfr.ertvba.ynaq.2";R:4;s:42:"1202:zbqry.angvba.cbeghthrfr.ertvba.ynaq.3";R:4;s:42:"1202:zbqry.angvba.cbeghthrfr.ertvba.ynaq.4";R:4;s:42:"1202:zbqry.angvba.cbeghthrfr.ertvba.ynaq.5";R:4;s:42:"1202:zbqry.angvba.cbeghthrfr.ertvba.ynaq.6";R:4;s:42:"1202:zbqry.angvba.cbeghthrfr.ertvba.ynaq.7";R:4;s:42:"1202:zbqry.angvba.cbeghthrfr.ertvba.ynaq.8";R:4;s:42:"1202:zbqry.angvba.cbeghthrfr.ertvba.ynaq.9";R:4;s:43:"1202:zbqry.angvba.cbeghthrfr.ertvba.ynaq.10";R:4;s:43:"1202:zbqry.angvba.cbeghthrfr.ertvba.ynaq.11";R:4;s:43:"1202:zbqry.angvba.cbeghthrfr.ertvba.evire.1";R:4;s:43:"1202:zbqry.angvba.cbeghthrfr.ertvba.evire.2";R:4;s:43:"1202:zbqry.angvba.cbeghthrfr.ertvba.evire.3";R:4;s:43:"1202:zbqry.angvba.cbeghthrfr.ertvba.evire.4";R:4;s:43:"1202:zbqry.angvba.cbeghthrfr.ertvba.evire.5";R:4;s:43:"1202:zbqry.angvba.cbeghthrfr.ertvba.evire.6";R:4;s:43:"1202:zbqry.angvba.cbeghthrfr.ertvba.evire.7";R:4;s:43:"1202:zbqry.angvba.cbeghthrfr.ertvba.evire.8";R:4;s:43:"1202:zbqry.angvba.cbeghthrfr.ertvba.evire.9";R:4;s:44:"1202:zbqry.angvba.cbeghthrfr.ertvba.evire.10";R:4;s:44:"1202:zbqry.angvba.cbeghthrfr.ertvba.evire.11";R:4;s:44:"1202:zbqry.angvba.cbeghthrfr.ertvba.evire.12";R:4;s:44:"1202:zbqry.angvba.cbeghthrfr.ertvba.evire.13";R:4;s:44:"1202:zbqry.angvba.cbeghthrfr.ertvba.evire.14";R:4;s:44:"1202:zbqry.angvba.cbeghthrfr.ertvba.evire.15";R:4;s:44:"1202:zbqry.angvba.cbeghthrfr.ertvba.evire.16";R:4;s:44:"1202:zbqry.angvba.cbeghthrfr.ertvba.evire.17";R:4;s:44:"1202:zbqry.angvba.cbeghthrfr.ertvba.evire.18";R:4;s:44:"1202:zbqry.angvba.cbeghthrfr.ertvba.evire.19";R:4;s:44:"1202:zbqry.angvba.cbeghthrfr.ertvba.evire.20";R:4;s:46:"1202:zbqry.angvba.cbeghthrfr.ertvba.zbhagnva.1";R:4;s:46:"1202:zbqry.angvba.cbeghthrfr.ertvba.zbhagnva.2";R:4;s:46:"1202:zbqry.angvba.cbeghthrfr.ertvba.zbhagnva.3";R:4;s:46:"1202:zbqry.angvba.cbeghthrfr.ertvba.zbhagnva.4";R:4;s:46:"1202:zbqry.angvba.cbeghthrfr.ertvba.zbhagnva.5";R:4;s:46:"1202:zbqry.angvba.cbeghthrfr.ertvba.zbhagnva.6";R:4;s:46:"1202:zbqry.angvba.cbeghthrfr.ertvba.zbhagnva.7";R:4;s:46:"1202:zbqry.angvba.cbeghthrfr.ertvba.zbhagnva.8";R:4;s:46:"1202:zbqry.angvba.cbeghthrfr.ertvba.zbhagnva.9";R:4;s:42:"1202:zbqry.angvba.ehffvna.frggyrzraganzr.0";R:4;s:42:"1202:zbqry.angvba.ehffvna.frggyrzraganzr.1";R:4;s:42:"1202:zbqry.angvba.ehffvna.frggyrzraganzr.2";R:4;s:42:"1202:zbqry.angvba.ehffvna.frggyrzraganzr.3";R:4;s:42:"1202:zbqry.angvba.ehffvna.frggyrzraganzr.4";R:4;s:42:"1202:zbqry.angvba.ehffvna.frggyrzraganzr.5";R:4;s:42:"1202:zbqry.angvba.ehffvna.frggyrzraganzr.6";R:4;s:42:"1202:zbqry.angvba.ehffvna.frggyrzraganzr.7";R:4;s:42:"1202:zbqry.angvba.ehffvna.frggyrzraganzr.8";R:4;s:42:"1202:zbqry.angvba.ehffvna.frggyrzraganzr.9";R:4;s:43:"1202:zbqry.angvba.ehffvna.frggyrzraganzr.10";R:4;s:43:"1202:zbqry.angvba.ehffvna.frggyrzraganzr.11";R:4;s:43:"1202:zbqry.angvba.ehffvna.frggyrzraganzr.12";R:4;s:43:"1202:zbqry.angvba.ehffvna.frggyrzraganzr.13";R:4;s:43:"1202:zbqry.angvba.ehffvna.frggyrzraganzr.14";R:4;s:43:"1202:zbqry.angvba.ehffvna.frggyrzraganzr.15";R:4;s:43:"1202:zbqry.angvba.ehffvna.frggyrzraganzr.16";R:4;s:43:"1202:zbqry.angvba.ehffvna.frggyrzraganzr.17";R:4;s:43:"1202:zbqry.angvba.ehffvna.frggyrzraganzr.18";R:4;s:43:"1202:zbqry.angvba.ehffvna.frggyrzraganzr.19";R:4;s:43:"1202:zbqry.angvba.ehffvna.frggyrzraganzr.20";R:4;s:43:"1202:zbqry.angvba.ehffvna.frggyrzraganzr.21";R:4;s:43:"1202:zbqry.angvba.ehffvna.frggyrzraganzr.22";R:4;s:43:"1202:zbqry.angvba.ehffvna.frggyrzraganzr.23";R:4;s:39:"1202:zbqry.angvba.ehffvna.ertvba.ynaq.1";R:4;s:39:"1202:zbqry.angvba.ehffvna.ertvba.ynaq.2";R:4;s:39:"1202:zbqry.angvba.ehffvna.ertvba.ynaq.3";R:4;s:39:"1202:zbqry.angvba.ehffvna.ertvba.ynaq.4";R:4;s:39:"1202:zbqry.angvba.ehffvna.ertvba.ynaq.5";R:4;s:40:"1202:zbqry.angvba.ehffvna.ertvba.evire.1";R:4;s:40:"1202:zbqry.angvba.ehffvna.ertvba.evire.2";R:4;s:40:"1202:zbqry.angvba.ehffvna.ertvba.evire.3";R:4;s:40:"1202:zbqry.angvba.ehffvna.ertvba.evire.4";R:4;s:43:"1202:zbqry.angvba.ehffvna.ertvba.zbhagnva.1";R:4;s:43:"1202:zbqry.angvba.ehffvna.ertvba.zbhagnva.2";R:4;s:43:"1202:zbqry.angvba.ehffvna.ertvba.zbhagnva.3";R:4;s:43:"1202:zbqry.angvba.ehffvna.ertvba.zbhagnva.4";R:4;s:43:"1202:zbqry.angvba.ehffvna.ertvba.zbhagnva.5";R:4;s:42:"1202:zbqry.angvba.fjrqvfu.frggyrzraganzr.0";R:4;s:42:"1202:zbqry.angvba.fjrqvfu.frggyrzraganzr.1";R:4;s:42:"1202:zbqry.angvba.fjrqvfu.frggyrzraganzr.2";R:4;s:42:"1202:zbqry.angvba.fjrqvfu.frggyrzraganzr.3";R:4;s:42:"1202:zbqry.angvba.fjrqvfu.frggyrzraganzr.4";R:4;s:42:"1202:zbqry.angvba.fjrqvfu.frggyrzraganzr.5";R:4;s:42:"1202:zbqry.angvba.fjrqvfu.frggyrzraganzr.6";R:4;s:42:"1202:zbqry.angvba.fjrqvfu.frggyrzraganzr.7";R:4;s:42:"1202:zbqry.angvba.fjrqvfu.frggyrzraganzr.8";R:4;s:42:"1202:zbqry.angvba.fjrqvfu.frggyrzraganzr.9";R:4;s:43:"1202:zbqry.angvba.fjrqvfu.frggyrzraganzr.10";R:4;s:43:"1202:zbqry.angvba.fjrqvfu.frggyrzraganzr.11";R:4;s:43:"1202:zbqry.angvba.fjrqvfu.frggyrzraganzr.12";R:4;s:43:"1202:zbqry.angvba.fjrqvfu.frggyrzraganzr.13";R:4;s:43:"1202:zbqry.angvba.fjrqvfu.frggyrzraganzr.14";R:4;s:43:"1202:zbqry.angvba.fjrqvfu.frggyrzraganzr.15";R:4;s:43:"1202:zbqry.angvba.fjrqvfu.frggyrzraganzr.16";R:4;s:43:"1202:zbqry.angvba.fjrqvfu.frggyrzraganzr.17";R:4;s:43:"1202:zbqry.angvba.fjrqvfu.frggyrzraganzr.18";R:4;s:43:"1202:zbqry.angvba.fjrqvfu.frggyrzraganzr.19";R:4;s:43:"1202:zbqry.angvba.fjrqvfu.frggyrzraganzr.20";R:4;s:43:"1202:zbqry.angvba.fjrqvfu.frggyrzraganzr.21";R:4;s:39:"1202:zbqry.angvba.fjrqvfu.ertvba.ynaq.1";R:4;s:39:"1202:zbqry.angvba.fjrqvfu.ertvba.ynaq.2";R:4;s:39:"1202:zbqry.angvba.fjrqvfu.ertvba.ynaq.3";R:4;s:40:"1202:zbqry.angvba.fjrqvfu.ertvba.evire.1";R:4;s:40:"1202:zbqry.angvba.fjrqvfu.ertvba.evire.2";R:4;s:40:"1202:zbqry.angvba.fjrqvfu.ertvba.evire.3";R:4;s:40:"1202:zbqry.angvba.fjrqvfu.ertvba.evire.4";R:4;s:41:"1202:zbqry.angvba.qnavfu.frggyrzraganzr.0";R:4;s:41:"1202:zbqry.angvba.qnavfu.frggyrzraganzr.1";R:4;s:41:"1202:zbqry.angvba.qnavfu.frggyrzraganzr.2";R:4;s:41:"1202:zbqry.angvba.qnavfu.frggyrzraganzr.3";R:4;s:41:"1202:zbqry.angvba.qnavfu.frggyrzraganzr.4";R:4;s:41:"1202:zbqry.angvba.qnavfu.frggyrzraganzr.5";R:4;s:41:"1202:zbqry.angvba.qnavfu.frggyrzraganzr.6";R:4;s:41:"1202:zbqry.angvba.qnavfu.frggyrzraganzr.7";R:4;s:41:"1202:zbqry.angvba.qnavfu.frggyrzraganzr.8";R:4;s:41:"1202:zbqry.angvba.qnavfu.frggyrzraganzr.9";R:4;s:42:"1202:zbqry.angvba.qnavfu.frggyrzraganzr.10";R:4;s:42:"1202:zbqry.angvba.qnavfu.frggyrzraganzr.11";R:4;s:38:"1202:zbqry.angvba.qnavfu.ertvba.ynaq.1";R:4;s:38:"1202:zbqry.angvba.qnavfu.ertvba.ynaq.2";R:4;s:38:"1202:zbqry.angvba.qnavfu.ertvba.ynaq.3";R:4;s:38:"1202:zbqry.angvba.qnavfu.ertvba.ynaq.4";R:4;s:38:"1202:zbqry.angvba.qnavfu.ertvba.ynaq.5";R:4;s:38:"1202:zbqry.angvba.qnavfu.ertvba.ynaq.6";R:4;s:39:"1202:zbqry.angvba.qnavfu.ertvba.evire.1";R:4;s:39:"1202:zbqry.angvba.qnavfu.ertvba.evire.2";R:4;s:39:"1202:zbqry.angvba.qnavfu.ertvba.evire.3";R:4;s:42:"1202:zbqry.angvba.qnavfu.ertvba.zbhagnva.1";R:4;s:42:"1202:zbqry.angvba.qnavfu.ertvba.zbhagnva.2";R:4;s:42:"1202:zbqry.angvba.qnavfu.ertvba.zbhagnva.3";R:4;s:42:"1202:zbqry.angvba.qnavfu.ertvba.zbhagnva.4";R:4;s:42:"1202:zbqry.angvba.qnavfu.ertvba.zbhagnva.5";R:4;s:42:"1202:zbqry.angvba.qnavfu.ertvba.zbhagnva.6";R:4;s:24:"1202:zbqry.ertvba.nepgvp";R:4;s:27:"1202:zbqry.ertvba.nagnepgvp";R:4;s:29:"1202:zbqry.ertvba.vaynaqynxrf";R:4;s:25:"1202:zbqry.ertvba.cnpvsvp";R:4;s:34:"1202:zbqry.ertvba.cnpvsvp.qvfpbire";R:4;s:30:"1202:zbqry.ertvba.abegucnpvsvp";R:4;s:30:"1202:zbqry.ertvba.fbhgucnpvsvp";R:4;s:26:"1202:zbqry.ertvba.ngynagvp";R:4;s:31:"1202:zbqry.ertvba.abegungynagvp";R:4;s:31:"1202:zbqry.ertvba.fbhgungynagvp";R:4;s:28:"1202:zbqry.ertvba.bprna.anzr";R:4;s:31:"1202:zbqry.ertvba.bprna.haxabja";R:4;s:28:"1202:zbqry.ertvba.pbnfg.anzr";R:4;s:31:"1202:zbqry.ertvba.pbnfg.haxabja";R:4;s:27:"1202:zbqry.ertvba.ynxr.anzr";R:4;s:30:"1202:zbqry.ertvba.ynxr.haxabja";R:4;s:28:"1202:zbqry.ertvba.evire.anzr";R:4;s:31:"1202:zbqry.ertvba.evire.haxabja";R:4;s:27:"1202:zbqry.ertvba.ynaq.anzr";R:4;s:30:"1202:zbqry.ertvba.ynaq.haxabja";R:4;s:31:"1202:zbqry.ertvba.zbhagnva.anzr";R:4;s:34:"1202:zbqry.ertvba.zbhagnva.haxabja";R:4;s:29:"1202:zbqry.ertvba.qrfreg.anzr";R:4;s:32:"1202:zbqry.ertvba.qrfreg.haxabja";R:4;s:28:"1202:zbqry.ertvba.abegu.anzr";R:4;s:32:"1202:zbqry.ertvba.abegurnfg.anzr";R:4;s:27:"1202:zbqry.ertvba.rnfg.anzr";R:4;s:32:"1202:zbqry.ertvba.fbhgurnfg.anzr";R:4;s:28:"1202:zbqry.ertvba.fbhgu.anzr";R:4;s:32:"1202:zbqry.ertvba.fbhgujrfg.anzr";R:4;s:27:"1202:zbqry.ertvba.jrfg.anzr";R:4;s:32:"1202:zbqry.ertvba.abegujrfg.anzr";R:4;s:29:"1202:zbqry.ertvba.pragre.anzr";R:4;s:25:"1202:zbqry.ertvba.qrsnhyg";R:4;s:41:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.0";R:4;s:41:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.1";R:4;s:41:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.2";R:4;s:41:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.3";R:4;s:41:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.4";R:4;s:41:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.5";R:4;s:41:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.6";R:4;s:41:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.7";R:4;s:41:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.8";R:4;s:41:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.9";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.10";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.11";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.12";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.13";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.14";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.15";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.16";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.17";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.18";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.19";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.20";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.21";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.22";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.23";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.24";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.25";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.26";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.27";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.28";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.29";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.30";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.31";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.32";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.33";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.34";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.35";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.36";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.37";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.38";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.39";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.40";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.41";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.42";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.43";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.44";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.45";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.46";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.47";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.48";R:4;s:42:"1202:zbqry.angvba.ncnpur.frggyrzraganzr.49";R:4;s:41:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.0";R:4;s:41:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.1";R:4;s:41:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.2";R:4;s:41:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.3";R:4;s:41:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.4";R:4;s:41:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.5";R:4;s:41:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.6";R:4;s:41:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.7";R:4;s:41:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.8";R:4;s:41:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.9";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.10";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.11";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.12";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.13";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.14";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.15";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.16";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.17";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.18";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.19";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.20";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.21";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.22";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.23";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.24";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.25";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.26";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.27";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.28";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.29";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.30";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.31";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.32";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.33";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.34";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.35";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.36";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.37";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.38";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.39";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.40";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.41";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.42";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.43";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.44";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.45";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.46";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.47";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.48";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.49";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.50";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.51";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.52";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.53";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.54";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.55";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.56";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.57";R:4;s:42:"1202:zbqry.angvba.nenjnx.frggyrzraganzr.58";R:4;s:40:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.0";R:4;s:40:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.1";R:4;s:40:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.2";R:4;s:40:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.3";R:4;s:40:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.4";R:4;s:40:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.5";R:4;s:40:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.6";R:4;s:40:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.7";R:4;s:40:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.8";R:4;s:40:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.9";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.10";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.11";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.12";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.13";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.14";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.15";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.16";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.17";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.18";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.19";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.20";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.21";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.22";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.23";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.24";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.25";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.26";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.27";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.28";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.29";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.30";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.31";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.32";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.33";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.34";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.35";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.36";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.37";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.38";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.39";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.40";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.41";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.42";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.43";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.44";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.45";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.46";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.47";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.48";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.49";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.50";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.51";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.52";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.53";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.54";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.55";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.56";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.57";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.58";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.59";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.60";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.61";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.62";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.63";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.64";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.65";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.66";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.67";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.68";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.69";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.70";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.71";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.72";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.73";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.74";R:4;s:41:"1202:zbqry.angvba.nmgrp.frggyrzraganzr.75";R:4;s:43:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.0";R:4;s:43:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.1";R:4;s:43:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.2";R:4;s:43:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.3";R:4;s:43:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.4";R:4;s:43:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.5";R:4;s:43:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.6";R:4;s:43:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.7";R:4;s:43:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.8";R:4;s:43:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.9";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.10";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.11";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.12";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.13";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.14";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.15";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.16";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.17";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.18";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.19";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.20";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.21";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.22";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.23";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.24";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.25";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.26";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.27";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.28";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.29";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.30";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.31";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.32";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.33";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.34";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.35";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.36";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.37";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.38";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.39";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.40";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.41";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.42";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.43";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.44";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.45";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.46";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.47";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.48";R:4;s:44:"1202:zbqry.angvba.purebxrr.frggyrzraganzr.49";R:4;s:39:"1202:zbqry.angvba.vapn.frggyrzraganzr.0";R:4;s:39:"1202:zbqry.angvba.vapn.frggyrzraganzr.1";R:4;s:39:"1202:zbqry.angvba.vapn.frggyrzraganzr.2";R:4;s:39:"1202:zbqry.angvba.vapn.frggyrzraganzr.3";R:4;s:39:"1202:zbqry.angvba.vapn.frggyrzraganzr.4";R:4;s:39:"1202:zbqry.angvba.vapn.frggyrzraganzr.5";R:4;s:39:"1202:zbqry.angvba.vapn.frggyrzraganzr.6";R:4;s:39:"1202:zbqry.angvba.vapn.frggyrzraganzr.7";R:4;s:39:"1202:zbqry.angvba.vapn.frggyrzraganzr.8";R:4;s:39:"1202:zbqry.angvba.vapn.frggyrzraganzr.9";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.10";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.11";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.12";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.13";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.14";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.15";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.16";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.17";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.18";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.19";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.20";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.21";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.22";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.23";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.24";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.25";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.26";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.27";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.28";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.29";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.30";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.31";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.32";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.33";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.34";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.35";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.36";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.37";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.38";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.39";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.40";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.41";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.42";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.43";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.44";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.45";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.46";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.47";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.48";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.49";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.50";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.51";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.52";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.53";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.54";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.55";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.56";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.57";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.58";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.59";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.60";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.61";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.62";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.63";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.64";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.65";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.66";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.67";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.68";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.69";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.70";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.71";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.72";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.73";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.74";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.75";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.76";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.77";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.78";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.79";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.80";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.81";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.82";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.83";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.84";R:4;s:40:"1202:zbqry.angvba.vapn.frggyrzraganzr.85";R:4;s:43:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.0";R:4;s:43:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.1";R:4;s:43:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.2";R:4;s:43:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.3";R:4;s:43:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.4";R:4;s:43:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.5";R:4;s:43:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.6";R:4;s:43:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.7";R:4;s:43:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.8";R:4;s:43:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.9";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.10";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.11";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.12";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.13";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.14";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.15";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.16";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.17";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.18";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.19";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.20";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.21";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.22";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.23";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.24";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.25";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.26";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.27";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.28";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.29";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.30";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.31";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.32";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.33";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.34";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.35";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.36";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.37";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.38";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.39";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.40";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.41";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.42";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.43";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.44";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.45";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.46";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.47";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.48";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.49";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.50";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.51";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.52";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.53";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.54";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.55";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.56";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.57";R:4;s:44:"1202:zbqry.angvba.vebdhbvf.frggyrzraganzr.58";R:4;s:40:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.0";R:4;s:40:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.1";R:4;s:40:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.2";R:4;s:40:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.3";R:4;s:40:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.4";R:4;s:40:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.5";R:4;s:40:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.6";R:4;s:40:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.7";R:4;s:40:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.8";R:4;s:40:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.9";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.10";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.11";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.12";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.13";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.14";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.15";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.16";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.17";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.18";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.19";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.20";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.21";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.22";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.23";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.24";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.25";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.26";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.27";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.28";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.29";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.30";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.31";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.32";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.33";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.34";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.35";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.36";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.37";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.38";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.39";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.40";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.41";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.42";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.43";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.44";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.45";R:4;s:41:"1202:zbqry.angvba.fvbhk.frggyrzraganzr.46";R:4;s:39:"1202:zbqry.angvba.ghcv.frggyrzraganzr.0";R:4;s:39:"1202:zbqry.angvba.ghcv.frggyrzraganzr.1";R:4;s:39:"1202:zbqry.angvba.ghcv.frggyrzraganzr.2";R:4;s:39:"1202:zbqry.angvba.ghcv.frggyrzraganzr.3";R:4;s:39:"1202:zbqry.angvba.ghcv.frggyrzraganzr.4";R:4;s:39:"1202:zbqry.angvba.ghcv.frggyrzraganzr.5";R:4;s:39:"1202:zbqry.angvba.ghcv.frggyrzraganzr.6";R:4;s:39:"1202:zbqry.angvba.ghcv.frggyrzraganzr.7";R:4;s:39:"1202:zbqry.angvba.ghcv.frggyrzraganzr.8";R:4;s:39:"1202:zbqry.angvba.ghcv.frggyrzraganzr.9";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.10";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.11";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.12";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.13";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.14";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.15";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.16";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.17";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.18";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.19";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.20";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.21";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.22";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.23";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.24";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.25";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.26";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.27";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.28";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.29";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.30";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.31";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.32";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.33";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.34";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.35";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.36";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.37";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.38";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.39";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.40";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.41";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.42";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.43";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.44";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.45";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.46";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.47";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.48";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.49";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.50";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.51";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.52";R:4;s:40:"1202:zbqry.angvba.ghcv.frggyrzraganzr.53";R:4;s:22:"1202:vafgnyyre.serrpby";R:4;s:34:"1202:vafgnyyre.serrpby.qrfpevcgvba";R:4;s:25:"1202:vafgnyyre.tnzrznahny";R:4;s:37:"1202:vafgnyyre.tnzrznahny.qrfpevcgvba";R:4;s:25:"1202:vafgnyyre.fbheprpbqr";R:4;s:37:"1202:vafgnyyre.fbheprpbqr.qrfpevcgvba";R:4;s:20:"1202:vafgnyyre.zhfvp";R:4;s:32:"1202:vafgnyyre.zhfvp.qrfpevcgvba";R:4;s:27:"1202:vafgnyyre.fbhaqrssrpgf";R:4;s:39:"1202:vafgnyyre.fbhaqrssrpgf.qrfpevcgvba";R:4;s:25:"1202:vafgnyyre.zbivrpyvcf";R:4;s:37:"1202:vafgnyyre.zbivrpyvcf.qrfpevcgvba";R:4;s:38:"1202:vafgnyyre.zbivrpyvcf.qrfpevcgvba2";R:4;s:27:"1202:vafgnyyre.ybpngvba.jro";R:4;s:30:"1202:vafgnyyre.serrpbyynathntr";R:4;s:41:"1202:vafgnyyre.serrpbyynathntr.nhgbqrgrpg";R:4;s:42:"1202:vafgnyyre.serrpbyynathntr.qrfpevcgvba";R:4;s:24:"1202:vafgnyyre.hfresvyrf";R:4;s:29:"1202:vafgnyyre.hfresvyrf.ubzr";R:4;s:32:"1202:vafgnyyre.hfresvyrf.serrpby";R:4;s:30:"1202:vafgnyyre.hfresvyrf.bgure";R:4;s:11:"1218:npgvba";s:12:"bhg-shqsbehz";s:22:"1218:nqq_gb_ohqql_yvfg";R:5;s:10:"1218:nqzva";R:5;s:24:"1218:nqzva_pbageby_cnary";R:5;s:18:"1218:nqzvavfgengbe";R:5;s:15:"1218:nggnpuzrag";R:5;s:11:"1218:ningne";R:5;s:23:"1218:nirentr_cbfg_pbhag";R:5;s:14:"1218:ovbtencul";R:5;s:15:"1218:ovegu_qngr";R:5;s:7:"1218:ol";R:5;s:11:"1218:ol_zbq";R:5;s:17:"1218:pheerag_gvzr";R:5;s:24:"1218:phfgbz_ningne_dhrhr";R:5;s:16:"1218:qngr_cbfgrq";R:5;s:20:"1218:qngr_ertvfgrerq";R:5;s:21:"1218:qbjaybnq_pbhagre";R:5;s:26:"1218:czft_qbjaybnq_pbhagre";R:5;s:10:"1218:rznvy";R:5;s:20:"1218:rznvy_gb_sevraq";R:5;s:25:"1218:rznvy_gb_sevraq_qrfp";R:5;s:15:"1218:rznvy_hfre";R:5;s:8:"1218:snd";R:5;s:21:"1218:svefg_haernq_zft";R:5;s:26:"1218:svefg_haernq_zft_qrfp";R:5;s:14:"1218:syng_ivrj";R:5;s:10:"1218:sbehz";R:5;s:15:"1218:sbehz_vpba";R:5;s:23:"1218:sbehz_arj_zrffntrf";R:5;s:24:"1218:sbehz_abar_zrffntrf";R:5;s:23:"1218:sbehz_byq_zrffntrf";R:5;s:9:"1218:sebz";R:5;s:11:"1218:traqre";R:5;s:7:"1218:tb";R:5;s:18:"1218:tbgb_arkg_zft";R:5;s:18:"1218:tbgb_ceri_zft";R:5;s:9:"1218:ubzr";R:5;s:13:"1218:ubzrcntr";R:5;s:22:"1218:vpd_pbageby_cnary";R:5;s:21:"1218:vpd_zrffntr_sbez";R:5;s:16:"1218:vtaber_hfre";R:5;s:11:"1218:vz_nvz";R:5;s:12:"1218:vz_zfaz";R:5;s:13:"1218:vz_lnubb";R:5;s:10:"1218:vzntr";R:5;s:16:"1218:vaqrk_sbehz";R:5;s:20:"1218:vaqrk_arj_cbfgf";R:5;s:23:"1218:vaqrk_ab_arj_cbfgf";R:5;s:26:"1218:vaqrk_hey_erqverpgvba";R:5;s:14:"1218:vagrerfgf";R:5;s:14:"1218:ynfg_cbfg";R:5;s:20:"1218:ynfg_guernq_zft";R:5;s:11:"1218:yrtraq";R:5;s:13:"1218:ybpngvba";R:5;s:16:"1218:ybpx_guernq";R:5;s:11:"1218:ybpxrq";R:5;s:26:"1218:ybpxrq_jvgu_arj_cbfgf";R:5;s:19:"1218:ybttrq_va_yvfg";R:5;s:10:"1218:ybtva";R:5;s:17:"1218:ybtva_urnqre";R:5;s:11:"1218:ybtbhg";R:5;s:18:"1218:znex_nyy_ernq";R:5;s:23:"1218:znex_nyy_ernq_qrfp";R:5;s:12:"1218:zrzoref";R:5;s:13:"1218:pnyraqne";R:5;s:18:"1218:pny_tbgb_qngr";R:5;s:20:"1218:pny_qnl_urnqvat";R:5;s:18:"1218:pny_ab_riragf";R:5;s:15:"1218:pny_hcqngr";R:5;s:17:"1218:pny_oveguqnl";R:5;s:21:"1218:pny_oveguqnl_ntr";R:5;s:12:"1218:zrffntr";R:5;s:20:"1218:zrffntr_pbhagre";R:5;s:18:"1218:zrffntr_vaqrk";R:5;s:23:"1218:zrffntr_vaqrk_qrfp";R:5;s:22:"1218:zvavzvmr_pngrtbel";R:5;s:21:"1218:zvavzvmr_zrffntr";R:5;s:21:"1218:zbqrengvba_dhrhr";R:5;s:14:"1218:zbqrengbe";R:5;s:17:"1218:zbqrengbe_bs";R:5;s:22:"1218:zbqrengbe_bcgvbaf";R:5;s:15:"1218:zbqrengbef";R:5;s:25:"1218:zber_haernq_zrffntrf";R:5;s:30:"1218:zber_haernq_zrffntrf_qrfp";R:5;s:16:"1218:zbir_guernq";R:5;s:10:"1218:zbirq";R:5;s:25:"1218:zbirq_guernq_zrffntr";R:5;s:7:"1218:an";R:5;s:14:"1218:arj_cbfgf";R:5;s:25:"1218:arj_cevingr_zrffntrf";R:5;s:15:"1218:arj_guernq";R:5;s:16:"1218:arjrfg_hfre";R:5;s:14:"1218:arkg_cntr";R:5;s:16:"1218:arkg_guernq";R:5;s:16:"1218:ab_zrffntrf";R:5;s:16:"1218:ab_zft_obql";R:5;s:17:"1218:ab_arj_cbfgf";R:5;s:13:"1218:ab_cbfgf";R:5;s:25:"1218:ab_fhofpevorq_sbehzf";R:5;s:26:"1218:ab_fhofpevorq_guernqf";R:5;s:26:"1218:ab_obbxznexrq_guernqf";R:5;s:21:"1218:ab_haernq_ybpxrq";R:5;s:18:"1218:ab_haernq_zft";R:5;s:24:"1218:ab_haernq_zft_haert";R:5;s:14:"1218:ahz_cntrf";R:5;s:14:"1218:ahz_ibgrf";R:5;s:15:"1218:bpphcngvba";R:5;s:8:"1218:bss";R:5;s:7:"1218:ba";R:5;s:17:"1218:cntr_gvzvatf";R:5;s:7:"1218:cz";R:5;s:9:"1218:cbyy";R:5;s:15:"1218:cbfg_pbhag";R:5;s:17:"1218:cbfg_pbhag_y";R:5;s:10:"1218:cbfgf";R:5;s:12:"1218:cbfgf_p";R:5;s:16:"1218:ceri_guernq";R:5;s:28:"1218:hfevasb_cevingr_zrffntr";R:5;s:12:"1218:cebsvyr";R:5;s:17:"1218:cebsvyr_qrfp";R:5;s:16:"1218:engr_guernq";R:5;s:11:"1218:engvat";R:5;s:17:"1218:engvat_genpx";R:5;s:17:"1218:erserfu_yvfg";R:5;s:13:"1218:ertvfgre";R:5;s:15:"1218:ertvfgrerq";R:5;s:18:"1218:ertvfgrerq_ba";R:5;s:12:"1218:ercyvrf";R:5;s:18:"1218:ercbeg_gb_zbq";R:5;s:22:"1218:ercbegrq_zrffntrf";R:5;s:21:"1218:erirny_nyy_cbfgf";R:5;s:16:"1218:erirny_cbfg";R:5;s:11:"1218:frnepu";R:5;s:21:"1218:fry_gbqnlf_cbfgf";R:5;s:26:"1218:fry_gbqnlf_cbfgf_qrfp";R:5;s:25:"1218:fry_hanafjrerq_cbfgf";R:5;s:30:"1218:fry_hanafjrerq_cbfgf_qrfp";R:5;s:24:"1218:fry_haernq_zrffntrf";R:5;s:29:"1218:fry_haernq_zrffntrf_qrfp";R:5;s:9:"1218:fraq";R:5;s:17:"1218:fraq_cz_qrfp";R:5;s:17:"1218:fraqre_rznvy";R:5;s:16:"1218:fraqre_anzr";R:5;s:18:"1218:fubj_cbfgf_ol";R:5;s:9:"1218:fvmr";R:5;s:11:"1218:fgnghf";R:5;s:16:"1218:fgnghf_yvar";R:5;s:11:"1218:fgvpxl";R:5;s:18:"1218:fgbc_vtabevat";R:5;s:18:"1218:fho_gb_guernq";R:5;s:23:"1218:fho_gb_guernq_qrfp";R:5;s:20:"1218:obbxznex_guernq";R:5;s:25:"1218:obbxznex_guernq_qrfp";R:5;s:12:"1218:fhowrpg";R:5;s:14:"1218:fhofpevor";R:5;s:19:"1218:fhofpevor_qrfp";R:5;s:22:"1218:fhofpevorq_sbehzf";R:5;s:27:"1218:fhofpevorq_sbehzf_qrfp";R:5;s:23:"1218:fhofpevorq_guernqf";R:5;s:28:"1218:fhofpevorq_guernqf_qrfp";R:5;s:23:"1218:obbxznexrq_guernqf";R:5;s:26:"1218:fjvgpu_gb_guernq_ivrj";R:5;s:11:"1218:guernq";R:5;s:24:"1218:guernq_naabhaprzrag";R:5;s:28:"1218:guernq_svefg_haernq_zft";R:5;s:18:"1218:guernq_guernq";R:5;s:12:"1218:guernqf";R:5;s:9:"1218:gvzr";R:5;s:17:"1218:gbqnlf_cbfgf";R:5;s:22:"1218:gbqnlf_cbfgf_qrfp";R:5;s:19:"1218:ha_vtaber_hfre";R:5;s:21:"1218:hanafjrerq_cbfgf";R:5;s:26:"1218:hanafjrerq_cbfgf_qrfp";R:5;s:18:"1218:haybpx_guernq";R:5;s:15:"1218:haernq_zft";R:5;s:22:"1218:haernq_zft_ybpxrq";R:5;s:17:"1218:haernq_cbfgf";R:5;s:22:"1218:haernq_cbfgf_qrfp";R:5;s:22:"1218:hafho_sebz_guernq";R:5;s:27:"1218:hafho_sebz_guernq_qrfp";R:5;s:22:"1218:haobbxznex_guernq";R:5;s:27:"1218:haobbxznex_guernq_qrfp";R:5;s:16:"1218:hafhofpevor";R:5;s:21:"1218:hafhofpevor_qrfp";R:5;s:15:"1218:hcqngrq_ba";R:5;s:9:"1218:hfre";R:5;s:17:"1218:hfre_pbhagre";R:5;s:14:"1218:hfre_vasb";R:5;s:16:"1218:hfre_vasb_y";R:5;s:17:"1218:hfre_bssyvar";R:5;s:16:"1218:hfre_bayvar";R:5;s:22:"1218:hfevasb_ynfg_cbfg";R:5;s:17:"1218:ivrj_erfhygf";R:5;s:10:"1218:ivrjf";R:5;s:9:"1218:ibgr";R:5;s:16:"1218:ibgr_ohggba";R:5;s:20:"1218:ibgr_sbe_guernq";R:5;s:18:"1218:jnf_zbirq_zft";R:5;s:20:"1218:jrypbzr_zrffntr";R:5;s:19:"1218:jung_ccy_qbvat";R:5;s:24:"1218:ercbegrq_qry_ercbeg";R:5;s:20:"1218:ercbegrq_ernfba";R:5;s:16:"1218:ercbegrq_ba";R:5;s:25:"1218:ercbegrq_ercbegrq_ol";R:5;s:26:"1218:ercbegrq_ercbegrq_zft";R:5;s:28:"1218:zbqdhr_craqvat_nccebiny";R:5;s:19:"1218:zbqdhr_nccebir";R:5;s:18:"1218:zbqdhr_qryrgr";R:5;s:22:"1218:zbqdhr_ab_zrffntr";R:5;s:22:"1218:czft_arj_zrffntrf";R:5;s:22:"1218:czft_byq_zrffntrf";R:5;s:16:"1218:qral_erpvcg";R:5;s:21:"1218:qral_erpvcg_qrfp";R:5;s:15:"1218:erfgber_gb";R:5;s:12:"1218:zbir_gb";R:5;s:27:"1218:yvfg_ersrerf_ersreenyf";R:5;s:25:"1218:yvfg_ersrerf_zrzoref";R:5;s:24:"1218:yvfg_ersrerf_zrzore";R:5;s:18:"1218:ersrenyf_abar";R:5;s:24:"1218:ersrenyf_ersrerq_ol";R:5;s:24:"1218:ersrenyf_cbfg_pbhag";R:5;s:27:"1218:ersrenyf_ertvfgrerq_ba";R:5;s:20:"1218:ersrenyf_npgvba";R:5;s:13:"1218:czft_nyy";R:5;s:14:"1218:czft_abar";R:5;s:11:"1218:sbyqre";R:5;s:17:"1218:czft_ercyvrq";R:5;s:19:"1218:czft_sbejneqrq";R:5;s:17:"1218:czft_fhowrpg";R:5;s:16:"1218:czft_nhgube";R:5;s:14:"1218:czft_gvzr";R:5;s:18:"1218:czft_fryrpgrq";R:5;s:16:"1218:czft_qryrgr";R:5;s:17:"1218:phe_ccntr_cz";R:5;s:15:"1218:jevgvat_cz";R:5;s:20:"1218:oebjfvat_sbyqre";R:5;s:10:"1218:vaobk";R:5;s:10:"1218:qensg";R:5;s:9:"1218:frag";R:5;s:10:"1218:genfu";R:5;s:15:"1218:zft_nhgube";R:5;s:20:"1218:ningne_fry_sbez";R:5;s:15:"1218:ab_ningnef";R:5;s:12:"1218:zbagu_1";R:5;s:12:"1218:zbagu_2";R:5;s:12:"1218:zbagu_3";R:5;s:12:"1218:zbagu_4";R:5;s:12:"1218:zbagu_5";R:5;s:12:"1218:zbagu_6";R:5;s:12:"1218:zbagu_7";R:5;s:12:"1218:zbagu_8";R:5;s:12:"1218:zbagu_9";R:5;s:13:"1218:zbagu_10";R:5;s:13:"1218:zbagu_11";R:5;s:13:"1218:zbagu_12";R:5;s:11:"1218:fhaqnl";R:5;s:17:"1218:fhaqnl_fubeg";R:5;s:11:"1218:zbaqnl";R:5;s:17:"1218:zbaqnl_fubeg";R:5;s:12:"1218:ghrfqnl";R:5;s:18:"1218:ghrfqnl_fubeg";R:5;s:14:"1218:jrqarfqnl";R:5;s:20:"1218:jrqarfqnl_fubeg";R:5;s:13:"1218:guhefqnl";R:5;s:19:"1218:guhefqnl_fubeg";R:5;s:11:"1218:sevqnl";R:5;s:17:"1218:sevqnl_fubeg";R:5;s:13:"1218:fngheqnl";R:5;s:19:"1218:fngheqnl_fubeg";R:5;s:9:"1218:znyr";R:5;s:11:"1218:srznyr";R:5;s:16:"1218:hafcrpvsvrq";R:5;s:23:"1218:ertvfgre_gerr_ivrj";R:5;s:27:"1218:ertvfgre_zft_gerr_ivrj";R:5;s:27:"1218:ertvfgre_gerr_zft_ivrj";R:5;s:23:"1218:ertvfgre_syng_ivrj";R:5;s:22:"1218:hfr_sbehz_qrsnhyg";R:5;s:23:"1218:svaqhfre_hfre_vasb";R:5;s:22:"1218:svaqhfre_ol_ybtva";R:5;s:20:"1218:svaqhfre_fhozvg";R:5;s:26:"1218:svaqhfre_ab_fhpu_hfre";R:5;s:18:"1218:svaqhfre_hfre";R:5;s:23:"1218:svaqhfre_cbfgpbhag";R:5;s:22:"1218:svaqhfre_wbvaqngr";R:5;s:20:"1218:svaqhfre_npgvba";R:5;s:8:"1218:lrf";R:5;s:7:"1218:ab";R:5;s:19:"1218:ertvfgre_rznvy";R:5;s:20:"1218:rqvg_gvzr_yvzvg";R:5;s:23:"1218:ab_rqvg_gvzr_yvzvg";R:5;s:20:"1218:czhfreybp_ybtva";R:5;s:21:"1218:czhfreybp_fhozvg";R:5;s:19:"1218:czhfreybp_hfre";R:5;s:24:"1218:czhfreybp_ab_erfhyg";R:5;s:21:"1218:ertvfgre_ohvygva";R:5;s:25:"1218:ertvfgre_fcrpvsl_hey";R:5;s:22:"1218:ertvfgre_hcybnqrq";R:5;s:19:"1218:ertvfgre_ybtva";R:5;s:22:"1218:ertvfgre_cnffjbeq";R:5;s:23:"1218:ertvfgre_pbas_cnff";R:5;s:24:"1218:ertvfgre_rznvy_qrfp";R:5;s:18:"1218:ertvfgre_anzr";R:5;s:23:"1218:ertvfgre_lbhe_cnff";R:5;s:20:"1218:ertvfgre_hcqngr";R:5;s:25:"1218:ertvfgre_ningne_glcr";R:5;s:24:"1218:ertvfgre_qry_ningne";R:5;s:20:"1218:ertvfgre_ningne";R:5;s:24:"1218:ertvfgre_fry_ningne";R:5;s:33:"1218:ertvfgre_phfgbz_ningne_ehyrf";R:5;s:31:"1218:ertvfgre_phfgbz_ningne_hey";R:5;s:21:"1218:ertvfgre_cerivrj";R:5;s:34:"1218:ertvfgre_phfgbz_ningne_hcybnq";R:5;s:22:"1218:ertvfgre_ertvfgre";R:5;s:22:"1218:ertvfgre_erdhverq";R:5;s:27:"1218:ertvfgre_erdhverq_qrfp";R:5;s:22:"1218:ertvfgre_bcgvbany";R:5;s:27:"1218:ertvfgre_bcgvbany_qrfp";R:5;s:22:"1218:ertvfgre_ybpngvba";R:5;s:24:"1218:ertvfgre_bpphcngvba";R:5;s:23:"1218:ertvfgre_vagrerfgf";R:5;s:19:"1218:ertvfgre_vzntr";R:5;s:17:"1218:ertvfgre_vpd";R:5;s:17:"1218:ertvfgre_nvz";R:5;s:19:"1218:ertvfgre_lnubb";R:5;s:18:"1218:ertvfgre_zfaz";R:5;s:22:"1218:ertvfgre_ubzrcntr";R:5;s:18:"1218:ertvfgre_oqnl";R:5;s:23:"1218:ertvfgre_oqnl_qrfp";R:5;s:17:"1218:ertvfgre_qnl";R:5;s:19:"1218:ertvfgre_zbagu";R:5;s:18:"1218:ertvfgre_lrne";R:5;s:20:"1218:ertvfgre_traqre";R:5;s:17:"1218:ertvfgre_ovb";R:5;s:22:"1218:ertvfgre_ovb_qrfp";R:5;s:19:"1218:ertvfgre_cersf";R:5;s:17:"1218:ertvfgre_fvt";R:5;s:22:"1218:ertvfgre_fvt_qrfp";R:5;s:19:"1218:ertvfgre_erfrg";R:5;s:29:"1218:ertvfgre_qrs_guernq_ivrj";R:5;s:26:"1218:ertvfgre_zft_cre_cntr";R:5;s:22:"1218:ertvfgre_fubj_fvt";R:5;s:27:"1218:ertvfgre_fubj_fvt_qrfp";R:5;s:29:"1218:ertvfgre_hfr_fvt_qrsnhyg";R:5;s:34:"1218:ertvfgre_hfr_fvt_qrsnhyg_qrfp";R:5;s:22:"1218:ertvfgre_gvzrmbar";R:5;s:26:"1218:ertvfgre_vtaber_nqzva";R:5;s:28:"1218:ertvfgre_vaivfvoyr_zbqr";R:5;s:33:"1218:ertvfgre_vaivfvoyr_zbqr_qrfp";R:5;s:24:"1218:ertvfgre_fubj_rznvy";R:5;s:29:"1218:ertvfgre_fubj_rznvy_qrfp";R:5;s:26:"1218:ertvfgre_abgvsvpngvba";R:5;s:31:"1218:ertvfgre_abgvsvpngvba_qrfp";R:5;s:27:"1218:ertvfgre_abgvsl_zrgubq";R:5;s:32:"1218:ertvfgre_abgvsl_zrgubq_qrfp";R:5;s:29:"1218:ertvfgre_nyybj_rznvy_zft";R:5;s:34:"1218:ertvfgre_nyybj_rznvy_zft_qrfp";R:5;s:17:"1218:ohqql_fgnghf";R:5;s:15:"1218:zl_ohqqvrf";R:5;s:14:"1218:nqq_ohqql";R:5;s:8:"1218:nqq";R:5;s:17:"1218:ohqql_frnepu";R:5;s:18:"1218:zrzore_frnepu";R:5;s:17:"1218:ohqql_erzbir";R:5;s:16:"1218:cbfg_abezny";R:5;s:16:"1218:cbfg_fgvpxl";R:5;s:21:"1218:cbfg_naabaprzrag";R:5;s:14:"1218:cbfg_fvmr";R:5;s:15:"1218:cbfg_pbybe";R:5;s:14:"1218:cbfg_sbag";R:5;s:18:"1218:perngr_guernq";R:5;s:17:"1218:fhozvg_ercyl";R:5;s:17:"1218:rqvg_zrffntr";R:5;s:24:"1218:nccyl_fcryy_punatrf";R:5;s:17:"1218:cbfg_cerivrj";R:5;s:22:"1218:cbfg_ybtrqva_hfre";R:5;s:16:"1218:cbfg_ybtbhg";R:5;s:16:"1218:cbfg_cnffjq";R:5;s:14:"1218:cbfg_cbyy";R:5;s:21:"1218:cbfg_perngr_cbyy";R:5;s:21:"1218:cbfg_cbyy_qryrgr";R:5;s:19:"1218:cbfg_cbyy_rqvg";R:5;s:17:"1218:cbfg_zbq_bcg";R:5;s:21:"1218:cbfg_guernq_glcr";R:5;s:23:"1218:cbfg_guernq_rkcvel";R:5;s:16:"1218:cbfg_ybpxrq";R:5;s:15:"1218:cbfg_vpbaf";R:5;s:17:"1218:cbfg_ab_vpba";R:5;s:16:"1218:cbfg_fzvyrl";R:5;s:22:"1218:cbfg_sbezng_gbbyf";R:5;s:21:"1218:cbfg_hcybnq_svyr";R:5;s:18:"1218:cbfg_svyr_qry";R:5;s:19:"1218:cbfg_svyr_anzr";R:5;s:19:"1218:cbfg_svyr_fvmr";R:5;s:21:"1218:svyr_nggnpuzragf";R:5;s:18:"1218:nyybjrq_svyrf";R:5;s:18:"1218:znk_svyr_fvmr";R:5;s:22:"1218:znk_svyrf_cre_zft";R:5;s:22:"1218:cbfg_abgvsvpngvba";R:5;s:16:"1218:vapyhqr_fvt";R:5;s:21:"1218:vapyhqr_fvt_qrfp";R:5;s:20:"1218:qvfnoyr_fzvyvrf";R:5;s:20:"1218:fcryy_purpx_zft";R:5;s:14:"1218:cbfg_sbez";R:5;s:15:"1218:cbfg_sbehz";R:5;s:15:"1218:cbfg_gvgyr";R:5;s:14:"1218:cbfg_obql";R:5;s:17:"1218:cbfg_bcgvbaf";R:5;s:21:"1218:cbfg_cerivrj_oga";R:5;s:20:"1218:cbfg_pnapry_oga";R:5;s:17:"1218:vtaber_hfref";R:5;s:15:"1218:nqq_vtaber";R:5;s:16:"1218:sbehz_grezf";R:5;s:16:"1218:sbehz_ehyrf";R:5;s:19:"1218:sbehz_ehyrf_13";R:5;s:15:"1218:pbccn_pbas";R:5;s:17:"1218:pbccn_orsber";R:5;s:16:"1218:pbccn_nsgre";R:5;s:15:"1218:pbccn_yvax";R:5;s:10:"1218:pbccn";R:5;s:16:"1218:cerert_vasb";R:5;s:17:"1218:cerert_nterr";R:5;s:20:"1218:cerert_qvfnterr";R:5;s:18:"1218:cerert_hcqngr";R:5;s:27:"1218:pbccn_snk_vafgehpgvbaf";R:5;s:28:"1218:pbccn_snk_vafgehpgvbaf2";R:5;s:23:"1218:pbccn_snk_ert_sbez";R:5;s:19:"1218:pbccn_snk_fvta";R:5;s:19:"1218:pbccn_snk_pbas";R:5;s:25:"1218:pbccn_snk_crezvffvba";R:5;s:28:"1218:pbccn_snk_ab_crezvffvba";R:5;s:26:"1218:pbccn_snk_cnerag_anzr";R:5;s:23:"1218:pbccn_snk_eryngvba";R:5;s:24:"1218:pbccn_snk_gryrcubar";R:5;s:20:"1218:pbccn_snk_rznvy";R:5;s:19:"1218:pbccn_snk_qngr";R:5;s:24:"1218:pbccn_snk_dhrfgvbaf";R:5;s:20:"1218:pbccn_snk_ybtva";R:5;s:21:"1218:pbccn_snk_cnffjq";R:5;s:21:"1218:pbccn_snk_erznvy";R:5;s:19:"1218:pbccn_snk_anzr";R:5;s:22:"1218:ybtva_abg_ybtrqva";R:5;s:25:"1218:ybtva_pbbxvr_rkcverq";R:5;s:22:"1218:ybtva_crez_qravrq";R:5;s:27:"1218:ybtva_jnag_gb_ertvfgre";R:5;s:24:"1218:ybtva_sbetbg_cnffjq";R:5;s:21:"1218:ybtva_hfr_pbbxvr";R:5;s:16:"1218:ybtva_ybtva";R:5;s:20:"1218:ybtva_ybtva_oga";R:5;s:24:"1218:ybtva_anzr_erdhverq";R:5;s:26:"1218:ybtva_cnffjq_erdhverq";R:5;s:25:"1218:ybtva_vainyvq_enqvhf";R:5;s:23:"1218:erfrg_pbasvezngvba";R:5;s:16:"1218:erfrg_erfrg";R:5;s:27:"1218:ecnffjq_vainyvq_cnffjq";R:5;s:27:"1218:ecnffjq_cnffjq_abzngpu";R:5;s:26:"1218:ecnffjq_cnffjq_yratgu";R:5;s:22:"1218:erfrg_erzvaq_cnff";R:5;s:21:"1218:erfrg_erfrg_pbas";R:5;s:16:"1218:erfrg_reebe";R:5;s:24:"1218:ecnffjq_punatr_cnff";R:5;s:18:"1218:ecnffjq_ybtva";R:5;s:21:"1218:ecnffjq_phe_cnff";R:5;s:21:"1218:ecnffjq_arj_cnff";R:5;s:22:"1218:ecnffjq_pbas_cnff";R:5;s:16:"1218:ehfre_gvgyr";R:5;s:22:"1218:ehfre_punatr_hfre";R:5;s:20:"1218:ehfre_phe_ybtva";R:5;s:20:"1218:ehfre_arj_ybtva";R:5;s:19:"1218:ehfre_phe_cnff";R:5;s:17:"1218:ybtva_cnffjq";R:5;s:16:"1218:erfrg_rznvy";R:5;s:23:"1218:erfrg_erfrg_ohggba";R:5;s:21:"1218:engr_guvf_guernq";R:5;s:27:"1218:ercbeg_ercbegvat_nobhg";R:5;s:19:"1218:ercbeg_fhowrpg";R:5;s:14:"1218:ercbeg_ol";R:5;s:21:"1218:ercbeg_cbfgrq_ba";R:5;s:23:"1218:ercbeg_tvir_ernfba";R:5;s:25:"1218:ercbeg_fhozvg_ercbeg";R:5;s:22:"1218:frnepu_ragver_zft";R:5;s:24:"1218:frnepu_fhowrpg_bayl";R:5;s:17:"1218:frnepu_sbehz";R:5;s:21:"1218:frnepu_cbfgrq_ba";R:5;s:22:"1218:frnepu_ab_erfhygf";R:5;s:22:"1218:frnepu_nyy_sbehzf";R:5;s:20:"1218:frnepu_va_sbehz";R:5;s:24:"1218:frnepu_sbehz_frnepu";R:5;s:19:"1218:zbir_guernq_gb";R:5;s:23:"1218:erznvy_rznvy_gbcvp";R:5;s:21:"1218:erznvy_lbhe_anzr";R:5;s:22:"1218:erznvy_lbhe_rznvy";R:5;s:24:"1218:erznvy_sevraqf_anzr";R:5;s:25:"1218:erznvy_sevraqf_rznvy";R:5;s:20:"1218:erznvy_erdhverq";R:5;s:19:"1218:erznvy_fhowrpg";R:5;s:19:"1218:erznvy_zrffntr";R:5;s:20:"1218:erznvy_fraq_abj";R:5;s:20:"1218:erznvy_naba_bcg";R:5;s:16:"1218:erznvy_qbar";R:5;s:21:"1218:erznvy_frag_pbas";R:5;s:17:"1218:erznvy_reebe";R:5;s:16:"1218:zxyvfg_glcr";R:5;s:18:"1218:zxyvfg_bcgvba";R:5;s:19:"1218:zxyvfg_nqqvgrz";R:5;s:17:"1218:zxyvfg_nccyl";R:5;s:18:"1218:zxyvfg_qryrgr";R:5;s:19:"1218:dohq_avpx_anzr";R:5;s:22:"1218:dohq_nqq_fryrpgrq";R:5;s:18:"1218:dohq_fryrpgrq";R:5;s:20:"1218:dohq_ab_ohqqvrf";R:5;s:21:"1218:zxyvfg_ahzrevpny";R:5;s:17:"1218:zxyvfg_ncyun";R:5;s:18:"1218:zxyvfg_fdhner";R:5;s:16:"1218:zxyvfg_qvfp";R:5;s:18:"1218:zxyvfg_pvepyr";R:5;s:17:"1218:zxyvfg_pybfr";R:5;s:13:"1218:rznvy_gb";R:5;s:19:"1218:rznvy_ct_gvgyr";R:5;s:18:"1218:rznvy_fhowrpg";R:5;s:15:"1218:rznvy_obql";R:5;s:17:"1218:rznvy_fhozvg";R:5;s:20:"1218:ccbfg_dhbgr_zft";R:5;s:16:"1218:ccbfg_dhbgr";R:5;s:13:"1218:ccbfg_gb";R:5;s:26:"1218:ccbfg_sebz_ohqql_yvfg";R:5;s:20:"1218:ccbfg_svaq_hfre";R:5;s:20:"1218:ccbfg_genpx_zft";R:5;s:25:"1218:ccbfg_genpx_zft_qrfp";R:5;s:15:"1218:ccbfg_fraq";R:5;s:21:"1218:ccbfg_fnir_qensg";R:5;s:22:"1218:cbyy_oynax_bcgvba";R:5;s:18:"1218:cbyy_qry_pbas";R:5;s:14:"1218:cbyy_anzr";R:5;s:19:"1218:cbyy_gvzryvzvg";R:5;s:21:"1218:cbyy_znkvhzibgrf";R:5;s:16:"1218:cbyy_perngr";R:5;s:16:"1218:cbyy_hcqngr";R:5;s:24:"1218:cbyy_qvfnoyrfzvyvrf";R:5;s:21:"1218:cbyy_perngr_cbyy";R:5;s:21:"1218:cbyy_hcqngr_cbyy";R:5;s:16:"1218:cbyy_qryrgr";R:5;s:22:"1218:cbyy_hcqngrbcgvba";R:5;s:19:"1218:cbyy_nqqbcgvba";R:5;s:19:"1218:cbyy_hayvzvgrq";R:5;s:13:"1218:cbyy_qnl";R:5;s:14:"1218:cbyy_qnlf";R:5;s:14:"1218:cbyy_ubhe";R:5;s:15:"1218:cbyy_ubhef";R:5;s:15:"1218:cbyy_zbagu";R:5;s:14:"1218:cbyy_lrne";R:5;s:14:"1218:cbyy_jrrx";R:5;s:18:"1218:gnof_ertvfgre";R:5;s:23:"1218:gnof_fhofpevcgvbaf";R:5;s:20:"1218:gnof_obbxznexrf";R:5;s:19:"1218:gnof_ersreenyf";R:5;s:20:"1218:gnof_ohqql_yvfg";R:5;s:21:"1218:gnof_vtaber_yvfg";R:5;s:27:"1218:gnof_cevingr_zrffntvat";R:5;s:22:"1218:fvatyr_zft_qryrgr";R:5;s:18:"1218:guernq_qryrgr";R:5;s:19:"1218:qryrgr_cebprrq";R:5;s:15:"1218:qryrgr_lrf";R:5;s:14:"1218:qryrgr_ab";R:5;s:21:"1218:reebe_vainyvqhey";R:5;s:16:"1218:reebe_reebe";R:5;s:20:"1218:hfevasb_cebsvyr";R:5;s:27:"1218:hfevasb_fubj_nyy_cbfgf";R:5;s:19:"1218:npgvbaf_hcqngr";R:5;s:13:"1218:ree_vasb";R:5;s:27:"1218:ohqql_yvfg_ree_pnagnqq";R:5;s:23:"1218:ohqql_yvfg_ree_qhc";R:5;s:26:"1218:ohqql_yvfg_ree_abhfre";R:5;s:32:"1218:ohqql_yvfg_ree_abhfre_gvgyr";R:5;s:26:"1218:ohqql_yvfg_ree_vtaber";R:5;s:22:"1218:ohqql_yvfg_hcqngr";R:5;s:26:"1218:pber_ree_vaivac_gvgyr";R:5;s:24:"1218:pber_ree_vaivac_ree";R:5;s:23:"1218:pber_nqz_ybtva_zft";R:5;s:34:"1218:rznvy_ree_hanoyrgbrznvy_gvgyr";R:5;s:32:"1218:rznvy_ree_hanoyrgbrznvy_zft";R:5;s:32:"1218:rznvy_reebe_hanoyrgbybpnqqe";R:5;s:21:"1218:rznvy_reebe_obql";R:5;s:24:"1218:rznvy_reebe_fhowrpg";R:5;s:29:"1218:rznvy_reebe_anzrerdhverq";R:5;s:28:"1218:rznvy_reebe_vainyvqhfre";R:5;s:31:"1218:rznvypbas_ree_vaixrl_gvgyr";R:5;s:29:"1218:rznvypbas_ree_vaixrl_zft";R:5;s:26:"1218:ree_vap_pevgvpnygvgyr";R:5;s:24:"1218:ree_vap_pevgvpnyzft";R:5;s:20:"1218:svaqhfre_hcqngr";R:5;s:22:"1218:uryc_vaqrk_hcqngr";R:5;s:23:"1218:vrznvy_gue_fhowrpg";R:5;s:25:"1218:vrznvy_gue_obqlrznvy";R:5;s:23:"1218:vrznvy_sez_fhowrpg";R:5;s:25:"1218:vrznvy_sez_obqlrznvy";R:5;s:23:"1218:vrznvy_cnegvpvcngr";R:5;s:31:"1218:vtaber_yvfg_ree_vasb_gvgyr";R:5;s:28:"1218:vtaber_yvfg_ree_qhc_zft";R:5;s:29:"1218:vtaber_yvfg_ree_ah_gvgyr";R:5;s:27:"1218:vtaber_yvfg_ree_ah_zft";R:5;s:28:"1218:vtaber_yvfg_pnagvta_zft";R:5;s:23:"1218:vtaber_yvfg_hcqngr";R:5;s:17:"1218:vaqrk_hcqngr";R:5;s:25:"1218:yvfg_ersreref_hcqngr";R:5;s:17:"1218:ybtva_hcqngr";R:5;s:15:"1218:zft_hcqngr";R:5;s:22:"1218:cz_ree_abcz_gvgyr";R:5;s:20:"1218:cz_ree_abcz_zft";R:5;s:14:"1218:cz_hcqngr";R:5;s:32:"1218:cbfg_ree_ybpxrqguernq_gvgyr";R:5;s:30:"1218:cbfg_ree_ybpxrqguernq_zft";R:5;s:20:"1218:ree_pbccn_gvgyr";R:5;s:18:"1218:ree_pbccn_zft";R:5;s:26:"1218:ree_onaarq_nppg_gvgyr";R:5;s:24:"1218:ree_onaarq_nppg_zft";R:5;s:32:"1218:cbfg_ree_rqggvzryvzvg_gvgyr";R:5;s:30:"1218:cbfg_ree_rqggvzryvzvg_zft";R:5;s:32:"1218:cbfg_ree_abnaabagbcvpf_zft2";R:5;s:31:"1218:cbfg_ree_abnaabacbfgf_zft2";R:5;s:29:"1218:cbfg_ree_sybbqgevt_gvgyr";R:5;s:27:"1218:cbfg_ree_sybbqgevt_zft";R:5;s:25:"1218:cbfg_ree_nggnpu_fvmr";R:5;s:24:"1218:cbfg_ree_nggnpu_rkg";R:5;s:30:"1218:cbfg_ree_nggnpu_svyryvzvg";R:5;s:20:"1218:cbfg_ree_cnffjq";R:5;s:22:"1218:cbfg_ercyl_hcqngr";R:5;s:22:"1218:cbfg_gbcvp_hcqngr";R:5;s:23:"1218:cbfg_reebe_trarevp";R:5;s:29:"1218:cbfgpurpx_znk_vzntrf_ree";R:5;s:31:"1218:cbfgpurpx_ab_yvaxf_nyybjrq";R:5;s:26:"1218:cbfgpurpx_fhow_arrqrq";R:5;s:27:"1218:cbfgpurpx_ab_fhpu_hfre";R:5;s:22:"1218:cbfgpurpx_vtaberq";R:5;s:27:"1218:cbfgpurpx_ab_erprcvrag";R:5;s:28:"1218:cbfgpurpx_vainyvq_rznvy";R:5;s:28:"1218:cbfgpurpx_rznvy_fhowrpg";R:5;s:25:"1218:cbfgpurpx_rznvy_obql";R:5;s:28:"1218:cevingr_zft_abgvsl_fhow";R:5;s:28:"1218:cevingr_zft_abgvsl_obql";R:5;s:20:"1218:ersrenyf_hcqngr";R:5;s:29:"1218:ertvfgre_ree_fubeg_ybtva";R:5;s:34:"1218:ertvfgre_ree_ybtva_abgnyybjrq";R:5;s:29:"1218:ertvfgre_ree_ybtvahavdhr";R:5;s:29:"1218:ertvfgre_ree_rznvyrkvfgf";R:5;s:29:"1218:ertvfgre_ree_fubegcnffjq";R:5;s:31:"1218:ertvfgre_ree_cnffjqabzngpu";R:5;s:30:"1218:ertvfgre_ree_vainyvqrznvy";R:5;s:26:"1218:ertvfgre_ree_arrqanzr";R:5;s:29:"1218:ertvfgre_ree_ragrecnffjq";R:5;s:29:"1218:ertvfgre_ree_nqzvacnffjq";R:5;s:30:"1218:ertvfgre_ree_abglbherznvy";R:5;s:29:"1218:ertvfgre_ree_ningnegbovt";R:5;s:34:"1218:ertvfgre_ree_ningneabgnyybjrq";R:5;s:26:"1218:ertvfgre_pbas_fhowrpg";R:5;s:22:"1218:ertvfgre_pbas_zft";R:5;s:29:"1218:ertvfgre_jrypbzr_fhowrpg";R:5;s:25:"1218:ertvfgre_jrypbzr_zft";R:5;s:31:"1218:ertvfgre_ree_pnagert_gvgyr";R:5;s:29:"1218:ertfvgre_ree_pnagert_zft";R:5;s:28:"1218:ertvfgre_cebsvyr_hcqngr";R:5;s:29:"1218:ertvfgre_ertvfgre_hcqngr";R:5;s:31:"1218:ercbeg_ree_abfhpuzft_gvgyr";R:5;s:29:"1218:ercbeg_ree_abfhpuzft_zft";R:5;s:31:"1218:erfrg_ree_vainyvqxrl_gvgyr";R:5;s:29:"1218:erfrg_ree_vainyvqxrl_zft";R:5;s:28:"1218:erfrg_ree_efgpbas_gvgyr";R:5;s:26:"1218:erfrg_ree_efgpbas_zft";R:5;s:24:"1218:erfrg_arjcnff_gvgyr";R:5;s:22:"1218:erfrg_arjcnff_zft";R:5;s:23:"1218:erfrg_ybtva_abgvsl";R:5;s:18:"1218:frnepu_hcqngr";R:5;s:18:"1218:fryzft_hcqngr";R:5;s:21:"1218:fubjcbfgf_hcqngr";R:5;s:22:"1218:fhofpevorq_hcqngr";R:5;s:22:"1218:obbxznexrq_hcqngr";R:5;s:18:"1218:guernq_hcqngr";R:5;s:16:"1218:gerr_hcqngr";R:5;s:20:"1218:hfrevasb_hcqngr";R:5;s:19:"1218:ree_ybtva_zft2";R:5;s:21:"1218:ree_qvfnoyrq_ggy";R:5;s:21:"1218:ree_qvfnoyrq_zft";R:5;s:19:"1218:ree_npprff_ggy";R:5;s:19:"1218:ree_npprff_zft";R:5;s:34:"1218:ree_ertvfgengvba_qvfnoyrq_ggy";R:5;s:34:"1218:ree_ertvfgengvba_qvfnoyrq_zft";R:5;s:22:"1218:ree_rznvypbas_ggy";R:5;s:22:"1218:ree_rznvypbas_zft";R:5;s:17:"1218:ree_hfre_ggy";R:5;s:17:"1218:ree_hfre_zft";R:5;s:22:"1218:ree_flfgrzree_ggy";R:5;s:22:"1218:ree_flfgrzree_zft";R:5;s:16:"1218:rznvy_gvgyr";R:5;s:19:"1218:svaqhfre_gvgyr";R:5;s:15:"1218:uryc_gvgyr";R:5;s:16:"1218:ybtva_gvgyr";R:5;s:14:"1218:zft_gvgyr";R:5;s:15:"1218:cbyy_gvgyr";R:5;s:19:"1218:ertvfgre_gvgyr";R:5;s:16:"1218:erfrg_gvgyr";R:5;s:18:"1218:ecnffjq_gvgyr";R:5;s:16:"1218:reebe_gvgyr";R:5;s:16:"1218:vaqrk_gvgyr";R:5;s:17:"1218:frnepu_gvgyr";R:5;s:17:"1218:guernq_gvgyr";R:5;s:15:"1218:gerr_gvgyr";R:5;s:21:"1218:erznvy_rznvyfrag";R:5;s:17:"1218:erznvy_rznvy";R:5;s:20:"1218:cbyy_nqq_bcgvba";R:5;s:21:"1218:cbfg_bcg_ugzy_ba";R:5;s:20:"1218:cbfg_bcg_shq_ba";R:5;s:23:"1218:cbfg_bcg_vzntrf_ba";R:5;s:24:"1218:cbfg_bcg_fzvyvrf_ba";R:5;s:22:"1218:cbfg_bcg_ugzy_bss";R:5;s:21:"1218:cbfg_bcg_shq_bss";R:5;s:24:"1218:cbfg_bcg_vzntrf_bss";R:5;s:25:"1218:cbfg_bcg_fzvyvrf_bss";R:5;s:13:"1218:cbfg_bcg";R:5;s:27:"1218:ertvfgre_punatr_cnffjq";R:5;s:26:"1218:ertvfgre_punatr_ybtva";R:5;s:26:"1218:nccebirq_ningne_gvgyr";R:5;s:24:"1218:nccebirq_ningne_zft";R:5;s:28:"1218:hanccebirq_ningne_gvgyr";R:5;s:26:"1218:hanccebirq_ningne_zft";R:5;s:26:"1218:ziguernq_erdhrfg_zbir";R:5;s:24:"1218:zbir_erdhrfg_ernfba";R:5;s:24:"1218:ziguernq_fhozvg_erd";R:5;s:20:"1218:guernq_rkpunatr";R:5;s:20:"1218:zbir_erdhrfg_ol";R:5;s:16:"1218:zbir_ernfba";R:5;s:20:"1218:gue_rkpu_npprcg";R:5;s:21:"1218:gue_rkpu_qrpyvar";R:5;s:24:"1218:gue_rkpu_bevt_sbehz";R:5;s:24:"1218:gue_rkpu_qrfg_sbehz";R:5;s:24:"1218:gue_rkpu_ab_guernqf";R:5;s:25:"1218:gue_rkpu_qrpy_ernfba";R:5;s:20:"1218:gue_rkpu_fhozvg";R:5;s:21:"1218:rkpu_qrpyvar_ggy";R:5;s:23:"1218:ccbfg_bevtvany_zft";R:5;s:17:"1218:fcyvg_guernq";R:5;s:21:"1218:tebhczte_ab_hfre";R:5;s:28:"1218:tebhczte_nyernql_rkvfgf";R:5;s:17:"1218:tebhczte_lrf";R:5;s:16:"1218:tebhczte_ab";R:5;s:20:"1218:tebhczte_npgvba";R:5;s:20:"1218:tebhczte_zrzore";R:5;s:20:"1218:tebhczte_pnapry";R:5;s:24:"1218:tebhczte_nqq_zrzore";R:5;s:27:"1218:tebhczte_hcqngr_zrzore";R:5;s:18:"1218:tebhczte_rqvg";R:5;s:20:"1218:tebhczte_qryrgr";R:5;s:19:"1218:tebhc_zte_naba";R:5;s:20:"1218:tebhc_zte_ertrq";R:5;s:14:"1218:fubj_fubj";R:5;s:14:"1218:tebhc_zte";R:5;s:23:"1218:tebhc_zte_rqvg_oga";R:5;s:22:"1218:tebhc_zte_urnqvat";R:5;s:20:"1218:tebhc_zte_tebhc";R:5;s:28:"1218:crezvffvba_qravrq_gvgyr";R:5;s:26:"1218:crezvffvba_qravrq_zft";R:5;s:11:"1218:c_ernq";R:5;s:11:"1218:c_cbfg";R:5;s:12:"1218:c_ercyl";R:5;s:11:"1218:c_rqvg";R:5;s:10:"1218:c_qry";R:5;s:13:"1218:c_fgvpxl";R:5;s:11:"1218:c_cbyy";R:5;s:11:"1218:c_svyr";R:5;s:11:"1218:c_ibgr";R:5;s:11:"1218:c_engr";R:5;s:12:"1218:c_fcyvg";R:5;s:11:"1218:c_ybpx";R:5;s:11:"1218:c_zbir";R:5;s:10:"1218:c_fzy";R:5;s:10:"1218:c_vzt";R:5;s:13:"1218:c_frnepu";R:5;s:21:"1218:tebhc_zte_frnepu";R:5;s:24:"1218:tebhc_zte_vaqvpngbe";R:5;s:15:"1218:engr_jbefg";R:5;s:14:"1218:engr_orfg";R:5;s:19:"1218:cbfg_dhbgr_zft";R:5;s:15:"1218:cbfg_dhbgr";R:5;s:24:"1218:cbfg_dhbgr_fryrpgrq";R:5;s:22:"1218:hfrevasb_ersrenyf";R:5;s:28:"1218:hfrevasb_ersrenyf_pbhag";R:5;s:22:"1218:cz_ab_fcnpr_gvgyr";R:5;s:20:"1218:cz_ab_fcnpr_zft";R:5;s:23:"1218:cz_fcnpr_vaqpg_zft";R:5;s:18:"1218:gu_rkce_arire";R:5;s:19:"1218:gu_rkce_bar_ue";R:5;s:21:"1218:gu_rkce_guerr_ue";R:5;s:20:"1218:gu_rkce_sbhe_ue";R:5;s:21:"1218:gu_rkce_rvtug_ue";R:5;s:23:"1218:gu_rkce_fvkgrra_ue";R:5;s:20:"1218:gu_rkce_bar_qnl";R:5;s:20:"1218:gu_rkce_gjb_qnl";R:5;s:21:"1218:gu_rkce_sbhe_qnl";R:5;s:21:"1218:gu_rkce_bar_jrrx";R:5;s:21:"1218:gu_rkce_gjb_jrrx";R:5;s:22:"1218:gu_rkce_bar_zbagu";R:5;s:22:"1218:gu_rkce_gjb_zbagu";R:5;s:23:"1218:gu_rkce_sbhe_zbagu";R:5;s:21:"1218:gu_rkce_bar_lrne";R:5;s:22:"1218:guernq_zbq_qryrgr";R:5;s:14:"1218:npgvba_vc";R:5;s:23:"1218:npgvba_yngrfg_cbfg";R:5;s:28:"1218:bayvar_gbqnl_ynfg_ivfvg";R:5;s:24:"1218:bayvar_gbqnl_hcqngr";R:5;s:28:"1218:ybtrqva_gbqnlf_ivfvgbef";R:5;s:24:"1218:ybtrqva_yngrfg_cbfg";R:5;s:25:"1218:ertvfgre_fubj_ningne";R:5;s:30:"1218:ertvfgre_fubj_ningne_qrfp";R:5;s:27:"1218:qenjzft_ivrj_erfg_cbfg";R:5;s:12:"1218:cbfg_er";R:5;s:24:"1218:sbehzfry_tbgb_sbehz";R:5;s:24:"1218:zvavzft_guernq_ivrj";R:5;s:21:"1218:fcyvg_gu_cbfg_ol";R:5;s:23:"1218:fcyvg_gu_cbfgrq_ba";R:5;s:21:"1218:fcyvg_gu_fhowrpg";R:5;s:30:"1218:fcyvg_gu_arj_guernq_gvgyr";R:5;s:19:"1218:fcyvg_gu_sbehz";R:5;s:23:"1218:fcyvg_gu_fcyvg_fry";R:5;s:25:"1218:fcyvg_gu_fcyvg_hafry";R:5;s:22:"1218:fcyvg_gu_zrffntrf";R:5;s:20:"1218:fcyvg_gu_fryrpg";R:5;s:23:"1218:ercbeg_ercbeg_cbfg";R:5;s:21:"1218:dhvpxybtva_ybtva";R:5;s:24:"1218:dhvpxybtva_cnffjbeq";R:5;s:27:"1218:dhvpxybtva_hfr_pbbxvrf";R:5;s:25:"1218:dhvpxybtva_ybtva_oga";R:5;s:16:"1218:dhvpx_ercyl";R:5;s:21:"1218:dhvpx_ercyl_cbfg";R:5;s:24:"1218:dhvpx_ercyl_cerivrj";R:5;s:27:"1218:cbfg_abgvsvpngvba_qrfp";R:5;s:25:"1218:cbfg_nyy_rkg_nyybjrq";R:5;s:22:"1218:znkvzvmr_pngrtbel";R:5;s:21:"1218:znkvzvmr_zrffntr";R:5;s:17:"1218:ab_ivrj_crez";R:5;s:24:"1218:ercbeg_rzcgl_ercbeg";R:5;s:34:"1218:ercbeg_nyernql_ercbegrq_gvgyr";R:5;s:32:"1218:ercbeg_nyernql_ercbegrq_zft";R:5;s:31:"1218:ertvfgre_ree_gbbznalvzntrf";R:5;s:18:"1218:czft_arkg_zft";R:5;s:18:"1218:czft_ceri_zft";R:5;s:29:"1218:cbfg_cebp_erirny_fcbvyre";R:5;s:20:"1218:ertvfgre_wnoore";R:5;s:19:"1218:ertvfgre_fxlcr";R:5;s:21:"1218:ertvfgre_gjvggre";R:5;s:20:"1218:ertvfgre_tbbtyr";R:5;s:14:"1218:vz_wnoore";R:5;s:14:"1218:vz_tbbtyr";R:5;s:13:"1218:vz_fxlcr";R:5;s:15:"1218:vz_gjvggre";R:5;s:18:"1218:sbehz_pbagnpg";R:5;s:15:"1218:sbehz_ubzr";R:5;s:22:"1218:cbfg_phe_nggnpurq";R:5;s:22:"1218:vtaberq_naba_cbfg";R:5;s:22:"1218:vtaberq_hfre_cbfg";R:5;s:24:"1218:fzynqq_pybfr_jvaqbj";R:5;s:22:"1218:cbfg_yvfg_fzvyvrf";R:5;s:14:"1218:c_ivfvoyr";R:5;s:23:"1218:ercbegrq_va_guernq";R:5;s:21:"1218:uryc_onpx_gb_gbc";R:5;s:25:"1218:uryc_erghea_gb_vaqrk";R:5;s:27:"1218:vzft_ree_zrffntr_gvgyr";R:5;s:25:"1218:vzft_ree_zrffntr_zft";R:5;s:14:"1218:cbyy_rqvg";R:5;s:31:"1218:ertvfgre_ree_abg_inyvq_vzt";R:5;s:19:"1218:czft_erprcvrag";R:5;s:29:"1218:ertvfgre_ree_gnxra_nyvnf";R:5;s:19:"1218:ertvfgre_nyvnf";R:5;s:24:"1218:ertvfgre_nyvnf_qrfp";R:5;s:26:"1218:ertvfgre_nyybj_cz_zft";R:5;s:31:"1218:ertvfgre_nyybj_cz_zft_qrfp";R:5;s:26:"1218:cbfgpurpx_cz_qvfnoyrq";R:5;s:18:"1218:cbyyyvfg_ibgr";R:5;s:26:"1218:cbyyyvfg_ivrj_erfhygf";R:5;s:18:"1218:cbyyyvfg_anzr";R:5;s:18:"1218:cbyyyvfg_qngr";R:5;s:19:"1218:cbyyyvfg_bjare";R:5;s:19:"1218:cbyyyvfg_ibgrf";R:5;s:20:"1218:cbyyyvfg_npgvba";R:5;s:20:"1218:cbyyyvfg_hcqngr";R:5;s:19:"1218:hfrevasb_cbyyf";R:5;s:17:"1218:fubj_cbyyvfg";R:5;s:15:"1218:frnepu_naq";R:5;s:14:"1218:frnepu_be";R:5;s:22:"1218:frnepu_qrfp_beqre";R:5;s:21:"1218:frnepu_nfp_beqre";R:5;s:17:"1218:frnepu_ybtvp";R:5;s:19:"1218:frnepu_fbegvat";R:5;s:18:"1218:frnepu_nggnpu";R:5;s:22:"1218:frnepu_nggnpu_nyy";R:5;s:23:"1218:frnepu_nggnpu_jvgu";R:5;s:17:"1218:cbfg_cebprrq";R:5;s:25:"1218:cbfg_zbqrengrq_sbehz";R:5;s:29:"1218:cbfg_zbqrengrq_sbehz_ggy";R:5;s:20:"1218:ohqql_yvfg_oqnl";R:5;s:22:"1218:rznvy_jneavat_zft";R:5;s:21:"1218:ertvfgre_fubj_vz";R:5;s:26:"1218:ertvfgre_fubj_vz_qrfp";R:5;s:19:"1218:haernq_zrffntr";R:5;s:17:"1218:ernq_zrffntr";R:5;s:17:"1218:guernqg_zber";R:5;s:25:"1218:guernqg_qvfnoyrq_ggy";R:5;s:26:"1218:guernqg_qvfnoyrq_qrfp";R:5;s:19:"1218:guernqg_hcqngr";R:5;s:27:"1218:zzbq_qryrgr_pbsvez_ggy";R:5;s:15:"1218:fcryy_nygf";R:5;s:26:"1218:vafreg_hcybnqrq_vzntr";R:5;s:18:"1218:svaqhfre_uryc";R:5;s:16:"1218:onpx_gb_gbc";R:5;s:26:"1218:cz_ree_qvfnoyrq_gvgyr";R:5;s:24:"1218:cz_ree_qvfnoyrq_zft";R:5;s:20:"1218:ree_zbq_npp_ggy";R:5;s:20:"1218:ree_zbq_npp_zft";R:5;s:30:"1218:nppbhagf_craqvat_nccebiny";R:5;s:10:"1218:fnirq";R:5;s:28:"1218:ertvfgre_ree_gvzr_yvzvg";R:5;s:20:"1218:ertvfgre_nssreb";R:5;s:14:"1218:vz_nssreb";R:5;s:32:"1218:ertvfgre_ree_ningneqvzgbovt";R:5;s:18:"1218:ohqql_bssyvar";R:5;s:17:"1218:ohqql_bayvar";R:5;s:19:"1218:fzy_ab_fzvyvrf";R:5;s:33:"1218:ybtva_hanccebirq_nppbhag_ggy";R:5;s:33:"1218:ybtva_hanccebirq_nppbhag_zft";R:5;s:27:"1218:erzbir_sebz_ohqql_yvfg";R:5;s:22:"1218:vrznvy_zft_nhgube";R:5;s:23:"1218:vrznvy_zft_fhowrpg";R:5;s:20:"1218:vrznvy_zft_qngr";R:5;s:21:"1218:vrznvy_zft_ercyl";R:5;s:21:"1218:vrznvy_zft_dhbgr";R:5;s:20:"1218:vrznvy_zft_ivrj";R:5;s:19:"1218:guernqg_fgvpxl";R:5;s:21:"1218:guernqg_naabhapr";R:5;s:25:"1218:ercbegrq_ab_zrffntrf";R:5;s:18:"1218:cbyy_ab_cbyyf";R:5;s:23:"1218:ab_haernq_zrffntrf";R:5;s:25:"1218:guernq_znex_nyy_ernq";R:5;s:30:"1218:guernq_znex_nyy_ernq_qrfp";R:5;s:24:"1218:cevingr_ab_zrffntrf";R:5;s:34:"1218:ertvfgre_rznvy_punatr_fhowrpg";R:5;s:30:"1218:ertvfgre_rznvy_punatr_zft";R:5;s:24:"1218:vrznvy_guernq_hafho";R:5;s:23:"1218:vrznvy_sbehz_hafho";R:5;s:25:"1218:cevznel_tebhc_cersvk";R:5;s:20:"1218:tebhc_erfbheprf";R:5;s:33:"1218:ertvfgre_nqzva_arjhfre_gvgyr";R:5;s:31:"1218:ertvfgre_nqzva_arjhfre_zft";R:5;s:30:"1218:cbfg_zbq_zft_abgvsl_gvgyr";R:5;s:28:"1218:cbfg_zbq_zft_abgvsl_zft";R:5;s:25:"1218:guernq_cevagnoyr_cqs";R:5;s:21:"1218:guernq_flaqvpngr";R:5;s:19:"1218:ert_pbas_gvgyr";R:5;s:19:"1218:ert_pbas_rznvy";R:5;s:21:"1218:ert_pbas_nppbhag";R:5;s:22:"1218:sbehz_onaarq_hfre";R:5;s:21:"1218:zani_qrfpevcgvba";R:5;s:20:"1218:zani_qngr_yvzvg";R:5;s:21:"1218:zani_sbehz_yvzvg";R:5;s:20:"1218:zani_nyy_sbehzf";R:5;s:16:"1218:zani_fhozvg";R:5;s:18:"1218:zani_ab_enatr";R:5;s:22:"1218:zani_vainyvq_havg";R:5;s:22:"1218:zani_vainyvq_qngr";R:5;s:20:"1218:zani_ab_erfhygf";R:5;s:19:"1218:zani_cbfgrq_ol";R:5;s:14:"1218:zani_zber";R:5;s:16:"1218:zani_zvahgr";R:5;s:14:"1218:zani_ubhe";R:5;s:13:"1218:zani_qnl";R:5;s:14:"1218:zani_jrrx";R:5;s:15:"1218:zani_zbagu";R:5;s:15:"1218:zani_gvgyr";R:5;s:16:"1218:zani_hcqngr";R:5;s:22:"1218:cz_abgvsl_fhowrpg";R:5;s:25:"1218:cz_abgvsl_obql_rznvy";R:5;s:29:"1218:ertvfgre_cz_abgvsvpngvba";R:5;s:34:"1218:ertvfgre_cz_abgvsvpngvba_qrfp";R:5;s:28:"1218:svaqh_nqzva_bcgf_urnqre";R:5;s:16:"1218:svaqh_haona";R:5;s:14:"1218:svaqh_ona";R:5;s:15:"1218:svaqh_rqvg";R:5;s:17:"1218:svaqh_qryrgr";R:5;s:18:"1218:qzft_ercyl_gb";R:5;s:19:"1218:qzft_ercyl_ahz";R:5;s:17:"1218:zretr_gbcvpf";R:5;s:20:"1218:zretr_gbcvpf_pc";R:5;s:21:"1218:zretr_gbcvpf_gcy";R:5;s:16:"1218:zretr_zretr";R:5;s:15:"1218:zretr_arkg";R:5;s:15:"1218:zretr_ceri";R:5;s:18:"1218:zretr_nabgure";R:5;s:13:"1218:fcyvg_pc";R:5;s:24:"1218:tebhcf_crezf_urnqre";R:5;s:30:"1218:ertvfgre_ree_fvt_gbb_ybat";R:5;s:23:"1218:ertvfgre_fvt_yvzvg";R:5;s:25:"1218:nqz_nppbhag_npprcgrq";R:5;s:27:"1218:nqz_nppbhag_npprcgrq_f";R:5;s:25:"1218:nqz_nppbhag_erwrpgrq";R:5;s:27:"1218:nqz_nppbhag_erwrpgrq_f";R:5;s:14:"1218:guernq_ba";R:5;s:19:"1218:hfrevasb_ohqql";R:5;s:24:"1218:ertvfgre_rznvy_nqqe";R:5;s:17:"1218:erfrg_fhssvk";R:5;s:23:"1218:hfevasb_ynfg_ivfvg";R:5;s:15:"1218:zani_arjre";R:5;s:15:"1218:zani_byqre";R:5;s:20:"1218:vc_frnepu_ol_vc";R:5;s:21:"1218:vc_frnepu_flagnk";R:5;s:14:"1218:vc_frnepu";R:5;s:21:"1218:vc_nanylmr_hfntr";R:5;s:27:"1218:vc_nanylmr_hfntr_qrfpe";R:5;s:19:"1218:vc_hfref_hfvat";R:5;s:15:"1218:vc_nyy_vcf";R:5;s:13:"1218:vc_gvgyr";R:5;s:23:"1218:hfrevasb_erny_anzr";R:5;s:34:"1218:ertvfgre_ree_nyvnf_abgnyybjrq";R:5;s:32:"1218:cbfg_ree_zbq_sbehz_rqvg_ggy";R:5;s:32:"1218:cbfg_ree_zbq_sbehz_rqvg_zft";R:5;s:13:"1218:qzft_ahz";R:5;s:30:"1218:cbfgpurpx_frffvba_vainyvq";R:5;s:30:"1218:qryrgr_zrffntr_rkgen_qrfp";R:5;s:30:"1218:qryrgr_zrffntr_rkgen_obql";R:5;s:27:"1218:qryrgr_zft_erzbirq_ggy";R:5;s:23:"1218:qryrgr_zft_cz_obql";R:5;s:26:"1218:qryrgr_zft_cz_fhowrpg";R:5;s:16:"1218:vc_ab_jubvf";R:5;s:19:"1218:vc_jubvf_gvgyr";R:5;s:19:"1218:ertvfgre_gurzr";R:5;s:15:"1218:czft_genfu";R:5;s:14:"1218:hp_arj_cz";R:5;s:17:"1218:hp_arj_gbcvp";R:5;s:21:"1218:hp_arj_png_sbehz";R:5;s:17:"1218:hp_png_sbehz";R:5;s:18:"1218:hp_fho_gbcvpf";R:5;s:18:"1218:hp_cntr_gvgyr";R:5;s:19:"1218:frnepu_bcgvbaf";R:5;s:23:"1218:frnepu_hfre_svygre";R:5;s:18:"1218:ertvfgre_abar";R:5;s:18:"1218:svaqh_ab_pbas";R:5;s:25:"1218:ertvfgre_znk_fvt_yra";R:5;s:20:"1218:ertvfgre_ghevat";R:5;s:24:"1218:ertvfgre_ree_ghevat";R:5;s:15:"1218:zbqdhr_png";R:5;s:17:"1218:zbqdhr_sbehz";R:5;s:26:"1218:vqk_pbzcnpg_sbehz_ebj";R:5;s:18:"1218:zzq_qry_gvgyr";R:5;s:18:"1218:zzq_zbi_gvgyr";R:5;s:24:"1218:zzq_zbir_guernqf_gb";R:5;s:19:"1218:zzq_nobeg_zbir";R:5;s:13:"1218:zzq_zbir";R:5;s:17:"1218:czft_cqs_oga";R:5;s:23:"1218:frnepu_erfhygf_uqe";R:5;s:19:"1218:guernq_qry_nyy";R:5;s:19:"1218:guernq_zbi_nyy";R:5;s:21:"1218:guernq_zretr_nyy";R:5;s:19:"1218:guernq_ybp_nyy";R:5;s:12:"1218:qzft_vc";R:5;s:27:"1218:ree_oybpxrqnppag_gvgyr";R:5;s:25:"1218:ree_oybpxrqnppag_zft";R:5;s:23:"1218:zretr_gu_cntr_yvfg";R:5;s:22:"1218:zbfg_hfref_bayvar";R:5;s:25:"1218:fho_hafho_nyy_sbehzf";R:5;s:25:"1218:fho_hafho_nyy_gbcvpf";R:5;s:26:"1218:haobbxznex_nyy_gbcvpf";R:5;s:19:"1218:gnof_bja_cbfgf";R:5;s:17:"1218:fzy_rzbgvpba";R:5;s:13:"1218:fzy_pbqr";R:5;s:18:"1218:zani_fho_bayl";R:5;s:29:"1218:ertvfgre_gbcvpf_cre_cntr";R:5;s:19:"1218:ybtva_zva_gvzr";R:5;s:23:"1218:cbfg_abg_ybttrq_va";R:5;s:21:"1218:cbfg_pbzzba_obyq";R:5;s:24:"1218:cbfg_pbzzba_vgnyvpf";R:5;s:26:"1218:cbfg_pbzzba_haqreyvar";R:5;s:27:"1218:cbfg_pbzzba_nyvta_yrsg";R:5;s:29:"1218:cbfg_pbzzba_nyvta_pragre";R:5;s:28:"1218:cbfg_pbzzba_nyvta_evtug";R:5;s:21:"1218:cbfg_pbzzba_yvax";R:5;s:27:"1218:cbfg_pbzzba_yvax_cbchc";R:5;s:22:"1218:cbfg_pbzzba_rznvy";R:5;s:28:"1218:cbfg_pbzzba_rznvy_cbchc";R:5;s:22:"1218:cbfg_pbzzba_vzntr";R:5;s:28:"1218:cbfg_pbzzba_vzntr_cbchc";R:5;s:22:"1218:cbfg_pbzzba_ayvfg";R:5;s:22:"1218:cbfg_pbzzba_oyvfg";R:5;s:22:"1218:cbfg_pbzzba_dhbgr";R:5;s:21:"1218:cbfg_pbzzba_pbqr";R:5;s:18:"1218:engvat_qryrgr";R:5;s:23:"1218:cbfg_nyjnlf_ba_gbc";R:5;s:17:"1218:gbcvp_engvat";R:5;s:22:"1218:gbcvp_yvfg_engvat";R:5;s:23:"1218:gnof_abgvsvpngvbaf";R:5;s:18:"1218:svaqhfre_synt";R:5;s:15:"1218:cbfg_qrfpe";R:5;s:12:"1218:czft_ba";R:5;s:23:"1218:czft_qbjaybnq_qhzc";R:5;s:18:"1218:zbir_zrffntrf";R:5;s:17:"1218:zbir_zft_oga";R:5;s:21:"1218:zbir_zft_gu_rkcy";R:5;s:20:"1218:pncgpun_vzt_nyg";R:5;s:21:"1218:pncgpun_vzt_uryc";R:5;s:15:"1218:cbjrerq-ol";R:5;s:14:"1218:pbclevtug";R:5;s:15:"1218:pbqr_gvgyr";R:5;s:20:"1218:pbqr_fryrpg_nyy";R:5;s:19:"1218:pbqr_fubj_uvqr";R:5;s:17:"1218:fbpvny_fvgrf";R:5;s:26:"1218:cbfgpurpx_zva_yra_ree";R:5;s:22:"1218:cbfgpurpx_qhc_ree";R:5;s:18:"1218:oga_arj_gbcvp";R:5;s:15:"1218:oga_arj_cz";R:5;s:19:"1218:oga_cbfg_ercyl";R:5;s:18:"1218:oga_gerr_ivrj";R:5;s:18:"1218:oga_syng_ivrj";R:5;s:14:"1218:oga_nobhg";R:5;s:17:"1218:oga_fznyy_cz";R:5;s:15:"1218:oga_qryrgr";R:5;s:13:"1218:oga_rqvg";R:5;s:14:"1218:oga_ercyl";R:5;s:16:"1218:oga_sbejneq";R:5;s:14:"1218:oga_dhbgr";R:5;s:14:"1218:oga_rznvy";R:5;s:19:"1218:oga_fubj_cbfgf";R:5;s:17:"1218:oga_ubzrcntr";R:5;s:17:"1218:srrq_ab_qngn";R:5;s:13:"1218:srrq_eqs";R:5;s:13:"1218:srrq_eff";R:5;s:14:"1218:srrq_ngbz";R:5;s:25:"1218:vc_jubvf_pbaarpg_ree";R:5;s:26:"1218:phfgbz_svyrq_erdhverq";R:5;s:10:"1218:cntrf";R:5;s:22:"1218:cntr_yvfg_urnqvat";R:5;s:20:"1218:cntr_yvfg_gbgny";R:5;s:16:"1218:cntr_hcqngr";R:5;s:21:"1218:cz_rkcbeg_urnqre";R:5;s:21:"1218:cz_rkcbeg_sbbgre";R:5;s:25:"1244:hv.znva.pffqverpgvba";s:9:"bhg-xvjvk";s:17:"1244:hv.znva.svyr";R:6;s:27:"1244:hv.znva.svyr.npprffxrl";R:6;s:21:"1244:hv.znva.bcrasvyr";R:6;s:31:"1244:hv.znva.bcrasvyr.npprffxrl";R:6;s:26:"1244:hv.znva.oebjfryvoenel";R:6;s:36:"1244:hv.znva.oebjfryvoenel.npprffxrl";R:6;s:21:"1244:hv.znva.ynfgbcra";R:6;s:21:"1244:hv.znva.fnirsvyr";R:6;s:31:"1244:hv.znva.fnirsvyr.npprffxrl";R:6;s:18:"1244:hv.znva.cevag";R:6;s:28:"1244:hv.znva.cevag.npprffxrl";R:6;s:21:"1244:hv.znva.cevagcqs";R:6;s:31:"1244:hv.znva.cevagcqs.npprffxrl";R:6;s:17:"1244:hv.znva.dhvg";R:6;s:27:"1244:hv.znva.dhvg.npprffxrl";R:6;s:17:"1244:hv.znva.rqvg";R:6;s:27:"1244:hv.znva.rqvg.npprffxrl";R:6;s:17:"1244:hv.znva.svaq";R:6;s:27:"1244:hv.znva.svaq.npprffxrl";R:6;s:22:"1244:hv.znva.fryrpgnyy";R:6;s:32:"1244:hv.znva.fryrpgnyy.npprffxrl";R:6;s:17:"1244:hv.znva.pbcl";R:6;s:27:"1244:hv.znva.pbcl.npprffxrl";R:6;s:17:"1244:hv.znva.zhgr";R:6;s:20:"1244:hv.znva.nhqvoyr";R:6;s:28:"1244:hv.znva.genafyvgrengvba";R:6;s:38:"1244:hv.znva.genafyvgrengvba.npprffxrl";R:6;s:24:"1244:hv.znva.cersreraprf";R:6;s:34:"1244:hv.znva.cersreraprf.npprffxrl";R:6;s:20:"1244:hv.znva.qvfcynl";R:6;s:30:"1244:hv.znva.qvfcynl.npprffxrl";R:6;s:17:"1244:hv.znva.mbbz";R:6;s:27:"1244:hv.znva.mbbz.npprffxrl";R:6;s:19:"1244:hv.znva.mbbzva";R:6;s:29:"1244:hv.znva.mbbzva.npprffxrl";R:6;s:20:"1244:hv.znva.mbbzbhg";R:6;s:30:"1244:hv.znva.mbbzbhg.npprffxrl";R:6;s:21:"1244:hv.znva.mbbzbevt";R:6;s:31:"1244:hv.znva.mbbzbevt.npprffxrl";R:6;s:21:"1244:hv.znva.ynathntr";R:6;s:31:"1244:hv.znva.ynathntr.npprffxrl";R:6;s:17:"1244:hv.znva.fxva";R:6;s:27:"1244:hv.znva.fxva.npprffxrl";R:6;s:22:"1244:hv.znva.fgnghfone";R:6;s:32:"1244:hv.znva.fgnghfone.npprffxrl";R:6;s:23:"1244:hv.znva.erfhygfone";R:6;s:33:"1244:hv.znva.erfhygfone.npprffxrl";R:6;s:17:"1244:hv.znva.gnof";R:6;s:27:"1244:hv.znva.gnof.npprffxrl";R:6;s:23:"1244:hv.znva.shyyfperra";R:6;s:33:"1244:hv.znva.shyyfperra.npprffxrl";R:6;s:18:"1244:hv.znva.gbbyf";R:6;s:28:"1244:hv.znva.gbbyf.npprffxrl";R:6;s:26:"1244:hv.znva.enaqbznegvpyr";R:6;s:36:"1244:hv.znva.enaqbznegvpyr.npprffxrl";R:6;s:27:"1244:hv.znva.purpxvagrtevgl";R:6;s:37:"1244:hv.znva.purpxvagrtevgl.npprffxrl";R:6;s:25:"1244:hv.znva.chetruvfgbel";R:6;s:35:"1244:hv.znva.chetruvfgbel.npprffxrl";R:6;s:17:"1244:hv.znva.uryc";R:6;s:27:"1244:hv.znva.uryc.npprffxrl";R:6;s:21:"1244:hv.znva.srrqonpx";R:6;s:23:"1244:hv.znva.ercbegnoht";R:6;s:28:"1244:hv.znva.erdhrfgnsrngher";R:6;s:18:"1244:hv.znva.nobhg";R:6;s:28:"1244:hv.znva.nobhg.npprffxrl";R:6;s:17:"1244:hv.znva.onpx";R:6;s:20:"1244:hv.znva.sbejneq";R:6;s:17:"1244:hv.znva.ubzr";R:6;s:22:"1244:hv.znva.frnepuone";R:6;s:19:"1244:hv.znva.frnepu";R:6;s:23:"1244:hv.znva.svaqvagrkg";R:6;s:24:"1244:hv.znva.abfrnepuone";R:6;s:22:"1244:hv.znva.obbxznexf";R:6;s:26:"1244:hv.znva.erfhygf.gvgyr";R:6;s:21:"1244:hv.znva.ozxynory";R:6;s:23:"1244:hv.znva.abgrfynory";R:6;s:20:"1244:hv.znva.ybnqozx";R:6;s:19:"1244:hv.znva.arjozx";R:6;s:17:"1244:hv.znva.znex";R:6;s:19:"1244:hv.znva.haznex";R:6;s:19:"1244:hv.znva.erybnq";R:6;s:23:"1244:hv.znva.qrsnhygfrg";R:6;s:24:"1244:hv.znva.fnirvzntrnf";R:6;s:29:"1244:hv.znva.bcrayvaxvaarjgno";R:6;s:22:"1244:hv.znva.frnepusbe";R:6;s:28:"1244:hv.znva.pbclyvaxnqqerff";R:6;s:18:"1244:hv.znva.pybfr";R:6;s:30:"1244:hv.znva.yvoenel.zlyvoenel";R:6;s:32:"1244:hv.znva.yvoenel.trgarjsvyrf";R:6;s:35:"1244:hv.znva.yvoenel.frnepumvzsvyrf";R:6;s:27:"1244:hv.znva.yvoenel.fbegol";R:6;s:33:"1244:hv.znva.yvoenel.fbegol.gvgyr";R:6;s:32:"1244:hv.znva.yvoenel.fbegol.fvmr";R:6;s:32:"1244:hv.znva.yvoenel.fbegol.qngr";R:6;s:34:"1244:hv.znva.yvoenel.fbegol.nhgube";R:6;s:37:"1244:hv.znva.yvoenel.fbegol.choyvfure";R:6;s:29:"1244:hv.znva.yvoenel.svygreol";R:6;s:38:"1244:hv.znva.yvoenel.svygreol.svyrfvmr";R:6;s:38:"1244:hv.znva.yvoenel.svygreol.ynathntr";R:6;s:42:"1244:hv.znva.yvoenel.svygreol.ynathntr.nyy";R:6;s:36:"1244:hv.znva.yvoenel.svygreol.nhgube";R:6;s:40:"1244:hv.znva.yvoenel.svygreol.nhgube.nyy";R:6;s:39:"1244:hv.znva.yvoenel.svygreol.choyvfure";R:6;s:43:"1244:hv.znva.yvoenel.svygreol.choyvfure.nyy";R:6;s:31:"1244:hv.cersreraprf.cersreraprf";R:6;s:24:"1244:hv.cersreraprf.fnir";R:6;s:26:"1244:hv.cersreraprf.pnapry";R:6;s:36:"1244:hv.cersreraprf.cebsvyrqverpgbel";R:6;s:26:"1244:hv.cersreraprf.oebjfr";R:6;s:24:"1244:hv.cersreraprf.gnof";R:6;s:33:"1244:hv.zrffntrf.ybnqmvzsvyrreebe";R:6;s:37:"1244:hv.zrffntrf.nyernqlvaqrkvatreebe";R:6;s:31:"1244:hv.zrffntrf.aberfhygfreebe";R:6;s:33:"1244:hv.zrffntrf.ybnqnegvpyrreebe";R:6;s:32:"1244:hv.zrffntrf.abnpgvirmvzsvyr";R:6;s:36:"1244:hv.zrffntrf.vaqrkmvzsvyrpbasvez";R:6;s:37:"1244:hv.zrffntrf.nobegvaqrkvatpbasvez";R:6;s:31:"1244:hv.zrffntrf.erfgnegpbasvez";R:6;s:30:"1244:hv.zrffntrf.raqbsvaqrkvat";R:6;s:37:"1244:hv.zrffntrf.erzbircebsvyrpbasvez";R:6;s:35:"1244:hv.zrffntrf.qbagqvfcynlnalzber";R:6;s:38:"1244:hv.zrffntrf.punatrfxvaarrqerfgneg";R:6;s:24:"1244:hv.zrffntrf.pbasvez";R:6;s:19:"1244:hv.zrffntrf.ab";R:6;s:20:"1244:hv.zrffntrf.lrf";R:6;s:19:"1244:hv.zrffntrf.bx";R:6;s:23:"1244:hv.zrffntrf.pnapry";R:6;s:22:"1244:hv.zrffntrf.reebe";R:6;s:28:"1244:hv.zrffntrf.vasbezngvba";R:6;s:25:"1244:hv.zrffntrf.vaqrkvat";R:6;s:34:"1244:hv.zrffntrf.fryrpgobbxznexfrg";R:6;s:32:"1244:hv.zrffntrf.anzrobbxznexfrg";R:6;s:36:"1244:hv.zrffntrf.arjpbagragninvynoyr";R:6;s:46:"1244:hv.zrffntrf.arjpbagragninvynoyrvaivgngvba";R:6;s:41:"1244:hv.zrffntrf.cercnevatpbagragqbjaybnq";R:6;s:40:"1244:hv.zrffntrf.pbagragqbjaybnqsvavfurq";R:6;s:25:"1244:hv.zrffntrf.srrqonpx";R:6;s:22:"1230:nppbhagf-cbfgrqol";a:4:{i:0;s:18:"out-mifos-accounts";i:1;R:8;i:2;s:15:"out-mifos-0-all";i:3;R:9;}s:24:"1230:pyvrag-pyvrag.gbgny";a:4:{i:0;s:16:"out-mifos-client";i:1;R:11;i:2;R:9;i:3;R:9;}s:23:"1230:phv-phfgbzre.abgrf";a:4:{i:0;s:13:"out-mifos-cui";i:1;R:13;i:2;R:9;i:3;R:9;}s:24:"1230:phv-phfgbzre.fhozvg";a:4:{i:0;R:13;i:1;R:13;i:2;R:9;i:3;R:9;}s:30:"1230:tebhc-tebhc.rkgreanyvqzft";a:4:{i:0;s:15:"out-mifos-group";i:1;R:16;i:2;R:9;i:3;R:9;}s:18:"1230:tebhc-tebhc.f";a:4:{i:0;R:16;i:1;R:16;i:2;R:9;i:3;R:9;}s:22:"1230:ybna-ybna.nppbhag";a:4:{i:0;s:14:"out-mifos-loan";i:1;R:19;i:2;R:9;i:3;R:9;}s:24:"1230:ybna-ybna.ercnlybna";a:4:{i:0;R:19;i:1;R:19;i:2;R:9;i:3;R:9;}s:24:"1230:cq-cebqhpg.engrglcr";a:4:{i:0;s:12:"out-mifos-pd";i:1;R:22;i:2;R:9;i:3;R:9;}s:35:"1230:fnivatf-fnivatf.nppbhagqrgnvyf";a:4:{i:0;s:17:"out-mifos-savings";i:1;R:24;i:2;R:9;i:3;R:9;}s:32:"1230:fnivatf-fnivatf.pyvpxfhozvg";a:4:{i:0;R:24;i:1;R:24;i:2;R:9;i:3;R:9;}s:51:"1212:p2qs9o932637sr9q32n0s16qn1p11873398s873q-vaqrk";s:11:"bhg-zjyvoey";s:52:"1212:922npq282pp0s3oo9r6qsso4p4o3p4sr33787051-fbhepr";R:26;s:53:"1212:qr13os1no0o419s34po1o3o43r094p84009n42qo-yvprafr";R:26;s:58:"1212:8086nqo5746r504oor3902757ons1389r8p9s958-pbagevohgbef";R:26;s:62:"1212:p6sq44p26q69q3s0oqp9sp330r6q3r374p7r1864-negvpyr_yvprafrf";R:26;s:51:"1212:768r0p1p69573so588s61s1308n015p11468r05s-gvgyr";R:26;s:54:"1212:348s58oo37475n0on3ns0146618rqq3s56o7670s-fhogvgyr";R:26;s:52:"1212:2np3o2p1r8255q7r59p590n5p2n7o212sp7n61r0-rqvgbe";R:26;s:56:"1212:o6p547219461223o18nq062p2o008soq3p6qo732-perngrq_ba";R:26;s:54:"1212:s5poqs6oso51439or085o5p6o7460n7p91rnop3p-pbagragf";R:26;s:54:"1212:7p422841o7r3951946583038790545p4rq38481o-negvpyrf";R:26;s:57:"1212:7353rooq0rn80835r74115s7p8745p7np6rrr566-cebqhprq_ol";R:26;s:64:"1212:23s4sn6o4o10346rsrpqs182r7qo2no66361596s-cqs_jevgre_irefvba";R:26;s:59:"1212:02sr1o4rp74r6os61n352860112p734ono31o356-zjyvo_irefvba";R:26;s:63:"1212:9730q4326n7o8n0q13p2or3o7sr29o80nq152os6-gnoyr_bs_pbagragf";R:26;s:64:"1212:qo62184sso843335o1453qn07008r2pq1s3pr4o5-fxvccvat_negvpyrf!";R:26;s:76:"1212:8r008s7rs9qqq79p20r6r04o5o026561n2921r29-cyrnfr_abgr_guvf_vf_bayl_n_cer";R:26;s:76:"1212:8pr32q99rss94n00r843o2752s5so7op842qr286-cyrnfr_abgr_guvf_vf_bayl_n_cer";R:26;s:56:"1212:5q20q0srr3o91643qq8q272np33q01pn95179q82-ersreraprf";R:26;s:54:"1212:s3s60044o06335ro6p4230r3p39s5r0218445878-nccraqvk";R:26;s:76:"1212:7n52sr0q95011onq549n790093po5ppnpss3no0o-gur_sbyybjvat_frpgvbaf_yvfg_gu";R:26;s:76:"1212:26875919r39p4sor0sp97rqpo83np923r4s05rsr-gur_fbheprf_yvfgrq_sbe_rnpu_ne";R:26;s:76:"1212:7n4q831q36nss213376pps66r5qs4p80r0p9s778-gur_fbheprf_yvfgrq_sbe_rnpu_vz";R:26;s:76:"1212:596398o4rn013rp6rr221n7n4r8q204rr9006042-negvpyr_fbheprf_naq_pbagevohgb";R:26;s:76:"1212:30qqor904q4o5884rp80nsrs5nos87s821rnro80-vzntr_fbheprf,_yvprafrf_naq_pb";R:26;s:51:"1212:50r19sqn0q5o4o74n4n1n1q584r56578693n4rn4-vzntr";R:26;s:61:"1212:nsq53n06o2158q197snq6r9s04247snsn6727513-nabalzbhf_rqvgf";R:26;s:52:"1212:1s20r66o17n6ro7p2ons1no68337q91rns6s4s80-svther";R:26;s:54:"1212:2q8243n2p0r464492p9q563p4s92p56nr3421opp-frr_nyfb";R:26;s:76:"1212:5o2s462rq3rroo86q222sn517p31pq4p78209843-cqs_trarengrq_hfvat_gur_bcra_f";R:26;s:74:"1212:1so0q5q743rno271no38q50rs25oro91777p58r8-zjyvo.rkg_irefvba_(irefvba)f";R:26;s:76:"1212:29r6n20nn1spq2o6s5463oo7136qr4n033op31sr-zjyvo_irefvba_(zjyvoirefvba)f,";R:26;s:52:"1212:6qn13nqqo000o67q42n6q66391713819r634149s-fbhepr";R:26;s:58:"1212:n60n223p98o2p36522s0o7s89s57nr14r144678n-pbagevohgbef";R:26;s:53:"1212:50q8o4n941p26o89482p94no324o5n274s9prq66-haxabja";R:26;s:53:"1212:3229609r15436rp51ops00818n69n84qop58n0p2-yvprafr";R:26;s:74:"1212:9796s10rno3o22287o619n0q6r55so7n94pr8102-fgebat_jneavat_negvpyr_pbhyq";R:26;s:13:"1206:grkg_qve";s:13:"bhg-jvxvoynzr";s:30:"1206:zrffntrf\k5o'wnahnel'\k5q";R:27;s:31:"1206:zrffntrf\k5o'sroehnel'\k5q";R:27;s:28:"1206:zrffntrf\k5o'znepu'\k5q";R:27;s:28:"1206:zrffntrf\k5o'ncevy'\k5q";R:27;s:26:"1206:zrffntrf\k5o'znl'\k5q";R:27;s:27:"1206:zrffntrf\k5o'whar'\k5q";R:27;s:27:"1206:zrffntrf\k5o'whyl'\k5q";R:27;s:29:"1206:zrffntrf\k5o'nhthfg'\k5q";R:27;s:32:"1206:zrffntrf\k5o'frcgrzore'\k5q";R:27;s:30:"1206:zrffntrf\k5o'bpgbore'\k5q";R:27;s:31:"1206:zrffntrf\k5o'abirzore'\k5q";R:27;s:31:"1206:zrffntrf\k5o'qrprzore'\k5q";R:27;s:30:"1206:zrffntrf\k5o'hv_ynat'\k5q";R:27;s:27:"1206:zrffntrf\k5o'ynat'\k5q";R:27;s:35:"1206:zrffntrf\k5o'ynat_rknzcyr'\k5q";R:27;s:30:"1206:zrffntrf\k5o'cebwrpg'\k5q";R:27;s:38:"1206:zrffntrf\k5o'cebwrpg_rknzcyr'\k5q";R:27;s:30:"1206:zrffntrf\k5o'negvpyr'\k5q";R:27;s:29:"1206:zrffntrf\k5o'arrqyr'\k5q";R:27;s:35:"1206:zrffntrf\k5o'fxvcirefvbaf'\k5q";R:27;s:34:"1206:zrffntrf\k5o'vtabersvefg'\k5q";R:27;s:28:"1206:zrffntrf\k5o'yvzvg'\k5q";R:27;s:33:"1206:zrffntrf\k5o'fgneg_qngr'\k5q";R:27;s:34:"1206:zrffntrf\k5o'qngr_sbezng'\k5q";R:27;s:28:"1206:zrffntrf\k5o'beqre'\k5q";R:27;s:35:"1206:zrffntrf\k5o'arjrfg_svefg'\k5q";R:27;s:35:"1206:zrffntrf\k5o'byqrfg_svefg'\k5q";R:27;s:44:"1206:zrffntrf\k5o'ovanel_frnepu_vairefr'\k5q";R:27;s:36:"1206:zrffntrf\k5o'frnepu_zrgubq'\k5q";R:27;s:29:"1206:zrffntrf\k5o'ovanel'\k5q";R:27;s:35:"1206:zrffntrf\k5o'ovanel_va_jc'\k5q";R:27;s:29:"1206:zrffntrf\k5o'yvarne'\k5q";R:27;s:35:"1206:zrffntrf\k5o'vagrecbyngrq'\k5q";R:27;s:36:"1206:zrffntrf\k5o'vtaber_zvabef'\k5q";R:27;s:37:"1206:zrffntrf\k5o'sbepr_jvxvgntf'\k5q";R:27;s:28:"1206:zrffntrf\k5o'fgneg'\k5q";R:27;s:28:"1206:zrffntrf\k5o'erfrg'\k5q";R:27;s:29:"1206:zrffntrf\k5o'znahny'\k5q";R:27;s:34:"1206:zrffntrf\k5o'znahny_yvax'\k5q";R:27;s:30:"1206:zrffntrf\k5o'pbagnpg'\k5q";R:27;s:35:"1206:zrffntrf\k5o'pbagnpg_yvax'\k5q";R:27;s:40:"1206:zrffntrf\k5o'trg_yrff_irefvbaf'\k5q";R:27;s:34:"1206:zrffntrf\k5o'jebat_fxvcf'\k5q";R:27;s:46:"1206:zrffntrf\k5o'frnepu_va_cebterff_grkg'\k5q";R:27;s:50:"1206:zrffntrf\k5o'frnepu_va_cebterff_jvxvgntf'\k5q";R:27;s:37:"1206:zrffntrf\k5o'ab_qvssreraprf'\k5q";R:27;s:36:"1206:zrffntrf\k5o'svefg_irefvba'\k5q";R:27;s:44:"1206:zrffntrf\k5o'svefg_irefvba_cerfrag'\k5q";R:27;s:49:"1206:zrffntrf\k5o'rneyvre_irefvbaf_ninvynoyr'\k5q";R:27;s:37:"1206:zrffntrf\k5o'rkrphgvba_gvzr'\k5q";R:27;s:37:"1206:zrffntrf\k5o'irefvbaf_sbhaq'\k5q";R:27;s:34:"1206:zrffntrf\k5o'cyrnfr_jnvg'\k5q";R:27;s:34:"1206:zrffntrf\k5o'ovanel_grfg'\k5q";R:27;s:31:"1206:zrffntrf\k5o'qrnq_raq'\k5q";R:27;s:32:"1206:zrffntrf\k5o'bapr_zber'\k5q";R:27;s:36:"1206:zrffntrf\k5o'ovanel_rabhtu'\k5q";R:27;s:38:"1206:zrffntrf\k5o'vafregvba_sbhaq'\k5q";R:27;s:37:"1206:zrffntrf\k5o'qryrgvba_sbhaq'\k5q";R:27;s:39:"1206:zrffntrf\k5o'uryc_genafyngvat'\k5q";R:27;s:33:"1206:zrffntrf\k5o'fgneg_urer'\k5q";R:27;s:40:"1206:zrffntrf\k5o'gbb_zhpu_irefvbaf'\k5q";R:27;s:39:"1206:zrffntrf\k5o'abg_sbhaq_ng_nyy'\k5q";R:27;s:23:"1206:zbovyrncc-fvgranzr";s:20:"bhg-jvxvcrqvn-zbovyr";s:30:"1206:zbovyrncc-fcvaare-ybnqvat";R:28;s:33:"1206:zbovyrncc-fcvaare-ergevrivat";R:28;s:36:"1206:zbovyrncc-fnirq-cntrf-pyrne-nyy";R:28;s:32:"1206:zbovyrncc-fnirq-cntrf-pybfr";R:28;s:38:"1206:zbovyrncc-fnirq-cntrf-znk-jneavat";R:28;s:25:"1206:zbovyrncc-cntr-fnirq";R:28;s:33:"1206:zbovyrncc-cntr-nyernql-fnirq";R:28;s:39:"1206:zbovyrncc-fnirq-cntr-erzbir-cebzcg";R:28;s:39:"1206:zbovyrncc-pyrne-nyy-uvfgbel-cebzcg";R:28;s:43:"1206:zbovyrncc-pyrne-nyy-fnirq-cntrf-cebzcg";R:28;s:33:"1206:zbovyrncc-fnirq-cntr-erzbirq";R:28;s:32:"1206:zbovyrncc-fnirq-cntrf-gvgyr";R:28;s:24:"1206:zbovyrncc-zrah-ubzr";R:28;s:28:"1206:zbovyrncc-zrah-ynathntr";R:28;s:28:"1206:zbovyrncc-zrah-fnircntr";R:28;s:30:"1206:zbovyrncc-zrah-fnirqcntrf";R:28;s:27:"1206:zbovyrncc-zrah-uvfgbel";R:28;s:24:"1206:zbovyrncc-zrah-onpx";R:28;s:27:"1206:zbovyrncc-zrah-sbejneq";R:28;s:26:"1206:zbovyrncc-zrah-arneol";R:28;s:28:"1206:zbovyrncc-zrah-frggvatf";R:28;s:30:"1206:zbovyrncc-zrah-fryrpggrkg";R:28;s:29:"1206:zbovyrncc-zrah-funercntr";R:28;s:25:"1206:zbovyrncc-zrah-nobhg";R:28;s:26:"1206:zbovyrncc-zrah-pnapry";R:28;s:26:"1206:zbovyrncc-zrah-bhgchg";R:28;s:27:"1206:zbovyrncc-zrah-fbheprf";R:28;s:33:"1206:zbovyrncc-zrah-funer-gjvggre";R:28;s:28:"1206:zbovyrncc-zrah-funer-so";R:28;s:29:"1206:zbovyrncc-zrah-funer-evy";R:28;s:35:"1206:zbovyrncc-zrah-vbf-bcra-fnsnev";R:28;s:29:"1206:zbovyrncc-frggvatf-pybfr";R:28;s:29:"1206:zbovyrncc-frggvatf-gvgyr";R:28;s:41:"1206:zbovyrncc-frggvatf-ncc-irefvba-ynory";R:28;s:45:"1206:zbovyrncc-frggvatf-naqebvq-irefvba-ynory";R:28;s:46:"1206:zbovyrncc-frggvatf-cubartnc-irefvba-ynory";R:28;s:38:"1206:zbovyrncc-frggvatf-ynathntr-ynory";R:28;s:37:"1206:zbovyrncc-frggvatf-ynathntr-qrfp";R:28;s:39:"1206:zbovyrncc-frggvatf-sbag-fvmr-ynory";R:28;s:38:"1206:zbovyrncc-frggvatf-sbag-fvmr-qrfp";R:28;s:41:"1206:zbovyrncc-frggvatf-sbag-fvmr-fznyyre";R:28;s:40:"1206:zbovyrncc-frggvatf-sbag-fvmr-abezny";R:28;s:40:"1206:zbovyrncc-frggvatf-sbag-fvmr-ynetre";R:28;s:30:"1206:zbovyrncc-ynatyvaxf-pybfr";R:28;s:30:"1206:zbovyrncc-ynatyvaxf-gvgyr";R:28;s:34:"1206:zbovyrncc-reebe-abg-ninvynoyr";R:28;s:28:"1206:zbovyrncc-reebe-bssyvar";R:28;s:35:"1206:zbovyrncc-reebe-bssyvar-cebzcg";R:28;s:36:"1206:zbovyrncc-reebe-fnirq-be-bayvar";R:28;s:30:"1206:zbovyrncc-reebe-abg-sbhaq";R:28;s:37:"1206:zbovyrncc-reebe-abg-sbhaq-ernfba";R:28;s:33:"1206:zbovyrncc-reebe-frnepu-ntnva";R:28;s:31:"1206:zbovyrncc-nobhg-cntr-ynory";R:28;s:32:"1206:zbovyrncc-uvfgbel-pyrne-nyy";R:28;s:28:"1206:zbovyrncc-uvfgbel-pybfr";R:28;s:28:"1206:zbovyrncc-uvfgbel-gvgyr";R:28;s:29:"1206:zbovyrncc-rkcnaq-frpgvba";R:28;s:31:"1206:zbovyrncc-pbyyncfr-frpgvba";R:28;s:26:"1206:zbovyrncc-nobhg-pybfr";R:28;s:31:"1206:zbovyrncc-nobhg-cntr-gvgyr";R:28;s:28:"1206:zbovyrncc-nobhg-irefvba";R:28;s:30:"1206:zbovyrncc-nobhg-pbclevtug";R:28;s:28:"1206:zbovyrncc-nobhg-yvprafr";R:28;s:33:"1206:zbovyrncc-nobhg-pbagevohgbef";R:28;s:28:"1206:zbovyrncc-nobhg-perqvgf";R:28;s:27:"1206:zbovyrncc-arneol-pybfr";R:28;s:27:"1206:zbovyrncc-arneol-gvgyr";R:28;s:30:"1206:zbovyrncc-ncc-qrfpevcgvba";R:28;s:48:"1206:zbovyrncc-frnepu-erfhygf-qvq-lbh-zrna-ynory";R:28;s:40:"1206:zbovyrncc-frnepu-erfhygf-ab-erfhygf";R:28;s:35:"1206:zbovyrncc-frnepu-erfhygf-pybfr";R:28;s:28:"1206:zbovyrncc-frnepu-ohggba";R:28;s:33:"1206:zbovyrncc-frnepu-cynprubyqre";R:28;s:33:"1206:zbovyrncc-qb-shyygrkg-frnepu";R:28;s:33:"1206:zbovyrncc-funer-bcra-oebjfre";R:28;s:35:"1206:zbovyrncc-nggevohgvba-zncdhrfg";R:28;s:30:"1206:zbovyrncc-nggevohgvba-bfz";R:28;s:36:"1206:zbovyrncc-gjvggre-abg-ninvynoyr";R:28;s:14:"1224:jvxv_anzr";s:14:"bhg-jvxvernqre";s:20:"1224:ncceb:jvxv_anzr";R:29;s:20:"1224:obbxf:jvxv_anzr";R:29;s:19:"1224:qvpg:jvxv_anzr";R:29;s:20:"1224:thgra:jvxv_anzr";R:29;s:18:"1224:ubj:jvxv_anzr";R:29;s:20:"1224:crqvn:jvxv_anzr";R:29;s:20:"1224:dhbgr:jvxv_anzr";R:29;s:20:"1224:fgnej:jvxv_anzr";R:29;s:19:"1224:geni:jvxv_anzr";R:29;s:17:"1224:yvprafr_grkg";R:29;s:23:"1224:ncceb:yvprafr_grkg";R:29;s:22:"1224:qvpg:yvprafr_grkg";R:29;s:23:"1224:thgra:yvprafr_grkg";R:29;s:21:"1224:ubj:yvprafr_grkg";R:29;s:23:"1224:dhbgr:yvprafr_grkg";R:29;s:22:"1224:geni:yvprafr_grkg";R:29;s:16:"1224:glcr_n_jbeq";R:29;s:22:"1224:thgra:glcr_n_jbeq";R:29;s:15:"1224:ab_erfhygf";R:29;s:14:"1224:frnepuvat";R:29;s:16:"1224:fryrpg_jvxv";R:29;s:18:"1224:uvfgbel_gvgyr";R:29;s:15:"1224:ab_uvfgbel";R:29;s:16:"1224:cyrnfr_jnvg";R:29;s:18:"1224:pyrne_uvfgbel";R:29;s:8:"1224:lrf";R:29;s:7:"1224:ab";R:29;s:15:"1224:cebgrpgvba";R:29;s:21:"1224:thgra:cebgrpgvba";R:29;s:15:"1224:erfgevpgrq";R:29;s:17:"1224:frg_cnffjbeq";R:29;s:7:"1224:bx";R:29;s:15:"1224:frg_svygre";R:29;s:19:"1224:xrrc_svygre_ba";R:29;s:20:"1224:xrrc_svygre_bss";R:29;s:19:"1224:svygre_bcgvbaf";R:29;s:19:"1224:ghea_svygre_ba";R:29;s:20:"1224:ghea_svygre_bss";R:29;s:20:"1224:punatr_cnffjbeq";R:29;s:22:"1224:er_ragre_cnffjbeq";R:29;s:26:"1224:er_ragre_arj_cnffjbeq";R:29;s:24:"1224:cnffjbeqf_abg_zngpu";R:29;s:23:"1224:ragre_byq_cnffjbeq";R:29;s:19:"1224:ragre_cnffjbeq";R:29;s:14:"1224:gel_ntnva";R:29;s:23:"1224:ragre_arj_cnffjbeq";R:29;s:22:"1224:cneragny_pbagebyf";R:29;s:6:"1224:e";R:29;s:72:"1198:hfre:znexnurefuoretre/oybt-egy-qrirybcref-jnagrq/cntr_qvfcynl_gvgyr";s:53:"cntr-Hfre:ZnexNUrefuoretre/oybt-EGY-Qrirybcref-jnagrq";s:63:"1198:hfre:znexnurefuoretre/oybt-egy-qrirybcref-jnagrq/1-pncgvba";R:30;s:60:"1198:hfre:znexnurefuoretre/oybt-egy-qrirybcref-jnagrq/2-cnen";R:30;s:60:"1198:hfre:znexnurefuoretre/oybt-egy-qrirybcref-jnagrq/3-cnen";R:30;s:60:"1198:hfre:znexnurefuoretre/oybt-egy-qrirybcref-jnagrq/4-cnen";R:30;s:60:"1198:hfre:znexnurefuoretre/oybt-egy-qrirybcref-jnagrq/5-cnen";R:30;s:60:"1198:hfre:znexnurefuoretre/oybt-egy-qrirybcref-jnagrq/6-cnen";R:30;s:63:"1198:hfre:znexnurefuoretre/oybt-egy-qrirybcref-jnagrq/7-ohtqrfp";R:30;s:63:"1198:hfre:znexnurefuoretre/oybt-egy-qrirybcref-jnagrq/8-ohtqrfp";R:30;s:63:"1198:hfre:znexnurefuoretre/oybt-egy-qrirybcref-jnagrq/9-ohtqrfp";R:30;s:64:"1198:hfre:znexnurefuoretre/oybt-egy-qrirybcref-jnagrq/12-frrnyfb";R:30;s:64:"1198:hfre:znexnurefuoretre/oybt-egy-qrirybcref-jnagrq/10-ohtqrfp";R:30;s:61:"1198:hfre:znexnurefuoretre/oybt-egy-qrirybcref-jnagrq/11-cnen";R:30;s:70:"1198:hfre:enlzbaq/jzqr-jvxvcrqvn_sbe_jbeyq_urevgntr/cntr_qvfcynl_gvgyr";s:51:"cntr-Hfre:Enlzbaq/JZQR-Jvxvcrqvn sbe Jbeyq Urevgntr";s:53:"1198:hfre:enlzbaq/jzqr-jvxvcrqvn_sbe_jbeyq_urevgntr/1";R:31;s:66:"1198:hfre:fnagubfu.gubggvatny/genafyngrgrfgcntr/cntr_qvfcynl_gvgyr";s:47:"cntr-Hfre:Fnagubfu.gubggvatny/GenafyngrGrfgCntr";s:49:"1198:hfre:fnagubfu.gubggvatny/genafyngrgrfgcntr/1";R:32;s:42:"1198:hfre:fvroenaq/grfg/cntr_qvfcynl_gvgyr";s:23:"cntr-Hfre:Fvroenaq/grfg";s:25:"1198:hfre:fvroenaq/grfg/1";R:33;s:17:"8:oj-fvqrone-arjf";s:13:"jvxv-orgnjvxv";s:21:"8:oj-fvqrone-cebwrpgf";R:34;s:27:"8:oj-znvacntr-fhccbeg-gvgyr";R:34;s:26:"8:oj-fvqrone-qbphzragngvba";R:34;s:24:"8:oj-fvqrone-genafyngbef";R:34;s:18:"8:oj-fvqrone-vageb";R:34;s:19:"8:oj-fvqrone-cbegny";R:34;s:22:"8:oj-fvqrone-ynathntrf";R:34;s:22:"8:oj-fvqrone-genafyngr";R:34;s:25:"8:oj-fvqrone-punatrf-ynat";R:34;s:29:"8:oj-fvqrone-punatrf-ynat-nyy";R:34;s:25:"8:oj-fvqrone-punatrf-jvxv";R:34;s:20:"8:oj-fvqrone-vabgure";R:34;s:18:"8:tebhc-genafyngbe";R:34;s:25:"8:tebhc-genafyngbe-zrzore";R:34;s:15:"8:tebhc-bssyvar";R:34;s:22:"8:tebhc-bssyvar-zrzore";R:34;s:13:"8:tebhc-fgnss";R:34;s:20:"8:tebhc-fgnss-zrzore";R:34;s:14:"8:afgno-cbegny";R:34;s:19:"8:afgno-genafyngvat";R:34;s:27:"8:oj-erpragpunatrf-ynathntr";R:34;s:15:"8:oj-tebhcfgngf";R:34;s:20:"8:oj-cbegny-abar-vfb";R:34;s:28:"8:oj-cbegny-abar-genafyngbef";R:34;s:20:"8:oj-cbegny-ynathntr";R:34;s:18:"8:oj-cbegny-fpevcg";R:34;s:25:"8:oj-cbegny-fpevcg-cyheny";R:34;s:20:"8:oj-cbegny-inevnagf";R:34;s:21:"8:oj-cbegny-jvxvzrqvn";R:34;s:21:"8:oj-cbegny-jvxvcrqvn";R:34;s:22:"8:oj-cbegny-jvxgvbanel";R:34;s:21:"8:oj-cbegny-jvxvdhbgr";R:34;s:21:"8:oj-cbegny-jvxvobbxf";R:34;s:22:"8:oj-cbegny-jvxvfbhepr";R:34;s:20:"8:oj-cbegny-jvxvarjf";R:34;s:23:"8:oj-cbegny-jvxvirefvgl";R:34;s:21:"8:oj-cbegny-vaphongbe";R:34;s:22:"8:oj-cbegny-fgngvfgvpf";R:34;s:23:"8:oj-cbegny-genafyngbef";R:34;s:17:"8:oj-cbegny-abgrf";R:34;s:18:"8:oj-hfre-ubzrjvxv";R:34;s:13:"8:oj-hfre-vep";R:34;s:15:"8:oj-hfre-fxlcr";R:34;s:29:"8:oj-erdhrfg-genafyngbe-vageb";R:34;s:36:"8:oj-erdhrfg-genafyngbe-cererd-gvgyr";R:34;s:28:"8:oj-erdhrfg-genafyngbe-yvax";R:34;s:22:"8:oj-rqvggbbyf-yrnq-va";R:34;s:22:"8:oj-rqvggbbyf-gbbygvc";R:34;s:30:"8:tnqtrg-frpgvba-shapgvbanyvgl";R:34;s:23:"8:tnqtrg-frpgvba-qrfvta";R:34;s:20:"8:tnqtrg-uvqr-frnepu";R:34;s:20:"8:tnqtrg-ovqvohggbaf";R:34;s:14:"8:tnqtrg-cebgn";R:34;s:22:"8:tnqtrg-qlanzvp-zrahf";R:34;s:22:"8:tnqtrg-frghfreevtugf";R:34;s:25:"8:tnqtrg-tbbtyr-genafyngr";R:34;s:16:"8:tnqtrg-flzobyf";R:34;s:19:"8:tnqtrg-onpxtebhaq";R:34;s:33:"8:tnqtrg-genafyhprag-pngrtbel-obk";R:34;s:32:"8:oj-qrfp-genafyngrjvxv-zrffntrf";R:34;s:24:"8:oj-nqq-lbhefrys-gb-znc";R:34;s:29:"8:rqvgabgvpr-0-znva_cntr-grkg";R:34;s:19:"8:gja-znvacntr-qrfp";s:17:"jvxv-gja-znvacntr";s:23:"8:gja-znvacntr-fgnegabj";R:35;s:21:"8:gja-znvacntr-fybtna";R:35;s:29:"8:gja-znvacntr-xrljbeq-bayvar";R:35;s:26:"8:gja-znvacntr-qrfp-bayvar";R:35;s:26:"8:gja-znvacntr-zber-bayvar";R:35;s:31:"8:gja-znvacntr-xrljbeq-cebwrpgf";R:35;s:28:"8:gja-znvacntr-qrfp-cebwrpgf";R:35;s:28:"8:gja-znvacntr-zber-cebwrpgf";R:35;s:32:"8:gja-znvacntr-xrljbeq-ynathntrf";R:35;s:29:"8:gja-znvacntr-qrfp-ynathntrf";R:35;s:29:"8:gja-znvacntr-zber-ynathntrf";R:35;s:27:"8:gja-znvacntr-xrljbeq-grpu";R:35;s:24:"8:gja-znvacntr-qrfp-grpu";R:35;s:24:"8:gja-znvacntr-zber-grpu";R:35;s:27:"8:gja-znvacntr-xrljbeq-uryc";R:35;s:24:"8:gja-znvacntr-qrfp-uryc";R:35;s:24:"8:gja-znvacntr-zber-uryc";R:35;s:27:"8:gja-znvacntr-xrljbeq-wbva";R:35;s:24:"8:gja-znvacntr-qrfp-wbva";R:35;s:24:"8:gja-znvacntr-zber-wbva";R:35;s:28:"8:gja-znvacntr-xrljbeq-nobhg";R:35;s:25:"8:gja-znvacntr-qrfp-nobhg";R:35;s:25:"8:gja-znvacntr-zber-nobhg";R:35;s:26:"8:gja-znvacntr-cebwrpgyvfg";R:35;s:23:"8:gja-cebwrpg-zrqvnjvxv";R:35;s:21:"8:gja-cebwrpg-serrpby";R:35;s:22:"8:gja-cebwrpg-znagvfog";R:35;s:23:"8:gja-cebwrpg-fgnghfarg";R:35;s:19:"8:gja-cebwrpg-jvxvn";R:35;s:24:"8:gja-cebwrpg-crqvncerff";R:35;s:17:"8:gja-cebwrpg-bfz";R:35;s:17:"8:gja-cebwrpg-rby";R:35;s:22:"8:gja-cebwrpg-shqsbehz";R:35;s:20:"8:gja-cebwrpg-bxnjvk";R:35;s:23:"8:gja-cebwrpg-jvxvoynzr";R:35;s:24:"8:gja-cebwrpg-jvxvernqre";R:35;s:21:"8:gja-cebwrpg-funcnqb";R:35;s:19:"8:gja-cebwrpg-xvjvk";R:35;s:19:"8:gja-cebwrpg-vuevf";R:35;s:19:"8:gja-cebwrpg-zvsbf";R:35;s:24:"8:gja-cebwrpg-bcravzntrf";R:35;s:25:"8:gja-cebwrpg-cljvxvcrqvn";R:35;s:24:"8:gja-cebwrpg-gbbyfreire";R:35;s:29:"8:gja-cebwrpg-jvxvcrqvnzbovyr";R:35;s:10:"8:znvacntr";a:5:{i:0;s:4:"core";i:1;s:15:"core-0-mostused";i:2;s:9:"core-1.17";i:3;s:9:"core-1.18";i:4;s:9:"core-1.19";}s:16:"8:erq-yvax-gvgyr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:17:"8:rqvgfrpgvbauvag";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:18:"8:gnyxcntryvaxgrkg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:11:"8:nobhgfvgr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:6:"8:gnyx";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:13:"8:rqvgfrpgvba";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:8:"8:frnepu";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:9:"8:wnahnel";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:10:"8:sroehnel";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:7:"8:znepu";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:7:"8:ncevy";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:10:"8:znl_ybat";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:6:"8:whar";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:6:"8:whyl";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:8:"8:nhthfg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:11:"8:frcgrzore";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:9:"8:bpgbore";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:10:"8:abirzore";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:10:"8:qrprzore";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:20:"8:frnepu-erfhyg-fvmr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:12:"8:afgno-znva";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:14:"8:pbagevofyvax";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:9:"8:cevinpl";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:13:"8:qvfpynvzref";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:gbbygvc-frnepu";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:24:"8:gbbygvc-g-fcrpvnycntrf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:25:"8:gbbygvc-frnepu-shyygrkg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:gbbygvc-c-ybtb";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:25:"8:gbbygvc-a-erpragpunatrf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:gbbygvc-a-uryc";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:12:"8:anivtngvba";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:18:"8:gbbygvc-a-cbegny";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:22:"8:gbbygvc-a-enaqbzcntr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:18:"8:gbbygvc-cg-ybtva";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:8:"8:aolgrf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:onq_vzntr_yvfg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:6:"8:uryc";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:erpragpunatrf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:12:"8:enaqbzcntr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:8:"8:cbegny";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:12:"8:cbegny-hey";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:10:"8:uryccntr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:10:"8:rqvghaqb";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:17:"8:gbbygvc-pn-gnyx";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:25:"8:gbbygvc-g-jungyvaxfurer";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:25:"8:gbbygvc-a-pheeragriragf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:18:"8:gbbygvc-g-hcybnq";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:32:"8:gbbygvc-a-znvacntr-qrfpevcgvba";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:17:"8:gbbygvc-pn-rqvg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:14:"8:frnepuohggba";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:11:"8:nobhgcntr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:22:"8:znvacntr-qrfpevcgvba";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:pheeragriragf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:19:"8:pheeragriragf-hey";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:qvfpynvzrecntr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:18:"8:cevagnoyrirefvba";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:23:"8:gbbygvc-pn-afgno-znva";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:20:"8:gbbygvc-pn-uvfgbel";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:31:"8:gbbygvc-g-erpragpunatrfyvaxrq";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:6:"8:rqvg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:18:"8:irpgbe-ivrj-ivrj";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:14:"8:fcrpvnycntrf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:13:"8:cevinplcntr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:9:"8:gntyvar";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:7:"8:ivrjf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:9:"8:gbbyobk";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:ergevrirqsebz";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:crefbanygbbyf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:18:"8:whzcgbanivtngvba";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:14:"8:whzcgbfrnepu";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:fvgr-ngbz-srrq";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:8:"8:whzcgb";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:21:"8:gbbygvc-g-creznyvax";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:11:"8:creznyvax";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:12:"8:anzrfcnprf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:10:"8:inevnagf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:9:"8:npgvbaf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:17:"8:gbbygvc-g-cevag";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:25:"8:ani-ybtva-perngrnppbhag";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:oynaxanzrfcnpr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:jungyvaxfurer";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:13:"8:fubja-gvgyr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:8:"8:hcybnq";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:afgno-fcrpvny";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:frnepuerfhygf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:21:"8:frnepuerfhygf-gvgyr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:5:"8:wna";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:5:"8:sro";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:5:"8:zne";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:5:"8:nce";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:5:"8:znl";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:5:"8:wha";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:5:"8:why";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:5:"8:nht";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:5:"8:frc";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:5:"8:bpg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:5:"8:abi";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:5:"8:qrp";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:20:"8:gbbygvc-a-znvacntr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:uvfgbel_fubeg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:29:"8:erpragpunatrfyvaxrq-gbbyobk";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:21:"8:irpgbe-ivrj-uvfgbel";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:ynfgzbqvsvrqng";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:17:"8:zvffvat-negvpyr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:cntrpngrtbevrf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:18:"8:irpgbe-ivrj-rqvg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:guhzoanvy-zber";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:frnepu-frpgvba";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:8:"8:yvarab";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:bgureynathntrf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:14:"8:ebyyonpxyvax";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:18:"8:gbbygvc-ebyyonpx";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:13:"8:afgno-vzntr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:6:"8:uvfg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:14:"8:erivfvbanfbs";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:10:"8:arjcntrf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:14:"8:gbbygvc-haqb";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:11:"8:oybpxyvax";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:19:"8:uvqqra-pngrtbevrf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:13:"8:wnahnel-tra";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:14:"8:sroehnel-tra";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:11:"8:znepu-tra";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:11:"8:ncevy-tra";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:9:"8:znl-tra";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:10:"8:whar-tra";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:10:"8:whyl-tra";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:12:"8:nhthfg-tra";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:frcgrzore-tra";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:13:"8:bpgbore-tra";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:14:"8:abirzore-tra";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:14:"8:qrprzore-tra";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:ivrjfbhepryvax";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:9:"8:rqvgbyq";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:20:"8:grzcyngr-cebgrpgrq";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:26:"8:frnepucebsvyr-rirelguvat";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:32:"8:frnepucebsvyr-negvpyrf-gbbygvc";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:30:"8:frnepucebsvyr-vzntrf-gbbygvc";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:34:"8:frnepucebsvyr-rirelguvat-gbbygvc";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:22:"8:frnepucebsvyr-vzntrf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:23:"8:frnepucebsvyr-cebwrpg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:32:"8:frnepucebsvyr-nqinaprq-gbbygvc";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:24:"8:frnepucebsvyr-nqinaprq";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:31:"8:frnepucebsvyr-cebwrpg-gbbygvc";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:24:"8:frnepucebsvyr-negvpyrf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:11:"8:frnepunyy";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:5:"8:gbp";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:6:"8:qvss";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:14:"8:ivrjceriarkg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:23:"8:gbbygvc-pn-ivrjfbhepr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:abnegvpyrgrkg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:7:"8:arkga";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:7:"8:ceria";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:13:"8:ceria-gvgyr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:22:"8:gbbygvc-cg-zlpbagevf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:5:"8:zba";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:5:"8:ghr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:5:"8:jrq";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:5:"8:guh";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:5:"8:sev";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:5:"8:fng";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:5:"8:fha";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:19:"8:gbbygvc-cg-ybtbhg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:13:"8:arkga-gvgyr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:22:"8:gbbygvc-cg-jngpuyvfg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:24:"8:gbbygvc-cg-cersreraprf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:19:"8:gbbygvc-cg-zlgnyx";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:21:"8:gbbygvc-cg-hfrecntr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:22:"8:fubjvaterfhygfurnqre";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:afgno-pngrtbel";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:17:"8:frnepu-erqverpg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:24:"8:gbbygvc-pn-afgno-vzntr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:12:"8:vzntryvaxf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:10:"8:svyruvfg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:12:"8:eriregzbir";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:eriqry-erfgber";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:14:"8:haqryrgryvax";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:24:"8:eriqry-erfgber-ivfvoyr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:18:"8:punatr-oybpxyvax";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:afgno-grzcyngr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:13:"8:eriregzretr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:13:"8:haoybpxyvax";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:24:"8:eriqry-erfgber-qryrgrq";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:cebgrpg_punatr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:18:"8:haqryrgrivrjyvax";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:qryrgrqnegvpyr";a:4:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;}s:19:"8:gbbygvc-srrq-ngbz";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:8:"8:perngr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:20:"8:irpgbe-ivrj-perngr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:18:"8:cerivbhferivfvba";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:18:"8:gbbygvc-pn-jngpu";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:29:"8:erpragpunatrfyvaxrq-fhzznel";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:frnepuzrah-arj";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:17:"8:gbbygvc-fhzznel";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:20:"8:svyruvfg-guhzogrkg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:8:"8:rkcbeg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:41:"8:cbfg-rkcnaq-grzcyngr-vapyhfvba-pngrtbel";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:40:"8:cbfg-rkcnaq-grzcyngr-vapyhfvba-jneavat";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:12:"8:ivrjfbhepr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:nyycntrffhozvg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:6:"8:fubj";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:6:"8:uvqr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:24:"8:irpgbe-ivrj-ivrjfbhepr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:17:"8:pheerageri-nfbs";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:5:"8:snd";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:25:"8:frnepuzrah-arj-abperngr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:24:"8:funerqhcybnq-qrfp-urer";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:17:"8:gbbygvc-pn-zbir";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:7:"8:jngpu";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:11:"8:anzrfcnpr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:zlcersreraprf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:12:"8:vcobcgvbaf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:10:"8:rqvgyvax";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:anzrfcnprfnyy";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:10:"8:zrgnqngn";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:12:"8:hfreybtbhg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:8:"8:zlgnyx";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:13:"8:zljngpuyvfg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:11:"8:zlpbagevf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:27:"8:gbbygvc-pn-afgno-pngrtbel";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:erqverpgrqsebz";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:19:"8:svyruvfg-qngrgvzr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:svyruvfg-hfre";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:18:"8:svyruvfg-pheerag";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:svyruvfg-guhzo";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:21:"8:svyruvfg-qvzrafvbaf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:18:"8:svyr-napube-yvax";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:18:"8:svyruvfg-pbzzrag";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:svyruvfg-uryc";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:frnepu-fhttrfg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:27:"8:gbbygvc-pn-afgno-grzcyngr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:12:"8:afgno-hfre";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:5:"8:phe";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:6:"8:ynfg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:cntr-ngbz-srrq";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:svyr-vasb-fvmr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:23:"8:gbbygvc-pn-nqqfrpgvba";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:13:"8:fnirnegvpyr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:18:"8:frnepu-abarsbhaq";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:14:"8:gbbygvc-fnir";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:nycunvaqrkyvar";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:14:"8:yvaxfgbvzntr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:8:"8:pnapry";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:10:"8:fubjqvss";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:13:"8:fubjcerivrj";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:14:"8:rqvguryccntr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:11:"8:zvaberqvg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:9:"8:fvt_gvc";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:10:"8:rqvguryc";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:vgnyvp_fnzcyr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:17:"8:gbbygvc-cerivrj";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:pbclevtugcntr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:17:"8:urnqyvar_fnzcyr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:11:"8:jngpuguvf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:abjvxv_fnzcyr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:12:"8:vgnyvp_gvc";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:rkgyvax_fnzcyr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:11:"8:arjjvaqbj";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:13:"8:rkgyvax_gvc";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:13:"8:obyq_fnzcyr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:11:"8:vzntr_gvc";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:8:"8:ue_gvc";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:12:"8:abjvxv_gvc";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:10:"8:yvax_gvc";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:14:"8:gbbygvc-qvss";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:13:"8:yvax_fnzcyr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:9:"8:fhzznel";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:10:"8:obyq_gvc";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:14:"8:urnqyvar_gvc";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:11:"8:zrqvn_gvc";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:12:"8:gnt-svygre";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:28:"8:abnegvpyrgrkg-abcrezvffvba";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:19:"8:gbbygvc-frnepu-tb";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:afgno-cebwrpg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:6:"8:zbir";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:epfubjuvqrobgf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:fubj-ovt-vzntr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:9:"8:uvfgbel";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:17:"8:epfubjuvqrnabaf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:epfubjuvqryvh";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:17:"8:zvaberqvgyrggre";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:8:"8:vaireg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:24:"8:pngrtbel-negvpyr-pbhag";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:17:"8:epfubjuvqrzvabe";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:epfubjuvqrzvar";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:23:"8:pngrtbel-fhopng-pbhag";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:9:"8:rqvgvat";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:14:"8:eri-qryhaqry";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:12:"8:pngrtbevrf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:9:"8:yvprafr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:17:"8:nabarqvgjneavat";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:obgrqvgyrggre";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:arjcntryrggre";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:27:"8:erpragpunatrf-ynory-zvabe";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:29:"8:erpragpunatrf-ynory-arjcntr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:25:"8:erpragpunatrf-ynory-obg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:33:"8:erpragpunatrf-ynory-hacngebyyrq";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:zrgnqngn-uryc";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:9:"8:epyvaxf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:22:"8:erpragpunatrf-yrtraq";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:12:"8:epyvfgsebz";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:18:"8:ep-raunaprq-uvqr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:27:"8:erpragpunatrfyvaxrq-gvgyr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:21:"8:erpragpunatrfyvaxrq";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:20:"8:ep-raunaprq-rkcnaq";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:10:"8:svyrqrfp";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:24:"8:erpragpunatrfyvaxrq-gb";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:26:"8:erpragpunatrfyvaxrq-cntr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:23:"8:gbbygvc-pn-afgno-hfre";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:25:"8:gbbygvc-g-pbagevohgvbaf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:20:"8:gbbygvc-pn-hajngpu";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:8:"8:zbaqnl";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:9:"8:ghrfqnl";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:11:"8:jrqarfqnl";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:10:"8:guhefqnl";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:8:"8:sevqnl";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:10:"8:fngheqnl";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:8:"8:fhaqnl";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:10:"8:azrzoref";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:26:"8:jungyvaxfurer-uvqrerqvef";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:20:"8:irpgbe-npgvba-zbir";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:21:"8:jungyvaxfurer-gvgyr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:20:"8:jungyvaxfurer-cntr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:25:"8:jungyvaxfurer-uvqrgenaf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:25:"8:jungyvaxfurer-uvqryvaxf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:23:"8:jungyvaxfurer-svygref";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:33:"8:gbbygvc-pbzcnerfryrpgrqirefvbaf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:26:"8:irpgbe-npgvba-nqqfrpgvba";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:25:"8:pbzcnerfryrpgrqirefvbaf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:17:"8:zrgnqngn-svryqf";a:4:{i:0;R:37;i:1;R:38;i:2;R:40;i:3;R:41;}s:14:"8:svyr-abuverf";a:3:{i:0;R:37;i:1;R:38;i:2;R:41;}s:17:"8:pngrtbel_urnqre";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:22:"8:rqvg-rkgreanyyl-uryc";a:4:{i:0;R:37;i:1;R:38;i:2;R:40;i:3;R:41;}s:17:"8:rqvg-rkgreanyyl";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:arjnegvpyrgrkg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:11:"8:hfreybtva";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:24:"8:grzcyngr-frzvcebgrpgrq";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:11:"8:yvaxfurer";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:20:"8:jungyvaxfurer-arkg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:12:"8:vferqverpg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:9:"8:vfvzntr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:pbagevohgvbaf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:20:"8:jungyvaxfurer-ceri";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:21:"8:jungyvaxfurer-yvaxf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:12:"8:vfgrzcyngr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:ivrjfbheprbyq";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:frnepunegvpyr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:26:"8:gbbygvc-pn-afgno-cebwrpg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:9:"8:hajngpu";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:24:"8:yvfgvatpbagvahrfnooeri";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:14:"8:onqgvgyrgrkg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:6:"8:lrne";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:11:"8:zbagufnyy";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:7:"8:zbagu";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:7:"8:ybtva";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:22:"8:uvfgbel-fubj-qryrgrq";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:17:"8:yvaxfrnepu-yvar";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:12:"8:qryybtcntr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:19:"8:gbbygvc-zvaberqvg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:gbbygvc-jngpu";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:19:"8:frnepuzrah-rkvfgf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:fhopngrtbevrf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:npgvbapbzcyrgr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:14:"8:npgvbasnvyrq";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:5:"8:ybt";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:abyvaxfgbvzntr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:uvfgbel-gvgyr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:10:"8:ergheagb";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:14:"8:ivrjcntrybtf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:30:"8:erpragpunatrfyvaxrq-aberfhyg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:24:"8:uvfgbel-svryqfrg-gvgyr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:12:"8:uvfgyrtraq";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:17:"8:guhzoanvy_reebe";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:40:"8:cbfg-rkcnaq-grzcyngr-nethzrag-pngrtbel";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:39:"8:cbfg-rkcnaq-grzcyngr-nethzrag-jneavat";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:reebecntrgvgyr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:13:"8:obbxfbheprf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:14:"8:lbhecnffjbeq";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:10:"8:lbheanzr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:20:"8:erzrzorezlcnffjbeq";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:13:"8:nyynegvpyrf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:9:"8:cerivrj";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:17:"8:nyyzrffntrfanzr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:18:"8:abvaqrk-pngrtbel";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:20:"8:nyyzrffntrfqrsnhyg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:19:"8:gbbygvc-pn-qryrgr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:25:"8:arjhfreybt-perngr-ragel";a:4:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;}s:11:"8:1zbirqgb2";a:4:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;}s:20:"8:gbbygvc-pn-cebgrpg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:11:"8:jngpuyvfg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:10:"8:onqgvgyr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:9:"8:abybtva";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:20:"8:ybtvaynathntrynory";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:13:"8:abybtvayvax";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:9:"8:arjcntr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:23:"8:eriqryrgr-ybt-zrffntr";a:4:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;}s:20:"8:eriqryrgr-ybtragel";a:4:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;}s:15:"8:eriqryrgr-uvq";a:4:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;}s:15:"8:grzcyngrfhfrq";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:19:"8:eriqryrgr-pbagrag";a:4:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;}s:13:"8:zbirybtcntr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:rqvgvatfrpgvba";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:18:"8:uvqqrapngrtbevrf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:fit-ybat-qrfp";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:8:"8:qryrgr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:13:"8:ybtvacebzcg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:znvyzlcnffjbeq";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:12:"8:qvssrerapr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:cntre-byqre-a";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:14:"8:cerivbhfqvss";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:cntre-arjre-a";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:11:"8:uvfgsvefg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:10:"8:uvfgynfg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:23:"8:pngrtbel-zrqvn-urnqre";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:arjhfreybtcntr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:21:"8:pngrtbel-svyr-pbhag";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:21:"8:qvfnzovthngvbafcntr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:cebgrpgybtcntr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:26:"8:gbbygvc-pn-afgno-fcrpvny";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:10:"8:nyycntrf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:21:"8:zbirqqryrgrq-abgvpr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:32:"8:erpragpunatrf-srrq-qrfpevcgvba";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:26:"8:fc-pbagevohgvbaf-hcybnqf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:21:"8:pbagevohgvbaf-gvgyr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:23:"8:fc-pbagevohgvbaf-gnyx";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:12:"8:arjnegvpyr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:23:"8:fc-pbagevohgvbaf-ybtf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:7:"8:hpgbc";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:13:"8:hfreperngrq";a:3:{i:0;R:37;i:1;R:38;i:2;R:41;}s:27:"8:obbxfbheprf-frnepu-yrtraq";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:27:"8:fc-pbagevohgvbaf-oybpxybt";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:obbxfbheprf-tb";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:28:"8:erperngr-zbirqqryrgrq-jnea";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:13:"8:pbagevofho2";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:20:"8:lbhunirarjzrffntrf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:perngrnppbhag";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:26:"8:fc-pbagevohgvbaf-gbcbayl";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:21:"8:arjzrffntrfqvssyvax";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:25:"8:fc-pbagevohgvbaf-fhozvg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:17:"8:arjzrffntrfyvax";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:oybpxybtragel";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:20:"8:zvffvatnegvpyr-eri";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:26:"8:fc-pbagevohgvbaf-arjovrf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:25:"8:fc-pbagevohgvbaf-frnepu";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:27:"8:fc-pbagevohgvbaf-hfreanzr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:13:"8:abyvaxfurer";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:12:"8:epabgrsebz";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:21:"8:gbbygvc-g-rznvyhfre";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:9:"8:cebgrpg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:26:"8:rkgreany_vzntr_juvgryvfg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:13:"8:cersvkvaqrk";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:12:"8:fgngvfgvpf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:14:"8:arkgerivfvba";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:26:"8:jungyvaxfurer-uvqrvzntrf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:12:"8:qvss-zhygv";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:21:"8:pheeragerivfvbayvax";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:14:"8:oybpxybtcntr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:hcybnqrqvzntr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:hcybnqybtcntr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:18:"8:cebgrpgrqnegvpyr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:pngrtbel-rzcgl";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:10:"8:apunatrf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:13:"8:cerivrjabgr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:20:"8:jngpuyvfggbbyf-enj";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:17:"8:cngeby-ybt-yvar";a:4:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;}s:21:"8:jngpuyvfggbbyf-ivrj";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:12:"8:jyfubjynfg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:17:"8:cngeby-ybt-qvss";a:4:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;}s:19:"8:jngpuyvfg-bcgvbaf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:jngpuyvfgsbe2";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:21:"8:jngpuyvfggbbyf-rqvg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:19:"8:jngpuyvfg-qrgnvyf";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:jngpuyvfgnyy2";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:19:"8:erpragpunatrfgrkg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:8:"8:epabgr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:29:"8:frnepu-erfhyg-pngrtbel-fvmr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:erivfvba-vasb";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:25:"8:yvfgtebhcevtugf-zrzoref";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:15:"8:frnepueryngrq";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:10:"8:arkgqvss";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:17:"8:svyruvfg-erireg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:11:"8:lbherznvy";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:21:"8:hfreybtva-erfrgyvax";a:4:{i:0;R:37;i:1;R:38;i:2;R:40;i:3;R:41;}s:12:"8:tbgnppbhag";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:19:"8:lbhecnffjbeqntnva";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:epfubjuvqrcnge";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:23:"8:qhcyvpngr-qrsnhygfbeg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:tbgnppbhagyvax";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:22:"8:irpgbe-npgvba-qryrgr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:29:"8:uvfgbel-srrq-vgrz-abpbzzrag";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:11:"8:rznvyhfre";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:26:"8:oybpx-ybt-syntf-abperngr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:18:"8:cersf-uryc-rznvy";a:4:{i:0;R:37;i:1;R:38;i:2;R:40;i:3;R:41;}s:25:"8:cersf-uryc-rznvy-bguref";a:4:{i:0;R:37;i:1;R:38;i:2;R:40;i:3;R:41;}s:14:"8:lbheernyanzr";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:7:"8:nobhg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:34:"8:crezvffvbafreebefgrkg-jvgunpgvba";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:13:"8:vcoybpxyvfg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:23:"8:irpgbe-npgvba-cebgrpg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:17:"8:1zbirqgb2_erqve";a:4:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;}s:13:"8:npgvba-rqvg";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:16:"8:yvprafr-urnqre";a:5:{i:0;R:37;i:1;R:38;i:2;R:39;i:3;R:40;i:4;R:41;}s:9:"8:fvqrone";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:gbt-haqreyvar";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:gbt-whfgvsl";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:gbt-uvqrzvabe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:gbt-uvqrcngebyyrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:gbt-arjcntrfuvqrcngebyyrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:gbt-rkgraqjngpuyvfg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:gbt-hfrarjep";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:gbt-ahzoreurnqvatf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:gbt-fubjgbbyone";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:gbt-rqvgbaqoypyvpx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:gbt-rqvgfrpgvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:gbt-rqvgfrpgvbabaevtugpyvpx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:gbt-fubjgbp";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:gbt-erzrzorecnffjbeq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:gbt-jngpuperngvbaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:gbt-jngpuqrsnhyg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:gbt-jngpuzbirf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:gbt-jngpuqryrgvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:gbt-zvabeqrsnhyg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:gbt-cerivrjbagbc";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:gbt-cerivrjbasvefg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:gbt-abpnpur";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:gbt-rabgvsjngpuyvfgcntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:gbt-rabgvshfregnyxcntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:gbt-rabgvszvaberqvgf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:gbt-rabgvserirnynqqe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:gbt-fubjahzorefjngpuvat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:gbt-byqfvt";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:gbt-snaplfvt";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:33:"8:zj-pber-1.17-gbt-rkgreanyrqvgbe";s:9:"pber-1.17";s:31:"8:zj-pber-1.17-gbt-rkgreanyqvss";R:573;s:19:"8:gbt-fubjwhzcyvaxf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:gbt-hfryvircerivrj";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:gbt-sbeprrqvgfhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:gbt-jngpuyvfguvqrbja";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:gbt-jngpuyvfguvqrobgf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:gbt-jngpuyvfguvqrzvabe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:gbt-jngpuyvfguvqryvh";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:gbt-jngpuyvfguvqrnabaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:gbt-jngpuyvfguvqrcngebyyrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:gbt-abynatpbairefvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:gbt-ppzrbarznvyf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:gbt-qvssbayl";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:gbt-fubjuvqqrapngf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:gbt-abpbairegyvax";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:gbt-abebyyonpxqvss";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:haqreyvar-nyjnlf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:haqreyvar-arire";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:haqreyvar-qrsnhyg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:rqvgsbag-fglyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:rqvgsbag-qrsnhyg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rqvgsbag-zbabfcnpr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rqvgsbag-fnaffrevs";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:rqvgsbag-frevs";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:cntrpngrtbevrfyvax";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:uvqqra-pngrtbel-pngrtbel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:31:"8:pngrtbel-fhopng-pbhag-yvzvgrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:32:"8:pngrtbel-negvpyr-pbhag-yvzvgrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:pngrtbel-svyr-pbhag-yvzvgrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:vaqrk-pngrtbel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:yvaxcersvk";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:znvacntrgrkg";R:573;s:32:"8:zj-pber-1.17-znvacntrqbpsbbgre";R:573;s:9:"8:negvpyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:zberqbgqbgqbg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:8:"8:zlcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:nabagnyx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:5:"8:naq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:8:"8:dosvaq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:dooebjfr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:8:"8:dorqvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:docntrbcgvbaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:docntrvasb";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:dozlbcgvbaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:dofcrpvnycntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:9:"8:sndcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:fvgrgvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:fvgrfhogvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:irpgbe-npgvba-haqryrgr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:irpgbe-npgvba-hacebgrpg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:32:"8:irpgbe-fvzcyrfrnepu-cersrerapr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:4:"8:tb";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:hcqngrqznexre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:vasb_fubeg";R:573;s:7:"8:cevag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:rqvgguvfcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:perngr-guvf-cntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:qryrgrguvfcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:haqryrgr_fubeg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:cebgrpgguvfcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:hacebgrpg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:hacebgrpgguvfcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:gnyxcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:fcrpvnycntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:cbfgpbzzrag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:nqqfrpgvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:negvpyrcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:hfrecntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:cebwrpgcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:vzntrcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:zrqvnjvxvcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:grzcyngrcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:ivrjuryccntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:pngrtbelcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:ivrjgnyxcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:erqverpgcntrfho";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:gnyxcntrurnqre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:ivrjpbhag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:cebgrpgrqcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:ivrj-cbby-reebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:cbby-gvzrbhg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:cbby-dhrhrshyy";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:cbby-reebehaxabja";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:pbclevtug";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:cbyvpl-hey";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:onqnpprff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:onqnpprff-tebhc0";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:onqnpprff-tebhcf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:irefvbaerdhverq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:irefvbaerdhverqgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:4:"8:bx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:cntrgvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:cntrgvgyr-ivrj-znvacntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:lbhunirarjzrffntrfzhygv";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:arjgnyxfrcnengbe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:rqvgfrpgvba-oenpxrgf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:9:"8:fubjgbp";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:9:"8:uvqrgbp";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:guvfvfqryrgrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:ivrjqryrgrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:erfgberyvax";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:srrqyvaxf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:srrq-vainyvq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:srrq-haninvynoyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:fvgr-eff-srrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:cntr-eff-srrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:srrq-ngbz";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:srrq-eff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:fvgrabgvpr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:nabaabgvpr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:30:"8:arjfrpgvbaurnqreqrsnhygyriry";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:afgno-zrqvn";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:afgno-zrqvnjvxv";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:afgno-uryc";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:abfhpunpgvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:abfhpunpgvbagrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:abfhpufcrpvnycntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:abfcrpvnycntrgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:7:"8:reebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:qngnonfrreebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:qoreebegrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:qoreebegrkgpy";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:ynttrqfynirzbqr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:ernqbayl";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:ragreybpxernfba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:ernqbaylgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:zvffvatnegvpyr-qvss";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:ernqbayl_ynt";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:vagreanyreebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:vagreanyreebe_vasb";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:svyrnccraqreebeernq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:svyrnccraqreebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:svyrpbclreebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:svyreranzrreebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:svyrqryrgrreebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:qverpgbelperngrreebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:svyrabgsbhaq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:svyrrkvfgfreebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:harkcrpgrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:sbezreebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:onqnegvpyrreebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:pnaabgqryrgr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:zj-pber-1.17-crespnpurq";R:573;s:27:"8:zj-pber-1.17-crespnpurqgf";R:573;s:22:"8:dhrelcntr-ab-hcqngrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:jebat_jsdhrel_cnenzf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:npgvbaguebggyrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:npgvbaguebggyrqgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:cebgrpgrqcntrgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:ivrjfbheprgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:cebgrpgrqvagresnpr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:31:"8:zj-pber-1.17-rqvgvatvagresnpr";R:573;s:11:"8:fdyuvqqra";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:pnfpnqrcebgrpgrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:anzrfcnprcebgrpgrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:phfgbzpffwfcebgrpgrq";R:573;s:21:"8:af-fcrpvnycebgrpgrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:gvgyrcebgrpgrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:ivehf-onqfpnaare";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:ivehf-fpnasnvyrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:ivehf-haxabjafpnaare";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:ybtbhggrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:jrypbzrperngvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:frpherybtva-fgvpx-uggcf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:lbheqbznvaanzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:rkgreanyqoreebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:hfreybtvaabperngr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:8:"8:ybtbhg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:abgybttrqva";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:perngrnppbhagznvy";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:perngrnppbhagernfba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:onqerglcr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:hfrerkvfgf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:ybtvareebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:perngrnppbhagreebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:abpbbxvrfarj";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:abpbbxvrfybtva";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:8:"8:abanzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:ybtvafhpprffgvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:ybtvafhpprff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:abfhpuhfre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:30:"8:zj-pber-1.17-abfhpuhfrefubeg";R:573;s:17:"8:abhfrefcrpvsvrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:ybtva-hfreoybpxrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:jebatcnffjbeq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:jebatcnffjbeqrzcgl";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:cnffjbeqgbbfubeg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:cnffjbeq-anzr-zngpu";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:cnffjbeq-ybtva-sbeovqqra";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:cnffjbeqerzvaqregvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:cnffjbeqerzvaqregrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:9:"8:abrznvy";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:abrznvyperngr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:cnffjbeqfrag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:oybpxrq-znvycnffjbeq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:rnhguragfrag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:guebggyrq-znvycnffjbeq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:ybtvafgneg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:ybtvaraq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:fvtahcfgneg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:fvtahcraq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:znvyreebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:nppg_perngvba_guebggyr_uvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rznvynhguragvpngrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:rznvyabgnhguragvpngrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:abrznvycersf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:rznvypbasvezyvax";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:vainyvqrznvynqqerff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:nppbhagperngrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:nppbhagperngrqgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:perngrnppbhag-gvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:perngrnppbhag-grkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:hfreanzrunfureebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:ybtva-guebggyrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:ybtvaynathntryvaxf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:fhfcvpvbhf-hfreybtbhg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:crne-znvy-reebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:cuc-znvy-reebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:cuc-znvy-reebe-haxabja";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:erfrgcnff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:erfrgcnff_naabhapr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:erfrgcnff_grkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:erfrgcnff_urnqre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:byqcnffjbeq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:arjcnffjbeq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:erglcrarj";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:erfrgcnff_fhozvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:erfrgcnff_fhpprff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:erfrgcnff_sbeovqqra";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:erfrgcnff-ab-vasb";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:erfrgcnff-fhozvg-ybttrqva";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:erfrgcnff-fhozvg-pnapry";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:erfrgcnff-jebat-byqcnff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:erfrgcnff-grzc-cnffjbeq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:zngu_fnzcyr";a:3:{i:0;s:8:"ext-math";i:1;R:39;i:2;s:9:"ext-0-all";}s:10:"8:zngu_gvc";a:3:{i:0;R:800;i:1;R:39;i:2;R:801;}s:14:"8:vzntr_fnzcyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:zrqvn_fnzcyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:9:"8:fhowrpg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:fubjyvircerivrj";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:nabacerivrjjneavat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:zvffvatfhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:zvffvatpbzzraggrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:zvffvatpbzzragurnqre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:fhzznel-cerivrj";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:fhowrpg-cerivrj";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:oybpxrqgvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:oybpxrqgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:nhgboybpxrqgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:oybpxrqabernfba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:juvgryvfgrqvggrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:pbasvezrqvggrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:abfhpufrpgvbagvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:abfhpufrpgvbagrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:ybtvaerdgvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:ybtvaerdyvax";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:ybtvaerdcntrgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:nppznvygvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:nppznvygrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:arjnegvpyrgrkgnaba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:gnyxcntrgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:nabagnyxcntrgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:abnegvpyrgrkgnaba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:40:"8:zj-pber-1.17-hfrecntr-hfreqbrfabgrkvfg";R:573;s:32:"8:hfrecntr-hfreqbrfabgrkvfg-ivrj";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:oybpxrq-abgvpr-ybtrkgenpg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:pyrnelbhepnpur";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:hfrepfflbhpnacerivrj";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:hfrewflbhpnacerivrj";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:hfrepffcerivrj";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:hfrewfcerivrj";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:fvgrpffcerivrj";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:fvgrwfcerivrj";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:hfrevainyvqpffwfgvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:9:"8:hcqngrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:6:"8:abgr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:cerivrjpbasyvpg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:frffvba_snvy_cerivrj";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:frffvba_snvy_cerivrj_ugzy";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:gbxra_fhssvk_zvfzngpu";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:rqvgvatpbzzrag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:rqvgpbasyvpg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:rkcynvapbasyvpg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:lbhegrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:fgberqirefvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:abahavpbqroebjfre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:rqvgvatbyq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:lbheqvss";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:pbclevtugjneavat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:pbclevtugjneavat2";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:rqvgcntr-gbf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:ybatcntr-uvag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:zj-pber-1.17-ybatcntrreebe";R:573;s:17:"8:ernqbayljneavat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:cebgrpgrqcntrjneavat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:frzvcebgrpgrqcntrjneavat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:pnfpnqrcebgrpgrqjneavat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:gvgyrcebgrpgrqjneavat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:grzcyngrfhfrqcerivrj";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:grzcyngrfhfrqfrpgvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:rqvggbbyf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:abperngrgvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:abperngrgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:abperngr-ybttrqva";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:31:"8:frpgvbarqvgabgfhccbegrq-gvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:30:"8:frpgvbarqvgabgfhccbegrq-grkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:crezvffvbafreebef";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:crezvffvbafreebefgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:ybt-shyyybt";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:rqvg-ubbx-nobegrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:rqvg-tbar-zvffvat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:rqvg-pbasyvpg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:rqvg-ab-punatr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rqvg-nyernql-rkvfgf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:nqqfrpgvba-cerybnq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:nqqfrpgvba-rqvgvageb";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:34:"8:rkcrafvir-cnefreshapgvba-jneavat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:35:"8:rkcrafvir-cnefreshapgvba-pngrtbel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:30:"8:cnefre-grzcyngr-ybbc-jneavat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:41:"8:cnefre-grzcyngr-erphefvba-qrcgu-jneavat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:34:"8:ynathntr-pbairegre-qrcgu-jneavat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:haqb-fhpprff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:haqb-snvyher";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:haqb-aberi";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:haqb-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:pnagperngrnppbhaggvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:pnagperngrnppbhag-grkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:abuvfgbel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:pheerageri";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:erivfvba-vasb-pheerag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:erivfvba-ani";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:6:"8:arkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:cntr_svefg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:cntr_ynfg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:uvfgbel_pbclevtug";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:uvfgbelfvmr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:uvfgbelrzcgl";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:uvfgbel-srrq-gvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:uvfgbel-srrq-qrfpevcgvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:uvfgbel-srrq-rzcgl";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:eri-qryrgrq-pbzzrag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:eri-qryrgrq-hfre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:eri-qryrgrq-rirag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:eri-qryrgrq-hfre-pbagevof";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:eri-qryrgrq-grkg-crezvffvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:eri-qryrgrq-grkg-hauvqr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:eri-fhccerffrq-grkg-hauvqr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:eri-qryrgrq-grkg-ivrj";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:eri-fhccerffrq-grkg-ivrj";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:eri-qryrgrq-ab-qvss";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:eri-fhccerffrq-ab-qvss";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:eri-qryrgrq-hauvqr-qvss";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:eri-fhccerffrq-hauvqr-qvss";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:eri-qryrgrq-qvss-ivrj";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:eri-fhccerffrq-qvss-ivrj";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:eri-fubjqryrgrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:erivfvbaqryrgr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:eriqryrgr-abbyqvq-gvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:eriqryrgr-abbyqvq-grkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:eriqryrgr-abybtglcr-gvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:eriqryrgr-abybtglcr-grkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:eriqryrgr-abybtvq-gvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:eriqryrgr-abybtvq-grkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:eriqryrgr-ab-svyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:eriqryrgr-fubj-svyr-pbasvez";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:eriqryrgr-fubj-svyr-fhozvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:eriqryrgr-fryrpgrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:ybtqryrgr-fryrpgrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:eriqryrgr-grkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:eriqryrgr-pbasvez";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:eriqryrgr-fhccerff-grkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:eriqryrgr-yrtraq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:eriqryrgr-uvqr-grkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:eriqryrgr-uvqr-vzntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:eriqryrgr-uvqr-anzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:eriqryrgr-uvqr-pbzzrag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:eriqryrgr-uvqr-hfre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:eriqryrgr-uvqr-erfgevpgrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:eriqryrgr-enqvb-fnzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:eriqryrgr-enqvb-frg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:eriqryrgr-enqvb-hafrg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:eriqryrgr-fhccerff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:eriqryrgr-hafhccerff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:eriqryrgr-ybt";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:eriqryrgr-fhozvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:ybtqryrgr-ybtragel";a:3:{i:0;R:37;i:1;R:39;i:2;R:40;}s:19:"8:eriqryrgr-fhpprff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:eriqryrgr-snvyher";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:ybtqryrgr-fhpprff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:ybtqryrgr-snvyher";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:cntruvfg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:qryrgrquvfg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:eriqryrgr-fhzznel";a:3:{i:0;R:37;i:1;R:39;i:2;R:40;}s:17:"8:eriqryrgr-hanzr";a:3:{i:0;R:37;i:1;R:39;i:2;R:40;}s:22:"8:eriqryrgr-erfgevpgrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:eriqryrgr-haerfgevpgrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:eriqryrgr-hauvq";a:3:{i:0;R:37;i:1;R:39;i:2;R:40;}s:23:"8:ybtqryrgr-ybt-zrffntr";a:3:{i:0;R:37;i:1;R:39;i:2;R:40;}s:24:"8:eriqryrgr-uvqr-pheerag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:eriqryrgr-fubj-ab-npprff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:eriqryrgr-zbqvsl-ab-npprff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:eriqryrgr-zbqvsl-zvffvat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:eriqryrgr-ab-punatr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:eriqryrgr-pbapheerag-punatr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:eriqryrgr-bayl-erfgevpgrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:eriqryrgr-ernfba-qebcqbja";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:eriqryrgr-bgureernfba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:eriqryrgr-ernfbabgureyvfg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:eriqryrgr-rqvg-ernfbayvfg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:eriqryrgr-bssraqre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:fhccerffvbaybt";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:fhccerffvbaybtgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:zretruvfgbel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:zretruvfgbel-urnqre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:zretruvfgbel-obk";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:zretruvfgbel-sebz";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:zretruvfgbel-vagb";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:zretruvfgbel-yvfg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:zretruvfgbel-zretr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:zretruvfgbel-tb";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:zretruvfgbel-fhozvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:zretruvfgbel-rzcgl";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:zretruvfgbel-fhpprff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:zretruvfgbel-snvy";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:zretruvfgbel-ab-fbhepr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:zretruvfgbel-ab-qrfgvangvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:zretruvfgbel-vainyvq-fbhepr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:34:"8:zretruvfgbel-vainyvq-qrfgvangvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:zretruvfgbel-nhgbpbzzrag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:zretruvfgbel-pbzzrag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:31:"8:zretruvfgbel-fnzr-qrfgvangvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:zretruvfgbel-ernfba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:zretrybt";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:cntrzretr-ybtragel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:zretrybtcntrgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:qvssrerapr-zhygvcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:fubjuvqrfryrpgrqirefvbaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:qvss-zhygv-znalhfref";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:frnepu-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:frnepuerfhyggrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:frnepufhogvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:frnepufhogvgyrvainyvq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:gbbznalzngpurf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:gvgyrzngpurf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:abgvgyrzngpurf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:grkgzngpurf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:abgrkgzngpurf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:frnepuzrah-yrtraq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:frnepuuryc-hey";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:frnepuzrah-cersvk";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:frnepuzrah-uryc";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:frnepu-erfhyg-fpber";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:frnepu-vagrejvxv-pncgvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:frnepu-vagrejvxv-qrsnhyg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:frnepu-vagrejvxv-phfgbz";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:frnepu-vagrejvxv-zber";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:frnepu-zjfhttrfg-ranoyrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:frnepu-zjfhttrfg-qvfnoyrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:frnepu-eryngrqnegvpyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:zjfhttrfg-qvfnoyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:frnepurirelguvat-ranoyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:fubjvaterfhygf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:fubjvaterfhygfahz";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:abarsbhaq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:cbjrefrnepu";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:cbjrefrnepu-yrtraq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:cbjrefrnepu-af";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:cbjrefrnepu-erqve";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:cbjrefrnepu-svryq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:cbjrefrnepu-gbttyrynory";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:cbjrefrnepu-gbttyrnyy";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:cbjrefrnepu-gbttyrabar";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:frnepu-rkgreany";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:frnepuqvfnoyrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:zj-pber-1.17-tbbtyrfrnepu";R:573;s:17:"8:bcrafrnepu-qrfp";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:dofrggvatf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:dofrggvatf-abar";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:dofrggvatf-svkrqyrsg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:dofrggvatf-svkrqevtug";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:dofrggvatf-sybngvatyrsg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:dofrggvatf-sybngvatevtug";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:cersreraprf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:cersreraprf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:cersf-rqvgf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:cersfabybtva";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:cersfabybtvagrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:punatrcnffjbeq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:cersf-fxva";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:fxva-cerivrj";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:cersf-zngu";a:3:{i:0;R:800;i:1;R:39;i:2;R:801;}s:13:"8:qngrqrsnhyg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:cersf-qngrgvzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:cersf-crefbany";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:cersf-ep";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:cersf-jngpuyvfg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:cersf-jngpuyvfg-qnlf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:39:"8:zj-pber-1.17-cersf-jngpuyvfg-qnlf-znk";R:573;s:23:"8:cersf-jngpuyvfg-rqvgf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:cersf-jngpuyvfg-rqvgf-znk";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:cersf-jngpuyvfg-gbxra";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:cersf-zvfp";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:cersf-erfrgcnff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:cersf-rznvy";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:cersf-eraqrevat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:fnircersf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:erfrgcersf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:erfgbercersf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:cersf-rqvgvat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:cersf-rqvg-obkfvmr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:6:"8:ebjf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:9:"8:pbyhzaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:frnepuerfhygfurnq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:erfhygfcrecntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:pbagrkgyvarf";R:573;s:14:"8:pbagrkgpunef";R:573;s:16:"8:fgho-guerfubyq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:fgho-guerfubyq-qvfnoyrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:erpragpunatrfqnlf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:erpragpunatrfqnlf-znk";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:erpragpunatrfpbhag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:31:"8:cersf-uryc-erpragpunatrfpbhag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:cersf-uryc-jngpuyvfg-gbxra";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:fnirqcersf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:gvzrmbaryrtraq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:ybpnygvzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:39:"8:zj-pber-1.17-gvzrmbarhfrfreireqrsnhyg";R:573;s:19:"8:gvzrmbarhfrbssfrg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:gvzrmbarbssfrg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:freiregvzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:thrffgvzrmbar";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:gvzrmbarertvba-nsevpn";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:gvzrmbarertvba-nzrevpn";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:gvzrmbarertvba-nagnepgvpn";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:gvzrmbarertvba-nepgvp";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:gvzrmbarertvba-nfvn";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:gvzrmbarertvba-ngynagvp";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:gvzrmbarertvba-nhfgenyvn";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:gvzrmbarertvba-rhebcr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:gvzrmbarertvba-vaqvna";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:gvzrmbarertvba-cnpvsvp";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:nyybjrznvy";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:cersf-frnepubcgvbaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:cersf-anzrfcnprf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:qrsnhygaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:9:"8:qrsnhyg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:cersf-svyrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:cersf-phfgbz-pff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:cersf-phfgbz-wf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:cersf-pbzzba-pff-wf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:cersf-erfrg-vageb";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:cersf-rznvypbasvez-ynory";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:cersf-grkgobkfvmr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:hfreanzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:5:"8:hvq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:cersf-zrzorevatebhcf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:cersf-zrzorevatebhcf-glcr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:cersf-ertvfgengvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:30:"8:cersf-ertvfgengvba-qngr-gvzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:lbheynathntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:lbheinevnag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:lbheavpx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:cersf-uryc-fvtangher";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:8:"8:onqfvt";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:onqfvtyratgu";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:lbhetraqre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:traqre-haxabja";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:traqre-znyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:traqre-srznyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:cersf-uryc-traqre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:7:"8:rznvy";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:cersf-uryc-ernyanzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:31:"8:zj-pber-1.17-cersf-uryc-rznvy";R:573;s:27:"8:cersf-uryc-rznvy-erdhverq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:cersf-vasb";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:cersf-v18a";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:cersf-fvtangher";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:cersf-qngrsbezng";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:cersf-gvzrbssfrg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:cersf-nqinaprqrqvgvat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:cersf-nqinaprqep";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:cersf-nqinaprqeraqrevat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:cersf-nqinaprqfrnepubcgvbaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:cersf-nqinaprqjngpuyvfg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:cersf-qvfcynlep";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:cersf-qvfcynlfrnepubcgvbaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:cersf-qvfcynljngpuyvfg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:cersf-qvssf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:30:"8:rznvy-nqqerff-inyvqvgl-inyvq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:32:"8:rznvy-nqqerff-inyvqvgl-vainyvq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:hfreevtugf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:hfreevtugf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:hfreevtugf-ybbxhc-hfre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:hfreevtugf-hfre-rqvganzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:rqvghfretebhc";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:zj-pber-1.17-rqvgvathfre";R:573;s:26:"8:hfreevtugf-rqvghfretebhc";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:fnirhfretebhcf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:hfreevtugf-tebhcfzrzore";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:30:"8:hfreevtugf-tebhcfzrzore-nhgb";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:hfreevtugf-tebhcf-uryc";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:hfreevtugf-ernfba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:hfreevtugf-ab-vagrejvxv";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:hfreevtugf-abqngnonfr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:hfreevtugf-abybtva";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:hfreevtugf-abgnyybjrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:hfreevtugf-punatrnoyr-pby";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:hfreevtugf-hapunatrnoyr-pby";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:32:"8:hfreevtugf-veerirefvoyr-znexre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:7:"8:tebhc";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:tebhc-hfre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:tebhc-nhgbpbasvezrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:tebhc-obg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:tebhc-flfbc";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:tebhc-ohernhpeng";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:tebhc-fhccerff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:tebhc-nyy";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:32:"8:zj-pber-1.17-tebhc-hfre-zrzore";R:573;s:41:"8:zj-pber-1.17-tebhc-nhgbpbasvezrq-zrzore";R:573;s:31:"8:zj-pber-1.17-tebhc-obg-zrzore";R:573;s:33:"8:zj-pber-1.17-tebhc-flfbc-zrzore";R:573;s:38:"8:zj-pber-1.17-tebhc-ohernhpeng-zrzore";R:573;s:36:"8:zj-pber-1.17-tebhc-fhccerff-zrzore";R:573;s:16:"8:tebhccntr-hfre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:tebhccntr-nhgbpbasvezrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:tebhccntr-obg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:tebhccntr-flfbc";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:tebhccntr-ohernhpeng";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:tebhccntr-fhccerff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:evtug-ernq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:evtug-rqvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:evtug-perngrcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:evtug-perngrgnyx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:evtug-perngrnppbhag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:evtug-zvaberqvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:evtug-zbir";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:evtug-zbir-fhocntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:evtug-zbir-ebbghfrecntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:evtug-zbirsvyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:evtug-fhccerfferqverpg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:evtug-hcybnq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:evtug-erhcybnq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:evtug-erhcybnq-bja";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:evtug-erhcybnq-funerq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:evtug-hcybnq_ol_hey";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:evtug-chetr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:evtug-nhgbpbasvezrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:evtug-obg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:evtug-abzvabearjgnyx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:evtug-ncvuvtuyvzvgf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:evtug-jevgrncv";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:evtug-qryrgr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:evtug-ovtqryrgr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:evtug-qryrgrerivfvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:evtug-qryrgrquvfgbel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:evtug-qryrgrqgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:evtug-oebjfrnepuvir";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:evtug-haqryrgr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:evtug-fhccerfferivfvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:evtug-fhccerffvbaybt";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:evtug-oybpx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:evtug-oybpxrznvy";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:evtug-uvqrhfre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:evtug-vcoybpx-rkrzcg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:evtug-cebklhaonaanoyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:evtug-haoybpxfrys";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:evtug-cebgrpg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:evtug-rqvgcebgrpgrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:evtug-rqvgvagresnpr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:evtug-rqvghfrepffwf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:evtug-rqvghfrepff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:evtug-rqvghfrewf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:evtug-ebyyonpx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:evtug-znexobgrqvgf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:evtug-abengryvzvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:evtug-vzcbeg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:evtug-vzcbeghcybnq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:evtug-cngeby";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:evtug-nhgbcngeby";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:evtug-cngebyznexf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:evtug-hajngpurqcntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:evtug-zretruvfgbel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:evtug-hfreevtugf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:evtug-hfreevtugf-vagrejvxv";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:evtug-fvgrnqzva";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:evtug-erfrg-cnffjbeqf";R:573;s:29:"8:evtug-bireevqr-rkcbeg-qrcgu";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:evtug-fraqrznvy";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:evtugfybt";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:evtugfybtgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:evtugfybtragel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:evtugfabar";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:npgvba-ernq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:npgvba-perngrcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:npgvba-perngrgnyx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:npgvba-perngrnppbhag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:npgvba-zvaberqvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:npgvba-zbir";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:npgvba-zbir-fhocntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:npgvba-zbir-ebbghfrecntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:npgvba-zbirsvyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:npgvba-hcybnq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:npgvba-erhcybnq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:npgvba-erhcybnq-funerq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:npgvba-hcybnq_ol_hey";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:npgvba-jevgrncv";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:npgvba-qryrgr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:npgvba-qryrgrerivfvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:npgvba-qryrgrquvfgbel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:npgvba-oebjfrnepuvir";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:npgvba-haqryrgr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:npgvba-fhccerfferivfvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:npgvba-fhccerffvbaybt";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:npgvba-oybpx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:npgvba-cebgrpg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:npgvba-vzcbeg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:npgvba-vzcbeghcybnq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:npgvba-cngeby";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:npgvba-nhgbcngeby";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:npgvba-hajngpurqcntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:npgvba-zretruvfgbel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:npgvba-hfreevtugf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:npgvba-hfreevtugf-vagrejvxv";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:npgvba-fvgrnqzva";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:erpragpunatrf-hey";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:hacngebyyrqyrggre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:33:"8:ahzore_bs_jngpuvat_hfref_epivrj";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:35:"8:ahzore_bs_jngpuvat_hfref_cntrivrj";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:ep_pngrtbevrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:ep_pngrtbevrf_nal";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:ep-punatr-fvmr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:arjfrpgvbafhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:erpragpunatrfyvaxrq-srrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:hcybnqoga";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:erhcybnqqrfp";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:hcybnq-gelntnva";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:hcybnqabybtva";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:hcybnqabybtvagrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:hcybnq_qverpgbel_zvffvat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:hcybnq_qverpgbel_ernq_bayl";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:hcybnqreebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:hcybnq-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:hcybnq-erperngr-jneavat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:hcybnqgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:hcybnq-crezvggrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:hcybnq-cersreerq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:hcybnq-cebuvovgrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:hcybnqsbbgre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:hcybnqybt";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:hcybnqybtcntrgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:svyranzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:svyrhcybnqfhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:svyrerhcybnqfhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:svyrfgnghf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:svyrfbhepr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:hcybnqrqsvyrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:vtaberjneavat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:vtaberjneavatf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:zvayratgu1";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:vyyrtnysvyranzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:onqsvyranzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:37:"8:zj-pber-1.17-svyrglcr-zvzr-zvfzngpu";R:573;s:18:"8:svyrglcr-onqzvzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:svyrglcr-onq-vr-zvzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:svyrglcr-hajnagrq-glcr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:35:"8:zj-pber-1.17-svyrglcr-onaarq-glcr";R:573;s:18:"8:svyrglcr-zvffvat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:rzcgl-svyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:svyr-gbb-ynetr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:svyranzr-gbbfubeg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:svyrglcr-onaarq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:irevsvpngvba-reebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:ubbxnobegrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:vyyrtny-svyranzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:birejevgr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:haxabja-reebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:gzc-perngr-reebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:gzc-jevgr-reebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:ynetr-svyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:ynetrsvyrfreire";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:rzcglsvyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:svyrrkvfgf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:svyrcntrrkvfgf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:svyrrkvfgf-rkgrafvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:svyrrkvfgf-guhzoanvy-lrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:svyr-guhzoanvy-ab";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:svyrrkvfgf-sbeovqqra";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:svyrrkvfgf-funerq-sbeovqqra";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:svyr-rkvfgf-qhcyvpngr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:svyr-qryrgrq-qhcyvpngr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:hcybnqjneavat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:hcybnqjneavat-grkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:fnirsvyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:birejebgrvzntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:hcybnqqvfnoyrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:pbclhcybnqqvfnoyrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:hcybnqsebzhey-dhrhrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:hcybnqqvfnoyrqgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:cuc-hcybnqqvfnoyrqgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:hcybnqfpevcgrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:hcybnqivehf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:hcybnq-fbhepr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:fbheprsvyranzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:fbheprhey";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:qrfgsvyranzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:hcybnq-znksvyrfvmr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:hcybnq-qrfpevcgvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:hcybnq-bcgvbaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:jngpuguvfhcybnq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:svyrjnfqryrgrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:hcybnq-jnfqryrgrq";R:573;s:21:"8:svyranzr-onq-cersvk";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:svyranzr-cersvk-oynpxyvfg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:hcybnq-fhpprff-fhow";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:hcybnq-fhpprff-zft";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:hcybnq-snvyher-fhow";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:hcybnq-snvyher-zft";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:hcybnq-jneavat-fhow";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:hcybnq-jneavat-zft";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:hcybnq-cebgb-reebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:hcybnq-cebgb-reebe-grkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:hcybnq-svyr-reebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:hcybnq-svyr-reebe-grkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:hcybnq-zvfp-reebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:hcybnq-zvfp-reebe-grkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:hcybnq-gbb-znal-erqverpgf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:hcybnq-haxabja-fvmr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:hcybnq-uggc-reebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:vzt-nhgu-npprffqravrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:34:"8:zj-pber-1.17-vzt-nhgu-abcnguvasb";R:573;s:19:"8:vzt-nhgu-abgvaqve";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:vzt-nhgu-onqgvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:vzt-nhgu-abybtvaajy";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:vzt-nhgu-absvyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:vzt-nhgu-vfqve";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:vzt-nhgu-fgernzvat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:vzt-nhgu-choyvp";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:vzt-nhgu-abernq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:vzt-nhgu-onq-dhrel-fgevat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:uggc-vainyvq-hey";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:uggc-vainyvq-fpurzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:uggc-erdhrfg-reebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:uggc-ernq-reebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:uggc-gvzrq-bhg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:uggc-phey-reebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:uggc-ubfg-haernpunoyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:uggc-onq-fgnghf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:hcybnq-phey-reebe6";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:hcybnq-phey-reebe6-grkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:hcybnq-phey-reebe28";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:hcybnq-phey-reebe28-grkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:abyvprafr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:yvprafrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:yvprafr-abcerivrj";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:hcybnq_fbhepr_hey";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:hcybnq_fbhepr_svyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:yvfgsvyrf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:yvfgsvyrf_frnepu_sbe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:9:"8:vztsvyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:yvfgsvyrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:yvfgsvyrf_guhzo";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:yvfgsvyrf_qngr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:yvfgsvyrf_anzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:yvfgsvyrf_hfre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:yvfgsvyrf_fvmr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:yvfgsvyrf_qrfpevcgvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:yvfgsvyrf_pbhag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:svyruvfg-qryrgrnyy";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:svyruvfg-qryrgrbar";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:svyruvfg-abguhzo";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:svyruvfg-svyrfvmr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:svyruvfg-zvffvat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:yvaxfgbvzntr-zber";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:zberyvaxfgbvzntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:erqverpgfgbsvyr";R:573;s:18:"8:qhcyvpngrfbssvyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:funerqhcybnq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:funerqhcybnq-qrfp-gurer";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:funerqqrfpevcgvbasbyybjf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:svyrcntr-absvyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:svyrcntr-absvyr-yvax";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:hcybnqarjirefvba-yvaxgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:funerq-ercb-sebz";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:funerq-ercb";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:35:"8:funerq-ercb-anzr-jvxvzrqvnpbzzbaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:svyrcntr.pff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:svyrerireg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:svyrerireg-yrtraq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:svyrerireg-vageb";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:svyrerireg-pbzzrag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:svyrerireg-qrsnhygpbzzrag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:svyrerireg-fhozvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:svyrerireg-fhpprff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:svyrerireg-onqirefvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:svyrqryrgr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:svyrqryrgr-yrtraq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:svyrqryrgr-vageb";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:svyrqryrgr-vageb-byq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:svyrqryrgr-pbzzrag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:svyrqryrgr-fhozvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:svyrqryrgr-fhpprff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:svyrqryrgr-fhpprff-byq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:svyrqryrgr-absvyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:svyrqryrgr-absvyr-byq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:svyrqryrgr-bgureernfba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:svyrqryrgr-ernfba-bgureyvfg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:svyrqryrgr-ernfba-qebcqbja";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:svyrqryrgr-rqvg-ernfbayvfg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:svyrqryrgr-znvagranapr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:zvzrfrnepu";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:zvzrfrnepu-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:zvzrglcr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:qbjaybnq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:hajngpurqcntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:hajngpurqcntrf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:yvfgerqverpgf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:yvfgerqverpgf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:hahfrqgrzcyngrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:hahfrqgrzcyngrf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:hahfrqgrzcyngrfgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:hahfrqgrzcyngrfjyu";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:enaqbzcntr-abcntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:enaqbzcntr-hey";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:enaqbzerqverpg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:enaqbzerqverpg-abcntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:fgngvfgvpf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:fgngvfgvpf-urnqre-cntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:fgngvfgvpf-urnqre-rqvgf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:fgngvfgvpf-urnqre-ivrjf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:fgngvfgvpf-urnqre-hfref";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:fgngvfgvpf-urnqre-ubbxf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:fgngvfgvpf-negvpyrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:fgngvfgvpf-cntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:fgngvfgvpf-cntrf-qrfp";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:fgngvfgvpf-svyrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:fgngvfgvpf-rqvgf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:fgngvfgvpf-rqvgf-nirentr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:fgngvfgvpf-ivrjf-gbgny";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:fgngvfgvpf-ivrjf-gbgny-qrfp";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:fgngvfgvpf-ivrjf-crerqvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:fgngvfgvpf-hfref";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:fgngvfgvpf-hfref-npgvir";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:30:"8:fgngvfgvpf-hfref-npgvir-qrfp";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:fgngvfgvpf-zbfgcbchyne";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:fgngvfgvpf-sbbgre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:qvfnzovthngvbaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:qvfnzovthngvbaf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:qvfnzovthngvbaf-grkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:qbhoyrerqverpgf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:qbhoyrerqverpgf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:qbhoyrerqverpgfgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:qbhoyr-erqverpg-svkrq-zbir";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:qbhoyr-erqverpg-svkre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:oebxraerqverpgf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:oebxraerqverpgf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:oebxraerqverpgfgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:oebxraerqverpgf-rqvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:oebxraerqverpgf-qryrgr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:jvgubhgvagrejvxv";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:jvgubhgvagrejvxv-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:jvgubhgvagrejvxv-yrtraq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:jvgubhgvagrejvxv-fhozvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:srjrfgerivfvbaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:srjrfgerivfvbaf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:apngrtbevrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:8:"8:ayvaxf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:aerivfvbaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:8:"8:aivrjf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:avzntryvaxf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:agenafpyhfvbaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:fcrpvnycntr-rzcgl";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:ybarylcntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:ybarylcntrf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:ybarylcntrfgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:hapngrtbevmrqcntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:hapngrtbevmrqcntrf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:hapngrtbevmrqpngrtbevrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:33:"8:hapngrtbevmrqpngrtbevrf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:hapngrtbevmrqvzntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:hapngrtbevmrqvzntrf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:hapngrtbevmrqgrzcyngrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:32:"8:hapngrtbevmrqgrzcyngrf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:hahfrqpngrtbevrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:hahfrqvzntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:cbchynecntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:cbchynecntrf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:jnagrqpngrtbevrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:jnagrqpngrtbevrf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:jnagrqcntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:jnagrqcntrf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:jnagrqcntrf-onqgvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:jnagrqsvyrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:jnagrqsvyrf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:jnagrqgrzcyngrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:jnagrqgrzcyngrf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:zbfgyvaxrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:zbfgyvaxrq-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:zbfgyvaxrqpngrtbevrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:30:"8:zbfgyvaxrqpngrtbevrf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:zbfgyvaxrqgrzcyngrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:zbfgyvaxrqgrzcyngrf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:zbfgpngrtbevrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:zbfgpngrtbevrf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:zbfgvzntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:zbfgvzntrf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:zbfgerivfvbaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:zbfgerivfvbaf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:cersvkvaqrk-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:fubegcntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:fubegcntrf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:ybatcntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:ybatcntrf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:qrnqraqcntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:qrnqraqcntrf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:qrnqraqcntrfgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:cebgrpgrqcntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:cebgrpgrqcntrf-vaqrs";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:cebgrpgrqcntrf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:cebgrpgrqcntrf-pnfpnqr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:cebgrpgrqcntrfgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:cebgrpgrqcntrfrzcgl";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:cebgrpgrqgvgyrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:cebgrpgrqgvgyrf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:cebgrpgrqgvgyrfgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:cebgrpgrqgvgyrfrzcgl";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:yvfghfref";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:yvfghfref-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:yvfghfref-rqvgfbayl";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:yvfghfref-perngvbafbeg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:hfrerqvgpbhag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:zj-pber-1.17-hfreperngrq";R:573;s:18:"8:arjcntrf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:arjcntrf-hfreanzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:napvragcntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:napvragcntrf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:zbirguvfcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:hahfrqvzntrfgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:hahfrqpngrtbevrfgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:abgnetrggvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:abgnetrggrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:abcntrgvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:abcntrgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:fhccerff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:obbxfbheprf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:obbxfbheprf-vfoa";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:obbxfbheprf-grkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:obbxfbheprf-vainyvq-vfoa";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:zj-pber-1.17-esphey";R:573;s:24:"8:zj-pber-1.17-chozrqhey";R:573;s:21:"8:fcrpvnyybthfreynory";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:fcrpvnyybtgvgyrynory";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:nyy-ybtf-cntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:nyyybtfgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:ybtrzcgl";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:ybt-gvgyr-jvyqpneq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:nyycntrf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:arkgcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:cericntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:nyycntrfsebz";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:nyycntrfgb";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:nyyvaanzrfcnpr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:nyyabgvaanzrfcnpr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:nyycntrfceri";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:nyycntrfarkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:nyycntrfcersvk";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:nyycntrfonqgvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:nyycntrf-onq-af";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:pngrtbevrf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:pngrtbevrfcntrgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:pngrtbevrfsebz";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:31:"8:fcrpvny-pngrtbevrf-fbeg-pbhag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:fcrpvny-pngrtbevrf-fbeg-nop";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:qryrgrqpbagevohgvbaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:qryrgrqpbagevohgvbaf-gvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:34:"8:fc-qryrgrqpbagevohgvbaf-pbagevof";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:yvaxfrnepu";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:yvaxfrnepu-cng";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:yvaxfrnepu-af";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:yvaxfrnepu-bx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:yvaxfrnepu-grkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:yvaxfrnepu-reebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:yvfghfrefsebz";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:yvfghfref-fhozvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:yvfghfref-aberfhyg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:yvfghfref-oybpxrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:npgvirhfref";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:npgvirhfref-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:npgvirhfref-vageb";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:npgvirhfref-pbhag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:npgvirhfref-sebz";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:npgvirhfref-uvqrobgf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:npgvirhfref-uvqrflfbcf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:npgvirhfref-aberfhyg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:arjhfreybtcntrgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:arjhfreybt-olrznvy";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:arjhfreybt-perngr2-ragel";a:3:{i:0;R:37;i:1;R:39;i:2;R:40;}s:29:"8:arjhfreybt-nhgbperngr-ragel";a:3:{i:0;R:37;i:1;R:39;i:2;R:40;}s:17:"8:yvfgtebhcevtugf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:yvfgtebhcevtugf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:yvfgtebhcevtugf-xrl";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:yvfgtebhcevtugf-tebhc";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:yvfgtebhcevtugf-evtugf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:yvfgtebhcevtugf-uryccntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:31:"8:yvfgtebhcevtugf-evtug-qvfcynl";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:31:"8:yvfgtebhcevtugf-evtug-eribxrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:yvfgtebhcevtugf-nqqtebhc";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:yvfgtebhcevtugf-erzbirtebhc";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:30:"8:yvfgtebhcevtugf-nqqtebhc-nyy";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:33:"8:yvfgtebhcevtugf-erzbirtebhc-nyy";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:31:"8:yvfgtebhcevtugf-nqqtebhc-frys";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:34:"8:yvfgtebhcevtugf-erzbirtebhc-frys";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:35:"8:yvfgtebhcevtugf-nqqtebhc-frys-nyy";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:38:"8:yvfgtebhcevtugf-erzbirtebhc-frys-nyy";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:znvyabybtva";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:znvyabybtvagrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:rznvycntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:rznvycntrgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:hfreznvyrereebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:30:"8:zj-pber-1.17-qrsrznvyfhowrpg";R:573;s:18:"8:hfreznvyqvfnoyrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:hfreznvyqvfnoyrqgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:abrznvygvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:abrznvygrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:abjvxvrznvygvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:abjvxvrznvygrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:rznvy-yrtraq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:rznvysebz";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:9:"8:rznvygb";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:rznvyfhowrpg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:rznvyzrffntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:rznvyfraq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:rznvyppzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:rznvyppfhowrpg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:rznvyfrag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:rznvyfraggrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:rznvyhfresbbgre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:hfrezrffntr-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:hfrezrffntr-rqvgbe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:hfrezrffntr-grzcyngr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:abjngpuyvfg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:jngpuyvfgnabagrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:jngpuabybtva";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:jngpuabybtvagrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:nqqrqjngpu";R:573;s:16:"8:nqqrqjngpugrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:erzbirqjngpu";R:573;s:18:"8:erzbirqjngpugrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:jngpuguvfcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:hajngpuguvfcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:abgnanegvpyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:abgivfvoyreri";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:jngpuabpunatr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:jyurnqre-rabgvs";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:jyurnqre-fubjhcqngrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:jngpuzrgubq-erprag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:jngpuzrgubq-yvfg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:jngpuyvfgpbagnvaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:vgrzvainyvqanzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:zj-pber-1.17-jyabgr";R:573;s:10:"8:jngpuvat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:hajngpuvat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:rabgvs_znvyre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:rabgvs_erfrg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rabgvs_arjcntrgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:30:"8:rabgvs_vzcrefbany_fnyhgngvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:9:"8:punatrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:9:"8:perngrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:rabgvs_fhowrpg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rabgvs_ynfgivfvgrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:rabgvs_ynfgqvss";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rabgvs_naba_rqvgbe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:zj-pber-1.17-rabgvs_obql";R:573;s:12:"8:qryrgrcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:9:"8:pbasvez";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:rkpbagrag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:rkpbagragnhgube";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:rkorsberoynax";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:9:"8:rkoynax";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:qryrgr-pbasvez";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:qryrgr-yrtraq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:uvfgbeljneavat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:pbasvezqryrgrgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:zj-pber-1.17-qryrgrqgrkg";R:573;s:19:"8:fhccerffrqnegvpyr";a:3:{i:0;R:37;i:1;R:39;i:2;R:40;}s:16:"8:qryybtcntrgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:qryrgvbaybt";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:eriregrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:qryrgrpbzzrag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:qryrgrbgureernfba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:qryrgrernfbabgureyvfg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:qryrgrernfba-qebcqbja";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:qryrgr-rqvg-ernfbayvfg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:qryrgr-gbbovt";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:qryrgr-jneavat-gbbovt";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:ebyyonpx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:ebyyonpx_fubeg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:ebyyonpxsnvyrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:pnagebyyonpx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:nyernqlebyyrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:rqvgpbzzrag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:eriregcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:eriregcntr-abhfre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:ebyyonpx-fhpprff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:frffvbasnvyher-gvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:frffvbasnvyher";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:cebgrpgybtgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:zbqvsvrqnegvpyrcebgrpgvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:hacebgrpgrqnegvpyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:zbirqnegvpyrcebgrpgvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:cebgrpg-gvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:cebg_1zbirqgb2";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:cebgrpg-yrtraq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:cebgrpgpbzzrag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:cebgrpgrkcvel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:cebgrpg_rkcvel_vainyvq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:cebgrpg_rkcvel_byq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:cebgrpg-hapunva-crezvffvbaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:zj-pber-1.17-cebgrpg-grkg";R:573;s:24:"8:cebgrpg-ybpxrq-oybpxrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:cebgrpg-ybpxrq-qoybpx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:cebgrpg-ybpxrq-npprff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:cebgrpg-pnfpnqrba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:cebgrpg-qrsnhyg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:cebgrpg-snyyonpx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:cebgrpg-yriry-nhgbpbasvezrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:cebgrpg-yriry-flfbc";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:cebgrpg-fhzznel-pnfpnqr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:cebgrpg-rkcvevat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:cebgrpg-rkcvel-vaqrsvavgr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:cebgrpg-pnfpnqr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:cebgrpg-pnagrqvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:cebgrpg-bguregvzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:cebgrpg-bguregvzr-bc";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:cebgrpg-rkvfgvat-rkcvel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:cebgrpg-bgureernfba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:cebgrpg-bgureernfba-bc";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:cebgrpg-qebcqbja";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:cebgrpg-rqvg-ernfbayvfg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:cebgrpg-rkcvel-bcgvbaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:erfgevpgvba-glcr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:erfgevpgvba-yriry";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:zvavzhz-fvmr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:znkvzhz-fvmr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:cntrfvmr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:erfgevpgvba-rqvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:erfgevpgvba-zbir";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:erfgevpgvba-perngr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:erfgevpgvba-hcybnq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:erfgevpgvba-yriry-flfbc";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:33:"8:erfgevpgvba-yriry-nhgbpbasvezrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:erfgevpgvba-yriry-nyy";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:haqryrgr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:haqryrgrcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:haqryrgrcntrgvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:ivrjqryrgrqcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:haqryrgrcntrgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:haqryrgr-svryqfrg-gvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:32:"8:zj-pber-1.17-haqryrgrrkgenuryc";R:573;s:19:"8:haqryrgrerivfvbaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:haqryrgruvfgbel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:haqryrgreriqry";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:haqryrgruvfgbelabnqzva";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:haqryrgr-erivfvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:haqryrgrerivfvba-zvffvat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:haqryrgr-abqvss";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:haqryrgroga";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:haqryrgrerfrg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:haqryrgrvaireg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:haqryrgrpbzzrag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:haqryrgrqnegvpyr";a:3:{i:0;R:37;i:1;R:39;i:2;R:40;}s:20:"8:haqryrgrqerivfvbaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:haqryrgrqerivfvbaf-svyrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:haqryrgrqsvyrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:pnaabghaqryrgr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:haqryrgrqcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:haqryrgr-urnqre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:haqryrgr-frnepu-obk";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:haqryrgr-frnepu-cersvk";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:haqryrgr-frnepu-fhozvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:haqryrgr-ab-erfhygf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:haqryrgr-svyranzr-zvfzngpu";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:haqryrgr-onq-fgber-xrl";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:haqryrgr-pyrnahc-reebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:30:"8:haqryrgr-zvffvat-svyrnepuvir";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:haqryrgr-reebe-fubeg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:haqryrgr-reebe-ybat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:haqryrgr-fubj-svyr-pbasvez";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:haqryrgr-fubj-svyr-fhozvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:abpbagevof";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:30:"8:fc-pbagevohgvbaf-arjovrf-fho";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:32:"8:fc-pbagevohgvbaf-arjovrf-gvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:fc-pbagevohgvbaf-qryrgrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:fc-pbagevohgvbaf-hfreevtugf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:33:"8:fc-pbagevohgvbaf-oybpxrq-abgvpr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:38:"8:fc-pbagevohgvbaf-oybpxrq-abgvpr-naba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:fc-pbagevohgvbaf-rkcynva";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:fc-pbagevohgvbaf-sbbgre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:30:"8:fc-pbagevohgvbaf-sbbgre-naba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:jungyvaxfurer-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:abyvaxfurer-af";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:9:"8:oybpxvc";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:oybpxvc-gvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:oybpxvc-yrtraq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:oybpxvcgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:vcnqqerff";R:573;s:20:"8:vcnqerffbehfreanzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:vcorkcvel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:vcoernfba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:vcoernfbabgureyvfg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:vcoernfba-qebcqbja";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:vconababayl";R:573;s:18:"8:vcoperngrnppbhag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:vcorznvyona";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:vcoranoyrnhgboybpx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:vcofhozvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:vcobgure";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:vcobgurebcgvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:vcobgureernfba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:vcouvqranzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:vcojngpuhfre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:vconyybjhfregnyx";R:573;s:18:"8:vco-punatr-oybpx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:onqvcnqqerff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:oybpxvcfhpprfffho";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:oybpxvcfhpprffgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:vco-rqvg-qebcqbja";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:vco-haoybpx-nqqe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:vco-haoybpx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:vco-oybpxyvfg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:vco-oybpxyvfg-pbagevof";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:haoybpxvc";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:haoybpxvcgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:vchfhozvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:haoybpxrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:haoybpxrq-vq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:vcoybpxyvfg-yrtraq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:vcoybpxyvfg-hfreanzr";R:573;s:27:"8:vcoybpxyvfg-fu-hfreoybpxf";R:573;s:27:"8:vcoybpxyvfg-fu-grzcoybpxf";R:573;s:30:"8:vcoybpxyvfg-fu-nqqerffoybpxf";R:573;s:21:"8:vcoybpxyvfg-fhzznel";R:573;s:20:"8:vcoybpxyvfg-fhozvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:vcoybpxyvfg-ybpnyoybpx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:vcoybpxyvfg-bgureoybpxf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:oybpxyvfgyvar";R:573;s:15:"8:vasvavgroybpx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:rkcvevatoybpx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:nababayloybpx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:abnhgboybpxoybpx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:perngrnppbhagoybpx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:rznvyoybpx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:oybpxyvfg-abhfregnyx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:vcoybpxyvfg-rzcgl";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:vcoybpxyvfg-ab-erfhygf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:nhgboybpxre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:oybpxybt-fubjybt";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:oybpxybt-fubjfhccerffybt";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:eroybpx-ybtragel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:oybpxybtgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:haoybpxybtragel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:oybpx-ybt-syntf-nababayl";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:oybpx-ybt-syntf-abnhgboybpx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:oybpx-ybt-syntf-abrznvy";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:oybpx-ybt-syntf-abhfregnyx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:33:"8:oybpx-ybt-syntf-natel-nhgboybpx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:oybpx-ybt-syntf-uvqqraanzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:enatr_oybpx_qvfnoyrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:vco_rkcvel_vainyvq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:vco_rkcvel_grzc";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:vco_uvqr_vainyvq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:vco_nyernql_oybpxrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:30:"8:zj-pber-1.17-vco-arrqeroybpx";R:573;s:24:"8:vco-bgureoybpxf-urnqre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:vco_pnag_haoybpx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:vco_oybpxrq_nf_enatr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:vc_enatr_vainyvq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:vc_enatr_gbbynetr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:9:"8:oybpxzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:cebkloybpxre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:cebkloybpxre-qvfnoyrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:cebkloybpxernfba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:cebkloybpxfhpprff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:7:"8:fbeof";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:fbeofernfba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:fbeof_perngr_nppbhag_ernfba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:pnag-oybpx-juvyr-oybpxrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:pnag-frr-uvqqra-hfre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:vcooybpxrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:vcoabhaoybpxfrys";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:8:"8:ybpxqo";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:haybpxqo";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:ybpxqogrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:haybpxqogrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:ybpxpbasvez";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:haybpxpbasvez";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:9:"8:ybpxoga";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:haybpxoga";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:ybpxabpbasvez";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:ybpxqofhpprfffho";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:haybpxqofhpprfffho";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:ybpxqofhpprffgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:haybpxqofhpprffgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:ybpxsvyrabgjevgnoyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:qngnonfrabgybpxrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:zbir-cntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:zbir-cntr-onpxyvax";R:573;s:18:"8:zbir-cntr-yrtraq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:zbircntrgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:30:"8:zbircntrgrkg-aberqverpgsvkre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:zbircntrgnyxgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:zbirnegvpyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:zbirhfrecntr-jneavat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:zbirabybtva";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:zbirabybtvagrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:zbirabgnyybjrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:zbirabgnyybjrqsvyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:pnag-zbir-hfre-cntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:pnag-zbir-gb-hfre-cntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:arjgvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:zbir-jngpu";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:zbircntroga";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:cntrzbirqfho";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:zbircntr-zbirq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:zbircntr-zbirq-erqverpg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:zbircntr-zbirq-aberqverpg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:negvpyrrkvfgf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:pnagzbir-gvgyrcebgrpgrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:gnyxrkvfgf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:9:"8:zbirqgb";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:zbirgnyx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:zbir-fhocntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:zbir-gnyx-fhocntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:zbircntr-cntr-rkvfgf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:zbircntr-cntr-zbirq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:zbircntr-cntr-hazbirq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:zbircntr-znk-cntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:zbir-erqverpg-fhccerffrq";a:3:{i:0;R:37;i:1;R:39;i:2;R:40;}s:17:"8:zbirybtcntrgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:zbirfhocntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:zbirfhocntrgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:zbirabfhocntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:zbirernfba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:qryrgr_naq_zbir";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:qryrgr_naq_zbir_grkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:qryrgr_naq_zbir_pbasvez";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:37:"8:zj-pber-1.17-qryrgr_naq_zbir_ernfba";R:573;s:10:"8:fryszbir";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:vzzbovyr-fbhepr-anzrfcnpr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:vzzbovyr-gnetrg-anzrfcnpr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:30:"8:vzzbovyr-gnetrg-anzrfcnpr-vj";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:vzzbovyr-fbhepr-cntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:vzzbovyr-gnetrg-cntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:vzntrabpebffanzrfcnpr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:abasvyr-pnaabg-zbir-gb-svyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:vzntrglcrzvfzngpu";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:vzntrvainyvqsvyranzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:svk-qbhoyr-erqverpgf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:zbir-yrnir-erqverpg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:cebgrpgrqcntrzbirjneavat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:30:"8:frzvcebgrpgrqcntrzbirjneavat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:zbir-bire-funerqercb";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:svyr-rkvfgf-funerqercb";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:rkcbeggrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:rkcbegphebayl";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:rkcbegabuvfgbel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:rkcbeg-fhozvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:rkcbeg-nqqpnggrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:rkcbeg-nqqpng";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:rkcbeg-nqqafgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:rkcbeg-nqqaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:rkcbeg-qbjaybnq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:rkcbeg-grzcyngrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:rkcbeg-cntryvaxf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:nyyzrffntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:nyyzrffntrfpheerag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:30:"8:zj-pber-1.17-nyyzrffntrfgrkg";R:573;s:27:"8:nyyzrffntrfabgfhccbegrqqo";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:nyyzrffntrf-svygre-yrtraq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:nyyzrffntrf-svygre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:31:"8:nyyzrffntrf-svygre-hazbqvsvrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:nyyzrffntrf-svygre-nyy";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:nyyzrffntrf-svygre-zbqvsvrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:nyyzrffntrf-cersvk";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:nyyzrffntrf-ynathntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:nyyzrffntrf-svygre-fhozvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:svyrzvffvat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:qwih_cntr_reebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:qwih_ab_kzy";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:guhzoanvy_vainyvq_cnenzf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:guhzoanvy_qrfg_qverpgbel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:guhzoanvy_vzntr-glcr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:guhzoanvy_tq-yvoenel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:guhzoanvy_vzntr-zvffvat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:8:"8:vzcbeg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:vzcbegvagrejvxv";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:vzcbeg-vagrejvxv-grkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:vzcbeg-vagrejvxv-fbhepr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:vzcbeg-vagrejvxv-uvfgbel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:vzcbeg-vagrejvxv-grzcyngrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:vzcbeg-vagrejvxv-fhozvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:vzcbeg-vagrejvxv-anzrfcnpr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:vzcbeg-hcybnq-svyranzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:vzcbeg-pbzzrag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:vzcbeggrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:vzcbegfgneg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:vzcbeg-erivfvba-pbhag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:vzcbegabcntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:vzcbegrq-ybt-ragevrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:vzcbegsnvyrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:vzcbeghaxabjafbhepr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:vzcbegpnagbcra";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:vzcbegonqvagrejvxv";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:vzcbegabgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:vzcbegfhpprff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:vzcbeguvfgbelpbasyvpg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:vzcbegabfbheprf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:vzcbegabsvyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:vzcbeghcybnqreebefvmr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:vzcbeghcybnqreebecnegvny";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:vzcbeghcybnqreebegrzc";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:vzcbeg-cnefr-snvyher";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:vzcbeg-abnegvpyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:vzcbeg-abarjerivfvbaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:kzy-reebe-fgevat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:vzcbeg-hcybnq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:vzcbeg-gbxra-zvfzngpu";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:vzcbeg-vainyvq-vagrejvxv";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:vzcbegybtcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:vzcbegybtcntrgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:vzcbeg-ybtragel-hcybnq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:31:"8:vzcbeg-ybtragel-hcybnq-qrgnvy";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:vzcbeg-ybtragel-vagrejvxv";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:34:"8:vzcbeg-ybtragel-vagrejvxv-qrgnvy";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:npprffxrl-cg-hfrecntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:npprffxrl-cg-nabahfrecntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:npprffxrl-cg-zlgnyx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:npprffxrl-cg-nabagnyx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:npprffxrl-cg-cersreraprf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:npprffxrl-cg-jngpuyvfg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:npprffxrl-cg-zlpbagevf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:npprffxrl-cg-ybtva";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:npprffxrl-cg-nabaybtva";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:npprffxrl-cg-ybtbhg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:npprffxrl-pn-gnyx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:npprffxrl-pn-rqvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:npprffxrl-pn-nqqfrpgvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:npprffxrl-pn-ivrjfbhepr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:npprffxrl-pn-uvfgbel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:npprffxrl-pn-cebgrpg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:npprffxrl-pn-hacebgrpg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:npprffxrl-pn-qryrgr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:npprffxrl-pn-haqryrgr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:npprffxrl-pn-zbir";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:npprffxrl-pn-jngpu";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:npprffxrl-pn-hajngpu";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:npprffxrl-frnepu";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:npprffxrl-frnepu-tb";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:npprffxrl-frnepu-shyygrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:npprffxrl-c-ybtb";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:npprffxrl-a-znvacntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:34:"8:npprffxrl-a-znvacntr-qrfpevcgvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:npprffxrl-a-cbegny";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:npprffxrl-a-pheeragriragf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:npprffxrl-a-erpragpunatrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:npprffxrl-a-enaqbzcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:npprffxrl-a-uryc";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:npprffxrl-g-jungyvaxfurer";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:33:"8:npprffxrl-g-erpragpunatrfyvaxrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:npprffxrl-srrq-eff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:npprffxrl-srrq-ngbz";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:npprffxrl-g-pbagevohgvbaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:npprffxrl-g-rznvyhfre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:npprffxrl-g-creznyvax";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:npprffxrl-g-cevag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:npprffxrl-g-hcybnq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:npprffxrl-g-fcrpvnycntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:npprffxrl-pn-afgno-znva";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:npprffxrl-pn-afgno-hfre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:npprffxrl-pn-afgno-zrqvn";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:npprffxrl-pn-afgno-fcrpvny";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:npprffxrl-pn-afgno-cebwrpg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:npprffxrl-pn-afgno-vzntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:30:"8:npprffxrl-pn-afgno-zrqvnjvxv";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:npprffxrl-pn-afgno-grzcyngr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:npprffxrl-pn-afgno-uryc";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:npprffxrl-pn-afgno-pngrtbel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:npprffxrl-zvaberqvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:npprffxrl-fnir";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:npprffxrl-cerivrj";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:npprffxrl-qvss";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:35:"8:npprffxrl-pbzcnerfryrpgrqirefvbaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:npprffxrl-jngpu";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:npprffxrl-hcybnq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:npprffxrl-cersreraprf-fnir";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:npprffxrl-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:npprffxrl-hfreevtugf-frg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:npprffxrl-oybpxvc-oybpx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:npprffxrl-rkcbeg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:npprffxrl-vzcbeg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:gbbygvc-cg-nabahfrecntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:gbbygvc-cg-nabagnyx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:gbbygvc-cg-nabaybtva";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:gbbygvc-pn-hacebgrpg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:gbbygvc-pn-haqryrgr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:gbbygvc-srrq-eff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:gbbygvc-pn-afgno-zrqvn";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:gbbygvc-pn-afgno-zrqvnjvxv";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:gbbygvc-pn-afgno-uryc";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:gbbygvc-erperngr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:gbbygvc-hcybnq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:gbbygvc-cersreraprf-fnir";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:pbzzba.pff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:fgnaqneq.pff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:abfgnytvn.pff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:pbybtaroyhr.pff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:zbabobbx.pff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:zlfxva.pff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:puvpx.pff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:fvzcyr.pff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:zbqrea.pff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:irpgbe.pff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:cevag.pff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:unaquryq.pff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:pbzzba.wf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:fgnaqneq.wf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:abfgnytvn.wf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:pbybtaroyhr.wf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:zbabobbx.wf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:zlfxva.wf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:puvpx.wf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:fvzcyr.wf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:zbqrea.wf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:irpgbe.wf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:abqhoyvapber";R:573;s:19:"8:abperngvirpbzzbaf";R:573;s:15:"8:abgnpprcgnoyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:nabalzbhf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:fvgrhfre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:nabahfre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:ynfgzbqvsvrqngol";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:bgurepbagevof";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:8:"8:bguref";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:fvgrhfref";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:nabahfref";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:perqvgfcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:abperqvgf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:fcnzcebgrpgvbagvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:fcnzcebgrpgvbagrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:fcnzcebgrpgvbazngpu";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:fcnzobg_hfreanzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:fcnz_eriregvat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:fcnz_oynaxvat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:vasbfhogvgyr";R:573;s:10:"8:ahzrqvgf";R:573;s:14:"8:ahzgnyxrqvgf";R:573;s:13:"8:ahzjngpuref";R:573;s:12:"8:ahznhgubef";R:573;s:16:"8:ahzgnyxnhgubef";R:573;s:19:"8:fxvaanzr-fgnaqneq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:fxvaanzr-abfgnytvn";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:fxvaanzr-pbybtaroyhr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:fxvaanzr-zbabobbx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:fxvaanzr-zlfxva";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:fxvaanzr-puvpx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:fxvaanzr-fvzcyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:fxvaanzr-zbqrea";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:fxvaanzr-irpgbe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:zj_zngu_cat";a:3:{i:0;R:800;i:1;R:39;i:2;R:801;}s:16:"8:zj_zngu_fvzcyr";R:573;s:14:"8:zj_zngu_ugzy";R:573;s:16:"8:zj_zngu_fbhepr";a:3:{i:0;R:800;i:1;R:39;i:2;R:801;}s:16:"8:zj_zngu_zbqrea";R:573;s:16:"8:zj_zngu_znguzy";R:573;s:14:"8:zngu_snvyher";a:3:{i:0;R:800;i:1;R:39;i:2;R:801;}s:20:"8:zngu_haxabja_reebe";a:3:{i:0;R:800;i:1;R:39;i:2;R:801;}s:23:"8:zngu_haxabja_shapgvba";a:3:{i:0;R:800;i:1;R:39;i:2;R:801;}s:19:"8:zngu_yrkvat_reebe";a:3:{i:0;R:800;i:1;R:39;i:2;R:801;}s:19:"8:zngu_flagnk_reebe";a:3:{i:0;R:800;i:1;R:39;i:2;R:801;}s:18:"8:zngu_vzntr_reebe";a:3:{i:0;R:800;i:1;R:39;i:2;R:801;}s:17:"8:zngu_onq_gzcqve";a:3:{i:0;R:800;i:1;R:39;i:2;R:801;}s:17:"8:zngu_onq_bhgchg";a:3:{i:0;R:800;i:1;R:39;i:2;R:801;}s:14:"8:zngu_abgrkip";a:3:{i:0;R:800;i:1;R:39;i:2;R:801;}s:21:"8:znexnfcngebyyrqqvss";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:znexnfcngebyyrqyvax";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:znexnfcngebyyrqgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:znexrqnfcngebyyrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:znexrqnfcngebyyrqgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:epcngebyqvfnoyrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:epcngebyqvfnoyrqgrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:znexrqnfcngebyyrqreebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:znexrqnfcngebyyrqreebegrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:37:"8:znexrqnfcngebyyrqreebe-abnhgbcngeby";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:cngeby-ybt-cntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:cngeby-ybt-urnqre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:cngeby-ybt-nhgb";a:3:{i:0;R:37;i:1;R:39;i:2;R:40;}s:22:"8:ybt-fubj-uvqr-cngeby";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:qryrgrqerivfvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:svyrqryrgrreebe-fubeg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:svyrqryrgrreebe-ybat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:svyrqryrgr-zvffvat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:svyrqryrgr-byq-haertvfgrerq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:33:"8:svyrqryrgr-pheerag-haertvfgrerq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:30:"8:svyrqryrgr-nepuvir-ernq-bayl";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:zrqvnjneavat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:vzntrznkfvmr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:guhzofvmr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:jvqguurvtug";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:jvqguurvtugcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:svyr-vasb";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:zj-pber-1.17-svyr-abuverf";R:573;s:22:"8:fubj-ovt-vzntr-guhzo";R:573;s:22:"8:svyr-vasb-tvs-ybbcrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:svyr-vasb-tvs-senzrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:svyr-vasb-cat-ybbcrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:svyr-vasb-cat-ercrng";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:svyr-vasb-cat-senzrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:arjvzntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:vzntryvfggrkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:arjvzntrf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:arjvzntrf-yrtraq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:arjvzntrf-ynory";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:fubjuvqrobgf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:abvzntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:vyfhozvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:8:"8:olqngr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:fc-arjvzntrf-fubjsebz";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:ivqrb-qvzf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:zj-pber-1.17-frpbaqf-nooeri";R:573;s:29:"8:zj-pber-1.17-zvahgrf-nooeri";R:573;s:27:"8:zj-pber-1.17-ubhef-nooeri";R:573;s:21:"8:inevnaganzr-mu-unaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:inevnaganzr-mu-unag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:inevnaganzr-mu-pa";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:inevnaganzr-mu-gj";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:inevnaganzr-mu-ux";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:inevnaganzr-mu-zb";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:inevnaganzr-mu-ft";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:inevnaganzr-mu-zl";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:inevnaganzr-mu";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:inevnaganzr-tna-unaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:inevnaganzr-tna-unag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:inevnaganzr-tna";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:inevnaganzr-fe-rp";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:inevnaganzr-fe-ry";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:inevnaganzr-fe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:inevnaganzr-xx-xm";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:inevnaganzr-xx-ge";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:inevnaganzr-xx-pa";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:inevnaganzr-xx-pley";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:inevnaganzr-xx-ynga";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:inevnaganzr-xx-neno";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:inevnaganzr-xx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:inevnaganzr-xh-neno";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:inevnaganzr-xh-ynga";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:inevnaganzr-xh";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:inevnaganzr-gt-pley";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:inevnaganzr-gt-ynga";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:inevnaganzr-gt";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:zrgnqngn-rkcnaq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:zrgnqngn-pbyyncfr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:30:"8:zj-pber-1.17-zrgnqngn-svryqf";R:573;s:17:"8:rkvs-vzntrjvqgu";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:rkvs-vzntryratgu";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rkvs-ovgfcrefnzcyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:rkvs-pbzcerffvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:32:"8:rkvs-cubgbzrgevpvagrecergngvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:rkvs-bevragngvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:rkvs-fnzcyrfcrecvkry";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:rkvs-cynanepbasvthengvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:rkvs-lpopefhofnzcyvat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:rkvs-lpopecbfvgvbavat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:rkvs-kerfbyhgvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:rkvs-lerfbyhgvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-erfbyhgvbahavg";R:573;s:19:"8:rkvs-fgevcbssfrgf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:rkvs-ebjfcrefgevc";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:rkvs-fgevcolgrpbhagf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:rkvs-wcrtvagrepunatrsbezng";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:34:"8:rkvs-wcrtvagrepunatrsbezngyratgu";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:rkvs-genafsreshapgvba";R:573;s:17:"8:rkvs-juvgrcbvag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:rkvs-cevznelpuebzngvpvgvrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:rkvs-lpopepbrssvpvragf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:rkvs-ersreraproynpxjuvgr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:rkvs-qngrgvzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:rkvs-vzntrqrfpevcgvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:rkvs-znxr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:rkvs-zbqry";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:rkvs-fbsgjner";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:rkvs-negvfg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:rkvs-pbclevtug";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:rkvs-rkvsirefvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:rkvs-synfucvkirefvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:rkvs-pbybefcnpr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:30:"8:rkvs-pbzcbaragfpbasvthengvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:rkvs-pbzcerffrqovgfcrecvkry";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:rkvs-cvkrylqvzrafvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:rkvs-cvkrykqvzrafvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:rkvs-znxreabgr";R:573;s:18:"8:rkvs-hfrepbzzrag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:rkvs-eryngrqfbhaqsvyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:rkvs-qngrgvzrbevtvany";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:rkvs-qngrgvzrqvtvgvmrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:rkvs-fhofrpgvzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:rkvs-fhofrpgvzrbevtvany";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:rkvs-fhofrpgvzrqvtvgvmrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:rkvs-rkcbfhergvzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:rkvs-rkcbfhergvzr-sbezng";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:rkvs-sahzore";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-sahzore-sbezng";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:rkvs-rkcbfhercebtenz";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:rkvs-fcrpgenyfrafvgvivgl";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:rkvs-vfbfcrrqengvatf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:rkvs-brps";R:573;s:24:"8:rkvs-fuhggrefcrrqinyhr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rkvs-ncregherinyhr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:rkvs-oevtugarffinyhr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:rkvs-rkcbfherovnfinyhr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:rkvs-znkncregherinyhr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:rkvs-fhowrpgqvfgnapr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:rkvs-zrgrevatzbqr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:rkvs-yvtugfbhepr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:rkvs-synfu";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:rkvs-sbpnyyratgu";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:rkvs-sbpnyyratgu-sbezng";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:rkvs-fhowrpgnern";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:rkvs-synfuraretl";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:31:"8:rkvs-fcngvnyserdhraplerfcbafr";R:573;s:28:"8:rkvs-sbpnycynarkerfbyhgvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:rkvs-sbpnycynarlerfbyhgvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:31:"8:rkvs-sbpnycynarerfbyhgvbahavg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:rkvs-fhowrpgybpngvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rkvs-rkcbfhervaqrk";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rkvs-frafvatzrgubq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:rkvs-svyrfbhepr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:rkvs-fprarglcr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:rkvs-psncnggrea";R:573;s:21:"8:rkvs-phfgbzeraqrerq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:rkvs-rkcbfherzbqr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:rkvs-juvgronynapr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:rkvs-qvtvgnymbbzengvb";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:rkvs-sbpnyyratguva35zzsvyz";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:rkvs-fprarpncgherglcr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:rkvs-tnvapbageby";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:rkvs-pbagenfg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:rkvs-fnghengvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:rkvs-funecarff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:31:"8:rkvs-qrivprfrggvatqrfpevcgvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:rkvs-fhowrpgqvfgnaprenatr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rkvs-vzntrhavdhrvq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:rkvs-tcfirefvbavq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-tcfyngvghqrers";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:rkvs-tcfyngvghqr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:rkvs-tcfybatvghqrers";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:rkvs-tcfybatvghqr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-tcfnygvghqrers";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:rkvs-tcfnygvghqr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:rkvs-tcfgvzrfgnzc";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rkvs-tcffngryyvgrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:rkvs-tcffgnghf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-tcfzrnfherzbqr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:rkvs-tcfqbc";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:rkvs-tcffcrrqers";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:rkvs-tcffcrrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:rkvs-tcfgenpxers";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:rkvs-tcfgenpx";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:rkvs-tcfvztqverpgvbaers";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:rkvs-tcfvztqverpgvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:rkvs-tcfzncqnghz";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:rkvs-tcfqrfgyngvghqrers";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:rkvs-tcfqrfgyngvghqr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:rkvs-tcfqrfgybatvghqrers";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:rkvs-tcfqrfgybatvghqr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:rkvs-tcfqrfgornevaters";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-tcfqrfgornevat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:rkvs-tcfqrfgqvfgnaprers";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:rkvs-tcfqrfgqvfgnapr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:rkvs-tcfcebprffvatzrgubq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:rkvs-tcfnernvasbezngvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:rkvs-tcfqngrfgnzc";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:rkvs-tcfqvssreragvny";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:rkvs-bowrpganzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:rkvs-znxr-inyhr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:rkvs-zbqry-inyhr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-fbsgjner-inyhr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rkvs-pbzcerffvba-1";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:33:"8:zj-pber-1.17-rkvs-pbzcerffvba-6";R:573;s:34:"8:rkvs-cubgbzrgevpvagrecergngvba-2";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:34:"8:rkvs-cubgbzrgevpvagrecergngvba-6";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:rkvs-haxabjaqngr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rkvs-bevragngvba-1";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rkvs-bevragngvba-2";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rkvs-bevragngvba-3";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rkvs-bevragngvba-4";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rkvs-bevragngvba-5";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rkvs-bevragngvba-6";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rkvs-bevragngvba-7";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rkvs-bevragngvba-8";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:rkvs-cynanepbasvthengvba-1";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:rkvs-cynanepbasvthengvba-2";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-klerfbyhgvba-v";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-klerfbyhgvba-p";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:rkvs-pbybefcnpr-1";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:rkvs-pbybefcnpr-ssss.u";R:573;s:32:"8:rkvs-pbzcbaragfpbasvthengvba-0";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:32:"8:rkvs-pbzcbaragfpbasvthengvba-1";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:32:"8:rkvs-pbzcbaragfpbasvthengvba-2";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:32:"8:rkvs-pbzcbaragfpbasvthengvba-3";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:32:"8:rkvs-pbzcbaragfpbasvthengvba-4";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:32:"8:rkvs-pbzcbaragfpbasvthengvba-5";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:32:"8:rkvs-pbzcbaragfpbasvthengvba-6";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:rkvs-rkcbfhercebtenz-0";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:rkvs-rkcbfhercebtenz-1";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:rkvs-rkcbfhercebtenz-2";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:rkvs-rkcbfhercebtenz-3";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:rkvs-rkcbfhercebtenz-4";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:rkvs-rkcbfhercebtenz-5";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:rkvs-rkcbfhercebtenz-6";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:rkvs-rkcbfhercebtenz-7";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:rkvs-rkcbfhercebtenz-8";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:rkvs-fhowrpgqvfgnapr-inyhr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-zrgrevatzbqr-0";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-zrgrevatzbqr-1";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-zrgrevatzbqr-2";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-zrgrevatzbqr-3";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-zrgrevatzbqr-4";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-zrgrevatzbqr-5";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-zrgrevatzbqr-6";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:rkvs-zrgrevatzbqr-255";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rkvs-yvtugfbhepr-0";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rkvs-yvtugfbhepr-1";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rkvs-yvtugfbhepr-2";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rkvs-yvtugfbhepr-3";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rkvs-yvtugfbhepr-4";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rkvs-yvtugfbhepr-9";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-yvtugfbhepr-10";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-yvtugfbhepr-11";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-yvtugfbhepr-12";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-yvtugfbhepr-13";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-yvtugfbhepr-14";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-yvtugfbhepr-15";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-yvtugfbhepr-17";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-yvtugfbhepr-18";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-yvtugfbhepr-19";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-yvtugfbhepr-20";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-yvtugfbhepr-21";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-yvtugfbhepr-22";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-yvtugfbhepr-23";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-yvtugfbhepr-24";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:rkvs-yvtugfbhepr-255";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rkvs-synfu-sverq-0";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rkvs-synfu-sverq-1";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-synfu-erghea-0";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-synfu-erghea-2";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-synfu-erghea-3";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:rkvs-synfu-zbqr-1";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:rkvs-synfu-zbqr-2";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:rkvs-synfu-zbqr-3";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:rkvs-synfu-shapgvba-1";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-synfu-erqrlr-1";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:33:"8:rkvs-sbpnycynarerfbyhgvbahavg-2";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:rkvs-frafvatzrgubq-1";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:rkvs-frafvatzrgubq-2";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:rkvs-frafvatzrgubq-3";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:rkvs-frafvatzrgubq-4";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:rkvs-frafvatzrgubq-5";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:rkvs-frafvatzrgubq-7";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:rkvs-frafvatzrgubq-8";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:rkvs-svyrfbhepr-3";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:rkvs-fprarglcr-1";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:rkvs-phfgbzeraqrerq-0";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:rkvs-phfgbzeraqrerq-1";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-rkcbfherzbqr-0";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-rkcbfherzbqr-1";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-rkcbfherzbqr-2";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-juvgronynapr-0";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-juvgronynapr-1";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:rkvs-fprarpncgherglcr-0";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:rkvs-fprarpncgherglcr-1";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:rkvs-fprarpncgherglcr-2";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:rkvs-fprarpncgherglcr-3";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rkvs-tnvapbageby-0";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rkvs-tnvapbageby-1";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rkvs-tnvapbageby-2";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rkvs-tnvapbageby-3";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rkvs-tnvapbageby-4";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:rkvs-pbagenfg-0";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:rkvs-pbagenfg-1";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:rkvs-pbagenfg-2";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:rkvs-fnghengvba-0";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:rkvs-fnghengvba-1";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:rkvs-fnghengvba-2";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:rkvs-funecarff-0";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:rkvs-funecarff-1";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:rkvs-funecarff-2";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:rkvs-fhowrpgqvfgnaprenatr-0";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:rkvs-fhowrpgqvfgnaprenatr-1";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:rkvs-fhowrpgqvfgnaprenatr-2";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:rkvs-fhowrpgqvfgnaprenatr-3";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rkvs-tcfyngvghqr-a";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:rkvs-tcfyngvghqr-f";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-tcfybatvghqr-r";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-tcfybatvghqr-j";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:rkvs-tcffgnghf-n";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:rkvs-tcffgnghf-i";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:rkvs-tcfzrnfherzbqr-2";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:rkvs-tcfzrnfherzbqr-3";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:rkvs-tcffcrrq-x";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:rkvs-tcffcrrq-z";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:rkvs-tcffcrrq-a";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-tcfqverpgvba-g";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:rkvs-tcfqverpgvba-z";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:35:"8:zj-pber-1.17-rqvg-rkgreanyyl-uryc";R:573;s:18:"8:erpragpunatrfnyy";R:573;s:14:"8:vzntryvfgnyy";R:573;s:10:"8:yvzvgnyy";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:pbasvezrznvy";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:pbasvezrznvy_abrznvy";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:pbasvezrznvy_grkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:pbasvezrznvy_craqvat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:pbasvezrznvy_fraq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:pbasvezrznvy_frag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:pbasvezrznvy_baperngr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:pbasvezrznvy_fraqsnvyrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:pbasvezrznvy_vainyvq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:pbasvezrznvy_arrqybtva";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:pbasvezrznvy_fhpprff";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:pbasvezrznvy_ybttrqva";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:pbasvezrznvy_reebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:pbasvezrznvy_fhowrpg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:pbasvezrznvy_obql";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:pbasvezrznvy_obql_punatrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:pbasvezrznvy_obql_frg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:pbasvezrznvy_vainyvqngrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:vainyvqngrrznvy";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:fpnelgenafpyhqrqvfnoyrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:fpnelgenafpyhqrsnvyrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:fpnelgenafpyhqrgbbybat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:qryrgrqjuvyrrqvgvat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:pbasvezerperngr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:erperngr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:havg-cvkry";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:pbasvez_chetr_ohggba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:pbasvez-chetr-gbc";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:pbasvez-chetr-obggbz";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:pngfrcnengbe";R:573;s:21:"8:frzvpbyba-frcnengbe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:pbzzn-frcnengbe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:pbyba-frcnengbe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:nhgbpbzzrag-cersvk";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:cvcr-frcnengbe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:jbeq-frcnengbe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:ryyvcfvf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:9:"8:creprag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:cneragurfrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:vztzhygvcntrceri";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:vztzhygvcntrarkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:vztzhygvtb";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:vztzhygvtbgb";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:nfpraqvat_nooeri";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:qrfpraqvat_nooeri";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:gnoyr_cntre_arkg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:gnoyr_cntre_ceri";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:gnoyr_cntre_svefg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:gnoyr_cntre_ynfg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:gnoyr_cntre_yvzvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:gnoyr_cntre_yvzvg_ynory";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:gnoyr_cntre_yvzvg_fhozvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:gnoyr_cntre_rzcgl";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:nhgbfhzz-oynax";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:nhgbfhzz-ercynpr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:nhgberqvepbzzrag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:nhgbfhzz-arj";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:nhgboybpx_juvgryvfg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:fvmr-olgrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:fvmr-xvybolgrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:fvmr-zrtnolgrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:fvmr-tvtnolgrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:yvircerivrj-ybnqvat";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:yvircerivrj-ernql";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:yvircerivrj-snvyrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:yvircerivrj-reebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:ynt-jnea-abezny";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:ynt-jnea-uvtu";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:jngpuyvfgrqvg-ahzvgrzf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:jngpuyvfgrqvg-abvgrzf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:jngpuyvfgrqvg-abezny-gvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:jngpuyvfgrqvg-abezny-yrtraq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:43:"8:zj-pber-1.17-jngpuyvfgrqvg-abezny-rkcynva";R:573;s:29:"8:jngpuyvfgrqvg-abezny-fhozvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:jngpuyvfgrqvg-abezny-qbar";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:jngpuyvfgrqvg-enj-gvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:jngpuyvfgrqvg-enj-yrtraq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:40:"8:zj-pber-1.17-jngpuyvfgrqvg-enj-rkcynva";R:573;s:26:"8:jngpuyvfgrqvg-enj-gvgyrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:jngpuyvfgrqvg-enj-fhozvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:jngpuyvfgrqvg-enj-qbar";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:jngpuyvfgrqvg-enj-nqqrq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:jngpuyvfgrqvg-enj-erzbirq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:venavna-pnyraqne-z1";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:venavna-pnyraqne-z2";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:venavna-pnyraqne-z3";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:venavna-pnyraqne-z4";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:venavna-pnyraqne-z5";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:venavna-pnyraqne-z6";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:venavna-pnyraqne-z7";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:venavna-pnyraqne-z8";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:venavna-pnyraqne-z9";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:venavna-pnyraqne-z10";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:venavna-pnyraqne-z11";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:venavna-pnyraqne-z12";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:uvwev-pnyraqne-z1";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:uvwev-pnyraqne-z2";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:uvwev-pnyraqne-z3";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:uvwev-pnyraqne-z4";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:uvwev-pnyraqne-z5";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:uvwev-pnyraqne-z6";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:uvwev-pnyraqne-z7";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:uvwev-pnyraqne-z8";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:uvwev-pnyraqne-z9";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:uvwev-pnyraqne-z10";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:uvwev-pnyraqne-z11";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:uvwev-pnyraqne-z12";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:uroerj-pnyraqne-z1";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:uroerj-pnyraqne-z2";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:uroerj-pnyraqne-z3";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:uroerj-pnyraqne-z4";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:uroerj-pnyraqne-z5";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:uroerj-pnyraqne-z6";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:uroerj-pnyraqne-z6n";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:uroerj-pnyraqne-z6o";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:uroerj-pnyraqne-z7";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:uroerj-pnyraqne-z8";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:uroerj-pnyraqne-z9";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:uroerj-pnyraqne-z10";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:uroerj-pnyraqne-z11";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:uroerj-pnyraqne-z12";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:uroerj-pnyraqne-z1-tra";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:uroerj-pnyraqne-z2-tra";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:uroerj-pnyraqne-z3-tra";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:uroerj-pnyraqne-z4-tra";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:uroerj-pnyraqne-z5-tra";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:uroerj-pnyraqne-z6-tra";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:uroerj-pnyraqne-z6n-tra";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:uroerj-pnyraqne-z6o-tra";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:uroerj-pnyraqne-z7-tra";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:uroerj-pnyraqne-z8-tra";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:uroerj-pnyraqne-z9-tra";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:uroerj-pnyraqne-z10-tra";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:uroerj-pnyraqne-z11-tra";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:uroerj-pnyraqne-z12-tra";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:zj-pber-1.17-fvtangher";R:573;s:16:"8:fvtangher-naba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:gvzrmbar-hgp";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:haxabja_rkgrafvba_gnt";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:9:"8:irefvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:20:"8:irefvba-rkgrafvbaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:irefvba-fcrpvnycntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:irefvba-cnefreubbxf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:irefvba-inevnoyrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:irefvba-fxvaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:irefvba-bgure";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:23:"8:irefvba-zrqvnunaqyref";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:irefvba-ubbxf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:29:"8:irefvba-rkgrafvba-shapgvbaf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:30:"8:irefvba-cnefre-rkgrafvbagntf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:31:"8:irefvba-cnefre-shapgvba-ubbxf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:34:"8:irefvba-fxva-rkgrafvba-shapgvbaf";R:573;s:19:"8:irefvba-ubbx-anzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:irefvba-ubbx-fhofpevorqol";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:irefvba-irefvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:irefvba-fia-erivfvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:irefvba-yvprafr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:40:"8:zj-pber-1.17-irefvba-cbjrerqol-perqvgf";R:573;s:26:"8:irefvba-cbjrerqol-bguref";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:35:"8:zj-pber-1.17-irefvba-yvprafr-vasb";R:573;s:18:"8:irefvba-fbsgjner";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:irefvba-fbsgjner-cebqhpg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:irefvba-fbsgjner-irefvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:svyrcngu";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:svyrcngu-cntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:svyrcngu-fhozvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:31:"8:zj-pber-1.17-svyrcngu-fhzznel";R:573;s:21:"8:svyrqhcyvpngrfrnepu";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:42:"8:zj-pber-1.17-svyrqhcyvpngrfrnepu-fhzznel";R:573;s:28:"8:svyrqhcyvpngrfrnepu-yrtraq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:30:"8:svyrqhcyvpngrfrnepu-svyranzr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:svyrqhcyvpngrfrnepu-fhozvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:svyrqhcyvpngrfrnepu-vasb";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:30:"8:svyrqhcyvpngrfrnepu-erfhyg-1";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:30:"8:svyrqhcyvpngrfrnepu-erfhyg-a";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:fcrpvnycntrf-fhzznel";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:32:"8:zj-pber-1.17-fcrpvnycntrf-abgr";R:573;s:32:"8:fcrpvnycntrf-tebhc-znvagranapr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:fcrpvnycntrf-tebhc-bgure";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:fcrpvnycntrf-tebhc-ybtva";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:fcrpvnycntrf-tebhc-punatrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:fcrpvnycntrf-tebhc-zrqvn";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:fcrpvnycntrf-tebhc-hfref";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:28:"8:fcrpvnycntrf-tebhc-uvtuhfr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:26:"8:fcrpvnycntrf-tebhc-cntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:30:"8:fcrpvnycntrf-tebhc-cntrgbbyf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:fcrpvnycntrf-tebhc-jvxv";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:30:"8:fcrpvnycntrf-tebhc-erqverpgf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:fcrpvnycntrf-tebhc-fcnz";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:oynaxcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:vagragvbanyyloynaxcntr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:6:"8:gntf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:gnt-svygre-fhozvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:gntf-gvgyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:gntf-vageb";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:10:"8:gntf-gnt";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:gntf-qvfcynl-urnqre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:25:"8:gntf-qrfpevcgvba-urnqre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:gntf-uvgpbhag-urnqre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:11:"8:gntf-rqvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:gntf-uvgpbhag";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:pbzcnercntrf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:18:"8:pbzcner-fryrpgbe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:pbzcner-cntr1";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:pbzcner-cntr2";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:pbzcner-eri1";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:pbzcner-eri2";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:pbzcner-fhozvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:14:"8:qoree-urnqre";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:qoree-ceboyrzf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:13:"8:qoree-ntnva";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:12:"8:qoree-vasb";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:qoree-hfrtbbtyr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:qoree-bhgbsqngr";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:qoree-pnpurqreebe";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:ugzysbez-vainyvq-vachg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:27:"8:ugzysbez-fryrpg-onqbcgvba";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:ugzysbez-vag-vainyvq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:24:"8:ugzysbez-sybng-vainyvq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:ugzysbez-vag-gbbybj";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:22:"8:ugzysbez-vag-gbbuvtu";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:19:"8:ugzysbez-erdhverq";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:17:"8:ugzysbez-fhozvg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:ugzysbez-erfrg";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:30:"8:ugzysbez-fryrpgbebgure-bgure";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:16:"8:fdyvgr-unf-sgf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:15:"8:fdyvgr-ab-sgf";a:4:{i:0;R:37;i:1;R:39;i:2;R:40;i:3;R:41;}s:21:"8:gbt-uvtuyvtugoebxra";a:3:{i:0;R:39;i:1;R:40;i:2;R:41;}s:20:"8:gbt-rkgreanyrqvgbe";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:18:"8:gbt-rkgreanyqvss";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:oebxra-svyr-pngrtbel";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:6:"8:ivrj";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:19:"8:ivrjqryrgrq_fubeg";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:pbyyncfvoyr-pbyyncfr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:20:"8:pbyyncfvoyr-rkcnaq";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:17:"8:fbeg-qrfpraqvat";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:16:"8:fbeg-nfpraqvat";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:16:"8:znvacntr-afgno";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:25:"8:zj-pber-1.18-crespnpurq";s:9:"pber-1.18";s:27:"8:zj-pber-1.18-crespnpurqgf";R:2737;s:15:"8:ivrjfbheprsbe";a:2:{i:0;R:39;i:1;R:40;}s:18:"8:rqvgvatvagresnpr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:20:"8:phfgbzpffcebgrpgrq";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:19:"8:phfgbzwfcebgrpgrq";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:17:"8:abpbbxvrfsbearj";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:19:"8:abpbbxvrfsbeybtva";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:17:"8:abfhpuhfrefubeg";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:16:"8:ybtvaraq-uggcf";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:17:"8:fvtahcraq-uggcf";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:21:"8:ybtva-nobeg-trarevp";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:15:"8:cnffjbeqerfrg";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:20:"8:cnffjbeqerfrg-grkg";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:cnffjbeqerfrg-yrtraq";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:24:"8:cnffjbeqerfrg-qvfnoyrq";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:23:"8:cnffjbeqerfrg-cergrkg";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:24:"8:cnffjbeqerfrg-hfreanzr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:cnffjbeqerfrg-qbznva";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:21:"8:cnffjbeqerfrg-rznvy";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:26:"8:cnffjbeqerfrg-rznvygvgyr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:28:"8:cnffjbeqerfrg-rznvygrkg-vc";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:30:"8:cnffjbeqerfrg-rznvygrkg-hfre";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:28:"8:cnffjbeqerfrg-rznvyryrzrag";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:25:"8:cnffjbeqerfrg-rznvyfrag";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:23:"8:oybpxrqbevtvanyfbhepr";a:2:{i:0;R:39;i:1;R:40;}s:19:"8:oybpxrqrqvgfbhepr";a:2:{i:0;R:39;i:1;R:40;}s:20:"8:juvgryvfgrqvggvgyr";a:2:{i:0;R:39;i:1;R:40;}s:27:"8:hfrecntr-hfreqbrfabgrkvfg";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:rqvg_sbez_vapbzcyrgr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:28:"8:zj-pber-1.18-ybatcntrreebe";R:2737;s:18:"8:rqvggbbyf-hcybnq";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:14:"8:tbbtyrfrnepu";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:27:"8:dofrggvatf-qverpgvbanyvgl";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:12:"8:cersf-orgn";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:12:"8:cersf-ynof";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:39:"8:zj-pber-1.18-cersf-jngpuyvfg-qnlf-znk";R:2737;s:26:"8:gvzrmbarhfrfreireqrsnhyg";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:26:"8:zj-pber-1.18-rqvgvathfre";R:2737;s:19:"8:tebhc-hfre-zrzore";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:28:"8:tebhc-nhgbpbasvezrq-zrzore";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:18:"8:tebhc-obg-zrzore";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:20:"8:tebhc-flfbc-zrzore";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:25:"8:tebhc-ohernhpeng-zrzore";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:23:"8:tebhc-fhccerff-zrzore";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:17:"8:evtug-genpxonpx";a:2:{i:0;R:39;i:1;R:40;}s:28:"8:evtugfybtragel-nhgbcebzbgr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:18:"8:npgvba-genpxonpx";a:2:{i:0;R:39;i:1;R:40;}s:13:"8:frpgvbayvax";a:2:{i:0;R:39;i:1;R:40;}s:30:"8:erpragpunatrfyvaxrq-onpxyvax";a:2:{i:0;R:39;i:1;R:40;}s:24:"8:svyrglcr-zvzr-zvfzngpu";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:svyrglcr-onaarq-glcr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:27:"8:jvaqbjf-abanfpvv-svyranzr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:12:"8:hcybnqwnin";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:21:"8:mvc-svyr-bcra-reebe";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:18:"8:mvc-jebat-sbezng";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:9:"8:mvc-onq";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:17:"8:mvc-hafhccbegrq";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:13:"8:hcybnqfgnfu";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:21:"8:hcybnqfgnfu-fhzznel";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:19:"8:hcybnqfgnfu-pyrne";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:21:"8:hcybnqfgnfu-absvyrf";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:hcybnqfgnfu-onqgbxra";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:hcybnqfgnfu-reepyrne";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:21:"8:hcybnqfgnfu-erserfu";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:21:"8:vzt-nhgu-abcnguvasb";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:23:"8:yvaxfgbvzntr-erqverpg";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:21:"8:svyrerireg-onpxyvax";a:2:{i:0;R:39;i:1;R:40;}s:21:"8:svyrqryrgr-onpxyvax";a:2:{i:0;R:39;i:1;R:40;}s:35:"8:qbhoyr-erqverpg-svkrq-znvagranapr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:26:"8:zj-pber-1.18-hfreperngrq";R:2737;s:20:"8:dhrelcntr-qvfnoyrq";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:8:"8:esphey";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:11:"8:chozrqhey";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:17:"8:arjhfreybtragel";a:2:{i:0;R:39;i:1;R:40;}s:30:"8:zj-pber-1.18-qrsrznvyfhowrpg";R:2737;s:15:"8:rznvyabgnetrg";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:13:"8:rznvygnetrg";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:15:"8:rznvyhfreanzr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:21:"8:rznvyhfreanzrfhozvg";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:10:"8:nqqjngpu";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:13:"8:erzbirjngpu";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:21:"8:zj-pber-1.18-jyabgr";R:2737;s:16:"8:jngpureebegrkg";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:13:"8:rabgvs_obql";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:17:"8:qryrgr-onpxyvax";a:2:{i:0;R:39;i:1;R:40;}s:13:"8:qryrgrqgrkg";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:18:"8:cebgrpg-onpxyvax";a:2:{i:0;R:39;i:1;R:40;}s:14:"8:cebgrpg-grkg";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:19:"8:haqryrgrrkgenuryc";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:16:"8:gbbygvc-vaireg";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:23:"8:anzrfcnpr_nffbpvngvba";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:31:"8:gbbygvc-anzrfcnpr_nffbpvngvba";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:24:"8:jungyvaxfurer-onpxyvax";a:2:{i:0;R:39;i:1;R:40;}s:13:"8:nhgboybpxvq";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:7:"8:oybpx";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:9:"8:haoybpx";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:15:"8:vco-uneqoybpx";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:21:"8:vco-qvfnoyrhfregnyx";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:13:"8:vco-pbasvez";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:18:"8:vco-oybpxvatfrys";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:21:"8:vco-pbasvezuvqrhfre";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:17:"8:haoybpxrq-enatr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:11:"8:oybpxyvfg";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:oybpxyvfg-hfreoybpxf";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:oybpxyvfg-grzcoybpxf";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:25:"8:oybpxyvfg-nqqerffoybpxf";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:21:"8:oybpxyvfg-gvzrfgnzc";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:18:"8:oybpxyvfg-gnetrg";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:18:"8:oybpxyvfg-rkcvel";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:14:"8:oybpxyvfg-ol";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:18:"8:oybpxyvfg-cnenzf";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:18:"8:oybpxyvfg-ernfba";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:19:"8:oybpxyvfg-fhzznel";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:17:"8:vco-arrqeroybpx";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:18:"8:haoybpx-uvqrhfre";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:17:"8:ybpxrqolnaqgvzr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:37:"8:zj-pber-1.18-qryrgr_naq_zbir_ernfba";R:2737;s:17:"8:nyyzrffntrfgrkg";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:14:"8:abfpevcg.pff";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:25:"8:tebhc-nhgbpbasvezrq.pff";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:15:"8:tebhc-obg.pff";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:17:"8:tebhc-flfbc.pff";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:tebhc-ohernhpeng.pff";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:24:"8:tebhc-nhgbpbasvezrq.wf";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:14:"8:tebhc-obg.wf";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:16:"8:tebhc-flfbc.wf";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:21:"8:tebhc-ohernhpeng.wf";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:16:"8:cntrvasb-gvgyr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:23:"8:cntrvasb-urnqre-rqvgf";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:27:"8:cntrvasb-urnqre-jngpuyvfg";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:23:"8:cntrvasb-urnqre-ivrjf";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:cntrvasb-fhowrpgcntr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:19:"8:cntrvasb-gnyxcntr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:19:"8:cntrvasb-jngpuref";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:16:"8:cntrvasb-rqvgf";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:18:"8:cntrvasb-nhgubef";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:16:"8:cntrvasb-ivrjf";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:23:"8:cntrvasb-ivrjfcrerqvg";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:svyr-vasb-fvmr-cntrf";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:27:"8:zj-pber-1.18-svyr-abuverf";R:2737;s:37:"8:zj-pber-1.18-fubj-ovt-vzntr-cerivrj";R:2737;s:35:"8:zj-pber-1.18-fubj-ovt-vzntr-bgure";R:2737;s:21:"8:fubj-ovt-vzntr-fvmr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:29:"8:zj-pber-1.18-frpbaqf-nooeri";R:2737;s:29:"8:zj-pber-1.18-zvahgrf-nooeri";R:2737;s:27:"8:zj-pber-1.18-ubhef-nooeri";R:2737;s:26:"8:zj-pber-1.18-qnlf-nooeri";R:2737;s:22:"8:inevnaganzr-vxr-pnaf";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:inevnaganzr-vxr-ynga";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:16:"8:inevnaganzr-vh";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:19:"8:zrgnqngn-ynatvgrz";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:27:"8:zrgnqngn-ynatvgrz-qrsnhyg";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:24:"8:rkvs-pbbeqvangr-sbezng";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:rkvs-wcrtsvyrpbzzrag";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:15:"8:rkvs-xrljbeqf";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:25:"8:rkvs-jbeyqertvbaperngrq";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:21:"8:rkvs-pbhagelperngrq";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:25:"8:rkvs-pbhagelpbqrperngrq";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:29:"8:rkvs-cebivaprbefgngrperngrq";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:18:"8:rkvs-pvglperngrq";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:25:"8:rkvs-fhoybpngvbaperngrq";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:rkvs-jbeyqertvbaqrfg";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:18:"8:rkvs-pbhagelqrfg";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:rkvs-pbhagelpbqrqrfg";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:26:"8:rkvs-cebivaprbefgngrqrfg";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:15:"8:rkvs-pvglqrfg";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:rkvs-fhoybpngvbaqrfg";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:26:"8:rkvs-fcrpvnyvafgehpgvbaf";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:15:"8:rkvs-urnqyvar";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:13:"8:rkvs-perqvg";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:13:"8:rkvs-fbhepr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:17:"8:rkvs-rqvgfgnghf";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:14:"8:rkvs-hetrapl";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:24:"8:rkvs-svkghervqragvsvre";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:19:"8:rkvs-ybpngvbaqrfg";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:23:"8:rkvs-ybpngvbaqrfgpbqr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:18:"8:rkvs-bowrpgplpyr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:14:"8:rkvs-pbagnpg";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:13:"8:rkvs-jevgre";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:19:"8:rkvs-ynathntrpbqr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:17:"8:rkvs-vvzirefvba";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:18:"8:rkvs-vvzpngrtbel";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:30:"8:rkvs-vvzfhccyrzragnypngrtbel";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:rkvs-qngrgvzrrkcverf";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:23:"8:rkvs-qngrgvzreryrnfrq";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:30:"8:rkvs-bevtvanygenafzvffvbaers";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:17:"8:rkvs-vqragvsvre";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:11:"8:rkvs-yraf";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:19:"8:rkvs-frevnyahzore";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:rkvs-pnzrenbjareanzr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:12:"8:rkvs-ynory";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:23:"8:rkvs-qngrgvzrzrgnqngn";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:15:"8:rkvs-avpxanzr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:13:"8:rkvs-engvat";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:24:"8:rkvs-evtugfpregvsvpngr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:18:"8:rkvs-pbclevtugrq";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:21:"8:rkvs-pbclevtugbjare";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:17:"8:rkvs-hfntrgrezf";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:19:"8:rkvs-jrofgngrzrag";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:25:"8:rkvs-bevtvanyqbphzragvq";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:17:"8:rkvs-yvprafrhey";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:25:"8:rkvs-zbercrezvffvbafhey";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:21:"8:rkvs-nggevohgvbahey";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:31:"8:rkvs-cersreerqnggevohgvbaanzr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:21:"8:rkvs-catsvyrpbzzrag";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:17:"8:rkvs-qvfpynvzre";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:21:"8:rkvs-pbagragjneavat";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:21:"8:rkvs-tvssvyrpbzzrag";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:24:"8:rkvs-vagryyrpghnytraer";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:rkvs-fhowrpgarjfpbqr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:16:"8:rkvs-fprarpbqr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:12:"8:rkvs-rirag";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:26:"8:rkvs-betnavfngvbavavzntr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:20:"8:rkvs-crefbavavzntr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:26:"8:rkvs-bevtvanyvzntrurvtug";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:25:"8:rkvs-bevtvanyvzntrjvqgu";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:29:"8:rkvs-fbsgjner-irefvba-inyhr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:20:"8:rkvs-pbagnpg-inyhr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:28:"8:rkvs-fhowrpgarjfpbqr-inyhr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:20:"8:rkvs-pbzcerffvba-2";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:20:"8:rkvs-pbzcerffvba-3";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:20:"8:rkvs-pbzcerffvba-4";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:20:"8:rkvs-pbzcerffvba-5";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:20:"8:rkvs-pbzcerffvba-6";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:20:"8:rkvs-pbzcerffvba-7";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:20:"8:rkvs-pbzcerffvba-8";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:24:"8:rkvs-pbzcerffvba-32773";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:24:"8:rkvs-pbzcerffvba-32946";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:24:"8:rkvs-pbzcerffvba-34712";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:23:"8:rkvs-pbclevtugrq-gehr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:24:"8:rkvs-pbclevtugrq-snyfr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:23:"8:rkvs-pbybefcnpr-65535";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:33:"8:rkvs-tcfnygvghqr-nobir-frnyriry";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:33:"8:rkvs-tcfnygvghqr-orybj-frnyriry";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:24:"8:rkvs-tcfqrfgqvfgnapr-x";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:24:"8:rkvs-tcfqrfgqvfgnapr-z";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:24:"8:rkvs-tcfqrfgqvfgnapr-a";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:23:"8:rkvs-tcfqbc-rkpryyrag";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:18:"8:rkvs-tcfqbc-tbbq";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:rkvs-tcfqbc-zbqrengr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:18:"8:rkvs-tcfqbc-snve";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:18:"8:rkvs-tcfqbc-cbbe";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:20:"8:rkvs-bowrpgplpyr-n";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:20:"8:rkvs-bowrpgplpyr-c";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:20:"8:rkvs-bowrpgplpyr-o";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:25:"8:rkvs-lpopecbfvgvbavat-1";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:25:"8:rkvs-lpopecbfvgvbavat-2";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:21:"8:rkvs-qp-pbagevohgbe";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:18:"8:rkvs-qp-pbirentr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:14:"8:rkvs-qp-qngr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:19:"8:rkvs-qp-choyvfure";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:18:"8:rkvs-qp-eryngvba";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:16:"8:rkvs-qp-evtugf";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:16:"8:rkvs-qp-fbhepr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:14:"8:rkvs-qp-glcr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:rkvs-engvat-erwrpgrq";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:31:"8:rkvs-vfbfcrrqengvatf-biresybj";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:29:"8:rkvs-znkncregherinyhr-inyhr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:rkvs-vvzpngrtbel-npr";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:rkvs-vvzpngrtbel-pyw";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:rkvs-vvzpngrtbel-qvf";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:rkvs-vvzpngrtbel-sva";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:rkvs-vvzpngrtbel-rqh";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:rkvs-vvzpngrtbel-ria";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:rkvs-vvzpngrtbel-ugu";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:rkvs-vvzpngrtbel-uhz";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:rkvs-vvzpngrtbel-yno";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:rkvs-vvzpngrtbel-yvs";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:rkvs-vvzpngrtbel-cby";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:rkvs-vvzpngrtbel-ery";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:rkvs-vvzpngrtbel-fpv";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:rkvs-vvzpngrtbel-fbv";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:rkvs-vvzpngrtbel-fcb";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:rkvs-vvzpngrtbel-jne";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:rkvs-vvzpngrtbel-jrn";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:21:"8:rkvs-hetrapl-abezny";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:18:"8:rkvs-hetrapl-ybj";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:19:"8:rkvs-hetrapl-uvtu";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:20:"8:rkvs-hetrapl-bgure";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:14:"8:genpxonpxobk";a:2:{i:0;R:39;i:1;R:40;}s:11:"8:genpxonpx";a:2:{i:0;R:39;i:1;R:40;}s:18:"8:genpxonpxrkprecg";a:2:{i:0;R:39;i:1;R:40;}s:17:"8:genpxonpxerzbir";a:2:{i:0;R:39;i:1;R:40;}s:15:"8:genpxonpxyvax";a:2:{i:0;R:39;i:1;R:40;}s:19:"8:genpxonpxqryrgrbx";a:2:{i:0;R:39;i:1;R:40;}s:26:"8:pbasvezerperngr-abernfba";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:pbasvez-jngpu-ohggba";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:19:"8:pbasvez-jngpu-gbc";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:24:"8:pbasvez-hajngpu-ohggba";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:21:"8:pbasvez-hajngpu-gbc";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:30:"8:jngpuyvfgrqvg-abezny-rkcynva";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:27:"8:jngpuyvfgrqvg-enj-rkcynva";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:24:"8:zj-pber-1.18-fvtangher";R:2737;s:18:"8:irefvba-nagvfcnz";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:13:"8:irefvba-ncv";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:27:"8:irefvba-cbjrerqol-perqvgf";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:22:"8:irefvba-yvprafr-vasb";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:18:"8:svyrcngu-fhzznel";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:29:"8:svyrqhcyvpngrfrnepu-fhzznel";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:31:"8:svyrqhcyvpngrfrnepu-aberfhygf";a:3:{i:0;R:37;i:1;R:40;i:2;R:41;}s:32:"8:zj-pber-1.18-fcrpvnycntrf-abgr";R:2737;s:18:"8:onpxyvaxfhogvgyr";a:2:{i:0;R:37;i:1;R:41;}s:20:"8:pnaabgqryrgr-gvgyr";a:2:{i:0;R:37;i:1;R:41;}s:12:"8:crespnpurq";a:2:{i:0;R:37;i:1;R:41;}s:14:"8:crespnpurqgf";a:2:{i:0;R:37;i:1;R:41;}s:18:"8:ivrjfbhepr-gvgyr";a:2:{i:0;R:37;i:1;R:41;}s:14:"8:ivrjlbhegrkg";a:2:{i:0;R:37;i:1;R:41;}s:19:"8:pnaabgpunatrrznvy";a:2:{i:0;R:37;i:1;R:41;}s:19:"8:hfre-znvy-ab-nqql";a:2:{i:0;R:37;i:1;R:41;}s:23:"8:cnffjbeqerfrg-pncgher";a:2:{i:0;R:37;i:1;R:41;}s:28:"8:cnffjbeqerfrg-pncgher-uryc";a:2:{i:0;R:37;i:1;R:41;}s:33:"8:cnffjbeqerfrg-rznvyfrag-pncgher";a:2:{i:0;R:37;i:1;R:41;}s:34:"8:cnffjbeqerfrg-rznvyreebe-pncgher";a:2:{i:0;R:37;i:1;R:41;}s:13:"8:punatrrznvy";a:2:{i:0;R:37;i:1;R:41;}s:20:"8:punatrrznvy-urnqre";a:2:{i:0;R:37;i:1;R:41;}s:18:"8:punatrrznvy-grkg";a:2:{i:0;R:37;i:1;R:41;}s:21:"8:punatrrznvy-ab-vasb";a:2:{i:0;R:37;i:1;R:41;}s:22:"8:punatrrznvy-byqrznvy";a:2:{i:0;R:37;i:1;R:41;}s:22:"8:punatrrznvy-arjrznvy";a:2:{i:0;R:37;i:1;R:41;}s:18:"8:punatrrznvy-abar";a:2:{i:0;R:37;i:1;R:41;}s:20:"8:punatrrznvy-fhozvg";a:2:{i:0;R:37;i:1;R:41;}s:20:"8:punatrrznvy-pnapry";a:2:{i:0;R:37;i:1;R:41;}s:15:"8:ybatcntrreebe";a:2:{i:0;R:37;i:1;R:41;}s:26:"8:cersf-jngpuyvfg-qnlf-znk";a:2:{i:0;R:37;i:1;R:41;}s:19:"8:cersf-punatrrznvy";a:2:{i:0;R:37;i:1;R:41;}s:16:"8:cersf-frgrznvy";a:2:{i:0;R:37;i:1;R:41;}s:20:"8:cersf-uryc-inevnag";a:2:{i:0;R:37;i:1;R:41;}s:13:"8:rqvgvathfre";a:2:{i:0;R:37;i:1;R:41;}s:21:"8:evtug-cnffjbeqerfrg";a:2:{i:0;R:37;i:1;R:41;}s:17:"8:npgvba-ebyyonpx";a:2:{i:0;R:37;i:1;R:41;}s:18:"8:npgvba-fraqrznvy";a:2:{i:0;R:37;i:1;R:41;}s:20:"8:ep-punatr-fvmr-arj";a:2:{i:0;R:37;i:1;R:41;}s:14:"8:ep-byq-gvgyr";a:2:{i:0;R:37;i:1;R:41;}s:18:"8:svyranzr-gbbybat";a:2:{i:0;R:37;i:1;R:41;}s:21:"8:onpxraq-snvy-fgernz";a:2:{i:0;R:37;i:1;R:41;}s:21:"8:onpxraq-snvy-onpxhc";a:2:{i:0;R:37;i:1;R:41;}s:24:"8:onpxraq-snvy-abgrkvfgf";a:2:{i:0;R:37;i:1;R:41;}s:21:"8:onpxraq-snvy-unfurf";a:2:{i:0;R:37;i:1;R:41;}s:22:"8:onpxraq-snvy-abgfnzr";a:2:{i:0;R:37;i:1;R:41;}s:26:"8:onpxraq-snvy-vainyvqcngu";a:2:{i:0;R:37;i:1;R:41;}s:21:"8:onpxraq-snvy-qryrgr";a:2:{i:0;R:37;i:1;R:41;}s:28:"8:onpxraq-snvy-nyernqlrkvfgf";a:2:{i:0;R:37;i:1;R:41;}s:20:"8:onpxraq-snvy-fgber";a:2:{i:0;R:37;i:1;R:41;}s:19:"8:onpxraq-snvy-pbcl";a:2:{i:0;R:37;i:1;R:41;}s:19:"8:onpxraq-snvy-zbir";a:2:{i:0;R:37;i:1;R:41;}s:23:"8:onpxraq-snvy-bcragrzc";a:2:{i:0;R:37;i:1;R:41;}s:24:"8:onpxraq-snvy-jevgrgrzc";a:2:{i:0;R:37;i:1;R:41;}s:24:"8:onpxraq-snvy-pybfrgrzc";a:2:{i:0;R:37;i:1;R:41;}s:19:"8:onpxraq-snvy-ernq";a:2:{i:0;R:37;i:1;R:41;}s:21:"8:onpxraq-snvy-perngr";a:2:{i:0;R:37;i:1;R:41;}s:23:"8:onpxraq-snvy-ernqbayl";a:2:{i:0;R:37;i:1;R:41;}s:21:"8:onpxraq-snvy-flaprq";a:2:{i:0;R:37;i:1;R:41;}s:22:"8:onpxraq-snvy-pbaarpg";a:2:{i:0;R:37;i:1;R:41;}s:23:"8:onpxraq-snvy-vagreany";a:2:{i:0;R:37;i:1;R:41;}s:26:"8:onpxraq-snvy-pbagragglcr";a:2:{i:0;R:37;i:1;R:41;}s:24:"8:onpxraq-snvy-ongpufvmr";a:2:{i:0;R:37;i:1;R:41;}s:23:"8:ybpxznantre-abgybpxrq";a:2:{i:0;R:37;i:1;R:41;}s:28:"8:ybpxznantre-snvy-pybfrybpx";a:2:{i:0;R:37;i:1;R:41;}s:29:"8:ybpxznantre-snvy-qryrgrybpx";a:2:{i:0;R:37;i:1;R:41;}s:30:"8:ybpxznantre-snvy-npdhverybpx";a:2:{i:0;R:37;i:1;R:41;}s:27:"8:ybpxznantre-snvy-bcraybpx";a:2:{i:0;R:37;i:1;R:41;}s:30:"8:ybpxznantre-snvy-eryrnfrybpx";a:2:{i:0;R:37;i:1;R:41;}s:28:"8:ybpxznantre-snvy-qo-ohpxrg";a:2:{i:0;R:37;i:1;R:41;}s:29:"8:ybpxznantre-snvy-qo-eryrnfr";a:2:{i:0;R:37;i:1;R:41;}s:30:"8:ybpxznantre-snvy-fie-eryrnfr";a:2:{i:0;R:37;i:1;R:41;}s:22:"8:vainyvq-puhax-bssfrg";a:2:{i:0;R:37;i:1;R:41;}s:30:"8:svyrqryrgr-znvagranapr-gvgyr";a:2:{i:0;R:37;i:1;R:41;}s:20:"8:jnagrqsvyrgrkg-png";a:2:{i:0;R:37;i:1;R:41;}s:22:"8:jnagrqsvyrgrkg-abpng";a:2:{i:0;R:37;i:1;R:41;}s:23:"8:cersvkvaqrk-anzrfcnpr";a:2:{i:0;R:37;i:1;R:41;}s:17:"8:qrsrznvyfhowrpg";a:2:{i:0;R:37;i:1;R:41;}s:8:"8:jyabgr";a:2:{i:0;R:37;i:1;R:41;}s:26:"8:cebgrpg-gvgyr-abgnyybjrq";a:2:{i:0;R:37;i:1;R:41;}s:28:"8:cebgrpg-onqanzrfcnpr-gvgyr";a:2:{i:0;R:37;i:1;R:41;}s:27:"8:cebgrpg-onqanzrfcnpr-grkg";a:2:{i:0;R:37;i:1;R:41;}s:24:"8:cebgrpg-rkcvevat-ybpny";a:2:{i:0;R:37;i:1;R:41;}s:23:"8:haqryrgr-frnepu-gvgyr";a:2:{i:0;R:37;i:1;R:41;}s:16:"8:haqryrgr-reebe";a:2:{i:0;R:37;i:1;R:41;}s:23:"8:oybpxyvfg-enatroybpxf";a:2:{i:0;R:37;i:1;R:41;}s:11:"8:rznvyyvax";a:2:{i:0;R:37;i:1;R:41;}s:24:"8:qryrgr_naq_zbir_ernfba";a:2:{i:0;R:37;i:1;R:41;}s:11:"8:rkcbegnyy";a:2:{i:0;R:37;i:1;R:41;}s:19:"8:rkcbegyvfgnhgubef";a:2:{i:0;R:37;i:1;R:41;}s:23:"8:guhzoanvy-grzc-perngr";a:2:{i:0;R:37;i:1;R:41;}s:23:"8:guhzoanvy-qrfg-perngr";a:2:{i:0;R:37;i:1;R:41;}s:19:"8:vzcbeg-reebe-rqvg";a:2:{i:0;R:37;i:1;R:41;}s:21:"8:vzcbeg-reebe-perngr";a:2:{i:0;R:37;i:1;R:41;}s:24:"8:vzcbeg-reebe-vagrejvxv";a:2:{i:0;R:37;i:1;R:41;}s:22:"8:vzcbeg-reebe-fcrpvny";a:2:{i:0;R:37;i:1;R:41;}s:22:"8:vzcbeg-reebe-vainyvq";a:2:{i:0;R:37;i:1;R:41;}s:16:"8:wninfpevcggrfg";a:2:{i:0;R:37;i:1;R:41;}s:25:"8:wninfpevcggrfg-onpxyvax";a:2:{i:0;R:37;i:1;R:41;}s:25:"8:wninfpevcggrfg-qvfnoyrq";a:2:{i:0;R:37;i:1;R:41;}s:22:"8:wninfpevcggrfg-gvgyr";a:2:{i:0;R:37;i:1;R:41;}s:37:"8:wninfpevcggrfg-cntrgrkg-absenzrjbex";a:2:{i:0;R:37;i:1;R:41;}s:42:"8:wninfpevcggrfg-cntrgrkg-haxabjasenzrjbex";a:2:{i:0;R:37;i:1;R:41;}s:36:"8:wninfpevcggrfg-cntrgrkg-senzrjbexf";a:2:{i:0;R:37;i:1;R:41;}s:31:"8:wninfpevcggrfg-cntrgrkg-fxvaf";a:2:{i:0;R:37;i:1;R:41;}s:27:"8:wninfpevcggrfg-dhavg-anzr";a:2:{i:0;R:37;i:1;R:41;}s:28:"8:wninfpevcggrfg-dhavg-vageb";a:2:{i:0;R:37;i:1;R:41;}s:30:"8:wninfpevcggrfg-dhavg-urnqvat";a:2:{i:0;R:37;i:1;R:41;}s:39:"8:npprffxrl-jngpuyvfgrqvg-abezny-fhozvg";a:2:{i:0;R:37;i:1;R:41;}s:36:"8:npprffxrl-jngpuyvfgrqvg-enj-fhozvg";a:2:{i:0;R:37;i:1;R:41;}s:37:"8:gbbygvc-jngpuyvfgrqvg-abezny-fhozvg";a:2:{i:0;R:37;i:1;R:41;}s:34:"8:gbbygvc-jngpuyvfgrqvg-enj-fhozvg";a:2:{i:0;R:37;i:1;R:41;}s:24:"8:fubj-ovt-vzntr-cerivrj";a:2:{i:0;R:37;i:1;R:41;}s:22:"8:fubj-ovt-vzntr-bgure";a:2:{i:0;R:37;i:1;R:41;}s:16:"8:frpbaqf-nooeri";a:2:{i:0;R:37;i:1;R:41;}s:16:"8:zvahgrf-nooeri";a:2:{i:0;R:37;i:1;R:41;}s:14:"8:ubhef-nooeri";a:2:{i:0;R:37;i:1;R:41;}s:13:"8:qnlf-nooeri";a:2:{i:0;R:37;i:1;R:41;}s:9:"8:frpbaqf";a:2:{i:0;R:37;i:1;R:41;}s:9:"8:zvahgrf";a:2:{i:0;R:37;i:1;R:41;}s:7:"8:ubhef";a:2:{i:0;R:37;i:1;R:41;}s:6:"8:qnlf";a:2:{i:0;R:37;i:1;R:41;}s:5:"8:ntb";a:2:{i:0;R:37;i:1;R:41;}s:22:"8:inevnaganzr-fuv-gsat";a:2:{i:0;R:37;i:1;R:41;}s:22:"8:inevnaganzr-fuv-ynga";a:2:{i:0;R:37;i:1;R:41;}s:17:"8:inevnaganzr-fuv";a:2:{i:0;R:37;i:1;R:41;}s:16:"8:fvmr-grenolgrf";a:2:{i:0;R:37;i:1;R:41;}s:16:"8:fvmr-crgnolgrf";a:2:{i:0;R:37;i:1;R:41;}s:15:"8:fvmr-rknolgrf";a:2:{i:0;R:37;i:1;R:41;}s:16:"8:fvmr-mrgnolgrf";a:2:{i:0;R:37;i:1;R:41;}s:17:"8:fvmr-lbggnolgrf";a:2:{i:0;R:37;i:1;R:41;}s:14:"8:ovgengr-ovgf";a:2:{i:0;R:37;i:1;R:41;}s:18:"8:ovgengr-xvybovgf";a:2:{i:0;R:37;i:1;R:41;}s:18:"8:ovgengr-zrtnovgf";a:2:{i:0;R:37;i:1;R:41;}s:18:"8:ovgengr-tvtnovgf";a:2:{i:0;R:37;i:1;R:41;}s:18:"8:ovgengr-grenovgf";a:2:{i:0;R:37;i:1;R:41;}s:18:"8:ovgengr-crgnovgf";a:2:{i:0;R:37;i:1;R:41;}s:17:"8:ovgengr-rknovgf";a:2:{i:0;R:37;i:1;R:41;}s:18:"8:ovgengr-mrgnovgf";a:2:{i:0;R:37;i:1;R:41;}s:19:"8:ovgengr-lbggnovgf";a:2:{i:0;R:37;i:1;R:41;}s:11:"8:fvtangher";a:2:{i:0;R:37;i:1;R:41;}s:19:"8:fcrpvnycntrf-abgr";a:2:{i:0;R:37;i:1;R:41;}s:23:"8:pbzcner-vainyvq-gvgyr";a:2:{i:0;R:37;i:1;R:41;}s:26:"8:pbzcner-gvgyr-abg-rkvfgf";a:2:{i:0;R:37;i:1;R:41;}s:29:"8:pbzcner-erivfvba-abg-rkvfgf";a:2:{i:0;R:37;i:1;R:41;}s:24:"8:ybtragel-qryrgr-qryrgr";a:2:{i:0;R:37;i:1;R:41;}s:25:"8:ybtragel-qryrgr-erfgber";a:2:{i:0;R:37;i:1;R:41;}s:23:"8:ybtragel-qryrgr-rirag";a:2:{i:0;R:37;i:1;R:41;}s:26:"8:ybtragel-qryrgr-erivfvba";a:2:{i:0;R:37;i:1;R:41;}s:30:"8:ybtragel-qryrgr-rirag-yrtnpl";a:2:{i:0;R:37;i:1;R:41;}s:33:"8:ybtragel-qryrgr-erivfvba-yrtnpl";a:2:{i:0;R:37;i:1;R:41;}s:26:"8:ybtragel-fhccerff-qryrgr";a:2:{i:0;R:37;i:1;R:41;}s:25:"8:ybtragel-fhccerff-rirag";a:2:{i:0;R:37;i:1;R:41;}s:28:"8:ybtragel-fhccerff-erivfvba";a:2:{i:0;R:37;i:1;R:41;}s:32:"8:ybtragel-fhccerff-rirag-yrtnpl";a:2:{i:0;R:37;i:1;R:41;}s:35:"8:ybtragel-fhccerff-erivfvba-yrtnpl";a:2:{i:0;R:37;i:1;R:41;}s:23:"8:eriqryrgr-pbagrag-uvq";a:2:{i:0;R:37;i:1;R:41;}s:23:"8:eriqryrgr-fhzznel-uvq";a:2:{i:0;R:37;i:1;R:41;}s:21:"8:eriqryrgr-hanzr-uvq";a:2:{i:0;R:37;i:1;R:41;}s:25:"8:eriqryrgr-pbagrag-hauvq";a:2:{i:0;R:37;i:1;R:41;}s:25:"8:eriqryrgr-fhzznel-hauvq";a:2:{i:0;R:37;i:1;R:41;}s:23:"8:eriqryrgr-hanzr-hauvq";a:2:{i:0;R:37;i:1;R:41;}s:20:"8:ybtragel-zbir-zbir";a:2:{i:0;R:37;i:1;R:41;}s:31:"8:ybtragel-zbir-zbir-aberqverpg";a:2:{i:0;R:37;i:1;R:41;}s:26:"8:ybtragel-zbir-zbir_erqve";a:2:{i:0;R:37;i:1;R:41;}s:37:"8:ybtragel-zbir-zbir_erqve-aberqverpg";a:2:{i:0;R:37;i:1;R:41;}s:24:"8:ybtragel-cngeby-cngeby";a:2:{i:0;R:37;i:1;R:41;}s:29:"8:ybtragel-cngeby-cngeby-nhgb";a:2:{i:0;R:37;i:1;R:41;}s:28:"8:ybtragel-arjhfref-arjhfref";a:2:{i:0;R:37;i:1;R:41;}s:26:"8:ybtragel-arjhfref-perngr";a:2:{i:0;R:37;i:1;R:41;}s:27:"8:ybtragel-arjhfref-perngr2";a:2:{i:0;R:37;i:1;R:41;}s:30:"8:ybtragel-arjhfref-nhgbperngr";a:2:{i:0;R:37;i:1;R:41;}s:20:"8:srrqonpx-ohtbeabgr";a:2:{i:0;R:37;i:1;R:41;}s:18:"8:srrqonpx-fhowrpg";a:2:{i:0;R:37;i:1;R:41;}s:18:"8:srrqonpx-zrffntr";a:2:{i:0;R:37;i:1;R:41;}s:17:"8:srrqonpx-pnapry";a:2:{i:0;R:37;i:1;R:41;}s:17:"8:srrqonpx-fhozvg";a:2:{i:0;R:37;i:1;R:41;}s:17:"8:srrqonpx-nqqvat";a:2:{i:0;R:37;i:1;R:41;}s:17:"8:srrqonpx-reebe1";a:2:{i:0;R:37;i:1;R:41;}s:17:"8:srrqonpx-reebe2";a:2:{i:0;R:37;i:1;R:41;}s:17:"8:srrqonpx-reebe3";a:2:{i:0;R:37;i:1;R:41;}s:17:"8:srrqonpx-gunaxf";a:2:{i:0;R:37;i:1;R:41;}s:16:"8:srrqonpx-pybfr";a:2:{i:0;R:37;i:1;R:41;}s:19:"8:srrqonpx-ohtpurpx";a:2:{i:0;R:37;i:1;R:41;}s:17:"8:srrqonpx-ohtarj";a:2:{i:0;R:37;i:1;R:41;}s:28:"8:ncv-reebe-onqnpprff-tebhcf";a:2:{i:0;R:37;i:1;R:41;}s:20:"8:ncv-reebe-onqgbxra";a:2:{i:0;R:37;i:1;R:41;}s:30:"8:ncv-reebe-pbclhcybnqqvfnoyrq";a:2:{i:0;R:37;i:1;R:41;}s:21:"8:ncv-reebe-qhcyvpngr";a:2:{i:0;R:37;i:1;R:41;}s:29:"8:ncv-reebe-qhcyvpngr-nepuvir";a:2:{i:0;R:37;i:1;R:41;}s:41:"8:ncv-reebe-qhcyvpngr-nepuvir-cbchc-gvgyr";a:2:{i:0;R:37;i:1;R:41;}s:33:"8:ncv-reebe-qhcyvpngr-cbchc-gvgyr";a:2:{i:0;R:37;i:1;R:41;}s:22:"8:ncv-reebe-rzcgl-svyr";a:2:{i:0;R:37;i:1;R:41;}s:21:"8:ncv-reebe-rzcglcntr";a:2:{i:0;R:37;i:1;R:41;}s:26:"8:ncv-reebe-srgpusvyrreebe";a:2:{i:0;R:37;i:1;R:41;}s:26:"8:ncv-reebe-svyr-gbb-ynetr";a:2:{i:0;R:37;i:1;R:41;}s:29:"8:ncv-reebe-svyranzr-gbbfubeg";a:2:{i:0;R:37;i:1;R:41;}s:27:"8:ncv-reebe-svyrglcr-onaarq";a:2:{i:0;R:37;i:1;R:41;}s:28:"8:ncv-reebe-svyrglcr-zvffvat";a:2:{i:0;R:37;i:1;R:41;}s:23:"8:ncv-reebe-ubbxnobegrq";a:2:{i:0;R:37;i:1;R:41;}s:16:"8:ncv-reebe-uggc";a:2:{i:0;R:37;i:1;R:41;}s:28:"8:ncv-reebe-vyyrtny-svyranzr";a:2:{i:0;R:37;i:1;R:41;}s:26:"8:ncv-reebe-vagreany-reebe";a:2:{i:0;R:37;i:1;R:41;}s:28:"8:ncv-reebe-vainyvq-svyr-xrl";a:2:{i:0;R:37;i:1;R:41;}s:24:"8:ncv-reebe-zvffvatcnenz";a:2:{i:0;R:37;i:1;R:41;}s:25:"8:ncv-reebe-zvffvaterfhyg";a:2:{i:0;R:37;i:1;R:41;}s:26:"8:ncv-reebe-zhfgorybttrqva";a:2:{i:0;R:37;i:1;R:41;}s:24:"8:ncv-reebe-zhfgorcbfgrq";a:2:{i:0;R:37;i:1;R:41;}s:23:"8:ncv-reebe-abvzntrvasb";a:2:{i:0;R:37;i:1;R:41;}s:20:"8:ncv-reebe-abzbqhyr";a:2:{i:0;R:37;i:1;R:41;}s:24:"8:ncv-reebe-bx-ohg-rzcgl";a:2:{i:0;R:37;i:1;R:41;}s:21:"8:ncv-reebe-birejevgr";a:2:{i:0;R:37;i:1;R:41;}s:23:"8:ncv-reebe-fgnfusnvyrq";a:2:{i:0;R:37;i:1;R:41;}s:19:"8:ncv-reebe-gvzrbhg";a:2:{i:0;R:37;i:1;R:41;}s:24:"8:ncv-reebe-hapynffvsvrq";a:2:{i:0;R:37;i:1;R:41;}s:24:"8:ncv-reebe-haxabja-pbqr";a:2:{i:0;R:37;i:1;R:41;}s:25:"8:ncv-reebe-haxabja-reebe";a:2:{i:0;R:37;i:1;R:41;}s:27:"8:ncv-reebe-haxabja-jneavat";a:2:{i:0;R:37;i:1;R:41;}s:24:"8:ncv-reebe-haxabjareebe";a:2:{i:0;R:37;i:1;R:41;}s:26:"8:ncv-reebe-hcybnqqvfnoyrq";a:2:{i:0;R:37;i:1;R:41;}s:30:"8:ncv-reebe-irevsvpngvba-reebe";a:2:{i:0;R:37;i:1;R:41;}s:16:"8:nagvfcbbs-qrfp";a:4:{i:0;s:13:"ext-antispoof";i:1;R:801;i:2;s:15:"ext-0-wikimedia";i:3;s:20:"ext-0-wikimedia-main";}s:24:"8:nagvfcbbs-pbasyvpg-gbc";a:4:{i:0;R:3236;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:nagvfcbbs-pbasyvpg-vgrz";a:4:{i:0;R:3236;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:nagvfcbbs-pbasyvpg-obggbz";a:4:{i:0;R:3236;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:nagvfcbbs-anzr-vyyrtny";a:4:{i:0;R:3236;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:nagvfcbbs-onq-pune";a:4:{i:0;R:3236;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:nagvfcbbs-onq-pune-aba-cevagnoyr";a:4:{i:0;R:3236;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:nagvfcbbs-onqglcr";a:4:{i:0;R:3236;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:nagvfcbbs-rzcgl";a:4:{i:0;R:3236;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:nagvfcbbs-oynpxyvfgrq";a:4:{i:0;R:3236;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:nagvfcbbs-pbzovavat";a:4:{i:0;R:3236;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:nagvfcbbs-hanffvtarq";a:4:{i:0;R:3236;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:nagvfcbbs-qrcerpngrq";a:4:{i:0;R:3236;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:nagvfcbbs-abyrggref";a:4:{i:0;R:3236;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:nagvfcbbs-zvkrqfpevcgf";a:4:{i:0;R:3236;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:nagvfcbbs-gbbfubeg";a:4:{i:0;R:3236;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:nagvfcbbs-vtaber";a:4:{i:0;R:3236;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:evtug-bireevqr-nagvfcbbs";a:4:{i:0;R:3236;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:nffreg_rqvg_gvgyr";a:4:{i:0;s:14:"ext-assertedit";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:nffregrqvg-qrfp";a:4:{i:0;R:3257;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:nffreg_rqvg_zrffntr";a:4:{i:0;R:3257;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:7:"8:onory";a:4:{i:0;s:9:"ext-babel";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:12:"8:onory-qrfp";a:4:{i:0;R:3261;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:11:"8:onory-hey";a:4:{i:0;R:3261;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:onory-sbbgre-hey";a:4:{i:0;R:3261;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:onory-nhgbperngr-nobeg";a:4:{i:0;R:3261;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:onory-nhgbperngr-ernfba";a:4:{i:0;R:3261;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:onory-nhgbperngr-grkg-yriryf";a:4:{i:0;R:3261;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:onory-nhgbperngr-grkg-znva";a:4:{i:0;R:3261;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:onory-nhgbperngr-hfre";a:4:{i:0;R:3261;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:9:"8:onory-0";a:4:{i:0;R:3261;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:9:"8:onory-1";a:4:{i:0;R:3261;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:9:"8:onory-2";a:4:{i:0;R:3261;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:9:"8:onory-3";a:4:{i:0;R:3261;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:9:"8:onory-4";a:4:{i:0;R:3261;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:9:"8:onory-5";a:4:{i:0;R:3261;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:9:"8:onory-a";a:4:{i:0;R:3261;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:11:"8:onory-0-a";a:4:{i:0;R:3261;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:11:"8:onory-1-a";a:4:{i:0;R:3261;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:11:"8:onory-2-a";a:4:{i:0;R:3261;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:11:"8:onory-3-a";a:4:{i:0;R:3261;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:11:"8:onory-4-a";a:4:{i:0;R:3261;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:11:"8:onory-5-a";a:4:{i:0;R:3261;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:11:"8:onory-a-a";a:4:{i:0;R:3261;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:onory-obk-pryyfcnpvat";a:4:{i:0;R:3261;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:onory-obk-pryycnqqvat";a:4:{i:0;R:3261;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:onory-pryyfcnpvat";a:4:{i:0;R:3261;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:onory-pryycnqqvat";a:4:{i:0;R:3261;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:14:"8:onory-cbegny";a:4:{i:0;R:3261;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:onory-grzcyngr";a:4:{i:0;R:3261;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:14:"8:onory-sbbgre";a:4:{i:0;R:3261;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:14:"8:pngrtbelgerr";a:4:{i:0;s:16:"ext-categorytree";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:pngrtbelgerr-cbegyrg";a:4:{i:0;R:3292;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:pngrtbelgerr-yrtraq";a:4:{i:0;R:3292;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:pngrtbelgerr-qrfp";a:4:{i:0;R:3292;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:pngrtbelgerr-urnqre";a:4:{i:0;R:3292;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:pngrtbelgerr-pngrtbel";a:4:{i:0;R:3292;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:pngrtbelgerr-tb";a:4:{i:0;R:3292;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:pngrtbelgerr-cneragf";a:4:{i:0;R:3292;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pngrtbelgerr-zbqr-pngrtbevrf";a:4:{i:0;R:3292;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:pngrtbelgerr-zbqr-cntrf";a:4:{i:0;R:3292;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:pngrtbelgerr-zbqr-nyy";a:4:{i:0;R:3292;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:pngrtbelgerr-pbyyncfr";a:4:{i:0;R:3292;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:pngrtbelgerr-rkcnaq";a:4:{i:0;R:3292;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pngrtbelgerr-pbyyncfr-ohyyrg";a:4:{i:0;R:3292;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pngrtbelgerr-rkcnaq-ohyyrg";a:4:{i:0;R:3292;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:pngrtbelgerr-rzcgl-ohyyrg";a:4:{i:0;R:3292;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:pngrtbelgerr-cntr-ohyyrg";a:4:{i:0;R:3292;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pngrtbelgerr-zrzore-pbhagf";a:4:{i:0;R:3292;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:pngrtbelgerr-zrzore-ahz";a:4:{i:0;R:3292;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pngrtbelgerr-ahz-pngrtbevrf";a:4:{i:0;R:3292;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:pngrtbelgerr-ahz-cntrf";a:4:{i:0;R:3292;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:pngrtbelgerr-ahz-svyrf";a:4:{i:0;R:3292;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:pngrtbelgerr-ahz-rzcgl";a:4:{i:0;R:3292;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:pngrtbelgerr-ybnq";a:4:{i:0;R:3292;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:pngrtbelgerr-ybnqvat";a:4:{i:0;R:3292;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pngrtbelgerr-abguvat-sbhaq";a:4:{i:0;R:3292;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pngrtbelgerr-ab-fhopngrtbevrf";a:4:{i:0;R:3292;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:pngrtbelgerr-ab-cnerag-pngrtbevrf";a:4:{i:0;R:3292;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:pngrtbelgerr-ab-cntrf";a:4:{i:0;R:3292;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:pngrtbelgerr-abg-sbhaq";a:4:{i:0;R:3292;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:pngrtbelgerr-reebe";a:4:{i:0;R:3292;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:pngrtbelgerr-ergel";a:4:{i:0;R:3292;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:14:"8:zretrnppbhag";a:4:{i:0;s:15:"ext-centralauth";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:pragenynhgu-tebhcanzr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:pragenynhgu-qrfp";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pragenynhgu-nagvfcbbs-qrfp";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenynhgu-zretrnppbhag-qrfp";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:pragenynhgu-zretr-qravrq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenynhgu-zretr-abgybttrq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:pragenynhgu-zretr-jrypbzr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenynhgu-zretr-fgrc1-gvgyr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:pragenynhgu-zretr-fgrc1-qrgnvy";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:pragenynhgu-zretr-fgrc1-fhozvg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenynhgu-zretr-fgrc2-gvgyr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:pragenynhgu-zretr-fgrc2-qrgnvy";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:pragenynhgu-zretr-fgrc2-fhozvg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:pragenynhgu-zretr-qeleha-pbzcyrgr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:37:"8:pragenynhgu-zretr-qeleha-vapbzcyrgr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenynhgu-zretr-qeleha-be";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenynhgu-zretr-qeleha-ubzr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenynhgu-zretr-fgrc3-gvgyr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:pragenynhgu-zretr-fgrc3-qrgnvy";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:pragenynhgu-zretr-fgrc3-fhozvg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenynhgu-zretr-ab-nppbhagf";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:pragenynhgu-zretr-ubzr-cnffjbeq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:pragenynhgu-pbzcyrgr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:pragenynhgu-vapbzcyrgr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:pragenynhgu-pbzcyrgr-grkg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenynhgu-vapbzcyrgr-grkg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pragenynhgu-abg-bjare-grkg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:pragenynhgu-oybpxrq-grkg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:pragenynhgu-abgvpr-qeleha";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenynhgu-qvfnoyrq-qeleha";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:pragenynhgu-reebe-ybpxrq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:pragenynhgu-ernqzber-grkg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenynhgu-yvfg-ubzr-gvgyr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenynhgu-yvfg-ubzr-qeleha";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:pragenynhgu-yvfg-nggnpurq-gvgyr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:pragenynhgu-yvfg-nggnpurq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:pragenynhgu-yvfg-nggnpurq-qeleha";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:pragenynhgu-yvfg-hanggnpurq-gvgyr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenynhgu-yvfg-hanggnpurq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:pragenynhgu-sbervta-yvax";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:pragenynhgu-sbervta-pbagevohgvbaf";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:pragenynhgu-zretr-zrgubq-cevznel";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:pragenynhgu-zretr-zrgubq-rzcgl";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenynhgu-zretr-zrgubq-znvy";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:pragenynhgu-zretr-zrgubq-cnffjbeq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:pragenynhgu-zretr-zrgubq-nqzva";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenynhgu-zretr-zrgubq-arj";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:pragenynhgu-zretr-zrgubq-ybtva";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:pragenynhgu-zretr-zrgubq-cevznel-qrfp";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:37:"8:pragenynhgu-zretr-zrgubq-rzcgl-qrfp";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:pragenynhgu-zretr-zrgubq-znvy-qrfp";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:40:"8:pragenynhgu-zretr-zrgubq-cnffjbeq-qrfp";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:37:"8:pragenynhgu-zretr-zrgubq-nqzva-qrfp";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:pragenynhgu-zretr-zrgubq-arj-qrfp";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:37:"8:pragenynhgu-zretr-zrgubq-ybtva-qrfp";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:pragenynhgu-svavfu-gvgyr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:pragenynhgu-svavfu-grkg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenynhgu-svavfu-cnffjbeq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:pragenynhgu-svavfu-ybtva";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:pragenynhgu-svavfu-fraq-pbasvezngvba";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenynhgu-svavfu-ceboyrzf";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenynhgu-svavfu-abpbasvezf";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenynhgu-svavfu-vapbzcyrgr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:pragenynhgu-zretr-nggrzcg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:pragenynhgu-nggnpu-yvfg-nggnpurq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:pragenynhgu-nggnpu-gvgyr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:pragenynhgu-nggnpu-grkg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:pragenynhgu-nggnpu-fhozvg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pragenynhgu-nggnpu-fhpprff";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:13:"8:pragenynhgu";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:pragenynhgu-nqzva-vageb";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:pragenynhgu-nqzva-znantr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pragenynhgu-nqzva-hfreanzr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenynhgu-nqzva-ybbxhc-eb";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenynhgu-nqzva-ybbxhc-ej";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenynhgu-nqzva-crezvffvba";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenynhgu-nqzva-ab-havsvrq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenynhgu-nqzva-vasb-urnqre";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:pragenynhgu-nqzva-vasb-vq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:pragenynhgu-nqzva-vasb-ertvfgrerq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenynhgu-nqzva-vasb-ubzr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:pragenynhgu-nqzva-vasb-rqvgpbhag";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenynhgu-nqzva-vasb-ybpxrq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenynhgu-nqzva-vasb-uvqqra";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:pragenynhgu-nqzva-abubzr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:pragenynhgu-nqzva-lrf";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:pragenynhgu-nqzva-ab";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenynhgu-nqzva-uvqqra-yvfg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:pragenynhgu-nqzva-uvqqra-birefvtug";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:pragenynhgu-nqzva-yvfg-yrtraq-eb";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:pragenynhgu-nqzva-yvfg-yrtraq-ej";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenynhgu-nqzva-hanggnpurq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenynhgu-nqzva-abgoybpxrq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:pragenynhgu-nqzva-oybpxrq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:pragenynhgu-nqzva-oybpxrq-vaqrs";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pragenynhgu-nqzva-oybpxybt";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:pragenynhgu-nqzva-yvfg-ybpnyjvxv";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:pragenynhgu-nqzva-yvfg-nggnpurq-ba";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenynhgu-nqzva-yvfg-zrgubq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:pragenynhgu-nqzva-yvfg-rqvgpbhag";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:pragenynhgu-nqzva-yvfg-oybpxrq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:pragenynhgu-nqzva-hazretr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:pragenynhgu-nqzva-zretr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenynhgu-nqzva-onq-vachg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:pragenynhgu-nqzva-abar-fryrpgrq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:pragenynhgu-nqzva-nyernql-hazretrq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:pragenynhgu-nqzva-hazretr-fhpprff";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:pragenynhgu-nqzva-qryrgr-gvgyr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:pragenynhgu-nqzva-qryrgr-qrfpevcgvba";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:pragenynhgu-nqzva-qryrgr-ohggba";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:pragenynhgu-nqzva-qryrgr-fhpprff";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenynhgu-nqzva-abarkvfgrag";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:pragenynhgu-nqzva-qryrgr-abarkvfgrag";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pragenynhgu-gbxra-zvfzngpu";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:pragenynhgu-nqzva-ernfba";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:pragenynhgu-nqzva-ernfba-bgure";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:pragenynhgu-nqzva-hauvqr-abarkvfgrag";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:pragenynhgu-nqzva-fgnghf";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:pragenynhgu-nqzva-fgnghf-vageb";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:pragenynhgu-nqzva-fgnghf-ybpxrq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:pragenynhgu-nqzva-fgnghf-ybpxrq-ab";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:37:"8:pragenynhgu-nqzva-fgnghf-ybpxrq-lrf";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:pragenynhgu-nqzva-fgnghf-uvqqra";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:pragenynhgu-nqzva-fgnghf-uvqqra-ab";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:pragenynhgu-nqzva-fgnghf-uvqqra-yvfg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:43:"8:pragenynhgu-nqzva-fgnghf-uvqqra-birefvtug";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:pragenynhgu-nqzva-fgnghf-fhozvg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:pragenynhgu-nqzva-fgnghf-abarkvfgrag";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:37:"8:pragenynhgu-nqzva-frgfgnghf-fhpprff";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:pragenynhgu-nqzva-fgnghf-ernfbaf";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenynhgu-nqzva-ybtfavccrg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:pragenynhgu-nqzva-fhccerffernfba";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:13:"8:tybonyhfref";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenynhgu-yvfghfref-ybpxrq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:pragenynhgu-yvfghfref-nggnpurq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pragenynhgu-yvfghfref-vgrz";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenynhgu-yvfghfref-abybpny";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:pragenynhgu-frpbaqf-ntb";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:pragenynhgu-zvahgrf-ntb";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:pragenynhgu-ubhef-ntb";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:pragenynhgu-qnlf-ntb";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:pragenynhgu-zbaguf-ntb";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:pragenynhgu-lrnef-ntb";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:pragenynhgu-cersf-fgnghf";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenynhgu-cersf-abg-znantrq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenynhgu-cersf-hanggnpurq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pragenynhgu-cersf-pbzcyrgr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenynhgu-cersf-zvtengvba";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:pragenynhgu-cersf-pbhag-nggnpurq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:pragenynhgu-cersf-pbhag-hanggnpurq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:37:"8:pragenynhgu-cersf-qrgnvy-hanggnpurq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:pragenynhgu-cersf-znantr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:pragenynhgu-cersf-ivrj";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenynhgu-eranzrhfre-zretrq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:pragenynhgu-eranzrhfre-erfreirq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:pragenynhgu-vainyvq-jvxv";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pragenynhgu-nppbhag-rkvfgf";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:pragenynhgu-nppbhag-rkvfgf-erfrg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pragenynhgu-ybtva-cebterff";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenynhgu-ybtbhg-cebterff";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenynhgu-ybtva-ab-bguref";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenynhgu-ybtbhg-ab-bguref";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:pragenynhgu-uvqqra-oybpxernfba";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:pragenynhgu-ybt-anzr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:pragenynhgu-ybt-urnqre";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenynhgu-ybt-ragel-qryrgr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pragenynhgu-ybt-ragel-ybpx";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenynhgu-ybt-ragel-haybpx";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pragenynhgu-ybt-ragel-uvqr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenynhgu-ybt-ragel-hauvqr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:pragenynhgu-ybt-ragel-ybpxnaquvqr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:pragenynhgu-ybt-ragel-putfgnghf";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenynhgu-ybt-fgnghf-ybpxrq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenynhgu-ybt-fgnghf-uvqqra";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:pragenynhgu-ybt-fgnghf-birefvtugrq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenynhgu-ybt-fgnghf-abar";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pragenynhgu-evtugfybt-anzr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:40:"8:pragenynhgu-evtugfybt-ragel-hfretebhcf";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:40:"8:pragenynhgu-evtugfybt-ragel-tebhccrezf";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:41:"8:pragenynhgu-evtugfybt-ragel-tebhccrezf2";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:41:"8:pragenynhgu-evtugfybt-ragel-tebhccrezf3";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenynhgu-evtugfybt-urnqre";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:pragenynhgu-evtugfybt-ragel-arjfrg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:pragenynhgu-evtugfybt-ragel-frgeranzr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:40:"8:pragenynhgu-evtugfybt-ragel-frgarjglcr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:pragenynhgu-evtugfybt-ragel-frgpunatr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:pragenynhgu-evtugfybt-ragel-qryrgrfrg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:pragenynhgu-evtugfybt-frg-bcgva";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:pragenynhgu-evtugfybt-frg-bcgbhg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:11:"8:nhgbybtva";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pragenynhgu-nhgbybtva-qrfp";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:tybonytebhczrzorefuvc";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:tybonytebhccrezvffvbaf";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:40:"8:pragenynhgu-tybonytebhccrezf-tebhcyvfg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:44:"8:pragenynhgu-tybonytebhccrezf-tebhcyvfgvgrz";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:pragenynhgu-tybonytebhccrezf-abtebhcf";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:pragenynhgu-rkvfgvattebhc-yrtraq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenynhgu-arjtebhc-yrtraq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pragenynhgu-arjtebhc-vageb";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:43:"8:pragenynhgu-tybonytebhccrezf-arjtebhcanzr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:49:"8:pragenynhgu-tybonytebhccrezf-perngrtebhc-fhozvg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:pragenynhgu-rqvgtebhc-fhogvgyr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:pragenynhgu-rqvgtebhc-svryqfrg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pragenynhgu-rqvgtebhc-anzr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenynhgu-rqvgtebhc-qvfcynl";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:pragenynhgu-rqvgtebhc-qvfcynl-rqvg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenynhgu-rqvgtebhc-zrzore";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:pragenynhgu-rqvgtebhc-zrzore-rqvg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenynhgu-rqvgtebhc-zrzoref";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:pragenynhgu-rqvgtebhc-zrzoref-yvax";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:pragenynhgu-rqvgtebhc-erfgevpgvbaf";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenynhgu-rqvgtebhc-abfrg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenynhgu-rqvgtebhc-fhozvg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenynhgu-rqvgtebhc-crezf";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenynhgu-rqvgtebhc-ernfba";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenynhgu-rqvgtebhc-fhpprff";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:pragenynhgu-rqvgtebhc-fhpprff-grkg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:pragenynhgu-rqvgtebhc-rqvgfrgf";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:46:"8:pragenynhgu-tybonytebhccrezvffvbaf-xabjajvxv";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:48:"8:pragenynhgu-tybonytebhczrzorefuvc-onqxabjajvxv";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:pragenynhgu-rqvgfrg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenynhgu-rqvgfrg-yrtraq-ej";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenynhgu-rqvgfrg-yrtraq-eb";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenynhgu-rqvgfrg-vageb-ej";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenynhgu-rqvgfrg-vageb-eb";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenynhgu-rqvgfrg-vgrz-ej";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenynhgu-rqvgfrg-vgrz-eb";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:pragenynhgu-rqvgfrg-arj";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenynhgu-rqvgfrg-abgsbhaq";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:pragenynhgu-rqvgfrg-bcgva";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pragenynhgu-rqvgfrg-bcgbhg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:pragenynhgu-rqvgfrg-yrtraq-rqvg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:pragenynhgu-rqvgfrg-yrtraq-ivrj";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:pragenynhgu-rqvgfrg-yrtraq-arj";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:pragenynhgu-rqvgfrg-yrtraq-qryrgr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenynhgu-rqvgfrg-fhogvgyr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:pragenynhgu-rqvgfrg-anzr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:pragenynhgu-rqvgfrg-glcr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:pragenynhgu-rqvgfrg-jvxvf";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenynhgu-rqvgfrg-erfgjvxvf";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pragenynhgu-rqvgfrg-ernfba";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pragenynhgu-rqvgfrg-fhozvg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:pragenynhgu-rqvgfrg-fhozvg-qryrgr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenynhgu-rqvgfrg-onqanzr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenynhgu-rqvgfrg-onqglcr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenynhgu-rqvgfrg-frgrkvfgf";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenynhgu-rqvgfrg-abjvxvf";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenynhgu-rqvgfrg-tebhcyvax";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:pragenynhgu-rqvgfrg-abhfr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:pragenynhgu-rqvgfrg-hfntr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenynhgu-rqvgfrg-onqjvxvf";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenynhgu-rqvgfrg-fhpprff";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:pragenynhgu-rqvgfrg-fhpprff-qryrgr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pragenynhgu-rqvgfrg-erghea";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:pragenynhgu-ernqbayl";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:pragenynhgu-ernqbaylgrkg";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:evtug-tybonytebhczrzorefuvc";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:evtug-pragenynhgu-nhgbnppbhag";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:evtug-pragenynhgu-hazretr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:evtug-pragenynhgu-ybpx";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:evtug-pragenynhgu-birefvtug";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:evtug-pragenynhgu-zretr";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:evtug-tybonytebhccrezvffvbaf";a:4:{i:0;R:3325;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:15:"8:pragenyabgvpr";a:4:{i:0;s:17:"ext-centralnotice";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:abgvprgrzcyngr";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:onaarenyybpngvba";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:pragenyabgvprybtf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:evtug-pragenyabgvpr-nqzva";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:npgvba-pragenyabgvpr-nqzva";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:pragenyabgvpr-qrfp";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:pragenyabgvpr-fhzznel";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:pragenyabgvpr-dhrel";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:pragenyabgvpr-abgvpr-anzr";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:pragenyabgvpr-raq-qngr";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:pragenyabgvpr-ranoyrq";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:pragenyabgvpr-zbqvsl";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:pragenyabgvpr-ivrj";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:pragenyabgvpr-fnir-onaare";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:pragenyabgvpr-cerivrj";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:pragenyabgvpr-abcerivrj";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:pragenyabgvpr-nqq-arj";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:pragenyabgvpr-erzbir";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:pragenyabgvpr-genafyngr-urnqvat";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:pragenyabgvpr-znantr";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:pragenyabgvpr-znantr-grzcyngrf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:pragenyabgvpr-nqq";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:pragenyabgvpr-nqq-abgvpr";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:pragenyabgvpr-rqvg-abgvpr";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pragenyabgvpr-nqq-grzcyngr";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pragenyabgvpr-fubj-abgvprf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenyabgvpr-yvfg-grzcyngrf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:pragenyabgvpr-zhygvcyr-cebwrpgf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:pragenyabgvpr-zhygvcyr-ynathntrf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:pragenyabgvpr-zhygvcyr-pbhagevrf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pragenyabgvpr-nyy-cebwrpgf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:pragenyabgvpr-ynathntr-yvfgvat";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pragenyabgvpr-genafyngvbaf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pragenyabgvpr-genafyngr-gb";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:pragenyabgvpr-genafyngr";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:pragenyabgvpr-ratyvfu";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:pragenyabgvpr-onaare-anzr";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:pragenyabgvpr-onaare";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenyabgvpr-onaare-urnqvat";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:pragenyabgvpr-grzcyngrf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:pragenyabgvpr-jrvtug";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:pragenyabgvpr-ybpxrq";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:pragenyabgvpr-abgvpr";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenyabgvpr-abgvpr-urnqvat";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:pragenyabgvpr-abgvprf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenyabgvpr-abgvpr-rkvfgf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:pragenyabgvpr-ab-ynathntr";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:pragenyabgvpr-ab-cebwrpg";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenyabgvpr-grzcyngr-rkvfgf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:pragenyabgvpr-abgvpr-qbrfag-rkvfg";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:42:"8:pragenyabgvpr-erzbir-abgvpr-qbrfag-rkvfg";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:pragenyabgvpr-onaare-qbrfag-rkvfg";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:pragenyabgvpr-grzcyngr-fgvyy-obhaq";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenyabgvpr-grzcyngr-obql";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:pragenyabgvpr-qnl";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:pragenyabgvpr-lrne";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:pragenyabgvpr-zbagu";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:pragenyabgvpr-ubhef";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:pragenyabgvpr-zva";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pragenyabgvpr-cebwrpg-ynat";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:pragenyabgvpr-fryrpg";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:pragenyabgvpr-gbc-gra-ynathntrf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pragenyabgvpr-cebwrpg-anzr";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:pragenyabgvpr-fgneg-qngr";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:pragenyabgvpr-fgneg-gvzr";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:pragenyabgvpr-raq-gvzr";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:pragenyabgvpr-nffvtarq-grzcyngrf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pragenyabgvpr-ab-grzcyngrf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:37:"8:pragenyabgvpr-ab-grzcyngrf-nffvtarq";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:pragenyabgvpr-ninvynoyr-grzcyngrf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:pragenyabgvpr-grzcyngr-nyernql-rkvfgf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:pragenyabgvpr-cerivrj-grzcyngr";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:pragenyabgvpr-punatr-ynat";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:pragenyabgvpr-jrvtugf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:pragenyabgvpr-abgvpr-vf-ybpxrq";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:pragenyabgvpr-bireync";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:pragenyabgvpr-vainyvq-qngr-enatr";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:pragenyabgvpr-ahyy-fgevat";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenyabgvpr-pbasvez-qryrgr";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:pragenyabgvpr-ab-abgvprf-rkvfg";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:pragenyabgvpr-ab-grzcyngrf-genafyngr";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:pragenyabgvpr-ahzore-hfrf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:pragenyabgvpr-frggvatf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenyabgvpr-rqvg-grzcyngr";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:37:"8:pragenyabgvpr-rqvg-grzcyngr-fhzznel";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:pragenyabgvpr-zrffntr";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenyabgvpr-zrffntr-abg-frg";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:pragenyabgvpr-pybar";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pragenyabgvpr-pybar-abgvpr";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:pragenyabgvpr-pybar-anzr";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:49:"8:pragenyabgvpr-cerivrj-nyy-grzcyngr-genafyngvbaf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:pragenyabgvpr-vafreg";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:pragenyabgvpr-uvqr-ohggba";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenyabgvpr-pbyyncfr-ohggba";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenyabgvpr-rkcnaq-ohggba";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pragenyabgvpr-pybfr-ohggba";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:pragenyabgvpr-pybfr-gvgyr";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:pragenyabgvpr-genafyngr-ohggba";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenyabgvpr-qbangr-ohggba";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenyabgvpr-onaare-qvfcynl";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:pragenyabgvpr-onaare-nabalzbhf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:pragenyabgvpr-onaare-ybttrq-va";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:pragenyabgvpr-onaare-glcr";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenyabgvpr-onaare-uvqnoyr";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:pragenyabgvpr-onaare-pbyyncfvoyr";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:pragenyabgvpr-onaare-shaqenvfvat";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenyabgvpr-onaare-nhgbyvax";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:pragenyabgvpr-onaare-nhgbyvax-uryc";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:pragenyabgvpr-onaare-ynaqvat-cntrf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:pragenyabgvpr-trb";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:pragenyabgvpr-pbhagevrf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:pragenyabgvpr-nyybpngvba";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenyabgvpr-ivrj-nyybpngvba";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:pragenyabgvpr-nyybpngvba-vafgehpgvbaf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:pragenyabgvpr-ynathntrf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:pragenyabgvpr-ynathntr";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:pragenyabgvpr-cebwrpgf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:pragenyabgvpr-pbhagel";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenyabgvpr-ab-nyybpngvba";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:pragenyabgvpr-nyybpngvba-qrfpevcgvba";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:pragenyabgvpr-crepragntr";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:pragenyabgvpr-qbphzragjevgr-reebe";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:pragenyabgvpr-cersreerq";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:pragenyabgvpr-ybtf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:pragenyabgvpr-ivrj-ybtf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:pragenyabgvpr-gvzrfgnzc";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:pragenyabgvpr-hfre";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:pragenyabgvpr-npgvba";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenyabgvpr-npgvba-perngrq";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenyabgvpr-npgvba-zbqvsvrq";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenyabgvpr-npgvba-erzbirq";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:pragenyabgvpr-punatrq";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:pragenyabgvpr-ba";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:pragenyabgvpr-bss";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:pragenyabgvpr-nqqrq";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:pragenyabgvpr-erzbirq";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenyabgvpr-ab-nffvtazragf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:pragenyabgvpr-gnyx-yvax";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:pragenyabgvpr-hfre-yvaxf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:pragenyabgvpr-ybt-ynory";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:pragenyabgvpr-pnzcnvta-frggvatf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenyabgvpr-onaare-frggvatf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:pragenyabgvpr-naba";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:pragenyabgvpr-nppbhag";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:pragenyabgvpr-shaqenvfvat";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:pragenyabgvpr-nhgbyvax";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pragenyabgvpr-ynaqvatcntrf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pragenyabgvpr-onaare-pbagrag";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:pragenyabgvpr-onaare-pbagrag-punatrq";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:pragenyabgvpr-svygref";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:pragenyabgvpr-qngr";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenyabgvpr-nccyl-svygref";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pragenyabgvpr-pyrne-svygref";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pragenyabgvpr-onaare-zrffntrf";a:4:{i:0;R:3590;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:11:"8:pvgr-qrfp";a:4:{i:0;s:8:"ext-cite";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:12:"8:pvgr_pebnx";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pvgr_reebe_xrl_fge_vainyvq";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:pvgr_reebe_fgnpx_vainyvq_vachg";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:12:"8:pvgr_reebe";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pvgr_reebe_ers_ahzrevp_xrl";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:pvgr_reebe_ers_ab_xrl";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pvgr_reebe_ers_gbb_znal_xrlf";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:pvgr_reebe_ers_ab_vachg";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:42:"8:pvgr_reebe_ersreraprf_vainyvq_cnenzrgref";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:48:"8:pvgr_reebe_ersreraprf_vainyvq_cnenzrgref_tebhc";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:41:"8:pvgr_reebe_ersreraprf_ab_onpxyvax_ynory";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:pvgr_reebe_ab_yvax_ynory_tebhc";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pvgr_reebe_ersreraprf_ab_grkg";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:pvgr_reebe_vapyhqrq_ers";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:pvgr_reebe_ersf_jvgubhg_ersreraprf";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:42:"8:pvgr_reebe_tebhc_ersf_jvgubhg_ersreraprf";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:pvgr_reebe_ersreraprf_tebhc_zvfzngpu";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:37:"8:pvgr_reebe_ersreraprf_zvffvat_tebhc";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:pvgr_reebe_ersreraprf_zvffvat_xrl";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:pvgr_reebe_ersreraprf_ab_xrl";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:pvgr_reebe_rzcgl_ersreraprf_qrsvar";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:pvgr_ersrerapr_yvax_xrl_jvgu_ahz";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pvgr_ersrerapr_yvax_cersvk";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pvgr_ersrerapr_yvax_fhssvk";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pvgr_ersreraprf_yvax_cersvk";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:pvgr_ersreraprf_yvax_fhssvk";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:pvgr_ersrerapr_yvax";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:pvgr_ersreraprf_ab_yvax";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:pvgr_ersreraprf_yvax_bar";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:pvgr_ersreraprf_yvax_znal";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:pvgr_ersreraprf_yvax_znal_sbezng";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:50:"8:pvgr_ersreraprf_yvax_znal_sbezng_onpxyvax_ynoryf";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pvgr_ersreraprf_yvax_znal_frc";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:pvgr_ersreraprf_yvax_znal_naq";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:pvgr_ersreraprf_cersvk";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:pvgr_ersreraprf_fhssvk";a:4:{i:0;R:3746;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:pvgr_negvpyr_qrfp";a:4:{i:0;s:15:"ext-citespecial";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:pvgr_negvpyr_yvax";a:4:{i:0;R:3784;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:gbbygvc-pvgr-negvpyr";a:4:{i:0;R:3784;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:npprffxrl-pvgr-negvpyr";a:4:{i:0;R:3784;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:6:"8:pvgr";a:4:{i:0;R:3784;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:14:"8:pvgr-fhzznel";a:4:{i:0;R:3784;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:11:"8:pvgr_cntr";a:4:{i:0;R:3784;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:13:"8:pvgr_fhozvg";a:4:{i:0;R:3784;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:11:"8:pvgr_grkg";a:4:{i:0;R:3784;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:14:"8:pncgpun-rqvg";a:4:{i:0;s:15:"ext-confirmedit";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:14:"8:pncgpun-qrfp";a:4:{i:0;R:3794;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:pncgpun-nqqhey";a:4:{i:0;R:3794;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:pncgpun-onqybtva";a:4:{i:0;R:3794;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:pncgpun-perngrnppbhag";a:4:{i:0;R:3794;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pncgpun-perngrnppbhag-snvy";a:4:{i:0;R:3794;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:pncgpun-perngr";a:4:{i:0;R:3794;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:pncgpun-fraqrznvy";a:4:{i:0;R:3794;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:pncgpun-fraqrznvy-snvy";a:4:{i:0;R:3794;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:pncgpun-qvfnoyrqvancv";a:4:{i:0;R:3794;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:pncgpunuryc-gvgyr";a:4:{i:0;R:3794;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:pncgpunuryc-pbbxvrf-arrqrq";a:4:{i:0;R:3794;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:pncgpunuryc-grkg";a:4:{i:0;R:3794;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:pncgpun-nqqhey-juvgryvfg";a:4:{i:0;R:3794;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:evtug-fxvcpncgpun";a:4:{i:0;R:3794;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:snaplpncgpun-qrfp";a:4:{i:0;s:27:"ext-confirmeditfancycaptcha";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:snaplpncgpun-nqqhey";a:4:{i:0;R:3810;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:snaplpncgpun-onqybtva";a:4:{i:0;R:3810;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:snaplpncgpun-perngrnppbhag";a:4:{i:0;R:3810;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:snaplpncgpun-perngr";a:4:{i:0;R:3810;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:snaplpncgpun-rqvg";a:4:{i:0;R:3810;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:snaplpncgpun-fraqrznvy";a:4:{i:0;R:3810;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:15:"8:fvgrabgvpr_vq";a:4:{i:0;s:25:"ext-dismissablesitenotice";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:fvgrabgvpr_pybfr";a:4:{i:0;R:3818;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:fvgrabgvpr-qrfp";a:4:{i:0;R:3818;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:qbagfjvgpuzrbire-qrfp";a:4:{i:0;s:20:"ext-dontswitchmeover";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:qbagfjvgpuzrbire-cers";a:4:{i:0;R:3822;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:12:"8:ssrrq-qrfp";a:4:{i:0;s:17:"ext-featuredfeeds";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:15:"8:ssrrq-ab-srrq";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:ssrrq-srrq-abg-sbhaq";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:ssrrq-ragel-abg-sbhaq";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:ssrrq-fvqrone-frpgvba";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:ssrrq-vainyvq-gvzrfgnzc";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:ssrrq-ranoyr-fvqrone-yvaxf";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:ssrrq-srngherq-cntr";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:ssrrq-srngherq-gvgyr";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:ssrrq-srngherq-fubeg-gvgyr";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:ssrrq-srngherq-qrfp";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:ssrrq-srngherq-ragel";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:ssrrq-tbbq-cntr";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:ssrrq-tbbq-gvgyr";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:ssrrq-tbbq-fubeg-gvgyr";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:ssrrq-tbbq-qrfp";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:ssrrq-tbbq-ragel";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:ssrrq-baguvfqnl-cntr";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:ssrrq-baguvfqnl-gvgyr";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:ssrrq-baguvfqnl-fubeg-gvgyr";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:ssrrq-baguvfqnl-qrfp";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:ssrrq-baguvfqnl-ragel";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:ssrrq-qlx-cntr";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:ssrrq-qlx-gvgyr";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:ssrrq-qlx-fubeg-gvgyr";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:ssrrq-qlx-qrfp";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:ssrrq-qlx-ragel";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:ssrrq-zbgq-cntr";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:ssrrq-zbgq-gvgyr";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:ssrrq-zbgq-fubeg-gvgyr";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:ssrrq-zbgq-qrfp";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:ssrrq-zbgq-ragel";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:ssrrq-cbgq-cntr";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:ssrrq-cbgq-gvgyr";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:ssrrq-cbgq-fubeg-gvgyr";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:ssrrq-cbgq-qrfp";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:ssrrq-cbgq-ragel";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:ssrrq-dbgq-cntr";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:ssrrq-dbgq-gvgyr";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:ssrrq-dbgq-fubeg-gvgyr";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:ssrrq-dbgq-qrfp";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:ssrrq-dbgq-ragel";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:ssrrq-srngherqgrkgf-cntr";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:ssrrq-srngherqgrkgf-gvgyr";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:ssrrq-srngherqgrkgf-fubeg-gvgyr";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:ssrrq-srngherqgrkgf-qrfp";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:ssrrq-srngherqgrkgf-ragel";a:4:{i:0;R:3825;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:14:"8:tnqtrgf-qrfp";a:4:{i:0;s:11:"ext-gadgets";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:15:"8:cersf-tnqtrgf";a:4:{i:0;R:3873;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:tnqtrgf-cersfgrkg";a:4:{i:0;R:3873;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:9:"8:tnqtrgf";a:4:{i:0;R:3873;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:tnqtrgf-qrsvavgvba";a:4:{i:0;R:3873;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:15:"8:tnqtrgf-gvgyr";a:4:{i:0;R:3873;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:tnqtrgf-cntrgrkg";a:4:{i:0;R:3873;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:14:"8:tnqtrgf-hfrf";a:4:{i:0;R:3873;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:tnqtrgf-erdhverq-evtugf";a:4:{i:0;R:3873;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:tnqtrgf-erdhverq-fxvaf";a:4:{i:0;R:3873;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:tnqtrgf-qrsnhyg";a:4:{i:0;R:3873;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:tnqtrgf-rkcbeg";a:4:{i:0;R:3873;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:tnqtrgf-rkcbeg-gvgyr";a:4:{i:0;R:3873;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:tnqtrgf-abg-sbhaq";a:4:{i:0;R:3873;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:tnqtrgf-rkcbeg-grkg";a:4:{i:0;R:3873;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:tnqtrgf-rkcbeg-qbjaybnq";a:4:{i:0;R:3873;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:tybonyoybpxvat-qrfp";a:4:{i:0;s:18:"ext-globalblocking";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:tybonyoybpxvat-oybpx";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:tybonyoybpxvat-rkcvel-bcgvbaf";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:tybonyoybpxvat-zbqvsl-vageb";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:tybonyoybpxvat-oybpx-vageb";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:tybonyoybpxvat-oybpx-ernfba";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:tybonyoybpxvat-oybpx-bgureernfba";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:tybonyoybpxvat-oybpx-ernfbabgureyvfg";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:tybonyoybpxvat-oybpx-ernfba-qebcqbja";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:tybonyoybpxvat-oybpx-rqvg-qebcqbja";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:tybonyoybpxvat-oybpx-rkcvel";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:tybonyoybpxvat-oybpx-rkcvel-bgure";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:40:"8:tybonyoybpxvat-oybpx-rkcvel-bguresvryq";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:tybonyoybpxvat-oybpx-yrtraq";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:tybonyoybpxvat-oybpx-bcgvbaf";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:tybonyoybpxvat-vcnqqerff";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:tybonyoybpxvat-vconababayl";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:tybonyoybpxvat-oybpx-reebef";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:tybonyoybpxvat-oybpx-vcvainyvq";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:tybonyoybpxvat-oybpx-rkcvelvainyvq";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:tybonyoybpxvat-oybpx-fhozvg";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:tybonyoybpxvat-zbqvsl-fhozvg";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:tybonyoybpxvat-oybpx-fhpprff";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:tybonyoybpxvat-zbqvsl-fhpprff";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:tybonyoybpxvat-oybpx-fhpprfffho";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:tybonyoybpxvat-zbqvsl-fhpprfffho";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:37:"8:tybonyoybpxvat-oybpx-nyernqloybpxrq";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:tybonyoybpxvat-oybpx-ovtenatr";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:tybonyoybpxvat-yvfg-vageb";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:tybonyoybpxvat-yvfg";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:tybonyoybpxvat-frnepu-yrtraq";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:tybonyoybpxvat-frnepu-vc";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:tybonyoybpxvat-frnepu-fhozvg";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:tybonyoybpxvat-yvfg-vcvainyvq";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:tybonyoybpxvat-frnepu-reebef";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:tybonyoybpxvat-yvfg-oybpxvgrz";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:tybonyoybpxvat-yvfg-rkcvel";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:tybonyoybpxvat-yvfg-nababayl";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:tybonyoybpxvat-yvfg-haoybpx";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:tybonyoybpxvat-yvfg-juvgryvfgrq";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:tybonyoybpxvat-yvfg-juvgryvfg";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:tybonyoybpxvat-yvfg-zbqvsl";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:tybonyoybpxvat-yvfg-aberfhygf";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:tybonyoybpxvat-tbgb-oybpx";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:tybonyoybpxvat-tbgb-haoybpx";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:tybonyoybpxvat-tbgb-fgnghf";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:tybonyoybpxvat-erghea";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:tybonyoybpxvat-abgoybpxrq";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:tybonyoybpxvat-haoybpx";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:tybonyoybpxvat-haoybpx-vcvainyvq";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:tybonyoybpxvat-haoybpx-yrtraq";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:tybonyoybpxvat-haoybpx-fhozvg";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:tybonyoybpxvat-haoybpx-ernfba";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:tybonyoybpxvat-haoybpx-haoybpxrq";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:tybonyoybpxvat-haoybpx-reebef";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:tybonyoybpxvat-haoybpx-fhpprfffho";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:tybonyoybpxvat-haoybpx-fhogvgyr";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:tybonyoybpxvat-haoybpx-vageb";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:tybonyoybpxvat-juvgryvfg";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:37:"8:tybonyoybpxvat-juvgryvfg-abgnccyvrq";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:tybonyoybpxvat-juvgryvfg-yrtraq";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:tybonyoybpxvat-juvgryvfg-ernfba";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:tybonyoybpxvat-juvgryvfg-fgnghf";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:tybonyoybpxvat-juvgryvfg-fgnghfynory";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:tybonyoybpxvat-juvgryvfg-fhozvg";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:tybonyoybpxvat-juvgryvfg-juvgryvfgrq";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:40:"8:tybonyoybpxvat-juvgryvfg-qrjuvgryvfgrq";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:37:"8:tybonyoybpxvat-juvgryvfg-fhpprfffho";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:tybonyoybpxvat-juvgryvfg-abpunatr";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:tybonyoybpxvat-juvgryvfg-reebef";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:tybonyoybpxvat-juvgryvfg-vageb";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:tybonyoybpxvat-vcoybpxrq";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:tybonyoybpxvat-oybpxrq-abcnfferfrg";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:tybonyoybpxvat-ybtcntr";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:tybonyoybpxvat-ybtcntrgrkg";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:tybonyoybpxvat-oybpx-ybtragel";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:tybonyoybpxvat-oybpx2-ybtragel";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:tybonyoybpxvat-haoybpx-ybtragel";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:tybonyoybpxvat-juvgryvfg-ybtragel";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:37:"8:tybonyoybpxvat-qrjuvgryvfg-ybtragel";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:tybonyoybpxvat-zbqvsl-ybtragel";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:tybonyoybpxvat-ybtragel-rkcvel";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:tybonyoybpxvat-ybtragel-abrkcvel";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:tybonyoybpxvat-ybtyvax";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:tybonyoybpxvat-fubjybt";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:tybonyoybpxyvfg";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:13:"8:tybonyoybpx";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:tybonyoybpxfgnghf";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:erzbirtybonyoybpx";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:evtug-tybonyoybpx";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:npgvba-tybonyoybpx";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:evtug-tybonyhaoybpx";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:npgvba-tybonyhaoybpx";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:evtug-tybonyoybpx-juvgryvfg";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:npgvba-tybonyoybpx-juvgryvfg";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:evtug-tybonyoybpx-rkrzcg";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:npgvba-tybonyoybpx-rkrzcg";a:4:{i:0;R:3890;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:13:"8:tybonyhfntr";a:4:{i:0;s:15:"ext-globalusage";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:tybonyhfntr-sbe";a:4:{i:0;R:3988;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:tybonyhfntr-qrfp";a:4:{i:0;R:3988;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:tybonyhfntr-bx";a:4:{i:0;R:3988;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:tybonyhfntr-grkg";a:4:{i:0;R:3988;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:tybonyhfntr-ab-erfhygf";a:4:{i:0;R:3988;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:tybonyhfntr-ba-jvxv";a:4:{i:0;R:3988;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:tybonyhfntr-bs-svyr";a:4:{i:0;R:3988;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:tybonyhfntr-zber";a:4:{i:0;R:3988;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:tybonyhfntr-svygreybpny";a:4:{i:0;R:3988;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:15:"8:vzntrznc_qrfp";a:4:{i:0;s:12:"ext-imagemap";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:vzntrznc_ab_vzntr";a:4:{i:0;R:3999;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:vzntrznc_vainyvq_vzntr";a:4:{i:0;R:3999;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:vzntrznc_onq_vzntr";a:4:{i:0;R:3999;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:vzntrznc_ab_yvax";a:4:{i:0;R:3999;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:vzntrznc_vainyvq_gvgyr";a:4:{i:0;R:3999;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:vzntrznc_zvffvat_pbbeq";a:4:{i:0;R:3999;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:vzntrznc_haerpbtavfrq_funcr";a:4:{i:0;R:3999;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:vzntrznc_vainyvq_pbbeq";a:4:{i:0;R:3999;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:vzntrznc_vainyvq_qrfp";a:4:{i:0;R:3999;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:vzntrznc_qrfpevcgvba";a:4:{i:0;R:3999;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:vzntrznc_qrfp_glcrf";a:4:{i:0;R:3999;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:vzntrznc_cbyl_bqq";a:4:{i:0;R:3999;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:15:"8:vachgobk-qrfp";a:4:{i:0;s:12:"ext-inputbox";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:vachgobk-reebe-ab-glcr";a:4:{i:0;R:4013;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:vachgobk-reebe-onq-glcr";a:4:{i:0;R:4013;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:10:"8:gelrknpg";a:4:{i:0;R:4013;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:frnepushyygrkg";a:4:{i:0;R:4013;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:15:"8:perngrnegvpyr";a:4:{i:0;R:4013;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:vachgobk-af-znva";a:4:{i:0;R:4013;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:vagrefrpgvba-qrfp";a:4:{i:0;s:16:"ext-intersection";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:vagrefrpgvba_gbbznalpngf";a:4:{i:0;R:4021;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:vagrefrpgvba_aberfhygf";a:4:{i:0;R:4021;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:vagrefrpgvba_abvapyhqrpngf";a:4:{i:0;R:4021;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:zbovyr-sebagraq-qrfp";a:4:{i:0;s:18:"ext-mobilefrontend";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:zbovyr-sebagraq-frnepu-fhozvg";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:zbovyr-sebagraq-frnepu-erfhygf";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:zbovyr-sebagraq-ab-negvpyr-sbhaq";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:zbovyr-sebagraq-srngherq-negvpyr";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:zbovyr-sebagraq-va-gur-arjf";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:zbovyr-sebagraq-ubzr-ohggba";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:zbovyr-sebagraq-enaqbz-ohggba";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:40:"8:zbovyr-sebagraq-onpx-gb-gbc-bs-frpgvba";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:zbovyr-sebagraq-fubj-ohggba";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:zbovyr-sebagraq-uvqr-ohggba";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:zbovyr-sebagraq-rzcgl-ubzrcntr";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:zbovyr-sebagraq-qvfnoyr-ohggba";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:zbovyr-sebagraq-onpx-ohggba";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:zbovyr-sebagraq-erthyne-fvgr";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:zbovyr-sebagraq-reebe-cntr-gvgyr";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:zbovyr-sebagraq-reebe-cntr-grkg";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:zbovyr-sebagraq-ner-lbh-fher";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:zbovyr-sebagraq-rkcynva-qvfnoyr";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:zbovyr-sebagraq-ani-raq";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:zbovyr-sebagraq-ani-gbc";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zbovyr-sebagraq-ani-rqvg";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:zbovyr-sebagraq-ani-uvfgbel";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:zbovyr-sebagraq-frnepu-grkg";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:zbovyr-sebagraq-pbagnpg-hf";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:zbovyr-sebagraq-nhgube-yvax";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:zbovyr-sebagraq-qbjaybnq-shyy-irefvba";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:zbovyr-sebagraq-svyr-anzrfcnpr";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:zbovyr-sebagraq-jzy-pbagvahr";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zbovyr-sebagraq-jzy-onpx";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:zbovyr-sebagraq-ivrj";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:zbovyr-sebagraq-bcg-va-zrffntr";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:zbovyr-sebagraq-bcg-va-lrf-ohggba";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:zbovyr-sebagraq-bcg-va-ab-ohggba";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:zbovyr-sebagraq-bcg-va-gvgyr";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:zbovyr-sebagraq-bcg-va-rkcynva";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:zbovyr-sebagraq-bcg-bhg-zrffntr";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:zbovyr-sebagraq-bcg-bhg-lrf-ohggba";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:zbovyr-sebagraq-bcg-bhg-ab-ohggba";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:zbovyr-sebagraq-bcg-bhg-gvgyr";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:zbovyr-sebagraq-bcg-bhg-rkcynva";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:zbovyr-sebagraq-qvfnoyr-vzntrf";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:zbovyr-sebagraq-ranoyr-vzntrf";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:zbovyr-sebagraq-arjf-vgrzf";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:zbovyr-sebagraq-yrnir-srrqonpx-gvgyr";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:zbovyr-sebagraq-yrnir-srrqonpx-abgvpr";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:40:"8:zbovyr-sebagraq-yrnir-srrqonpx-fhowrpg";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:40:"8:zbovyr-sebagraq-yrnir-srrqonpx-zrffntr";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:zbovyr-sebagraq-yrnir-srrqonpx-pnapry";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:zbovyr-sebagraq-yrnir-srrqonpx-fhozvg";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:42:"8:zbovyr-sebagraq-yrnir-srrqonpx-yvax-grkg";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:zbovyr-sebagraq-yrnir-srrqonpx";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:zbovyr-sebagraq-srrqonpx-cntr";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:zbovyr-sebagraq-yrnir-srrqonpx-gunaxf";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zbovyr-sebagraq-ynathntr";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zbovyr-sebagraq-hfreanzr";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zbovyr-sebagraq-cnffjbeq";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:zbovyr-sebagraq-ybtva";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:zbovyr-sebagraq-cynprubyqre";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:zbovyr-sebagraq-qvfzvff-abgvsvpngvba";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:zbovyr-sebagraq-fbcn-abgvpr";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:zbovyr-sebagraq-pyrne-frnepu";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:zbovyr-sebagraq-cevinpl-yvax-grkg";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:zbovyr-sebagraq-nobhg-yvax-grkg";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:zbovyr-sebagraq-sbbgre-zber";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:zbovyr-sebagraq-sbbgre-yrff";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:zbovyr-sebagraq-sbbgre-fvgranzr";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:zbovyr-sebagraq-sbbgre-yvprafr";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:zbovyr-sebagraq-sbbgre-pbagnpg";a:4:{i:0;R:4026;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:arjhfrezrffntr-qrfp";a:4:{i:0;s:18:"ext-newusermessage";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:arjhfrerqvg-fhzznel";a:4:{i:0;R:4096;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:arjhfrezrffntr-grzcyngr";a:4:{i:0;R:4096;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:arjhfrezrffntr-grzcyngr-fhowrpg";a:4:{i:0;R:4096;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:arjhfrezrffntr-grzcyngr-obql";a:4:{i:0;R:4096;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:arjhfrezrffntr-rqvgbe";a:4:{i:0;R:4096;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:arjhfrezrffntr-fhofgvghgr";a:4:{i:0;R:4096;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:10:"8:btt-qrfp";a:4:{i:0;s:14:"ext-ogghandler";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:btt-fubeg-nhqvb";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:btt-fubeg-ivqrb";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:btt-fubeg-trareny";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:btt-ybat-nhqvb";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:btt-ybat-ivqrb";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:btt-ybat-zhygvcyrkrq";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:btt-ybat-trareny";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:btt-ybat-reebe";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:10:"8:btt-cynl";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:11:"8:btt-cnhfr";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:10:"8:btt-fgbc";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:btt-cynl-ivqrb";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:btt-cynl-fbhaq";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:15:"8:btt-ab-cynlre";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:15:"8:btt-ab-kvcudg";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:btt-cynlre-ivqrbryrzrag";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:btt-cynlre-bttcyhtva";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:btt-cynlre-pbegnqb";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:btt-cynlre-iyp-zbmvyyn";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:btt-cynlre-iyp-npgvirk";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:btt-cynlre-dhvpxgvzr-zbmvyyn";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:btt-cynlre-dhvpxgvzr-npgvirk";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:btt-cynlre-gbgrz";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:btt-cynlre-xzcynlre";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:btt-cynlre-xnssrvar";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:btt-cynlre-zcynlrecyht-va";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:btt-cynlre-guhzoanvy";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:btt-cynlre-fbhaqguhzo";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:btt-cynlre-fryrpgrq";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:btt-hfr-cynlre";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:10:"8:btt-zber";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:13:"8:btt-qvfzvff";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:14:"8:btt-qbjaybnq";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:15:"8:btt-qrfp-yvax";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:btt-bttguhzo-irefvba";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:btt-bttguhzo-snvyrq";a:4:{i:0;R:4104;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:10:"8:cqs-qrfp";a:4:{i:0;s:14:"ext-pdfhandler";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:cqs_ab_zrgnqngn";a:4:{i:0;R:4142;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:cqs_cntr_reebe";a:4:{i:0;R:4142;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:cbbypbhagre-qrfp";a:4:{i:0;s:15:"ext-poolcounter";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:cbbypbhagre-pbaarpgvba-reebe";a:4:{i:0;R:4146;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:cbbypbhagre-ernq-reebe";a:4:{i:0;R:4146;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:cbbypbhagre-jevgr-reebe";a:4:{i:0;R:4146;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:cbbypbhagre-erzbgr-reebe";a:4:{i:0;R:4146;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:11:"8:dhvm_qrfp";a:4:{i:0;s:8:"ext-quiz";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:dhvm_nqqrqcbvagf";a:4:{i:0;R:4152;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:dhvm_phgbsscbvagf";a:4:{i:0;R:4152;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:dhvm_vtaberpbrs";a:4:{i:0;R:4152;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:14:"8:dhvm_fuhssyr";a:4:{i:0;R:4152;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:dhvm_pbybeevtug";a:4:{i:0;R:4152;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:dhvm_pbybejebat";a:4:{i:0;R:4152;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:14:"8:dhvm_pbybean";a:4:{i:0;R:4152;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:dhvm_pbybereebe";a:4:{i:0;R:4152;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:dhvm_pbeerpgvba";a:4:{i:0;R:4152;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:12:"8:dhvm_fpber";a:4:{i:0;R:4152;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:13:"8:dhvm_cbvagf";a:4:{i:0;R:4152;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:12:"8:dhvm_erfrg";a:4:{i:0;R:4152;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:12:"8:eranzrhfre";a:4:{i:0;s:14:"ext-renameuser";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:eranzrhfre-yvaxbapbagevof";a:4:{i:0;R:4166;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:eranzrhfre-yvaxbapbagevof-grkg";a:4:{i:0;R:4166;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:eranzrhfre-qrfp";a:4:{i:0;R:4166;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:eranzrhfre-fhzznel";a:4:{i:0;R:4166;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:15:"8:eranzrhfrebyq";a:4:{i:0;R:4166;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:15:"8:eranzrhfrearj";a:4:{i:0;R:4166;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:eranzrhfreernfba";a:4:{i:0;R:4166;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:eranzrhfrezbir";a:4:{i:0;R:4166;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:eranzrhfrefhccerff";a:4:{i:0;R:4166;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:eranzrhfreerfreir";a:4:{i:0;R:4166;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:eranzrhfrejneavatf";a:4:{i:0;R:4166;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:eranzrhfrepbasvez";a:4:{i:0;R:4166;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:eranzrhfrefhozvg";a:4:{i:0;R:4166;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:eranzrhfrereebeqbrfabgrkvfg";a:4:{i:0;R:4166;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:eranzrhfrereeberkvfgf";a:4:{i:0;R:4166;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:eranzrhfrereebevainyvq";a:4:{i:0;R:4166;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:eranzrhfre-reebe-erdhrfg";a:4:{i:0;R:4166;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:eranzrhfre-reebe-fnzr-hfre";a:4:{i:0;R:4166;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:eranzrhfrefhpprff";a:4:{i:0;R:4166;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:eranzrhfre-cntr-rkvfgf";a:4:{i:0;R:4166;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:eranzrhfre-cntr-zbirq";a:4:{i:0;R:4166;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:eranzrhfre-cntr-hazbirq";a:4:{i:0;R:4166;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:eranzrhfreybtcntr";a:4:{i:0;R:4166;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:eranzrhfreybtcntrgrkg";a:4:{i:0;R:4166;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:eranzrhfreybtragel";a:4:{i:0;R:4166;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:eranzrhfre-ybt";a:4:{i:0;R:4166;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:eranzrhfre-zbir-ybt";a:4:{i:0;R:4166;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:npgvba-eranzrhfre";a:4:{i:0;R:4166;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:evtug-eranzrhfre";a:4:{i:0;R:4166;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:eranzrhfre-eranzrq-abgvpr";a:4:{i:0;R:4166;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:12:"8:frphercbyy";a:4:{i:0;s:14:"ext-securepoll";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:frphercbyy-qrfp";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:frphercbyy-vainyvq-cntr";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:frphercbyy-arrq-nqzva";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:frphercbyy-gbb-srj-cnenzf";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:frphercbyy-vainyvq-ryrpgvba";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:frphercbyy-jrypbzr";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:frphercbyy-abg-fgnegrq";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:frphercbyy-svavfurq";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:frphercbyy-abg-dhnyvsvrq";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:frphercbyy-punatr-qvfnyybjrq";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:frphercbyy-punatr-nyybjrq";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:frphercbyy-fhozvg";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:frphercbyy-tct-erprvcg";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:frphercbyy-gunaxf";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:frphercbyy-erghea";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:frphercbyy-rapelcg-reebe";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:frphercbyy-ab-tct-ubzr";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:frphercbyy-frperg-tct-reebe";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:frphercbyy-shyy-tct-reebe";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:frphercbyy-tct-pbasvt-reebe";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:frphercbyy-tct-cnefr-reebe";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:frphercbyy-ab-qrpelcgvba-xrl";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:frphercbyy-whzc";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:frphercbyy-onq-onyybg-fhozvffvba";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:frphercbyy-hanafjrerq-dhrfgvbaf";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:frphercbyy-vainyvq-enax";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:frphercbyy-haenaxrq-bcgvbaf";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:frphercbyy-vainyvq-fpber";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:frphercbyy-hanafjrerq-bcgvbaf";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:frphercbyy-erzbgr-nhgu-reebe";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:frphercbyy-erzbgr-cnefr-reebe";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:frphercbyy-ncv-vainyvq-cnenzf";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:frphercbyy-ncv-ab-hfre";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:frphercbyy-ncv-gbxra-zvfzngpu";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:frphercbyy-abg-ybttrq-va";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:frphercbyy-gbb-srj-rqvgf";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:frphercbyy-gbb-arj";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:frphercbyy-oybpxrq";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:frphercbyy-oybpxrq-pragenyyl";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:frphercbyy-obg";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:frphercbyy-abg-va-tebhc";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:frphercbyy-abg-va-yvfg";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:frphercbyy-phfgbz-hadhnyvsvrq";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:frphercbyy-yvfg-gvgyr";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:frphercbyy-urnqre-gvzrfgnzc";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:frphercbyy-urnqre-ibgre-anzr";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:frphercbyy-urnqre-ibgre-qbznva";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:frphercbyy-urnqre-vc";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:frphercbyy-urnqre-kss";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:frphercbyy-urnqre-hn";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:frphercbyy-urnqre-gbxra-zngpu";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:frphercbyy-urnqre-pbbxvr-qhc";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:frphercbyy-urnqre-fgevxr";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:frphercbyy-urnqre-qrgnvyf";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:frphercbyy-fgevxr-ohggba";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:frphercbyy-hafgevxr-ohggba";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:frphercbyy-fgevxr-ernfba";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:frphercbyy-fgevxr-pnapry";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:frphercbyy-fgevxr-reebe";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:frphercbyy-fgevxr-gbxra-zvfzngpu";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:frphercbyy-qrgnvyf-yvax";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:frphercbyy-ibgre-anzr-ybpny";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:frphercbyy-ibgre-anzr-erzbgr";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:frphercbyy-qrgnvyf-gvgyr";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:frphercbyy-vainyvq-ibgr";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:frphercbyy-urnqre-vq";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:frphercbyy-urnqre-ibgre-glcr";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:frphercbyy-urnqre-hey";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:frphercbyy-ibgre-cebcregvrf";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:frphercbyy-fgevxr-ybt";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:frphercbyy-urnqre-npgvba";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:frphercbyy-urnqre-ernfba";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:frphercbyy-urnqre-nqzva";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:frphercbyy-pbbxvr-qhc-yvfg";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:frphercbyy-qhzc-gvgyr";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:frphercbyy-qhzc-ab-pelcg";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:frphercbyy-qhzc-abg-svavfurq";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:frphercbyy-qhzc-ab-henaqbz";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:frphercbyy-henaqbz-abg-fhccbegrq";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:frphercbyy-genafyngr-gvgyr";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:frphercbyy-vainyvq-ynathntr";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:frphercbyy-urnqre-genaf-vq";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:frphercbyy-fhozvg-genafyngr";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:frphercbyy-ynathntr-ynory";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:frphercbyy-fhozvg-fryrpg-ynat";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:frphercbyy-ragel-grkg";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:frphercbyy-urnqre-gvgyr";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:frphercbyy-urnqre-fgneg-qngr";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:frphercbyy-urnqre-raq-qngr";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:frphercbyy-fhocntr-ibgr";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:frphercbyy-fhocntr-genafyngr";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:frphercbyy-fhocntr-yvfg";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:frphercbyy-fhocntr-qhzc";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:frphercbyy-fhocntr-gnyyl";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:frphercbyy-gnyyl-gvgyr";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:frphercbyy-gnyyl-abg-svavfurq";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:frphercbyy-pna-qrpelcg";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:frphercbyy-gnyyl-ab-xrl";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:frphercbyy-gnyyl-ybpny-yrtraq";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:frphercbyy-gnyyl-ybpny-fhozvg";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:frphercbyy-gnyyl-hcybnq-yrtraq";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:frphercbyy-gnyyl-hcybnq-fhozvg";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:frphercbyy-gnyyl-reebe";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:frphercbyy-ab-hcybnq";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:frphercbyy-qhzc-pbeehcg";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:frphercbyy-gnyyl-hcybnq-reebe";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:frphercbyy-cnvejvfr-ivpgbevrf";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:frphercbyy-fgeratgu-zngevk";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:frphercbyy-enaxf";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:frphercbyy-nirentr-fpber";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:frphercbyy-ebhaq";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:frphercbyy-fcbvyg";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:frphercbyy-rkunhfgrq";a:4:{i:0;R:4198;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:fvzcyrnagvfcnz";a:4:{i:0;s:18:"ext-simpleantispam";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:fvzcyrnagvfcnz-ynory";a:4:{i:0;R:4313;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:fvzcyrnagvfcnz-qrfp";a:4:{i:0;R:4313;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:12:"8:fvgrzngevk";a:4:{i:0;s:14:"ext-sitematrix";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:fvgrzngevk-fhzznel";a:4:{i:0;R:4317;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:fvgrzngevk-qrfp";a:4:{i:0;R:4317;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:fvgrzngevk-ynathntr";a:4:{i:0;R:4317;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:fvgrzngevk-cebwrpg";a:4:{i:0;R:4317;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:fvgrzngevk-bguref";a:4:{i:0;R:4317;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:fvgrzngevk-bgure-cebwrpgf";a:4:{i:0;R:4317;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:fvgrzngevk-gbgny";a:4:{i:0;R:4317;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:fvgrzngevk-fvgrgbgny";a:4:{i:0;R:4317;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:fvgrzngevk-cevingr";a:4:{i:0;R:4317;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:fvgrzngevk-svfuobjy";a:4:{i:0;R:4317;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:fcnz-oynpxyvfg";a:4:{i:0;s:21:"ext-spamexclusionlist";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:fcnz-juvgryvfg";a:4:{i:0;R:4329;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:rznvy-oynpxyvfg";a:4:{i:0;R:4329;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:rznvy-juvgryvfg";a:4:{i:0;R:4329;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:fcnz-oynpxyvfgrq-rznvy";a:4:{i:0;R:4329;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:fcnz-oynpxyvfgrq-rznvy-grkg";a:4:{i:0;R:4329;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:fcnz-oynpxyvfgrq-rznvy-fvtahc";a:4:{i:0;R:4329;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:fcnz-vainyvq-yvarf";a:4:{i:0;R:4329;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:fcnz-oynpxyvfg-qrfp";a:4:{i:0;R:4329;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:15:"8:gvzryvar-qrfp";a:4:{i:0;s:12:"ext-timeline";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:gvzryvar-vainyvqznc";a:4:{i:0;R:4339;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:gvgyroynpxyvfg-qrfp";a:4:{i:0;s:22:"ext-titleexclusionlist";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:gvgyroynpxyvfg";a:4:{i:0;R:4342;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:gvgyrjuvgryvfg";a:4:{i:0;R:4342;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:gvgyroynpxyvfg-sbeovqqra-rqvg";a:4:{i:0;R:4342;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:gvgyroynpxyvfg-sbeovqqra-zbir";a:4:{i:0;R:4342;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:gvgyroynpxyvfg-sbeovqqra-hcybnq";a:4:{i:0;R:4342;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:gvgyroynpxyvfg-sbeovqqra-arj-nppbhag";a:4:{i:0;R:4342;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:gvgyroynpxyvfg-vainyvq";a:4:{i:0;R:4342;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:gvgyroynpxyvfg-bireevqr";a:4:{i:0;R:4342;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:evtug-gobireevqr";a:4:{i:0;R:4342;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:evtug-gobireevqr-nppbhag";a:4:{i:0;R:4342;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:15:"8:gbeoybpx-qrfp";a:4:{i:0;s:12:"ext-torblock";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:gbeoybpx-oybpxrq";a:4:{i:0;R:4354;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:gbeoybpx-vfrkvgabqr";a:4:{i:0;R:4354;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:evtug-gbehaoybpxrq";a:4:{i:0;R:4354;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:gnt-gbe-qrfpevcgvba";a:4:{i:0;R:4354;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:9:"8:gnt-gbe";a:4:{i:0;R:4354;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:45:"8:nohfrsvygre-rqvg-ohvyqre-inef-gbe-rkvg-abqr";a:4:{i:0;R:4354;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:14:"8:hcybnqjvmneq";a:4:{i:0;s:16:"ext-uploadwizard";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:hcybnqjvmneq-qrfp";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:zjr-hcjvm-hcybnqpnzcnvtaf";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zjr-hcjvm-hcybnqpnzcnvta";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:evtug-hcjvmpnzcnvtaf";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:npgvba-hcjvmpnzcnvtaf";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:tebhc-hcjvmpnzcrqvgbef";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:tebhc-hcjvmpnzcrqvgbef-zrzore";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:tebhccntr-hcjvmpnzcrqvgbef";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:tebhc-hcjvmpnzcrqvgbef.pff";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:tebhc-hcjvmpnzcrqvgbef.wf";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:zjr-hcjvm-wf-bss";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:zjr-hcjvm-rkgrafvba-qvfnoyrq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:zjr-hcjvm-pbqr-haxabja";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:zjr-hcjvm-fgrc-ghgbevny";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:zjr-hcjvm-fgrc-svyr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:zjr-hcjvm-fgrc-qrrqf";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:zjr-hcjvm-fgrc-qrgnvyf";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:zjr-hcjvm-fgrc-gunaxf";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:zjr-hcjvm-ncv-jneavat-rkvfgf";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:zjr-hcjvm-ncv-jneavat-jnf-qryrgrq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:49:"8:zjr-hcjvm-ghgbevny-reebe-ybpnyvmrq-svyr-zvffvat";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:zjr-hcjvm-ghgbevny-reebe-svyr-zvffvat";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:43:"8:zjr-hcjvm-ghgbevny-reebe-pnaabg-genafsbez";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:zjr-hcjvm-uryc-qrfx";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:zjr-hcjvm-uryc-qrfx-hey";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:zjr-hcjvm-nqq-svyr-a";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:zjr-hcjvm-nqq-svyr-0-serr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:zjr-hcjvm-genafcbeg-fgnegrq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:zjr-hcjvm-hcybnqvat";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:zjr-hcjvm-genafcbegrq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zjr-hcjvm-fgnfurq-hcybnq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:zjr-hcjvm-trggvat-zrgnqngn";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:zjr-hcjvm-fhozvggvat-qrgnvyf";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:zjr-hcjvm-choyvfurq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:zjr-hcjvm-snvyrq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:zjr-hcjvm-erzbir";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:zjr-hcjvm-erzbir-hcybnq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:zjr-hcjvm-fubj-guhzo";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zjr-hcjvm-fubj-guhzo-gvc";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:zjr-hcjvm-erzbir-qrfpevcgvba";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:zjr-hcjvm-hcybnq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:zjr-hcjvm-svyr-nyy-bx";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:zjr-hcjvm-svyr-fbzr-snvyrq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:zjr-hcjvm-svyr-ergel";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:zjr-hcjvm-arkg-svyr-qrfcvgr-snvyherf";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:zjr-hcjvm-fxvc-ghgbevny-shgher";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:zjr-hcjvm-svyr-nyy-snvyrq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:zjr-hcjvm-hcybnq-pbhag";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:zjr-hcjvm-cebterffone-hcybnqvat";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:zjr-hcjvm-svavfurq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zjr-hcjvm-frpf-erznvavat";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:zjr-hcjvm-zvaf-frpf-erznvavat";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:zjr-hcjvm-uef-zvaf-frpf-erznvavat";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:zjr-hcjvm-qrrqf-znpeb-cebzcg";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:zjr-hcjvm-qrrqf-phfgbz-cebzcg";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zjr-hcjvm-fbhepr-bjajbex";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:45:"8:zjr-hcjvm-fbhepr-bjajbex-nffreg-nal-yvprafr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:zjr-hcjvm-fbhepr-bjajbex-nffreg";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:46:"8:zjr-hcjvm-fbhepr-bjajbex-nffreg-pp-ol-fn-3.0";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:47:"8:zjr-hcjvm-fbhepr-bjajbex-pp-ol-fn-3.0-rkcynva";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:43:"8:zjr-hcjvm-fbhepr-bjajbex-nffreg-pp-ol-3.0";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:44:"8:zjr-hcjvm-fbhepr-bjajbex-pp-ol-3.0-rkcynva";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:41:"8:zjr-hcjvm-fbhepr-bjajbex-nffreg-pp-mreb";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:42:"8:zjr-hcjvm-fbhepr-bjajbex-pp-mreb-rkcynva";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:40:"8:zjr-hcjvm-fbhepr-bjajbex-nffreg-phfgbz";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:zjr-hcjvm-fbhepr-bjajbex-nffreg-abgr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:zjr-hcjvm-fbhepr-crezvffvba";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:zjr-hcjvm-fbhepr-guveqcnegl";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:zjr-hcjvm-fbhepr-guveqcnegl-vageb";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:51:"8:zjr-hcjvm-fbhepr-guveqcnegl-phfgbz-zhygvcyr-vageb";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:37:"8:zjr-hcjvm-fbhepr-guveqcnegl-yvprafr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:zjr-hcjvm-fbhepr-guveqcnegl-pnfrf";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:zjr-hcjvm-fbhepr-guveqcnegl-npprcg";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:zjr-hcjvm-fbhepr-phfgbz";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:zjr-hcjvm-zber-bcgvbaf";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:zjr-hcjvm-srjre-bcgvbaf";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:zjr-hcjvm-qrfp";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:zjr-hcjvm-qrfp-nqq-a";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:zjr-hcjvm-qrfp-nqq-0";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:zjr-hcjvm-gvgyr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:zjr-hcjvm-zrqvn-glcr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:zjr-hcjvm-qngr-perngrq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:zjr-hcjvm-ybpngvba";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:zjr-hcjvm-ybpngvba-yng";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:zjr-hcjvm-ybpngvba-yba";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:zjr-hcjvm-ybpngvba-nyg";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zjr-hcjvm-pbclevtug-vasb";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:zjr-hcjvm-nhgube";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:zjr-hcjvm-nhgbpbairegrq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:zjr-hcjvm-bgure";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:zjr-hcjvm-fbhepr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:zjr-hcjvm-gunaxf-vageb";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zjr-hcjvm-gunaxf-rkcynva";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:zjr-hcjvm-gunaxf-jvxvgrkg";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:zjr-hcjvm-gunaxf-hey";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:47:"8:zjr-hcjvm-hcybnq-reebe-onq-svyranzr-rkgrafvba";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:53:"8:zjr-hcjvm-hcybnq-reebe-onq-rkgrafvba-ivqrb-sversbtt";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:50:"8:zjr-hcjvm-hcybnq-reebe-onq-svyranzr-ab-rkgrafvba";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:49:"8:zjr-hcjvm-hcybnq-reebe-qhcyvpngr-svyranzr-reebe";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:zjr-hcjvm-nyybjrq-svyranzr-rkgrafvbaf";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:44:"8:zjr-hcjvm-uryc-nyybjrq-svyranzr-rkgrafvbaf";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:zjr-hcjvm-hcybnq-reebe-qhcyvpngr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:zjr-hcjvm-hcybnq-reebe-fgnfurq-naljnl";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:47:"8:zjr-hcjvm-hcybnq-reebe-haxabja-svyranzr-reebe";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:14:"8:zjr-hcjvm-bx";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:zjr-hcjvm-pnapry";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:zjr-hcjvm-svyrrkvfgf-ercynpr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:zjr-hcjvm-svyrrkvfgf";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:zjr-hcjvm-svyrrkvfgf-ercynpr-ba-cntr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:zjr-hcjvm-svyrrkvfgf-ercynpr-ab-yvax";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:zjr-hcjvm-oynpxyvfgrq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zjr-hcjvm-guhzoanvy-zber";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:zjr-hcjvm-birejevgr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:zjr-hcjvm-arkg";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:zjr-hcjvm-arkg-svyr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:zjr-hcjvm-arkg-qrrqf";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:zjr-hcjvm-arkg-qrgnvyf";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:zjr-hcjvm-ubzr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zjr-hcjvm-hcybnq-nabgure";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:zjr-cerirag-pybfr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:zjr-hcjvm-cerirag-pybfr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zjr-hcjvm-svyrf-pbzcyrgr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zjr-hcjvm-gbbygvc-nhgube";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zjr-hcjvm-gbbygvc-fbhepr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:zjr-hcjvm-gbbygvc-fvta";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:zjr-hcjvm-gbbygvc-gvgyr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:zjr-hcjvm-gbbygvc-qrfpevcgvba";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:zjr-hcjvm-gbbygvc-qngr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:zjr-hcjvm-gbbygvc-pngrtbevrf";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:zjr-hcjvm-gbbygvc-bgure";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:zjr-hcjvm-gbbygvc-ybpngvba";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:zjr-hcjvm-gbbygvc-zber-vasb";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zjr-hcjvm-svyr-arrq-svyr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:zjr-hcjvm-qrrqf-arrq-qrrq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:zjr-hcjvm-qrrqf-arrq-yvprafr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:zjr-hcjvm-yvprafr-fubj-nyy";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:zjr-hcjvm-yvprafr-fubj-erpbzzraqrq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:zjr-hcjvm-reebe-fvtangher-oynax";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zjr-hcjvm-reebe-yngvghqr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:zjr-hcjvm-reebe-ybatvghqr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zjr-hcjvm-reebe-nygvghqr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:zjr-hcjvm-reebe-fvtangher-gbb-ybat";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:37:"8:zjr-hcjvm-reebe-fvtangher-gbb-fubeg";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:37:"8:zjr-hcjvm-reebe-fvtangher-onq-punef";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:zjr-hcjvm-reebe-oynax";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zjr-hcjvm-reebe-gbb-ybat";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:zjr-hcjvm-reebe-gbb-fubeg";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:zjr-hcjvm-reebe-onq-punef";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:zjr-hcjvm-reebe-qngr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:zjr-hcjvm-reebe-gvgyr-oynpxyvfgrq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:zjr-hcjvm-reebe-gvgyr-onqpunef";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:42:"8:zjr-hcjvm-reebe-gvgyr-frafryrffvzntranzr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:zjr-hcjvm-reebe-gvgyr-ubfgvat";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:zjr-hcjvm-reebe-gvgyr-guhzoanvy";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:51:"8:zjr-hcjvm-reebe-gvgyr-svyrrkvfgf-funerq-sbeovqqra";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:41:"8:zjr-hcjvm-reebe-gvgyr-qbhoyr-ncbfgebcur";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:zjr-hcjvm-reebe-gvgyr-rkgrafvba";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:42:"8:zjr-hcjvm-reebe-yvprafr-jvxvgrkg-zvffvat";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:44:"8:zjr-hcjvm-reebe-yvprafr-jvxvgrkg-gbb-fubeg";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:43:"8:zjr-hcjvm-reebe-yvprafr-jvxvgrkg-gbb-ybat";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:42:"8:zjr-hcjvm-reebe-yvprafr-jvxvgrkg-vainyvq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:zjr-hcjvm-qrgnvyf-reebe-pbhag";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:zjr-hcjvm-gbb-znal-svyrf-bx";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:zjr-hcjvm-gbb-znal-svyrf-grkg";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zjr-hcjvm-gbb-znal-svyrf";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:zjr-hcjvm-yvprafr-pp-ol-fn-3.0";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:zjr-hcjvm-yvprafr-pp-ol-fn-3.0-ng";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:zjr-hcjvm-yvprafr-pp-ol-fn-3.0-qr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:zjr-hcjvm-yvprafr-pp-ol-fn-3.0-rr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:zjr-hcjvm-yvprafr-pp-ol-fn-3.0-rf";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:zjr-hcjvm-yvprafr-pp-ol-fn-3.0-ue";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:zjr-hcjvm-yvprafr-pp-ol-fn-3.0-yh";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:zjr-hcjvm-yvprafr-pp-ol-fn-3.0-ay";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:zjr-hcjvm-yvprafr-pp-ol-fn-3.0-ab";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:zjr-hcjvm-yvprafr-pp-ol-fn-3.0-cy";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:zjr-hcjvm-yvprafr-pp-ol-fn-3.0-eb";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:zjr-hcjvm-yvprafr-pp-ol-3.0";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:zjr-hcjvm-yvprafr-pp-ol-fn-2.5";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:zjr-hcjvm-yvprafr-pp-ol-2.5";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:zjr-hcjvm-yvprafr-pp-ol-fn-2.0";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:zjr-hcjvm-yvprafr-pp-ol-2.0";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:zjr-hcjvm-yvprafr-pp-mreb";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zjr-hcjvm-yvprafr-phfgbz";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:zjr-hcjvm-yvprafr-sny";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zjr-hcjvm-yvprafr-bja-cq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:zjr-hcjvm-yvprafr-cq-byq-100";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zjr-hcjvm-yvprafr-cq-byq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zjr-hcjvm-yvprafr-cq-neg";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:zjr-hcjvm-yvprafr-cq-hf";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:zjr-hcjvm-yvprafr-cq-hftbi";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:zjr-hcjvm-yvprafr-cq-hftbi-anfn";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:42:"8:zjr-hcjvm-yvprafr-cq-hftbi-zvyvgnel-anil";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:zjr-hcjvm-yvprafr-cq-varyvtvoyr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:zjr-hcjvm-yvprafr-cq-varyvtvoyr-uryc";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:zjr-hcjvm-yvprafr-cq-grkgybtb";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:40:"8:zjr-hcjvm-yvprafr-pbclevtugrq-serr-hfr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:zjr-hcjvm-yvprafr-nggevohgvba";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:zjr-hcjvm-yvprafr-tsqy";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:37:"8:zjr-hcjvm-yvprafr-pp-ol-fn-3.0-tsqy";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:zjr-hcjvm-yvprafr-pp-urnq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:zjr-hcjvm-yvprafr-pp-fhournq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:zjr-hcjvm-yvprafr-syvpxe-urnq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:zjr-hcjvm-yvprafr-syvpxe-fhournq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:42:"8:zjr-hcjvm-yvprafr-choyvp-qbznva-hfn-urnq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:45:"8:zjr-hcjvm-yvprafr-choyvp-qbznva-hfn-fhournq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:zjr-hcjvm-yvprafr-hftbi-urnq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:zjr-hcjvm-yvprafr-zvfp";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:zjr-hcjvm-yvprafr-phfgbz-urnq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:zjr-hcjvm-yvprafr-phfgbz-cerivrj";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:zjr-hcjvm-yvprafr-abar-urnq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:zjr-hcjvm-yvprafr-abar";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:zjr-hcjvm-yvprafr-pbasvez-erzbir";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:40:"8:zjr-hcjvm-yvprafr-pbasvez-erzbir-gvgyr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:zjr-hcjvm-yvprafr-rkgreany";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:zjr-hcjvm-yvprafr-rkgreany-vainyvq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:zjr-hcjvm-pngrtbevrf";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zjr-hcjvm-pngrtbevrf-nqq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:zjr-hcjvm-pngrtbel-erzbir";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zjr-hcjvm-gunaxf-pncgvba";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:zjr-hcjvm-guhzoanvy-snvyrq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:zjr-hcjvm-hacnefrnoyr-svyranzr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:zjr-hcjvm-vzntr-cerivrj";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:zjr-hcjvm-fhournq-zrffntr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:zjr-hcjvm-fhournq-ohtf";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:zjr-hcjvm-fhournq-genafyngr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:zjr-hcjvm-fhournq-nyg-hcybnq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:zjr-hcjvm-srrqonpx-cebzcg";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zjr-hcjvm-srrqonpx-gvgyr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:44:"8:zjr-hcjvm-srrqonpx-oynpxyvfg-ercbeg-cebzcg";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:42:"8:zjr-hcjvm-srrqonpx-oynpxyvfg-vasb-cebzcg";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:41:"8:zjr-hcjvm-srrqonpx-oynpxyvfg-yvar-vageb";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:zjr-hcjvm-srrqonpx-oynpxyvfg-fhowrpg";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:zjr-hcjvm-reebeqvnybt-gvgyr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zjr-hcjvm-reebeqvnybt-bx";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:zjr-hcjvm-reebe-abfhpupnzcnvta";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:zjr-hcjvm-reebe-pnzcnvtaqvfnoyrq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zjr-hcjvm-pnzcnvtaf-anzr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:zjr-hcjvm-pnzcnvtaf-fgnghf";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:zjr-hcjvm-pnzcnvtaf-ranoyrq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:zjr-hcjvm-pnzcnvtaf-qvfnoyrq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:zjr-hcjvm-pnzcnvtaf-rqvg";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:zjr-hcjvm-pnzcnvtaf-nqq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:zjr-hcjvm-pnzcnvtaf-nqqarj";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:zjr-hcjvm-pnzcnvtaf-arjanzr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:zjr-hcjvm-pnzcnvtaf-anzrqbp";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:zjr-hcjvm-pnzcnvtaf-rkvfgvat";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:zjr-hcjvm-pnzcnvtaf-rqvgvat";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:zjr-hcjvm-pnzcnvtaf-qryrgr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:zjr-hcjvm-pnzcnvtaf-pbasqry";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:zjr-hcjvm-pnzcnvtaf-qryrgr-snvyrq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:zjr-hcjvm-pnzcnvtaf-pbasvez-qryrgr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:hcybnqpnzcnvta-yrtraq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:hcybnqpnzcnvta-grkg";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:zjr-hcjvm-pnzcnvta-anzr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:zjr-hcjvm-pnzcnvta-ranoyrq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:zjr-hcjvm-pnzcnvta-pbas-fxvcghgbevny";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:40:"8:zjr-hcjvm-pnzcnvta-pbas-nhgbpngrtbevrf";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:43:"8:zjr-hcjvm-pnzcnvta-pbas-qrsnhygpngrtbevrf";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:zjr-hcjvm-pnzcnvta-pbas-nhgbjvxvgrkg";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:zjr-hcjvm-pnzcnvta-pbas-bjajbexbcgvba";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:zjr-hcjvm-pnzcnvta-bjare-pubvpr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:zjr-hcjvm-pnzcnvta-bjare-bja";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:zjr-hcjvm-pnzcnvta-bjare-abgbja";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:41:"8:zjr-hcjvm-pnzcnvta-pbas-yvprafrfbjajbex";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:42:"8:zjr-hcjvm-pnzcnvta-pbas-ghgbevnygrzcyngr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:zjr-hcjvm-pnzcnvta-pbas-ghgbevnyjvqgu";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:48:"8:zjr-hcjvm-pnzcnvta-pbas-ghgbevnyurycqrfxpbbeqf";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:47:"8:zjr-hcjvm-pnzcnvta-pbas-qrsnhygbjajbexyvprapr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:zjr-hcjvm-pnzcnvta-pbas-vqsvryq";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:zjr-hcjvm-pnzcnvta-pbas-vqsvryqynory";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:42:"8:zjr-hcjvm-pnzcnvta-pbas-vqsvryqynorycntr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:45:"8:zjr-hcjvm-pnzcnvta-pbas-vqsvryqvavgvnyinyhr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:41:"8:zjr-hcjvm-pnzcnvta-pbas-urnqreynorycntr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:41:"8:zjr-hcjvm-pnzcnvta-pbas-gunaxfynorycntr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:42:"8:zjr-hcjvm-pnzcnvta-pbas-vqsvryqznkyratgu";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:zjr-hcjvm-pnzcnvta-pbas-qrsnhygyng";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:zjr-hcjvm-pnzcnvta-pbas-qrsnhygyba";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:zjr-hcjvm-pnzcnvta-pbas-qrsnhygnyg";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:44:"8:zjr-hcjvm-pnzcnvta-pbas-qrsnhygqrfpevcgvba";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:zj-pbbypngf-pbasvez-arj-gvgyr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:zj-pbbypngf-pbasvez-arj";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:zj-pbbypngf-pbasvez-arj-bx";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:zj-pbbypngf-pbasvez-arj-pnapry";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:15:"8:cersf-hcybnqf";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:zjr-hcjvm-cersf-qrs-yvprafr";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:zjr-hcjvm-cersf-qrs-yvprafr-qrs";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:zjr-hcjvm-cersf-yvprafr-bja";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:zjr-hcjvm-cersf-yvprafr-guveqcnegl";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:ynathntrunaqyre.wf";a:4:{i:0;R:4362;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:8:"8:irpgbe";a:4:{i:0;s:10:"ext-vector";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:13:"8:irpgbe-qrfp";a:4:{i:0;R:4653;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:irpgbe-pbyyncfvoyrani-cersrerapr";a:4:{i:0;R:4653;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:irpgbe-pbyyncfvoyrani-zber";a:4:{i:0;R:4653;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:irpgbe-rqvgjneavat-jneavat";a:4:{i:0;R:4653;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:irpgbe-rqvgjneavat-cersrerapr";a:4:{i:0;R:4653;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:irpgbe-fvzcyrfrnepu-frnepu";a:4:{i:0;R:4653;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:irpgbe-fvzcyrfrnepu-pbagnvavat";a:4:{i:0;R:4653;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:irpgbe-abrkcrevzragf-cersrerapr";a:4:{i:0;R:4653;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:irpgbe-sbbgrepyrnahc-genafpyhfvba";a:4:{i:0;R:4653;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:10:"8:jrosbagf";a:4:{i:0;s:12:"ext-webfonts";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:15:"8:jrosbagf-qrfp";a:4:{i:0;R:4664;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:15:"8:jrosbagf-ybnq";a:4:{i:0;R:4664;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:jrosbagf-erfrg";a:4:{i:0;R:4664;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:jrosbagf-ranoyr-cersrerapr";a:4:{i:0;R:4664;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:jrosbagf-zrah-gbbygvc";a:4:{i:0;R:4664;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:15:"8:jrosbagf-uryc";a:4:{i:0;R:4664;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:jrosbagf-uryc-cntr";a:4:{i:0;R:4664;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:jrosbagf-cerivrj-vageb";a:4:{i:0;R:4664;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:jrosbagf-cerivrj-gvgyr";a:4:{i:0;R:4664;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:jrosbagf-cerivrj-qbjaybnq";a:4:{i:0;R:4664;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:jrosbagf-cerivrj-fnzcyrgrkg";a:4:{i:0;R:4664;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:41:"8:jrosbagf-cerivrj-vafgnyyvat-sbagf-gvgyr";a:4:{i:0;R:4664;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:40:"8:jrosbagf-cerivrj-vafgnyyvat-sbagf-grkg";a:4:{i:0;R:4664;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:12:"8:jvxvrqvgbe";a:4:{i:0;s:14:"ext-wikieditor";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:jvxvrqvgbe-qrfp";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:jvxvrqvgbe-jvxvgrkg-gno";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:jvxvrqvgbe-ybnqvat";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:jvxvrqvgbe-cerivrj-cersrerapr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:jvxvrqvgbe-cerivrj-gno";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:jvxvrqvgbe-cerivrj-punatrf-gno";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:jvxvrqvgbe-cerivrj-ybnqvat";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:37:"8:jvxvrqvgbe-cerivrjqvnybt-cersrerapr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:jvxvrqvgbe-cerivrjqvnybt-gno";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:jvxvrqvgbe-cerivrjqvnybt-ybnqvat";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:jvxvrqvgbe-choyvfu-cersrerapr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:jvxvrqvgbe-choyvfu-ohggba-choyvfu";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:jvxvrqvgbe-choyvfu-ohggba-pnapry";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:jvxvrqvgbe-choyvfu-qvnybt-gvgyr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:jvxvrqvgbe-choyvfu-qvnybt-fhzznel";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:jvxvrqvgbe-choyvfu-qvnybt-zvabe";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:jvxvrqvgbe-choyvfu-qvnybt-jngpu";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:jvxvrqvgbe-choyvfu-qvnybt-choyvfu";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:jvxvrqvgbe-choyvfu-qvnybt-tbonpx";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:jvxvrqvgbe-grzcyngr-rqvgbe-cersrerapr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:41:"8:jvxvrqvgbe-grzcyngr-rqvgbe-qvnybt-gvgyr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:42:"8:jvxvrqvgbe-grzcyngr-rqvgbe-qvnybt-fhozvg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:42:"8:jvxvrqvgbe-grzcyngr-rqvgbe-qvnybt-pnapry";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:jvxvrqvgbe-grzcyngrf-cersrerapr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:jvxvrqvgbe-gbp-cersrerapr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:jvxvrqvgbe-gbp-fubj";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:jvxvrqvgbe-gbp-uvqr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:jvxvrqvgbe-gbbyone";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:jvxvrqvgbe-gbbyone-qrfp";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:jvxvrqvgbe-gbbyone-uvqrfvt";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:jvxvrqvgbe-gbbyone-ybnqvat";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:jvxvrqvgbe-gbbyone-gbby-obyq";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:jvxvrqvgbe-gbbyone-gbby-obyq-rknzcyr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:jvxvrqvgbe-gbbyone-gbby-vgnyvp";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:40:"8:jvxvrqvgbe-gbbyone-gbby-vgnyvp-rknzcyr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:jvxvrqvgbe-gbbyone-gbby-vyvax";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:jvxvrqvgbe-gbbyone-gbby-vyvax-rknzcyr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:jvxvrqvgbe-gbbyone-gbby-kyvax";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:jvxvrqvgbe-gbbyone-gbby-kyvax-rknzcyr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:jvxvrqvgbe-gbbyone-gbby-yvax";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:jvxvrqvgbe-gbbyone-gbby-yvax-gvgyr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:jvxvrqvgbe-gbbyone-gbby-yvax-vag";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:41:"8:jvxvrqvgbe-gbbyone-gbby-yvax-vag-gnetrg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:49:"8:jvxvrqvgbe-gbbyone-gbby-yvax-vag-gnetrg-gbbygvc";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:jvxvrqvgbe-gbbyone-gbby-yvax-vag-grkg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:47:"8:jvxvrqvgbe-gbbyone-gbby-yvax-vag-grkg-gbbygvc";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:jvxvrqvgbe-gbbyone-gbby-yvax-rkg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:41:"8:jvxvrqvgbe-gbbyone-gbby-yvax-rkg-gnetrg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:jvxvrqvgbe-gbbyone-gbby-yvax-rkg-grkg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:37:"8:jvxvrqvgbe-gbbyone-gbby-yvax-vafreg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:37:"8:jvxvrqvgbe-gbbyone-gbby-yvax-pnapry";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:55:"8:jvxvrqvgbe-gbbyone-gbby-yvax-vag-gnetrg-fgnghf-rkvfgf";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:58:"8:jvxvrqvgbe-gbbyone-gbby-yvax-vag-gnetrg-fgnghf-abgrkvfgf";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:56:"8:jvxvrqvgbe-gbbyone-gbby-yvax-vag-gnetrg-fgnghf-vainyvq";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:57:"8:jvxvrqvgbe-gbbyone-gbby-yvax-vag-gnetrg-fgnghf-rkgreany";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:56:"8:jvxvrqvgbe-gbbyone-gbby-yvax-vag-gnetrg-fgnghf-ybnqvat";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:42:"8:jvxvrqvgbe-gbbyone-gbby-yvax-vag-vainyvq";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:48:"8:jvxvrqvgbe-gbbyone-gbby-yvax-ybbxfyvxrvagreany";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:52:"8:jvxvrqvgbe-gbbyone-gbby-yvax-ybbxfyvxrvagreany-vag";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:52:"8:jvxvrqvgbe-gbbyone-gbby-yvax-ybbxfyvxrvagreany-rkg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:jvxvrqvgbe-gbbyone-gbby-yvax-rzcgl";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:jvxvrqvgbe-gbbyone-gbby-svyr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:jvxvrqvgbe-gbbyone-gbby-svyr-rknzcyr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:jvxvrqvgbe-gbbyone-gbby-ersrerapr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:43:"8:jvxvrqvgbe-gbbyone-gbby-ersrerapr-rknzcyr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:42:"8:jvxvrqvgbe-gbbyone-gbby-ersrerapr-pnapry";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:41:"8:jvxvrqvgbe-gbbyone-gbby-ersrerapr-gvgyr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:42:"8:jvxvrqvgbe-gbbyone-gbby-ersrerapr-vafreg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:40:"8:jvxvrqvgbe-gbbyone-gbby-ersrerapr-grkg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:jvxvrqvgbe-gbbyone-gbby-fvtangher";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:37:"8:jvxvrqvgbe-gbbyone-frpgvba-nqinaprq";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:jvxvrqvgbe-gbbyone-gbby-urnqvat";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:jvxvrqvgbe-gbbyone-gbby-urnqvat-1";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:jvxvrqvgbe-gbbyone-gbby-urnqvat-2";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:jvxvrqvgbe-gbbyone-gbby-urnqvat-3";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:jvxvrqvgbe-gbbyone-gbby-urnqvat-4";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:jvxvrqvgbe-gbbyone-gbby-urnqvat-5";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:41:"8:jvxvrqvgbe-gbbyone-gbby-urnqvat-rknzcyr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:jvxvrqvgbe-gbbyone-tebhc-sbezng";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:jvxvrqvgbe-gbbyone-gbby-hyvfg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:jvxvrqvgbe-gbbyone-gbby-hyvfg-rknzcyr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:jvxvrqvgbe-gbbyone-gbby-byvfg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:jvxvrqvgbe-gbbyone-gbby-byvfg-rknzcyr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:jvxvrqvgbe-gbbyone-gbby-vaqrag";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:40:"8:jvxvrqvgbe-gbbyone-gbby-vaqrag-rknzcyr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:jvxvrqvgbe-gbbyone-gbby-abjvxv";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:40:"8:jvxvrqvgbe-gbbyone-gbby-abjvxv-rknzcyr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:jvxvrqvgbe-gbbyone-gbby-erqverpg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:42:"8:jvxvrqvgbe-gbbyone-gbby-erqverpg-rknzcyr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:jvxvrqvgbe-gbbyone-gbby-ovt";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:37:"8:jvxvrqvgbe-gbbyone-gbby-ovt-rknzcyr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:jvxvrqvgbe-gbbyone-gbby-fznyy";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:jvxvrqvgbe-gbbyone-gbby-fznyy-rknzcyr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:37:"8:jvxvrqvgbe-gbbyone-gbby-fhcrefpevcg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:45:"8:jvxvrqvgbe-gbbyone-gbby-fhcrefpevcg-rknzcyr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:jvxvrqvgbe-gbbyone-gbby-fhofpevcg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:43:"8:jvxvrqvgbe-gbbyone-gbby-fhofpevcg-rknzcyr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:jvxvrqvgbe-gbbyone-tebhc-vafreg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:jvxvrqvgbe-gbbyone-gbby-tnyyrel";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:41:"8:jvxvrqvgbe-gbbyone-gbby-tnyyrel-rknzcyr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:jvxvrqvgbe-gbbyone-gbby-arjyvar";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:jvxvrqvgbe-gbbyone-gbby-gnoyr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:43:"8:jvxvrqvgbe-gbbyone-gbby-gnoyr-rknzcyr-byq";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:49:"8:jvxvrqvgbe-gbbyone-gbby-gnoyr-rknzcyr-pryy-grkg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:46:"8:jvxvrqvgbe-gbbyone-gbby-gnoyr-rknzcyr-urnqre";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:37:"8:jvxvrqvgbe-gbbyone-gbby-gnoyr-gvgyr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:47:"8:jvxvrqvgbe-gbbyone-gbby-gnoyr-qvzrafvbaf-ebjf";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:50:"8:jvxvrqvgbe-gbbyone-gbby-gnoyr-qvzrafvbaf-pbyhzaf";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:49:"8:jvxvrqvgbe-gbbyone-gbby-gnoyr-qvzrafvbaf-urnqre";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:41:"8:jvxvrqvgbe-gbbyone-gbby-gnoyr-jvxvgnoyr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:40:"8:jvxvrqvgbe-gbbyone-gbby-gnoyr-fbegnoyr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:jvxvrqvgbe-gbbyone-gbby-gnoyr-rknzcyr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:jvxvrqvgbe-gbbyone-gbby-gnoyr-cerivrj";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:jvxvrqvgbe-gbbyone-gbby-gnoyr-vafreg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:jvxvrqvgbe-gbbyone-gbby-gnoyr-pnapry";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:44:"8:jvxvrqvgbe-gbbyone-gbby-gnoyr-rknzcyr-grkg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:jvxvrqvgbe-gbbyone-gbby-gnoyr-gbbznal";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:45:"8:jvxvrqvgbe-gbbyone-gbby-gnoyr-vainyvqahzore";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:jvxvrqvgbe-gbbyone-gbby-gnoyr-mreb";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:jvxvrqvgbe-gbbyone-gbby-ercynpr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:jvxvrqvgbe-gbbyone-gbby-ercynpr-gvgyr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:40:"8:jvxvrqvgbe-gbbyone-gbby-ercynpr-frnepu";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:41:"8:jvxvrqvgbe-gbbyone-gbby-ercynpr-ercynpr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:jvxvrqvgbe-gbbyone-gbby-ercynpr-pnfr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:jvxvrqvgbe-gbbyone-gbby-ercynpr-ertrk";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:49:"8:jvxvrqvgbe-gbbyone-gbby-ercynpr-ohggba-svaqarkg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:48:"8:jvxvrqvgbe-gbbyone-gbby-ercynpr-ohggba-ercynpr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:51:"8:jvxvrqvgbe-gbbyone-gbby-ercynpr-ohggba-ercynprnyy";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:jvxvrqvgbe-gbbyone-gbby-ercynpr-pybfr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:41:"8:jvxvrqvgbe-gbbyone-gbby-ercynpr-abzngpu";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:41:"8:jvxvrqvgbe-gbbyone-gbby-ercynpr-fhpprff";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:45:"8:jvxvrqvgbe-gbbyone-gbby-ercynpr-rzcglfrnepu";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:46:"8:jvxvrqvgbe-gbbyone-gbby-ercynpr-vainyvqertrk";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:jvxvrqvgbe-gbbyone-frpgvba-punenpgref";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:42:"8:jvxvrqvgbe-gbbyone-punenpgref-cntr-yngva";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:50:"8:jvxvrqvgbe-gbbyone-punenpgref-cntr-yngvarkgraqrq";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:40:"8:jvxvrqvgbe-gbbyone-punenpgref-cntr-vcn";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:44:"8:jvxvrqvgbe-gbbyone-punenpgref-cntr-flzobyf";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:42:"8:jvxvrqvgbe-gbbyone-punenpgref-cntr-terrx";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:45:"8:jvxvrqvgbe-gbbyone-punenpgref-cntr-plevyyvp";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:43:"8:jvxvrqvgbe-gbbyone-punenpgref-cntr-nenovp";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:51:"8:jvxvrqvgbe-gbbyone-punenpgref-cntr-nenovprkgraqrq";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:44:"8:jvxvrqvgbe-gbbyone-punenpgref-cntr-crefvna";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:43:"8:jvxvrqvgbe-gbbyone-punenpgref-cntr-uroerj";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:43:"8:jvxvrqvgbe-gbbyone-punenpgref-cntr-onatyn";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:43:"8:jvxvrqvgbe-gbbyone-punenpgref-cntr-gryhth";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:44:"8:jvxvrqvgbe-gbbyone-punenpgref-cntr-fvaunyn";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:45:"8:jvxvrqvgbe-gbbyone-punenpgref-cntr-thwnengv";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:41:"8:jvxvrqvgbe-gbbyone-punenpgref-cntr-gunv";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:40:"8:jvxvrqvgbe-gbbyone-punenpgref-cntr-ynb";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:42:"8:jvxvrqvgbe-gbbyone-punenpgref-cntr-xuzre";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:jvxvrqvgbe-gbbyone-frpgvba-uryc";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:45:"8:jvxvrqvgbe-gbbyone-uryc-urnqvat-qrfpevcgvba";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:40:"8:jvxvrqvgbe-gbbyone-uryc-urnqvat-flagnk";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:40:"8:jvxvrqvgbe-gbbyone-uryc-urnqvat-erfhyg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:37:"8:jvxvrqvgbe-gbbyone-uryc-cntr-sbezng";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:jvxvrqvgbe-gbbyone-uryc-cntr-yvax";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:jvxvrqvgbe-gbbyone-uryc-cntr-urnqvat";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:jvxvrqvgbe-gbbyone-uryc-cntr-yvfg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:jvxvrqvgbe-gbbyone-uryc-cntr-svyr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:40:"8:jvxvrqvgbe-gbbyone-uryc-cntr-ersrerapr";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:41:"8:jvxvrqvgbe-gbbyone-uryc-cntr-qvfphffvba";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:52:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-vgnyvp-qrfpevcgvba";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:47:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-vgnyvp-flagnk";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:47:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-vgnyvp-erfhyg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:50:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-obyq-qrfpevcgvba";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:45:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-obyq-flagnk";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:45:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-obyq-erfhyg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:56:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-obyqvgnyvp-qrfpevcgvba";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:51:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-obyqvgnyvp-flagnk";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:51:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-obyqvgnyvp-erfhyg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:51:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-vyvax-qrfpevcgvba";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:46:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-vyvax-flagnk";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:46:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-vyvax-erfhyg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:51:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-kyvax-qrfpevcgvba";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:46:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-kyvax-flagnk";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:46:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-kyvax-erfhyg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:54:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-urnqvat2-qrfpevcgvba";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:49:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-urnqvat2-flagnk";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:49:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-urnqvat2-erfhyg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:54:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-urnqvat3-qrfpevcgvba";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:49:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-urnqvat3-flagnk";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:49:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-urnqvat3-erfhyg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:54:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-urnqvat4-qrfpevcgvba";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:49:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-urnqvat4-flagnk";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:49:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-urnqvat4-erfhyg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:54:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-urnqvat5-qrfpevcgvba";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:49:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-urnqvat5-flagnk";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:49:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-urnqvat5-erfhyg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:51:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-hyvfg-qrfpevcgvba";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:46:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-hyvfg-flagnk";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:46:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-hyvfg-erfhyg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:51:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-byvfg-qrfpevcgvba";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:46:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-byvfg-flagnk";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:46:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-byvfg-erfhyg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:50:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-svyr-qrfpevcgvba";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:45:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-svyr-flagnk";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:45:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-svyr-erfhyg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:55:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-ersrerapr-qrfpevcgvba";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:50:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-ersrerapr-flagnk";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:50:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-ersrerapr-erfhyg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:57:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-erersrerapr-qrfpevcgvba";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:52:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-erersrerapr-flagnk";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:52:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-erersrerapr-erfhyg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:60:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-fubjersreraprf-qrfpevcgvba";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:55:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-fubjersreraprf-flagnk";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:55:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-fubjersreraprf-erfhyg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:64:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-fvtanghergvzrfgnzc-qrfpevcgvba";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:59:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-fvtanghergvzrfgnzc-flagnk";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:59:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-fvtanghergvzrfgnzc-erfhyg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:55:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-fvtangher-qrfpevcgvba";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:50:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-fvtangher-flagnk";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:50:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-fvtangher-erfhyg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:52:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-vaqrag-qrfpevcgvba";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:47:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-vaqrag-flagnk";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:47:"8:jvxvrqvgbe-gbbyone-uryc-pbagrag-vaqrag-erfhyg";a:4:{i:0;R:4679;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:jvxvzrqvnyvprafrgrkgf-qrfp";a:4:{i:0;s:25:"ext-wikimedialicensetexts";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:41:"8:jz-yvprafr-nggevohgvba-jvgu-nhgube-grkg";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:44:"8:jz-yvprafr-nggevohgvba-jvgubhg-nhgube-grkg";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:jz-yvprafr-negjbex-negvfg";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:jz-yvprafr-negjbex-gvgyr";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:jz-yvprafr-negjbex-zrqvhz";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:jz-yvprafr-negjbex-qvzrafvbaf";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:37:"8:jz-yvprafr-negjbex-pheerag-ybpngvba";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:jz-yvprafr-negjbex-bowrpg-uvfgbel";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:jz-yvprafr-negjbex-perqvg-yvar";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:jz-yvprafr-negjbex-ersreraprf";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:jz-yvprafr-negjbex-vafpevcgvbaf";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:jz-yvprafr-negjbex-abgrf";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:jz-yvprafr-negjbex-vq";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:jz-yvprafr-negjbex-fbhepr";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:jz-yvprafr-obbx-rqvgvba";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:jz-yvprafr-obbx-rqvgbe";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:jz-yvprafr-obbx-vyyhfgengbe";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:jz-yvprafr-obbx-ynathntr";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:jz-yvprafr-obbx-cntr-bireivrj";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:jz-yvprafr-obbx-cynpr-bs-choyvpngvba";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:jz-yvprafr-obbx-cevagre";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:jz-yvprafr-obbx-choyvfure";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:jz-yvprafr-obbx-frevrf-gvgyr";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:jz-yvprafr-obbx-fgneg-guvf-obbx";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:jz-yvprafr-obbx-fhogvgyr";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:jz-yvprafr-obbx-gvgyr";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:jz-yvprafr-obbx-genafyngbe";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:jz-yvprafr-obbx-ibyhzr";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:37:"8:jz-yvprafr-obbx-lrne-bs-choyvpngvba";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:jz-yvprafr-prpvyy-grkg";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:jz-yvprafr-prpvyy-jvxv-yvax";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:jz-yvprafr-prpvyy-shyy-yvax";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:jz-yvprafr-perngbe-nygreangvir-anzrf";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:jz-yvprafr-perngbe-qrfpevcgvba";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:jz-yvprafr-perngbe-qngr-bs-ovegu";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:44:"8:jz-yvprafr-perngbe-qngr-bs-ovegu-naq-qrngu";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:jz-yvprafr-perngbe-ybpngvba-bs-ovegu";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:48:"8:jz-yvprafr-perngbe-ybpngvba-bs-ovegu-naq-qrngu";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:jz-yvprafr-perngbe-jbex-crevbq";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:jz-yvprafr-perngbe-jbex-ybpngvba";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:jz-yvprafr-perngbe-yvaxonpx";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:jz-yvprafr-sny-grkg";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:jz-yvprafr-sny-jvxv-yvax";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:jz-yvprafr-sny-shyy-yvax";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:jz-yvprafr-sfs-jvxv-yvax";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:jz-yvprafr-serr-fbsgjner-jvxv-yvax";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:jz-yvprafr-tsqy-1.2-naq-yngre";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:jz-yvprafr-tsqy-1.2-bayl";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:jz-yvprafr-tsqy-1.2-bayl-urnqre";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:jz-yvprafr-tsqy-1.3-naq-yngre";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:jz-yvprafr-tsqy-1.3-bayl";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:jz-yvprafr-tsqy-jvxv-yvax";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:jz-yvprafr-tsqy-shyy-1.2-yvax";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:jz-yvprafr-tsqy-shyy-1.3-yvax";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:jz-yvprafr-tcy-grkg";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:jz-yvprafr-tcy-jvxv-yvax";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:jz-yvprafr-tcy-2-shyy-yvax";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:jz-yvprafr-tcy-3-shyy-yvax";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:38:"8:jz-yvprafr-vasbezngvba-gnoyr-fhzznel";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:jz-yvprafr-vasbezngvba-qrfpevcgvba";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:44:"8:jz-yvprafr-vasbezngvba-qrfpevcgvba-zvffvat";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:52:"8:jz-yvprafr-vasbezngvba-qrfpevcgvba-zvffvat-erdhrfg";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:jz-yvprafr-vasbezngvba-fbhepr";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:jz-yvprafr-vasbezngvba-fbhepr-zvffvat";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:47:"8:jz-yvprafr-vasbezngvba-fbhepr-zvffvat-erdhrfg";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:jz-yvprafr-vasbezngvba-qngr";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:jz-yvprafr-vasbezngvba-nhgube";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:jz-yvprafr-vasbezngvba-nhgube-zvffvat";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:jz-yvprafr-vasbezngvba-crezvffvba";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:48:"8:jz-yvprafr-vasbezngvba-crezvffvba-erhfvat-yvax";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:48:"8:jz-yvprafr-vasbezngvba-crezvffvba-erhfvat-grkg";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:45:"8:jz-yvprafr-vasbezngvba-crezvffvba-frr-orybj";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:jz-yvprafr-vasbezngvba-bgure-irefvbaf";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:jz-yvprafr-ytcy-grkg";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:jz-yvprafr-ytcy-jvxv-yvax";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:jz-yvprafr-ytcy-2.1-shyy-yvax";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:jz-yvprafr-ytcy-3-shyy-yvax";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:34:"8:jz-yvprafr-yvprafvat-hcqngr-grkg";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:jz-yvprafr-yvprafvat-hcqngr-jvxv-yvax";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:jz-yvprafr-bevtvany-hcybnq-ybt";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:jz-yvprafr-bja-jbex";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:jz-yvprafr-cq-nhgube-frys-grkg";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:jz-yvprafr-cq-nhgube-jvgu-nhgube-grkg";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:43:"8:jz-yvprafr-cq-nhgube-abg-yrtnyyl-cbffvoyr";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:39:"8:jz-yvprafr-cq-nhgube-frys-nal-checbfr";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:46:"8:jz-yvprafr-cq-nhgube-jvgu-nhgube-nal-checbfr";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:jz-yvprafr-cq-hftbi-jvxv-yvax";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:jz-yvprafr-cq-hftbi-jbex-jvxv-yvax";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:jz-yvprafr-cq-hftbi-srzn-grkg";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:jz-yvprafr-cq-hftbi-srzn-jvxv-yvax";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:jz-yvprafr-cq-hftbi-zvyvgnel-grkg";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:53:"8:jz-yvprafr-cq-hftbi-zvyvgnel-nezrq-sbeprf-jvxv-yvax";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:44:"8:jz-yvprafr-cq-hftbi-zvyvgnel-qbq-jvxv-yvax";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:45:"8:jz-yvprafr-cq-hftbi-zvyvgnel-nve-sbepr-grkg";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:50:"8:jz-yvprafr-cq-hftbi-zvyvgnel-nve-sbepr-jvxv-yvax";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:40:"8:jz-yvprafr-cq-hftbi-zvyvgnel-nezl-grkg";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:45:"8:jz-yvprafr-cq-hftbi-zvyvgnel-nezl-jvxv-yvax";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:40:"8:jz-yvprafr-cq-hftbi-zvyvgnel-anil-grkg";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:45:"8:jz-yvprafr-cq-hftbi-zvyvgnel-anil-jvxv-yvax";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:jz-yvprafr-cq-hftbi-abnn-grkg";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:36:"8:jz-yvprafr-cq-hftbi-abnn-jvxv-yvax";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:jz-yvprafr-cq-jvxv-yvax";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:jz-yvprafr-frys-bar-yvprafr";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:41:"8:jz-yvprafr-frys-bar-yvprafr-jvgu-nhgube";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:35:"8:jz-yvprafr-frys-zhygvcyr-yvprafrf";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:47:"8:jz-yvprafr-frys-zhygvcyr-yvprafrf-jvgu-nhgube";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:42:"8:jz-yvprafr-frys-zhygvcyr-yvprafrf-fryrpg";a:4:{i:0;R:4897;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:jvxvzrqvnzrffntrf-qrfp";a:4:{i:0;s:21:"ext-wikimediamessages";i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:fvgrfhccbeg-hey";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:13:"8:fvgrfhccbeg";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:gbbygvc-a-fvgrfhccbeg";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:13:"8:jzs-fvqrone";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:33:"8:fcrpvnycntrf-tebhc-pbagevohgvba";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:12:"8:ebobgf.gkg";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:15:"8:afgno-perngbe";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:afgno-vafgvghgvba";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:afgno-frdhrapr";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:afgno-gvzrqgrkg";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:tebhc-nohfrsvygre";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:tebhc-nppbhagperngbe";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:14:"8:tebhc-neopbz";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:tebhc-nhgbcngebyyrq";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:tebhc-nhgberivrjre";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:tebhc-ovtrkcbeg";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:tebhc-obgnqzva";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:tebhc-pbasvezrq";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:tebhc-rqvgcebgrpgrq";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:tebhc-rk_nqzvavfgengbe";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:tebhc-rk_ohernhpeng";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:tebhc-ryvzvangbe";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:tebhc-svyrzbire";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:13:"8:tebhc-sybbq";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:15:"8:tebhc-sbhaqre";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:tebhc-vzntr-erivrjre";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:14:"8:tebhc-vzcbeg";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:tebhc-vagresnpr_rqvgbe";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:tebhc-vcoybpx-rkrzcg";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:tebhc-bgef-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:jzs-tebhc-cngebyyre";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:tebhc-erfrnepure";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:tebhc-ebyyonpxre";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:tebhc-genafjvxv";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:15:"8:tebhc-gehfgrq";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:tebhc-nohfrsvygre-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:tebhc-nppbhagperngbe-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:tebhc-neopbz-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:tebhc-nhgbcngebyyrq-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:tebhc-nhgberivrjre-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:tebhc-ovtrkcbeg-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:tebhc-obgnqzva-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:tebhc-pbasvezrq-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:tebhc-rqvgcebgrpgrq-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:tebhc-ryvzvangbe-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:tebhc-rk_nqzvavfgengbe-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:tebhc-rk_ohernhpeng-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:tebhc-svyrzbire-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:tebhc-sybbq-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:tebhc-sbhaqre-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:tebhc-vzntr-erivrjre-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:tebhc-vzcbeg-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:tebhc-vagresnpr_rqvgbe-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:29:"8:tebhc-vcoybpx-rkrzcg-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:tebhc-bgef-zrzore-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:jzs-tebhc-cngebyyre-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:tebhc-erfrnepure-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:tebhc-ebyyonpxre-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:tebhc-genafjvxv-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:tebhc-gehfgrq-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:tebhccntr-nohfrsvygre";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:tebhccntr-nppbhagperngbe";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:tebhccntr-neopbz";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:tebhccntr-nhgbcngebyyrq";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:tebhccntr-nhgberivrjre";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:tebhccntr-ovtrkcbeg";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:tebhccntr-obgnqzva";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:tebhccntr-pbasvezrq";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:tebhccntr-rqvgcebgrpgrq";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:tebhccntr-ryvzvangbe";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:tebhccntr-rk_nqzvavfgengbe";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:tebhccntr-rk_ohernhpeng";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:tebhccntr-svyrzbire";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:tebhccntr-sybbq";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:tebhccntr-sbhaqre";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:tebhccntr-vzntr-erivrjre";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:tebhccntr-vzcbeg";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:tebhccntr-vagresnpr_rqvgbe";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:26:"8:tebhccntr-vcoybpx-rkrzcg";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:tebhccntr-bgef-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:tebhccntr-erfrnepure";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:tebhccntr-ebyyonpxre";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:tebhccntr-genafjvxv";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:tebhccntr-gehfgrq";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:15:"8:tebhc-fgrjneq";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:tebhc-flfnqzva";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:tebhc-rqvgvagresnpr";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:tebhc-tybony_obg";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:tebhc-tybony_ebyyonpx";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:tebhc-tybony_flfbcf";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:tebhc-bzohqfzra";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:jzs-tebhc-fgnss";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:tebhc-fgrjneq-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:tebhc-flfnqzva-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:tebhc-rqvgvagresnpr-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:tebhc-tybony_obg-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:30:"8:tebhc-tybony_ebyyonpx-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:tebhc-tybony_flfbcf-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:tebhc-bzohqfzra-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:jzs-tebhc-fgnss-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:19:"8:tebhccntr-fgrjneq";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:tebhccntr-flfnqzva";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:22:"8:tebhccntr-tybony_obg";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:27:"8:tebhccntr-tybony_ebyyonpx";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:tebhccntr-tybony_flfbcf";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:tebhccntr-bzohqfzra";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:jzs-tebhccntr-fgnss";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:24:"8:tebhc-genafyngvbanqzva";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:31:"8:tebhc-genafyngvbanqzva-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:tebhccntr-genafyngvbanqzva";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:13:"8:tebhc-pbqre";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:tebhc-pbqre-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:17:"8:tebhccntr-pbqre";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:16:"8:tebhc-vanpgvir";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:tebhc-vanpgvir-zrzore";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:20:"8:tebhccntr-vanpgvir";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:25:"8:funerq-ercb-anzr-funerq";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:21:"8:jvxvzrqvn-pbclevtug";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:28:"8:jvxvzrqvn-pbclevtugjneavat";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:32:"8:jvxvzrqvn-rqvgcntr-gbf-fhzznel";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:23:"8:pnag-qryrgr-znva-cntr";a:4:{i:0;R:5006;i:1;R:801;i:2;R:3237;i:3;R:3238;}s:18:"8:nohfrsvygre-qrfp";a:3:{i:0;s:15:"ext-abusefilter";i:1;R:801;i:2;R:3237;}s:13:"8:nohfrsvygre";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:10:"8:nohfrybt";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:19:"8:nohfrsvygre-vageb";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:26:"8:nohfrsvygre-zhfgorrqvgbe";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:21:"8:nohfrsvygre-jneavat";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:24:"8:nohfrsvygre-qvfnyybjrq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:29:"8:nohfrsvygre-oybpxrq-qvfcynl";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:23:"8:nohfrsvygre-qrtebhcrq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:33:"8:nohfrsvygre-nhgbcebzbgr-oybpxrq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:21:"8:nohfrsvygre-oybpxre";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:25:"8:nohfrsvygre-oybpxernfba";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:27:"8:nohfrsvygre-qrtebhcernfba";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:29:"8:nohfrsvygre-nppbhagerfreirq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:26:"8:evtug-nohfrsvygre-zbqvsl";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:24:"8:evtug-nohfrsvygre-ivrj";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:23:"8:evtug-nohfrsvygre-ybt";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:30:"8:evtug-nohfrsvygre-ybt-qrgnvy";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:27:"8:evtug-nohfrsvygre-cevingr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:37:"8:evtug-nohfrsvygre-zbqvsl-erfgevpgrq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:26:"8:evtug-nohfrsvygre-erireg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:32:"8:evtug-nohfrsvygre-ivrj-cevingr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:28:"8:evtug-nohfrsvygre-uvqr-ybt";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:30:"8:evtug-nohfrsvygre-uvqqra-ybt";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:27:"8:npgvba-nohfrsvygre-zbqvsl";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:25:"8:npgvba-nohfrsvygre-ivrj";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:24:"8:npgvba-nohfrsvygre-ybt";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:31:"8:npgvba-nohfrsvygre-ybt-qrgnvy";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:28:"8:npgvba-nohfrsvygre-cevingr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:38:"8:npgvba-nohfrsvygre-zbqvsl-erfgevpgrq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:27:"8:npgvba-nohfrsvygre-erireg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:33:"8:npgvba-nohfrsvygre-ivrj-cevingr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:17:"8:nohfrsvygre-ybt";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:25:"8:nohfrsvygre-ybt-fhzznel";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:24:"8:nohfrsvygre-ybt-frnepu";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:29:"8:nohfrsvygre-ybt-frnepu-hfre";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:31:"8:nohfrsvygre-ybt-frnepu-svygre";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:30:"8:nohfrsvygre-ybt-frnepu-gvgyr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:31:"8:nohfrsvygre-ybt-frnepu-fhozvg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:23:"8:nohfrsvygre-ybt-ragel";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:36:"8:nohfrsvygre-ybt-qrgnvyrqragel-zrgn";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:38:"8:nohfrsvygre-ybt-qrgnvyrqragel-tybony";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:37:"8:nohfrsvygre-ybt-qrgnvyrqragel-ybpny";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:29:"8:nohfrsvygre-ybt-qrgnvyfyvax";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:26:"8:nohfrsvygre-ybt-uvqryvax";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:32:"8:nohfrsvygre-ybt-qrgnvyf-yrtraq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:29:"8:nohfrsvygre-ybt-qrgnvyf-ine";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:29:"8:nohfrsvygre-ybt-qrgnvyf-iny";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:30:"8:nohfrsvygre-ybt-qrgnvyf-inef";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:33:"8:nohfrsvygre-ybt-qrgnvyf-cevingr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:28:"8:nohfrsvygre-ybt-qrgnvyf-vc";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:27:"8:nohfrsvygre-ybt-abnpgvbaf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:30:"8:nohfrsvygre-ybt-qrgnvyf-qvss";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:32:"8:nohfrsvygre-ybt-yvaxbapbagevof";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:37:"8:nohfrsvygre-ybt-yvaxbapbagevof-grkg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:24:"8:nohfrsvygre-ybt-uvqqra";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:22:"8:nohfrsvygre-ybt-uvqr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:36:"8:nohfrsvygre-ybt-pnaabg-frr-qrgnvyf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:32:"8:nohfrsvygre-ybt-qrgnvyf-uvqqra";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:29:"8:nohfrsvygre-ybt-uvqr-yrtraq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:25:"8:nohfrsvygre-ybt-uvqr-vq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:29:"8:nohfrsvygre-ybt-uvqr-uvqqra";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:29:"8:nohfrsvygre-ybt-uvqr-ernfba";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:32:"8:nohfrsvygre-ybt-uvqr-sbeovqqra";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:31:"8:nohfrsvygre-ybtragel-fhccerff";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:33:"8:nohfrsvygre-ybtragel-hafhccerff";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:24:"8:nohfrsvygre-znantrzrag";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:18:"8:nohfrsvygre-yvfg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:21:"8:nohfrsvygre-yvfg-vq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:25:"8:nohfrsvygre-yvfg-fgnghf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:25:"8:nohfrsvygre-yvfg-choyvp";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:31:"8:nohfrsvygre-yvfg-pbafrdhraprf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:29:"8:nohfrsvygre-yvfg-ivfvovyvgl";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:27:"8:nohfrsvygre-yvfg-uvgpbhag";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:23:"8:nohfrsvygre-yvfg-rqvg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:26:"8:nohfrsvygre-yvfg-qrgnvyf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:24:"8:nohfrsvygre-yvfg-yvzvg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:31:"8:nohfrsvygre-yvfg-ynfgzbqvsvrq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:20:"8:nohfrsvygre-uvqqra";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:22:"8:nohfrsvygre-hauvqqra";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:21:"8:nohfrsvygre-ranoyrq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:21:"8:nohfrsvygre-qryrgrq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:22:"8:nohfrsvygre-qvfnoyrq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:22:"8:nohfrsvygre-uvgpbhag";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:17:"8:nohfrsvygre-arj";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:20:"8:nohfrsvygre-erghea";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:27:"8:nohfrsvygre-fgnghf-tybony";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:26:"8:nohfrsvygre-yvfg-bcgvbaf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:34:"8:nohfrsvygre-yvfg-bcgvbaf-qryrgrq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:39:"8:nohfrsvygre-yvfg-bcgvbaf-qryrgrq-bayl";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:39:"8:nohfrsvygre-yvfg-bcgvbaf-qryrgrq-uvqr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:39:"8:nohfrsvygre-yvfg-bcgvbaf-qryrgrq-fubj";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:35:"8:nohfrsvygre-yvfg-bcgvbaf-qvfnoyrq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:39:"8:nohfrsvygre-yvfg-bcgvbaf-uvqrqvfnoyrq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:33:"8:nohfrsvygre-yvfg-bcgvbaf-fhozvg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:24:"8:nohfrsvygre-gbbyf-grkg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:24:"8:nohfrsvygre-gbbyf-rkce";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:30:"8:nohfrsvygre-gbbyf-fhozvgrkce";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:33:"8:nohfrsvygre-gbbyf-ernhgbpbasvez";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:38:"8:nohfrsvygre-gbbyf-ernhgbpbasvez-hfre";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:40:"8:nohfrsvygre-gbbyf-ernhgbpbasvez-fhozvg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:32:"8:nohfrsvygre-ernhgbpbasvez-abar";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:38:"8:nohfrsvygre-ernhgbpbasvez-abgnyybjrq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:32:"8:nohfrsvygre-ernhgbpbasvez-qbar";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:20:"8:nohfrsvygre-fgnghf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:27:"8:nohfrsvygre-rqvg-fhogvgyr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:29:"8:nohfrsvygre-rqvg-byqjneavat";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:31:"8:nohfrsvygre-rqvg-fgnghf-ynory";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:25:"8:nohfrsvygre-rqvg-fgnghf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:28:"8:nohfrsvygre-rqvg-guebggyrq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:22:"8:nohfrsvygre-rqvg-arj";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:23:"8:nohfrsvygre-rqvg-fnir";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:21:"8:nohfrsvygre-rqvg-vq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:30:"8:nohfrsvygre-rqvg-qrfpevcgvba";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:24:"8:nohfrsvygre-rqvg-syntf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:26:"8:nohfrsvygre-rqvg-ranoyrq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:26:"8:nohfrsvygre-rqvg-qryrgrq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:25:"8:nohfrsvygre-rqvg-uvqqra";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:24:"8:nohfrsvygre-rqvg-ehyrf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:24:"8:nohfrsvygre-rqvg-abgrf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:26:"8:nohfrsvygre-rqvg-ynfgzbq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:31:"8:nohfrsvygre-rqvg-ynfgzbq-grkg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:27:"8:nohfrsvygre-rqvg-uvgpbhag";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:31:"8:nohfrsvygre-rqvg-pbafrdhraprf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:30:"8:nohfrsvygre-rqvg-npgvba-jnea";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:34:"8:nohfrsvygre-rqvg-npgvba-qvfnyybj";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:30:"8:nohfrsvygre-rqvg-npgvba-synt";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:42:"8:nohfrsvygre-rqvg-npgvba-oybpxnhgbcebzbgr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:33:"8:nohfrsvygre-rqvg-npgvba-qrtebhc";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:31:"8:nohfrsvygre-rqvg-npgvba-oybpx";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:34:"8:nohfrsvygre-rqvg-npgvba-guebggyr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:36:"8:nohfrsvygre-rqvg-npgvba-enatroybpx";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:29:"8:nohfrsvygre-rqvg-npgvba-gnt";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:33:"8:nohfrsvygre-rqvg-guebggyr-pbhag";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:34:"8:nohfrsvygre-rqvg-guebggyr-crevbq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:35:"8:nohfrsvygre-rqvg-guebggyr-frpbaqf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:34:"8:nohfrsvygre-rqvg-guebggyr-tebhcf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:31:"8:nohfrsvygre-rqvg-jnea-zrffntr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:29:"8:nohfrsvygre-rqvg-jnea-bgure";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:35:"8:nohfrsvygre-rqvg-jnea-bgure-ynory";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:31:"8:nohfrsvygre-rqvg-jnea-npgvbaf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:31:"8:nohfrsvygre-rqvg-jnea-cerivrj";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:28:"8:nohfrsvygre-rqvg-jnea-rqvg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:26:"8:nohfrsvygre-rqvg-gnt-gnt";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:25:"8:nohfrsvygre-rqvg-qravrq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:23:"8:nohfrsvygre-rqvg-znva";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:32:"8:nohfrsvygre-rqvg-qbar-fhogvgyr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:23:"8:nohfrsvygre-rqvg-qbar";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:28:"8:nohfrsvygre-rqvg-onqflagnk";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:29:"8:nohfrsvygre-rqvg-erfgevpgrq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:30:"8:nohfrsvygre-rqvg-ivrjuvfgbel";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:26:"8:nohfrsvygre-rqvg-uvfgbel";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:24:"8:nohfrsvygre-rqvg-purpx";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:28:"8:nohfrsvygre-rqvg-onqsvygre";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:25:"8:nohfrsvygre-rqvg-erireg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:24:"8:nohfrsvygre-rqvg-gbbyf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:28:"8:nohfrsvygre-rqvg-grfg-yvax";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:25:"8:nohfrsvygre-rqvg-rkcbeg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:27:"8:nohfrsvygre-rqvg-flagnkbx";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:28:"8:nohfrsvygre-rqvg-flagnkree";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:27:"8:nohfrsvygre-rqvg-onq-gntf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:29:"8:nohfrsvygre-rqvg-abgnyybjrq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:33:"8:nohfrsvygre-rqvg-ohvyqre-fryrpg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:46:"8:nohfrsvygre-rqvg-ohvyqre-tebhc-bc-nevguzrgvp";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:49:"8:nohfrsvygre-rqvg-ohvyqre-bc-nevguzrgvp-nqqvgvba";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:52:"8:nohfrsvygre-rqvg-ohvyqre-bc-nevguzrgvp-fhogenpgvba";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:55:"8:nohfrsvygre-rqvg-ohvyqre-bc-nevguzrgvp-zhygvcyvpngvba";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:47:"8:nohfrsvygre-rqvg-ohvyqre-bc-nevguzrgvp-qvivqr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:47:"8:nohfrsvygre-rqvg-ohvyqre-bc-nevguzrgvp-zbqhyb";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:44:"8:nohfrsvygre-rqvg-ohvyqre-bc-nevguzrgvp-cbj";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:46:"8:nohfrsvygre-rqvg-ohvyqre-tebhc-bc-pbzcnevfba";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:46:"8:nohfrsvygre-rqvg-ohvyqre-bc-pbzcnevfba-rdhny";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:49:"8:nohfrsvygre-rqvg-ohvyqre-bc-pbzcnevfba-abgrdhny";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:43:"8:nohfrsvygre-rqvg-ohvyqre-bc-pbzcnevfba-yg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:43:"8:nohfrsvygre-rqvg-ohvyqre-bc-pbzcnevfba-tg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:44:"8:nohfrsvygre-rqvg-ohvyqre-bc-pbzcnevfba-ygr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:44:"8:nohfrsvygre-rqvg-ohvyqre-bc-pbzcnevfba-tgr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:40:"8:nohfrsvygre-rqvg-ohvyqre-tebhc-bc-obby";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:38:"8:nohfrsvygre-rqvg-ohvyqre-bc-obby-abg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:38:"8:nohfrsvygre-rqvg-ohvyqre-bc-obby-naq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:37:"8:nohfrsvygre-rqvg-ohvyqre-bc-obby-be";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:38:"8:nohfrsvygre-rqvg-ohvyqre-bc-obby-kbe";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:37:"8:nohfrsvygre-rqvg-ohvyqre-tebhc-zvfp";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:34:"8:nohfrsvygre-rqvg-ohvyqre-zvfp-va";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:36:"8:nohfrsvygre-rqvg-ohvyqre-zvfp-yvxr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:37:"8:nohfrsvygre-rqvg-ohvyqre-zvfp-eyvxr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:38:"8:nohfrsvygre-rqvg-ohvyqre-zvfp-veyvxr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:40:"8:nohfrsvygre-rqvg-ohvyqre-zvfp-pbagnvaf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:41:"8:nohfrsvygre-rqvg-ohvyqre-zvfp-fgevatyvg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:36:"8:nohfrsvygre-rqvg-ohvyqre-zvfp-grea";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:36:"8:nohfrsvygre-rqvg-ohvyqre-zvfp-pbaq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:38:"8:nohfrsvygre-rqvg-ohvyqre-tebhc-shapf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:39:"8:nohfrsvygre-rqvg-ohvyqre-shapf-yratgu";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:38:"8:nohfrsvygre-rqvg-ohvyqre-shapf-ypnfr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:39:"8:nohfrsvygre-rqvg-ohvyqre-shapf-ppabez";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:42:"8:nohfrsvygre-rqvg-ohvyqre-shapf-ezqbhoyrf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:45:"8:nohfrsvygre-rqvg-ohvyqre-shapf-fcrpvnyengvb";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:37:"8:nohfrsvygre-rqvg-ohvyqre-shapf-abez";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:38:"8:nohfrsvygre-rqvg-ohvyqre-shapf-pbhag";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:39:"8:nohfrsvygre-rqvg-ohvyqre-shapf-epbhag";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:45:"8:nohfrsvygre-rqvg-ohvyqre-shapf-ezjuvgrfcnpr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:43:"8:nohfrsvygre-rqvg-ohvyqre-shapf-ezfcrpvnyf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:44:"8:nohfrsvygre-rqvg-ohvyqre-shapf-vc_va_enatr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:45:"8:nohfrsvygre-rqvg-ohvyqre-shapf-pbagnvaf-nal";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:39:"8:nohfrsvygre-rqvg-ohvyqre-shapf-fhofge";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:39:"8:nohfrsvygre-rqvg-ohvyqre-shapf-fgecbf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:44:"8:nohfrsvygre-rqvg-ohvyqre-shapf-fge_ercynpr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:40:"8:nohfrsvygre-rqvg-ohvyqre-shapf-erfpncr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:40:"8:nohfrsvygre-rqvg-ohvyqre-shapf-frg_ine";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:37:"8:nohfrsvygre-rqvg-ohvyqre-tebhc-inef";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:43:"8:nohfrsvygre-rqvg-ohvyqre-inef-nppbhaganzr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:41:"8:nohfrsvygre-rqvg-ohvyqre-inef-gvzrfgnzc";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:38:"8:nohfrsvygre-rqvg-ohvyqre-inef-npgvba";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:42:"8:nohfrsvygre-rqvg-ohvyqre-inef-nqqrqyvarf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:37:"8:nohfrsvygre-rqvg-ohvyqre-inef-qrygn";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:36:"8:nohfrsvygre-rqvg-ohvyqre-inef-qvss";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:39:"8:nohfrsvygre-rqvg-ohvyqre-inef-arjfvmr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:39:"8:nohfrsvygre-rqvg-ohvyqre-inef-byqfvmr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:44:"8:nohfrsvygre-rqvg-ohvyqre-inef-erzbirqyvarf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:39:"8:nohfrsvygre-rqvg-ohvyqre-inef-fhzznel";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:42:"8:nohfrsvygre-rqvg-ohvyqre-inef-negvpyr-vq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:42:"8:nohfrsvygre-rqvg-ohvyqre-inef-negvpyr-af";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:44:"8:nohfrsvygre-rqvg-ohvyqre-inef-negvpyr-grkg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:52:"8:nohfrsvygre-rqvg-ohvyqre-inef-negvpyr-cersvkrqgrkg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:44:"8:nohfrsvygre-rqvg-ohvyqre-inef-zbirqsebz-vq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:44:"8:nohfrsvygre-rqvg-ohvyqre-inef-zbirqsebz-af";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:46:"8:nohfrsvygre-rqvg-ohvyqre-inef-zbirqsebz-grkg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:54:"8:nohfrsvygre-rqvg-ohvyqre-inef-zbirqsebz-cersvkrqgrkg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:42:"8:nohfrsvygre-rqvg-ohvyqre-inef-zbirqgb-vq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:42:"8:nohfrsvygre-rqvg-ohvyqre-inef-zbirqgb-af";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:44:"8:nohfrsvygre-rqvg-ohvyqre-inef-zbirqgb-grkg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:52:"8:nohfrsvygre-rqvg-ohvyqre-inef-zbirqgb-cersvkrqgrkg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:46:"8:nohfrsvygre-rqvg-ohvyqre-inef-hfre-rqvgpbhag";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:40:"8:nohfrsvygre-rqvg-ohvyqre-inef-hfre-ntr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:41:"8:nohfrsvygre-rqvg-ohvyqre-inef-hfre-anzr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:43:"8:nohfrsvygre-rqvg-ohvyqre-inef-hfre-tebhcf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:49:"8:nohfrsvygre-rqvg-ohvyqre-inef-hfre-rznvypbasvez";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:51:"8:nohfrsvygre-rqvg-ohvyqre-inef-erprag-pbagevohgbef";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:41:"8:nohfrsvygre-rqvg-ohvyqre-inef-nyy-yvaxf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:43:"8:nohfrsvygre-rqvg-ohvyqre-inef-nqqrq-yvaxf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:45:"8:nohfrsvygre-rqvg-ohvyqre-inef-erzbirq-yvaxf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:40:"8:nohfrsvygre-rqvg-ohvyqre-inef-byq-grkg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:40:"8:nohfrsvygre-rqvg-ohvyqre-inef-arj-grkg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:49:"8:nohfrsvygre-rqvg-ohvyqre-inef-arj-grkg-fgevccrq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:40:"8:nohfrsvygre-rqvg-ohvyqre-inef-arj-ugzy";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:49:"8:nohfrsvygre-rqvg-ohvyqre-inef-erfgevpgvbaf-rqvg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:49:"8:nohfrsvygre-rqvg-ohvyqre-inef-erfgevpgvbaf-zbir";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:49:"8:nohfrsvygre-rqvg-ohvyqre-inef-byq-grkg-fgevccrq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:41:"8:nohfrsvygre-rqvg-ohvyqre-inef-byq-yvaxf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:40:"8:nohfrsvygre-rqvg-ohvyqre-inef-byq-ugzy";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:42:"8:nohfrsvygre-rqvg-ohvyqre-inef-zvabe-rqvg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:41:"8:nohfrsvygre-rqvg-ohvyqre-inef-svyr-fun1";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:24:"8:nohfrsvygre-svygre-ybt";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:21:"8:nohfrsvygre-uvfgbel";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:29:"8:nohfrsvygre-uvfgbel-sbehfre";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:28:"8:nohfrsvygre-uvfgbel-uvqqra";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:29:"8:nohfrsvygre-uvfgbel-ranoyrq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:28:"8:nohfrsvygre-uvfgbel-tybony";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:31:"8:nohfrsvygre-uvfgbel-gvzrfgnzc";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:26:"8:nohfrsvygre-uvfgbel-hfre";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:28:"8:nohfrsvygre-uvfgbel-choyvp";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:27:"8:nohfrsvygre-uvfgbel-syntf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:28:"8:nohfrsvygre-uvfgbel-svygre";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:30:"8:nohfrsvygre-uvfgbel-pbzzragf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:29:"8:nohfrsvygre-uvfgbel-npgvbaf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:30:"8:nohfrsvygre-uvfgbel-onpxrqvg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:29:"8:nohfrsvygre-uvfgbel-qryrgrq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:30:"8:nohfrsvygre-uvfgbel-svygrevq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:35:"8:nohfrsvygre-uvfgbel-fryrpg-yrtraq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:33:"8:nohfrsvygre-uvfgbel-fryrpg-hfre";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:35:"8:nohfrsvygre-uvfgbel-fryrpg-fhozvg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:26:"8:nohfrsvygre-uvfgbel-qvss";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:34:"8:nohfrsvygre-uvfgbel-reebe-uvqqra";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:39:"8:nohfrsvygre-rkprcgvba-harkcrpgrqngraq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:40:"8:nohfrsvygre-rkprcgvba-rkcrpgrqabgsbhaq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:43:"8:nohfrsvygre-rkprcgvba-haerpbtavfrqxrljbeq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:39:"8:nohfrsvygre-rkprcgvba-harkcrpgrqgbxra";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:38:"8:nohfrsvygre-rkprcgvba-hapybfrqfgevat";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:39:"8:nohfrsvygre-rkprcgvba-vainyvqbcrengbe";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:41:"8:nohfrsvygre-rkprcgvba-haerpbtavfrqgbxra";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:32:"8:nohfrsvygre-rkprcgvba-abcnenzf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:36:"8:nohfrsvygre-rkprcgvba-qvivqrolmreb";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:39:"8:nohfrsvygre-rkprcgvba-haerpbtavfrqine";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:37:"8:nohfrsvygre-rkprcgvba-abgrabhtunetf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:36:"8:nohfrsvygre-rkprcgvba-ertrksnvyher";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:39:"8:nohfrsvygre-rkprcgvba-bireevqrohvygva";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:35:"8:nohfrsvygre-rkprcgvba-bhgbsobhaqf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:31:"8:nohfrsvygre-rkprcgvba-abgyvfg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:24:"8:nohfrsvygre-npgvba-gnt";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:29:"8:nohfrsvygre-npgvba-guebggyr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:25:"8:nohfrsvygre-npgvba-jnea";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:37:"8:nohfrsvygre-npgvba-oybpxnhgbcebzbgr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:26:"8:nohfrsvygre-npgvba-oybpx";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:28:"8:nohfrsvygre-npgvba-qrtebhc";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:31:"8:nohfrsvygre-npgvba-enatroybpx";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:29:"8:nohfrsvygre-npgvba-qvfnyybj";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:26:"8:nohfrsvygre-erireg-gvgyr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:26:"8:nohfrsvygre-erireg-vageb";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:33:"8:nohfrsvygre-erireg-cerivrj-vgrz";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:34:"8:nohfrsvygre-erireg-frnepu-yrtraq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:32:"8:nohfrsvygre-erireg-crevbqfgneg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:30:"8:nohfrsvygre-erireg-crevbqraq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:27:"8:nohfrsvygre-erireg-frnepu";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:27:"8:nohfrsvygre-erireg-svygre";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:34:"8:nohfrsvygre-erireg-cerivrj-vageb";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:28:"8:nohfrsvygre-erireg-pbasvez";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:28:"8:nohfrsvygre-erireg-fhpprff";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:27:"8:nohfrsvygre-erireg-ernfba";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:32:"8:nohfrsvygre-erireg-ernfbasvryq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:18:"8:nohfrsvygre-grfg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:24:"8:nohfrsvygre-grfg-vageb";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:25:"8:nohfrsvygre-grfg-yrtraq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:30:"8:nohfrsvygre-grfg-ybnq-svygre";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:25:"8:nohfrsvygre-grfg-fhozvg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:23:"8:nohfrsvygre-grfg-ybnq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:23:"8:nohfrsvygre-grfg-hfre";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:31:"8:nohfrsvygre-grfg-crevbq-fgneg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:29:"8:nohfrsvygre-grfg-crevbq-raq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:23:"8:nohfrsvygre-grfg-cntr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:31:"8:nohfrsvygre-grfg-fubjartngvir";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:28:"8:nohfrsvygre-grfg-flagnkree";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:33:"8:nohfrsvygre-punatrfyvfg-rknzvar";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:21:"8:nohfrsvygre-rknzvar";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:27:"8:nohfrsvygre-rknzvar-vageb";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:28:"8:nohfrsvygre-rknzvar-yrtraq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:26:"8:nohfrsvygre-rknzvar-qvss";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:26:"8:nohfrsvygre-rknzvar-hfre";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:27:"8:nohfrsvygre-rknzvar-gvgyr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:28:"8:nohfrsvygre-rknzvar-fhozvg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:26:"8:nohfrsvygre-rknzvar-inef";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:26:"8:nohfrsvygre-rknzvar-grfg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:33:"8:nohfrsvygre-rknzvar-grfg-ohggba";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:27:"8:nohfrsvygre-rknzvar-zngpu";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:29:"8:nohfrsvygre-rknzvar-abzngpu";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:33:"8:nohfrsvygre-rknzvar-flagnkreebe";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:30:"8:nohfrsvygre-rknzvar-abgsbhaq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:34:"8:nohfrsvygre-rknzvar-vapbzcngvoyr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:31:"8:nohfrsvygre-rknzvar-aberfhygf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:20:"8:nohfrsvygre-gbcani";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:25:"8:nohfrsvygre-gbcani-ubzr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:25:"8:nohfrsvygre-gbcani-grfg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:28:"8:nohfrsvygre-gbcani-rknzvar";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:24:"8:nohfrsvygre-gbcani-ybt";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:26:"8:nohfrsvygre-gbcani-gbbyf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:27:"8:nohfrsvygre-gbcani-vzcbeg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:22:"8:nohfrsvygre-ybt-anzr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:24:"8:nohfrsvygre-ybt-urnqre";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:30:"8:nohfrsvygre-ybt-ragel-zbqvsl";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:27:"8:nohfrsvygre-ybt-aberfhygf";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:24:"8:nohfrsvygre-qvss-gvgyr";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:23:"8:nohfrsvygre-qvss-vgrz";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:26:"8:nohfrsvygre-qvss-irefvba";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:23:"8:nohfrsvygre-qvss-vasb";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:26:"8:nohfrsvygre-qvss-cnggrea";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:26:"8:nohfrsvygre-qvss-vainyvq";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:30:"8:nohfrsvygre-qvss-onpxuvfgbel";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:26:"8:nohfrsvygre-vzcbeg-vageb";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:27:"8:nohfrsvygre-vzcbeg-fhozvg";a:3:{i:0;R:5129;i:1;R:801;i:2;R:3237;}s:14:"8:nagvobg-qrfp";a:3:{i:0;s:11:"ext-antibot";i:1;R:801;i:2;R:3237;}s:12:"8:ncvfo-qrfp";a:3:{i:0;s:14:"ext-apisandbox";i:1;R:801;i:2;R:3237;}s:12:"8:ncvfnaqobk";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:13:"8:ncvfo-ab-wf";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:13:"8:ncvfo-vageb";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:20:"8:ncvfo-ncv-qvfnoyrq";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:25:"8:ncvfo-yrtraq-cnenzrgref";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:21:"8:ncvfo-yrtraq-erfhyg";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:33:"8:ncvfo-yrtraq-trarevp-cnenzrgref";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:35:"8:ncvfo-yrtraq-trarengbe-cnenzrgref";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:26:"8:ncvfo-erfhyg-erdhrfg-hey";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:27:"8:ncvfo-erfhyg-erdhrfg-cbfg";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:20:"8:ncvfo-ynory-sbezng";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:20:"8:ncvfo-ynory-npgvba";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:17:"8:ncvfo-ynory-qbp";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:21:"8:ncvfo-fryrpg-npgvba";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:20:"8:ncvfo-fryrpg-dhrel";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:20:"8:ncvfo-fryrpg-inyhr";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:17:"8:ncvfo-qbpf-zber";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:20:"8:ncvfo-cnenzf-cnenz";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:20:"8:ncvfo-cnenzf-vachg";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:19:"8:ncvfo-cnenzf-qrfp";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:15:"8:ncvfo-ybnqvat";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:18:"8:ncvfo-ybnq-reebe";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:21:"8:ncvfo-erdhrfg-reebe";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:24:"8:ncvfo-anzrfcnprf-reebe";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:15:"8:ncvfo-af-znva";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:14:"8:ncvfo-fhozvg";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:18:"8:ncvfo-dhrel-cebc";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:18:"8:ncvfo-dhrel-yvfg";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:18:"8:ncvfo-dhrel-zrgn";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:15:"8:ncvfo-rknzcyr";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:16:"8:ncvfo-rknzcyrf";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:13:"8:ncvfo-pyrne";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:20:"8:ncvfo-erdhrfg-gvzr";a:3:{i:0;R:5490;i:1;R:801;i:2;R:3237;}s:17:"8:negvpyrsrrqonpx";a:3:{i:0;s:19:"ext-articlefeedback";i:1;R:801;i:2;R:3237;}s:22:"8:negvpyrsrrqonpx-qrfp";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:40:"8:negvpyrsrrqonpx-fheirl-dhrfgvba-bevtva";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:42:"8:negvpyrsrrqonpx-fheirl-dhrfgvba-julengrq";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:58:"8:negvpyrsrrqonpx-fheirl-nafjre-julengrq-pbagevohgr-engvat";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:52:"8:negvpyrsrrqonpx-fheirl-nafjre-julengrq-qrirybczrag";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:56:"8:negvpyrsrrqonpx-fheirl-nafjre-julengrq-pbagevohgr-jvxv";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:56:"8:negvpyrsrrqonpx-fheirl-nafjre-julengrq-funevat-bcvavba";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:50:"8:negvpyrsrrqonpx-fheirl-nafjre-julengrq-qvqagengr";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:46:"8:negvpyrsrrqonpx-fheirl-nafjre-julengrq-bgure";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:40:"8:negvpyrsrrqonpx-fheirl-dhrfgvba-hfrshy";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:48:"8:negvpyrsrrqonpx-fheirl-dhrfgvba-hfrshy-vssnyfr";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:42:"8:negvpyrsrrqonpx-fheirl-dhrfgvba-pbzzragf";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:31:"8:negvpyrsrrqonpx-fheirl-fhozvg";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:30:"8:negvpyrsrrqonpx-fheirl-gvgyr";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:31:"8:negvpyrsrrqonpx-fheirl-gunaxf";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:35:"8:negvpyrsrrqonpx-fheirl-qvfpynvzre";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:39:"8:negvpyrsrrqonpx-fheirl-qvfpynvzreyvax";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:23:"8:negvpyrsrrqonpx-reebe";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:35:"8:negvpyrsrrqonpx-sbez-fjvgpu-ynory";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:34:"8:negvpyrsrrqonpx-sbez-cnary-gvgyr";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:40:"8:negvpyrsrrqonpx-sbez-cnary-rkcynangvba";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:45:"8:negvpyrsrrqonpx-sbez-cnary-rkcynangvba-yvax";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:34:"8:negvpyrsrrqonpx-sbez-cnary-pyrne";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:38:"8:negvpyrsrrqonpx-sbez-cnary-rkcregvfr";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:46:"8:negvpyrsrrqonpx-sbez-cnary-rkcregvfr-fghqvrf";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:49:"8:negvpyrsrrqonpx-sbez-cnary-rkcregvfr-cebsrffvba";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:44:"8:negvpyrsrrqonpx-sbez-cnary-rkcregvfr-ubool";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:44:"8:negvpyrsrrqonpx-sbez-cnary-rkcregvfr-bgure";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:40:"8:negvpyrsrrqonpx-sbez-cnary-urycvzcebir";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:45:"8:negvpyrsrrqonpx-sbez-cnary-urycvzcebir-abgr";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:58:"8:negvpyrsrrqonpx-sbez-cnary-urycvzcebir-rznvy-cynprubyqre";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:48:"8:negvpyrsrrqonpx-sbez-cnary-urycvzcebir-cevinpl";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:35:"8:negvpyrsrrqonpx-sbez-cnary-fhozvg";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:36:"8:negvpyrsrrqonpx-sbez-cnary-craqvat";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:36:"8:negvpyrsrrqonpx-sbez-cnary-fhpprff";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:41:"8:negvpyrsrrqonpx-sbez-cnary-rkcvel-gvgyr";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:43:"8:negvpyrsrrqonpx-sbez-cnary-rkcvel-zrffntr";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:37:"8:negvpyrsrrqonpx-ercbeg-fjvgpu-ynory";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:36:"8:negvpyrsrrqonpx-ercbeg-cnary-gvgyr";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:42:"8:negvpyrsrrqonpx-ercbeg-cnary-qrfpevcgvba";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:30:"8:negvpyrsrrqonpx-ercbeg-rzcgl";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:32:"8:negvpyrsrrqonpx-ercbeg-engvatf";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:41:"8:negvpyrsrrqonpx-svryq-gehfgjbegul-ynory";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:39:"8:negvpyrsrrqonpx-svryq-gehfgjbegul-gvc";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:45:"8:negvpyrsrrqonpx-svryq-gehfgjbegul-gbbygvc-1";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:45:"8:negvpyrsrrqonpx-svryq-gehfgjbegul-gbbygvc-2";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:45:"8:negvpyrsrrqonpx-svryq-gehfgjbegul-gbbygvc-3";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:45:"8:negvpyrsrrqonpx-svryq-gehfgjbegul-gbbygvc-4";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:45:"8:negvpyrsrrqonpx-svryq-gehfgjbegul-gbbygvc-5";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:38:"8:negvpyrsrrqonpx-svryq-pbzcyrgr-ynory";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:36:"8:negvpyrsrrqonpx-svryq-pbzcyrgr-gvc";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:42:"8:negvpyrsrrqonpx-svryq-pbzcyrgr-gbbygvc-1";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:42:"8:negvpyrsrrqonpx-svryq-pbzcyrgr-gbbygvc-2";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:42:"8:negvpyrsrrqonpx-svryq-pbzcyrgr-gbbygvc-3";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:42:"8:negvpyrsrrqonpx-svryq-pbzcyrgr-gbbygvc-4";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:42:"8:negvpyrsrrqonpx-svryq-pbzcyrgr-gbbygvc-5";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:39:"8:negvpyrsrrqonpx-svryq-bowrpgvir-ynory";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:37:"8:negvpyrsrrqonpx-svryq-bowrpgvir-gvc";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:43:"8:negvpyrsrrqonpx-svryq-bowrpgvir-gbbygvc-1";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:43:"8:negvpyrsrrqonpx-svryq-bowrpgvir-gbbygvc-2";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:43:"8:negvpyrsrrqonpx-svryq-bowrpgvir-gbbygvc-3";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:43:"8:negvpyrsrrqonpx-svryq-bowrpgvir-gbbygvc-4";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:43:"8:negvpyrsrrqonpx-svryq-bowrpgvir-gbbygvc-5";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:41:"8:negvpyrsrrqonpx-svryq-jryyjevggra-ynory";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:39:"8:negvpyrsrrqonpx-svryq-jryyjevggra-gvc";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:45:"8:negvpyrsrrqonpx-svryq-jryyjevggra-gbbygvc-1";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:45:"8:negvpyrsrrqonpx-svryq-jryyjevggra-gbbygvc-2";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:45:"8:negvpyrsrrqonpx-svryq-jryyjevggra-gbbygvc-3";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:45:"8:negvpyrsrrqonpx-svryq-jryyjevggra-gbbygvc-4";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:45:"8:negvpyrsrrqonpx-svryq-jryyjevggra-gbbygvc-5";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:30:"8:negvpyrsrrqonpx-cvgpu-erwrpg";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:26:"8:negvpyrsrrqonpx-cvgpu-be";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:30:"8:negvpyrsrrqonpx-cvgpu-gunaxf";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:38:"8:negvpyrsrrqonpx-cvgpu-fheirl-zrffntr";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:35:"8:negvpyrsrrqonpx-cvgpu-fheirl-obql";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:37:"8:negvpyrsrrqonpx-cvgpu-fheirl-npprcg";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:36:"8:negvpyrsrrqonpx-cvgpu-wbva-zrffntr";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:33:"8:negvpyrsrrqonpx-cvgpu-wbva-obql";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:35:"8:negvpyrsrrqonpx-cvgpu-wbva-npprcg";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:34:"8:negvpyrsrrqonpx-cvgpu-wbva-ybtva";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:36:"8:negvpyrsrrqonpx-cvgpu-rqvg-zrffntr";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:33:"8:negvpyrsrrqonpx-cvgpu-rqvg-obql";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:35:"8:negvpyrsrrqonpx-cvgpu-rqvg-npprcg";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:40:"8:negvpyrsrrqonpx-fheirl-zrffntr-fhpprff";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:38:"8:negvpyrsrrqonpx-fheirl-zrffntr-reebe";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:28:"8:negvpyrsrrqonpx-cevinplhey";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:49:"8:negvpyrsrrqonpx-gnoyr-pncgvba-qnvyluvtufnaqybjf";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:42:"8:negvpyrsrrqonpx-gnoyr-pncgvba-qnvyluvtuf";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:41:"8:negvpyrsrrqonpx-gnoyr-pncgvba-qnvylybjf";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:49:"8:negvpyrsrrqonpx-gnoyr-pncgvba-jrrxylzbfgpunatrq";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:42:"8:negvpyrsrrqonpx-gnoyr-pncgvba-erpragybjf";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:36:"8:negvpyrsrrqonpx-gnoyr-urnqvat-cntr";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:39:"8:negvpyrsrrqonpx-gnoyr-urnqvat-nirentr";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:33:"8:negvpyrsrrqonpx-gnoyr-abengvatf";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:43:"8:negvpyrsrrqonpx-pbcl-nobir-uvtuybj-gnoyrf";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:34:"8:negvpyrsrrqonpx-qnfuobneq-obggbz";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:36:"8:negvpyrsrrqonpx-qvfnoyr-cersrerapr";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:44:"8:negvpyrsrrqonpx-rznvypncgher-erfcbafr-obql";a:3:{i:0;R:5525;i:1;R:801;i:2;R:3237;}s:30:"8:negvpyrsrrqonpxi5-pgn-gunaxf";a:3:{i:0;s:21:"ext-articlefeedbackv5";i:1;R:801;i:2;R:3237;}s:45:"8:negvpyrsrrqonpxi5-pgn-pbasvezngvba-sbyybjhc";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:43:"8:negvpyrsrrqonpxi5-pgn1-pbasvezngvba-gvgyr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:42:"8:negvpyrsrrqonpxi5-pgn1-pbasvezngvba-pnyy";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:34:"8:negvpyrsrrqonpxi5-pgn1-yrnea-ubj";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:38:"8:negvpyrsrrqonpxi5-pgn1-yrnea-ubj-hey";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:38:"8:negvpyrsrrqonpxi5-pgn1-rqvg-yvaxgrkg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:43:"8:negvpyrsrrqonpxi5-pgn2-pbasvezngvba-gvgyr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:42:"8:negvpyrsrrqonpxi5-pgn2-pbasvezngvba-pnyy";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:36:"8:negvpyrsrrqonpxi5-pgn2-ohggba-grkg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:43:"8:negvpyrsrrqonpxi5-pgn3-pbasvezngvba-gvgyr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:42:"8:negvpyrsrrqonpxi5-pgn3-pbasvezngvba-pnyy";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:36:"8:negvpyrsrrqonpxi5-pgn3-ohggba-grkg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:25:"8:negvpyrsrrqonpxi5-reebe";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:33:"8:negvpyrsrrqonpxi5-cntr-qvfnoyrq";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:31:"8:negvpyrsrrqonpxi5-reebe-rznvy";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:33:"8:negvpyrsrrqonpxi5-reebe-oybpxrq";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:36:"8:negvpyrsrrqonpxi5-reebe-inyvqngvba";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:31:"8:negvpyrsrrqonpxi5-reebe-nohfr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:40:"8:negvpyrsrrqonpxi5-reebe-nohfr-yvaxgrkg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:36:"8:negvpyrsrrqonpxi5-reebe-nohfr-yvax";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:33:"8:negvpyrsrrqonpxi5-reebe-haxabja";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:32:"8:negvpyrsrrqonpxi5-reebe-fhozvg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:36:"8:negvpyrsrrqonpxi5-reebe-absrrqonpx";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:34:"8:negvpyrsrrqonpxi5-reebe-synttvat";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:36:"8:negvpyrsrrqonpxi5-sbez-gbbyf-ynory";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:38:"8:negvpyrsrrqonpxi5-sbez-urycshy-ynory";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:42:"8:negvpyrsrrqonpxi5-sbez-urycshy-lrf-ynory";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:41:"8:negvpyrsrrqonpxi5-sbez-urycshy-ab-ynory";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:38:"8:negvpyrsrrqonpxi5-sbez-urycshy-ibgrf";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:40:"8:negvpyrsrrqonpxi5-fcrpvny-nqq-srrqonpx";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:38:"8:negvpyrsrrqonpxi5-fcrpvny-svygre-nyy";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:45:"8:negvpyrsrrqonpxi5-fcrpvny-svygre-abgqryrgrq";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:42:"8:negvpyrsrrqonpxi5-fcrpvny-svygre-pbzzrag";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:42:"8:negvpyrsrrqonpxi5-fcrpvny-svygre-nohfvir";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:42:"8:negvpyrsrrqonpxi5-fcrpvny-svygre-urycshy";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:44:"8:negvpyrsrrqonpxi5-fcrpvny-svygre-haurycshy";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:49:"8:negvpyrsrrqonpxi5-fcrpvny-svygre-arrqfbirefvtug";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:42:"8:negvpyrsrrqonpxi5-fcrpvny-svygre-ivfvoyr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:44:"8:negvpyrsrrqonpxi5-fcrpvny-svygre-vaivfvoyr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:42:"8:negvpyrsrrqonpxi5-fcrpvny-svygre-qryrgrq";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:44:"8:negvpyrsrrqonpxi5-fcrpvny-svygre-haqryrgrq";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:43:"8:negvpyrsrrqonpxi5-fcrpvny-svygre-qrpyvarq";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:43:"8:negvpyrsrrqonpxi5-fcrpvny-svygre-hauvqqra";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:36:"8:negvpyrsrrqonpxi5-fcrpvny-fbeg-ntr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:40:"8:negvpyrsrrqonpxi5-fcrpvny-fbeg-urycshy";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:39:"8:negvpyrsrrqonpxi5-fcrpvny-fbeg-engvat";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:45:"8:negvpyrsrrqonpxi5-fcrpvny-fbeg-ynory-orsber";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:44:"8:negvpyrsrrqonpxi5-fcrpvny-fbeg-ynory-nsgre";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:47:"8:negvpyrsrrqonpxi5-fcrpvny-svygre-ynory-orsber";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:46:"8:negvpyrsrrqonpxi5-fcrpvny-svygre-ynory-nsgre";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:35:"8:negvpyrsrrqonpxi5-fcrpvny-fubjvat";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:31:"8:negvpyrsrrqonpxi5-pbzzrag-ntb";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:33:"8:negvpyrsrrqonpxi5-hcqngrf-fvapr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:33:"8:negvpyrsrrqonpxi5-erivfvba-yvax";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:32:"8:negvpyrsrrqonpxi5-fcrpvny-zber";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:37:"8:negvpyrsrrqonpxi5-fcrpvny-cntrgvgyr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:33:"8:negvpyrsrrqonpxi5-sbez-bcgvbavq";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:26:"8:negvpyrsrrqonpxi5-uvqqra";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:27:"8:negvpyrsrrqonpxi5-qryrgrq";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:29:"8:negvpyrsrrqonpxi5-sbez-uvqr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:31:"8:negvpyrsrrqonpxi5-sbez-hauvqr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:32:"8:negvpyrsrrqonpxi5-sbez-urycshy";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:30:"8:negvpyrsrrqonpxi5-sbez-nohfr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:37:"8:negvpyrsrrqonpxi5-sbez-nohfr-znfxrq";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:31:"8:negvpyrsrrqonpxi5-sbez-qryrgr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:34:"8:negvpyrsrrqonpxi5-sbez-birefvtug";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:36:"8:negvpyrsrrqonpxi5-sbez-habirefvtug";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:33:"8:negvpyrsrrqonpxi5-sbez-haqryrgr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:32:"8:negvpyrsrrqonpxi5-sbez-qrpyvar";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:31:"8:negvpyrsrrqonpxi5-sbez-urnqre";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:38:"8:negvpyrsrrqonpxi5-sbez1-urnqre-sbhaq";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:42:"8:negvpyrsrrqonpxi5-sbez1-urnqre-abg-sbhaq";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:45:"8:negvpyrsrrqonpxi5-sbez1-urnqre-yrsg-pbzzrag";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:39:"8:negvpyrsrrqonpxi5-sbez2-urnqre-cenvfr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:40:"8:negvpyrsrrqonpxi5-sbez2-urnqre-ceboyrz";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:41:"8:negvpyrsrrqonpxi5-sbez2-urnqre-dhrfgvba";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:43:"8:negvpyrsrrqonpxi5-sbez2-urnqre-fhttrfgvba";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:32:"8:negvpyrsrrqonpxi5-sbez3-urnqre";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:32:"8:negvpyrsrrqonpxi5-sbez4-urnqre";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:32:"8:negvpyrsrrqonpxi5-sbez5-urnqre";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:34:"8:negvpyrsrrqonpxi5-sbez-abg-fubja";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:32:"8:negvpyrsrrqonpxi5-sbez-vainyvq";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:31:"8:negvpyrsrrqonpxi5-nohfr-fnirq";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:38:"8:negvpyrsrrqonpxi5-nohfr-fnirq-znfxrq";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:35:"8:negvpyrsrrqonpxi5-birefvtug-fnirq";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:37:"8:negvpyrsrrqonpxi5-habirefvtug-fnirq";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:42:"8:negvpyrsrrqonpxi5-reebe-ybnqvat-srrqonpx";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:39:"8:negvpyrsrrqonpxi5-vainyvq-srrqonpx-vq";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:41:"8:negvpyrsrrqonpxi5-vainyvq-srrqonpx-synt";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:33:"8:negvpyrsrrqonpxi5-tb-gb-negvpyr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:35:"8:negvpyrsrrqonpxi5-qvfphffvba-cntr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:30:"8:negvpyrsrrqonpxi5-jungf-guvf";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:35:"8:negvpyrsrrqonpxi5-vainyvq-cntr-vq";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:33:"8:negvpyrsrrqonpxi5-creprag-sbhaq";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:34:"8:negvpyrsrrqonpxi5-birenyy-engvat";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:33:"8:negvpyrsrrqonpxi5-fcrpvny-gvgyr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:51:"8:negvpyrsrrqonpxi5-gnoyr-pncgvba-qnvyluvtufnaqybjf";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:44:"8:negvpyrsrrqonpxi5-gnoyr-pncgvba-qnvyluvtuf";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:43:"8:negvpyrsrrqonpxi5-gnoyr-pncgvba-qnvylybjf";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:51:"8:negvpyrsrrqonpxi5-gnoyr-pncgvba-jrrxylzbfgpunatrq";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:44:"8:negvpyrsrrqonpxi5-gnoyr-pncgvba-erpragybjf";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:38:"8:negvpyrsrrqonpxi5-gnoyr-urnqvat-cntr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:41:"8:negvpyrsrrqonpxi5-gnoyr-urnqvat-nirentr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:35:"8:negvpyrsrrqonpxi5-gnoyr-abengvatf";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:45:"8:negvpyrsrrqonpxi5-pbcl-nobir-uvtuybj-gnoyrf";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:36:"8:negvpyrsrrqonpxi5-qnfuobneq-obggbz";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:19:"8:negvpyrsrrqonpxi5";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:24:"8:negvpyrsrrqonpxi5-qrfp";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:32:"8:negvpyrsrrqonpxi5-pbzzrag-zber";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:32:"8:negvpyrsrrqonpxi5-pbzzrag-yrff";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:31:"8:negvpyrsrrqonpxi5-orgn-abgvpr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:32:"8:negvpyrsrrqonpxi5-ivrjnpgvivgl";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:35:"8:negvpyrsrrqonpxi5-gvzrfgnzc-lrnef";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:36:"8:negvpyrsrrqonpxi5-gvzrfgnzc-zbaguf";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:35:"8:negvpyrsrrqonpxi5-gvzrfgnzc-jrrxf";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:37:"8:negvpyrsrrqonpxi5-gvzrfgnzc-frpbaqf";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:36:"8:negvpyrsrrqonpxi5-znfx-grkg-uvqqra";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:39:"8:negvpyrsrrqonpxi5-znfx-grkg-birefvtug";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:35:"8:negvpyrsrrqonpxi5-znfx-cbfgahzore";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:38:"8:negvpyrsrrqonpxi5-fcrpvny-qvfpynvzre";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:34:"8:negvpyrsrrqonpxi5-fcrpvny-tbonpx";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:44:"8:negvpyrsrrqonpxi5-abgrsylbire-uvqr-pncgvba";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:42:"8:negvpyrsrrqonpxi5-abgrsylbire-uvqr-ynory";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:48:"8:negvpyrsrrqonpxi5-abgrsylbire-uvqr-cynprubyqre";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:43:"8:negvpyrsrrqonpxi5-abgrsylbire-uvqr-fhozvg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:41:"8:negvpyrsrrqonpxi5-abgrsylbire-uvqr-uryc";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:46:"8:negvpyrsrrqonpxi5-abgrsylbire-uvqr-uryc-yvax";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:44:"8:negvpyrsrrqonpxi5-abgrsylbire-fubj-pncgvba";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:42:"8:negvpyrsrrqonpxi5-abgrsylbire-fubj-ynory";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:48:"8:negvpyrsrrqonpxi5-abgrsylbire-fubj-cynprubyqre";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:43:"8:negvpyrsrrqonpxi5-abgrsylbire-fubj-fhozvg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:41:"8:negvpyrsrrqonpxi5-abgrsylbire-fubj-uryc";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:46:"8:negvpyrsrrqonpxi5-abgrsylbire-fubj-uryc-yvax";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:56:"8:negvpyrsrrqonpxi5-abgrsylbire-erdhrfgbirefvtug-pncgvba";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:54:"8:negvpyrsrrqonpxi5-abgrsylbire-erdhrfgbirefvtug-ynory";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:60:"8:negvpyrsrrqonpxi5-abgrsylbire-erdhrfgbirefvtug-cynprubyqre";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:55:"8:negvpyrsrrqonpxi5-abgrsylbire-erdhrfgbirefvtug-fhozvg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:53:"8:negvpyrsrrqonpxi5-abgrsylbire-erdhrfgbirefvtug-uryc";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:58:"8:negvpyrsrrqonpxi5-abgrsylbire-erdhrfgbirefvtug-uryc-yvax";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:58:"8:negvpyrsrrqonpxi5-abgrsylbire-haerdhrfgbirefvtug-pncgvba";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:56:"8:negvpyrsrrqonpxi5-abgrsylbire-haerdhrfgbirefvtug-ynory";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:62:"8:negvpyrsrrqonpxi5-abgrsylbire-haerdhrfgbirefvtug-cynprubyqre";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:57:"8:negvpyrsrrqonpxi5-abgrsylbire-haerdhrfgbirefvtug-fhozvg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:55:"8:negvpyrsrrqonpxi5-abgrsylbire-haerdhrfgbirefvtug-uryc";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:60:"8:negvpyrsrrqonpxi5-abgrsylbire-haerdhrfgbirefvtug-uryc-yvax";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:49:"8:negvpyrsrrqonpxi5-abgrsylbire-birefvtug-pncgvba";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:47:"8:negvpyrsrrqonpxi5-abgrsylbire-birefvtug-ynory";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:53:"8:negvpyrsrrqonpxi5-abgrsylbire-birefvtug-cynprubyqre";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:48:"8:negvpyrsrrqonpxi5-abgrsylbire-birefvtug-fhozvg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:46:"8:negvpyrsrrqonpxi5-abgrsylbire-birefvtug-uryc";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:51:"8:negvpyrsrrqonpxi5-abgrsylbire-birefvtug-uryc-yvax";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:51:"8:negvpyrsrrqonpxi5-abgrsylbire-habirefvtug-pncgvba";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:49:"8:negvpyrsrrqonpxi5-abgrsylbire-habirefvtug-ynory";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:55:"8:negvpyrsrrqonpxi5-abgrsylbire-habirefvtug-cynprubyqre";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:50:"8:negvpyrsrrqonpxi5-abgrsylbire-habirefvtug-fhozvg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:48:"8:negvpyrsrrqonpxi5-abgrsylbire-habirefvtug-uryc";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:53:"8:negvpyrsrrqonpxi5-abgrsylbire-habirefvtug-uryc-yvax";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:56:"8:negvpyrsrrqonpxi5-abgrsylbire-qrpyvarbirefvtug-pncgvba";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:54:"8:negvpyrsrrqonpxi5-abgrsylbire-qrpyvarbirefvtug-ynory";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:60:"8:negvpyrsrrqonpxi5-abgrsylbire-qrpyvarbirefvtug-cynprubyqre";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:55:"8:negvpyrsrrqonpxi5-abgrsylbire-qrpyvarbirefvtug-fhozvg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:53:"8:negvpyrsrrqonpxi5-abgrsylbire-qrpyvarbirefvtug-uryc";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:58:"8:negvpyrsrrqonpxi5-abgrsylbire-qrpyvarbirefvtug-uryc-yvax";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:33:"8:negvpyrsrrqonpxi5-ohpxrg1-gvgyr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:43:"8:negvpyrsrrqonpxi5-ohpxrg1-dhrfgvba-gbttyr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:44:"8:negvpyrsrrqonpxi5-ohpxrg1-gbttyr-sbhaq-lrf";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:43:"8:negvpyrsrrqonpxi5-ohpxrg1-gbttyr-sbhaq-ab";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:49:"8:negvpyrsrrqonpxi5-ohpxrg1-gbttyr-sbhaq-lrf-shyy";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:48:"8:negvpyrsrrqonpxi5-ohpxrg1-gbttyr-sbhaq-ab-shyy";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:48:"8:negvpyrsrrqonpxi5-ohpxrg1-dhrfgvba-pbzzrag-lrf";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:47:"8:negvpyrsrrqonpxi5-ohpxrg1-dhrfgvba-pbzzrag-ab";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:39:"8:negvpyrsrrqonpxi5-ohpxrg1-sbez-fhozvg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:33:"8:negvpyrsrrqonpxi5-ohpxrg2-gvgyr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:44:"8:negvpyrsrrqonpxi5-ohpxrg2-fhttrfgvba-ynory";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:42:"8:negvpyrsrrqonpxi5-ohpxrg2-dhrfgvba-ynory";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:41:"8:negvpyrsrrqonpxi5-ohpxrg2-ceboyrz-ynory";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:40:"8:negvpyrsrrqonpxi5-ohpxrg2-cenvfr-ynory";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:54:"8:negvpyrsrrqonpxi5-ohpxrg2-fhttrfgvba-pbzzrag-qrsnhyg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:52:"8:negvpyrsrrqonpxi5-ohpxrg2-dhrfgvba-pbzzrag-qrsnhyg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:51:"8:negvpyrsrrqonpxi5-ohpxrg2-ceboyrz-pbzzrag-qrsnhyg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:50:"8:negvpyrsrrqonpxi5-ohpxrg2-cenvfr-pbzzrag-qrsnhyg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:39:"8:negvpyrsrrqonpxi5-ohpxrg2-sbez-fhozvg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:33:"8:negvpyrsrrqonpxi5-ohpxrg3-gvgyr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:43:"8:negvpyrsrrqonpxi5-ohpxrg3-engvat-dhrfgvba";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:44:"8:negvpyrsrrqonpxi5-ohpxrg3-engvat-gbbygvc-1";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:44:"8:negvpyrsrrqonpxi5-ohpxrg3-engvat-gbbygvc-2";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:44:"8:negvpyrsrrqonpxi5-ohpxrg3-engvat-gbbygvc-3";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:44:"8:negvpyrsrrqonpxi5-ohpxrg3-engvat-gbbygvc-4";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:44:"8:negvpyrsrrqonpxi5-ohpxrg3-engvat-gbbygvc-5";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:40:"8:negvpyrsrrqonpxi5-ohpxrg3-pyrne-engvat";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:43:"8:negvpyrsrrqonpxi5-ohpxrg3-pbzzrag-qrsnhyg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:39:"8:negvpyrsrrqonpxi5-ohpxrg3-sbez-fhozvg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:33:"8:negvpyrsrrqonpxi5-ohpxrg4-gvgyr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:35:"8:negvpyrsrrqonpxi5-ohpxrg4-fhournq";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:40:"8:negvpyrsrrqonpxi5-ohpxrg4-grnfre-yvar1";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:40:"8:negvpyrsrrqonpxi5-ohpxrg4-grnfre-yvar2";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:41:"8:negvpyrsrrqonpxi5-ohpxrg4-yrnea-gb-rqvg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:39:"8:negvpyrsrrqonpxi5-ohpxrg4-sbez-fhozvg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:45:"8:negvpyrsrrqonpxi5-ohpxrg4-uryc-gbbygvc-vasb";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:45:"8:negvpyrsrrqonpxi5-ohpxrg5-sbez-fjvgpu-ynory";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:44:"8:negvpyrsrrqonpxi5-ohpxrg5-sbez-cnary-gvgyr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:50:"8:negvpyrsrrqonpxi5-ohpxrg5-sbez-cnary-rkcynangvba";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:55:"8:negvpyrsrrqonpxi5-ohpxrg5-sbez-cnary-rkcynangvba-yvax";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:44:"8:negvpyrsrrqonpxi5-ohpxrg5-sbez-cnary-pyrne";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:48:"8:negvpyrsrrqonpxi5-ohpxrg5-sbez-cnary-rkcregvfr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:56:"8:negvpyrsrrqonpxi5-ohpxrg5-sbez-cnary-rkcregvfr-fghqvrf";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:59:"8:negvpyrsrrqonpxi5-ohpxrg5-sbez-cnary-rkcregvfr-cebsrffvba";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:54:"8:negvpyrsrrqonpxi5-ohpxrg5-sbez-cnary-rkcregvfr-ubool";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:54:"8:negvpyrsrrqonpxi5-ohpxrg5-sbez-cnary-rkcregvfr-bgure";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:50:"8:negvpyrsrrqonpxi5-ohpxrg5-sbez-cnary-urycvzcebir";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:55:"8:negvpyrsrrqonpxi5-ohpxrg5-sbez-cnary-urycvzcebir-abgr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:68:"8:negvpyrsrrqonpxi5-ohpxrg5-sbez-cnary-urycvzcebir-rznvy-cynprubyqre";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:58:"8:negvpyrsrrqonpxi5-ohpxrg5-sbez-cnary-urycvzcebir-cevinpl";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:45:"8:negvpyrsrrqonpxi5-ohpxrg5-sbez-cnary-fhozvg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:46:"8:negvpyrsrrqonpxi5-ohpxrg5-sbez-cnary-craqvat";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:46:"8:negvpyrsrrqonpxi5-ohpxrg5-sbez-cnary-fhpprff";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:51:"8:negvpyrsrrqonpxi5-ohpxrg5-sbez-cnary-rkcvel-gvgyr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:53:"8:negvpyrsrrqonpxi5-ohpxrg5-sbez-cnary-rkcvel-zrffntr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:47:"8:negvpyrsrrqonpxi5-ohpxrg5-ercbeg-fjvgpu-ynory";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:46:"8:negvpyrsrrqonpxi5-ohpxrg5-ercbeg-cnary-gvgyr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:52:"8:negvpyrsrrqonpxi5-ohpxrg5-ercbeg-cnary-qrfpevcgvba";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:40:"8:negvpyrsrrqonpxi5-ohpxrg5-ercbeg-rzcgl";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:42:"8:negvpyrsrrqonpxi5-ohpxrg5-ercbeg-engvatf";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:45:"8:negvpyrsrrqonpxi5-ohpxrg5-gehfgjbegul-ynory";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:43:"8:negvpyrsrrqonpxi5-ohpxrg5-gehfgjbegul-gvc";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:49:"8:negvpyrsrrqonpxi5-ohpxrg5-gehfgjbegul-gbbygvc-1";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:49:"8:negvpyrsrrqonpxi5-ohpxrg5-gehfgjbegul-gbbygvc-2";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:49:"8:negvpyrsrrqonpxi5-ohpxrg5-gehfgjbegul-gbbygvc-3";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:49:"8:negvpyrsrrqonpxi5-ohpxrg5-gehfgjbegul-gbbygvc-4";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:49:"8:negvpyrsrrqonpxi5-ohpxrg5-gehfgjbegul-gbbygvc-5";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:42:"8:negvpyrsrrqonpxi5-ohpxrg5-pbzcyrgr-ynory";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:40:"8:negvpyrsrrqonpxi5-ohpxrg5-pbzcyrgr-gvc";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:46:"8:negvpyrsrrqonpxi5-ohpxrg5-pbzcyrgr-gbbygvc-1";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:46:"8:negvpyrsrrqonpxi5-ohpxrg5-pbzcyrgr-gbbygvc-2";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:46:"8:negvpyrsrrqonpxi5-ohpxrg5-pbzcyrgr-gbbygvc-3";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:46:"8:negvpyrsrrqonpxi5-ohpxrg5-pbzcyrgr-gbbygvc-4";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:46:"8:negvpyrsrrqonpxi5-ohpxrg5-pbzcyrgr-gbbygvc-5";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:43:"8:negvpyrsrrqonpxi5-ohpxrg5-bowrpgvir-ynory";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:41:"8:negvpyrsrrqonpxi5-ohpxrg5-bowrpgvir-gvc";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:47:"8:negvpyrsrrqonpxi5-ohpxrg5-bowrpgvir-gbbygvc-1";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:47:"8:negvpyrsrrqonpxi5-ohpxrg5-bowrpgvir-gbbygvc-2";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:47:"8:negvpyrsrrqonpxi5-ohpxrg5-bowrpgvir-gbbygvc-3";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:47:"8:negvpyrsrrqonpxi5-ohpxrg5-bowrpgvir-gbbygvc-4";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:47:"8:negvpyrsrrqonpxi5-ohpxrg5-bowrpgvir-gbbygvc-5";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:45:"8:negvpyrsrrqonpxi5-ohpxrg5-jryyjevggra-ynory";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:43:"8:negvpyrsrrqonpxi5-ohpxrg5-jryyjevggra-gvc";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:49:"8:negvpyrsrrqonpxi5-ohpxrg5-jryyjevggra-gbbygvc-1";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:49:"8:negvpyrsrrqonpxi5-ohpxrg5-jryyjevggra-gbbygvc-2";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:49:"8:negvpyrsrrqonpxi5-ohpxrg5-jryyjevggra-gbbygvc-3";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:49:"8:negvpyrsrrqonpxi5-ohpxrg5-jryyjevggra-gbbygvc-4";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:49:"8:negvpyrsrrqonpxi5-ohpxrg5-jryyjevggra-gbbygvc-5";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:44:"8:negvpyrsrrqonpxi5-ohpxrg5-gbbyobk-yvaxgrkg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:38:"8:negvpyrsrrqonpxi5-funerq-ba-srrqonpx";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:47:"8:negvpyrsrrqonpxi5-funerq-ba-srrqonpx-yvaxgrkg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:38:"8:negvpyrsrrqonpxi5-uryc-gbbygvc-gvgyr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:37:"8:negvpyrsrrqonpxi5-uryc-gbbygvc-vasb";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:41:"8:negvpyrsrrqonpxi5-uryc-gbbygvc-yvaxgrkg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:40:"8:negvpyrsrrqonpxi5-uryc-gbbygvc-yvaxhey";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:38:"8:negvpyrsrrqonpxi5-genafcnerapl-grezf";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:47:"8:negvpyrsrrqonpxi5-genafcnerapl-grezf-yvaxgrkg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:42:"8:negvpyrsrrqonpxi5-genafcnerapl-grezf-hey";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:36:"8:negvpyrsrrqonpxi5-fvgrfho-yvaxgrkg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:37:"8:negvpyrsrrqonpxi5-gvgyrone-yvaxgrkg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:37:"8:negvpyrsrrqonpxi5-svkrqgno-yvaxgrkg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:43:"8:negvpyrsrrqonpxi5-obggbzevtuggno-yvaxgrkg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:36:"8:negvpyrsrrqonpxi5-frpgvba-yvaxgrkg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:36:"8:negvpyrsrrqonpxi5-gbbyobk-yvaxgrkg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:30:"8:negvpyrsrrqonpxi5-cevinplhey";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:38:"8:negvpyrsrrqonpxi5-qvfnoyr-cersrerapr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:27:"8:evtug-nsgi5-uvqr-srrqonpx";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:29:"8:evtug-nsgi5-qryrgr-srrqonpx";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:34:"8:evtug-nsgi5-frr-qryrgrq-srrqonpx";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:33:"8:evtug-nsgi5-frr-uvqqra-srrqonpx";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:28:"8:negvpyrsrrqonpxi5-ybt-anzr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:30:"8:negvpyrsrrqonpxi5-ybt-urnqre";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:33:"8:negvpyrsrrqonpxi5-ybt-birefvtug";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:35:"8:negvpyrsrrqonpxi5-ybt-habirefvtug";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:30:"8:negvpyrsrrqonpxi5-ybt-uvqqra";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:32:"8:negvpyrsrrqonpxi5-ybt-hauvqqra";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:31:"8:negvpyrsrrqonpxi5-ybt-qrpyvar";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:31:"8:negvpyrsrrqonpxi5-ybt-erdhrfg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:33:"8:negvpyrsrrqonpxi5-ybt-haerdhrfg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:28:"8:negvpyrsrrqonpxi5-ybt-synt";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:30:"8:negvpyrsrrqonpxi5-ybt-hasynt";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:40:"8:negvpyrsrrqonpxi5-npgvivgl-cnar-urnqre";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:42:"8:negvpyrsrrqonpxi5-npgvivgl-srrqonpx-vasb";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:42:"8:negvpyrsrrqonpxi5-npgvivgl-srrqonpx-qngr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:38:"8:negvpyrsrrqonpxi5-npgvivgl-creznyvax";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:36:"8:negvpyrsrrqonpxi5-npgvivgl-erdhrfg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:38:"8:negvpyrsrrqonpxi5-npgvivgl-haerdhrfg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:36:"8:negvpyrsrrqonpxi5-npgvivgl-qrpyvar";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:35:"8:negvpyrsrrqonpxi5-npgvivgl-uvqqra";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:33:"8:negvpyrsrrqonpxi5-npgvivgl-synt";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:37:"8:negvpyrsrrqonpxi5-npgvivgl-hauvqqra";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:35:"8:negvpyrsrrqonpxi5-npgvivgl-hasynt";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:38:"8:negvpyrsrrqonpxi5-npgvivgl-birefvtug";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:40:"8:negvpyrsrrqonpxi5-npgvivgl-habirefvtug";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:34:"8:negvpyrsrrqonpxi5-npgvivgl-pbhag";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:33:"8:negvpyrsrrqonpxi5-npgvivgl-zber";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:41:"8:negvpyrsrrqonpxi5-npgvivgl-vgrz-pbzzrag";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:33:"8:negvpyrsrrqonpxi5-npgvivgl-vgrz";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:32:"8:negvpyrsrrqonpxi5-qrsnhyg-hfre";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:46:"8:negvpyrsrrqonpxi5-rznvypncgher-erfcbafr-obql";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:51:"8:negvpyrsrrqonpxi5-rznvy-erdhrfg-birefvtug-fhowrpg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:48:"8:negvpyrsrrqonpxi5-rznvy-erdhrfg-birefvtug-obql";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:41:"8:negvpyrsrrqonpxi5-qvfnoyr-sylbire-gvgyr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:40:"8:negvpyrsrrqonpxi5-qvfnoyr-sylbire-uryc";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:54:"8:negvpyrsrrqonpxi5-qvfnoyr-sylbire-uryc-rzcunfvf-grkg";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:49:"8:negvpyrsrrqonpxi5-qvfnoyr-sylbire-uryc-ybpngvba";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:46:"8:negvpyrsrrqonpxi5-qvfnoyr-sylbire-cersohggba";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:40:"8:nohfrsvygre-rqvg-npgvba-nsgi5syntnohfr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:51:"8:negvpyrsrrqonpxi5-nohfrsvygre-abgr-nsgi5syntnohfr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:35:"8:nohfrsvygre-rqvg-npgvba-nsgi5uvqr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:46:"8:negvpyrsrrqonpxi5-nohfrsvygre-abgr-nsgi5uvqr";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:47:"8:nohfrsvygre-rqvg-npgvba-nsgi5erdhrfgbirefvtug";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:58:"8:negvpyrsrrqonpxi5-nohfrsvygre-abgr-nsgi5erdhrfgbirefvtug";a:3:{i:0;R:5625;i:1;R:801;i:2;R:3237;}s:17:"8:punevafreg-qrfp";a:3:{i:0;s:14:"ext-charinsert";i:1;R:801;i:2;R:3237;}s:19:"8:purpxhfre-fhzznel";a:3:{i:0;s:13:"ext-checkuser";i:1;R:801;i:2;R:3237;}s:16:"8:purpxhfre-qrfp";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:19:"8:purpxhfre-ybtpnfr";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:11:"8:purpxhfre";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:14:"8:purpxhfreybt";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:20:"8:purpxhfre-pbagevof";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:17:"8:tebhc-purpxhfre";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:24:"8:tebhc-purpxhfre-zrzore";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:17:"8:evtug-purpxhfre";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:21:"8:evtug-purpxhfre-ybt";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:18:"8:npgvba-purpxhfre";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:22:"8:npgvba-purpxhfre-ybt";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:21:"8:tebhccntr-purpxhfre";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:18:"8:purpxhfre-ernfba";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:22:"8:purpxhfre-ernfba-ncv";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:19:"8:purpxhfre-fubjybt";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:17:"8:purpxhfre-dhrel";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:18:"8:purpxhfre-gnetrg";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:17:"8:purpxhfre-hfref";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:17:"8:purpxhfre-rqvgf";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:15:"8:purpxhfre-vcf";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:18:"8:purpxhfre-frnepu";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:18:"8:purpxhfre-crevbq";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:18:"8:purpxhfre-jrrx-1";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:18:"8:purpxhfre-jrrx-2";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:17:"8:purpxhfre-zbagu";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:15:"8:purpxhfre-nyy";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:22:"8:purpxhfre-pvqe-ynory";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:20:"8:purpxhfre-pvqe-erf";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:17:"8:purpxhfre-rzcgl";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:19:"8:purpxhfre-abzngpu";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:25:"8:purpxhfre-abzngpu-rqvgf";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:17:"8:purpxhfre-purpx";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:20:"8:purpxhfre-ybt-snvy";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:17:"8:purpxhfre-abybt";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:19:"8:purpxhfre-oybpxrq";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:20:"8:purpxhfre-toybpxrq";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:18:"8:purpxhfre-ybpxrq";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:22:"8:purpxhfre-jnfoybpxrq";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:21:"8:purpxhfre-ybpnybayl";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:21:"8:purpxhfre-znffoybpx";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:26:"8:purpxhfre-znffoybpx-grkg";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:20:"8:purpxhfre-oybpxgnt";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:25:"8:purpxhfre-oybpxgnt-gnyx";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:28:"8:purpxhfre-znffoybpx-pbzzvg";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:25:"8:purpxhfre-oybpx-fhpprff";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:25:"8:purpxhfre-oybpx-snvyher";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:23:"8:purpxhfre-oybpx-yvzvg";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:26:"8:purpxhfre-oybpx-abernfba";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:20:"8:purpxhfre-abernfba";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:20:"8:purpxhfre-nppbhagf";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:20:"8:purpxhfre-gbb-znal";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:28:"8:purpxhfre-hfre-abarkvfgrag";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:23:"8:purpxhfre-frnepu-sbez";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:25:"8:purpxhfre-frnepu-fhozvg";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:28:"8:purpxhfre-frnepu-vavgvngbe";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:25:"8:purpxhfre-frnepu-gnetrg";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:23:"8:purpxhfre-vcrqvgpbhag";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:22:"8:purpxhfre-ybt-erghea";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:19:"8:purpxhfre-yvzvgrq";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:23:"8:purpxhfre-ybt-hfrevcf";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:23:"8:purpxhfre-ybt-vcrqvgf";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:23:"8:purpxhfre-ybt-vchfref";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:27:"8:purpxhfre-ybt-vcrqvgf-kss";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:27:"8:purpxhfre-ybt-vchfref-kss";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:25:"8:purpxhfre-ybt-hfrerqvgf";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:29:"8:purpxhfre-nhgbperngr-npgvba";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:25:"8:purpxhfre-perngr-npgvba";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:24:"8:purpxhfre-rznvy-npgvba";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:24:"8:purpxhfre-erfrg-npgvba";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:21:"8:purpxhfre-gbbyyvaxf";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:21:"8:tebhc-purpxhfre.pff";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:20:"8:tebhc-purpxhfre.wf";a:3:{i:0;R:5945;i:1;R:801;i:2;R:3237;}s:11:"8:pyqe-qrfp";a:3:{i:0;s:8:"ext-cldr";i:1;R:801;i:2;R:3237;}s:15:"8:pyvpxgenpxvat";a:3:{i:0;s:17:"ext-clicktracking";i:1;R:801;i:2;R:3237;}s:20:"8:pyvpxgenpxvat-qrfp";a:3:{i:0;R:6021;i:1;R:801;i:2;R:3237;}s:17:"8:pyvragfvqr-qrfp";a:3:{i:0;s:14:"ext-clientside";i:1;R:801;i:2;R:3237;}s:6:"8:pbqr";a:3:{i:0;s:14:"ext-codereview";i:1;R:801;i:2;R:3237;}s:13:"8:pbqr-eri-vq";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:16:"8:pbqr-eri-gvgyr";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:15:"8:pbqr-pbzzragf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:17:"8:pbqr-ersreraprf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:17:"8:pbqr-ersreraprq";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:20:"8:pbqr-punatr-fgnghf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:18:"8:pbqr-punatr-gntf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:21:"8:pbqr-punatr-erzbirq";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:19:"8:pbqr-punatr-nqqrq";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:17:"8:pbqr-byq-fgnghf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:17:"8:pbqr-arj-fgnghf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:19:"8:pbqr-cebc-punatrf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:17:"8:pbqrerivrj-qrfp";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:14:"8:pbqr-ab-ercb";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:18:"8:pbqr-perngr-ercb";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:28:"8:pbqr-arrq-ercbnqzva-evtugf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:29:"8:pbqr-arrq-tebhc-jvgu-evtugf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:21:"8:pbqr-ercb-abg-sbhaq";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:16:"8:pbqr-ybnq-qvss";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:12:"8:pbqr-abgrf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:20:"8:pbqr-fgnghfpunatrf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:16:"8:pbqr-zlpbzzvgf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:17:"8:pbqr-zlpbzzragf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:14:"8:pbqr-nhgubef";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:13:"8:pbqr-fgnghf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:11:"8:pbqr-gntf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:19:"8:pbqr-gntf-ab-gntf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:19:"8:pbqr-nhgubef-grkg";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:21:"8:pbqr-nhgube-unfyvax";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:20:"8:pbqr-nhgube-becuna";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:20:"8:pbqr-nhgube-qbyvax";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:23:"8:pbqr-nhgube-nygreyvax";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:22:"8:pbqr-nhgube-behayvax";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:18:"8:pbqr-nhgube-anzr";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:21:"8:pbqr-nhgube-fhpprff";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:18:"8:pbqr-nhgube-yvax";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:20:"8:pbqr-nhgube-hayvax";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:27:"8:pbqr-nhgube-hayvaxfhpprff";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:22:"8:pbqr-nhgube-onqgbxra";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:19:"8:pbqr-nhgube-gbgny";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:24:"8:pbqr-nhgube-ynfgpbzzvg";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:20:"8:pbqr-oebjfvat-cngu";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:15:"8:pbqr-svryq-vq";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:19:"8:pbqr-svryq-nhgube";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:17:"8:pbqr-svryq-hfre";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:20:"8:pbqr-svryq-zrffntr";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:19:"8:pbqr-svryq-fgnghf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:31:"8:pbqr-svryq-fgnghf-qrfpevcgvba";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:22:"8:pbqr-svryq-gvzrfgnzc";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:21:"8:pbqr-svryq-pbzzragf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:17:"8:pbqr-svryq-cngu";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:17:"8:pbqr-svryq-grkg";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:19:"8:pbqr-svryq-fryrpg";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:23:"8:pbqr-ersrerapr-erzbir";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:26:"8:pbqr-ersrerapr-nffbpvngr";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:33:"8:pbqr-ersrerapr-nffbpvngr-fhozvg";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:17:"8:pbqr-eri-nhgube";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:15:"8:pbqr-eri-qngr";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:18:"8:pbqr-eri-zrffntr";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:15:"8:pbqr-eri-ercb";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:14:"8:pbqr-eri-eri";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:21:"8:pbqr-eri-eri-ivrjip";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:16:"8:pbqr-eri-cnguf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:21:"8:pbqr-eri-zbqvsvrq-n";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:21:"8:pbqr-eri-zbqvsvrq-e";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:21:"8:pbqr-eri-zbqvsvrq-q";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:21:"8:pbqr-eri-zbqvsvrq-z";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:20:"8:pbqr-eri-vzntrqvss";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:17:"8:pbqr-eri-fgnghf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:21:"8:pbqr-eri-fgnghf-frg";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:15:"8:pbqr-eri-gntf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:18:"8:pbqr-eri-gnt-nqq";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:21:"8:pbqr-eri-gnt-erzbir";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:21:"8:pbqr-eri-pbzzrag-ol";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:26:"8:pbqr-eri-pbzzrag-cerivrj";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:36:"8:pbqr-eri-pbzzrag-cerivrj-npprffxrl";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:25:"8:pbqr-eri-vayvar-cerivrj";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:15:"8:pbqr-eri-qvss";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:20:"8:pbqr-eri-qvss-yvax";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:25:"8:pbqr-eri-qvss-gbb-ynetr";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:21:"8:pbqr-eri-chetr-yvax";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:16:"8:pbqr-eri-gbgny";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:20:"8:pbqr-eri-abg-sbhaq";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:23:"8:pbqr-eri-uvfgbel-yvax";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:17:"8:pbqr-fgnghf-arj";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:22:"8:pbqr-fgnghf-qrfp-arj";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:19:"8:pbqr-fgnghf-svkzr";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:24:"8:pbqr-fgnghf-qrfp-svkzr";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:22:"8:pbqr-fgnghf-eriregrq";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:27:"8:pbqr-fgnghf-qrfp-eriregrq";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:22:"8:pbqr-fgnghf-erfbyirq";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:27:"8:pbqr-fgnghf-qrfp-erfbyirq";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:16:"8:pbqr-fgnghf-bx";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:21:"8:pbqr-fgnghf-qrfp-bx";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:22:"8:pbqr-fgnghf-qrsreerq";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:27:"8:pbqr-fgnghf-qrfp-qrsreerq";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:17:"8:pbqr-fgnghf-byq";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:22:"8:pbqr-fgnghf-qrfp-byq";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:15:"8:pbqr-fvtabssf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:21:"8:pbqr-fvtabss-yrtraq";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:21:"8:pbqr-fvtabss-fhozvg";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:21:"8:pbqr-fvtabss-fgevxr";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:22:"8:pbqr-fvtabss-fvtabss";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:29:"8:pbqr-fvtabss-synt-vafcrpgrq";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:26:"8:pbqr-fvtabss-synt-grfgrq";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:25:"8:pbqr-fvtabss-svryq-hfre";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:25:"8:pbqr-fvtabss-svryq-synt";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:25:"8:pbqr-fvtabss-svryq-qngr";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:25:"8:pbqr-fvtabss-fgehpxqngr";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:24:"8:pbqr-cngufrnepu-yrtraq";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:22:"8:pbqr-cngufrnepu-cngu";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:24:"8:pbqr-cngufrnepu-svygre";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:26:"8:pbqr-erisvygre-pe_fgnghf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:26:"8:pbqr-erisvygre-pe_nhgube";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:23:"8:pbqr-erisvygre-pg_gnt";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:22:"8:pbqr-erisvygre-pyrne";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:17:"8:pbqr-eri-fhozvg";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:27:"8:pbqr-eri-fhozvg-npprffxrl";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:22:"8:pbqr-eri-fhozvg-arkg";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:32:"8:pbqr-eri-fhozvg-arkg-npprffxrl";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:15:"8:pbqr-eri-arkg";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:25:"8:pbqr-eri-arkg-npprffxrl";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:19:"8:pbqr-ongpu-fgnghf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:17:"8:pbqr-ongpu-gntf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:24:"8:pbqrerivrj-ongpu-gvgyr";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:25:"8:pbqrerivrj-ongpu-fhozvg";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:19:"8:pbqr-eryrnfrabgrf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:21:"8:pbqr-eryrnfr-yrtraq";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:23:"8:pbqr-eryrnfr-fgnegeri";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:21:"8:pbqr-eryrnfr-raqeri";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:21:"8:pbqrerivrj-fhogvgyr";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:23:"8:pbqrerivrj-ercyl-yvax";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:27:"8:pbqrerivrj-bireivrj-gvgyr";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:26:"8:pbqrerivrj-bireivrj-qrfp";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:23:"8:pbqrerivrj-rznvy-fhow";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:23:"8:pbqrerivrj-rznvy-obql";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:24:"8:pbqrerivrj-rznvy-fhow2";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:24:"8:pbqrerivrj-rznvy-obql2";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:24:"8:pbqrerivrj-rznvy-fhow3";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:24:"8:pbqrerivrj-rznvy-obql3";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:24:"8:pbqrerivrj-rznvy-fhow4";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:24:"8:pbqrerivrj-rznvy-obql4";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:12:"8:pbqr-fgngf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:19:"8:pbqr-fgngf-urnqre";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:17:"8:pbqr-fgngf-znva";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:29:"8:pbqr-fgngf-fgnghf-oernxqbja";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:28:"8:pbqr-fgngf-svkzr-oernxqbja";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:33:"8:pbqr-fgngf-svkzr-oernxqbja-cngu";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:23:"8:pbqr-fgngf-svkzr-cngu";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:26:"8:pbqr-fgngf-arj-oernxqbja";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:31:"8:pbqr-fgngf-arj-oernxqbja-cngu";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:21:"8:pbqr-fgngf-arj-cngu";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:18:"8:pbqr-fgngf-pbhag";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:26:"8:pbqr-gbbygvc-jvgufhzznel";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:29:"8:pbqr-gbbygvc-jvgubhgfhzznel";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:11:"8:ercbnqzva";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:22:"8:ercbnqzva-arj-yrtraq";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:21:"8:ercbnqzva-arj-ynory";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:22:"8:ercbnqzva-arj-ohggba";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:23:"8:ercbnqzva-rqvg-yrtraq";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:21:"8:ercbnqzva-rqvg-cngu";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:20:"8:ercbnqzva-rqvg-oht";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:21:"8:ercbnqzva-rqvg-ivrj";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:23:"8:ercbnqzva-rqvg-ohggba";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:23:"8:ercbnqzva-rqvg-fhprff";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:15:"8:ercbnqzva-ani";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:17:"8:evtug-ercbnqzva";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:22:"8:evtug-pbqrerivrj-hfr";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:26:"8:evtug-pbqrerivrj-nqq-gnt";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:29:"8:evtug-pbqrerivrj-erzbir-gnt";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:31:"8:evtug-pbqrerivrj-cbfg-pbzzrag";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:29:"8:evtug-pbqrerivrj-frg-fgnghf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:26:"8:evtug-pbqrerivrj-fvtabss";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:28:"8:evtug-pbqrerivrj-yvax-hfre";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:28:"8:evtug-pbqrerivrj-nffbpvngr";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:29:"8:evtug-pbqrerivrj-erivrj-bja";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:18:"8:npgvba-ercbnqzva";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:23:"8:npgvba-pbqrerivrj-hfr";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:27:"8:npgvba-pbqrerivrj-nqq-gnt";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:30:"8:npgvba-pbqrerivrj-erzbir-gnt";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:32:"8:npgvba-pbqrerivrj-cbfg-pbzzrag";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:30:"8:npgvba-pbqrerivrj-frg-fgnghf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:27:"8:npgvba-pbqrerivrj-fvtabss";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:29:"8:npgvba-pbqrerivrj-yvax-hfre";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:29:"8:npgvba-pbqrerivrj-nffbpvngr";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:30:"8:npgvba-pbqrerivrj-erivrj-bja";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:30:"8:fcrpvnycntrf-tebhc-qrirybcre";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:17:"8:tebhc-fianqzvaf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:24:"8:tebhc-fianqzvaf-zrzore";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:21:"8:tebhccntr-fianqzvaf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:21:"8:tebhc-fianqzvaf.pff";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:20:"8:tebhc-fianqzvaf.wf";a:3:{i:0;R:6026;i:1;R:801;i:2;R:3237;}s:19:"8:pbyy-cevag_rkcbeg";a:4:{i:0;s:19:"ext-collection-core";i:1;R:801;i:2;R:3237;i:3;s:20:"ext-collection-0-all";}s:20:"8:pbyy-perngr_n_obbx";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:28:"8:pbyy-perngr_n_obbx_gbbygvc";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:19:"8:pbyy-obbx_perngbe";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:18:"8:pbyy-qbjaybnq_nf";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:26:"8:pbyy-qbjaybnq_nf_gbbygvc";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:14:"8:pbyy-qvfnoyr";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:27:"8:pbyy-obbx_perngbe_qvfnoyr";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:35:"8:pbyy-obbx_perngbe_qvfnoyr_gbbygvc";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:25:"8:pbyy-nqq_yvaxrq_negvpyr";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:28:"8:pbyy-erzbir_yvaxrq_negvpyr";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:19:"8:pbyy-nqq_pngrtbel";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:27:"8:pbyy-nqq_pngrtbel_gbbygvc";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:20:"8:pbyy-nqq_guvf_cntr";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:23:"8:pbyy-nqq_cntr_gbbygvc";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:20:"8:pbyy-obbxfpngrtbel";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:23:"8:pbyy-pyrne_pbyyrpgvba";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:31:"8:pbyy-pyrne_pbyyrpgvba_pbasvez";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:31:"8:pbyy-pyrne_pbyyrpgvba_gbbygvc";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:11:"8:pbyy-uryc";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:19:"8:pbyy-uryc_gbbygvc";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:15:"8:pbyy-uryccntr";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:22:"8:pbyy-ybnq_pbyyrpgvba";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:30:"8:pbyy-ybnq_pbyyrpgvba_gbbygvc";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:14:"8:pbyy-a_cntrf";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:28:"8:pbyy-cevagnoyr_irefvba_cqs";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:23:"8:pbyy-erzbir_guvf_cntr";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:26:"8:pbyy-erzbir_cntr_gbbygvc";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:22:"8:pbyy-fubj_pbyyrpgvba";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:30:"8:pbyy-fubj_pbyyrpgvba_gbbygvc";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:18:"8:pbyy-abg_nqqnoyr";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:23:"8:pbyy-znxr_fhttrfgvbaf";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:31:"8:pbyy-znxr_fhttrfgvbaf_gbbygvc";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:22:"8:pbyy-fhttrfg_ranoyrq";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:20:"8:pbyy-fhttrfg_rzcgl";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:23:"8:pbyy-hfre_obbx_cersvk";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:28:"8:pbyy-pbzzhavgl_obbx_cersvk";a:4:{i:0;R:6220;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:11:"8:pbyy-qrfp";a:4:{i:0;s:20:"ext-collection-other";i:1;R:801;i:2;R:3237;i:3;R:6221;}s:25:"8:pbyy-obbx_perngbe_vageb";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:23:"8:pbyy-znantr_lbhe_obbx";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:24:"8:pbyy-obbx_perngbe_uryc";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:25:"8:pbyy-fgneg_obbx_perngbe";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:28:"8:pbyy-obbx_perngbe_pbagvahr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:32:"8:pbyy-obbx_perngbe_qvfnoyr_grkg";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:32:"8:pbyy-obbx_perngbe_grkg_negvpyr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:17:"8:pbyy-pbyyrpgvba";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:18:"8:pbyy-pbyyrpgvbaf";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:31:"8:pbyy-rkpyhfvba_pngrtbel_gvgyr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:31:"8:pbyy-grzcyngr_oynpxyvfg_gvgyr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:28:"8:pbyy-cevag_grzcyngr_cersvk";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:29:"8:pbyy-cevag_grzcyngr_cnggrea";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:28:"8:pbyy-haxabja_fhocntr_gvgyr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:27:"8:pbyy-haxabja_fhocntr_grkg";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:31:"8:pbyy-pbhyqabgnqqnegvpyr_gvgyr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:29:"8:pbyy-pbhyqabgnqqnegvpyr_zft";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:34:"8:pbyy-pbhyqabgerzbirnegvpyr_gvgyr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:32:"8:pbyy-pbhyqabgerzbirnegvpyr_zft";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:20:"8:pbyy-abfpevcg_grkg";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:25:"8:pbyy-fnirqobbx_grzcyngr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:16:"8:pbyy-lbhe_obbx";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:21:"8:pbyy-qbjaybnq_gvgyr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:20:"8:pbyy-qbjaybnq_grkg";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:23:"8:pbyy-qbjaybnq_nf_grkg";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:15:"8:pbyy-qbjaybnq";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:19:"8:pbyy-sbezng_ynory";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:13:"8:pbyy-erzbir";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:11:"8:pbyy-fubj";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:18:"8:pbyy-zbir_gb_gbc";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:14:"8:pbyy-zbir_hc";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:16:"8:pbyy-zbir_qbja";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:21:"8:pbyy-zbir_gb_obggbz";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:12:"8:pbyy-gvgyr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:15:"8:pbyy-fhogvgyr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:15:"8:pbyy-pbagragf";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:20:"8:pbyy-qent_naq_qebc";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:21:"8:pbyy-perngr_puncgre";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:26:"8:pbyy-fbeg_nycunorgvpnyyl";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:13:"8:pbyy-eranzr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:18:"8:pbyy-arj_puncgre";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:21:"8:pbyy-eranzr_puncgre";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:23:"8:pbyy-ab_fhpu_pngrtbel";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:20:"8:pbyy-abgvgyr_gvgyr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:24:"8:pbyy-cbfg_snvyrq_gvgyr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:22:"8:pbyy-cbfg_snvyrq_zft";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:27:"8:pbyy-zjfreir_snvyrq_gvgyr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:25:"8:pbyy-zjfreir_snvyrq_zft";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:20:"8:pbyy-reebe_ercbafr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:23:"8:pbyy-rzcgl_pbyyrpgvba";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:15:"8:pbyy-erivfvba";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:28:"8:pbyy-fnir_pbyyrpgvba_gvgyr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:27:"8:pbyy-fnir_pbyyrpgvba_grkg";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:20:"8:pbyy-ybtva_gb_fnir";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:32:"8:pbyy-crefbany_pbyyrpgvba_ynory";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:33:"8:pbyy-pbzzhavgl_pbyyrpgvba_ynory";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:22:"8:pbyy-fnir_pbyyrpgvba";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:20:"8:pbyy-fnir_pngrtbel";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:22:"8:pbyy-birejevgr_gvgyr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:21:"8:pbyy-birejevgr_grkg";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:10:"8:pbyy-lrf";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:9:"8:pbyy-ab";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:26:"8:pbyy-ybnq_birejevgr_grkg";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:16:"8:pbyy-birejevgr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:13:"8:pbyy-nccraq";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:13:"8:pbyy-pnapry";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:13:"8:pbyy-hcqngr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:27:"8:pbyy-yvzvg_rkprrqrq_gvgyr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:26:"8:pbyy-yvzvg_rkprrqrq_grkg";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:22:"8:pbyy-eraqrevat_gvgyr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:21:"8:pbyy-eraqrevat_grkg";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:23:"8:pbyy-eraqrevat_fgnghf";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:24:"8:pbyy-eraqrevat_negvpyr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:21:"8:pbyy-eraqrevat_cntr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:39:"8:pbyy-eraqrevat_cntr_vasb_grkg_negvpyr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:45:"8:pbyy-eraqrevat_pbyyrpgvba_vasb_grkg_negvpyr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:31:"8:pbyy-eraqrevat_svavfurq_gvgyr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:30:"8:pbyy-eraqrevat_svavfurq_grkg";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:38:"8:pbyy-svavfurq_cntr_vasb_grkg_negvpyr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:44:"8:pbyy-svavfurq_pbyyrpgvba_vasb_grkg_negvpyr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:21:"8:pbyy-abgsbhaq_gvgyr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:20:"8:pbyy-abgsbhaq_grkg";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:30:"8:pbyy-qbjaybnq_abgsbhaq_gvgyr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:29:"8:pbyy-qbjaybnq_abgsbhaq_grkg";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:28:"8:pbyy-qbjaybnq_snvyrq_gvgyr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:27:"8:pbyy-qbjaybnq_snvyrq_grkg";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:16:"8:pbyy-vf_pnpurq";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:25:"8:pbyy-rkpyhqrq-grzcyngrf";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:28:"8:pbyy-oynpxyvfgrq-grzcyngrf";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:27:"8:pbyy-erghea_gb_pbyyrpgvba";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:17:"8:pbyy-obbx_gvgyr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:16:"8:pbyy-obbx_grkg";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:20:"8:pbyy-beqre_sebz_cc";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:15:"8:pbyy-nobhg_cc";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:31:"8:pbyy-vainyvq_cbqcnegare_gvgyr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:29:"8:pbyy-vainyvq_cbqcnegare_zft";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:14:"8:pbyy-yvprafr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:18:"8:pbyy-yvprafr_hey";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:16:"8:pbyy-erghea_gb";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:25:"8:pbyy-beqre_vasb_negvpyr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:20:"8:pbyy-fhttrfg_gvgyr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:25:"8:pbyy-fhttrfg_vageb_grkg";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:25:"8:pbyy-fhttrfgrq_negvpyrf";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:25:"8:pbyy-fhttrfg_erfrg_onaf";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:33:"8:pbyy-fhttrfg_erfrg_onaf_gbbygvc";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:27:"8:pbyy-fhttrfg_nqq_fryrpgrq";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:27:"8:pbyy-fhttrfg_ona_fryrpgrq";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:24:"8:pbyy-fhttrfg_lbhe_obbx";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:19:"8:pbyy-fhttrfg_fubj";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:26:"8:pbyy-fhttrfg_ona_gbbygvc";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:26:"8:pbyy-fhttrfg_negvpyr_ona";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:26:"8:pbyy-fhttrfg_negvpyr_nqq";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:29:"8:pbyy-fhttrfg_negvpyr_erzbir";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:27:"8:pbyy-fhttrfg_haqb_gbbygvc";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:19:"8:pbyy-fhttrfg_haqb";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:22:"8:pbyy-ybnq_ybpny_obbx";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:32:"8:evtug-pbyyrpgvbafnirnfhfrecntr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:37:"8:evtug-pbyyrpgvbafnirnfpbzzhavglcntr";a:4:{i:0;R:6259;i:1;R:801;i:2;R:3237;i:3;R:6221;}s:16:"8:pbzzhavglibvpr";a:3:{i:0;s:18:"ext-communityvoice";i:1;R:801;i:2;R:3237;}s:21:"8:pbzzhavglibvpr-qrfp";a:3:{i:0;R:6379;i:1;R:801;i:2;R:3237;}s:24:"8:pbzzhavglibvpr-engvatf";a:3:{i:0;R:6379;i:1;R:801;i:2;R:3237;}s:45:"8:pbzzhavglibvpr-engvatf-fpnyr-fgnghf-fraqvat";a:3:{i:0;R:6379;i:1;R:801;i:2;R:3237;}s:43:"8:pbzzhavglibvpr-engvatf-fpnyr-fgnghf-reebe";a:3:{i:0;R:6379;i:1;R:801;i:2;R:3237;}s:44:"8:pbzzhavglibvpr-engvatf-fpnyr-fgnghf-gunaxf";a:3:{i:0;R:6379;i:1;R:801;i:2;R:3237;}s:36:"8:pbzzhavglibvpr-engvatf-fpnyr-fgngf";a:3:{i:0;R:6379;i:1;R:801;i:2;R:3237;}s:42:"8:pbzzhavglibvpr-engvatf-reebe-ab-pngrtbel";a:3:{i:0;R:6379;i:1;R:801;i:2;R:3237;}s:39:"8:pbzzhavglibvpr-engvatf-reebe-ab-gvgyr";a:3:{i:0;R:6379;i:1;R:801;i:2;R:3237;}s:13:"8:pbagnpgcntr";a:3:{i:0;s:15:"ext-contactpage";i:1;R:801;i:2;R:3237;}s:18:"8:pbagnpgcntr-qrfp";a:3:{i:0;R:6389;i:1;R:801;i:2;R:3237;}s:19:"8:pbagnpgcntr-gvgyr";a:3:{i:0;R:6389;i:1;R:801;i:2;R:3237;}s:22:"8:pbagnpgcntr-cntrgrkg";a:3:{i:0;R:6389;i:1;R:801;i:2;R:3237;}s:20:"8:pbagnpgcntr-yrtraq";a:3:{i:0;R:6389;i:1;R:801;i:2;R:3237;}s:24:"8:pbagnpgcntr-qrsfhowrpg";a:3:{i:0;R:6389;i:1;R:801;i:2;R:3237;}s:32:"8:pbagnpgcntr-fhowrpg-naq-fraqre";a:3:{i:0;R:6389;i:1;R:801;i:2;R:3237;}s:39:"8:pbagnpgcntr-fhowrpg-naq-fraqre-jvguvc";a:3:{i:0;R:6389;i:1;R:801;i:2;R:3237;}s:22:"8:pbagnpgcntr-sebzanzr";a:3:{i:0;R:6389;i:1;R:801;i:2;R:3237;}s:25:"8:pbagnpgcntr-sebznqqerff";a:3:{i:0;R:6389;i:1;R:801;i:2;R:3237;}s:27:"8:pbagnpgcntr-sbezsbbgabgrf";a:3:{i:0;R:6389;i:1;R:801;i:2;R:3237;}s:31:"8:pbagnpgcntr-sebzanzr-erdhverq";a:3:{i:0;R:6389;i:1;R:801;i:2;R:3237;}s:34:"8:pbagnpgcntr-sebznqqerff-erdhverq";a:3:{i:0;R:6389;i:1;R:801;i:2;R:3237;}s:36:"8:pbagnpgcntr-sbezsbbgabgrf-erdhverq";a:3:{i:0;R:6389;i:1;R:801;i:2;R:3237;}s:21:"8:pbagnpgcntr-pncgpun";a:3:{i:0;R:6389;i:1;R:801;i:2;R:3237;}s:28:"8:pbagnpgcntr-pncgpun-snvyrq";a:3:{i:0;R:6389;i:1;R:801;i:2;R:3237;}s:23:"8:pbagnpgcntr-vapyhqrvc";a:3:{i:0;R:6389;i:1;R:801;i:2;R:3237;}s:14:"8:pbagrfg-qrfp";a:3:{i:0;s:11:"ext-contest";i:1;R:801;i:2;R:3237;}s:17:"8:pbagrfg-gbcyvax";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:20:"8:evtug-pbagrfgnqzva";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:18:"8:evtug-pbagrfgnag";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:20:"8:evtug-pbagrfgwhqtr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:21:"8:npgvba-pbagrfgnqzva";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:19:"8:npgvba-pbagrfgnag";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:21:"8:npgvba-pbagrfgwhqtr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:20:"8:tebhc-pbagrfgnqzva";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:27:"8:tebhc-pbagrfgnqzva-zrzore";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:24:"8:tebhccntr-pbagrfgnqzva";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:18:"8:tebhc-pbagrfgnag";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:25:"8:tebhc-pbagrfgnag-zrzore";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:22:"8:tebhccntr-pbagrfgnag";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:20:"8:tebhc-pbagrfgwhqtr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:27:"8:tebhc-pbagrfgwhqtr-zrzore";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:24:"8:tebhccntr-pbagrfgwhqtr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:24:"8:tebhc-pbagrfgnqzva.pff";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:23:"8:tebhc-pbagrfgnqzva.wf";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:22:"8:tebhc-pbagrfgnag.pff";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:21:"8:tebhc-pbagrfgnag.wf";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:24:"8:tebhc-pbagrfgwhqtr.pff";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:23:"8:tebhc-pbagrfgwhqtr.wf";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:15:"8:cersf-pbagrfg";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:27:"8:pbagrfg-cersf-fubjgbcyvax";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:22:"8:pbagrfg-fgnghf-qensg";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:23:"8:pbagrfg-fgnghf-npgvir";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:24:"8:pbagrfg-fgnghf-rkcverq";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:25:"8:pbagrfg-fgnghf-svavfurq";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:17:"8:fcrpvny-pbagrfg";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:18:"8:fcrpvny-pbagrfgf";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:23:"8:fcrpvny-pbagrfgfvtahc";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:24:"8:fcrpvny-pbagrfgjrypbzr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:21:"8:fcrpvny-rqvgpbagrfg";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:20:"8:fcrpvny-zlpbagrfgf";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:28:"8:fcrpvnycntrf-tebhc-pbagrfg";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:22:"8:pbagrfg-ani-pbagrfgf";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:25:"8:pbagrfg-ani-rqvgpbagrfg";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:21:"8:pbagrfg-ani-pbagrfg";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:28:"8:pbagrfg-ani-pbagrfgjrypbzr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:27:"8:pbagrfg-ani-pbagrfgfvtahc";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:24:"8:pbagrfg-fcrpvny-nqqarj";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:25:"8:pbagrfg-fcrpvny-anzrqbp";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:25:"8:pbagrfg-fcrpvny-arjanzr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:21:"8:pbagrfg-fcrpvny-nqq";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:26:"8:pbagrfg-fcrpvny-rkvfgvat";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:22:"8:pbagrfg-fcrpvny-anzr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:24:"8:pbagrfg-fcrpvny-fgnghf";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:33:"8:pbagrfg-fcrpvny-fhozvffvbapbhag";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:22:"8:pbagrfg-fcrpvny-rqvg";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:24:"8:pbagrfg-fcrpvny-qryrgr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:32:"8:pbagrfg-fcrpvny-pbasvez-qryrgr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:31:"8:pbagrfg-fcrpvny-qryrgr-snvyrq";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:18:"8:rqvgpbagrfg-grkg";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:20:"8:rqvgpbagrfg-yrtraq";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:19:"8:pbagrfg-rqvg-anzr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:21:"8:pbagrfg-rqvg-fgnghf";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:20:"8:pbagrfg-rqvg-vageb";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:28:"8:pbagrfg-rqvg-bccbeghavgvrf";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:24:"8:pbagrfg-rqvg-ehyrfcntr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:19:"8:pbagrfg-rqvg-uryc";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:21:"8:pbagrfg-rqvg-fvtahc";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:23:"8:pbagrfg-rqvg-erzvaqre";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:18:"8:pbagrfg-rqvg-raq";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:29:"8:pbagrfg-rqvg-rkvfgf-nyernql";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:21:"8:pbagrfg-rqvg-fhozvg";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:25:"8:pbagrfg-rqvg-punyyratrf";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:21:"8:pbagrfg-rqvg-qryrgr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:24:"8:pbagrfg-rqvg-nqq-svefg";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:26:"8:pbagrfg-rqvg-nqq-nabgure";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:29:"8:pbagrfg-rqvg-pbasvez-qryrgr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:30:"8:pbagrfg-rqvg-punyyratr-gvgyr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:29:"8:pbagrfg-rqvg-punyyratr-grkg";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:32:"8:pbagrfg-rqvg-punyyratr-baryvar";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:25:"8:pbagrfg-jrypbzr-haxabja";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:23:"8:pbagrfg-jrypbzr-ehyrf";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:24:"8:pbagrfg-jrypbzr-fvtahc";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:24:"8:pbagrfg-jrypbzr-wf-bss";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:34:"8:pbagrfg-jrypbzr-npprcg-punyyratr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:31:"8:pbagrfg-jrypbzr-fryrpg-urnqre";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:33:"8:pbagrfg-jrypbzr-npgvir-pbagrfgf";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:36:"8:pbagrfg-jrypbzr-ab-pbagrfgf-npgvir";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:24:"8:pbagrfg-fvtahc-haxabja";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:23:"8:pbagrfg-fvtahc-fhozvg";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:23:"8:pbagrfg-fvtahc-urnqre";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:22:"8:pbagrfg-fvtahc-rznvy";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:25:"8:pbagrfg-fvtahc-ernyanzr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:26:"8:pbagrfg-fvtahc-ibyhagrre";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:20:"8:pbagrfg-fvtahc-jzs";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:19:"8:pbagrfg-fvtahc-pi";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:26:"8:pbagrfg-fvtahc-ernqehyrf";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:26:"8:pbagrfg-fvtahc-punyyratr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:25:"8:pbagrfg-fvtahc-svavfurq";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:22:"8:pbagrfg-fvtahc-qensg";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:24:"8:pbagrfg-fvtahc-pbhagel";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:26:"8:pbagrfg-fvtahc-rznvyjnea";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:30:"8:pbagrfg-fvtahc-erdhver-ehyrf";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:32:"8:pbagrfg-fvtahc-erdhver-pbhagel";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:30:"8:pbagrfg-fvtahc-vainyvq-rznvy";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:29:"8:pbagrfg-fvtahc-vainyvq-anzr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:34:"8:pbagrfg-fvtahc-erdhver-punyyratr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:27:"8:pbagrfg-fvtahc-vainyvq-pi";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:23:"8:pbagrfg-pbagrfg-gvgyr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:28:"8:pbagrfg-pbagrfg-ab-erfhygf";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:22:"8:pbagrfg-pbagrfg-anzr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:24:"8:pbagrfg-pbagrfg-fgnghf";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:33:"8:pbagrfg-pbagrfg-fhozvffvbapbhag";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:21:"8:pbagrfg-pbagrfg-raq";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:26:"8:pbagrfg-pbagrfg-qnlf-ntb";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:27:"8:pbagrfg-pbagrfg-qnlf-yrsg";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:29:"8:pbagrfg-pbagrfg-pbagrfgnagf";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:34:"8:pbagrfg-pbagrfg-pbagrfgnagf-grkg";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:31:"8:pbagrfg-pbagrfg-erzvaqre-znvy";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:31:"8:pbagrfg-pbagrfg-erzvaqre-cntr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:31:"8:pbagrfg-pbagrfg-fraq-erzvaqre";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:20:"8:pbagrfg-pbagrfg-tb";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:23:"8:pbagrfg-pbagrfg-pyrne";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:26:"8:pbagrfg-pbagrfg-fubjbayl";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:21:"8:pbagrfg-pbagrfg-lrf";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:20:"8:pbagrfg-pbagrfg-ab";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:22:"8:pbagrfg-pbagrfg-abar";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:22:"8:pbagrfg-pbagrfg-fbzr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:34:"8:pbagrfg-pbagrfg-svygre-punyyratr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:34:"8:pbagrfg-pbagrfg-svygre-ibyhagrre";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:28:"8:pbagrfg-pbagrfg-svygre-jzs";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:33:"8:pbagrfg-pbagrfg-svygre-pbzzragf";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:37:"8:pbagrfg-pbagrfg-svygre-engvat_pbhag";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:35:"8:pbagrfg-pbagrfg-svygre-fhozvffvba";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:34:"8:pbagrfg-pbagrfg-erzvaqre-cerivrj";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:32:"8:pbagrfg-pbagrfg-erzvaqre-gvgyr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:31:"8:pbagrfg-pbagrfg-erzvaqre-fraq";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:33:"8:pbagrfg-pbagrfg-erzvaqre-pnapry";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:34:"8:pbagrfg-pbagrfg-erzvaqre-fraqvat";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:34:"8:pbagrfg-pbagrfg-erzvaqre-fhpprff";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:32:"8:pbagrfg-pbagrfg-erzvaqre-pybfr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:32:"8:pbagrfg-pbagrfg-erzvaqre-ergel";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:33:"8:pbagrfg-pbagrfg-erzvaqre-snvyrq";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:34:"8:pbagrfg-pbagrfg-erzvaqre-fhowrpg";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:23:"8:pbagrfg-pbagrfgnag-vq";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:35:"8:pbagrfg-pbagrfgnag-punyyratr-anzr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:30:"8:pbagrfg-pbagrfgnag-ibyhagrre";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:24:"8:pbagrfg-pbagrfgnag-jzs";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:23:"8:pbagrfg-pbagrfgnag-ab";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:24:"8:pbagrfg-pbagrfgnag-lrf";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:33:"8:pbagrfg-pbagrfgnag-pbzzragpbhag";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:34:"8:pbagrfg-pbagrfgnag-birenyyengvat";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:27:"8:pbagrfg-pbagrfgnag-engvat";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:31:"8:pbagrfg-pbagrfgnag-fhozvffvba";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:26:"8:pbagrfg-pbagrfgnag-gvgyr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:30:"8:pbagrfg-pbagrfgnag-urnqre-vq";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:35:"8:pbagrfg-pbagrfgnag-urnqre-pbagrfg";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:37:"8:pbagrfg-pbagrfgnag-urnqre-punyyratr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:38:"8:pbagrfg-pbagrfgnag-urnqre-fhozvffvba";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:35:"8:pbagrfg-pbagrfgnag-urnqre-pbhagel";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:31:"8:pbagrfg-pbagrfgnag-urnqre-jzs";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:37:"8:pbagrfg-pbagrfgnag-urnqre-ibyhagrre";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:34:"8:pbagrfg-pbagrfgnag-urnqre-engvat";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:36:"8:pbagrfg-pbagrfgnag-urnqre-pbzzragf";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:35:"8:pbagrfg-pbagrfgnag-fhozvffvba-hey";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:33:"8:pbagrfg-pbagrfgnag-abgfhozvggrq";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:29:"8:pbagrfg-pbagrfgnag-pbzzragf";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:27:"8:pbagrfg-pbagrfgnag-fhozvg";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:31:"8:pbagrfg-pbagrfgnag-pbzzrag-ol";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:25:"8:pbagrfg-pbagrfgnag-engr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:30:"8:pbagrfg-pbagrfgnag-abg-ibgrq";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:26:"8:pbagrfg-pbagrfgnag-ibgrq";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:30:"8:pbagrfg-pbagrfgnag-creznyvax";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:28:"8:pbagrfg-rznvy-fvtahc-gvgyr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:30:"8:pbagrfg-rznvy-erzvaqre-gvgyr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:28:"8:pbagrfg-zlpbagrfgf-gbcyvax";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:32:"8:pbagrfg-zlpbagrfgf-ab-pbagrfgf";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:34:"8:pbagrfg-zlpbagrfgf-npgvir-urnqre";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:36:"8:pbagrfg-zlpbagrfgf-svavfurq-urnqre";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:32:"8:pbagrfg-zlpbagrfgf-npgvir-grkg";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:34:"8:pbagrfg-zlpbagrfgf-svavfurq-grkg";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:35:"8:pbagrfg-zlpbagrfgf-urnqre-pbagrfg";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:37:"8:pbagrfg-zlpbagrfgf-urnqre-punyyratr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:35:"8:pbagrfg-zlpbagrfgf-fvtahc-fhpprff";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:37:"8:pbagrfg-zlpbagrfgf-nqqvgvba-fhpprff";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:36:"8:pbagrfg-zlpbagrfgf-hcqngrq-fhpprff";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:32:"8:pbagrfg-zlpbagrfgf-frffvbasnvy";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:27:"8:pbagrfg-fhozvffvba-fhozvg";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:28:"8:pbagrfg-fhozvffvba-haxabja";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:27:"8:pbagrfg-fhozvffvba-urnqre";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:29:"8:pbagrfg-fhozvffvba-svavfurq";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:31:"8:pbagrfg-fhozvffvba-fhozvffvba";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:32:"8:pbagrfg-fhozvffvba-vainyvq-hey";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:35:"8:pbagrfg-fhozvffvba-arj-fhozvffvba";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:39:"8:pbagrfg-fhozvffvba-pheerag-fhozvffvba";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:30:"8:pbagrfg-fhozvffvba-punyyratr";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:42:"8:pbagrfg-fhozvffvba-punyyratr-qrfpevcgvba";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:28:"8:pbagrfg-fhozvffvba-qbznvaf";a:3:{i:0;R:6407;i:1;R:801;i:2;R:3237;}s:28:"8:pbagevohgvbaercbegvat-qrfp";a:3:{i:0;s:25:"ext-contributionreporting";i:1;R:801;i:2;R:3237;}s:19:"8:pbagevohgvbagbgny";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:12:"8:qnvylgbgny";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:21:"8:pbagevofgngf-urnqre";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:21:"8:pbagevofgngf-sbbgre";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:16:"8:qvfnoyrqabgvpr";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:25:"8:qvfnoyrqabgvpr-qvfnoyrq";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:21:"8:pbagevohgvbauvfgbel";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:21:"8:pbagevo-uvfg-urnqre";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:19:"8:pbagevo-uvfg-anzr";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:19:"8:pbagevo-uvfg-qngr";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:21:"8:pbagevo-uvfg-nzbhag";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:19:"8:pbagevo-uvfg-arkg";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:23:"8:pbagevo-uvfg-cerivbhf";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:24:"8:pbagevo-uvfg-nabalzbhf";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:24:"8:pbagevohgvbafgngvfgvpf";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:19:"8:pbagevofgngf-qrfp";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:27:"8:pbagevofgngf-qnvyl-gbgnyf";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:29:"8:pbagevofgngf-zbaguyl-gbgnyf";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:33:"8:pbagevofgngf-zbagu-enatr-gbgnyf";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:36:"8:pbagevofgngf-pheerapl-enatr-gbgnyf";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:43:"8:pbagevofgngf-pbagevohgvba-enatr-oernxqbja";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:30:"8:pbagevofgngf-pheerapl-gbgnyf";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:37:"8:pbagevofgngf-pbagevohgvba-oernxqbja";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:18:"8:pbagevofgngf-qnl";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:20:"8:pbagevofgngf-zbagu";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:23:"8:pbagevofgngf-pheerapl";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:21:"8:pbagevofgngf-nzbhag";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:28:"8:pbagevofgngf-pbagevohgvbaf";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:20:"8:pbagevofgngf-gbgny";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:18:"8:pbagevofgngf-nit";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:18:"8:pbagevofgngf-znk";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:29:"8:pbagevofgngf-crepragntr-lgq";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:24:"8:pbagevofgngf-gbgny-lgq";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:28:"8:pbagevofgngf-inyhr-rknpgyl";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:26:"8:pbagevofgngf-inyhr-haqre";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:25:"8:pbagevofgngf-inyhr-sebz";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:25:"8:pbagevofgngf-inyhr-bire";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:32:"8:pbagevohgvbagenpxvatfgngvfgvpf";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:25:"8:pbagevofgngf-qnl-gbgnyf";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:19:"8:pbagevofgngf-jrrx";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:28:"8:pbagevofgngf-jrrxyl-gbgnyf";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:27:"8:pbagevofgngf-cnlzrag-glcr";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:21:"8:pbagevofgngf-onaare";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:32:"8:pbagevofgngf-cnlzrag-glcr-uvgf";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:21:"8:pbagevofgngf-pyvpxf";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:24:"8:pbagevofgngf-qbangvbaf";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:25:"8:pbagevofgngf-pbairefvba";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:23:"8:pbagevofgngf-grzcyngr";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:21:"8:pbagevofgngf-abqngn";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:26:"8:pbagevofgngf-ynaqvatcntr";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:25:"8:pbagevofgngf-qbangrcntr";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:22:"8:pbagevofgngf-nirentr";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:29:"8:pbagevofgngf-vzcresrpg-qngn";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:31:"8:pbagevofgngf-cnlcny-qbangvbaf";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:26:"8:pbagevofgngf-perqvg-pneq";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:25:"8:pbagevofgngf-senhq-abgr";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:24:"8:pbagevofgngf-hanhqvgrq";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:22:"8:shaqenvfrefgngvfgvpf";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:22:"8:shaqenvfrefgngf-qngr";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:21:"8:shaqenvfrefgngf-qnl";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:31:"8:shaqenvfrefgngf-pbagevohgvbaf";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:23:"8:shaqenvfrefgngf-gbgny";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:21:"8:shaqenvfrefgngf-nit";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:21:"8:shaqenvfrefgngf-lgq";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:21:"8:shaqenvfrefgngf-znk";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:28:"8:shaqenvfrefgngf-gno-gbgnyf";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:35:"8:shaqenvfrefgngf-gno-pbagevohgvbaf";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:30:"8:shaqenvfrefgngf-gno-nirentrf";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:30:"8:shaqenvfrefgngf-gno-znkvzhzf";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:25:"8:shaqenvfrefgngf-gno-lgq";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:30:"8:shaqenvfrefgngf-vafgehpgvbaf";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:27:"8:shaqenvfrefgngf-phfgbzvmr";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:28:"8:shaqenvfrefgngf-fubj-lrnef";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:27:"8:shaqenvfrefgngf-gvzr-mbar";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:21:"8:shaqenvfrefgngf-hgp";a:3:{i:0;R:6600;i:1;R:801;i:2;R:3237;}s:27:"8:pbagevohgvbagenpxvat-qrfp";a:3:{i:0;s:24:"ext-contributiontracking";i:1;R:801;i:2;R:3237;}s:22:"8:pbagevohgvbagenpxvat";a:3:{i:0;R:6677;i:1;R:801;i:2;R:3237;}s:24:"8:pbagevo-genpxvat-reebe";a:3:{i:0;R:6677;i:1;R:801;i:2;R:3237;}s:29:"8:pbagevo-genpxvat-reebe-grkg";a:3:{i:0;R:6677;i:1;R:801;i:2;R:3237;}s:29:"8:pbagevo-genpxvat-fhozvggvat";a:3:{i:0;R:6677;i:1;R:801;i:2;R:3237;}s:27:"8:pbagevo-genpxvat-pbagvahr";a:3:{i:0;R:6677;i:1;R:801;i:2;R:3237;}s:27:"8:pbagevo-genpxvat-erqverpg";a:3:{i:0;R:6677;i:1;R:801;i:2;R:3237;}s:25:"8:pbagevo-genpxvat-ohggba";a:3:{i:0;R:6677;i:1;R:801;i:2;R:3237;}s:36:"8:pbagevo-genpxvat-vgrz-anzr-bargvzr";a:3:{i:0;R:6677;i:1;R:801;i:2;R:3237;}s:38:"8:pbagevo-genpxvat-vgrz-anzr-erpheevat";a:3:{i:0;R:6677;i:1;R:801;i:2;R:3237;}s:18:"8:phfgbzhfrefvtahc";a:3:{i:0;s:20:"ext-customusersignup";i:1;R:801;i:2;R:3237;}s:23:"8:phfgbzhfrefvtahc-qrfp";a:3:{i:0;R:6688;i:1;R:801;i:2;R:3237;}s:18:"8:qbangr_vagresnpr";a:3:{i:0;s:9:"ext-di-gc";i:1;R:801;i:2;R:3237;}s:23:"8:qbangr_vagresnpr-qrfp";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:32:"8:qbangr_vagresnpr-ynatbayl-qrfp";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:24:"8:qbangr_vagresnpr-vageb";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:25:"8:qbangr_vagresnpr-nzbhag";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:31:"8:qbangr_vagresnpr-bgure-nzbhag";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:27:"8:qbangr_vagresnpr-pheerapl";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:26:"8:qbangr_vagresnpr-tngrjnl";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:32:"8:qbangr_vagresnpr-fhozvg-ohggba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:34:"8:qbangr_vagresnpr-pbzzrag-zrffntr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:32:"8:qbangr_vagresnpr-pbzzrag-ynory";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:31:"8:qbangr_vagresnpr-naba-zrffntr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:34:"8:qbangr_vagresnpr-rznvy-nterrzrag";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:32:"8:qbangr_vagresnpr-pbzzrag-gvgyr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:37:"8:qbangr_vagresnpr-ovt-nzbhag-qvfcynl";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:40:"8:qbangr_vagresnpr-zrqvhz-nzbhag-qvfcynl";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:39:"8:qbangr_vagresnpr-fznyy-nzbhag-qvfcynl";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:35:"8:qbangr_vagresnpr-ovt-nzbhag-inyhr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:38:"8:qbangr_vagresnpr-zrqvhz-nzbhag-inyhr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:37:"8:qbangr_vagresnpr-fznyy-nzbhag-inyhr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:31:"8:qbangr_vagresnpr-nzbhag-reebe";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:36:"8:qbangr_vagresnpr-fznyynzbhag-reebe";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:34:"8:qbangr_vagresnpr-ovtnzbhag-reebe";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:35:"8:qbangr_vagresnpr-cebprffvat-reebe";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-nrq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-nef";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-nhq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-ooq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-oqg";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-ota";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-ouq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-ozq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-oaq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-obo";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-oey";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-ofq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-omq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-pnq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-pus";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-pyc";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-pal";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-pbc";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-pep";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-pmx";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-qxx";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-qbc";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-qmq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-rrx";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-rtc";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-rhe";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-toc";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-tgd";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-uxq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-uay";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-uex";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-uhs";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-vqe";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-vyf";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-vae";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-wzq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-wbq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-wcl";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-xrf";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-xej";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-xlq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-xmg";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-yoc";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-yxe";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-ygy";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-yiy";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-znq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-zxq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-zhe";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-zie";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-zka";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-zle";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-abx";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-amq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-bze";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-cno";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-cra";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-cuc";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-cxe";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-cya";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-clt";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-dne";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-eba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-eho";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-fne";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-frx";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-ftq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-fip";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-guo";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-gwf";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-gaq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-gel";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-ggq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-gjq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-hnu";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-hfq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-hlh";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-hmf";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-iaq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-kns";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-kpq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-kbs";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-mne";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:35:"8:qbangr_vagresnpr-pheerapl-qvfcynl";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:29:"8:qbangr_vagresnpr-npprffvoyr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:32:"8:qbangr_vagresnpr-cnlcny-ohggba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:34:"8:qbangr_vagresnpr-cnlcny-erqverpg";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:28:"8:qbangr_vagresnpr-pp-ohggba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:30:"8:qbangr_vagresnpr-ppqp-ohggba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:28:"8:qbangr_vagresnpr-qq-ohggba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:28:"8:qbangr_vagresnpr-og-ohggba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:28:"8:qbangr_vagresnpr-eg-ohggba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:33:"8:qbangr_vagresnpr-rjnyyrg-ohggba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:31:"8:qbangr_vagresnpr-qbabe-yrtraq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:30:"8:qbangr_vagresnpr-pneq-yrtraq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:32:"8:qbangr_vagresnpr-nzbhag-yrtraq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:27:"8:qbangr_vagresnpr-pii-yvax";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:31:"8:qbangr_vagresnpr-qbabe-nzbhag";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:39:"8:qbangr_vagresnpr-qbabe-pheerapl-ynory";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:30:"8:qbangr_vagresnpr-qbabe-rznvy";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:33:"8:qbangr_vagresnpr-qbabe-rznvynqq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:29:"8:qbangr_vagresnpr-qbabe-anzr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:30:"8:qbangr_vagresnpr-qbabe-sanzr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:34:"8:qbangr_vagresnpr-qbabe-sanzr-nyg";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:32:"8:qbangr_vagresnpr-qbabe-nqqerff";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:30:"8:qbangr_vagresnpr-qbabe-zanzr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:30:"8:qbangr_vagresnpr-qbabe-yanzr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:34:"8:qbangr_vagresnpr-qbabe-yanzr-nyg";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:31:"8:qbangr_vagresnpr-qbabe-fgerrg";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:38:"8:qbangr_vagresnpr-qbabe-fgerrg-ahzore";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:29:"8:qbangr_vagresnpr-qbabe-pvgl";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:31:"8:qbangr_vagresnpr-qbabe-pbhagl";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:31:"8:qbangr_vagresnpr-qbabe-vfynaq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:30:"8:qbangr_vagresnpr-qbabe-fgngr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:28:"8:qbangr_vagresnpr-qbabe-mvc";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:31:"8:qbangr_vagresnpr-qbabe-cbfgny";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:33:"8:qbangr_vagresnpr-qbabe-cbfgpbqr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:32:"8:qbangr_vagresnpr-qbabe-pbhagel";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:29:"8:qbangr_vagresnpr-qbabe-mbar";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:30:"8:qbangr_vagresnpr-qbabe-cbobk";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:29:"8:qbangr_vagresnpr-qbabe-pneq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:33:"8:qbangr_vagresnpr-qbabe-pneq-ahz";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:35:"8:qbangr_vagresnpr-qbabe-rkcvengvba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:33:"8:qbangr_vagresnpr-qbabe-frphevgl";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:31:"8:qbangr_vagresnpr-qbabe-fhozvg";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:37:"8:qbangr_vagresnpr-qbabe-pheerapl-zft";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:33:"8:qbangr_vagresnpr-pneq-anzr-nzrk";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:33:"8:qbangr_vagresnpr-pneq-anzr-ivfn";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:31:"8:qbangr_vagresnpr-pneq-anzr-zp";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:37:"8:qbangr_vagresnpr-pneq-anzr-qvfpbire";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:36:"8:qbangr_vagresnpr-reebe-zft-trareny";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:37:"8:qbangr_vagresnpr-reebe-zft-abcnlcny";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:28:"8:qbangr_vagresnpr-reebe-zft";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:31:"8:qbangr_vagresnpr-reebe-zft-wf";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:39:"8:qbangr_vagresnpr-reebe-zft-inyvqngvba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:43:"8:qbangr_vagresnpr-reebe-zft-vainyvq-nzbhag";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:34:"8:qbangr_vagresnpr-reebe-zft-rznvy";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:37:"8:qbangr_vagresnpr-reebe-zft-pneq-ahz";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:33:"8:qbangr_vagresnpr-reebe-zft-nzrk";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:31:"8:qbangr_vagresnpr-reebe-zft-zp";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:33:"8:qbangr_vagresnpr-reebe-zft-ivfn";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:37:"8:qbangr_vagresnpr-reebe-zft-qvfpbire";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:35:"8:qbangr_vagresnpr-reebe-zft-nzbhag";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:37:"8:qbangr_vagresnpr-reebe-zft-rznvynqq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:34:"8:qbangr_vagresnpr-reebe-zft-sanzr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:34:"8:qbangr_vagresnpr-reebe-zft-yanzr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:35:"8:qbangr_vagresnpr-reebe-zft-fgerrg";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:33:"8:qbangr_vagresnpr-reebe-zft-pvgl";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:34:"8:qbangr_vagresnpr-reebe-zft-fgngr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:32:"8:qbangr_vagresnpr-reebe-zft-mvc";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:35:"8:qbangr_vagresnpr-reebe-zft-cbfgny";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:36:"8:qbangr_vagresnpr-reebe-zft-pbhagel";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:38:"8:qbangr_vagresnpr-reebe-zft-pneq_glcr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:37:"8:qbangr_vagresnpr-reebe-zft-pneq_ahz";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:39:"8:qbangr_vagresnpr-reebe-zft-rkcvengvba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:32:"8:qbangr_vagresnpr-reebe-zft-pii";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:36:"8:qbangr_vagresnpr-reebe-zft-pncgpun";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:43:"8:qbangr_vagresnpr-reebe-zft-pncgpun-cyrnfr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:36:"8:qbangr_vagresnpr-reebe-zft-pbbxvrf";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:44:"8:qbangr_vagresnpr-reebe-zft-tranevperdhverq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:52:"8:qbangr_vagresnpr-qbangr-reebe-gel-n-qvssrerag-pneq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:58:"8:qbangr_vagresnpr-qbangr-reebe-gunax-lbh-sbe-lbhe-fhccbeg";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:23:"8:cuc-erfcbafr-qrpyvarq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:27:"8:qbangr_vagresnpr-gunaxlbh";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:35:"8:qbangr_vagresnpr-cbfg-genafnpgvba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:30:"8:qbangr_vagresnpr-pii-rkcynva";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:35:"8:qbangr_vagresnpr-dhrfgvba-pbzzrag";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:29:"8:qbangr_vagresnpr-rnflqbangr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:35:"8:qbangr_vagresnpr-ceboyrzfqbangvat";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:31:"8:qbangr_vagresnpr-qbangr-pyvpx";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:28:"8:qbangr_vagresnpr-bgurejnlf";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:32:"8:qbangr_vagresnpr-bgurejnlf-nyg";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:34:"8:qbangr_vagresnpr-bgurejnlf-fubeg";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:25:"8:qbangr_vagresnpr-cnlcny";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:44:"8:qbangr_vagresnpr-perqvg-fgbentr-cebprffvat";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:33:"8:qbangr_vagresnpr-gbxra-zvfzngpu";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:42:"8:qbangr_vagresnpr-pp-sbez-urnqre-crefbany";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:41:"8:qbangr_vagresnpr-pp-sbez-urnqre-cnlzrag";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:37:"8:qbangr_vagresnpr-znxr-lbhe-qbangvba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:30:"8:qbangr_vagresnpr-fgngr-va-hf";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:26:"8:qbangr_vagresnpr-pbzzrag";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:24:"8:qbangr_vagresnpr-svefg";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:25:"8:qbangr_vagresnpr-zvqqyr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:23:"8:qbangr_vagresnpr-ynfg";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:24:"8:qbangr_vagresnpr-bgure";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:31:"8:qbangr_vagresnpr-abfpevcg-zft";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:40:"8:qbangr_vagresnpr-abfpevcg-erqverpg-zft";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:35:"8:qbangr_vagresnpr-qbangr-jvxvcrqvn";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:21:"8:qbangr_vagresnpr-be";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:35:"8:qbangr_vagresnpr-lbhe-vasbezngvba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:34:"8:qbangr_vagresnpr-znvyvat-nqqerff";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:34:"8:qbangr_vagresnpr-ovyyvat-nqqerff";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:31:"8:qbangr_vagresnpr-ovyyvat-anzr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:24:"8:qbangr_vagresnpr-gvgyr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:31:"8:qbangr_vagresnpr-pbzcnal-anzr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:28:"8:qbangr_vagresnpr-nqqerff-1";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:28:"8:qbangr_vagresnpr-nqqerff-2";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:32:"8:qbangr_vagresnpr-nqqerff-yvarf";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:33:"8:qbangr_vagresnpr-nqqerff-yvar-2";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:33:"8:qbangr_vagresnpr-fgerrg-nqqerff";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:40:"8:qbangr_vagresnpr-fgerrg-nqqerff-yvar-2";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:27:"8:qbangr_vagresnpr-fgerrg-1";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:27:"8:qbangr_vagresnpr-fgerrg-2";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:35:"8:qbangr_vagresnpr-ncnegzrag-ahzore";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:28:"8:qbangr_vagresnpr-pvgl-gbja";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:28:"8:qbangr_vagresnpr-gbja-pvgl";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:33:"8:qbangr_vagresnpr-fgngr-cebivapr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-mvc";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:27:"8:qbangr_vagresnpr-mvc-pbqr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:29:"8:qbangr_vagresnpr-mvc-cbfgny";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:34:"8:qbangr_vagresnpr-mvc-cbfgny-pbqr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:31:"8:qbangr_vagresnpr-ovyyvat-pbqr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:26:"8:qbangr_vagresnpr-pbhagel";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:33:"8:qbangr_vagresnpr-fryrpg-pbhagel";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:32:"8:qbangr_vagresnpr-pbasvez-rznvy";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:24:"8:qbangr_vagresnpr-cubar";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:28:"8:qbangr_vagresnpr-gryrcubar";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:33:"8:qbangr_vagresnpr-gryrcubar-ubzr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:39:"8:qbangr_vagresnpr-ovyyvat-cubar-ahzore";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:39:"8:qbangr_vagresnpr-qbangvba-vasbezngvba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:41:"8:qbangr_vagresnpr-pp-ovyyvat-vasbezngvba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:37:"8:qbangr_vagresnpr-cnl-ol-perqvg-pneq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:29:"8:qbangr_vagresnpr-juvpu-pneq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:41:"8:qbangr_vagresnpr-pubbfr-qbangvba-zrgubq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:35:"8:qbangr_vagresnpr-pnequbyqref-anzr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:31:"8:qbangr_vagresnpr-anzr-ba-pneq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:31:"8:qbangr_vagresnpr-glcr-bs-pneq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:33:"8:qbangr_vagresnpr-pneqf-npprcgrq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:28:"8:qbangr_vagresnpr-pneq-glcr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:35:"8:qbangr_vagresnpr-perqvg-pneq-glcr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:37:"8:qbangr_vagresnpr-perqvg-pneq-ahzore";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:49:"8:qbangr_vagresnpr-perqvg-pneq-ahzore-nooerivngrq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:41:"8:qbangr_vagresnpr-perqvg-pneq-rkcvengvba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:34:"8:qbangr_vagresnpr-pneq-rkcvengvba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:45:"8:qbangr_vagresnpr-fryrpg-zbagu-bs-rkcvengvba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:44:"8:qbangr_vagresnpr-fryrpg-lrne-bs-rkcvengvba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:35:"8:qbangr_vagresnpr-rkcverf-dhrfgvba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:26:"8:qbangr_vagresnpr-rkcverf";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:37:"8:qbangr_vagresnpr-pneq-frphevgl-pbqr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:22:"8:qbangr_vagresnpr-pii";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:41:"8:qbangr_vagresnpr-pii-ahzore-nooerivngrq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:23:"8:qbangr_vagresnpr-pii2";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:29:"8:qbangr_vagresnpr-pii-ahzore";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:38:"8:qbangr_vagresnpr-irevsvpngvba-ahzore";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:31:"8:qbangr_vagresnpr-jung-vf-guvf";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:40:"8:qbangr_vagresnpr-qb-abg-vapyhqr-qnfurf";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:38:"8:qbangr_vagresnpr-cyrnfr-qbangr-gbqnl";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:29:"8:qbangr_vagresnpr-qbangr-abj";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:44:"8:qbangr_vagresnpr-cyrnfr-fryrpg-tvsg-nzbhag";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:37:"8:qbangr_vagresnpr-fryrpg-tvsg-nzbhag";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:32:"8:qbangr_vagresnpr-fryrpg-nzbhag";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:34:"8:qbangr_vagresnpr-znxr-n-qbangvba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:36:"8:qbangr_vagresnpr-ragre-lbhe-nzbhag";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:41:"8:qbangr_vagresnpr-jvyy-fhccbeg-jvgu-tvsg";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:48:"8:qbangr_vagresnpr-jvyy-znxr-gnk-qrqhpgvoyr-tvsg";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:44:"8:qbangr_vagresnpr-fhozvg-zl-frpher-qbangvba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:23:"8:qbangr_vagresnpr-arkg";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:27:"8:qbangr_vagresnpr-pbagvahr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:25:"8:qbangr_vagresnpr-pnapry";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:26:"8:qbangr_vagresnpr-cnlzrag";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:31:"8:qbangr_vagresnpr-cnlzrag-glcr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:24:"8:qbangr_vagresnpr-zbagu";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:34:"8:qbangr_vagresnpr-cyrnfr-pbzcyrgr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:30:"8:qbangr_vagresnpr-qrfpevcgvba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:27:"8:qbangr_vagresnpr-qbangvba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:32:"8:qbangr_vagresnpr-rznvy-erprvcg";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:35:"8:qbangr_vagresnpr-zbaguyl-qbangvba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:29:"8:qbangr_vagresnpr-ivn-cnlcny";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:29:"8:qbangr_vagresnpr-fuveg-fvmr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:31:"8:qbangr_vagresnpr-fuveg-fvmr-2";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:27:"8:qbangr_vagresnpr-ynathntr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:24:"8:qbangr_vagresnpr-sebag";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:23:"8:qbangr_vagresnpr-onpx";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:33:"8:qbangr_vagresnpr-sebag-bs-fuveg";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:32:"8:qbangr_vagresnpr-onpx-bs-fuveg";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:32:"8:qbangr_vagresnpr-fryrpg-n-fvmr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:25:"8:qbangr_vagresnpr-fryrpg";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:35:"8:qbangr_vagresnpr-fuvccvat-nqqerff";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:45:"8:qbangr_vagresnpr-fuvccvat-nqqerff-qvssrerag";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:40:"8:qbangr_vagresnpr-fuvccvat-nqqerff-fnzr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:39:"8:qbangr_vagresnpr-bayl-ovyyvat-nqqerff";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:38:"8:qbangr_vagresnpr-qbangvba-zhfg-rdhny";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:28:"8:qbangr_vagresnpr-gunax-lbh";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:40:"8:qbangr_vagresnpr-jvxvcrqvn-genafyngvba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:30:"8:qbangr_vagresnpr-ba-gur-onpx";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:38:"8:qbangr_vagresnpr-gfuveg-pbasvezngvba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:34:"8:qbangr_vagresnpr-qbangvba-gfuveg";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:25:"8:qbangr_vagresnpr-punatr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:37:"8:qbangr_vagresnpr-fryrpg-perqvg-pneq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:27:"8:qbangr_vagresnpr-bcgvbany";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:36:"8:qbangr_vagresnpr-fgngr-qebcqbja-ll";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:36:"8:qbangr_vagresnpr-fgngr-qebcqbja-kk";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:36:"8:qbangr_vagresnpr-og-nppbhag_ubyqre";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:41:"8:qbangr_vagresnpr-og-onax_nppbhag_ahzore";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:41:"8:qbangr_vagresnpr-og-pbhagel_qrfpevcgvba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:39:"8:qbangr_vagresnpr-og-cnlzrag_ersrerapr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:32:"8:qbangr_vagresnpr-og-fjvsg_pbqr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:32:"8:qbangr_vagresnpr-og-fcrpvny_vq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:33:"8:qbangr_vagresnpr-og-vasbezngvba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:30:"8:qbangr_vagresnpr-og-svavfurq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:32:"8:qbangr_vagresnpr-bog-ovyyre_vq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:49:"8:qbangr_vagresnpr-bog-phfgbzre_cnlzrag_ersrerapr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:34:"8:qbangr_vagresnpr-bog-vasbezngvba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:47:"8:qbangr_vagresnpr-bayvar_onax_genafsre_zrffntr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:33:"8:qbangr_vagresnpr-egog-vffhre_vq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:42:"8:qbangr_vagresnpr-egog-vffhre_vq-ybatyvfg";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:34:"8:qbangr_vagresnpr-qq-nppbhag_anzr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:36:"8:qbangr_vagresnpr-qq-nppbhag_ahzore";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:38:"8:qbangr_vagresnpr-qq-nhgubevmngvba_vq";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:38:"8:qbangr_vagresnpr-qq-onax_purpx_qvtvg";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:31:"8:qbangr_vagresnpr-qq-onax_pbqr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:31:"8:qbangr_vagresnpr-qq-onax_anzr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:33:"8:qbangr_vagresnpr-qq-oenapu_pbqr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:39:"8:qbangr_vagresnpr-qq-qverpg_qrovg_grkg";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:26:"8:qbangr_vagresnpr-qq-vona";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:28:"8:qbangr_vagresnpr-cz-nyvcnl";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:26:"8:qbangr_vagresnpr-cz-ocnl";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:29:"8:qbangr_vagresnpr-cz-obyrghf";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:36:"8:qbangr_vagresnpr-cz-qverpgronaxvat";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:25:"8:qbangr_vagresnpr-cz-rcf";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:27:"8:qbangr_vagresnpr-cz-rargf";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:29:"8:qbangr_vagresnpr-cz-tvebcnl";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:27:"8:qbangr_vagresnpr-cz-vqrny";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:28:"8:qbangr_vagresnpr-cz-abeqrn";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:28:"8:qbangr_vagresnpr-cz-fxevyy";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:28:"8:qbangr_vagresnpr-cz-fbsbeg";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:30:"8:qbangr_vagresnpr-cz-jrozbarl";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:34:"8:qbangr_vagresnpr-cz-jrfgreahavba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:28:"8:qbangr_vagresnpr-cz-lnaqrk";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:37:"8:qbangr_vagresnpr-genafyngr-oyhryvax";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:37:"8:qbangr_vagresnpr-genafyngr-erqyvax1";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:37:"8:qbangr_vagresnpr-genafyngr-erqyvax2";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:37:"8:qbangr_vagresnpr-rznvy-snyyonpxanzr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:32:"8:qbangr_vagresnpr-rznvy-fhowrpg";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:36:"8:qbangr_vagresnpr-rznvy-hafho-gvgyr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:37:"8:qbangr_vagresnpr-rznvy-hafho-ohggba";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:38:"8:qbangr_vagresnpr-rznvy-hafho-fhpprff";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:36:"8:qbangr_vagresnpr-rznvy-hafho-qrynl";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:35:"8:qbangr_vagresnpr-rznvy-hafho-snvy";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:38:"8:qbangr_vagresnpr-rznvy-hafho-pbasvez";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:38:"8:qbangr_vagresnpr-rznvy-hafho-jneavat";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:23:"8:qbangr_vagresnpr-sndf";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:27:"8:qbangr_vagresnpr-gnk-vasb";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:37:"8:qbangr_vagresnpr-vasbezngvbafunevat";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:34:"8:qbangr_vagresnpr-pheerapl-punatr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:40:"8:qbangr_vagresnpr-onax_genafsre_zrffntr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:34:"8:qbangr_vagresnpr-gnkqrq-yvax-vag";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:33:"8:qbangr_vagresnpr-gnkqrq-yvax-hf";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:33:"8:qbangr_vagresnpr-gnkqrq-zft-vag";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:32:"8:qbangr_vagresnpr-gnkqrq-zft-hf";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:33:"8:qbangr_vagresnpr-yrtny-bevtvany";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:36:"8:qbangr_vagresnpr-yrtny-qbabecbyvpl";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:35:"8:qbangr_vagresnpr-zbaguylobk-gvgyr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:37:"8:qbangr_vagresnpr-zbaguylobk-pbagrag";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:36:"8:qbangr_vagresnpr-zbaguylobk-nzbhag";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:33:"8:qbangr_vagresnpr-zbaguylobk-lrf";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:32:"8:qbangr_vagresnpr-zbaguylobk-ab";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:36:"8:qbangr_vagresnpr-zbaguylobk-obggbz";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:33:"8:qbangr_vagresnpr-zbaguyl-pnapry";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:26:"8:qbangr_vagresnpr-bargvzr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:32:"8:qbangr_vagresnpr-zbaguyl-fubeg";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:32:"8:qbangr_vagresnpr-bargvzr-fubeg";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:35:"8:qbangr_vagresnpr-frpherybtb-gvgyr";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:34:"8:qbangr_vagresnpr-frpherybtb-grkg";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:33:"8:qbangr_vagresnpr-reebe-uggc-403";a:3:{i:0;R:6691;i:1;R:801;i:2;R:3237;}s:19:"8:cnlsybjcebtngrjnl";a:3:{i:0;s:11:"ext-di-pfpg";i:1;R:801;i:2;R:3237;}s:25:"8:cnlsybjceb_tngrjnl-qrfp";a:3:{i:0;R:7081;i:1;R:801;i:2;R:3237;}s:31:"8:cnlsybjceb_tngrjnl-erfcbafr-0";a:3:{i:0;R:7081;i:1;R:801;i:2;R:3237;}s:33:"8:cnlsybjceb_tngrjnl-erfcbafr-126";a:3:{i:0;R:7081;i:1;R:801;i:2;R:3237;}s:35:"8:cnlsybjceb_tngrjnl-erfcbafr-126-2";a:3:{i:0;R:7081;i:1;R:801;i:2;R:3237;}s:32:"8:cnlsybjceb_tngrjnl-erfcbafr-12";a:3:{i:0;R:7081;i:1;R:801;i:2;R:3237;}s:32:"8:cnlsybjceb_tngrjnl-erfcbafr-13";a:3:{i:0;R:7081;i:1;R:801;i:2;R:3237;}s:33:"8:cnlsybjceb_tngrjnl-erfcbafr-114";a:3:{i:0;R:7081;i:1;R:801;i:2;R:3237;}s:32:"8:cnlsybjceb_tngrjnl-erfcbafr-23";a:3:{i:0;R:7081;i:1;R:801;i:2;R:3237;}s:31:"8:cnlsybjceb_tngrjnl-erfcbafr-4";a:3:{i:0;R:7081;i:1;R:801;i:2;R:3237;}s:32:"8:cnlsybjceb_tngrjnl-erfcbafr-24";a:3:{i:0;R:7081;i:1;R:801;i:2;R:3237;}s:33:"8:cnlsybjceb_tngrjnl-erfcbafr-112";a:3:{i:0;R:7081;i:1;R:801;i:2;R:3237;}s:33:"8:cnlsybjceb_tngrjnl-erfcbafr-125";a:3:{i:0;R:7081;i:1;R:801;i:2;R:3237;}s:35:"8:cnlsybjceb_tngrjnl-erfcbafr-125-2";a:3:{i:0;R:7081;i:1;R:801;i:2;R:3237;}s:37:"8:cnlsybjceb_tngrjnl-erfcbafr-qrsnhyg";a:3:{i:0;R:7081;i:1;R:801;i:2;R:3237;}s:21:"8:qvfnoyrnppbhag-qrfp";a:3:{i:0;s:18:"ext-disableaccount";i:1;R:801;i:2;R:3237;}s:22:"8:evtug-qvfnoyrnppbhag";a:3:{i:0;R:7097;i:1;R:801;i:2;R:3237;}s:16:"8:qvfnoyrnppbhag";a:3:{i:0;R:7097;i:1;R:801;i:2;R:3237;}s:21:"8:qvfnoyrnppbhag-hfre";a:3:{i:0;R:7097;i:1;R:801;i:2;R:3237;}s:24:"8:qvfnoyrnppbhag-pbasvez";a:3:{i:0;R:7097;i:1;R:801;i:2;R:3237;}s:28:"8:qvfnoyrnppbhag-zhfgpbasvez";a:3:{i:0;R:7097;i:1;R:801;i:2;R:3237;}s:27:"8:qvfnoyrnppbhag-abfhpuhfre";a:3:{i:0;R:7097;i:1;R:801;i:2;R:3237;}s:24:"8:qvfnoyrnppbhag-fhpprff";a:3:{i:0;R:7097;i:1;R:801;i:2;R:3237;}s:17:"8:qbhoyrjvxv-qrfp";a:3:{i:0;s:14:"ext-doublewiki";i:1;R:801;i:2;R:3237;}s:23:"8:rqvgcntrgenpxvat-qrfp";a:3:{i:0;s:20:"ext-editpagetracking";i:1;R:801;i:2;R:3237;}s:14:"8:rznvypncgher";a:3:{i:0;s:16:"ext-emailcapture";i:1;R:801;i:2;R:3237;}s:19:"8:rznvypncgher-qrfp";a:3:{i:0;R:7110;i:1;R:801;i:2;R:3237;}s:22:"8:rznvypncgher-snvyher";a:3:{i:0;R:7110;i:1;R:801;i:2;R:3237;}s:27:"8:rznvypncgher-vainyvq-pbqr";a:3:{i:0;R:7110;i:1;R:801;i:2;R:3237;}s:32:"8:rznvypncgher-nyernql-pbasvezrq";a:3:{i:0;R:7110;i:1;R:801;i:2;R:3237;}s:31:"8:rznvypncgher-erfcbafr-fhowrpg";a:3:{i:0;R:7110;i:1;R:801;i:2;R:3237;}s:28:"8:rznvypncgher-erfcbafr-obql";a:3:{i:0;R:7110;i:1;R:801;i:2;R:3237;}s:22:"8:rznvypncgher-fhpprff";a:3:{i:0;R:7110;i:1;R:801;i:2;R:3237;}s:27:"8:rznvypncgher-vafgehpgvbaf";a:3:{i:0;R:7110;i:1;R:801;i:2;R:3237;}s:21:"8:rznvypncgher-irevsl";a:3:{i:0;R:7110;i:1;R:801;i:2;R:3237;}s:21:"8:rznvypncgher-fhozvg";a:3:{i:0;R:7110;i:1;R:801;i:2;R:3237;}s:17:"8:rkcnaqgrzcyngrf";a:3:{i:0;s:19:"ext-expandtemplates";i:1;R:801;i:2;R:3237;}s:22:"8:rkcnaqgrzcyngrf-qrfp";a:3:{i:0;R:7122;i:1;R:801;i:2;R:3237;}s:24:"8:rkcnaq_grzcyngrf_vageb";a:3:{i:0;R:7122;i:1;R:801;i:2;R:3237;}s:24:"8:rkcnaq_grzcyngrf_gvgyr";a:3:{i:0;R:7122;i:1;R:801;i:2;R:3237;}s:24:"8:rkcnaq_grzcyngrf_vachg";a:3:{i:0;R:7122;i:1;R:801;i:2;R:3237;}s:25:"8:rkcnaq_grzcyngrf_bhgchg";a:3:{i:0;R:7122;i:1;R:801;i:2;R:3237;}s:29:"8:rkcnaq_grzcyngrf_kzy_bhgchg";a:3:{i:0;R:7122;i:1;R:801;i:2;R:3237;}s:21:"8:rkcnaq_grzcyngrf_bx";a:3:{i:0;R:7122;i:1;R:801;i:2;R:3237;}s:34:"8:rkcnaq_grzcyngrf_erzbir_pbzzragf";a:3:{i:0;R:7122;i:1;R:801;i:2;R:3237;}s:32:"8:rkcnaq_grzcyngrf_erzbir_abjvxv";a:3:{i:0;R:7122;i:1;R:801;i:2;R:3237;}s:31:"8:rkcnaq_grzcyngrf_trarengr_kzy";a:3:{i:0;R:7122;i:1;R:801;i:2;R:3237;}s:26:"8:rkcnaq_grzcyngrf_cerivrj";a:3:{i:0;R:7122;i:1;R:801;i:2;R:3237;}s:22:"8:rkgrafvbaqvfgevohgbe";a:3:{i:0;s:24:"ext-extensiondistributor";i:1;R:801;i:2;R:3237;}s:27:"8:rkgrafvbaqvfgevohgbe-qrfp";a:3:{i:0;R:7135;i:1;R:801;i:2;R:3237;}s:24:"8:rkgqvfg-abg-pbasvtherq";a:3:{i:0;R:7135;i:1;R:801;i:2;R:3237;}s:20:"8:rkgqvfg-jp-zvffvat";a:3:{i:0;R:7135;i:1;R:801;i:2;R:3237;}s:27:"8:rkgqvfg-ab-fhpu-rkgrafvba";a:3:{i:0;R:7135;i:1;R:801;i:2;R:3237;}s:25:"8:rkgqvfg-ab-fhpu-irefvba";a:3:{i:0;R:7135;i:1;R:801;i:2;R:3237;}s:26:"8:rkgqvfg-pubbfr-rkgrafvba";a:3:{i:0;R:7135;i:1;R:801;i:2;R:3237;}s:18:"8:rkgqvfg-jp-rzcgl";a:3:{i:0;R:7135;i:1;R:801;i:2;R:3237;}s:26:"8:rkgqvfg-fhozvg-rkgrafvba";a:3:{i:0;R:7135;i:1;R:801;i:2;R:3237;}s:25:"8:rkgqvfg-pheerag-irefvba";a:3:{i:0;R:7135;i:1;R:801;i:2;R:3237;}s:24:"8:rkgqvfg-pubbfr-irefvba";a:3:{i:0;R:7135;i:1;R:801;i:2;R:3237;}s:21:"8:rkgqvfg-ab-irefvbaf";a:3:{i:0;R:7135;i:1;R:801;i:2;R:3237;}s:24:"8:rkgqvfg-fhozvg-irefvba";a:3:{i:0;R:7135;i:1;R:801;i:2;R:3237;}s:19:"8:rkgqvfg-ab-erzbgr";a:3:{i:0;R:7135;i:1;R:801;i:2;R:3237;}s:22:"8:rkgqvfg-erzbgr-reebe";a:3:{i:0;R:7135;i:1;R:801;i:2;R:3237;}s:33:"8:rkgqvfg-erzbgr-vainyvq-erfcbafr";a:3:{i:0;R:7135;i:1;R:801;i:2;R:3237;}s:19:"8:rkgqvfg-fia-reebe";a:3:{i:0;R:7135;i:1;R:801;i:2;R:3237;}s:25:"8:rkgqvfg-fia-cnefr-reebe";a:3:{i:0;R:7135;i:1;R:801;i:2;R:3237;}s:19:"8:rkgqvfg-tvg-reebe";a:3:{i:0;R:7135;i:1;R:801;i:2;R:3237;}s:25:"8:rkgqvfg-tvg-vainyvqfun1";a:3:{i:0;R:7135;i:1;R:801;i:2;R:3237;}s:19:"8:rkgqvfg-gne-reebe";a:3:{i:0;R:7135;i:1;R:801;i:2;R:3237;}s:17:"8:rkgqvfg-perngrq";a:3:{i:0;R:7135;i:1;R:801;i:2;R:3237;}s:19:"8:rkgqvfg-jnag-zber";a:3:{i:0;R:7135;i:1;R:801;i:2;R:3237;}s:25:"8:rkgqvfg-ipf-hafhccbegrq";a:3:{i:0;R:7135;i:1;R:801;i:2;R:3237;}s:25:"8:rkgqvfg-tvg-vainyvq-qve";a:3:{i:0;R:7135;i:1;R:801;i:2;R:3237;}s:17:"8:pbasvtherqcntrf";a:4:{i:0;s:31:"ext-flaggedrevs-configuredpages";i:1;R:801;i:2;R:3237;i:3;s:21:"ext-flaggedrevs-0-all";}s:22:"8:pbasvtherqcntrf-yvfg";a:4:{i:0;R:7161;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:pbasvtherqcntrf-abar";a:4:{i:0;R:7161;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:24:"8:pbasvtherqcntrf-pbasvt";a:4:{i:0;R:7161;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:27:"8:pbasvtherqcntrf-qrs-qensg";a:4:{i:0;R:7161;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:28:"8:pbasvtherqcntrf-qrs-fgnoyr";a:4:{i:0;R:7161;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:15:"8:npgvba-erivrj";a:4:{i:0;s:27:"ext-flaggedrevs-flaggedrevs";i:1;R:801;i:2;R:3237;i:3;R:7162;}s:8:"8:rqvgbe";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:13:"8:synttrqerif";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:29:"8:synttrqerif-jngpurq-craqvat";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:18:"8:synttrqerif-qrfp";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:21:"8:synttrqerif-cers-hv";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:23:"8:synttrqerif-cers-hv-0";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:23:"8:synttrqerif-cers-hv-1";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:31:"8:synttrqerif-fgnoyr-pngrtbevrf";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:19:"8:cersf-synttrqerif";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:cersf-synttrqerif-hv";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:26:"8:synttrqerif-cersf-fgnoyr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:27:"8:synttrqerif-cers-fgnoyr-0";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:27:"8:synttrqerif-cers-fgnoyr-1";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:27:"8:synttrqerif-cers-fgnoyr-2";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:25:"8:synttrqerif-cersf-jngpu";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:29:"8:synttrqerif-cersf-rqvgqvssf";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:29:"8:synttrqerif-cersf-ivrjqvssf";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:26:"8:synttrqerif-uvqrerivrjrq";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:synttrqerif-qvssbayl";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:14:"8:tebhc-rqvgbe";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:21:"8:tebhc-rqvgbe-zrzore";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:16:"8:tebhc-erivrjre";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:23:"8:tebhc-erivrjre-zrzore";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:18:"8:tebhccntr-rqvgbe";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:20:"8:tebhccntr-erivrjre";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:18:"8:tebhc-nhgberivrj";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:25:"8:tebhc-nhgberivrj-zrzore";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:tebhccntr-nhgberivrj";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:18:"8:tebhc-rqvgbe.pff";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:17:"8:tebhc-rqvgbe.wf";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:20:"8:tebhc-erivrjre.pff";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:19:"8:tebhc-erivrjre.wf";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:tebhc-nhgberivrj.pff";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:21:"8:tebhc-nhgberivrj.wf";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:erierivrj-uvfg-qensg";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:24:"8:erierivrj-uvfg-craqvat";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:24:"8:erierivrj-uvfg-dhnyvgl";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:erierivrj-uvfg-onfvp";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:29:"8:erierivrj-uvfg-dhnyvgl-hfre";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:27:"8:erierivrj-uvfg-onfvp-hfre";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:29:"8:erierivrj-uvfg-dhnyvgl-nhgb";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:27:"8:erierivrj-uvfg-onfvp-nhgb";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:33:"8:erierivrj-uvfg-craqvat-qvssyvax";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:18:"8:erivrj-rqvg-qvss";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:28:"8:erierivrj-qvss-gbttyr-fubj";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:28:"8:erierivrj-qvss-gbttyr-uvqr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:29:"8:erierivrj-qvss-gbttyr-gvgyr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:27:"8:erierivrj-ybt-gbttyr-fubj";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:27:"8:erierivrj-ybt-gbttyr-uvqr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:28:"8:erierivrj-ybt-gbttyr-gvgyr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:28:"8:erierivrj-ybt-qrgnvyf-fubj";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:28:"8:erierivrj-ybt-qrgnvyf-uvqr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:29:"8:erierivrj-ybt-qrgnvyf-gvgyr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:20:"8:erivrj-qvss2fgnoyr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:21:"8:erivrj-ybtragel-ncc";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:21:"8:erivrj-ybtragel-qvf";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:20:"8:erivrj-ybtragel-vq";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:erivrj-ybtragel-qvss";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:23:"8:erivrj-ybtragel-qvss2";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:16:"8:erivrj-ybtcntr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:20:"8:erivrj-ybtcntrgrkg";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:10:"8:erivrjre";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:20:"8:erierivrj-npphenpl";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:erierivrj-npphenpl-0";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:erierivrj-npphenpl-1";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:erierivrj-npphenpl-2";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:erierivrj-npphenpl-3";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:erierivrj-npphenpl-4";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:16:"8:erierivrj-nhgb";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:17:"8:erierivrj-onfvp";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:19:"8:erierivrj-onfvp-v";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:21:"8:erierivrj-onfvp-byq";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:erierivrj-onfvp-fnzr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:24:"8:erierivrj-onfvp-fbhepr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:19:"8:erierivrj-pheerag";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:17:"8:erierivrj-qrcgu";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:19:"8:erierivrj-qrcgu-0";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:19:"8:erierivrj-qrcgu-1";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:19:"8:erierivrj-qrcgu-2";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:19:"8:erierivrj-qrcgu-3";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:19:"8:erierivrj-qrcgu-4";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:23:"8:erierivrj-qensg-gvgyr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:16:"8:erierivrj-rqvg";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:erierivrj-rqvgabgvpr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:erierivrj-fhozvgrqvg";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:28:"8:erierivrj-fhozvgrqvg-gvgyr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:18:"8:erierivrj-rqvgrq";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:26:"8:erierivrj-rqvgrq-frpgvba";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:24:"8:erierivrj-arjrfg-onfvp";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:26:"8:erierivrj-arjrfg-onfvp-v";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:26:"8:erierivrj-arjrfg-dhnyvgl";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:28:"8:erierivrj-arjrfg-dhnyvgl-v";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:25:"8:erierivrj-craqvat-onfvp";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:27:"8:erierivrj-craqvat-dhnyvgl";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:29:"8:erierivrj-craqvat-abfrpgvba";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:21:"8:erierivrj-absynttrq";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:21:"8:erierivrj-byqengvat";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:19:"8:erierivrj-dhnyvgl";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:21:"8:erierivrj-dhnyvgl-v";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:23:"8:erierivrj-dhnyvgl-byq";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:24:"8:erierivrj-dhnyvgl-fnzr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:26:"8:erierivrj-dhnyvgl-fbhepr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:25:"8:erierivrj-dhnyvgl-gvgyr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:23:"8:erierivrj-dhvpx-onfvp";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:27:"8:erierivrj-dhvpx-onfvp-byq";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:28:"8:erierivrj-dhvpx-onfvp-fnzr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:25:"8:erierivrj-dhvpx-vainyvq";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:erierivrj-dhvpx-abar";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:25:"8:erierivrj-dhvpx-dhnyvgl";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:29:"8:erierivrj-dhvpx-dhnyvgl-byq";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:30:"8:erierivrj-dhvpx-dhnyvgl-fnzr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:27:"8:erierivrj-dhvpx-frr-onfvp";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:29:"8:erierivrj-dhvpx-frr-dhnyvgl";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:18:"8:erierivrj-fbhepr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:23:"8:erierivrj-onfvp-gvgyr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:17:"8:erierivrj-fglyr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:19:"8:erierivrj-fglyr-0";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:19:"8:erierivrj-fglyr-1";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:19:"8:erierivrj-fglyr-2";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:19:"8:erierivrj-fglyr-3";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:19:"8:erierivrj-fglyr-4";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:23:"8:erierivrj-gbttyr-fubj";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:23:"8:erierivrj-gbttyr-uvqr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:24:"8:erierivrj-gbttyr-gvgyr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:29:"8:erierivrj-ivfvovyvgl-flaprq";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:31:"8:erierivrj-ivfvovyvgl-bhgqngrq";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:31:"8:erierivrj-ivfvovyvgl-abfgnoyr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:23:"8:erierivrj-eriabgsbhaq";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:18:"8:evtug-nhgberivrj";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:25:"8:evtug-nhgberivrjerfgber";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:18:"8:evtug-zbirfgnoyr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:14:"8:evtug-erivrj";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:evtug-fgnoyrfrggvatf";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:16:"8:evtug-inyvqngr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:23:"8:evtug-haerivrjrqcntrf";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:evtugf-rqvgbe-eribxr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:28:"8:fcrpvnycntrf-tebhc-dhnyvgl";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:24:"8:fgnoyr-ybtragel-pbasvt";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:24:"8:fgnoyr-ybtragel-zbqvsl";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:23:"8:fgnoyr-ybtragel-erfrg";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:24:"8:fgnoyr-ybt-erfgevpgvba";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:16:"8:fgnoyr-ybtcntr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:20:"8:fgnoyr-ybtcntrgrkg";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:erierivrj-svygre-nyy";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:25:"8:erierivrj-svygre-fgnoyr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:24:"8:erierivrj-fgnghfsvygre";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:27:"8:erierivrj-svygre-nccebirq";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:29:"8:erierivrj-svygre-ernccebirq";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:29:"8:erierivrj-svygre-hanccebirq";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:erierivrj-glcrsvygre";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:23:"8:erierivrj-svygre-nhgb";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:25:"8:erierivrj-svygre-znahny";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:23:"8:erierivrj-yrirysvygre";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:19:"8:erierivrj-yri-nyy";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:21:"8:erierivrj-yri-onfvp";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:23:"8:erierivrj-yri-dhnyvgl";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:24:"8:erierivrj-yri-cevfgvar";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:25:"8:erierivrj-qrsnhygsvygre";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:19:"8:erierivrj-qrs-nyy";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:21:"8:erierivrj-qrs-qensg";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:erierivrj-qrs-fgnoyr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:26:"8:erierivrj-erfgevpgsvygre";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:27:"8:erierivrj-erfgevpgvba-nal";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:28:"8:erierivrj-erfgevpgvba-abar";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:erierivrj-erivrjyvax";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:28:"8:erierivrj-erivrjyvax-gvgyr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:26:"8:erierivrj-haerivrjrqcntr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:20:"8:gbbygvc-pn-pheerag";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:19:"8:gbbygvc-pn-fgnoyr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:20:"8:gbbygvc-pn-qrsnhyg";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:28:"8:synttrqerif-cebgrpg-yrtraq";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:26:"8:synttrqerif-cebgrpg-abar";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:26:"8:synttrqerif-pngrtbelivrj";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:24:"8:erierivrj-ybpxrq-gvgyr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:26:"8:erierivrj-haybpxrq-gvgyr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:18:"8:erierivrj-ybpxrq";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:20:"8:erierivrj-haybpxrq";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:21:"8:erierivrj-nx-erivrj";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:npprffxrl-pn-pheerag";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:21:"8:npprffxrl-pn-fgnoyr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:ybt-fubj-uvqr-erivrj";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:16:"8:inyvqngvbacntr";a:4:{i:0;R:7169;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:16:"8:craqvatpunatrf";a:4:{i:0;s:30:"ext-flaggedrevs-pendingchanges";i:1;R:801;i:2;R:3237;i:3;R:7162;}s:23:"8:craqvatpunatrf-yrtraq";a:4:{i:0;R:7353;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:21:"8:craqvatpunatrf-yvfg";a:4:{i:0;R:7353;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:21:"8:craqvatpunatrf-abar";a:4:{i:0;R:7353;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:craqvatpunatrf-ubhef";a:4:{i:0;R:7353;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:21:"8:craqvatpunatrf-qnlf";a:4:{i:0;R:7353;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:23:"8:craqvatpunatrf-erprag";a:4:{i:0;R:7353;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:25:"8:craqvatpunatrf-pngrtbel";a:4:{i:0;R:7353;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:28:"8:craqvatpunatrf-bajngpuyvfg";a:4:{i:0;R:7353;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:23:"8:craqvatpunatrf-fgnoyr";a:4:{i:0;R:7353;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:21:"8:craqvatpunatrf-qvss";a:4:{i:0;R:7353;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:21:"8:craqvatpunatrf-fvmr";a:4:{i:0;R:7353;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:26:"8:craqvatpunatrf-hajngpurq";a:4:{i:0;R:7353;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:24:"8:craqvatpunatrf-jngpurq";a:4:{i:0;R:7353;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:24:"8:craqvatpunatrf-ivrjvat";a:4:{i:0;R:7353;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:16:"8:ceboyrzpunatrf";a:4:{i:0;s:30:"ext-flaggedrevs-problemchanges";i:1;R:801;i:2;R:3237;i:3;R:7162;}s:21:"8:ceboyrzpunatrf-yvfg";a:4:{i:0;R:7369;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:23:"8:ceboyrzpunatrf-yrtraq";a:4:{i:0;R:7369;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:21:"8:ceboyrzpunatrf-abar";a:4:{i:0;R:7369;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:25:"8:ceboyrzpunatrf-pngrtbel";a:4:{i:0;R:7369;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:18:"8:dhnyvglbirefvtug";a:4:{i:0;s:32:"ext-flaggedrevs-qualityoversight";i:1;R:801;i:2;R:3237;i:3;R:7162;}s:23:"8:dhnyvglbirefvtug-yvfg";a:4:{i:0;R:7375;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:25:"8:dhnyvglbirefvtug-yrtraq";a:4:{i:0;R:7375;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:15:"8:erivrjrqcntrf";a:4:{i:0;s:29:"ext-flaggedrevs-reviewedpages";i:1;R:801;i:2;R:3237;i:3;R:7162;}s:19:"8:erivrjrqcntrf-yrt";a:4:{i:0;R:7379;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:20:"8:erivrjrqcntrf-yvfg";a:4:{i:0;R:7379;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:20:"8:erivrjrqcntrf-abar";a:4:{i:0;R:7379;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:21:"8:erivrjrqcntrf-yri-0";a:4:{i:0;R:7379;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:21:"8:erivrjrqcntrf-yri-1";a:4:{i:0;R:7379;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:21:"8:erivrjrqcntrf-yri-2";a:4:{i:0;R:7379;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:19:"8:erivrjrqcntrf-nyy";a:4:{i:0;R:7379;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:20:"8:erivrjrqcntrf-orfg";a:4:{i:0;R:7379;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:18:"8:erivrjrqirefvbaf";a:4:{i:0;s:32:"ext-flaggedrevs-reviewedversions";i:1;R:801;i:2;R:3237;i:3;R:7162;}s:23:"8:erivrjrqirefvbaf-yrt1";a:4:{i:0;R:7389;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:23:"8:erivrjrqirefvbaf-cntr";a:4:{i:0;R:7389;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:23:"8:erivrjrqirefvbaf-abar";a:4:{i:0;R:7389;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:23:"8:erivrjrqirefvbaf-yvfg";a:4:{i:0;R:7389;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:25:"8:erivrjrqirefvbaf-erivrj";a:4:{i:0;R:7389;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:16:"8:erivfvbaerivrj";a:4:{i:0;s:30:"ext-flaggedrevs-revisionreview";i:1;R:801;i:2;R:3237;i:3;R:7162;}s:18:"8:erierivrj-snvyrq";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:30:"8:erierivrj-fhozvffvba-vainyvq";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:21:"8:erivrj_cntr_vainyvq";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:23:"8:erivrj_cntr_abgrkvfgf";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:26:"8:erivrj_cntr_haerivrjnoyr";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:17:"8:erivrj_ab_byqvq";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:18:"8:erivrj_onq_byqvq";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:23:"8:erivrj_pbasyvpg_byqvq";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:20:"8:erivrj_abg_synttrq";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:16:"8:erivrj_gbb_ybj";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:16:"8:erivrj_onq_xrl";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:17:"8:erivrj_onq_gntf";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:15:"8:erivrj_qravrq";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:erivrj_cnenz_zvffvat";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:20:"8:erivrj_pnaabg_haqb";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:erivrj_pnaabg_erwrpg";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:25:"8:erivrj_erwrpg_rkprffvir";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:25:"8:erivrj_erwrpg_ahyyrqvgf";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:24:"8:erierivrj-purpx-synt-c";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:30:"8:erierivrj-purpx-synt-c-gvgyr";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:24:"8:erierivrj-purpx-synt-h";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:30:"8:erierivrj-purpx-synt-h-gvgyr";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:24:"8:erierivrj-purpx-synt-l";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:30:"8:erierivrj-purpx-synt-l-gvgyr";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:16:"8:erierivrj-synt";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:18:"8:erierivrj-ersynt";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:19:"8:erierivrj-vainyvq";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:15:"8:erierivrj-ybt";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:16:"8:erierivrj-znva";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:19:"8:erierivrj-fgnoyr1";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:19:"8:erierivrj-fgnoyr2";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:18:"8:erierivrj-fhozvg";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:erierivrj-fhozvggvat";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:25:"8:erierivrj-fhozvg-erivrj";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:27:"8:erierivrj-fhozvg-haerivrj";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:25:"8:erierivrj-fhozvg-erwrpg";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:27:"8:erierivrj-fhozvg-erivrjrq";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:29:"8:erierivrj-fhozvg-haerivrjrq";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:erierivrj-fhpprffshy";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:23:"8:erierivrj-fhpprffshy2";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:27:"8:erierivrj-cbff-pbasyvpg-c";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:27:"8:erierivrj-cbff-pbasyvpg-p";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:27:"8:erierivrj-nqi-erivrjvat-c";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:27:"8:erierivrj-nqi-erivrjvat-p";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:28:"8:erierivrj-fnqi-erivrjvat-c";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:28:"8:erierivrj-fnqi-erivrjvat-p";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:26:"8:erierivrj-nqi-fgneg-yvax";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:25:"8:erierivrj-nqi-fgbc-yvax";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:18:"8:erierivrj-gbbybj";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:18:"8:erierivrj-hcqngr";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:25:"8:erierivrj-hcqngr-rqvgrq";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:30:"8:erierivrj-hcqngr-rqvgrq-ceri";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:27:"8:erierivrj-hcqngr-vapyhqrf";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:28:"8:erierivrj-erwrpg-grkg-yvfg";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:29:"8:erierivrj-erwrpg-grkg-erigb";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:26:"8:erierivrj-erwrpg-fhzznel";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:26:"8:erierivrj-erwrpg-pbasvez";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:25:"8:erierivrj-erwrpg-pnapry";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:30:"8:erierivrj-erwrpg-fhzznel-phe";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:30:"8:erierivrj-erwrpg-fhzznel-byq";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:36:"8:erierivrj-erwrpg-fhzznel-phe-fubeg";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:36:"8:erierivrj-erwrpg-fhzznel-byq-fubeg";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:19:"8:erierivrj-gg-synt";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:21:"8:erierivrj-gg-hasynt";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:21:"8:erierivrj-gg-erwrpg";a:4:{i:0;R:7396;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:19:"8:fgnovyvmngvba-gno";a:4:{i:0;s:29:"ext-flaggedrevs-stabilization";i:1;R:801;i:2;R:3237;i:3;R:7162;}s:15:"8:fgnovyvmngvba";a:4:{i:0;R:7463;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:20:"8:fgnovyvmngvba-grkg";a:4:{i:0;R:7463;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:20:"8:fgnovyvmngvba-crez";a:4:{i:0;R:7463;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:20:"8:fgnovyvmngvba-cntr";a:4:{i:0;R:7463;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:19:"8:fgnovyvmngvba-yrt";a:4:{i:0;R:7463;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:19:"8:fgnovyvmngvba-qrs";a:4:{i:0;R:7463;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:20:"8:fgnovyvmngvba-qrs1";a:4:{i:0;R:7463;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:20:"8:fgnovyvmngvba-qrs2";a:4:{i:0;R:7463;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:24:"8:fgnovyvmngvba-erfgevpg";a:4:{i:0;R:7463;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:29:"8:fgnovyvmngvba-erfgevpg-abar";a:4:{i:0;R:7463;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:fgnovyvmngvba-fhozvg";a:4:{i:0;R:7463;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:25:"8:fgnovyvmngvba-abgrkvfgf";a:4:{i:0;R:7463;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:26:"8:fgnovyvmngvba-abgpbagrag";a:4:{i:0;R:7463;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:23:"8:fgnovyvmngvba-pbzzrag";a:4:{i:0;R:7463;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:27:"8:fgnovyvmngvba-bgureernfba";a:4:{i:0;R:7463;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:fgnovyvmngvba-rkcvel";a:4:{i:0;R:7463;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:25:"8:fgnovyvmngvba-bguregvzr";a:4:{i:0;R:7463;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:25:"8:fgnovyvmngvba-qrs-fubeg";a:4:{i:0;R:7463;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:27:"8:fgnovyvmngvba-qrs-fubeg-0";a:4:{i:0;R:7463;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:27:"8:fgnovyvmngvba-qrs-fubeg-1";a:4:{i:0;R:7463;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:24:"8:fgnovyvmr_cntr_vainyvq";a:4:{i:0;R:7463;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:26:"8:fgnovyvmr_cntr_abgrkvfgf";a:4:{i:0;R:7463;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:29:"8:fgnovyvmr_cntr_haerivrjnoyr";a:4:{i:0;R:7463;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:30:"8:fgnovyvmr_vainyvq_nhgberivrj";a:4:{i:0;R:7463;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:25:"8:fgnovyvmr_vainyvq_yriry";a:4:{i:0;R:7463;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:26:"8:fgnovyvmr_rkcvel_vainyvq";a:4:{i:0;R:7463;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:fgnovyvmr_rkcvel_byq";a:4:{i:0;R:7463;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:18:"8:fgnovyvmr_qravrq";a:4:{i:0;R:7463;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:25:"8:fgnovyvmr_cebgrpg_dhbgn";a:4:{i:0;R:7463;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:20:"8:fgnovyvmr-rkcvevat";a:4:{i:0;R:7463;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:fgnovyvmngvba-erivrj";a:4:{i:0;R:7463;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:13:"8:fgnoyrcntrf";a:4:{i:0;s:27:"ext-flaggedrevs-stablepages";i:1;R:801;i:2;R:3237;i:3;R:7162;}s:18:"8:fgnoyrcntrf-yvfg";a:4:{i:0;R:7496;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:18:"8:fgnoyrcntrf-abar";a:4:{i:0;R:7496;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:20:"8:fgnoyrcntrf-pbasvt";a:4:{i:0;R:7496;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:19:"8:fgnoyrcntrf-vaqrs";a:4:{i:0;R:7496;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:17:"8:haerivrjrqcntrf";a:4:{i:0;s:31:"ext-flaggedrevs-unreviewedpages";i:1;R:801;i:2;R:3237;i:3;R:7162;}s:24:"8:haerivrjrqcntrf-yrtraq";a:4:{i:0;R:7502;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:26:"8:haerivrjrqcntrf-pngrtbel";a:4:{i:0;R:7502;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:haerivrjrqcntrf-qvss";a:4:{i:0;R:7502;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:27:"8:haerivrjrqcntrf-hajngpurq";a:4:{i:0;R:7502;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:25:"8:haerivrjrqcntrf-jngpurq";a:4:{i:0;R:7502;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:haerivrjrqcntrf-yvfg";a:4:{i:0;R:7502;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:haerivrjrqcntrf-abar";a:4:{i:0;R:7502;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:25:"8:haerivrjrqcntrf-ivrjvat";a:4:{i:0;R:7502;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:23:"8:haerivrjrqcntrf-ubhef";a:4:{i:0;R:7502;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:haerivrjrqcntrf-qnlf";a:4:{i:0;R:7502;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:24:"8:haerivrjrqcntrf-erprag";a:4:{i:0;R:7502;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:22:"8:inyvqngvbafgngvfgvpf";a:4:{i:0;s:36:"ext-flaggedrevs-validationstatistics";i:1;R:801;i:2;R:3237;i:3;R:7162;}s:28:"8:inyvqngvbafgngvfgvpf-hfref";a:4:{i:0;R:7515;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:33:"8:inyvqngvbafgngvfgvpf-ynfghcqngr";a:4:{i:0;R:7515;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:30:"8:inyvqngvbafgngvfgvpf-caqgvzr";a:4:{i:0;R:7515;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:30:"8:inyvqngvbafgngvfgvpf-erigvzr";a:4:{i:0;R:7515;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:28:"8:inyvqngvbafgngvfgvpf-gnoyr";a:4:{i:0;R:7515;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:25:"8:inyvqngvbafgngvfgvpf-af";a:4:{i:0;R:7515;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:28:"8:inyvqngvbafgngvfgvpf-gbgny";a:4:{i:0;R:7515;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:29:"8:inyvqngvbafgngvfgvpf-fgnoyr";a:4:{i:0;R:7515;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:29:"8:inyvqngvbafgngvfgvpf-yngrfg";a:4:{i:0;R:7515;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:29:"8:inyvqngvbafgngvfgvpf-flaprq";a:4:{i:0;R:7515;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:26:"8:inyvqngvbafgngvfgvpf-byq";a:4:{i:0;R:7515;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:29:"8:inyvqngvbafgngvfgvpf-hgnoyr";a:4:{i:0;R:7515;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:27:"8:inyvqngvbafgngvfgvpf-hfre";a:4:{i:0;R:7515;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:30:"8:inyvqngvbafgngvfgvpf-erivrjf";a:4:{i:0;R:7515;i:1;R:801;i:2;R:3237;i:3;R:7162;}s:28:"8:shaqenvfreynaqvatcntr-qrfp";a:3:{i:0;s:25:"ext-fundraiserlandingpage";i:1;R:801;i:2;R:3237;}s:19:"8:tbbtyrarjffvgrznc";a:3:{i:0;s:21:"ext-googlenewssitemap";i:1;R:801;i:2;R:3237;}s:24:"8:tbbtyrarjffvgrznc-qrfp";a:3:{i:0;R:7533;i:1;R:801;i:2;R:3237;}s:31:"8:tbbtyrarjffvgrznc_pngrtbelznc";a:3:{i:0;R:7533;i:1;R:801;i:2;R:3237;}s:31:"8:tbbtyrarjffvgrznc_gbbznalpngf";a:3:{i:0;R:7533;i:1;R:801;i:2;R:3237;}s:29:"8:tbbtyrarjffvgrznc_srrqgvgyr";a:3:{i:0;R:7533;i:1;R:801;i:2;R:3237;}s:10:"8:yfg-qrfp";a:3:{i:0;s:30:"ext-labeledsectiontransclusion";i:1;R:801;i:2;R:3237;}s:19:"8:ynaqvatpurpx-qrfp";a:3:{i:0;s:16:"ext-landingcheck";i:1;R:801;i:2;R:3237;}s:14:"8:ynaqvatpurpx";a:3:{i:0;R:7541;i:1;R:801;i:2;R:3237;}s:21:"8:ynaqvatpurpx-abcntr";a:3:{i:0;R:7541;i:1;R:801;i:2;R:3237;}s:25:"8:yqncnhguragvpngvba-qrfp";a:3:{i:0;s:22:"ext-ldapauthentication";i:1;R:801;i:2;R:3237;}s:10:"8:ydg-qrfp";a:3:{i:0;s:17:"ext-liquidthreads";i:1;R:801;i:2;R:3237;}s:16:"8:ydg_zbirguernq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:18:"8:ydg_qryrgrguernq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:20:"8:ydg_pbagragf_gvgyr";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:22:"8:ydg_gbp_guernq_gvgyr";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:23:"8:ydg_gbp_guernq_nhgube";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:27:"8:ydg_gbp_guernq_ercylpbhag";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:25:"8:ydg_gbp_guernq_zbqvsvrq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:16:"8:ydg_nqq_urnqre";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:16:"8:ydg_arj_guernq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:21:"8:ydg_vainyvq_fhowrpg";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:16:"8:ydg-rzcgl-grkg";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:19:"8:ydg_rzcgl_fhowrpg";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:11:"8:ydg_ercyl";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:12:"8:ydg-cnerag";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:12:"8:ydg_qryrgr";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:14:"8:ydg_haqryrgr";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:15:"8:ydg_creznyvax";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:14:"8:ydg_sentzrag";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:21:"8:ydg_qvfphffvba_yvax";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:15:"8:ydg_sebz_gnyx";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:19:"8:ydg-uvfgbel-gvgyr";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:25:"8:ydg_uvfg_pbzzrag_rqvgrq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:26:"8:ydg_uvfg_fhzznel_punatrq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:24:"8:ydg_uvfg_ercyl_perngrq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:25:"8:ydg_uvfg_guernq_perngrq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:18:"8:ydg_uvfg_qryrgrq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:20:"8:ydg_uvfg_haqryrgrq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:25:"8:ydg_uvfg_zbirq_gnyxcntr";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:27:"8:ydg_uvfg_yvfgvat_fhogvgyr";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:28:"8:ydg_uvfg_ivrj_jubyr_guernq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:29:"8:ydg_uvfg_ab_erivfvbaf_reebe";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:31:"8:ydg_uvfg_cnfg_ynfg_cntr_reebe";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:33:"8:ydg_uvfg_gbbygvc_arjre_qvfnoyrq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:33:"8:ydg_uvfg_gbbygvc_byqre_qvfnoyrq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:16:"8:ydg_uvfg_fcyvg";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:25:"8:ydg_uvfg_rqvgrq_fhowrpg";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:33:"8:ydg_uvfg_rqvgrq_fhowrpg_pbeehcg";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:22:"8:ydg_uvfg_zretrq_sebz";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:20:"8:ydg_uvfg_zretrq_gb";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:21:"8:ydg_uvfg_fcyvg_sebz";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:23:"8:ydg_uvfg_ebbg_oynaxrq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:27:"8:ydg_uvfg_nqwhfgrq_fbegxrl";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:20:"8:ydg_erivfvba_nf_bs";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:23:"8:ydg_punatr_arj_guernq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:26:"8:ydg_punatr_ercyl_perngrq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:24:"8:ydg_punatr_rqvgrq_ebbg";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:27:"8:ydg_punatr_rqvgrq_fhzznel";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:20:"8:ydg_punatr_qryrgrq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:22:"8:ydg_punatr_haqryrgrq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:18:"8:ydg_punatr_zbirq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:18:"8:ydg_punatr_fcyvg";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:27:"8:ydg_punatr_rqvgrq_fhowrpg";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:24:"8:ydg_punatr_zretrq_sebz";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:22:"8:ydg_punatr_zretrq_gb";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:23:"8:ydg_punatr_fcyvg_sebz";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:25:"8:ydg_punatr_ebbg_oynaxrq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:24:"8:ydg_lbhunirarjzrffntrf";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:24:"8:ydg_cebgrpgrqsebzercyl";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:29:"8:ydg_cebgrpgrqsebzercyl_yvax";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:13:"8:ydg_fhowrpg";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:14:"8:ydg_abernfba";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:22:"8:ydg_zbir_cynprubyqre";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:31:"8:ydg_guernq_qryrgrq_sbe_flfbcf";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:20:"8:ydg_guernq_qryrgrq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:20:"8:ydg_fhzznel_abgvpr";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:25:"8:ydg_fhzznel_abgvpr_yvax";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:19:"8:ydg_fhzznel_ynory";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:22:"8:ydg_fhzznel_fhogvgyr";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:20:"8:ydg_abfhpuerivfvba";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:18:"8:ydg_abfhpuguernq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:24:"8:ydg_abfhpuguernq_gvgyr";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:20:"8:ydg_guernqerdhverq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:23:"8:ydg_zbir_zbivatguernq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:19:"8:ydg_zbir_gberanzr";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:24:"8:ydg_zbir_gberanzr_rqvg";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:27:"8:ydg_zbir_qrfgvangvbagvgyr";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:15:"8:ydg_zbir_zbir";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:24:"8:ydg_zbir_abqrfgvangvba";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:33:"8:ydg_zbir_guernq_onq_qrfgvangvba";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:26:"8:ydg_zbir_fnzrqrfgvangvba";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:19:"8:ydg_zbir_abernfba";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:18:"8:ydg_zbir_fhpprff";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:33:"8:ydg_gnyxcntr_nhgbperngr_fhzznel";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:31:"8:ydg_urnqre_jneavat_orsber_ovt";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:24:"8:ydg_urnqre_jneavat_ovt";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:30:"8:ydg_urnqre_jneavat_nsgre_ovt";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:25:"8:ydg_urnqre_jneavat_obyq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:35:"8:ydg_urnqre_jneavat_arj_qvfphffvba";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:19:"8:ydg_fbegvat_beqre";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:25:"8:ydg_fbeg_arjrfg_punatrf";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:25:"8:ydg_fbeg_arjrfg_guernqf";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:25:"8:ydg_fbeg_byqrfg_guernqf";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:11:"8:ydg-gvgyr";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:13:"8:ydg-fhzznel";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:15:"8:ydg-frnepuvat";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:18:"8:ydg-ernq-zrffntr";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:26:"8:ydg-ernq-zrffntr-gbbygvc";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:14:"8:ydg-ernq-nyy";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:22:"8:ydg-ernq-nyy-gbbygvc";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:17:"8:ydg-znexrq-ernq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:23:"8:ydg-pbhag-znexrq-ernq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:16:"8:ydg-rznvy-haqb";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:21:"8:ydg-ab-arj-zrffntrf";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:18:"8:ydg-arj-zrffntrf";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:21:"8:ydg-rznvy-vasb-haqb";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:15:"8:ydg-qngr-vasb";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:25:"8:ydg-arjzrffntrf-pbagrkg";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:20:"8:ydg-guernq-perngrq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:18:"8:ydg-uvfgbel-gvzr";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:18:"8:ydg-uvfgbel-hfre";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:20:"8:ydg-uvfgbel-npgvba";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:21:"8:ydg-uvfgbel-pbzzrag";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:20:"8:ydg-uvfgbel-guernq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:26:"8:ydg-guernq-rqvgrq-nhgube";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:26:"8:ydg-guernq-rqvgrq-bguref";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:20:"8:ydg-urnqre-npgvbaf";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:20:"8:ydg_fhzznevmr_yvax";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:21:"8:ydg-fhzznevmr-vageb";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:18:"8:ydg-guernq-fcyvg";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:19:"8:ydg-fcyvg-fhpprff";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:18:"8:ydg_fcyvg_guernq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:26:"8:ydg-guernq-fcyvg-fhowrpg";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:25:"8:ydg-guernq-fcyvg-guernq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:18:"8:ydg-fcyvg-fhozvg";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:22:"8:ydg_fcyvg_onqfhowrpg";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:16:"8:ydg-ab-guernqf";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:27:"8:ydg-qryrgr-cnerag-jneavat";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:27:"8:ydg-qryrgr-cnerag-qryrgrq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:25:"8:ydg-qryrgr-ercyvrf-qbar";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:16:"8:ydg-zbirguernq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:18:"8:ydg-zrah-gevttre";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:22:"8:ydg-arjzrffntrf-sebz";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:16:"8:ydg-ubg-gbcvpf";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:15:"8:ydg-nqq-ercyl";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:23:"8:ydg_ep_arj_qvfphffvba";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:18:"8:ydg_ep_arj_ercyl";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:17:"8:evtug-ydg-fcyvg";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:17:"8:evtug-ydg-zretr";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:17:"8:evtug-ydg-ernpg";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:18:"8:ydg-guernq-zretr";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:21:"8:ydg-guernq-zretr-gb";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:18:"8:ydg_zretr_guernq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:25:"8:ydg-guernq-zretr-fbhepr";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:23:"8:ydg-guernq-zretr-qrfg";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:18:"8:ydg-zretr-fhozvg";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:19:"8:ydg-zretr-fhpprff";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:14:"8:ydg-ybt-anzr";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:16:"8:ydg-ybt-urnqre";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:21:"8:ydg-ybt-npgvba-zbir";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:22:"8:ydg-ybt-npgvba-fcyvg";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:29:"8:ydg-ybt-npgvba-zretr-npebff";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:27:"8:ydg-ybt-npgvba-zretr-qbja";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:28:"8:ydg-ybt-npgvba-fhowrpgrqvg";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:23:"8:ydg-ybt-npgvba-erfbeg";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:28:"8:ydg-cersrerapr-abgvsl-gnyx";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:30:"8:ydg-cersrerapr-jngpu-guernqf";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:11:"8:cersf-ydg";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:30:"8:ydg-cersrerapr-qvfcynl-qrcgu";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:30:"8:ydg-cersrerapr-qvfcynl-pbhag";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:34:"8:ydg-cersrerapr-phfgbz-fvtangherf";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:26:"8:ydg-rabgvs-fhowrpg-ercyl";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:30:"8:ydg-rabgvs-fhowrpg-arjguernq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:22:"8:ydg-rabgvs-arjguernq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:18:"8:ydg-rabgvs-ercyl";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:17:"8:ydg-dhbgr-vageb";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:11:"8:ydg-dhbgr";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:19:"8:ydg-frnepu-yrtraq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:18:"8:ydg-frnepu-ynory";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:19:"8:ydg-frnepu-ohggba";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:23:"8:frnepucebsvyr-guernqf";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:31:"8:frnepucebsvyr-guernqf-gbbygvc";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:18:"8:ydg-nwnk-hcqngrq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:22:"8:ydg-nwnk-hcqngr-yvax";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:25:"8:ydg-guernq-fubj-ercyvrf";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:22:"8:ydg-guernq-fubj-zber";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:21:"8:ydg-guernq-yvax-hey";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:23:"8:ydg-guernq-yvax-gvgyr";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:22:"8:ydg-guernq-yvax-pbcl";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:24:"8:ydg-fvta-abg-arprffnel";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:32:"8:ydg-znexrq-nf-ernq-cynprubyqre";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:20:"8:ydg-punatr-fhowrpg";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:18:"8:ydg-fnir-fhowrpg";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:25:"8:ydg-fnir-fhowrpg-snvyrq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:26:"8:ydg-nwnk-vainyvq-fhowrpg";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:21:"8:ydg-nwnk-ab-fhowrpg";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:32:"8:ydg-fnir-fhowrpg-reebe-haxabja";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:25:"8:ydg-pnapry-fhowrpg-rqvg";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:19:"8:ydg-qent-npgvingr";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:20:"8:ydg-qent-qebc-mbar";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:18:"8:ydg-qent-pbasvez";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:19:"8:ydg-qent-ercnerag";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:16:"8:ydg-qent-fcyvg";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:21:"8:ydg-qent-frgfbegxrl";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:15:"8:ydg-qent-ohzc";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:15:"8:ydg-qent-fnir";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:16:"8:ydg-qent-gvgyr";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:17:"8:ydg-qent-ernfba";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:18:"8:ydg-qent-fhowrpg";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:20:"8:ydg-rqvg-fvtangher";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:23:"8:ydg-cerivrj-fvtangher";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:20:"8:ydg-srrq-gvgyr-nyy";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:25:"8:ydg-srrq-gvgyr-nyy-sebz";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:28:"8:ydg-srrq-gvgyr-arj-guernqf";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:33:"8:ydg-srrq-gvgyr-arj-guernqf-sebz";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:24:"8:ydg-srrq-gvgyr-ercyvrf";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:29:"8:ydg-srrq-gvgyr-ercyvrf-sebz";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:27:"8:ydg-srrq-arj-guernq-vageb";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:22:"8:ydg-srrq-ercyl-vageb";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:24:"8:gbbygvc-cg-arjzrffntrf";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:19:"8:ydg-arjzrffntrf-a";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:17:"8:ydg_arjzrffntrf";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:23:"8:ydg_arjzrffntrf-gvgyr";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:21:"8:ydg-arjcbfg-fhzznel";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:19:"8:ydg-ercyl-fhzznel";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:28:"8:ydg-gnyxcntr-uvfgbel-gvgyr";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:31:"8:ydg-gnyxcntr-uvfgbel-fhogvgyr";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:26:"8:ydg-gnyxcntr-uvfgbel-gno";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:19:"8:erfgevpgvba-ercyl";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:23:"8:erfgevpgvba-arjguernq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:28:"8:ydg-cebgrpgrq-ercyl-guernq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:30:"8:ydg-cebgrpgrq-ercyl-gnyxcntr";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:25:"8:ydg-cebgrpgrq-arjguernq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:15:"8:ydg-rqvg-ohzc";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:23:"8:ydg-rqvg-ohzc-gbbygvc";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:30:"8:ydg-uvfgbevpnyerivfvba-reebe";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:19:"8:ydg-ercyl-fhocntr";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:14:"8:afgno-guernq";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:15:"8:afgno-fhzznel";a:3:{i:0;R:7547;i:1;R:801;i:2;R:3237;}s:20:"8:znexnfurycshy-qrfp";a:3:{i:0;s:17:"ext-markashelpful";i:1;R:801;i:2;R:3237;}s:15:"8:znu-znex-grkg";a:3:{i:0;R:7777;i:1;R:801;i:2;R:3237;}s:21:"8:znu-lbh-znexrq-grkg";a:3:{i:0;R:7777;i:1;R:801;i:2;R:3237;}s:25:"8:znu-fbzrbar-znexrq-grkg";a:3:{i:0;R:7777;i:1;R:801;i:2;R:3237;}s:20:"8:znu-haqb-znex-grkg";a:3:{i:0;R:7777;i:1;R:801;i:2;R:3237;}s:18:"8:znu-npgvba-reebe";a:3:{i:0;R:7777;i:1;R:801;i:2;R:3237;}s:14:"8:zbbqone-qrfp";a:3:{i:0;s:11:"ext-moodbar";i:1;R:801;i:2;R:3237;}s:26:"8:zbbqone-gevttre-srrqonpx";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:23:"8:zbbqone-gevttre-funer";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:25:"8:zbbqone-gevttre-rqvgvat";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:36:"8:gbbygvc-c-zbbqone-gevttre-srrqonpx";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:33:"8:gbbygvc-c-zbbqone-gevttre-funer";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:35:"8:gbbygvc-c-zbbqone-gevttre-rqvgvat";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:15:"8:zbbqone-jrrxf";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:16:"8:zbbqone-zbaguf";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:15:"8:zbbqone-lrnef";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:17:"8:zbbqone-frpbaqf";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:15:"8:zbbqone-pybfr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:24:"8:zbbqone-vageb-srrqonpx";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:21:"8:zbbqone-vageb-funer";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:23:"8:zbbqone-vageb-rqvgvat";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:26:"8:zbbqone-glcr-unccl-gvgyr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:24:"8:zbbqone-glcr-fnq-gvgyr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:29:"8:zbbqone-glcr-pbashfrq-gvgyr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:22:"8:gbbygvc-zbbqone-jung";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:21:"8:zbbqone-jung-gnetrg";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:20:"8:zbbqone-jung-ynory";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:24:"8:zbbqone-jung-pbyyncfrq";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:23:"8:zbbqone-jung-rkcnaqrq";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:27:"8:zbbqone-erfcbaq-pbyyncfrq";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:26:"8:zbbqone-erfcbaq-rkcnaqrq";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:22:"8:zbbqone-erfcbaq-grkg";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:22:"8:zbbqone-erfcbafr-nqq";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:23:"8:zbbqone-erfcbafr-qrfp";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:22:"8:zbbqone-erfcbafr-oga";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:22:"8:zbbqone-jung-pbagrag";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:19:"8:zbbqone-jung-yvax";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:17:"8:zbbqone-cevinpl";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:22:"8:zbbqone-cevinpl-yvax";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:28:"8:zbbqone-cevinpl-yvax-gvgyr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:24:"8:zbbqone-soq-yvax-gvgyr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:22:"8:zbbqone-qvfnoyr-yvax";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:20:"8:zbbqone-sbez-gvgyr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:19:"8:zbbqone-sbez-abgr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:27:"8:zbbqone-sbez-abgr-qlanzvp";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:21:"8:zbbqone-sbez-fhozvg";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:26:"8:zbbqone-sbez-cbyvpl-grkg";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:27:"8:zbbqone-sbez-cbyvpl-ynory";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:23:"8:zbbqone-ybnqvat-gvgyr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:23:"8:zbbqone-fhpprff-gvgyr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:21:"8:zbbqone-reebe-gvgyr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:26:"8:zbbqone-ybnqvat-fhogvgyr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:26:"8:zbbqone-fhpprff-fhogvgyr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:24:"8:zbbqone-reebe-fhogvgyr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:23:"8:zbbqone-oybpxrq-gvgyr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:26:"8:zbbqone-oybpxrq-fhogvgyr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:27:"8:zbbqone-engryvzvgrq-gvgyr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:30:"8:zbbqone-engryvzvgrq-fhogvgyr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:21:"8:zbbqone-nohfr-gvgyr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:24:"8:zbbqone-nohfr-fhogvgyr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:21:"8:zbbqone-rznvy-gvgyr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:21:"8:zbbqone-rznvy-vachg";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:20:"8:zbbqone-rznvy-qrfp";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:22:"8:zbbqone-rznvy-fhozvg";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:24:"8:zbbqone-hcqngvat-gvgyr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:27:"8:zbbqone-hcqngvat-fhogvgyr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:29:"8:zbbqone-rznvy-pbasvez-gvgyr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:28:"8:zbbqone-rznvy-pbasvez-qrfp";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:35:"8:zbbqone-rznvy-erfraq-pbasvezngvba";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:22:"8:zbbqone-rznvy-bcgbhg";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:23:"8:zbbqone-gbbygvc-gvgyr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:20:"8:evtug-zbbqone-ivrj";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:21:"8:evtug-zbbqone-nqzva";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:21:"8:zbbqone-nqzva-gvgyr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:21:"8:zbbqone-nqzva-vageb";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:21:"8:zbbqone-nqzva-rzcgl";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:19:"8:zbbqone-urnqre-vq";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:26:"8:zbbqone-urnqre-gvzrfgnzc";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:21:"8:zbbqone-urnqre-glcr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:21:"8:zbbqone-urnqre-cntr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:25:"8:zbbqone-urnqre-hfreglcr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:21:"8:zbbqone-urnqre-hfre";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:25:"8:zbbqone-urnqre-rqvgzbqr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:23:"8:zbbqone-urnqre-ohpxrg";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:23:"8:zbbqone-urnqre-flfgrz";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:23:"8:zbbqone-urnqre-ybpnyr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:26:"8:zbbqone-urnqre-hfrentrag";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:24:"8:zbbqone-urnqre-pbzzrag";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:31:"8:zbbqone-urnqre-hfre-rqvgpbhag";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:26:"8:zbbqone-urnqre-anzrfcnpr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:25:"8:zbbqone-urnqre-bja-gnyx";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:24:"8:zbbqone-srrqonpx-gvgyr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:30:"8:zbbqone-srrqonpx-qrfpevcgvba";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:33:"8:zbbqone-srrqonpx-erfcbafr-gvgyr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:28:"8:zbbqone-srrqonpx-ivrj-yvax";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:26:"8:zbbqone-srrqonpx-svygref";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:31:"8:zbbqone-srrqonpx-svygref-glcr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:37:"8:zbbqone-srrqonpx-svygref-glcr-unccl";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:40:"8:zbbqone-srrqonpx-svygref-glcr-pbashfrq";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:35:"8:zbbqone-srrqonpx-svygref-glcr-fnq";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:35:"8:zbbqone-srrqonpx-svygref-hfreanzr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:38:"8:zbbqone-srrqonpx-svygref-zl-erfcbafr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:42:"8:zbbqone-srrqonpx-svygref-fubj-hanafjrerq";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:33:"8:zbbqone-srrqonpx-svygref-ohggba";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:25:"8:zbbqone-srrqonpx-jungvf";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:28:"8:zbbqone-srrqonpx-creznyvax";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:28:"8:zbbqone-srrqonpx-aberfhygf";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:23:"8:zbbqone-srrqonpx-zber";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:25:"8:zbbqone-srrqonpx-abzber";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:24:"8:zbbqone-srrqonpx-arjre";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:24:"8:zbbqone-srrqonpx-byqre";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:28:"8:zbbqone-srrqonpx-nwnkreebe";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:36:"8:zbbqone-srrqonpx-ybnq-erpbeq-reebe";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:21:"8:zbbqone-hfre-uvqqra";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:24:"8:zbbqone-pbzzrag-uvqqra";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:23:"8:zbbqone-srrqonpx-fubj";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:23:"8:zbbqone-srrqonpx-uvqr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:33:"8:zbbqone-srrqonpx-npgvba-pbasvez";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:32:"8:zbbqone-srrqonpx-npgvba-pnapry";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:23:"8:zbbqone-uvqqra-sbbgre";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:35:"8:zbbqone-uvqqra-sbbgre-jvgubhg-ybt";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:26:"8:zbbqone-srrqonpx-erfgber";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:21:"8:zbbqone-npgvba-vgrz";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:23:"8:zbbqone-npgvba-ernfba";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:32:"8:zbbqone-npgvba-ernfba-erdhverq";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:21:"8:zbbqone-uvqr-urnqre";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:20:"8:zbbqone-uvqr-vageb";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:24:"8:zbbqone-erfgber-urnqre";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:23:"8:zbbqone-erfgber-vageb";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:22:"8:zbbqone-vainyvq-vgrz";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:31:"8:zbbqone-srrqonpx-npgvba-reebe";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:35:"8:zbbqone-srrqonpx-erfcbafr-fhzznel";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:43:"8:zbbqone-srrqonpx-erfcbafr-urycshy-fhzznel";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:31:"8:zbbqone-srrqonpx-rqvg-fhzznel";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:39:"8:zbbqone-srrqonpx-gbc-erfcbaqref-gvgyr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:20:"8:zbbqone-glcr-unccl";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:18:"8:zbbqone-glcr-fnq";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:23:"8:zbbqone-glcr-pbashfrq";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:20:"8:zbbqone-glcr-fgngf";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:25:"8:zbbqone-hfre-nabalzvmrq";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:17:"8:zbbqone-hfre-vc";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:19:"8:zbbqone-hfre-hfre";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:18:"8:zbbqone-ybt-anzr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:20:"8:zbbqone-ybt-urnqre";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:18:"8:zbbqone-ybt-uvqr";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:22:"8:zbbqone-ybt-srrqonpx";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:21:"8:zbbqone-ybt-erfgber";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:20:"8:zbbqone-ybt-ernfba";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:24:"8:zbbqone-erfcbafr-grezf";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:23:"8:zbbqone-erfcbafr-yvax";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:22:"8:zbbqone-erfcbafr-hey";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:20:"8:erfcbafr-onpx-grkg";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:23:"8:erfcbafr-cerivrj-grkg";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:27:"8:erfcbafr-nwnk-npgvba-urnq";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:27:"8:erfcbafr-nwnk-npgvba-obql";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:28:"8:erfcbafr-nwnk-fhpprff-urnq";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:28:"8:erfcbafr-nwnk-fhpprff-obql";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:26:"8:erfcbafr-nwnk-reebe-urnq";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:26:"8:erfcbafr-nwnk-reebe-obql";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:35:"8:erfcbafr-pbapheerapl-abgvsvpngvba";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:24:"8:zbbqone-rabgvs-fhowrpg";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:21:"8:zbbqone-rabgvs-obql";a:3:{i:0;R:7784;i:1;R:801;i:2;R:3237;}s:15:"8:zjfrnepu-qrfp";a:3:{i:0;s:12:"ext-mwsearch";i:1;R:801;i:2;R:3237;}s:14:"8:anenlnz-qrfp";a:3:{i:0;s:11:"ext-narayam";i:1;R:801;i:2;R:3237;}s:20:"8:anenlnz-gbttyr-vzr";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:14:"8:anenlnz-zrah";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:22:"8:anenlnz-zrah-gbbygvc";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:14:"8:anenlnz-uryc";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:19:"8:anenlnz-uryc-cntr";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:26:"8:anenlnz-purpxobk-gbbygvc";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:27:"8:anenlnz-ranoyr-cersrerapr";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:19:"8:anenlnz-zber-vzrf";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:13:"8:anenlnz-nue";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:22:"8:anenlnz-nue-vafpevcg";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:12:"8:anenlnz-nz";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:12:"8:anenlnz-nf";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:17:"8:anenlnz-nf-nieb";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:20:"8:anenlnz-nf-obeaban";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:21:"8:anenlnz-nf-vafpevcg";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:18:"8:anenlnz-ore-gsat";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:22:"8:anenlnz-oek-vafpevcg";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:12:"8:anenlnz-rb";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:12:"8:anenlnz-uv";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:21:"8:anenlnz-uv-vafpevcg";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:12:"8:anenlnz-xa";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:21:"8:anenlnz-xa-vafpevcg";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:12:"8:anenlnz-zy";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:21:"8:anenlnz-zy-vafpevcg";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:12:"8:anenlnz-ze";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:21:"8:anenlnz-ze-vafpevcg";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:12:"8:anenlnz-ar";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:22:"8:anenlnz-arj-vafpevcg";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:13:"8:anenlnz-arj";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:21:"8:anenlnz-ar-vafpevcg";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:12:"8:anenlnz-be";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:20:"8:anenlnz-be-yrxunav";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:21:"8:anenlnz-be-vafpevcg";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:12:"8:anenlnz-cn";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:21:"8:anenlnz-cn-cubargvp";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:21:"8:anenlnz-cn-vafpevcg";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:12:"8:anenlnz-fn";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:21:"8:anenlnz-fn-vafpevcg";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:21:"8:anenlnz-fv-fvatyvfu";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:23:"8:anenlnz-fv-jvwrfrxnen";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:15:"8:anenlnz-gn-99";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:21:"8:anenlnz-gn-vafpevcg";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:12:"8:anenlnz-gn";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:19:"8:anenlnz-gn-onzvav";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:13:"8:anenlnz-gpl";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:12:"8:anenlnz-gr";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:21:"8:anenlnz-gr-vafpevcg";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:13:"8:anenlnz-oub";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:22:"8:anenlnz-oub-vafpevcg";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:17:"8:anenlnz-oa-nieb";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:21:"8:anenlnz-oa-vafpevcg";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:16:"8:anenlnz-oa-axo";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:12:"8:anenlnz-he";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:12:"8:anenlnz-qr";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:12:"8:anenlnz-th";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:21:"8:anenlnz-th-vafpevcg";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:21:"8:anenlnz-eh-fgnaqneq";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:22:"8:anenlnz-fnu-fgnaqneq";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:22:"8:anenlnz-uar-vafpevcg";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:22:"8:anenlnz-znv-vafpevcg";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:18:"8:anenlnz-tbz-qrin";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:27:"8:anenlnz-tbz-qrin-vafpevcg";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:34:"8:anenlnz-ur-fgnaqneq-2011-rkgbayl";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:26:"8:anenlnz-ur-fgnaqneq-2011";a:3:{i:0;R:7943;i:1;R:801;i:2;R:3237;}s:6:"8:ahxr";a:3:{i:0;s:8:"ext-nuke";i:1;R:801;i:2;R:3237;}s:13:"8:npgvba-ahxr";a:3:{i:0;R:8009;i:1;R:801;i:2;R:3237;}s:11:"8:ahxr-qrfp";a:3:{i:0;R:8009;i:1;R:801;i:2;R:3237;}s:14:"8:ahxr-abcntrf";a:3:{i:0;R:8009;i:1;R:801;i:2;R:3237;}s:11:"8:ahxr-yvfg";a:3:{i:0;R:8009;i:1;R:801;i:2;R:3237;}s:20:"8:ahxr-yvfg-zhygvcyr";a:3:{i:0;R:8009;i:1;R:801;i:2;R:3237;}s:20:"8:ahxr-qrsnhygernfba";a:3:{i:0;R:8009;i:1;R:801;i:2;R:3237;}s:21:"8:ahxr-zhygvcyrcrbcyr";a:3:{i:0;R:8009;i:1;R:801;i:2;R:3237;}s:12:"8:ahxr-gbbyf";a:3:{i:0;R:8009;i:1;R:801;i:2;R:3237;}s:18:"8:ahxr-fhozvg-hfre";a:3:{i:0;R:8009;i:1;R:801;i:2;R:3237;}s:20:"8:ahxr-fhozvg-qryrgr";a:3:{i:0;R:8009;i:1;R:801;i:2;R:3237;}s:12:"8:evtug-ahxr";a:3:{i:0;R:8009;i:1;R:801;i:2;R:3237;}s:13:"8:ahxr-fryrpg";a:3:{i:0;R:8009;i:1;R:801;i:2;R:3237;}s:15:"8:ahxr-hfrebevc";a:3:{i:0;R:8009;i:1;R:801;i:2;R:3237;}s:15:"8:ahxr-znkcntrf";a:3:{i:0;R:8009;i:1;R:801;i:2;R:3237;}s:13:"8:ahxr-rqvgol";a:3:{i:0;R:8009;i:1;R:801;i:2;R:3237;}s:14:"8:ahxr-qryrgrq";a:3:{i:0;R:8009;i:1;R:801;i:2;R:3237;}s:18:"8:ahxr-abg-qryrgrq";a:3:{i:0;R:8009;i:1;R:801;i:2;R:3237;}s:18:"8:ahxr-qryrgr-zber";a:3:{i:0;R:8009;i:1;R:801;i:2;R:3237;}s:14:"8:ahxr-cnggrea";a:3:{i:0;R:8009;i:1;R:801;i:2;R:3237;}s:21:"8:ahxr-abcntrf-tybony";a:3:{i:0;R:8009;i:1;R:801;i:2;R:3237;}s:18:"8:ahxr-ivrjpunatrf";a:3:{i:0;R:8009;i:1;R:801;i:2;R:3237;}s:10:"8:bnv-qrfp";a:3:{i:0;s:7:"ext-oai";i:1;R:801;i:2;R:3237;}s:15:"8:bnvercbfvgbel";a:3:{i:0;R:8032;i:1;R:801;i:2;R:3237;}s:20:"8:bcrafrnepukzy-qrfp";a:3:{i:0;s:17:"ext-opensearchxml";i:1;R:801;i:2;R:3237;}s:23:"8:bcrafgnpxznantre-qrfp";a:3:{i:0;s:20:"ext-openstackmanager";i:1;R:801;i:2;R:3237;}s:18:"8:bcrafgnpxznantre";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:27:"8:bcrafgnpxznantre-vafgnapr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:24:"8:bcrafgnpxznantre-gvgyr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:34:"8:bcrafgnpxznantre-onqerfbhepranzr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:25:"8:fcrpvnycntrf-tebhc-abin";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:13:"8:abinnqqerff";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:12:"8:abinqbznva";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:14:"8:abinvafgnapr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:9:"8:abinxrl";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:13:"8:abincebwrpg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:19:"8:abinfrphevgltebhc";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:10:"8:abinebyr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:12:"8:abinibyhzr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:12:"8:abinfhqbre";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:17:"8:abinchccrgtebhc";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:29:"8:bcrafgnpxznantre-abinqbznva";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:31:"8:bcrafgnpxznantre-abinvafgnapr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:26:"8:bcrafgnpxznantre-abinxrl";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:30:"8:bcrafgnpxznantre-abincebwrpg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:25:"8:bcrafgnpxznantre-qryrgr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:28:"8:bcrafgnpxznantre-pbasvther";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:25:"8:bcrafgnpxznantre-zbqvsl";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:25:"8:bcrafgnpxznantre-eranzr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:25:"8:bcrafgnpxznantre-erobbg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:26:"8:bcrafgnpxznantre-npgvbaf";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:30:"8:bcrafgnpxznantre-abgybttrqva";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:33:"8:bcrafgnpxznantre-zhfgorybttrqva";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:29:"8:bcrafgnpxznantre-ababinperq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:41:"8:bcrafgnpxznantre-ababinperq-nqzvaperngr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:28:"8:bcrafgnpxznantre-abnppbhag";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:29:"8:bcrafgnpxznantre-abnppbhag2";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:38:"8:bcrafgnpxznantre-abarkvfgragerfbhepr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:31:"8:bcrafgnpxznantre-perngrqbznva";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:31:"8:bcrafgnpxznantre-qryrgrqbznva";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:39:"8:bcrafgnpxznantre-qryrgrqbznva-pbasvez";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:36:"8:bcrafgnpxznantre-abinqbznva-qbznva";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:37:"8:bcrafgnpxznantre-perngrqbznvasnvyrq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:32:"8:bcrafgnpxznantre-perngrqqbznva";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:29:"8:bcrafgnpxznantre-qbznvayvfg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:33:"8:bcrafgnpxznantre-onpxqbznvayvfg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:38:"8:bcrafgnpxznantre-nqqnqqvgvbanyqbznva";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:32:"8:bcrafgnpxznantre-qryrgrqqbznva";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:36:"8:bcrafgnpxznantre-snvyrqryrgrqbznva";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:29:"8:bcrafgnpxznantre-qbznvaanzr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:23:"8:bcrafgnpxznantre-sdqa";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:27:"8:bcrafgnpxznantre-ybpngvba";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:32:"8:bcrafgnpxznantre-ybpngvba-uryc";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:40:"8:bcrafgnpxznantre-abinvafgnapr-vafgnapr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:36:"8:bcrafgnpxznantre-pbasvthervafgnapr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:34:"8:bcrafgnpxznantre-abarkvfgnagubfg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:28:"8:bcrafgnpxznantre-qafqbznva";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:32:"8:bcrafgnpxznantre-chccrgpynffrf";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:36:"8:bcrafgnpxznantre-abinvafgnapr-vasb";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:42:"8:bcrafgnpxznantre-abinvafgnapr-chccrgvasb";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:39:"8:bcrafgnpxznantre-abinvafgnapr-cebwrpg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:38:"8:bcrafgnpxznantre-abinvafgnapr-tybony";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:33:"8:bcrafgnpxznantre-qryrgrvafgnapr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:41:"8:bcrafgnpxznantre-qryrgrvafgnaprdhrfgvba";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:31:"8:bcrafgnpxznantre-vafgnapryvfg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:31:"8:bcrafgnpxznantre-vafgnapranzr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:29:"8:bcrafgnpxznantre-vafgnaprvq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:32:"8:bcrafgnpxznantre-vafgnaprfgngr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:31:"8:bcrafgnpxznantre-vafgnaprglcr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:29:"8:bcrafgnpxznantre-vafgnaprvc";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:35:"8:bcrafgnpxznantre-vafgnaprchoyvpvc";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:33:"8:bcrafgnpxznantre-frphevgltebhcf";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:35:"8:bcrafgnpxznantre-ninvynovyvglmbar";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:26:"8:bcrafgnpxznantre-vzntrvq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:28:"8:bcrafgnpxznantre-vzntrglcr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:36:"8:bcrafgnpxznantre-vafgnaprglcrynory";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:33:"8:bcrafgnpxznantre-erobbgvafgnapr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:41:"8:bcrafgnpxznantre-erobbgvafgnaprdhrfgvba";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:35:"8:bcrafgnpxznantre-erobbgrqvafgnapr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:39:"8:bcrafgnpxznantre-erobbgvafgnaprsnvyrq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:29:"8:bcrafgnpxznantre-ynhapugvzr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:33:"8:bcrafgnpxznantre-perngrvafgnapr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:46:"8:bcrafgnpxznantre-perngrvafgnaprchccrgjneavat";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:32:"8:bcrafgnpxznantre-vainyvqqbznva";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:34:"8:bcrafgnpxznantre-perngrqvafgnapr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:35:"8:bcrafgnpxznantre-perngrsnvyrqyqnc";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:39:"8:bcrafgnpxznantre-perngrvafgnaprsnvyrq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:35:"8:bcrafgnpxznantre-onpxvafgnapryvfg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:34:"8:bcrafgnpxznantre-qryrgrqvafgnapr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:44:"8:bcrafgnpxznantre-qryrgrqvafgnapr-snvyrqqaf";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:35:"8:bcrafgnpxznantre-zbqvsvrqvafgnapr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:39:"8:bcrafgnpxznantre-zbqvslvafgnaprsnvyrq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:39:"8:bcrafgnpxznantre-qryrgrvafgnaprsnvyrq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:32:"8:bcrafgnpxznantre-pbafbyrbhgchg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:35:"8:bcrafgnpxznantre-trgpbafbyrbhgchg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:31:"8:bcrafgnpxznantre-perngribyhzr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:29:"8:bcrafgnpxznantre-ibyhzranzr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:27:"8:bcrafgnpxznantre-ibyhzrvq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:36:"8:bcrafgnpxznantre-ibyhzrqrfpevcgvba";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:30:"8:bcrafgnpxznantre-ibyhzrfgngr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:43:"8:bcrafgnpxznantre-ibyhzrnggnpuzragvafgnapr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:41:"8:bcrafgnpxznantre-ibyhzrnggnpuzragqrivpr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:29:"8:bcrafgnpxznantre-ibyhzrfvmr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:41:"8:bcrafgnpxznantre-ibyhzrnggnpuzragfgnghf";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:45:"8:bcrafgnpxznantre-ibyhzrqryrgrbaibyhzrqryrgr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:37:"8:bcrafgnpxznantre-ibyhzrperngvbagvzr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:25:"8:bcrafgnpxznantre-nggnpu";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:25:"8:bcrafgnpxznantre-qrgnpu";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:31:"8:bcrafgnpxznantre-qryrgribyhzr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:39:"8:bcrafgnpxznantre-qryrgribyhzrdhrfgvba";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:29:"8:bcrafgnpxznantre-ibyhzryvfg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:36:"8:bcrafgnpxznantre-abinibyhzr-ibyhzr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:34:"8:bcrafgnpxznantre-abinibyhzr-vasb";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:32:"8:bcrafgnpxznantre-perngrqibyhzr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:38:"8:bcrafgnpxznantre-perngrribyhzrsnvyrq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:32:"8:bcrafgnpxznantre-qryrgrqibyhzr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:37:"8:bcrafgnpxznantre-qryrgribyhzrsnvyrq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:33:"8:bcrafgnpxznantre-onpxibyhzryvfg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:31:"8:bcrafgnpxznantre-nggnpuibyhzr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:25:"8:bcrafgnpxznantre-qrivpr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:33:"8:bcrafgnpxznantre-nggnpurqibyhzr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:37:"8:bcrafgnpxznantre-nggnpuibyhzrsnvyrq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:31:"8:bcrafgnpxznantre-qrgnpuibyhzr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:34:"8:bcrafgnpxznantre-sbeprqrgnpuzrag";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:38:"8:bcrafgnpxznantre-sbeprqrgnpuzraguryc";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:33:"8:bcrafgnpxznantre-qrgnpurqibyhzr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:37:"8:bcrafgnpxznantre-qrgnpuibyhzrsnvyrq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:32:"8:bcrafgnpxznantre-abinchoyvpxrl";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:30:"8:bcrafgnpxznantre-abinxrl-xrl";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:28:"8:bcrafgnpxznantre-qryrgrxrl";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:35:"8:bcrafgnpxznantre-qryrgrxrlpbasvez";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:26:"8:bcrafgnpxznantre-xrlyvfg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:23:"8:bcrafgnpxznantre-anzr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:30:"8:bcrafgnpxznantre-svatrecevag";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:23:"8:bcrafgnpxznantre-xrlf";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:33:"8:bcrafgnpxznantre-vainyvqxrlcnve";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:38:"8:bcrafgnpxznantre-xrlcnvevzcbegsnvyrq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:34:"8:bcrafgnpxznantre-xrlcnvevzcbegrq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:45:"8:bcrafgnpxznantre-xrlcnvevzcbegrqsvatrecevag";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:37:"8:bcrafgnpxznantre-xrlcnvesbezngjebat";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:41:"8:bcrafgnpxznantre-xrlcnvesbezngpbairegrq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:30:"8:bcrafgnpxznantre-onpxxrlyvfg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:35:"8:bcrafgnpxznantre-nqqnqqvgvbanyxrl";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:29:"8:bcrafgnpxznantre-qryrgrqxrl";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:35:"8:bcrafgnpxznantre-qryrgrqxrlsnvyrq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:28:"8:bcrafgnpxznantre-nqqzrzore";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:31:"8:bcrafgnpxznantre-erzbirzrzore";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:39:"8:bcrafgnpxznantre-erzbircebwrpgpbasvez";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:32:"8:bcrafgnpxznantre-perngrcebwrpg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:30:"8:bcrafgnpxznantre-cebwrpganzr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:26:"8:bcrafgnpxznantre-zrzoref";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:25:"8:bcrafgnpxznantre-zrzore";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:25:"8:bcrafgnpxznantre-npgvba";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:38:"8:bcrafgnpxznantre-perngrcebwrpgsnvyrq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:33:"8:bcrafgnpxznantre-perngrqcebwrpg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:30:"8:bcrafgnpxznantre-cebwrpgyvfg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:34:"8:bcrafgnpxznantre-onpxcebwrpgyvfg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:39:"8:bcrafgnpxznantre-nqqnqqvgvbanycebwrpg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:32:"8:bcrafgnpxznantre-qryrgrcebwrpg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:33:"8:bcrafgnpxznantre-qryrgrqcebwrpg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:38:"8:bcrafgnpxznantre-qryrgrcebwrpgsnvyrq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:26:"8:bcrafgnpxznantre-nqqrqgb";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:30:"8:bcrafgnpxznantre-snvyrqgbnqq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:30:"8:bcrafgnpxznantre-erzbirqsebz";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:33:"8:bcrafgnpxznantre-snvyrqgberzbir";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:38:"8:bcrafgnpxznantre-abincebwrpg-cebwrpg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:50:"8:bcrafgnpxznantre-abincebwrpgsvygre-cebwrpgsvygre";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:27:"8:bcrafgnpxznantre-cebwrpgf";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:30:"8:bcrafgnpxznantre-frgcebwrpgf";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:35:"8:bcrafgnpxznantre-frgcebwrpgsvygre";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:32:"8:bcrafgnpxznantre-gbttyrcebwrpg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:24:"8:bcrafgnpxznantre-ebyrf";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:27:"8:bcrafgnpxznantre-ebyranzr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:35:"8:bcrafgnpxznantre-erzbirebyrzrzore";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:32:"8:bcrafgnpxznantre-nqqebyrzrzore";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:27:"8:bcrafgnpxznantre-ebyryvfg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:33:"8:bcrafgnpxznantre-abzrzorefgbnqq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:36:"8:bcrafgnpxznantre-abzrzorefgberzbir";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:32:"8:bcrafgnpxznantre-abinebyr-ebyr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:32:"8:bcrafgnpxznantre-abinebyr-vasb";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:35:"8:bcrafgnpxznantre-furyynppbhaganzr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:39:"8:bcrafgnpxznantre-furyynppbhaganzruryc";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:30:"8:bcrafgnpxznantre-nqqerffyvfg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:26:"8:bcrafgnpxznantre-nqqerff";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:34:"8:bcrafgnpxznantre-nyybpngrnqqerff";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:33:"8:bcrafgnpxznantre-eryrnfrnqqerff";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:35:"8:bcrafgnpxznantre-nffbpvngrnqqerff";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:37:"8:bcrafgnpxznantre-ernffbpvngrnqqerff";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:38:"8:bcrafgnpxznantre-qvfnffbpvngrnqqerff";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:40:"8:bcrafgnpxznantre-nyybpngrnqqerffsnvyrq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:35:"8:bcrafgnpxznantre-nyybpngrqnqqerff";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:34:"8:bcrafgnpxznantre-onpxnqqerffyvfg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:42:"8:bcrafgnpxznantre-nyybpngrnqqerff-pbasvez";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:34:"8:bcrafgnpxznantre-eryrnfrqnqqerff";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:39:"8:bcrafgnpxznantre-eryrnfrnqqerffsnvyrq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:39:"8:bcrafgnpxznantre-pnaabgeryrnfrnqqerff";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:36:"8:bcrafgnpxznantre-nffbpvngrqnqqerff";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:41:"8:bcrafgnpxznantre-nffbpvngrnqqerffsnvyrq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:39:"8:bcrafgnpxznantre-qvfnffbpvngrqnqqerff";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:44:"8:bcrafgnpxznantre-qvfnffbpvngrnqqerffsnvyrq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:46:"8:bcrafgnpxznantre-qvfnffbpvngrnqqerff-pbasvez";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:41:"8:bcrafgnpxznantre-eryrnfrnqqerff-pbasvez";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:33:"8:bcrafgnpxznantre-vainyvqnqqerff";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:43:"8:bcrafgnpxznantre-vainyvqnqqerffsbecebwrpg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:28:"8:bcrafgnpxznantre-nqqrqubfg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:32:"8:bcrafgnpxznantre-nqqubfgsnvyrq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:27:"8:bcrafgnpxznantre-ubfganzr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:28:"8:bcrafgnpxznantre-ubfganzrf";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:26:"8:bcrafgnpxznantre-nqqubfg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:29:"8:bcrafgnpxznantre-erzbirubfg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:36:"8:bcrafgnpxznantre-erzbirubfg-npgvba";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:37:"8:bcrafgnpxznantre-erzbirubfg-pbasvez";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:30:"8:bcrafgnpxznantre-erzbirqubfg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:35:"8:bcrafgnpxznantre-erzbirubfgsnvyrq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:34:"8:bcrafgnpxznantre-abarkvfgragubfg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:35:"8:bcrafgnpxznantre-arrqflfnqzvaebyr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:36:"8:bcrafgnpxznantre-arrqflfnqzvaebyr2";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:35:"8:bcrafgnpxznantre-arrqargnqzvaebyr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:36:"8:bcrafgnpxznantre-arrqargnqzvaebyr2";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:37:"8:bcrafgnpxznantre-arrqpybhqnqzvaebyr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:38:"8:bcrafgnpxznantre-arrqpybhqnqzvaebyr2";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:38:"8:bcrafgnpxznantre-perngrfrphevgltebhc";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:36:"8:bcrafgnpxznantre-frphevgltebhcanzr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:43:"8:bcrafgnpxznantre-frphevgltebhcqrfpevcgvba";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:41:"8:bcrafgnpxznantre-pbasvtherfrphevgltebhc";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:38:"8:bcrafgnpxznantre-qryrgrfrphevgltebhc";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:46:"8:bcrafgnpxznantre-qryrgrfrphevgltebhc-pbasvez";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:36:"8:bcrafgnpxznantre-frphevgltebhcyvfg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:36:"8:bcrafgnpxznantre-frphevgltebhcehyr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:41:"8:bcrafgnpxznantre-abinfrphevgltebhc-ehyr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:47:"8:bcrafgnpxznantre-abinfrphevgltebhc-fvatyrehyr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:42:"8:bcrafgnpxznantre-abinfrphevgltebhc-tebhc";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:52:"8:bcrafgnpxznantre-frphevgltebhcehyr-tebhc-rkpyhfvir";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:43:"8:bcrafgnpxznantre-frphevgltebhcehyr-gbcbeg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:45:"8:bcrafgnpxznantre-frphevgltebhcehyr-sebzcbeg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:45:"8:bcrafgnpxznantre-frphevgltebhcehyr-cebgbpby";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:45:"8:bcrafgnpxznantre-frphevgltebhcehyr-vcenatrf";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:43:"8:bcrafgnpxznantre-frphevgltebhcehyr-tebhcf";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:41:"8:bcrafgnpxznantre-perngrarjfrphevgltebhc";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:33:"8:bcrafgnpxznantre-nqqehyr-npgvba";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:36:"8:bcrafgnpxznantre-erzbirehyr-npgvba";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:32:"8:bcrafgnpxznantre-zbqvsvrqtebhc";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:36:"8:bcrafgnpxznantre-zbqvsltebhcsnvyrq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:35:"8:bcrafgnpxznantre-abarkvfgnagtebhc";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:40:"8:bcrafgnpxznantre-onpxfrphevgltebhcyvfg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:39:"8:bcrafgnpxznantre-perngrqfrphevgltebhc";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:44:"8:bcrafgnpxznantre-perngrfrphevgltebhcsnvyrq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:43:"8:bcrafgnpxznantre-abarkvfgnagfrphevgltebhc";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:39:"8:bcrafgnpxznantre-qryrgrqfrphevgltebhc";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:44:"8:bcrafgnpxznantre-qryrgrfrphevgltebhcsnvyrq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:29:"8:bcrafgnpxznantre-erzbirehyr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:37:"8:bcrafgnpxznantre-erzbirehyr-pbasvez";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:30:"8:bcrafgnpxznantre-erzbirqehyr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:35:"8:bcrafgnpxznantre-erzbirehyrsnvyrq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:26:"8:bcrafgnpxznantre-nqqehyr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:43:"8:bcrafgnpxznantre-frphevgltebhcehyr-enatrf";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:48:"8:bcrafgnpxznantre-frphevgltebhcehyr-enatrf-uryc";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:48:"8:bcrafgnpxznantre-frphevgltebhcehyr-tebhcf-uryc";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:28:"8:bcrafgnpxznantre-nqqrqehyr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:32:"8:bcrafgnpxznantre-nqqehyrsnvyrq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:31:"8:bcrafgnpxznantre-perngrfhqbre";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:36:"8:bcrafgnpxznantre-abinfhqbre-fhqbre";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:34:"8:bcrafgnpxznantre-abinfhqbre-vasb";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:29:"8:bcrafgnpxznantre-fhqbreanzr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:33:"8:bcrafgnpxznantre-pbzznqryvzvgre";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:30:"8:bcrafgnpxznantre-fhqbrehfref";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:30:"8:bcrafgnpxznantre-fhqbreubfgf";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:33:"8:bcrafgnpxznantre-fhqbrepbzznaqf";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:32:"8:bcrafgnpxznantre-fhqbrebcgvbaf";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:31:"8:bcrafgnpxznantre-qryrgrfhqbre";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:39:"8:bcrafgnpxznantre-qryrgrfhqbre-pbasvez";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:37:"8:bcrafgnpxznantre-perngrfhqbresnvyrq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:32:"8:bcrafgnpxznantre-perngrqfhqbre";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:33:"8:bcrafgnpxznantre-onpxfhqbreyvfg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:38:"8:bcrafgnpxznantre-nqqnqqvgvbanyfhqbre";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:32:"8:bcrafgnpxznantre-qryrgrqfhqbre";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:37:"8:bcrafgnpxznantre-snvyrqryrgrqfhqbre";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:29:"8:bcrafgnpxznantre-fhqbreyvfg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:31:"8:bcrafgnpxznantre-zbqvslfhqbre";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:37:"8:bcrafgnpxznantre-zbqvslfhqbresnvyrq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:33:"8:bcrafgnpxznantre-zbqvsvrqfhqbre";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:36:"8:bcrafgnpxznantre-abarkvfgnagfhqbre";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:34:"8:bcrafgnpxznantre-abinchccrgtebhc";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:34:"8:bcrafgnpxznantre-chccrgtebhcyvfg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:36:"8:bcrafgnpxznantre-chccrgnyycebwrpgf";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:36:"8:bcrafgnpxznantre-perngrchccrgtebhc";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:37:"8:bcrafgnpxznantre-perngrqchccrgtebhc";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:42:"8:bcrafgnpxznantre-perngrchccrgtebhcsnvyrq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:38:"8:bcrafgnpxznantre-onpxchccrgtebhcyvfg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:33:"8:bcrafgnpxznantre-nqqchccrgpynff";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:35:"8:bcrafgnpxznantre-nqqrqchccrgpynff";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:41:"8:bcrafgnpxznantre-snvyrqgbnqqchccrgpynff";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:34:"8:bcrafgnpxznantre-chccrgpynffanzr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:43:"8:bcrafgnpxznantre-erzbirchccrgtebhcpbasvez";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:36:"8:bcrafgnpxznantre-qryrgrchccrgtebhc";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:37:"8:bcrafgnpxznantre-qryrgrqchccrgtebhc";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:42:"8:bcrafgnpxznantre-qryrgrchccrgtebhcsnvyrq";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:36:"8:bcrafgnpxznantre-zbqvslchccrgtebhc";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:38:"8:bcrafgnpxznantre-zbqvsvrqchccrgtebhc";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:44:"8:bcrafgnpxznantre-snvyrqgbzbqvslchccrgtebhc";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:29:"8:bcrafgnpxznantre-chccrginef";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:31:"8:bcrafgnpxznantre-nqqchccrgine";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:32:"8:bcrafgnpxznantre-chccrgineanzr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:36:"8:bcrafgnpxznantre-chccrginecbfvgvba";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:33:"8:bcrafgnpxznantre-nqqrqchccrgine";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:39:"8:bcrafgnpxznantre-snvyrqgbnqqchccrgine";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:34:"8:bcrafgnpxznantre-zbqvslchccrgine";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:36:"8:bcrafgnpxznantre-zbqvsvrqchccrgine";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:42:"8:bcrafgnpxznantre-snvyrqgbzbqvslchccrgine";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:34:"8:bcrafgnpxznantre-chccrgtebhcanzr";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:38:"8:bcrafgnpxznantre-chccrgtebhccbfvgvba";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:36:"8:bcrafgnpxznantre-zbqvslchccrgpynff";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:44:"8:bcrafgnpxznantre-snvyrqgbzbqvslchccrgpynff";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:38:"8:bcrafgnpxznantre-chccrgpynffcbfvgvba";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:30:"8:bcrafgnpxznantre-chccrgtebhc";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:38:"8:bcrafgnpxznantre-zbqvsvrqchccrgpynff";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:36:"8:bcrafgnpxznantre-erzbirchccrgpynff";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:43:"8:bcrafgnpxznantre-erzbirchccrgpynffpbasvez";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:37:"8:bcrafgnpxznantre-qryrgrqchccrgpynff";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:44:"8:bcrafgnpxznantre-snvyrqgbqryrgrchccrgpynff";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:34:"8:bcrafgnpxznantre-erzbirchccrgine";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:41:"8:bcrafgnpxznantre-erzbirchccrginepbasvez";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:35:"8:bcrafgnpxznantre-qryrgrqchccrgine";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:42:"8:bcrafgnpxznantre-snvyrqgbqryrgrchccrgine";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:32:"8:bcrafgnpxznantre-rznvy-fhowrpg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:29:"8:bcrafgnpxznantre-rznvy-obql";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:21:"8:evtug-znantrcebwrpg";a:3:{i:0;R:8037;i:1;R:801;i:2;R:3237;}s:11:"8:cbrz-qrfp";a:3:{i:0;s:8:"ext-poem";i:1;R:801;i:2;R:3237;}s:12:"8:vaqrkcntrf";a:3:{i:0;s:17:"ext-proofreadpage";i:1;R:801;i:2;R:3237;}s:19:"8:cntrfjvgubhgfpnaf";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:20:"8:cebbsernqcntr_qrfp";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:25:"8:cebbsernqcntr_anzrfcnpr";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:31:"8:cebbsernqcntr_vaqrk_anzrfcnpr";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:21:"8:cebbsernqcntr_vzntr";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:21:"8:cebbsernqcntr_vaqrk";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:30:"8:cebbsernqcntr_vaqrk_rkcrpgrq";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:28:"8:cebbsernqcntr_abfhpu_vaqrk";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:27:"8:cebbsernqcntr_abfhpu_svyr";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:23:"8:cebbsernqcntr_onqcntr";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:27:"8:cebbsernqcntr_onqcntrgrkg";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:25:"8:cebbsernqcntr_vaqrkqhcr";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:29:"8:cebbsernqcntr_vaqrkqhcrgrkg";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:23:"8:cebbsernqcntr_abybtva";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:27:"8:cebbsernqcntr_abybtvagrkg";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:26:"8:cebbsernqcntr_abgnyybjrq";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:30:"8:cebbsernqcntr_abgnyybjrqgrkg";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:31:"8:cebbsernqcntr_ahzore_rkcrpgrq";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:34:"8:cebbsernqcntr_vagreiny_gbb_ynetr";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:32:"8:cebbsernqcntr_vainyvq_vagreiny";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:24:"8:cebbsernqcntr_arkgcntr";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:24:"8:cebbsernqcntr_cericntr";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:22:"8:cebbsernqcntr_urnqre";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:20:"8:cebbsernqcntr_obql";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:22:"8:cebbsernqcntr_sbbgre";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:29:"8:cebbsernqcntr_gbttyrurnqref";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:33:"8:cebbsernqcntr_dhnyvgl0_pngrtbel";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:33:"8:cebbsernqcntr_dhnyvgl1_pngrtbel";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:33:"8:cebbsernqcntr_dhnyvgl2_pngrtbel";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:33:"8:cebbsernqcntr_dhnyvgl3_pngrtbel";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:33:"8:cebbsernqcntr_dhnyvgl4_pngrtbel";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:32:"8:cebbsernqcntr_dhnyvgl0_zrffntr";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:32:"8:cebbsernqcntr_dhnyvgl1_zrffntr";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:32:"8:cebbsernqcntr_dhnyvgl2_zrffntr";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:32:"8:cebbsernqcntr_dhnyvgl3_zrffntr";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:32:"8:cebbsernqcntr_dhnyvgl4_zrffntr";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:33:"8:cebbsernqcntr_vaqrk_yvfgbscntrf";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:29:"8:cebbsernqcntr_vzntr_zrffntr";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:27:"8:cebbsernqcntr_cntr_fgnghf";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:29:"8:cebbsernqcntr_wf_nggevohgrf";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:32:"8:cebbsernqcntr_vaqrk_nggevohgrf";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:30:"8:cebbsernqcntr_qrsnhyg_urnqre";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:30:"8:cebbsernqcntr_qrsnhyg_sbbgre";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:21:"8:cebbsernqcntr_cntrf";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:32:"8:cebbsernqcntr_fcrpvnycntr_grkg";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:34:"8:cebbsernqcntr_fcrpvnycntr_yrtraq";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:22:"8:cebbsernqcntr_fbhepr";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:30:"8:cebbsernqcntr_fbhepr_zrffntr";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:19:"8:evtug-cntrdhnyvgl";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:29:"8:cebbsernqcntr-frpgvba-gbbyf";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:26:"8:cebbsernqcntr-tebhc-mbbz";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:27:"8:cebbsernqcntr-tebhc-bgure";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:46:"8:cebbsernqcntr-ohggba-gbttyr-ivfvovyvgl-ynory";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:37:"8:cebbsernqcntr-ohggba-mbbz-bhg-ynory";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:39:"8:cebbsernqcntr-ohggba-erfrg-mbbz-ynory";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:36:"8:cebbsernqcntr-ohggba-mbbz-va-ynory";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:42:"8:cebbsernqcntr-ohggba-gbttyr-ynlbhg-ynory";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:45:"8:cebbsernqcntr-cersreraprf-fubjurnqref-ynory";a:3:{i:0;R:8362;i:1;R:801;i:2;R:3237;}s:12:"8:engrqcntrf";a:4:{i:0;s:29:"ext-readerfeedback-ratedpages";i:1;R:801;i:2;R:3237;i:3;s:24:"ext-readerfeedback-0-all";}s:16:"8:engrqcntrf-yrt";a:4:{i:0;R:8422;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:17:"8:engrqcntrf-yvfg";a:4:{i:0;R:8422;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:17:"8:engrqcntrf-abar";a:4:{i:0;R:8422;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:19:"8:engrqcntrf-tencuf";a:4:{i:0;R:8422;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:18:"8:engrqcntrf-pbhag";a:4:{i:0;R:8422;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:15:"8:engvatuvfgbel";a:4:{i:0;s:32:"ext-readerfeedback-ratinghistory";i:1;R:801;i:2;R:3237;i:3;R:8423;}s:19:"8:engvatuvfgbel-yrt";a:4:{i:0;R:8430;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:19:"8:engvatuvfgbel-gno";a:4:{i:0;R:8430;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:20:"8:engvatuvfgbel-yvax";a:4:{i:0;R:8430;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:22:"8:engvatuvfgbel-gunaxf";a:4:{i:0;R:8430;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:22:"8:engvatuvfgbel-crevbq";a:4:{i:0;R:8430;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:21:"8:engvatuvfgbel-zbagu";a:4:{i:0;R:8430;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:23:"8:engvatuvfgbel-3zbaguf";a:4:{i:0;R:8430;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:20:"8:engvatuvfgbel-lrne";a:4:{i:0;R:8430;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:22:"8:engvatuvfgbel-3lrnef";a:4:{i:0;R:8430;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:19:"8:engvatuvfgbel-nir";a:4:{i:0;R:8430;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:21:"8:engvatuvfgbel-puneg";a:4:{i:0;R:8430;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:21:"8:engvatuvfgbel-chetr";a:4:{i:0;R:8430;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:21:"8:engvatuvfgbel-gnoyr";a:4:{i:0;R:8430;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:21:"8:engvatuvfgbel-hfref";a:4:{i:0;R:8430;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:21:"8:engvatuvfgbel-tencu";a:4:{i:0;R:8430;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:19:"8:engvatuvfgbel-fit";a:4:{i:0;R:8430;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:28:"8:engvatuvfgbel-gnoyr-engvat";a:4:{i:0;R:8430;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:27:"8:engvatuvfgbel-gnoyr-ibgrf";a:4:{i:0;R:8430;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:20:"8:engvatuvfgbel-abar";a:4:{i:0;R:8430;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:23:"8:engvatuvfgbel-engvatf";a:4:{i:0;R:8430;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:22:"8:engvatuvfgbel-yrtraq";a:4:{i:0;R:8430;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:27:"8:engvatuvfgbel-tencu-fpnyr";a:4:{i:0;R:8430;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:16:"8:evtug-srrqonpx";a:4:{i:0;R:8430;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:21:"8:ernqresrrqonpx-qrfp";a:4:{i:0;s:33:"ext-readerfeedback-readerfeedback";i:1;R:801;i:2;R:3237;i:3;R:8423;}s:16:"8:ernqresrrqonpx";a:4:{i:0;R:8455;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:21:"8:ernqresrrqonpx-grkg";a:4:{i:0;R:8455;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:28:"8:ernqresrrqonpx-eryvnovyvgl";a:4:{i:0;R:8455;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:29:"8:ernqresrrqonpx-pbzcyrgrarff";a:4:{i:0;R:8455;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:21:"8:ernqresrrqonpx-acbi";a:4:{i:0;R:8455;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:29:"8:ernqresrrqonpx-cerfragngvba";a:4:{i:0;R:8455;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:24:"8:ernqresrrqonpx-birenyy";a:4:{i:0;R:8455;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:27:"8:ernqresrrqonpx-yriry-abar";a:4:{i:0;R:8455;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:24:"8:ernqresrrqonpx-yriry-0";a:4:{i:0;R:8455;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:24:"8:ernqresrrqonpx-yriry-1";a:4:{i:0;R:8455;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:24:"8:ernqresrrqonpx-yriry-2";a:4:{i:0;R:8455;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:24:"8:ernqresrrqonpx-yriry-3";a:4:{i:0;R:8455;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:24:"8:ernqresrrqonpx-yriry-4";a:4:{i:0;R:8455;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:23:"8:ernqresrrqonpx-fhozvg";a:4:{i:0;R:8455;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:21:"8:ernqresrrqonpx-znva";a:4:{i:0;R:8455;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:24:"8:ernqresrrqonpx-fhpprff";a:4:{i:0;R:8455;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:22:"8:ernqresrrqonpx-ibgrq";a:4:{i:0;R:8455;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:22:"8:ernqresrrqonpx-reebe";a:4:{i:0;R:8455;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:27:"8:ernqresrrqonpx-fhozvggvat";a:4:{i:0;R:8455;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:25:"8:ernqresrrqonpx-svavfurq";a:4:{i:0;R:8455;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:26:"8:ernqresrrqonpx-gntsvygre";a:4:{i:0;R:8455;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:27:"8:ernqresrrqonpx-gvresvygre";a:4:{i:0;R:8455;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:26:"8:ernqresrrqonpx-gvre-uvtu";a:4:{i:0;R:8455;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:28:"8:ernqresrrqonpx-gvre-zrqvhz";a:4:{i:0;R:8455;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:26:"8:ernqresrrqonpx-gvre-cbbe";a:4:{i:0;R:8455;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:23:"8:gbbygvc-pn-engvatuvfg";a:4:{i:0;R:8455;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:29:"8:fcrpvnycntrf-tebhc-srrqonpx";a:4:{i:0;R:8455;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:26:"8:ernqresrrqonpx-nx-erivrj";a:4:{i:0;R:8455;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:26:"8:ernqresrrqonpx-gg-erivrj";a:4:{i:0;R:8455;i:1;R:801;i:2;R:3237;i:3;R:8423;}s:10:"8:eff-qrfp";a:3:{i:0;s:7:"ext-rss";i:1;R:801;i:2;R:3237;}s:11:"8:eff-reebe";a:3:{i:0;R:8486;i:1;R:801;i:2;R:3237;}s:11:"8:eff-rzcgl";a:3:{i:0;R:8486;i:1;R:801;i:2;R:3237;}s:17:"8:eff-srgpu-abhey";a:3:{i:0;R:8486;i:1;R:801;i:2;R:3237;}s:17:"8:eff-vainyvq-hey";a:3:{i:0;R:8486;i:1;R:801;i:2;R:3237;}s:17:"8:eff-cnefr-reebe";a:3:{i:0;R:8486;i:1;R:801;i:2;R:3237;}s:19:"8:eff-af-crezvffvba";a:3:{i:0;R:8486;i:1;R:801;i:2;R:3237;}s:20:"8:eff-hey-crezvffvba";a:3:{i:0;R:8486;i:1;R:801;i:2;R:3237;}s:10:"8:eff-vgrz";a:3:{i:0;R:8486;i:1;R:801;i:2;R:3237;}s:10:"8:eff-srrq";a:3:{i:0;R:8486;i:1;R:801;i:2;R:3237;}s:14:"8:fpnafrg-qrfp";a:3:{i:0;s:11:"ext-scanset";i:1;R:801;i:2;R:3237;}s:17:"8:fpnafrg_ab_anzr";a:3:{i:0;R:8497;i:1;R:801;i:2;R:3237;}s:22:"8:fpnafrg_vainyvq_anzr";a:3:{i:0;R:8497;i:1;R:801;i:2;R:3237;}s:35:"8:fpnafrg_haerpbtavfrq_vaqrk_sbezng";a:3:{i:0;R:8497;i:1;R:801;i:2;R:3237;}s:23:"8:fpnafrg_bcraqve_reebe";a:3:{i:0;R:8497;i:1;R:801;i:2;R:3237;}s:18:"8:fpnafrg_ab_svyrf";a:3:{i:0;R:8497;i:1;R:801;i:2;R:3237;}s:20:"8:fpnafrg_ab_ibyhzrf";a:3:{i:0;R:8497;i:1;R:801;i:2;R:3237;}s:28:"8:fpnafrg_zvffvat_vaqrk_svyr";a:3:{i:0;R:8497;i:1;R:801;i:2;R:3237;}s:26:"8:fpnafrg_vaqrk_svyr_reebe";a:3:{i:0;R:8497;i:1;R:801;i:2;R:3237;}s:24:"8:fpnafrg_vainyvq_ibyhzr";a:3:{i:0;R:8497;i:1;R:801;i:2;R:3237;}s:14:"8:fpnafrg_arkg";a:3:{i:0;R:8497;i:1;R:801;i:2;R:3237;}s:14:"8:fpnafrg_ceri";a:3:{i:0;R:8497;i:1;R:801;i:2;R:3237;}s:10:"8:fubeghey";a:3:{i:0;s:12:"ext-shorturl";i:1;R:801;i:2;R:3237;}s:15:"8:fubeghey-qrfp";a:3:{i:0;R:8510;i:1;R:801;i:2;R:3237;}s:26:"8:fubeghey-abg-sbhaq-gvgyr";a:3:{i:0;R:8510;i:1;R:801;i:2;R:3237;}s:28:"8:fubeghey-abg-sbhaq-zrffntr";a:3:{i:0;R:8510;i:1;R:801;i:2;R:3237;}s:24:"8:fubeghey-gbbyobk-gvgyr";a:3:{i:0;R:8510;i:1;R:801;i:2;R:3237;}s:23:"8:fubeghey-gbbyobk-grkg";a:3:{i:0;R:8510;i:1;R:801;i:2;R:3237;}s:18:"8:fxvacrecntr-qrfp";a:3:{i:0;s:15:"ext-skinperpage";i:1;R:801;i:2;R:3237;}s:16:"8:npgvirfgengrtl";a:3:{i:0;s:31:"ext-strategywiki-activestrategy";i:1;R:801;i:2;R:3237;}s:22:"8:npgvir-fgengrtl-qrfp";a:3:{i:0;R:8519;i:1;R:801;i:2;R:3237;}s:23:"8:npgvir-fgengrtl-vageb";a:3:{i:0;R:8519;i:1;R:801;i:2;R:3237;}s:8:"8:arqvgf";a:3:{i:0;R:8519;i:1;R:801;i:2;R:3237;}s:11:"8:fcy3-qrfp";a:3:{i:0;s:16:"ext-subpagelist3";i:1;R:801;i:2;R:3237;}s:12:"8:fcy3_qroht";a:3:{i:0;R:8524;i:1;R:801;i:2;R:3237;}s:17:"8:fcy3_abfhocntrf";a:3:{i:0;R:8524;i:1;R:801;i:2;R:3237;}s:22:"8:fjvsgpybhqsvyrf-qrfp";a:3:{i:0;s:19:"ext-swiftcloudfiles";i:1;R:801;i:2;R:3237;}s:22:"8:flagnkuvtuyvtug-qrfp";a:3:{i:0;s:24:"ext-syntaxhighlightgeshi";i:1;R:801;i:2;R:3237;}s:25:"8:flagnkuvtuyvtug-fcrpvsl";a:3:{i:0;R:8530;i:1;R:801;i:2;R:3237;}s:27:"8:flagnkuvtuyvtug-fhccbegrq";a:3:{i:0;R:8530;i:1;R:801;i:2;R:3237;}s:29:"8:flagnkuvtuyvtug-ree-ybnqvat";a:3:{i:0;R:8530;i:1;R:801;i:2;R:3237;}s:30:"8:flagnkuvtuyvtug-ree-ynathntr";a:3:{i:0;R:8530;i:1;R:801;i:2;R:3237;}s:11:"8:trfuv.pff";a:3:{i:0;R:8530;i:1;R:801;i:2;R:3237;}s:15:"8:gvgyrxrl-qrfp";a:3:{i:0;s:12:"ext-titlekey";i:1;R:801;i:2;R:3237;}s:11:"8:genafyngr";a:4:{i:0;s:18:"ext-translate-core";i:1;R:801;i:2;R:3237;i:3;s:19:"ext-translate-0-all";}s:16:"8:genafyngr-qrfp";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:19:"8:genafyngr-fubjfho";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:genafyngr-tebhcyvfgvat";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:30:"8:genafyngr-tebhcyvfgvat-rzcgl";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:23:"8:genafyngr-gnfxhv-ivrj";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:31:"8:genafyngr-gnfxhv-hagenafyngrq";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:27:"8:genafyngr-gnfxhv-bcgvbany";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:30:"8:genafyngr-gnfxhv-fhttrfgvbaf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:30:"8:genafyngr-gnfxhv-npprcgdhrhr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:28:"8:genafyngr-gnfxhv-erivrjnyy";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:33:"8:genafyngr-gnfxhv-rkcbeg-gb-svyr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:31:"8:genafyngr-gnfxhv-rkcbeg-nf-cb";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:29:"8:genafyngr-gnpgvba-genafyngr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:29:"8:genafyngr-gnpgvba-cebbsernq";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:26:"8:genafyngr-gnpgvba-yfgngf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:26:"8:genafyngr-gnpgvba-zfgngf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:26:"8:genafyngr-gnpgvba-rkcbeg";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:28:"8:genafyngr-gnpgvba-qvfnoyrq";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:33:"8:genafyngr-cntr-ab-fhpu-ynathntr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:30:"8:genafyngr-cntr-ab-fhpu-tebhc";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:25:"8:genafyngr-cntr-qvfnoyrq";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:32:"8:genafyngr-cntr-frggvatf-yrtraq";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:22:"8:genafyngr-cntr-tebhc";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:25:"8:genafyngr-cntr-ynathntr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:22:"8:genafyngr-cntr-yvzvg";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:29:"8:genafyngr-cntr-yvzvg-bcgvba";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:18:"8:genafyngr-fhozvg";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:34:"8:genafyngr-cntr-anivtngvba-yrtraq";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:genafyngr-cntr-fubjvat";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:28:"8:genafyngr-cntr-fubjvat-nyy";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:29:"8:genafyngr-cntr-fubjvat-abar";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:29:"8:genafyngr-cntr-cntvat-yvaxf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:16:"8:genafyngr-arkg";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:16:"8:genafyngr-ceri";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:35:"8:genafyngr-cntr-qrfpevcgvba-yrtraq";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:40:"8:genafyngr-cntr-qrfpevcgvba-unfbcgvbany";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:45:"8:genafyngr-cntr-qrfpevcgvba-unfbcgvbany-bcra";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:21:"8:genafyngr-cntr-rqvg";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:19:"8:genafyngr-rkg-hey";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:20:"8:genafyngr-bcgvbany";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:19:"8:genafyngr-vtaberq";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:23:"8:genafyngr-rqvg-wfbcra";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:22:"8:genafyngr-rqvg-gvgyr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:27:"8:genafyngr-rqvg-qrsvavgvba";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:28:"8:genafyngr-rqvg-genafyngvba";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:27:"8:genafyngr-rqvg-pbagevohgr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:31:"8:genafyngr-rqvg-ab-vasbezngvba";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:28:"8:genafyngr-rqvg-vasbezngvba";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:35:"8:genafyngr-rqvg-va-bgure-ynathntrf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:26:"8:genafyngr-rqvg-pbzzvggrq";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:25:"8:genafyngr-rqvg-jneavatf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:23:"8:genafyngr-rqvg-gzfhtf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:31:"8:genafyngr-rqvg-gzzngpu-fbhepr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:genafyngr-rqvg-gzzngpu";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:26:"8:genafyngr-hfr-fhttrfgvba";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:25:"8:genafyngr-rqvg-gno-ceri";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:25:"8:genafyngr-rqvg-gno-arkg";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:25:"8:genafyngr-rqvg-gno-yvfg";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:29:"8:genafyngr-rqvg-abcrezvffvba";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:30:"8:genafyngr-rqvg-nfxcrezvffvba";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:28:"8:genafyngr-rqvg-gnt-jneavat";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:26:"8:genafyngr-zntvp-cntranzr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:22:"8:genafyngr-zntvp-uryc";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:genafyngr-zntvp-zbqhyr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:genafyngr-zntvp-fhozvg";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:27:"8:genafyngr-zntvp-pz-rkcbeg";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:35:"8:genafyngr-zntvp-abguvat-gb-rkcbeg";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:26:"8:genafyngr-zntvp-pz-gb-or";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:28:"8:genafyngr-zntvp-pz-pheerag";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:29:"8:genafyngr-zntvp-pz-bevtvany";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:28:"8:genafyngr-zntvp-pz-pbzzrag";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:25:"8:genafyngr-zntvp-pz-fnir";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:33:"8:genafyngr-zntvp-pz-hcqngrqhfvat";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:31:"8:genafyngr-zntvp-pz-fnirsnvyrq";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:25:"8:genafyngr-zntvp-fcrpvny";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:23:"8:genafyngr-zntvp-jbeqf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:27:"8:genafyngr-zntvp-anzrfcnpr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:26:"8:genafyngr-zntvp-abgfnirq";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:genafyngr-zntvp-reebef";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:23:"8:genafyngr-zntvp-fnirq";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:29:"8:genafyngr-purpxf-cnenzrgref";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:37:"8:genafyngr-purpxf-cnenzrgref-haxabja";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:26:"8:genafyngr-purpxf-onynapr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:genafyngr-purpxf-yvaxf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:32:"8:genafyngr-purpxf-yvaxf-zvffvat";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:genafyngr-purpxf-kugzy";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:25:"8:genafyngr-purpxf-cyheny";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:27:"8:genafyngr-purpxf-cntranzr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:25:"8:genafyngr-purpxf-sbezng";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:25:"8:genafyngr-purpxf-rfpncr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:37:"8:genafyngr-purpxf-cnenzrgrefabgrdhny";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:28:"8:genafyngr-purpxf-znysbezrq";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:34:"8:genafyngr-purpxf-shqsbehz-flagnk";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:29:"8:genafyngr-cers-abarjfyrggre";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:31:"8:genafyngr-cers-rqvgnffvfgynat";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:17:"8:cersf-genafyngr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:36:"8:genafyngr-cers-rqvgnffvfgynat-uryc";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:35:"8:genafyngr-cers-rqvgnffvfgynat-onq";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:23:"8:genafyngr-cers-wfrqvg";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:17:"8:evtug-genafyngr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:evtug-genafyngr-znantr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:25:"8:npgvba-genafyngr-znantr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:evtug-genafyngr-vzcbeg";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:25:"8:npgvba-genafyngr-vzcbeg";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:31:"8:evtug-genafyngr-zrffntrerivrj";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:29:"8:evtug-genafyngr-tebhcerivrj";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:33:"8:genafyngr-ep-genafyngvba-svygre";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:36:"8:genafyngr-ep-genafyngvba-svygre-ab";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:38:"8:genafyngr-ep-genafyngvba-svygre-bayl";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:40:"8:genafyngr-ep-genafyngvba-svygre-svygre";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:38:"8:genafyngr-ep-genafyngvba-svygre-fvgr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:18:"8:genafyngvbafgngf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:23:"8:genafyngr-fgngf-rqvgf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:23:"8:genafyngr-fgngf-hfref";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:31:"8:genafyngr-fgngf-ertvfgengvbaf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:25:"8:genafyngr-fgngf-erivrjf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:27:"8:genafyngr-fgngf-erivrjref";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:genafyngr-fgngfs-vageb";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:26:"8:genafyngr-fgngfs-bcgvbaf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:genafyngr-fgngfs-jvqgu";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:25:"8:genafyngr-fgngfs-urvtug";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:23:"8:genafyngr-fgngfs-qnlf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:genafyngr-fgngfs-fgneg";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:genafyngr-fgngfs-fpnyr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:31:"8:genafyngr-fgngfs-fpnyr-zbaguf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:30:"8:genafyngr-fgngfs-fpnyr-jrrxf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:29:"8:genafyngr-fgngfs-fpnyr-qnlf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:30:"8:genafyngr-fgngfs-fpnyr-ubhef";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:genafyngr-fgngfs-pbhag";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:30:"8:genafyngr-fgngfs-pbhag-rqvgf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:30:"8:genafyngr-fgngfs-pbhag-hfref";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:38:"8:genafyngr-fgngfs-pbhag-ertvfgengvbaf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:32:"8:genafyngr-fgngfs-pbhag-erivrjf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:34:"8:genafyngr-fgngfs-pbhag-erivrjref";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:27:"8:genafyngr-fgngfs-ynathntr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:genafyngr-fgngfs-tebhc";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:25:"8:genafyngr-fgngfs-fhozvg";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:genafyngr-gnt-pngrtbel";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:25:"8:genafyngr-gnt-cntr-qrfp";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:29:"8:genafyngr-gnt-shmml-pbzzrag";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:28:"8:genafyngr-gnt-shmml-ernfba";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:28:"8:genafyngr-fvqrone-nyygenaf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:14:"8:genafyngvbaf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:22:"8:genafyngvbaf-fhzznel";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:35:"8:genafyngr-genafyngvbaf-ab-zrffntr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:29:"8:genafyngr-genafyngvbaf-abar";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:30:"8:genafyngr-genafyngvbaf-pbhag";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:39:"8:genafyngr-genafyngvbaf-svryqfrg-gvgyr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:36:"8:genafyngr-genafyngvbaf-zrffntranzr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:32:"8:genafyngr-genafyngvbaf-cebwrpg";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:43:"8:genafyngr-genafyngvbaf-vapyhqvat-ab-cnenz";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:38:"8:genafyngr-genafyngvbaf-uvfgbel-fubeg";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:15:"8:ynathntrfgngf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:23:"8:ynathntrfgngf-fhzznel";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:25:"8:ynathntrfgngf-fgngf-sbe";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:34:"8:ynathntrfgngf-erpraggenafyngvbaf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:32:"8:genafyngr-ynatfgngf-vapbzcyrgr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:28:"8:genafyngr-ynatfgngf-rkcnaq";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:30:"8:genafyngr-ynatfgngf-pbyyncfr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:31:"8:genafyngr-ynatfgngf-rkcnaqnyy";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:33:"8:genafyngr-ynatfgngf-pbyyncfrnyy";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:25:"8:genafyngr-ynathntr-pbqr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:36:"8:genafyngr-ynathntr-pbqr-svryq-anzr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:29:"8:genafyngr-fhccerff-pbzcyrgr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:22:"8:genafyngr-yf-abrzcgl";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:20:"8:genafyngr-ynathntr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:17:"8:genafyngr-gbgny";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:genafyngr-hagenafyngrq";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:31:"8:genafyngr-crepragntr-pbzcyrgr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:28:"8:genafyngr-crepragntr-shmml";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:25:"8:genafyngr-abguvat-gb-qb";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:33:"8:genafyngr-ynathntrfgngf-birenyy";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:21:"8:genafyngr-yf-fhozvg";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:27:"8:genafyngr-yf-pbyhza-tebhc";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:genafyngr-ztf-cntranzr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:genafyngr-ztf-svryqfrg";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:21:"8:genafyngr-ztf-tebhc";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:26:"8:genafyngr-ztf-abpbzcyrgr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:23:"8:genafyngr-ztf-abrzcgl";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:22:"8:genafyngr-ztf-fhozvg";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:31:"8:genafyngr-ztf-pbyhza-ynathntr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:22:"8:genafyngr-ztf-gbgnyf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:29:"8:genafyngr-ztf-vainyvq-tebhc";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:23:"8:genafyngr-ztf-abguvat";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:20:"8:fhccbegrqynathntrf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:28:"8:fhccbegrqynathntrf-fhzznel";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:32:"8:fhccbegrqynathntrf-pbybeyrtraq";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:33:"8:fhccbegrqynathntrf-ybpnyfhzznel";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:31:"8:fhccbegrqynathntrf-cbegnyyvax";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:38:"8:fhccbegrqynathntrf-cbegnyyvax-abpyqe";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:32:"8:fhccbegrqynathntrf-genafyngbef";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:39:"8:fhccbegrqynathntrf-erpraggenafyngvbaf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:26:"8:fhccbegrqynathntrf-pbhag";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:29:"8:fhccbegrqynathntrf-npgvivgl";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:16:"8:genafyngr-fnir";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:21:"8:genafyngr-wffgv-nqq";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:21:"8:znantrzrffntrtebhcf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:25:"8:genafyngr-znantr-tebhcf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:29:"8:genafyngr-znantr-yvfgtebhcf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:33:"8:genafyngr-znantr-yvfgtebhcf-byq";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:genafyngr-znantrtebhcf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:27:"8:genafyngr-znantr-arjtebhc";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:26:"8:genafyngr-znantr-pnpurng";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:34:"8:genafyngr-znantr-erghea-gb-tebhc";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:27:"8:genafyngr-znantr-zbqynatf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:30:"8:genafyngr-znantr-zbqynat-arj";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:30:"8:genafyngr-znantr-vzcbeg-qvss";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:29:"8:genafyngr-znantr-vzcbeg-arj";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:33:"8:genafyngr-znantr-vzcbeg-qryrgrq";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:32:"8:genafyngr-znantr-npgvba-vzcbeg";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:34:"8:genafyngr-znantr-npgvba-pbasyvpg";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:32:"8:genafyngr-znantr-npgvba-vtaber";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:31:"8:genafyngr-znantr-npgvba-shmml";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:25:"8:genafyngr-znantr-fhozvg";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:28:"8:genafyngr-znantr-abpunatrf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:34:"8:genafyngr-znantr-abpunatrf-bgure";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:31:"8:genafyngr-znantr-vapbafvfgrag";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:26:"8:genafyngr-znantr-gbbybat";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:28:"8:genafyngr-znantr-vzcbeg-bx";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:30:"8:genafyngr-znantr-vzcbeg-abxf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:32:"8:genafyngr-znantr-vzcbeg-vtaber";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:33:"8:genafyngr-znantr-vzcbeg-fhzznel";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:35:"8:genafyngr-znantr-pbasyvpg-fhzznel";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:32:"8:genafyngr-znantr-shmml-fhzznel";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:31:"8:genafyngr-znantr-vzcbeg-shmml";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:30:"8:genafyngr-znantr-vzcbeg-qbar";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:33:"8:genafyngr-znantr-vzcbeg-erohvyq";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:27:"8:genafyngr-znantr-vageb-ra";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:30:"8:genafyngr-znantr-vageb-bgure";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:27:"8:genafyngr-znantr-fhogvgyr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:37:"8:genafyngr-znantr-vzcbeg-erohvyq-nyy";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:20:"8:vzcbeggenafyngvbaf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:27:"8:genafyngr-vzcbeg-sebz-hey";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:28:"8:genafyngr-vzcbeg-sebz-jvxv";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:29:"8:genafyngr-vzcbeg-sebz-ybpny";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:23:"8:genafyngr-vzcbeg-ybnq";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:41:"8:genafyngr-vzcbeg-ree-glcr-abg-fhccbegrq";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:32:"8:genafyngr-vzcbeg-ree-qy-snvyrq";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:32:"8:genafyngr-vzcbeg-ree-hy-snvyrq";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:36:"8:genafyngr-vzcbeg-ree-vainyvq-gvgyr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:35:"8:genafyngr-vzcbeg-ree-ab-fhpu-svyr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:34:"8:genafyngr-vzcbeg-ree-fgnyr-tebhc";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:33:"8:genafyngr-vzcbeg-ree-ab-urnqref";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:31:"8:genafyngr-vzcbeg-ree-jneavatf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:22:"8:genafyngr-wf-fhzznel";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:19:"8:genafyngr-wf-fnir";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:19:"8:genafyngr-wf-arkg";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:21:"8:genafyngr-wf-abarkg";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:19:"8:genafyngr-wf-fxvc";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:26:"8:genafyngr-wf-fnir-snvyrq";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:22:"8:genafyngr-wf-uvfgbel";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:22:"8:genafyngr-wf-fhccbeg";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:28:"8:genafyngr-wf-fhccbeg-gvgyr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:18:"8:genafyngr-tf-cbf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:19:"8:genafyngr-tf-pbqr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:genafyngr-tf-pbagvarag";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:23:"8:genafyngr-tf-fcrnxref";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:20:"8:genafyngr-tf-fpber";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:23:"8:genafyngr-tf-zhygvcyr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:20:"8:genafyngr-tf-pbhag";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:20:"8:genafyngr-tf-gbgny";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:23:"8:genafyngr-tf-nitfpber";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:34:"8:genafyngr-qbphzragngvba-ynathntr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:25:"8:genafyngr-frnepucebsvyr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:33:"8:genafyngr-frnepucebsvyr-gbbygvc";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:33:"8:genafyngr-frnepu-ynathntrsvygre";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:27:"8:genafyngr-frnepu-absvygre";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:32:"8:genafyngr-zrffntrerivrj-fhozvg";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:34:"8:genafyngr-zrffntrerivrj-cebterff";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:33:"8:genafyngr-zrffntrerivrj-snvyher";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:30:"8:genafyngr-zrffntrerivrj-qbar";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:33:"8:genafyngr-zrffntrerivrj-erivrjf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:40:"8:genafyngr-zrffntrerivrj-erivrjfjvgulbh";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:36:"8:genafyngr-zrffntrerivrj-erivrjflbh";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:27:"8:ncv-reebe-vainyvqerivfvba";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:26:"8:ncv-reebe-haxabjazrffntr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:ncv-reebe-shmmlzrffntr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:26:"8:ncv-reebe-bjagenafyngvba";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:34:"8:genafyngr-zrffntrerivrj-ab-shmml";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:32:"8:genafyngr-zrffntrerivrj-ab-bja";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:30:"8:genafyngr-zrffntrerivrj-qbvg";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:tebhc-genafyngr-cebbse";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:31:"8:tebhc-genafyngr-cebbse-zrzore";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:28:"8:tebhccntr-genafyngr-cebbse";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:28:"8:tebhc-genafyngr-cebbse.pff";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:27:"8:tebhc-genafyngr-cebbse.wf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:28:"8:ybt-anzr-genafyngvbaerivrj";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:35:"8:ybt-qrfpevcgvba-genafyngvbaerivrj";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:36:"8:ybtragel-genafyngvbaerivrj-zrffntr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:30:"8:ybtragel-tebhcerivrj-zrffntr";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:27:"8:genafyngr-jbexsybj-fgngr-";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:26:"8:genafyngr-jbexsybjfgnghf";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:27:"8:genafyngr-jbexsybj-frg-qb";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:30:"8:genafyngr-jbexsybj-frg-qbvat";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:29:"8:genafyngr-jbexsybj-frg-qbar";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:41:"8:genafyngr-jbexsybj-frg-reebe-nyernqlfrg";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:40:"8:genafyngr-jbexsybj-nhgbperngrq-fhzznel";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:26:"8:genafyngr-fgngf-jbexsybj";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:31:"8:genafyngr-jbexsybjtebhc-ynory";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:30:"8:genafyngr-jbexsybjtebhc-qrfp";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:34:"8:genafyngr-qlantebhc-erprag-ynory";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:33:"8:genafyngr-qlantebhc-erprag-qrfp";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:genafyngr-qlantebhc-ol";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:25:"8:genafyngr-qlantebhc-olp";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:26:"8:genafyngr-qlantebhc-ynfg";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:27:"8:genafyngr-qlantebhc-ynfgp";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:19:"8:genafyngr-trguryc";a:4:{i:0;R:8539;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:17:"8:cntrgenafyngvba";a:4:{i:0;s:29:"ext-translate-pagetranslation";i:1;R:801;i:2;R:3237;i:3;R:8540;}s:23:"8:evtug-cntrgenafyngvba";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:10:"8:gcg-qrfp";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:13:"8:gcg-frpgvba";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:17:"8:gcg-frpgvba-arj";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:21:"8:gcg-frpgvba-qryrgrq";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:14:"8:gcg-grzcyngr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:18:"8:gcg-grzcyngrqvss";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:14:"8:gcg-qvss-byq";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:14:"8:gcg-qvss-arj";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:12:"8:gcg-fhozvg";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:21:"8:gcg-frpgvbaf-byqarj";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:22:"8:gcg-frpgvbaf-qryrgrq";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:23:"8:gcg-frpgvbaf-grzcyngr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:20:"8:gcg-npgvba-abshmml";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:14:"8:gcg-onqgvgyr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:16:"8:gcg-abfhpucntr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:17:"8:gcg-byqerivfvba";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:17:"8:gcg-abgfhvgnoyr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:12:"8:gcg-fnirbx";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:13:"8:gcg-onqfrpg";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:20:"8:gcg-fubjcntr-vageb";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:18:"8:gcg-znex-fhzznel";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:17:"8:gcg-rqvg-snvyrq";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:15:"8:gcg-qhcyvpngr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:20:"8:gcg-nyernql-znexrq";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:14:"8:gcg-haznexrq";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:18:"8:gcg-yvfg-abcntrf";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:21:"8:gcg-arj-cntrf-gvgyr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:21:"8:gcg-byq-cntrf-gvgyr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:23:"8:gcg-bgure-cntrf-gvgyr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:29:"8:gcg-qvfpbhentrq-cntrf-gvgyr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:15:"8:gcg-arj-cntrf";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:15:"8:gcg-byq-cntrf";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:17:"8:gcg-bgure-cntrf";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:23:"8:gcg-qvfpbhentrq-cntrf";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:26:"8:gcg-fryrpg-cevbevglynatf";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:32:"8:gcg-fryrpg-cevbevglynatf-sbepr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:33:"8:gcg-fryrpg-cevbevglynatf-ernfba";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:28:"8:gcg-frpgvbaf-cevbevglynatf";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:14:"8:gcg-eri-znex";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:16:"8:gcg-eri-haznex";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:20:"8:gcg-eri-qvfpbhentr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:19:"8:gcg-eri-rapbhentr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:22:"8:gcg-eri-znex-gbbygvc";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:gcg-eri-haznex-gbbygvc";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:28:"8:gcg-eri-qvfpbhentr-gbbygvc";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:27:"8:gcg-eri-rapbhentr-gbbygvc";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:35:"8:genafyngr-gnt-genafyngr-yvax-qrfp";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:genafyngr-gnt-znexguvf";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:29:"8:genafyngr-gnt-znexguvfntnva";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:22:"8:genafyngr-gnt-unfarj";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:23:"8:gcg-genafyngvba-vageb";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:29:"8:gcg-genafyngvba-vageb-shmml";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:22:"8:gcg-ynathntrf-yrtraq";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:25:"8:gcg-ynathntrf-frcnengbe";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:20:"8:gcg-ynathntrf-mreb";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:17:"8:gcg-gnetrg-cntr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:18:"8:gcg-haxabja-cntr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:28:"8:gcg-genafyngvba-erfgevpgrq";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:32:"8:gcg-qvfpbhentrq-ynathntr-sbepr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:26:"8:gcg-qvfpbhentrq-ynathntr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:gcg-cevbevgl-ynathntrf";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:20:"8:gcg-eraqre-fhzznel";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:19:"8:gcg-qbjaybnq-cntr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:17:"8:nttertngrtebhcf";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:gcg-nttertngrtebhc-nqq";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:25:"8:gcg-nttertngrtebhc-fnir";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:28:"8:gcg-nttertngrtebhc-nqq-arj";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:29:"8:gcg-nttertngrtebhc-arj-anzr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:36:"8:gcg-nttertngrtebhc-arj-qrfpevcgvba";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:35:"8:gcg-nttertngrtebhc-erzbir-pbasvez";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:15:"8:cg-cnefr-bcra";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:16:"8:cg-cnefr-pybfr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:17:"8:cg-cnefr-arfgrq";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:19:"8:cg-funxr-zhygvcyr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:19:"8:cg-funxr-cbfvgvba";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:16:"8:cg-funxr-rzcgl";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:15:"8:cg-ybt-urnqre";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:13:"8:cg-ybt-anzr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:13:"8:cg-ybt-znex";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:15:"8:cg-ybt-haznex";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:15:"8:cg-ybt-zbirbx";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:16:"8:cg-ybt-zbirabx";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:23:"8:cg-ybt-qryrgr-shyy-bx";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:cg-ybt-qryrgr-shyy-abx";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:23:"8:cg-ybt-qryrgr-ynat-bx";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:cg-ybt-qryrgr-ynat-abx";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:18:"8:cg-ybt-rapbhentr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:19:"8:cg-ybt-qvfpbhentr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:29:"8:cg-ybt-cevbevgl-ynatf-hafrg";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:23:"8:cg-ybt-cevbevgl-ynatf";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:29:"8:cg-ybt-cevbevgl-ynatf-sbepr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:33:"8:cg-ybt-nttertngrtebhc-nffbpvngr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:34:"8:cg-ybt-nttertngrtebhc-qvffbpvngr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:19:"8:cg-zbircntr-gvgyr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:22:"8:cg-zbircntr-oybpxref";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:31:"8:cg-zbircntr-oybpx-onfr-rkvfgf";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:32:"8:cg-zbircntr-oybpx-onfr-vainyvq";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:29:"8:cg-zbircntr-oybpx-gc-rkvfgf";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:30:"8:cg-zbircntr-oybpx-gc-vainyvq";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:34:"8:cg-zbircntr-oybpx-frpgvba-rkvfgf";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:35:"8:cg-zbircntr-oybpx-frpgvba-vainyvq";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:34:"8:cg-zbircntr-oybpx-fhocntr-rkvfgf";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:35:"8:cg-zbircntr-oybpx-fhocntr-vainyvq";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:cg-zbircntr-yvfg-cntrf";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:30:"8:cg-zbircntr-yvfg-genafyngvba";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:26:"8:cg-zbircntr-yvfg-frpgvba";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:cg-zbircntr-yvfg-bgure";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:cg-zbircntr-yvfg-pbhag";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:20:"8:cg-zbircntr-yrtraq";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:21:"8:cg-zbircntr-pheerag";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:17:"8:cg-zbircntr-arj";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:20:"8:cg-zbircntr-ernfba";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:22:"8:cg-zbircntr-fhocntrf";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:26:"8:cg-zbircntr-npgvba-purpx";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:28:"8:cg-zbircntr-npgvba-cresbez";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:26:"8:cg-zbircntr-npgvba-bgure";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:19:"8:cg-zbircntr-vageb";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:23:"8:cg-zbircntr-ybternfba";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:21:"8:cg-zbircntr-fgnegrq";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:16:"8:cg-ybpxrq-cntr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:26:"8:cg-qryrgrcntr-ynat-gvgyr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:26:"8:cg-qryrgrcntr-shyy-gvgyr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:29:"8:cg-qryrgrcntr-vainyvq-gvgyr";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:28:"8:cg-qryrgrcntr-vainyvq-grkg";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:28:"8:cg-qryrgrcntr-npgvba-purpx";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:30:"8:cg-qryrgrcntr-npgvba-cresbez";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:28:"8:cg-qryrgrcntr-npgvba-bgure";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:27:"8:cg-qryrgrcntr-ynat-yrtraq";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:27:"8:cg-qryrgrcntr-shyy-yrtraq";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:26:"8:cg-qryrgrcntr-nal-yrtraq";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:23:"8:cg-qryrgrcntr-pheerag";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:22:"8:cg-qryrgrcntr-ernfba";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:24:"8:cg-qryrgrcntr-fhocntrf";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:26:"8:cg-qryrgrcntr-yvfg-cntrf";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:32:"8:cg-qryrgrcntr-yvfg-genafyngvba";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:28:"8:cg-qryrgrcntr-yvfg-frpgvba";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:26:"8:cg-qryrgrcntr-yvfg-bgure";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:26:"8:cg-qryrgrcntr-yvfg-pbhag";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:30:"8:cg-qryrgrcntr-shyy-ybternfba";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:30:"8:cg-qryrgrcntr-ynat-ybternfba";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:23:"8:cg-qryrgrcntr-fgnegrq";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:21:"8:cg-qryrgrcntr-vageb";a:4:{i:0;R:8849;i:1;R:801;i:2;R:3237;i:3;R:8540;}s:17:"8:gehfgrqkss-qrfp";a:3:{i:0;s:14:"ext-trustedxff";i:1;R:801;i:2;R:3237;}s:22:"8:hcybnqoynpxyvfg-qrfp";a:3:{i:0;s:23:"ext-uploadexclusionlist";i:1;R:801;i:2;R:3237;}s:24:"8:hfreqnvylpbagevof-qrfp";a:3:{i:0;s:21:"ext-userdailycontribs";i:1;R:801;i:2;R:3237;}s:10:"8:ivcfgrfg";a:3:{i:0;s:14:"ext-vipsscaler";i:1;R:801;i:2;R:3237;}s:17:"8:ivcffpnyre-qrfp";a:3:{i:0;R:9000;i:1;R:801;i:2;R:3237;}s:25:"8:ivcffpnyre-vainyvq-svyr";a:3:{i:0;R:9000;i:1;R:801;i:2;R:3237;}s:26:"8:ivcffpnyre-vainyvq-jvqgu";a:3:{i:0;R:9000;i:1;R:801;i:2;R:3237;}s:28:"8:ivcffpnyre-vainyvq-funecra";a:3:{i:0;R:9000;i:1;R:801;i:2;R:3237;}s:24:"8:ivcffpnyre-guhzo-reebe";a:3:{i:0;R:9000;i:1;R:801;i:2;R:3237;}s:24:"8:ivcffpnyre-sbez-yrtraq";a:3:{i:0;R:9000;i:1;R:801;i:2;R:3237;}s:23:"8:ivcffpnyre-sbez-jvqgu";a:3:{i:0;R:9000;i:1;R:801;i:2;R:3237;}s:22:"8:ivcffpnyre-sbez-svyr";a:3:{i:0;R:9000;i:1;R:801;i:2;R:3237;}s:32:"8:ivcffpnyre-sbez-funecra-enqvhf";a:3:{i:0;R:9000;i:1;R:801;i:2;R:3237;}s:26:"8:ivcffpnyre-sbez-ovyvarne";a:3:{i:0;R:9000;i:1;R:801;i:2;R:3237;}s:24:"8:ivcffpnyre-sbez-fhozvg";a:3:{i:0;R:9000;i:1;R:801;i:2;R:3237;}s:26:"8:ivcffpnyre-guhzof-yrtraq";a:3:{i:0;R:9000;i:1;R:801;i:2;R:3237;}s:24:"8:ivcffpnyre-guhzof-uryc";a:3:{i:0;R:9000;i:1;R:801;i:2;R:3237;}s:32:"8:ivcffpnyre-guhzof-fjvgpu-ynory";a:3:{i:0;R:9000;i:1;R:801;i:2;R:3237;}s:26:"8:ivcffpnyre-qrsnhyg-guhzo";a:3:{i:0;R:9000;i:1;R:801;i:2;R:3237;}s:23:"8:ivcffpnyre-ivcf-guhzo";a:3:{i:0;R:9000;i:1;R:801;i:2;R:3237;}s:22:"8:ivcffpnyre-fubj-obgu";a:3:{i:0;R:9000;i:1;R:801;i:2;R:3237;}s:25:"8:ivcffpnyre-fubj-qrsnhyg";a:3:{i:0;R:9000;i:1;R:801;i:2;R:3237;}s:22:"8:ivcffpnyre-fubj-ivcf";a:3:{i:0;R:9000;i:1;R:801;i:2;R:3237;}s:23:"8:evtug-ivcffpnyre-grfg";a:3:{i:0;R:9000;i:1;R:801;i:2;R:3237;}s:14:"8:ivfhnyrqvgbe";a:3:{i:0;s:16:"ext-visualeditor";i:1;R:801;i:2;R:3237;}s:21:"8:ivfhnyrqvgbefnaqobk";a:3:{i:0;R:9022;i:1;R:801;i:2;R:3237;}s:19:"8:ivfhnyrqvgbe-qrfp";a:3:{i:0;R:9022;i:1;R:801;i:2;R:3237;}s:28:"8:ivfhnyrqvgbe-fnaqobk-gvgyr";a:3:{i:0;R:9022;i:1;R:801;i:2;R:3237;}s:31:"8:ivfhnyrqvgbe-gbbygvc-jvxvgrkg";a:3:{i:0;R:9022;i:1;R:801;i:2;R:3237;}s:27:"8:ivfhnyrqvgbe-gbbygvc-wfba";a:3:{i:0;R:9022;i:1;R:801;i:2;R:3237;}s:27:"8:ivfhnyrqvgbe-gbbygvc-ugzy";a:3:{i:0;R:9022;i:1;R:801;i:2;R:3237;}s:29:"8:ivfhnyrqvgbe-gbbygvc-eraqre";a:3:{i:0;R:9022;i:1;R:801;i:2;R:3237;}s:30:"8:ivfhnyrqvgbe-gbbygvc-uvfgbel";a:3:{i:0;R:9022;i:1;R:801;i:2;R:3237;}s:27:"8:ivfhnyrqvgbe-gbbygvc-uryc";a:3:{i:0;R:9022;i:1;R:801;i:2;R:3237;}s:30:"8:ivfhnyrqvgbe-srrqonpx-cebzcg";a:3:{i:0;R:9022;i:1;R:801;i:2;R:3237;}s:36:"8:ivfhnyrqvgbe-srrqonpx-qvnybt-gvgyr";a:3:{i:0;R:9022;i:1;R:801;i:2;R:3237;}s:16:"8:jvxvuvreb-qrfp";a:3:{i:0;s:13:"ext-wikihiero";i:1;R:801;i:2;R:3237;}s:13:"8:uvrebtylcuf";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:29:"8:jvxvuvreb-fcrpvny-cntr-grkg";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:17:"8:jvxvuvreb-vachg";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:18:"8:jvxvuvreb-erfhyg";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:18:"8:jvxvuvreb-flagnk";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:19:"8:jvxvuvreb-gu-pbqr";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvuvreb-gu-zrnavat";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvuvreb-gu-rknzcyr";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:21:"8:jvxvuvreb-gu-erfhyg";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:21:"8:jvxvuvreb-frcnengbe";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:15:"8:jvxvuvreb-rby";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:25:"8:jvxvuvreb-fhcrecbfvgvba";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:25:"8:jvxvuvreb-whkgncbfvgvba";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:18:"8:jvxvuvreb-zveebe";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:16:"8:jvxvuvreb-ibvq";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:21:"8:jvxvuvreb-unys-ibvq";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:19:"8:jvxvuvreb-pbzzrag";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvuvreb-ybnq-reebe";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvuvreb-pngrtbel-n";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvuvreb-pngrtbel-o";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvuvreb-pngrtbel-p";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvuvreb-pngrtbel-q";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvuvreb-pngrtbel-r";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvuvreb-pngrtbel-s";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvuvreb-pngrtbel-t";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvuvreb-pngrtbel-u";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvuvreb-pngrtbel-v";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvuvreb-pngrtbel-x";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvuvreb-pngrtbel-y";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvuvreb-pngrtbel-z";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvuvreb-pngrtbel-a";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvuvreb-pngrtbel-b";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvuvreb-pngrtbel-c";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvuvreb-pngrtbel-d";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvuvreb-pngrtbel-e";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvuvreb-pngrtbel-f";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvuvreb-pngrtbel-g";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvuvreb-pngrtbel-h";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvuvreb-pngrtbel-i";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvuvreb-pngrtbel-j";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvuvreb-pngrtbel-k";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvuvreb-pngrtbel-l";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvuvreb-pngrtbel-m";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:23:"8:jvxvuvreb-pngrtbel-nn";a:3:{i:0;R:9035;i:1;R:801;i:2;R:3237;}s:15:"8:jvxvybir-qrfp";a:3:{i:0;s:12:"ext-wikilove";i:1;R:801;i:2;R:3237;}s:10:"8:jvxvybir";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:28:"8:jvxvybir-ranoyr-cersrerapr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:19:"8:jvxvybir-gno-grkg";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:21:"8:gbbygvc-pn-jvxvybir";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:23:"8:jvxvybir-qvnybt-gvgyr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvybir-fryrpg-glcr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:29:"8:jvxvybir-trg-fgnegrq-urnqre";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:29:"8:jvxvybir-trg-fgnegrq-yvfg-1";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:29:"8:jvxvybir-trg-fgnegrq-yvfg-2";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:29:"8:jvxvybir-trg-fgnegrq-yvfg-3";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvybir-nqq-qrgnvyf";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:16:"8:jvxvybir-vzntr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:23:"8:jvxvybir-fryrpg-vzntr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:17:"8:jvxvybir-urnqre";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:16:"8:jvxvybir-gvgyr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:24:"8:jvxvybir-ragre-zrffntr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:19:"8:jvxvybir-bzvg-fvt";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:24:"8:jvxvybir-vzntr-rknzcyr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:25:"8:jvxvybir-ohggba-cerivrj";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:18:"8:jvxvybir-cerivrj";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:17:"8:jvxvybir-abgvsl";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvybir-ohggba-fraq";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:25:"8:jvxvybir-glcr-oneafgnef";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:26:"8:jvxvybir-oneafgne-urnqre";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:26:"8:jvxvybir-oneafgne-fryrpg";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:35:"8:jvxvybir-oneafgne-bevtvany-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:33:"8:jvxvybir-oneafgne-bevtvany-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:34:"8:jvxvybir-oneafgne-bevtvany-gvgyr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:33:"8:jvxvybir-oneafgne-nqzvaf-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:31:"8:jvxvybir-oneafgne-nqzvaf-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:32:"8:jvxvybir-oneafgne-nqzvaf-gvgyr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:40:"8:jvxvybir-oneafgne-nagvinaqnyvfz-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:38:"8:jvxvybir-oneafgne-nagvinaqnyvfz-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:39:"8:jvxvybir-oneafgne-nagvinaqnyvfz-gvgyr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:36:"8:jvxvybir-oneafgne-qvyvtrapr-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:34:"8:jvxvybir-oneafgne-qvyvtrapr-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:35:"8:jvxvybir-oneafgne-qvyvtrapr-gvgyr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:36:"8:jvxvybir-oneafgne-qvcybznpl-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:34:"8:jvxvybir-oneafgne-qvcybznpl-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:35:"8:jvxvybir-oneafgne-qvcybznpl-gvgyr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:36:"8:jvxvybir-oneafgne-tbbquhzbe-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:34:"8:jvxvybir-oneafgne-tbbquhzbe-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:35:"8:jvxvybir-oneafgne-tbbquhzbe-gvgyr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:36:"8:jvxvybir-oneafgne-oevyyvnag-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:34:"8:jvxvybir-oneafgne-oevyyvnag-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:35:"8:jvxvybir-oneafgne-oevyyvnag-gvgyr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:35:"8:jvxvybir-oneafgne-pvgngvba-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:33:"8:jvxvybir-oneafgne-pvgngvba-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:34:"8:jvxvybir-oneafgne-pvgngvba-gvgyr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:35:"8:jvxvybir-oneafgne-pvivyvgl-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:33:"8:jvxvybir-oneafgne-pvivyvgl-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:34:"8:jvxvybir-oneafgne-pvivyvgl-gvgyr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:37:"8:jvxvybir-oneafgne-pbclrqvgbe-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:35:"8:jvxvybir-oneafgne-pbclrqvgbe-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:36:"8:jvxvybir-oneafgne-pbclrqvgbe-gvgyr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:35:"8:jvxvybir-oneafgne-qrsraqre-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:33:"8:jvxvybir-oneafgne-qrsraqre-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:34:"8:jvxvybir-oneafgne-qrsraqre-gvgyr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:34:"8:jvxvybir-oneafgne-rqvgbef-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:32:"8:jvxvybir-oneafgne-rqvgbef-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:33:"8:jvxvybir-oneafgne-rqvgbef-gvgyr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:36:"8:jvxvybir-oneafgne-qrfvtaref-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:34:"8:jvxvybir-oneafgne-qrfvtaref-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:35:"8:jvxvybir-oneafgne-qrfvtaref-gvgyr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:31:"8:jvxvybir-oneafgne-unys-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:29:"8:jvxvybir-oneafgne-unys-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:30:"8:jvxvybir-oneafgne-unys-gvgyr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:32:"8:jvxvybir-oneafgne-zvabe-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:30:"8:jvxvybir-oneafgne-zvabe-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:31:"8:jvxvybir-oneafgne-zvabe-gvgyr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:35:"8:jvxvybir-oneafgne-nagvfcnz-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:33:"8:jvxvybir-oneafgne-nagvfcnz-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:34:"8:jvxvybir-oneafgne-nagvfcnz-gvgyr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:40:"8:jvxvybir-oneafgne-cubgbtencuref-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:38:"8:jvxvybir-oneafgne-cubgbtencuref-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:39:"8:jvxvybir-oneafgne-cubgbtencuref-gvgyr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:35:"8:jvxvybir-oneafgne-xvaqarff-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:33:"8:jvxvybir-oneafgne-xvaqarff-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:34:"8:jvxvybir-oneafgne-xvaqarff-gvgyr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:35:"8:jvxvybir-oneafgne-ernyyvsr-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:33:"8:jvxvybir-oneafgne-ernyyvsr-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:34:"8:jvxvybir-oneafgne-ernyyvsr-gvgyr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:36:"8:jvxvybir-oneafgne-erfvyvrag-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:34:"8:jvxvybir-oneafgne-erfvyvrag-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:35:"8:jvxvybir-oneafgne-erfvyvrag-gvgyr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:34:"8:jvxvybir-oneafgne-ebfrggn-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:32:"8:jvxvybir-oneafgne-ebfrggn-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:33:"8:jvxvybir-oneafgne-ebfrggn-gvgyr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:34:"8:jvxvybir-oneafgne-fcrpvny-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:32:"8:jvxvybir-oneafgne-fcrpvny-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:33:"8:jvxvybir-oneafgne-fcrpvny-gvgyr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:34:"8:jvxvybir-oneafgne-fheerny-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:32:"8:jvxvybir-oneafgne-fheerny-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:33:"8:jvxvybir-oneafgne-fheerny-gvgyr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:35:"8:jvxvybir-oneafgne-grnzjbex-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:33:"8:jvxvybir-oneafgne-grnzjbex-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:34:"8:jvxvybir-oneafgne-grnzjbex-gvgyr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:36:"8:jvxvybir-oneafgne-grpuavpny-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:34:"8:jvxvybir-oneafgne-grpuavpny-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:35:"8:jvxvybir-oneafgne-grpuavpny-gvgyr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:35:"8:jvxvybir-oneafgne-gveryrff-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:33:"8:jvxvybir-oneafgne-gveryrff-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:34:"8:jvxvybir-oneafgne-gveryrff-gvgyr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:34:"8:jvxvybir-oneafgne-jevgref-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:32:"8:jvxvybir-oneafgne-jevgref-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:33:"8:jvxvybir-oneafgne-jevgref-gvgyr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:20:"8:jvxvybir-glcr-sbbq";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvybir-sbbq-fryrpg";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:30:"8:jvxvybir-sbbq-onxynin-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:28:"8:jvxvybir-sbbq-onxynin-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:30:"8:jvxvybir-sbbq-onxynin-urnqre";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:27:"8:jvxvybir-sbbq-orre-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:25:"8:jvxvybir-sbbq-orre-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:27:"8:jvxvybir-sbbq-orre-urnqre";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:30:"8:jvxvybir-sbbq-oebjavr-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:28:"8:jvxvybir-sbbq-oebjavr-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:30:"8:jvxvybir-sbbq-oebjavr-urnqre";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:32:"8:jvxvybir-sbbq-ohooyrgrn-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:30:"8:jvxvybir-sbbq-ohooyrgrn-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:32:"8:jvxvybir-sbbq-ohooyrgrn-urnqre";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:35:"8:jvxvybir-sbbq-purrfrohetre-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:33:"8:jvxvybir-sbbq-purrfrohetre-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:35:"8:jvxvybir-sbbq-purrfrohetre-urnqre";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:29:"8:jvxvybir-sbbq-pbbxvr-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:27:"8:jvxvybir-sbbq-pbbxvr-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:29:"8:jvxvybir-sbbq-pbbxvr-urnqre";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:29:"8:jvxvybir-sbbq-pbssrr-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:27:"8:jvxvybir-sbbq-pbssrr-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:29:"8:jvxvybir-sbbq-pbssrr-urnqre";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:26:"8:jvxvybir-sbbq-grn-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:24:"8:jvxvybir-sbbq-grn-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:26:"8:jvxvybir-sbbq-grn-urnqre";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:30:"8:jvxvybir-sbbq-phcpnxr-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:28:"8:jvxvybir-sbbq-phcpnxr-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:30:"8:jvxvybir-sbbq-phcpnxr-urnqre";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:26:"8:jvxvybir-sbbq-cvr-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:24:"8:jvxvybir-sbbq-cvr-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:26:"8:jvxvybir-sbbq-cvr-urnqre";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:35:"8:jvxvybir-sbbq-fgenjoreevrf-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:33:"8:jvxvybir-sbbq-fgenjoreevrf-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:35:"8:jvxvybir-sbbq-fgenjoreevrf-urnqre";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:35:"8:jvxvybir-sbbq-fgebbcjnsryf-bcgvba";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:33:"8:jvxvybir-sbbq-fgebbcjnsryf-qrfp";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:35:"8:jvxvybir-sbbq-fgebbcjnsryf-urnqre";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:23:"8:jvxvybir-glcr-xvggraf";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:25:"8:jvxvybir-xvggraf-urnqre";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:27:"8:jvxvybir-glcr-znxrlbhebja";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:21:"8:jvxvybir-ree-urnqre";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:20:"8:jvxvybir-ree-gvgyr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:18:"8:jvxvybir-ree-zft";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:20:"8:jvxvybir-ree-vzntr";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:24:"8:jvxvybir-ree-vzntr-onq";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:24:"8:jvxvybir-ree-vzntr-ncv";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:18:"8:jvxvybir-ree-fvt";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvybir-ree-tnyyrel";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:28:"8:jvxvybir-ree-tnyyrel-ntnva";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:26:"8:jvxvybir-ree-cerivrj-ncv";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:23:"8:jvxvybir-ree-fraq-ncv";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:18:"8:jvxvybir-fhzznel";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:23:"8:jvxvybir-jung-vf-guvf";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:28:"8:jvxvybir-jung-vf-guvf-yvax";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:23:"8:jvxvybir-naba-jneavat";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:23:"8:jvxvybir-pbzzbaf-grkg";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:23:"8:jvxvybir-pbzzbaf-yvax";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:22:"8:jvxvybir-pbzzbaf-hey";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:16:"8:jvxvybir-grezf";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:21:"8:jvxvybir-grezf-yvax";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:20:"8:jvxvybir-grezf-hey";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:13:"8:jvxvybir.wf";a:3:{i:0;R:9081;i:1;R:801;i:2;R:3237;}s:12:"8:jzvap-qrfp";a:3:{i:0;s:22:"ext-wikimediaincubator";i:1;R:801;i:2;R:3237;}s:14:"8:jzvap-znahny";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:17:"8:jzvap-yvfgjvxvf";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:16:"8:jzvap-grfgjvxv";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:21:"8:jzvap-grfgjvxv-pbqr";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:21:"8:jzvap-grfgjvxv-abar";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:25:"8:jzvap-erpragpunatrf-nyy";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:25:"8:jzvap-cersvasb-ynathntr";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:21:"8:jzvap-cersvasb-pbqr";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:24:"8:jzvap-cersvasb-cebwrpg";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:22:"8:jzvap-cersvasb-reebe";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:18:"8:jzvap-reebe-uryc";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:29:"8:jzvap-reebe-zbir-hacersvkrq";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:27:"8:jzvap-reebe-jebatynatpbqr";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:24:"8:jzvap-reebe-hacersvkrq";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:32:"8:jzvap-reebe-hacersvkrq-fhttrfg";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:25:"8:jzvap-reebe-jvxv-rkvfgf";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:25:"8:jzvap-reebe-jvxv-fvfgre";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:14:"8:enaqbzolgrfg";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:22:"8:enaqbzolgrfg-abcntrf";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:20:"8:jzvap-ivrjhfreynat";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:25:"8:jzvap-ivrjhfreynat-hfre";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:23:"8:jzvap-ivrjhfreynat-tb";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:24:"8:jzvap-hfreqbrfabgrkvfg";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:10:"8:jzvap-vc";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:20:"8:evtug-ivrjhfreynat";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:18:"8:tebhc-grfg-flfbc";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:25:"8:tebhc-grfg-flfbc-zrzore";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:22:"8:tebhccntr-grfg-flfbc";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:22:"8:tebhc-grfg-flfbc.pff";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:21:"8:tebhc-grfg-flfbc.wf";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:26:"8:jzvap-pbqr-znpebynathntr";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:23:"8:jzvap-pbqr-pbyyrpgvir";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:20:"8:jzvap-pbqr-ergverq";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:26:"8:jzvap-yvfghfref-grfgjvxv";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:30:"8:jzvap-frnepu-abperngr-abcers";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:31:"8:jzvap-frnepu-abperngr-fhttrfg";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:18:"8:jzvap-frnepujvxv";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:28:"8:jzvap-frnepujvxv-abcebwrpg";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:28:"8:jzvap-frnepujvxv-aberfhygf";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:32:"8:jzvap-frnepujvxv-fryrpgcebwrpg";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:32:"8:jzvap-frnepujvxv-vachgynathntr";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:21:"8:jzvap-frnepujvxv-tb";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:34:"8:jzvap-frnepujvxv-zhygvcyrzngpurf";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:33:"8:jzvap-frnepujvxv-zngpu-ynatpbqr";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:37:"8:jzvap-frnepujvxv-zngpu-hfreynatanzr";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:36:"8:jzvap-frnepujvxv-zngpu-ratyvfuanzr";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:35:"8:jzvap-frnepujvxv-zngpu-angviranzr";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:23:"8:jzvap-frnepujvxv-tbgb";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:31:"8:jzvap-frnepujvxv-tbgbvasbcntr";a:3:{i:0;R:9252;i:1;R:801;i:2;R:3237;}s:22:"8:jzvap-vasbcntr-ragre";a:3:{i:0;s:30:"ext-wikimediaincubatorinfopage";i:1;R:801;i:2;R:3237;}s:19:"8:jzvap-haxabjaynat";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:22:"8:jzvap-ybtb-jvxvcrqvn";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:23:"8:jzvap-ybtb-jvxgvbanel";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:22:"8:jzvap-ybtb-jvxvobbxf";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:21:"8:jzvap-ybtb-jvxvarjf";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:22:"8:jzvap-ybtb-jvxvdhbgr";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:23:"8:jzvap-ybtb-jvxvfbhepr";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:24:"8:jzvap-ybtb-jvxvirefvgl";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:22:"8:jzvap-ybtb-zrgn-jvxv";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:30:"8:jzvap-ybtb-jvxvzrqvn-pbzzbaf";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:24:"8:jzvap-ybtb-jvxvfcrpvrf";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:22:"8:jzvap-ybtb-zrqvnjvxv";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:18:"8:jzvap-znahny-hey";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:24:"8:jzvap-vasbcntr-gvgyr-c";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:24:"8:jzvap-vasbcntr-gvgyr-o";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:24:"8:jzvap-vasbcntr-gvgyr-g";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:24:"8:jzvap-vasbcntr-gvgyr-d";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:24:"8:jzvap-vasbcntr-gvgyr-a";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:24:"8:jzvap-vasbcntr-gvgyr-f";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:24:"8:jzvap-vasbcntr-gvgyr-i";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:24:"8:jzvap-vasbcntr-jrypbzr";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:33:"8:jzvap-vasbcntr-zvffvatjvxv-grkg";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:33:"8:jzvap-vasbcntr-bcgvba-fgnegjvxv";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:35:"8:jzvap-vasbcntr-bcgvba-fgnegfvfgre";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:42:"8:jzvap-vasbcntr-bcgvba-ynathntrf-rkvfgvat";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:47:"8:jzvap-vasbcntr-bcgvba-fvfgrecebwrpgf-rkvfgvat";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:44:"8:jzvap-vasbcntr-bcgvba-fvfgrecebwrpgf-bgure";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:36:"8:jzvap-vasbcntr-bcgvba-zhygvyvathny";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:31:"8:jzvap-vasbcntr-perngrznvacntr";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:24:"8:jzvap-vasbcntr-cersvyy";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:27:"8:jzvap-vasbcntr-pbagevohgr";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:32:"8:jzvap-vasbcntr-fgnghf-vzcbegrq";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:36:"8:jzvap-vasbcntr-fgnghf-pybfrqfvfgre";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:31:"8:jzvap-vasbcntr-fgnghf-perngrq";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:39:"8:jzvap-vasbcntr-fgnghf-orsbervaphongbe";a:3:{i:0;R:9303;i:1;R:801;i:2;R:3237;}s:23:"8:mrebengrqzbovyrnpprff";a:3:{i:0;s:25:"ext-zeroratedmobileaccess";i:1;R:801;i:2;R:3237;}s:31:"8:mreb-engrq-zbovyr-npprff-qrfp";a:3:{i:0;R:9340;i:1;R:801;i:2;R:3237;}s:33:"8:mreb-engrq-zbovyr-npprff-frnepu";a:3:{i:0;R:9340;i:1;R:801;i:2;R:3237;}s:53:"8:mreb-engrq-zbovyr-npprff-ynathntr-bcgvbaf-jvxv-cntr";a:3:{i:0;R:9340;i:1;R:801;i:2;R:3237;}s:52:"8:mreb-engrq-zbovyr-npprff-pneevre-bcgvbaf-jvxv-cntr";a:3:{i:0;R:9340;i:1;R:801;i:2;R:3237;}s:45:"8:mreb-engrq-zbovyr-npprff-ynathntr-fryrpgvba";a:3:{i:0;R:9340;i:1;R:801;i:2;R:3237;}s:46:"8:mreb-engrq-zbovyr-npprff-ubzr-cntr-fryrpgvba";a:3:{i:0;R:9340;i:1;R:801;i:2;R:3237;}s:51:"8:mreb-engrq-zbovyr-npprff-ubzr-cntr-fryrpgvba-grkg";a:3:{i:0;R:9340;i:1;R:801;i:2;R:3237;}s:38:"8:mreb-engrq-zbovyr-npprff-onaare-grkg";a:3:{i:0;R:9340;i:1;R:801;i:2;R:3237;}s:43:"8:mreb-engrq-zbovyr-npprff-onaare-grkg-qvtv";a:3:{i:0;R:9340;i:1;R:801;i:2;R:3237;}s:48:"8:mreb-engrq-zbovyr-npprff-onaare-grkg-jvxvzrqvn";a:3:{i:0;R:9340;i:1;R:801;i:2;R:3237;}s:51:"8:mreb-engrq-zbovyr-npprff-onaare-grkg-qngn-punetrf";a:3:{i:0;R:9340;i:1;R:801;i:2;R:3237;}s:55:"8:mreb-engrq-zbovyr-npprff-onaare-grkg-qngn-punetrf-lrf";a:3:{i:0;R:9340;i:1;R:801;i:2;R:3237;}s:54:"8:mreb-engrq-zbovyr-npprff-onaare-grkg-qngn-punetrf-ab";a:3:{i:0;R:9340;i:1;R:801;i:2;R:3237;}s:46:"8:mreb-engrq-zbovyr-npprff-pyvpx-gb-ivrj-vzntr";a:3:{i:0;R:9340;i:1;R:801;i:2;R:3237;}s:10:"8:nop-qrfp";a:2:{i:0;s:7:"ext-abc";i:1;R:801;}s:13:"8:nopqbjaybnq";a:2:{i:0;R:9356;i:1;R:801;}s:8:"8:nopnop";a:2:{i:0;R:9356;i:1;R:801;}s:8:"8:nopcqs";a:2:{i:0;R:9356;i:1;R:801;}s:7:"8:nopcf";a:2:{i:0;R:9356;i:1;R:801;}s:9:"8:nopzvqv";a:2:{i:0;R:9356;i:1;R:801;}s:11:"8:nopibeovf";a:2:{i:0;R:9356;i:1;R:801;}s:25:"8:nofragrrynaqybeq-ernfba";a:2:{i:0;s:20:"ext-absenteelandlord";i:1;R:801;}s:23:"8:nofragrrynaqybeq-qrfp";a:2:{i:0;R:9364;i:1;R:801;}s:21:"8:nqqzrqvnjvmneq-qrfp";a:2:{i:0;s:18:"ext-addmediawizard";i:1;R:801;}s:24:"8:nqqzrqvnjvmneq-ybnqvat";a:2:{i:0;R:9367;i:1;R:801;}s:31:"8:zjr-hcybnq-fgngf-svyrcebterff";a:2:{i:0;s:27:"ext-addmediawizard-addmedia";i:1;R:801;}s:25:"8:zjr-hcybnq-haxabja-fvmr";a:2:{i:0;R:9370;i:1;R:801;}s:19:"8:zjr-pnapry-pbasvz";a:2:{i:0;R:9370;i:1;R:801;}s:22:"8:zjr-fhpprffshyhcybnq";a:2:{i:0;R:9370;i:1;R:801;}s:17:"8:zjr-hcybnqreebe";a:2:{i:0;R:9370;i:1;R:801;}s:19:"8:zjr-hcybnqjneavat";a:2:{i:0;R:9370;i:1;R:801;}s:19:"8:zjr-haxabja-reebe";a:2:{i:0;R:9370;i:1;R:801;}s:20:"8:zjr-erghea-gb-sbez";a:2:{i:0;R:9370;i:1;R:801;}s:27:"8:zjr-svyr-rkvfgf-qhcyvpngr";a:2:{i:0;R:9370;i:1;R:801;}s:16:"8:zjr-svyrrkvfgf";a:2:{i:0;R:9370;i:1;R:801;}s:22:"8:zjr-svyrrkvfgf-guhzo";a:2:{i:0;R:9370;i:1;R:801;}s:19:"8:zjr-vtaberjneavat";a:2:{i:0;R:9370;i:1;R:801;}s:23:"8:zjr-svyr-guhzoanvy-ab";a:2:{i:0;R:9370;i:1;R:801;}s:20:"8:zjr-tb-gb-erfbhepr";a:2:{i:0;R:9370;i:1;R:801;}s:23:"8:zjr-hcybnq-zvfp-reebe";a:2:{i:0;R:9370;i:1;R:801;}s:34:"8:zjr-jtsbtt_jneavat_onq_rkgrafvba";a:2:{i:0;R:9370;i:1;R:801;}s:20:"8:zjr-guhzoanvy-zber";a:2:{i:0;R:9370;i:1;R:801;}s:20:"8:zjr-yvprafr-urnqre";a:2:{i:0;R:9370;i:1;R:801;}s:14:"8:zjr-svyrqrfp";a:2:{i:0;R:9370;i:1;R:801;}s:16:"8:zjr-svyrfbhepr";a:2:{i:0;R:9370;i:1;R:801;}s:16:"8:zjr-svyrfgnghf";a:2:{i:0;R:9370;i:1;R:801;}s:27:"8:zjr-ybnqvat-nqq-zrqvn-jvm";a:2:{i:0;R:9370;i:1;R:801;}s:19:"8:zjr-vzcbegrq_sebz";a:2:{i:0;R:9370;i:1;R:801;}s:24:"8:zjr-vzcbeg-qrfpevcgvba";a:2:{i:0;R:9370;i:1;R:801;}s:17:"8:zjr-fryrpg_svyr";a:2:{i:0;R:9370;i:1;R:801;}s:22:"8:zjr-yvprafr_pp-ol-fn";a:2:{i:0;R:9370;i:1;R:801;}s:12:"8:zjr-hcybnq";a:2:{i:0;R:9370;i:1;R:801;}s:18:"8:zjr-qrfgsvyranzr";a:2:{i:0;R:9370;i:1;R:801;}s:13:"8:zjr-fhzznel";a:2:{i:0;R:9370;i:1;R:801;}s:18:"8:zjr-qngr-bs-jbex";a:2:{i:0;R:9370;i:1;R:801;}s:24:"8:zjr-reebe_abg_ybttrqva";a:2:{i:0;R:9370;i:1;R:801;}s:29:"8:zjr-reebe-abg-ybttrqva-svyr";a:2:{i:0;R:9370;i:1;R:801;}s:24:"8:zjr-hcybnq-va-cebterff";a:2:{i:0;R:9370;i:1;R:801;}s:21:"8:zjr-hcybnqrq-fgnghf";a:2:{i:0;R:9370;i:1;R:801;}s:23:"8:zjr-genafpbqrq-fgnghf";a:2:{i:0;R:9370;i:1;R:801;}s:29:"8:zjr-hcybnqrq-gvzr-erznvavat";a:2:{i:0;R:9370;i:1;R:801;}s:17:"8:zjr-hcybnq-qbar";a:2:{i:0;R:9370;i:1;R:801;}s:22:"8:zjr-nqq_zrqvn_jvmneq";a:2:{i:0;R:9370;i:1;R:801;}s:18:"8:zjr-zrqvn_frnepu";a:2:{i:0;R:9370;i:1;R:801;}s:19:"8:zjr-nz-obk_ynlbhg";a:2:{i:0;R:9370;i:1;R:801;}s:20:"8:zjr-nz-yvfg_ynlbhg";a:2:{i:0;R:9370;i:1;R:801;}s:21:"8:zjr-nz-erfhygf_qrfp";a:2:{i:0;R:9370;i:1;R:801;}s:27:"8:zjr-nz-erfhygf_qrfp_gbgny";a:2:{i:0;R:9370;i:1;R:801;}s:21:"8:zjr-nz-erfhygf_arkg";a:2:{i:0;R:9370;i:1;R:801;}s:21:"8:zjr-nz-erfhygf_ceri";a:2:{i:0;R:9370;i:1;R:801;}s:19:"8:zjr-nz-ab_erfhygf";a:2:{i:0;R:9370;i:1;R:801;}s:16:"8:zjr-hcybnq_gno";a:2:{i:0;R:9370;i:1;R:801;}s:15:"8:zjr-nz-ynlbhg";a:2:{i:0;R:9370;i:1;R:801;}s:22:"8:zjr-nz-erfbhepr_rqvg";a:2:{i:0;R:9370;i:1;R:801;}s:31:"8:zjr-erfbhepr_qrfpevcgvba_cntr";a:2:{i:0;R:9370;i:1;R:801;}s:10:"8:zjr-yvax";a:2:{i:0;R:9370;i:1;R:801;}s:18:"8:zjr-nz-qb_vafreg";a:2:{i:0;R:9370;i:1;R:801;}s:14:"8:zjr-pp_gvgyr";a:2:{i:0;R:9370;i:1;R:801;}s:17:"8:zjr-pp_ol_gvgyr";a:2:{i:0;R:9370;i:1;R:801;}s:17:"8:zjr-pp_ap_gvgyr";a:2:{i:0;R:9370;i:1;R:801;}s:17:"8:zjr-pp_aq_gvgyr";a:2:{i:0;R:9370;i:1;R:801;}s:17:"8:zjr-pp_fn_gvgyr";a:2:{i:0;R:9370;i:1;R:801;}s:17:"8:zjr-pp_cq_gvgyr";a:2:{i:0;R:9370;i:1;R:801;}s:21:"8:zjr-haxabja_yvprafr";a:2:{i:0;R:9370;i:1;R:801;}s:22:"8:zjr-ab-vzcbeg-ol-hey";a:2:{i:0;R:9370;i:1;R:801;}s:31:"8:zjr-ab-vzcbeg-ol-hey-yvaxgrkg";a:2:{i:0;R:9370;i:1;R:801;}s:18:"8:zjr-erfhygf_sebz";a:2:{i:0;R:9370;i:1;R:801;}s:29:"8:zjr-zvffvat_qrfp_frr_fbhepr";a:2:{i:0;R:9370;i:1;R:801;}s:21:"8:zjr-nz-pbasvt_reebe";a:2:{i:0;R:9370;i:1;R:801;}s:25:"8:zjr-lbhe-erprag-hcybnqf";a:2:{i:0;R:9370;i:1;R:801;}s:28:"8:zjr-lbhe-erprag-hcybnqf-gb";a:2:{i:0;R:9370;i:1;R:801;}s:23:"8:zjr-ab_erprag_hcybnqf";a:2:{i:0;R:9370;i:1;R:801;}s:27:"8:zjr-abg-ybttrq-va-hcybnqf";a:2:{i:0;R:9370;i:1;R:801;}s:22:"8:zjr-vr-rlr-crezvfvba";a:2:{i:0;R:9370;i:1;R:801;}s:19:"8:zjr-hcybnq-n-svyr";a:2:{i:0;R:9370;i:1;R:801;}s:22:"8:zjr-hcybnq-n-svyr-gb";a:2:{i:0;R:9370;i:1;R:801;}s:24:"8:zjr-erfbhepr_cntr_qrfp";a:2:{i:0;R:9370;i:1;R:801;}s:24:"8:zjr-rqvg_erfbhepr_qrfp";a:2:{i:0;R:9370;i:1;R:801;}s:26:"8:zjr-ybpny_erfbhepr_gvgyr";a:2:{i:0;R:9370;i:1;R:801;}s:21:"8:zjr-jngpu_guvf_cntr";a:2:{i:0;R:9370;i:1;R:801;}s:24:"8:zjr-qb_vzcbeg_erfbhepr";a:2:{i:0;R:9370;i:1;R:801;}s:20:"8:zjr-hcqngr_cerivrj";a:2:{i:0;R:9370;i:1;R:801;}s:27:"8:zjr-erghea-frnepu-erfhygf";a:2:{i:0;R:9370;i:1;R:801;}s:21:"8:zjr-vzcbegvat_nffrg";a:2:{i:0;R:9370;i:1;R:801;}s:29:"8:zjr-cerivrj_vafreg_erfbhepr";a:2:{i:0;R:9370;i:1;R:801;}s:26:"8:zjr-qb-zber-zbqvsvpngvba";a:2:{i:0;R:9370;i:1;R:801;}s:23:"8:zjr-purpxvat-erfbhepr";a:2:{i:0;R:9370;i:1;R:801;}s:27:"8:zjr-erfbhepr-arrqf-vzcbeg";a:2:{i:0;R:9370;i:1;R:801;}s:31:"8:zjr-jneavat-hcybnq-gb-pbzzbaf";a:2:{i:0;R:9370;i:1;R:801;}s:30:"8:zjr-ybpny-hcybnq-cbyvpl-yvax";a:2:{i:0;R:9370;i:1;R:801;}s:15:"8:zjr-sglcr-fit";a:2:{i:0;R:9370;i:1;R:801;}s:15:"8:zjr-sglcr-wct";a:2:{i:0;R:9370;i:1;R:801;}s:15:"8:zjr-sglcr-cat";a:2:{i:0;R:9370;i:1;R:801;}s:15:"8:zjr-sglcr-btn";a:2:{i:0;R:9370;i:1;R:801;}s:15:"8:zjr-sglcr-btt";a:2:{i:0;R:9370;i:1;R:801;}s:15:"8:zjr-sglcr-hax";a:2:{i:0;R:9370;i:1;R:801;}s:22:"8:zjr-nz-pbzzbaf-gvgyr";a:2:{i:0;R:9370;i:1;R:801;}s:16:"8:zjr-nz-pbzzbaf";a:2:{i:0;R:9370;i:1;R:801;}s:22:"8:zjr-nz-xnyghen-gvgyr";a:2:{i:0;R:9370;i:1;R:801;}s:16:"8:zjr-nz-xnyghen";a:2:{i:0;R:9370;i:1;R:801;}s:24:"8:zjr-nz-guvf_jvxv-gvgyr";a:2:{i:0;R:9370;i:1;R:801;}s:23:"8:zjr-nz-guvf_jvxv-qrfp";a:2:{i:0;R:9370;i:1;R:801;}s:26:"8:zjr-nz-nepuvir_bet-gvgyr";a:2:{i:0;R:9370;i:1;R:801;}s:25:"8:zjr-nz-nepuvir_bet-qrfp";a:2:{i:0;R:9370;i:1;R:801;}s:21:"8:zjr-nz-syvpxe-gvgyr";a:2:{i:0;R:9370;i:1;R:801;}s:20:"8:zjr-nz-syvpxe-qrfp";a:2:{i:0;R:9370;i:1;R:801;}s:22:"8:zjr-nz-zrgnivq-gvgyr";a:2:{i:0;R:9370;i:1;R:801;}s:21:"8:zjr-nz-zrgnivq-qrfp";a:2:{i:0;R:9370;i:1;R:801;}s:23:"8:zjr-nz-frnepu-gvzrbhg";a:2:{i:0;R:9370;i:1;R:801;}s:30:"8:zjr-hcybnq-genafpbqrq-fgnghf";a:2:{i:0;R:9370;i:1;R:801;}s:34:"8:zjr-hcybnq-genafpbqr-va-cebterff";a:2:{i:0;R:9370;i:1;R:801;}s:18:"8:zjr-hcybnq-zhygv";a:2:{i:0;R:9370;i:1;R:801;}s:19:"8:zjr-erivrj-hcybnq";a:2:{i:0;R:9370;i:1;R:801;}s:19:"8:zjr-pyvcrqvg-pebc";a:2:{i:0;s:27:"ext-addmediawizard-clipedit";i:1;R:801;}s:25:"8:zjr-pyvcrqvg-nccyl_pebc";a:2:{i:0;R:9479;i:1;R:801;}s:25:"8:zjr-pyvcrqvg-erfrg_pebc";a:2:{i:0;R:9479;i:1;R:801;}s:32:"8:zjr-pyvcrqvg-vafreg_vzntr_cntr";a:2:{i:0;R:9479;i:1;R:801;}s:35:"8:zjr-pyvcrqvg-vafreg_vagb_frdhrapr";a:2:{i:0;R:9479;i:1;R:801;}s:29:"8:zjr-pyvcrqvg-cerivrj_vafreg";a:2:{i:0;R:9479;i:1;R:801;}s:34:"8:zjr-pyvcrqvg-pnapry_vzntr_vafreg";a:2:{i:0;R:9479;i:1;R:801;}s:28:"8:zjr-pyvcrqvg-fp_nggevohgrf";a:2:{i:0;R:9479;i:1;R:801;}s:29:"8:zjr-pyvcrqvg-fp_vabhgcbvagf";a:2:{i:0;R:9479;i:1;R:801;}s:26:"8:zjr-pyvcrqvg-fp_bireynlf";a:2:{i:0;R:9479;i:1;R:801;}s:23:"8:zjr-pyvcrqvg-fp_nhqvb";a:2:{i:0;R:9479;i:1;R:801;}s:26:"8:zjr-pyvcrqvg-fp_qhengvba";a:2:{i:0;R:9479;i:1;R:801;}s:34:"8:zjr-pyvcrqvg-grzcyngr_cebcregvrf";a:2:{i:0;R:9479;i:1;R:801;}s:27:"8:zjr-pyvcrqvg-phfgbz_gvgyr";a:2:{i:0;R:9479;i:1;R:801;}s:30:"8:zjr-pyvcrqvg-rqvg_cebcregvrf";a:2:{i:0;R:9479;i:1;R:801;}s:31:"8:zjr-pyvcrqvg-bgure_cebcregvrf";a:2:{i:0;R:9479;i:1;R:801;}s:28:"8:zjr-pyvcrqvg-erfbhepr_cntr";a:2:{i:0;R:9479;i:1;R:801;}s:32:"8:zjr-pyvcrqvg-frg_va_bhg_cbvagf";a:2:{i:0;R:9479;i:1;R:801;}s:25:"8:zjr-pyvcrqvg-fgneg_gvzr";a:2:{i:0;R:9479;i:1;R:801;}s:23:"8:zjr-pyvcrqvg-raq_gvzr";a:2:{i:0;R:9479;i:1;R:801;}s:28:"8:zjr-pyvcrqvg-cerivrj_vabhg";a:2:{i:0;R:9479;i:1;R:801;}s:25:"8:zjr-pyvcrqvg-rqvg-gbbyf";a:2:{i:0;R:9479;i:1;R:801;}s:33:"8:zjr-pyvcrqvg-vayvar-qrfpevcgvba";a:2:{i:0;R:9479;i:1;R:801;}s:31:"8:zjr-pyvcrqvg-rqvg-ivqrb-gbbyf";a:2:{i:0;R:9479;i:1;R:801;}s:23:"8:zjr-pyvcrqvg-qhengvba";a:2:{i:0;R:9479;i:1;R:801;}s:21:"8:zjr-pyvcrqvg-ynlbhg";a:2:{i:0;R:9479;i:1;R:801;}s:27:"8:zjr-pyvcrqvg-ynlbhg_evtug";a:2:{i:0;R:9479;i:1;R:801;}s:26:"8:zjr-pyvcrqvg-ynlbhg_yrsg";a:2:{i:0;R:9479;i:1;R:801;}s:28:"8:sbtt-jbag-hcybnq-gb-freire";a:2:{i:0;s:30:"ext-addmediawizard-firefogggui";i:1;R:801;}s:22:"8:sbtt-fnir_ybpny_svyr";a:2:{i:0;R:9508;i:1;R:801;}s:18:"8:sbtt-uryc-fgvpxl";a:2:{i:0;R:9508;i:1;R:801;}s:16:"8:sbtt-pt-cerfrg";a:2:{i:0;R:9508;i:1;R:801;}s:17:"8:sbtt-pt-dhnyvgl";a:2:{i:0;R:9508;i:1;R:801;}s:14:"8:sbtt-pt-zrgn";a:2:{i:0;R:9508;i:1;R:801;}s:15:"8:sbtt-pt-enatr";a:2:{i:0;R:9508;i:1;R:801;}s:18:"8:sbtt-pt-nqiivqrb";a:2:{i:0;R:9508;i:1;R:801;}s:18:"8:sbtt-pt-nqinhqvb";a:2:{i:0;R:9508;i:1;R:801;}s:20:"8:sbtt-cerfrg-phfgbz";a:2:{i:0;R:9508;i:1;R:801;}s:20:"8:sbtt-jroivqrb-qrfp";a:2:{i:0;R:9508;i:1;R:801;}s:25:"8:sbtt-fnironaqjvqgu-qrfp";a:2:{i:0;R:9508;i:1;R:801;}s:23:"8:sbtt-uvtudhnyvgl-qrfp";a:2:{i:0;R:9508;i:1;R:801;}s:25:"8:sbtt-jroivqrb-jroz-qrfp";a:2:{i:0;R:9508;i:1;R:801;}s:28:"8:sbtt-uvtudhnyvgl-jroz-qrfp";a:2:{i:0;R:9508;i:1;R:801;}s:25:"8:sbtt-ivqrbdhnyvgl-gvgyr";a:2:{i:0;R:9508;i:1;R:801;}s:24:"8:sbtt-ivqrbdhnyvgl-uryc";a:2:{i:0;R:9508;i:1;R:801;}s:22:"8:sbtt-fgneggvzr-gvgyr";a:2:{i:0;R:9508;i:1;R:801;}s:21:"8:sbtt-fgneggvzr-uryc";a:2:{i:0;R:9508;i:1;R:801;}s:20:"8:sbtt-raqgvzr-gvgyr";a:2:{i:0;R:9508;i:1;R:801;}s:19:"8:sbtt-raqgvzr-uryc";a:2:{i:0;R:9508;i:1;R:801;}s:25:"8:sbtt-nhqvbdhnyvgl-gvgyr";a:2:{i:0;R:9508;i:1;R:801;}s:24:"8:sbtt-nhqvbdhnyvgl-uryc";a:2:{i:0;R:9508;i:1;R:801;}s:23:"8:sbtt-ivqrbpbqrp-gvgyr";a:2:{i:0;R:9508;i:1;R:801;}s:22:"8:sbtt-ivqrbpbqrp-uryc";a:2:{i:0;R:9508;i:1;R:801;}s:23:"8:sbtt-nhqvbpbqrp-gvgyr";a:2:{i:0;R:9508;i:1;R:801;}s:22:"8:sbtt-nhqvbpbqrp-uryc";a:2:{i:0;R:9508;i:1;R:801;}s:18:"8:sbtt-jvqgu-gvgyr";a:2:{i:0;R:9508;i:1;R:801;}s:17:"8:sbtt-jvqgu-uryc";a:2:{i:0;R:9508;i:1;R:801;}s:19:"8:sbtt-urvtug-gvgyr";a:2:{i:0;R:9508;i:1;R:801;}s:18:"8:sbtt-urvtug-uryc";a:2:{i:0;R:9508;i:1;R:801;}s:25:"8:sbtt-ivqrbovgengr-gvgyr";a:2:{i:0;R:9508;i:1;R:801;}s:24:"8:sbtt-ivqrbovgengr-uryc";a:2:{i:0;R:9508;i:1;R:801;}s:20:"8:sbtt-gjbcnff-gvgyr";a:2:{i:0;R:9508;i:1;R:801;}s:19:"8:sbtt-gjbcnff-uryc";a:2:{i:0;R:9508;i:1;R:801;}s:22:"8:sbtt-senzrengr-gvgyr";a:2:{i:0;R:9508;i:1;R:801;}s:21:"8:sbtt-senzrengr-uryc";a:2:{i:0;R:9508;i:1;R:801;}s:19:"8:sbtt-nfcrpg-gvgyr";a:2:{i:0;R:9508;i:1;R:801;}s:18:"8:sbtt-nfcrpg-uryc";a:2:{i:0;R:9508;i:1;R:801;}s:29:"8:sbtt-xrlsenzrvagreiny-gvgyr";a:2:{i:0;R:9508;i:1;R:801;}s:28:"8:sbtt-xrlsenzrvagreiny-uryc";a:2:{i:0;R:9508;i:1;R:801;}s:20:"8:sbtt-qrabvfr-gvgyr";a:2:{i:0;R:9508;i:1;R:801;}s:19:"8:sbtt-qrabvfr-uryc";a:2:{i:0;R:9508;i:1;R:801;}s:20:"8:sbtt-abivqrb-gvgyr";a:2:{i:0;R:9508;i:1;R:801;}s:19:"8:sbtt-abivqrb-uryc";a:2:{i:0;R:9508;i:1;R:801;}s:25:"8:sbtt-nhqvbovgengr-gvgyr";a:2:{i:0;R:9508;i:1;R:801;}s:23:"8:sbtt-fnzcyrengr-gvgyr";a:2:{i:0;R:9508;i:1;R:801;}s:22:"8:sbtt-fnzcyrengr-uryc";a:2:{i:0;R:9508;i:1;R:801;}s:20:"8:sbtt-abnhqvb-gvgyr";a:2:{i:0;R:9508;i:1;R:801;}s:19:"8:sbtt-abnhqvb-uryc";a:2:{i:0;R:9508;i:1;R:801;}s:18:"8:sbtt-gvgyr-gvgyr";a:2:{i:0;R:9508;i:1;R:801;}s:17:"8:sbtt-gvgyr-uryc";a:2:{i:0;R:9508;i:1;R:801;}s:19:"8:sbtt-negvfg-gvgyr";a:2:{i:0;R:9508;i:1;R:801;}s:18:"8:sbtt-negvfg-uryc";a:2:{i:0;R:9508;i:1;R:801;}s:17:"8:sbtt-qngr-gvgyr";a:2:{i:0;R:9508;i:1;R:801;}s:16:"8:sbtt-qngr-uryc";a:2:{i:0;R:9508;i:1;R:801;}s:21:"8:sbtt-ybpngvba-gvgyr";a:2:{i:0;R:9508;i:1;R:801;}s:20:"8:sbtt-ybpngvba-uryc";a:2:{i:0;R:9508;i:1;R:801;}s:25:"8:sbtt-betnavmngvba-gvgyr";a:2:{i:0;R:9508;i:1;R:801;}s:24:"8:sbtt-betnavmngvba-uryc";a:2:{i:0;R:9508;i:1;R:801;}s:22:"8:sbtt-pbclevtug-gvgyr";a:2:{i:0;R:9508;i:1;R:801;}s:21:"8:sbtt-pbclevtug-uryc";a:2:{i:0;R:9508;i:1;R:801;}s:20:"8:sbtt-yvprafr-gvgyr";a:2:{i:0;R:9508;i:1;R:801;}s:19:"8:sbtt-yvprafr-uryc";a:2:{i:0;R:9508;i:1;R:801;}s:20:"8:sbtt-pbagnpg-gvgyr";a:2:{i:0;R:9508;i:1;R:801;}s:19:"8:sbtt-pbagnpg-uryc";a:2:{i:0;R:9508;i:1;R:801;}s:27:"8:sbtt-zvffvat-jroz-fhccbeg";a:2:{i:0;R:9508;i:1;R:801;}s:16:"8:sbtt-thv-gvgyr";a:2:{i:0;R:9508;i:1;R:801;}s:18:"8:sbtt-genafpbqvat";a:2:{i:0;R:9508;i:1;R:801;}s:18:"8:sbtt-fryrpg_svyr";a:2:{i:0;R:9508;i:1;R:801;}s:22:"8:sbtt-fryrpg_arj_svyr";a:2:{i:0;R:9508;i:1;R:801;}s:17:"8:sbtt-fryrpg_hey";a:2:{i:0;R:9508;i:1;R:801;}s:25:"8:sbtt-purpx_sbe_sversbtt";a:2:{i:0;R:9508;i:1;R:801;}s:16:"8:sbtt-vafgnyyrq";a:2:{i:0;R:9508;i:1;R:801;}s:20:"8:sbtt-abg-vafgnyyrq";a:2:{i:0;R:9508;i:1;R:801;}s:27:"8:sbtt-sbe_vzcebirq_hcybnqf";a:2:{i:0;R:9508;i:1;R:801;}s:21:"8:sbtt-cyrnfr-vafgnyy";a:2:{i:0;R:9508;i:1;R:801;}s:38:"8:sbtt-cyrnfr-vafgnyy-vafgnyy-yvaxgrkg";a:2:{i:0;R:9508;i:1;R:801;}s:36:"8:sbtt-cyrnfr-vafgnyy-nobhg-yvaxgrkg";a:2:{i:0;R:9508;i:1;R:801;}s:25:"8:sbtt-hfr_yngrfg_sversbk";a:2:{i:0;R:9508;i:1;R:801;}s:21:"8:sbtt-yngrfg-sversbk";a:2:{i:0;R:9508;i:1;R:801;}s:23:"8:sbtt-cnffguebhtu_zbqr";a:2:{i:0;R:9508;i:1;R:801;}s:20:"8:sbtt-rapbqvat-qbar";a:2:{i:0;R:9508;i:1;R:801;}s:15:"8:sbtt-onqgbxra";a:2:{i:0;R:9508;i:1;R:801;}s:14:"8:sbtt-cerivrj";a:2:{i:0;R:9508;i:1;R:801;}s:18:"8:sbtt-uvqrcerivrj";a:2:{i:0;R:9508;i:1;R:801;}s:22:"8:sbtt-jneavat-sveroht";a:2:{i:0;R:9508;i:1;R:801;}s:9:"8:nqqguvf";a:2:{i:0;s:11:"ext-addthis";i:1;R:801;}s:14:"8:nqqguvf-qrfp";a:2:{i:0;R:9596;i:1;R:801;}s:11:"8:nqznantre";a:2:{i:0;s:13:"ext-admanager";i:1;R:801;}s:16:"8:nqznantrembarf";a:2:{i:0;R:9599;i:1;R:801;}s:16:"8:nqznantre-qrfp";a:2:{i:0;R:9599;i:1;R:801;}s:16:"8:nqznantre_qbph";a:2:{i:0;R:9599;i:1;R:801;}s:21:"8:nqznantrembarf_qbph";a:2:{i:0;R:9599;i:1;R:801;}s:29:"8:nqznantre_vainyvqgnetrgcntr";a:2:{i:0;R:9599;i:1;R:801;}s:33:"8:nqznantre_vainyvqgnetrgpngrtbel";a:2:{i:0;R:9599;i:1;R:801;}s:19:"8:nqznantre_abgnoyr";a:2:{i:0;R:9599;i:1;R:801;}s:28:"8:nqznantre_abnqznantrembarf";a:2:{i:0;R:9599;i:1;R:801;}s:21:"8:nqznantre_ynorycntr";a:2:{i:0;R:9599;i:1;R:801;}s:25:"8:nqznantre_ynorypngrtbel";a:2:{i:0;R:9599;i:1;R:801;}s:18:"8:nqznantre_fhozvg";a:2:{i:0;R:9599;i:1;R:801;}s:17:"8:nqznantre_abnqf";a:2:{i:0;R:9599;i:1;R:801;}s:16:"8:nqznantre_cntr";a:2:{i:0;R:9599;i:1;R:801;}s:20:"8:nqznantre_pngrtbel";a:2:{i:0;R:9599;i:1;R:801;}s:17:"8:nqznantre_nqqrq";a:2:{i:0;R:9599;i:1;R:801;}s:20:"8:nqznantre_abnqffrg";a:2:{i:0;R:9599;i:1;R:801;}s:21:"8:nqznantre_nqqrqmbar";a:2:{i:0;R:9599;i:1;R:801;}s:19:"8:nqznantre_mbarahz";a:2:{i:0;R:9599;i:1;R:801;}s:25:"8:nqznantre_mbarabgahzore";a:2:{i:0;R:9599;i:1;R:801;}s:18:"8:nqznantre_erghea";a:2:{i:0;R:9599;i:1;R:801;}s:19:"8:nqznantre_tbgbnqf";a:2:{i:0;R:9599;i:1;R:801;}s:21:"8:nqznantre_tbgbmbarf";a:2:{i:0;R:9599;i:1;R:801;}s:17:"8:evtug-nqznantre";a:2:{i:0;R:9599;i:1;R:801;}s:12:"8:nqzvayvaxf";a:2:{i:0;s:14:"ext-adminlinks";i:1;R:801;}s:17:"8:nqzvayvaxf-qrfp";a:2:{i:0;R:9624;i:1;R:801;}s:26:"8:nqzvayvaxf_qbphzragngvba";a:2:{i:0;R:9624;i:1;R:801;}s:20:"8:nqzvayvaxf_trareny";a:2:{i:0;R:9624;i:1;R:801;}s:24:"8:nqzvayvaxf_rqvgfvqrone";a:2:{i:0;R:9624;i:1;R:801;}s:20:"8:nqzvayvaxf_rqvgpff";a:2:{i:0;R:9624;i:1;R:801;}s:29:"8:nqzvayvaxf_rqvgznvacntranzr";a:2:{i:0;R:9624;i:1;R:801;}s:18:"8:nqzvayvaxf_hfref";a:2:{i:0;R:9624;i:1;R:801;}s:23:"8:nqzvayvaxf_perngrhfre";a:2:{i:0;R:9624;i:1;R:801;}s:25:"8:nqzvayvaxf_oebjfrfrnepu";a:2:{i:0;R:9624;i:1;R:801;}s:25:"8:nqzvayvaxf_vzcbegrkcbeg";a:2:{i:0;R:9624;i:1;R:801;}s:18:"8:evtug-nqzvayvaxf";a:2:{i:0;R:9624;i:1;R:801;}s:12:"8:nzrgn-qrfp";a:2:{i:0;s:16:"ext-advancedmeta";i:1;R:801;}s:20:"8:nzrgn-zrgnfrggvatf";a:2:{i:0;R:9637;i:1;R:801;}s:18:"8:nzrgn-gvgyrnyvnf";a:2:{i:0;R:9637;i:1;R:801;}s:19:"8:nzrgn-xrljbeqfnqq";a:2:{i:0;R:9637;i:1;R:801;}s:22:"8:nzrgn-xrljbeqfzbqvsl";a:2:{i:0;R:9637;i:1;R:801;}s:16:"8:nqinaprqenaqbz";a:2:{i:0;s:18:"ext-advancedrandom";i:1;R:801;}s:21:"8:nqinaprqenaqbz-qrfp";a:2:{i:0;R:9643;i:1;R:801;}s:16:"8:nwnkybtva-qrfp";a:2:{i:0;s:13:"ext-ajaxlogin";i:1;R:801;}s:12:"8:nwnkybtva1";a:2:{i:0;R:9646;i:1;R:801;}s:12:"8:nwnkybtva2";a:2:{i:0;R:9646;i:1;R:801;}s:18:"8:nwnkybtva-perngr";a:2:{i:0;R:9646;i:1;R:801;}s:15:"8:ny-abfhpuhfre";a:2:{i:0;R:9646;i:1;R:801;}s:18:"8:ny-perngroybpxrq";a:2:{i:0;R:9646;i:1;R:801;}s:14:"8:ny-guebggyrq";a:2:{i:0;R:9646;i:1;R:801;}s:15:"8:nwnkcbyy-qrfp";a:2:{i:0;s:12:"ext-ajaxpoll";i:1;R:801;}s:28:"8:nwnkcbyy-genpxvat-pngrtbel";a:2:{i:0;R:9654;i:1;R:801;}s:22:"8:nwnkcbyy-ibgr-hcqngr";a:2:{i:0;R:9654;i:1;R:801;}s:19:"8:nwnkcbyy-ibgr-nqq";a:2:{i:0;R:9654;i:1;R:801;}s:21:"8:nwnkcbyy-ibgr-reebe";a:2:{i:0;R:9654;i:1;R:801;}s:24:"8:nwnkcbyy-creprag-ibgrf";a:2:{i:0;R:9654;i:1;R:801;}s:20:"8:nwnkcbyy-lbhe-ibgr";a:2:{i:0;R:9654;i:1;R:801;}s:18:"8:nwnkcbyy-ab-ibgr";a:2:{i:0;R:9654;i:1;R:801;}s:15:"8:nwnkcbyy-vasb";a:2:{i:0;R:9654;i:1;R:801;}s:21:"8:nwnkcbyy-fhozvggvat";a:2:{i:0;R:9654;i:1;R:801;}s:26:"8:nwnkcbyy-ibgr-crezvffvba";a:2:{i:0;R:9654;i:1;R:801;}s:22:"8:nwnkcbyy-eribxr-ibgr";a:2:{i:0;R:9654;i:1;R:801;}s:23:"8:nwnkcbyy-ibgr-eribxrq";a:2:{i:0;R:9654;i:1;R:801;}s:21:"8:evtug-nwnkcbyy-ibgr";a:2:{i:0;R:9654;i:1;R:801;}s:21:"8:nwnkdhrelcntrf-qrfp";a:2:{i:0;s:18:"ext-ajaxquerypages";i:1;R:801;}s:22:"8:nwnkfubjrqvgbef-qrfp";a:2:{i:0;s:19:"ext-ajaxshoweditors";i:1;R:801;}s:15:"8:nwnk-fr-gvgyr";a:2:{i:0;R:9671;i:1;R:801;}s:17:"8:nwnk-fr-craqvat";a:2:{i:0;R:9671;i:1;R:801;}s:16:"8:nwnk-fr-vqyvat";a:2:{i:0;R:9671;i:1;R:801;}s:26:"8:nwnk-fr-cntrqbrfabgrkvfg";a:2:{i:0;R:9671;i:1;R:801;}s:21:"8:nwnk-fr-hfrevainyvq";a:2:{i:0;R:9671;i:1;R:801;}s:22:"8:nwnk-fr-hfreabgsbhaq";a:2:{i:0;R:9671;i:1;R:801;}s:17:"8:nznmbacyhf-qrfp";a:2:{i:0;s:14:"ext-amazonplus";i:1;R:801;}s:18:"8:nznmbacyhf-aberf";a:2:{i:0;R:9679;i:1;R:801;}s:20:"8:nznmbacyhf-abvqerf";a:2:{i:0;R:9679;i:1;R:801;}s:19:"8:nznmbacyhf-stpree";a:2:{i:0;R:9679;i:1;R:801;}s:19:"8:nznmbacyhf-fyfree";a:2:{i:0;R:9679;i:1;R:801;}s:17:"8:nznmbacyhf-hfrq";a:2:{i:0;R:9679;i:1;R:801;}s:19:"8:nznmbacyhf-trezna";a:2:{i:0;R:9679;i:1;R:801;}s:19:"8:nznmbacyhf-serapu";a:2:{i:0;R:9679;i:1;R:801;}s:21:"8:nznmbacyhf-wncnarfr";a:2:{i:0;R:9679;i:1;R:801;}s:20:"8:nznmbacyhf-ratyvfu";a:2:{i:0;R:9679;i:1;R:801;}s:19:"8:nznmbacyhf-nznmba";a:2:{i:0;R:9679;i:1;R:801;}s:16:"8:nznmbacyhf-arj";a:2:{i:0;R:9679;i:1;R:801;}s:19:"8:nznmbacyhf-fgnghf";a:2:{i:0;R:9679;i:1;R:801;}s:17:"8:nznmbacyhf-abar";a:2:{i:0;R:9679;i:1;R:801;}s:21:"8:nznmbacyhf-pheerapl";a:2:{i:0;R:9679;i:1;R:801;}s:20:"8:nznmbacyhf-pc-abar";a:2:{i:0;R:9679;i:1;R:801;}s:19:"8:nznmbacyhf-pc-hfq";a:2:{i:0;R:9679;i:1;R:801;}s:19:"8:nznmbacyhf-pc-pnq";a:2:{i:0;R:9679;i:1;R:801;}s:19:"8:nznmbacyhf-pc-toc";a:2:{i:0;R:9679;i:1;R:801;}s:19:"8:nznmbacyhf-pc-rhe";a:2:{i:0;R:9679;i:1;R:801;}s:19:"8:nznmbacyhf-pc-wcl";a:2:{i:0;R:9679;i:1;R:801;}s:17:"8:nznmbacyhf-zber";a:2:{i:0;R:9679;i:1;R:801;}s:17:"8:nznmbacyhf-yrff";a:2:{i:0;R:9679;i:1;R:801;}s:5:"8:ncp";a:2:{i:0;s:7:"ext-apc";i:1;R:801;}s:10:"8:ncp-qrfp";a:2:{i:0;R:9703;i:1;R:801;}s:11:"8:evtug-ncp";a:2:{i:0;R:9703;i:1;R:801;}s:27:"8:ivrjncp-ncp-abg-ninvynoyr";a:2:{i:0;R:9703;i:1;R:801;}s:23:"8:ivrjncp-pyrne-pbasvez";a:2:{i:0;R:9703;i:1;R:801;}s:26:"8:ivrjncp-pyrne-hfre-pnpur";a:2:{i:0;R:9703;i:1;R:801;}s:26:"8:ivrjncp-pyrne-pbqr-pnpur";a:2:{i:0;R:9703;i:1;R:801;}s:20:"8:ivrjncp-zbqr-fgngf";a:2:{i:0;R:9703;i:1;R:801;}s:27:"8:ivrjncp-zbqr-flfgrz-pnpur";a:2:{i:0;R:9703;i:1;R:801;}s:31:"8:ivrjncp-zbqr-flfgrz-pnpur-qve";a:2:{i:0;R:9703;i:1;R:801;}s:25:"8:ivrjncp-zbqr-hfre-pnpur";a:2:{i:0;R:9703;i:1;R:801;}s:28:"8:ivrjncp-zbqr-irefvba-purpx";a:2:{i:0;R:9703;i:1;R:801;}s:22:"8:ivrjncp-vasb-trareny";a:2:{i:0;R:9703;i:1;R:801;}s:21:"8:ivrjncp-ncp-irefvba";a:2:{i:0;R:9703;i:1;R:801;}s:21:"8:ivrjncp-cuc-irefvba";a:2:{i:0;R:9703;i:1;R:801;}s:23:"8:ivrjncp-funerq-zrzbel";a:2:{i:0;R:9703;i:1;R:801;}s:31:"8:ivrjncp-funerq-zrzbel-qrgnvyf";a:2:{i:0;R:9703;i:1;R:801;}s:20:"8:ivrjncp-fgneg-gvzr";a:2:{i:0;R:9703;i:1;R:801;}s:16:"8:ivrjncp-hcgvzr";a:2:{i:0;R:9703;i:1;R:801;}s:24:"8:ivrjncp-hcybnq-fhccbeg";a:2:{i:0;R:9703;i:1;R:801;}s:24:"8:ivrjncp-svyrpnpur-vasb";a:2:{i:0;R:9703;i:1;R:801;}s:24:"8:ivrjncp-hfrepnpur-vasb";a:2:{i:0;R:9703;i:1;R:801;}s:22:"8:ivrjncp-pnpurq-svyrf";a:2:{i:0;R:9703;i:1;R:801;}s:24:"8:ivrjncp-pnpurq-svyrf-q";a:2:{i:0;R:9703;i:1;R:801;}s:14:"8:ivrjncp-uvgf";a:2:{i:0;R:9703;i:1;R:801;}s:16:"8:ivrjncp-zvffrf";a:2:{i:0;R:9703;i:1;R:801;}s:18:"8:ivrjncp-erdhrfgf";a:2:{i:0;R:9703;i:1;R:801;}s:17:"8:ivrjncp-uvgengr";a:2:{i:0;R:9703;i:1;R:801;}s:18:"8:ivrjncp-zvffengr";a:2:{i:0;R:9703;i:1;R:801;}s:20:"8:ivrjncp-vafregengr";a:2:{i:0;R:9703;i:1;R:801;}s:19:"8:ivrjncp-pnpurshyy";a:2:{i:0;R:9703;i:1;R:801;}s:13:"8:ivrjncp-ecf";a:2:{i:0;R:9703;i:1;R:801;}s:22:"8:ivrjncp-vasb-ehagvzr";a:2:{i:0;R:9703;i:1;R:801;}s:21:"8:ivrjncp-vasb-zrzbel";a:2:{i:0;R:9703;i:1;R:801;}s:31:"8:ivrjncp-zrzbel-hfntr-qrgnvyrq";a:2:{i:0;R:9703;i:1;R:801;}s:22:"8:ivrjncp-zrzbel-hfntr";a:2:{i:0;R:9703;i:1;R:801;}s:26:"8:ivrjncp-pnpur-rssvpvrapl";a:2:{i:0;R:9703;i:1;R:801;}s:21:"8:ivrjncp-zrzbel-serr";a:2:{i:0;R:9703;i:1;R:801;}s:21:"8:ivrjncp-zrzbel-hfrq";a:2:{i:0;R:9703;i:1;R:801;}s:21:"8:ivrjncp-zrzbel-uvgf";a:2:{i:0;R:9703;i:1;R:801;}s:21:"8:ivrjncp-zrzbel-zvff";a:2:{i:0;R:9703;i:1;R:801;}s:29:"8:ivrjncp-zrzbelsentzragngvba";a:2:{i:0;R:9703;i:1;R:801;}s:28:"8:ivrjncp-sentzragngvba-vasb";a:2:{i:0;R:9703;i:1;R:801;}s:28:"8:ivrjncp-sentzragngvba-abar";a:2:{i:0;R:9703;i:1;R:801;}s:27:"8:ivrjncp-qvfcynl-nggevohgr";a:2:{i:0;R:9703;i:1;R:801;}s:23:"8:ivrjncp-qvfcynl-inyhr";a:2:{i:0;R:9703;i:1;R:801;}s:26:"8:ivrjncp-qvfcynl-svyranzr";a:2:{i:0;R:9703;i:1;R:801;}s:24:"8:ivrjncp-qvfcynl-qrivpr";a:2:{i:0;R:9703;i:1;R:801;}s:22:"8:ivrjncp-qvfcynl-vasb";a:2:{i:0;R:9703;i:1;R:801;}s:21:"8:ivrjncp-qvfcynl-ggy";a:2:{i:0;R:9703;i:1;R:801;}s:23:"8:ivrjncp-qvfcynl-vabqr";a:2:{i:0;R:9703;i:1;R:801;}s:22:"8:ivrjncp-qvfcynl-glcr";a:2:{i:0;R:9703;i:1;R:801;}s:27:"8:ivrjncp-qvfcynl-glcr-svyr";a:2:{i:0;R:9703;i:1;R:801;}s:27:"8:ivrjncp-qvfcynl-glcr-hfre";a:2:{i:0;R:9703;i:1;R:801;}s:26:"8:ivrjncp-qvfcynl-ahz_uvgf";a:2:{i:0;R:9703;i:1;R:801;}s:23:"8:ivrjncp-qvfcynl-zgvzr";a:2:{i:0;R:9703;i:1;R:801;}s:31:"8:ivrjncp-qvfcynl-perngvba_gvzr";a:2:{i:0;R:9703;i:1;R:801;}s:31:"8:ivrjncp-qvfcynl-qryrgvba_gvzr";a:2:{i:0;R:9703;i:1;R:801;}s:27:"8:ivrjncp-qvfcynl-ab-qryrgr";a:2:{i:0;R:9703;i:1;R:801;}s:29:"8:ivrjncp-qvfcynl-npprff_gvzr";a:2:{i:0;R:9703;i:1;R:801;}s:27:"8:ivrjncp-qvfcynl-ers_pbhag";a:2:{i:0;R:9703;i:1;R:801;}s:26:"8:ivrjncp-qvfcynl-zrz_fvmr";a:2:{i:0;R:9703;i:1;R:801;}s:30:"8:ivrjncp-qvfcynl-fgberq-inyhr";a:2:{i:0;R:9703;i:1;R:801;}s:25:"8:ivrjncp-qvfcynl-gbb-ovt";a:2:{i:0;R:9703;i:1;R:801;}s:27:"8:ivrjncp-yf-bcgvbaf-yrtraq";a:2:{i:0;R:9703;i:1;R:801;}s:20:"8:ivrjncp-yf-bcgvbaf";a:2:{i:0;R:9703;i:1;R:801;}s:19:"8:ivrjncp-yf-fhozvg";a:2:{i:0;R:9703;i:1;R:801;}s:24:"8:ivrjncp-yf-urnqre-anzr";a:2:{i:0;R:9703;i:1;R:801;}s:24:"8:ivrjncp-yf-urnqre-uvgf";a:2:{i:0;R:9703;i:1;R:801;}s:24:"8:ivrjncp-yf-urnqre-fvmr";a:2:{i:0;R:9703;i:1;R:801;}s:28:"8:ivrjncp-yf-urnqre-npprffrq";a:2:{i:0;R:9703;i:1;R:801;}s:28:"8:ivrjncp-yf-urnqre-zbqvsvrq";a:2:{i:0;R:9703;i:1;R:801;}s:27:"8:ivrjncp-yf-urnqre-perngrq";a:2:{i:0;R:9703;i:1;R:801;}s:27:"8:ivrjncp-yf-urnqre-qryrgrq";a:2:{i:0;R:9703;i:1;R:801;}s:27:"8:ivrjncp-yf-urnqre-gvzrbhg";a:2:{i:0;R:9703;i:1;R:801;}s:19:"8:ivrjncp-yf-qryrgr";a:2:{i:0;R:9703;i:1;R:801;}s:25:"8:ivrjncp-yf-fpbcr-npgvir";a:2:{i:0;R:9703;i:1;R:801;}s:26:"8:ivrjncp-yf-fpbcr-qryrgrq";a:2:{i:0;R:9703;i:1;R:801;}s:23:"8:ivrjncp-yf-fpbcr-obgu";a:2:{i:0;R:9703;i:1;R:801;}s:22:"8:ivrjncp-yf-fbeg-uvgf";a:2:{i:0;R:9703;i:1;R:801;}s:22:"8:ivrjncp-yf-fbeg-fvmr";a:2:{i:0;R:9703;i:1;R:801;}s:22:"8:ivrjncp-yf-fbeg-anzr";a:2:{i:0;R:9703;i:1;R:801;}s:26:"8:ivrjncp-yf-fbeg-npprffrq";a:2:{i:0;R:9703;i:1;R:801;}s:26:"8:ivrjncp-yf-fbeg-zbqvsvrq";a:2:{i:0;R:9703;i:1;R:801;}s:25:"8:ivrjncp-yf-fbeg-perngrq";a:2:{i:0;R:9703;i:1;R:801;}s:25:"8:ivrjncp-yf-fbeg-qryrgrq";a:2:{i:0;R:9703;i:1;R:801;}s:25:"8:ivrjncp-yf-fbeg-gvzrbhg";a:2:{i:0;R:9703;i:1;R:801;}s:23:"8:ivrjncp-yf-yvzvg-abar";a:2:{i:0;R:9703;i:1;R:801;}s:17:"8:ivrjncp-yf-zber";a:2:{i:0;R:9703;i:1;R:801;}s:19:"8:ivrjncp-yf-abqngn";a:2:{i:0;R:9703;i:1;R:801;}s:19:"8:ivrjncp-qryrgr-bx";a:2:{i:0;R:9703;i:1;R:801;}s:23:"8:ivrjncp-qryrgr-snvyrq";a:2:{i:0;R:9703;i:1;R:801;}s:22:"8:ivrjncp-irefvba-vasb";a:2:{i:0;R:9703;i:1;R:801;}s:27:"8:ivrjncp-irefvba-punatrybt";a:2:{i:0;R:9703;i:1;R:801;}s:24:"8:ivrjncp-irefvba-snvyrq";a:2:{i:0;R:9703;i:1;R:801;}s:20:"8:ivrjncp-irefvba-bx";a:2:{i:0;R:9703;i:1;R:801;}s:21:"8:ivrjncp-irefvba-byq";a:2:{i:0;R:9703;i:1;R:801;}s:27:"8:ivrjncp-svyrpnpur-pyrnerq";a:2:{i:0;R:9703;i:1;R:801;}s:27:"8:ivrjncp-hfrepnpur-pyrnerq";a:2:{i:0;R:9703;i:1;R:801;}s:13:"8:ncvrkcybere";a:2:{i:0;s:15:"ext-apiexplorer";i:1;R:801;}s:18:"8:ncvrkcybere-qrfp";a:2:{i:0;R:9803;i:1;R:801;}s:19:"8:ncvrkcybere-vageb";a:2:{i:0;R:9803;i:1;R:801;}s:21:"8:ncvrkcybere-ybnqvat";a:2:{i:0;R:9803;i:1;R:801;}s:18:"8:ncvfitcebkl-qrfp";a:2:{i:0;s:15:"ext-apisvgproxy";i:1;R:801;}s:19:"8:nccebirqerif-qrfp";a:2:{i:0;s:16:"ext-approvedrevs";i:1;R:801;}s:22:"8:nccebirqerif-ybtanzr";a:2:{i:0;R:9810;i:1;R:801;}s:22:"8:nccebirqerif-ybtqrfp";a:2:{i:0;R:9810;i:1;R:801;}s:22:"8:nccebirqerif-nccebir";a:2:{i:0;R:9810;i:1;R:801;}s:24:"8:nccebirqerif-hanccebir";a:2:{i:0;R:9810;i:1;R:801;}s:29:"8:nccebirqerif-nccebirfhpprff";a:2:{i:0;R:9810;i:1;R:801;}s:31:"8:nccebirqerif-hanccebirfhpprff";a:2:{i:0;R:9810;i:1;R:801;}s:32:"8:nccebirqerif-hanccebirfhpprff2";a:2:{i:0;R:9810;i:1;R:801;}s:28:"8:nccebirqerif-nccebirnpgvba";a:2:{i:0;R:9810;i:1;R:801;}s:30:"8:nccebirqerif-hanccebirnpgvba";a:2:{i:0;R:9810;i:1;R:801;}s:24:"8:nccebirqerif-abgyngrfg";a:2:{i:0;R:9810;i:1;R:801;}s:32:"8:nccebirqerif-nccebirqnaqyngrfg";a:2:{i:0;R:9810;i:1;R:801;}s:29:"8:nccebirqerif-oynaxcntrfubja";a:2:{i:0;R:9810;i:1;R:801;}s:26:"8:nccebirqerif-rqvgjneavat";a:2:{i:0;R:9810;i:1;R:801;}s:14:"8:nccebirqerif";a:2:{i:0;R:9810;i:1;R:801;}s:28:"8:nccebirqerif-nccebirqcntrf";a:2:{i:0;R:9810;i:1;R:801;}s:29:"8:nccebirqerif-abgyngrfgcntrf";a:2:{i:0;R:9810;i:1;R:801;}s:30:"8:nccebirqerif-hanccebirqcntrf";a:2:{i:0;R:9810;i:1;R:801;}s:19:"8:nccebirqerif-ivrj";a:2:{i:0;R:9810;i:1;R:801;}s:29:"8:nccebirqerif-erivfvbaahzore";a:2:{i:0;R:9810;i:1;R:801;}s:25:"8:nccebirqerif-nccebirqol";a:2:{i:0;R:9810;i:1;R:801;}s:29:"8:nccebirqerif-qvsssebzyngrfg";a:2:{i:0;R:9810;i:1;R:801;}s:28:"8:nccebirqerif-nccebiryngrfg";a:2:{i:0;R:9810;i:1;R:801;}s:29:"8:nccebirqerif-nccebirguvferi";a:2:{i:0;R:9810;i:1;R:801;}s:28:"8:nccebirqerif-ivrjyngrfgeri";a:2:{i:0;R:9810;i:1;R:801;}s:24:"8:evtug-nccebirerivfvbaf";a:2:{i:0;R:9810;i:1;R:801;}s:24:"8:evtug-ivrjyvaxgbyngrfg";a:2:{i:0;R:9810;i:1;R:801;}s:13:"8:neenlf-qrfp";a:2:{i:0;s:10:"ext-arrays";i:1;R:801;}s:23:"8:negvpyr-pbzzragf-qrfp";a:2:{i:0;s:19:"ext-articlecomments";i:1;R:801;}s:31:"8:negvpyr-pbzzragf-gvgyr-fgevat";a:2:{i:0;R:9840;i:1;R:801;}s:30:"8:negvpyr-pbzzragf-anzr-fgevat";a:2:{i:0;R:9840;i:1;R:801;}s:29:"8:negvpyr-pbzzragf-anzr-svryq";a:2:{i:0;R:9840;i:1;R:801;}s:28:"8:negvpyr-pbzzragf-hey-svryq";a:2:{i:0;R:9840;i:1;R:801;}s:29:"8:negvpyr-pbzzragf-hey-fgevat";a:2:{i:0;R:9840;i:1;R:801;}s:33:"8:negvpyr-pbzzragf-pbzzrag-fgevat";a:2:{i:0;R:9840;i:1;R:801;}s:32:"8:negvpyr-pbzzragf-pbzzrag-svryq";a:2:{i:0;R:9840;i:1;R:801;}s:32:"8:negvpyr-pbzzragf-fhozvg-ohggba";a:2:{i:0;R:9840;i:1;R:801;}s:37:"8:negvpyr-pbzzragf-yrnir-pbzzrag-yvax";a:2:{i:0;R:9840;i:1;R:801;}s:32:"8:negvpyr-pbzzragf-vainyvq-svryq";a:2:{i:0;R:9840;i:1;R:801;}s:33:"8:negvpyr-pbzzragf-erdhverq-svryq";a:2:{i:0;R:9840;i:1;R:801;}s:36:"8:negvpyr-pbzzragf-fhozvffvba-snvyrq";a:2:{i:0;R:9840;i:1;R:801;}s:34:"8:negvpyr-pbzzragf-snvyher-ernfbaf";a:2:{i:0;R:9840;i:1;R:801;}s:30:"8:negvpyr-pbzzragf-ab-pbzzragf";a:2:{i:0;R:9840;i:1;R:801;}s:36:"8:negvpyr-pbzzragf-gnyx-cntr-fgnegre";a:2:{i:0;R:9840;i:1;R:801;}s:33:"8:negvpyr-pbzzragf-pbzzragre-fnvq";a:2:{i:0;R:9840;i:1;R:801;}s:26:"8:negvpyr-pbzzragf-fhzznel";a:2:{i:0;R:9840;i:1;R:801;}s:39:"8:negvpyr-pbzzragf-fhozvffvba-fhpprrqrq";a:2:{i:0;R:9840;i:1;R:801;}s:37:"8:negvpyr-pbzzragf-fhozvffvba-fhpprff";a:2:{i:0;R:9840;i:1;R:801;}s:38:"8:negvpyr-pbzzragf-fhozvffvba-ivrj-nyy";a:2:{i:0;R:9840;i:1;R:801;}s:41:"8:negvpyr-pbzzragf-cersvyyrq-pbzzrag-grkg";a:2:{i:0;R:9840;i:1;R:801;}s:34:"8:negvpyr-pbzzragf-hfre-vf-oybpxrq";a:2:{i:0;R:9840;i:1;R:801;}s:38:"8:negvpyr-pbzzragf-arj-pbzzrag-urnqvat";a:2:{i:0;R:9840;i:1;R:801;}s:35:"8:negvpyr-pbzzragf-pbzzrag-onq-zbqr";a:2:{i:0;R:9840;i:1;R:801;}s:35:"8:negvpyr-pbzzragf-pbzzrag-pbagragf";a:2:{i:0;R:9840;i:1;R:801;}s:49:"8:negvpyr-pbzzragf-pbzzrag-zvffvat-anzr-cnenzrgre";a:2:{i:0;R:9840;i:1;R:801;}s:49:"8:negvpyr-pbzzragf-pbzzrag-zvffvat-qngr-cnenzrgre";a:2:{i:0;R:9840;i:1;R:801;}s:26:"8:negvpyr-pbzzragf-ab-fcnz";a:2:{i:0;R:9840;i:1;R:801;}s:16:"8:cebprffpbzzrag";a:2:{i:0;R:9840;i:1;R:801;}s:25:"8:negvpyrgbpngrtbel2-qrfp";a:2:{i:0;s:22:"ext-articletocategory2";i:1;R:801;}s:55:"8:negvpyrgbpngrtbel2-perngr-negvpyr-haqre-pngrtbel-grkg";a:2:{i:0;R:9871;i:1;R:801;}s:57:"8:negvpyrgbpngrtbel2-perngr-negvpyr-haqre-pngrtbel-ohggba";a:2:{i:0;R:9871;i:1;R:801;}s:56:"8:negvpyrgbpngrtbel2-perngr-pngrtbel-haqre-pngrtbel-grkg";a:2:{i:0;R:9871;i:1;R:801;}s:58:"8:negvpyrgbpngrtbel2-perngr-pngrtbel-haqre-pngrtbel-ohggba";a:2:{i:0;R:9871;i:1;R:801;}s:26:"8:evtug-negvpyrgbpngrtbel2";a:2:{i:0;R:9871;i:1;R:801;}s:32:"8:evtug-negvpyrgbpngrtbel2nqqpng";a:2:{i:0;R:9871;i:1;R:801;}s:8:"8:nfxfdy";a:2:{i:0;s:10:"ext-asksql";i:1;R:801;}s:13:"8:nfxfdy-qrfp";a:2:{i:0;R:9879;i:1;R:801;}s:12:"8:nfxfdygrkg";a:2:{i:0;R:9879;i:1;R:801;}s:13:"8:fdyvfybttrq";a:2:{i:0;R:9879;i:1;R:801;}s:10:"8:fdydhrel";a:2:{i:0;R:9879;i:1;R:801;}s:10:"8:dhreloga";a:2:{i:0;R:9879;i:1;R:801;}s:12:"8:fryrpgbayl";a:2:{i:0;R:9879;i:1;R:801;}s:17:"8:dhrelfhpprffshy";a:2:{i:0;R:9879;i:1;R:801;}s:14:"8:evtug-nfxfdy";a:2:{i:0;R:9879;i:1;R:801;}s:15:"8:nhgubecebgrpg";a:2:{i:0;s:17:"ext-authorprotect";i:1;R:801;}s:20:"8:nhgubecebgrpg-qrfp";a:2:{i:0;R:9889;i:1;R:801;}s:25:"8:nhgubecebgrpg-abgnhgube";a:2:{i:0;R:9889;i:1;R:801;}s:23:"8:nhgubecebgrpg-pbasvez";a:2:{i:0;R:9889;i:1;R:801;}s:20:"8:nhgubecebgrpg-rqvg";a:2:{i:0;R:9889;i:1;R:801;}s:20:"8:nhgubecebgrpg-zbir";a:2:{i:0;R:9889;i:1;R:801;}s:21:"8:nhgubecebgrpg-vageb";a:2:{i:0;R:9889;i:1;R:801;}s:23:"8:nhgubecebgrpg-fhpprff";a:2:{i:0;R:9889;i:1;R:801;}s:23:"8:nhgubecebgrpg-snvyher";a:2:{i:0;R:9889;i:1;R:801;}s:22:"8:cebgrpg-yriry-nhgube";a:2:{i:0;R:9889;i:1;R:801;}s:26:"8:erfgevpgvba-yriry-nhgube";a:2:{i:0;R:9889;i:1;R:801;}s:21:"8:evtug-nhgubecebgrpg";a:2:{i:0;R:9889;i:1;R:801;}s:14:"8:evtug-nhgube";a:2:{i:0;R:9889;i:1;R:801;}s:20:"8:nhgbvaperzrag-qrfp";a:2:{i:0;s:17:"ext-autoincrement";i:1;R:801;}s:28:"8:nhgbzngvpobneqjrypbzr-qrfp";a:2:{i:0;s:25:"ext-automaticboardwelcome";i:1;R:801;}s:16:"8:onpxsbegu-arkg";a:2:{i:0;s:16:"ext-backandforth";i:1;R:801;}s:19:"8:onpxnaqsbegu-qrfp";a:2:{i:0;R:9907;i:1;R:801;}s:16:"8:onpxsbegu-ceri";a:2:{i:0;R:9907;i:1;R:801;}s:11:"8:onqvzntrf";a:2:{i:0;s:12:"ext-badimage";i:1;R:801;}s:15:"8:onqvzntr-qrfp";a:2:{i:0;R:9911;i:1;R:801;}s:19:"8:onqvzntrf-nqq-oga";a:2:{i:0;R:9911;i:1;R:801;}s:17:"8:onqvzntrf-nqqrq";a:2:{i:0;R:9911;i:1;R:801;}s:17:"8:onqvzntrf-pbhag";a:2:{i:0;R:9911;i:1;R:801;}s:16:"8:onqvzntrf-anzr";a:2:{i:0;R:9911;i:1;R:801;}s:21:"8:onqvzntrf-abg-nqqrq";a:2:{i:0;R:9911;i:1;R:801;}s:23:"8:onqvzntrf-abg-erzbirq";a:2:{i:0;R:9911;i:1;R:801;}s:18:"8:onqvzntrf-ernfba";a:2:{i:0;R:9911;i:1;R:801;}s:18:"8:onqvzntrf-erzbir";a:2:{i:0;R:9911;i:1;R:801;}s:22:"8:onqvzntrf-erzbir-oga";a:2:{i:0;R:9911;i:1;R:801;}s:26:"8:onqvzntrf-erzbir-pbasvez";a:2:{i:0;R:9911;i:1;R:801;}s:19:"8:onqvzntrf-erzbirq";a:2:{i:0;R:9911;i:1;R:801;}s:22:"8:onqvzntrf-fhournqvat";a:2:{i:0;R:9911;i:1;R:801;}s:24:"8:onqvzntrf-hacevivyrtrq";a:2:{i:0;R:9911;i:1;R:801;}s:20:"8:onqvzntrf-ybt-anzr";a:2:{i:0;R:9911;i:1;R:801;}s:22:"8:onqvzntrf-ybt-urnqre";a:2:{i:0;R:9911;i:1;R:801;}s:19:"8:onqvzntrf-ybt-nqq";a:2:{i:0;R:9911;i:1;R:801;}s:22:"8:onqvzntrf-ybt-erzbir";a:2:{i:0;R:9911;i:1;R:801;}s:16:"8:onqvzntrf-cntr";a:2:{i:0;R:9911;i:1;R:801;}s:17:"8:evtug-onqvzntrf";a:2:{i:0;R:9911;i:1;R:801;}s:17:"8:ongpuhfreevtugf";a:2:{i:0;s:19:"ext-batchuserrights";i:1;R:801;}s:22:"8:ongpuhfreevtugf-qrfp";a:2:{i:0;R:9933;i:1;R:801;}s:23:"8:ongpuhfreevtugf-anzrf";a:2:{i:0;R:9933;i:1;R:801;}s:23:"8:ongpuhfreevtugf-vageb";a:2:{i:0;R:9933;i:1;R:801;}s:40:"8:ongpuhfreevtugf-fvatyr-cebterff-hcqngr";a:2:{i:0;R:9933;i:1;R:801;}s:28:"8:ongpuhfreevtugf-nqq-tebhcf";a:2:{i:0;R:9933;i:1;R:801;}s:32:"8:ongpuhfreevtugf-hfreybnq-reebe";a:2:{i:0;R:9933;i:1;R:801;}s:27:"8:ongpuhfreevtugf-ab-tebhcf";a:2:{i:0;R:9933;i:1;R:801;}s:23:"8:evtug-ongpuhfreevtugf";a:2:{i:0;R:9933;i:1;R:801;}s:30:"8:oybpx_gvgyr_reebe_cntr_gvgyr";a:2:{i:0;s:15:"ext-blocktitles";i:1;R:801;}s:18:"8:oybpxgvgyrf-qrfp";a:2:{i:0;R:9943;i:1;R:801;}s:19:"8:oybpx_gvgyr_reebe";a:2:{i:0;R:9943;i:1;R:801;}s:17:"8:obbxvasb-urnqre";a:2:{i:0;s:19:"ext-bookinformation";i:1;R:801;}s:22:"8:obbxvasbezngvba-qrfp";a:2:{i:0;R:9947;i:1;R:801;}s:23:"8:obbxvasb-erfhyg-gvgyr";a:2:{i:0;R:9947;i:1;R:801;}s:24:"8:obbxvasb-erfhyg-nhgube";a:2:{i:0;R:9947;i:1;R:801;}s:27:"8:obbxvasb-erfhyg-choyvfure";a:2:{i:0;R:9947;i:1;R:801;}s:22:"8:obbxvasb-erfhyg-lrne";a:2:{i:0;R:9947;i:1;R:801;}s:28:"8:obbxvasb-reebe-vainyvqvfoa";a:2:{i:0;R:9947;i:1;R:801;}s:27:"8:obbxvasb-reebe-abfhpuvgrz";a:2:{i:0;R:9947;i:1;R:801;}s:25:"8:obbxvasb-reebe-abqevire";a:2:{i:0;R:9947;i:1;R:801;}s:27:"8:obbxvasb-reebe-aberfcbafr";a:2:{i:0;R:9947;i:1;R:801;}s:19:"8:obbxvasb-chepunfr";a:2:{i:0;R:9947;i:1;R:801;}s:19:"8:obbxvasb-cebivqre";a:2:{i:0;R:9947;i:1;R:801;}s:18:"8:obbxznantre-qrfp";a:2:{i:0;s:15:"ext-bookmanager";i:1;R:801;}s:22:"8:oz-obbxgbbyf-frpgvba";a:2:{i:0;R:9960;i:1;R:801;}s:23:"8:oz-enaqbzpuncgre-yvax";a:2:{i:0;R:9960;i:1;R:801;}s:17:"8:oz-cevagirefvba";a:2:{i:0;R:9960;i:1;R:801;}s:22:"8:oz-cevagirefvba-qrfp";a:2:{i:0;R:9960;i:1;R:801;}s:25:"8:oz-cevagirefvba-ab-obbx";a:2:{i:0;R:9960;i:1;R:801;}s:33:"8:oz-cevagirefvba-varkvfgrag-obbx";a:2:{i:0;R:9960;i:1;R:801;}s:18:"8:oernqpehzof-qrfp";a:2:{i:0;s:15:"ext-breadcrumbs";i:1;R:801;}s:6:"8:pnyy";a:2:{i:0;s:8:"ext-call";i:1;R:801;}s:11:"8:pnyy-qrfp";a:2:{i:0;R:9970;i:1;R:801;}s:11:"8:pnyy-grkg";a:2:{i:0;R:9970;i:1;R:801;}s:11:"8:pnyy-fnir";a:2:{i:0;R:9970;i:1;R:801;}s:19:"8:pnyy-fnir-fhpprff";a:2:{i:0;R:9970;i:1;R:801;}s:18:"8:pnyy-fnir-snvyrq";a:2:{i:0;R:9970;i:1;R:801;}s:16:"8:pnffnaqen-qrfp";a:2:{i:0;s:13:"ext-cassandra";i:1;R:801;}s:17:"8:pngrtbevmr-qrfp";a:2:{i:0;s:14:"ext-categorize";i:1;R:801;}s:18:"8:pngrtbevmr-gvgyr";a:2:{i:0;R:9979;i:1;R:801;}s:21:"8:pngrtbevmr-fhogvgyr";a:2:{i:0;R:9979;i:1;R:801;}s:19:"8:pngrtbevmr-sbbgre";a:2:{i:0;R:9979;i:1;R:801;}s:19:"8:pngrtbevmr-nqivpr";a:2:{i:0;R:9979;i:1;R:801;}s:17:"8:pngrtbeloebjfre";a:2:{i:0;s:19:"ext-categorybrowser";i:1;R:801;}s:22:"8:pngrtbeloebjfre-qrfp";a:2:{i:0;R:9985;i:1;R:801;}s:24:"8:po_erdhverf_wninfpevcg";a:2:{i:0;R:9985;i:1;R:801;}s:16:"8:po_vr6_jneavat";a:2:{i:0;R:9985;i:1;R:801;}s:25:"8:po_fubj_ab_cneragf_bayl";a:2:{i:0;R:9985;i:1;R:801;}s:20:"8:po_png_anzr_svygre";a:2:{i:0;R:9985;i:1;R:801;}s:26:"8:po_png_anzr_svygre_pyrne";a:2:{i:0;R:9985;i:1;R:801;}s:23:"8:po_png_anzr_svygre_pv";a:2:{i:0;R:9985;i:1;R:801;}s:19:"8:po_pbcl_yvar_uvag";a:2:{i:0;R:9985;i:1;R:801;}s:22:"8:po_unf_fhopngrtbevrf";a:2:{i:0;R:9985;i:1;R:801;}s:14:"8:po_unf_cntrf";a:2:{i:0;R:9985;i:1;R:801;}s:14:"8:po_unf_svyrf";a:2:{i:0;R:9985;i:1;R:801;}s:25:"8:po_unf_cneragpngrtbevrf";a:2:{i:0;R:9985;i:1;R:801;}s:24:"8:po_cerivbhf_vgrzf_yvax";a:2:{i:0;R:9985;i:1;R:801;}s:25:"8:po_cerivbhf_vgrzf_fgngf";a:2:{i:0;R:9985;i:1;R:801;}s:24:"8:po_cerivbhf_vgrzf_yvar";a:2:{i:0;R:9985;i:1;R:801;}s:20:"8:po_arkg_vgrzf_yvax";a:2:{i:0;R:9985;i:1;R:801;}s:21:"8:po_arkg_vgrzf_fgngf";a:2:{i:0;R:9985;i:1;R:801;}s:20:"8:po_arkg_vgrzf_yvar";a:2:{i:0;R:9985;i:1;R:801;}s:16:"8:po_png_fhopngf";a:2:{i:0;R:9985;i:1;R:801;}s:14:"8:po_png_cntrf";a:2:{i:0;R:9985;i:1;R:801;}s:14:"8:po_png_svyrf";a:2:{i:0;R:9985;i:1;R:801;}s:17:"8:po_nccyl_ohggba";a:2:{i:0;R:9985;i:1;R:801;}s:17:"8:po_bc1_grzcyngr";a:2:{i:0;R:9985;i:1;R:801;}s:17:"8:po_bc2_grzcyngr";a:2:{i:0;R:9985;i:1;R:801;}s:11:"8:po_nyy_bc";a:2:{i:0;R:9985;i:1;R:801;}s:16:"8:po_yoenpxrg_bc";a:2:{i:0;R:9985;i:1;R:801;}s:16:"8:po_eoenpxrg_bc";a:2:{i:0;R:9985;i:1;R:801;}s:10:"8:po_be_bc";a:2:{i:0;R:9985;i:1;R:801;}s:11:"8:po_naq_bc";a:2:{i:0;R:9985;i:1;R:801;}s:10:"8:po_tr_bc";a:2:{i:0;R:9985;i:1;R:801;}s:10:"8:po_yr_bc";a:2:{i:0;R:9985;i:1;R:801;}s:10:"8:po_rd_bc";a:2:{i:0;R:9985;i:1;R:801;}s:19:"8:po_rqvg_yrsg_uvag";a:2:{i:0;R:9985;i:1;R:801;}s:20:"8:po_rqvg_evtug_uvag";a:2:{i:0;R:9985;i:1;R:801;}s:21:"8:po_rqvg_erzbir_uvag";a:2:{i:0;R:9985;i:1;R:801;}s:19:"8:po_rqvg_pbcl_uvag";a:2:{i:0;R:9985;i:1;R:801;}s:21:"8:po_rqvg_nccraq_uvag";a:2:{i:0;R:9985;i:1;R:801;}s:20:"8:po_rqvg_pyrne_uvag";a:2:{i:0;R:9985;i:1;R:801;}s:20:"8:po_rqvg_cnfgr_uvag";a:2:{i:0;R:9985;i:1;R:801;}s:26:"8:po_rqvg_cnfgr_evtug_uvag";a:2:{i:0;R:9985;i:1;R:801;}s:22:"8:pngrtbelvagrefrpgvba";a:2:{i:0;s:24:"ext-categoryintersection";i:1;R:801;}s:27:"8:pngrtbelvagrefrpgvba-qrfp";a:2:{i:0;R:10027;i:1;R:801;}s:27:"8:pngrtbelvagrefrpgvba-qbvg";a:2:{i:0;R:10027;i:1;R:801;}s:36:"8:pngrtbelvagrefrpgvba-znkpngrtbevrf";a:2:{i:0;R:10027;i:1;R:801;}s:36:"8:pngrtbelvagrefrpgvba-zvapngrtbevrf";a:2:{i:0;R:10027;i:1;R:801;}s:30:"8:pngrtbelvagrefrpgvba-erfhygf";a:2:{i:0;R:10027;i:1;R:801;}s:31:"8:pngrtbelzrzorefbafvqrone-qrfp";a:2:{i:0;s:28:"ext-categorymembersonsidebar";i:1;R:801;}s:24:"8:pngrtbelzhygvfbeg-qrfp";a:2:{i:0;s:21:"ext-categorymultisort";i:1;R:801;}s:39:"8:pngrtbelzhygvfbeg-qrsnhygfbegxrl-anzr";a:2:{i:0;R:10036;i:1;R:801;}s:27:"8:pngrtbelzhygvfbeg-fbegxrl";a:2:{i:0;R:10036;i:1;R:801;}s:22:"8:pngrtbelzhygvfbeg-tb";a:2:{i:0;R:10036;i:1;R:801;}s:35:"8:pngrtbelzhygvfbeg-qrsnhyg-fbegxrl";a:2:{i:0;R:10036;i:1;R:801;}s:16:"8:cersf-pngrtbel";a:2:{i:0;R:10036;i:1;R:801;}s:31:"8:pngrtbelzhygvfbegpuvarfr-qrfp";a:2:{i:0;s:28:"ext-categorymultisortchinese";i:1;R:801;}s:48:"8:pngrtbelzhygvfbeg-fbegxrl-anzr-znaqneva-cvalva";a:2:{i:0;R:10043;i:1;R:801;}s:50:"8:pngrtbelzhygvfbeg-fbegxrl-anzr-znaqneva-obcbzbsb";a:2:{i:0;R:10043;i:1;R:801;}s:51:"8:pngrtbelzhygvfbeg-fbegxrl-anzr-znaqneva-jnqrtvyrf";a:2:{i:0;R:10043;i:1;R:801;}s:46:"8:pngrtbelzhygvfbeg-fbegxrl-anzr-znaqneva-zcf2";a:2:{i:0;R:10043;i:1;R:801;}s:50:"8:pngrtbelzhygvfbeg-fbegxrl-anzr-znaqneva-gbatlbat";a:2:{i:0;R:10043;i:1;R:801;}s:51:"8:pngrtbelzhygvfbeg-fbegxrl-anzr-pnagbarfr-wlhgcvat";a:2:{i:0;R:10043;i:1;R:801;}s:39:"8:pngrtbelzhygvfbeg-fbegxrl-anzr-fgebxr";a:2:{i:0;R:10043;i:1;R:801;}s:50:"8:pngrtbelzhygvfbeg-fbegxrl-anzr-fgebxr-fvzcyvsvrq";a:2:{i:0;R:10043;i:1;R:801;}s:51:"8:pngrtbelzhygvfbeg-fbegxrl-anzr-fgebxr-genqvgvbany";a:2:{i:0;R:10043;i:1;R:801;}s:40:"8:pngrtbelzhygvfbeg-fbegxrl-anzr-enqvpny";a:2:{i:0;R:10043;i:1;R:801;}s:51:"8:pngrtbelzhygvfbeg-fbegxrl-anzr-enqvpny-fvzcyvsvrq";a:2:{i:0;R:10043;i:1;R:801;}s:52:"8:pngrtbelzhygvfbeg-fbegxrl-anzr-enqvpny-genqvgvbany";a:2:{i:0;R:10043;i:1;R:801;}s:23:"8:pngrtbelbahcybnq-qrfp";a:2:{i:0;s:20:"ext-categoryonupload";i:1;R:801;}s:24:"8:pngrtbelbahcybnq-ynory";a:2:{i:0;R:10057;i:1;R:801;}s:23:"8:pngrtbelbahcybnq-abar";a:2:{i:0;R:10057;i:1;R:801;}s:26:"8:pngrtbelfbegurnqref-qrfp";a:2:{i:0;s:23:"ext-categorysortheaders";i:1;R:801;}s:17:"8:pngrtbelfgrccre";a:2:{i:0;s:19:"ext-categorystepper";i:1;R:801;}s:22:"8:pngrtbelfgrccre-qrfp";a:2:{i:0;R:10063;i:1;R:801;}s:21:"8:pngrtbelfgrccre-raq";a:2:{i:0;R:10063;i:1;R:801;}s:23:"8:pngrtbelfgrccre-fgneg";a:2:{i:0;R:10063;i:1;R:801;}s:20:"8:pngrtbelgrfgf-qrfp";a:2:{i:0;s:17:"ext-categorytests";i:1;R:801;}s:20:"8:pngrtbeljngpu-qrfp";a:2:{i:0;s:17:"ext-categorywatch";i:1;R:801;}s:28:"8:pngrtbeljngpu-rznvyfhowrpg";a:2:{i:0;R:10070;i:1;R:801;}s:25:"8:pngrtbeljngpu-pngzbirva";a:2:{i:0;R:10070;i:1;R:801;}s:26:"8:pngrtbeljngpu-pngzbirbhg";a:2:{i:0;R:10070;i:1;R:801;}s:22:"8:pngrtbeljngpu-pngnqq";a:2:{i:0;R:10070;i:1;R:801;}s:22:"8:pngrtbeljngpu-pngfho";a:2:{i:0;R:10070;i:1;R:801;}s:23:"8:pngrtbeljngpu-nhgbpng";a:2:{i:0;R:10070;i:1;R:801;}s:14:"8:punatrnhgube";a:2:{i:0;s:16:"ext-changeauthor";i:1;R:801;}s:19:"8:punatrnhgube-qrfp";a:2:{i:0;R:10078;i:1;R:801;}s:20:"8:punatrnhgube-gvgyr";a:2:{i:0;R:10078;i:1;R:801;}s:25:"8:punatrnhgube-frnepu-obk";a:2:{i:0;R:10078;i:1;R:801;}s:32:"8:punatrnhgube-cntranzr-be-erivq";a:2:{i:0;R:10078;i:1;R:801;}s:30:"8:punatrnhgube-cntranzrsbez-tb";a:2:{i:0;R:10078;i:1;R:801;}s:22:"8:punatrnhgube-pbzzrag";a:2:{i:0;R:10078;i:1;R:801;}s:34:"8:punatrnhgube-punatrnhgubef-zhygv";a:2:{i:0;R:10078;i:1;R:801;}s:32:"8:punatrnhgube-rkcynangvba-zhygv";a:2:{i:0;R:10078;i:1;R:801;}s:35:"8:punatrnhgube-punatrnhgubef-fvatyr";a:2:{i:0;R:10078;i:1;R:801;}s:33:"8:punatrnhgube-rkcynangvba-fvatyr";a:2:{i:0;R:10078;i:1;R:801;}s:31:"8:punatrnhgube-vainyvq-hfreanzr";a:2:{i:0;R:10078;i:1;R:801;}s:25:"8:punatrnhgube-abfhpuhfre";a:2:{i:0;R:10078;i:1;R:801;}s:22:"8:punatrnhgube-eriivrj";a:2:{i:0;R:10078;i:1;R:801;}s:26:"8:punatrnhgube-abfhpugvgyr";a:2:{i:0;R:10078;i:1;R:801;}s:25:"8:punatrnhgube-jrveqreebe";a:2:{i:0;R:10078;i:1;R:801;}s:26:"8:punatrnhgube-vainyvqsbez";a:2:{i:0;R:10078;i:1;R:801;}s:22:"8:punatrnhgube-fhpprff";a:2:{i:0;R:10078;i:1;R:801;}s:23:"8:punatrnhgube-ybtragel";a:2:{i:0;R:10078;i:1;R:801;}s:26:"8:punatrnhgube-ybtcntranzr";a:2:{i:0;R:10078;i:1;R:801;}s:26:"8:punatrnhgube-ybtcntrgrkg";a:2:{i:0;R:10078;i:1;R:801;}s:18:"8:punatrnhgube-eri";a:2:{i:0;R:10078;i:1;R:801;}s:20:"8:evtug-punatrnhgube";a:2:{i:0;R:10078;i:1;R:801;}s:12:"8:purpxcbvag";a:2:{i:0;s:14:"ext-checkpoint";i:1;R:801;}s:17:"8:purpxcbvag-qrfp";a:2:{i:0;R:10102;i:1;R:801;}s:20:"8:purpxcbvag-gbbygvc";a:2:{i:0;R:10102;i:1;R:801;}s:19:"8:purpxcbvag-abgvpr";a:2:{i:0;R:10102;i:1;R:801;}s:17:"8:purzvpnyfbheprf";a:2:{i:0;s:13:"ext-chemistry";i:1;R:801;}s:21:"8:purzvpnyfbhepr-qrfp";a:2:{i:0;R:10107;i:1;R:801;}s:22:"8:purzvpnyfbheprf-qrfp";a:2:{i:0;R:10107;i:1;R:801;}s:24:"8:purzshapgvbaf_yvfgcntr";a:2:{i:0;R:10107;i:1;R:801;}s:24:"8:purzshapgvbaf_qngnyvfg";a:2:{i:0;R:10107;i:1;R:801;}s:19:"8:purzshapgvbaf_pnf";a:2:{i:0;R:10107;i:1;R:801;}s:22:"8:purzshapgvbaf_rvarpf";a:2:{i:0;R:10107;i:1;R:801;}s:21:"8:purzshapgvbaf_purov";a:2:{i:0;R:10107;i:1;R:801;}s:23:"8:purzshapgvbaf_chopurz";a:2:{i:0;R:10107;i:1;R:801;}s:22:"8:purzshapgvbaf_fzvyrf";a:2:{i:0;R:10107;i:1;R:801;}s:21:"8:purzshapgvbaf_vapuv";a:2:{i:0;R:10107;i:1;R:801;}s:21:"8:purzshapgvbaf_egrpf";a:2:{i:0;R:10107;i:1;R:801;}s:20:"8:purzshapgvbaf_xrtt";a:2:{i:0;R:10107;i:1;R:801;}s:23:"8:purzshapgvbaf_ngppbqr";a:2:{i:0;R:10107;i:1;R:801;}s:24:"8:purzshapgvbaf_qehtonax";a:2:{i:0;R:10107;i:1;R:801;}s:24:"8:purzshapgvbaf_rpahzore";a:2:{i:0;R:10107;i:1;R:801;}s:23:"8:purzshapgvbaf_sbezhyn";a:2:{i:0;R:10107;i:1;R:801;}s:20:"8:purzshapgvbaf_anzr";a:2:{i:0;R:10107;i:1;R:801;}s:34:"8:purzshapgvbaf_purzsbezvachgreebe";a:2:{i:0;R:10107;i:1;R:801;}s:33:"8:purzshapgvbaf_frnepurkcynangvba";a:2:{i:0;R:10107;i:1;R:801;}s:31:"8:pyrnapunatrf-punatrevtugfyvax";a:2:{i:0;s:16:"ext-cleanchanges";i:1;R:801;}s:19:"8:pyrnapunatrf-qrfp";a:2:{i:0;R:10128;i:1;R:801;}s:23:"8:pyrnapunatrf-ynathntr";a:2:{i:0;R:10128;i:1;R:801;}s:26:"8:pyrnapunatrf-ynathntr-an";a:2:{i:0;R:10128;i:1;R:801;}s:20:"8:pyrnapunatrf-hfref";a:2:{i:0;R:10128;i:1;R:801;}s:28:"8:pyrnapunatrf-fubjhfreyvaxf";a:2:{i:0;R:10128;i:1;R:801;}s:17:"8:pybfrjvxvf-qrfp";a:2:{i:0;s:14:"ext-closewikis";i:1;R:801;}s:19:"8:pybfrjvxvf-pybfrq";a:2:{i:0;R:10135;i:1;R:801;}s:17:"8:pybfrjvxvf-cntr";a:2:{i:0;R:10135;i:1;R:801;}s:23:"8:pybfrjvxvf-cntr-pybfr";a:2:{i:0;R:10135;i:1;R:801;}s:28:"8:pybfrjvxvf-cntr-pybfr-jvxv";a:2:{i:0;R:10135;i:1;R:801;}s:31:"8:pybfrjvxvf-cntr-pybfr-qernfba";a:2:{i:0;R:10135;i:1;R:801;}s:30:"8:pybfrjvxvf-cntr-pybfr-ernfba";a:2:{i:0;R:10135;i:1;R:801;}s:30:"8:pybfrjvxvf-cntr-pybfr-fhozvg";a:2:{i:0;R:10135;i:1;R:801;}s:31:"8:pybfrjvxvf-cntr-pybfr-fhpprff";a:2:{i:0;R:10135;i:1;R:801;}s:24:"8:pybfrjvxvf-cntr-erbcra";a:2:{i:0;R:10135;i:1;R:801;}s:29:"8:pybfrjvxvf-cntr-erbcra-jvxv";a:2:{i:0;R:10135;i:1;R:801;}s:31:"8:pybfrjvxvf-cntr-erbcra-ernfba";a:2:{i:0;R:10135;i:1;R:801;}s:31:"8:pybfrjvxvf-cntr-erbcra-fhozvg";a:2:{i:0;R:10135;i:1;R:801;}s:32:"8:pybfrjvxvf-cntr-erbcra-fhpprff";a:2:{i:0;R:10135;i:1;R:801;}s:28:"8:pybfrjvxvf-cntr-ree-abjvxv";a:2:{i:0;R:10135;i:1;R:801;}s:28:"8:pybfrjvxvf-cntr-ree-pybfrq";a:2:{i:0;R:10135;i:1;R:801;}s:28:"8:pybfrjvxvf-cntr-ree-bcrarq";a:2:{i:0;R:10135;i:1;R:801;}s:17:"8:pybfrjvxvf-yvfg";a:2:{i:0;R:10135;i:1;R:801;}s:23:"8:pybfrjvxvf-yvfg-vageb";a:2:{i:0;R:10135;i:1;R:801;}s:29:"8:pybfrjvxvf-yvfg-urnqre-jvxv";a:2:{i:0;R:10135;i:1;R:801;}s:27:"8:pybfrjvxvf-yvfg-urnqre-ol";a:2:{i:0;R:10135;i:1;R:801;}s:34:"8:pybfrjvxvf-yvfg-urnqre-gvzrfgnzc";a:2:{i:0;R:10135;i:1;R:801;}s:35:"8:pybfrjvxvf-yvfg-urnqre-qvfcernfba";a:2:{i:0;R:10135;i:1;R:801;}s:16:"8:pybfrjvxvf-ybt";a:2:{i:0;R:10135;i:1;R:801;}s:23:"8:pybfrjvxvf-ybt-urnqre";a:2:{i:0;R:10135;i:1;R:801;}s:22:"8:pybfrjvxvf-ybt-pybfr";a:2:{i:0;R:10135;i:1;R:801;}s:23:"8:pybfrjvxvf-ybt-erbcra";a:2:{i:0;R:10135;i:1;R:801;}s:23:"8:evtug-rqvgpybfrqjvxvf";a:2:{i:0;R:10135;i:1;R:801;}s:18:"8:evtug-pybfrjvxvf";a:2:{i:0;R:10135;i:1;R:801;}s:17:"8:pbqrrqvgbe-qrfp";a:2:{i:0;s:14:"ext-codeeditor";i:1;R:801;}s:27:"8:pbqrrqvgbe-gbbyone-gbttyr";a:2:{i:0;R:10165;i:1;R:801;}s:17:"8:pbyynojngpuyvfg";a:2:{i:0;s:19:"ext-collabwatchlist";i:1;R:801;}s:22:"8:pbyynojngpuyvfg-qrfp";a:2:{i:0;R:10168;i:1;R:801;}s:24:"8:fcrpvnypbyynojngpuyvfg";a:2:{i:0;R:10168;i:1;R:801;}s:25:"8:pbyynojngpuyvfg-qrgnvyf";a:2:{i:0;R:10168;i:1;R:801;}s:26:"8:pbyynojngpuyvfggntfryrpg";a:2:{i:0;R:10168;i:1;R:801;}s:27:"8:pbyynojngpuyvfggntpbzzrag";a:2:{i:0;R:10168;i:1;R:801;}s:29:"8:pbyynojngpuyvfgfrggntohggba";a:2:{i:0;R:10168;i:1;R:801;}s:27:"8:pbyynojngpuyvfg-hafrg-gnt";a:2:{i:0;R:10168;i:1;R:801;}s:27:"8:pbyynojngpuyvfggbbyf-ivrj";a:2:{i:0;R:10168;i:1;R:801;}s:27:"8:pbyynojngpuyvfggbbyf-rqvg";a:2:{i:0;R:10168;i:1;R:801;}s:36:"8:pbyynojngpuyvfggbbyf-enjpngrtbevrf";a:2:{i:0;R:10168;i:1;R:801;}s:30:"8:pbyynojngpuyvfggbbyf-enjgntf";a:2:{i:0;R:10168;i:1;R:801;}s:31:"8:pbyynojngpuyvfggbbyf-enjhfref";a:2:{i:0;R:10168;i:1;R:801;}s:29:"8:pbyynojngpuyvfggbbyf-qryrgr";a:2:{i:0;R:10168;i:1;R:801;}s:21:"8:pbyynojngpuyvfgfnyy";a:2:{i:0;R:10168;i:1;R:801;}s:27:"8:pbyynojngpuyvfgsvygregntf";a:2:{i:0;R:10168;i:1;R:801;}s:38:"8:pbyynojngpuyvfgrqvg-hfref-enj-fhozvg";a:2:{i:0;R:10168;i:1;R:801;}s:31:"8:pbyynojngpuyvfgrqvg-enj-gvgyr";a:2:{i:0;R:10168;i:1;R:801;}s:36:"8:pbyynojngpuyvfgrqvg-gntf-enj-gvgyr";a:2:{i:0;R:10168;i:1;R:801;}s:37:"8:pbyynojngpuyvfgrqvg-hfref-enj-gvgyr";a:2:{i:0;R:10168;i:1;R:801;}s:38:"8:pbyynojngpuyvfgrqvg-hfref-ynfg-bjare";a:2:{i:0;R:10168;i:1;R:801;}s:30:"8:pbyynojngpuyvfgrqvg-ahzvgrzf";a:2:{i:0;R:10168;i:1;R:801;}s:29:"8:pbyynojngpuyvfgrqvg-abvgrzf";a:2:{i:0;R:10168;i:1;R:801;}s:35:"8:pbyynojngpuyvfgrqvg-gntf-ahzvgrzf";a:2:{i:0;R:10168;i:1;R:801;}s:34:"8:pbyynojngpuyvfgrqvg-gntf-abvgrzf";a:2:{i:0;R:10168;i:1;R:801;}s:36:"8:pbyynojngpuyvfgrqvg-hfref-ahzvgrzf";a:2:{i:0;R:10168;i:1;R:801;}s:35:"8:pbyynojngpuyvfgrqvg-hfref-abvgrzf";a:2:{i:0;R:10168;i:1;R:801;}s:32:"8:pbyynojngpuyvfgrqvg-enj-yrtraq";a:2:{i:0;R:10168;i:1;R:801;}s:38:"8:pbyynojngpuyvfgrqvg-hfref-enj-yrtraq";a:2:{i:0;R:10168;i:1;R:801;}s:37:"8:pbyynojngpuyvfgrqvg-gntf-enj-yrtraq";a:2:{i:0;R:10168;i:1;R:801;}s:33:"8:pbyynojngpuyvfgrqvg-enj-rkcynva";a:2:{i:0;R:10168;i:1;R:801;}s:38:"8:pbyynojngpuyvfgrqvg-gntf-enj-rkcynva";a:2:{i:0;R:10168;i:1;R:801;}s:39:"8:pbyynojngpuyvfgrqvg-hfref-enj-rkcynva";a:2:{i:0;R:10168;i:1;R:801;}s:32:"8:pbyynojngpuyvfgrqvg-enj-gvgyrf";a:2:{i:0;R:10168;i:1;R:801;}s:37:"8:pbyynojngpuyvfgrqvg-gntf-enj-gvgyrf";a:2:{i:0;R:10168;i:1;R:801;}s:38:"8:pbyynojngpuyvfgrqvg-hfref-enj-gvgyrf";a:2:{i:0;R:10168;i:1;R:801;}s:34:"8:pbyynojngpuyvfgrqvg-abezny-gvgyr";a:2:{i:0;R:10168;i:1;R:801;}s:35:"8:pbyynojngpuyvfgrqvg-abezny-yrtraq";a:2:{i:0;R:10168;i:1;R:801;}s:36:"8:pbyynojngpuyvfgrqvg-abezny-rkcynva";a:2:{i:0;R:10168;i:1;R:801;}s:37:"8:pbyynojngpuyvfgrqvg-gntf-enj-fhozvg";a:2:{i:0;R:10168;i:1;R:801;}s:33:"8:pbyynojngpuyvfgrqvg-abezny-qbar";a:2:{i:0;R:10168;i:1;R:801;}s:35:"8:pbyynojngpuyvfgrqvg-gntf-enj-qbar";a:2:{i:0;R:10168;i:1;R:801;}s:36:"8:pbyynojngpuyvfgrqvg-hfref-enj-qbar";a:2:{i:0;R:10168;i:1;R:801;}s:36:"8:pbyynojngpuyvfgrqvg-gntf-enj-nqqrq";a:2:{i:0;R:10168;i:1;R:801;}s:37:"8:pbyynojngpuyvfgrqvg-hfref-enj-nqqrq";a:2:{i:0;R:10168;i:1;R:801;}s:38:"8:pbyynojngpuyvfgrqvg-gntf-enj-erzbirq";a:2:{i:0;R:10168;i:1;R:801;}s:39:"8:pbyynojngpuyvfgrqvg-hfref-enj-erzbirq";a:2:{i:0;R:10168;i:1;R:801;}s:27:"8:pbyynojngpuyvfgvaireggntf";a:2:{i:0;R:10168;i:1;R:801;}s:23:"8:pbyynojngpuyvfgcngeby";a:2:{i:0;R:10168;i:1;R:801;}s:30:"8:pbyynojngpuyvfggbbyf-arjyvfg";a:2:{i:0;R:10168;i:1;R:801;}s:30:"8:pbyynojngpuyvfgqryrgr-yrtraq";a:2:{i:0;R:10168;i:1;R:801;}s:31:"8:pbyynojngpuyvfgqryrgr-rkcynva";a:2:{i:0;R:10168;i:1;R:801;}s:30:"8:pbyynojngpuyvfgqryrgr-fhozvg";a:2:{i:0;R:10168;i:1;R:801;}s:29:"8:pbyynojngpuyvfgqryrgr-gvgyr";a:2:{i:0;R:10168;i:1;R:801;}s:39:"8:pbyynojngpuyvfgrqvg-frg-gntf-ahzvgrzf";a:2:{i:0;R:10168;i:1;R:801;}s:38:"8:pbyynojngpuyvfgrqvg-frg-gntf-abvgrzf";a:2:{i:0;R:10168;i:1;R:801;}s:27:"8:pbyynojngpuyvfgarj-yrtraq";a:2:{i:0;R:10168;i:1;R:801;}s:28:"8:pbyynojngpuyvfgarj-rkcynva";a:2:{i:0;R:10168;i:1;R:801;}s:25:"8:pbyynojngpuyvfgarj-anzr";a:2:{i:0;R:10168;i:1;R:801;}s:27:"8:pbyynojngpuyvfgarj-fhozvg";a:2:{i:0;R:10168;i:1;R:801;}s:30:"8:pbyynojngpuyvfgrqvg-enj-qbar";a:2:{i:0;R:10168;i:1;R:801;}s:31:"8:pbyynojngpuyvfgrqvg-enj-nqqrq";a:2:{i:0;R:10168;i:1;R:801;}s:33:"8:pbyynojngpuyvfgrqvg-enj-erzbirq";a:2:{i:0;R:10168;i:1;R:801;}s:35:"8:pbyynojngpuyvfgrqvg-abezny-fhozvg";a:2:{i:0;R:10168;i:1;R:801;}s:34:"8:pbyynojngpuyvfgfubjuvqryvfghfref";a:2:{i:0;R:10168;i:1;R:801;}s:34:"8:gbt-pbyynojngpuyvfguvqryvfghfref";a:2:{i:0;R:10168;i:1;R:801;}s:17:"8:pbzzragobk-qrfp";a:2:{i:0;s:14:"ext-commentbox";i:1;R:801;}s:20:"8:pbzzragobk-cersvyy";a:2:{i:0;R:10235;i:1;R:801;}s:18:"8:pbzzragobk-vageb";a:2:{i:0;R:10235;i:1;R:801;}s:23:"8:pbzzragobk-fnirohggba";a:2:{i:0;R:10235;i:1;R:801;}s:17:"8:pbzzragobk-anzr";a:2:{i:0;R:10235;i:1;R:801;}s:29:"8:pbzzragobk-anzr-rkcynangvba";a:2:{i:0;R:10235;i:1;R:801;}s:16:"8:pbzzragobk-ybt";a:2:{i:0;R:10235;i:1;R:801;}s:34:"8:pbzzragobk-svefg-pbzzrag-urnqvat";a:2:{i:0;R:10235;i:1;R:801;}s:18:"8:pbzzragobk-ertrk";a:2:{i:0;R:10235;i:1;R:801;}s:28:"8:pbzzragobk-reebecntr-gvgyr";a:2:{i:0;R:10235;i:1;R:801;}s:35:"8:pbzzragobk-reebe-cntr-abarkvfgrag";a:2:{i:0;R:10235;i:1;R:801;}s:28:"8:pbzzragobk-reebe-anzrfcnpr";a:2:{i:0;R:10235;i:1;R:801;}s:32:"8:pbzzragobk-reebe-rzcgl-pbzzrag";a:2:{i:0;R:10235;i:1;R:801;}s:19:"8:pbzzragcntrf-qrfp";a:2:{i:0;s:16:"ext-commentpages";i:1;R:801;}s:22:"8:pbzzraggno-rqvgvageb";a:2:{i:0;R:10249;i:1;R:801;}s:20:"8:pbzzraggno-cerybnq";a:2:{i:0;R:10249;i:1;R:801;}s:16:"8:afgno-pbzzragf";a:2:{i:0;R:10249;i:1;R:801;}s:29:"8:pbzzragfcnzzre-fnir-oybpxrq";a:2:{i:0;s:18:"ext-commentspammer";i:1;R:801;}s:21:"8:pbzzragfcnzzre-qrfp";a:2:{i:0;R:10254;i:1;R:801;}s:24:"8:pbzzragfcnzzre-ybt-zft";a:2:{i:0;R:10254;i:1;R:801;}s:29:"8:pbzzragfcnzzre-ybt-zft-vasb";a:2:{i:0;R:10254;i:1;R:801;}s:21:"8:pfcnzzreybtcntrgrkg";a:2:{i:0;R:10254;i:1;R:801;}s:19:"8:pfcnzzre-ybt-cntr";a:2:{i:0;R:10254;i:1;R:801;}s:29:"8:pbaqvgvbanyfubjfrpgvba-qrfp";a:2:{i:0;s:26:"ext-conditionalshowsection";i:1;R:801;}s:11:"8:pbasvther";a:2:{i:0;s:13:"ext-configure";i:1;R:801;}s:16:"8:pbasvther-qrfp";a:2:{i:0;R:10263;i:1;R:801;}s:22:"8:pbasvther-qrfp-tebhc";a:2:{i:0;R:10263;i:1;R:801;}s:20:"8:pbasvther-qrfp-xrl";a:2:{i:0;R:10263;i:1;R:801;}s:19:"8:pbasvther-qrfp-af";a:2:{i:0;R:10263;i:1;R:801;}s:20:"8:pbasvther-qrfp-iny";a:2:{i:0;R:10263;i:1;R:801;}s:21:"8:pbasvther-rqvg-pber";a:2:{i:0;R:10263;i:1;R:801;}s:20:"8:pbasvther-rqvg-rkg";a:2:{i:0;R:10263;i:1;R:801;}s:35:"8:pbasvther-ivrjpbasvt-qrsnhyg-qvss";a:2:{i:0;R:10263;i:1;R:801;}s:32:"8:pbasvther-rkg-rkg-qrcraqrapvrf";a:2:{i:0;R:10263;i:1;R:801;}s:34:"8:pbasvther-rkg-rkg-qrcraqrapl-ree";a:2:{i:0;R:10263;i:1;R:801;}s:19:"8:pbasvther-rkg-qbp";a:2:{i:0;R:10263;i:1;R:801;}s:28:"8:pbasvther-rkg-fpurznpunatr";a:2:{i:0;R:10263;i:1;R:801;}s:24:"8:pbasvther-rkg-frggvatf";a:2:{i:0;R:10263;i:1;R:801;}s:35:"8:pbasvther-rkg-frggvatf-qrc-reebef";a:2:{i:0;R:10263;i:1;R:801;}s:34:"8:pbasvther-rkg-frggvatf-qrc-reebe";a:2:{i:0;R:10263;i:1;R:801;}s:29:"8:pbasvther-rkg-hfr-rkgrafvba";a:2:{i:0;R:10263;i:1;R:801;}s:19:"8:pbasvther-rkg-hfr";a:2:{i:0;R:10263;i:1;R:801;}s:23:"8:pbasvther-sbez-ernfba";a:2:{i:0;R:10263;i:1;R:801;}s:22:"8:pbasvther-phfgbzvfrq";a:2:{i:0;R:10263;i:1;R:801;}s:33:"8:pbasvther-neenlvachg-barcreyvar";a:2:{i:0;R:10263;i:1;R:801;}s:19:"8:pbasvther-fhzznel";a:2:{i:0;R:10263;i:1;R:801;}s:20:"8:pbasvther-oga-fnir";a:2:{i:0;R:10263;i:1;R:801;}s:20:"8:pbasvther-qo-reebe";a:2:{i:0;R:10263;i:1;R:801;}s:26:"8:pbasvther-qo-gnoyr-reebe";a:2:{i:0;R:10263;i:1;R:801;}s:34:"8:pbasvther-qverpgbel-abg-jevgnoyr";a:2:{i:0;R:10263;i:1;R:801;}s:20:"8:pbasvther-rqvg-byq";a:2:{i:0;R:10263;i:1;R:801;}s:17:"8:pbasvther-reebe";a:2:{i:0;R:10263;i:1;R:801;}s:18:"8:pbasvther-wf-nqq";a:2:{i:0;R:10263;i:1;R:801;}s:27:"8:pbasvther-wf-tebhc-rkvfgf";a:2:{i:0;R:10263;i:1;R:801;}s:27:"8:pbasvther-wf-cebzcg-tebhc";a:2:{i:0;R:10263;i:1;R:801;}s:21:"8:pbasvther-wf-erzbir";a:2:{i:0;R:10263;i:1;R:801;}s:25:"8:pbasvther-wf-erzbir-ebj";a:2:{i:0;R:10263;i:1;R:801;}s:28:"8:pbasvther-wf-trg-vzntr-hey";a:2:{i:0;R:10263;i:1;R:801;}s:26:"8:pbasvther-wf-vzntr-reebe";a:2:{i:0;R:10263;i:1;R:801;}s:28:"8:pbasvther-wf-ovtyvfg-fubja";a:2:{i:0;R:10263;i:1;R:801;}s:29:"8:pbasvther-wf-ovtyvfg-uvqqra";a:2:{i:0;R:10263;i:1;R:801;}s:27:"8:pbasvther-wf-ovtyvfg-fubj";a:2:{i:0;R:10263;i:1;R:801;}s:27:"8:pbasvther-wf-ovtyvfg-uvqr";a:2:{i:0;R:10263;i:1;R:801;}s:27:"8:pbasvther-wf-fhzznel-abar";a:2:{i:0;R:10263;i:1;R:801;}s:28:"8:pbasvther-wf-frnepu-yrtraq";a:2:{i:0;R:10263;i:1;R:801;}s:28:"8:pbasvther-wf-frnepu-cebzcg";a:2:{i:0;R:10263;i:1;R:801;}s:19:"8:pbasvther-ab-qvss";a:2:{i:0;R:10263;i:1;R:801;}s:24:"8:pbasvther-ab-qverpgbel";a:2:{i:0;R:10263;i:1;R:801;}s:18:"8:pbasvther-ab-byq";a:2:{i:0;R:10263;i:1;R:801;}s:20:"8:pbasvther-ab-frghc";a:2:{i:0;R:10263;i:1;R:801;}s:24:"8:pbasvther-ab-genafjvxv";a:2:{i:0;R:10263;i:1;R:801;}s:15:"8:pbasvther-byq";a:2:{i:0;R:10263;i:1;R:801;}s:24:"8:pbasvther-byq-irefvbaf";a:2:{i:0;R:10263;i:1;R:801;}s:29:"8:pbasvther-byq-abg-ninvynoyr";a:2:{i:0;R:10263;i:1;R:801;}s:23:"8:pbasvther-byq-punatrf";a:2:{i:0;R:10263;i:1;R:801;}s:23:"8:pbasvther-byq-fhzznel";a:2:{i:0;R:10263;i:1;R:801;}s:32:"8:pbasvther-byq-fhzznel-qngrgvzr";a:2:{i:0;R:10263;i:1;R:801;}s:17:"8:pbasvther-fnirq";a:2:{i:0;R:10263;i:1;R:801;}s:20:"8:pbasvther-onpxyvax";a:2:{i:0;R:10263;i:1;R:801;}s:33:"8:pbasvther-vzntr-hey-rkcynangvba";a:2:{i:0;R:10263;i:1;R:801;}s:26:"8:pbasvther-frpgvba-ebobgf";a:2:{i:0;R:10263;i:1;R:801;}s:28:"8:pbasvther-frpgvba-srngherf";a:2:{i:0;R:10263;i:1;R:801;}s:27:"8:pbasvther-frpgvba-trareny";a:2:{i:0;R:10263;i:1;R:801;}s:25:"8:pbasvther-frpgvba-cntrf";a:2:{i:0;R:10263;i:1;R:801;}s:25:"8:pbasvther-frpgvba-cnguf";a:2:{i:0;R:10263;i:1;R:801;}s:22:"8:pbasvther-frpgvba-qo";a:2:{i:0;R:10263;i:1;R:801;}s:34:"8:pbasvther-frpgvba-ybnq-onynapvat";a:2:{i:0;R:10263;i:1;R:801;}s:25:"8:pbasvther-frpgvba-zlfdy";a:2:{i:0;R:10263;i:1;R:801;}s:28:"8:pbasvther-frpgvba-cbfgterf";a:2:{i:0;R:10263;i:1;R:801;}s:26:"8:pbasvther-frpgvba-fdyvgr";a:2:{i:0;R:10263;i:1;R:801;}s:25:"8:pbasvther-frpgvba-rznvy";a:2:{i:0;R:10263;i:1;R:801;}s:26:"8:pbasvther-frpgvba-rabgvs";a:2:{i:0;R:10263;i:1;R:801;}s:32:"8:pbasvther-frpgvba-ybpnyvmngvba";a:2:{i:0;R:10263;i:1;R:801;}s:28:"8:pbasvther-frpgvba-gvzrmbar";a:2:{i:0;R:10263;i:1;R:801;}s:24:"8:pbasvther-frpgvba-ugzy";a:2:{i:0;R:10263;i:1;R:801;}s:25:"8:pbasvther-frpgvba-qroht";a:2:{i:0;R:10263;i:1;R:801;}s:29:"8:pbasvther-frpgvba-cebsvyvat";a:2:{i:0;R:10263;i:1;R:801;}s:24:"8:pbasvther-frpgvba-fvgr";a:2:{i:0;R:10263;i:1;R:801;}s:24:"8:pbasvther-frpgvba-nwnk";a:2:{i:0;R:10263;i:1;R:801;}s:26:"8:pbasvther-frpgvba-pff-wf";a:2:{i:0;R:10263;i:1;R:801;}s:34:"8:pbasvther-frpgvba-erfbheprybnqre";a:2:{i:0;R:10263;i:1;R:801;}s:30:"8:pbasvther-frpgvba-anzrfcnprf";a:2:{i:0;R:10263;i:1;R:801;}s:25:"8:pbasvther-frpgvba-fgngf";a:2:{i:0;R:10263;i:1;R:801;}s:24:"8:pbasvther-frpgvba-fxva";a:2:{i:0;R:10263;i:1;R:801;}s:26:"8:pbasvther-frpgvba-irpgbe";a:2:{i:0;R:10263;i:1;R:801;}s:28:"8:pbasvther-frpgvba-pngrtbel";a:2:{i:0;R:10263;i:1;R:801;}s:25:"8:pbasvther-frpgvba-pnpur";a:2:{i:0;R:10263;i:1;R:801;}s:26:"8:pbasvther-frpgvba-cpnpur";a:2:{i:0;R:10263;i:1;R:801;}s:32:"8:pbasvther-frpgvba-zrffntrpnpur";a:2:{i:0;R:10263;i:1;R:801;}s:29:"8:pbasvther-frpgvba-zrzpnpurq";a:2:{i:0;R:10263;i:1;R:801;}s:29:"8:pbasvther-frpgvba-vagrejvxv";a:2:{i:0;R:10263;i:1;R:801;}s:26:"8:pbasvther-frpgvba-npprff";a:2:{i:0;R:10263;i:1;R:801;}s:26:"8:pbasvther-frpgvba-tebhcf";a:2:{i:0;R:10263;i:1;R:801;}s:25:"8:pbasvther-frpgvba-oybpx";a:2:{i:0;R:10263;i:1;R:801;}s:25:"8:pbasvther-frpgvba-engrf";a:2:{i:0;R:10263;i:1;R:801;}s:25:"8:pbasvther-frpgvba-cebkl";a:2:{i:0;R:10263;i:1;R:801;}s:25:"8:pbasvther-frpgvba-fdhvq";a:2:{i:0;R:10263;i:1;R:801;}s:26:"8:pbasvther-frpgvba-pbbxvr";a:2:{i:0;R:10263;i:1;R:801;}s:31:"8:pbasvther-frpgvba-cresbeznapr";a:2:{i:0;R:10263;i:1;R:801;}s:24:"8:pbasvther-frpgvba-grfg";a:2:{i:0;R:10263;i:1;R:801;}s:26:"8:pbasvther-frpgvba-hcybnq";a:2:{i:0;R:10263;i:1;R:801;}s:32:"8:pbasvther-frpgvba-funerqhcybnq";a:2:{i:0;R:10263;i:1;R:801;}s:24:"8:pbasvther-frpgvba-zvzr";a:2:{i:0;R:10263;i:1;R:801;}s:26:"8:pbasvther-frpgvba-vzntrf";a:2:{i:0;R:10263;i:1;R:801;}s:24:"8:pbasvther-frpgvba-qwih";a:2:{i:0;R:10263;i:1;R:801;}s:31:"8:pbasvther-frpgvba-vzntrzntvpx";a:2:{i:0;R:10263;i:1;R:801;}s:23:"8:pbasvther-frpgvba-fit";a:2:{i:0;R:10263;i:1;R:801;}s:29:"8:pbasvther-frpgvba-nagvivehf";a:2:{i:0;R:10263;i:1;R:801;}s:26:"8:pbasvther-frpgvba-cnefre";a:2:{i:0;R:10263;i:1;R:801;}s:24:"8:pbasvther-frpgvba-gvql";a:2:{i:0;R:10263;i:1;R:801;}s:32:"8:pbasvther-frpgvba-fcrpvnycntrf";a:2:{i:0;R:10263;i:1;R:801;}s:33:"8:pbasvther-frpgvba-erpragpunatrf";a:2:{i:0;R:10263;i:1;R:801;}s:25:"8:pbasvther-frpgvba-hfref";a:2:{i:0;R:10263;i:1;R:801;}s:32:"8:pbasvther-frpgvba-rkgreanynhgu";a:2:{i:0;R:10263;i:1;R:801;}s:24:"8:pbasvther-frpgvba-srrq";a:2:{i:0;R:10263;i:1;R:801;}s:23:"8:pbasvther-frpgvba-wbo";a:2:{i:0;R:10263;i:1;R:801;}s:26:"8:pbasvther-frpgvba-frnepu";a:2:{i:0;R:10263;i:1;R:801;}s:29:"8:pbasvther-frpgvba-pbclevtug";a:2:{i:0;R:10263;i:1;R:801;}s:24:"8:pbasvther-frpgvba-ugpc";a:2:{i:0;R:10263;i:1;R:801;}s:24:"8:pbasvther-frpgvba-zvfp";a:2:{i:0;R:10263;i:1;R:801;}s:26:"8:pbasvther-frpgvba-svygre";a:2:{i:0;R:10263;i:1;R:801;}s:33:"8:pbasvther-frpgvba-zj-rkgrafvbaf";a:2:{i:0;R:10263;i:1;R:801;}s:34:"8:pbasvther-frpgvba-rkgreany-gbbyf";a:2:{i:0;R:10263;i:1;R:801;}s:30:"8:pbasvther-frpgvba-svyrflfgrz";a:2:{i:0;R:10263;i:1;R:801;}s:29:"8:pbasvther-frpgvba-guhzoanvy";a:2:{i:0;R:10263;i:1;R:801;}s:26:"8:pbasvther-frpgvba-bhgchg";a:2:{i:0;R:10263;i:1;R:801;}s:23:"8:pbasvther-fryrpg-jvxv";a:2:{i:0;R:10263;i:1;R:801;}s:28:"8:pbasvther-fryrpg-jvxv-qrfp";a:2:{i:0;R:10263;i:1;R:801;}s:33:"8:pbasvther-fryrpg-jvxv-ivrj-qrfp";a:2:{i:0;R:10263;i:1;R:801;}s:32:"8:pbasvther-fryrpg-jvxv-ivrj-nyy";a:2:{i:0;R:10263;i:1;R:801;}s:37:"8:pbasvther-fryrpg-jvxv-ivrj-fcrpvsvp";a:2:{i:0;R:10263;i:1;R:801;}s:30:"8:pbasvther-fryrpg-jvxv-fhozvg";a:2:{i:0;R:10263;i:1;R:801;}s:33:"8:pbasvther-frggvat-abg-ninvynoyr";a:2:{i:0;R:10263;i:1;R:801;}s:34:"8:pbasvther-genafjvxv-abg-va-enatr";a:2:{i:0;R:10263;i:1;R:801;}s:16:"8:pbasvther-ivrj";a:2:{i:0;R:10263;i:1;R:801;}s:29:"8:pbasvther-ivrj-nyy-irefvbaf";a:2:{i:0;R:10263;i:1;R:801;}s:24:"8:pbasvther-ivrj-qrsnhyg";a:2:{i:0;R:10263;i:1;R:801;}s:28:"8:pbasvther-ivrj-abg-nyybjrq";a:2:{i:0;R:10263;i:1;R:801;}s:27:"8:pbasvther-ivrjpbasvt-yvar";a:2:{i:0;R:10263;i:1;R:801;}s:12:"8:rkgrafvbaf";a:2:{i:0;R:10263;i:1;R:801;}s:17:"8:evtug-pbasvther";a:2:{i:0;R:10263;i:1;R:801;}s:21:"8:evtug-pbasvther-nyy";a:2:{i:0;R:10263;i:1;R:801;}s:27:"8:evtug-pbasvther-vagrejvxv";a:2:{i:0;R:10263;i:1;R:801;}s:18:"8:evtug-rkgrafvbaf";a:2:{i:0;R:10263;i:1;R:801;}s:22:"8:evtug-rkgrafvbaf-nyy";a:2:{i:0;R:10263;i:1;R:801;}s:28:"8:evtug-rkgrafvbaf-vagrejvxv";a:2:{i:0;R:10263;i:1;R:801;}s:18:"8:evtug-ivrjpbasvt";a:2:{i:0;R:10263;i:1;R:801;}s:22:"8:evtug-ivrjpbasvt-nyy";a:2:{i:0;R:10263;i:1;R:801;}s:28:"8:evtug-ivrjpbasvt-vagrejvxv";a:2:{i:0;R:10263;i:1;R:801;}s:12:"8:ivrjpbasvt";a:2:{i:0;R:10263;i:1;R:801;}s:32:"8:pbasvther-guebggyr-npgvba-rqvg";a:2:{i:0;R:10263;i:1;R:801;}s:32:"8:pbasvther-guebggyr-npgvba-zbir";a:2:{i:0;R:10263;i:1;R:801;}s:36:"8:pbasvther-guebggyr-npgvba-ebyyonpx";a:2:{i:0;R:10263;i:1;R:801;}s:40:"8:pbasvther-guebggyr-npgvba-znvycnffjbeq";a:2:{i:0;R:10263;i:1;R:801;}s:37:"8:pbasvther-guebggyr-npgvba-rznvyhfre";a:2:{i:0;R:10263;i:1;R:801;}s:31:"8:pbasvther-guebggyr-tebhc-naba";a:2:{i:0;R:10263;i:1;R:801;}s:31:"8:pbasvther-guebggyr-tebhc-hfre";a:2:{i:0;R:10263;i:1;R:801;}s:33:"8:pbasvther-guebggyr-tebhc-arjovr";a:2:{i:0;R:10263;i:1;R:801;}s:29:"8:pbasvther-guebggyr-tebhc-vc";a:2:{i:0;R:10263;i:1;R:801;}s:33:"8:pbasvther-guebggyr-tebhc-fhoarg";a:2:{i:0;R:10263;i:1;R:801;}s:26:"8:pbasvther-guebggyr-pbhag";a:2:{i:0;R:10263;i:1;R:801;}s:27:"8:pbasvther-guebggyr-crevbq";a:2:{i:0;R:10263;i:1;R:801;}s:28:"8:pbasvther-guebggyr-fhzznel";a:2:{i:0;R:10263;i:1;R:801;}s:26:"8:pbasvther-guebggyr-tebhc";a:2:{i:0;R:10263;i:1;R:801;}s:26:"8:pbasvther-guebggyr-yvzvg";a:2:{i:0;R:10263;i:1;R:801;}s:25:"8:pbasvther-guebggyr-abar";a:2:{i:0;R:10263;i:1;R:801;}s:30:"8:pbasvther-pbaqvgvba-bcrengbe";a:2:{i:0;R:10263;i:1;R:801;}s:33:"8:pbasvther-pbaqvgvba-bcrengbe-be";a:2:{i:0;R:10263;i:1;R:801;}s:34:"8:pbasvther-pbaqvgvba-bcrengbe-naq";a:2:{i:0;R:10263;i:1;R:801;}s:34:"8:pbasvther-pbaqvgvba-bcrengbe-kbe";a:2:{i:0;R:10263;i:1;R:801;}s:34:"8:pbasvther-pbaqvgvba-bcrengbe-abg";a:2:{i:0;R:10263;i:1;R:801;}s:26:"8:pbasvther-pbaqvgvba-anzr";a:2:{i:0;R:10263;i:1;R:801;}s:33:"8:pbasvther-pbaqvgvba-erdhverzrag";a:2:{i:0;R:10263;i:1;R:801;}s:28:"8:pbasvther-pbaqvgvba-anzr-1";a:2:{i:0;R:10263;i:1;R:801;}s:28:"8:pbasvther-pbaqvgvba-anzr-2";a:2:{i:0;R:10263;i:1;R:801;}s:28:"8:pbasvther-pbaqvgvba-anzr-3";a:2:{i:0;R:10263;i:1;R:801;}s:28:"8:pbasvther-pbaqvgvba-anzr-4";a:2:{i:0;R:10263;i:1;R:801;}s:28:"8:pbasvther-pbaqvgvba-anzr-5";a:2:{i:0;R:10263;i:1;R:801;}s:28:"8:pbasvther-pbaqvgvba-anzr-6";a:2:{i:0;R:10263;i:1;R:801;}s:28:"8:pbasvther-pbaqvgvba-anzr-7";a:2:{i:0;R:10263;i:1;R:801;}s:31:"8:pbasvther-nhgbcebzbgr-abpbaqf";a:2:{i:0;R:10263;i:1;R:801;}s:35:"8:pbasvther-pbaqvgvba-qrfpevcgvba-1";a:2:{i:0;R:10263;i:1;R:801;}s:35:"8:pbasvther-pbaqvgvba-qrfpevcgvba-2";a:2:{i:0;R:10263;i:1;R:801;}s:35:"8:pbasvther-pbaqvgvba-qrfpevcgvba-3";a:2:{i:0;R:10263;i:1;R:801;}s:35:"8:pbasvther-pbaqvgvba-qrfpevcgvba-4";a:2:{i:0;R:10263;i:1;R:801;}s:35:"8:pbasvther-pbaqvgvba-qrfpevcgvba-5";a:2:{i:0;R:10263;i:1;R:801;}s:35:"8:pbasvther-pbaqvgvba-qrfpevcgvba-6";a:2:{i:0;R:10263;i:1;R:801;}s:35:"8:pbasvther-pbaqvgvba-qrfpevcgvba-7";a:2:{i:0;R:10263;i:1;R:801;}s:34:"8:pbasvther-obbybc-qrfpevcgvba-naq";a:2:{i:0;R:10263;i:1;R:801;}s:33:"8:pbasvther-obbybc-qrfpevcgvba-be";a:2:{i:0;R:10263;i:1;R:801;}s:34:"8:pbasvther-obbybc-qrfpevcgvba-kbe";a:2:{i:0;R:10263;i:1;R:801;}s:34:"8:pbasvther-obbybc-qrfpevcgvba-abg";a:2:{i:0;R:10263;i:1;R:801;}s:27:"8:pbasvther-snezre-frggvatf";a:2:{i:0;R:10263;i:1;R:801;}s:29:"8:pbasvther-snezre-rkgrafvbaf";a:2:{i:0;R:10263;i:1;R:801;}s:34:"8:pbasvther-snezre-rkgrafvbaf-yvfg";a:2:{i:0;R:10263;i:1;R:801;}s:24:"8:pbasvther-frggvat-qrfp";a:2:{i:0;s:21:"ext-configuresettings";i:1;R:801;}s:30:"8:pbasvther-frggvat-jtfvgranzr";a:2:{i:0;R:10455;i:1;R:801;}s:33:"8:pbasvther-frggvat-jtnpgvbacnguf";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtnpgvbacnguf-xrl";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtnpgvbacnguf-inyhr";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtnyyqofnerybpnyubfg";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtqonitfgnghfcbyy";a:2:{i:0;R:10455;i:1;R:801;}s:32:"8:pbasvther-frggvat-jtqoreebeybt";a:2:{i:0;R:10455;i:1;R:801;}s:28:"8:pbasvther-frggvat-jtqoanzr";a:2:{i:0;R:10455;i:1;R:801;}s:32:"8:pbasvther-frggvat-jtqocnffjbeq";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtqonqzvacnffjbeq";a:2:{i:0;R:10455;i:1;R:801;}s:28:"8:pbasvther-frggvat-jtqocbeg";a:2:{i:0;R:10455;i:1;R:801;}s:30:"8:pbasvther-frggvat-jtqofreire";a:2:{i:0;R:10455;i:1;R:801;}s:28:"8:pbasvther-frggvat-jtqoglcr";a:2:{i:0;R:10455;i:1;R:801;}s:28:"8:pbasvther-frggvat-jtqohfre";a:2:{i:0;R:10455;i:1;R:801;}s:33:"8:pbasvther-frggvat-jtqonqzvahfre";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtybpnyqngnonfrf";a:2:{i:0;R:10455;i:1;R:801;}s:32:"8:pbasvther-frggvat-jtfrnepuglcr";a:2:{i:0;R:10455;i:1;R:801;}s:30:"8:pbasvther-frggvat-jtfunerqqo";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtfunerqcersvk";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtfunerqgnoyrf";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtnyybjvzntrzbivat";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jtphfgbzpbairegpbzznaq";a:2:{i:0;R:10455;i:1;R:801;}s:46:"8:pbasvther-frggvat-jttrarengrguhzoanvybacnefr";a:2:{i:0;R:10455;i:1;R:801;}s:43:"8:pbasvther-frggvat-jtfubjnepuvirguhzoanvyf";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtvtabervzntrreebef";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtvyyrtnysvyrpunef";a:2:{i:0;R:10455;i:1;R:801;}s:33:"8:pbasvther-frggvat-jtvzntryvzvgf";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtznknavzngrqtvsnern";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtznkvzntrnern";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtzrqvnunaqyref";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtzrqvnunaqyref-xrl";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtzrqvnunaqyref-inyhr";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtguhzoanvyfpevcgcngu";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtguhzohcevtug";a:2:{i:0;R:10455;i:1;R:801;}s:30:"8:pbasvther-frggvat-jtfubjrkvs";a:2:{i:0;R:10455;i:1;R:801;}s:33:"8:pbasvther-frggvat-jtguhzoyvzvgf";a:2:{i:0;R:10455;i:1;R:801;}s:47:"8:pbasvther-frggvat-jtrkpyhqrsebzguhzoanvychetr";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jthfrvzntrerfvmr";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtranoyrnhgbebgngvba";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtgehfgrqzrqvnsbezngf";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtvztnhguqrgnvyf";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtvztnhguchoyvpgrfg";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtgvssguhzoanvyglcr";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtznvapnpurglcr";a:2:{i:0;R:10455;i:1;R:801;}s:32:"8:pbasvther-frggvat-jtqonunaqyre";a:2:{i:0;R:10455;i:1;R:801;}s:32:"8:pbasvther-frggvat-jtpnpurrcbpu";a:2:{i:0;R:10455;i:1;R:801;}s:32:"8:pbasvther-frggvat-jtpnpurcntrf";a:2:{i:0;R:10455;i:1;R:801;}s:33:"8:pbasvther-frggvat-jtpnpurcersvk";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtpybpxfxrjshqtr";a:2:{i:0;R:10455;i:1;R:801;}s:58:"8:pbasvther-frggvat-jtvainyvqngrpnpurbaybpnyfrggvatfpunatr";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtsvyrpnpurqverpgbel";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtsvyrpnpurqrcgu";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtsbeprqenjfznkntr";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtdhrelpnpuryvzvg";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jterivfvbapnpurrkcvel";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtguhzoanvyrcbpu";a:2:{i:0;R:10455;i:1;R:801;}s:43:"8:pbasvther-frggvat-jtgenafpyhqrpnpurrkcvel";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jthfrsvyrpnpur";a:2:{i:0;R:10455;i:1;R:801;}s:29:"8:pbasvther-frggvat-jthfrtmvc";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtnyybjqvfcynlgvgyr";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtnyybjrkgreanyvzntrf";a:2:{i:0;R:10455;i:1;R:801;}s:45:"8:pbasvther-frggvat-jtnyybjrkgreanyvzntrfsebz";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jtranoyrvzntrjuvgryvfg";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtnyybjvzntrgnt";a:2:{i:0;R:10455;i:1;R:801;}s:50:"8:pbasvther-frggvat-jtrkcrafvircnefreshapgvbayvzvg";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtrkgreanyyvaxgnetrg";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtpyrnafvtangherf";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jttnyyrelbcgvbaf";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jttenzznesbezf";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtyvaxubyqreongpufvmr";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtznkccrkcnaqqrcgu";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtznkccabqrpbhag";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtznkgrzcyngrqrcgu";a:2:{i:0;R:10455;i:1;R:801;}s:33:"8:pbasvther-frggvat-jtznkgbpyriry";a:2:{i:0;R:10455;i:1;R:801;}s:32:"8:pbasvther-frggvat-jtcnefrepbas";a:2:{i:0;R:10455;i:1;R:801;}s:43:"8:pbasvther-frggvat-jtcnefrepnpurrkcvergvzr";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtcnefregrfgerzbgr";a:2:{i:0;R:10455;i:1;R:801;}s:48:"8:pbasvther-frggvat-jtcercebprffbepnpurguerfubyq";a:2:{i:0;R:10455;i:1;R:801;}s:47:"8:pbasvther-frggvat-jtertvfgrevagreanyrkgreanyf";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jterfgevpgqvfcynlgvgyr";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtnzrevpnaqngrf";a:2:{i:0;R:10455;i:1;R:801;}s:43:"8:pbasvther-frggvat-jtqvfnoyrynatpbairefvba";a:2:{i:0;R:10455;i:1;R:801;}s:44:"8:pbasvther-frggvat-jtqvfnoyrgvgyrpbairefvba";a:2:{i:0;R:10455;i:1;R:801;}s:44:"8:pbasvther-frggvat-jtsbeprhvzftnfpbagragzft";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtvagrejvxvzntvp";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtynathntrpbqr";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtyrtnplrapbqvat";a:2:{i:0;R:10455;i:1;R:801;}s:43:"8:pbasvther-frggvat-jtybtvaynathntrfryrpgbe";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtgenafyngrahzrenyf";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jthfrqngnonfrzrffntrf";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jthfrqlanzvpqngrf";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jtnegvpyrebobgcbyvpvrf";a:2:{i:0;R:10455;i:1;R:801;}s:46:"8:pbasvther-frggvat-jtnegvpyrebobgcbyvpvrf-xrl";a:2:{i:0;R:10455;i:1;R:801;}s:48:"8:pbasvther-frggvat-jtnegvpyrebobgcbyvpvrf-inyhr";a:2:{i:0;R:10455;i:1;R:801;}s:33:"8:pbasvther-frggvat-jtoernxsenzrf";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jtrqvgcntrsenzrbcgvbaf";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtpncvgnyyvaxf";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jtpncvgnyyvaxbireevqrf";a:2:{i:0;R:10455;i:1;R:801;}s:44:"8:pbasvther-frggvat-jtqrsnhygynathntrinevnag";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtqrsnhygebobgcbyvpl";a:2:{i:0;R:10455;i:1;R:801;}s:49:"8:pbasvther-frggvat-jtrkrzcgsebzhfreebobgfpbageby";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtrkgenynathntranzrf";a:2:{i:0;R:10455;i:1;R:801;}s:44:"8:pbasvther-frggvat-jtrkgenynathntranzrf-xrl";a:2:{i:0;R:10455;i:1;R:801;}s:46:"8:pbasvther-frggvat-jtrkgenynathntranzrf-inyhr";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtqvfnoyrqinevnagf";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jtorggreqverpgvbanyvgl";a:2:{i:0;R:10455;i:1;R:801;}s:44:"8:pbasvther-frggvat-jtpnabavpnyynathntryvaxf";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtrkgenenaqbzcntrfdy";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtrkgenfhogvgyr";a:2:{i:0;R:10455;i:1;R:801;}s:44:"8:pbasvther-frggvat-jtuvqrvagreynathntryvaxf";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtyrtnygvgyrpunef";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtznknegvpyrfvmr";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtznkerqverpgf";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtabsbyybjyvaxf";a:2:{i:0;R:10455;i:1;R:801;}s:46:"8:pbasvther-frggvat-jtabsbyybjqbznvarkprcgvbaf";a:2:{i:0;R:10455;i:1;R:801;}s:43:"8:pbasvther-frggvat-jtcntrfubjjngpuvathfref";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jterfgevpgvbayriryf";a:2:{i:0;R:10455;i:1;R:801;}s:32:"8:pbasvther-frggvat-jtfvgrabgvpr";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtfvgrfhccbegcntr";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtfglyrirefvba";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jthavirefnyrqvgohggba";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtheycebgbpbyf";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jthfrrkgreanyrqvgbe";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtnwnkyvprafrcerivrj";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtnyybjpbclhcybnqf";a:2:{i:0;R:10455;i:1;R:801;}s:43:"8:pbasvther-frggvat-jtnyybjnflappbclhcybnqf";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtpurpxsvyrrkgrafvbaf";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtpbclhcybnqfqbznvaf";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtranoyrhcybnqf";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jthcybnqznvagranapr";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtsvyroynpxyvfg";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtsvyrrkgrafvbaf";a:2:{i:0;R:10455;i:1;R:801;}s:31:"8:pbasvther-frggvat-jtsvyrfgber";a:2:{i:0;R:10455;i:1;R:801;}s:43:"8:pbasvther-frggvat-jtunfurqhcybnqqverpgbel";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtybpnysvyrercb";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jtfgevpgsvyrrkgrafvbaf";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jthcybnqfvmrjneavat";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtznkhcybnqfvmr";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jthcybnqfgnfuznkntr";a:2:{i:0;R:10455;i:1;R:801;}s:33:"8:pbasvther-frggvat-jtuggcgvzrbhg";a:2:{i:0;R:10455;i:1;R:801;}s:31:"8:pbasvther-frggvat-jtuggccebkl";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtnflapuggcgvzrbhg";a:2:{i:0;R:10455;i:1;R:801;}s:29:"8:pbasvther-frggvat-jtirefvba";a:2:{i:0;R:10455;i:1;R:801;}s:43:"8:pbasvther-frggvat-jtnyybjfcrpvnyvapyhfvba";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtrkcbegnyybjnyy";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtrkcbegnyybjuvfgbel";a:2:{i:0;R:10455;i:1;R:801;}s:49:"8:pbasvther-frggvat-jtrkcbegnyybjyvfgpbagevohgbef";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jtrkcbegsebzanzrfcnprf";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtrkcbegznkuvfgbel";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtrkcbegznkyvaxqrcgu";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtsvygreybtglcrf";a:2:{i:0;R:10455;i:1;R:801;}s:43:"8:pbasvther-frggvat-jtvzcbeggnetrganzrfcnpr";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtybterfgevpgvbaf";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtybterfgevpgvbaf-xrl";a:2:{i:0;R:10455;i:1;R:801;}s:43:"8:pbasvther-frggvat-jtybterfgevpgvbaf-inyhr";a:2:{i:0;R:10455;i:1;R:801;}s:47:"8:pbasvther-frggvat-jtznkerqverpgyvaxfergevrirq";a:2:{i:0;R:10455;i:1;R:801;}s:43:"8:pbasvther-frggvat-jtdhrelcntrqrsnhygyvzvg";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jterqverpgbaybtva";a:2:{i:0;R:10455;i:1;R:801;}s:33:"8:pbasvther-frggvat-jtfrpherybtva";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtfbegfcrpvnycntrf";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtfcrpvnycntrtebhcf";a:2:{i:0;R:10455;i:1;R:801;}s:43:"8:pbasvther-frggvat-jtfcrpvnycntrtebhcf-xrl";a:2:{i:0;R:10455;i:1;R:801;}s:45:"8:pbasvther-frggvat-jtfcrpvnyirefvbafubjubbxf";a:2:{i:0;R:10455;i:1;R:801;}s:33:"8:pbasvther-frggvat-jthfraccngeby";a:2:{i:0;R:10455;i:1;R:801;}s:33:"8:pbasvther-frggvat-jtnhgbcebzbgr";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtnhgbcebzbgr-inyhr";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtnhgbcebzbgrbapr";a:2:{i:0;R:10455;i:1;R:801;}s:45:"8:pbasvther-frggvat-jtnppbhagperngvbaguebggyr";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtnyybjcntrvasb";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtoybpxpvqeyvzvg";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtnhgboybpxrkcvel";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jtqryrgrerivfvbafyvzvg";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtqvfnoyrqnpgvbaf";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtarjcnffjbeqrkcvel";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtrznvypbasvezgbrqvg";a:2:{i:0;R:10455;i:1;R:801;}s:31:"8:pbasvther-frggvat-jtranoyrncv";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtranoyrjevgrncv";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtvzcyvpvgtebhcf";a:2:{i:0;R:10455;i:1;R:801;}s:45:"8:pbasvther-frggvat-jtcnffjbeqnggrzcgguebggyr";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtcnffjbeqfnyg";a:2:{i:0;R:10455;i:1;R:801;}s:30:"8:pbasvther-frggvat-jternqbayl";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jternqbaylsvyr";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jterfgevpgvbaglcrf";a:2:{i:0;R:10455;i:1;R:801;}s:31:"8:pbasvther-frggvat-jtfcnzertrk";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtfhzznelfcnzertrk";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtjuvgryvfgernq";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtrznvynhguragvpngvba";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtrzretraplpbagnpg";a:2:{i:0;R:10455;i:1;R:801;}s:33:"8:pbasvther-frggvat-jtranoyrrznvy";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtranoyrhfrerznvy";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtabercylnqqerff";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtcnffjbeqfraqre";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtcnffjbeqfraqreanzr";a:2:{i:0;R:10455;i:1;R:801;}s:48:"8:pbasvther-frggvat-jtcnffjbeqerzvaqreerfraqgvzr";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jtnqqvgvbanyznvycnenzf";a:2:{i:0;R:10455;i:1;R:801;}s:26:"8:pbasvther-frggvat-jtfzgc";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jthfrerznvyhfrercylgb";a:2:{i:0;R:10455;i:1;R:801;}s:54:"8:pbasvther-frggvat-jthfrerznvypbasvezngvbagbxrarkcvel";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtncverdhrfgybt";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtqrohtpbzzragf";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtqrohtqhzcfdy";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtqrohtybtsvyr";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtqrohtybttebhcf";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtqrohtybttebhcf-xrl";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jtqrohtybttebhcf-inyhr";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtqrohtenjcntr";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtqrohtybtcersvk";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtqrohterqverpgf";a:2:{i:0;R:10455;i:1;R:801;}s:43:"8:pbasvther-frggvat-jtqrohtcevaguggcurnqref";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtqrohtgvzrfgnzcf";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtqrohtgbbyone";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtqrirybczragjneavatf";a:2:{i:0;R:10455;i:1;R:801;}s:45:"8:pbasvther-frggvat-jtqrcerpngvbaeryrnfryvzvg";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jtfubjrkprcgvbaqrgnvyf";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jtfubjqoreebeonpxgenpr";a:2:{i:0;R:10455;i:1;R:801;}s:31:"8:pbasvther-frggvat-jtfubjqroht";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtfubjfdyreebef";a:2:{i:0;R:10455;i:1;R:801;}s:33:"8:pbasvther-frggvat-jtfgngfzrgubq";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtnttertngrfgngfvq";a:2:{i:0;R:10455;i:1;R:801;}s:32:"8:pbasvther-frggvat-jtwboehaengr";a:2:{i:0;R:10455;i:1;R:801;}s:32:"8:pbasvther-frggvat-jtwbopynffrf";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jthcqngrebjfcrewbo";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtcbbypbhagrepbas";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtranoyrfryravhz";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtfryravhzpbasvtsvyr";a:2:{i:0;R:10455;i:1;R:801;}s:32:"8:pbasvther-frggvat-jtqogrfghfre";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtqogrfgcnffjbeq";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jtranoyrwninfpevcggrfg";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jtwninfpevcggrfgpbasvt";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtncvpnpururycgvzrbhg";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtncvznkqoebjf";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtncvznkerfhygfvmr";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtncvznkhapnpurqqvssf";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtqvfnoyrdhrelcntrf";a:2:{i:0;R:10455;i:1;R:801;}s:44:"8:pbasvther-frggvat-jtqvfnoyrdhrelcntrhcqngr";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtqvfnoyrfrnepuhcqngr";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtqvfnoyrgrkgfrnepu";a:2:{i:0;R:10455;i:1;R:801;}s:30:"8:pbasvther-frggvat-jtrqvgvgvf";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtnyyhavpbqrsvkrf";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtsvknenovphavpbqr";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtsvkznynlnynzhavpbqr";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtsvkqbhoyrerqverpgf";a:2:{i:0;R:10455;i:1;R:801;}s:44:"8:pbasvther-frggvat-jtvainyvqerqverpggnetrgf";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtznkvzhzzbirqcntrf";a:2:{i:0;R:10455;i:1;R:801;}s:33:"8:pbasvther-frggvat-jtzrzbelyvzvg";a:2:{i:0;R:10455;i:1;R:801;}s:31:"8:pbasvther-frggvat-jtzvfrezbqr";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtfubjubfganzrf";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jthfrqhzoyvaxhcqngr";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtpnpurinelpbbxvrf";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtpbbxvrqbznva";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtpbbxvrrkcvengvba";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtpbbxvruggcbayl";a:2:{i:0;R:10455;i:1;R:801;}s:32:"8:pbasvther-frggvat-jtpbbxvrcngu";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtpbbxvrcersvk";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtpbbxvrfrpher";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtqvfnoyrpbbxvrpurpx";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtuggcbayloynpxyvfg";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtfrffvbaunaqyre";a:2:{i:0;R:10455;i:1;R:801;}s:33:"8:pbasvther-frggvat-jtfrffvbaanzr";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtvagreanyfreire";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtznkfdhvqchetrgvgyrf";a:2:{i:0;R:10455;i:1;R:801;}s:33:"8:pbasvther-frggvat-jtfdhvqznkntr";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtfdhvqfreiref";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtfdhvqfreirefabchetr";a:2:{i:0;R:10455;i:1;R:801;}s:28:"8:pbasvther-frggvat-jthfrrfv";a:2:{i:0;R:10455;i:1;R:801;}s:30:"8:pbasvther-frggvat-jthfrfdhvq";a:2:{i:0;R:10455;i:1;R:801;}s:28:"8:pbasvther-frggvat-jthfrkib";a:2:{i:0;R:10455;i:1;R:801;}s:31:"8:pbasvther-frggvat-jtinelbaksc";a:2:{i:0;R:10455;i:1;R:801;}s:46:"8:pbasvther-frggvat-jtnyybjfybjcnefreshapgvbaf";a:2:{i:0;R:10455;i:1;R:801;}s:43:"8:pbasvther-frggvat-jtqvfnoyrvagreanyfrnepu";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtrkgrafvbanffrgfcngu";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtrkgreanyfgberf";a:2:{i:0;R:10455;i:1;R:801;}s:29:"8:pbasvther-frggvat-jtfdyzbqr";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtnyybjfpurznhcqngrf";a:2:{i:0;R:10455;i:1;R:801;}s:45:"8:pbasvther-frggvat-jtfcrpvnycntrpnpurhcqngrf";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtfcrpvnycntrf";a:2:{i:0;R:10455;i:1;R:801;}s:44:"8:pbasvther-frggvat-jtfxvarkgrafvbashapgvbaf";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jttebhccrezvffvbaf";a:2:{i:0;R:10455;i:1;R:801;}s:44:"8:pbasvther-frggvat-jttebhccrezvffvbaf-inyhr";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jteribxrcrezvffvbaf";a:2:{i:0;R:10455;i:1;R:801;}s:45:"8:pbasvther-frggvat-jteribxrcrezvffvbaf-inyhr";a:2:{i:0;R:10455;i:1;R:801;}s:31:"8:pbasvther-frggvat-jtnqqtebhcf";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtnqqtebhcf-inyhr";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jterzbirtebhcf";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jterzbirtebhcf-inyhr";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jttebhcfnqqgbfrys";a:2:{i:0;R:10455;i:1;R:801;}s:43:"8:pbasvther-frggvat-jttebhcfnqqgbfrys-inyhr";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jttebhcferzbirsebzfrys";a:2:{i:0;R:10455;i:1;R:801;}s:48:"8:pbasvther-frggvat-jttebhcferzbirsebzfrys-inyhr";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtengryvzvgybt";a:2:{i:0;R:10455;i:1;R:801;}s:32:"8:pbasvther-frggvat-jtengryvzvgf";a:2:{i:0;R:10455;i:1;R:801;}s:46:"8:pbasvther-frggvat-jtengryvzvgfrkpyhqrqtebhcf";a:2:{i:0;R:10455;i:1;R:801;}s:43:"8:pbasvther-frggvat-jtengryvzvgfrkpyhqrqvcf";a:2:{i:0;R:10455;i:1;R:801;}s:26:"8:pbasvther-frggvat-jtsrrq";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtnqiregvfrqsrrqglcrf";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtsrrqpnpurgvzrbhg";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtsrrqqvssphgbss";a:2:{i:0;R:10455;i:1;R:801;}s:31:"8:pbasvther-frggvat-jtsrrqyvzvg";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtbireevqrfvgrsrrq";a:2:{i:0;R:10455;i:1;R:801;}s:48:"8:pbasvther-frggvat-jtnqinaprqfrnepuuvtuyvtugvat";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtranoyrzjfhttrfg";a:2:{i:0;R:10455;i:1;R:801;}s:45:"8:pbasvther-frggvat-jtranoyrbcrafrnepufhttrfg";a:2:{i:0;R:10455;i:1;R:801;}s:50:"8:pbasvther-frggvat-jtranoyrfrnepupbagevohgbefolvc";a:2:{i:0;R:10455;i:1;R:801;}s:30:"8:pbasvther-frggvat-jttbgbrqvg";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtzjfhttrfggrzcyngr";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtbcrafrnepugrzcyngr";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtfrnepusbejneqhey";a:2:{i:0;R:10455;i:1;R:801;}s:50:"8:pbasvther-frggvat-jtfrnepurirelguvatbaylybttrqva";a:2:{i:0;R:10455;i:1;R:801;}s:47:"8:pbasvther-frggvat-jtfrnepuuvtuyvtugobhaqnevrf";a:2:{i:0;R:10455;i:1;R:801;}s:46:"8:pbasvther-frggvat-jtfrnepufhttrfgpnpurrkcvel";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jtpbhaggbgnyfrnepuuvgf";a:2:{i:0;R:10455;i:1;R:801;}s:45:"8:pbasvther-frggvat-jthfrgjbohggbaffrnepusbez";a:2:{i:0;R:10455;i:1;R:801;}s:50:"8:pbasvther-frggvat-jtpbhagpngrtbevmrqvzntrfnfhfrq";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtnpgvirhfreqnlf";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtqvfnoyrpbhagref";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jtuvgpbhagrehcqngrserd";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtnegvpyrpbhagzrgubq";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jthfrpbzznpbhag";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jtjnagrqcntrfguerfubyq";a:2:{i:0;R:10455;i:1;R:801;}s:33:"8:pbasvther-frggvat-jtqrsnhygfxva";a:2:{i:0;R:10455;i:1;R:801;}s:30:"8:pbasvther-frggvat-jtfxvcfxva";a:2:{i:0;R:10455;i:1;R:801;}s:31:"8:pbasvther-frggvat-jtfxvcfxvaf";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtinyvqfxvaanzrf";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtinyvqfxvaanzrf-xrl";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jtinyvqfxvaanzrf-inyhr";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtirpgbehfrvpbajngpu";a:2:{i:0;R:10455;i:1;R:801;}s:43:"8:pbasvther-frggvat-jtirpgbehfrfvzcyrfrnepu";a:2:{i:0;R:10455;i:1;R:801;}s:43:"8:pbasvther-frggvat-jtirpgbefubjinevnaganzr";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtpbagraganzrfcnprf";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtrkgenanzrfcnprf";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtrkgenanzrfcnprf-xrl";a:2:{i:0;R:10455;i:1;R:801;}s:43:"8:pbasvther-frggvat-jtrkgenanzrfcnprf-inyhr";a:2:{i:0;R:10455;i:1;R:801;}s:43:"8:pbasvther-frggvat-jtrkgentraqreanzrfcnprf";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtzrgnanzrfcnpr";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtzrgnanzrfcnprgnyx";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtanzrfcnprnyvnfrf";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jtanzrfcnprnyvnfrf-xrl";a:2:{i:0;R:10455;i:1;R:801;}s:44:"8:pbasvther-frggvat-jtanzrfcnprnyvnfrf-inyhr";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtanzrfcnprcebgrpgvba";a:2:{i:0;R:10455;i:1;R:801;}s:47:"8:pbasvther-frggvat-jtanzrfcnprcebgrpgvba-inyhr";a:2:{i:0;R:10455;i:1;R:801;}s:44:"8:pbasvther-frggvat-jtanzrfcnprebobgcbyvpvrf";a:2:{i:0;R:10455;i:1;R:801;}s:50:"8:pbasvther-frggvat-jtanzrfcnprebobgcbyvpvrf-inyhr";a:2:{i:0;R:10455;i:1;R:801;}s:51:"8:pbasvther-frggvat-jtanzrfcnprfgborfrnepurqqrsnhyg";a:2:{i:0;R:10455;i:1;R:801;}s:48:"8:pbasvther-frggvat-jtanzrfcnprfgborfrnepurquryc";a:2:{i:0;R:10455;i:1;R:801;}s:44:"8:pbasvther-frggvat-jtanzrfcnprfjvgufhocntrf";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jtabsbyybjafrkprcgvbaf";a:2:{i:0;R:10455;i:1;R:801;}s:45:"8:pbasvther-frggvat-jtabavapyhqnoyranzrfcnprf";a:2:{i:0;R:10455;i:1;R:801;}s:45:"8:pbasvther-frggvat-jtcerivrjbabcraanzrfcnprf";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtfvgrzncanzrfcnprf";a:2:{i:0;R:10455;i:1;R:801;}s:49:"8:pbasvther-frggvat-jtfvgrzncanzrfcnprfcevbevgvrf";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jtpngrtbelzntvptnyyrel";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtpngrtbelcntvatyvzvg";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jthfrpngrtbeloebjfre";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtpngrtbelpbyyngvba";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jtugpczhygvpnfgnqqerff";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtugpczhygvpnfgggy";a:2:{i:0;R:10455;i:1;R:801;}s:30:"8:pbasvther-frggvat-jtugpccbeg";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtpbclevtugvpba";a:2:{i:0;R:10455;i:1;R:801;}s:46:"8:pbasvther-frggvat-jtranoyrperngvirpbzzbafeqs";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtranoyrqhoyvapbereqs";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtyvprafrgrezf";a:2:{i:0;R:10455;i:1;R:801;}s:32:"8:pbasvther-frggvat-jtznkperqvgf";a:2:{i:0;R:10455;i:1;R:801;}s:32:"8:pbasvther-frggvat-jtevtugfvpba";a:2:{i:0;R:10455;i:1;R:801;}s:32:"8:pbasvther-frggvat-jtevtugfcntr";a:2:{i:0;R:10455;i:1;R:801;}s:32:"8:pbasvther-frggvat-jtevtugfgrkg";a:2:{i:0;R:10455;i:1;R:801;}s:31:"8:pbasvther-frggvat-jtevtugfhey";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtfubjperqvgfvsznk";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jthfrpbclevtughcybnq";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtnhgbpbasvezntr";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtnhgbpbasvezpbhag";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtnyybjernyanzr";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtnyybjhfrefxva";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtnyybjhfrepffcersf";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtnhgbperngrcbyvpl";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtnyybjcerspunatr";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtnyybjcerspunatr-xrl";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtrkgreanynhguglcr";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtrkgreanynhgupbas";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtqrsnhyghfrebcgvbaf";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtqvfnoyrnabagnyx";a:2:{i:0;R:10455;i:1;R:801;}s:33:"8:pbasvther-frggvat-jtuvqqracersf";a:2:{i:0;R:10455;i:1;R:801;}s:47:"8:pbasvther-frggvat-jtvainyvqhfreanzrpunenpgref";a:2:{i:0;R:10455;i:1;R:801;}s:50:"8:pbasvther-frggvat-jthfreevtugfvagrejvxvqryvzvgre";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtznkanzrpunef";a:2:{i:0;R:10455;i:1;R:801;}s:33:"8:pbasvther-frggvat-jtznkfvtpunef";a:2:{i:0;R:10455;i:1;R:801;}s:43:"8:pbasvther-frggvat-jtzvavznycnffjbeqyratgu";a:2:{i:0;R:10455;i:1;R:801;}s:48:"8:pbasvther-frggvat-jtyvircnffjbeqfgeratgupurpxf";a:2:{i:0;R:10455;i:1;R:801;}s:32:"8:pbasvther-frggvat-jtarjhfreybt";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtcnffjbeqerfrgebhgrf";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jterfreirqhfreanzrf";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtfubjvcvaurnqre";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtoebjfreoynpxyvfg";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtnagvybpxsyntf";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtpbzznaqyvarqnexot";a:2:{i:0;R:10455;i:1;R:801;}s:32:"8:pbasvther-frggvat-jthctenqrxrl";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtpbzcerfferivfvbaf";a:2:{i:0;R:10455;i:1;R:801;}s:46:"8:pbasvther-frggvat-jtqvfnoyrbhgchgpbzcerffvba";a:2:{i:0;R:10455;i:1;R:801;}s:33:"8:pbasvther-frggvat-jtfraq404pbqr";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtrkgreanyqvssratvar";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtznkfuryysvyrfvmr";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtznkfuryyzrzbel";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtznkfuryygvzr";a:2:{i:0;R:10455;i:1;R:801;}s:33:"8:pbasvther-frggvat-jtfuryyybpnyr";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jthcqngrebjfcredhrel";a:2:{i:0;R:10455;i:1;R:801;}s:47:"8:pbasvther-frggvat-jthfrnhgbzngvprqvgfhzznevrf";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jthfrpbzovarqybtvayvax";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jthfrgenpxonpxf";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jthfrgntsvygre";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jtqvfnoyruneqerqverpgf";a:2:{i:0;R:10455;i:1;R:801;}s:45:"8:pbasvther-frggvat-jtranoyrfpnelgenafpyhqvat";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtvzcbegfbheprf";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtvagrejvxvpnpur";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtvagrejvxvrkcvel";a:2:{i:0;R:10455;i:1;R:801;}s:43:"8:pbasvther-frggvat-jtvagrejvxvsnyyonpxfvgr";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtvagrejvxvfpbcrf";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtybpnyvagrejvxv";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jterqverpgfbheprf";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtoybpxbcracebkvrf";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtranoyrqafoynpxyvfg";a:2:{i:0;R:10455;i:1;R:801;}s:31:"8:pbasvther-frggvat-jtcebklyvfg";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtcebklzrzprkcvel";a:2:{i:0;R:10455;i:1;R:801;}s:32:"8:pbasvther-frggvat-jtcebklcbegf";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtcebklfpevcgcngu";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtcebkljuvgryvfg";a:2:{i:0;R:10455;i:1;R:801;}s:31:"8:pbasvther-frggvat-jtfrpergxrl";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtqafoynpxyvfgheyf";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jthfrcevingrvcf";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtfdyvgrqngnqve";a:2:{i:0;R:10455;i:1;R:801;}s:32:"8:pbasvther-frggvat-jtqozjfpurzn";a:2:{i:0;R:10455;i:1;R:801;}s:30:"8:pbasvther-frggvat-jtqozlfdy5";a:2:{i:0;R:10455;i:1;R:801;}s:30:"8:pbasvther-frggvat-jtqocersvk";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtqognoyrbcgvbaf";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtqogenafnpgvbaf";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtqopyhfgregvzrbhg";a:2:{i:0;R:10455;i:1;R:801;}s:31:"8:pbasvther-frggvat-jtqofreiref";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jtqrsnhygrkgreanyfgber";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtrkgreanyfreiref";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtyosnpgbelpbas";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtznfgrejnvggvzrbhg";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtfyniryntpevgvpny";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtfyniryntjneavat";a:2:{i:0;R:10455;i:1;R:801;}s:31:"8:pbasvther-frggvat-jtnagvivehf";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtnagvivehferdhverq";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtnagvivehffrghc";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtnyybjgvgyrfvafit";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtfitpbairegre";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtfitpbairegrecngu";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtfitpbairegref";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtfitpbairegref-xrl";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtfitpbairegref-inyhr";a:2:{i:0;R:10455;i:1;R:801;}s:32:"8:pbasvther-frggvat-jtfitznkfvmr";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtfitzrgnqngnphgbss";a:2:{i:0;R:10455;i:1;R:801;}s:47:"8:pbasvther-frggvat-jtvzntrzntvpxpbairegpbzznaq";a:2:{i:0;R:10455;i:1;R:801;}s:48:"8:pbasvther-frggvat-jtvzntrzntvpxvqragvslpbzznaq";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtvzntrzntvpxgrzcqve";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtfunecracnenzrgre";a:2:{i:0;R:10455;i:1;R:801;}s:47:"8:pbasvther-frggvat-jtfunecraerqhpgvbaguerfubyq";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jthfrvzntrzntvpx";a:2:{i:0;R:10455;i:1;R:801;}s:30:"8:pbasvther-frggvat-jtqwihqhzc";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtqwihbhgchgrkgrafvba";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtqwihcbfgcebprffbe";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtqwiheraqrere";a:2:{i:0;R:10455;i:1;R:801;}s:31:"8:pbasvther-frggvat-jtqwihgbkzy";a:2:{i:0;R:10455;i:1;R:801;}s:29:"8:pbasvther-frggvat-jtqwihgkg";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtzrzpnpurqcrefvfgrag";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtzrzpnpurqfreiref";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtzrzpnpurqgvzrbhg";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtfrffvbafvazrzpnpurq";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtpnpurqverpgbel";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtzrffntrpnpurglcr";a:2:{i:0;R:10455;i:1;R:801;}s:43:"8:pbasvther-frggvat-jtybpnyvfngvbapnpurpbas";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jthfrybpnyzrffntrpnpur";a:2:{i:0;R:10455;i:1;R:801;}s:49:"8:pbasvther-frggvat-jtybpnyzrffntrpnpurfrevnyvmrq";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jtnqncgvirzrffntrpnpur";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtzftpnpurrkcvel";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jtznkzftpnpurragelfvmr";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtcnefrepnpurglcr";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtranoyrcnefrepnpur";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtranoyrfvqronepnpur";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jteraqreunfunccraq";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtfvqronepnpurrkcvel";a:2:{i:0;R:10455;i:1;R:801;}s:29:"8:pbasvther-frggvat-jthfrrgnt";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtnyjnlfhfrgvql";a:2:{i:0;R:10455;i:1;R:801;}s:31:"8:pbasvther-frggvat-jtqrohtgvql";a:2:{i:0;R:10455;i:1;R:801;}s:29:"8:pbasvther-frggvat-jtgvqlova";a:2:{i:0;R:10455;i:1;R:801;}s:30:"8:pbasvther-frggvat-jtgvqlpbas";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtgvqlvagreany";a:2:{i:0;R:10455;i:1;R:801;}s:30:"8:pbasvther-frggvat-jtgvqlbcgf";a:2:{i:0;R:10455;i:1;R:801;}s:29:"8:pbasvther-frggvat-jthfrgvql";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtinyvqngrnyyugzy";a:2:{i:0;R:10455;i:1;R:801;}s:29:"8:pbasvther-frggvat-jtenjugzy";a:2:{i:0;R:10455;i:1;R:801;}s:47:"8:pbasvther-frggvat-jtqvfnoyrhcybnqfpevcgpurpxf";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtnyybjwninhcybnqf";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtkzyzvzrglcrf";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtkzyzvzrglcrf-xrl";a:2:{i:0;R:10455;i:1;R:801;}s:53:"8:pbasvther-frggvat-jtpyrnahccerfragngvbanynggevohgrf";a:2:{i:0;R:10455;i:1;R:801;}s:49:"8:pbasvther-frggvat-jtranoyrgbbygvcfnaqnpprffxrlf";a:2:{i:0;R:10455;i:1;R:801;}s:27:"8:pbasvther-frggvat-jtugzy5";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtugzy5irefvba";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtjryysbezrqkzy";a:2:{i:0;R:10455;i:1;R:801;}s:29:"8:pbasvther-frggvat-jtqbpglcr";a:2:{i:0;R:10455;i:1;R:801;}s:25:"8:pbasvther-frggvat-jtqgq";a:2:{i:0;R:10455;i:1;R:801;}s:30:"8:pbasvther-frggvat-jtzvzrglcr";a:2:{i:0;R:10455;i:1;R:801;}s:43:"8:pbasvther-frggvat-jtkugzyqrsnhyganzrfcnpr";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtkugzyanzrfcnprf";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtkugzyanzrfcnprf-xrl";a:2:{i:0;R:10455;i:1;R:801;}s:46:"8:pbasvther-frggvat-jtnyybjzvpebqngnnggevohgrf";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtnyybjeqsnnggevohgrf";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtybpnygvzrmbar";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtybpnygmbssfrg";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtnyybjhfrepff";a:2:{i:0;R:10455;i:1;R:801;}s:33:"8:pbasvther-frggvat-jtnyybjhfrewf";a:2:{i:0;R:10455;i:1;R:801;}s:32:"8:pbasvther-frggvat-jthfrfvgrpff";a:2:{i:0;R:10455;i:1;R:801;}s:31:"8:pbasvther-frggvat-jthfrfvgrwf";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtunaquryqfglyr";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtunaquryqsbevcubar";a:2:{i:0;R:10455;i:1;R:801;}s:45:"8:pbasvther-frggvat-jtvapyhqryrtnplwninfpevcg";a:2:{i:0;R:10455;i:1;R:801;}s:45:"8:pbasvther-frggvat-jtyrtnplwninfpevcgtybonyf";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jterfbhepronfrcngu";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jterfbheprybnqreqroht";a:2:{i:0;R:10455;i:1;R:801;}s:56:"8:pbasvther-frggvat-jterfbheprybnqrevayvarcevingrzbqhyrf";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jterfbheprybnqreznkntr";a:2:{i:0;R:10455;i:1;R:801;}s:50:"8:pbasvther-frggvat-jterfbheprybnqreznkdhrelyratgu";a:2:{i:0;R:10455;i:1;R:801;}s:57:"8:pbasvther-frggvat-jterfbheprybnqrezvavsvreznkyvaryratgu";a:2:{i:0;R:10455;i:1;R:801;}s:63:"8:pbasvther-frggvat-jterfbheprybnqrezvavsvrefgngrzragfbabjayvar";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jterfbheprybnqrehfrrfv";a:2:{i:0;R:10455;i:1;R:801;}s:46:"8:pbasvther-frggvat-jterfbheprybnqreinyvqngrwf";a:2:{i:0;R:10455;i:1;R:801;}s:52:"8:pbasvther-frggvat-jterfbheprybnqreinyvqngrfgngvpwf";a:2:{i:0;R:10455;i:1;R:801;}s:29:"8:pbasvther-frggvat-jthfrnwnk";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtnwnkrkcbegyvfg";a:2:{i:0;R:10455;i:1;R:801;}s:32:"8:pbasvther-frggvat-jtnwnkfrnepu";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtnwnkhcybnqqrfgpurpx";a:2:{i:0;R:10455;i:1;R:801;}s:31:"8:pbasvther-frggvat-jtnwnkjngpu";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jtpebfffvgrnwnkqbznvaf";a:2:{i:0;R:10455;i:1;R:801;}s:51:"8:pbasvther-frggvat-jtpebfffvgrnwnkqbznvarkprcgvbaf";a:2:{i:0;R:10455;i:1;R:801;}s:33:"8:pbasvther-frggvat-jtyvircerivrj";a:2:{i:0;R:10455;i:1;R:801;}s:32:"8:pbasvther-frggvat-jtwfzvzrglcr";a:2:{i:0;R:10455;i:1;R:801;}s:43:"8:pbasvther-frggvat-jtybnqsvyrvasbrkgrafvba";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtzvzrqrgrpgbepbzznaq";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtzvzrvasbsvyr";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtzvzrglcrsvyr";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtirevslzvzrglcr";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtzvzrglcroynpxyvfg";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtpnpurfunerqhcybnqf";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtsbervtasvyrercbf";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jthfrvafgnagpbzzbaf";a:2:{i:0;R:10455;i:1;R:801;}s:46:"8:pbasvther-frggvat-jtsrgpupbzzbafqrfpevcgvbaf";a:2:{i:0;R:10455;i:1;R:801;}s:49:"8:pbasvther-frggvat-jtunfurqfunerqhcybnqqverpgbel";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtercbfvgbelonfrhey";a:2:{i:0;R:10455;i:1;R:801;}s:47:"8:pbasvther-frggvat-jtfunerqguhzoanvyfpevcgcngu";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtfunerqhcybnqqoanzr";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jtfunerqhcybnqqocersvk";a:2:{i:0;R:10455;i:1;R:801;}s:43:"8:pbasvther-frggvat-jtfunerqhcybnqqverpgbel";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtfunerqhcybnqcngu";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jthfrfunerqhcybnqf";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtnccyrgbhpuvpba";a:2:{i:0;R:10455;i:1;R:801;}s:33:"8:pbasvther-frggvat-jtnegvpyrcngu";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtpnabavpnyfreire";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtqryrgrqqverpgbel";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtqverpgbelzbqr";a:2:{i:0;R:10455;i:1;R:801;}s:26:"8:pbasvther-frggvat-jtqvss";a:2:{i:0;R:10455;i:1;R:801;}s:27:"8:pbasvther-frggvat-jtqvss3";a:2:{i:0;R:10455;i:1;R:801;}s:29:"8:pbasvther-frggvat-jtsnivpba";a:2:{i:0;R:10455;i:1;R:801;}s:33:"8:pbasvther-frggvat-jtsbbgrevpbaf";a:2:{i:0;R:10455;i:1;R:801;}s:26:"8:pbasvther-frggvat-jtybtb";a:2:{i:0;R:10455;i:1;R:801;}s:32:"8:pbasvther-frggvat-jtybnqfpevcg";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jterqverpgfpevcg";a:2:{i:0;R:10455;i:1;R:801;}s:28:"8:pbasvther-frggvat-jtcucpyv";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtrkvi2pbzznaq";a:2:{i:0;R:10455;i:1;R:801;}s:28:"8:pbasvther-frggvat-jtfpevcg";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtfpevcgrkgrafvba";a:2:{i:0;R:10455;i:1;R:801;}s:32:"8:pbasvther-frggvat-jtfpevcgcngu";a:2:{i:0;R:10455;i:1;R:801;}s:28:"8:pbasvther-frggvat-jtfreire";a:2:{i:0;R:10455;i:1;R:801;}s:32:"8:pbasvther-frggvat-jtfreireanzr";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtfglyrqverpgbel";a:2:{i:0;R:10455;i:1;R:801;}s:31:"8:pbasvther-frggvat-jtfglyrcngu";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtybpnyfglyrcngu";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtfglyrfurrgcngu";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtgzcqverpgbel";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jthcybnqonfrhey";a:2:{i:0;R:10455;i:1;R:801;}s:33:"8:pbasvther-frggvat-jthfrcnguvasb";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jthcybnqqverpgbel";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jthcybnqanivtngvbahey";a:2:{i:0;R:10455;i:1;R:801;}s:42:"8:pbasvther-frggvat-jthcybnqzvffvatsvyrhey";a:2:{i:0;R:10455;i:1;R:801;}s:32:"8:pbasvther-frggvat-jthcybnqcngu";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtinevnagnegvpyrcngu";a:2:{i:0;R:10455;i:1;R:801;}s:46:"8:pbasvther-frggvat-jthcybnqfgnfufpnyreonfrhey";a:2:{i:0;R:10455;i:1;R:801;}s:51:"8:pbasvther-frggvat-jtnyybjpngrtbevmrqerpragpunatrf";a:2:{i:0;R:10455;i:1;R:801;}s:31:"8:pbasvther-frggvat-jtchgvcvaep";a:2:{i:0;R:10455;i:1;R:801;}s:44:"8:pbasvther-frggvat-jtnhgbcebzbgrbaprybtvaep";a:2:{i:0;R:10455;i:1;R:801;}s:44:"8:pbasvther-frggvat-jteppunatrqfvmrguerfubyq";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtepsvygreolntr";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtepyvaxyvzvgf";a:2:{i:0;R:10455;i:1;R:801;}s:32:"8:pbasvther-frggvat-jtepyvaxqnlf";a:2:{i:0;R:10455;i:1;R:801;}s:30:"8:pbasvther-frggvat-jtepznkntr";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtepfubjpunatrqfvmr";a:2:{i:0;R:10455;i:1;R:801;}s:41:"8:pbasvther-frggvat-jtepfubjjngpuvathfref";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtfubjhcqngrqznexre";a:2:{i:0;R:10455;i:1;R:801;}s:33:"8:pbasvther-frggvat-jthfrepcngeby";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtep2hqcnqqerff";a:2:{i:0;R:10455;i:1;R:801;}s:43:"8:pbasvther-frggvat-jtep2hqcvagrejvxvcersvk";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtep2hqcbzvgobgf";a:2:{i:0;R:10455;i:1;R:801;}s:32:"8:pbasvther-frggvat-jtep2hqccbeg";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtep2hqccersvk";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtoybpxnyybjfhgrqvg";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtoybpxqvfnoyrfybtva";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtflfbcrznvyonaf";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtrabgvssebzrqvgbe";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtrabgvsvzcrefbany";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtrabgvsznkerpvcf";a:2:{i:0;R:10455;i:1;R:801;}s:38:"8:pbasvther-frggvat-jtrabgvszvaberqvgf";a:2:{i:0;R:10455;i:1;R:801;}s:47:"8:pbasvther-frggvat-jtrabgvserirnyrqvgbenqqerff";a:2:{i:0;R:10455;i:1;R:801;}s:35:"8:pbasvther-frggvat-jtrabgvshfrwbod";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtrabgvshfrernyanzr";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtrabgvshfregnyx";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtrabgvsjngpuyvfg";a:2:{i:0;R:10455;i:1;R:801;}s:47:"8:pbasvther-frggvat-jthfrefabgvsvrqbanyypunatrf";a:2:{i:0;R:10455;i:1;R:801;}s:40:"8:pbasvther-frggvat-jtqrohtshapgvbaragel";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtqrohtcebsvyvat";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jtcebsvyrpnyygerr";a:2:{i:0;R:10455;i:1;R:801;}s:34:"8:pbasvther-frggvat-jtcebsvyryvzvg";a:2:{i:0;R:10455;i:1;R:801;}s:33:"8:pbasvther-frggvat-jtcebsvyrbayl";a:2:{i:0;R:10455;i:1;R:801;}s:36:"8:pbasvther-frggvat-jtcebsvyrcreubfg";a:2:{i:0;R:10455;i:1;R:801;}s:39:"8:pbasvther-frggvat-jtcebsvyrgbqngnonfr";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jthqccebsvyreubfg";a:2:{i:0;R:10455;i:1;R:801;}s:37:"8:pbasvther-frggvat-jthqccebsvyrecbeg";a:2:{i:0;R:10455;i:1;R:801;}s:28:"8:pbasveznppbhag-arjerdhrfgf";a:2:{i:0;s:18:"ext-confirmaccount";i:1;R:801;}s:28:"8:erdhrfgnppbhag-ybtvaabgvpr";a:2:{i:0;R:11083;i:1;R:801;}s:22:"8:evtug-pbasveznppbhag";a:2:{i:0;R:11083;i:1;R:801;}s:18:"8:evtug-erdhrfgvcf";a:2:{i:0;R:11083;i:1;R:801;}s:25:"8:evtug-ybbxhcperqragvnyf";a:2:{i:0;R:11083;i:1;R:801;}s:17:"8:pbasveznppbhagf";a:2:{i:0;s:23:"ext-confirmaccount-page";i:1;R:801;}s:18:"8:pbasvezrqvg-qrfp";a:2:{i:0;R:11089;i:1;R:801;}s:25:"8:pbasveznppbhag-znvagrkg";a:2:{i:0;R:11089;i:1;R:801;}s:21:"8:pbasveznppbhag-yvfg";a:2:{i:0;R:11089;i:1;R:801;}s:22:"8:pbasveznppbhag-yvfg2";a:2:{i:0;R:11089;i:1;R:801;}s:22:"8:pbasveznppbhag-yvfg3";a:2:{i:0;R:11089;i:1;R:801;}s:21:"8:pbasveznppbhag-grkg";a:2:{i:0;R:11089;i:1;R:801;}s:23:"8:pbasveznppbhag-abar-b";a:2:{i:0;R:11089;i:1;R:801;}s:23:"8:pbasveznppbhag-abar-u";a:2:{i:0;R:11089;i:1;R:801;}s:23:"8:pbasveznppbhag-abar-e";a:2:{i:0;R:11089;i:1;R:801;}s:23:"8:pbasveznppbhag-abar-r";a:2:{i:0;R:11089;i:1;R:801;}s:23:"8:pbasveznppbhag-erny-d";a:2:{i:0;R:11089;i:1;R:801;}s:24:"8:pbasveznppbhag-rznvy-d";a:2:{i:0;R:11089;i:1;R:801;}s:22:"8:pbasveznppbhag-ovb-d";a:2:{i:0;R:11089;i:1;R:801;}s:25:"8:pbasveznppbhag-fubjbcra";a:2:{i:0;R:11089;i:1;R:801;}s:24:"8:pbasveznppbhag-fubjerw";a:2:{i:0;R:11089;i:1;R:801;}s:25:"8:pbasveznppbhag-fubjuryq";a:2:{i:0;R:11089;i:1;R:801;}s:24:"8:pbasveznppbhag-fubjrkc";a:2:{i:0;R:11089;i:1;R:801;}s:23:"8:pbasveznppbhag-erivrj";a:2:{i:0;R:11089;i:1;R:801;}s:22:"8:pbasveznppbhag-glcrf";a:2:{i:0;R:11089;i:1;R:801;}s:20:"8:pbasveznppbhag-nyy";a:2:{i:0;R:11089;i:1;R:801;}s:21:"8:pbasveznppbhag-glcr";a:2:{i:0;R:11089;i:1;R:801;}s:23:"8:pbasveznppbhag-glcr-0";a:2:{i:0;R:11089;i:1;R:801;}s:23:"8:pbasveznppbhag-glcr-1";a:2:{i:0;R:11089;i:1;R:801;}s:23:"8:pbasveznppbhag-d-bcra";a:2:{i:0;R:11089;i:1;R:801;}s:23:"8:pbasveznppbhag-d-uryq";a:2:{i:0;R:11089;i:1;R:801;}s:22:"8:pbasveznppbhag-d-erw";a:2:{i:0;R:11089;i:1;R:801;}s:24:"8:pbasveznppbhag-d-fgnyr";a:2:{i:0;R:11089;i:1;R:801;}s:22:"8:pbasveznppbhag-onqvq";a:2:{i:0;R:11089;i:1;R:801;}s:25:"8:pbasveznppbhag-yrt-hfre";a:2:{i:0;R:11089;i:1;R:801;}s:26:"8:pbasveznppbhag-yrt-nernf";a:2:{i:0;R:11089;i:1;R:801;}s:27:"8:pbasveznppbhag-yrt-crefba";a:2:{i:0;R:11089;i:1;R:801;}s:26:"8:pbasveznppbhag-yrt-bgure";a:2:{i:0;R:11089;i:1;R:801;}s:21:"8:pbasveznppbhag-anzr";a:2:{i:0;R:11089;i:1;R:801;}s:21:"8:pbasveznppbhag-erny";a:2:{i:0;R:11089;i:1;R:801;}s:22:"8:pbasveznppbhag-rznvy";a:2:{i:0;R:11089;i:1;R:801;}s:24:"8:pbasveznppbhag-erdglcr";a:2:{i:0;R:11089;i:1;R:801;}s:22:"8:pbasveznppbhag-cbf-0";a:2:{i:0;R:11089;i:1;R:801;}s:22:"8:pbasveznppbhag-cbf-1";a:2:{i:0;R:11089;i:1;R:801;}s:20:"8:pbasveznppbhag-ovb";a:2:{i:0;R:11089;i:1;R:801;}s:23:"8:pbasveznppbhag-nggnpu";a:2:{i:0;R:11089;i:1;R:801;}s:22:"8:pbasveznppbhag-abgrf";a:2:{i:0;R:11089;i:1;R:801;}s:21:"8:pbasveznppbhag-heyf";a:2:{i:0;R:11089;i:1;R:801;}s:23:"8:pbasveznppbhag-abar-c";a:2:{i:0;R:11089;i:1;R:801;}s:24:"8:pbasveznppbhag-pbasvez";a:2:{i:0;R:11089;i:1;R:801;}s:22:"8:pbasveznppbhag-rpbas";a:2:{i:0;R:11089;i:1;R:801;}s:23:"8:pbasveznppbhag-erwrpg";a:2:{i:0;R:11089;i:1;R:801;}s:25:"8:pbasveznppbhag-engvbany";a:2:{i:0;R:11089;i:1;R:801;}s:25:"8:pbasveznppbhag-abernfba";a:2:{i:0;R:11089;i:1;R:801;}s:24:"8:pbasveznppbhag-nhgberw";a:2:{i:0;R:11089;i:1;R:801;}s:21:"8:pbasveznppbhag-uryq";a:2:{i:0;R:11089;i:1;R:801;}s:23:"8:pbasveznppbhag-perngr";a:2:{i:0;R:11089;i:1;R:801;}s:21:"8:pbasveznppbhag-qral";a:2:{i:0;R:11089;i:1;R:801;}s:21:"8:pbasveznppbhag-ubyq";a:2:{i:0;R:11089;i:1;R:801;}s:21:"8:pbasveznppbhag-fcnz";a:2:{i:0;R:11089;i:1;R:801;}s:23:"8:pbasveznppbhag-ernfba";a:2:{i:0;R:11089;i:1;R:801;}s:19:"8:pbasveznppbhag-vc";a:2:{i:0;R:11089;i:1;R:801;}s:23:"8:pbasveznppbhag-yrtraq";a:2:{i:0;R:11089;i:1;R:801;}s:23:"8:pbasveznppbhag-fhozvg";a:2:{i:0;R:11089;i:1;R:801;}s:27:"8:pbasveznppbhag-arrqernfba";a:2:{i:0;R:11089;i:1;R:801;}s:25:"8:pbasveznppbhag-pnagubyq";a:2:{i:0;R:11089;i:1;R:801;}s:26:"8:pbasveznppbhag-onqnpgvba";a:2:{i:0;R:11089;i:1;R:801;}s:20:"8:pbasveznppbhag-npp";a:2:{i:0;R:11089;i:1;R:801;}s:20:"8:pbasveznppbhag-erw";a:2:{i:0;R:11089;i:1;R:801;}s:24:"8:pbasveznppbhag-ivrjvat";a:2:{i:0;R:11089;i:1;R:801;}s:24:"8:pbasveznppbhag-fhzznel";a:2:{i:0;R:11089;i:1;R:801;}s:21:"8:pbasveznppbhag-jryp";a:2:{i:0;R:11089;i:1;R:801;}s:21:"8:pbasveznppbhag-jfhz";a:2:{i:0;R:11089;i:1;R:801;}s:27:"8:pbasveznppbhag-rznvy-fhow";a:2:{i:0;R:11089;i:1;R:801;}s:27:"8:pbasveznppbhag-rznvy-obql";a:2:{i:0;R:11089;i:1;R:801;}s:28:"8:pbasveznppbhag-rznvy-obql2";a:2:{i:0;R:11089;i:1;R:801;}s:28:"8:pbasveznppbhag-rznvy-obql3";a:2:{i:0;R:11089;i:1;R:801;}s:28:"8:pbasveznppbhag-rznvy-obql4";a:2:{i:0;R:11089;i:1;R:801;}s:28:"8:pbasveznppbhag-rznvy-obql5";a:2:{i:0;R:11089;i:1;R:801;}s:16:"8:erdhrfgnppbhag";a:2:{i:0;s:33:"ext-confirmaccount-requestaccount";i:1;R:801;}s:21:"8:erdhrfgnppbhag-grkg";a:2:{i:0;R:11164;i:1;R:801;}s:23:"8:erdhrfgnppbhag-sbbgre";a:2:{i:0;R:11164;i:1;R:801;}s:21:"8:erdhrfgnppbhag-cntr";a:2:{i:0;R:11164;i:1;R:801;}s:20:"8:erdhrfgnppbhag-qhc";a:2:{i:0;R:11164;i:1;R:801;}s:25:"8:erdhrfgnppbhag-yrt-hfre";a:2:{i:0;R:11164;i:1;R:801;}s:26:"8:erdhrfgnppbhag-yrt-nernf";a:2:{i:0;R:11164;i:1;R:801;}s:27:"8:erdhrfgnppbhag-yrt-crefba";a:2:{i:0;R:11164;i:1;R:801;}s:26:"8:erdhrfgnppbhag-yrt-bgure";a:2:{i:0;R:11164;i:1;R:801;}s:24:"8:erdhrfgnppbhag-yrt-gbf";a:2:{i:0;R:11164;i:1;R:801;}s:25:"8:erdhrfgnppbhag-npp-grkg";a:2:{i:0;R:11164;i:1;R:801;}s:22:"8:erdhrfgnppbhag-nernf";a:2:{i:0;R:11164;i:1;R:801;}s:27:"8:erdhrfgnppbhag-nernf-grkg";a:2:{i:0;R:11164;i:1;R:801;}s:25:"8:erdhrfgnppbhag-rkg-grkg";a:2:{i:0;R:11164;i:1;R:801;}s:25:"8:erdhrfgnppbhag-ovb-grkg";a:2:{i:0;R:11164;i:1;R:801;}s:27:"8:erdhrfgnppbhag-ovb-grkg-v";a:2:{i:0;R:11164;i:1;R:801;}s:21:"8:erdhrfgnppbhag-erny";a:2:{i:0;R:11164;i:1;R:801;}s:21:"8:erdhrfgnppbhag-fnzr";a:2:{i:0;R:11164;i:1;R:801;}s:22:"8:erdhrfgnppbhag-rznvy";a:2:{i:0;R:11164;i:1;R:801;}s:24:"8:erdhrfgnppbhag-erdglcr";a:2:{i:0;R:11164;i:1;R:801;}s:24:"8:erdhrfgnppbhag-yriry-0";a:2:{i:0;R:11164;i:1;R:801;}s:24:"8:erdhrfgnppbhag-yriry-1";a:2:{i:0;R:11164;i:1;R:801;}s:21:"8:erdhrfgnppbhag-vasb";a:2:{i:0;R:11164;i:1;R:801;}s:20:"8:erdhrfgnppbhag-ovb";a:2:{i:0;R:11164;i:1;R:801;}s:23:"8:erdhrfgnppbhag-nggnpu";a:2:{i:0;R:11164;i:1;R:801;}s:22:"8:erdhrfgnppbhag-abgrf";a:2:{i:0;R:11164;i:1;R:801;}s:21:"8:erdhrfgnppbhag-heyf";a:2:{i:0;R:11164;i:1;R:801;}s:22:"8:erdhrfgnppbhag-nterr";a:2:{i:0;R:11164;i:1;R:801;}s:22:"8:erdhrfgnppbhag-vahfr";a:2:{i:0;R:11164;i:1;R:801;}s:25:"8:erdhrfgnppbhag-gbbfubeg";a:2:{i:0;R:11164;i:1;R:801;}s:25:"8:erdhrfgnppbhag-rznvyqhc";a:2:{i:0;R:11164;i:1;R:801;}s:21:"8:erdhrfgnppbhag-rkgf";a:2:{i:0;R:11164;i:1;R:801;}s:22:"8:erdhrfgnppbhag-erfho";a:2:{i:0;R:11164;i:1;R:801;}s:20:"8:erdhrfgnppbhag-gbf";a:2:{i:0;R:11164;i:1;R:801;}s:23:"8:erdhrfgnppbhag-fhozvg";a:2:{i:0;R:11164;i:1;R:801;}s:21:"8:erdhrfgnppbhag-frag";a:2:{i:0;R:11164;i:1;R:801;}s:23:"8:erdhrfg-nppbhag-rpbas";a:2:{i:0;R:11164;i:1;R:801;}s:27:"8:erdhrfgnppbhag-rznvy-fhow";a:2:{i:0;R:11164;i:1;R:801;}s:27:"8:erdhrfgnppbhag-rznvy-obql";a:2:{i:0;R:11164;i:1;R:801;}s:33:"8:erdhrfgnppbhag-rznvy-fhow-nqzva";a:2:{i:0;R:11164;i:1;R:801;}s:33:"8:erdhrfgnppbhag-rznvy-obql-nqzva";a:2:{i:0;R:11164;i:1;R:801;}s:27:"8:nppg_erdhrfg_guebggyr_uvg";a:2:{i:0;R:11164;i:1;R:801;}s:17:"8:hfreperqragvnyf";a:2:{i:0;s:34:"ext-confirmaccount-usercredentials";i:1;R:801;}s:21:"8:hfreperqragvnyf-yrt";a:2:{i:0;R:11207;i:1;R:801;}s:22:"8:hfreperqragvnyf-hfre";a:2:{i:0;R:11207;i:1;R:801;}s:22:"8:hfreperqragvnyf-grkg";a:2:{i:0;R:11207;i:1;R:801;}s:26:"8:hfreperqragvnyf-yrt-hfre";a:2:{i:0;R:11207;i:1;R:801;}s:27:"8:hfreperqragvnyf-yrt-nernf";a:2:{i:0;R:11207;i:1;R:801;}s:28:"8:hfreperqragvnyf-yrt-crefba";a:2:{i:0;R:11207;i:1;R:801;}s:27:"8:hfreperqragvnyf-yrt-bgure";a:2:{i:0;R:11207;i:1;R:801;}s:23:"8:hfreperqragvnyf-rznvy";a:2:{i:0;R:11207;i:1;R:801;}s:22:"8:hfreperqragvnyf-erny";a:2:{i:0;R:11207;i:1;R:801;}s:21:"8:hfreperqragvnyf-ovb";a:2:{i:0;R:11207;i:1;R:801;}s:24:"8:hfreperqragvnyf-nggnpu";a:2:{i:0;R:11207;i:1;R:801;}s:23:"8:hfreperqragvnyf-abgrf";a:2:{i:0;R:11207;i:1;R:801;}s:22:"8:hfreperqragvnyf-heyf";a:2:{i:0;R:11207;i:1;R:801;}s:20:"8:hfreperqragvnyf-vc";a:2:{i:0;R:11207;i:1;R:801;}s:24:"8:hfreperqragvnyf-zrzore";a:2:{i:0;R:11207;i:1;R:801;}s:23:"8:hfreperqragvnyf-onqvq";a:2:{i:0;R:11207;i:1;R:801;}s:13:"8:nfveen-qrfp";a:2:{i:0;s:21:"ext-confirmeditasirra";i:1;R:801;}s:13:"8:nfveen-rqvg";a:2:{i:0;R:11225;i:1;R:801;}s:15:"8:nfveen-nqqhey";a:2:{i:0;R:11225;i:1;R:801;}s:16:"8:nfveen-onqcnff";a:2:{i:0;R:11225;i:1;R:801;}s:22:"8:nfveen-perngrnppbhag";a:2:{i:0;R:11225;i:1;R:801;}s:27:"8:nfveen-perngrnppbhag-snvy";a:2:{i:0;R:11225;i:1;R:801;}s:15:"8:nfveen-perngr";a:2:{i:0;R:11225;i:1;R:801;}s:13:"8:nfveen-abwf";a:2:{i:0;R:11225;i:1;R:801;}s:15:"8:nfveen-snvyrq";a:2:{i:0;R:11225;i:1;R:801;}s:20:"8:dhrfglpncgpun-qrfp";a:2:{i:0;s:28:"ext-confirmeditquestycaptcha";i:1;R:801;}s:22:"8:dhrfglpncgpun-nqqhey";a:2:{i:0;R:11235;i:1;R:801;}s:24:"8:dhrfglpncgpun-onqybtva";a:2:{i:0;R:11235;i:1;R:801;}s:29:"8:dhrfglpncgpun-perngrnppbhag";a:2:{i:0;R:11235;i:1;R:801;}s:22:"8:dhrfglpncgpun-perngr";a:2:{i:0;R:11235;i:1;R:801;}s:20:"8:dhrfglpncgpun-rqvg";a:2:{i:0;R:11235;i:1;R:801;}s:25:"8:dhrfglpncgpun-fraqrznvy";a:2:{i:0;R:11235;i:1;R:801;}s:24:"8:dhrfglpncgpunuryc-grkg";a:2:{i:0;R:11235;i:1;R:801;}s:16:"8:erpncgpun-qrfp";a:2:{i:0;s:24:"ext-confirmeditrecaptcha";i:1;R:801;}s:16:"8:erpncgpun-rqvg";a:2:{i:0;R:11244;i:1;R:801;}s:18:"8:erpncgpun-nqqhey";a:2:{i:0;R:11244;i:1;R:801;}s:19:"8:erpncgpun-onqcnff";a:2:{i:0;R:11244;i:1;R:801;}s:25:"8:erpncgpun-perngrnppbhag";a:2:{i:0;R:11244;i:1;R:801;}s:30:"8:erpncgpun-perngrnppbhag-snvy";a:2:{i:0;R:11244;i:1;R:801;}s:18:"8:erpncgpun-perngr";a:2:{i:0;R:11244;i:1;R:801;}s:20:"8:pbagevohgvbafpberf";a:2:{i:0;s:22:"ext-contributionscores";i:1;R:801;}s:25:"8:pbagevohgvbafpberf-qrfp";a:2:{i:0;R:11252;i:1;R:801;}s:25:"8:pbagevohgvbafpberf-vasb";a:2:{i:0;R:11252;i:1;R:801;}s:24:"8:pbagevohgvbafpberf-gbc";a:2:{i:0;R:11252;i:1;R:801;}s:25:"8:pbagevohgvbafpberf-qnlf";a:2:{i:0;R:11252;i:1;R:801;}s:33:"8:pbagevohgvbafpberf-nyyerivfvbaf";a:2:{i:0;R:11252;i:1;R:801;}s:26:"8:pbagevohgvbafpberf-fpber";a:2:{i:0;R:11252;i:1;R:801;}s:26:"8:pbagevohgvbafpberf-cntrf";a:2:{i:0;R:11252;i:1;R:801;}s:28:"8:pbagevohgvbafpberf-punatrf";a:2:{i:0;R:11252;i:1;R:801;}s:29:"8:pbagevohgvbafpberf-hfreanzr";a:2:{i:0;R:11252;i:1;R:801;}s:36:"8:pbagevohgvbafpberf-vainyvqhfreanzr";a:2:{i:0;R:11252;i:1;R:801;}s:34:"8:pbagevohgvbafpberf-vainyvqzrgevp";a:2:{i:0;R:11252;i:1;R:801;}s:24:"8:pbagevohgvbafrqvgpbhag";a:2:{i:0;s:26:"ext-contributionseditcount";i:1;R:801;}s:29:"8:pbagevohgvbafrqvgpbhag-qrfp";a:2:{i:0;R:11265;i:1;R:801;}s:14:"8:pbagevohgbef";a:2:{i:0;s:16:"ext-contributors";i:1;R:801;}s:19:"8:pbagevohgbef-qrfp";a:2:{i:0;R:11268;i:1;R:801;}s:22:"8:pbagevohgbef-gbbyobk";a:2:{i:0;R:11268;i:1;R:801;}s:21:"8:pbagevohgbef-yrtraq";a:2:{i:0;R:11268;i:1;R:801;}s:21:"8:pbagevohgbef-gnetrg";a:2:{i:0;R:11268;i:1;R:801;}s:21:"8:pbagevohgbef-fhozvg";a:2:{i:0;R:11268;i:1;R:801;}s:23:"8:pbagevohgbef-fhogvgyr";a:2:{i:0;R:11268;i:1;R:801;}s:26:"8:pbagevohgbef-bguref-ybat";a:2:{i:0;R:11268;i:1;R:801;}s:21:"8:pbagevohgbef-bguref";a:2:{i:0;R:11268;i:1;R:801;}s:23:"8:pbagevohgbef-onqgvgyr";a:2:{i:0;R:11268;i:1;R:801;}s:25:"8:pbagevohgbef-abfhpucntr";a:2:{i:0;R:11268;i:1;R:801;}s:24:"8:pbagevohgbefnqqba-qrfp";a:2:{i:0;s:21:"ext-contributorsaddon";i:1;R:801;}s:23:"8:pbbcrengvbafgngvfgvpf";a:2:{i:0;s:25:"ext-cooperationstatistics";i:1;R:801;}s:28:"8:pbbcrengvbafgngvfgvpf-qrfp";a:2:{i:0;R:11282;i:1;R:801;}s:28:"8:pbbcrengvbafgngvfgvpf-grkg";a:2:{i:0;R:11282;i:1;R:801;}s:36:"8:pbbcrengvbafgngvfgvpf-gnoyrnegvpyr";a:2:{i:0;R:11282;i:1;R:801;}s:34:"8:pbbcrengvbafgngvfgvpf-gnoyrinyhr";a:2:{i:0;R:11282;i:1;R:801;}s:32:"8:pbbcrengvbafgngvfgvpf-negvpyrf";a:2:{i:0;R:11282;i:1;R:801;}s:31:"8:pbbcrengvbafgngvfgvpf-aohfref";a:2:{i:0;R:11282;i:1;R:801;}s:35:"8:pbbcrengvbafgngvfgvpf-aoyrffhfref";a:2:{i:0;R:11282;i:1;R:801;}s:35:"8:pbbcrengvbafgngvfgvpf-aozberhfref";a:2:{i:0;R:11282;i:1;R:801;}s:34:"8:pbbcrengvbafgngvfgvpf-yrtraqzber";a:2:{i:0;R:11282;i:1;R:801;}s:29:"8:pbbcrengvbafgngvfgvpf-hfref";a:2:{i:0;R:11282;i:1;R:801;}s:42:"8:pbbcrengvbafgngvfgvpf-yvzvg-srj-erivfbef";a:2:{i:0;R:11282;i:1;R:801;}s:43:"8:pbbcrengvbafgngvfgvpf-yvzvg-znal-erivfbef";a:2:{i:0;R:11282;i:1;R:801;}s:12:"8:pbhagrqvgf";a:2:{i:0;s:14:"ext-countedits";i:1;R:801;}s:17:"8:pbhagrqvgf-qrfp";a:2:{i:0;R:11296;i:1;R:801;}s:20:"8:pbhagrqvgf-jneavat";a:2:{i:0;R:11296;i:1;R:801;}s:21:"8:pbhagrqvgf-hfreanzr";a:2:{i:0;R:11296;i:1;R:801;}s:15:"8:pbhagrqvgf-bx";a:2:{i:0;R:11296;i:1;R:801;}s:23:"8:pbhagrqvgf-abfhpuhfre";a:2:{i:0;R:11296;i:1;R:801;}s:25:"8:pbhagrqvgf-erfhygurnqre";a:2:{i:0;R:11296;i:1;R:801;}s:23:"8:pbhagrqvgf-erfhyggrkg";a:2:{i:0;R:11296;i:1;R:801;}s:23:"8:pbhagrqvgf-zbfgnpgvir";a:2:{i:0;R:11296;i:1;R:801;}s:23:"8:pbhagrqvgf-abpbagevof";a:2:{i:0;R:11296;i:1;R:801;}s:16:"8:perngrobk-qrfp";a:2:{i:0;s:13:"ext-createbox";i:1;R:801;}s:18:"8:perngrobk-perngr";a:2:{i:0;R:11307;i:1;R:801;}s:18:"8:perngrobk-rkvfgf";a:2:{i:0;R:11307;i:1;R:801;}s:9:"8:pc-qrfp";a:2:{i:0;s:14:"ext-createpage";i:1;R:801;}s:11:"8:pc-perngr";a:2:{i:0;R:11311;i:1;R:801;}s:16:"8:perngrerqverpg";a:2:{i:0;s:18:"ext-createredirect";i:1;R:801;}s:21:"8:perngrerqverpg-qrfp";a:2:{i:0;R:11314;i:1;R:801;}s:22:"8:perngrerqverpg-reebe";a:2:{i:0;R:11314;i:1;R:801;}s:29:"8:perngrerqverpg-vafgehpgvbaf";a:2:{i:0;R:11314;i:1;R:801;}s:27:"8:perngrerqverpg-cntr-gvgyr";a:2:{i:0;R:11314;i:1;R:801;}s:30:"8:perngrerqverpg-erqverpg-qbar";a:2:{i:0;R:11314;i:1;R:801;}s:28:"8:perngrerqverpg-erqverpg-gb";a:2:{i:0;R:11314;i:1;R:801;}s:21:"8:perngrerqverpg-fnir";a:2:{i:0;R:11314;i:1;R:801;}s:25:"8:perngvirpbzzbafeqs-qrfp";a:2:{i:0;s:22:"ext-creativecommonsrdf";i:1;R:801;}s:14:"8:perqvgf-qrfp";a:2:{i:0;s:13:"ext-credittab";i:1;R:801;}s:13:"8:perqvgf-gno";a:2:{i:0;R:11325;i:1;R:801;}s:19:"8:perqvgf-gno-gvgyr";a:2:{i:0;R:11325;i:1;R:801;}s:21:"8:pebffanzrfcnpryvaxf";a:2:{i:0;s:23:"ext-crossnamespacelinks";i:1;R:801;}s:26:"8:pebffanzrfcnpryvaxf-qrfp";a:2:{i:0;R:11329;i:1;R:801;}s:29:"8:pebffanzrfcnpryvaxf-fhzznel";a:2:{i:0;R:11329;i:1;R:801;}s:25:"8:pebffanzrfcnpryvaxfgrkg";a:2:{i:0;R:11329;i:1;R:801;}s:21:"8:pebffjvxvoybpx-qrfp";a:2:{i:0;s:18:"ext-crosswikiblock";i:1;R:801;}s:16:"8:pebffjvxvoybpx";a:2:{i:0;R:11334;i:1;R:801;}s:23:"8:pebffjvxvoybpx-urnqre";a:2:{i:0;R:11334;i:1;R:801;}s:23:"8:pebffjvxvoybpx-gnetrg";a:2:{i:0;R:11334;i:1;R:801;}s:23:"8:pebffjvxvoybpx-rkcvel";a:2:{i:0;R:11334;i:1;R:801;}s:23:"8:pebffjvxvoybpx-ernfba";a:2:{i:0;R:11334;i:1;R:801;}s:23:"8:pebffjvxvoybpx-fhozvg";a:2:{i:0;R:11334;i:1;R:801;}s:25:"8:pebffjvxvoybpx-nababayl";a:2:{i:0;R:11334;i:1;R:801;}s:25:"8:pebffjvxvoybpx-abperngr";a:2:{i:0;R:11334;i:1;R:801;}s:26:"8:pebffjvxvoybpx-nhgboybpx";a:2:{i:0;R:11334;i:1;R:801;}s:24:"8:pebffjvxvoybpx-abrznvy";a:2:{i:0;R:11334;i:1;R:801;}s:18:"8:pebffjvxvhaoybpx";a:2:{i:0;R:11334;i:1;R:801;}s:25:"8:pebffjvxvhaoybpx-urnqre";a:2:{i:0;R:11334;i:1;R:801;}s:23:"8:pebffjvxvhaoybpx-hfre";a:2:{i:0;R:11334;i:1;R:801;}s:25:"8:pebffjvxvhaoybpx-ernfba";a:2:{i:0;R:11334;i:1;R:801;}s:25:"8:pebffjvxvhaoybpx-fhozvg";a:2:{i:0;R:11334;i:1;R:801;}s:26:"8:pebffjvxvhaoybpx-fhpprff";a:2:{i:0;R:11334;i:1;R:801;}s:27:"8:pebffjvxvoybpx-abhfreanzr";a:2:{i:0;R:11334;i:1;R:801;}s:22:"8:pebffjvxvoybpx-ybpny";a:2:{i:0;R:11334;i:1;R:801;}s:27:"8:pebffjvxvoybpx-qoabgsbhaq";a:2:{i:0;R:11334;i:1;R:801;}s:23:"8:pebffjvxvoybpx-abanzr";a:2:{i:0;R:11334;i:1;R:801;}s:23:"8:pebffjvxvoybpx-abhfre";a:2:{i:0;R:11334;i:1;R:801;}s:25:"8:pebffjvxvoybpx-abrkcvel";a:2:{i:0;R:11334;i:1;R:801;}s:25:"8:pebffjvxvoybpx-abernfba";a:2:{i:0;R:11334;i:1;R:801;}s:24:"8:pebffjvxvoybpx-abgbxra";a:2:{i:0;R:11334;i:1;R:801;}s:31:"8:pebffjvxvoybpx-nyernqloybpxrq";a:2:{i:0;R:11334;i:1;R:801;}s:24:"8:pebffjvxvoybpx-aboybpx";a:2:{i:0;R:11334;i:1;R:801;}s:24:"8:pebffjvxvoybpx-fhpprff";a:2:{i:0;R:11334;i:1;R:801;}s:24:"8:pebffjvxvhaoybpx-ybpny";a:2:{i:0;R:11334;i:1;R:801;}s:22:"8:evtug-pebffjvxvoybpx";a:2:{i:0;R:11334;i:1;R:801;}s:26:"8:pebjqnhguragvpngvba-qrfp";a:2:{i:0;s:23:"ext-crowdauthentication";i:1;R:801;}s:10:"8:pff-qrfp";a:2:{i:0;s:7:"ext-css";i:1;R:801;}s:23:"8:qngngenafpyhfvba-qrfp";a:2:{i:0;s:20:"ext-datatransclusion";i:1;R:801;}s:32:"8:qngngenafpyhfvba-grfg-jvxvgrkg";a:2:{i:0;R:11369;i:1;R:801;}s:33:"8:qngngenafpyhfvba-grfg-rivy-ugzy";a:2:{i:0;R:11369;i:1;R:801;}s:30:"8:qngngenafpyhfvba-grfg-abjvxv";a:2:{i:0;R:11369;i:1;R:801;}s:33:"8:qngngenafpyhfvba-zvffvat-fbhepr";a:2:{i:0;R:11369;i:1;R:801;}s:33:"8:qngngenafpyhfvba-haxabja-fbhepr";a:2:{i:0;R:11369;i:1;R:801;}s:30:"8:qngngenafpyhfvba-zvffvat-xrl";a:2:{i:0;R:11369;i:1;R:801;}s:34:"8:qngngenafpyhfvba-onq-nethzrag-ol";a:2:{i:0;R:11369;i:1;R:801;}s:39:"8:qngngenafpyhfvba-zvffvat-nethzrag-xrl";a:2:{i:0;R:11369;i:1;R:801;}s:44:"8:qngngenafpyhfvba-zvffvat-nethzrag-grzcyngr";a:2:{i:0;R:11369;i:1;R:801;}s:35:"8:qngngenafpyhfvba-erpbeq-abg-sbhaq";a:2:{i:0;R:11369;i:1;R:801;}s:36:"8:qngngenafpyhfvba-onq-grzcyngr-anzr";a:2:{i:0;R:11369;i:1;R:801;}s:35:"8:qngngenafpyhfvba-haxabja-grzcyngr";a:2:{i:0;R:11369;i:1;R:801;}s:19:"8:qngngenafsre-qrfp";a:2:{i:0;s:16:"ext-datatransfer";i:1;R:801;}s:9:"8:ivrjkzy";a:2:{i:0;R:11383;i:1;R:801;}s:17:"8:qg_ivrjkzy_qbph";a:2:{i:0;R:11383;i:1;R:801;}s:23:"8:qg_ivrjkzy_pngrtbevrf";a:2:{i:0;R:11383;i:1;R:801;}s:23:"8:qg_ivrjkzy_anzrfcnprf";a:2:{i:0;R:11383;i:1;R:801;}s:29:"8:qg_ivrjkzy_fvzcyvsvrqsbezng";a:2:{i:0;R:11383;i:1;R:801;}s:18:"8:qg_kzy_anzrfcnpr";a:2:{i:0;R:11383;i:1;R:801;}s:14:"8:qg_kzy_cntrf";a:2:{i:0;R:11383;i:1;R:801;}s:13:"8:qg_kzy_cntr";a:2:{i:0;R:11383;i:1;R:801;}s:17:"8:qg_kzy_grzcyngr";a:2:{i:0;R:11383;i:1;R:801;}s:14:"8:qg_kzy_svryq";a:2:{i:0;R:11383;i:1;R:801;}s:13:"8:qg_kzy_anzr";a:2:{i:0;R:11383;i:1;R:801;}s:14:"8:qg_kzy_gvgyr";a:2:{i:0;R:11383;i:1;R:801;}s:11:"8:qg_kzy_vq";a:2:{i:0;R:11383;i:1;R:801;}s:17:"8:qg_kzy_serrgrkg";a:2:{i:0;R:11383;i:1;R:801;}s:11:"8:vzcbegkzy";a:2:{i:0;R:11383;i:1;R:801;}s:22:"8:qg_vzcbeg_fryrpgsvyr";a:2:{i:0;R:11383;i:1;R:801;}s:24:"8:qg_vzcbeg_rapbqvatglcr";a:2:{i:0;R:11383;i:1;R:801;}s:23:"8:qg_vzcbeg_sberkvfgvat";a:2:{i:0;R:11383;i:1;R:801;}s:29:"8:qg_vzcbeg_birejevgrrkvfgvat";a:2:{i:0;R:11383;i:1;R:801;}s:24:"8:qg_vzcbeg_fxvcrkvfgvat";a:2:{i:0;R:11383;i:1;R:801;}s:28:"8:qg_vzcbeg_nccraqgbrkvfgvat";a:2:{i:0;R:11383;i:1;R:801;}s:23:"8:qg_vzcbeg_fhzznelqrfp";a:2:{i:0;R:11383;i:1;R:801;}s:23:"8:qg_vzcbeg_rqvgfhzznel";a:2:{i:0;R:11383;i:1;R:801;}s:21:"8:qg_vzcbeg_vzcbegvat";a:2:{i:0;R:11383;i:1;R:801;}s:19:"8:qg_vzcbeg_fhpprff";a:2:{i:0;R:11383;i:1;R:801;}s:11:"8:vzcbegpfi";a:2:{i:0;R:11383;i:1;R:801;}s:24:"8:qg_vzcbegpfi_onqurnqre";a:2:{i:0;R:11383;i:1;R:801;}s:26:"8:evtug-qngngenafsrevzcbeg";a:2:{i:0;R:11383;i:1;R:801;}s:15:"8:qngrqvss-qrfp";a:2:{i:0;s:12:"ext-datediff";i:1;R:801;}s:24:"8:qrynlrqqrsvavgvba-qrfp";a:2:{i:0;s:21:"ext-delayeddefinition";i:1;R:801;}s:28:"8:qrynlqrs-reebe-zvffvat-qrs";a:2:{i:0;R:11415;i:1;R:801;}s:24:"8:qrynlqrs-reebe-ab-anzr";a:2:{i:0;R:11415;i:1;R:801;}s:22:"8:qrynlqrs-reebe-erqrs";a:2:{i:0;R:11415;i:1;R:801;}s:13:"8:qryrgrongpu";a:2:{i:0;s:15:"ext-deletebatch";i:1;R:801;}s:18:"8:qryrgrongpu-qrfp";a:2:{i:0;R:11420;i:1;R:801;}s:18:"8:qryrgrongpu-uryc";a:2:{i:0;R:11420;i:1;R:801;}s:21:"8:qryrgrongpu-pncgvba";a:2:{i:0;R:11420;i:1;R:801;}s:19:"8:qryrgrongpu-gvgyr";a:2:{i:0;R:11420;i:1;R:801;}s:23:"8:qryrgrongpu-yvax-onpx";a:2:{i:0;R:11420;i:1;R:801;}s:16:"8:qryrgrongpu-nf";a:2:{i:0;R:11420;i:1;R:801;}s:24:"8:qryrgrongpu-obgu-zbqrf";a:2:{i:0;R:11420;i:1;R:801;}s:16:"8:qryrgrongpu-be";a:2:{i:0;R:11420;i:1;R:801;}s:20:"8:qryrgrongpu-qryrgr";a:2:{i:0;R:11420;i:1;R:801;}s:18:"8:qryrgrongpu-cntr";a:2:{i:0;R:11420;i:1;R:801;}s:34:"8:qryrgrongpu-cebprffvat-sebz-svyr";a:2:{i:0;R:11420;i:1;R:801;}s:34:"8:qryrgrongpu-cebprffvat-sebz-sbez";a:2:{i:0;R:11420;i:1;R:801;}s:34:"8:qryrgrongpu-bzvggvat-abarkvfgnag";a:2:{i:0;R:11420;i:1;R:801;}s:30:"8:qryrgrongpu-bzvggvat-vainyvq";a:2:{i:0;R:11420;i:1;R:801;}s:29:"8:qryrgrongpu-svyr-onq-sbezng";a:2:{i:0;R:11420;i:1;R:801;}s:26:"8:qryrgrongpu-svyr-zvffvat";a:2:{i:0;R:11420;i:1;R:801;}s:27:"8:qryrgrongpu-fryrpg-fpevcg";a:2:{i:0;R:11420;i:1;R:801;}s:29:"8:qryrgrongpu-fryrpg-lbhefrys";a:2:{i:0;R:11420;i:1;R:801;}s:21:"8:qryrgrongpu-ab-cntr";a:2:{i:0;R:11420;i:1;R:801;}s:19:"8:evtug-qryrgrongpu";a:2:{i:0;R:11420;i:1;R:801;}s:18:"8:qryrgrdhrhr-qrfp";a:2:{i:0;s:15:"ext-deletequeue";i:1;R:801;}s:27:"8:qryrgrdhrhr-npgvba-dhrhrq";a:2:{i:0;R:11442;i:1;R:801;}s:20:"8:qryrgrdhrhr-npgvba";a:2:{i:0;R:11442;i:1;R:801;}s:26:"8:qryrgrdhrhr-npgvba-gvgyr";a:2:{i:0;R:11442;i:1;R:801;}s:25:"8:qryrgrdhrhr-npgvba-grkg";a:2:{i:0;R:11442;i:1;R:801;}s:32:"8:qryrgrdhrhr-npgvba-grkg-dhrhrq";a:2:{i:0;R:11442;i:1;R:801;}s:32:"8:qryrgrdhrhr-crezvffvbaf-abrqvg";a:2:{i:0;R:11442;i:1;R:801;}s:29:"8:qryrgrdhrhr-trarevp-ernfbaf";a:2:{i:0;R:11442;i:1;R:801;}s:31:"8:qryrgrdhrhr-abz-nyernqldhrhrq";a:2:{i:0;R:11442;i:1;R:801;}s:26:"8:qryrgrdhrhr-fcrrql-gvgyr";a:2:{i:0;R:11442;i:1;R:801;}s:25:"8:qryrgrdhrhr-fcrrql-grkg";a:2:{i:0;R:11442;i:1;R:801;}s:28:"8:qryrgrdhrhr-fcrrql-ernfbaf";a:2:{i:0;R:11442;i:1;R:801;}s:24:"8:qryrgrdhrhr-cebq-gvgyr";a:2:{i:0;R:11442;i:1;R:801;}s:23:"8:qryrgrdhrhr-cebq-grkg";a:2:{i:0;R:11442;i:1;R:801;}s:26:"8:qryrgrdhrhr-cebq-ernfbaf";a:2:{i:0;R:11442;i:1;R:801;}s:27:"8:qryrgrdhrhr-qryabz-ernfba";a:2:{i:0;R:11442;i:1;R:801;}s:32:"8:qryrgrdhrhr-qryabz-bgureernfba";a:2:{i:0;R:11442;i:1;R:801;}s:26:"8:qryrgrdhrhr-qryabz-rkgen";a:2:{i:0;R:11442;i:1;R:801;}s:27:"8:qryrgrdhrhr-qryabz-fhozvg";a:2:{i:0;R:11442;i:1;R:801;}s:26:"8:qryrgrdhrhr-ybt-abzvangr";a:2:{i:0;R:11442;i:1;R:801;}s:26:"8:qryrgrdhrhr-ybt-ezfcrrql";a:2:{i:0;R:11442;i:1;R:801;}s:25:"8:qryrgrdhrhr-ybt-erdhrhr";a:2:{i:0;R:11442;i:1;R:801;}s:25:"8:qryrgrdhrhr-ybt-qrdhrhr";a:2:{i:0;R:11442;i:1;R:801;}s:23:"8:evtug-fcrrql-abzvangr";a:2:{i:0;R:11442;i:1;R:801;}s:21:"8:evtug-fcrrql-erivrj";a:2:{i:0;R:11442;i:1;R:801;}s:21:"8:evtug-cebq-abzvangr";a:2:{i:0;R:11442;i:1;R:801;}s:19:"8:evtug-cebq-erivrj";a:2:{i:0;R:11442;i:1;R:801;}s:30:"8:evtug-qryrgrqvfphff-abzvangr";a:2:{i:0;R:11442;i:1;R:801;}s:28:"8:evtug-qryrgrqvfphff-erivrj";a:2:{i:0;R:11442;i:1;R:801;}s:24:"8:evtug-qryrgrdhrhr-ibgr";a:2:{i:0;R:11442;i:1;R:801;}s:26:"8:qryrgrdhrhr-dhrhr-fcrrql";a:2:{i:0;R:11442;i:1;R:801;}s:24:"8:qryrgrdhrhr-dhrhr-cebq";a:2:{i:0;R:11442;i:1;R:801;}s:33:"8:qryrgrdhrhr-dhrhr-qryrgrqvfphff";a:2:{i:0;R:11442;i:1;R:801;}s:25:"8:qryrgrdhrhr-cntr-fcrrql";a:2:{i:0;R:11442;i:1;R:801;}s:23:"8:qryrgrdhrhr-cntr-cebq";a:2:{i:0;R:11442;i:1;R:801;}s:32:"8:qryrgrdhrhr-cntr-qryrgrqvfphff";a:2:{i:0;R:11442;i:1;R:801;}s:23:"8:qryrgrdhrhr-abgdhrhrq";a:2:{i:0;R:11442;i:1;R:801;}s:27:"8:qryrgrdhrhr-erivrj-npgvba";a:2:{i:0;R:11442;i:1;R:801;}s:27:"8:qryrgrdhrhr-erivrj-qryrgr";a:2:{i:0;R:11442;i:1;R:801;}s:27:"8:qryrgrdhrhr-erivrj-punatr";a:2:{i:0;R:11442;i:1;R:801;}s:28:"8:qryrgrdhrhr-erivrj-erdhrhr";a:2:{i:0;R:11442;i:1;R:801;}s:28:"8:qryrgrdhrhr-erivrj-qrdhrhr";a:2:{i:0;R:11442;i:1;R:801;}s:27:"8:qryrgrdhrhr-erivrj-ernfba";a:2:{i:0;R:11442;i:1;R:801;}s:30:"8:qryrgrdhrhr-erivrj-arjernfba";a:2:{i:0;R:11442;i:1;R:801;}s:29:"8:qryrgrdhrhr-erivrj-arjrkgen";a:2:{i:0;R:11442;i:1;R:801;}s:27:"8:qryrgrdhrhr-erivrj-fhozvg";a:2:{i:0;R:11442;i:1;R:801;}s:29:"8:qryrgrdhrhr-erivrj-bevtvany";a:2:{i:0;R:11442;i:1;R:801;}s:37:"8:qryrgrdhrhr-npgvbaqvfnoyrq-vaibyirq";a:2:{i:0;R:11442;i:1;R:801;}s:39:"8:qryrgrdhrhr-npgvbaqvfnoyrq-abgrkcverq";a:2:{i:0;R:11442;i:1;R:801;}s:30:"8:qryrgrdhrhr-erivrj-onqnpgvba";a:2:{i:0;R:11442;i:1;R:801;}s:33:"8:qryrgrdhrhr-erivrj-npgvbaqravrq";a:2:{i:0;R:11442;i:1;R:801;}s:31:"8:qryrgrdhrhr-erivrj-bowrpgvbaf";a:2:{i:0;R:11442;i:1;R:801;}s:30:"8:qryrgrdhrhr-erivrjfcrrql-gno";a:2:{i:0;R:11442;i:1;R:801;}s:32:"8:qryrgrdhrhr-erivrjfcrrql-gvgyr";a:2:{i:0;R:11442;i:1;R:801;}s:31:"8:qryrgrdhrhr-erivrjfcrrql-grkg";a:2:{i:0;R:11442;i:1;R:801;}s:28:"8:qryrgrdhrhr-erivrjcebq-gno";a:2:{i:0;R:11442;i:1;R:801;}s:30:"8:qryrgrdhrhr-erivrjcebq-gvgyr";a:2:{i:0;R:11442;i:1;R:801;}s:29:"8:qryrgrdhrhr-erivrjcebq-grkg";a:2:{i:0;R:11442;i:1;R:801;}s:37:"8:qryrgrdhrhr-erivrjqryrgrqvfphff-gno";a:2:{i:0;R:11442;i:1;R:801;}s:39:"8:qryrgrdhrhr-erivrjqryrgrqvfphff-gvgyr";a:2:{i:0;R:11442;i:1;R:801;}s:38:"8:qryrgrdhrhr-erivrjqryrgrqvfphff-grkg";a:2:{i:0;R:11442;i:1;R:801;}s:28:"8:qryrgrdhrhr-erivrj-fhpprff";a:2:{i:0;R:11442;i:1;R:801;}s:34:"8:qryrgrdhrhr-erivrj-fhpprff-gvgyr";a:2:{i:0;R:11442;i:1;R:801;}s:42:"8:qryrgrdhrhr-qryrgrqvfphff-qvfphffvbacntr";a:2:{i:0;R:11442;i:1;R:801;}s:35:"8:qryrgrdhrhr-qvfphffperngr-fhzznel";a:2:{i:0;R:11442;i:1;R:801;}s:32:"8:qryrgrdhrhr-qvfphffperngr-grkg";a:2:{i:0;R:11442;i:1;R:801;}s:28:"8:qryrgrdhrhr-ebyr-abzvangbe";a:2:{i:0;R:11442;i:1;R:801;}s:31:"8:qryrgrdhrhr-ebyr-ibgr-raqbefr";a:2:{i:0;R:11442;i:1;R:801;}s:30:"8:qryrgrdhrhr-ebyr-ibgr-bowrpg";a:2:{i:0;R:11442;i:1;R:801;}s:22:"8:qryrgrdhrhr-ibgr-gno";a:2:{i:0;R:11442;i:1;R:801;}s:24:"8:qryrgrdhrhr-ibgr-gvgyr";a:2:{i:0;R:11442;i:1;R:801;}s:23:"8:qryrgrdhrhr-ibgr-grkg";a:2:{i:0;R:11442;i:1;R:801;}s:25:"8:qryrgrdhrhr-ibgr-yrtraq";a:2:{i:0;R:11442;i:1;R:801;}s:25:"8:qryrgrdhrhr-ibgr-npgvba";a:2:{i:0;R:11442;i:1;R:801;}s:26:"8:qryrgrdhrhr-ibgr-raqbefr";a:2:{i:0;R:11442;i:1;R:801;}s:25:"8:qryrgrdhrhr-ibgr-bowrpg";a:2:{i:0;R:11442;i:1;R:801;}s:25:"8:qryrgrdhrhr-ibgr-ernfba";a:2:{i:0;R:11442;i:1;R:801;}s:25:"8:qryrgrdhrhr-ibgr-fhozvg";a:2:{i:0;R:11442;i:1;R:801;}s:34:"8:qryrgrdhrhr-ibgr-fhpprff-raqbefr";a:2:{i:0;R:11442;i:1;R:801;}s:33:"8:qryrgrdhrhr-ibgr-fhpprff-bowrpg";a:2:{i:0;R:11442;i:1;R:801;}s:27:"8:qryrgrdhrhr-ibgr-erdhrhrq";a:2:{i:0;R:11442;i:1;R:801;}s:23:"8:qryrgrdhrhr-fubjibgrf";a:2:{i:0;R:11442;i:1;R:801;}s:28:"8:qryrgrdhrhr-fubjibgrf-grkg";a:2:{i:0;R:11442;i:1;R:801;}s:40:"8:qryrgrdhrhr-fubjibgrf-erfgevpg-raqbefr";a:2:{i:0;R:11442;i:1;R:801;}s:39:"8:qryrgrdhrhr-fubjibgrf-erfgevpg-bowrpg";a:2:{i:0;R:11442;i:1;R:801;}s:37:"8:qryrgrdhrhr-fubjibgrf-erfgevpg-abar";a:2:{i:0;R:11442;i:1;R:801;}s:36:"8:qryrgrdhrhr-fubjibgrf-ibgr-raqbefr";a:2:{i:0;R:11442;i:1;R:801;}s:35:"8:qryrgrdhrhr-fubjibgrf-ibgr-bowrpg";a:2:{i:0;R:11442;i:1;R:801;}s:43:"8:qryrgrdhrhr-fubjibgrf-fubjvatbayl-raqbefr";a:2:{i:0;R:11442;i:1;R:801;}s:42:"8:qryrgrdhrhr-fubjibgrf-fubjvatbayl-bowrpg";a:2:{i:0;R:11442;i:1;R:801;}s:28:"8:qryrgrdhrhr-fubjibgrf-abar";a:2:{i:0;R:11442;i:1;R:801;}s:36:"8:qryrgrdhrhr-fubjibgrf-abar-raqbefr";a:2:{i:0;R:11442;i:1;R:801;}s:35:"8:qryrgrdhrhr-fubjibgrf-abar-bowrpg";a:2:{i:0;R:11442;i:1;R:801;}s:13:"8:qryrgrdhrhr";a:2:{i:0;R:11442;i:1;R:801;}s:23:"8:qryrgrdhrhr-yvfg-grkg";a:2:{i:0;R:11442;i:1;R:801;}s:32:"8:qryrgrdhrhr-yvfg-frnepu-yrtraq";a:2:{i:0;R:11442;i:1;R:801;}s:24:"8:qryrgrdhrhr-yvfg-dhrhr";a:2:{i:0;R:11442;i:1;R:801;}s:25:"8:qryrgrdhrhr-yvfg-fgnghf";a:2:{i:0;R:11442;i:1;R:801;}s:26:"8:qryrgrdhrhr-yvfg-rkcverq";a:2:{i:0;R:11442;i:1;R:801;}s:25:"8:qryrgrdhrhr-yvfg-frnepu";a:2:{i:0;R:11442;i:1;R:801;}s:27:"8:qryrgrdhrhr-yvfg-naldhrhr";a:2:{i:0;R:11442;i:1;R:801;}s:24:"8:qryrgrdhrhr-yvfg-ibgrf";a:2:{i:0;R:11442;i:1;R:801;}s:28:"8:qryrgrdhrhr-yvfg-ibgrpbhag";a:2:{i:0;R:11442;i:1;R:801;}s:30:"8:qryrgrdhrhr-yvfg-urnqre-cntr";a:2:{i:0;R:11442;i:1;R:801;}s:31:"8:qryrgrdhrhr-yvfg-urnqre-dhrhr";a:2:{i:0;R:11442;i:1;R:801;}s:31:"8:qryrgrdhrhr-yvfg-urnqre-ibgrf";a:2:{i:0;R:11442;i:1;R:801;}s:32:"8:qryrgrdhrhr-yvfg-urnqre-rkcvel";a:2:{i:0;R:11442;i:1;R:801;}s:37:"8:qryrgrdhrhr-yvfg-urnqre-qvfphffcntr";a:2:{i:0;R:11442;i:1;R:801;}s:24:"8:qryrgrdhrhr-pnfr-vageb";a:2:{i:0;R:11442;i:1;R:801;}s:32:"8:qryrgrdhrhr-yvfg-urnqre-ernfba";a:2:{i:0;R:11442;i:1;R:801;}s:24:"8:qryrgrdhrhr-pnfr-ibgrf";a:2:{i:0;R:11442;i:1;R:801;}s:24:"8:qryrgrdhrhr-pnfr-gvgyr";a:2:{i:0;R:11442;i:1;R:801;}s:26:"8:qryrgrdhrhr-pnfr-qrgnvyf";a:2:{i:0;R:11442;i:1;R:801;}s:23:"8:qryrgrdhrhr-pnfr-cntr";a:2:{i:0;R:11442;i:1;R:801;}s:25:"8:qryrgrdhrhr-pnfr-ernfba";a:2:{i:0;R:11442;i:1;R:801;}s:25:"8:qryrgrdhrhr-pnfr-rkcvel";a:2:{i:0;R:11442;i:1;R:801;}s:31:"8:qryrgrdhrhr-pnfr-arrqf-erivrj";a:2:{i:0;R:11442;i:1;R:801;}s:19:"8:qrfpevcgvba2-qrfp";a:2:{i:0;s:16:"ext-description2";i:1;R:801;}s:22:"8:tybonypbyyrpgtngrjnl";a:2:{i:0;s:10:"ext-di-gcg";i:1;R:801;}s:28:"8:tybonypbyyrpg_tngrjnl-qrfp";a:2:{i:0;R:11562;i:1;R:801;}s:37:"8:tybonypbyyrpg_tngrjnl-erfcbafr-9130";a:2:{i:0;R:11562;i:1;R:801;}s:37:"8:tybonypbyyrpg_tngrjnl-erfcbafr-9140";a:2:{i:0;R:11562;i:1;R:801;}s:37:"8:tybonypbyyrpg_tngrjnl-erfcbafr-9150";a:2:{i:0;R:11562;i:1;R:801;}s:39:"8:tybonypbyyrpg_tngrjnl-erfcbafr-400530";a:2:{i:0;R:11562;i:1;R:801;}s:39:"8:tybonypbyyrpg_tngrjnl-erfcbafr-430306";a:2:{i:0;R:11562;i:1;R:801;}s:39:"8:tybonypbyyrpg_tngrjnl-erfcbafr-430330";a:2:{i:0;R:11562;i:1;R:801;}s:39:"8:tybonypbyyrpg_tngrjnl-erfcbafr-430421";a:2:{i:0;R:11562;i:1;R:801;}s:39:"8:tybonypbyyrpg_tngrjnl-erfcbafr-430360";a:2:{i:0;R:11562;i:1;R:801;}s:39:"8:tybonypbyyrpg_tngrjnl-erfcbafr-430285";a:2:{i:0;R:11562;i:1;R:801;}s:41:"8:tybonypbyyrpg_tngrjnl-erfcbafr-21000150";a:2:{i:0;R:11562;i:1;R:801;}s:41:"8:tybonypbyyrpg_tngrjnl-erfcbafr-21000155";a:2:{i:0;R:11562;i:1;R:801;}s:41:"8:tybonypbyyrpg_tngrjnl-erfcbafr-21000160";a:2:{i:0;R:11562;i:1;R:801;}s:40:"8:tybonypbyyrpg_tngrjnl-erfcbafr-qrsnhyg";a:2:{i:0;R:11562;i:1;R:801;}s:17:"8:qvqlbhzrna-qrfp";a:2:{i:0;s:14:"ext-didyoumean";i:1;R:801;}s:26:"8:qvfphffvbaguernqvat-qrfp";a:2:{i:0;s:23:"ext-discussionthreading";i:1;R:801;}s:34:"8:qvfphffvbaguernqvat-ercylfrpgvba";a:2:{i:0;R:11580;i:1;R:801;}s:38:"8:qvfphffvbaguernqvat-ercylfrpgvbauvag";a:2:{i:0;R:11580;i:1;R:801;}s:38:"8:qvfphffvbaguernqvat-guernqarjfrpgvba";a:2:{i:0;R:11580;i:1;R:801;}s:42:"8:qvfphffvbaguernqvat-guernqarjfrpgvbauvag";a:2:{i:0;R:11580;i:1;R:801;}s:15:"8:qcysbehz-qrfp";a:2:{i:0;s:12:"ext-dplforum";i:1;R:801;}s:13:"8:qcysbehz-ol";a:2:{i:0;R:11586;i:1;R:801;}s:17:"8:qcysbehz-rqvgrq";a:2:{i:0;R:11586;i:1;R:801;}s:16:"8:qcysbehz-arire";a:2:{i:0;R:11586;i:1;R:801;}s:17:"8:qcysbehz-gbbsrj";a:2:{i:0;R:11586;i:1;R:801;}s:18:"8:qcysbehz-gbbznal";a:2:{i:0;R:11586;i:1;R:801;}s:8:"8:qensgf";a:2:{i:0;s:10:"ext-drafts";i:1;R:801;}s:13:"8:qensgf-qrfp";a:2:{i:0;R:11593;i:1;R:801;}s:13:"8:qensgf-ivrj";a:2:{i:0;R:11593;i:1;R:801;}s:21:"8:qensgf-ivrj-fhzznel";a:2:{i:0;R:11593;i:1;R:801;}s:21:"8:qensgf-ivrj-negvpyr";a:2:{i:0;R:11593;i:1;R:801;}s:22:"8:qensgf-ivrj-rkvfgvat";a:2:{i:0;R:11593;i:1;R:801;}s:19:"8:qensgf-ivrj-fnirq";a:2:{i:0;R:11593;i:1;R:801;}s:21:"8:qensgf-ivrj-qvfpneq";a:2:{i:0;R:11593;i:1;R:801;}s:23:"8:qensgf-ivrj-abarfnirq";a:2:{i:0;R:11593;i:1;R:801;}s:20:"8:qensgf-ivrj-abgvpr";a:2:{i:0;R:11593;i:1;R:801;}s:25:"8:qensgf-ivrj-abgvpr-yvax";a:2:{i:0;R:11593;i:1;R:801;}s:18:"8:qensgf-ivrj-jnea";a:2:{i:0;R:11593;i:1;R:801;}s:13:"8:qensgf-fnir";a:2:{i:0;R:11593;i:1;R:801;}s:18:"8:qensgf-fnir-fnir";a:2:{i:0;R:11593;i:1;R:801;}s:19:"8:qensgf-fnir-fnirq";a:2:{i:0;R:11593;i:1;R:801;}s:20:"8:qensgf-fnir-fnivat";a:2:{i:0;R:11593;i:1;R:801;}s:19:"8:qensgf-fnir-reebe";a:2:{i:0;R:11593;i:1;R:801;}s:21:"8:gbbygvc-qensgf-fnir";a:2:{i:0;R:11593;i:1;R:801;}s:23:"8:npprffxrl-qensgf-fnir";a:2:{i:0;R:11593;i:1;R:801;}s:20:"8:qhoyvapbereqs-qrfp";a:2:{i:0;s:17:"ext-dublincorerdf";i:1;R:801;}s:12:"8:qhcyvpngbe";a:2:{i:0;s:14:"ext-duplicator";i:1;R:801;}s:17:"8:qhcyvpngbe-qrfp";a:2:{i:0;R:11615;i:1;R:801;}s:20:"8:qhcyvpngbe-gbbyobk";a:2:{i:0;R:11615;i:1;R:801;}s:19:"8:qhcyvpngbe-urnqre";a:2:{i:0;R:11615;i:1;R:801;}s:20:"8:qhcyvpngbe-bcgvbaf";a:2:{i:0;R:11615;i:1;R:801;}s:19:"8:qhcyvpngbe-fbhepr";a:2:{i:0;R:11615;i:1;R:801;}s:17:"8:qhcyvpngbe-qrfg";a:2:{i:0;R:11615;i:1;R:801;}s:19:"8:qhcyvpngbe-qbgnyx";a:2:{i:0;R:11615;i:1;R:801;}s:19:"8:qhcyvpngbe-fhozvg";a:2:{i:0;R:11615;i:1;R:801;}s:20:"8:qhcyvpngbe-fhzznel";a:2:{i:0;R:11615;i:1;R:801;}s:20:"8:qhcyvpngbe-fhpprff";a:2:{i:0;R:11615;i:1;R:801;}s:30:"8:qhcyvpngbe-fhpprff-erivfvbaf";a:2:{i:0;R:11615;i:1;R:801;}s:31:"8:qhcyvpngbe-fhpprff-gnyxpbcvrq";a:2:{i:0;R:11615;i:1;R:801;}s:34:"8:qhcyvpngbe-fhpprff-gnyxabgpbcvrq";a:2:{i:0;R:11615;i:1;R:801;}s:19:"8:qhcyvpngbe-snvyrq";a:2:{i:0;R:11615;i:1;R:801;}s:27:"8:qhcyvpngbe-fbhepr-vainyvq";a:2:{i:0;R:11615;i:1;R:801;}s:28:"8:qhcyvpngbe-fbhepr-abgrkvfg";a:2:{i:0;R:11615;i:1;R:801;}s:25:"8:qhcyvpngbe-qrfg-vainyvq";a:2:{i:0;R:11615;i:1;R:801;}s:24:"8:qhcyvpngbe-qrfg-rkvfgf";a:2:{i:0;R:11615;i:1;R:801;}s:29:"8:qhcyvpngbe-gbbznalerivfvbaf";a:2:{i:0;R:11615;i:1;R:801;}s:17:"8:evtug-qhcyvpngr";a:2:{i:0;R:11615;i:1;R:801;}s:21:"8:qlanzvpfvqrone-qrfp";a:2:{i:0;s:18:"ext-dynamicsidebar";i:1;R:801;}s:11:"8:rqvgpbhag";a:2:{i:0;s:13:"ext-editcount";i:1;R:801;}s:16:"8:rqvgpbhag-qrfp";a:2:{i:0;R:11639;i:1;R:801;}s:20:"8:rqvgpbhag_hfreanzr";a:2:{i:0;R:11639;i:1;R:801;}s:18:"8:rqvgpbhag_fhozvg";a:2:{i:0;R:11639;i:1;R:801;}s:17:"8:rqvgpbhag_gbgny";a:2:{i:0;R:11639;i:1;R:801;}s:19:"8:rqvgzrffntrf-qrfp";a:2:{i:0;s:16:"ext-editmessages";i:1;R:801;}s:14:"8:rqvgzrffntrf";a:2:{i:0;R:11645;i:1;R:801;}s:16:"8:rqvgzft-gnetrg";a:2:{i:0;R:11645;i:1;R:801;}s:16:"8:rqvgzft-frnepu";a:2:{i:0;R:11645;i:1;R:801;}s:19:"8:rqvgzft-fubj-yvfg";a:2:{i:0;R:11645;i:1;R:801;}s:19:"8:rqvgzft-trg-cngpu";a:2:{i:0;R:11645;i:1;R:801;}s:20:"8:rqvgzft-arj-frnepu";a:2:{i:0;R:11645;i:1;R:801;}s:24:"8:rqvgzft-jneavat-cnefr1";a:2:{i:0;R:11645;i:1;R:801;}s:24:"8:rqvgzft-jneavat-cnefr2";a:2:{i:0;R:11645;i:1;R:801;}s:24:"8:rqvgzft-jneavat-cnefr3";a:2:{i:0;R:11645;i:1;R:801;}s:22:"8:rqvgzft-jneavat-svyr";a:2:{i:0;R:11645;i:1;R:801;}s:26:"8:rqvgzft-jneavat-zvfzngpu";a:2:{i:0;R:11645;i:1;R:801;}s:21:"8:rqvgzft-nccyl-cngpu";a:2:{i:0;R:11645;i:1;R:801;}s:18:"8:rqvgzft-ab-cngpu";a:2:{i:0;R:11645;i:1;R:801;}s:22:"8:rqvgzft-cngpu-snvyrq";a:2:{i:0;R:11645;i:1;R:801;}s:23:"8:rqvgzft-cngpu-fhpprff";a:2:{i:0;R:11645;i:1;R:801;}s:14:"8:rqvgbja-qrfp";a:2:{i:0;s:11:"ext-editown";i:1;R:801;}s:29:"8:rqvgfrpgvbapyrnereyvax-qrfp";a:2:{i:0;s:26:"ext-editsectionclearerlink";i:1;R:801;}s:28:"8:rqvgfrpgvbauvyvgryvax-qrfp";a:2:{i:0;s:25:"ext-editsectionhilitelink";i:1;R:801;}s:18:"8:rqvgfvzvyne-qrfp";a:2:{i:0;s:15:"ext-editsimilar";i:1;R:801;}s:20:"8:rqvgfvzvyne-gunaxf";a:2:{i:0;R:11668;i:1;R:801;}s:31:"8:rqvgfvzvyne-gunaxf-abgfvzvyne";a:2:{i:0;R:11668;i:1;R:801;}s:22:"8:rqvgfvzvyne-gunaxlbh";a:2:{i:0;R:11668;i:1;R:801;}s:26:"8:rqvgfvzvyne-yvax-qvfnoyr";a:2:{i:0;R:11668;i:1;R:801;}s:18:"8:gbt-rqvg-fvzvyne";a:2:{i:0;R:11668;i:1;R:801;}s:19:"8:rqvgfhocntrf-qrfp";a:2:{i:0;s:16:"ext-editsubpages";i:1;R:801;}s:15:"8:haybpxrqcntrf";a:2:{i:0;R:11675;i:1;R:801;}s:15:"8:rqvghfre-qrfp";a:2:{i:0;s:12:"ext-edituser";i:1;R:801;}s:10:"8:rqvghfre";a:2:{i:0;R:11678;i:1;R:801;}s:19:"8:rqvghfre-hfreanzr";a:2:{i:0;R:11678;i:1;R:801;}s:19:"8:rqvghfre-qbfrnepu";a:2:{i:0;R:11678;i:1;R:801;}s:17:"8:rqvghfre-abhfre";a:2:{i:0;R:11678;i:1;R:801;}s:17:"8:rqvghfre-rkrzcg";a:2:{i:0;R:11678;i:1;R:801;}s:16:"8:evtug-rqvghfre";a:2:{i:0;R:11678;i:1;R:801;}s:23:"8:evtug-rqvghfre-rkrzcg";a:2:{i:0;R:11678;i:1;R:801;}s:18:"8:ryz-rnflers-qrfp";a:2:{i:0;s:14:"ext-elmeasyref";i:1;R:801;}s:17:"8:ryz-rnflers-ers";a:2:{i:0;R:11687;i:1;R:801;}s:19:"8:ryz-rnflers-pybfr";a:2:{i:0;R:11687;i:1;R:801;}s:24:"8:rznvynqqerffvzntr-qrfp";a:2:{i:0;s:21:"ext-emailaddressimage";i:1;R:801;}s:12:"8:r-znvycntr";a:2:{i:0;s:13:"ext-emailpage";i:1;R:801;}s:9:"8:rn-qrfp";a:2:{i:0;R:11693;i:1;R:801;}s:12:"8:rn-urnqvat";a:2:{i:0;R:11693;i:1;R:801;}s:15:"8:rn-tebhc-vasb";a:2:{i:0;R:11693;i:1;R:801;}s:13:"8:rn-cntrfraq";a:2:{i:0;R:11693;i:1;R:801;}s:11:"8:rn-abcntr";a:2:{i:0;R:11693;i:1;R:801;}s:17:"8:rn-aberpvcvragf";a:2:{i:0;R:11693;i:1;R:801;}s:19:"8:rn-yvfgerpvcvragf";a:2:{i:0;R:11693;i:1;R:801;}s:10:"8:rn-reebe";a:2:{i:0;R:11693;i:1;R:801;}s:11:"8:rn-qravrq";a:2:{i:0;R:11693;i:1;R:801;}s:9:"8:rn-frag";a:2:{i:0;R:11693;i:1;R:801;}s:12:"8:rn-pbzcbfr";a:2:{i:0;R:11693;i:1;R:801;}s:9:"8:rn-fubj";a:2:{i:0;R:11693;i:1;R:801;}s:9:"8:rn-sebz";a:2:{i:0;R:11693;i:1;R:801;}s:7:"8:rn-gb";a:2:{i:0;R:11693;i:1;R:801;}s:12:"8:rn-gb-vasb";a:2:{i:0;R:11693;i:1;R:801;}s:7:"8:rn-pp";a:2:{i:0;R:11693;i:1;R:801;}s:9:"8:rn-fraq";a:2:{i:0;R:11693;i:1;R:801;}s:12:"8:rn-fhowrpg";a:2:{i:0;R:11693;i:1;R:801;}s:12:"8:rn-zrffntr";a:2:{i:0;R:11693;i:1;R:801;}s:17:"8:rn-zrffntr-vasb";a:2:{i:0;R:11693;i:1;R:801;}s:10:"8:rn-fglyr";a:2:{i:0;R:11693;i:1;R:801;}s:14:"8:rn-fryrpgpff";a:2:{i:0;R:11693;i:1;R:801;}s:9:"8:rn-qngn";a:2:{i:0;R:11693;i:1;R:801;}s:17:"8:rn-fryrpgerpbeq";a:2:{i:0;R:11693;i:1;R:801;}s:13:"8:rn-nyyhfref";a:2:{i:0;R:11693;i:1;R:801;}s:17:"8:rznvyhfref-qrfp";a:2:{i:0;s:14:"ext-emailusers";i:1;R:801;}s:22:"8:evtug-fraqongpurznvy";a:2:{i:0;R:11720;i:1;R:801;}s:12:"8:rznvyhfref";a:2:{i:0;R:11720;i:1;R:801;}s:27:"8:rznvyhfref-gnetrg-erirefr";a:2:{i:0;R:11720;i:1;R:801;}s:24:"8:rznvyhfref-aberpvcvrag";a:2:{i:0;R:11720;i:1;R:801;}s:32:"8:rznvyhfref-aberpvcvragfryrpgrq";a:2:{i:0;R:11720;i:1;R:801;}s:38:"8:rznvyhfref-gbbznalerpvcvragffryrpgrq";a:2:{i:0;R:11720;i:1;R:801;}s:18:"8:rzretraplqrflfbc";a:2:{i:0;s:20:"ext-emergencydesysop";i:1;R:801;}s:23:"8:rzretraplqrflfbc-qrfp";a:2:{i:0;R:11728;i:1;R:801;}s:24:"8:rzretraplqrflfbc-gvgyr";a:2:{i:0;R:11728;i:1;R:801;}s:29:"8:rzretraplqrflfbc-bgurenqzva";a:2:{i:0;R:11728;i:1;R:801;}s:25:"8:rzretraplqrflfbc-ernfba";a:2:{i:0;R:11728;i:1;R:801;}s:25:"8:rzretraplqrflfbc-fhozvg";a:2:{i:0;R:11728;i:1;R:801;}s:29:"8:rzretraplqrflfbc-vapbzcyrgr";a:2:{i:0;R:11728;i:1;R:801;}s:28:"8:rzretraplqrflfbc-abgnflfbc";a:2:{i:0;R:11728;i:1;R:801;}s:27:"8:rzretraplqrflfbc-abtebhcf";a:2:{i:0;R:11728;i:1;R:801;}s:23:"8:rzretraplqrflfbc-qbar";a:2:{i:0;R:11728;i:1;R:801;}s:32:"8:rzretraplqrflfbc-vainyvqgnetrg";a:2:{i:0;R:11728;i:1;R:801;}s:26:"8:rzretraplqrflfbc-oybpxrq";a:2:{i:0;R:11728;i:1;R:801;}s:26:"8:rzretraplqrflfbc-abevtug";a:2:{i:0;R:11728;i:1;R:801;}s:24:"8:evtug-rzretraplqrflfbc";a:2:{i:0;R:11728;i:1;R:801;}s:19:"8:reebeunaqyre-qrfp";a:2:{i:0;s:16:"ext-errorhandler";i:1;R:801;}s:21:"8:reebeunaqyre-reebef";a:2:{i:0;R:11743;i:1;R:801;}s:26:"8:reebeunaqyre-reebe-sngny";a:2:{i:0;R:11743;i:1;R:801;}s:28:"8:reebeunaqyre-reebe-jneavat";a:2:{i:0;R:11743;i:1;R:801;}s:26:"8:reebeunaqyre-reebe-cnefr";a:2:{i:0;R:11743;i:1;R:801;}s:27:"8:reebeunaqyre-reebe-abgvpr";a:2:{i:0;R:11743;i:1;R:801;}s:31:"8:reebeunaqyre-reebe-qrcerpngrq";a:2:{i:0;R:11743;i:1;R:801;}s:31:"8:reebeunaqyre-reebe-pber-reebe";a:2:{i:0;R:11743;i:1;R:801;}s:33:"8:reebeunaqyre-reebe-pber-jneavat";a:2:{i:0;R:11743;i:1;R:801;}s:34:"8:reebeunaqyre-reebe-pbzcvyr-reebe";a:2:{i:0;R:11743;i:1;R:801;}s:36:"8:reebeunaqyre-reebe-pbzcvyr-jneavat";a:2:{i:0;R:11743;i:1;R:801;}s:31:"8:reebeunaqyre-reebe-hfre-reebe";a:2:{i:0;R:11743;i:1;R:801;}s:33:"8:reebeunaqyre-reebe-hfre-jneavat";a:2:{i:0;R:11743;i:1;R:801;}s:32:"8:reebeunaqyre-reebe-hfre-abgvpr";a:2:{i:0;R:11743;i:1;R:801;}s:36:"8:reebeunaqyre-reebe-hfre-qrcerpngrq";a:2:{i:0;R:11743;i:1;R:801;}s:27:"8:reebeunaqyre-reebe-fgevpg";a:2:{i:0;R:11743;i:1;R:801;}s:32:"8:reebeunaqyre-reebe-erpbirenoyr";a:2:{i:0;R:11743;i:1;R:801;}s:23:"8:reebeunaqyre-zft-grkg";a:2:{i:0;R:11743;i:1;R:801;}s:23:"8:reebeunaqyre-zft-ugzy";a:2:{i:0;R:11743;i:1;R:801;}s:20:"8:reebeunaqyre-genpr";a:2:{i:0;R:11743;i:1;R:801;}s:25:"8:reebeunaqyre-genpr-yvar";a:2:{i:0;R:11743;i:1;R:801;}s:34:"8:reebeunaqyre-genpr-yvar-vagreany";a:2:{i:0;R:11743;i:1;R:801;}s:19:"8:rgurecnqyvgr-qrfp";a:2:{i:0;s:16:"ext-etherpadlite";i:1;R:801;}s:32:"8:rgurecnqyvgr-genpxvat-pngrtbel";a:2:{i:0;R:11766;i:1;R:801;}s:30:"8:rgurecnqyvgr-vainyvq-cnq-hey";a:2:{i:0;R:11766;i:1;R:801;}s:37:"8:rgurecnqyvgr-hey-vf-abg-juvgryvfgrq";a:2:{i:0;R:11766;i:1;R:801;}s:30:"8:rgurecnqyvgr-rzcgl-juvgryvfg";a:2:{i:0;R:11766;i:1;R:801;}s:38:"8:rgurecnqyvgr-cnq-hfrq-zber-guna-bapr";a:2:{i:0;R:11766;i:1;R:801;}s:9:"8:trgqngn";a:2:{i:0;s:16:"ext-externaldata";i:1;R:801;}s:19:"8:rkgreanyqngn-qrfp";a:2:{i:0;R:11773;i:1;R:801;}s:33:"8:rkgreanyqngn-jro-vainyvq-sbezng";a:2:{i:0;R:11773;i:1;R:801;}s:37:"8:rkgreanyqngn-yqnc-hanoyr-gb-pbaarpg";a:2:{i:0;R:11773;i:1;R:801;}s:24:"8:rkgreanyqngn-kzy-reebe";a:2:{i:0;R:11773;i:1;R:801;}s:40:"8:rkgreanyqngn-qo-vapbzcyrgr-vasbezngvba";a:2:{i:0;R:11773;i:1;R:801;}s:35:"8:rkgreanyqngn-qo-pbhyq-abg-trg-hey";a:2:{i:0;R:11773;i:1;R:801;}s:30:"8:rkgreanyqngn-qo-haxabja-glcr";a:2:{i:0;R:11773;i:1;R:801;}s:35:"8:rkgreanyqngn-qo-pbhyq-abg-pbaarpg";a:2:{i:0;R:11773;i:1;R:801;}s:34:"8:rkgreanyqngn-qo-ab-erghea-inyhrf";a:2:{i:0;R:11773;i:1;R:801;}s:31:"8:rkgreanyqngn-qo-vainyvq-dhrel";a:2:{i:0;R:11773;i:1;R:801;}s:36:"8:rkgreanyqngn-qo-bcgvba-hafhccbegrq";a:2:{i:0;R:11773;i:1;R:801;}s:15:"8:rkgreanycntrf";a:2:{i:0;s:17:"ext-externalpages";i:1;R:801;}s:20:"8:rkgreanycntrf-qrfp";a:2:{i:0;R:11786;i:1;R:801;}s:24:"8:rkgreanycntrf-onq-cntr";a:2:{i:0;R:11786;i:1;R:801;}s:23:"8:rkgreanycntrf-ab-cntr";a:2:{i:0;R:11786;i:1;R:801;}s:8:"8:snezre";a:2:{i:0;s:10:"ext-farmer";i:1;R:801;}s:13:"8:snezre-qrfp";a:2:{i:0;R:11791;i:1;R:801;}s:23:"8:snezrepnagperngrjvxvf";a:2:{i:0;R:11791;i:1;R:801;}s:17:"8:snezreperngrhey";a:2:{i:0;R:11791;i:1;R:801;}s:22:"8:snezreperngrfvgranzr";a:2:{i:0;R:11791;i:1;R:801;}s:22:"8:snezreperngrarkgfgrc";a:2:{i:0;R:11791;i:1;R:801;}s:23:"8:snezrearjjvxvznvacntr";a:2:{i:0;R:11791;i:1;R:801;}s:15:"8:snezrejvxvhey";a:2:{i:0;R:11791;i:1;R:801;}s:20:"8:snezrevagrejvxvhey";a:2:{i:0;R:11791;i:1;R:801;}s:14:"8:snezre-nobhg";a:2:{i:0;R:11791;i:1;R:801;}s:19:"8:snezre-nobhg-grkg";a:2:{i:0;R:11791;i:1;R:801;}s:18:"8:snezre-yvfg-jvxv";a:2:{i:0;R:11791;i:1;R:801;}s:23:"8:snezre-yvfg-jvxv-grkg";a:2:{i:0;R:11791;i:1;R:801;}s:19:"8:snezre-perngrjvxv";a:2:{i:0;R:11791;i:1;R:801;}s:24:"8:snezre-perngrjvxv-grkg";a:2:{i:0;R:11791;i:1;R:801;}s:23:"8:snezre-nqzvavfgengvba";a:2:{i:0;R:11791;i:1;R:801;}s:33:"8:snezre-nqzvavfgengvba-rkgrafvba";a:2:{i:0;R:11791;i:1;R:801;}s:38:"8:snezre-nqzvavfgengvba-rkgrafvba-grkg";a:2:{i:0;R:11791;i:1;R:801;}s:34:"8:snezre-nqzvzvfgengvba-yvfghcqngr";a:2:{i:0;R:11791;i:1;R:801;}s:39:"8:snezre-nqzvzvfgengvba-yvfghcqngr-grkg";a:2:{i:0;R:11791;i:1;R:801;}s:30:"8:snezre-nqzvavfgengvba-qryrgr";a:2:{i:0;R:11791;i:1;R:801;}s:35:"8:snezre-nqzvavfgengvba-qryrgr-grkg";a:2:{i:0;R:11791;i:1;R:801;}s:28:"8:snezre-nqzvavfgre-guvfjvxv";a:2:{i:0;R:11791;i:1;R:801;}s:33:"8:snezre-nqzvavfgre-guvfjvxv-grkg";a:2:{i:0;R:11791;i:1;R:801;}s:21:"8:snezre-abgninvynoyr";a:2:{i:0;R:11791;i:1;R:801;}s:26:"8:snezre-abgninvynoyr-grkg";a:2:{i:0;R:11791;i:1;R:801;}s:20:"8:snezre-jvxvperngrq";a:2:{i:0;R:11791;i:1;R:801;}s:25:"8:snezre-jvxvperngrq-grkg";a:2:{i:0;R:11791;i:1;R:801;}s:16:"8:snezre-qrsnhyg";a:2:{i:0;R:11791;i:1;R:801;}s:19:"8:snezre-jvxvrkvfgf";a:2:{i:0;R:11791;i:1;R:801;}s:24:"8:snezre-jvxvrkvfgf-grkg";a:2:{i:0;R:11791;i:1;R:801;}s:23:"8:snezre-pbasvezfrggvat";a:2:{i:0;R:11791;i:1;R:801;}s:28:"8:snezre-pbasvezfrggvat-anzr";a:2:{i:0;R:11791;i:1;R:801;}s:29:"8:snezre-pbasvezfrggvat-gvgyr";a:2:{i:0;R:11791;i:1;R:801;}s:35:"8:snezre-pbasvezfrggvat-qrfpevcgvba";a:2:{i:0;R:11791;i:1;R:801;}s:30:"8:snezre-pbasvezfrggvat-ernfba";a:2:{i:0;R:11791;i:1;R:801;}s:20:"8:snezre-qrfpevcgvba";a:2:{i:0;R:11791;i:1;R:801;}s:28:"8:snezre-pbasvezfrggvat-grkg";a:2:{i:0;R:11791;i:1;R:801;}s:23:"8:snezre-ohggba-pbasvez";a:2:{i:0;R:11791;i:1;R:801;}s:22:"8:snezre-ohggba-fhozvg";a:2:{i:0;R:11791;i:1;R:801;}s:30:"8:snezre-perngrjvxv-sbez-gvgyr";a:2:{i:0;R:11791;i:1;R:801;}s:30:"8:snezre-perngrjvxv-sbez-grkg1";a:2:{i:0;R:11791;i:1;R:801;}s:29:"8:snezre-perngrjvxv-sbez-uryc";a:2:{i:0;R:11791;i:1;R:801;}s:30:"8:snezre-perngrjvxv-sbez-grkg2";a:2:{i:0;R:11791;i:1;R:801;}s:30:"8:snezre-perngrjvxv-sbez-grkg3";a:2:{i:0;R:11791;i:1;R:801;}s:30:"8:snezre-perngrjvxv-sbez-grkg4";a:2:{i:0;R:11791;i:1;R:801;}s:24:"8:snezre-perngrjvxv-hfre";a:2:{i:0;R:11791;i:1;R:801;}s:24:"8:snezre-perngrjvxv-anzr";a:2:{i:0;R:11791;i:1;R:801;}s:25:"8:snezre-perngrjvxv-gvgyr";a:2:{i:0;R:11791;i:1;R:801;}s:31:"8:snezre-perngrjvxv-qrfpevcgvba";a:2:{i:0;R:11791;i:1;R:801;}s:26:"8:snezre-perngrjvxv-ernfba";a:2:{i:0;R:11791;i:1;R:801;}s:20:"8:snezre-hcqngrqyvfg";a:2:{i:0;R:11791;i:1;R:801;}s:22:"8:snezre-abgnpprffvoyr";a:2:{i:0;R:11791;i:1;R:801;}s:27:"8:snezre-abgnpprffvoyr-grfg";a:2:{i:0;R:11791;i:1;R:801;}s:25:"8:snezre-crezvffvbaqravrq";a:2:{i:0;R:11791;i:1;R:801;}s:30:"8:snezre-crezvffvbaqravrq-grkg";a:2:{i:0;R:11791;i:1;R:801;}s:31:"8:snezre-crezvffvbaqravrq-grkg1";a:2:{i:0;R:11791;i:1;R:801;}s:17:"8:snezre-qryrgvat";a:2:{i:0;R:11791;i:1;R:801;}s:23:"8:snezre-qryrgr-pbasvez";a:2:{i:0;R:11791;i:1;R:801;}s:28:"8:snezre-qryrgr-pbasvez-jvxv";a:2:{i:0;R:11791;i:1;R:801;}s:22:"8:snezre-qryrgr-ernfba";a:2:{i:0;R:11791;i:1;R:801;}s:21:"8:snezre-qryrgr-gvgyr";a:2:{i:0;R:11791;i:1;R:801;}s:20:"8:snezre-qryrgr-grkg";a:2:{i:0;R:11791;i:1;R:801;}s:20:"8:snezre-qryrgr-sbez";a:2:{i:0;R:11791;i:1;R:801;}s:27:"8:snezre-qryrgr-sbez-fhozvg";a:2:{i:0;R:11791;i:1;R:801;}s:20:"8:snezre-yvfgbsjvxvf";a:2:{i:0;R:11791;i:1;R:801;}s:17:"8:snezre-znvacntr";a:2:{i:0;R:11791;i:1;R:801;}s:20:"8:snezre-onfvp-gvgyr";a:2:{i:0;R:11791;i:1;R:801;}s:21:"8:snezre-onfvp-gvgyr1";a:2:{i:0;R:11791;i:1;R:801;}s:26:"8:snezre-onfvp-gvgyr1-grkg";a:2:{i:0;R:11791;i:1;R:801;}s:26:"8:snezre-onfvp-qrfpevcgvba";a:2:{i:0;R:11791;i:1;R:801;}s:31:"8:snezre-onfvp-qrfpevcgvba-grkg";a:2:{i:0;R:11791;i:1;R:801;}s:25:"8:snezre-onfvp-crezvffvba";a:2:{i:0;R:11791;i:1;R:801;}s:30:"8:snezre-onfvp-crezvffvba-grkg";a:2:{i:0;R:11791;i:1;R:801;}s:33:"8:snezre-onfvp-crezvffvba-ivfvgbe";a:2:{i:0;R:11791;i:1;R:801;}s:38:"8:snezre-onfvp-crezvffvba-ivfvgbe-grkg";a:2:{i:0;R:11791;i:1;R:801;}s:12:"8:snezre-lrf";a:2:{i:0;R:11791;i:1;R:801;}s:11:"8:snezre-ab";a:2:{i:0;R:11791;i:1;R:801;}s:30:"8:snezre-onfvp-crezvffvba-hfre";a:2:{i:0;R:11791;i:1;R:801;}s:35:"8:snezre-onfvp-crezvffvba-hfre-grkg";a:2:{i:0;R:11791;i:1;R:801;}s:22:"8:snezre-frgcrezvffvba";a:2:{i:0;R:11791;i:1;R:801;}s:20:"8:snezre-qrsnhygfxva";a:2:{i:0;R:11791;i:1;R:801;}s:27:"8:snezre-qrsnhygfxva-ohggba";a:2:{i:0;R:11791;i:1;R:801;}s:19:"8:snezre-rkgrafvbaf";a:2:{i:0;R:11791;i:1;R:801;}s:26:"8:snezre-rkgrafvbaf-ohggba";a:2:{i:0;R:11791;i:1;R:801;}s:36:"8:snezre-rkgrafvbaf-rkgrafvba-qravrq";a:2:{i:0;R:11791;i:1;R:801;}s:27:"8:snezre-rkgrafvbaf-vainyvq";a:2:{i:0;R:11791;i:1;R:801;}s:32:"8:snezre-rkgrafvbaf-vainyvq-grkg";a:2:{i:0;R:11791;i:1;R:801;}s:29:"8:snezre-rkgrafvbaf-ninvynoyr";a:2:{i:0;R:11791;i:1;R:801;}s:31:"8:snezre-rkgrafvbaf-abninvynoyr";a:2:{i:0;R:11791;i:1;R:801;}s:28:"8:snezre-rkgrafvbaf-ertvfgre";a:2:{i:0;R:11791;i:1;R:801;}s:34:"8:snezre-rkgrafvbaf-ertvfgre-grkg1";a:2:{i:0;R:11791;i:1;R:801;}s:34:"8:snezre-rkgrafvbaf-ertvfgre-grkg2";a:2:{i:0;R:11791;i:1;R:801;}s:34:"8:snezre-rkgrafvbaf-ertvfgre-grkg3";a:2:{i:0;R:11791;i:1;R:801;}s:34:"8:snezre-rkgrafvbaf-ertvfgre-grkg4";a:2:{i:0;R:11791;i:1;R:801;}s:33:"8:snezre-rkgrafvbaf-ertvfgre-anzr";a:2:{i:0;R:11791;i:1;R:801;}s:40:"8:snezre-rkgrafvbaf-ertvfgre-vapyhqrsvyr";a:2:{i:0;R:11791;i:1;R:801;}s:21:"8:snezre-reebe-rkvfgf";a:2:{i:0;R:11791;i:1;R:801;}s:25:"8:snezre-reebe-abrkgjevgr";a:2:{i:0;R:11791;i:1;R:801;}s:17:"8:snezre-ybt-anzr";a:2:{i:0;R:11791;i:1;R:801;}s:19:"8:snezre-ybt-urnqre";a:2:{i:0;R:11791;i:1;R:801;}s:19:"8:snezre-ybt-perngr";a:2:{i:0;R:11791;i:1;R:801;}s:19:"8:snezre-ybt-qryrgr";a:2:{i:0;R:11791;i:1;R:801;}s:19:"8:evtug-snezrenqzva";a:2:{i:0;R:11791;i:1;R:801;}s:18:"8:evtug-perngrjvxv";a:2:{i:0;R:11791;i:1;R:801;}s:16:"8:snibevgrf-qrfp";a:2:{i:0;s:13:"ext-favorites";i:1;R:801;}s:14:"8:snibevgrguvf";a:2:{i:0;R:11897;i:1;R:801;}s:20:"8:cersf-snibevgryvfg";a:2:{i:0;R:11897;i:1;R:801;}s:26:"8:cersf-snibevgryvfg-gbxra";a:2:{i:0;R:11897;i:1;R:801;}s:28:"8:cersf-nqinaprqsnibevgryvfg";a:2:{i:0;R:11897;i:1;R:801;}s:14:"8:snibevgryvfg";a:2:{i:0;R:11897;i:1;R:801;}s:16:"8:zlsnibevgryvfg";a:2:{i:0;R:11897;i:1;R:801;}s:17:"8:snibevgryvfgsbe";a:2:{i:0;R:11897;i:1;R:801;}s:16:"8:absnibevgryvfg";a:2:{i:0;R:11897;i:1;R:801;}s:22:"8:snibevgryvfgnabagrkg";a:2:{i:0;R:11897;i:1;R:801;}s:17:"8:snibevgrabybtva";a:2:{i:0;R:11897;i:1;R:801;}s:21:"8:snibevgrabybtvagrkg";a:2:{i:0;R:11897;i:1;R:801;}s:15:"8:nqqrqsnibevgr";a:2:{i:0;R:11897;i:1;R:801;}s:19:"8:nqqrqsnibevgrgrkg";a:2:{i:0;R:11897;i:1;R:801;}s:17:"8:erzbirqsnibevgr";a:2:{i:0;R:11897;i:1;R:801;}s:21:"8:erzbirqsnibevgrgrkg";a:2:{i:0;R:11897;i:1;R:801;}s:10:"8:snibevgr";a:2:{i:0;R:11897;i:1;R:801;}s:18:"8:snibevgrguvfcntr";a:2:{i:0;R:11897;i:1;R:801;}s:12:"8:hasnibevgr";a:2:{i:0;R:11897;i:1;R:801;}s:20:"8:hasnibevgrguvfcntr";a:2:{i:0;R:11897;i:1;R:801;}s:22:"8:snibevgryvfg-bcgvbaf";a:2:{i:0;R:11897;i:1;R:801;}s:13:"8:snibevgrvat";a:2:{i:0;R:11897;i:1;R:801;}s:15:"8:hasnibevgrvat";a:2:{i:0;R:11897;i:1;R:801;}s:27:"8:npprffxrl-cg-snibevgryvfg";a:2:{i:0;R:11897;i:1;R:801;}s:23:"8:npprffxrl-pn-snibevgr";a:2:{i:0;R:11897;i:1;R:801;}s:25:"8:npprffxrl-pn-hasnibevgr";a:2:{i:0;R:11897;i:1;R:801;}s:20:"8:npprffxrl-snibevgr";a:2:{i:0;R:11897;i:1;R:801;}s:25:"8:gbbygvc-cg-snibevgryvfg";a:2:{i:0;R:11897;i:1;R:801;}s:21:"8:gbbygvc-pn-snibevgr";a:2:{i:0;R:11897;i:1;R:801;}s:23:"8:gbbygvc-pn-hasnibevgr";a:2:{i:0;R:11897;i:1;R:801;}s:18:"8:gbbygvc-snibevgr";a:2:{i:0;R:11897;i:1;R:801;}s:18:"8:snibevgryvfgnyy2";a:2:{i:0;R:11897;i:1;R:801;}s:27:"8:snibevgryvfgrqvg-ahzvgrzf";a:2:{i:0;R:11897;i:1;R:801;}s:26:"8:snibevgryvfgrqvg-abvgrzf";a:2:{i:0;R:11897;i:1;R:801;}s:31:"8:snibevgryvfgrqvg-abezny-gvgyr";a:2:{i:0;R:11897;i:1;R:801;}s:32:"8:snibevgryvfgrqvg-abezny-yrtraq";a:2:{i:0;R:11897;i:1;R:801;}s:33:"8:snibevgryvfgrqvg-abezny-rkcynva";a:2:{i:0;R:11897;i:1;R:801;}s:32:"8:snibevgryvfgrqvg-abezny-fhozvg";a:2:{i:0;R:11897;i:1;R:801;}s:30:"8:snibevgryvfgrqvg-abezny-qbar";a:2:{i:0;R:11897;i:1;R:801;}s:28:"8:snibevgryvfgrqvg-enj-gvgyr";a:2:{i:0;R:11897;i:1;R:801;}s:29:"8:snibevgryvfgrqvg-enj-yrtraq";a:2:{i:0;R:11897;i:1;R:801;}s:30:"8:snibevgryvfgrqvg-enj-rkcynva";a:2:{i:0;R:11897;i:1;R:801;}s:29:"8:snibevgryvfgrqvg-enj-gvgyrf";a:2:{i:0;R:11897;i:1;R:801;}s:29:"8:snibevgryvfgrqvg-enj-fhozvg";a:2:{i:0;R:11897;i:1;R:801;}s:27:"8:snibevgryvfgrqvg-enj-qbar";a:2:{i:0;R:11897;i:1;R:801;}s:28:"8:snibevgryvfgrqvg-enj-nqqrq";a:2:{i:0;R:11897;i:1;R:801;}s:30:"8:snibevgryvfgrqvg-enj-erzbirq";a:2:{i:0;R:11897;i:1;R:801;}s:24:"8:snibevgryvfggbbyf-ivrj";a:2:{i:0;R:11897;i:1;R:801;}s:24:"8:snibevgryvfggbbyf-rqvg";a:2:{i:0;R:11897;i:1;R:801;}s:23:"8:snibevgryvfggbbyf-enj";a:2:{i:0;R:11897;i:1;R:801;}s:17:"8:svyrnggnpu-qrfp";a:2:{i:0;s:14:"ext-fileattach";i:1;R:801;}s:24:"8:svyrnggnpu-nggnpuzragf";a:2:{i:0;R:11948;i:1;R:801;}s:23:"8:svyrnggnpu-nggnpusvyr";a:2:{i:0;R:11948;i:1;R:801;}s:26:"8:svyrnggnpu-hcybnqurnqvat";a:2:{i:0;R:11948;i:1;R:801;}s:24:"8:svyrnggnpu-rqvgpbzzrag";a:2:{i:0;R:11948;i:1;R:801;}s:22:"8:svyrcntrznfxvat-qrfp";a:2:{i:0;s:19:"ext-filepagemasking";i:1;R:801;}s:22:"8:svygreyvfghfref-qrfp";a:2:{i:0;s:19:"ext-filterlistusers";i:1;R:801;}s:19:"8:yvfghfref-fubjnyy";a:2:{i:0;R:11956;i:1;R:801;}s:20:"8:evtug-ivrjnyyhfref";a:2:{i:0;R:11956;i:1;R:801;}s:10:"8:svaqfcnz";a:2:{i:0;s:12:"ext-findspam";i:1;R:801;}s:15:"8:svaqfcnz-qrfp";a:2:{i:0;R:11960;i:1;R:801;}s:13:"8:svaqfcnz-vc";a:2:{i:0;R:11960;i:1;R:801;}s:13:"8:svaqfcnz-bx";a:2:{i:0;R:11960;i:1;R:801;}s:22:"8:svaqfcnz-abgrkgsbhaq";a:2:{i:0;R:11960;i:1;R:801;}s:16:"8:evtug-svaqfcnz";a:2:{i:0;R:11960;i:1;R:801;}s:17:"8:svkrqvzntr-qrfp";a:2:{i:0;s:14:"ext-fixedimage";i:1;R:801;}s:10:"8:syntcntr";a:2:{i:0;s:12:"ext-flagpage";i:1;R:801;}s:15:"8:syntcntr-qrfp";a:2:{i:0;R:11969;i:1;R:801;}s:23:"8:syntcntr-grzcyngryvfg";a:2:{i:0;R:11969;i:1;R:801;}s:30:"8:syntcntr-abcntrfryrpgrqgvgyr";a:2:{i:0;R:11969;i:1;R:801;}s:25:"8:syntcntr-abcntrfryrpgrq";a:2:{i:0;R:11969;i:1;R:801;}s:25:"8:syntcntr-rzcglyvfggvgyr";a:2:{i:0;R:11969;i:1;R:801;}s:20:"8:syntcntr-rzcglyvfg";a:2:{i:0;R:11969;i:1;R:801;}s:18:"8:syntcntr-cerivrj";a:2:{i:0;R:11969;i:1;R:801;}s:22:"8:syntcntr-pbasvezfnir";a:2:{i:0;R:11969;i:1;R:801;}s:23:"8:syntcntr-fhozvgohggba";a:2:{i:0;R:11969;i:1;R:801;}s:22:"8:syntcntr-abarkvfgrag";a:2:{i:0;R:11969;i:1;R:801;}s:18:"8:syntcntr-fhzznel";a:2:{i:0;R:11969;i:1;R:801;}s:18:"8:syntcntr-fhpprff";a:2:{i:0;R:11969;i:1;R:801;}s:14:"8:syntcntr-gno";a:2:{i:0;R:11969;i:1;R:801;}s:17:"8:syiunaqyre_qrfp";a:2:{i:0;s:14:"ext-flvhandler";i:1;R:801;}s:15:"8:syi-ybat-qrfp";a:2:{i:0;R:11984;i:1;R:801;}s:19:"8:sbyxgntpybhq-qrfp";a:2:{i:0;s:16:"ext-folktagcloud";i:1;R:801;}s:14:"8:sbeprcerivrj";a:2:{i:0;s:16:"ext-forcepreview";i:1;R:801;}s:19:"8:sbeprcerivrj-qrfp";a:2:{i:0;R:11989;i:1;R:801;}s:26:"8:evtug-sbeprcerivrjrkrzcg";a:2:{i:0;R:11989;i:1;R:801;}s:11:"8:sbez-qrfp";a:2:{i:0;s:8:"ext-form";i:1;R:801;}s:6:"8:sbez";a:2:{i:0;R:11993;i:1;R:801;}s:12:"8:sbezabanzr";a:2:{i:0;R:11993;i:1;R:801;}s:16:"8:sbezabanzrgrkg";a:2:{i:0;R:11993;i:1;R:801;}s:13:"8:sbezonqanzr";a:2:{i:0;R:11993;i:1;R:801;}s:17:"8:sbezonqanzrgrkg";a:2:{i:0;R:11993;i:1;R:801;}s:13:"8:sbezcnggrea";a:2:{i:0;R:11993;i:1;R:801;}s:21:"8:sbezgrzcyngrcnggrea";a:2:{i:0;R:11993;i:1;R:801;}s:18:"8:sbezgvgyrcnggrea";a:2:{i:0;R:11993;i:1;R:801;}s:10:"8:sbezfnir";a:2:{i:0;R:11993;i:1;R:801;}s:25:"8:sbezvaqrkzvfzngpu-gvgyr";a:2:{i:0;R:11993;i:1;R:801;}s:19:"8:sbezvaqrkzvfzngpu";a:2:{i:0;R:11993;i:1;R:801;}s:19:"8:sbeznegvpyrrkvfgf";a:2:{i:0;R:11993;i:1;R:801;}s:23:"8:sbeznegvpyrrkvfgfgrkg";a:2:{i:0;R:11993;i:1;R:801;}s:17:"8:sbezonqcntranzr";a:2:{i:0;R:11993;i:1;R:801;}s:18:"8:sbezonqerpncgpun";a:2:{i:0;R:11993;i:1;R:801;}s:21:"8:sbezonqcntranzrgrkg";a:2:{i:0;R:11993;i:1;R:801;}s:24:"8:sbezerdhverqsvryqreebe";a:2:{i:0;R:11993;i:1;R:801;}s:17:"8:sbezfnirfhzznel";a:2:{i:0;R:11993;i:1;R:801;}s:15:"8:sbezfnirreebe";a:2:{i:0;R:11993;i:1;R:801;}s:19:"8:sbezfnirreebegrkg";a:2:{i:0;R:11993;i:1;R:801;}s:12:"8:rznvy-qrfp";a:2:{i:0;s:15:"ext-formatemail";i:1;R:801;}s:14:"8:rznvy_urnqre";a:2:{i:0;R:12015;i:1;R:801;}s:14:"8:rznvy_sbbgre";a:2:{i:0;R:12015;i:1;R:801;}s:16:"8:sbezngahz-qrfp";a:2:{i:0;s:13:"ext-formatnum";i:1;R:801;}s:27:"8:senzrqivqrb_qrsnhyg_jvqgu";a:2:{i:0;s:15:"ext-framedvideo";i:1;R:801;}s:32:"8:senzrqivqrb_sbepr_qrsnhyg_fvmr";a:2:{i:0;R:12021;i:1;R:801;}s:23:"8:senzrqivqrb_znk_jvqgu";a:2:{i:0;R:12021;i:1;R:801;}s:24:"8:senzrqivqrb_znk_urvtug";a:2:{i:0;R:12021;i:1;R:801;}s:31:"8:senzrqivqrb_nyybj_shyy_fperra";a:2:{i:0;R:12021;i:1;R:801;}s:37:"8:senzrqivqrb_sbepr_nyybj_shyy_fperra";a:2:{i:0;R:12021;i:1;R:801;}s:20:"8:senzrqivqrb_senzrf";a:2:{i:0;R:12021;i:1;R:801;}s:26:"8:senzrqivqrb_sbepr_senzrf";a:2:{i:0;R:12021;i:1;R:801;}s:28:"8:senzrqivqrb_sbepr_cbfvgvba";a:2:{i:0;R:12021;i:1;R:801;}s:22:"8:senzrqivqrb_cbfvgvba";a:2:{i:0;R:12021;i:1;R:801;}s:20:"8:senzrqivqrb_reebef";a:2:{i:0;R:12021;i:1;R:801;}s:19:"8:senzrqivqrb_reebe";a:2:{i:0;R:12021;i:1;R:801;}s:32:"8:senzrqivqrb_reebe_haxabja_glcr";a:2:{i:0;R:12021;i:1;R:801;}s:31:"8:senzrqivqrb_reebe_ab_vq_tvira";a:2:{i:0;R:12021;i:1;R:801;}s:35:"8:senzrqivqrb_reebe_urvtug_erdhverq";a:2:{i:0;R:12021;i:1;R:801;}s:50:"8:senzrqivqrb_reebe_urvtug_erdhverq_abg_bayl_jvqgu";a:2:{i:0;R:12021;i:1;R:801;}s:33:"8:senzrqivqrb_reebe_jvqgu_gbb_ovt";a:2:{i:0;R:12021;i:1;R:801;}s:34:"8:senzrqivqrb_reebe_urvtug_gbb_ovt";a:2:{i:0;R:12021;i:1;R:801;}s:30:"8:senzrqivqrb_reebe_ab_vagrtre";a:2:{i:0;R:12021;i:1;R:801;}s:25:"8:senzrqivqrb_reebe_yvzvg";a:2:{i:0;R:12021;i:1;R:801;}s:41:"8:senzrqivqrb_reebe_shyy_fvmr_abg_nyybjrq";a:2:{i:0;R:12021;i:1;R:801;}s:22:"8:senzrqivqrb_uryccntr";a:2:{i:0;R:12021;i:1;R:801;}s:28:"8:senzrqivqrb_reebe_frr_uryc";a:2:{i:0;R:12021;i:1;R:801;}s:45:"8:senzrqivqrb_reebe_urvtug_naq_jvqgu_erdhverq";a:2:{i:0;R:12021;i:1;R:801;}s:18:"8:senzrqivqrb-qrfp";a:2:{i:0;R:12021;i:1;R:801;}s:21:"8:serdcnggreagntpybhq";a:2:{i:0;s:23:"ext-freqpatterntagcloud";i:1;R:801;}s:32:"8:serdcnggreagntpybhqznvagranapr";a:2:{i:0;R:12047;i:1;R:801;}s:26:"8:serdcnggreagntpybhq-qrfp";a:2:{i:0;R:12047;i:1;R:801;}s:19:"8:scgp-pngrtbelanzr";a:2:{i:0;R:12047;i:1;R:801;}s:26:"8:scgp-pbagrkg-zrah-oebjfr";a:2:{i:0;R:12047;i:1;R:801;}s:32:"8:scgp-pbagrkg-zrah-fvzvyne-gntf";a:2:{i:0;R:12047;i:1;R:801;}s:26:"8:scgp-sbez-nggevohgr-anzr";a:2:{i:0;R:12047;i:1;R:801;}s:25:"8:scgp-sbez-fhozvg-ohggba";a:2:{i:0;R:12047;i:1;R:801;}s:24:"8:scgp-vainyvq-nggevohgr";a:2:{i:0;R:12047;i:1;R:801;}s:42:"8:scgp-vafhssvpvrag-evtugf-sbe-znvagranapr";a:2:{i:0;R:12047;i:1;R:801;}s:32:"8:scgp-erserfu-serdhrag-cnggreaf";a:2:{i:0;R:12047;i:1;R:801;}s:34:"8:scgp-erserfurq-serdhrag-cnggreaf";a:2:{i:0;R:12047;i:1;R:801;}s:28:"8:scgp-frnepu-nggevohgr-anzr";a:2:{i:0;R:12047;i:1;R:801;}s:20:"8:scgp-frnepu-ohggba";a:2:{i:0;R:12047;i:1;R:801;}s:30:"8:scgp-frnepu-fhttrfgvba-inyhr";a:2:{i:0;R:12047;i:1;R:801;}s:17:"8:scgp-fhttrfgvba";a:2:{i:0;R:12047;i:1;R:801;}s:20:"8:scgp-ab-fhttrfgvba";a:2:{i:0;R:12047;i:1;R:801;}s:22:"8:sebagonpxsbeprq-qrfp";a:2:{i:0;s:34:"ext-frontbackmatterforcedwikilinks";i:1;R:801;}s:23:"8:sebagonpxsbeprq-sebag";a:2:{i:0;R:12065;i:1;R:801;}s:22:"8:sebagonpxsbeprq-onpx";a:2:{i:0;R:12065;i:1;R:801;}s:24:"8:sebagonpxsbeprq-sbeprq";a:2:{i:0;R:12065;i:1;R:801;}s:15:"8:trrdhobk-qrfp";a:2:{i:0;s:12:"ext-geequbox";i:1;R:801;}s:16:"8:traqrevmr-qrfp";a:2:{i:0;s:13:"ext-genderize";i:1;R:801;}s:14:"8:trbqngn-qrfp";a:2:{i:0;s:11:"ext-geodata";i:1;R:801;}s:19:"8:trbqngn-onq-vachg";a:2:{i:0;R:12074;i:1;R:801;}s:22:"8:trbqngn-onq-yngvghqr";a:2:{i:0;R:12074;i:1;R:801;}s:23:"8:trbqngn-onq-ybatvghqr";a:2:{i:0;R:12074;i:1;R:801;}s:18:"8:trbqngn-onq-glcr";a:2:{i:0;R:12074;i:1;R:801;}s:19:"8:trbqngn-onq-tybor";a:2:{i:0;R:12074;i:1;R:801;}s:20:"8:trbqngn-onq-ertvba";a:2:{i:0;R:12074;i:1;R:801;}s:26:"8:trbqngn-zhygvcyr-cevznel";a:2:{i:0;R:12074;i:1;R:801;}s:24:"8:trbqngn-yvzvg-rkprrqrq";a:2:{i:0;R:12074;i:1;R:801;}s:30:"8:trbqngn-oebxra-gntf-pngrtbel";a:2:{i:0;R:12074;i:1;R:801;}s:31:"8:trbqngn-haxabja-glcr-pngrtbel";a:2:{i:0;R:12074;i:1;R:801;}s:32:"8:trbqngn-haxabja-tybor-pngrtbel";a:2:{i:0;R:12074;i:1;R:801;}s:33:"8:trbqngn-haxabja-ertvba-pngrtbel";a:2:{i:0;R:12074;i:1;R:801;}s:28:"8:trbqngn-cevznel-pbbeqvangr";a:2:{i:0;R:12074;i:1;R:801;}s:14:"8:trbyvgr-qrfp";a:2:{i:0;s:11:"ext-geolite";i:1;R:801;}s:9:"8:trbyvgr";a:2:{i:0;R:12089;i:1;R:801;}s:16:"8:trgsnzvyl-qrfp";a:2:{i:0;s:13:"ext-getfamily";i:1;R:801;}s:11:"8:trgsnzvyl";a:2:{i:0;R:12092;i:1;R:801;}s:26:"8:trgsnzvyl-vagrejvxvreebe";a:2:{i:0;R:12092;i:1;R:801;}s:17:"8:evtug-trgsnzvyl";a:2:{i:0;R:12092;i:1;R:801;}s:23:"8:tybonyhfretebhcf-qrfp";a:2:{i:0;s:20:"ext-globalusergroups";i:1;R:801;}s:18:"8:tybonyhfreevtugf";a:2:{i:0;s:20:"ext-globaluserrights";i:1;R:801;}s:10:"8:the-qrfp";a:2:{i:0;R:12099;i:1;R:801;}s:20:"8:the-evtugfybt-anzr";a:2:{i:0;R:12099;i:1;R:801;}s:22:"8:the-evtugfybt-urnqre";a:2:{i:0;R:12099;i:1;R:801;}s:21:"8:the-evtugfybt-ragel";a:2:{i:0;R:12099;i:1;R:801;}s:25:"8:evtug-hfreevtugf-tybony";a:2:{i:0;R:12099;i:1;R:801;}s:14:"8:tahcybg-qrfp";a:2:{i:0;s:11:"ext-gnuplot";i:1;R:801;}s:15:"8:tbbtyrnqfrafr";a:2:{i:0;s:17:"ext-googleadsense";i:1;R:801;}s:20:"8:tbbtyrnqfrafr-qrfp";a:2:{i:0;R:12108;i:1;R:801;}s:22:"8:tbbtyrnanylgvpf-qrfp";a:2:{i:0;s:19:"ext-googleanalytics";i:1;R:801;}s:17:"8:tbbtyrzncf-qrfp";a:2:{i:0;s:14:"ext-googlemaps";i:1;R:801;}s:33:"8:tbbtyrzncf-vapbzcngvoyr-oebjfre";a:2:{i:0;R:12113;i:1;R:801;}s:38:"8:tbbtyrzncf-vapbzcngvoyr-oebjfre-yvax";a:2:{i:0;R:12113;i:1;R:801;}s:22:"8:tbbtyrzncf-ab-rqvgbe";a:2:{i:0;R:12113;i:1;R:801;}s:26:"8:tbbtyrzncf-onyybba-gvgyr";a:2:{i:0;R:12113;i:1;R:801;}s:33:"8:tbbtyrzncf-onyybba-yvax-negvpyr";a:2:{i:0;R:12113;i:1;R:801;}s:24:"8:tbbtyrzncf-znxr-znexre";a:2:{i:0;R:12113;i:1;R:801;}s:19:"8:tbbtyrzncf-erzbir";a:2:{i:0;R:12113;i:1;R:801;}s:20:"8:tbbtyrzncf-pncgvba";a:2:{i:0;R:12113;i:1;R:801;}s:22:"8:tbbtyrzncf-gno-gvgyr";a:2:{i:0;R:12113;i:1;R:801;}s:16:"8:tbbtyrzncf-gno";a:2:{i:0;R:12113;i:1;R:801;}s:23:"8:tbbtyrzncf-fgneg-cngu";a:2:{i:0;R:12113;i:1;R:801;}s:23:"8:tbbtyrzncf-genpr-nern";a:2:{i:0;R:12113;i:1;R:801;}s:23:"8:tbbtyrzncf-fnir-cbvag";a:2:{i:0;R:12113;i:1;R:801;}s:34:"8:tbbtyrzncf-ybnq-znc-sebz-negvpyr";a:2:{i:0;R:12113;i:1;R:801;}s:20:"8:tbbtyrzncf-ab-zncf";a:2:{i:0;R:12113;i:1;R:801;}s:25:"8:tbbtyrzncf-erserfu-yvfg";a:2:{i:0;R:12113;i:1;R:801;}s:21:"8:tbbtyrzncf-ybnq-znc";a:2:{i:0;R:12113;i:1;R:801;}s:24:"8:tbbtyrzncf-pyvc-erfhyg";a:2:{i:0;R:12113;i:1;R:801;}s:23:"8:tbbtyrzncf-ab-erfhygf";a:2:{i:0;R:12113;i:1;R:801;}s:22:"8:tbbtyrzncf-frnepuvat";a:2:{i:0;R:12113;i:1;R:801;}s:16:"8:tbbtyrzncf-znc";a:2:{i:0;R:12113;i:1;R:801;}s:17:"8:tbbtyrzncf-abgr";a:2:{i:0;R:12113;i:1;R:801;}s:25:"8:tbbtyrzncf-vafgehpgvbaf";a:2:{i:0;R:12113;i:1;R:801;}s:25:"8:tbbtyrzncf-ner-lbh-fher";a:2:{i:0;R:12113;i:1;R:801;}s:29:"8:tbbtyrzncf-pyrne-nyy-cbvagf";a:2:{i:0;R:12113;i:1;R:801;}s:27:"8:tbbtyrzncf-erserfu-cbvagf";a:2:{i:0;R:12113;i:1;R:801;}s:18:"8:tbbtyrzncf-jvqgu";a:2:{i:0;R:12113;i:1;R:801;}s:19:"8:tbbtyrzncf-urvtug";a:2:{i:0;R:12113;i:1;R:801;}s:26:"8:tbbtyrzncf-fpnyr-pbageby";a:2:{i:0;R:12113;i:1;R:801;}s:29:"8:tbbtyrzncf-bireivrj-pbageby";a:2:{i:0;R:12113;i:1;R:801;}s:29:"8:tbbtyrzncf-fryrpgbe-pbageby";a:2:{i:0;R:12113;i:1;R:801;}s:25:"8:tbbtyrzncf-mbbz-pbageby";a:2:{i:0;R:12113;i:1;R:801;}s:18:"8:tbbtyrzncf-ynetr";a:2:{i:0;R:12113;i:1;R:801;}s:19:"8:tbbtyrzncf-zrqvhz";a:2:{i:0;R:12113;i:1;R:801;}s:18:"8:tbbtyrzncf-fznyy";a:2:{i:0;R:12113;i:1;R:801;}s:28:"8:tbbtyrzncf-ab-mbbz-pbageby";a:2:{i:0;R:12113;i:1;R:801;}s:16:"8:tbbtyrzncf-lrf";a:2:{i:0;R:12113;i:1;R:801;}s:15:"8:tbbtyrzncf-ab";a:2:{i:0;R:12113;i:1;R:801;}s:27:"8:tbbtyrzncf-frnepu-cersnpr";a:2:{i:0;R:12113;i:1;R:801;}s:28:"8:tbbtyrzncf-trbpbqr-cersnpr";a:2:{i:0;R:12113;i:1;R:801;}s:30:"8:tbbtyrzncf-ab-frnepu-cersnpr";a:2:{i:0;R:12113;i:1;R:801;}s:19:"8:tbbtyrzncf-frnepu";a:2:{i:0;R:12113;i:1;R:801;}s:25:"8:tbbtyrzncf-pyrne-frnepu";a:2:{i:0;R:12113;i:1;R:801;}s:19:"8:tbbtyrzncf-zrgref";a:2:{i:0;R:12113;i:1;R:801;}s:18:"8:tbbtyrzncf-zvyrf";a:2:{i:0;R:12113;i:1;R:801;}s:25:"8:tbbtyrzncf-rqvgvat-cngu";a:2:{i:0;R:12113;i:1;R:801;}s:22:"8:tbbtyrzncf-fnir-cngu";a:2:{i:0;R:12113;i:1;R:801;}s:22:"8:tbbtyrzncf-rqvg-cngu";a:2:{i:0;R:12113;i:1;R:801;}s:22:"8:tbbtyrzncf-fubj-cngu";a:2:{i:0;R:12113;i:1;R:801;}s:23:"8:tbbtyrzncf-pbybe-cngu";a:2:{i:0;R:12113;i:1;R:801;}s:23:"8:tbbtyrzncf-pbybe-svyy";a:2:{i:0;R:12113;i:1;R:801;}s:21:"8:tbbtyrzncf-nqq-svyy";a:2:{i:0;R:12113;i:1;R:801;}s:24:"8:tbbtyrzncf-erzbir-svyy";a:2:{i:0;R:12113;i:1;R:801;}s:23:"8:tbbtyrzncf-svyy-pbybe";a:2:{i:0;R:12113;i:1;R:801;}s:23:"8:tbbtyrzncf-yvar-pbybe";a:2:{i:0;R:12113;i:1;R:801;}s:20:"8:tbbtyrzncf-bcnpvgl";a:2:{i:0;R:12113;i:1;R:801;}s:23:"8:tbbtyrzncf-yvar-jvqgu";a:2:{i:0;R:12113;i:1;R:801;}s:21:"8:tbbtyrzncf-znxr-znc";a:2:{i:0;R:12113;i:1;R:801;}s:21:"8:tbbtyrzncf-uvqr-znc";a:2:{i:0;R:12113;i:1;R:801;}s:17:"8:tbbtyrzncf-onpx";a:2:{i:0;R:12113;i:1;R:801;}s:24:"8:tbbtyrzncf-xzy-vapyhqr";a:2:{i:0;R:12113;i:1;R:801;}s:29:"8:tbbtyrzncf-xzy-vapyhqr-yvax";a:2:{i:0;R:12113;i:1;R:801;}s:24:"8:tbbtyrzncf-xzy-ybnqvat";a:2:{i:0;R:12113;i:1;R:801;}s:23:"8:tbbtyrzncf-xzy-rkcbeg";a:2:{i:0;R:12113;i:1;R:801;}s:18:"8:tbbtyrzncf-rnegu";a:2:{i:0;R:12113;i:1;R:801;}s:17:"8:tbbtyrzncf-zbba";a:2:{i:0;R:12113;i:1;R:801;}s:17:"8:tbbtyrzncf-znef";a:2:{i:0;R:12113;i:1;R:801;}s:19:"8:tbgbpngrtbel-qrfp";a:2:{i:0;s:16:"ext-gotocategory";i:1;R:801;}s:15:"8:tencuivm-qrfp";a:2:{i:0;s:12:"ext-graphviz";i:1;R:801;}s:20:"8:tebhcffvqrone-qrfp";a:2:{i:0;s:17:"ext-groupssidebar";i:1;R:801;}s:17:"8:unfugnoyrf-qrfp";a:2:{i:0;s:14:"ext-hashtables";i:1;R:801;}s:17:"8:urnqregnof-qrfp";a:2:{i:0;s:14:"ext-headertabs";i:1;R:801;}s:20:"8:urnqregnof-rqvggno";a:2:{i:0;R:12190;i:1;R:801;}s:25:"8:urnqregnof-rqvggno-uvag";a:2:{i:0;R:12190;i:1;R:801;}s:24:"8:urnqregnof-rqvggno-xrl";a:2:{i:0;R:12190;i:1;R:801;}s:17:"8:uryybjbeyq-qrfp";a:2:{i:0;s:14:"ext-helloworld";i:1;R:801;}s:12:"8:uryybjbeyq";a:2:{i:0;R:12195;i:1;R:801;}s:18:"8:uryybjbeyq-uryyb";a:2:{i:0;R:12195;i:1;R:801;}s:18:"8:urycpbzzbaf-qrfp";a:2:{i:0;s:15:"ext-helpcommons";i:1;R:801;}s:20:"8:urycpbzzbaf-perngr";a:2:{i:0;R:12199;i:1;R:801;}s:18:"8:urycpbzzbaf-rqvg";a:2:{i:0;R:12199;i:1;R:801;}s:24:"8:urycpbzzbaf-qvfphffvba";a:2:{i:0;R:12199;i:1;R:801;}s:18:"8:urycpbzzbaf-vasb";a:2:{i:0;R:12199;i:1;R:801;}s:13:"8:uvqraf-qrfp";a:2:{i:0;s:17:"ext-hidenamespace";i:1;R:801;}s:17:"8:uvqrcersvk-qrfp";a:2:{i:0;s:14:"ext-hideprefix";i:1;R:801;}s:15:"8:ubarlcbg-qrfp";a:2:{i:0;s:23:"ext-honeypotintegration";i:1;R:801;}s:51:"8:nohfrsvygre-rqvg-ohvyqre-inef-ubarlcbg-yvfg-pbhag";a:2:{i:0;R:12209;i:1;R:801;}s:14:"8:ugzyrgf-qrfp";a:2:{i:0;s:11:"ext-htmlets";i:1;R:801;}s:22:"8:ugzyrgf-svyrabgsbhaq";a:2:{i:0;R:12212;i:1;R:801;}s:20:"8:ugzyrgf-ybnqsnvyrq";a:2:{i:0;R:12212;i:1;R:801;}s:15:"8:v18agntf-qrfp";a:2:{i:0;s:12:"ext-i18ntags";i:1;R:801;}s:15:"8:vpba-onqvzntr";a:2:{i:0;s:8:"ext-icon";i:1;R:801;}s:15:"8:vpba-onqjvqgu";a:2:{i:0;R:12218;i:1;R:801;}s:11:"8:vpba-qrfp";a:2:{i:0;R:12218;i:1;R:801;}s:14:"8:gnttrqvzntrf";a:2:{i:0;s:16:"ext-imagetagging";i:1;R:801;}s:19:"8:vzntrgnttvat-qrfp";a:2:{i:0;R:12222;i:1;R:801;}s:26:"8:vzntrgnttvat-nqqvzntrgnt";a:2:{i:0;R:12222;i:1;R:801;}s:22:"8:vzntrgnttvat-negvpyr";a:2:{i:0;R:12222;i:1;R:801;}s:27:"8:vzntrgnttvat-negvpyrgbgnt";a:2:{i:0;R:12222;i:1;R:801;}s:35:"8:vzntrgnttvat-pnagrqvgbgurezrffntr";a:2:{i:0;R:12222;i:1;R:801;}s:25:"8:vzntrgnttvat-vztuvfgbel";a:2:{i:0;R:12222;i:1;R:801;}s:21:"8:vzntrgnttvat-vzntrf";a:2:{i:0;R:12222;i:1;R:801;}s:26:"8:vzntrgnttvat-vaguvfvzntr";a:2:{i:0;R:12222;i:1;R:801;}s:23:"8:vzntrgnttvat-ybtragel";a:2:{i:0;R:12222;i:1;R:801;}s:25:"8:vzntrgnttvat-ybt-gnttrq";a:2:{i:0;R:12222;i:1;R:801;}s:18:"8:vzntrgnttvat-arj";a:2:{i:0;R:12222;i:1;R:801;}s:24:"8:vzntrgnttvat-erzbirgnt";a:2:{i:0;R:12222;i:1;R:801;}s:26:"8:vzntrgnttvat-qbar-ohggba";a:2:{i:0;R:12222;i:1;R:801;}s:25:"8:vzntrgnttvat-gnt-ohggba";a:2:{i:0;R:12222;i:1;R:801;}s:31:"8:vzntrgnttvat-gntpnapry-ohggba";a:2:{i:0;R:12222;i:1;R:801;}s:35:"8:vzntrgnttvat-gnttvat-vafgehpgvbaf";a:2:{i:0;R:12222;i:1;R:801;}s:24:"8:vzntrgnttvat-nqqvatgnt";a:2:{i:0;R:12222;i:1;R:801;}s:26:"8:vzntrgnttvat-erzbivatgnt";a:2:{i:0;R:12222;i:1;R:801;}s:28:"8:vzntrgnttvat-nqqgntfhpprff";a:2:{i:0;R:12222;i:1;R:801;}s:31:"8:vzntrgnttvat-erzbirgntfhpprff";a:2:{i:0;R:12222;i:1;R:801;}s:39:"8:vzntrgnttvat-pnagrqvgarrqybtvazrffntr";a:2:{i:0;R:12222;i:1;R:801;}s:38:"8:vzntrgnttvat-barnpgvbangngvzrzrffntr";a:2:{i:0;R:12222;i:1;R:801;}s:34:"8:vzntrgnttvat-barhavdhrgntzrffntr";a:2:{i:0;R:12222;i:1;R:801;}s:37:"8:vzntrgnttvat-vzntrgnt-frrzbervzntrf";a:2:{i:0;R:12222;i:1;R:801;}s:33:"8:vzntrgnttvat-gnttrqvzntrf-gvgyr";a:2:{i:0;R:12222;i:1;R:801;}s:38:"8:vzntrgnttvat-gnttrqvzntrf-qvfcynlvat";a:2:{i:0;R:12222;i:1;R:801;}s:17:"8:gnt-ybtcntranzr";a:2:{i:0;R:12222;i:1;R:801;}s:17:"8:gnt-ybtcntrgrkg";a:2:{i:0;R:12222;i:1;R:801;}s:18:"8:vzcbegserrvzntrf";a:2:{i:0;s:20:"ext-importfreeimages";i:1;R:801;}s:23:"8:vzcbegserrvzntrf-qrfp";a:2:{i:0;R:12252;i:1;R:801;}s:30:"8:vzcbegserrvzntrf_qrfpevcgvba";a:2:{i:0;R:12252;i:1;R:801;}s:32:"8:vzcbegserrvzntrf_abcubgbfsbhaq";a:2:{i:0;R:12252;i:1;R:801;}s:24:"8:vzcbegserrvzntrf_bjare";a:2:{i:0;R:12252;i:1;R:801;}s:29:"8:vzcbegserrvzntrf_vzcbegguvf";a:2:{i:0;R:12252;i:1;R:801;}s:23:"8:vzcbegserrvzntrf_arkg";a:2:{i:0;R:12252;i:1;R:801;}s:30:"8:vzcbegserrvzntrf_fvmr_fdhner";a:2:{i:0;R:12252;i:1;R:801;}s:33:"8:vzcbegserrvzntrf_fvmr_guhzoanvy";a:2:{i:0;R:12252;i:1;R:801;}s:29:"8:vzcbegserrvzntrf_fvmr_fznyy";a:2:{i:0;R:12252;i:1;R:801;}s:30:"8:vzcbegserrvzntrf_fvmr_zrqvhz";a:2:{i:0;R:12252;i:1;R:801;}s:29:"8:vzcbegserrvzntrf_fvmr_ynetr";a:2:{i:0;R:12252;i:1;R:801;}s:32:"8:vzcbegserrvzntrf_fvmr_bevtvany";a:2:{i:0;R:12252;i:1;R:801;}s:13:"8:vzcbeghfref";a:2:{i:0;s:15:"ext-importusers";i:1;R:801;}s:18:"8:vzcbeghfref-qrfp";a:2:{i:0;R:12266;i:1;R:801;}s:24:"8:vzcbeghfref-hcybnqsvyr";a:2:{i:0;R:12266;i:1;R:801;}s:26:"8:vzcbeghfref-sbez-pncgvba";a:2:{i:0;R:12266;i:1;R:801;}s:23:"8:vzcbeghfref-sbez-svyr";a:2:{i:0;R:12266;i:1;R:801;}s:34:"8:vzcbeghfref-sbez-ercynpr-cerfrag";a:2:{i:0;R:12266;i:1;R:801;}s:25:"8:vzcbeghfref-sbez-ohggba";a:2:{i:0;R:12266;i:1;R:801;}s:24:"8:vzcbeghfref-hfre-nqqrq";a:2:{i:0;R:12266;i:1;R:801;}s:33:"8:vzcbeghfref-hfre-cerfrag-hcqngr";a:2:{i:0;R:12266;i:1;R:801;}s:37:"8:vzcbeghfref-hfre-cerfrag-abg-hcqngr";a:2:{i:0;R:12266;i:1;R:801;}s:33:"8:vzcbeghfref-hfre-vainyvq-sbezng";a:2:{i:0;R:12266;i:1;R:801;}s:17:"8:vzcbeghfref-ybt";a:2:{i:0;R:12266;i:1;R:801;}s:25:"8:vzcbeghfref-ybt-fhzznel";a:2:{i:0;R:12266;i:1;R:801;}s:29:"8:vzcbeghfref-ybt-fhzznel-nyy";a:2:{i:0;R:12266;i:1;R:801;}s:31:"8:vzcbeghfref-ybt-fhzznel-nqqrq";a:2:{i:0;R:12266;i:1;R:801;}s:33:"8:vzcbeghfref-ybt-fhzznel-hcqngrq";a:2:{i:0;R:12266;i:1;R:801;}s:24:"8:vzcbeghfref-ybtva-anzr";a:2:{i:0;R:12266;i:1;R:801;}s:22:"8:vzcbeghfref-cnffjbeq";a:2:{i:0;R:12266;i:1;R:801;}s:19:"8:vzcbeghfref-rznvy";a:2:{i:0;R:12266;i:1;R:801;}s:22:"8:vzcbeghfref-ernyanzr";a:2:{i:0;R:12266;i:1;R:801;}s:20:"8:evtug-vzcbeg_hfref";a:2:{i:0;R:12266;i:1;R:801;}s:15:"8:vzfgnghf-qrfp";a:2:{i:0;s:12:"ext-imstatus";i:1;R:801;}s:17:"8:vzfgnghf_flagnk";a:2:{i:0;R:12288;i:1;R:801;}s:18:"8:vzfgnghf_qrsnhyg";a:2:{i:0;R:12288;i:1;R:801;}s:18:"8:vzfgnghf_rknzcyr";a:2:{i:0;R:12288;i:1;R:801;}s:23:"8:vzfgnghf_cbffvoyr_iny";a:2:{i:0;R:12288;i:1;R:801;}s:14:"8:vzfgnghf_znk";a:2:{i:0;R:12288;i:1;R:801;}s:14:"8:vzfgnghf_zva";a:2:{i:0;R:12288;i:1;R:801;}s:13:"8:vzfgnghf_be";a:2:{i:0;R:12288;i:1;R:801;}s:16:"8:vzfgnghf_fglyr";a:2:{i:0;R:12288;i:1;R:801;}s:17:"8:vzfgnghf_npgvba";a:2:{i:0;R:12288;i:1;R:801;}s:22:"8:vzfgnghf_qrgnvyf_fnn";a:2:{i:0;R:12288;i:1;R:801;}s:20:"8:vzfgnghf_lbhe_anzr";a:2:{i:0;R:12288;i:1;R:801;}s:23:"8:vzfgnghf_nvz_cerfrapr";a:2:{i:0;R:12288;i:1;R:801;}s:18:"8:vzfgnghf_nvz_ncv";a:2:{i:0;R:12288;i:1;R:801;}s:21:"8:vzfgnghf_tgnyx_pbqr";a:2:{i:0;R:12288;i:1;R:801;}s:25:"8:vzfgnghf_tgnyx_trg_pbqr";a:2:{i:0;R:12288;i:1;R:801;}s:23:"8:vzfgnghf_tgnyx_urvtug";a:2:{i:0;R:12288;i:1;R:801;}s:22:"8:vzfgnghf_tgnyx_jvqgu";a:2:{i:0;R:12288;i:1;R:801;}s:17:"8:vzfgnghf_vpd_vq";a:2:{i:0;R:12288;i:1;R:801;}s:20:"8:vzfgnghf_vpd_fglyr";a:2:{i:0;R:12288;i:1;R:801;}s:20:"8:vzfgnghf_yvir_pbqr";a:2:{i:0;R:12288;i:1;R:801;}s:24:"8:vzfgnghf_yvir_trg_pbqr";a:2:{i:0;R:12288;i:1;R:801;}s:24:"8:vzfgnghf_fxlcr_aofglyr";a:2:{i:0;R:12288;i:1;R:801;}s:21:"8:vzfgnghf_ksver_fvmr";a:2:{i:0;R:12288;i:1;R:801;}s:22:"8:vzfgnghf_lnubb_fglyr";a:2:{i:0;R:12288;i:1;R:801;}s:16:"8:vapyhqrjc-qrfp";a:2:{i:0;s:13:"ext-includewp";i:1;R:801;}s:24:"8:vapyhqrjc-ybnqvat-cntr";a:2:{i:0;R:12314;i:1;R:801;}s:26:"8:vapyhqrjc-fubj-shyy-cntr";a:2:{i:0;R:12314;i:1;R:801;}s:25:"8:vapyhqrjc-fubj-sentzrag";a:2:{i:0;R:12314;i:1;R:801;}s:26:"8:vapyhqrjc-ybnqvat-snvyrq";a:2:{i:0;R:12314;i:1;R:801;}s:26:"8:vapyhqrjc-yvprapr-abgvpr";a:2:{i:0;R:12314;i:1;R:801;}s:27:"8:vapyhqrjc-cnefreubbx-qrfp";a:2:{i:0;R:12314;i:1;R:801;}s:28:"8:vapyhqrjc-vapyhqr-cne-cntr";a:2:{i:0;R:12314;i:1;R:801;}s:28:"8:vapyhqrjc-vapyhqr-cne-jvxv";a:2:{i:0;R:12314;i:1;R:801;}s:34:"8:vapyhqrjc-vapyhqr-cne-cnentencuf";a:2:{i:0;R:12314;i:1;R:801;}s:30:"8:vapyhqrjc-vapyhqr-cne-urvtug";a:2:{i:0;R:12314;i:1;R:801;}s:16:"8:vaqrkshap-qrfp";a:2:{i:0;s:17:"ext-indexfunction";i:1;R:801;}s:20:"8:vaqrkshap-onqgvgyr";a:2:{i:0;R:12326;i:1;R:801;}s:23:"8:vaqrkshap-rqvgjneavat";a:2:{i:0;R:12326;i:1;R:801;}s:24:"8:vaqrkshap-vaqrk-rkvfgf";a:2:{i:0;R:12326;i:1;R:801;}s:20:"8:vaqrkshap-zbirjnea";a:2:{i:0;R:12326;i:1;R:801;}s:7:"8:vaqrk";a:2:{i:0;R:12326;i:1;R:801;}s:14:"8:vaqrk-yrtraq";a:2:{i:0;R:12326;i:1;R:801;}s:14:"8:vaqrk-frnepu";a:2:{i:0;R:12326;i:1;R:801;}s:14:"8:vaqrk-fhozvg";a:2:{i:0;R:12326;i:1;R:801;}s:22:"8:vaqrk-qvfnzovt-fgneg";a:2:{i:0;R:12326;i:1;R:801;}s:26:"8:vaqrk-rkpyhqr-pngrtbevrf";a:2:{i:0;R:12326;i:1;R:801;}s:17:"8:vaqrk-rzcglyvfg";a:2:{i:0;R:12326;i:1;R:801;}s:21:"8:vaqrk-rkcnaq-qrgnvy";a:2:{i:0;R:12326;i:1;R:801;}s:19:"8:vaqrk-uvqr-qrgnvy";a:2:{i:0;R:12326;i:1;R:801;}s:18:"8:vaqrk-ab-erfhygf";a:2:{i:0;R:12326;i:1;R:801;}s:22:"8:vaqrk-frnepu-rkcynva";a:2:{i:0;R:12326;i:1;R:801;}s:23:"8:vaqrk-qrgnvyf-rkcynva";a:2:{i:0;R:12326;i:1;R:801;}s:24:"8:vayvarpngrtbevmre-qrfp";a:2:{i:0;s:21:"ext-inlinecategorizer";i:1;R:801;}s:32:"8:vayvarpngrtbevmre-nqq-pngrtbel";a:2:{i:0;R:12344;i:1;R:801;}s:39:"8:vayvarpngrtbevmre-nqq-pngrtbel-fhozvg";a:2:{i:0;R:12344;i:1;R:801;}s:40:"8:vayvarpngrtbevmre-nqq-pngrtbel-fhzznel";a:2:{i:0;R:12344;i:1;R:801;}s:29:"8:vayvarpngrtbevmre-ncv-reebe";a:2:{i:0;R:12344;i:1;R:801;}s:37:"8:vayvarpngrtbevmre-ncv-haxabja-reebe";a:2:{i:0;R:12344;i:1;R:801;}s:26:"8:vayvarpngrtbevmre-pnapry";a:2:{i:0;R:12344;i:1;R:801;}s:30:"8:vayvarpngrtbevmre-pnapry-nyy";a:2:{i:0;R:12344;i:1;R:801;}s:44:"8:vayvarpngrtbevmre-pngrtbel-nyernql-cerfrag";a:2:{i:0;R:12344;i:1;R:801;}s:39:"8:vayvarpngrtbevmre-pngrtbel-ubbx-reebe";a:2:{i:0;R:12344;i:1;R:801;}s:37:"8:vayvarpngrtbevmre-pngrtbel-dhrfgvba";a:2:{i:0;R:12344;i:1;R:801;}s:30:"8:vayvarpngrtbevmre-pbasvez-bx";a:2:{i:0;R:12344;i:1;R:801;}s:32:"8:vayvarpngrtbevmre-pbasvez-fnir";a:2:{i:0;R:12344;i:1;R:801;}s:36:"8:vayvarpngrtbevmre-pbasvez-fnir-nyy";a:2:{i:0;R:12344;i:1;R:801;}s:33:"8:vayvarpngrtbevmre-pbasvez-gvgyr";a:2:{i:0;R:12344;i:1;R:801;}s:33:"8:vayvarpngrtbevmre-rqvg-pngrtbel";a:2:{i:0;R:12344;i:1;R:801;}s:39:"8:vayvarpngrtbevmre-rqvg-pngrtbel-reebe";a:2:{i:0;R:12344;i:1;R:801;}s:41:"8:vayvarpngrtbevmre-rqvg-pngrtbel-fhzznel";a:2:{i:0;R:12344;i:1;R:801;}s:31:"8:vayvarpngrtbevmre-reebe-gvgyr";a:2:{i:0;R:12344;i:1;R:801;}s:35:"8:vayvarpngrtbevmre-erzbir-pngrtbel";a:2:{i:0;R:12344;i:1;R:801;}s:41:"8:vayvarpngrtbevmre-erzbir-pngrtbel-reebe";a:2:{i:0;R:12344;i:1;R:801;}s:43:"8:vayvarpngrtbevmre-erzbir-pngrtbel-fhzznel";a:2:{i:0;R:12344;i:1;R:801;}s:14:"8:vafcrpgpnpur";a:2:{i:0;s:16:"ext-inspectcache";i:1;R:801;}s:19:"8:vafcrpgpnpur-qrfp";a:2:{i:0;R:12367;i:1;R:801;}s:22:"8:vafcrpgpnpur-trareny";a:2:{i:0;R:12367;i:1;R:801;}s:21:"8:vafcrpgpnpur-cnefre";a:2:{i:0;R:12367;i:1;R:801;}s:22:"8:vafcrpgpnpur-zrffntr";a:2:{i:0;R:12367;i:1;R:801;}s:18:"8:vafcrpgpnpur-trg";a:2:{i:0;R:12367;i:1;R:801;}s:21:"8:vafcrpgpnpur-qryrgr";a:2:{i:0;R:12367;i:1;R:801;}s:22:"8:vafcrpgpnpur-qryrgrq";a:2:{i:0;R:12367;i:1;R:801;}s:19:"8:vafcrpgpnpur-yvfg";a:2:{i:0;R:12367;i:1;R:801;}s:20:"8:evtug-vafcrpgpnpur";a:2:{i:0;R:12367;i:1;R:801;}s:30:"8:vagrenpgviroybpxzrffntr-qrfp";a:2:{i:0;s:27:"ext-interactiveblockmessage";i:1;R:801;}s:27:"8:vagresnprpbapheerapl-qrfp";a:2:{i:0;s:24:"ext-interfaceconcurrency";i:1;R:801;}s:20:"8:vagreynathntr-qrfp";a:2:{i:0;s:17:"ext-interlanguage";i:1;R:801;}s:36:"8:vagreynathntr-cntryvaxfrkcynangvba";a:2:{i:0;R:12382;i:1;R:801;}s:25:"8:vagreynathntr-rqvgyvaxf";a:2:{i:0;R:12382;i:1;R:801;}s:11:"8:vagrejvxv";a:2:{i:0;s:13:"ext-interwiki";i:1;R:801;}s:26:"8:vagrejvxv-gvgyr-abevtugf";a:2:{i:0;R:12386;i:1;R:801;}s:16:"8:vagrejvxv-qrfp";a:2:{i:0;R:12386;i:1;R:801;}s:17:"8:vagrejvxv_vageb";a:2:{i:0;R:12386;i:1;R:801;}s:18:"8:vagrejvxv_cersvk";a:2:{i:0;R:12386;i:1;R:801;}s:24:"8:vagrejvxv-cersvk-ynory";a:2:{i:0;R:12386;i:1;R:801;}s:24:"8:vagrejvxv_cersvk_vageb";a:2:{i:0;R:12386;i:1;R:801;}s:15:"8:vagrejvxv_hey";a:2:{i:0;R:12386;i:1;R:801;}s:21:"8:vagrejvxv-hey-ynory";a:2:{i:0;R:12386;i:1;R:801;}s:21:"8:vagrejvxv_hey_vageb";a:2:{i:0;R:12386;i:1;R:801;}s:17:"8:vagrejvxv_ybpny";a:2:{i:0;R:12386;i:1;R:801;}s:23:"8:vagrejvxv-ybpny-ynory";a:2:{i:0;R:12386;i:1;R:801;}s:23:"8:vagrejvxv_ybpny_vageb";a:2:{i:0;R:12386;i:1;R:801;}s:25:"8:vagrejvxv_ybpny_0_vageb";a:2:{i:0;R:12386;i:1;R:801;}s:25:"8:vagrejvxv_ybpny_1_vageb";a:2:{i:0;R:12386;i:1;R:801;}s:17:"8:vagrejvxv_genaf";a:2:{i:0;R:12386;i:1;R:801;}s:23:"8:vagrejvxv-genaf-ynory";a:2:{i:0;R:12386;i:1;R:801;}s:23:"8:vagrejvxv_genaf_vageb";a:2:{i:0;R:12386;i:1;R:801;}s:25:"8:vagrejvxv_genaf_1_vageb";a:2:{i:0;R:12386;i:1;R:801;}s:25:"8:vagrejvxv_genaf_0_vageb";a:2:{i:0;R:12386;i:1;R:801;}s:24:"8:vagrejvxv_vageb_sbbgre";a:2:{i:0;R:12386;i:1;R:801;}s:13:"8:vagrejvxv_1";a:2:{i:0;R:12386;i:1;R:801;}s:13:"8:vagrejvxv_0";a:2:{i:0;R:12386;i:1;R:801;}s:17:"8:vagrejvxv_reebe";a:2:{i:0;R:12386;i:1;R:801;}s:18:"8:vagrejvxv-pnpurq";a:2:{i:0;R:12386;i:1;R:801;}s:16:"8:vagrejvxv_rqvg";a:2:{i:0;R:12386;i:1;R:801;}s:23:"8:vagrejvxv_ernfbasvryq";a:2:{i:0;R:12386;i:1;R:801;}s:23:"8:vagrejvxv_qrydhrfgvba";a:2:{i:0;R:12386;i:1;R:801;}s:20:"8:vagrejvxv_qryrgvat";a:2:{i:0;R:12386;i:1;R:801;}s:19:"8:vagrejvxv_qryrgrq";a:2:{i:0;R:12386;i:1;R:801;}s:21:"8:vagrejvxv_qrysnvyrq";a:2:{i:0;R:12386;i:1;R:801;}s:19:"8:vagrejvxv_nqqgrkg";a:2:{i:0;R:12386;i:1;R:801;}s:20:"8:vagrejvxv_nqqvageb";a:2:{i:0;R:12386;i:1;R:801;}s:21:"8:vagrejvxv_nqqohggba";a:2:{i:0;R:12386;i:1;R:801;}s:17:"8:vagrejvxv_nqqrq";a:2:{i:0;R:12386;i:1;R:801;}s:21:"8:vagrejvxv_nqqsnvyrq";a:2:{i:0;R:12386;i:1;R:801;}s:22:"8:vagrejvxv-qrsnhyghey";a:2:{i:0;R:12386;i:1;R:801;}s:20:"8:vagrejvxv_rqvggrkg";a:2:{i:0;R:12386;i:1;R:801;}s:21:"8:vagrejvxv_rqvgvageb";a:2:{i:0;R:12386;i:1;R:801;}s:18:"8:vagrejvxv_rqvgrq";a:2:{i:0;R:12386;i:1;R:801;}s:21:"8:vagrejvxv_rqvgreebe";a:2:{i:0;R:12386;i:1;R:801;}s:21:"8:vagrejvxv-onqcersvk";a:2:{i:0;R:12386;i:1;R:801;}s:24:"8:vagrejvxv-fhozvg-rzcgl";a:2:{i:0;R:12386;i:1;R:801;}s:23:"8:vagrejvxv_ybtcntranzr";a:2:{i:0;R:12386;i:1;R:801;}s:27:"8:ybtragel-vagrejvxv-vj_nqq";a:2:{i:0;R:12386;i:1;R:801;}s:28:"8:ybtragel-vagrejvxv-vj_rqvg";a:2:{i:0;R:12386;i:1;R:801;}s:30:"8:ybtragel-vagrejvxv-vj_qryrgr";a:2:{i:0;R:12386;i:1;R:801;}s:23:"8:vagrejvxv_ybtcntrgrkg";a:2:{i:0;R:12386;i:1;R:801;}s:30:"8:ybtragel-vagrejvxv-vagrejvxv";a:2:{i:0;R:12386;i:1;R:801;}s:17:"8:evtug-vagrejvxv";a:2:{i:0;R:12386;i:1;R:801;}s:18:"8:npgvba-vagrejvxv";a:2:{i:0;R:12386;i:1;R:801;}s:15:"8:vagrejvxvyvfg";a:2:{i:0;s:17:"ext-interwikilist";i:1;R:801;}s:20:"8:vagrejvxvyvfg-qrfp";a:2:{i:0;R:12438;i:1;R:801;}s:24:"8:vagrejvxvyvfg-yvaxanzr";a:2:{i:0;R:12438;i:1;R:801;}s:22:"8:vagrejvxvyvfg-gnetrg";a:2:{i:0;R:12438;i:1;R:801;}s:22:"8:vagrejvxvyvfg-svygre";a:2:{i:0;R:12438;i:1;R:801;}s:22:"8:vagrejvxvyvfg-cersvk";a:2:{i:0;R:12438;i:1;R:801;}s:13:"8:vcnhgu-qrfp";a:2:{i:0;s:10:"ext-ipauth";i:1;R:801;}s:20:"8:wfoernqpehzof-qrfp";a:2:{i:0;s:17:"ext-jsbreadcrumbs";i:1;R:801;}s:25:"8:wfoernqpehzof-frcnengbe";a:2:{i:0;R:12447;i:1;R:801;}s:35:"8:wfoernqpehzof-yrnqvat-qrfpevcgvba";a:2:{i:0;R:12447;i:1;R:801;}s:21:"8:cersf-wfoernqpehzof";a:2:{i:0;R:12447;i:1;R:801;}s:30:"8:cersf-wfoernqpehzof-fubjfvgr";a:2:{i:0;R:12447;i:1;R:801;}s:32:"8:cersf-wfoernqpehzof-fubjpehzof";a:2:{i:0;R:12447;i:1;R:801;}s:36:"8:cersf-wfoernqpehzof-ahzorebspehzof";a:2:{i:0;R:12447;i:1;R:801;}s:40:"8:cersf-wfoernqpehzof-ahzorebspehzof-znk";a:2:{i:0;R:12447;i:1;R:801;}s:12:"8:wfxvg-qrfp";a:2:{i:0;s:9:"ext-jskit";i:1;R:801;}s:18:"8:ynathntrfryrpgbe";a:2:{i:0;s:20:"ext-languageselector";i:1;R:801;}s:23:"8:ynathntrfryrpgbe-qrfp";a:2:{i:0;R:12458;i:1;R:801;}s:26:"8:ynathntrfryrpgbe-frgynat";a:2:{i:0;R:12458;i:1;R:801;}s:19:"8:ynfgzbqvsvrq-qrfp";a:2:{i:0;s:16:"ext-lastmodified";i:1;R:801;}s:14:"8:ynfgzbqvsvrq";a:2:{i:0;R:12462;i:1;R:801;}s:28:"8:ynfgzbqvsvrq-ynory-frpbaqf";a:2:{i:0;R:12462;i:1;R:801;}s:28:"8:ynfgzbqvsvrq-ynory-zvahgrf";a:2:{i:0;R:12462;i:1;R:801;}s:26:"8:ynfgzbqvsvrq-ynory-ubhef";a:2:{i:0;R:12462;i:1;R:801;}s:25:"8:ynfgzbqvsvrq-ynory-qnlf";a:2:{i:0;R:12462;i:1;R:801;}s:27:"8:ynfgzbqvsvrq-ynory-zbaguf";a:2:{i:0;R:12462;i:1;R:801;}s:26:"8:ynfgzbqvsvrq-ynory-lrnef";a:2:{i:0;R:12462;i:1;R:801;}s:22:"8:ynfgzbqvsvrq-bcgvbaf";a:2:{i:0;R:12462;i:1;R:801;}s:22:"8:ynfgzbqvsvrq-qvfcynl";a:2:{i:0;R:12462;i:1;R:801;}s:34:"8:ynfgzbqvsvrq-qvfcynl-enatr-inyhr";a:2:{i:0;R:12462;i:1;R:801;}s:24:"8:ynfgzbqvsvrq-gvgyr-gnt";a:2:{i:0;R:12462;i:1;R:801;}s:22:"8:ynfgzbqvsvrq-frpbaqf";a:2:{i:0;R:12462;i:1;R:801;}s:22:"8:ynfgzbqvsvrq-zvahgrf";a:2:{i:0;R:12462;i:1;R:801;}s:20:"8:ynfgzbqvsvrq-ubhef";a:2:{i:0;R:12462;i:1;R:801;}s:19:"8:ynfgzbqvsvrq-qnlf";a:2:{i:0;R:12462;i:1;R:801;}s:21:"8:ynfgzbqvsvrq-zbaguf";a:2:{i:0;R:12462;i:1;R:801;}s:20:"8:ynfgzbqvsvrq-lrnef";a:2:{i:0;R:12462;i:1;R:801;}s:15:"8:ynfghfreybtva";a:2:{i:0;s:17:"ext-lastuserlogin";i:1;R:801;}s:20:"8:ynfghfreybtva-qrfp";a:2:{i:0;R:12481;i:1;R:801;}s:22:"8:ynfghfreybtva_hfrevq";a:2:{i:0;R:12481;i:1;R:801;}s:24:"8:ynfghfreybtva_hfreanzr";a:2:{i:0;R:12481;i:1;R:801;}s:25:"8:ynfghfreybtva_hfrerznvy";a:2:{i:0;R:12481;i:1;R:801;}s:25:"8:ynfghfreybtva_ynfgybtva";a:2:{i:0;R:12481;i:1;R:801;}s:23:"8:ynfghfreybtva_qnlfntb";a:2:{i:0;R:12481;i:1;R:801;}s:17:"8:evtug-ynfgybtva";a:2:{i:0;R:12481;i:1;R:801;}s:18:"8:yngrkqbp_ab_grkg";a:2:{i:0;s:12:"ext-latexdoc";i:1;R:801;}s:26:"8:yngrkqbp_pnag_perngr_qve";a:2:{i:0;R:12490;i:1;R:801;}s:21:"8:yngrkqbp_pnag_jevgr";a:2:{i:0;R:12490;i:1;R:801;}s:16:"8:yngrkqbp_reebe";a:2:{i:0;R:12490;i:1;R:801;}s:18:"8:yngrkqbp_trg_qiv";a:2:{i:0;R:12490;i:1;R:801;}s:18:"8:yngrkqbp_trg_cqs";a:2:{i:0;R:12490;i:1;R:801;}s:15:"8:yngrkqbp-qrfp";a:2:{i:0;R:12490;i:1;R:801;}s:12:"8:yvatb-qrfp";a:2:{i:0;s:9:"ext-lingo";i:1;R:801;}s:27:"8:yvatb-grezvabybtlcntranzr";a:2:{i:0;R:12498;i:1;R:801;}s:25:"8:yvatb-abgrezvabybtlcntr";a:2:{i:0;R:12498;i:1;R:801;}s:31:"8:yvatb-grezvabybtlcntrabgybpny";a:2:{i:0;R:12498;i:1;R:801;}s:17:"8:yvaxbcravq-qrfp";a:2:{i:0;s:14:"ext-linkopenid";i:1;R:801;}s:18:"8:yvaxbcravq-cersf";a:2:{i:0;R:12503;i:1;R:801;}s:26:"8:yvaxbcravq-cersfgrkg-cer";a:2:{i:0;R:12503;i:1;R:801;}s:29:"8:yvaxbcravq-cersfgrkg-bcravq";a:2:{i:0;R:12503;i:1;R:801;}s:28:"8:yvaxbcravq-cersfgrkg-i1hey";a:2:{i:0;R:12503;i:1;R:801;}s:28:"8:yvaxbcravq-cersfgrkg-i2hey";a:2:{i:0;R:12503;i:1;R:801;}s:30:"8:yvaxbcravq-cersfgrkg-keqfhey";a:2:{i:0;R:12503;i:1;R:801;}s:18:"8:yvaxfhttrfg-qrfp";a:2:{i:0;s:15:"ext-linksuggest";i:1;R:801;}s:24:"8:gbt-qvfnoyryvaxfhttrfg";a:2:{i:0;R:12511;i:1;R:801;}s:15:"8:yviryrgf-qrfp";a:2:{i:0;s:12:"ext-livelets";i:1;R:801;}s:20:"8:yvirgenafyngr-qrfp";a:2:{i:0;s:17:"ext-livetranslate";i:1;R:801;}s:17:"8:evtug-znantrgzf";a:2:{i:0;R:12516;i:1;R:801;}s:18:"8:npgvba-znantrgzf";a:2:{i:0;R:12516;i:1;R:801;}s:16:"8:tebhc-gzknqzva";a:2:{i:0;R:12516;i:1;R:801;}s:23:"8:tebhc-gzknqzva-zrzore";a:2:{i:0;R:12516;i:1;R:801;}s:20:"8:tebhccntr-gzknqzva";a:2:{i:0;R:12516;i:1;R:801;}s:20:"8:tebhc-gzknqzva.pff";a:2:{i:0;R:12516;i:1;R:801;}s:19:"8:tebhc-gzknqzva.wf";a:2:{i:0;R:12516;i:1;R:801;}s:28:"8:yvirgenafyngr-genafyngr-gb";a:2:{i:0;R:12516;i:1;R:801;}s:32:"8:yvirgenafyngr-ohggba-genafyngr";a:2:{i:0;R:12516;i:1;R:801;}s:34:"8:yvirgenafyngr-ohggba-genafyngvat";a:2:{i:0;R:12516;i:1;R:801;}s:29:"8:yvirgenafyngr-ohggba-erireg";a:2:{i:0;R:12516;i:1;R:801;}s:32:"8:yvirgenafyngr-qvpgvbanel-reebe";a:2:{i:0;R:12516;i:1;R:801;}s:32:"8:yvirgenafyngr-qvpgvbanel-rzcgl";a:2:{i:0;R:12516;i:1;R:801;}s:32:"8:yvirgenafyngr-qvpgvbanel-pbhag";a:2:{i:0;R:12516;i:1;R:801;}s:42:"8:yvirgenafyngr-qvpgvbanel-hanyybjrq-ynatf";a:2:{i:0;R:12516;i:1;R:801;}s:36:"8:yvirgenafyngr-qvpgvbanel-tbgb-rqvg";a:2:{i:0;R:12516;i:1;R:801;}s:23:"8:fcrpvny-yvirgenafyngr";a:2:{i:0;R:12516;i:1;R:801;}s:26:"8:yvirgenafyngr-gzglcr-ygs";a:2:{i:0;R:12516;i:1;R:801;}s:26:"8:yvirgenafyngr-gzglcr-gzk";a:2:{i:0;R:12516;i:1;R:801;}s:27:"8:yvirgenafyngr-gzglcr-tpfi";a:2:{i:0;R:12516;i:1;R:801;}s:34:"8:yvirgenafyngr-fcrpvny-ab-gzf-lrg";a:2:{i:0;R:12516;i:1;R:801;}s:30:"8:yvirgenafyngr-fcrpvny-ohggba";a:2:{i:0;R:12516;i:1;R:801;}s:28:"8:yvirgenafyngr-fcrpvny-glcr";a:2:{i:0;R:12516;i:1;R:801;}s:32:"8:yvirgenafyngr-fcrpvny-ybpngvba";a:2:{i:0;R:12516;i:1;R:801;}s:30:"8:yvirgenafyngr-fcrpvny-erzbir";a:2:{i:0;R:12516;i:1;R:801;}s:29:"8:yvirgenafyngr-fcrpvny-ybpny";a:2:{i:0;R:12516;i:1;R:801;}s:30:"8:yvirgenafyngr-fcrpvny-nqq-gz";a:2:{i:0;R:12516;i:1;R:801;}s:35:"8:yvirgenafyngr-fcrpvny-pheerag-gzf";a:2:{i:0;R:12516;i:1;R:801;}s:34:"8:yvirgenafyngr-fcrpvny-gzf-hcqngr";a:2:{i:0;R:12516;i:1;R:801;}s:30:"8:yvirgenafyngr-fcrpvny-hcqngr";a:2:{i:0;R:12516;i:1;R:801;}s:41:"8:yvirgenafyngr-vzcbeggzf-cnenz-zvfpzngpu";a:2:{i:0;R:12516;i:1;R:801;}s:25:"8:ybpnyvfngvbahcqngr-qrfp";a:2:{i:0;s:22:"ext-localisationupdate";i:1;R:801;}s:18:"8:ybpnywdhrel-qrfp";a:2:{i:0;s:15:"ext-localjquery";i:1;R:801;}s:15:"8:ybpxqbja-qrfp";a:2:{i:0;s:12:"ext-lockdown";i:1;R:801;}s:17:"8:ybtragel-nccraq";a:2:{i:0;s:12:"ext-logentry";i:1;R:801;}s:26:"8:ybtragel-cnefreubbx-qrfp";a:2:{i:0;R:12555;i:1;R:801;}s:27:"8:ybtragel-fcrpvnycntr-qrfp";a:2:{i:0;R:12555;i:1;R:801;}s:10:"8:ybtragel";a:2:{i:0;R:12555;i:1;R:801;}s:22:"8:ybtragel-vainyvqcntr";a:2:{i:0;R:12555;i:1;R:801;}s:23:"8:ybtragel-vainyvqgbxra";a:2:{i:0;R:12555;i:1;R:801;}s:20:"8:ybtbshapgvbaf-qrfp";a:2:{i:0;s:17:"ext-logofunctions";i:1;R:801;}s:28:"8:ybtbshapgvbaf-svyrabgrkvfg";a:2:{i:0;R:12562;i:1;R:801;}s:12:"8:ybbxhchfre";a:2:{i:0;s:14:"ext-lookupuser";i:1;R:801;}s:17:"8:ybbxhchfre-qrfp";a:2:{i:0;R:12565;i:1;R:801;}s:18:"8:ybbxhchfre-vageb";a:2:{i:0;R:12565;i:1;R:801;}s:24:"8:ybbxhchfre-abarkvfgrag";a:2:{i:0;R:12565;i:1;R:801;}s:26:"8:ybbxhchfre-nhguragvpngrq";a:2:{i:0;R:12565;i:1;R:801;}s:30:"8:ybbxhchfre-abg-nhguragvpngrq";a:2:{i:0;R:12565;i:1;R:801;}s:15:"8:ybbxhchfre-vq";a:2:{i:0;R:12565;i:1;R:801;}s:18:"8:ybbxhchfre-rznvy";a:2:{i:0;R:12565;i:1;R:801;}s:21:"8:ybbxhchfre-ab-rznvy";a:2:{i:0;R:12565;i:1;R:801;}s:21:"8:ybbxhchfre-ernyanzr";a:2:{i:0;R:12565;i:1;R:801;}s:25:"8:ybbxhchfre-ertvfgengvba";a:2:{i:0;R:12565;i:1;R:801;}s:28:"8:ybbxhchfre-ab-ertvfgengvba";a:2:{i:0;R:12565;i:1;R:801;}s:20:"8:ybbxhchfre-gbhpurq";a:2:{i:0;R:12565;i:1;R:801;}s:31:"8:ybbxhchfre-vasb-nhguragvpngrq";a:2:{i:0;R:12565;i:1;R:801;}s:24:"8:ybbxhchfre-hfrebcgvbaf";a:2:{i:0;R:12565;i:1;R:801;}s:27:"8:ybbxhchfre-sbhaqzberhfref";a:2:{i:0;R:12565;i:1;R:801;}s:18:"8:evtug-ybbxhchfre";a:2:{i:0;R:12565;i:1;R:801;}s:12:"8:ybbcf-qrfp";a:2:{i:0;s:9:"ext-loops";i:1;R:801;}s:11:"8:ybbcf_znk";a:2:{i:0;R:12583;i:1;R:801;}s:10:"8:yhn_qrfp";a:2:{i:0;s:7:"ext-lua";i:1;R:801;}s:11:"8:yhn_reebe";a:2:{i:0;R:12586;i:1;R:801;}s:24:"8:yhn_rkgrafvba_abgsbhaq";a:2:{i:0;R:12586;i:1;R:801;}s:21:"8:yhn_vagrec_abgsbhaq";a:2:{i:0;R:12586;i:1;R:801;}s:20:"8:yhn_reebe_vagreany";a:2:{i:0;R:12586;i:1;R:801;}s:24:"8:yhn_biresybj_erphefvba";a:2:{i:0;R:12586;i:1;R:801;}s:18:"8:yhn_biresybj_ybp";a:2:{i:0;R:12586;i:1;R:801;}s:19:"8:yhn_biresybj_gvzr";a:2:{i:0;R:12586;i:1;R:801;}s:30:"8:zntvpabahzorerqurnqvatf-qrfp";a:2:{i:0;s:27:"ext-magicnonumberedheadings";i:1;R:801;}s:13:"8:znvagranapr";a:2:{i:0;s:15:"ext-maintenance";i:1;R:801;}s:18:"8:znvagranapr-qrfp";a:2:{i:0;R:12597;i:1;R:801;}s:19:"8:evtug-znvagranapr";a:2:{i:0;R:12597;i:1;R:801;}s:22:"8:znvagranapr-onpxyvax";a:2:{i:0;R:12597;i:1;R:801;}s:20:"8:znvagranapr-urnqre";a:2:{i:0;R:12597;i:1;R:801;}s:26:"8:znvagranapr-reebe-onqvav";a:2:{i:0;R:12597;i:1;R:801;}s:31:"8:znvagranapr-reebe-vainyvqglcr";a:2:{i:0;R:12597;i:1;R:801;}s:27:"8:znvagranapr-reebe-onqnetf";a:2:{i:0;R:12597;i:1;R:801;}s:26:"8:znvagranapr-trarevp-qbar";a:2:{i:0;R:12597;i:1;R:801;}s:30:"8:znvagranapr-trarevp-hfreanzr";a:2:{i:0;R:12597;i:1;R:801;}s:30:"8:znvagranapr-trarevp-cnffjbeq";a:2:{i:0;R:12597;i:1;R:801;}s:28:"8:znvagranapr-trarevp-ernfba";a:2:{i:0;R:12597;i:1;R:801;}s:29:"8:znvagranapr-trarevp-abgenaf";a:2:{i:0;R:12597;i:1;R:801;}s:34:"8:znvagranapr-pyrnahcgnoyr-qel-eha";a:2:{i:0;R:12597;i:1;R:801;}s:32:"8:znvagranapr-pyrnahcgnoyr-purpx";a:2:{i:0;R:12597;i:1;R:801;}s:35:"8:znvagranapr-pyrnahcgnoyr-purpxsvk";a:2:{i:0;R:12597;i:1;R:801;}s:35:"8:znvagranapr-pyrnahcgnoyr-cebterff";a:2:{i:0;R:12597;i:1;R:801;}s:39:"8:znvagranapr-pyrnahcgnoyr-zvffvatcnenz";a:2:{i:0;R:12597;i:1;R:801;}s:37:"8:znvagranapr-pyrnahcgnoyr-cebprffvat";a:2:{i:0;R:12597;i:1;R:801;}s:35:"8:znvagranapr-pyrnahcgnoyr-svavfurq";a:2:{i:0;R:12597;i:1;R:801;}s:26:"8:znvagranapr-bcgvba-dhvrg";a:2:{i:0;R:12597;i:1;R:801;}s:28:"8:znvagranapr-bcgvba-tybonyf";a:2:{i:0;R:12597;i:1;R:801;}s:28:"8:znvagranapr-bcgvba-pbasvez";a:2:{i:0;R:12597;i:1;R:801;}s:31:"8:znvagranapr-bcgvba-ongpu-fvmr";a:2:{i:0;R:12597;i:1;R:801;}s:29:"8:znvagranapr-bcgvba-erdhverq";a:2:{i:0;R:12597;i:1;R:801;}s:29:"8:znvagranapr-bcgvba-bcgvbany";a:2:{i:0;R:12597;i:1;R:801;}s:28:"8:znvagranapr-bhgchg-fhpprff";a:2:{i:0;R:12597;i:1;R:801;}s:28:"8:znvagranapr-bhgchg-snvyher";a:2:{i:0;R:12597;i:1;R:801;}s:26:"8:znvagranapr-nggnpuyngrfg";a:2:{i:0;R:12597;i:1;R:801;}s:31:"8:znvagranapr-nggnpuyngrfg-qrfp";a:2:{i:0;R:12597;i:1;R:801;}s:37:"8:znvagranapr-nggnpuyngrfg-bcgvba-svk";a:2:{i:0;R:12597;i:1;R:801;}s:39:"8:znvagranapr-nggnpuyngrfg-bhgchg-ortva";a:2:{i:0;R:12597;i:1;R:801;}s:40:"8:znvagranapr-nggnpuyngrfg-bhgchg-abgvzr";a:2:{i:0;R:12597;i:1;R:801;}s:39:"8:znvagranapr-nggnpuyngrfg-bhgchg-aberi";a:2:{i:0;R:12597;i:1;R:801;}s:39:"8:znvagranapr-nggnpuyngrfg-bhgchg-sbhaq";a:2:{i:0;R:12597;i:1;R:801;}s:38:"8:znvagranapr-nggnpuyngrfg-bhgchg-qbar";a:2:{i:0;R:12597;i:1;R:801;}s:40:"8:znvagranapr-nggnpuyngrfg-bhgchg-qeleha";a:2:{i:0;R:12597;i:1;R:801;}s:28:"8:znvagranapr-orapuznexchetr";a:2:{i:0;R:12597;i:1;R:801;}s:33:"8:znvagranapr-orapuznexchetr-qrfp";a:2:{i:0;R:12597;i:1;R:801;}s:41:"8:znvagranapr-orapuznexchetr-bcgvba-pbhag";a:2:{i:0;R:12597;i:1;R:801;}s:42:"8:znvagranapr-orapuznexchetr-reebe-abfdhvq";a:2:{i:0;R:12597;i:1;R:801;}s:45:"8:znvagranapr-orapuznexchetr-bhgchg-ahzfdhvqf";a:2:{i:0;R:12597;i:1;R:801;}s:41:"8:znvagranapr-orapuznexchetr-bhgchg-gevny";a:2:{i:0;R:12597;i:1;R:801;}s:28:"8:znvagranapr-punatrcnffjbeq";a:2:{i:0;R:12597;i:1;R:801;}s:33:"8:znvagranapr-punatrcnffjbeq-qrfp";a:2:{i:0;R:12597;i:1;R:801;}s:40:"8:znvagranapr-punatrcnffjbeq-bcgvba-hfre";a:2:{i:0;R:12597;i:1;R:801;}s:44:"8:znvagranapr-punatrcnffjbeq-bcgvba-cnffjbeq";a:2:{i:0;R:12597;i:1;R:801;}s:41:"8:znvagranapr-punatrcnffjbeq-reebe-abhfre";a:2:{i:0;R:12597;i:1;R:801;}s:39:"8:znvagranapr-punatrcnffjbeq-bhgchg-frg";a:2:{i:0;R:12597;i:1;R:801;}s:29:"8:znvagranapr-purpxnhgbybnqre";a:2:{i:0;R:12597;i:1;R:801;}s:34:"8:znvagranapr-purpxnhgbybnqre-qrfp";a:2:{i:0;R:12597;i:1;R:801;}s:42:"8:znvagranapr-purpxnhgbybnqre-bhgchg-yvfg1";a:2:{i:0;R:12597;i:1;R:801;}s:42:"8:znvagranapr-purpxnhgbybnqre-bhgchg-yvfg2";a:2:{i:0;R:12597;i:1;R:801;}s:31:"8:znvagranapr-purpxonqerqverpgf";a:2:{i:0;R:12597;i:1;R:801;}s:36:"8:znvagranapr-purpxonqerqverpgf-qrfp";a:2:{i:0;R:12597;i:1;R:801;}s:45:"8:znvagranapr-purpxonqerqverpgf-bhgchg-urnqre";a:2:{i:0;R:12597;i:1;R:801;}s:44:"8:znvagranapr-purpxonqerqverpgf-bhgchg-sbhaq";a:2:{i:0;R:12597;i:1;R:801;}s:45:"8:znvagranapr-purpxonqerqverpgf-bhgchg-sbbgre";a:2:{i:0;R:12597;i:1;R:801;}s:25:"8:znvagranapr-purpxvzntrf";a:2:{i:0;R:12597;i:1;R:801;}s:30:"8:znvagranapr-purpxvzntrf-qrfp";a:2:{i:0;R:12597;i:1;R:801;}s:41:"8:znvagranapr-purpxvzntrf-bhgchg-abnpprff";a:2:{i:0;R:12597;i:1;R:801;}s:40:"8:znvagranapr-purpxvzntrf-bhgchg-zvffvat";a:2:{i:0;R:12597;i:1;R:801;}s:38:"8:znvagranapr-purpxvzntrf-bhgchg-vfqve";a:2:{i:0;R:12597;i:1;R:801;}s:42:"8:znvagranapr-purpxvzntrf-bhgchg-gehapngrq";a:2:{i:0;R:12597;i:1;R:801;}s:41:"8:znvagranapr-purpxvzntrf-bhgchg-zvfzngpu";a:2:{i:0;R:12597;i:1;R:801;}s:37:"8:znvagranapr-purpxvzntrf-bhgchg-tbbq";a:2:{i:0;R:12597;i:1;R:801;}s:25:"8:znvagranapr-purpxflagnk";a:2:{i:0;R:12597;i:1;R:801;}s:30:"8:znvagranapr-purpxflagnk-qrfp";a:2:{i:0;R:12597;i:1;R:801;}s:48:"8:znvagranapr-purpxflagnk-bcgvba-jvgu-rkgrafvbaf";a:2:{i:0;R:12597;i:1;R:801;}s:37:"8:znvagranapr-purpxflagnk-bcgvba-cngu";a:2:{i:0;R:12597;i:1;R:801;}s:42:"8:znvagranapr-purpxflagnk-bcgvba-yvfg-svyr";a:2:{i:0;R:12597;i:1;R:801;}s:41:"8:znvagranapr-purpxflagnk-bcgvba-zbqvsvrq";a:2:{i:0;R:12597;i:1;R:801;}s:44:"8:znvagranapr-purpxflagnk-bcgvba-flagnk-bayl";a:2:{i:0;R:12597;i:1;R:801;}s:41:"8:znvagranapr-purpxflagnk-bhgchg-cnefrxvg";a:2:{i:0;R:12597;i:1;R:801;}s:37:"8:znvagranapr-purpxflagnk-bhgchg-cucy";a:2:{i:0;R:12597;i:1;R:801;}s:39:"8:znvagranapr-purpxflagnk-bhgchg-sbbgre";a:2:{i:0;R:12597;i:1;R:801;}s:40:"8:znvagranapr-purpxflagnk-bhgchg-fiayvfg";a:2:{i:0;R:12597;i:1;R:801;}s:37:"8:znvagranapr-purpxflagnk-bhgchg-qbar";a:2:{i:0;R:12597;i:1;R:801;}s:42:"8:znvagranapr-purpxflagnk-bhgchg-ohvyqyvfg";a:2:{i:0;R:12597;i:1;R:801;}s:38:"8:znvagranapr-purpxflagnk-bhgchg-reebe";a:2:{i:0;R:12597;i:1;R:801;}s:40:"8:znvagranapr-purpxflagnk-bhgchg-jneavat";a:2:{i:0;R:12597;i:1;R:801;}s:38:"8:znvagranapr-purpxflagnk-reebe-absvyr";a:2:{i:0;R:12597;i:1;R:801;}s:40:"8:znvagranapr-purpxflagnk-reebe-pnagbcra";a:2:{i:0;R:12597;i:1;R:801;}s:38:"8:znvagranapr-purpxflagnk-reebe-fiaree";a:2:{i:0;R:12597;i:1;R:801;}s:28:"8:znvagranapr-purpxhfreanzrf";a:2:{i:0;R:12597;i:1;R:801;}s:33:"8:znvagranapr-purpxhfreanzrf-qrfp";a:2:{i:0;R:12597;i:1;R:801;}s:43:"8:znvagranapr-purpxhfreanzrf-reebe-abginyvq";a:2:{i:0;R:12597;i:1;R:801;}s:25:"8:znvagranapr-pyrnahcpncf";a:2:{i:0;R:12597;i:1;R:801;}s:30:"8:znvagranapr-pyrnahcpncf-qrfp";a:2:{i:0;R:12597;i:1;R:801;}s:40:"8:znvagranapr-pyrnahcpncf-bcgvba-qel-eha";a:2:{i:0;R:12597;i:1;R:801;}s:42:"8:znvagranapr-pyrnahcpncf-bcgvba-anzrfcnpr";a:2:{i:0;R:12597;i:1;R:801;}s:40:"8:znvagranapr-pyrnahcpncf-bhgchg-vfybjre";a:2:{i:0;R:12597;i:1;R:801;}s:38:"8:znvagranapr-pyrnahcpncf-bhgchg-pynfu";a:2:{i:0;R:12597;i:1;R:801;}s:39:"8:znvagranapr-pyrnahcpncf-bhgchg-qeleha";a:2:{i:0;R:12597;i:1;R:801;}s:38:"8:znvagranapr-pyrnahcpncf-bhgchg-zbirq";a:2:{i:0;R:12597;i:1;R:801;}s:38:"8:znvagranapr-pyrnahcpncf-bhgchg-purpx";a:2:{i:0;R:12597;i:1;R:801;}s:41:"8:znvagranapr-pyrnahcpncf-bhgchg-purpxsvk";a:2:{i:0;R:12597;i:1;R:801;}s:41:"8:znvagranapr-pyrnahcpncf-bhgchg-cebterff";a:2:{i:0;R:12597;i:1;R:801;}s:43:"8:znvagranapr-pyrnahcpncf-bhgchg-cebprffvat";a:2:{i:0;R:12597;i:1;R:801;}s:41:"8:znvagranapr-pyrnahcpncf-bhgchg-svavfurq";a:2:{i:0;R:12597;i:1;R:801;}s:44:"8:znvagranapr-pyrnahcpncf-reebe-zvffvatcnenz";a:2:{i:0;R:12597;i:1;R:801;}s:38:"8:znvagranapr-pyrnahcpncf-reebe-abarrq";a:2:{i:0;R:12597;i:1;R:801;}s:25:"8:znvagranapr-pyrnahcfcnz";a:2:{i:0;R:12597;i:1;R:801;}s:30:"8:znvagranapr-pyrnahcfcnz-qrfp";a:2:{i:0;R:12597;i:1;R:801;}s:41:"8:znvagranapr-pyrnahcfcnz-bcgvba-ubfganzr";a:2:{i:0;R:12597;i:1;R:801;}s:38:"8:znvagranapr-pyrnahcfcnz-bhgchg-sbhaq";a:2:{i:0;R:12597;i:1;R:801;}s:37:"8:znvagranapr-pyrnahcfcnz-bhgchg-qbar";a:2:{i:0;R:12597;i:1;R:801;}s:38:"8:znvagranapr-pyrnahcfcnz-bhgchg-snyfr";a:2:{i:0;R:12597;i:1;R:801;}s:41:"8:znvagranapr-pyrnahcfcnz-bhgchg-oynaxvat";a:2:{i:0;R:12597;i:1;R:801;}s:42:"8:znvagranapr-pyrnahcfcnz-bhgchg-eriregvat";a:2:{i:0;R:12597;i:1;R:801;}s:37:"8:znvagranapr-pyrnahcfcnz-bhgchg-cntr";a:2:{i:0;R:12597;i:1;R:801;}s:39:"8:znvagranapr-pyrnahcfcnz-reebe-vainyvq";a:2:{i:0;R:12597;i:1;R:801;}s:36:"8:znvagranapr-pyrnahcfcnz-reebe-abvq";a:2:{i:0;R:12597;i:1;R:801;}s:35:"8:znvagranapr-pyrne_vagrejvxv_pnpur";a:2:{i:0;R:12597;i:1;R:801;}s:40:"8:znvagranapr-pyrne_vagrejvxv_pnpur-qrfp";a:2:{i:0;R:12597;i:1;R:801;}s:40:"8:znvagranapr-pyrne_vagrejvxv_pnpur-qbar";a:2:{i:0;R:12597;i:1;R:801;}s:38:"8:znvagranapr-pyrne_vagrejvxv_pnpur-qo";a:2:{i:0;R:12597;i:1;R:801;}s:30:"8:znvagranapr-perngrnaqcebzbgr";a:2:{i:0;R:12597;i:1;R:801;}s:35:"8:znvagranapr-perngrnaqcebzbgr-qrfp";a:2:{i:0;R:12597;i:1;R:801;}s:48:"8:znvagranapr-perngrnaqcebzbgr-bcgvba-ohernhpeng";a:2:{i:0;R:12597;i:1;R:801;}s:46:"8:znvagranapr-perngrnaqcebzbgr-bcgvba-hfreanzr";a:2:{i:0;R:12597;i:1;R:801;}s:46:"8:znvagranapr-perngrnaqcebzbgr-bcgvba-cnffjbeq";a:2:{i:0;R:12597;i:1;R:801;}s:46:"8:znvagranapr-perngrnaqcebzbgr-bhgchg-perngvat";a:2:{i:0;R:12597;i:1;R:801;}s:42:"8:znvagranapr-perngrnaqcebzbgr-bhgchg-qbar";a:2:{i:0;R:12597;i:1;R:801;}s:44:"8:znvagranapr-perngrnaqcebzbgr-reebe-vainyvq";a:2:{i:0;R:12597;i:1;R:801;}s:43:"8:znvagranapr-perngrnaqcebzbgr-reebe-rkvfgf";a:2:{i:0;R:12597;i:1;R:801;}s:45:"8:znvagranapr-perngrnaqcebzbgr-reebe-cnffjbeq";a:2:{i:0;R:12597;i:1;R:801;}s:25:"8:znvagranapr-qryrgrongpu";a:2:{i:0;R:12597;i:1;R:801;}s:30:"8:znvagranapr-qryrgrongpu-qrfp";a:2:{i:0;R:12597;i:1;R:801;}s:28:"8:znvagranapr-qryrgrerivfvba";a:2:{i:0;R:12597;i:1;R:801;}s:33:"8:znvagranapr-qryrgrerivfvba-qrfp";a:2:{i:0;R:12597;i:1;R:801;}s:27:"8:znvagranapr-vavgrqvgpbhag";a:2:{i:0;R:12597;i:1;R:801;}s:32:"8:znvagranapr-vavgrqvgpbhag-qrfp";a:2:{i:0;R:12597;i:1;R:801;}s:23:"8:znvagranapr-vavgfgngf";a:2:{i:0;R:12597;i:1;R:801;}s:28:"8:znvagranapr-vavgfgngf-qrfp";a:2:{i:0;R:12597;i:1;R:801;}s:23:"8:znvagranapr-zbirongpu";a:2:{i:0;R:12597;i:1;R:801;}s:28:"8:znvagranapr-zbirongpu-qrfp";a:2:{i:0;R:12597;i:1;R:801;}s:32:"8:znvagranapr-ernffvtarqvgf-qrfp";a:2:{i:0;R:12597;i:1;R:801;}s:21:"8:znvagranapr-ehawbof";a:2:{i:0;R:12597;i:1;R:801;}s:26:"8:znvagranapr-ehawbof-qrfp";a:2:{i:0;R:12597;i:1;R:801;}s:36:"8:znvagranapr-ehawbof-bcgvba-znkwbof";a:2:{i:0;R:12597;i:1;R:801;}s:33:"8:znvagranapr-ehawbof-bcgvba-glcr";a:2:{i:0;R:12597;i:1;R:801;}s:34:"8:znvagranapr-ehawbof-bcgvba-cebpf";a:2:{i:0;R:12597;i:1;R:801;}s:38:"8:znvagranapr-ehawbof-bcgvba-rkpyhfvir";a:2:{i:0;R:12597;i:1;R:801;}s:32:"8:znvagranapr-ehawbof-bhgchg-wbo";a:2:{i:0;R:12597;i:1;R:801;}s:40:"8:znvagranapr-ehawbof-reebe-vainyvqcebpf";a:2:{i:0;R:12597;i:1;R:801;}s:22:"8:znvagranapr-fubjwbof";a:2:{i:0;R:12597;i:1;R:801;}s:27:"8:znvagranapr-fubjwbof-qrfp";a:2:{i:0;R:12597;i:1;R:801;}s:35:"8:znvagranapr-fubjwbof-bcgvba-tebhc";a:2:{i:0;R:12597;i:1;R:801;}s:33:"8:znvagranapr-fubjwbof-bhgchg-wbo";a:2:{i:0;R:12597;i:1;R:801;}s:17:"8:znvagranapr-fdy";a:2:{i:0;R:12597;i:1;R:801;}s:22:"8:znvagranapr-fdy-qrfp";a:2:{i:0;R:12597;i:1;R:801;}s:29:"8:znvagranapr-fdy-bcgvba-svyr";a:2:{i:0;R:12597;i:1;R:801;}s:28:"8:znvagranapr-fdy-bhgchg-ebj";a:2:{i:0;R:12597;i:1;R:801;}s:28:"8:znvagranapr-fdy-bhgchg-nss";a:2:{i:0;R:12597;i:1;R:801;}s:32:"8:znvagranapr-fdy-reebe-pnagbcra";a:2:{i:0;R:12597;i:1;R:801;}s:27:"8:znvagranapr-fdy-reebe-fdy";a:2:{i:0;R:12597;i:1;R:801;}s:19:"8:znvagranapr-fgngf";a:2:{i:0;R:12597;i:1;R:801;}s:24:"8:znvagranapr-fgngf-qrfp";a:2:{i:0;R:12597;i:1;R:801;}s:18:"8:znvagranapr-riny";a:2:{i:0;R:12597;i:1;R:801;}s:23:"8:znvagranapr-riny-qrfp";a:2:{i:0;R:12597;i:1;R:801;}s:20:"8:znvagranapr-hcqngr";a:2:{i:0;R:12597;i:1;R:801;}s:21:"8:znvagranapr-abivrjf";a:2:{i:0;R:12597;i:1;R:801;}s:25:"8:znvagranapr-vainyvqanzr";a:2:{i:0;R:12597;i:1;R:801;}s:24:"8:znvagranapr-hfrerkvfgf";a:2:{i:0;R:12597;i:1;R:801;}s:26:"8:znvagranapr-vainyvqgvgyr";a:2:{i:0;R:12597;i:1;R:801;}s:26:"8:znvagranapr-gvgyrabrkvfg";a:2:{i:0;R:12597;i:1;R:801;}s:20:"8:znvagranapr-snvyrq";a:2:{i:0;R:12597;i:1;R:801;}s:21:"8:znvagranapr-qryrgrq";a:2:{i:0;R:12597;i:1;R:801;}s:23:"8:znvagranapr-eriqryrgr";a:2:{i:0;R:12597;i:1;R:801;}s:25:"8:znvagranapr-eriabgsbhaq";a:2:{i:0;R:12597;i:1;R:801;}s:25:"8:znvagranapr-fgngf-rqvgf";a:2:{i:0;R:12597;i:1;R:801;}s:28:"8:znvagranapr-fgngf-negvpyrf";a:2:{i:0;R:12597;i:1;R:801;}s:25:"8:znvagranapr-fgngf-cntrf";a:2:{i:0;R:12597;i:1;R:801;}s:25:"8:znvagranapr-fgngf-hfref";a:2:{i:0;R:12597;i:1;R:801;}s:26:"8:znvagranapr-fgngf-nqzvaf";a:2:{i:0;R:12597;i:1;R:801;}s:26:"8:znvagranapr-fgngf-vzntrf";a:2:{i:0;R:12597;i:1;R:801;}s:25:"8:znvagranapr-fgngf-ivrjf";a:2:{i:0;R:12597;i:1;R:801;}s:26:"8:znvagranapr-fgngf-hcqngr";a:2:{i:0;R:12597;i:1;R:801;}s:18:"8:znvagranapr-zbir";a:2:{i:0;R:12597;i:1;R:801;}s:22:"8:znvagranapr-zbirsnvy";a:2:{i:0;R:12597;i:1;R:801;}s:19:"8:znvagranapr-reebe";a:2:{i:0;R:12597;i:1;R:801;}s:23:"8:znvagranapr-zrzp-snxr";a:2:{i:0;R:12597;i:1;R:801;}s:27:"8:znvagranapr-zrzp-erdhrfgf";a:2:{i:0;R:12597;i:1;R:801;}s:30:"8:znvagranapr-zrzp-jvgufrffvba";a:2:{i:0;R:12597;i:1;R:801;}s:33:"8:znvagranapr-zrzp-jvgubhgfrffvba";a:2:{i:0;R:12597;i:1;R:801;}s:24:"8:znvagranapr-zrzp-gbgny";a:2:{i:0;R:12597;i:1;R:801;}s:30:"8:znvagranapr-zrzp-cnefrepnpur";a:2:{i:0;R:12597;i:1;R:801;}s:23:"8:znvagranapr-zrzp-uvgf";a:2:{i:0;R:12597;i:1;R:801;}s:26:"8:znvagranapr-zrzp-vainyvq";a:2:{i:0;R:12597;i:1;R:801;}s:26:"8:znvagranapr-zrzp-rkcverq";a:2:{i:0;R:12597;i:1;R:801;}s:25:"8:znvagranapr-zrzp-nofrag";a:2:{i:0;R:12597;i:1;R:801;}s:23:"8:znvagranapr-zrzp-fgho";a:2:{i:0;R:12597;i:1;R:801;}s:29:"8:znvagranapr-zrzp-vzntrpnpur";a:2:{i:0;R:12597;i:1;R:801;}s:25:"8:znvagranapr-zrzp-zvffrf";a:2:{i:0;R:12597;i:1;R:801;}s:26:"8:znvagranapr-zrzp-hcqngrf";a:2:{i:0;R:12597;i:1;R:801;}s:30:"8:znvagranapr-zrzp-hapnpurnoyr";a:2:{i:0;R:12597;i:1;R:801;}s:28:"8:znvagranapr-zrzp-qvsspnpur";a:2:{i:0;R:12597;i:1;R:801;}s:27:"8:znvagranapr-ernffvtarqvgf";a:2:{i:0;R:12597;i:1;R:801;}s:21:"8:znvagranapr-er-sebz";a:2:{i:0;R:12597;i:1;R:801;}s:19:"8:znvagranapr-er-gb";a:2:{i:0;R:12597;i:1;R:801;}s:22:"8:znvagranapr-er-sbepr";a:2:{i:0;R:12597;i:1;R:801;}s:19:"8:znvagranapr-er-ep";a:2:{i:0;R:12597;i:1;R:801;}s:23:"8:znvagranapr-er-ercbeg";a:2:{i:0;R:12597;i:1;R:801;}s:19:"8:znvagranapr-er-as";a:2:{i:0;R:12597;i:1;R:801;}s:19:"8:znvagranapr-er-ee";a:2:{i:0;R:12597;i:1;R:801;}s:19:"8:znvagranapr-er-pr";a:2:{i:0;R:12597;i:1;R:801;}s:19:"8:znvagranapr-er-qr";a:2:{i:0;R:12597;i:1;R:801;}s:20:"8:znvagranapr-er-epr";a:2:{i:0;R:12597;i:1;R:801;}s:22:"8:znvagranapr-er-gbgny";a:2:{i:0;R:12597;i:1;R:801;}s:19:"8:znvagranapr-er-er";a:2:{i:0;R:12597;i:1;R:801;}s:11:"8:zncf-qrfp";a:2:{i:0;s:8:"ext-maps";i:1;R:801;}s:15:"8:evtug-trbpbqr";a:2:{i:0;R:12809;i:1;R:801;}s:10:"8:zncf_znc";a:2:{i:0;R:12809;i:1;R:801;}s:18:"8:zncf-ybnqvat-znc";a:2:{i:0;R:12809;i:1;R:801;}s:18:"8:zncf-ybnq-snvyrq";a:2:{i:0;R:12809;i:1;R:801;}s:14:"8:zncf-znexref";a:2:{i:0;R:12809;i:1;R:801;}s:24:"8:zncf-pbclpbbeqf-cebzcg";a:2:{i:0;R:12809;i:1;R:801;}s:36:"8:zncf-pyhfgrevat-hafhccbegrqfreivpr";a:2:{i:0;R:12809;i:1;R:801;}s:13:"8:zncf-bguref";a:2:{i:0;R:12809;i:1;R:801;}s:15:"8:zncf-af-ynlre";a:2:{i:0;R:12809;i:1;R:801;}s:20:"8:zncf-af-ynlre-gnyx";a:2:{i:0;R:12809;i:1;R:801;}s:21:"8:zncf-ynlre-cebcregl";a:2:{i:0;R:12809;i:1;R:801;}s:18:"8:zncf-ynlre-inyhr";a:2:{i:0;R:12809;i:1;R:801;}s:19:"8:zncf-ynlre-reebef";a:2:{i:0;R:12809;i:1;R:801;}s:29:"8:zncf-reebe-vainyvq-ynlreqrs";a:2:{i:0;R:12809;i:1;R:801;}s:30:"8:zncf-reebe-vainyvq-ynlreglcr";a:2:{i:0;R:12809;i:1;R:801;}s:25:"8:zncf-reebe-ab-ynlreglcr";a:2:{i:0;R:12809;i:1;R:801;}s:32:"8:inyvqngvba-reebe-vainyvq-ynlre";a:2:{i:0;R:12809;i:1;R:801;}s:33:"8:inyvqngvba-reebe-vainyvq-ynlref";a:2:{i:0;R:12809;i:1;R:801;}s:20:"8:zncf-ynlre-bs-glcr";a:2:{i:0;R:12809;i:1;R:801;}s:30:"8:zncf-ynlre-glcr-fhccbegrq-ol";a:2:{i:0;R:12809;i:1;R:801;}s:30:"8:zncf-pbbeqvangrf-qrfpevcgvba";a:2:{i:0;R:12809;i:1;R:801;}s:29:"8:zncf-qvfcynlznc-qrfpevcgvba";a:2:{i:0;R:12809;i:1;R:801;}s:31:"8:zncf-qvfcynlcbvag-qrfpevcgvba";a:2:{i:0;R:12809;i:1;R:801;}s:27:"8:zncf-qvfgnapr-qrfpevcgvba";a:2:{i:0;R:12809;i:1;R:801;}s:34:"8:zncf-svaqqrfgvangvba-qrfpevcgvba";a:2:{i:0;R:12809;i:1;R:801;}s:26:"8:zncf-trbpbqr-qrfpevcgvba";a:2:{i:0;R:12809;i:1;R:801;}s:30:"8:zncf-trbqvfgnapr-qrfpevcgvba";a:2:{i:0;R:12809;i:1;R:801;}s:26:"8:zncf-zncfqbp-qrfpevcgvba";a:2:{i:0;R:12809;i:1;R:801;}s:26:"8:zncf-zncfqbp-cne-freivpr";a:2:{i:0;R:12809;i:1;R:801;}s:27:"8:zncf-zncfqbp-cne-ynathntr";a:2:{i:0;R:12809;i:1;R:801;}s:31:"8:zncf-pbbeqvangrf-cne-ybpngvba";a:2:{i:0;R:12809;i:1;R:801;}s:29:"8:zncf-pbbeqvangrf-cne-sbezng";a:2:{i:0;R:12809;i:1;R:801;}s:34:"8:zncf-pbbeqvangrf-cne-qverpgvbany";a:2:{i:0;R:12809;i:1;R:801;}s:28:"8:zncf-qvfgnapr-cne-qvfgnapr";a:2:{i:0;R:12809;i:1;R:801;}s:28:"8:zncf-qvfgnapr-cne-qrpvznyf";a:2:{i:0;R:12809;i:1;R:801;}s:24:"8:zncf-qvfgnapr-cne-havg";a:2:{i:0;R:12809;i:1;R:801;}s:35:"8:zncf-svaqqrfgvangvba-cne-ybpngvba";a:2:{i:0;R:12809;i:1;R:801;}s:34:"8:zncf-svaqqrfgvangvba-cne-ornevat";a:2:{i:0;R:12809;i:1;R:801;}s:35:"8:zncf-svaqqrfgvangvba-cne-qvfgnapr";a:2:{i:0;R:12809;i:1;R:801;}s:33:"8:zncf-svaqqrfgvangvba-cne-sbezng";a:2:{i:0;R:12809;i:1;R:801;}s:38:"8:zncf-svaqqrfgvangvba-cne-qverpgvbany";a:2:{i:0;R:12809;i:1;R:801;}s:43:"8:zncf-svaqqrfgvangvba-cne-nyybjpbbeqvangrf";a:2:{i:0;R:12809;i:1;R:801;}s:37:"8:zncf-svaqqrfgvangvba-cne-trbfreivpr";a:2:{i:0;R:12809;i:1;R:801;}s:41:"8:zncf-svaqqrfgvangvba-cne-znccvatfreivpr";a:2:{i:0;R:12809;i:1;R:801;}s:27:"8:zncf-trbpbqr-cne-ybpngvba";a:2:{i:0;R:12809;i:1;R:801;}s:33:"8:zncf-trbpbqr-cne-znccvatfreivpr";a:2:{i:0;R:12809;i:1;R:801;}s:29:"8:zncf-trbpbqr-cne-trbfreivpr";a:2:{i:0;R:12809;i:1;R:801;}s:35:"8:zncf-trbpbqr-cne-nyybjpbbeqvangrf";a:2:{i:0;R:12809;i:1;R:801;}s:25:"8:zncf-trbpbqr-cne-sbezng";a:2:{i:0;R:12809;i:1;R:801;}s:30:"8:zncf-trbpbqr-cne-qverpgvbany";a:2:{i:0;R:12809;i:1;R:801;}s:32:"8:zncf-trbqvfgnapr-cne-ybpngvba1";a:2:{i:0;R:12809;i:1;R:801;}s:32:"8:zncf-trbqvfgnapr-cne-ybpngvba2";a:2:{i:0;R:12809;i:1;R:801;}s:27:"8:zncf-trbqvfgnapr-cne-havg";a:2:{i:0;R:12809;i:1;R:801;}s:31:"8:zncf-trbqvfgnapr-cne-qrpvznyf";a:2:{i:0;R:12809;i:1;R:801;}s:37:"8:zncf-trbqvfgnapr-cne-znccvatfreivpr";a:2:{i:0;R:12809;i:1;R:801;}s:33:"8:zncf-trbqvfgnapr-cne-trbfreivpr";a:2:{i:0;R:12809;i:1;R:801;}s:36:"8:zncf-qvfcynlznc-cne-znccvatfreivpr";a:2:{i:0;R:12809;i:1;R:801;}s:33:"8:zncf-qvfcynlznc-cne-pbbeqvangrf";a:2:{i:0;R:12809;i:1;R:801;}s:29:"8:zncf-qvfcynlcbvagf-cne-mbbz";a:2:{i:0;R:12809;i:1;R:801;}s:39:"8:zncf-qvfcynlcbvagf-cne-znccvatfreivpr";a:2:{i:0;R:12809;i:1;R:801;}s:36:"8:zncf-qvfcynlcbvagf-cne-pbbeqvangrf";a:2:{i:0;R:12809;i:1;R:801;}s:31:"8:zncf-qvfcynlcbvagf-cne-prager";a:2:{i:0;R:12809;i:1;R:801;}s:30:"8:zncf-qvfcynlcbvagf-cne-gvgyr";a:2:{i:0;R:12809;i:1;R:801;}s:30:"8:zncf-qvfcynlcbvagf-cne-ynory";a:2:{i:0;R:12809;i:1;R:801;}s:29:"8:zncf-qvfcynlcbvagf-cne-vpba";a:2:{i:0;R:12809;i:1;R:801;}s:35:"8:inyvqngvba-reebe-vainyvq-ybpngvba";a:2:{i:0;R:12809;i:1;R:801;}s:36:"8:inyvqngvba-reebe-vainyvq-ybpngvbaf";a:2:{i:0;R:12809;i:1;R:801;}s:32:"8:inyvqngvba-reebe-vainyvq-jvqgu";a:2:{i:0;R:12809;i:1;R:801;}s:33:"8:inyvqngvba-reebe-vainyvq-urvtug";a:2:{i:0;R:12809;i:1;R:801;}s:35:"8:inyvqngvba-reebe-vainyvq-qvfgnapr";a:2:{i:0;R:12809;i:1;R:801;}s:36:"8:inyvqngvba-reebe-vainyvq-qvfgnaprf";a:2:{i:0;R:12809;i:1;R:801;}s:32:"8:inyvqngvba-reebe-vainyvq-vzntr";a:2:{i:0;R:12809;i:1;R:801;}s:33:"8:inyvqngvba-reebe-vainyvq-vzntrf";a:2:{i:0;R:12809;i:1;R:801;}s:35:"8:inyvqngvba-reebe-vainyvq-tbireynl";a:2:{i:0;R:12809;i:1;R:801;}s:36:"8:inyvqngvba-reebe-vainyvq-tbireynlf";a:2:{i:0;R:12809;i:1;R:801;}s:37:"8:inyvqngvba-reebe-vainyvq-yvar-cnenz";a:2:{i:0;R:12809;i:1;R:801;}s:41:"8:inyvqngvba-reebe-vainyvq-cbylyvar-cnenz";a:2:{i:0;R:12809;i:1;R:801;}s:16:"8:zncf-noo-abegu";a:2:{i:0;R:12809;i:1;R:801;}s:15:"8:zncf-noo-rnfg";a:2:{i:0;R:12809;i:1;R:801;}s:16:"8:zncf-noo-fbhgu";a:2:{i:0;R:12809;i:1;R:801;}s:15:"8:zncf-noo-jrfg";a:2:{i:0;R:12809;i:1;R:801;}s:15:"8:zncf-yngvghqr";a:2:{i:0;R:12809;i:1;R:801;}s:16:"8:zncf-ybatvghqr";a:2:{i:0;R:12809;i:1;R:801;}s:26:"8:zncf-vainyvq-pbbeqvangrf";a:2:{i:0;R:12809;i:1;R:801;}s:26:"8:zncf_pbbeqvangrf_zvffvat";a:2:{i:0;R:12809;i:1;R:801;}s:23:"8:zncf_trbpbqvat_snvyrq";a:2:{i:0;R:12809;i:1;R:801;}s:27:"8:zncf_trbpbqvat_snvyrq_sbe";a:2:{i:0;R:12809;i:1;R:801;}s:26:"8:zncf_haerpbtavmrq_pbbeqf";a:2:{i:0;R:12809;i:1;R:801;}s:30:"8:zncf_haerpbtavmrq_pbbeqf_sbe";a:2:{i:0;R:12809;i:1;R:801;}s:30:"8:zncf_znc_pnaabg_or_qvfcynlrq";a:2:{i:0;R:12809;i:1;R:801;}s:29:"8:zncf-trbpbqre-abg-ninvynoyr";a:2:{i:0;R:12809;i:1;R:801;}s:18:"8:zncf_tbbtyrzncf2";a:2:{i:0;R:12809;i:1;R:801;}s:18:"8:zncf_tbbtyrzncf3";a:2:{i:0;R:12809;i:1;R:801;}s:16:"8:zncf_lnubbzncf";a:2:{i:0;R:12809;i:1;R:801;}s:17:"8:zncf_bcraynlref";a:2:{i:0;R:12809;i:1;R:801;}s:10:"8:zncf_bfz";a:2:{i:0;R:12809;i:1;R:801;}s:24:"8:zncf_pyvpx_gb_npgvingr";a:2:{i:0;R:12809;i:1;R:801;}s:17:"8:zncf_pragerq_ba";a:2:{i:0;R:12809;i:1;R:801;}s:20:"8:zncf-cne-erfvmnoyr";a:2:{i:0;R:12809;i:1;R:801;}s:21:"8:zncf-cne-trbfreivpr";a:2:{i:0;R:12809;i:1;R:801;}s:15:"8:zncf-cne-mbbz";a:2:{i:0;R:12809;i:1;R:801;}s:16:"8:zncf-cne-jvqgu";a:2:{i:0;R:12809;i:1;R:801;}s:17:"8:zncf-cne-urvtug";a:2:{i:0;R:12809;i:1;R:801;}s:34:"8:zncf-tbbtyrzncf2-vapbzcngoebjfre";a:2:{i:0;R:12809;i:1;R:801;}s:15:"8:zncf_bireynlf";a:2:{i:0;R:12809;i:1;R:801;}s:13:"8:zncf_cubgbf";a:2:{i:0;R:12809;i:1;R:801;}s:13:"8:zncf_ivqrbf";a:2:{i:0;R:12809;i:1;R:801;}s:16:"8:zncf_jvxvcrqvn";a:2:{i:0;R:12809;i:1;R:801;}s:14:"8:zncf_jropnzf";a:2:{i:0;R:12809;i:1;R:801;}s:27:"8:zncf-tbbtyrzncf2-cne-glcr";a:2:{i:0;R:12809;i:1;R:801;}s:28:"8:zncf-tbbtyrzncf2-cne-glcrf";a:2:{i:0;R:12809;i:1;R:801;}s:31:"8:zncf-tbbtyrzncf2-cne-pbagebyf";a:2:{i:0;R:12809;i:1;R:801;}s:31:"8:zncf-tbbtyrzncf2-cne-nhgbmbbz";a:2:{i:0;R:12809;i:1;R:801;}s:26:"8:zncf-tbbtyrzncf2-cne-xzy";a:2:{i:0;R:12809;i:1;R:801;}s:31:"8:zncf-tbbtyrzncf2-cne-bireynlf";a:2:{i:0;R:12809;i:1;R:801;}s:34:"8:zncf-tbbtyrzncf3-vapbzcngoebjfre";a:2:{i:0;R:12809;i:1;R:801;}s:27:"8:zncf-tbbtyrzncf3-cne-glcr";a:2:{i:0;R:12809;i:1;R:801;}s:28:"8:zncf-tbbtyrzncf3-cne-glcrf";a:2:{i:0;R:12809;i:1;R:801;}s:29:"8:zncf-tbbtyrzncf3-cne-ynlref";a:2:{i:0;R:12809;i:1;R:801;}s:31:"8:zncf-tbbtyrzncf3-cne-pbagebyf";a:2:{i:0;R:12809;i:1;R:801;}s:32:"8:zncf-tbbtyrzncf3-cne-mbbzfglyr";a:2:{i:0;R:12809;i:1;R:801;}s:32:"8:zncf-tbbtyrzncf3-cne-glcrfglyr";a:2:{i:0;R:12809;i:1;R:801;}s:38:"8:zncf-tbbtyrzncf3-cne-nhgbvasbjvaqbjf";a:2:{i:0;R:12809;i:1;R:801;}s:26:"8:zncf-tbbtyrzncf3-cne-xzy";a:2:{i:0;R:12809;i:1;R:801;}s:27:"8:zncf-tbbtyrzncf3-cne-txzy";a:2:{i:0;R:12809;i:1;R:801;}s:35:"8:zncf-tbbtyrzncf3-cne-shfvbagnoyrf";a:2:{i:0;R:12809;i:1;R:801;}s:27:"8:zncf-tbbtyrzncf3-cne-gvyg";a:2:{i:0;R:12809;i:1;R:801;}s:32:"8:zncf-tbbtyrzncf3-cne-xzyermbbz";a:2:{i:0;R:12809;i:1;R:801;}s:26:"8:zncf-tbbtyrzncf3-cne-cbv";a:2:{i:0;R:12809;i:1;R:801;}s:30:"8:zncf-bcraynlref-cne-pbagebyf";a:2:{i:0;R:12809;i:1;R:801;}s:28:"8:zncf-bcraynlref-cne-ynlref";a:2:{i:0;R:12809;i:1;R:801;}s:21:"8:zncf-bfz-cne-guhzof";a:2:{i:0;R:12809;i:1;R:801;}s:21:"8:zncf-bfz-cne-cubgbf";a:2:{i:0;R:12809;i:1;R:801;}s:25:"8:zncf-lnubbzncf-cne-glcr";a:2:{i:0;R:12809;i:1;R:801;}s:26:"8:zncf-lnubbzncf-cne-glcrf";a:2:{i:0;R:12809;i:1;R:801;}s:29:"8:zncf-lnubbzncf-cne-pbagebyf";a:2:{i:0;R:12809;i:1;R:801;}s:29:"8:zncf-lnubbzncf-cne-nhgbmbbz";a:2:{i:0;R:12809;i:1;R:801;}s:11:"8:znffoynax";a:2:{i:0;s:13:"ext-massblank";i:1;R:801;}s:16:"8:znffoynax-qrfp";a:2:{i:0;R:12948;i:1;R:801;}s:19:"8:znffoynax-abcntrf";a:2:{i:0;R:12948;i:1;R:801;}s:16:"8:znffoynax-yvfg";a:2:{i:0;R:12948;i:1;R:801;}s:25:"8:znffoynax-qrsnhygernfba";a:2:{i:0;R:12948;i:1;R:801;}s:17:"8:znffoynax-gbbyf";a:2:{i:0;R:12948;i:1;R:801;}s:23:"8:znffoynax-fhozvg-hfre";a:2:{i:0;R:12948;i:1;R:801;}s:24:"8:znffoynax-fhozvg-oynax";a:2:{i:0;R:12948;i:1;R:801;}s:24:"8:znffoynax-oynaxpbzzrag";a:2:{i:0;R:12948;i:1;R:801;}s:17:"8:evtug-znffoynax";a:2:{i:0;R:12948;i:1;R:801;}s:22:"8:npgvba-znffrqvgertrk";a:2:{i:0;s:17:"ext-masseditregex";i:1;R:801;}s:15:"8:znffrqvgertrk";a:2:{i:0;R:12959;i:1;R:801;}s:20:"8:znffrqvgertrk-qrfp";a:2:{i:0;R:12959;i:1;R:801;}s:19:"8:znffrqvgertrkgrkg";a:2:{i:0;R:12959;i:1;R:801;}s:27:"8:znffrqvgertrk-cntryvfggkg";a:2:{i:0;R:12959;i:1;R:801;}s:24:"8:znffrqvgertrk-zngpugkg";a:2:{i:0;R:12959;i:1;R:801;}s:26:"8:znffrqvgertrk-ercynprgkg";a:2:{i:0;R:12959;i:1;R:801;}s:26:"8:znffrqvgertrk-rkrphgroga";a:2:{i:0;R:12959;i:1;R:801;}s:27:"8:znffrqvgertrk-ree-abcntrf";a:2:{i:0;R:12959;i:1;R:801;}s:22:"8:znffrqvgertrk-orsber";a:2:{i:0;R:12959;i:1;R:801;}s:21:"8:znffrqvgertrk-nsgre";a:2:{i:0;R:12959;i:1;R:801;}s:33:"8:znffrqvgertrk-znk-cerivrj-qvssf";a:2:{i:0;R:12959;i:1;R:801;}s:27:"8:znffrqvgertrk-ahz-punatrf";a:2:{i:0;R:12959;i:1;R:801;}s:31:"8:znffrqvgertrk-cntr-abg-rkvfgf";a:2:{i:0;R:12959;i:1;R:801;}s:36:"8:znffrqvgertrk-ahz-negvpyrf-punatrq";a:2:{i:0;R:12959;i:1;R:801;}s:33:"8:znffrqvgertrk-ivrj-shyy-fhzznel";a:2:{i:0;R:12959;i:1;R:801;}s:26:"8:znffrqvgertrk-uvag-vageb";a:2:{i:0;R:12959;i:1;R:801;}s:30:"8:znffrqvgertrk-uvag-urnqzngpu";a:2:{i:0;R:12959;i:1;R:801;}s:32:"8:znffrqvgertrk-uvag-urnqercynpr";a:2:{i:0;R:12959;i:1;R:801;}s:31:"8:znffrqvgertrk-uvag-urnqrssrpg";a:2:{i:0;R:12959;i:1;R:801;}s:29:"8:znffrqvgertrk-uvag-gbnccraq";a:2:{i:0;R:12959;i:1;R:801;}s:27:"8:znffrqvgertrk-uvag-erzbir";a:2:{i:0;R:12959;i:1;R:801;}s:30:"8:znffrqvgertrk-uvag-erzbirpng";a:2:{i:0;R:12959;i:1;R:801;}s:30:"8:znffrqvgertrk-yvfgglcr-vageb";a:2:{i:0;R:12959;i:1;R:801;}s:34:"8:znffrqvgertrk-yvfgglcr-cntranzrf";a:2:{i:0;R:12959;i:1;R:801;}s:42:"8:znffrqvgertrk-yvfgglcr-cntranzr-cersvkrf";a:2:{i:0;R:12959;i:1;R:801;}s:35:"8:znffrqvgertrk-yvfgglcr-pngrtbevrf";a:2:{i:0;R:12959;i:1;R:801;}s:34:"8:znffrqvgertrk-yvfgglcr-onpxyvaxf";a:2:{i:0;R:12959;i:1;R:801;}s:31:"8:znffrqvgertrk-anzrfcnpr-vageb";a:2:{i:0;R:12959;i:1;R:801;}s:27:"8:znffrqvgertrk-rkceabzngpu";a:2:{i:0;R:12959;i:1;R:801;}s:24:"8:znffrqvgertrk-onqertrk";a:2:{i:0;R:12959;i:1;R:801;}s:26:"8:znffrqvgertrk-rqvgsnvyrq";a:2:{i:0;R:12959;i:1;R:801;}s:31:"8:znffrqvgertrk-gbbygvc-rkrphgr";a:2:{i:0;R:12959;i:1;R:801;}s:21:"8:evtug-znffrqvgertrk";a:2:{i:0;R:12959;i:1;R:801;}s:11:"8:zngu-qrfp";a:2:{i:0;R:800;i:1;R:801;}s:17:"8:zj_zngu_znguwnk";a:2:{i:0;R:800;i:1;R:801;}s:13:"8:zfshap_qrfp";a:2:{i:0;s:21:"ext-mathstatfunctions";i:1;R:801;}s:12:"8:zfshap_ana";a:2:{i:0;R:12996;i:1;R:801;}s:12:"8:zfshap_vas";a:2:{i:0;R:12996;i:1;R:801;}s:17:"8:zfshap_qvi_mreb";a:2:{i:0;R:12996;i:1;R:801;}s:21:"8:zrqvnshapgvbaf-qrfp";a:2:{i:0;s:18:"ext-mediafunctions";i:1;R:801;}s:30:"8:zrqvnshapgvbaf-vainyvq-gvgyr";a:2:{i:0;R:13001;i:1;R:801;}s:26:"8:zrqvnshapgvbaf-abg-rkvfg";a:2:{i:0;R:13001;i:1;R:801;}s:19:"8:zrgnqngnrqvg-qrfp";a:2:{i:0;s:16:"ext-metadataedit";i:1;R:801;}s:15:"8:zrgnqngn_uryc";a:2:{i:0;R:13005;i:1;R:801;}s:19:"8:zrgnxrljbeqf-qrfp";a:2:{i:0;s:16:"ext-metakeywords";i:1;R:801;}s:14:"8:zrgnxrljbeqf";a:2:{i:0;R:13008;i:1;R:801;}s:17:"8:zrgnqrfpevcgvba";a:2:{i:0;R:13008;i:1;R:801;}s:9:"8:zi-qrfp";a:2:{i:0;s:15:"ext-metavidwiki";i:1;R:801;}s:9:"8:zinqzva";a:2:{i:0;R:13012;i:1;R:801;}s:9:"8:zrgnivq";a:2:{i:0;R:13012;i:1;R:801;}s:19:"8:zi_zvffvat_fgernz";a:2:{i:0;R:13012;i:1;R:801;}s:29:"8:fcrpvnycntrf-tebhc-zi_tebhc";a:2:{i:0;R:13012;i:1;R:801;}s:17:"8:zi_jneavat_jvxv";a:2:{i:0;R:13012;i:1;R:801;}s:20:"8:zi_btt_ybj_dhnyvgl";a:2:{i:0;R:13012;i:1;R:801;}s:21:"8:zi_btt_uvtu_dhnyvgl";a:2:{i:0;R:13012;i:1;R:801;}s:22:"8:zi_synfu_ybj_dhnyvgl";a:2:{i:0;R:13012;i:1;R:801;}s:20:"8:zi_nepuvir_bet_zc4";a:2:{i:0;R:13012;i:1;R:801;}s:21:"8:zi_nepuvir_bet_yvax";a:2:{i:0;R:13012;i:1;R:801;}s:20:"8:nb_svyr_64xo_zcrt4";a:2:{i:0;R:13012;i:1;R:801;}s:21:"8:nb_svyr_256xo_zcrt4";a:2:{i:0;R:13012;i:1;R:801;}s:21:"8:nb_svyr_512xo_zcrt4";a:2:{i:0;R:13012;i:1;R:801;}s:15:"8:nb_svyr_zcrt1";a:2:{i:0;R:13012;i:1;R:801;}s:15:"8:nb_svyr_zcrt2";a:2:{i:0;R:13012;i:1;R:801;}s:19:"8:nb_svyr_synfu_syi";a:2:{i:0;R:13012;i:1;R:801;}s:19:"8:nb_svyr_btt_ivqrb";a:2:{i:0;R:13012;i:1;R:801;}s:25:"8:zi_reebe_fgernz_zvffvat";a:2:{i:0;R:13012;i:1;R:801;}s:17:"8:zi_fgernz_nqqrq";a:2:{i:0;R:13012;i:1;R:801;}s:16:"8:zi_fgernz_zrgn";a:2:{i:0;R:13012;i:1;R:801;}s:15:"8:zi_nqq_fgernz";a:2:{i:0;R:13012;i:1;R:801;}s:16:"8:zi_rqvg_fgernz";a:2:{i:0;R:13012;i:1;R:801;}s:16:"8:zirkcbegfrnepu";a:2:{i:0;R:13012;i:1;R:801;}s:18:"8:zirkcbegfrdhrapr";a:2:{i:0;R:13012;i:1;R:801;}s:16:"8:zirkcbegfgernz";a:2:{i:0;R:13012;i:1;R:801;}s:20:"8:zi_zbir_qryrgr_zft";a:2:{i:0;R:13012;i:1;R:801;}s:20:"8:zi_nqq_fgernz_cntr";a:2:{i:0;R:13012;i:1;R:801;}s:20:"8:zi_rqvg_fgern_qbph";a:2:{i:0;R:13012;i:1;R:801;}s:20:"8:zi_nqq_fgernz_qbph";a:2:{i:0;R:13012;i:1;R:801;}s:22:"8:zi_nqq_fgernz_fhozvg";a:2:{i:0;R:13012;i:1;R:801;}s:20:"8:zi_ab_fgernz_svyrf";a:2:{i:0;R:13012;i:1;R:801;}s:22:"8:zi_rqvg_fgernz_svyrf";a:2:{i:0;R:13012;i:1;R:801;}s:22:"8:zi_cngu_glcr_hey_nak";a:2:{i:0;R:13012;i:1;R:801;}s:25:"8:zi_cngu_glcr_jvxv_gvgyr";a:2:{i:0;R:13012;i:1;R:801;}s:23:"8:zi_cngu_glcr_hey_svyr";a:2:{i:0;R:13012;i:1;R:801;}s:25:"8:zi_cngu_glcr_zc4_fgernz";a:2:{i:0;R:13012;i:1;R:801;}s:20:"8:zi_cngu_glcr_ynory";a:2:{i:0;R:13012;i:1;R:801;}s:22:"8:zi_onfr_bssfrg_ynory";a:2:{i:0;R:13012;i:1;R:801;}s:19:"8:zi_qhengvba_ynory";a:2:{i:0;R:13012;i:1;R:801;}s:20:"8:zi_svyr_qrfp_ynory";a:2:{i:0;R:13012;i:1;R:801;}s:23:"8:zi_qryrgr_fgernz_svyr";a:2:{i:0;R:13012;i:1;R:801;}s:17:"8:zi_fnir_punatrf";a:2:{i:0;R:13012;i:1;R:801;}s:24:"8:zi_svyr_jvgu_fnzr_qrfp";a:2:{i:0;R:13012;i:1;R:801;}s:25:"8:zi_hcqngrq_fgernz_svyrf";a:2:{i:0;R:13012;i:1;R:801;}s:24:"8:zi_erzbirq_svyr_fgernz";a:2:{i:0;R:13012;i:1;R:801;}s:24:"8:zi_zvffvat_fgernz_grkg";a:2:{i:0;R:13012;i:1;R:801;}s:19:"8:zi_hfre_pnag_rqvg";a:2:{i:0;R:13012;i:1;R:801;}s:20:"8:zi_nqq_fgernz_svyr";a:2:{i:0;R:13012;i:1;R:801;}s:15:"8:zi_zrqvn_cngu";a:2:{i:0;R:13012;i:1;R:801;}s:14:"8:zi_svyr_yvfg";a:2:{i:0;R:13012;i:1;R:801;}s:22:"8:zi_ynory_fgernz_anzr";a:2:{i:0;R:13012;i:1;R:801;}s:22:"8:zi_ynory_fgernz_qrfp";a:2:{i:0;R:13012;i:1;R:801;}s:23:"8:nqq_fgernz_crezvffvba";a:2:{i:0;R:13012;i:1;R:801;}s:21:"8:rqvg_fgernz_zvffvat";a:2:{i:0;R:13012;i:1;R:801;}s:21:"8:zi_zvffvat_erd_gvzr";a:2:{i:0;R:13012;i:1;R:801;}s:16:"8:zi_zvffvat_png";a:2:{i:0;R:13012;i:1;R:801;}s:26:"8:zi_fgernz_nyernql_rkvfgf";a:2:{i:0;R:13012;i:1;R:801;}s:23:"8:zi_fhzznel_nqq_fgernz";a:2:{i:0;R:13012;i:1;R:801;}s:24:"8:zi_reebe_fgernz_vafreg";a:2:{i:0;R:13012;i:1;R:801;}s:31:"8:zi_erqverpg_naq_qryrgr_ernfba";a:2:{i:0;R:13012;i:1;R:801;}s:18:"8:zi_erzbir_ernfba";a:2:{i:0;R:13012;i:1;R:801;}s:27:"8:zi_fgernz_qryrgr_jneeavat";a:2:{i:0;R:13012;i:1;R:801;}s:22:"8:zi_ynory_fgernz_glcr";a:2:{i:0;R:13012;i:1;R:801;}s:17:"8:zi_zrgnivq_svyr";a:2:{i:0;R:13012;i:1;R:801;}s:17:"8:zi_zrgnivq_yvir";a:2:{i:0;R:13012;i:1;R:801;}s:16:"8:zi_hcybnq_svyr";a:2:{i:0;R:13012;i:1;R:801;}s:18:"8:zi_rkgreany_svyr";a:2:{i:0;R:13012;i:1;R:801;}s:16:"8:zi_gbby_frnepu";a:2:{i:0;R:13012;i:1;R:801;}s:22:"8:zi_gbby_frnepu_gvgyr";a:2:{i:0;R:13012;i:1;R:801;}s:27:"8:zi_frnepu_genafpevcgf_sbe";a:2:{i:0;R:13012;i:1;R:801;}s:18:"8:zi_gbby_anivtngr";a:2:{i:0;R:13012;i:1;R:801;}s:24:"8:zi_gbby_anivtngr_gvgyr";a:2:{i:0;R:13012;i:1;R:801;}s:16:"8:zi_gbby_rkcbeg";a:2:{i:0;R:13012;i:1;R:801;}s:22:"8:zi_gbby_rkcbeg_gvgyr";a:2:{i:0;R:13012;i:1;R:801;}s:15:"8:zi_gbby_rzorq";a:2:{i:0;R:13012;i:1;R:801;}s:21:"8:zi_gbby_rzorq_gvgyr";a:2:{i:0;R:13012;i:1;R:801;}s:17:"8:zi_gbby_bireynl";a:2:{i:0;R:13012;i:1;R:801;}s:23:"8:zi_gbby_bireynl_gvgyr";a:2:{i:0;R:13012;i:1;R:801;}s:18:"8:zi_erfhygf_sbhaq";a:2:{i:0;R:13012;i:1;R:801;}s:21:"8:zi_gbby_znat_ynlref";a:2:{i:0;R:13012;i:1;R:801;}s:18:"8:zi_hcqngr_ynlref";a:2:{i:0;R:13012;i:1;R:801;}s:15:"8:zi_jngpu_pyvc";a:2:{i:0;R:13012;i:1;R:801;}s:15:"8:zi_pybfr_pyvc";a:2:{i:0;R:13012;i:1;R:801;}s:23:"8:zi_vzcebir_genafpevcg";a:2:{i:0;R:13012;i:1;R:801;}s:19:"8:zi_crbcyr_zngpurf";a:2:{i:0;R:13012;i:1;R:801;}s:21:"8:zi_pngrtbel_zngpurf";a:2:{i:0;R:13012;i:1;R:801;}s:17:"8:zi_ovyy_zngpurf";a:2:{i:0;R:13012;i:1;R:801;}s:27:"8:zi_vagrerfg_tebhc_zngpurf";a:2:{i:0;R:13012;i:1;R:801;}s:18:"8:zi_pyvpx_gb_rqvg";a:2:{i:0;R:13012;i:1;R:801;}s:7:"8:ug_ra";a:2:{i:0;R:13012;i:1;R:801;}s:12:"8:ug_ra_qrfp";a:2:{i:0;R:13012;i:1;R:801;}s:9:"8:naab_ra";a:2:{i:0;R:13012;i:1;R:801;}s:14:"8:naab_ra_qrfp";a:2:{i:0;R:13012;i:1;R:801;}s:11:"8:gubznf_ra";a:2:{i:0;R:13012;i:1;R:801;}s:16:"8:gubznf_ra_qrfp";a:2:{i:0;R:13012;i:1;R:801;}s:22:"8:ziq_qrsnhyg_zvfzngpu";a:2:{i:0;R:13012;i:1;R:801;}s:27:"8:ziq_qrsnhyg_zvfzngpu_grkg";a:2:{i:0;R:13012;i:1;R:801;}s:20:"8:zi_qngn_cntr_gvgyr";a:2:{i:0;R:13012;i:1;R:801;}s:19:"8:zi_gvzr_frcnengbe";a:2:{i:0;R:13012;i:1;R:801;}s:17:"8:zi_yvfg_fgernzf";a:2:{i:0;R:13012;i:1;R:801;}s:22:"8:zi_yvfg_fgernzf_cntr";a:2:{i:0;R:13012;i:1;R:801;}s:22:"8:zi_yvfg_fgernzf_qbph";a:2:{i:0;R:13012;i:1;R:801;}s:22:"8:zi_yvfg_fgernzf_abar";a:2:{i:0;R:13012;i:1;R:801;}s:13:"8:ziivqrbsrrq";a:2:{i:0;R:13012;i:1;R:801;}s:13:"8:zirkcbegnfx";a:2:{i:0;R:13012;i:1;R:801;}s:16:"8:ivqrb_srrq_png";a:2:{i:0;R:13012;i:1;R:801;}s:20:"8:zi_png_frnepu_abgr";a:2:{i:0;R:13012;i:1;R:801;}s:25:"8:zi-pngrtbel-zrqvn-pbhag";a:2:{i:0;R:13012;i:1;R:801;}s:17:"8:zi_ziq_yvaxonpx";a:2:{i:0;R:13012;i:1;R:801;}s:15:"8:zionqziqgvgyr";a:2:{i:0;R:13012;i:1;R:801;}s:13:"8:ziziqsbezng";a:2:{i:0;R:13012;i:1;R:801;}s:9:"8:zi_cynl";a:2:{i:0;R:13012;i:1;R:801;}s:9:"8:zi_rqvg";a:2:{i:0;R:13012;i:1;R:801;}s:12:"8:zi_uvfgbel";a:2:{i:0;R:13012;i:1;R:801;}s:18:"8:zi_uvfgbel_gvgyr";a:2:{i:0;R:13012;i:1;R:801;}s:15:"8:zi_rqvg_gvgyr";a:2:{i:0;R:13012;i:1;R:801;}s:22:"8:zi_rqvg_nqwhfg_gvgyr";a:2:{i:0;R:13012;i:1;R:801;}s:11:"8:zi_erzbir";a:2:{i:0;R:13012;i:1;R:801;}s:17:"8:zi_erzbir_gvgyr";a:2:{i:0;R:13012;i:1;R:801;}s:11:"8:zi_nqwhfg";a:2:{i:0;R:13012;i:1;R:801;}s:18:"8:zi_nqwhfg_fhozvg";a:2:{i:0;R:13012;i:1;R:801;}s:17:"8:zi_nqwhfg_gvgyr";a:2:{i:0;R:13012;i:1;R:801;}s:19:"8:zi_nqwhfg_cerivrj";a:2:{i:0;R:13012;i:1;R:801;}s:24:"8:zi_nqwhfg_cerivrj_fgbc";a:2:{i:0;R:13012;i:1;R:801;}s:26:"8:zi_nqwhfg_qrsnhyg_ernfba";a:2:{i:0;R:13012;i:1;R:801;}s:29:"8:zi_nqwhfg_byq_gvgyr_zvffvat";a:2:{i:0;R:13012;i:1;R:801;}s:19:"8:zi_nqwhfg_bx_zbir";a:2:{i:0;R:13012;i:1;R:801;}s:15:"8:zi_fgneg_qrfp";a:2:{i:0;R:13012;i:1;R:801;}s:13:"8:zi_raq_qrfp";a:2:{i:0;R:13012;i:1;R:801;}s:18:"8:zi_rqvg_zrgnqngn";a:2:{i:0;R:13012;i:1;R:801;}s:18:"8:zi_nqinaprq_rqvg";a:2:{i:0;R:13012;i:1;R:801;}s:15:"8:zi_onfvp_rqvg";a:2:{i:0;R:13012;i:1;R:801;}s:20:"8:zi_erzbir_pngrtbel";a:2:{i:0;R:13012;i:1;R:801;}s:24:"8:zi_rkvfgvat_pngrtbevrf";a:2:{i:0;R:13012;i:1;R:801;}s:17:"8:zi_nqq_pngrtbel";a:2:{i:0;R:13012;i:1;R:801;}s:20:"8:zi_onfvp_grkg_qrfp";a:2:{i:0;R:13012;i:1;R:801;}s:13:"8:zi_ivrjarkg";a:2:{i:0;R:13012;i:1;R:801;}s:17:"8:zi_ivrjceriarkg";a:2:{i:0;R:13012;i:1;R:801;}s:13:"8:zrqvnfrnepu";a:2:{i:0;R:13012;i:1;R:801;}s:17:"8:zi_frnepu_fry_g";a:2:{i:0;R:13012;i:1;R:801;}s:20:"8:zi_qb_zrqvn_frnepu";a:2:{i:0;R:13012;i:1;R:801;}s:16:"8:zi_erfhygf_sbe";a:2:{i:0;R:13012;i:1;R:801;}s:17:"8:zi_ivqrb_frnepu";a:2:{i:0;R:13012;i:1;R:801;}s:16:"8:zi_cntr_frnepu";a:2:{i:0;R:13012;i:1;R:801;}s:15:"8:zi_nqq_svygre";a:2:{i:0;R:13012;i:1;R:801;}s:17:"8:zi_frnepu_zngpu";a:2:{i:0;R:13012;i:1;R:801;}s:21:"8:zi_frnepu_fcbxra_ol";a:2:{i:0;R:13012;i:1;R:801;}s:22:"8:zi_frnepu_pngrtbevrf";a:2:{i:0;R:13012;i:1;R:801;}s:17:"8:zi_frnepu_ovyyf";a:2:{i:0;R:13012;i:1;R:801;}s:16:"8:zi_frnepu_ovyy";a:2:{i:0;R:13012;i:1;R:801;}s:9:"8:zi_ovyy";a:2:{i:0;R:13012;i:1;R:801;}s:20:"8:zi_frnepu_pngrtbel";a:2:{i:0;R:13012;i:1;R:801;}s:24:"8:zi_frnepu_fzj_cebcregl";a:2:{i:0;R:13012;i:1;R:801;}s:32:"8:zi_frnepu_fzj_cebcregl_ahzrevp";a:2:{i:0;R:13012;i:1;R:801;}s:15:"8:zi_frnepu_naq";a:2:{i:0;R:13012;i:1;R:801;}s:14:"8:zi_frnepu_be";a:2:{i:0;R:13012;i:1;R:801;}s:15:"8:zi_frnepu_abg";a:2:{i:0;R:13012;i:1;R:801;}s:23:"8:zi_frnepu_fgernz_anzr";a:2:{i:0;R:13012;i:1;R:801;}s:22:"8:zi_frnepu_qngr_enatr";a:2:{i:0;R:13012;i:1;R:801;}s:16:"8:zi_fgernz_anzr";a:2:{i:0;R:13012;i:1;R:801;}s:15:"8:zi_qngr_enatr";a:2:{i:0;R:13012;i:1;R:801;}s:19:"8:zi_qngr_ynfg_jrrx";a:2:{i:0;R:13012;i:1;R:801;}s:21:"8:zi_pngrtbel_erfhygf";a:2:{i:0;R:13012;i:1;R:801;}s:19:"8:zi_crbcyr_erfhygf";a:2:{i:0;R:13012;i:1;R:801;}s:17:"8:zi_ovyy_erfhygf";a:2:{i:0;R:13012;i:1;R:801;}s:26:"8:zi_vagerfg_tebhc_erfhygf";a:2:{i:0;R:13012;i:1;R:801;}s:18:"8:zi_zbfg_eryrinag";a:2:{i:0;R:13012;i:1;R:801;}s:16:"8:zi_zbfg_erprag";a:2:{i:0;R:13012;i:1;R:801;}s:16:"8:zi_zbfg_ivrjrq";a:2:{i:0;R:13012;i:1;R:801;}s:14:"8:zi_fcbxra_ol";a:2:{i:0;R:13012;i:1;R:801;}s:14:"8:zi_fcrrpu_ol";a:2:{i:0;R:13012;i:1;R:801;}s:13:"8:zi_pngrtbel";a:2:{i:0;R:13012;i:1;R:801;}s:22:"8:zi_frnepu_ab_erfhygf";a:2:{i:0;R:13012;i:1;R:801;}s:18:"8:zi_zrqvn_zngpurf";a:2:{i:0;R:13012;i:1;R:801;}s:18:"8:zi_erzbir_svygre";a:2:{i:0;R:13012;i:1;R:801;}s:19:"8:zi_nqinprq_frnepu";a:2:{i:0;R:13012;i:1;R:801;}s:16:"8:zi_rkcnaq_cynl";a:2:{i:0;R:13012;i:1;R:801;}s:16:"8:zi_cynl_vayvar";a:2:{i:0;R:13012;i:1;R:801;}s:29:"8:zi_ivrj_va_fgernz_vagresnpr";a:2:{i:0;R:13012;i:1;R:801;}s:19:"8:zi_ivrj_jvxv_cntr";a:2:{i:0;R:13012;i:1;R:801;}s:24:"8:zi_reebe_ziq_abg_sbhaq";a:2:{i:0;R:13012;i:1;R:801;}s:18:"8:zi_rqvg_frdhrapr";a:2:{i:0;R:13012;i:1;R:801;}s:26:"8:zi_frdhrapr_cynlre_gvgyr";a:2:{i:0;R:13012;i:1;R:801;}s:23:"8:zi_erfbhepr_abg_sbhaq";a:2:{i:0;R:13012;i:1;R:801;}s:27:"8:zi_erfbhepr_abg_fhccbegrq";a:2:{i:0;R:13012;i:1;R:801;}s:21:"8:zi_erfbhepr_ybpngbe";a:2:{i:0;R:13012;i:1;R:801;}s:29:"8:zi_haxabja_pyvcobneq_npgvba";a:2:{i:0;R:13012;i:1;R:801;}s:17:"8:zi_zrqvn_frnepu";a:2:{i:0;R:13012;i:1;R:801;}s:19:"8:zi_rqvgbe_bcgvbaf";a:2:{i:0;R:13012;i:1;R:801;}s:16:"8:zi_rqvgbe_zbqr";a:2:{i:0;R:13012;i:1;R:801;}s:23:"8:zi_fvzcyr_rqvgbe_qrfp";a:2:{i:0;R:13012;i:1;R:801;}s:25:"8:zi_nqinaprq_rqvgbe_qrfp";a:2:{i:0;R:13012;i:1;R:801;}s:16:"8:zi_genafvgvbaf";a:2:{i:0;R:13012;i:1;R:801;}s:18:"8:zi_fnir_frdhrapr";a:2:{i:0;R:13012;i:1;R:801;}s:23:"8:zi_frdhrapr_cntr_qrfp";a:2:{i:0;R:13012;i:1;R:801;}s:17:"8:zi_frdhrapr_nqq";a:2:{i:0;R:13012;i:1;R:801;}s:24:"8:zi_frdhrapr_nqq_znahny";a:2:{i:0;R:13012;i:1;R:801;}s:29:"8:zi_frdhrapr_nqq_znahny_qrfp";a:2:{i:0;R:13012;i:1;R:801;}s:24:"8:zi_frdhrapr_nqq_frnepu";a:2:{i:0;R:13012;i:1;R:801;}s:29:"8:zi_frdhrapr_nqq_frnepu_qrfp";a:2:{i:0;R:13012;i:1;R:801;}s:16:"8:zi_frd_nqq_raq";a:2:{i:0;R:13012;i:1;R:801;}s:23:"8:zi_frdhrapr_rqvg_grkg";a:2:{i:0;R:13012;i:1;R:801;}s:32:"8:zi_frdhrapr_rqvg_ivfhny_rqvgbe";a:2:{i:0;R:13012;i:1;R:801;}s:18:"8:zi_bgure_bcgvbaf";a:2:{i:0;R:13012;i:1;R:801;}s:20:"8:zi_pbagrkgzrah_bcg";a:2:{i:0;R:13012;i:1;R:801;}s:9:"8:zi_qnlf";a:2:{i:0;R:13012;i:1;R:801;}s:10:"8:zi_ubhef";a:2:{i:0;R:13012;i:1;R:801;}s:19:"8:zi_ubhef_fvathyne";a:2:{i:0;R:13012;i:1;R:801;}s:12:"8:zi_zvahgrf";a:2:{i:0;R:13012;i:1;R:801;}s:21:"8:zi_zvahgrf_fvathyne";a:2:{i:0;R:13012;i:1;R:801;}s:12:"8:zi_frpbaqf";a:2:{i:0;R:13012;i:1;R:801;}s:21:"8:zi_frpbaqf_fvathyne";a:2:{i:0;R:13012;i:1;R:801;}s:18:"8:zi_fgernz_yratgu";a:2:{i:0;R:13012;i:1;R:801;}s:22:"8:zi_frdhrapr_gvzryvar";a:2:{i:0;R:13012;i:1;R:801;}s:28:"8:zi_rqvg_frdhrapr_qrfp_uryc";a:2:{i:0;R:13012;i:1;R:801;}s:21:"8:zi_rqvgurycfrdhrapr";a:2:{i:0;R:13012;i:1;R:801;}s:16:"8:zi_frd_fhzznel";a:2:{i:0;R:13012;i:1;R:801;}s:21:"8:zi_nqq_pyvc_ol_anzr";a:2:{i:0;R:13012;i:1;R:801;}s:27:"8:zi_fgernz_erfbhepr_rkcbeg";a:2:{i:0;R:13012;i:1;R:801;}s:16:"8:zi_rkcbeg_pzzy";a:2:{i:0;R:13012;i:1;R:801;}s:20:"8:zi_anivtngr_fgernz";a:2:{i:0;R:13012;i:1;R:801;}s:20:"8:zi_fgernz_bireivrj";a:2:{i:0;R:13012;i:1;R:801;}s:14:"8:zi_rqvg_gvzr";a:2:{i:0;R:13012;i:1;R:801;}s:18:"8:zi_rzorq_bcgvbaf";a:2:{i:0;R:13012;i:1;R:801;}s:12:"8:zi_bireynl";a:2:{i:0;R:13012;i:1;R:801;}s:24:"8:zi_fgernz_gbby_urnqvat";a:2:{i:0;R:13012;i:1;R:801;}s:17:"8:zi_gbby_zvffvat";a:2:{i:0;R:13012;i:1;R:801;}s:21:"8:zi_onq_gbby_erdhrfg";a:2:{i:0;R:13012;i:1;R:801;}s:16:"8:zi_ceri_fcrrpu";a:2:{i:0;R:13012;i:1;R:801;}s:16:"8:zi_arkg_fcrrpu";a:2:{i:0;R:13012;i:1;R:801;}s:14:"8:zi_ceri_ovyy";a:2:{i:0;R:13012;i:1;R:801;}s:14:"8:zi_arkg_ovyy";a:2:{i:0;R:13012;i:1;R:801;}s:13:"8:zi_ceri_png";a:2:{i:0;R:13012;i:1;R:801;}s:13:"8:zi_arkg_png";a:2:{i:0;R:13012;i:1;R:801;}s:18:"8:zi_frnepu_fgernz";a:2:{i:0;R:13012;i:1;R:801;}s:24:"8:zi_frnepu_fgernz_gvgyr";a:2:{i:0;R:13012;i:1;R:801;}s:14:"8:zi_arj_ug_ra";a:2:{i:0;R:13012;i:1;R:801;}s:16:"8:zi_arj_naab_ra";a:2:{i:0;R:13012;i:1;R:801;}s:16:"8:zi_znat_ynlref";a:2:{i:0;R:13012;i:1;R:801;}s:22:"8:zi_znat_ynlref_gvgyr";a:2:{i:0;R:13012;i:1;R:801;}s:28:"8:zi_cebgrpg_fbhepr_zngrevny";a:2:{i:0;R:13012;i:1;R:801;}s:21:"8:evtug-zi_qryrgr_ziq";a:2:{i:0;R:13012;i:1;R:801;}s:22:"8:npgvba-zi_qryrgr_ziq";a:2:{i:0;R:13012;i:1;R:801;}s:22:"8:evtug-zi_rqvg_fgernz";a:2:{i:0;R:13012;i:1;R:801;}s:14:"8:zvpebvq-qrfp";a:2:{i:0;s:11:"ext-microid";i:1;R:801;}s:13:"8:gbt-zvpebvq";a:2:{i:0;R:13258;i:1;R:801;}s:19:"8:qbangvbasbez-qrfp";a:2:{i:0;s:16:"ext-minidonation";i:1;R:801;}s:21:"8:qbangvbasbez-fhozvg";a:2:{i:0;R:13261;i:1;R:801;}s:21:"8:zvaanzryratgu-reebe";a:2:{i:0;s:21:"ext-minimumnamelength";i:1;R:801;}s:20:"8:zvaanzryratgu-qrfp";a:2:{i:0;R:13264;i:1;R:801;}s:18:"8:zvavcerivrj-qrfp";a:2:{i:0;s:15:"ext-minipreview";i:1;R:801;}s:31:"8:zvavcerivrj-svyrf_va_pngrtbel";a:2:{i:0;R:13267;i:1;R:801;}s:30:"8:zvavcerivrj-svyrf_va_tnyyrel";a:2:{i:0;R:13267;i:1;R:801;}s:32:"8:zvavcerivrj-ab_zber_svyrf_urer";a:2:{i:0;R:13267;i:1;R:801;}s:33:"8:zvavcerivrj-ab_pngrtbel_tnyyrel";a:2:{i:0;R:13267;i:1;R:801;}s:31:"8:zvavcerivrj-vtaber_pngrtbevrf";a:2:{i:0;R:13267;i:1;R:801;}s:13:"8:zveebegbbyf";a:2:{i:0;s:15:"ext-mirrortools";i:1;R:801;}s:18:"8:zveebegbbyf-qrfp";a:2:{i:0;R:13274;i:1;R:801;}s:18:"8:evtug-zveeberqvg";a:2:{i:0;R:13274;i:1;R:801;}s:19:"8:tebhc-zveebegbbyf";a:2:{i:0;R:13274;i:1;R:801;}s:26:"8:tebhc-zveebegbbyf-zrzore";a:2:{i:0;R:13274;i:1;R:801;}s:23:"8:tebhccntr-zveebegbbyf";a:2:{i:0;R:13274;i:1;R:801;}s:23:"8:tebhc-zveebegbbyf.pff";a:2:{i:0;R:13274;i:1;R:801;}s:22:"8:tebhc-zveebegbbyf.wf";a:2:{i:0;R:13274;i:1;R:801;}s:14:"8:zbfgerivfbef";a:2:{i:0;s:16:"ext-mostrevisors";i:1;R:801;}s:19:"8:zbfgerivfbef-qrfp";a:2:{i:0;R:13283;i:1;R:801;}s:21:"8:zbfgerivfbef-urnqre";a:2:{i:0;R:13283;i:1;R:801;}s:25:"8:zbfgerivfbef-yvzvgyvaxf";a:2:{i:0;R:13283;i:1;R:801;}s:24:"8:zbfgerivfbef-anzrfcnpr";a:2:{i:0;R:13283;i:1;R:801;}s:19:"8:zbfgerivfbef-abar";a:2:{i:0;R:13283;i:1;R:801;}s:24:"8:zbfgerivfbef-af-urnqre";a:2:{i:0;R:13283;i:1;R:801;}s:22:"8:zbfgerivfbef-fubjvat";a:2:{i:0;R:13283;i:1;R:801;}s:21:"8:zbfgerivfbef-fhozvg";a:2:{i:0;R:13283;i:1;R:801;}s:24:"8:zbfgerivfbef-fubjerqve";a:2:{i:0;R:13283;i:1;R:801;}s:24:"8:zbfgerivfbef-uvqrerqve";a:2:{i:0;R:13283;i:1;R:801;}s:20:"8:zbfgerivfbef-hfref";a:2:{i:0;R:13283;i:1;R:801;}s:31:"8:zbfgerivfbef-ivrjpbagevohgbef";a:2:{i:0;R:13283;i:1;R:801;}s:33:"8:zbfgerivfbef-yvzvg-srj-erivfbef";a:2:{i:0;R:13283;i:1;R:801;}s:18:"8:zhygvobvyrecyngr";a:2:{i:0;s:20:"ext-multiboilerplate";i:1;R:801;}s:23:"8:zhygvobvyrecyngr-qrfp";a:2:{i:0;R:13298;i:1;R:801;}s:24:"8:zhygvobvyrecyngr-ynory";a:2:{i:0;R:13298;i:1;R:801;}s:25:"8:zhygvobvyrecyngr-yrtraq";a:2:{i:0;R:13298;i:1;R:801;}s:25:"8:zhygvobvyrecyngr-fhozvg";a:2:{i:0;R:13298;i:1;R:801;}s:14:"8:obvyrecyngrf";a:2:{i:0;R:13298;i:1;R:801;}s:35:"8:zhygvobvyrecyngr-fcrpvny-cntrgrkg";a:2:{i:0;R:13298;i:1;R:801;}s:50:"8:zhygvobvyrecyngr-fcrpvny-qrsvar-va-ybpnyfrggvatf";a:2:{i:0;R:13298;i:1;R:801;}s:46:"8:zhygvobvyrecyngr-fcrpvny-qrsvar-va-vagresnpr";a:2:{i:0;R:13298;i:1;R:801;}s:16:"8:zhygvcyrhcybnq";a:2:{i:0;s:15:"ext-multiupload";i:1;R:801;}s:18:"8:zhygvhcybnq-qrfp";a:2:{i:0;R:13308;i:1;R:801;}s:34:"8:zhygvcyrhcybnq-vtabernyyjneavatf";a:2:{i:0;R:13308;i:1;R:801;}s:29:"8:zhygvcyrhcybnq-fnirnyysvyrf";a:2:{i:0;R:13308;i:1;R:801;}s:32:"8:zhygvcyrhcybnq-nqqerffjneavatf";a:2:{i:0;R:13308;i:1;R:801;}s:21:"8:zhygvcyrhcybnq-cntr";a:2:{i:0;R:13308;i:1;R:801;}s:21:"8:zhygvcyrhcybnq-grkg";a:2:{i:0;R:13308;i:1;R:801;}s:26:"8:zhygvhcybnq-svyrhcybnqrq";a:2:{i:0;R:13308;i:1;R:801;}s:21:"8:zhygvhcybnq-gbbyobk";a:2:{i:0;R:13308;i:1;R:801;}s:22:"8:zhygvhcybnq-ab-svyrf";a:2:{i:0;R:13308;i:1;R:801;}s:19:"8:zhygvhcybnq-oynax";a:2:{i:0;R:13308;i:1;R:801;}s:14:"8:zjrzorq-qrfp";a:2:{i:0;s:18:"ext-mwembedsupport";i:1;R:801;}s:13:"8:zjr-ybnqvat";a:2:{i:0;s:33:"ext-mwembedsupport-mwembedsupport";i:1;R:801;}s:20:"8:zjr-fvmr-tvtnolgrf";a:2:{i:0;R:13322;i:1;R:801;}s:20:"8:zjr-fvmr-zrtnolgrf";a:2:{i:0;R:13322;i:1;R:801;}s:20:"8:zjr-fvmr-xvybolgrf";a:2:{i:0;R:13322;i:1;R:801;}s:16:"8:zjr-fvmr-olgrf";a:2:{i:0;R:13322;i:1;R:801;}s:20:"8:zjr-reebe_ybnq_yvo";a:2:{i:0;R:13322;i:1;R:801;}s:20:"8:zjr-ncvcebkl-frghc";a:2:{i:0;R:13322;i:1;R:801;}s:20:"8:zjr-ybnq-qent-vgrz";a:2:{i:0;R:13322;i:1;R:801;}s:8:"8:zjr-bx";a:2:{i:0;R:13322;i:1;R:801;}s:12:"8:zjr-pnapry";a:2:{i:0;R:13322;i:1;R:801;}s:19:"8:zjr-ranoyr-tnqtrg";a:2:{i:0;R:13322;i:1;R:801;}s:24:"8:zjr-ranoyr-tnqtrg-qbar";a:2:{i:0;R:13322;i:1;R:801;}s:23:"8:zjr-zhfg-ybtva-tnqtrg";a:2:{i:0;R:13322;i:1;R:801;}s:17:"8:zjr-grfg-cyheny";a:2:{i:0;R:13322;i:1;R:801;}s:21:"8:anzrfcnprcnguf-qrfp";a:2:{i:0;s:18:"ext-namespacepaths";i:1;R:801;}s:10:"8:ayy-qrfp";a:2:{i:0;s:23:"ext-naturallanguagelist";i:1;R:801;}s:16:"8:ayy-vgrzbhgchg";a:2:{i:0;R:13339;i:1;R:801;}s:15:"8:ayy-frcnengbe";a:2:{i:0;R:13339;i:1;R:801;}s:19:"8:ayy-ynfgfrcnengbe";a:2:{i:0;R:13339;i:1;R:801;}s:23:"8:anivtngvbacbchcf-qrfp";a:2:{i:0;s:20:"ext-navigationpopups";i:1;R:801;}s:13:"8:arters-qrfp";a:2:{i:0;s:10:"ext-negref";i:1;R:801;}s:18:"8:argjbexnhgu-qrfp";a:2:{i:0;s:15:"ext-networkauth";i:1;R:801;}s:18:"8:argjbexnhgu-anzr";a:2:{i:0;R:13348;i:1;R:801;}s:22:"8:argjbexnhgu-cheygrkg";a:2:{i:0;R:13348;i:1;R:801;}s:13:"8:arjrfgcntrf";a:2:{i:0;s:15:"ext-newestpages";i:1;R:801;}s:18:"8:arjrfgcntrf-qrfp";a:2:{i:0;R:13352;i:1;R:801;}s:20:"8:arjrfgcntrf-urnqre";a:2:{i:0;R:13352;i:1;R:801;}s:24:"8:arjrfgcntrf-yvzvgyvaxf";a:2:{i:0;R:13352;i:1;R:801;}s:23:"8:arjrfgcntrf-anzrfcnpr";a:2:{i:0;R:13352;i:1;R:801;}s:18:"8:arjrfgcntrf-abar";a:2:{i:0;R:13352;i:1;R:801;}s:23:"8:arjrfgcntrf-af-urnqre";a:2:{i:0;R:13352;i:1;R:801;}s:21:"8:arjrfgcntrf-fubjvat";a:2:{i:0;R:13352;i:1;R:801;}s:20:"8:arjrfgcntrf-fhozvg";a:2:{i:0;R:13352;i:1;R:801;}s:23:"8:arjrfgcntrf-fubjerqve";a:2:{i:0;R:13352;i:1;R:801;}s:23:"8:arjrfgcntrf-uvqrerqve";a:2:{i:0;R:13352;i:1;R:801;}s:20:"8:arjfrkgrafvba-qrfp";a:2:{i:0;s:8:"ext-news";i:1;R:801;}s:13:"8:arjfpunaary";a:2:{i:0;s:15:"ext-newschannel";i:1;R:801;}s:18:"8:arjfpunaary-qrfp";a:2:{i:0;R:13366;i:1;R:801;}s:20:"8:arjfpunaary_sbezng";a:2:{i:0;R:13366;i:1;R:801;}s:19:"8:arjfpunaary_yvzvg";a:2:{i:0;R:13366;i:1;R:801;}s:30:"8:arjfpunaary_vapyhqr_pngrtbel";a:2:{i:0;R:13366;i:1;R:801;}s:30:"8:arjfpunaary_rkpyhqr_pngrtbel";a:2:{i:0;R:13366;i:1;R:801;}s:27:"8:arjfpunaary_fhozvg_ohggba";a:2:{i:0;R:13366;i:1;R:801;}s:18:"8:arjhfreabgvsfhow";a:2:{i:0;s:23:"ext-newusernotification";i:1;R:801;}s:19:"8:arjhfreabgvs-qrfp";a:2:{i:0;R:13374;i:1;R:801;}s:18:"8:arjhfreabgvsobql";a:2:{i:0;R:13374;i:1;R:801;}s:19:"8:arjhfrefyvfg-qrfp";a:2:{i:0;s:16:"ext-newuserslist";i:1;R:801;}s:11:"8:zberjvxvf";a:2:{i:0;s:10:"ext-nimbus";i:1;R:801;}s:13:"8:avzohf-qrfp";a:2:{i:0;R:13380;i:1;R:801;}s:18:"8:avzohf-nqiregvfr";a:2:{i:0;R:13380;i:1;R:801;}s:22:"8:avzohf-nqiregvfr-hey";a:2:{i:0;R:13380;i:1;R:801;}s:19:"8:avzohf-pbagevohgr";a:2:{i:0;R:13380;i:1;R:801;}s:19:"8:avzohf-qvqlbhxabj";a:2:{i:0;R:13380;i:1;R:801;}s:22:"8:avzohf-srngherqvzntr";a:2:{i:0;R:13380;i:1;R:801;}s:21:"8:avzohf-srngherqhfre";a:2:{i:0;R:13380;i:1;R:801;}s:14:"8:avzohf-ybtva";a:2:{i:0;R:13380;i:1;R:801;}s:15:"8:avzohf-ybtbhg";a:2:{i:0;R:13380;i:1;R:801;}s:21:"8:avzohf-zber-npgvbaf";a:2:{i:0;R:13380;i:1;R:801;}s:19:"8:avzohf-zber-jvxvf";a:2:{i:0;R:13380;i:1;R:801;}s:28:"8:avzohf-cntrf-pna-or-rqvgrq";a:2:{i:0;R:13380;i:1;R:801;}s:16:"8:avzohf-cebsvyr";a:2:{i:0;R:13380;i:1;R:801;}s:28:"8:avzohf-erprag-pbagevohgbef";a:2:{i:0;R:13380;i:1;R:801;}s:33:"8:avzohf-erprag-pbagevohgbef-vasb";a:2:{i:0;R:13380;i:1;R:801;}s:15:"8:avzohf-frnepu";a:2:{i:0;R:13380;i:1;R:801;}s:15:"8:avzohf-fvtahc";a:2:{i:0;R:13380;i:1;R:801;}s:16:"8:avzohf-jrypbzr";a:2:{i:0;R:13380;i:1;R:801;}s:23:"8:abobthfhfrecntrf-qrfp";a:2:{i:0;s:20:"ext-nobogususerpages";i:1;R:801;}s:25:"8:onqnpprff-obthfhfrecntr";a:2:{i:0;R:13400;i:1;R:801;}s:27:"8:evtug-perngrobthfhfrecntr";a:2:{i:0;R:13400;i:1;R:801;}s:13:"8:abgvsvpngbe";a:2:{i:0;s:15:"ext-notificator";i:1;R:801;}s:18:"8:abgvsvpngbe-qrfp";a:2:{i:0;R:13404;i:1;R:801;}s:37:"8:abgvsvpngbe-qo-gnoyr-qbrf-abg-rkvfg";a:2:{i:0;R:13404;i:1;R:801;}s:28:"8:abgvsvpngbe-r-znvy-nqqerff";a:2:{i:0;R:13404;i:1;R:801;}s:20:"8:abgvsvpngbe-abgvsl";a:2:{i:0;R:13404;i:1;R:801;}s:36:"8:abgvsvpngbe-abgvsl-nqqerff-be-anzr";a:2:{i:0;R:13404;i:1;R:801;}s:38:"8:abgvsvpngbe-erif-abg-sebz-fnzr-gvgyr";a:2:{i:0;R:13404;i:1;R:801;}s:23:"8:abgvsvpngbe-erghea-gb";a:2:{i:0;R:13404;i:1;R:801;}s:44:"8:abgvsvpngbe-fcrpvny-cntr-npprffrq-qverpgyl";a:2:{i:0;R:13404;i:1;R:801;}s:36:"8:abgvsvpngbe-r-znvy-nqqerff-vainyvq";a:2:{i:0;R:13404;i:1;R:801;}s:35:"8:abgvsvpngbe-abgvsvpngvba-abg-frag";a:2:{i:0;R:13404;i:1;R:801;}s:24:"8:abgvsvpngbe-punatr-gnt";a:2:{i:0;R:13404;i:1;R:801;}s:21:"8:abgvsvpngbe-arj-gnt";a:2:{i:0;R:13404;i:1;R:801;}s:39:"8:abgvsvpngbe-abgvsvpngvba-grkg-punatrf";a:2:{i:0;R:13404;i:1;R:801;}s:35:"8:abgvsvpngbe-abgvsvpngvba-grkg-arj";a:2:{i:0;R:13404;i:1;R:801;}s:38:"8:abgvsvpngbe-sbyybjvat-r-znvy-frag-gb";a:2:{i:0;R:13404;i:1;R:801;}s:21:"8:abgvsvpngbe-fhowrpg";a:2:{i:0;R:13404;i:1;R:801;}s:34:"8:abgvsvpngbe-reebe-fraqvat-r-znvy";a:2:{i:0;R:13404;i:1;R:801;}s:37:"8:abgvsvpngbe-reebe-cnenzrgre-zvffvat";a:2:{i:0;R:13404;i:1;R:801;}s:30:"8:abgvsvpngbe-abgvsvrq-nyernql";a:2:{i:0;R:13404;i:1;R:801;}s:17:"8:afsvyrercb-qrfp";a:2:{i:0;s:14:"ext-nsfilerepo";i:1;R:801;}s:16:"8:nppbhagznantre";a:2:{i:0;s:16:"ext-nssmysqlauth";i:1;R:801;}s:13:"8:nz-hfreanzr";a:2:{i:0;R:13427;i:1;R:801;}s:10:"8:nz-rznvy";a:2:{i:0;R:13427;i:1;R:801;}s:11:"8:nz-npgvir";a:2:{i:0;R:13427;i:1;R:801;}s:12:"8:nz-hcqngrq";a:2:{i:0;R:13427;i:1;R:801;}s:10:"8:aff-qrfp";a:2:{i:0;R:13427;i:1;R:801;}s:12:"8:aff-evtugf";a:2:{i:0;R:13427;i:1;R:801;}s:18:"8:aff-fnir-punatrf";a:2:{i:0;R:13427;i:1;R:801;}s:27:"8:aff-perngr-nppbhag-urnqre";a:2:{i:0;R:13427;i:1;R:801;}s:20:"8:aff-perngr-nppbhag";a:2:{i:0;R:13427;i:1;R:801;}s:13:"8:aff-ab-znvy";a:2:{i:0;R:13427;i:1;R:801;}s:18:"8:aff-jrypbzr-znvy";a:2:{i:0;R:13427;i:1;R:801;}s:26:"8:aff-jrypbzr-znvy-fhowrpg";a:2:{i:0;R:13427;i:1;R:801;}s:14:"8:aff-qo-reebe";a:2:{i:0;R:13427;i:1;R:801;}s:19:"8:bayvarfgnghf-qrfp";a:2:{i:0;s:16:"ext-onlinestatus";i:1;R:801;}s:22:"8:bayvarfgnghf-wf-naba";a:2:{i:0;R:13442;i:1;R:801;}s:25:"8:bayvarfgnghf-wf-punatrq";a:2:{i:0;R:13442;i:1;R:801;}s:23:"8:bayvarfgnghf-wf-reebe";a:2:{i:0;R:13442;i:1;R:801;}s:21:"8:bayvarfgnghf-yriryf";a:2:{i:0;R:13442;i:1;R:801;}s:31:"8:bayvarfgnghf-fhogvgyr-bssyvar";a:2:{i:0;R:13442;i:1;R:801;}s:30:"8:bayvarfgnghf-fhogvgyr-bayvar";a:2:{i:0;R:13442;i:1;R:801;}s:18:"8:bayvarfgnghf-gno";a:2:{i:0;R:13442;i:1;R:801;}s:27:"8:bayvarfgnghf-gbttyrf-qrfp";a:2:{i:0;R:13442;i:1;R:801;}s:30:"8:bayvarfgnghf-gbttyrf-rkcynva";a:2:{i:0;R:13442;i:1;R:801;}s:27:"8:bayvarfgnghf-gbttyrf-fubj";a:2:{i:0;R:13442;i:1;R:801;}s:29:"8:bayvarfgnghf-gbttyr-bssyvar";a:2:{i:0;R:13442;i:1;R:801;}s:28:"8:bayvarfgnghf-gbttyr-bayvar";a:2:{i:0;R:13442;i:1;R:801;}s:33:"8:bayvarfgnghf-cers-bayvarbaybtva";a:2:{i:0;R:13442;i:1;R:801;}s:35:"8:bayvarfgnghf-cers-bssyvarbaybtbhg";a:2:{i:0;R:13442;i:1;R:801;}s:22:"8:bayvarfgnghfone-qrfp";a:2:{i:0;s:19:"ext-onlinestatusbar";i:1;R:801;}s:22:"8:bayvarfgnghfone-yvar";a:2:{i:0;R:13458;i:1;R:801;}s:22:"8:bayvarfgnghfone-hfrq";a:2:{i:0;R:13458;i:1;R:801;}s:27:"8:bayvarfgnghfone-njnl-gvzr";a:2:{i:0;R:13458;i:1;R:801;}s:24:"8:bayvarfgnghfone-fgnghf";a:2:{i:0;R:13458;i:1;R:801;}s:22:"8:bayvarfgnghfone-njnl";a:2:{i:0;R:13458;i:1;R:801;}s:23:"8:bayvarfgnghfone-chetr";a:2:{i:0;R:13458;i:1;R:801;}s:20:"8:cersf-bayvarfgnghf";a:2:{i:0;R:13458;i:1;R:801;}s:22:"8:bayvarfgnghfone-uvqr";a:2:{i:0;R:13458;i:1;R:801;}s:31:"8:bayvarfgnghfone-fgnghf-bayvar";a:2:{i:0;R:13458;i:1;R:801;}s:29:"8:bayvarfgnghfone-fgnghf-ohfl";a:2:{i:0;R:13458;i:1;R:801;}s:29:"8:bayvarfgnghfone-fgnghf-njnl";a:2:{i:0;R:13458;i:1;R:801;}s:32:"8:bayvarfgnghfone-fgnghf-bssyvar";a:2:{i:0;R:13458;i:1;R:801;}s:31:"8:bayvarfgnghfone-fgnghf-hxabja";a:2:{i:0;R:13458;i:1;R:801;}s:31:"8:bayvarfgnghfone-fgnghf-uvqqra";a:2:{i:0;R:13458;i:1;R:801;}s:20:"8:bcratencuzrgn-qrfp";a:2:{i:0;s:17:"ext-opengraphmeta";i:1;R:801;}s:13:"8:bcravq-qrfp";a:2:{i:0;s:10:"ext-openid";i:1;R:801;}s:13:"8:bcravqybtva";a:2:{i:0;R:13476;i:1;R:801;}s:14:"8:bcravqfreire";a:2:{i:0;R:13476;i:1;R:801;}s:12:"8:bcravqkeqf";a:2:{i:0;R:13476;i:1;R:801;}s:15:"8:bcravqpbaireg";a:2:{i:0;R:13476;i:1;R:801;}s:13:"8:bcravqreebe";a:2:{i:0;R:13476;i:1;R:801;}s:17:"8:bcravqreebegrkg";a:2:{i:0;R:13476;i:1;R:801;}s:19:"8:bcravqpbasvtreebe";a:2:{i:0;R:13476;i:1;R:801;}s:23:"8:bcravqpbasvtreebegrkg";a:2:{i:0;R:13476;i:1;R:801;}s:18:"8:bcravqcrezvffvba";a:2:{i:0;R:13476;i:1;R:801;}s:22:"8:bcravqcrezvffvbagrkg";a:2:{i:0;R:13476;i:1;R:801;}s:14:"8:bcravqpnapry";a:2:{i:0;R:13476;i:1;R:801;}s:18:"8:bcravqpnaprygrkg";a:2:{i:0;R:13476;i:1;R:801;}s:15:"8:bcravqsnvyher";a:2:{i:0;R:13476;i:1;R:801;}s:19:"8:bcravqsnvyhergrkg";a:2:{i:0;R:13476;i:1;R:801;}s:15:"8:bcravqfhpprff";a:2:{i:0;R:13476;i:1;R:801;}s:19:"8:bcravqfhpprffgrkg";a:2:{i:0;R:13476;i:1;R:801;}s:22:"8:bcravqhfreanzrcersvk";a:2:{i:0;R:13476;i:1;R:801;}s:31:"8:bcravqfreireybtvavafgehpgvbaf";a:2:{i:0;R:13476;i:1;R:801;}s:25:"8:bcravqgehfgvafgehpgvbaf";a:2:{i:0;R:13476;i:1;R:801;}s:18:"8:bcravqnyybjgehfg";a:2:{i:0;R:13476;i:1;R:801;}s:16:"8:bcravqabcbyvpl";a:2:{i:0;R:13476;i:1;R:801;}s:14:"8:bcravqcbyvpl";a:2:{i:0;R:13476;i:1;R:801;}s:16:"8:bcravqbcgvbany";a:2:{i:0;R:13476;i:1;R:801;}s:16:"8:bcravqerdhverq";a:2:{i:0;R:13476;i:1;R:801;}s:16:"8:bcravqavpxanzr";a:2:{i:0;R:13476;i:1;R:801;}s:16:"8:bcravqshyyanzr";a:2:{i:0;R:13476;i:1;R:801;}s:13:"8:bcravqrznvy";a:2:{i:0;R:13476;i:1;R:801;}s:16:"8:bcravqynathntr";a:2:{i:0;R:13476;i:1;R:801;}s:16:"8:bcravqgvzrmbar";a:2:{i:0;R:13476;i:1;R:801;}s:20:"8:bcravqpubbfryrtraq";a:2:{i:0;R:13476;i:1;R:801;}s:26:"8:bcravqpubbfrvafgehpgvbaf";a:2:{i:0;R:13476;i:1;R:801;}s:18:"8:bcravqpubbfravpx";a:2:{i:0;R:13476;i:1;R:801;}s:18:"8:bcravqpubbfrshyy";a:2:{i:0;R:13476;i:1;R:801;}s:17:"8:bcravqpubbfrhey";a:2:{i:0;R:13476;i:1;R:801;}s:18:"8:bcravqpubbfrnhgb";a:2:{i:0;R:13476;i:1;R:801;}s:20:"8:bcravqpubbfrznahny";a:2:{i:0;R:13476;i:1;R:801;}s:22:"8:bcravqpubbfrrkvfgvat";a:2:{i:0;R:13476;i:1;R:801;}s:22:"8:bcravqpubbfrhfreanzr";a:2:{i:0;R:13476;i:1;R:801;}s:22:"8:bcravqpubbfrcnffjbeq";a:2:{i:0;R:13476;i:1;R:801;}s:27:"8:bcravqpbairegvafgehpgvbaf";a:2:{i:0;R:13476;i:1;R:801;}s:27:"8:bcravqpbairegbenqqzbervqf";a:2:{i:0;R:13476;i:1;R:801;}s:22:"8:bcravqpbairegfhpprff";a:2:{i:0;R:13476;i:1;R:801;}s:26:"8:bcravqpbairegfhpprffgrkg";a:2:{i:0;R:13476;i:1;R:801;}s:24:"8:bcravqpbaireglbhefgrkg";a:2:{i:0;R:13476;i:1;R:801;}s:24:"8:bcravqpbairegbguregrkg";a:2:{i:0;R:13476;i:1;R:801;}s:23:"8:bcravqnyernqlybttrqva";a:2:{i:0;R:13476;i:1;R:801;}s:27:"8:bcravqnyernqlybttrqvagrkg";a:2:{i:0;R:13476;i:1;R:801;}s:18:"8:bcravqabhfreanzr";a:2:{i:0;R:13476;i:1;R:801;}s:19:"8:bcravqonqhfreanzr";a:2:{i:0;R:13476;i:1;R:801;}s:18:"8:bcravqnhgbfhozvg";a:2:{i:0;R:13476;i:1;R:801;}s:22:"8:bcravqpyvragbaylgrkg";a:2:{i:0;R:13476;i:1;R:801;}s:18:"8:bcravqybtvaynory";a:2:{i:0;R:13476;i:1;R:801;}s:25:"8:bcravqybtvavafgehpgvbaf";a:2:{i:0;R:13476;i:1;R:801;}s:41:"8:bcravqybtvavafgehpgvbaf-bcravqybtvabayl";a:2:{i:0;R:13476;i:1;R:801;}s:46:"8:bcravqybtvavafgehpgvbaf-cnffjbeqybtvanyybjrq";a:2:{i:0;R:13476;i:1;R:801;}s:22:"8:bcravqhcqngrhfrevasb";a:2:{i:0;R:13476;i:1;R:801;}s:14:"8:bcravqqryrgr";a:2:{i:0;R:13476;i:1;R:801;}s:19:"8:bcravqqryrgr-grkg";a:2:{i:0;R:13476;i:1;R:801;}s:21:"8:bcravqqryrgr-ohggba";a:2:{i:0;R:13476;i:1;R:801;}s:29:"8:bcravqqryrgrreebeabcnffjbeq";a:2:{i:0;R:13476;i:1;R:801;}s:29:"8:bcravqqryrgrreebebcravqbayl";a:2:{i:0;R:13476;i:1;R:801;}s:21:"8:bcravqqryrgr-fhprff";a:2:{i:0;R:13476;i:1;R:801;}s:20:"8:bcravqqryrgr-reebe";a:2:{i:0;R:13476;i:1;R:801;}s:32:"8:bcravq-bcravqf-jrer-abg-zretrq";a:2:{i:0;R:13476;i:1;R:801;}s:14:"8:cersf-bcravq";a:2:{i:0;R:13476;i:1;R:801;}s:18:"8:bcravq-cersfgrkg";a:2:{i:0;R:13476;i:1;R:801;}s:18:"8:bcravq-cers-uvqr";a:2:{i:0;R:13476;i:1;R:801;}s:38:"8:bcravq-cers-hcqngr-hfrevasb-ba-ybtva";a:2:{i:0;R:13476;i:1;R:801;}s:18:"8:bcravq-heyf-qrfp";a:2:{i:0;R:13476;i:1;R:801;}s:17:"8:bcravq-heyf-hey";a:2:{i:0;R:13476;i:1;R:801;}s:20:"8:bcravq-heyf-npgvba";a:2:{i:0;R:13476;i:1;R:801;}s:26:"8:bcravq-heyf-ertvfgengvba";a:2:{i:0;R:13476;i:1;R:801;}s:36:"8:bcravq-heyf-ertvfgengvba-qngr-gvzr";a:2:{i:0;R:13476;i:1;R:801;}s:20:"8:bcravq-heyf-qryrgr";a:2:{i:0;R:13476;i:1;R:801;}s:16:"8:bcravq-nqq-hey";a:2:{i:0;R:13476;i:1;R:801;}s:32:"8:bcravq-ybtva-be-perngr-nppbhag";a:2:{i:0;R:13476;i:1;R:801;}s:30:"8:bcravq-cebivqre-ynory-bcravq";a:2:{i:0;R:13476;i:1;R:801;}s:30:"8:bcravq-cebivqre-ynory-tbbtyr";a:2:{i:0;R:13476;i:1;R:801;}s:29:"8:bcravq-cebivqre-ynory-lnubb";a:2:{i:0;R:13476;i:1;R:801;}s:27:"8:bcravq-cebivqre-ynory-nby";a:2:{i:0;R:13476;i:1;R:801;}s:38:"8:bcravq-cebivqre-ynory-bgure-hfreanzr";a:2:{i:0;R:13476;i:1;R:801;}s:27:"8:fcrpvnycntrf-tebhc-bcravq";a:2:{i:0;R:13476;i:1;R:801;}s:31:"8:evtug-bcravq-pbairegre-npprff";a:2:{i:0;R:13476;i:1;R:801;}s:31:"8:evtug-bcravq-qnfuobneq-npprff";a:2:{i:0;R:13476;i:1;R:801;}s:30:"8:evtug-bcravq-qnfuobneq-nqzva";a:2:{i:0;R:13476;i:1;R:801;}s:24:"8:bcravq-qnfuobneq-gvgyr";a:2:{i:0;R:13476;i:1;R:801;}s:30:"8:bcravq-qnfuobneq-gvgyr-nqzva";a:2:{i:0;R:13476;i:1;R:801;}s:31:"8:bcravq-qnfuobneq-vagebqhpgvba";a:2:{i:0;R:13476;i:1;R:801;}s:38:"8:bcravq-qnfuobneq-ahzore-bcravq-hfref";a:2:{i:0;R:13476;i:1;R:801;}s:45:"8:bcravq-qnfuobneq-ahzore-bcravqf-va-qngnonfr";a:2:{i:0;R:13476;i:1;R:801;}s:46:"8:bcravq-qnfuobneq-ahzore-hfref-jvgubhg-bcravq";a:2:{i:0;R:13476;i:1;R:801;}s:18:"8:benpyrgrkgfrnepu";a:2:{i:0;s:20:"ext-oracletextsearch";i:1;R:801;}s:23:"8:benpyrgrkgfrnepu-qrfp";a:2:{i:0;R:13569;i:1;R:801;}s:12:"8:bgurefvgrf";a:2:{i:0;s:14:"ext-othersites";i:1;R:801;}s:17:"8:bgurefvgrf-qrfp";a:2:{i:0;R:13572;i:1;R:801;}s:14:"8:cnpxntrsbepr";a:2:{i:0;s:16:"ext-packageforce";i:1;R:801;}s:19:"8:cnpxntrsbeprnqzva";a:2:{i:0;R:13575;i:1;R:801;}s:9:"8:cs-qrfp";a:2:{i:0;R:13575;i:1;R:801;}s:24:"8:cs-bayl-nqzvaf-nyybjrq";a:2:{i:0;R:13575;i:1;R:801;}s:23:"8:cs-nqzva-zrah-qrsnhyg";a:2:{i:0;R:13575;i:1;R:801;}s:33:"8:cs-nqzva-zrah-hafbegrqgrzcyngrf";a:2:{i:0;R:13575;i:1;R:801;}s:34:"8:cs-nqzva-yvax-ivrj-qbphzragngvba";a:2:{i:0;R:13575;i:1;R:801;}s:29:"8:cs-nqzva-yvax-rqvgyvax-cntr";a:2:{i:0;R:13575;i:1;R:801;}s:23:"8:cs-nqzva-yvax-nccebir";a:2:{i:0;R:13575;i:1;R:801;}s:25:"8:cs-urnqre-qbphzragngvba";a:2:{i:0;R:13575;i:1;R:801;}s:23:"8:cs-urnqre-va_cnpxntrf";a:2:{i:0;R:13575;i:1;R:801;}s:16:"8:cs-urnqre-rqvg";a:2:{i:0;R:13575;i:1;R:801;}s:16:"8:cs-urnqre-glcr";a:2:{i:0;R:13575;i:1;R:801;}s:22:"8:cs-urnqre-cntr_gvgyr";a:2:{i:0;R:13575;i:1;R:801;}s:19:"8:cs-urnqre-nccebir";a:2:{i:0;R:13575;i:1;R:801;}s:13:"8:cntrol-qrfp";a:2:{i:0;s:10:"ext-pageby";i:1;R:801;}s:14:"8:cntrol-svefg";a:2:{i:0;R:13591;i:1;R:801;}s:13:"8:cntrol-ynfg";a:2:{i:0;R:13591;i:1;R:801;}s:21:"8:cntrol-pbagevohgbef";a:2:{i:0;R:13591;i:1;R:801;}s:13:"8:cntrol-naba";a:2:{i:0;R:13591;i:1;R:801;}s:11:"8:gvss-qrfp";a:2:{i:0;s:20:"ext-pagedtiffhandler";i:1;R:801;}s:18:"8:gvss_ab_zrgnqngn";a:2:{i:0;R:13597;i:1;R:801;}s:17:"8:gvss_cntr_reebe";a:2:{i:0;R:13597;i:1;R:801;}s:27:"8:gvss_gbb_znal_rzorq_svyrf";a:2:{i:0;R:13597;i:1;R:801;}s:27:"8:gvss_fbheprsvyr_gbb_ynetr";a:2:{i:0;R:13597;i:1;R:801;}s:27:"8:gvss_gnetrgsvyr_gbb_ynetr";a:2:{i:0;R:13597;i:1;R:801;}s:21:"8:gvss_svyr_gbb_ynetr";a:2:{i:0;R:13597;i:1;R:801;}s:21:"8:gvss_bhg_bs_freivpr";a:2:{i:0;R:13597;i:1;R:801;}s:20:"8:gvss_gbb_zhpu_zrgn";a:2:{i:0;R:13597;i:1;R:801;}s:19:"8:gvss_reebe_pnpurq";a:2:{i:0;R:13597;i:1;R:801;}s:17:"8:gvss_fvmr_reebe";a:2:{i:0;R:13597;i:1;R:801;}s:22:"8:gvss_fpevcg_qrgrpgrq";a:2:{i:0;R:13597;i:1;R:801;}s:15:"8:gvss_onq_svyr";a:2:{i:0;R:13597;i:1;R:801;}s:21:"8:gvss-svyr-vasb-fvmr";a:2:{i:0;R:13597;i:1;R:801;}s:16:"8:cntrvapng-qrfp";a:2:{i:0;s:13:"ext-pageincat";i:1;R:801;}s:22:"8:cntrvapng-jebat-jnea";a:2:{i:0;R:13612;i:1;R:801;}s:27:"8:cntrvapng-irel-jebat-jnea";a:2:{i:0;R:13612;i:1;R:801;}s:22:"8:cntrbowrpgzbqry-qrfp";a:2:{i:0;s:19:"ext-pageobjectmodel";i:1;R:801;}s:9:"8:cf-qrfp";a:2:{i:0;s:15:"ext-pageschemas";i:1;R:801;}s:23:"8:cf-fpurzn-qrfpevcgvba";a:2:{i:0;R:13618;i:1;R:801;}s:15:"8:trarengrcntrf";a:2:{i:0;R:13618;i:1;R:801;}s:23:"8:cf-trarengrcntrf-qrfp";a:2:{i:0;R:13618;i:1;R:801;}s:26:"8:cf-trarengrcntrf-fhpprff";a:2:{i:0;R:13618;i:1;R:801;}s:27:"8:cf-trarengrcntrf-abfpurzn";a:2:{i:0;R:13618;i:1;R:801;}s:30:"8:cf-trarengrcntrf-rqvgfhzznel";a:2:{i:0;R:13618;i:1;R:801;}s:28:"8:cf-cntr-qrfp-png-abg-rkvfg";a:2:{i:0;R:13618;i:1;R:801;}s:27:"8:cf-cntr-qrfp-cf-abg-rkvfg";a:2:{i:0;R:13618;i:1;R:801;}s:26:"8:cf-cntr-qrfp-rqvg-fpurzn";a:2:{i:0;R:13618;i:1;R:801;}s:20:"8:cf-qryvzvgre-ynory";a:2:{i:0;R:13618;i:1;R:801;}s:24:"8:cf-zhygvcyr-grzc-ynory";a:2:{i:0;R:13618;i:1;R:801;}s:21:"8:cf-svryq-yvfg-ynory";a:2:{i:0;R:13618;i:1;R:801;}s:13:"8:cf-grzcyngr";a:2:{i:0;R:13618;i:1;R:801;}s:17:"8:cf-nqq-grzcyngr";a:2:{i:0;R:13618;i:1;R:801;}s:20:"8:cf-erzbir-grzcyngr";a:2:{i:0;R:13618;i:1;R:801;}s:10:"8:cf-svryq";a:2:{i:0;R:13618;i:1;R:801;}s:14:"8:cf-anzrynory";a:2:{i:0;R:13618;i:1;R:801;}s:17:"8:cf-qvfcynlynory";a:2:{i:0;R:13618;i:1;R:801;}s:14:"8:cf-nqq-svryq";a:2:{i:0;R:13618;i:1;R:801;}s:17:"8:cf-erzbir-svryq";a:2:{i:0;R:13618;i:1;R:801;}s:18:"8:cf-nqq-kzy-ynory";a:2:{i:0;R:13618;i:1;R:801;}s:18:"8:cf-bcgvbany-anzr";a:2:{i:0;R:13618;i:1;R:801;}s:12:"8:rqvgfpurzn";a:2:{i:0;R:13618;i:1;R:801;}s:14:"8:perngrfpurzn";a:2:{i:0;R:13618;i:1;R:801;}s:21:"8:evtug-trarengrcntrf";a:2:{i:0;R:13618;i:1;R:801;}s:22:"8:npgvba-trarengrcntrf";a:2:{i:0;R:13618;i:1;R:801;}s:16:"8:cnefresha-qrfp";a:2:{i:0;s:13:"ext-parserfun";i:1;R:801;}s:31:"8:cnefresha-vainyvq-pnyyre-zbqr";a:2:{i:0;R:13646;i:1;R:801;}s:17:"8:cnefrejvxv-qrfp";a:2:{i:0;s:14:"ext-parserwiki";i:1;R:801;}s:8:"8:cngeby";a:2:{i:0;s:13:"ext-patroller";i:1;R:801;}s:13:"8:cngeby-qrfp";a:2:{i:0;R:13651;i:1;R:801;}s:16:"8:cngeby-raqbefr";a:2:{i:0;R:13651;i:1;R:801;}s:15:"8:cngeby-erireg";a:2:{i:0;R:13651;i:1;R:801;}s:22:"8:cngeby-erireg-ernfba";a:2:{i:0;R:13651;i:1;R:801;}s:13:"8:cngeby-fxvc";a:2:{i:0;R:13651;i:1;R:801;}s:18:"8:cngeby-eriregvat";a:2:{i:0;R:13651;i:1;R:801;}s:18:"8:cngeby-abarsbhaq";a:2:{i:0;R:13651;i:1;R:801;}s:20:"8:cngeby-raqbefrq-bx";a:2:{i:0;R:13651;i:1;R:801;}s:24:"8:cngeby-raqbefrq-snvyrq";a:2:{i:0;R:13651;i:1;R:801;}s:20:"8:cngeby-eriregrq-bx";a:2:{i:0;R:13651;i:1;R:801;}s:24:"8:cngeby-eriregrq-snvyrq";a:2:{i:0;R:13651;i:1;R:801;}s:19:"8:cngeby-fxvccrq-bx";a:2:{i:0;R:13651;i:1;R:801;}s:16:"8:cngeby-ernfbaf";a:2:{i:0;R:13651;i:1;R:801;}s:16:"8:cngeby-nabgure";a:2:{i:0;R:13651;i:1;R:801;}s:16:"8:cngeby-fgbccrq";a:2:{i:0;R:13651;i:1;R:801;}s:15:"8:cngeby-erfhzr";a:2:{i:0;R:13651;i:1;R:801;}s:17:"8:tebhc-cngebyyre";a:2:{i:0;R:13651;i:1;R:801;}s:24:"8:tebhc-cngebyyre-zrzore";a:2:{i:0;R:13651;i:1;R:801;}s:21:"8:tebhccntr-cngebyyre";a:2:{i:0;R:13651;i:1;R:801;}s:17:"8:evtug-cngebyyre";a:2:{i:0;R:13651;i:1;R:801;}s:21:"8:tebhc-cngebyyre.pff";a:2:{i:0;R:13651;i:1;R:801;}s:20:"8:tebhc-cngebyyre.wf";a:2:{i:0;R:13651;i:1;R:801;}s:16:"8:cqsobbx-npgvba";a:2:{i:0;s:11:"ext-pdfbook";i:1;R:801;}s:13:"8:cqsobbx-ybt";a:2:{i:0;R:13675;i:1;R:801;}s:14:"8:cqsobbx-qrfp";a:2:{i:0;R:13675;i:1;R:801;}s:23:"8:crbcyrpngrtbevrf-qrfp";a:2:{i:0;s:20:"ext-peoplecategories";i:1;R:801;}s:17:"8:cvcrrfpncr-qrfp";a:2:{i:0;s:14:"ext-pipeescape";i:1;R:801;}s:12:"8:cvjvx-qrfp";a:2:{i:0;s:9:"ext-piwik";i:1;R:801;}s:7:"8:cvjvx";a:2:{i:0;R:13683;i:1;R:801;}s:18:"8:cvjvx-ynfgivfvgf";a:2:{i:0;R:13683;i:1;R:801;}s:17:"8:cvjvx-pbhagevrf";a:2:{i:0;R:13683;i:1;R:801;}s:16:"8:cvjvx-oebjfref";a:2:{i:0;R:13683;i:1;R:801;}s:17:"8:evtug-ivrjcvjvx";a:2:{i:0;R:13683;i:1;R:801;}s:8:"8:cynlre";a:2:{i:0;s:10:"ext-player";i:1;R:801;}s:13:"8:cynlre-qrfp";a:2:{i:0;R:13690;i:1;R:801;}s:14:"8:cynlre-gvgyr";a:2:{i:0;R:13690;i:1;R:801;}s:20:"8:cynlre-cynlregvgyr";a:2:{i:0;R:13690;i:1;R:801;}s:17:"8:cynlre-cntrgrkg";a:2:{i:0;R:13690;i:1;R:801;}s:13:"8:cynlre-svyr";a:2:{i:0;R:13690;i:1;R:801;}s:13:"8:cynlre-cynl";a:2:{i:0;R:13690;i:1;R:801;}s:25:"8:cynlre-vzntrcntr-urnqre";a:2:{i:0;R:13690;i:1;R:801;}s:20:"8:cynlre-abg-nyybjrq";a:2:{i:0;R:13690;i:1;R:801;}s:18:"8:cynlre-abg-sbhaq";a:2:{i:0;R:13690;i:1;R:801;}s:22:"8:cynlre-vainyvq-gvgyr";a:2:{i:0;R:13690;i:1;R:801;}s:20:"8:cynlre-pyvpxgbcynl";a:2:{i:0;R:13690;i:1;R:801;}s:20:"8:cynlre-tbgb-cynlre";a:2:{i:0;R:13690;i:1;R:801;}s:18:"8:cynlre-tbgb-cntr";a:2:{i:0;R:13690;i:1;R:801;}s:18:"8:cynlre-tbgb-svyr";a:2:{i:0;R:13690;i:1;R:801;}s:15:"8:cybggref-qrfp";a:2:{i:0;s:12:"ext-plotters";i:1;R:801;}s:10:"8:cybggref";a:2:{i:0;R:13706;i:1;R:801;}s:16:"8:cybggref-gvgyr";a:2:{i:0;R:13706;i:1;R:801;}s:19:"8:cybggref-cntrgrkg";a:2:{i:0;R:13706;i:1;R:801;}s:15:"8:cybggref-hfrf";a:2:{i:0;R:13706;i:1;R:801;}s:25:"8:cybggref-zvffvat-fpevcg";a:2:{i:0;R:13706;i:1;R:801;}s:28:"8:cybggref-zvffvat-nethzragf";a:2:{i:0;R:13706;i:1;R:801;}s:38:"8:cybggref-rkprffviryl-ybat-fpevcganzr";a:2:{i:0;R:13706;i:1;R:801;}s:44:"8:cybggref-rkprffviryl-ybat-cercebprffbeanzr";a:2:{i:0;R:13706;i:1;R:801;}s:32:"8:cybggref-rkprffviryl-ybat-anzr";a:2:{i:0;R:13706;i:1;R:801;}s:38:"8:cybggref-rkprffviryl-ybat-gnoyrpynff";a:2:{i:0;R:13706;i:1;R:801;}s:18:"8:cybggref-ab-qngn";a:2:{i:0;R:13706;i:1;R:801;}s:27:"8:cybggref-vainyvq-eraqrere";a:2:{i:0;R:13706;i:1;R:801;}s:17:"8:cybggref-reebef";a:2:{i:0;R:13706;i:1;R:801;}s:10:"8:cbijngpu";a:2:{i:0;s:12:"ext-povwatch";i:1;R:801;}s:15:"8:cbijngpu_qrfp";a:2:{i:0;R:13721;i:1;R:801;}s:21:"8:cbijngpu_ab_frffvba";a:2:{i:0;R:13721;i:1;R:801;}s:27:"8:cbijngpu_abg_nyybjrq_chfu";a:2:{i:0;R:13721;i:1;R:801;}s:29:"8:cbijngpu_nyernql_fhofpevorq";a:2:{i:0;R:13721;i:1;R:801;}s:21:"8:cbijngpu_fhofpevorq";a:2:{i:0;R:13721;i:1;R:801;}s:25:"8:cbijngpu_abg_fhofpevorq";a:2:{i:0;R:13721;i:1;R:801;}s:23:"8:cbijngpu_hafhofpevorq";a:2:{i:0;R:13721;i:1;R:801;}s:24:"8:cbijngpu_vainyvq_gvgyr";a:2:{i:0;R:13721;i:1;R:801;}s:17:"8:cbijngpu_chfurq";a:2:{i:0;R:13721;i:1;R:801;}s:16:"8:cbijngpu_vageb";a:2:{i:0;R:13721;i:1;R:801;}s:26:"8:cbijngpu_fhofpevore_yvfg";a:2:{i:0;R:13721;i:1;R:801;}s:32:"8:cbijngpu_fhofpevore_yvfg_vageb";a:2:{i:0;R:13721;i:1;R:801;}s:34:"8:cbijngpu_abg_nyybjrq_fhofpevoref";a:2:{i:0;R:13721;i:1;R:801;}s:26:"8:cbijngpu_haxabja_fhocntr";a:2:{i:0;R:13721;i:1;R:801;}s:15:"8:cbijngpu_chfu";a:2:{i:0;R:13721;i:1;R:801;}s:21:"8:cbijngpu_chfu_vageb";a:2:{i:0;R:13721;i:1;R:801;}s:16:"8:cbijngpu_gvgyr";a:2:{i:0;R:13721;i:1;R:801;}s:18:"8:cbijngpu_pbzzrag";a:2:{i:0;R:13721;i:1;R:801;}s:17:"8:cbijngpu_ab_ybt";a:2:{i:0;R:13721;i:1;R:801;}s:25:"8:cbijngpu_ab_fhofpevoref";a:2:{i:0;R:13721;i:1;R:801;}s:28:"8:cbijngpu_hafhofpevor_vageb";a:2:{i:0;R:13721;i:1;R:801;}s:22:"8:cbijngpu_hafhofpevor";a:2:{i:0;R:13721;i:1;R:801;}s:26:"8:cbijngpu_fhofpevor_vageb";a:2:{i:0;R:13721;i:1;R:801;}s:20:"8:cbijngpu_fhofpevor";a:2:{i:0;R:13721;i:1;R:801;}s:16:"8:cbijngpu_nqqrq";a:2:{i:0;R:13721;i:1;R:801;}s:22:"8:evtug-cbijngpu_nqzva";a:2:{i:0;R:13721;i:1;R:801;}s:21:"8:evtug-cbijngpu_hfre";a:2:{i:0;R:13721;i:1;R:801;}s:23:"8:npgvba-cbijngpu_nqzva";a:2:{i:0;R:13721;i:1;R:801;}s:22:"8:npgvba-cbijngpu_hfre";a:2:{i:0;R:13721;i:1;R:801;}s:11:"8:cersfgngf";a:2:{i:0;s:13:"ext-prefstats";i:1;R:801;}s:16:"8:cersfgngf-qrfp";a:2:{i:0;R:13752;i:1;R:801;}s:17:"8:cersfgngf-gvgyr";a:2:{i:0;R:13752;i:1;R:801;}s:22:"8:cersfgngf-yvfg-vageb";a:2:{i:0;R:13752;i:1;R:801;}s:21:"8:cersfgngf-yvfg-ryrz";a:2:{i:0;R:13752;i:1;R:801;}s:19:"8:cersfgngf-abcersf";a:2:{i:0;R:13752;i:1;R:801;}s:20:"8:cersfgngf-pbhagref";a:2:{i:0;R:13752;i:1;R:801;}s:30:"8:cersfgngf-pbhagref-rkcrafvir";a:2:{i:0;R:13752;i:1;R:801;}s:17:"8:cersfgngf-knkvf";a:2:{i:0;R:13752;i:1;R:801;}s:19:"8:cersfgngf-snpgbef";a:2:{i:0;R:13752;i:1;R:801;}s:23:"8:cersfgngf-snpgbe-ubhe";a:2:{i:0;R:13752;i:1;R:801;}s:27:"8:cersfgngf-snpgbe-fvkubhef";a:2:{i:0;R:13752;i:1;R:801;}s:22:"8:cersfgngf-snpgbe-qnl";a:2:{i:0;R:13752;i:1;R:801;}s:23:"8:cersfgngf-snpgbe-jrrx";a:2:{i:0;R:13752;i:1;R:801;}s:27:"8:cersfgngf-snpgbe-gjbjrrxf";a:2:{i:0;R:13752;i:1;R:801;}s:28:"8:cersfgngf-snpgbe-sbhejrrxf";a:2:{i:0;R:13752;i:1;R:801;}s:26:"8:cersfgngf-snpgbe-qrsnhyg";a:2:{i:0;R:13752;i:1;R:801;}s:22:"8:cersfgngf-yrtraq-bhg";a:2:{i:0;R:13752;i:1;R:801;}s:21:"8:cersfgngf-yrtraq-va";a:2:{i:0;R:13752;i:1;R:801;}s:16:"8:cerybnqre-qrfp";a:2:{i:0;s:13:"ext-preloader";i:1;R:801;}s:23:"8:cerivrjshapgvbaf-qrfp";a:2:{i:0;s:20:"ext-previewfunctions";i:1;R:801;}s:31:"8:cevingrqbznvaf-abznantrnpprff";a:2:{i:0;s:18:"ext-privatedomains";i:1;R:801;}s:16:"8:cevingrqbznvaf";a:2:{i:0;R:13776;i:1;R:801;}s:31:"8:cevingrqbznvaf-vsrznvypbagnpg";a:2:{i:0;R:13776;i:1;R:801;}s:28:"8:fnircevingrqbznvaf-fhpprff";a:2:{i:0;R:13776;i:1;R:801;}s:29:"8:cevingrqbznvaf-vainyvqrznvy";a:2:{i:0;R:13776;i:1;R:801;}s:35:"8:cevingrqbznvaf-nssvyvngranzrynory";a:2:{i:0;R:13776;i:1;R:801;}s:32:"8:cevingrqbznvaf-rznvynqzvaynory";a:2:{i:0;R:13776;i:1;R:801;}s:29:"8:cevingrqbznvaf-vafgehpgvbaf";a:2:{i:0;R:13776;i:1;R:801;}s:22:"8:evtug-cevingrqbznvaf";a:2:{i:0;R:13776;i:1;R:801;}s:16:"8:cevingrcc-qrfp";a:2:{i:0;s:25:"ext-privatepageprotection";i:1;R:801;}s:29:"8:cevingrcc-ybpxbhg-ceriragrq";a:2:{i:0;R:13786;i:1;R:801;}s:11:"8:cebsvyvat";a:2:{i:0;s:18:"ext-profilemonitor";i:1;R:801;}s:16:"8:cebsvyvat-qrfp";a:2:{i:0;R:13789;i:1;R:801;}s:19:"8:cebsvyvat-cebprff";a:2:{i:0;R:13789;i:1;R:801;}s:20:"8:cebsvyvat-jvyqpneq";a:2:{i:0;R:13789;i:1;R:801;}s:14:"8:cebsvyvat-bx";a:2:{i:0;R:13789;i:1;R:801;}s:16:"8:cebsvyvat-qngn";a:2:{i:0;R:13789;i:1;R:801;}s:24:"8:cebsvyvat-qngn-cebprff";a:2:{i:0;R:13789;i:1;R:801;}s:22:"8:cebsvyvat-qngn-pbhag";a:2:{i:0;R:13789;i:1;R:801;}s:21:"8:cebsvyvat-qngn-gvzr";a:2:{i:0;R:13789;i:1;R:801;}s:24:"8:cebsvyvat-qngn-nirentr";a:2:{i:0;R:13789;i:1;R:801;}s:19:"8:cebsvyvat-ab-qngn";a:2:{i:0;R:13789;i:1;R:801;}s:21:"8:cebgrpgfrpgvba_qrfp";a:2:{i:0;s:18:"ext-protectsection";i:1;R:801;}s:27:"8:cebgrpgfrpgvba_nqq_erzbir";a:2:{i:0;R:13801;i:1;R:801;}s:23:"8:cebgrpgfrpgvba_zbqvsl";a:2:{i:0;R:13801;i:1;R:801;}s:26:"8:cebgrpgfrpgvba_nqq_nobir";a:2:{i:0;R:13801;i:1;R:801;}s:26:"8:cebgrpgfrpgvba_sbeovqqra";a:2:{i:0;R:13801;i:1;R:801;}s:22:"8:evtug-cebgrpgfrpgvba";a:2:{i:0;R:13801;i:1;R:801;}s:13:"8:cebgrpgfvgr";a:2:{i:0;s:15:"ext-protectsite";i:1;R:801;}s:18:"8:cebgrpgfvgr-qrfp";a:2:{i:0;R:13808;i:1;R:801;}s:26:"8:cebgrpgfvgr-grkg-cebgrpg";a:2:{i:0;R:13808;i:1;R:801;}s:28:"8:cebgrpgfvgr-grkg-hacebgrpg";a:2:{i:0;R:13808;i:1;R:801;}s:19:"8:cebgrpgfvgr-gvgyr";a:2:{i:0;R:13808;i:1;R:801;}s:22:"8:cebgrpgfvgr-nyybjnyy";a:2:{i:0;R:13808;i:1;R:801;}s:28:"8:cebgrpgfvgr-nyybjhfreflfbc";a:2:{i:0;R:13808;i:1;R:801;}s:24:"8:cebgrpgfvgr-nyybjflfbc";a:2:{i:0;R:13808;i:1;R:801;}s:27:"8:cebgrpgfvgr-perngrnppbhag";a:2:{i:0;R:13808;i:1;R:801;}s:24:"8:cebgrpgfvgr-perngrcntr";a:2:{i:0;R:13808;i:1;R:801;}s:18:"8:cebgrpgfvgr-rqvg";a:2:{i:0;R:13808;i:1;R:801;}s:18:"8:cebgrpgfvgr-zbir";a:2:{i:0;R:13808;i:1;R:801;}s:20:"8:cebgrpgfvgr-hcybnq";a:2:{i:0;R:13808;i:1;R:801;}s:21:"8:cebgrpgfvgr-gvzrbhg";a:2:{i:0;R:13808;i:1;R:801;}s:27:"8:cebgrpgfvgr-gvzrbhg-reebe";a:2:{i:0;R:13808;i:1;R:801;}s:24:"8:cebgrpgfvgr-znkgvzrbhg";a:2:{i:0;R:13808;i:1;R:801;}s:21:"8:cebgrpgfvgr-pbzzrag";a:2:{i:0;R:13808;i:1;R:801;}s:22:"8:cebgrpgfvgr-hpbzzrag";a:2:{i:0;R:13808;i:1;R:801;}s:19:"8:cebgrpgfvgr-hagvy";a:2:{i:0;R:13808;i:1;R:801;}s:21:"8:cebgrpgfvgr-cebgrpg";a:2:{i:0;R:13808;i:1;R:801;}s:23:"8:cebgrpgfvgr-hacebgrpg";a:2:{i:0;R:13808;i:1;R:801;}s:29:"8:cebgrpgfvgr-perngrnppbhag-0";a:2:{i:0;R:13808;i:1;R:801;}s:29:"8:cebgrpgfvgr-perngrnppbhag-1";a:2:{i:0;R:13808;i:1;R:801;}s:29:"8:cebgrpgfvgr-perngrnppbhag-2";a:2:{i:0;R:13808;i:1;R:801;}s:26:"8:cebgrpgfvgr-perngrcntr-0";a:2:{i:0;R:13808;i:1;R:801;}s:26:"8:cebgrpgfvgr-perngrcntr-1";a:2:{i:0;R:13808;i:1;R:801;}s:26:"8:cebgrpgfvgr-perngrcntr-2";a:2:{i:0;R:13808;i:1;R:801;}s:20:"8:cebgrpgfvgr-rqvg-0";a:2:{i:0;R:13808;i:1;R:801;}s:20:"8:cebgrpgfvgr-rqvg-1";a:2:{i:0;R:13808;i:1;R:801;}s:20:"8:cebgrpgfvgr-rqvg-2";a:2:{i:0;R:13808;i:1;R:801;}s:20:"8:cebgrpgfvgr-zbir-0";a:2:{i:0;R:13808;i:1;R:801;}s:20:"8:cebgrpgfvgr-zbir-1";a:2:{i:0;R:13808;i:1;R:801;}s:22:"8:cebgrpgfvgr-hcybnq-0";a:2:{i:0;R:13808;i:1;R:801;}s:22:"8:cebgrpgfvgr-hcybnq-1";a:2:{i:0;R:13808;i:1;R:801;}s:19:"8:evtug-cebgrpgfvgr";a:2:{i:0;R:13808;i:1;R:801;}s:19:"8:cebklpbaarpg-qrfp";a:2:{i:0;s:16:"ext-proxyconnect";i:1;R:801;}s:18:"8:cfvabgbpahz-qrfp";a:2:{i:0;s:15:"ext-psinotocnum";i:1;R:801;}s:18:"8:cherjvxvqryrgvba";a:2:{i:0;s:20:"ext-purewikideletion";i:1;R:801;}s:20:"8:enaqbzrkpyhqroynax";a:2:{i:0;R:13848;i:1;R:801;}s:27:"8:cbchyngroynaxrqcntrfgnoyr";a:2:{i:0;R:13848;i:1;R:801;}s:23:"8:cherjvxvqryrgvba-qrfp";a:2:{i:0;R:13848;i:1;R:801;}s:34:"8:cherjvxvqryrgvba-cers-jngpuoynax";a:2:{i:0;R:13848;i:1;R:801;}s:36:"8:cherjvxvqryrgvba-cers-jngpuhaoynax";a:2:{i:0;R:13848;i:1;R:801;}s:26:"8:cherjvxvqryrgvba-oynaxrq";a:2:{i:0;R:13848;i:1;R:801;}s:11:"8:oynax-ybt";a:2:{i:0;R:13848;i:1;R:801;}s:16:"8:oynax-ybt-anzr";a:2:{i:0;R:13848;i:1;R:801;}s:18:"8:oynax-ybt-urnqre";a:2:{i:0;R:13848;i:1;R:801;}s:23:"8:oynax-ybt-ragel-oynax";a:2:{i:0;R:13848;i:1;R:801;}s:25:"8:oynax-ybt-ragel-haoynax";a:2:{i:0;R:13848;i:1;R:801;}s:16:"8:oynax-ybt-yvax";a:2:{i:0;R:13848;i:1;R:801;}s:31:"8:cherjvxvqryrgvba-oynaxabybtva";a:2:{i:0;R:13848;i:1;R:801;}s:35:"8:cherjvxvqryrgvba-oynaxabybtvagrkg";a:2:{i:0;R:13848;i:1;R:801;}s:37:"8:cherjvxvqryrgvba-haoynaxabybtvagrkg";a:2:{i:0;R:13848;i:1;R:801;}s:30:"8:cherjvxvqryrgvba-oynaxrqgrkg";a:2:{i:0;R:13848;i:1;R:801;}s:34:"8:cherjvxvqryrgvba-cbchyngvba-qbar";a:2:{i:0;R:13848;i:1;R:801;}s:24:"8:evtug-cherjvxvqryrgvba";a:2:{i:0;R:13848;i:1;R:801;}s:7:"8:chetr";a:2:{i:0;s:9:"ext-purge";i:1;R:801;}s:12:"8:chetr-qrfp";a:2:{i:0;R:13868;i:1;R:801;}s:12:"8:chetrpnpur";a:2:{i:0;s:14:"ext-purgecache";i:1;R:801;}s:17:"8:chetrpnpur-qrfp";a:2:{i:0;R:13871;i:1;R:801;}s:20:"8:chetrpnpur-jneavat";a:2:{i:0;R:13871;i:1;R:801;}s:19:"8:chetrpnpur-chetrq";a:2:{i:0;R:13871;i:1;R:801;}s:19:"8:chetrpnpur-ohggba";a:2:{i:0;R:13871;i:1;R:801;}s:18:"8:evtug-chetrpnpur";a:2:{i:0;R:13871;i:1;R:801;}s:11:"8:chfu-qrfp";a:2:{i:0;s:8:"ext-push";i:1;R:801;}s:12:"8:evtug-chfu";a:2:{i:0;R:13878;i:1;R:801;}s:16:"8:evtug-ohyxchfu";a:2:{i:0;R:13878;i:1;R:801;}s:17:"8:evtug-chfunqzva";a:2:{i:0;R:13878;i:1;R:801;}s:13:"8:npgvba-chfu";a:2:{i:0;R:13878;i:1;R:801;}s:17:"8:npgvba-ohyxchfu";a:2:{i:0;R:13878;i:1;R:801;}s:18:"8:npgvba-chfunqzva";a:2:{i:0;R:13878;i:1;R:801;}s:14:"8:tebhc-chfure";a:2:{i:0;R:13878;i:1;R:801;}s:21:"8:tebhc-chfure-zrzore";a:2:{i:0;R:13878;i:1;R:801;}s:18:"8:tebhccntr-chfure";a:2:{i:0;R:13878;i:1;R:801;}s:18:"8:tebhc-ohyxchfure";a:2:{i:0;R:13878;i:1;R:801;}s:25:"8:tebhc-ohyxchfure-zrzore";a:2:{i:0;R:13878;i:1;R:801;}s:22:"8:tebhccntr-ohyxchfure";a:2:{i:0;R:13878;i:1;R:801;}s:18:"8:tebhc-svyrchfure";a:2:{i:0;R:13878;i:1;R:801;}s:25:"8:tebhc-svyrchfure-zrzore";a:2:{i:0;R:13878;i:1;R:801;}s:22:"8:tebhccntr-svyrchfure";a:2:{i:0;R:13878;i:1;R:801;}s:18:"8:tebhc-chfure.pff";a:2:{i:0;R:13878;i:1;R:801;}s:17:"8:tebhc-chfure.wf";a:2:{i:0;R:13878;i:1;R:801;}s:22:"8:tebhc-ohyxchfure.pff";a:2:{i:0;R:13878;i:1;R:801;}s:21:"8:tebhc-ohyxchfure.wf";a:2:{i:0;R:13878;i:1;R:801;}s:22:"8:tebhc-svyrchfure.pff";a:2:{i:0;R:13878;i:1;R:801;}s:21:"8:tebhc-svyrchfure.wf";a:2:{i:0;R:13878;i:1;R:801;}s:19:"8:chfu-ree-pncgnpun";a:2:{i:0;R:13878;i:1;R:801;}s:23:"8:chfu-ree-pncgpun-cntr";a:2:{i:0;R:13878;i:1;R:801;}s:25:"8:chfu-ree-nhguragvpngvba";a:2:{i:0;R:13878;i:1;R:801;}s:15:"8:chfu-gno-grkg";a:2:{i:0;R:13878;i:1;R:801;}s:18:"8:chfu-ohggba-grkg";a:2:{i:0;R:13878;i:1;R:801;}s:15:"8:chfu-gno-qrfp";a:2:{i:0;R:13878;i:1;R:801;}s:21:"8:chfu-ohggba-chfuvat";a:2:{i:0;R:13878;i:1;R:801;}s:27:"8:chfu-ohggba-chfuvat-svyrf";a:2:{i:0;R:13878;i:1;R:801;}s:23:"8:chfu-ohggba-pbzcyrgrq";a:2:{i:0;R:13878;i:1;R:801;}s:20:"8:chfu-ohggba-snvyrq";a:2:{i:0;R:13878;i:1;R:801;}s:16:"8:chfu-gno-gvgyr";a:2:{i:0;R:13878;i:1;R:801;}s:14:"8:chfu-gnetrgf";a:2:{i:0;R:13878;i:1;R:801;}s:17:"8:chfu-nqq-gnetrg";a:2:{i:0;R:13878;i:1;R:801;}s:30:"8:chfu-vzcbeg-erivfvba-zrffntr";a:2:{i:0;R:13878;i:1;R:801;}s:21:"8:chfu-gno-ab-gnetrgf";a:2:{i:0;R:13878;i:1;R:801;}s:18:"8:chfu-gno-chfu-gb";a:2:{i:0;R:13878;i:1;R:801;}s:19:"8:chfu-erzbgr-cntrf";a:2:{i:0;R:13878;i:1;R:801;}s:23:"8:chfu-erzbgr-cntr-yvax";a:2:{i:0;R:13878;i:1;R:801;}s:28:"8:chfu-erzbgr-cntr-yvax-shyy";a:2:{i:0;R:13878;i:1;R:801;}s:20:"8:chfu-gnetrgf-gbgny";a:2:{i:0;R:13878;i:1;R:801;}s:17:"8:chfu-ohggba-nyy";a:2:{i:0;R:13878;i:1;R:801;}s:20:"8:chfu-gno-ynfg-rqvg";a:2:{i:0;R:13878;i:1;R:801;}s:22:"8:chfu-gno-abg-perngrq";a:2:{i:0;R:13878;i:1;R:801;}s:23:"8:chfu-gno-chfu-bcgvbaf";a:2:{i:0;R:13878;i:1;R:801;}s:24:"8:chfu-gno-vap-grzcyngrf";a:2:{i:0;R:13878;i:1;R:801;}s:25:"8:chfu-gno-hfrq-grzcyngrf";a:2:{i:0;R:13878;i:1;R:801;}s:28:"8:chfu-gno-ab-hfrq-grzcyngrf";a:2:{i:0;R:13878;i:1;R:801;}s:20:"8:chfu-gno-vap-svyrf";a:2:{i:0;R:13878;i:1;R:801;}s:23:"8:chfu-gno-ree-svyrvasb";a:2:{i:0;R:13878;i:1;R:801;}s:31:"8:chfu-gno-ree-svyrchfu-haxabja";a:2:{i:0;R:13878;i:1;R:801;}s:23:"8:chfu-gno-ree-svyrchfu";a:2:{i:0;R:13878;i:1;R:801;}s:25:"8:chfu-gno-rzorqqrq-svyrf";a:2:{i:0;R:13878;i:1;R:801;}s:28:"8:chfu-gno-ab-rzorqqrq-svyrf";a:2:{i:0;R:13878;i:1;R:801;}s:25:"8:chfu-gno-svyrf-bireevqr";a:2:{i:0;R:13878;i:1;R:801;}s:28:"8:chfu-gno-grzcyngr-bireevqr";a:2:{i:0;R:13878;i:1;R:801;}s:29:"8:chfu-gno-ree-hcybnqqvfnoyrq";a:2:{i:0;R:13878;i:1;R:801;}s:14:"8:fcrpvny-chfu";a:2:{i:0;R:13878;i:1;R:801;}s:26:"8:chfu-fcrpvny-qrfpevcgvba";a:2:{i:0;R:13878;i:1;R:801;}s:27:"8:chfu-fcrpvny-chfuvat-qrfp";a:2:{i:0;R:13878;i:1;R:801;}s:26:"8:chfu-fcrpvny-ohggba-grkg";a:2:{i:0;R:13878;i:1;R:801;}s:24:"8:chfu-fcrpvny-gnetrg-vf";a:2:{i:0;R:13878;i:1;R:801;}s:29:"8:chfu-fcrpvny-fryrpg-gnetrgf";a:2:{i:0;R:13878;i:1;R:801;}s:27:"8:chfu-fcrpvny-vgrz-chfuvat";a:2:{i:0;R:13878;i:1;R:801;}s:29:"8:chfu-fcrpvny-vgrz-pbzcyrgrq";a:2:{i:0;R:13878;i:1;R:801;}s:26:"8:chfu-fcrpvny-vgrz-snvyrq";a:2:{i:0;R:13878;i:1;R:801;}s:24:"8:chfu-fcrpvny-chfu-qbar";a:2:{i:0;R:13878;i:1;R:801;}s:31:"8:chfu-fcrpvny-ree-gbxra-snvyrq";a:2:{i:0;R:13878;i:1;R:801;}s:33:"8:chfu-fcrpvny-ree-cntrtrg-snvyrq";a:2:{i:0;R:13878;i:1;R:801;}s:30:"8:chfu-fcrpvny-ree-chfu-snvyrq";a:2:{i:0;R:13878;i:1;R:801;}s:24:"8:chfu-fcrpvny-vap-svyrf";a:2:{i:0;R:13878;i:1;R:801;}s:33:"8:chfu-fcrpvny-ree-vztvasb-snvyrq";a:2:{i:0;R:13878;i:1;R:801;}s:33:"8:chfu-fcrpvny-bognvavat-svyrvasb";a:2:{i:0;R:13878;i:1;R:801;}s:27:"8:chfu-fcrpvny-chfuvat-svyr";a:2:{i:0;R:13878;i:1;R:801;}s:21:"8:chfu-fcrpvny-erghea";a:2:{i:0;R:13878;i:1;R:801;}s:21:"8:chfu-ncv-ree-abphey";a:2:{i:0;R:13878;i:1;R:801;}s:28:"8:chfu-ncv-ree-absvyrfhccbeg";a:2:{i:0;R:13878;i:1;R:801;}s:13:"8:cbyyerfhygf";a:2:{i:0;s:9:"ext-qpoll";i:1;R:801;}s:17:"8:dcbyyjrovafgnyy";a:2:{i:0;R:13957;i:1;R:801;}s:16:"8:dc_cneragurfrf";a:2:{i:0;R:13957;i:1;R:801;}s:23:"8:dc_shyy_pngrtbel_anzr";a:2:{i:0;R:13957;i:1;R:801;}s:9:"8:dc_qrfp";a:2:{i:0;R:13957;i:1;R:801;}s:12:"8:dc_qrfp-fc";a:2:{i:0;R:13957;i:1;R:801;}s:14:"8:dc_erfhyg_an";a:2:{i:0;R:13957;i:1;R:801;}s:17:"8:dc_erfhyg_reebe";a:2:{i:0;R:13957;i:1;R:801;}s:16:"8:dc_ibgr_ohggba";a:2:{i:0;R:13957;i:1;R:801;}s:22:"8:dc_ibgr_ntnva_ohggba";a:2:{i:0;R:13957;i:1;R:801;}s:25:"8:dc_fhozvg_nggrzcgf_yrsg";a:2:{i:0;R:13957;i:1;R:801;}s:15:"8:dc_cbyyf_yvfg";a:2:{i:0;R:13957;i:1;R:801;}s:15:"8:dc_hfref_yvfg";a:2:{i:0;R:13957;i:1;R:801;}s:19:"8:dc_oebjfr_gb_cbyy";a:2:{i:0;R:13957;i:1;R:801;}s:19:"8:dc_oebjfr_gb_hfre";a:2:{i:0;R:13957;i:1;R:801;}s:29:"8:dc_oebjfr_gb_vagrecergngvba";a:2:{i:0;R:13957;i:1;R:801;}s:16:"8:dc_ibgrf_pbhag";a:2:{i:0;R:13957;i:1;R:801;}s:16:"8:dc_fbhepr_yvax";a:2:{i:0;R:13957;i:1;R:801;}s:15:"8:dc_fgngf_yvax";a:2:{i:0;R:13957;i:1;R:801;}s:15:"8:dc_hfref_yvax";a:2:{i:0;R:13957;i:1;R:801;}s:15:"8:dc_ibvpr_yvax";a:2:{i:0;R:13957;i:1;R:801;}s:19:"8:dc_ibvpr_yvax_vai";a:2:{i:0;R:13957;i:1;R:801;}s:20:"8:dc_hfre_cbyyf_yvax";a:2:{i:0;R:13957;i:1;R:801;}s:28:"8:dc_hfre_zvffvat_cbyyf_yvax";a:2:{i:0;R:13957;i:1;R:801;}s:26:"8:dc_abg_cnegvpvcngrq_yvax";a:2:{i:0;R:13957;i:1;R:801;}s:22:"8:dc_beqre_ol_hfreanzr";a:2:{i:0;R:13957;i:1;R:801;}s:25:"8:dc_beqre_ol_cbyyf_pbhag";a:2:{i:0;R:13957;i:1;R:801;}s:22:"8:dc_erfhygf_yvar_dhcy";a:2:{i:0;R:13957;i:1;R:801;}s:21:"8:dc_erfhygf_yvar_dcy";a:2:{i:0;R:13957;i:1;R:801;}s:21:"8:dc_urnqre_yvar_dchy";a:2:{i:0;R:13957;i:1;R:801;}s:22:"8:dc_erfhygf_yvar_dchy";a:2:{i:0;R:13957;i:1;R:801;}s:21:"8:dc_urnqre_yvar_dhpy";a:2:{i:0;R:13957;i:1;R:801;}s:22:"8:dc_erfhygf_yvar_dhpy";a:2:{i:0;R:13957;i:1;R:801;}s:28:"8:dc_erfhygf_fhozvg_nggrzcgf";a:2:{i:0;R:13957;i:1;R:801;}s:34:"8:dc_erfhygf_vagrecergngvba_urnqre";a:2:{i:0;R:13957;i:1;R:801;}s:33:"8:dc_erfhygf_fubeg_vagrecergngvba";a:2:{i:0;R:13957;i:1;R:801;}s:32:"8:dc_erfhygf_ybat_vagrecergngvba";a:2:{i:0;R:13957;i:1;R:801;}s:38:"8:dc_erfhygf_fgehpgherq_vagrecergngvba";a:2:{i:0;R:13957;i:1;R:801;}s:31:"8:dc_cbyy_unf_ab_vagrecergngvba";a:2:{i:0;R:13957;i:1;R:801;}s:31:"8:dc_vagrecrgngvba_jebat_nafjre";a:2:{i:0;R:13957;i:1;R:801;}s:18:"8:dc_rkcbeg_gb_kyf";a:2:{i:0;R:13957;i:1;R:801;}s:18:"8:dc_ibvprf_gb_kyf";a:2:{i:0;R:13957;i:1;R:801;}s:34:"8:dc_vagrecergngvba_erfhygf_gb_kyf";a:2:{i:0;R:13957;i:1;R:801;}s:29:"8:dc_hfref_nafjrerq_dhrfgvbaf";a:2:{i:0;R:13957;i:1;R:801;}s:22:"8:dc_shap_ab_fhpu_cbyy";a:2:{i:0;R:13957;i:1;R:801;}s:29:"8:dc_shap_zvffvat_dhrfgvba_vq";a:2:{i:0;R:13957;i:1;R:801;}s:29:"8:dc_shap_vainyvq_dhrfgvba_vq";a:2:{i:0;R:13957;i:1;R:801;}s:29:"8:dc_shap_zvffvat_cebcbfny_vq";a:2:{i:0;R:13957;i:1;R:801;}s:29:"8:dc_shap_vainyvq_cebcbfny_vq";a:2:{i:0;R:13957;i:1;R:801;}s:23:"8:dc_reebe_ab_fhpu_cbyy";a:2:{i:0;R:13957;i:1;R:801;}s:29:"8:dc_reebe_va_dhrfgvba_urnqre";a:2:{i:0;R:13957;i:1;R:801;}s:27:"8:dc_reebe_vq_va_fgngf_zbqr";a:2:{i:0;R:13957;i:1;R:801;}s:35:"8:dc_reebe_qrcraqnapr_va_fgngf_zbqr";a:2:{i:0;R:13957;i:1;R:801;}s:19:"8:dc_reebe_ab_fgngf";a:2:{i:0;R:13957;i:1;R:801;}s:31:"8:dc_reebe_nqqerff_va_qrpy_zbqr";a:2:{i:0;R:13957;i:1;R:801;}s:35:"8:dc_reebe_dhrfgvba_abg_vzcyrzragrq";a:2:{i:0;R:13957;i:1;R:801;}s:30:"8:dc_reebe_dhrfgvba_rzcgl_obql";a:2:{i:0;R:13957;i:1;R:801;}s:32:"8:dc_reebe_dhrfgvba_ab_cebcbfnyf";a:2:{i:0;R:13957;i:1;R:801;}s:32:"8:dc_reebe_vainyvq_dhrfgvba_glcr";a:2:{i:0;R:13957;i:1;R:801;}s:32:"8:dc_reebe_vainyvq_dhrfgvba_anzr";a:2:{i:0;R:13957;i:1;R:801;}s:29:"8:dc_reebe_glcr_va_fgngf_zbqr";a:2:{i:0;R:13957;i:1;R:801;}s:21:"8:dc_reebe_ab_cbyy_vq";a:2:{i:0;R:13957;i:1;R:801;}s:26:"8:dc_reebe_vainyvq_cbyy_vq";a:2:{i:0;R:13957;i:1;R:801;}s:31:"8:dc_reebe_nyernql_hfrq_cbyy_vq";a:2:{i:0;R:13957;i:1;R:801;}s:36:"8:dc_reebe_gbb_ybat_qrcraqnapr_inyhr";a:2:{i:0;R:13957;i:1;R:801;}s:35:"8:dc_reebe_vainyvq_qrcraqnapr_inyhr";a:2:{i:0;R:13957;i:1;R:801;}s:34:"8:dc_reebe_zvffrq_qrcraqnapr_gvgyr";a:2:{i:0;R:13957;i:1;R:801;}s:33:"8:dc_reebe_zvffrq_qrcraqnapr_cbyy";a:2:{i:0;R:13957;i:1;R:801;}s:31:"8:dc_reebe_ibgr_qrcraqnapr_cbyy";a:2:{i:0;R:13957;i:1;R:801;}s:25:"8:dc_reebe_gbb_znal_fcnaf";a:2:{i:0;R:13957;i:1;R:801;}s:26:"8:dc_reebe_hanafjrerq_fcna";a:2:{i:0;R:13957;i:1;R:801;}s:28:"8:dc_reebe_aba_havdhr_pubvpr";a:2:{i:0;R:13957;i:1;R:801;}s:30:"8:dc_reebe_pngrtbel_anzr_rzcgl";a:2:{i:0;R:13957;i:1;R:801;}s:30:"8:dc_reebe_cebcbfny_grkg_rzcgl";a:2:{i:0;R:13957;i:1;R:801;}s:41:"8:dc_reebe_gbb_ybat_pngrtbel_bcgvba_inyhr";a:2:{i:0;R:13957;i:1;R:801;}s:43:"8:dc_reebe_gbb_ybat_pngrtbel_bcgvbaf_inyhrf";a:2:{i:0;R:13957;i:1;R:801;}s:33:"8:dc_reebe_gbb_ybat_cebcbfny_grkg";a:2:{i:0;R:13957;i:1;R:801;}s:33:"8:dc_reebe_gbb_ybat_cebcbfny_anzr";a:2:{i:0;R:13957;i:1;R:801;}s:34:"8:dc_reebe_zhygvyvar_cebcbfny_anzr";a:2:{i:0;R:13957;i:1;R:801;}s:32:"8:dc_reebe_ahzrevp_cebcbfny_anzr";a:2:{i:0;R:13957;i:1;R:801;}s:29:"8:dc_reebe_gbb_srj_pngrtbevrf";a:2:{i:0;R:13957;i:1;R:801;}s:24:"8:dc_reebe_gbb_srj_fcnaf";a:2:{i:0;R:13957;i:1;R:801;}s:20:"8:dc_reebe_ab_nafjre";a:2:{i:0;R:13957;i:1;R:801;}s:41:"8:dc_reebe_abg_rabhtu_pngrtbevrf_nafjrerq";a:2:{i:0;R:13957;i:1;R:801;}s:17:"8:dc_reebe_havdhr";a:2:{i:0;R:13957;i:1;R:801;}s:27:"8:dc_reebe_ab_zber_nggrzcgf";a:2:{i:0;R:13957;i:1;R:801;}s:28:"8:dc_reebe_ab_vagrecergngvba";a:2:{i:0;R:13957;i:1;R:801;}s:35:"8:dc_reebe_vagrecergngvba_ab_erghea";a:2:{i:0;R:13957;i:1;R:801;}s:48:"8:dc_reebe_fgehpgherq_vagrecergngvba_vf_gbb_ybat";a:2:{i:0;R:13957;i:1;R:801;}s:25:"8:dc_reebe_ab_wfba_qrpbqr";a:2:{i:0;R:13957;i:1;R:801;}s:32:"8:dc_reebe_riny_zvffrq_ynat_ngge";a:2:{i:0;R:13957;i:1;R:801;}s:29:"8:dc_reebe_riny_zvk_ynathntrf";a:2:{i:0;R:13957;i:1;R:801;}s:36:"8:dc_reebe_riny_hafhccbegrq_ynathntr";a:2:{i:0;R:13957;i:1;R:801;}s:29:"8:dc_reebe_riny_vyyrtny_gbxra";a:2:{i:0;R:13957;i:1;R:801;}s:35:"8:dc_reebe_riny_vyyrtny_fhcretybony";a:2:{i:0;R:13957;i:1;R:801;}s:37:"8:dc_reebe_riny_vyyrtny_shapgvba_pnyy";a:2:{i:0;R:13957;i:1;R:801;}s:40:"8:dc_reebe_riny_inevnoyr_inevnoyr_npprff";a:2:{i:0;R:13957;i:1;R:801;}s:37:"8:dc_reebe_riny_vyyrtny_inevnoyr_anzr";a:2:{i:0;R:13957;i:1;R:801;}s:38:"8:dc_reebe_riny_inevnoyr_shapgvba_pnyy";a:2:{i:0;R:13957;i:1;R:801;}s:26:"8:dc_reebe_riny_frys_purpx";a:2:{i:0;R:13957;i:1;R:801;}s:30:"8:dc_reebe_riny_hanoyr_gb_yvag";a:2:{i:0;R:13957;i:1;R:801;}s:13:"8:depbqr-qrfp";a:2:{i:0;s:10:"ext-qrcode";i:1;R:801;}s:18:"8:enaqbzvzntr-qrfp";a:2:{i:0;s:15:"ext-randomimage";i:1;R:801;}s:18:"8:enaqbzvapngrtbel";a:2:{i:0;s:20:"ext-randomincategory";i:1;R:801;}s:23:"8:enaqbzvapngrtbel-qrfp";a:2:{i:0;R:14063;i:1;R:801;}s:26:"8:enaqbzvapngrtbel-gbbyobk";a:2:{i:0;R:14063;i:1;R:801;}s:29:"8:enaqbzvapngrtbel-abpngrtbel";a:2:{i:0;R:14063;i:1;R:801;}s:24:"8:enaqbzvapngrtbel-ynory";a:2:{i:0;R:14063;i:1;R:801;}s:25:"8:enaqbzvapngrtbel-fhozvg";a:2:{i:0;R:14063;i:1;R:801;}s:16:"8:enaqbzebbgcntr";a:2:{i:0;s:18:"ext-randomrootpage";i:1;R:801;}s:21:"8:enaqbzebbgcntr-qrfp";a:2:{i:0;R:14070;i:1;R:801;}s:28:"8:enaqbz-hfref-ningnef-gvgyr";a:2:{i:0;s:26:"ext-randomuserswithavatars";i:1;R:801;}s:27:"8:enaqbz-hfref-ningnef-qrfp";a:2:{i:0;R:14073;i:1;R:801;}s:14:"8:engvatf-qrfp";a:2:{i:0;s:11:"ext-ratings";i:1;R:801;}s:12:"8:evtug-engr";a:2:{i:0;R:14076;i:1;R:801;}s:27:"8:engvatf-fgnefengvatf-qrfp";a:2:{i:0;R:14076;i:1;R:801;}s:18:"8:engvatf-cne-cntr";a:2:{i:0;R:14076;i:1;R:801;}s:17:"8:engvatf-cne-gnt";a:2:{i:0;R:14076;i:1;R:801;}s:26:"8:engvatf-cne-fubjqvfnoyrq";a:2:{i:0;R:14076;i:1;R:801;}s:24:"8:engvatf-cne-vapfhzznel";a:2:{i:0;R:14076;i:1;R:801;}s:26:"8:engvatf-ibgrfhzznel-qrfp";a:2:{i:0;R:14076;i:1;R:801;}s:23:"8:engvatf-pheerag-fpber";a:2:{i:0;R:14076;i:1;R:801;}s:22:"8:engvatf-ab-ibgrf-lrg";a:2:{i:0;R:14076;i:1;R:801;}s:12:"8:eqsvb-qrfp";a:2:{i:0;s:9:"ext-rdfio";i:1;R:801;}s:11:"8:eqsvzcbeg";a:2:{i:0;R:14087;i:1;R:801;}s:22:"8:eqsvb-nep2nqzva-qrfp";a:2:{i:0;R:14087;i:1;R:801;}s:22:"8:eqsvb-eqsvzcbeg-qrfp";a:2:{i:0;R:14087;i:1;R:801;}s:27:"8:eqsvb-fcnedyraqcbvag-qrfp";a:2:{i:0;R:14087;i:1;R:801;}s:16:"8:fcnedyraqcbvag";a:2:{i:0;R:14087;i:1;R:801;}s:18:"8:fcrpvnynep2nqzva";a:2:{i:0;R:14087;i:1;R:801;}s:15:"8:ernffvtarqvgf";a:2:{i:0;s:17:"ext-reassignedits";i:1;R:801;}s:20:"8:ernffvtarqvgf-qrfp";a:2:{i:0;R:14095;i:1;R:801;}s:29:"8:ernffvtarqvgf-reebe-vainyvq";a:2:{i:0;R:14095;i:1;R:801;}s:19:"8:ernffvtarqvgf-arj";a:2:{i:0;R:14095;i:1;R:801;}s:19:"8:ernffvtarqvgf-byq";a:2:{i:0;R:14095;i:1;R:801;}s:22:"8:ernffvtarqvgf-fhozvg";a:2:{i:0;R:14095;i:1;R:801;}s:23:"8:ernffvtarqvgf-fhpprff";a:2:{i:0;R:14095;i:1;R:801;}s:23:"8:ernffvtarqvgf-fhzznel";a:2:{i:0;R:14095;i:1;R:801;}s:31:"8:ernffvtarqvgf-hcqngrybt-gvgyr";a:2:{i:0;R:14095;i:1;R:801;}s:30:"8:ernffvtarqvgf-hcqngrybt-hfre";a:2:{i:0;R:14095;i:1;R:801;}s:21:"8:evtug-ernffvtarqvgf";a:2:{i:0;R:14095;i:1;R:801;}s:13:"8:erpbeqnqzva";a:2:{i:0;s:15:"ext-recordadmin";i:1;R:801;}s:18:"8:erpbeqnqzva-qrfp";a:2:{i:0;R:14107;i:1;R:801;}s:25:"8:erpbeqnqzva-fcrpvnyqrfp";a:2:{i:0;R:14107;i:1;R:801;}s:21:"8:erpbeqnqzva-absbezf";a:2:{i:0;R:14107;i:1;R:801;}s:20:"8:erpbeqnqzva-fryrpg";a:2:{i:0;R:14107;i:1;R:801;}s:24:"8:erpbeqnqzva-perngrglcr";a:2:{i:0;R:14107;i:1;R:801;}s:24:"8:erpbeqnqzva-erpbeqglcr";a:2:{i:0;R:14107;i:1;R:801;}s:23:"8:erpbeqnqzva-arjfrnepu";a:2:{i:0;R:14107;i:1;R:801;}s:23:"8:erpbeqnqzva-arjerpbeq";a:2:{i:0;R:14107;i:1;R:801;}s:20:"8:erpbeqnqzva-fhozvg";a:2:{i:0;R:14107;i:1;R:801;}s:20:"8:erpbeqnqzva-perngr";a:2:{i:0;R:14107;i:1;R:801;}s:26:"8:erpbeqnqzva-nyernqlrkvfg";a:2:{i:0;R:14107;i:1;R:801;}s:27:"8:erpbeqnqzva-perngrfhpprff";a:2:{i:0;R:14107;i:1;R:801;}s:25:"8:erpbeqnqzva-perngrreebe";a:2:{i:0;R:14107;i:1;R:801;}s:22:"8:erpbeqnqzva-onqgvgyr";a:2:{i:0;R:14107;i:1;R:801;}s:22:"8:erpbeqnqzva-erpbeqvq";a:2:{i:0;R:14107;i:1;R:801;}s:20:"8:erpbeqnqzva-vaireg";a:2:{i:0;R:14107;i:1;R:801;}s:26:"8:erpbeqnqzva-ohggbafrnepu";a:2:{i:0;R:14107;i:1;R:801;}s:26:"8:erpbeqnqzva-ohggbaperngr";a:2:{i:0;R:14107;i:1;R:801;}s:25:"8:erpbeqnqzva-ohggbaerfrg";a:2:{i:0;R:14107;i:1;R:801;}s:26:"8:erpbeqnqzva-frnepuerfhyg";a:2:{i:0;R:14107;i:1;R:801;}s:21:"8:erpbeqnqzva-abzngpu";a:2:{i:0;R:14107;i:1;R:801;}s:25:"8:erpbeqnqzva-glcrhcqngrq";a:2:{i:0;R:14107;i:1;R:801;}s:24:"8:erpbeqnqzva-ohggbafnir";a:2:{i:0;R:14107;i:1;R:801;}s:20:"8:erpbeqnqzva-absbez";a:2:{i:0;R:14107;i:1;R:801;}s:24:"8:erpbeqnqzva-perngryvax";a:2:{i:0;R:14107;i:1;R:801;}s:24:"8:erpbeqnqzva-arjperngrq";a:2:{i:0;R:14107;i:1;R:801;}s:33:"8:erpbeqnqzva-fhzznel-glcrperngrq";a:2:{i:0;R:14107;i:1;R:801;}s:22:"8:erpbeqnqzva-ivrjyvax";a:2:{i:0;R:14107;i:1;R:801;}s:22:"8:erpbeqnqzva-rqvgyvax";a:2:{i:0;R:14107;i:1;R:801;}s:19:"8:erpbeqnqzva-gvgyr";a:2:{i:0;R:14107;i:1;R:801;}s:21:"8:erpbeqnqzva-perngrq";a:2:{i:0;R:14107;i:1;R:801;}s:22:"8:erpbeqnqzva-zbqvsvrq";a:2:{i:0;R:14107;i:1;R:801;}s:21:"8:erpbeqnqzva-npgvbaf";a:2:{i:0;R:14107;i:1;R:801;}s:26:"8:erpbeqnqzva-arrqfpbagrag";a:2:{i:0;R:14107;i:1;R:801;}s:19:"8:evtug-erpbeqnqzva";a:2:{i:0;R:14107;i:1;R:801;}s:24:"8:erpbeqnqzva-rkcbeg-pfi";a:2:{i:0;R:14107;i:1;R:801;}s:24:"8:erpbeqnqzva-rkcbeg-cqs";a:2:{i:0;R:14107;i:1;R:801;}s:20:"8:erpbeqnqzva-abgfrg";a:2:{i:0;R:14107;i:1;R:801;}s:23:"8:erpbeqnqzva-rqvg-vasb";a:2:{i:0;R:14107;i:1;R:801;}s:24:"8:erpbeqnqzva-cebcregvrf";a:2:{i:0;R:14107;i:1;R:801;}s:15:"8:erqverpg-qrfp";a:2:{i:0;s:12:"ext-redirect";i:1;R:801;}s:24:"8:erqverpg-nqqarjnppbhag";a:2:{i:0;R:14149;i:1;R:801;}s:29:"8:erqverpg-hfreybtbhgpbzcyrgr";a:2:{i:0;R:14149;i:1;R:801;}s:11:"8:ersurycre";a:2:{i:0;s:13:"ext-refhelper";i:1;R:801;}s:11:"8:ersfrnepu";a:2:{i:0;R:14153;i:1;R:801;}s:16:"8:ersurycre-qrfp";a:2:{i:0;R:14153;i:1;R:801;}s:21:"8:ersurycre-ersfrnepu";a:2:{i:0;R:14153;i:1;R:801;}s:28:"8:ersurycre-ersperngr_yrtraq";a:2:{i:0;R:14153;i:1;R:801;}s:28:"8:ersurycre-ersfrnepu_yrtraq";a:2:{i:0;R:14153;i:1;R:801;}s:29:"8:ersurycre-ersperngr_nabgure";a:2:{i:0;R:14153;i:1;R:801;}s:33:"8:ersurycre-ersperngr_nhgbpbzzrag";a:2:{i:0;R:14153;i:1;R:801;}s:29:"8:ersurycre-ersperngr_fhpprff";a:2:{i:0;R:14153;i:1;R:801;}s:29:"8:ersurycre-ersperngr_snvyher";a:2:{i:0;R:14153;i:1;R:801;}s:27:"8:ersurycre-ynory_jbexfcnpr";a:2:{i:0;R:14153;i:1;R:801;}s:32:"8:ersurycre-ynory_nhgubesberanzr";a:2:{i:0;R:14153;i:1;R:801;}s:31:"8:ersurycre-ynory_nhgubefheanzr";a:2:{i:0;R:14153;i:1;R:801;}s:17:"8:ersurycre-gvgyr";a:2:{i:0;R:14153;i:1;R:801;}s:19:"8:ersurycre-wbheany";a:2:{i:0;R:14153;i:1;R:801;}s:18:"8:ersurycre-ibyhzr";a:2:{i:0;R:14153;i:1;R:801;}s:17:"8:ersurycre-cntrf";a:2:{i:0;R:14153;i:1;R:801;}s:16:"8:ersurycre-lrne";a:2:{i:0;R:14153;i:1;R:801;}s:19:"8:ersurycre-ersanzr";a:2:{i:0;R:14153;i:1;R:801;}s:20:"8:ersurycre-pngrtbel";a:2:{i:0;R:14153;i:1;R:801;}s:18:"8:ersurycre-perngr";a:2:{i:0;R:14153;i:1;R:801;}s:18:"8:ersurycre-frnepu";a:2:{i:0;R:14153;i:1;R:801;}s:31:"8:ersurycre-gbbyobk_yvax_perngr";a:2:{i:0;R:14153;i:1;R:801;}s:31:"8:ersurycre-gbbyobk_yvax_frnepu";a:2:{i:0;R:14153;i:1;R:801;}s:33:"8:ersurycre-arjnegvpyr_abpvgngvba";a:2:{i:0;R:14153;i:1;R:801;}s:34:"8:ersurycre-arjnegvpyr_fhttrfgvbaf";a:2:{i:0;R:14153;i:1;R:801;}s:36:"8:ersurycre-arjnegvpyr_abfhttrfgvbaf";a:2:{i:0;R:14153;i:1;R:801;}s:14:"8:ersyrpg-qrfp";a:2:{i:0;s:11:"ext-reflect";i:1;R:801;}s:18:"8:ersyrpg-ohyyrgrq";a:2:{i:0;R:14181;i:1;R:801;}s:26:"8:ersyrpg-ohyyrgrq-fhowrpg";a:2:{i:0;R:14181;i:1;R:801;}s:19:"8:ersyrpg-erfcbaqrq";a:2:{i:0;R:14181;i:1;R:801;}s:27:"8:ersyrpg-erfcbaqrq-fhowrpg";a:2:{i:0;R:14181;i:1;R:801;}s:16:"8:erserfufcrpvny";a:2:{i:0;s:18:"ext-refreshspecial";i:1;R:801;}s:21:"8:erserfufcrpvny-qrfp";a:2:{i:0;R:14187;i:1;R:801;}s:22:"8:erserfufcrpvny-gvgyr";a:2:{i:0;R:14187;i:1;R:801;}s:21:"8:erserfufcrpvny-uryc";a:2:{i:0;R:14187;i:1;R:801;}s:23:"8:erserfufcrpvny-ohggba";a:2:{i:0;R:14187;i:1;R:801;}s:21:"8:erserfufcrpvny-snvy";a:2:{i:0;R:14187;i:1;R:801;}s:27:"8:erserfufcrpvny-erserfuvat";a:2:{i:0;R:14187;i:1;R:801;}s:24:"8:erserfufcrpvny-fxvccrq";a:2:{i:0;R:14187;i:1;R:801;}s:23:"8:erserfufcrpvny-pubvpr";a:2:{i:0;R:14187;i:1;R:801;}s:28:"8:erserfufcrpvny-wf-qvfnoyrq";a:2:{i:0;R:14187;i:1;R:801;}s:33:"8:erserfufcrpvny-fryrpg-nyy-cntrf";a:2:{i:0;R:14187;i:1;R:801;}s:26:"8:erserfufcrpvny-yvax-onpx";a:2:{i:0;R:14187;i:1;R:801;}s:30:"8:erserfufcrpvny-abar-fryrpgrq";a:2:{i:0;R:14187;i:1;R:801;}s:25:"8:erserfufcrpvny-qo-reebe";a:2:{i:0;R:14187;i:1;R:801;}s:24:"8:erserfufcrpvny-ab-cntr";a:2:{i:0;R:14187;i:1;R:801;}s:29:"8:erserfufcrpvny-fynir-ynttrq";a:2:{i:0;R:14187;i:1;R:801;}s:28:"8:erserfufcrpvny-erpbaarpgrq";a:2:{i:0;R:14187;i:1;R:801;}s:29:"8:erserfufcrpvny-erpbaarpgvat";a:2:{i:0;R:14187;i:1;R:801;}s:28:"8:erserfufcrpvny-cntr-erfhyg";a:2:{i:0;R:14187;i:1;R:801;}s:30:"8:erserfufcrpvny-gbgny-qvfcynl";a:2:{i:0;R:14187;i:1;R:801;}s:22:"8:evtug-erserfufcrpvny";a:2:{i:0;R:14187;i:1;R:801;}s:12:"8:ertrkoybpx";a:2:{i:0;s:14:"ext-regexblock";i:1;R:801;}s:28:"8:ertrkoybpx-nyernql-oybpxrq";a:2:{i:0;R:14209;i:1;R:801;}s:22:"8:ertrkoybpx-oybpx-ybt";a:2:{i:0;R:14209;i:1;R:801;}s:26:"8:ertrkoybpx-oybpx-fhpprff";a:2:{i:0;R:14209;i:1;R:801;}s:30:"8:ertrkoybpx-pheeragyl-oybpxrq";a:2:{i:0;R:14209;i:1;R:801;}s:17:"8:ertrkoybpx-qrfp";a:2:{i:0;R:14209;i:1;R:801;}s:28:"8:ertrkoybpx-rkcver-qhengvba";a:2:{i:0;R:14209;i:1;R:801;}s:23:"8:ertrkoybpx-cntr-gvgyr";a:2:{i:0;R:14209;i:1;R:801;}s:17:"8:ertrkoybpxfgngf";a:2:{i:0;R:14209;i:1;R:801;}s:17:"8:ertrkoybpx-uryc";a:2:{i:0;R:14209;i:1;R:801;}s:25:"8:ertrkoybpx-cntr-gvgyr-1";a:2:{i:0;R:14209;i:1;R:801;}s:22:"8:ertrkoybpx-ernfba-vc";a:2:{i:0;R:14209;i:1;R:801;}s:24:"8:ertrkoybpx-ernfba-anzr";a:2:{i:0;R:14209;i:1;R:801;}s:25:"8:ertrkoybpx-ernfba-ertrk";a:2:{i:0;R:14209;i:1;R:801;}s:26:"8:ertrkoybpx-sbez-hfreanzr";a:2:{i:0;R:14209;i:1;R:801;}s:24:"8:ertrkoybpx-sbez-ernfba";a:2:{i:0;R:14209;i:1;R:801;}s:24:"8:ertrkoybpx-sbez-rkcvel";a:2:{i:0;R:14209;i:1;R:801;}s:23:"8:ertrkoybpx-sbez-zngpu";a:2:{i:0;R:14209;i:1;R:801;}s:31:"8:ertrkoybpx-sbez-nppbhag-oybpx";a:2:{i:0;R:14209;i:1;R:801;}s:24:"8:ertrkoybpx-sbez-fhozvg";a:2:{i:0;R:14209;i:1;R:801;}s:30:"8:ertrkoybpx-sbez-fhozvg-rzcgl";a:2:{i:0;R:14209;i:1;R:801;}s:30:"8:ertrkoybpx-sbez-fhozvg-ertrk";a:2:{i:0;R:14209;i:1;R:801;}s:31:"8:ertrkoybpx-sbez-fhozvg-rkcvel";a:2:{i:0;R:14209;i:1;R:801;}s:17:"8:ertrkoybpx-yvax";a:2:{i:0;R:14209;i:1;R:801;}s:31:"8:ertrkoybpx-zngpu-fgngf-erpbeq";a:2:{i:0;R:14209;i:1;R:801;}s:25:"8:ertrkoybpx-abqngn-sbhaq";a:2:{i:0;R:14209;i:1;R:801;}s:24:"8:ertrkoybpx-fgngf-gvgyr";a:2:{i:0;R:14209;i:1;R:801;}s:28:"8:ertrkoybpx-haoybpx-fhpprff";a:2:{i:0;R:14209;i:1;R:801;}s:24:"8:ertrkoybpx-haoybpx-ybt";a:2:{i:0;R:14209;i:1;R:801;}s:26:"8:ertrkoybpx-haoybpx-reebe";a:2:{i:0;R:14209;i:1;R:801;}s:25:"8:ertrkoybpx-ertrk-svygre";a:2:{i:0;R:14209;i:1;R:801;}s:25:"8:ertrkoybpx-ivrj-oybpxrq";a:2:{i:0;R:14209;i:1;R:801;}s:21:"8:ertrkoybpx-ivrj-nyy";a:2:{i:0;R:14209;i:1;R:801;}s:20:"8:ertrkoybpx-ivrj-tb";a:2:{i:0;R:14209;i:1;R:801;}s:23:"8:ertrkoybpx-ivrj-zngpu";a:2:{i:0;R:14209;i:1;R:801;}s:23:"8:ertrkoybpx-ivrj-ertrk";a:2:{i:0;R:14209;i:1;R:801;}s:25:"8:ertrkoybpx-ivrj-nppbhag";a:2:{i:0;R:14209;i:1;R:801;}s:24:"8:ertrkoybpx-ivrj-ernfba";a:2:{i:0;R:14209;i:1;R:801;}s:32:"8:ertrkoybpx-ivrj-ernfba-qrsnhyg";a:2:{i:0;R:14209;i:1;R:801;}s:32:"8:ertrkoybpx-ivrj-oybpx-vasvavgr";a:2:{i:0;R:14209;i:1;R:801;}s:26:"8:ertrkoybpx-ivrj-oybpx-ol";a:2:{i:0;R:14209;i:1;R:801;}s:31:"8:ertrkoybpx-ivrj-oybpx-haoybpx";a:2:{i:0;R:14209;i:1;R:801;}s:23:"8:ertrkoybpx-ivrj-fgngf";a:2:{i:0;R:14209;i:1;R:801;}s:23:"8:ertrkoybpx-ivrj-rzcgl";a:2:{i:0;R:14209;i:1;R:801;}s:22:"8:ertrkoybpx-ivrj-gvzr";a:2:{i:0;R:14209;i:1;R:801;}s:18:"8:evtug-ertrkoybpx";a:2:{i:0;R:14209;i:1;R:801;}s:15:"8:ertrksha-qrfp";a:2:{i:0;s:12:"ext-regexfun";i:1;R:801;}s:18:"8:ertrksha-vainyvq";a:2:{i:0;R:14256;i:1;R:801;}s:23:"8:ertrksha-yvzvg-rkprrq";a:2:{i:0;R:14256;i:1;R:801;}s:21:"8:ertrkshapgvbaf-qrfp";a:2:{i:0;s:18:"ext-regexfunctions";i:1;R:801;}s:20:"8:eryngvbayvaxf-qrfp";a:2:{i:0;s:17:"ext-relationlinks";i:1;R:801;}s:17:"8:ercynprfrg-qrfp";a:2:{i:0;s:14:"ext-replaceset";i:1;R:801;}s:28:"8:ercynprfrg-reebe-pnyyyvzvg";a:2:{i:0;R:14264;i:1;R:801;}s:29:"8:ercynprfrg-reebe-ertrkabraq";a:2:{i:0;R:14264;i:1;R:801;}s:35:"8:ercynprfrg-reebe-ertrkonqzbqvsvre";a:2:{i:0;R:14264;i:1;R:801;}s:13:"8:ercynprgrkg";a:2:{i:0;s:15:"ext-replacetext";i:1;R:801;}s:18:"8:ercynprgrkg-qrfp";a:2:{i:0;R:14269;i:1;R:801;}s:18:"8:ercynprgrkg_qbph";a:2:{i:0;R:14269;i:1;R:801;}s:26:"8:ercynprgrkg_bevtvanygrkg";a:2:{i:0;R:14269;i:1;R:801;}s:29:"8:ercynprgrkg_ercynprzraggrkg";a:2:{i:0;R:14269;i:1;R:801;}s:22:"8:ercynprgrkg_hfrertrk";a:2:{i:0;R:14269;i:1;R:801;}s:23:"8:ercynprgrkg_ertrkqbph";a:2:{i:0;R:14269;i:1;R:801;}s:29:"8:ercynprgrkg_bcgvbanysvygref";a:2:{i:0;R:14269;i:1;R:801;}s:28:"8:ercynprgrkg_pngrtbelfrnepu";a:2:{i:0;R:14269;i:1;R:801;}s:26:"8:ercynprgrkg_cersvkfrnepu";a:2:{i:0;R:14269;i:1;R:801;}s:23:"8:ercynprgrkg_rqvgcntrf";a:2:{i:0;R:14269;i:1;R:801;}s:23:"8:ercynprgrkg_zbircntrf";a:2:{i:0;R:14269;i:1;R:801;}s:24:"8:ercynprgrkg_tvirgnetrg";a:2:{i:0;R:14269;i:1;R:801;}s:25:"8:ercynprgrkg_abanzrfcnpr";a:2:{i:0;R:14269;i:1;R:801;}s:24:"8:ercynprgrkg_rqvgbezbir";a:2:{i:0;R:14269;i:1;R:801;}s:32:"8:ercynprgrkg_pubbfrcntrfsberqvg";a:2:{i:0;R:14269;i:1;R:801;}s:32:"8:ercynprgrkg_pubbfrcntrfsbezbir";a:2:{i:0;R:14269;i:1;R:801;}s:24:"8:ercynprgrkg_pnaabgzbir";a:2:{i:0;R:14269;i:1;R:801;}s:27:"8:ercynprgrkg_sbezbirqcntrf";a:2:{i:0;R:14269;i:1;R:801;}s:28:"8:ercynprgrkg_fnirzbirqcntrf";a:2:{i:0;R:14269;i:1;R:801;}s:29:"8:ercynprgrkg_jngpuzbirqcntrf";a:2:{i:0;R:14269;i:1;R:801;}s:30:"8:ercynprgrkg_vairegfryrpgvbaf";a:2:{i:0;R:14269;i:1;R:801;}s:21:"8:ercynprgrkg_ercynpr";a:2:{i:0;R:14269;i:1;R:801;}s:21:"8:ercynprgrkg_fhpprff";a:2:{i:0;R:14269;i:1;R:801;}s:27:"8:ercynprgrkg_abercynprzrag";a:2:{i:0;R:14269;i:1;R:801;}s:20:"8:ercynprgrkg_abzbir";a:2:{i:0;R:14269;i:1;R:801;}s:28:"8:ercynprgrkg_abfhpupngrtbel";a:2:{i:0;R:14269;i:1;R:801;}s:20:"8:ercynprgrkg_erghea";a:2:{i:0;R:14269;i:1;R:801;}s:21:"8:ercynprgrkg_jneavat";a:2:{i:0;R:14269;i:1;R:801;}s:26:"8:ercynprgrkg_oynaxjneavat";a:2:{i:0;R:14269;i:1;R:801;}s:22:"8:ercynprgrkg_pbagvahr";a:2:{i:0;R:14269;i:1;R:801;}s:25:"8:ercynprgrkg_rqvgfhzznel";a:2:{i:0;R:14269;i:1;R:801;}s:19:"8:evtug-ercynprgrkg";a:2:{i:0;R:14269;i:1;R:801;}s:15:"8:erfrnepugbbyf";a:2:{i:0;s:17:"ext-researchtools";i:1;R:801;}s:20:"8:erfrnepugbbyf-qrfp";a:2:{i:0;R:14303;i:1;R:801;}s:30:"8:erfrnepugbbyf-cntr-qnfuobneq";a:2:{i:0;R:14303;i:1;R:801;}s:28:"8:erfrnepugbbyf-cntr-fheirlf";a:2:{i:0;R:14303;i:1;R:801;}s:27:"8:erfrnepugbbyf-cntr-pyvpxf";a:2:{i:0;R:14303;i:1;R:801;}s:26:"8:erfrnepugbbyf-cntr-cersf";a:2:{i:0;R:14303;i:1;R:801;}s:22:"8:erfhznoyrhcybnq-qrfp";a:2:{i:0;s:19:"ext-resumableupload";i:1;R:801;}s:21:"8:evtugshapgvbaf-qrfp";a:2:{i:0;s:18:"ext-rightfunctions";i:1;R:801;}s:22:"8:evtugshapgvbaf-erfg1";a:2:{i:0;R:14312;i:1;R:801;}s:22:"8:evtugshapgvbaf-erfg2";a:2:{i:0;R:14312;i:1;R:801;}s:22:"8:evtugshapgvbaf-erfg3";a:2:{i:0;R:14312;i:1;R:801;}s:20:"8:evtugshapgvbaf-frc";a:2:{i:0;R:14312;i:1;R:801;}s:21:"8:evtugshapgvbaf-pnfp";a:2:{i:0;R:14312;i:1;R:801;}s:22:"8:evtugshapgvbaf-ybpny";a:2:{i:0;R:14312;i:1;R:801;}s:19:"8:evtugshapgvbaf-af";a:2:{i:0;R:14312;i:1;R:801;}s:6:"8:ecrq";a:2:{i:0;s:8:"ext-rped";i:1;R:801;}s:11:"8:ecrq-qrfp";a:2:{i:0;R:14321;i:1;R:801;}s:20:"8:ecrq-jvxvcrqvn-hey";a:2:{i:0;R:14321;i:1;R:801;}s:9:"8:eg-qrfp";a:2:{i:0;s:6:"ext-rt";i:1;R:801;}s:13:"8:eg-vanpgvir";a:2:{i:0;R:14325;i:1;R:801;}s:13:"8:eg-onqdhrel";a:2:{i:0;R:14325;i:1;R:801;}s:13:"8:eg-onqyvzvg";a:2:{i:0;R:14325;i:1;R:801;}s:15:"8:eg-onqbeqreol";a:2:{i:0;R:14325;i:1;R:801;}s:14:"8:eg-onqfgnghf";a:2:{i:0;R:14325;i:1;R:801;}s:14:"8:eg-onqpsvryq";a:2:{i:0;R:14325;i:1;R:801;}s:13:"8:eg-onqdhrhr";a:2:{i:0;R:14325;i:1;R:801;}s:13:"8:eg-onqbjare";a:2:{i:0;R:14325;i:1;R:801;}s:14:"8:eg-abzngpurf";a:2:{i:0;R:14325;i:1;R:801;}s:27:"8:fpber-nop2ylabgrkrphgnoyr";a:2:{i:0;s:9:"ext-score";i:1;R:801;}s:24:"8:fpber-noppbairefvbaree";a:2:{i:0;R:14336;i:1;R:801;}s:16:"8:fpber-puqveree";a:2:{i:0;R:14336;i:1;R:801;}s:16:"8:fpber-pyrnaree";a:2:{i:0;R:14336;i:1;R:801;}s:19:"8:fpber-pbzcvyreree";a:2:{i:0;R:14336;i:1;R:801;}s:12:"8:fpber-qrfp";a:2:{i:0;R:14336;i:1;R:801;}s:17:"8:fpber-trgpjqree";a:2:{i:0;R:14336;i:1;R:801;}s:19:"8:fpber-vainyvqynat";a:2:{i:0;R:14336;i:1;R:801;}s:26:"8:fpber-vainyvqbttbireevqr";a:2:{i:0;R:14336;i:1;R:801;}s:28:"8:fpber-zvqvbireevqrabgsbhaq";a:2:{i:0;R:14336;i:1;R:801;}s:18:"8:fpber-abnopvachg";a:2:{i:0;R:14336;i:1;R:801;}s:16:"8:fpber-abvzntrf";a:2:{i:0;R:14336;i:1;R:801;}s:15:"8:fpber-abvachg";a:2:{i:0;R:14336;i:1;R:801;}s:20:"8:fpber-abbttunaqyre";a:2:{i:0;R:14336;i:1;R:801;}s:14:"8:fpber-abzvqv";a:2:{i:0;R:14336;i:1;R:801;}s:16:"8:fpber-abbhgchg";a:2:{i:0;R:14336;i:1;R:801;}s:21:"8:fpber-abgrkrphgnoyr";a:2:{i:0;R:14336;i:1;R:801;}s:20:"8:fpber-abibeovfyvax";a:2:{i:0;R:14336;i:1;R:801;}s:24:"8:fpber-bttpbairefvbaree";a:2:{i:0;R:14336;i:1;R:801;}s:27:"8:fpber-bttbireevqrabgsbhaq";a:2:{i:0;R:14336;i:1;R:801;}s:12:"8:fpber-cntr";a:2:{i:0;R:14336;i:1;R:801;}s:22:"8:fpber-certercynprree";a:2:{i:0;R:14336;i:1;R:801;}s:15:"8:fpber-ernqree";a:2:{i:0;R:14336;i:1;R:801;}s:29:"8:fpber-gvzvqvglabgrkrphgnoyr";a:2:{i:0;R:14336;i:1;R:801;}s:17:"8:fpber-eranzrree";a:2:{i:0;R:14336;i:1;R:801;}s:15:"8:fpber-gevzree";a:2:{i:0;R:14336;i:1;R:801;}s:18:"8:fpber-irefvbaree";a:2:{i:0;R:14336;i:1;R:801;}s:25:"8:fpber-ibeovfbireevqrbtt";a:2:{i:0;R:14336;i:1;R:801;}s:16:"8:frnepuobk-qrfp";a:2:{i:0;s:13:"ext-searchbox";i:1;R:801;}s:18:"8:frnepuobk-frnepu";a:2:{i:0;R:14365;i:1;R:801;}s:14:"8:frnepuobk-tb";a:2:{i:0;R:14365;i:1;R:801;}s:22:"8:frnepuobk-anzrfcnprf";a:2:{i:0;R:14365;i:1;R:801;}s:22:"8:frphercnffjbeqf-qrfp";a:2:{i:0;s:19:"ext-securepasswords";i:1;R:801;}s:23:"8:frphercnffjbeqf-inyvq";a:2:{i:0;R:14370;i:1;R:801;}s:27:"8:frphercnffjbeqf-zvayratgu";a:2:{i:0;R:14370;i:1;R:801;}s:27:"8:frphercnffjbeqf-ybjrepnfr";a:2:{i:0;R:14370;i:1;R:801;}s:27:"8:frphercnffjbeqf-hccrepnfr";a:2:{i:0;R:14370;i:1;R:801;}s:23:"8:frphercnffjbeqf-qvtvg";a:2:{i:0;R:14370;i:1;R:801;}s:25:"8:frphercnffjbeqf-fcrpvny";a:2:{i:0;R:14370;i:1;R:801;}s:26:"8:frphercnffjbeqf-hfreanzr";a:2:{i:0;R:14370;i:1;R:801;}s:22:"8:frphercnffjbeqf-jbeq";a:2:{i:0;R:14370;i:1;R:801;}s:9:"8:frrnyfb";a:2:{i:0;s:11:"ext-seealso";i:1;R:801;}s:14:"8:frrnyfb-qrfp";a:2:{i:0;R:14380;i:1;R:801;}s:11:"8:fnpy-qrfp";a:2:{i:0;s:15:"ext-semanticacl";i:1;R:801;}s:13:"8:fnpy-qravrq";a:2:{i:0;R:14383;i:1;R:801;}s:19:"8:evtug-fnpy-rkrzcg";a:2:{i:0;R:14383;i:1;R:801;}s:26:"8:fnpy-cebcregl-ivfvovyvgl";a:2:{i:0;R:14383;i:1;R:801;}s:35:"8:fnpy-cebcregl-ivfvovyvgl-jy-tebhc";a:2:{i:0;R:14383;i:1;R:801;}s:34:"8:fnpy-cebcregl-ivfvovyvgl-jy-hfre";a:2:{i:0;R:14383;i:1;R:801;}s:24:"8:fnpy-cebcregl-rqvgnoyr";a:2:{i:0;R:14383;i:1;R:801;}s:33:"8:fnpy-cebcregl-rqvgnoyr-jy-tebhc";a:2:{i:0;R:14383;i:1;R:801;}s:32:"8:fnpy-cebcregl-rqvgnoyr-jy-hfre";a:2:{i:0;R:14383;i:1;R:801;}s:30:"8:frznagvppbzcbhaqdhrevrf-qrfp";a:2:{i:0;s:27:"ext-semanticcompoundqueries";i:1;R:801;}s:10:"8:fqg-qrfp";a:2:{i:0;s:21:"ext-semanticdatatypes";i:1;R:801;}s:14:"8:fqg-qhengvba";a:2:{i:0;R:14395;i:1;R:801;}s:24:"8:frznagvpqevyyqbja-qrfp";a:2:{i:0;s:21:"ext-semanticdrilldown";i:1;R:801;}s:29:"8:fcrpvnycntrf-tebhc-fq_tebhc";a:2:{i:0;R:14398;i:1;R:801;}s:12:"8:oebjfrqngn";a:2:{i:0;R:14398;i:1;R:801;}s:30:"8:fq_oebjfrqngn_pubbfrpngrtbel";a:2:{i:0;R:14398;i:1;R:801;}s:28:"8:fq_oebjfrqngn_ivrjpngrtbel";a:2:{i:0;R:14398;i:1;R:801;}s:20:"8:fq_oebjfrqngn_qbph";a:2:{i:0;R:14398;i:1;R:801;}s:27:"8:fq_oebjfrqngn_fhopngrtbel";a:2:{i:0;R:14398;i:1;R:801;}s:21:"8:fq_oebjfrqngn_bgure";a:2:{i:0;R:14398;i:1;R:801;}s:20:"8:fq_oebjfrqngn_abar";a:2:{i:0;R:14398;i:1;R:801;}s:29:"8:fq_oebjfrqngn_svygreolinyhr";a:2:{i:0;R:14398;i:1;R:801;}s:35:"8:fq_oebjfrqngn_svygreolfhopngrtbel";a:2:{i:0;R:14398;i:1;R:801;}s:27:"8:fq_oebjfrqngn_bguresvygre";a:2:{i:0;R:14398;i:1;R:801;}s:26:"8:fq_oebjfrqngn_abarsvygre";a:2:{i:0;R:14398;i:1;R:801;}s:18:"8:fq_oebjfrqngn_be";a:2:{i:0;R:14398;i:1;R:801;}s:28:"8:fq_oebjfrqngn_erzbirsvygre";a:2:{i:0;R:14398;i:1;R:801;}s:39:"8:fq_oebjfrqngn_erzbirfhopngrtbelsvygre";a:2:{i:0;R:14398;i:1;R:801;}s:28:"8:fq_oebjfrqngn_erfrgsvygref";a:2:{i:0;R:14398;i:1;R:801;}s:31:"8:fq_oebjfrqngn_nqqnabgureinyhr";a:2:{i:0;R:14398;i:1;R:801;}s:30:"8:fq_oebjfrqngn_qngrenatrfgneg";a:2:{i:0;R:14398;i:1;R:801;}s:28:"8:fq_oebjfrqngn_qngrenatrraq";a:2:{i:0;R:14398;i:1;R:801;}s:24:"8:fq_oebjfrqngn_abinyhrf";a:2:{i:0;R:14398;i:1;R:801;}s:9:"8:svygref";a:2:{i:0;R:14398;i:1;R:801;}s:17:"8:fq_svygref_qbph";a:2:{i:0;R:14398;i:1;R:801;}s:14:"8:perngrsvygre";a:2:{i:0;R:14398;i:1;R:801;}s:22:"8:fq_perngrsvygre_anzr";a:2:{i:0;R:14398;i:1;R:801;}s:26:"8:fq_perngrsvygre_cebcregl";a:2:{i:0;R:14398;i:1;R:801;}s:35:"8:fq_perngrsvygre_hfrcebcreglinyhrf";a:2:{i:0;R:14398;i:1;R:801;}s:35:"8:fq_perngrsvygre_hfrpngrtbelinyhrf";a:2:{i:0;R:14398;i:1;R:801;}s:31:"8:fq_perngrsvygre_hfrqngrinyhrf";a:2:{i:0;R:14398;i:1;R:801;}s:29:"8:fq_perngrsvygre_ragreinyhrf";a:2:{i:0;R:14398;i:1;R:801;}s:27:"8:fq_perngrsvygre_vachgglcr";a:2:{i:0;R:14398;i:1;R:801;}s:30:"8:fq_perngrsvygre_yvfgbsinyhrf";a:2:{i:0;R:14398;i:1;R:801;}s:31:"8:fq_perngrsvygre_erdhversvygre";a:2:{i:0;R:14398;i:1;R:801;}s:23:"8:fq_perngrsvygre_ynory";a:2:{i:0;R:14398;i:1;R:801;}s:16:"8:fq_oynax_reebe";a:2:{i:0;R:14398;i:1;R:801;}s:23:"8:fq-cntrfpurznf-svygre";a:2:{i:0;R:14398;i:1;R:801;}s:23:"8:fq-cntrfpurznf-inyhrf";a:2:{i:0;R:14398;i:1;R:801;}s:26:"8:fq_svygre_pbirefcebcregl";a:2:{i:0;R:14398;i:1;R:801;}s:34:"8:fq_svygre_trgfinyhrfsebzpngrtbel";a:2:{i:0;R:14398;i:1;R:801;}s:26:"8:fq_svygre_hfrfgvzrcrevbq";a:2:{i:0;R:14398;i:1;R:801;}s:16:"8:fq_svygre_lrne";a:2:{i:0;R:14398;i:1;R:801;}s:17:"8:fq_svygre_zbagu";a:2:{i:0;R:14398;i:1;R:801;}s:21:"8:fq_svygre_unfinyhrf";a:2:{i:0;R:14398;i:1;R:801;}s:24:"8:fq_svygre_unfvachgglcr";a:2:{i:0;R:14398;i:1;R:801;}s:20:"8:fq_svygre_pbzobobk";a:2:{i:0;R:14398;i:1;R:801;}s:20:"8:fq_svygre_serrgrkg";a:2:{i:0;R:14398;i:1;R:801;}s:21:"8:fq_svygre_qngrenatr";a:2:{i:0;R:14398;i:1;R:801;}s:26:"8:fq_svygre_erdhverfsvygre";a:2:{i:0;R:14398;i:1;R:801;}s:20:"8:fq_svygre_unfynory";a:2:{i:0;R:14398;i:1;R:801;}s:20:"8:frznagvpsbezf-qrfp";a:2:{i:0;s:17:"ext-semanticforms";i:1;R:801;}s:29:"8:fcrpvnycntrf-tebhc-fs_tebhc";a:2:{i:0;R:14448;i:1;R:801;}s:16:"8:perngrcebcregl";a:2:{i:0;R:14448;i:1;R:801;}s:30:"8:fs_perngrcebcregl_yvaxgbsbez";a:2:{i:0;R:14448;i:1;R:801;}s:36:"8:fs_perngrcebcregl_nyybjrqinyfvachg";a:2:{i:0;R:14448;i:1;R:801;}s:28:"8:fs_perngrcebcregl_cebcanzr";a:2:{i:0;R:14448;i:1;R:801;}s:28:"8:fs_perngrcebcregl_cebcglcr";a:2:{i:0;R:14448;i:1;R:801;}s:11:"8:grzcyngrf";a:2:{i:0;R:14448;i:1;R:801;}s:19:"8:fs_grzcyngrf_qbph";a:2:{i:0;R:14448;i:1;R:801;}s:25:"8:fs_grzcyngrf_qrsvarfpng";a:2:{i:0;R:14448;i:1;R:801;}s:16:"8:perngrgrzcyngr";a:2:{i:0;R:14448;i:1;R:801;}s:29:"8:fs_perngrgrzcyngr_anzrynory";a:2:{i:0;R:14448;i:1;R:801;}s:33:"8:fs_perngrgrzcyngr_pngrtbelynory";a:2:{i:0;R:14448;i:1;R:801;}s:34:"8:fs_perngrgrzcyngr_grzcyngrsvryqf";a:2:{i:0;R:14448;i:1;R:801;}s:30:"8:fs_perngrgrzcyngr_svryqfqrfp";a:2:{i:0;R:14448;i:1;R:801;}s:29:"8:fs_perngrgrzcyngr_svryqanzr";a:2:{i:0;R:14448;i:1;R:801;}s:32:"8:fs_perngrgrzcyngr_qvfcynlynory";a:2:{i:0;R:14448;i:1;R:801;}s:36:"8:fs_perngrgrzcyngr_frznagvpcebcregl";a:2:{i:0;R:14448;i:1;R:801;}s:31:"8:fs_perngrgrzcyngr_svryqvfyvfg";a:2:{i:0;R:14448;i:1;R:801;}s:31:"8:fs_perngrgrzcyngr_nttertngvba";a:2:{i:0;R:14448;i:1;R:801;}s:35:"8:fs_perngrgrzcyngr_nttertngvbaqrfp";a:2:{i:0;R:14448;i:1;R:801;}s:36:"8:fs_perngrgrzcyngr_nttertngvbaynory";a:2:{i:0;R:14448;i:1;R:801;}s:32:"8:fs_perngrgrzcyngr_bhgchgsbezng";a:2:{i:0;R:14448;i:1;R:801;}s:34:"8:fs_perngrgrzcyngr_fgnaqneqsbezng";a:2:{i:0;R:14448;i:1;R:801;}s:33:"8:fs_perngrgrzcyngr_vasbobksbezng";a:2:{i:0;R:14448;i:1;R:801;}s:28:"8:fs_perngrgrzcyngr_nqqsvryq";a:2:{i:0;R:14448;i:1;R:801;}s:31:"8:fs_perngrgrzcyngr_qryrgrsvryq";a:2:{i:0;R:14448;i:1;R:801;}s:41:"8:fs_perngrgrzcyngr_nqqgrzcyngrorsberfnir";a:2:{i:0;R:14448;i:1;R:801;}s:7:"8:sbezf";a:2:{i:0;R:14448;i:1;R:801;}s:15:"8:fs_sbezf_qbph";a:2:{i:0;R:14448;i:1;R:801;}s:25:"8:fs_sbezvachgf_znaqngbel";a:2:{i:0;R:14448;i:1;R:801;}s:26:"8:fs_sbezvachgf_erfgevpgrq";a:2:{i:0;R:14448;i:1;R:801;}s:21:"8:fs_sbezvachgf_pynff";a:2:{i:0;R:14448;i:1;R:801;}s:23:"8:fs_sbezvachgf_qrsnhyg";a:2:{i:0;R:14448;i:1;R:801;}s:23:"8:fs_sbezvachgf_cerybnq";a:2:{i:0;R:14448;i:1;R:801;}s:24:"8:fs_sbezvachgf_cebcregl";a:2:{i:0;R:14448;i:1;R:801;}s:20:"8:fs_sbezvachgf_fvmr";a:2:{i:0;R:14448;i:1;R:801;}s:25:"8:fs_sbezvachgf_znkyratgu";a:2:{i:0;R:14448;i:1;R:801;}s:27:"8:fs_sbezvachgf_cynprubyqre";a:2:{i:0;R:14448;i:1;R:801;}s:26:"8:fs_sbezvachgf_hcybnqnoyr";a:2:{i:0;R:14448;i:1;R:801;}s:31:"8:fs_sbezvachgf_qrsnhygsvyranzr";a:2:{i:0;R:14448;i:1;R:801;}s:20:"8:fs_sbezvachgf_ebjf";a:2:{i:0;R:14448;i:1;R:801;}s:20:"8:fs_sbezvachgf_pbyf";a:2:{i:0;R:14448;i:1;R:801;}s:24:"8:fs_sbezvachgf_nhgbtebj";a:2:{i:0;R:14448;i:1;R:801;}s:34:"8:fs_sbezvachgf_inyhrfsebzcebcregl";a:2:{i:0;R:14448;i:1;R:801;}s:34:"8:fs_sbezvachgf_inyhrfsebzpngrtbel";a:2:{i:0;R:14448;i:1;R:801;}s:35:"8:fs_sbezvachgf_inyhrfsebzanzrfcnpr";a:2:{i:0;R:14448;i:1;R:801;}s:33:"8:fs_sbezvachgf_inyhrfsebzpbaprcg";a:2:{i:0;R:14448;i:1;R:801;}s:29:"8:fs_sbezvachgf_inyhrfsebzhey";a:2:{i:0;R:14448;i:1;R:801;}s:22:"8:fs_sbezvachgf_inyhrf";a:2:{i:0;R:14448;i:1;R:801;}s:20:"8:fs_sbezvachgf_yvfg";a:2:{i:0;R:14448;i:1;R:801;}s:25:"8:fs_sbezvachgf_qryvzvgre";a:2:{i:0;R:14448;i:1;R:801;}s:36:"8:fs_sbezvachgf_erzbgrnhgbpbzcyrgvba";a:2:{i:0;R:14448;i:1;R:801;}s:34:"8:fs_sbezvachgf_rkvfgvatinyhrfbayl";a:2:{i:0;R:14448;i:1;R:801;}s:28:"8:fs_sbezvachgf_fubjbafryrpg";a:2:{i:0;R:14448;i:1;R:801;}s:27:"8:fs_sbezvachgf_yvfgobkfvmr";a:2:{i:0;R:14448;i:1;R:801;}s:31:"8:fs_sbezvachgf_vapyhqrgvzrmbar";a:2:{i:0;R:14448;i:1;R:801;}s:27:"8:fs_sbezvachgf_gbcpngrtbel";a:2:{i:0;R:14448;i:1;R:801;}s:24:"8:fs_sbezvachgf_uvqrebbg";a:2:{i:0;R:14448;i:1;R:801;}s:21:"8:fs_sbezvachgf_qrcgu";a:2:{i:0;R:14448;i:1;R:801;}s:22:"8:fs_sbezvachgf_urvtug";a:2:{i:0;R:14448;i:1;R:801;}s:21:"8:fs_sbezvachgf_jvqgu";a:2:{i:0;R:14448;i:1;R:801;}s:12:"8:perngrsbez";a:2:{i:0;R:14448;i:1;R:801;}s:25:"8:fs_perngrsbez_anzrvachg";a:2:{i:0;R:14448;i:1;R:801;}s:29:"8:fs_perngrsbez_anzrvachgqrfp";a:2:{i:0;R:14448;i:1;R:801;}s:24:"8:fs_perngrsbez_grzcyngr";a:2:{i:0;R:14448;i:1;R:801;}s:34:"8:fs_perngrsbez_grzcyngrynoryvachg";a:2:{i:0;R:14448;i:1;R:801;}s:29:"8:fs_perngrsbez_nyybjzhygvcyr";a:2:{i:0;R:14448;i:1;R:801;}s:21:"8:fs_perngrsbez_svryq";a:2:{i:0;R:14448;i:1;R:801;}s:25:"8:fs_perngrsbez_svryqcebc";a:2:{i:0;R:14448;i:1;R:801;}s:29:"8:fs_perngrsbez_svryqcebcyvfg";a:2:{i:0;R:14448;i:1;R:801;}s:36:"8:fs_perngrsbez_svryqcebchaxabjaglcr";a:2:{i:0;R:14448;i:1;R:801;}s:25:"8:fs_perngrsbez_vachgglcr";a:2:{i:0;R:14448;i:1;R:801;}s:32:"8:fs_perngrsbez_vachgglcrqrsnhyg";a:2:{i:0;R:14448;i:1;R:801;}s:25:"8:fs_perngrsbez_sbezynory";a:2:{i:0;R:14448;i:1;R:801;}s:22:"8:fs_perngrsbez_uvqqra";a:2:{i:0;R:14448;i:1;R:801;}s:30:"8:fs_perngrsbez_erzbirgrzcyngr";a:2:{i:0;R:14448;i:1;R:801;}s:27:"8:fs_perngrsbez_nqqgrzcyngr";a:2:{i:0;R:14448;i:1;R:801;}s:30:"8:fs_perngrsbez_orsbergrzcyngr";a:2:{i:0;R:14448;i:1;R:801;}s:21:"8:fs_perngrsbez_ngraq";a:2:{i:0;R:14448;i:1;R:801;}s:19:"8:fs_perngrsbez_nqq";a:2:{i:0;R:14448;i:1;R:801;}s:27:"8:fs_perngrsbez_pubbfrsvryq";a:2:{i:0;R:14448;i:1;R:801;}s:16:"8:perngrpngrtbel";a:2:{i:0;R:14448;i:1;R:801;}s:24:"8:fs_perngrpngrtbel_anzr";a:2:{i:0;R:14448;i:1;R:801;}s:31:"8:fs_perngrpngrtbel_qrsnhygsbez";a:2:{i:0;R:14448;i:1;R:801;}s:35:"8:fs_perngrpngrtbel_znxrfhopngrtbel";a:2:{i:0;R:14448;i:1;R:801;}s:13:"8:perngrpynff";a:2:{i:0;R:14448;i:1;R:801;}s:21:"8:fs_perngrpynff_qbph";a:2:{i:0;R:14448;i:1;R:801;}s:30:"8:fs_perngrpynff_nyybjrqinyhrf";a:2:{i:0;R:14448;i:1;R:801;}s:29:"8:fs_perngrpynff_yvfgbsinyhrf";a:2:{i:0;R:14448;i:1;R:801;}s:32:"8:fs_perngrpynff_yrnirsvryqoynax";a:2:{i:0;R:14448;i:1;R:801;}s:26:"8:fs_perngrpynff_anzrvachg";a:2:{i:0;R:14448;i:1;R:801;}s:30:"8:fs_perngrpynff_zvffvatinyhrf";a:2:{i:0;R:14448;i:1;R:801;}s:24:"8:fs_perngrpynff_fhpprff";a:2:{i:0;R:14448;i:1;R:801;}s:23:"8:fs_perngrpynff_perngr";a:2:{i:0;R:14448;i:1;R:801;}s:11:"8:sbezfgneg";a:2:{i:0;R:14448;i:1;R:801;}s:22:"8:fs_sbezfgneg_onqsbez";a:2:{i:0;R:14448;i:1;R:801;}s:23:"8:fs_sbezfgneg_onqgvgyr";a:2:{i:0;R:14448;i:1;R:801;}s:19:"8:fs_sbezfgneg_qbph";a:2:{i:0;R:14448;i:1;R:801;}s:26:"8:fs_sbezfgneg_absbez_qbph";a:2:{i:0;R:14448;i:1;R:801;}s:27:"8:fs_sbezfgneg_perngrberqvg";a:2:{i:0;R:14448;i:1;R:801;}s:10:"8:sbezrqvg";a:2:{i:0;R:14448;i:1;R:801;}s:25:"8:fs_sbezrqvg_perngrgvgyr";a:2:{i:0;R:14448;i:1;R:801;}s:33:"8:fs_sbezrqvg_perngrgvgyrabgnetrg";a:2:{i:0;R:14448;i:1;R:801;}s:20:"8:fs_sbezrqvg_onqhey";a:2:{i:0;R:14448;i:1;R:801;}s:22:"8:fs_sbezrqvg_nygsbezf";a:2:{i:0;R:14448;i:1;R:801;}s:26:"8:fs_sbezrqvg_nygsbezfbayl";a:2:{i:0;R:14448;i:1;R:801;}s:15:"8:fs_sbezperngr";a:2:{i:0;R:14448;i:1;R:801;}s:13:"8:fs_ivrjsbez";a:2:{i:0;R:14448;i:1;R:801;}s:15:"8:fs_rqvgfbhepr";a:2:{i:0;R:14448;i:1;R:801;}s:23:"8:fs_sbezrqvg_rqvggvgyr";a:2:{i:0;R:14448;i:1;R:801;}s:29:"8:fs_sbezrqvg_zbergunabarsbez";a:2:{i:0;R:14448;i:1;R:801;}s:25:"8:fs_sbezrqvg_sbezjneavat";a:2:{i:0;R:14448;i:1;R:801;}s:32:"8:fs_sbezrqvg_zvfzngpurqoenpxrgf";a:2:{i:0;R:14448;i:1;R:801;}s:20:"8:fs_sbezrqvg_erzbir";a:2:{i:0;R:14448;i:1;R:801;}s:24:"8:fs_sbezrqvg_nqqnabgure";a:2:{i:0;R:14448;i:1;R:801;}s:18:"8:fs_sbezrqvg_abar";a:2:{i:0;R:14448;i:1;R:801;}s:24:"8:fs_sbezrqvg_rzcglgvgyr";a:2:{i:0;R:14448;i:1;R:801;}s:23:"8:fs_sbezrqvg_ubbxreebe";a:2:{i:0;R:14448;i:1;R:801;}s:36:"8:fs_sbezrqvg_fnirnaqpbagvahrrqvgvat";a:2:{i:0;R:14448;i:1;R:801;}s:37:"8:fs_sbezrqvg_fnirnaqpbagvahr_fhzznel";a:2:{i:0;R:14448;i:1;R:801;}s:44:"8:fs_sbezrqvg_gbbygvc_fnirnaqpbagvahrrqvgvat";a:2:{i:0;R:14448;i:1;R:801;}s:46:"8:fs_sbezrqvg_npprffxrl_fnirnaqpbagvahrrqvgvat";a:2:{i:0;R:14448;i:1;R:801;}s:29:"8:fs_nhgbrqvg_nabarqvgjneavat";a:2:{i:0;R:14448;i:1;R:801;}s:21:"8:fs_nhgbrqvg_fhpprff";a:2:{i:0;R:14448;i:1;R:801;}s:31:"8:fs_nhgbrqvg_abgnetrgfcrpvsvrq";a:2:{i:0;R:14448;i:1;R:801;}s:25:"8:fs_nhgbrqvg_absbezsbhaq";a:2:{i:0;R:14448;i:1;R:801;}s:31:"8:fs_nhgbrqvg_gbbznalsbezfsbhaq";a:2:{i:0;R:14448;i:1;R:801;}s:22:"8:fs_nhgbrqvg_ernqbayl";a:2:{i:0;R:14448;i:1;R:801;}s:28:"8:fs_nhgbrqvg_abfrznagvpsbez";a:2:{i:0;R:14448;i:1;R:801;}s:21:"8:fs_nhgbrqvg_fhzznel";a:2:{i:0;R:14448;i:1;R:801;}s:10:"8:ehadhrel";a:2:{i:0;R:14448;i:1;R:801;}s:20:"8:fs_ehadhrel_onqhey";a:2:{i:0;R:14448;i:1;R:801;}s:19:"8:fs_ehadhrel_gvgyr";a:2:{i:0;R:14448;i:1;R:801;}s:29:"8:fs_ehadhrel_nqqvgvbanydhrel";a:2:{i:0;R:14448;i:1;R:801;}s:22:"8:fs_sbezreebef_urnqre";a:2:{i:0;R:14448;i:1;R:801;}s:16:"8:fs_oynax_reebe";a:2:{i:0;R:14448;i:1;R:801;}s:18:"8:fs_onq_hey_reebe";a:2:{i:0;R:14448;i:1;R:801;}s:20:"8:fs_onq_rznvy_reebe";a:2:{i:0;R:14448;i:1;R:801;}s:21:"8:fs_onq_ahzore_reebe";a:2:{i:0;R:14448;i:1;R:801;}s:22:"8:fs_onq_vagrtre_reebe";a:2:{i:0;R:14448;i:1;R:801;}s:19:"8:fs_onq_qngr_reebe";a:2:{i:0;R:14448;i:1;R:801;}s:14:"8:hcybnqjvaqbj";a:2:{i:0;R:14448;i:1;R:801;}s:16:"8:fs_qryrgvbaybt";a:2:{i:0;R:14448;i:1;R:801;}s:19:"8:fs-cerivrj-urnqre";a:2:{i:0;R:14448;i:1;R:801;}s:17:"8:fs-cerivrj-abgr";a:2:{i:0;R:14448;i:1;R:801;}s:32:"8:fs-cntrfpurznf-cntranzrsbezhyn";a:2:{i:0;R:14448;i:1;R:801;}s:28:"8:fs-cntrfpurznf-perngrgvgyr";a:2:{i:0;R:14448;i:1;R:801;}s:26:"8:fs-cntrfpurznf-rqvggvgyr";a:2:{i:0;R:14448;i:1;R:801;}s:26:"8:fs-cntrfpurznf-vachgglcr";a:2:{i:0;R:14448;i:1;R:801;}s:24:"8:fs_cebcregl_vfcebcregl";a:2:{i:0;R:14448;i:1;R:801;}s:25:"8:fs_cebcregl_yvaxfgbsbez";a:2:{i:0;R:14448;i:1;R:801;}s:25:"8:fs_cebcregl_nyybjrqinyf";a:2:{i:0;R:14448;i:1;R:801;}s:18:"8:fs_grzcyngr_qbph";a:2:{i:0;R:14448;i:1;R:801;}s:24:"8:fs_grzcyngr_qbphsbbgre";a:2:{i:0;R:14448;i:1;R:801;}s:14:"8:fs_sbez_qbph";a:2:{i:0;R:14448;i:1;R:801;}s:23:"8:fs_sbez_serrgrkgynory";a:2:{i:0;R:14448;i:1;R:801;}s:28:"8:fs_pngrtbel_unfqrsnhygsbez";a:2:{i:0;R:14448;i:1;R:801;}s:18:"8:fs_pngrtbel_qrfp";a:2:{i:0;R:14448;i:1;R:801;}s:20:"8:fs_oynax_anzrfcnpr";a:2:{i:0;R:14448;i:1;R:801;}s:19:"8:evtug-ivrjrqvggno";a:2:{i:0;R:14448;i:1;R:801;}s:28:"8:evtug-rqvgerfgevpgrqsvryqf";a:2:{i:0;R:14448;i:1;R:801;}s:19:"8:evtug-perngrpynff";a:2:{i:0;R:14448;i:1;R:801;}s:20:"8:npgvba-perngrpynff";a:2:{i:0;R:14448;i:1;R:801;}s:29:"8:npgvba-rqvgerfgevpgrqsvryqf";a:2:{i:0;R:14448;i:1;R:801;}s:20:"8:npgvba-ivrjrqvggno";a:2:{i:0;R:14448;i:1;R:801;}s:26:"8:frznagvpsbezfvachgf-qrfp";a:2:{i:0;s:23:"ext-semanticformsinputs";i:1;R:801;}s:33:"8:frznagvpsbezfvachgf-jebatsbezng";a:2:{i:0;R:14615;i:1;R:801;}s:27:"8:frznagvpsbezfvachgf-pybfr";a:2:{i:0;R:14615;i:1;R:801;}s:26:"8:frznagvpsbezfvachgf-ceri";a:2:{i:0;R:14615;i:1;R:801;}s:26:"8:frznagvpsbezfvachgf-arkg";a:2:{i:0;R:14615;i:1;R:801;}s:27:"8:frznagvpsbezfvachgf-gbqnl";a:2:{i:0;R:14615;i:1;R:801;}s:36:"8:frznagvpsbezfvachgf-qngrsbezngybat";a:2:{i:0;R:14615;i:1;R:801;}s:37:"8:frznagvpsbezfvachgf-qngrsbezngfubeg";a:2:{i:0;R:14615;i:1;R:801;}s:36:"8:frznagvpsbezfvachgf-svefgqnlbsjrrx";a:2:{i:0;R:14615;i:1;R:801;}s:37:"8:frznagvpsbezfvachgf-znysbezrqertrkc";a:2:{i:0;R:14615;i:1;R:801;}s:43:"8:frznagvpsbezfvachgf-qngrcvpxre-qngrsbezng";a:2:{i:0;R:14615;i:1;R:801;}s:42:"8:frznagvpsbezfvachgf-qngrcvpxre-jrrxfgneg";a:2:{i:0;R:14615;i:1;R:801;}s:42:"8:frznagvpsbezfvachgf-qngrcvpxre-svefgqngr";a:2:{i:0;R:14615;i:1;R:801;}s:41:"8:frznagvpsbezfvachgf-qngrcvpxre-ynfgqngr";a:2:{i:0;R:14615;i:1;R:801;}s:50:"8:frznagvpsbezfvachgf-qngrcvpxre-qvfnoyrqnlfbsjrrx";a:2:{i:0;R:14615;i:1;R:801;}s:52:"8:frznagvpsbezfvachgf-qngrcvpxre-uvtuyvtugqnlfbsjrrx";a:2:{i:0;R:14615;i:1;R:801;}s:45:"8:frznagvpsbezfvachgf-qngrcvpxre-qvfnoyrqngrf";a:2:{i:0;R:14615;i:1;R:801;}s:47:"8:frznagvpsbezfvachgf-qngrcvpxre-uvtuyvtugqngrf";a:2:{i:0;R:14615;i:1;R:801;}s:48:"8:frznagvpsbezfvachgf-qngrcvpxre-fubjjrrxahzoref";a:2:{i:0;R:14615;i:1;R:801;}s:49:"8:frznagvpsbezfvachgf-qngrcvpxre-ranoyrvachgsvryq";a:2:{i:0;R:14615;i:1;R:801;}s:48:"8:frznagvpsbezfvachgf-qngrcvpxre-fubjerfrgohggba";a:2:{i:0;R:14615;i:1;R:801;}s:40:"8:frznagvpsbezfvachgf-gvzrcvpxre-zvagvzr";a:2:{i:0;R:14615;i:1;R:801;}s:40:"8:frznagvpsbezfvachgf-gvzrcvpxre-znkgvzr";a:2:{i:0;R:14615;i:1;R:801;}s:41:"8:frznagvpsbezfvachgf-gvzrcvpxre-vagreiny";a:2:{i:0;R:14615;i:1;R:801;}s:49:"8:frznagvpsbezfvachgf-gvzrcvpxre-ranoyrvachgsvryq";a:2:{i:0;R:14615;i:1;R:801;}s:48:"8:frznagvpsbezfvachgf-gvzrcvpxre-fubjerfrgohggba";a:2:{i:0;R:14615;i:1;R:801;}s:35:"8:frznagvpsbezfvachgf-ertrkc-ertrkc";a:2:{i:0;R:14615;i:1;R:801;}s:37:"8:frznagvpsbezfvachgf-ertrkc-onfrglcr";a:2:{i:0;R:14615;i:1;R:801;}s:39:"8:frznagvpsbezfvachgf-ertrkc-onfrcersvk";a:2:{i:0;R:14615;i:1;R:801;}s:35:"8:frznagvpsbezfvachgf-ertrkc-bepune";a:2:{i:0;R:14615;i:1;R:801;}s:36:"8:frznagvpsbezfvachgf-ertrkc-vairefr";a:2:{i:0;R:14615;i:1;R:801;}s:36:"8:frznagvpsbezfvachgf-ertrkc-zrffntr";a:2:{i:0;R:14615;i:1;R:801;}s:42:"8:frznagvpsbezfvachgf-zrahfryrpg-fgehpgher";a:2:{i:0;R:14615;i:1;R:801;}s:49:"8:frznagvpsbezfvachgf-zrahfryrpg-ranoyrvachgsvryq";a:2:{i:0;R:14615;i:1;R:801;}s:23:"8:frznagvptybffnel-qrfp";a:2:{i:0;s:20:"ext-semanticglossary";i:1;R:801;}s:35:"8:frznagvptybffnel-grezqrsvarqgjvpr";a:2:{i:0;R:14650;i:1;R:801;}s:27:"8:frznagvptybffnel-cebc-tyg";a:2:{i:0;R:14650;i:1;R:801;}s:27:"8:frznagvptybffnel-cebc-tyq";a:2:{i:0;R:14650;i:1;R:801;}s:27:"8:frznagvptybffnel-cebc-tyy";a:2:{i:0;R:14650;i:1;R:801;}s:10:"8:fvv-qrfp";a:2:{i:0;s:22:"ext-semanticimageinput";i:1;R:801;}s:24:"8:fvv-vzntrvachg-ybnqvat";a:2:{i:0;R:14656;i:1;R:801;}s:30:"8:frznagvpvagreanybowrpgf-qrfp";a:2:{i:0;s:27:"ext-semanticinternalobjects";i:1;R:801;}s:42:"8:frznagvpvagreanybowrpgf-vagreanycebcregl";a:2:{i:0;R:14659;i:1;R:801;}s:19:"8:frznagvpzncf-qrfp";a:2:{i:0;s:16:"ext-semanticmaps";i:1;R:801;}s:35:"8:frznagvpzncf-haerpbtavmrqqvfgnapr";a:2:{i:0;R:14662;i:1;R:801;}s:23:"8:frznagvpzncf-xzy-yvax";a:2:{i:0;R:14662;i:1;R:801;}s:18:"8:frznagvpzncf-xzy";a:2:{i:0;R:14662;i:1;R:801;}s:35:"8:frznagvpzncf-qrsnhyg-xzy-cntryvax";a:2:{i:0;R:14662;i:1;R:801;}s:23:"8:frznagvpzncf-yngvghqr";a:2:{i:0;R:14662;i:1;R:801;}s:24:"8:frznagvpzncf-ybatvghqr";a:2:{i:0;R:14662;i:1;R:801;}s:23:"8:frznagvpzncf-nygvghqr";a:2:{i:0;R:14662;i:1;R:801;}s:32:"8:frznagvpzncf-ybnqvat-sbezvachg";a:2:{i:0;R:14662;i:1;R:801;}s:32:"8:frznagvpzncf_ybbxhcpbbeqvangrf";a:2:{i:0;R:14662;i:1;R:801;}s:31:"8:frznagvpzncf_ragrenqqerffurer";a:2:{i:0;R:14662;i:1;R:801;}s:24:"8:frznagvpzncf-hcqngrznc";a:2:{i:0;R:14662;i:1;R:801;}s:31:"8:frznagvpzncf-sbezvachg-erzbir";a:2:{i:0;R:14662;i:1;R:801;}s:28:"8:frznagvpzncf-sbezvachg-nqq";a:2:{i:0;R:14662;i:1;R:801;}s:34:"8:frznagvpzncf-sbezvachg-ybpngvbaf";a:2:{i:0;R:14662;i:1;R:801;}s:34:"8:frznagvpzncf-cne-fgngvpybpngvbaf";a:2:{i:0;R:14662;i:1;R:801;}s:28:"8:frznagvpzncf-cne-sbeprfubj";a:2:{i:0;R:14662;i:1;R:801;}s:28:"8:frznagvpzncf-cne-fubjgvgyr";a:2:{i:0;R:14662;i:1;R:801;}s:25:"8:frznagvpzncf-cne-prager";a:2:{i:0;R:14662;i:1;R:801;}s:27:"8:frznagvpzncf-cne-grzcyngr";a:2:{i:0;R:14662;i:1;R:801;}s:33:"8:frznagvpzncf-cne-trbpbqrpbageby";a:2:{i:0;R:14662;i:1;R:801;}s:23:"8:frznagvpzncf-xzy-grkg";a:2:{i:0;R:14662;i:1;R:801;}s:24:"8:frznagvpzncf-xzy-gvgyr";a:2:{i:0;R:14662;i:1;R:801;}s:31:"8:frznagvpzncf-xzy-yvaxnofbyhgr";a:2:{i:0;R:14662;i:1;R:801;}s:31:"8:frznagvpzncf-xzy-cntryvaxgrkg";a:2:{i:0;R:14662;i:1;R:801;}s:10:"8:fzj-qrfp";a:2:{i:0;s:21:"ext-semanticmediawiki";i:1;R:801;}s:15:"8:fzj_ivrjnfeqs";a:2:{i:0;R:14688;i:1;R:801;}s:23:"8:fzj_svanyyvfgpbawhapg";a:2:{i:0;R:14688;i:1;R:801;}s:18:"8:fzj_snpgobk_urnq";a:2:{i:0;R:14688;i:1;R:801;}s:16:"8:fzj_vffcrpcebc";a:2:{i:0;R:14688;i:1;R:801;}s:17:"8:fzj_vfxabjaglcr";a:2:{i:0;R:14688;i:1;R:801;}s:17:"8:fzj_vfnyvnfglcr";a:2:{i:0;R:14688;i:1;R:801;}s:14:"8:fzj_vfabglcr";a:2:{i:0;R:14688;i:1;R:801;}s:25:"8:fzj_pbaprcg_qrfpevcgvba";a:2:{i:0;R:14688;i:1;R:801;}s:26:"8:fzj_ab_pbaprcg_anzrfcnpr";a:2:{i:0;R:14688;i:1;R:801;}s:23:"8:fzj_zhygvcyr_pbaprcgf";a:2:{i:0;R:14688;i:1;R:801;}s:24:"8:fzj_pbaprcg_pnpur_zvff";a:2:{i:0;R:14688;i:1;R:801;}s:16:"8:fzj_abvainaabg";a:2:{i:0;R:14688;i:1;R:801;}s:18:"8:irefvba-frznagvp";a:2:{i:0;R:14688;i:1;R:801;}s:19:"8:fzj_hev_oynpxyvfg";a:2:{i:0;R:14688;i:1;R:801;}s:12:"8:fzj_onqhev";a:2:{i:0;R:14688;i:1;R:801;}s:14:"8:fzj_eff_yvax";a:2:{i:0;R:14688;i:1;R:801;}s:14:"8:fzj_pfi_yvax";a:2:{i:0;R:14688;i:1;R:801;}s:14:"8:fzj_qfi_yvax";a:2:{i:0;R:14688;i:1;R:801;}s:15:"8:fzj_wfba_yvax";a:2:{i:0;R:14688;i:1;R:801;}s:14:"8:fzj_eqs_yvax";a:2:{i:0;R:14688;i:1;R:801;}s:22:"8:fzj_cevagreanzr_nhgb";a:2:{i:0;R:14688;i:1;R:801;}s:23:"8:fzj_cevagreanzr_pbhag";a:2:{i:0;R:14688;i:1;R:801;}s:21:"8:fzj_cevagreanzr_pfi";a:2:{i:0;R:14688;i:1;R:801;}s:21:"8:fzj_cevagreanzr_qfi";a:2:{i:0;R:14688;i:1;R:801;}s:23:"8:fzj_cevagreanzr_qroht";a:2:{i:0;R:14688;i:1;R:801;}s:26:"8:fzj_cevagreanzr_rzorqqrq";a:2:{i:0;R:14688;i:1;R:801;}s:22:"8:fzj_cevagreanzr_wfba";a:2:{i:0;R:14688;i:1;R:801;}s:22:"8:fzj_cevagreanzr_yvfg";a:2:{i:0;R:14688;i:1;R:801;}s:20:"8:fzj_cevagreanzr_by";a:2:{i:0;R:14688;i:1;R:801;}s:20:"8:fzj_cevagreanzr_hy";a:2:{i:0;R:14688;i:1;R:801;}s:21:"8:fzj_cevagreanzr_eff";a:2:{i:0;R:14688;i:1;R:801;}s:23:"8:fzj_cevagreanzr_gnoyr";a:2:{i:0;R:14688;i:1;R:801;}s:28:"8:fzj_cevagreanzr_oebnqgnoyr";a:2:{i:0;R:14688;i:1;R:801;}s:26:"8:fzj_cevagreanzr_grzcyngr";a:2:{i:0;R:14688;i:1;R:801;}s:21:"8:fzj_cevagreanzr_eqs";a:2:{i:0;R:14688;i:1;R:801;}s:26:"8:fzj_cevagreanzr_pngrtbel";a:2:{i:0;R:14688;i:1;R:801;}s:21:"8:fzj_cnenzqrfp_yvzvg";a:2:{i:0;R:14688;i:1;R:801;}s:22:"8:fzj_cnenzqrfp_bssfrg";a:2:{i:0;R:14688;i:1;R:801;}s:23:"8:fzj_cnenzqrfp_urnqref";a:2:{i:0;R:14688;i:1;R:801;}s:25:"8:fzj_cnenzqrfp_znvaynory";a:2:{i:0;R:14688;i:1;R:801;}s:20:"8:fzj_cnenzqrfp_yvax";a:2:{i:0;R:14688;i:1;R:801;}s:21:"8:fzj_cnenzqrfp_vageb";a:2:{i:0;R:14688;i:1;R:801;}s:21:"8:fzj_cnenzqrfp_bhgeb";a:2:{i:0;R:14688;i:1;R:801;}s:23:"8:fzj_cnenzqrfp_qrsnhyg";a:2:{i:0;R:14688;i:1;R:801;}s:27:"8:fzj_cnenzqrfp_frnepuynory";a:2:{i:0;R:14688;i:1;R:801;}s:19:"8:fzj_cnenzqrfp_frc";a:2:{i:0;R:14688;i:1;R:801;}s:28:"8:fzj-cnenzqrfp-qvfgevohgvba";a:2:{i:0;R:14688;i:1;R:801;}s:32:"8:fzj-cnenzqrfp-qvfgevohgvbafbeg";a:2:{i:0;R:14688;i:1;R:801;}s:33:"8:fzj-cnenzqrfp-qvfgevohgvbayvzvg";a:2:{i:0;R:14688;i:1;R:801;}s:24:"8:fzj_cnenzqrfp_grzcyngr";a:2:{i:0;R:14688;i:1;R:801;}s:23:"8:fzj_cnenzqrfp_pbyhzaf";a:2:{i:0;R:14688;i:1;R:801;}s:25:"8:fzj_cnenzqrfp_hfrecnenz";a:2:{i:0;R:14688;i:1;R:801;}s:29:"8:fzj_cnenzqrfp_vagebgrzcyngr";a:2:{i:0;R:14688;i:1;R:801;}s:29:"8:fzj_cnenzqrfp_bhgebgrzcyngr";a:2:{i:0;R:14688;i:1;R:801;}s:27:"8:fzj_cnenzqrfp_rzorqsbezng";a:2:{i:0;R:14688;i:1;R:801;}s:25:"8:fzj_cnenzqrfp_rzorqbayl";a:2:{i:0;R:14688;i:1;R:801;}s:27:"8:fzj-cnenzqrfp-gnoyr-pynff";a:2:{i:0;R:14688;i:1;R:801;}s:24:"8:fzj_cnenzqrfp_effgvgyr";a:2:{i:0;R:14688;i:1;R:801;}s:30:"8:fzj_cnenzqrfp_effqrfpevcgvba";a:2:{i:0;R:14688;i:1;R:801;}s:25:"8:fzj_cnenzqrfp_eqsflagnk";a:2:{i:0;R:14688;i:1;R:801;}s:23:"8:fzj-cnenzqrfp-pfi-frc";a:2:{i:0;R:14688;i:1;R:801;}s:29:"8:fzj-cnenzqrfp-qfi-frcnengbe";a:2:{i:0;R:14688;i:1;R:801;}s:28:"8:fzj-cnenzqrfp-qfi-svyranzr";a:2:{i:0;R:14688;i:1;R:801;}s:24:"8:fzj-fzjqbp-qrfpevcgvba";a:2:{i:0;R:14688;i:1;R:801;}s:23:"8:fzj-fzjqbp-cne-sbezng";a:2:{i:0;R:14688;i:1;R:801;}s:27:"8:fzj-fzjqbp-cne-cnenzrgref";a:2:{i:0;R:14688;i:1;R:801;}s:20:"8:fzj-cnenzqrfp-fbeg";a:2:{i:0;R:14688;i:1;R:801;}s:21:"8:fzj-cnenzqrfp-beqre";a:2:{i:0;R:14688;i:1;R:801;}s:27:"8:fzj-cnenzqrfp-frnepuynory";a:2:{i:0;R:14688;i:1;R:801;}s:26:"8:fzj_cnenzqrfp_anzrq_netf";a:2:{i:0;R:14688;i:1;R:801;}s:17:"8:fzj_vd_qvfnoyrq";a:2:{i:0;R:14688;i:1;R:801;}s:20:"8:fzj_vd_zbererfhygf";a:2:{i:0;R:14688;i:1;R:801;}s:25:"8:fzj_abaevtug_vzcbegglcr";a:2:{i:0;R:14688;i:1;R:801;}s:22:"8:fzj_jebat_vzcbegglcr";a:2:{i:0;R:14688;i:1;R:801;}s:22:"8:fzj_ab_vzcbegryrzrag";a:2:{i:0;R:14688;i:1;R:801;}s:16:"8:fzj_cnefrreebe";a:2:{i:0;R:14688;i:1;R:801;}s:18:"8:fzj_qrpfrcnengbe";a:2:{i:0;R:14688;i:1;R:801;}s:19:"8:fzj_xvybfrcnengbe";a:2:{i:0;R:14688;i:1;R:801;}s:13:"8:fzj_abgvgyr";a:2:{i:0;R:14688;i:1;R:801;}s:16:"8:fzj_abcebcregl";a:2:{i:0;R:14688;i:1;R:801;}s:21:"8:fzj_jebat_anzrfcnpr";a:2:{i:0;R:14688;i:1;R:801;}s:17:"8:fzj_haxabjaglcr";a:2:{i:0;R:14688;i:1;R:801;}s:15:"8:fzj_znalglcrf";a:2:{i:0;R:14688;i:1;R:801;}s:17:"8:fzj_rzcglfgevat";a:2:{i:0;R:14688;i:1;R:801;}s:15:"8:fzj_znkfgevat";a:2:{i:0;R:14688;i:1;R:801;}s:15:"8:fzj_abgvarahz";a:2:{i:0;R:14688;i:1;R:801;}s:15:"8:fzj_abobbyrna";a:2:{i:0;R:14688;i:1;R:801;}s:16:"8:fzj_gehr_jbeqf";a:2:{i:0;R:14688;i:1;R:801;}s:17:"8:fzj_snyfr_jbeqf";a:2:{i:0;R:14688;i:1;R:801;}s:13:"8:fzj_absybng";a:2:{i:0;R:14688;i:1;R:801;}s:14:"8:fzj_vasvavgr";a:2:{i:0;R:14688;i:1;R:801;}s:20:"8:fzj_havgabgnyybjrq";a:2:{i:0;R:14688;i:1;R:801;}s:21:"8:fzj_abhavgfqrpynerq";a:2:{i:0;R:14688;i:1;R:801;}s:14:"8:fzj_abinyhrf";a:2:{i:0;R:14688;i:1;R:801;}s:16:"8:fzj_abqngrgvzr";a:2:{i:0;R:14688;i:1;R:801;}s:20:"8:fzj_gbbznalpybfvat";a:2:{i:0;R:14688;i:1;R:801;}s:23:"8:fzj_abpybfvatoenpxrgf";a:2:{i:0;R:14688;i:1;R:801;}s:21:"8:fzj_zvfcynprqflzoby";a:2:{i:0;R:14688;i:1;R:801;}s:20:"8:fzj_harkcrpgrqcneg";a:2:{i:0;R:14688;i:1;R:801;}s:19:"8:fzj_rzcglfhodhrel";a:2:{i:0;R:14688;i:1;R:801;}s:23:"8:fzj_zvfcynprqfhodhrel";a:2:{i:0;R:14688;i:1;R:801;}s:19:"8:fzj_inyhrfhodhrel";a:2:{i:0;R:14688;i:1;R:801;}s:18:"8:fzj_onqdhrelngbz";a:2:{i:0;R:14688;i:1;R:801;}s:22:"8:fzj_cebcinyhrceboyrz";a:2:{i:0;R:14688;i:1;R:801;}s:20:"8:fzj_abdhrelsrngher";a:2:{i:0;R:14688;i:1;R:801;}s:20:"8:fzj_abpbawhapgvbaf";a:2:{i:0;R:14688;i:1;R:801;}s:20:"8:fzj_abqvfwhapgvbaf";a:2:{i:0;R:14688;i:1;R:801;}s:19:"8:fzj_dhrelgbbynetr";a:2:{i:0;R:14688;i:1;R:801;}s:21:"8:fzj_abgrzcyngrtvira";a:2:{i:0;R:14688;i:1;R:801;}s:27:"8:fzj_qo_fcnedydhrelceboyrz";a:2:{i:0;R:14688;i:1;R:801;}s:30:"8:fzj_qo_fcnedydhrelvapbzcyrgr";a:2:{i:0;R:14688;i:1;R:801;}s:17:"8:fzj_glcr_urnqre";a:2:{i:0;R:14688;i:1;R:801;}s:22:"8:fzj_glcrnegvpyrpbhag";a:2:{i:0;R:14688;i:1;R:801;}s:22:"8:fzj_nggevohgr_urnqre";a:2:{i:0;R:14688;i:1;R:801;}s:27:"8:fzj_nggevohgrnegvpyrpbhag";a:2:{i:0;R:14688;i:1;R:801;}s:24:"8:fzj_fhocebcregl_urnqre";a:2:{i:0;R:14688;i:1;R:801;}s:29:"8:fzj_fhocebcreglnegvpyrpbhag";a:2:{i:0;R:14688;i:1;R:801;}s:20:"8:fzj_pbaprcg_urnqre";a:2:{i:0;R:14688;i:1;R:801;}s:25:"8:fzj_pbaprcgnegvpyrpbhag";a:2:{i:0;R:14688;i:1;R:801;}s:21:"8:fzj_eff_qrfpevcgvba";a:2:{i:0;R:14688;i:1;R:801;}s:30:"8:fcrpvnycntrf-tebhc-fzj_tebhc";a:2:{i:0;R:14688;i:1;R:801;}s:11:"8:rkcbegeqs";a:2:{i:0;R:14688;i:1;R:801;}s:20:"8:fzj_rkcbegeqs_qbph";a:2:{i:0;R:14688;i:1;R:801;}s:25:"8:fzj_rkcbegeqs_erphefvir";a:2:{i:0;R:14688;i:1;R:801;}s:25:"8:fzj_rkcbegeqs_onpxyvaxf";a:2:{i:0;R:14688;i:1;R:801;}s:24:"8:fzj_rkcbegeqs_ynfgqngr";a:2:{i:0;R:14688;i:1;R:801;}s:22:"8:fzj_rkcbegeqs_fhozvg";a:2:{i:0;R:14688;i:1;R:801;}s:13:"8:heverfbyire";a:2:{i:0;R:14688;i:1;R:801;}s:12:"8:cebcregvrf";a:2:{i:0;R:14688;i:1;R:801;}s:21:"8:fzj_cebcregvrf_qbph";a:2:{i:0;R:14688;i:1;R:801;}s:23:"8:fzj_cebcregl_grzcyngr";a:2:{i:0;R:14688;i:1;R:801;}s:30:"8:fzj_cebcregl_grzcyngr_abglcr";a:2:{i:0;R:14688;i:1;R:801;}s:23:"8:fzj_cebcreglynpxfcntr";a:2:{i:0;R:14688;i:1;R:801;}s:23:"8:fzj_cebcreglynpxfglcr";a:2:{i:0;R:14688;i:1;R:801;}s:24:"8:fzj_cebcregluneqylhfrq";a:2:{i:0;R:14688;i:1;R:801;}s:18:"8:hahfrqcebcregvrf";a:2:{i:0;R:14688;i:1;R:801;}s:27:"8:fzj_hahfrqcebcregvrf_qbph";a:2:{i:0;R:14688;i:1;R:801;}s:29:"8:fzj_hahfrqcebcregl_grzcyngr";a:2:{i:0;R:14688;i:1;R:801;}s:18:"8:jnagrqcebcregvrf";a:2:{i:0;R:14688;i:1;R:801;}s:27:"8:fzj_jnagrqcebcregvrf_qbph";a:2:{i:0;R:14688;i:1;R:801;}s:29:"8:fzj_jnagrqcebcregl_grzcyngr";a:2:{i:0;R:14688;i:1;R:801;}s:11:"8:fzj_chetr";a:2:{i:0;R:14688;i:1;R:801;}s:7:"8:glcrf";a:2:{i:0;R:14688;i:1;R:801;}s:16:"8:fzj_glcrf_qbph";a:2:{i:0;R:14688;i:1;R:801;}s:15:"8:fzj_glcrhavgf";a:2:{i:0;R:14688;i:1;R:801;}s:20:"8:frznagvpfgngvfgvpf";a:2:{i:0;R:14688;i:1;R:801;}s:19:"8:fzj_frzfgngf_grkg";a:2:{i:0;R:14688;i:1;R:801;}s:13:"8:fzj_hev_qbp";a:2:{i:0;R:14688;i:1;R:801;}s:5:"8:nfx";a:2:{i:0;R:14688;i:1;R:801;}s:18:"8:fzj_nfx_qbphyvax";a:2:{i:0;R:14688;i:1;R:801;}s:16:"8:fzj_nfx_fbegol";a:2:{i:0;R:14688;i:1;R:801;}s:18:"8:fzj_nfx_nfpbeqre";a:2:{i:0;R:14688;i:1;R:801;}s:19:"8:fzj_nfx_qrfpbeqre";a:2:{i:0;R:14688;i:1;R:801;}s:16:"8:fzj_nfx_fhozvg";a:2:{i:0;R:14688;i:1;R:801;}s:19:"8:fzj_nfx_rqvgdhrel";a:2:{i:0;R:14688;i:1;R:801;}s:23:"8:fzj_nqq_fbegpbaqvgvba";a:2:{i:0;R:14688;i:1;R:801;}s:19:"8:fzj_nfx_uvqrdhrel";a:2:{i:0;R:14688;i:1;R:801;}s:14:"8:fzj_nfx_uryc";a:2:{i:0;R:14688;i:1;R:801;}s:19:"8:fzj_nfx_dhrelurnq";a:2:{i:0;R:14688;i:1;R:801;}s:19:"8:fzj_nfx_cevagurnq";a:2:{i:0;R:14688;i:1;R:801;}s:19:"8:fzj_nfx_cevagqrfp";a:2:{i:0;R:14688;i:1;R:801;}s:19:"8:fzj_nfx_sbezng_nf";a:2:{i:0;R:14688;i:1;R:801;}s:23:"8:fzj_nfx_qrsnhygsbezng";a:2:{i:0;R:14688;i:1;R:801;}s:22:"8:fzj_nfx_bgurebcgvbaf";a:2:{i:0;R:14688;i:1;R:801;}s:20:"8:fzj_nfx_fubj_rzorq";a:2:{i:0;R:14688;i:1;R:801;}s:20:"8:fzj_nfx_uvqr_rzorq";a:2:{i:0;R:14688;i:1;R:801;}s:21:"8:fzj_nfx_rzorq_vafge";a:2:{i:0;R:14688;i:1;R:801;}s:14:"8:dhrelperngbe";a:2:{i:0;R:14688;i:1;R:801;}s:21:"8:fzj_dp_nqqznvaynory";a:2:{i:0;R:14688;i:1;R:801;}s:25:"8:fzj_dp_fubj_nqqany_bcgf";a:2:{i:0;R:14688;i:1;R:801;}s:25:"8:fzj_dp_uvqr_nqqany_bcgf";a:2:{i:0;R:14688;i:1;R:801;}s:17:"8:fzj_dp_bgurebcg";a:2:{i:0;R:14688;i:1;R:801;}s:14:"8:fzj_dp_vageb";a:2:{i:0;R:14688;i:1;R:801;}s:14:"8:fzj_dp_bhgeb";a:2:{i:0;R:14688;i:1;R:801;}s:16:"8:fzj_dp_qrsnhyg";a:2:{i:0;R:14688;i:1;R:801;}s:18:"8:fzj_dp_sbezngbcg";a:2:{i:0;R:14688;i:1;R:801;}s:19:"8:fzj_dp_dhrel_uryc";a:2:{i:0;R:14688;i:1;R:801;}s:18:"8:fzj_dhv_cebcregl";a:2:{i:0;R:14688;i:1;R:801;}s:14:"8:fzj_dhv_cebc";a:2:{i:0;R:14688;i:1;R:801;}s:14:"8:fzj_dhv_ynoy";a:2:{i:0;R:14688;i:1;R:801;}s:15:"8:fzj_dhv_sbezg";a:2:{i:0;R:14688;i:1;R:801;}s:14:"8:fzj_dhv_yvzg";a:2:{i:0;R:14688;i:1;R:801;}s:22:"8:fzj_dhv_fubjaerfhygf";a:2:{i:0;R:14688;i:1;R:801;}s:17:"8:fzj_dhv_abdhrel";a:2:{i:0;R:14688;i:1;R:801;}s:21:"8:fzj_dhv_vainyvqcebc";a:2:{i:0;R:14688;i:1;R:801;}s:23:"8:fzj_dhv_vainyvqsbezng";a:2:{i:0;R:14688;i:1;R:801;}s:16:"8:fzj_dhv_abfbeg";a:2:{i:0;R:14688;i:1;R:801;}s:18:"8:fzj_dhv_nfpbeqre";a:2:{i:0;R:14688;i:1;R:801;}s:19:"8:fzj_dhv_qrfpbeqre";a:2:{i:0;R:14688;i:1;R:801;}s:19:"8:fzj_dhv_enaqbeqre";a:2:{i:0;R:14688;i:1;R:801;}s:18:"8:fzj_dhv_nqqacebc";a:2:{i:0;R:14688;i:1;R:801;}s:16:"8:fzj_dhv_qryrgr";a:2:{i:0;R:14688;i:1;R:801;}s:16:"8:fzj_dhv_erfpby";a:2:{i:0;R:14688;i:1;R:801;}s:17:"8:fzj_dhv_bcgvbaf";a:2:{i:0;R:14688;i:1;R:801;}s:21:"8:fzj_dhv_nqqpngrtbel";a:2:{i:0;R:14688;i:1;R:801;}s:19:"8:fzj_dhv_nqqerfpby";a:2:{i:0;R:14688;i:1;R:801;}s:12:"8:fzj_dhv_bx";a:2:{i:0;R:14688;i:1;R:801;}s:16:"8:fzj_dhv_pnapry";a:2:{i:0;R:14688;i:1;R:801;}s:18:"8:fzj_dhv_pngrtbel";a:2:{i:0;R:14688;i:1;R:801;}s:15:"8:fzj_dhv_ynory";a:2:{i:0;R:14688;i:1;R:801;}s:17:"8:fzj_cec_bcgvbaf";a:2:{i:0;R:14688;i:1;R:801;}s:17:"8:fzj_dhv_pngbcgf";a:2:{i:0;R:14688;i:1;R:801;}s:21:"8:fzj_dhv_znvaynobcgf";a:2:{i:0;R:14688;i:1;R:801;}s:16:"8:fzj_dhv_qynory";a:2:{i:0;R:14688;i:1;R:801;}s:19:"8:fzj_dhv_qpngrtbel";a:2:{i:0;R:14688;i:1;R:801;}s:17:"8:fzj_dhv_qpnglrf";a:2:{i:0;R:14688;i:1;R:801;}s:16:"8:fzj_dhv_qpngab";a:2:{i:0;R:14688;i:1;R:801;}s:18:"8:frnepuolcebcregl";a:2:{i:0;R:14688;i:1;R:801;}s:14:"8:fzj_foi_qbph";a:2:{i:0;R:14688;i:1;R:801;}s:17:"8:fzj_foi_abinyhr";a:2:{i:0;R:14688;i:1;R:801;}s:23:"8:fzj_foi_qvfcynlerfhyg";a:2:{i:0;R:14688;i:1;R:801;}s:28:"8:fzj_foi_qvfcynlerfhygshmml";a:2:{i:0;R:14688;i:1;R:801;}s:18:"8:fzj_foi_cebcregl";a:2:{i:0;R:14688;i:1;R:801;}s:15:"8:fzj_foi_inyhr";a:2:{i:0;R:14688;i:1;R:801;}s:16:"8:fzj_foi_fhozvg";a:2:{i:0;R:14688;i:1;R:801;}s:8:"8:oebjfr";a:2:{i:0;R:14688;i:1;R:801;}s:16:"8:fzj_oebjfryvax";a:2:{i:0;R:14688;i:1;R:801;}s:20:"8:fzj_oebjfr_negvpyr";a:2:{i:0;R:14688;i:1;R:801;}s:15:"8:fzj_oebjfr_tb";a:2:{i:0;R:14688;i:1;R:801;}s:17:"8:fzj_oebjfr_zber";a:2:{i:0;R:14688;i:1;R:801;}s:26:"8:fzj_oebjfr_fubj_vapbzvat";a:2:{i:0;R:14688;i:1;R:801;}s:26:"8:fzj_oebjfr_uvqr_vapbzvat";a:2:{i:0;R:14688;i:1;R:801;}s:24:"8:fzj_oebjfr_ab_bhgtbvat";a:2:{i:0;R:14688;i:1;R:801;}s:24:"8:fzj_oebjfr_ab_vapbzvat";a:2:{i:0;R:14688;i:1;R:801;}s:27:"8:fzj_vairefr_ynory_qrsnhyg";a:2:{i:0;R:14688;i:1;R:801;}s:28:"8:fzj_vairefr_ynory_cebcregl";a:2:{i:0;R:14688;i:1;R:801;}s:14:"8:cntrcebcregl";a:2:{i:0;R:14688;i:1;R:801;}s:13:"8:fzj_cc_qbph";a:2:{i:0;R:14688;i:1;R:801;}s:13:"8:fzj_cc_sebz";a:2:{i:0;R:14688;i:1;R:801;}s:13:"8:fzj_cc_glcr";a:2:{i:0;R:14688;i:1;R:801;}s:15:"8:fzj_cc_fhozvg";a:2:{i:0;R:14688;i:1;R:801;}s:17:"8:fzj_erfhyg_ceri";a:2:{i:0;R:14688;i:1;R:801;}s:17:"8:fzj_erfhyg_arkg";a:2:{i:0;R:14688;i:1;R:801;}s:20:"8:fzj_erfhyg_erfhygf";a:2:{i:0;R:14688;i:1;R:801;}s:22:"8:fzj_erfhyg_aberfhygf";a:2:{i:0;R:14688;i:1;R:801;}s:10:"8:fzjnqzva";a:2:{i:0;R:14688;i:1;R:801;}s:27:"8:fzj_fzjnqzva_frghcfhpprff";a:2:{i:0;R:14688;i:1;R:801;}s:21:"8:fzj_fzjnqzva_erghea";a:2:{i:0;R:14688;i:1;R:801;}s:28:"8:fzj_fzjnqzva_hcqngrfgnegrq";a:2:{i:0;R:14688;i:1;R:801;}s:31:"8:fzj_fzjnqzva_hcqngrabgfgnegrq";a:2:{i:0;R:14688;i:1;R:801;}s:28:"8:fzj_fzjnqzva_hcqngrfgbccrq";a:2:{i:0;R:14688;i:1;R:801;}s:31:"8:fzj_fzjnqzva_hcqngrabgfgbccrq";a:2:{i:0;R:14688;i:1;R:801;}s:19:"8:fzj_fzjnqzva_qbph";a:2:{i:0;R:14688;i:1;R:801;}s:17:"8:fzj_fzjnqzva_qo";a:2:{i:0;R:14688;i:1;R:801;}s:21:"8:fzj_fzjnqzva_qoqbph";a:2:{i:0;R:14688;i:1;R:801;}s:30:"8:fzj_fzjnqzva_crezvffvbafjnea";a:2:{i:0;R:14688;i:1;R:801;}s:23:"8:fzj_fzjnqzva_qoohggba";a:2:{i:0;R:14688;i:1;R:801;}s:23:"8:fzj_fzjnqzva_naabhapr";a:2:{i:0;R:14688;i:1;R:801;}s:27:"8:fzj_fzjnqzva_naabhaprqbph";a:2:{i:0;R:14688;i:1;R:801;}s:29:"8:fzj_fzjnqzva_naabhaprohggba";a:2:{i:0;R:14688;i:1;R:801;}s:26:"8:fzj_fzjnqzva_qngnerserfu";a:2:{i:0;R:14688;i:1;R:801;}s:30:"8:fzj_fzjnqzva_qngnerserfuqbph";a:2:{i:0;R:14688;i:1;R:801;}s:34:"8:fzj_fzjnqzva_qngnerserfucebterff";a:2:{i:0;R:14688;i:1;R:801;}s:32:"8:fzj_fzjnqzva_qngnerserfuohggba";a:2:{i:0;R:14688;i:1;R:801;}s:30:"8:fzj_fzjnqzva_qngnerserfufgbc";a:2:{i:0;R:14688;i:1;R:801;}s:37:"8:fzj_fzjnqzva_qngnerserfufgbcpbasvez";a:2:{i:0;R:14688;i:1;R:801;}s:22:"8:fzj_fzjnqzva_fhccbeg";a:2:{i:0;R:14688;i:1;R:801;}s:26:"8:fzj_fzjnqzva_fhccbegqbph";a:2:{i:0;R:14688;i:1;R:801;}s:26:"8:fzj_fzjnqzva_vafgnyysvyr";a:2:{i:0;R:14688;i:1;R:801;}s:26:"8:fzj_fzjnqzva_fzjubzrcntr";a:2:{i:0;R:14688;i:1;R:801;}s:25:"8:fzj_fzjnqzva_zrqvnmvyyn";a:2:{i:0;R:14688;i:1;R:801;}s:24:"8:fzj_fzjnqzva_dhrfgvbaf";a:2:{i:0;R:14688;i:1;R:801;}s:30:"8:fzj_nqzvayvaxf_qngnfgehpgher";a:2:{i:0;R:14688;i:1;R:801;}s:31:"8:fzj_nqzvayvaxf_qvfcynlvatqngn";a:2:{i:0;R:14688;i:1;R:801;}s:34:"8:fzj_nqzvayvaxf_vayvardhrevrfuryc";a:2:{i:0;R:14688;i:1;R:801;}s:31:"8:fzj-perngrcebcregl-vfcebcregl";a:2:{i:0;R:14688;i:1;R:801;}s:32:"8:fzj-perngrcebcregl-nyybjrqinyf";a:2:{i:0;R:14688;i:1;R:801;}s:30:"8:fzj-cnenzqrfp-pngrtbel-qryvz";a:2:{i:0;R:14688;i:1;R:801;}s:33:"8:fzj-cnenzqrfp-pngrtbel-grzcyngr";a:2:{i:0;R:14688;i:1;R:801;}s:34:"8:fzj-cnenzqrfp-pngrtbel-hfrecnenz";a:2:{i:0;R:14688;i:1;R:801;}s:22:"8:fzj-vasb-cne-zrffntr";a:2:{i:0;R:14688;i:1;R:801;}s:19:"8:fzj-vasb-cne-vpba";a:2:{i:0;R:14688;i:1;R:801;}s:25:"8:frznagvpcntrfrevrf-qrfp";a:2:{i:0;s:22:"ext-semanticpageseries";i:1;R:801;}s:17:"8:fcffhpprffgvgyr";a:2:{i:0;R:14962;i:1;R:801;}s:12:"8:fcffhpprff";a:2:{i:0;R:14962;i:1;R:801;}s:27:"8:fcffhpprff-ergheagbbevtva";a:2:{i:0;R:14962;i:1;R:801;}s:10:"8:fcfreebe";a:2:{i:0;R:14962;i:1;R:801;}s:27:"8:fcfreebe-qvssabgfhccbegrq";a:2:{i:0;R:14962;i:1;R:801;}s:30:"8:fcfreebe-cerivrjabgfhccbegrq";a:2:{i:0;R:14962;i:1;R:801;}s:25:"8:fcfreebe-abvgrengbeanzr";a:2:{i:0;R:14962;i:1;R:801;}s:26:"8:fcfreebe-vgrengbehaxabja";a:2:{i:0;R:14962;i:1;R:801;}s:21:"8:fcfreebe-absbezanzr";a:2:{i:0;R:14962;i:1;R:801;}s:22:"8:fcfreebe-sbezhaxabja";a:2:{i:0;R:14962;i:1;R:801;}s:27:"8:fcfreebe-abgnetrgsbezanzr";a:2:{i:0;R:14962;i:1;R:801;}s:28:"8:fcfreebe-abgnetrgsvryqanzr";a:2:{i:0;R:14962;i:1;R:801;}s:31:"8:fcfreebe-vgrengbecnenzzvffvat";a:2:{i:0;R:14962;i:1;R:801;}s:25:"8:fcfreebe-abvgrengbeqngn";a:2:{i:0;R:14962;i:1;R:801;}s:37:"8:fcfreebe-cntrtrarengvbayvzvgrkrrqrq";a:2:{i:0;R:14962;i:1;R:801;}s:32:"8:fcfreebe-qngr-fgnegqngrzvffvat";a:2:{i:0;R:14962;i:1;R:801;}s:29:"8:fcfreebe-qngr-vagreanyreebe";a:2:{i:0;R:14962;i:1;R:801;}s:36:"8:fcfreebe-pbhag-fgneginyhrznysbezrq";a:2:{i:0;R:14962;i:1;R:801;}s:34:"8:fcfreebe-pbhag-raqinyhrznysbezrq";a:2:{i:0;R:14962;i:1;R:801;}s:35:"8:fcfreebe-pbhag-fgrcinyhrznysbezrq";a:2:{i:0;R:14962;i:1;R:801;}s:37:"8:fcfreebe-pbhag-qvtvgfinyhrznysbezrq";a:2:{i:0;R:14962;i:1;R:801;}s:14:"8:fcz_jof_yvax";a:2:{i:0;s:29:"ext-semanticprojectmanagement";i:1;R:801;}s:21:"8:fcz_cevagreanzr_jof";a:2:{i:0;R:14985;i:1;R:801;}s:10:"8:fcz-anzr";a:2:{i:0;R:14985;i:1;R:801;}s:32:"8:frznagvpcebwrpgznantrzrag-qrfp";a:2:{i:0;R:14985;i:1;R:801;}s:27:"8:frznagvpcebwrpgznantrzrag";a:2:{i:0;R:14985;i:1;R:801;}s:16:"8:evtug-fczfrghc";a:2:{i:0;R:14985;i:1;R:801;}s:10:"8:fes-qrfp";a:2:{i:0;s:25:"ext-semanticresultformats";i:1;R:801;}s:10:"8:fes-anzr";a:2:{i:0;R:14992;i:1;R:801;}s:20:"8:fesp_cerivbhfzbagu";a:2:{i:0;R:14992;i:1;R:801;}s:16:"8:fesp_arkgzbagu";a:2:{i:0;R:14992;i:1;R:801;}s:12:"8:fesp_gbqnl";a:2:{i:0;R:14992;i:1;R:801;}s:16:"8:fesp_tbgbzbagu";a:2:{i:0;R:14992;i:1;R:801;}s:26:"8:fes_cevagreanzr_pnyraqne";a:2:{i:0;R:14992;i:1;R:801;}s:28:"8:fes_cnenzqrfp_pnyraqneynat";a:2:{i:0;R:14992;i:1;R:801;}s:30:"8:fes_cnenzqrfp_pnyraqnepbybef";a:2:{i:0;R:14992;i:1;R:801;}s:16:"8:fes_ipneq_yvax";a:2:{i:0;R:14992;i:1;R:801;}s:23:"8:fes_cevagreanzr_ipneq";a:2:{i:0;R:14992;i:1;R:801;}s:20:"8:fes_vpnyraqne_yvax";a:2:{i:0;R:14992;i:1;R:801;}s:27:"8:fes_cevagreanzr_vpnyraqne";a:2:{i:0;R:14992;i:1;R:801;}s:30:"8:fes_cnenzqrfp_vpnyraqnegvgyr";a:2:{i:0;R:14992;i:1;R:801;}s:36:"8:fes_cnenzqrfp_vpnyraqneqrfpevcgvba";a:2:{i:0;R:14992;i:1;R:801;}s:17:"8:fes_ovogrk_yvax";a:2:{i:0;R:14992;i:1;R:801;}s:24:"8:fes_cevagreanzr_ovogrk";a:2:{i:0;R:14992;i:1;R:801;}s:21:"8:fes_bhgyvar_abinyhr";a:2:{i:0;R:14992;i:1;R:801;}s:25:"8:fes_cevagreanzr_bhgyvar";a:2:{i:0;R:14992;i:1;R:801;}s:33:"8:fes_cnenzqrfp_bhgyvarcebcregvrf";a:2:{i:0;R:14992;i:1;R:801;}s:24:"8:fes_cevagreanzr_q3yvar";a:2:{i:0;R:14992;i:1;R:801;}s:23:"8:fes_cevagreanzr_q3one";a:2:{i:0;R:14992;i:1;R:801;}s:27:"8:fes_cevagreanzr_q3gerrznc";a:2:{i:0;R:14992;i:1;R:801;}s:21:"8:fes_cevagreanzr_fhz";a:2:{i:0;R:14992;i:1;R:801;}s:25:"8:fes_cevagreanzr_nirentr";a:2:{i:0;R:14992;i:1;R:801;}s:21:"8:fes_cevagreanzr_znk";a:2:{i:0;R:14992;i:1;R:801;}s:21:"8:fes_cevagreanzr_zva";a:2:{i:0;R:14992;i:1;R:801;}s:21:"8:fes_cnenzqrfp_yvzvg";a:2:{i:0;R:14992;i:1;R:801;}s:25:"8:fes_cevagreanzr_cebqhpg";a:2:{i:0;R:14992;i:1;R:801;}s:24:"8:fes_cevagreanzr_zrqvna";a:2:{i:0;R:14992;i:1;R:801;}s:23:"8:fes-cnenzqrfp-qrsnhyg";a:2:{i:0;R:14992;i:1;R:801;}s:26:"8:fes_cevagreanzr_rneyvrfg";a:2:{i:0;R:14992;i:1;R:801;}s:24:"8:fes_cevagreanzr_yngrfg";a:2:{i:0;R:14992;i:1;R:801;}s:26:"8:fes_cevagreanzr_gvzryvar";a:2:{i:0;R:14992;i:1;R:801;}s:27:"8:fes_cevagreanzr_riragyvar";a:2:{i:0;R:14992;i:1;R:801;}s:29:"8:fes_cnenzqrfp_gvzryvaronaqf";a:2:{i:0;R:14992;i:1;R:801;}s:32:"8:fes_cnenzqrfp_gvzryvarcbfvgvba";a:2:{i:0;R:14992;i:1;R:801;}s:29:"8:fes_cnenzqrfp_gvzryvarfgneg";a:2:{i:0;R:14992;i:1;R:801;}s:27:"8:fes_cnenzqrfp_gvzryvarraq";a:2:{i:0;R:14992;i:1;R:801;}s:28:"8:fes_cnenzqrfp_gvzryvarfvmr";a:2:{i:0;R:14992;i:1;R:801;}s:25:"8:fes-gvzryvar-nyyerfhygf";a:2:{i:0;R:14992;i:1;R:801;}s:19:"8:fes-gvzryvar-abwf";a:2:{i:0;R:14992;i:1;R:801;}s:21:"8:fes_cnenzqrfp_ivrjf";a:2:{i:0;R:14992;i:1;R:801;}s:22:"8:fes_cnenzqrfp_snprgf";a:2:{i:0;R:14992;i:1;R:801;}s:20:"8:fes_cnenzqrfp_yraf";a:2:{i:0;R:14992;i:1;R:801;}s:19:"8:fes-reebe-srngher";a:2:{i:0;R:14992;i:1;R:801;}s:26:"8:fes-reebe-erfbheprybnqre";a:2:{i:0;R:14992;i:1;R:801;}s:28:"8:fes-reebe-zvffvat-eraqrere";a:2:{i:0;R:14992;i:1;R:801;}s:25:"8:fes-reebe-zvffvat-ynory";a:2:{i:0;R:14992;i:1;R:801;}s:26:"8:fes-reebe-zvffvat-ahzore";a:2:{i:0;R:14992;i:1;R:801;}s:27:"8:fes_cevagreanzr_tbbtyrone";a:2:{i:0;R:14992;i:1;R:801;}s:27:"8:fes_cevagreanzr_tbbtyrcvr";a:2:{i:0;R:14992;i:1;R:801;}s:27:"8:fes_cevagreanzr_wdcybgone";a:2:{i:0;R:14992;i:1;R:801;}s:27:"8:fes_cevagreanzr_wdcybgcvr";a:2:{i:0;R:14992;i:1;R:801;}s:30:"8:fes_cevagreanzr_wdcybgfrevrf";a:2:{i:0;R:14992;i:1;R:801;}s:27:"8:fes_cnenzqrfp_punegurvtug";a:2:{i:0;R:14992;i:1;R:801;}s:26:"8:fes_cnenzqrfp_punegjvqgu";a:2:{i:0;R:14992;i:1;R:801;}s:26:"8:fes_cnenzqrfp_puneggvgyr";a:2:{i:0;R:14992;i:1;R:801;}s:24:"8:fes_cnenzqrfp_onepbybe";a:2:{i:0;R:14992;i:1;R:801;}s:28:"8:fes_cnenzqrfp_oneqverpgvba";a:2:{i:0;R:14992;i:1;R:801;}s:35:"8:fes_cnenzqrfp_oneahzorefnkvfynory";a:2:{i:0;R:14992;i:1;R:801;}s:24:"8:fes-cnenzqrfp-zvainyhr";a:2:{i:0;R:14992;i:1;R:801;}s:27:"8:fes-cnenzqrfp-cbvagynoryf";a:2:{i:0;R:14992;i:1;R:801;}s:27:"8:fes-cnenzqrfp-punegyrtraq";a:2:{i:0;R:14992;i:1;R:801;}s:26:"8:fes-cnenzqrfp-qngnynoryf";a:2:{i:0;R:14992;i:1;R:801;}s:25:"8:fes-cnenzqrfp-puneggrkg";a:2:{i:0;R:14992;i:1;R:801;}s:26:"8:fes-cnenzqrfp-punegpynff";a:2:{i:0;R:14992;i:1;R:801;}s:24:"8:fes-cnenzqrfp-eraqrere";a:2:{i:0;R:14992;i:1;R:801;}s:23:"8:fes-cnenzqrfp-svyyvat";a:2:{i:0;R:14992;i:1;R:801;}s:21:"8:fes-cnenzqrfp-gurzr";a:2:{i:0;R:14992;i:1;R:801;}s:26:"8:fes-cnenzqrfp-punegpbybe";a:2:{i:0;R:14992;i:1;R:801;}s:27:"8:fes-cnenzqrfp-pbybefpurzr";a:2:{i:0;R:14992;i:1;R:801;}s:27:"8:fes-cnenzqrfp-inyhrsbezng";a:2:{i:0;R:14992;i:1;R:801;}s:27:"8:fes-cnenzqrfp-uvtuyvtugre";a:2:{i:0;R:14992;i:1;R:801;}s:27:"8:fes-cnenzqrfp-fzbbguyvarf";a:2:{i:0;R:14992;i:1;R:801;}s:27:"8:fes-cnenzqrfp-fgnpxfrevrf";a:2:{i:0;R:14992;i:1;R:801;}s:27:"8:fes-cnenzqrfp-frevrftebhc";a:2:{i:0;R:14992;i:1;R:801;}s:27:"8:fes-cnenzqrfp-frevrfynory";a:2:{i:0;R:14992;i:1;R:801;}s:25:"8:fes_cevagreanzr_tnyyrel";a:2:{i:0;R:14992;i:1;R:801;}s:22:"8:fes_cnenzqrfp_creebj";a:2:{i:0;R:14992;i:1;R:801;}s:22:"8:fes_cnenzqrfp_jvqguf";a:2:{i:0;R:14992;i:1;R:801;}s:23:"8:fes_cnenzqrfp_urvtugf";a:2:{i:0;R:14992;i:1;R:801;}s:28:"8:fes_cnenzqrfp_nhgbpncgvbaf";a:2:{i:0;R:14992;i:1;R:801;}s:30:"8:fes_cnenzqrfp_svyrrkgrafvbaf";a:2:{i:0;R:14992;i:1;R:801;}s:31:"8:fes_cnenzqrfp_pncgvbacebcregl";a:2:{i:0;R:14992;i:1;R:801;}s:29:"8:fes_cnenzqrfp_vzntrcebcregl";a:2:{i:0;R:14992;i:1;R:801;}s:29:"8:fes_cnenzqrfp_tnyyrelsbezng";a:2:{i:0;R:14992;i:1;R:801;}s:26:"8:fes_cevagreanzr_gntpybhq";a:2:{i:0;R:14992;i:1;R:801;}s:30:"8:fes_cnenzqrfp_vapyhqrfhowrpg";a:2:{i:0;R:14992;i:1;R:801;}s:24:"8:fes_cnenzqrfp_vapernfr";a:2:{i:0;R:14992;i:1;R:801;}s:24:"8:fes_cnenzqrfp_gntbeqre";a:2:{i:0;R:14992;i:1;R:801;}s:24:"8:fes_cnenzqrfp_zvapbhag";a:2:{i:0;R:14992;i:1;R:801;}s:23:"8:fes_cnenzqrfp_zvafvmr";a:2:{i:0;R:14992;i:1;R:801;}s:23:"8:fes_cnenzqrfp_znkfvmr";a:2:{i:0;R:14992;i:1;R:801;}s:23:"8:fes_cnenzqrfp_znkgntf";a:2:{i:0;R:14992;i:1;R:801;}s:27:"8:fes_cevagreanzr_inyhrenax";a:2:{i:0;R:14992;i:1;R:801;}s:23:"8:fes_cevagreanzr_neenl";a:2:{i:0;R:14992;i:1;R:801;}s:25:"8:fes_cnenzqrfp_cntrgvgyr";a:2:{i:0;R:14992;i:1;R:801;}s:24:"8:fes_cnenzqrfp_uvqrtncf";a:2:{i:0;R:14992;i:1;R:801;}s:25:"8:fes_cnenzqrfp_neenlanzr";a:2:{i:0;R:14992;i:1;R:801;}s:23:"8:fes_cnenzqrfp_cebcfrc";a:2:{i:0;R:14992;i:1;R:801;}s:23:"8:fes_cnenzqrfp_znalfrc";a:2:{i:0;R:14992;i:1;R:801;}s:25:"8:fes_cnenzqrfp_erpbeqfrc";a:2:{i:0;R:14992;i:1;R:801;}s:25:"8:fes_cnenzqrfp_urnqrefrc";a:2:{i:0;R:14992;i:1;R:801;}s:22:"8:fes_cevagreanzr_unfu";a:2:{i:0;R:14992;i:1;R:801;}s:24:"8:fes_cnenzqrfp_unfuanzr";a:2:{i:0;R:14992;i:1;R:801;}s:23:"8:fes-cevagreanzr-tencu";a:2:{i:0;R:14992;i:1;R:801;}s:30:"8:fes-cnenzqrfp-tencu-eryngvba";a:2:{i:0;R:14992;i:1;R:801;}s:30:"8:fes-cnenzqrfp-tencu-anzrcebc";a:2:{i:0;R:14992;i:1;R:801;}s:31:"8:fes-cnenzqrfp-tencu-abqrfuncr";a:2:{i:0;R:14992;i:1;R:801;}s:25:"8:fes_cnenzqrfp_tencuanzr";a:2:{i:0;R:14992;i:1;R:801;}s:25:"8:fes_cnenzqrfp_tencufvmr";a:2:{i:0;R:14992;i:1;R:801;}s:27:"8:fes_cnenzqrfp_tencuyrtraq";a:2:{i:0;R:14992;i:1;R:801;}s:26:"8:fes_cnenzqrfp_tencuynory";a:2:{i:0;R:14992;i:1;R:801;}s:23:"8:fes_cnenzqrfp_enaxqve";a:2:{i:0;R:14992;i:1;R:801;}s:25:"8:fes_cnenzqrfp_tencuyvax";a:2:{i:0;R:14992;i:1;R:801;}s:26:"8:fes_cnenzqrfp_tencupbybe";a:2:{i:0;R:14992;i:1;R:801;}s:25:"8:fes-cnenzqrfp-tencu-jjy";a:2:{i:0;R:14992;i:1;R:801;}s:21:"8:fes-jnea-rzcl-puneg";a:2:{i:0;R:14992;i:1;R:801;}s:28:"8:fes_cevagreanzr_qngngnoyrf";a:2:{i:0;R:14992;i:1;R:801;}s:24:"8:fes-cnenzqrfp-ebjvaqrk";a:2:{i:0;R:14992;i:1;R:801;}s:29:"8:fes-cnenzqrfp-qvfcynlyratgu";a:2:{i:0;R:14992;i:1;R:801;}s:22:"8:fes_cevagreanzr_gerr";a:2:{i:0;R:14992;i:1;R:801;}s:24:"8:fes_cevagreanzr_hygerr";a:2:{i:0;R:14992;i:1;R:801;}s:24:"8:fes_cevagreanzr_bygerr";a:2:{i:0;R:14992;i:1;R:801;}s:18:"8:fes-abcneragcebc";a:2:{i:0;R:14992;i:1;R:801;}s:22:"8:fes-cnenzqrfp-cnerag";a:2:{i:0;R:14992;i:1;R:801;}s:16:"8:frznagvpfvtahc";a:2:{i:0;s:18:"ext-semanticsignup";i:1;R:801;}s:10:"8:frf-qrfp";a:2:{i:0;R:15120;i:1;R:801;}s:16:"8:frf-abhfreanzr";a:2:{i:0;R:15120;i:1;R:801;}s:16:"8:frf-abcjqzngpu";a:2:{i:0;R:15120;i:1;R:801;}s:16:"8:frf-abernyanzr";a:2:{i:0;R:15120;i:1;R:801;}s:16:"8:frf-hfrerkvfgf";a:2:{i:0;R:15120;i:1;R:801;}s:17:"8:frf-rznvysnvyrq";a:2:{i:0;R:15120;i:1;R:801;}s:21:"8:frf-perngrsbeovqqra";a:2:{i:0;R:15120;i:1;R:801;}s:17:"8:frf-guebggyruvg";a:2:{i:0;R:15120;i:1;R:801;}s:20:"8:frznagvpgnfxf-qrfp";a:2:{i:0;s:17:"ext-semantictasks";i:1;R:801;}s:23:"8:frznagvpgnfxf-arjgnfx";a:2:{i:0;R:15130;i:1;R:801;}s:28:"8:frznagvpgnfxf-gnfxnffvtarq";a:2:{i:0;R:15130;i:1;R:801;}s:27:"8:frznagvpgnfxf-gnfxhcqngrq";a:2:{i:0;R:15130;i:1;R:801;}s:26:"8:frznagvpgnfxf-gnfxpybfrq";a:2:{i:0;R:15130;i:1;R:801;}s:27:"8:frznagvpgnfxf-arjgnfx-zft";a:2:{i:0;R:15130;i:1;R:801;}s:30:"8:frznagvpgnfxf-gnfxpybfrq-zft";a:2:{i:0;R:15130;i:1;R:801;}s:34:"8:frznagvpgnfxf-nffvtarqgblbh-zft2";a:2:{i:0;R:15130;i:1;R:801;}s:33:"8:frznagvpgnfxf-hcqngrqgblbh-zft2";a:2:{i:0;R:15130;i:1;R:801;}s:24:"8:frznagvpgnfxf-erzvaqre";a:2:{i:0;R:15130;i:1;R:801;}s:33:"8:frznagvpgnfxf-erzvaqre-zrffntr2";a:2:{i:0;R:15130;i:1;R:801;}s:28:"8:frznagvpgnfxf-grkg-zrffntr";a:2:{i:0;R:15130;i:1;R:801;}s:28:"8:frznagvpgnfxf-qvss-zrffntr";a:2:{i:0;R:15130;i:1;R:801;}s:20:"8:frznagvpgvgyr-qrfp";a:2:{i:0;s:17:"ext-semantictitle";i:1;R:801;}s:11:"8:fhbc-qrfp";a:2:{i:0;s:25:"ext-semanticupdateonpurge";i:1;R:801;}s:24:"8:frznagvpjngpuyvfg-qrfp";a:2:{i:0;s:21:"ext-semanticwatchlist";i:1;R:801;}s:21:"8:evtug-frznagvpjngpu";a:2:{i:0;R:15148;i:1;R:801;}s:27:"8:evtug-frznagvpjngputebhcf";a:2:{i:0;R:15148;i:1;R:801;}s:27:"8:fcrpvny-frznagvpjngpuyvfg";a:2:{i:0;R:15148;i:1;R:801;}s:29:"8:fcrpvny-jngpuyvfgpbaqvgvbaf";a:2:{i:0;R:15148;i:1;R:801;}s:17:"8:tebhc-fjynqzvaf";a:2:{i:0;R:15148;i:1;R:801;}s:24:"8:tebhc-fjynqzvaf-zrzore";a:2:{i:0;R:15148;i:1;R:801;}s:21:"8:tebhccntr-fjynqzvaf";a:2:{i:0;R:15148;i:1;R:801;}s:21:"8:tebhc-fjynqzvaf.pff";a:2:{i:0;R:15148;i:1;R:801;}s:20:"8:tebhc-fjynqzvaf.wf";a:2:{i:0;R:15148;i:1;R:801;}s:16:"8:fjy-tebhc-anzr";a:2:{i:0;R:15148;i:1;R:801;}s:22:"8:fjy-tebhc-cebcregvrf";a:2:{i:0;R:15148;i:1;R:801;}s:27:"8:fjy-tebhc-erzbir-cebcregl";a:2:{i:0;R:15148;i:1;R:801;}s:24:"8:fjy-tebhc-nqq-cebcregl";a:2:{i:0;R:15148;i:1;R:801;}s:26:"8:fjy-tebhc-cntr-fryrpgvba";a:2:{i:0;R:15148;i:1;R:801;}s:16:"8:fjy-tebhc-fnir";a:2:{i:0;R:15148;i:1;R:801;}s:17:"8:fjy-tebhc-fnirq";a:2:{i:0;R:15148;i:1;R:801;}s:18:"8:fjy-tebhc-fnivat";a:2:{i:0;R:15148;i:1;R:801;}s:18:"8:fjy-tebhc-qryrgr";a:2:{i:0;R:15148;i:1;R:801;}s:20:"8:fjy-tebhc-pngrtbel";a:2:{i:0;R:15148;i:1;R:801;}s:21:"8:fjy-tebhc-anzrfcnpr";a:2:{i:0;R:15148;i:1;R:801;}s:19:"8:fjy-tebhc-pbaprcg";a:2:{i:0;R:15148;i:1;R:801;}s:25:"8:fjy-tebhc-pbasvezqryrgr";a:2:{i:0;R:15148;i:1;R:801;}s:20:"8:fjy-tebhc-fnir-nyy";a:2:{i:0;R:15148;i:1;R:801;}s:25:"8:fjy-tebhc-nqq-arj-tebhc";a:2:{i:0;R:15148;i:1;R:801;}s:21:"8:fjy-tebhc-nqq-tebhc";a:2:{i:0;R:15148;i:1;R:801;}s:24:"8:fjy-jngpuyvfg-cbfvgvba";a:2:{i:0;R:15148;i:1;R:801;}s:26:"8:fjy-jngpuyvfg-vafregvbaf";a:2:{i:0;R:15148;i:1;R:801;}s:25:"8:fjy-jngpuyvfg-qryrgvbaf";a:2:{i:0;R:15148;i:1;R:801;}s:28:"8:fjy-jngpuyvfg-cntvapbageby";a:2:{i:0;R:15148;i:1;R:801;}s:22:"8:fjy-jngpuyvfg-svefga";a:2:{i:0;R:15148;i:1;R:801;}s:28:"8:fjy-jngpuyvfg-svefga-gvgyr";a:2:{i:0;R:15148;i:1;R:801;}s:24:"8:fjy-jngpuyvfg-ab-vgrzf";a:2:{i:0;R:15148;i:1;R:801;}s:30:"8:fjy-jngpuyvfg-pna-zbq-tebhcf";a:2:{i:0;R:15148;i:1;R:801;}s:29:"8:fjy-jngpuyvfg-pna-zbq-cersf";a:2:{i:0;R:15148;i:1;R:801;}s:25:"8:fjy-jngpuyvfg-ab-tebhcf";a:2:{i:0;R:15148;i:1;R:801;}s:24:"8:fjy-rznvy-cebcfpunatrq";a:2:{i:0;R:15148;i:1;R:801;}s:29:"8:fjy-rznvy-cebcfpunatrq-ybat";a:2:{i:0;R:15148;i:1;R:801;}s:19:"8:fjy-rznvy-punatrf";a:2:{i:0;R:15148;i:1;R:801;}s:11:"8:cersf-fjy";a:2:{i:0;R:15148;i:1;R:801;}s:16:"8:cersf-fjytebhc";a:2:{i:0;R:15148;i:1;R:801;}s:17:"8:cersf-fjytybony";a:2:{i:0;R:15148;i:1;R:801;}s:23:"8:fjy-cersf-rznvyabsvgl";a:2:{i:0;R:15148;i:1;R:801;}s:28:"8:fjy-cersf-jngpuyvfggbcyvax";a:2:{i:0;R:15148;i:1;R:801;}s:26:"8:fjy-cersf-pngrtbel-ynory";a:2:{i:0;R:15148;i:1;R:801;}s:27:"8:fjy-cersf-anzrfcnpr-ynory";a:2:{i:0;R:15148;i:1;R:801;}s:25:"8:fjy-cersf-pbaprcg-ynory";a:2:{i:0;R:15148;i:1;R:801;}s:29:"8:fjy-ree-hfrevq-kbe-tebhcvqf";a:2:{i:0;R:15148;i:1;R:801;}s:12:"8:oebjfrjvxv";a:2:{i:0;s:22:"ext-semanticwebbrowser";i:1;R:801;}s:10:"8:fjo_qrfp";a:2:{i:0;R:15197;i:1;R:801;}s:20:"8:fjo_oebjfr_negvpyr";a:2:{i:0;R:15197;i:1;R:801;}s:15:"8:fjo_oebjfr_tb";a:2:{i:0;R:15197;i:1;R:801;}s:26:"8:fjo_oebjfr_fubj_vapbzvat";a:2:{i:0;R:15197;i:1;R:801;}s:26:"8:fjo_oebjfr_uvqr_vapbzvat";a:2:{i:0;R:15197;i:1;R:801;}s:24:"8:fjo_oebjfr_ab_bhgtbvat";a:2:{i:0;R:15197;i:1;R:801;}s:24:"8:fjo_oebjfr_ab_vapbzvat";a:2:{i:0;R:15197;i:1;R:801;}s:28:"8:fjo_vairefr_ynory_cebcregl";a:2:{i:0;R:15197;i:1;R:801;}s:27:"8:fjo_vairefr_ynory_qrsnhyg";a:2:{i:0;R:15197;i:1;R:801;}s:17:"8:fjo_oebjfr_zber";a:2:{i:0;R:15197;i:1;R:801;}s:16:"8:fraqznvygbjvxv";a:2:{i:0;s:18:"ext-sendmailtowiki";i:1;R:801;}s:21:"8:fraqznvygbjvxv-qrfp";a:2:{i:0;R:15209;i:1;R:801;}s:22:"8:cersf-fraqznvygbjvxv";a:2:{i:0;R:15209;i:1;R:801;}s:24:"8:fraqznvygbjvxv-varznvy";a:2:{i:0;R:15209;i:1;R:801;}s:22:"8:fraqznvygbjvxv-vacva";a:2:{i:0;R:15209;i:1;R:801;}s:31:"8:cersf-uryc-fraqznvygbjvxv_cva";a:2:{i:0;R:15209;i:1;R:801;}s:30:"8:fraqznvygbjvxv-ree-cvayratgu";a:2:{i:0;R:15209;i:1;R:801;}s:32:"8:fraqznvygbjvxv-ree-jebatcersvk";a:2:{i:0;R:15209;i:1;R:801;}s:35:"8:fraqznvygbjvxv-ree-vainyvqnppbhag";a:2:{i:0;R:15209;i:1;R:801;}s:34:"8:fraqznvygbjvxv-ree-vainyvqfraqre";a:2:{i:0;R:15209;i:1;R:801;}s:31:"8:fraqznvygbjvxv-ree-vainyvqcva";a:2:{i:0;R:15209;i:1;R:801;}s:30:"8:fraqznvygbjvxv-ree-baylcynva";a:2:{i:0;R:15209;i:1;R:801;}s:18:"8:funerqpffwf-qrfp";a:2:{i:0;s:15:"ext-sharedcssjs";i:1;R:801;}s:19:"8:funerqpffwf-reebe";a:2:{i:0;R:15222;i:1;R:801;}s:12:"8:tybony.pff";a:2:{i:0;R:15222;i:1;R:801;}s:11:"8:tybony.wf";a:2:{i:0;R:15222;i:1;R:801;}s:18:"8:funerqhfreevtugf";a:2:{i:0;s:20:"ext-shareduserrights";i:1;R:801;}s:16:"8:toyevtugf-qrfp";a:2:{i:0;R:15227;i:1;R:801;}s:19:"8:toyevtugf-ybtcntr";a:2:{i:0;R:15227;i:1;R:801;}s:20:"8:toyevtugf-cntrgrkg";a:2:{i:0;R:15227;i:1;R:801;}s:24:"8:toyevtugf-evtugf-ragel";a:2:{i:0;R:15227;i:1;R:801;}s:25:"8:evtug-hfreevtugf-funerq";a:2:{i:0;R:15227;i:1;R:801;}s:15:"8:fubhgobk-qrfp";a:2:{i:0;s:12:"ext-shoutbox";i:1;R:801;}s:25:"8:fubhgobk-zvffvat-cnenzf";a:2:{i:0;R:15234;i:1;R:801;}s:21:"8:fubhgobk-onq-cnenzf";a:2:{i:0;R:15234;i:1;R:801;}s:34:"8:fubhgobk-hacnefnoyr-cnenz-fgevat";a:2:{i:0;R:15234;i:1;R:801;}s:17:"8:fubhgobk-onq-vq";a:2:{i:0;R:15234;i:1;R:801;}s:24:"8:fubhgobk-vyyrtny-jvqgu";a:2:{i:0;R:15234;i:1;R:801;}s:25:"8:fubhgobk-vyyrtny-urvtug";a:2:{i:0;R:15234;i:1;R:801;}s:14:"8:fubhgobk-hey";a:2:{i:0;R:15234;i:1;R:801;}s:23:"8:fubhgobk-hey-jvgu-pff";a:2:{i:0;R:15234;i:1;R:801;}s:17:"8:fubjcebprffyvfg";a:2:{i:0;s:19:"ext-showprocesslist";i:1;R:801;}s:22:"8:fubjcebprffyvfg-qrfp";a:2:{i:0;R:15244;i:1;R:801;}s:20:"8:fubjcebprffyvfg-vq";a:2:{i:0;R:15244;i:1;R:801;}s:22:"8:fubjcebprffyvfg-hfre";a:2:{i:0;R:15244;i:1;R:801;}s:22:"8:fubjcebprffyvfg-ubfg";a:2:{i:0;R:15244;i:1;R:801;}s:20:"8:fubjcebprffyvfg-qo";a:2:{i:0;R:15244;i:1;R:801;}s:25:"8:fubjcebprffyvfg-pbzznaq";a:2:{i:0;R:15244;i:1;R:801;}s:22:"8:fubjcebprffyvfg-gvzr";a:2:{i:0;R:15244;i:1;R:801;}s:23:"8:fubjcebprffyvfg-fgngr";a:2:{i:0;R:15244;i:1;R:801;}s:22:"8:fubjcebprffyvfg-vasb";a:2:{i:0;R:15244;i:1;R:801;}s:23:"8:fvqroneqbangrobk-qrfp";a:2:{i:0;s:20:"ext-sidebardonatebox";i:1;R:801;}s:8:"8:qbangr";a:2:{i:0;R:15255;i:1;R:801;}s:18:"8:fvqronezrah-qrfp";a:2:{i:0;s:15:"ext-sidebarmenu";i:1;R:801;}s:32:"8:fvqronezrah-cnefre-vachg-reebe";a:2:{i:0;R:15258;i:1;R:801;}s:33:"8:fvqronezrah-cnefre-flagnk-reebe";a:2:{i:0;R:15258;i:1;R:801;}s:27:"8:fvqronezrah-wf-vavg-reebe";a:2:{i:0;R:15258;i:1;R:801;}s:43:"8:fvqronezrah-cnefre-zrahvgrz-rkcnaqrq-ahyy";a:2:{i:0;R:15258;i:1;R:801;}s:18:"8:fvqronezrah-rqvg";a:2:{i:0;R:15258;i:1;R:801;}s:18:"8:fvtangherybtcntr";a:2:{i:0;s:16:"ext-signdocument";i:1;R:801;}s:16:"8:fvtangher-qrfp";a:2:{i:0;R:15265;i:1;R:801;}s:22:"8:fvtangherybtcntrgrkg";a:2:{i:0;R:15265;i:1;R:801;}s:19:"8:fvtangherybtragel";a:2:{i:0;R:15265;i:1;R:801;}s:16:"8:evtug-fvtnqzva";a:2:{i:0;R:15265;i:1;R:801;}s:26:"8:evtug-perngrfvtaqbphzrag";a:2:{i:0;R:15265;i:1;R:801;}s:14:"8:fvtaqbphzrag";a:2:{i:0;s:23:"ext-signdocumentspecial";i:1;R:801;}s:20:"8:fvta-abqbpfryrpgrq";a:2:{i:0;R:15272;i:1;R:801;}s:16:"8:fvta-fryrpgqbp";a:2:{i:0;R:15272;i:1;R:801;}s:16:"8:fvta-qbpurnqre";a:2:{i:0;R:15272;i:1;R:801;}s:22:"8:fvta-reebe-abfhpuqbp";a:2:{i:0;R:15272;i:1;R:801;}s:15:"8:fvta-ernyanzr";a:2:{i:0;R:15272;i:1;R:801;}s:14:"8:fvta-nqqerff";a:2:{i:0;R:15272;i:1;R:801;}s:11:"8:fvta-pvgl";a:2:{i:0;R:15272;i:1;R:801;}s:12:"8:fvta-fgngr";a:2:{i:0;R:15272;i:1;R:801;}s:10:"8:fvta-mvc";a:2:{i:0;R:15272;i:1;R:801;}s:14:"8:fvta-pbhagel";a:2:{i:0;R:15272;i:1;R:801;}s:12:"8:fvta-cubar";a:2:{i:0;R:15272;i:1;R:801;}s:11:"8:fvta-oqnl";a:2:{i:0;R:15272;i:1;R:801;}s:12:"8:fvta-rznvy";a:2:{i:0;R:15272;i:1;R:801;}s:20:"8:fvta-vaqvpngrf-erd";a:2:{i:0;R:15272;i:1;R:801;}s:16:"8:fvta-uvqr-abgr";a:2:{i:0;R:15272;i:1;R:801;}s:21:"8:fvta-yvfg-nabalzbhf";a:2:{i:0;R:15272;i:1;R:801;}s:23:"8:fvta-yvfg-uvqrnqqerff";a:2:{i:0;R:15272;i:1;R:801;}s:26:"8:fvta-yvfg-uvqrrkgnqqerff";a:2:{i:0;R:15272;i:1;R:801;}s:21:"8:fvta-yvfg-uvqrcubar";a:2:{i:0;R:15272;i:1;R:801;}s:20:"8:fvta-yvfg-uvqroqnl";a:2:{i:0;R:15272;i:1;R:801;}s:21:"8:fvta-yvfg-uvqrrznvy";a:2:{i:0;R:15272;i:1;R:801;}s:13:"8:fvta-fhozvg";a:2:{i:0;R:15272;i:1;R:801;}s:18:"8:fvta-vasbezngvba";a:2:{i:0;R:15272;i:1;R:801;}s:13:"8:fvt-fhpprff";a:2:{i:0;R:15272;i:1;R:801;}s:24:"8:fvta-ivrj-fryrpgsvryqf";a:2:{i:0;R:15272;i:1;R:801;}s:24:"8:fvta-ivrjsvryq-ragelvq";a:2:{i:0;R:15272;i:1;R:801;}s:26:"8:fvta-ivrjsvryq-gvzrfgnzc";a:2:{i:0;R:15272;i:1;R:801;}s:25:"8:fvta-ivrjsvryq-ernyanzr";a:2:{i:0;R:15272;i:1;R:801;}s:24:"8:fvta-ivrjsvryq-nqqerff";a:2:{i:0;R:15272;i:1;R:801;}s:21:"8:fvta-ivrjsvryq-pvgl";a:2:{i:0;R:15272;i:1;R:801;}s:22:"8:fvta-ivrjsvryq-fgngr";a:2:{i:0;R:15272;i:1;R:801;}s:24:"8:fvta-ivrjsvryq-pbhagel";a:2:{i:0;R:15272;i:1;R:801;}s:20:"8:fvta-ivrjsvryq-mvc";a:2:{i:0;R:15272;i:1;R:801;}s:19:"8:fvta-ivrjsvryq-vc";a:2:{i:0;R:15272;i:1;R:801;}s:22:"8:fvta-ivrjsvryq-ntrag";a:2:{i:0;R:15272;i:1;R:801;}s:22:"8:fvta-ivrjsvryq-cubar";a:2:{i:0;R:15272;i:1;R:801;}s:22:"8:fvta-ivrjsvryq-rznvy";a:2:{i:0;R:15272;i:1;R:801;}s:20:"8:fvta-ivrjsvryq-ntr";a:2:{i:0;R:15272;i:1;R:801;}s:24:"8:fvta-ivrjsvryq-bcgvbaf";a:2:{i:0;R:15272;i:1;R:801;}s:21:"8:fvta-ivrjfvtf-vageb";a:2:{i:0;R:15272;i:1;R:801;}s:29:"8:fvta-fvtnqzva-pheeragylbcra";a:2:{i:0;R:15272;i:1;R:801;}s:21:"8:fvta-fvtnqzva-pybfr";a:2:{i:0;R:15272;i:1;R:801;}s:31:"8:fvta-fvtnqzva-pheeragylpybfrq";a:2:{i:0;R:15272;i:1;R:801;}s:20:"8:fvta-fvtnqzva-bcra";a:2:{i:0;R:15272;i:1;R:801;}s:17:"8:fvta-fvtangherf";a:2:{i:0;R:15272;i:1;R:801;}s:28:"8:fvta-fvtnqzva-pybfrfhpprff";a:2:{i:0;R:15272;i:1;R:801;}s:27:"8:fvta-fvtnqzva-bcrafhpprff";a:2:{i:0;R:15272;i:1;R:801;}s:21:"8:fvta-ivrjfvtangherf";a:2:{i:0;R:15272;i:1;R:801;}s:13:"8:fvta-pybfrq";a:2:{i:0;R:15272;i:1;R:801;}s:19:"8:fvta-reebe-pybfrq";a:2:{i:0;R:15272;i:1;R:801;}s:15:"8:fvt-nabalzbhf";a:2:{i:0;R:15272;i:1;R:801;}s:13:"8:fvt-cevingr";a:2:{i:0;R:15272;i:1;R:801;}s:17:"8:fvta-fvtqrgnvyf";a:2:{i:0;R:15272;i:1;R:801;}s:14:"8:fvta-rznvygb";a:2:{i:0;R:15272;i:1;R:801;}s:14:"8:fvta-vcgbbyf";a:2:{i:0;R:15272;i:1;R:801;}s:25:"8:fvta-ivrjsvryq-fgevpxra";a:2:{i:0;R:15272;i:1;R:801;}s:27:"8:fvta-ivrjsvryq-erivrjrqol";a:2:{i:0;R:15272;i:1;R:801;}s:30:"8:fvta-ivrjsvryq-erivrjpbzzrag";a:2:{i:0;R:15272;i:1;R:801;}s:25:"8:fvta-qrgnvy-havdhrdhrel";a:2:{i:0;R:15272;i:1;R:801;}s:29:"8:fvta-qrgnvy-havdhrdhrel-eha";a:2:{i:0;R:15272;i:1;R:801;}s:20:"8:fvta-qrgnvy-fgevxr";a:2:{i:0;R:15272;i:1;R:801;}s:16:"8:fvta-erivrjfvt";a:2:{i:0;R:15272;i:1;R:801;}s:21:"8:fvta-erivrj-pbzzrag";a:2:{i:0;R:15272;i:1;R:801;}s:19:"8:fvta-fhozvgerivrj";a:2:{i:0;R:15272;i:1;R:801;}s:30:"8:fvta-havdhrdhrel-fvzvyneanzr";a:2:{i:0;R:15272;i:1;R:801;}s:33:"8:fvta-havdhrdhrel-fvzvynenqqerff";a:2:{i:0;R:15272;i:1;R:801;}s:31:"8:fvta-havdhrdhrel-fvzvynecubar";a:2:{i:0;R:15272;i:1;R:801;}s:31:"8:fvta-havdhrdhrel-fvzvynerznvy";a:2:{i:0;R:15272;i:1;R:801;}s:27:"8:fvta-havdhrdhrel-1fvtarq2";a:2:{i:0;R:15272;i:1;R:801;}s:20:"8:perngrfvtaqbphzrag";a:2:{i:0;s:29:"ext-signdocumentspecialcreate";i:1;R:801;}s:20:"8:perngrfvtaqbp-urnq";a:2:{i:0;R:15343;i:1;R:801;}s:24:"8:perngrfvtaqbp-cntranzr";a:2:{i:0;R:15343;i:1;R:801;}s:28:"8:perngrfvtaqbp-nyybjrqtebhc";a:2:{i:0;R:15343;i:1;R:801;}s:21:"8:perngrfvtaqbp-rznvy";a:2:{i:0;R:15343;i:1;R:801;}s:23:"8:perngrfvtaqbp-nqqerff";a:2:{i:0;R:15343;i:1;R:801;}s:26:"8:perngrfvtaqbp-rkgnqqerff";a:2:{i:0;R:15343;i:1;R:801;}s:21:"8:perngrfvtaqbp-cubar";a:2:{i:0;R:15343;i:1;R:801;}s:20:"8:perngrfvtaqbp-oqnl";a:2:{i:0;R:15343;i:1;R:801;}s:22:"8:perngrfvtaqbp-zvantr";a:2:{i:0;R:15343;i:1;R:801;}s:25:"8:perngrfvtaqbp-vagebgrkg";a:2:{i:0;R:15343;i:1;R:801;}s:22:"8:perngrfvtaqbp-uvqqra";a:2:{i:0;R:15343;i:1;R:801;}s:24:"8:perngrfvtaqbp-bcgvbany";a:2:{i:0;R:15343;i:1;R:801;}s:22:"8:perngrfvtaqbp-perngr";a:2:{i:0;R:15343;i:1;R:801;}s:29:"8:perngrfvtaqbp-reebe-trarevp";a:2:{i:0;R:15343;i:1;R:801;}s:33:"8:perngrfvtaqbp-reebe-cntrabrkvfg";a:2:{i:0;R:15343;i:1;R:801;}s:23:"8:perngrfvtaqbp-fhpprff";a:2:{i:0;R:15343;i:1;R:801;}s:36:"8:perngrfvtaqbp-reebe-nyernqlperngrq";a:2:{i:0;R:15343;i:1;R:801;}s:12:"8:hfrefvtahc";a:2:{i:0;s:13:"ext-signupapi";i:1;R:801;}s:16:"8:fvtahcncv-qrfp";a:2:{i:0;R:15362;i:1;R:801;}s:14:"8:fvtahcncv-bx";a:2:{i:0;R:15362;i:1;R:801;}s:18:"8:fvtahcncv-abanzr";a:2:{i:0;R:15362;i:1;R:801;}s:22:"8:fvtahcncv-hfrerkvfgf";a:2:{i:0;R:15362;i:1;R:801;}s:25:"8:fvtahcncv-ragrecnffjbeq";a:2:{i:0;R:15362;i:1;R:801;}s:28:"8:fvtahcncv-cnffjbeqgbbfubeg";a:2:{i:0;R:15362;i:1;R:801;}s:16:"8:fvtahcncv-jrnx";a:2:{i:0;R:15362;i:1;R:801;}s:18:"8:fvtahcncv-zrqvhz";a:2:{i:0;R:15362;i:1;R:801;}s:18:"8:fvtahcncv-fgebat";a:2:{i:0;R:15362;i:1;R:801;}s:21:"8:fvtahcncv-onqerglcr";a:2:{i:0;R:15362;i:1;R:801;}s:26:"8:fvtahcncv-cnffjbeqfzngpu";a:2:{i:0;R:15362;i:1;R:801;}s:31:"8:fvtahcncv-vainyvqrznvynqqerff";a:2:{i:0;R:15362;i:1;R:801;}s:27:"8:fvtahcncv-vainyvqhfreanzr";a:2:{i:0;R:15362;i:1;R:801;}s:17:"8:fvzcyrsnez-qrfp";a:2:{i:0;s:14:"ext-simplefarm";i:1;R:801;}s:10:"8:frphevgl";a:2:{i:0;s:18:"ext-simplesecurity";i:1;R:801;}s:15:"8:frphevgl-qrfp";a:2:{i:0;R:15379;i:1;R:801;}s:18:"8:frphevgl-ybtcntr";a:2:{i:0;R:15379;i:1;R:801;}s:22:"8:frphevgl-ybtcntrgrkg";a:2:{i:0;R:15379;i:1;R:801;}s:19:"8:frphevgl-ybtragel";a:2:{i:0;R:15379;i:1;R:801;}s:16:"8:onqnpprff-ernq";a:2:{i:0;R:15379;i:1;R:801;}s:15:"8:frphevgl-vasb";a:2:{i:0;R:15379;i:1;R:801;}s:22:"8:frphevgl-vasb-gbttyr";a:2:{i:0;R:15379;i:1;R:801;}s:23:"8:frphevgl-vasberfgevpg";a:2:{i:0;R:15379;i:1;R:801;}s:18:"8:frphevgl-qrfp-yf";a:2:{i:0;R:15379;i:1;R:801;}s:18:"8:frphevgl-qrfp-ce";a:2:{i:0;R:15379;i:1;R:801;}s:21:"8:frphevgl-vasbflfbcf";a:2:{i:0;R:15379;i:1;R:801;}s:21:"8:frphevgl-znaltebhcf";a:2:{i:0;R:15379;i:1;R:801;}s:18:"8:frphevgl-hapunva";a:2:{i:0;R:15379;i:1;R:801;}s:24:"8:frphevgl-glcr-pngrtbel";a:2:{i:0;R:15379;i:1;R:801;}s:25:"8:frphevgl-glcr-anzrfcnpr";a:2:{i:0;R:15379;i:1;R:801;}s:26:"8:frphevgl-erfgevpggbtebhc";a:2:{i:0;R:15379;i:1;R:801;}s:18:"8:erfgevpgvba-ernq";a:2:{i:0;R:15379;i:1;R:801;}s:23:"8:fxvacreanzrfcnpr-qrfp";a:2:{i:0;s:20:"ext-skinpernamespace";i:1;R:801;}s:20:"8:fyvzobkguhzof-qrfp";a:2:{i:0;s:17:"ext-slimboxthumbs";i:1;R:801;}s:16:"8:fyvcclznc_qrfp";a:2:{i:0;s:13:"ext-slippymap";i:1;R:801;}s:19:"8:fyvcclznc_rkganzr";a:2:{i:0;R:15402;i:1;R:801;}s:19:"8:fyvcclznc_gntanzr";a:2:{i:0;R:15402;i:1;R:801;}s:17:"8:fyvcclznc_reebe";a:2:{i:0;R:15402;i:1;R:801;}s:18:"8:fyvcclznc_reebef";a:2:{i:0;R:15402;i:1;R:801;}s:35:"8:fyvcclznc_reebe_gnt_pbagrag_tvira";a:2:{i:0;R:15402;i:1;R:801;}s:35:"8:fyvcclznc_reebe_zvffvat_nethzragf";a:2:{i:0;R:15402;i:1;R:801;}s:39:"8:fyvcclznc_reebe_zvffvat_nggevohgr_yng";a:2:{i:0;R:15402;i:1;R:801;}s:39:"8:fyvcclznc_reebe_zvffvat_nggevohgr_yba";a:2:{i:0;R:15402;i:1;R:801;}s:40:"8:fyvcclznc_reebe_zvffvat_nggevohgr_mbbz";a:2:{i:0;R:15402;i:1;R:801;}s:49:"8:fyvcclznc_reebe_vainyvq_nggevohgr_yng_inyhr_ana";a:2:{i:0;R:15402;i:1;R:801;}s:49:"8:fyvcclznc_reebe_vainyvq_nggevohgr_yba_inyhr_ana";a:2:{i:0;R:15402;i:1;R:801;}s:50:"8:fyvcclznc_reebe_vainyvq_nggevohgr_mbbz_inyhr_ana";a:2:{i:0;R:15402;i:1;R:801;}s:51:"8:fyvcclznc_reebe_vainyvq_nggevohgr_jvqgu_inyhr_ana";a:2:{i:0;R:15402;i:1;R:801;}s:52:"8:fyvcclznc_reebe_vainyvq_nggevohgr_urvtug_inyhr_ana";a:2:{i:0;R:15402;i:1;R:801;}s:57:"8:fyvcclznc_reebe_vainyvq_nggevohgr_zbqr_inyhr_abg_n_zbqr";a:2:{i:0;R:15402;i:1;R:801;}s:59:"8:fyvcclznc_reebe_vainyvq_nggevohgr_ynlre_inyhr_abg_n_ynlre";a:2:{i:0;R:15402;i:1;R:801;}s:61:"8:fyvcclznc_reebe_vainyvq_nggevohgr_znexre_inyhr_abg_n_znexre";a:2:{i:0;R:15402;i:1;R:801;}s:35:"8:fyvcclznc_reebe_haxabja_nggevohgr";a:2:{i:0;R:15402;i:1;R:801;}s:58:"8:fyvcclznc_reebe_vainyvq_nggevohgr_yng_inyhr_bhg_bs_enatr";a:2:{i:0;R:15402;i:1;R:801;}s:58:"8:fyvcclznc_reebe_vainyvq_nggevohgr_yba_inyhr_bhg_bs_enatr";a:2:{i:0;R:15402;i:1;R:801;}s:59:"8:fyvcclznc_reebe_vainyvq_nggevohgr_mbbz_inyhr_bhg_bs_enatr";a:2:{i:0;R:15402;i:1;R:801;}s:60:"8:fyvcclznc_reebe_vainyvq_nggevohgr_jvqgu_inyhr_bhg_bs_enatr";a:2:{i:0;R:15402;i:1;R:801;}s:61:"8:fyvcclznc_reebe_vainyvq_nggevohgr_urvtug_inyhr_bhg_bs_enatr";a:2:{i:0;R:15402;i:1;R:801;}s:16:"8:fyvcclznc_pbqr";a:2:{i:0;R:15402;i:1;R:801;}s:23:"8:fyvcclznc_ohggba_pbqr";a:2:{i:0;R:15402;i:1;R:801;}s:21:"8:fyvcclznc_erfrgivrj";a:2:{i:0;R:15402;i:1;R:801;}s:27:"8:fyvcclznc_pyvpxgbnpgvingr";a:2:{i:0;R:15402;i:1;R:801;}s:15:"8:fzbbgutnyyrel";a:2:{i:0;s:17:"ext-smoothgallery";i:1;R:801;}s:20:"8:fzbbgutnyyrel-qrfp";a:2:{i:0;R:15431;i:1;R:801;}s:21:"8:fzbbgutnyyrel-gvgyr";a:2:{i:0;R:15431;i:1;R:801;}s:34:"8:fzbbgutnyyrel-fzbbgutnyyrelgvgyr";a:2:{i:0;R:15431;i:1;R:801;}s:24:"8:fzbbgutnyyrel-cntrgrkg";a:2:{i:0;R:15431;i:1;R:801;}s:21:"8:fzbbgutnyyrel-reebe";a:2:{i:0;R:15431;i:1;R:801;}s:33:"8:fzbbgutnyyrel-tnyyrel-abg-sbhaq";a:2:{i:0;R:15431;i:1;R:801;}s:25:"8:fzbbgutnyyrel-abg-sbhaq";a:2:{i:0;R:15431;i:1;R:801;}s:25:"8:fzbbgutnyyrel-ab-vzntrf";a:2:{i:0;R:15431;i:1;R:801;}s:30:"8:fzbbgutnyyrel-vainyvq-vzntrf";a:2:{i:0;R:15431;i:1;R:801;}s:32:"8:fzbbgutnyyrel-harkcrpgrq-reebe";a:2:{i:0;R:15431;i:1;R:801;}s:35:"8:fzbbgutnyyrel-wninfpevcg-qvfnoyrq";a:2:{i:0;R:15431;i:1;R:801;}s:16:"8:fazcdhrel-qrfp";a:2:{i:0;s:13:"ext-snmpquery";i:1;R:801;}s:16:"8:fbyefgber-qrfp";a:2:{i:0;s:13:"ext-solrstore";i:1;R:801;}s:12:"8:fbyefrnepu";a:2:{i:0;R:15446;i:1;R:801;}s:18:"8:fbyefrnepu-gvgyr";a:2:{i:0;R:15446;i:1;R:801;}s:17:"8:fbyefgber-reebe";a:2:{i:0;R:15446;i:1;R:801;}s:27:"8:fbyefgber-frnepusvryqfrgf";a:2:{i:0;R:15446;i:1;R:801;}s:34:"8:fbyefgber-frnepusvryqfrgf-fryrpg";a:2:{i:0;R:15446;i:1;R:801;}s:33:"8:fbyefgber-frnepusvryqfrgf-gvgyr";a:2:{i:0;R:15446;i:1;R:801;}s:26:"8:fbhaqznantre2ohggba-qrfp";a:2:{i:0;s:23:"ext-soundmanager2button";i:1;R:801;}s:26:"8:fbhaqznantre2ohggba-cynl";a:2:{i:0;R:15454;i:1;R:801;}s:14:"8:fcnzqvssgbby";a:2:{i:0;s:16:"ext-spamdifftool";i:1;R:801;}s:19:"8:fcnzqvssgbby-qrfp";a:2:{i:0;R:15457;i:1;R:801;}s:23:"8:fcnzqvssgbby_pnagrqvg";a:2:{i:0;R:15457;i:1;R:801;}s:23:"8:fcnzqvssgbby-ab-gvgyr";a:2:{i:0;R:15457;i:1;R:801;}s:21:"8:fcnzqvssgbby_abgrkg";a:2:{i:0;R:15457;i:1;R:801;}s:22:"8:fcnzqvssgbby_pbasvez";a:2:{i:0;R:15457;i:1;R:801;}s:22:"8:fcnzqvssgbby_fhzznel";a:2:{i:0;R:15457;i:1;R:801;}s:28:"8:fcnzqvssgbby_heyf_qrgrpgrq";a:2:{i:0;R:15457;i:1;R:801;}s:31:"8:fcnzqvssgbby_ab_heyf_qrgrpgrq";a:2:{i:0;R:15457;i:1;R:801;}s:29:"8:fcnzqvssgbby_fcnz_yvax_grkg";a:2:{i:0;R:15457;i:1;R:801;}s:28:"8:fcnzqvssgbby_bcgvba_qbznva";a:2:{i:0;R:15457;i:1;R:801;}s:31:"8:fcnzqvssgbby_bcgvba_fhoqbznva";a:2:{i:0;R:15457;i:1;R:801;}s:31:"8:fcnzqvssgbby_bcgvba_qverpgbel";a:2:{i:0;R:15457;i:1;R:801;}s:26:"8:fcnzqvssgbby_bcgvba_abar";a:2:{i:0;R:15457;i:1;R:801;}s:20:"8:fcnzqvssgbby_oybpx";a:2:{i:0;R:15457;i:1;R:801;}s:28:"8:fcnzqvssgbby_fhozvg_ohggbz";a:2:{i:0;R:15457;i:1;R:801;}s:11:"8:fcnzertrk";a:2:{i:0;s:13:"ext-spamregex";i:1;R:801;}s:16:"8:fcnzertrk-qrfp";a:2:{i:0;R:15474;i:1;R:801;}s:28:"8:fcnzertrk-reebe-haoybpxvat";a:2:{i:0;R:15474;i:1;R:801;}s:19:"8:fcnzertrk-fhzznel";a:2:{i:0;R:15474;i:1;R:801;}s:17:"8:fcnzertrk-vageb";a:2:{i:0;R:15474;i:1;R:801;}s:22:"8:fcnzertrk-cntr-gvgyr";a:2:{i:0;R:15474;i:1;R:801;}s:29:"8:fcnzertrk-pheeragyl-oybpxrq";a:2:{i:0;R:15474;i:1;R:801;}s:16:"8:fcnzertrk-zbir";a:2:{i:0;R:15474;i:1;R:801;}s:32:"8:fcnzertrk-ab-pheeragyl-oybpxrq";a:2:{i:0;R:15474;i:1;R:801;}s:15:"8:fcnzertrk-ybt";a:2:{i:0;R:15474;i:1;R:801;}s:24:"8:fcnzertrk-cntr-gvgyr-1";a:2:{i:0;R:15474;i:1;R:801;}s:27:"8:fcnzertrk-haoybpx-fhpprff";a:2:{i:0;R:15474;i:1;R:801;}s:27:"8:fcnzertrk-haoybpx-zrffntr";a:2:{i:0;R:15474;i:1;R:801;}s:24:"8:fcnzertrk-cntr-gvgyr-2";a:2:{i:0;R:15474;i:1;R:801;}s:25:"8:fcnzertrk-oybpx-fhpprff";a:2:{i:0;R:15474;i:1;R:801;}s:25:"8:fcnzertrk-oybpx-zrffntr";a:2:{i:0;R:15474;i:1;R:801;}s:21:"8:fcnzertrk-jneavat-1";a:2:{i:0;R:15474;i:1;R:801;}s:19:"8:fcnzertrk-reebe-1";a:2:{i:0;R:15474;i:1;R:801;}s:21:"8:fcnzertrk-jneavat-2";a:2:{i:0;R:15474;i:1;R:801;}s:27:"8:fcnzertrk-nyernql-oybpxrq";a:2:{i:0;R:15474;i:1;R:801;}s:24:"8:fcnzertrk-cuenfr-oybpx";a:2:{i:0;R:15474;i:1;R:801;}s:29:"8:fcnzertrk-cuenfr-oybpx-grkg";a:2:{i:0;R:15474;i:1;R:801;}s:32:"8:fcnzertrk-cuenfr-oybpx-fhzznel";a:2:{i:0;R:15474;i:1;R:801;}s:24:"8:fcnzertrk-oybpx-fhozvg";a:2:{i:0;R:15474;i:1;R:801;}s:16:"8:fcnzertrk-grkg";a:2:{i:0;R:15474;i:1;R:801;}s:23:"8:fcnzertrk-fhzznel-ybt";a:2:{i:0;R:15474;i:1;R:801;}s:17:"8:evtug-fcnzertrk";a:2:{i:0;R:15474;i:1;R:801;}s:12:"8:fcnex-qrfp";a:2:{i:0;s:9:"ext-spark";i:1;R:801;}s:21:"8:fcnex-zvffvat-dhrel";a:2:{i:0;R:15502;i:1;R:801;}s:17:"8:fcrpvny404-qrfp";a:2:{i:0;s:14:"ext-special404";i:1;R:801;}s:10:"8:reebe404";a:2:{i:0;R:15505;i:1;R:801;}s:17:"8:fcrpvny404-obql";a:2:{i:0;R:15505;i:1;R:801;}s:10:"8:svyryvfg";a:2:{i:0;s:19:"ext-specialfilelist";i:1;R:801;}s:15:"8:svyryvfg-qrfp";a:2:{i:0;R:15509;i:1;R:801;}s:20:"8:svyryvfg-fubj-yvfg";a:2:{i:0;R:15509;i:1;R:801;}s:23:"8:svyryvfg-fubj-tnyyrel";a:2:{i:0;R:15509;i:1;R:801;}s:21:"8:svyryvfg-vzntr-qrfp";a:2:{i:0;R:15509;i:1;R:801;}s:18:"8:fcrpvnygnyx-qrfp";a:2:{i:0;s:15:"ext-specialtalk";i:1;R:801;}s:19:"8:fcuvakfrnepu-qrfp";a:2:{i:0;s:16:"ext-sphinxsearch";i:1;R:801;}s:15:"8:fcuvakcbjrerq";a:2:{i:0;R:15517;i:1;R:801;}s:20:"8:fcuvakpyvragsnvyrq";a:2:{i:0;R:15517;i:1;R:801;}s:20:"8:fcuvakfrnepusnvyrq";a:2:{i:0;R:15517;i:1;R:801;}s:19:"8:fcuvakcfcryyreebe";a:2:{i:0;R:15517;i:1;R:801;}s:10:"8:fdy2jvxv";a:2:{i:0;s:12:"ext-sql2wiki";i:1;R:801;}s:15:"8:fdy2jvxv-qrfp";a:2:{i:0;R:15523;i:1;R:801;}s:18:"8:fdy2jvxv-fcrpvny";a:2:{i:0;R:15523;i:1;R:801;}s:24:"8:fdy2jvxv-pnpur_erserfu";a:2:{i:0;R:15523;i:1;R:801;}s:28:"8:fdy2jvxv-ree-vainyvq_qo_vq";a:2:{i:0;R:15523;i:1;R:801;}s:27:"8:fdy2jvxv-ree-vainyvq_glcr";a:2:{i:0;R:15523;i:1;R:801;}s:32:"8:fdy2jvxv-ree-snvyrq_gb_pbaarpg";a:2:{i:0;R:15523;i:1;R:801;}s:32:"8:fdy2jvxv-ree-snvyrq_gb_rkrphgr";a:2:{i:0;R:15523;i:1;R:801;}s:36:"8:fdy2jvxv-ree-srngher_abg_fhccbegrq";a:2:{i:0;R:15523;i:1;R:801;}s:12:"8:fgnyrcntrf";a:2:{i:0;s:14:"ext-stalepages";i:1;R:801;}s:17:"8:fgnyrcntrf-qrfp";a:2:{i:0;R:15533;i:1;R:801;}s:20:"8:fgnyrcntrf-fhzznel";a:2:{i:0;R:15533;i:1;R:801;}s:17:"8:fgnyxreybt-qrfp";a:2:{i:0;s:14:"ext-stalkerlog";i:1;R:801;}s:22:"8:fgnyxreybt-ybt-ybtva";a:2:{i:0;R:15537;i:1;R:801;}s:23:"8:fgnyxreybt-ybt-ybtbhg";a:2:{i:0;R:15537;i:1;R:801;}s:21:"8:fgnyxreybt-ybt-glcr";a:2:{i:0;R:15537;i:1;R:801;}s:21:"8:fgnyxreybt-ybt-grkg";a:2:{i:0;R:15537;i:1;R:801;}s:18:"8:fgreabtencu-qrfp";a:2:{i:0;s:15:"ext-sternograph";i:1;R:801;}s:19:"8:fgreabtencu-rzcgl";a:2:{i:0;R:15543;i:1;R:801;}s:20:"8:fgreabtencu-arfgrq";a:2:{i:0;R:15543;i:1;R:801;}s:24:"8:fgreabtencu-fcrnxre-vf";a:2:{i:0;R:15543;i:1;R:801;}s:25:"8:fgreabtencu-fcrnxre-cer";a:2:{i:0;R:15543;i:1;R:801;}s:26:"8:fgreabtencu-fcrnxre-cbfg";a:2:{i:0;R:15543;i:1;R:801;}s:23:"8:fgreabtencu-oybpx-cer";a:2:{i:0;R:15543;i:1;R:801;}s:24:"8:fgreabtencu-oybpx-cbfg";a:2:{i:0;R:15543;i:1;R:801;}s:24:"8:fgreabtencu-vayvar-cer";a:2:{i:0;R:15543;i:1;R:801;}s:25:"8:fgreabtencu-vayvar-cbfg";a:2:{i:0;R:15543;i:1;R:801;}s:25:"8:fgreabtencu-pbagrkg-cer";a:2:{i:0;R:15543;i:1;R:801;}s:26:"8:fgreabtencu-pbagrkg-cbfg";a:2:{i:0;R:15543;i:1;R:801;}s:18:"8:fgbpxpunegf-qrfp";a:2:{i:0;s:15:"ext-stockcharts";i:1;R:801;}s:27:"8:fgbpxpunegf-zvffvatgvpxre";a:2:{i:0;R:15556;i:1;R:801;}s:17:"8:fgbelobneq-anzr";a:2:{i:0;s:14:"ext-storyboard";i:1;R:801;}s:17:"8:fgbelobneq-qrfp";a:2:{i:0;R:15559;i:1;R:801;}s:19:"8:evtug-fgbelerivrj";a:2:{i:0;R:15559;i:1;R:801;}s:27:"8:fgbelobneq-nareebebppherq";a:2:{i:0;R:15559;i:1;R:801;}s:24:"8:fgbelobneq-hachoyvfurq";a:2:{i:0;R:15559;i:1;R:801;}s:22:"8:fgbelobneq-choyvfurq";a:2:{i:0;R:15559;i:1;R:801;}s:19:"8:fgbelobneq-uvqqra";a:2:{i:0;R:15559;i:1;R:801;}s:22:"8:fgbelobneq-hachoyvfu";a:2:{i:0;R:15559;i:1;R:801;}s:20:"8:fgbelobneq-choyvfu";a:2:{i:0;R:15559;i:1;R:801;}s:17:"8:fgbelobneq-uvqr";a:2:{i:0;R:15559;i:1;R:801;}s:31:"8:fgbelobneq-bcgvba-hachoyvfurq";a:2:{i:0;R:15559;i:1;R:801;}s:29:"8:fgbelobneq-bcgvba-choyvfurq";a:2:{i:0;R:15559;i:1;R:801;}s:26:"8:fgbelobneq-bcgvba-uvqqra";a:2:{i:0;R:15559;i:1;R:801;}s:7:"8:fgbel";a:2:{i:0;R:15559;i:1;R:801;}s:26:"8:fgbelobneq-fhozvggrqolba";a:2:{i:0;R:15559;i:1;R:801;}s:24:"8:fgbelobneq-ivrjfgbevrf";a:2:{i:0;R:15559;i:1;R:801;}s:24:"8:fgbelobneq-abfhpufgbel";a:2:{i:0;R:15559;i:1;R:801;}s:29:"8:fgbelobneq-fgbelhachoyvfurq";a:2:{i:0;R:15559;i:1;R:801;}s:25:"8:fgbelobneq-abfgbelgvgyr";a:2:{i:0;R:15559;i:1;R:801;}s:21:"8:fgbelobneq-pnagrqvg";a:2:{i:0;R:15559;i:1;R:801;}s:20:"8:fgbelobneq-pnarqvg";a:2:{i:0;R:15559;i:1;R:801;}s:31:"8:fgbelobneq-perngrqnaqzbqvsvrq";a:2:{i:0;R:15559;i:1;R:801;}s:23:"8:fgbelobneq-nhgubeanzr";a:2:{i:0;R:15559;i:1;R:801;}s:27:"8:fgbelobneq-nhgubeybpngvba";a:2:{i:0;R:15559;i:1;R:801;}s:29:"8:fgbelobneq-nhgubebpphcngvba";a:2:{i:0;R:15559;i:1;R:801;}s:24:"8:fgbelobneq-nhguberznvy";a:2:{i:0;R:15559;i:1;R:801;}s:21:"8:fgbelobneq-gurfgbel";a:2:{i:0;R:15559;i:1;R:801;}s:23:"8:fgbelobneq-fgbelfgngr";a:2:{i:0;R:15559;i:1;R:801;}s:21:"8:fgbelobneq-ynathntr";a:2:{i:0;R:15559;i:1;R:801;}s:26:"8:fgbelobneq-fgbelzrgnqngn";a:2:{i:0;R:15559;i:1;R:801;}s:30:"8:fgbelobneq-fgbelzrgnqngnsebz";a:2:{i:0;R:15559;i:1;R:801;}s:21:"8:fgbelobneq-lbheanzr";a:2:{i:0;R:15559;i:1;R:801;}s:21:"8:fgbelobneq-ybpngvba";a:2:{i:0;R:15559;i:1;R:801;}s:23:"8:fgbelobneq-bpphcngvba";a:2:{i:0;R:15559;i:1;R:801;}s:18:"8:fgbelobneq-fgbel";a:2:{i:0;R:15559;i:1;R:801;}s:18:"8:fgbelobneq-cubgb";a:2:{i:0;R:15559;i:1;R:801;}s:18:"8:fgbelobneq-rznvy";a:2:{i:0;R:15559;i:1;R:801;}s:23:"8:fgbelobneq-fgbelgvgyr";a:2:{i:0;R:15559;i:1;R:801;}s:22:"8:fgbelobneq-nterrzrag";a:2:{i:0;R:15559;i:1;R:801;}s:22:"8:fgbelobneq-punefyrsg";a:2:{i:0;R:15559;i:1;R:801;}s:27:"8:fgbelobneq-pnaabgorybatre";a:2:{i:0;R:15559;i:1;R:801;}s:24:"8:fgbelobneq-punefarrqrq";a:2:{i:0;R:15559;i:1;R:801;}s:24:"8:fgbelobneq-arrqgbnterr";a:2:{i:0;R:15559;i:1;R:801;}s:31:"8:fgbelobneq-fhozvffvbapbzcyrgr";a:2:{i:0;R:15559;i:1;R:801;}s:33:"8:fgbelobneq-fhozvffvbavapbzcyrgr";a:2:{i:0;R:15559;i:1;R:801;}s:26:"8:fgbelobneq-nyernqlrkvfgf";a:2:{i:0;R:15559;i:1;R:801;}s:32:"8:fgbelobneq-nyernqlrkvfgfpunatr";a:2:{i:0;R:15559;i:1;R:801;}s:24:"8:fgbelobneq-punatrgvgyr";a:2:{i:0;R:15559;i:1;R:801;}s:25:"8:fgbelobneq-abgfhozvggrq";a:2:{i:0;R:15559;i:1;R:801;}s:24:"8:fgbelobneq-punefgbznal";a:2:{i:0;R:15559;i:1;R:801;}s:28:"8:fgbelobneq-zberpunefarrqrq";a:2:{i:0;R:15559;i:1;R:801;}s:27:"8:fgbelobneq-punenpgrefyrsg";a:2:{i:0;R:15559;i:1;R:801;}s:32:"8:fgbelobneq-perngrqfhpprffshyyl";a:2:{i:0;R:15559;i:1;R:801;}s:23:"8:fgbelobneq-rznvygvgyr";a:2:{i:0;R:15559;i:1;R:801;}s:22:"8:fgbelobneq-rznvyobql";a:2:{i:0;R:15559;i:1;R:801;}s:13:"8:fgbelerivrj";a:2:{i:0;R:15559;i:1;R:801;}s:24:"8:fgbelobneq-qryrgrvzntr";a:2:{i:0;R:15559;i:1;R:801;}s:17:"8:fgbelobneq-qbar";a:2:{i:0;R:15559;i:1;R:801;}s:20:"8:fgbelobneq-jbexvat";a:2:{i:0;R:15559;i:1;R:801;}s:33:"8:fgbelobneq-vzntrqryrgvbapbasvez";a:2:{i:0;R:15559;i:1;R:801;}s:25:"8:fgbelobneq-vzntrqryrgrq";a:2:{i:0;R:15559;i:1;R:801;}s:22:"8:fgbelobneq-fubjvzntr";a:2:{i:0;R:15559;i:1;R:801;}s:22:"8:fgbelobneq-uvqrvzntr";a:2:{i:0;R:15559;i:1;R:801;}s:24:"8:fgbelobneq-qryrgrfgbel";a:2:{i:0;R:15559;i:1;R:801;}s:33:"8:fgbelobneq-fgbelqryrgvbapbasvez";a:2:{i:0;R:15559;i:1;R:801;}s:22:"8:fgevatshapgvbaf-qrfp";a:2:{i:0;s:19:"ext-stringfunctions";i:1;R:801;}s:17:"8:fhocntrsha-qrfp";a:2:{i:0;s:14:"ext-subpagefun";i:1;R:801;}s:10:"8:fcy-qrfp";a:2:{i:0;s:15:"ext-subpagelist";i:1;R:801;}s:16:"8:fcy-abfhocntrf";a:2:{i:0;R:15629;i:1;R:801;}s:18:"8:fcy-abcneragcntr";a:2:{i:0;R:15629;i:1;R:801;}s:13:"8:fcy-abcntrf";a:2:{i:0;R:15629;i:1;R:801;}s:23:"8:fcy-fhocntrf-cne-fbeg";a:2:{i:0;R:15629;i:1;R:801;}s:25:"8:fcy-fhocntrf-cne-fbegol";a:2:{i:0;R:15629;i:1;R:801;}s:25:"8:fcy-fhocntrf-cne-sbezng";a:2:{i:0;R:15629;i:1;R:801;}s:23:"8:fcy-fhocntrf-cne-cntr";a:2:{i:0;R:15629;i:1;R:801;}s:27:"8:fcy-fhocntrf-cne-fubjcntr";a:2:{i:0;R:15629;i:1;R:801;}s:28:"8:fcy-fhocntrf-cne-cngufglyr";a:2:{i:0;R:15629;i:1;R:801;}s:27:"8:fcy-fhocntrf-cne-xvqfbayl";a:2:{i:0;R:15629;i:1;R:801;}s:24:"8:fcy-fhocntrf-cne-yvzvg";a:2:{i:0;R:15629;i:1;R:801;}s:26:"8:fcy-fhocntrf-cne-ryrzrag";a:2:{i:0;R:15629;i:1;R:801;}s:24:"8:fcy-fhocntrf-cne-pynff";a:2:{i:0;R:15629;i:1;R:801;}s:24:"8:fcy-fhocntrf-cne-vageb";a:2:{i:0;R:15629;i:1;R:801;}s:24:"8:fcy-fhocntrf-cne-bhgeb";a:2:{i:0;R:15629;i:1;R:801;}s:26:"8:fcy-fhocntrf-cne-qrsnhyg";a:2:{i:0;R:15629;i:1;R:801;}s:28:"8:fcy-fhocntrf-cne-frcnengbe";a:2:{i:0;R:15629;i:1;R:801;}s:27:"8:fcy-fhocntrf-cne-grzcyngr";a:2:{i:0;R:15629;i:1;R:801;}s:24:"8:fcy-fhocntrf-cne-yvaxf";a:2:{i:0;R:15629;i:1;R:801;}s:21:"8:fhocntrfbegxrl-qrfp";a:2:{i:0;s:18:"ext-subpagesortkey";i:1;R:801;}s:6:"8:fhqb";a:2:{i:0;s:8:"ext-sudo";i:1;R:801;}s:8:"8:hafhqb";a:2:{i:0;R:15652;i:1;R:801;}s:11:"8:fhqb-qrfp";a:2:{i:0;R:15652;i:1;R:801;}s:22:"8:fhqb-crefbany-hafhqb";a:2:{i:0;R:15652;i:1;R:801;}s:11:"8:fhqb-sbez";a:2:{i:0;R:15652;i:1;R:801;}s:11:"8:fhqb-hfre";a:2:{i:0;R:15652;i:1;R:801;}s:13:"8:fhqb-ernfba";a:2:{i:0;R:15652;i:1;R:801;}s:13:"8:fhqb-fhozvg";a:2:{i:0;R:15652;i:1;R:801;}s:13:"8:fhqb-hafhqb";a:2:{i:0;R:15652;i:1;R:801;}s:20:"8:fhqb-hafhqb-fhozvg";a:2:{i:0;R:15652;i:1;R:801;}s:14:"8:fhqb-fhpprff";a:2:{i:0;R:15652;i:1;R:801;}s:12:"8:fhqb-reebe";a:2:{i:0;R:15652;i:1;R:801;}s:29:"8:fhqb-reebe-fhqb-vainyvqhfre";a:2:{i:0;R:15652;i:1;R:801;}s:20:"8:fhqb-reebe-fhqb-vc";a:2:{i:0;R:15652;i:1;R:801;}s:29:"8:fhqb-reebe-fhqb-abarkvfgrag";a:2:{i:0;R:15652;i:1;R:801;}s:22:"8:fhqb-reebe-fhqb-frys";a:2:{i:0;R:15652;i:1;R:801;}s:19:"8:fhqb-reebe-abfhqb";a:2:{i:0;R:15652;i:1;R:801;}s:18:"8:fhqb-ybtcntranzr";a:2:{i:0;R:15652;i:1;R:801;}s:18:"8:fhqb-ybtcntrgrkg";a:2:{i:0;R:15652;i:1;R:801;}s:15:"8:fhqb-ybtragel";a:2:{i:0;R:15652;i:1;R:801;}s:12:"8:evtug-fhqb";a:2:{i:0;R:15652;i:1;R:801;}s:14:"8:fhubfva-qrfp";a:2:{i:0;s:11:"ext-suhosin";i:1;R:801;}s:13:"8:fheirl-qrfp";a:2:{i:0;s:10:"ext-survey";i:1;R:801;}s:19:"8:evtug-fheirlnqzva";a:2:{i:0;R:15676;i:1;R:801;}s:20:"8:evtug-fheirlfhozvg";a:2:{i:0;R:15676;i:1;R:801;}s:20:"8:npgvba-fheirlnqzva";a:2:{i:0;R:15676;i:1;R:801;}s:21:"8:npgvba-fheirlfhozvg";a:2:{i:0;R:15676;i:1;R:801;}s:19:"8:tebhc-fheirlnqzva";a:2:{i:0;R:15676;i:1;R:801;}s:26:"8:tebhc-fheirlnqzva-zrzore";a:2:{i:0;R:15676;i:1;R:801;}s:23:"8:tebhccntr-fheirlnqzva";a:2:{i:0;R:15676;i:1;R:801;}s:20:"8:tebhc-fheirlfhozvg";a:2:{i:0;R:15676;i:1;R:801;}s:27:"8:tebhc-fheirlfhozvg-zrzore";a:2:{i:0;R:15676;i:1;R:801;}s:24:"8:tebhccntr-fheirlfhozvg";a:2:{i:0;R:15676;i:1;R:801;}s:23:"8:tebhc-fheirlnqzva.pff";a:2:{i:0;R:15676;i:1;R:801;}s:22:"8:tebhc-fheirlnqzva.wf";a:2:{i:0;R:15676;i:1;R:801;}s:24:"8:tebhc-fheirlfhozvg.pff";a:2:{i:0;R:15676;i:1;R:801;}s:23:"8:tebhc-fheirlfhozvg.wf";a:2:{i:0;R:15676;i:1;R:801;}s:20:"8:fcrpvny-rqvgfheirl";a:2:{i:0;R:15676;i:1;R:801;}s:17:"8:fcrpvny-fheirlf";a:2:{i:0;R:15676;i:1;R:801;}s:21:"8:fcrpvny-fheirlfgngf";a:2:{i:0;R:15676;i:1;R:801;}s:20:"8:fcrpvny-gnxrfheirl";a:2:{i:0;R:15676;i:1;R:801;}s:24:"8:fheirl-ree-vq-kbe-anzr";a:2:{i:0;R:15676;i:1;R:801;}s:32:"8:fheirl-ree-fheirl-anzr-haxabja";a:2:{i:0;R:15676;i:1;R:801;}s:27:"8:fheirl-ree-qhcyvpngr-anzr";a:2:{i:0;R:15676;i:1;R:801;}s:26:"8:fheirl-ree-vqf-kbe-anzrf";a:2:{i:0;R:15676;i:1;R:801;}s:27:"8:fheirl-dhrfgvba-glcr-grkg";a:2:{i:0;R:15676;i:1;R:801;}s:29:"8:fheirl-dhrfgvba-glcr-ahzore";a:2:{i:0;R:15676;i:1;R:801;}s:29:"8:fheirl-dhrfgvba-glcr-fryrpg";a:2:{i:0;R:15676;i:1;R:801;}s:28:"8:fheirl-dhrfgvba-glcr-enqvb";a:2:{i:0;R:15676;i:1;R:801;}s:31:"8:fheirl-dhrfgvba-glcr-grkgnern";a:2:{i:0;R:15676;i:1;R:801;}s:28:"8:fheirl-dhrfgvba-glcr-purpx";a:2:{i:0;R:15676;i:1;R:801;}s:22:"8:fheirl-hfre-glcr-nyy";a:2:{i:0;R:15676;i:1;R:801;}s:27:"8:fheirl-hfre-glcr-ybttrqva";a:2:{i:0;R:15676;i:1;R:801;}s:28:"8:fheirl-hfre-glcr-pbasvezrq";a:2:{i:0;R:15676;i:1;R:801;}s:25:"8:fheirl-hfre-glcr-rqvgbe";a:2:{i:0;R:15676;i:1;R:801;}s:23:"8:fheirl-hfre-glcr-naba";a:2:{i:0;R:15676;i:1;R:801;}s:24:"8:fheirl-anivtngvba-rqvg";a:2:{i:0;R:15676;i:1;R:801;}s:24:"8:fheirl-anivtngvba-gnxr";a:2:{i:0;R:15676;i:1;R:801;}s:24:"8:fheirl-anivtngvba-yvfg";a:2:{i:0;R:15676;i:1;R:801;}s:25:"8:fheirl-anivtngvba-fgngf";a:2:{i:0;R:15676;i:1;R:801;}s:24:"8:fheirlf-fcrpvny-nqqarj";a:2:{i:0;R:15676;i:1;R:801;}s:25:"8:fheirlf-fcrpvny-anzrqbp";a:2:{i:0;R:15676;i:1;R:801;}s:25:"8:fheirlf-fcrpvny-arjanzr";a:2:{i:0;R:15676;i:1;R:801;}s:21:"8:fheirlf-fcrpvny-nqq";a:2:{i:0;R:15676;i:1;R:801;}s:26:"8:fheirlf-fcrpvny-rkvfgvat";a:2:{i:0;R:15676;i:1;R:801;}s:23:"8:fheirlf-fcrpvny-gvgyr";a:2:{i:0;R:15676;i:1;R:801;}s:24:"8:fheirlf-fcrpvny-fgnghf";a:2:{i:0;R:15676;i:1;R:801;}s:23:"8:fheirlf-fcrpvny-fgngf";a:2:{i:0;R:15676;i:1;R:801;}s:22:"8:fheirlf-fcrpvny-rqvg";a:2:{i:0;R:15676;i:1;R:801;}s:22:"8:fheirlf-fcrpvny-fnir";a:2:{i:0;R:15676;i:1;R:801;}s:24:"8:fheirlf-fcrpvny-qryrgr";a:2:{i:0;R:15676;i:1;R:801;}s:25:"8:fheirlf-fcrpvny-ranoyrq";a:2:{i:0;R:15676;i:1;R:801;}s:26:"8:fheirlf-fcrpvny-qvfnoyrq";a:2:{i:0;R:15676;i:1;R:801;}s:32:"8:fheirlf-fcrpvny-pbasvez-qryrgr";a:2:{i:0;R:15676;i:1;R:801;}s:31:"8:fheirlf-fcrpvny-qryrgr-snvyrq";a:2:{i:0;R:15676;i:1;R:801;}s:31:"8:fheirl-fcrpvny-ynory-hfreglcr";a:2:{i:0;R:15676;i:1;R:801;}s:31:"8:fheirl-fcrpvny-ynory-zvacntrf";a:2:{i:0;R:15676;i:1;R:801;}s:28:"8:fheirlf-gnxrfheirl-ybnqvat";a:2:{i:0;R:15676;i:1;R:801;}s:33:"8:fheirlf-gnxrfheirl-abfhpufheirl";a:2:{i:0;R:15676;i:1;R:801;}s:36:"8:fheirlf-gnxrfheirl-jnea-abgranoyrq";a:2:{i:0;R:15676;i:1;R:801;}s:37:"8:fheirlf-gnxrfheirl-fheirlabgranoyrq";a:2:{i:0;R:15676;i:1;R:801;}s:34:"8:fheirlf-fheirlfgngf-abfhpufheirl";a:2:{i:0;R:15676;i:1;R:801;}s:26:"8:fheirlf-fheirlfgngf-anzr";a:2:{i:0;R:15676;i:1;R:801;}s:27:"8:fheirlf-fheirlfgngf-gvgyr";a:2:{i:0;R:15676;i:1;R:801;}s:28:"8:fheirlf-fheirlfgngf-fgnghf";a:2:{i:0;R:15676;i:1;R:801;}s:35:"8:fheirlf-fheirlfgngf-dhrfgvbapbhag";a:2:{i:0;R:15676;i:1;R:801;}s:37:"8:fheirlf-fheirlfgngf-fhozvffvbapbhag";a:2:{i:0;R:15676;i:1;R:801;}s:29:"8:fheirlf-fheirlfgngf-ranoyrq";a:2:{i:0;R:15676;i:1;R:801;}s:30:"8:fheirlf-fheirlfgngf-qvfnoyrq";a:2:{i:0;R:15676;i:1;R:801;}s:31:"8:fheirlf-fheirlfgngf-dhrfgvbaf";a:2:{i:0;R:15676;i:1;R:801;}s:33:"8:fheirlf-fheirlfgngf-dhrfgvba-ae";a:2:{i:0;R:15676;i:1;R:801;}s:32:"8:fheirlf-fheirlfgngf-dhrfgvba-#";a:2:{i:0;R:15676;i:1;R:801;}s:35:"8:fheirlf-fheirlfgngf-dhrfgvba-glcr";a:2:{i:0;R:15676;i:1;R:801;}s:35:"8:fheirlf-fheirlfgngf-dhrfgvba-grkg";a:2:{i:0;R:15676;i:1;R:801;}s:42:"8:fheirlf-fheirlfgngf-dhrfgvba-nafjrepbhag";a:2:{i:0;R:15676;i:1;R:801;}s:38:"8:fheirlf-fheirlfgngf-dhrfgvba-nafjref";a:2:{i:0;R:15676;i:1;R:801;}s:37:"8:fheirlf-fheirlfgngf-dhrfgvba-nafjre";a:2:{i:0;R:15676;i:1;R:801;}s:31:"8:fheirlf-fheirlfgngf-hapurpxrq";a:2:{i:0;R:15676;i:1;R:801;}s:29:"8:fheirlf-fheirlfgngf-purpxrq";a:2:{i:0;R:15676;i:1;R:801;}s:30:"8:fheirlf-fcrpvny-haxabja-anzr";a:2:{i:0;R:15676;i:1;R:801;}s:27:"8:fheirl-fcrpvny-ynory-anzr";a:2:{i:0;R:15676;i:1;R:801;}s:28:"8:fheirl-fcrpvny-ynory-gvgyr";a:2:{i:0;R:15676;i:1;R:801;}s:30:"8:fheirl-fcrpvny-ynory-ranoyrq";a:2:{i:0;R:15676;i:1;R:801;}s:28:"8:fheirl-fcrpvny-ynory-engvb";a:2:{i:0;R:15676;i:1;R:801;}s:32:"8:fheirl-fcrpvny-ynory-nqq-svefg";a:2:{i:0;R:15676;i:1;R:801;}s:34:"8:fheirl-fcrpvny-ynory-nqq-nabgure";a:2:{i:0;R:15676;i:1;R:801;}s:34:"8:fheirl-fcrpvny-ynory-nqqdhrfgvba";a:2:{i:0;R:15676;i:1;R:801;}s:26:"8:fheirl-dhrfgvba-ynory-ae";a:2:{i:0;R:15676;i:1;R:801;}s:31:"8:fheirl-fcrpvny-ynory-erdhverq";a:2:{i:0;R:15676;i:1;R:801;}s:27:"8:fheirl-fcrpvny-ynory-glcr";a:2:{i:0;R:15676;i:1;R:801;}s:27:"8:fheirl-fcrpvny-ynory-grkg";a:2:{i:0;R:15676;i:1;R:801;}s:23:"8:fheirl-fcrpvny-erzbir";a:2:{i:0;R:15676;i:1;R:801;}s:31:"8:fheirl-fcrpvny-erzbir-pbasvez";a:2:{i:0;R:15676;i:1;R:801;}s:29:"8:fheirl-fcrpvny-ynory-urnqre";a:2:{i:0;R:15676;i:1;R:801;}s:29:"8:fheirl-fcrpvny-ynory-sbbgre";a:2:{i:0;R:15676;i:1;R:801;}s:29:"8:fheirl-fcrpvny-ynory-gunaxf";a:2:{i:0;R:15676;i:1;R:801;}s:30:"8:fheirl-fcrpvny-ynory-nafjref";a:2:{i:0;R:15676;i:1;R:801;}s:22:"8:fheirl-wdhrel-fhozvg";a:2:{i:0;R:15676;i:1;R:801;}s:22:"8:fheirl-wdhrel-svavfu";a:2:{i:0;R:15676;i:1;R:801;}s:27:"8:fheirl-wdhrel-ybnq-snvyrq";a:2:{i:0;R:15676;i:1;R:801;}s:25:"8:fitrqvg-rqvgohggba-rqvg";a:2:{i:0;s:11:"ext-svgedit";i:1;R:801;}s:23:"8:fitrqvg-fhzznel-ynory";a:2:{i:0;R:15775;i:1;R:801;}s:25:"8:fitrqvg-fhzznel-qrsnhyg";a:2:{i:0;R:15775;i:1;R:801;}s:27:"8:fitrqvg-rqvgbe-fnir-pybfr";a:2:{i:0;R:15775;i:1;R:801;}s:22:"8:fitrqvg-rqvgbe-pybfr";a:2:{i:0;R:15775;i:1;R:801;}s:14:"8:fitrqvg-qrfp";a:2:{i:0;R:15775;i:1;R:801;}s:18:"8:fitrqvg-rqvg-gno";a:2:{i:0;R:15775;i:1;R:801;}s:26:"8:fitrqvg-rqvg-gno-gbbygvc";a:2:{i:0;R:15775;i:1;R:801;}s:24:"8:fitrqvg-gbbyone-vafreg";a:2:{i:0;R:15775;i:1;R:801;}s:9:"8:fitmbbz";a:2:{i:0;s:11:"ext-svgzoom";i:1;R:801;}s:14:"8:fitmbbz-qrfp";a:2:{i:0;R:15785;i:1;R:801;}s:11:"8:gno0-qrfp";a:2:{i:0;s:8:"ext-tab0";i:1;R:801;}s:15:"8:gnyxurer-qrfp";a:2:{i:0;s:12:"ext-talkhere";i:1;R:801;}s:16:"8:gnyxurer-gvgyr";a:2:{i:0;R:15790;i:1;R:801;}s:19:"8:gnyxurer-urnqgrkg";a:2:{i:0;R:15790;i:1;R:801;}s:19:"8:gnyxurer-sbbggrkg";a:2:{i:0;R:15790;i:1;R:801;}s:19:"8:gnyxurer-gnyxcntr";a:2:{i:0;R:15790;i:1;R:801;}s:17:"8:gnyxurer-abgnyx";a:2:{i:0;R:15790;i:1;R:801;}s:21:"8:gnyxurer-nqqpbzzrag";a:2:{i:0;R:15790;i:1;R:801;}s:22:"8:gnyxurer-orsbervachg";a:2:{i:0;R:15790;i:1;R:801;}s:21:"8:gnyxurer-nsgrevachg";a:2:{i:0;R:15790;i:1;R:801;}s:20:"8:gnyxurer-nsgresbez";a:2:{i:0;R:15790;i:1;R:801;}s:18:"8:gnyxurer-ybnqvat";a:2:{i:0;R:15790;i:1;R:801;}s:19:"8:gnyxurer-pbyyncfr";a:2:{i:0;R:15790;i:1;R:801;}s:7:"8:gnfxf";a:2:{i:0;s:9:"ext-tasks";i:1;R:801;}s:12:"8:gnfxf_qrfp";a:2:{i:0;R:15803;i:1;R:801;}s:11:"8:gnfxf_gno";a:2:{i:0;R:15803;i:1;R:801;}s:13:"8:gnfxf_gvgyr";a:2:{i:0;R:15803;i:1;R:801;}s:16:"8:gnfxf_sbez_arj";a:2:{i:0;R:15803;i:1;R:801;}s:20:"8:gnfxf_sbez_pbzzrag";a:2:{i:0;R:15803;i:1;R:801;}s:14:"8:gnfxf_reebe1";a:2:{i:0;R:15803;i:1;R:801;}s:11:"8:gnfxf_bx1";a:2:{i:0;R:15803;i:1;R:801;}s:21:"8:gnfxf_perngr_urnqre";a:2:{i:0;R:15803;i:1;R:801;}s:23:"8:gnfxf_rkvfgvat_urnqre";a:2:{i:0;R:15803;i:1;R:801;}s:29:"8:gnfxf_rkvfgvat_gnoyr_urnqre";a:2:{i:0;R:15803;i:1;R:801;}s:13:"8:gnfxf_abbar";a:2:{i:0;R:15803;i:1;R:801;}s:17:"8:gnfxf_nffvta_zr";a:2:{i:0;R:15803;i:1;R:801;}s:17:"8:gnfxf_nffvta_gb";a:2:{i:0;R:15803;i:1;R:801;}s:19:"8:gnfxf_hanffvta_zr";a:2:{i:0;R:15803;i:1;R:801;}s:13:"8:gnfxf_pybfr";a:2:{i:0;R:15803;i:1;R:801;}s:15:"8:gnfxf_jbagsvk";a:2:{i:0;R:15803;i:1;R:801;}s:14:"8:gnfxf_qryrgr";a:2:{i:0;R:15803;i:1;R:801;}s:28:"8:gnfxf_ab_gnfx_qryrgr_gvgyr";a:2:{i:0;R:15803;i:1;R:801;}s:27:"8:gnfxf_ab_gnfx_qryrgr_grkr";a:2:{i:0;R:15803;i:1;R:801;}s:21:"8:gnfxf_npgvba_qryrgr";a:2:{i:0;R:15803;i:1;R:801;}s:24:"8:gnfxf_gnfx_jnf_qryrgrq";a:2:{i:0;R:15803;i:1;R:801;}s:14:"8:gnfxf_erbcra";a:2:{i:0;R:15803;i:1;R:801;}s:18:"8:gnfxf_nffvtarqgb";a:2:{i:0;R:15803;i:1;R:801;}s:18:"8:gnfxf_perngrq_ol";a:2:{i:0;R:15803;i:1;R:801;}s:28:"8:gnfxf_qvfphffvba_cntr_yvax";a:2:{i:0;R:15803;i:1;R:801;}s:16:"8:gnfxf_pybfrqol";a:2:{i:0;R:15803;i:1;R:801;}s:27:"8:gnfxf_nffvtarq_zlfrys_ybt";a:2:{i:0;R:15803;i:1;R:801;}s:27:"8:gnfxf_qvfphffvba_cntr_sbe";a:2:{i:0;R:15803;i:1;R:801;}s:21:"8:gnfxf_fvqrone_gvgyr";a:2:{i:0;R:15803;i:1;R:801;}s:12:"8:gnfxf_urer";a:2:{i:0;R:15803;i:1;R:801;}s:16:"8:gnfxf_ergheagb";a:2:{i:0;R:15803;i:1;R:801;}s:22:"8:gnfxf_frr_cntr_gnfxf";a:2:{i:0;R:15803;i:1;R:801;}s:24:"8:gnfxf_gnfx_vf_nffvtarq";a:2:{i:0;R:15803;i:1;R:801;}s:23:"8:gnfxf_cynva_grkg_bayl";a:2:{i:0;R:15803;i:1;R:801;}s:17:"8:gnfxf_uryc_cntr";a:2:{i:0;R:15803;i:1;R:801;}s:22:"8:gnfxf_uryc_cntr_yvax";a:2:{i:0;R:15803;i:1;R:801;}s:22:"8:gnfxf_uryc_frcnengbe";a:2:{i:0;R:15803;i:1;R:801;}s:20:"8:gnfxf_zber_yvxr_vg";a:2:{i:0;R:15803;i:1;R:801;}s:18:"8:gnfxf_gnfx_glcrf";a:2:{i:0;R:15803;i:1;R:801;}s:26:"8:gnfxf_fvtavsvpnapr_beqre";a:2:{i:0;R:15803;i:1;R:801;}s:22:"8:gnfxf_perngvba_gnfxf";a:2:{i:0;R:15803;i:1;R:801;}s:25:"8:gnfxf_rirag_ba_perngvba";a:2:{i:0;R:15803;i:1;R:801;}s:30:"8:gnfxf_rirag_ba_perngvba_naba";a:2:{i:0;R:15803;i:1;R:801;}s:27:"8:gnfxf_ba_perngvba_pbzzrag";a:2:{i:0;R:15803;i:1;R:801;}s:29:"8:gnfxf_yvax_lbhe_nffvtazragf";a:2:{i:0;R:15803;i:1;R:801;}s:28:"8:gnfxf_frr_lbhe_nffvtazragf";a:2:{i:0;R:15803;i:1;R:801;}s:22:"8:gnfxf_zl_nffvtazragf";a:2:{i:0;R:15803;i:1;R:801;}s:25:"8:gnfxf_gnoyr_urnqre_cntr";a:2:{i:0;R:15803;i:1;R:801;}s:31:"8:gnfxf_lbh_unir_ab_nffvtazragf";a:2:{i:0;R:15803;i:1;R:801;}s:25:"8:gnfxf_frnepu_sbez_gvgyr";a:2:{i:0;R:15803;i:1;R:801;}s:20:"8:gnfxf_frnepu_gnfxf";a:2:{i:0;R:15803;i:1;R:801;}s:21:"8:gnfxf_frnepu_fgnghf";a:2:{i:0;R:15803;i:1;R:801;}s:35:"8:gnfxf_frnepu_ab_gnfxf_pubfra_abgr";a:2:{i:0;R:15803;i:1;R:801;}s:22:"8:gnfxf_frnepu_erfhygf";a:2:{i:0;R:15803;i:1;R:801;}s:16:"8:gnfxf_cerivbhf";a:2:{i:0;R:15803;i:1;R:801;}s:12:"8:gnfxf_arkg";a:2:{i:0;R:15803;i:1;R:801;}s:12:"8:gnfxf_fbeg";a:2:{i:0;R:15803;i:1;R:801;}s:17:"8:gnfxf_nfpraqvat";a:2:{i:0;R:15803;i:1;R:801;}s:20:"8:gnfxf_frnepu_yvzvg";a:2:{i:0;R:15803;i:1;R:801;}s:19:"8:gnfxf_fgnghf_bcra";a:2:{i:0;R:15803;i:1;R:801;}s:23:"8:gnfxf_fgnghf_nffvtarq";a:2:{i:0;R:15803;i:1;R:801;}s:21:"8:gnfxf_fgnghf_pybfrq";a:2:{i:0;R:15803;i:1;R:801;}s:22:"8:gnfxf_fgnghf_jbagsvk";a:2:{i:0;R:15803;i:1;R:801;}s:19:"8:gnfxf_npgvba_bcra";a:2:{i:0;R:15803;i:1;R:801;}s:23:"8:gnfxf_npgvba_nffvtarq";a:2:{i:0;R:15803;i:1;R:801;}s:21:"8:gnfxf_npgvba_pybfrq";a:2:{i:0;R:15803;i:1;R:801;}s:22:"8:gnfxf_npgvba_jbagsvk";a:2:{i:0;R:15803;i:1;R:801;}s:19:"8:gnfxf_fvta_qryrgr";a:2:{i:0;R:15803;i:1;R:801;}s:15:"8:gnfxf_ybtcntr";a:2:{i:0;R:15803;i:1;R:801;}s:19:"8:gnfxf_ybtcntrgrkg";a:2:{i:0;R:15803;i:1;R:801;}s:16:"8:gnfxf_ybtragel";a:2:{i:0;R:15803;i:1;R:801;}s:29:"8:gnfxf-cers-fubjgnfxpbzzragf";a:2:{i:0;R:15803;i:1;R:801;}s:19:"8:grzcyngrvasb-qrfp";a:2:{i:0;s:16:"ext-templateinfo";i:1;R:801;}s:21:"8:grzcyngrvasb-urnqre";a:2:{i:0;R:15877;i:1;R:801;}s:14:"8:grzcyngryvax";a:2:{i:0;s:16:"ext-templatelink";i:1;R:801;}s:19:"8:grzcyngryvax_qrfp";a:2:{i:0;R:15880;i:1;R:801;}s:20:"8:grzcyngryvax_rzcgl";a:2:{i:0;R:15880;i:1;R:801;}s:23:"8:grzcyngryvax_arjgvgyr";a:2:{i:0;R:15880;i:1;R:801;}s:11:"8:gvql-qrfp";a:2:{i:0;s:11:"ext-tidytab";i:1;R:801;}s:6:"8:gvql";a:2:{i:0;R:15885;i:1;R:801;}s:8:"8:hagvql";a:2:{i:0;R:15885;i:1;R:801;}s:17:"8:gvzrqzrqvn-qrfp";a:2:{i:0;s:21:"ext-timedmediahandler";i:1;R:801;}s:28:"8:gvzrqzrqvn-btt-fubeg-nhqvb";a:2:{i:0;R:15889;i:1;R:801;}s:28:"8:gvzrqzrqvn-btt-fubeg-ivqrb";a:2:{i:0;R:15889;i:1;R:801;}s:30:"8:gvzrqzrqvn-btt-fubeg-trareny";a:2:{i:0;R:15889;i:1;R:801;}s:27:"8:gvzrqzrqvn-btt-ybat-nhqvb";a:2:{i:0;R:15889;i:1;R:801;}s:27:"8:gvzrqzrqvn-btt-ybat-ivqrb";a:2:{i:0;R:15889;i:1;R:801;}s:33:"8:gvzrqzrqvn-btt-ybat-zhygvcyrkrq";a:2:{i:0;R:15889;i:1;R:801;}s:29:"8:gvzrqzrqvn-btt-ybat-trareny";a:2:{i:0;R:15889;i:1;R:801;}s:27:"8:gvzrqzrqvn-btt-ybat-reebe";a:2:{i:0;R:15889;i:1;R:801;}s:29:"8:gvzrqzrqvn-jroz-fubeg-ivqrb";a:2:{i:0;R:15889;i:1;R:801;}s:28:"8:gvzrqzrqvn-jroz-ybat-ivqrb";a:2:{i:0;R:15889;i:1;R:801;}s:25:"8:gvzrqzrqvn-ab-cynlre-wf";a:2:{i:0;R:15889;i:1;R:801;}s:17:"8:gvzrqzrqvn-zber";a:2:{i:0;R:15889;i:1;R:801;}s:20:"8:gvzrqzrqvn-qvfzvff";a:2:{i:0;R:15889;i:1;R:801;}s:21:"8:gvzrqzrqvn-qbjaybnq";a:2:{i:0;R:15889;i:1;R:801;}s:23:"8:gvzrqzrqvn-cynl-zrqvn";a:2:{i:0;R:15889;i:1;R:801;}s:22:"8:gvzrqzrqvn-qrfp-yvax";a:2:{i:0;R:15889;i:1;R:801;}s:29:"8:gvzrqzrqvn-bttguhzo-irefvba";a:2:{i:0;R:15889;i:1;R:801;}s:28:"8:gvzrqzrqvn-bttguhzo-snvyrq";a:2:{i:0;R:15889;i:1;R:801;}s:26:"8:gvzrqzrqvn-fgnghf-urnqre";a:2:{i:0;R:15889;i:1;R:801;}s:26:"8:gvzrqzrqvn-hcqngr-fgnghf";a:2:{i:0;R:15889;i:1;R:801;}s:19:"8:gvzrqzrqvn-fgnghf";a:2:{i:0;R:15889;i:1;R:801;}s:27:"8:gvzrqzrqvn-fgnghf-haxabja";a:2:{i:0;R:15889;i:1;R:801;}s:26:"8:gvzrqzrqvn-genafpbqrvasb";a:2:{i:0;R:15889;i:1;R:801;}s:20:"8:gvzrqzrqvn-npgvbaf";a:2:{i:0;R:15889;i:1;R:801;}s:24:"8:gvzrqzrqvn-qverpg-yvax";a:2:{i:0;R:15889;i:1;R:801;}s:22:"8:gvzrqzrqvn-abg-ernql";a:2:{i:0;R:15889;i:1;R:801;}s:25:"8:gvzrqzrqvn-pbzcyrgrq-ba";a:2:{i:0;R:15889;i:1;R:801;}s:21:"8:gvzrqzrqvn-reebe-ba";a:2:{i:0;R:15889;i:1;R:801;}s:30:"8:gvzrqzrqvn-fgnegrq-genafpbqr";a:2:{i:0;R:15889;i:1;R:801;}s:25:"8:gvzrqzrqvn-creprag-qbar";a:2:{i:0;R:15889;i:1;R:801;}s:25:"8:gvzrqzrqvn-va-wbo-dhrhr";a:2:{i:0;R:15889;i:1;R:801;}s:32:"8:gvzrqzrqvn-haxabja-gnetrg-fvmr";a:2:{i:0;R:15889;i:1;R:801;}s:17:"8:gvzrqzrqvn-qnlf";a:2:{i:0;R:15889;i:1;R:801;}s:18:"8:gvzrqzrqvn-ubhef";a:2:{i:0;R:15889;i:1;R:801;}s:20:"8:gvzrqzrqvn-zvahgrf";a:2:{i:0;R:15889;i:1;R:801;}s:20:"8:gvzrqzrqvn-frpbaqf";a:2:{i:0;R:15889;i:1;R:801;}s:32:"8:gvzrqzrqvn-gvzr-4-zrnfherzragf";a:2:{i:0;R:15889;i:1;R:801;}s:32:"8:gvzrqzrqvn-gvzr-3-zrnfherzragf";a:2:{i:0;R:15889;i:1;R:801;}s:32:"8:gvzrqzrqvn-gvzr-2-zrnfherzragf";a:2:{i:0;R:15889;i:1;R:801;}s:32:"8:gvzrqzrqvn-gvzr-1-zrnfherzragf";a:2:{i:0;R:15889;i:1;R:801;}s:23:"8:gvzrqzrqvn-fubj-reebe";a:2:{i:0;R:15889;i:1;R:801;}s:18:"8:gvzrqzrqvn-erfrg";a:2:{i:0;R:15889;i:1;R:801;}s:26:"8:gvzrqzrqvn-erfrg-pbasvez";a:2:{i:0;R:15889;i:1;R:801;}s:24:"8:gvzrqzrqvn-erfrg-reebe";a:2:{i:0;R:15889;i:1;R:801;}s:16:"8:gvzrqzrqvn-btt";a:2:{i:0;R:15889;i:1;R:801;}s:17:"8:gvzrqzrqvn-jroz";a:2:{i:0;R:15889;i:1;R:801;}s:24:"8:gvzrqzrqvn-fbhepr-svyr";a:2:{i:0;R:15889;i:1;R:801;}s:29:"8:gvzrqzrqvn-fbhepr-svyr-qrfp";a:2:{i:0;R:15889;i:1;R:801;}s:32:"8:gvzrqzrqvn-qrevingvir-160c.bti";a:2:{i:0;R:15889;i:1;R:801;}s:37:"8:gvzrqzrqvn-qrevingvir-qrfp-160c.bti";a:2:{i:0;R:15889;i:1;R:801;}s:32:"8:gvzrqzrqvn-qrevingvir-360c.bti";a:2:{i:0;R:15889;i:1;R:801;}s:37:"8:gvzrqzrqvn-qrevingvir-qrfp-360c.bti";a:2:{i:0;R:15889;i:1;R:801;}s:32:"8:gvzrqzrqvn-qrevingvir-480c.bti";a:2:{i:0;R:15889;i:1;R:801;}s:37:"8:gvzrqzrqvn-qrevingvir-qrfp-480c.bti";a:2:{i:0;R:15889;i:1;R:801;}s:32:"8:gvzrqzrqvn-qrevingvir-720c.bti";a:2:{i:0;R:15889;i:1;R:801;}s:37:"8:gvzrqzrqvn-qrevingvir-qrfp-720c.bti";a:2:{i:0;R:15889;i:1;R:801;}s:33:"8:gvzrqzrqvn-qrevingvir-360c.jroz";a:2:{i:0;R:15889;i:1;R:801;}s:38:"8:gvzrqzrqvn-qrevingvir-qrfp-360c.jroz";a:2:{i:0;R:15889;i:1;R:801;}s:33:"8:gvzrqzrqvn-qrevingvir-480c.jroz";a:2:{i:0;R:15889;i:1;R:801;}s:38:"8:gvzrqzrqvn-qrevingvir-qrfp-480c.jroz";a:2:{i:0;R:15889;i:1;R:801;}s:33:"8:gvzrqzrqvn-qrevingvir-720c.jroz";a:2:{i:0;R:15889;i:1;R:801;}s:38:"8:gvzrqzrqvn-qrevingvir-qrfp-720c.jroz";a:2:{i:0;R:15889;i:1;R:801;}s:30:"8:gvzrqzrqvn-fhogvgyr-ynathntr";a:2:{i:0;R:15889;i:1;R:801;}s:30:"8:gvzrqzrqvn-fhogvgyr-ab-ivqrb";a:2:{i:0;R:15889;i:1;R:801;}s:34:"8:gvzrqzrqvn-fhogvgyr-ab-fhogvgyrf";a:2:{i:0;R:15889;i:1;R:801;}s:30:"8:zjr-rzorqcynlre-perqvg-gvgyr";a:2:{i:0;s:33:"ext-timedmediahandler-embedplayer";i:1;R:801;}s:29:"8:zjr-rzorqcynlre-perqvg-qngr";a:2:{i:0;R:15956;i:1;R:801;}s:31:"8:zjr-rzorqcynlre-perqvg-nhgube";a:2:{i:0;R:15956;i:1;R:801;}s:32:"8:zjr-rzorqcynlre-ybnqvat_cyhtva";a:2:{i:0;R:15956;i:1;R:801;}s:33:"8:zjr-rzorqcynlre-fryrpg_cynlonpx";a:2:{i:0;R:15956;i:1;R:801;}s:27:"8:zjr-rzorqcynlre-yvax_onpx";a:2:{i:0;R:15956;i:1;R:801;}s:32:"8:zjr-rzorqcynlre-reebe_fjnc_ivq";a:2:{i:0;R:15956;i:1;R:801;}s:40:"8:zjr-rzorqcynlre-nqq_gb_raq_bs_frdhrapr";a:2:{i:0;R:15956;i:1;R:801;}s:38:"8:zjr-rzorqcynlre-zvffvat_ivqrb_fgernz";a:2:{i:0;R:15956;i:1;R:801;}s:27:"8:zjr-rzorqcynlre-cynl_pyvc";a:2:{i:0;R:15956;i:1;R:801;}s:28:"8:zjr-rzorqcynlre-cnhfr_pyvc";a:2:{i:0;R:15956;i:1;R:801;}s:32:"8:zjr-rzorqcynlre-ibyhzr_pbageby";a:2:{i:0;R:15956;i:1;R:801;}s:32:"8:zjr-rzorqcynlre-cynlre_bcgvbaf";a:2:{i:0;R:15956;i:1;R:801;}s:28:"8:zjr-rzorqcynlre-gvzrq_grkg";a:2:{i:0;R:15956;i:1;R:801;}s:35:"8:zjr-rzorqcynlre-cynlre_shyyfperra";a:2:{i:0;R:15956;i:1;R:801;}s:31:"8:zjr-rzorqcynlre-arkg_pyvc_zft";a:2:{i:0;R:15956;i:1;R:801;}s:31:"8:zjr-rzorqcynlre-ceri_pyvc_zft";a:2:{i:0;R:15956;i:1;R:801;}s:34:"8:zjr-rzorqcynlre-pheerag_pyvc_zft";a:2:{i:0;R:15956;i:1;R:801;}s:25:"8:zjr-rzorqcynlre-frrx_gb";a:2:{i:0;R:15956;i:1;R:801;}s:24:"8:zjr-rzorqcynlre-cnhfrq";a:2:{i:0;R:15956;i:1;R:801;}s:34:"8:zjr-rzorqcynlre-qbjaybnq_frtzrag";a:2:{i:0;R:15956;i:1;R:801;}s:31:"8:zjr-rzorqcynlre-qbjaybnq_shyy";a:2:{i:0;R:15956;i:1;R:801;}s:38:"8:zjr-rzorqcynlre-qbjaybnq_evtug_pyvpx";a:2:{i:0;R:15956;i:1;R:801;}s:31:"8:zjr-rzorqcynlre-qbjaybnq_pyvc";a:2:{i:0;R:15956;i:1;R:801;}s:31:"8:zjr-rzorqcynlre-qbjaybnq_grkg";a:2:{i:0;R:15956;i:1;R:801;}s:26:"8:zjr-rzorqcynlre-qbjaybnq";a:2:{i:0;R:15956;i:1;R:801;}s:23:"8:zjr-rzorqcynlre-funer";a:2:{i:0;R:15956;i:1;R:801;}s:25:"8:zjr-rzorqcynlre-perqvgf";a:2:{i:0;R:15956;i:1;R:801;}s:31:"8:zjr-rzorqcynlre-nobhg-yvoenel";a:2:{i:0;R:15956;i:1;R:801;}s:36:"8:zjr-rzorqcynlre-nobhg-yvoenel-qrfp";a:2:{i:0;R:15956;i:1;R:801;}s:31:"8:zjr-rzorqcynlre-pyvc_yvaxonpx";a:2:{i:0;R:15956;i:1;R:801;}s:31:"8:zjr-rzorqcynlre-pubbfr_cynlre";a:2:{i:0;R:15956;i:1;R:801;}s:27:"8:zjr-rzorqcynlre-ab-cynlre";a:2:{i:0;R:15956;i:1;R:801;}s:34:"8:zjr-rzorqcynlre-funer_guvf_ivqrb";a:2:{i:0;R:15956;i:1;R:801;}s:31:"8:zjr-rzorqcynlre-ivqrb_perqvgf";a:2:{i:0;R:15956;i:1;R:801;}s:34:"8:zjr-rzorqcynlre-ab-ivqrb_perqvgf";a:2:{i:0;R:15956;i:1;R:801;}s:40:"8:zjr-rzorqcynlre-xnyghen-cyngsbez-gvgyr";a:2:{i:0;R:15956;i:1;R:801;}s:26:"8:zjr-rzorqcynlre-zrah_oga";a:2:{i:0;R:15956;i:1;R:801;}s:27:"8:zjr-rzorqcynlre-pybfr_oga";a:2:{i:0;R:15956;i:1;R:801;}s:39:"8:zjr-rzorqcynlre-btt-cynlre-iyp-cynlre";a:2:{i:0;R:15956;i:1;R:801;}s:38:"8:zjr-rzorqcynlre-btt-cynlre-bttangvir";a:2:{i:0;R:15956;i:1;R:801;}s:39:"8:zjr-rzorqcynlre-btt-cynlre-u264angvir";a:2:{i:0;R:15956;i:1;R:801;}s:39:"8:zjr-rzorqcynlre-btt-cynlre-jrozangvir";a:2:{i:0;R:15956;i:1;R:801;}s:38:"8:zjr-rzorqcynlre-btt-cynlre-bttcyhtva";a:2:{i:0;R:15956;i:1;R:801;}s:46:"8:zjr-rzorqcynlre-btt-cynlre-dhvpxgvzr-zbmvyyn";a:2:{i:0;R:15956;i:1;R:801;}s:46:"8:zjr-rzorqcynlre-btt-cynlre-dhvpxgvzr-npgvirk";a:2:{i:0;R:15956;i:1;R:801;}s:36:"8:zjr-rzorqcynlre-btt-cynlre-pbegnqb";a:2:{i:0;R:15956;i:1;R:801;}s:39:"8:zjr-rzorqcynlre-btt-cynlre-sybjcynlre";a:2:{i:0;R:15956;i:1;R:801;}s:36:"8:zjr-rzorqcynlre-btt-cynlre-xcynlre";a:2:{i:0;R:15956;i:1;R:801;}s:37:"8:zjr-rzorqcynlre-btt-cynlre-fryrpgrq";a:2:{i:0;R:15956;i:1;R:801;}s:39:"8:zjr-rzorqcynlre-btt-cynlre-bzgxcynlre";a:2:{i:0;R:15956;i:1;R:801;}s:37:"8:zjr-rzorqcynlre-sbe_orfg_rkcrevrapr";a:2:{i:0;R:15956;i:1;R:801;}s:31:"8:zjr-rzorqcynlre-qbjaybnq-jnea";a:2:{i:0;R:15956;i:1;R:801;}s:32:"8:zjr-rzorqcynlre-shyyfperra-gvc";a:2:{i:0;R:15956;i:1;R:801;}s:36:"8:zjr-rzorqcynlre-shyyfperra-gvc-bfk";a:2:{i:0;R:15956;i:1;R:801;}s:35:"8:zjr-rzorqcynlre-qb_abg_jnea_ntnva";a:2:{i:0;R:15956;i:1;R:801;}s:30:"8:zjr-rzorqcynlre-cynlrefryrpg";a:2:{i:0;R:15956;i:1;R:801;}s:35:"8:zjr-rzorqcynlre-ernq_orsber_rzorq";a:2:{i:0;R:15956;i:1;R:801;}s:36:"8:zjr-rzorqcynlre-rzorq_fvgr_be_oybt";a:2:{i:0;R:15956;i:1;R:801;}s:32:"8:zjr-rzorqcynlre-eryngrq_ivqrbf";a:2:{i:0;R:15956;i:1;R:801;}s:25:"8:zjr-rzorqcynlre-frrxvat";a:2:{i:0;R:15956;i:1;R:801;}s:27:"8:zjr-rzorqcynlre-ohssrevat";a:2:{i:0;R:15956;i:1;R:801;}s:27:"8:zjr-rzorqcynlre-pbcl-pbqr";a:2:{i:0;R:15956;i:1;R:801;}s:28:"8:zjr-rzorqcynlre-ivqrb-u264";a:2:{i:0;R:15956;i:1;R:801;}s:28:"8:zjr-rzorqcynlre-ivqrb-jroz";a:2:{i:0;R:15956;i:1;R:801;}s:27:"8:zjr-rzorqcynlre-ivqrb-syi";a:2:{i:0;R:15956;i:1;R:801;}s:27:"8:zjr-rzorqcynlre-ivqrb-btt";a:2:{i:0;R:15956;i:1;R:801;}s:29:"8:zjr-rzorqcynlre-ivqrb-nhqvb";a:2:{i:0;R:15956;i:1;R:801;}s:28:"8:zjr-rzorqcynlre-nhqvb-zcrt";a:2:{i:0;R:15956;i:1;R:801;}s:27:"8:zjr-rzorqcynlre-ivqrb-3tc";a:2:{i:0;R:15956;i:1;R:801;}s:28:"8:zjr-rzorqcynlre-ivqrb-zcrt";a:2:{i:0;R:15956;i:1;R:801;}s:31:"8:zjr-rzorqcynlre-ivqrb-zfivqrb";a:2:{i:0;R:15956;i:1;R:801;}s:32:"8:zjr-rzorqcynlre-zvffvat-fbhepr";a:2:{i:0;R:15956;i:1;R:801;}s:22:"8:zjr-gvzrqgrkg-rqvgbe";a:2:{i:0;s:31:"ext-timedmediahandler-timedtext";i:1;R:801;}s:32:"8:zjr-gvzrqgrkg-fgntr-genafpevor";a:2:{i:0;R:16030;i:1;R:801;}s:26:"8:zjr-gvzrqgrkg-fgntr-flap";a:2:{i:0;R:16030;i:1;R:801;}s:31:"8:zjr-gvzrqgrkg-fgntr-genafyngr";a:2:{i:0;R:16030;i:1;R:801;}s:28:"8:zjr-gvzrqgrkg-fgntr-hcybnq";a:2:{i:0;R:16030;i:1;R:801;}s:31:"8:zjr-gvzrqgrkg-fryrpg-ynathntr";a:2:{i:0;R:16030;i:1;R:801;}s:29:"8:zjr-gvzrqgrkg-svyr-ynathntr";a:2:{i:0;R:16030;i:1;R:801;}s:27:"8:zjr-gvzrqgrkg-hcybnq-grkg";a:2:{i:0;R:16030;i:1;R:801;}s:30:"8:zjr-gvzrqgrkg-hcybnqvat-grkg";a:2:{i:0;R:16030;i:1;R:801;}s:38:"8:zjr-gvzrqgrkg-hcybnq-grkg-qrfp-gvgyr";a:2:{i:0;R:16030;i:1;R:801;}s:37:"8:zjr-gvzrqgrkg-hcybnq-grkg-qrfp-uryc";a:2:{i:0;R:16030;i:1;R:801;}s:44:"8:zjr-gvzrqgrkg-hcybnq-grkg-qrfp-uryc-oebjfr";a:2:{i:0;R:16030;i:1;R:801;}s:44:"8:zjr-gvzrqgrkg-hcybnq-grkg-qrfp-uryc-fryrpg";a:2:{i:0;R:16030;i:1;R:801;}s:44:"8:zjr-gvzrqgrkg-hcybnq-grkg-qrfp-uryc-erivrj";a:2:{i:0;R:16030;i:1;R:801;}s:35:"8:zjr-gvzrqgrkg-hcybnq-grkg-cerivrj";a:2:{i:0;R:16030;i:1;R:801;}s:35:"8:zjr-gvzrqgrkg-hcybnq-grkg-fhpprff";a:2:{i:0;R:16030;i:1;R:801;}s:32:"8:zjr-gvzrqgrkg-hcybnq-grkg-qbar";a:2:{i:0;R:16030;i:1;R:801;}s:37:"8:zjr-gvzrqgrkg-hcybnq-grkg-snvy-qrfp";a:2:{i:0;R:16030;i:1;R:801;}s:38:"8:zjr-gvzrqgrkg-hcybnq-grkg-snvy-gvgyr";a:2:{i:0;R:16030;i:1;R:801;}s:35:"8:zjr-gvzrqgrkg-hcybnq-grkg-nabgure";a:2:{i:0;R:16030;i:1;R:801;}s:42:"8:zjr-gvzrqgrkg-hcybnq-grkg-qbar-hcybnqvat";a:2:{i:0;R:16030;i:1;R:801;}s:24:"8:zjr-gvzrqgrkg-onpx-oga";a:2:{i:0;R:16030;i:1;R:801;}s:27:"8:zjr-gvzrqgrkg-pubbfr-grkg";a:2:{i:0;R:16030;i:1;R:801;}s:33:"8:zjr-gvzrqgrkg-hcybnq-gvzrq-grkg";a:2:{i:0;R:16030;i:1;R:801;}s:33:"8:zjr-gvzrqgrkg-ybnqvat-grkg-rqvg";a:2:{i:0;R:16030;i:1;R:801;}s:22:"8:zjr-gvzrqgrkg-frnepu";a:2:{i:0;R:16030;i:1;R:801;}s:22:"8:zjr-gvzrqgrkg-ynlbhg";a:2:{i:0;R:16030;i:1;R:801;}s:28:"8:zjr-gvzrqgrkg-ynlbhg-bagbc";a:2:{i:0;R:16030;i:1;R:801;}s:28:"8:zjr-gvzrqgrkg-ynlbhg-orybj";a:2:{i:0;R:16030;i:1;R:801;}s:26:"8:zjr-gvzrqgrkg-ynlbhg-bss";a:2:{i:0;R:16030;i:1;R:801;}s:28:"8:zjr-gvzrqgrkg-ybnqvat-grkg";a:2:{i:0;R:16030;i:1;R:801;}s:28:"8:zjr-gvzrqgrkg-xrl-ynathntr";a:2:{i:0;R:16030;i:1;R:801;}s:26:"8:zjr-gvzrqgrkg-grkgpng-pp";a:2:{i:0;R:16030;i:1;R:801;}s:27:"8:zjr-gvzrqgrkg-grkgpng-fho";a:2:{i:0;R:16030;i:1;R:801;}s:27:"8:zjr-gvzrqgrkg-grkgpng-gnq";a:2:{i:0;R:16030;i:1;R:801;}s:27:"8:zjr-gvzrqgrkg-grkgpng-xgi";a:2:{i:0;R:16030;i:1;R:801;}s:27:"8:zjr-gvzrqgrkg-grkgpng-gvx";a:2:{i:0;R:16030;i:1;R:801;}s:26:"8:zjr-gvzrqgrkg-grkgpng-ne";a:2:{i:0;R:16030;i:1;R:801;}s:26:"8:zjr-gvzrqgrkg-grkgpng-ao";a:2:{i:0;R:16030;i:1;R:801;}s:28:"8:zjr-gvzrqgrkg-grkgpng-zrgn";a:2:{i:0;R:16030;i:1;R:801;}s:27:"8:zjr-gvzrqgrkg-grkgpng-gek";a:2:{i:0;R:16030;i:1;R:801;}s:27:"8:zjr-gvzrqgrkg-grkgpng-yep";a:2:{i:0;R:16030;i:1;R:801;}s:27:"8:zjr-gvzrqgrkg-grkgpng-yva";a:2:{i:0;R:16030;i:1;R:801;}s:27:"8:zjr-gvzrqgrkg-grkgpng-phr";a:2:{i:0;R:16030;i:1;R:801;}s:43:"8:zjr-gvzrqgrkg-ynathntr-fhogvgyrf-sbe-pyvc";a:2:{i:0;R:16030;i:1;R:801;}s:46:"8:zjr-gvzrqgrkg-ynathntr-ab-fhogvgyrf-sbe-pyvc";a:2:{i:0;R:16030;i:1;R:801;}s:28:"8:zjr-gvzrqgrkg-erdhrfg-fhof";a:2:{i:0;R:16030;i:1;R:801;}s:23:"8:zjr-gvzrqgrkg-ab-fhof";a:2:{i:0;R:16030;i:1;R:801;}s:33:"8:zjr-gvzrqgrkg-erdhrfg-fhof-qrfp";a:2:{i:0;R:16030;i:1;R:801;}s:33:"8:zjr-gvzrqgrkg-erdhrfg-fhof-qbar";a:2:{i:0;R:16030;i:1;R:801;}s:33:"8:zjr-gvzrqgrkg-erdhrfg-fhof-snvy";a:2:{i:0;R:16030;i:1;R:801;}s:36:"8:zjr-gvzrqgrkg-erdhrfg-nyernql-qbar";a:2:{i:0;R:16030;i:1;R:801;}s:6:"8:gbqb";a:2:{i:0;s:8:"ext-todo";i:1;R:801;}s:11:"8:gbqb-qrfp";a:2:{i:0;R:16083;i:1;R:801;}s:10:"8:gbqb-gno";a:2:{i:0;R:16083;i:1;R:801;}s:16:"8:gbqb-arj-dhrhr";a:2:{i:0;R:16083;i:1;R:801;}s:19:"8:gbqb-znvy-fhowrpg";a:2:{i:0;R:16083;i:1;R:801;}s:16:"8:gbqb-znvy-obql";a:2:{i:0;R:16083;i:1;R:801;}s:19:"8:gbqb-vainyvq-vgrz";a:2:{i:0;R:16083;i:1;R:801;}s:23:"8:gbqb-hcqngr-ryfr-vgrz";a:2:{i:0;R:16083;i:1;R:801;}s:23:"8:gbqb-haerpbtavmr-glcr";a:2:{i:0;R:16083;i:1;R:801;}s:20:"8:gbqb-hfre-vainyvqr";a:2:{i:0;R:16083;i:1;R:801;}s:16:"8:gbqb-vgrz-yvfg";a:2:{i:0;R:16083;i:1;R:801;}s:14:"8:gbqb-ab-vgrz";a:2:{i:0;R:16083;i:1;R:801;}s:20:"8:gbqb-vainyvq-bjare";a:2:{i:0;R:16083;i:1;R:801;}s:16:"8:gbqb-nqq-dhrhr";a:2:{i:0;R:16083;i:1;R:801;}s:17:"8:gbqb-zbir-dhrhr";a:2:{i:0;R:16083;i:1;R:801;}s:15:"8:gbqb-yvfg-sbe";a:2:{i:0;R:16083;i:1;R:801;}s:18:"8:gbqb-yvfg-punatr";a:2:{i:0;R:16083;i:1;R:801;}s:18:"8:gbqb-yvfg-pnapry";a:2:{i:0;R:16083;i:1;R:801;}s:15:"8:gbqb-arj-vgrz";a:2:{i:0;R:16083;i:1;R:801;}s:18:"8:gbqb-abg-hcqngrq";a:2:{i:0;R:16083;i:1;R:801;}s:20:"8:gbqb-vffhr-fhzznel";a:2:{i:0;R:16083;i:1;R:801;}s:19:"8:gbqb-sbez-qrgnvyf";a:2:{i:0;R:16083;i:1;R:801;}s:17:"8:gbqb-sbez-rznvy";a:2:{i:0;R:16083;i:1;R:801;}s:18:"8:gbqb-sbez-fhozvg";a:2:{i:0;R:16083;i:1;R:801;}s:12:"8:evtug-gbqb";a:2:{i:0;R:16083;i:1;R:801;}s:18:"8:evtug-gbqbfhozvg";a:2:{i:0;R:16083;i:1;R:801;}s:10:"8:gnfxyvfg";a:2:{i:0;s:13:"ext-todotasks";i:1;R:801;}s:22:"8:gnfxyvfg-cnefre-qrfp";a:2:{i:0;R:16110;i:1;R:801;}s:23:"8:gnfxyvfg-fcrpvny-qrfp";a:2:{i:0;R:16110;i:1;R:801;}s:19:"8:gnfxyvfgolcebwrpg";a:2:{i:0;R:16110;i:1;R:801;}s:24:"8:gnfxyvfghaxabjacebwrpg";a:2:{i:0;R:16110;i:1;R:801;}s:20:"8:gnfxyvfghafcrphfre";a:2:{i:0;R:16110;i:1;R:801;}s:23:"8:gnfxyvfgvapbeerpghfre";a:2:{i:0;R:16110;i:1;R:801;}s:15:"8:gnfxyvfgrznvy";a:2:{i:0;R:16110;i:1;R:801;}s:22:"8:gnfxyvfgrznvyfhowrpg";a:2:{i:0;R:16110;i:1;R:801;}s:17:"8:gnfxyvfgzlgnfxf";a:2:{i:0;R:16110;i:1;R:801;}s:22:"8:gnfxyvfgolcebwrpgonq";a:2:{i:0;R:16110;i:1;R:801;}s:20:"8:gnfxyvfgolcebwanzr";a:2:{i:0;R:16110;i:1;R:801;}s:20:"8:gnfxyvfgpubbfrcebw";a:2:{i:0;R:16110;i:1;R:801;}s:18:"8:gnfxyvfgcebwqvfc";a:2:{i:0;R:16110;i:1;R:801;}s:16:"8:gnfxyvfgolanzr";a:2:{i:0;R:16110;i:1;R:801;}s:25:"8:gnfxyvfgabjthfrcebwrpgf";a:2:{i:0;R:16110;i:1;R:801;}s:20:"8:gnfxyvfgabcebwrpgf";a:2:{i:0;R:16110;i:1;R:801;}s:19:"8:gnfxyvfgrznvyobql";a:2:{i:0;R:16110;i:1;R:801;}s:24:"8:gbqbgnfxfinyvqcebwrpgf";a:2:{i:0;R:16110;i:1;R:801;}s:14:"8:gbbygvc-qrfp";a:2:{i:0;s:11:"ext-tooltip";i:1;R:801;}s:12:"8:svefgfgrcf";a:3:{i:0;s:24:"ext-translate-firststeps";i:1;R:801;i:2;R:8540;}s:17:"8:svefgfgrcf-qrfp";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:29:"8:genafyngr-sf-cntrgvgyr-qbar";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:32:"8:genafyngr-sf-cntrgvgyr-craqvat";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:24:"8:genafyngr-sf-cntrgvgyr";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:27:"8:genafyngr-sf-fvtahc-gvgyr";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:29:"8:genafyngr-sf-frggvatf-gvgyr";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:29:"8:genafyngr-sf-hfrecntr-gvgyr";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:32:"8:genafyngr-sf-crezvffvbaf-gvgyr";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:27:"8:genafyngr-sf-gnetrg-gvgyr";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:26:"8:genafyngr-sf-rznvy-gvgyr";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:20:"8:genafyngr-sf-vageb";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:29:"8:genafyngr-sf-fryrpgynathntr";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:33:"8:genafyngr-sf-frggvatf-cynathntr";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:38:"8:genafyngr-sf-frggvatf-cynathntr-qrfp";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:33:"8:genafyngr-sf-frggvatf-fynathntr";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:38:"8:genafyngr-sf-frggvatf-fynathntr-qrfp";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:30:"8:genafyngr-sf-frggvatf-fhozvg";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:31:"8:genafyngr-sf-hfrecntr-yriry-a";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:31:"8:genafyngr-sf-hfrecntr-yriry-5";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:31:"8:genafyngr-sf-hfrecntr-yriry-4";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:31:"8:genafyngr-sf-hfrecntr-yriry-3";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:31:"8:genafyngr-sf-hfrecntr-yriry-2";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:31:"8:genafyngr-sf-hfrecntr-yriry-1";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:28:"8:genafyngr-sf-hfrecntr-uryc";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:30:"8:genafyngr-sf-hfrecntr-fhozvg";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:28:"8:genafyngr-sf-hfrecntr-qbar";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:36:"8:genafyngr-sf-crezvffvbaf-cynathntr";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:31:"8:genafyngr-sf-crezvffvbaf-uryc";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:34:"8:genafyngr-sf-crezvffvbaf-craqvat";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:33:"8:genafyngr-sf-crezvffvbaf-fhozvg";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:26:"8:genafyngr-sf-gnetrg-grkg";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:25:"8:genafyngr-sf-rznvy-grkg";a:3:{i:0;R:16132;i:1;R:801;i:2;R:8540;}s:33:"8:genafyngrtebhcqrfpevcgvbaf-qrfp";a:2:{i:0;s:31:"ext-translate-groupdescriptions";i:1;R:801;}s:29:"8:genafyngr-tebhc-qrfp-abqrfp";a:2:{i:0;R:16166;i:1;R:801;}s:36:"8:genafyngr-tebhc-qrfp-zrqvnjvxvpber";a:2:{i:0;R:16166;i:1;R:801;}s:40:"8:genafyngr-tebhc-qrfp-zrqvnjvxvzbfghfrq";a:2:{i:0;R:16166;i:1;R:801;}s:42:"8:genafyngr-tebhc-qrfp-zrqvnjvxvrkgrafvbaf";a:2:{i:0;R:16166;i:1;R:801;}s:33:"8:genafyngr-tebhc-qrfp-pbyyrpgvba";a:2:{i:0;R:16166;i:1;R:801;}s:34:"8:genafyngr-tebhc-qrfp-synttrqerif";a:2:{i:0;R:16166;i:1;R:801;}s:37:"8:genafyngr-tebhc-qrfp-ernqresrrqonpx";a:2:{i:0;R:16166;i:1;R:801;}s:31:"8:genafyngr-tebhc-qrfp-frznagvp";a:2:{i:0;R:16166;i:1;R:801;}s:36:"8:genafyngr-tebhc-qrfp-fbpvnycebsvyr";a:2:{i:0;R:16166;i:1;R:801;}s:32:"8:genafyngr-tebhc-qrfp-genafyngr";a:2:{i:0;R:16166;i:1;R:801;}s:38:"8:genafyngr-tebhc-qrfp-jvxvnrkgrafvbaf";a:2:{i:0;R:16166;i:1;R:801;}s:42:"8:genafyngr-tebhc-qrfp-jvxvzrqvnrkgrafvbaf";a:2:{i:0;R:16166;i:1;R:801;}s:47:"8:genafyngr-tebhc-qrfp-jvxvzrqvnrkgrafvbaf-znva";a:2:{i:0;R:16166;i:1;R:801;}s:30:"8:genafyngr-tebhc-qrfp-havjvxv";a:2:{i:0;R:16166;i:1;R:801;}s:25:"8:genafyngr-tebhc-qrfp-hv";a:2:{i:0;R:16166;i:1;R:801;}s:40:"8:genafyngr-tebhc-qrfp-genafyngnoyrcntrf";a:2:{i:0;R:16166;i:1;R:801;}s:17:"8:oj-qrfp-serrpby";a:2:{i:0;R:16166;i:1;R:801;}s:18:"8:oj-qrfp-shqsbehz";a:2:{i:0;R:16166;i:1;R:801;}s:18:"8:oj-qrfp-znagvfog";a:2:{i:0;R:16166;i:1;R:801;}s:26:"8:genafyngr-tebhc-qrfp-rby";a:2:{i:0;R:16166;i:1;R:801;}s:28:"8:genafyngr-tebhc-qrfp-vuevf";a:2:{i:0;R:16166;i:1;R:801;}s:35:"8:genafyngr-tebhc-qrfp-vuevf-pbzzba";a:2:{i:0;R:16166;i:1;R:801;}s:33:"8:genafyngr-tebhc-qrfp-vuevf-v2pr";a:2:{i:0;R:16166;i:1;R:801;}s:35:"8:genafyngr-tebhc-qrfp-vuevf-znantr";a:2:{i:0;R:16166;i:1;R:801;}s:36:"8:genafyngr-tebhc-qrfp-vuevf-dhnyvsl";a:2:{i:0;R:16166;i:1;R:801;}s:28:"8:genafyngr-tebhc-qrfp-xvjvk";a:2:{i:0;R:16166;i:1;R:801;}s:43:"8:genafyngr-tebhc-qrfp-znagvfog-cyhtva-pber";a:2:{i:0;R:16166;i:1;R:801;}s:44:"8:genafyngr-tebhc-qrfp-zrqvnjvxv-pber-oenapu";a:2:{i:0;R:16166;i:1;R:801;}s:28:"8:genafyngr-tebhc-qrfp-zvsbf";a:2:{i:0;R:16166;i:1;R:801;}s:17:"8:oj-qrfp-zjyvoey";a:2:{i:0;R:16166;i:1;R:801;}s:14:"8:oj-qrfp-abpp";a:2:{i:0;R:16166;i:1;R:801;}s:29:"8:genafyngr-tebhc-qrfp-bxnjvk";a:2:{i:0;R:16166;i:1;R:801;}s:20:"8:oj-qrfp-bcravzntrf";a:2:{i:0;R:16166;i:1;R:801;}s:53:"8:genafyngr-tebhc-qrfp-bcravzntrf-irevslrznvygrzcyngr";a:2:{i:0;R:16166;i:1;R:801;}s:37:"8:genafyngr-tebhc-qrfp-bcravzntrf-nyy";a:2:{i:0;R:16166;i:1;R:801;}s:20:"8:oj-qrfp-bcraynlref";a:2:{i:0;R:16166;i:1;R:801;}s:23:"8:oj-qrfp-bcrafgerrgznc";a:2:{i:0;R:16166;i:1;R:801;}s:18:"8:oj-qrfp-bfz-fvgr";a:2:{i:0;R:16166;i:1;R:801;}s:32:"8:genafyngr-tebhc-qrfp-cbgyngpu2";a:2:{i:0;R:16166;i:1;R:801;}s:34:"8:genafyngr-tebhc-qrfp-cljvxvcrqvn";a:2:{i:0;R:16166;i:1;R:801;}s:17:"8:oj-qrfp-funcnqb";a:2:{i:0;R:16166;i:1;R:801;}s:19:"8:oj-qrfp-fgnghfarg";a:2:{i:0;R:16166;i:1;R:801;}s:39:"8:genafyngr-tebhc-qrfp-fgnghfarg-cyhtva";a:2:{i:0;R:16166;i:1;R:801;}s:28:"8:genafyngr-tebhc-qrfp-gfvag";a:2:{i:0;R:16166;i:1;R:801;}s:19:"8:oj-qrfp-jvxvoynzr";a:2:{i:0;R:16166;i:1;R:801;}s:20:"8:oj-qrfp-jvxvernqre";a:2:{i:0;R:16166;i:1;R:801;}s:38:"8:genafyngr-tebhc-qrfp-jvxvcrqvnzbovyr";a:2:{i:0;R:16166;i:1;R:801;}s:14:"8:genafyngrfit";a:2:{i:0;s:16:"ext-translatesvg";i:1;R:801;}s:19:"8:genafyngrfit-qrfp";a:2:{i:0;R:16215;i:1;R:801;}s:21:"8:genafyngrfit-yrtraq";a:2:{i:0;R:16215;i:1;R:801;}s:19:"8:genafyngrfit-cntr";a:2:{i:0;R:16215;i:1;R:801;}s:21:"8:genafyngrfit-fhozvg";a:2:{i:0;R:16215;i:1;R:801;}s:22:"8:genafyngrfit-fhzznel";a:2:{i:0;R:16215;i:1;R:801;}s:18:"8:genafyngrfit-nqq";a:2:{i:0;R:16215;i:1;R:801;}s:30:"8:genafyngrfit-kpbbeqvangr-cer";a:2:{i:0;R:16215;i:1;R:801;}s:30:"8:genafyngrfit-lpbbeqvangr-cer";a:2:{i:0;R:16215;i:1;R:801;}s:22:"8:genafyngrfit-fcrpvsl";a:2:{i:0;R:16215;i:1;R:801;}s:27:"8:genafyngrfit-snyyonpxqrfp";a:2:{i:0;R:16215;i:1;R:801;}s:22:"8:genafyngrfit-dddqrfp";a:2:{i:0;R:16215;i:1;R:801;}s:21:"8:genafyngrfit-abqrfp";a:2:{i:0;R:16215;i:1;R:801;}s:21:"8:genafyngrfit-erzbir";a:2:{i:0;R:16215;i:1;R:801;}s:27:"8:genafyngrfit-hafhpprffshy";a:2:{i:0;R:16215;i:1;R:801;}s:26:"8:genafyngrfit-gbttyr-ivrj";a:2:{i:0;R:16215;i:1;R:801;}s:26:"8:genafyngrfit-gbttyr-uvqr";a:2:{i:0;R:16215;i:1;R:801;}s:18:"8:genafyngbefvtahc";a:2:{i:0;s:28:"ext-translationnotifications";i:1;R:801;}s:31:"8:genafyngvbaabgvsvpngvbaf-qrfp";a:2:{i:0;R:16233;i:1;R:801;}s:31:"8:genafyngvbaabgvsvpngvbaf-vasb";a:2:{i:0;R:16233;i:1;R:801;}s:35:"8:genafyngvbaabgvsvpngvbaf-hfreanzr";a:2:{i:0;R:16233;i:1;R:801;}s:38:"8:genafyngvbaabgvsvpngvbaf-rznvyfgnghf";a:2:{i:0;R:16233;i:1;R:801;}s:42:"8:genafyngvbaabgvsvpngvbaf-rznvy-pbasvezrq";a:2:{i:0;R:16233;i:1;R:801;}s:44:"8:genafyngvbaabgvsvpngvbaf-rznvy-hapbasvezrq";a:2:{i:0;R:16233;i:1;R:801;}s:39:"8:genafyngvbaabgvsvpngvbaf-rznvy-abgfrg";a:2:{i:0;R:16233;i:1;R:801;}s:36:"8:genafyngvbaabgvsvpngvbaf-ynathntrf";a:2:{i:0;R:16233;i:1;R:801;}s:31:"8:genafyngvbaabgvsvpngvbaf-ynat";a:2:{i:0;R:16233;i:1;R:801;}s:33:"8:genafyngvbaabgvsvpngvbaf-abynat";a:2:{i:0;R:16233;i:1;R:801;}s:34:"8:genafyngvbaabgvsvpngvbaf-pbagnpg";a:2:{i:0;R:16233;i:1;R:801;}s:40:"8:genafyngvbaabgvsvpngvbaf-pzrgubq-rznvy";a:2:{i:0;R:16233;i:1;R:801;}s:43:"8:genafyngvbaabgvsvpngvbaf-pzrgubq-gnyxcntr";a:2:{i:0;R:16233;i:1;R:801;}s:53:"8:genafyngvbaabgvsvpngvbaf-pzrgubq-gnyxcntr-ryfrjurer";a:2:{i:0;R:16233;i:1;R:801;}s:39:"8:genafyngvbaabgvsvpngvbaf-pzrgubq-srrq";a:2:{i:0;R:16233;i:1;R:801;}s:37:"8:genafyngvbaabgvsvpngvbaf-pzrgubq-ab";a:2:{i:0;R:16233;i:1;R:801;}s:36:"8:genafyngvbaabgvsvpngvbaf-serdhrapl";a:2:{i:0;R:16233;i:1;R:801;}s:38:"8:genafyngvbaabgvsvpngvbaf-serd-nyjnlf";a:2:{i:0;R:16233;i:1;R:801;}s:36:"8:genafyngvbaabgvsvpngvbaf-serd-jrrx";a:2:{i:0;R:16233;i:1;R:801;}s:37:"8:genafyngvbaabgvsvpngvbaf-serd-zbagu";a:2:{i:0;R:16233;i:1;R:801;}s:38:"8:genafyngvbaabgvsvpngvbaf-serd-jrrxyl";a:2:{i:0;R:16233;i:1;R:801;}s:39:"8:genafyngvbaabgvsvpngvbaf-serd-zbaguyl";a:2:{i:0;R:16233;i:1;R:801;}s:33:"8:genafyngvbaabgvsvpngvbaf-fhozvg";a:2:{i:0;R:16233;i:1;R:801;}s:19:"8:abgvslgenafyngbef";a:2:{i:0;R:16233;i:1;R:801;}s:51:"8:genafyngvbaabgvsvpngvbaf-fraq-abgvsvpngvba-ohggba";a:2:{i:0;R:16233;i:1;R:801;}s:41:"8:genafyngvbaabgvsvpngvbaf-qrnqyvar-ynory";a:2:{i:0;R:16233;i:1;R:801;}s:52:"8:genafyngvbaabgvsvpngvbaf-ynathntrf-gb-abgvsl-ynory";a:2:{i:0;R:16233;i:1;R:801;}s:35:"8:genafyngvbaabgvsvpngvbaf-cevbevgl";a:2:{i:0;R:16233;i:1;R:801;}s:40:"8:genafyngvbaabgvsvpngvbaf-cevbevgl-uvtu";a:2:{i:0;R:16233;i:1;R:801;}s:42:"8:genafyngvbaabgvsvpngvbaf-cevbevgl-zrqvhz";a:2:{i:0;R:16233;i:1;R:801;}s:39:"8:genafyngvbaabgvsvpngvbaf-cevbevgl-ybj";a:2:{i:0;R:16233;i:1;R:801;}s:41:"8:genafyngvbaabgvsvpngvbaf-cevbevgl-hafrg";a:2:{i:0;R:16233;i:1;R:801;}s:49:"8:genafyngvbaabgvsvpngvbaf-genafyngnoyrcntr-gvgyr";a:2:{i:0;R:16233;i:1;R:801;}s:54:"8:genafyngvbaabgvsvpngvbaf-reebe-ab-genafyngnoyr-cntrf";a:2:{i:0;R:16233;i:1;R:801;}s:40:"8:genafyngvbaabgvsvpngvbaf-rznvy-fhowrpg";a:2:{i:0;R:16233;i:1;R:801;}s:37:"8:genafyngvbaabgvsvpngvbaf-rznvy-obql";a:2:{i:0;R:16233;i:1;R:801;}s:41:"8:genafyngvbaabgvsvpngvbaf-rznvy-cevbevgl";a:2:{i:0;R:16233;i:1;R:801;}s:41:"8:genafyngvbaabgvsvpngvbaf-rznvy-qrnqyvar";a:2:{i:0;R:16233;i:1;R:801;}s:40:"8:ybtragel-genafyngvbaabgvsvpngvbaf-frag";a:2:{i:0;R:16233;i:1;R:801;}s:28:"8:ybt-anzr-abgvslgenafyngbef";a:2:{i:0;R:16233;i:1;R:801;}s:37:"8:genafyngvbaabgvsvpngvbaf-frag-gvgyr";a:2:{i:0;R:16233;i:1;R:801;}s:36:"8:genafyngvbaabgvsvpngvbaf-frag-obql";a:2:{i:0;R:16233;i:1;R:801;}s:21:"8:genafyvgrengbe-qrfp";a:2:{i:0;s:18:"ext-transliterator";i:1;R:801;}s:32:"8:genafyvgrengbe-reebe-nzovthbhf";a:2:{i:0;R:16277;i:1;R:801;}s:29:"8:genafyvgrengbe-reebe-flagnk";a:2:{i:0;R:16277;i:1;R:801;}s:32:"8:genafyvgrengbe-reebe-ehyrpbhag";a:2:{i:0;R:16277;i:1;R:801;}s:31:"8:genafyvgrengbe-reebe-ehyrfvmr";a:2:{i:0;R:16277;i:1;R:801;}s:29:"8:genafyvgrengbe-reebe-cersvk";a:2:{i:0;R:16277;i:1;R:801;}s:18:"8:gerrnaqzrah-qrfp";a:2:{i:0;s:15:"ext-treeandmenu";i:1;R:801;}s:18:"8:gehfgrqzngu-qrfp";a:2:{i:0;s:15:"ext-trustedmath";i:1;R:801;}s:30:"8:gehfgrqzngu-crezvffvba-reebe";a:2:{i:0;R:16286;i:1;R:801;}s:24:"8:gehfgrqzngu-cngu-reebe";a:2:{i:0;R:16286;i:1;R:801;}s:27:"8:gehfgrqzngu-pbaireg-reebe";a:2:{i:0;R:16286;i:1;R:801;}s:23:"8:gehfgrqzngu-abg-sbhaq";a:2:{i:0;R:16286;i:1;R:801;}s:18:"8:gf-pvgrtra-gvgyr";a:2:{i:0;s:14:"ext-ts-citegen";i:1;R:801;}s:17:"8:gf-pvgrtra-fraq";a:2:{i:0;R:16292;i:1;R:801;}s:24:"8:gf-pvgrtra-vachg-gvgyr";a:2:{i:0;R:16292;i:1;R:801;}s:23:"8:gf-pvgrtra-vachg-grkg";a:2:{i:0;R:16292;i:1;R:801;}s:38:"8:gf-pvgrtra-bcgvba-nccraq-nhgube-yvax";a:2:{i:0;R:16292;i:1;R:801;}s:35:"8:gf-pvgrtra-bcgvba-nccraq-arjyvarf";a:2:{i:0;R:16292;i:1;R:801;}s:34:"8:gf-pvgrtra-bcgvba-nqq-ersreraprf";a:2:{i:0;R:16292;i:1;R:801;}s:28:"8:gf-pvgrtra-bcgvba-nqq-yvfg";a:2:{i:0;R:16292;i:1;R:801;}s:25:"8:gf-pvgrtra-bhgchg-gvgyr";a:2:{i:0;R:16292;i:1;R:801;}s:37:"8:gf-pvgrtra-bhgchg-fryrpg-qvfpynvzre";a:2:{i:0;R:16292;i:1;R:801;}s:24:"8:gf-pvgrtra-jebat-vachg";a:2:{i:0;R:16292;i:1;R:801;}s:20:"8:gf-pvgrtra-cnefref";a:2:{i:0;R:16292;i:1;R:801;}s:18:"8:gf-pvgrtra-fxvaf";a:2:{i:0;R:16292;i:1;R:801;}s:23:"8:gf-pvgrtra-fxva-fxvaf";a:2:{i:0;R:16292;i:1;R:801;}s:30:"8:gf-pvgrtra-fxva-bhgchgsbezng";a:2:{i:0;R:16292;i:1;R:801;}s:26:"8:gf-pvgrtra-grzcyngr-ynat";a:2:{i:0;R:16292;i:1;R:801;}s:26:"8:gf-pvgrtra-fbheprf-gvgyr";a:2:{i:0;R:16292;i:1;R:801;}s:25:"8:gf-pvgrtra-fbheprf-grkg";a:2:{i:0;R:16292;i:1;R:801;}s:26:"8:gf-pvgrtra-fvqrone-gvgyr";a:2:{i:0;R:16292;i:1;R:801;}s:32:"8:gf-pvgrtra-fvqrone-nqq-sversbk";a:2:{i:0;R:16292;i:1;R:801;}s:30:"8:gf-pvgrtra-fvqrone-nqq-bcren";a:2:{i:0;R:16292;i:1;R:801;}s:31:"8:gf-pvgrtra-fvqrone-nqq-vr-znp";a:2:{i:0;R:16292;i:1;R:801;}s:39:"8:gf-pvgrtra-fvqrone-nqq-vr-znp-qrgnvyf";a:2:{i:0;R:16292;i:1;R:801;}s:18:"8:gf-pvgrtra-gbbyf";a:2:{i:0;R:16292;i:1;R:801;}s:28:"8:gf-pvgrtra-bgure-ynathntrf";a:2:{i:0;R:16292;i:1;R:801;}s:20:"8:gf-pvgrtra-fnir-vg";a:2:{i:0;R:16292;i:1;R:801;}s:25:"8:gf-pvgrtra-reebef-gvgyr";a:2:{i:0;R:16292;i:1;R:801;}s:28:"8:gf-pvgrtra-haninvynoyr-fdy";a:2:{i:0;R:16292;i:1;R:801;}s:26:"8:gf-pvgrtra-onfr-qvfnoyrq";a:2:{i:0;R:16292;i:1;R:801;}s:22:"8:gf-xzy-ba-by-bcgvbaf";a:2:{i:0;s:14:"ext-ts-kmlonol";i:1;R:801;}s:24:"8:gf-xzy-ba-by-ynathntrf";a:2:{i:0;R:16322;i:1;R:801;}s:25:"8:gf-xzy-ba-by-guhzoanvyf";a:2:{i:0;R:16322;i:1;R:801;}s:19:"8:gf-xzy-ba-by-uryc";a:2:{i:0;R:16322;i:1;R:801;}s:18:"8:gf-xzy-ba-by-nyy";a:2:{i:0;R:16322;i:1;R:801;}s:21:"8:gf-xzy-ba-by-znc-ol";a:2:{i:0;R:16322;i:1;R:801;}s:28:"8:gf-xzy-ba-by-bcrafgerrgznc";a:2:{i:0;R:16322;i:1;R:801;}s:24:"8:gf-xzy-ba-by-jvxvcrqvn";a:2:{i:0;R:16322;i:1;R:801;}s:23:"8:gbbyonfr-urnqre-gvgyr";a:2:{i:0;s:22:"ext-ts-soxred-toolbase";i:1;R:801;}s:22:"8:gbbyonfr-urnqre-ohtf";a:2:{i:0;R:16331;i:1;R:801;}s:25:"8:gbbyonfr-urnqre-gjvggre";a:2:{i:0;R:16331;i:1;R:801;}s:28:"8:gbbyonfr-urnqre-fvgrabgvpr";a:2:{i:0;R:16331;i:1;R:801;}s:17:"8:gbbyonfr-ercynt";a:2:{i:0;R:16331;i:1;R:801;}s:23:"8:gbbyonfr-ercynt-lrnef";a:2:{i:0;R:16331;i:1;R:801;}s:24:"8:gbbyonfr-ercynt-zbaguf";a:2:{i:0;R:16331;i:1;R:801;}s:23:"8:gbbyonfr-ercynt-jrrxf";a:2:{i:0;R:16331;i:1;R:801;}s:22:"8:gbbyonfr-ercynt-qnlf";a:2:{i:0;R:16331;i:1;R:801;}s:23:"8:gbbyonfr-ercynt-ubhef";a:2:{i:0;R:16331;i:1;R:801;}s:25:"8:gbbyonfr-ercynt-zvahgrf";a:2:{i:0;R:16331;i:1;R:801;}s:25:"8:gbbyonfr-ercynt-frpbaqf";a:2:{i:0;R:16331;i:1;R:801;}s:26:"8:gbbyonfr-sbbgre-rkrpgvzr";a:2:{i:0;R:16331;i:1;R:801;}s:24:"8:gbbyonfr-sbbgre-fbhepr";a:2:{i:0;R:16331;i:1;R:801;}s:26:"8:gbbyonfr-sbbgre-ynathntr";a:2:{i:0;R:16331;i:1;R:801;}s:27:"8:gbbyonfr-sbbgre-genafyngr";a:2:{i:0;R:16331;i:1;R:801;}s:21:"8:gbbyonfr-anivtngvba";a:2:{i:0;R:16331;i:1;R:801;}s:30:"8:gbbyonfr-anivtngvba-ubzrcntr";a:2:{i:0;R:16331;i:1;R:801;}s:25:"8:gbbyonfr-anivtngvba-ncv";a:2:{i:0;R:16331;i:1;R:801;}s:29:"8:gbbyonfr-anivtngvba-hfre_vq";a:2:{i:0;R:16331;i:1;R:801;}s:31:"8:gbbyonfr-anivtngvba-nhgbrqvgf";a:2:{i:0;R:16331;i:1;R:801;}s:24:"8:gbbyonfr-hfrevq-fhozvg";a:2:{i:0;R:16331;i:1;R:801;}s:23:"8:gbbyonfr-hfrevq-gvgyr";a:2:{i:0;R:16331;i:1;R:801;}s:24:"8:gbbyonfr-hfrevq-erfhyg";a:2:{i:0;R:16331;i:1;R:801;}s:26:"8:gbbyonfr-nhgbrqvgf-gvgyr";a:2:{i:0;R:16331;i:1;R:801;}s:27:"8:gbbyonfr-nhgbrqvgf-fhozvg";a:2:{i:0;R:16331;i:1;R:801;}s:32:"8:gbbyonfr-nhgbrqvgf-nccebkvzngr";a:2:{i:0;R:16331;i:1;R:801;}s:30:"8:gbbyonfr-nhgbrqvgf-gbgnynhgb";a:2:{i:0;R:16331;i:1;R:801;}s:29:"8:gbbyonfr-nhgbrqvgf-gbgnynyy";a:2:{i:0;R:16331;i:1;R:801;}s:24:"8:gbbyonfr-nhgbrqvgf-cpg";a:2:{i:0;R:16331;i:1;R:801;}s:21:"8:gbbyonfr-znva-gvgyr";a:2:{i:0;R:16331;i:1;R:801;}s:23:"8:gbbyonfr-znva-pbagrag";a:2:{i:0;R:16331;i:1;R:801;}s:19:"8:gbbyonfr-znva-404";a:2:{i:0;R:16331;i:1;R:801;}s:27:"8:gbbyonfr-znva-404-pbagrag";a:2:{i:0;R:16331;i:1;R:801;}s:20:"8:gbbyonfr-sbez-jvxv";a:2:{i:0;R:16331;i:1;R:801;}s:23:"8:gbbyonfr-reebe-abhfre";a:2:{i:0;R:16331;i:1;R:801;}s:23:"8:gbbyonfr-reebe-abjvxv";a:2:{i:0;R:16331;i:1;R:801;}s:29:"8:gbbyonfr-reebe-gbbznalrqvgf";a:2:{i:0;R:16331;i:1;R:801;}s:13:"8:gfcbyy-qrfp";a:2:{i:0;s:10:"ext-tspoll";i:1;R:801;}s:20:"8:gfcbyy-srgpu-reebe";a:2:{i:0;R:16370;i:1;R:801;}s:17:"8:gfcbyy-vq-reebe";a:2:{i:0;R:16370;i:1;R:801;}s:16:"8:gjrrgnarj-qrfp";a:2:{i:0;s:13:"ext-tweetanew";i:1;R:801;}s:21:"8:gjrrgnarj-npprffxrl";a:2:{i:0;R:16374;i:1;R:801;}s:21:"8:gjrrgnarj-arjnpgvba";a:2:{i:0;R:16374;i:1;R:801;}s:22:"8:gjrrgnarj-arjgbbygvc";a:2:{i:0;R:16374;i:1;R:801;}s:22:"8:gjrrgnarj-rqvgnpgvba";a:2:{i:0;R:16374;i:1;R:801;}s:23:"8:gjrrgnarj-rqvggbbygvc";a:2:{i:0;R:16374;i:1;R:801;}s:21:"8:gjrrgnarj-zvaberqvg";a:2:{i:0;R:16374;i:1;R:801;}s:24:"8:gjrrgnarj-nhgubeperqvg";a:2:{i:0;R:16374;i:1;R:801;}s:22:"8:gjrrgnarj-arjqrsnhyg";a:2:{i:0;R:16374;i:1;R:801;}s:16:"8:gjrrgnarj-arj1";a:2:{i:0;R:16374;i:1;R:801;}s:16:"8:gjrrgnarj-arj2";a:2:{i:0;R:16374;i:1;R:801;}s:16:"8:gjrrgnarj-arj3";a:2:{i:0;R:16374;i:1;R:801;}s:23:"8:gjrrgnarj-rqvgqrsnhyg";a:2:{i:0;R:16374;i:1;R:801;}s:17:"8:gjrrgnarj-rqvg1";a:2:{i:0;R:16374;i:1;R:801;}s:17:"8:gjrrgnarj-rqvg2";a:2:{i:0;R:16374;i:1;R:801;}s:17:"8:gjrrgnarj-rqvg3";a:2:{i:0;R:16374;i:1;R:801;}s:18:"8:hxtrbpbqvat-qrfp";a:2:{i:0;s:22:"ext-ukgeocodingformaps";i:1;R:801;}s:18:"8:hxtrbpbqvat_anzr";a:2:{i:0;R:16391;i:1;R:801;}s:29:"8:hxtrbpbqvat_pbhyqabgtrbpbqr";a:2:{i:0;R:16391;i:1;R:801;}s:18:"8:havpbqrpbairegre";a:2:{i:0;s:20:"ext-unicodeconverter";i:1;R:801;}s:23:"8:havpbqrpbairegre-qrfp";a:2:{i:0;R:16395;i:1;R:801;}s:21:"8:havpbqrpbairegre-bx";a:2:{i:0;R:16395;i:1;R:801;}s:26:"8:havpbqrpbairegre-byqgrkg";a:2:{i:0;R:16395;i:1;R:801;}s:26:"8:havpbqrpbairegre-arjgrkg";a:2:{i:0;R:16395;i:1;R:801;}s:14:"8:nhgubef-qrfp";a:3:{i:0;s:19:"ext-uniwiki-authors";i:1;R:801;i:2;s:17:"ext-uniwiki-0-all";}s:17:"8:nhgubef_nhgubef";a:3:{i:0;R:16401;i:1;R:801;i:2;R:16402;}s:19:"8:nhgubef_nabalzbhf";a:3:{i:0;R:16401;i:1;R:801;i:2;R:16402;}s:30:"8:nhgbperngrpngrtbelcntrf-qrfp";a:3:{i:0;s:35:"ext-uniwiki-autocreatecategorypages";i:1;R:801;i:2;R:16402;}s:30:"8:nhgbperngrpngrtbelcntrf-fgho";a:3:{i:0;R:16406;i:1;R:801;i:2;R:16402;}s:35:"8:nhgbperngrpngrtbelcntrf-perngrqol";a:3:{i:0;R:16406;i:1;R:801;i:2;R:16402;}s:32:"8:nhgbperngrpngrtbelcntrf-rqvgbe";a:3:{i:0;R:16406;i:1;R:801;i:2;R:16402;}s:18:"8:pngobknggbc-qrfp";a:3:{i:0;s:23:"ext-uniwiki-catboxattop";i:1;R:801;i:2;R:16402;}s:24:"8:pngobknggbc-pngrtbevrf";a:3:{i:0;R:16411;i:1;R:801;i:2;R:16402;}s:12:"8:perngrcntr";a:3:{i:0;s:22:"ext-uniwiki-createpage";i:1;R:801;i:2;R:16402;}s:19:"8:hjperngrcntr-qrfp";a:3:{i:0;R:16414;i:1;R:801;i:2;R:16402;}s:25:"8:perngrcntr_fhozvgohggba";a:3:{i:0;R:16414;i:1;R:801;i:2;R:16402;}s:25:"8:perngrcntr_vafgehpgvbaf";a:3:{i:0;R:16414;i:1;R:801;i:2;R:16402;}s:23:"8:perngrcntr_ragregvgyr";a:3:{i:0;R:16414;i:1;R:801;i:2;R:16402;}s:24:"8:perngrcntr_gvgyrrkvfgf";a:3:{i:0;R:16414;i:1;R:801;i:2;R:16402;}s:21:"8:perngrcntr_gelntnva";a:3:{i:0;R:16414;i:1;R:801;i:2;R:16402;}s:25:"8:perngrcntr_rqvgrkvfgvat";a:3:{i:0;R:16414;i:1;R:801;i:2;R:16402;}s:21:"8:perngrcntr-onqgvgyr";a:3:{i:0;R:16414;i:1;R:801;i:2;R:16402;}s:15:"8:pffubbxf-qrfp";a:3:{i:0;s:20:"ext-uniwiki-csshooks";i:1;R:801;i:2;R:16402;}s:9:"8:pg-qrfp";a:3:{i:0;s:25:"ext-uniwiki-customtoolbar";i:1;R:801;i:2;R:16402;}s:16:"8:pg_obyq_fnzcyr";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:17:"8:pg_obyq_gvc_vaf";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:18:"8:pg_obyq_gvc_jenc";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:17:"8:pg_obyq_pncgvba";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:18:"8:pg_vgnyvp_fnzcyr";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:19:"8:pg_vgnyvp_gvc_vaf";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:20:"8:pg_vgnyvp_gvc_jenc";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:19:"8:pg_vgnyvp_pncgvba";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:20:"8:pg_vagreany_fnzcyr";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:21:"8:pg_vagreany_gvc_vaf";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:22:"8:pg_vagreany_gvc_jenc";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:21:"8:pg_vagreany_pncgvba";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:20:"8:pg_rkgreany_fnzcyr";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:21:"8:pg_rkgreany_gvc_vaf";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:22:"8:pg_rkgreany_gvc_jenc";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:21:"8:pg_rkgreany_pncgvba";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:14:"8:pg_vzntr_gvc";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:18:"8:pg_vzntr_pncgvba";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:19:"8:pg_nggnpuzrag_gvc";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:23:"8:pg_nggnpuzrag_pncgvba";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:16:"8:pg_zngu_fnzcyr";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:17:"8:pg_zngu_gvc_vaf";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:18:"8:pg_zngu_gvc_jenc";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:17:"8:pg_zngu_pncgvba";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:18:"8:pg_abjvxv_fnzcyr";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:19:"8:pg_abjvxv_gvc_vaf";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:20:"8:pg_abjvxv_gvc_jenc";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:19:"8:pg_abjvxv_pncgvba";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:19:"8:pg_ubevmbagny_gvc";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:23:"8:pg_ubevmbagny_pncgvba";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:11:"8:pg_hcybnq";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:11:"8:pg_fryrpg";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:12:"8:pg_pncgvba";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:9:"8:pg_yvax";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:11:"8:pg_fhozvg";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:10:"8:pg_pybfr";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:12:"8:pg_fhpprff";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:17:"8:pg_cbchcoybpxrq";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:14:"8:pg_hfre_hfre";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:13:"8:pg_hfre_gvc";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:17:"8:pg_hfre_pncgvba";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:16:"8:pg_hfre_fnzcyr";a:3:{i:0;R:16426;i:1;R:801;i:2;R:16402;}s:20:"8:sbezngpunatrf-qrfp";a:3:{i:0;s:25:"ext-uniwiki-formatchanges";i:1;R:801;i:2;R:16402;}s:25:"8:sbezngpunatrf-nabalzbhf";a:3:{i:0;R:16470;i:1;R:801;i:2;R:16402;}s:25:"8:sbezngpunatrf-perngrqol";a:3:{i:0;R:16470;i:1;R:801;i:2;R:16402;}s:24:"8:sbezngpunatrf-rqvgrqol";a:3:{i:0;R:16470;i:1;R:801;i:2;R:16402;}s:19:"8:sbezngfrnepu-qrfp";a:3:{i:0;s:24:"ext-uniwiki-formatsearch";i:1;R:801;i:2;R:16402;}s:10:"8:trc-qrfp";a:3:{i:0;s:27:"ext-uniwiki-genericeditpage";i:1;R:801;i:2;R:16402;}s:18:"8:trc-rznvyfhowrpg";a:3:{i:0;R:16477;i:1;R:801;i:2;R:16402;}s:15:"8:trc-rznvyobql";a:3:{i:0;R:16477;i:1;R:801;i:2;R:16402;}s:18:"8:trc-rznvysnvyher";a:3:{i:0;R:16477;i:1;R:801;i:2;R:16402;}s:18:"8:trc-rznvyfhpprff";a:3:{i:0;R:16477;i:1;R:801;i:2;R:16402;}s:16:"8:trc-pngrtbevrf";a:3:{i:0;R:16477;i:1;R:801;i:2;R:16402;}s:17:"8:trc-nqqpngrtbel";a:3:{i:0;R:16477;i:1;R:801;i:2;R:16402;}s:23:"8:trc-nqqpngrtbelohggba";a:3:{i:0;R:16477;i:1;R:801;i:2;R:16402;}s:21:"8:trc-fhttrfgpngrtbel";a:3:{i:0;R:16477;i:1;R:801;i:2;R:16402;}s:27:"8:trc-fhttrfgpngrtbelohggba";a:3:{i:0;R:16477;i:1;R:801;i:2;R:16402;}s:14:"8:trc-frpgvbaf";a:3:{i:0;R:16477;i:1;R:801;i:2;R:16402;}s:24:"8:trc-frpgvbaabgqvfnoyrq";a:3:{i:0;R:16477;i:1;R:801;i:2;R:16402;}s:16:"8:trc-nqqfrpgvba";a:3:{i:0;R:16477;i:1;R:801;i:2;R:16402;}s:22:"8:trc-nqqfrpgvbaohggba";a:3:{i:0;R:16477;i:1;R:801;i:2;R:16402;}s:17:"8:trc-pynffvpzbqr";a:3:{i:0;R:16477;i:1;R:801;i:2;R:16402;}s:17:"8:trc-trarevpzbqr";a:3:{i:0;R:16477;i:1;R:801;i:2;R:16402;}s:27:"8:trc-abfrpgvbavafgehpgvbaf";a:3:{i:0;R:16477;i:1;R:801;i:2;R:16402;}s:18:"8:trc-abpngrtbevrf";a:3:{i:0;R:16477;i:1;R:801;i:2;R:16402;}s:18:"8:trc-pngrtbelcntr";a:3:{i:0;R:16477;i:1;R:801;i:2;R:16402;}s:17:"8:wninfpevcg-qrfp";a:3:{i:0;s:22:"ext-uniwiki-javascript";i:1;R:801;i:2;R:16402;}s:14:"8:ynlbhgf-qrfp";a:3:{i:0;s:19:"ext-uniwiki-layouts";i:1;R:801;i:2;R:16402;}s:15:"8:ynlbhgf_gvgyr";a:3:{i:0;R:16499;i:1;R:801;i:2;R:16402;}s:22:"8:ynlbhgf_pubbfrynlbhg";a:3:{i:0;R:16499;i:1;R:801;i:2;R:16402;}s:18:"8:ynlbhgf_abynlbhg";a:3:{i:0;R:16499;i:1;R:801;i:2;R:16402;}s:18:"8:ynlbhgf_pbagvahr";a:3:{i:0;R:16499;i:1;R:801;i:2;R:16402;}s:24:"8:ynlbhgf_pubbfrpngrtbel";a:3:{i:0;R:16499;i:1;R:801;i:2;R:16402;}s:17:"8:ynlbhgf_haxabja";a:3:{i:0;R:16499;i:1;R:801;i:2;R:16402;}s:17:"8:ynlbhgf_gntyvar";a:3:{i:0;R:16499;i:1;R:801;i:2;R:16402;}s:28:"8:ynlbhgf-ynlbhgpngrtbelcntr";a:3:{i:0;R:16499;i:1;R:801;i:2;R:16402;}s:21:"8:zbbgbbyf12pber-qrfp";a:3:{i:0;s:26:"ext-uniwiki-mootools12core";i:1;R:801;i:2;R:16402;}s:18:"8:fcrpvnyhfrefgngf";a:2:{i:0;s:19:"ext-usagestatistics";i:1;R:801;}s:17:"8:hfntrfgngvfgvpf";a:2:{i:0;R:16511;i:1;R:801;}s:22:"8:hfntrfgngvfgvpf-qrfp";a:2:{i:0;R:16511;i:1;R:801;}s:20:"8:hfntrfgngvfgvpfsbe";a:2:{i:0;R:16511;i:1;R:801;}s:28:"8:hfntrfgngvfgvpfsbenyyhfref";a:2:{i:0;R:16511;i:1;R:801;}s:25:"8:hfntrfgngvfgvpfvagreiny";a:2:{i:0;R:16511;i:1;R:801;}s:26:"8:hfntrfgngvfgvpfanzrfcnpr";a:2:{i:0;R:16511;i:1;R:801;}s:33:"8:hfntrfgngvfgvpfrkpyhqrerqverpgf";a:2:{i:0;R:16511;i:1;R:801;}s:27:"8:hfntrfgngvfgvpf-anzrfcnpr";a:2:{i:0;R:16511;i:1;R:801;}s:29:"8:hfntrfgngvfgvpf-aberqverpgf";a:2:{i:0;R:16511;i:1;R:801;}s:21:"8:hfntrfgngvfgvpfglcr";a:2:{i:0;R:16511;i:1;R:801;}s:22:"8:hfntrfgngvfgvpffgneg";a:2:{i:0;R:16511;i:1;R:801;}s:20:"8:hfntrfgngvfgvpfraq";a:2:{i:0;R:16511;i:1;R:801;}s:23:"8:hfntrfgngvfgvpffhozvg";a:2:{i:0;R:16511;i:1;R:801;}s:24:"8:hfntrfgngvfgvpfabfgneg";a:2:{i:0;R:16511;i:1;R:801;}s:22:"8:hfntrfgngvfgvpfabraq";a:2:{i:0;R:16511;i:1;R:801;}s:28:"8:hfntrfgngvfgvpfonqfgnegraq";a:2:{i:0;R:16511;i:1;R:801;}s:28:"8:hfntrfgngvfgvpfvagreinyqnl";a:2:{i:0;R:16511;i:1;R:801;}s:29:"8:hfntrfgngvfgvpfvagreinyjrrx";a:2:{i:0;R:16511;i:1;R:801;}s:30:"8:hfntrfgngvfgvpfvagreinyzbagu";a:2:{i:0;R:16511;i:1;R:801;}s:28:"8:hfntrfgngvfgvpfvaperzragny";a:2:{i:0;R:16511;i:1;R:801;}s:33:"8:hfntrfgngvfgvpfvaperzragny-grkg";a:2:{i:0;R:16511;i:1;R:801;}s:27:"8:hfntrfgngvfgvpfphzhyngvir";a:2:{i:0;R:16511;i:1;R:801;}s:32:"8:hfntrfgngvfgvpfphzhyngvir-grkg";a:2:{i:0;R:16511;i:1;R:801;}s:26:"8:hfntrfgngvfgvpfpnyfryrpg";a:2:{i:0;R:16511;i:1;R:801;}s:32:"8:hfntrfgngvfgvpf-rqvgvaqvivqhny";a:2:{i:0;R:16511;i:1;R:801;}s:27:"8:hfntrfgngvfgvpf-rqvgcntrf";a:2:{i:0;R:16511;i:1;R:801;}s:23:"8:evtug-ivrjflfgrzfgngf";a:2:{i:0;R:16511;i:1;R:801;}s:25:"8:hfrepbagnpgyvax-onqhfre";a:2:{i:0;s:20:"ext-usercontactlinks";i:1;R:801;}s:23:"8:hfrepbagnpgyvaxf-qrfp";a:2:{i:0;R:16540;i:1;R:801;}s:15:"8:hfreqrohtvasb";a:2:{i:0;s:17:"ext-userdebuginfo";i:1;R:801;}s:20:"8:hfreqrohtvasb-qrfp";a:2:{i:0;R:16543;i:1;R:801;}s:25:"8:hfreqrohtvasb-hfrentrag";a:2:{i:0;R:16543;i:1;R:801;}s:26:"8:hfreqrohtvasb-erzbgrubfg";a:2:{i:0;R:16543;i:1;R:801;}s:26:"8:hfreqrohtvasb-erzbgrnqqe";a:2:{i:0;R:16543;i:1;R:801;}s:19:"8:hfreqrohtvasb-xrl";a:2:{i:0;R:16543;i:1;R:801;}s:21:"8:hfreqrohtvasb-inyhr";a:2:{i:0;R:16543;i:1;R:801;}s:24:"8:hfreqrohtvasb-ynathntr";a:2:{i:0;R:16543;i:1;R:801;}s:20:"8:hfreshapgvbaf-qrfp";a:2:{i:0;s:17:"ext-userfunctions";i:1;R:801;}s:17:"8:hfrevzntrf-qrfp";a:2:{i:0;s:14:"ext-userimages";i:1;R:801;}s:20:"8:hfrevzntrf-pncgvba";a:2:{i:0;R:16554;i:1;R:801;}s:19:"8:hfrevzntrf-abanzr";a:2:{i:0;R:16554;i:1;R:801;}s:21:"8:hfrevzntrf-abvzntrf";a:2:{i:0;R:16554;i:1;R:801;}s:11:"8:hfrezretr";a:2:{i:0;s:13:"ext-usermerge";i:1;R:801;}s:16:"8:hfrezretr-qrfp";a:2:{i:0;R:16559;i:1;R:801;}s:22:"8:hfrezretr-onqbyqhfre";a:2:{i:0;R:16559;i:1;R:801;}s:22:"8:hfrezretr-onqarjhfre";a:2:{i:0;R:16559;i:1;R:801;}s:21:"8:hfrezretr-abarjhfre";a:2:{i:0;R:16559;i:1;R:801;}s:21:"8:hfrezretr-abbyqhfre";a:2:{i:0;R:16559;i:1;R:801;}s:20:"8:hfrezretr-svryqfrg";a:2:{i:0;R:16559;i:1;R:801;}s:19:"8:hfrezretr-byqhfre";a:2:{i:0;R:16559;i:1;R:801;}s:19:"8:hfrezretr-arjhfre";a:2:{i:0;R:16559;i:1;R:801;}s:25:"8:hfrezretr-qryrgrbyqhfre";a:2:{i:0;R:16559;i:1;R:801;}s:18:"8:hfrezretr-fhozvg";a:2:{i:0;R:16559;i:1;R:801;}s:20:"8:hfrezretr-onqgbxra";a:2:{i:0;R:16559;i:1;R:801;}s:23:"8:hfrezretr-hfreqryrgrq";a:2:{i:0;R:16559;i:1;R:801;}s:27:"8:hfrezretr-hfreqryrgrq-ybt";a:2:{i:0;R:16559;i:1;R:801;}s:20:"8:hfrezretr-hcqngvat";a:2:{i:0;R:16559;i:1;R:801;}s:19:"8:hfrezretr-fhpprff";a:2:{i:0;R:16559;i:1;R:801;}s:23:"8:hfrezretr-fhpprff-ybt";a:2:{i:0;R:16559;i:1;R:801;}s:19:"8:hfrezretr-ybtcntr";a:2:{i:0;R:16559;i:1;R:801;}s:23:"8:hfrezretr-ybtcntrgrkg";a:2:{i:0;R:16559;i:1;R:801;}s:24:"8:hfrezretr-abfrysqryrgr";a:2:{i:0;R:16559;i:1;R:801;}s:22:"8:hfrezretr-hazretnoyr";a:2:{i:0;R:16559;i:1;R:801;}s:26:"8:hfrezretr-cebgrpgrqtebhc";a:2:{i:0;R:16559;i:1;R:801;}s:17:"8:evtug-hfrezretr";a:2:{i:0;R:16559;i:1;R:801;}s:21:"8:hfrezretr-rqvgpbhag";a:2:{i:0;R:16559;i:1;R:801;}s:29:"8:hfrezretr-rqvgpbhag-fhpprff";a:2:{i:0;R:16559;i:1;R:801;}s:26:"8:hfrezretr-nhgbcntrqryrgr";a:2:{i:0;R:16559;i:1;R:801;}s:24:"8:hfrezretr-cntr-hazbirq";a:2:{i:0;R:16559;i:1;R:801;}s:22:"8:hfrezretr-cntr-zbirq";a:2:{i:0;R:16559;i:1;R:801;}s:20:"8:hfrezretr-zbir-ybt";a:2:{i:0;R:16559;i:1;R:801;}s:24:"8:hfrezretr-cntr-qryrgrq";a:2:{i:0;R:16559;i:1;R:801;}s:17:"8:hfrebcgvbafgngf";a:2:{i:0;s:19:"ext-useroptionstats";i:1;R:801;}s:22:"8:hfrebcgvbafgngf-qrfp";a:2:{i:0;R:16590;i:1;R:801;}s:10:"8:hbf-jnea";a:2:{i:0;R:16590;i:1;R:801;}s:12:"8:hbf-pubbfr";a:2:{i:0;R:16590;i:1;R:801;}s:19:"8:hbf-pubbfr-uvqqra";a:2:{i:0;R:16590;i:1;R:801;}s:13:"8:hbf-haxabja";a:2:{i:0;R:16590;i:1;R:801;}s:11:"8:hbf-bgure";a:2:{i:0;R:16590;i:1;R:801;}s:11:"8:hbf-gvgyr";a:2:{i:0;R:16590;i:1;R:801;}s:29:"8:hfrecntrrqvgcebgrpgvba-qrfp";a:2:{i:0;s:26:"ext-userpageeditprotection";i:1;R:801;}s:24:"8:evtug-rqvgnyyhfrecntrf";a:2:{i:0;R:16599;i:1;R:801;}s:25:"8:hfreevtugfabgvslfhowrpg";a:2:{i:0;s:19:"ext-userrightsnotif";i:1;R:801;}s:22:"8:hfreevtugfabgvslobql";a:2:{i:0;R:16602;i:1;R:801;}s:22:"8:hfreevtugfabgvs-qrfp";a:2:{i:0;R:16602;i:1;R:801;}s:19:"8:hfreguebggyr-qrfp";a:2:{i:0;s:16:"ext-userthrottle";i:1;R:801;}s:40:"8:nppg_perngvba_tybony_uneq_guebggyr_uvg";a:2:{i:0;R:16606;i:1;R:801;}s:16:"8:inyvqngbe-qrfp";a:2:{i:0;s:13:"ext-validator";i:1;R:801;}s:19:"8:inyvqngbe-jneavat";a:2:{i:0;R:16609;i:1;R:801;}s:17:"8:inyvqngbe-reebe";a:2:{i:0;R:16609;i:1;R:801;}s:23:"8:inyvqngbe-sngny-reebe";a:2:{i:0;R:16609;i:1;R:801;}s:28:"8:inyvqngbe_reebe_cnenzrgref";a:2:{i:0;R:16609;i:1;R:801;}s:30:"8:inyvqngbe_jneavat_cnenzrgref";a:2:{i:0;R:16609;i:1;R:801;}s:37:"8:inyvqngbe-jneavat-nqvggvbany-reebef";a:2:{i:0;R:16609;i:1;R:801;}s:25:"8:inyvqngbe-reebe-bzvggrq";a:2:{i:0;R:16609;i:1;R:801;}s:25:"8:inyvqngbe-reebe-ceboyrz";a:2:{i:0;R:16609;i:1;R:801;}s:34:"8:inyvqngbe_reebe_haxabja_nethzrag";a:2:{i:0;R:16609;i:1;R:801;}s:34:"8:inyvqngbe_reebe_erdhverq_zvffvat";a:2:{i:0;R:16609;i:1;R:801;}s:35:"8:inyvqngbe-reebe-bireevqr-nethzrag";a:2:{i:0;R:16609;i:1;R:801;}s:23:"8:inyvqngbe-glcr-fgevat";a:2:{i:0;R:16609;i:1;R:801;}s:23:"8:inyvqngbe-glcr-ahzore";a:2:{i:0;R:16609;i:1;R:801;}s:24:"8:inyvqngbe-glcr-vagrtre";a:2:{i:0;R:16609;i:1;R:801;}s:22:"8:inyvqngbe-glcr-sybng";a:2:{i:0;R:16609;i:1;R:801;}s:24:"8:inyvqngbe-glcr-obbyrna";a:2:{i:0;R:16609;i:1;R:801;}s:21:"8:inyvqngbe-glcr-pune";a:2:{i:0;R:16609;i:1;R:801;}s:29:"8:inyvqngbe-yvfgreebef-reebef";a:2:{i:0;R:16609;i:1;R:801;}s:39:"8:inyvqngbe-yvfgreebef-frirevgl-zrffntr";a:2:{i:0;R:16609;i:1;R:801;}s:28:"8:inyvqngbe-yvfgreebef-zvabe";a:2:{i:0;R:16609;i:1;R:801;}s:26:"8:inyvqngbe-yvfgreebef-ybj";a:2:{i:0;R:16609;i:1;R:801;}s:29:"8:inyvqngbe-yvfgreebef-abezny";a:2:{i:0;R:16609;i:1;R:801;}s:27:"8:inyvqngbe-yvfgreebef-uvtu";a:2:{i:0;R:16609;i:1;R:801;}s:28:"8:inyvqngbe-yvfgreebef-sngny";a:2:{i:0;R:16609;i:1;R:801;}s:34:"8:inyvqngbe-yvfgreebef-qrfpevcgvba";a:2:{i:0;R:16609;i:1;R:801;}s:38:"8:inyvqngbe-yvfgreebef-cne-zvafrirevgl";a:2:{i:0;R:16609;i:1;R:801;}s:32:"8:inyvqngbe-qrfpevor-qrfpevcgvba";a:2:{i:0;R:16609;i:1;R:801;}s:29:"8:inyvqngbe-qrfpevor-abgsbhaq";a:2:{i:0;R:16609;i:1;R:801;}s:35:"8:inyvqngbe-qrfpevor-qrfpevcgvbazft";a:2:{i:0;R:16609;i:1;R:801;}s:28:"8:inyvqngbe-qrfpevor-nyvnfrf";a:2:{i:0;R:16609;i:1;R:801;}s:35:"8:inyvqngbe-qrfpevor-cnefreshapgvba";a:2:{i:0;R:16609;i:1;R:801;}s:33:"8:inyvqngbe-qrfpevor-gntrkgrafvba";a:2:{i:0;R:16609;i:1;R:801;}s:30:"8:inyvqngbe-qrfpevor-obguubbxf";a:2:{i:0;R:16609;i:1;R:801;}s:30:"8:inyvqngbe-qrfpevor-cne-ubbxf";a:2:{i:0;R:16609;i:1;R:801;}s:28:"8:inyvqngbe-qrfpevor-cne-cer";a:2:{i:0;R:16609;i:1;R:801;}s:33:"8:inyvqngbe-qrfpevor-cne-ynathntr";a:2:{i:0;R:16609;i:1;R:801;}s:29:"8:inyvqngbe-qrfpevor-yvfgglcr";a:2:{i:0;R:16609;i:1;R:801;}s:26:"8:inyvqngbe-qrfpevor-rzcgl";a:2:{i:0;R:16609;i:1;R:801;}s:29:"8:inyvqngbe-qrfpevor-erdhverq";a:2:{i:0;R:16609;i:1;R:801;}s:37:"8:inyvqngbe-qrfpevor-urnqre-cnenzrgre";a:2:{i:0;R:16609;i:1;R:801;}s:35:"8:inyvqngbe-qrfpevor-urnqre-nyvnfrf";a:2:{i:0;R:16609;i:1;R:801;}s:32:"8:inyvqngbe-qrfpevor-urnqre-glcr";a:2:{i:0;R:16609;i:1;R:801;}s:35:"8:inyvqngbe-qrfpevor-urnqre-qrsnhyg";a:2:{i:0;R:16609;i:1;R:801;}s:39:"8:inyvqngbe-qrfpevor-urnqre-qrfpevcgvba";a:2:{i:0;R:16609;i:1;R:801;}s:31:"8:inyvqngbe-qrfpevor-cnenzrgref";a:2:{i:0;R:16609;i:1;R:801;}s:27:"8:inyvqngbe-qrfpevor-flagnk";a:2:{i:0;R:16609;i:1;R:801;}s:27:"8:inyvqngbe-qrfpevor-gntzva";a:2:{i:0;R:16609;i:1;R:801;}s:27:"8:inyvqngbe-qrfpevor-gntznk";a:2:{i:0;R:16609;i:1;R:801;}s:31:"8:inyvqngbe-qrfpevor-gntqrsnhyg";a:2:{i:0;R:16609;i:1;R:801;}s:26:"8:inyvqngbe-qrfpevor-cszva";a:2:{i:0;R:16609;i:1;R:801;}s:26:"8:inyvqngbe-qrfpevor-csznk";a:2:{i:0;R:16609;i:1;R:801;}s:30:"8:inyvqngbe-qrfpevor-csqrsnhyg";a:2:{i:0;R:16609;i:1;R:801;}s:28:"8:inyvqngbe-qrfpevor-nhgbtra";a:2:{i:0;R:16609;i:1;R:801;}s:32:"8:inyvqngbe_reebe_rzcgl_nethzrag";a:2:{i:0;R:16609;i:1;R:801;}s:32:"8:inyvqngbe_reebe_zhfg_or_ahzore";a:2:{i:0;R:16609;i:1;R:801;}s:33:"8:inyvqngbe_reebe_zhfg_or_vagrtre";a:2:{i:0;R:16609;i:1;R:801;}s:31:"8:inyvqngbe_reebe_zhfg_or_gvgyr";a:2:{i:0;R:16609;i:1;R:801;}s:40:"8:inyvqngbe_reebe_zhfg_or_rkvfgvat_gvgyr";a:2:{i:0;R:16609;i:1;R:801;}s:31:"8:inyvqngbe-reebe-zhfg-or-sybng";a:2:{i:0;R:16609;i:1;R:801;}s:31:"8:inyvqngbe_reebe_vainyvq_enatr";a:2:{i:0;R:16609;i:1;R:801;}s:31:"8:inyvqngbe-reebe-vainyvq-ertrk";a:2:{i:0;R:16609;i:1;R:801;}s:32:"8:inyvqngbe-reebe-vainyvq-yratgu";a:2:{i:0;R:16609;i:1;R:801;}s:38:"8:inyvqngbe-reebe-vainyvq-yratgu-enatr";a:2:{i:0;R:16609;i:1;R:801;}s:34:"8:inyvqngbe_reebe_vainyvq_nethzrag";a:2:{i:0;R:16609;i:1;R:801;}s:37:"8:inyvqngbe_yvfg_reebe_rzcgl_nethzrag";a:2:{i:0;R:16609;i:1;R:801;}s:37:"8:inyvqngbe_yvfg_reebe_zhfg_or_ahzore";a:2:{i:0;R:16609;i:1;R:801;}s:38:"8:inyvqngbe_yvfg_reebe_zhfg_or_vagrtre";a:2:{i:0;R:16609;i:1;R:801;}s:36:"8:inyvqngbe_yvfg_reebe_zhfg_or_gvgyr";a:2:{i:0;R:16609;i:1;R:801;}s:45:"8:inyvqngbe_yvfg_reebe_zhfg_or_rkvfgvat_gvgyr";a:2:{i:0;R:16609;i:1;R:801;}s:36:"8:inyvqngbe-yvfg-reebe-zhfg-or-sybng";a:2:{i:0;R:16609;i:1;R:801;}s:36:"8:inyvqngbe_yvfg_reebe_vainyvq_enatr";a:2:{i:0;R:16609;i:1;R:801;}s:36:"8:inyvqngbe-yvfg-reebe-vainyvq-ertrk";a:2:{i:0;R:16609;i:1;R:801;}s:39:"8:inyvqngbe_yvfg_reebe_vainyvq_nethzrag";a:2:{i:0;R:16609;i:1;R:801;}s:35:"8:inyvqngbe-yvfg-reebe-npprcgf-bayl";a:2:{i:0;R:16609;i:1;R:801;}s:43:"8:inyvqngbe-yvfg-reebe-npprcgf-bayl-bzvggrq";a:2:{i:0;R:16609;i:1;R:801;}s:30:"8:inyvqngbe_reebe_npprcgf_bayl";a:2:{i:0;R:16609;i:1;R:801;}s:38:"8:inyvqngbe-reebe-npprcgf-bayl-bzvggrq";a:2:{i:0;R:16609;i:1;R:801;}s:24:"8:inyvqngbe_yvfg_bzvggrq";a:2:{i:0;R:16609;i:1;R:801;}s:14:"8:inevnoyrcntr";a:2:{i:0;s:16:"ext-variablepage";i:1;R:801;}s:27:"8:inevnoyrcntr-aniyvax_grkg";a:2:{i:0;R:16689;i:1;R:801;}s:19:"8:inevnoyrcntr-qrfp";a:2:{i:0;R:16689;i:1;R:801;}s:16:"8:inevnoyrf-qrfp";a:2:{i:0;s:13:"ext-variables";i:1;R:801;}s:6:"8:ibgr";a:2:{i:0;s:8:"ext-vote";i:1;R:801;}s:11:"8:ibgr-qrfp";a:2:{i:0;R:16695;i:1;R:801;}s:13:"8:ibgr-urnqre";a:2:{i:0;R:16695;i:1;R:801;}s:14:"8:ibgr-pheerag";a:2:{i:0;R:16695;i:1;R:801;}s:13:"8:ibgr-yrtraq";a:2:{i:0;R:16695;i:1;R:801;}s:14:"8:ibgr-pncgvba";a:2:{i:0;R:16695;i:1;R:801;}s:14:"8:ibgr-pubvprf";a:2:{i:0;R:16695;i:1;R:801;}s:13:"8:ibgr-fhozvg";a:2:{i:0;R:16695;i:1;R:801;}s:17:"8:ibgr-ertvfgrerq";a:2:{i:0;R:16695;i:1;R:801;}s:19:"8:ibgr-ivrj-erfhygf";a:2:{i:0;R:16695;i:1;R:801;}s:14:"8:ibgr-erfhygf";a:2:{i:0;R:16695;i:1;R:801;}s:21:"8:ibgr-erfhygf-pubvpr";a:2:{i:0;R:16695;i:1;R:801;}s:20:"8:ibgr-erfhygf-pbhag";a:2:{i:0;R:16695;i:1;R:801;}s:19:"8:ibgr-erfhygf-abar";a:2:{i:0;R:16695;i:1;R:801;}s:12:"8:ibgr-ybtva";a:2:{i:0;R:16695;i:1;R:801;}s:21:"8:ibgr-vainyvq-pubvpr";a:2:{i:0;R:16695;i:1;R:801;}s:12:"8:evtug-ibgr";a:2:{i:0;R:16695;i:1;R:801;}s:17:"8:evtug-ibgrnqzva";a:2:{i:0;R:16695;i:1;R:801;}s:10:"8:jngpuref";a:2:{i:0;s:12:"ext-watchers";i:1;R:801;}s:15:"8:jngpuref-qrfp";a:2:{i:0;R:16714;i:1;R:801;}s:21:"8:jngpuref_yvax_gvgyr";a:2:{i:0;R:16714;i:1;R:801;}s:24:"8:jngpuref_reebe_negvpyr";a:2:{i:0;R:16714;i:1;R:801;}s:29:"8:jngpuref-reebe-vainyvq-cntr";a:2:{i:0;R:16714;i:1;R:801;}s:17:"8:jngpuref_urnqre";a:2:{i:0;R:16714;i:1;R:801;}s:24:"8:jngpuref_abbar_jngpurf";a:2:{i:0;R:16714;i:1;R:801;}s:20:"8:jngpuref_k_be_zber";a:2:{i:0;R:16714;i:1;R:801;}s:22:"8:jngpuref_yrff_guna_k";a:2:{i:0;R:16714;i:1;R:801;}s:14:"8:jngpuref-ahz";a:2:{i:0;R:16714;i:1;R:801;}s:21:"8:evtug-jngpuref-yvfg";a:2:{i:0;R:16714;i:1;R:801;}s:15:"8:jngpufhocntrf";a:2:{i:0;s:17:"ext-watchsubpages";i:1;R:801;}s:32:"8:jngpufhocntrf-nqqrqgbjngpuyvfg";a:2:{i:0;R:16726;i:1;R:801;}s:25:"8:jngpufhocntrf-nqqgvgyrf";a:2:{i:0;R:16726;i:1;R:801;}s:36:"8:jngpufhocntrf-nqqgvgyrfgbjngpuyvfg";a:2:{i:0;R:16726;i:1;R:801;}s:20:"8:jngpufhocntrf-qrfp";a:2:{i:0;R:16726;i:1;R:801;}s:20:"8:jngpufhocntrf-sbez";a:2:{i:0;R:16726;i:1;R:801;}s:9:"8:jropung";a:2:{i:0;s:11:"ext-webchat";i:1;R:801;}s:14:"8:jropung-qrfp";a:2:{i:0;R:16733;i:1;R:801;}s:16:"8:jropung-urnqre";a:2:{i:0;R:16733;i:1;R:801;}s:15:"8:evtug-jropung";a:2:{i:0;R:16733;i:1;R:801;}s:25:"8:vacynpr_npprff_qvfnoyrq";a:2:{i:0;s:12:"ext-webstore";i:1;R:801;}s:23:"8:vacynpr_npprff_qravrq";a:2:{i:0;R:16738;i:1;R:801;}s:24:"8:vacynpr_fpnyre_ab_grzc";a:2:{i:0;R:16738;i:1;R:801;}s:34:"8:vacynpr_fpnyre_abg_rabhtu_cnenzf";a:2:{i:0;R:16738;i:1;R:801;}s:30:"8:vacynpr_fpnyre_vainyvq_vzntr";a:2:{i:0;R:16738;i:1;R:801;}s:23:"8:vacynpr_fpnyre_snvyrq";a:2:{i:0;R:16738;i:1;R:801;}s:27:"8:vacynpr_fpnyre_ab_unaqyre";a:2:{i:0;R:16738;i:1;R:801;}s:26:"8:vacynpr_fpnyre_ab_bhgchg";a:2:{i:0;R:16738;i:1;R:801;}s:26:"8:vacynpr_fpnyre_mreb_fvmr";a:2:{i:0;R:16738;i:1;R:801;}s:15:"8:jrofgber-qrfp";a:2:{i:0;R:16738;i:1;R:801;}s:17:"8:jrofgber_npprff";a:2:{i:0;R:16738;i:1;R:801;}s:23:"8:jrofgber_cngu_vainyvq";a:2:{i:0;R:16738;i:1;R:801;}s:20:"8:jrofgber_qrfg_bcra";a:2:{i:0;R:16738;i:1;R:801;}s:20:"8:jrofgber_qrfg_ybpx";a:2:{i:0;R:16738;i:1;R:801;}s:21:"8:jrofgber_qrfg_zxqve";a:2:{i:0;R:16738;i:1;R:801;}s:23:"8:jrofgber_nepuvir_ybpx";a:2:{i:0;R:16738;i:1;R:801;}s:24:"8:jrofgber_nepuvir_zxqve";a:2:{i:0;R:16738;i:1;R:801;}s:19:"8:jrofgber_fep_bcra";a:2:{i:0;R:16738;i:1;R:801;}s:20:"8:jrofgber_fep_pybfr";a:2:{i:0;R:16738;i:1;R:801;}s:21:"8:jrofgber_fep_qryrgr";a:2:{i:0;R:16738;i:1;R:801;}s:17:"8:jrofgber_eranzr";a:2:{i:0;R:16738;i:1;R:801;}s:20:"8:jrofgber_ybpx_bcra";a:2:{i:0;R:16738;i:1;R:801;}s:21:"8:jrofgber_ybpx_pybfr";a:2:{i:0;R:16738;i:1;R:801;}s:22:"8:jrofgber_qrfg_rkvfgf";a:2:{i:0;R:16738;i:1;R:801;}s:20:"8:jrofgber_grzc_bcra";a:2:{i:0;R:16738;i:1;R:801;}s:20:"8:jrofgber_grzc_pbcl";a:2:{i:0;R:16738;i:1;R:801;}s:21:"8:jrofgber_grzc_pybfr";a:2:{i:0;R:16738;i:1;R:801;}s:20:"8:jrofgber_grzc_ybpx";a:2:{i:0;R:16738;i:1;R:801;}s:21:"8:jrofgber_ab_nepuvir";a:2:{i:0;R:16738;i:1;R:801;}s:18:"8:jrofgber_ab_svyr";a:2:{i:0;R:16738;i:1;R:801;}s:24:"8:jrofgber_zbir_hcybnqrq";a:2:{i:0;R:16738;i:1;R:801;}s:23:"8:jrofgber_vainyvq_mbar";a:2:{i:0;R:16738;i:1;R:801;}s:21:"8:jrofgber_ab_qryrgrq";a:2:{i:0;R:16738;i:1;R:801;}s:15:"8:jrofgber_phey";a:2:{i:0;R:16738;i:1;R:801;}s:14:"8:jrofgber_404";a:2:{i:0;R:16738;i:1;R:801;}s:22:"8:jrofgber_cuc_jneavat";a:2:{i:0;R:16738;i:1;R:801;}s:29:"8:jrofgber_zrgnqngn_abg_sbhaq";a:2:{i:0;R:16738;i:1;R:801;}s:29:"8:jrofgber_cbfgsvyr_abg_sbhaq";a:2:{i:0;R:16738;i:1;R:801;}s:32:"8:jrofgber_fpnyre_rzcgl_erfcbafr";a:2:{i:0;R:16738;i:1;R:801;}s:27:"8:jrofgber_vainyvq_erfcbafr";a:2:{i:0;R:16738;i:1;R:801;}s:22:"8:jrofgber_ab_erfcbafr";a:2:{i:0;R:16738;i:1;R:801;}s:24:"8:jrofgber_onpxraq_reebe";a:2:{i:0;R:16738;i:1;R:801;}s:20:"8:jrofgber_cuc_reebe";a:2:{i:0;R:16738;i:1;R:801;}s:21:"8:jrofgber_ab_unaqyre";a:2:{i:0;R:16738;i:1;R:801;}s:12:"8:jungvfzlvc";a:2:{i:0;s:14:"ext-whatismyip";i:1;R:801;}s:17:"8:jungvfzlvc-qrfp";a:2:{i:0;R:16783;i:1;R:801;}s:16:"8:jungvfzlvc-bhg";a:2:{i:0;R:16783;i:1;R:801;}s:18:"8:evtug-jungvfzlvc";a:2:{i:0;R:16783;i:1;R:801;}s:20:"8:juvgryvfgrqvg-qrfp";a:2:{i:0;s:21:"ext-inclusionlistedit";i:1;R:801;}s:15:"8:juvgryvfgrqvg";a:2:{i:0;R:16788;i:1;R:801;}s:11:"8:juvgryvfg";a:2:{i:0;R:16788;i:1;R:801;}s:18:"8:zljuvgryvfgcntrf";a:2:{i:0;R:16788;i:1;R:801;}s:14:"8:juvgryvfgsbe";a:2:{i:0;R:16788;i:1;R:801;}s:22:"8:juvgryvfggnoyrzbqvsl";a:2:{i:0;R:16788;i:1;R:801;}s:25:"8:juvgryvfggnoyrzbqvslnyy";a:2:{i:0;R:16788;i:1;R:801;}s:26:"8:juvgryvfggnoyrzbqvslabar";a:2:{i:0;R:16788;i:1;R:801;}s:20:"8:juvgryvfggnoyrcntr";a:2:{i:0;R:16788;i:1;R:801;}s:20:"8:juvgryvfggnoyrglcr";a:2:{i:0;R:16788;i:1;R:801;}s:23:"8:juvgryvfggnoyrrkcverf";a:2:{i:0;R:16788;i:1;R:801;}s:21:"8:juvgryvfggnoyrzbqol";a:2:{i:0;R:16788;i:1;R:801;}s:21:"8:juvgryvfggnoyrzbqba";a:2:{i:0;R:16788;i:1;R:801;}s:20:"8:juvgryvfggnoyrrqvg";a:2:{i:0;R:16788;i:1;R:801;}s:20:"8:juvgryvfggnoyrivrj";a:2:{i:0;R:16788;i:1;R:801;}s:23:"8:juvgryvfggnoyrarjqngr";a:2:{i:0;R:16788;i:1;R:801;}s:26:"8:juvgryvfggnoyrpunatrqngr";a:2:{i:0;R:16788;i:1;R:801;}s:23:"8:juvgryvfggnoyrfrgrqvg";a:2:{i:0;R:16788;i:1;R:801;}s:23:"8:juvgryvfggnoyrfrgivrj";a:2:{i:0;R:16788;i:1;R:801;}s:22:"8:juvgryvfggnoyrerzbir";a:2:{i:0;R:16788;i:1;R:801;}s:22:"8:juvgryvfgarjcntrfsbe";a:2:{i:0;R:16788;i:1;R:801;}s:23:"8:juvgryvfgarjgnoyrqngr";a:2:{i:0;R:16788;i:1;R:801;}s:23:"8:juvgryvfgarjgnoyrrqvg";a:2:{i:0;R:16788;i:1;R:801;}s:23:"8:juvgryvfgarjgnoyrivrj";a:2:{i:0;R:16788;i:1;R:801;}s:29:"8:juvgryvfgabjuvgryvfgrqhfref";a:2:{i:0;R:16788;i:1;R:801;}s:26:"8:juvgryvfgarjgnoyrcebprff";a:2:{i:0;R:16788;i:1;R:801;}s:25:"8:juvgryvfgarjgnoyrerivrj";a:2:{i:0;R:16788;i:1;R:801;}s:27:"8:juvgryvfgfryrpgerfgevpgrq";a:2:{i:0;R:16788;i:1;R:801;}s:19:"8:juvgryvfgcntryvfg";a:2:{i:0;R:16788;i:1;R:801;}s:21:"8:juvgryvfgabpnyraqne";a:2:{i:0;R:16788;i:1;R:801;}s:19:"8:juvgryvfgbireivrj";a:2:{i:0;R:16788;i:1;R:801;}s:21:"8:juvgryvfgbireivrjpq";a:2:{i:0;R:16788;i:1;R:801;}s:21:"8:juvgryvfgbireivrjfn";a:2:{i:0;R:16788;i:1;R:801;}s:21:"8:juvgryvfgbireivrjez";a:2:{i:0;R:16788;i:1;R:801;}s:21:"8:juvgryvfgbireivrjan";a:2:{i:0;R:16788;i:1;R:801;}s:18:"8:juvgryvfgerdhrfg";a:2:{i:0;R:16788;i:1;R:801;}s:21:"8:juvgryvfgerdhrfgzft";a:2:{i:0;R:16788;i:1;R:801;}s:22:"8:juvgryvfgerdhrfgpbas";a:2:{i:0;R:16788;i:1;R:801;}s:24:"8:juvgryvfgabaerfgevpgrq";a:2:{i:0;R:16788;i:1;R:801;}s:16:"8:juvgryvfgarire";a:2:{i:0;R:16788;i:1;R:801;}s:21:"8:juvgryvfgahzzngpurf";a:2:{i:0;R:16788;i:1;R:801;}s:21:"8:evtug-rqvgjuvgryvfg";a:2:{i:0;R:16788;i:1;R:801;}s:27:"8:evtug-erfgevpggbjuvgryvfg";a:2:{i:0;R:16788;i:1;R:801;}s:22:"8:npgvba-rqvgjuvgryvfg";a:2:{i:0;R:16788;i:1;R:801;}s:28:"8:npgvba-erfgevpggbjuvgryvfg";a:2:{i:0;R:16788;i:1;R:801;}s:18:"8:tebhc-erfgevpgrq";a:2:{i:0;R:16788;i:1;R:801;}s:25:"8:tebhc-erfgevpgrq-zrzore";a:2:{i:0;R:16788;i:1;R:801;}s:15:"8:tebhc-znantre";a:2:{i:0;R:16788;i:1;R:801;}s:22:"8:tebhc-znantre-zrzore";a:2:{i:0;R:16788;i:1;R:801;}s:21:"8:juvgryvfgcntrf-qrfp";a:2:{i:0;s:22:"ext-inclusionlistpages";i:1;R:801;}s:23:"8:choyvp_ernq_juvgryvfg";a:2:{i:0;R:16838;i:1;R:801;}s:15:"8:jubvfjngpuvat";a:2:{i:0;s:17:"ext-whoiswatching";i:1;R:801;}s:20:"8:jubvfjngpuvat-qrfp";a:2:{i:0;R:16841;i:1;R:801;}s:29:"8:fcrpvnyjubvfjngpuvatgurcntr";a:2:{i:0;R:16841;i:1;R:801;}s:27:"8:fcrpvnyjubvfjngpuvathfntr";a:2:{i:0;R:16841;i:1;R:801;}s:30:"8:fcrpvnyjubvfjngpuvatnqqhfref";a:2:{i:0;R:16841;i:1;R:801;}s:28:"8:fcrpvnyjubvfjngpuvatnqqoga";a:2:{i:0;R:16841;i:1;R:801;}s:12:"8:jubfbayvar";a:2:{i:0;s:14:"ext-whosonline";i:1;R:801;}s:17:"8:jubfbayvar-qrfp";a:2:{i:0;R:16848;i:1;R:801;}s:14:"8:jvqtrgf-qrfp";a:2:{i:0;s:11:"ext-widgets";i:1;R:801;}s:15:"8:jvqtrgf-reebe";a:2:{i:0;R:16851;i:1;R:801;}s:20:"8:tebhc-jvqtrgrqvgbe";a:2:{i:0;R:16851;i:1;R:801;}s:27:"8:tebhc-jvqtrgrqvgbe-zrzore";a:2:{i:0;R:16851;i:1;R:801;}s:24:"8:tebhccntr-jvqtrgrqvgbe";a:2:{i:0;R:16851;i:1;R:801;}s:19:"8:evtug-rqvgjvqtrgf";a:2:{i:0;R:16851;i:1;R:801;}s:24:"8:tebhc-jvqtrgrqvgbe.pff";a:2:{i:0;R:16851;i:1;R:801;}s:23:"8:tebhc-jvqtrgrqvgbe.wf";a:2:{i:0;R:16851;i:1;R:801;}s:23:"8:jvxvnegvpyrsrrqf-qrfp";a:2:{i:0;s:20:"ext-wikiarticlefeeds";i:1;R:801;}s:36:"8:jvxvnegvpyrsrrqf-genpxvat-pngrtbel";a:2:{i:0;R:16860;i:1;R:801;}s:39:"8:jvxvnegvpyrsrrqf_pbzovarq_qrfpevcgvba";a:2:{i:0;R:16860;i:1;R:801;}s:19:"8:fcrpvnyjvxvngubzr";a:2:{i:0;s:14:"ext-wikiathome";i:1;R:801;}s:10:"8:jnu-qrfp";a:2:{i:0;R:16864;i:1;R:801;}s:15:"8:jnu-hfre-qrfp";a:2:{i:0;R:16864;i:1;R:801;}s:17:"8:jnu-fubeg-nhqvb";a:2:{i:0;R:16864;i:1;R:801;}s:17:"8:jnu-fubeg-ivqrb";a:2:{i:0;R:16864;i:1;R:801;}s:19:"8:jnu-fubeg-trareny";a:2:{i:0;R:16864;i:1;R:801;}s:16:"8:jnu-ybat-nhqvb";a:2:{i:0;R:16864;i:1;R:801;}s:16:"8:jnu-ybat-ivqrb";a:2:{i:0;R:16864;i:1;R:801;}s:22:"8:jnu-ybat-zhygvcyrkrq";a:2:{i:0;R:16864;i:1;R:801;}s:18:"8:jnu-ybat-trareny";a:2:{i:0;R:16864;i:1;R:801;}s:16:"8:jnu-ybat-reebe";a:2:{i:0;R:16864;i:1;R:801;}s:23:"8:jnu-genafpbqr-jbexvat";a:2:{i:0;R:16864;i:1;R:801;}s:23:"8:jnu-genafpbqr-urycbhg";a:2:{i:0;R:16864;i:1;R:801;}s:20:"8:jnu-genafpbqr-snvy";a:2:{i:0;R:16864;i:1;R:801;}s:20:"8:jnu-wninfpevcg-bss";a:2:{i:0;R:16864;i:1;R:801;}s:13:"8:jnu-ybnqvat";a:2:{i:0;R:16864;i:1;R:801;}s:15:"8:jnu-zrah-wbof";a:2:{i:0;R:16864;i:1;R:801;}s:16:"8:jnu-zrah-fgngf";a:2:{i:0;R:16864;i:1;R:801;}s:15:"8:jnu-zrah-cers";a:2:{i:0;R:16864;i:1;R:801;}s:19:"8:jnu-ybbxvatsbewbo";a:2:{i:0;R:16864;i:1;R:801;}s:20:"8:jnu-fgneg-ba-ivfvg";a:2:{i:0;R:16864;i:1;R:801;}s:21:"8:jnu-wbof-juvyr-njnl";a:2:{i:0;R:16864;i:1;R:801;}s:16:"8:jnu-abwbosbhaq";a:2:{i:0;R:16864;i:1;R:801;}s:19:"8:jnu-abgbxra-ybtva";a:2:{i:0;R:16864;i:1;R:801;}s:12:"8:jnu-ncvbss";a:2:{i:0;R:16864;i:1;R:801;}s:15:"8:jnu-qbvat-wbo";a:2:{i:0;R:16864;i:1;R:801;}s:17:"8:jnu-qbjaybnqvat";a:2:{i:0;R:16864;i:1;R:801;}s:14:"8:jnu-rapbqvat";a:2:{i:0;R:16864;i:1;R:801;}s:19:"8:jnu-rapbqvat-snvy";a:2:{i:0;R:16864;i:1;R:801;}s:15:"8:jnu-hcybnqvat";a:2:{i:0;R:16864;i:1;R:801;}s:16:"8:jnu-hcybnqsnvy";a:2:{i:0;R:16864;i:1;R:801;}s:19:"8:jnu-qbarhcybnqvat";a:2:{i:0;R:16864;i:1;R:801;}s:20:"8:jnu-arrqf-sversbtt";a:2:{i:0;R:16864;i:1;R:801;}s:15:"8:jnu-ncv-reebe";a:2:{i:0;R:16864;i:1;R:801;}s:12:"8:jvxvounfun";a:2:{i:0;s:14:"ext-wikibhasha";i:1;R:801;}s:17:"8:jvxvounfun-qrfp";a:2:{i:0;R:16899;i:1;R:801;}s:16:"8:jvxvounfunyvax";a:2:{i:0;R:16899;i:1;R:801;}s:15:"8:jvxvqngn-qrfp";a:2:{i:0;s:12:"ext-wikidata";i:1;R:801;}s:39:"8:jvxvqngn-unaqyre-anzrfcnpr-zbir-reebe";a:2:{i:0;R:16903;i:1;R:801;}s:11:"8:ynathntrf";a:2:{i:0;R:16903;i:1;R:801;}s:14:"8:ynatzna-qrfp";a:2:{i:0;R:16903;i:1;R:801;}s:15:"8:ynatzna_gvgyr";a:2:{i:0;R:16903;i:1;R:801;}s:21:"8:ynatzna_abg_nyybjrq";a:2:{i:0;R:16903;i:1;R:801;}s:16:"8:ynatzna_urnqre";a:2:{i:0;R:16903;i:1;R:801;}s:20:"8:ynatzna_erd_svryqf";a:2:{i:0;R:16903;i:1;R:801;}s:16:"8:ynatzna_nqqvat";a:2:{i:0;R:16903;i:1;R:801;}s:18:"8:ynatzna_ynatanzr";a:2:{i:0;R:16903;i:1;R:801;}s:18:"8:ynatzna_vfb639-3";a:2:{i:0;R:16903;i:1;R:801;}s:18:"8:ynatzna_vfb639-2";a:2:{i:0;R:16903;i:1;R:801;}s:19:"8:ynatzna_jvxvzrqvn";a:2:{i:0;R:16903;i:1;R:801;}s:24:"8:ynatzna_svryq_bcgvbany";a:2:{i:0;R:16903;i:1;R:801;}s:17:"8:ynatzna_nqqynat";a:2:{i:0;R:16903;i:1;R:801;}s:17:"8:vzcbegynatanzrf";a:2:{i:0;R:16903;i:1;R:801;}s:23:"8:vzcbegynatanzrf_gvgyr";a:2:{i:0;R:16903;i:1;R:801;}s:29:"8:vzcbegynatanzrf_abg_nyybjrq";a:2:{i:0;R:16903;i:1;R:801;}s:23:"8:vzcbegynatanzrf_nqqrq";a:2:{i:0;R:16903;i:1;R:801;}s:27:"8:vzcbegynatanzrf_abg_sbhaq";a:2:{i:0;R:16903;i:1;R:801;}s:12:"8:qngnfrnepu";a:2:{i:0;R:16903;i:1;R:801;}s:21:"8:qngnfrnepu_ynathntr";a:2:{i:0;R:16903;i:1;R:801;}s:23:"8:qngnfrnepu_sbhaq_jbeq";a:2:{i:0;R:16903;i:1;R:801;}s:20:"8:qngnfrnepu_zrnavat";a:2:{i:0;R:16903;i:1;R:801;}s:27:"8:qngnfrnepu_rkg_vqragvsvre";a:2:{i:0;R:16903;i:1;R:801;}s:24:"8:qngnfrnepu_frnepu_grkg";a:2:{i:0;R:16903;i:1;R:801;}s:25:"8:qngnfrnepu_jvguva_jbeqf";a:2:{i:0;R:16903;i:1;R:801;}s:27:"8:qngnfrnepu_jvguva_rkg_vqf";a:2:{i:0;R:16903;i:1;R:801;}s:25:"8:qngnfrnepu_fubjvat_bayl";a:2:{i:0;R:16903;i:1;R:801;}s:26:"8:qngnfrnepu_zngpu_rkg_vqf";a:2:{i:0;R:16903;i:1;R:801;}s:24:"8:qngnfrnepu_zngpu_jbeqf";a:2:{i:0;R:16903;i:1;R:801;}s:29:"8:qngnfrnepu_zngpu_jbeqf_ynat";a:2:{i:0;R:16903;i:1;R:801;}s:11:"8:vzcbeggfi";a:2:{i:0;R:16903;i:1;R:801;}s:21:"8:bj_vzcbeggfi_gvgyr1";a:2:{i:0;R:16903;i:1;R:801;}s:21:"8:bj_vzcbeggfi_gvgyr2";a:2:{i:0;R:16903;i:1;R:801;}s:21:"8:bj_vzcbeggfi_urnqre";a:2:{i:0;R:16903;i:1;R:801;}s:26:"8:bj_vzcbeggfi_abg_nyybjrq";a:2:{i:0;R:16903;i:1;R:801;}s:24:"8:bj_vzcbeggfi_vzcbegvat";a:2:{i:0;R:16903;i:1;R:801;}s:28:"8:bj_vzcbeggfi_vzcbeg_snvyrq";a:2:{i:0;R:16903;i:1;R:801;}s:19:"8:bj_vzcbeggfi_svyr";a:2:{i:0;R:16903;i:1;R:801;}s:23:"8:bj_vzcbeggfi_grfg_eha";a:2:{i:0;R:16903;i:1;R:801;}s:23:"8:bj_vzcbeggfi_abg_hgs8";a:2:{i:0;R:16903;i:1;R:801;}s:22:"8:bj_vzcbeggfi_abg_gfi";a:2:{i:0;R:16903;i:1;R:801;}s:26:"8:bj_vzcbeggfi_onq_pbyhzaf";a:2:{i:0;R:16903;i:1;R:801;}s:29:"8:bj_vzcbeggfi_grfg_eha_gvgyr";a:2:{i:0;R:16903;i:1;R:801;}s:28:"8:bj_vzcbeggfi_abguvat_nqqrq";a:2:{i:0;R:16903;i:1;R:801;}s:33:"8:bj_vzcbeggfi_abguvat_nqqrq_grfg";a:2:{i:0;R:16903;i:1;R:801;}s:22:"8:bj_vzcbeggfi_erfhygf";a:2:{i:0;R:16903;i:1;R:801;}s:27:"8:bj_vzcrkcgfi_haxabja_ynat";a:2:{i:0;R:16903;i:1;R:801;}s:11:"8:rkcbeggfi";a:2:{i:0;R:16903;i:1;R:801;}s:20:"8:bj_rkcbeggfi_gvgyr";a:2:{i:0;R:16903;i:1;R:801;}s:21:"8:bj_rkcbeggfi_urnqre";a:2:{i:0;R:16903;i:1;R:801;}s:24:"8:bj_rkcbeggfi_ynathntrf";a:2:{i:0;R:16903;i:1;R:801;}s:26:"8:bj_rkcbeggfi_abg_nyybjrq";a:2:{i:0;R:16903;i:1;R:801;}s:28:"8:bj_rkcbeggfi_rkcbeg_snvyrq";a:2:{i:0;R:16903;i:1;R:801;}s:15:"8:nqqpbyyrpgvba";a:2:{i:0;R:16903;i:1;R:801;}s:19:"8:bj_frnepuaberfhyg";a:2:{i:0;R:16903;i:1;R:801;}s:9:"8:bj_fnir";a:2:{i:0;R:16903;i:1;R:801;}s:12:"8:bj_uvfgbel";a:2:{i:0;R:16903;i:1;R:801;}s:13:"8:bj_qngnfrgf";a:2:{i:0;R:16903;i:1;R:801;}s:17:"8:bj_abrqvg_gvgyr";a:2:{i:0;R:16903;i:1;R:801;}s:11:"8:bj_abrqvg";a:2:{i:0;R:16903;i:1;R:801;}s:23:"8:bj_rqvgvat_cbyvpl_hey";a:2:{i:0;R:16903;i:1;R:801;}s:20:"8:bj_hvcers_qngnfrgf";a:2:{i:0;R:16903;i:1;R:801;}s:12:"8:bj_hvcersf";a:2:{i:0;R:16903;i:1;R:801;}s:18:"8:bj_abar_fryrpgrq";a:2:{i:0;R:16903;i:1;R:801;}s:13:"8:genafnpgvba";a:2:{i:0;R:16903;i:1;R:801;}s:33:"8:bj_genafnpgvba_sebz_genafnpgvba";a:2:{i:0;R:16903;i:1;R:801;}s:22:"8:bj_genafnpgvba_pbhag";a:2:{i:0;R:16903;i:1;R:801;}s:21:"8:bj_genafnpgvba_hfre";a:2:{i:0;R:16903;i:1;R:801;}s:30:"8:bj_genafnpgvba_fubj_ebyyonpx";a:2:{i:0;R:16903;i:1;R:801;}s:32:"8:bj_genafnpgvba_ebyyonpx_ohggba";a:2:{i:0;R:16903;i:1;R:801;}s:32:"8:bj_genafnpgvba_ebyyonpx_urnqre";a:2:{i:0;R:16903;i:1;R:801;}s:26:"8:bj_genafnpgvba_ab_npgvba";a:2:{i:0;R:16903;i:1;R:801;}s:33:"8:bj_genafnpgvba_cerivbhf_irefvba";a:2:{i:0;R:16903;i:1;R:801;}s:24:"8:bj_genafnpgvba_erfgber";a:2:{i:0;R:16903;i:1;R:801;}s:23:"8:bj_genafnpgvba_erzbir";a:2:{i:0;R:16903;i:1;R:801;}s:26:"8:bj_genafnpgvba_bcrengvba";a:2:{i:0;R:16903;i:1;R:801;}s:26:"8:bj_genafnpgvba_vf_yngrfg";a:2:{i:0;R:16903;i:1;R:801;}s:29:"8:bj_genafnpgvba_pynff_zrzore";a:2:{i:0;R:16903;i:1;R:801;}s:23:"8:bj_genafnpgvba_bowrpg";a:2:{i:0;R:16903;i:1;R:801;}s:25:"8:bj_genafnpgvba_svefg_qz";a:2:{i:0;R:16903;i:1;R:801;}s:26:"8:bj_genafnpgvba_frpbaq_qz";a:2:{i:0;R:16903;i:1;R:801;}s:24:"8:bj_genafnpgvba_fhzznel";a:2:{i:0;R:16903;i:1;R:801;}s:16:"8:pbaprcgznccvat";a:2:{i:0;R:16903;i:1;R:801;}s:25:"8:bj_pbaprcgznccvat_gvgyr";a:2:{i:0;R:16903;i:1;R:801;}s:24:"8:bj_pbaprcgznccvat_uryc";a:2:{i:0;R:16903;i:1;R:801;}s:26:"8:bj_pbaprcgznccvat_hvgrkg";a:2:{i:0;R:16903;i:1;R:801;}s:39:"8:bj_pbaprcgznccvat_ab_npgvba_fcrpvsvrq";a:2:{i:0;R:16903;i:1;R:801;}s:10:"8:bj_qz_bx";a:2:{i:0;R:16903;i:1;R:801;}s:19:"8:bj_qz_abg_cerfrag";a:2:{i:0;R:16903;i:1;R:801;}s:17:"8:bj_qz_abg_sbhaq";a:2:{i:0;R:16903;i:1;R:801;}s:23:"8:bj_znccvat_fhpprffshy";a:2:{i:0;R:16903;i:1;R:801;}s:25:"8:bj_znccvat_hafhpprffshy";a:2:{i:0;R:16903;i:1;R:801;}s:16:"8:bj_jvyy_vafreg";a:2:{i:0;R:16903;i:1;R:801;}s:24:"8:bj_pbagragf_bs_znccvat";a:2:{i:0;R:16903;i:1;R:801;}s:23:"8:bj_ninvynoyr_pbagrkgf";a:2:{i:0;R:16903;i:1;R:801;}s:21:"8:bj_nqq_pbaprcg_yvax";a:2:{i:0;R:16903;i:1;R:801;}s:18:"8:bj_pbaprcg_cnary";a:2:{i:0;R:16903;i:1;R:801;}s:16:"8:bj_qz_onqgvgyr";a:2:{i:0;R:16903;i:1;R:801;}s:15:"8:bj_qz_zvffvat";a:2:{i:0;R:16903;i:1;R:801;}s:12:"8:bj_nqquvag";a:2:{i:0;R:16903;i:1;R:801;}s:26:"8:bj_nygreangvirqrsvavgvba";a:2:{i:0;R:16903;i:1;R:801;}s:27:"8:bj_nygreangvirqrsvavgvbaf";a:2:{i:0;R:16903;i:1;R:801;}s:15:"8:bj_naabgngvba";a:2:{i:0;R:16903;i:1;R:801;}s:24:"8:bj_nccebkvzngrzrnavatf";a:2:{i:0;R:16903;i:1;R:801;}s:10:"8:bj_pynff";a:2:{i:0;R:16903;i:1;R:801;}s:28:"8:bj_pynffnggevohgrnggevohgr";a:2:{i:0;R:16903;i:1;R:801;}s:20:"8:bj_pynffnggevohgrf";a:2:{i:0;R:16903;i:1;R:801;}s:24:"8:bj_pynffnggevohgryriry";a:2:{i:0;R:16903;i:1;R:801;}s:23:"8:bj_pynffnggevohgrglcr";a:2:{i:0;R:16903;i:1;R:801;}s:20:"8:bj_pynffzrzorefuvc";a:2:{i:0;R:16903;i:1;R:801;}s:15:"8:bj_pbyyrpgvba";a:2:{i:0;R:16903;i:1;R:801;}s:21:"8:bj_pbyyrpgvba_pbyba";a:2:{i:0;R:16903;i:1;R:801;}s:21:"8:bj_pbyyrpgvbazrzore";a:2:{i:0;R:16903;i:1;R:801;}s:25:"8:bj_pbyyrpgvbazrzorefuvc";a:2:{i:0;R:16903;i:1;R:801;}s:15:"8:bj_qrsvavgvba";a:2:{i:0;R:16903;i:1;R:801;}s:29:"8:bj_qrsvarqzrnavatnggevohgrf";a:2:{i:0;R:16903;i:1;R:801;}s:19:"8:bj_qrsvarqzrnavat";a:2:{i:0;R:16903;i:1;R:801;}s:28:"8:bj_qrsvarqzrnavatersrerapr";a:2:{i:0;R:16903;i:1;R:801;}s:18:"8:bj_rknpgzrnavatf";a:2:{i:0;R:16903;i:1;R:801;}s:15:"8:bj_rkcerffvba";a:2:{i:0;R:16903;i:1;R:801;}s:23:"8:bj_rkcerffvbazrnavatf";a:2:{i:0;R:16903;i:1;R:801;}s:16:"8:bj_rkcerffvbaf";a:2:{i:0;R:16903;i:1;R:801;}s:21:"8:bj_vqragvpnyzrnavat";a:2:{i:0;R:16903;i:1;R:801;}s:22:"8:bj_vapbzvateryngvbaf";a:2:{i:0;R:16903;i:1;R:801;}s:15:"8:bj_tbgbfbhepr";a:2:{i:0;R:16903;i:1;R:801;}s:7:"8:bj_vq";a:2:{i:0;R:16903;i:1;R:801;}s:13:"8:bj_ynathntr";a:2:{i:0;R:16903;i:1;R:801;}s:20:"8:bj_yrirynaabgngvba";a:2:{i:0;R:16903;i:1;R:801;}s:24:"8:bj_yvaxnggevohgrurnqre";a:2:{i:0;R:16903;i:1;R:801;}s:22:"8:bj_zhygvcyr_zrnavatf";a:2:{i:0;R:16903;i:1;R:801;}s:20:"8:bj_arjrknpgzrnavat";a:2:{i:0;R:16903;i:1;R:801;}s:20:"8:bj_bcgvbanggevohgr";a:2:{i:0;R:16903;i:1;R:801;}s:26:"8:bj_bcgvbanggevohgrurnqre";a:2:{i:0;R:16903;i:1;R:801;}s:26:"8:bj_bcgvbanggevohgrbcgvba";a:2:{i:0;R:16903;i:1;R:801;}s:27:"8:bj_bcgvbanggevohgrbcgvbaf";a:2:{i:0;R:16903;i:1;R:801;}s:26:"8:bj_bcgvbanggevohgrinyhrf";a:2:{i:0;R:16903;i:1;R:801;}s:24:"8:bj_bgureqrsvarqzrnavat";a:2:{i:0;R:16903;i:1;R:801;}s:20:"8:bj_cbchcnaabgngvba";a:2:{i:0;R:16903;i:1;R:801;}s:19:"8:bj_erpbeqyvsrfcna";a:2:{i:0;R:16903;i:1;R:801;}s:14:"8:bj_eryngvbaf";a:2:{i:0;R:16903;i:1;R:801;}s:17:"8:bj_eryngvbaglcr";a:2:{i:0;R:16903;i:1;R:801;}s:11:"8:bj_erzbir";a:2:{i:0;R:16903;i:1;R:801;}s:15:"8:bj_erzbiruvag";a:2:{i:0;R:16903;i:1;R:801;}s:13:"8:bj_fcryyvat";a:2:{i:0;R:16903;i:1;R:801;}s:16:"8:bj_fhttrfguvag";a:2:{i:0;R:16903;i:1;R:801;}s:13:"8:bj_flabalzf";a:2:{i:0;R:16903;i:1;R:801;}s:28:"8:bj_flabalzfnaqgenafyngvbaf";a:2:{i:0;R:16903;i:1;R:801;}s:11:"8:bj_fbhepr";a:2:{i:0;R:16903;i:1;R:801;}s:21:"8:bj_fbheprvqragvsvre";a:2:{i:0;R:16903;i:1;R:801;}s:9:"8:bj_grkg";a:2:{i:0;R:16903;i:1;R:801;}s:18:"8:bj_grkgnggevohgr";a:2:{i:0;R:16903;i:1;R:801;}s:24:"8:bj_grkgnggevohgrurnqre";a:2:{i:0;R:16903;i:1;R:801;}s:24:"8:bj_grkgnggevohgrinyhrf";a:2:{i:0;R:16903;i:1;R:801;}s:9:"8:bj_gvzr";a:2:{i:0;R:16903;i:1;R:801;}s:28:"8:bj_genafyngrqgrkgnggevohgr";a:2:{i:0;R:16903;i:1;R:801;}s:19:"8:bj_genafyngrqgrkg";a:2:{i:0;R:16903;i:1;R:801;}s:33:"8:bj_genafyngrqgrkgnggevohgrinyhr";a:2:{i:0;R:16903;i:1;R:801;}s:34:"8:bj_genafyngrqgrkgnggevohgrinyhrf";a:2:{i:0;R:16903;i:1;R:801;}s:10:"8:bj_ynory";a:2:{i:0;R:16903;i:1;R:801;}s:9:"8:bj_yvax";a:2:{i:0;R:16903;i:1;R:801;}s:18:"8:bj_yvaxnggevohgr";a:2:{i:0;R:16903;i:1;R:801;}s:24:"8:bj_yvaxnggevohgrinyhrf";a:2:{i:0;R:16903;i:1;R:801;}s:8:"8:bj_hey";a:2:{i:0;R:16903;i:1;R:801;}s:9:"8:bj_hfre";a:2:{i:0;R:16903;i:1;R:801;}s:13:"8:bj_cebcregl";a:2:{i:0;R:16903;i:1;R:801;}s:10:"8:bj_inyhr";a:2:{i:0;R:16903;i:1;R:801;}s:10:"8:bj_nqqrq";a:2:{i:0;R:16903;i:1;R:801;}s:12:"8:bj_erzbirq";a:2:{i:0;R:16903;i:1;R:801;}s:20:"8:bj_zrnavatfbsgvgyr";a:2:{i:0;R:16903;i:1;R:801;}s:23:"8:bj_zrnavatfbsfhogvgyr";a:2:{i:0;R:16903;i:1;R:801;}s:22:"8:bj_crezvffvba_qravrq";a:2:{i:0;R:16903;i:1;R:801;}s:6:"8:pbcl";a:2:{i:0;R:16903;i:1;R:801;}s:29:"8:bj_pbcl_ab_npgvba_fcrpvsvrq";a:2:{i:0;R:16903;i:1;R:801;}s:14:"8:bj_pbcl_uryc";a:2:{i:0;R:16903;i:1;R:801;}s:23:"8:bj_cyrnfr_cebirq_qzvq";a:2:{i:0;R:16903;i:1;R:801;}s:22:"8:bj_cyrnfr_cebirq_qp1";a:2:{i:0;R:16903;i:1;R:801;}s:22:"8:bj_cyrnfr_cebirq_qp2";a:2:{i:0;R:16903;i:1;R:801;}s:20:"8:bj_pbcl_fhpprffshy";a:2:{i:0;R:16903;i:1;R:801;}s:22:"8:bj_pbcl_hafhpprffshy";a:2:{i:0;R:16903;i:1;R:801;}s:24:"8:bj_ab_npgvba_fcrpvsvrq";a:2:{i:0;R:16903;i:1;R:801;}s:29:"8:bj_qo_pbafvfgrapl_abg_sbhaq";a:2:{i:0;R:16903;i:1;R:801;}s:24:"8:bj_uvfgbel_genafnpgvba";a:2:{i:0;R:16903;i:1;R:801;}s:27:"8:bj_uvfgbel_fubj_yvsr_fcna";a:2:{i:0;R:16903;i:1;R:801;}s:23:"8:bj_pynff_ngge_glcr_qz";a:2:{i:0;R:16903;i:1;R:801;}s:26:"8:bj_pynff_ngge_glcr_kyngr";a:2:{i:0;R:16903;i:1;R:801;}s:26:"8:bj_pynff_ngge_glcr_cynva";a:2:{i:0;R:16903;i:1;R:801;}s:25:"8:bj_pynff_ngge_glcr_yvax";a:2:{i:0;R:16903;i:1;R:801;}s:27:"8:bj_pynff_ngge_glcr_bcgvba";a:2:{i:0;R:16903;i:1;R:801;}s:18:"8:arrqfgenafyngvba";a:2:{i:0;R:16903;i:1;R:801;}s:24:"8:bj_arrqf_kyngvba_gvgyr";a:2:{i:0;R:16903;i:1;R:801;}s:30:"8:bj_arrqf_kyngvba_fbhepr_ynat";a:2:{i:0;R:16903;i:1;R:801;}s:28:"8:bj_arrqf_kyngvba_qrfg_ynat";a:2:{i:0;R:16903;i:1;R:801;}s:31:"8:bj_arrqf_kyngvba_ab_qrfg_ynat";a:2:{i:0;R:16903;i:1;R:801;}s:15:"8:bj_fgngvfgvpf";a:2:{i:0;R:16903;i:1;R:801;}s:9:"8:bj_fubj";a:2:{i:0;R:16903;i:1;R:801;}s:11:"8:bj_hcybnq";a:2:{i:0;R:16903;i:1;R:801;}s:11:"8:bj_perngr";a:2:{i:0;R:16903;i:1;R:801;}s:21:"8:bj_pbyyrpgvba_nqqrq";a:2:{i:0;R:16903;i:1;R:801;}s:21:"8:bj_fhttrfg_cerivbhf";a:2:{i:0;R:16903;i:1;R:801;}s:17:"8:bj_fhttrfg_arkg";a:2:{i:0;R:16903;i:1;R:801;}s:18:"8:bj_fhttrfg_pyrne";a:2:{i:0;R:16903;i:1;R:801;}s:25:"8:bj_afgno_qrsvarqzrnavat";a:2:{i:0;R:16903;i:1;R:801;}s:20:"8:bj_afgno_rqvg_pbcl";a:2:{i:0;R:16903;i:1;R:801;}s:19:"8:evtug-nqqynathntr";a:2:{i:0;R:16903;i:1;R:801;}s:19:"8:bj_fubja_qngnfrgf";a:2:{i:0;R:16903;i:1;R:801;}s:17:"8:cersf-bzrtnjvxv";a:2:{i:0;R:16903;i:1;R:801;}s:16:"8:jvxvsbehz-qrfp";a:2:{i:0;s:13:"ext-wikiforum";i:1;R:801;}s:11:"8:jvxvsbehz";a:2:{i:0;R:17112;i:1;R:801;}s:30:"8:jvxvsbehz-qnl-qrsvavgvba-arj";a:2:{i:0;R:17112;i:1;R:801;}s:32:"8:jvxvsbehz-znk-guernqf-cre-cntr";a:2:{i:0;R:17112;i:1;R:801;}s:32:"8:jvxvsbehz-znk-ercyvrf-cre-cntr";a:2:{i:0;R:17112;i:1;R:801;}s:21:"8:jvxvsbehz-nabalzbhf";a:2:{i:0;R:17112;i:1;R:801;}s:41:"8:jvxvsbehz-naabhaprzrag-bayl-qrfpevcgvba";a:2:{i:0;R:17112;i:1;R:801;}s:14:"8:jvxvsbehz-ol";a:2:{i:0;R:17112;i:1;R:801;}s:23:"8:jvxvsbehz-qrfpevcgvba";a:2:{i:0;R:17112;i:1;R:801;}s:26:"8:jvxvsbehz-sbehz-vf-rzcgl";a:2:{i:0;R:17112;i:1;R:801;}s:22:"8:jvxvsbehz-sbehz-anzr";a:2:{i:0;R:17112;i:1;R:801;}s:16:"8:jvxvsbehz-anzr";a:2:{i:0;R:17112;i:1;R:801;}s:26:"8:jvxvsbehz-ohggba-cerivrj";a:2:{i:0;R:17112;i:1;R:801;}s:19:"8:jvxvsbehz-cerivrj";a:2:{i:0;R:17112;i:1;R:801;}s:30:"8:jvxvsbehz-cerivrj-jvgu-gvgyr";a:2:{i:0;R:17112;i:1;R:801;}s:16:"8:jvxvsbehz-fnir";a:2:{i:0;R:17112;i:1;R:801;}s:24:"8:jvxvsbehz-reebe-frnepu";a:2:{i:0;R:17112;i:1;R:801;}s:38:"8:jvxvsbehz-reebe-frnepu-zvffvat-dhrel";a:2:{i:0;R:17112;i:1;R:801;}s:23:"8:jvxvsbehz-frnepu-uvgf";a:2:{i:0;R:17112;i:1;R:801;}s:25:"8:jvxvsbehz-frnepu-guernq";a:2:{i:0;R:17112;i:1;R:801;}s:26:"8:jvxvsbehz-guernq-qryrgrq";a:2:{i:0;R:17112;i:1;R:801;}s:22:"8:jvxvsbehz-gbcvp-anzr";a:2:{i:0;R:17112;i:1;R:801;}s:19:"8:jvxvsbehz-hcqngrf";a:2:{i:0;R:17112;i:1;R:801;}s:24:"8:jvxvsbehz-jevgr-guernq";a:2:{i:0;R:17112;i:1;R:801;}s:19:"8:jvxvsbehz-ercyvrf";a:2:{i:0;R:17112;i:1;R:801;}s:17:"8:jvxvsbehz-ivrjf";a:2:{i:0;R:17112;i:1;R:801;}s:18:"8:jvxvsbehz-guernq";a:2:{i:0;R:17112;i:1;R:801;}s:19:"8:jvxvsbehz-guernqf";a:2:{i:0;R:17112;i:1;R:801;}s:24:"8:jvxvsbehz-yngrfg-ercyl";a:2:{i:0;R:17112;i:1;R:801;}s:25:"8:jvxvsbehz-yngrfg-guernq";a:2:{i:0;R:17112;i:1;R:801;}s:17:"8:jvxvsbehz-sbehz";a:2:{i:0;R:17112;i:1;R:801;}s:20:"8:jvxvsbehz-bireivrj";a:2:{i:0;R:17112;i:1;R:801;}s:17:"8:jvxvsbehz-cntrf";a:2:{i:0;R:17112;i:1;R:801;}s:25:"8:jvxvsbehz-guernq-pybfrq";a:2:{i:0;R:17112;i:1;R:801;}s:22:"8:jvxvsbehz-arj-guernq";a:2:{i:0;R:17112;i:1;R:801;}s:23:"8:jvxvsbehz-rqvg-guernq";a:2:{i:0;R:17112;i:1;R:801;}s:25:"8:jvxvsbehz-qryrgr-guernq";a:2:{i:0;R:17112;i:1;R:801;}s:24:"8:jvxvsbehz-pybfr-guernq";a:2:{i:0;R:17112;i:1;R:801;}s:25:"8:jvxvsbehz-erbcra-guernq";a:2:{i:0;R:17112;i:1;R:801;}s:23:"8:jvxvsbehz-jevgr-ercyl";a:2:{i:0;R:17112;i:1;R:801;}s:22:"8:jvxvsbehz-rqvg-ercyl";a:2:{i:0;R:17112;i:1;R:801;}s:24:"8:jvxvsbehz-qryrgr-ercyl";a:2:{i:0;R:17112;i:1;R:801;}s:23:"8:jvxvsbehz-fnir-guernq";a:2:{i:0;R:17112;i:1;R:801;}s:22:"8:jvxvsbehz-fnir-ercyl";a:2:{i:0;R:17112;i:1;R:801;}s:24:"8:jvxvsbehz-guernq-gvgyr";a:2:{i:0;R:17112;i:1;R:801;}s:22:"8:jvxvsbehz-ab-guernqf";a:2:{i:0;R:17112;i:1;R:801;}s:18:"8:jvxvsbehz-cbfgrq";a:2:{i:0;R:17112;i:1;R:801;}s:18:"8:jvxvsbehz-rqvgrq";a:2:{i:0;R:17112;i:1;R:801;}s:23:"8:jvxvsbehz-pybfrq-grkg";a:2:{i:0;R:17112;i:1;R:801;}s:25:"8:jvxvsbehz-png-abg-sbhaq";a:2:{i:0;R:17112;i:1;R:801;}s:30:"8:jvxvsbehz-png-abg-sbhaq-grkg";a:2:{i:0;R:17112;i:1;R:801;}s:27:"8:jvxvsbehz-sbehz-abg-sbhaq";a:2:{i:0;R:17112;i:1;R:801;}s:32:"8:jvxvsbehz-sbehz-abg-sbhaq-grkg";a:2:{i:0;R:17112;i:1;R:801;}s:28:"8:jvxvsbehz-guernq-abg-sbhaq";a:2:{i:0;R:17112;i:1;R:801;}s:33:"8:jvxvsbehz-guernq-abg-sbhaq-grkg";a:2:{i:0;R:17112;i:1;R:801;}s:31:"8:jvxvsbehz-reebe-guernq-erbcra";a:2:{i:0;R:17112;i:1;R:801;}s:30:"8:jvxvsbehz-reebe-guernq-pybfr";a:2:{i:0;R:17112;i:1;R:801;}s:25:"8:jvxvsbehz-reebe-trareny";a:2:{i:0;R:17112;i:1;R:801;}s:27:"8:jvxvsbehz-reebe-ab-evtugf";a:2:{i:0;R:17112;i:1;R:801;}s:27:"8:jvxvsbehz-reebe-abg-sbhaq";a:2:{i:0;R:17112;i:1;R:801;}s:34:"8:jvxvsbehz-reebe-ab-grkg-be-gvgyr";a:2:{i:0;R:17112;i:1;R:801;}s:26:"8:jvxvsbehz-reebe-ab-ercyl";a:2:{i:0;R:17112;i:1;R:801;}s:29:"8:jvxvsbehz-reebe-qbhoyr-cbfg";a:2:{i:0;R:17112;i:1;R:801;}s:31:"8:jvxvsbehz-reebe-guernq-pybfrq";a:2:{i:0;R:17112;i:1;R:801;}s:24:"8:jvxvsbehz-reebe-qryrgr";a:2:{i:0;R:17112;i:1;R:801;}s:24:"8:jvxvsbehz-reebe-fgvpxl";a:2:{i:0;R:17112;i:1;R:801;}s:29:"8:jvxvsbehz-reebe-zbir-guernq";a:2:{i:0;R:17112;i:1;R:801;}s:21:"8:jvxvsbehz-reebe-nqq";a:2:{i:0;R:17112;i:1;R:801;}s:22:"8:jvxvsbehz-reebe-rqvg";a:2:{i:0;R:17112;i:1;R:801;}s:24:"8:jvxvsbehz-nqq-pngrtbel";a:2:{i:0;R:17112;i:1;R:801;}s:25:"8:jvxvsbehz-rqvg-pngrtbel";a:2:{i:0;R:17112;i:1;R:801;}s:27:"8:jvxvsbehz-qryrgr-pngrtbel";a:2:{i:0;R:17112;i:1;R:801;}s:21:"8:jvxvsbehz-nqq-sbehz";a:2:{i:0;R:17112;i:1;R:801;}s:22:"8:jvxvsbehz-rqvg-sbehz";a:2:{i:0;R:17112;i:1;R:801;}s:24:"8:jvxvsbehz-qryrgr-sbehz";a:2:{i:0;R:17112;i:1;R:801;}s:19:"8:jvxvsbehz-fbeg-hc";a:2:{i:0;R:17112;i:1;R:801;}s:21:"8:jvxvsbehz-fbeg-qbja";a:2:{i:0;R:17112;i:1;R:801;}s:25:"8:jvxvsbehz-erzbir-fgvpxl";a:2:{i:0;R:17112;i:1;R:801;}s:23:"8:jvxvsbehz-znxr-fgvpxl";a:2:{i:0;R:17112;i:1;R:801;}s:23:"8:jvxvsbehz-zbir-guernq";a:2:{i:0;R:17112;i:1;R:801;}s:24:"8:jvxvsbehz-cnfgr-guernq";a:2:{i:0;R:17112;i:1;R:801;}s:17:"8:jvxvsbehz-dhbgr";a:2:{i:0;R:17112;i:1;R:801;}s:23:"8:evtug-jvxvsbehz-nqzva";a:2:{i:0;R:17112;i:1;R:801;}s:27:"8:evtug-jvxvsbehz-zbqrengbe";a:2:{i:0;R:17112;i:1;R:801;}s:18:"8:tebhc-sbehznqzva";a:2:{i:0;R:17112;i:1;R:801;}s:25:"8:tebhc-sbehznqzva-zrzore";a:2:{i:0;R:17112;i:1;R:801;}s:22:"8:tebhccntr-sbehznqzva";a:2:{i:0;R:17112;i:1;R:801;}s:22:"8:tebhc-sbehznqzva.pff";a:2:{i:0;R:17112;i:1;R:801;}s:21:"8:tebhc-sbehznqzva.wf";a:2:{i:0;R:17112;i:1;R:801;}s:14:"8:jvxvybt-qrfp";a:2:{i:0;s:11:"ext-wikilog";i:1;R:801;}s:14:"8:jvxvybt-nhgb";a:2:{i:0;R:17202;i:1;R:801;}s:14:"8:jvxvybt-uryc";a:2:{i:0;R:17202;i:1;R:801;}s:22:"8:evtug-jy-cbfgpbzzrag";a:2:{i:0;R:17202;i:1;R:801;}s:21:"8:evtug-jy-zbqrengvba";a:2:{i:0;R:17202;i:1;R:801;}s:30:"8:jvxvybt-fcrpvnyjvxvybt-gvgyr";a:2:{i:0;R:17202;i:1;R:801;}s:22:"8:jvxvybt-ybt-cntranzr";a:2:{i:0;R:17202;i:1;R:801;}s:22:"8:jvxvybt-ybt-cntrgrkg";a:2:{i:0;R:17202;i:1;R:801;}s:25:"8:jvxvybt-ybt-pzg-nccebir";a:2:{i:0;R:17202;i:1;R:801;}s:24:"8:jvxvybt-ybt-pzg-erwrpg";a:2:{i:0;R:17202;i:1;R:801;}s:24:"8:jvxvybt-ybt-pzg-erwqry";a:2:{i:0;R:17202;i:1;R:801;}s:13:"8:jvxvybt-gno";a:2:{i:0;R:17202;i:1;R:801;}s:19:"8:jvxvybt-gno-gvgyr";a:2:{i:0;R:17202;i:1;R:801;}s:25:"8:jvxvybt-zvffvat-jvxvybt";a:2:{i:0;R:17202;i:1;R:801;}s:21:"8:jvxvybt-vasbezngvba";a:2:{i:0;R:17202;i:1;R:801;}s:30:"8:jvxvybt-cbfg-pbhag-choyvfurq";a:2:{i:0;R:17202;i:1;R:801;}s:27:"8:jvxvybt-cbfg-pbhag-qensgf";a:2:{i:0;R:17202;i:1;R:801;}s:24:"8:jvxvybt-cbfg-pbhag-nyy";a:2:{i:0;R:17202;i:1;R:801;}s:18:"8:jvxvybt-arj-vgrz";a:2:{i:0;R:17202;i:1;R:801;}s:21:"8:jvxvybt-arj-vgrz-tb";a:2:{i:0;R:17202;i:1;R:801;}s:19:"8:jvxvybt-vgrz-anzr";a:2:{i:0;R:17202;i:1;R:801;}s:19:"8:jvxvybt-choyvfurq";a:2:{i:0;R:17202;i:1;R:801;}s:17:"8:jvxvybt-hcqngrq";a:2:{i:0;R:17202;i:1;R:801;}s:15:"8:jvxvybt-qensg";a:2:{i:0;R:17202;i:1;R:801;}s:17:"8:jvxvybt-nhgubef";a:2:{i:0;R:17202;i:1;R:801;}s:17:"8:jvxvybt-jvxvybt";a:2:{i:0;R:17202;i:1;R:801;}s:15:"8:jvxvybt-gvgyr";a:2:{i:0;R:17202;i:1;R:801;}s:17:"8:jvxvybt-npgvbaf";a:2:{i:0;R:17202;i:1;R:801;}s:18:"8:jvxvybt-pbzzragf";a:2:{i:0;R:17202;i:1;R:801;}s:17:"8:jvxvybt-ercyvrf";a:2:{i:0;R:17202;i:1;R:801;}s:23:"8:jvxvybt-ivrj-nepuvirf";a:2:{i:0;R:17202;i:1;R:801;}s:22:"8:jvxvybt-ivrj-fhzznel";a:2:{i:0;R:17202;i:1;R:801;}s:26:"8:jvxvybt-qensg-gvgyr-znex";a:2:{i:0;R:17202;i:1;R:801;}s:24:"8:jvxvybt-nabalzbhf-znex";a:2:{i:0;R:17202;i:1;R:801;}s:22:"8:jvxvybt-cntre-arjrfg";a:2:{i:0;R:17202;i:1;R:801;}s:22:"8:jvxvybt-cntre-byqrfg";a:2:{i:0;R:17202;i:1;R:801;}s:20:"8:jvxvybt-cntre-ceri";a:2:{i:0;R:17202;i:1;R:801;}s:20:"8:jvxvybt-cntre-arkg";a:2:{i:0;R:17202;i:1;R:801;}s:21:"8:jvxvybt-cntre-svefg";a:2:{i:0;R:17202;i:1;R:801;}s:20:"8:jvxvybt-cntre-ynfg";a:2:{i:0;R:17202;i:1;R:801;}s:21:"8:jvxvybt-cntre-rzcgl";a:2:{i:0;R:17202;i:1;R:801;}s:21:"8:jvxvybt-ab-pbzzragf";a:2:{i:0;R:17202;i:1;R:801;}s:22:"8:jvxvybt-unf-pbzzragf";a:2:{i:0;R:17202;i:1;R:801;}s:24:"8:jvxvybt-fhzznel-urnqre";a:2:{i:0;R:17202;i:1;R:801;}s:24:"8:jvxvybt-fhzznel-sbbgre";a:2:{i:0;R:17202;i:1;R:801;}s:31:"8:jvxvybt-fhzznel-urnqre-fvatyr";a:2:{i:0;R:17202;i:1;R:801;}s:31:"8:jvxvybt-fhzznel-sbbgre-fvatyr";a:2:{i:0;R:17202;i:1;R:801;}s:31:"8:jvxvybt-fhzznel-hapngrtbevmrq";a:2:{i:0;R:17202;i:1;R:801;}s:28:"8:jvxvybt-fhzznel-pngrtbevrf";a:2:{i:0;R:17202;i:1;R:801;}s:22:"8:jvxvybt-fhzznel-zber";a:2:{i:0;R:17202;i:1;R:801;}s:19:"8:jvxvybt-ragel-fho";a:2:{i:0;R:17202;i:1;R:801;}s:22:"8:jvxvybt-ragel-urnqre";a:2:{i:0;R:17202;i:1;R:801;}s:22:"8:jvxvybt-ragel-sbbgre";a:2:{i:0;R:17202;i:1;R:801;}s:26:"8:jvxvybt-nhgube-fvtangher";a:2:{i:0;R:17202;i:1;R:801;}s:26:"8:jvxvybt-fvzcyr-fvtangher";a:2:{i:0;R:17202;i:1;R:801;}s:19:"8:jvxvybt-rqvg-uvag";a:2:{i:0;R:17202;i:1;R:801;}s:30:"8:jvxvybt-rqvg-svryqfrg-yrtraq";a:2:{i:0;R:17202;i:1;R:801;}s:22:"8:jvxvybt-rqvg-fvtacho";a:2:{i:0;R:17202;i:1;R:801;}s:30:"8:jvxvybt-rqvg-fvtacho-gbbygvc";a:2:{i:0;R:17202;i:1;R:801;}s:24:"8:jvxvybt-pbzzrag-urnqre";a:2:{i:0;R:17202;i:1;R:801;}s:24:"8:jvxvybt-pbzzrag-sbbgre";a:2:{i:0;R:17202;i:1;R:801;}s:27:"8:jvxvybt-pbzzrag-creznyvax";a:2:{i:0;R:17202;i:1;R:801;}s:27:"8:jvxvybt-pbzzrag-abgr-vgrz";a:2:{i:0;R:17202;i:1;R:801;}s:29:"8:jvxvybt-pbzzrag-abgr-rqvgrq";a:2:{i:0;R:17202;i:1;R:801;}s:25:"8:jvxvybt-pbzzrag-nabafvt";a:2:{i:0;R:17202;i:1;R:801;}s:25:"8:jvxvybt-pbzzrag-craqvat";a:2:{i:0;R:17202;i:1;R:801;}s:25:"8:jvxvybt-pbzzrag-qryrgrq";a:2:{i:0;R:17202;i:1;R:801;}s:27:"8:jvxvybt-pbzzrag-bzvggrq-k";a:2:{i:0;R:17202;i:1;R:801;}s:26:"8:jvxvybt-pbzzrag-nhgbfhzz";a:2:{i:0;R:17202;i:1;R:801;}s:26:"8:jvxvybt-ercyl-gb-pbzzrag";a:2:{i:0;R:17202;i:1;R:801;}s:22:"8:jvxvybt-pbzzrag-cntr";a:2:{i:0;R:17202;i:1;R:801;}s:22:"8:jvxvybt-pbzzrag-rqvg";a:2:{i:0;R:17202;i:1;R:801;}s:24:"8:jvxvybt-pbzzrag-qryrgr";a:2:{i:0;R:17202;i:1;R:801;}s:25:"8:jvxvybt-pbzzrag-uvfgbel";a:2:{i:0;R:17202;i:1;R:801;}s:25:"8:jvxvybt-pbzzrag-nccebir";a:2:{i:0;R:17202;i:1;R:801;}s:24:"8:jvxvybt-pbzzrag-erwrpg";a:2:{i:0;R:17202;i:1;R:801;}s:22:"8:jvxvybt-arjgnyx-grkg";a:2:{i:0;R:17202;i:1;R:801;}s:25:"8:jvxvybt-arjgnyx-fhzznel";a:2:{i:0;R:17202;i:1;R:801;}s:20:"8:jvxvybt-srrq-gvgyr";a:2:{i:0;R:17202;i:1;R:801;}s:23:"8:jvxvybt-srrq-af-gvgyr";a:2:{i:0;R:17202;i:1;R:801;}s:26:"8:jvxvybt-srrq-qrfpevcgvba";a:2:{i:0;R:17202;i:1;R:801;}s:29:"8:jvxvybt-pbzzrag-srrq-gvgyr1";a:2:{i:0;R:17202;i:1;R:801;}s:29:"8:jvxvybt-pbzzrag-srrq-gvgyr2";a:2:{i:0;R:17202;i:1;R:801;}s:34:"8:jvxvybt-pbzzrag-srrq-qrfpevcgvba";a:2:{i:0;R:17202;i:1;R:801;}s:25:"8:jvxvybt-gvgyr-vgrz-shyy";a:2:{i:0;R:17202;i:1;R:801;}s:24:"8:jvxvybt-gvgyr-pbzzragf";a:2:{i:0;R:17202;i:1;R:801;}s:19:"8:jvxvybt-reebe-zft";a:2:{i:0;R:17202;i:1;R:801;}s:21:"8:jvxvybt-reebe-gvgyr";a:2:{i:0;R:17202;i:1;R:801;}s:23:"8:jvxvybt-vainyvq-cnenz";a:2:{i:0;R:17202;i:1;R:801;}s:24:"8:jvxvybt-vainyvq-nhgube";a:2:{i:0;R:17202;i:1;R:801;}s:22:"8:jvxvybt-vainyvq-qngr";a:2:{i:0;R:17202;i:1;R:801;}s:21:"8:jvxvybt-vainyvq-gnt";a:2:{i:0;R:17202;i:1;R:801;}s:22:"8:jvxvybt-vainyvq-svyr";a:2:{i:0;R:17202;i:1;R:801;}s:24:"8:jvxvybt-svyr-abg-sbhaq";a:2:{i:0;R:17202;i:1;R:801;}s:22:"8:jvxvybt-abg-na-vzntr";a:2:{i:0;R:17202;i:1;R:801;}s:24:"8:jvxvybt-bhg-bs-pbagrkg";a:2:{i:0;R:17202;i:1;R:801;}s:26:"8:jvxvybt-gbb-znal-nhgubef";a:2:{i:0;R:17202;i:1;R:801;}s:23:"8:jvxvybt-gbb-znal-gntf";a:2:{i:0;R:17202;i:1;R:801;}s:26:"8:jvxvybt-pbzzrag-vf-rzcgl";a:2:{i:0;R:17202;i:1;R:801;}s:26:"8:jvxvybt-pbzzrag-gbb-ybat";a:2:{i:0;R:17202;i:1;R:801;}s:30:"8:jvxvybt-pbzzrag-vainyvq-anzr";a:2:{i:0;R:17202;i:1;R:801;}s:25:"8:jvxvybt-ab-fhpu-negvpyr";a:2:{i:0;R:17202;i:1;R:801;}s:23:"8:jvxvybt-ernqvat-qensg";a:2:{i:0;R:17202;i:1;R:801;}s:29:"8:jvxvybt-cbfgvat-nabalzbhfyl";a:2:{i:0;R:17202;i:1;R:801;}s:29:"8:jvxvybt-nabalzbhf-zbqrengrq";a:2:{i:0;R:17202;i:1;R:801;}s:22:"8:jvxvybt-cbfg-pbzzrag";a:2:{i:0;R:17202;i:1;R:801;}s:20:"8:jvxvybt-cbfg-ercyl";a:2:{i:0;R:17202;i:1;R:801;}s:21:"8:jvxvybt-sbez-yrtraq";a:2:{i:0;R:17202;i:1;R:801;}s:22:"8:jvxvybt-sbez-jvxvybt";a:2:{i:0;R:17202;i:1;R:801;}s:23:"8:jvxvybt-sbez-pngrtbel";a:2:{i:0;R:17202;i:1;R:801;}s:19:"8:jvxvybt-sbez-anzr";a:2:{i:0;R:17202;i:1;R:801;}s:21:"8:jvxvybt-sbez-nhgube";a:2:{i:0;R:17202;i:1;R:801;}s:18:"8:jvxvybt-sbez-gnt";a:2:{i:0;R:17202;i:1;R:801;}s:19:"8:jvxvybt-sbez-qngr";a:2:{i:0;R:17202;i:1;R:801;}s:21:"8:jvxvybt-sbez-fgnghf";a:2:{i:0;R:17202;i:1;R:801;}s:22:"8:jvxvybt-sbez-cerivrj";a:2:{i:0;R:17202;i:1;R:801;}s:22:"8:jvxvybt-sbez-pbzzrag";a:2:{i:0;R:17202;i:1;R:801;}s:18:"8:jvxvybt-fubj-nyy";a:2:{i:0;R:17202;i:1;R:801;}s:24:"8:jvxvybt-fubj-choyvfurq";a:2:{i:0;R:17202;i:1;R:801;}s:21:"8:jvxvybt-fubj-qensgf";a:2:{i:0;R:17202;i:1;R:801;}s:16:"8:jvxvybt-fhozvg";a:2:{i:0;R:17202;i:1;R:801;}s:17:"8:jvxvybt-cerivrj";a:2:{i:0;R:17202;i:1;R:801;}s:17:"8:jvxvybt-rqvg-yp";a:2:{i:0;R:17202;i:1;R:801;}s:18:"8:jvxvybt-ercyl-yp";a:2:{i:0;R:17202;i:1;R:801;}s:19:"8:jvxvybt-qryrgr-yp";a:2:{i:0;R:17202;i:1;R:801;}s:20:"8:jvxvybt-nccebir-yp";a:2:{i:0;R:17202;i:1;R:801;}s:19:"8:jvxvybt-erwrpg-yp";a:2:{i:0;R:17202;i:1;R:801;}s:17:"8:jvxvybt-cntr-yp";a:2:{i:0;R:17202;i:1;R:801;}s:20:"8:jvxvybt-uvfgbel-yp";a:2:{i:0;R:17202;i:1;R:801;}s:28:"8:jvxvybt-qbp-vzcbeg-pbzzrag";a:2:{i:0;R:17202;i:1;R:801;}s:17:"8:jvxvybt-fhzznel";a:2:{i:0;R:17202;i:1;R:801;}s:18:"8:jvxvybt-onpxyvax";a:2:{i:0;R:17202;i:1;R:801;}s:18:"8:jvxvybt-oenpxrgf";a:2:{i:0;R:17202;i:1;R:801;}s:13:"8:jysrrq-qrfp";a:2:{i:0;s:15:"ext-wikilogfeed";i:1;R:801;}s:25:"8:jz-yvprafr-pp-jvxv-yvax";a:2:{i:0;s:40:"ext-wikimediacreativecommonslicensetexts";i:1;R:801;}s:27:"8:jz-yvprafr-pp-nggevohgvba";a:2:{i:0;R:17338;i:1;R:801;}s:27:"8:jz-yvprafr-pp-ol-1.0-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-1.0-sv-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-1.0-vy-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-1.0-ay-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:27:"8:jz-yvprafr-pp-ol-2.0-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.0-ng-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.0-nh-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.0-or-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.0-oe-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.0-pn-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.0-py-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.0-qr-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.0-rf-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.0-se-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.0-ue-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.0-vg-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.0-wc-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.0-xe-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.0-ay-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.0-cy-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.0-gj-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.0-hx-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.0-mn-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.1-nh-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.1-rf-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.1-wc-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:27:"8:jz-yvprafr-pp-ol-2.5-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.5-ne-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.5-nh-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.5-ot-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.5-oe-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.5-pn-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.5-pu-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.5-pa-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.5-pb-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.5-qx-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.5-rf-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.5-ue-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.5-uh-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.5-vy-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.5-va-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.5-vg-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.5-zx-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.5-zg-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.5-zk-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.5-zl-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.5-ay-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.5-cr-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.5-cy-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.5-cg-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:36:"8:jz-yvprafr-pp-ol-2.5-fpbgynaq-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.5-fr-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.5-fv-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.5-gj-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-2.5-mn-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:27:"8:jz-yvprafr-pp-ol-3.0-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:39:"8:jz-yvprafr-pp-ol-3.0-2.5-2.0-1.0-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-3.0-ng-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-3.0-nh-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-3.0-oe-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-3.0-py-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-3.0-pe-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-3.0-pm-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-3.0-qr-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-3.0-rp-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-3.0-rr-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-3.0-rf-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-3.0-te-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-3.0-tg-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-3.0-ue-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-3.0-ux-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-3.0-vg-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-3.0-yh-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-3.0-ay-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-3.0-ab-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-3.0-am-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-3.0-cu-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-3.0-cy-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-3.0-ce-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-3.0-eb-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-3.0-ef-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-3.0-ft-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-3.0-gu-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-3.0-gj-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-3.0-hf-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-fn-1.0-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-1.0-sv-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-1.0-vy-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-1.0-ay-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-fn-2.0-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.0-ng-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.0-nh-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.0-or-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.0-oe-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.0-pn-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.0-py-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.0-qr-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.0-rf-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.0-se-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.0-ue-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.0-vg-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.0-wc-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.0-xe-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.0-ay-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.0-cy-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.0-gj-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.0-hx-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.0-mn-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.1-nh-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.1-rf-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.1-wc-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-fn-2.5-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:38:"8:jz-yvprafr-pp-ol-fn-2.5-2.0-1.0-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.5-ne-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.5-nh-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.5-ot-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.5-oe-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.5-pn-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.5-pu-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.5-pa-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.5-pb-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.5-qx-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.5-rf-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.5-ue-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.5-uh-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.5-vy-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.5-va-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.5-vg-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.5-zx-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.5-zg-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.5-zk-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.5-zl-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.5-ay-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.5-cr-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.5-cy-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.5-cg-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:39:"8:jz-yvprafr-pp-ol-fn-2.5-fpbgynaq-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.5-fr-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.5-fv-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.5-gj-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-2.5-mn-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-ol-fn-3.0-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:42:"8:jz-yvprafr-pp-ol-fn-3.0-2.5-2.0-1.0-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-3.0-ng-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-3.0-nh-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-3.0-oe-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-3.0-py-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-3.0-pe-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-3.0-pm-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-3.0-qr-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-3.0-rp-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-3.0-rr-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-3.0-rf-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-3.0-te-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-3.0-tg-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-3.0-ux-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-3.0-ue-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-3.0-vg-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-3.0-yh-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-3.0-ay-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-3.0-ab-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-3.0-am-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-3.0-cu-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-3.0-cy-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-3.0-ce-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-3.0-eb-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-3.0-ef-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-3.0-ft-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-3.0-gu-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-3.0-gj-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:33:"8:jz-yvprafr-pp-ol-fn-3.0-hf-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:27:"8:jz-yvprafr-pp-fn-1.0-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-fn-1.0-sv-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-fn-1.0-ay-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:30:"8:jz-yvprafr-pp-fn-2.0-wc-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:25:"8:jz-yvprafr-pp-mreb-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:32:"8:jz-yvprafr-pp-mreb-rkcynangvba";a:2:{i:0;R:17338;i:1;R:801;}s:20:"8:jz-yvprafr-pp-serr";a:2:{i:0;R:17338;i:1;R:801;}s:36:"8:jz-yvprafr-pp-serr-gb-funer-urnqre";a:2:{i:0;R:17338;i:1;R:801;}s:34:"8:jz-yvprafr-pp-serr-gb-funer-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:36:"8:jz-yvprafr-pp-serr-gb-erzvk-urnqre";a:2:{i:0;R:17338;i:1;R:801;}s:34:"8:jz-yvprafr-pp-serr-gb-erzvk-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:26:"8:jz-yvprafr-pp-pbaqvgvbaf";a:2:{i:0;R:17338;i:1;R:801;}s:45:"8:jz-yvprafr-pp-pbaqvgvbaf-nggevohgvba-urnqre";a:2:{i:0;R:17338;i:1;R:801;}s:43:"8:jz-yvprafr-pp-pbaqvgvbaf-nggevohgvba-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:45:"8:jz-yvprafr-pp-pbaqvgvbaf-funer_nyvxr-urnqre";a:2:{i:0;R:17338;i:1;R:801;}s:43:"8:jz-yvprafr-pp-pbaqvgvbaf-funer_nyvxr-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:28:"8:jz-yvprafr-pp-cq-znex-yvax";a:2:{i:0;R:17338;i:1;R:801;}s:28:"8:jz-yvprafr-pp-cq-znex-grkg";a:2:{i:0;R:17338;i:1;R:801;}s:14:"8:bowrpgrqvgbe";a:2:{i:0;s:19:"ext-wikiobjectmodel";i:1;R:801;}s:12:"8:jbz_rqvgbe";a:2:{i:0;R:17530;i:1;R:801;}s:10:"8:jbz-qrfp";a:2:{i:0;R:17530;i:1;R:801;}s:10:"8:jvxvflap";a:2:{i:0;s:12:"ext-wikisync";i:1;R:801;}s:15:"8:jvxvflap-qrfp";a:2:{i:0;R:17534;i:1;R:801;}s:20:"8:jvxvflap_qverpgvba";a:2:{i:0;R:17534;i:1;R:801;}s:21:"8:jvxvflap_ybpny_ebbg";a:2:{i:0;R:17534;i:1;R:801;}s:22:"8:jvxvflap_erzbgr_ebbg";a:2:{i:0;R:17534;i:1;R:801;}s:21:"8:jvxvflap_erzbgr_ybt";a:2:{i:0;R:17534;i:1;R:801;}s:20:"8:jvxvflap_pyrne_ybt";a:2:{i:0;R:17534;i:1;R:801;}s:31:"8:jvxvflap_ybtva_gb_erzbgr_jvxv";a:2:{i:0;R:17534;i:1;R:801;}s:27:"8:jvxvflap_erzbgr_jvxv_ebbg";a:2:{i:0;R:17534;i:1;R:801;}s:30:"8:jvxvflap_erzbgr_jvxv_rknzcyr";a:2:{i:0;R:17534;i:1;R:801;}s:27:"8:jvxvflap_erzbgr_jvxv_hfre";a:2:{i:0;R:17534;i:1;R:801;}s:27:"8:jvxvflap_erzbgr_jvxv_cnff";a:2:{i:0;R:17534;i:1;R:801;}s:30:"8:jvxvflap_erzbgr_ybtva_ohggba";a:2:{i:0;R:17534;i:1;R:801;}s:21:"8:jvxvflap_flap_svyrf";a:2:{i:0;R:17534;i:1;R:801;}s:25:"8:jvxvflap_fgber_cnffjbeq";a:2:{i:0;R:17534;i:1;R:801;}s:35:"8:jvxvflap_fgbevat_cnffjbeq_jneavat";a:2:{i:0;R:17534;i:1;R:801;}s:33:"8:jvxvflap_flapuebavmngvba_ohggba";a:2:{i:0;R:17534;i:1;R:801;}s:24:"8:jvxvflap_fpurqhyre_ybt";a:2:{i:0;R:17534;i:1;R:801;}s:26:"8:jvxvflap_fpurqhyre_frghc";a:2:{i:0;R:17534;i:1;R:801;}s:28:"8:jvxvflap_fpurqhyre_ghea_ba";a:2:{i:0;R:17534;i:1;R:801;}s:37:"8:jvxvflap_fpurqhyre_fjvgpu_qverpgvba";a:2:{i:0;R:17534;i:1;R:801;}s:34:"8:jvxvflap_fpurqhyre_gvzr_vagreiny";a:2:{i:0;R:17534;i:1;R:801;}s:23:"8:jvxvflap_nccyl_ohggba";a:2:{i:0;R:17534;i:1;R:801;}s:26:"8:jvxvflap_ybt_vzcbegrq_ol";a:2:{i:0;R:17534;i:1;R:801;}s:26:"8:jvxvflap_ybt_hcybnqrq_ol";a:2:{i:0;R:17534;i:1;R:801;}s:27:"8:jvxvflap_hafhccbegrq_hfre";a:2:{i:0;R:17534;i:1;R:801;}s:36:"8:jvxvflap_ncv_erfhyg_haxabja_npgvba";a:2:{i:0;R:17534;i:1;R:801;}s:31:"8:jvxvflap_ncv_erfhyg_rkprcgvba";a:2:{i:0;R:17534;i:1;R:801;}s:30:"8:jvxvflap_ncv_erfhyg_abnpprff";a:2:{i:0;R:17534;i:1;R:801;}s:39:"8:jvxvflap_ncv_erfhyg_vainyvq_cnenzrgre";a:2:{i:0;R:17534;i:1;R:801;}s:26:"8:jvxvflap_ncv_erfhyg_uggc";a:2:{i:0;R:17534;i:1;R:801;}s:33:"8:jvxvflap_ncv_erfhyg_hafhccbegrq";a:2:{i:0;R:17534;i:1;R:801;}s:28:"8:jvxvflap_ncv_erfhyg_abanzr";a:2:{i:0;R:17534;i:1;R:801;}s:29:"8:jvxvflap_ncv_erfhyg_vyyrtny";a:2:{i:0;R:17534;i:1;R:801;}s:31:"8:jvxvflap_ncv_erfhyg_abgrkvfgf";a:2:{i:0;R:17534;i:1;R:801;}s:31:"8:jvxvflap_ncv_erfhyg_rzcglcnff";a:2:{i:0;R:17534;i:1;R:801;}s:31:"8:jvxvflap_ncv_erfhyg_jebatcnff";a:2:{i:0;R:17534;i:1;R:801;}s:37:"8:jvxvflap_ncv_erfhyg_jebatcyhtvacnff";a:2:{i:0;R:17534;i:1;R:801;}s:35:"8:jvxvflap_ncv_erfhyg_perngroybpxrq";a:2:{i:0;R:17534;i:1;R:801;}s:31:"8:jvxvflap_ncv_erfhyg_guebggyrq";a:2:{i:0;R:17534;i:1;R:801;}s:29:"8:jvxvflap_ncv_erfhyg_oybpxrq";a:2:{i:0;R:17534;i:1;R:801;}s:34:"8:jvxvflap_ncv_erfhyg_zhfgorcbfgrq";a:2:{i:0;R:17534;i:1;R:801;}s:31:"8:jvxvflap_ncv_erfhyg_arrqgbxra";a:2:{i:0;R:17534;i:1;R:801;}s:38:"8:jvxvflap_ncv_erfhyg_ab_vzcbeg_evtugf";a:2:{i:0;R:17534;i:1;R:801;}s:29:"8:jvxvflap_ncv_erfhyg_fhpprff";a:2:{i:0;R:17534;i:1;R:801;}s:27:"8:jvxvflap_wf_ynfg_bc_reebe";a:2:{i:0;R:17534;i:1;R:801;}s:42:"8:jvxvflap_wf_flapuebavmngvba_pbasvezngvba";a:2:{i:0;R:17534;i:1;R:801;}s:37:"8:jvxvflap_wf_flapuebavmngvba_fhpprff";a:2:{i:0;R:17534;i:1;R:801;}s:34:"8:jvxvflap_wf_nyernql_flapuebavmrq";a:2:{i:0;R:17534;i:1;R:801;}s:28:"8:jvxvflap_wf_flap_gb_vgfrys";a:2:{i:0;R:17534;i:1;R:801;}s:25:"8:jvxvflap_wf_qvss_frnepu";a:2:{i:0;R:17534;i:1;R:801;}s:22:"8:jvxvflap_wf_erivfvba";a:2:{i:0;R:17534;i:1;R:801;}s:32:"8:jvxvflap_wf_svyr_fvmr_zvfzngpu";a:2:{i:0;R:17534;i:1;R:801;}s:36:"8:jvxvflap_wf_vainyvq_fpurqhyre_gvzr";a:2:{i:0;R:17534;i:1;R:801;}s:33:"8:jvxvflap_wf_fpurqhyre_pbhagqbja";a:2:{i:0;R:17534;i:1;R:801;}s:28:"8:jvxvflap_wf_flap_fgneg_yge";a:2:{i:0;R:17534;i:1;R:801;}s:28:"8:jvxvflap_wf_flap_fgneg_egy";a:2:{i:0;R:17534;i:1;R:801;}s:26:"8:jvxvflap_wf_flap_raq_yge";a:2:{i:0;R:17534;i:1;R:801;}s:26:"8:jvxvflap_wf_flap_raq_egy";a:2:{i:0;R:17534;i:1;R:801;}s:26:"8:jvxvgrkgybttrqvabhg-qrfp";a:2:{i:0;s:23:"ext-wikitextloggedinout";i:1;R:801;}s:16:"8:jvxvgjrrg-qrfp";a:2:{i:0;s:13:"ext-wikitweet";i:1;R:801;}s:16:"8:jvxvgjrrg-anzr";a:2:{i:0;R:17596;i:1;R:801;}s:23:"8:jvxvgjrrg-cyrnfrybtva";a:2:{i:0;R:17596;i:1;R:801;}s:22:"8:jvxvgjrrg-zbergjrrgf";a:2:{i:0;R:17596;i:1;R:801;}s:20:"8:jvxvgjrrg-vasbnwnk";a:2:{i:0;R:17596;i:1;R:801;}s:18:"8:jvxvgjrrg-fhozvg";a:2:{i:0;R:17596;i:1;R:801;}s:25:"8:jvxvgjrrg-fhozvgnaqznvy";a:2:{i:0;R:17596;i:1;R:801;}s:21:"8:jvxvgjrrg-vagurebbz";a:2:{i:0;R:17596;i:1;R:801;}s:21:"8:jvxvgjrrg-fhofpevor";a:2:{i:0;R:17596;i:1;R:801;}s:22:"8:jvxvgjrrg-fhofpevorq";a:2:{i:0;R:17596;i:1;R:801;}s:23:"8:jvxvgjrrg-hafhofpevor";a:2:{i:0;R:17596;i:1;R:801;}s:18:"8:jvxvgjrrg-qryrgr";a:2:{i:0;R:17596;i:1;R:801;}s:18:"8:jvxvgjrrg-vasbez";a:2:{i:0;R:17596;i:1;R:801;}s:19:"8:jvxvgjrrg-cevingr";a:2:{i:0;R:17596;i:1;R:801;}s:18:"8:jvxvgjrrg-nafjre";a:2:{i:0;R:17596;i:1;R:801;}s:21:"8:jvxvgjrrg-nabalzbhf";a:2:{i:0;R:17596;i:1;R:801;}s:25:"8:jvxvgjrrg-gjrrgf-gnttrq";a:2:{i:0;R:17596;i:1;R:801;}s:25:"8:jvxvgjrrg-onpx-gvzryvar";a:2:{i:0;R:17596;i:1;R:801;}s:28:"8:jvxvgjrrg-gjrrgf-sebz-ebbz";a:2:{i:0;R:17596;i:1;R:801;}s:19:"8:jvxvgjrrg-gvzrntb";a:2:{i:0;R:17596;i:1;R:801;}s:23:"8:jvxvgjrrg-vagurshgher";a:2:{i:0;R:17596;i:1;R:801;}s:25:"8:jvxvgjrrg-srjfrpbaqfntb";a:2:{i:0;R:17596;i:1;R:801;}s:18:"8:jvxvgjrrg-fgnghf";a:2:{i:0;R:17596;i:1;R:801;}s:19:"8:jvxvgjrrg-fgnghf0";a:2:{i:0;R:17596;i:1;R:801;}s:19:"8:jvxvgjrrg-fgnghf1";a:2:{i:0;R:17596;i:1;R:801;}s:19:"8:jvxvgjrrg-fgnghf2";a:2:{i:0;R:17596;i:1;R:801;}s:19:"8:jvxvgjrrg-fgnghf3";a:2:{i:0;R:17596;i:1;R:801;}s:19:"8:jvxvgjrrg-erfbyir";a:2:{i:0;R:17596;i:1;R:801;}s:20:"8:jvxvgjrrg-pbapreaf";a:2:{i:0;R:17596;i:1;R:801;}s:19:"8:jvxvgjrrg-pbzzrag";a:2:{i:0;R:17596;i:1;R:801;}s:23:"8:jvxvgjrrg-fhofpevoref";a:2:{i:0;R:17596;i:1;R:801;}s:18:"8:jvxvgjrrg-ubheyl";a:2:{i:0;R:17596;i:1;R:801;}s:21:"8:jvxvgjrrg-crecrefba";a:2:{i:0;R:17596;i:1;R:801;}s:24:"8:jvxvgjrrg-vaerfcbafrgb";a:2:{i:0;R:17596;i:1;R:801;}s:16:"8:jvxvgjrrg-sebz";a:2:{i:0;R:17596;i:1;R:801;}s:14:"8:jvxvgjrrg-va";a:2:{i:0;R:17596;i:1;R:801;}s:22:"8:jvxvgjrrg-qverpgyvax";a:2:{i:0;R:17596;i:1;R:801;}s:20:"8:jvxvgjrrg-znvyfrag";a:2:{i:0;R:17596;i:1;R:801;}s:19:"8:jvxvgjrrg-ivnebbz";a:2:{i:0;R:17596;i:1;R:801;}s:23:"8:jvxvgjrrg-nyregfbyirq";a:2:{i:0;R:17596;i:1;R:801;}s:23:"8:jvxvgjrrg-pnaabgcnefr";a:2:{i:0;R:17596;i:1;R:801;}s:22:"8:jvaqbjfnmherfqx-qrfp";a:2:{i:0;s:19:"ext-windowsazuresdk";i:1;R:801;}s:26:"8:jvaqbjfnmherfgbentr-qrfp";a:2:{i:0;s:23:"ext-windowsazurestorage";i:1;R:801;}s:13:"8:jbbcen-qrfp";a:2:{i:0;s:10:"ext-woopra";i:1;R:801;}s:12:"8:kzyep-qrfp";a:2:{i:0;s:9:"ext-xmlrc";i:1;R:801;}s:14:"8:lbhghor-qrfp";a:2:{i:0;s:11:"ext-youtube";i:1;R:801;}s:16:"8:lbhghornhgufho";a:2:{i:0;s:18:"ext-youtubeauthsub";i:1;R:801;}s:21:"8:lbhghornhgufho-qrfp";a:2:{i:0;R:17648;i:1;R:801;}s:21:"8:lbhghornhgufho_vasb";a:2:{i:0;R:17648;i:1;R:801;}s:22:"8:lbhghornhgufho_gvgyr";a:2:{i:0;R:17648;i:1;R:801;}s:28:"8:lbhghornhgufho_qrfpevcgvba";a:2:{i:0;R:17648;i:1;R:801;}s:25:"8:lbhghornhgufho_cnffjbeq";a:2:{i:0;R:17648;i:1;R:801;}s:25:"8:lbhghornhgufho_hfreanzr";a:2:{i:0;R:17648;i:1;R:801;}s:25:"8:lbhghornhgufho_xrljbeqf";a:2:{i:0;R:17648;i:1;R:801;}s:25:"8:lbhghornhgufho_pngrtbel";a:2:{i:0;R:17648;i:1;R:801;}s:23:"8:lbhghornhgufho_fhozvg";a:2:{i:0;R:17648;i:1;R:801;}s:26:"8:lbhghornhgufho_pyvpxurer";a:2:{i:0;R:17648;i:1;R:801;}s:27:"8:lbhghornhgufho_gbxrareebe";a:2:{i:0;R:17648;i:1;R:801;}s:24:"8:lbhghornhgufho_fhpprff";a:2:{i:0;R:17648;i:1;R:801;}s:36:"8:lbhghornhgufho_nhgufhovafgehpgvbaf";a:2:{i:0;R:17648;i:1;R:801;}s:27:"8:lbhghornhgufho_hcybnqurer";a:2:{i:0;R:17648;i:1;R:801;}s:29:"8:lbhghornhgufho_hcybnqohggba";a:2:{i:0;R:17648;i:1;R:801;}s:21:"8:lbhghornhgufho_pbqr";a:2:{i:0;R:17648;i:1;R:801;}s:24:"8:lbhghornhgufho_fhzznel";a:2:{i:0;R:17648;i:1;R:801;}s:26:"8:lbhghornhgufho_hcybnqvat";a:2:{i:0;R:17648;i:1;R:801;}s:25:"8:lbhghornhgufho_ivrjcntr";a:2:{i:0;R:17648;i:1;R:801;}s:35:"8:lbhghornhgufho_wfreebe_abxrljbeqf";a:2:{i:0;R:17648;i:1;R:801;}s:32:"8:lbhghornhgufho_wfreebe_abgvgyr";a:2:{i:0;R:17648;i:1;R:801;}s:31:"8:lbhghornhgufho_wfreebe_abqrfp";a:2:{i:0;R:17648;i:1;R:801;}s:55:"1242:qngnonfr-genafyngrq_npgvivgvrf-anzr-npgvivgl_vq-19";a:2:{i:0;s:16:"out-eol-database";i:1;s:13:"out-eol-0-all";}s:55:"1242:qngnonfr-genafyngrq_npgvivgvrf-anzr-npgvivgl_vq-50";a:2:{i:0;R:17672;i:1;R:17673;}s:55:"1242:qngnonfr-genafyngrq_npgvivgvrf-anzr-npgvivgl_vq-51";a:2:{i:0;R:17672;i:1;R:17673;}s:55:"1242:qngnonfr-genafyngrq_npgvivgvrf-anzr-npgvivgl_vq-52";a:2:{i:0;R:17672;i:1;R:17673;}s:55:"1242:qngnonfr-genafyngrq_npgvivgvrf-anzr-npgvivgl_vq-53";a:2:{i:0;R:17672;i:1;R:17673;}s:55:"1242:qngnonfr-genafyngrq_npgvivgvrf-anzr-npgvivgl_vq-54";a:2:{i:0;R:17672;i:1;R:17673;}s:55:"1242:qngnonfr-genafyngrq_npgvivgvrf-anzr-npgvivgl_vq-55";a:2:{i:0;R:17672;i:1;R:17673;}s:55:"1242:qngnonfr-genafyngrq_npgvivgvrf-anzr-npgvivgl_vq-56";a:2:{i:0;R:17672;i:1;R:17673;}s:55:"1242:qngnonfr-genafyngrq_npgvivgvrf-anzr-npgvivgl_vq-57";a:2:{i:0;R:17672;i:1;R:17673;}s:55:"1242:qngnonfr-genafyngrq_npgvivgvrf-anzr-npgvivgl_vq-58";a:2:{i:0;R:17672;i:1;R:17673;}s:55:"1242:qngnonfr-genafyngrq_npgvivgvrf-anzr-npgvivgl_vq-59";a:2:{i:0;R:17672;i:1;R:17673;}s:55:"1242:qngnonfr-genafyngrq_npgvivgvrf-anzr-npgvivgl_vq-63";a:2:{i:0;R:17672;i:1;R:17673;}s:55:"1242:qngnonfr-genafyngrq_npgvivgvrf-anzr-npgvivgl_vq-64";a:2:{i:0;R:17672;i:1;R:17673;}s:59:"1242:qngnonfr-genafyngrq_ntrag_ebyrf-ynory-ntrag_ebyr_vq-10";a:2:{i:0;R:17672;i:1;R:17673;}s:59:"1242:qngnonfr-genafyngrq_ntrag_ebyrf-ynory-ntrag_ebyr_vq-11";a:2:{i:0;R:17672;i:1;R:17673;}s:59:"1242:qngnonfr-genafyngrq_ntrag_ebyrf-ynory-ntrag_ebyr_vq-12";a:2:{i:0;R:17672;i:1;R:17673;}s:59:"1242:qngnonfr-genafyngrq_ntrag_ebyrf-ynory-ntrag_ebyr_vq-13";a:2:{i:0;R:17672;i:1;R:17673;}s:59:"1242:qngnonfr-genafyngrq_ntrag_ebyrf-ynory-ntrag_ebyr_vq-14";a:2:{i:0;R:17672;i:1;R:17673;}s:59:"1242:qngnonfr-genafyngrq_ntrag_ebyrf-ynory-ntrag_ebyr_vq-15";a:2:{i:0;R:17672;i:1;R:17673;}s:59:"1242:qngnonfr-genafyngrq_ntrag_ebyrf-ynory-ntrag_ebyr_vq-16";a:2:{i:0;R:17672;i:1;R:17673;}s:58:"1242:qngnonfr-genafyngrq_ntrag_ebyrf-ynory-ntrag_ebyr_vq-1";a:2:{i:0;R:17672;i:1;R:17673;}s:59:"1242:qngnonfr-genafyngrq_ntrag_ebyrf-ynory-ntrag_ebyr_vq-21";a:2:{i:0;R:17672;i:1;R:17673;}s:59:"1242:qngnonfr-genafyngrq_ntrag_ebyrf-ynory-ntrag_ebyr_vq-22";a:2:{i:0;R:17672;i:1;R:17673;}s:59:"1242:qngnonfr-genafyngrq_ntrag_ebyrf-ynory-ntrag_ebyr_vq-23";a:2:{i:0;R:17672;i:1;R:17673;}s:59:"1242:qngnonfr-genafyngrq_ntrag_ebyrf-ynory-ntrag_ebyr_vq-24";a:2:{i:0;R:17672;i:1;R:17673;}s:58:"1242:qngnonfr-genafyngrq_ntrag_ebyrf-ynory-ntrag_ebyr_vq-2";a:2:{i:0;R:17672;i:1;R:17673;}s:58:"1242:qngnonfr-genafyngrq_ntrag_ebyrf-ynory-ntrag_ebyr_vq-3";a:2:{i:0;R:17672;i:1;R:17673;}s:58:"1242:qngnonfr-genafyngrq_ntrag_ebyrf-ynory-ntrag_ebyr_vq-4";a:2:{i:0;R:17672;i:1;R:17673;}s:58:"1242:qngnonfr-genafyngrq_ntrag_ebyrf-ynory-ntrag_ebyr_vq-5";a:2:{i:0;R:17672;i:1;R:17673;}s:58:"1242:qngnonfr-genafyngrq_ntrag_ebyrf-ynory-ntrag_ebyr_vq-6";a:2:{i:0;R:17672;i:1;R:17673;}s:58:"1242:qngnonfr-genafyngrq_ntrag_ebyrf-ynory-ntrag_ebyr_vq-7";a:2:{i:0;R:17672;i:1;R:17673;}s:58:"1242:qngnonfr-genafyngrq_ntrag_ebyrf-ynory-ntrag_ebyr_vq-8";a:2:{i:0;R:17672;i:1;R:17673;}s:58:"1242:qngnonfr-genafyngrq_ntrag_ebyrf-ynory-ntrag_ebyr_vq-9";a:2:{i:0;R:17672;i:1;R:17673;}s:54:"1242:qngnonfr-genafyngrq_nhqvraprf-ynory-nhqvrapr_vq-1";a:2:{i:0;R:17672;i:1;R:17673;}s:54:"1242:qngnonfr-genafyngrq_nhqvraprf-ynory-nhqvrapr_vq-2";a:2:{i:0;R:17672;i:1;R:17673;}s:54:"1242:qngnonfr-genafyngrq_nhqvraprf-ynory-nhqvrapr_vq-3";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_pbyyrpgvba_glcrf-ynory-pbyyrpgvba_glcr_vq-10";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_pbyyrpgvba_glcrf-ynory-pbyyrpgvba_glcr_vq-11";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_pbyyrpgvba_glcrf-ynory-pbyyrpgvba_glcr_vq-12";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_pbyyrpgvba_glcrf-ynory-pbyyrpgvba_glcr_vq-13";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_pbyyrpgvba_glcrf-ynory-pbyyrpgvba_glcr_vq-14";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_pbyyrpgvba_glcrf-ynory-pbyyrpgvba_glcr_vq-15";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_pbyyrpgvba_glcrf-ynory-pbyyrpgvba_glcr_vq-16";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_pbyyrpgvba_glcrf-ynory-pbyyrpgvba_glcr_vq-17";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_pbyyrpgvba_glcrf-ynory-pbyyrpgvba_glcr_vq-18";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_pbyyrpgvba_glcrf-ynory-pbyyrpgvba_glcr_vq-19";a:2:{i:0;R:17672;i:1;R:17673;}s:68:"1242:qngnonfr-genafyngrq_pbyyrpgvba_glcrf-ynory-pbyyrpgvba_glcr_vq-1";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_pbyyrpgvba_glcrf-ynory-pbyyrpgvba_glcr_vq-20";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_pbyyrpgvba_glcrf-ynory-pbyyrpgvba_glcr_vq-21";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_pbyyrpgvba_glcrf-ynory-pbyyrpgvba_glcr_vq-22";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_pbyyrpgvba_glcrf-ynory-pbyyrpgvba_glcr_vq-23";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_pbyyrpgvba_glcrf-ynory-pbyyrpgvba_glcr_vq-24";a:2:{i:0;R:17672;i:1;R:17673;}s:68:"1242:qngnonfr-genafyngrq_pbyyrpgvba_glcrf-ynory-pbyyrpgvba_glcr_vq-2";a:2:{i:0;R:17672;i:1;R:17673;}s:68:"1242:qngnonfr-genafyngrq_pbyyrpgvba_glcrf-ynory-pbyyrpgvba_glcr_vq-3";a:2:{i:0;R:17672;i:1;R:17673;}s:68:"1242:qngnonfr-genafyngrq_pbyyrpgvba_glcrf-ynory-pbyyrpgvba_glcr_vq-4";a:2:{i:0;R:17672;i:1;R:17673;}s:68:"1242:qngnonfr-genafyngrq_pbyyrpgvba_glcrf-ynory-pbyyrpgvba_glcr_vq-5";a:2:{i:0;R:17672;i:1;R:17673;}s:68:"1242:qngnonfr-genafyngrq_pbyyrpgvba_glcrf-ynory-pbyyrpgvba_glcr_vq-6";a:2:{i:0;R:17672;i:1;R:17673;}s:68:"1242:qngnonfr-genafyngrq_pbyyrpgvba_glcrf-ynory-pbyyrpgvba_glcr_vq-7";a:2:{i:0;R:17672;i:1;R:17673;}s:68:"1242:qngnonfr-genafyngrq_pbyyrpgvba_glcrf-ynory-pbyyrpgvba_glcr_vq-8";a:2:{i:0;R:17672;i:1;R:17673;}s:68:"1242:qngnonfr-genafyngrq_pbyyrpgvba_glcrf-ynory-pbyyrpgvba_glcr_vq-9";a:2:{i:0;R:17672;i:1;R:17673;}s:62:"1242:qngnonfr-genafyngrq_pbagnpg_ebyrf-ynory-pbagnpg_ebyr_vq-1";a:2:{i:0;R:17672;i:1;R:17673;}s:62:"1242:qngnonfr-genafyngrq_pbagnpg_ebyrf-ynory-pbagnpg_ebyr_vq-2";a:2:{i:0;R:17672;i:1;R:17673;}s:62:"1242:qngnonfr-genafyngrq_pbagnpg_ebyrf-ynory-pbagnpg_ebyr_vq-3";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_pbagnpg_fhowrpgf-gvgyr-pbagnpg_fhowrpg_vq-24";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_pbagnpg_fhowrpgf-gvgyr-pbagnpg_fhowrpg_vq-25";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_pbagnpg_fhowrpgf-gvgyr-pbagnpg_fhowrpg_vq-26";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_pbagnpg_fhowrpgf-gvgyr-pbagnpg_fhowrpg_vq-27";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_pbagnpg_fhowrpgf-gvgyr-pbagnpg_fhowrpg_vq-28";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_pbagnpg_fhowrpgf-gvgyr-pbagnpg_fhowrpg_vq-29";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_pbagnpg_fhowrpgf-gvgyr-pbagnpg_fhowrpg_vq-30";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_pbagnpg_fhowrpgf-gvgyr-pbagnpg_fhowrpg_vq-31";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_pbagnpg_fhowrpgf-gvgyr-pbagnpg_fhowrpg_vq-32";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_pbagnpg_fhowrpgf-gvgyr-pbagnpg_fhowrpg_vq-33";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_pbagnpg_fhowrpgf-gvgyr-pbagnpg_fhowrpg_vq-34";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_pbagnpg_fhowrpgf-gvgyr-pbagnpg_fhowrpg_vq-35";a:2:{i:0;R:17672;i:1;R:17673;}s:83:"1242:qngnonfr-genafyngrq_pbagrag_cnegare_fgnghfrf-ynory-pbagrag_cnegare_fgnghf_vq-1";a:2:{i:0;R:17672;i:1;R:17673;}s:83:"1242:qngnonfr-genafyngrq_pbagrag_cnegare_fgnghfrf-ynory-pbagrag_cnegare_fgnghf_vq-2";a:2:{i:0;R:17672;i:1;R:17673;}s:83:"1242:qngnonfr-genafyngrq_pbagrag_cnegare_fgnghfrf-ynory-pbagrag_cnegare_fgnghf_vq-3";a:2:{i:0;R:17672;i:1;R:17673;}s:83:"1242:qngnonfr-genafyngrq_pbagrag_cnegare_fgnghfrf-ynory-pbagrag_cnegare_fgnghf_vq-4";a:2:{i:0;R:17672;i:1;R:17673;}s:64:"1242:qngnonfr-genafyngrq_pbagrag_gnoyrf-ynory-pbagrag_gnoyr_vq-1";a:2:{i:0;R:17672;i:1;R:17673;}s:57:"1242:qngnonfr-genafyngrq_qngn_glcrf-ynory-qngn_glcr_vq-10";a:2:{i:0;R:17672;i:1;R:17673;}s:56:"1242:qngnonfr-genafyngrq_qngn_glcrf-ynory-qngn_glcr_vq-1";a:2:{i:0;R:17672;i:1;R:17673;}s:56:"1242:qngnonfr-genafyngrq_qngn_glcrf-ynory-qngn_glcr_vq-2";a:2:{i:0;R:17672;i:1;R:17673;}s:56:"1242:qngnonfr-genafyngrq_qngn_glcrf-ynory-qngn_glcr_vq-3";a:2:{i:0;R:17672;i:1;R:17673;}s:56:"1242:qngnonfr-genafyngrq_qngn_glcrf-ynory-qngn_glcr_vq-4";a:2:{i:0;R:17672;i:1;R:17673;}s:56:"1242:qngnonfr-genafyngrq_qngn_glcrf-ynory-qngn_glcr_vq-5";a:2:{i:0;R:17672;i:1;R:17673;}s:56:"1242:qngnonfr-genafyngrq_qngn_glcrf-ynory-qngn_glcr_vq-6";a:2:{i:0;R:17672;i:1;R:17673;}s:56:"1242:qngnonfr-genafyngrq_qngn_glcrf-ynory-qngn_glcr_vq-7";a:2:{i:0;R:17672;i:1;R:17673;}s:56:"1242:qngnonfr-genafyngrq_qngn_glcrf-ynory-qngn_glcr_vq-8";a:2:{i:0;R:17672;i:1;R:17673;}s:58:"1242:qngnonfr-genafyngrq_yvprafrf-qrfpevcgvba-yvprafr_vq-1";a:2:{i:0;R:17672;i:1;R:17673;}s:59:"1242:qngnonfr-genafyngrq_yvprafrf-qrfpevcgvba-yvprafr_vq-29";a:2:{i:0;R:17672;i:1;R:17673;}s:58:"1242:qngnonfr-genafyngrq_yvprafrf-qrfpevcgvba-yvprafr_vq-2";a:2:{i:0;R:17672;i:1;R:17673;}s:59:"1242:qngnonfr-genafyngrq_yvprafrf-qrfpevcgvba-yvprafr_vq-30";a:2:{i:0;R:17672;i:1;R:17673;}s:59:"1242:qngnonfr-genafyngrq_yvprafrf-qrfpevcgvba-yvprafr_vq-31";a:2:{i:0;R:17672;i:1;R:17673;}s:59:"1242:qngnonfr-genafyngrq_yvprafrf-qrfpevcgvba-yvprafr_vq-32";a:2:{i:0;R:17672;i:1;R:17673;}s:59:"1242:qngnonfr-genafyngrq_yvprafrf-qrfpevcgvba-yvprafr_vq-33";a:2:{i:0;R:17672;i:1;R:17673;}s:59:"1242:qngnonfr-genafyngrq_yvprafrf-qrfpevcgvba-yvprafr_vq-34";a:2:{i:0;R:17672;i:1;R:17673;}s:59:"1242:qngnonfr-genafyngrq_yvprafrf-qrfpevcgvba-yvprafr_vq-35";a:2:{i:0;R:17672;i:1;R:17673;}s:59:"1242:qngnonfr-genafyngrq_yvprafrf-qrfpevcgvba-yvprafr_vq-36";a:2:{i:0;R:17672;i:1;R:17673;}s:59:"1242:qngnonfr-genafyngrq_yvprafrf-qrfpevcgvba-yvprafr_vq-37";a:2:{i:0;R:17672;i:1;R:17673;}s:59:"1242:qngnonfr-genafyngrq_yvprafrf-qrfpevcgvba-yvprafr_vq-38";a:2:{i:0;R:17672;i:1;R:17673;}s:59:"1242:qngnonfr-genafyngrq_yvprafrf-qrfpevcgvba-yvprafr_vq-39";a:2:{i:0;R:17672;i:1;R:17673;}s:58:"1242:qngnonfr-genafyngrq_yvprafrf-qrfpevcgvba-yvprafr_vq-3";a:2:{i:0;R:17672;i:1;R:17673;}s:59:"1242:qngnonfr-genafyngrq_yvprafrf-qrfpevcgvba-yvprafr_vq-42";a:2:{i:0;R:17672;i:1;R:17673;}s:59:"1242:qngnonfr-genafyngrq_yvprafrf-qrfpevcgvba-yvprafr_vq-43";a:2:{i:0;R:17672;i:1;R:17673;}s:58:"1242:qngnonfr-genafyngrq_yvprafrf-qrfpevcgvba-yvprafr_vq-4";a:2:{i:0;R:17672;i:1;R:17673;}s:58:"1242:qngnonfr-genafyngrq_yvprafrf-qrfpevcgvba-yvprafr_vq-5";a:2:{i:0;R:17672;i:1;R:17673;}s:58:"1242:qngnonfr-genafyngrq_yvprafrf-qrfpevcgvba-yvprafr_vq-6";a:2:{i:0;R:17672;i:1;R:17673;}s:58:"1242:qngnonfr-genafyngrq_yvprafrf-qrfpevcgvba-yvprafr_vq-7";a:2:{i:0;R:17672;i:1;R:17673;}s:58:"1242:qngnonfr-genafyngrq_yvprafrf-qrfpevcgvba-yvprafr_vq-8";a:2:{i:0;R:17672;i:1;R:17673;}s:58:"1242:qngnonfr-genafyngrq_yvprafrf-qrfpevcgvba-yvprafr_vq-9";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-106";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-107";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-112";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-113";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-118";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-169";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-175";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-183";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-266";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-280";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-313";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-314";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-317";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-324";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-332";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-333";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-335";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-352";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-370";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-375";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-383";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-390";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-391";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-394";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-396";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-399";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-401";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-408";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-411";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-413";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-414";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-415";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-422";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-463";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-472";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-494";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-503";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-512";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-513";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-517";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-518";a:2:{i:0;R:17672;i:1;R:17673;}s:47:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-51";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-562";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-563";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-564";a:2:{i:0;R:17672;i:1;R:17673;}s:48:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-565";a:2:{i:0;R:17672;i:1;R:17673;}s:47:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-74";a:2:{i:0;R:17672;i:1;R:17673;}s:47:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-85";a:2:{i:0;R:17672;i:1;R:17673;}s:47:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-86";a:2:{i:0;R:17672;i:1;R:17673;}s:47:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-91";a:2:{i:0;R:17672;i:1;R:17673;}s:47:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-92";a:2:{i:0;R:17672;i:1;R:17673;}s:47:"1242:qngnonfr-genafyngrq_enaxf-ynory-enax_vq-99";a:2:{i:0;R:17672;i:1;R:17673;}s:70:"1242:qngnonfr-genafyngrq_erfbhepr_fgnghfrf-ynory-erfbhepr_fgnghf_vq-10";a:2:{i:0;R:17672;i:1;R:17673;}s:70:"1242:qngnonfr-genafyngrq_erfbhepr_fgnghfrf-ynory-erfbhepr_fgnghf_vq-11";a:2:{i:0;R:17672;i:1;R:17673;}s:70:"1242:qngnonfr-genafyngrq_erfbhepr_fgnghfrf-ynory-erfbhepr_fgnghf_vq-12";a:2:{i:0;R:17672;i:1;R:17673;}s:70:"1242:qngnonfr-genafyngrq_erfbhepr_fgnghfrf-ynory-erfbhepr_fgnghf_vq-13";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_erfbhepr_fgnghfrf-ynory-erfbhepr_fgnghf_vq-1";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_erfbhepr_fgnghfrf-ynory-erfbhepr_fgnghf_vq-2";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_erfbhepr_fgnghfrf-ynory-erfbhepr_fgnghf_vq-3";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_erfbhepr_fgnghfrf-ynory-erfbhepr_fgnghf_vq-4";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_erfbhepr_fgnghfrf-ynory-erfbhepr_fgnghf_vq-5";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_erfbhepr_fgnghfrf-ynory-erfbhepr_fgnghf_vq-6";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_erfbhepr_fgnghfrf-ynory-erfbhepr_fgnghf_vq-7";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_erfbhepr_fgnghfrf-ynory-erfbhepr_fgnghf_vq-8";a:2:{i:0;R:17672;i:1;R:17673;}s:69:"1242:qngnonfr-genafyngrq_erfbhepr_fgnghfrf-ynory-erfbhepr_fgnghf_vq-9";a:2:{i:0;R:17672;i:1;R:17673;}s:62:"1242:qngnonfr-genafyngrq_freivpr_glcrf-ynory-freivpr_glcr_vq-1";a:2:{i:0;R:17672;i:1;R:17673;}s:62:"1242:qngnonfr-genafyngrq_freivpr_glcrf-ynory-freivpr_glcr_vq-2";a:2:{i:0;R:17672;i:1;R:17673;}s:57:"1242:qngnonfr-genafyngrq_fbeg_fglyrf-anzr-fbeg_fglyr_vq-1";a:2:{i:0;R:17672;i:1;R:17673;}s:57:"1242:qngnonfr-genafyngrq_fbeg_fglyrf-anzr-fbeg_fglyr_vq-2";a:2:{i:0;R:17672;i:1;R:17673;}s:57:"1242:qngnonfr-genafyngrq_fbeg_fglyrf-anzr-fbeg_fglyr_vq-3";a:2:{i:0;R:17672;i:1;R:17673;}s:57:"1242:qngnonfr-genafyngrq_fbeg_fglyrf-anzr-fbeg_fglyr_vq-4";a:2:{i:0;R:17672;i:1;R:17673;}s:57:"1242:qngnonfr-genafyngrq_fbeg_fglyrf-anzr-fbeg_fglyr_vq-5";a:2:{i:0;R:17672;i:1;R:17673;}s:57:"1242:qngnonfr-genafyngrq_fbeg_fglyrf-anzr-fbeg_fglyr_vq-6";a:2:{i:0;R:17672;i:1;R:17673;}s:51:"1242:qngnonfr-genafyngrq_fgnghfrf-ynory-fgnghf_vq-1";a:2:{i:0;R:17672;i:1;R:17673;}s:51:"1242:qngnonfr-genafyngrq_fgnghfrf-ynory-fgnghf_vq-2";a:2:{i:0;R:17672;i:1;R:17673;}s:51:"1242:qngnonfr-genafyngrq_fgnghfrf-ynory-fgnghf_vq-3";a:2:{i:0;R:17672;i:1;R:17673;}s:51:"1242:qngnonfr-genafyngrq_fgnghfrf-ynory-fgnghf_vq-4";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-10";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-11";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-12";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-13";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-14";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-15";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-16";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-17";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-18";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-19";a:2:{i:0;R:17672;i:1;R:17673;}s:70:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-1";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-20";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-21";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-22";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-23";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-24";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-25";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-26";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-27";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-28";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-29";a:2:{i:0;R:17672;i:1;R:17673;}s:70:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-2";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-30";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-31";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-32";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-33";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-34";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-35";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-36";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-37";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-38";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-39";a:2:{i:0;R:17672;i:1;R:17673;}s:70:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-3";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-40";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-41";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-42";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-43";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-44";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-45";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-46";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-47";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-48";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-49";a:2:{i:0;R:17672;i:1;R:17673;}s:70:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-4";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-50";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-51";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-52";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-53";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-54";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-55";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-56";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-57";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-58";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-59";a:2:{i:0;R:17672;i:1;R:17673;}s:70:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-5";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-60";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-61";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-62";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-63";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-64";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-65";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-66";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-67";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-68";a:2:{i:0;R:17672;i:1;R:17673;}s:70:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-6";a:2:{i:0;R:17672;i:1;R:17673;}s:70:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-7";a:2:{i:0;R:17672;i:1;R:17673;}s:70:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-8";a:2:{i:0;R:17672;i:1;R:17673;}s:70:"1242:qngnonfr-genafyngrq_flabalz_eryngvbaf-ynory-flabalz_eryngvba_vq-9";a:2:{i:0;R:17672;i:1;R:17673;}s:72:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-13";a:2:{i:0;R:17672;i:1;R:17673;}s:72:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-14";a:2:{i:0;R:17672;i:1;R:17673;}s:72:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-17";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-194";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-1";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-218";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-221";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-225";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-226";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-227";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-242";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-244";a:2:{i:0;R:17672;i:1;R:17673;}s:72:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-24";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-251";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-267";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-278";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-285";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-286";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-289";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-292";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-293";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-296";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-297";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-299";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-2";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-300";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-303";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-304";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-305";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-306";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-307";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-308";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-309";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-310";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-311";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-312";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-313";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-314";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-315";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-316";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-317";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-318";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-319";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-320";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-321";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-322";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-323";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-324";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-325";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-326";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-327";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-328";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-329";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-330";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-331";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-332";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-333";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-334";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-335";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-336";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-337";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-338";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-339";a:2:{i:0;R:17672;i:1;R:17673;}s:72:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-33";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-340";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-341";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-342";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-343";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-344";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-345";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-346";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-347";a:2:{i:0;R:17672;i:1;R:17673;}s:73:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-348";a:2:{i:0;R:17672;i:1;R:17673;}s:72:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-34";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-3";a:2:{i:0;R:17672;i:1;R:17673;}s:72:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-41";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-4";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-5";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-6";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-7";a:2:{i:0;R:17672;i:1;R:17673;}s:71:"1242:qngnonfr-genafyngrq_gnoyr_bs_pbagragf-ynory-gnoyr_bs_pbagragf_vq-8";a:2:{i:0;R:17672;i:1;R:17673;}s:66:"1242:qngnonfr-genafyngrq_hagehfg_ernfbaf-ynory-hagehfg_ernfba_vq-1";a:2:{i:0;R:17672;i:1;R:17673;}s:66:"1242:qngnonfr-genafyngrq_hagehfg_ernfbaf-ynory-hagehfg_ernfba_vq-2";a:2:{i:0;R:17672;i:1;R:17673;}s:66:"1242:qngnonfr-genafyngrq_hagehfg_ernfbaf-ynory-hagehfg_ernfba_vq-3";a:2:{i:0;R:17672;i:1;R:17673;}s:66:"1242:qngnonfr-genafyngrq_hagehfg_ernfbaf-ynory-hagehfg_ernfba_vq-4";a:2:{i:0;R:17672;i:1;R:17673;}s:66:"1242:qngnonfr-genafyngrq_hagehfg_ernfbaf-ynory-hagehfg_ernfba_vq-5";a:2:{i:0;R:17672;i:1;R:17673;}s:65:"1242:qngnonfr-genafyngrq_hfre_vqragvgvrf-ynory-hfre_vqragvgl_vq-1";a:2:{i:0;R:17672;i:1;R:17673;}s:65:"1242:qngnonfr-genafyngrq_hfre_vqragvgvrf-ynory-hfre_vqragvgl_vq-2";a:2:{i:0;R:17672;i:1;R:17673;}s:65:"1242:qngnonfr-genafyngrq_hfre_vqragvgvrf-ynory-hfre_vqragvgl_vq-3";a:2:{i:0;R:17672;i:1;R:17673;}s:65:"1242:qngnonfr-genafyngrq_hfre_vqragvgvrf-ynory-hfre_vqragvgl_vq-4";a:2:{i:0;R:17672;i:1;R:17673;}s:65:"1242:qngnonfr-genafyngrq_hfre_vqragvgvrf-ynory-hfre_vqragvgl_vq-5";a:2:{i:0;R:17672;i:1;R:17673;}s:49:"1242:qngnonfr-genafyngrq_irggrq-ynory-irggrq_vq-0";a:2:{i:0;R:17672;i:1;R:17673;}s:49:"1242:qngnonfr-genafyngrq_irggrq-ynory-irggrq_vq-4";a:2:{i:0;R:17672;i:1;R:17673;}s:49:"1242:qngnonfr-genafyngrq_irggrq-ynory-irggrq_vq-5";a:2:{i:0;R:17672;i:1;R:17673;}s:49:"1242:qngnonfr-genafyngrq_irggrq-ynory-irggrq_vq-6";a:2:{i:0;R:17672;i:1;R:17673;}s:57:"1242:qngnonfr-genafyngrq_ivrj_fglyrf-anzr-ivrj_fglyr_vq-1";a:2:{i:0;R:17672;i:1;R:17673;}s:57:"1242:qngnonfr-genafyngrq_ivrj_fglyrf-anzr-ivrj_fglyr_vq-2";a:2:{i:0;R:17672;i:1;R:17673;}s:57:"1242:qngnonfr-genafyngrq_ivrj_fglyrf-anzr-ivrj_fglyr_vq-3";a:2:{i:0;R:17672;i:1;R:17673;}s:59:"1242:qngnonfr-genafyngrq_ivfvovyvgvrf-ynory-ivfvovyvgl_vq-0";a:2:{i:0;R:17672;i:1;R:17673;}s:59:"1242:qngnonfr-genafyngrq_ivfvovyvgvrf-ynory-ivfvovyvgl_vq-1";a:2:{i:0;R:17672;i:1;R:17673;}s:59:"1242:qngnonfr-genafyngrq_ivfvovyvgvrf-ynory-ivfvovyvgl_vq-2";a:2:{i:0;R:17672;i:1;R:17673;}s:33:"1242:jrofvgr-qngr.sbezngf.qrsnhyg";a:2:{i:0;s:12:"out-eol-site";i:1;R:17673;}s:31:"1242:jrofvgr-qngr.sbezngf.fubeg";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-qngr.sbezngf.ybat";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-qngr.qnl_anzrf.0";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-qngr.qnl_anzrf.1";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-qngr.qnl_anzrf.2";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-qngr.qnl_anzrf.3";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-qngr.qnl_anzrf.4";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-qngr.qnl_anzrf.5";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-qngr.qnl_anzrf.6";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-qngr.nooe_qnl_anzrf.0";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-qngr.nooe_qnl_anzrf.1";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-qngr.nooe_qnl_anzrf.2";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-qngr.nooe_qnl_anzrf.3";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-qngr.nooe_qnl_anzrf.4";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-qngr.nooe_qnl_anzrf.5";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-qngr.nooe_qnl_anzrf.6";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-qngr.zbagu_anzrf.0";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-qngr.zbagu_anzrf.1";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-qngr.zbagu_anzrf.2";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-qngr.zbagu_anzrf.3";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-qngr.zbagu_anzrf.4";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-qngr.zbagu_anzrf.5";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-qngr.zbagu_anzrf.6";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-qngr.zbagu_anzrf.7";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-qngr.zbagu_anzrf.8";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-qngr.zbagu_anzrf.9";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-qngr.zbagu_anzrf.10";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-qngr.zbagu_anzrf.11";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-qngr.zbagu_anzrf.12";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-qngr.nooe_zbagu_anzrf.0";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-qngr.nooe_zbagu_anzrf.1";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-qngr.nooe_zbagu_anzrf.2";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-qngr.nooe_zbagu_anzrf.3";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-qngr.nooe_zbagu_anzrf.4";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-qngr.nooe_zbagu_anzrf.5";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-qngr.nooe_zbagu_anzrf.6";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-qngr.nooe_zbagu_anzrf.7";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-qngr.nooe_zbagu_anzrf.8";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-qngr.nooe_zbagu_anzrf.9";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-qngr.nooe_zbagu_anzrf.10";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-qngr.nooe_zbagu_anzrf.11";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-qngr.nooe_zbagu_anzrf.12";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-qngr.beqre.0";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-qngr.beqre.1";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-qngr.beqre.2";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-gvzr.sbezngf.qrsnhyg";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-gvzr.sbezngf.fubeg";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-gvzr.sbezngf.ybat";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-gvzr.nz";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-gvzr.cz";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-fhccbeg.neenl.jbeqf_pbaarpgbe";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-fhccbeg.neenl.gjb_jbeqf_pbaarpgbe";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-fhccbeg.neenl.ynfg_jbeq_pbaarpgbe";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-fhccbeg.fryrpg.cebzcg";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-ahzore.sbezng.frcnengbe";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-ahzore.sbezng.qryvzvgre";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-ahzore.sbezng.cerpvfvba";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-ahzore.sbezng.fvtavsvpnag";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-ahzore.sbezng.fgevc_vafvtavsvpnag_mrebf";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-ahzore.pheerapl.sbezng.sbezng";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-ahzore.pheerapl.sbezng.havg";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-ahzore.pheerapl.sbezng.frcnengbe";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-ahzore.pheerapl.sbezng.qryvzvgre";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-ahzore.pheerapl.sbezng.cerpvfvba";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-ahzore.pheerapl.sbezng.fvtavsvpnag";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-ahzore.pheerapl.sbezng.fgevc_vafvtavsvpnag_mrebf";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-ahzore.crepragntr.sbezng.qryvzvgre";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-ahzore.cerpvfvba.sbezng.qryvzvgre";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-ahzore.uhzna.sbezng.qryvzvgre";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-ahzore.uhzna.sbezng.cerpvfvba";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-ahzore.uhzna.sbezng.fvtavsvpnag";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-ahzore.uhzna.sbezng.fgevc_vafvtavsvpnag_mrebf";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-ahzore.uhzna.fgbentr_havgf.sbezng";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-ahzore.uhzna.fgbentr_havgf.havgf.olgr";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-ahzore.uhzna.fgbentr_havgf.havgf.xo";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-ahzore.uhzna.fgbentr_havgf.havgf.zo";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-ahzore.uhzna.fgbentr_havgf.havgf.to";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-ahzore.uhzna.fgbentr_havgf.havgf.go";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-ahzore.uhzna.qrpvzny_havgf.sbezng";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-ahzore.uhzna.qrpvzny_havgf.havgf.havg";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-ahzore.uhzna.qrpvzny_havgf.havgf.gubhfnaq";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-ahzore.uhzna.qrpvzny_havgf.havgf.zvyyvba";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-ahzore.uhzna.qrpvzny_havgf.havgf.ovyyvba";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-ahzore.uhzna.qrpvzny_havgf.havgf.gevyyvba";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-ahzore.uhzna.qrpvzny_havgf.havgf.dhnqevyyvba";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-qngrgvzr.qvfgnapr_va_jbeqf.unys_n_zvahgr";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-qngrgvzr.qvfgnapr_va_jbeqf.yrff_guna_k_frpbaqf";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-qngrgvzr.qvfgnapr_va_jbeqf.k_frpbaqf";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-qngrgvzr.qvfgnapr_va_jbeqf.yrff_guna_k_zvahgrf";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-qngrgvzr.qvfgnapr_va_jbeqf.k_zvahgrf";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-qngrgvzr.qvfgnapr_va_jbeqf.nobhg_k_ubhef";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-qngrgvzr.qvfgnapr_va_jbeqf.k_qnlf";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-qngrgvzr.qvfgnapr_va_jbeqf.nobhg_k_zbaguf";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-qngrgvzr.qvfgnapr_va_jbeqf.k_zbaguf";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-qngrgvzr.qvfgnapr_va_jbeqf.nobhg_k_lrnef";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-qngrgvzr.qvfgnapr_va_jbeqf.bire_k_lrnef";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-qngrgvzr.qvfgnapr_va_jbeqf.nyzbfg_k_lrnef";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-qngrgvzr.cebzcgf.lrne";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-qngrgvzr.cebzcgf.zbagu";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-qngrgvzr.cebzcgf.qnl";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-qngrgvzr.cebzcgf.ubhe";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-qngrgvzr.cebzcgf.zvahgr";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-qngrgvzr.cebzcgf.frpbaq";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-npgvirerpbeq.zbqryf.hfre";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbyyrpgvba.anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbyyrpgvba.qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbyyrpgvba.fbeg_fglyr_vq";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbyyrpgvba.ybtb";a:2:{i:0;R:18031;i:1;R:17673;}s:76:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbyyrpgvba.nqqvgvbany_naabgngvba_svryqf";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbyyrpgvba.fubj_ersreraprf";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbyyrpgvba_vgrz.naabgngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbyyrpgvba_vgrz.fbeg_svryq";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbyyrpgvba_vgrz.ersf";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbzzrag.obql";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbzzhavgl.anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbzzhavgl.qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbzzhavgl.ybtb";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbagrag_cntr.cntr_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbagrag_cntr.fbeg_beqre";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbagrag_cntr.npgvir";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbagrag_cnegare.npebalz";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbagrag_cnegare.nhgb_choyvfu";a:2:{i:0;R:18031;i:1;R:17673;}s:64:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbagrag_cnegare.nqzva_abgrf";a:2:{i:0;R:18031;i:1;R:17673;}s:75:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbagrag_cnegare.pbagrag_cnegare_fgnghf";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbagrag_cnegare.perngrq_ng";a:2:{i:0;R:18031;i:1;R:17673;}s:64:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbagrag_cnegare.qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbagrag_cnegare.qvfcynl_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbagrag_cnegare.shyy_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbagrag_cnegare.ubzrcntr";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbagrag_cnegare.vq";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbagrag_cnegare.abgrf";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbagrag_cnegare.choyvp";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbagrag_cnegare.erfbheprf";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbagrag_cnegare.hfre_vq";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbagrag_cnegare.irggrq";a:2:{i:0;R:18031;i:1;R:17673;}s:73:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbagrag_cnegare_nterrzrag.perngrq_ng";a:2:{i:0;R:18031;i:1;R:17673;}s:72:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbagrag_cnegare_nterrzrag.fvtarq_ol";a:2:{i:0;R:18031;i:1;R:17673;}s:77:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbagrag_cnegare_nterrzrag.fvtarq_ba_qngr";a:2:{i:0;R:18031;i:1;R:17673;}s:90:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.pbagrag_cnegare_pbagnpg.rznvy_ercbegf_serdhrapl_ubhef";a:2:{i:0;R:18031;i:1;R:17673;}s:71:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.qngn_bowrpg.ovoyvbtencuvp_pvgngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.qngn_bowrpg.qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.qngn_bowrpg.bowrpg_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.qngn_bowrpg.evtugf_ubyqre";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.qngn_bowrpg.evtugf_fgngrzrag";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.qngn_bowrpg.fbhepr_hey";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.perngrq_ng";a:2:{i:0;R:18031;i:1;R:17673;}s:64:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.zrzoref_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:68:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.pbzzhavgvrf_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:68:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.pbyyrpgvbaf_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.cntrf_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:69:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.cntrf_jvgu_pbagrag";a:2:{i:0;R:18031;i:1;R:17673;}s:66:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.cntrf_jvgu_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:67:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.cntrf_jvgu_vzntr";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.cntrf_jvgu_znc";a:2:{i:0;R:18031;i:1;R:17673;}s:67:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.cntrf_jvgu_ivqrb";a:2:{i:0;R:18031;i:1;R:17673;}s:67:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.cntrf_jvgu_fbhaq";a:2:{i:0;R:18031;i:1;R:17673;}s:69:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.cntrf_jvgubhg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:70:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.cntrf_jvgubhg_vzntr";a:2:{i:0;R:18031;i:1;R:17673;}s:75:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.cntrf_jvgu_vzntr_ab_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:75:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.cntrf_jvgu_grkg_ab_vzntr";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.onfr_cntrf";a:2:{i:0;R:18031;i:1;R:17673;}s:87:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.cntrf_jvgu_ng_yrnfg_n_gehfgrq_bowrpg";a:2:{i:0;R:18031;i:1;R:17673;}s:90:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.cntrf_jvgu_ng_yrnfg_n_phengbevny_npgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:71:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.cntrf_jvgu_ouy_yvaxf";a:2:{i:0;R:18031;i:1;R:17673;}s:79:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.cntrf_jvgu_ouy_yvaxf_ab_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:76:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.cntrf_jvgu_ouy_yvaxf_bayl";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.qngn_bowrpgf";a:2:{i:0;R:18031;i:1;R:17673;}s:69:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.qngn_bowrpgf_grkgf";a:2:{i:0;R:18031;i:1;R:17673;}s:70:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.qngn_bowrpgf_vzntrf";a:2:{i:0;R:18031;i:1;R:17673;}s:70:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.qngn_bowrpgf_ivqrbf";a:2:{i:0;R:18031;i:1;R:17673;}s:70:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.qngn_bowrpgf_fbhaqf";a:2:{i:0;R:18031;i:1;R:17673;}s:68:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.qngn_bowrpgf_zncf";a:2:{i:0;R:18031;i:1;R:17673;}s:71:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.qngn_bowrpgf_gehfgrq";a:2:{i:0;R:18031;i:1;R:17673;}s:74:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.qngn_bowrpgf_haerivrjrq";a:2:{i:0;R:18031;i:1;R:17673;}s:73:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.qngn_bowrpgf_hagehfgrq";a:2:{i:0;R:18031;i:1;R:17673;}s:96:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.qngn_bowrpgf_gehfgrq_be_haerivrjrq_ohg_uvqqra";a:2:{i:0;R:18031;i:1;R:17673;}s:64:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.hqb_choyvfurq";a:2:{i:0;R:18031;i:1;R:17673;}s:76:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.hqb_choyvfurq_ol_phengbef";a:2:{i:0;R:18031;i:1;R:17673;}s:80:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.hqb_choyvfurq_ol_aba_phengbef";a:2:{i:0;R:18031;i:1;R:17673;}s:67:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.pbagrag_cnegaref";a:2:{i:0;R:18031;i:1;R:17673;}s:92:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.pbagrag_cnegaref_jvgu_choyvfurq_erfbheprf";a:2:{i:0;R:18031;i:1;R:17673;}s:100:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.pbagrag_cnegaref_jvgu_choyvfurq_gehfgrq_erfbheprf";a:2:{i:0;R:18031;i:1;R:17673;}s:70:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.choyvfurq_erfbheprf";a:2:{i:0;R:18031;i:1;R:17673;}s:78:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.choyvfurq_gehfgrq_erfbheprf";a:2:{i:0;R:18031;i:1;R:17673;}s:81:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.choyvfurq_haerivrjrq_erfbheprf";a:2:{i:0;R:18031;i:1;R:17673;}s:96:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.arjyl_choyvfurq_erfbheprf_va_gur_ynfg_30_qnlf";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.znevar_cntrf";a:2:{i:0;R:18031;i:1;R:17673;}s:70:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.znevar_cntrf_va_pby";a:2:{i:0;R:18031;i:1;R:17673;}s:76:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.znevar_cntrf_jvgu_bowrpgf";a:2:{i:0;R:18031;i:1;R:17673;}s:83:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.znevar_cntrf_jvgu_bowrpgf_irggrq";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.phengbef";a:2:{i:0;R:18031;i:1;R:17673;}s:69:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.phengbef_nffvfgnag";a:2:{i:0;R:18031;i:1;R:17673;}s:64:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.phengbef_shyy";a:2:{i:0;R:18031;i:1;R:17673;}s:66:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.phengbef_znfgre";a:2:{i:0;R:18031;i:1;R:17673;}s:66:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.npgvir_phengbef";a:2:{i:0;R:18031;i:1;R:17673;}s:83:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.cntrf_phengrq_ol_npgvir_phengbef";a:2:{i:0;R:18031;i:1;R:17673;}s:86:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.bowrpgf_phengrq_va_gur_ynfg_30_qnlf";a:2:{i:0;R:18031;i:1;R:17673;}s:86:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.phengbe_npgvbaf_va_gur_ynfg_30_qnlf";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.evpu_cntrf";a:2:{i:0;R:18031;i:1;R:17673;}s:64:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.ubgyvfg_cntrf";a:2:{i:0;R:18031;i:1;R:17673;}s:69:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.evpu_ubgyvfg_cntrf";a:2:{i:0;R:18031;i:1;R:17673;}s:67:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.erqubgyvfg_cntrf";a:2:{i:0;R:18031;i:1;R:17673;}s:72:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.evpu_erqubgyvfg_cntrf";a:2:{i:0;R:18031;i:1;R:17673;}s:76:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.cntrf_jvgu_fpber_10_gb_39";a:2:{i:0;R:18031;i:1;R:17673;}s:80:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.cntrf_jvgu_fpber_yrff_guna_10";a:2:{i:0;R:18031;i:1;R:17673;}s:64:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.yvsrqrfx_gnkn";a:2:{i:0;R:18031;i:1;R:17673;}s:72:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.rby_fgngvfgvp.yvsrqrfx_qngn_bowrpgf";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.uneirfg_rirag.erfbhepr";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.uvrenepul.oebjfnoyr";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.uvrenepul.pbzcyrgr";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.uvrenepul.qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:64:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.uvrenepul.qrfpevcgvir_ynory";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.uvrenepul.ynory";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.uvrenepul.erdhrfg_choyvfu";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.anzr.fgevat";a:2:{i:0;R:18031;i:1;R:17673;}s:66:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.abgvsvpngvba.ercyl_gb_pbzzrag";a:2:{i:0;R:18031;i:1;R:17673;}s:71:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.abgvsvpngvba.pbzzrag_ba_zl_cebsvyr";a:2:{i:0;R:18031;i:1;R:17673;}s:76:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.abgvsvpngvba.pbzzrag_ba_zl_pbagevohgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:74:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.abgvsvpngvba.pbzzrag_ba_zl_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:73:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.abgvsvpngvba.pbzzrag_ba_zl_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:73:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.abgvsvpngvba.vaivgngvba_gb_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:67:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.abgvsvpngvba.znqr_zr_n_znantre";a:2:{i:0;R:18031;i:1;R:17673;}s:76:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.abgvsvpngvba.zrzore_wbvarq_zl_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:76:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.abgvsvpngvba.pbzzrag_ba_zl_jngpurq_vgrz";a:2:{i:0;R:18031;i:1;R:17673;}s:77:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.abgvsvpngvba.phengvba_ba_zl_jngpurq_vgrz";a:2:{i:0;R:18031;i:1;R:17673;}s:77:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.abgvsvpngvba.arj_qngn_ba_zl_jngpurq_vgrz";a:2:{i:0;R:18031;i:1;R:17673;}s:82:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.abgvsvpngvba.punatrf_gb_zl_jngpurq_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:81:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.abgvsvpngvba.punatrf_gb_zl_jngpurq_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:84:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.abgvsvpngvba.zrzore_wbvarq_zl_jngpurq_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:74:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.abgvsvpngvba.zrzore_yrsg_zl_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:77:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.abgvsvpngvba.arj_znantre_va_zl_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:68:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.abgvsvpngvba.v_nz_orvat_jngpurq";a:2:{i:0;R:18031;i:1;R:17673;}s:64:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.abgvsvpngvba.rby_arjfyrggre";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.erfbhepr.npprffcbvag_hey";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.erfbhepr.nhgb_choyvfu";a:2:{i:0;R:18031;i:1;R:17673;}s:68:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.erfbhepr.ovoyvbtencuvp_pvgngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.erfbhepr.qngnfrg";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.erfbhepr.qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.erfbhepr.qjp_nepuvir_hey";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.erfbhepr.uneirfg_riragf";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.erfbhepr.uvrenepul";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.erfbhepr.ynathntr_vq";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.erfbhepr.yvprafr_vq";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.erfbhepr.abgrf";a:2:{i:0;R:18031;i:1;R:17673;}s:64:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.erfbhepr.erfbhepr_fgnghf_vq";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.erfbhepr.evtugf_ubyqre";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.erfbhepr.evtugf_fgngrzrag";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.erfbhepr.gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.erfbhepr.irggrq";a:2:{i:0;R:18031;i:1;R:17673;}s:79:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.genafyngrq_pbagrag_cntr.npgvir_genafyngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:73:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.genafyngrq_pbagrag_cntr.yrsg_pbagrag";a:2:{i:0;R:18031;i:1;R:17673;}s:73:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.genafyngrq_pbagrag_cntr.znva_pbagrag";a:2:{i:0;R:18031;i:1;R:17673;}s:74:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.genafyngrq_pbagrag_cntr.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:77:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.genafyngrq_pbagrag_cntr.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:66:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.genafyngrq_pbagrag_cntr.gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.hfre.nterrq_jvgu_grezf";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.hfre.ncv_xrl";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.hfre.ovb";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.hfre.perqragvnyf";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.hfre.phengbe_yriry";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.hfre.phengbe_fpbcr";a:2:{i:0;R:18031;i:1;R:17673;}s:69:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.hfre.qvfnoyr_rznvy_abgvsvpngvbaf";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.hfre.rznvy";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.hfre.ragrerq_cnffjbeq";a:2:{i:0;R:18031;i:1;R:17673;}s:71:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.hfre.ragrerq_cnffjbeq_pbasvezngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.hfre.snzvyl_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.hfre.shyy_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.hfre.tvira_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.hfre.ynathntr_nooe";a:2:{i:0;R:18031;i:1;R:17673;}s:68:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.hfre.erdhrfgrq_phengbe_yriry_vq";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.hfre.gnt_yvar";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-npgvirerpbeq.nggevohgrf.hfre.hfreanzr";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-npgvirerpbeq.reebef.sbezng";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-npgvirerpbeq.reebef.grzcyngr.urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-npgvirerpbeq.reebef.grzcyngr.obql";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-npgvirerpbeq.reebef.zrffntrf.gnxra";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-npgvirerpbeq.reebef.zrffntrf.erpbeq_vainyvq";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-npgvirerpbeq.reebef.zrffntrf.vapyhfvba";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-npgvirerpbeq.reebef.zrffntrf.rkpyhfvba";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-npgvirerpbeq.reebef.zrffntrf.vainyvq";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-npgvirerpbeq.reebef.zrffntrf.pbasvezngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-npgvirerpbeq.reebef.zrffntrf.npprcgrq";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-npgvirerpbeq.reebef.zrffntrf.rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-npgvirerpbeq.reebef.zrffntrf.oynax";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-npgvirerpbeq.reebef.zrffntrf.gbb_ybat";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-npgvirerpbeq.reebef.zrffntrf.gbb_fubeg";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-npgvirerpbeq.reebef.zrffntrf.jebat_yratgu";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-npgvirerpbeq.reebef.zrffntrf.abg_n_ahzore";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-npgvirerpbeq.reebef.zrffntrf.abg_na_vagrtre";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-npgvirerpbeq.reebef.zrffntrf.terngre_guna";a:2:{i:0;R:18031;i:1;R:17673;}s:66:"1242:jrofvgr-npgvirerpbeq.reebef.zrffntrf.terngre_guna_be_rdhny_gb";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-npgvirerpbeq.reebef.zrffntrf.rdhny_gb";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-npgvirerpbeq.reebef.zrffntrf.yrff_guna";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-npgvirerpbeq.reebef.zrffntrf.yrff_guna_be_rdhny_gb";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-npgvirerpbeq.reebef.zrffntrf.bqq";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-npgvirerpbeq.reebef.zrffntrf.rira";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-npgvirerpbeq.reebef.zrffntrf.vanpprffvoyr";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-npgvirerpbeq.reebef.zrffntrf.jebat_glcr";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-npgvirerpbeq.reebef.shyy_zrffntrf.sbezng";a:2:{i:0;R:18031;i:1;R:17673;}s:82:"1242:jrofvgr-npgvirerpbeq.reebef.zbqryf.uneirfg_rirag.nggevohgrf.choyvfu.vapyhfvba";a:2:{i:0;R:18031;i:1;R:17673;}s:81:"1242:jrofvgr-npgvirerpbeq.reebef.zbqryf.erfbhepr.nggevohgrf.npprffcbvag_hey.oynax";a:2:{i:0;R:18031;i:1;R:17673;}s:88:"1242:jrofvgr-npgvirerpbeq.reebef.zbqryf.erfbhepr.nggevohgrf.npprffcbvag_hey.vanpprffvoyr";a:2:{i:0;R:18031;i:1;R:17673;}s:83:"1242:jrofvgr-npgvirerpbeq.reebef.zbqryf.erfbhepr.nggevohgrf.npprffcbvag_hey.vainyvq";a:2:{i:0;R:18031;i:1;R:17673;}s:73:"1242:jrofvgr-npgvirerpbeq.reebef.zbqryf.erfbhepr.nggevohgrf.qngnfrg.oynax";a:2:{i:0;R:18031;i:1;R:17673;}s:78:"1242:jrofvgr-npgvirerpbeq.reebef.zbqryf.erfbhepr.nggevohgrf.qngnfrg.jebat_glcr";a:2:{i:0;R:18031;i:1;R:17673;}s:88:"1242:jrofvgr-npgvirerpbeq.reebef.zbqryf.erfbhepr.nggevohgrf.qjp_nepuvir_hey.vanpprffvoyr";a:2:{i:0;R:18031;i:1;R:17673;}s:83:"1242:jrofvgr-npgvirerpbeq.reebef.zbqryf.erfbhepr.nggevohgrf.qjp_nepuvir_hey.vainyvq";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-urycref.fryrpg.cebzcg";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-urycref.fhozvg.perngr";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-urycref.fhozvg.hcqngr";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-urycref.fhozvg.fhozvg";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-urycref.fhozvg.pbyyrpgvba_vgrz.hcqngr";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-urycref.fhozvg.pbagrag_cntr.perngr";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-urycref.fhozvg.pbagrag_cntr.rqvg";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-urycref.fhozvg.pbagrag_cntr.cerivrj";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-urycref.fhozvg.pbagrag_cntr.hcqngr";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-urycref.fhozvg.pbagrag_cnegare.perngr";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-urycref.fhozvg.pbagrag_cnegare.hcqngr";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-urycref.fhozvg.pbagrag_cnegare_nterrzrag.perngr";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-urycref.fhozvg.pbagrag_cnegare_nterrzrag.hcqngr";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-urycref.fhozvg.pbagrag_cnegare_nterrzrag.nterr";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-urycref.fhozvg.pbagrag_cnegare_pbagnpg.perngr";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-urycref.fhozvg.pbagrag_cnegare_pbagnpg.hcqngr";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-urycref.fhozvg.pbagrag_cnegare_pbagnpg.qrfgebl";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-urycref.fhozvg.qngn_bowrpg.perngr";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-urycref.fhozvg.qngn_bowrpg.perngr_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-urycref.fhozvg.qngn_bowrpg.hcqngr";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-urycref.fhozvg.uneirfg_rirag.choyvfu";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-urycref.fhozvg.uvrenepul.hcqngr";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-urycref.fhozvg.uvrenepul.erdhrfg_choyvfu";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-urycref.fhozvg.anzr.perngr";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-urycref.fhozvg.anzr.hcqngr";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-urycref.fhozvg.erfbhepr.perngr";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-urycref.fhozvg.erfbhepr.hcqngr";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-urycref.fhozvg.erfbhepr.hcqngr_frggvatf";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-urycref.fhozvg.erfbhepr.sbepr_uneirfg";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-urycref.fhozvg.frffvba.perngr";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-urycref.fhozvg.genafyngrq_pbagrag_cntr.perngr";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-urycref.fhozvg.genafyngrq_pbagrag_cntr.hcqngr";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-urycref.fhozvg.hfre.perngr";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-urycref.fhozvg.hfre.hcqngr";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-urycref.fhozvg.hfre.sbetbg_cnffjbeq";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-urycref.fhozvg.hfre.trarengr_ncv_xrl";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-urycref.fhozvg.hfre.phengvba_nccyvpngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-urycref.fhozvg.hfre.phengvba_cevivyrtrf";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-urycref.fhozvg.hfre.abgvsvpngvba_frggvatf";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-urycref.fhozvg.jvxvcrqvn_dhrhr.perngr";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-urycref.ynory.pbyyrpgvba.ivrj_fglyr_vq";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-urycref.ynory.pbyyrpgvba_vgrz.naabgngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-urycref.ynory.pbyyrpgvba_vgrz.ersf";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-urycref.ynory.pbyyrpgvba_vgrz.fbeg_svryq";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-urycref.ynory.pbyyrpgvba_vgrz.fbeg_svryq_fubj";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-urycref.ynory.pbzzrag.obql_rqvg";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-urycref.ynory.pbagrag_cntr.npgvir";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-urycref.ynory.pbagrag_cntr.npgvir_zber";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-urycref.ynory.pbagrag_cntr.cntr_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-urycref.ynory.pbagrag_cntr.cntr_anzr_zber";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-urycref.ynory.pbagrag_cntr.cnerag_pbagrag_cntr_vq";a:2:{i:0;R:18031;i:1;R:17673;}s:67:"1242:jrofvgr-urycref.ynory.pbagrag_cntr.cnerag_pbagrag_cntr_vq_zber";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-urycref.ynory.pbagrag_cnegare.perngrq_ng";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-urycref.ynory.pbagrag_cnegare.pheerag_nterrzrag";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-urycref.ynory.pbagrag_cnegare.qvfcynl_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-urycref.ynory.pbagrag_cnegare.qvfcynl_anzr_zber";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-urycref.ynory.pbagrag_cnegare.qrfpevcgvba_bs_qngn";a:2:{i:0;R:18031;i:1;R:17673;}s:67:"1242:jrofvgr-urycref.ynory.pbagrag_cnegare.qrfpevcgvba_bs_qngn_zber";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-urycref.ynory.pbagrag_cnegare.ynfg_npgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:73:"1242:jrofvgr-urycref.ynory.pbagrag_cnegare.yngrfg_choyvfurq_uneirfg_rirag";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-urycref.ynory.pbagrag_cnegare.ybtb_pheerag";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-urycref.ynory.pbagrag_cnegare.ybtb_arj";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-urycref.ynory.pbagrag_cnegare.abgrf";a:2:{i:0;R:18031;i:1;R:17673;}s:73:"1242:jrofvgr-urycref.ynory.pbagrag_cnegare.byqrfg_choyvfurq_uneirfg_rirag";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-urycref.ynory.pbagrag_cnegare.choyvp_zber";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-urycref.ynory.pbagrag_cnegare.hfre_vq";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-urycref.ynory.pbagrag_cnegare_nterrzrag.zbh_hey";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-urycref.ynory.pbagrag_cnegare_nterrzrag.zbh_hey_zber";a:2:{i:0;R:18031;i:1;R:17673;}s:85:"1242:jrofvgr-urycref.ynory.pbagrag_cnegare_pbagnpg.rznvy_ercbegf_serdhrapl_ubhef_zber";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-urycref.ynory.qngn_bowrpg.ovoyvbtencuvp_pvgngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-urycref.ynory.qngn_bowrpg.qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-urycref.ynory.qngn_bowrpg.yvprafr_vq";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-urycref.ynory.qngn_bowrpg.yvprafr_vq_zber";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-urycref.ynory.qngn_bowrpg.bowrpg_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-urycref.ynory.qngn_bowrpg.gbp_vgrz";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-urycref.ynory.qngn_bowrpg.ersf";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-urycref.ynory.qngn_bowrpg.evtugf_ubyqre";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-urycref.ynory.qngn_bowrpg.evtugf_fgngrzrag";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-urycref.ynory.qngn_bowrpg.fbhepr_hey";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-urycref.ynory.rby_fgngvfgvp.qbjaybnq_nyy";a:2:{i:0;R:18031;i:1;R:17673;}s:72:"1242:jrofvgr-urycref.ynory.tbbtyr_nanylgvpf_cnegare_fhzznevrf.gnkn_cntrf";a:2:{i:0;R:18031;i:1;R:17673;}s:79:"1242:jrofvgr-urycref.ynory.tbbtyr_nanylgvpf_cnegare_fhzznevrf.gnkn_cntrf_ivrjrq";a:2:{i:0;R:18031;i:1;R:17673;}s:79:"1242:jrofvgr-urycref.ynory.tbbtyr_nanylgvpf_cnegare_fhzznevrf.havdhr_cntr_ivrjf";a:2:{i:0;R:18031;i:1;R:17673;}s:72:"1242:jrofvgr-urycref.ynory.tbbtyr_nanylgvpf_cnegare_fhzznevrf.cntr_ivrjf";a:2:{i:0;R:18031;i:1;R:17673;}s:74:"1242:jrofvgr-urycref.ynory.tbbtyr_nanylgvpf_cnegare_fhzznevrf.gvzr_ba_cntr";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-urycref.ynory.uneirfg_rirag.ortna_ng";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-urycref.ynory.uneirfg_rirag.pbzcyrgrq_ng";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-urycref.ynory.uneirfg_rirag.svefg_choyvfurq_ng";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-urycref.ynory.uneirfg_rirag.choyvfu_zber";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-urycref.ynory.uneirfg_rirag.choyvfurq_ng";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-urycref.ynory.uneirfg_rirag.choyvfurq_fgnghf";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-urycref.ynory.uvrenepul.oebjfnoyr_zber";a:2:{i:0;R:18031;i:1;R:17673;}s:64:"1242:jrofvgr-urycref.ynory.uvrenepul.oebjfnoyr_fgnghf_jvgu_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-urycref.ynory.uvrenepul.pbzcyrgr";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-urycref.ynory.uvrenepul.pbzcyrgr_zber";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-urycref.ynory.uvrenepul.erdhrfg_choyvfu";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-urycref.ynory.uvrenepul.erdhrfg_choyvfu_zber";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-urycref.ynory.erfbhepr.nqzvavfgengvba_frggvatf";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-urycref.ynory.erfbhepr.npprffcbvag_hey";a:2:{i:0;R:18031;i:1;R:17673;}s:67:"1242:jrofvgr-urycref.ynory.erfbhepr.npprffcbvag_hey_rkvfgvat_erzbir";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-urycref.ynory.erfbhepr.qngnfrg";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-urycref.ynory.erfbhepr.qngnfrg_rkvfgvat_ercynpr";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-urycref.ynory.erfbhepr.qngnfrg_rkvfgvat_erzbir";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-urycref.ynory.erfbhepr.qjp_nepuvir_hey";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-urycref.ynory.erfbhepr.uvrenepul";a:2:{i:0;R:18031;i:1;R:17673;}s:66:"1242:jrofvgr-urycref.ynory.erfbhepr.byqrfg_choyvfurq_uneirfg_rirag";a:2:{i:0;R:18031;i:1;R:17673;}s:66:"1242:jrofvgr-urycref.ynory.erfbhepr.yngrfg_choyvfurq_uneirfg_rirag";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-urycref.ynory.erfbhepr.yngrfg_uneirfg_rirag";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-urycref.ynory.erfbhepr.erserfu_crevbq_ubhef";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-urycref.ynory.erfbhepr.erfbhepr_fgnghf_vq";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-urycref.ynory.erfbhepr.erfbhepr_fgnghf";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-urycref.ynory.erfbhepr.erfbhepr_hey_be_svyr";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-urycref.ynory.erfbhepr.erfbhepr_hey_be_svyr_hey";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-urycref.ynory.erfbhepr.erfbhepr_hey_be_svyr_hcybnq";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-urycref.ynory.erfbhepr.gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-urycref.ynory.frffvba.cnffjbeq";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-urycref.ynory.frffvba.erzrzore_zr";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-urycref.ynory.frffvba.hfreanzr_be_rznvy";a:2:{i:0;R:18031;i:1;R:17673;}s:69:"1242:jrofvgr-urycref.ynory.genafyngrq_pbagrag_cntr.npgvir_genafyngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:74:"1242:jrofvgr-urycref.ynory.genafyngrq_pbagrag_cntr.npgvir_genafyngvba_zber";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-urycref.ynory.genafyngrq_pbagrag_cntr.ynathntr_vq";a:2:{i:0;R:18031;i:1;R:17673;}s:68:"1242:jrofvgr-urycref.ynory.genafyngrq_pbagrag_cntr.yrsg_pbagrag_zber";a:2:{i:0;R:18031;i:1;R:17673;}s:68:"1242:jrofvgr-urycref.ynory.genafyngrq_pbagrag_cntr.znva_pbagrag_zber";a:2:{i:0;R:18031;i:1;R:17673;}s:72:"1242:jrofvgr-urycref.ynory.genafyngrq_pbagrag_cntr.zrgn_qrfpevcgvba_zber";a:2:{i:0;R:18031;i:1;R:17673;}s:69:"1242:jrofvgr-urycref.ynory.genafyngrq_pbagrag_cntr.zrgn_xrljbeqf_zber";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-urycref.ynory.genafyngrq_pbagrag_cntr.gvgyr_zber";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-urycref.ynory.hfre.nterrq_jvgu_grezf";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-urycref.ynory.hfre.ncv_xrl_zber";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-urycref.ynory.hfre.ovb";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-urycref.ynory.hfre.perqragvnyf";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-urycref.ynory.hfre.perqragvnyf_zber";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-urycref.ynory.hfre.perqragvnyf_zber_npnqrzvp";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-urycref.ynory.hfre.perqragvnyf_zber_nhgube";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-urycref.ynory.hfre.perqragvnyf_zber_cebsrffvbany";a:2:{i:0;R:18031;i:1;R:17673;}s:77:"1242:jrofvgr-urycref.ynory.hfre.perqragvnyf_zber_fhpprffshy_nffvfgnag_phengbe";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-urycref.ynory.hfre.perqragvnyf_zber_ersreeny";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-urycref.ynory.hfre.phengvba_nccyvpngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-urycref.ynory.hfre.phengvba_nccyvpngvba_zber";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-urycref.ynory.hfre.phengbe_yriry";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-urycref.ynory.hfre.phengbe_fpbcr";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-urycref.ynory.hfre.phengbe_fpbcr_zber";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-urycref.ynory.hfre.rznvy_ercbegf_serdhrapl_ubhef";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-urycref.ynory.hfre.rznvy_frggvatf_fhozvg";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-urycref.ynory.hfre.ragrerq_cnffjbeq";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-urycref.ynory.hfre.trarengr_ncv_xrl";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-urycref.ynory.hfre.trarengr_ncv_xrl_zber";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-urycref.ynory.hfre.ybtb";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-urycref.ynory.hfre.arj_cnffjbeq";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-urycref.ynory.hfre.arj_cnffjbeq_pbasvezngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-urycref.ynory.hfre.abgvsvpngvba_frggvatf";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-urycref.ynory.hfre.abgvsvpngvba_frggvatf_zber";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-urycref.ynory.hfre.erdhrfgrq_phengbe_yriry";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-urycref.ynory.hfre.erdhrfgrq_phengbe_yriry_vq_zber";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-urycref.ynory.hfre.gnt_yvar";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-urycref.ynory.hfre.hfre_vqragvgvrf";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-urycref.ynory.hfre.hfreanzr";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-urycref.ynory.hfre.hfreanzr_be_rznvy";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-urycref.ynory.jvxvcrqvn_dhrhr.erivfvba_hey";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-urycref.ynory.jvxvcrqvn_dhrhr.erivfvba_hey_zber";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-jvyy_cntvangr.cerivbhf_ynory";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-jvyy_cntvangr.arkg_ynory";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-jvyy_cntvangr.cntr_tnc";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-snxre.yberz.jbeqf.0";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-snxre.yberz.jbeqf.1";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-snxre.yberz.jbeqf.2";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-snxre.yberz.jbeqf.3";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-snxre.yberz.jbeqf.4";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-snxre.yberz.jbeqf.5";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-snxre.yberz.jbeqf.6";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-snxre.yberz.jbeqf.7";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-snxre.yberz.jbeqf.8";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-snxre.yberz.jbeqf.9";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.10";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.11";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.12";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.13";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.14";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.15";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.16";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.17";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.18";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.19";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.20";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.21";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.22";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.23";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.24";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.25";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.26";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.27";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.28";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.29";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.30";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.31";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.32";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.33";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.34";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.35";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.36";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.37";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.38";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.39";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.40";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.41";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.42";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.43";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.44";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.45";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.46";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.47";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.48";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.49";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.50";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.51";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.52";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.53";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.54";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.55";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.56";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.57";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.58";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.59";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.60";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.61";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.62";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.63";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.64";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.65";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.66";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.67";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.68";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.69";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.70";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.71";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.72";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.73";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.74";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.75";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.76";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.77";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.78";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.79";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.80";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.81";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.82";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.83";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.84";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.85";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.86";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.87";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.88";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.89";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.90";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.91";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.92";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.93";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.94";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.95";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.96";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.97";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.98";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-snxre.yberz.jbeqf.99";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.100";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.101";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.102";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.103";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.104";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.105";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.106";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.107";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.108";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.109";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.110";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.111";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.112";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.113";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.114";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.115";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.116";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.117";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.118";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.119";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.120";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.121";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.122";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.123";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.124";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.125";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.126";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.127";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.128";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.129";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.130";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.131";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.132";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.133";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.134";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.135";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.136";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.137";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.138";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.139";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.140";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.141";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.142";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.143";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.144";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.145";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.146";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.147";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.148";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.149";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.150";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.151";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.152";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.153";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.154";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.155";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.156";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.157";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.158";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.159";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.160";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.161";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.162";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.163";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.164";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.165";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.166";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.167";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.168";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.169";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.170";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.171";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.172";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.173";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.174";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.175";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.176";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.177";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.178";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.179";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.180";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.181";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.182";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.183";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.184";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.185";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.186";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.187";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.188";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.189";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.190";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.191";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.192";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.193";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.194";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.195";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.196";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.197";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.198";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.199";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.200";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.201";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.202";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.203";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.204";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.205";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.206";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.207";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.208";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.209";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.210";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.211";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.212";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.213";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.214";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.215";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.216";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.217";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.218";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.219";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.220";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.221";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.222";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.223";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.224";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.225";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.226";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.227";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.228";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.229";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.230";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.231";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.232";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.233";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.234";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.235";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.236";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.237";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.238";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.239";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.240";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.241";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.242";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.243";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.244";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.245";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.246";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.247";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-snxre.yberz.jbeqf.248";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-nqzvaf.fgngvfgvpf.pbagrag_cnegare_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-nqzvaf.fgngvfgvpf.phengbe_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-nqzvaf.fgngvfgvpf.qngn_bowrpg_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-nqzvaf.fgngvfgvpf.vaqrk_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-nqzvaf.fgngvfgvpf.yvsrqrfx_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-nqzvaf.fgngvfgvpf.znevar_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-nqzvaf.fgngvfgvpf.cntr_evpuarff_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-nqzvaf.fgngvfgvpf.hfre_nqqrq_qngn_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-nqzvaf.fgngvfgvpf.pbagrag_cnegare.cntr_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-nqzvaf.fgngvfgvpf.pbagrag_cnegare.cntr_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-nqzvaf.fgngvfgvpf.phengbe.cntr_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-nqzvaf.fgngvfgvpf.phengbe.cntr_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-nqzvaf.fgngvfgvpf.qngn_bowrpg.cntr_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-nqzvaf.fgngvfgvpf.qngn_bowrpg.cntr_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-nqzvaf.fgngvfgvpf.vaqrk.cntr_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-nqzvaf.fgngvfgvpf.vaqrk.cntr_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-nqzvaf.fgngvfgvpf.vaqrk.gnoyr_pncgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-nqzvaf.fgngvfgvpf.yvsrqrfx.cntr_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-nqzvaf.fgngvfgvpf.yvsrqrfx.cntr_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-nqzvaf.fgngvfgvpf.znevar.cntr_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-nqzvaf.fgngvfgvpf.znevar.cntr_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-nqzvaf.fgngvfgvpf.cntr_evpuarff.cntr_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-nqzvaf.fgngvfgvpf.cntr_evpuarff.cntr_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-nqzvaf.fgngvfgvpf.hfre_nqqrq_qngn.cntr_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-nqzvaf.fgngvfgvpf.hfre_nqqrq_qngn.cntr_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-pbyyrpgvbaf.fubj.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-pbyyrpgvbaf.fubj.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-pbyyrpgvbaf.fubj.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-pbyyrpgvbaf.fubj.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-pbyyrpgvbaf.rqvgbef.fubj.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-pbyyrpgvbaf.rqvgbef.fubj.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-pbyyrpgvbaf.rqvgbef.fubj.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-pbyyrpgvbaf.rqvgbef.fubj.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-pbyyrpgvbaf.arjfsrrqf.fubj.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-pbyyrpgvbaf.arjfsrrqf.fubj.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-pbyyrpgvbaf.arjfsrrqf.fubj.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-pbyyrpgvbaf.arjfsrrqf.fubj.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-pbzzhavgvrf.pbyyrpgvbaf.vaqrk.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-pbzzhavgvrf.pbyyrpgvbaf.vaqrk.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-pbzzhavgvrf.pbyyrpgvbaf.vaqrk.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-pbzzhavgvrf.pbyyrpgvbaf.vaqrk.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-pbzzhavgvrf.arjfsrrqf.fubj.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-pbzzhavgvrf.arjfsrrqf.fubj.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-pbzzhavgvrf.arjfsrrqf.fubj.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-pbzzhavgvrf.arjfsrrqf.fubj.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-pbzzhavgvrf.fubj.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-pbzzhavgvrf.fubj.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-pbagrag.vaqrk.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-pbagrag.vaqrk.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-pbagrag.vaqrk.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-pbagrag_cnegaref.fgngvfgvpf.fubj.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-pbagrag_cnegaref.fgngvfgvpf.fubj.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-pbagrag_cnegaref.fgngvfgvpf.fubj.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-pbagrag_cnegaref.fgngvfgvpf.fubj.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-pbagrag_cnegaref.vaqrk.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-pbagrag_cnegaref.vaqrk.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-pbagrag_cnegaref.vaqrk.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-pbagrag_cnegaref.fubj.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-pbagrag_cnegaref.fubj.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-pbagrag_cnegaref.fubj.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-pbagrag_cnegaref.fubj.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-pbagrag_cnegaref.rqvg.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-qngn_bowrpgf.fubj.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-qngn_bowrpgf.fubj.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-zrzoref.vaqrk.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-zrzoref.vaqrk.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-zrzoref.vaqrk.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-zrzoref.vaqrk.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-zrzoref.fubj.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-zrzoref.fubj.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-zrzoref.fubj.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-zrzoref.fubj.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-abgvsvre.npgvivgl_ybt_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-abgvsvre.npgvivgl_hfre_nqqrq_nffbpvngvba_ba_qngr";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-abgvsvre.npgvivgl_hfre_erzbirq_nffbpvngvba_ba_qngr";a:2:{i:0;R:18031;i:1;R:17673;}s:71:"1242:jrofvgr-abgvsvre.npgvivgl_hfre_nqqrq_nffbpvngvba_sbe_gnkba_ba_qngr";a:2:{i:0;R:18031;i:1;R:17673;}s:73:"1242:jrofvgr-abgvsvre.npgvivgl_hfre_erzbirq_nffbpvngvba_sbe_gnkba_ba_qngr";a:2:{i:0;R:18031;i:1;R:17673;}s:83:"1242:jrofvgr-abgvsvre.npgvivgl_hfre_znexrq_qngn_bowrpg_nf_gehfgrq_sbe_gnkba_ba_qngr";a:2:{i:0;R:18031;i:1;R:17673;}s:75:"1242:jrofvgr-abgvsvre.npgvivgl_hfre_znexrq_qngn_bowrpg_nf_hagehfgrq_ba_qngr";a:2:{i:0;R:18031;i:1;R:17673;}s:85:"1242:jrofvgr-abgvsvre.npgvivgl_hfre_znexrq_qngn_bowrpg_nf_hagehfgrq_sbe_gnkba_ba_qngr";a:2:{i:0;R:18031;i:1;R:17673;}s:79:"1242:jrofvgr-abgvsvre.npgvivgl_hfre_znexrq_qngn_bowrpg_nf_vanccebcevngr_ba_qngr";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-abgvsvre.pbzzragf_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-abgvsvre.terrgvat_qrne_anzr_jvgu_pbzzn";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-abgvsvre.fvtangher_onfvp";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-abgvsvre.fvtangher_jvgu_fhccbeg_pbagnpg";a:2:{i:0;R:18031;i:1;R:17673;}s:64:"1242:jrofvgr-abgvsvre.fvtangher_jvgu_fcrpvrf_cntrf_tebhc_pbagnpg";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-abgvsvre.hfre_pbzzragrq_ba_fbzrguvat_qngr_obql";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-abgvsvre.npgvivgl_ba_pbagrag_cnegare_pbagrag.fhowrpg";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-abgvsvre.npgvivgl_ba_pbagrag_cnegare_pbagrag.zrffntr";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-abgvsvre.npgvivgl_ba_hfre_pbagrag.fhowrpg";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-abgvsvre.npgvivgl_ba_hfre_pbagrag.zrffntr";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-abgvsvre.pbagnpg_hf_zrffntr.fhowrpg";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-abgvsvre.pbagnpg_hf_zrffntr.zrffntr";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-abgvsvre.pbagnpg_hf_nhgb_erfcbafr.fhowrpg";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-abgvsvre.pbagnpg_hf_nhgb_erfcbafr.zrffntr";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-abgvsvre.pbagrag_cnegare_perngrq.fhowrpg";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-abgvsvre.pbagrag_cnegare_perngrq.zrffntr";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-abgvsvre.pbagrag_cnegare_erfbhepr_perngrq.fhowrpg";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-abgvsvre.pbagrag_cnegare_erfbhepr_perngrq.zrffntr";a:2:{i:0;R:18031;i:1;R:17673;}s:76:"1242:jrofvgr-abgvsvre.pbagrag_cnegare_erfbhepr_sbepr_uneirfg_erdhrfg.fhowrpg";a:2:{i:0;R:18031;i:1;R:17673;}s:76:"1242:jrofvgr-abgvsvre.pbagrag_cnegare_erfbhepr_sbepr_uneirfg_erdhrfg.zrffntr";a:2:{i:0;R:18031;i:1;R:17673;}s:80:"1242:jrofvgr-abgvsvre.pbagrag_cnegare_erfbhepr_uvrenepul_choyvfu_erdhrfg.fhowrpg";a:2:{i:0;R:18031;i:1;R:17673;}s:80:"1242:jrofvgr-abgvsvre.pbagrag_cnegare_erfbhepr_uvrenepul_choyvfu_erdhrfg.zrffntr";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-abgvsvre.pbagrag_cnegare_fgngvfgvpf_erzvaqre.fhowrpg";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-abgvsvre.pbagrag_cnegare_fgngvfgvpf_erzvaqre.zrffntr";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-abgvsvre.phengbe_nccebirq.fhowrpg";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-abgvsvre.phengbe_nccebirq.zrffntr";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-abgvsvre.hfre_npgvingrq.fhowrpg";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-abgvsvre.hfre_npgvingrq.zrffntr";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-abgvsvre.hfre_zrffntr.fhowrpg";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-abgvsvre.hfre_hcqngrq_rznvy_cersreraprf.fhowrpg";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-abgvsvre.hfre_hcqngrq_rznvy_cersreraprf.zrffntr";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-abgvsvre.hfre_erfrg_cnffjbeq.fhowrpg";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-abgvsvre.hfre_erfrg_cnffjbeq.zrffntr";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-abgvsvre.hfre_irevsvpngvba.fhowrpg";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-erprag_npgvivgl.vageb";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-erprag_npgvivgl.hafhofpevor";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-erprag_npgvivgl.ohyx_pbzzragf_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-erprag_npgvivgl.ohyx_phengvba_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:64:"1242:jrofvgr-erprag_npgvivgl.ohyx_pbyyrpgvba_npgvivgl_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-erprag_npgvivgl.ohyx_pbzzhavgl_npgvivgl_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-erprag_npgvivgl.ohyx_pbzzhavgl_wbvaf_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-erprag_npgvivgl.qrsnhyg_fhowrpg";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-erprag_npgvivgl.pbzzrag_obql_oevrs";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-erprag_npgvivgl.pbzzrag_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-erprag_npgvivgl.pbzzrag_gvgyr_lbhe_arjfsrrq";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-erprag_npgvivgl.pbyyrpgvba_npgvivgl_ybt_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-erprag_npgvivgl.pbzzhavgl_npgvivgl_ybt_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-erprag_npgvivgl.phengbe_npgvivgl_ybt_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-erprag_npgvivgl.qngn_bowrpg_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-erprag_npgvivgl.fbzrbar_pbzzragrq_ba_fbzrguvat";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-erprag_npgvivgl.pbzzrag_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-erprag_npgvivgl.pbyyrpgvba_npgvivgl_ol_hfre";a:2:{i:0;R:18031;i:1;R:17673;}s:64:"1242:jrofvgr-erprag_npgvivgl.pbyyrpgvba_npgvivgl_hfre_nqqrq_vgrz";a:2:{i:0;R:18031;i:1;R:17673;}s:72:"1242:jrofvgr-erprag_npgvivgl.pbyyrpgvba_npgvivgl_hfre_jngpuvat_erpvcvrag";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-erprag_npgvivgl.pbzzhavgl_npgvivgl_ol_hfre";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-erprag_npgvivgl.pbzzhavgl_npgvivgl_hfre_wbvarq";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-erprag_npgvivgl.pbzzhavgl_npgvivgl_hfre_yrsg";a:2:{i:0;R:18031;i:1;R:17673;}s:74:"1242:jrofvgr-erprag_npgvivgl.pbzzhavgl_npgvivgl_hfre_znqr_zrzore_n_znantre";a:2:{i:0;R:18031;i:1;R:17673;}s:68:"1242:jrofvgr-erprag_npgvivgl.phengbe_npgvivgl_ba_qngn_bowrpg_ol_hfre";a:2:{i:0;R:18031;i:1;R:17673;}s:70:"1242:jrofvgr-erprag_npgvivgl.phengbe_npgvivgl_ba_gnkba_pbaprcg_ol_hfre";a:2:{i:0;R:18031;i:1;R:17673;}s:71:"1242:jrofvgr-erprag_npgvivgl.qngn_bowrpg_npgvivgl_negvpyr_nqqrq_ol_hfre";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-frffvbaf.arj.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:68:"1242:jrofvgr-gnkn.pbzzhavgvrf.vaqrk.uvrenepul_ragel.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:85:"1242:jrofvgr-gnkn.pbzzhavgvrf.vaqrk.uvrenepul_ragel.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-gnkn.pbzzhavgvrf.vaqrk.uvrenepul_ragel.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-gnkn.pbzzhavgvrf.vaqrk.uvrenepul_ragel.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:79:"1242:jrofvgr-gnkn.pbzzhavgvrf.vaqrk.uvrenepul_ragel.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-gnkn.pbzzhavgvrf.vaqrk.uvrenepul_ragel.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-gnkn.pbzzhavgvrf.vaqrk.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:69:"1242:jrofvgr-gnkn.pbzzhavgvrf.vaqrk.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-gnkn.pbzzhavgvrf.vaqrk.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:66:"1242:jrofvgr-gnkn.pbzzhavgvrf.vaqrk.zrgn_xrljbeqf_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-gnkn.pbzzhavgvrf.vaqrk.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-gnkn.pbzzhavgvrf.vaqrk.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-gnkn.pbzzhavgvrf.vaqrk.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:74:"1242:jrofvgr-gnkn.pbzzhavgvrf.pbyyrpgvbaf.uvrenepul_ragel.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:91:"1242:jrofvgr-gnkn.pbzzhavgvrf.pbyyrpgvbaf.uvrenepul_ragel.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:71:"1242:jrofvgr-gnkn.pbzzhavgvrf.pbyyrpgvbaf.uvrenepul_ragel.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:68:"1242:jrofvgr-gnkn.pbzzhavgvrf.pbyyrpgvbaf.uvrenepul_ragel.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:85:"1242:jrofvgr-gnkn.pbzzhavgvrf.pbyyrpgvbaf.uvrenepul_ragel.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:68:"1242:jrofvgr-gnkn.pbzzhavgvrf.pbyyrpgvbaf.uvrenepul_ragel.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-gnkn.pbzzhavgvrf.pbyyrpgvbaf.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:75:"1242:jrofvgr-gnkn.pbzzhavgvrf.pbyyrpgvbaf.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-gnkn.pbzzhavgvrf.pbyyrpgvbaf.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:72:"1242:jrofvgr-gnkn.pbzzhavgvrf.pbyyrpgvbaf.zrgn_xrljbeqf_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-gnkn.pbzzhavgvrf.pbyyrpgvbaf.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:69:"1242:jrofvgr-gnkn.pbzzhavgvrf.pbyyrpgvbaf.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-gnkn.pbzzhavgvrf.pbyyrpgvbaf.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-gnkn.pbzzhavgvrf.phengbef.uvrenepul_ragel.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:82:"1242:jrofvgr-gnkn.pbzzhavgvrf.phengbef.uvrenepul_ragel.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-gnkn.pbzzhavgvrf.phengbef.uvrenepul_ragel.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-gnkn.pbzzhavgvrf.phengbef.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:72:"1242:jrofvgr-gnkn.pbzzhavgvrf.phengbef.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-gnkn.pbzzhavgvrf.phengbef.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:69:"1242:jrofvgr-gnkn.pbzzhavgvrf.phengbef.zrgn_xrljbeqf_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-gnkn.pbzzhavgvrf.phengbef.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:66:"1242:jrofvgr-gnkn.pbzzhavgvrf.phengbef.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-gnkn.pbzzhavgvrf.phengbef.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:64:"1242:jrofvgr-gnkn.qrgnvyf.vaqrk.uvrenepul_ragel.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:82:"1242:jrofvgr-gnkn.qrgnvyf.vaqrk.uvrenepul_ragel.zrgn_qrfpevcgvba_jvgu_puncgre_yvfg";a:2:{i:0;R:18031;i:1;R:17673;}s:81:"1242:jrofvgr-gnkn.qrgnvyf.vaqrk.uvrenepul_ragel.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:99:"1242:jrofvgr-gnkn.qrgnvyf.vaqrk.uvrenepul_ragel.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr_jvgu_puncgre_yvfg";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-gnkn.qrgnvyf.vaqrk.uvrenepul_ragel.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-gnkn.qrgnvyf.vaqrk.uvrenepul_ragel.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:75:"1242:jrofvgr-gnkn.qrgnvyf.vaqrk.uvrenepul_ragel.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-gnkn.qrgnvyf.vaqrk.uvrenepul_ragel.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-gnkn.qrgnvyf.vaqrk.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:66:"1242:jrofvgr-gnkn.qrgnvyf.vaqrk.zrgn_qrfpevcgvba_jvgu_puncgre_yvfg";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-gnkn.qrgnvyf.vaqrk.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:83:"1242:jrofvgr-gnkn.qrgnvyf.vaqrk.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr_jvgu_puncgre_yvfg";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-gnkn.qrgnvyf.vaqrk.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-gnkn.qrgnvyf.vaqrk.zrgn_xrljbeqf_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-gnkn.qrgnvyf.vaqrk.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-gnkn.qrgnvyf.vaqrk.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-gnkn.qrgnvyf.vaqrk.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-gnkn.yvgrengher.ouy.uvrenepul_ragel.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:82:"1242:jrofvgr-gnkn.yvgrengher.ouy.uvrenepul_ragel.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-gnkn.yvgrengher.ouy.uvrenepul_ragel.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-gnkn.yvgrengher.ouy.uvrenepul_ragel.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:76:"1242:jrofvgr-gnkn.yvgrengher.ouy.uvrenepul_ragel.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-gnkn.yvgrengher.ouy.uvrenepul_ragel.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-gnkn.yvgrengher.ouy.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:66:"1242:jrofvgr-gnkn.yvgrengher.ouy.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-gnkn.yvgrengher.ouy.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-gnkn.yvgrengher.ouy.zrgn_xrljbeqf_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-gnkn.yvgrengher.ouy.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-gnkn.yvgrengher.ouy.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-gnkn.yvgrengher.ouy.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:66:"1242:jrofvgr-gnkn.yvgrengher.fubj.uvrenepul_ragel.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:83:"1242:jrofvgr-gnkn.yvgrengher.fubj.uvrenepul_ragel.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-gnkn.yvgrengher.fubj.uvrenepul_ragel.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-gnkn.yvgrengher.fubj.uvrenepul_ragel.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:77:"1242:jrofvgr-gnkn.yvgrengher.fubj.uvrenepul_ragel.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-gnkn.yvgrengher.fubj.uvrenepul_ragel.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-gnkn.yvgrengher.fubj.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:67:"1242:jrofvgr-gnkn.yvgrengher.fubj.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-gnkn.yvgrengher.fubj.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:64:"1242:jrofvgr-gnkn.yvgrengher.fubj.zrgn_xrljbeqf_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-gnkn.yvgrengher.fubj.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-gnkn.yvgrengher.fubj.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-gnkn.yvgrengher.fubj.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-gnkn.zncf.fubj.uvrenepul_ragel.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:77:"1242:jrofvgr-gnkn.zncf.fubj.uvrenepul_ragel.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-gnkn.zncf.fubj.uvrenepul_ragel.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-gnkn.zncf.fubj.uvrenepul_ragel.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:71:"1242:jrofvgr-gnkn.zncf.fubj.uvrenepul_ragel.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-gnkn.zncf.fubj.uvrenepul_ragel.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-gnkn.zncf.fubj.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-gnkn.zncf.fubj.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-gnkn.zncf.fubj.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-gnkn.zncf.fubj.zrgn_xrljbeqf_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-gnkn.zncf.fubj.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-gnkn.zncf.fubj.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-gnkn.zncf.fubj.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-gnkn.zrqvn.vaqrk.uvrenepul_ragel.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:79:"1242:jrofvgr-gnkn.zrqvn.vaqrk.uvrenepul_ragel.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-gnkn.zrqvn.vaqrk.uvrenepul_ragel.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:76:"1242:jrofvgr-gnkn.zrqvn.vaqrk.uvrenepul_ragel.zrgn_xrljbeqf_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-gnkn.zrqvn.vaqrk.uvrenepul_ragel.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:73:"1242:jrofvgr-gnkn.zrqvn.vaqrk.uvrenepul_ragel.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-gnkn.zrqvn.vaqrk.uvrenepul_ragel.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-gnkn.zrqvn.vaqrk.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-gnkn.zrqvn.vaqrk.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-gnkn.zrqvn.vaqrk.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-gnkn.zrqvn.vaqrk.zrgn_xrljbeqf_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-gnkn.zrqvn.vaqrk.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-gnkn.zrqvn.vaqrk.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-gnkn.zrqvn.vaqrk.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-gnkn.anzrf.vaqrk.uvrenepul_ragel.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:79:"1242:jrofvgr-gnkn.anzrf.vaqrk.uvrenepul_ragel.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-gnkn.anzrf.vaqrk.uvrenepul_ragel.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-gnkn.anzrf.vaqrk.uvrenepul_ragel.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:73:"1242:jrofvgr-gnkn.anzrf.vaqrk.uvrenepul_ragel.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-gnkn.anzrf.vaqrk.uvrenepul_ragel.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-gnkn.anzrf.vaqrk.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-gnkn.anzrf.vaqrk.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-gnkn.anzrf.vaqrk.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-gnkn.anzrf.vaqrk.zrgn_xrljbeqf_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-gnkn.anzrf.vaqrk.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-gnkn.anzrf.vaqrk.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-gnkn.anzrf.vaqrk.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:69:"1242:jrofvgr-gnkn.anzrf.pbzzba_anzrf.uvrenepul_ragel.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:86:"1242:jrofvgr-gnkn.anzrf.pbzzba_anzrf.uvrenepul_ragel.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:66:"1242:jrofvgr-gnkn.anzrf.pbzzba_anzrf.uvrenepul_ragel.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:83:"1242:jrofvgr-gnkn.anzrf.pbzzba_anzrf.uvrenepul_ragel.zrgn_xrljbeqf_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-gnkn.anzrf.pbzzba_anzrf.uvrenepul_ragel.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:80:"1242:jrofvgr-gnkn.anzrf.pbzzba_anzrf.uvrenepul_ragel.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-gnkn.anzrf.pbzzba_anzrf.uvrenepul_ragel.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-gnkn.anzrf.pbzzba_anzrf.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:70:"1242:jrofvgr-gnkn.anzrf.pbzzba_anzrf.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-gnkn.anzrf.pbzzba_anzrf.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:67:"1242:jrofvgr-gnkn.anzrf.pbzzba_anzrf.zrgn_xrljbeqf_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-gnkn.anzrf.pbzzba_anzrf.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:64:"1242:jrofvgr-gnkn.anzrf.pbzzba_anzrf.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-gnkn.anzrf.pbzzba_anzrf.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-gnkn.anzrf.flabalzf.uvrenepul_ragel.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:82:"1242:jrofvgr-gnkn.anzrf.flabalzf.uvrenepul_ragel.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-gnkn.anzrf.flabalzf.uvrenepul_ragel.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:79:"1242:jrofvgr-gnkn.anzrf.flabalzf.uvrenepul_ragel.zrgn_xrljbeqf_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-gnkn.anzrf.flabalzf.uvrenepul_ragel.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:76:"1242:jrofvgr-gnkn.anzrf.flabalzf.uvrenepul_ragel.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-gnkn.anzrf.flabalzf.uvrenepul_ragel.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-gnkn.anzrf.flabalzf.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:66:"1242:jrofvgr-gnkn.anzrf.flabalzf.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-gnkn.anzrf.flabalzf.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-gnkn.anzrf.flabalzf.zrgn_xrljbeqf_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-gnkn.anzrf.flabalzf.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-gnkn.anzrf.flabalzf.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-gnkn.anzrf.flabalzf.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-gnkn.bireivrjf.fubj.uvrenepul_ragel.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:82:"1242:jrofvgr-gnkn.bireivrjf.fubj.uvrenepul_ragel.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-gnkn.bireivrjf.fubj.uvrenepul_ragel.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:79:"1242:jrofvgr-gnkn.bireivrjf.fubj.uvrenepul_ragel.zrgn_xrljbeqf_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-gnkn.bireivrjf.fubj.uvrenepul_ragel.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:76:"1242:jrofvgr-gnkn.bireivrjf.fubj.uvrenepul_ragel.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-gnkn.bireivrjf.fubj.uvrenepul_ragel.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-gnkn.bireivrjf.fubj.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:66:"1242:jrofvgr-gnkn.bireivrjf.fubj.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-gnkn.bireivrjf.fubj.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-gnkn.bireivrjf.fubj.zrgn_xrljbeqf_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-gnkn.bireivrjf.fubj.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-gnkn.bireivrjf.fubj.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-gnkn.bireivrjf.fubj.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-gnkn.erfbheprf.fubj.uvrenepul_ragel.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:82:"1242:jrofvgr-gnkn.erfbheprf.fubj.uvrenepul_ragel.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-gnkn.erfbheprf.fubj.uvrenepul_ragel.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:79:"1242:jrofvgr-gnkn.erfbheprf.fubj.uvrenepul_ragel.zrgn_xrljbeqf_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-gnkn.erfbheprf.fubj.uvrenepul_ragel.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:76:"1242:jrofvgr-gnkn.erfbheprf.fubj.uvrenepul_ragel.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-gnkn.erfbheprf.fubj.uvrenepul_ragel.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-gnkn.erfbheprf.fubj.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:66:"1242:jrofvgr-gnkn.erfbheprf.fubj.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-gnkn.erfbheprf.fubj.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-gnkn.erfbheprf.fubj.zrgn_xrljbeqf_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-gnkn.erfbheprf.fubj.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-gnkn.erfbheprf.fubj.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-gnkn.erfbheprf.fubj.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:77:"1242:jrofvgr-gnkn.erfbheprf.ovbzrqvpny_grezf.uvrenepul_ragel.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:94:"1242:jrofvgr-gnkn.erfbheprf.ovbzrqvpny_grezf.uvrenepul_ragel.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:74:"1242:jrofvgr-gnkn.erfbheprf.ovbzrqvpny_grezf.uvrenepul_ragel.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:71:"1242:jrofvgr-gnkn.erfbheprf.ovbzrqvpny_grezf.uvrenepul_ragel.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:88:"1242:jrofvgr-gnkn.erfbheprf.ovbzrqvpny_grezf.uvrenepul_ragel.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:71:"1242:jrofvgr-gnkn.erfbheprf.ovbzrqvpny_grezf.uvrenepul_ragel.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-gnkn.erfbheprf.ovbzrqvpny_grezf.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:78:"1242:jrofvgr-gnkn.erfbheprf.ovbzrqvpny_grezf.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-gnkn.erfbheprf.ovbzrqvpny_grezf.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:75:"1242:jrofvgr-gnkn.erfbheprf.ovbzrqvpny_grezf.zrgn_xrljbeqf_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-gnkn.erfbheprf.ovbzrqvpny_grezf.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:72:"1242:jrofvgr-gnkn.erfbheprf.ovbzrqvpny_grezf.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-gnkn.erfbheprf.ovbzrqvpny_grezf.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:70:"1242:jrofvgr-gnkn.erfbheprf.rqhpngvba.uvrenepul_ragel.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:87:"1242:jrofvgr-gnkn.erfbheprf.rqhpngvba.uvrenepul_ragel.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:67:"1242:jrofvgr-gnkn.erfbheprf.rqhpngvba.uvrenepul_ragel.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:64:"1242:jrofvgr-gnkn.erfbheprf.rqhpngvba.uvrenepul_ragel.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:81:"1242:jrofvgr-gnkn.erfbheprf.rqhpngvba.uvrenepul_ragel.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:64:"1242:jrofvgr-gnkn.erfbheprf.rqhpngvba.uvrenepul_ragel.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-gnkn.erfbheprf.rqhpngvba.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:71:"1242:jrofvgr-gnkn.erfbheprf.rqhpngvba.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-gnkn.erfbheprf.rqhpngvba.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:68:"1242:jrofvgr-gnkn.erfbheprf.rqhpngvba.zrgn_xrljbeqf_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-gnkn.erfbheprf.rqhpngvba.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-gnkn.erfbheprf.rqhpngvba.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-gnkn.erfbheprf.rqhpngvba.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:85:"1242:jrofvgr-gnkn.erfbheprf.vqragvsvpngvba_erfbheprf.uvrenepul_ragel.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:102:"1242:jrofvgr-gnkn.erfbheprf.vqragvsvpngvba_erfbheprf.uvrenepul_ragel.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:82:"1242:jrofvgr-gnkn.erfbheprf.vqragvsvpngvba_erfbheprf.uvrenepul_ragel.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:79:"1242:jrofvgr-gnkn.erfbheprf.vqragvsvpngvba_erfbheprf.uvrenepul_ragel.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:96:"1242:jrofvgr-gnkn.erfbheprf.vqragvsvpngvba_erfbheprf.uvrenepul_ragel.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:79:"1242:jrofvgr-gnkn.erfbheprf.vqragvsvpngvba_erfbheprf.uvrenepul_ragel.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:69:"1242:jrofvgr-gnkn.erfbheprf.vqragvsvpngvba_erfbheprf.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:86:"1242:jrofvgr-gnkn.erfbheprf.vqragvsvpngvba_erfbheprf.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:66:"1242:jrofvgr-gnkn.erfbheprf.vqragvsvpngvba_erfbheprf.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:83:"1242:jrofvgr-gnkn.erfbheprf.vqragvsvpngvba_erfbheprf.zrgn_xrljbeqf_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-gnkn.erfbheprf.vqragvsvpngvba_erfbheprf.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:80:"1242:jrofvgr-gnkn.erfbheprf.vqragvsvpngvba_erfbheprf.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-gnkn.erfbheprf.vqragvsvpngvba_erfbheprf.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:81:"1242:jrofvgr-gnkn.erfbheprf.ahpyrbgvqr_frdhraprf.uvrenepul_ragel.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:98:"1242:jrofvgr-gnkn.erfbheprf.ahpyrbgvqr_frdhraprf.uvrenepul_ragel.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:78:"1242:jrofvgr-gnkn.erfbheprf.ahpyrbgvqr_frdhraprf.uvrenepul_ragel.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:75:"1242:jrofvgr-gnkn.erfbheprf.ahpyrbgvqr_frdhraprf.uvrenepul_ragel.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:92:"1242:jrofvgr-gnkn.erfbheprf.ahpyrbgvqr_frdhraprf.uvrenepul_ragel.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:75:"1242:jrofvgr-gnkn.erfbheprf.ahpyrbgvqr_frdhraprf.uvrenepul_ragel.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-gnkn.erfbheprf.ahpyrbgvqr_frdhraprf.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:82:"1242:jrofvgr-gnkn.erfbheprf.ahpyrbgvqr_frdhraprf.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-gnkn.erfbheprf.ahpyrbgvqr_frdhraprf.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:79:"1242:jrofvgr-gnkn.erfbheprf.ahpyrbgvqr_frdhraprf.zrgn_xrljbeqf_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-gnkn.erfbheprf.ahpyrbgvqr_frdhraprf.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:76:"1242:jrofvgr-gnkn.erfbheprf.ahpyrbgvqr_frdhraprf.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-gnkn.erfbheprf.ahpyrbgvqr_frdhraprf.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-gnkn.hcqngrf.fubj.uvrenepul_ragel.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:80:"1242:jrofvgr-gnkn.hcqngrf.fubj.uvrenepul_ragel.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-gnkn.hcqngrf.fubj.uvrenepul_ragel.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-gnkn.hcqngrf.fubj.uvrenepul_ragel.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:74:"1242:jrofvgr-gnkn.hcqngrf.fubj.uvrenepul_ragel.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-gnkn.hcqngrf.fubj.uvrenepul_ragel.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-gnkn.hcqngrf.fubj.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:64:"1242:jrofvgr-gnkn.hcqngrf.fubj.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-gnkn.hcqngrf.fubj.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-gnkn.hcqngrf.fubj.zrgn_xrljbeqf_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-gnkn.hcqngrf.fubj.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-gnkn.hcqngrf.fubj.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-gnkn.hcqngrf.fubj.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:69:"1242:jrofvgr-gnkn.hcqngrf.fgngvfgvpf.uvrenepul_ragel.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:86:"1242:jrofvgr-gnkn.hcqngrf.fgngvfgvpf.uvrenepul_ragel.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:66:"1242:jrofvgr-gnkn.hcqngrf.fgngvfgvpf.uvrenepul_ragel.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-gnkn.hcqngrf.fgngvfgvpf.uvrenepul_ragel.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:80:"1242:jrofvgr-gnkn.hcqngrf.fgngvfgvpf.uvrenepul_ragel.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-gnkn.hcqngrf.fgngvfgvpf.uvrenepul_ragel.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-gnkn.hcqngrf.fgngvfgvpf.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:70:"1242:jrofvgr-gnkn.hcqngrf.fgngvfgvpf.zrgn_qrfpevcgvba_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-gnkn.hcqngrf.fgngvfgvpf.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:67:"1242:jrofvgr-gnkn.hcqngrf.fgngvfgvpf.zrgn_xrljbeqf_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-gnkn.hcqngrf.fgngvfgvpf.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:64:"1242:jrofvgr-gnkn.hcqngrf.fgngvfgvpf.zrgn_gvgyr_jvgu_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-gnkn.hcqngrf.fgngvfgvpf.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-hfref.npgvivgvrf.fubj.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-hfref.npgvivgvrf.fubj.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-hfref.npgvivgvrf.fubj.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-hfref.npgvivgvrf.fubj.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-hfref.pbyyrpgvbaf.vaqrk.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-hfref.pbyyrpgvbaf.vaqrk.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-hfref.pbyyrpgvbaf.vaqrk.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-hfref.pbyyrpgvbaf.vaqrk.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-hfref.pbzzhavgvrf.vaqrk.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-hfref.pbzzhavgvrf.vaqrk.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-hfref.pbzzhavgvrf.vaqrk.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-hfref.pbzzhavgvrf.vaqrk.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-hfref.pbagrag_cnegaref.vaqrk.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-hfref.pbagrag_cnegaref.vaqrk.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-hfref.pbagrag_cnegaref.vaqrk.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-hfref.pbagrag_cnegaref.vaqrk.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-hfref.arjfsrrqf.npgvivgl_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-hfref.arjfsrrqf.pbzzragf_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-hfref.arjfsrrqf.arjfsrrq_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-hfref.arjfsrrqf.fubj.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-hfref.arjfsrrqf.fubj.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-hfref.arjfsrrqf.fubj.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-hfref.arjfsrrqf.fubj.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-hfref.abgvsvpngvbaf.rqvg.cntr_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-hfref.abgvsvpngvbaf.rqvg.cntr_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-hfref.fubj.zrgn_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-hfref.fubj.zrgn_qrfpevcgvba_phengbe";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-hfref.fubj.zrgn_xrljbeqf";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-hfref.fubj.zrgn_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-hfref.fubj.gjrrg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-guvf_negvpyr_pnaabg_or_phengrq_orpnhfr_hachoyvfurq";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-guvf_negvpyr_vf_hachoyvfurq";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-guvf_vzntr_pnaabg_or_phengrq_orpnhfr_hachoyvfurq";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-guvf_vzntr_vf_hachoyvfurq";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-guvf_vzntr_znc_pnaabg_or_phengrq_orpnhfr_hachoyvfurq";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-guvf_vzntr_znc_vf_hachoyvfurq";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-guvf_znc_pnaabg_or_phengrq_orpnhfr_hachoyvfurq";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-guvf_znc_vf_hachoyvfurq";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-guvf_ivqrb_pnaabg_or_phengrq_orpnhfr_hachoyvfurq";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-guvf_ivqrb_vf_hachoyvfurq";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-guvf_fbhaq_pnaabg_or_phengrq_orpnhfr_hachoyvfurq";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-guvf_fbhaq_vf_hachoyvfurq";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-negvpyr_abg_nffbpvngrq_jvgu_nal_choyvfurq_ragevrf";a:2:{i:0;R:18031;i:1;R:17673;}s:67:"1242:jrofvgr-haxabja_glcr_abg_nffbpvngrq_jvgu_nal_choyvfurq_ragevrf";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-vzntr_abg_nffbpvngrq_jvgu_nal_choyvfurq_ragevrf";a:2:{i:0;R:18031;i:1;R:17673;}s:64:"1242:jrofvgr-vzntr_znc_abg_nffbpvngrq_jvgu_nal_choyvfurq_ragevrf";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-znc_abg_nffbpvngrq_jvgu_nal_choyvfurq_ragevrf";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-ivqrb_abg_nffbpvngrq_jvgu_nal_choyvfurq_ragevrf";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-fbhaq_abg_nffbpvngrq_jvgu_nal_choyvfurq_ragevrf";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-fbhaq_nyg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-vzntr_nyg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-znc_nyg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-vzntr_znc_nyg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-ivqrb_nyg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-negvpyr_sebz_fhccyvre";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-fbhaq_sebz_fhccyvre";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-vzntr_sebz_fhccyvre";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-znc_sebz_fhccyvre";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-vzntr_znc_sebz_fhccyvre";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-ivqrb_sebz_fhccyvre";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-negvpyr_bs";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-fbhaq_bs";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-vzntr_bs";a:2:{i:0;R:18031;i:1;R:17673;}s:19:"1242:jrofvgr-znc_bs";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-vzntr_znc_bs";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-ivqrb_bs";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-negvpyr_bs_gnkba";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-fbhaq_bs_gnkba";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-vzntr_bs_gnkba";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-znc_bs_gnkba";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-vzntr_znc_bs_gnkba";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-ivqrb_bs_gnkba";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-negvpyr_engvat";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-pbzzhavgl_engvat";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-pbyyrpgvba_engvat";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-vzntr_znc_engvat";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-vzntr_engvat";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-crefba_engvat";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-fbhaq_engvat";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-gnkba_engvat";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-ivqrb_engvat";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-znc_engvat";a:2:{i:0;R:18031;i:1;R:17673;}s:19:"1242:jrofvgr-0_be_1";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-0_1_be_2";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-1fg_ivrj";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-nobhg_rby";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-nppbhag_vasbezngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-nppbhag_vasbezngvba_zrah";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-nppbhag_ertvfgrerq_ohg_abg_ernql_gel_yngre";a:2:{i:0;R:18031;i:1;R:17673;}s:19:"1242:jrofvgr-npgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-npgvba_abg_ninvynoyr_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-npgvbaf";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-npgvir_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:19:"1242:jrofvgr-npgvir";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-npgvivgl";a:2:{i:0;R:18031;i:1;R:17673;}s:102:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.nqq_rqvgbe.na_haxabja_hfre_bs_na_haxabja_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:91:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.nqq_rqvgbe.na_haxabja_hfre_bs_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:91:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.nqq_rqvgbe.hfre_bs_na_haxabja_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:80:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.nqq_rqvgbe.hfre_bs_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:83:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.nqq_rqvgbe.na_haxabja_hfre_bs_vg";a:2:{i:0;R:18031;i:1;R:17673;}s:72:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.nqq_rqvgbe.hfre_bs_vg";a:2:{i:0;R:18031;i:1;R:17673;}s:103:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.perngr.na_haxabja_hfre_perngrq_na_haxabja_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:92:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.perngr.na_haxabja_hfre_perngrq_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:92:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.perngr.hfre_perngrq_na_haxabja_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:81:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.perngr.hfre_perngrq_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:84:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.perngr.na_haxabja_hfre_perngrq_vg";a:2:{i:0;R:18031;i:1;R:17673;}s:73:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.perngr.hfre_perngrq_vg";a:2:{i:0;R:18031;i:1;R:17673;}s:107:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.erzbir_nyy.na_haxabja_hfre_pyrnerq_na_haxabja_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:96:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.erzbir_nyy.na_haxabja_hfre_pyrnerq_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:96:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.erzbir_nyy.hfre_pyrnerq_na_haxabja_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:85:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.erzbir_nyy.hfre_pyrnerq_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:88:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.erzbir_nyy.na_haxabja_hfre_pyrnerq_vg";a:2:{i:0;R:18031;i:1;R:17673;}s:77:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.erzbir_nyy.hfre_pyrnerq_vg";a:2:{i:0;R:18031;i:1;R:17673;}s:124:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.erzbir.na_haxabja_hfre_erzbirq_na_haxabja_vgrz_sebz_na_haxabja_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:113:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.erzbir.na_haxabja_hfre_erzbirq_na_haxabja_vgrz_sebz_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:113:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.erzbir.na_haxabja_hfre_erzbirq_vgrz_sebz_na_haxabja_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:102:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.erzbir.na_haxabja_hfre_erzbirq_vgrz_sebz_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:113:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.erzbir.hfre_erzbirq_na_haxabja_vgrz_sebz_na_haxabja_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:102:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.erzbir.hfre_erzbirq_na_haxabja_vgrz_sebz_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:102:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.erzbir.hfre_erzbirq_vgrz_sebz_na_haxabja_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:91:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.erzbir.hfre_erzbirq_vgrz_sebz_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:105:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.erzbir.na_haxabja_hfre_erzbirq_na_haxabja_vgrz_sebz_vg";a:2:{i:0;R:18031;i:1;R:17673;}s:94:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.erzbir.na_haxabja_hfre_erzbirq_vgrz_sebz_vg";a:2:{i:0;R:18031;i:1;R:17673;}s:94:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.erzbir.hfre_erzbirq_na_haxabja_vgrz_sebz_vg";a:2:{i:0;R:18031;i:1;R:17673;}s:83:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.erzbir.hfre_erzbirq_vgrz_sebz_vg";a:2:{i:0;R:18031;i:1;R:17673;}s:121:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.pbyyrpg.na_haxabja_hfre_nqqrq_na_haxabja_vgrz_gb_na_haxabja_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:110:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.pbyyrpg.na_haxabja_hfre_nqqrq_na_haxabja_vgrz_gb_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:110:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.pbyyrpg.na_haxabja_hfre_nqqrq_vgrz_gb_na_haxabja_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:99:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.pbyyrpg.na_haxabja_hfre_nqqrq_vgrz_gb_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:110:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.pbyyrpg.hfre_nqqrq_na_haxabja_vgrz_gb_na_haxabja_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:99:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.pbyyrpg.hfre_nqqrq_na_haxabja_vgrz_gb_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:99:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.pbyyrpg.hfre_nqqrq_vgrz_gb_na_haxabja_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:88:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.pbyyrpg.hfre_nqqrq_vgrz_gb_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:102:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.pbyyrpg.na_haxabja_hfre_nqqrq_na_haxabja_vgrz_gb_vg";a:2:{i:0;R:18031;i:1;R:17673;}s:91:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.pbyyrpg.na_haxabja_hfre_nqqrq_vgrz_gb_vg";a:2:{i:0;R:18031;i:1;R:17673;}s:91:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.pbyyrpg.hfre_nqqrq_na_haxabja_vgrz_gb_vg";a:2:{i:0;R:18031;i:1;R:17673;}s:80:"1242:jrofvgr-npgvivgl_ybtf.pbyyrpgvba_npgvivgl_ybt.pbyyrpg.hfre_nqqrq_vgrz_gb_vg";a:2:{i:0;R:18031;i:1;R:17673;}s:101:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.perngr.na_haxabja_hfre_perngrq_na_haxabja_pbzzhavgl";s:13:"bhg-rby-0-nyy";s:90:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.perngr.na_haxabja_hfre_perngrq_pbzzhavgl";R:19283;s:90:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.perngr.hfre_perngrq_na_haxabja_pbzzhavgl";R:19283;s:79:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.perngr.hfre_perngrq_pbzzhavgl";R:19283;s:98:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.wbva.na_haxabja_hfre_wbvarq_na_haxabja_pbzzhavgl";R:19283;s:87:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.wbva.na_haxabja_hfre_wbvarq_pbzzhavgl";R:19283;s:87:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.wbva.hfre_wbvarq_na_haxabja_pbzzhavgl";R:19283;s:76:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.wbva.hfre_wbvarq_pbzzhavgl";R:19283;s:97:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.yrnir.na_haxabja_hfre_yrsg_na_haxabja_pbzzhavgl";R:19283;s:86:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.yrnir.na_haxabja_hfre_yrsg_pbzzhavgl";R:19283;s:86:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.yrnir.hfre_yrsg_na_haxabja_pbzzhavgl";R:19283;s:75:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.yrnir.hfre_yrsg_pbzzhavgl";R:19283;s:132:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.punatr_qrfpevcgvba.na_haxabja_hfre_punatrq_gur_qrfpevcgvba_bs_na_haxabja_pbzzhavgl";R:19283;s:121:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.punatr_qrfpevcgvba.na_haxabja_hfre_punatrq_gur_qrfpevcgvba_bs_pbzzhavgl";R:19283;s:121:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.punatr_qrfpevcgvba.hfre_punatrq_gur_qrfpevcgvba_bs_na_haxabja_pbzzhavgl";R:19283;s:110:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.punatr_qrfpevcgvba.hfre_punatrq_gur_qrfpevcgvba_bs_pbzzhavgl";R:19283;s:118:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.punatr_anzr.na_haxabja_hfre_punatrq_gur_anzr_bs_na_haxabja_pbzzhavgl";R:19283;s:107:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.punatr_anzr.na_haxabja_hfre_punatrq_gur_anzr_bs_pbzzhavgl";R:19283;s:107:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.punatr_anzr.hfre_punatrq_gur_anzr_bs_na_haxabja_pbzzhavgl";R:19283;s:96:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.punatr_anzr.hfre_punatrq_gur_anzr_bs_pbzzhavgl";R:19283;s:118:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.punatr_vpba.na_haxabja_hfre_punatrq_gur_vpba_bs_na_haxabja_pbzzhavgl";R:19283;s:107:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.punatr_vpba.na_haxabja_hfre_punatrq_gur_vpba_bs_pbzzhavgl";R:19283;s:107:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.punatr_vpba.hfre_punatrq_gur_vpba_bs_na_haxabja_pbzzhavgl";R:19283;s:96:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.punatr_vpba.hfre_punatrq_gur_vpba_bs_pbzzhavgl";R:19283;s:126:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.nqq_znantre.na_haxabja_hfre_nqqrq_na_haxabja_znantre_gb_na_haxabja_pbzzhavgl";R:19283;s:115:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.nqq_znantre.na_haxabja_hfre_nqqrq_na_haxabja_znantre_gb_pbzzhavgl";R:19283;s:115:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.nqq_znantre.na_haxabja_hfre_nqqrq_znantre_gb_na_haxabja_pbzzhavgl";R:19283;s:104:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.nqq_znantre.na_haxabja_hfre_nqqrq_znantre_gb_pbzzhavgl";R:19283;s:115:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.nqq_znantre.hfre_nqqrq_na_haxabja_znantre_gb_na_haxabja_pbzzhavgl";R:19283;s:104:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.nqq_znantre.hfre_nqqrq_na_haxabja_znantre_gb_pbzzhavgl";R:19283;s:104:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.nqq_znantre.hfre_nqqrq_znantre_gb_na_haxabja_pbzzhavgl";R:19283;s:93:"1242:jrofvgr-npgvivgl_ybtf.pbzzhavgl_npgvivgl_ybt.nqq_znantre.hfre_nqqrq_znantre_gb_pbzzhavgl";R:19283;s:66:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.ernfbaf_gb_hagehfg";R:19283;s:63:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.ernfbaf_gb_uvqr";R:19283;s:126:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.gehfgrq.na_haxabja_hfre_gehfgrq_na_byqre_qngn_bowrpg_ba_na_haxabja_nffbpvngvba";R:19283;s:115:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.gehfgrq.na_haxabja_hfre_gehfgrq_na_byqre_qngn_bowrpg_ba_nffbpvngvba";R:19283;s:128:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.gehfgrq.na_haxabja_hfre_gehfgrq_na_haxabja_qngn_bowrpg_ba_na_haxabja_nffbpvngvba";R:19283;s:117:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.gehfgrq.na_haxabja_hfre_gehfgrq_na_haxabja_qngn_bowrpg_ba_nffbpvngvba";R:19283;s:117:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.gehfgrq.na_haxabja_hfre_gehfgrq_qngn_bowrpg_ba_na_haxabja_nffbpvngvba";R:19283;s:106:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.gehfgrq.na_haxabja_hfre_gehfgrq_qngn_bowrpg_ba_nffbpvngvba";R:19283;s:115:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.gehfgrq.hfre_gehfgrq_na_byqre_qngn_bowrpg_ba_na_haxabja_nffbpvngvba";R:19283;s:104:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.gehfgrq.hfre_gehfgrq_na_byqre_qngn_bowrpg_ba_nffbpvngvba";R:19283;s:117:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.gehfgrq.hfre_gehfgrq_na_haxabja_qngn_bowrpg_ba_na_haxabja_nffbpvngvba";R:19283;s:106:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.gehfgrq.hfre_gehfgrq_na_haxabja_qngn_bowrpg_ba_nffbpvngvba";R:19283;s:106:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.gehfgrq.hfre_gehfgrq_qngn_bowrpg_ba_na_haxabja_nffbpvngvba";R:19283;s:95:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.gehfgrq.hfre_gehfgrq_qngn_bowrpg_ba_nffbpvngvba";R:19283;s:97:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.gehfgrq.hfre_gehfgrq_vg_ba_na_haxabja_nffbpvngvba";R:19283;s:86:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.gehfgrq.hfre_gehfgrq_vg_ba_nffbpvngvba";R:19283;s:108:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.gehfgrq.na_haxabja_hfre_gehfgrq_vg_ba_na_haxabja_nffbpvngvba";R:19283;s:97:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.gehfgrq.na_haxabja_hfre_gehfgrq_vg_ba_nffbpvngvba";R:19283;s:130:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.hagehfgrq.na_haxabja_hfre_hagehfgrq_na_byqre_qngn_bowrpg_ba_na_haxabja_nffbpvngvba";R:19283;s:119:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.hagehfgrq.na_haxabja_hfre_hagehfgrq_na_byqre_qngn_bowrpg_ba_nffbpvngvba";R:19283;s:132:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.hagehfgrq.na_haxabja_hfre_hagehfgrq_na_haxabja_qngn_bowrpg_ba_na_haxabja_nffbpvngvba";R:19283;s:121:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.hagehfgrq.na_haxabja_hfre_hagehfgrq_na_haxabja_qngn_bowrpg_ba_nffbpvngvba";R:19283;s:121:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.hagehfgrq.na_haxabja_hfre_hagehfgrq_qngn_bowrpg_ba_na_haxabja_nffbpvngvba";R:19283;s:110:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.hagehfgrq.na_haxabja_hfre_hagehfgrq_qngn_bowrpg_ba_nffbpvngvba";R:19283;s:119:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.hagehfgrq.hfre_hagehfgrq_na_byqre_qngn_bowrpg_ba_na_haxabja_nffbpvngvba";R:19283;s:108:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.hagehfgrq.hfre_hagehfgrq_na_byqre_qngn_bowrpg_ba_nffbpvngvba";R:19283;s:121:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.hagehfgrq.hfre_hagehfgrq_na_haxabja_qngn_bowrpg_ba_na_haxabja_nffbpvngvba";R:19283;s:110:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.hagehfgrq.hfre_hagehfgrq_na_haxabja_qngn_bowrpg_ba_nffbpvngvba";R:19283;s:110:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.hagehfgrq.hfre_hagehfgrq_qngn_bowrpg_ba_na_haxabja_nffbpvngvba";R:19283;s:99:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.hagehfgrq.hfre_hagehfgrq_qngn_bowrpg_ba_nffbpvngvba";R:19283;s:112:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.hagehfgrq.na_haxabja_hfre_hagehfgrq_vg_ba_na_haxabja_nffbpvngvba";R:19283;s:101:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.hagehfgrq.na_haxabja_hfre_hagehfgrq_vg_ba_nffbpvngvba";R:19283;s:101:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.hagehfgrq.hfre_hagehfgrq_vg_ba_na_haxabja_nffbpvngvba";R:19283;s:90:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.hagehfgrq.hfre_hagehfgrq_vg_ba_nffbpvngvba";R:19283;s:122:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.fubj.na_haxabja_hfre_fubjrq_na_byqre_qngn_bowrpg_ba_na_haxabja_nffbpvngvba";R:19283;s:111:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.fubj.na_haxabja_hfre_fubjrq_na_byqre_qngn_bowrpg_ba_nffbpvngvba";R:19283;s:124:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.fubj.na_haxabja_hfre_fubjrq_na_haxabja_qngn_bowrpg_ba_na_haxabja_nffbpvngvba";R:19283;s:113:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.fubj.na_haxabja_hfre_fubjrq_na_haxabja_qngn_bowrpg_ba_nffbpvngvba";R:19283;s:113:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.fubj.na_haxabja_hfre_fubjrq_qngn_bowrpg_ba_na_haxabja_nffbpvngvba";R:19283;s:102:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.fubj.na_haxabja_hfre_fubjrq_qngn_bowrpg_ba_nffbpvngvba";R:19283;s:111:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.fubj.hfre_fubjrq_na_byqre_qngn_bowrpg_ba_na_haxabja_nffbpvngvba";R:19283;s:100:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.fubj.hfre_fubjrq_na_byqre_qngn_bowrpg_ba_nffbpvngvba";R:19283;s:113:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.fubj.hfre_fubjrq_na_haxabja_qngn_bowrpg_ba_na_haxabja_nffbpvngvba";R:19283;s:102:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.fubj.hfre_fubjrq_na_haxabja_qngn_bowrpg_ba_nffbpvngvba";R:19283;s:102:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.fubj.hfre_fubjrq_qngn_bowrpg_ba_na_haxabja_nffbpvngvba";R:19283;s:91:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.fubj.hfre_fubjrq_qngn_bowrpg_ba_nffbpvngvba";R:19283;s:104:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.fubj.na_haxabja_hfre_fubjrq_vg_ba_na_haxabja_nffbpvngvba";R:19283;s:93:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.fubj.na_haxabja_hfre_fubjrq_vg_ba_nffbpvngvba";R:19283;s:93:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.fubj.hfre_fubjrq_vg_ba_na_haxabja_nffbpvngvba";R:19283;s:82:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.fubj.hfre_fubjrq_vg_ba_nffbpvngvba";R:19283;s:119:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.uvqr.na_haxabja_hfre_uvq_na_byqre_qngn_bowrpg_ba_na_haxabja_nffbpvngvba";R:19283;s:108:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.uvqr.na_haxabja_hfre_uvq_na_byqre_qngn_bowrpg_ba_nffbpvngvba";R:19283;s:121:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.uvqr.na_haxabja_hfre_uvq_na_haxabja_qngn_bowrpg_ba_na_haxabja_nffbpvngvba";R:19283;s:110:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.uvqr.na_haxabja_hfre_uvq_na_haxabja_qngn_bowrpg_ba_nffbpvngvba";R:19283;s:110:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.uvqr.na_haxabja_hfre_uvq_qngn_bowrpg_ba_na_haxabja_nffbpvngvba";R:19283;s:99:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.uvqr.na_haxabja_hfre_uvq_qngn_bowrpg_ba_nffbpvngvba";R:19283;s:108:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.uvqr.hfre_uvq_na_byqre_qngn_bowrpg_ba_na_haxabja_nffbpvngvba";R:19283;s:97:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.uvqr.hfre_uvq_na_byqre_qngn_bowrpg_ba_nffbpvngvba";R:19283;s:110:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.uvqr.hfre_uvq_na_haxabja_qngn_bowrpg_ba_na_haxabja_nffbpvngvba";R:19283;s:99:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.uvqr.hfre_uvq_na_haxabja_qngn_bowrpg_ba_nffbpvngvba";R:19283;s:99:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.uvqr.hfre_uvq_qngn_bowrpg_ba_na_haxabja_nffbpvngvba";R:19283;s:79:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.uvqr.hfre_uvq_vg_ba_nffbpvngvba";R:19283;s:101:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.uvqr.na_haxabja_hfre_uvq_vg_ba_na_haxabja_nffbpvngvba";R:19283;s:90:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.uvqr.na_haxabja_hfre_uvq_vg_ba_nffbpvngvba";R:19283;s:90:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.uvqr.hfre_uvq_vg_ba_na_haxabja_nffbpvngvba";R:19283;s:132:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.haerivrjrq.na_haxabja_hfre_haerivrjrq_na_byqre_qngn_bowrpg_ba_na_haxabja_nffbpvngvba";R:19283;s:121:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.haerivrjrq.na_haxabja_hfre_haerivrjrq_na_byqre_qngn_bowrpg_ba_nffbpvngvba";R:19283;s:134:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.haerivrjrq.na_haxabja_hfre_haerivrjrq_na_haxabja_qngn_bowrpg_ba_na_haxabja_nffbpvngvba";R:19283;s:123:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.haerivrjrq.na_haxabja_hfre_haerivrjrq_na_haxabja_qngn_bowrpg_ba_nffbpvngvba";R:19283;s:123:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.haerivrjrq.na_haxabja_hfre_haerivrjrq_qngn_bowrpg_ba_na_haxabja_nffbpvngvba";R:19283;s:112:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.haerivrjrq.na_haxabja_hfre_haerivrjrq_qngn_bowrpg_ba_nffbpvngvba";R:19283;s:121:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.haerivrjrq.hfre_haerivrjrq_na_byqre_qngn_bowrpg_ba_na_haxabja_nffbpvngvba";R:19283;s:110:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.haerivrjrq.hfre_haerivrjrq_na_byqre_qngn_bowrpg_ba_nffbpvngvba";R:19283;s:123:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.haerivrjrq.hfre_haerivrjrq_na_haxabja_qngn_bowrpg_ba_na_haxabja_nffbpvngvba";R:19283;s:112:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.haerivrjrq.hfre_haerivrjrq_na_haxabja_qngn_bowrpg_ba_nffbpvngvba";R:19283;s:112:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.haerivrjrq.hfre_haerivrjrq_qngn_bowrpg_ba_na_haxabja_nffbpvngvba";R:19283;s:101:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.haerivrjrq.hfre_haerivrjrq_qngn_bowrpg_ba_nffbpvngvba";R:19283;s:114:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.haerivrjrq.na_haxabja_hfre_haerivrjrq_vg_ba_na_haxabja_nffbpvngvba";R:19283;s:103:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.haerivrjrq.na_haxabja_hfre_haerivrjrq_vg_ba_nffbpvngvba";R:19283;s:103:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.haerivrjrq.hfre_haerivrjrq_vg_ba_na_haxabja_nffbpvngvba";R:19283;s:92:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.haerivrjrq.hfre_haerivrjrq_vg_ba_nffbpvngvba";R:19283;s:137:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.nqq_nffbpvngvba.na_haxabja_hfre_nffbpvngrq_na_byqre_qngn_bowrpg_gb_na_haxabja_nffbpvngvba";R:19283;s:126:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.nqq_nffbpvngvba.na_haxabja_hfre_nffbpvngrq_na_byqre_qngn_bowrpg_gb_nffbpvngvba";R:19283;s:139:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.nqq_nffbpvngvba.na_haxabja_hfre_nffbpvngrq_na_haxabja_qngn_bowrpg_gb_na_haxabja_nffbpvngvba";R:19283;s:128:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.nqq_nffbpvngvba.na_haxabja_hfre_nffbpvngrq_na_haxabja_qngn_bowrpg_gb_nffbpvngvba";R:19283;s:128:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.nqq_nffbpvngvba.na_haxabja_hfre_nffbpvngrq_qngn_bowrpg_gb_na_haxabja_nffbpvngvba";R:19283;s:117:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.nqq_nffbpvngvba.na_haxabja_hfre_nffbpvngrq_qngn_bowrpg_gb_nffbpvngvba";R:19283;s:126:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.nqq_nffbpvngvba.hfre_nffbpvngrq_na_byqre_qngn_bowrpg_gb_na_haxabja_nffbpvngvba";R:19283;s:115:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.nqq_nffbpvngvba.hfre_nffbpvngrq_na_byqre_qngn_bowrpg_gb_nffbpvngvba";R:19283;s:128:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.nqq_nffbpvngvba.hfre_nffbpvngrq_na_haxabja_qngn_bowrpg_gb_na_haxabja_nffbpvngvba";R:19283;s:117:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.nqq_nffbpvngvba.hfre_nffbpvngrq_na_haxabja_qngn_bowrpg_gb_nffbpvngvba";R:19283;s:117:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.nqq_nffbpvngvba.hfre_nffbpvngrq_qngn_bowrpg_gb_na_haxabja_nffbpvngvba";R:19283;s:106:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.nqq_nffbpvngvba.hfre_nffbpvngrq_qngn_bowrpg_gb_nffbpvngvba";R:19283;s:119:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.nqq_nffbpvngvba.na_haxabja_hfre_nffbpvngrq_vg_gb_na_haxabja_nffbpvngvba";R:19283;s:108:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.nqq_nffbpvngvba.na_haxabja_hfre_nffbpvngrq_vg_gb_nffbpvngvba";R:19283;s:108:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.nqq_nffbpvngvba.hfre_nffbpvngrq_vg_gb_na_haxabja_nffbpvngvba";R:19283;s:97:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.nqq_nffbpvngvba.hfre_nffbpvngrq_vg_gb_nffbpvngvba";R:19283;s:139:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.erzbir_nffbpvngvba.na_haxabja_hfre_qvfnffbpvngrq_na_byqre_qngn_bowrpg_sebz_na_haxabja_gnkba";R:19283;s:128:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.erzbir_nffbpvngvba.na_haxabja_hfre_qvfnffbpvngrq_na_byqre_qngn_bowrpg_sebz_gnkba";R:19283;s:141:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.erzbir_nffbpvngvba.na_haxabja_hfre_qvfnffbpvngrq_na_haxabja_qngn_bowrpg_sebz_na_haxabja_gnkba";R:19283;s:130:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.erzbir_nffbpvngvba.na_haxabja_hfre_qvfnffbpvngrq_na_haxabja_qngn_bowrpg_sebz_gnkba";R:19283;s:130:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.erzbir_nffbpvngvba.na_haxabja_hfre_qvfnffbpvngrq_qngn_bowrpg_sebz_na_haxabja_gnkba";R:19283;s:119:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.erzbir_nffbpvngvba.na_haxabja_hfre_qvfnffbpvngrq_qngn_bowrpg_sebz_gnkba";R:19283;s:128:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.erzbir_nffbpvngvba.hfre_qvfnffbpvngrq_na_byqre_qngn_bowrpg_sebz_na_haxabja_gnkba";R:19283;s:117:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.erzbir_nffbpvngvba.hfre_qvfnffbpvngrq_na_byqre_qngn_bowrpg_sebz_gnkba";R:19283;s:130:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.erzbir_nffbpvngvba.hfre_qvfnffbpvngrq_na_haxabja_qngn_bowrpg_sebz_na_haxabja_gnkba";R:19283;s:119:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.erzbir_nffbpvngvba.hfre_qvfnffbpvngrq_na_haxabja_qngn_bowrpg_sebz_gnkba";R:19283;s:119:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.erzbir_nffbpvngvba.hfre_qvfnffbpvngrq_qngn_bowrpg_sebz_na_haxabja_gnkba";R:19283;s:108:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.erzbir_nffbpvngvba.hfre_qvfnffbpvngrq_qngn_bowrpg_sebz_gnkba";R:19283;s:121:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.erzbir_nffbpvngvba.na_haxabja_hfre_qvfnffbpvngrq_vg_sebz_na_haxabja_gnkba";R:19283;s:110:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.erzbir_nffbpvngvba.na_haxabja_hfre_qvfnffbpvngrq_vg_sebz_gnkba";R:19283;s:110:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.erzbir_nffbpvngvba.hfre_qvfnffbpvngrq_vg_sebz_na_haxabja_gnkba";R:19283;s:99:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.erzbir_nffbpvngvba.hfre_qvfnffbpvngrq_vg_sebz_gnkba";R:19283;s:135:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.pubbfr_rkrzcyne.na_haxabja_hfre_pubfr_rkrzcyne_na_byqre_qngn_bowrpg_ba_na_haxabja_gnkba";R:19283;s:124:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.pubbfr_rkrzcyne.na_haxabja_hfre_pubfr_rkrzcyne_na_byqre_qngn_bowrpg_ba_gnkba";R:19283;s:137:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.pubbfr_rkrzcyne.na_haxabja_hfre_pubfr_rkrzcyne_na_haxabja_qngn_bowrpg_ba_na_haxabja_gnkba";R:19283;s:126:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.pubbfr_rkrzcyne.na_haxabja_hfre_pubfr_rkrzcyne_na_haxabja_qngn_bowrpg_ba_gnkba";R:19283;s:126:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.pubbfr_rkrzcyne.na_haxabja_hfre_pubfr_rkrzcyne_qngn_bowrpg_ba_na_haxabja_gnkba";R:19283;s:115:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.pubbfr_rkrzcyne.na_haxabja_hfre_pubfr_rkrzcyne_qngn_bowrpg_ba_gnkba";R:19283;s:124:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.pubbfr_rkrzcyne.hfre_pubfr_rkrzcyne_na_byqre_qngn_bowrpg_ba_na_haxabja_gnkba";R:19283;s:113:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.pubbfr_rkrzcyne.hfre_pubfr_rkrzcyne_na_byqre_qngn_bowrpg_ba_gnkba";R:19283;s:126:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.pubbfr_rkrzcyne.hfre_pubfr_rkrzcyne_na_haxabja_qngn_bowrpg_ba_na_haxabja_gnkba";R:19283;s:115:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.pubbfr_rkrzcyne.hfre_pubfr_rkrzcyne_na_haxabja_qngn_bowrpg_ba_gnkba";R:19283;s:115:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.pubbfr_rkrzcyne.hfre_pubfr_rkrzcyne_qngn_bowrpg_ba_na_haxabja_gnkba";R:19283;s:104:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.pubbfr_rkrzcyne.hfre_pubfr_rkrzcyne_qngn_bowrpg_ba_gnkba";R:19283;s:117:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.pubbfr_rkrzcyne.na_haxabja_hfre_pubfr_rkrzcyne_vg_ba_na_haxabja_gnkba";R:19283;s:106:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.pubbfr_rkrzcyne.na_haxabja_hfre_pubfr_rkrzcyne_vg_ba_gnkba";R:19283;s:106:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.pubbfr_rkrzcyne.hfre_pubfr_rkrzcyne_vg_ba_na_haxabja_gnkba";R:19283;s:95:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.pubbfr_rkrzcyne.hfre_pubfr_rkrzcyne_vg_ba_gnkba";R:19283;s:121:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.nqq_pbzzba_anzr.na_haxabja_hfre_nqqrq_na_haxabja_anzr_gb_na_haxabja_gnkba";R:19283;s:110:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.nqq_pbzzba_anzr.na_haxabja_hfre_nqqrq_na_haxabja_anzr_gb_gnkba";R:19283;s:110:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.nqq_pbzzba_anzr.na_haxabja_hfre_nqqrq_anzr_gb_na_haxabja_gnkba";R:19283;s:99:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.nqq_pbzzba_anzr.na_haxabja_hfre_nqqrq_anzr_gb_gnkba";R:19283;s:110:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.nqq_pbzzba_anzr.hfre_nqqrq_na_haxabja_anzr_gb_na_haxabja_gnkba";R:19283;s:99:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.nqq_pbzzba_anzr.hfre_nqqrq_na_haxabja_anzr_gb_gnkba";R:19283;s:99:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.nqq_pbzzba_anzr.hfre_nqqrq_anzr_gb_na_haxabja_gnkba";R:19283;s:88:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.nqq_pbzzba_anzr.hfre_nqqrq_anzr_gb_gnkba";R:19283;s:107:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.nqq_pbzzba_anzr.na_haxabja_hfre_nqqrq_na_haxabja_anzr_gb_vg";R:19283;s:96:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.nqq_pbzzba_anzr.na_haxabja_hfre_nqqrq_anzr_gb_vg";R:19283;s:96:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.nqq_pbzzba_anzr.hfre_nqqrq_na_haxabja_anzr_gb_vg";R:19283;s:85:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.nqq_pbzzba_anzr.hfre_nqqrq_anzr_gb_vg";R:19283;s:117:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.erzbir_pbzzba_anzr.na_haxabja_hfre_erzbirq_anzr_sebz_na_haxabja_gnkba";R:19283;s:106:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.erzbir_pbzzba_anzr.na_haxabja_hfre_erzbirq_anzr_sebz_gnkba";R:19283;s:106:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.erzbir_pbzzba_anzr.hfre_erzbirq_anzr_sebz_na_haxabja_gnkba";R:19283;s:95:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.erzbir_pbzzba_anzr.hfre_erzbirq_anzr_sebz_gnkba";R:19283;s:103:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.erzbir_pbzzba_anzr.na_haxabja_hfre_erzbirq_anzr_sebz_vg";R:19283;s:92:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.erzbir_pbzzba_anzr.hfre_erzbirq_anzr_sebz_vg";R:19283;s:125:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.gehfg_pbzzba_anzr.na_haxabja_hfre_gehfgrq_na_haxabja_anzr_ba_na_haxabja_gnkba";R:19283;s:114:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.gehfg_pbzzba_anzr.na_haxabja_hfre_gehfgrq_na_haxabja_anzr_ba_gnkba";R:19283;s:114:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.gehfg_pbzzba_anzr.na_haxabja_hfre_gehfgrq_anzr_ba_na_haxabja_gnkba";R:19283;s:103:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.gehfg_pbzzba_anzr.na_haxabja_hfre_gehfgrq_anzr_ba_gnkba";R:19283;s:114:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.gehfg_pbzzba_anzr.hfre_gehfgrq_na_haxabja_anzr_ba_na_haxabja_gnkba";R:19283;s:103:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.gehfg_pbzzba_anzr.hfre_gehfgrq_na_haxabja_anzr_ba_gnkba";R:19283;s:103:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.gehfg_pbzzba_anzr.hfre_gehfgrq_anzr_ba_na_haxabja_gnkba";R:19283;s:92:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.gehfg_pbzzba_anzr.hfre_gehfgrq_anzr_ba_gnkba";R:19283;s:111:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.gehfg_pbzzba_anzr.na_haxabja_hfre_gehfgrq_na_haxabja_anzr_ba_vg";R:19283;s:100:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.gehfg_pbzzba_anzr.na_haxabja_hfre_gehfgrq_anzr_ba_vg";R:19283;s:100:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.gehfg_pbzzba_anzr.hfre_gehfgrq_na_haxabja_anzr_ba_vg";R:19283;s:89:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.gehfg_pbzzba_anzr.hfre_gehfgrq_anzr_ba_vg";R:19283;s:129:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.hagehfg_pbzzba_anzr.na_haxabja_hfre_hagehfgrq_na_haxabja_anzr_ba_na_haxabja_gnkba";R:19283;s:118:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.hagehfg_pbzzba_anzr.na_haxabja_hfre_hagehfgrq_na_haxabja_anzr_ba_gnkba";R:19283;s:118:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.hagehfg_pbzzba_anzr.na_haxabja_hfre_hagehfgrq_anzr_ba_na_haxabja_gnkba";R:19283;s:107:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.hagehfg_pbzzba_anzr.na_haxabja_hfre_hagehfgrq_anzr_ba_gnkba";R:19283;s:118:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.hagehfg_pbzzba_anzr.hfre_hagehfgrq_na_haxabja_anzr_ba_na_haxabja_gnkba";R:19283;s:107:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.hagehfg_pbzzba_anzr.hfre_hagehfgrq_na_haxabja_anzr_ba_gnkba";R:19283;s:107:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.hagehfg_pbzzba_anzr.hfre_hagehfgrq_anzr_ba_na_haxabja_gnkba";R:19283;s:96:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.hagehfg_pbzzba_anzr.hfre_hagehfgrq_anzr_ba_gnkba";R:19283;s:115:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.hagehfg_pbzzba_anzr.na_haxabja_hfre_hagehfgrq_na_haxabja_anzr_ba_vg";R:19283;s:104:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.hagehfg_pbzzba_anzr.na_haxabja_hfre_hagehfgrq_anzr_ba_vg";R:19283;s:104:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.hagehfg_pbzzba_anzr.hfre_hagehfgrq_na_haxabja_anzr_ba_vg";R:19283;s:93:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.hagehfg_pbzzba_anzr.hfre_hagehfgrq_anzr_ba_vg";R:19283;s:131:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.haerivrj_pbzzba_anzr.na_haxabja_hfre_haerivrjrq_na_haxabja_anzr_ba_na_haxabja_gnkba";R:19283;s:120:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.haerivrj_pbzzba_anzr.na_haxabja_hfre_haerivrjrq_na_haxabja_anzr_ba_gnkba";R:19283;s:120:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.haerivrj_pbzzba_anzr.na_haxabja_hfre_haerivrjrq_anzr_ba_na_haxabja_gnkba";R:19283;s:109:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.haerivrj_pbzzba_anzr.na_haxabja_hfre_haerivrjrq_anzr_ba_gnkba";R:19283;s:120:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.haerivrj_pbzzba_anzr.hfre_haerivrjrq_na_haxabja_anzr_ba_na_haxabja_gnkba";R:19283;s:109:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.haerivrj_pbzzba_anzr.hfre_haerivrjrq_na_haxabja_anzr_ba_gnkba";R:19283;s:109:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.haerivrj_pbzzba_anzr.hfre_haerivrjrq_anzr_ba_na_haxabja_gnkba";R:19283;s:98:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.haerivrj_pbzzba_anzr.hfre_haerivrjrq_anzr_ba_gnkba";R:19283;s:117:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.haerivrj_pbzzba_anzr.na_haxabja_hfre_haerivrjrq_na_haxabja_anzr_ba_vg";R:19283;s:106:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.haerivrj_pbzzba_anzr.na_haxabja_hfre_haerivrjrq_anzr_ba_vg";R:19283;s:106:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.haerivrj_pbzzba_anzr.hfre_haerivrjrq_na_haxabja_anzr_ba_vg";R:19283;s:95:"1242:jrofvgr-npgvivgl_ybtf.phengbe_npgvivgl_ybt.haerivrj_pbzzba_anzr.hfre_haerivrjrq_anzr_ba_vg";R:19283;s:31:"1242:jrofvgr-npgvivgl_ybt_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-npgvivgl_ybt_rzcgl_yrnea_zber_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-npgvivgl_hfre_perngrq_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-npgvivgl_hfre_hcqngrq_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-nqq_n_pbyyrpgvba_gb_n_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-nqq_n_pbzzrag";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-nqq_n_pbzzrag_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:16:"1242:jrofvgr-nqq";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-nqq_n_arj_pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-nqq_n_arj_svyr_oenpxrgf";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-nqq_n_arj_arjf_vgrz";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-nqq_n_arj_ebyr";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-nqq_n_arj_frnepu_fhttrfgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-nqq_n_arj_grez";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-nqq_n_arj_gbcvp_nern";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-nqq_n_arj_hfre";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-nqq_n_gnkba_nffbpvngvba_ynory";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-nqq_negvpyr_gb_cntr_yvax_ohggba";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-nqq_nffbpvngvba_fhozvg_ohggba";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-nqq_oevrs_fhzznel_gb_cntr_yvax_ohggba";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-nqq_pbyyrpgvba_gb_n_arj_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-nqq_pbyyrpgvba_gb_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-nqq_rqhpngvba_erfbheprf_gb_cntr_yvax_ohggba";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-nqq_vqragvsvpngvba_erfbheprf_gb_cntr_yvax_ohggba";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-nqq_vgrz_gb_arj_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-nqq_ynathntr";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-nqq_arj_nffbpvngvba_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-nqq_arj_gnt_fhttrfgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-nqq_cntr";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-nqq_fho_puncgre";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-nqq_gb_n_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-nqq_gb_zl_pbyyrpgvba_ohggba";a:2:{i:0;R:18031;i:1;R:17673;}s:18:"1242:jrofvgr-nqzva";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-nqzva_pbagrag_cntr_npgvir";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-nqzva_pbagrag_cntr_abg_npgvir";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-nqzva_pbagrag_cntr_puvyq_arj_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-nqzva_pbagrag_cntr_perngr_fhpprffshy_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-nqzva_pbagrag_cntr_perngr_hafhpprffshy_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-nqzva_pbagrag_cntr_qryrgr_pbasvezngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-nqzva_pbagrag_cntr_qryrgr_fhpprffshy_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-nqzva_pbagrag_cntr_rqvg_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-nqzva_pbagrag_cntr_rqvg_gvc";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-nqzva_pbagrag_cntr_arj_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-nqzva_pbagrag_cntr_arj_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-nqzva_pbagrag_cntr_arj_gvc";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-nqzva_pbagrag_cntr_cnerag_bcgvba_ebbg";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-nqzva_pbagrag_cntr_ebbg";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-nqzva_pbagrag_cntr_fbeg_beqre_hcqngrq";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-nqzva_pbagrag_cntr_hcqngr_fhpprffshy_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-nqzva_pbagrag_cntr_hcqngr_hafhpprffshy_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-nqzva_pbagrag_cntrf_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-nqzva_pbagrag_cntrf_vaqrk_vasbezngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-nqzva_pbagrag_cntrf_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-nqzva_pbagrag_cntrf_cntr_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-nqzva_pbagrag_cnegaref_vaqrk_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-nqzva_pbagrag_cnegaref_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-nqzva_pbagrag_cnegaref_cntr_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-nqzva_pbagrag_cnegaref_abgvsvpngvbaf_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-nqzva_pbagrag_cnegaref_abgvsvpngvbaf_cntr_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:75:"1242:jrofvgr-nqzva_pbagrag_cnegaref_abgvsvpngvbaf_frag_gb_erpvcvragf_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:76:"1242:jrofvgr-nqzva_pbagrag_cnegaref_abgvsvpngvbaf_fgngvfgvpf_erzvaqre_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:81:"1242:jrofvgr-nqzva_pbagrag_cnegaref_abgvsvpngvbaf_fgngvfgvpf_erzvaqre_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:81:"1242:jrofvgr-nqzva_pbagrag_cnegaref_abgvsvpngvbaf_fgngvfgvpf_erzvaqre_fraq_fhozvg";a:2:{i:0;R:18031;i:1;R:17673;}s:87:"1242:jrofvgr-nqzva_pbagrag_cnegaref_abgvsvpngvbaf_fgngvfgvpf_erzvaqre_fraq_pbasvezngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-nqzva_pbagrag_cnegaref_fgngvfgvpf_qngr_sebz_ynory";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-nqzva_pbagrag_cnegaref_fgngvfgvpf_qngr_gb_ynory";a:2:{i:0;R:18031;i:1;R:17673;}s:69:"1242:jrofvgr-nqzva_pbagrag_cnegaref_fgngvfgvpf_svefg_choyvfurq_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:70:"1242:jrofvgr-nqzva_pbagrag_cnegaref_fgngvfgvpf_svefg_choyvfurq_pncgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:68:"1242:jrofvgr-nqzva_pbagrag_cnegaref_fgngvfgvpf_svefg_choyvfurq_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:82:"1242:jrofvgr-nqzva_pbagrag_cnegaref_fgngvfgvpf_svefg_choyvfurq_qbjaybnq_pfi_fhozvg";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-nqzva_pbagrag_cnegaref_fgngvfgvpf_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-nqzva_pbagrag_cnegaref_fgngvfgvpf_cntr_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-nqzva_ubzr";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-nqzva_abgrf_abg_ivfvoyr_gb_hfre";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-nqzva_vasbezngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-nqzva_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-nqzva_cntr_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-nqzva_fgngvfgvpf_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:67:"1242:jrofvgr-nqzva_genafyngrq_pbagrag_cntr_perngr_fhpprffshy_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:68:"1242:jrofvgr-nqzva_genafyngrq_pbagrag_cntr_perngr_hafhpprffshy_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-nqzva_genafyngrq_pbagrag_cntr_qryrgr_pbasvezngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:67:"1242:jrofvgr-nqzva_genafyngrq_pbagrag_cntr_qryrgr_fhpprffshy_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-nqzva_genafyngrq_pbagrag_cntr_rqvg_fhournqre";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-nqzva_genafyngrq_pbagrag_cntr_rqvg_gvc";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-nqzva_genafyngrq_pbagrag_cntr_arj_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-nqzva_genafyngrq_pbagrag_cntr_arj_gvc";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-nqzva_genafyngrq_pbagrag_cntr_arj_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-nqzva_genafyngrq_pbagrag_cntr_arj_fhournqre";a:2:{i:0;R:18031;i:1;R:17673;}s:67:"1242:jrofvgr-nqzva_genafyngrq_pbagrag_cntr_hcqngr_fhpprffshy_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:68:"1242:jrofvgr-nqzva_genafyngrq_pbagrag_cntr_hcqngr_hafhpprffshy_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:18:"1242:jrofvgr-ntrag";a:2:{i:0;R:18031;i:1;R:17673;}s:16:"1242:jrofvgr-nyy";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-nyy_ncvf_erghea_ol_qrsnhyg_na_kzy_erfcbafr";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-nyy_negvpyrf";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-nyy_punatrf";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-nyy_pbyyrpgvbaf";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-nyy_pbzzragf_ragrerq_ol_hfref";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-nyy_pbzzhavgvrf";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-nyy_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-nyy_reebef";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-nyy_svygre";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-nyy_uneirfgvat_ybtf";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-nyy_vzntrf";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-nyy_vasbezngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-nyy_vgrzf";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-nyy_arjf";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-nyy_cntrf";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-nyy_crbcyr";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-nyy_fbhaqf";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-nyy_fbheprf";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-nyy_gnkn";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-nyy_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-nyy_hfre_fhozvggrq_grkgf_ba_gur_jrofvgr";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-nyy_ivqrbf";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-nyybj_hfre_ybtvaf";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-nyernql_n_zrzore_dhrfgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-nyernql_zrzore_bs_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-nygreangr_pynffvsvpngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:19:"1242:jrofvgr-nzbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-na_haxabja_hfre";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-nabalzbhf_hfre_shyy_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-nabalzbhf_hfre_tvira_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-nabalzbhf_hfre_gnt_yvar";a:2:{i:0;R:18031;i:1;R:17673;}s:16:"1242:jrofvgr-naq";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-naq_orgjrra_sbez_vgrzf";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-wfbac_ol_nqqvat_n_pnyyonpx_cnenzrgre";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-nal_vagrtre";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-ncv_qbpf_pbyyrpgvbaf_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-n_cvcr_qryvzvgrq_yvfg_bs_yvprafrf";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-n_cvcr_qryvzvgrq_yvfg_bs_fcz_vasb_vgrz_fhowrpg_anzrf";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-nccyvpngvba_irefvba_nqivfbel_vasbezngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-ner_lbh_fher";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-ner_lbh_fher_guvf_npgvba_pnaabg_or_haqbar";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-nqzva_ybtva_pbasvezngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-negvpyr_sebz";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-negvpyr_zber_nobhg";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-negvpyrf_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-negvpyrf_va_ynathntrf_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-negvpyrf_va_bgure_ynathntrf_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-nf_bs_gvzr_gurer_jrer_havdhr_ivfvgbef";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-n_gbgny_bs_pbzzrag_jrer_sbhaq_zngpuvat_lbhe_pevgrevn";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-n_gbgny_bs_vgrzf_jrer_sbhaq_zngpuvat_lbhe_pevgrevn";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-n_gbgny_bs_grezf_jrer_sbhaq_zngpuvat_lbhe";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-nffvfgvir_bireivrj_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-nffvfgvir_zrqvn_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-nffvfgvir_qrgnvyf_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-nffvfgvir_yvgrengher_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-nffvfgvir_anzrf_pbzzba_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-nffvfgvir_anzrf_eryngrq_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-nffvfgvir_anzrf_flabalzf_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-nffvfgvir_zncf_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-nffvfgvir_gnkba_pbzzhavgl_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-nffvfgvir_hcqngrf_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-nffvfgvir_hcqngrf_fgngvfgvpf_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-nffbpvngrq_fhozvg_ohggba";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-nffbpvngrq_jvgu_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-nffbpvngrq_jvgu_negvpyr_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-nffbpvngrq_jvgu_vzntr_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-nffbpvngrq_jvgu_vzntr_znc_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-nffbpvngrq_jvgu_znc_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-nffbpvngrq_jvgu_fbhaq_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-nffbpvngrq_jvgu_ivqrb_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-nffbpvngvbaf_zber_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-n_gnkba";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-nggevohgr";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-nhqvb_pheerag_gvzr_nffvfgvir";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-nhqvb_qhengvba_nffvfgvir";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-nhqvb_cynl";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-nhqvb_cynl_nffvfgvir";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-nhqvb_cnhfr";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-nhqvb_cnhfr_nffvfgvir";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-nhqvb_fgbc";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-nhqvb_fgbc_nffvfgvir";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-nhqvb_zhgr";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-nhqvb_hazhgr";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-nhgubevgngvir_vasbezngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:66:"1242:jrofvgr-nhgube_bs_crre_erivrjrq_choyvpngvba_perqragvny_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-ninvynoyr";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-nirentr_engvat_inyhr_bs_gbgny";a:2:{i:0;R:18031;i:1;R:17673;}s:17:"1242:jrofvgr-onpx";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-onpx_gb_cebsvyr";a:2:{i:0;R:18031;i:1;R:17673;}s:18:"1242:jrofvgr-ortna";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-orybatf_va_pbhag_pbzzhavgvrf";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-ouy_choyvpngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-ov_zbaguyl";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-ovbqvirefvgl_urevgntr_yvoenel";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-ovbzrqvpny_grezf";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-ovbzrqvpny_grezf_vagebqhpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-ovbzrqvpny_grezf_cebivqrq_ol";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-ovbzrqvpny_grezf_pybhqf_cebivqrq_ol";a:2:{i:0;R:18031;i:1;R:17673;}s:17:"1242:jrofvgr-obql";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-oebjfnoyr";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-oebjfnoyr_uvrenepuvrf";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-oebjfr_uvrenepul";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-oebjfvat_oenapu_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-ohvyq_pbzzhavgvrf";a:2:{i:0;R:18031;i:1;R:17673;}s:15:"1242:jrofvgr-ol";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-ol_pncf";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-ol_fpvragvsvp_anzr_gnoyr_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-pnpur_fgber";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-pnyphyngr_nirentrf_fybj";a:2:{i:0;R:18031;i:1;R:17673;}s:19:"1242:jrofvgr-pnapry";a:2:{i:0;R:18031;i:1;R:17673;}s:66:"1242:jrofvgr-pnaabg_or_nffbpvngrq_jvgu_obgu_n_hfre_naq_n_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-pnaabg_or_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-pnaabg_perngr_pbyyrpgvba_vgrz_sebz_pynff_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:64:"1242:jrofvgr-pnaabg_perngr_pbzzhavgl_sebz_jngpu_pbyyrpgvba_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-pnaabg_phengr_nffbpvngvba_va_cerivrj_zbqr";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-pnaabg_rkcnaq_puvyqera";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-pnaabg_svaq_zrzore";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-pnaabg_vaqrk_pbyyrpgvba_vgrz_glcr_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:19:"1242:jrofvgr-punatr";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-punatr_engvat_gb_1_bs_5";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-punatr_engvat_gb_2_bs_5";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-punatr_engvat_gb_3_bs_5";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-punatr_engvat_gb_4_bs_5";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-punatr_engvat_gb_5_bs_5";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-pubbfr_pbyyrpgvba_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-pvgvat_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-pynffvsvpngvba_gerr_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-pynffvsvpngvbaf_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-pynffvsvpngvbaf_fhzznel_urnqre_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-pyrne_nyy_aba_fcrpvrf_cntrf";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-pyrne_ragver_pnpur_fgber";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-pyrne_fcrpvrf_cntr";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-phengbe_nqzva_vaqrk_uryc";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-phengbe_yriry";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-phengbe_yriry_jvgu_vaqrsvavgr_negvpyr_znfgre_phengbe";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-phengbe_yriry_jvgu_vaqrsvavgr_negvpyr_shyy_phengbe";a:2:{i:0;R:18031;i:1;R:17673;}s:68:"1242:jrofvgr-phengbe_yriry_jvgu_vaqrsvavgr_negvpyr_nffvfgnag_phengbe";a:2:{i:0;R:18031;i:1;R:17673;}s:18:"1242:jrofvgr-pyvpx";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-pyvpxrq_gvzr";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-pyvpx_ba_na_npgvivgl_gb_frr_gu";a:2:{i:0;R:18031;i:1;R:17673;}s:67:"1242:jrofvgr-pyvpx_ba_n_hfreanzr_gb_ivrj_gur_hfref_qrgnvyrq_cebsvyr";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-pyvpx_ba_n_hfre_gb_ivrj_gur_hfref_qrgnvyrq_cebsvyr";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-pybfr_guvf_jvaqbj_gb_erghea_gb_rqvg_jvaqbj";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-pbyyrpg_vgrz";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-pbyyrpg_vgrzf";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-pbyyrpgvba_perngrq_jvgu_pbhag_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-pbyyrpgvba_qryrgr_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-pbyyrpgvba_qrfpevcgvba_qrsnhyg";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-pbyyrpgvba_qrfgeblrq";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-pbyyrpgvba_vzntr";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-pbyyrpgvba_vf_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-pbyyrpgvba_vgrz_rqvg_cntr_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-pbyyrpgvba_vgrz_abg_sbhaq_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:68:"1242:jrofvgr-pbyyrpgvba_vgrz_rqvg_ol_wninfpevcg_abg_nhgubevmrq_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-pbyyrpgvba_anzr_ynory";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-pbyyrpgvba_arjfsrrq";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-pbyyrpgvba_abg_perngrq_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-pbyyrpgvba_abg_qrfgeblrq_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-pbyyrpgvba_abg_sbhaq_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-pbyyrpgvba_perngrq_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-pbyyrpgvba_hcqngrq_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-pbyyrpgvba_jnf_erzbirq_ol_bjare";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-pbyyrpgvba_abg_hcqngrq_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-pbyyrpgvba_jnf_nqqrq_gb_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-pbzzhavgl_pna_abj_znantr_guvf_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-pbyyrpgvbaf_svygre";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-pbyyrpgvbaf_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-pbyyrpgvbaf_cntr_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-pbyyrpgvbaf_fhzznel_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-pbyyrpgvbaf_fhzznel_urnqre_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-pbyyrpgvbaf_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-pbzzrag";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-pbzzrag_nqqrq_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-pbzzrag_obql_ynory";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-pbzzrag_perngrq_ng";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-pbzzrag_qryrgr_pbasvez";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-pbzzrag_rqvg_ol_wninfpevcg_abg_nhgubevmrq_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-pbzzrag_abg_nqqrq_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-pbzzrag_abg_qryrgrq_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-pbzzrag_abg_hcqngrq_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-pbzzragrq_ba_lbhe_vzntr";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-pbzzrag_arj_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-pbzzrag_arj_cbfgref_vzntr_nyg";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-pbzzrag_arj_cbfgref_vzntr_nqivfbel_vasb";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-pbzzrag_fubj_cbfgref_vzntr_nyg";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-pbzzragf_naq_gntf";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-pbzzragf";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-pbzzragf_svygre";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-pbzzragf_zbqrengrq";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-pbzzragf_ba";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-pbzzragf_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-pbzzba_npgvivgvrf_ol_ybttrq_va";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-pbzzba_anzr_nit";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-pbzzba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-pbzzba_anzr_rkvfgf";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-pbzzba_anzrf_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-pbzzba_hfre_npgvivgl_cntr_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-pbzzhavgvrf_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-pbzzhavgvrf_svygre";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-pbzzhavgvrf_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-pbzzhavgvrf_cntr_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-pbzzhavgvrf_vaqrk_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-pbzzhavgvrf_vaqrk_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-pbzzhavgvrf_gung_pna_rqvg_guvf_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-pbzzhavgl_npgvivgl";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-pbzzhavgl_pbagevohgvbaf_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-pbzzhavgl_qrfgeblrq";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-pbzzhavgl_qrfpevcgvba_qrsnhyg";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-pbzzhavgl_rzcgl_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-pbzzhavgl_sbphf";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-pbzzhavgl_sbphf_vgrzf_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-pbzzhavgl_vaivgngvba_pbzzrag";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-pbzzhavgl_ybtb_nyg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-pbzzhavgl_znantref_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-pbzzhavgl_zrzoref";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-pbzzhavgl_zrzoref_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-pbzzhavgl_anzr_ynory";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-pbzzhavgl_arjfsrrq";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-pbzzhavgl_ab_ybatre_unf_znantre_npprff_gb_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-pbzzhavgl_abg_qrfgeblrq_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-pbzzhavgl_gno_pbyyrpgvbaf_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-pbzzhavgl_gno_pbyyrpgvbaf_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-pbzzhavgl_gno_pbzzhavgvrf_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-pbzzhavgl_gno_phengbef_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-pbzzhavgl_erzbirq_ol_bjare";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-pbzzhavgvrf_fhzznel_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-pbzzhavgvrf_fhzznel_urnqre_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-pbzcyrgrq";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-pbasvez_qryrgr_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-pbasvez_yrnir";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-pbasvez_cnffjbeq_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-pbagnpg";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-pbagnpg_vasbezngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-pbagnpgf";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-pbagnpg_hcqngrq";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-pbagnpg_hf";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-pbagnpg_hf_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-pbagnpg_hf_shapgvbaf";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-pbagnpg_hf_fhozvffvbaf";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-pbagnpg_hf_gbcvpf";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-pbagnvavat_inyhr";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-pbagrag_unf_orra_hcqngrq";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-pbagrag_abgrf_abg_fubja_gb_hf";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-pbagrag_cnegare";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-pbagrag_cnegare_arj_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-pbagrag_cnegare_nqzva_vaqrk_yvax_onpx_gb";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-pbagrag_cnegare_nterrzrag_pnapry_rqvg_nterrzrag_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:64:"1242:jrofvgr-pbagrag_cnegare_nterrzrag_pnapry_arj_nterrzrag_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-pbagrag_cnegare_nterrzrag_pnapry_fvta_nterrzrag_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-pbagrag_cnegare_nterrzrag_perngr_fhpprffshy_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:64:"1242:jrofvgr-pbagrag_cnegare_nterrzrag_perngr_hafhpprffshy_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-pbagrag_cnegare_nterrzrag_fhournqre";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-pbagrag_cnegare_nterrzrag_fvtarq_fhpprffshy_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:64:"1242:jrofvgr-pbagrag_cnegare_nterrzrag_fvtarq_hafhpprffshy_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-pbagrag_cnegare_nterrzrag_hcqngr_fhpprffshy_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:64:"1242:jrofvgr-pbagrag_cnegare_nterrzrag_hcqngr_hafhpprffshy_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-pbagrag_cnegare_nobhg_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-pbagrag_cnegare_nqzvavfgengvba_abgrf_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-pbagrag_cnegare_nqzvavfgengvba_abgrf_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-pbagrag_cnegare_nqzvavfgengvba_frggvatf_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-pbagrag_cnegare_nqzvavfgengvba_frggvatf_vagebqhpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-pbagrag_cnegare_pbyyrpgvbaf_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-pbagrag_cnegare_pbyhza_urnqre_cnegare";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-pbagrag_cnegare_pbagnpg_perngr_fhpprffshy_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-pbagrag_cnegare_pbagnpg_perngr_hafhpprffshy_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-pbagrag_cnegare_pbagnpg_qryrgr_fhpprffshy_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-pbagrag_cnegare_pbagnpg_qryrgr_hafhpprffshy_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-pbagrag_cnegare_pbagnpg_rqvg_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-pbagrag_cnegare_pbagnpg_rqvg_cntr_fhournqre";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-pbagrag_cnegare_pbagnpg_arj_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-pbagrag_cnegare_pbagnpg_arj_cntr_fhournqre";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-pbagrag_cnegare_pbagnpg_arj_rqvg_sbez_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-pbagrag_cnegare_pbagnpg_arj_rqvg_sbez_gvc";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-pbagrag_cnegare_pbagnpg_hcqngr_fhpprffshy_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-pbagrag_cnegare_pbagnpg_hcqngr_hafhpprffshy_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-pbagrag_cnegare_pbagnpgf_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-pbagrag_cnegare_perngr_fhpprffshy_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-pbagrag_cnegare_perngr_hafhpprffshy_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-pbagrag_cnegare_pheerag_nterrzrag_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:66:"1242:jrofvgr-pbagrag_cnegare_pheerag_nterrzrag_fvtarq_ba_jvgu_qngr";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-pbagrag_cnegare_pheerag_nterrzrag_ivrj_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-pbagrag_cnegare_pheerag_nterrzrag_rqvg_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-pbagrag_cnegare_pheerag_nterrzrag_perngr_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-pbagrag_cnegare_pheerag_nterrzrag_abg_npprcgrq";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-pbagrag_cnegare_qngn_qrfpevcgvba_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-pbagrag_cnegare_qngn_qrfpevcgvba_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-pbagrag_cnegare_qrsnhyg_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-pbagrag_cnegare_rqvg_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-pbagrag_cnegare_svygre_bcgvba_irggrq_lrf";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-pbagrag_cnegare_svygre_bcgvba_irggrq_ab";a:2:{i:0;R:18031;i:1;R:17673;}s:68:"1242:jrofvgr-pbagrag_cnegare_svygre_bcgvba_choyvfurq_arire_uneirfgrq";a:2:{i:0;R:18031;i:1;R:17673;}s:68:"1242:jrofvgr-pbagrag_cnegare_svygre_bcgvba_choyvfurq_arire_choyvfurq";a:2:{i:0;R:18031;i:1;R:17673;}s:81:"1242:jrofvgr-pbagrag_cnegare_svygre_bcgvba_choyvfurq_yngrfg_uneirfg_abg_choyvfurq";a:2:{i:0;R:18031;i:1;R:17673;}s:83:"1242:jrofvgr-pbagrag_cnegare_svygre_bcgvba_choyvfurq_yngrfg_uneirfg_craqvat_choyvfu";a:2:{i:0;R:18031;i:1;R:17673;}s:77:"1242:jrofvgr-pbagrag_cnegare_svygre_bcgvba_choyvfurq_yngrfg_uneirfg_choyvfurq";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-pbagrag_cnegare_svygre_bcgvba_choyvfurq_ab_erfbheprf";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-pbagrag_cnegare_svygre_choyvfurq";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-pbagrag_cnegare_unf_hachoyvfurq_pbagrag_gehr";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-pbagrag_cnegare_unf_hachoyvfurq_pbagrag_snyfr";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-pbagrag_cnegare_ubzrcntr_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:68:"1242:jrofvgr-pbagrag_cnegare_yngrfg_choyvfurq_uneirfg_rirag_gvzr_ntb";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-pbagrag_cnegare_ybtb_nyg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-pbagrag_cnegare_znantrq_ol_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-pbagrag_cnegare_arj_cntr_fhournqre";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-pbagrag_cnegare_arj_rqvg_sbez_cebsvyr_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-pbagrag_cnegare_arj_rqvg_sbez_gvc";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-pbagrag_cnegare_abgrf_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-pbagrag_cnegare_abgrf_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:68:"1242:jrofvgr-pbagrag_cnegare_byqrfg_choyvfurq_uneirfg_rirag_gvzr_ntb";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-pbagrag_cnegare_bireivrj_nterrzrag_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-pbagrag_cnegare_bireivrj_nterrzrag_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-pbagrag_cnegare_bireivrj_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-pbagrag_cnegare_bireivrj_yvax_onpx_gb";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-pbagrag_cnegare_cebsvyr_zrah";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-pbagrag_cnegare_choyvp_snyfr";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-pbagrag_cnegare_choyvp_gehr";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-pbagrag_cnegare_ertvfgrerq_gvzr_ntb";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-pbagrag_cnegare_ercbegf";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_nobhg_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_nhgb_choyvfu_gehr";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_nhgb_choyvfu_snyfr";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_pbyyrpgvba_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_pbyyrpgvbaf_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_pbyyrpgvba_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_pbyyrpgvba_fubj_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_pbasvez_sbepr_uneirfg";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_perngr_fhpprffshy_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_perngr_hafhpprffshy_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_qngnfrg_qrgnvyf_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_qrfpevcgvba_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_rqvg_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_rqvg_fhournqre";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_rqvg_jvgu_glcr_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:67:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_uneirfg_rirag_pbasvez_choyvfu";a:2:{i:0;R:18031;i:1;R:17673;}s:69:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_uneirfg_rirag_pheerag_choyvfurq";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_uneirfg_rirag_abg_choyvfurq";a:2:{i:0;R:18031;i:1;R:17673;}s:72:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_uneirfg_rirag_cerivbhfyl_choyvfurq";a:2:{i:0;R:18031;i:1;R:17673;}s:67:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_uneirfg_rirag_choyvfu_craqvat";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_uneirfg_riragf_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:75:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_uneirfg_riragf_sbe_erfbhepr_fhournqre";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_uneirfg_riragf_frr_nyy_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:76:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_uneirfg_rirag_hcqngr_fhpprffshy_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:77:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_uneirfg_rirag_hcqngr_hafhpprffshy_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_uvrenepul_oebjfnoyr";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_uvrenepul_pbzcyrgr_gehr";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_uvrenepul_pbzcyrgr_snyfr";a:2:{i:0;R:18031;i:1;R:17673;}s:71:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_uvrenepul_pbasvez_erdhrfg_choyvfu";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_uvrenepul_rqvg_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_uvrenepul_rqvg_fhournqre";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_uvrenepul_abg_oebjfnoyr";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_uvrenepul_erdhrfg_choyvfu";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_uvrenepul_haxabja";a:2:{i:0;R:18031;i:1;R:17673;}s:72:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_uvrenepul_hcqngr_fhpprffshy_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:73:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_uvrenepul_hcqngr_hafhpprffshy_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_yvprafvat_qrgnvyf_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_arj_rqvg_sbez_gvc";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_arj_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_arj_fhournqre";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_cerivrj_pbyyrpgvba_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:66:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_cerivrj_pbyyrpgvba_fubj_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_cebprffvat_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_erfbhepr_fgnghf_arj";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_fubj_yvax_onpx_gb";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_fubj_fhournqre";a:2:{i:0;R:18031;i:1;R:17673;}s:76:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_fgnghf_hcqngr_vyyrtny_genafvgvba_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:69:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_fgnghf_hcqngr_fhpprffshy_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:70:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_fgnghf_hcqngr_hafhpprffshy_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_hcqngr_fhpprffshy_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_hcqngr_hafhpprffshy_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_hcybnq_hafhpprffshy_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:67:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_hey_be_qngnfrg_abg_obgu_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_irggrq_gehr";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_irggrq_snyfr";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-pbagrag_cnegare_erfbhepr_ivrj_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-pbagrag_cnegare_erfbheprf_vasbezngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-pbagrag_cnegare_erfbheprf_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-pbagrag_cnegare_erfbheprf_yvax_onpx_gb";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-pbagrag_cnegare_erfbheprf_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-pbagrag_cnegare_erfbheprf_cbyvpl_vasbezngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-pbagrag_cnegare_fgngvfgvpf_pbyhza_urnqre_fgngvfgvp";a:2:{i:0;R:18031;i:1;R:17673;}s:68:"1242:jrofvgr-pbagrag_cnegare_fgngvfgvpf_pbyhza_urnqre_cebivqre_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-pbagrag_cnegare_fgngvfgvpf_pbyhza_urnqre_gbgny_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:73:"1242:jrofvgr-pbagrag_cnegare_fgngvfgvpf_pbyhza_urnqre_cebivqre_cebcbegvba";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-pbagrag_cnegare_fgngvfgvpf_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-pbagrag_cnegare_fgngvfgvpf_zbagu_ynory";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-pbagrag_cnegare_fgngvfgvpf_lrne_ynory";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-pbagrag_cnegare_fgngvfgvpf_fhzznel_pncgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-pbagrag_cnegare_fgngvfgvpf_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-pbagrag_cnegare_fgngvfgvpf_gnkn_cntr_pncgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:74:"1242:jrofvgr-pbagrag_cnegare_fgngvfgvpf_pbyhza_urnqre_gnkn_cntr_cntr_ivrjf";a:2:{i:0;R:18031;i:1;R:17673;}s:81:"1242:jrofvgr-pbagrag_cnegare_fgngvfgvpf_pbyhza_urnqre_gnkn_cntr_havdhr_cntr_ivrjf";a:2:{i:0;R:18031;i:1;R:17673;}s:84:"1242:jrofvgr-pbagrag_cnegare_fgngvfgvpf_pbyhza_urnqre_gnkn_cntr_gvzr_ba_cntr_frpbaqf";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-pbagrag_cnegare_fgnghf_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-pbagrag_cnegare_hcqngr_fhpprffshy_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-pbagrag_cnegare_hcqngr_hafhpprffshy_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-pbagrag_cnegare_irggrq_snyfr";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-pbagrag_cnegare_irggrq_gehr";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-pbagrag_cnegaref_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-pbagrag_cnegaref_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-pbagrag_cnegaref_cntr_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-pbagrag_cnegaref_cntr_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-pbagrag_cnegaref_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-pbagrag_freire_shyy_hey";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-pbagrag_freiref";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-pbagrag_frggvat_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-pbagrag_fhzznel_vagebqhpgvba_ugzy";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-pbagrag_fhzznel_gnoyr_pncgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-pbagrag_fhzznel_gnoyr_fhzznel";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-pbagrag_fhzznel_gnoyr_glcr_fgnghf_pbyhza_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-pbagrag_fhzznel_gnoyr_pbhag_pbyhza_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-pbagrag_fhzznel_gnoyr_glcr_qrfpraqnagf_ebj";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-pbagrag_fhzznel_gnoyr_glcr_gehfgrq_vzntrf_ebj";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-pbagrag_fhzznel_gnoyr_glcr_haerivrjrq_vzntrf_ebj";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-pbagrag_fhzznel_gnoyr_glcr_gehfgrq_grkg_ebj";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-pbagrag_fhzznel_gnoyr_glcr_haerivrjrq_grkg_ebj";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-pbagrag_glcr";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-pbagevohgr";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-pbcvrq_vgrzf_sebz_pbyyrpgvba_jvgu_pbhag_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:17:"1242:jrofvgr-pbcl";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-pbcl_bs_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-pbcl_vgrzf_gb_n_arj_pbyyrpgvba_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-pbclevtug";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-pbeerpg_qbangvba_zrffntr";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-pbhyq_abg_svaq_pbyyrpgvba_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-pbhyq_abg_svaq_hfre";a:2:{i:0;R:18031;i:1;R:17673;}s:18:"1242:jrofvgr-pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-pbhag_erfhygf_sbe_frnepu_grez";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-perngr_nppbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-perngr_pbzzhavgl_hafhpprffshy_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-perngr_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-perngr_pbzzhavgl_nobhg_urnqvat";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-perngr_pbzzhavgl_nobhg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-perngr_pbzzhavgl_nebhaq_guvf_pbyyrpgvba_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-perngr_n_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-perngr_n_pbzzhavgl_ybtva_nqivfbel";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-perngr_n_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-perngr_pbyyrpgvba_ohggba";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-perngr_pbzzhavgl_ohggba";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-perngr_hfre_sbez_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-perngr_hfre_hafhpprffshy_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-perngrq_ng";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-perngrq_ol";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-perngrq_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-perngrq_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-perngrq";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-perngvir_pbzzbaf";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-perqragvnyf";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-phengrq";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-phengrq_nffbpvngvba_hcqngr_ohggba";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-phengrq_bowrpgf_bs";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-phengrq_fcrpvrf_bs";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-phengvba_pbzzrag";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-phengvba_cevivyrtrf_cntr_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-phengvba_cevivyrtrf_cntr_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-phengvba_fpbcr";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-phengvba_ernfba_cynprubyqre";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-phengbe";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-phengbe_dhrfgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-phengbe_yriry_nccyvpngvba_craqvat_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-phengbe_yriry_nffvfgnag_nccebirq_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-phengbe_yriry_nffvfgnag_phengbe";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-phengbe_yriry_shyy_phengbe";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-phengbe_yriry_shyy_craqvat_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-phengbe_yriry_znfgre_phengbe";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-phengbe_yriry_znfgre_craqvat_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-phengbe_cebsvyr";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-phengbe_cebsvyr_zrah";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-phengbe_cebsvyr_bs";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-phengbe_fpbcr_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-phengbe_fvtahc_zrffntr";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-phengbe_fgnghf_punatrq_ol";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-phengbef";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-phengbef_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-phengbef_fhzznel_urnqre_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-phengbef_fhzznel_yrnea_zber_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-phengbef_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-lbhe_pheerag_engvat_0_bs_5";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-lbhe_pheerag_engvat_1_bs_5";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-lbhe_pheerag_engvat_2_bs_5";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-lbhe_pheerag_engvat_3_bs_5";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-lbhe_pheerag_engvat_4_bs_5";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-lbhe_pheerag_engvat_5_bs_5";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-lbhe_jngpu_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-pheerag_ynathntr";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-pheeragyl_va_rby";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-pheeragyl_choyvfurq";a:2:{i:0;R:18031;i:1;R:17673;}s:18:"1242:jrofvgr-qnvyl";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-qnejva_pber";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-qnfuobneq";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-qngn_qngnonfr_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-qngn_ybttvat_npgvir";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-qngn_znfgre_qngnonfr_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-qngn_bowrpg";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-qngn_bowrpg_abg_nffbpvngrq_jvgu_nal_uvrenepuvrf";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-qngn_bowrpg_ersrerapr";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-qngn_bowrpg_vtaber";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-qngn_bowrpg_haqb_vtaber";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-qngn_hfntr_ercbegf";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-qngr_pncf";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-qngr_hcybnqrq";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-qngb_perngr_pnapry";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-qngb_rqvg_pnapry";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-qngb_perngr_hfre_grkg_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-qngb_hcqngr_hfre_grkg_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-qngb_arj_rqvg_hfre_grkg_svryqfrg_pbagrag_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:64:"1242:jrofvgr-qngb_arj_rqvg_hfre_grkg_svryqfrg_vasbezngvba_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-qngb_arj_rqvg_hfre_grkg_sbez_gvc";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-qngb_perngr_hfre_grkg_zvffvat_gnkba_vq_rkprcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-qngb_perngr_hfre_grkg_zvffvat_hfre_rkprcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-qngb_perngr_hfre_grkg_inyvqngvba_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-qngb_hcqngr_hfref_grkg_abg_bjare_rkprcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-qngb_rqvg_grkg_yvax_ohggba";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-qngb_rqvg_grkg_cntr_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-qngb_rqvg_grkg_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-qngb_arj_grkg_sbe_gnkba_cntr_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-qngb_arj_grkg_cntr_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-qrirybczrag_irefvba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-qrsnhyg";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-qrsnhyg_sbphf_pbyyrpgvba_anzr_sebz_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-qrsnhyg_jngpu_pbyyrpgvba_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-qrsvavgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-qryrgr_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:19:"1242:jrofvgr-qryrgr";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-qryrgrq_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-qryrgr_svefgpnc";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-qrfpevcgvba_bs";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-qrfpevcgvir_ynory";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-qrfgvangvba_vanccebcevngr_sbe_ybttrq_va_hfref";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-qrfgebl";a:2:{i:0;R:18031;i:1;R:17673;}s:19:"1242:jrofvgr-qrgnvy";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-qrgnvyf";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-qrgnvyf_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-qvq_lbh_zrna";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-qvfnoyr_rznvy_abgvsvpngvbaf_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-qvfnoyrq_sbe_abj";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-qvfpbire_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-qvfcynlvat_ahzrevpny_enatr";a:2:{i:0;R:18031;i:1;R:17673;}s:19:"1242:jrofvgr-qbangr";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-qbangvba_nzbhag_yrtraq";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-qbangvba_nzbhag_bgure_ynory";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-qbangvba_pbasvezngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-qbangvba_reebe_bayl_ahzoref";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-qbangvba_reebe_ab_nzbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-qbangvba_vagebqhpgvba_cnentencu_bar";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-qbangvba_vagebqhpgvba_cnentencu_gjb";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-qbangvba_cevinpl_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-qbangvba_fcbafbefuvc_cernzoyr";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-qbangvba_fcbafbefuvc_pbagrag_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-qbangvba_fcbafbefuvc_pbagrag_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-qbangvba_fcbafbefuvc_sryybjfuvcf_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-qbangvba_fcbafbefuvc_sryybjfuvcf_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-qbangvba_fcbafbefuvc_vasenfgehpgher_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-qbangvba_fcbafbefuvc_vasenfgehpgher_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-qbar_nyernql";a:2:{i:0;R:18031;i:1;R:17673;}s:80:"1242:jrofvgr-qbag_fubj_haxabja_ertvfgrerq_qngrf_i1_hfref_nyy_cevbe_gb_wna_5_2009";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-qb_lbh_jnag_gb_or_n_phengbe";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-qbjaybnq_jni_svyr";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-qhoyva_pber";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-qhcyvpngr_vgrzf_jrer_vtaberq";a:2:{i:0;R:18031;i:1;R:17673;}s:67:"1242:jrofvgr-rnpu_zrgubq_qbphzragngvba_cntr_unf_sbeznggrq_erfcbafrf";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-rqvg_pbzzrag";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-rqvg_pbzzrag_ybjrepnfr";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-rqvg_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-rqvg_pbagnpg_hf_gbcvp";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-rqvg_pbagnpg_hf_gbcvpf";a:2:{i:0;R:18031;i:1;R:17673;}s:17:"1242:jrofvgr-rqvg";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-rqvgrq_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-rqvg_rby_tybffnel";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-rqvg_tybffnel_grez";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-rqvg_uvrenepul";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-rqvg_pbyyrpgvba_qrgnvyf";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-rqvg_pbyyrpgvba_qrgnvyf_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-rqvg_zl_cebsvyr";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-rqvg_arjf_vgrz";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-rqvg_arjf_vgrzf";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-rqvg_cntr_pbagragf";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-rqvg_frnepu_fhttrfgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-rqvg_frnepu_fhttrfgvbaf";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-rqvg_gnoyr_bs_pbagragf";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-rqvg_gnt_fhttrfgvbaf";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-rqvg_arjf_vgrz_vafgehpgvbaf_jvgu_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-rqvg_gur_gbcvp_nern_vageb";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-rqvg_hfre_qrgnvyf_vafgehpgvbaf";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-rqvg_gur_hfre_f_pbzzrag_orybj";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-rqvg_hcybnq";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-rqvg_hfreanzr";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-rqvg_jro_hfref";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-rqvgbef_gno_ynory";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-r_t_frnepu_sbe_gur_rby_cntr";a:2:{i:0;R:18031;i:1;R:17673;}s:18:"1242:jrofvgr-rznvy";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-rznvy_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-rznvy_reebe_abgvsvpngvba_npgvi";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-rznvy_erpvcvragf";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-rby_phengbe_npgvivgl_rznvy_zrffntr";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-raplpybcrqvn_bs_yvsr";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-raqbefrq_ol";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-raqbefrq_pbyyrpgvbaf";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-raqbefrq_pbyyrpgvbaf_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-ragre_va_n_frnepu_grez_hfref_n";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-rby_npgvivgvrf";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-rby_npgvivgl";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-rby_nqzvavfgengvba_pbafbyr";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-rby_ncv_qngn_bowrpgf";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-rby_ncv_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-rby_ncv";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-rby_ncv_uvrenepuvrf";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-rby_ncv_uvrenepul_ragevrf";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-rby_ncv_cntrf";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-rby_ncv_cvat";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-rby_ncv_cebivqre_uvrenepuvrf";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-rby_ncv_frnepu_ol_cebivqre";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-rby_ncv_frnepu";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-rby_ncv_pbyyrpgvbaf";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-rby_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-rby_pbzzhavgl_npgvivgl";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-rby_syvpxe_tebhc";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-rby_tybffnel";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-rby_zrzore_npgvivgl";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-rby_arjf";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-rby_cntrf";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-rby_erprag_zrzore_npgvivgvrf";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-rby_erprag_npgvivgl";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-reebe_ybt_qrgnvy";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-reebe_ybt";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-reebe_ybttvat_npgvir";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-reebe_401_cntr_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-reebe_401_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-reebe_403_cntr_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-reebe_403_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-reebe_404_cntr_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-reebe_404_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-reebe_500_cntr_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-reebe_500_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-reebe_qrsnhyg_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-reebe_qrsnhyg_cntr_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-reebe_pbhyqag_svaq_pbyyrpgvba_ol_vq";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-reebe_pbhyqag_svaq_pbzzhavgl_ol_vq";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-reebe_ubzrcntr_be_frnepu_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-reebe_jngpu_pbyyrpgvbaf_pnaabg_or_funerq";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-rfp_xrl_uvqrf_guvf_zrffntr";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-rirel_zrgubq_pna_nyfb_erghea_wfba_erfcbafr";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-rknzcyr_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-rkprcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-rkcnaq_nyy_puvyqera";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-rkcyber";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-rkcyber_jung_jr_xabj_nobhg_gnkba";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-rkcbeg_phengbe_pfi_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-rkcbeg_nyy_bs_gur_ragevrf_nf_n";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-rkcbeg_guvf_yvfg_nf_pfi";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-rkgreany_yvax_vpba_nyg_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-rkgreany_ercbeg_pyvpx_hey_gb_cebprrq";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-rkgreany_ercbeg_pyvpx_lrne_gb_cebprrq";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-snprobbx";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-snphygl_fgnss_be_tenq_fghqrag_perqragvny_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-snvyrq_ybtva_nggrzcgf_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-snzvyl_anzr_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-srrqonpx";a:2:{i:0;R:18031;i:1;R:17673;}s:17:"1242:jrofvgr-svyr";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-svyr_vq";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-svyr_fvmr";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-svyy_va_n_zrffntr_orybj_gb_fraq_rznvy_gb_hfre";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-svygre_ohggba";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-svygre_ol_qnl";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-svygre_ol_glcr";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-svygre_ol_glcr_nyy_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-svygre_ol_glcr_nyy_bcgvba_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-svygre_ol_glcr_pbyyrpgvba_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-svygre_ol_glcr_pbzzhavgl_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-svygre_ol_glcr_pbagrag_cntr_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-svygre_ol_glcr_vzntr_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-svygre_ol_glcr_vzntr_bcgvba_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-svygre_ol_glcr_grkg_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-svygre_ol_glcr_hfre_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-svygre_ol_glcr_cubgbflagu_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-svygre_ol_glcr_fbhaq_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-svygre_ol_glcr_fbhaq_bcgvba_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-svygre_ol_glcr_gnkba_pbaprcg_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-svygre_ol_glcr_ivqrb_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-svygre_ol_glcr_ivqrb_bcgvba_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-svygre_ol_glcr_pbzzrag_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-svygre_ol_glcr_bowrpg_phengrq_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-svygre_ol_glcr_anzr_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-svygre_ol_glcr_gnkn_pbzzrag_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-svygre_ol_fgnghf_nyy_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-svygre_ol_fgnghf_gehfgrq_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-svygre_ol_fgnghf_haerivrjrq_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-svygre_ol_fgnghf_hagehfgrq_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-svygre_ol_fgnghf_vanccebcevngr_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-svygre_ol_fgnghf";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-svygrerq_vasbezngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-svygre_arjfsrrq_bcgvba_nyy";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-svygre_arjfsrrq_bcgvba_zrffntrf";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-svygre_arjfsrrq_bcgvba_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-svygre_arjfsrrq_bcgvba_pbyyrpgvbaf";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-svygre_arjfsrrq_bcgvba_jngpuyvfg";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-svygre_arjfsrrq_bcgvba_phengvba";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-svygre_zrqvn";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-svaq_gnkn_fhozvg_ohggba";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-pvgngvba_rknzcyr";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-synfu_abgvpr_erqverpgrq_sebz_frnepu_ugzy";a:2:{i:0;R:18031;i:1;R:17673;}s:66:"1242:jrofvgr-synfu_abgvpr_erqverpgrq_sebz_frnepu_ugzy_zber_erfhygf";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-synfu_ivqrb";a:2:{i:0;R:18031;i:1;R:17673;}s:19:"1242:jrofvgr-syvpxe";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-sbphf_pbyyrpgvba_rqvg";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-sbphf_yvfg_arjfsrrq";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-sbetbg_cnffjbeq";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-sbetbg_cnffjbeq_sbez_pnapry";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-sbetbg_cnffjbeq_sbez_pubbfr_hfreanzr_vafgehpgvbaf";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-sbetbg_cnffjbeq_sbez_pubbfr_hfreanzr_yrtraq";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-sbetbg_cnffjbeq_sbez_pubbfr_hfreanzr_oynax_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-sbetbg_cnffjbeq_sbez_hfreanzr_be_rznvy_oynax_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-sbetbg_cnffjbeq_sbez_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-sbetbg_cnffjbeq_sbez_urycre";a:2:{i:0;R:18031;i:1;R:17673;}s:74:"1242:jrofvgr-sbetbg_cnffjbeq_pnaabg_svaq_hfre_sebz_hfreanzr_be_rznvy_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-sbe_vzntrf_gb_ersrerapr_cneraf";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-sbe_cqsf_naq_qbpf_cneraf";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-sbe_grezf_be_qrsvavgvbaf_pbagn";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-sbez_inyvqngvba_reebef_sbe_nggevohgr_nffvfgvir";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-sentzrag_pnpuvat_ranoyrq";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-serdhrapl";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-serdhrapl_qnvyl";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-serdhrapl_zbaguyl";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-serdhrapl_arire";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-serdhrapl_jrrxyl";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-sevraqyl_hey";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-sebz_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-sebz_pbzzhavgvrf";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-shyy_pbagrag_hey";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-tovs_znc";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-trareny_fvgr_nqzva";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-trg_uryc_pubbfvat_n_fhopuncgre";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-trg_zber_gnfxf";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-zrgubq_gb_trg_zrgnqngn_nobhg_gur_uvrenepul";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-tvira_anzr_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-qngn_bowrpg_ncv_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-tvira_gur_infg_ahzore";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-tvirf_npprff_gb_n_fvatyr_uvrenepul_vaqrkrq_ol_rby";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-tybony_npprff_gntyvar";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-tybony_anivtngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-tybffnel_vf_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-tybffnel_grez";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-tybffnel_grezf";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-tb_onpx";a:2:{i:0;R:18031;i:1;R:17673;}s:15:"1242:jrofvgr-tb";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-tbbtyr_nanylgvp_erfhygf";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-tbbtyr_nanylgvpf_npgvir";a:2:{i:0;R:18031;i:1;R:17673;}s:64:"1242:jrofvgr-tbbtyr_nanylgvpf_tbbtyr_nppbhag_naq_npprff_erdhverq";a:2:{i:0;R:18031;i:1;R:17673;}s:19:"1242:jrofvgr-tbbtyr";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-tbbtyr_vzntrf";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-tbbtyr_fpubyne";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-tenag_znantre_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-tenag_shyy_phengbe_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-uneirfg_vq";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-uneirfgvat_cebprffrf_ybt";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-uneirfgf_sbe";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-unf_nyernql_orra_gnxra";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-unf_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-unf_phengrq_lbhe_vzntr";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-unf_uvqqra_lbhe_vzntr";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-unf_gehfgrq_lbhe_vzntr";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-unf_hagehfgrq_lbhe_vzntr";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-uryyb_hfre";a:2:{i:0;R:18031;i:1;R:17673;}s:17:"1242:jrofvgr-uryc";a:2:{i:0;R:18031;i:1;R:17673;}s:17:"1242:jrofvgr-urer";a:2:{i:0;R:18031;i:1;R:17673;}s:19:"1242:jrofvgr-uvqqra";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-uvqqra_pbzzrag";a:2:{i:0;R:18031;i:1;R:17673;}s:17:"1242:jrofvgr-uvqr";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-uvrenepuvrf_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-uvrenepul_ragel_fjvgpu_zvffvat_vq_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-uvrenepul";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-uvrenepul_ebbgf_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-uvrenepul_hcqngrq";a:2:{i:0;R:18031;i:1;R:17673;}s:17:"1242:jrofvgr-ubzr";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-ubzr_cntr_pnpur_ynfg_pyrnerq_ba";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-ubzr_cntr_yvax_nqivfbel_vasbezngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-ugzy_sbezng";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-ugzy_sbezng_jvgu_yrsg_pby";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-pbagrag_hcybnq_hey";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-pbagrag_hcybnq_erfgevpgvbaf_abgr";a:2:{i:0;R:18031;i:1;R:17673;}s:15:"1242:jrofvgr-vq";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-vs_purpxrq_naq_hfre_vf_fnirq";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-purpx_guvf_gb_oebjfr_rby_ol_gur_uvrenepul";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-erghea_pbagrag_ol_irggrqarff";a:2:{i:0;R:18031;i:1;R:17673;}s:18:"1242:jrofvgr-vzntr";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-vzntr_vf_ab_ybatre_ninvynoyr";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-vzntr_abg_sbhaq";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-vzntr_bowrpg";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-vzntr_bowrpgf_jvyy_pbagnva_gjb_zrqvnhey_ryrzragf";a:2:{i:0;R:18031;i:1;R:17673;}s:19:"1242:jrofvgr-vzntrf";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-vzntrf_va_erq_ner_abg_gehfgrq";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-vzntrf_va_lryybj_ner_abg_erivrjrq";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-vzntrf_fbeg_jbexyvfg_abgr";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-vzntrf_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-vzcbeg_bapr";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-vanccebcevngr";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-vapyhqr_nyy_zrgnqngn";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-va_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-vasb_vgrz";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-vasb_vgrzf_pby_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-vasbezngvba_sbe_nal_nhqvrapr";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-vasbezngvba_vagraqrq_sbe_ortvaaref";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-vasbezngvba_vagraqrq_sbe_rkcregf";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-va_cebivqvat_vgf_pbagrag_gb_rb";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-va_guvf_qngn_glcr";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-vafhssvpvrag_cevivyrtrf_gb_nqq_pbzzba_anzrf";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-vafhssvpvrag_cevivyrtrf_gb_phengr_anzrf";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-vagreany_vc_nqqerff";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-vairefr_fbeg";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-vaivgr_zrzoref_ynory";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-vaivgr_zrzoref_uryc_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-vc_nqqerff";a:2:{i:0;R:18031;i:1;R:17673;}s:15:"1242:jrofvgr-vc";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-grez_vf_nyernql_qrs_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-vgrz_nqqrq_gb_jngpu_pbyyrpgvba_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-vgrz_nqqrq_gb_pbyyrpgvba_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-vgrz_qrgnvyf_zvffvat";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-vgrz_glcr_negvpyr";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-vgrz_glcr_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-vgrz_glcr_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-vgrz_glcr_vzntr";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-vgrz_glcr_vzntr_znc";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-vgrz_glcr_znc";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-vgrz_glcr_crefba";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-vgrz_glcr_fbhaq";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-vgrz_glcr_gnkba";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-vgrz_glcr_ivqrb";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-vgrz_glcr_negvpyr_nffvfgvir";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-vgrz_glcr_pbyyrpgvba_nffvfgvir";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-vgrz_glcr_pbzzhavgl_nffvfgvir";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-vgrz_glcr_vzntr_nffvfgvir";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-vgrz_glcr_vzntr_znc_nffvfgvir";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-vgrz_glcr_znc_nffvfgvir";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-vgrz_glcr_crefba_nffvfgvir";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-vgrz_glcr_fbhaq_nffvfgvir";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-vgrz_glcr_gnkba_nffvfgvir";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-vgrz_glcr_ivqrb_nffvfgvir";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-vgrz_abg_nqqrq_nyernql_va_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-vgrz_abg_nqqrq_gb_vgfrys_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-vgrz_abg_nqqrq_gb_pbyyrpgvba_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-vgrz_abg_hcqngrq_va_pbyyrpgvba_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-vgrz_hcqngrq_va_pbyyrpgvba_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-vgrzf_ab_pbcl_abar_fryrpgrq_jneavat";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-vgrzf_ab_zbir_abar_fryrpgrq_jneavat";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-vgrzf_ab_erzbir_abar_fryrpgrq_jneavat";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-vgrzf_jvgu_pbhag_frzv_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-vhpa_erq_yvfg_fgnghf_nqivfbel_vasbezngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-wbva_pbzzhavgl_ohggba";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-wbva_rby_pbzzhavgl_ugzy";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-wbva_rby_ohggba_ugzy";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-wbvarq_znvyvat_yvfg";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-wbvarq_gvzr_ntb";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-wfba_erfcbafr";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-whfg_cntrf_jvgu_cvpgherf_naq_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:18:"1242:jrofvgr-ynory";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-ynathntr";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-ynathntrf";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-ynathntr_fryrpgbe_nqivfbel_vasbezngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-ynathntr_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-ynfg_hcqngrq";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-ynfg_hcqngrq_gvzr_ntb";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-yrnea_nobhg_pbyyrpgvbaf";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-yrnea_nobhg_pbagrag_cnegaref";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-yrnea_nobhg_pbzzhavgvrf";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-yrnea_nobhg_rby";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-yrnea_nobhg_pbagevohgvat";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-yrnea_nobhg_wbvavat";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-yrnea_zber_nobhg_pbzzhavgvrf_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-yrnea_zber_nobhg_anzrf_sbe_guvf_gnkba";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-yrnea_zber_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-yrnea_zber_ybjrepnfr";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-yrnir_pbzzhavgl_ohggba";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-yrnir_n_pbzzrag";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-yrnir_ercyl";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-yrsg_pbagrag_nern";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-yvprafr";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-yvprafr_nyy_evtugf_erfreirq";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-yvprafr_pp_ol";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-yvprafr_pp_ol_2_0";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-yvprafr_pp_ol_2_5";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-yvprafr_pp_ol_3_0";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-yvprafr_pp_ol_ap";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-yvprafr_pp_ol_ap_2_0";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-yvprafr_pp_ol_ap_2_5";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-yvprafr_pp_ol_ap_3_0";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-yvprafr_pp_ol_ap_fn";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-yvprafr_pp_ol_ap_fn_1_0";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-yvprafr_pp_ol_ap_fn_2_0";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-yvprafr_pp_ol_ap_fn_2_5";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-yvprafr_pp_ol_ap_fn_3_0";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-yvprafr_pp_ol_fn";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-yvprafr_pp_ol_fn_1_0";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-yvprafr_pp_ol_fn_2_0";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-yvprafr_pp_ol_fn_2_5";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-yvprafr_pp_ol_fn_3_0";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-yvprafr_tah_sqy";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-yvprafr_tah_tcy";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-yvprafr_abg_nccyvpnoyr";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-yvprafr_choyvp_qbznva";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-zber_vasbezngvba_ba_gur_inevbhf_yvprafrf";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-yvprafvat";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-yvzvgf_gur_ahzore_bs_erghearq_vzntr_bowrpgf";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-yvzvgf_gur_ahzore_bs_erghearq_grkg_bowrpgf";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-yvzvgf_gur_ahzore_bs_erghearq_ivqrb_bowrpgf";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-yvzvgf_gur_ahzore_bs_erghearq_fbhaq_bowrpgf";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-yvzvgf_gur_ahzore_bs_erghearq_znc_bowrpgf";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-yvzvgf_gur_ahzore_bs_erghearq_vhpa_bowrpgf";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-yvax_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-yvfg_arjfyrggre_rznvyf";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-yvfgvat_pbyyrpgvbaf";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-yvfg_bs_npgvivgl_pbzovangvbaf";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-yvfgf_gur_vqragvsvref_sbe_nyy_uvrenepuvrf";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-yvgrengher";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-yvgrengher_ouy_vasbezngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-yvgrengher_ouy_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-yvgrengher_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-yvgrengher_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-yvgrengher_ersreraprf";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-ybpngvba_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-ybtva_erdhverq_ohggba";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-ybttvat_qngnonfr_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:18:"1242:jrofvgr-ybtva";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-ybtva_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-ybtva_be_perngr_nppbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-ybtva_gb_gur_jrofvgr_nf";a:2:{i:0;R:18031;i:1;R:17673;}s:19:"1242:jrofvgr-ybtbhg";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-znva_pbagrag_nern";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-znva_qngnonfr_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-znva_znfgre_qngnonfr_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-znvagnvarq_ol";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-znwbe_urnqvat";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-znxr_na_rqvgbe";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-znxr_hfre_na_rqvgbe_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-znantr_lbhe_cebsvyr";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-znantrq_ol";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-znantrq_pbyyrpgvbaf_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-znantre_raqbefr_pbyyrpgvbaf_fhttrfgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-znantre_cneraf";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-znc_sebz";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-vzntr_znc_sebz";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-zncf_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-zncf_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-zncf_rzcgl_pbagevohgr_vafgehpgvbaf";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-zncf_vzntr_zncf_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-zngpuvat_hfref_sbhaq_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-znk_pbyyrpgvba_vgrzf_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:18:"1242:jrofvgr-zrqvn";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-zrqvn_yvfg_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-zrqvn_yvfg_rzcgl_frnepu";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-zrqvn_yvfg_rzcgl_pbagevohgr_vafgehpgvbaf";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-zrqvn_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-zrqvn_fhzznel_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-zrqvn_fhzznel_rzcgl_pbagevohgr_vafgehpgvbaf";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-zrzore_bs_cebsrffvbany_fbpvrgl_perqragvny_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-zrzore_bs";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-zrzoref_yvxr_lbh";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-zrzoref_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-zrzoref_jvgu_pbhag_frzv_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-zretr_pbaprcgf";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-zrffntr_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-zrgn_gvgyr_fvgr_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:19:"1242:jrofvgr-zrgubq";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-zrgubqf";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-zvavzny_cntr";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-zbaguyl";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-zber_puvyqera_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-zbfg_npgvir_zrzoref";a:2:{i:0;R:18031;i:1;R:17673;}s:17:"1242:jrofvgr-zbir";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-zbir_qbja";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-zbir_vgrzf_gb_n_arj_pbyyrpgvba_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-zbir_gb_obggbz";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-zbir_gb_gbc";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-zbir_hc";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-zbirq_vgrzf_sebz_pbyyrpgvba_jvgu_pbhag_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-zhfg_or_nffbpvngrq_jvgu_rvgure_n_hfre_be_n_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-zhfg_cebivqr_frnepu_grez_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-zhfg_or_purpxrq_va_gb_ivrj";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-zhfg_or_purpxrq_va_gb_fubj";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-zhfg_or_yrff_guna_128_punenpgref_ybat";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-zhfg_or_ybttrq_va";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-zl_npgvivgl";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-zl_vasb";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-anzr_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:17:"1242:jrofvgr-anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-anzr_abg_va_fryrpg_na_nygreangr";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-anzr_cersreerq_sbe_ynathntr_lrf";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-anzr_cersreerq_sbe_ynathntr_uryc_gvc";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-anzr_cersreerq_gnkbabzvpnyyl_sbe_fbhepr_uryc_gvc";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-anzr_cersreerq_gnkbabzvpnyyl_sbe_fbhepr_lrf";a:2:{i:0;R:18031;i:1;R:17673;}s:18:"1242:jrofvgr-anzrf";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-anzrf_svygre";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-anzrf_puvyqera_pbyhza_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-anzrf_pbzzba_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-anzrf_pbzzba_yvfg_ol_ynathntr_nffvfgvir_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-anzrf_phengvba_pbyhza_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-anzrf_rg_ny";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-anzrf_rkcynangvba";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-anzrf_anzr_pbyhza_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-anzrf_cneragf_pbyhza_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-anzrf_cersreerq_pbyhza_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-anzrf_eryngvbafuvc_pbyhza_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-anzrf_fbheprf_pbyhza_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-anzrf_fgnghf_pbyhza_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-anzrf_flabalzf_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-phengbe_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-zbqrengbe_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-znva_fcrpvrf_cntr_yvax_jvgu_fcnprf";a:2:{i:0;R:18031;i:1;R:17673;}s:18:"1242:jrofvgr-arire";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-arj_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-arj_pbagnpg_hf_gbcvp";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-arj_arjf_vgrz";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-arjf_qngr";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-arj_frnepu_fhttrfgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-arjf_vgrz_qngr_nf_fubja_gb_hfr";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-arjf_vgrz_vf_ivfvoyr_ba_jrofvg";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-arjf_vgrz";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-arjf_vgrz_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-arjf_vgrzf";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-arjfsrrq";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-arjfsrrq_uryc_sbe_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-arjfsrrq_uryc_sbe_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-arjfsrrq_uryc_sbe_sbphf_yvfg";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-arjfsrrq_uryc_sbe_cebsvyr";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-arjfsrrq_uryc_sbe_gnkba";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-arjfsrrq_uryc_sbe_jngpuyvfg";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-arj_hcybnq";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-arj_hfre";a:2:{i:0;R:18031;i:1;R:17673;}s:17:"1242:jrofvgr-arkg";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-ab_npgvir_zrzoref";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-ab_pbyyrpgvbaf_nccyl";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-ab_pbzzragf_ner_ninvynoyr_sbe_fhowrpg";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-ab_pbzzragf_unir_orra_yrsg_lrg";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-ab_reebef_ner_ninvynoyr";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-ab_uneirfgvat_ybtf_sbe_guvf_qn";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-ab_vgrzf_jrer_pbcvrq_gb_pbyyrpgvbaf_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:17:"1242:jrofvgr-abar";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-ab_arjf_vgrzf_ner_ninvynoyr_zn";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-ahz_pbagrag_cnegaref";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-ahz_qngn_bowrpgf";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-ab_erpbeq_sbhaq_zngpuvat_lbhe_pevgrevn";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-ab_eryngrq_anzrf";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-ab_erfhygf_sbe";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-ab_frnepu_fhttrfgvbaf_ner_ninv";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-ab_gnfxf_sbhaq";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-ab_fheirl_erfcbafrf_ner_ninvyn";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-abg_nccyvpnoyr";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-abg_rinyhngrq";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-abg_erpbtavmrq_ol_ninvynoyr_uvrenepuvrf";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-abg_lrg_vzcyrzragrq_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:17:"1242:jrofvgr-abgr";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-abgr_nobhg_ubzbalz_ceboyrzf";a:2:{i:0;R:18031;i:1;R:17673;}s:18:"1242:jrofvgr-abgrf";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-abgrf_abg_fubja_gb_hfre";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-abgr_nyy_gvzrf_hgp";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-abgr_gung_vg_znl_gnxr_n_srj_zv";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-abgvsvpngvba_serdhrapl_qnvyl_qvtrfg";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-abgvsvpngvba_serdhrapl_fraq_vzzrqvngryl";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-abgvsvpngvba_serdhrapl_arire";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-abgvsvpngvba_serdhrapl_jrrxyl";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-abgvsvpngvba_serdhrapl_arjfsrrq_bayl";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-abgvsvpngvbaf_naq_zrffntrf_erivrj_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-rznvy_hcqngrf_sbe_rby_nqqvpgf";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-rznvy_hcqngrf_sbe_rby_zrzoref";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-abgvsvpngvbaf_gno_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-gnkba_abg_sbhaq_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-abg_choyvfurq_lrg";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-abg_fubja_ba_gur_jrofvgr_abgr";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-ab_hcybnqrq_pbagrag_vf_ninvynoyr";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-ab_hfref_zngpurq_frnepu";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-ab_hfre_fhozvggrq_qngn_bowrpgf";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-ahpyrbgvqr_frdhraprf_apov_zvffvba";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-ahpyrbgvqr_frdhraprf_apov_qngnonfr";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-ahpyrbgvqr_frdhraprf_cebgrvaf_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-bowrpg_phengvba";a:2:{i:0;R:18031;i:1;R:17673;}s:19:"1242:jrofvgr-bowrpg";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-bowrpgf_phengrq";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-bowrpg_fgnghf";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-bowrpg_fgnghf_nyy_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-bowrpg_fgnghf_gehfgrq_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-bowrpg_fgnghf_haerivrjrq_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-bowrpg_fgnghf_hagehfgrq_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-bowrpg_glcr";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-bowrpg_glcr_nyy_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-bowrpg_glcr_pbyyrpgvba_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-bowrpg_glcr_pbzzhavgl_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-bowrpg_glcr_vzntr_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-bowrpg_glcr_fbhaq_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-bowrpg_glcr_gnkba_pbaprcg_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-bowrpg_glcr_grkg_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-bowrpg_glcr_hfre_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-bowrpg_glcr_ivqrb_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-bowrpg_ivfvovyvgl";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-bowrpg_ivfvovyvgl_nyy_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-bowrpg_ivfvovyvgl_ivfvoyr_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-bowrpg_ivfvovyvgl_vaivfvoyr_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:69:"1242:jrofvgr-byqre_irefvba_bs_yngrfg_choyvfurq_qngn_bowrpg_gvgyr_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-byqre_irefvba_bs_yngrfg_choyvfurq_qngn_bowrpg_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-crepragntr_bs_puvyqera_jvgu_vzntrf";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-crepragntr_bs_puvyqera_jvgu_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-ahzore_bs_gnkn_ng_guvf_ragel";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-ahzore_bs_gehfgrq_vzntrf_ng_guvf_ragel";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-ahzore_bs_gehfgrq_grkg_bowrpgf_ng_guvf_ragel";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-ahzore_bs_haerivrjrq_vzntrf_ng_guvf_ragel";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-ahzore_bs_haerivrjrq_grkg_bowrpgf_ng_guvf_ragel";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-bayl_zhygv_frnepu_fhttrfgvbaf";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-bayl_fubj_nhgubevgngvir_pbagra";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-bayl_fubj_hanccebirq_phengbef";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-ba_gvzr_pby_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-bcgvba_cyrnfr_fryrpg";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-be_nqq_vg_gb_na_rkvfgvat_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-be_nqq_vg_gb_na_rkvfgvat_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-be_pbcl_gurz_gb_rkvfgvat_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-be_rznvy_rqhpngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-be_zbir_gurz_gb_rkvfgvat_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-bevtvany_bowrpg";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-bevtvany";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-bgure_hf_qbyynef_nzbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-bgure_pbyyrpgvba_vgrzf_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-bgure_pbzzhavgl_vgrzf_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-bgure_gnkn_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-bhgyvax";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-bireivrj";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-cntr_yvaxrq_gb";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-cntr_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-cntr_anivtngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-cntr_abg_sbhaq";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-cntr_ersrerapr";a:2:{i:0;R:18031;i:1;R:17673;}s:17:"1242:jrofvgr-cntr";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-cntr_erfhygf_nit";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-cntr_heyf";a:2:{i:0;R:18031;i:1;R:17673;}s:18:"1242:jrofvgr-cntrf";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-cntrf_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-cntrf_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-cntr_fgngvfgvpf_naq_gbbyf";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-cntrf_jvgu_cvpgherf_naq_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-cntrf_jvgu_cvpgherf_be_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-cntr_fgngvfgvpf";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-cntr_fgngvfgvpf_rkcynangvba";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-cntr_ivrjf_gu";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-cntrf_phengbe_frpgvba_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-cntrf_nqzva_frpgvba_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-cntrf_zrgubq_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-cntvangvba_cntr_ahzore";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-cntvangvba_arkg";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-cntvangvba_arkg_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-cntvangvba_cerivbhf";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-cntvangvba_cerivbhf_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-cnenzrgref";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-cnegare_vasbezngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-cnegarevat_fgrcf";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-cnegare_cntr";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-cnegare";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-cnffjbeq_zhfg_or_4gb16_punenpgref";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-cnffjbeq_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:18:"1242:jrofvgr-cnhfr";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-crbcyr_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-crepragntr_bs_qrfpraqnagf_jvgu_vzntrf";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-crepragntr_bs_qrfpraqnagf_jvgu_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-creznyvax";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-crefbany_cebsvyr_zrah";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-crefbany_fcnpr";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-cyrnfr_nfx_ovt_orsber_punatvat_gbp";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-cyrnfr_pbasvez_lbhe_qbangvba_qrgnvyf";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-cyrnfr_abgr_gung_fbzr_bs_gurfr";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-cyrnfr_choyvfu_guvf_erfbhepr_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:19:"1242:jrofvgr-cyrnfr";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-cyrnfr_erserfu";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-cyrnfr_vaqvpngr_phengvba_ernfba";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-cyrnfr_fgngr_bar_perqragvny";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-cyrnfr_abgr_jvxv_rgp_ner_abg_fcz";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-cyrnfr_jnvg";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-cbfg_pbzzrag";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-cersreerq_pbzzba_anzr_nqivfbel_vasbezngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-cerff_ebbz";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-cerivrj_punatrf";a:2:{i:0;R:18031;i:1;R:17673;}s:71:"1242:jrofvgr-cerivrj_irefvba_bs_yngrfg_choyvfurq_qngn_bowrpg_gvgyr_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-cerivrj";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-cerivbhfyl_choyvfurq";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-cebprrq_gb_purpxbhg_cntr";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-cebprff_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-cebsvyr_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-cebsvyr";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-cebsvyr_vzntr_nyg_grkg_phengbe";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-cebsvyr_vzntr_nyg_grkg_zrzore";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-cebsvyr_arjfsrrq";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-cebsvyr_cvpgher";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-cebwrpg";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-cebivqre";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-cebivqref";a:2:{i:0;R:18031;i:1;R:17673;}s:19:"1242:jrofvgr-choyvp";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-choyvp_qbznva";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-choyvfu_nsgre_hgp";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-choyvfu_punatrf";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-choyvfurq";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-choyvfurq_cneraf";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-choyvfu_vgrz_onfrq_ba_gvzr_frg";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-choyvfu";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-choyvfu_erdhrfgrq";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-chapghngvba_pbzzn";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-chapghngvba_frzv_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-dhnegreyl";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-envyf_qngnonfrf";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-envyf_raivebazrag";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-enax_erpbtavmrq_ol_ntrag";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-enax_erpbtavmrq_ol_sebz_fbhepr";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-enax_erpbtavmrq_ol_ntrag_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-engrq_ol_pbhag_crbcyr";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-engvat_nqqrq_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-engvat_abg_nqqrq_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-erpncgpun";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-erpncgpun_vapbeerpg_reebe_jvgu_napube";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-erprag_rby_zrzore_npgvivgl";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-erprag_hcqngrf";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-erpragyl_ivfvgrq";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-erpvcvragf";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-erpbtavmrq_ol_nf_n_enax";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-erpbtavmrq_ol_sebz_fbhepr_nf_n_enax";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-erpbtavmrq_ol";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-erpbeq_abg_sbhaq";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-eryngrq_anzrf_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-erzbir_phengbefuvc_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-erzbir_qngn_bowrpg_nffbpvngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-erzbir_zrzorefuvc";a:2:{i:0;R:18031;i:1;R:17673;}s:19:"1242:jrofvgr-erzbir";a:2:{i:0;R:18031;i:1;R:17673;}s:18:"1242:jrofvgr-ercyl";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-eribxr_shyy_phengbe_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-eribxr_znantre_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-erzbirq_pbhag_vgrzf_sebz_pbyyrpgvba_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-erdhrfg_znvyvat_yvfg_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-erdhrfg";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-erdhverq_sbez_ryrzrag";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-erfrg_cnffjbeq_ragre_arj_cnffjbeq_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-erfrg_cnffjbeq_vafgehpgvbaf_frag_gb_hfre_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-erfrg_cnffjbeq_gbxra_rkcverq_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-erfbhepr";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-erfbheprf";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-erfcbafr_sbezngf";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-erfcbafr";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-erfhygf_cre_cntr";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-erfhygf";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-erfhygf_bssfrg";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-erghea_pbzzba_anzrf_sbe_gur_cntr_gnkba";a:2:{i:0;R:18031;i:1;R:17673;}s:19:"1242:jrofvgr-erghea";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-erghea_nyy_pbzzba_anzrf_sbe_guvf_gnkba";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-erghea_nyy_flabalzf_sbe_guvf_gnkba";a:2:{i:0;R:18031;i:1;R:17673;}s:63:"1242:jrofvgr-ergheaf_nyy_zrgnqngn_nobhg_n_cnegvphyne_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:64:"1242:jrofvgr-ergheaf_nyy_zrgnqngn_nobhg_n_cnegvphyne_qngn_bowrpg";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-ergheaf_rvgure_n_cbfvgvir_be_artngvir_erfcbafr";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-erivfvbaf";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-evpuarff_fpber";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-eff_srrq";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-fnir_pbzzrag_ybjrepnfr";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-fnir_phengrq_nffbpvngvba_fhozvg_ohggba";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-fnir_rznvy_frggvatf";a:2:{i:0;R:18031;i:1;R:17673;}s:17:"1242:jrofvgr-fnir";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-fpvragvsvp_anzr";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-fpv_anzr_nit_gnoyr_urnq";a:2:{i:0;R:18031;i:1;R:17673;}s:19:"1242:jrofvgr-frnepu";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-frnepu_ol_grez_cntr_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-frnepu_ol_cebivqre_zrgubq_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-frnepu_sbe_pbzzragf_pbagnvavat_gur_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-frnepu_sbe_phengbef_pbagnvavat";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-frnepu_sbe_vgrzf_pbagnvavat";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-frnepu_sbe_zrffntrf_pbagnvavat";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-frnepu_sbe_grezf_pbagnvavat";a:2:{i:0;R:18031;i:1;R:17673;}s:85:"1242:jrofvgr-frnepu_sbe_hfref_pbagnvavat_guvf_va_gurve_hfreanzr_anzr_be_rznvy_nqqerff";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-frnepu_ybt_ercbeg_vageb";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-frnepu_zrgubq_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-frnepu_arkg_ynory";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-frnepu_cerivbhf_ynory";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-frnepu_vachg_nqivfbel_vasbezngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-frnepu_erfhygf";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-frnepu_svryq_ynory";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-frnepu_cynprubyqre";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-frnepu_fhttrfgvba_nqzva_vageb";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-frnepu_fhttrfgvba_perngrq";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-frnepu_fhttrfgvba_hcqngrq";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-frnepu_fhttrfgvbaf";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-frnepu_grez_qrgnvy_ercbeg";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-frnepu_grez_ercbegf";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-frnepu_grez_ercbegf_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-frnepu_grez";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-frnepu_gur_fvgr";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-frr_nyy_bs_lbhe_pbyyrpgvbaf";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-frr_nyy_bs_lbhe_pbzzhavgvrf";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-frr_nyy_pynffvsvpngvbaf_jvgu_pbhag_ugzy";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-frr_nyy_pbyyrpgvbaf_jvgu_pbhag_ugzy";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-frr_nyy_pbzzragf_jvgu_pbhag_sbe_grkg_be_engr";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-frr_nyy_pbzzhavgvrf_jvgu_pbhag_ugzy";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-frr_nyy_srngherq_pbyyrpgvbaf_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-frr_nyy_hcqngrf_jvgu_pbhag_ugzy";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-frr_nyy_zrqvn_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-frr_nyy_rqvgbef_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-frr_zber";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-frr_abgrf";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-fryrpg_n_uvrenepul_nebhaq_juvp";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-fryrpg_na_vgrz_sebz_gur_zrah";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-fryrpg_gbby_naq_tb";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-fryrpg_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-fryrpg_gbcvp";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-fryrpgrq_ynathntr_nqivfbel_vasbezngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-fryrpgrq_vgrzf";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-fraq_pbagnpg_rznvy";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-fraq_rznvy_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:17:"1242:jrofvgr-fraq";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-frag_vaivgngvbaf_gb_hfref";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-frc_rznvyf_jvgu_pbzznf_abgr";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-freire_vc_nqqerff";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-frg_nf_rkrzcyne";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-funer_n_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-fubj_rznvy_zrffntr_nern";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-fubj_qngn_sebz_nyy_pbagrag_cnegaref";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-fubj_shyy_gerr";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-fubjvat_reebef_gur_reebe_ybt_s";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-fubjvat_cebpf_sebz";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-fubjvat";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-fubja_gb_gur_hfre_cneraf";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-fubja_gb_hfre_nf_gur_gvgyr_bs_cntr";a:2:{i:0;R:18031;i:1;R:17673;}s:17:"1242:jrofvgr-fubj";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-fubj_fgnghf_zrffntr";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-fubj_gnfxf";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-fubj_jneavat_zrffntr";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-fvta_va";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-fvta_va_erzrzore_zr_qvfnyybjrq_sbe_nqzvaf_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-fvta_va_fhpprffshy_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-fvta_va_hafhpprffshy_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-fvta_bhg";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-fvgr_pzf";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-fvgr_vasbezngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-fvgr_ynathntr";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-fvgr_frggvatf_zrah";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-fxvc_gb_pbagrag";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-fxvc_gb_anivtngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-fxvc_gb_gnoyr_bs_pbagragf";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-fbpvny_funevat_gjvggre_gjrrg_ohggba";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-fbpvny_funevat_gjvggre_sbyybj_rby_ohggba";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-fbzr_erdhverq_svryqf_jrer_abg_ragrerq";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-fbeg_ol_ohggba";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-fbeg_ol_ynory";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-fbeg_ol_arjrfg_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-fbeg_ol_byqrfg_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-fbeg_ol_engvat_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-fbeg_ol_evpuarff_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-fbeg_ol_nycunorgvpny_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-fbeg_ol_erirefr_nycunorgvpny_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-fbeg_ol_erpragyl_nqqrq_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-fbeg_ol_fgnghf_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-fbeg_ol_gvgyr_nfpraqvat";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-fbeg_ol_gvgyr_qrfpraqvat";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-fbeg_ol_lrne_nfpraqvat";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-fbeg_ol_lrne_qrfpraqvat";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-fbeg_pbyyrpgvba_ol_ynory";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-fbeg_beqre";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-fbeg_ol";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-fbeg_svryq";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-fbhaq_svyr";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-fbhaq_sebz";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-fbhaq_bowrpg";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-fbhaqf_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-fbhepr_vasbezngvba_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-fbhepr_naq_nqqvgvbany_vasbezngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-fbhepr_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-fcrpvny_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-fcrpvny_pbyyrpgvbaf_pnaabg_or_qrfgeblrq";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-fcrpvrf_phengrq";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-fcrpvrf_cebsvyr_zbqry_pc_pbhag_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-fcrpvrf_cebsvyr_zbqry_qngb_pbhag_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-fcrpvrf_cebsvyr_zbqry";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-fcrpvrf";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-fcyvg_vagb_arj_pbaprcg";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-fcz_pngrtbel_bowrpgf_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-fcz_pngrtbel_cnegare_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-fcz_pngrtbel";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-fgnegrq";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-fgngvfgvpf";a:2:{i:0;R:18031;i:1;R:17673;}s:17:"1242:jrofvgr-fgng";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-fho_urnqvat";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-fhowrpg";a:2:{i:0;R:18031;i:1;R:17673;}s:19:"1242:jrofvgr-fhozvg";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-fhozvg_grez";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-fhttrfgrq_erfhyg_cntr_vq";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-fhttrfgrq_erfhygf_nit";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-fhccyvre_nyypncf";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-fhccyvre_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-fheirl_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-fjvgpu_ynathntr_nqivfbel_vasbezngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-flabalz";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-flabalzf_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-gnoyr_pbyhza_urnqre_npgvbaf";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-gnoyr_bs_pbagragf_oernxqbja";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-gnoyr_bs_pbagragf_oernxqbja_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-gnoyr_bs_pbagragf_rqvgbe";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-gnoyr_bs_pbagragf";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-gnetrg_oynax_nqivfbel_vasbezngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-gnfx_fgnghf";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-gnfx_fgnghf_npgvir_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-gnfx_fgnghf_phengrq_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-gnfx_fgnghf_vtaberq_bcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-gnfxf_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-gnkn_pbyhza_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-gnkn_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:18:"1242:jrofvgr-gnkba";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-gnkba_ovbzrqvpny_grezf_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-gnkba_pbaprcg_fgngf";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-gnkba_qrgnvyf_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-gnkba_rqhpngvba_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-gnkba_rqhpngvba_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-gnkba_rqhpngvba_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-gnkba_tebhc";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-gnkba_vq";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-gnkba_vqragvsvpngvba_erfbheprf_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-gnkba_vqragvsvpngvba_erfbheprf_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-gnkba_vqragvsvpngvba_erfbheprf_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-gnkba_arjfsrrq";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-gnkba_ahpyrbgvqr_frdhraprf_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-gnkba_cnegare_yvaxf_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-gnkba_cnegare_yvaxf_rzcgl_yrnea_zber_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-gnkba_cnegare_yvaxf_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-gnkba_cnegare_yvaxf_vageb";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-gnkba_cnegare_yvaxf_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-gnkba_cntr_pbagrag_qvfpynvzre_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-gnkba_cntr_pbagrag_qvfpynvzre";a:2:{i:0;R:18031;i:1;R:17673;}s:62:"1242:jrofvgr-gnkba_cntr_pbagrag_qvfpynvzre_fhttrfg_vzcebirzrag";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-gnkbabzvp_fhzznel_bs_pbagrag";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-gnkba_erpbtavmrq_ol_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-gnkba_erpbtavmrq_ol";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-gnkba_fryrpgrq_sebz_frnepu_erf";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-gnkba_fhttrfgrq";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-grpuavpny_shapgvbaf";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-grez_pnaabg_or_yrsg_oynax";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-grezf_nterrzrag_sbez_snyyonpx";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-grezf_nterrzrag_sbez_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-grezf_nterrzrag_sbez_fhozvg";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-grezf_bs_hfr_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-grez_sbe_frnepu_nqzva_hv";a:2:{i:0;R:18031;i:1;R:17673;}s:17:"1242:jrofvgr-grfg";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-grkg_bowrpg";a:2:{i:0;R:18031;i:1;R:17673;}s:17:"1242:jrofvgr-grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-grkg_pncvgny";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-grkg_fhzznel_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-grkg_fhzznel_rzcgl_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-grkg_fhzznel_zber_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-grkg_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-gunaxf_sbe_qbangvba";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-gunaxf_sbe_lbhe_gvzr";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-gunax_lbh_sbe_lbhe_trarebhf_fhccbeg";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-gunax_lbh";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-gur_nzbhag_ragrerq_jnf";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-gur_pbzzrag_jnf_fhpprffshyyl_hcqngrq";a:2:{i:0;R:18031;i:1;R:17673;}s:49:"1242:jrofvgr-gur_pbzzrag_jnf_fhpprffshyyl_qryrgrq";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-gur_pbagrag_pbhyq_abg_or_qvfcy";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-gur_pbagrag_jnf_hcqngrq";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-gur_pc_pbhag_vasb";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-gur_pbhag_ercerfragf_gur_gbgny";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-uvrenepuvrf_ragevrf_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-uvrenepuvrf_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-gur_svyr_jnf_hcybnqrq";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-gur_sbyybjvat_ovoyvbtencul";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-gbcvpf_nivynoyr_gb_pbagnpg_hf_vasb";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-gur_sbyybjvat_hfref_jrer_cerfr";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-gur_tybffnel_grez_jnf_fhpprffs";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-gur_vq_bs_cebivqre_uvrenepul_lbh_ner_frnepuvat";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-gur_vzntr_sebz_guvf_fbhepr_unf_abg_orra_erivrjrq";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-gur_vzntr_sebz_guvf_fbhepr_vf_abg_gehfgrq";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-gur_vasb_uvtuyvtugrq_vf_erivrjrq";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-gur_vasbezngvba_uvtuyvtugrq_va";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-gur_wfba_erfcbafr_sbe_guvf_zrgubq";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-gur_zrffntr_jnf_frag";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-gur_arjf_vgrz_perngrq";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-gur_arjf_vgrz_hcqngrq";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-gur_arj_gbcvp_jnf_perngrq";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-gur_arj_hfre_jnf_perngrq";a:2:{i:0;R:18031;i:1;R:17673;}s:61:"1242:jrofvgr-gurer_ner_pheeragyl_ab_zrzoref_va_guvf_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-gur_fhttrfgrq_cntr_gb_qverpg_hfref_gb_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-gur_gbcvp_jnf_hcqngrq";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-gur_hfre_jnf_hcqngrq";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-gur_hfre_jub_cresbezrq_guvf_npgvba_jnf_erzbirq";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-gur_kzy_frnepu_erfcbafr_vzcyrzragf";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-guvf_nern_fubjf_nyy_fhozvffvba";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-guvf_pnaabg_or_haqbar_ner_lbh_fher";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-guvf_pbyyrpgvba_unf_ab_znantref";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-guvf_pbzzrag_jnf_qryrgrq";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-guvf_pbzzhavgl_unf_ab_raqbefrq_pbyyrpgvbaf";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-guvf_pbzzhavgl_unf_ab_sbphf_yvfg";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-guvf_pbzzhavgl_jnf_qryrgrq";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-guvf_qbrf_abg_arprffnevyl_zrna";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-guvf_vf_n_syng_yvfg_bs_10_zvyyvba_fgevatf";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-guvf_vf_n_sbphf_pbyyrpgvba_sbe_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-guvf_vf_gur_oernxqbja_bs_puncg";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-uvrenepul_fryrpgbe_qebc_qbja_yvfg_ynory";a:2:{i:0;R:18031;i:1;R:17673;}s:64:"1242:jrofvgr-guvf_vf_gur_ynory_gung_jvyy_or_hfrq_sbe_nggevohgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-tovs_bppheerapr_qvfpynvzre";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-tovs_bppheerapr_yrnea_zber_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-cntr_zrgubq_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-cvat_zrgubq_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-cebivqre_uvrenepuvrf_zrgubq_qrfpevcgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-guvf_cntr_fubjf_vasbezngvba_no";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-guvf_erfbhepr_hachoyvfurq_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-guerng_fgnghf_urnqre_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-guhzoanvy_cntr_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-gvzr_ntb";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-gvalhey";a:2:{i:0;R:18031;i:1;R:17673;}s:18:"1242:jrofvgr-gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-gbp_ragel_pby_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-gbp_ab_ybatre_ninvynoyr";a:2:{i:0;R:18031;i:1;R:17673;}s:16:"1242:jrofvgr-gbp";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-gbcvp_nern";a:2:{i:0;R:18031;i:1;R:17673;}s:18:"1242:jrofvgr-gbcvp";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-gb_cebprff_lbhe_qbangvba_cyrnfr_cebprrq";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-gb_erzrql_guvf";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-gb_frr_nyy_npgvivgl_pbzovangvb";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-gb_fraq_rznvy_ragre_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:75:"1242:jrofvgr-gb_fhozvg_grkg_pbagrag_sbe_gnkba_cyrnfr_or_fher_lbh_ner_ybttrq";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-gbgny_pbzzragf_unir_orra_fhozvggrq";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-gbgny_qvfgvapg_frnepurf";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-gbgny_vgrzf_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-gbgny_frnepurf";a:2:{i:0;R:18031;i:1;R:17673;}s:18:"1242:jrofvgr-gbgny";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-genafyngvba_vasbezngvba_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-genafyngvbaf_fhozvg";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-gevttre_frnepu_grez_ragrerq_ol";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-gehr_ynory";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-gehapngrq_pbzzrag_bzvffvba";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-gehapngrq_pbzzrag_bzvffvba_yvaxyrff";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-gehfgrq";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-gehfgrq_vzntrf";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-gehfgrq_zncf";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-gehfgrq_grkg_bowrpgf";a:2:{i:0;R:18031;i:1;R:17673;}s:19:"1242:jrofvgr-ghzoye";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-gjvggre";a:2:{i:0;R:18031;i:1;R:17673;}s:17:"1242:jrofvgr-glcr";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-hanoyr_gb_pbcl_vgrzf_gb_pbyyrpgvba_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-hanoyr_gb_vaivgr_hfref_gb_pbzzhavgl_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-havdhr_cntr_ivrjf_gu";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-haxabja";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-hachoyvfurq";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-haerivrjrq";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-haerivrjrq_vzntrf";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-haerivrjrq_zncf";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-haerivrjrq_grkg_bowrpgf";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-hagehfgrq";a:2:{i:0;R:18031;i:1;R:17673;}s:19:"1242:jrofvgr-hcqngr";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-hcqngr_pbyyrpgvba_fhozvg_ohggba";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-hcqngr_hfre_fhpprffshy_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-hcqngr_hfre_hafhpprffshy_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-hcqngrq_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-hcqngrq_zrzore";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-hcqngrq";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-hcqngrq_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-hcqngrf";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-hcybnq_pbagrag";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-hcybnq_ybtb_uryc_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-hcybnqrq_ol";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-hcybnqrq_pbagrag";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-hcybnqrq_ba";a:2:{i:0;R:18031;i:1;R:17673;}s:19:"1242:jrofvgr-hcybnq";a:2:{i:0;R:18031;i:1;R:17673;}s:16:"1242:jrofvgr-hey";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-hf_qbyynef_100";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-hf_qbyynef_35";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-hf_qbyynef_50";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-hf_qbynef_75";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-hfrq_sbe_heyf_abgr";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-hfrq_sbe_sevraqyl_hey_abgr";a:2:{i:0;R:18031;i:1;R:17673;}s:65:"1242:jrofvgr-hfre_npgvingvba_snvyrq_erfrag_inyvqngvba_rznvy_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-hfre_npgvingvba_snvyrq_hfre_abg_sbhaq_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-hfre_npgvingvba_fhpprffshy_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-hfre_npgvivgl_pyvpx_ba_gur_ahzoref";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-hfre_npgvivgl_ercbeg_vageb";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-hfre_npgvivgl_cntr_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-hfre_npgvivgl_fgngf_negvpyrf_nqqrq";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-hfre_npgvivgl_fgngf_negvpyrf_nqqrq_qebcqbja";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-hfre_npgvivgl_fgngf_pbzzrag_fhozvggrq";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-hfre_npgvivgl_fgngf_pbzzba_anzrf_nqqrq";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-hfre_npgvivgl_fgngf_pbzzba_anzrf_phengrq";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-hfre_npgvivgl_fgngf_pbzzba_anzrf_erzbirq";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-hfre_npgvivgl_fgngf_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-hfre_npgvivgl_fgngf_bowrpgf_phengrq";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-hfre_npgvivgl_fgngf_bowrpgf_phengrq_qebcqbja";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-hfre_npgvivgl_fgngf_frg_rkrzcyne";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-hfre_npgvivgl_fgngf_gnkn_pbzzragrq";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-hfre_npgvivgl_fgngf_gnkn_pbzzragf";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-hfre_npgvivgl_fgngf_gnkn_pbzzragf_qebcqbja";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-hfre_npgvivgl_fgngf_gnkn_phengrq";a:2:{i:0;R:18031;i:1;R:17673;}s:52:"1242:jrofvgr-hfre_npgvivgl_fgngf_jvxvcrqvn_abzvangrq";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-hfre_ntrag";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-hfre_nyernql_npgvir_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-hfre_pbzzragf";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-hfre_pbzzrag";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-hfre_pbzzragrq_ba_fbzrguvat_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-hfre_pbzzragrq_ba_byqre_qngn_bowrpg_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-hfre_pbzzragrq_ba_gurzfrys";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-hfre_pbzzragrq_ba_qryrgrq_hfre";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-hfre_shyy_anzr_jvgu_phengbe";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-hfre_vq";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-hfre_vaqrk_vageb";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-hfre_wbvarq_pbzzhavgl_ba_qngr";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-hfre_wbvarq_jura";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-hfre_yrsg_pbzzrag_ba_qngr";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-hfre_ab_ybatre_unf_znantre_npprff_gb_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-hfre_craqvat_abgvsvpngvbaf_nffvgvir";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-hfre_craqvat_abgvsvpngvbaf_jvgu_pbhag_nffvgvir";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-hfre_craqvat_abgvsvpngvbaf_pbzzragf_nffvfgvir";a:2:{i:0;R:18031;i:1;R:17673;}s:69:"1242:jrofvgr-hfre_craqvat_abgvsvpngvbaf_pbzzragf_jvgu_pbhag_nffvfgvir";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-hfre_jnf_nqqrq_nf_rqvgbe_bs_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-hfreanzr_gnxra";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-hfreanzr_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-hfreanzr";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-hfre_erfcbafr";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-hfre_fnlf_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-hfre_fhozvggrq_grkg_sbhaq";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-hfre_fhozvggrq_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-hfre_flfgrz_qbja";a:2:{i:0;R:18031;i:1;R:17673;}s:17:"1242:jrofvgr-hfre";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-hfref_nobhg_zr_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-hfref_pbagrag_cnegaref_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-hfref_pbagrag_cnegaref_vasbezngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-hfref_pbagrag_cnegaref_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-hfref_phengvba_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-hfref_sbez_nppbhag_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-hfref_sbez_phengvba_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-hfref_sbez_cebsvyr_vasb_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-hfref_sbez_gvc";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-hfref_zrzore_bs_pbhag_pbzzhavgvrf";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-hfref_zl_vasb_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-hfref_craqvat_npgvingvba_urycre";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-hfref_craqvat_npgvingvba_zrffntr";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-hfref_gung_pna_rqvg_guvf_pbyyrpgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-hfvat_gur_fvgr";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-inyvqngvba_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-inyvqngvba_sbyybjvat_svryqf";a:2:{i:0;R:18031;i:1;R:17673;}s:19:"1242:jrofvgr-inyhrf";a:2:{i:0;R:18031;i:1;R:17673;}s:18:"1242:jrofvgr-inyhr";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-inyhr_rzcgl";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-inyhr_qrsnhyg";a:2:{i:0;R:18031;i:1;R:17673;}s:60:"1242:jrofvgr-irefvba_1_0_hfrf_svryqf_sebz_gur_yngrfg_irefvba";a:2:{i:0;R:18031;i:1;R:17673;}s:19:"1242:jrofvgr-irggrq";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-ivqrb_sebz";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-ivqrb_bowrpg";a:2:{i:0;R:18031;i:1;R:17673;}s:50:"1242:jrofvgr-ivqrb_gvgyr_abg_ninvynoyr_va_ynathntr";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-ivqrbf_jvgu_pbhag";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-ivrj_ireo";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-ivrj_nqqrq_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-ivrj_nf_ohggba";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-ivrj_nf_ynory";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-ivrj_pbzzba_npgvivgvrf";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-ivrj_pbagnpg_hf_fhozvffvbaf";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-ivrj_phengbef";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-ivrj_pheerag_irefvba_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-ivrj_va_pynffvsvpngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:41:"1242:jrofvgr-ivrj_genafyngvba_fbhepr_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:27:"1242:jrofvgr-ivrj_reebe_ybt";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-ivrj_shyy_fvmr_vzntr";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-ivrj_uneirfgvat_ybt";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-ivrj_negvpyr_fbhepr";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-ivrj_vzntr_fbhepr";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-ivrj_vzntr_znc_fbhepr";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-ivrj_znc_fbhepr";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-ivrj_fbhaq_fbhepr";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-ivrj_fbhepr";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-ivrj_ivqrb_fbhepr";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-ivrj_pbzzba_npgvivgvrf_yvax";a:2:{i:0;R:18031;i:1;R:17673;}s:69:"1242:jrofvgr-ivrj_bayl_cntrf_jvgu_ng_yrnfg_n_cvpgher_be_cvrpr_bs_grkg";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-ivrj_guvf_uvrenepul";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-ivrj_hfre_npgvivgl";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-ivrj_hfre_pbzzragf";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-ivrj_lbhe_phengbe_cebsvyr";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-ivfvoyr_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-ivfvgbef";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-ivivfvzb";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-jnagf_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-jngpu_yvfg";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-jngpu_yvfg_arjfsrrq";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-jro_freivpr_onfr_hey";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-jro_hfref";a:2:{i:0;R:18031;i:1;R:17673;}s:19:"1242:jrofvgr-jrrxyl";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-jrypbzr_naq_lbh_jrer_ybttrq_bhg";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-jrypbzr_gb_gur_rby_nqzvavfgeng";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-jrypbzr";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-jung_qb_gurfr_ahzoref_zrna";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-jung_vf_rby";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-jung_vf_guvf_dhrfgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-jub_ertvfgrerq_orsber";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-jub_ertvfgrerq_sebz";a:2:{i:0;R:18031;i:1;R:17673;}s:53:"1242:jrofvgr-jvxvcrqvn_dhrhr_perngr_fhpprffshy_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-jvxvcrqvn_dhrhr_perngr_hafhpprffshy_reebe";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-jvxvcrqvn_dhrhr_arj_vageb";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-jvxvcrqvn_dhrhr_arj_vafgehpgvbaf_vageb";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-jvxvcrqvn_dhrhr_arj_vafgehpgvbaf_fgrc_bar";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-jvxvcrqvn_dhrhr_arj_vafgehpgvbaf_fgrc_gjb";a:2:{i:0;R:18031;i:1;R:17673;}s:56:"1242:jrofvgr-jvxvcrqvn_dhrhr_arj_vafgehpgvbaf_fgrc_guerr";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-jvxvcrqvn_dhrhr_arj_vafgehpgvbaf_fgrc_sbhe";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-jvxvcrqvn_dhrhr_arj_cntr_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:59:"1242:jrofvgr-jvyy_svaq_gnkba_cntrf_zngpuvat_gur_frnepu_grez";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-jbexyvfg";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-kzy_erfcbafr";a:2:{i:0;R:18031;i:1;R:17673;}s:25:"1242:jrofvgr-lnubb_vzntrf";a:2:{i:0;R:18031;i:1;R:17673;}s:18:"1242:jrofvgr-lnubb";a:2:{i:0;R:18031;i:1;R:17673;}s:17:"1242:jrofvgr-lrne";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-lrf_nafjre";a:2:{i:0;R:18031;i:1;R:17673;}s:67:"1242:jrofvgr-lbh_ner_na_nqzva_fb_v_jvyy_fubj_lbh_gung_gur_reebe_jnf";a:2:{i:0;R:18031;i:1;R:17673;}s:58:"1242:jrofvgr-lbh_ner_abg_nhgubevmrq_gb_cresbez_guvf_npgvba";a:2:{i:0;R:18031;i:1;R:17673;}s:55:"1242:jrofvgr-lbh_ner_ivrjvat_guvf_enax_nf_pynffvsvrq_ol";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-lbh_pna_rqvg_gubfr_yngre_vs_ar";a:2:{i:0;R:18031;i:1;R:17673;}s:45:"1242:jrofvgr-lbh_pna_vqragvsl_lbhefrys_gb_rby";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-lbh_unir_orra_ybttrq_va_nf_hfreanzr";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-lbh_unir_orra_ybttrq_bhg";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-lbh_wbvarq_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-lbh_yrsg_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-lbh_znl_hcybnq_fgngvp_svyrf_sb";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-lbhe_rznvy_nqqerff";a:2:{i:0;R:18031;i:1;R:17673;}s:54:"1242:jrofvgr-lbh_erzbirq_gur_zrzore_sebz_gur_pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-lbhe_vc_nqqerff";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-lbhe_cersreraprf";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-lbhe_engvat";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-lbhghor";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-lbhghor_ivqrb";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-gur_qnejva_pber_gnkba_ryrzragf";a:2:{i:0;R:18031;i:1;R:17673;}s:57:"1242:jrofvgr-sbe_rknzcyr_sbe_gur_gnkba_ryrzrag_sbe_n_abqr";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-gurer_vf_ab_fvathyne_rby";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-vs_gur_qrgnvyf_cnenzrgre_vf_abg_frg";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-guvf_frpgvba_vf_hfrq_gb_perngr";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-arjf_nepuvir_cntr";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-lbh_zhfg_or_pbzsbegnoyr";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-abgr_gung_lbh_pna_ersrerapr_vz";a:2:{i:0;R:18031;i:1;R:17673;}s:47:"1242:jrofvgr-gb_fhozvg_n_fcrpvrf_cubgbtencu_sbe";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-vpba_arne_gur_gnoyr_bs_pbagrag";a:2:{i:0;R:18031;i:1;R:17673;}s:51:"1242:jrofvgr-guvf_zrgubq_gnxrf_na_vagrtre_be_fgevat";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-fhccyvre";a:2:{i:0;R:18031;i:1;R:17673;}s:19:"1242:jrofvgr-evtugf";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-evtugf_ubyqre";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-evtugf_fgngrzrag";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-ybpngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:23:"1242:jrofvgr-fbhepr_hey";a:2:{i:0;R:18031;i:1;R:17673;}s:20:"1242:jrofvgr-vaqrkrq";a:2:{i:0;R:18031;i:1;R:17673;}s:21:"1242:jrofvgr-pvgngvba";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-cyrnfr_erghea_gb_rby_ubzrcntr";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-perngr_puvyq_cntr";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-zrgn_xrljbeqf_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-zrgn_qrfpevcgvba_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-hcqngr_cntr";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-hcqngr_ynathntr";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-genafyngvba_fnirq";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-genafyngvba_qryrgrq";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-zbovyr.pbagragf.ubzr";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-zbovyr.pbagragf.gnkn";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-zbovyr.pbagragf.shyy_fvgr";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-zbovyr.pbagragf.fcrpvrf";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-zbovyr.pbagragf.rkcyber_rby";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-zbovyr.gnkn.gnkba_bireivrj";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-zbovyr.gnkn.bireivrj";a:2:{i:0;R:18031;i:1;R:17673;}s:32:"1242:jrofvgr-zbovyr.gnkn.qrgnvyf";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-zbovyr.gnkn.zrqvn";a:2:{i:0;R:18031;i:1;R:17673;}s:29:"1242:jrofvgr-zbovyr.gnkn.zncf";a:2:{i:0;R:18031;i:1;R:17673;}s:37:"1242:jrofvgr-zbovyr.gnkn.abzrapyngher";a:2:{i:0;R:18031;i:1;R:17673;}s:35:"1242:jrofvgr-zbovyr.gnkn.yvgrengher";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-zbovyr.gnkn.pbzzhavgl";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-zbovyr.gnkn.erfbheprf";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-zbovyr.gnkn.gnkba_qrgnvyf";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-zbovyr.gnkn.gnkba_zrqvn";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-zbovyr.gnkn.vzntrf";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-zbovyr.gnkn.fbhaqf";a:2:{i:0;R:18031;i:1;R:17673;}s:31:"1242:jrofvgr-zbovyr.gnkn.ivqrbf";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-zbovyr.frnepu.fhttrfgvbaf";a:2:{i:0;R:18031;i:1;R:17673;}s:43:"1242:jrofvgr-zbovyr.frnepu.ab_erfhygf_sbhaq";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-zbovyr.frnepu.erfhygf";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-pzf_zvffvat_pbagrag_gvgyr";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-pzf_zvffvat_pbagrag_zrffntr";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-pzf_ninvynoyr_va_ynathntrf";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-ahpyrbgvqr_frdhraprf";a:2:{i:0;R:18031;i:1;R:17673;}s:24:"1242:jrofvgr-ybtb_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:33:"1242:jrofvgr-rkgreany_yvax_urnqre";a:2:{i:0;R:18031;i:1;R:17673;}s:44:"1242:jrofvgr-pbzzrag_be_engr_ba_guvf_negvpyr";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-nqzva_hfre_qryrgr_fhpprffshy_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-nqzva_fcnz_qryrgr";a:2:{i:0;R:18031;i:1;R:17673;}s:46:"1242:jrofvgr-nqzva_hfre_uvqr_fhpprffshy_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:48:"1242:jrofvgr-nqzva_hfre_hauvqr_fhpprffshy_abgvpr";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-ybtva_uvqqra_hfre_zrffntr";a:2:{i:0;R:18031;i:1;R:17673;}s:42:"1242:jrofvgr-hfre_ab_ybatre_npgvir_zrffntr";a:2:{i:0;R:18031;i:1;R:17673;}s:22:"1242:jrofvgr-ab_nafjre";a:2:{i:0;R:18031;i:1;R:17673;}s:30:"1242:jrofvgr-nyybjrq_ugzy_gntf";a:2:{i:0;R:18031;i:1;R:17673;}s:36:"1242:jrofvgr-pbagnpg_hf_erdhrfg_frag";a:2:{i:0;R:18031;i:1;R:17673;}s:38:"1242:jrofvgr-pbagnpg_hf_erdhrfg_snvyrq";a:2:{i:0;R:18031;i:1;R:17673;}s:39:"1242:jrofvgr-cyrnfr_yrnir_lbhe_srrqonpx";a:2:{i:0;R:18031;i:1;R:17673;}s:26:"1242:jrofvgr-fraq_srrqonpx";a:2:{i:0;R:18031;i:1;R:17673;}s:40:"1242:jrofvgr-pbagnpg_hf_erdhrfg_erprvirq";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-ersreraprf_pnof_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:34:"1242:jrofvgr-naabgngvba_pnof_pbyba";a:2:{i:0;R:18031;i:1;R:17673;}s:28:"1242:jrofvgr-zrzore_npgvivgl";a:2:{i:0;R:18031;i:1;R:17673;}s:77:"1228:pbz-pnqer-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;s:22:"out-ihris-common-cadre";i:1;s:15:"out-ihris-0-all";i:2;s:22:"out-ihris-common-0-all";}s:79:"1228:pbz-pnqer-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:21166;i:1;R:21167;i:2;R:21168;}s:76:"1228:pbz-pnqer-422rp56oop16253r50pr58449s018nso3q1745qq-fryrpg_nabgure_pnqer";a:3:{i:0;R:21166;i:1;R:21167;i:2;R:21168;}s:61:"1228:pbz-pnqer-2586n9r4r3on9092547r3rnp14r105p5ssoqn37o-pnqer";a:3:{i:0;R:21166;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-pnqer-62rrp1s4rq8r560o2p166p945862853pn756on52-rqvg_gur_pnqer_yvfg";a:3:{i:0;R:21166;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-pnqer-0s13679r2qppno7r1s03p64pp2p8n72p50154071-ivrj_gur_pnqer_yvfg";a:3:{i:0;R:21166;i:1;R:21167;i:2;R:21168;}s:76:"1228:pbz-prhf-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;s:21:"out-ihris-common-ceus";i:1;R:21167;i:2;R:21168;}s:78:"1228:pbz-prhf-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:21175;i:1;R:21167;i:2;R:21168;}s:76:"1228:pbz-prhf-s58ro4p288p3rpp3o049qr82p8388on219268ssp-fryrpg_nabgure_pbhefr";a:3:{i:0;R:21175;i:1;R:21167;i:2;R:21168;}s:82:"1228:pbz-prhf-s558147548sn65n002q723n3s53pn7n2695qr83p-pbagvahvat_rqhpngvba_pbhefr";a:3:{i:0;R:21175;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-prhf-26244326s0rrq8o005ssr80421737p163s78s800-rqvg_gur_pbagvahvat_rqhpngvba";a:3:{i:0;R:21175;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-prhf-64pr21or22169oqpqp62737r08pr29rp3s9s0267-ivrj_gur_pbagvahvat_rqhpngvba";a:3:{i:0;R:21175;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-prhf-qnr14s8s08o68r01nps768p45n84ss58o35rsq4q-pbagvahvat_rqhpngvba";a:3:{i:0;R:21175;i:1;R:21167;i:2;R:21168;}s:59:"1228:pbz-prhf-709n23220s2p3q64q1r1q6q18p4q5280s8q82spn-anzr";a:3:{i:0;R:21175;i:1;R:21167;i:2;R:21168;}s:67:"1228:pbz-prhf-p51pnn46q091664o317n149s27r363n886902944-perqvg_ubhef";a:3:{i:0;R:21175;i:1;R:21167;i:2;R:21168;}s:65:"1228:pbz-prhf-9q7no1n557965or0rnr6205p2q860p45n3rnsp11-fgneg_qngr";a:3:{i:0;R:21175;i:1;R:21167;i:2;R:21168;}s:63:"1228:pbz-prhf-84o1478125890onq1pp4o36q6q3781773o3sqr5n-raq_qngr";a:3:{i:0;R:21175;i:1;R:21167;i:2;R:21168;}s:77:"1228:pbz-pbagnpg-n34o69sp46r7n278ps65p58oo347qr6560so046s-pbagnpg_vasbezngvba";a:3:{i:0;s:24:"out-ihris-common-contact";i:1;R:21167;i:2;R:21168;}s:73:"1228:pbz-pbagnpg-r6nso989237759p66s5o0r4226971s840rsq5r7r-znvyvat_nqqerff";a:3:{i:0;R:21187;i:1;R:21167;i:2;R:21168;}s:74:"1228:pbz-pbagnpg-r127s171q4898393r755503ss466pos54s85634o-gryrcubar_ahzore";a:3:{i:0;R:21187;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-pbagnpg-8272q321918r6979219048636408or05573o378p-nygreangr_gryrcubar_ahzore";a:3:{i:0;R:21187;i:1;R:21167;i:2;R:21168;}s:68:"1228:pbz-pbagnpg-2n2n2452p861or437o787np23onr330qr27nn694-snk_ahzore";a:3:{i:0;R:21187;i:1;R:21167;i:2;R:21168;}s:71:"1228:pbz-pbagnpg-09on557sq106s1019rp6739113r3r28qrn4oq9n6-rznvy_nqqerff";a:3:{i:0;R:21187;i:1;R:21167;i:2;R:21168;}s:63:"1228:pbz-pbagnpg-70440046n3qp2r079s23rr1p57qsn76669o732nn-abgrf";a:3:{i:0;R:21187;i:1;R:21167;i:2;R:21168;}s:88:"1228:pbz-pbagnpg-20q5618045qs5n9o4n2092o2q52pn7693oqs960r-abgrf_(cevznel_pbagnpg_crefba)";a:3:{i:0;R:21187;i:1;R:21167;i:2;R:21168;}s:62:"1228:pbz-pbagnpg-709n23220s2p3q64q1r1q6q18p4q5280s8q82spn-anzr";a:3:{i:0;R:21187;i:1;R:21167;i:2;R:21168;}s:71:"1228:pbz-pber-7s5o0nn72r7on00066qsp25s5p1sq7n3570857p5-pbasvther_flfgrz";a:3:{i:0;s:21:"out-ihris-common-core";i:1;R:21167;i:2;R:21168;}s:74:"1228:pbz-pber-pn20o4q0qp0037qoo9p44s4r58377sq5n5spsn15-nqzvavfgre_qngnonfr";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-pber-on02159r87r8ros73r3226s525nos265r52pr651-nqzvavfgre_cbfvgvbaf_naq_perng";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:72:"1228:pbz-pber-4o3po1o7o5qq2n873q2or81op61nppn5rno92o7r-pbasvther_zbqhyrf";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-pber-sn4orp987sp8401nq9r164r0488q7qn66qrq6617-ranoyr_naq_qvfnoyr_gur_inevbhf";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:69:"1228:pbz-pber-rn297ps8rn77591n3n8s1324q69o659rsq57s353-znantr_ercbegf";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-pber-0q71r01qr1982783n12qp236o900p12o47s73p6q-znantr_gur_fgnaqneq_ercbegf_ni";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:73:"1228:pbz-pber-9n1nqo7n8091354636o3pq7sor34no3715sn7sqs-sbez_eryngvbafuvcf";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-pber-19671s52p93038q54q6q0rr890r8nps6orr8pqqs-qrsvar_ubj_sbezf_ner_eryngrq_s";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:62:"1228:pbz-pber-88op3sr3qnqqrr139809q036s18o985sor165957-ercbegf";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-pber-81p8o3pop113o7o421s08pop5n14690108304so1-qrsvar_ercbegf_onfrq_ba_cerivb";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:67:"1228:pbz-pber-4494377254676ppr03s76snqn525qo6349qnsoq0-ercbeg_ivrjf";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:72:"1228:pbz-pber-o1o8s390qrr590ss157s6sspsq76s7sr37717s5p-oebjfr_zntvp_qngn";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-pber-7ss100738n491646s938p9612924n212q83p5rsq-oebjfr_gur_pbasvthengvba_qngn";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:70:"1228:pbz-pber-83s23464o6o73n4pss35p34nrp4o6n0r0r6496qo-gnfxf_naq_ebyrf";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-pber-7819807p72n991n33r648p1rq3on68r1193501on-nqzvavfgre_gnfxf_naq_ebyrf_sbe";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:69:"1228:pbz-pber-rp79488481214o06n5p34809p24ss24pppqr2329-znantr_ybpnyrf";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-pber-47112r3p5qp850s4ropq76222s02034q8po2071s-znantr_gur_ybpnyrf_znqr_ninvyn";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-pber-60865n55q575470308929r5970q44rqpoqo31366-onpxtebhaq_cebprffrf";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-pber-01q6os5n49s586qqnn640r35535ons9s9sor41qq-rknzvar_onpxtebhaq_cebprffrf_l";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:67:"1228:pbz-pber-2803n14s3p91354s34sr0nn2o3rn44s6q109ss89-oebjfr_sbezf";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-pber-2149153918n6oo2nq90sp01956p4qn490n2r46o9-oebjfr_gur_sbezf_hfrq_ol_gur_f";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:67:"1228:pbz-pber-8qn00ppp99o0s2n0142849q84oqpnono201046ss-pnpurq_sbezf";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-pber-26n2oqsnpnss7n86nq31q2ors7225n360p061q63-pbageby_gur_perngvba_bs_pnpurq";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:71:"1228:pbz-pber-2pr2151q552p83n74q5o5p951o22qp1p25p11p9n-nqzvavfgre_hfref";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-pber-93rn114211899338o07449n28np20740s089n98o-perngr,_hcqngr_naq_qvfnoyr_hfr";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-pber-nn7912ns440r9q8ppop19sns511rq5n01rnp7210-svryq_punatr_uvfgbel";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:61:"1228:pbz-pber-63143o6s8007o98p53pn2149822777o3566s9241-erghea";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:66:"1228:pbz-pber-qs4pp3035o979770sn55n5q9q6s6s225qqq3o143-gnfxf_ebyrf";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:72:"1228:pbz-pber-0628rrpr9p87s833r9q34864srq67pp09504rson-qrzbtencuvp_yvfgf";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:74:"1228:pbz-pber-662889r70os828812pnqs7nr57o39371090506n6-vqragvsvpngvba_glcr";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:69:"1228:pbz-pber-r65s73600961ns1p5n4703r1sn25q1p6274o41sq-znevgny_fgnghf";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:77:"1228:pbz-pber-69q108677po1o54198qq200n3snsq79po96131o2-trbtencuvp_vasbezngvba";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:62:"1228:pbz-pber-q523rooq10146pqsq39qrr077s04p9q08468q0op-pbhagel";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:61:"1228:pbz-pber-0s217179940p6q89s5po2p7002n58q91no7286p1-ertvba";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:63:"1228:pbz-pber-p0po139ppr34769so7rq9onsp15290r91ps7736p-qvfgevpg";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:61:"1228:pbz-pber-60qrr38933959qsqnr71rp0rr78q9qqo94s8on0r-pbhagl";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:63:"1228:pbz-pber-r070qr224434n2npq352o35prp46s34s9r08r1o2-pheerapl";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:77:"1228:pbz-pber-rpsr29rs8spsp7p6552so9793sq0884n7o9p0n8o-nqqvgvbany_vasbezngvba";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:70:"1228:pbz-pber-n52np6764oppqos7so5168p27q3qo3qo759r04p6-pbzcrgrapl_glcr";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:65:"1228:pbz-pber-05r59oo0rq360np5pspp85pqo8n3184r0442743s-pbzcrgrapl";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:82:"1228:pbz-pber-s558147548sn65n002q723n3s53pn7n2695qr83p-pbagvahvat_rqhpngvba_pbhefr";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-pber-q38r9o888r8o481rrrn6qn394q506s30qqs68n32-genvavat_vafgvghgvba";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:70:"1228:pbz-pber-1p0r11s2ns6n82p4017692o88380p8p081245793-genvavat_shaqre";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:64:"1228:pbz-pber-64346o483p0nqpso6r6q4p2r4pr19s1pq2pqr025-shyy_anzr";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:67:"1228:pbz-pber-01083o501nn8sn17s729qq5163r3ss6861ro4s5o-qngr_punatrq";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:62:"1228:pbz-pber-pn4s9qps204r2037osr5884867ornq98oq9pons8-jrypbzr";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:69:"1228:pbz-pber-910083nn16sr743rn7p149rosq84o4q9posp6652-phfgbz_ercbegf";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:70:"1228:pbz-pber-49289qo43r663n3qs5r2p70714722rpp54895565-punatr_cnffjbeq";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-pber-1oo3712s475n6qnnsns4690o9q8r6qo456o71126-pna_npprff_gur_trareny_pbasvth";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:59:"1228:pbz-pber-70s8oo9n8n5393rs080507n89r4o98q139000q65-ubzr";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:67:"1228:pbz-pber-8op3o1rq449r35o901q74p3qop468945062q2184-ivrj_uvfgbel";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:73:"1228:pbz-pber-s833roo1r1o22242070n81834s51qq667621q92s-ivrj_svryq_uvfgbel";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:68:"1228:pbz-pber-1647o9qo6p01sqsq161104srp3n083296844961r-npprff_qravrq";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:62:"1228:pbz-pber-04n212215rs9sos686q280802ro81rr7n6r681pq-pbasvez";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-pber-966nq100p47rrn64n882oq41p6r2442p97145161-qrsvar_ercbeg_ivrjf_onfrq_ba_c";a:3:{i:0;R:21197;i:1;R:21167;i:2;R:21168;}s:80:"1228:pbz-pheerapl-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;s:25:"out-ihris-common-currency";i:1;R:21167;i:2;R:21168;}s:82:"1228:pbz-pheerapl-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:21254;i:1;R:21167;i:2;R:21168;}s:82:"1228:pbz-pheerapl-304537p023sopq42096p462453136qqp31450184-fryrpg_nabgure_pheerapl";a:3:{i:0;R:21254;i:1;R:21167;i:2;R:21168;}s:67:"1228:pbz-pheerapl-r070qr224434n2npq352o35prp46s34s9r08r1o2-pheerapl";a:3:{i:0;R:21254;i:1;R:21167;i:2;R:21168;}s:88:"1228:pbz-pheerapl-9467so3606qo2ro3oq16ps4668p667onp506q879-pna_rqvg_pheerapl_vasbezngvba";a:3:{i:0;R:21254;i:1;R:21167;i:2;R:21168;}s:88:"1228:pbz-pheerapl-2nq5qspon80963o48181928r3s7s4s596ro08rr3-pna_ivrj_pheerapl_vasbezngvba";a:3:{i:0;R:21254;i:1;R:21167;i:2;R:21168;}s:72:"1228:pbz-pheerapl-7o41p9p806q2rs9110o22r8p68368spp8297spo7-pheerapl_pbqr";a:3:{i:0;R:21254;i:1;R:21167;i:2;R:21168;}s:63:"1228:pbz-pheerapl-709n23220s2p3q64q1r1q6q18p4q5280s8q82spn-anzr";a:3:{i:0;R:21254;i:1;R:21167;i:2;R:21168;}s:66:"1228:pbz-pheerapl-q523rooq10146pqsq39qrr077s04p9q08468q0op-pbhagel";a:3:{i:0;R:21254;i:1;R:21167;i:2;R:21168;}s:65:"1228:pbz-pheerapl-3s84rs531s9qo996694nq09n8sqqqopn1440577r-flzoby";a:3:{i:0;R:21254;i:1;R:21167;i:2;R:21168;}s:65:"1228:pbz-qrcraqre-8n754p61p2prq0p5ss79n1827r02p9q643q6q926-traqre";a:3:{i:0;s:25:"out-ihris-common-depender";i:1;R:21167;i:2;R:21168;}s:72:"1228:pbz-qrcraqre-133160594q08spq32s94p34q17r39s61r6s3q12r-qngr_bs_ovegu";a:3:{i:0;R:21265;i:1;R:21167;i:2;R:21168;}s:63:"1228:pbz-qrcraqre-709n23220s2p3q64q1r1q6q18p4q5280s8q82spn-anzr";a:3:{i:0;R:21265;i:1;R:21167;i:2;R:21168;}s:68:"1228:pbz-qrcraqre-879o454s7q9830rr02s56228onn917nqp9n8no30-qrcraqrag";a:3:{i:0;R:21265;i:1;R:21167;i:2;R:21168;}s:89:"1228:pbz-qrcraqre-o57o00p44oo0p10sp09qq8qro5r2s8n844qn5q4n-pna_ivrj_n_crefba'f_qrcraqragf";a:3:{i:0;R:21265;i:1;R:21167;i:2;R:21168;}s:89:"1228:pbz-qrcraqre-n6n58qo59s06pnpsnq79qq66s446q4q42onso613-pna_rqvg_n_crefba'f_qrcraqragf";a:3:{i:0;R:21265;i:1;R:21167;i:2;R:21168;}s:89:"1228:pbz-qrcraqre-5q4o0r27n5475op15ss605295633s3po4pqonp92-nqq_hcqngr_qrcraqrag_vasbezngv";a:3:{i:0;R:21265;i:1;R:21167;i:2;R:21168;}s:80:"1228:pbz-qrcraqre-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;R:21265;i:1;R:21167;i:2;R:21168;}s:82:"1228:pbz-qrcraqre-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:21265;i:1;R:21167;i:2;R:21168;}s:80:"1228:pbz-qrcraqre-n54q8683r7p00qqps16rs20o8sqoo256s8678952-qrcraqrag_vasbezngvba";a:3:{i:0;R:21265;i:1;R:21167;i:2;R:21168;}s:67:"1228:pbz-qbphzrag-r214o8n29923056887o7rqs6635q90qpoo2nor88-qbphzrag";a:3:{i:0;s:25:"out-ihris-common-document";i:1;R:21167;i:2;R:21168;}s:63:"1228:pbz-qbphzrag-ro9n4op1p0p153r4r4o042n79113o815o7r3021q-qngr";a:3:{i:0;R:21276;i:1;R:21167;i:2;R:21168;}s:70:"1228:pbz-qbphzrag-55s8rop805r65o5o71qqnsqnr390r3or2opq69ns-qrfpevcgvba";a:3:{i:0;R:21276;i:1;R:21167;i:2;R:21168;}s:82:"1228:pbz-rfgnoyvfuzrag-35s7o1s1o01572ossp467n017os778ps29516n23-frg_rfgnoyvfuzragf";a:3:{i:0;s:30:"out-ihris-common-establishment";i:1;R:21167;i:2;R:21168;}s:90:"1228:pbz-rfgnoyvfuzrag-nrp45p952qp8957rqr14s1861rprn701s2678pr4-nqq_arj_rfgnoyvfuzrag_glcr";a:3:{i:0;R:21280;i:1;R:21167;i:2;R:21168;}s:94:"1228:pbz-rfgnoyvfuzrag-24or389126pprp6r31s20n866s620rp658n03n08-nqq_arj_rfgnoyvfuzrag_pngrtbel";a:3:{i:0;R:21280;i:1;R:21167;i:2;R:21168;}s:93:"1228:pbz-rfgnoyvfuzrag-r8r6n404715n1p2n604rp9r160p43526p469r973-fryrpg_rfgnoyvfuzrag_pngrtbel";a:3:{i:0;R:21280;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-rfgnoyvfuzrag-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;R:21280;i:1;R:21167;i:2;R:21168;}s:87:"1228:pbz-rfgnoyvfuzrag-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:21280;i:1;R:21167;i:2;R:21168;}s:92:"1228:pbz-rfgnoyvfuzrag-67r4n3sq762270n02qr2r7po378nqn6p859sp4p8-fryrpg_nabgure_rfgnoyvfuzrag";a:3:{i:0;R:21280;i:1;R:21167;i:2;R:21168;}s:94:"1228:pbz-rfgnoyvfuzrag-6p42r44r65qp91s7r29o5959478on2qqp7p6pn27-fryrpg_nabgure_rfgnoyvfuzrag_c";a:3:{i:0;R:21280;i:1;R:21167;i:2;R:21168;}s:94:"1228:pbz-rfgnoyvfuzrag-514q90rn85392442opo05451ror47o06541p0052-pna_rqvg_gur_rfgnoyvfuzrag_glc";a:3:{i:0;R:21280;i:1;R:21167;i:2;R:21168;}s:94:"1228:pbz-rfgnoyvfuzrag-8993010rrqs4o14pnsrp212p3n2qsr19pro2s39o-pna_ivrj_gur_rfgnoyvfuzrag_glc";a:3:{i:0;R:21280;i:1;R:21167;i:2;R:21168;}s:94:"1228:pbz-rfgnoyvfuzrag-3ssn8snsno128q797orp410s023r9p3q3nqqrr15-pna_rqvg_gur_rfgnoyvfuzrag_cre";a:3:{i:0;R:21280;i:1;R:21167;i:2;R:21168;}s:94:"1228:pbz-rfgnoyvfuzrag-0q90r3o7nr5s883r0972p112sr4s525o63857s12-pna_ivrj_gur_rfgnoyvfuzrag_cre";a:3:{i:0;R:21280;i:1;R:21167;i:2;R:21168;}s:94:"1228:pbz-rfgnoyvfuzrag-rqnq3o8oo6onq2q5q7npropq738nr69o52or8161-pna_rqvg_gur_rfgnoyvfuzrag_qng";a:3:{i:0;R:21280;i:1;R:21167;i:2;R:21168;}s:94:"1228:pbz-rfgnoyvfuzrag-713o95p054qpppp90sor6p80040q1sorn20s9o75-pna_ivrj_gur_rfgnoyvfuzrag_qng";a:3:{i:0;R:21280;i:1;R:21167;i:2;R:21168;}s:94:"1228:pbz-rfgnoyvfuzrag-snr5q584n71qr63p1n3oq3rq1111q968324o5893-pna_npprff_gur_rfgnoyvfuzrag_v";a:3:{i:0;R:21280;i:1;R:21167;i:2;R:21168;}s:94:"1228:pbz-rfgnoyvfuzrag-s8snr2319o3p11op191q27s6r5pp4r0pp5o4n36s-pna_rqvg_gur_rfgnoyvfuzrag_vas";a:3:{i:0;R:21280;i:1;R:21167;i:2;R:21168;}s:77:"1228:pbz-rfgnoyvfuzrag-0661so47p4470sr069n5p56ss38ppp6407p8s802-rfgnoyvfuzrag";a:3:{i:0;R:21280;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-rfgnoyvfuzrag-r4r0p531s94pnq05sso1s5016q511s6oopsq5n9o-rfgnoyvfuzrag_crevbq";a:3:{i:0;R:21280;i:1;R:21167;i:2;R:21168;}s:82:"1228:pbz-rfgnoyvfuzrag-r28o97sq2s4p0srp8q40p876s44s696618010194-rfgnoyvfuzrag_glcr";a:3:{i:0;R:21280;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-rfgnoyvfuzrag-6sonqn1rs6339n51oqo97qns659p97p0r5669o08-lrne_bs_nccyvpnovyvgl";a:3:{i:0;R:21280;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-rfgnoyvfuzrag-06917srs400306q29498n226055n2rq3rnr86s54-f_ng_f_(_f)";a:3:{i:0;R:21280;i:1;R:21167;i:2;R:21168;}s:76:"1228:pbz-rfgnoyvfuzrag-117p9n68ps9o28sn94n3nop30nsno49s69p521ro-wbo_be_pnqer";a:3:{i:0;R:21280;i:1;R:21167;i:2;R:21168;}s:89:"1228:pbz-rfgnoyvfuzrag-412n79q65628965750s98943846n9o2q5199rpo7-snpvyvgl_be_snpvyvgl_glcr";a:3:{i:0;R:21280;i:1;R:21167;i:2;R:21168;}s:88:"1228:pbz-rfgnoyvfuzrag-839q65p316p8p2610r92n6n9n1r8997r2nsq3284-ahzore_bs_urnygu_jbexref";a:3:{i:0;R:21280;i:1;R:21167;i:2;R:21168;}s:80:"1228:pbz-snpvyvgl-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;s:25:"out-ihris-common-facility";i:1;R:21167;i:2;R:21168;}s:82:"1228:pbz-snpvyvgl-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:21305;i:1;R:21167;i:2;R:21168;}s:89:"1228:pbz-snpvyvgl-27156n0r322rq536ro2no3nrs9139rop40p443so-fryrpg_nabgure_bssvpr_snpvyvgl";a:3:{i:0;R:21305;i:1;R:21167;i:2;R:21168;}s:74:"1228:pbz-snpvyvgl-62o96qnop5751ro5o049043581ron11oqo0so3q8-bssvpr_snpvyvgl";a:3:{i:0;R:21305;i:1;R:21167;i:2;R:21168;}s:87:"1228:pbz-snpvyvgl-rpn12847p48poo716qqporn11p72074n017o8073-fryrpg_nabgure_snpvyvgl_glcr";a:3:{i:0;R:21305;i:1;R:21167;i:2;R:21168;}s:72:"1228:pbz-snpvyvgl-prqq5473o0139q68o4027rn6s118s9o2n01507s8-snpvyvgl_glcr";a:3:{i:0;R:21305;i:1;R:21167;i:2;R:21168;}s:81:"1228:pbz-snpvyvgl-s4po18767929970pr38065223rr9o4r70p553q27-rqvg_gur_snpvyvgl_yvfg";a:3:{i:0;R:21305;i:1;R:21167;i:2;R:21168;}s:81:"1228:pbz-snpvyvgl-0q236211rp6795s71915s451q5r9p18son277o53-ivrj_gur_snpvyvgl_yvfg";a:3:{i:0;R:21305;i:1;R:21167;i:2;R:21168;}s:86:"1228:pbz-snpvyvgl-6139r2o1o477393225rrqn2s764o9o2q7s583083-rqvg_gur_snpvyvgl_glcr_yvfg";a:3:{i:0;R:21305;i:1;R:21167;i:2;R:21168;}s:86:"1228:pbz-snpvyvgl-q23q667278670o15ro36083p28225o98qn9291nn-ivrj_gur_snpvyvgl_glcr_yvfg";a:3:{i:0;R:21305;i:1;R:21167;i:2;R:21168;}s:89:"1228:pbz-snpvyvgl-5p53sqq7r57238844rs5qo4n4n43171993on9977-guvf_sbez_vf_hfrq_gb_qrfpvor_o";a:3:{i:0;R:21305;i:1;R:21167;i:2;R:21168;}s:73:"1228:pbz-spb-n34o69sp46r7n278ps65p58oo347qr6560so046s-pbagnpg_vasbezngvba";a:3:{i:0;s:20:"out-ihris-common-fco";i:1;R:21167;i:2;R:21168;}s:70:"1228:pbz-spb-o17np30p6213qs2poq0qono532po2p19q773sn5s-snpvyvgl_pbagnpg";a:3:{i:0;R:21317;i:1;R:21167;i:2;R:21168;}s:81:"1228:pbz-trbtencul-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;s:26:"out-ihris-common-geography";i:1;R:21167;i:2;R:21168;}s:83:"1228:pbz-trbtencul-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:21320;i:1;R:21167;i:2;R:21168;}s:81:"1228:pbz-trbtencul-16o3o575pq58q9o6r8165484r0446ssnqpn590r7-fryrpg_nabgure_ertvba";a:3:{i:0;R:21320;i:1;R:21167;i:2;R:21168;}s:66:"1228:pbz-trbtencul-0s217179940p6q89s5po2p7002n58q91no7286p1-ertvba";a:3:{i:0;R:21320;i:1;R:21167;i:2;R:21168;}s:81:"1228:pbz-trbtencul-46pn0o17ooop57q65083sp12800r0s00o62o5879-fryrpg_nabgure_pbhagl";a:3:{i:0;R:21320;i:1;R:21167;i:2;R:21168;}s:66:"1228:pbz-trbtencul-60qrr38933959qsqnr71rp0rr78q9qqo94s8on0r-pbhagl";a:3:{i:0;R:21320;i:1;R:21167;i:2;R:21168;}s:82:"1228:pbz-trbtencul-n8r951prpro8o9r0no810pns2814o09o82789sr9-fryrpg_nabgure_pbhagel";a:3:{i:0;R:21320;i:1;R:21167;i:2;R:21168;}s:67:"1228:pbz-trbtencul-q523rooq10146pqsq39qrr077s04p9q08468q0op-pbhagel";a:3:{i:0;R:21320;i:1;R:21167;i:2;R:21168;}s:83:"1228:pbz-trbtencul-s478o12o819503os29r391p50727s1opoqqpoq99-fryrpg_nabgure_qvfgevpg";a:3:{i:0;R:21320;i:1;R:21167;i:2;R:21168;}s:68:"1228:pbz-trbtencul-p0po139ppr34769so7rq9onsp15290r91ps7736p-qvfgevpg";a:3:{i:0;R:21320;i:1;R:21167;i:2;R:21168;}s:81:"1228:pbz-trbtencul-pqno45n7pq13630525q7sn45409pqs81p4386r5n-pna_rqvg_pbhagel_yvfg";a:3:{i:0;R:21320;i:1;R:21167;i:2;R:21168;}s:81:"1228:pbz-trbtencul-son25p0ss256n4992p4s134939q12np3022rq074-pna_ivrj_pbhagel_yvfg";a:3:{i:0;R:21320;i:1;R:21167;i:2;R:21168;}s:80:"1228:pbz-trbtencul-3sp3000r5qr1rns8q076n779r250n46s9q2566pp-pna_rqvg_ertvba_yvfg";a:3:{i:0;R:21320;i:1;R:21167;i:2;R:21168;}s:80:"1228:pbz-trbtencul-8r20q6o6r3q4427849p2onq71603ss48874r5n55-pna_ivrj_ertvba_yvfg";a:3:{i:0;R:21320;i:1;R:21167;i:2;R:21168;}s:82:"1228:pbz-trbtencul-5011o49p3q7s834rrqo944n126pq5os842s5627p-pna_rqvg_qvfgevpg_yvfg";a:3:{i:0;R:21320;i:1;R:21167;i:2;R:21168;}s:82:"1228:pbz-trbtencul-o6q2n015654pnr07rn5p49prnp535321p564sq30-pna_ivrj_qvfgevpg_yvfg";a:3:{i:0;R:21320;i:1;R:21167;i:2;R:21168;}s:88:"1228:pbz-trbtencul-5o0rn129q028186n3o30746068o032p12rn9s5o6-pna_rqvg_fbzr_trbtencul_qngn";a:3:{i:0;R:21320;i:1;R:21167;i:2;R:21168;}s:88:"1228:pbz-trbtencul-3331r3rsn06212opp8n7n5842on1pp55o25706q3-pna_ivrj_fbzr_trbtencul_qngn";a:3:{i:0;R:21320;i:1;R:21167;i:2;R:21168;}s:87:"1228:pbz-trbtencul-on7n596n2nqr6347r0052s18021pr234p34q53s0-pna_rqvg_nyy_trbtencul_qngn";a:3:{i:0;R:21320;i:1;R:21167;i:2;R:21168;}s:87:"1228:pbz-trbtencul-9339rp90o3sn00p8370933o35o044p0snro26959-pna_ivrj_nyy_trbtencul_qngn";a:3:{i:0;R:21320;i:1;R:21167;i:2;R:21168;}s:64:"1228:pbz-trbtencul-709n23220s2p3q64q1r1q6q18p4q5280s8q82spn-anzr";a:3:{i:0;R:21320;i:1;R:21167;i:2;R:21168;}s:68:"1228:pbz-trbtencul-q219p68101s532qr10nqq2ps42so9qorpn73q3or-ybpngvba";a:3:{i:0;R:21320;i:1;R:21167;i:2;R:21168;}s:82:"1228:pbz-trbtencul-q6s6q27spq351pqs5q39s0ns9oso7q37orp6n049-2_punenpgre_nycun_pbqr";a:3:{i:0;R:21320;i:1;R:21167;i:2;R:21168;}s:76:"1228:pbz-trbtencul-r645ns7021qs022o0ss4943qpr265pp8982oq4n1-vfb_ahzrevp_pbqr";a:3:{i:0;R:21320;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-trbtencul-776448127pnr66036n39ssq58r24836959149776-cevznel_pbhagel";a:3:{i:0;R:21320;i:1;R:21167;i:2;R:21168;}s:86:"1228:pbz-trbtencul-n2nqr5n77p1q09q0o8571n9r77296o2r51p9qrqs-hfr_sbe_ybpngvba_fryrpgvba";a:3:{i:0;R:21320;i:1;R:21167;i:2;R:21168;}s:64:"1228:pbz-trbtencul-nqnp69379n626p2436948n4rs1792p7q719rs929-pbqr";a:3:{i:0;R:21320;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-wbo-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;s:20:"out-ihris-common-job";i:1;R:21167;i:2;R:21168;}s:77:"1228:pbz-wbo-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:21348;i:1;R:21167;i:2;R:21168;}s:83:"1228:pbz-wbo-p7n5n275111r0q37069qqr1s46p6n12q8n527r32-fryrpg_nabgure_pynffvsvpngvba";a:3:{i:0;R:21348;i:1;R:21167;i:2;R:21168;}s:68:"1228:pbz-wbo-94p2n3189r7s7885455350p4p7n8qs2q0q6nq1q1-pynffvsvpngvba";a:3:{i:0;R:21348;i:1;R:21167;i:2;R:21168;}s:72:"1228:pbz-wbo-9qsor70s6p3n02n68rn47q26r7op657qs51q7024-fryrpg_nabgure_wbo";a:3:{i:0;R:21348;i:1;R:21167;i:2;R:21168;}s:57:"1228:pbz-wbo-30p8po83o9npq93ornn32086336p36po77p065q9-wbo";a:3:{i:0;R:21348;i:1;R:21167;i:2;R:21168;}s:82:"1228:pbz-wbo-90o8pp7n41q118q5p9rq0pp31n5o34024s04r54r-rqvg_gur_pynffvsvpngvba_yvfg";a:3:{i:0;R:21348;i:1;R:21167;i:2;R:21168;}s:82:"1228:pbz-wbo-qo62o975o88o71q78870q12no1qpr83s9512s650-ivrj_gur_pynffvsvpngvba_yvfg";a:3:{i:0;R:21348;i:1;R:21167;i:2;R:21168;}s:71:"1228:pbz-wbo-1q6261o30no93s0p4nq56574srsr8342042q7r12-rqvg_gur_wbo_yvfg";a:3:{i:0;R:21348;i:1;R:21167;i:2;R:21168;}s:71:"1228:pbz-wbo-05np8spos083o4p17o092nq29q6768rpqo2r70n6-ivrj_gur_wbo_yvfg";a:3:{i:0;R:21348;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-wbo-9040r69onr98pnq763orpq4131s8nro092064q25-pna_rqvg_fbzr_wbo_fgehpgher_qn";a:3:{i:0;R:21348;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-wbo-66761n59qn81rn0s04qqsso40q787280q7645qn8-pna_ivrj_fbzr_wbo_fgehpgher_qn";a:3:{i:0;R:21348;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-wbo-q581p9o04p71n88ro6nr71r080q61ps0134417pn-pna_rqvg_nyy_wbo_fgehpgher_qng";a:3:{i:0;R:21348;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-wbo-895prqn6o4087q4n09q58o80ro64nr38p16qps81-pna_ivrj_nyy_wbo_fgehpgher_qng";a:3:{i:0;R:21348;i:1;R:21167;i:2;R:21168;}s:58:"1228:pbz-wbo-709n23220s2p3q64q1r1q6q18p4q5280s8q82spn-anzr";a:3:{i:0;R:21348;i:1;R:21167;i:2;R:21168;}s:65:"1228:pbz-wbo-55s8rop805r65o5o71qqnsqnr390r3or2opq69ns-qrfpevcgvba";a:3:{i:0;R:21348;i:1;R:21167;i:2;R:21168;}s:58:"1228:pbz-wbo-nqnp69379n626p2436948n4rs1792p7q719rs929-pbqr";a:3:{i:0;R:21348;i:1;R:21167;i:2;R:21168;}s:59:"1228:pbz-wbo-952s375412r89ss213n8npn383q18r5691354347-fgneg";a:3:{i:0;R:21348;i:1;R:21167;i:2;R:21168;}s:57:"1228:pbz-wbo-n2oo9q34o8n1n79665858q354585ps147r0qrr4r-raq";a:3:{i:0;R:21348;i:1;R:21167;i:2;R:21168;}s:62:"1228:pbz-wbo-97ooq308sn43o67r4rp67s539n40521878447rns-zvqcbvag";a:3:{i:0;R:21348;i:1;R:21167;i:2;R:21168;}s:59:"1228:pbz-wbo-70440046n3qp2r079s23rr1p57qsn76669o732nn-abgrf";a:3:{i:0;R:21348;i:1;R:21167;i:2;R:21168;}s:59:"1228:pbz-wbo-768r0p1p69573so588s61s1308n015p11468r05s-gvgyr";a:3:{i:0;R:21348;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-wbo-q376630s9s5n94sn06p6opoq0oqn02p2o10n8237-pnqer_(urnygu_cebsrffvbanyf_ba";a:3:{i:0;R:21348;i:1;R:21167;i:2;R:21168;}s:77:"1228:pbz-abx-so3o6nr0r5168rqoq28p99194198r992q196no02-arkg_bs_xva_vasbezngvba";a:3:{i:0;s:20:"out-ihris-common-nok";i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-abx-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;R:21372;i:1;R:21167;i:2;R:21168;}s:77:"1228:pbz-abx-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:21372;i:1;R:21167;i:2;R:21168;}s:65:"1228:pbz-abx-40p305n2p208ro0qrp79n88501s3no9n4ro7q719-arkg_bs_xva";a:3:{i:0;R:21372;i:1;R:21167;i:2;R:21168;}s:58:"1228:pbz-abx-709n23220s2p3q64q1r1q6q18p4q5280s8q82spn-anzr";a:3:{i:0;R:21372;i:1;R:21167;i:2;R:21168;}s:66:"1228:pbz-abx-9o4n86pon424n8no70o35q9q1p129276324q7p03-eryngvbafuvc";a:3:{i:0;R:21372;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-abx-opo26o9256pqn1061r4p4200n01p9sr8os47o3p2-nqq_hcqngr_arkg_bs_xva_vasbezn";a:3:{i:0;R:21372;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-abx-20r512563613npn400so86pq1r309q65npqs0r6s-pna_ivrj_n_crefba'f_arkg_bs_xv";a:3:{i:0;R:21372;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-abx-ro491455op7qsn458s0r599131pn338psooo0o45-pna_rqvg_n_crefba'f_arkg_bs_xv";a:3:{i:0;R:21372;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-cnf-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;s:20:"out-ihris-common-pas";i:1;R:21167;i:2;R:21168;}s:77:"1228:pbz-cnf-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:21382;i:1;R:21167;i:2;R:21168;}s:74:"1228:pbz-cnf-846732nr0nqq6992953771848o4p1q4qo603q6no-fpnaarq_cncre_erpbeq";a:3:{i:0;R:21382;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-cnf-9oq4q3r0q563782onr6osnn630604s50o0nq6r4r-pna_ivrj_nepuvir_fpna_bs_n_cre";a:3:{i:0;R:21382;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-cnf-so37q72o83894o1sonqo67qnn4p2qr55nrn33q0r-pna_rqvg_nepuvir_fpna_bs_n_cre";a:3:{i:0;R:21382;i:1;R:21167;i:2;R:21168;}s:62:"1228:pbz-cnf-r214o8n29923056887o7rqs6635q90qpoo2nor88-qbphzrag";a:3:{i:0;R:21382;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-cnf-92pr71o16n51p35oo77rs3on0p4nps398n9575nq-nqq_hcqngr_fpnaarq_cncre_erpbe";a:3:{i:0;R:21382;i:1;R:21167;i:2;R:21168;}s:79:"1228:pbz-cpb-npsr0960121n82q3s4spq8n627345s090s99s830-bgure_pbagnpg_vasbezngvba";a:3:{i:0;s:20:"out-ihris-common-pco";i:1;R:21167;i:2;R:21168;}s:70:"1228:pbz-cpb-opq40s477n5q094n21596p70n724soo97rnn3o83-nqq_jbex_pbagnpg";a:3:{i:0;R:21390;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-cpb-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;R:21390;i:1;R:21167;i:2;R:21168;}s:77:"1228:pbz-cpb-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:21390;i:1;R:21167;i:2;R:21168;}s:71:"1228:pbz-cpb-0q16p6r19q1s2787125385o268ss4q2p3snq23qr-rzretrapl_pbagnpg";a:3:{i:0;R:21390;i:1;R:21167;i:2;R:21168;}s:66:"1228:pbz-cpb-5rs99pqn04p2qonsn3n3nrqq58r1508qq022rp81-jbex_pbagnpg";a:3:{i:0;R:21390;i:1;R:21167;i:2;R:21168;}s:78:"1228:pbz-cpb-646spn5792sp7nspp674q5sr0665822r751o8o30-jbex_pbagnpg_vasbezngvba";a:3:{i:0;R:21390;i:1;R:21167;i:2;R:21168;}s:67:"1228:pbz-cpb-472n8q86p1r50rq22p2n2r1o3qsoo137199qo964-bgure_pbagnpg";a:3:{i:0;R:21390;i:1;R:21167;i:2;R:21168;}s:71:"1228:pbz-cpb-618261r5r2930s1q058q28n2674qp0sp5582040o-nqq_bgure_pbagnpg";a:3:{i:0;R:21390;i:1;R:21167;i:2;R:21168;}s:82:"1228:pbz-cpb-n62p0rsr72259rrs933p22741nr849snp1136n8r-crefbany_pbagnpg_vasbezngvba";a:3:{i:0;R:21390;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-cpb-34qo78n0nnq08s0007rn55o8rqp9oqn4644or25o-nqq_rzretrapl_pbagnpg";a:3:{i:0;R:21390;i:1;R:21167;i:2;R:21168;}s:74:"1228:pbz-cpb-o39on344n37ron1621s3r0o3696s3s956010ro34-nqq_crefbany_pbagnpg";a:3:{i:0;R:21390;i:1;R:21167;i:2;R:21168;}s:70:"1228:pbz-cpb-n3srn9qq7468r2s50n0o64po69r6srrp65p3op04-crefbany_pbagnpg";a:3:{i:0;R:21390;i:1;R:21167;i:2;R:21168;}s:83:"1228:pbz-cpb-r0250s42n226rnror3r073s945357q5sop706q32-rzretrapl_pbagnpg_vasbezngvba";a:3:{i:0;R:21390;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-cpb-75pops85p06p2qp59r498042rs498spsp780845o-pna_ivrj_jbex_pbagnpg_puvyq_sb";a:3:{i:0;R:21390;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-cpb-44rs00n3447nsnp9978p2p3p3950pnnnqp0ssp96-pna_rqvg_jbex_pbagnpg_puvyq_sb";a:3:{i:0;R:21390;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-cpb-75n88p30848367q493359o5r49qr7qo65420np0n-pna_ivrj_rzretarapl_pbagnpg_pu";a:3:{i:0;R:21390;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-cpb-q0712o8o8n8o420sopq8o30npr7qqo16r511nq10-pna_rqvg_rzretrapl_pbagnpg_puv";a:3:{i:0;R:21390;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-cpb-5124r4o593235ss40r1rr188p4801nnrr355s16s-pna_ivrj_crefbany_pbagnpg_puvy";a:3:{i:0;R:21390;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-cpb-2qns9osop5s747o652rn1q4767rs2s24s09p805n-pna_rqvg_crefbany_pbagnpg_puvy";a:3:{i:0;R:21390;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-cpb-q20snp74632r4q4r0qq9o129959q2r06q6o0q36r-pna_ivrj_bgure_pbagnpg_puvyq_s";a:3:{i:0;R:21390;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-cpb-0p45non590q585s6524p3s44641p13071rs78s02-pna_rqvg_bgure_pbagnpg_puvyq_s";a:3:{i:0;R:21390;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-cpb-7q37o05r87n4088s4o09293s62n2prq355o8r57r-nqq_hcqngr_pbagnpg_vasbezngvba";a:3:{i:0;R:21390;i:1;R:21167;i:2;R:21168;}s:77:"1228:pbz-cqb-79032r7748r28prnpq8815135sr9232q4ns79725-qrzbtencuvp_vasbezngvba";a:3:{i:0;s:20:"out-ihris-common-pdo";i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-cqb-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;R:21414;i:1;R:21167;i:2;R:21168;}s:77:"1228:pbz-cqb-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:21414;i:1;R:21167;i:2;R:21168;}s:83:"1228:pbz-cqb-q5ssr4341025s8202649rqr746p339o259npn4r9-fryrpg_nabgure_znevgny_fgnghf";a:3:{i:0;R:21414;i:1;R:21167;i:2;R:21168;}s:68:"1228:pbz-cqb-r65s73600961ns1p5n4703r1sn25q1p6274o41sq-znevgny_fgnghf";a:3:{i:0;R:21414;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-cqb-1s4709q57qo3opspr553o5737843n44338n6q254-pna_ivrj_qrzbtencuvp_puvyq_sbe";a:3:{i:0;R:21414;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-cqb-01s2so244p0r90p06s69p38oq2p61844npr5q16o-pna_rqvg_qrzbtencuvp_puvyq_sbe";a:3:{i:0;R:21414;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-cqb-2qs60r27r525o007qs13p8r326on13n2q35pr2s7-pna_rqvg_gur_qrcnegzrag_znevgn";a:3:{i:0;R:21414;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-cqb-0916o2n257092sq3o67o0n7rp7sq6rr26rs691ss-pna_ivrj_gur_qrcnegzrag_znevgn";a:3:{i:0;R:21414;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-cqb-7n69p0q089n6s2s4o4pn8055s27522np6qo0s9np-nqq_hcqngr_qrzbtencuvp_vasbezn";a:3:{i:0;R:21414;i:1;R:21167;i:2;R:21168;}s:60:"1228:pbz-cqb-8n754p61p2prq0p5ss79n1827r02p9q643q6q926-traqre";a:3:{i:0;R:21414;i:1;R:21167;i:2;R:21168;}s:60:"1228:pbz-cqb-o7p17r97q3q625694o836q85npr6rqp18oors0r6-srznyr";a:3:{i:0;R:21414;i:1;R:21167;i:2;R:21168;}s:58:"1228:pbz-cqb-3s3n489p72qrn800rn7o6338p89938766q41n6r5-znyr";a:3:{i:0;R:21414;i:1;R:21167;i:2;R:21168;}s:67:"1228:pbz-cqb-133160594q08spq32s94p34q17r39s61r6s3q12r-qngr_bs_ovegu";a:3:{i:0;R:21414;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-crq-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;s:20:"out-ihris-common-ped";i:1;R:21167;i:2;R:21168;}s:77:"1228:pbz-crq-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:21429;i:1;R:21167;i:2;R:21168;}s:83:"1228:pbz-crq-q202s1032o9n620s49so611op467743100084419-fryrpg_nabgure_rqhpngvba_glcr";a:3:{i:0;R:21429;i:1;R:21167;i:2;R:21168;}s:68:"1228:pbz-crq-4194r1sr65p196p62nrq6ro58np41q2pr0961n42-rqhpngvba_glcr";a:3:{i:0;R:21429;i:1;R:21167;i:2;R:21168;}s:77:"1228:pbz-crq-r7oo8pnsp4os75nro2719o2432s9ssp161o4oo35-vafgvghgvba_vasbezngvba";a:3:{i:0;R:21429;i:1;R:21167;i:2;R:21168;}s:72:"1228:pbz-crq-q38nsr466639qoq74o125p15116pps4o98nr5r17-qrterr_vasbezngvba";a:3:{i:0;R:21429;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-crq-0775o9pppn0s8s4ps00469286096439sp72p0np3-fryrpg_nabgure_qrterr";a:3:{i:0;R:21429;i:1;R:21167;i:2;R:21168;}s:60:"1228:pbz-crq-41p26o83o688q816pq49q60r0r2p8or032srnprn-qrterr";a:3:{i:0;R:21429;i:1;R:21167;i:2;R:21168;}s:83:"1228:pbz-crq-rso7qqr4pqr03pn18999243o626q83649n641563-pna_ivrj_rqhpngvba_puvyq_sbez";a:3:{i:0;R:21429;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-crq-3o81r9264qsp335nso9rn4ns051q7q5os8573p15-pna_rqvg_rqhpngvba_puvyq_sbezf";a:3:{i:0;R:21429;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-crq-sp7706n379s95sr33r2on73p01o3p0q0437rron6-pna_rqvg_rqhpngvba_glcr_qngnon";a:3:{i:0;R:21429;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-crq-603700s8155p032r082o0n5qq6p25n12p9227297-pna_ivrj_rqhpngvba_glcr_qngnon";a:3:{i:0;R:21429;i:1;R:21167;i:2;R:21168;}s:83:"1228:pbz-crq-38pp79q61738o407p4sno0soqnors87p1rs658so-pna_rqvg_qrterr_glcr_qngnonfr";a:3:{i:0;R:21429;i:1;R:21167;i:2;R:21168;}s:83:"1228:pbz-crq-1qrppq80q865p7o6s67360760755q5979q113890-pna_ivrj_qrterr_glcr_qngnonfr";a:3:{i:0;R:21429;i:1;R:21167;i:2;R:21168;}s:82:"1228:pbz-crq-79q33orp696882291o2688qs8545oqnon961s38p-nqq_hcqngr_rqhpngvba_uvfgbel";a:3:{i:0;R:21429;i:1;R:21167;i:2;R:21168;}s:71:"1228:pbz-crq-1n9rs1n8o15r5s3ss28ro2qoos0qon081qp1no3p-rqhpngvba_uvfgbel";a:3:{i:0;R:21429;i:1;R:21167;i:2;R:21168;}s:58:"1228:pbz-crq-709n23220s2p3q64q1r1q6q18p4q5280s8q82spn-anzr";a:3:{i:0;R:21429;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-crq-1r1qr0o1on00poon69o1s186346r0p581o9p0osq-fryrpg_rqhpngvba_glcr_gura_qrt";a:3:{i:0;R:21429;i:1;R:21167;i:2;R:21168;}s:70:"1228:pbz-crq-o65443035075nq39q244206noo64rrnon9r7q289-vafgvghgvba_anzr";a:3:{i:0;R:21429;i:1;R:21167;i:2;R:21168;}s:74:"1228:pbz-crq-302q051oq9q14n6588o4596382ps3313915q95pp-vafgvghgvba_ybpngvba";a:3:{i:0;R:21429;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-crq-o4rqop42o66q002928nn471sp202ppqq86nn24nn-lrne_bs_tenqhngvba_(yrnir_oyna";a:3:{i:0;R:21429;i:1;R:21167;i:2;R:21168;}s:59:"1228:pbz-crq-8n52rq17p589876rp64358n50r9sr14r754qqp3s-znwbe";a:3:{i:0;R:21429;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-crz-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;s:20:"out-ihris-common-pem";i:1;R:21167;i:2;R:21168;}s:77:"1228:pbz-crz-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:21452;i:1;R:21167;i:2;R:21168;}s:74:"1228:pbz-crz-9rn9430r88293253437468421onqsp0437q0r507-rzcyblre_vasbezngvba";a:3:{i:0;R:21452;i:1;R:21167;i:2;R:21168;}s:73:"1228:pbz-crz-2042p7n2po2qpr22nn03965s55r46qns6or52r3r-pbzcnal_vasbezngvba";a:3:{i:0;R:21452;i:1;R:21167;i:2;R:21168;}s:74:"1228:pbz-crz-s18ro66q997o2psrsn36rro32105r0r552p41p36-cbfvgvba_vasbezngvba";a:3:{i:0;R:21452;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-crz-4p922n985r54225335642734451543o92rn193n8-pna_ivrj_rzcyblzrag_puvyq_sbez";a:3:{i:0;R:21452;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-crz-85qn33r469r5or33sr3so545ns7os8q56p0qs495-pna_rqvg_rzcyblzrag_puvyq_sbez";a:3:{i:0;R:21452;i:1;R:21167;i:2;R:21168;}s:83:"1228:pbz-crz-n7739qns35n0o71o70npn2sr7s673qs30op13n23-nqq_hcqngr_rzcyblzrag_uvfgbel";a:3:{i:0;R:21452;i:1;R:21167;i:2;R:21168;}s:72:"1228:pbz-crz-324597n3r9015639pq9or113o5q5n229q513nqp0-rzcyblzrag_uvfgbel";a:3:{i:0;R:21452;i:1;R:21167;i:2;R:21168;}s:66:"1228:pbz-crz-8599s5pp48ssppp0o7947sos1prq5rs035111p37-pbzcnal_anzr";a:3:{i:0;R:21452;i:1;R:21167;i:2;R:21168;}s:69:"1228:pbz-crz-q2142p60s4r0o58s1nqp22opp24002ps4668s553-pbzcnal_nqqerff";a:3:{i:0;R:21452;i:1;R:21167;i:2;R:21168;}s:71:"1228:pbz-crz-n4oqq3p40s3o58qs99q45816605r448022443488-pbzcnal_gryrcubar";a:3:{i:0;R:21452;i:1;R:21167;i:2;R:21168;}s:66:"1228:pbz-crz-2338839r67os3q5p16q526s42910p2oq5r6o7835-qngr_fgnegrq";a:3:{i:0;R:21452;i:1;R:21167;i:2;R:21168;}s:67:"1228:pbz-crz-0n3p87prr73qnq3r2s57035rs94n2o3rqrn2qq63-fgnegvat_jntr";a:3:{i:0;R:21452;i:1;R:21167;i:2;R:21168;}s:71:"1228:pbz-crz-02s34n5s7737683nqr92sr2r9sp8769q4n84r556-fgnegvat_cbfvgvba";a:3:{i:0;R:21452;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-crz-695qrr46r84s98p019pp056650o4nps41qorr033-qngr_raqrq_(yrnir_oynax_vs_fgv";a:3:{i:0;R:21452;i:1;R:21167;i:2;R:21168;}s:65:"1228:pbz-crz-6qn55o4o548srrs2r5685rs16nr1s8qpq31ooo25-raqvat_jntr";a:3:{i:0;R:21452;i:1;R:21167;i:2;R:21168;}s:69:"1228:pbz-crz-85q16q0op7p9q0o3p296p1o8678s3567qn6s717n-raqvat_cbfvgvba";a:3:{i:0;R:21452;i:1;R:21167;i:2;R:21168;}s:64:"1228:pbz-crz-2pq4sn195rq5o220930149p31pp72soo131921qo-fhcreivfbe";a:3:{i:0;R:21452;i:1;R:21167;i:2;R:21168;}s:68:"1228:pbz-crz-s4pp4qo9n036os0q05n59s5q1q4663n3923668pq-bx_gb_pbagnpg?";a:3:{i:0;R:21452;i:1;R:21167;i:2;R:21168;}s:74:"1228:pbz-crz-776646r300n5q3s9ps3s6npq1o4s4nr2363567s2-wbo_erfcbafvovyvgvrf";a:3:{i:0;R:21452;i:1;R:21167;i:2;R:21168;}s:72:"1228:pbz-crz-833q9qsnoss5000q616n6npsq37p7030nno3nn42-ernfba_sbe_yrnivat";a:3:{i:0;R:21452;i:1;R:21167;i:2;R:21168;}s:68:"1228:pbz-crefba-9p6r28513s2p6s63nq0349oo55pn3nr19n5p6on2-ivrj_crefba";a:3:{i:0;s:23:"out-ihris-common-person";i:1;R:21167;i:2;R:21168;}s:79:"1228:pbz-crefba-0474q22rn4894npq04rr5q77o5587301p77r6415-vaqvivqhny_vasbezngvba";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:61:"1228:pbz-crefba-34q8o60sr25332s7o98585r82r753rns502p3r50-uvqr";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-crefba-q5orn389126r1910s2n6137983n05rrs50r07365-nqq_vqragvsvpngvba";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:78:"1228:pbz-crefba-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:80:"1228:pbz-crefba-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:73:"1228:pbz-crefba-14ss2o6100oo4sr92ro1p4q833q7q5ooq5p81082-anzr_angvbanyvgl";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:76:"1228:pbz-crefba-n34o69sp46r7n278ps65p58oo347qr6560so046s-pbagnpg_vasbezngvba";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:71:"1228:pbz-crefba-56663729nrs0706p003pns4033sq3po44qp729r4-dhnyvsvpngvbaf";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:81:"1228:pbz-crefba-op6186721n821o6n3588rrqs92s8q1333r7p3q25-nqq_ynathntr_cebsvpvrapl";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:71:"1228:pbz-crefba-n1837r219p9o275s9911047674pps72893r11400-nqq_pbzcrgrapl";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:79:"1228:pbz-crefba-2r1prp2q8277rs88707777617o8p8p34707o3164-pbzcrgrapl_rinyhngvbaf";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-crefba-324597n3r9015639pq9or113o5q5n229q513nqp0-rzcyblzrag_uvfgbel";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:71:"1228:pbz-crefba-srr94010o437rnp86pr4r9q1o3n732333r639458-nqq_rzcyblzrag";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:74:"1228:pbz-crefba-1n9rs1n8o15r5s3ss28ro2qoos0qon081qp1no3p-rqhpngvba_uvfgbel";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:70:"1228:pbz-crefba-2035097s8pn3rp8p281qrno33ro7sr228s2783o4-nqq_rqhpngvba";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:62:"1228:pbz-crefba-70440046n3qp2r079s23rr1p57qsn76669o732nn-abgrf";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:65:"1228:pbz-crefba-8o851oqno36n811o6r6416r9oo1952p372op9oq8-nqq_abgr";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:68:"1228:pbz-crefba-702852n3o282opqs2sp2p70q7q8776p6944607p5-ivrj_erpbeq";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:74:"1228:pbz-crefba-796pp76p7n1snspp708srr804247o4646r549ns6-nqq_hcqngr_crefba";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:77:"1228:pbz-crefba-nq12r4228ppprr1q10p5o8qr2nn28p286rsnns96-crefbany_vasbezngvba";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:81:"1228:pbz-crefba-7n54q67060070621987s2082so34rnn2so76poq5-pna_ivrj_gur_crefba_cntr";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:81:"1228:pbz-crefba-422043p42p47p34n8s34q7ns31o9378571sq27q7-pna_rqvg_gur_crefba_cntr";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:87:"1228:pbz-crefba-q54747n3q8594p0r0o0pn7r49rn14s3153pr68o2-pna_ivrj_nyy_bs_gur_puvyq_sbez";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:87:"1228:pbz-crefba-q0749857op627p3p9rsr9qsoorq93p14s3o63on0-pna_rqvg_nyy_bs_gur_puvyq_sbez";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:63:"1228:pbz-crefba-8p41nr88467sr5oonq09spq488662o25p3rp5333-crefba";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:87:"1228:pbz-crefba-14p54q6s96s96or659qo8s9s43po960ns2796o16-guvf_sbez_ubyqf_onfvp_vasbezng";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:64:"1228:pbz-crefba-77qspn2n56s9o1ssp2o6687r230088ps86sop074-fheanzr";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:67:"1228:pbz-crefba-o6rn992nno4668311oo94778r056qq0285s27621-svefg_anzr";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:68:"1228:pbz-crefba-n89q2rnp8q13516o29rs1s2253snn80144670s49-bgure_anzrf";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:68:"1228:pbz-crefba-1969rnq537490p3oons406sno393or9npor514p1-angvbanyvgl";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:66:"1228:pbz-crefba-q450p6nq434q506143883q97roor92r7s89s04rs-erfvqrapr";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:74:"1228:pbz-crefba-244r3r85q6q93r7s2371s153711807p17r45p44n-ivrj_anzr_uvfgbel";a:3:{i:0;R:21475;i:1;R:21167;i:2;R:21168;}s:61:"1228:pbz-cubgb-50r19sqn0q5o4o74n4n1n1q584r56578693n4rn4-vzntr";a:3:{i:0;s:22:"out-ihris-common-photo";i:1;R:21167;i:2;R:21168;}s:60:"1228:pbz-cubgb-ro9n4op1p0p153r4r4o042n79113o815o7r3021q-qngr";a:3:{i:0;R:21509;i:1;R:21167;i:2;R:21168;}s:67:"1228:pbz-cubgb-55s8rop805r65o5o71qqnsqnr390r3or2opq69ns-qrfpevcgvba";a:3:{i:0;R:21509;i:1;R:21167;i:2;R:21168;}s:80:"1228:pbz-cvq-2no98sso9s37pq9892o1s2n56sor8p7770r5p421-vqragvsvpngvba_vasbezngvba";a:3:{i:0;s:20:"out-ihris-common-pid";i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-cvq-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;R:21513;i:1;R:21167;i:2;R:21168;}s:77:"1228:pbz-cvq-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:21513;i:1;R:21167;i:2;R:21168;}s:76:"1228:pbz-cvq-969n089n8n1pq14379n0p004rpr3p9r460312079-fryrpg_nabgure_vq_glcr";a:3:{i:0;R:21513;i:1;R:21167;i:2;R:21168;}s:61:"1228:pbz-cvq-80rrq420167s846869sq322n9p2979p710p9137n-vq_glcr";a:3:{i:0;R:21513;i:1;R:21167;i:2;R:21168;}s:68:"1228:pbz-cvq-9q2p7063088793p055sr015q3841q0pp2qs8r788-vqragvsvpngvba";a:3:{i:0;R:21513;i:1;R:21167;i:2;R:21168;}s:83:"1228:pbz-cvq-p374sr0qo3onqor2r2s0pn6o659p10r367987o72-pna_ivrj_crefba_vq_puvyq_sbez";a:3:{i:0;R:21513;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-cvq-7s02r6qn4onnr0987qns6q6n41p3snroq5263ro1-pna_rqvg_crefba_vq_puvyq_sbezf";a:3:{i:0;R:21513;i:1;R:21167;i:2;R:21168;}s:83:"1228:pbz-cvq-rp0100s3p9292r93sp148p09s2r6q65q32r93588-pna_rqvg_gur_vq_glcr_qngnonfr";a:3:{i:0;R:21513;i:1;R:21167;i:2;R:21168;}s:83:"1228:pbz-cvq-2p5os42080qo08rp232s20162qo2328n175r01o1-pna_ivrj_gur_vq_glcr_qngnonfr";a:3:{i:0;R:21513;i:1;R:21167;i:2;R:21168;}s:79:"1228:pbz-cvq-2q62189o56386sp0904pqp71qosnq2r16p09p5qn-nqq_hcqngr_vqragvsvpngvba";a:3:{i:0;R:21513;i:1;R:21167;i:2;R:21168;}s:73:"1228:pbz-cvq-662889r70os828812pnqs7nr57o39371090506n6-vqragvsvpngvba_glcr";a:3:{i:0;R:21513;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-cvq-7r18porppqns07591p33192sns76o632po94q29o-crefba_vqragvsvpngvba";a:3:{i:0;R:21513;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-cvq-o2n3p0q986q4pp4o7766p1062rnon8p4865r0p04-guvf_sbez_ubyqf_onfvp_vasbezng";a:3:{i:0;R:21513;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-cvq-693424o279r2oo80rrr641068225q8r78330rono-vqragvsvpngvba_ahzore";a:3:{i:0;R:21513;i:1;R:21167;i:2;R:21168;}s:74:"1228:pbz-cyn-rrpp6110r9n6oo7604p97811nrr7381p1o62s0s5-ynathntr_vasbezngvba";a:3:{i:0;s:20:"out-ihris-common-pla";i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-cyn-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;R:21529;i:1;R:21167;i:2;R:21168;}s:77:"1228:pbz-cyn-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:21529;i:1;R:21167;i:2;R:21168;}s:77:"1228:pbz-cyn-r9q5on2q8n0916s161nr7r151s9088s5r5740o35-fryrpg_nabgure_ynathntr";a:3:{i:0;R:21529;i:1;R:21167;i:2;R:21168;}s:62:"1228:pbz-cyn-89o86no0r66s527166q98qs92qqops5416rq58s6-ynathntr";a:3:{i:0;R:21529;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-cyn-6q25q4971ro832rpp19p0nqo1r96706655prn3p8-pna_ivrj_crefba_ynathntr_puvyq";a:3:{i:0;R:21529;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-cyn-1por5p5r6263o25p813nrrr7890q4ns614o55281-pna_rqvg_crefba_ynathntr_puvyq";a:3:{i:0;R:21529;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-cyn-202p47p3s01795rr1r1p81pp1q012q59r4q8o5np-pna_rqvg_gur_ynathntr_qngnonfr";a:3:{i:0;R:21529;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-cyn-4s66o153rp8sp5r68q1n352413o6o6nq78913np8-pna_ivrj_gur_ynathntr_qngnonfr";a:3:{i:0;R:21529;i:1;R:21167;i:2;R:21168;}s:73:"1228:pbz-cyn-0s9q65817nqr9no9p9rq231r054qp6025ns8048q-nqq_hcqngr_ynathntr";a:3:{i:0;R:21529;i:1;R:21167;i:2;R:21168;}s:74:"1228:pbz-cyn-690pprnpo855650po4480ro9q3417s45r9pp25rs-ynathntr_cebsvpvrapl";a:3:{i:0;R:21529;i:1;R:21167;i:2;R:21168;}s:81:"1228:pbz-cyn-52r099o847oqsn31q9n19ro160r45488n6srn413-crefba_ynathntr_cebsvpvrapl";a:3:{i:0;R:21529;i:1;R:21167;i:2;R:21168;}s:64:"1228:pbz-cyn-8o9pq685p13n1o0ron65o612q6r106109228p397-ryrzragnel";a:3:{i:0;R:21529;i:1;R:21167;i:2;R:21168;}s:69:"1228:pbz-cyn-r0888n960865728s66543oo0sr0q361440n57023-yvzvgrq_jbexvat";a:3:{i:0;R:21529;i:1;R:21167;i:2;R:21168;}s:74:"1228:pbz-cyn-4s424q71sq0qn1p98593q02or2086617391s6002-cebsrffvbany_jbexvat";a:3:{i:0;R:21529;i:1;R:21167;i:2;R:21168;}s:71:"1228:pbz-cyn-9s94qp1r778938p7pp73p7oo384s95o8q48spn1p-shyy_cebsrffvbany";a:3:{i:0;R:21529;i:1;R:21167;i:2;R:21168;}s:60:"1228:pbz-cyn-96957qrs11889136oqn69q6o02o51onon0so0839-syhrag";a:3:{i:0;R:21529;i:1;R:21167;i:2;R:21168;}s:74:"1228:pbz-cyn-4345p36p707n69sn369nnqqqsn5366180s10p524-fcrnxvat_cebsvpvrapl";a:3:{i:0;R:21529;i:1;R:21167;i:2;R:21168;}s:73:"1228:pbz-cyn-q32s46n8s76o67865r3s154n9q5228oq8585ppq7-ernqvat_cebsvpvrapl";a:3:{i:0;R:21529;i:1;R:21167;i:2;R:21168;}s:73:"1228:pbz-cyn-o4n98652r3ro4rqspq02pr2251n6780p44293n3n-jevgvat_cebsvpvrapl";a:3:{i:0;R:21529;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-cab-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;s:20:"out-ihris-common-pno";i:1;R:21167;i:2;R:21168;}s:77:"1228:pbz-cab-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:21550;i:1;R:21167;i:2;R:21168;}s:58:"1228:pbz-cab-2p924r3088204rr77on681s72or3444357932spn-abgr";a:3:{i:0;R:21550;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-cab-o83n0oqnr28p6664s1os9p01ooo211o8664so558-pna_ivrj_abgrf_puvyq_sbez_bs_n";a:3:{i:0;R:21550;i:1;R:21167;i:2;R:21168;}s:83:"1228:pbz-cab-54pq9oon24982nsn3o0qs3qqo74rr55691r51s92-pna_rqvg_abgrf_puvyq_sbezf_bs";a:3:{i:0;R:21550;i:1;R:21167;i:2;R:21168;}s:59:"1228:pbz-cab-70440046n3qp2r079s23rr1p57qsn76669o732nn-abgrf";a:3:{i:0;R:21550;i:1;R:21167;i:2;R:21168;}s:70:"1228:pbz-cab-6pp81314q15np067q15n1q61962op52qq23no02r-nqq_hcqngr_abgrf";a:3:{i:0;R:21550;i:1;R:21167;i:2;R:21168;}s:64:"1228:pbz-cab-2nnsnq40063oqo20757nq69o9sp9r0n06q6pn1p1-qngr_nqqrq";a:3:{i:0;R:21550;i:1;R:21167;i:2;R:21168;}s:68:"1228:pbz-ccc-4qqp5p46158rr0995np2737r844or9693n0nsq62-cnffcbeg_cubgb";a:3:{i:0;s:20:"out-ihris-common-ppp";i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-ccc-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;R:21559;i:1;R:21167;i:2;R:21168;}s:77:"1228:pbz-ccc-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:21559;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-ccc-531r0261sqnns3nn330172qn559sq23qps840157-pna_ivrj_cnffcbeg_cubgb_bs_n_c";a:3:{i:0;R:21559;i:1;R:21167;i:2;R:21168;}s:66:"1228:pbz-ccc-98969s89sqq0q890qqq7s79n6013s0q7sr958q82-crefba_cubgb";a:3:{i:0;R:21559;i:1;R:21167;i:2;R:21168;}s:79:"1228:pbz-ccc-q2921on66pn965or27ns4qns62s3o310o8938638-nqq_hcqngr_cnffcbeg_cubgb";a:3:{i:0;R:21559;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-ccc-q3p0n5135r6s3o802r0531s5ps495s1rqorn0n95-pna_rqvg_cnffcbeg_cubgb_bs_n_c";a:3:{i:0;R:21559;i:1;R:21167;i:2;R:21168;}s:60:"1228:pbz-cer-o3oq0o5n70497orp4n02o7ro1po0q4s37ro71n2n-erfhzr";a:3:{i:0;s:20:"out-ihris-common-pre";i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-cer-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;R:21567;i:1;R:21167;i:2;R:21168;}s:77:"1228:pbz-cer-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:21567;i:1;R:21167;i:2;R:21168;}s:81:"1228:pbz-cer-n1r57o657486120p3s437s749672p7o7qp5q8o29-pna_ivrj_erfhzr_bs_n_crefba";a:3:{i:0;R:21567;i:1;R:21167;i:2;R:21168;}s:81:"1228:pbz-cer-7n4q06op97rq21o94135p40p7q0s22qq14305nr1-pna_rqvg_erfhzr_bs_n_crefba";a:3:{i:0;R:21567;i:1;R:21167;i:2;R:21168;}s:67:"1228:pbz-cer-1s63s436rr46p00po76p9srn707913r8pqo61q36-crefba_erfhzr";a:3:{i:0;R:21567;i:1;R:21167;i:2;R:21168;}s:71:"1228:pbz-cer-93r9q086202n5456sq81307osqo5q9p9r4r37050-nqq_hcqngr_erfhzr";a:3:{i:0;R:21567;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-cfp-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;s:20:"out-ihris-common-psc";i:1;R:21167;i:2;R:21168;}s:77:"1228:pbz-cfp-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:21575;i:1;R:21167;i:2;R:21168;}s:77:"1228:pbz-cfp-9pq2r870p1s9242qn8200076q54r3n75osq5875r-ivrj_rinyhngvba_uvfgbel";a:3:{i:0;R:21575;i:1;R:21167;i:2;R:21168;}s:64:"1228:pbz-cfp-05r59oo0rq360np5pspp85pqo8n3184r0442743s-pbzcrgrapl";a:3:{i:0;R:21575;i:1;R:21167;i:2;R:21168;}s:76:"1228:pbz-cfp-s069p2554r91np3p50rr9697004o99rq941p09os-pbzcrgrapl_vasbezngvba";a:3:{i:0;R:21575;i:1;R:21167;i:2;R:21168;}s:83:"1228:pbz-cfp-s6qrpo75r195965s78546p95s1p4158510670058-pbzcrgrapl_rinyhngvba_uvfgbel";a:3:{i:0;R:21575;i:1;R:21167;i:2;R:21168;}s:60:"1228:pbz-cfp-63143o6s8007o98p53pn2149822777o3566s9241-erghea";a:3:{i:0;R:21575;i:1;R:21167;i:2;R:21168;}s:67:"1228:pbz-cfp-2rnpqor4pos1468n1777876985p70q6rn0187qso-abg_rinyhngrq";a:3:{i:0;R:21575;i:1;R:21167;i:2;R:21168;}s:63:"1228:pbz-cfp-n87s8s5970p2o31r74s5q756n52q3nr5080pp050-pbzcrgrag";a:3:{i:0;R:21575;i:1;R:21167;i:2;R:21168;}s:67:"1228:pbz-cfp-s2no75418sp0n6323288594ropo81s6pq9r31716-abg_pbzcrgrag";a:3:{i:0;R:21575;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-cfp-62p80s33o51n4n3sp687118610q60814o7n3365r-pna_ivrj_crefba_pbzcrgrapl_puv";a:3:{i:0;R:21575;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-cfp-s41n509sr2p3q7s1p6q22q2p8p679570rsqqn9n4-pna_rqvg_crefba_pbzcrgrapl_puv";a:3:{i:0;R:21575;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-cfp-r57s139n5nq974s130np3730p1806o2p981o229n-pna_ivrj_gur_pbzcrgrapl_rinyhn";a:3:{i:0;R:21575;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-cfp-p142ro393730r4p7s7n2r8ro496r0r7o950032p3-rqvg_gur_pbzcrgrapl_rinyhngvba";a:3:{i:0;R:21575;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-cfp-o262179303r73p68ssp47015198qq01rn315o366-ivrj_gur_pbzcrgrapl_rinyhngvba";a:3:{i:0;R:21575;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-cfp-4193018s2r723so8pp87n51535457oo114pqq240-pbzcrgrapl_rinyhngvba";a:3:{i:0;R:21575;i:1;R:21167;i:2;R:21168;}s:71:"1228:pbz-cfp-q46o260s72783srnpqn14rn3n67s4qo621o46997-crefba_pbzcrgrapl";a:3:{i:0;R:21575;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-cfp-99srp0429s4298n64417np45455qqor9pqp9r8s5-nqq_hcqngr_pbzcrgrapl";a:3:{i:0;R:21575;i:1;R:21167;i:2;R:21168;}s:68:"1228:pbz-cfp-5nrn3rs51o6ns5pnq59223r2821746n88p860r8r-ynfg_rinyhngrq";a:3:{i:0;R:21575;i:1;R:21167;i:2;R:21168;}s:64:"1228:pbz-cfp-ss7513853508r7p6r3nn07908qs2n450n026ro88-rinyhngvba";a:3:{i:0;R:21575;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-cfp-q7723n0649s01129502571573o1r1q512287no9q-pna_ivrj_gur_pbzcrgrapl_rinyhn";a:3:{i:0;R:21575;i:1;R:21167;i:2;R:21168;}s:68:"1228:pbz-esb-00q1r8s3o7r617oopr21544r5388n56o668q8qpq-erprag_punatrf";a:3:{i:0;s:20:"out-ihris-common-rfo";i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-esb-6676r808r171s380pr79opqp8r5716665o20o0qp-ivrj_sbezf_gung_unir_orra_hcqn";a:3:{i:0;R:21597;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-esb-1qo13r26872r92np395ps318snr1q09ppp07rr48-fryrpg_gur_sbez_gb_ivrj_gur_zb";a:3:{i:0;R:21597;i:1;R:21167;i:2;R:21168;}s:78:"1228:pbz-esb-2ps86n02832q1q7q06ssrpr8oorr07n14rqnq492-ivrj_erprag_sbez_punatrf";a:3:{i:0;R:21597;i:1;R:21167;i:2;R:21168;}s:69:"1228:pbz-esb-1r1sn67o10oq53nrnr2n0410oo06qs965n6pn94q-punatrf_znqr_gb";a:3:{i:0;R:21597;i:1;R:21167;i:2;R:21168;}s:59:"1228:pbz-esb-2ro888r95s113117p63r0q526s68nq90267n45r6-fvapr";a:3:{i:0;R:21597;i:1;R:21167;i:2;R:21168;}s:77:"1228:pbz-esb-p2p2541220n65o97913151rq168r3so36qqoo283-ivrj_punatrf_znqr_fvapr";a:3:{i:0;R:21597;i:1;R:21167;i:2;R:21168;}s:59:"1228:pbz-esb-24345n14377sq821q3932s4r82s6431640955o0o-gbqnl";a:3:{i:0;R:21597;i:1;R:21167;i:2;R:21168;}s:63:"1228:pbz-esb-qn24830s1s7072q55862nso6969p1n4p433np056-lrfgreqnl";a:3:{i:0;R:21597;i:1;R:21167;i:2;R:21168;}s:63:"1228:pbz-esb-op159n569313s9588nqqsr1p69spr9pp088q41ro-ynfg_jrrx";a:3:{i:0;R:21597;i:1;R:21167;i:2;R:21168;}s:65:"1228:pbz-esb-n722oqnn93pp86ssn98n61o2q5s1ss61813nrs4r-gbgny_sbhaq";a:3:{i:0;R:21597;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-esb-5n2ppro3qpr98r3720oq95404ppo3qs93211p27n-pna_ivrj_gur_yvfg_bs_erprag_sb";a:3:{i:0;R:21597;i:1;R:21167;i:2;R:21168;}s:71:"1228:pbz-esb-190o9ss74r1o6699r4ro19p21945218q0sq917p1-ivrj_erprag_sbezf";a:3:{i:0;R:21597;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-efg-r74nq06qps7544591roo0p48333r441986nr62p3-vasbezngvba_nobhg_erpbeq_fgngh";a:3:{i:0;s:20:"out-ihris-common-rst";i:1;R:21167;i:2;R:21168;}s:71:"1228:pbz-efg-op37osn42994n347p45456o6p95rp0520o0s1n34-nqq_erpbeq_fgnghf";a:3:{i:0;R:21611;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-efg-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;R:21611;i:1;R:21167;i:2;R:21168;}s:77:"1228:pbz-efg-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:21611;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-fpb-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;s:20:"out-ihris-common-sco";i:1;R:21167;i:2;R:21168;}s:77:"1228:pbz-fpb-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:21616;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-fpb-r1s1166p11n15q1063por62s78r7s2s40n6op5s0-fryrpg_nabgure_pbzcrgrapl_glcr";a:3:{i:0;R:21616;i:1;R:21167;i:2;R:21168;}s:69:"1228:pbz-fpb-n52np6764oppqos7so5168p27q3qo3qo759r04p6-pbzcrgrapl_glcr";a:3:{i:0;R:21616;i:1;R:21167;i:2;R:21168;}s:79:"1228:pbz-fpb-38469q77q97p1r42509746p930s11109p28s316s-fryrpg_nabgure_pbzcrgrapl";a:3:{i:0;R:21616;i:1;R:21167;i:2;R:21168;}s:64:"1228:pbz-fpb-05r59oo0rq360np5pspp85pqo8n3184r0442743s-pbzcrgrapl";a:3:{i:0;R:21616;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-fpb-755803n70287379p26q0166s4rp1p21qs8q48n30-fryrpg_nabgure_pbzcrgrapl_riny";a:3:{i:0;R:21616;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-fpb-4193018s2r723so8pp87n51535457oo114pqq240-pbzcrgrapl_rinyhngvba";a:3:{i:0;R:21616;i:1;R:21167;i:2;R:21168;}s:78:"1228:pbz-fpb-q39sq0787n06pq3o0nn27s9q3658542q395srqr2-rqvg_gur_pbzcrgrapl_yvfg";a:3:{i:0;R:21616;i:1;R:21167;i:2;R:21168;}s:83:"1228:pbz-fpb-27oq543p84ss2199p13p0314n9o78832r2r2954s-rqvg_gur_pbzcrgrapl_glcr_yvfg";a:3:{i:0;R:21616;i:1;R:21167;i:2;R:21168;}s:83:"1228:pbz-fpb-5ro61886o4r58160n5rso71s1q60054s451o7ro0-ivrj_nyy_yvfg_nffbpvngrq_jvgu";a:3:{i:0;R:21616;i:1;R:21167;i:2;R:21168;}s:78:"1228:pbz-fpb-257551n6or3nn4o7p36pqro75p66r81onr4r98s1-ivrj_gur_pbzcrgrapl_yvfg";a:3:{i:0;R:21616;i:1;R:21167;i:2;R:21168;}s:83:"1228:pbz-fpb-q4839o9p85oq76839179qq30152s86n3095s74r8-ivrj_gur_pbzcrgrapl_glcr_yvfg";a:3:{i:0;R:21616;i:1;R:21167;i:2;R:21168;}s:58:"1228:pbz-fpb-709n23220s2p3q64q1r1q6q18p4q5280s8q82spn-anzr";a:3:{i:0;R:21616;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-fpb-os48r11pr2p42r10pq7np42nn83340q5q76or6s3-fryrpg_pbzcrgrapl_glcr_gura_pb";a:3:{i:0;R:21616;i:1;R:21167;i:2;R:21168;}s:59:"1228:pbz-fpb-70440046n3qp2r079s23rr1p57qsn76669o732nn-abgrf";a:3:{i:0;R:21616;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-fpb-1pq0923qq48po36r27622qrr719r543rp7n02qr4-rqvg_nyy_yvfgf_nffbpvngrq_jvgu";a:3:{i:0;R:21616;i:1;R:21167;i:2;R:21168;}s:61:"1228:pbz-fqpb-7266n1qn7r3n6739o245qqsr74o0o682s7qn63s8-ejnaqn";a:3:{i:0;s:21:"out-ihris-common-sdco";i:1;R:21167;i:2;R:21168;}s:60:"1228:pbz-fqpb-77s256o43643417s9o6622nqss8oq31nr6rn7781-pbatb";a:3:{i:0;R:21634;i:1;R:21167;i:2;R:21168;}s:62:"1228:pbz-fqpb-5po4p9q828175rq3931rp52305o32s47173n8r04-orytvhz";a:3:{i:0;R:21634;i:1;R:21167;i:2;R:21168;}s:61:"1228:pbz-fqpb-r92904opr8026o3p1s8828o0pr882r6o081p7so6-htnaqn";a:3:{i:0;R:21634;i:1;R:21167;i:2;R:21168;}s:60:"1228:pbz-fqpb-n84s56s2r6n77rpo4o2s89344446qq3ss91o87p4-xraln";a:3:{i:0;R:21634;i:1;R:21167;i:2;R:21168;}s:62:"1228:pbz-fqpb-4617585o8749n71ooo21237pno6p2qp9por3o86s-ohehaqv";a:3:{i:0;R:21634;i:1;R:21167;i:2;R:21168;}s:63:"1228:pbz-fqpb-7r380or8qp28q72571144716r95r598p986op4q6-gnamnavn";a:3:{i:0;R:21634;i:1;R:21167;i:2;R:21168;}s:68:"1228:pbz-fqpb-768685pn582noq0ns2soo57pn37752nn98p9372o-havgrq_fgngrf";a:3:{i:0;R:21634;i:1;R:21167;i:2;R:21168;}s:60:"1228:pbz-fqpb-1193on31s109rpsqsno76s13pp2o5r44479q5603-fhqna";a:3:{i:0;R:21634;i:1;R:21167;i:2;R:21168;}s:61:"1228:pbz-fqpb-r3772np4o4qo87o4n8qosn59rs43pq1n8nq29515-senapr";a:3:{i:0;R:21634;i:1;R:21167;i:2;R:21168;}s:66:"1228:pbz-fqpb-77qpq849r550nsrp3p83q38spp8pop72p058s4qo-fjvgmreynaq";a:3:{i:0;R:21634;i:1;R:21167;i:2;R:21168;}s:62:"1228:pbz-fqpb-17q53r0r6n68npqs80o78q4s9q868p8736qo2prp-treznal";a:3:{i:0;R:21634;i:1;R:21167;i:2;R:21168;}s:59:"1228:pbz-fqph-nr900s1r43po81n5829rnr3pqpo9ron900po0s3p-rheb";a:3:{i:0;s:21:"out-ihris-common-sdcu";i:1;R:21167;i:2;R:21168;}s:64:"1228:pbz-fqph-21p03ssn6o93oprnsqs0s8ono14sro63qp5q1q2s-hf_qbyyne";a:3:{i:0;R:21647;i:1;R:21167;i:2;R:21168;}s:68:"1228:pbz-fqph-5q59n43o1n588o82o4p514qs4359227322609ns9-oevgvfu_cbhaq";a:3:{i:0;R:21647;i:1;R:21167;i:2;R:21168;}s:56:"1228:pbz-fqq-r066qp148n3ns0oo86rq9438q432n81402r778oq-zq";a:3:{i:0;s:20:"out-ihris-common-sdd";i:1;R:21167;i:2;R:21168;}s:57:"1228:pbz-fqq-n0s09n13s8rs9091983494n38sqsq9004q5np60o-cuq";a:3:{i:0;R:21651;i:1;R:21167;i:2;R:21168;}s:57:"1228:pbz-fqq-r76168211325254183r977p48oq5904444424qs9-zcu";a:3:{i:0;R:21651;i:1;R:21167;i:2;R:21168;}s:61:"1228:pbz-fqq-59n8osq7oos012459995sr75p0nq3r83or8r7q8r-znfgref";a:3:{i:0;R:21651;i:1;R:21167;i:2;R:21168;}s:66:"1228:pbz-fqq-no42p812n9n7886s3950r39o9p3rop0475o99574-cbfgtenqhngr";a:3:{i:0;R:21651;i:1;R:21167;i:2;R:21168;}s:59:"1228:pbz-fqq-q48p26184qp552rn83n08536nrsp6q4spsrr29no-on_of";a:3:{i:0;R:21651;i:1;R:21167;i:2;R:21168;}s:61:"1228:pbz-fqq-3229609r15436rp51ops00818n69n84qop58n0p2-yvprafr";a:3:{i:0;R:21651;i:1;R:21167;i:2;R:21168;}s:76:"1228:pbz-fqq-s75092s246n58o08496q123s45073rs314o82nq8-pbzcyrgvba_bs_genvavat";a:3:{i:0;R:21651;i:1;R:21167;i:2;R:21168;}s:61:"1228:pbz-fqq-noqn9pn4r2osrqo7988659583520832298014n63-qvcybzn";a:3:{i:0;R:21651;i:1;R:21167;i:2;R:21168;}s:65:"1228:pbz-fqq-10qr46o3o341o6s837ps6q72972o9os2o3s6r491-pregvsvpngr";a:3:{i:0;R:21651;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-fqrg-rn2741rqroo1s54709o150s720q8qs0nqqs803so-qrterr_pregvsvpngvba";a:3:{i:0;s:21:"out-ihris-common-sdet";i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-fqrg-qnr14s8s08o68r01nps768p45n84ss58o35rsq4q-pbagvahvat_rqhpngvba";a:3:{i:0;R:21662;i:1;R:21167;i:2;R:21168;}s:63:"1228:pbz-fqrg-8rsp986367po45846rq324nr4nn2r939rs8653o2-vasbezny";a:3:{i:0;R:21662;i:1;R:21167;i:2;R:21168;}s:60:"1228:pbz-fqrg-6r6n6s2086oo5sr5qosq17q8q5s502q48759834o-bgure";a:3:{i:0;R:21662;i:1;R:21167;i:2;R:21168;}s:66:"1228:pbz-fqrg-n800nn60o83q1211p662510r8on18q07r5891235-uvtu_fpubby";a:3:{i:0;R:21662;i:1;R:21167;i:2;R:21168;}s:71:"1228:pbz-frnepu-n0p7n2npr5sspss2p25542onr23o78q5n26pr7p7-frnepu_erpbeqf";a:3:{i:0;s:23:"out-ihris-common-search";i:1;R:21167;i:2;R:21168;}s:70:"1228:pbz-frnepu-o584q2730q3ssq197989q6809s8386709n33p6o9-frnepu_crbcyr";a:3:{i:0;R:21668;i:1;R:21167;i:2;R:21168;}s:63:"1228:pbz-frnepu-opr06414177s72no70r6387o6ns9s8prrs0q6049-frnepu";a:3:{i:0;R:21668;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-frnepu-8rs32864r2p19sp96p015qo52oo168sq7231n5r9-erfhygf_yvzvgrq_ol";a:3:{i:0;R:21668;i:1;R:21167;i:2;R:21168;}s:87:"1228:pbz-frnepu-8120920pqr999ss32q42820229o9q2422o34o7s0-pubbfr_bcgvbaf_gb_yvzvg_erfhyg";a:3:{i:0;R:21668;i:1;R:21167;i:2;R:21168;}s:77:"1228:pbz-frnepu-843869q609o6631s5o1245nr9903201qqoq7s020-fnir_nf_qrsnhyg_ivrj";a:3:{i:0;R:21668;i:1;R:21167;i:2;R:21168;}s:70:"1228:pbz-frnepu-pnosn4882ns0o513952prp113216sps97sp66q56-eryngrq_ivrjf";a:3:{i:0;R:21668;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-6r227r343132o085rq0pppq3631s618998rr36ss-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;s:21:"out-ihris-common-shcl";i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-6sp32ssrpnr4ro923sr141617828p28n4o6r9s66-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-2993o9q5001p571psros72606q166545q5n9s2or-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-o49p40638ors8sn6975pp31357p2qq90oqss7540-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-8npo35nr682550op66r0989q28q17q817n0rp86n-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-5sp1864611sro477pr5rp7o5921s2nq2689664nr-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-1o27r7658483poq1s103nnornr650n2395q735sr-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-o62ns87p4733179np07n88qpn5or86p8np5n89n5-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-8n9o323r6162n44382pnon09rro21sp229o1qp7p-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-ps572465pr1313417r3330ornp6575rs495q899s-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-7664nq2rs400190r25r7so5r96on9635r203nn14-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-2q91n52q8o151sn88onr27p491838pr0o905p345-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-50q7s5r002640qp3rn524q4194pso785q7465q3s-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-7pnn38236q7qp04nns87r7213q94o59nprq8soq4-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-5829ro9o1r81868q11741p6640337ppprp9420q1-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-o943426n262o5p695o94on7086r3225605r3pnqs-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-p40nnrqq3s4113p37nrr61qr63p2np3q53088qs8-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-69sspspr1q3qpp19qq02n543oo1s8750p6qq6q5s-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-np0nnpnps03ss36950sr4snr8r82s8n918nn2q26-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-4qp74344r2s64qorrprr5n13sq50r7539684s474-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-93n3o9r36os40s99qr4p10qn078p838ps6717s2s-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-7r70238599r15rrq44323nn2qqo408qn89qqr922-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-r7p3qos28551n77o1882oo1q4787q066qn7088p4-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-po44qpqp785684n4350o9q7rs3prrsn6qrqn57rq-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-s9r89s5q1q77659oq85329s8oq67910109060491-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-o861q0poso5sq3s8o882qn411p32s7n4s2949qo8-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-19664q4qsoq323q6887pqq128nrn4r3o5o648nq5-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-oo2o46s714n8s4n7p6s654732883s90p4n326qsn-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-q081qq36822966561q4479q22q86q74p8qr8104n-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-9pqp8890os91o5375r8781n5ssn11367r9744n28-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-n1nsn772672616959s61s99q5s20806o4p1r6982-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-42168o0627n4029pq0217110661p2511s629p35q-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-r6q9r8779rnq545q4qppq54rnr09ss4p752q8q63-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-832n21nrpp297r72op4npq17pr1n339q257n232q-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-945o5009r4n0qrp96419844507p77o3p9qn68191-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-s83o77s3405osqp8rr66185osp561p73q0o4q31r-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-321po0pr51oq3r840ssrr81n697q51sro7n1snq8-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-68535o59sn51r37onro247o57opq35p77o58473q-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-6p95oo2341q30r13ps82r488p9q535p9r3220q60-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-p508sn3nss1rp2qo2s92rns7qo5q7r750no01o72-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-8o2nq1078p9294rpn6r332p238nr6p7npsqon973-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-7or21n407prq480sroorr95r94984474s284n6so-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-rp3q081571s412o02or382n34qpn0p47nr89q885-pna_ivrj_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-0so38r6or6nrq58s1nr2psp6630q390563p3s66q-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-o1r45o09rns580709qqrro06rnqq1n8006933r3q-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-qsr78726p1338843q7220o629s5962ro461psp98-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-51rrq89317o42qr4n855rqsqq9nq6nqq87s6n4r5-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-0337pr831783os5o00241754247666r222nsn72p-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-r974pnoo08r2o7n73878093no24n9n158o421ps2-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-sr1qp1s2794pr878421o9597q3sppr484q022670-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-538p3q991so7376q8spq66r31o5395r207n58p15-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-79q40p453q9895pr556p623s1qp05or653nnq636-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-6s96psp6rroq5pp264813or1787148s0pq60ssr6-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-1p09237838s33so1r28or4q8o57o28o7n799598n-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-p63sn2s3272o06nq2523761923p2rpq98614o73p-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-94son36p399s183s74s2695p1194oo3sr8ss0n00-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-24q02287907180033o012snrnoq3s3o300q6rons-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-93s60sr0780sqo2372nrssp7r4oqqor2o6qr355n-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-77p954os52n0609p01o16qr49811q6r6o51662rp-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-64s8s091s5932n3sq24r8r9322277143o0099683-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-68ppo6802940q63o2s5r419s19n43opr495o32np-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-6p1q980r6q784r6p207s3957150q1o7q48510570-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-2n9nos8n1npn8po3r0qo9pp2p68455ns08r69so0-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-rs9oro8n527621s215or1rsorr721nn6q48r169q-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-qo2p79pr8p463pops3130s4257518n0s0o3982pp-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-o1743q9385588229qqo0o82p2sq1sp8n1p452rsn-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-q7918180rn4537101946s1rnr03rprnn2259s629-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-4r46ssqs0r2638540145q6p64o3rn21s341199ns-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-45o5027981s2o6271r8859nsn26qpsn702oso5r4-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-rs125888781pp3o48q237p734nr7681896549rs6-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-n2nqo84n5s1op14o038n083n2qno7q8r6o96r116-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-4s388s751rqq4381p87226so7969p9rsnqo47309-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-6n121058so02or817s095r5144843o7s91qpp69r-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-ppso8n3q9srqpoq54rpp551n291384op0q924217-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-7267046q764931q825pppn0o064n1oqq06o1rr5o-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-s0oqoq38o26nn3qs7sqsq39q81688np9o89q1527-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-ps91po3566o0q3s13o48p16srns351r9r3qp1p23-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-p329r8psr52843qr25p0qn998220921834043sp5-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-7773380901n4r4q4p2oq6no1op3qn0o044oqn90n-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-4np8147p21rqq46p64q45s45s8sop6n4sqop5r3o-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-q50q6347q53o81p8p2676os72214q8nq04q58q6s-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-8084q1p7qpo505q888p329p480o4o98n429485r4-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-5pp96870o9s6q8q72p377p743377n830ro044rr6-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-0pn5165ro1pp7636477q26rs941prnnn151193s3-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-3rq34ooqq5n0n47p4p6qro790p26889206664098-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-693q34s922987o412s3182s2p752np930q95p513-pna_rqvg_qngnonfr_pbqr_yvfg_py";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:76:"1228:pbz-fupy-3792516s1369628s35n4npr3o5r21p450s2q21pq-nqzvavfgengvir_fbhepr";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:78:"1228:pbz-fupy-s091o6s3rr4or8rr4181pnorsr734787p100r104-pnyphyngvba_flagnk_glcr";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:63:"1228:pbz-fupy-r070qr224434n2npq352o35prp46s34s9r08r1o2-pheerapl";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:59:"1228:pbz-fupy-s6oo0s468n8569p67o3q6826r57r62p5500p3681-qnlf";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:69:"1228:pbz-fupy-rrrsq329s9psp7o310ppr1238560590n90p21355-qvfnttertngvba";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:62:"1228:pbz-fupy-1os5sr17046qp1630r5s39r4s7q1q7r964n0346r-qvfrnfr";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:69:"1228:pbz-fupy-2or49oo28rr16qsqr3402r6r086rrr9r284r6627-qvfrnfr_fgnghf";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:66:"1228:pbz-fupy-863o2164n4s2os227rn1q1nrs73nq8543480p495-qngn_fbhepr";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:71:"1228:pbz-fupy-5n26s4272s86r40p73o0sn4p22nqnor52p66p335-qngn_fbhepr_glcr";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:63:"1228:pbz-fupy-2o3o2437s86rn4n0n8830rr6s8676po1p3sp7qn2-qngnglcr";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:70:"1228:pbz-fupy-92993540977q42snrq76onrps6601624rq25q0np-sbyybjhc_crevbq";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:68:"1228:pbz-fupy-9np3532qpo9s716400227o6767p1rr65584703op-obhaqnel_glcr";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:67:"1228:pbz-fupy-5r62n7p0osns79orp3rq3q3os94ornr2n18p0470-pbhagel_pbqr";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:61:"1228:pbz-fupy-8n754p61p2prq0p5ss79n1827r02p9q643q6q926-traqre";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:71:"1228:pbz-fupy-qo9r4o57o263235169o1np0p3227r16qsr0nop9o-trbtencuvp_yriry";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:74:"1228:pbz-fupy-3pn0qs78p8s7n8q38p421950nrorp71q9r065127-trbtencuvp_ybpngvba";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:83:"1228:pbz-fupy-4p8rp3890416r4o522q26nro795r2o5n29on7sq9-urnygu_vaqvpngbe_senzrjbex_1";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:83:"1228:pbz-fupy-324376831p684r44n8p9021o0p00qp03n4s711on-urnygu_vaqvpngbe_senzrjbex_2";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:72:"1228:pbz-fupy-p3723782p4p56o5q8p3r965n188s39s6s287n634-vaqvivqhny_vapbzr";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-so9pn8p77s6899n570q26q6974r50r5o20qro8q7-ybtvpny_rkgraqrq_yvfg_sbe_obby";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:85:"1228:pbz-fupy-5358qp5348n720381qpp92so08p7n26rr5ss694n-zbavgbevat_naq_rinyhngvba_senz";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:61:"1228:pbz-fupy-200qpqpr9o5n0627o291634p6n82nr25pr09s789-zbaguf";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:65:"1228:pbz-fupy-o032583qo6ps079n0016n25r22252q91n56qo165-zhygvcyvre";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:80:"1228:pbz-fupy-p31op66ps971152r7q9q9p68rp74680o27o9pp05-bcrenaq_glcr_bs_vaqvpngbe";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:66:"1228:pbz-fupy-25po6s3s07o2sr7634n5po8por1959o26s12n1o7-becuna_glcr";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:72:"1228:pbz-fupy-9qo3764rn365590n845p10586s2qn8onq766o8ps-betnavmngvba_glcr";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:66:"1228:pbz-fupy-936r8621oq29rq0sprsq8p09n25476o86qp09rq0-crevbqvpvgl";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:71:"1228:pbz-fupy-ppp0r9p4q49o29r835109q45sqr3q50p0qo0ss50-certanapl_fgnghf";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:71:"1228:pbz-fupy-505q630nono58855sqrsp32561opn1r0nqqqr31s-cebtenzzr_fgnghf";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:69:"1228:pbz-fupy-0949s5spppp7474rp02pn0sp2674n55o19pq47qo-cebtenzzr_glcr";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:63:"1228:pbz-fupy-30p8n8n1856ro222qs07prs06oq4444r98r9q3rq-dhnegref";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:59:"1228:pbz-fupy-6643qpr8r4q3p9o96317rrr572q9rn0nr4q49r57-enpr";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:61:"1228:pbz-fupy-39sq2070q41o91rr5rrp9119pr5p0416n8r0p2p4-frpgbe";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:67:"1228:pbz-fupy-507o518s5qon6q3qrp7230nr6ns793s2n4s2o712-ovbybtvp_frk";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:68:"1228:pbz-fupy-1411r6r802085no49q7so2020o05or49n0799775-fcrpvny_inyhr";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:69:"1228:pbz-fupy-p701397oosp651n5sr20p64249o0p95n0452r7q1-fgngvfgvp_glcr";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:72:"1228:pbz-fupy-s883pn0o2np8n93250p9n0o44910693sqq826483-gnetrg_cbchyngvba";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:59:"1228:pbz-fupy-s6o935no337145rsqrnqqn28pnr18nn89n845r36-havg";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:65:"1228:pbz-fupy-9r3nrr9pnssnonqor8n84q14415n21q131sr44s2-inyhr_glcr";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:69:"1228:pbz-fupy-qr0p8qso52q956n0qq66pr5qp952qs9sn29r9239-irefvba_fgnghf";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-fupy-qn57s6p2267poon02o98275ro517rnqqsp1q2p6r-ihyarenovyvgl_fgnghf";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:60:"1228:pbz-fupy-7q75266n53o99pr4q80q337862rn1rqq8on1o1n1-jrrxf";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:60:"1228:pbz-fupy-96s997oprpo36502rq4o296n795s72nss9q6osr7-lrnef";a:3:{i:0;R:21676;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-gpb-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;s:20:"out-ihris-common-tco";i:1;R:21167;i:2;R:21168;}s:78:"1228:pbz-gpb-75r9654onr0nq91n9qp163q5210or416pq0qq323-pbeerpg_guvf_vasbezngvba";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:83:"1228:pbz-gpb-4q62n023n767245r93n9823784poo453n5557955-pbhefr_pbzcrgrapl_rinyhngvbaf";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:60:"1228:pbz-gpb-q82o56pnq90059583p1183r82rqo8ps7q4rs4794-pbhefr";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:65:"1228:pbz-gpb-9rn42n2p2q649nnsr8p66sp839q464n8q25n1pr3-pbhefr_anzr";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:77:"1228:pbz-gpb-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:70:"1228:pbz-gpb-162124097r1q6s0413988p5sr27300q8p62595sr-fpurqhyrq_pbhefr";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:71:"1228:pbz-gpb-r771602nprro5or0ns87p818r8461pq8on37qq7s-raebyyrq_fghqragf";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-gpb-s58ro4p288p3rpp3o049qr82p8388on219268ssp-fryrpg_nabgure_pbhefr";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:69:"1228:pbz-gpb-81oo26q7o90sp969p92373n6291323pr66o4n9s7-genvavat_pbhefr";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:71:"1228:pbz-gpb-67o01nq28o6n194173o775211o119r950r151212-fpurqhyrq_pbhefrf";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:58:"1228:pbz-gpb-34q8o60sr25332s7o98585r82r753rns502p3r50-uvqr";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:71:"1228:pbz-gpb-qnq33oo8p2363sp6963803084p5r428789r4qorn-fpurqhyr_n_pbhefr";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gpb-p6n073n699nrs8634207r61n1378sq71q14qo16r-nqq_hcqngr_n_fpurqhyrq_genvava";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gpb-6p7p2268s17qn673o91p024r49761180sq832q05-fryrpg_nabgure_genvavat_pbhefr";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:78:"1228:pbz-gpb-3sp320s01558163o1n4579oopos2q296323o53o2-genvavat_pbhefr_pngrtbel";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gpb-27po6s464nsp35757o0s062n91902q4roq799o4o-fryrpg_nabgure_genvavat_pbhefr";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:76:"1228:pbz-gpb-035qo4nr17r9ono364so81979ns9p9603791o315-genvavat_pbhefr_fgnghf";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gpb-80496q2168850990pon6714o8sp11958q43025n9-fryrpg_nabgure_genvavat_pbhefr";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:79:"1228:pbz-gpb-o2o7o47738o6n17r57868oo8s76s37r5860q58p4-genvavat_pbhefr_erdhrfgbe";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gpb-7o7p97sp6092s633n7o84439n4s8oo1nns854nnr-fryrpg_nabgure_genvavat_pbhefr";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:80:"1228:pbz-gpb-qqpro7q94qrs601s7nrp5onrors53npn48n71939-genvavat_pbhefr_rinyhngvba";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gpb-psq01674269176o767n32n23745n904q949npn26-fpurqhyr_n_crefba_sbe_n_genvav";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gpb-9o69ss053oqsr4q4p239190r9748pp839354rq2n-nqq_hcqngr_genvavat_pbhefr_fpu";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-gpb-nors0p700p8p79q7093qq904r2387529q4sp036r-fryrpg_nabgure_pbhefr";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:58:"1228:pbz-gpb-ps9o77061s7o3126o49q50n6sn68s7pn8p26o7n3-bcra";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:60:"1228:pbz-gpb-88q86o7721q587644r9p4ps33n084202po3o0ss0-pybfrq";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:58:"1228:pbz-gpb-q7pq56s2n2n3s47830760rqso89946ro7o9r2pq1-cnff";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:58:"1228:pbz-gpb-2758r3273qq1670o2s6s59nsn8542q89p80q20n6-snvy";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:64:"1228:pbz-gpb-387sq1oop18419r26p612s4npnq9213r5073nqr4-vapbzcyrgr";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:67:"1228:pbz-gpb-2rnpqor4pos1468n1777876985p70q6rn0187qso-abg_rinyhngrq";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:70:"1228:pbz-gpb-5os3p8no596r164181n2777s643ss176899q07s8-genvavat_znantre";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gpb-0pqs8sn2p7r05760r939679n38269o5s8rp758p2-rqvg_gur_genvavat_pbhefr_fgngh";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gpb-422rp53s8059715s5qss54on187qq4onnr321so9-ivrj_gur_genvavat_pbhefr_fgngh";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gpb-7n3706o15rps143s0s2n8853nn5982919025o814-rqvg_gur_genvavat_pbhefr_rinyh";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gpb-oqqn6n01773p6525s299o27996o2079o53o4p9q5-ivrj_gur_genvavat_pbhefr_rinyh";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gpb-rp8q1r7297r79ps4102pq67r792395r1r07r85qs-rqvg_gur_genvavat_pbhefr_pngrt";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:83:"1228:pbz-gpb-7s338n7n87q90q3op742s64936167p6rn72p297q-rqvg_gur_genvavat_pbhefr_yvfg";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gpb-6270838rr4264qoq89o527s425726596s324s8q0-rqvg_gur_fpurqhyrq_genvavat_pb";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:83:"1228:pbz-gpb-p3r102q21q8n4ps9600q075p5952o809833nop1p-ivrj_gur_genvavat_pbhefr_yvfg";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gpb-sss0onp6q2n5497392rop9764n5ns6o677n63s58-rqvg_n_fpurqhyrq_genvavat_pbhe";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gpb-s62pos40qn3033q5019q631n2o84nspp74699r75-ivrj_gur_fpurqhyrq_genvavat_pb";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gpb-sr2nr002393sp0717144n7n56361246r354q8674-guvf_sbez_ubyqf_onfvp_vasbezng";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:79:"1228:pbz-gpb-7p207q0srp01o94sp5693s9857p33qn26pr2877p-fpurqhyrq_genvavat_pbhefr";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gpb-2862884r9ro7no167sp66o9q78r6srn91q22n2r1-crefba_fpurqhyrq_genvavat_pbhe";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:72:"1228:pbz-gpb-183908q88n547n33n2s18s21np84o0q46sq68149-genvavat_erdhrfgbe";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:83:"1228:pbz-gpb-3on86o6qqnn76p33q030333331o49n2oq055n06q-nqq_hcqngr_crefba'f_fpurqhyrq";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:58:"1228:pbz-gpb-709n23220s2p3q64q1r1q6q18p4q5280s8q82spn-anzr";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-gpb-4193018s2r723so8pp87n51535457oo114pqq240-pbzcrgrapl_rinyhngvba";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:59:"1228:pbz-gpb-7r13oq176s89n12s0o614o55ssp19p14515rs920-gbcvp";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:59:"1228:pbz-gpb-70440046n3qp2r079s23rr1p57qsn76669o732nn-abgrf";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:74:"1228:pbz-gpb-q38r9o888r8o481rrrn6qn394q506s30qqs68n32-genvavat_vafgvghgvba";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:70:"1228:pbz-gpb-40100rsr9638499455ns4p0585rpn4r7rno50537-genvavat_shaqref";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:67:"1228:pbz-gpb-pn9n10q19n7p4q93qp35pr76oosoors2550q0s7p-prhf_cebivqrq";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:60:"1228:pbz-gpb-onr7q5or70820rq56467oq9n63744r23o47oq711-fgnghf";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:62:"1228:pbz-gpb-n3p686r711r4720s99o4562oo3qonnr7no658ps2-pngrtbel";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:64:"1228:pbz-gpb-47r94p821846qsoo5o342s96qo92rqnso20554rq-ergenvavat";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:63:"1228:pbz-gpb-1798o3on42rr08rn09q9720o2q9p0181noosr3r4-pbzcyrgrq";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:66:"1228:pbz-gpb-5oon095984r657o143o12ron8n2768n9475084o7-erdhrfg_qngr";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:64:"1228:pbz-gpb-ss7513853508r7p6r3nn07908qs2n450n026ro88-rinyhngvba";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:66:"1228:pbz-gpb-343959n43709np3ssrp6703or560025r42q26689-erdhrfgrq_ol";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:62:"1228:pbz-gpb-5s97s8775628r86310829no9r8p465258no92n5r-vafgnapr";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:58:"1228:pbz-gpb-5o6825q3p67n35898o7o65sq986n7sr6pn47771q-fvgr";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:80:"1228:pbz-gpb-6491pq1q63ns80n4pq74s939no8840n82p82pps5-znkvzhz_ahzore_bs_fghqragf";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:65:"1228:pbz-gpb-452o3995400q48r4r14p100051092499q9r4s608-vafgehpgbef";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:64:"1228:pbz-gpb-9q7no1n557965or0rnr6205p2q860p45n3rnsp11-fgneg_qngr";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:62:"1228:pbz-gpb-84o1478125890onq1pp4o36q6q3781773o3sqr5n-raq_qngr";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:62:"1228:pbz-gpb-q219p68101s532qr10nqq2ps42so9qorpn73q3or-ybpngvba";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gpb-12q1n54r2309275onp8n111n305o2r7823p8qo88-rqvg_gur_genvavat_pbhefr_erdhr";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:60:"1228:pbz-gpb-0ns9q1q9q310211871o6s58r15213sq919r42s83-f_ba_f";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:65:"1228:pbz-gpb-pr350s5s5179s4n510p839986qs2872qqr03nsno-rknz_erfhyg";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-gpb-084n211p4pp93o5qpn577q83n42n4nq195993p9n-erpbeq_na_rknz_erfhyg";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gpb-no3snr31815975r54p97r3o18n0s433on12q5117-ivrj_gur_genvavat_pbhefr_pngrt";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gpb-p510ps420433792n2n568no0p047525s0579474s-rqvg_fbzr_yvfgf_nffbpvngrq_jvg";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gpb-24psnq74q5p9s3p272946psop872189424q0oq68-ivrj_fbzr_yvfgf_nffbpvngrq_jvg";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gpb-210n3979060q019no98p3sqpsq8nss929rqospso-rqvg_nyy_yvfgf_nffbpvngrq_jvgu";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gpb-2ssonrq81s19r2444n028n8514q288oosp8o0q98-ivrj_nyy_yvfgf_nffbpvngrq_jvgu";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:76:"1228:pbz-gpb-q7s15nn53o0n5163p18r8521991830qp8qrsrpr3-qngr_gb_erghea_gb_jbex";a:3:{i:0;R:21806;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-grk-o2ss5496o15996p37o7261552q74o3r15o8p5nro-rknz_erfhygf_sbe_genvavat_pbhe";a:3:{i:0;s:20:"out-ihris-common-tex";i:1;R:21167;i:2;R:21168;}s:66:"1228:pbz-grk-6006oo2n5o4q00700p0oo68rpp1ooop2r1sr37pp-rknz_erfhygf";a:3:{i:0;R:21885;i:1;R:21167;i:2;R:21168;}s:69:"1228:pbz-grk-5q3q9837831s6n8soo15898p24q3nn679p0p05q9-cnffvat_fpber_q";a:3:{i:0;R:21885;i:1;R:21167;i:2;R:21168;}s:79:"1228:pbz-grk-nr9930334sop1nnp330s07n76q7o54s3o4qpnsn6-genvavat_pbhefr_rknz_glcr";a:3:{i:0;R:21885;i:1;R:21167;i:2;R:21168;}s:74:"1228:pbz-grk-q31779roo595s99482p93080ps0qo42po3o628r9-genvavat_pbhefr_rknz";a:3:{i:0;R:21885;i:1;R:21167;i:2;R:21168;}s:59:"1228:pbz-grk-70440046n3qp2r079s23rr1p57qsn76669o732nn-abgrf";a:3:{i:0;R:21885;i:1;R:21167;i:2;R:21168;}s:69:"1228:pbz-grk-87p586p4o0r521q5on557n37opsospo64rp7736q-rinyhngvba_qngr";a:3:{i:0;R:21885;i:1;R:21167;i:2;R:21168;}s:63:"1228:pbz-grk-8rq8p59q472197512254825q87ro86q910653rss-rknz_glcr";a:3:{i:0;R:21885;i:1;R:21167;i:2;R:21168;}s:59:"1228:pbz-grk-489s4877244n299131q309s0pn10733p1n41251p-fpber";a:3:{i:0;R:21885;i:1;R:21167;i:2;R:21168;}s:82:"1228:pbz-grk-101o2sos77366qn5181rsq90n9n755612475702o-cnffvat_fpber_sbe_svany_rknz";a:3:{i:0;R:21885;i:1;R:21167;i:2;R:21168;}s:82:"1228:pbz-grk-8ss8878o1289385665n4q31qn4n491nn46r366q5-genvavat_pbhefr_rknz_erfhygf";a:3:{i:0;R:21885;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-grk-r8632488o28p4472o52370799q61s2r2328n4375-rinyhngr_n_crefbaf'f_fpurqhyrq";a:3:{i:0;R:21885;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-grk-no24n32n87024nn594nr0665n06p54788qq4q342-ivrj_n_crefbaf'f_fpurqhyrq_gen";a:3:{i:0;R:21885;i:1;R:21167;i:2;R:21168;}s:58:"1228:pbz-gva-69oq4rs9soq0894n22759p3766o859qrsoqrqop8-ivrj";a:3:{i:0;s:20:"out-ihris-common-tin";i:1;R:21167;i:2;R:21168;}s:65:"1228:pbz-gva-0ro5rq506r4923p28q7s4n8nn69rsr99o3nq75q1-vasbezngvba";a:3:{i:0;R:21899;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-gva-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;R:21899;i:1;R:21167;i:2;R:21168;}s:77:"1228:pbz-gva-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:21899;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gva-qnqoq6ss4nsq197o816r3380qnnpr2p57sq021oq-fryrpg_nabgure_genvavat_vafgvg";a:3:{i:0;R:21899;i:1;R:21167;i:2;R:21168;}s:74:"1228:pbz-gva-q38r9o888r8o481rrrn6qn394q506s30qqs68n32-genvavat_vafgvghgvba";a:3:{i:0;R:21899;i:1;R:21167;i:2;R:21168;}s:65:"1228:pbz-gva-702852n3o282opqs2sp2p70q7q8776p6944607p5-ivrj_erpbeq";a:3:{i:0;R:21899;i:1;R:21167;i:2;R:21168;}s:73:"1228:pbz-gva-n34o69sp46r7n278ps65p58oo347qr6560so046s-pbagnpg_vasbezngvba";a:3:{i:0;R:21899;i:1;R:21167;i:2;R:21168;}s:82:"1228:pbz-gva-n65qorqq428355113rs661ososr584q931q5r74s-erghea_(qb_abg_fnir_punatrf)";a:3:{i:0;R:21899;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gva-nn36np930q216or62r9sqo563210o6q373o735qq-fryrpg_nabgure_genvavat_shaqre";a:3:{i:0;R:21899;i:1;R:21167;i:2;R:21168;}s:69:"1228:pbz-gva-1p0r11s2ns6n82p4017692o88380p8p081245793-genvavat_shaqre";a:3:{i:0;R:21899;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gva-q9p42s6por4o4o7srrrs4o501323o821q965104n-rqvg_gur_genvavat_vafgvghgvbaf";a:3:{i:0;R:21899;i:1;R:21167;i:2;R:21168;}s:83:"1228:pbz-gva-83o2r0118o622o4n8rn1597oq0825971ss084192-rqvg_gur_genvavat_shaqre_yvfg";a:3:{i:0;R:21899;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gva-pnrr9p979ps5rq64nq0p8s703o5q4ppsq6315236-ivrj_gur_genvavat_vafgvghgvbaf";a:3:{i:0;R:21899;i:1;R:21167;i:2;R:21168;}s:83:"1228:pbz-gva-3o892oq6q8rqp2s09so097s46q2qp28852s8n54r-ivrj_gur_genvavat_shaqre_yvfg";a:3:{i:0;R:21899;i:1;R:21167;i:2;R:21168;}s:61:"1228:pbz-gva-04n212215rs9sos686q280802ro81rr7n6r681pq-pbasvez";a:3:{i:0;R:21899;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gfp-276pp3065783r8q502sr35np4pns2s7s77sr8894-rinyhngr_n_crefba'f_pbzcrgrapv";a:3:{i:0;s:20:"out-ihris-common-tsc";i:1;R:21167;i:2;R:21168;}s:66:"1228:pbz-gfp-noo1p7286s4032opnn1on6q2q26s1osor99ns853-pbzcrgrapvrf";a:3:{i:0;R:21916;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gfp-80sonssop4ss5s29o5805s1qo5o496q0np5sopsp-genvavat_pbhefr_pbzcrgrapl_rin";a:3:{i:0;R:21916;i:1;R:21167;i:2;R:21168;}s:82:"1228:pbz-gfp-2spso3r144s68021q38121pq956qsnq8nsqnrr3n-rinhyngr_pbhefr_pbzcrgrapvrf";a:3:{i:0;R:21916;i:1;R:21167;i:2;R:21168;}s:59:"1228:pbz-gfp-70440046n3qp2r079s23rr1p57qsn76669o732nn-abgrf";a:3:{i:0;R:21916;i:1;R:21167;i:2;R:21168;}s:69:"1228:pbz-gfp-87p586p4o0r521q5on557n37opsospo64rp7736q-rinyhngvba_qngr";a:3:{i:0;R:21916;i:1;R:21167;i:2;R:21168;}s:64:"1228:pbz-gfp-ss7513853508r7p6r3nn07908qs2n450n026ro88-rinyhngvba";a:3:{i:0;R:21916;i:1;R:21167;i:2;R:21168;}s:64:"1228:pbz-gfp-05r59oo0rq360np5pspp85pqo8n3184r0442743s-pbzcrgrapl";a:3:{i:0;R:21916;i:1;R:21167;i:2;R:21168;}s:75:"1228:pbz-gfp-0573n4376899sn399p17p6r92q8o44p72767qo3r-pbzcrgrapvrf_cebivqrq";a:3:{i:0;R:21916;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gfp-6o6284147oo08485qr71334p8qo61n0321714968-guvf_pbhefr_qbrf_abg_cebivqr_n";a:3:{i:0;R:21916;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gfp-r8632488o28p4472o52370799q61s2r2328n4375-rinyhngr_n_crefbaf'f_fpurqhyrq";a:3:{i:0;R:21916;i:1;R:21167;i:2;R:21168;}s:84:"1228:pbz-gfp-no24n32n87024nn594nr0665n06p54788qq4q342-ivrj_n_crefbaf'f_fpurqhyrq_gen";a:3:{i:0;R:21916;i:1;R:21167;i:2;R:21168;}s:62:"1228:pbz-hzn-r2645no907rsp033o599672n7nn839oo39q52874-hhvq_znc";a:3:{i:0;s:20:"out-ihris-common-uma";i:1;R:21167;i:2;R:21168;}s:65:"1228:pbz-hzn-pn4ps3sppr8s53n7os03190s7rn7po8811ss07p1-znccrq_sbez";a:3:{i:0;R:21929;i:1;R:21167;i:2;R:21168;}s:66:"1228:v2pr-nqzva-792p81n4psqpo5o45q688po03p2sq2r816s86q44-pbasvther";a:3:{i:0;s:20:"out-ihris-i2ce-admin";i:1;R:21167;i:2;s:20:"out-ihris-i2ce-0-all";}s:74:"1228:v2pr-nqzva-508pssp4026so664n00943082n5op80q0312o123-ninvynoyr_zbqhyrf";a:3:{i:0;R:21932;i:1;R:21167;i:2;R:21933;}s:87:"1228:v2pr-nqzva-s4s6s5q650po0o7opp8p40p23034n9s5969rorss-urer_lbh_znl_fryrpg_zbqhyrf_gb";a:3:{i:0;R:21932;i:1;R:21167;i:2;R:21933;}s:63:"1228:v2pr-nqzva-20063nq9053289prpnn20nr630rq2qq758282n07-ranoyr";a:3:{i:0;R:21932;i:1;R:21167;i:2;R:21933;}s:87:"1228:v2pr-nqzva-n7n098p10q8np56q84p0328nnp55786qq225n6r2-ohggba_ng_gur_obggbz_bs_gur_cn";a:3:{i:0;R:21932;i:1;R:21167;i:2;R:21933;}s:86:"1228:v2pr-nqzva-n3qooq531nn6902pp4ro24685p6o7o333q4op916-yvax_nffbpvngrq_gb_gurz_vs_vg";a:3:{i:0;R:21932;i:1;R:21167;i:2;R:21933;}s:68:"1228:v2pr-nqzva-3s50pro57o5o30nq882r6o601320so6980p011or-fho-zbqhyrf";a:3:{i:0;R:21932;i:1;R:21167;i:2;R:21933;}s:87:"1228:v2pr-nqzva-or7ss38o861633q6425n2893rnr61356n8339812-yvax_be_ba_gur_qbja_neebj_vs_c";a:3:{i:0;R:21932;i:1;R:21167;i:2;R:21933;}s:73:"1228:v2pr-nqzva-po3248q86qrrsqn5o289oq4nrsss6s8959nonssp-znva_zbqhyr_zrah";a:3:{i:0;R:21932;i:1;R:21167;i:2;R:21933;}s:87:"1228:v2pr-nqzva-9p5p8nn5373s591p33ssnp5p60q165ps5ps9r28n-guvf_zbqhyr_unf_ab_pbasvthengv";a:3:{i:0;R:21932;i:1;R:21167;i:2;R:21933;}s:87:"1228:v2pr-nqzva-9rq4063n5n7n73n356595nqpn07n7rq088q64o42-guvf_zbqhyr_unf_ab_pbasvthengv";a:3:{i:0;R:21932;i:1;R:21167;i:2;R:21933;}s:78:"1228:v2pr-nqzva-83926rr8r1ss920n8o53n6q3o42456ors3nn20sr-pna_pbasvther_zbqhyrf";a:3:{i:0;R:21932;i:1;R:21167;i:2;R:21933;}s:71:"1228:v2pr-nqzva-o8or3q1264310p3o8p848q4o90q5206179n40pp4-nqzvavfgengvba";a:3:{i:0;R:21932;i:1;R:21167;i:2;R:21933;}s:64:"1228:v2pr-nqzva-2qn600os9404843107n9531694s654r5662959r0-irefvba";a:3:{i:0;R:21932;i:1;R:21167;i:2;R:21933;}s:67:"1228:v2pr-nqzva-5q73pp30510p739rq68p572p5199r106q325o648-perngrq_ol";a:3:{i:0;R:21932;i:1;R:21167;i:2;R:21933;}s:64:"1228:v2pr-nqzva-o37456p4530or810qp040s50qn72rqn09nqqso0n-pbagnpg";a:3:{i:0;R:21932;i:1;R:21167;i:2;R:21933;}s:63:"1228:v2pr-nqzva-s64pq8r32s5np7553p150oq05q6s2252oo73s68q-nhgube";a:3:{i:0;R:21932;i:1;R:21167;i:2;R:21933;}s:68:"1228:v2pr-nqzva-q99nq8rq301s25104oqr85s000752278579s98s2-fho-zbqhyrf";a:3:{i:0;R:21932;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-oce-32040nrq4osrs90202pnrr6597qp62n69ns97o63-onpxtebhaq_cebprff_fgnghf_ivrj";a:3:{i:0;s:18:"out-ihris-i2ce-bpr";i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-oce-34o6s2qprq129267s8s40ns68o92800438q790so-ybttrq_bhchg_sbe_onpxtebhaq_ce";a:3:{i:0;R:21952;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-oce-0ro8o98oo6215n280529sq3475o012n0n6n5o3os-pna_ivrj_onpxtebhaq_cebprffrf";a:3:{i:0;R:21952;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-psb-o1821nooqs81436r29n91930p00308nq9oqr40ps-nyybjf_nqzvavfgrevat_bs_pnpurq";a:3:{i:0;s:18:"out-ihris-i2ce-cfo";i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-psb-04pq5ppp5n8366395964np55s14s42r9q28rsn23-ynfg_trarengrq";a:3:{i:0;R:21956;i:1;R:21167;i:2;R:21933;}s:74:"1228:v2pr-psb-68874o4178o7s1720rpp131q5449822r5482r39p-perngr_hcqngr_pnpur";a:3:{i:0;R:21956;i:1;R:21167;i:2;R:21933;}s:77:"1228:v2pr-psb-osr7399n48o71o8537on8osq1n83or85ps3p989p-sbepr_pnpur_trarengvba";a:3:{i:0;R:21956;i:1;R:21167;i:2;R:21933;}s:72:"1228:v2pr-psb-6352o10971083475425srs3r7060nsq6p3srq25r-qebc_pnpurq_gnoyr";a:3:{i:0;R:21956;i:1;R:21167;i:2;R:21933;}s:80:"1228:v2pr-psb-sn90rno4o9o509s1p3pq00ro5s67o179q21290qn-bs_nyy_sbezf_vs_abg_fgnyr";a:3:{i:0;R:21956;i:1;R:21167;i:2;R:21933;}s:59:"1228:v2pr-psb-0n088o3115056rs6npq3no4o406p823r1724r216-qebc";a:3:{i:0;R:21956;i:1;R:21167;i:2;R:21933;}s:74:"1228:v2pr-psb-7024s2s11r2700o93qn3r738pr573rpo342p2s5o-pnpurf_bs_nyy_sbezf";a:3:{i:0;R:21956;i:1;R:21167;i:2;R:21933;}s:67:"1228:v2pr-psb-8qn00ppp99o0s2n0142849q84oqpnono201046ss-pnpurq_sbezf";a:3:{i:0;R:21956;i:1;R:21167;i:2;R:21933;}s:66:"1228:v2pr-psb-461r2pr884p975o1636s448n670q95801s4124n7-pnpur_sbezf";a:3:{i:0;R:21956;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-psb-553q54op223p68s4411s005r4793nqqn547rop9p-pnpur_nyy_sbezf_va_gur_fryrpgr";a:3:{i:0;R:21956;i:1;R:21167;i:2;R:21933;}s:60:"1228:v2pr-psb-50338o3o242845r21n0npr9nr9684283q945so52-pnpur";a:3:{i:0;R:21956;i:1;R:21167;i:2;R:21933;}s:64:"1228:v2pr-psb-9399p82o16npqo0709s279o5n92341rn21p989p6-nyy_sbezf";a:3:{i:0;R:21956;i:1;R:21167;i:2;R:21933;}s:68:"1228:v2pr-psb-605473828orro6rnps985227on2n189ss98r3461-sbepr_pnpuvat";a:3:{i:0;R:21956;i:1;R:21167;i:2;R:21933;}s:74:"1228:v2pr-psb-825o78467ppo7p5o9q8no588r52360412635q4qo-rkcbeg_pnpurq_sbezf";a:3:{i:0;R:21956;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-psb-6qr4r15qn579orq102701q96o8o08465r2np3n41-rkcbeg_nyy_pnpurq_sbezf_va_gur";a:3:{i:0;R:21956;i:1;R:21167;i:2;R:21933;}s:72:"1228:v2pr-psb-nn3rnn3rs28q51rq31roq934q53p0ns75s33q4n2-zbqvsvpngvba_qngr";a:3:{i:0;R:21956;i:1;R:21167;i:2;R:21933;}s:79:"1228:v2pr-psb-68rpsqn93sp932031s351pn54812r68p2q0nro1o-ranoyr_omvc2_pbzcerffvba";a:3:{i:0;R:21956;i:1;R:21167;i:2;R:21933;}s:74:"1228:v2pr-psb-7303989nqo9r9q7no33sqo997pp2sqn253o1n622-perngr_rqvg_cebsvyr";a:3:{i:0;R:21956;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-psb-no8n7o78q947qo2r903s347p29259q91spp522p7-perngr_n_cebsvyr_be_rqvg_na_rk";a:3:{i:0;R:21956;i:1;R:21167;i:2;R:21933;}s:75:"1228:v2pr-psb-010n91146904295n6910pn1r0n9699918qq92p83-perngr_n_arj_cebsvyr";a:3:{i:0;R:21956;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-psb-r5497706504so51q253rnpp9rs9r01914q911p45-znantr_pnpuvat_bs_vaqvivqhny_s";a:3:{i:0;R:21956;i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-psb-1260333qon838r325s2067qqq6on05o93q924n0o-qrsvar_cebsvyr";a:3:{i:0;R:21956;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-psb-767n4rosp685029pq64996onp3o22nonr9rq1o11-qrsvar_n_cebsvyr_bs_sbezf_gb_r";a:3:{i:0;R:21956;i:1;R:21167;i:2;R:21933;}s:67:"1228:v2pr-psb-so32p90q64p5ss151646s8n61r6q3n224n4958q9-cebsvyr_anzr";a:3:{i:0;R:21956;i:1;R:21167;i:2;R:21933;}s:78:"1228:v2pr-psb-446p35113743855snq9s984o268281qp47382000-fryrpg_sbezf_va_cebsvyr";a:3:{i:0;R:21956;i:1;R:21167;i:2;R:21933;}s:71:"1228:v2pr-psb-o2q38p8q20oss324nq8o41r3517r01r09p3sosr4-fryrpg_n_cebsvyr";a:3:{i:0;R:21956;i:1;R:21167;i:2;R:21933;}s:67:"1228:v2pr-pcv-22n8765r4n25o37pnq3721ssqo0n5q65s2rr31r4-pubfra_pbybe";a:3:{i:0;s:18:"out-ihris-i2ce-cpi";i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-pcv-530q58oq38p6p59os4285662np3sr36r0rnn1347-pubbfr_n_pbybe";a:3:{i:0;R:21984;i:1;R:21167;i:2;R:21933;}s:63:"1228:v2pr-pcv-283rr46559q2n344r5r8oq6r5r5n87ro900sn3o5-(qrsnhyg";a:3:{i:0;R:21984;i:1;R:21167;i:2;R:21933;}s:59:"1228:v2pr-per-5301648qps6o53prsp9rq52999nnn92q4603pnr0-rqvg";a:3:{i:0;s:18:"out-ihris-i2ce-cre";i:1;R:21167;i:2;R:21933;}s:62:"1228:v2pr-per-qs174n3s2snn31814r06540npqn7ns8825403snp-ranoyrq";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-per-p1npss21o546s4o9q5ors20242o46318863p0587-jvgu_inyhrf_va";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:68:"1228:v2pr-per-1n3887op13980p583r39362sr5401r78o98q0qr0-yvzvg_bcgvbaf";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:67:"1228:v2pr-per-pp3832473s0snqq93r7qo6on18539qq5opr2q5p1-yvax_bcgvbaf";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:61:"1228:v2pr-per-31341p6s0p7ns677sso8snqpo92038r8np2o6193-urnqre";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-p4s679672psn9189924nop7n553rs863o9319q90-gur_urnqre_grkg_juvpu_vf_qvfcy";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:65:"1228:v2pr-per-rrp2r4rq180065q82838r59q744622qs4qsrrr4r-yvax_svryq";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-29nqr6986p19pr120p17sors81n16726692np994-gur_qngn,_vs_nal,_jr_nccraq_gb";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:59:"1228:v2pr-per-6rrs6648406p333n4035pq5r60q0os2rps2606q7-abar";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:74:"1228:v2pr-per-r09o6227074p817q6s63os307748o3536s015891-ercbegf_ol_pngrtbel";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-9o23r0051pnrr5p1143o4301q8q5n20s480q7q11-perngr_n_arj_ivrj_sbe_n_ercbeg";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:67:"1228:v2pr-per-rpq79067094r1nr04419n174498prnn58849rp4n-anzr_bs_ivrj";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:66:"1228:v2pr-per-55s8rop805r65o5o71qqnsqnr390r3or2opq69ns-qrfpevcgvba";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:61:"1228:v2pr-per-rr45p30326o750387589752p0s75r1qq87qqp7r4-ercbeg";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:65:"1228:v2pr-per-31s34n6777o8n1r6rp5spq7525ps675ro8300756-fryrpg_bar";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:77:"1228:v2pr-per-n2r011o80199580842s0s4pq681np4o6q81os9q4-phfgbz_ercbegvat_gbbyf";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:75:"1228:v2pr-per-rs7np27451r99n20s27o3434s6n93o781r020o4r-ercbeg_eryngvbafuvcf";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-s11p0r4r8s60577n0or39o33por5no3qp2o63o82-qrsvar_eryngvbafuvcf_orgjrra_g";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:62:"1228:v2pr-per-88op3sr3qnqqrr139809q036s18o985sor165957-ercbegf";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-np80o42nooro8pqrqp7o87n2419pq5757222921n-perngr_naq_fnir_ercbegf_ol_fry";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:67:"1228:v2pr-per-4494377254676ppr03s76snqn525qo6349qnsoq0-ercbeg_ivrjf";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-per-76r540p2onn24o239s12npp241p758p0oprp1866-ivrj_fnirq_ercbegf_naq_perngr";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:63:"1228:v2pr-per-rrq6oso41051rq5o74447340s3p2r29q11r99n7p-erdhverq";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-744por2509n30604r174q0s0poq373q0156s3p3o-erdhver_gung_gur_qngn_sbe_guvf";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:70:"1228:v2pr-per-11o6o628n4187788562sro3r461956o65s1p8s50-ercbegrq_svryqf";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-8120920pqr999ss32q42820229o9q2422o34o7s0-pubbfr_bcgvbaf_gb_yvzvg_erfhyg";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:75:"1228:v2pr-per-843869q609o6631s5o1245nr9903201qqoq7s020-fnir_nf_qrsnhyg_ivrj";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:68:"1228:v2pr-per-pnosn4882ns0o513952prp113216sps97sp66q56-eryngrq_ivrjf";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:60:"1228:v2pr-per-p326n4660o674q2s6rn82687n1r1nonr2337541s-svryq";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-n4qo16754226o72ssr476n7o78067853888705o2-ranoyrq_purpx_gb_ranoyr_guvf_s";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-09qr5s278qn9ps5sq1q2p3p17n2692ps73242o3r-pubbfr_n_zrgubq_gb_pbyyrpg_(nt";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:58:"1228:v2pr-per-sp9pr14o28p6s2p3o72pns056pn604o2o96s7q2o-fhz";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:62:"1228:v2pr-per-n8qs2srp28q8948n0326722029p7492o88rr4sor-znkvzhz";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:62:"1228:v2pr-per-5q398rrs3rpp3rn6n161734581q0oq3q920o64q8-zvavzhz";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:62:"1228:v2pr-per-15s86p051rps0o64r5s8pqp8p689552s42595942-nirentr";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:67:"1228:v2pr-per-0s98r7342ssn74p035p3878qsp6122qsnpo4373s-gbgny_ahzore";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-per-q8969273940o1ps778n3so45n2o043714rro2qq2-gbgny_qvfgvapg";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-0053472948986rn0r644qn5258so485p21s5628p-orsber_lbh_pna_perngr_(be_rqvg";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:61:"1228:v2pr-per-9o7p68n918o17ro053809o198q7p9nosp142s30n-perngr";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-rp8onq0qn99349os50257no2866826q789ss3221-n_ercbeg_eryngvbafuvc_juvpu_qr";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:62:"1228:v2pr-per-psq6869oorq115rs22o29n444sr0rp3o10p02n1s-whzc_gb";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:65:"1228:v2pr-per-58r61698o0rrr4qn761nq650nno5446q492or492-fbegvat_ol";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:66:"1228:v2pr-per-53610r2552s934465450qqn76nsq7600n1p1sp42-ercbeg_ivrj";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:59:"1228:v2pr-per-69oq4rs9soq0894n22759p3766o859qrsoqrqop8-ivrj";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-sq512q0q48670nso7nqss5os22n7rp271s9150s8-fryrpg_gur_svryqf_naq_nal_ntte";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:80:"1228:v2pr-per-838968rrsops820o4q0r0279418o275r8nn98803-ercbegrq_ivrj_vasbezngvba";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:67:"1228:v2pr-per-8q6o34815on43q254716rno5nn768o8p7nn6q3s1-qvfcynl_anzr";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-057051226889465o513n09rp0r5ror4840q82268-n_fubeg_qrfpevcgvir_anzr_bs_gu";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-q22q39o92o71213n104502p00r24491ops35o46p-n_ybatre_qrfpevcgvba_bs_guvf_e";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:68:"1228:v2pr-per-414615o60p64s8o40806pp023n7q444pq3404o95-vapyhqr_gbgny";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-569o437292o64so87pq05r58s98p8749ps5nq36q-vapyhqr_n_gbgny_ahzore_bs_ebjf";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:71:"1228:v2pr-per-94rn8p4n55q905n3p347081nr40901n82qo256os-ninvynoyr_svryqf";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-386r53136s37r178r13opnr393npps155rrp2q8s-urer_lbh_znl_frg_gur_urnqre_va";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:81:"1228:v2pr-per-9o7n28q162so4o3p73pn476p52p1os71p9p8r3n8-svryqf_qvfcynlrq_va_ercbeg";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:67:"1228:v2pr-per-p7874nnn0sno4rrss4s2qo2rp37q5s5n2qrn859n-qvfcynl_anzr";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-5oq777q4s1p68nsp25822p165593837p762r4p77-n_anzr_sbe_gur_ercbeg_juvpu_vf";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:63:"1228:v2pr-per-n3p686r711r4720s99o4562oo3qonnr7no658ps2-pngrtbel";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:81:"1228:v2pr-per-4q3033p503onn308nrn171q6s8p094p4o4np06s9-n_pngrtbel_sbe_guvf_ercbeg";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:82:"1228:v2pr-per-6s66pp6ro49o90n1spnp33pq6r06no81983p0os5-n_qrfpevcgvba_bs_gur_ercbeg";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:66:"1228:v2pr-per-s662ssq77po6n8n4r0rrsr88o86rs337r9op749o-yvzvg_fglyr";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:76:"1228:v2pr-per-927s257p3q27r4so2p98n8s6563rss81n0q8p54q-gur_glcr_bs_gur_yvzvg";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:67:"1228:v2pr-per-nsnr637o91p2nnp679720064p24r210465r3o0p8-yvzvg_urnqre";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-per-7o7o54q221p88ns1803041o54q081qp186p5p808-gur_qrfpevcgvba_bs_guvf_yvzvg";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:71:"1228:v2pr-per-qq1s89r21918p489rpp6555ro020s9712p87703n-rqvgvat_ynathntr";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:74:"1228:v2pr-per-20q3n5p7458rp085ro3726p3181o21o38453948r-perngr_n_arj_ercbeg";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:64:"1228:v2pr-per-1q25542pr01o94s244n760onop6999qnso7p97os-fubeganzr";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-20rs9q63550p244n64pr66rns9q38sqn6np14238-n_havdhr_fubeg_anzr_hfrq_gb_er";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:74:"1228:v2pr-per-7o2s364223qq658297ps8o2or4r528s84n7p9097-ercbeg_eryngvbafuvc";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-7319p392pp5p2opo7n2nq29qr33n05826r7sq0q1-gur_eryngvbafuvc_gung_guvf_erc";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-per-s77o0q2qpq8sqq2noor98ps23q392oq4r08q11s2-gur_pngtrtbel_sbe_guvf_ercbeg";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:83:"1228:v2pr-per-s0693nqp16qn0q06986q32qn02r500s660219993-n_qrfpevcgvba_bs_guvf_ercbeg";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-per-3432n92r0p143n37974pn104oso8qnq40ro614p8-ercbeg_qrgnvyf";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-per-6q8337r03p98s62n913893357sn0226p69r0r6s9-pubbfr_naq_fcrpvsl_svryqf_lbh";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:76:"1228:v2pr-per-n5sq638442p8765no7sp0on9qq8q7755p4q0qp9q-rkvfgvat_ercbeg_ivrjf";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-per-92q4n2q45656nqo916804qo1540343635qn21sp9-nqq_n_arj_ivrj";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:76:"1228:v2pr-per-19r0n239q785s848qoo3sq55qp5qn9q0op0rq1pq-rqvg_rkvfgvat_ercbegf";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:63:"1228:v2pr-per-sp45s9o7n9n6r8o48s0r28821rp1981804qq1ro6-trarengr";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:72:"1228:v2pr-per-95nno4n2r83ss592404n501o6o8972pn194q6ps5-trarengr_(sbeprq)";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:58:"1228:v2pr-per-93rs0qq827103681sprr453o78or2ss14r1n261q-gur";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:61:"1228:v2pr-per-n27297oqr9732s2r73sop06qo2611764r3nq9855-ercbeg";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-41017272os3spq5r41op7889o3pp290673sr6943-guvf_ercbeg_vf_onfrq_ba_gur_er";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:73:"1228:v2pr-per-n2739741p2762p496n926o37q0q4s254no337o8s-ercbeg_vasbezngvba";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-per-975pp7s4o77260os7pnp4p2pp41n25pq0sn126ns-ercbegrq_sbezf";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:73:"1228:v2pr-per-353355rq3p3on8rs9864n692n84o9s0o761pr2rp-ercbegrq_shapgvbaf";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-0o862301584sp00nqn595pqn6s825925r342p9sq-nyybjf_zvavzny_npprff_gb_gur_p";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-per-5980660p9256894rr85qss84q96o35q1rp9on23q-nyybjf_qryrgvba_bs_qngn_nobhg";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-012n6op8694s16o1r7so49r64424o90r9r40n0rn-nyybjf_npprff_gb_gur_phfgbz_er";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-r8qo6p98q60062on7s9ss89q03691s2ppp4ns5o2-nyybjf_npprff_gb_gur_phfgbz_er";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-3n72noqn14594q561n4qo82779s45psn7857390p-nyybjf_ivrj_bs_gur_phfgbz_ercb";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-816r33pnr1s25q968r9os82o84670sqn1sp43972-nyybjf_rqvgvat_bs_gur_phfgbz_e";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-s8qpsq1p820p2p8q1n934q2qs47p89509qprq0n0-nqzvavfgngbe_sbe_phfgbz_ercbeg";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-per-0sn6595ss8ns8n9rrn6s37o1p15r6o5s6n8psq6o-perngr_ercbegf";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:68:"1228:v2pr-per-7n2r73q62pns4212nr267q511nr14p1p76086746-erfhygf_sbhaq";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-q4nq83ppp09q3702976543q63281s0956r340q5n-reebe_ab_qngn_jnf_sbhaq_gung_z";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-0013q9s3q3219o6n28r95716861222640o1150n8-nyybjf_rqvgvat_bs_gur_phfgbz_e";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-8q35p3783r0ps66o52r28299opnn0p75s1612q9q-nyybjf_rqvgvat_bs_gur_phfgbz_e";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:75:"1228:v2pr-per-q69qn42q1p0rqo4s50nn4q486o18pno4os8r882s-rqvg_qvfcynl_bcgvbaf";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:76:"1228:v2pr-per-2580rpn07217s2s4p6s93906nn0q1326qn69p84p-pyrne_qrsnhyg_qvfcynl";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:65:"1228:v2pr-per-1prpr2731r28sor41q042o114q205npo6o616rp2-vapernfvat";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:65:"1228:v2pr-per-1r367365r32n2r193nr5897n85n34q647rq0p389-qrpernfvat";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-21s4341596o4772o403r02733p8nn07329516o66-lbh_arrq_gb_fcrpvsl_n_ercbeg_g";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-q4rn0342ss8o1p3n32pp8ss308813673555360p8-lbh_fcrpvsvrq_na_vainyvq_ercbe";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-per-350oqp7p0n6norsnos6p78163qr6s7n640noq8rq-lbh_qb_abg_unir_crezvffvba_gb";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-6s9539pp78926203q28sp1o29286p28q26066nq3-pbhyq_abg_svaq_nal_inyvq_qvfcy";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:68:"1228:v2pr-per-1313q716s41o87r31q9qs7s083r395275r172n7r-f_yvaxrq_ba_f";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-per-818r52009qsss33srrq5s1077s4659022960qoq2-f_yvaxrq_ba_f_nf_n_cnerag_sbe";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-per-s5q3r2q120980p923q3551nq6o3nn28085n81s3p-f_yvaxrq_ba_f_nf_n_puvyq_sbez";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-1953988p8rq8p262347286q5813n16366nnr7p6r-ab_fubeganzr_fcrpvsvrq_sbe_gur";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-6464168o4575n0or69s1pn80o92poq5n936p5osn-vainyvq_fubeganzr_fcrpvsvrq_sb";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-nq124sq889npo02nnrq7snr872802p21065q2027-fubeganzr_fcrpvsvrq_sbe_gur_er";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-6qq1q7n40rr2qp6r2rrr5p5246s1p262574n04oo-ab_ercbeg_eryngvbafuvc_fcrpvsv";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-per-7o2r0o61sp1n844rr2o849332poo3913so6o4qsq-fcrpvsvrq_ercbeg_eryngvbafuvc";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-607n35o76r7s731ro9p443291n6561988qn96152-lbh_qba'g_unir_npprff_gb_qryrg";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:80:"1228:v2pr-per-p78nss5oss55ss0s7818pp7n4r422q69p82osqrq-vainyvq_cngu_sbe_qryrgvba";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:82:"1228:v2pr-per-577413o76634n1q8402q4862o8n0sq4627183n5s-hanoyr_gb_frghc_pnpurq_sbez";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-15257n5p37s7onr4299575os77orn432ss108o49-pbhyq_abg_fnir_qvfcynl_bcgvbaf";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:76:"1228:v2pr-per-o1n2p5p6ro06qr504p94439o7o85p705q468oo9s-fnirq_qvfcynl_bcgvbaf";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:80:"1228:v2pr-per-q30q217428p930o06psrrrq6s3558on5o57pq239-hanoyr_gb_trarengr_ercbeg";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-q7q7s63s5p8nq2252oo7p40482qr4qq8n71p777n-hanoyr_gb_fhpprfshyyl_hcqngr_i";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:81:"1228:v2pr-per-2016pr91933319qspp9oon8r05s852s1782r0n42-fhpprfshyyl_hcqngrq_inyhrf";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-per-9q0o033npo892sp4pp8549o9oro7685rs70rnr57-qbrf_abg_rkvfg";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:60:"1228:v2pr-per-189pp40p2206rr1o649npq5022o1604q4q7spo1n-fgnyr";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:61:"1228:v2pr-per-09srs5q8q9n3p86o2523srs60q512606r7sr0003-snvyrq";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:66:"1228:v2pr-per-qon928s4rpr84o8p361q19595284oso3p79q03sr-va_cebterff";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:64:"1228:v2pr-per-8rrsqq52nq2q9o9oo6nq00qqpq70r1821191o6pq-trarengrq";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:60:"1228:v2pr-per-o25928p69902557o0rs0n628490n3n1768q7o82s-gbgny";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:68:"1228:v2pr-per-p0po913p7243n3n784481q1s709866s547575382-zretr_bcgvbaf";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:73:"1228:v2pr-per-pr7rr42opn981r9519q53059o419np08q2p21r81-zretrq_ercbeg_ivrj";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-per-5qq89q6o24n45o1sn4rs6521987p31no572q6813-ranoyr_cvibgvat_ba_guvf_yvzvg";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:75:"1228:v2pr-per-p3541or21385qp5op2o06ro1p70116ns395r0029-zretr_nabgure_ercbeg";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:70:"1228:v2pr-per-59p32rn68s481oo0o356q5664q514o7173q9p690-zretnoyr_ercbeg";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-per-s932164n3spr76p16q25s36o2364703sss5q1767-ranoyr_zretvat";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-per-6843qrq667379ns3p26os6711109o747nss9qqn7-zretrq_ercbegf";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:66:"1228:v2pr-per-86134n9pnq7n6556p81n8216n4249n32293009ns-fjvgpu_gb_f";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:63:"1228:v2pr-per-364169op457n0q37086566r30r0r70ponq361p03-f_sebz_f";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:68:"1228:v2pr-per-s4n3r76qn7p45onqsor7p6sq8o2p858163758285-abg_trarengrq";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:76:"1228:v2pr-per-68s6q8q842psr91q11p9039qs2r351r4nn623773-nyybj_oynax_ebjf_va_f";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-ooq37172o5p25q299p1po13qn2rrq1p17316q3sp-fryrpg_nqqvgvbany_inyhrf_gb_zn";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:75:"1228:v2pr-per-2r6464o432280q7no4174n5qpq46npr82qs30ooo-ab_nqqvgvbany_inyhrf";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:74:"1228:v2pr-per-r253rs53o884n226n71408996npo70q8r2s60867-ninvynoyr_shapgvbaf";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-p9738122s2987915250747ss34prorrr4873p195-gur_eryngvbafuvc_unf_ab_ninvyn";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:73:"1228:v2pr-per-8rs32864r2p19sp96p015qo52oo168sq7231n5r9-erfhygf_yvzvgrq_ol";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:67:"1228:v2pr-per-q3po4173935pp8nr53s5o3150q33889s9rqqonrr-nccyl_yvzvgf";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:60:"1228:v2pr-per-0424s6r7026sn4op2p4n7043083417315113p79o-gnoyr";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:63:"1228:v2pr-per-08738s6rrs34333p426r9so2p58q5n55999q681s-yvax_hey";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:82:"1228:v2pr-per-3s583721448n0634361o92227r7so05spn24o1s4-gur_(onfr)_hey_sbe_gur_yvax";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:78:"1228:v2pr-per-rr0o54p1208n9snsr37655r1o5sq9oqq6r9109q5-ercbeg_ivrj_crezvffvbaf";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-08n41819o03rrn771q528p58psn0n26s017pno0o-fryrpg_n_gnfx_gb_yvzvg_gur_ivr";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-per-2p491o6s71n58pqnq2o80o3471n477p5750244pq-qb_abg_yvzvg_ivrjvat_bs_guvf_e";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:64:"1228:v2pr-per-q453spr881sn6sq70s093p9o2o1srn7r4819nr6s-yvax_glcr";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:76:"1228:v2pr-per-5p7np07o164s07n2sq2196354o82o7p028nn49s4-gur_glcr_bs_gur_yvax.";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:68:"1228:v2pr-per-roo8o3qoq66qrn44p585q90s7p7nqsoo0q98q0p7-yvax_(n_uers)";a:3:{i:0;R:21988;i:1;R:21167;i:2;R:21933;}s:70:"1228:v2pr-perk-p49n821n7351r65sqs20080503p7591qrs60qr59-rkcbeg_bcgvbaf";a:3:{i:0;s:19:"out-ihris-i2ce-crex";i:1;R:21167;i:2;R:21933;}s:65:"1228:v2pr-perk-5023p8994poq6q607qq19s9s86n12610rp0p2onn-svyr_glcr";a:3:{i:0;R:22142;i:1;R:21167;i:2;R:21933;}s:78:"1228:v2pr-perk-r04o282p057r9s66535r3oq6580o6q9o0s1n5qs3-pbzzn_frcrengrq_inyhrf";a:3:{i:0;R:22142;i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-perk-11o5qnsor1qon2844s8r8200n44o94s5sss59p4o-gno_qryvzvgrq";a:3:{i:0;R:22142;i:1;R:21167;i:2;R:21933;}s:60:"1228:v2pr-perk-9s738pr8457s291o18rr47r665r96onn84s38spq-ugzy";a:3:{i:0;R:22142;i:1;R:21167;i:2;R:21933;}s:59:"1228:v2pr-perk-p0nn9rs764q832o80428q756n731n94251o0r3n1-kzy";a:3:{i:0;R:22142;i:1;R:21167;i:2;R:21933;}s:61:"1228:v2pr-perk-oosn773r5n63n5rn58p9o6207r608pn0120r592n-pybfr";a:3:{i:0;R:22142;i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-perk-13srqs3p41nn13s5o16451583q909s85s6oo8259-gur_genafsbez";a:3:{i:0;R:22142;i:1;R:21167;i:2;R:21933;}s:65:"1228:v2pr-perk-o802q582r1q9q3ron001qqr5pq6n5qs2s0585qsn-qrsvagvba";a:3:{i:0;R:22142;i:1;R:21167;i:2;R:21933;}s:62:"1228:v2pr-perk-8oqs057s91r76nr328o2n21q35s682qnn08n0rp0-hcybnq";a:3:{i:0;R:22142;i:1;R:21167;i:2;R:21933;}s:79:"1228:v2pr-perk-2osn6912qns463s025sq34r516718q562518453n-rkvfgvat_kfy_genafsbezf";a:3:{i:0;R:22142;i:1;R:21167;i:2;R:21933;}s:70:"1228:v2pr-perk-68172p5476rr8o4q9703qq8934pp736361oo8n8s-nqq_n_arj_kfyg";a:3:{i:0;R:22142;i:1;R:21167;i:2;R:21933;}s:70:"1228:v2pr-perk-s918p7n5r1o1775s28r348038p431043s5os735s-nqq_n_arj_kfyg";a:3:{i:0;R:22142;i:1;R:21167;i:2;R:21933;}s:60:"1228:v2pr-perk-709n23220s2p3q64q1r1q6q18p4q5280s8q82spn-anzr";a:3:{i:0;R:22142;i:1;R:21167;i:2;R:21933;}s:86:"1228:v2pr-perk-2o4sn39q2019349n12o71129rr486412pn940719-n_fubeg_anzr_qrfpevovat_guvf_g";a:3:{i:0;R:22142;i:1;R:21167;i:2;R:21933;}s:75:"1228:v2pr-perk-n75275o8p0r39r9or70584512r19q79q43sqq8q6-pbzcerffvba_bcgvbaf";a:3:{i:0;R:22142;i:1;R:21167;i:2;R:21933;}s:70:"1228:v2pr-perk-254373288720q094s49974s500sn7s71n597p973-ab_pbzcerffvba";a:3:{i:0;R:22142;i:1;R:21167;i:2;R:21933;}s:64:"1228:v2pr-perk-spns57nq6940n3o6qq580s4888sron35q08rq3nr-mvc_svyr";a:3:{i:0;R:22142;i:1;R:21167;i:2;R:21933;}s:82:"1228:v2pr-perk-3sr12po759os9931505o638n22po874q22n26rpp-bcgvbaf_sbe_rkcbeg_qvfcynl";a:3:{i:0;R:22142;i:1;R:21167;i:2;R:21933;}s:70:"1228:v2pr-perk-852180s4p4q22p702p12663s172030s5s6o09r49-kfy_genafsbezf";a:3:{i:0;R:22142;i:1;R:21167;i:2;R:21933;}s:60:"1228:v2pr-perk-pn546r369orrpnnr3968p126sppo8o5415r4nr84-tmvc";a:3:{i:0;R:22142;i:1;R:21167;i:2;R:21933;}s:61:"1228:v2pr-perk-18966qprn477rq087r87037p4255pq180or7q19r-omvc2";a:3:{i:0;R:22142;i:1;R:21167;i:2;R:21933;}s:62:"1228:v2pr-perk-s3r4snqo9r370n1r2p0p622p01sp8p77qns93n2p-rkcbeg";a:3:{i:0;R:22142;i:1;R:21167;i:2;R:21933;}s:60:"1228:v2pr-perk-5301648qps6o53prsp9rq52999nnn92q4603pnr0-rqvg";a:3:{i:0;R:22142;i:1;R:21167;i:2;R:21933;}s:62:"1228:v2pr-perk-s6sqor48qp54qq86s63097n03oq24094qrqq713n-qryrgr";a:3:{i:0;R:22142;i:1;R:21167;i:2;R:21933;}s:68:"1228:v2pr-pec-183n70qo44ns297pq677pq5qro5qr451r686n7pq-cevag_bcgvbaf";a:3:{i:0;s:18:"out-ihris-i2ce-crp";i:1;R:21167;i:2;R:21933;}s:65:"1228:v2pr-pec-6040p4pq4q0q62n0q2qq7q782r306s39p0r19o0r-cncre_fvmr";a:3:{i:0;R:22168;i:1;R:21167;i:2;R:21933;}s:58:"1228:v2pr-pec-130p2n7662008p8on1414735ns3089p6n6866223-en0";a:3:{i:0;R:22168;i:1;R:21167;i:2;R:21933;}s:58:"1228:v2pr-pec-73840q2p740os270on204ro59596pq9rons726s0-en1";a:3:{i:0;R:22168;i:1;R:21167;i:2;R:21933;}s:58:"1228:v2pr-pec-1776opo6q5pn102sn28o32q715q72687457q1183-en2";a:3:{i:0;R:22168;i:1;R:21167;i:2;R:21933;}s:58:"1228:v2pr-pec-p1q4376773q675n1s7so89s061o712n0349n1pq4-en3";a:3:{i:0;R:22168;i:1;R:21167;i:2;R:21933;}s:58:"1228:v2pr-pec-4qsro336s68o693r58r278oq2orp646rr4p30s43-en4";a:3:{i:0;R:22168;i:1;R:21167;i:2;R:21933;}s:59:"1228:v2pr-pec-npq3rn53958rs0nsrn007p680ro9p41235or47n6-fen0";a:3:{i:0;R:22168;i:1;R:21167;i:2;R:21933;}s:59:"1228:v2pr-pec-791s62p0622rqn68ro6466rp5nr6874pns4576n4-fen1";a:3:{i:0;R:22168;i:1;R:21167;i:2;R:21933;}s:59:"1228:v2pr-pec-q41nn07n6r9q37n1qn4p020064716snnppn02nrn-fen2";a:3:{i:0;R:22168;i:1;R:21167;i:2;R:21933;}s:59:"1228:v2pr-pec-407r809q751rs4q88n190o55r48pqo993rr0o911-fen3";a:3:{i:0;R:22168;i:1;R:21167;i:2;R:21933;}s:59:"1228:v2pr-pec-6576o79n7p19qn141o4sn1ossn235oo8r4n223s5-fen4";a:3:{i:0;R:22168;i:1;R:21167;i:2;R:21933;}s:61:"1228:v2pr-pec-6qqn1789175nq4n629n834n42oo241r9sq8q5rso-yrggre";a:3:{i:0;R:22168;i:1;R:21167;i:2;R:21933;}s:60:"1228:v2pr-pec-59o5243qqs8o07p1q3sq29qn06q3pp7on653n297-yrtny";a:3:{i:0;R:22168;i:1;R:21167;i:2;R:21933;}s:64:"1228:v2pr-pec-1731sson0rr4onno452opnoqn551595os603p3o5-rkrphgvir";a:3:{i:0;R:22168;i:1;R:21167;i:2;R:21933;}s:60:"1228:v2pr-pec-o1nr7rr1s1qr06q989580554s37s1999p28qpn73-sbyvb";a:3:{i:0;R:22168;i:1;R:21167;i:2;R:21933;}s:66:"1228:v2pr-pec-86r4r3875420pqrr95q08q4472073493729n7nrr-bevragngvba";a:3:{i:0;R:22168;i:1;R:21167;i:2;R:21933;}s:63:"1228:v2pr-pec-92o6o1os71r0p08079r7114003r05n76r0786041-cbegenvg";a:3:{i:0;R:22168;i:1;R:21167;i:2;R:21933;}s:64:"1228:v2pr-pec-7qp4orn618538p0nq8976o06qnn36q5876o89629-ynaqfpncr";a:3:{i:0;R:22168;i:1;R:21167;i:2;R:21933;}s:60:"1228:v2pr-pec-oosn773r5n63n5rn58p9o6207r608pn0120r592n-pybfr";a:3:{i:0;R:22168;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-pec-58r243351q88s3994pr7r78666qrp3s8nss6o5n3-guvf_jvyy_perngr_n_cqs_onfrq_b";a:3:{i:0;R:22168;i:1;R:21167;i:2;R:21933;}s:60:"1228:v2pr-pec-5o221r9p2n451799q8s37r2o9874409q5r03no05-cevag";a:3:{i:0;R:22168;i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-pecp-r31ooqs0966nqrq931503q11qs00199p663rp931-puneg_bcgvbaf";a:3:{i:0;s:19:"out-ihris-i2ce-crpc";i:1;R:21167;i:2;R:21933;}s:67:"1228:v2pr-pecp-p57n7o321qr39o2op836p009ps7n55qp7s5q5o45-puneg_fglyr";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:79:"1228:v2pr-pecp-6010o10q8q071285027o0prnpnsp4510n4017qps-pubbfr_gur_puneg_fglyr.";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:72:"1228:v2pr-pecp-p1q5p831q66po8993q64qo803q668on0s0p68ssr-qvfcynlrq_svryqf";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:86:"1228:v2pr-pecp-14011s94rposp5p86530786q5pn037np1696374o-pubbfr_gur_jnl_lbh_jvfu_gb_fry";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:74:"1228:v2pr-pecp-7103n796p6so5o25s6552q0s0qns72qn53s4rs76-bar_svryq_--_gbgny";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:73:"1228:v2pr-pecp-opspq9r3q64p6p6ns0755no90q39pn426250q651-bar_svryq_(gbgny)";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:86:"1228:v2pr-pecp-344s5295219s92101s908nn123oq4qo9197n1ss3-qvfcynlf_bar_svryq_jvgu_gur_gb";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:67:"1228:v2pr-pecp-n25r71892063q65n033s3p33qppn775oosqo92s4-svefg_svryq";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:86:"1228:v2pr-pecp-62n8p80110p72q1sn8rq31n252r8np4n47nron7q-gjb_svryqf_--_gbgny_ba_gur_frp";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:86:"1228:v2pr-pecp-n931p970n76nr84819o5s2rr2451q1625797pn1q-qvfcynlf_gjb_svryqf_jvgu_gur_g";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-pecp-8r66p2589900s862p7prs5p79459537q29p2q522-gjb_svryqf_(gbgny_ba_frpbaq)";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:68:"1228:v2pr-pecp-sp35so6940s4893poo538p987n1140n41spon3ro-frpbaq_svryq";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:74:"1228:v2pr-pecp-8745or426r624s1s50158p6q06525934s0ns3q16-frpbaq_svryq_gbgny";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:68:"1228:v2pr-pecp-0s98r7342ssn74p035p3878qsp6122qsnpo4373s-gbgny_ahzore";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:70:"1228:v2pr-pecp-q8969273940o1ps778n3so45n2o043714rro2qq2-gbgny_qvfgvapg";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:86:"1228:v2pr-pecp-71366719o10n589rsps545ssrq627903sso15q33-gjb_svryqf_--_frpbaq_bar_vf_ah";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-pecp-8o932qn4n72p55r53n4s76s0026oo898061s9050-qvfcynlf_gjb_svryqf_bar_juvpu";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:76:"1228:v2pr-pecp-pp12178q64141nqo516n52nn40332oq22pn3676s-gjb_svryqf_(ahzrevp)";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:80:"1228:v2pr-pecp-702949q2qs568r300r332pnos7rr0605s677po31-frpbaq_svryq_nttertngvba";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:60:"1228:v2pr-pecp-6rrs6648406p333n4035pq5r60q0os2rps2606q7-abar";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:59:"1228:v2pr-pecp-sp9pr14o28p6s2p3o72pns056pn604o2o96s7q2o-fhz";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:63:"1228:v2pr-pecp-n8qs2srp28q8948n0326722029p7492o88rr4sor-znkvzhz";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:63:"1228:v2pr-pecp-5q398rrs3rpp3rn6n161734581q0oq3q920o64q8-zvavzhz";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:63:"1228:v2pr-pecp-15s86p051rps0o64r5s8pqp8p689552s42595942-nirentr";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:75:"1228:v2pr-pecp-12p09pn2o8r547o8990870019qr24o39q539pp4s-gbgny_ba_gjb_svryqf";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:86:"1228:v2pr-pecp-70rr104q78soropo0s0sr6s542o9ps39r4q1p054-qvfcynlf_gur_gbgny_sbe_gjb_svr";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:74:"1228:v2pr-pecp-nnpo1o8p8r68787837s665238r7o4nsqo5o282p7-gjb_svryqf_(gbgny)";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:86:"1228:v2pr-pecp-263q226960r0n07098or492qs72ps201p3sn15p0-guerr_svryqf_--_gbgny_ba_gur_g";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-pecp-s8sr3880qq7n9r517r37p8o2314ss9o6sr4r15o2-guerr_svryqf_(gbgny_ba_guveq)";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:67:"1228:v2pr-pecp-n85q8647n986sp0s59po426pop7oo9s92689oo9s-guveq_svryq";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:79:"1228:v2pr-pecp-q37o4q901o7qo18o3285456p2288p0s42n7s1568-guveq_svryq_nttertngvba";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:86:"1228:v2pr-pecp-9o23788398o4qn16625o34n5p13qnr45390n53q8-guerr_svryqf_--_guveq_bar_vf_a";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:86:"1228:v2pr-pecp-96004qn5pn8759np9oqoqnqsqq16p68681sn1pn3-qvfcynlf_guerr_svryqf_bar_bs_j";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:78:"1228:v2pr-pecp-2q234sso73664oo1254n3pp04n545754so99112p-guerr_svryqf_(ahzrevp)";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:61:"1228:v2pr-pecp-oosn773r5n63n5rn58p9o6207r608pn0120r592n-pybfr";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:86:"1228:v2pr-pecp-8120920pqr999ss32q42820229o9q2422o34o7s0-pubbfr_bcgvbaf_gb_yvzvg_erfhyg";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:76:"1228:v2pr-pecp-843869q609o6631s5o1245nr9903201qqoq7s020-fnir_nf_qrsnhyg_ivrj";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-pecp-pnosn4882ns0o513952prp113216sps97sp66q56-eryngrq_ivrjf";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:73:"1228:v2pr-pecp-20oo9035383r74r075oo44942q26s1935p4n3or4-cvr_puneg(fvzcyr)";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:73:"1228:v2pr-pecp-6140s3732445sr6030o3pp911qp51ss9oo979oqs-one_puneg(fvzcyr)";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:76:"1228:v2pr-pecp-01646n443n3sqr1o6n38012541nnp89ns595o0q8-pbyhza_puneg(fvzcyr)";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-pecp-3910n0ns1p40s4n8oo7q64r20295709660752sqn-fgnpxrq_pbyhza_puneg(fvzcyr)";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:68:"1228:v2pr-pecp-63920248r4o1noqqo609813526n48ps4n8r4931n-fpnggre_cybg";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:86:"1228:v2pr-pecp-s898q1727or86r945508013078n8ros31sr65r2o-ab_qngn_unf_orra_sbhaq_sbe_guv";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:61:"1228:v2pr-pecp-66p7734789r19porrs3n5np185rn732139nrq213-puneg";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:74:"1228:v2pr-pecp-8rs32864r2p19sp96p015qo52oo168sq7231n5r9-erfhygf_yvzvgrq_ol";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:68:"1228:v2pr-pecp-q3po4173935pp8nr53s5o3150q33889s9rqqonrr-nccyl_yvzvgf";a:3:{i:0;R:22191;i:1;R:21167;i:2;R:21933;}s:60:"1228:v2pr-pef-oosn773r5n63n5rn58p9o6207r608pn0120r592n-pybfr";a:3:{i:0;s:18:"out-ihris-i2ce-crs";i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-pef-95890095nno4rs67p0o5p4s4942osn38s603881p-fryrpg_n_inyhr";a:3:{i:0;R:22240;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-pef-0q91p660r83234pq2p7s6nrrq4744qr0o5n7q336-cyrnfr_jnvg_juvyr_jr_trg_ergev";a:3:{i:0;R:22240;i:1;R:21167;i:2;R:21933;}s:73:"1228:v2pr-pef-8rs32864r2p19sp96p015qo52oo168sq7231n5r9-erfhygf_yvzvgrq_ol";a:3:{i:0;R:22240;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-pef-8120920pqr999ss32q42820229o9q2422o34o7s0-pubbfr_bcgvbaf_gb_yvzvg_erfhyg";a:3:{i:0;R:22240;i:1;R:21167;i:2;R:21933;}s:67:"1228:v2pr-pef-600n6nqrp9583s1188qo8pos2so1641nos819rn4-fryrpg_inyhr";a:3:{i:0;R:22240;i:1;R:21167;i:2;R:21933;}s:68:"1228:v2pr-pef-q7160n7qs753nr718015080nppqoosr10o071s7n-yvzvg_erfhygf";a:3:{i:0;R:22240;i:1;R:21167;i:2;R:21933;}s:60:"1228:v2pr-pef-719rn396nq92r01o4757rp2o93oo1r5s270s771q-pyrne";a:3:{i:0;R:22240;i:1;R:21167;i:2;R:21933;}s:58:"1228:v2pr-soe-93rs0qq827103681sprr453o78or2ss14r1n261q-gur";a:3:{i:0;s:18:"out-ihris-i2ce-fbr";i:1;R:21167;i:2;R:21933;}s:59:"1228:v2pr-soe-q00o39815p187q832prs3239ro7n77580728qp47-sbez";a:3:{i:0;R:22249;i:1;R:21167;i:2;R:21933;}s:65:"1228:v2pr-soe-47p9r7r340o260n424761o8266q961qqr825prr8-gur_sbez_'";a:3:{i:0;R:22249;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-soe-p4n45s645o36qsrq9rq571443q750pqnr78sr565-'_vf_cebivqrq_ivn_gur_pynff_'";a:3:{i:0;R:22249;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-soe-1427o539q224np721qr1p4n237897838639777n1-jneavat_gurer_vf_ab_pynff_ertv";a:3:{i:0;R:22249;i:1;R:21167;i:2;R:21933;}s:78:"1228:v2pr-soe-s4150no7423r91171non4925750onrn735923oq3-fryrpg_n_erpbeq_gb_ivrj";a:3:{i:0;R:22249;i:1;R:21167;i:2;R:21933;}s:59:"1228:v2pr-soe-6rrs6648406p333n4035pq5r60q0os2rps2606q7-abar";a:3:{i:0;R:22249;i:1;R:21167;i:2;R:21933;}s:82:"1228:v2pr-soe-7qn8r46sr42884454279221767n4753p45822724-fryrpg_n_puvyq_sbez_gb_ivrj";a:3:{i:0;R:22249;i:1;R:21167;i:2;R:21933;}s:77:"1228:v2pr-soe-69rs511n249qro0nr8ppnq8582s7116q1or97337-ivrj_gur_cnerag_sbez_(";a:3:{i:0;R:22249;i:1;R:21167;i:2;R:21933;}s:66:"1228:v2pr-soe-1r60r0qsooq75922o1r4474so0o9o38s6430o7n4-ivrj_cnerag";a:3:{i:0;R:22249;i:1;R:21167;i:2;R:21933;}s:71:"1228:v2pr-soe-3rrn8p4q9q39sn5pnq85r25r2616484so3r1n9sq-fnir_guvf_sbez_(";a:3:{i:0;R:22249;i:1;R:21167;i:2;R:21933;}s:71:"1228:v2pr-soe-1n3n66r6rr31p8311rn652q60447q04or1o5nsp9-rqvg_guvf_sbez_(";a:3:{i:0;R:22249;i:1;R:21167;i:2;R:21933;}s:64:"1228:v2pr-soe-946qn718p17s89998363oqr4n559307pr01p4612-rqvg_sbez";a:3:{i:0;R:22249;i:1;R:21167;i:2;R:21933;}s:70:"1228:v2pr-soe-p63p6nnq86no0962o68qq818q0n3rspo0ps73r81-ninvynoyr_sbezf";a:3:{i:0;R:22249;i:1;R:21167;i:2;R:21933;}s:76:"1228:v2pr-soe-0nno94pr817861n5nq5qpn1qr70s05qo57p1873o-pna_ivrj_sbez_oebjfre";a:3:{i:0;R:22249;i:1;R:21167;i:2;R:21933;}s:67:"1228:v2pr-soe-s85n559p0s2296oq20o54p8qrq8732725q4n8o3r-sbez_oebjfre";a:3:{i:0;R:22249;i:1;R:21167;i:2;R:21933;}s:64:"1228:v2pr-soe-17716101oro6s857p8131336r8656004os8qs580-gur_svryq";a:3:{i:0;R:22249;i:1;R:21167;i:2;R:21933;}s:76:"1228:v2pr-soe-s6n41nnr222o526p68o2r23424555pp48p10p0r7-vf_ertvfgrerq_nf_glcr";a:3:{i:0;R:22249;i:1;R:21167;i:2;R:21933;}s:75:"1228:v2pr-soe-7s5qss5rso0q19qr2q8s0qn4571r4o9n211s3009-juvpu_vf_cebivqrq_ol";a:3:{i:0;R:22249;i:1;R:21167;i:2;R:21933;}s:74:"1228:v2pr-soe-q9n94o722s687s039202qr3q146r1p749200s73s-jneavat_gur_svryq_'";a:3:{i:0;R:22249;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-soe-8q2742o784p5sp09q9p8soo7q8qo2s374890q414-'_vf_abg_nffbpvngrq_jvgu_nal_p";a:3:{i:0;R:22249;i:1;R:21167;i:2;R:21933;}s:78:"1228:v2pr-soe-442s72q4o699qrp92o74978q617n5924n05np91s-'_unf_ab_ertvfgrq_glcr.";a:3:{i:0;R:22249;i:1;R:21167;i:2;R:21933;}s:71:"1228:v2pr-soe-6s6203so3225r5431o1pnq8p3s8270ppr5p89po5-gur_svryq_unf_vq";a:3:{i:0;R:22249;i:1;R:21167;i:2;R:21933;}s:83:"1228:v2pr-soe-oqq2o2893p0rnn6o50o1s52072qp46nsorppoqr4-guvf_svryq_yvaxf_gb_gur_sbez";a:3:{i:0;R:22249;i:1;R:21167;i:2;R:21933;}s:64:"1228:v2pr-sqh-oo11230537sp42r4n11oq48sqp16pqo0q37p4ps5-sbez_qhzc";a:3:{i:0;s:18:"out-ihris-i2ce-fdu";i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-syv-7p588q3698618965pp22913283700860283rr178-yvzvg_guvf_svryq_gb_or_orgjrra";a:3:{i:0;s:18:"out-ihris-i2ce-fli";i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-syv-o7qqp535094106os61030q09p895ns3n5r1s4pnn-yvzvg_guvf_svryq_gb_pbagnva_(p";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-syv-1or18s262p0495o167sqqro341q95qr695n163q3-yvzvg_guvf_svryq_gb_or_lrf_be";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:67:"1228:v2pr-syv-600n6nqrp9583s1188qo8pos2so1641nos819rn4-fryrpg_inyhr";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:57:"1228:v2pr-syv-816p52sq2oqq94n63pq0944823n6p0nn9384p103-ab";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:58:"1228:v2pr-syv-5397r0583s14s6p88qr06o1rs28s460n1so5o0nr-lrf";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-syv-54sq12ps594pq2554q55q102nn0sqopq9634ospq-yvzvg_guvf_svryq_gb_or_terngur";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-syv-0p7nsn39oor84rnr0887qr7p0n2300o852so4721-yvzvg_guvf_svryq_gb_or_abg_ahy";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-syv-po4ro282s64n018so52sno6274r7148p4p142soq-yvzvg_guvf_svryq_gb_or_yrff_gu";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-syv-213s4qp1n906s60sss49sr3n7q86p15n4s868o9n-yvzvg_guvf_svryq_gb_or_yvxr_(p";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-syv-38rss95sr1s3s7q5s40pr934912557q66sp0op35-yvzvg_guvf_svryq_gb_or_gehr_be";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:59:"1228:v2pr-syv-88o33r4r12s75np8os792nroqr41s1n090s3n612-gehr";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:60:"1228:v2pr-syv-97pqoqp7srss827rso082n6o6qq2727237pq49sq-snyfr";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-syv-s19o9r092p97r2o01rr5309n46rnoor1869qr76q-yvzvg_guvf_svryq_gb_or_rdhny_g";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-syv-2n946r9363013q32s6p94spp19o82138q2n3sr36-yvzvg_guvf_svryq_gb_or_gur_zva";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-syv-6rs4210rq6n4o81qq73nnn5s46pp8pq0q3n2oprp-yvzvg_guvf_svryq_gb_or_yvxr_(p";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-syv-92r81p793o846ns16252r0138s18q7p8n42n218r-yvzvg_guvf_svryq_gb_or_rdhny_g";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-syv-5s8r2on603o597162215p340p7rsr2936n90p302-yvzvg_guvf_svryq_gb_or_ahyy_be";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:81:"1228:v2pr-syv-q9os6so4946s54r878q736920s2473q7664sqo83-yvzvg_guvf_svryq_gb_or_ab.";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-syv-r5no6259p9s91657920r6nro6q4ro9892r7q0s6n-yvzvg_guvf_svryq_gb_or_gur_zva";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-syv-233432703qq2976qpqp2q18916229510r77sqns9-yvzvg_guvf_svryq_gb_or_terngre";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:83:"1228:v2pr-syv-51qo5so9p2p39069381s076077843q2opr7p255n-yvzvg_guvf_svryq_gb_or_gehr.";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-syv-0q68s5r909sq0nrns8r883868345nrq08ssr4133-yvzvg_guvf_svryq_gb_or_rdhny_g";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-syv-8r3425058038o9o76psqor57o5nq922s0220309n-yvzvg_guvf_svryq_gb_or_gur_znk";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-syv-s184n0568q6510p4q621srn84q90sr91n013rp92-yvzvg_guvf_svryq_gb_or_terngre";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-syv-9n4p2r38947np611507rn54p7n86n5sr5q92r28p-yvzvg_guvf_svryq_gb_or_bar_bs";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-syv-1nr9p5512s7o0rrnsq0o661o63n738o2o643sn17-yvzvg_guvf_svryq_gb_or_yrff_gu";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-syv-rpo212rn2rrpo49so9494p330rrsn9r1o66s8qs9-yvzvg_guvf_svryq_gb_or_gur_znk";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-syv-s046q35o7n72ns53288337230ssr9p09qn69p5o2-yvzvg_guvf_svryq_gb_or_yrff_gu";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-syv-3s51rp206978qq3ppq57892p085113qppn7pr59p-yvzvg_guvf_svryq_gb_or_bar_bs";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:82:"1228:v2pr-syv-p9s1pq213p0438s76s1n9102rp7p40016p00psr2-yvzvg_guvf_svryq_gb_or_lrf.";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-syv-1pq50p4691417ps89569s2479s078r03s7rop5q8-yvzvg_guvf_svryq_gb_or_snyfr.";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-syv-nnpp1p4qq5s115n5544p3pq28nn1pn7o512846ro-yvzvg_guvf_svryq_gb_or_ahyy_(i";a:3:{i:0;R:22276;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-sbezf-n65qorqq428355113rs661ososr584q931q5r74s-erghea_(qb_abg_fnir_punatrf)";a:3:{i:0;s:20:"out-ihris-i2ce-forms";i:1;R:21167;i:2;R:21933;}s:87:"1228:v2pr-sbezf-8r9pn274145280s72qn2pr0q50on4s9o3nop1622-gurer_ner_ceboyrzf_jvgu_gur_qn";a:3:{i:0;R:22310;i:1;R:21167;i:2;R:21933;}s:61:"1228:v2pr-sbezf-9s8n2389n20pn0752nn9r95093515517r90r194p-hfre";a:3:{i:0;R:22310;i:1;R:21167;i:2;R:21933;}s:61:"1228:v2pr-sbezf-rsp007n393s66pqo14q57q385822n3q9r36rs873-fnir";a:3:{i:0;R:22310;i:1;R:21167;i:2;R:21933;}s:64:"1228:v2pr-sbezf-04n212215rs9sos686q280802ro81rr7n6r681pq-pbasvez";a:3:{i:0;R:22310;i:1;R:21167;i:2;R:21933;}s:61:"1228:v2pr-sbezf-5301648qps6o53prsp9rq52999nnn92q4603pnr0-rqvg";a:3:{i:0;R:22310;i:1;R:21167;i:2;R:21933;}s:64:"1228:v2pr-ser-658oqo423594236988994ro0543s63os8827s0op-fdy_dhrel";a:3:{i:0;s:18:"out-ihris-i2ce-fre";i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-7600n777395s8p32562789r8s84rn62p58442np4-gur_qrsvavat_fdy_sbe_guvf_shap";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:66:"1228:v2pr-ser-55s8rop805r65o5o71qqnsqnr390r3or2opq69ns-qrfpevcgvba";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-72q3n2o231s461q1r4o69nr8684s7r4pp29qq6qo-n_qrfpevcgvba_bs_guvf_shapgvba";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:65:"1228:v2pr-ser-2r2s94n6497p4rn39747ss296o32np4s1q3qpn52-sbez_svryq";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-9748o8766s6os27744qo173rp21r26n5s6991103-fryrpg_gur_sbez_svryq_gung_guv";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:71:"1228:v2pr-ser-89qrqp1nr6p8o6nq68r9po7s0o2p334p225s9o9o-fryrpgnoyr_sbezf";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:68:"1228:v2pr-ser-0ps3sn63sr27rns410080n0466pro2s02qop6n83-yvaxrq_svryqf";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-ser-r67o44o7r62180rp810177osssq4s6991o358on4-rkvfgvat_yvzvg";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-ser-4sr15rq7pp2s0or36227no02pr7p93q9sqnnp0sq-gurer_vf_n_yvzvg_ba_gur_svryq";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:65:"1228:v2pr-ser-4on114qopp1o5483751or6n0r38nop877q8s9r19-jvgu_fglyr";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:62:"1228:v2pr-ser-99p8qrr1385sq5o237q7prn2723noo4sr437s613-lbh_znl";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:61:"1228:v2pr-ser-r963907qnp5pq5p017869o4p96p18021p9oq058o-erzbir";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:66:"1228:v2pr-ser-p7p17989r9739447269qo5697520q3p03077s29n-guvf_yvzvg.";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-2r6qn13o8ps74489q7971971n8232n7qo338r3r6-gurer_ner_ab_sbezf_juvpu_ner_n";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:81:"1228:v2pr-ser-8op3qr6940287pn59o001q26rrpno58s3o233r4s-yvzvg_guvf_sbez_ol_n_svryq";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-ser-62o63r33121son5284o78npno89s41ror5718p0q-fryrpg_n_svryq_naq_yvzvg_glcr";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:65:"1228:v2pr-ser-132n07qpq88034s7872pr5pr9rron14s9347n298-sbez_svryq";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-ser-sq6294nqqr442r65458qn9640orrnsrq76s7s66n-fryrpg_n_svryq";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:59:"1228:v2pr-ser-69oq4rs9soq0894n22759p3766o859qrsoqrqop8-ivrj";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:61:"1228:v2pr-ser-s6sqor48qp54qq86s63097n03oq24094qrqq713n-qryrgr";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-572387o8621s19s2770qn8n927qp229po5n38870-ebj_jvyy_or_qebccrq_vs_sbez_vf";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-r6795r04n141161pr70o6803s7r82738s06r45r6-ebj_jvyy_abg_or_qebccrq_vs_sbe";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:59:"1228:v2pr-ser-5301648qps6o53prsp9rq52999nnn92q4603pnr0-rqvg";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:71:"1228:v2pr-ser-r49qns4sqrr6or02s48q0n20p45115053513n30p-gur_fdy_shapgvba";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-8pp3n9035s436ss4sp2420sq108n2998272sp44n-gur_sbez_svryq_gung_guvf_shapg";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-968126s27r19r690pp376036783161329s26s40n-gur_sbezf_juvpu_ner_fryrpgnoyr";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-7681rn5405on3q9o8on5ps84q5pr3s0pn6s993sn-gur_svryqf_gung_ner_yvaxrq_jur";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:71:"1228:v2pr-ser-qq1s89r21918p489rpp6555ro020s9712p87703n-rqvgvat_ynathntr";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:61:"1228:v2pr-ser-s3r4snqo9r370n1r2p0p622p01sp8p77qns93n2p-rkcbeg";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:73:"1228:v2pr-ser-448q831133p78o6qp9ns93rp02122p6q3895s864-rkvfgvat_shapgvbaf";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:73:"1228:v2pr-ser-9n1nqo7n8091354636o3pq7sor34no3715sn7sqs-sbez_eryngvbafuvcf";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-ser-n96qs273rn7p80r4872712500s89p9q4p44463r1-ivrj_na_rkvfgvat_eryngvbafuvc";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-qn47s6s8p2or90nqq779098r033nqqs2r89110n5-gurer_ner_ab_rkvfgvat_eryngvba";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:73:"1228:v2pr-ser-802ps9q17rr10p0347s36980o0ros7o27op5p23p-nqq_n_arj_bcrenaq.";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-0413410s5pr3n6n06rnqrrp89s277r2qoq8nq906-lbh_znl_nqq_n_arj_bcrenaq_gb_g";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:75:"1228:v2pr-ser-90qnqrp8q1195r86snop9q4n1p76npp07o4p603n-nqq_n_arj_puvyq_sbez";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-ser-s1oq5861r69nsn627o058n326242r79p65862n8o-nqq_n_arj_sbez";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-qqq375n175p80112nn4ro3ppn1p8sqsr417n6n81-fryrpg_n_puvyq_sbez_gb_wbva_gb";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:65:"1228:v2pr-ser-qn4qo97r68770n1o649q6q2p7s0611s76r0nqnns-fubeg_anzr";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-rs86436p30385q4377261q90psn1on479r44rr66-na_vagreany_xrl_hfrq_gb_vqragv";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:67:"1228:v2pr-ser-8q6o34815on43q254716rno5nn768o8p7nn6q3s1-qvfcynl_anzr";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-110o3ronnpro8p97276670ssp9rr332620p44061-gur_anzr_bs_gur_wbvarq_sbez_gu";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-ser-8p996o713on135o674399r2583npnr3s90967925-n_qrfpevcgvba_bs_gur_sbez_naq";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:60:"1228:v2pr-ser-oosn773r5n63n5rn58p9o6207r608pn0120r592n-pybfr";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:77:"1228:v2pr-ser-4sn231rs3poq56onp80o46o8rs91qnr2on567475-pubbfr_yvzvg_abqr_glcr";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-94sss770775nq3sq546o21r6099p748o0700rn2p-lbh_unir_abg_qrsvarq_nal_yvzvg";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:68:"1228:v2pr-ser-1780pq1770130pn0q98023pp89rqoo9o98802nss-bcrengbe_abqr";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:65:"1228:v2pr-ser-31s34n6777o8n1r6rp5spq7525ps675ro8300756-fryrpg_bar";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:58:"1228:v2pr-ser-969r7q8qrr132181523n501n068srp75oqrq3005-abg";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:58:"1228:v2pr-ser-p2s934po8pno6p1o3ns0q4s2sqq824rnonso6os4-naq";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:57:"1228:v2pr-ser-s579p523960ns1nrp824p6sqp57ns6q4noq76n1s-be";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:58:"1228:v2pr-ser-04r41391q608roo7pp129o9s95rqr0qqp5173o69-kbe";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:82:"1228:v2pr-ser-16501o314o84qos9o94op4744s134r16o38985sp-yvzvg_ol_n_svryq_(raq_abqr)";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:63:"1228:v2pr-ser-10850o9371593nrr86ns5451031709r0438296s6-ab_yvzvg";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-1914op961rrn05s86ssr03s295n4rso4198s93rp-lbh_znl_rvgure_pubbfr_gb_zbqvs";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-ser-12708qn6rq48rrp57q103438o56p21p17qs98qq6-lbh_znl_pbafgehpg_na_rkvfgvat";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-ser-6643338r80rq2srors8s9npsn58o15313r36q728-rqvg_na_rkvfgvat_eryngvbafuvc";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:83:"1228:v2pr-ser-0q09618n41837nss74r2710psnp857264q42p69s-pbafgehpg_n_arj_eryngvbafuvc";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-spn3s02oo98qsr5n2680q11955p51n4so7288q04-cyrnfr_fryrpg_rvgure_n_sbez_gb";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-9q82qs64759q91o2408n66r3r49456q91527s400-cyrnfr_fryrpg_n_sbez_gb_hfr_nf";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:78:"1228:v2pr-ser-onn3qo3702s1s56or6586o9o43o8o2703048qs99-eryngvbafuvc_fubeg_anzr";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-55q7r26873p9qrsr46q8o46s51r522p212n1s404-na_vagreany_xrl_hfrq_gb_vqragv";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-1nn0pn2599qrp64os0288s72n70350q3q776qsr7-gur_anzr_bs_gur_sbez_eryngvbaf";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-sp62o6s0q45p9739q8nrq7o38p10p758o91s2649-n_qrfpevcgvba_bs_gur_sbez_eryn";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-nr1ospq1ros7928no29s8q65835p131op1ro4957-gb_pbafgehpg_n_arj_sbez_eryngv";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-q82sn0637pr6p6r8s658o6qo42qo20s2r5291772-fryrpg_na_rkvfgvat_eryngvbafuv";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:66:"1228:v2pr-ser-3032615181r4on71o4q0rp91o60n9ppnrp40q440-qb_abg_pbcl";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-55286o332qr32qnsn381284q3qp7npo4275q2qq1-gur_sbez_1$f_va_gur_eryngvbafu";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-ser-o05q649q600srn7opq72248op1q90o33o6r3n1n5-gur_anzr_bs_guvf_eryngvbafuvc";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-6n9p3rs23679q764992q4on531351643p3q37390-n_qrfpevcgvba_bs_gur_eryngvbaf";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:72:"1228:v2pr-ser-q193o1q4q372437non7p385770o2782p49664s77-svryq_yvzvg_fglyr";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-ser-847145060388r8qq2q2sppp0929900o4nqn93587-fryrpg_n_fglyr";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:61:"1228:v2pr-ser-61n0nr3o849q95so8185qs69o96q0rp676so0688-yvzvgf";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-77qos9r9r5pq1s345480p85445s57r1q311s0940-nyy_yvzvgf_haqre_guvf_abqr_ner";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:76:"1228:v2pr-ser-n7278r81n07098ons17pn4q9os170r55o1pr48pp-rkvfgvat_wbvarq_sbezf";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:73:"1228:v2pr-ser-8478744o47q806sps05908684on80q8sq54o1495-nqq_n_arj_shapgvba";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:73:"1228:v2pr-ser-nr82167n6745n40oro0s9q139n72qr221s8n9o28-nqq_n_arj_shapgvba";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:68:"1228:v2pr-ser-q1o389n67o88qp11q3pn8n7606n8511rs745p99o-shapgvba_anzr";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-ser-9906s89563srn19232n40s5704n42s0oq3177336-n_anzr_sbe_guvf_shapgvba_gung";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-qrs8509r603pp8478so306qq43s5779n7o98s847-gur_qrsvavat_fdy_sbe_guvf_shap";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:72:"1228:v2pr-ser-n725sroq25n73830sq45r7312136r2n28119159q-gur_ercbegrq_sbez";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:68:"1228:v2pr-ser-8npsn3r01p4qpo3p1s98po1n02s0oos4oo073p46-hfrf_gur_sbez";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-53947444o4208o97552r6nr050ns97r3772s7nqr-gur_anzr_bs_gur_sbez_gung_vf_q";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:70:"1228:v2pr-ser-399n19464p462q758q7003ron28r994n9n447740-)_vf_qvfcynlrq.";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-8r5or15poon4s965o55q17o6p5493rqp2ssn4pso-n_qrfpevcgvba_bs_gur_sbez_gung";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:58:"1228:v2pr-ser-93rs0qq827103681sprr453o78or2ss14r1n261q-gur";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:59:"1228:v2pr-ser-q00o39815p187q832prs3239ro7n77580728qp47-sbez";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:70:"1228:v2pr-ser-6snson4925qnrn8022623q9p4281530n71oq6500-rkvfgvat_yvzvgf";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:60:"1228:v2pr-ser-p326n4660o674q2s6rn82687n1r1nonr2337541s-svryq";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-qq8rq0n8s177677253q2n204s49328pos76p4216-gur_svryq_bs_guvf_sbez_jr_jvfu";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:67:"1228:v2pr-ser-600n6nqrp9583s1188qo8pos2so1641nos819rn4-fryrpg_inyhr";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:68:"1228:v2pr-ser-ppn58q01r07nn48s1567n6846320n79rssnns0o6-naprfgbe_sbez";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-0n923413102469r58pr2q10qnp6p1qqqs9n968p9-gur_anzrq_sbez_jr_jvfu_gb_fcrp";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-ser-30r0p1r2qq6oo3o38n1p9796457s2q908221r1r0-naprfgbe_svryq";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-sp4r989nn40024o5s15o48no776o45r2ns6n300p-gur_svryq_bs_gur_naprfgeny_sbe";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:74:"1228:v2pr-ser-81212qo779457551o2977543qqoqn811op7q411n-rkvfgvat_pbaqvgvbaf";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:74:"1228:v2pr-ser-5r8n7r7p6p006n95p7r0po41566p2o381o50r6n9-nqq_n_arj_pbaqvgvba";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:66:"1228:v2pr-ser-65s17525sr429023356n9qp01oss8qnoo78p5218-wbva_zrgubq";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:65:"1228:v2pr-ser-47s22q76q5s07r02632426nn68pq9q122o2nr5p4-evtug_wbva";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:59:"1228:v2pr-ser-64468osr685s68pp16qrrn254787p7o7nr5p9o7n-wbva";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:64:"1228:v2pr-ser-sn443q7q6200ns63823qppp305r61rrq839o45p2-yrsg_wbva";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:65:"1228:v2pr-ser-360q6510309356rn81qronqpnor603p9s9prq959-yvzvg_wbva";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:74:"1228:v2pr-ser-5n6272sp8p3q425874ps43rr28r0n4r017qr4978-yvzvg_gb_bar_wbvarq";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:75:"1228:v2pr-ser-28150p25463oo91oo5rs56snq03rpoq834n437q4-nyybj_zhygvcyr_wbvaf";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:76:"1228:v2pr-ser-p9p5pr122ps11190n9p4r57n56o0s3563q855o90-rqvg_gur_fdy_shapgvba";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:64:"1228:v2pr-ser-6n8r8189s1313qqq69n6p196or4r792p160r8nqr-nttertngr";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-ser-83002on19n0rp5p3616n0p6qp98034p7n01n9250-n_pbzzn_frcrengrq_yvfg_bs_gur";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-09099s6rr3pn9oo4pqp7n4s2qr4rs5r59nqspn51-gur_sbezf_juvpu_ner_fryrpgnoyr";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-qn42854n3130qp3q57o13p59n621397p1rr24p04-gur_svryqf_gung_ner_yvaxrq_jur";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:74:"1228:v2pr-ser-q0s0229s25q16qpn1p6sr84nqq12spr68n143ss9-qrcraqrag_shapgvbaf";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:67:"1228:v2pr-ser-s25p888q1qn82no56721qp1q9247pp4nps120959-wbvarq_sbezf";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ser-64o8rs158734o64rsono4n33814s83o9160qs4p5-wbva_va_arj_sbezf_gb_guvf_eryn";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:70:"1228:v2pr-ser-6n4272o056oqo5n465o25p67r20p5o4580s9ps95-yvzvg_guvf_sbez";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-ser-80p932287675r160nq36on33pn7p3p0s4168o525-yvzvg_gur_glcr_bs_sbezf_nqqrq";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-ser-58oos5sq26ss5235288r7qq8p21356p798qs472o-yvax_guvf_sbez";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-ser-pq88o1s3314258onqp274691o5o21q525s760q22-yvax_guvf_sbez_gb_na_naprfgbe";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:64:"1228:v2pr-ser-2o961qrn1qp0p60qqs9n2p8r9q090s6s7q082483-shapgvbaf";a:3:{i:0;R:22317;i:1;R:21167;i:2;R:21933;}s:61:"1228:v2pr-ysb-8970s0r691n0n23n47517698017p997507rsq496-ybpnyr";a:3:{i:0;s:18:"out-ihris-i2ce-lfo";i:1;R:21167;i:2;R:21933;}s:65:"1228:v2pr-ysb-43s6088p824s8qn50no64q1334os20prn43n7974-fryrpgnoyr";a:3:{i:0;R:22436;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-yvfgf-n65qorqq428355113rs661ososr584q931q5r74s-erghea_(qb_abg_fnir_punatrf)";a:3:{i:0;s:20:"out-ihris-i2ce-lists";i:1;R:21167;i:2;R:21933;}s:76:"1228:v2pr-yvfgf-pn20o4q0qp0037qoo9p44s4r58377sq5n5spsn15-nqzvavfgre_qngnonfr";a:3:{i:0;R:22439;i:1;R:21167;i:2;R:21933;}s:64:"1228:v2pr-yvfgf-344q8o9npnop894qqs99q242r90n3o5o8434opo1-nqq_arj";a:3:{i:0;R:22439;i:1;R:21167;i:2;R:21933;}s:63:"1228:v2pr-yvfgf-63143o6s8007o98p53pn2149822777o3566s9241-erghea";a:3:{i:0;R:22439;i:1;R:21167;i:2;R:21933;}s:73:"1228:v2pr-yvfgf-852q5s3o8pns59no764p017p14so66o17o77993r-fryrpg_f_gb_rqvg";a:3:{i:0;R:22439;i:1;R:21167;i:2;R:21933;}s:61:"1228:v2pr-yvfgf-69oq4rs9soq0894n22759p3766o859qrsoqrqop8-ivrj";a:3:{i:0;R:22439;i:1;R:21167;i:2;R:21933;}s:68:"1228:v2pr-yvfgf-0ro5rq506r4923p28q7s4n8nn69rsr99o3nq75q1-vasbezngvba";a:3:{i:0;R:22439;i:1;R:21167;i:2;R:21933;}s:65:"1228:v2pr-yvfgf-95q86p320s325q9o892n81r839p95npr424907o7-fryrpg_f";a:3:{i:0;R:22439;i:1;R:21167;i:2;R:21933;}s:87:"1228:v2pr-yvfgf-q761o2876q5362553n5spn8184n35p8s5r936s4s-fryrpg_gur_1$f_gb_yvzvg_gur_qv";a:3:{i:0;R:22439;i:1;R:21167;i:2;R:21933;}s:66:"1228:v2pr-yvfgf-50p54srsq7r71sqq1o5614rs4sq1qn6n73366q8q-nqq_arj_f";a:3:{i:0;R:22439;i:1;R:21167;i:2;R:21933;}s:68:"1228:v2pr-yvfgf-702852n3o282opqs2sp2p70q7q8776p6944607p5-ivrj_erpbeq";a:3:{i:0;R:22439;i:1;R:21167;i:2;R:21933;}s:61:"1228:v2pr-yvfgf-34q8o60sr25332s7o98585r82r753rns502p3r50-uvqr";a:3:{i:0;R:22439;i:1;R:21167;i:2;R:21933;}s:61:"1228:v2pr-yvfgf-709n23220s2p3q64q1r1q6q18p4q5280s8q82spn-anzr";a:3:{i:0;R:22439;i:1;R:21167;i:2;R:21933;}s:78:"1228:v2pr-yvfgf-7p49536127170p614r0617n2202615736691079o-pna_uvqr_yvfg_zrzoref";a:3:{i:0;R:22439;i:1;R:21167;i:2;R:21933;}s:87:"1228:v2pr-yvfgf-o58r6s80034617303sp02rn0p5269sq24np6ss50-pna_rqvg_fbzr_bs_gur_yvfgf_fgb";a:3:{i:0;R:22439;i:1;R:21167;i:2;R:21933;}s:86:"1228:v2pr-yvfgf-pq82srr11q2rq1n28n51qo7no570947r5074p101-pna_rqvg_nyy_gur_yvfgf_fgberq";a:3:{i:0;R:22439;i:1;R:21167;i:2;R:21933;}s:87:"1228:v2pr-yvfgf-pn8377nr474ps787o95n66o815pr9793q1rqn2pn-pna_ivrj_fbzr_bs_gur_yvfgf_fgb";a:3:{i:0;R:22439;i:1;R:21167;i:2;R:21933;}s:86:"1228:v2pr-yvfgf-570n89op75q7n22s596270s7pqo2r1p29q9q8nnq-pna_ivrj_nyy_gur_yvfgf_fgberq";a:3:{i:0;R:22439;i:1;R:21167;i:2;R:21933;}s:66:"1228:v2pr-yvfgf-574o1p110q9r458osnp81qp3p9s0sqpr28ps180n-ivrj_yvfg";a:3:{i:0;R:22439;i:1;R:21167;i:2;R:21933;}s:78:"1228:v2pr-yvfgf-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;R:22439;i:1;R:21167;i:2;R:21933;}s:80:"1228:v2pr-yvfgf-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:22439;i:1;R:21167;i:2;R:21933;}s:71:"1228:v2pr-yvfgf-n5os28o25rn36609n8859p7412rsn251n93qno31-fryrpg_nabgure";a:3:{i:0;R:22439;i:1;R:21167;i:2;R:21933;}s:64:"1228:v2pr-yvfgf-04n212215rs9sos686q280802ro81rr7n6r681pq-pbasvez";a:3:{i:0;R:22439;i:1;R:21167;i:2;R:21933;}s:63:"1228:v2pr-yvfgf-8598222918q3p6r513q63060ps55r2971qrq729n-fryrpg";a:3:{i:0;R:22439;i:1;R:21167;i:2;R:21933;}s:64:"1228:v2pr-yvfgf-os23869q668pq1n3q75r388p42p97p93rno06pn9-gb_rqvg";a:3:{i:0;R:22439;i:1;R:21167;i:2;R:21933;}s:87:"1228:v2pr-yvfgf-1pp45r03o39406os1110q9r77410o74n94n57097-qb_abg_fubj_uvqqra_yvfg_zrzore";a:3:{i:0;R:22439;i:1;R:21167;i:2;R:21933;}s:81:"1228:v2pr-yvfgf-998215q517p2r14s766924oss86s49on9576qrnr-fubj_uvqqra_yvfg_zrzoref";a:3:{i:0;R:22439;i:1;R:21167;i:2;R:21933;}s:59:"1228:v2pr-yyg-n1sssnnnso7pp996685opro829p053pp4s7qr43q-yvfg";a:3:{i:0;s:18:"out-ihris-i2ce-llt";i:1;R:21167;i:2;R:21933;}s:77:"1228:v2pr-yygy-327725r37o069q0ss2nq1npr11169p11010926p5-yvfgf_yvaxrq_gb_yvfgf";a:3:{i:0;s:19:"out-ihris-i2ce-lltl";i:1;R:21167;i:2;R:21933;}s:64:"1228:v2pr-yygy-756439rrn515510p19115sp4np181594nr63p8q1-yvaxf_gb";a:3:{i:0;R:22469;i:1;R:21167;i:2;R:21933;}s:78:"1228:v2pr-yygf-6n315338p3r38n28n5802npsqn89n2s1qs5nq877-yvfgf_yvaxrq_gb_fgevat";a:3:{i:0;s:19:"out-ihris-i2ce-llts";i:1;R:21167;i:2;R:21933;}s:64:"1228:v2pr-yygf-756439rrn515510p19115sp4np181594nr63p8q1-yvaxf_gb";a:3:{i:0;R:22472;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ycn-71r47pn7nqqn8pn941q0sn74nrqn3003n3833589-lbhe_byq_cnffjbeq_qvqa'g_zngpu";a:3:{i:0;s:18:"out-ihris-i2ce-lpa";i:1;R:21167;i:2;R:21933;}s:68:"1228:v2pr-ycn-3634np46987n5901n7rq3s62qp808667ssrr4q74-cyrnfr_ybt_va";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:63:"1228:v2pr-ycn-84p29015qr33r5q22422382n372pnon5p58s8p01-hfreanzr";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:63:"1228:v2pr-ycn-8or3p943o1609sssosp51nnq666q0n04nqs83p9q-cnffjbeq";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:83:"1228:v2pr-ycn-r2816568875239n23328n2n28op3prrp538qrn10-sbetrg_hfreanzr_be_cnffjbeq?";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ycn-n01rop89225qr234590r35349961qqp7n9sr083s-gung_nppbhag_pnaabg_punatr_cnf";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:70:"1228:v2pr-ycn-49289qo43r663n3qs5r2p70714722rpp54895565-punatr_cnffjbeq";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:68:"1228:v2pr-ycn-083n7n6n0pros7p804o75r3095q950o21nnqp1no-fraq_srrqonpx";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ycn-8p416o428rp247s06s3p335512q2qpq09os569r8-lbh_qvq_abg_frg_n_cnffjbeq._cy";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:67:"1228:v2pr-ycn-5pnq355qr5o5s85sr9r779388218s8on9o4n00np-byq_cnffjbeq";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:67:"1228:v2pr-ycn-4894po39rr419n77o480060s3r4n6q0n4q0sn01s-arj_cnffjbeq";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:75:"1228:v2pr-ycn-68qpq71pr6onn65pr1s3qqo3rnq8s9r8s575r147-pbasvez_arj_cnffjbeq";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:83:"1228:v2pr-ycn-q22qn675o52ps51269p8p2p82628719rq1926ono-gunax_lbh_sbe_lbhe_srrqonpx.";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:61:"1228:v2pr-ycn-63143o6s8007o98p53pn2149822777o3566s9241-erghea";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ycn-ps968805p2389923r940srrq46331q2955p36q3s-lbhe_arj_cnffjbeq_qvqa'g_zngpu";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ycn-pqqn40ro783pn502862r65p26rs426q1978r743s-vs_lbh_unir_n_oht_ercbeg,_cebo";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:73:"1228:v2pr-ycn-41954o0719910qpnrs689s5qq57on6362p833n29-fvgr_srrqonpx_sbez";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:63:"1228:v2pr-ycn-spr06r20r5s7s74nnpppno40o59o75n56p8s7305-pbzzragf";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:59:"1228:v2pr-ycn-709n23220s2p3q64q1r1q6q18p4q5280s8q82spn-anzr";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:62:"1228:v2pr-ycn-7n1994999q181qrrn68r4304o3346r78s838rpo7-pbzcnal";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:60:"1228:v2pr-ycn-768r0p1p69573so588s61s1308n015p11468r05s-gvgyr";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:63:"1228:v2pr-ycn-973q438sr5q3ps552p5spq3o2265sr9oss3q71p6-vaqhfgel";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:62:"1228:v2pr-ycn-q70s93qs5r8s9o55or44sorrr9q203972r3383q4-nqqerff";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:59:"1228:v2pr-ycn-4271627s4s0ors6104n95ppn7oo21pqn4q74503r-pvgl";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-ycn-8o19s84098767pn9p68285s81n77q6p5pq992no0-fgngr_cebivapr";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:66:"1228:v2pr-ycn-p7np934psnn9o50r25559321r48737ro6op8q9q8-cbfgny_pbqr";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:62:"1228:v2pr-ycn-q523rooq10146pqsq39qrr077s04p9q08468q0op-pbhagel";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:64:"1228:v2pr-ycn-sonqo22pp438no6r67737oop0p3o51ror025oso0-gryrcubar";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:58:"1228:v2pr-ycn-o67snq2r2rqs27045555rnqns1r4n848no242206-snk";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:60:"1228:v2pr-ycn-84nqq5o2952787581po9n8851rrs63q1rp75q22o-rznvy";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ycn-9nqs118noq5qopn7pn01595p6q388po7r035096q-lbhe_cnffjbeq_unf_orra_fhpprff";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:60:"1228:v2pr-ycn-4r5n2893oqpp7q239p1qo72r4p4ssor4orn73174-ybtva";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:61:"1228:v2pr-ycn-r43q612r11s1568s2373r719q4p4o08qprpqp7pp-ybtbhg";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:73:"1228:v2pr-ycn-75q9o0nr36q3034390s4ns07r457q03q4714pp4o-sbetbggra_cnffjbeq";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ycn-37on62qn831p80s9nnnrq4q10spqo90nq1n064r3-ragre_lbhe_hfreanzr_naq_cnffjb";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:70:"1228:v2pr-ycn-s99q98r85s9064n9o39p10p0q10sn2151qs4n764-sbetbg_cnffjbeq";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-ycn-3so75r3osr4qr94ro5198656sn9qr95352qno915-erfrg_cnffjbeq";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ycn-4sp42p3qo5ps2s49o760s5368qo9q72s8rs3qp6r-ragre_lbhe_hfreanzr_gb_erfrg_l";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:71:"1228:v2pr-ycn-s674314q9s69938411r15n6q8248q7p02r97n84o-qvfcynl_hfreanzr";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ycn-19o68q6p9n4101nnpsr1oqs29qr740q213nqrs15-ragre_lbhe_rznvy_nqqerff_gb_fr";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:75:"1228:v2pr-ycn-653o99433rq458o47nr5sorrq19o1384pq7o91o5-erghea_gb_ybtva_cntr";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ycn-3oqq52s868061p1n303692q1p0895sr28346q995-cyrnfr_pbagnpg_lbhe_flfgrz_nqz";a:3:{i:0;R:22475;i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-yfr-8136r2484o3os97sn192o104791qs522264rp51r-nqq_arj_ybpnyr";a:3:{i:0;s:18:"out-ihris-i2ce-lse";i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-yfr-rnopqq9ss4p89pss18o6qnn50q7s1r507q4n2752-urer_lbh_znl_fryrpg_gur_ybpnyr";a:3:{i:0;R:22518;i:1;R:21167;i:2;R:21933;}s:71:"1228:v2pr-yfr-25s8spn8qr0pr34421050rr5466q1npnq8ro5ss6-nqq_n_arj_ybpnyr";a:3:{i:0;R:22518;i:1;R:21167;i:2;R:21933;}s:60:"1228:v2pr-yfr-oosn773r5n63n5rn58p9o6207r608pn0120r592n-pybfr";a:3:{i:0;R:22518;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-yfr-6sn40p41r5444q388q183o693rnpnnqo3p33454n-gurfr_ner_gur_ybpnyrf_gung_ner";a:3:{i:0;R:22518;i:1;R:21167;i:2;R:21933;}s:72:"1228:v2pr-yfr-sp7r37p326s7s90p76o3058704s7p5q60288p7os-ybpnyr_erfbyhgvba";a:3:{i:0;R:22518;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-yfr-nornr180995o3r19173o3ps350qq0s635p640o46-gur_yvfg_bs_ybpnyrf_gb_ybbxvat";a:3:{i:0;R:22518;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-yfr-pn138sr074o89q1s43r95o061s6s16894orq3937-._vs_abg_frg,_gura_gur_fryrpgr";a:3:{i:0;R:22518;i:1;R:21167;i:2;R:21933;}s:80:"1228:v2pr-yfr-6q85qronp37o585p99s79r955p9q86p089roq12n-gur_qrsnhyg_erfbyhgvba_vf";a:3:{i:0;R:22518;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-yfr-9526146p168o4r46oo589p60r72o880po3pq691n-vs_lbh_jvfu_gb_fcrpvsl_na_nygr";a:3:{i:0;R:22518;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-yfr-14nqp928816o7337940qnsnqnq5nor9344626nq4-"_znl_or_na_nccebcevngr_erfbyh";a:3:{i:0;R:22518;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-yfr-9n38p16n3273087594oo47253r2r8o6s0sp5832p-vf_abg_fcrpvsvrq_va_gur_yvfg,";a:3:{i:0;R:22518;i:1;R:21167;i:2;R:21933;}s:78:"1228:v2pr-yfr-18n6nos46797o44p4pppsr28548708qo94rop12p-fryrpg_ninvynoyr_ybpnyr";a:3:{i:0;R:22518;i:1;R:21167;i:2;R:21933;}s:72:"1228:v2pr-yfr-nqn86566776s9o8pqp3s2o69s70p83o2nr6o2n67-ninvynoyr_ybpnyrf";a:3:{i:0;R:22518;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-yfr-0pp099q3n3p2opon2oqrr8r0q7n397q96s239ps7-fryrpg_n_ybpnyr_sbe_lbhe_flfgr";a:3:{i:0;R:22518;i:1;R:21167;i:2;R:21933;}s:68:"1228:v2pr-yfr-17no7205prr492o0p05051pp9s3n757qs87r9073-fryrpg_ybpnyr";a:3:{i:0;R:22518;i:1;R:21167;i:2;R:21933;}s:68:"1228:v2pr-yfr-p076s0204pr59ooo7or8792on99n309s54765523-phfgbz_ybpnyr";a:3:{i:0;R:22518;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-yfr-875ps3q1nrr71n7qo987154s1r8073nqo057on7p-lbh_znl_ragre_n_phfgbz_ybpnyr";a:3:{i:0;R:22518;i:1;R:21167;i:2;R:21933;}s:62:"1228:v2pr-zqo-93039r609q94n24s3572o794n31o21525n09ns2o-abg_frg";a:3:{i:0;s:18:"out-ihris-i2ce-mdb";i:1;R:21167;i:2;R:21933;}s:60:"1228:v2pr-zqo-7p17p0101o3ps54q44618o0726307889s5q7o6q9-neenl";a:3:{i:0;R:22537;i:1;R:21167;i:2;R:21933;}s:70:"1228:v2pr-zqo-n0150n3q10n975s15psqo02pp489osqsp0n2929s-zntvp_qngn_cngu";a:3:{i:0;R:22537;i:1;R:21167;i:2;R:21933;}s:68:"1228:v2pr-zqo-oqq8oo48371n1186p2rr534or6rq3s32qsprnnqp-rkcnaqrq_ivrj";a:3:{i:0;R:22537;i:1;R:21167;i:2;R:21933;}s:70:"1228:v2pr-zqo-288p4qr2o5pns5n8onsqrs4s910o6749s97oq0q0-pbzcerffrq_ivrj";a:3:{i:0;R:22537;i:1;R:21167;i:2;R:21933;}s:64:"1228:v2pr-zqo-94o69o9q5s396r0q44q01pq34s7267957s228575-zvav_ivrj";a:3:{i:0;R:22537;i:1;R:21167;i:2;R:21933;}s:64:"1228:v2pr-zqo-3563763o5qp328s5r1q521s98orq6s52q6n441r0-shyy_ivrj";a:3:{i:0;R:22537;i:1;R:21167;i:2;R:21933;}s:72:"1228:v2pr-zqo-89p1n1s2250n2q9nq6rs02po82no553rpo1p6n81-zntvpqngn_oebjfre";a:3:{i:0;R:22537;i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-zqo-p49n821n7351r65sqs20080503p7591qrs60qr59-rkcbeg_bcgvbaf";a:3:{i:0;R:22537;i:1;R:21167;i:2;R:21933;}s:66:"1228:v2pr-zqo-4228o7603r50200006p8r380r2p2979ssqo82200-zbqhyr_anzr";a:3:{i:0;R:22537;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-zqo-4qr3psrqn43n2q22499sp832184sqprs086pqo8r-n_zbqhyr_anzr_sbe_gur_rkcbegrq";a:3:{i:0;R:22537;i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-zqo-04362s56q7q243q69qp8ornqq26r1p7q862n992n-qvfcynlrq_anzr";a:3:{i:0;R:22537;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-zqo-rnq9671qop0o9o2qs32s6s2948qnprq3r82o035p-n_qvfcynlrq_anzr_sbe_gur_rkcbe";a:3:{i:0;R:22537;i:1;R:21167;i:2;R:21933;}s:62:"1228:v2pr-zqo-2qn600os9404843107n9531694s654r5662959r0-irefvba";a:3:{i:0;R:22537;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-zqo-33o697q4s8p15qn6srrrqqn31r69o89418697q14-n_irefvba_ahzore_sbe_gur_qngn";a:3:{i:0;R:22537;i:1;R:21167;i:2;R:21933;}s:66:"1228:v2pr-zqo-55s8rop805r65o5o71qqnsqnr390r3or2opq69ns-qrfpevcgvba";a:3:{i:0;R:22537;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-zqo-6p9n1o038p5nsspr8s2175482q6707pqq197o7nq-n_oevrs_qrfpevcgvba_bs_gur_rkc";a:3:{i:0;R:22537;i:1;R:21167;i:2;R:21933;}s:60:"1228:v2pr-zqo-oosn773r5n63n5rn58p9o6207r608pn0120r592n-pybfr";a:3:{i:0;R:22537;i:1;R:21167;i:2;R:21933;}s:61:"1228:v2pr-zqo-s3r4snqo9r370n1r2p0p622p01sp8p77qns93n2p-rkcbeg";a:3:{i:0;R:22537;i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-zgl-o8or3q1264310p3o8p848q4o90q5206179n40pp4-nqzvavfgengvba";a:3:{i:0;s:18:"out-ihris-i2ce-mty";i:1;R:21167;i:2;R:21933;}s:82:"1228:v2pr-zgl-36pn70o8s495543s7073r11310176769sn7po77q-nqqf_zvzr_glcr_pncnovyvgvrf";a:3:{i:0;R:22557;i:1;R:21167;i:2;R:21933;}s:70:"1228:v2pr-cntrf-1647o9qo6p01sqsq161104srp3n083296844961r-npprff_qravrq";a:3:{i:0;s:20:"out-ihris-i2ce-pages";i:1;R:21167;i:2;R:21933;}s:87:"1228:v2pr-cntrf-201r7s46rn85684ss7915178225r2s647nsp4n1o-lbh_qba'g_unir_crezvffvba_gb_i";a:3:{i:0;R:22560;i:1;R:21167;i:2;R:21933;}s:70:"1228:v2pr-cntrf-1rqn23758or9r36r5r0q2n6n87qr584nnpn0193s-nqzvavfgengbe";a:3:{i:0;R:22560;i:1;R:21167;i:2;R:21933;}s:60:"1228:v2pr-cntrf-322444q3oo52p341s429pn0454s292qp242s315o-nal";a:3:{i:0;R:22560;i:1;R:21167;i:2;R:21933;}s:60:"1228:v2pr-cntrf-6n72085653r4p5or8p7640p868rs787pops063q1-nyy";a:3:{i:0;R:22560;i:1;R:21167;i:2;R:21933;}s:59:"1228:v2pr-csb-69oq4rs9soq0894n22759p3766o859qrsoqrqop8-ivrj";a:3:{i:0;s:18:"out-ihris-i2ce-pfo";i:1;R:21167;i:2;R:21933;}s:71:"1228:v2pr-csb-08qop13605s8585o100536qn8popooqq5r8q5808-f_trarengrq_ba_f";a:3:{i:0;R:22566;i:1;R:21167;i:2;R:21933;}s:73:"1228:v2pr-csb-9824sr25258os8s143n4oo7634poq228rnq1p9r7-fgnaqneqvmrq_sbezf";a:3:{i:0;R:22566;i:1;R:21167;i:2;R:21933;}s:82:"1228:v2pr-csb-6n73o4p1pp50o5o6p182qsp0oq6466255s503o79-trarengr_fgnaqneqvmrq_sbezf";a:3:{i:0;R:22566;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-csb-q795rq83oop4543o5n6023q792qon0s725r6264r-ab_ninvynoyr_fgnaqneqvmrq_sbez";a:3:{i:0;R:22566;i:1;R:21167;i:2;R:21933;}s:82:"1228:v2pr-csb-958925617osnqsr7op7on6sno745p78n0823pqqp-nepuvirq_fgnaqneqvmrq_sbezf";a:3:{i:0;R:22566;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-csb-n3s73osn7psn5n70qorq4np6o6o0po2446sn8606-ab_sbezf_unir_orra_nepuvirq_sb";a:3:{i:0;R:22566;i:1;R:21167;i:2;R:21933;}s:63:"1228:v2pr-csb-sp45s9o7n9n6r8o48s0r28821rp1981804qq1ro6-trarengr";a:3:{i:0;R:22566;i:1;R:21167;i:2;R:21933;}s:62:"1228:v2pr-csb-2621p6sq51n58r1q1q5p491nnp71488647o20224-nepuvir";a:3:{i:0;R:22566;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-csb-41379p3851nnp983576ps11p8525n6686pr4po9o-nyybjf_zvavzny_npprff_gb_gur_c";a:3:{i:0;R:22566;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-csb-811233s588s5o50op6683p1r7sps787so0s632q5-nyybjf_shyy_npprff_gb_gur_ceva";a:3:{i:0;R:22566;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-csb-284pnnn55667560qoqp9r284o86r0026o258809p-nyybjf_npprff_gb_gur_trarengva";a:3:{i:0;R:22566;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-csb-9o607396rrrq71q42462r2s3951r7rqsqr321092-nyybjf_nqzvavfgngvba_bs_nyy_ne";a:3:{i:0;R:22566;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-csb-76n6qs5q27018qs3pp6sn9s151s6o72n1280r9o6-nyybjf_perngvat_bs_nyy_nepuvir";a:3:{i:0;R:22566;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-csb-215so591pn843npr8qp0o57p610qr20777663033-nyybjf_ivrjvat_bs_nyy_nepuvirq";a:3:{i:0;R:22566;i:1;R:21167;i:2;R:21933;}s:73:"1228:v2pr-csb-4764s41616pn2opo1o3r9rnp3s09q49n42984r33-trarengrq_qbphzrag";a:3:{i:0;R:22566;i:1;R:21167;i:2;R:21933;}s:63:"1228:v2pr-csb-r214o8n29923056887o7rqs6635q90qpoo2nor88-qbphzrag";a:3:{i:0;R:22566;i:1;R:21167;i:2;R:21933;}s:59:"1228:v2pr-csb-ro9n4op1p0p153r4r4o042n79113o815o7r3021q-qngr";a:3:{i:0;R:22566;i:1;R:21167;i:2;R:21933;}s:66:"1228:v2pr-csb-55s8rop805r65o5o71qqnsqnr390r3or2opq69ns-qrfpevcgvba";a:3:{i:0;R:22566;i:1;R:21167;i:2;R:21933;}s:70:"1228:v2pr-csb-201n740820q427q0r31093o0op597qq1rn72393s-cevznel_sbez_vq";a:3:{i:0;R:22566;i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-ene-p2o099743sq37p4738p12769376snrnn84p4602s-nepuvir_ercbeg";a:3:{i:0;s:18:"out-ihris-i2ce-rar";i:1;R:21167;i:2;R:21933;}s:68:"1228:v2pr-ene-79p14r106403o39p996s69r3511s87n3q5q5so0q-ivrj_nepuvirf";a:3:{i:0;R:22587;i:1;R:21167;i:2;R:21933;}s:71:"1228:v2pr-ene-22777nqos447r34o17q727669r06p7o3503s97op-nepuvirq_ercbegf";a:3:{i:0;R:22587;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ene-00106so03sqqrp8r1o5s37r0o8pq093o2pnr98or-nyybjf_ivrjvat_bs_nepuivrq_phf";a:3:{i:0;R:22587;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ene-66os15ssn461n9p671nqq2p4nq9p9q6n03p60nss-nyybjf_nepuvivat_bs_phfgbz_erc";a:3:{i:0;R:22587;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ene-6pn1qs236qro301qp03015rs986p3qqo66n6s6n9-nyybjf_qryrgvat_bs_nepuviurq_p";a:3:{i:0;R:22587;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-ene-6206rnnpnq40pprp2or2656n92s70608859s8q6q-nyybjf_shyy_npprff_gb_phfgbz_e";a:3:{i:0;R:22587;i:1;R:21167;i:2;R:21933;}s:70:"1228:v2pr-ene-6npn396291617563066r6q16n036qn8q532843r7-nepuvirq_ercbeg";a:3:{i:0;R:22587;i:1;R:21167;i:2;R:21933;}s:71:"1228:v2pr-ene-08qop13605s8585o100536qn8popooqq5r8q5808-f_trarengrq_ba_f";a:3:{i:0;R:22587;i:1;R:21167;i:2;R:21933;}s:61:"1228:v2pr-ene-rr45p30326o750387589752p0s75r1qq87qqp7r4-ercbeg";a:3:{i:0;R:22587;i:1;R:21167;i:2;R:21933;}s:70:"1228:v2pr-ene-o4o91oo0o6895rr66q491q8s86921879546rss4o-trarengvba_qngr";a:3:{i:0;R:22587;i:1;R:21167;i:2;R:21933;}s:66:"1228:v2pr-ene-53610r2552s934465450qqn76nsq7600n1p1sp42-ercbeg_ivrj";a:3:{i:0;R:22587;i:1;R:21167;i:2;R:21933;}s:60:"1228:v2pr-ene-768r0p1p69573so588s61s1308n015p11468r05s-gvgyr";a:3:{i:0;R:22587;i:1;R:21167;i:2;R:21933;}s:76:"1228:v2pr-ene-qqoqp5sr162q0p3r5p67qppq3qr602ss0799r53q-ivrj_nepuvirq_ercbegf";a:3:{i:0;R:22587;i:1;R:21167;i:2;R:21933;}s:76:"1228:v2pr-fpb-p71394p3ns4q6n642sr54or556r72r1q62262068-nqzvavfgengbe_zbqhyrf";a:3:{i:0;s:18:"out-ihris-i2ce-sco";i:1;R:21167;i:2;R:21933;}s:72:"1228:v2pr-fsn-s5o941r5p05o635o457r04snr5nrs65rr61r2o4s-fryrpg_bar_bcgvba";a:3:{i:0;s:18:"out-ihris-i2ce-sfa";i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-fsn-n3sq55164622oq80q5239972qn44sq44277r17r1-fryrpg_bcgvbaf";a:3:{i:0;R:22604;i:1;R:21167;i:2;R:21933;}s:76:"1228:v2pr-fsn-o8577p99nnpn7s628po921rr68spr4os962909p4-pbasvthengvba_bcgvbaf";a:3:{i:0;R:22604;i:1;R:21167;i:2;R:21933;}s:60:"1228:v2pr-fsn-8qpr170qr238o1srqn2rpq9674rn3pn0q068sopo-inyhr";a:3:{i:0;R:22604;i:1;R:21167;i:2;R:21933;}s:60:"1228:v2pr-fsn-p2qs9o932637sr9q32n0s16qn1p11873398s873q-vaqrk";a:3:{i:0;R:22604;i:1;R:21167;i:2;R:21933;}s:61:"1228:v2pr-fsn-o1564s6o1512posn3psprop9n5onqo6o239954s1-inyhrf";a:3:{i:0;R:22604;i:1;R:21167;i:2;R:21933;}s:61:"1228:v2pr-fsn-23q692s07n3so646n8r54spq2qp724s4rn2rq2p6-cnerag";a:3:{i:0;R:22604;i:1;R:21167;i:2;R:21933;}s:66:"1228:v2pr-fsn-r20oqp892n74rr50r805oq5979onn390955q8q5s-rkcreg_zbqr";a:3:{i:0;R:22604;i:1;R:21167;i:2;R:21933;}s:70:"1228:v2pr-fsn-4s843534435rop6n56n91o8nq02p3484q6s1sq02-aba-rkcreg_zbqr";a:3:{i:0;R:22604;i:1;R:21167;i:2;R:21933;}s:80:"1228:v2pr-fsn-r2302qs20p64ron64r68o1qo729n8o9153or29o5-pbasvthengvba_fho-bcgvbaf";a:3:{i:0;R:22604;i:1;R:21167;i:2;R:21933;}s:59:"1228:v2pr-fsn-88o33r4r12s75np8os792nroqr41s1n090s3n612-gehr";a:3:{i:0;R:22604;i:1;R:21167;i:2;R:21933;}s:60:"1228:v2pr-fsn-97pqoqp7srss827rso082n6o6qq2727237pq49sq-snyfr";a:3:{i:0;R:22604;i:1;R:21167;i:2;R:21933;}s:75:"1228:v2pr-fsn-5r6274pr0q8n81s845q26r2353351rs9s53p6846-purpx_gb_frg_gb_gehr";a:3:{i:0;R:22604;i:1;R:21167;i:2;R:21933;}s:76:"1228:v2pr-fzn-p71394p3ns4q6n642sr54or556r72r1q62262068-nqzvavfgengbe_zbqhyrf";a:3:{i:0;s:18:"out-ihris-i2ce-sma";i:1;R:21167;i:2;R:21933;}s:65:"1228:v2pr-fgho-qqs306526qnrq3056255o209659p671prr878n03-cntr_fgho";a:3:{i:0;s:19:"out-ihris-i2ce-stub";i:1;R:21167;i:2;R:21933;}s:71:"1228:v2pr-gvzre-o8or3q1264310p3o8p848q4o90q5206179n40pp4-nqzvavfgengvba";a:3:{i:0;s:20:"out-ihris-i2ce-timer";i:1;R:21167;i:2;R:21933;}s:75:"1228:v2pr-gvzre-r5751r27081opn8o403os966sr005o98rr1r2552-nqqf_n_gvzre_pynff";a:3:{i:0;R:22622;i:1;R:21167;i:2;R:21933;}s:71:"1228:v2pr-geb-6o7oo134086s015q079q2n3108r8q0q04nn5089s-nqzvavfgre_ebyrf";a:3:{i:0;s:18:"out-ihris-i2ce-tro";i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-geb-8qsq6o27o36sn3050r5616641s396oo397nnq21o-rkvfgvat_ebyrf";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-geb-3o30oppqrnn3o473q586085567375160o415q688-nqq_n_arj_ebyr";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:70:"1228:v2pr-geb-96s057o56nsp03s2nq7081oo091o55757r765845-ebyr_fubeg_anzr";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-geb-nqn84r1838r718qr3pq66s244221sos516424qn5-n_fubeg_anzr_pbafvfgvat_bs_yrg";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:72:"1228:v2pr-geb-72q100qp6s19p767orr86o8npo6818po61p5nqs4-ebyr_qvfcynl_anzr";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-geb-r4p352spos00187s338pn539904rr621853p0r30-n_qvfcynl_anzr_sbe_guvf_ebyr_g";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:64:"1228:v2pr-geb-o075o6768p955nr2q34s998ss34299r4o653qo37-rqvg_ebyr";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:71:"1228:v2pr-geb-8374n457n456q1n98n991116572o6o4766412049-ebyr_vaurevgrapr";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-geb-0038n3no74r7s74n5pq01p85240833760355rr8r-gur_ebyrf_gung_unir_nyy_gur_ev";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:65:"1228:v2pr-geb-676r491qp3882475q30no05006q7prp3p98n938q-ebyr_gnfxf";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-geb-663s5ss881q35n8658p8o4809s2s55sn172rqn07-gur_gnfxf_gung_ner_nffvtarq_gb";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:71:"1228:v2pr-geb-p7o799onrs45onn421no38qn4r6p240qrn058s0p-nqzvavfgre_gnfxf";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-geb-r1sro1o7qp272669n48o3os058179271137929p6-rkvfgvat_gnfxf";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:69:"1228:v2pr-geb-1p6465ssss87r2s2n9p6q94p4r80109n893s55no-nqq_n_arj_gnfx";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:70:"1228:v2pr-geb-91r34753384n9os7o957ps21p65o770p22087o2o-gnfx_fubeg_anzr";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-geb-p072o91rr32q32qoq19ss5p01n827o5qpq492n2o-n_fubeg_anzr_pbafvfgvat_bs_yrg";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:71:"1228:v2pr-geb-o2386426n37qor6q88225r8or11o1437rsnppr46-gnfx_qrfpevcgvba";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-geb-op3qs42s7n3q9ns0q388n7rr971o51s761512308-n_fubeg_qrfpevcgvba_bs_guvf_gn";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-geb-8o5q5946n0330o1o0o8rr39o3sp404pn9341on60-guvf_vf_n_ebyr_svkrq_ol_gur_fl";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:81:"1228:v2pr-geb-3oo6r22o8976p480oo957roo950ss0s7473po34n-nqzvavfgre_ebyrf_naq_gnfxf";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-geb-5qs68n7ss04or54p6qoo420160o9p6p0p39o40q9-urer_lbh_znl_nqzvavfgre_gur_eb";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-geb-q855ppnr209sqq222166s07r79n09q193o37p177-n_ebyr_vf_hfrq_jura_perngvat_n";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-geb-348n53q0rsqp55427oso62184oo54pn51q038839-n_gnfxf_vf_n_fcrpvsvp_npgvba_g";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:64:"1228:v2pr-geb-9q0r05q653pr25r740r45ns2n218r023310635o9-rqvg_gnfx";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-geb-q5rq6s3349n624no86r638on196oq09pq6s613o5-n_qrfpevcgvba_sbe_guvf_gnfx_gu";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:65:"1228:v2pr-geb-9282885sp5n895op2s9o8r88s6sq10p2q4225254-gnfx_gnfxf";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-geb-461611ro24oop3ss98po73p4685p8630p8nn8nr8-gur_gnfxf_gung_ner_nffvtarq_gb";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-geb-r16n3pr3on45ro8s7668sr2s1rn4po76on9s9s80-nyybjf_zvavzny_npprff_gb_gur_g";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-geb-86241772o83267r4qn33sp6pqr461002071262so-nyybjf_rqvg_npprff_gb_gur_gnfx";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-geb-p325125s2o8sqpr0485oo39rno43s4q38192pr6r-nyybjf_rqvg_npprff_gb_gur_ebyr";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-geb-4qrn90rrn7o80s1n1497q540372qpq5n6ors58r3-nyybjf_pbzcyrgr_npprff_gb_gur";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:81:"1228:v2pr-geb-60pn962rs74nr0rs4048o0180n382q736q363qp1-nqzvavfgre_gnfxf_naq_ebyrf";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-geb-5s1589q376s1r170300q25nrqqn8pqr4pr276809-n_qvfcynl_anzr_sbe_guvf_ebyr_g";a:3:{i:0;R:22625;i:1;R:21167;i:2;R:21933;}s:67:"1228:v2pr-gfr-600n6nqrp9583s1188qo8pos2so1641nos819rn4-fryrpg_inyhr";a:3:{i:0;s:18:"out-ihris-i2ce-tse";i:1;R:21167;i:2;R:21933;}s:71:"1228:v2pr-hnp-2pr2151q552p83n74q5o5p951o22qp1p25p11p9n-nqzvavfgre_hfref";a:3:{i:0;s:18:"out-ihris-i2ce-uac";i:1;R:21167;i:2;R:21933;}s:71:"1228:v2pr-hnq-2pr2151q552p83n74q5o5p951o22qp1p25p11p9n-nqzvavfgre_hfref";a:3:{i:0;s:18:"out-ihris-i2ce-uad";i:1;R:21167;i:2;R:21933;}s:83:"1228:v2pr-hsb-n65qorqq428355113rs661ososr584q931q5r74s-erghea_(qb_abg_fnir_punatrf)";a:3:{i:0;s:18:"out-ihris-i2ce-ufo";i:1;R:21167;i:2;R:21933;}s:71:"1228:v2pr-hsb-2pr2151q552p83n74q5o5p951o22qp1p25p11p9n-nqzvavfgre_hfref";a:3:{i:0;R:22666;i:1;R:21167;i:2;R:21933;}s:74:"1228:v2pr-hsb-sq171q47595379o43629404s33627s116008779p-fryrpg_hfre_gb_rqvg";a:3:{i:0;R:22666;i:1;R:21167;i:2;R:21933;}s:67:"1228:v2pr-hsb-6r74on145633q73s1so65s038qo823p6n37ro0s2-nqq_arj_hfre";a:3:{i:0;R:22666;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-hsb-sq7p37no238o9q3513508s47882s3sq7455781sr-pna_perngr_n_hfre_ba_gur_flfgr";a:3:{i:0;R:22666;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-hsb-s4p926p3r7n9q951p9or3681836827036noo4s5q-pna_rqvg_nyy_gur_hfref_va_gur";a:3:{i:0;R:22666;i:1;R:21167;i:2;R:21933;}s:74:"1228:v2pr-hsb-q77nsrr644no30526sp530s0o432ppp82s6n18s2-znantr_hfref_npprff";a:3:{i:0;R:22666;i:1;R:21167;i:2;R:21933;}s:59:"1228:v2pr-hsb-p3s104q1365744o538osqr9s4nqo6n6qs4o80355-ebyr";a:3:{i:0;R:22666;i:1;R:21167;i:2;R:21933;}s:73:"1228:v2pr-hsb-s5818ro5s2nn17656r2nnnrqq3915r7nnpr121rn-pna_nffvta_gb_hfre";a:3:{i:0;R:22666;i:1;R:21167;i:2;R:21933;}s:65:"1228:v2pr-hsb-nnqn59587229nqn11p0p97888238nps3372p4047-gevpxyr_hc";a:3:{i:0;R:22666;i:1;R:21167;i:2;R:21933;}s:63:"1228:v2pr-hsb-84p29015qr33r5q22422382n372pnon5p58s8p01-hfreanzr";a:3:{i:0;R:22666;i:1;R:21167;i:2;R:21933;}s:84:"1228:v2pr-hsb-r7os1r666326s049q353qq18441776330n36565o-cnffjbeq_(yrnir_oynax_gb_xrrc";a:3:{i:0;R:22666;i:1;R:21167;i:2;R:21933;}s:76:"1228:v2pr-hsb-q8753n17594511n7308o14n08s3639479ro6sn2p-trarengr_arj_cnffjbeq";a:3:{i:0;R:22666;i:1;R:21167;i:2;R:21933;}s:85:"1228:v2pr-hsb-q33ro7pr77o44268n84roo26no5s86on2n9nqrnn-pna_perngr_be_rqvg_gur_hfref_v";a:3:{i:0;R:22666;i:1;R:21167;i:2;R:21933;}s:62:"1228:v2pr-hsb-04n212215rs9sos686q280802ro81rr7n6r681pq-pbasvez";a:3:{i:0;R:22666;i:1;R:21167;i:2;R:21933;}s:85:"1228:zna-nppv-q5q36371nnrp14139qnn2orr776qp47orr6o6q5s-pna_rqvg_gur_jbexcynpr_vawhevr";a:3:{i:0;s:21:"out-ihris-manage-acci";i:1;R:21167;i:2;s:22:"out-ihris-manage-0-all";}s:85:"1228:zna-nppv-1n130n27s991n568n9r5731oss204posn80on5ss-pna_ivrj_gur_jbxecynpr_vawhevr";a:3:{i:0;R:22682;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-nppv-nps78q5p19qrn8ss2060op3r2p03prrnrnos75sp-rqvg_gur_jbexcynpr_nppvqrag_gl";a:3:{i:0;R:22682;i:1;R:21167;i:2;R:22683;}s:63:"1228:zna-nppv-pr926764o220o3nn37p8n207s8o53p27q404r595-nppvqrag";a:3:{i:0;R:22682;i:1;R:21167;i:2;R:22683;}s:78:"1228:zna-nppv-q95008r179n0rr0207q33q3390772q790r29p95r-jbexcynpr_nppvqrag_glcr";a:3:{i:0;R:22682;i:1;R:21167;i:2;R:22683;}s:72:"1228:zna-nppv-8oqro106q1o25p3qr3spr825rp39n9rnp3rr29nr-qngr_bs_bppherapr";a:3:{i:0;R:22682;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-nppv-924n5n25p6rp1n8567r1163n46sp08s981r23r5q-nppvqrag_glcr";a:3:{i:0;R:22682;i:1;R:21167;i:2;R:22683;}s:77:"1228:zna-nppv-r3qpn3p950oq6q36147770o512726p9r4r8885o0-fgneg_bs_nccyvpnovyvgl";a:3:{i:0;R:22682;i:1;R:21167;i:2;R:22683;}s:75:"1228:zna-nppv-o9sq472o15p704o7s42116205240n6q10pq2375n-raq_bs_nccyvpnovyvgl";a:3:{i:0;R:22682;i:1;R:21167;i:2;R:22683;}s:73:"1228:zna-nppv-893p874nrq1qqn28692ss72715p7o23o361snr93-sbyybj-hc_erdhverq";a:3:{i:0;R:22682;i:1;R:21167;i:2;R:22683;}s:70:"1228:zna-nppv-34s68293qqr3qrq16qsq4o4s99poq361o0970o02-crbcyr_vaibyirq";a:3:{i:0;R:22682;i:1;R:21167;i:2;R:22683;}s:84:"1228:zna-nppv-119q4n55p546782s5p8p67nn94s4q21s89o0p033-nqq_hcqngr_jbexcynpr_nppvqrag";a:3:{i:0;R:22682;i:1;R:21167;i:2;R:22683;}s:76:"1228:zna-nppv-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;R:22682;i:1;R:21167;i:2;R:22683;}s:78:"1228:zna-nppv-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:22682;i:1;R:21167;i:2;R:22683;}s:83:"1228:zna-nppv-r1q6619118n26qo396487825os20q634r6n30q18-fryrpg_nabgure_nppvqrag_glcr";a:3:{i:0;R:22682;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-nppv-os723r8p4s2903os7650p6s6n63s8p0qor396r91-jbexcynpr_nppvqrag_vasbezngvba";a:3:{i:0;R:22682;i:1;R:21167;i:2;R:22683;}s:79:"1228:zna-nppv-75r9654onr0nq91n9qp163q5210or416pq0qq323-pbeerpg_guvf_vasbezngvba";a:3:{i:0;R:22682;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-nppv-p48048q1on06648r27s0919rq4226p5r211ss94n-ivrj_gur_jbexcynpr_nppvqrag_gl";a:3:{i:0;R:22682;i:1;R:21167;i:2;R:22683;}s:71:"1228:zna-nccn-03sn9ns604q41pso025rrs40oo4n46s7o81137s9-vagreivrj_erpbeq";a:3:{i:0;s:21:"out-ihris-manage-appa";i:1;R:21167;i:2;R:22683;}s:73:"1228:zna-nccn-p5669r28op13q98q5p85qpn67756q4nr58o47pnr-erpbeq_bs_qrpvfvba";a:3:{i:0;R:22702;i:1;R:21167;i:2;R:22683;}s:70:"1228:zna-nccy-934q15nq367r3p1qq43sqop8p1poqo76no56pn5p-uvevat_qrpvfvba";a:3:{i:0;s:21:"out-ihris-manage-appl";i:1;R:21167;i:2;R:22683;}s:76:"1228:zna-nccy-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:78:"1228:zna-nccy-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:72:"1228:zna-nccy-9nn9r2sq6os2r9s5sq0r5qs5oo0o12o10s9r0798-vagreivrj_qrgnvyf";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-nccy-9s07pn9464o18394osr469p5624p95sn712ps8q8-fryrpg_gur_nccyvpnag_anzr_oryb";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:71:"1228:zna-nccy-7qpsr8no930r4393q7rsno7qs1ps1q8876761oo9-znxr_n_wbo_bssre";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-nccy-2627qsr5509248s92083nn85r36154q70qsprnp7-gurer_ner_ab_nccyvpnagf_sbe_gu";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:75:"1228:zna-nccy-s18ro66q997o2psrsn36rro32105r0r552p41p36-cbfvgvba_vasbezngvba";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:74:"1228:zna-nccy-10481s3403s9s43187s06o7oq655o72s5oo1n569-nccyvpnag_dhrfgvbaf";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:83:"1228:zna-nccy-n74p872298r85qr83o8s7s028oro8ps6sp0p810o-bcra_cbfvgvba(f)_nccyvrq_sbe";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:72:"1228:zna-nccy-2qsrs0p4p5rp90p341op98oq29q7r9n6s5s32sq4-erivrj_nccyvpnagf";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:61:"1228:zna-nccy-63143o6s8007o98p53pn2149822777o3566s9241-erghea";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-nccy-p9538r98nn103973p0571219s3o6121r7nq75037-fryrpg_gur_bcra_cbfvgvba_orybj";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-nccy-p7o1p942nss6r64n7r3o051n4o3790521641n7ns-pna_ivrj_cbfvgvba_qrpvfvba_puv";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-nccy-5n52rpq6pr098393q328p0nn658q64597651r3on-pna_rqvg_cbfvgvba_qrpvfvba_puv";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-nccy-4r0r2nn7p8r56r0896qqsrrnn4s23p2p716r3870-pna_ivrj_cbfvgvba_vagreivrj_pu";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-nccy-np0s42614p87071964rsp8n8s269r2r0854n7n99-pna_rqvg_cbfvgvba_vagreivrj_pu";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:64:"1228:zna-nccy-1560qp40n1r12sn5qs4q3s16rpnq86n5202737o1-nccyvpnag";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:73:"1228:zna-nccy-oqp93s64490n78rsrop4q0395n04ppno020rpos9-cbfvgvba_vagreivrj";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:72:"1228:zna-nccy-1q42rp6s672773q79387opo3nr4o922984o13sor-cbfvgvba_qrpvfvba";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:66:"1228:zna-nccy-83ns24727o3ns34oqq22s8281so85on90q026rp9-cbfvgvba(f)";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-nccy-0osson499p7o83p045s60s2n931241902no4p1r4-unir_lbh_rire_orra_pbaivpgrq_b";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-nccy-472prrq641op5s39r31sq31rpnsr8p52s40qqpps-vs_lrf,_tvir_gur_pvephzfgnaprf";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-nccy-1510spo33rp1r954r251p8qr3079s3r88sr62p7s-va_nqqvgvba_gb_lbhe_jbex_uvfgb";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-nccy-371n764r9pp319rr41pp5r169166029o634q6819-ubj_qvq_lbh_urne_bs_guvf_bcrav";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:74:"1228:zna-nccy-77873s3078nr6s751238poo61oo91o8089r34p7p-jura_pna_lbh_fgneg?";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:67:"1228:zna-nccy-518237p45r961412r8s9po8o231o23n6635p6oo3-qrfverq_jntr";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:84:"1228:zna-nccy-3n1rq73so265886437r5s66oo2n25qsp5239n4r7-ner_lbh_ybbxvat_sbe_shyy-gvzr";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-nccy-p8r16pnsq72r45771p65spqr9p9o541ss4r5sonp-vs_ab,_jung_ubhef_ner_lbh_ninv";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:72:"1228:zna-nccy-nnn06p50o78qs9rn8sq031nsrn61n9r23s3pn31r-qngr_bs_vagreivrj";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:71:"1228:zna-nccy-q4757oo127s2s8760os4s2n7o34qs02o5p807290-crbcyr_nggraqvat";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:63:"1228:zna-nccy-spr06r20r5s7s74nnpppno40o59o75n56p8s7305-pbzzragf";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:71:"1228:zna-nccy-65ss9931o31rr7907n39r14s5n2766084s9o084o-qngr_bs_qrpvfvba";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:72:"1228:zna-nccy-5r59po5ps01r0no29n88q172210n45p10771q79o-znxr_n_wbo_bssre?";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:77:"1228:zna-nccy-71052r6n273n02oqs2p0299s64p590rp201pq553-nqq_hcqngr_nccyvpngvba";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:83:"1228:zna-nccy-r4468o59919991s2997snonoor03qr94q507ro6r-nqq_hcqngr_cbfvgvba_qrpvfvba";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:84:"1228:zna-nccy-72r4943n3p00784959545soqosn50r7q2o83qo07-nqq_hcqngr_cbfvgvba_vagreivrj";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:59:"1228:zna-nccy-725r5rq60rn63o45q2p6610n0s874sq455rr2164-bbcf";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-nccy-qn6ps205q8n918525n00rn607ssqr6o180285397-pna_ivrj_nccyvpngvba_puvyq_sbe";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-nccy-no02s002p824000n08q7333s5o22ssnrs6q6sr48-pna_rqvg_nccyvpngvba_puvyq_sbe";a:3:{i:0;R:22705;i:1;R:21167;i:2;R:22683;}s:76:"1228:zna-orar-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;s:21:"out-ihris-manage-bene";i:1;R:21167;i:2;R:22683;}s:78:"1228:zna-orar-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:22746;i:1;R:21167;i:2;R:22683;}s:62:"1228:zna-orar-0r7sq98o73pop6o63617r2rqp710p60q6r927r27-orarsvg";a:3:{i:0;R:22746;i:1;R:21167;i:2;R:22683;}s:82:"1228:zna-orar-r782906sno3pop6n16sn1qq20s2rpr63991p6o15-fryrpg_nabgure_orarsvg_glcr";a:3:{i:0;R:22746;i:1;R:21167;i:2;R:22683;}s:67:"1228:zna-orar-q9r3530nn63705977n4pnqq908155827s19083oq-orarsvg_glcr";a:3:{i:0;R:22746;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-orar-r57n26475n8p2475rn5648no1r9q77q2o8s3o62p-pna_ivrj_orarsvg_puvyq_sbez_bs";a:3:{i:0;R:22746;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-orar-0o07nqpo275nrn40o28n0q4n161q9qr9577on2so-pna_rqvg_orarsvg_puvyq_sbezf_b";a:3:{i:0;R:22746;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-orar-7r08924oon13n0ns11r47op197287s0s70q8r3s8-pna_rqvg_gur_orarsvg_glcr_qngn";a:3:{i:0;R:22746;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-orar-oo46n8oq7o89r1sq2p5339753p0q2837028onn9s-pna_ivrj_gur_orarsvg_glcr_qngn";a:3:{i:0;R:22746;i:1;R:21167;i:2;R:22683;}s:59:"1228:zna-orar-q9p768782rn8653q485so3o7s5non21po2pn7os3-bapr";a:3:{i:0;R:22746;i:1;R:21167;i:2;R:22683;}s:61:"1228:zna-orar-158s3qn592759369066s2361qq3q1387s574os7n-jrrxyl";a:3:{i:0;R:22746;i:1;R:21167;i:2;R:22683;}s:62:"1228:zna-orar-q31rqo7o8n94oonsr2184q44ooq83463r1qq1158-zbaguyl";a:3:{i:0;R:22746;i:1;R:21167;i:2;R:22683;}s:61:"1228:zna-orar-7622ro5nn42qrr6rn6p65s47o2410246p3p3qn7q-lrneyl";a:3:{i:0;R:22746;i:1;R:21167;i:2;R:22683;}s:74:"1228:zna-orar-130694p715463osnnr67652105snr5o75pn2o08r-nqq_hcqngr_orarsvgf";a:3:{i:0;R:22746;i:1;R:21167;i:2;R:22683;}s:73:"1228:zna-orar-sp576pr3297r67ooo92qn6p3039p37orq47r7505-orarsvg_erpheerapr";a:3:{i:0;R:22746;i:1;R:21167;i:2;R:22683;}s:61:"1228:zna-orar-43qp8532s7r57or250q7397qr3q14085q51516s0-nzbhag";a:3:{i:0;R:22746;i:1;R:21167;i:2;R:22683;}s:61:"1228:zna-orar-6qn13nqqo000o67q42n6q66391713819r634149s-fbhepr";a:3:{i:0;R:22746;i:1;R:21167;i:2;R:22683;}s:65:"1228:zna-orar-9q7no1n557965or0rnr6205p2q860p45n3rnsp11-fgneg_qngr";a:3:{i:0;R:22746;i:1;R:21167;i:2;R:22683;}s:63:"1228:zna-orar-84o1478125890onq1pp4o36q6q3781773o3sqr5n-raq_qngr";a:3:{i:0;R:22746;i:1;R:21167;i:2;R:22683;}s:75:"1228:zna-orar-93ssnqp564762p90279ro8r93166rqp6psp90p35-erpheerapr_serdhrapl";a:3:{i:0;R:22746;i:1;R:21167;i:2;R:22683;}s:61:"1228:zna-pban-1p54132o8r5n9sn44n9n1n7q30o1or36no3p4247-erpbeq";a:3:{i:0;s:21:"out-ihris-manage-cona";i:1;R:21167;i:2;R:22683;}s:76:"1228:zna-pbas-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;s:21:"out-ihris-manage-conf";i:1;R:21167;i:2;R:22683;}s:78:"1228:zna-pbas-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:22769;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pbas-r4q5836o347o491o2psn062n4sp928sn86nrp90n-fryrpg_nabgure_pbasvezngvba_gl";a:3:{i:0;R:22769;i:1;R:21167;i:2;R:22683;}s:72:"1228:zna-pbas-6q12sqoq9os78opr72s4p2ss4353ns3s440rp462-pbasvezngvba_glcr";a:3:{i:0;R:22769;i:1;R:21167;i:2;R:22683;}s:75:"1228:zna-pbas-7640827o329p7641190547ns23on5q9q5379340o-pbasvezngvba_qrgnvyf";a:3:{i:0;R:22769;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pbas-1r1p43p5579s811639on85p34n63r2r46rq14949-pna_ivrj_pbasvezngvba_puvyq_sb";a:3:{i:0;R:22769;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pbas-r7o7q6n0n40ppq0656p9210s143np4s40p313825-pna_rqvg_pbasvezngvba_puvyq_sb";a:3:{i:0;R:22769;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pbas-74r6rp55r8or7r5prp347n02q73o463247r50snn-pna_rqvg_gur_pbasvezngvba_glcr";a:3:{i:0;R:22769;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pbas-847qns414458r16r5o77569363prso21s69o254n-pna_ivrj_gur_pbasvezngvba_glcr";a:3:{i:0;R:22769;i:1;R:21167;i:2;R:22683;}s:78:"1228:zna-pbas-7p4nn42qn840n41q31qr5p6s7822p8n0pp94q026-nqq_hcqngr_pbasvezngvba";a:3:{i:0;R:22769;i:1;R:21167;i:2;R:22683;}s:67:"1228:zna-pbas-3424rqp2354p7p55s6ro740o673q349o02q27p8q-pbasvezngvba";a:3:{i:0;R:22769;i:1;R:21167;i:2;R:22683;}s:83:"1228:zna-pbas-323s66noqqr9761p9qrq739q8r13sop44n39osnp-cebongvbanel_crevbq_(zbaguf)";a:3:{i:0;R:22769;i:1;R:21167;i:2;R:22683;}s:69:"1228:zna-pbas-nq45p7190r7125165655p6o522224o2ppo92ps15-nffbpvngrq_wbo";a:3:{i:0;R:22769;i:1;R:21167;i:2;R:22683;}s:59:"1228:zna-pbas-709n23220s2p3q64q1r1q6q18p4q5280s8q82spn-anzr";a:3:{i:0;R:22769;i:1;R:21167;i:2;R:22683;}s:60:"1228:zna-pbas-n4nrsn35p3o5nq26pq56s18p500001o89s66n9pr-inyvq";a:3:{i:0;R:22769;i:1;R:21167;i:2;R:22683;}s:59:"1228:zna-pbas-ro9n4op1p0p153r4r4o042n79113o815o7r3021q-qngr";a:3:{i:0;R:22769;i:1;R:21167;i:2;R:22683;}s:71:"1228:zna-pesc-q8opss266onq9sq235q5oq3pp050s1pos0p9o796-svyyrq_cbfvgvbaf";a:3:{i:0;s:21:"out-ihris-manage-crfp";i:1;R:21167;i:2;R:22683;}s:67:"1228:zna-pesc-n8q84714r9ro65rsr5rpn69rq29qpr7n0q6p6811-svefg_fnynel";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:66:"1228:zna-pesc-np841oq797719rs4ons97r17n270012pq5nprqr7-ynfg_fnynel";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:61:"1228:zna-pesc-8p41nr88467sr5oonq09spq488662o25p3rp5333-crefba";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:72:"1228:zna-pesc-q64o999q07234qr6r11067n55ps0sp20rp893q10-rzcyblrr_cbfvgvba";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:74:"1228:zna-pesc-r0rq0346rp9np8273n66s036or6rnp2qr36558q3-fhcreivfbe_cbfvgvba";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:81:"1228:zna-pesc-8r7rnp1q5r2p0no5n6p46pq6711015468108pr34-fhcreivfbe_crefba_cbfvgvba";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:72:"1228:zna-pesc-367o197s8q13r2srqn1p7944p0o32ss0qsoqp3sn-fhcreivfbe_crefba";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:72:"1228:zna-pesc-o81q20p4q352669162r4s4533or664sso58sr246-crefba_fgneg_qngr";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:71:"1228:zna-pesc-0pq7s6o3r49s76536312ssps6qnp6022qo92p7o4-fgneg_qngr_nsgre";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:72:"1228:zna-pesc-5n031ss574n819s979940346prss274639qs8005-fgneg_qngr_orsber";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:70:"1228:zna-pesc-n2q2nn57qs1ss0505rs500r47n96p8onssn5960p-crefba_raq_qngr";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:69:"1228:zna-pesc-5n1p2qq5189039po9p2oqs34n7s6o300rr3o5p90-raq_qngr_nsgre";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:70:"1228:zna-pesc-1os5959o98r3646q47s8nn274p41084181np43rs-raq_qngr_orsber";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:62:"1228:zna-pesc-77qspn2n56s9o1ssp2o6687r230088ps86sop074-fheanzr";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:64:"1228:zna-pesc-ps23on48p06q7r6q4o41n205oso3pnp3oo7o1r38-svefganzr";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:64:"1228:zna-pesc-q4297792511794487r9q5q68553sn85pqp117n43-wbo_gvgyr";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:69:"1228:zna-pesc-11n5os1rs7367s3s3ros698s477r15r265nr7sq5-cbfvgvba_gvgyr";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:63:"1228:zna-pesc-pq4q0p5r1409rp6o001818r92900q4076s54nr88-snpvyvgl";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:65:"1228:zna-pesc-qo40106n405135q4021p1rssso756063ppo2315s-qrcnegzrag";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:70:"1228:zna-pesc-0963p9685r3oo93s790496999n887972198p5r93-cbfvgvba_fgnghf";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:71:"1228:zna-pesc-po6o2q3289o764r98522qnn1qrqs84r77rq64s8s-fhcreivfbe_gvgyr";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:76:"1228:zna-pesc-3p65q34003psp2sr84488562s7rqn8945qo33094-fhcreivfbe_fgneg_qngr";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:73:"1228:zna-pesc-60126961noo200n1q496s08sp10s979rp889n4n4-fhcreivfbe_fheanzr";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:75:"1228:zna-pesc-2oo2sn7q2s9219pnnn8ons9o6o2966pp2rn17n31-fhcreivfbe_svefganzr";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:78:"1228:zna-pesc-75q9rrpronr2spn8704o666n49soq044s7o67719-svyyrq_cbfvgvbaf_rkcbeg";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:84:"1228:zna-pesc-6r8q79r1o9272q0n576798qpss41ppq11203n035-uvfgbevpny_yvfg_bs_nyy_svyyrq";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pesc-7s68p4089n19q2qnq79q5q7q3430s4n510r10o63-gur_svefg_fnynel_sbe_guvf_cbfv";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pesc-so4748nrqppn0no267077129p798846297ss33o3-gur_ynfg_fnynel_sbe_guvf_cbfvg";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pesc-71sq158rqp686q82oo007694440s6n38836o8ror-gur_crefba_svyyvat_guvf_cbfvgv";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:75:"1228:zna-pesc-74n2q4945o5psso811r2179s0roo77n3s05p005p-gur_cbfvgvba_qrgnvyf";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pesc-9r9o46ono00n2801s672o3r356n089q7794pqo62-gur_cbfvgvba_qrgnvyf_sbe_gur_f";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pesc-65ps9n2q0n3onn4s381q683po81sp9p769s1333o-gur_pheerag_be_zbfg_erprag_cre";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pesc-9s0p2p8s9523s7997931pp45s2007n9r532sq3s9-gur_crefba_zbfg_erpragyl_svyyv";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pesc-2n38154626n407s68on44538r9p1qnrq7320r77q-n_uvfgbevpny_ercbeg_bs_nyy_svy";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pesc-328rns8p544q596s1788r90o86so9255s39851o0-n_yvfg_bs_uvfgbevpny_svyyrq_cb";a:3:{i:0;R:22786;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-pese-o45p71p005ro29nn6s1n6o79n1po55191osqp60q-snpvyvgl_yvfg";a:3:{i:0;s:21:"out-ihris-manage-crfr";i:1;R:21167;i:2;R:22683;}s:75:"1228:zna-pese-0s204pprr97qp5nopo856n5nop25343q91501np6-snpvyvgl_vasbezngvba";a:3:{i:0;R:22823;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-pese-prqq5473o0139q68o4027rn6s118s9o2n01507s8-snpvyvgl_glcr";a:3:{i:0;R:22823;i:1;R:21167;i:2;R:22683;}s:71:"1228:zna-pese-o17np30p6213qs2poq0qono532po2p19q773sn5s-snpvyvgl_pbagnpg";a:3:{i:0;R:22823;i:1;R:21167;i:2;R:22683;}s:63:"1228:zna-pese-p0po139ppr34769so7rq9onsp15290r91ps7736p-qvfgevpg";a:3:{i:0;R:22823;i:1;R:21167;i:2;R:22683;}s:71:"1228:zna-pese-706o5nq35p4ppq3p91n84854p4prqoo66300snno-snpvyvgl_glcr_vq";a:3:{i:0;R:22823;i:1;R:21167;i:2;R:22683;}s:72:"1228:zna-pese-s5447q4o1s32sr6p86s5s9o4628os8747qpq7q73-snpvyvgl_ybpngvba";a:3:{i:0;R:22823;i:1;R:21167;i:2;R:22683;}s:75:"1228:zna-pese-788736o67r0991rr0572515ssp51598o94179664-snpvyvgl_ybpngvba_vq";a:3:{i:0;R:22823;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-pese-169sorn633239o5s4qs77n909prnoo86sn2003s4-snpvyvgl_anzr";a:3:{i:0;R:22823;i:1;R:21167;i:2;R:22683;}s:63:"1228:zna-pese-q219p68101s532qr10nqq2ps42so9qorpn73q3or-ybpngvba";a:3:{i:0;R:22823;i:1;R:21167;i:2;R:22683;}s:70:"1228:zna-pese-r6nso989237759p66s5o0r4226971s840rsq5r7r-znvyvat_nqqerff";a:3:{i:0;R:22823;i:1;R:21167;i:2;R:22683;}s:71:"1228:zna-pese-r127s171q4898393r755503ss466pos54s85634o-gryrcubar_ahzore";a:3:{i:0;R:22823;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-pese-09on557sq106s1019rp6739113r3r28qrn4oq9n6-rznvy_nqqerff";a:3:{i:0;R:22823;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-pese-1210o74q42rq273677p80q9360n5r5r9n9q423s7-pbagnpg_abgrf";a:3:{i:0;R:22823;i:1;R:21167;i:2;R:22683;}s:70:"1228:zna-pese-2o3p2s35o6sr567267625n4p04poqr26s43009n7-snpvyvgl_ercbeg";a:3:{i:0;R:22823;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pese-0176569n405pr5rrso5563663q548687p8p114or-gur_snpvyvgl_glcr_sbe_guvf_snp";a:3:{i:0;R:22823;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pese-r45q6n09828329on0q0o8s5r7pr418r191n82s36-gur_pbagnpg_vasbezngvba_sbe_gu";a:3:{i:0;R:22823;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pese-s1p1184srr3r97q25sn83n05n8o63pnq3non83pr-gur_qvfgevpg_jurer_guvf_snpvyv";a:3:{i:0;R:22823;i:1;R:21167;i:2;R:22683;}s:79:"1228:zna-pese-610or15o1964o95s811n9s9p1rs9024480qp7so4-n_yvfg_bs_nyy_snpvyvgvrf";a:3:{i:0;R:22823;i:1;R:21167;i:2;R:22683;}s:60:"1228:zna-pece-2586n9r4r3on9092547r3rnp14r105p5ssoqn37o-pnqer";a:3:{i:0;s:21:"out-ihris-manage-crpr";i:1;R:21167;i:2;R:22683;}s:69:"1228:zna-pece-94p2n3189r7s7885455350p4p7n8qs2q0q6nq1q1-pynffvsvpngvba";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:58:"1228:zna-pece-30p8po83o9npq93ornn32086336p36po77p065q9-wbo";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:63:"1228:zna-pece-pq4q0p5r1409rp6o001818r92900q4076s54nr88-snpvyvgl";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:65:"1228:zna-pece-qo40106n405135q4021p1rssso756063ppo2315s-qrcnegzrag";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-pece-4nq157o8qs99104ors525pq63n24r05o3s196r4n-ynfg_cbfvgvba";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:71:"1228:zna-pece-959r8s40n058403pp14pr8750n4n374n3r42p5o5-pheerag_cbfvgvba";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:64:"1228:zna-pece-pq4683snqs7005rpn07r4q6267qqoo19ropo91sn-cbfvgvbaf";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-pece-4qs8082np0pr98nn07or936s5qo77206srrrr00n-cbfvgvba_yvfg";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:59:"1228:zna-pece-nqnp69379n626p2436948n4rs1792p7q719rs929-pbqr";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:67:"1228:zna-pece-ro466os5sq1588s9sn7s0327o45o8064361603s0-cbfvgvba_wbo";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:60:"1228:zna-pece-768r0p1p69573so588s61s1308n015p11468r05s-gvgyr";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:66:"1228:zna-pece-pqn91349446q5r24r33sr03q7o1554681ppr55q3-snpvyvgl_vq";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-pece-887ns9n9435850rp4nrr0o82s5r583opp48s33q8-qrcnegzrag_vq";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:66:"1228:zna-pece-8r7487925o66482909244039q0o07n73so3334sn-cbfgrq_qngr";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:61:"1228:zna-pece-onr7q5or70820rq56467oq9n63744r23o47oq711-fgnghf";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:64:"1228:zna-pece-q4297792511794487r9q5q68553sn85pqp117n43-wbo_gvgyr";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:63:"1228:zna-pece-43qon12q7o05212364504o5p90447o942o38nnon-pnqer_vq";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:72:"1228:zna-pece-8rq14p9p6s0s3p497s99s2on1s65r0r3n50o1088-pynffvsvpngvba_vq";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:64:"1228:zna-pece-04r563o4697n23p4p37pnq7542rr37s1q3104s33-bcra_qngr";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:66:"1228:zna-pece-sq80ro81sq1174p9pqs0p1870033o2393s5p8r9s-svyyrq_qngr";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:64:"1228:zna-pece-93o3r25n5osp134p5968qrp2o1q2pnqoq74q8853-qnlf_bcra";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:77:"1228:zna-pece-939p78nqp74r24nn73176597q3qs4pn8p114590q-cbfvgvba_bcra_qhengvba";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:71:"1228:zna-pece-32s501789nr4s9802q0pqq62s96n724o8qnss8pp-cbfvgvba_ercbegf";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pece-o9qsr8o3s87166s57p63ps686o01q0rp0836p756-gur_pnqer_nffbpvngrq_jvgu_guvf";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:84:"1228:zna-pece-n2n3opqnp9p2n54o6ros68o82ooo169or345335o-gur_pynffvsvpngvba_nffbpvngrq";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pece-q4r8p5n8p1q890op960q48q2o16po7p54po1n4n2-gur_wbo_nffbpvngrq_jvgu_guvf_c";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pece-26sp02579s5nq4453s122290o179n2954n6nrs02-gur_snpvyvgl_jurer_guvf_cbfvgv";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pece-ro570sp51586534984qrsponr8201o514559q707-gur_qrcnegzrag_guvf_cbfvgvba_o";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pece-r9ns57765s5296r7685570s850o69p14n5019p02-gur_ynfg_crefba_gung_svyyrq_gu";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pece-ss442q082nn6024q913n7289rq915s7noq439375-gur_pheerag_crefba_svyyvat_guv";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pece-4spn7099313proo5669o02s54s10n06q5042pnr3-gur_ahzore_bs_qnlf_guvf_cbfvgv";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pece-n40n4ro6682r849nns4o265p4roq0069qqn561n2-nyy_vasbezngvba_eryngrq_gb_n_c";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:80:"1228:zna-pece-03s29527s70056oqqn1qo6518622rn82r113n9rp-qrgnvyf_sbe_nyy_cbfvgvbaf";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:78:"1228:zna-pece-s4pn57n5p6r8np0q6n82o249942r49404r372p03-n_yvfg_bs_nyy_cbfvgvbaf";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pece-66p6np7q1q443orr447s4126pq19933q2s2r6473-gur_yratgu_va_qnlf_rnpu_cbfvgv";a:3:{i:0;R:22843;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-pefc-o584q2730q3ssq197989q6809s8386709n33p6o9-frnepu_crbcyr";a:3:{i:0;s:21:"out-ihris-manage-crsp";i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pefc-s90120r9rr7q74q865oso722126q1309063p0n72-gur_pheerag_fgnghf_bs_guvf_rzc";a:3:{i:0;R:22880;i:1;R:21167;i:2;R:22683;}s:75:"1228:zna-pefc-1o4po3qpp95121o4483889nr3s0760n4r82q39rr-ynfg_crefba_cbfvgvba";a:3:{i:0;R:22880;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-pefc-4nq157o8qs99104ors525pq63n24r05o3s196r4n-ynfg_cbfvgvba";a:3:{i:0;R:22880;i:1;R:21167;i:2;R:22683;}s:63:"1228:zna-pefc-nrpn0o6rq2r6786275p11215876087q763205o6q-ynfg_wbo";a:3:{i:0;R:22880;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-pefc-6648349597o52o0s6803908r6snr1r3830o0o0q5-ynfg_snpvyvgl";a:3:{i:0;R:22880;i:1;R:21167;i:2;R:22683;}s:66:"1228:zna-pefc-o291oro8793s4s3308p463951165qnq483715n6p-nccyvpngvba";a:3:{i:0;R:22880;i:1;R:21167;i:2;R:22683;}s:62:"1228:zna-pefc-77qspn2n56s9o1ssp2o6687r230088ps86sop074-fheanzr";a:3:{i:0;R:22880;i:1;R:21167;i:2;R:22683;}s:65:"1228:zna-pefc-o6rn992nno4668311oo94778r056qq0285s27621-svefg_anzr";a:3:{i:0;R:22880;i:1;R:21167;i:2;R:22683;}s:58:"1228:zna-pefc-30p8po83o9npq93ornn32086336p36po77p065q9-wbo";a:3:{i:0;R:22880;i:1;R:21167;i:2;R:22683;}s:70:"1228:zna-pefc-p07178p40o438sq7835so67o60p31p345324on25-cbfvgvba_wbo_vq";a:3:{i:0;R:22880;i:1;R:21167;i:2;R:22683;}s:69:"1228:zna-pefc-11n5os1rs7367s3s3ros698s477r15r265nr7sq5-cbfvgvba_gvgyr";a:3:{i:0;R:22880;i:1;R:21167;i:2;R:22683;}s:63:"1228:zna-pefc-pq4q0p5r1409rp6o001818r92900q4076s54nr88-snpvyvgl";a:3:{i:0;R:22880;i:1;R:21167;i:2;R:22683;}s:66:"1228:zna-pefc-pqn91349446q5r24r33sr03q7o1554681ppr55q3-snpvyvgl_vq";a:3:{i:0;R:22880;i:1;R:21167;i:2;R:22683;}s:70:"1228:zna-pefc-n458p4s9s5o86559r808716s8q47q4pnp62378r8-rzcyblrr_fgnghf";a:3:{i:0;R:22880;i:1;R:21167;i:2;R:22683;}s:61:"1228:zna-pefc-opr06414177s72no70r6387o6ns9s8prrs0q6049-frnepu";a:3:{i:0;R:22880;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pefc-000p76493s6qnp15so70053185s8q49ps9s1p22s-frnepu_eryngvbafuvc_sbe_nyy_cr";a:3:{i:0;R:22880;i:1;R:21167;i:2;R:22683;}s:84:"1228:zna-pefc-r9010r5onr972956o3785565137q1qnsp55s615s-gur_ynfg_cbfvgvba_guvf_crefba";a:3:{i:0;R:22880;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pefc-q10nq0o46pqq10o1027sq089s8719n8sp233nqqp-gur_cbfvgvba_qrgnvyf_sbe_gur_y";a:3:{i:0;R:22880;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pefc-962p1rrqprror711soqopro1q807700q5p51494r-gur_ynfg_wbo_uryq_ol_guvf_cref";a:3:{i:0;R:22880;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pefc-p97pqronn5p6s27qs2s0pq43so3rssqps8sn26s9-gur_ynfg_snpvyvgl_jurer_guvf_c";a:3:{i:0;R:22880;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pefc-6842q883819n593871r4473q47560or185940632-gur_nccyvpngvba_qrgnvyf_sbe_gu";a:3:{i:0;R:22880;i:1;R:21167;i:2;R:22683;}s:80:"1228:zna-pefc-5502109rp73pn2s6761r400r381o0qrp75n16pso-frnepu_nyy_crbcyr_erpbeqf";a:3:{i:0;R:22880;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pefc-1ssr2s4psnson935pp32q19795314n1831pqqq70-frnepu_nyy_crefba_erpbeqf_va_g";a:3:{i:0;R:22880;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-pefe-8444pqpq276s10q2324404qr577r49spoqs9on1r-pheerag_fgnss";a:3:{i:0;s:21:"out-ihris-manage-crsr";i:1;R:21167;i:2;R:22683;}s:61:"1228:zna-pefe-8p41nr88467sr5oonq09spq488662o25p3rp5333-crefba";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:66:"1228:zna-pefe-ron97o6rqqn213rr80q274492r8o25475s6633p9-qrzbtencuvp";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:67:"1228:zna-pefe-5rs99pqn04p2qonsn3n3nrqq58r1508qq022rp81-jbex_pbagnpg";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:72:"1228:zna-pefe-0q16p6r19q1s2787125385o268ss4q2p3snq23qr-rzretrapl_pbagnpg";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:67:"1228:zna-pefe-25q016o5o0p8n97896483o271q6195724s4qq48q-ubzr_pbagnpg";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:66:"1228:zna-pefe-1969rnq537490p3oons406sno393or9npor514p1-angvbanyvgl";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:63:"1228:zna-pefe-ps1p85nqon548r8q681255278976584n7r4n44qr-cbfvgvba";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:63:"1228:zna-pefe-pq4q0p5r1409rp6o001818r92900q4076s54nr88-snpvyvgl";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:65:"1228:zna-pefe-qo40106n405135q4021p1rssso756063ppo2315s-qrcnegzrag";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:58:"1228:zna-pefe-30p8po83o9npq93ornn32086336p36po77p065q9-wbo";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:69:"1228:zna-pefe-94p2n3189r7s7885455350p4p7n8qs2q0q6nq1q1-pynffvsvpngvba";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:69:"1228:zna-pefe-srnp84995rs6o7n01o0514160o02r2q984r12161-pheerag_fnynel";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:70:"1228:zna-pefe-0q8o3psr0r90n058o423346q4842q727p5s7ppn4-fgnegvat_fnynel";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:83:"1228:zna-pefe-4n2141o36sq1o2n439sns261r3355po4q07oqs76-gur_ntr_enatr_sbe_gur_crefba";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:65:"1228:zna-pefe-p7q28r1579q1q19r24921p053n585544n3op8npn-fgnss_yvfg";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:64:"1228:zna-pefe-n8q919qr0525389o528q882r6p3rp3s2p9oqn4n7-uver_qngr";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:62:"1228:zna-pefe-77qspn2n56s9o1ssp2o6687r230088ps86sop074-fheanzr";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:64:"1228:zna-pefe-ps23on48p06q7r6q4o41n205oso3pnp3oo7o1r38-svefganzr";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:64:"1228:zna-pefe-sq3550nq0pq874rsp28p6o795r70no10qprn7311-bgureanzr";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:69:"1228:zna-pefe-n1o97297s107146655938s6o055oss16n37464n0-angvbanyvgl_vq";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:65:"1228:zna-pefe-n6989s1pnqqq842s5272s26p113o7spopo609141-ovegu_qngr";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:61:"1228:zna-pefe-8n754p61p2prq0p5ss79n1827r02p9q643q6q926-traqre";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:69:"1228:zna-pefe-2o41o3sps1420p68ps839nqn510s9p87723nn28n-jbex_gryrcubar";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:65:"1228:zna-pefe-s6p07o41n241n8n9n33pqs005ss429qp2s913qp9-jbex_rznvy";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:72:"1228:zna-pefe-76p1962oo1qo7r02q5o5n7nrp40so0s4300qn58p-rzretrapl_nqqerff";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:74:"1228:zna-pefe-q648o1799pr685ooso63n25884010s32o34321ro-rzretrapl_gryrcubar";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:70:"1228:zna-pefe-8948q3q96470r5o1o3r0855o36266ons7qq32q67-rzretrapl_rznvy";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:67:"1228:zna-pefe-ro3239244r5r5s445877p721639rq5qs33o2q3qq-ubzr_nqqerff";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:69:"1228:zna-pefe-04qnp70qrrs46q3p1q5ps25r4qs3sp48p568nn10-ubzr_gryrcubar";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:65:"1228:zna-pefe-9n0np2ooq5079o94on0os4303q4330s950s784r9-ubzr_rznvy";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:66:"1228:zna-pefe-pqn91349446q5r24r33sr03q7o1554681ppr55q3-snpvyvgl_vq";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-pefe-887ns9n9435850rp4nrr0o82s5r583opp48s33q8-qrcnegzrag_vq";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:67:"1228:zna-pefe-p3485s3716p6678n05q58po0r6q26rr8n7n283p4-fgnss_punegf";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:71:"1228:zna-pefe-7990474p695s481sr260r7s4200ro72q22r478pq-ovegu_qngr_nsgre";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:72:"1228:zna-pefe-509qp6017q536p7n75p56sror8n4o920s124083p-ovegu_qngr_orsber";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:77:"1228:zna-pefe-510p35sn732qn9s6r7r4sp5758136np31nsr32s6-qrzbtencuvp_ovegu_qngr";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-pefe-prqq5473o0139q68o4027rn6s118s9o2n01507s8-snpvyvgl_glcr";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:64:"1228:zna-pefe-q4297792511794487r9q5q68553sn85pqp117n43-wbo_gvgyr";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:70:"1228:zna-pefe-q6sp11942qon4osqq6rr0r02098p1441s366q985-ergverzrag_lrne";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:64:"1228:zna-pefe-2169s2968q359792q44pnp69q6pn3r6s9682p168-ntr_enatr";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:64:"1228:zna-pefe-8op44110p904408r3862qprpqqnn970r6o58r84r-uver_lrne";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:70:"1228:zna-pefe-9306pp8n91n8p1p6166r73o06p9spo4511957qpq-fgnss_qverpgbel";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:72:"1228:zna-pefe-0o6rrq8q5rq6p12853q40p8oq7o7oosn7452n1p3-ubzr_pbagnpg_yvfg";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:79:"1228:zna-pefe-4p6rr8q592n034q94so4ps1n3r66sos4q1570351-pynffvsvpngvba_oernxqbja";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:72:"1228:zna-pefe-20oo9035383r74r075oo44942q26s1935p4n3or4-cvr_puneg(fvzcyr)";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:72:"1228:zna-pefe-6140s3732445sr6030o3pp911qp51ss9oo979oqs-one_puneg(fvzcyr)";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:75:"1228:zna-pefe-01646n443n3sqr1o6n38012541nnp89ns595o0q8-pbyhza_puneg(fvzcyr)";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:67:"1228:zna-pefe-63920248r4o1noqqo609813526n48ps4n8r4931n-fpnggre_cybg";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:77:"1228:zna-pefe-s8p96o199072p3767p63505rs506p167qrq43np5-rzretrapl_pbagnpg_yvfg";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:66:"1228:zna-pefe-4484p20365852qq1s36690r975nn1sn6017095r0-fnynel_yvfg";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-pefe-89pp736qs0193on81149647np04q8ssqn7s4n3nq-wbo_oernxqbja";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:76:"1228:zna-pefe-48341n46p16q182q9s8n166qno83qn0opq15p99r-angvbanyvgl_oernxqbja";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:71:"1228:zna-pefe-on7p4p89np2rno305p20sno797q0r7q5s83qoos7-ntr_qvfgevohgvba";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:69:"1228:zna-pefe-q71659o7o85oqps85s9ns9sq8qr495nn098s5559-uverf_cre_lrne";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:83:"1228:zna-pefe-3910n0ns1p40s4n8oo7q64r20295709660752sqn-fgnpxrq_pbyhza_puneg(fvzcyr)";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:74:"1228:zna-pefe-67p3542501s5rso1r8n4280r218467os73n48606-ergverzrag_cynaavat";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-pefe-7ss4psnn96qn6s09p467n19s83n53o6ss7p92850-fgnss_ercbegf";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:82:"1228:zna-pefe-907ooq31r76rs660rs86sp414rp869rs623pnos6-n_yvfg_bs_nyy_pheerag_fgnss";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pefe-985o64oropoq23r3os74rqo09p4462q9prp24751-gur_crefba_pheeragyl_svyyvat_g";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pefe-s9s3q96o7667s662p9965q057401nqr7126q93o5-qrzbtencuvp_qrgnvyf_sbe_gur_cr";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:84:"1228:zna-pefe-164q80n5r1nq5q6s5481qp483290q36rpr4rrs3p-jbex_pbagnpg_qrgnvyf_sbe_guvf";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:84:"1228:zna-pefe-04q32r0694qn51s197r60qq905o056o0q5q64oqn-rzretrapl_pbagnpg_qrgnvyf_sbe";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:84:"1228:zna-pefe-s4794r0r7043310n5729p0687234o6on4p01qs7s-ubzr_pbagnpg_qrgnvyf_sbe_guvf";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pefe-n76n24ron8s434rp6o7pn1r96717no23npq291o5-gur_cbfvgvba_uryq_ol_guvf_cref";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pefe-26sp02579s5nq4453s122290o179n2954n6nrs02-gur_snpvyvgl_jurer_guvf_cbfvgv";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pefe-22q1s608290599141s4sr21s799668oq0n64o371-gur_qrcnegzrag_sbe_guvf_cbfvgv";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pefe-q4r8p5n8p1q890op960q48q2o16po7p54po1n4n2-gur_wbo_nffbpvngrq_jvgu_guvf_c";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pefe-8r68n09p33o883r3on126o0q079os863so3152nq-gur_wbo_pynffvsvpngvba_sbe_guv";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pefe-8p0ssn565s5nqo121n3sssr3n4pq87qqo2sq24ro-gur_pheerag_fnynel_sbe_guvf_cr";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pefe-27n1nn363r32q459588o2nr3r7q339oqsn7n7207-gur_fgnegvat_fnynel_sbe_guvf_c";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:84:"1228:zna-pefe-64s1p043r674653487n8s10q326n8r66rn124r42-gur_lrne_guvf_crefba_gheaf_65";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pefe-n1pr8792r6800r86r1r2n5on3po96r1qs0207739-gur_lrne_gur_crefba_fgnegrq_va";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pefe-2r7250o39n05rs912r666q06p3r143o21r7q81p9-fgnss_nttertngr_ercbegf_sbe_pu";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pefe-o375sons37p454oo1nrr2nr32s98593ppps6n516-n_yvfg_bs_nyy_pheerag_fgnss_jv";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pefe-554o6r345q5s062qs29p2p3n35629oqn08r47qr0-nyy_fgnss_jvgu_ubzr_pbagnpg_qr";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pefe-n04616ps080pr1s4201q4718n4q3o85q3roopo50-n_gbgny_bs_nyy_fgnss_ol_pynffv";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pefe-92s65n155222pos173qq3q694o05548679o5ro74-yvfg_bs_nyy_fgnss_jvgu_rzretra";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pefe-rs075nsp56r15o65s7r6494s7s90n79425s7o70o-n_yvfg_bs_nyy_rzcyblrrf_jvgu_f";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:73:"1228:zna-pefe-741004874n9nn14377rs51qr7sps97ns38o70p5r-gbgny_fgnss_ol_wbo";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pefe-6p3n94qn3ppn11q0365728s1o12446108q31r65s-n_yvfg_bs_nyy_fgnss_ol_angvban";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pefe-p4p371r93rp4686q6754931p763n4po98100o8r9-gbgny_bs_nyy_fgnss_ol_ntr_enat";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:74:"1228:zna-pefe-3755823rsppo68qs474qr0013n1285r9n68r0177-uver_gbgnyf_ol_lrne";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-pefe-n419721478354p83p23s2s0067on53s39o83pqp7-fgnss_gbgnyf_ol_ergverzrag_lrn";a:3:{i:0;R:22905;i:1;R:21167;i:2;R:22683;}s:67:"1228:zna-pher-69qs34044q254n614s34s33r64r8r76qs0o2s1s5-vuevf_znantr";a:3:{i:0;s:21:"out-ihris-manage-cure";i:1;R:21167;i:2;R:22683;}s:72:"1228:zna-pher-589346q88s2s76o1or0r9n6oq702q3qr17pn393s-vuevf_znantr_fvgr";a:3:{i:0;R:22990;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-qvnp-qq6p0242s39336o3577sp8633or3737sn94rro39-pna_rqvg_gur_jbexcynpr_vawhevr";a:3:{i:0;s:21:"out-ihris-manage-diac";i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-qvnp-57rnp285r2n356pq35925s31r4o321684970o97n-pna_ivrj_gur_jbxecynpr_vawhevr";a:3:{i:0;R:22993;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-qvnp-9593083pnn3nn71155pp47s09p2n46sp91rn53p4-rqvg_gur_jbexcynpr_qvfpvcyvane";a:3:{i:0;R:22993;i:1;R:21167;i:2;R:22683;}s:74:"1228:zna-qvnp-18o82p4555q19qq120090r7r706rq5n99oqo141r-qvfpvcyvanel_npgvba";a:3:{i:0;R:22993;i:1;R:21167;i:2;R:22683;}s:79:"1228:zna-qvnp-s76413s7r78nr35p86p8s75q8pn8n0rr52s3070s-qvfpvcyvanel_npgvba_glcr";a:3:{i:0;R:22993;i:1;R:21167;i:2;R:22683;}s:73:"1228:zna-qvnp-283n1rno0n4q442o0spoq8n4s4n382r6sosqr3o7-qngr_bs_qvfphffvba";a:3:{i:0;R:22993;i:1;R:21167;i:2;R:22683;}s:67:"1228:zna-qvnp-485290959383rrr39p093r50r84sqp851np37n32-npgvba_gnxra";a:3:{i:0;R:22993;i:1;R:21167;i:2;R:22683;}s:77:"1228:zna-qvnp-r3qpn3p950oq6q36147770o512726p9r4r8885o0-fgneg_bs_nccyvpnovyvgl";a:3:{i:0;R:22993;i:1;R:21167;i:2;R:22683;}s:75:"1228:zna-qvnp-o9sq472o15p704o7s42116205240n6q10pq2375n-raq_bs_nccyvpnovyvgl";a:3:{i:0;R:22993;i:1;R:21167;i:2;R:22683;}s:60:"1228:zna-qvnp-70440046n3qp2r079s23rr1p57qsn76669o732nn-abgrf";a:3:{i:0;R:22993;i:1;R:21167;i:2;R:22683;}s:69:"1228:zna-qvnp-1n8305399003rp71r4o37q0579980064661169q6-crbcyr_cerfrag";a:3:{i:0;R:22993;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-qvnp-78506p80n4071rs1628qnq5p8ssps2r9nns9q2n9-nqq_hcqngr_qvfpvcyvanel_npgvba";a:3:{i:0;R:22993;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-qvnp-n16o48578q631ro9s9p7494365sn010s7pqn121p-qvfpvcyvanel_npgvba_vasbezngvb";a:3:{i:0;R:22993;i:1;R:21167;i:2;R:22683;}s:76:"1228:zna-qvnp-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;R:22993;i:1;R:21167;i:2;R:22683;}s:78:"1228:zna-qvnp-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:22993;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-qvnp-o105s3o26rs08p139373p8o3qoso1opr02r2n38q-fryrpg_nabgure_qvfpvcyvanel_np";a:3:{i:0;R:22993;i:1;R:21167;i:2;R:22683;}s:79:"1228:zna-qvnp-75r9654onr0nq91n9qp163q5210or416pq0qq323-pbeerpg_guvf_vasbezngvba";a:3:{i:0;R:22993;i:1;R:21167;i:2;R:22683;}s:61:"1228:zna-qvnp-97p89n4q6630nqro18sn12on9976n31413sr293r-npgvba";a:3:{i:0;R:22993;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-qvnp-o25r4sp34srr0p591pr8rq08qp57q4nqo16s4s20-ivrj_gur_jbexcynpr_qvfpvcyvane";a:3:{i:0;R:22993;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-qvnp-286osn9681695p0334p9q4p1q1rnnqrrnr403s78-rqvg_gur_jbexcynpr_qvfpvcyvane";a:3:{i:0;R:22993;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-qvnp-054oq32o9881sq5q082rqp94qo015s7q26p5745q-ivrj_gur_jbexcynpr_qvfpvcyvane";a:3:{i:0;R:22993;i:1;R:21167;i:2;R:22683;}s:81:"1228:zna-qvnp-2553q09s452ro2op51qnq986p33149r8p414r14s-qvfpvcyvanel_npgvba_ernfba";a:3:{i:0;R:22993;i:1;R:21167;i:2;R:22683;}s:72:"1228:zna-qvnp-qqrqn02o1057p685q5n9q8sn8q0pqsn32n6n74p6-ernfba_sbe_npgvba";a:3:{i:0;R:22993;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-qvnp-4814o92op502n6pqnqp4nn99r4r80rq55qo5qo33-fryrpg_nabgure_qvfpvcyvanel_np";a:3:{i:0;R:22993;i:1;R:21167;i:2;R:22683;}s:75:"1228:zna-wbo-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;s:20:"out-ihris-manage-job";i:1;R:21167;i:2;R:22683;}s:77:"1228:zna-wbo-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:23018;i:1;R:21167;i:2;R:22683;}s:72:"1228:zna-wbo-9qsor70s6p3n02n68rn47q26r7op657qs51q7024-fryrpg_nabgure_wbo";a:3:{i:0;R:23018;i:1;R:21167;i:2;R:22683;}s:57:"1228:zna-wbo-30p8po83o9npq93ornn32086336p36po77p065q9-wbo";a:3:{i:0;R:23018;i:1;R:21167;i:2;R:22683;}s:81:"1228:zna-wbo-q9nor7p050ns3r3s1845qrr7q38594q14qo62o3n-fryrpg_nabgure_fnynel_tenqr";a:3:{i:0;R:23018;i:1;R:21167;i:2;R:22683;}s:66:"1228:zna-wbo-sp863s80482on1377450nsrn2rn2n7450p143s0o-fnynel_tenqr";a:3:{i:0;R:23018;i:1;R:21167;i:2;R:22683;}s:62:"1228:zna-wbo-38os3ps109p445s37s401p0qno940q355qnop2q4-ivrj_wbo";a:3:{i:0;R:23018;i:1;R:21167;i:2;R:22683;}s:69:"1228:zna-wbo-3r131qq29094sq08n6q8446s2r833prn577q98r2-wbo_vasbezngvba";a:3:{i:0;R:23018;i:1;R:21167;i:2;R:22683;}s:58:"1228:zna-wbo-34q8o60sr25332s7o98585r82r753rns502p3r50-uvqr";a:3:{i:0;R:23018;i:1;R:21167;i:2;R:22683;}s:80:"1228:zna-wbo-nps5snq8qo9ro764077p8rr1558pn9060591p85s-rqvg_gur_fnynel_tenqr_yvfg";a:3:{i:0;R:23018;i:1;R:21167;i:2;R:22683;}s:80:"1228:zna-wbo-6505psrr42qq3p36o3p29qq061071pr07s186npp-ivrj_gur_fnynel_tenqr_yvfg";a:3:{i:0;R:23018;i:1;R:21167;i:2;R:22683;}s:58:"1228:zna-wbo-709n23220s2p3q64q1r1q6q18p4q5280s8q82spn-anzr";a:3:{i:0;R:23018;i:1;R:21167;i:2;R:22683;}s:59:"1228:zna-wbo-952s375412r89ss213n8npn383q18r5691354347-fgneg";a:3:{i:0;R:23018;i:1;R:21167;i:2;R:22683;}s:57:"1228:zna-wbo-n2oo9q34o8n1n79665858q354585ps147r0qrr4r-raq";a:3:{i:0;R:23018;i:1;R:21167;i:2;R:22683;}s:62:"1228:zna-wbo-97ooq308sn43o67r4rp67s539n40521878447rns-zvqcbvag";a:3:{i:0;R:23018;i:1;R:21167;i:2;R:22683;}s:59:"1228:zna-wbo-70440046n3qp2r079s23rr1p57qsn76669o732nn-abgrf";a:3:{i:0;R:23018;i:1;R:21167;i:2;R:22683;}s:65:"1228:zna-znan-26o953711187n41842pr9535o12rnq1119838s0o-nqq_crefba";a:3:{i:0;s:23:"out-ihris-manage-manage";i:1;R:21167;i:2;R:22683;}s:72:"1228:zna-znan-2qsrs0p4p5rp90p341op98oq29q7r9n6s5s32sq4-erivrj_nccyvpnagf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-znan-n353965409spsrp29r31o93970o446327q5sr986-znantr_crbcyr";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:84:"1228:zna-znan-onq102632o9126sn5523po39snp5059r185p8q0r-bapr_bar_be_zber_nccyvpngvbaf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:73:"1228:zna-znan-r633p25rn826413o3687101091495q54s984q0sq-nqq_n_arj_rzcyblrr";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:67:"1228:zna-znan-965rp8sn33oso18o1o81s82786r120r12pn4rq69-be_nccyvpnag";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-znan-n267601484s573o9p72s6p6rs69nrqnno61pnq20-erpbeq_gb_gur_flfgrz,_naq_frne";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-znan-3rr97sr33648n51n827o59652n06p933qn0or658-nyfb_pbzcyrgr_wbo_nccyvpngvbaf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:69:"1228:zna-znan-n0p7n2npr5sspss2p25542onr23o78q5n26pr7p7-frnepu_erpbeqf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-znan-n28o0416q42489156n83osoo07p69n84r76rprq7-ybpngr_nal_rzcyblrr_be_cbfvgvb";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:67:"1228:zna-znan-q8rp6qo71o8qro067rn524n66n19p02ppr906n91-ivrj_ercbegf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-znan-55orn38r73r96sn6992q59ppr1s13oo43q487rp9-ercbegf_ranoyr_nanylfvf_bs_uhz";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:71:"1228:zna-znan-7s5o0nn72r7on00066qsp25s5p1sq7n3570857p5-pbasvther_flfgrz";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:84:"1228:zna-znan-n43oq2p68q133204r17n7ps29q0osns7rs98on5p-pbasvther_zbqhyrf,_nqzvavfgre";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:70:"1228:zna-znan-49289qo43r663n3qs5r2p70714722rpp54895565-punatr_cnffjbeq";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:66:"1228:zna-znan-9p6r28513s2p6s63nq0349oo55pn3nr19n5p6on2-ivrj_crefba";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:77:"1228:zna-znan-0474q22rn4894npq04rr5q77o5587301p77r6415-vaqvivqhny_vasbezngvba";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:59:"1228:zna-znan-34q8o60sr25332s7o98585r82r753rns502p3r50-uvqr";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:67:"1228:zna-znan-n4521r7565417p832r5pn84r8668882529295q38-frg_cbfvgvba";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:82:"1228:zna-znan-342759176706468o806066n69rq1s01opso9n9q6-nqq_qrzbtencuvp_vasbezngvba";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:73:"1228:zna-znan-q5orn389126r1910s2n6137983n05rrs50r07365-nqq_vqragvsvpngvba";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:76:"1228:zna-znan-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:78:"1228:zna-znan-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:72:"1228:zna-znan-244r3r85q6q93r7s2371s153711807p17r45p44n-ivrj_anzr_uvfgbel";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:71:"1228:zna-znan-14ss2o6100oo4sr92ro1p4q833q7q5ooq5p81082-anzr_angvbanyvgl";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:74:"1228:zna-znan-n34o69sp46r7n278ps65p58oo347qr6560so046s-pbagnpg_vasbezngvba";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:75:"1228:zna-znan-s18ro66q997o2psrsn36rro32105r0r552p41p36-cbfvgvba_vasbezngvba";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:82:"1228:zna-znan-n094o3n00n23o16o397p709o7202o12r49549nop-nqq_orarsvg_fcrpvny_cnlzrag";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:69:"1228:zna-znan-56663729nrs0706p003pns4033sq3po44qp729r4-dhnyvsvpngvbaf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:71:"1228:zna-znan-p7r518207o660225550o3p8nnor8s7o729pp97qs-nqq_ertvfgengvba";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:79:"1228:zna-znan-op6186721n821o6n3588rrqs92s8q1333r7p3q25-nqq_ynathntr_cebsvpvrapl";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:69:"1228:zna-znan-n1837r219p9o275s9911047674pps72893r11400-nqq_pbzcrgrapl";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:77:"1228:zna-znan-2r1prp2q8277rs88707777617o8p8p34707o3164-pbzcrgrapl_rinyhngvbaf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:71:"1228:zna-znan-6o4087142r253154oo7980r820qrnoq228548376-genvavat_pbhefrf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:74:"1228:zna-znan-qp0s0np4ro8193o306qopq77s02o25800q26p53r-nqq_genvavat_pbhefr";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:66:"1228:zna-znan-o291oro8793s4s3308p463951165qnq483715n6p-nccyvpngvba";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:70:"1228:zna-znan-o4s9s247978360qpr9q1q066390sqprs8157p8sn-nqq_nccyvpngvba";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:76:"1228:zna-znan-7s02rss3s6os17ns2q10qr937o7219n1npr5qq42-ybt_vagreivrj_qrgnvyf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:74:"1228:zna-znan-2q604518q3s40538pos1q9941spp248r2q004n57-ybt_uvevat_qrpvfvba";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:73:"1228:zna-znan-324597n3r9015639pq9or113o5q5n229q513nqp0-rzcyblzrag_uvfgbel";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:69:"1228:zna-znan-srr94010o437rnp86pr4r9q1o3n732333r639458-nqq_rzcyblzrag";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:72:"1228:zna-znan-1n9rs1n8o15r5s3ss28ro2qoos0qon081qp1no3p-rqhpngvba_uvfgbel";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-znan-2035097s8pn3rp8p281qrno33ro7sr228s2783o4-nqq_rqhpngvba";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:60:"1228:zna-znan-70440046n3qp2r079s23rr1p57qsn76669o732nn-abgrf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:63:"1228:zna-znan-8o851oqno36n811o6r6416r9oo1952p372op9oq8-nqq_abgr";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:74:"1228:zna-znan-pn20o4q0qp0037qoo9p44s4r58377sq5n5spsn15-nqzvavfgre_qngnonfr";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:75:"1228:zna-znan-q737qop3864297r1r1p3q0pnq50r0r0752o816n0-nqzvavfgre_cbfvgvbaf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:75:"1228:zna-znan-6p81635r8q5812po1ppsns32ro5q5sr7989122p5-perngr_wbo_fgehpgher";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:61:"1228:zna-znan-4r077n88166n4o67n5srrqn5sprss3q35o9o06rr-pnqerf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:74:"1228:zna-znan-2r675rss1ns4o130no1371p290200s0p75q82p7s-wbo_pynffvsvpngvbaf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-znan-7qoo87nor567r11sqs539p8sp544s5nooq6o1613-fnynel_tenqrf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:59:"1228:zna-znan-437736sqo5oo707noqp048483193p86o9n99983r-wbof";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:71:"1228:zna-znan-q7p4r614s01r4o376421s885sn0s485o028p8sr3-znantr_cbfvgvbaf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:69:"1228:zna-znan-no6550s849965s74n270675rospn42q88848487q-fnynel_fbheprf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:69:"1228:zna-znan-q93859n4oq30r1o57ns19rq881ss361191r4p819-cbfvgvba_glcrf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:78:"1228:zna-znan-s946s4251656s0r3n634n6qn9s2055o3n2n541or-cbfvgvbaf_(ol_snpvyvgl)";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:76:"1228:zna-znan-ns89s606p5rn8qpqr1n19589945pon7qr4on0s51-cbfvgvbaf_(ol_fgnghf)";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:77:"1228:zna-znan-95171929611nr2188sn87sn698149311469870s4-nqzvavfgre_bgure_yvfgf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:73:"1228:zna-znan-r7qr7876p02p63p7ssrp6qo75sp284qpnrsq6364-betnavmngvba_yvfgf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-znan-prqq5473o0139q68o4027rn6s118s9o2n01507s8-snpvyvgl_glcr";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:70:"1228:zna-znan-62o96qnop5751ro5o049043581ron11oqo0so3q8-bssvpr_snpvyvgl";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:65:"1228:zna-znan-qo40106n405135q4021p1rssso756063ppo2315s-qrcnegzrag";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:76:"1228:zna-znan-1s19615qp870n4q1ppr24031q122o06829r3158q-ertvfgengvba_pbhapvyf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:69:"1228:zna-znan-q79rn84p88n4n33qpsq7p5sqq672qp8s490402n4-rzcyblrr_yvfgf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:69:"1228:zna-znan-4194r1sr65p196p62nrq6ro58np41q2pr0961n42-rqhpngvba_glcr";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:61:"1228:zna-znan-41p26o83o688q816pq49q60r0r2p8or032srnprn-qrterr";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:63:"1228:zna-znan-89o86no0r66s527166q98qs92qqops5416rq58s6-ynathntr";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:70:"1228:zna-znan-n52np6764oppqos7so5168p27q3qo3qo759r04p6-pbzcrgrapl_glcr";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:65:"1228:zna-znan-05r59oo0rq360np5pspp85pqo8n3184r0442743s-pbzcrgrapl";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:76:"1228:zna-znan-4193018s2r723so8pp87n51535457oo114pqq240-pbzcrgrapl_rinyhngvba";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:74:"1228:zna-znan-662889r70os828812pnqs7nr57o39371090506n6-vqragvsvpngvba_glcr";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:67:"1228:zna-znan-q9r3530nn63705977n4pnqq908155827s19083oq-orarsvg_glcr";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:69:"1228:zna-znan-r65s73600961ns1p5n4703r1sn25q1p6274o41sq-znevgny_fgnghf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:76:"1228:zna-znan-3o801oopp88n3q1o1o3ppn825n38n5s8762p5sq0-ernfbaf_sbe_qrcnegher";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:77:"1228:zna-znan-69q108677po1o54198qq200n3snsq79po96131o2-trbtencuvp_vasbezngvba";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:62:"1228:zna-znan-q523rooq10146pqsq39qrr077s04p9q08468q0op-pbhagel";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:61:"1228:zna-znan-0s217179940p6q89s5po2p7002n58q91no7286p1-ertvba";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:63:"1228:zna-znan-p0po139ppr34769so7rq9onsp15290r91ps7736p-qvfgevpg";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:61:"1228:zna-znan-60qrr38933959qsqnr71rp0rr78q9qqo94s8on0r-pbhagl";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:63:"1228:zna-znan-r070qr224434n2npq352o35prp46s34s9r08r1o2-pheerapl";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:82:"1228:zna-znan-q2s78r3635no2o2867qpnsn740s2pr72571nr3o6-genvavat_pbhefr_vasbezngvba";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:82:"1228:zna-znan-9pq2oqp9665299622q7471r2307073oq88r4rpq1-fgnghf_bs_n_genvavat_pbhefr";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-znan-545950p7so6n0q957647p8rn058269or08rp1p09-erdhrfgbef_bs_n_genvavat_pbhef";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-znan-388nqp61672o73r322282pn93r55q58s46308073-rinyhngvba_bs_n_genvavat_pbhef";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:84:"1228:zna-znan-n4no8os72051654s813o9n58p465077791oq7sp8-pngrtbel_bs_n_genvavat_pbhefr";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:75:"1228:zna-znan-q38r9o888r8o481rrrn6qn394q506s30qqs68n32-genvavat_vafgvghgvba";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:70:"1228:zna-znan-1p0r11s2ns6n82p4017692o88380p8p081245793-genvavat_shaqre";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:82:"1228:zna-znan-s558147548sn65n002q723n3s53pn7n2695qr83p-pbagvahvat_rqhpngvba_pbhefr";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-znan-o584q2730q3ssq197989q6809s8386709n33p6o9-frnepu_crbcyr";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:71:"1228:zna-znan-683761o6pp1qrr4n30pooor430745pp56o854306-frnepu_cbfvgvbaf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:84:"1228:zna-znan-q3p6nr184q51668n4q111q9801q1595127342spq-ybpngr_nal_crefba'f_erpbeq_va";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-znan-284os9952n12s36o56q591r4q56315p4qq8n32ps-ybpngr_nal_cbfvgvba_va_gur_flf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-znan-0n36068s42s73nrr589ss1p8n7qpnns7016019o6-gb_genpx_n_crefba_va_gur_qngno";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-znan-071rr43971p2s17prqo6o80p16opso45937s4015-gb_genpx_n_crefba_va_gur_qngno";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-znan-pq5o0994o040966o9pr8r6568r84912q6656pnon-pna_rqvg_fbzr_betnavmngvbany_q";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-znan-54qq07p4441s7460prq748o5o526s0n8pq29024q-pna_ivrj_fbzr_betnavmngvbany_q";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-znan-9032nn5sqproo740p3s4n611q77qp089006r606p-pna_rqvg_nyy_betnavmngvbany_qn";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-znan-pq339q19r45p1o70prp1114n79161785s34qns39-pna_ivrj_nyy_betnavmngvbany_qn";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-znan-qnn3p8479op128q98oron1487s28o801451qns9r-pna_rqvg_fbzr_rzcyblrr_qngnonf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-znan-024r0n3ronsqro6116s071761q237312s7r4s07p-pna_ivrj_fbzr_rzcyblrr_qngnonf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-znan-o8o0sq4sq328954s7q47013135935nr0or8130n4-pna_rqvg_nyy_rzcyblrr_qngnonfr";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-znan-nr1r17rr42426s4np157q42541onoqn9s7622or3-pna_ivrj_nyy_rzcyblrr_qngnonfr";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-znan-10o198p70p3s09q8n70320pn780pn9n839n89761-pna_rqvg_fbzr_cbfvgvba_qngnonf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-znan-o7ps009p450n3q2278no143ns5n38200s6ss2130-pna_ivrj_fbzr_cbfvgvba_qngnonf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:65:"1228:zna-znan-9ss495p2so7s251rsq09739srqs8qon5qrno2028-ue_znantre";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:63:"1228:zna-znan-730562s10n388p47rnr156r860or5r7pnp866oro-ue_fgnss";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:72:"1228:zna-znan-1ro7qnr8p31o33n36pr6q342ps3p4602ro0pr071-rkrphgvir_znantre";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:71:"1228:zna-znan-5os3p8no596r164181n2777s643ss176899q07s8-genvavat_znantre";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-znan-083n7n6n0pros7p804o75r3095q950o21nnqp1no-fraq_srrqonpx";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:73:"1228:zna-znan-6s7483p446154770206rq9267r78poqns5s55rr6-nqq_cnffcbeg_cubgb";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:65:"1228:zna-znan-725367512rs213s4pqr671s95o6p0826s47prn93-nqq_erfhzr";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:83:"1228:zna-znan-s497020o3p2938496o1o58279884991s3s9np834-pheerag_qvfpvcyvanel_npgvbaf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:65:"1228:zna-znan-6r206s1240ssoq405p10s8p397qs6s18q68q07p2-arj_npgvba";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:62:"1228:zna-znan-90ppq6497400o5576nrpn1oq94ns74nnr1r0n250-uvfgbel";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:74:"1228:zna-znan-038n594p88p34p2671nr61os8p1265r149r2p8n8-jbexcynpr_nppvqragf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:70:"1228:zna-znan-046681662260n6614rrn12792pr6qr12s0o6q114-ercbeg_nppvqrag";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:81:"1228:zna-znan-5qn75o5988n46r2697n5547rs2882o812ooon984-fpurqhyrq_genvavat_pbhefrf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:75:"1228:zna-znan-7q21p82200p3s7q247o1391036136186q0719673-qvfpvcyvanel_npgvbaf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-znan-924n5n25p6rp1n8567r1163n46sp08s981r23r5q-nppvqrag_glcr";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:79:"1228:zna-znan-s76413s7r78nr35p86p8s75q8pn8n0rr52s3070s-qvfpvcyvanel_npgvba_glcr";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:75:"1228:zna-znan-rs3306p70spo71s9or7n7onr3859916pssn257or-fgnaqneqvmrq_yrggref";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:76:"1228:zna-znan-n54q8683r7p00qqps16rs20o8sqoo256s8678952-qrcraqrag_vasbezngvba";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-znan-r7rqn8o1n9qr85n53qp17rs4rr9rns2qn1q83054-nqq_qrcraqrag";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:78:"1228:zna-znan-46s86ns69nqno0rqp06s76o6sq13432139os19or-arkg_bs_xva_vasbezngvba";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:70:"1228:zna-znan-sr433qo348n1782550o86o312r8qss9321o1p7pq-nqq_arkg_bs_xva";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-znan-rrnq9o93qo21pqq3s8741sq1n5569p8nr48srr86-pna_rqvg_fbzr_cynaavat_qngnonf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-znan-s0n51477n465130np9q7161no27pn2o27s3np9n8-pna_ivrj_fbzr_cynaavat_qngnonf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-znan-8q858p42587ssrqp2q0q42nq58so2po7qs773840-pna_rqvg_nyy_cynaavat_qngnonfr";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-znan-163n1r1p804rnq78036094015o13n0s515s8q19o-pna_ivrj_nyy_cynaavat_qngnonfr";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:75:"1228:zna-znan-or09s7n2q047rrr5s91o45s7so0n929374058674-cynaavat_vasbezngvba";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:73:"1228:zna-znan-r28o97sq2s4p0srp8q40p876s44s696618010194-rfgnoyvfuzrag_glcr";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:75:"1228:zna-znan-r4r0p531s94pnq05sso1s5016q511s6oopsq5n9o-rfgnoyvfuzrag_crevbq";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:69:"1228:zna-znan-9o2s630s8494991n34o7323707rno25833q930q7-rfgnoyvfuzragf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:76:"1228:zna-znan-1o79pppor00no34s7ns0qo06591q228q0o39pp46-fpnaarq_cncre_erpbeqf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:75:"1228:zna-znan-017n93s22r39rp01no43qrr9o7orp4q4sso574r8-nqq_fpnaarq_qbphzrag";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:73:"1228:zna-znan-orrp2133nqp975no6n5ns7182o9263121802rpor-pbasvezngvba_glcrf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:79:"1228:zna-znan-473154pq035q8829o0r17109oo2ps2r2nsns939r-pbasvezngvba_vasbezngvba";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-znan-prrs8qsp43oq2302n4p7o4396nn1p9r8ns582o46-erpbeq_fgnghf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:70:"1228:zna-znan-7430r7so1r2044s30r4s097pr34o2r7118rq966p-fpnaarq_erpbeqf";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:81:"1228:zna-znan-2553q09s452ro2op51qnq986p33149r8p414r14s-qvfpvcyvanel_npgvba_ernfba";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:71:"1228:zna-znan-6q28o877po43rq7q34r6944q216s03o545712693-frg_arj_cbfvgvba";a:3:{i:0;R:23035;i:1;R:21167;i:2;R:22683;}s:67:"1228:zna-znfv-69qs34044q254n614s34s33r64r8r76qs0o2s1s5-vuevf_znantr";a:3:{i:0;s:21:"out-ihris-manage-masi";i:1;R:21167;i:2;R:22683;}s:65:"1228:zna-znfv-opq7s4n21588655s07r3qns33242ro29623s69on-jrypbzr,_f";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-znfv-301or106s4o6r798qn8n7s80r17s3n9s19s37333-gb_trg_fgnegrq_hfvat_vuevf_zna";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:81:"1228:zna-znfv-12rssp57535r4qs25n67067n3q69596704454npq-uevf_fgeratguravat_jrofvgr";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:62:"1228:zna-znfv-pn4s9qps204r2037osr5884867ornq98oq9pons8-jrypbzr";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-znfv-p11507n523p15nr14ppss9o370p282960rr98q2n-vf_n_uhzna_erfbheprf_znantrzra";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-znfv-3489087ooqo399soq4n12r60p24oqorqooo64353-na_vaabingvir_tybony_vavgvngvi";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:80:"1228:zna-znfv-0oqr508q39103p97437r951pn98p2s02n4n60oqo-uhzna_erfbhepr_znantrzrag";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:59:"1228:zna-znfv-70s8oo9n8n5393rs080507n89r4o98q139000q65-ubzr";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:59:"1228:zna-znfv-p47nr15370psr1rq2781rrqp1qp2547q12q9r972-uryc";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:63:"1228:zna-znfv-p8q7677r19495s21qn984sr4r2829o7pn91o27p7-srrqonpx";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-znfv-onnnqqpq0344827nr61p9n8rs34766q488qpn737-vuevf_jrofvgr";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:67:"1228:zna-znfv-r0338pr56169028r43n892s051621976s8n2q455-ybt_bhg_nf_f";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:75:"1228:zna-znfv-r067p82515r3nq40898n2r9on074056s327r1947-vuevf_znantr_irefvba";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:83:"1228:zna-znfv-q22qn675o52ps51269p8p2p82628719rq1926ono-gunax_lbh_sbe_lbhe_srrqonpx.";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:61:"1228:zna-znfv-63143o6s8007o98p53pn2149822777o3566s9241-erghea";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:66:"1228:zna-znfv-n89on47po30ns861pq7o919o5p0962q516snnno6-erfhygf_sbe";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:69:"1228:zna-znfv-478qoo263poqs399r1rqpo66433nr0s03r6s9spn-cevinpl_cbyvpl";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-znfv-q4161o074p11oops046s3pnoq88r8r1qsn37s212-._jr_jvyy_hfr_lbhe_rznvy_nqqer";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:73:"1228:zna-znfv-41954o0719910qpnrs689s5qq57on6362p833n29-fvgr_srrqonpx_sbez";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:63:"1228:zna-znfv-spr06r20r5s7s74nnpppno40o59o75n56p8s7305-pbzzragf";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:59:"1228:zna-znfv-709n23220s2p3q64q1r1q6q18p4q5280s8q82spn-anzr";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:62:"1228:zna-znfv-7n1994999q181qrrn68r4304o3346r78s838rpo7-pbzcnal";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:60:"1228:zna-znfv-768r0p1p69573so588s61s1308n015p11468r05s-gvgyr";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:63:"1228:zna-znfv-973q438sr5q3ps552p5spq3o2265sr9oss3q71p6-vaqhfgel";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:62:"1228:zna-znfv-q70s93qs5r8s9o55or44sorrr9q203972r3383q4-nqqerff";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:59:"1228:zna-znfv-4271627s4s0ors6104n95ppn7oo21pqn4q74503r-pvgl";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:69:"1228:zna-znfv-8o19s84098767pn9p68285s81n77q6p5pq992no0-fgngr_cebivapr";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:66:"1228:zna-znfv-p7np934psnn9o50r25559321r48737ro6op8q9q8-cbfgny_pbqr";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:62:"1228:zna-znfv-q523rooq10146pqsq39qrr077s04p9q08468q0op-pbhagel";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:64:"1228:zna-znfv-sonqo22pp438no6r67737oop0p3o51ror025oso0-gryrcubar";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:58:"1228:zna-znfv-o67snq2r2rqs27045555rnqns1r4n848no242206-snk";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:60:"1228:zna-znfv-84nqq5o2952787581po9n8851rrs63q1rp75q22o-rznvy";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:63:"1228:zna-znfv-45oq908qs490rqq79694on0qnss82sp092970o55-pncnpvgl";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:59:"1228:zna-znfv-2q05q0s179pr47r1r637q115po0p71r67o625762-cyhf";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-znfv-95p1682r7s3or2852r2ps57pqo03r37s27rn1sq2-vs_lbh_unir_n_oht_ercbeg,_cebo";a:3:{i:0;R:23177;i:1;R:21167;i:2;R:22683;}s:78:"1228:zna-crqr-79032r7748r28prnpq8815135sr9232q4ns79725-qrzbtencuvp_vasbezngvba";a:3:{i:0;s:21:"out-ihris-manage-pede";i:1;R:21167;i:2;R:22683;}s:76:"1228:zna-crqr-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;R:23214;i:1;R:21167;i:2;R:22683;}s:78:"1228:zna-crqr-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:23214;i:1;R:21167;i:2;R:22683;}s:75:"1228:zna-crqr-2p7o830rpqq7748os6p1n5676q15p7q93847sr77-ahzore_bs_qrcraqragf";a:3:{i:0;R:23214;i:1;R:21167;i:2;R:22683;}s:63:"1228:zna-crcb-ps1p85nqon548r8q681255278976584n7r4n44qr-cbfvgvba";a:3:{i:0;s:21:"out-ihris-manage-pepo";i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-crcb-sr0552648on67n00747qp5nq0s23p43801o9s428-ragre_arj_fgnghf_sbe_gur_cbfvg";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:80:"1228:zna-crcb-8qo4ps6pqnqq672r468o41o704q8oo86rps4s020-qvfpbagvahr_guvf_cbfvgvba";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:76:"1228:zna-crcb-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:79:"1228:zna-crcb-75r9654onr0nq91n9qp163q5210or416pq0qq323-pbeerpg_guvf_vasbezngvba";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-crcb-0s8s6p14non1rs129854nrpp20r74pnrso19s38n-fnynel_punatr";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:61:"1228:zna-crcb-595n803ps39qq4oqq8q61r9o78611o1n67s798p5-fnynel";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:77:"1228:zna-crcb-q30q14190rq6s7092950r11oo8o8qo4o759r1639-creprag_bs_znexrg_engr";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:61:"1228:zna-crcb-63143o6s8007o98p53pn2149822777o3566s9241-erghea";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:75:"1228:zna-crcb-or4rr11r9ns582s0s4qs43r93o20rp520n6669p0-fhcreivfrq_cbfvgvbaf";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:73:"1228:zna-crcb-39p49pronn328601190oo093p71n9r6n8o1qn976-bcra_guvf_cbfvgvba";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:66:"1228:zna-crcb-65s7rnnppnq87973on0q31p6r41009o58330o43s-rqvg_fnynel";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:64:"1228:zna-crcb-pq4683snqs7005rpn07r4q6267qqoo19ropo91sn-cbfvgvbaf";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:65:"1228:zna-crcb-9orspo40os93s2n3862o38n26sqqrss6oro17p97-arj_fnynel";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:69:"1228:zna-crcb-srnp84995rs6o7n01o0514160o02r2q984r12161-pheerag_fnynel";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:67:"1228:zna-crcb-8s6norqr272246p4r7983n154o5orn074rr4pq2s-nqq_n_fnynel";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:66:"1228:zna-crcb-54q6sn84q3p2n435ooqnq934280477853r77por5-ab_fnynevrf";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:78:"1228:zna-crcb-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:80:"1228:zna-crcb-798174q8o22956q9or969763r338q66p32p757p9-fryrpg_nabgure_qrcnegzrag";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:65:"1228:zna-crcb-qo40106n405135q4021p1rssso756063ppo2315s-qrcnegzrag";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-crcb-17s7s9234s695q046np692pq4qps821n37o2r0rr-ivrj_cbfvgvba";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:75:"1228:zna-crcb-s18ro66q997o2psrsn36rro32105r0r552p41p36-cbfvgvba_vasbezngvba";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:59:"1228:zna-crcb-34q8o60sr25332s7o98585r82r753rns502p3r50-uvqr";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:78:"1228:zna-crcb-621938pr04685o5r95p2p4s74520pn603n1r546n-fryrpg_nabgure_cbfvgvba";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:83:"1228:zna-crcb-70567nno8257192ps536op708o6696q6r26prq95-fryrpg_nabgure_cbfvgvba_glcr";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-crcb-9pqp07pr973ssrp3p9n41o5pqqqrsr9p64525110-cbfvgvba_glcr";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:83:"1228:zna-crcb-n65qorqq428355113rs661ososr584q931q5r74s-erghea_(qb_abg_fnir_punatrf)";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:65:"1228:zna-crcb-9q7no1n557965or0rnr6205p2q860p45n3rnsp11-fgneg_qngr";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:70:"1228:zna-crcb-pn37n2nq08187p70onqn967rq351s13212r09npp-   _raq_qngr";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:74:"1228:zna-crcb-43q4p4s832n717r6528500rs647r4n20n7n789s8-ivrj_fnynel_uvfgbel";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:67:"1228:zna-crcb-n8n08o39323ro79670475n043363722945q3p224-arj_cbfvgvba";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:71:"1228:zna-crcb-959r8s40n058403pp14pr8750n4n374n3r42p5o5-pheerag_cbfvgvba";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-crcb-8r2q0q6390n2r5pqp18q4q23pn9p7r2qn9031q3p-ragre_arj_fgnghf_sbe_gur_pheer";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:73:"1228:zna-crcb-672626s10674n8n5322p071944q75nn1471p77r3-erpbeq_n_qrcnegher";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:70:"1228:zna-crcb-69r60o7qq92q2s96qp4504o59rnr040q380pqp10-punatr_cbfvgvba";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:76:"1228:zna-crcb-5por83nr4noooq01s640nr39no53n38s59s5r3q1-ivrj_cbfvgvba_uvfgbel";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:66:"1228:zna-crcb-9p6r28513s2p6s63nq0349oo55pn3nr19n5p6on2-ivrj_crefba";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:73:"1228:zna-crcb-510910po11r36on211316n76462s64002n8qrq3o-cbfvgvba_svyyrq_ol";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-crcb-s5484868200psrn272orn1790s84q4s60r6192p6-fryrpg_nabgure_ernfba_sbe_qrcn";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:75:"1228:zna-crcb-pr612oo997poo84s5o8pnq7226216n0s4rn22p7s-ernfba_sbe_qrcnegher";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:79:"1228:zna-crcb-ps241oq9s6017nr96nq6pr5q0p42p3729s43124p-rqvg_gur_qrcnegzrag_yvfg";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:79:"1228:zna-crcb-0no2q9rq04725p258q7n465n5519s7s436o2no11-ivrj_gur_qrcnegzrag_yvfg";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:82:"1228:zna-crcb-nns53qo121n95ooo795p050383r937487093s980-rqvg_gur_cbfvgvba_glcr_yvfg";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:82:"1228:zna-crcb-128pnr55p4np679q544o6483nn8qp2n6sqo0s208-ivrj_gur_cbfvgvba_glcr_yvfg";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:77:"1228:zna-crcb-os3rr629q63n3094nr6ooooqo691pn45s41983o6-rqvg_gur_cbfvgvba_yvfg";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:77:"1228:zna-crcb-1p3r0r8951qnqr56sp2p36s1o05ss487r65p49pp-ivrj_gur_cbfvgvba_yvfg";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-crcb-30r0r8ns78s8s52n2or26o18o1n3s55518rno402-rqvg_gur_cbf_punatr_ernfba_yvf";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-crcb-r92so888573r8q72nsr95rorrqoqopo4sp8qq247-ivrj_gur_cbf_punatr_ernfba_yvf";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-crcb-4os412o3p7on52qnpn2n1190p84s30q009679p68-pna_rqvg_fbzr_vasbezngvba_nobh";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-crcb-7611osp0q14p0659q84o16q06r53pr0r59o0ps76-pna_ivrj_fbzr_vasbezngvba_nobh";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-crcb-8s4sspnsqp7s6r5n16sqp7n478026n6o5s9or2nr-pna_rqvg_nyy_vasbezngvba_nobhg";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-crcb-35q2s6nrs69rq0qs4n538796np32np4p1o5o6sn6-pna_ivrj_nyy_vasbezngvba_nobhg";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-crcb-r59pqp14208no928o4n69931o95pr78q877912qr-pna_rqvg_gur_cbfvgvba_bs_n_cre";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-crcb-ns4s4p54s0674311303q92578s1q0qq0q9q5o496-pna_ivrj_gur_cbfvgvba_bs_n_cre";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-crcb-r7n3p8989sr15sors0nrr35o0qon9rq9rss426s8-pna_punatr_gur_rkvfgvat_cbfvgv";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-crcb-p9pso9126sn83n46o555p0s28883q240so28q421-pna_rqvg_gur_fnynel_bs_n_crefb";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-crcb-8q26sn8p6602qpq4n45866s529oqs6poo32884r3-pna_qryrgr_gur_fnynel_bs_n_cre";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:84:"1228:zna-crcb-1n8785sqp71s0o07s3n25q6q247881124poq797q-pna_punatr_na_rkvfgvat_fnynel";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-crcb-so2o0sp3q5835npnr6s4s8ppps5679npoo7oor72-pna_ivrj_na_rkvfgvat_fnynel_bs";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-crcb-91n27n27811680qq6863ss7nros6qns7n0793n44-pna_ivrj_gur_fnynel_bs_n_crefb";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:59:"1228:zna-crcb-ps9o77061s7o3126o49q50n6sn68s7pn8p26o7n3-bcra";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:61:"1228:zna-crcb-88q86o7721q587644r9p4ps33n084202po3o0ss0-pybfrq";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:67:"1228:zna-crcb-210nnqr460r54qss4203o70r6nr962s334379qqp-qvfpbagvahrq";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:71:"1228:zna-crcb-q63403p515rs6sq95r4819q96or31pr097prr49p-znxr_n_wbo_bssre";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-crcb-90312o499r8n32258n6890r6qnsqo3n9264pnq4p-rqvg_cbfvgvba";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:69:"1228:zna-crcb-s6pr559qr635sp4q23q293290sq9n4786825s2n2-fnynel_uvfgbel";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:70:"1228:zna-crcb-80s90spnp6568sr8qpq7poso8q74049321r2rq41-crefba_cbfvgvba";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-crcb-7s34p5sr3p8spqp7o1n92pn6100q18694q367r79-guvf_sbez_vf_hfrq_gb_yvax_n_cr";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:76:"1228:zna-crcb-3o801oopp88n3q1o1o3ppn825n38n5s8762p5sq0-ernfbaf_sbe_qrcnegher";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:70:"1228:zna-crcb-0963p9685r3oo93s790496999n887972198p5r93-cbfvgvba_fgnghf";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:59:"1228:zna-crcb-709n23220s2p3q64q1r1q6q18p4q5280s8q82spn-anzr";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:63:"1228:zna-crcb-84o1478125890onq1pp4o36q6q3781773o3sqr5n-raq_qngr";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-crcb-15o8285s791s2oq6sr8so4798poq9q678n098n78-cbfvgvba_pbqr";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:58:"1228:zna-crcb-30p8po83o9npq93ornn32086336p36po77p065q9-wbo";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:69:"1228:zna-crcb-11n5os1rs7367s3s3ros698s477r15r265nr7sq5-cbfvgvba_gvgyr";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:75:"1228:zna-crcb-p656rn6rors01ns2656q836980q52no95q2784nr-cbfvgvba_qrfpevcgvba";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:70:"1228:zna-crcb-69s25ss6s3o6ropr25on7n7no295296r5rp4pqn5-cebcbfrq_fnynel";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:61:"1228:zna-crcb-6qn13nqqo000o67q42n6q66391713819r634149s-fbhepr";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:65:"1228:zna-crcb-2pq4sn195rq5o220930149p31pp72soo131921qo-fhcreivfbe";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:63:"1228:zna-crcb-pq4q0p5r1409rp6o001818r92900q4076s54nr88-snpvyvgl";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:75:"1228:zna-crcb-490nr8r24631037s6014q973o9r3nn2n31s6o7rs-cebcbfrq_uvevat_qngr";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:66:"1228:zna-crcb-2n3546rsp0po97p1419r99919r3r395r692s0607-qngr_cbfgrq";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:61:"1228:zna-crcb-onr7q5or70820rq56467oq9n63744r23o47oq711-fgnghf";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:72:"1228:zna-crcb-96p859498654oq61o9194844po7200541s512927-cbfvgvba_pbzzragf";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:73:"1228:zna-crcb-753o6qn7n894389s4o9537o47811q758s1080059-vagreivrj_pbzzragf";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:84:"1228:zna-crcb-r295160o58pp382s41q91no3742945qoq426r584-fgnaqneqvmrq_cbfvgvba_yrggref";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:62:"1228:zna-crcb-04n212215rs9sos686q280802ro81rr7n6r681pq-pbasvez";a:3:{i:0;R:23219;i:1;R:21167;i:2;R:22683;}s:79:"1228:zna-ertv-3n4403qsq26qp642898nq392559281o061n5634r-ertvfgengvba_vasbezngvba";a:3:{i:0;s:21:"out-ihris-manage-regi";i:1;R:21167;i:2;R:22683;}s:74:"1228:zna-ertv-6r1r47pprq59124235q8548o6o3q52383754rq73-yvprafr_vasbezngvba";a:3:{i:0;R:23307;i:1;R:21167;i:2;R:22683;}s:76:"1228:zna-ertv-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;R:23307;i:1;R:21167;i:2;R:22683;}s:78:"1228:zna-ertv-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:23307;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-ertv-46o60onrqrqrnpq88nq957n2r7ns856r004q4813-ertvfgengvba_yvprafr_vasbezngv";a:3:{i:0;R:23307;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-ertv-q61r5r410n136s9q3s1snp6q6r8p88s979r0p985-fryrpg_nabgure_ertvfgengvba_pb";a:3:{i:0;R:23307;i:1;R:21167;i:2;R:22683;}s:75:"1228:zna-ertv-038s17q1qp27qq71sr2q298706p7n21441r43232-ertvfgengvba_pbhapvy";a:3:{i:0;R:23307;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-ertv-p96762ps8qo452r511632q1131pp6508s6513279-pna_ivrj_ertvfgengvba_puvyq_sb";a:3:{i:0;R:23307;i:1;R:21167;i:2;R:22683;}s:85:"1228:zna-ertv-s8s61r30517nq9ppo7n616190p523rq0qq0r3nss-pna_rqvg_ertvfgengvba_puvyq_sb";a:3:{i:0;R:23307;i:1;R:21167;i:2;R:22683;}s:84:"1228:zna-ertv-qno5q44371248372o091q37orrp17s5061039rr2-pna_rqvg_gur_pbhapvy_qngnonfr";a:3:{i:0;R:23307;i:1;R:21167;i:2;R:22683;}s:84:"1228:zna-ertv-q35n78840n10sr7p87rs33243s4ps4n205q44o15-pna_ivrj_gur_pbhapvy_qngnonfr";a:3:{i:0;R:23307;i:1;R:21167;i:2;R:22683;}s:78:"1228:zna-ertv-9p25or027so3q72075o92739463o535658528n7q-nqq_hcqngr_ertvfgengvba";a:3:{i:0;R:23307;i:1;R:21167;i:2;R:22683;}s:62:"1228:zna-ertv-rp9o1sss7qpqp8pp50qs95r351n597p88s762r75-pbhapvy";a:3:{i:0;R:23307;i:1;R:21167;i:2;R:22683;}s:67:"1228:zna-ertv-o233r775q63oo8o86ps031776q4pnrn613s59pqn-ertvfgengvba";a:3:{i:0;R:23307;i:1;R:21167;i:2;R:22683;}s:74:"1228:zna-ertv-1qn775087104510s18021qr3pr98227rp4sr0315-ertvfgengvba_ahzore";a:3:{i:0;R:23307;i:1;R:21167;i:2;R:22683;}s:69:"1228:zna-ertv-1q5971ro658q8s9qq3502s9o1n761po73nq91869-yvprafr_ahzore";a:3:{i:0;R:23307;i:1;R:21167;i:2;R:22683;}s:72:"1228:zna-ertv-r68qs6q34nrn0o889sq634qop28nr13r29p6r254-ertvfgengvba_qngr";a:3:{i:0;R:23307;i:1;R:21167;i:2;R:22683;}s:78:"1228:zna-ertv-923265qr56s8qr57099r983941s7nr78144nr8n5-yvprafr_rkcvengvba_qngr";a:3:{i:0;R:23307;i:1;R:21167;i:2;R:22683;}s:76:"1228:zna-fnyn-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;s:21:"out-ihris-manage-sala";i:1;R:21167;i:2;R:22683;}s:78:"1228:zna-fnyn-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:23326;i:1;R:21167;i:2;R:22683;}s:83:"1228:zna-fnyn-2r438o98rp671r533prn80np7s2821qn0ss4543s-fryrpg_nabgure_fnynel_fbhepr";a:3:{i:0;R:23326;i:1;R:21167;i:2;R:22683;}s:68:"1228:zna-fnyn-rr3qos7q489990op8n2oo778n5811qr965s28252-fnynel_fbhepr";a:3:{i:0;R:23326;i:1;R:21167;i:2;R:22683;}s:82:"1228:zna-fnyn-4192r74p97p69508oq79984so664n8nsoo7ooqqr-rqvg_gur_fnynel_fbhepr_yvfg";a:3:{i:0;R:23326;i:1;R:21167;i:2;R:22683;}s:82:"1228:zna-fnyn-rp171q87s0377so1q3pnr59n62047724no9o9n21-ivrj_gur_fnynel_fbhepr_yvfg";a:3:{i:0;R:23326;i:1;R:21167;i:2;R:22683;}s:61:"1228:zna-fnyn-595n803ps39qq4oqq8q61r9o78611o1n67s798p5-fnynel";a:3:{i:0;R:23326;i:1;R:21167;i:2;R:22683;}s:65:"1228:zna-fnyn-9q7no1n557965or0rnr6205p2q860p45n3rnsp11-fgneg_qngr";a:3:{i:0;R:23326;i:1;R:21167;i:2;R:22683;}s:63:"1228:zna-fnyn-84o1478125890onq1pp4o36q6q3781773o3sqr5n-raq_qngr";a:3:{i:0;R:23326;i:1;R:21167;i:2;R:22683;}s:60:"1228:zna-fnyn-70440046n3qp2r079s23rr1p57qsn76669o732nn-abgrf";a:3:{i:0;R:23326;i:1;R:21167;i:2;R:22683;}s:67:"1228:dhn-pber-2q1655sqn5449rr91536o245qs9q20576n7q56p6-vaqrk_ahzore";a:3:{i:0;s:22:"out-ihris-qualify-core";i:1;R:21167;i:2;s:23:"out-ihris-qualify-0-all";}s:74:"1228:dhn-pber-1qn775087104510s18021qr3pr98227rp4sr0315-ertvfgengvba_ahzore";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:69:"1228:dhn-pber-1q5971ro658q8s9qq3502s9o1n761po73nq91869-yvprafr_ahzore";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:77:"1228:dhn-pber-0474q22rn4894npq04rr5q77o5587301p77r6415-vaqvivqhny_vasbezngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:74:"1228:dhn-pber-n34o69sp46r7n278ps65p58oo347qr6560so046s-pbagnpg_vasbezngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:75:"1228:dhn-pber-020s5q187s4203p2350s0522502659n988sn94n9-genvavat_vasbezngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:65:"1228:dhn-pber-327n55s82qp6818877n68r37o722oo7s2360o633-qrcyblzrag";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:68:"1228:dhn-pber-73136q0q0sr4noon8po1n645712983r191q58061-bhg_zvtengvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:60:"1228:dhn-pber-70440046n3qp2r079s23rr1p57qsn76669o732nn-abgrf";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-pber-p7r518207o660225550o3p8nnor8s7o729pp97qs-nqq_ertvfgengvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:76:"1228:dhn-pber-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:78:"1228:dhn-pber-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:63:"1228:dhn-pber-p0po139ppr34769so7rq9onsp15290r91ps7736p-qvfgevpg";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:59:"1228:dhn-pber-709n23220s2p3q64q1r1q6q18p4q5280s8q82spn-anzr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:62:"1228:dhn-pber-q523rooq10146pqsq39qrr077s04p9q08468q0op-pbhagel";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:61:"1228:dhn-pber-0s217179940p6q89s5po2p7002n58q91no7286p1-ertvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:74:"1228:dhn-pber-18o82p4555q19qq120090r7r706rq5n99oqo141r-qvfpvcyvanel_npgvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:81:"1228:dhn-pber-2553q09s452ro2op51qnq986p33149r8p414r14s-qvfpvcyvanel_npgvba_ernfba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-92751qo547oo5q752794nq589o4nq555rn13ppop-qngr_qvfpvcyvanel_npgvba_bpphe";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:73:"1228:dhn-pber-808s9364949o9o057or72n1oq6pp91r73s163nnq-ervafgngrzrag_qngr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:66:"1228:dhn-pber-702852n3o282opqs2sp2p70q7q8776p6944607p5-ivrj_erpbeq";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:74:"1228:dhn-pber-6r1r47pprq59124235q8548o6o3q52383754rq73-yvprafr_vasbezngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:65:"1228:dhn-pber-32sq5p48740r602785573788604514q09742p430-fhfcraqrq?";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:65:"1228:dhn-pber-9q7no1n557965or0rnr6205p2q860p45n3rnsp11-fgneg_qngr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:63:"1228:dhn-pber-84o1478125890onq1pp4o36q6q3781773o3sqr5n-raq_qngr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:66:"1228:dhn-pber-4n5r4no277o1254sppr1760s71o0po29np62606n-vagnxr_qngr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:70:"1228:dhn-pber-q8q595839pq9207o4s673463n5ron6s92r566335-tenqhngvba_qngr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:83:"1228:dhn-pber-p6403q1793q30q3s0491q4219p8oss5334920530-genvavat_qvfehcgvba_pngrtbel";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:69:"1228:dhn-pber-80ppq3or32qq7o1097796o4o562p88nos08n3526-npnqrzvp_yriry";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:79:"1228:dhn-pber-3n4403qsq26qp642898nq392559281o061n5634r-ertvfgengvba_vasbezngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-pber-ss7n21sn4s2pn4q56p28p82qs0oq830pq8r9pq74-nccyvpngvba_qngr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:72:"1228:dhn-pber-r68qs6q34nrn0o889sq634qop28nr13r29p6r254-ertvfgengvba_qngr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:68:"1228:dhn-pber-23r0r8n4s2o48p6862813o79n595r5o05p1186ss-cenpgvpr_glcr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:76:"1228:dhn-pber-39o32nrq4so10r4n878psq64185o970p08n66qq4-rqhpngvba_vasbezngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:76:"1228:dhn-pber-8n7pns9oo13o946r9p0n2753o588262o5628ns9r-frpbaqnel_fpubby_anzr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:66:"1228:dhn-pber-10qr46o3o341o6s837ps6q72972o9os2o3s6r491-pregvsvpngr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:69:"1228:dhn-pber-q49p7pn9ns89534125o4363r551pr7nq6nsrn682-tenqr_bognvarq";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:73:"1228:dhn-pber-85n8q6551306588r40n9n38q095rqp25qq897s66-pregvsvpngr_ahzore";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:77:"1228:dhn-pber-3q5qq46q7ssr922o13649n611pps730r0n7946q0-erpbeq_qvfpbagvahngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:74:"1228:dhn-pber-sr1r44sqpqonnnnr2428s4r8r1q82779o6ror0rp-cebtenz_vasbezngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-pber-nrs48r41803r09863n1867q0o7p6pnsor9p82sr5-qngr_vasbezngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:60:"1228:dhn-pber-2586n9r4r3on9092547r3rnp14r105p5ssoqn37o-pnqer";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:73:"1228:dhn-pber-n3qp386s5s06n8r2s08ss0986nrp1q958np1qo2n-ahzore_bs_fghqragf";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:79:"1228:dhn-pber-75r9654onr0nq91n9qp163q5210or416pq0qq323-pbeerpg_guvf_vasbezngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:67:"1228:dhn-pber-o233r775q63oo8o86ps031776q4pnrn613s59pqn-ertvfgengvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:70:"1228:dhn-pber-oss6r62n5qorpo7o018ns12ro614o53rs23s3pq9-erfhzr_genvavat";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:83:"1228:dhn-pber-n65qorqq428355113rs661ososr584q931q5r74s-erghea_(qb_abg_fnir_punatrf)";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:68:"1228:dhn-pber-r23s50099p6802orp3679npspp5pso3048n6s614-erarj_yvprafr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:75:"1228:dhn-pber-47n48994on66283s8rqqo4srs1sn06446rr4pp2p-ivrj_yvprafr_uvfgbel";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:78:"1228:dhn-pber-n6n394qo76997p3r55pp734o0856195086qso966-nqq_arj_urnygu_snpvyvgl";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:66:"1228:dhn-pber-9p6r28513s2p6s63nq0349oo55pn3nr19n5p6on2-ivrj_crefba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:59:"1228:dhn-pber-34q8o60sr25332s7o98585r82r753rns502p3r50-uvqr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:73:"1228:dhn-pber-q5orn389126r1910s2n6137983n05rrs50r07365-nqq_vqragvsvpngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:72:"1228:dhn-pber-244r3r85q6q93r7s2371s153711807p17r45p44n-ivrj_anzr_uvfgbel";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-pber-14ss2o6100oo4sr92ro1p4q833q7q5ooq5p81082-anzr_angvbanyvgl";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:67:"1228:dhn-pber-35ppn40q3r7n24278sss49s099p17654p52578ps-nqq_genvavat";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:77:"1228:dhn-pber-ppq52n1p20o3p0o87584srq82p51n434rr407s9r-qrcyblzrag_vasbezngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:69:"1228:dhn-pber-rqnrp3o44r0797oq41o869177675s32q24188osq-nqq_qrcyblzrag";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:78:"1228:dhn-pber-p7o91oopp00p097q0p10s00op984spqn7434q7so-ivrj_qrcyblzrag_uvfgbel";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:80:"1228:dhn-pber-r73798o046o4pp6487634941rpnq5n9228op31pn-bhg_zvtengvba_vasbezngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:72:"1228:dhn-pber-2n828507q11pr8n5326q355sqr1p10716635352o-nqq_bhg_zvtengvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:63:"1228:dhn-pber-8o851oqno36n811o6r6416r9oo1952p372op9oq8-nqq_abgr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:78:"1228:dhn-pber-79032r7748r28prnpq8815135sr9232q4ns79725-qrzbtencuvp_vasbezngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:69:"1228:dhn-pber-r65s73600961ns1p5n4703r1sn25q1p6274o41sq-znevgny_fgnghf";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pber-528o4o8rn86sn873641qp0r62r40or5s27n785on-nqzvavfgre_qngnonfr_nffbpvngr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:75:"1228:dhn-pber-qnr14s8s08o68r01nps768p45n84ss58o35rsq4q-pbagvahvat_rqhpngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-pber-qq7s05srp6q14o4642n9p264o4p6369415s18643-cevingr_cenpgvpr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:74:"1228:dhn-pber-36n20pq24s05o598108qr0660q671po8q8nno41n-qvfpvcyvanel_abgvpr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-pber-s333n6253p630o667rn6nn208p318on4763p5129-erghea_gb_crefba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:82:"1228:dhn-pber-342759176706468o806066n69rq1s01opso9n9q6-nqq_qrzbtencuvp_vasbezngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:61:"1228:dhn-pber-60qrr38933959qsqnr71rp0rr78q9qqo94s8on0r-pbhagl";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:78:"1228:dhn-pber-sso203o1986p5788r6oq51spq535o553r780ss04-nqq_qvfpvcyvanel_abgvpr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:74:"1228:dhn-pber-6r973372p00r2ppo94nq1644n04or9s9qp57q6rs-genvavat_qvfehcgvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:72:"1228:dhn-pber-58rn12onpr1q85277ro8535sqrprnrq7rs9p6895-qvfehcgvba_ernfba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:70:"1228:dhn-pber-s06pq2q08n66p2s5706r0q5006n539s481r2qq86-qvfehcgvba_qngr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:70:"1228:dhn-pber-nn9o51r9pr64855nn673490rqrs9nn35p7n50n5p-erfhzcgvba_qngr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:70:"1228:dhn-pber-n00832768154s5np7o00s4q2p85on2o4802sq1s7-urnygu_snpvyvgl";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:70:"1228:dhn-pber-n52s08q37n46q05p00832s802367ns72sqss0s6s-qrcyblzrag_qngr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:69:"1228:dhn-pber-305p15on5036o54qs44n204o25qq8r5n47360292-wbo_cbfg_gvgyr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:68:"1228:dhn-pber-28648s1qsqn1p0n12477466no95115os2901q7p8-wbo_cbfg_pbqr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:75:"1228:dhn-pber-r21s0p63ns5n690523o9s5745n354o611o13s691-wbo_cbfg_vasbezngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:72:"1228:dhn-pber-796pp76p7n1snspp708srr804247o4646r549ns6-nqq_hcqngr_crefba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:75:"1228:dhn-pber-nq12r4228ppprr1q10p5o8qr2nn28p286rsnns96-crefbany_vasbezngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-pber-r4q2942qo996o00783p4qs8rqp1o4985q24q7671-genvavat_cebtenz";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:68:"1228:dhn-pber-o9s4s22q73344r56s8o48ssrr9005n7orpp255op-ivrj_genvavat";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:76:"1228:dhn-pber-801052294ss51n2n05snq29p19o413931o007127-erghea_gb_znva_erpbeq";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:79:"1228:dhn-pber-qp2p1pp7838s381n6198s09rros5533s78p91324-pbeerpg_guvf_vasbezngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:74:"1228:dhn-pber-os7457sq947sr6n1rrs8qr62o3n91rr68n91442o-frg_tenqhngvba_qngr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:72:"1228:dhn-pber-r1260nn53o266s93o524r49646218pn49s3rp0qn-vaqrk_vasbezngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:75:"1228:dhn-pber-q38r9o888r8o481rrrn6qn394q506s30qqs68n32-genvavat_vafgvghgvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-pber-3pp6s07309qno6q53255991s78n4o71p7o9234p0-rknz_vasbezngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:79:"1228:dhn-pber-r8rn57q44s3p3n82n6nr9ro2891188o041pn42s0-nqq_pbagvahvat_rqhpngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-627np5po076qs2488qnss66q7s7n5s2nqsnr02r7-cevingr_cenpgvpr_yvprafr_vasbe";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:83:"1228:dhn-pber-96021426sop15nnq98o99qrr95o54nr1o70onr52-nqq_cevingr_cenpgvpr_yvprafr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-5op6o2oo20o61s2r032n97o425676n5ss3052r27-fryrpg_nabgure_urnygu_snpvyvgl";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-6675s63385pp5p9487467019o4746263q11s1118-hcqngr_nffbpvngrq_genvavat_vaf";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:74:"1228:dhn-pber-6n7qrqrs37n309s86242non879po3s510935392o-vqragvsvpngvba_pbqr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:68:"1228:dhn-pber-prqq5473o0139q68o4027rn6s118s9o2n01507s8-snpvyvgl_glcr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:69:"1228:dhn-pber-05o9r455o57ss2020p53p8q66ss28o23372qr218-snpvyvgl_ntrag";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:70:"1228:dhn-pber-4r93qn4r3574q38q2n4p1o2961np3qps41o3s8o3-snpvyvgl_fgnghf";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-rs5r59r593234q6nqoo5rps0r573994nq4n7p872-nffbpvngrq_genvavat_vafgvghgvb";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:65:"1228:dhn-pber-26o953711187n41842pr9535o12rnq1119838s0o-nqq_crefba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:69:"1228:dhn-pber-n0p7n2npr5sspss2p25542onr23o78q5n26pr7p7-frnepu_erpbeqf";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-pber-7s5o0nn72r7on00066qsp25s5p1sq7n3570857p5-pbasvther_flfgrz";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:70:"1228:dhn-pber-49289qo43r663n3qs5r2p70714722rpp54895565-punatr_cnffjbeq";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:77:"1228:dhn-pber-r02r995742p16q46p899q070q90p01o3p7no85rp-nqqerff_va_arj_pbhagel";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:75:"1228:dhn-pber-r8sp61r569so16765748p4n60o312003s118pp99-bhg_zvtengvba_ernfba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-6316741175q83488p1qo3r1893856pn645ossp80-betnavmngvba_erdhrfgvat_irevsv";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:67:"1228:dhn-pber-5oon095984r657o143o12ron8n2768n9475084o7-erdhrfg_qngr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:62:"1228:dhn-pber-o37456p4530or810qp040s50qn72rqn09nqqso0n-pbagnpg";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-37093846o9ss99oqp85q495780oo7799oon606o3-ab_rknz_vasbezngvba_unf_orra_n";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:75:"1228:dhn-pber-os18q64o76q2906s90r723prrrp5q0p4q61p6qnr-nqq_rknz_vasbezngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:80:"1228:dhn-pber-34n2q586004r00n9751r29psq74714nn6p10pq0n-nqq_rqhpngvba_vasbezngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:61:"1228:dhn-pber-63143o6s8007o98p53pn2149822777o3566s9241-erghea";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:73:"1228:dhn-pber-07p31743p6219q947qq21s3q60s631ss98553643-genvarq_va_pbhagel";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:82:"1228:dhn-pber-no077o9r99031p8pq006003r04rr598qo671oo8n-genvarq_bhgfvqr_gur_pbhagel";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:73:"1228:dhn-pber-6s957s6n06np4p9r19r97368153299p4698p3908-pbhagel_genvarq_va";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:83:"1228:dhn-pber-5o35086oo92r1o29op42887816s2pnq442351rq4-qvfpvcyvanel_npgvba_pngrtbel";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:59:"1228:dhn-pber-69oq4rs9soq0894n22759p3766o859qrsoqrqop8-ivrj";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:66:"1228:dhn-pber-0ro5rq506r4923p28q7s4n8nn69rsr99o3nq75q1-vasbezngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:73:"1228:dhn-pber-157149009o0751r5o7s14o1031n3p8qp7p617q16-vafcrpgvba_erfhygf";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:70:"1228:dhn-pber-9n551o1843876s4pp4145n63s46q66244391149r-vafcrpgvba_qngr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:74:"1228:dhn-pber-8s3q8srrp65q4q38964s861r7n7qn52792n71pq7-zngrevnyf_erprvirq?";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:74:"1228:dhn-pber-3177o3q97qo2662s7qqn97s59060ss5035rno030-zngrevnyf_nccebirq?";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:68:"1228:dhn-pber-84p6qr99s9ops0258o194r3510302ns57orns888-raqbefre_anzr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:78:"1228:dhn-pber-8sos589p039np49n4p6so62no65qo20rs9r929n2-raqbefre_dhnyvsvpngvbaf";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:64:"1228:dhn-pber-nsn4p0nr1s2no2n4p5p447qs5qq1p2qpnnn547np-rknz_qngr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:63:"1228:dhn-pber-no0r56pon14s56n5snq8q1rn7ps5s9qqp0p049qr-rknz_gel";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:67:"1228:dhn-pber-6006oo2n5o4q00700p0oo68rpp1ooop2r1sr37pp-rknz_erfhygf";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:66:"1228:dhn-pber-74oon00q6703oq292ps12516sr7rr2q3n370qq8s-rknz_ahzore";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:66:"1228:dhn-pber-695o21q4sro2s90373665462850277r1r44s1q8q-nqq_yvprafr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:72:"1228:dhn-pber-qr3p9700qn75o73799oso6n6sprrnp3rn19o4n1r-ervafgngr_yvprafr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:69:"1228:dhn-pber-9q2p7063088793p055sr015q3841q0pp2qs8r788-vqragvsvpngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:74:"1228:dhn-pber-662889r70os828812pnqs7nr57o39371090506n6-vqragvsvpngvba_glcr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-qnqoq6ss4nsq197o816r3380qnnpr2p57sq021oq-fryrpg_nabgure_genvavat_vafgvg";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-4qsp66q5or304r75sr34406708nsn5q0566746or-hcqngr_nffbpvngrq_urnygu_snpvy";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:83:"1228:dhn-pber-3rqp54spq705050p7ns15n571p1288n86or01650-nffbpvngrq_urnygu_snpvyvgvrf";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:72:"1228:dhn-pber-84rn95qq09qn0qn73p7810098962s607756q009n-genvavat_cebtenzf";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:75:"1228:dhn-pber-oqrr571srq771314nnp69s77p81795p5ppo640s8-nqq_genvavat_cebtenz";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:78:"1228:dhn-pber-853qpo03po0050n9r212o05r0r5qp0s7sqo3n916-vafgvghgvba_vafcrpgvbaf";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:81:"1228:dhn-pber-7oossoqqq00q5pps802713p8s3123056237np114-nqq_vafgvghgvba_vafcrpgvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:62:"1228:dhn-pber-3229609r15436rp51ops00818n69n84qop58n0p2-yvprafr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:77:"1228:dhn-pber-13n8n1n623ss01rr068q52pp388p0414836474n0-vafgvghgvba_vafcrpgvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:62:"1228:dhn-pber-s18n660r3r20qq1508q9sqoq9272p6o574pn3255-cnffrq?";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:74:"1228:dhn-pber-pn20o4q0qp0037qoo9p44s4r58377sq5n5spsn15-nqzvavfgre_qngnonfr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-7782n66n5588s778p6p883n4q1ssr6rp9n82s1p6-zvavzhz_dhnyvsvpngvba_erdhverq";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:79:"1228:dhn-pber-0307s0611497s1106n15547spr3802os91sn5096-vfpb_pynffvsvpngvba_pbqr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:83:"1228:dhn-pber-80npon1q009859r6sr38n6s8o0qq6p03qn7q975r-nqq_arj_genvavat_vafgvghgvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:78:"1228:dhn-pber-q60rr537s7425ps4qq166s0821o8sr943qnq6p02-nccyvpngvba_vasbezngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:77:"1228:dhn-pber-0621465pp9n348243sn58s7o770s5o75n806s9q5-vafcrpgvba_vasbezngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:79:"1228:dhn-pber-s5881rq1q6p499772s7rpo06138o5ooo78o73846-cevingr_cenpgvpr_yvprafr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:68:"1228:dhn-pber-s8op51p670902rs6qos700003361s16r30sp1ro6-yvprafr_yvfgf";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:68:"1228:dhn-pber-2ssr44r547583os61r0p2o02q0288qs152r1r76q-dhnyvsvpngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:82:"1228:dhn-pber-s558147548sn65n002q723n3s53pn7n2695qr83p-pbagvahvat_rqhpngvba_pbhefr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:81:"1228:dhn-pber-4nq9n2q1638p05334351r02pr6946ppq2p8qq224-genvavat_qvfehcgvba_ernfba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:72:"1228:dhn-pber-0628rrpr9p87s833r9q34864srq67pp09504rson-qrzbtencuvp_yvfgf";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-pber-ps4q0nps094q7s9202rr879p7rsq6250613ro51q-trbtencuvp_yvfgf";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:72:"1228:dhn-pber-84853q488qsoq1so773340193o5540pso7385nq5-vafgvghgvba_yvfgf";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-91455n8opq62717693rp42s3orp7ros8681n699r-nqq_n_arj_erpbeq_sbe_n_fghqrag";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pber-q3p6nr184q51668n4q111q9801q1595127342spq-ybpngr_nal_crefba'f_erpbeq_va";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-s94199oo23o187571n38nrs61o0r1sp0575ssqs4-ercbegf_ranoyr_nanylfvf_bs_uhz";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pber-q047srr984176pn584p47669q7o708or0312qn37-pbasvther_zbqhyrf,_znantr_gur";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:64:"1228:dhn-pber-q761698p011814s705s9qos84397987236173nnr-svefg_gel";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:61:"1228:dhn-pber-800o978q05rsnqs9s3s2619r0pr5n0760605042p-er-gel";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:64:"1228:dhn-pber-so507sq27o7qs17sp807pr3o8r78rs0o35938359-svany_gel";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:59:"1228:dhn-pber-q7pq56s2n2n3s47830760rqso89946ro7o9r2pq1-cnff";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:59:"1228:dhn-pber-2758r3273qq1670o2s6s59nsn8542q89p80q20n6-snvy";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:75:"1228:dhn-pber-3p9qp8s177qsq6osqsp1377nn977770580oos291-qvq_abg_fvg_sbe_rknz";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:64:"1228:dhn-pber-ns0sn7pq4ro8nr17072409115817nqp4r88os380-creznarag";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:64:"1228:dhn-pber-33q5667pq57so5060qr713rq01q2224qs3q3s6s3-grzcbenel";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:68:"1228:dhn-pber-2886139288582504nsop40898q323or1784ps614-raqbefre_qngr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:62:"1228:dhn-pber-p6o2o26r21o9615365r63788354660o6oqp98179-npgvir?";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:63:"1228:dhn-pber-q219p68101s532qr10nqq2ps42so9qorpn73q3or-ybpngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:75:"1228:dhn-pber-po4043po233219qqo0440469po879o6n09410q86-trarengr_guvf_ahzore";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:69:"1228:dhn-pber-s848272rn337r29sqs888688p543n50q433q57o1-ovegu_ybpngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:59:"1228:dhn-pber-70s8oo9n8n5393rs080507n89r4o98q139000q65-ubzr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:81:"1228:dhn-pber-o97n8s45ps61qq1o1q2433q65p7oqo2p6s853so7-trarengr_arkg_vaqrk_ahzore";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:83:"1228:dhn-pber-4nn9044pn661qss3525q6p65opn91p257766o9n0-genvarq_bhgfvqr_guvf_pbhagel";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:75:"1228:dhn-pber-816942s54q7s578q1np46p0o4226p83o6s7pnr6s-snpvyvgl_vafgvghgvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-n262013pr5396986n68s664980rsrr808p802s86-snpvyvgl_vafgvghgvba_rqvg_snpv";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-r8rr0069s6o96313pn4oqn7n0576sn20n8pp774s-snpvyvgl_vafgvghgvba_rqvg_vafg";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:61:"1228:dhn-pber-8p41nr88467sr5oonq09spq488662o25p3rp5333-crefba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:72:"1228:dhn-pber-1n9rs1n8o15r5s3ss28ro2qoos0qon081qp1no3p-rqhpngvba_uvfgbel";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:63:"1228:dhn-pber-o6sr7s5r79177o05s6q251rpo9p162q45455045q-genvavat";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:66:"1228:dhn-pber-pr350s5s5179s4n510p839986qs2872qqr03nsno-rknz_erfhyg";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:59:"1228:dhn-pber-0oq62n2517565554509p32pp92211ss599r24q96-rknz";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:72:"1228:dhn-pber-29ono72n6857rsr8p08o4qs7727087841rp864ns-ertvfgengvba_glcr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:78:"1228:dhn-pber-26p259r1opn32po10s1p323s7sr3s6n71p382874-qngn_bcrengvbaf_znantre";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:78:"1228:dhn-pber-43309966or1562r090n92qpq2s9n4n9ss7197s94-ertvfgengvba_fhcreivfbe";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:70:"1228:dhn-pber-33rs4q3or4oqr1812nq1nsp90570q7spq146s7q7-erpbeqf_bssvpre";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:69:"1228:dhn-pber-549o1qp0nr7q0172o590o70p800o776poqs54233-qrpvfvba_znxre";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-07s38o4n49qsror27po2s7posr740p81323o5498-nqq_hcqngr_pbagvahvat_rqhpngvb";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:76:"1228:dhn-pber-41286s04onp39s08649p9r7oor23r1q7rq3oon2p-nqq_hcqngr_qrcyblzrag";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-78506p80n4071rs1628qnq5p8ssps2r9nns9q2n9-nqq_hcqngr_qvfpvcyvanel_npgvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-s380618rr0rr5q430op17751s7sr462r25114878-ervafgngr_yvprafr_nsgre_qvfpvc";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-69296642o7p3pq906132p0s0pr2qp6qop4685961-nqq_hcqngr_rqhpngvba_vasbezngv";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:82:"1228:dhn-pber-so6092307158o5so12nnn620362o595qq548s9r1-nqq_hcqngr_rknz_vasbezngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-3p8396op3413s25nn0137631s7rq4ns38q4921n4-urnygu_snpvyvgl_genvavat_vafgv";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:74:"1228:dhn-pber-065575p112qq024np97os3n476rs489srps46899-nqq_tenqhngvba_qngr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:67:"1228:dhn-pber-8op3o1rq449r35o901q74p3qop468945062q2184-ivrj_uvfgbel";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-615r7144531697o90qp7n6n533n7or89o8q96683-nqq_hcqngr_genvavat_vafgvghgvb";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-nr9n43230p17147s8o290oo1o5s70854498rn16s-nqq_hcqngr_yvprafr_vasbezngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-rn8os1os74sq90n338p7q62oon096r0497o8o353-nqq_hcqngr_bhg_zvtengvba_vasbe";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-630qn4psr7p0r3592o5541onr4nn37o16n8qnq58-nqq_hcqngr_cevingr_cenpgvpr_yv";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-41pq4qpr5s1po63135qonrp69o70n3r3r76pn9s2-nqq_hcqngr_ertvfgengvba_vasbez";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:80:"1228:dhn-pber-15p794pp4o78241078n8588q752pp118831o0nq2-erarj_yvprafr_vasbezngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-782949o501s08p1p8o8q10r6nn663p33o1op5ns2-nqq_hcqngr_genvavat_qvfehcgvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:74:"1228:dhn-pber-988qqqsq6r76s94p1734794p31soo4271692nr18-nqq_hcqngr_genvavat";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:82:"1228:dhn-pber-q3q19o468490oq01802p7opn840rnrsp9sop4r9p-nqq_hcqngr_genvavat_cebtenz";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:81:"1228:dhn-pber-onpopo36ro944sos4so38n7610oo2o16ppr43194-erfhzr_genvavat_qvfehcgvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:68:"1228:dhn-pber-o584q2730q3ssq197989q6809s8386709n33p6o9-frnepu_crbcyr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-pber-3rr4q30op4p51912soo4rr4o414578pqno101s5p-frnepu_genvavatf";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pber-05n90318psn7p06o91pr78s96p61n95sppn2ns26-ybpngr_nal_crefba'f_erpbeq_va";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-qpqr9nn4o43s38ooq1r1nr588o436qs04466ps34-vaqrk_ahzore_f_-_pnqer_f_-_vag";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-827pp7o896735qonnq5s578op73n32p4r308o63r-fryrpg_gur_genvavat_fpubby_naq";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-sqo2o4p8op9n146182r03ospq1o96o866oo37197-fryrpg_gur_pbhagel,_glcr_gur_g";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:73:"1228:dhn-pber-6s7483p446154770206rq9267r78poqns5s55rr6-nqq_cnffcbeg_cubgb";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:74:"1228:dhn-pber-8q3q15s900oqrs9q1118o3n1s53043s62q12s3sr-erpbeq_irevsvpngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-pber-44s8836r1r57319rr71r99s9npo56s6q2q68o20s-nqq_irevsvpngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:80:"1228:dhn-pber-742s9552rqo02oq70n0pr0rn1o44qqons0np2957-ivrj_irevsvpngvba_uvfgbel";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-p42732po911n4prp1857q9q80op2750pr7860s6r-fryrpg_nabgure_bhg_zvtengvba_e";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:83:"1228:dhn-pber-n819ss878rrr301914n3ps795514qs821n6r6179-fryrpg_nabgure_dhnyvsvpngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-58p38o9n7s6317s7oqnr80295n4176688rs843n5-fryrpg_nabgure_qvfpvcyvanel_np";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:81:"1228:dhn-pber-4940noo42r332o6971688p6s0sq1r866q3080085-fryrpg_nabgure_pregvsvpngr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pber-1ns91783398ps419s9n554p6n127n6ro99n7oop3-fryrpg_nabgure_npnqrzvp_yriry";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-p1sps5287n1n1883ssoo8qs38ns667n8469n6pp9-fryrpg_nabgure_genvavat_qvfehc";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:75:"1228:dhn-pber-4r61586nps6sqr7spn5pp9n82qqoqpn295o3n0o6-nqzvavfgengvir_yvfgf";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:82:"1228:dhn-pber-s590pqqsprrq5nrs73o34p3qs659n2po7n888sr3-erpbeq_irevsvpngvba_punatrf";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-9n1q3r16nqrrs2q59r715q7571q4qn3rns57nqpo-fryrpg_nabgure_snpvyvgl_fgnghf";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pber-qr5pssqrp3p4225r4370q8rn4s5oor8p72s9163r-fryrpg_nabgure_vqragvsvpngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-6rq95sqsn6qs37oo946rq8n1sp1pro2o92o1359s-nqzvavfgre_qngnonfr_genvavat_c";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:67:"1228:dhn-pber-q8rp6qo71o8qro067rn524n66n19p02ppr906n91-ivrj_ercbegf";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pber-s85n37po23q446867p9303r4338s4qn1384os865-fryrpg_nabgure_snpvyvgl_ntrag";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-999p9o0op13p3sspr18320oo49404173o25qp378-fryrpg_nabgure_genvavat_qvfehc";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-4814o92op502n6pqnqp4nn99r4r80rq55qo5qo33-fryrpg_nabgure_qvfpvcyvanel_np";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:75:"1228:dhn-pber-422rp56oop16253r50pr58449s018nso3q1745qq-fryrpg_nabgure_pnqer";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pber-6651732n3718qo967118psn9r5684o46p8ro9q00-hcqngr_genvavat_ertvfgengvbaf";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:77:"1228:dhn-pber-rpsr29rs8spsp7p6552so9793sq0884n7o9p0n8o-nqqvgvbany_vasbezngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:79:"1228:dhn-pber-92363r7oq4r6n9s80n3938488rso60337s983017-ertvfgengvba_pregvsvpngr";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:67:"1228:dhn-pber-2r37q340o041p3o32q48q323o59rn13onqn7165s-yvprafr_pneq";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:78:"1228:dhn-pber-46s86ns69nqno0rqp06s76o6sq13432139os19or-arkg_bs_xva_vasbezngvba";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:70:"1228:dhn-pber-sr433qo348n1782550o86o312r8qss9321o1p7pq-nqq_arkg_bs_xva";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:76:"1228:dhn-pber-1o79pppor00no34s7ns0qo06591q228q0o39pp46-fpnaarq_cncre_erpbeqf";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:75:"1228:dhn-pber-017n93s22r39rp01no43qrr9o7orp4q4sso574r8-nqq_fpnaarq_qbphzrag";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:62:"1228:dhn-pber-04n212215rs9sos686q280802ro81rr7n6r681pq-pbasvez";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-9npopoopr48012qns3n46s4ro4663108spq31634-pna_ivrj_gur_qvfpvcyvanel_npgv";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-1s93262299r06963996o9s116135n034o30poo74-pna_ivrj_gur_bhg_zvtengvba_sbe";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:82:"1228:dhn-pber-32ppsrqpor85720rqos022r401sqs52pqqoo74q2-pna_ivrj_gur_genvavat_sbez.";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:81:"1228:dhn-pber-os27s718ps969pp55os986o696342n2522603357-pna_ivrj_gur_yvprafr_sbez.";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:83:"1228:dhn-pber-8o0or04r952nr4s8n847pr69q3894s060s113441-pna_ivrj_gur_rqhpngvba_sbez.";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-01770r205pqn7nq143046294ors51qq26p001159-pna_ivrj_gur_crefba_yvprafr_sb";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pber-4r105225p81rpr3901194s3srp40r0s6p1008284-pna_ivrj_gur_erpbeq_irevsl_sbe";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pber-s17o385sp02o37qq7nr4q3s8n0qpq9p155o27no7-pna_ivrj_gur_qrcyblzrag_sbez.";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:73:"1228:dhn-pber-9824sr25258os8s143n4oo7634poq228rnq1p9r7-fgnaqneqvmrq_sbezf";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:82:"1228:dhn-pber-q79qqn74qqo9o5ooso2rr38922r7n0rp493qq298-fgnaqneqvmrq_genvavat_sbezf";a:3:{i:0;R:23337;i:1;R:21167;i:2;R:23338;}s:73:"1228:dhn-peq-6r973372p00r2ppo94nq1644n04or9s9qp57q6rs-genvavat_qvfehcgvba";a:3:{i:0;s:21:"out-ihris-qualify-crd";i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-peq-4q914205150o6ssop21507oq04q19o9o084rsp42-eryngvbafuvc_sbe_genvavat_qvfe";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-peq-1o546nos097n514n674s8rsr279n43os21608rnn-gur_lrne_guvf_qvfehcgvba_bpphe";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:83:"1228:dhn-peq-839652p8pnp2516734rn800r9631907rno6sp175-n_fgevat_gb_qrgrezvar_vs_guvf";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-peq-9s843os8n281r5q7822s37sos21521s766os0905-gur_ernfba_guvf_qvfehcgvba_bpp";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-peq-58rn12onpr1q85277ro8535sqrprnrq7rs9p6895-qvfehcgvba_ernfba";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-peq-po1ssp0s657r79rr148q9r225oq71139p259pp0n-gur_pngrtbel_sbe_gur_ernfba_gu";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:73:"1228:dhn-peq-p523o13nor5624nn687r3p55q4po1ros52136qq5-qvfehcgvba_pngrtbel";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-peq-2pn241r2n86s3598or072o0os5r6r9pp3nq4p2p3-ercbegf_eryngrq_gb_genvavat_qv";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-peq-o9q84p45o6sop21srron212212o3o55s4q1p0n95-n_cvr_puneg_bs_nyy_qvfpbagvahn";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:82:"1228:dhn-peq-1n4217897222o70rr6027r745n641qn0p3n9n168-qvfpbagvahngvbaf_ol_pngrtbel";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-peq-20oo9035383r74r075oo44942q26s1935p4n3or4-cvr_puneg(fvzcyr)";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-peq-6140s3732445sr6030o3pp911qp51ss9oo979oqs-one_puneg(fvzcyr)";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:74:"1228:dhn-peq-01646n443n3sqr1o6n38012541nnp89ns595o0q8-pbyhza_puneg(fvzcyr)";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:82:"1228:dhn-peq-3910n0ns1p40s4n8oo7q64r20295709660752sqn-fgnpxrq_pbyhza_puneg(fvzcyr)";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:66:"1228:dhn-peq-63920248r4o1noqqo609813526n48ps4n8r4931n-fpnggre_cybg";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-peq-3572q7oqop507397221q1642o9139n62sqon2579-n_puneg_bs_nyy_qvfpbagvahngvba";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:80:"1228:dhn-peq-131so5q5o384373q36nn41895psr1on39on72qo3-qvfpbagvahngvbaf_ol_ernfba";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-peq-96s6qors6r6rn72po4p02sq991r7s31o541206qr-n_puneg_bs_nyy_qvfpbagvahngvba";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:78:"1228:dhn-peq-o5q0s4441p3210344779o083097150sns5n99pos-qvfpbagvahngvbaf_ol_lrne";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-peq-r6p17560rp30524osp4p699pn73385r57p13oppq-n_cvr_puneg_bs_qvfehcgvbaf_gun";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-peq-669q783ssr2rr6407858nn19782o1s37pp91o7rq-erfhzcgvba_ercbeg";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:70:"1228:dhn-peq-n49017r662o2q4pqs74q8r98005nn9s095s7pos7-genvavat_ercbegf";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:59:"1228:dhn-peq-2586n9r4r3on9092547r3rnp14r105p5ssoqn37o-pnqer";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:67:"1228:dhn-peq-133160594q08spq32s94p34q17r39s61r6s3q12r-qngr_bs_ovegu";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:73:"1228:dhn-peq-7psrsn12s6rp73qp45929r72p72rr32729q679o3-qngr_bs_ovegu_nsgre";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:74:"1228:dhn-peq-rr98p0r846o9n53p634o4pr16p8n987r4p2p1p7q-qngr_bs_ovegu_orsber";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:60:"1228:dhn-peq-8n754p61p2prq0p5ss79n1827r02p9q643q6q926-traqre";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:76:"1228:dhn-peq-n4418888s5q00o36p16n84q98oq2pqq12q76qrrq-qvfehcgvba_pngrtbel_vq";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:69:"1228:dhn-peq-s06pq2q08n66p2s5706r0q5006n539s481r2qq86-qvfehcgvba_qngr";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:74:"1228:dhn-peq-r844n3p997oon767q3451qospp56r388or9n005o-qvfehcgvba_ernfba_vq";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:69:"1228:dhn-peq-nn9o51r9pr64855nn673490rqrs9nn35p7n50n5p-erfhzcgvba_qngr";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:68:"1228:dhn-peq-93s5qpp78rpq92o0qq9nrrq0130p992rqs608p24-genvavat_pnqer";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:65:"1228:dhn-peq-4n5r4no277o1254sppr1760s71o0po29np62606n-vagnxr_qngr";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-peq-7np4q2s422or1q6n39p7rrs3834rpon1po754s77-vagnxr_qngr_nsgre";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:72:"1228:dhn-peq-s000sp2np2qs57o73oq91qor2r2302p32p87213s-vagnxr_qngr_orsber";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-peq-3q22r79p9o225369r6pq2qrr1r5r4np7oo7np09p-gur_genvavat_gung_jnf_qvfehcgr";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:62:"1228:dhn-peq-o6sr7s5r79177o05s6q251rpo9p162q45455045q-genvavat";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:80:"1228:dhn-peq-25p12s8p1q8225sn0np4361q9941sr2n9215ns36-gur_pnqer_bs_gur_genvavat.";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-peq-o79rnq60s40p112925r5736qor10n2q61r298p07-gur_crefba_gnxvat_gur_genvavat";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:60:"1228:dhn-peq-8p41nr88467sr5oonq09spq488662o25p3rp5333-crefba";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-peq-905po2sn630857sso450o4p620pq2r65q534o7q7-gur_qrzbtencuvp_qrgnvyf_bs_gur";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:65:"1228:dhn-peq-ron97o6rqqn213rr80q274492r8o25475s6633p9-qrzbtencuvp";a:3:{i:0;R:23594;i:1;R:21167;i:2;R:23338;}s:58:"1228:dhn-per-0oq62n2517565554509p32pp92211ss599r24q96-rknz";a:3:{i:0;s:21:"out-ihris-qualify-cre";i:1;R:21167;i:2;R:23338;}s:77:"1228:dhn-per-ss785ps3pq58ro0po1sr0n37rq34nq578s093163-eryngvbafuvc_sbe_rknzf.";a:3:{i:0;R:23638;i:1;R:21167;i:2;R:23338;}s:83:"1228:dhn-per-99oo33qnos5o37q8qp7rons5n14317p45r11sn5r-gur_lrne_guvf_rknz_jnf_gnxra.";a:3:{i:0;R:23638;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-per-nqs1329n70601n106881rs70142650op4794q7s4-gur_genvavat_nffbpvngrq_jvgu_g";a:3:{i:0;R:23638;i:1;R:21167;i:2;R:23338;}s:62:"1228:dhn-per-o6sr7s5r79177o05s6q251rpo9p162q45455045q-genvavat";a:3:{i:0;R:23638;i:1;R:21167;i:2;R:23338;}s:81:"1228:dhn-per-84958q526s3n22nsp2708r1ss6q53o8098snn258-gur_pnqer_bs_guvf_genvavat.";a:3:{i:0;R:23638;i:1;R:21167;i:2;R:23338;}s:59:"1228:dhn-per-2586n9r4r3on9092547r3rnp14r105p5ssoqn37o-pnqer";a:3:{i:0;R:23638;i:1;R:21167;i:2;R:23338;}s:66:"1228:dhn-per-4o0r65s8s0os7roqq941350so129q61r941qqs03-rknz_ercbegf";a:3:{i:0;R:23638;i:1;R:21167;i:2;R:23338;}s:79:"1228:dhn-per-9q851n88q1433059qo73479o295npp69qr7088q8-ercbegf_eryngrq_gb_rknzf.";a:3:{i:0;R:23638;i:1;R:21167;i:2;R:23338;}s:63:"1228:dhn-per-nsn4p0nr1s2no2n4p5p447qs5qq1p2qpnnn547np-rknz_qngr";a:3:{i:0;R:23638;i:1;R:21167;i:2;R:23338;}s:57:"1228:dhn-per-72677028o4q0q41ns475041sqor030s7p7146q2p-gel";a:3:{i:0;R:23638;i:1;R:21167;i:2;R:23338;}s:61:"1228:dhn-per-612r12q29278o5519294op25pqnqqssrp6q0s1p6-erfhygf";a:3:{i:0;R:23638;i:1;R:21167;i:2;R:23338;}s:65:"1228:dhn-per-74oon00q6703oq292ps12516sr7rr2q3n370qq8s-rknz_ahzore";a:3:{i:0;R:23638;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-per-1p99r27247p1348ns75862rr34n617nrq8660n8s-genvavat_pnqer_vq";a:3:{i:0;R:23638;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-per-7np4q2s422or1q6n39p7rrs3834rpon1po754s77-vagnxr_qngr_nsgre";a:3:{i:0;R:23638;i:1;R:21167;i:2;R:23338;}s:72:"1228:dhn-per-s000sp2np2qs57o73oq91qor2r2302p32p87213s-vagnxr_qngr_orsber";a:3:{i:0;R:23638;i:1;R:21167;i:2;R:23338;}s:65:"1228:dhn-per-4n5r4no277o1254sppr1760s71o0po29np62606n-vagnxr_qngr";a:3:{i:0;R:23638;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-per-13ss37487726snnpo6p612n42778pn76s2r3r12n-n_cnff_snvy_pbzcnevfba_sbe_nyy";a:3:{i:0;R:23638;i:1;R:21167;i:2;R:23338;}s:68:"1228:dhn-per-5231nsp43o66600519p75397p785n406sp5o33rq-rknz_cnff_snvy";a:3:{i:0;R:23638;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-per-20oo9035383r74r075oo44942q26s1935p4n3or4-cvr_puneg(fvzcyr)";a:3:{i:0;R:23638;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-per-6140s3732445sr6030o3pp911qp51ss9oo979oqs-one_puneg(fvzcyr)";a:3:{i:0;R:23638;i:1;R:21167;i:2;R:23338;}s:74:"1228:dhn-per-01646n443n3sqr1o6n38012541nnp89ns595o0q8-pbyhza_puneg(fvzcyr)";a:3:{i:0;R:23638;i:1;R:21167;i:2;R:23338;}s:82:"1228:dhn-per-3910n0ns1p40s4n8oo7q64r20295709660752sqn-fgnpxrq_pbyhza_puneg(fvzcyr)";a:3:{i:0;R:23638;i:1;R:21167;i:2;R:23338;}s:66:"1228:dhn-per-63920248r4o1noqqo609813526n48ps4n8r4931n-fpnggre_cybg";a:3:{i:0;R:23638;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-per-3np6o31o3sq410974s7qqo061148qp08p1115005-n_cnff_snvy_pbzcnevfba_sbe_nyy";a:3:{i:0;R:23638;i:1;R:21167;i:2;R:23338;}s:76:"1228:dhn-per-p0n438p62680qn92p9sr977427099q805sqo6306-rknz_cnff_snvy_ol_lrne";a:3:{i:0;R:23638;i:1;R:21167;i:2;R:23338;}s:70:"1228:dhn-per-n49017r662o2q4pqs74q8r98005nn9s095s7pos7-genvavat_ercbegf";a:3:{i:0;R:23638;i:1;R:21167;i:2;R:23338;}s:74:"1228:dhn-pev-q38r9o888r8o481rrrn6qn394q506s30qqs68n32-genvavat_vafgvghgvba";a:3:{i:0;s:21:"out-ihris-qualify-cri";i:1;R:21167;i:2;R:23338;}s:83:"1228:dhn-pev-8nqooor74os8ns5p6sop56npnso1pq9oo2qsss6n-eryngvbafuvc_sbe_nyy_genvavat";a:3:{i:0;R:23666;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pev-q47727454056p6psq86278r8rq29nq8qsq902q64-gur_pbagnpg_qrgnvyf_sbe_guvf_v";a:3:{i:0;R:23666;i:1;R:21167;i:2;R:23338;}s:61:"1228:dhn-pev-o37456p4530or810qp040s50qn72rqn09nqqso0n-pbagnpg";a:3:{i:0;R:23666;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pev-pqq1o803o9n22850orr1n2q9273745q7r556o396-gur_snpvyvgl_ntrag_sbe_guvf_va";a:3:{i:0;R:23666;i:1;R:21167;i:2;R:23338;}s:68:"1228:dhn-pev-05o9r455o57ss2020p53p8q66ss28o23372qr218-snpvyvgl_ntrag";a:3:{i:0;R:23666;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pev-9q8rn630r44qspn166773r9413259s5q138n42pp-gur_qvfgevpg_jurer_guvf_vafgvg";a:3:{i:0;R:23666;i:1;R:21167;i:2;R:23338;}s:62:"1228:dhn-pev-p0po139ppr34769so7rq9onsp15290r91ps7736p-qvfgevpg";a:3:{i:0;R:23666;i:1;R:21167;i:2;R:23338;}s:82:"1228:dhn-pev-12335540207879s850qopo541n46645q1704p703-genvavat_vafgvghgvba_ercbegf";a:3:{i:0;R:23666;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pev-3op2qn3sp844861q1q2on5443r82945r127n917o-n_yvfg_bs_nyy_genvavat_vafgvgh";a:3:{i:0;R:23666;i:1;R:21167;i:2;R:23338;}s:83:"1228:dhn-pev-1ro6214p5p700r3o253542265252q94qs32pnnqs-genvavat_vafgvghgvba_snpvyvgl";a:3:{i:0;R:23666;i:1;R:21167;i:2;R:23338;}s:79:"1228:dhn-pev-3o8q0rsrs9qs10sn1378363205p532s558p5rqr5-genvavat_vafgvghgvba_anzr";a:3:{i:0;R:23666;i:1;R:21167;i:2;R:23338;}s:83:"1228:dhn-pev-8144516p7s924008q8no30839q1qq3n30o185sq1-genvavat_vafgvghgvba_ybpngvba";a:3:{i:0;R:23666;i:1;R:21167;i:2;R:23338;}s:83:"1228:dhn-pev-2s79n5027pro39rr72r524472p63069q3oq916p0-genvavat_vafgvghgvba_ybpngvba";a:3:{i:0;R:23666;i:1;R:21167;i:2;R:23338;}s:69:"1228:dhn-pev-r6nso989237759p66s5o0r4226971s840rsq5r7r-znvyvat_nqqerff";a:3:{i:0;R:23666;i:1;R:21167;i:2;R:23338;}s:75:"1228:dhn-pev-0914791qs9n7149o0o422804190r5330497pr506-genvavat_vafgvghgvbaf";a:3:{i:0;R:23666;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pey-9s786r5sqprn96s83743599nn77o3p605ssp36o2-ercbegf_onfrq_ba_pheerag_yvpra";a:3:{i:0;s:21:"out-ihris-qualify-crl";i:1;R:21167;i:2;R:23338;}s:61:"1228:dhn-pey-3229609r15436rp51ops00818n69n84qop58n0p2-yvprafr";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pey-n3433pr242q0874oqrpsr24ro94p10qp603p0666-gur_genvavat_nffbpvngrq_jvgu_g";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:62:"1228:dhn-pey-o6sr7s5r79177o05s6q251rpo9p162q45455045q-genvavat";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pey-64n6sn39p5s4r7n83s77p11prq9314591366q3s9-gur_pnqer_nffbpvngrq_jvgu_guvf";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:59:"1228:dhn-pey-2586n9r4r3on9092547r3rnp14r105p5ssoqn37o-pnqer";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pey-2059rprn27s964n7rr5qp42r3sq6n82q9pp1299p-gur_crefba_jub_gbbx_guvf_genva";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:60:"1228:dhn-pey-8p41nr88467sr5oonq09spq488662o25p3rp5333-crefba";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pey-97n7q44518r608s633r1s67onqs477p74138p276-gur_qrzbtencuvp_qrgnvyf_sbe_gu";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:65:"1228:dhn-pey-ron97o6rqqn213rr80q274492r8o25475s6633p9-qrzbtencuvp";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:68:"1228:dhn-pey-678n2q17q5870q7p093rs990n00623q915229598-yvprafr_ercbeg";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:64:"1228:dhn-pey-o6rn992nno4668311oo94778r056qq0285s27621-svefg_anzr";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:61:"1228:dhn-pey-77qspn2n56s9o1ssp2o6687r230088ps86sop074-fheanzr";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:70:"1228:dhn-pey-10091q4o7sp447772r69s9r078195s310sssrssr-yvprafr_raq_qngr";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:68:"1228:dhn-pey-1q5971ro658q8s9qq3502s9o1n761po73nq91869-yvprafr_ahzore";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-pey-1p99r27247p1348ns75862rr34n617nrq8660n8s-genvavat_pnqer_vq";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:75:"1228:dhn-pey-r0311068p9q340519nor305so366n2n82o40147o-tenqhngvba_qngr_nsgre";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:76:"1228:dhn-pey-nq0s63o6sop83015017216932393nq4s7o477374-tenqhngvba_qngr_orsber";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:69:"1228:dhn-pey-q8q595839pq9207o4s673463n5ron6s92r566335-tenqhngvba_qngr";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:60:"1228:dhn-pey-8n754p61p2prq0p5ss79n1827r02p9q643q6q926-traqre";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:83:"1228:dhn-pey-91poq6o35or28q2o6r850615p706n8861p12277o-n_yvfg_bs_nyy_yvprafrq_urnygu";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:77:"1228:dhn-pey-84q22118827no67323poo59776n7nn6r1s92q96q-yvprafrq_urnygu_jbexref";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pey-4s637r3p64qn0r6o98653s78no403qqn67q8740q-n_puneg_bs_nyy_yvprafrq_urnygu";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pey-798r73918729993o24sno99r680s7446pnq11os6-yvprafrq_urnygu_jbexref_ol_pnq";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-pey-20oo9035383r74r075oo44942q26s1935p4n3or4-cvr_puneg(fvzcyr)";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-pey-6140s3732445sr6030o3pp911qp51ss9oo979oqs-one_puneg(fvzcyr)";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:74:"1228:dhn-pey-01646n443n3sqr1o6n38012541nnp89ns595o0q8-pbyhza_puneg(fvzcyr)";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:82:"1228:dhn-pey-3910n0ns1p40s4n8oo7q64r20295709660752sqn-fgnpxrq_pbyhza_puneg(fvzcyr)";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:66:"1228:dhn-pey-63920248r4o1noqqo609813526n48ps4n8r4931n-fpnggre_cybg";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:72:"1228:dhn-pey-866218196qo49r13034406op7s0079726qs8926q-yvprafr_fgneg_qngr";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:70:"1228:dhn-pey-n49017r662o2q4pqs74q8r98005nn9s095s7pos7-genvavat_ercbegf";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:76:"1228:dhn-pey-8337n1p961n4r34o42sr38200r5q7023896rp522-yvprafr_raq_qngr_nsgre";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:77:"1228:dhn-pey-6s5qn31r58734s938po47n8583p01573s281326q-yvprafr_raq_qngr_orsber";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:78:"1228:dhn-pey-08q9397pr81p33r4p13oo12021sr8qo9s5nns533-yvprafr_fgneg_qngr_nsgre";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:79:"1228:dhn-pey-8np7o3s6n8327n38rrs271204on091r7p601q986-yvprafr_fgneg_qngr_orsber";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pey-nr9p49o557os55q9977635n715p450743n7or518-gur_ertvfgengvba_vasbezngvba_s";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:66:"1228:dhn-pey-o233r775q63oo8o86ps031776q4pnrn613s59pqn-ertvfgengvba";a:3:{i:0;R:23683;i:1;R:21167;i:2;R:23338;}s:60:"1228:dhn-pec-8p41nr88467sr5oonq09spq488662o25p3rp5333-crefba";a:3:{i:0;s:21:"out-ihris-qualify-crp";i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pec-q110s462oo09816n409645pr1722823n8os70r34-gur_crefba_eryngvbafuvc_jvgu_s";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pec-52ns1qrp8nqqn4784r7oosqn7q8o9rp2527n6q48-gur_erfhygf_bs_gur_rknz_naq_er";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pec-q81711ns44n4nsrnp2o4o0r3noq006466n58qqpr-gur_lrne_gur_svefg_genvavat_bp";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:82:"1228:dhn-pec-001pr5p46865r40q86232q11s0p792o9qq1s406o-gur_lrne_gur_rknz_jnf_gnxra.";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pec-q0605r6n46723r9562o6r5n35n3o69r127pq599p-n_lrf_ab_gb_qrgrezvar_vs_gur_c";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pec-66031p673o10noq3pppnnq91o446760q4qo6r941-gur_qrzbtencuvp_vasbezngvba_sb";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:65:"1228:dhn-pec-ron97o6rqqn213rr80q274492r8o25475s6633p9-qrzbtencuvp";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pec-p15896p21p889634so0s1177813os1rppo45ro3n-gur_qvfgevpg_jurer_guvf_crefba";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:68:"1228:dhn-pec-38n74o5or16nq0368p0q29q53pp9n97943q8s641-ovegu_qvfgevpg";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pec-q327r9380oor47oq1r7pnq4ooop283oq32qor84p-gur_zbfg_erprag_qrcyblzrag_sbe";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:64:"1228:dhn-pec-327n55s82qp6818877n68r37o722oo7s2360o633-qrcyblzrag";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pec-5onp2n76r4onpsr08130778525pr2rr7898p043r-gur_svefg_genvavat_guvf_crefba";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:68:"1228:dhn-pec-9prn7n7n40s36148n35r38p2q599o7opn1ps1q4r-svefg_genvavat";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pec-0842n0pqpn3s009p1p66803495rq9sn6q0q4rn65-gur_pnqer_bs_gur_svefg_genvava";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:59:"1228:dhn-pec-2586n9r4r3on9092547r3rnp14r105p5ssoqn37o-pnqer";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:83:"1228:dhn-pec-2qp93ss173p6ro4prs238o676q7p078422956915-gur_rknz_qrgnvyf_bs_gur_svefg";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:58:"1228:dhn-pec-0oq62n2517565554509p32pp92211ss599r24q96-rknz";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pec-n8rrnqoqp5111os3s1r293n30sn74550385q8877-gur_ertvfgengvba_qrgnvyf_bs_gu";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:66:"1228:dhn-pec-o233r775q63oo8o86ps031776q4pnrn613s59pqn-ertvfgengvba";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pec-1rrroo44r6240r4773p29376n91p3rqr9r8p983s-gur_genvavat_vafgvghgvba_jurer";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:74:"1228:dhn-pec-q38r9o888r8o481rrrn6qn394q506s30qqs68n32-genvavat_vafgvghgvba";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pec-75020q31641o8041853qq85s3079026sns72n057-gur_qvfgevpg_jurer_gur_genvava";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:74:"1228:dhn-pec-25287po0662s5o3r27o65080rsn83o1n2q3s0qq1-vafgvghgvba_qvfgevpg";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pec-r6r5q4p08462pr4oso9q50pr2p794pr2op05o775-gur_pheerag_genvavat_qvfehcgvb";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:73:"1228:dhn-pec-6r973372p00r2ppo94nq1644n04or9s9qp57q6rs-genvavat_qvfehcgvba";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:67:"1228:dhn-pec-490q80931704334n521onp1q02412r415310oqo3-crefba_ercbeg";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pec-srr2515p0442796o69r7243p773229p77s9p3o22-ercbegf_eryngrq_gb_crbcyr_va_g";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:61:"1228:dhn-pec-77qspn2n56s9o1ssp2o6687r230088ps86sop074-fheanzr";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:64:"1228:dhn-pec-o6rn992nno4668311oo94778r056qq0285s27621-svefg_anzr";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:65:"1228:dhn-pec-n89q2rnp8q13516o29rs1s2253snn80144670s49-bgure_anzrf";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:66:"1228:dhn-pec-2q1655sqn5449rr91536o245qs9q20576n7q56p6-vaqrk_ahzore";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-pec-1p99r27247p1348ns75862rr34n617nrq8660n8s-genvavat_pnqer_vq";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-pec-7np4q2s422or1q6n39p7rrs3834rpon1po754s77-vagnxr_qngr_nsgre";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:72:"1228:dhn-pec-s000sp2np2qs57o73oq91qor2r2302p32p87213s-vagnxr_qngr_orsber";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:65:"1228:dhn-pec-4n5r4no277o1254sppr1760s71o0po29np62606n-vagnxr_qngr";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:69:"1228:dhn-pec-q8q595839pq9207o4s673463n5ron6s92r566335-tenqhngvba_qngr";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:69:"1228:dhn-pec-s06pq2q08n66p2s5706r0q5006n539s481r2qq86-qvfehcgvba_qngr";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:73:"1228:dhn-pec-1qn775087104510s18021qr3pr98227rp4sr0315-ertvfgengvba_ahzore";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:63:"1228:dhn-pec-nsn4p0nr1s2no2n4p5p447qs5qq1p2qpnnn547np-rknz_qngr";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:66:"1228:dhn-pec-6006oo2n5o4q00700p0oo68rpp1ooop2r1sr37pp-rknz_erfhygf";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:60:"1228:dhn-pec-8n754p61p2prq0p5ss79n1827r02p9q643q6q926-traqre";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:74:"1228:dhn-pec-041n7p781o65264n38q0o0042n96pr294q8o2991-ertvfgengvba_erfhygf";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:72:"1228:dhn-pec-qq839n03288n727r8s164r0140943n725ns8ro13-gbc_ovegu_qvfgevpg";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-pec-20oo9035383r74r075oo44942q26s1935p4n3or4-cvr_puneg(fvzcyr)";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-pec-6140s3732445sr6030o3pp911qp51ss9oo979oqs-one_puneg(fvzcyr)";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:74:"1228:dhn-pec-01646n443n3sqr1o6n38012541nnp89ns595o0q8-pbyhza_puneg(fvzcyr)";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:82:"1228:dhn-pec-3910n0ns1p40s4n8oo7q64r20295709660752sqn-fgnpxrq_pbyhza_puneg(fvzcyr)";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:66:"1228:dhn-pec-63920248r4o1noqqo609813526n48ps4n8r4931n-fpnggre_cybg";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pec-806rp95q8qs5qsoqo1p1007n4181969qqr710252-gur_ahzore_bs_fghqragf_ragreva";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:73:"1228:dhn-pec-s2591oo3s59p7p2q50n6931p52s4oq95r9724r46-fghqrag_vagnxr_lrne";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pec-03q6sn9s0o53995n5pp5s75r78o427341r25320p-gur_cnff_snvy_erfhygf_sbe_rnpu";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:81:"1228:dhn-pec-30qqrp93np652s7pn8288o1668668621o641r0p0-cnff_snvy_ol_svefg_genvavat";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pec-05542o1n273qop37s3n9o5p25400oq24nn5ppp82-gur_ertvfgengvba_erfhygf_sbe_r";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:83:"1228:dhn-pec-16r65n9o4r91p4663op966444r897os50r078077-ertvfgengvba_erfhygf_ol_svefg";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pec-8258r6460oss7sr17prn111q22o88n0185317ssq-fghqragf_ol_vagnxr_lrne_gung_n";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:82:"1228:dhn-pec-r3s3n63ps8o05sn7230o59qprr630rs8456pp979-fghqragf_va_genvavat_ol_lrne";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pec-8n171160394542s57os60p60s1oo7srq01nnqqoo-n_cvr_puneg_bs_gur_ahzore_bs_c";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:68:"1228:dhn-pec-7739s995rpqrns45soq18o60n31r2r53srr45qp2-crefba_ercbegf";a:3:{i:0;R:23721;i:1;R:21167;i:2;R:23338;}s:66:"1228:dhn-pee-o233r775q63oo8o86ps031776q4pnrn613s59pqn-ertvfgengvba";a:3:{i:0;s:21:"out-ihris-qualify-crr";i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pee-251844r1n6o215636s9npnso60q44o065sp1os98-eryngvbafuvc_sbe_ercbegf_qrnyv";a:3:{i:0;R:23781;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pee-roq788rp4qn98s7pr0857s13658p61s900124pps-gur_genvavat_nffbpvngrq_jvgu_g";a:3:{i:0;R:23781;i:1;R:21167;i:2;R:23338;}s:62:"1228:dhn-pee-o6sr7s5r79177o05s6q251rpo9p162q45455045q-genvavat";a:3:{i:0;R:23781;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pee-64n6sn39p5s4r7n83s77p11prq9314591366q3s9-gur_pnqer_nffbpvngrq_jvgu_guvf";a:3:{i:0;R:23781;i:1;R:21167;i:2;R:23338;}s:59:"1228:dhn-pee-2586n9r4r3on9092547r3rnp14r105p5ssoqn37o-pnqer";a:3:{i:0;R:23781;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pee-2059rprn27s964n7rr5qp42r3sq6n82q9pp1299p-gur_crefba_jub_gbbx_guvf_genva";a:3:{i:0;R:23781;i:1;R:21167;i:2;R:23338;}s:60:"1228:dhn-pee-8p41nr88467sr5oonq09spq488662o25p3rp5333-crefba";a:3:{i:0;R:23781;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pee-s174n3r12r2rs26rnqrr9so8or6o48o4r3o11npo-gur_crefbany_pbagnpg_vasbezngv";a:3:{i:0;R:23781;i:1;R:21167;i:2;R:23338;}s:70:"1228:dhn-pee-n3srn9qq7468r2s50n0o64po69r6srrp65p3op04-crefbany_pbagnpg";a:3:{i:0;R:23781;i:1;R:21167;i:2;R:23338;}s:73:"1228:dhn-pee-7515rspn41n428941s2qp25qq4o216r4692p454n-ertvfgengvba_ercbeg";a:3:{i:0;R:23781;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pee-25r5o4nrr2q0nq907n4957440r0n77o89rr2q584-ercbegf_onfrq_ba_ertvfgengvbaf";a:3:{i:0;R:23781;i:1;R:21167;i:2;R:23338;}s:73:"1228:dhn-pee-1qn775087104510s18021qr3pr98227rp4sr0315-ertvfgengvba_ahzore";a:3:{i:0;R:23781;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-pee-r68qs6q34nrn0o889sq634qop28nr13r29p6r254-ertvfgengvba_qngr";a:3:{i:0;R:23781;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-pee-1p99r27247p1348ns75862rr34n617nrq8660n8s-genvavat_pnqer_vq";a:3:{i:0;R:23781;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-pee-7np4q2s422or1q6n39p7rrs3834rpon1po754s77-vagnxr_qngr_nsgre";a:3:{i:0;R:23781;i:1;R:21167;i:2;R:23338;}s:72:"1228:dhn-pee-s000sp2np2qs57o73oq91qor2r2302p32p87213s-vagnxr_qngr_orsber";a:3:{i:0;R:23781;i:1;R:21167;i:2;R:23338;}s:65:"1228:dhn-pee-4n5r4no277o1254sppr1760s71o0po29np62606n-vagnxr_qngr";a:3:{i:0;R:23781;i:1;R:21167;i:2;R:23338;}s:61:"1228:dhn-pee-77qspn2n56s9o1ssp2o6687r230088ps86sop074-fheanzr";a:3:{i:0;R:23781;i:1;R:21167;i:2;R:23338;}s:64:"1228:dhn-pee-o6rn992nno4668311oo94778r056qq0285s27621-svefg_anzr";a:3:{i:0;R:23781;i:1;R:21167;i:2;R:23338;}s:69:"1228:dhn-pee-r6nso989237759p66s5o0r4226971s840rsq5r7r-znvyvat_nqqerff";a:3:{i:0;R:23781;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pee-7638s86ss1530751pq8s68391887171osr3o4s80-n_yvfg_bs_nyy_ertvfgrerq_urnyg";a:3:{i:0;R:23781;i:1;R:21167;i:2;R:23338;}s:79:"1228:dhn-pee-rn9537338sr29po81so2638p81p4nr16q226o5rq-ertvfgrerq_urnygu_jbexref";a:3:{i:0;R:23781;i:1;R:21167;i:2;R:23338;}s:70:"1228:dhn-pee-n49017r662o2q4pqs74q8r98005nn9s095s7pos7-genvavat_ercbegf";a:3:{i:0;R:23781;i:1;R:21167;i:2;R:23338;}s:77:"1228:dhn-pee-535201r25o694q926043p933q77114006992043o-ertvfgengvba_qngr_nsgre";a:3:{i:0;R:23781;i:1;R:21167;i:2;R:23338;}s:78:"1228:dhn-pee-2918ro8p0403262s07q0nq3oqs34621r130pnss6-ertvfgengvba_qngr_orsber";a:3:{i:0;R:23781;i:1;R:21167;i:2;R:23338;}s:68:"1228:dhn-pefc-o584q2730q3ssq197989q6809s8386709n33p6o9-frnepu_crbcyr";a:3:{i:0;s:22:"out-ihris-qualify-crsp";i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pefc-430p68rops0n2so0803oo3521s42on02n920q0p6-gur_eryngvbafuvc_hfrq_sbe_gur";a:3:{i:0;R:23808;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-pefc-p36095qs340p47r4n4p5p11rn9po2po296p69q30-gur_zbfg_erprag_genvavat_guvf";a:3:{i:0;R:23808;i:1;R:21167;i:2;R:23338;}s:68:"1228:dhn-pefc-n884q20s9q98788s8popq4021o1sq044ps0s5qn5-ynfg_genvavat";a:3:{i:0;R:23808;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pefc-055470973p5n4o88qqo28sp14q8350nnpp94nr7s-gur_pnqer_bs_gur_zbfg_erprag_g";a:3:{i:0;R:23808;i:1;R:21167;i:2;R:23338;}s:60:"1228:dhn-pefc-2586n9r4r3on9092547r3rnp14r105p5ssoqn37o-pnqer";a:3:{i:0;R:23808;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pefc-89631q90r6123s50p4r7008p3oq5rrqs2qp4on1o-qrzbtencuvp_qrgnvyf_sbe_guvf_c";a:3:{i:0;R:23808;i:1;R:21167;i:2;R:23338;}s:66:"1228:dhn-pefc-ron97o6rqqn213rr80q274492r8o25475s6633p9-qrzbtencuvp";a:3:{i:0;R:23808;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pefc-8n463sq6os2rn58815r510pn214np2s4328ps46p-frnepu_sbe_nal_crefba_va_gur_f";a:3:{i:0;R:23808;i:1;R:21167;i:2;R:23338;}s:62:"1228:dhn-pefc-77qspn2n56s9o1ssp2o6687r230088ps86sop074-fheanzr";a:3:{i:0;R:23808;i:1;R:21167;i:2;R:23338;}s:64:"1228:dhn-pefc-ps23on48p06q7r6q4o41n205oso3pnp3oo7o1r38-svefganzr";a:3:{i:0;R:23808;i:1;R:21167;i:2;R:23338;}s:66:"1228:dhn-pefc-n89q2rnp8q13516o29rs1s2253snn80144670s49-bgure_anzrf";a:3:{i:0;R:23808;i:1;R:21167;i:2;R:23338;}s:67:"1228:dhn-pefc-2q1655sqn5449rr91536o245qs9q20576n7q56p6-vaqrk_ahzore";a:3:{i:0;R:23808;i:1;R:21167;i:2;R:23338;}s:72:"1228:dhn-pefc-1p99r27247p1348ns75862rr34n617nrq8660n8s-genvavat_pnqer_vq";a:3:{i:0;R:23808;i:1;R:21167;i:2;R:23338;}s:66:"1228:dhn-pefc-4n5r4no277o1254sppr1760s71o0po29np62606n-vagnxr_qngr";a:3:{i:0;R:23808;i:1;R:21167;i:2;R:23338;}s:83:"1228:dhn-pefc-30qq12qoq378pr643p975r402r0qp29r0s2n8735-frnepu_crbcyr_va_gur_flfgrz.";a:3:{i:0;R:23808;i:1;R:21167;i:2;R:23338;}s:69:"1228:dhn-pefc-q4r0q7n2n8onn509pq2p464r016s2532419o0471-frnepu_ercbegf";a:3:{i:0;R:23808;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-pefg-7517n66s1rsq4n14828587s32836s5srq16pp717-frnepu_onfrq_ba_genvavat_vasbe";a:3:{i:0;s:22:"out-ihris-qualify-crst";i:1;R:21167;i:2;R:23338;}s:70:"1228:dhn-pefg-7o36653p13336s68p7r99r740q1pq79684p59985-frnepu_genvavat";a:3:{i:0;R:23826;i:1;R:21167;i:2;R:23338;}s:62:"1228:dhn-peg-o6sr7s5r79177o05s6q251rpo9p162q45455045q-genvavat";a:3:{i:0;s:21:"out-ihris-qualify-crt";i:1;R:21167;i:2;R:23338;}s:83:"1228:dhn-peg-8o9787s50ppqn0s97spqp7s0429616ro67nn0or7-genvavat_eryngvbafuvc_sbe_nyy";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-peg-2059rprn27s964n7rr5qp42r3sq6n82q9pp1299p-gur_crefba_jub_gbbx_guvf_genva";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:60:"1228:dhn-peg-8p41nr88467sr5oonq09spq488662o25p3rp5333-crefba";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-peg-2517o43p5n0r38p1qrn1p4nos6on78sssp6s9noq-gur_crefbany_pbagnpg_vasbezngv";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:70:"1228:dhn-peg-n3srn9qq7468r2s50n0o64po69r6srrp65p3op04-crefbany_pbagnpg";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-peg-27592p07n2r5r76s2606on3163r5srn5np94q3qn-gur_pnqer_genvarq_ol_guvf_genv";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:59:"1228:dhn-peg-2586n9r4r3on9092547r3rnp14r105p5ssoqn37o-pnqer";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-peg-0397305981p3720n97o19001nopp97r52rnp1q20-gur_dhnyvsvpngvba_nffbpvngrq_j";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:67:"1228:dhn-peg-2ssr44r547583os61r0p2o02q0288qs152r1r76q-dhnyvsvpngvba";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-peg-n4644p06749s5545r8491n3r2p7o1r5r6s97qpp5-gur_ertvfgengvba_sbe_guvf_genv";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:66:"1228:dhn-peg-o233r775q63oo8o86ps031776q4pnrn613s59pqn-ertvfgengvba";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-peg-37r299231954s1sn2767n64nqs74rr98p8735qp9-gur_pheerag_yvprafr_sbe_guvf_g";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:61:"1228:dhn-peg-3229609r15436rp51ops00818n69n84qop58n0p2-yvprafr";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-peg-3444rqrp8o56n4o0p148n9o44r8q43859935o34o-gur_rknz_qrgnvyf_sbe_guvf_genv";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:58:"1228:dhn-peg-0oq62n2517565554509p32pp92211ss599r24q96-rknz";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-peg-6r354o913p1qq4o6775qqp1q2rn7998qnnos90ss-gur_genvavat_vafgvghgvba_jurer";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:74:"1228:dhn-peg-q38r9o888r8o481rrrn6qn394q506s30qqs68n32-genvavat_vafgvghgvba";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-peg-73606566o77n3o058516p6s0658q921p2478qo33-gur_qvfgevpg_jurer_guvf_vafgvg";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:74:"1228:dhn-peg-25287po0662s5o3r27o65080rsn83o1n2q3s0qq1-vafgvghgvba_qvfgevpg";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:69:"1228:dhn-peg-8n193368q224p4s67nqq1sn4qp98rn5547p23o23-genvavat_ercbeg";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-peg-r4o0o1r4s51r89r4284204552s376675r7r4n020-ercbegf_onfrq_ba_vaqvivqhny_ge";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:66:"1228:dhn-peg-2q1655sqn5449rr91536o245qs9q20576n7q56p6-vaqrk_ahzore";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-peg-1p99r27247p1348ns75862rr34n617nrq8660n8s-genvavat_pnqer_vq";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-peg-7np4q2s422or1q6n39p7rrs3834rpon1po754s77-vagnxr_qngr_nsgre";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:72:"1228:dhn-peg-s000sp2np2qs57o73oq91qor2r2302p32p87213s-vagnxr_qngr_orsber";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:65:"1228:dhn-peg-4n5r4no277o1254sppr1760s71o0po29np62606n-vagnxr_qngr";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:68:"1228:dhn-peg-1q5971ro658q8s9qq3502s9o1n761po73nq91869-yvprafr_ahzore";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:70:"1228:dhn-peg-10091q4o7sp447772r69s9r078195s310sssrssr-yvprafr_raq_qngr";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:73:"1228:dhn-peg-1qn775087104510s18021qr3pr98227rp4sr0315-ertvfgengvba_ahzore";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:61:"1228:dhn-peg-77qspn2n56s9o1ssp2o6687r230088ps86sop074-fheanzr";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:64:"1228:dhn-peg-o6rn992nno4668311oo94778r056qq0285s27621-svefg_anzr";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:65:"1228:dhn-peg-n89q2rnp8q13516o29rs1s2253snn80144670s49-bgure_anzrf";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:70:"1228:dhn-peg-n49017r662o2q4pqs74q8r98005nn9s095s7pos7-genvavat_ercbegf";a:3:{i:0;R:23829;i:1;R:21167;i:2;R:23338;}s:66:"1228:dhn-csy-2r37q340o041p3o32q48q323o59rn13onqn7165s-yvprafr_pneq";a:3:{i:0;s:21:"out-ihris-qualify-pfl";i:1;R:21167;i:2;R:23338;}s:78:"1228:dhn-cse-92363r7oq4r6n9s80n3938488rso60337s983017-ertvfgengvba_pregvsvpngr";a:3:{i:0;s:21:"out-ihris-qualify-pfr";i:1;R:21167;i:2;R:23338;}s:73:"1228:dhn-eir-8q3q15s900oqrs9q1118o3n1s53043s62q12s3sr-erpbeq_irevsvpngvba";a:3:{i:0;s:21:"out-ihris-qualify-rve";i:1;R:21167;i:2;R:23338;}s:73:"1228:dhn-eir-o0r54sn3s390463r89nr26545n22spp9rn2n59n7-irevsvpngvba_punatr";a:3:{i:0;R:23868;i:1;R:21167;i:2;R:23338;}s:71:"1228:dhn-eir-q49o7s1q7no61qn23pn0q74r328924s97s6o506p-irevsvpngvba_qngr";a:3:{i:0;R:23868;i:1;R:21167;i:2;R:23338;}s:66:"1228:dhn-eir-32o590oo589n754n6o4nrn83r4r15ppop40so75n-punatrf_znqr";a:3:{i:0;R:23868;i:1;R:21167;i:2;R:23338;}s:67:"1228:dhn-eir-968qqqoo18p4s29n266663r411r3513043574775-irevsl_erpbeq";a:3:{i:0;R:23868;i:1;R:21167;i:2;R:23338;}s:75:"1228:dhn-eir-957pq1n44423op735or244or158n79nq5r0nssq6-rqvg_guvf_vasbezngvba";a:3:{i:0;R:23868;i:1;R:21167;i:2;R:23338;}s:77:"1228:dhn-eir-8s12n44o12s65rn43qqo4305154428rs1np77771-hcqngr_guvf_vasbezngvba";a:3:{i:0;R:23868;i:1;R:21167;i:2;R:23338;}s:84:"1228:dhn-eir-17pp97p9116827481430ss86noo45pnq7741r88o-fryrpg_nabgure_irevsvpngvba_pu";a:3:{i:0;R:23868;i:1;R:21167;i:2;R:23338;}s:68:"1228:dhn-fvgr-89346p61676402r30s8q6r6r2rno251s47rn51n5-vuevf_dhnyvsl";a:3:{i:0;s:22:"out-ihris-qualify-site";i:1;R:21167;i:2;R:23338;}s:65:"1228:dhn-fvgr-opq7s4n21588655s07r3qns33242ro29623s69on-jrypbzr,_f";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-fvgr-r508n42314279p150q8r5s7q91s21234ropqs21p-gb_trg_fgnegrq_hfvat_vuevf_dhn";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:81:"1228:dhn-fvgr-12rssp57535r4qs25n67067n3q69596704454npq-uevf_fgeratguravat_jrofvgr";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:62:"1228:dhn-fvgr-pn4s9qps204r2037osr5884867ornq98oq9pons8-jrypbzr";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-fvgr-s4p8r2n62n73oo6ps248r6s93ps32674qo7q95qs-vf_n_urnygu_jbexre_genvavat,_y";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-fvgr-3489087ooqo399soq4n12r60p24oqorqooo64353-na_vaabingvir_tybony_vavgvngvi";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-fvgr-1o2q0710q5n4r7n701s4702846n0r12o6so3on6q-pregvsvpngvba_yvprafvat_flfgrz";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:59:"1228:dhn-fvgr-70s8oo9n8n5393rs080507n89r4o98q139000q65-ubzr";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:59:"1228:dhn-fvgr-p47nr15370psr1rq2781rrqp1qp2547q12q9r972-uryc";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:63:"1228:dhn-fvgr-p8q7677r19495s21qn984sr4r2829o7pn91o27p7-srrqonpx";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:68:"1228:dhn-fvgr-onnnqqpq0344827nr61p9n8rs34766q488qpn737-vuevf_jrofvgr";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:67:"1228:dhn-fvgr-r0338pr56169028r43n892s051621976s8n2q455-ybt_bhg_nf_f";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:76:"1228:dhn-fvgr-16n0rps125609nn03n1n9q6non18061q1rnnp2r4-vuevf_dhnyvsl_irefvba";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:83:"1228:dhn-fvgr-q22qn675o52ps51269p8p2p82628719rq1926ono-gunax_lbh_sbe_lbhe_srrqonpx.";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:61:"1228:dhn-fvgr-63143o6s8007o98p53pn2149822777o3566s9241-erghea";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:69:"1228:dhn-fvgr-478qoo263poqs399r1rqpo66433nr0s03r6s9spn-cevinpl_cbyvpl";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-fvgr-q4161o074p11oops046s3pnoq88r8r1qsn37s212-._jr_jvyy_hfr_lbhe_rznvy_nqqer";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:73:"1228:dhn-fvgr-41954o0719910qpnrs689s5qq57on6362p833n29-fvgr_srrqonpx_sbez";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:63:"1228:dhn-fvgr-spr06r20r5s7s74nnpppno40o59o75n56p8s7305-pbzzragf";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:59:"1228:dhn-fvgr-709n23220s2p3q64q1r1q6q18p4q5280s8q82spn-anzr";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:62:"1228:dhn-fvgr-7n1994999q181qrrn68r4304o3346r78s838rpo7-pbzcnal";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:60:"1228:dhn-fvgr-768r0p1p69573so588s61s1308n015p11468r05s-gvgyr";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:63:"1228:dhn-fvgr-973q438sr5q3ps552p5spq3o2265sr9oss3q71p6-vaqhfgel";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:62:"1228:dhn-fvgr-q70s93qs5r8s9o55or44sorrr9q203972r3383q4-nqqerff";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:59:"1228:dhn-fvgr-4271627s4s0ors6104n95ppn7oo21pqn4q74503r-pvgl";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:69:"1228:dhn-fvgr-8o19s84098767pn9p68285s81n77q6p5pq992no0-fgngr_cebivapr";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:66:"1228:dhn-fvgr-p7np934psnn9o50r25559321r48737ro6op8q9q8-cbfgny_pbqr";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:62:"1228:dhn-fvgr-q523rooq10146pqsq39qrr077s04p9q08468q0op-pbhagel";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:64:"1228:dhn-fvgr-sonqo22pp438no6r67737oop0p3o51ror025oso0-gryrcubar";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:58:"1228:dhn-fvgr-o67snq2r2rqs27045555rnqns1r4n848no242206-snk";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:60:"1228:dhn-fvgr-84nqq5o2952787581po9n8851rrs63q1rp75q22o-rznvy";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:63:"1228:dhn-fvgr-45oq908qs490rqq79694on0qnss82sp092970o55-pncnpvgl";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:59:"1228:dhn-fvgr-2q05q0s179pr47r1r637q115po0p71r67o625762-cyhf";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:85:"1228:dhn-fvgr-95p1682r7s3or2852r2ps57pqo03r37s27rn1sq2-vs_lbh_unir_n_oht_ercbeg,_cebo";a:3:{i:0;R:23877;i:1;R:21167;i:2;R:23338;}s:21:"1210:f_qverpgvbanyvgl";a:2:{i:0;s:15:"out-mantis-core";i:1;s:16:"out-mantis-0-all";}s:28:"1210:f_npgvbatebhc_zrah_zbir";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_npgvbatebhc_zrah_pbcl";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_npgvbatebhc_zrah_nffvta";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_npgvbatebhc_zrah_pybfr";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_npgvbatebhc_zrah_qryrgr";a:2:{i:0;R:23913;i:1;R:23914;}s:31:"1210:f_npgvbatebhc_zrah_erfbyir";a:2:{i:0;R:23913;i:1;R:23914;}s:39:"1210:f_npgvbatebhc_zrah_hcqngr_cevbevgl";a:2:{i:0;R:23913;i:1;R:23914;}s:37:"1210:f_npgvbatebhc_zrah_hcqngr_fgnghf";a:2:{i:0;R:23913;i:1;R:23914;}s:39:"1210:f_npgvbatebhc_zrah_hcqngr_frirevgl";a:2:{i:0;R:23913;i:1;R:23914;}s:42:"1210:f_npgvbatebhc_zrah_hcqngr_ivrj_fgnghf";a:2:{i:0;R:23913;i:1;R:23914;}s:39:"1210:f_npgvbatebhc_zrah_hcqngr_pngrtbel";a:2:{i:0;R:23913;i:1;R:23914;}s:34:"1210:f_npgvbatebhc_zrah_frg_fgvpxl";a:2:{i:0;R:23913;i:1;R:23914;}s:36:"1210:f_npgvbatebhc_zrah_hcqngr_svryq";a:2:{i:0;R:23913;i:1;R:23914;}s:45:"1210:f_npgvbatebhc_zrah_hcqngr_gnetrg_irefvba";a:2:{i:0;R:23913;i:1;R:23914;}s:47:"1210:f_npgvbatebhc_zrah_hcqngr_svkrq_va_irefvba";a:2:{i:0;R:23913;i:1;R:23914;}s:44:"1210:f_npgvbatebhc_zrah_hcqngr_cebqhpg_ohvyq";a:2:{i:0;R:23913;i:1;R:23914;}s:32:"1210:f_npgvbatebhc_zrah_nqq_abgr";a:2:{i:0;R:23913;i:1;R:23914;}s:35:"1210:f_npgvbatebhc_zrah_nggnpu_gntf";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_npgvbatebhc_ohtf";a:2:{i:0;R:23913;i:1;R:23914;}s:42:"1210:f_npgvbatebhc_reebe_vffhr_vf_ernqbayl";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_nyy_cebwrpgf";a:2:{i:0;R:23913;i:1;R:23914;}s:16:"1210:f_zbir_ohtf";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_bcrengvba_fhpprffshy";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_qngr_beqre";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_cevag_nyy_oht_cntr_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_pfi_rkcbeg";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_rkpry_rkcbeg";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_ybtva_nabalzbhfyl";a:2:{i:0;R:23913;i:1;R:23914;}s:16:"1210:f_nabalzbhf";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_whzc_gb_ohtabgrf";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_choyvp_cebwrpg_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_cevingr_cebwrpg_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_npprff_yriry_cebwrpg";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_ivrj_fhozvggrq_oht_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_nffvtarq_cebwrpgf";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_hanffvtarq_cebwrpgf";a:2:{i:0;R:23913;i:1;R:23914;}s:12:"1210:f_cevag";a:2:{i:0;R:23913;i:1;R:23914;}s:11:"1210:f_whzc";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_pbcl_hfref";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_pbcl_pngrtbevrf_sebz";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_pbcl_pngrtbevrf_gb";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_pbcl_irefvbaf_sebz";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_pbcl_irefvbaf_gb";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_pbcl_hfref_sebz";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_pbcl_hfref_gb";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_oht_uvfgbel";a:2:{i:0;R:23913;i:1;R:23914;}s:12:"1210:f_svryq";a:2:{i:0;R:23913;i:1;R:23914;}s:16:"1210:f_byq_inyhr";a:2:{i:0;R:23913;i:1;R:23914;}s:16:"1210:f_arj_inyhr";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_qngr_zbqvsvrq";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_ohtabgr";a:2:{i:0;R:23913;i:1;R:23914;}s:13:"1210:f_punatr";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_ohtabgr_ivrj_fgngr";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_oht_zbavgbe";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_oht_raq_zbavgbe";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_naabhaprzrag";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_fgnlf_ba_gbc";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_ohtabgr_yvax_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_qryrgr_ohtabgr_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_qryrgr_ohtabgr_fher_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_oht_eryngvbafuvcf";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_rzcgl_cnffjbeq_fher_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_rzcgl_cnffjbeq_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_ernhguragvpngr_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_ernhguragvpngr_zrffntr";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_ab_pngrtbel";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_tybony_pngrtbevrf";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_vaurevg";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_vaurevg_tybony";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_vaurevg_cnerag";a:2:{i:0;R:23913;i:1;R:23914;}s:36:"1210:f_hcqngr_fhocebwrpg_vaurevgnapr";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_qhcyvpngr_bs";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_unf_qhcyvpngr";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_eryngrq_gb";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_qrcraqnag_ba";a:2:{i:0;R:23913;i:1;R:23914;}s:13:"1210:f_oybpxf";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_arj_oht";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_ohtabgr_nqqrq";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_ohtabgr_rqvgrq";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_ohtabgr_qryrgrq";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_fhzznel_hcqngrq";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_qrfpevcgvba_hcqngrq";a:2:{i:0;R:23913;i:1;R:23914;}s:37:"1210:f_nqqvgvbany_vasbezngvba_hcqngrq";a:2:{i:0;R:23913;i:1;R:23914;}s:33:"1210:f_fgrcf_gb_ercebqhpr_hcqngrq";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_svyr_nqqrq";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_svyr_qryrgrq";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_oht_qryrgrq";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_znxr_cevingr";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_znxr_choyvp";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_perngr_arj_cebwrpg_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_ybtva_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_fryrpg_bcgvba";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_oht_npgvbatebhc_npprff";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_oht_npgvbatebhc_fgnghf";a:2:{i:0;R:23913;i:1;R:23914;}s:31:"1210:f_oht_npgvbatebhc_pngrtbel";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_oht_npgvbatebhc_unaqyre";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_oht_npgvbatebhc_irefvba";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_pybfr_ohtf_pbas_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_qryrgr_ohtf_pbas_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_zbir_ohtf_pbas_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_pbcl_ohtf_pbas_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_nffvta_ohtf_pbas_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_erfbyir_ohtf_pbas_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_cevbevgl_ohtf_pbas_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_fgnghf_ohtf_pbas_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:32:"1210:f_ivrj_fgnghf_ohtf_pbas_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_pngrtbel_ohtf_pbas_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:31:"1210:f_frg_fgvpxl_ohtf_pbas_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:37:"1210:f_svkrq_va_irefvba_ohtf_pbas_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:35:"1210:f_gnetrg_irefvba_ohtf_pbas_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_pybfr_tebhc_ohtf_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:31:"1210:f_qryrgr_tebhc_ohtf_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_zbir_tebhc_ohtf_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_pbcl_tebhc_ohtf_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:31:"1210:f_nffvta_tebhc_ohtf_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:32:"1210:f_erfbyir_tebhc_ohtf_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:33:"1210:f_cevbevgl_tebhc_ohtf_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:31:"1210:f_fgnghf_tebhc_ohtf_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:33:"1210:f_pngrtbel_tebhc_ohtf_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:36:"1210:f_ivrj_fgnghf_tebhc_ohtf_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:35:"1210:f_frg_fgvpxl_tebhc_ohtf_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:41:"1210:f_svkrq_va_irefvba_tebhc_ohtf_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:39:"1210:f_gnetrg_irefvba_tebhc_ohtf_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_hcqngr_frirevgl_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_hcqngr_frirevgl_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_hcqngr_frirevgl_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_uvqr_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:33:"1210:f_cevagvat_cersreraprf_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_cevagvat_bcgvbaf_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_ohtabgr_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_ohtabgr_qngr";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_ohtabgr_qrfpevcgvba";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_reebe_ab_cebprrq";a:2:{i:0;R:23913;i:1;R:23914;}s:38:"1210:znagvf_reebe\k5oreebe_trarevp\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:34:"1210:znagvf_reebe\k5oreebe_fdy\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:37:"1210:znagvf_reebe\k5oreebe_ercbeg\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:48:"1210:znagvf_reebe\k5oreebe_ab_svyr_fcrpvsvrq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:46:"1210:znagvf_reebe\k5oreebe_svyr_qvfnyybjrq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:43:"1210:znagvf_reebe\k5oreebe_ab_qverpgbel\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:48:"1210:znagvf_reebe\k5oreebe_qhcyvpngr_cebwrpg\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:42:"1210:znagvf_reebe\k5oreebe_rzcgl_svryq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:48:"1210:znagvf_reebe\k5oreebe_cebgrpgrq_nppbhag\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:44:"1210:znagvf_reebe\k5oreebe_npprff_qravrq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:45:"1210:znagvf_reebe\k5oreebe_hcybnq_snvyher\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:43:"1210:znagvf_reebe\k5oreebe_svyr_gbb_ovt\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:48:"1210:znagvf_reebe\k5oreebe_tcp_ine_abg_sbhaq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:51:"1210:znagvf_reebe\k5oreebe_hfre_anzr_abg_havdhr\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:51:"1210:znagvf_reebe\k5oreebe_pbasvt_bcg_abg_sbhaq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:59:"1210:znagvf_reebe\k5oreebe_pbasvt_bcg_pnag_or_frg_va_qo\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:52:"1210:znagvf_reebe\k5oreebe_ynat_fgevat_abg_sbhaq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:48:"1210:znagvf_reebe\k5oreebe_ohtabgr_abg_sbhaq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:48:"1210:znagvf_reebe\k5oreebe_cebwrpg_abg_sbhaq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:49:"1210:znagvf_reebe\k5oreebe_qo_svryq_abg_sbhaq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:48:"1210:znagvf_reebe\k5oreebe_sgc_pbaarpg_reebe\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:53:"1210:znagvf_reebe\k5oreebe_unaqyre_npprff_gbb_ybj\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:54:"1210:znagvf_reebe\k5oreebe_cebwrpg_anzr_abg_havdhr\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:51:"1210:znagvf_reebe\k5oreebe_cebwrpg_anzr_vainyvq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:53:"1210:znagvf_reebe\k5oreebe_hfre_ol_anzr_abg_sbhaq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:51:"1210:znagvf_reebe\k5oreebe_hfre_ol_vq_abg_sbhaq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:50:"1210:znagvf_reebe\k5oreebe_nhgu_vainyvq_pbbxvr\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:51:"1210:znagvf_reebe\k5oreebe_hfre_cersf_abg_sbhaq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:45:"1210:znagvf_reebe\k5oreebe_arjf_abg_sbhaq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:60:"1210:znagvf_reebe\k5oreebe_hfre_perngr_cnffjbeq_zvfzngpu\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:49:"1210:znagvf_reebe\k5oreebe_tcp_neenl_rkcrpgrq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:51:"1210:znagvf_reebe\k5oreebe_tcp_neenl_harkcrpgrq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:45:"1210:znagvf_reebe\k5oreebe_tcp_abg_ahzore\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:44:"1210:znagvf_reebe\k5oreebe_oht_abg_sbhaq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:47:"1210:znagvf_reebe\k5oreebe_svygre_abg_sbhaq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:45:"1210:znagvf_reebe\k5oreebe_svygre_gbb_byq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:44:"1210:znagvf_reebe\k5oreebe_rznvy_vainyvq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:47:"1210:znagvf_reebe\k5oreebe_rznvy_qvfcbfnoyr\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:53:"1210:znagvf_reebe\k5oreebe_hfre_cebsvyr_abg_sbhaq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:47:"1210:znagvf_reebe\k5oreebe_svyr_abg_nyybjrq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:45:"1210:znagvf_reebe\k5oreebe_svyr_qhcyvpngr\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:55:"1210:znagvf_reebe\k5oreebe_svyr_vainyvq_hcybnq_cngu\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:53:"1210:znagvf_reebe\k5oreebe_svyr_ab_hcybnq_snvyher\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:47:"1210:znagvf_reebe\k5oreebe_svyr_zbir_snvyrq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:49:"1210:znagvf_reebe\k5oreebe_oht_qhcyvpngr_frys\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:53:"1210:znagvf_reebe\k5oreebe_oht_erivfvba_abg_sbhaq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:53:"1210:znagvf_reebe\k5oreebe_phfgbz_svryq_abg_sbhaq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:59:"1210:znagvf_reebe\k5oreebe_phfgbz_svryq_anzr_abg_havdhr\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:50:"1210:znagvf_reebe\k5oreebe_phfgbz_svryq_va_hfr\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:57:"1210:znagvf_reebe\k5oreebe_phfgbz_svryq_vainyvq_inyhr\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:62:"1210:znagvf_reebe\k5oreebe_phfgbz_svryq_vainyvq_qrsvavgvba\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:47:"1210:znagvf_reebe\k5oreebe_yqnc_nhgu_snvyrq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:57:"1210:znagvf_reebe\k5oreebe_yqnc_freire_pbaarpg_snvyrq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:49:"1210:znagvf_reebe\k5oreebe_yqnc_hcqngr_snvyrq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:50:"1210:znagvf_reebe\k5oreebe_yqnc_hfre_abg_sbhaq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:56:"1210:znagvf_reebe\k5oreebe_yqnc_rkgrafvba_abg_ybnqrq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:48:"1210:znagvf_reebe\k5oreebe_qo_pbaarpg_snvyrq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:46:"1210:znagvf_reebe\k5oreebe_qo_dhrel_snvyrq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:47:"1210:znagvf_reebe\k5oreebe_qo_fryrpg_snvyrq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:49:"1210:znagvf_reebe\k5oreebe_pngrtbel_qhcyvpngr\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:49:"1210:znagvf_reebe\k5oreebe_pngrtbel_ab_npgvba\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:49:"1210:znagvf_reebe\k5oreebe_pngrtbel_abg_sbhaq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:61:"1210:znagvf_reebe\k5oreebe_pngrtbel_abg_sbhaq_sbe_cebwrpg\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:48:"1210:znagvf_reebe\k5oreebe_irefvba_qhcyvpngr\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:48:"1210:znagvf_reebe\k5oreebe_irefvba_abg_sbhaq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:48:"1210:znagvf_reebe\k5oreebe_hfre_anzr_vainyvq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:53:"1210:znagvf_reebe\k5oreebe_hfre_erny_anzr_vainyvq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:60:"1210:znagvf_reebe\k5oreebe_hfre_qbrf_abg_unir_erd_npprff\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:51:"1210:znagvf_reebe\k5oreebe_hfre_erny_zngpu_hfre\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:54:"1210:znagvf_reebe\k5oreebe_fcbafbefuvc_abg_ranoyrq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:52:"1210:znagvf_reebe\k5oreebe_fcbafbefuvc_abg_sbhaq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:57:"1210:znagvf_reebe\k5oreebe_fcbafbefuvc_nzbhag_gbb_ybj\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:71:"1210:znagvf_reebe\k5oreebe_fcbafbefuvc_unaqyre_npprff_yriry_gbb_ybj\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:72:"1210:znagvf_reebe\k5oreebe_fcbafbefuvc_nffvtare_npprff_yriry_gbb_ybj\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:59:"1210:znagvf_reebe\k5oreebe_fcbafbefuvc_fcbafbe_ab_rznvy\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:49:"1210:znagvf_reebe\k5oreebe_pbasvt_bcg_vainyvq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:58:"1210:znagvf_reebe\k5oreebe_oht_ernq_bayl_npgvba_qravrq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:58:"1210:znagvf_reebe\k5oreebe_eryngvbafuvc_nyernql_rkvfgf\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:53:"1210:znagvf_reebe\k5oreebe_eryngvbafuvc_abg_sbhaq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:76:"1210:znagvf_reebe\k5oreebe_eryngvbafuvc_npprff_yriry_gb_qrfg_oht_gbb_ybj\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:52:"1210:znagvf_reebe\k5oreebe_eryngvbafuvc_fnzr_oht\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:58:"1210:znagvf_reebe\k5oreebe_fvtahc_abg_zngpuvat_pncgpun\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:56:"1210:znagvf_reebe\k5oreebe_ybfg_cnffjbeq_abg_ranoyrq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:63:"1210:znagvf_reebe\k5oreebe_ybfg_cnffjbeq_ab_rznvy_fcrpvsvrq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:62:"1210:znagvf_reebe\k5oreebe_ybfg_cnffjbeq_abg_zngpuvat_qngn\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:65:"1210:znagvf_reebe\k5oreebe_ybfg_cnffjbeq_pbasvez_unfu_vainyvq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:77:"1210:znagvf_reebe\k5oreebe_ybfg_cnffjbeq_znk_va_cebterff_nggrzcgf_ernpurq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:58:"1210:znagvf_reebe\k5oreebe_cebwrpg_erphefvir_uvrenepul\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:53:"1210:znagvf_reebe\k5oreebe_hfre_punatr_ynfg_nqzva\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:47:"1210:znagvf_reebe\k5oreebe_cntr_erqverpgvba\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:50:"1210:znagvf_reebe\k5oreebe_gjvggre_ab_phey_rkg\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:44:"1210:znagvf_reebe\k5oreebe_gnt_abg_sbhaq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:44:"1210:znagvf_reebe\k5oreebe_gnt_qhcyvpngr\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:47:"1210:znagvf_reebe\k5oreebe_gnt_anzr_vainyvq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:47:"1210:znagvf_reebe\k5oreebe_gnt_abg_nggnpurq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:51:"1210:znagvf_reebe\k5oreebe_gnt_nyernql_nggnpurq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:46:"1210:znagvf_reebe\k5oreebe_gbxra_abg_sbhaq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:47:"1210:znagvf_reebe\k5oreebe_rirag_haqrpynerq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:52:"1210:znagvf_reebe\k5oreebe_cyhtva_abg_ertvfgrerq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:55:"1210:znagvf_reebe\k5oreebe_cyhtva_nyernql_vafgnyyrq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:52:"1210:znagvf_reebe\k5oreebe_cyhtva_cntr_abg_sbhaq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:52:"1210:znagvf_reebe\k5oreebe_cyhtva_hctenqr_snvyrq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:45:"1210:znagvf_reebe\k5oreebe_cyhtva_trarevp\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:48:"1210:znagvf_reebe\k5oreebe_pbyhzaf_qhcyvpngr\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:46:"1210:znagvf_reebe\k5oreebe_pbyhzaf_vainyvq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:54:"1210:znagvf_reebe\k5oreebe_frffvba_unaqyre_vainyvq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:52:"1210:znagvf_reebe\k5oreebe_frffvba_ine_abg_sbhaq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:48:"1210:znagvf_reebe\k5oreebe_frffvba_abg_inyvq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:49:"1210:znagvf_reebe\k5oreebe_sbez_gbxra_vainyvq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:53:"1210:znagvf_reebe\k5oreebe_vainyvq_erdhrfg_zrgubq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:49:"1210:znagvf_reebe\k5oreebe_vainyvq_fbeg_svryq\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:50:"1210:znagvf_reebe\k5oreebe_vainyvq_qngr_sbezng\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:48:"1210:znagvf_reebe\k5oreebe_hcqngvat_gvzrmbar\k5q";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_ybtva_reebe";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_ybtva_pbbxvrf_qvfnoyrq";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_tb_onpx";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_cebprrq";a:2:{i:0;R:23913;i:1;R:23914;}s:13:"1210:f_fjvgpu";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_ybttrq_va_nf";a:2:{i:0;R:23913;i:1;R:23914;}s:31:"1210:f_cersvk_sbe_qryrgrq_hfref";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_nqzvavfgengbe";a:2:{i:0;R:23913;i:1;R:23914;}s:13:"1210:f_zlfrys";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_qrsnhyg_npprff_yriry";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_vffhr_fgnghf_crepragntr";a:2:{i:0;R:23913;i:1;R:23914;}s:32:"1210:f_npprff_yriryf_rahz_fgevat";a:2:{i:0;R:23913;i:1;R:23914;}s:33:"1210:f_cebwrpg_fgnghf_rahz_fgevat";a:2:{i:0;R:23913;i:1;R:23914;}s:37:"1210:f_cebwrpg_ivrj_fgngr_rahz_fgevat";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_ivrj_fgngr_rahz_fgevat";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_cevbevgl_rahz_fgevat";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_frirevgl_rahz_fgevat";a:2:{i:0;R:23913;i:1;R:23914;}s:34:"1210:f_ercebqhpvovyvgl_rahz_fgevat";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_fgnghf_rahz_fgevat";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_erfbyhgvba_rahz_fgevat";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_cebwrpgvba_rahz_fgevat";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_rgn_rahz_fgevat";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_fcbafbefuvc_rahz_fgevat";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_arj_nppbhag_fhowrpg";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_arj_nppbhag_terrgvat";a:2:{i:0;R:23913;i:1;R:23914;}s:40:"1210:f_arj_nppbhag_terrgvat_nqzvaperngrq";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_arj_nppbhag_hfreanzr";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_arj_nppbhag_zrffntr";a:2:{i:0;R:23913;i:1;R:23914;}s:31:"1210:f_arj_nppbhag_qb_abg_ercyl";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_arj_nppbhag_rznvy";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_arj_nppbhag_vc";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_arj_nppbhag_fvtahc_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_erfrg_erdhrfg_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:36:"1210:f_erfrg_erdhrfg_va_cebterff_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:50:"1210:f_rznvy_abgvsvpngvba_gvgyr_sbe_fgnghf_oht_arj";a:2:{i:0;R:23913;i:1;R:23914;}s:55:"1210:f_rznvy_abgvsvpngvba_gvgyr_sbe_fgnghf_oht_srrqonpx";a:2:{i:0;R:23913;i:1;R:23914;}s:59:"1210:f_rznvy_abgvsvpngvba_gvgyr_sbe_fgnghf_oht_npxabjyrqtrq";a:2:{i:0;R:23913;i:1;R:23914;}s:56:"1210:f_rznvy_abgvsvpngvba_gvgyr_sbe_fgnghf_oht_pbasvezrq";a:2:{i:0;R:23913;i:1;R:23914;}s:55:"1210:f_rznvy_abgvsvpngvba_gvgyr_sbe_fgnghf_oht_nffvtarq";a:2:{i:0;R:23913;i:1;R:23914;}s:55:"1210:f_rznvy_abgvsvpngvba_gvgyr_sbe_fgnghf_oht_erfbyirq";a:2:{i:0;R:23913;i:1;R:23914;}s:53:"1210:f_rznvy_abgvsvpngvba_gvgyr_sbe_fgnghf_oht_pybfrq";a:2:{i:0;R:23913;i:1;R:23914;}s:56:"1210:f_rznvy_abgvsvpngvba_gvgyr_sbe_npgvba_oht_fhozvggrq";a:2:{i:0;R:23913;i:1;R:23914;}s:55:"1210:f_rznvy_abgvsvpngvba_gvgyr_sbe_npgvba_oht_nffvtarq";a:2:{i:0;R:23913;i:1;R:23914;}s:55:"1210:f_rznvy_abgvsvpngvba_gvgyr_sbe_npgvba_oht_erbcrarq";a:2:{i:0;R:23913;i:1;R:23914;}s:54:"1210:f_rznvy_abgvsvpngvba_gvgyr_sbe_npgvba_oht_qryrgrq";a:2:{i:0;R:23913;i:1;R:23914;}s:54:"1210:f_rznvy_abgvsvpngvba_gvgyr_sbe_npgvba_oht_hcqngrq";a:2:{i:0;R:23913;i:1;R:23914;}s:60:"1210:f_rznvy_abgvsvpngvba_gvgyr_sbe_npgvba_fcbafbefuvc_nqqrq";a:2:{i:0;R:23913;i:1;R:23914;}s:62:"1210:f_rznvy_abgvsvpngvba_gvgyr_sbe_npgvba_fcbafbefuvc_hcqngrq";a:2:{i:0;R:23913;i:1;R:23914;}s:62:"1210:f_rznvy_abgvsvpngvba_gvgyr_sbe_npgvba_fcbafbefuvc_qryrgrq";a:2:{i:0;R:23913;i:1;R:23914;}s:60:"1210:f_rznvy_abgvsvpngvba_gvgyr_sbe_npgvba_ohtabgr_fhozvggrq";a:2:{i:0;R:23913;i:1;R:23914;}s:74:"1210:f_rznvy_abgvsvpngvba_gvgyr_sbe_npgvba_qhcyvpngr_bs_eryngvbafuvc_nqqrq";a:2:{i:0;R:23913;i:1;R:23914;}s:75:"1210:f_rznvy_abgvsvpngvba_gvgyr_sbe_npgvba_unf_qhcyvpngr_eryngvbafuvc_nqqrq";a:2:{i:0;R:23913;i:1;R:23914;}s:72:"1210:f_rznvy_abgvsvpngvba_gvgyr_sbe_npgvba_eryngrq_gb_eryngvbafuvc_nqqrq";a:2:{i:0;R:23913;i:1;R:23914;}s:74:"1210:f_rznvy_abgvsvpngvba_gvgyr_sbe_npgvba_qrcraqnag_ba_eryngvbafuvc_nqqrq";a:2:{i:0;R:23913;i:1;R:23914;}s:68:"1210:f_rznvy_abgvsvpngvba_gvgyr_sbe_npgvba_oybpxf_eryngvbafuvc_nqqrq";a:2:{i:0;R:23913;i:1;R:23914;}s:76:"1210:f_rznvy_abgvsvpngvba_gvgyr_sbe_npgvba_qhcyvpngr_bs_eryngvbafuvc_qryrgrq";a:2:{i:0;R:23913;i:1;R:23914;}s:77:"1210:f_rznvy_abgvsvpngvba_gvgyr_sbe_npgvba_unf_qhcyvpngr_eryngvbafuvc_qryrgrq";a:2:{i:0;R:23913;i:1;R:23914;}s:74:"1210:f_rznvy_abgvsvpngvba_gvgyr_sbe_npgvba_eryngrq_gb_eryngvbafuvc_qryrgrq";a:2:{i:0;R:23913;i:1;R:23914;}s:76:"1210:f_rznvy_abgvsvpngvba_gvgyr_sbe_npgvba_qrcraqnag_ba_eryngvbafuvc_qryrgrq";a:2:{i:0;R:23913;i:1;R:23914;}s:70:"1210:f_rznvy_abgvsvpngvba_gvgyr_sbe_npgvba_oybpxf_eryngvbafuvc_qryrgrq";a:2:{i:0;R:23913;i:1;R:23914;}s:70:"1210:f_rznvy_abgvsvpngvba_gvgyr_sbe_npgvba_eryngvbafuvc_puvyq_erfbyirq";a:2:{i:0;R:23913;i:1;R:23914;}s:68:"1210:f_rznvy_abgvsvpngvba_gvgyr_sbe_npgvba_eryngvbafuvc_puvyq_pybfrq";a:2:{i:0;R:23913;i:1;R:23914;}s:50:"1210:f_rznvy_abgvsvpngvba_gvgyr_sbe_npgvba_zbavgbe";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_rznvy_ercbegre";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_rznvy_unaqyre";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_rznvy_cebwrpg";a:2:{i:0;R:23913;i:1;R:23914;}s:16:"1210:f_rznvy_oht";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_rznvy_pngrtbel";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_rznvy_ercebqhpvovyvgl";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_rznvy_frirevgl";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_rznvy_cevbevgl";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_rznvy_fgnghf";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_rznvy_erfbyhgvba";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_rznvy_qhcyvpngr";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_rznvy_svkrq_va_irefvba";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_rznvy_gnetrg_irefvba";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_rznvy_qngr_fhozvggrq";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_rznvy_ynfg_zbqvsvrq";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_rznvy_fhzznel";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_rznvy_qrfpevcgvba";a:2:{i:0;R:23913;i:1;R:23914;}s:35:"1210:f_rznvy_nqqvgvbany_vasbezngvba";a:2:{i:0;R:23913;i:1;R:23914;}s:31:"1210:f_rznvy_fgrcf_gb_ercebqhpr";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_nppbhag_cebgrpgrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_nppbhag_erzbirq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_pbasvez_qryrgr_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_qryrgr_nppbhag_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_znantr_cebsvyrf_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_punatr_cersreraprf_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_rqvg_nppbhag_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:15:"1210:f_hfreanzr";a:2:{i:0;R:23913;i:1;R:23914;}s:15:"1210:f_ernyanzr";a:2:{i:0;R:23913;i:1;R:23914;}s:12:"1210:f_rznvy";a:2:{i:0;R:23913;i:1;R:23914;}s:15:"1210:f_cnffjbeq";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_ab_cnffjbeq_punatr";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_pbasvez_cnffjbeq";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_npprff_yriry";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_hcqngr_hfre_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_irevsl_jneavat";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_irevsl_punatr_cnffjbeq";a:2:{i:0;R:23913;i:1;R:23914;}s:40:"1210:f_qrsnhyg_nppbhag_cersreraprf_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_qrsnhyg_cebwrpg";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_erserfu_qrynl";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_zvahgrf";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_erqverpg_qrynl";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_frpbaqf";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_jvgu_zvavzhz_frirevgl";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_ohtabgr_beqre";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_ohtabgr_beqre_nfp";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_ohtabgr_beqre_qrfp";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_rznvy_ba_arj";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_rznvy_ba_nffvtarq";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_rznvy_ba_srrqonpx";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_rznvy_ba_erfbyirq";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_rznvy_ba_pybfrq";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_rznvy_ba_erbcrarq";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_rznvy_ba_ohtabgr_nqqrq";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_rznvy_ba_fgnghf_punatr";a:2:{i:0;R:23913;i:1;R:23914;}s:31:"1210:f_rznvy_ba_cevbevgl_punatr";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_rznvy_ohtabgr_yvzvg";a:2:{i:0;R:23913;i:1;R:23914;}s:15:"1210:f_ynathntr";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_hcqngr_cersf_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_erfrg_cersf_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:15:"1210:f_gvzrmbar";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_cersf_erfrg_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_cersf_hcqngrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_cebsvyr_nqqrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_cebsvyr_qryrgrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_rqvg_cebsvyr_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:15:"1210:f_cyngsbez";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_bcrengvat_flfgrz";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_nqqvgvbany_qrfpevcgvba";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_hcqngr_cebsvyr_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_cebsvyr_qrsnhygrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_nqq_cebsvyr_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_nqq_cebsvyr_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:36:"1210:f_rqvg_be_qryrgr_cebsvyrf_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_rqvg_cebsvyr";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_znxr_qrsnhyg";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_qryrgr_cebsvyr";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_fryrpg_cebsvyr";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_fhozvg_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_cebsvyr_hcqngrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_zl_fcbafbefuvc";a:2:{i:0;R:23913;i:1;R:23914;}s:32:"1210:f_hcqngr_fcbafbefuvc_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_ab_fcbafberq";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_bja_fcbafberq";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_vffhrf_unaqyrq";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_ab_bja_fcbafberq";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_fcbafbe";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_fcbafbe_ireo";a:2:{i:0;R:23913;i:1;R:23914;}s:13:"1210:f_nzbhag";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_gbgny_bjvat";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_gbgny_cnvq";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_fcbafbe_uvqr";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_fcbafbe_fubj";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_cnlzrag_hcqngrq";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_nppbhag_hcqngrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_rznvy_hcqngrq";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_ernyanzr_qhcyvpngrq";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_ernyanzr_hcqngrq";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_cnffjbeq_hcqngrq";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_zhygvcyr_cebwrpgf";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_oht_nffvta_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_arj_oht_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_srrqonpx_oht_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_npxabjyrqtrq_oht_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_pbasvezrq_oht_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_nffvtarq_oht_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_arj_oht_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_srrqonpx_oht_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_npxabjyrqtrq_oht_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_pbasvezrq_oht_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_nffvtarq_oht_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_oht_pybfr_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_pybfr_vzzrqvngryl";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_pybfrq_oht_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_oht_qryrgrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_qryrgr_oht_fher_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_qryrgr_oht_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_zbavgbe_oht_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_hazbavgbe_oht_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_svyr_hcybnq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_hcybnq_svyr";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_hcybnq_svyrf";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_fryrpg_svyr";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_fryrpg_svyrf";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_hcybnq_svyr_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_hcybnq_svyrf_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_znk_svyr_fvmr";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_oht_erbcrarq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:31:"1210:f_erbcra_nqq_ohtabgr_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:32:"1210:f_ohtabgr_nqq_erbcra_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_erfbyirq_oht_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_erfbyirq_oht_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_oht_erfbyirq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:32:"1210:f_erfbyir_nqq_ohtabgr_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:33:"1210:f_ohtabgr_nqq_erfbyir_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:11:"1210:f_sebz";a:2:{i:0;R:23913;i:1;R:23914;}s:9:"1210:f_gb";a:2:{i:0;R:23913;i:1;R:23914;}s:35:"1210:f_frag_lbh_guvf_erzvaqre_nobhg";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_oht_erzvaqre";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_erzvaqre_frag_gb";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_oht_fraq_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:15:"1210:f_erzvaqre";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_erzvaqre_rkcynva";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_erzvaqre_zbavgbe";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_erzvaqre_fgber";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_pbasvez_fcbafbefuvc";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_fgvpx_oht_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_hafgvpx_oht_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_oht_hcqngrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_onpx_gb_oht_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_hcqngr_fvzcyr_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:34:"1210:f_hcqngvat_oht_nqinaprq_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:9:"1210:f_vq";a:2:{i:0;R:23913;i:1;R:23914;}s:15:"1210:f_pngrtbel";a:2:{i:0;R:23913;i:1;R:23914;}s:15:"1210:f_frirevgl";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_ercebqhpvovyvgl";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_qngr_fhozvggrq";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_ynfg_hcqngr";a:2:{i:0;R:23913;i:1;R:23914;}s:15:"1210:f_ercbegre";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_nffvtarq_gb";a:2:{i:0;R:23913;i:1;R:23914;}s:15:"1210:f_cevbevgl";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_erfbyhgvba";a:2:{i:0;R:23913;i:1;R:23914;}s:13:"1210:f_fgnghf";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_qhcyvpngr_vq";a:2:{i:0;R:23913;i:1;R:23914;}s:9:"1210:f_bf";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_cebwrpgvba";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_bf_irefvba";a:2:{i:0;R:23913;i:1;R:23914;}s:10:"1210:f_rgn";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_cebqhpg_irefvba";a:2:{i:0;R:23913;i:1;R:23914;}s:12:"1210:f_ohvyq";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_svkrq_va_irefvba";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_gnetrg_irefvba";a:2:{i:0;R:23913;i:1;R:23914;}s:12:"1210:f_ibgrf";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_fhzznel";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_qrfpevcgvba";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_fgrcf_gb_ercebqhpr";a:2:{i:0;R:23913;i:1;R:23914;}s:32:"1210:f_hcqngr_vasbezngvba_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_fgvpxl_vffhr";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_cebsvyr";a:2:{i:0;R:23913;i:1;R:23914;}s:32:"1210:f_hcqngvat_oht_fvzcyr_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_ivrj_erivfvbaf";a:2:{i:0;R:23913;i:1;R:23914;}s:15:"1210:f_erivfvba";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_erivfvba_ol";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_erivfvba_qebc";a:2:{i:0;R:23913;i:1;R:23914;}s:35:"1210:f_oht_erivfvba_qebccrq_uvfgbel";a:2:{i:0;R:23913;i:1;R:23914;}s:39:"1210:f_ohtabgr_erivfvba_qebccrq_uvfgbel";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_nyy_erivfvbaf";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_onpx_gb_vffhr";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_pbasvez_erivfvba_qebc";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_ibgr_nqqrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_ohtabgr_nqqrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_ohtabgr_qryrgrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_oht_abgrf_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_rqvg_ohtabgr_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_ab_ohtabgrf_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_qryrgr_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_nqq_ohtabgr_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_nqq_ohtabgr_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_ohtabgr_rqvg_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_pybfrq_oht_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_ohtabgr_hcqngrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:16:"1210:f_rqvgrq_ba";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_uvqr_pbagrag";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_fubj_pbagrag";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_gbgny_dhrevrf_rkrphgrq";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_havdhr_dhrevrf_rkrphgrq";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_zrzbel_hfntr_va_xo";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_cyrnfr_ercbeg";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_pyvpx_gb_ybtva";a:2:{i:0;R:23913;i:1;R:23914;}s:44:"1210:f_jneavat_cynva_cnffjbeq_nhguragvpngvba";a:2:{i:0;R:23913;i:1;R:23914;}s:52:"1210:f_jneavat_qrsnhyg_nqzvavfgengbe_nppbhag_cerfrag";a:2:{i:0;R:23913;i:1;R:23914;}s:38:"1210:f_jneavat_nqzva_qverpgbel_cerfrag";a:2:{i:0;R:23913;i:1;R:23914;}s:43:"1210:f_reebe_qngnonfr_irefvba_bhg_bs_qngr_1";a:2:{i:0;R:23913;i:1;R:23914;}s:39:"1210:f_reebe_qngnonfr_ab_fpurzn_irefvba";a:2:{i:0;R:23913;i:1;R:23914;}s:43:"1210:f_reebe_qngnonfr_irefvba_bhg_bs_qngr_2";a:2:{i:0;R:23913;i:1;R:23914;}s:37:"1210:f_reebe_pbqr_irefvba_bhg_bs_qngr";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_ybtva_cntr_vasb";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_ybtva_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_fnir_ybtva";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_frpher_frffvba";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_frpher_frffvba_ybat";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_pubbfr_cebwrpg";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_ybtva_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_fvtahc_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_ybfg_cnffjbeq_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_fryrpg_cebwrpg_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_ybfg_cnffjbeq_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:31:"1210:f_ybfg_cnffjbeq_qbar_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_ybfg_cnffjbeq_fhowrpg";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_ybfg_cnffjbeq_vasb";a:2:{i:0;R:23913;i:1;R:23914;}s:36:"1210:f_ybfg_cnffjbeq_pbasvez_unfu_bx";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_bcra_naq_nffvtarq_gb_zr";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_bcra_naq_ercbegrq_gb_zr";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_arjre_arjf_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_byqre_arjf_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:15:"1210:f_nepuvirf";a:2:{i:0;R:23913;i:1;R:23914;}s:10:"1210:f_eff";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_fvgr_vasbezngvba";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_znagvf_irefvba";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_fpurzn_irefvba";a:2:{i:0;R:23913;i:1;R:23914;}s:16:"1210:f_fvgr_cngu";a:2:{i:0;R:23913;i:1;R:23914;}s:16:"1210:f_pber_cngu";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_cyhtva_cngu";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_perngrq_hfre_cneg1";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_perngrq_hfre_cneg2";a:2:{i:0;R:23913;i:1;R:23914;}s:31:"1210:f_perngr_arj_nppbhag_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_irevsl_cnffjbeq";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_ranoyrq";a:2:{i:0;R:23913;i:1;R:23914;}s:16:"1210:f_cebgrpgrq";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_perngr_hfre_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_uvqr_qvfnoyrq";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_svygre_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_perngr_svygre_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_perngr_fubeg_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_svygre_creznyvax";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_znantr_hfref_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_znantr_cebwrpgf_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:31:"1210:f_znantr_phfgbz_svryq_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:34:"1210:f_znantr_tybony_cebsvyrf_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_znantr_cyhtva_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:33:"1210:f_crezvffvbaf_fhzznel_ercbeg";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_znantr_pbasvt_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_znantr_guerfubyq_pbasvt";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_znantr_rznvy_pbasvt";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_znantr_jbexsybj_pbasvt";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_znantr_gntf_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_perngr_arj_nppbhag_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_cebwrpgf_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_qbphzragngvba_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_arj_nppbhagf_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_1_jrrx_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_arire_ybttrq_va_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_cehar_nppbhagf";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_uvqr_vanpgvir";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_znantr_nppbhagf_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:8:"1210:f_c";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_qngr_perngrq";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_ynfg_ivfvg";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_rqvg_hfre_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_pbasvt_nyy_cebwrpgf";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_pbasvt_cebwrpg";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_pbybhe_pbqvat";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_pbybhe_cebwrpg";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_pbybhe_tybony";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_vffhr_ercbegre";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_vffhr_unaqyre";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_hfref_nqqrq_ohtabgr";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_punatr_pbasvthengvba";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_zrffntr";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_qrsnhyg_abgvsl";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_npgvba_abgvsl";a:2:{i:0;R:23913;i:1;R:23914;}s:36:"1210:f_abgvsl_qrsnhygf_punatr_npprff";a:2:{i:0;R:23913;i:1;R:23914;}s:35:"1210:f_abgvsl_npgvbaf_punatr_npprff";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_erireg_gb_flfgrz";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_erireg_gb_nyy_cebwrpg";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_aba_rkvfgrag";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_pheerag_fgnghf";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_arkg_fgnghf";a:2:{i:0;R:23913;i:1;R:23914;}s:15:"1210:f_jbexsybj";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_jbexsybj_guerfubyqf";a:2:{i:0;R:23913;i:1;R:23914;}s:16:"1210:f_guerfubyq";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_fgnghf_yriry";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_nygre_yriry";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_inyvqngvba";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_pbzzrag";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_fhcresyhbhf";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_haernpunoyr";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_ab_rkvg";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_npprff_yriryf";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_npprff_punatr";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_qrfp_oht_fhozvg_fgnghf";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_qrfp_oht_erbcra_fgnghf";a:2:{i:0;R:23913;i:1;R:23914;}s:41:"1210:f_qrfp_oht_erfbyirq_fgnghf_guerfubyq";a:2:{i:0;R:23913;i:1;R:23914;}s:39:"1210:f_qrfp_oht_pybfrq_fgnghf_guerfubyq";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_jbexsybj_punatr_npprff";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_npprff_punatr_npprff";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_qrsnhyg_abg_va_sybj";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_nffvta_vffhr";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_nyybj_pybfr_vzzrqvngr";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_nyybj_ercbegre_pybfr";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_nyybj_ercbegre_erbcra";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_frg_fgnghf_nffvtarq";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_nyybj_hfre_rqvg";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_yvzvg_npprff";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_fhozvg_fgnghf";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_nffvtarq_fgnghf";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_erfbyirq_fgnghf";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_ernqbayl_fgnghf";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_erbcra_fgnghf";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_erbcra_erfbyhgvba";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_pbasvt_qryrgr_fher";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_va_cebwrpg";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_qryrgr_pbasvt_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_pbasvthengvba_ercbeg";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_qngnonfr_pbasvthengvba";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_pbasvthengvba_bcgvba";a:2:{i:0;R:23913;i:1;R:23914;}s:32:"1210:f_pbasvthengvba_bcgvba_glcr";a:2:{i:0;R:23913;i:1;R:23914;}s:33:"1210:f_pbasvthengvba_bcgvba_inyhr";a:2:{i:0;R:23913;i:1;R:23914;}s:16:"1210:f_nyy_hfref";a:2:{i:0;R:23913;i:1;R:23914;}s:31:"1210:f_frg_pbasvthengvba_bcgvba";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_qryrgr_pbasvt_fher_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_pbasvthengvba_pbeehcgrq";a:2:{i:0;R:23913;i:1;R:23914;}s:13:"1210:f_cyhtva";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_cyhtvaf_vafgnyyrq";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_cyhtvaf_ninvynoyr";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_cyhtva_qrfpevcgvba";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_cyhtva_nhgube";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_cyhtva_hey";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_cyhtva_qrcraqf";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_cyhtva_ab_qrcraqf";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_cyhtva_cevbevgl";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_cyhtva_cebgrpgrq";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_cyhtva_hcqngr";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_cyhtva_npgvbaf";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_cyhtva_vafgnyy";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_cyhtva_hctenqr";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_cyhtva_havafgnyy";a:2:{i:0;R:23913;i:1;R:23914;}s:31:"1210:f_cyhtva_havafgnyy_zrffntr";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_cyhtva_xrl";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_cyhtva_xrl_zrg";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_cyhtva_xrl_hazrg";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_cyhtva_xrl_qngrq";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_cyhtva_xrl_hctenqr";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_cebwrpg_nqqrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_pngrtbel_nqqrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_pngrtbel_qryrgrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:31:"1210:f_pngrtbel_qryrgr_fher_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_qryrgr_pngrtbel_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:34:"1210:f_rqvg_cebwrpg_pngrtbel_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_hcqngr_pngrtbel_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_pngrtbel_hcqngrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_nqq_fhocebwrpg_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_cebwrpg_qryrgrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_cebwrpg_qryrgr_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_cebwrpg_qryrgr_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_rqvg_cebwrpg_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_cebwrpg_anzr";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_ivrj_fgnghf";a:2:{i:0;R:23913;i:1;R:23914;}s:13:"1210:f_choyvp";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_cevingr";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_hcqngr_cebwrpg_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_qryrgr_cebwrpg_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:16:"1210:f_pbcl_sebz";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_pbcl_gb";a:2:{i:0;R:23913;i:1;R:23914;}s:35:"1210:f_pngrtbevrf_naq_irefvba_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_pngrtbevrf";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_nqq_pngrtbel_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:15:"1210:f_irefvbaf";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_nqq_irefvba_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:34:"1210:f_nqq_naq_rqvg_irefvba_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:16:"1210:f_rqvg_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_npgvbaf";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_irefvba";a:2:{i:0;R:23913;i:1;R:23914;}s:16:"1210:f_gvzrfgnzc";a:2:{i:0;R:23913;i:1;R:23914;}s:13:"1210:f_hcqngr";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_fhocebwrpgf";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_nqq_fhocebwrpg";a:2:{i:0;R:23913;i:1;R:23914;}s:33:"1210:f_perngr_arj_fhocebwrpg_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_hayvax_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_fubj_tybony_hfref";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_uvqr_tybony_hfref";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_nqq_cebwrpg_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_hcybnq_svyr_cngu";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_nqq_cebwrpg_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_cebwrpgf_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:11:"1210:f_anzr";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_cebwrpg_hcqngrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_irefvba_nqqrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_irefvba_qryrgrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_irefvba_qryrgr_fher";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_qryrgr_irefvba_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:33:"1210:f_rqvg_cebwrpg_irefvba_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_hcqngr_irefvba_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:15:"1210:f_eryrnfrq";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_abg_eryrnfrq";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_fpurqhyrq_eryrnfr";a:2:{i:0;R:23913;i:1;R:23914;}s:15:"1210:f_bofbyrgr";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_irefvba_hcqngrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:35:"1210:f_nppbhag_qryrgr_cebgrpgrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_nppbhag_qryrgrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_qryrgr_nppbhag_fher_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_abgvsl_hfre";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_nppbhagf_ceharq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_cehar_nppbhagf_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_pbasvez_nppbhag_cehavat";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_rqvg_hfre_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_nppbhag_haybpx_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_erfrg_cnffjbeq_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_qryrgr_hfre_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_erfrg_cnffjbeq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_erfrg_cnffjbeq_zft2";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_fubj_nyy_hfref";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_hfref_hahfrq";a:2:{i:0;R:23913;i:1;R:23914;}s:16:"1210:f_hfref_arj";a:2:{i:0;R:23913;i:1;R:23914;}s:34:"1210:f_nppbhag_erfrg_cebgrpgrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_nppbhag_erfrg_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_nppbhag_erfrg_zft2";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_nppbhag_haybpx_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:32:"1210:f_znantr_hfre_cebgrpgrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_znantr_hfre_hcqngrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:33:"1210:f_rznvy_hfre_hcqngrq_fhowrpg";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_rznvy_hfre_hcqngrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:16:"1210:f_znva_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_ivrj_ohtf_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_ercbeg_oht_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_punatrybt_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_ebnqznc_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_fhzznel_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_nppbhag_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_hfref_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_znantr_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_rqvg_arjf_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:16:"1210:f_qbpf_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_ybtbhg_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_zl_ivrj_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:31:"1210:f_zl_ivrj_gvgyr_hanffvtarq";a:2:{i:0;R:23913;i:1;R:23914;}s:31:"1210:f_zl_ivrj_gvgyr_erprag_zbq";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_zl_ivrj_gvgyr_ercbegrq";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_zl_ivrj_gvgyr_nffvtarq";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_zl_ivrj_gvgyr_erfbyirq";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_zl_ivrj_gvgyr_zbavgberq";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_zl_ivrj_gvgyr_srrqonpx";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_zl_ivrj_gvgyr_irevsl";a:2:{i:0;R:23913;i:1;R:23914;}s:32:"1210:f_zl_ivrj_gvgyr_zl_pbzzragf";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_arjf_nqqrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_arjf_qryrgrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_qryrgr_arjf_fher_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_qryrgr_arjf_vgrz_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_rqvg_arjf_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:15:"1210:f_urnqyvar";a:2:{i:0;R:23913;i:1;R:23914;}s:11:"1210:f_obql";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_hcqngr_arjf_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_nqq_arjf_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_cbfg_gb";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_cbfg_arjf_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:32:"1210:f_rqvg_be_qryrgr_arjf_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:16:"1210:f_rqvg_cbfg";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_qryrgr_cbfg";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_fryrpg_cbfg";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_arjf_hcqngrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:16:"1210:f_onpx_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_svyr_hcybnqrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_hcybnq_svyr_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:12:"1210:f_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:31:"1210:f_cebwrpg_svyr_qryrgrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_pbasvez_svyr_qryrgr_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:15:"1210:f_svyranzr";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_svyr_hcqngr_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_svyr_qryrgr_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:34:"1210:f_cebwrpg_qbphzragngvba_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_hfre_qbphzragngvba";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_cebwrpg_qbphzragngvba";a:2:{i:0;R:23913;i:1;R:23914;}s:15:"1210:f_nqq_svyr";a:2:{i:0;R:23913;i:1;R:23914;}s:31:"1210:f_cebwrpg_qbphzrag_hcqngrq";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_cebwrpg_hfre_nqqrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:31:"1210:f_cebwrpg_erzbirq_hfre_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_erzbir_hfre_fher_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:38:"1210:f_erzbir_hfre_sebz_cebwrpg_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:32:"1210:f_erzbir_nyy_hfref_fher_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_erzbir_nyy_hfref_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_nqq_hfre_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_nqq_hfre_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_cebwrpg_fryrpgvba_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_erzbir_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_erzbir_nyy_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_hcqngrq_hfre_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_zhfg_ragre_pngrtbel";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_zhfg_ragre_frirevgl";a:2:{i:0;R:23913;i:1;R:23914;}s:33:"1210:f_zhfg_ragre_ercebqhpvovyvgl";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_zhfg_ragre_fhzznel";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_zhfg_ragre_qrfpevcgvba";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_ercbeg_zber_ohtf";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_fhozvffvba_gunaxf_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_fvzcyr_ercbeg_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:33:"1210:f_ragre_ercbeg_qrgnvyf_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:15:"1210:f_erdhverq";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_fryrpg_pngrtbel";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_fryrpg_ercebqhpvovyvgl";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_fryrpg_frirevgl";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_be_svyy_va";a:2:{i:0;R:23913;i:1;R:23914;}s:16:"1210:f_nffvta_gb";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_nqqvgvbany_vasbezngvba";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_fhozvg_ercbeg_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_purpx_ercbeg_zber_ohtf";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_ercbeg_fgnl";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_fryrpgrq_cebwrpg";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_inyvq_cebwrpg_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_fvtahc_qbar_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_cnffjbeq_rznvyrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_ab_ercbafr_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_fvtahc_pncgpun_erdhrfg";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_fvtahc_vasb";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_fvtahc_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_fvtahc_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_ab_cnffjbeq_erdhrfg";a:2:{i:0;R:23913;i:1;R:23914;}s:31:"1210:f_rqvg_fvgr_frggvatf_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_fnir_frggvatf_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_fvgr_frggvatf_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_flfgrz_vasb_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_fvgr_frggvatf_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:32:"1210:f_fvgr_frggvatf_hcqngrq_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_fhzznel_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_fhzznel_nqinaprq_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_ol_cebwrpg";a:2:{i:0;R:23913;i:1;R:23914;}s:16:"1210:f_ol_fgnghf";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_ol_qngr";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_ol_frirevgl";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_ol_erfbyhgvba";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_ol_pngrtbel";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_ol_cevbevgl";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_ol_qrirybcre";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_ol_ercbegre";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_ercbegre_ol_erfbyhgvba";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_ercbegre_rssrpgvirarff";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_qrirybcre_ol_erfbyhgvba";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_crepragntr_svkrq";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_crepragntr_reebef";a:2:{i:0;R:23913;i:1;R:23914;}s:13:"1210:f_reebef";a:2:{i:0;R:23913;i:1;R:23914;}s:13:"1210:f_bcrarq";a:2:{i:0;R:23913;i:1;R:23914;}s:15:"1210:f_erfbyirq";a:2:{i:0;R:23913;i:1;R:23914;}s:12:"1210:f_gbgny";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_onynapr";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_zbfg_npgvir";a:2:{i:0;R:23913;i:1;R:23914;}s:12:"1210:f_fpber";a:2:{i:0;R:23913;i:1;R:23914;}s:11:"1210:f_qnlf";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_gvzr_fgngf";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_ybatrfg_bcra_oht";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_ybatrfg_bcra";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_nirentr_gvzr";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_gbgny_gvzr";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_qrirybcre_fgngf";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_ercbegre_fgngf";a:2:{i:0;R:23913;i:1;R:23914;}s:11:"1210:f_bepg";a:2:{i:0;R:23913;i:1;R:23914;}s:10:"1210:f_nal";a:2:{i:0;R:23913;i:1;R:23914;}s:10:"1210:f_nyy";a:2:{i:0;R:23913;i:1;R:23914;}s:11:"1210:f_fubj";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_punatrq";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_ivrjvat_ohtf_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_hcqngrq";a:2:{i:0;R:23913;i:1;R:23914;}s:13:"1210:f_fgvpxl";a:2:{i:0;R:23913;i:1;R:23914;}s:11:"1210:f_fbeg";a:2:{i:0;R:23913;i:1;R:23914;}s:15:"1210:f_vffhr_vq";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_erpragyl_ivfvgrq";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_cevbevgl_nooerivngvba";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_abgr_hfre_vq";a:2:{i:0;R:23913;i:1;R:23914;}s:11:"1210:f_abar";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_pheerag";a:2:{i:0;R:23913;i:1;R:23914;}s:13:"1210:f_frnepu";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_ivrj_ceri_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_ivrj_arkg_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:11:"1210:f_ceri";a:2:{i:0;R:23913;i:1;R:23914;}s:11:"1210:f_arkg";a:2:{i:0;R:23913;i:1;R:23914;}s:12:"1210:f_svefg";a:2:{i:0;R:23913;i:1;R:23914;}s:11:"1210:f_ynfg";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_fgneg_qngr";a:2:{i:0;R:23913;i:1;R:23914;}s:15:"1210:f_raq_qngr";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_hfr_qngr_svygref";a:2:{i:0;R:23913;i:1;R:23914;}s:10:"1210:f_lrf";a:2:{i:0;R:23913;i:1;R:23914;}s:9:"1210:f_ab";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_bcra_svygref";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_be_hanffvtarq";a:2:{i:0;R:23913;i:1;R:23914;}s:9:"1210:f_bx";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_fryrpg_nyy";a:2:{i:0;R:23913;i:1;R:23914;}s:16:"1210:f_hfr_dhrel";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_qryrgr_dhrel";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_dhrel_qryrgrq";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_fnir_dhrel";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_erfrg_dhrel";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_dhrel_anzr";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_dhrel_rkvfgf";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_dhrel_qhcr_anzr";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_dhrel_oynax_anzr";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_dhrel_anzr_gbb_ybat";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_dhrel_fgber_reebe";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_bcra_dhrevrf";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_dhrel_qryrgr_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_ivrj_fvzcyr_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_cebqhpg_ohvyq";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_flfgrz_cebsvyr";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_hcqngr_oht_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_oht_nffvta_gb_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_oht_fgnghf_gb_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_erbcra_oht_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_zbir_oht_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_nggnpurq_svyrf";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_choyvfu";a:2:{i:0;R:23913;i:1;R:23914;}s:13:"1210:f_pnpurq";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_nqq_hfre_gb_zbavgbe";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_oht_ivrj_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_ab_hfref_zbavgbevat_oht";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_hfref_zbavgbevat_oht";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_zbavgbevat_hfre_yvfg";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_ab_hfref_fcbafbevat_oht";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_hfref_fcbafbevat_oht";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_fcbafbef_yvfg";a:2:{i:0;R:23913;i:1;R:23914;}s:31:"1210:f_gbgny_fcbafbefuvc_nzbhag";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_nqq_phfgbz_svryq_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:33:"1210:f_qryrgr_phfgbz_svryq_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:37:"1210:f_qryrgr_phfgbz_svryq_rireljurer";a:2:{i:0;R:23913;i:1;R:23914;}s:33:"1210:f_hcqngr_phfgbz_svryq_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:32:"1210:f_nqq_rkvfgvat_phfgbz_svryq";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_rqvg_phfgbz_svryq_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_phfgbz_svryq";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_phfgbz_svryqf_frghc";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_phfgbz_svryq_anzr";a:2:{i:0;R:23913;i:1;R:23914;}s:33:"1210:f_phfgbz_svryq_cebwrpg_pbhag";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_phfgbz_svryq_glcr";a:2:{i:0;R:23913;i:1;R:23914;}s:35:"1210:f_phfgbz_svryq_cbffvoyr_inyhrf";a:2:{i:0;R:23913;i:1;R:23914;}s:33:"1210:f_phfgbz_svryq_qrsnhyg_inyhr";a:2:{i:0;R:23913;i:1;R:23914;}s:32:"1210:f_phfgbz_svryq_inyvq_ertrkc";a:2:{i:0;R:23913;i:1;R:23914;}s:34:"1210:f_phfgbz_svryq_npprff_yriry_e";a:2:{i:0;R:23913;i:1;R:23914;}s:35:"1210:f_phfgbz_svryq_npprff_yriry_ej";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_phfgbz_svryq_yratgu_zva";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_phfgbz_svryq_yratgu_znk";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_phfgbz_svryq_svygre_ol";a:2:{i:0;R:23913;i:1;R:23914;}s:34:"1210:f_phfgbz_svryq_qvfcynl_ercbeg";a:2:{i:0;R:23913;i:1;R:23914;}s:34:"1210:f_phfgbz_svryq_qvfcynl_hcqngr";a:2:{i:0;R:23913;i:1;R:23914;}s:36:"1210:f_phfgbz_svryq_qvfcynl_erfbyirq";a:2:{i:0;R:23913;i:1;R:23914;}s:34:"1210:f_phfgbz_svryq_qvfcynl_pybfrq";a:2:{i:0;R:23913;i:1;R:23914;}s:34:"1210:f_phfgbz_svryq_erdhver_ercbeg";a:2:{i:0;R:23913;i:1;R:23914;}s:34:"1210:f_phfgbz_svryq_erdhver_hcqngr";a:2:{i:0;R:23913;i:1;R:23914;}s:36:"1210:f_phfgbz_svryq_erdhver_erfbyirq";a:2:{i:0;R:23913;i:1;R:23914;}s:34:"1210:f_phfgbz_svryq_erdhver_pybfrq";a:2:{i:0;R:23913;i:1;R:23914;}s:41:"1210:f_yvax_phfgbz_svryq_gb_cebwrpg_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:42:"1210:f_yvax_phfgbz_svryq_gb_cebwrpg_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_yvaxrq_cebwrpgf";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_phfgbz_svryq_frdhrapr";a:2:{i:0;R:23913;i:1;R:23914;}s:36:"1210:f_phfgbz_svryq_glcr_rahz_fgevat";a:2:{i:0;R:23913;i:1;R:23914;}s:41:"1210:f_pbasvez_hfrq_phfgbz_svryq_qryrgvba";a:2:{i:0;R:23913;i:1;R:23914;}s:36:"1210:f_pbasvez_phfgbz_svryq_qryrgvba";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_svryq_qryrgr_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:37:"1210:f_pbasvez_phfgbz_svryq_hayvaxvat";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_svryq_erzbir_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_uvqr_fgnghf";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_svygre_pybfrq";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_svygre_erfbyirq";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_uvqr_pybfrq";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_uvqr_erfbyirq";a:2:{i:0;R:23913;i:1;R:23914;}s:16:"1210:f_naq_nobir";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_nqinaprq_svygref";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_fvzcyr_svygref";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_zbavgberq_ol";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_nggnpuzragf";a:2:{i:0;R:23913;i:1;R:23914;}s:12:"1210:f_olgrf";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_nggnpuzrag_zvffvat";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_nggnpuzrag_pbhag";a:2:{i:0;R:23913;i:1;R:23914;}s:33:"1210:f_ivrj_nggnpuzragf_sbe_vffhr";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_cucznvyre_ynathntr";a:2:{i:0;R:23913;i:1;R:23914;}s:15:"1210:f_fcbafbef";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_fcbafbefuvc_nqqrq";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_fcbafbefuvc_hcqngrq";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_fcbafbefuvc_qryrgrq";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_fcbafbefuvc_cnvq";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_fcbafbefuvc_zber_vasb";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_fcbafbefuvc_gbgny";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_fcbafbefuvc_cebprff_hey";a:2:{i:0;R:23913;i:1;R:23914;}s:16:"1210:f_punatrybt";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_punatrybt_rzcgl";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_ebnqznc";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_erfbyirq_cebterff";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_uggc_nhgu_ernyz";a:2:{i:0;R:23913;i:1;R:23914;}s:10:"1210:f_oht";a:2:{i:0;R:23913;i:1;R:23914;}s:11:"1210:f_ohtf";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_nqq_arj_eryngvbafuvc";a:2:{i:0;R:23913;i:1;R:23914;}s:34:"1210:f_nqq_arj_eryngvbafuvc_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:15:"1210:f_guvf_oht";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_eryngvbafuvc_nqqrq";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_eryngvbafuvc_qryrgrq";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_ab_eryngvbafuvc";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_eryngvbafuvc_ercynprq";a:2:{i:0;R:23913;i:1;R:23914;}s:34:"1210:f_ercynpr_eryngvbafuvc_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:36:"1210:f_ercynpr_eryngvbafuvc_fher_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:31:"1210:f_eryngvbafuvc_jvgu_cnerag";a:2:{i:0;R:23913;i:1;R:23914;}s:33:"1210:f_qryrgr_eryngvbafuvc_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:35:"1210:f_qryrgr_eryngvbafuvc_fher_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:54:"1210:f_eryngvbafuvc_jneavat_oybpxvat_ohtf_abg_erfbyirq";a:2:{i:0;R:23913;i:1;R:23914;}s:56:"1210:f_eryngvbafuvc_jneavat_oybpxvat_ohtf_abg_erfbyirq_2";a:2:{i:0;R:23913;i:1;R:23914;}s:30:"1210:f_perngr_puvyq_oht_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_oht_pybarq_gb";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_oht_perngrq_sebz";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_pbcl_sebz_cnerag";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_pbcl_abgrf_sebz_cnerag";a:2:{i:0;R:23913;i:1;R:23914;}s:35:"1210:f_pbcl_nggnpuzragf_sebz_cnerag";a:2:{i:0;R:23913;i:1;R:23914;}s:43:"1210:f_ivrjvat_oht_eryngvbafuvc_tencu_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:41:"1210:f_ivrjvat_oht_qrcraqrapl_tencu_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_eryngvba_tencu";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_qrcraqrapl_tencu";a:2:{i:0;R:23913;i:1;R:23914;}s:15:"1210:f_iregvpny";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_ubevmbagny";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_ivrj_vffhr";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_purpxva";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_crez_ecg_pncnovyvgl";a:2:{i:0;R:23913;i:1;R:23914;}s:11:"1210:f_ivrj";a:2:{i:0;R:23913;i:1;R:23914;}s:13:"1210:f_vffhrf";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_ercbeg_vffhr";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_hcqngr_vffhr";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_zbavgbe_vffhr";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_unaqyr_vffhr";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_zbir_vffhr";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_qryrgr_vffhr";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_erbcra_vffhr";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_ivrj_cevingr_vffhrf";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_hcqngr_ernqbayl_vffhrf";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_hcqngr_vffhr_fgnghf";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_frg_ivrj_fgnghf";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_hcqngr_ivrj_fgnghf";a:2:{i:0;R:23913;i:1;R:23914;}s:42:"1210:f_fubj_yvfg_bs_hfref_zbavgbevat_vffhr";a:2:{i:0;R:23913;i:1;R:23914;}s:12:"1210:f_abgrf";a:2:{i:0;R:23913;i:1;R:23914;}s:16:"1210:f_nqq_abgrf";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_hcqngr_abgrf";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_qryrgr_abgr";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_ivrj_cevingr_abgrf";a:2:{i:0;R:23913;i:1;R:23914;}s:11:"1210:f_arjf";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_ivrj_cevingr_arjf";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_znantr_arjf";a:2:{i:0;R:23913;i:1;R:23914;}s:31:"1210:f_ivrj_yvfg_bs_nggnpuzragf";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_qbjaybnq_nggnpuzragf";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_qryrgr_nggnpuzragf";a:2:{i:0;R:23913;i:1;R:23914;}s:31:"1210:f_qryrgr_nggnpuzrag_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:33:"1210:f_qryrgr_nggnpuzrag_fher_zft";a:2:{i:0;R:23913;i:1;R:23914;}s:31:"1210:f_hcybnq_vffhr_nggnpuzragf";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_svygref";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_fnir_svygref";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_fnir_svygref_nf_funerq";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_hfr_fnirq_svygref";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_perngr_cebwrpg";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_qryrgr_cebwrpg";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_znantr_cebwrpg";a:2:{i:0;R:23913;i:1;R:23914;}s:36:"1210:f_znantr_hfre_npprff_gb_cebwrpg";a:2:{i:0;R:23913;i:1;R:23914;}s:49:"1210:f_nhgbzngvpnyyl_vapyhqrq_va_cevingr_cebwrpgf";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_cebwrpg_qbphzragf";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_ivrj_cebwrpg_qbphzragf";a:2:{i:0;R:23913;i:1;R:23914;}s:31:"1210:f_hcybnq_cebwrpg_qbphzragf";a:2:{i:0;R:23913;i:1;R:23914;}s:37:"1210:f_yvax_phfgbz_svryqf_gb_cebwrpgf";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_fcbafbefuvcf";a:2:{i:0;R:23913;i:1;R:23914;}s:31:"1210:f_ivrj_fcbafbefuvc_qrgnvyf";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_ivrj_fcbafbefuvc_gbgny";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_fcbafbe_vffhr";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_nffvta_fcbafberq_vffhr";a:2:{i:0;R:23913;i:1;R:23914;}s:29:"1210:f_unaqyr_fcbafberq_vffhr";a:2:{i:0;R:23913;i:1;R:23914;}s:13:"1210:f_bguref";a:2:{i:0;R:23913;i:1;R:23914;}s:41:"1210:f_frr_rznvy_nqqerffrf_bs_bgure_hfref";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_fraq_erzvaqref";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_nqq_cebsvyrf";a:2:{i:0;R:23913;i:1;R:23914;}s:33:"1210:f_abgvsl_bs_arj_hfre_perngrq";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_rznvy_abgvsvpngvba";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_fgnghf_punatrq_gb";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_rznvy_ba_qryrgrq";a:2:{i:0;R:23913;i:1;R:23914;}s:35:"1210:f_rznvy_ba_fcbafbefuvc_punatrq";a:2:{i:0;R:23913;i:1;R:23914;}s:36:"1210:f_rznvy_ba_eryngvbafuvc_punatrq";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_ybnqvat";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_orgjrra_qngr";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_ba_be_orsber_qngr";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_orsber_qngr";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_nsgre_qngr";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_ba_be_nsgre_qngr";a:2:{i:0;R:23913;i:1;R:23914;}s:16:"1210:f_sebz_qngr";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_gb_qngr";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_ba_qngr";a:2:{i:0;R:23913;i:1;R:23914;}s:9:"1210:f_ba";a:2:{i:0;R:23913;i:1;R:23914;}s:10:"1210:f_bss";a:2:{i:0;R:23913;i:1;R:23914;}s:11:"1210:f_jvxv";a:2:{i:0;R:23913;i:1;R:23914;}s:11:"1210:f_gntf";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_gnt_qrgnvyf";a:2:{i:0;R:23913;i:1;R:23914;}s:13:"1210:f_gnt_vq";a:2:{i:0;R:23913;i:1;R:23914;}s:15:"1210:f_gnt_anzr";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_gnt_perngbe";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_gnt_perngrq";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_gnt_hcqngrq";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_gnt_qrfpevcgvba";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_gnt_fgngvfgvpf";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_gnt_hcqngr";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_gnt_hcqngr_erghea";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_gnt_hcqngr_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_gnt_qryrgr_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_gnt_qryrgr_zrffntr";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_gnt_rkvfgvat";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_gnt_abar_nggnpurq";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_gnt_nggnpu";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_gnt_nggnpu_ybat";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_gnt_nggnpu_snvyrq";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_gnt_qrgnpu";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_gnt_frcnengr_ol";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_gnt_vainyvq_anzr";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_gnt_perngr_qravrq";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_gnt_svygre_qrsnhyg";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_gnt_uvfgbel_nggnpurq";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_gnt_uvfgbel_qrgnpurq";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_gnt_uvfgbel_eranzrq";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_gnt_eryngrq";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_gnt_eryngrq_vffhrf";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_gnt_fgngf_nggnpurq";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_gnt_perngr";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_fubj_nyy_gntf";a:2:{i:0;R:23913;i:1;R:23914;}s:33:"1210:f_gvzr_genpxvat_ovyyvat_yvax";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_gvzr_genpxvat";a:2:{i:0;R:23913;i:1;R:23914;}s:31:"1210:f_gvzr_genpxvat_gvzr_fcrag";a:2:{i:0;R:23913;i:1;R:23914;}s:36:"1210:f_gvzr_genpxvat_trg_vasb_ohggba";a:2:{i:0;R:23913;i:1;R:23914;}s:34:"1210:f_gvzr_genpxvat_pbfg_cre_ubhe";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_gvzr_genpxvat_pbfg";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_gbgny_gvzr_sbe_vffhr";a:2:{i:0;R:23913;i:1;R:23914;}s:36:"1210:f_gvzr_genpxvat_fgbcjngpu_fgneg";a:2:{i:0;R:23913;i:1;R:23914;}s:35:"1210:f_gvzr_genpxvat_fgbcjngpu_fgbc";a:2:{i:0;R:23913;i:1;R:23914;}s:36:"1210:f_gvzr_genpxvat_fgbcjngpu_erfrg";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_npprff_qravrq";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_gjvggre_erfbyirq";a:2:{i:0;R:23913;i:1;R:23914;}s:34:"1210:f_gjvggre_erfbyirq_ab_irefvba";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_qrirybczrag_grnz";a:2:{i:0;R:23913;i:1;R:23914;}s:28:"1210:f_znantr_pbyhzaf_pbasvt";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_nyy_pbyhzaf_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_pfi_pbyhzaf_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:32:"1210:f_ivrj_vffhrf_pbyhzaf_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:33:"1210:f_cevag_vffhrf_pbyhzaf_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_rkpry_pbyhzaf_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:39:"1210:f_hcqngr_pbyhzaf_nf_tybony_qrsnhyg";a:2:{i:0;R:23913;i:1;R:23914;}s:41:"1210:f_hcqngr_pbyhzaf_sbe_pheerag_cebwrpg";a:2:{i:0;R:23913;i:1;R:23914;}s:35:"1210:f_hcqngr_pbyhzaf_nf_zl_qrsnhyg";a:2:{i:0;R:23913;i:1;R:23914;}s:34:"1210:f_erfrg_pbyhzaf_pbasvthengvba";a:2:{i:0;R:23913;i:1;R:23914;}s:24:"1210:f_pbcl_pbyhzaf_sebz";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_pbcl_pbyhzaf_gb";a:2:{i:0;R:23913;i:1;R:23914;}s:15:"1210:f_qhr_qngr";a:2:{i:0;R:23913;i:1;R:23914;}s:14:"1210:f_bireqhr";a:2:{i:0;R:23913;i:1;R:23914;}s:25:"1210:f_ivrj_nppbhag_gvgyr";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_znantr_hfre";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_jbeq_frcnengbe";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_vafgnyy_vasbezngvba";a:2:{i:0;R:23913;i:1;R:23914;}s:27:"1210:f_qngnonfr_vasbezngvba";a:2:{i:0;R:23913;i:1;R:23914;}s:23:"1210:f_cngu_vasbezngvba";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_zbagu_wnahnel";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_zbagu_sroehnel";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_zbagu_znepu";a:2:{i:0;R:23913;i:1;R:23914;}s:18:"1210:f_zbagu_ncevy";a:2:{i:0;R:23913;i:1;R:23914;}s:16:"1210:f_zbagu_znl";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_zbagu_whar";a:2:{i:0;R:23913;i:1;R:23914;}s:17:"1210:f_zbagu_whyl";a:2:{i:0;R:23913;i:1;R:23914;}s:19:"1210:f_zbagu_nhthfg";a:2:{i:0;R:23913;i:1;R:23914;}s:22:"1210:f_zbagu_frcgrzore";a:2:{i:0;R:23913;i:1;R:23914;}s:20:"1210:f_zbagu_bpgbore";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_zbagu_abirzore";a:2:{i:0;R:23913;i:1;R:23914;}s:21:"1210:f_zbagu_qrprzore";a:2:{i:0;R:23913;i:1;R:23914;}s:26:"1210:f_cyhtva_sbezng_gvgyr";a:2:{i:0;s:31:"out-mantis-mantiscoreformatting";i:1;R:23914;}s:32:"1210:f_cyhtva_sbezng_qrfpevcgvba";a:2:{i:0;R:25104;i:1;R:23914;}s:27:"1210:f_cyhtva_sbezng_pbasvt";a:2:{i:0;R:25104;i:1;R:23914;}s:33:"1210:f_cyhtva_sbezng_cebprff_grkg";a:2:{i:0;R:25104;i:1;R:23914;}s:48:"1210:f_cyhtva_sbezng_cebprff_grkg_jneavat_abgvpr";a:2:{i:0;R:25104;i:1;R:23914;}s:33:"1210:f_cyhtva_sbezng_cebprff_heyf";a:2:{i:0;R:25104;i:1;R:23914;}s:37:"1210:f_cyhtva_sbezng_cebprff_ohtyvaxf";a:2:{i:0;R:25104;i:1;R:23914;}s:37:"1210:f_cyhtva_sbezng_cebprff_ipfyvaxf";a:2:{i:0;R:25104;i:1;R:23914;}s:28:"1210:f_cyhtva_sbezng_ranoyrq";a:2:{i:0;R:25104;i:1;R:23914;}s:29:"1210:f_cyhtva_sbezng_qvfnoyrq";a:2:{i:0;R:25104;i:1;R:23914;}s:25:"1210:f_cyhtva_tencu_gvgyr";a:2:{i:0;s:22:"out-mantis-mantisgraph";i:1;R:23914;}s:31:"1210:f_cyhtva_tencu_qrfpevcgvba";a:2:{i:0;R:25115;i:1;R:23914;}s:31:"1210:f_cyhtva_znagvftencu_gvgyr";a:2:{i:0;R:25115;i:1;R:23914;}s:47:"1210:f_cyhtva_znagvftencu_zrah_nqinaprq_fhzznel";a:2:{i:0;R:25115;i:1;R:23914;}s:32:"1210:f_cyhtva_znagvftencu_pbasvt";a:2:{i:0;R:25115;i:1;R:23914;}s:40:"1210:f_cyhtva_znagvftencu_flagurfvf_yvax";a:2:{i:0;R:25115;i:1;R:23914;}s:37:"1210:f_cyhtva_znagvftencu_fgnghf_yvax";a:2:{i:0;R:25115;i:1;R:23914;}s:39:"1210:f_cyhtva_znagvftencu_cevbevgl_yvax";a:2:{i:0;R:25115;i:1;R:23914;}s:39:"1210:f_cyhtva_znagvftencu_frirevgl_yvax";a:2:{i:0;R:25115;i:1;R:23914;}s:39:"1210:f_cyhtva_znagvftencu_pngrtbel_yvax";a:2:{i:0;R:25115;i:1;R:23914;}s:41:"1210:f_cyhtva_znagvftencu_erfbyhgvba_yvax";a:2:{i:0;R:25115;i:1;R:23914;}s:45:"1210:f_cyhtva_znagvftencu_tencu_oht_cntr_yvax";a:2:{i:0;R:25115;i:1;R:23914;}s:33:"1210:f_cyhtva_znagvftencu_yvoenel";a:2:{i:0;R:25115;i:1;R:23914;}s:33:"1210:f_cyhtva_znagvftencu_ohaqyrq";a:2:{i:0;R:25115;i:1;R:23914;}s:38:"1210:f_cyhtva_znagvftencu_jvaqbj_jvqgu";a:2:{i:0;R:25115;i:1;R:23914;}s:36:"1210:f_cyhtva_znagvftencu_one_nfcrpg";a:2:{i:0;R:25115;i:1;R:23914;}s:48:"1210:f_cyhtva_znagvftencu_fhzznel_tencuf_cre_ebj";a:2:{i:0;R:25115;i:1;R:23914;}s:30:"1210:f_cyhtva_znagvftencu_sbag";a:2:{i:0;R:25115;i:1;R:23914;}s:38:"1210:f_cyhtva_znagvftencu_wctencu_cngu";a:2:{i:0;R:25115;i:1;R:23914;}s:46:"1210:f_cyhtva_znagvftencu_wctencu_cngu_qrsnhyg";a:2:{i:0;R:25115;i:1;R:23914;}s:43:"1210:f_cyhtva_znagvftencu_wctencu_nagvnyvnf";a:2:{i:0;R:25115;i:1;R:23914;}s:48:"1210:f_cyhtva_znagvftencu_wctencu_nagvnyvnf_vasb";a:2:{i:0;R:25115;i:1;R:23914;}s:33:"1210:f_cyhtva_znagvftencu_ranoyrq";a:2:{i:0;R:25115;i:1;R:23914;}s:34:"1210:f_cyhtva_znagvftencu_qvfnoyrq";a:2:{i:0;R:25115;i:1;R:23914;}s:48:"1210:f_cyhtva_znagvftencu_tencu_vzc_fgnghf_gvgyr";a:2:{i:0;R:25115;i:1;R:23914;}s:50:"1210:f_cyhtva_znagvftencu_tencu_vzc_cevbevgl_gvgyr";a:2:{i:0;R:25115;i:1;R:23914;}s:50:"1210:f_cyhtva_znagvftencu_tencu_vzc_frirevgl_gvgyr";a:2:{i:0;R:25115;i:1;R:23914;}s:50:"1210:f_cyhtva_znagvftencu_tencu_vzc_pngrtbel_gvgyr";a:2:{i:0;R:25115;i:1;R:23914;}s:52:"1210:f_cyhtva_znagvftencu_tencu_vzc_erfbyhgvba_gvgyr";a:2:{i:0;R:25115;i:1;R:23914;}s:39:"1210:f_cyhtva_znagvftencu_ol_fgnghf_cpg";a:2:{i:0;R:25115;i:1;R:23914;}s:41:"1210:f_cyhtva_znagvftencu_ol_cevbevgl_cpg";a:2:{i:0;R:25115;i:1;R:23914;}s:41:"1210:f_cyhtva_znagvftencu_ol_frirevgl_cpg";a:2:{i:0;R:25115;i:1;R:23914;}s:41:"1210:f_cyhtva_znagvftencu_ol_pngrtbel_cpg";a:2:{i:0;R:25115;i:1;R:23914;}s:43:"1210:f_cyhtva_znagvftencu_ol_erfbyhgvba_cpg";a:2:{i:0;R:25115;i:1;R:23914;}s:41:"1210:f_cyhtva_znagvftencu_ol_frirevgl_zvk";a:2:{i:0;R:25115;i:1;R:23914;}s:41:"1210:f_cyhtva_znagvftencu_ol_cevbevgl_zvk";a:2:{i:0;R:25115;i:1;R:23914;}s:43:"1210:f_cyhtva_znagvftencu_ol_erfbyhgvba_zvk";a:2:{i:0;R:25115;i:1;R:23914;}s:43:"1210:f_cyhtva_znagvftencu_yrtraq_fgvyy_bcra";a:2:{i:0;R:25115;i:1;R:23914;}s:41:"1210:f_cyhtva_znagvftencu_yrtraq_erfbyirq";a:2:{i:0;R:25115;i:1;R:23914;}s:41:"1210:f_cyhtva_znagvftencu_yrtraq_nffvtarq";a:2:{i:0;R:25115;i:1;R:23914;}s:38:"1210:f_cyhtva_znagvftencu_yrtraq_gbgny";a:2:{i:0;R:25115;i:1;R:23914;}s:39:"1210:f_cyhtva_znagvftencu_yrtraq_bcrarq";a:2:{i:0;R:25115;i:1;R:23914;}s:39:"1210:f_cyhtva_znagvftencu_yrtraq_pybfrq";a:2:{i:0;R:25115;i:1;R:23914;}s:41:"1210:f_cyhtva_znagvftencu_yrtraq_ercbegrq";a:2:{i:0;R:25115;i:1;R:23914;}s:36:"1210:f_cyhtva_znagvftencu_phzhyngvir";a:2:{i:0;R:25115;i:1;R:23914;}s:41:"1210:f_cyhtva_znagvftencu_abg_rabhtu_qngn";a:2:{i:0;R:25115;i:1;R:23914;}s:37:"1210:f_cyhtva_znagvftencu_crevbq_abar";a:2:{i:0;R:25115;i:1;R:23914;}s:42:"1210:f_cyhtva_znagvftencu_crevbq_guvf_jrrx";a:2:{i:0;R:25115;i:1;R:23914;}s:42:"1210:f_cyhtva_znagvftencu_crevbq_ynfg_jrrx";a:2:{i:0;R:25115;i:1;R:23914;}s:42:"1210:f_cyhtva_znagvftencu_crevbq_gjb_jrrxf";a:2:{i:0;R:25115;i:1;R:23914;}s:43:"1210:f_cyhtva_znagvftencu_crevbq_guvf_zbagu";a:2:{i:0;R:25115;i:1;R:23914;}s:43:"1210:f_cyhtva_znagvftencu_crevbq_ynfg_zbagu";a:2:{i:0;R:25115;i:1;R:23914;}s:45:"1210:f_cyhtva_znagvftencu_crevbq_guvf_dhnegre";a:2:{i:0;R:25115;i:1;R:23914;}s:45:"1210:f_cyhtva_znagvftencu_crevbq_ynfg_dhnegre";a:2:{i:0;R:25115;i:1;R:23914;}s:45:"1210:f_cyhtva_znagvftencu_crevbq_lrne_gb_qngr";a:2:{i:0;R:25115;i:1;R:23914;}s:39:"1210:f_cyhtva_znagvftencu_crevbq_fryrpg";a:2:{i:0;R:25115;i:1;R:23914;}s:42:"1210:f_cyhtva_znagvftencu_crevbq_ynfg_lrne";a:2:{i:0;R:25115;i:1;R:23914;}s:32:"1210:f_cyhtva_znagvftencu_fryrpg";a:2:{i:0;R:25115;i:1;R:23914;}s:41:"1210:f_cyhtva_znagvftencu_fryrpg_olfgnghf";a:2:{i:0;R:25115;i:1;R:23914;}s:45:"1210:f_cyhtva_znagvftencu_fryrpg_fhzzolfgnghf";a:2:{i:0;R:25115;i:1;R:23914;}s:38:"1210:f_cyhtva_znagvftencu_fryrpg_olpng";a:2:{i:0;R:25115;i:1;R:23914;}s:37:"1210:f_cyhtva_znagvftencu_fryrpg_obgu";a:2:{i:0;R:25115;i:1;R:23914;}s:39:"1210:f_cyhtva_znagvftencu_fubj_nf_tencu";a:2:{i:0;R:25115;i:1;R:23914;}s:39:"1210:f_cyhtva_znagvftencu_fubj_nf_gnoyr";a:2:{i:0;R:25115;i:1;R:23914;}s:36:"1210:f_cyhtva_znagvftencu_fubj_tencu";a:2:{i:0;R:25115;i:1;R:23914;}s:36:"1210:f_cyhtva_znagvftencu_tencu_cntr";a:2:{i:0;R:25115;i:1;R:23914;}s:35:"1210:f_cyhtva_kzyvzcbegrkcbeg_gvgyr";a:2:{i:0;s:26:"out-mantis-xmlimportexport";i:1;R:23914;}s:41:"1210:f_cyhtva_kzyvzcbegrkcbeg_qrfpevcgvba";a:2:{i:0;R:25182;i:1;R:23914;}s:36:"1210:f_cyhtva_kzyvzcbegrkcbeg_vzcbeg";a:2:{i:0;R:25182;i:1;R:23914;}s:36:"1210:f_cyhtva_kzyvzcbegrkcbeg_rkcbeg";a:2:{i:0;R:25182;i:1;R:23914;}s:50:"1210:f_cyhtva_kzyvzcbegrkcbeg_vzcbegvat_va_cebwrpg";a:2:{i:0;R:25182;i:1;R:23914;}s:44:"1210:f_cyhtva_kzyvzcbegrkcbeg_vzcbeg_bcgvbaf";a:2:{i:0;R:25182;i:1;R:23914;}s:46:"1210:f_cyhtva_kzyvzcbegrkcbeg_pebff_ersreraprf";a:2:{i:0;R:25182;i:1;R:23914;}s:46:"1210:f_cyhtva_kzyvzcbegrkcbeg_qrsnhyg_fgengrtl";a:2:{i:0;R:25182;i:1;R:23914;}s:38:"1210:f_cyhtva_kzyvzcbegrkcbeg_erahzore";a:2:{i:0;R:25182;i:1;R:23914;}s:43:"1210:f_cyhtva_kzyvzcbegrkcbeg_erahzore_qrfp";a:2:{i:0;R:25182;i:1;R:23914;}s:34:"1210:f_cyhtva_kzyvzcbegrkcbeg_yvax";a:2:{i:0;R:25182;i:1;R:23914;}s:39:"1210:f_cyhtva_kzyvzcbegrkcbeg_yvax_qrfp";a:2:{i:0;R:25182;i:1;R:23914;}s:37:"1210:f_cyhtva_kzyvzcbegrkcbeg_qvfnoyr";a:2:{i:0;R:25182;i:1;R:23914;}s:42:"1210:f_cyhtva_kzyvzcbegrkcbeg_qvfnoyr_qrfp";a:2:{i:0;R:25182;i:1;R:23914;}s:38:"1210:f_cyhtva_kzyvzcbegrkcbeg_snyyonpx";a:2:{i:0;R:25182;i:1;R:23914;}s:47:"1210:f_cyhtva_kzyvzcbegrkcbeg_snyyonpx_pngrtbel";a:2:{i:0;R:25182;i:1;R:23914;}s:48:"1210:f_cyhtva_kzyvzcbegrkcbeg_xrrc_fnzr_pngrtbel";a:2:{i:0;R:25182;i:1;R:23914;}s:48:"1230:nppbhagvat-nppbhagvat.ivrjnppbhagvatrkcbegf";a:2:{i:0;s:20:"out-mifos-accounting";i:1;R:9;}s:56:"1230:nppbhagvat-nppbhagvat.ivrjnppbhagvatrkcbegf.jneavat";a:2:{i:0;R:25200;i:1;R:9;}s:55:"1230:nppbhagvat-nppbhagvat.ivrjnppbhagvatrkcbegf.abqngn";a:2:{i:0;R:25200;i:1;R:9;}s:60:"1230:nppbhagvat-nppbhagvat.ivrjnppbhagvatrkcbegf.vafgehpgvba";a:2:{i:0;R:25200;i:1;R:9;}s:66:"1230:nppbhagvat-nppbhagvat.ivrjnppbhagvatrkcbegf.pnpur.vafgehpgvba";a:2:{i:0;R:25200;i:1;R:9;}s:39:"1230:nppbhagvat-nppbhagvat.pyrnerkcbegf";a:2:{i:0;R:25200;i:1;R:9;}s:47:"1230:nppbhagvat-nppbhagvat.pyrnerkcbegf.jneavat";a:2:{i:0;R:25200;i:1;R:9;}s:51:"1230:nppbhagvat-nppbhagvat.pyrnerkcbegf.vafgehpgvba";a:2:{i:0;R:25200;i:1;R:9;}s:43:"1230:nppbhagvat-nppbhagvat.qbjaybnqgnyylkzy";a:2:{i:0;R:25200;i:1;R:9;}s:49:"1230:nppbhagvat-nppbhagvat.qbjaybnqgnyylkzy.cevag";a:2:{i:0;R:25200;i:1;R:9;}s:52:"1230:nppbhagvat-nppbhagvat.ivrjnppbhagvatrkcbeg.onpx";a:2:{i:0;R:25200;i:1;R:9;}s:54:"1230:nppbhagvat-nppbhagvat.ivrjnppbhagvatrkcbeg.oenapu";a:2:{i:0;R:25200;i:1;R:9;}s:59:"1230:nppbhagvat-nppbhagvat.ivrjnppbhagvatrkcbeg.ibhpureqngr";a:2:{i:0;R:25200;i:1;R:9;}s:59:"1230:nppbhagvat-nppbhagvat.ivrjnppbhagvatrkcbeg.ibhpureglcr";a:2:{i:0;R:25200;i:1;R:9;}s:54:"1230:nppbhagvat-nppbhagvat.ivrjnppbhagvatrkcbeg.typbqr";a:2:{i:0;R:25200;i:1;R:9;}s:54:"1230:nppbhagvat-nppbhagvat.ivrjnppbhagvatrkcbeg.tyanzr";a:2:{i:0;R:25200;i:1;R:9;}s:53:"1230:nppbhagvat-nppbhagvat.ivrjnppbhagvatrkcbeg.qrovg";a:2:{i:0;R:25200;i:1;R:9;}s:54:"1230:nppbhagvat-nppbhagvat.ivrjnppbhagvatrkcbeg.perqvg";a:2:{i:0;R:25200;i:1;R:9;}s:58:"1230:nppbhagvat-nppbhagvat.ivrjnppbhagvatrkcbegf.trarengrq";a:2:{i:0;R:25200;i:1;R:9;}s:61:"1230:nppbhagvat-nppbhagvat.ivrjnppbhagvatrkcbegf.abgtrarengrq";a:2:{i:0;R:25200;i:1;R:9;}s:62:"1230:nppbhagvat-nppbhagvat.ivrjnppbhagvatrkcbegf.rkcbegnaqivrj";a:2:{i:0;R:25200;i:1;R:9;}s:60:"1230:nppbhagvat-nppbhagvat.ivrjnppbhagvatrkcbegf.ivrjqrgnvyf";a:2:{i:0;R:25200;i:1;R:9;}s:60:"1230:nppbhagvat-nppbhagvat.ivrjnppbhagvatrkcbegf.trarengrqba";a:2:{i:0;R:25200;i:1;R:9;}s:55:"1230:nppbhagvat-nppbhagvat.ivrjnppbhagvatrkcbegf.npgvba";a:2:{i:0;R:25200;i:1;R:9;}s:57:"1230:nppbhagvat-nppbhagvat.ivrjnppbhagvatrkcbegf.svyranzr";a:2:{i:0;R:25200;i:1;R:9;}s:35:"1230:nppbhagvat-nppbhagvat.cerivbhf";a:2:{i:0;R:25200;i:1;R:9;}s:31:"1230:nppbhagvat-nppbhagvat.arkg";a:2:{i:0;R:25200;i:1;R:9;}s:34:"1230:nppbhagvat-nppbhagvat.erfhygf";a:2:{i:0;R:25200;i:1;R:9;}s:32:"1230:nppbhagf-nppbhag.nqqarjabgr";a:2:{i:0;R:8;i:1;R:9;}s:29:"1230:nppbhagf-nppbhag.nqqabgr";a:2:{i:0;R:8;i:1;R:9;}s:27:"1230:nppbhagf-nppbhag.nqzva";a:2:{i:0;R:8;i:1;R:9;}s:46:"1230:nppbhagf-nppbhag.pyvpxpnaprygbqrgnvyfcntr";a:2:{i:0;R:8;i:1;R:9;}s:34:"1230:nppbhagf-nppbhag.pyvpxcerivrj";a:2:{i:0;R:8;i:1;R:9;}s:26:"1230:nppbhagf-nppbhag.rqvg";a:2:{i:0;R:8;i:1;R:9;}s:31:"1230:nppbhagf-nppbhag.rqvgynory";a:2:{i:0;R:8;i:1;R:9;}s:32:"1230:nppbhagf-nppbhag.ragrenabgr";a:2:{i:0;R:8;i:1;R:9;}s:26:"1230:nppbhagf-nppbhag.abgr";a:2:{i:0;R:8;i:1;R:9;}s:31:"1230:nppbhagf-nppbhag.abgrynory";a:2:{i:0;R:8;i:1;R:9;}s:27:"1230:nppbhagf-nppbhag.abgrf";a:2:{i:0;R:8;i:1;R:9;}s:33:"1230:nppbhagf-nppbhag.cerivrjabgr";a:2:{i:0;R:8;i:1;R:9;}s:32:"1230:nppbhagf-nppbhag.erivrjgrkg";a:2:{i:0;R:8;i:1;R:9;}s:35:"1230:nppbhagf-nppbhag.fgnghfuvfgbel";a:2:{i:0;R:8;i:1;R:9;}s:28:"1230:nppbhagf-nppbhag.fhozvg";a:2:{i:0;R:8;i:1;R:9;}s:35:"1230:nppbhagf-nppbhag.ivrjrqvghfref";a:2:{i:0;R:8;i:1;R:9;}s:31:"1230:nppbhagf-nppbhag.ivrjhfref";a:2:{i:0;R:8;i:1;R:9;}s:44:"1230:nppbhagf-nppbhag.ergheagbnppbhagqrgnvyf";a:2:{i:0;R:8;i:1;R:9;}s:29:"1230:nppbhagf-nqwhfgzragabgrf";a:2:{i:0;R:8;i:1;R:9;}s:20:"1230:nppbhagf-nzbhag";a:2:{i:0;R:8;i:1;R:9;}s:21:"1230:nppbhagf-onynapr";a:2:{i:0;R:8;i:1;R:9;}s:24:"1230:nppbhagf-pyvraganzr";a:2:{i:0;R:8;i:1;R:9;}s:20:"1230:nppbhagf-perqvg";a:2:{i:0;R:8;i:1;R:9;}s:18:"1230:nppbhagf-qngr";a:2:{i:0;R:8;i:1;R:9;}s:24:"1230:nppbhagf-qngrcbfgrq";a:2:{i:0;R:8;i:1;R:9;}s:19:"1230:nppbhagf-qrovg";a:2:{i:0;R:8;i:1;R:9;}s:25:"1230:nppbhagf-qrfpevcgvba";a:2:{i:0;R:8;i:1;R:9;}s:20:"1230:nppbhagf-typbqr";a:2:{i:0;R:8;i:1;R:9;}s:23:"1230:nppbhagf-arjfgnghf";a:2:{i:0;R:8;i:1;R:9;}s:23:"1230:nppbhagf-byqfgnghf";a:2:{i:0;R:8;i:1;R:9;}s:23:"1230:nppbhagf-cnlzragvq";a:2:{i:0;R:8;i:1;R:9;}s:27:"1230:nppbhagf-genafnpgvbavq";a:2:{i:0;R:8;i:1;R:9;}s:18:"1230:nppbhagf-glcr";a:2:{i:0;R:8;i:1;R:9;}s:18:"1230:nppbhagf-hfre";a:2:{i:0;R:8;i:1;R:9;}s:28:"1230:nppbhagf-nppbhag.nzbhag";a:2:{i:0;R:8;i:1;R:9;}s:33:"1230:nppbhagf-nppbhag.nzbhag_mreb";a:2:{i:0;R:8;i:1;R:9;}s:32:"1230:nppbhagf-nppbhag.punetrglcr";a:2:{i:0;R:8;i:1;R:9;}s:30:"1230:nppbhagf-nppbhagf.nppbhag";a:2:{i:0;R:8;i:1;R:9;}s:45:"1230:nppbhagf-nppbhagf.purpxybnagnfxfpbzcyrgr";a:2:{i:0;R:8;i:1;R:9;}s:48:"1230:nppbhagf-nppbhagf.purpxfnivatfgnfxfpbzcyrgr";a:2:{i:0;R:8;i:1;R:9;}s:35:"1230:nppbhagf-nppbhagf.purpxyvfgzft";a:2:{i:0;R:8;i:1;R:9;}s:35:"1230:nppbhagf-nppbhagf.pyvpxpnapry1";a:2:{i:0;R:8;i:1;R:9;}s:35:"1230:nppbhagf-nppbhagf.pyvpxpnapry2";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-nppbhagf.pyvpxpbagvahr";a:2:{i:0;R:8;i:1;R:9;}s:34:"1230:nppbhagf-nppbhagf.pyvpxfhozvg";a:2:{i:0;R:8;i:1;R:9;}s:42:"1230:nppbhagf-nppbhagf.pbasvezfgnghfpunatr";a:2:{i:0;R:8;i:1;R:9;}s:33:"1230:nppbhagf-nppbhagf.rqvgfgnghf";a:2:{i:0;R:8;i:1;R:9;}s:44:"1230:nppbhagf-nppbhagf.ragreabgrybnapbzcyrgr";a:2:{i:0;R:8;i:1;R:9;}s:47:"1230:nppbhagf-nppbhagf.ragreabgrfnivatfpbzcyrgr";a:2:{i:0;R:8;i:1;R:9;}s:32:"1230:nppbhagf-nppbhagf.arjfgnghf";a:2:{i:0;R:8;i:1;R:9;}s:34:"1230:nppbhagf-nppbhagf.abpurpxyvfg";a:2:{i:0;R:8;i:1;R:9;}s:39:"1230:nppbhagf-nppbhagf.absyntfninvynoyr";a:2:{i:0;R:8;i:1;R:9;}s:39:"1230:nppbhagf-nppbhagf.ababgrfninvynoyr";a:2:{i:0;R:8;i:1;R:9;}s:32:"1230:nppbhagf-nppbhagf.byqfgnghf";a:2:{i:0;R:8;i:1;R:9;}s:41:"1230:nppbhagf-nppbhagf.erivrjybnapbzcyrgr";a:2:{i:0;R:8;i:1;R:9;}s:44:"1230:nppbhagf-nppbhagf.erivrjfnivatfpbzcyrgr";a:2:{i:0;R:8;i:1;R:9;}s:39:"1230:nppbhagf-nppbhagf.fry_pyvrag/tebhc";a:2:{i:0;R:8;i:1;R:9;}s:38:"1230:nppbhagf-nppbhagf.fryrpgnphfgbzre";a:2:{i:0;R:8;i:1;R:9;}s:37:"1230:nppbhagf-nppbhagf.fryrpgphfgbzre";a:2:{i:0;R:8;i:1;R:9;}s:42:"1230:nppbhagf-nppbhagf.fryrpgrkcynvangvba1";a:2:{i:0;R:8;i:1;R:9;}s:42:"1230:nppbhagf-nppbhagf.fryrpgrkcynvangvba2";a:2:{i:0;R:8;i:1;R:9;}s:45:"1230:nppbhagf-nppbhagf.fryrpgrkcynvangvbaybna";a:2:{i:0;R:8;i:1;R:9;}s:48:"1230:nppbhagf-nppbhagf.fryrpgrkcynvangvbafnivatf";a:2:{i:0;R:8;i:1;R:9;}s:47:"1230:nppbhagf-nppbhagf.fryrpgybnafgnghfpbzcyrgr";a:2:{i:0;R:8;i:1;R:9;}s:50:"1230:nppbhagf-nppbhagf.fryrpgfnivatffgnghfpbzcyrgr";a:2:{i:0;R:8;i:1;R:9;}s:35:"1230:nppbhagf-nppbhagf.fryrpgfgnghf";a:2:{i:0;R:8;i:1;R:9;}s:34:"1230:nppbhagf-nppbhagf.npp_qrgnvyf";a:2:{i:0;R:8;i:1;R:9;}s:31:"1230:nppbhagf-nppbhagf.npp_vasb";a:2:{i:0;R:8;i:1;R:9;}s:32:"1230:nppbhagf-nppbhagf.npp_bjare";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-nppbhagf.npp_fgngrzrag";a:2:{i:0;R:8;i:1;R:9;}s:34:"1230:nppbhagf-nppbhagf.npp_fhzznel";a:2:{i:0;R:8;i:1;R:9;}s:35:"1230:nppbhagf-nppbhagf.nppbhagybjre";a:2:{i:0;R:8;i:1;R:9;}s:31:"1230:nppbhagf-nppbhagf.npgvivgl";a:2:{i:0;R:8;i:1;R:9;}s:31:"1230:nppbhagf-nppbhagf.nqq_abgr";a:2:{i:0;R:8;i:1;R:9;}s:33:"1230:nppbhagf-nppbhagf.nqqarjabgr";a:2:{i:0;R:8;i:1;R:9;}s:30:"1230:nppbhagf-nppbhagf.nqqabgr";a:2:{i:0;R:8;i:1;R:9;}s:40:"1230:nppbhagf-nppbhagf.nqwhfgzrag_qrgnvy";a:2:{i:0;R:8;i:1;R:9;}s:37:"1230:nppbhagf-nppbhagf.nqzva_frg_srrf";a:2:{i:0;R:8;i:1;R:9;}s:27:"1230:nppbhagf-nppbhagf.nteb";a:2:{i:0;R:8;i:1;R:9;}s:32:"1230:nppbhagf-nppbhagf.nteb_ybna";a:2:{i:0;R:8;i:1;R:9;}s:37:"1230:nppbhagf-nppbhagf.nyybjrq_nzbhag";a:2:{i:0;R:8;i:1;R:9;}s:39:"1230:nppbhagf-nppbhagf.nyybjrq_vagrerfg";a:2:{i:0;R:8;i:1;R:9;}s:41:"1230:nppbhagf-nppbhagf.nyybjrq_ab_bs_vafg";a:2:{i:0;R:8;i:1;R:9;}s:41:"1230:nppbhagf-nppbhagf.nzag_gbor_nqwhfgrq";a:2:{i:0;R:8;i:1;R:9;}s:29:"1230:nppbhagf-nppbhagf.nzbhag";a:2:{i:0;R:8;i:1;R:9;}s:34:"1230:nppbhagf-nppbhagf.nzbhag(hfq)";a:2:{i:0;R:8;i:1;R:9;}s:34:"1230:nppbhagf-nppbhagf.nzbhag_(ef)";a:2:{i:0;R:8;i:1;R:9;}s:33:"1230:nppbhagf-nppbhagf.nzbhag_qhr";a:2:{i:0;R:8;i:1;R:9;}s:26:"1230:nppbhagf-nppbhagf.nzg";a:2:{i:0;R:8;i:1;R:9;}s:31:"1230:nppbhagf-nppbhagf.nzg_cnvq";a:2:{i:0;R:8;i:1;R:9;}s:39:"1230:nppbhagf-nppbhagf.nagv_qvfohefr_qq";a:2:{i:0;R:8;i:1;R:9;}s:30:"1230:nppbhagf-nppbhagf.ncc_srr";a:2:{i:0;R:8;i:1;R:9;}s:34:"1230:nppbhagf-nppbhagf.ncc_srr_nzg";a:2:{i:0;R:8;i:1;R:9;}s:32:"1230:nppbhagf-nppbhagf.nccy_srrf";a:2:{i:0;R:8;i:1;R:9;}s:37:"1230:nppbhagf-nppbhagf.nccyl_nqq_srrf";a:2:{i:0;R:8;i:1;R:9;}s:39:"1230:nppbhagf-nppbhagf.nccyl_nqwhfgzrag";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-nppbhagf.nccyl_punetrf";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-nppbhagf.nccyl_cnlzrag";a:2:{i:0;R:8;i:1;R:9;}s:34:"1230:nppbhagf-nppbhagf.nccyl_genaf";a:2:{i:0;R:8;i:1;R:9;}s:38:"1230:nppbhagf-nppbhagf.nccylnqwhfgzrag";a:2:{i:0;R:8;i:1;R:9;}s:31:"1230:nppbhagf-nppbhagf.nccebirq";a:2:{i:0;R:8;i:1;R:9;}s:26:"1230:nppbhagf-nppbhagf.nce";a:2:{i:0;R:8;i:1;R:9;}s:31:"1230:nppbhagf-nppbhagf.nfgrevfx";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-nppbhagf.onpxgbpunetrf";a:2:{i:0;R:8;i:1;R:9;}s:30:"1230:nppbhagf-nppbhagf.onynapr";a:2:{i:0;R:8;i:1;R:9;}s:42:"1230:nppbhagf-nppbhagf.onynapr_ng_qvfohefr";a:2:{i:0;R:8;i:1;R:9;}s:32:"1230:nppbhagf-nppbhagf.oenapu-01";a:2:{i:0;R:8;i:1;R:9;}s:43:"1230:nppbhagf-nppbhagf.oga_erivrjnqwhfgzrag";a:2:{i:0;R:8;i:1;R:9;}s:40:"1230:nppbhagf-nppbhagf.ohfvarff_jbex_npg";a:2:{i:0;R:8;i:1;R:9;}s:29:"1230:nppbhagf-nppbhagf.pnapry";a:2:{i:0;R:8;i:1;R:9;}s:34:"1230:nppbhagf-nppbhagf.pnggyr_ybna";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-nppbhagf.pragrepunetrf";a:2:{i:0;R:8;i:1;R:9;}s:33:"1230:nppbhagf-nppbhagf.punatr_ybt";a:2:{i:0;R:8;i:1;R:9;}s:35:"1230:nppbhagf-nppbhagf.punatrfgnghf";a:2:{i:0;R:8;i:1;R:9;}s:30:"1230:nppbhagf-nppbhagf.punetrq";a:2:{i:0;R:8;i:1;R:9;}s:38:"1230:nppbhagf-nppbhagf.punetrq_nccyvrq";a:2:{i:0;R:8;i:1;R:9;}s:30:"1230:nppbhagf-nppbhagf.punetrf";a:2:{i:0;R:8;i:1;R:9;}s:35:"1230:nppbhagf-nppbhagf.purpx_erzbir";a:2:{i:0;R:8;i:1;R:9;}s:43:"1230:nppbhagf-nppbhagf.pux_erireg_ynfg_czag";a:2:{i:0;R:8;i:1;R:9;}s:40:"1230:nppbhagf-nppbhagf.pyvrag/tebhc_anzr";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-nppbhagf.pyvragpunetrf";a:2:{i:0;R:8;i:1;R:9;}s:38:"1230:nppbhagf-nppbhagf.pbyy_furrg_glcr";a:2:{i:0;R:8;i:1;R:9;}s:39:"1230:nppbhagf-nppbhagf.pbyyngreny_abgrf";a:2:{i:0;R:8;i:1;R:9;}s:38:"1230:nppbhagf-nppbhagf.pbyyngreny_glcr";a:2:{i:0;R:8;i:1;R:9;}s:37:"1230:nppbhagf-nppbhagf.pbyyngrenyabgr";a:2:{i:0;R:8;i:1;R:9;}s:28:"1230:nppbhagf-nppbhagf.pbyba";a:2:{i:0;R:8;i:1;R:9;}s:37:"1230:nppbhagf-nppbhagf.pbzcyrgr_svryq";a:2:{i:0;R:8;i:1;R:9;}s:28:"1230:nppbhagf-nppbhagf.pbatb";a:2:{i:0;R:8;i:1;R:9;}s:38:"1230:nppbhagf-nppbhagf.pbafhygnapl_srr";a:2:{i:0;R:8;i:1;R:9;}s:31:"1230:nppbhagf-nppbhagf.pbagvahr";a:2:{i:0;R:8;i:1;R:9;}s:29:"1230:nppbhagf-nppbhagf.perngr";a:2:{i:0;R:8;i:1;R:9;}s:38:"1230:nppbhagf-nppbhagf.perngr_ybna_npp";a:2:{i:0;R:8;i:1;R:9;}s:29:"1230:nppbhagf-nppbhagf.perqvg";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-nppbhagf.pheeragfgnghf";a:2:{i:0;R:8;i:1;R:9;}s:27:"1230:nppbhagf-nppbhagf.qngr";a:2:{i:0;R:8;i:1;R:9;}s:35:"1230:nppbhagf-nppbhagf.qngr_bs_geka";a:2:{i:0;R:8;i:1;R:9;}s:32:"1230:nppbhagf-nppbhagf.qngr_cnvq";a:2:{i:0;R:8;i:1;R:9;}s:34:"1230:nppbhagf-nppbhagf.qngr_cbfgrq";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-nppbhagf.qngrbscnlzrag";a:2:{i:0;R:8;i:1;R:9;}s:35:"1230:nppbhagf-nppbhagf.qnlf_neernef";a:2:{i:0;R:8;i:1;R:9;}s:28:"1230:nppbhagf-nppbhagf.qrovg";a:2:{i:0;R:8;i:1;R:9;}s:29:"1230:nppbhagf-nppbhagf.qrsnzg";a:2:{i:0;R:8;i:1;R:9;}s:30:"1230:nppbhagf-nppbhagf.qrsvafg";a:2:{i:0;R:8;i:1;R:9;}s:33:"1230:nppbhagf-nppbhagf.qrsvagengr";a:2:{i:0;R:8;i:1;R:9;}s:34:"1230:nppbhagf-nppbhagf.qryvadhrapl";a:2:{i:0;R:8;i:1;R:9;}s:27:"1230:nppbhagf-nppbhagf.qrfp";a:2:{i:0;R:8;i:1;R:9;}s:34:"1230:nppbhagf-nppbhagf.qrfpevcgvba";a:2:{i:0;R:8;i:1;R:9;}s:31:"1230:nppbhagf-nppbhagf.qvf_qngr";a:2:{i:0;R:8;i:1;R:9;}s:31:"1230:nppbhagf-nppbhagf.qhr_qngr";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-nppbhagf.rqvg_npp_vasb";a:2:{i:0;R:8;i:1;R:9;}s:38:"1230:nppbhagf-nppbhagf.rqvg_nqwhfgzrag";a:2:{i:0;R:8;i:1;R:9;}s:32:"1230:nppbhagf-nppbhagf.rqvg_vasb";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-nppbhagf.rqvg_ybna_npp";a:2:{i:0;R:8;i:1;R:9;}s:32:"1230:nppbhagf-nppbhagf.rqvggenaf";a:2:{i:0;R:8;i:1;R:9;}s:31:"1230:nppbhagf-nppbhagf.rqvggeka";a:2:{i:0;R:8;i:1;R:9;}s:31:"1230:nppbhagf-nppbhagf.rqh_ybna";a:2:{i:0;R:8;i:1;R:9;}s:44:"1230:nppbhagf-nppbhagf.ragre_pyvrag_qrgnvyf1";a:2:{i:0;R:8;i:1;R:9;}s:44:"1230:nppbhagf-nppbhagf.ragre_pyvrag_qrgnvyf2";a:2:{i:0;R:8;i:1;R:9;}s:41:"1230:nppbhagf-nppbhagf.ragre_ybna_nppvasb";a:2:{i:0;R:8;i:1;R:9;}s:33:"1230:nppbhagf-nppbhagf.ragre_abgr";a:2:{i:0;R:8;i:1;R:9;}s:34:"1230:nppbhagf-nppbhagf.ragrenzbhag";a:2:{i:0;R:8;i:1;R:9;}s:33:"1230:nppbhagf-nppbhagf.rkgreanyvq";a:2:{i:0;R:8;i:1;R:9;}s:30:"1230:nppbhagf-nppbhagf.srr_nzg";a:2:{i:0;R:8;i:1;R:9;}s:29:"1230:nppbhagf-nppbhagf.srr_cq";a:2:{i:0;R:8;i:1;R:9;}s:30:"1230:nppbhagf-nppbhagf.srr_erp";a:2:{i:0;R:8;i:1;R:9;}s:31:"1230:nppbhagf-nppbhagf.srr_glcr";a:2:{i:0;R:8;i:1;R:9;}s:27:"1230:nppbhagf-nppbhagf.srrf";a:2:{i:0;R:8;i:1;R:9;}s:28:"1230:nppbhagf-nppbhagf.svryq";a:2:{i:0;R:8;i:1;R:9;}s:33:"1230:nppbhagf-nppbhagf.svfu_cbaqf";a:2:{i:0;R:8;i:1;R:9;}s:27:"1230:nppbhagf-nppbhagf.synt";a:2:{i:0;R:8;i:1;R:9;}s:35:"1230:nppbhagf-nppbhagf.serd_bs_vafg";a:2:{i:0;R:8;i:1;R:9;}s:37:"1230:nppbhagf-nppbhagf.shgher_vafgnyy";a:2:{i:0;R:8;i:1;R:9;}s:38:"1230:nppbhagf-nppbhagf.trarengr_ercbeg";a:2:{i:0;R:8;i:1;R:9;}s:35:"1230:nppbhagf-nppbhagf.tenpr_crevbq";a:2:{i:0;R:8;i:1;R:9;}s:40:"1230:nppbhagf-nppbhagf.tenpr_crevbq_glcr";a:2:{i:0;R:8;i:1;R:9;}s:34:"1230:nppbhagf-nppbhagf.tenprcreqhe";a:2:{i:0;R:8;i:1;R:9;}s:35:"1230:nppbhagf-nppbhagf.tebhcpunetrf";a:2:{i:0;R:8;i:1;R:9;}s:40:"1230:nppbhagf-nppbhagf.ubcr&rssbeg_tebhc";a:2:{i:0;R:8;i:1;R:9;}s:35:"1230:nppbhagf-nppbhagf.ubegvphygher";a:2:{i:0;R:8;i:1;R:9;}s:27:"1230:nppbhagf-nppbhagf.vafg";a:2:{i:0;R:8;i:1;R:9;}s:35:"1230:nppbhagf-nppbhagf.vafgnyy_cnvq";a:2:{i:0;R:8;i:1;R:9;}s:42:"1230:nppbhagf-nppbhagf.vafgnyyzrag_qrgnvyf";a:2:{i:0;R:8;i:1;R:9;}s:35:"1230:nppbhagf-nppbhagf.vafgnyyzragf";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-nppbhagf.vafgnapr_vasb";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-nppbhagf.vafgnapr_anzr";a:2:{i:0;R:8;i:1;R:9;}s:32:"1230:nppbhagf-nppbhagf.vafgg_qhr";a:2:{i:0;R:8;i:1;R:9;}s:33:"1230:nppbhagf-nppbhagf.vafgg_cnvq";a:2:{i:0;R:8;i:1;R:9;}s:31:"1230:nppbhagf-nppbhagf.vagrerfg";a:2:{i:0;R:8;i:1;R:9;}s:38:"1230:nppbhagf-nppbhagf.vagrerfg_nzbhag";a:2:{i:0;R:8;i:1;R:9;}s:44:"1230:nppbhagf-nppbhagf.vagrerfg_pny_cnlzragf";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-nppbhagf.vagrerfg_qvfo";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-nppbhagf.vagrerfg_engr";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-nppbhagf.vagrerfg_glcr";a:2:{i:0;R:8;i:1;R:9;}s:31:"1230:nppbhagf-nppbhagf.vage_erp";a:2:{i:0;R:8;i:1;R:9;}s:30:"1230:nppbhagf-nppbhagf.vagengr";a:2:{i:0;R:8;i:1;R:9;}s:34:"1230:nppbhagf-nppbhagf.vagengrglcr";a:2:{i:0;R:8;i:1;R:9;}s:39:"1230:nppbhagf-nppbhagf.xnanxchen_pragre";a:2:{i:0;R:8;i:1;R:9;}s:32:"1230:nppbhagf-nppbhagf.ynfg_czag";a:2:{i:0;R:8;i:1;R:9;}s:39:"1230:nppbhagf-nppbhagf.yvfg_nqwhfgzragf";a:2:{i:0;R:8;i:1;R:9;}s:34:"1230:nppbhagf-nppbhagf.ybna_nzbhag";a:2:{i:0;R:8;i:1;R:9;}s:35:"1230:nppbhagf-nppbhagf.ybna_onynapr";a:2:{i:0;R:8;i:1;R:9;}s:35:"1230:nppbhagf-nppbhagf.ybnavafganzr";a:2:{i:0;R:8;i:1;R:9;}s:38:"1230:nppbhagf-nppbhagf.znvagranapr_srr";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-nppbhagf.znghevgl_qngr";a:2:{i:0;R:8;i:1;R:9;}s:30:"1230:nppbhagf-nppbhagf.znkvafg";a:2:{i:0;R:8;i:1;R:9;}s:33:"1230:nppbhagf-nppbhagf.znkvagengr";a:2:{i:0;R:8;i:1;R:9;}s:33:"1230:nppbhagf-nppbhagf.znkybnanzg";a:2:{i:0;R:8;i:1;R:9;}s:38:"1230:nppbhagf-nppbhagf.zrrgvat_punetrf";a:2:{i:0;R:8;i:1;R:9;}s:37:"1230:nppbhagf-nppbhagf.zrzore_srr_nzg";a:2:{i:0;R:8;i:1;R:9;}s:37:"1230:nppbhagf-nppbhagf.zrzorefuvc_srr";a:2:{i:0;R:8;i:1;R:9;}s:30:"1230:nppbhagf-nppbhagf.zvavafg";a:2:{i:0;R:8;i:1;R:9;}s:33:"1230:nppbhagf-nppbhagf.zvavagengr";a:2:{i:0;R:8;i:1;R:9;}s:33:"1230:nppbhagf-nppbhagf.zvaybnanzg";a:2:{i:0;R:8;i:1;R:9;}s:38:"1230:nppbhagf-nppbhagf.zvffrq_cnlzragf";a:2:{i:0;R:8;i:1;R:9;}s:38:"1230:nppbhagf-nppbhagf.zbqr_bs_cnlzrag";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-nppbhagf.zbqrbscnlzrag";a:2:{i:0;R:8;i:1;R:9;}s:26:"1230:nppbhagf-nppbhagf.zba";a:2:{i:0;R:8;i:1;R:9;}s:35:"1230:nppbhagf-nppbhagf.zber_qrgnvyf";a:2:{i:0;R:8;i:1;R:9;}s:27:"1230:nppbhagf-nppbhagf.anzr";a:2:{i:0;R:8;i:1;R:9;}s:33:"1230:nppbhagf-nppbhagf.arj_fgnghf";a:2:{i:0;R:8;i:1;R:9;}s:30:"1230:nppbhagf-nppbhagf.arj_iny";a:2:{i:0;R:8;i:1;R:9;}s:32:"1230:nppbhagf-nppbhagf.arkg_vafg";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-nppbhagf.arkg_vafg_qhr";a:2:{i:0;R:8;i:1;R:9;}s:43:"1230:nppbhagf-nppbhagf.arkg_vafgnyy_qrgnvyf";a:2:{i:0;R:8;i:1;R:9;}s:40:"1230:nppbhagf-nppbhagf.avrj_npp_npgvivgl";a:2:{i:0;R:8;i:1;R:9;}s:25:"1230:nppbhagf-nppbhagf.ab";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-nppbhag.ab_nqwhfgzragf";a:2:{i:0;R:8;i:1;R:9;}s:33:"1230:nppbhagf-nppbhagf.ab_bs_vafg";a:2:{i:0;R:8;i:1;R:9;}s:27:"1230:nppbhagf-nppbhagf.abgr";a:2:{i:0;R:8;i:1;R:9;}s:28:"1230:nppbhagf-nppbhagf.abgrf";a:2:{i:0;R:8;i:1;R:9;}s:34:"1230:nppbhagf-nppbhagf.bs_cnlzragf";a:2:{i:0;R:8;i:1;R:9;}s:33:"1230:nppbhagf-nppbhagf.byq_fgnghf";a:2:{i:0;R:8;i:1;R:9;}s:30:"1230:nppbhagf-nppbhagf.byq_iny";a:2:{i:0;R:8;i:1;R:9;}s:34:"1230:nppbhagf-nppbhagf.bapr_20qnlf";a:2:{i:0;R:8;i:1;R:9;}s:35:"1230:nppbhagf-nppbhagf.bcra_arj_npp";a:2:{i:0;R:8;i:1;R:9;}s:41:"1230:nppbhagf-nppbhagf.bcra_arj_vafhe_npp";a:2:{i:0;R:8;i:1;R:9;}s:40:"1230:nppbhagf-nppbhagf.bcra_arj_ybna_npp";a:2:{i:0;R:8;i:1;R:9;}s:39:"1230:nppbhagf-nppbhagf.bcra_arj_fni_npp";a:2:{i:0;R:8;i:1;R:9;}s:25:"1230:nppbhagf-nppbhagf.be";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-nppbhagf.bevtvany_ybna";a:2:{i:0;R:8;i:1;R:9;}s:31:"1230:nppbhagf-nppbhagf.cnfg_qhr";a:2:{i:0;R:8;i:1;R:9;}s:39:"1230:nppbhagf-nppbhagf.cnfg_qhr_qrgnvyf";a:2:{i:0;R:8;i:1;R:9;}s:30:"1230:nppbhagf-nppbhagf.cnlzrag";a:2:{i:0;R:8;i:1;R:9;}s:33:"1230:nppbhagf-nppbhagf.cnlzrag_vq";a:2:{i:0;R:8;i:1;R:9;}s:30:"1230:nppbhagf-nppbhagf.cranygl";a:2:{i:0;R:8;i:1;R:9;}s:33:"1230:nppbhagf-nppbhagf.cranygl_01";a:2:{i:0;R:8;i:1;R:9;}s:33:"1230:nppbhagf-nppbhagf.cranygl_02";a:2:{i:0;R:8;i:1;R:9;}s:35:"1230:nppbhagf-nppbhagf.cranygl_glcr";a:2:{i:0;R:8;i:1;R:9;}s:42:"1230:nppbhagf-nppbhagf.cresbeznapr_uvfgbel";a:2:{i:0;R:8;i:1;R:9;}s:45:"1230:nppbhagf-nppbhagf.crevbqvpvgl_naahny_srr";a:2:{i:0;R:8;i:1;R:9;}s:47:"1230:nppbhagf-nppbhagf.crevbqvpvgl_bar_gvzr_srr";a:2:{i:0;R:8;i:1;R:9;}s:31:"1230:nppbhagf-nppbhagf.cym_abgr";a:2:{i:0;R:8;i:1;R:9;}s:32:"1230:nppbhagf-nppbhagf.cbfgrq_ol";a:2:{i:0;R:8;i:1;R:9;}s:35:"1230:nppbhagf-nppbhagf.cbhygel_snez";a:2:{i:0;R:8;i:1;R:9;}s:28:"1230:nppbhagf-nppbhagf.ce_cq";a:2:{i:0;R:8;i:1;R:9;}s:37:"1230:nppbhagf-nppbhagf.ceqbssrevatiny";a:2:{i:0;R:8;i:1;R:9;}s:30:"1230:nppbhagf-nppbhagf.cerivrj";a:2:{i:0;R:8;i:1;R:9;}s:38:"1230:nppbhagf-nppbhagf.cerivrj_nppvasb";a:2:{i:0;R:8;i:1;R:9;}s:32:"1230:nppbhagf-nppbhagf.cevapvcny";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-nppbhagf.cevapvcyr_qhr";a:2:{i:0;R:8;i:1;R:9;}s:38:"1230:nppbhagf-nppbhagf.cebqhpg_fhzznel";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-nppbhagf.cebcbfrq_qngr";a:2:{i:0;R:8;i:1;R:9;}s:40:"1230:nppbhagf-nppbhagf.erp_perngvba_qngr";a:2:{i:0;R:8;i:1;R:9;}s:34:"1230:nppbhagf-nppbhagf.erprvcgqngr";a:2:{i:0;R:8;i:1;R:9;}s:32:"1230:nppbhagf-nppbhagf.erprvcgvq";a:2:{i:0;R:8;i:1;R:9;}s:35:"1230:nppbhagf-nppbhagf.erprag_abgrf";a:2:{i:0;R:8;i:1;R:9;}s:41:"1230:nppbhagf-nppbhagf.erpheevat_npp_srrf";a:2:{i:0;R:8;i:1;R:9;}s:29:"1230:nppbhagf-nppbhagf.erzbir";a:2:{i:0;R:8;i:1;R:9;}s:30:"1230:nppbhagf-nppbhagf.erzbirq";a:2:{i:0;R:8;i:1;R:9;}s:38:"1230:nppbhagf-nppbhagf.ercnlzrag_fpurq";a:2:{i:0;R:8;i:1;R:9;}s:45:"1230:nppbhagf-nppbhagf.ergheagbnppbhagqrgnvyf";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-nppbhagf.ergheaqrgnvyf";a:2:{i:0;R:8;i:1;R:9;}s:29:"1230:nppbhagf-nppbhagf.erivrj";a:2:{i:0;R:8;i:1;R:9;}s:34:"1230:nppbhagf-nppbhagf.erivrj&rqvg";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-nppbhagf.erivrj&fhozvg";a:2:{i:0;R:8;i:1;R:9;}s:38:"1230:nppbhagf-nppbhagf.erivrj/rqvg_vaf";a:2:{i:0;R:8;i:1;R:9;}s:46:"1230:nppbhagf-nppbhagf.erivrj_cnlzrag_fpurqhyr";a:2:{i:0;R:8;i:1;R:9;}s:39:"1230:nppbhagf-nppbhagf.erivrjnqwhfgzrag";a:2:{i:0;R:8;i:1;R:9;}s:46:"1230:nppbhagf-nppbhagf.erivrjnqwhfgzrag_qrgnvy";a:2:{i:0;R:8;i:1;R:9;}s:40:"1230:nppbhagf-nppbhagf.erivrjgenafnpgvba";a:2:{i:0;R:8;i:1;R:9;}s:34:"1230:nppbhagf-nppbhagf.ehaavat_ony";a:2:{i:0;R:8;i:1;R:9;}s:35:"1230:nppbhagf-nppbhagf.fnirsbeyngre";a:2:{i:0;R:8;i:1;R:9;}s:29:"1230:nppbhagf-nppbhagf.frnepu";a:2:{i:0;R:8;i:1;R:9;}s:33:"1230:nppbhagf-nppbhagf.frnepu_sbe";a:2:{i:0;R:8;i:1;R:9;}s:34:"1230:nppbhagf-nppbhagf.frrnyyabgrf";a:2:{i:0;R:8;i:1;R:9;}s:38:"1230:nppbhagf-nppbhagf.fry_punetr_glcr";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-nppbhagf.fryrpg_pyvpx1";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-nppbhagf.fryrpg_pyvpx2";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-nppbhagf.fryrpg_pyvrag";a:2:{i:0;R:8;i:1;R:9;}s:42:"1230:nppbhagf-nppbhagf.fryrpg_pyvrag/tebhc";a:2:{i:0;R:8;i:1;R:9;}s:39:"1230:nppbhagf-nppbhagf.fryrpg_ybna_vafg";a:2:{i:0;R:8;i:1;R:9;}s:34:"1230:nppbhagf-nppbhagf.fbhepr_shaq";a:2:{i:0;R:8;i:1;R:9;}s:29:"1230:nppbhagf-nppbhagf.fgnghf";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-nppbhagf.fgnghf_npgvir";a:2:{i:0;R:8;i:1;R:9;}s:37:"1230:nppbhagf-nppbhagf.fgnghf_uvfgbel";a:2:{i:0;R:8;i:1;R:9;}s:29:"1230:nppbhagf-nppbhagf.fhozvg";a:2:{i:0;R:8;i:1;R:9;}s:40:"1230:nppbhagf-nppbhagf.fhozvgsbenccebiny";a:2:{i:0;R:8;i:1;R:9;}s:42:"1230:nppbhagf-nppbhagf.fhpprffshy_perngvba";a:2:{i:0;R:8;i:1;R:9;}s:38:"1230:nppbhagf-nppbhagf.fhttrfgrq_fgrcf";a:2:{i:0;R:8;i:1;R:9;}s:28:"1230:nppbhagf-nppbhagf.gbgny";a:2:{i:0;R:8;i:1;R:9;}s:40:"1230:nppbhagf-nppbhagf.gbgny_qhr_vafgnyy";a:2:{i:0;R:8;i:1;R:9;}s:35:"1230:nppbhagf-nppbhagf.genpgbe_ybna";a:2:{i:0;R:8;i:1;R:9;}s:35:"1230:nppbhagf-nppbhagf.genvavat_srr";a:2:{i:0;R:8;i:1;R:9;}s:37:"1230:nppbhagf-nppbhagf.genafnpgvba_vq";a:2:{i:0;R:8;i:1;R:9;}s:37:"1230:nppbhagf-nppbhagf.genafp_uvfgbel";a:2:{i:0;R:8;i:1;R:9;}s:35:"1230:nppbhagf-nppbhagf.gfhanzv_shaq";a:2:{i:0;R:8;i:1;R:9;}s:27:"1230:nppbhagf-nppbhagf.glcr";a:2:{i:0;R:8;i:1;R:9;}s:29:"1230:nppbhagf-nppbhagf.glcr_1";a:2:{i:0;R:8;i:1;R:9;}s:29:"1230:nppbhagf-nppbhagf.glcr_2";a:2:{i:0;R:8;i:1;R:9;}s:27:"1230:nppbhagf-nppbhagf.hfre";a:2:{i:0;R:8;i:1;R:9;}s:38:"1230:nppbhagf-nppbhagf.ivrj_punatr_ybt";a:2:{i:0;R:8;i:1;R:9;}s:40:"1230:nppbhagf-nppbhagf.ivrj_vafg_qrgnvyf";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-nppbhagf.ivrj_ybna_npp";a:2:{i:0;R:8;i:1;R:9;}s:32:"1230:nppbhagf-nppbhagf.ivrj_fpuq";a:2:{i:0;R:8;i:1;R:9;}s:42:"1230:nppbhagf-nppbhagf.ivrj_fgnghf_uvfgbel";a:2:{i:0;R:8;i:1;R:9;}s:42:"1230:nppbhagf-nppbhagf.ivrj_genafp_uvfgbel";a:2:{i:0;R:8;i:1;R:9;}s:28:"1230:nppbhagf-nppbhagf.jnvir";a:2:{i:0;R:8;i:1;R:9;}s:26:"1230:nppbhagf-nppbhagf.lrf";a:2:{i:0;R:8;i:1;R:9;}s:40:"1230:nppbhagf-reebe.npgvivgl.abg.nyybjrq";a:2:{i:0;R:8;i:1;R:9;}s:43:"1230:nppbhagf-reebef.nqwhfgzragcerivbhfqngr";a:2:{i:0;R:8;i:1;R:9;}s:39:"1230:nppbhagf-reebef.nqwhfgzragarkgqngr";a:2:{i:0;R:8;i:1;R:9;}s:39:"1230:nppbhagf-reebe.vapbzcyrgrpurpxyvfg";a:2:{i:0;R:8;i:1;R:9;}s:43:"1230:nppbhagf-reebe.zvfppunetrabgnccyvpnoyr";a:2:{i:0;R:8;i:1;R:9;}s:41:"1230:nppbhagf-reebe.abgenafnpgvbacbffvoyr";a:2:{i:0;R:8;i:1;R:9;}s:48:"1230:nppbhagf-reebe.fgngrvavgvnyvmngvbarkprcgvba";a:2:{i:0;R:8;i:1;R:9;}s:42:"1230:nppbhagf-reebe.fgnghfpunatrabgnyybjrq";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-reebe.haxabjarkprcgvba";a:2:{i:0;R:8;i:1;R:9;}s:39:"1230:nppbhagf-reebe.irefvbaabqbabgzngpu";a:2:{i:0;R:8;i:1;R:9;}s:41:"1230:nppbhagf-reebef.nqwhfgzragabgrgbbovt";a:2:{i:0;R:8;i:1;R:9;}s:34:"1230:nppbhagf-reebef.qrpvznysbezng";a:2:{i:0;R:8;i:1;R:9;}s:30:"1230:nppbhagf-reebef.qrszvaznk";a:2:{i:0;R:8;i:1;R:9;}s:27:"1230:nppbhagf-reebef.qbhoyr";a:2:{i:0;R:8;i:1;R:9;}s:31:"1230:nppbhagf-reebef.shgherqngr";a:2:{i:0;R:8;i:1;R:9;}s:53:"1230:nppbhagf-reebef.cnlzrag.qngr.orsber.ynfg.cnlzrag";a:2:{i:0;R:8;i:1;R:9;}s:28:"1230:nppbhagf-reebef.trarevp";a:2:{i:0;R:8;i:1;R:9;}s:28:"1230:nppbhagf-reebef.vagrtre";a:2:{i:0;R:8;i:1;R:9;}s:35:"1230:nppbhagf-reebef.vainyvqgkaqngr";a:2:{i:0;R:8;i:1;R:9;}s:53:"1230:nppbhagf-reebef.vainyvqgkaqngrzbagunyernqlpybfrq";a:2:{i:0;R:8;i:1;R:9;}s:32:"1230:nppbhagf-reebef.vainyvqqngr";a:2:{i:0;R:8;i:1;R:9;}s:32:"1230:nppbhagf-reebef.znxrcnlzrag";a:2:{i:0;R:8;i:1;R:9;}s:30:"1230:nppbhagf-reebef.znaqngbel";a:2:{i:0;R:8;i:1;R:9;}s:38:"1230:nppbhagf-reebef.znaqngbel_grkgobk";a:2:{i:0;R:8;i:1;R:9;}s:38:"1230:nppbhagf-reebef.znaqngbelpurpxobk";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-reebef.znaqngbelfryrpg";a:2:{i:0;R:8;i:1;R:9;}s:38:"1230:nppbhagf-reebef.znaqngbelgrkgnern";a:2:{i:0;R:8;i:1;R:9;}s:25:"1230:nppbhagf-reebef.znfx";a:2:{i:0;R:8;i:1;R:9;}s:27:"1230:nppbhagf-reebef.znkzva";a:2:{i:0;R:8;i:1;R:9;}s:34:"1230:nppbhagf-reebef.znkvzhzyratgu";a:2:{i:0;R:8;i:1;R:9;}s:34:"1230:nppbhagf-reebef.zvavzhzyratgu";a:2:{i:0;R:8;i:1;R:9;}s:42:"1230:nppbhagf-reebef.zhfgorterngregunamreb";a:2:{i:0;R:8;i:1;R:9;}s:30:"1230:nppbhagf-reebef.abzrrgvat";a:2:{i:0;R:8;i:1;R:9;}s:39:"1230:nppbhagf-reebef.abzbervafgnyyzragf";a:2:{i:0;R:8;i:1;R:9;}s:35:"1230:nppbhagf-reebef.abfrnepufgevat";a:2:{i:0;R:8;i:1;R:9;}s:36:"1230:nppbhagf-reebef.cnlzragzvfzngpu";a:2:{i:0;R:8;i:1;R:9;}s:27:"1230:nppbhagf-reebef.cersvk";a:2:{i:0;R:8;i:1;R:9;}s:34:"1230:nppbhagf-reebef.engrrkprcgvba";a:2:{i:0;R:8;i:1;R:9;}s:35:"1230:nppbhagf-reebef.fryrpgnalinyhr";a:2:{i:0;R:8;i:1;R:9;}s:27:"1230:nppbhagf-reebef.fhssvk";a:2:{i:0;R:8;i:1;R:9;}s:52:"1230:nppbhagf-reebef.vainyvq_nzbhag_nppbeqvat_gb_qhr";a:2:{i:0;R:8;i:1;R:9;}s:31:"1230:nppbhagf-reebef.harkcrpgrq";a:2:{i:0;R:8;i:1;R:9;}s:66:"1230:nppbhagf-rkprcgvba.nppbhagf.nccyvpngvbarkprcgvba.pnaabgnqwhfg";a:2:{i:0;R:8;i:1;R:9;}s:80:"1230:nppbhagf-rkprcgvba.nppbhagf.nccyvpngvbarkprcgvba.svaqoltybonynppagrkprcgvba";a:2:{i:0;R:8;i:1;R:9;}s:72:"1230:nppbhagf-rkprcgvba.nppbhagf.nccyvpngvbarkprcgvba.mrebnzagnqwhfgzarg";a:2:{i:0;R:8;i:1;R:9;}s:48:"1230:nppbhagf-rkprcgvba.nppbhagf.pnagnccylpunetr";a:2:{i:0;R:8;i:1;R:9;}s:45:"1230:nppbhagf-rkprcgvba.nppbhagf.pnagnccylsrr";a:2:{i:0;R:8;i:1;R:9;}s:46:"1230:nppbhagf-rkprcgvba.nppbhagf.pnagerzbirsrr";a:2:{i:0;R:8;i:1;R:9;}s:50:"1230:nppbhagf-rkprcgvba.nppbhagf.pnagerzbircranygl";a:2:{i:0;R:8;i:1;R:9;}s:39:"1230:nppbhagf-rkprcgvba.nppbhagf.perngr";a:2:{i:0;R:8;i:1;R:9;}s:57:"1230:nppbhagf-rkprcgvba.nppbhagf.perngr.phfgbzre.vanpgvir";a:2:{i:0;R:8;i:1;R:9;}s:52:"1230:nppbhagf-rkprcgvba.nppbhagf.perngr.ceq.vanpgvir";a:2:{i:0;R:8;i:1;R:9;}s:33:"1230:nppbhagf-ybnarqvg_npp_fgnghf";a:2:{i:0;R:8;i:1;R:9;}s:44:"1230:nppbhagf-pnaabg.ivrj.ercnlzrag.fpurqhyr";a:2:{i:0;R:8;i:1;R:9;}s:26:"1230:nq-nppbhag.nqqarjabgr";a:2:{i:0;s:12:"out-mifos-ad";i:1;R:9;}s:23:"1230:nq-nppbhag.nqqabgr";a:2:{i:0;R:25601;i:1;R:9;}s:21:"1230:nq-nppbhag.nqzva";a:2:{i:0;R:25601;i:1;R:9;}s:40:"1230:nq-nppbhag.pyvpxpnaprygbqrgnvyfcntr";a:2:{i:0;R:25601;i:1;R:9;}s:28:"1230:nq-nppbhag.pyvpxcerivrj";a:2:{i:0;R:25601;i:1;R:9;}s:20:"1230:nq-nppbhag.rqvg";a:2:{i:0;R:25601;i:1;R:9;}s:25:"1230:nq-nppbhag.rqvgynory";a:2:{i:0;R:25601;i:1;R:9;}s:26:"1230:nq-nppbhag.ragrenabgr";a:2:{i:0;R:25601;i:1;R:9;}s:20:"1230:nq-nppbhag.abgr";a:2:{i:0;R:25601;i:1;R:9;}s:25:"1230:nq-nppbhag.abgrynory";a:2:{i:0;R:25601;i:1;R:9;}s:21:"1230:nq-nppbhag.abgrf";a:2:{i:0;R:25601;i:1;R:9;}s:27:"1230:nq-nppbhag.cerivrjabgr";a:2:{i:0;R:25601;i:1;R:9;}s:26:"1230:nq-nppbhag.erivrjgrkg";a:2:{i:0;R:25601;i:1;R:9;}s:29:"1230:nq-nppbhag.fgnghfuvfgbel";a:2:{i:0;R:25601;i:1;R:9;}s:22:"1230:nq-nppbhag.fhozvg";a:2:{i:0;R:25601;i:1;R:9;}s:29:"1230:nq-nppbhag.ivrjrqvghfref";a:2:{i:0;R:25601;i:1;R:9;}s:25:"1230:nq-nppbhag.ivrjhfref";a:2:{i:0;R:25601;i:1;R:9;}s:38:"1230:nq-nppbhag.ergheagbnppbhagqrgnvyf";a:2:{i:0;R:25601;i:1;R:9;}s:23:"1230:nq-nqwhfgzragabgrf";a:2:{i:0;R:25601;i:1;R:9;}s:14:"1230:nq-nzbhag";a:2:{i:0;R:25601;i:1;R:9;}s:15:"1230:nq-onynapr";a:2:{i:0;R:25601;i:1;R:9;}s:18:"1230:nq-pyvraganzr";a:2:{i:0;R:25601;i:1;R:9;}s:14:"1230:nq-perqvg";a:2:{i:0;R:25601;i:1;R:9;}s:12:"1230:nq-qngr";a:2:{i:0;R:25601;i:1;R:9;}s:18:"1230:nq-qngrcbfgrq";a:2:{i:0;R:25601;i:1;R:9;}s:13:"1230:nq-qrovg";a:2:{i:0;R:25601;i:1;R:9;}s:19:"1230:nq-qrfpevcgvba";a:2:{i:0;R:25601;i:1;R:9;}s:14:"1230:nq-typbqr";a:2:{i:0;R:25601;i:1;R:9;}s:17:"1230:nq-arjfgnghf";a:2:{i:0;R:25601;i:1;R:9;}s:17:"1230:nq-byqfgnghf";a:2:{i:0;R:25601;i:1;R:9;}s:17:"1230:nq-cnlzragvq";a:2:{i:0;R:25601;i:1;R:9;}s:16:"1230:nq-cbfgrqol";a:2:{i:0;R:25601;i:1;R:9;}s:21:"1230:nq-genafnpgvbavq";a:2:{i:0;R:25601;i:1;R:9;}s:12:"1230:nq-glcr";a:2:{i:0;R:25601;i:1;R:9;}s:12:"1230:nq-hfre";a:2:{i:0;R:25601;i:1;R:9;}s:22:"1230:nq-nppbhag.nzbhag";a:2:{i:0;R:25601;i:1;R:9;}s:27:"1230:nq-nppbhag.nzbhag_mreb";a:2:{i:0;R:25601;i:1;R:9;}s:26:"1230:nq-nppbhag.punetrglcr";a:2:{i:0;R:25601;i:1;R:9;}s:24:"1230:nq-nppbhagf.nppbhag";a:2:{i:0;R:25601;i:1;R:9;}s:29:"1230:nq-nppbhagf.purpxyvfgzft";a:2:{i:0;R:25601;i:1;R:9;}s:29:"1230:nq-nppbhagf.pyvpxpnapry1";a:2:{i:0;R:25601;i:1;R:9;}s:29:"1230:nq-nppbhagf.pyvpxpnapry2";a:2:{i:0;R:25601;i:1;R:9;}s:30:"1230:nq-nppbhagf.pyvpxpbagvahr";a:2:{i:0;R:25601;i:1;R:9;}s:28:"1230:nq-nppbhagf.pyvpxfhozvg";a:2:{i:0;R:25601;i:1;R:9;}s:36:"1230:nq-nppbhagf.pbasvezfgnghfpunatr";a:2:{i:0;R:25601;i:1;R:9;}s:27:"1230:nq-nppbhagf.rqvgfgnghf";a:2:{i:0;R:25601;i:1;R:9;}s:26:"1230:nq-nppbhagf.arjfgnghf";a:2:{i:0;R:25601;i:1;R:9;}s:28:"1230:nq-nppbhagf.abpurpxyvfg";a:2:{i:0;R:25601;i:1;R:9;}s:33:"1230:nq-nppbhagf.absyntfninvynoyr";a:2:{i:0;R:25601;i:1;R:9;}s:33:"1230:nq-nppbhagf.ababgrfninvynoyr";a:2:{i:0;R:25601;i:1;R:9;}s:26:"1230:nq-nppbhagf.byqfgnghf";a:2:{i:0;R:25601;i:1;R:9;}s:33:"1230:nq-nppbhagf.fry_pyvrag/tebhc";a:2:{i:0;R:25601;i:1;R:9;}s:32:"1230:nq-nppbhagf.fryrpgnphfgbzre";a:2:{i:0;R:25601;i:1;R:9;}s:31:"1230:nq-nppbhagf.fryrpgphfgbzre";a:2:{i:0;R:25601;i:1;R:9;}s:36:"1230:nq-nppbhagf.fryrpgrkcynvangvba1";a:2:{i:0;R:25601;i:1;R:9;}s:36:"1230:nq-nppbhagf.fryrpgrkcynvangvba2";a:2:{i:0;R:25601;i:1;R:9;}s:29:"1230:nq-nppbhagf.fryrpgfgnghf";a:2:{i:0;R:25601;i:1;R:9;}s:28:"1230:nq-nppbhagf.npp_qrgnvyf";a:2:{i:0;R:25601;i:1;R:9;}s:25:"1230:nq-nppbhagf.npp_vasb";a:2:{i:0;R:25601;i:1;R:9;}s:26:"1230:nq-nppbhagf.npp_bjare";a:2:{i:0;R:25601;i:1;R:9;}s:30:"1230:nq-nppbhagf.npp_fgngrzrag";a:2:{i:0;R:25601;i:1;R:9;}s:28:"1230:nq-nppbhagf.npp_fhzznel";a:2:{i:0;R:25601;i:1;R:9;}s:25:"1230:nq-nppbhagf.npgvivgl";a:2:{i:0;R:25601;i:1;R:9;}s:25:"1230:nq-nppbhagf.nqq_abgr";a:2:{i:0;R:25601;i:1;R:9;}s:27:"1230:nq-nppbhagf.nqqarjabgr";a:2:{i:0;R:25601;i:1;R:9;}s:24:"1230:nq-nppbhagf.nqqabgr";a:2:{i:0;R:25601;i:1;R:9;}s:34:"1230:nq-nppbhagf.nqwhfgzrag_qrgnvy";a:2:{i:0;R:25601;i:1;R:9;}s:31:"1230:nq-nppbhagf.nqzva_frg_srrf";a:2:{i:0;R:25601;i:1;R:9;}s:21:"1230:nq-nppbhagf.nteb";a:2:{i:0;R:25601;i:1;R:9;}s:26:"1230:nq-nppbhagf.nteb_ybna";a:2:{i:0;R:25601;i:1;R:9;}s:31:"1230:nq-nppbhagf.nyybjrq_nzbhag";a:2:{i:0;R:25601;i:1;R:9;}s:33:"1230:nq-nppbhagf.nyybjrq_vagrerfg";a:2:{i:0;R:25601;i:1;R:9;}s:35:"1230:nq-nppbhagf.nyybjrq_ab_bs_vafg";a:2:{i:0;R:25601;i:1;R:9;}s:35:"1230:nq-nppbhagf.nzag_gbor_nqwhfgrq";a:2:{i:0;R:25601;i:1;R:9;}s:23:"1230:nq-nppbhagf.nzbhag";a:2:{i:0;R:25601;i:1;R:9;}s:28:"1230:nq-nppbhagf.nzbhag(hfq)";a:2:{i:0;R:25601;i:1;R:9;}s:28:"1230:nq-nppbhagf.nzbhag_(ef)";a:2:{i:0;R:25601;i:1;R:9;}s:27:"1230:nq-nppbhagf.nzbhag_qhr";a:2:{i:0;R:25601;i:1;R:9;}s:20:"1230:nq-nppbhagf.nzg";a:2:{i:0;R:25601;i:1;R:9;}s:25:"1230:nq-nppbhagf.nzg_cnvq";a:2:{i:0;R:25601;i:1;R:9;}s:33:"1230:nq-nppbhagf.nagv_qvfohefr_qq";a:2:{i:0;R:25601;i:1;R:9;}s:24:"1230:nq-nppbhagf.ncc_srr";a:2:{i:0;R:25601;i:1;R:9;}s:28:"1230:nq-nppbhagf.ncc_srr_nzg";a:2:{i:0;R:25601;i:1;R:9;}s:26:"1230:nq-nppbhagf.nccy_srrf";a:2:{i:0;R:25601;i:1;R:9;}s:31:"1230:nq-nppbhagf.nccyl_nqq_srrf";a:2:{i:0;R:25601;i:1;R:9;}s:33:"1230:nq-nppbhagf.nccyl_nqwhfgzrag";a:2:{i:0;R:25601;i:1;R:9;}s:30:"1230:nq-nppbhagf.nccyl_punetrf";a:2:{i:0;R:25601;i:1;R:9;}s:30:"1230:nq-nppbhagf.nccyl_cnlzrag";a:2:{i:0;R:25601;i:1;R:9;}s:28:"1230:nq-nppbhagf.nccyl_genaf";a:2:{i:0;R:25601;i:1;R:9;}s:32:"1230:nq-nppbhagf.nccylnqwhfgzrag";a:2:{i:0;R:25601;i:1;R:9;}s:25:"1230:nq-nppbhagf.nccebirq";a:2:{i:0;R:25601;i:1;R:9;}s:20:"1230:nq-nppbhagf.nce";a:2:{i:0;R:25601;i:1;R:9;}s:25:"1230:nq-nppbhagf.nfgrevfx";a:2:{i:0;R:25601;i:1;R:9;}s:30:"1230:nq-nppbhagf.onpxgbpunetrf";a:2:{i:0;R:25601;i:1;R:9;}s:24:"1230:nq-nppbhagf.onynapr";a:2:{i:0;R:25601;i:1;R:9;}s:36:"1230:nq-nppbhagf.onynapr_ng_qvfohefr";a:2:{i:0;R:25601;i:1;R:9;}s:26:"1230:nq-nppbhagf.oenapu-01";a:2:{i:0;R:25601;i:1;R:9;}s:37:"1230:nq-nppbhagf.oga_erivrjnqwhfgzrag";a:2:{i:0;R:25601;i:1;R:9;}s:34:"1230:nq-nppbhagf.ohfvarff_jbex_npg";a:2:{i:0;R:25601;i:1;R:9;}s:23:"1230:nq-nppbhagf.pnapry";a:2:{i:0;R:25601;i:1;R:9;}s:28:"1230:nq-nppbhagf.pnggyr_ybna";a:2:{i:0;R:25601;i:1;R:9;}s:30:"1230:nq-nppbhagf.pragrepunetrf";a:2:{i:0;R:25601;i:1;R:9;}s:27:"1230:nq-nppbhagf.punatr_ybt";a:2:{i:0;R:25601;i:1;R:9;}s:29:"1230:nq-nppbhagf.punatrfgnghf";a:2:{i:0;R:25601;i:1;R:9;}s:24:"1230:nq-nppbhagf.punetrq";a:2:{i:0;R:25601;i:1;R:9;}s:32:"1230:nq-nppbhagf.punetrq_nccyvrq";a:2:{i:0;R:25601;i:1;R:9;}s:24:"1230:nq-nppbhagf.punetrf";a:2:{i:0;R:25601;i:1;R:9;}s:29:"1230:nq-nppbhagf.purpx_erzbir";a:2:{i:0;R:25601;i:1;R:9;}s:37:"1230:nq-nppbhagf.pux_erireg_ynfg_czag";a:2:{i:0;R:25601;i:1;R:9;}s:34:"1230:nq-nppbhagf.pyvrag/tebhc_anzr";a:2:{i:0;R:25601;i:1;R:9;}s:30:"1230:nq-nppbhagf.pyvragpunetrf";a:2:{i:0;R:25601;i:1;R:9;}s:32:"1230:nq-nppbhagf.pbyy_furrg_glcr";a:2:{i:0;R:25601;i:1;R:9;}s:33:"1230:nq-nppbhagf.pbyyngreny_abgrf";a:2:{i:0;R:25601;i:1;R:9;}s:32:"1230:nq-nppbhagf.pbyyngreny_glcr";a:2:{i:0;R:25601;i:1;R:9;}s:31:"1230:nq-nppbhagf.pbyyngrenyabgr";a:2:{i:0;R:25601;i:1;R:9;}s:22:"1230:nq-nppbhagf.pbyba";a:2:{i:0;R:25601;i:1;R:9;}s:31:"1230:nq-nppbhagf.pbzcyrgr_svryq";a:2:{i:0;R:25601;i:1;R:9;}s:22:"1230:nq-nppbhagf.pbatb";a:2:{i:0;R:25601;i:1;R:9;}s:32:"1230:nq-nppbhagf.pbafhygnapl_srr";a:2:{i:0;R:25601;i:1;R:9;}s:25:"1230:nq-nppbhagf.pbagvahr";a:2:{i:0;R:25601;i:1;R:9;}s:23:"1230:nq-nppbhagf.perngr";a:2:{i:0;R:25601;i:1;R:9;}s:32:"1230:nq-nppbhagf.perngr_ybna_npp";a:2:{i:0;R:25601;i:1;R:9;}s:23:"1230:nq-nppbhagf.perqvg";a:2:{i:0;R:25601;i:1;R:9;}s:30:"1230:nq-nppbhagf.pheeragfgnghf";a:2:{i:0;R:25601;i:1;R:9;}s:21:"1230:nq-nppbhagf.qngr";a:2:{i:0;R:25601;i:1;R:9;}s:29:"1230:nq-nppbhagf.qngr_bs_geka";a:2:{i:0;R:25601;i:1;R:9;}s:26:"1230:nq-nppbhagf.qngr_cnvq";a:2:{i:0;R:25601;i:1;R:9;}s:28:"1230:nq-nppbhagf.qngr_cbfgrq";a:2:{i:0;R:25601;i:1;R:9;}s:30:"1230:nq-nppbhagf.qngrbscnlzrag";a:2:{i:0;R:25601;i:1;R:9;}s:29:"1230:nq-nppbhagf.qnlf_neernef";a:2:{i:0;R:25601;i:1;R:9;}s:22:"1230:nq-nppbhagf.qrovg";a:2:{i:0;R:25601;i:1;R:9;}s:23:"1230:nq-nppbhagf.qrsnzg";a:2:{i:0;R:25601;i:1;R:9;}s:24:"1230:nq-nppbhagf.qrsvafg";a:2:{i:0;R:25601;i:1;R:9;}s:27:"1230:nq-nppbhagf.qrsvagengr";a:2:{i:0;R:25601;i:1;R:9;}s:28:"1230:nq-nppbhagf.qryvadhrapl";a:2:{i:0;R:25601;i:1;R:9;}s:21:"1230:nq-nppbhagf.qrfp";a:2:{i:0;R:25601;i:1;R:9;}s:28:"1230:nq-nppbhagf.qrfpevcgvba";a:2:{i:0;R:25601;i:1;R:9;}s:25:"1230:nq-nppbhagf.qvf_qngr";a:2:{i:0;R:25601;i:1;R:9;}s:25:"1230:nq-nppbhagf.qhr_qngr";a:2:{i:0;R:25601;i:1;R:9;}s:30:"1230:nq-nppbhagf.rqvg_npp_vasb";a:2:{i:0;R:25601;i:1;R:9;}s:26:"1230:nq-nppbhagf.rqvg_vasb";a:2:{i:0;R:25601;i:1;R:9;}s:30:"1230:nq-nppbhagf.rqvg_ybna_npp";a:2:{i:0;R:25601;i:1;R:9;}s:26:"1230:nq-nppbhagf.rqvggenaf";a:2:{i:0;R:25601;i:1;R:9;}s:25:"1230:nq-nppbhagf.rqvggeka";a:2:{i:0;R:25601;i:1;R:9;}s:25:"1230:nq-nppbhagf.rqh_ybna";a:2:{i:0;R:25601;i:1;R:9;}s:38:"1230:nq-nppbhagf.ragre_pyvrag_qrgnvyf1";a:2:{i:0;R:25601;i:1;R:9;}s:38:"1230:nq-nppbhagf.ragre_pyvrag_qrgnvyf2";a:2:{i:0;R:25601;i:1;R:9;}s:35:"1230:nq-nppbhagf.ragre_ybna_nppvasb";a:2:{i:0;R:25601;i:1;R:9;}s:27:"1230:nq-nppbhagf.ragre_abgr";a:2:{i:0;R:25601;i:1;R:9;}s:28:"1230:nq-nppbhagf.ragrenzbhag";a:2:{i:0;R:25601;i:1;R:9;}s:24:"1230:nq-nppbhagf.srr_nzg";a:2:{i:0;R:25601;i:1;R:9;}s:23:"1230:nq-nppbhagf.srr_cq";a:2:{i:0;R:25601;i:1;R:9;}s:24:"1230:nq-nppbhagf.srr_erp";a:2:{i:0;R:25601;i:1;R:9;}s:25:"1230:nq-nppbhagf.srr_glcr";a:2:{i:0;R:25601;i:1;R:9;}s:21:"1230:nq-nppbhagf.srrf";a:2:{i:0;R:25601;i:1;R:9;}s:22:"1230:nq-nppbhagf.svryq";a:2:{i:0;R:25601;i:1;R:9;}s:27:"1230:nq-nppbhagf.svfu_cbaqf";a:2:{i:0;R:25601;i:1;R:9;}s:29:"1230:nq-nppbhagf.serd_bs_vafg";a:2:{i:0;R:25601;i:1;R:9;}s:31:"1230:nq-nppbhagf.shgher_vafgnyy";a:2:{i:0;R:25601;i:1;R:9;}s:32:"1230:nq-nppbhagf.trarengr_ercbeg";a:2:{i:0;R:25601;i:1;R:9;}s:29:"1230:nq-nppbhagf.tenpr_crevbq";a:2:{i:0;R:25601;i:1;R:9;}s:34:"1230:nq-nppbhagf.tenpr_crevbq_glcr";a:2:{i:0;R:25601;i:1;R:9;}s:28:"1230:nq-nppbhagf.tenprcreqhe";a:2:{i:0;R:25601;i:1;R:9;}s:29:"1230:nq-nppbhagf.tebhcpunetrf";a:2:{i:0;R:25601;i:1;R:9;}s:34:"1230:nq-nppbhagf.ubcr&rssbeg_tebhc";a:2:{i:0;R:25601;i:1;R:9;}s:29:"1230:nq-nppbhagf.ubegvphygher";a:2:{i:0;R:25601;i:1;R:9;}s:21:"1230:nq-nppbhagf.vafg";a:2:{i:0;R:25601;i:1;R:9;}s:29:"1230:nq-nppbhagf.vafgnyy_cnvq";a:2:{i:0;R:25601;i:1;R:9;}s:36:"1230:nq-nppbhagf.vafgnyyzrag_qrgnvyf";a:2:{i:0;R:25601;i:1;R:9;}s:29:"1230:nq-nppbhagf.vafgnyyzragf";a:2:{i:0;R:25601;i:1;R:9;}s:30:"1230:nq-nppbhagf.vafgnapr_vasb";a:2:{i:0;R:25601;i:1;R:9;}s:30:"1230:nq-nppbhagf.vafgnapr_anzr";a:2:{i:0;R:25601;i:1;R:9;}s:26:"1230:nq-nppbhagf.vafgg_qhr";a:2:{i:0;R:25601;i:1;R:9;}s:27:"1230:nq-nppbhagf.vafgg_cnvq";a:2:{i:0;R:25601;i:1;R:9;}s:25:"1230:nq-nppbhagf.vagrerfg";a:2:{i:0;R:25601;i:1;R:9;}s:32:"1230:nq-nppbhagf.vagrerfg_nzbhag";a:2:{i:0;R:25601;i:1;R:9;}s:38:"1230:nq-nppbhagf.vagrerfg_pny_cnlzragf";a:2:{i:0;R:25601;i:1;R:9;}s:30:"1230:nq-nppbhagf.vagrerfg_qvfo";a:2:{i:0;R:25601;i:1;R:9;}s:30:"1230:nq-nppbhagf.vagrerfg_engr";a:2:{i:0;R:25601;i:1;R:9;}s:30:"1230:nq-nppbhagf.vagrerfg_glcr";a:2:{i:0;R:25601;i:1;R:9;}s:25:"1230:nq-nppbhagf.vage_erp";a:2:{i:0;R:25601;i:1;R:9;}s:24:"1230:nq-nppbhagf.vagengr";a:2:{i:0;R:25601;i:1;R:9;}s:28:"1230:nq-nppbhagf.vagengrglcr";a:2:{i:0;R:25601;i:1;R:9;}s:33:"1230:nq-nppbhagf.xnanxchen_pragre";a:2:{i:0;R:25601;i:1;R:9;}s:26:"1230:nq-nppbhagf.ynfg_czag";a:2:{i:0;R:25601;i:1;R:9;}s:28:"1230:nq-nppbhagf.ybna_nzbhag";a:2:{i:0;R:25601;i:1;R:9;}s:29:"1230:nq-nppbhagf.ybna_onynapr";a:2:{i:0;R:25601;i:1;R:9;}s:29:"1230:nq-nppbhagf.ybnavafganzr";a:2:{i:0;R:25601;i:1;R:9;}s:32:"1230:nq-nppbhagf.znvagranapr_srr";a:2:{i:0;R:25601;i:1;R:9;}s:30:"1230:nq-nppbhagf.znghevgl_qngr";a:2:{i:0;R:25601;i:1;R:9;}s:24:"1230:nq-nppbhagf.znkvafg";a:2:{i:0;R:25601;i:1;R:9;}s:27:"1230:nq-nppbhagf.znkvagengr";a:2:{i:0;R:25601;i:1;R:9;}s:27:"1230:nq-nppbhagf.znkybnanzg";a:2:{i:0;R:25601;i:1;R:9;}s:32:"1230:nq-nppbhagf.zrrgvat_punetrf";a:2:{i:0;R:25601;i:1;R:9;}s:31:"1230:nq-nppbhagf.zrzore_srr_nzg";a:2:{i:0;R:25601;i:1;R:9;}s:31:"1230:nq-nppbhagf.zrzorefuvc_srr";a:2:{i:0;R:25601;i:1;R:9;}s:24:"1230:nq-nppbhagf.zvavafg";a:2:{i:0;R:25601;i:1;R:9;}s:27:"1230:nq-nppbhagf.zvavagengr";a:2:{i:0;R:25601;i:1;R:9;}s:27:"1230:nq-nppbhagf.zvaybnanzg";a:2:{i:0;R:25601;i:1;R:9;}s:32:"1230:nq-nppbhagf.zvffrq_cnlzragf";a:2:{i:0;R:25601;i:1;R:9;}s:32:"1230:nq-nppbhagf.zbqr_bs_cnlzrag";a:2:{i:0;R:25601;i:1;R:9;}s:30:"1230:nq-nppbhagf.zbqrbscnlzrag";a:2:{i:0;R:25601;i:1;R:9;}s:20:"1230:nq-nppbhagf.zba";a:2:{i:0;R:25601;i:1;R:9;}s:29:"1230:nq-nppbhagf.zber_qrgnvyf";a:2:{i:0;R:25601;i:1;R:9;}s:21:"1230:nq-nppbhagf.anzr";a:2:{i:0;R:25601;i:1;R:9;}s:27:"1230:nq-nppbhagf.arj_fgnghf";a:2:{i:0;R:25601;i:1;R:9;}s:24:"1230:nq-nppbhagf.arj_iny";a:2:{i:0;R:25601;i:1;R:9;}s:26:"1230:nq-nppbhagf.arkg_vafg";a:2:{i:0;R:25601;i:1;R:9;}s:30:"1230:nq-nppbhagf.arkg_vafg_qhr";a:2:{i:0;R:25601;i:1;R:9;}s:37:"1230:nq-nppbhagf.arkg_vafgnyy_qrgnvyf";a:2:{i:0;R:25601;i:1;R:9;}s:34:"1230:nq-nppbhagf.avrj_npp_npgvivgl";a:2:{i:0;R:25601;i:1;R:9;}s:19:"1230:nq-nppbhagf.ab";a:2:{i:0;R:25601;i:1;R:9;}s:27:"1230:nq-nppbhagf.ab_bs_vafg";a:2:{i:0;R:25601;i:1;R:9;}s:21:"1230:nq-nppbhagf.abgr";a:2:{i:0;R:25601;i:1;R:9;}s:22:"1230:nq-nppbhagf.abgrf";a:2:{i:0;R:25601;i:1;R:9;}s:28:"1230:nq-nppbhagf.bs_cnlzragf";a:2:{i:0;R:25601;i:1;R:9;}s:27:"1230:nq-nppbhagf.byq_fgnghf";a:2:{i:0;R:25601;i:1;R:9;}s:24:"1230:nq-nppbhagf.byq_iny";a:2:{i:0;R:25601;i:1;R:9;}s:28:"1230:nq-nppbhagf.bapr_20qnlf";a:2:{i:0;R:25601;i:1;R:9;}s:29:"1230:nq-nppbhagf.bcra_arj_npp";a:2:{i:0;R:25601;i:1;R:9;}s:35:"1230:nq-nppbhagf.bcra_arj_vafhe_npp";a:2:{i:0;R:25601;i:1;R:9;}s:34:"1230:nq-nppbhagf.bcra_arj_ybna_npp";a:2:{i:0;R:25601;i:1;R:9;}s:33:"1230:nq-nppbhagf.bcra_arj_fni_npp";a:2:{i:0;R:25601;i:1;R:9;}s:19:"1230:nq-nppbhagf.be";a:2:{i:0;R:25601;i:1;R:9;}s:30:"1230:nq-nppbhagf.bevtvany_ybna";a:2:{i:0;R:25601;i:1;R:9;}s:25:"1230:nq-nppbhagf.cnfg_qhr";a:2:{i:0;R:25601;i:1;R:9;}s:33:"1230:nq-nppbhagf.cnfg_qhr_qrgnvyf";a:2:{i:0;R:25601;i:1;R:9;}s:24:"1230:nq-nppbhagf.cnlzrag";a:2:{i:0;R:25601;i:1;R:9;}s:27:"1230:nq-nppbhagf.cnlzrag_vq";a:2:{i:0;R:25601;i:1;R:9;}s:24:"1230:nq-nppbhagf.cranygl";a:2:{i:0;R:25601;i:1;R:9;}s:27:"1230:nq-nppbhagf.cranygl_01";a:2:{i:0;R:25601;i:1;R:9;}s:27:"1230:nq-nppbhagf.cranygl_02";a:2:{i:0;R:25601;i:1;R:9;}s:29:"1230:nq-nppbhagf.cranygl_glcr";a:2:{i:0;R:25601;i:1;R:9;}s:36:"1230:nq-nppbhagf.cresbeznapr_uvfgbel";a:2:{i:0;R:25601;i:1;R:9;}s:39:"1230:nq-nppbhagf.crevbqvpvgl_naahny_srr";a:2:{i:0;R:25601;i:1;R:9;}s:41:"1230:nq-nppbhagf.crevbqvpvgl_bar_gvzr_srr";a:2:{i:0;R:25601;i:1;R:9;}s:25:"1230:nq-nppbhagf.cym_abgr";a:2:{i:0;R:25601;i:1;R:9;}s:26:"1230:nq-nppbhagf.cbfgrq_ol";a:2:{i:0;R:25601;i:1;R:9;}s:29:"1230:nq-nppbhagf.cbhygel_snez";a:2:{i:0;R:25601;i:1;R:9;}s:22:"1230:nq-nppbhagf.ce_cq";a:2:{i:0;R:25601;i:1;R:9;}s:31:"1230:nq-nppbhagf.ceqbssrevatiny";a:2:{i:0;R:25601;i:1;R:9;}s:24:"1230:nq-nppbhagf.cerivrj";a:2:{i:0;R:25601;i:1;R:9;}s:32:"1230:nq-nppbhagf.cerivrj_nppvasb";a:2:{i:0;R:25601;i:1;R:9;}s:26:"1230:nq-nppbhagf.cevapvcny";a:2:{i:0;R:25601;i:1;R:9;}s:30:"1230:nq-nppbhagf.cevapvcyr_qhr";a:2:{i:0;R:25601;i:1;R:9;}s:32:"1230:nq-nppbhagf.cebqhpg_fhzznel";a:2:{i:0;R:25601;i:1;R:9;}s:30:"1230:nq-nppbhagf.cebcbfrq_qngr";a:2:{i:0;R:25601;i:1;R:9;}s:34:"1230:nq-nppbhagf.erp_perngvba_qngr";a:2:{i:0;R:25601;i:1;R:9;}s:28:"1230:nq-nppbhagf.erprvcgqngr";a:2:{i:0;R:25601;i:1;R:9;}s:26:"1230:nq-nppbhagf.erprvcgvq";a:2:{i:0;R:25601;i:1;R:9;}s:29:"1230:nq-nppbhagf.erprag_abgrf";a:2:{i:0;R:25601;i:1;R:9;}s:35:"1230:nq-nppbhagf.erpheevat_npp_srrf";a:2:{i:0;R:25601;i:1;R:9;}s:23:"1230:nq-nppbhagf.erzbir";a:2:{i:0;R:25601;i:1;R:9;}s:24:"1230:nq-nppbhagf.erzbirq";a:2:{i:0;R:25601;i:1;R:9;}s:32:"1230:nq-nppbhagf.ercnlzrag_fpurq";a:2:{i:0;R:25601;i:1;R:9;}s:39:"1230:nq-nppbhagf.ergheagbnppbhagqrgnvyf";a:2:{i:0;R:25601;i:1;R:9;}s:30:"1230:nq-nppbhagf.ergheaqrgnvyf";a:2:{i:0;R:25601;i:1;R:9;}s:23:"1230:nq-nppbhagf.erivrj";a:2:{i:0;R:25601;i:1;R:9;}s:28:"1230:nq-nppbhagf.erivrj&rqvg";a:2:{i:0;R:25601;i:1;R:9;}s:30:"1230:nq-nppbhagf.erivrj&fhozvg";a:2:{i:0;R:25601;i:1;R:9;}s:32:"1230:nq-nppbhagf.erivrj/rqvg_vaf";a:2:{i:0;R:25601;i:1;R:9;}s:40:"1230:nq-nppbhagf.erivrj_cnlzrag_fpurqhyr";a:2:{i:0;R:25601;i:1;R:9;}s:33:"1230:nq-nppbhagf.erivrjnqwhfgzrag";a:2:{i:0;R:25601;i:1;R:9;}s:40:"1230:nq-nppbhagf.erivrjnqwhfgzrag_qrgnvy";a:2:{i:0;R:25601;i:1;R:9;}s:34:"1230:nq-nppbhagf.erivrjgenafnpgvba";a:2:{i:0;R:25601;i:1;R:9;}s:28:"1230:nq-nppbhagf.ehaavat_ony";a:2:{i:0;R:25601;i:1;R:9;}s:29:"1230:nq-nppbhagf.fnirsbeyngre";a:2:{i:0;R:25601;i:1;R:9;}s:23:"1230:nq-nppbhagf.frnepu";a:2:{i:0;R:25601;i:1;R:9;}s:27:"1230:nq-nppbhagf.frnepu_sbe";a:2:{i:0;R:25601;i:1;R:9;}s:28:"1230:nq-nppbhagf.frrnyyabgrf";a:2:{i:0;R:25601;i:1;R:9;}s:32:"1230:nq-nppbhagf.fry_punetr_glcr";a:2:{i:0;R:25601;i:1;R:9;}s:30:"1230:nq-nppbhagf.fryrpg_pyvpx1";a:2:{i:0;R:25601;i:1;R:9;}s:30:"1230:nq-nppbhagf.fryrpg_pyvpx2";a:2:{i:0;R:25601;i:1;R:9;}s:30:"1230:nq-nppbhagf.fryrpg_pyvrag";a:2:{i:0;R:25601;i:1;R:9;}s:36:"1230:nq-nppbhagf.fryrpg_pyvrag/tebhc";a:2:{i:0;R:25601;i:1;R:9;}s:33:"1230:nq-nppbhagf.fryrpg_ybna_vafg";a:2:{i:0;R:25601;i:1;R:9;}s:28:"1230:nq-nppbhagf.fbhepr_shaq";a:2:{i:0;R:25601;i:1;R:9;}s:23:"1230:nq-nppbhagf.fgnghf";a:2:{i:0;R:25601;i:1;R:9;}s:30:"1230:nq-nppbhagf.fgnghf_npgvir";a:2:{i:0;R:25601;i:1;R:9;}s:31:"1230:nq-nppbhagf.fgnghf_uvfgbel";a:2:{i:0;R:25601;i:1;R:9;}s:23:"1230:nq-nppbhagf.fhozvg";a:2:{i:0;R:25601;i:1;R:9;}s:34:"1230:nq-nppbhagf.fhozvgsbenccebiny";a:2:{i:0;R:25601;i:1;R:9;}s:36:"1230:nq-nppbhagf.fhpprffshy_perngvba";a:2:{i:0;R:25601;i:1;R:9;}s:32:"1230:nq-nppbhagf.fhttrfgrq_fgrcf";a:2:{i:0;R:25601;i:1;R:9;}s:22:"1230:nq-nppbhagf.gbgny";a:2:{i:0;R:25601;i:1;R:9;}s:34:"1230:nq-nppbhagf.gbgny_qhr_vafgnyy";a:2:{i:0;R:25601;i:1;R:9;}s:29:"1230:nq-nppbhagf.genpgbe_ybna";a:2:{i:0;R:25601;i:1;R:9;}s:29:"1230:nq-nppbhagf.genvavat_srr";a:2:{i:0;R:25601;i:1;R:9;}s:31:"1230:nq-nppbhagf.genafnpgvba_vq";a:2:{i:0;R:25601;i:1;R:9;}s:31:"1230:nq-nppbhagf.genafp_uvfgbel";a:2:{i:0;R:25601;i:1;R:9;}s:29:"1230:nq-nppbhagf.gfhanzv_shaq";a:2:{i:0;R:25601;i:1;R:9;}s:21:"1230:nq-nppbhagf.glcr";a:2:{i:0;R:25601;i:1;R:9;}s:23:"1230:nq-nppbhagf.glcr_1";a:2:{i:0;R:25601;i:1;R:9;}s:23:"1230:nq-nppbhagf.glcr_2";a:2:{i:0;R:25601;i:1;R:9;}s:21:"1230:nq-nppbhagf.hfre";a:2:{i:0;R:25601;i:1;R:9;}s:32:"1230:nq-nppbhagf.ivrj_punatr_ybt";a:2:{i:0;R:25601;i:1;R:9;}s:34:"1230:nq-nppbhagf.ivrj_vafg_qrgnvyf";a:2:{i:0;R:25601;i:1;R:9;}s:30:"1230:nq-nppbhagf.ivrj_ybna_npp";a:2:{i:0;R:25601;i:1;R:9;}s:26:"1230:nq-nppbhagf.ivrj_fpuq";a:2:{i:0;R:25601;i:1;R:9;}s:36:"1230:nq-nppbhagf.ivrj_fgnghf_uvfgbel";a:2:{i:0;R:25601;i:1;R:9;}s:36:"1230:nq-nppbhagf.ivrj_genafp_uvfgbel";a:2:{i:0;R:25601;i:1;R:9;}s:22:"1230:nq-nppbhagf.jnvir";a:2:{i:0;R:25601;i:1;R:9;}s:20:"1230:nq-nppbhagf.lrf";a:2:{i:0;R:25601;i:1;R:9;}s:25:"1230:nq-reebe.nppbhagglcr";a:2:{i:0;R:25601;i:1;R:9;}s:26:"1230:nq-reebe.svyrabgsbhaq";a:2:{i:0;R:25601;i:1;R:9;}s:34:"1230:nq-reebe.npgvivgl.abg.nyybjrq";a:2:{i:0;R:25601;i:1;R:9;}s:18:"1230:nq-reebe.svyr";a:2:{i:0;R:25601;i:1;R:9;}s:33:"1230:nq-reebe.vapbzcyrgrpurpxyvfg";a:2:{i:0;R:25601;i:1;R:9;}s:37:"1230:nq-reebe.zvfppunetrabgnccyvpnoyr";a:2:{i:0;R:25601;i:1;R:9;}s:35:"1230:nq-reebe.abgenafnpgvbacbffvoyr";a:2:{i:0;R:25601;i:1;R:9;}s:42:"1230:nq-reebe.fgngrvavgvnyvmngvbarkprcgvba";a:2:{i:0;R:25601;i:1;R:9;}s:20:"1230:nq-reebe.fgnghf";a:2:{i:0;R:25601;i:1;R:9;}s:24:"1230:nq-reebe.fgnghfyvfg";a:2:{i:0;R:25601;i:1;R:9;}s:36:"1230:nq-reebe.fgnghfpunatrabgnyybjrq";a:2:{i:0;R:25601;i:1;R:9;}s:23:"1230:nq-reebe.gvgyranzr";a:2:{i:0;R:25601;i:1;R:9;}s:30:"1230:nq-reebe.haxabjarkprcgvba";a:2:{i:0;R:25601;i:1;R:9;}s:33:"1230:nq-reebe.irefvbaabqbabgzngpu";a:2:{i:0;R:25601;i:1;R:9;}s:35:"1230:nq-reebef.nqwhfgzragabgrgbbovt";a:2:{i:0;R:25601;i:1;R:9;}s:28:"1230:nq-reebef.qrpvznysbezng";a:2:{i:0;R:25601;i:1;R:9;}s:24:"1230:nq-reebef.qrszvaznk";a:2:{i:0;R:25601;i:1;R:9;}s:21:"1230:nq-reebef.qbhoyr";a:2:{i:0;R:25601;i:1;R:9;}s:25:"1230:nq-reebef.shgherqngr";a:2:{i:0;R:25601;i:1;R:9;}s:22:"1230:nq-reebef.vagrtre";a:2:{i:0;R:25601;i:1;R:9;}s:29:"1230:nq-reebef.vainyvqgkaqngr";a:2:{i:0;R:25601;i:1;R:9;}s:47:"1230:nq-reebef.vainyvqgkaqngrzbagunyernqlpybfrq";a:2:{i:0;R:25601;i:1;R:9;}s:26:"1230:nq-reebef.vainyvqqngr";a:2:{i:0;R:25601;i:1;R:9;}s:26:"1230:nq-reebef.znxrcnlzrag";a:2:{i:0;R:25601;i:1;R:9;}s:24:"1230:nq-reebef.znaqngbel";a:2:{i:0;R:25601;i:1;R:9;}s:32:"1230:nq-reebef.znaqngbel_grkgobk";a:2:{i:0;R:25601;i:1;R:9;}s:32:"1230:nq-reebef.znaqngbelpurpxobk";a:2:{i:0;R:25601;i:1;R:9;}s:30:"1230:nq-reebef.znaqngbelfryrpg";a:2:{i:0;R:25601;i:1;R:9;}s:32:"1230:nq-reebef.znaqngbelgrkgnern";a:2:{i:0;R:25601;i:1;R:9;}s:19:"1230:nq-reebef.znfx";a:2:{i:0;R:25601;i:1;R:9;}s:21:"1230:nq-reebef.znkzva";a:2:{i:0;R:25601;i:1;R:9;}s:28:"1230:nq-reebef.znkvzhzyratgu";a:2:{i:0;R:25601;i:1;R:9;}s:28:"1230:nq-reebef.zvavzhzyratgu";a:2:{i:0;R:25601;i:1;R:9;}s:24:"1230:nq-reebef.abzrrgvat";a:2:{i:0;R:25601;i:1;R:9;}s:33:"1230:nq-reebef.abzbervafgnyyzragf";a:2:{i:0;R:25601;i:1;R:9;}s:29:"1230:nq-reebef.abfrnepufgevat";a:2:{i:0;R:25601;i:1;R:9;}s:21:"1230:nq-reebef.cersvk";a:2:{i:0;R:25601;i:1;R:9;}s:28:"1230:nq-reebef.engrrkprcgvba";a:2:{i:0;R:25601;i:1;R:9;}s:29:"1230:nq-reebef.fryrpgnalinyhr";a:2:{i:0;R:25601;i:1;R:9;}s:21:"1230:nq-reebef.fhssvk";a:2:{i:0;R:25601;i:1;R:9;}s:25:"1230:nq-reebef.harkcrpgrq";a:2:{i:0;R:25601;i:1;R:9;}s:60:"1230:nq-rkprcgvba.nppbhagf.nccyvpngvbarkprcgvba.pnaabgnqwhfg";a:2:{i:0;R:25601;i:1;R:9;}s:74:"1230:nq-rkprcgvba.nppbhagf.nccyvpngvbarkprcgvba.svaqoltybonynppagrkprcgvba";a:2:{i:0;R:25601;i:1;R:9;}s:66:"1230:nq-rkprcgvba.nppbhagf.nccyvpngvbarkprcgvba.mrebnzagnqwhfgzarg";a:2:{i:0;R:25601;i:1;R:9;}s:33:"1230:nq-rkprcgvba.nppbhagf.perngr";a:2:{i:0;R:25601;i:1;R:9;}s:51:"1230:nq-rkprcgvba.nppbhagf.perngr.phfgbzre.vanpgvir";a:2:{i:0;R:25601;i:1;R:9;}s:46:"1230:nq-rkprcgvba.nppbhagf.perngr.ceq.vanpgvir";a:2:{i:0;R:25601;i:1;R:9;}s:27:"1230:nq-ybnarqvg_npp_fgnghf";a:2:{i:0;R:25601;i:1;R:9;}s:23:"1230:nqzva-nqzva.znantr";a:2:{i:0;s:15:"out-mifos-admin";i:1;R:9;}s:37:"1230:nqzva-nqzva.hcybnqnqzvaqbphzragf";a:2:{i:0;R:25953;i:1;R:9;}s:21:"1230:nqzva-nqzva.ivrj";a:2:{i:0;R:25953;i:1;R:9;}s:35:"1230:nqzva-nqzva.ivrjnqzvaqbphzragf";a:2:{i:0;R:25953;i:1;R:9;}s:36:"1230:nqzva-nqzva.ivrjercbegfpngrtbel";a:2:{i:0;R:25953;i:1;R:9;}s:37:"1230:nqzva-nqzva.ivrjercbegfgrzcyngrf";a:2:{i:0;R:25953;i:1;R:9;}s:25:"1230:nqzva-nqzva.nppbhagf";a:2:{i:0;R:25953;i:1;R:9;}s:27:"1230:nqzva-nqzva.nppbhagvat";a:2:{i:0;R:25953;i:1;R:9;}s:32:"1230:nqzva-nqzva.znantr.nppbhagf";a:2:{i:0;R:25953;i:1;R:9;}s:37:"1230:nqzva-nqzva.znantr.ybna.nppbhagf";a:2:{i:0;R:25953;i:1;R:9;}s:22:"1230:nqzva-nqzva.nqzva";a:2:{i:0;R:25953;i:1;R:9;}s:40:"1230:nqzva-nqzva.nqzvavfgengvirqbphzragf";a:2:{i:0;R:25953;i:1;R:9;}s:27:"1230:nqzva-nqzva.nqzvagnfxf";a:2:{i:0;R:25953;i:1;R:9;}s:31:"1230:nqzva-nqzva.ongpuwbof.yvax";a:2:{i:0;R:25953;i:1;R:9;}s:33:"1230:nqzva-nqzva.orybjvfguryvfgbs";a:2:{i:0;R:25953;i:1;R:9;}s:53:"1230:nqzva-nqzva.orybjvfyvfgbsnqzvavfgengvirqbphzragf";a:2:{i:0;R:25953;i:1;R:9;}s:25:"1230:nqzva-nqzva.pngrtbel";a:2:{i:0;R:25953;i:1;R:9;}s:29:"1230:nqzva-nqzva.pbasvtherccv";a:2:{i:0;R:25953;i:1;R:9;}s:30:"1230:nqzva-nqzva.phfgbzvmrgrkg";a:2:{i:0;R:25953;i:1;R:9;}s:33:"1230:nqzva-nqzva.qngnqvfcynlehyrf";a:2:{i:0;R:25953;i:1;R:9;}s:23:"1230:nqzva-nqzva.qrsvar";a:2:{i:0;R:25953;i:1;R:9;}s:34:"1230:nqzva-nqzva.qrsvararjpngrtbel";a:2:{i:0;R:25953;i:1;R:9;}s:37:"1230:nqzva-nqzva.qrsvararjybnacebqhpg";a:2:{i:0;R:25953;i:1;R:9;}s:40:"1230:nqzva-nqzva.qrsvararjfnivatfcebqhpg";a:2:{i:0;R:25953;i:1;R:9;}s:34:"1230:nqzva-nqzva.qrsvarcebqhpgfzvk";a:2:{i:0;R:25953;i:1;R:9;}s:42:"1230:nqzva-nqzva.qrsvarnpprcgrqcnlzragglcr";a:2:{i:0;R:25953;i:1;R:9;}s:39:"1230:nqzva-nqzva.qrsvarnqqvgvbanysvryqf";a:2:{i:0;R:25953;i:1;R:9;}s:39:"1230:nqzva-nqzva.qrsvaruvqqraznaqsvryqf";a:2:{i:0;R:25953;i:1;R:9;}s:29:"1230:nqzva-nqzva.qrsvarynoryf";a:2:{i:0;R:25953;i:1;R:9;}s:35:"1230:nqzva-nqzva.qrsvarybbxhcbcgvba";a:2:{i:0;R:25953;i:1;R:9;}s:26:"1230:nqzva-nqzva.qrsvararj";a:2:{i:0;R:25953;i:1;R:9;}s:34:"1230:nqzva-nqzva.qrsvararjdhrfgvba";a:2:{i:0;R:25953;i:1;R:9;}s:32:"1230:nqzva-nqzva.qrsvararjfheirl";a:2:{i:0;R:25953;i:1;R:9;}s:31:"1230:nqzva-nqzva.qrsvararjhfref";a:2:{i:0;R:25953;i:1;R:9;}s:26:"1230:nqzva-nqzva.qrsarjpng";a:2:{i:0;R:25953;i:1;R:9;}s:32:"1230:nqzva-nqzva.qrsarjpurpxyvfg";a:2:{i:0;R:25953;i:1;R:9;}s:27:"1230:nqzva-nqzva.qrsarjsrrf";a:2:{i:0;R:25953;i:1;R:9;}s:27:"1230:nqzva-nqzva.qrsarjshaq";a:2:{i:0;R:25953;i:1;R:9;}s:30:"1230:nqzva-nqzva.qrsarjubyvqnl";a:2:{i:0;R:25953;i:1;R:9;}s:30:"1230:nqzva-nqzva.qrsarjybnaceq";a:2:{i:0;R:25953;i:1;R:9;}s:32:"1230:nqzva-nqzva.qrsarjcranygvrf";a:2:{i:0;R:25953;i:1;R:9;}s:26:"1230:nqzva-nqzva.qrsarjbss";a:2:{i:0;R:25953;i:1;R:9;}s:29:"1230:nqzva-nqzva.qrsarjfniceq";a:2:{i:0;R:25953;i:1;R:9;}s:26:"1230:nqzva-nqzva.qvfohefny";a:2:{i:0;R:25953;i:1;R:9;}s:26:"1230:nqzva-nqzva.qbphzragf";a:2:{i:0;R:25953;i:1;R:9;}s:43:"1230:nqzva-nqzva.vzcbegrkcbeg.ragresvyrvasb";a:2:{i:0;R:25953;i:1;R:9;}s:44:"1230:nqzva-nqzva.vzcbegrkcbeg.vzcbegsvyranzr";a:2:{i:0;R:25953;i:1;R:9;}s:42:"1230:nqzva-nqzva.vzcbegrkcbeg.vzcbegsbezng";a:2:{i:0;R:25953;i:1;R:9;}s:47:"1230:nqzva-nqzva.vzcbegrkcbeg.vzcbegvasbezngvba";a:2:{i:0;R:25953;i:1;R:9;}s:42:"1230:nqzva-nqzva.vzcbegrkcbeg.vzcbegfgnghf";a:2:{i:0;R:25953;i:1;R:9;}s:44:"1230:nqzva-nqzva.vzcbegrkcbeg.ebjfjvgureebef";a:2:{i:0;R:25953;i:1;R:9;}s:48:"1230:nqzva-nqzva.vzcbegrkcbeg.mrebvzcbegnoyrebjf";a:2:{i:0;R:25953;i:1;R:9;}s:50:"1230:nqzva-nqzva.vzcbegrkcbeg.fhpprffshyvzcbegebjf";a:2:{i:0;R:25953;i:1;R:9;}s:48:"1230:nqzva-nqzva.vzcbegrkcbeg.vzcbeggenafnpgvbaf";a:2:{i:0;R:25953;i:1;R:9;}s:51:"1230:nqzva-nqzva.vzcbegrkcbeg.ivrjnppbhagvatrkcbegf";a:2:{i:0;R:25953;i:1;R:9;}s:55:"1230:nqzva-nqzva.vzcbegrkcbeg.trarengrnppbhagvatrkcbegf";a:2:{i:0;R:25953;i:1;R:9;}s:47:"1230:nqzva-nqzva.vzcbegrkcbeg.unf_orra_vzcbegrq";a:2:{i:0;R:25953;i:1;R:9;}s:45:"1230:nqzva-nqzva.vzcbegrkcbeg.erivrjnaqfhozvg";a:2:{i:0;R:25953;i:1;R:9;}s:46:"1230:nqzva-nqzva.vzcbegrkcbeg.fryrpgvzcbegsvyr";a:2:{i:0;R:25953;i:1;R:9;}s:51:"1230:nqzva-nqzva.vzcbegrkcbeg.fhpprffshyyl_vzcbegrq";a:2:{i:0;R:25953;i:1;R:9;}s:35:"1230:nqzva-nqzva.vzcbegrkcbeg.gvgyr";a:2:{i:0;R:25953;i:1;R:9;}s:42:"1230:nqzva-nqzva.vzcbegrkcbeg.ebjfjrerernq";a:2:{i:0;R:25953;i:1;R:9;}s:41:"1230:nqzva-nqzva.vzcbegrkcbeg.ebjfabreebe";a:2:{i:0;R:25953;i:1;R:9;}s:41:"1230:nqzva-nqzva.vzcbegrkcbeg.ebjfvtaberq";a:2:{i:0;R:25953;i:1;R:9;}s:39:"1230:nqzva-nqzva.vzcbegrkcbeg.ebjfreebe";a:2:{i:0;R:25953;i:1;R:9;}s:44:"1230:nqzva-nqzva.vzcbegrkcbeg.nzbhagvzcbegrq";a:2:{i:0;R:25953;i:1;R:9;}s:57:"1230:nqzva-nqzva.vzcbegrkcbeg.nzbhagqvfohefrzragfvzcbegrq";a:2:{i:0;R:25953;i:1;R:9;}s:41:"1230:nqzva-nqzva.vzcbegrkcbeg.nzbhagreebe";a:2:{i:0;R:25953;i:1;R:9;}s:41:"1230:nqzva-nqzva.vzcbegrkcbeg.qbjaybnqybt";a:2:{i:0;R:25953;i:1;R:9;}s:37:"1230:nqzva-nqzva.vzcbegrkcbeg.pyvragf";a:2:{i:0;R:25953;i:1;R:9;}s:58:"1230:nqzva-nqzva.vzcbegrkcbeg.pyvragf.sybjfgngr.fryrpgsvyr";a:2:{i:0;R:25953;i:1;R:9;}s:54:"1230:nqzva-nqzva.vzcbegrkcbeg.pyvragf.sybjfgngr.erivrj";a:2:{i:0;R:25953;i:1;R:9;}s:51:"1230:nqzva-nqzva.vzcbegrkcbeg.pyvragf.vzcbegpyvragf";a:2:{i:0;R:25953;i:1;R:9;}s:47:"1230:nqzva-nqzva.vzcbegrkcbeg.pyvragf.fgngrzrag";a:2:{i:0;R:25953;i:1;R:9;}s:53:"1230:nqzva-nqzva.vzcbegrkcbeg.pyvragf.znexrqfgngrzrag";a:2:{i:0;R:25953;i:1;R:9;}s:49:"1230:nqzva-nqzva.vzcbegrkcbeg.pyvragf.cnefrreebef";a:2:{i:0;R:25953;i:1;R:9;}s:50:"1230:nqzva-nqzva.vzcbegrkcbeg.pyvragf.cnefrfhpprff";a:2:{i:0;R:25953;i:1;R:9;}s:44:"1230:nqzva-nqzva.vzcbegrkcbeg.pyvragf.erivrj";a:2:{i:0;R:25953;i:1;R:9;}s:50:"1230:nqzva-nqzva.vzcbegrkcbeg.pyvragf.erivrj.pbhag";a:2:{i:0;R:25953;i:1;R:9;}s:49:"1230:nqzva-nqzva.vzcbegrkcbeg.pyvragf.erivrj.rqvg";a:2:{i:0;R:25953;i:1;R:9;}s:67:"1230:nqzva-nqzva.vzcbegrkcbeg.pyvragf.erivrj.fhpprffshyylcnefrqebjf";a:2:{i:0;R:25953;i:1;R:9;}s:62:"1230:nqzva-nqzva.vzcbegrkcbeg.pyvragf.erivrj.erivrjvasbezngvba";a:2:{i:0;R:25953;i:1;R:9;}s:42:"1230:nqzva-nqzva.vzcbegrkcbeg.pyvragf.fnir";a:2:{i:0;R:25953;i:1;R:9;}s:48:"1230:nqzva-nqzva.vzcbegrkcbeg.pyvragf.fnir.pbhag";a:2:{i:0;R:25953;i:1;R:9;}s:50:"1230:nqzva-nqzva.vzcbegrkcbeg.pyvragf.fnir.fhpprff";a:2:{i:0;R:25953;i:1;R:9;}s:54:"1230:nqzva-nqzva.vzcbegrkcbeg.pyvragf.fnir.ebjfvtaberq";a:2:{i:0;R:25953;i:1;R:9;}s:49:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.npgvivgvrf";a:2:{i:0;R:25953;i:1;R:9;}s:46:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.nqqerff";a:2:{i:0;R:25953;i:1;R:9;}s:56:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.oenapu_fubeg_anzr";a:2:{i:0;R:25953;i:1;R:9;}s:50:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.pvgvmrafuvc";a:2:{i:0;R:25953;i:1;R:9;}s:52:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.pvgl_qvfgevpg";a:2:{i:0;R:25953;i:1;R:9;}s:49:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.pyvrag_ahz";a:2:{i:0;R:25953;i:1;R:9;}s:46:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.pbhagel";a:2:{i:0;R:25953;i:1;R:9;}s:52:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.qngr_bs_ovegu";a:2:{i:0;R:25953;i:1;R:9;}s:54:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.rqhpngvba_yriry";a:2:{i:0;R:25953;i:1;R:9;}s:48:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.rguavpvgl";a:2:{i:0;R:25953;i:1;R:9;}s:49:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.svefg_anzr";a:2:{i:0;R:25953;i:1;R:9;}s:45:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.traqre";a:2:{i:0;R:25953;i:1;R:9;}s:52:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.tbireazrag_vq";a:2:{i:0;R:25953;i:1;R:9;}s:55:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.tebhc_tybony_ahz";a:2:{i:0;R:25953;i:1;R:9;}s:50:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.unaqvpnccrq";a:2:{i:0;R:25953;i:1;R:9;}s:48:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.ynfg_anzr";a:2:{i:0;R:25953;i:1;R:9;}s:51:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.ybna_bssvpre";a:2:{i:0;R:25953;i:1;R:9;}s:53:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.znevgny_fgnghf";a:2:{i:0;R:25953;i:1;R:9;}s:56:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.zrrgvat_serdhrapl";a:2:{i:0;R:25953;i:1;R:9;}s:55:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.zrrgvat_ybpngvba";a:2:{i:0;R:25953;i:1;R:9;}s:54:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.zrrgvat_ba_jrrx";a:2:{i:0;R:25953;i:1;R:9;}s:55:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.zrrgvat_bcg1_qnl";a:2:{i:0;R:25953;i:1;R:9;}s:57:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.zrrgvat_bcg1_rirel";a:2:{i:0;R:25953;i:1;R:9;}s:55:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.zrrgvat_bcg2_qnl";a:2:{i:0;R:25953;i:1;R:9;}s:57:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.zrrgvat_bcg2_rirel";a:2:{i:0;R:25953;i:1;R:9;}s:55:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.zrrgvat_bcg2_gur";a:2:{i:0;R:25953;i:1;R:9;}s:63:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.zrrgvat_erphe_rirel_jrrx";a:2:{i:0;R:25953;i:1;R:9;}s:50:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.zvqqyr_anzr";a:2:{i:0;R:25953;i:1;R:9;}s:57:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.ahzore_bs_puvyqera";a:2:{i:0;R:25953;i:1;R:9;}s:50:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.cbfgny_pbqr";a:2:{i:0;R:25953;i:1;R:9;}s:53:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.cbiregl_fgnghf";a:2:{i:0;R:25953;i:1;R:9;}s:51:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.erpehvgrq_ol";a:2:{i:0;R:25953;i:1;R:9;}s:49:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.fnyhgngvba";a:2:{i:0;R:25953;i:1;R:9;}s:55:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.frpbaq_ynfg_anzr";a:2:{i:0;R:25953;i:1;R:9;}s:65:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.fcbhfr_sngure_eryngvbafuvc";a:2:{i:0;R:25953;i:1;R:9;}s:56:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.fcbhfr_svefg_anzr";a:2:{i:0;R:25953;i:1;R:9;}s:57:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.fcbhfr_zvqqyr_anzr";a:2:{i:0;R:25953;i:1;R:9;}s:55:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.fcbhfr_ynfg_anzr";a:2:{i:0;R:25953;i:1;R:9;}s:62:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.fcbhfr_frpbaq_ynfg_anzr";a:2:{i:0;R:25953;i:1;R:9;}s:44:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.fgngr";a:2:{i:0;R:25953;i:1;R:9;}s:45:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.fgnghf";a:2:{i:0;R:25953;i:1;R:9;}s:48:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.pryy.gryrcubar";a:2:{i:0;R:25953;i:1;R:9;}s:54:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.reebe.npgvirvaoenapu";a:2:{i:0;R:25953;i:1;R:9;}s:44:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.reebe.pryy";a:2:{i:0;R:25953;i:1;R:9;}s:58:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.reebe.qhcyvpngrtybonyahz";a:2:{i:0;R:25953;i:1;R:9;}s:55:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.reebe.qhcyvpngrpyvrag";a:2:{i:0;R:25953;i:1;R:9;}s:50:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.reebe.shgherqngr";a:2:{i:0;R:25953;i:1;R:9;}s:54:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.reebe.tebhconqfgnghf";a:2:{i:0;R:25953;i:1;R:9;}s:51:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.reebe.tebhcpybfrq";a:2:{i:0;R:25953;i:1;R:9;}s:53:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.reebe.tebhcpnapryrq";a:2:{i:0;R:25953;i:1;R:9;}s:53:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.reebe.tebhcabgsbhaq";a:2:{i:0;R:25953;i:1;R:9;}s:61:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.reebe.vapbzcyrgrzrrgvatqngn";a:2:{i:0;R:25953;i:1;R:9;}s:50:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.reebe.vainyvqntr";a:2:{i:0;R:25953;i:1;R:9;}s:51:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.reebe.vainyvqqngr";a:2:{i:0;R:25953;i:1;R:9;}s:50:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.reebe.vainyvqqnl";a:2:{i:0;R:25953;i:1;R:9;}s:52:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.reebe.vainyvqzbagu";a:2:{i:0;R:25953;i:1;R:9;}s:49:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.reebe.ybnqreebe";a:2:{i:0;R:25953;i:1;R:9;}s:65:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.reebe.ybnabssvpresbetebhcpyvrag";a:2:{i:0;R:25953;i:1;R:9;}s:49:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.reebe.znaqngbel";a:2:{i:0;R:25953;i:1;R:9;}s:55:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.reebe.zrrgvatsbetebhc";a:2:{i:0;R:25953;i:1;R:9;}s:63:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.reebe.zrrgvatbcgvbafrkpyhfvir";a:2:{i:0;R:25953;i:1;R:9;}s:62:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.reebe.zbaguylzrrgvatabgrzcgl";a:2:{i:0;R:25953;i:1;R:9;}s:48:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.reebe.abgsbhaq";a:2:{i:0;R:25953;i:1;R:9;}s:49:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.reebe.abzrrgvat";a:2:{i:0;R:25953;i:1;R:9;}s:50:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.reebe.abbssvpref";a:2:{i:0;R:25953;i:1;R:9;}s:57:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.reebe.abgcbfvgvirahzore";a:2:{i:0;R:25953;i:1;R:9;}s:58:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.reebe.abgrabhtuvachgpryy";a:2:{i:0;R:25953;i:1;R:9;}s:57:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.reebe.abgrabhtuvachgebj";a:2:{i:0;R:25953;i:1;R:9;}s:55:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.reebe.bssvprnaqoenapu";a:2:{i:0;R:25953;i:1;R:9;}s:54:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.reebe.bssvprabgsbhaq";a:2:{i:0;R:25953;i:1;R:9;}s:43:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.reebe.ebj";a:2:{i:0;R:25953;i:1;R:9;}s:53:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.reebe.fhaqnlzrrgvat";a:2:{i:0;R:25953;i:1;R:9;}s:61:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.reebe.jrrxylzrrgvatabgrzcgl";a:2:{i:0;R:25953;i:1;R:9;}s:40:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.sngure";a:2:{i:0;R:25953;i:1;R:9;}s:40:"1230:nqzva-nqzva.vzcbegrkcbeg.kyf.fcbhfr";a:2:{i:0;R:25953;i:1;R:9;}s:33:"1230:nqzva-nqzva.vasbpyvpxbaynory";a:2:{i:0;R:25953;i:1;R:9;}s:35:"1230:nqzva-nqzva.znantrybnanppbhagf";a:2:{i:0;R:25953;i:1;R:9;}s:33:"1230:nqzva-nqzva.znantrcebqhpgzvk";a:2:{i:0;R:25953;i:1;R:9;}s:31:"1230:nqzva-nqzva.znantrcebqhpgf";a:2:{i:0;R:25953;i:1;R:9;}s:30:"1230:nqzva-nqzva.znantrybnaceq";a:2:{i:0;R:25953;i:1;R:9;}s:26:"1230:nqzva-nqzva.znantrbet";a:2:{i:0;R:25953;i:1;R:9;}s:26:"1230:nqzva-nqzva.znantrceq";a:2:{i:0;R:25953;i:1;R:9;}s:32:"1230:nqzva-nqzva.znantrebyrf&cre";a:2:{i:0;R:25953;i:1;R:9;}s:29:"1230:nqzva-nqzva.znantrfniceq";a:2:{i:0;R:25953;i:1;R:9;}s:20:"1230:nqzva-nqzva.zvk";a:2:{i:0;R:25953;i:1;R:9;}s:29:"1230:nqzva-nqzva.zbagupybfvat";a:2:{i:0;R:25953;i:1;R:9;}s:23:"1230:nqzva-nqzva.bssvpr";a:2:{i:0;R:25953;i:1;R:9;}s:24:"1230:nqzva-nqzva.betcers";a:2:{i:0;R:25953;i:1;R:9;}s:25:"1230:nqzva-nqzva.ceqehyrf";a:2:{i:0;R:25953;i:1;R:9;}s:24:"1230:nqzva-nqzva.cebqhpg";a:2:{i:0;R:25953;i:1;R:9;}s:25:"1230:nqzva-nqzva.cebqhpgf";a:2:{i:0;R:25953;i:1;R:9;}s:26:"1230:nqzva-nqzva.dhrfgvbaf";a:2:{i:0;R:25953;i:1;R:9;}s:25:"1230:nqzva-nqzva.dhrfgvba";a:2:{i:0;R:25953;i:1;R:9;}s:31:"1230:nqzva-nqzva.dhrfgvbatebhcf";a:2:{i:0;R:25953;i:1;R:9;}s:30:"1230:nqzva-nqzva.dhrfgvbatebhc";a:2:{i:0;R:25953;i:1;R:9;}s:33:"1230:nqzva-nqzva.qrsvar.dhrfgvbaf";a:2:{i:0;R:25953;i:1;R:9;}s:21:"1230:nqzva-nqzva.erqb";a:2:{i:0;R:25953;i:1;R:9;}s:34:"1230:nqzva-nqzva.erqbybnaqvfohefny";a:2:{i:0;R:25953;i:1;R:9;}s:24:"1230:nqzva-nqzva.ercbegf";a:2:{i:0;R:25953;i:1;R:9;}s:31:"1230:nqzva-nqzva.znantr.ercbegf";a:2:{i:0;R:25953;i:1;R:9;}s:24:"1230:nqzva-nqzva.erirefr";a:2:{i:0;R:25953;i:1;R:9;}s:37:"1230:nqzva-nqzva.erirefrybnaqvfohefny";a:2:{i:0;R:25953;i:1;R:9;}s:26:"1230:nqzva-nqzva.fubeganzr";a:2:{i:0;R:25953;i:1;R:9;}s:23:"1230:nqzva-nqzva.fheirl";a:2:{i:0;R:25953;i:1;R:9;}s:24:"1230:nqzva-nqzva.fheirlf";a:2:{i:0;R:25953;i:1;R:9;}s:31:"1230:nqzva-nqzva.znantr.fheirlf";a:2:{i:0;R:25953;i:1;R:9;}s:29:"1230:nqzva-nqzva.ivrj.fheirlf";a:2:{i:0;R:25953;i:1;R:9;}s:31:"1230:nqzva-nqzva.fuhgqbja.gvgyr";a:2:{i:0;R:25953;i:1;R:9;}s:30:"1230:nqzva-nqzva.fuhgqbja.yvax";a:2:{i:0;R:25953;i:1;R:9;}s:39:"1230:nqzva-nqzva.fuhgqbja.ohggba.fhozvg";a:2:{i:0;R:25953;i:1;R:9;}s:39:"1230:nqzva-nqzva.fuhgqbja.ohggba.pnapry";a:2:{i:0;R:25953;i:1;R:9;}s:40:"1230:nqzva-nqzva.fuhgqbja.ohggba.erserfu";a:2:{i:0;R:25953;i:1;R:9;}s:33:"1230:nqzva-nqzva.fuhgqbja.jrypbzr";a:2:{i:0;R:25953;i:1;R:9;}s:31:"1230:nqzva-nqzva.fuhgqbja.hfref";a:2:{i:0;R:25953;i:1;R:9;}s:32:"1230:nqzva-nqzva.fuhgqbja.fgnghf";a:2:{i:0;R:25953;i:1;R:9;}s:37:"1230:nqzva-nqzva.fuhgqbja.fgnghf.abar";a:2:{i:0;R:25953;i:1;R:9;}s:43:"1230:nqzva-nqzva.fuhgqbja.fgnghf.vacebterff";a:2:{i:0;R:25953;i:1;R:9;}s:41:"1230:nqzva-nqzva.fuhgqbja.fgnghf.vzzvarag";a:2:{i:0;R:25953;i:1;R:9;}s:33:"1230:nqzva-nqzva.fuhgqbja.gvzrbhg";a:2:{i:0;R:25953;i:1;R:9;}s:38:"1230:nqzva-nqzva.fuhgqbja.gvzrbhg.havg";a:2:{i:0;R:25953;i:1;R:9;}s:31:"1230:nqzva-nqzva.flfnqzva.gvgyr";a:2:{i:0;R:25953;i:1;R:9;}s:43:"1230:nqzva-nqzva.flfvasb.nccyvpngvbairefvba";a:2:{i:0;R:25953;i:1;R:9;}s:34:"1230:nqzva-nqzva.flfvasb.nccfreire";a:2:{i:0;R:25953;i:1;R:9;}s:41:"1230:nqzva-nqzva.flfvasb.phfgbzercbegfqve";a:2:{i:0;R:25953;i:1;R:9;}s:33:"1230:nqzva-nqzva.flfvasb.qngnonfr";a:2:{i:0;R:25953;i:1;R:9;}s:33:"1230:nqzva-nqzva.flfvasb.qngrgvzr";a:2:{i:0;R:25953;i:1;R:9;}s:41:"1230:nqzva-nqzva.flfvasb.qngrgvzr.vfb8601";a:2:{i:0;R:25953;i:1;R:9;}s:31:"1230:nqzva-nqzva.flfvasb.qevire";a:2:{i:0;R:25953;i:1;R:9;}s:31:"1230:nqzva-nqzva.flfvasb.fbhepr";a:2:{i:0;R:25953;i:1;R:9;}s:31:"1230:nqzva-nqzva.flfvasb.freire";a:2:{i:0;R:25953;i:1;R:9;}s:29:"1230:nqzva-nqzva.flfvasb.cbeg";a:2:{i:0;R:25953;i:1;R:9;}s:29:"1230:nqzva-nqzva.flfvasb.anzr";a:2:{i:0;R:25953;i:1;R:9;}s:29:"1230:nqzva-nqzva.flfvasb.hfre";a:2:{i:0;R:25953;i:1;R:9;}s:29:"1230:nqzva-nqzva.flfvasb.wnin";a:2:{i:0;R:25953;i:1;R:9;}s:40:"1230:nqzva-nqzva.flfvasb.bcrengvatflfgrz";a:2:{i:0;R:25953;i:1;R:9;}s:31:"1230:nqzva-nqzva.flfvasb.bfhfre";a:2:{i:0;R:25953;i:1;R:9;}s:36:"1230:nqzva-nqzva.flfvasb.eryrnfranzr";a:2:{i:0;R:25953;i:1;R:9;}s:41:"1230:nqzva-nqzva.flfvasb.pbzzvgvqragvsvre";a:2:{i:0;R:25953;i:1;R:9;}s:36:"1230:nqzva-nqzva.flfvasb.ohvyqahzore";a:2:{i:0;R:25953;i:1;R:9;}s:34:"1230:nqzva-nqzva.flfvasb.ohvyqqngr";a:2:{i:0;R:25953;i:1;R:9;}s:30:"1230:nqzva-nqzva.flfvasb.gvgyr";a:2:{i:0;R:25953;i:1;R:9;}s:35:"1230:nqzva-nqzva.ivrj.flfvasb.gvgyr";a:2:{i:0;R:25953;i:1;R:9;}s:32:"1230:nqzva-nqzva.flfvasb.jrypbzr";a:2:{i:0;R:25953;i:1;R:9;}s:25:"1230:nqzva-nqzva.flfhfref";a:2:{i:0;R:25953;i:1;R:9;}s:26:"1230:nqzva-nqzva.grzcyngrf";a:2:{i:0;R:25953;i:1;R:9;}s:53:"1230:nqzva-nqzva.hanoyrgbqrgrezvarpbasvthengvbafbhepr";a:2:{i:0;R:25953;i:1;R:9;}s:23:"1230:nqzva-nqzva.hcybnq";a:2:{i:0;R:25953;i:1;R:9;}s:37:"1230:nqzva-nqzva.hcybnqercbeggrzcyngr";a:2:{i:0;R:25953;i:1;R:9;}s:33:"1230:nqzva-nqzva.ivrjybnacebqhpgf";a:2:{i:0;R:25953;i:1;R:9;}s:24:"1230:nqzva-nqzva.ivrjccv";a:2:{i:0;R:25953;i:1;R:9;}s:32:"1230:nqzva-nqzva.ivrjcebqhpgfzvk";a:2:{i:0;R:25953;i:1;R:9;}s:36:"1230:nqzva-nqzva.ivrjfnivatfcebqhpgf";a:2:{i:0;R:25953;i:1;R:9;}s:39:"1230:nqzva-nqzva.ivrj_nqqvgvbany_svryqf";a:2:{i:0;R:25953;i:1;R:9;}s:38:"1230:nqzva-nqzva.ivrj_ercbegf_pngrtbel";a:2:{i:0;R:25953;i:1;R:9;}s:44:"1230:nqzva-nqzva.ivrjnqzvavfgengvirqbphzragf";a:2:{i:0;R:25953;i:1;R:9;}s:30:"1230:nqzva-nqzva.ivrjpurxyvfgf";a:2:{i:0;R:25953;i:1;R:9;}s:25:"1230:nqzva-nqzva.ivrjsrrf";a:2:{i:0;R:25953;i:1;R:9;}s:26:"1230:nqzva-nqzva.ivrjshaqf";a:2:{i:0;R:25953;i:1;R:9;}s:29:"1230:nqzva-nqzva.ivrjubyvqnlf";a:2:{i:0;R:25953;i:1;R:9;}s:32:"1230:nqzva-nqzva.ivrjyngr/qbeqrs";a:2:{i:0;R:25953;i:1;R:9;}s:28:"1230:nqzva-nqzva.ivrjybnaceq";a:2:{i:0;R:25953;i:1;R:9;}s:24:"1230:nqzva-nqzva.ivrjbss";a:2:{i:0;R:25953;i:1;R:9;}s:28:"1230:nqzva-nqzva.ivrjbssuvre";a:2:{i:0;R:25953;i:1;R:9;}s:41:"1230:nqzva-nqzva.ivrjbetnavmngvbafrggvatf";a:2:{i:0;R:25953;i:1;R:9;}s:30:"1230:nqzva-nqzva.ivrjcranygvrf";a:2:{i:0;R:25953;i:1;R:9;}s:27:"1230:nqzva-nqzva.ivrjceqpng";a:2:{i:0;R:25953;i:1;R:9;}s:30:"1230:nqzva-nqzva.ivrjdhrfgvbaf";a:2:{i:0;R:25953;i:1;R:9;}s:28:"1230:nqzva-nqzva.ivrjercbegf";a:2:{i:0;R:25953;i:1;R:9;}s:28:"1230:nqzva-nqzva.ivrjfniceqf";a:2:{i:0;R:25953;i:1;R:9;}s:27:"1230:nqzva-nqzva.ivrjfheirl";a:2:{i:0;R:25953;i:1;R:9;}s:29:"1230:nqzva-nqzva.ivrjflfhfref";a:2:{i:0;R:25953;i:1;R:9;}s:31:"1230:nqzva-nqzva.jrypbzrgbzvsbf";a:2:{i:0;R:25953;i:1;R:9;}s:37:"1230:nqzva-reebe.npgvivgl.abg.nyybjrq";a:2:{i:0;R:25953;i:1;R:9;}s:41:"1230:nqzva-reebe.fuhgqbja.gvzrbhg.vainyvq";a:2:{i:0;R:25953;i:1;R:9;}s:24:"1230:nqzva-reebef.cersvk";a:2:{i:0;R:25953;i:1;R:9;}s:24:"1230:nqzva-reebef.fhssvk";a:2:{i:0;R:25953;i:1;R:9;}s:52:"1230:nqzva-rkprcgvba.senzrjbex.qbhoyrfhozvgrkprcgvba";a:2:{i:0;R:25953;i:1;R:9;}s:51:"1230:nqzva-rkprcgvba.senzrjbex.cntrrkcverqrkprcgvba";a:2:{i:0;R:25953;i:1;R:9;}s:37:"1230:nqzva-reebef.vzcbegrkcbeg.gbbovt";a:2:{i:0;R:25953;i:1;R:9;}s:50:"1230:nqzva-reebef.vzcbegrkcbeg.znaqngbel_fryrpgobk";a:2:{i:0;R:25953;i:1;R:9;}s:45:"1230:nqzva-reebef.vzcbegrkcbeg.znaqngbel_svyr";a:2:{i:0;R:25953;i:1;R:9;}s:48:"1230:nqzva-reebef.vzcbegrkcbeg.nyernql_fhozvggrq";a:2:{i:0;R:25953;i:1;R:9;}s:26:"1230:nqzva-nqzva.hcybnqccv";a:2:{i:0;R:25953;i:1;R:9;}s:40:"1230:nqzva-nqzva.dhrfgvbaanver.zvtengvba";a:2:{i:0;R:25953;i:1;R:9;}s:56:"1230:nqzva-nqzva.dhrfgvbaanver.zvtengvba.zvtengr.fheirlf";a:2:{i:0;R:25953;i:1;R:9;}s:66:"1230:nqzva-nqzva.dhrfgvbaanver.zvtengvba.zvtengr.nqqvgvbany.svryqf";a:2:{i:0;R:25953;i:1;R:9;}s:39:"1230:nqzva-nqzva.zvtengr.dhrfgvbatebhcf";a:2:{i:0;R:25953;i:1;R:9;}s:27:"1230:ncc-ohggba.nqzvazbqhyr";a:2:{i:0;s:13:"out-mifos-app";i:1;R:9;}s:28:"1230:ncc-ohggba.pyvragzbqhyr";a:2:{i:0;R:26227;i:1;R:9;}s:26:"1230:ncc-reebe.vainyvqhfre";a:2:{i:0;R:26227;i:1;R:9;}s:20:"1230:ncc-reebef.olgr";a:2:{i:0;R:26227;i:1;R:9;}s:26:"1230:ncc-reebef.perqvgpneq";a:2:{i:0;R:26227;i:1;R:9;}s:20:"1230:ncc-reebef.qngr";a:2:{i:0;R:26227;i:1;R:9;}s:22:"1230:ncc-reebef.qbhoyr";a:2:{i:0;R:26227;i:1;R:9;}s:21:"1230:ncc-reebef.rznvy";a:2:{i:0;R:26227;i:1;R:9;}s:21:"1230:ncc-reebef.sybng";a:2:{i:0;R:26227;i:1;R:9;}s:22:"1230:ncc-reebef.sbbgre";a:2:{i:0;R:26227;i:1;R:9;}s:22:"1230:ncc-reebef.urnqre";a:2:{i:0;R:26227;i:1;R:9;}s:23:"1230:ncc-reebef.vagrtre";a:2:{i:0;R:26227;i:1;R:9;}s:23:"1230:ncc-reebef.vainyvq";a:2:{i:0;R:26227;i:1;R:9;}s:20:"1230:ncc-reebef.ybat";a:2:{i:0;R:26227;i:1;R:9;}s:25:"1230:ncc-reebef.znkyratgu";a:2:{i:0;R:26227;i:1;R:9;}s:25:"1230:ncc-reebef.zvayratgu";a:2:{i:0;R:26227;i:1;R:9;}s:24:"1230:ncc-reebef.abgrdhny";a:2:{i:0;R:26227;i:1;R:9;}s:21:"1230:ncc-reebef.enatr";a:2:{i:0;R:26227;i:1;R:9;}s:24:"1230:ncc-reebef.erdhverq";a:2:{i:0;R:26227;i:1;R:9;}s:21:"1230:ncc-reebef.fubeg";a:2:{i:0;R:26227;i:1;R:9;}s:23:"1230:ncc-ynory.nppbhagf";a:2:{i:0;R:26227;i:1;R:9;}s:25:"1230:ncc-ynory.nqzvagnfxf";a:2:{i:0;R:26227;i:1;R:9;}s:21:"1230:ncc-ynory.ngevfx";a:2:{i:0;R:26227;i:1;R:9;}s:21:"1230:ncc-ynory.oenapu";a:2:{i:0;R:26227;i:1;R:9;}s:21:"1230:ncc-ynory.pragre";a:2:{i:0;R:26227;i:1;R:9;}s:21:"1230:ncc-ynory.pyvrag";a:2:{i:0;R:26227;i:1;R:9;}s:22:"1230:ncc-ynory.pyvragf";a:2:{i:0;R:26227;i:1;R:9;}s:30:"1230:ncc-ynory.pbyyrpgvbafurrg";a:2:{i:0;R:26227;i:1;R:9;}s:31:"1230:ncc-ynory.pbyyrpgvbafurrgf";a:2:{i:0;R:26227;i:1;R:9;}s:21:"1230:ncc-ynory.perngr";a:2:{i:0;R:26227;i:1;R:9;}s:24:"1230:ncc-ynory.perngrarj";a:2:{i:0;R:26227;i:1;R:9;}s:19:"1230:ncc-ynory.qngn";a:2:{i:0;R:26227;i:1;R:9;}s:30:"1230:ncc-ynory.qryvadhragybnaf";a:2:{i:0;R:26227;i:1;R:9;}s:20:"1230:ncc-ynory.ragre";a:2:{i:0;R:26227;i:1;R:9;}s:20:"1230:ncc-ynory.tebhc";a:2:{i:0;R:26227;i:1;R:9;}s:19:"1230:ncc-ynory.uryc";a:2:{i:0;R:26227;i:1;R:9;}s:31:"1230:ncc-ynory.vafhenaprnppbhag";a:2:{i:0;R:26227;i:1;R:9;}s:26:"1230:ncc-ynory.ybnanppbhag";a:2:{i:0;R:26227;i:1;R:9;}s:26:"1230:ncc-ynory.ybnabssvpre";a:2:{i:0;R:26227;i:1;R:9;}s:21:"1230:ncc-ynory.znantr";a:2:{i:0;R:26227;i:1;R:9;}s:29:"1230:ncc-ynory.znantrrkvfgvat";a:2:{i:0;R:26227;i:1;R:9;}s:22:"1230:ncc-ynory.bcraarj";a:2:{i:0;R:26227;i:1;R:9;}s:24:"1230:ncc-ynory.cbegsbyvb";a:2:{i:0;R:26227;i:1;R:9;}s:20:"1230:ncc-ynory.cevag";a:2:{i:0;R:26227;i:1;R:9;}s:25:"1230:ncc-ynory.dhvpxfgneg";a:2:{i:0;R:26227;i:1;R:9;}s:21:"1230:ncc-ynory.ercbeg";a:2:{i:0;R:26227;i:1;R:9;}s:22:"1230:ncc-ynory.ercbegf";a:2:{i:0;R:26227;i:1;R:9;}s:29:"1230:ncc-ynory.fnivatfnppbhag";a:2:{i:0;R:26227;i:1;R:9;}s:22:"1230:ncc-ynory.frrnyfb";a:2:{i:0;R:26227;i:1;R:9;}s:20:"1230:ncc-ynory.gnfxf";a:2:{i:0;R:26227;i:1;R:9;}s:19:"1230:ncc-ynory.ivrj";a:2:{i:0;R:26227;i:1;R:9;}s:24:"1230:ncc-ynory.j/bpragre";a:2:{i:0;R:26227;i:1;R:9;}s:27:"1230:ncc-ynory.lbhefrggvatf";a:2:{i:0;R:26227;i:1;R:9;}s:35:"1230:ncg-npprcgrqcnlzragglcr.pnapry";a:2:{i:0;s:13:"out-mifos-apt";i:1;R:9;}s:35:"1230:ncg-npprcgrqcnlzragglcr.fhozvg";a:2:{i:0;R:26281;i:1;R:9;}s:34:"1230:ncg-npprcgrqcnlzragglcr.nqzva";a:2:{i:0;R:26281;i:1;R:9;}s:46:"1230:ncg-npprcgrqcnlzragglcr.pyvragtebhcpragre";a:2:{i:0;R:26281;i:1;R:9;}s:54:"1230:ncg-npprcgrqcnlzragglcr.qrsvarnpprcgrqcnlzragglcr";a:2:{i:0;R:26281;i:1;R:9;}s:36:"1230:ncg-npprcgrqcnlzragglcr.qrcbfvg";a:2:{i:0;R:26281;i:1;R:9;}s:41:"1230:ncg-npprcgrqcnlzragglcr.qvfohefrzrag";a:2:{i:0;R:26281;i:1;R:9;}s:32:"1230:ncg-npprcgrqcnlzragglcr.srr";a:2:{i:0;R:26281;i:1;R:9;}s:41:"1230:ncg-npprcgrqcnlzragglcr.vafgehpgvba1";a:2:{i:0;R:26281;i:1;R:9;}s:41:"1230:ncg-npprcgrqcnlzragglcr.vafgehpgvba2";a:2:{i:0;R:26281;i:1;R:9;}s:33:"1230:ncg-npprcgrqcnlzragglcr.ybna";a:2:{i:0;R:26281;i:1;R:9;}s:38:"1230:ncg-npprcgrqcnlzragglcr.ercnlzrag";a:2:{i:0;R:26281;i:1;R:9;}s:35:"1230:ncg-npprcgrqcnlzragglcr.fnivat";a:2:{i:0;R:26281;i:1;R:9;}s:39:"1230:ncg-npprcgrqcnlzragglcr.jvguqenjny";a:2:{i:0;R:26281;i:1;R:9;}s:29:"1230:nf-nppbhagfgnghf.nppbhag";a:2:{i:0;s:12:"out-mifos-as";i:1;R:9;}s:34:"1230:nf-nppbhagfgnghf.nppbhagbjare";a:2:{i:0;R:26296;i:1;R:9;}s:28:"1230:nf-nppbhagfgnghf.nppgvq";a:2:{i:0;R:26296;i:1;R:9;}s:30:"1230:nf-nppbhagfgnghf.nccebirq";a:2:{i:0;R:26296;i:1;R:9;}s:28:"1230:nf-nppbhagfgnghf.oenapu";a:2:{i:0;R:26296;i:1;R:9;}s:28:"1230:nf-nppbhagfgnghf.pnapry";a:2:{i:0;R:26296;i:1;R:9;}s:42:"1230:nf-nppbhagfgnghf.nccebirzhygvcyrybnaf";a:2:{i:0;R:26296;i:1;R:9;}s:28:"1230:nf-nppbhagfgnghf.pyvrag";a:2:{i:0;R:26296;i:1;R:9;}s:34:"1230:nf-nppbhagfgnghf.pbasvezngvba";a:2:{i:0;R:26296;i:1;R:9;}s:35:"1230:nf-nppbhagfgnghf.pheeragfgnghf";a:2:{i:0;R:26296;i:1;R:9;}s:35:"1230:nf-nppbhagfgnghf.qvfohefnyqngr";a:2:{i:0;R:26296;i:1;R:9;}s:30:"1230:nf-nppbhagfgnghf.sbhaqsbe";a:2:{i:0;R:26296;i:1;R:9;}s:40:"1230:nf-nppbhagfgnghf.uvrenepulqryvzvgre";a:2:{i:0;R:26296;i:1;R:9;}s:24:"1230:nf-nppbhagfgnghf.vq";a:2:{i:0;R:26296;i:1;R:9;}s:24:"1230:nf-nppbhagfgnghf.va";a:2:{i:0;R:26296;i:1;R:9;}s:26:"1230:nf-nppbhagfgnghf.ybna";a:2:{i:0;R:26296;i:1;R:9;}s:33:"1230:nf-nppbhagfgnghf.ybnabssvpre";a:2:{i:0;R:26296;i:1;R:9;}s:32:"1230:nf-nppbhagfgnghf.ybnanzbhag";a:2:{i:0;R:26296;i:1;R:9;}s:38:"1230:nf-nppbhagfgnghf.ybnabssvprepbyba";a:2:{i:0;R:26296;i:1;R:9;}s:31:"1230:nf-nppbhagfgnghf.arjfgnghf";a:2:{i:0;R:26296;i:1;R:9;}s:35:"1230:nf-nppbhagfgnghf.aberfhygsbhaq";a:2:{i:0;R:26296;i:1;R:9;}s:26:"1230:nf-nppbhagfgnghf.abgr";a:2:{i:0;R:26296;i:1;R:9;}s:31:"1230:nf-nppbhagfgnghf.erfhygfva";a:2:{i:0;R:26296;i:1;R:9;}s:28:"1230:nf-nppbhagfgnghf.frnepu";a:2:{i:0;R:26296;i:1;R:9;}s:28:"1230:nf-nppbhagfgnghf.fryrpg";a:2:{i:0;R:26296;i:1;R:9;}s:27:"1230:nf-nppbhagfgnghf.fgngr";a:2:{i:0;R:26296;i:1;R:9;}s:35:"1230:nf-nppbhagfgnghf.fgnghfzrffntr";a:2:{i:0;R:26296;i:1;R:9;}s:28:"1230:nf-nppbhagfgnghf.fhozvg";a:2:{i:0;R:26296;i:1;R:9;}s:26:"1230:nf-nppbhagfgnghf.glcr";a:2:{i:0;R:26296;i:1;R:9;}s:34:"1230:nf-nppbhagfgnhgf.frnepuurnqre";a:2:{i:0;R:26296;i:1;R:9;}s:26:"1230:pnfu-pnfusybj.urnqvat";a:2:{i:0;s:18:"out-mifos-cashflow";i:1;R:9;}s:25:"1230:pnfu-pnfusybj.zbaguf";a:2:{i:0;R:26327;i:1;R:9;}s:26:"1230:pnfu-pnfusybj.rkcrafr";a:2:{i:0;R:26327;i:1;R:9;}s:26:"1230:pnfu-pnfusybj.erirahr";a:2:{i:0;R:26327;i:1;R:9;}s:24:"1230:pnfu-pnfusybj.abgrf";a:2:{i:0;R:26327;i:1;R:9;}s:31:"1230:pnfu-pnfusybj.gbgnypncvgny";a:2:{i:0;R:26327;i:1;R:9;}s:33:"1230:pnfu-pnfusybj.gbgnyyvnovyvgl";a:2:{i:0;R:26327;i:1;R:9;}s:25:"1230:pnfu-pnfusybj.fhozvg";a:2:{i:0;R:26327;i:1;R:9;}s:25:"1230:pnfu-pnfusybj.pnapry";a:2:{i:0;R:26327;i:1;R:9;}s:47:"1230:pnfu-pnfusybjsbez.zbaguylpnfusybjf.rkcrafr";a:2:{i:0;R:26327;i:1;R:9;}s:47:"1230:pnfu-pnfusybjsbez.zbaguylpnfusybjf.erirahr";a:2:{i:0;R:26327;i:1;R:9;}s:45:"1230:pnfu-pnfusybjsbez.zbaguylpnfusybjf.abgrf";a:2:{i:0;R:26327;i:1;R:9;}s:69:"1230:pnfu-pnfusybjsbez.phzhyngvirpnfusybj.fubhyq.or.terngre.guna.mreb";a:2:{i:0;R:26327;i:1;R:9;}s:63:"1230:pnfu-pnfusybjsbez.gbgnypncvgny.fubhyq.or.terngre.guna.mreb";a:2:{i:0;R:26327;i:1;R:9;}s:60:"1230:pnfu-pnfusybjsbez.gbgnyyvnovyvgl.fubhyq.or.aba.artngvir";a:2:{i:0;R:26327;i:1;R:9;}s:55:"1230:pnfu-pnfusybjsbez.gbgnypncvgny.fubhyq.abg.or.rzcgl";a:2:{i:0;R:26327;i:1;R:9;}s:57:"1230:pnfu-pnfusybjsbez.gbgnyyvnovyvgl.fubhyq.abg.or.rzcgl";a:2:{i:0;R:26327;i:1;R:9;}s:58:"1230:pnfu-pnfusybjsbez.vaqrogrqarffengvb.zber.guna.nyybjrq";a:2:{i:0;R:26327;i:1;R:9;}s:30:"1230:pnfu-pnfusybjsbez.zrffntr";a:2:{i:0;R:26327;i:1;R:9;}s:34:"1230:pnfu-pnfusybj.fhzznel.urnqvat";a:2:{i:0;R:26327;i:1;R:9;}s:40:"1230:pnfu-pnfusybj.fhzznel.pbyhza.zbaguf";a:2:{i:0;R:26327;i:1;R:9;}s:44:"1230:pnfu-pnfusybj.fhzznel.pbyhza.phzhyngvir";a:2:{i:0;R:26327;i:1;R:9;}s:53:"1230:pnfu-pnfusybj.fhzznel.pbyhza.vafgnyyzragcrezbagu";a:2:{i:0;R:26327;i:1;R:9;}s:63:"1230:pnfu-pnfusybj.fhzznel.pbyhza.vafgnyyzragcrezbagucrepragntr";a:2:{i:0;R:26327;i:1;R:9;}s:39:"1230:pnfu-pnfusybj.fhzznel.pbyhza.abgrf";a:2:{i:0;R:26327;i:1;R:9;}s:32:"1230:pragre-pragre.nffvtapyvragf";a:2:{i:0;s:16:"out-mifos-center";i:1;R:9;}s:34:"1230:pragre-pragre.nppbhagnpgvivgl";a:2:{i:0;R:26353;i:1;R:9;}s:33:"1230:pragre-pragre.nppbhagurnqvat";a:2:{i:0;R:26353;i:1;R:9;}s:33:"1230:pragre-pragre.nppbhagfhzznel";a:2:{i:0;R:26353;i:1;R:9;}s:34:"1230:pragre-pragre.nppbhagfurnqvat";a:2:{i:0;R:26353;i:1;R:9;}s:31:"1230:pragre-pragre.nppbhagfyvax";a:2:{i:0;R:26353;i:1;R:9;}s:22:"1230:pragre-pragre.nqq";a:2:{i:0;R:26353;i:1;R:9;}s:33:"1230:pragre-pragre.nqqvgvbanysrrf";a:2:{i:0;R:26353;i:1;R:9;}s:40:"1230:pragre-pragre.nqqvgvbanysrrfurnqvat";a:2:{i:0;R:26353;i:1;R:9;}s:47:"1230:pragre-pragre.nqqvgvbanyvasbezngvbaurnqvat";a:2:{i:0;R:26353;i:1;R:9;}s:26:"1230:pragre-pragre.nqqerff";a:2:{i:0;R:26353;i:1;R:9;}s:27:"1230:pragre-pragre.nqqerff1";a:2:{i:0;R:26353;i:1;R:9;}s:27:"1230:pragre-pragre.nqqerff2";a:2:{i:0;R:26353;i:1;R:9;}s:27:"1230:pragre-pragre.nqqerff3";a:2:{i:0;R:26353;i:1;R:9;}s:33:"1230:pragre-pragre.nqqerffurnqvat";a:2:{i:0;R:26353;i:1;R:9;}s:44:"1230:pragre-pragre.nqzvavfgengvirsrrfurnqvat";a:2:{i:0;R:26353;i:1;R:9;}s:25:"1230:pragre-pragre.nzbhag";a:2:{i:0;R:26353;i:1;R:9;}s:28:"1230:pragre-pragre.nzbhagqhr";a:2:{i:0;R:26353;i:1;R:9;}s:33:"1230:pragre-pragre.nzbhagqhrpbyba";a:2:{i:0;R:26353;i:1;R:9;}s:32:"1230:pragre-pragre.nzbhagbireqhr";a:2:{i:0;R:26353;i:1;R:9;}s:34:"1230:pragre-pragre.nccylnqwhfgzrag";a:2:{i:0;R:26353;i:1;R:9;}s:31:"1230:pragre-pragre.nccylpunetrf";a:2:{i:0;R:26353;i:1;R:9;}s:31:"1230:pragre-pragre.nccylcnlzrag";a:2:{i:0;R:26353;i:1;R:9;}s:35:"1230:pragre-pragre.nccylgenafnpgvba";a:2:{i:0;R:26353;i:1;R:9;}s:27:"1230:pragre-pragre.nffvtarq";a:2:{i:0;R:26353;i:1;R:9;}s:28:"1230:pragre-pragre.ninvynoyr";a:2:{i:0;R:26353;i:1;R:9;}s:33:"1230:pragre-pragre.oenapucvcryvar";a:2:{i:0;R:26353;i:1;R:9;}s:33:"1230:pragre-pragre.oenapufryrpgrq";a:2:{i:0;R:26353;i:1;R:9;}s:52:"1230:pragre-pragre.pragrepunatrzrzorefuvcvafgehpgvba";a:2:{i:0;R:26353;i:1;R:9;}s:32:"1230:pragre-pragre.pragrepunetrf";a:2:{i:0;R:26353;i:1;R:9;}s:39:"1230:pragre-pragre.pragrepunetrfurnqvat";a:2:{i:0;R:26353;i:1;R:9;}s:39:"1230:pragre-pragre.pragreqrgnvyfurnqvat";a:2:{i:0;R:26353;i:1;R:9;}s:43:"1230:pragre-pragre.pragrevasbezngvbaurnqvat";a:2:{i:0;R:26353;i:1;R:9;}s:29:"1230:pragre-pragre.pragreanzr";a:2:{i:0;R:26353;i:1;R:9;}s:33:"1230:pragre-pragre.pragrecvcryvar";a:2:{i:0;R:26353;i:1;R:9;}s:34:"1230:pragre-pragre.pragrefgnegqngr";a:2:{i:0;R:26353;i:1;R:9;}s:32:"1230:pragre-pragre.punatrybtyvax";a:2:{i:0;R:26353;i:1;R:9;}s:38:"1230:pragre-pragre.punatrfgnghfurnqvat";a:2:{i:0;R:26353;i:1;R:9;}s:46:"1230:pragre-pragre.punatrfgnghfcntrvafgehpgvba";a:2:{i:0;R:26353;i:1;R:9;}s:26:"1230:pragre-pragre.punetrf";a:2:{i:0;R:26353;i:1;R:9;}s:25:"1230:pragre-pragre.pubbfr";a:2:{i:0;R:26353;i:1;R:9;}s:23:"1230:pragre-pragre.pvgl";a:2:{i:0;R:26353;i:1;R:9;}s:32:"1230:pragre-pragre.pyvragpunetrf";a:2:{i:0;R:26353;i:1;R:9;}s:37:"1230:pragre-pragre.pybfrqnppbhagfyvax";a:2:{i:0;R:26353;i:1;R:9;}s:34:"1230:pragre-pragre.pbyyrpgvbafurrg";a:2:{i:0;R:26353;i:1;R:9;}s:24:"1230:pragre-pragre.pbyba";a:2:{i:0;R:26353;i:1;R:9;}s:30:"1230:pragre-pragre.pbaszrffntr";a:2:{i:0;R:26353;i:1;R:9;}s:46:"1230:pragre-pragre.pbasvezngvba.nyyvasbezngvba";a:2:{i:0;R:26353;i:1;R:9;}s:44:"1230:pragre-pragre.pbasvezngvba.vasbezngvba1";a:2:{i:0;R:26353;i:1;R:9;}s:44:"1230:pragre-pragre.pbasvezngvba.vasbezngvba2";a:2:{i:0;R:26353;i:1;R:9;}s:44:"1230:pragre-pragre.pbasvezngvba.vasbezngvba3";a:2:{i:0;R:26353;i:1;R:9;}s:44:"1230:pragre-pragre.pbasvezngvba.anzrflfgrzvq";a:2:{i:0;R:26353;i:1;R:9;}s:40:"1230:pragre-pragre.pbasvezngvba.arkgfgrc";a:2:{i:0;R:26353;i:1;R:9;}s:36:"1230:pragre-pragre.pbasvezngvba.abgr";a:2:{i:0;R:26353;i:1;R:9;}s:38:"1230:pragre-pragre.pbasvezngvbazrffntr";a:2:{i:0;R:26353;i:1;R:9;}s:26:"1230:pragre-pragre.pbhagel";a:2:{i:0;R:26353;i:1;R:9;}s:38:"1230:pragre-pragre.perngrrqvgcntrgvgyr";a:2:{i:0;R:26353;i:1;R:9;}s:33:"1230:pragre-pragre.perngrtebhcarj";a:2:{i:0;R:26353;i:1;R:9;}s:38:"1230:pragre-pragre.perngryvaxarjpragre";a:2:{i:0;R:26353;i:1;R:9;}s:28:"1230:pragre-pragre.perngrarj";a:2:{i:0;R:26353;i:1;R:9;}s:35:"1230:pragre-pragre.perngrarjnppbhag";a:2:{i:0;R:26353;i:1;R:9;}s:34:"1230:pragre-pragre.perngrarjpragre";a:2:{i:0;R:26353;i:1;R:9;}s:38:"1230:pragre-pragre.perngrarjpragreyvax";a:2:{i:0;R:26353;i:1;R:9;}s:46:"1230:pragre-pragre.perngrcntrpnapryvafgehpgvba";a:2:{i:0;R:26353;i:1;R:9;}s:40:"1230:pragre-pragre.perngrcntrvafgehpgvba";a:2:{i:0;R:26353;i:1;R:9;}s:34:"1230:pragre-pragre.perngrcntrgvgyr";a:2:{i:0;R:26353;i:1;R:9;}s:45:"1230:pragre-pragre.perngrcerivrjrqvgcntrgvgyr";a:2:{i:0;R:26353;i:1;R:9;}s:47:"1230:pragre-pragre.perngrcerivrjcntrvafgehpgvba";a:2:{i:0;R:26353;i:1;R:9;}s:41:"1230:pragre-pragre.perngrcerivrjcntrgvgyr";a:2:{i:0;R:26353;i:1;R:9;}s:39:"1230:pragre-pragre.pheeragfgnghfurnqvat";a:2:{i:0;R:26353;i:1;R:9;}s:29:"1230:pragre-pragre.qrgnvyfabj";a:2:{i:0;R:26353;i:1;R:9;}s:23:"1230:pragre-pragre.rqvg";a:2:{i:0;R:26353;i:1;R:9;}s:40:"1230:pragre-pragre.rqvgpragreqrgnvyfyvax";a:2:{i:0;R:26353;i:1;R:9;}s:44:"1230:pragre-pragre.rqvgpragrevasbezngvbayvax";a:2:{i:0;R:26353;i:1;R:9;}s:39:"1230:pragre-pragre.rqvgpragrefgnghfyvax";a:2:{i:0;R:26353;i:1;R:9;}s:34:"1230:pragre-pragre.rqvgvasbezngvba";a:2:{i:0;R:26353;i:1;R:9;}s:45:"1230:pragre-pragre.rqvgvasbezngvbavafgehpgvba";a:2:{i:0;R:26353;i:1;R:9;}s:44:"1230:pragre-pragre.rqvgcntrpnapryvafgehpgvba";a:2:{i:0;R:26353;i:1;R:9;}s:45:"1230:pragre-pragre.rqvgcntrpnapryvafgehpgvba1";a:2:{i:0;R:26353;i:1;R:9;}s:45:"1230:pragre-pragre.rqvgcntrpnapryvafgehpgvba2";a:2:{i:0;R:26353;i:1;R:9;}s:24:"1230:pragre-pragre.ragre";a:2:{i:0;R:26353;i:1;R:9;}s:40:"1230:pragre-pragre.ragrepragrevasbezngba";a:2:{i:0;R:26353;i:1;R:9;}s:29:"1230:pragre-pragre.rkgreanyvq";a:2:{i:0;R:26353;i:1;R:9;}s:33:"1230:pragre-pragre.rkgreanyvqvasb";a:2:{i:0;R:26353;i:1;R:9;}s:26:"1230:pragre-pragre.srrglcr";a:2:{i:0;R:26353;i:1;R:9;}s:35:"1230:pragre-pragre.svryqvafgehpgvba";a:2:{i:0;R:26353;i:1;R:9;}s:31:"1230:pragre-pragre.tebhcpunetrf";a:2:{i:0;R:26353;i:1;R:9;}s:25:"1230:pragre-pragre.tebhcf";a:2:{i:0;R:26353;i:1;R:9;}s:30:"1230:pragre-pragre.tebhcfyvax1";a:2:{i:0;R:26353;i:1;R:9;}s:30:"1230:pragre-pragre.tebhcfyvax2";a:2:{i:0;R:26353;i:1;R:9;}s:30:"1230:pragre-pragre.tebhcfyvax3";a:2:{i:0;R:26353;i:1;R:9;}s:30:"1230:pragre-pragre.vasbezngvba";a:2:{i:0;R:26353;i:1;R:9;}s:33:"1230:pragre-pragre.vafgehpgvbafrg";a:2:{i:0;R:26353;i:1;R:9;}s:26:"1230:pragre-pragre.ybnabss";a:2:{i:0;R:26353;i:1;R:9;}s:30:"1230:pragre-pragre.ybnabssvpre";a:2:{i:0;R:26353;i:1;R:9;}s:36:"1230:pragre-pragre.ybpngvbabszrrgvat";a:2:{i:0;R:26353;i:1;R:9;}s:25:"1230:pragre-pragre.znantr";a:2:{i:0;R:26353;i:1;R:9;}s:34:"1230:pragre-pragre.znantrarjpragre";a:2:{i:0;R:26353;i:1;R:9;}s:34:"1230:pragre-pragre.zrrgvatfpurqhyr";a:2:{i:0;R:26353;i:1;R:9;}s:38:"1230:pragre-pragre.zrrgvatfpurqhyryvax";a:2:{i:0;R:26353;i:1;R:9;}s:34:"1230:pragre-pragre.zrrgvatfurnqvat";a:2:{i:0;R:26353;i:1;R:9;}s:31:"1230:pragre-pragre.zrrgvatfyvax";a:2:{i:0;R:26353;i:1;R:9;}s:37:"1230:pragre-pragre.zrrgvatffhournqvat";a:2:{i:0;R:26353;i:1;R:9;}s:29:"1230:pragre-pragre.zrzorefuvc";a:2:{i:0;R:26353;i:1;R:9;}s:33:"1230:pragre-pragre.zsvwbvavatqngr";a:2:{i:0;R:26353;i:1;R:9;}s:23:"1230:pragre-pragre.anzr";a:2:{i:0;R:26353;i:1;R:9;}s:31:"1230:pragre-pragre.anzrerdhverq";a:2:{i:0;R:26353;i:1;R:9;}s:28:"1230:pragre-pragre.arjfgnghf";a:2:{i:0;R:26353;i:1;R:9;}s:21:"1230:pragre-pragre.ab";a:2:{i:0;R:26353;i:1;R:9;}s:27:"1230:pragre-pragre.abtebhcf";a:2:{i:0;R:26353;i:1;R:9;}s:30:"1230:pragre-pragre.abbspyvragf";a:2:{i:0;R:26353;i:1;R:9;}s:29:"1230:pragre-pragre.abbstebhcf";a:2:{i:0;R:26353;i:1;R:9;}s:23:"1230:pragre-pragre.abgr";a:2:{i:0;R:26353;i:1;R:9;}s:28:"1230:pragre-pragre.abgrfyvax";a:2:{i:0;R:26353;i:1;R:9;}s:40:"1230:pragre-pragre.bssvpvnygvgyrfurnqvat";a:2:{i:0;R:26353;i:1;R:9;}s:44:"1230:pragre-pragre.cresbeznapruvfgbelurnqvat";a:2:{i:0;R:26353;i:1;R:9;}s:30:"1230:pragre-pragre.crevbqvpvgl";a:2:{i:0;R:26353;i:1;R:9;}s:34:"1230:pragre-pragre.cbegsbyvbngevfx";a:2:{i:0;R:26353;i:1;R:9;}s:29:"1230:pragre-pragre.cbfgnypbqr";a:2:{i:0;R:26353;i:1;R:9;}s:26:"1230:pragre-pragre.cerivrj";a:2:{i:0;R:26353;i:1;R:9;}s:43:"1230:pragre-pragre.cerivrjvasbezngvbaprager";a:2:{i:0;R:26353;i:1;R:9;}s:40:"1230:pragre-pragre.erpragnppbhagnpgvivgl";a:2:{i:0;R:26353;i:1;R:9;}s:30:"1230:pragre-pragre.erpragabgrf";a:2:{i:0;R:26353;i:1;R:9;}s:39:"1230:pragre-pragre.erpheevatnppbhagsrrf";a:2:{i:0;R:26353;i:1;R:9;}s:31:"1230:pragre-pragre.erivrjfhozvg";a:2:{i:0;R:26353;i:1;R:9;}s:37:"1230:pragre-pragre.fnivatfnppbhagyvax";a:2:{i:0;R:26353;i:1;R:9;}s:33:"1230:pragre-pragre.fnivatfurnqvat";a:2:{i:0;R:26353;i:1;R:9;}s:39:"1230:pragre-pragre.frnepupragrecvcryvar";a:2:{i:0;R:26353;i:1;R:9;}s:38:"1230:pragre-pragre.frneputebhccvcryvar";a:2:{i:0;R:26353;i:1;R:9;}s:32:"1230:pragre-pragre.frnepuurnqvat";a:2:{i:0;R:26353;i:1;R:9;}s:37:"1230:pragre-pragre.frnepuvafgehpgvbaf";a:2:{i:0;R:26353;i:1;R:9;}s:29:"1230:pragre-pragre.frnepuzft1";a:2:{i:0;R:26353;i:1;R:9;}s:35:"1230:pragre-pragre.frnepuerfhyganzr";a:2:{i:0;R:26353;i:1;R:9;}s:47:"1230:pragre-pragre.frnepuerfhygcntrvafgehpgvbaf";a:2:{i:0;R:26353;i:1;R:9;}s:44:"1230:pragre-pragre.frnepufryrpgpragreurnqvat";a:2:{i:0;R:26353;i:1;R:9;}s:27:"1230:pragre-pragre.fryrpgrq";a:2:{i:0;R:26353;i:1;R:9;}s:24:"1230:pragre-pragre.fgngr";a:2:{i:0;R:26353;i:1;R:9;}s:25:"1230:pragre-pragre.fgnghf";a:2:{i:0;R:26353;i:1;R:9;}s:26:"1230:pragre-pragre.fgnghf1";a:2:{i:0;R:26353;i:1;R:9;}s:29:"1230:pragre-pragre.fheirlyvax";a:2:{i:0;R:26353;i:1;R:9;}s:33:"1230:pragre-pragre.fheirlfurnqvat";a:2:{i:0;R:26353;i:1;R:9;}s:27:"1230:pragre-pragre.flfgrzvq";a:2:{i:0;R:26353;i:1;R:9;}s:28:"1230:pragre-pragre.gryrcubar";a:2:{i:0;R:26353;i:1;R:9;}s:24:"1230:pragre-pragre.gbgny";a:2:{i:0;R:26353;i:1;R:9;}s:37:"1230:pragre-pragre.gbgnyybnacbegsbyvb";a:2:{i:0;R:26353;i:1;R:9;}s:31:"1230:pragre-pragre.gbgnyfnivatf";a:2:{i:0;R:26353;i:1;R:9;}s:37:"1230:pragre-pragre.genafnpgvbauvfgbel";a:2:{i:0;R:26353;i:1;R:9;}s:34:"1230:pragre-pragre.hcpbzvatpunetrf";a:2:{i:0;R:26353;i:1;R:9;}s:34:"1230:pragre-pragre.hfrevasbezngvba";a:2:{i:0;R:26353;i:1;R:9;}s:23:"1230:pragre-pragre.ivrj";a:2:{i:0;R:26353;i:1;R:9;}s:40:"1230:pragre-pragre.ivrjpragreqrgnvyfyvax";a:2:{i:0;R:26353;i:1;R:9;}s:34:"1230:pragre-pragre.ivrjqrgnvyfvasb";a:2:{i:0;R:26353;i:1;R:9;}s:30:"1230:pragre-pragre.ivrjqrgnvyf";a:2:{i:0;R:26353;i:1;R:9;}s:22:"1230:pragre-pragre.npp";a:2:{i:0;R:26353;i:1;R:9;}s:26:"1230:pragre-pragre.nppbhag";a:2:{i:0;R:26353;i:1;R:9;}s:36:"1230:pragre-pragre.onpxgbqrgnvyfcntr";a:2:{i:0;R:26353;i:1;R:9;}s:26:"1230:pragre-pragre.onynapr";a:2:{i:0;R:26353;i:1;R:9;}s:32:"1230:pragre-pragre.oenapubssvprf";a:2:{i:0;R:26353;i:1;R:9;}s:36:"1230:pragre-pragre.pnapryvafgehpgvba";a:2:{i:0;R:26353;i:1;R:9;}s:25:"1230:pragre-pragre.punatr";a:2:{i:0;R:26353;i:1;R:9;}s:48:"1230:pragre-pragre.punatrpragrezrzorefuvcurnqvat";a:2:{i:0;R:26353;i:1;R:9;}s:52:"1230:pragre-pragre.punatrpragrezrzorefuvcvafgehpgvba";a:2:{i:0;R:26353;i:1;R:9;}s:53:"1230:pragre-pragre.punatrpragrezrzorefuvcvafgehpgvba1";a:2:{i:0;R:26353;i:1;R:9;}s:53:"1230:pragre-pragre.punatrpragrezrzorefuvcvafgehpgvba2";a:2:{i:0;R:26353;i:1;R:9;}s:53:"1230:pragre-pragre.punatrpragrezrzorefuvcvafgehpgvba3";a:2:{i:0;R:26353;i:1;R:9;}s:28:"1230:pragre-pragre.punatrybt";a:2:{i:0;R:26353;i:1;R:9;}s:35:"1230:pragre-pragre.pyvpxvafgehpgvba";a:2:{i:0;R:26353;i:1;R:9;}s:23:"1230:pragre-pragre.qnfu";a:2:{i:0;R:26353;i:1;R:9;}s:23:"1230:pragre-pragre.qngr";a:2:{i:0;R:26353;i:1;R:9;}s:30:"1230:pragre-pragre.qrfpevcgvba";a:2:{i:0;R:26353;i:1;R:9;}s:26:"1230:pragre-pragre.qrgnvyf";a:2:{i:0;R:26353;i:1;R:9;}s:25:"1230:pragre-pragre.unfubs";a:2:{i:0;R:26353;i:1;R:9;}s:40:"1230:pragre-pragre.anzrpunatrvafgehpgvba";a:2:{i:0;R:26353;i:1;R:9;}s:28:"1230:pragre-pragre.cbegsbyvb";a:2:{i:0;R:26353;i:1;R:9;}s:27:"1230:pragre-pragre.cbfgrqol";a:2:{i:0;R:26353;i:1;R:9;}s:29:"1230:pragre-pragre.erpperqngr";a:2:{i:0;R:26353;i:1;R:9;}s:25:"1230:pragre-pragre.erzbir";a:2:{i:0;R:26353;i:1;R:9;}s:20:"1230:pragre-pragre.f";a:2:{i:0;R:26353;i:1;R:9;}s:25:"1230:pragre-pragre.fryrpg";a:2:{i:0;R:26353;i:1;R:9;}s:24:"1230:pragre-pragre.jnvir";a:2:{i:0;R:26353;i:1;R:9;}s:42:"1230:pragre-phfgbzre.npgvirnppbhagfcerfrag";a:2:{i:0;R:26353;i:1;R:9;}s:35:"1230:pragre-phfgbzre.oenapuvanpgvir";a:2:{i:0;R:26353;i:1;R:9;}s:33:"1230:pragre-phfgbzre.perngrsnvyrq";a:2:{i:0;R:26353;i:1;R:9;}s:42:"1230:pragre-phfgbzre.qhcyvpngrphfgbzreanzr";a:2:{i:0;R:26353;i:1;R:9;}s:33:"1230:pragre-phfgbzre.srrfvanpgvir";a:2:{i:0;R:26353;i:1;R:9;}s:40:"1230:pragre-phfgbzre.vapbzcyrgrpurpxyvfg";a:2:{i:0;R:26353;i:1;R:9;}s:35:"1230:pragre-phfgbzre.vainyvqirefvba";a:2:{i:0;R:26353;i:1;R:9;}s:40:"1230:pragre-phfgbzre.ybnabssvprevanpgvir";a:2:{i:0;R:26353;i:1;R:9;}s:36:"1230:pragre-phfgbzre.zrrgvaterdhverq";a:2:{i:0;R:26353;i:1;R:9;}s:41:"1230:pragre-phfgbzre.fgngrpunatrrkprcgvba";a:2:{i:0;R:26353;i:1;R:9;}s:40:"1230:pragre-phfgbzre.fgnghfabgrferdhverq";a:2:{i:0;R:26353;i:1;R:9;}s:33:"1230:pragre-phfgbzre.hcqngrsnvyrq";a:2:{i:0;R:26353;i:1;R:9;}s:33:"1230:pragre-qhcyvpngrsrrrkprcgvba";a:2:{i:0;R:26353;i:1;R:9;}s:31:"1230:pragre-sngnyreeberkprcgvba";a:2:{i:0;R:26353;i:1;R:9;}s:37:"1230:pragre-ybnabssvpreoynaxrkprcgvba";a:2:{i:0;R:26353;i:1;R:9;}s:43:"1230:pragre-ybnabssvpreabgnffvtarqrkprcgvba";a:2:{i:0;R:26353;i:1;R:9;}s:40:"1230:pragre-ybnabssvpreerdhverqrkprcgvba";a:2:{i:0;R:26353;i:1;R:9;}s:33:"1230:pragre-anzrerdhverqrkprcgvba";a:2:{i:0;R:26353;i:1;R:9;}s:35:"1230:pragre-fgnghferdhverqrkprcgvba";a:2:{i:0;R:26353;i:1;R:9;}s:25:"1230:pragre-ohggba.frnepu";a:2:{i:0;R:26353;i:1;R:9;}s:25:"1230:pragre-ohggba.pnapry";a:2:{i:0;R:26353;i:1;R:9;}s:26:"1230:pragre-ohggba.cerivrj";a:2:{i:0;R:26353;i:1;R:9;}s:27:"1230:pragre-ohggba.cerivbhf";a:2:{i:0;R:26353;i:1;R:9;}s:33:"1230:pragre-ohggba.cerivbhffgnghf";a:2:{i:0;R:26353;i:1;R:9;}s:25:"1230:pragre-ohggba.fhozvg";a:2:{i:0;R:26353;i:1;R:9;}s:34:"1230:pragre-pragre.frrnyyabgrfyvax";a:2:{i:0;R:26353;i:1;R:9;}s:36:"1230:pragre-ps.ybbxhcragvgl.ragvglvq";a:2:{i:0;R:26353;i:1;R:9;}s:38:"1230:pragre-reebe.npgvivgl.abg.nyybjrq";a:2:{i:0;R:26353;i:1;R:9;}s:34:"1230:pragre-reebe.haxabjarkprcgvba";a:2:{i:0;R:26353;i:1;R:9;}s:37:"1230:pragre-reebe.irefvbaabqbabgzngpu";a:2:{i:0;R:26353;i:1;R:9;}s:45:"1230:pragre-reebef.phfgbzre.qhcyvpngrphfgbzre";a:2:{i:0;R:26353;i:1;R:9;}s:48:"1230:pragre-reebef.phfgbzre.qhcyvpngrcrevbqvpsrr";a:2:{i:0;R:26353;i:1;R:9;}s:48:"1230:pragre-reebef.phfgbzre.srrserdhraplzvfzngpu";a:2:{i:0;R:26353;i:1;R:9;}s:51:"1230:pragre-reebef.phfgbzre.fcrpvslphfgbzsvryqinyhr";a:2:{i:0;R:26353;i:1;R:9;}s:43:"1230:pragre-reebef.phfgbzre.phfgbzqngrsvryq";a:2:{i:0;R:26353;i:1;R:9;}s:44:"1230:pragre-reebef.phfgbzre.fcrpvslsrrnzbhag";a:2:{i:0;R:26353;i:1;R:9;}s:46:"1230:pragre-reebef.phfgbzre.fcrpvslybnabssvpre";a:2:{i:0;R:26353;i:1;R:9;}s:42:"1230:pragre-reebef.phfgbzre.fcrpvslzrrgvat";a:2:{i:0;R:26353;i:1;R:9;}s:39:"1230:pragre-reebef.phfgbzre.fcrpvslanzr";a:2:{i:0;R:26353;i:1;R:9;}s:22:"1230:pragre-reebef.srr";a:2:{i:0;R:26353;i:1;R:9;}s:26:"1230:pragre-reebef.trarevp";a:2:{i:0;R:26353;i:1;R:9;}s:32:"1230:pragre-reebef.vainyvqsrrnzg";a:2:{i:0;R:26353;i:1;R:9;}s:39:"1230:pragre-reebef.zsvwbvavatqngrarrqrq";a:2:{i:0;R:26353;i:1;R:9;}s:40:"1230:pragre-reebef.vainyvqzsvwbvavatqngr";a:2:{i:0;R:26353;i:1;R:9;}s:28:"1230:pragre-reebef.znaqngbel";a:2:{i:0;R:26353;i:1;R:9;}s:26:"1230:pragre-reebef.znfxzft";a:2:{i:0;R:26353;i:1;R:9;}s:28:"1230:pragre-reebef.znkyratgu";a:2:{i:0;R:26353;i:1;R:9;}s:33:"1230:pragre-reebef.abfrnepufgevat";a:2:{i:0;R:26353;i:1;R:9;}s:27:"1230:pragre-reebef.erdhverq";a:2:{i:0;R:26353;i:1;R:9;}s:38:"1230:pragre-reebef.erdhverqphfgbzsvryq";a:2:{i:0;R:26353;i:1;R:9;}s:52:"1230:pragre-rkprcgvba.senzrjbex.pbapheeraplrkprcgvba";a:2:{i:0;R:26353;i:1;R:9;}s:53:"1230:pragre-rkprcgvba.senzrjbex.qbhoyrfhozvgrkprcgvba";a:2:{i:0;R:26353;i:1;R:9;}s:60:"1230:pragre-rkprcgvba.senzrjbex.svryqpbasvthengvba.znaqngbel";a:2:{i:0;R:26353;i:1;R:9;}s:45:"1230:pst-pbasvthengvba.ohfvarffjbexnpgvivgvrf";a:2:{i:0;s:13:"out-mifos-cfg";i:1;R:9;}s:30:"1230:pst-pbasvthengvba.zrrgvat";a:2:{i:0;R:26587;i:1;R:9;}s:29:"1230:pst-pbasvthengvba.npgvir";a:2:{i:0;R:26587;i:1;R:9;}s:37:"1230:pst-pbasvthengvba.npgvironqfgnaq";a:2:{i:0;R:26587;i:1;R:9;}s:38:"1230:pst-pbasvthengvba.npgvirtbbqfgnaq";a:2:{i:0;R:26587;i:1;R:9;}s:26:"1230:pst-pbasvthengvba.nqq";a:2:{i:0;R:26587;i:1;R:9;}s:31:"1230:pst-pbasvthengvba.nqq_rqvg";a:2:{i:0;R:26587;i:1;R:9;}s:43:"1230:pst-pbasvthengvba.nqq_rqvgybbxhcbcgvba";a:2:{i:0;R:26587;i:1;R:9;}s:44:"1230:pst-pbasvthengvba.nqq_rqvgybbxhcbcgvbaf";a:2:{i:0;R:26587;i:1;R:9;}s:36:"1230:pst-pbasvthengvba.nqq_arj_svryq";a:2:{i:0;R:26587;i:1;R:9;}s:47:"1230:pst-pbasvthengvba.nqqvgvbany_svryqf_qrgnvy";a:2:{i:0;R:26587;i:1;R:9;}s:52:"1230:pst-pbasvthengvba.nqqvgvbany_svryqf_vasbezngvba";a:2:{i:0;R:26587;i:1;R:9;}s:30:"1230:pst-pbasvthengvba.nqqerff";a:2:{i:0;R:26587;i:1;R:9;}s:31:"1230:pst-pbasvthengvba.nqqerff1";a:2:{i:0;R:26587;i:1;R:9;}s:31:"1230:pst-pbasvthengvba.nqqerff2";a:2:{i:0;R:26587;i:1;R:9;}s:31:"1230:pst-pbasvthengvba.nqqerff3";a:2:{i:0;R:26587;i:1;R:9;}s:28:"1230:pst-pbasvthengvba.nqzva";a:2:{i:0;R:26587;i:1;R:9;}s:31:"1230:pst-pbasvthengvba.nccebirq";a:2:{i:0;R:26587;i:1;R:9;}s:33:"1230:pst-pbasvthengvba.nernbssvpr";a:2:{i:0;R:26587;i:1;R:9;}s:32:"1230:pst-pbasvthengvba.nffvtavat";a:2:{i:0;R:26587;i:1;R:9;}s:35:"1230:pst-pbasvthengvba.oenapubssvpr";a:2:{i:0;R:26587;i:1;R:9;}s:32:"1230:pst-pbasvthengvba.ohyxragel";a:2:{i:0;R:26587;i:1;R:9;}s:39:"1230:pst-pbasvthengvba.ohfvarffnpgvivgl";a:2:{i:0;R:26587;i:1;R:9;}s:29:"1230:pst-pbasvthengvba.pnapry";a:2:{i:0;R:26587;i:1;R:9;}s:27:"1230:pst-pbasvthengvba.pnfu";a:2:{i:0;R:26587;i:1;R:9;}s:31:"1230:pst-pbasvthengvba.pngrtbel";a:2:{i:0;R:26587;i:1;R:9;}s:29:"1230:pst-pbasvthengvba.pragre";a:2:{i:0;R:26587;i:1;R:9;}s:28:"1230:pst-pbasvthengvba.purpx";a:2:{i:0;R:26587;i:1;R:9;}s:34:"1230:pst-pbasvthengvba.pvgvmrafuvc";a:2:{i:0;R:26587;i:1;R:9;}s:27:"1230:pst-pbasvthengvba.pvgl";a:2:{i:0;R:26587;i:1;R:9;}s:29:"1230:pst-pbasvthengvba.pyvrag";a:2:{i:0;R:26587;i:1;R:9;}s:31:"1230:pst-pbasvthengvba.pyvragvq";a:2:{i:0;R:26587;i:1;R:9;}s:30:"1230:pst-pbasvthengvba.pyvragf";a:2:{i:0;R:26587;i:1;R:9;}s:29:"1230:pst-pbasvthengvba.pybfrq";a:2:{i:0;R:26587;i:1;R:9;}s:36:"1230:pst-pbasvthengvba.pybfrboyvtzrg";a:2:{i:0;R:26587;i:1;R:9;}s:33:"1230:pst-pbasvthengvba.pybfrerfpu";a:2:{i:0;R:26587;i:1;R:9;}s:36:"1230:pst-pbasvthengvba.pybfrjevgrbss";a:2:{i:0;R:26587;i:1;R:9;}s:37:"1230:pst-pbasvthengvba.pbyyngrenyglcr";a:2:{i:0;R:26587;i:1;R:9;}s:42:"1230:pst-pbasvthengvba.pbyyngrenyglcrabgrf";a:2:{i:0;R:26587;i:1;R:9;}s:30:"1230:pst-pbasvthengvba.pbhagel";a:2:{i:0;R:26587;i:1;R:9;}s:32:"1230:pst-pbasvthengvba.qngn_glcr";a:2:{i:0;R:26587;i:1;R:9;}s:36:"1230:pst-pbasvthengvba.qrsnhyg_inyhr";a:2:{i:0;R:26587;i:1;R:9;}s:29:"1230:pst-pbasvthengvba.qrsvar";a:2:{i:0;R:26587;i:1;R:9;}s:47:"1230:pst-pbasvthengvba.qrsvar_nqqvgvbany_svryqf";a:2:{i:0;R:26587;i:1;R:9;}s:45:"1230:pst-pbasvthengvba.qrsvaruvqqraznaqsvryqf";a:2:{i:0;R:26587;i:1;R:9;}s:35:"1230:pst-pbasvthengvba.qrsvarynoryf";a:2:{i:0;R:26587;i:1;R:9;}s:42:"1230:pst-pbasvthengvba.qrsvarybbxhcbcgvbaf";a:2:{i:0;R:26587;i:1;R:9;}s:27:"1230:pst-pbasvthengvba.rqvg";a:2:{i:0;R:26587;i:1;R:9;}s:44:"1230:pst-pbasvthengvba.rqvg_nqqvgvbany_svryq";a:2:{i:0;R:26587;i:1;R:9;}s:45:"1230:pst-pbasvthengvba.rqvg_nqqvgvbany_svryqf";a:2:{i:0;R:26587;i:1;R:9;}s:37:"1230:pst-pbasvthengvba.rqhpngvbayriry";a:2:{i:0;R:26587;i:1;R:9;}s:58:"1230:pst-pbasvthengvba.ragre_nqqvgvbany_svryqf_vasbezngvba";a:2:{i:0;R:26587;i:1;R:9;}s:32:"1230:pst-pbasvthengvba.rguavpvgl";a:2:{i:0;R:26587;i:1;R:9;}s:33:"1230:pst-pbasvthengvba.rkgreanyvq";a:2:{i:0;R:26587;i:1;R:9;}s:36:"1230:pst-pbasvthengvba.snzvylqrgnvyf";a:2:{i:0;R:26587;i:1;R:9;}s:29:"1230:pst-pbasvthengvba.svryqf";a:2:{i:0;R:26587;i:1;R:9;}s:29:"1230:pst-pbasvthengvba.tbigvq";a:2:{i:0;R:26587;i:1;R:9;}s:36:"1230:pst-pbasvthengvba.tenprnyyercnl";a:2:{i:0;R:26587;i:1;R:9;}s:33:"1230:pst-pbasvthengvba.tenprglcrf";a:2:{i:0;R:26587;i:1;R:9;}s:28:"1230:pst-pbasvthengvba.tebhc";a:2:{i:0;R:26587;i:1;R:9;}s:34:"1230:pst-pbasvthengvba.unaqvpnccrq";a:2:{i:0;R:26587;i:1;R:9;}s:33:"1230:pst-pbasvthengvba.urnqbssvpr";a:2:{i:0;R:26587;i:1;R:9;}s:39:"1230:pst-pbasvthengvba.uvqqraznaqsvryqf";a:2:{i:0;R:26587;i:1;R:9;}s:27:"1230:pst-pbasvthengvba.uvqr";a:2:{i:0;R:26587;i:1;R:9;}s:31:"1230:pst-pbasvthengvba.vanpgvir";a:2:{i:0;R:26587;i:1;R:9;}s:35:"1230:pst-pbasvthengvba.vafgehpgvba1";a:2:{i:0;R:26587;i:1;R:9;}s:35:"1230:pst-pbasvthengvba.vafgehpgvba2";a:2:{i:0;R:26587;i:1;R:9;}s:31:"1230:pst-pbasvthengvba.vagrerfg";a:2:{i:0;R:26587;i:1;R:9;}s:28:"1230:pst-pbasvthengvba.ynory";a:2:{i:0;R:26587;i:1;R:9;}s:29:"1230:pst-pbasvthengvba.ynoryf";a:2:{i:0;R:26587;i:1;R:9;}s:27:"1230:pst-pbasvthengvba.ybna";a:2:{i:0;R:26587;i:1;R:9;}s:40:"1230:pst-pbasvthengvba.ybnanppbhagsvryqf";a:2:{i:0;R:26587;i:1;R:9;}s:28:"1230:pst-pbasvthengvba.ybnaf";a:2:{i:0;R:26587;i:1;R:9;}s:36:"1230:pst-pbasvthengvba.ybbxhcbcgvbaf";a:2:{i:0;R:26587;i:1;R:9;}s:34:"1230:pst-pbasvthengvba.ybbxhcinyhr";a:2:{i:0;R:26587;i:1;R:9;}s:32:"1230:pst-pbasvthengvba.znaqngbel";a:2:{i:0;R:26587;i:1;R:9;}s:35:"1230:pst-pbasvthengvba.znaqngbel_ab";a:2:{i:0;R:26587;i:1;R:9;}s:36:"1230:pst-pbasvthengvba.znaqngbel_lrf";a:2:{i:0;R:26587;i:1;R:9;}s:36:"1230:pst-pbasvthengvba.znevgnyfgnghf";a:2:{i:0;R:26587;i:1;R:9;}s:33:"1230:pst-pbasvthengvba.zvqqyranzr";a:2:{i:0;R:26587;i:1;R:9;}s:27:"1230:pst-pbasvthengvba.zvfp";a:2:{i:0;R:26587;i:1;R:9;}s:27:"1230:pst-pbasvthengvba.abar";a:2:{i:0;R:26587;i:1;R:9;}s:29:"1230:pst-pbasvthengvba.bssvpr";a:2:{i:0;R:26587;i:1;R:9;}s:33:"1230:pst-pbasvthengvba.bssvpruvre";a:2:{i:0;R:26587;i:1;R:9;}s:35:"1230:pst-pbasvthengvba.bssvpregvgyr";a:2:{i:0;R:26587;i:1;R:9;}s:29:"1230:pst-pbasvthengvba.baubyq";a:2:{i:0;R:26587;i:1;R:9;}s:34:"1230:pst-pbasvthengvba.cnegvnynccy";a:2:{i:0;R:26587;i:1;R:9;}s:35:"1230:pst-pbasvthengvba.cnlzragzbqrf";a:2:{i:0;R:26587;i:1;R:9;}s:34:"1230:pst-pbasvthengvba.craqvatncce";a:2:{i:0;R:26587;i:1;R:9;}s:35:"1230:pst-pbasvthengvba.crefbanyvasb";a:2:{i:0;R:26587;i:1;R:9;}s:32:"1230:pst-pbasvthengvba.crefbaary";a:2:{i:0;R:26587;i:1;R:9;}s:34:"1230:pst-pbasvthengvba.cubarahzore";a:2:{i:0;R:26587;i:1;R:9;}s:28:"1230:pst-pbasvthengvba.cubgb";a:2:{i:0;R:26587;i:1;R:9;}s:34:"1230:pst-pbasvthengvba.cyrnfr_abgr";a:2:{i:0;R:26587;i:1;R:9;}s:33:"1230:pst-pbasvthengvba.cbfgnypbqr";a:2:{i:0;R:26587;i:1;R:9;}s:36:"1230:pst-pbasvthengvba.cbireglfgnghf";a:2:{i:0;R:26587;i:1;R:9;}s:31:"1230:pst-pbasvthengvba.ceqglcrf";a:2:{i:0;R:26587;i:1;R:9;}s:30:"1230:pst-pbasvthengvba.cerivrj";a:2:{i:0;R:26587;i:1;R:9;}s:48:"1230:pst-pbasvthengvba.cerivrj_nqqvgvbany_svryqf";a:2:{i:0;R:26587;i:1;R:9;}s:42:"1230:pst-pbasvthengvba.cerivrj_vafgehpgvba";a:2:{i:0;R:26587;i:1;R:9;}s:32:"1230:pst-pbasvthengvba.cevatenpr";a:2:{i:0;R:26587;i:1;R:9;}s:31:"1230:pst-pbasvthengvba.cebqhpgf";a:2:{i:0;R:26587;i:1;R:9;}s:36:"1230:pst-pbasvthengvba.checbfrbsybna";a:2:{i:0;R:26587;i:1;R:9;}s:36:"1230:pst-pbasvthengvba.erprvcgvqqngr";a:2:{i:0;R:26587;i:1;R:9;}s:32:"1230:pst-pbasvthengvba.ertbssvpr";a:2:{i:0;R:26587;i:1;R:9;}s:29:"1230:pst-pbasvthengvba.erivrj";a:2:{i:0;R:26587;i:1;R:9;}s:38:"1230:pst-pbasvthengvba.erivrjnaqfhozvg";a:2:{i:0;R:26587;i:1;R:9;}s:33:"1230:pst-pbasvthengvba.fnyhgngvba";a:2:{i:0;R:26587;i:1;R:9;}s:30:"1230:pst-pbasvthengvba.fnivatf";a:2:{i:0;R:26587;i:1;R:9;}s:37:"1230:pst-pbasvthengvba.frpbaqynfganzr";a:2:{i:0;R:26587;i:1;R:9;}s:38:"1230:pst-pbasvthengvba.fryrpg_pngrtbel";a:2:{i:0;R:26587;i:1;R:9;}s:38:"1230:pst-pbasvthengvba.frdhrapr_ahzore";a:2:{i:0;R:26587;i:1;R:9;}s:34:"1230:pst-pbasvthengvba.fbhepr_shaq";a:2:{i:0;R:26587;i:1;R:9;}s:46:"1230:pst-pbasvthengvba.fcbhfrsngurevasbezngvba";a:2:{i:0;R:26587;i:1;R:9;}s:45:"1230:pst-pbasvthengvba.fcbhfrsngurezvqqyranzr";a:2:{i:0;R:26587;i:1;R:9;}s:49:"1230:pst-pbasvthengvba.fcbhfrsngurefrpbaqynfganzr";a:2:{i:0;R:26587;i:1;R:9;}s:28:"1230:pst-pbasvthengvba.fgngr";a:2:{i:0;R:26587;i:1;R:9;}s:31:"1230:pst-pbasvthengvba.fgnghfrf";a:2:{i:0;R:26587;i:1;R:9;}s:29:"1230:pst-pbasvthengvba.fhozvg";a:2:{i:0;R:26587;i:1;R:9;}s:35:"1230:pst-pbasvthengvba.fhoertbssvpr";a:2:{i:0;R:26587;i:1;R:9;}s:39:"1230:pst-pbasvthengvba.flfgrzhfresvryqf";a:2:{i:0;R:26587;i:1;R:9;}s:36:"1230:pst-pbasvthengvba.flfjvqrsvryqf";a:2:{i:0;R:26587;i:1;R:9;}s:34:"1230:pst-pbasvthengvba.gbcbfvgvbaf";a:2:{i:0;R:26587;i:1;R:9;}s:30:"1230:pst-pbasvthengvba.genvarq";a:2:{i:0;R:26587;i:1;R:9;}s:32:"1230:pst-pbasvthengvba.genvarqba";a:2:{i:0;R:26587;i:1;R:9;}s:32:"1230:pst-pbasvthengvba.hfregvgyr";a:2:{i:0;R:26587;i:1;R:9;}s:45:"1230:pst-pbasvthengvba.ivrj_nqqvgvbany_svryqf";a:2:{i:0;R:26587;i:1;R:9;}s:31:"1230:pst-pbasvthengvba.ibhpuref";a:2:{i:0;R:26587;i:1;R:9;}s:39:"1230:pst-pbasvthengvba.ahzorebspuvyqera";a:2:{i:0;R:26587;i:1;R:9;}s:38:"1230:pst-reebef.qrsnhyg_inyhr_abg_qngr";a:2:{i:0;R:26587;i:1;R:9;}s:40:"1230:pst-reebef.qrsnhyg_inyhr_abg_ahzore";a:2:{i:0;R:26587;i:1;R:9;}s:30:"1230:pst-reebef.qhcyvpngrinyhr";a:2:{i:0;R:26587;i:1;R:9;}s:25:"1230:pst-reebef.znaqngbel";a:2:{i:0;R:26587;i:1;R:9;}s:35:"1230:pst-reebef.znaqngbel_fryrpgobk";a:2:{i:0;R:26587;i:1;R:9;}s:33:"1230:pst-reebef.znaqngbel_grkgobk";a:2:{i:0;R:26587;i:1;R:9;}s:23:"1230:pst-reebef.abinyhr";a:2:{i:0;R:26587;i:1;R:9;}s:22:"1230:pst-reebef.cersvk";a:2:{i:0;R:26587;i:1;R:9;}s:27:"1230:pst-reebef.fryrpginyhr";a:2:{i:0;R:26587;i:1;R:9;}s:22:"1230:pst-reebef.fhssvk";a:2:{i:0;R:26587;i:1;R:9;}s:23:"1230:pst-reebef.gbbybat";a:2:{i:0;R:26587;i:1;R:9;}s:31:"1230:purpxyvfg-purpxyvfg.npgvir";a:2:{i:0;s:19:"out-mifos-checklist";i:1;R:9;}s:40:"1230:purpxyvfg-purpxyvfg.nqqarjpurpxyvfg";a:2:{i:0;R:26728;i:1;R:9;}s:30:"1230:purpxyvfg-purpxyvfg.nqzva";a:2:{i:0;R:26728;i:1;R:9;}s:33:"1230:purpxyvfg-purpxyvfg.nccebirq";a:2:{i:0;R:26728;i:1;R:9;}s:35:"1230:purpxyvfg-purpxyvfg.ohggba_nqq";a:2:{i:0;R:26728;i:1;R:9;}s:38:"1230:purpxyvfg-purpxyvfg.ohggba_pnapry";a:2:{i:0;R:26728;i:1;R:9;}s:39:"1230:purpxyvfg-purpxyvfg.ohggba_cerivrj";a:2:{i:0;R:26728;i:1;R:9;}s:46:"1230:purpxyvfg-purpxyvfg.ohggba_erzbirfryrpgrq";a:2:{i:0;R:26728;i:1;R:9;}s:38:"1230:purpxyvfg-purpxyvfg.ohggba_fhozvg";a:2:{i:0;R:26728;i:1;R:9;}s:34:"1230:purpxyvfg-purpxyvfg.pnapryyrq";a:2:{i:0;R:26728;i:1;R:9;}s:38:"1230:purpxyvfg-purpxyvfg.purpxyvfganzr";a:2:{i:0;R:26728;i:1;R:9;}s:40:"1230:purpxyvfg-purpxyvfg.purpxyvfgfgnghf";a:2:{i:0;R:26728;i:1;R:9;}s:38:"1230:purpxyvfg-purpxyvfg.purpxyvfggrkg";a:2:{i:0;R:26728;i:1;R:9;}s:38:"1230:purpxyvfg-purpxyvfg.purpxyvfgglcr";a:2:{i:0;R:26728;i:1;R:9;}s:39:"1230:purpxyvfg-purpxyvfg.purpxyvfg_anzr";a:2:{i:0;R:26728;i:1;R:9;}s:39:"1230:purpxyvfg-purpxyvfg.purpxyvfg_vasb";a:2:{i:0;R:26728;i:1;R:9;}s:41:"1230:purpxyvfg-purpxyvfg.purpxyvfgqrgnvyf";a:2:{i:0;R:26728;i:1;R:9;}s:31:"1230:purpxyvfg-purpxyvfg.pyvrag";a:2:{i:0;R:26728;i:1;R:9;}s:31:"1230:purpxyvfg-purpxyvfg.pybfrq";a:2:{i:0;R:26728;i:1;R:9;}s:34:"1230:purpxyvfg-purpxyvfg.perngrqol";a:2:{i:0;R:26728;i:1;R:9;}s:36:"1230:purpxyvfg-purpxyvfg.perngrqqngr";a:2:{i:0;R:26728;i:1;R:9;}s:43:"1230:purpxyvfg-purpxyvfg.qrsvararjpurpxyvfg";a:2:{i:0;R:26728;i:1;R:9;}s:36:"1230:purpxyvfg-purpxyvfg.qrfpevcgvba";a:2:{i:0;R:26728;i:1;R:9;}s:32:"1230:purpxyvfg-purpxyvfg.qrgnvyf";a:2:{i:0;R:26728;i:1;R:9;}s:39:"1230:purpxyvfg-purpxyvfg.qvfcynl_fgnghf";a:2:{i:0;R:26728;i:1;R:9;}s:41:"1230:purpxyvfg-purpxyvfg.qvfcynlrq_fgnghf";a:2:{i:0;R:26728;i:1;R:9;}s:36:"1230:purpxyvfg-purpxyvfg.rqvg_ohggba";a:2:{i:0;R:26728;i:1;R:9;}s:39:"1230:purpxyvfg-purpxyvfg.rqvg_purpxyvfg";a:2:{i:0;R:26728;i:1;R:9;}s:44:"1230:purpxyvfg-purpxyvfg.rqvg_purpxyvfg_vasb";a:2:{i:0;R:26728;i:1;R:9;}s:39:"1230:purpxyvfg-purpxyvfg.ragre_vasb_bar";a:2:{i:0;R:26728;i:1;R:9;}s:39:"1230:purpxyvfg-purpxyvfg.ragre_vasb_gjb";a:2:{i:0;R:26728;i:1;R:9;}s:44:"1230:purpxyvfg-purpxyvfg.ragrepurpxyvfg_vasb";a:2:{i:0;R:26728;i:1;R:9;}s:30:"1230:purpxyvfg-purpxyvfg.tebhc";a:2:{i:0;R:26728;i:1;R:9;}s:33:"1230:purpxyvfg-purpxyvfg.vanpgvir";a:2:{i:0;R:26728;i:1;R:9;}s:30:"1230:purpxyvfg-purpxyvfg.vgrzf";a:2:{i:0;R:26728;i:1;R:9;}s:35:"1230:purpxyvfg-purpxyvfg.vgrzf_vasb";a:2:{i:0;R:26728;i:1;R:9;}s:30:"1230:purpxyvfg-purpxyvfg.ybnaf";a:2:{i:0;R:26728;i:1;R:9;}s:29:"1230:purpxyvfg-purpxyvfg.anzr";a:2:{i:0;R:26728;i:1;R:9;}s:31:"1230:purpxyvfg-purpxyvfg.baubyq";a:2:{i:0;R:26728;i:1;R:9;}s:36:"1230:purpxyvfg-purpxyvfg.erivrj_vasb";a:2:{i:0;R:26728;i:1;R:9;}s:40:"1230:purpxyvfg-purpxyvfg.erivrjnaqfhozvg";a:2:{i:0;R:26728;i:1;R:9;}s:45:"1230:purpxyvfg-purpxyvfg.erivrjpurpxyvfg_vasb";a:2:{i:0;R:26728;i:1;R:9;}s:34:"1230:purpxyvfg-purpxyvfg.fniryngre";a:2:{i:0;R:26728;i:1;R:9;}s:32:"1230:purpxyvfg-purpxyvfg.fnivatf";a:2:{i:0;R:26728;i:1;R:9;}s:31:"1230:purpxyvfg-purpxyvfg.fgnghf";a:2:{i:0;R:26728;i:1;R:9;}s:41:"1230:purpxyvfg-purpxyvfg.fgnghf_purpxyvfg";a:2:{i:0;R:26728;i:1;R:9;}s:39:"1230:purpxyvfg-purpxyvfg.fhozvgnccebiny";a:2:{i:0;R:26728;i:1;R:9;}s:29:"1230:purpxyvfg-purpxyvfg.glcr";a:2:{i:0;R:26728;i:1;R:9;}s:40:"1230:purpxyvfg-purpxyvfg.ivrj_purpxyvfgf";a:2:{i:0;R:26728;i:1;R:9;}s:41:"1230:purpxyvfg-reebe.npgvivgl.abg.nyybjrq";a:2:{i:0;R:26728;i:1;R:9;}s:37:"1230:purpxyvfg-reebef.pngrtbel_fgnghf";a:2:{i:0;R:26728;i:1;R:9;}s:28:"1230:purpxyvfg-reebef.sbbgre";a:2:{i:0;R:26728;i:1;R:9;}s:28:"1230:purpxyvfg-reebef.urnqre";a:2:{i:0;R:26728;i:1;R:9;}s:32:"1230:purpxyvfg-reebef.vgrzyratgu";a:2:{i:0;R:26728;i:1;R:9;}s:31:"1230:purpxyvfg-reebef.znaqngbel";a:2:{i:0;R:26728;i:1;R:9;}s:36:"1230:purpxyvfg-reebef.znaqngbel_vgrz";a:2:{i:0;R:26728;i:1;R:9;}s:41:"1230:purpxyvfg-reebef.znaqngbel_fryrpgobk";a:2:{i:0;R:26728;i:1;R:9;}s:39:"1230:purpxyvfg-reebef.znaqngbel_grkgobk";a:2:{i:0;R:26728;i:1;R:9;}s:35:"1230:purpxyvfg-reebef.znkvzhzyratgu";a:2:{i:0;R:26728;i:1;R:9;}s:28:"1230:purpxyvfg-reebef.cersvk";a:2:{i:0;R:26728;i:1;R:9;}s:28:"1230:purpxyvfg-reebef.fhssvk";a:2:{i:0;R:26728;i:1;R:9;}s:43:"1230:purpxyvfg-rkprcgvba.purpxyvfg.perngvba";a:2:{i:0;R:26728;i:1;R:9;}s:56:"1230:purpxyvfg-rkprcgvba.senzrjbex.qbhoyrfhozvgrkprcgvba";a:2:{i:0;R:26728;i:1;R:9;}s:68:"1230:purpxyvfg-rkprcgvbaf.nccyvpngvba.purpxyvfg.fgnghfnyernqlqrsvarq";a:2:{i:0;R:26728;i:1;R:9;}s:18:"1230:pyvrag-nzbhag";a:2:{i:0;R:11;i:1;R:9;}s:36:"1230:pyvrag-pyvrag.npgvirybnacerfrag";a:2:{i:0;R:11;i:1;R:9;}s:32:"1230:pyvrag-pyvrag.syntrkprcgvba";a:2:{i:0;R:11;i:1;R:9;}s:28:"1230:pyvrag-pyvrag.shgherqbo";a:2:{i:0;R:11;i:1;R:9;}s:32:"1230:pyvrag-pyvrag.unfnpgvirybna";a:2:{i:0;R:11;i:1;R:9;}s:29:"1230:pyvrag-pyvrag.vainyvqqbo";a:2:{i:0;R:11;i:1;R:9;}s:29:"1230:pyvrag-snzvyl.vainyvqqbo";a:2:{i:0;R:11;i:1;R:9;}s:29:"1230:pyvrag-pyvrag.vainyvqntr";a:2:{i:0;R:11;i:1;R:9;}s:47:"1230:pyvrag-snzvyl.vainyvqahzorebssnzvylzrzoref";a:2:{i:0;R:11;i:1;R:9;}s:38:"1230:pyvrag-snzvyl.vainyvqsngureahzore";a:2:{i:0;R:11;i:1;R:9;}s:38:"1230:pyvrag-snzvyl.vainyvqfcbhfrahzore";a:2:{i:0;R:11;i:1;R:9;}s:35:"1230:pyvrag-snzvyl.vainyvqpunenpgre";a:2:{i:0;R:11;i:1;R:9;}s:38:"1230:pyvrag-snzvyl.vainyvqeryngvbafuvc";a:2:{i:0;R:11;i:1;R:9;}s:32:"1230:pyvrag-snzvyl.vainyvqtraqre";a:2:{i:0;R:11;i:1;R:9;}s:38:"1230:pyvrag-snzvyl.vainyvqyvivatfgnghf";a:2:{i:0;R:11;i:1;R:9;}s:41:"1230:pyvrag-snzvyl.vainyvqsnzvylsvefganzr";a:2:{i:0;R:11;i:1;R:9;}s:40:"1230:pyvrag-snzvyl.vainyvqsnzvylynfganzr";a:2:{i:0;R:11;i:1;R:9;}s:37:"1230:pyvrag-pyvrag.abcvpgherninvynoyr";a:2:{i:0;R:11;i:1;R:9;}s:31:"1230:pyvrag-pyvrag.vainvyqcubgb";a:2:{i:0;R:11;i:1;R:9;}s:34:"1230:pyvrag-pyvrag.genvarqpurpxobk";a:2:{i:0;R:11;i:1;R:9;}s:36:"1230:pyvrag-pyvrag.genvarqqngrarrqrq";a:2:{i:0;R:11;i:1;R:9;}s:26:"1230:pyvrag-pyvrag.onynapr";a:2:{i:0;R:11;i:1;R:9;}s:42:"1230:pyvrag-phfgbzre.npgvirnppbhagfcerfrag";a:2:{i:0;R:11;i:1;R:9;}s:35:"1230:pyvrag-phfgbzre.oenapuvanpgvir";a:2:{i:0;R:11;i:1;R:9;}s:42:"1230:pyvrag-phfgbzre.qhcyvpngrphfgbzreanzr";a:2:{i:0;R:11;i:1;R:9;}s:33:"1230:pyvrag-phfgbzre.srrfvanpgvir";a:2:{i:0;R:11;i:1;R:9;}s:40:"1230:pyvrag-phfgbzre.vapbzcyrgrpurpxyvfg";a:2:{i:0;R:11;i:1;R:9;}s:35:"1230:pyvrag-phfgbzre.vainyvqirefvba";a:2:{i:0;R:11;i:1;R:9;}s:40:"1230:pyvrag-phfgbzre.ybnabssvprevanpgvir";a:2:{i:0;R:11;i:1;R:9;}s:36:"1230:pyvrag-phfgbzre.zrrgvaterdhverq";a:2:{i:0;R:11;i:1;R:9;}s:46:"1230:pyvrag-reebef.phfgbzre.fcrpvslybnabssvpre";a:2:{i:0;R:11;i:1;R:9;}s:16:"1230:pyvrag-qngr";a:2:{i:0;R:11;i:1;R:9;}s:23:"1230:pyvrag-qrfpevcgvba";a:2:{i:0;R:11;i:1;R:9;}s:33:"1230:pyvrag-qhcyvpngrsrrrkprcgvba";a:2:{i:0;R:11;i:1;R:9;}s:36:"1230:pyvrag-qhcyvpngrtbigvqrkprcgvba";a:2:{i:0;R:11;i:1;R:9;}s:31:"1230:pyvrag-sngnyreeberkprcgvba";a:2:{i:0;R:11;i:1;R:9;}s:19:"1230:pyvrag-srrglcr";a:2:{i:0;R:11;i:1;R:9;}s:17:"1230:pyvrag-svryq";a:2:{i:0;R:11;i:1;R:9;}s:45:"1230:pyvrag-sbezrqolybnabssvpreoynaxrkprcgvba";a:2:{i:0;R:11;i:1;R:9;}s:32:"1230:pyvrag-tebhcfgnghfrkprcgvba";a:2:{i:0;R:11;i:1;R:9;}s:38:"1230:pyvrag-ybnanppbhagnpgvirrkprcgvba";a:2:{i:0;R:11;i:1;R:9;}s:37:"1230:pyvrag-ybnabssvpreoynaxrkprcgvba";a:2:{i:0;R:11;i:1;R:9;}s:43:"1230:pyvrag-ybnabssvpreabgnffvtarqrkprcgvba";a:2:{i:0;R:11;i:1;R:9;}s:40:"1230:pyvrag-ybnabssvpreerdhverqrkprcgvba";a:2:{i:0;R:11;i:1;R:9;}s:20:"1230:pyvrag-arjinyhr";a:2:{i:0;R:11;i:1;R:9;}s:20:"1230:pyvrag-byqinyhr";a:2:{i:0;R:11;i:1;R:9;}s:20:"1230:pyvrag-cbfgrqol";a:2:{i:0;R:11;i:1;R:9;}s:38:"1230:pyvrag-fnzrtebhcgenafsrerkprcgvba";a:2:{i:0;R:11;i:1;R:9;}s:39:"1230:pyvrag-fnzrbssvprgenafsrerkprcgvba";a:2:{i:0;R:11;i:1;R:9;}s:35:"1230:pyvrag-fgnghferdhverqrkprcgvba";a:2:{i:0;R:11;i:1;R:9;}s:33:"1230:pyvrag-hcqngrsnvyrqrkprcgvba";a:2:{i:0;R:11;i:1;R:9;}s:16:"1230:pyvrag-hfre";a:2:{i:0;R:11;i:1;R:9;}s:27:"1230:pyvrag-ohggba.nccebirq";a:2:{i:0;R:11;i:1;R:9;}s:31:"1230:pyvrag-ohggba.fnirsbeyngre";a:2:{i:0;R:11;i:1;R:9;}s:36:"1230:pyvrag-ohggba.fhozvgsbenccebiny";a:2:{i:0;R:11;i:1;R:9;}s:25:"1230:pyvrag-ohggba.pnapry";a:2:{i:0;R:11;i:1;R:9;}s:24:"1230:pyvrag-ohggba.pybfr";a:2:{i:0;R:11;i:1;R:9;}s:27:"1230:pyvrag-ohggba.pbagvahr";a:2:{i:0;R:11;i:1;R:9;}s:26:"1230:pyvrag-ohggba.cerivrj";a:2:{i:0;R:11;i:1;R:9;}s:23:"1230:pyvrag-ohggba.rqvg";a:2:{i:0;R:11;i:1;R:9;}s:34:"1230:pyvrag-ohggba.cerivbhfzsvvasb";a:2:{i:0;R:11;i:1;R:9;}s:39:"1230:pyvrag-ohggba.cerivbhfcrefbanyvasb";a:2:{i:0;R:11;i:1;R:9;}s:37:"1230:pyvrag-ohggba.cerivbhfsnzvylvasb";a:2:{i:0;R:11;i:1;R:9;}s:33:"1230:pyvrag-ohggba.cerivbhffgnghf";a:2:{i:0;R:11;i:1;R:9;}s:25:"1230:pyvrag-ohggba.fhozvg";a:2:{i:0;R:11;i:1;R:9;}s:25:"1230:pyvrag-ohggba.nqqebj";a:2:{i:0;R:11;i:1;R:9;}s:28:"1230:pyvrag-ohggba.qryrgrebj";a:2:{i:0;R:11;i:1;R:9;}s:36:"1230:pyvrag-ps.ybbxhcragvgl.ragvglvq";a:2:{i:0;R:11;i:1;R:9;}s:33:"1230:pyvrag-pyvrag.nppbhagurnqvat";a:2:{i:0;R:11;i:1;R:9;}s:34:"1230:pyvrag-pyvrag.nppbhagfurnqvat";a:2:{i:0;R:11;i:1;R:9;}s:31:"1230:pyvrag-pyvrag.nppbhagfyvax";a:2:{i:0;R:11;i:1;R:9;}s:30:"1230:pyvrag-pyvrag.npgvirybnaf";a:2:{i:0;R:11;i:1;R:9;}s:22:"1230:pyvrag-pyvrag.nqq";a:2:{i:0;R:11;i:1;R:9;}s:27:"1230:pyvrag-pyvrag.nqqtebhc";a:2:{i:0;R:11;i:1;R:9;}s:37:"1230:pyvrag-pyvrag.nqqtebhczrzorefuvc";a:2:{i:0;R:11;i:1;R:9;}s:40:"1230:pyvrag-pyvrag.nqqvgvbanysrrfurnqvat";a:2:{i:0;R:11;i:1;R:9;}s:47:"1230:pyvrag-pyvrag.nqqvgvbanyvasbezngvbaurnqvat";a:2:{i:0;R:11;i:1;R:9;}s:26:"1230:pyvrag-pyvrag.nqqerff";a:2:{i:0;R:11;i:1;R:9;}s:27:"1230:pyvrag-pyvrag.nqqerff1";a:2:{i:0;R:11;i:1;R:9;}s:27:"1230:pyvrag-pyvrag.nqqerff2";a:2:{i:0;R:11;i:1;R:9;}s:27:"1230:pyvrag-pyvrag.nqqerff3";a:2:{i:0;R:11;i:1;R:9;}s:33:"1230:pyvrag-pyvrag.nqqerffurnqvat";a:2:{i:0;R:11;i:1;R:9;}s:44:"1230:pyvrag-pyvrag.nqzvavfgengvirsrrfurnqvat";a:2:{i:0;R:11;i:1;R:9;}s:22:"1230:pyvrag-pyvrag.ntr";a:2:{i:0;R:11;i:1;R:9;}s:25:"1230:pyvrag-pyvrag.nzbhag";a:2:{i:0;R:11;i:1;R:9;}s:31:"1230:pyvrag-pyvrag.nccylpunetrf";a:2:{i:0;R:11;i:1;R:9;}s:35:"1230:pyvrag-pyvrag.nccylgenafnpgvba";a:2:{i:0;R:11;i:1;R:9;}s:32:"1230:pyvrag-pyvrag.nffvtapyvragf";a:2:{i:0;R:11;i:1;R:9;}s:37:"1230:pyvrag-pyvrag.oenaputebhcurnqvat";a:2:{i:0;R:11;i:1;R:9;}s:33:"1230:pyvrag-pyvrag.oenapufryrpgrq";a:2:{i:0;R:11;i:1;R:9;}s:37:"1230:pyvrag-pyvrag.ohfvarffnpgvivgvrf";a:2:{i:0;R:11;i:1;R:9;}s:39:"1230:pyvrag-pyvrag.pragrepunetrfurnqvat";a:2:{i:0;R:11;i:1;R:9;}s:26:"1230:pyvrag-pyvrag.pragref";a:2:{i:0;R:11;i:1;R:9;}s:37:"1230:pyvrag-pyvrag.punatrtebhcurnqvat";a:2:{i:0;R:11;i:1;R:9;}s:32:"1230:pyvrag-pyvrag.punatrybtyvax";a:2:{i:0;R:11;i:1;R:9;}s:38:"1230:pyvrag-pyvrag.punatrfgnghfurnqvat";a:2:{i:0;R:11;i:1;R:9;}s:46:"1230:pyvrag-pyvrag.punatrfgnghfcntrvafgehpgvba";a:2:{i:0;R:11;i:1;R:9;}s:33:"1230:pyvrag-pyvrag.punetrfnccyvrq";a:2:{i:0;R:11;i:1;R:9;}s:32:"1230:pyvrag-pyvrag.purpxgberzbir";a:2:{i:0;R:11;i:1;R:9;}s:28:"1230:pyvrag-pyvrag.purpxyvfg";a:2:{i:0;R:11;i:1;R:9;}s:27:"1230:pyvrag-pyvrag.puvyqera";a:2:{i:0;R:11;i:1;R:9;}s:43:"1230:pyvrag-pyvrag.pubbfroenapuvafgehpgvbaf";a:2:{i:0;R:11;i:1;R:9;}s:44:"1230:pyvrag-pyvrag.pubbfroenapuvafgehpgvbaf1";a:2:{i:0;R:11;i:1;R:9;}s:44:"1230:pyvrag-pyvrag.pubbfroenapuvafgehpgvbaf2";a:2:{i:0;R:11;i:1;R:9;}s:44:"1230:pyvrag-pyvrag.pubbfroenapuvafgehpgvbaf3";a:2:{i:0;R:11;i:1;R:9;}s:44:"1230:pyvrag-pyvrag.pubbfroenapuvafgehpgvbaf4";a:2:{i:0;R:11;i:1;R:9;}s:44:"1230:pyvrag-pyvrag.pubbfroenapuvafgehpgvbaf5";a:2:{i:0;R:11;i:1;R:9;}s:30:"1230:pyvrag-pyvrag.pvgvmrafuvc";a:2:{i:0;R:11;i:1;R:9;}s:35:"1230:pyvrag-pyvrag.pvgvmrafuvcinyhr";a:2:{i:0;R:11;i:1;R:9;}s:23:"1230:pyvrag-pyvrag.pvgl";a:2:{i:0;R:11;i:1;R:9;}s:28:"1230:pyvrag-pyvrag.pvglinyhr";a:2:{i:0;R:11;i:1;R:9;}s:39:"1230:pyvrag-pyvrag.pyvragqrgnvyfurnqvat";a:2:{i:0;R:11;i:1;R:9;}s:43:"1230:pyvrag-pyvrag.pyvragvasbezngvbaurnqvat";a:2:{i:0;R:11;i:1;R:9;}s:30:"1230:pyvrag-pyvrag.pyvragynory";a:2:{i:0;R:11;i:1;R:9;}s:34:"1230:pyvrag-pyvrag.pyvragfgnegqngr";a:2:{i:0;R:11;i:1;R:9;}s:37:"1230:pyvrag-pyvrag.pybfrqnppbhagfyvax";a:2:{i:0;R:11;i:1;R:9;}s:43:"1230:pyvrag-pyvrag.pybfrqfgnghfvafgehpgvba1";a:2:{i:0;R:11;i:1;R:9;}s:43:"1230:pyvrag-pyvrag.pybfrqfgnghfvafgehpgvba2";a:2:{i:0;R:11;i:1;R:9;}s:34:"1230:pyvrag-pyvrag.pbyyrpgvbafurrg";a:2:{i:0;R:11;i:1;R:9;}s:31:"1230:pyvrag-pyvrag.pbasvqragvny";a:2:{i:0;R:11;i:1;R:9;}s:36:"1230:pyvrag-pyvrag.pbasvqragvnyynory";a:2:{i:0;R:11;i:1;R:9;}s:44:"1230:pyvrag-pyvrag.pbasvezoenapuvafgehpgvbaf";a:2:{i:0;R:11;i:1;R:9;}s:39:"1230:pyvrag-pyvrag.pbasvezfgnghfurnqvat";a:2:{i:0;R:11;i:1;R:9;}s:43:"1230:pyvrag-pyvrag.pbasvezngvba.vasbezngvba";a:2:{i:0;R:11;i:1;R:9;}s:44:"1230:pyvrag-pyvrag.pbasvezngvba.anzrflfgrzvq";a:2:{i:0;R:11;i:1;R:9;}s:40:"1230:pyvrag-pyvrag.pbasvezngvba.arkgfgrc";a:2:{i:0;R:11;i:1;R:9;}s:36:"1230:pyvrag-pyvrag.pbasvezngvba.abgr";a:2:{i:0;R:11;i:1;R:9;}s:38:"1230:pyvrag-pyvrag.pbasvezngvbazrffntr";a:2:{i:0;R:11;i:1;R:9;}s:26:"1230:pyvrag-pyvrag.pbhagel";a:2:{i:0;R:11;i:1;R:9;}s:31:"1230:pyvrag-pyvrag.pbhagelinyhr";a:2:{i:0;R:11;i:1;R:9;}s:50:"1230:pyvrag-pyvrag.perngrzsvvasbezngvbavafgehpgvba";a:2:{i:0;R:11;i:1;R:9;}s:44:"1230:pyvrag-pyvrag.perngrzsvvasbezngvbagvgyr";a:2:{i:0;R:11;i:1;R:9;}s:38:"1230:pyvrag-pyvrag.perngrarjpyvragyvax";a:2:{i:0;R:11;i:1;R:9;}s:37:"1230:pyvrag-pyvrag.perngrarjtebhcyvax";a:2:{i:0;R:11;i:1;R:9;}s:47:"1230:pyvrag-pyvrag.perngrcntrpnapryvafgehpgvba1";a:2:{i:0;R:11;i:1;R:9;}s:47:"1230:pyvrag-pyvrag.perngrcntrpnapryvafgehpgvba2";a:2:{i:0;R:11;i:1;R:9;}s:55:"1230:pyvrag-pyvrag.perngrcrefbanyvasbezngvbavafgehpgvba";a:2:{i:0;R:11;i:1;R:9;}s:53:"1230:pyvrag-pyvrag.perngrsnzvylvasbezngvbavafgehpgvba";a:2:{i:0;R:11;i:1;R:9;}s:49:"1230:pyvrag-pyvrag.perngrcrefbanyvasbezngvbagvgyr";a:2:{i:0;R:11;i:1;R:9;}s:47:"1230:pyvrag-pyvrag.perngrcerivrjcntrvafgehpgvba";a:2:{i:0;R:11;i:1;R:9;}s:41:"1230:pyvrag-pyvrag.perngrcerivrjcntrgvgyr";a:2:{i:0;R:11;i:1;R:9;}s:49:"1230:pyvrag-pyvrag.perngrcerivrjerivrjfhozvggvgyr";a:2:{i:0;R:11;i:1;R:9;}s:30:"1230:pyvrag-pyvrag.perngrgvgyr";a:2:{i:0;R:11;i:1;R:9;}s:39:"1230:pyvrag-pyvrag.pheeragfgnghfurnqvat";a:2:{i:0;R:11;i:1;R:9;}s:26:"1230:pyvrag-pyvrag.plpyrab";a:2:{i:0;R:11;i:1;R:9;}s:30:"1230:pyvrag-pyvrag.qngrperngrq";a:2:{i:0;R:11;i:1;R:9;}s:30:"1230:pyvrag-pyvrag.qngrbsovegu";a:2:{i:0;R:11;i:1;R:9;}s:35:"1230:pyvrag-pyvrag.qngrbsoveguinyhr";a:2:{i:0;R:11;i:1;R:9;}s:37:"1230:pyvrag-pyvrag.qryvdhragcbegsbyvb";a:2:{i:0;R:11;i:1;R:9;}s:36:"1230:pyvrag-pyvrag.rqvgoenapuurnqvat";a:2:{i:0;R:11;i:1;R:9;}s:41:"1230:pyvrag-pyvrag.rqvgoenapuvafgehpgvbaf";a:2:{i:0;R:11;i:1;R:9;}s:43:"1230:pyvrag-pyvrag.rqvgoenapuzrzorefuvcyvax";a:2:{i:0;R:11;i:1;R:9;}s:40:"1230:pyvrag-pyvrag.rqvgtebhcvafgehpgvbaf";a:2:{i:0;R:11;i:1;R:9;}s:42:"1230:pyvrag-pyvrag.rqvgtebhczrzorefuvcyvax";a:2:{i:0;R:11;i:1;R:9;}s:27:"1230:pyvrag-pyvrag.rqvgyvax";a:2:{i:0;R:11;i:1;R:9;}s:34:"1230:pyvrag-pyvrag.rqvgzrrgvatyvax";a:2:{i:0;R:11;i:1;R:9;}s:41:"1230:pyvrag-pyvrag.rqvgzsvvasbezngvbayvax";a:2:{i:0;R:11;i:1;R:9;}s:42:"1230:pyvrag-pyvrag.rqvgzsvvasbezngvbagvgyr";a:2:{i:0;R:11;i:1;R:9;}s:44:"1230:pyvrag-pyvrag.rqvgcntrpnapryvafgehpgvba";a:2:{i:0;R:11;i:1;R:9;}s:46:"1230:pyvrag-pyvrag.rqvgcrefbanyvasbezngvbayvax";a:2:{i:0;R:11;i:1;R:9;}s:47:"1230:pyvrag-pyvrag.rqvgcrefbanyvasbezngvbagvgyr";a:2:{i:0;R:11;i:1;R:9;}s:49:"1230:pyvrag-pyvrag.rqvgcerivrjcrefbanyerivrjgvgyr";a:2:{i:0;R:11;i:1;R:9;}s:44:"1230:pyvrag-pyvrag.rqvgsnzvylvasbezngvbayvax";a:2:{i:0;R:11;i:1;R:9;}s:39:"1230:pyvrag-pyvrag.rqvgerzbirzrzorefuvc";a:2:{i:0;R:11;i:1;R:9;}s:38:"1230:pyvrag-pyvrag.rqvgerzbirfrcnengbe";a:2:{i:0;R:11;i:1;R:9;}s:33:"1230:pyvrag-pyvrag.rqhpngvbayriry";a:2:{i:0;R:11;i:1;R:9;}s:38:"1230:pyvrag-pyvrag.rqhpngvbayriryinyhr";a:2:{i:0;R:11;i:1;R:9;}s:28:"1230:pyvrag-pyvrag.rguavpvgl";a:2:{i:0;R:11;i:1;R:9;}s:29:"1230:pyvrag-pyvrag.rkgreanyvq";a:2:{i:0;R:11;i:1;R:9;}s:33:"1230:pyvrag-pyvrag.rkgreanyvqvasb";a:2:{i:0;R:11;i:1;R:9;}s:30:"1230:pyvrag-pyvrag.sngureynory";a:2:{i:0;R:11;i:1;R:9;}s:26:"1230:pyvrag-pyvrag.srrglcr";a:2:{i:0;R:11;i:1;R:9;}s:35:"1230:pyvrag-pyvrag.svryqvafgehpgvba";a:2:{i:0;R:11;i:1;R:9;}s:28:"1230:pyvrag-pyvrag.svefganzr";a:2:{i:0;R:11;i:1;R:9;}s:33:"1230:pyvrag-pyvrag.svefganzrinyhr";a:2:{i:0;R:11;i:1;R:9;}s:27:"1230:pyvrag-pyvrag.sbezrqol";a:2:{i:0;R:11;i:1;R:9;}s:25:"1230:pyvrag-pyvrag.traqre";a:2:{i:0;R:11;i:1;R:9;}s:30:"1230:pyvrag-pyvrag.traqreinyhr";a:2:{i:0;R:11;i:1;R:9;}s:31:"1230:pyvrag-pyvrag.tbireazragvq";a:2:{i:0;R:11;i:1;R:9;}s:36:"1230:pyvrag-pyvrag.tbireazragvqinyhr";a:2:{i:0;R:11;i:1;R:9;}s:29:"1230:pyvrag-pyvrag.tebhcynory";a:2:{i:0;R:11;i:1;R:9;}s:34:"1230:pyvrag-pyvrag.tebhczrzorefuvc";a:2:{i:0;R:11;i:1;R:9;}s:41:"1230:pyvrag-pyvrag.tebhczrzorefuvcqrgnvyf";a:2:{i:0;R:11;i:1;R:9;}s:43:"1230:pyvrag-pyvrag.tebhczrzorefuvcznaqngbel";a:2:{i:0;R:11;i:1;R:9;}s:46:"1230:pyvrag-pyvrag.tebhczrzorefuvcabgznaqngbel";a:2:{i:0;R:11;i:1;R:9;}s:39:"1230:pyvrag-pyvrag.tebhczrzorefuvcfglyr";a:2:{i:0;R:11;i:1;R:9;}s:33:"1230:pyvrag-pyvrag.tebhcfnffvtarq";a:2:{i:0;R:11;i:1;R:9;}s:44:"1230:pyvrag-snzvyl.rqvgsnzvylvasbezngvbayvax";a:2:{i:0;R:11;i:1;R:9;}s:43:"1230:pyvrag-snzvyl.snzvylvasbezngvbaurnqvat";a:2:{i:0;R:11;i:1;R:9;}s:30:"1230:pyvrag-pyvrag.unaqvpnccrq";a:2:{i:0;R:11;i:1;R:9;}s:37:"1230:pyvrag-pyvrag.uvfgbevpnyqngnyvax";a:2:{i:0;R:11;i:1;R:9;}s:44:"1230:pyvrag-pyvrag.vaqvivqhnyzrzorefuvcfglyr";a:2:{i:0;R:11;i:1;R:9;}s:30:"1230:pyvrag-pyvrag.vasbezngvba";a:2:{i:0;R:11;i:1;R:9;}s:33:"1230:pyvrag-pyvrag.ynfgybnanzbhag";a:2:{i:0;R:11;i:1;R:9;}s:27:"1230:pyvrag-pyvrag.ynfganzr";a:2:{i:0;R:11;i:1;R:9;}s:32:"1230:pyvrag-pyvrag.ynfganzrinyhr";a:2:{i:0;R:11;i:1;R:9;}s:29:"1230:pyvrag-pyvrag.yvar1inyhr";a:2:{i:0;R:11;i:1;R:9;}s:34:"1230:pyvrag-pyvrag.ybnanppbhagyvax";a:2:{i:0;R:11;i:1;R:9;}s:28:"1230:pyvrag-pyvrag.ybnaplpyr";a:2:{i:0;R:11;i:1;R:9;}s:30:"1230:pyvrag-pyvrag.ybnaurnqvat";a:2:{i:0;R:11;i:1;R:9;}s:26:"1230:pyvrag-pyvrag.ybnabss";a:2:{i:0;R:11;i:1;R:9;}s:30:"1230:pyvrag-pyvrag.ybnabssvpre";a:2:{i:0;R:11;i:1;R:9;}s:36:"1230:pyvrag-pyvrag.ybpngvbabszrrgvat";a:2:{i:0;R:11;i:1;R:9;}s:40:"1230:pyvrag-pyvrag.zsvvasbezngvbaurnqvat";a:2:{i:0;R:11;i:1;R:9;}s:30:"1230:pyvrag-pyvrag.znantrgvgyr";a:2:{i:0;R:11;i:1;R:9;}s:32:"1230:pyvrag-pyvrag.znevgnyfgnghf";a:2:{i:0;R:11;i:1;R:9;}s:34:"1230:pyvrag-pyvrag.zrrgvatfpurqhyr";a:2:{i:0;R:11;i:1;R:9;}s:38:"1230:pyvrag-pyvrag.zrrgvatfpurqhyryvax";a:2:{i:0;R:11;i:1;R:9;}s:35:"1230:pyvrag-pyvrag.zrrgvatfnggraqrq";a:2:{i:0;R:11;i:1;R:9;}s:34:"1230:pyvrag-pyvrag.zrrgvatfurnqvat";a:2:{i:0;R:11;i:1;R:9;}s:31:"1230:pyvrag-pyvrag.zrrgvatfyvax";a:2:{i:0;R:11;i:1;R:9;}s:33:"1230:pyvrag-pyvrag.zrrgvatfzvffrq";a:2:{i:0;R:11;i:1;R:9;}s:33:"1230:pyvrag-pyvrag.zrzorefuvcyvax";a:2:{i:0;R:11;i:1;R:9;}s:34:"1230:pyvrag-pyvrag.zrzorefuvcfglyr";a:2:{i:0;R:11;i:1;R:9;}s:38:"1230:pyvrag-pyvrag.zsvvasbezngvbaynory";a:2:{i:0;R:11;i:1;R:9;}s:41:"1230:pyvrag-pyvrag.snzvylvasbezngvbaynory";a:2:{i:0;R:11;i:1;R:9;}s:29:"1230:pyvrag-pyvrag.zvqqyranzr";a:2:{i:0;R:11;i:1;R:9;}s:23:"1230:pyvrag-pyvrag.anzr";a:2:{i:0;R:11;i:1;R:9;}s:33:"1230:pyvrag-pyvrag.arjfgnghfynory";a:2:{i:0;R:11;i:1;R:9;}s:26:"1230:pyvrag-pyvrag.abynory";a:2:{i:0;R:11;i:1;R:9;}s:29:"1230:pyvrag-pyvrag.abbsnpgvir";a:2:{i:0;R:11;i:1;R:9;}s:23:"1230:pyvrag-pyvrag.abgr";a:2:{i:0;R:11;i:1;R:9;}s:28:"1230:pyvrag-pyvrag.abgrfyvax";a:2:{i:0;R:11;i:1;R:9;}s:35:"1230:pyvrag-pyvrag.ahzorebspuvyqera";a:2:{i:0;R:11;i:1;R:9;}s:40:"1230:pyvrag-pyvrag.bssvpvnygvgyrfurnqvat";a:2:{i:0;R:11;i:1;R:9;}s:44:"1230:pyvrag-pyvrag.cresbeznapruvfgbelurnqvat";a:2:{i:0;R:11;i:1;R:9;}s:30:"1230:pyvrag-pyvrag.crevbqvpvgl";a:2:{i:0;R:11;i:1;R:9;}s:45:"1230:pyvrag-pyvrag.crefbanyvasbezngvbaurnqvat";a:2:{i:0;R:11;i:1;R:9;}s:24:"1230:pyvrag-pyvrag.cubgb";a:2:{i:0;R:11;i:1;R:9;}s:29:"1230:pyvrag-pyvrag.cbfgnypbqr";a:2:{i:0;R:11;i:1;R:9;}s:32:"1230:pyvrag-pyvrag.cbireglfgnghf";a:2:{i:0;R:11;i:1;R:9;}s:47:"1230:pyvrag-pyvrag.cerivrjrqvgpnapryvafgehpgvba";a:2:{i:0;R:11;i:1;R:9;}s:45:"1230:pyvrag-pyvrag.cerivrjrqvgvasbvafgehpgvba";a:2:{i:0;R:11;i:1;R:9;}s:40:"1230:pyvrag-pyvrag.cerivrjzsvvasbezngvba";a:2:{i:0;R:11;i:1;R:9;}s:43:"1230:pyvrag-pyvrag.cerivrjsnzvylvasbezngvba";a:2:{i:0;R:11;i:1;R:9;}s:30:"1230:pyvrag-pyvrag.erpragabgrf";a:2:{i:0;R:11;i:1;R:9;}s:31:"1230:pyvrag-pyvrag.eryngvbafuvc";a:2:{i:0;R:11;i:1;R:9;}s:29:"1230:pyvrag-pyvrag.erzbiryvax";a:2:{i:0;R:11;i:1;R:9;}s:38:"1230:pyvrag-pyvrag.erivrjfhozvgurnqvat";a:2:{i:0;R:11;i:1;R:9;}s:29:"1230:pyvrag-pyvrag.fnyhgngvba";a:2:{i:0;R:11;i:1;R:9;}s:34:"1230:pyvrag-pyvrag.fnyhgngvbainyhr";a:2:{i:0;R:11;i:1;R:9;}s:33:"1230:pyvrag-pyvrag.fnivatfurnqvat";a:2:{i:0;R:11;i:1;R:9;}s:32:"1230:pyvrag-pyvrag.frnepuurnqvat";a:2:{i:0;R:11;i:1;R:9;}s:37:"1230:pyvrag-pyvrag.frnepuvafgehpgvbaf";a:2:{i:0;R:11;i:1;R:9;}s:47:"1230:pyvrag-pyvrag.frnepuerfhygcntrvafgehpgvbaf";a:2:{i:0;R:11;i:1;R:9;}s:44:"1230:pyvrag-pyvrag.frnepufryrpgpragreurnqvat";a:2:{i:0;R:11;i:1;R:9;}s:33:"1230:pyvrag-pyvrag.frpbaqynfganzr";a:2:{i:0;R:11;i:1;R:9;}s:34:"1230:pyvrag-pyvrag.frrnyyabgrfyvax";a:2:{i:0;R:11;i:1;R:9;}s:38:"1230:pyvrag-pyvrag.fryrpgoenapuurnqvat";a:2:{i:0;R:11;i:1;R:9;}s:43:"1230:pyvrag-pyvrag.fryrpgoenapuvafgehpgvbaf";a:2:{i:0;R:11;i:1;R:9;}s:44:"1230:pyvrag-pyvrag.fryrpgoenapuvafgehpgvbaf1";a:2:{i:0;R:11;i:1;R:9;}s:44:"1230:pyvrag-pyvrag.fryrpgoenapuvafgehpgvbaf2";a:2:{i:0;R:11;i:1;R:9;}s:28:"1230:pyvrag-pyvrag.frcnengbe";a:2:{i:0;R:11;i:1;R:9;}s:35:"1230:pyvrag-pyvrag.fcbhfrsngureanzr";a:2:{i:0;R:11;i:1;R:9;}s:34:"1230:pyvrag-pyvrag.fcbhfrsvefganzr";a:2:{i:0;R:11;i:1;R:9;}s:39:"1230:pyvrag-pyvrag.fcbhfrsvefganzrinyhr";a:2:{i:0;R:11;i:1;R:9;}s:30:"1230:pyvrag-pyvrag.fcbhfrynory";a:2:{i:0;R:11;i:1;R:9;}s:33:"1230:pyvrag-pyvrag.fcbhfrynfganzr";a:2:{i:0;R:11;i:1;R:9;}s:38:"1230:pyvrag-pyvrag.fcbhfrynfganzrinyhr";a:2:{i:0;R:11;i:1;R:9;}s:35:"1230:pyvrag-pyvrag.fcbhfrzvqqyranzr";a:2:{i:0;R:11;i:1;R:9;}s:38:"1230:pyvrag-pyvrag.fcbhfranzrglcrinyhr";a:2:{i:0;R:11;i:1;R:9;}s:39:"1230:pyvrag-pyvrag.fcbhfrfrpbaqynfganzr";a:2:{i:0;R:11;i:1;R:9;}s:31:"1230:pyvrag-pyvrag.snzvylahzore";a:2:{i:0;R:11;i:1;R:9;}s:32:"1230:pyvrag-pyvrag.snzvylqrgnvyf";a:2:{i:0;R:11;i:1;R:9;}s:40:"1230:pyvrag-pyvrag.snzvylqrgnvyfbcgvbany";a:2:{i:0;R:11;i:1;R:9;}s:37:"1230:pyvrag-pyvrag.snzvyleryngvbafuvc";a:2:{i:0;R:11;i:1;R:9;}s:34:"1230:pyvrag-pyvrag.snzvylsvefganzr";a:2:{i:0;R:11;i:1;R:9;}s:35:"1230:pyvrag-pyvrag.snzvylzvqqyranzr";a:2:{i:0;R:11;i:1;R:9;}s:33:"1230:pyvrag-pyvrag.snzvylynfganzr";a:2:{i:0;R:11;i:1;R:9;}s:36:"1230:pyvrag-pyvrag.snzvylqngrbsovegu";a:2:{i:0;R:11;i:1;R:9;}s:31:"1230:pyvrag-pyvrag.snzvyltraqre";a:2:{i:0;R:11;i:1;R:9;}s:37:"1230:pyvrag-pyvrag.snzvylyvivatfgnghf";a:2:{i:0;R:11;i:1;R:9;}s:35:"1230:pyvrag-pyvrag.snzvylpuvyqynory";a:2:{i:0;R:11;i:1;R:9;}s:36:"1230:pyvrag-pyvrag.snzvylfcbhfrynory";a:2:{i:0;R:11;i:1;R:9;}s:36:"1230:pyvrag-pyvrag.snzvylsngureynory";a:2:{i:0;R:11;i:1;R:9;}s:36:"1230:pyvrag-pyvrag.snzvylzbgureynory";a:2:{i:0;R:11;i:1;R:9;}s:37:"1230:pyvrag-pyvrag.snzvylfvoyvatynory";a:2:{i:0;R:11;i:1;R:9;}s:36:"1230:pyvrag-pyvrag.snzvylqvfcynlanzr";a:2:{i:0;R:11;i:1;R:9;}s:24:"1230:pyvrag-pyvrag.fgngr";a:2:{i:0;R:11;i:1;R:9;}s:29:"1230:pyvrag-pyvrag.fgngrinyhr";a:2:{i:0;R:11;i:1;R:9;}s:25:"1230:pyvrag-pyvrag.fgnghf";a:2:{i:0;R:11;i:1;R:9;}s:29:"1230:pyvrag-pyvrag.fgnghfyvax";a:2:{i:0;R:11;i:1;R:9;}s:43:"1230:pyvrag-pyvrag.fgnghfcerivrjvafgehpgvba";a:2:{i:0;R:11;i:1;R:9;}s:27:"1230:pyvrag-pyvrag.flfgrzvq";a:2:{i:0;R:11;i:1;R:9;}s:28:"1230:pyvrag-pyvrag.gryrcubar";a:2:{i:0;R:11;i:1;R:9;}s:31:"1230:pyvrag-pyvrag.gbgnyfnivatf";a:2:{i:0;R:11;i:1;R:9;}s:26:"1230:pyvrag-pyvrag.genvarq";a:2:{i:0;R:11;i:1;R:9;}s:28:"1230:pyvrag-pyvrag.genvarqba";a:2:{i:0;R:11;i:1;R:9;}s:32:"1230:pyvrag-pyvrag.genvarqbaqngr";a:2:{i:0;R:11;i:1;R:9;}s:33:"1230:pyvrag-pyvrag.genvavatfgnghf";a:2:{i:0;R:11;i:1;R:9;}s:37:"1230:pyvrag-pyvrag.genafnpgvbauvfgbel";a:2:{i:0;R:11;i:1;R:9;}s:34:"1230:pyvrag-pyvrag.hfrevasbezngvba";a:2:{i:0;R:11;i:1;R:9;}s:40:"1230:pyvrag-pyvrag.ivrjpyvragqrgnvyfyvax";a:2:{i:0;R:11;i:1;R:9;}s:27:"1230:pyvrag-pyvrag.lrnefbyq";a:2:{i:0;R:11;i:1;R:9;}s:27:"1230:pyvrag-pyvrag.lrfynory";a:2:{i:0;R:11;i:1;R:9;}s:27:"1230:pyvrag-pyvrag.mvcinyhr";a:2:{i:0;R:11;i:1;R:9;}s:22:"1230:pyvrag-pyvrag.npp";a:2:{i:0;R:11;i:1;R:9;}s:27:"1230:pyvrag-pyvrag.nppbhagf";a:2:{i:0;R:11;i:1;R:9;}s:25:"1230:pyvrag-pyvrag.nppfhz";a:2:{i:0;R:11;i:1;R:9;}s:40:"1230:pyvrag-pyvrag.nqqvgvbanyvasbezngvba";a:2:{i:0;R:11;i:1;R:9;}s:25:"1230:pyvrag-pyvrag.nzgqhr";a:2:{i:0;R:11;i:1;R:9;}s:29:"1230:pyvrag-pyvrag.nzgbireqhr";a:2:{i:0;R:11;i:1;R:9;}s:32:"1230:pyvrag-pyvrag.nccyl_cnlzrag";a:2:{i:0;R:11;i:1;R:9;}s:34:"1230:pyvrag-pyvrag.nccylnqwhfgzrag";a:2:{i:0;R:11;i:1;R:9;}s:36:"1230:pyvrag-pyvrag.onpxgbqrgnvyfcntr";a:2:{i:0;R:11;i:1;R:9;}s:33:"1230:pyvrag-pyvrag.ohgonpuqrgcntr";a:2:{i:0;R:11;i:1;R:9;}s:40:"1230:pyvrag-pyvrag.punatrtebhczrzorefuvc";a:2:{i:0;R:11;i:1;R:9;}s:28:"1230:pyvrag-pyvrag.punatrybt";a:2:{i:0;R:11;i:1;R:9;}s:36:"1230:pyvrag-pyvrag.pyvragvasbezngvba";a:2:{i:0;R:11;i:1;R:9;}s:32:"1230:pyvrag-pyvrag.pyvragpunetrf";a:2:{i:0;R:11;i:1;R:9;}s:28:"1230:pyvrag-pyvrag.pybfrqnpp";a:2:{i:0;R:11;i:1;R:9;}s:25:"1230:pyvrag-pyvrag.perngr";a:2:{i:0;R:11;i:1;R:9;}s:33:"1230:pyvrag-pyvrag.perngrnppbhagf";a:2:{i:0;R:11;i:1;R:9;}s:34:"1230:pyvrag-pyvrag.perngrarjpyvrag";a:2:{i:0;R:11;i:1;R:9;}s:23:"1230:pyvrag-pyvrag.qngr";a:2:{i:0;R:11;i:1;R:9;}s:30:"1230:pyvrag-pyvrag.qrfpevcgvba";a:2:{i:0;R:11;i:1;R:9;}s:33:"1230:pyvrag-pyvrag.rqvgzrzorefuvc";a:2:{i:0;R:11;i:1;R:9;}s:29:"1230:pyvrag-pyvrag.rqvgfgnghf";a:2:{i:0;R:11;i:1;R:9;}s:24:"1230:pyvrag-pyvrag.svryq";a:2:{i:0;R:11;i:1;R:9;}s:31:"1230:pyvrag-pyvrag.vafgnapranzr";a:2:{i:0;R:11;i:1;R:9;}s:35:"1230:pyvrag-pyvrag.ybnaplpyrpbhagre";a:2:{i:0;R:11;i:1;R:9;}s:27:"1230:pyvrag-pyvrag.arjinyhr";a:2:{i:0;R:11;i:1;R:9;}s:27:"1230:pyvrag-pyvrag.byqinyhr";a:2:{i:0;R:11;i:1;R:9;}s:27:"1230:pyvrag-pyvrag.cbfgrqol";a:2:{i:0;R:11;i:1;R:9;}s:36:"1230:pyvrag-pyvrag.cerivrjpyvragvasb";a:2:{i:0;R:11;i:1;R:9;}s:28:"1230:pyvrag-pyvrag.erpnppnpg";a:2:{i:0;R:11;i:1;R:9;}s:29:"1230:pyvrag-pyvrag.erpperqngr";a:2:{i:0;R:11;i:1;R:9;}s:39:"1230:pyvrag-pyvrag.erpheevatnppbhagsrrf";a:2:{i:0;R:11;i:1;R:9;}s:25:"1230:pyvrag-pyvrag.erzbir";a:2:{i:0;R:11;i:1;R:9;}s:38:"1230:pyvrag-pyvrag.fnivatfvafgnapranzr";a:2:{i:0;R:11;i:1;R:9;}s:27:"1230:pyvrag-pyvrag.frrcubgb";a:2:{i:0;R:11;i:1;R:9;}s:25:"1230:pyvrag-pyvrag.fryrpg";a:2:{i:0;R:11;i:1;R:9;}s:32:"1230:pyvrag-pyvrag.fryrpgnoenapu";a:2:{i:0;R:11;i:1;R:9;}s:31:"1230:pyvrag-pyvrag.hcpbzpunetrf";a:2:{i:0;R:11;i:1;R:9;}s:23:"1230:pyvrag-pyvrag.hfre";a:2:{i:0;R:11;i:1;R:9;}s:36:"1230:pyvrag-pyvrag.ivrjnyynpgvivgvrf";a:2:{i:0;R:11;i:1;R:9;}s:30:"1230:pyvrag-pyvrag.ivrjqrgnvyf";a:2:{i:0;R:11;i:1;R:9;}s:24:"1230:pyvrag-pyvrag.jnvir";a:2:{i:0;R:11;i:1;R:9;}s:31:"1230:pyvrag-pyvarg.nccylpunetrf";a:2:{i:0;R:11;i:1;R:9;}s:52:"1230:pyvrag-reebe.phfgbzre.pyvragunirbcraybnanppbhag";a:2:{i:0;R:11;i:1;R:9;}s:52:"1230:pyvrag-reebe.phfgbzre.pyvragvfpybfrqbepnapryyrq";a:2:{i:0;R:11;i:1;R:9;}s:38:"1230:pyvrag-reebe.npgvivgl.abg.nyybjrq";a:2:{i:0;R:11;i:1;R:9;}s:47:"1230:pyvrag-reebe.nccylpunetr.abphfgbzrezrrgvat";a:2:{i:0;R:11;i:1;R:9;}s:34:"1230:pyvrag-reebe.phfgbzreabgsbhaq";a:2:{i:0;R:11;i:1;R:9;}s:26:"1230:pyvrag-reebef.trarevp";a:2:{i:0;R:11;i:1;R:9;}s:34:"1230:pyvrag-reebe.haxabjarkprcgvba";a:2:{i:0;R:11;i:1;R:9;}s:37:"1230:pyvrag-reebe.irefvbaabqbabgzngpu";a:2:{i:0;R:11;i:1;R:9;}s:51:"1230:pyvrag-reebef.pyvrag.qhcyvpngrbssrevatfryrpgrq";a:2:{i:0;R:11;i:1;R:9;}s:42:"1230:pyvrag-reebef.pyvrag.unfnpgvirnppbhag";a:2:{i:0;R:11;i:1;R:9;}s:42:"1230:pyvrag-reebef.pyvrag.ybjretebhcfgnghf";a:2:{i:0;R:11;i:1;R:9;}s:48:"1230:pyvrag-reebef.phfgbzre.qhcyvpngrcrevbqvpsrr";a:2:{i:0;R:11;i:1;R:9;}s:48:"1230:pyvrag-reebef.phfgbzre.srrserdhraplzvfzngpu";a:2:{i:0;R:11;i:1;R:9;}s:43:"1230:pyvrag-reebef.phfgbzre.vainyvqsbezrqol";a:2:{i:0;R:11;i:1;R:9;}s:46:"1230:pyvrag-reebef.phfgbzre.vainyvqybnabssvpre";a:2:{i:0;R:11;i:1;R:9;}s:42:"1230:pyvrag-reebef.phfgbzre.vainyvqzrrgvat";a:2:{i:0;R:11;i:1;R:9;}s:39:"1230:pyvrag-reebef.phfgbzre.vainyvqanzr";a:2:{i:0;R:11;i:1;R:9;}s:41:"1230:pyvrag-reebef.phfgbzre.vainyvqbssvpr";a:2:{i:0;R:11;i:1;R:9;}s:52:"1230:pyvrag-reebef.phfgbzre.zrrgvatserdhraplzvfzngpu";a:2:{i:0;R:11;i:1;R:9;}s:42:"1230:pyvrag-reebef.phfgbzre.bssvprvanpgvir";a:2:{i:0;R:11;i:1;R:9;}s:42:"1230:pyvrag-reebef.phfgbzre.cneragvanpgvir";a:2:{i:0;R:11;i:1;R:9;}s:46:"1230:pyvrag-reebef.phfgbzre.fnzroenapugenafsre";a:2:{i:0;R:11;i:1;R:9;}s:55:"1230:pyvrag-reebef.phfgbzre.fnzrcneraggenafsrerkprcgvba";a:2:{i:0;R:11;i:1;R:9;}s:51:"1230:pyvrag-reebef.phfgbzre.fcrpvslphfgbzsvryqinyhr";a:2:{i:0;R:11;i:1;R:9;}s:43:"1230:pyvrag-reebef.phfgbzre.phfgbzqngrsvryq";a:2:{i:0;R:11;i:1;R:9;}s:44:"1230:pyvrag-reebef.phfgbzre.fcrpvslsrrnzbhag";a:2:{i:0;R:11;i:1;R:9;}s:62:"1230:pyvrag-reebef.phfgbzre.pyvragpnaabgornqqrqgbvanpgvirtebhc";a:2:{i:0;R:11;i:1;R:9;}s:60:"1230:pyvrag-reebef.phfgbzre.gnetrgtebhcfgnghfybjregunapyvrag";a:2:{i:0;R:11;i:1;R:9;}s:37:"1230:pyvrag-reebef.vainyvqgenvarqqngr";a:2:{i:0;R:11;i:1;R:9;}s:35:"1230:pyvrag-reebef.genvarqorsberqbo";a:2:{i:0;R:11;i:1;R:9;}s:34:"1230:pyvrag-reebef.genvarqpurpxobk";a:2:{i:0;R:11;i:1;R:9;}s:36:"1230:pyvrag-reebef.genvarqqngrarrqrq";a:2:{i:0;R:11;i:1;R:9;}s:36:"1230:pyvrag-reebef.srrjvgubhgzrrgvat";a:2:{i:0;R:11;i:1;R:9;}s:32:"1230:pyvrag-reebef.vainyvqsrrnzg";a:2:{i:0;R:11;i:1;R:9;}s:28:"1230:pyvrag-reebef.znaqngbel";a:2:{i:0;R:11;i:1;R:9;}s:26:"1230:pyvrag-reebef.znfxzft";a:2:{i:0;R:11;i:1;R:9;}s:28:"1230:pyvrag-reebef.znkyratgu";a:2:{i:0;R:11;i:1;R:9;}s:37:"1230:pyvrag-reebef.zrrgvatabgnffvtarq";a:2:{i:0;R:11;i:1;R:9;}s:27:"1230:pyvrag-reebef.erdhverq";a:2:{i:0;R:11;i:1;R:9;}s:38:"1230:pyvrag-reebef.erdhverqphfgbzsvryq";a:2:{i:0;R:11;i:1;R:9;}s:33:"1230:pyvrag-reebef.erdhverqfryrpg";a:2:{i:0;R:11;i:1;R:9;}s:52:"1230:pyvrag-rkprcgvba.senzrjbex.pbapheeraplrkprcgvba";a:2:{i:0;R:11;i:1;R:9;}s:53:"1230:pyvrag-rkprcgvba.senzrjbex.qbhoyrfhozvgrkprcgvba";a:2:{i:0;R:11;i:1;R:9;}s:60:"1230:pyvrag-rkprcgvba.senzrjbex.svryqpbasvthengvba.znaqngbel";a:2:{i:0;R:11;i:1;R:9;}s:53:"1230:pyvrag-jneavat.pyvragjvgufnzrtbigvqrkvfgvapybfrq";a:2:{i:0;R:11;i:1;R:9;}s:54:"1230:pyvrag-jneavat.pyvragjvgufnzranzrqborkvfgvapybfrq";a:2:{i:0;R:11;i:1;R:9;}s:59:"1230:pyvrag-jneavat.pyvragjvgufnzranzrqborkvfgvaoynpxyvfgrq";a:2:{i:0;R:11;i:1;R:9;}s:49:"1230:pyvrag-pyvrag.ivrjdhrfgvbatebhcerfcbafrfyvax";a:2:{i:0;R:11;i:1;R:9;}s:64:"1230:pyvrag-pyvrag.ivrjdhrfgvbatebhcsbepybfrqpyvragerfcbafrfyvax";a:2:{i:0;R:11;i:1;R:9;}s:41:"1230:pyvrag-pyvrag.dhrfgvbatebhcvafgnaprf";a:2:{i:0;R:11;i:1;R:9;}s:56:"1230:pyvrag-dhrfgvbaanver.vainyvq.ahzrevp.enatr.erfcbafr";a:2:{i:0;R:11;i:1;R:9;}s:54:"1230:pyvrag-dhrfgvbaanver.vainyvq.ahzrevp.zva.erfcbafr";a:2:{i:0;R:11;i:1;R:9;}s:54:"1230:pyvrag-dhrfgvbaanver.vainyvq.ahzrevp.znk.erfcbafr";a:2:{i:0;R:11;i:1;R:9;}s:50:"1230:pyvrag-dhrfgvbaanver.vainyvq.ahzrevp.erfcbafr";a:2:{i:0;R:11;i:1;R:9;}s:40:"1230:pzo-nppbhag.phfgbzsvryq.qvfcynlanzr";a:2:{i:0;s:13:"out-mifos-cmb";i:1;R:9;}s:36:"1230:pzo-nppbhag.phfgbzsvryq.srvyqvq";a:2:{i:0;R:27186;i:1;R:9;}s:39:"1230:pzo-nppbhag.phfgbzsvryq.srvyqinyhr";a:2:{i:0;R:27186;i:1;R:9;}s:21:"1230:pzo-pragre.yvar2";a:2:{i:0;R:27186;i:1;R:9;}s:21:"1230:pzo-pragre.yvar3";a:2:{i:0;R:27186;i:1;R:9;}s:27:"1230:pzo-pragre.cubarahzore";a:2:{i:0;R:27186;i:1;R:9;}s:35:"1230:pzo-pragre.cubarahzorefgevccrq";a:2:{i:0;R:27186;i:1;R:9;}s:21:"1230:pzo-pragre.fgngr";a:2:{i:0;R:27186;i:1;R:9;}s:34:"1230:pzo-pragre.pragrenccebinyqngr";a:2:{i:0;R:27186;i:1;R:9;}s:20:"1230:pzo-pragre.pvgl";a:2:{i:0;R:27186;i:1;R:9;}s:23:"1230:pzo-pragre.pbhagel";a:2:{i:0;R:27186;i:1;R:9;}s:44:"1230:pzo-pragre.phfgbzrecbfvgvba.qvfcynlanzr";a:2:{i:0;R:27186;i:1;R:9;}s:30:"1230:pzo-pragre.qvfcynlnqqerff";a:2:{i:0;R:27186;i:1;R:9;}s:26:"1230:pzo-pragre.rkgreanyvq";a:2:{i:0;R:27186;i:1;R:9;}s:21:"1230:pzo-pragre.yvar1";a:2:{i:0;R:27186;i:1;R:9;}s:36:"1230:pzo-pragre.zrrgvat.zrrgvatcynpr";a:2:{i:0;R:27186;i:1;R:9;}s:44:"1230:pzo-pragre.zrrgvaterpheerapr.enaxbsqnlf";a:2:{i:0;R:27186;i:1;R:9;}s:41:"1230:pzo-pragre.zrrgvaterpheerapr.jrrxqnl";a:2:{i:0;R:27186;i:1;R:9;}s:30:"1230:pzo-pragre.zsvwbvavatqngr";a:2:{i:0;R:27186;i:1;R:9;}s:37:"1230:pzo-pragre.crefbaary.qvfcynlanzr";a:2:{i:0;R:27186;i:1;R:9;}s:27:"1230:pzo-pragre.crefbaaryvq";a:2:{i:0;R:27186;i:1;R:9;}s:24:"1230:pzo-pragre.fgnghfvq";a:2:{i:0;R:27186;i:1;R:9;}s:19:"1230:pzo-pragre.mvc";a:2:{i:0;R:27186;i:1;R:9;}s:21:"1230:pzo-pyvrag.yvar2";a:2:{i:0;R:27186;i:1;R:9;}s:21:"1230:pzo-pyvrag.yvar3";a:2:{i:0;R:27186;i:1;R:9;}s:27:"1230:pzo-pyvrag.cubarahzore";a:2:{i:0;R:27186;i:1;R:9;}s:35:"1230:pzo-pyvrag.cubarahzorefgevccrq";a:2:{i:0;R:27186;i:1;R:9;}s:21:"1230:pzo-pyvrag.fgngr";a:2:{i:0;R:27186;i:1;R:9;}s:34:"1230:pzo-pyvrag.ohfvarffnpgvivgvrf";a:2:{i:0;R:27186;i:1;R:9;}s:27:"1230:pzo-pyvrag.pvgvmrafuvc";a:2:{i:0;R:27186;i:1;R:9;}s:20:"1230:pzo-pyvrag.pvgl";a:2:{i:0;R:27186;i:1;R:9;}s:34:"1230:pzo-pyvrag.pyvragnccebinyqngr";a:2:{i:0;R:27186;i:1;R:9;}s:23:"1230:pzo-pyvrag.pbhagel";a:2:{i:0;R:27186;i:1;R:9;}s:42:"1230:pzo-pyvrag.phfgbzreqrgnvy.ahzpuvyqera";a:2:{i:0;R:27186;i:1;R:9;}s:47:"1230:pzo-pyvrag.phfgbzreanzrqrgnvyfrg.svefganzr";a:2:{i:0;R:27186;i:1;R:9;}s:46:"1230:pzo-pyvrag.phfgbzreanzrqrgnvyfrg.ynfganzr";a:2:{i:0;R:27186;i:1;R:9;}s:48:"1230:pzo-pyvrag.phfgbzreanzrqrgnvyfrg.zvqqyranzr";a:2:{i:0;R:27186;i:1;R:9;}s:46:"1230:pzo-pyvrag.phfgbzreanzrqrgnvyfrg.anzrglcr";a:2:{i:0;R:27186;i:1;R:9;}s:48:"1230:pzo-pyvrag.phfgbzreanzrqrgnvyfrg.fnyhgngvba";a:2:{i:0;R:27186;i:1;R:9;}s:52:"1230:pzo-pyvrag.phfgbzreanzrqrgnvyfrg.frpbaqynfganzr";a:2:{i:0;R:27186;i:1;R:9;}s:27:"1230:pzo-pyvrag.qngrbsovegu";a:2:{i:0;R:27186;i:1;R:9;}s:30:"1230:pzo-pyvrag.qvfcynlnqqerff";a:2:{i:0;R:27186;i:1;R:9;}s:27:"1230:pzo-pyvrag.qvfcynlanzr";a:2:{i:0;R:27186;i:1;R:9;}s:30:"1230:pzo-pyvrag.rqhpngvbayriry";a:2:{i:0;R:27186;i:1;R:9;}s:25:"1230:pzo-pyvrag.rguavpvgl";a:2:{i:0;R:27186;i:1;R:9;}s:26:"1230:pzo-pyvrag.rkgreanyvq";a:2:{i:0;R:27186;i:1;R:9;}s:22:"1230:pzo-pyvrag.syntvq";a:2:{i:0;R:27186;i:1;R:9;}s:22:"1230:pzo-pyvrag.traqre";a:2:{i:0;R:27186;i:1;R:9;}s:28:"1230:pzo-pyvrag.tbireazragvq";a:2:{i:0;R:27186;i:1;R:9;}s:27:"1230:pzo-pyvrag.unaqvpnccrq";a:2:{i:0;R:27186;i:1;R:9;}s:21:"1230:pzo-pyvrag.yvar1";a:2:{i:0;R:27186;i:1;R:9;}s:29:"1230:pzo-pyvrag.znevgnyfgnghf";a:2:{i:0;R:27186;i:1;R:9;}s:36:"1230:pzo-pyvrag.zrrgvat.zrrgvatcynpr";a:2:{i:0;R:27186;i:1;R:9;}s:44:"1230:pzo-pyvrag.zrrgvaterpheerapr.enaxbsqnlf";a:2:{i:0;R:27186;i:1;R:9;}s:41:"1230:pzo-pyvrag.zrrgvaterpheerapr.jrrxqnl";a:2:{i:0;R:27186;i:1;R:9;}s:30:"1230:pzo-pyvrag.zsvwbvavatqngr";a:2:{i:0;R:27186;i:1;R:9;}s:42:"1230:pzo-pyvrag.cneragphfgbzre.qvfcynlanzr";a:2:{i:0;R:27186;i:1;R:9;}s:27:"1230:pzo-pyvrag.crefbaaryvq";a:2:{i:0;R:27186;i:1;R:9;}s:29:"1230:pzo-pyvrag.cbireglfgnghf";a:2:{i:0;R:27186;i:1;R:9;}s:24:"1230:pzo-pyvrag.fgnghfvq";a:2:{i:0;R:27186;i:1;R:9;}s:19:"1230:pzo-pyvrag.mvc";a:2:{i:0;R:27186;i:1;R:9;}s:41:"1230:pzo-phfgbzre.phfgbzsvryq.qvfcynlanzr";a:2:{i:0;R:27186;i:1;R:9;}s:37:"1230:pzo-phfgbzre.phfgbzsvryq.srvyqvq";a:2:{i:0;R:27186;i:1;R:9;}s:40:"1230:pzo-phfgbzre.phfgbzsvryq.srvyqinyhr";a:2:{i:0;R:27186;i:1;R:9;}s:22:"1230:pzo-phfgbzre.anzr";a:2:{i:0;R:27186;i:1;R:9;}s:20:"1230:pzo-tebhc.yvar1";a:2:{i:0;R:27186;i:1;R:9;}s:20:"1230:pzo-tebhc.yvar3";a:2:{i:0;R:27186;i:1;R:9;}s:35:"1230:pzo-tebhc.cbfvgvba.qvfcynlanzr";a:2:{i:0;R:27186;i:1;R:9;}s:19:"1230:pzo-tebhc.pvgl";a:2:{i:0;R:27186;i:1;R:9;}s:22:"1230:pzo-tebhc.pbzzrag";a:2:{i:0;R:27186;i:1;R:9;}s:22:"1230:pzo-tebhc.pbhagel";a:2:{i:0;R:27186;i:1;R:9;}s:37:"1230:pzo-tebhc.phfgbzsvryq.srvyqinyhr";a:2:{i:0;R:27186;i:1;R:9;}s:43:"1230:pzo-tebhc.phfgbzrecbfvgvba.qvfcynlanzr";a:2:{i:0;R:27186;i:1;R:9;}s:26:"1230:pzo-tebhc.qvfcynlanzr";a:2:{i:0;R:27186;i:1;R:9;}s:25:"1230:pzo-tebhc.rkgreanyvq";a:2:{i:0;R:27186;i:1;R:9;}s:21:"1230:pzo-tebhc.syntvq";a:2:{i:0;R:27186;i:1;R:9;}s:32:"1230:pzo-tebhc.tebhcnccebinyqngr";a:2:{i:0;R:27186;i:1;R:9;}s:20:"1230:pzo-tebhc.yvar2";a:2:{i:0;R:27186;i:1;R:9;}s:35:"1230:pzo-tebhc.zrrgvat.zrrgvatcynpr";a:2:{i:0;R:27186;i:1;R:9;}s:43:"1230:pzo-tebhc.zrrgvaterpheerapr.enaxbsqnlf";a:2:{i:0;R:27186;i:1;R:9;}s:40:"1230:pzo-tebhc.zrrgvaterpheerapr.jrrxqnl";a:2:{i:0;R:27186;i:1;R:9;}s:41:"1230:pzo-tebhc.cneragphfgbzre.qvfcynlanzr";a:2:{i:0;R:27186;i:1;R:9;}s:26:"1230:pzo-tebhc.cubarahzore";a:2:{i:0;R:27186;i:1;R:9;}s:34:"1230:pzo-tebhc.cubarahzorefgevccrq";a:2:{i:0;R:27186;i:1;R:9;}s:20:"1230:pzo-tebhc.fgngr";a:2:{i:0;R:27186;i:1;R:9;}s:23:"1230:pzo-tebhc.fgnghfvq";a:2:{i:0;R:27186;i:1;R:9;}s:22:"1230:pzo-tebhc.genvarq";a:2:{i:0;R:27186;i:1;R:9;}s:26:"1230:pzo-tebhc.genvarqqngr";a:2:{i:0;R:27186;i:1;R:9;}s:18:"1230:pzo-tebhc.mvc";a:2:{i:0;R:27186;i:1;R:9;}s:30:"1230:pzo-ybna.ohfvarffnpgvivgl";a:2:{i:0;R:27186;i:1;R:9;}s:28:"1230:pzo-ybna.pbyyngrenyabgr";a:2:{i:0;R:27186;i:1;R:9;}s:28:"1230:pzo-ybna.pbyyngrenyglcr";a:2:{i:0;R:27186;i:1;R:9;}s:30:"1230:pzo-ybna.qvfohefrzragqngr";a:2:{i:0;R:27186;i:1;R:9;}s:32:"1230:pzo-ybna.vagrerfgengrnzbhag";a:2:{i:0;R:27186;i:1;R:9;}s:30:"1230:pzo-ybna.zrrgvatfgnegqngr";a:2:{i:0;R:27186;i:1;R:9;}s:30:"1230:pzo-ybna.abbsvafgnyyzragf";a:2:{i:0;R:27186;i:1;R:9;}s:23:"1230:pzo-ybna.checbfrbs";a:2:{i:0;R:27186;i:1;R:9;}s:18:"1230:pzo-ybna.engr";a:2:{i:0;R:27186;i:1;R:9;}s:26:"1230:pzo-ybna.nppbhagfgngr";a:2:{i:0;R:27186;i:1;R:9;}s:21:"1230:pzo-ybna.pbzzrag";a:2:{i:0;R:27186;i:1;R:9;}s:18:"1230:pzo-ybna.synt";a:2:{i:0;R:27186;i:1;R:9;}s:33:"1230:pzo-ybna.tenprcrevbqqhengvba";a:2:{i:0;R:27186;i:1;R:9;}s:32:"1230:pzo-ybna.vagqrqqvfohefrzrag";a:2:{i:0;R:27186;i:1;R:9;}s:24:"1230:pzo-ybna.ybnanzbhag";a:2:{i:0;R:27186;i:1;R:9;}s:27:"1230:pzo-ybnacebqhpg.nzbhag";a:2:{i:0;R:27186;i:1;R:9;}s:24:"1230:pzo-ybnacebqhpg.znk";a:2:{i:0;R:27186;i:1;R:9;}s:24:"1230:pzo-ybnacebqhpg.zva";a:2:{i:0;R:27186;i:1;R:9;}s:24:"1230:pzo-ybnacebqhpg.qrs";a:2:{i:0;R:27186;i:1;R:9;}s:38:"1230:pzo-ybnacebqhpg.qrsabvafgnyyzragf";a:2:{i:0;R:27186;i:1;R:9;}s:38:"1230:pzo-ybnacebqhpg.qrsnhygybnanzbhag";a:2:{i:0;R:27186;i:1;R:9;}s:32:"1230:pzo-ybnacebqhpg.qrfpevcgvba";a:2:{i:0;R:27186;i:1;R:9;}s:28:"1230:pzo-ybnacebqhpg.raqqngr";a:2:{i:0;R:27186;i:1;R:9;}s:33:"1230:pzo-ybnacebqhpg.srrf.srranzr";a:2:{i:0;R:27186;i:1;R:9;}s:34:"1230:pzo-ybnacebqhpg.shaq.shaqanzr";a:2:{i:0;R:27186;i:1;R:9;}s:40:"1230:pzo-ybnacebqhpg.tenprcrevbqqhengvba";a:2:{i:0;R:27186;i:1;R:9;}s:54:"1230:pzo-ybnacebqhpg.tenprcrevbqglcr.tenprcrevbqglcrvq";a:2:{i:0;R:27186;i:1;R:9;}s:43:"1230:pzo-ybnacebqhpg.vagqrqqvfohefrzragsynt";a:2:{i:0;R:27186;i:1;R:9;}s:35:"1230:pzo-ybnacebqhpg.vagrerfgtypbqr";a:2:{i:0;R:27186;i:1;R:9;}s:37:"1230:pzo-ybnacebqhpg.ybnapbhagresynt1";a:2:{i:0;R:27186;i:1;R:9;}s:37:"1230:pzo-ybnacebqhpg.ybnapbhagresynt2";a:2:{i:0;R:27186;i:1;R:9;}s:36:"1230:pzo-ybnacebqhpg.znkvagrerfgengr";a:2:{i:0;R:27186;i:1;R:9;}s:34:"1230:pzo-ybnacebqhpg.znkybnanzbhag";a:2:{i:0;R:27186;i:1;R:9;}s:38:"1230:pzo-ybnacebqhpg.znkabvafgnyyzragf";a:2:{i:0;R:27186;i:1;R:9;}s:46:"1230:pzo-ybnacebqhpg.zrrgvatqrgnvyf.erphensgre";a:2:{i:0;R:27186;i:1;R:9;}s:36:"1230:pzo-ybnacebqhpg.zvavagrerfgengr";a:2:{i:0;R:27186;i:1;R:9;}s:34:"1230:pzo-ybnacebqhpg.zvaybnanzbhag";a:2:{i:0;R:27186;i:1;R:9;}s:38:"1230:pzo-ybnacebqhpg.zvaabvafgnyyzragf";a:2:{i:0;R:27186;i:1;R:9;}s:38:"1230:pzo-ybnacebqhpg.cranygl.cranyglvq";a:2:{i:0;R:27186;i:1;R:9;}s:34:"1230:pzo-ybnacebqhpg.cranygltypbqr";a:2:{i:0;R:27186;i:1;R:9;}s:33:"1230:pzo-ybnacebqhpg.cranygltenpr";a:2:{i:0;R:27186;i:1;R:9;}s:32:"1230:pzo-ybnacebqhpg.cranyglengr";a:2:{i:0;R:27186;i:1;R:9;}s:62:"1230:pzo-ybnacebqhpg.ceqnccyvpnoyrznfgre.ceqnccyvpnoyrznfgrevq";a:2:{i:0;R:27186;i:1;R:9;}s:52:"1230:pzo-ybnacebqhpg.ceqpngrtbel.cebqhpgpngrtbelanzr";a:2:{i:0;R:27186;i:1;R:9;}s:36:"1230:pzo-ybnacebqhpg.ceqbssrevatanzr";a:2:{i:0;R:27186;i:1;R:9;}s:41:"1230:pzo-ybnacebqhpg.ceqbssrevatfubeganzr";a:2:{i:0;R:27186;i:1;R:9;}s:47:"1230:pzo-ybnacebqhpg.ceqfgnghf.bssrevatfgnghfvq";a:2:{i:0;R:27186;i:1;R:9;}s:40:"1230:pzo-ybnacebqhpg.cevaqhrynfgvafgsynt";a:2:{i:0;R:27186;i:1;R:9;}s:36:"1230:pzo-ybnacebqhpg.cevapvcnytypbqr";a:2:{i:0;R:27186;i:1;R:9;}s:50:"1230:pzo-ybnacebqhpg.erpheeraprglcr.erpheerapranzr";a:2:{i:0;R:27186;i:1;R:9;}s:30:"1230:pzo-ybnacebqhpg.fgnegqngr";a:2:{i:0;R:27186;i:1;R:9;}s:27:"1230:pzo-ybnacebqhpg.fgnghf";a:2:{i:0;R:27186;i:1;R:9;}s:25:"1230:pzo-crefbaary.traqre";a:2:{i:0;R:27186;i:1;R:9;}s:36:"1230:pzo-crefbaary.ynathntrcersreerq";a:2:{i:0;R:27186;i:1;R:9;}s:24:"1230:pzo-crefbaary.yriry";a:2:{i:0;R:27186;i:1;R:9;}s:32:"1230:pzo-crefbaary.znevgnyfgnghf";a:2:{i:0;R:27186;i:1;R:9;}s:33:"1230:pzo-crefbaary.crefbaarygvgyr";a:2:{i:0;R:27186;i:1;R:9;}s:25:"1230:pzo-crefbaary.fgnghf";a:2:{i:0;R:27186;i:1;R:9;}s:27:"1230:pzo-crefbaary.nqqerff1";a:2:{i:0;R:27186;i:1;R:9;}s:27:"1230:pzo-crefbaary.nqqerff2";a:2:{i:0;R:27186;i:1;R:9;}s:27:"1230:pzo-crefbaary.nqqerff3";a:2:{i:0;R:27186;i:1;R:9;}s:23:"1230:pzo-crefbaary.pvgl";a:2:{i:0;R:27186;i:1;R:9;}s:26:"1230:pzo-crefbaary.pbhagel";a:2:{i:0;R:27186;i:1;R:9;}s:42:"1230:pzo-crefbaary.phfgbzsvryq.qvfcynlanzr";a:2:{i:0;R:27186;i:1;R:9;}s:38:"1230:pzo-crefbaary.phfgbzsvryq.srvyqvq";a:2:{i:0;R:27186;i:1;R:9;}s:41:"1230:pzo-crefbaary.phfgbzsvryq.srvyqinyhr";a:2:{i:0;R:27186;i:1;R:9;}s:35:"1230:pzo-crefbaary.qngrbswbvavatzsv";a:2:{i:0;R:27186;i:1;R:9;}s:38:"1230:pzo-crefbaary.qngrbsyrnivatoenapu";a:2:{i:0;R:27186;i:1;R:9;}s:30:"1230:pzo-crefbaary.qvfcynlanzr";a:2:{i:0;R:27186;i:1;R:9;}s:26:"1230:pzo-crefbaary.rznvyvq";a:2:{i:0;R:27186;i:1;R:9;}s:36:"1230:pzo-crefbaary.rapelcgrqcnffjbeq";a:2:{i:0;R:27186;i:1;R:9;}s:28:"1230:pzo-crefbaary.svefganzr";a:2:{i:0;R:27186;i:1;R:9;}s:31:"1230:pzo-crefbaary.tbireazragvq";a:2:{i:0;R:27186;i:1;R:9;}s:27:"1230:pzo-crefbaary.ynfganzr";a:2:{i:0;R:27186;i:1;R:9;}s:27:"1230:pzo-crefbaary.ybpnyrvq";a:2:{i:0;R:27186;i:1;R:9;}s:29:"1230:pzo-crefbaary.zvqqyranzr";a:2:{i:0;R:27186;i:1;R:9;}s:27:"1230:pzo-crefbaary.bssvprvq";a:2:{i:0;R:27186;i:1;R:9;}s:29:"1230:pzo-crefbaary.bssvpranzr";a:2:{i:0;R:27186;i:1;R:9;}s:29:"1230:pzo-crefbaary.cbfgnypbqr";a:2:{i:0;R:27186;i:1;R:9;}s:23:"1230:pzo-crefbaary.ebyr";a:2:{i:0;R:27186;i:1;R:9;}s:33:"1230:pzo-crefbaary.frpbaqynfganzr";a:2:{i:0;R:27186;i:1;R:9;}s:24:"1230:pzo-crefbaary.fgngr";a:2:{i:0;R:27186;i:1;R:9;}s:28:"1230:pzo-crefbaary.gryrcubar";a:2:{i:0;R:27186;i:1;R:9;}s:32:"1230:pzo-crefbaary.hfreuvrenepul";a:2:{i:0;R:27186;i:1;R:9;}s:27:"1230:pzo-crefbaary.hfreanzr";a:2:{i:0;R:27186;i:1;R:9;}s:28:"1230:pzo-crefbaary.abbsgevrf";a:2:{i:0;R:27186;i:1;R:9;}s:28:"1230:pzo-crefbaary.ynfgybtva";a:2:{i:0;R:27186;i:1;R:9;}s:33:"1230:pzo-fnivat.erpbzzraqrqnzbhag";a:2:{i:0;R:27186;i:1;R:9;}s:45:"1230:pzo-fnivat.phfgbzsvryq.rkgreanyfnivatfvq";a:2:{i:0;R:27186;i:1;R:9;}s:61:"1230:pzo-fnivatfcebqhpg.onynaprhfrqsbevagrerfgengrpnyphyngvba";a:2:{i:0;R:27186;i:1;R:9;}s:35:"1230:pzo-fnivatfcebqhpg.qrfpevcgvba";a:2:{i:0;R:27186;i:1;R:9;}s:31:"1230:pzo-fnivatfcebqhpg.raqqngr";a:2:{i:0;R:27186;i:1;R:9;}s:67:"1230:pzo-fnivatfcebqhpg.vagrerfgpnypglcr.vagrerfgpnyphyngvbaglcrvq1";a:2:{i:0;R:27186;i:1;R:9;}s:67:"1230:pzo-fnivatfcebqhpg.vagrerfgpnypglcr.vagrerfgpnyphyngvbaglcrvq2";a:2:{i:0;R:27186;i:1;R:9;}s:49:"1230:pzo-fnivatfcebqhpg.vagrerfgpnyphyngvbaglcrvq";a:2:{i:0;R:27186;i:1;R:9;}s:36:"1230:pzo-fnivatfcebqhpg.vagrerfgengr";a:2:{i:0;R:27186;i:1;R:9;}s:40:"1230:pzo-fnivatfcebqhpg.znknzagjvguqenjy";a:2:{i:0;R:27186;i:1;R:9;}s:49:"1230:pzo-fnivatfcebqhpg.zrrgvatqrgnvyf.erphensgre";a:2:{i:0;R:27186;i:1;R:9;}s:37:"1230:pzo-fnivatfcebqhpg.zvanzagsbevag";a:2:{i:0;R:27186;i:1;R:9;}s:65:"1230:pzo-fnivatfcebqhpg.ceqnccyvpnoyrznfgre.ceqnccyvpnoyrznfgrevq";a:2:{i:0;R:27186;i:1;R:9;}s:55:"1230:pzo-fnivatfcebqhpg.ceqpngrtbel.cebqhpgpngrtbelanzr";a:2:{i:0;R:27186;i:1;R:9;}s:39:"1230:pzo-fnivatfcebqhpg.ceqbssrevatanzr";a:2:{i:0;R:27186;i:1;R:9;}s:44:"1230:pzo-fnivatfcebqhpg.ceqbssrevatfubeganzr";a:2:{i:0;R:27186;i:1;R:9;}s:50:"1230:pzo-fnivatfcebqhpg.ceqfgnghf.bssrevatfgnghfvq";a:2:{i:0;R:27186;i:1;R:9;}s:65:"1230:pzo-fnivatfcebqhpg.erpbzzraqrqnzaghavg.erpbzzraqrqnzaghavgvq";a:2:{i:0;R:27186;i:1;R:9;}s:41:"1230:pzo-fnivatfcebqhpg.erpbzzraqrqnzbhag";a:2:{i:0;R:27186;i:1;R:9;}s:49:"1230:pzo-fnivatfcebqhpg.fnivatfglcr.fnivatfglcrvq";a:2:{i:0;R:27186;i:1;R:9;}s:33:"1230:pzo-fnivatfcebqhpg.fgnegqngr";a:2:{i:0;R:27186;i:1;R:9;}s:35:"1230:pzo-phfgbzre.oenapu_zrzorefuvc";a:2:{i:0;R:27186;i:1;R:9;}s:36:"1230:pzo-uvfgbevpnyqngn.vagrerfgcnvq";a:2:{i:0;R:27186;i:1;R:9;}s:34:"1230:pzo-uvfgbevpnyqngn.ybnanzbhag";a:2:{i:0;R:27186;i:1;R:9;}s:39:"1230:pzo-uvfgbevpnyqngn.ybnaplpyrahzore";a:2:{i:0;R:27186;i:1;R:9;}s:43:"1230:pzo-uvfgbevpnyqngn.zvffrqcnlzragfpbhag";a:2:{i:0;R:27186;i:1;R:9;}s:29:"1230:pzo-uvfgbevpnyqngn.abgrf";a:2:{i:0;R:27186;i:1;R:9;}s:35:"1230:pzo-uvfgbevpnyqngn.cebqhpganzr";a:2:{i:0;R:27186;i:1;R:9;}s:39:"1230:pzo-uvfgbevpnyqngn.gbgnynzbhagcnvq";a:2:{i:0;R:27186;i:1;R:9;}s:42:"1230:pzo-uvfgbevpnyqngn.gbgnycnlzragfpbhag";a:2:{i:0;R:27186;i:1;R:9;}s:53:"1230:nofgenpghfreqrgnvyfnhguragvpngvbacebivqre.ybpxrq";a:2:{i:0;s:14:"out-mifos-core";i:1;R:9;}s:55:"1230:nofgenpghfreqrgnvyfnhguragvpngvbacebivqre.qvfnoyrq";a:2:{i:0;R:27393;i:1;R:9;}s:61:"1230:nofgenpghfreqrgnvyfnhguragvpngvbacebivqre.onqperqragvnyf";a:2:{i:0;R:27393;i:1;R:9;}s:30:"1230:hfreqrgnvyffreivpr.ybpxrq";a:2:{i:0;R:27393;i:1;R:9;}s:32:"1230:hfreqrgnvyffreivpr.qvfnoyrq";a:2:{i:0;R:27393;i:1;R:9;}s:31:"1230:hfreqrgnvyffreivpr.rkcverq";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:hfreqrgnvyffreivpr.perqragvnyfrkcverq";a:2:{i:0;R:27393;i:1;R:9;}s:10:"1230:nqzva";a:2:{i:0;R:27393;i:1;R:9;}s:30:"1230:nqzva.nqzvavfgengvirgnfxf";a:2:{i:0;R:27393;i:1;R:9;}s:37:"1230:nqzva.nqzvavfgengvirgnfxfjrypbzr";a:2:{i:0;R:27393;i:1;R:9;}s:29:"1230:nqzva.znantrbetnavmngvba";a:2:{i:0;R:27393;i:1;R:9;}s:22:"1230:nqzva.flfgrzhfref";a:2:{i:0;R:27393;i:1;R:9;}s:26:"1230:nqzva.ivrjflfgrzhfref";a:2:{i:0;R:27393;i:1;R:9;}s:30:"1230:nqzva.qrsvararjflfgrzhfre";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:nqzva.znantrebyrfnaqcrezvffvbaf";a:2:{i:0;R:27393;i:1;R:9;}s:18:"1230:nqzva.bssvprf";a:2:{i:0;R:27393;i:1;R:9;}s:22:"1230:nqzva.ivrjbssvprf";a:2:{i:0;R:27393;i:1;R:9;}s:26:"1230:nqzva.qrsvararjbssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:30:"1230:nqzva.ivrjbssvpruvrenepul";a:2:{i:0;R:27393;i:1;R:9;}s:34:"1230:nqzva.betnavmngvbacersreraprf";a:2:{i:0;R:27393;i:1;R:9;}s:19:"1230:nqzva.ivrjsrrf";a:2:{i:0;R:27393;i:1;R:9;}s:24:"1230:nqzva.qrsvararjsrrf";a:2:{i:0;R:27393;i:1;R:9;}s:20:"1230:nqzva.ivrjshaqf";a:2:{i:0;R:27393;i:1;R:9;}s:24:"1230:nqzva.qrsvararjshaq";a:2:{i:0;R:27393;i:1;R:9;}s:29:"1230:nqzva.qrsvararjpurpxyvfg";a:2:{i:0;R:27393;i:1;R:9;}s:25:"1230:nqzva.ivrjpurpxyvfgf";a:2:{i:0;R:27393;i:1;R:9;}s:23:"1230:nqzva.ivrjubyvqnlf";a:2:{i:0;R:27393;i:1;R:9;}s:28:"1230:nqzva.qrsvararjubyvqnlf";a:2:{i:0;R:27393;i:1;R:9;}s:33:"1230:nqzva.qrsvarnpprcgrqcnlzragf";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:nqzva.ivrjbetnavmngvbafrggvatf";a:2:{i:0;R:27393;i:1;R:9;}s:26:"1230:nqzva.ivrjccvfrggvatf";a:2:{i:0;R:27393;i:1;R:9;}s:31:"1230:nqzva.pbasvtherccvfrggvatf";a:2:{i:0;R:27393;i:1;R:9;}s:30:"1230:nqzva.qngnqvfcynlnaqehyrf";a:2:{i:0;R:27393;i:1;R:9;}s:23:"1230:nqzva.qrsvarynoryf";a:2:{i:0;R:27393;i:1;R:9;}s:28:"1230:nqzva.phfgbzvmrzrffntrf";a:2:{i:0;R:27393;i:1;R:9;}s:30:"1230:nqzva.qrsvarybbxhcbcgvbaf";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:nqzva.qrsvarznaqngbel/uvqqrasvryqf";a:2:{i:0;R:27393;i:1;R:9;}s:31:"1230:nqzva.ivrjnqqvgvbanysvryqf";a:2:{i:0;R:27393;i:1;R:9;}s:33:"1230:nqzva.qrsvarnqqvgvbanysvryqf";a:2:{i:0;R:27393;i:1;R:9;}s:24:"1230:nqzva.znantrvzcbegf";a:2:{i:0;R:27393;i:1;R:9;}s:29:"1230:nqzva.vzcbeggenafnpgvbaf";a:2:{i:0;R:27393;i:1;R:9;}s:31:"1230:nqzva.flfgrznqzvavfgengvba";a:2:{i:0;R:27393;i:1;R:9;}s:32:"1230:nqzva.ivrjflfgrzvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:nqzva.ivrjflfgrzvasbezngvba.ivrjnccyvrqhctenqrf";a:2:{i:0;R:27393;i:1;R:9;}s:23:"1230:nqzva.zbagupybfvat";a:2:{i:0;R:27393;i:1;R:9;}s:19:"1230:nqzva.fuhgqbja";a:2:{i:0;R:27393;i:1;R:9;}s:20:"1230:nqzva.ongpuwbof";a:2:{i:0;R:27393;i:1;R:9;}s:25:"1230:nqzva.znantrcebqhpgf";a:2:{i:0;R:27393;i:1;R:9;}s:33:"1230:nqzva.cebqhpgehyrfnggevohgrf";a:2:{i:0;R:27393;i:1;R:9;}s:32:"1230:nqzva.ivrjcebqhpgpngrtbevrf";a:2:{i:0;R:27393;i:1;R:9;}s:28:"1230:nqzva.qrsvararjpngrtbel";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:nqzva.ivrjyngrarffqbeznaplqrsvavgvba";a:2:{i:0;R:27393;i:1;R:9;}s:27:"1230:nqzva.znantrcebqhpgzvk";a:2:{i:0;R:27393;i:1;R:9;}s:26:"1230:nqzva.ivrjcebqhpgfzvk";a:2:{i:0;R:27393;i:1;R:9;}s:28:"1230:nqzva.qrsvarcebqhpgfzvk";a:2:{i:0;R:27393;i:1;R:9;}s:29:"1230:nqzva.znantrybnacebqhpgf";a:2:{i:0;R:27393;i:1;R:9;}s:27:"1230:nqzva.ivrjybnacebqhpgf";a:2:{i:0;R:27393;i:1;R:9;}s:31:"1230:nqzva.qrsvararjybnacebqhpg";a:2:{i:0;R:27393;i:1;R:9;}s:32:"1230:nqzva.znantrfnivatfcebqhpgf";a:2:{i:0;R:27393;i:1;R:9;}s:30:"1230:nqzva.ivrjfnivatfcebqhpgf";a:2:{i:0;R:27393;i:1;R:9;}s:34:"1230:nqzva.qrsvararjfnivatfcebqhpg";a:2:{i:0;R:27393;i:1;R:9;}s:25:"1230:nqzva.znantrnppbhagf";a:2:{i:0;R:27393;i:1;R:9;}s:29:"1230:nqzva.znantrybnanppbhagf";a:2:{i:0;R:27393;i:1;R:9;}s:31:"1230:nqzva.erirefrybnaqvfohefny";a:2:{i:0;R:27393;i:1;R:9;}s:28:"1230:nqzva.erqbybnaqvfohefny";a:2:{i:0;R:27393;i:1;R:9;}s:24:"1230:nqzva.znantrercbegf";a:2:{i:0;R:27393;i:1;R:9;}s:29:"1230:nqzva.ivrjnqzvaqbphzragf";a:2:{i:0;R:27393;i:1;R:9;}s:31:"1230:nqzva.hcybnqnqzvaqbphzragf";a:2:{i:0;R:27393;i:1;R:9;}s:31:"1230:nqzva.ivrjercbegfgrzcyngrf";a:2:{i:0;R:27393;i:1;R:9;}s:31:"1230:nqzva.hcybnqercbeggrzcyngr";a:2:{i:0;R:27393;i:1;R:9;}s:30:"1230:nqzva.ivrjercbegfpngrtbel";a:2:{i:0;R:27393;i:1;R:9;}s:34:"1230:nqzva.qrsvararjercbegpngrtbel";a:2:{i:0;R:27393;i:1;R:9;}s:24:"1230:nqzva.znantrfheirlf";a:2:{i:0;R:27393;i:1;R:9;}s:22:"1230:nqzva.ivrjfheirlf";a:2:{i:0;R:27393;i:1;R:9;}s:26:"1230:nqzva.qrsvararjfheirl";a:2:{i:0;R:27393;i:1;R:9;}s:27:"1230:nqzva.ivrjdhrfgvbaonax";a:2:{i:0;R:27393;i:1;R:9;}s:26:"1230:nqzva.qrsvardhrfgvbaf";a:2:{i:0;R:27393;i:1;R:9;}s:26:"1230:nqzva.znantrdhrfgvbaf";a:2:{i:0;R:27393;i:1;R:9;}s:24:"1230:nqzva.ivrjdhrfgvbaf";a:2:{i:0;R:27393;i:1;R:9;}s:28:"1230:nqzva.qrsvararjdhrfgvba";a:2:{i:0;R:27393;i:1;R:9;}s:29:"1230:nqzva.ivrjdhrfgvbatebhcf";a:2:{i:0;R:27393;i:1;R:9;}s:33:"1230:nqzva.qrsvararjdhrfgvbatebhc";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:nqzva.qrsvararjcebqhpgpngrtbel";a:2:{i:0;R:27393;i:1;R:9;}s:46:"1230:nqzva.frnepuolanzrflfgrzvqbenppbhagahzore";a:2:{i:0;R:27393;i:1;R:9;}s:17:"1230:nqzva.frnepu";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:nqzva.qrsvarynoryf.znaqngbelsvryq.urnqbssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:24:"1230:abgrzcgl.urnqbssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:28:"1230:abgrzcgl.ertvbanybssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:31:"1230:abgrzcgl.fhoertvbanybssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:24:"1230:abgrzcgl.nernbssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:26:"1230:abgrzcgl.oenapubssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:20:"1230:abgrzcgl.pyvrag";a:2:{i:0;R:27393;i:1;R:9;}s:19:"1230:abgrzcgl.tebhc";a:2:{i:0;R:27393;i:1;R:9;}s:20:"1230:abgrzcgl.pragre";a:2:{i:0;R:27393;i:1;R:9;}s:19:"1230:abgrzcgl.ybnaf";a:2:{i:0;R:27393;i:1;R:9;}s:21:"1230:abgrzcgl.fnivatf";a:2:{i:0;R:27393;i:1;R:9;}s:19:"1230:abgrzcgl.fgngr";a:2:{i:0;R:27393;i:1;R:9;}s:24:"1230:abgrzcgl.cbfgnypbqr";a:2:{i:0;R:27393;i:1;R:9;}s:23:"1230:abgrzcgl.rguavpvgl";a:2:{i:0;R:27393;i:1;R:9;}s:25:"1230:abgrzcgl.pvgvmrafuvc";a:2:{i:0;R:27393;i:1;R:9;}s:25:"1230:abgrzcgl.unaqvpnccrq";a:2:{i:0;R:27393;i:1;R:9;}s:20:"1230:abgrzcgl.tbigvq";a:2:{i:0;R:27393;i:1;R:9;}s:22:"1230:abgrzcgl.nqqerff1";a:2:{i:0;R:27393;i:1;R:9;}s:22:"1230:abgrzcgl.nqqerff2";a:2:{i:0;R:27393;i:1;R:9;}s:22:"1230:abgrzcgl.nqqerff3";a:2:{i:0;R:27393;i:1;R:9;}s:32:"1230:abgrzcgl.cnegvnynccyvpngvba";a:2:{i:0;R:27393;i:1;R:9;}s:29:"1230:abgrzcgl.craqvatnccebiny";a:2:{i:0;R:27393;i:1;R:9;}s:22:"1230:abgrzcgl.nccebirq";a:2:{i:0;R:27393;i:1;R:9;}s:20:"1230:abgrzcgl.pnapry";a:2:{i:0;R:27393;i:1;R:9;}s:20:"1230:abgrzcgl.pybfrq";a:2:{i:0;R:27393;i:1;R:9;}s:20:"1230:abgrzcgl.baubyq";a:2:{i:0;R:27393;i:1;R:9;}s:20:"1230:abgrzcgl.npgvir";a:2:{i:0;R:27393;i:1;R:9;}s:22:"1230:abgrzcgl.vanpgvir";a:2:{i:0;R:27393;i:1;R:9;}s:34:"1230:abgrzcgl.npgvirvatbbqfgnaqvat";a:2:{i:0;R:27393;i:1;R:9;}s:33:"1230:abgrzcgl.npgvirvaonqfgnaqvat";a:2:{i:0;R:27393;i:1;R:9;}s:33:"1230:abgrzcgl.pybfrqboyvtngvbazrg";a:2:{i:0;R:27393;i:1;R:9;}s:31:"1230:abgrzcgl.pybfrqerfpurqhyrq";a:2:{i:0;R:27393;i:1;R:9;}s:30:"1230:abgrzcgl.pybfrqjevggrabss";a:2:{i:0;R:27393;i:1;R:9;}s:18:"1230:abgrzcgl.abar";a:2:{i:0;R:27393;i:1;R:9;}s:34:"1230:abgrzcgl.tenprbanyyercnlzragf";a:2:{i:0;R:27393;i:1;R:9;}s:32:"1230:abgrzcgl.cevapvcnybayltenpr";a:2:{i:0;R:27393;i:1;R:9;}s:22:"1230:abgrzcgl.vagrerfg";a:2:{i:0;R:27393;i:1;R:9;}s:24:"1230:abgrzcgl.rkgreanyvq";a:2:{i:0;R:27393;i:1;R:9;}s:23:"1230:abgrzcgl.ohyxragel";a:2:{i:0;R:27393;i:1;R:9;}s:24:"1230:cntrabgsbhaqurnqvat";a:2:{i:0;R:27393;i:1;R:9;}s:24:"1230:cntrabgsbhaqzrffntr";a:2:{i:0;R:27393;i:1;R:9;}s:22:"1230:cntrabgsbhaqgvgyr";a:2:{i:0;R:27393;i:1;R:9;}s:24:"1230:npprffqravrqurnqvat";a:2:{i:0;R:27393;i:1;R:9;}s:24:"1230:npprffqravrqzrffntr";a:2:{i:0;R:27393;i:1;R:9;}s:22:"1230:npprffqravrqgvgyr";a:2:{i:0;R:27393;i:1;R:9;}s:38:"1230:pbyyrpgvbafurrgragel.fryrpg.gvgyr";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:pbyyrpgvbafurrgragel.fryrpg.sbez.ynory.oenapubssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:pbyyrpgvbafurrgragel.fryrpg.sbez.ynory.ybnabssvpre";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:pbyyrpgvbafurrgragel.fryrpg.sbez.ynory.pragre";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:pbyyrpgvbafurrgragel.fryrpg.sbez.ynory.cnlzragzbqr";a:2:{i:0;R:27393;i:1;R:9;}s:21:"1230:pbzzvgvqragvsvre";a:2:{i:0;R:27393;i:1;R:9;}s:23:"1230:perngrpyvrag.gvgyr";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:perngrpyvragfhpprff.pyvragperngrqfhpprffshyyl";a:2:{i:0;R:27393;i:1;R:9;}s:30:"1230:perngrpyvragfhpprff.gvgyr";a:2:{i:0;R:27393;i:1;R:9;}s:20:"1230:perngrarjpyvrag";a:2:{i:0;R:27393;i:1;R:9;}s:19:"1230:perngrarjtebhc";a:2:{i:0;R:27393;i:1;R:9;}s:27:"1230:phfgbzercbegfqverpgbel";a:2:{i:0;R:27393;i:1;R:9;}s:11:"1230:qryrgr";a:2:{i:0;R:27393;i:1;R:9;}s:33:"1230:qryrgrybnacebqhpg.nerlbhfher";a:2:{i:0;R:27393;i:1;R:9;}s:28:"1230:qryrgrybnacebqhpg.gvgyr";a:2:{i:0;R:27393;i:1;R:9;}s:47:"1230:qryrgrybnacebqhpgsnvyher.orpnhfrybnafrkvfg";a:2:{i:0;R:27393;i:1;R:9;}s:44:"1230:qryrgrybnacebqhpgsnvyher.pbhyqabgqryrgr";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:qryrgrybnacebqhpgsnvyher.gvgyr";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:qryrgrybnacebqhpgfhpprff.fhpprffshyylqryrgrq";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:qryrgrybnacebqhpgfhpprff.gvgyr";a:2:{i:0;R:27393;i:1;R:9;}s:18:"1230:qvfohefnyqngr";a:2:{i:0;R:27393;i:1;R:9;}s:17:"1230:qvfohefrybna";a:2:{i:0;R:27393;i:1;R:9;}s:21:"1230:qvivfvbanybssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:18:"1230:rqhpngvbaybna";a:2:{i:0;R:27393;i:1;R:9;}s:24:"1230:reebe.abg-fcrpvsvrq";a:2:{i:0;R:27393;i:1;R:9;}s:29:"1230:ragrepbyyrpgvbafurrgqngn";a:2:{i:0;R:27393;i:1;R:9;}s:14:"1230:svefganzr";a:2:{i:0;R:27393;i:1;R:9;}s:13:"1230:terrgvat";a:2:{i:0;R:27393;i:1;R:9;}s:24:"1230:tebhcf.ivrj.urnqvat";a:2:{i:0;R:27393;i:1;R:9;}s:31:"1230:ybnacebqhpg.perngr.urnqvat";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:ybnacebqhpg.perngr.fhpprff.urnqvat";a:2:{i:0;R:27393;i:1;R:9;}s:29:"1230:ybnacebqhpg.rqvg.urnqvat";a:2:{i:0;R:27393;i:1;R:9;}s:37:"1230:ybnacebqhpg.rqvg.fhpprff.urnqvat";a:2:{i:0;R:27393;i:1;R:9;}s:37:"1230:ybnacebqhpg.ybatanzr.qrfpevcgvba";a:2:{i:0;R:27393;i:1;R:9;}s:44:"1230:ybnacebqhpg.znkvagrerfgengr.qrfpevcgvba";a:2:{i:0;R:27393;i:1;R:9;}s:44:"1230:ybnacebqhpg.zvavagrerfgengr.qrfpevcgvba";a:2:{i:0;R:27393;i:1;R:9;}s:38:"1230:ybnacebqhpg.fubeganzr.qrfpevcgvba";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:ybnacebqhpg.fgnghf.qrfpevcgvba";a:2:{i:0;R:27393;i:1;R:9;}s:29:"1230:ybnacebqhpg.ivrj.urnqvat";a:2:{i:0;R:27393;i:1;R:9;}s:16:"1230:ybnacebqhpg";a:2:{i:0;R:27393;i:1;R:9;}s:29:"1230:ybnacebqhpgfgnghf.npgvir";a:2:{i:0;R:27393;i:1;R:9;}s:31:"1230:ybnacebqhpgfgnghf.vanpgvir";a:2:{i:0;R:27393;i:1;R:9;}s:30:"1230:ybnacebqhpgf.ivrj.urnqvat";a:2:{i:0;R:27393;i:1;R:9;}s:34:"1230:ybnacebqhpgf.ivrj.abarqrsvarq";a:2:{i:0;R:27393;i:1;R:9;}s:44:"1230:ybnacebqhpgf.ivrj.gnoyrurnqvat.ybatanzr";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:ybnacebqhpgf.ivrj.gnoyrurnqvat.fubeganzr";a:2:{i:0;R:27393;i:1;R:9;}s:18:"1230:znantrpyvragf";a:2:{i:0;R:27393;i:1;R:9;}s:22:"1230:znantrvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:21:"1230:abbssvprfqrsvarq";a:2:{i:0;R:27393;i:1;R:9;}s:9:"1230:abgr";a:2:{i:0;R:27393;i:1;R:9;}s:15:"1230:dhvpxfgneg";a:2:{i:0;R:27393;i:1;R:9;}s:13:"1230:erdhverq";a:2:{i:0;R:27393;i:1;R:9;}s:29:"1230:frphevgl.ebyr.ebyr_nqzva";a:2:{i:0;R:27393;i:1;R:9;}s:28:"1230:frphevgl.ebyr.ebyr_hfre";a:2:{i:0;R:27393;i:1;R:9;}s:33:"1230:frphevgl.ebyr.ebyr_nabalzbhf";a:2:{i:0;R:27393;i:1;R:9;}s:29:"1230:frphevgl.ebyr.ebyr_thrfg";a:2:{i:0;R:27393;i:1;R:9;}s:21:"1230:frrnyvfgbstebhcf";a:2:{i:0;R:27393;i:1;R:9;}s:11:"1230:fhozvg";a:2:{i:0;R:27393;i:1;R:9;}s:14:"1230:gno.nqzva";a:2:{i:0;R:27393;i:1;R:9;}s:27:"1230:gno.pyvragfnaqnppbhagf";a:2:{i:0;R:27393;i:1;R:9;}s:13:"1230:gno.ubzr";a:2:{i:0;R:27393;i:1;R:9;}s:16:"1230:gno.ercbegf";a:2:{i:0;R:27393;i:1;R:9;}s:80:"1230:ivrjbssvpruvrenepul.gurbssvpruvrenepulpnaunirzvavzhzgjbnaqznkvzhzsviryriryf";a:2:{i:0;R:27393;i:1;R:9;}s:87:"1230:ivrjbssvpruvrenepul.guruvturfgnaqybjrfguvrenepulyriryfpnaabgorerzbirqsebzgurflfgrz";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:ivrjbssvpruvrenepul.purpxguryriryfgborvapyhqrq";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:ivrjbssvpruvrenepul.urnqbssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:ivrjbssvpruvrenepul.ertvbanybssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:ivrjbssvpruvrenepul.qvivfvbanybssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:ivrjbssvpruvrenepul.nernbssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:37:"1230:ivrjbssvpruvrenepul.oenapubssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:29:"1230:ivrjbssvpruvrenepul.abgr";a:2:{i:0;R:27393;i:1;R:9;}s:10:"1230:gvgyr";a:2:{i:0;R:27393;i:1;R:9;}s:31:"1230:gbdhvpxylsvaqnpyvraglbhpna";a:2:{i:0;R:27393;i:1;R:9;}s:24:"1230:gbivrjnyvfgbstebhcf";a:2:{i:0;R:27393;i:1;R:9;}s:28:"1230:glcrzvfzngpu.crepragntr";a:2:{i:0;R:27393;i:1;R:9;}s:17:"1230:glcrzvfzngpu";a:2:{i:0;R:27393;i:1;R:9;}s:25:"1230:hfre.pbasvezcnffjbeq";a:2:{i:0;R:27393;i:1;R:9;}s:24:"1230:hfre.perngr.urnqvat";a:2:{i:0;R:27393;i:1;R:9;}s:32:"1230:hfre.perngr.fhpprff.urnqvat";a:2:{i:0;R:27393;i:1;R:9;}s:30:"1230:hfre.perngr.fhpprff.gvgyr";a:2:{i:0;R:27393;i:1;R:9;}s:22:"1230:hfre.perngr.gvgyr";a:2:{i:0;R:27393;i:1;R:9;}s:18:"1230:hfre.cnffjbeq";a:2:{i:0;R:27393;i:1;R:9;}s:27:"1230:hfre.ebyrf.qrfpevcgvba";a:2:{i:0;R:27393;i:1;R:9;}s:16:"1230:hfre.hfrevq";a:2:{i:0;R:27393;i:1;R:9;}s:10:"1230:hfref";a:2:{i:0;R:27393;i:1;R:9;}s:9:"1230:hfre";a:2:{i:0;R:27393;i:1;R:9;}s:10:"1230:zvsbf";a:2:{i:0;R:27393;i:1;R:9;}s:10:"1230:ybtva";a:2:{i:0;R:27393;i:1;R:9;}s:11:"1230:ybtbhg";a:2:{i:0;R:27393;i:1;R:9;}s:17:"1230:lbhefrggvatf";a:2:{i:0;R:27393;i:1;R:9;}s:19:"1230:fjvgpufvgrglcr";a:2:{i:0;R:27393;i:1;R:9;}s:21:"1230:ivrjtebhcf.gvgyr";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:lbhpnaanivtngrlbhejnlguebhtuzvsbfhfvat";a:2:{i:0;R:27393;i:1;R:9;}s:26:"1230:flfgrz.haunaqyrqreebe";a:2:{i:0;R:27393;i:1;R:9;}s:33:"1230:flfgrz.haunaqyrqreebeurnqvat";a:2:{i:0;R:27393;i:1;R:9;}s:32:"1230:flfgrz.cntrrkcverqrkprcgvba";a:2:{i:0;R:27393;i:1;R:9;}s:22:"1230:flfgrz.gbpbagvahr";a:2:{i:0;R:27393;i:1;R:9;}s:21:"1230:flfgrzjvqrsvryqf";a:2:{i:0;R:27393;i:1;R:9;}s:18:"1230:ivrjpunatrybt";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:znantrcebqhpgf.rqvgpngrtbel.pngrtbelanzr";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:znantrcebqhpgf.rqvgpngrtbel.rqvgpngrtbelvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:znantrcebqhpgf.rqvgpngrtbel.pngrtbelqrgnvyf";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:znantrcebqhpgf.rqvgpngrtbel.rqvggursvryqforybj";a:2:{i:0;R:27393;i:1;R:9;}s:44:"1230:znantrcebqhpgf.rqvgpngrtbel.qrfpevcgvba";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:znantrcebqhpgf.rqvgpngrtbel.fgnghf1";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:betnavmngvbacersreraprf.qrsvararjpurpxyvfgf.anzr";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:betnavmngvbacersreraprf.qrsvararjpurpxyvfgf.glcr";a:2:{i:0;R:27393;i:1;R:9;}s:54:"1230:betnavmngvbacersreraprf.qrsvararjpurpxyvfgf.vgrzf";a:2:{i:0;R:27393;i:1;R:9;}s:69:"1230:betnavmngvbacersreraprf.qrsvararjpurpxyvfgf.purpxyvfgvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:64:"1230:betnavmngvbacersreraprf.qrsvararjpurpxyvfgf.nqqarjpurpxyvfg";a:2:{i:0;R:27393;i:1;R:9;}s:74:"1230:betnavmngvbacersreraprf.qrsvararjpurpxyvfgf.ragrepurpxyvfgvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:89:"1230:betnavmngvbacersreraprf.qrsvararjpurpxyvfgf.pbzcyrgrgursvryqforybj.gurapyvpxcerivrj.";a:2:{i:0;R:27393;i:1;R:9;}s:65:"1230:betnavmngvbacersreraprf.qrsvararjpurpxyvfgf.purpxyvfgqrgnvyf";a:2:{i:0;R:27393;i:1;R:9;}s:78:"1230:betnavmngvbacersreraprf.qrsvararjpurpxyvfgf.qvfcynlrqjurazbivatvagbfgnghf";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:betnavmngvbacersreraprf.qrsvararjpurpxyvfgf.vanpgvir";a:2:{i:0;R:27393;i:1;R:9;}s:107:"1230:betnavmngvbacersreraprf.qrsvararjpurpxyvfgf.ragregrkgsbernpuvgrznaqpyvpxnqqgbfnirgurvgrzvaguryvfgorybj";a:2:{i:0;R:27393;i:1;R:9;}s:63:"1230:betnavmngvbacersreraprf.qrsvararjpurpxyvfgf.erzbirfryrpgrq";a:2:{i:0;R:27393;i:1;R:9;}s:67:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.fnivatfcebqhpgvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:63:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.nqqnarjfnivatfcebqhpg";a:2:{i:0;R:27393;i:1;R:9;}s:72:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.ragrefnivatfcebqhpgvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:64:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.pbzcyrgrgursvryqforybj";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.sebzqngr";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.raqqngr";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.pyvragf";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.tebhcf";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.pragref";a:2:{i:0;R:27393;i:1;R:9;}s:54:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.nyyphfgbzref";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.haxabja";a:2:{i:0;R:27393;i:1;R:9;}s:83:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.gnetrgrqqrcbfvgfnaqjvguqenjnyerfgevpgvbaf";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.znaqngbel";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.ibyhagnel";a:2:{i:0;R:27393;i:1;R:9;}s:69:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.erpbzzraqrqnzbhagsbeqrcbfvg";a:2:{i:0;R:27393;i:1;R:9;}s:67:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.znaqngbelnzbhagsbeqrcbfvg";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.crevaqvivqhny";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.pbzcyrgrtebhc";a:2:{i:0;R:27393;i:1;R:9;}s:75:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.onynaprhfrqsbevagrerfgpnyphyngvba";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.zvavzhzonynapr";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.nirentronynapr";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.qnl(f)";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.zbagu(f)";a:2:{i:0;R:27393;i:1;R:9;}s:63:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.fnivatfcebqhpgqrgnvyf";a:2:{i:0;R:27393;i:1;R:9;}s:61:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.cebqhpgvafgnapranzr";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.fubeganzr";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.qrfpevcgvba";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.cebqhpgpngrtbel";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.nccyvpnoyrsbe";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.glcrbsqrcbfvgf";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.nzbhagnccyvrfgb";a:2:{i:0;R:27393;i:1;R:9;}s:64:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.znknzbhagcrejvguqenjny";a:2:{i:0;R:27393;i:1;R:9;}s:74:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.cerivrjfnivatfcebqhpgvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:54:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.vagrerfgengr";a:2:{i:0;R:27393;i:1;R:9;}s:74:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.gvzrcrevbqsbevagrerfgpnyphyngvba";a:2:{i:0;R:27393;i:1;R:9;}s:78:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.serdhraplbsvagrerfgcbfgvatgbnppbhagf";a:2:{i:0;R:27393;i:1;R:9;}s:86:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.zvavzhzonynaprerdhverqsbevagrerfgpnyphyngvba";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.cranygvrf";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.nppbhagvat";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.typbqrsbeqrcbfvgf";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.typbqrsbevagrerfg";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.nggnpucranygvrfglcrf";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:znantrcebqhpgf.qrsvarfnivatfcebqhpgf.pyvpxcranyglglcrf";a:2:{i:0;R:27393;i:1;R:9;}s:34:"1230:qhcyvpngr.trarenyqrgnvyf.anzr";a:2:{i:0;R:27393;i:1;R:9;}s:33:"1230:abgrzcgl.trarenyqrgnvyf.anzr";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:qhcyvpngr.trarenyqrgnvyf.fubeganzr";a:2:{i:0;R:27393;i:1;R:9;}s:38:"1230:abgrzcgl.trarenyqrgnvyf.fubeganzr";a:2:{i:0;R:27393;i:1;R:9;}s:33:"1230:zva.trarenyqrgnvyf.fgnegqngr";a:2:{i:0;R:27393;i:1;R:9;}s:33:"1230:znk.trarenyqrgnvyf.fgnegqngr";a:2:{i:0;R:27393;i:1;R:9;}s:31:"1230:zva.trarenyqrgnvyf.raqqngr";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:zva.trarenyqrgnvyf.fgnegqngrqnl";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:znk.trarenyqrgnvyf.fgnegqngrqnl";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:abgahyy.trarenyqrgnvyf.fgnegqngrqnl";a:2:{i:0;R:27393;i:1;R:9;}s:38:"1230:zva.trarenyqrgnvyf.fgnegqngrzbagu";a:2:{i:0;R:27393;i:1;R:9;}s:38:"1230:znk.trarenyqrgnvyf.fgnegqngrzbagu";a:2:{i:0;R:27393;i:1;R:9;}s:34:"1230:zva.trarenyqrgnvyf.raqqngrqnl";a:2:{i:0;R:27393;i:1;R:9;}s:34:"1230:znk.trarenyqrgnvyf.raqqngrqnl";a:2:{i:0;R:27393;i:1;R:9;}s:38:"1230:abgahyy.trarenyqrgnvyf.raqqngrqnl";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:zva.trarenyqrgnvyf.raqqngrzbagu";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:znk.trarenyqrgnvyf.raqqngrzbagu";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:abgahyy.trarenyqrgnvyf.fgnegqngrzbagu";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:abgrzcgl.trarenyqrgnvyf.fgnegqngrlrne";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:abgrzcgl.trarenyqrgnvyf.fryrpgrqpngrtbel";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:abgrzcgl.trarenyqrgnvyf.fryrpgrqnccyvpnoyrsbe";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:abgrzcgl.fnivatfcebqhpg.fryrpgrqqrcbfvgglcr";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:zva.fnivatfcebqhpg.nzbhagsbeqrfcbfvg";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:abgrzcgl.fnivatfcebqhpg.fryrpgrqtebhcfnivatfnccebnpu";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:abgahyy.fnivatfcebqhpg.vagrerfgengr";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:abgrzcgl.fnivatfcebqhpg.fryrpgrqvagrerfgpnyphyngvba";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:abgahyy.fnivatfcebqhpg.vagrerfgpnyphyngvbaserdhrapl";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:zva.fnivatfcebqhpg.vagrerfgcbfgvatzbaguylserdhrapl";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:abgahyy.fnivatfcebqhpg.vagrerfgcbfgvatzbaguylserdhrapl";a:2:{i:0;R:27393;i:1;R:9;}s:61:"1230:zva.fnivatfcebqhpg.onynaprerdhverqsbevagrerfgpnyphyngvba";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:abgrzcgl.fnivatfcebqhpg.fryrpgrqcevapvcnytypbqr";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:abgrzcgl.fnivatfcebqhpg.fryrpgrqvagrerfgtypbqr";a:2:{i:0;R:27393;i:1;R:9;}s:44:"1230:znkqvtvgfnsgre.fnivatcebqhpg.jvguqenjny";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:znkqvtvgforsber.fnivatcebqhpg.jvguqenjny";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:znkqvtvgfahzore.fnivatcebqhpg.jvguqenjny";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:znkqvtvgfnsgre.fnivatcebqhpg.qrcbfvg";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:znkqvtvgforsber.fnivatcebqhpg.qrcbfvg";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:znkqvtvgfahzore.fnivatcebqhpg.qrcbfvg";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:znanqngbeluvqqrasvryqf.qrsvarznaqngbel/uvqqrasvryqf";a:2:{i:0;R:27393;i:1;R:9;}s:32:"1230:znanqngbeluvqqrasvryqf.uvqr";a:2:{i:0;R:27393;i:1;R:9;}s:37:"1230:znanqngbeluvqqrasvryqf.znaqngbel";a:2:{i:0;R:27393;i:1;R:9;}s:38:"1230:znanqngbeluvqqrasvryqf.rkgreanyvq";a:2:{i:0;R:27393;i:1;R:9;}s:37:"1230:znanqngbeluvqqrasvryqf.rguavpvgl";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:znanqngbeluvqqrasvryqf.pvgvmrafuvc";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:znanqngbeluvqqrasvryqf.unaqvpnccrq";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:znanqngbeluvqqrasvryqf.rqhpngvbayriry";a:2:{i:0;R:27393;i:1;R:9;}s:33:"1230:znanqngbeluvqqrasvryqf.cubgb";a:2:{i:0;R:27393;i:1;R:9;}s:54:"1230:znanqngbeluvqqrasvryqf.nffvtavatpyvraggbcbfvgvbaf";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:znanqngbeluvqqrasvryqf.nqqerff1";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:znanqngbeluvqqrasvryqf.nqqerff2";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:znanqngbeluvqqrasvryqf.nqqerff3";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:znanqngbeluvqqrasvryqf.pvgl/qvfgevpg";a:2:{i:0;R:27393;i:1;R:9;}s:33:"1230:znanqngbeluvqqrasvryqf.fgngr";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:znanqngbeluvqqrasvryqf.pbhagel";a:2:{i:0;R:27393;i:1;R:9;}s:38:"1230:znanqngbeluvqqrasvryqf.cbfgnypbqr";a:2:{i:0;R:27393;i:1;R:9;}s:44:"1230:znanqngbeluvqqrasvryqf.erprvcgvqnaqqngr";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:znanqngbeluvqqrasvryqf.pbyyngrenyglcrnaqabgrf";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:znanqngbeluvqqrasvryqf.pyvrag/flfgrzhfrefsvryqf";a:2:{i:0;R:27393;i:1;R:9;}s:38:"1230:znanqngbeluvqqrasvryqf.zvqqyranzr";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:znanqngbeluvqqrasvryqf.frpbaqynfganzr";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:znanqngbeluvqqrasvryqf.tbireazragvq";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:znanqngbeluvqqrasvryqf.znegvnyfgnghf";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:znanqngbeluvqqrasvryqf.cbireglfgnghf";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:znanqngbeluvqqrasvryqf.snzvylqrgnvyf";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:znanqngbeluvqqrasvryqf.fcbhfr/sngurezvqqyranzr";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:znanqngbeluvqqrasvryqf.fcbhfr/sngurefrpbaqynfganzr";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:znanqngbeluvqqrasvryqf.cubarahzore";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:znanqngbeluvqqrasvryqf.genvarq";a:2:{i:0;R:27393;i:1;R:9;}s:37:"1230:znanqngbeluvqqrasvryqf.genvarqba";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:znanqngbeluvqqrasvryqf.ohfvarff/jbexnpgvivgvrf";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:znanqngbeluvqqrasvryqf.ahzbspuvyqera";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:znanqngbeluvqqrasvryqf.tebhcsvryqf";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:znanqngbeluvqqrasvryqf.ybnanppbhagsvryqf";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:znanqngbeluvqqrasvryqf.checbfrbsybna";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:znanqngbeluvqqrasvryqf.fbheprbsshaq";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:znanqngbeluvqqrasvryqf.qrsvarznaqngbeluvqqrasvryqf";a:2:{i:0;R:27393;i:1;R:9;}s:63:"1230:znantrcebqhpgf.ivrjcebqhpgpngrtbevrf.ivrjcebqhpgpngrtbevrf";a:2:{i:0;R:27393;i:1;R:9;}s:92:"1230:znantrcebqhpgf.ivrjcebqhpgpngrtbevrf.pyvpxbanpngrtbelorybjgbivrjqrgnvyfnaqznxrpunatrfbe";a:2:{i:0;R:27393;i:1;R:9;}s:65:"1230:znantrcebqhpgf.ivrjcebqhpgpngrtbevrf.qrsvararjercbegpngrtbel";a:2:{i:0;R:27393;i:1;R:9;}s:47:"1230:znantrcebqhpgf.ivrjcebqhpgpngrtbevrf.ybnaf";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:znantrcebqhpgf.ivrjcebqhpgpngrtbevrf.bguref";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:znantrcebqhpgf.ivrjcebqhpgpngrtbevrf.fnivatf";a:2:{i:0;R:27393;i:1;R:9;}s:24:"1230:rqvgcebqhpgpngrtbel";a:2:{i:0;R:27393;i:1;R:9;}s:31:"1230:ivrjcebqhpgpngrtbelqrgnvyf";a:2:{i:0;R:27393;i:1;R:9;}s:64:"1230:znantrcebqhpgf.qrsvararjpngrtbel.cebqhpgpngrtbelvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:69:"1230:znantrcebqhpgf.qrsvararjpngrtbel.ragrecebqhpgpngrtbelvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:znantrcebqhpgf.qrsvararjpngrtbel.pngrtbelqrgnvyf";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:znantrcebqhpgf.qrsvararjpngrtbel.cebqhpgglcr";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:znantrcebqhpgf.qrsvararjpngrtbel.pngrtbelqrfpevcgvba";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:znantrcebqhpgf.qrsvararjpngrtbel.pngrtbelanzr";a:2:{i:0;R:27393;i:1;R:9;}s:132:"1230:znantrcebqhpgf.qrsvararjpngrtbel.pbzcyrgrgursvryqforybj.gurapyvpxcerivrj.pyvpxpnaprygbergheagbnqzvajvgubhgfhozvggvatvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:abgrzcgl.sbezorna.cebqhpgglcrvq";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:abgrzcgl.sbezorna.cebqhpgpngrtbelanzr";a:2:{i:0;R:27393;i:1;R:9;}s:46:"1230:abgrzcgl.sbezorna.cebqhpgpngrtbelfgnghfvq";a:2:{i:0;R:27393;i:1;R:9;}s:28:"1230:reebef.qhcypngrtbelanzr";a:2:{i:0;R:27393;i:1;R:9;}s:69:"1230:znantrcebqhpg.rqvgpngrtbel.cerivrjgursvryqforybj.gurapyvpxfhozvg";a:2:{i:0;R:27393;i:1;R:9;}s:25:"1230:rqvgyngrarffqbeznapl";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:znantrcebqhpgf.rqvgyngrarffqbeznapl.frgyngrarffqrsvavgvba";a:2:{i:0;R:27393;i:1;R:9;}s:75:"1230:znantrcebqhpgf.rqvgyngrarffqbeznapl.fcrpvslgurahzorebsqnlfbsabacnlzrag";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:znantrcebqhpgf.rqvgyngrarffqbeznapl.qnlf";a:2:{i:0;R:27393;i:1;R:9;}s:61:"1230:znantrcebqhpgf.rqvgyngrarffqbeznapl.fcrpvslinyvqyngrarff";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:znantrcebqhpgf.rqvgyngrarffqbeznapl.frgqbeznaplqrsvavgvba";a:2:{i:0;R:27393;i:1;R:9;}s:79:"1230:znantrcebqhpgf.rqvgyngrarffqbeznapl.fcrpvslgurahzorebsqnlfgbqrsvarqbeznapl";a:2:{i:0;R:27393;i:1;R:9;}s:61:"1230:znantrcebqhpgf.rqvgyngrarffqbeznapl.fcrpvslinyvqqbeznapl";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:znantrcebqhpgf.rqvgyngrarffqbeznapl.ybna";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:znantrcebqhpgf.rqvgyngrarffqbeznapl.fnivatf";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:glcrzvfzngpu.sbezorna.yngrarffqnlf";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:glcrzvfzngpu.sbezorna.qbeznaplqnlf";a:2:{i:0;R:27393;i:1;R:9;}s:94:"1230:znantrcebqhpg.ivrjcebqhpgzvk.pyvpxbancebqhpgvafgnaprorybjgbivrjzvkqrgnvyfnaqznxrpunatrfbe";a:2:{i:0;R:27393;i:1;R:9;}s:38:"1230:znantrcebqhpg.ivrjcebqhpgzvk.ybna";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:znantrcebqhpg.ivrjcebqhpgzvk.fnivatf";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:znantrcebqhpg.cebqhpgzvkqrgnvyf.rqvgcebqhpgzvkvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:znantrcebqhpg.cebqhpgzvkqrgnvyf.abgnyybjrqcebqhpgf";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:znantrcebqhpg.cebqhpgzvkqrgnvyf.nyybjrqcebqhpgf";a:2:{i:0;R:27393;i:1;R:9;}s:58:"1230:znantrcebqhpgf.qrsvarcebqhpgzvk.cebqhpgzvkvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:54:"1230:znantrcebqhpgf.qrsvarcebqhpgzvk.nqqnarjcebqhpgzvk";a:2:{i:0;R:27393;i:1;R:9;}s:131:"1230:znantrcebqhpgf.qrsvarcebqhpgzvk.pbzcyrgrgursvryqforybj.gurapyvpxcerivrj.pyvpxpnaprygbergheagbnqzvajvgubhgfhozvggvatvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:54:"1230:znantrcebqhpgf.qrsvarcebqhpgzvk.cebqhpgzvkqrgnvyf";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:znantrcebqhpgf.qrsvarcebqhpgzvk.cebqhpgglcr";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:znantrcebqhpgf.qrsvarcebqhpgzvk.n-ybna";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:znantrcebqhpgf.qrsvarcebqhpgzvk.nqinaprvagrerfg";a:2:{i:0;R:27393;i:1;R:9;}s:47:"1230:znantrcebqhpgf.qrsvarcebqhpgzvk.vaqvivqhny";a:2:{i:0;R:27393;i:1;R:9;}s:61:"1230:znantrcebqhpgf.qrsvarcebqhpgzvk.erzbirabgnyybjrqcebqhpgf";a:2:{i:0;R:27393;i:1;R:9;}s:89:"1230:znantrcebqhpgf.qrsvarcebqhpgzvk.pyvpxbancebqhpgvagurevtugobkgbfryrpg.gurapyvpxerzbir";a:2:{i:0;R:27393;i:1;R:9;}s:63:"1230:znantrcebqhpgf.qrsvarcebqhpgzvk.ragrecebqhpgzvkvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:132:"1230:znantrcebqhpgf.qrsvarcebqhpgzvk.pbzcyrgrgursvryqforybj.gurapyvpxcerivrj.pyvpxpnaprygbergheagbnqzvajvgubhgfhozvggvatvasbezngvba.";a:2:{i:0;R:27393;i:1;R:9;}s:74:"1230:znantrcebqhpgf.qrsvarcebqhpgzvk.svryqfznexrqjvgunanfgrevfxnererdhverq";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:znantrcebqhpgf.qrsvarcebqhpgzvk.cebqhpgvafgnapranzr";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:znantrcebqhpgf.qrsvarcebqhpgzvk.cebqhpgglcr.erdhverq";a:2:{i:0;R:27393;i:1;R:9;}s:27:"1230:znantrebyrf.zbqvslebyr";a:2:{i:0;R:27393;i:1;R:9;}s:73:"1230:znantrebyrf.purpxgurobkrforybjgbnyybjcrezvffvbafsbegurfcrpvsvrqebyr.";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:znantrebyrf.ebyrfnaqcrezvffvbafjvgubhgfnivatpunatrf";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:znantrebyrf.cyrnfrfcrpvslnebyranzr.";a:2:{i:0;R:27393;i:1;R:9;}s:25:"1230:znantrebyrf.ebyranzr";a:2:{i:0;R:27393;i:1;R:9;}s:22:"1230:znantrebyrf.shaqf";a:2:{i:0;R:27393;i:1;R:9;}s:21:"1230:znantrebyrf.srrf";a:2:{i:0;R:27393;i:1;R:9;}s:26:"1230:znantrebyrf.crefbaary";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:znantrebyrf.betnavmngvbaznantrzrag";a:2:{i:0;R:27393;i:1;R:9;}s:31:"1230:znantrebyrf.pnaperngrshaqf";a:2:{i:0;R:27393;i:1;R:9;}s:31:"1230:znantrebyrf.pnazbqvslshaqf";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:znantrebyrf.pnaqrsvararjsrrglcr";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:znantrebyrf.pnazbqvslsrrvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:27:"1230:znantrebyrf.purpxyvfgf";a:2:{i:0;R:27393;i:1;R:9;}s:24:"1230:znantrebyrf.bssvprf";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:znantrebyrf.pnaqrsvararjpurpxyvfgglcr";a:2:{i:0;R:27393;i:1;R:9;}s:46:"1230:znantrebyrf.pnazbqvslpurpxyvfgvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:znantrebyrf.pnaqrsvarnpprcgrqcnlzragglcr";a:2:{i:0;R:27393;i:1;R:9;}s:33:"1230:znantrebyrf.bssvprznantrzrag";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:znantrebyrf.pnaperngrarjbssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:znantrebyrf.pnazbqvslbssvprvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:znantrebyrf.pnazbqvslbssvpruvrenepul";a:2:{i:0;R:27393;i:1;R:9;}s:31:"1230:znantrebyrf.hfreznantrzrag";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:znantrebyrf.pnaperngrarjflfgrzhfref";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:znantrebyrf.pnazbqvslhfrevasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:30:"1230:znantrebyrf.pnahaybpxnhfr";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:znantrebyrf.pnarqvgfrysvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:znantrebyrf.pnanqqabgrfgbcrefbaary";a:2:{i:0;R:27393;i:1;R:9;}s:22:"1230:znantrebyrf.ebyrf";a:2:{i:0;R:27393;i:1;R:9;}s:33:"1230:znantrebyrf.pnaperngrarjebyr";a:2:{i:0;R:27393;i:1;R:9;}s:31:"1230:znantrebyrf.pnazbqvslnebyr";a:2:{i:0;R:27393;i:1;R:9;}s:31:"1230:znantrebyrf.pnaqryrgrnebyr";a:2:{i:0;R:27393;i:1;R:9;}s:33:"1230:znantrebyrf.pyvragznantrzrag";a:2:{i:0;R:27393;i:1;R:9;}s:54:"1230:znantrebyrf.pnaperngrarjpyvragvafnirsbeyngrefgngr";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:znantrebyrf.pnaperngrarjpyvragvafhozvgsbenccebinyfgngr";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:znantrebyrf.pnapunatrfgngrgbcnegvnynccyvpngvba";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:znantrebyrf.pnapunatrfgngrgbnpgvir";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:znantrebyrf.pnapunatrfgngrgbpnapryyrq";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:znantrebyrf.pnapunatrfgngrgbbaubyq";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:znantrebyrf.pnapunatrfgngrgbpybfrq";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:znantrebyrf.pnapunatrfgngrgbnccyvpngvbacraqvatnccebiny";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:znantrebyrf.pnaznxrcnlzragfgbpyvragnppbhagf";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:znantrebyrf.pnaznxrnqwhfgzragragevrfgbpyvragnppbhag";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:znantrebyrf.pnajnvirnqhrnzbhag";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:znantrebyrf.pnaerzbirsrrglcrfsebzpyvragnppbhag";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:znantrebyrf.pnanqqabgrfgbpyvrag";a:2:{i:0;R:27393;i:1;R:9;}s:38:"1230:znantrebyrf.pnarqvgzsvvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:znantrebyrf.pnarqvgtebhczrzorefuvc";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:znantrebyrf.pnarqvgbssvprzrzorefuvc";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:znantrebyrf.pnarqvgzrrgvatfpurqhyr";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:znantrebyrf.pnanqq/rqvguvfgbevpnqngn";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:znantrebyrf.pnarqvgsrrnzbhagnggnpurqgbgurnppbhag";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:znantrebyrf.pnaoynpxyvfgnpyvrag";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:znantrebyrf.pnafcrpvslzrrgvatfpurqhyr";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:znantrebyrf.pnarqvgcrefbanyvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:znantrebyrf.pnanccylpunetrfgbpyvragnppbhagf";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:znantrebyrf.pnaerzbirpyvragfsebztebhcf";a:2:{i:0;R:27393;i:1;R:9;}s:47:"1230:znantrebyrf.pnanqqnarkvfgvatpyvraggbntebhc";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:znantrebyrf.pnaperngrarjtebhcvafnirsbeyngrefgngr";a:2:{i:0;R:27393;i:1;R:9;}s:58:"1230:znantrebyrf.pnaperngrarjtebhcvafhozvgsbenccebinyfgngr";a:2:{i:0;R:27393;i:1;R:9;}s:47:"1230:znantrebyrf.pnaznxrcnlzragfgbtebhcnppbhagf";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:znantrebyrf.pnaznxrnqwhfgzragragevrfgbtebhcnppbhag";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:znantrebyrf.pnaerzbirsrrglcrfsebztebhcnppbhag";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:znantrebyrf.pnanqqabgrfgbtebhc";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:znantrebyrf.pnarqvgtebhcvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:znantrebyrf.pnarqvgpragrepyvragfuvc";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:znantrebyrf.pnanqq/rqvguvfgbevpnyqngn";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:znantrebyrf.pnaoynpxyvfgntebhc";a:2:{i:0;R:27393;i:1;R:9;}s:47:"1230:znantrebyrf.pnanccylpunetrfgbtebhcnppbhagf";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:znantrebyrf.pnaperngrarjpragre";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:znantrebyrf.pnazbqvslpragrevasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:znantrebyrf.pnarqvgpragrefgnghf";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:znantrebyrf.pnaznxrcnlzragfgbpragrenppbhagf";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:znantrebyrf.pnaznxrnqwhfgzragragevrfgbpragrenppbhag";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:znantrebyrf.pnaerzbirsrrglcrfsebzpragrenppbhag";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:znantrebyrf.pnanqqabgrfgbpragreerpbeqf";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:znantrebyrf.pnanccylpunetrfgbpragrenppbhagf";a:2:{i:0;R:27393;i:1;R:9;}s:34:"1230:znantrebyrf.cebqhpgqrsvavgvba";a:2:{i:0;R:27393;i:1;R:9;}s:34:"1230:znantrebyrf.cebqhpgpngrtbevrf";a:2:{i:0;R:27393;i:1;R:9;}s:46:"1230:znantrebyrf.pnaqrsvararjcebqhpgpngrtbevrf";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:znantrebyrf.pnarqvgcebqhpgpngrtbelvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:znantrebyrf.pnazbqvslyngrarff/qbeznaplqrsvavgvba";a:2:{i:0;R:27393;i:1;R:9;}s:29:"1230:znantrebyrf.ybnacebqhpgf";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:znantrebyrf.pnaqrsvararjybnacebqhpgvafgnapr";a:2:{i:0;R:27393;i:1;R:9;}s:44:"1230:znantrebyrf.pnarqvgybnacebqhpgvafgnaprf";a:2:{i:0;R:27393;i:1;R:9;}s:32:"1230:znantrebyrf.fnivatfcebqhpgf";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:znantrebyrf.pnaqrsvararjfnivatfcebqhpgvafgnapr";a:2:{i:0;R:27393;i:1;R:9;}s:47:"1230:znantrebyrf.pnarqvgfnivatfcebqhpgvafgnaprf";a:2:{i:0;R:27393;i:1;R:9;}s:27:"1230:znantrebyrf.cebqhpgzvk";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:znantrebyrf.pnaqrsvarcebqhpgzvk";a:2:{i:0;R:27393;i:1;R:9;}s:34:"1230:znantrebyrf.pnarqvgcebqhpgzvk";a:2:{i:0;R:27393;i:1;R:9;}s:31:"1230:znantrebyrf.ybnaznantrzrag";a:2:{i:0;R:27393;i:1;R:9;}s:31:"1230:znantrebyrf.ybnacebprffvat";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:znantrebyrf.pnaperngrarjybnanppbhagvafnirsbeyngrefgngr";a:2:{i:0;R:27393;i:1;R:9;}s:64:"1230:znantrebyrf.pnaperngrarjybnanppbhagvafhozvgsbenccebinyfgngr";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:znantrebyrf.pnapunatrfgngrgbnccebirq";a:2:{i:0;R:27393;i:1;R:9;}s:46:"1230:znantrebyrf.pnapunatrfgngrgbqvfohefrqgbyb";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:znantrebyrf.pnapunatrfgngrgbcraqvatnccebiny";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:znantrebyrf.pnapunatrfgngrgbpybfrq-jevggrabss";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:znantrebyrf.pnapunatrfgngrgbpybfrq-erfpurqhyrq";a:2:{i:0;R:27393;i:1;R:9;}s:46:"1230:znantrebyrf.pnarqvgybnanppbhagvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:znantrebyrf.pnanqqabgrfgbybnanppbhag";a:2:{i:0;R:27393;i:1;R:9;}s:33:"1230:znantrebyrf.ybnagenafnpgvbaf";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:znantrebyrf.pnaznxrcnlzraggbgurnppbhag";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:znantrebyrf.pnaznxrnqwhfgzragragelgbgurnppbhag";a:2:{i:0;R:27393;i:1;R:9;}s:32:"1230:znantrebyrf.pnajnvircranygl";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:znantrebyrf.pnajnvirnsrrvafgnyyzrag";a:2:{i:0;R:27393;i:1;R:9;}s:54:"1230:znantrebyrf.pnaerzbirsrrglcrfnggnpurqgbgurnppbhag";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:znantrebyrf.pnanccylpunetrfgbybnaf";a:2:{i:0;R:27393;i:1;R:9;}s:29:"1230:znantrebyrf.pnaercnlybna";a:2:{i:0;R:27393;i:1;R:9;}s:32:"1230:znantrebyrf.pnaqvfohefrybna";a:2:{i:0;R:27393;i:1;R:9;}s:37:"1230:znantrebyrf.pnanqwhfgcnlzragjura";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:znantrebyrf.pnaerirefrybnaqvfohefnyf";a:2:{i:0;R:27393;i:1;R:9;}s:38:"1230:znantrebyrf.pnaerqbybnaqvfohefnyf";a:2:{i:0;R:27393;i:1;R:9;}s:34:"1230:znantrebyrf.fnivatfznantrzrag";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:znantrebyrf.pnaperngrarjfnivatfnppbhagvafnirsbeyngrefgngr";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:znantrebyrf.pnahcqngrfnivatfnppbhag";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:znantrebyrf.pnapybfrfnivatfnppbhag";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:znantrebyrf.pnapunatrfgngrgbpnapry";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:znantrebyrf.pnapunatrfgngrgbvanpgvir";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:znantrebyrf.pnaoynpxyvfgfnivatfnppbhag";a:2:{i:0;R:27393;i:1;R:9;}s:67:"1230:znantrebyrf.pnaperngrarjfnivatfnppbhagvafhozvgsbenccebinyfgngr";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:znantrebyrf.pnaqbnqwhfgzragfsbefnivatfnppbhag";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:znantrebyrf.pnajnvirqhrqrcbfvgfsbefnivatfnppbhag";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:znantrebyrf.pnajnvirbireqhrqrcbfvgfsbefnivatfnppbhag";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:znantrebyrf.pnaznxrqrcbfvg/jvguqenjnygbfnivatfnppbhagn";a:2:{i:0;R:27393;i:1;R:9;}s:44:"1230:znantrebyrf.pnanqqabgrfgbfnivatfnppbhag";a:2:{i:0;R:27393;i:1;R:9;}s:34:"1230:znantrebyrf.ercbegfznantrzrag";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:znantrebyrf.pnaivrjpbyyrpgvbafurrgercbeg";a:2:{i:0;R:27393;i:1;R:9;}s:64:"1230:znantrebyrf.crezvffvbaf-pnaivrjoenapupnfupbasvezngvbaercbeg";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:znantrebyrf.crezvffvbaf-pnaivrjoenapucebterffercbeg";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:znantrebyrf.pnahcybnqercbeggrzcyngr";a:2:{i:0;R:27393;i:1;R:9;}s:31:"1230:znantrebyrf.pnaivrjercbegf";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:znantrebyrf.pnarqvgercbegvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:znantrebyrf.pnaqrsvararjercbegpngrtbel";a:2:{i:0;R:27393;i:1;R:9;}s:38:"1230:znantrebyrf.pnaivrjercbegpngrtbel";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:znantrebyrf.pnaqryrgrercbegpngrtbel";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:znantrebyrf.pnaqbjaybnqercbeggrzcyngr";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:znantrebyrf.pnahcybnqnqzvaqbphzragf";a:2:{i:0;R:27393;i:1;R:9;}s:38:"1230:znantrebyrf.pnaivrjnqzvaqbphzragf";a:2:{i:0;R:27393;i:1;R:9;}s:21:"1230:znantrebyrf.ohyx";a:2:{i:0;R:27393;i:1;R:9;}s:38:"1230:znantrebyrf.pnanccebirybnafvaohyx";a:2:{i:0;R:27393;i:1;R:9;}s:44:"1230:znantrebyrf.pnaragrepbyyrpgvbafurrgqngn";a:2:{i:0;R:27393;i:1;R:9;}s:46:"1230:znantrebyrf.pnaperngrzhygvcyrybnanppbhagf";a:2:{i:0;R:27393;i:1;R:9;}s:37:"1230:znantrebyrf.pnavzcbeggenafnpgvba";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:znantrebyrf.pbasvthengvbaznantrzrag";a:2:{i:0;R:27393;i:1;R:9;}s:32:"1230:znantrebyrf.pnaqrsvarynoryf";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:znantrebyrf.pnaqrsvaruvqqra/znaqngbelsvryqf";a:2:{i:0;R:27393;i:1;R:9;}s:38:"1230:znantrebyrf.pnaqrsvarybbxhcinyhrf";a:2:{i:0;R:27393;i:1;R:9;}s:38:"1230:znantrebyrf.pnaqrsvarphfgbzsvryqf";a:2:{i:0;R:27393;i:1;R:9;}s:44:"1230:znantrebyrf.pnaivrjbetnavmngvbafrggvatf";a:2:{i:0;R:27393;i:1;R:9;}s:34:"1230:znantrebyrf.flfgrzvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:znantrebyrf.pnaivrjflfgrzvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:33:"1230:znantrebyrf.pnaqrsvarubyvqnl";a:2:{i:0;R:27393;i:1;R:9;}s:54:"1230:znantrebyrf.pnaivrjqrgnvyrqntvatbscbegsbyvbngevfx";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:znantrebyrf.pnaivrjtrarenyyrqtreercbeg";a:2:{i:0;R:27393;i:1;R:9;}s:33:"1230:znantrebyrf.pnafuhgqbjazvsbf";a:2:{i:0;R:27393;i:1;R:9;}s:24:"1230:znantrebyrf.pyvragf";a:2:{i:0;R:27393;i:1;R:9;}s:23:"1230:znantrebyrf.tebhcf";a:2:{i:0;R:27393;i:1;R:9;}s:24:"1230:znantrebyrf.pragref";a:2:{i:0;R:27393;i:1;R:9;}s:29:"1230:znantrebyrf.pyvragqrgnvy";a:2:{i:0;R:27393;i:1;R:9;}s:23:"1230:znantrebyrf.pragre";a:2:{i:0;R:27393;i:1;R:9;}s:23:"1230:znantrebyrf.fgnghf";a:2:{i:0;R:27393;i:1;R:9;}s:28:"1230:znantrebyrf.cresbeznapr";a:2:{i:0;R:27393;i:1;R:9;}s:34:"1230:znantrebyrf.ybnacebqhpgqrgnvy";a:2:{i:0;R:27393;i:1;R:9;}s:25:"1230:znantrebyrf.nanylfvf";a:2:{i:0;R:27393;i:1;R:9;}s:64:"1230:znantrebyrf.crezvffvbaf.pnaivrjoenapupnfupbasvezngvbaercbeg";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:znantrebyrf.crezvffvbaf.pnaivrjoenapucebterffercbeg";a:2:{i:0;R:27393;i:1;R:9;}s:30:"1230:znantrebyrf.zvfpryynarbhf";a:2:{i:0;R:27393;i:1;R:9;}s:24:"1230:bssvprf.ivrjbssvprf";a:2:{i:0;R:27393;i:1;R:9;}s:74:"1230:bssvprf.ivrjbssvprf.pyvpxbanabssvprorybjgbivrjqrgnvyfnaqznxrpunatrfbe";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:bssvprf.ivrjbssvprf.qrsvarnarjbssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:bssvprf.ivrjbssvprf.qrsvararjertvbanybssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:bssvprf.ivrjbssvprf.qrsvararjqvivfvbanybssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:44:"1230:bssvprf.ivrjbssvprf.qrsvararjnernbssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:bssvprf.ivrjbssvprf.grfgoenapubssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:46:"1230:bssvprf.ivrjbssvprf.qrsvararjoenapubssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:32:"1230:bssvprf.ivrjbssvprf.zvsbfub";a:2:{i:0;R:27393;i:1;R:9;}s:46:"1230:bssvpr.reebe.unfnpgvirbssvprjvguguvfyriry";a:2:{i:0;R:27393;i:1;R:9;}s:70:"1230:betnavmngvbacersreraprf.ivrjubyvqnlf.ivrjubyvqnlfbetnavmngvbajvqr";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:betnavmngvbacersreraprf.ivrjubyvqnlf";a:2:{i:0;R:27393;i:1;R:9;}s:58:"1230:betnavmngvbacersreraprf.ivrjubyvqnlf.betnavmngvbajvqr";a:2:{i:0;R:27393;i:1;R:9;}s:93:"1230:betnavmngvbacersreraprf.ivrjubyvqnlf.orybjvfguryvfgbsbetnavmngvbajvqrubyvqnlfpyvpxurergb";a:2:{i:0;R:27393;i:1;R:9;}s:58:"1230:betnavmngvbacersreraprf.ivrjubyvqnlf.qrsvararjubyvqnl";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:betnavmngvbacersreraprf.cerivrjubyvqnl";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:betnavmngvbacersreraprf.bgureubyvqnlfjvgugurfnzrqngr";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:betnavmngvbacersreraprf.rqvgubyvqnlvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:hfre.sybjfgngr.pubbfrhfrebssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:hfre.sybjfgngr.ragrenppbhagvasb";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:hfre.sybjfgngr.erivrjnaqfhozvg";a:2:{i:0;R:27393;i:1;R:9;}s:32:"1230:flfgrzhfref.ivrjflfgrzhfref";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:flfgrzhfref.ivrjflfgrzhfref.frnepuhfrefolanzr";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:flfgrzhfre.ragrehfreqrgnvyf.qq";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:flfgrzhfre.ragrehfreqrgnvyf.zz";a:2:{i:0;R:27393;i:1;R:9;}s:37:"1230:flfgrzhfre.ragrehfreqrgnvyf.llll";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:znantrybnanppbhagf.erirefrybnafqvfohefny";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:znantrybnanppbhagf.erirefrybnafqvfohefny.reebe";a:2:{i:0;R:27393;i:1;R:9;}s:68:"1230:znantrybnanppbhagf.erirefrybnafqvfohefny.frnepuybnafnppbhagolvq";a:2:{i:0;R:27393;i:1;R:9;}s:66:"1230:qngnqvfcynlnaqehyrf.ivrjnqqvgvbanysvryqf.ivrjnqqvgvbanysvryqf";a:2:{i:0;R:27393;i:1;R:9;}s:123:"1230:qngnqvfcynlnaqehyrf.ivrjnqqvgvbanysvryqf.pyvpxbanpngrtbelorybjgbivrjnaqrqvggurnqqvgvbanysvryqfqrsvarqsbegungpngrtbelbe";a:2:{i:0;R:27393;i:1;R:9;}s:68:"1230:qngnqvfcynlnaqehyrf.ivrjnqqvgvbanysvryqf.nqqnarjnqqvgvbanysvryq";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:qngnqvfcynlnaqehyrf.ivrjnqqvgvbanysvryqf.crefbaary";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:qngnqvfcynlnaqehyrf.ivrjnqqvgvbanysvryqf.bssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:qngnqvfcynlnaqehyrf.ivrjnqqvgvbanysvryqf.tebhc";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:qngnqvfcynlnaqehyrf.ivrjnqqvgvbanysvryqf.ybna";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:qngnqvfcynlnaqehyrf.ivrjnqqvgvbanysvryqf.pyvrag";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:qngnqvfcynlnaqehyrf.ivrjnqqvgvbanysvryqf.pragre";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:qngnqvfcynlnaqehyrf.ivrjnqqvgvbanysvryqf.fnivatf";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:betnavmngvbacersreraprf.ivrjshaqf.rqvg";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:betnavmngvbacersreraprf.ivrjshaqf.rqvg.shaqanzr";a:2:{i:0;R:27393;i:1;R:9;}s:63:"1230:betnavmngvbacersreraprf.ivrjshaqf.rqvg.rqvgshaqvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:147:"1230:betnavmngvbacersreraprf.ivrjshaqf.rqvg.pbzcyrgrgursvryqforybj.gurapyvpxcerivrj.pyvpxpnaprygbergheagbivrjshaqfcntrjvgubhgfhozvggvatvasbezngvba.";a:2:{i:0;R:27393;i:1;R:9;}s:140:"1230:betnavmngvbacersreraprf.ivrjshaqf.rqvg.cerivrjgursvryqforybjgurapyvpxfhozvgpyvpxpnaprygbergheagbshaqqrgnvyfjvgubhgfhozvggvatvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:svryqfznexrqjvgunanfgrevfxnererdhverq";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:betnavmngvbacersreraprf.ivrjshaqf.rqvg.shaqqrgnvyf";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:betnavmngvbacersreraprf.ivrjshaqf.anzr";a:2:{i:0;R:27393;i:1;R:9;}s:47:"1230:betnavmngvbacersreraprf.ivrjshaqf.shaqpbqr";a:2:{i:0;R:27393;i:1;R:9;}s:29:"1230:abgrzcgl.sbezorna.pbqrvq";a:2:{i:0;R:27393;i:1;R:9;}s:27:"1230:abgrzcgl.sbezorna.anzr";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:flfgrzhfref.qrsvararjflfgrzhfre.pubbfrbssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:flfgrzhfref.qrsvararjflfgrzhfre.hfrevasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:flfgrzhfref.qrsvararjflfgrzhfre.nqqnarjhfre";a:2:{i:0;R:27393;i:1;R:9;}s:107:"1230:flfgrzhfref.qrsvararjflfgrzhfre.gbfryrpg.pyvpxbanbssvprsebzguryvfgorybj.pyvpxpnaprygbergheagbnqzvacntr";a:2:{i:0;R:27393;i:1;R:9;}s:44:"1230:flfgrzhfref.qrsvararjflfgrzhfre.zvsbfub";a:2:{i:0;R:27393;i:1;R:9;}s:47:"1230:flfgrzhfref.qrsvararjflfgrzhfre.nernbssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:flfgrzhfref.qrsvararjflfgrzhfre.grfgnernbssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:flfgrzhfref.qrsvararjflfgrzhfre.oenapubssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:flfgrzhfref.qrsvararjflfgrzhfre.grfgoenapubssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:flfgrzhfref.qrsvararjflfgrzhfre.ragrehfrevasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:flfgrzhfref.qrsvararjflfgrzhfre.vasbzrffntr";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:flfgrzhfref.qrsvararjflfgrzhfre.sbez.bssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:flfgrzhfref.rqvgflfgrzhfre.vasbzrffntr";a:2:{i:0;R:27393;i:1;R:9;}s:46:"1230:bssvprf.qrsvararjbssvpr.bssvprvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:bssvprf.qrsvararjbssvpr.nqqnarjbssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:bssvprf.qrsvararjbssvpr.ragrebssvprvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:123:"1230:bssvprf.qrsvararjbssvpr.pbzcyrgrgursvryqforybj.gurapyvpxcerivrj.pyvpxpnaprygbergheagbnqzvajvgubhgfhozvggvatvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:bssvprf.qrsvararjbssvpr.bssvprqrgnvyf";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:bssvprf.qrsvararjbssvpr.bssvpranzr";a:2:{i:0;R:27393;i:1;R:9;}s:44:"1230:bssvprf.qrsvararjbssvpr.bssvprfubeganzr";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:bssvprf.qrsvararjbssvpr.bssvprglcr";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:bssvprf.qrsvararjbssvpr.cneragbssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:bssvprf.qrsvararjbssvpr.urnqbssvpr(zvsbfub)";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:bssvprf.qrsvararjbssvpr.bssvprnqqerff";a:2:{i:0;R:27393;i:1;R:9;}s:38:"1230:bssvprf.qrsvararjbssvpr.gryrcubar";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:bssvprf.qrsvararjbssvpr.ertvbanybssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:bssvprf.qrsvararjbssvpr.qvivfvbanybssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:bssvprf.qrsvararjbssvpr.nernbssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:bssvprf.qrsvararjbssvpr.oenapubssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:37:"1230:bssvprf.qrsvararjbssvpr.nqqerff1";a:2:{i:0;R:27393;i:1;R:9;}s:37:"1230:bssvprf.qrsvararjbssvpr.nqqerff2";a:2:{i:0;R:27393;i:1;R:9;}s:37:"1230:bssvprf.qrsvararjbssvpr.nqqerff3";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:bssvprf.qrsvararjbssvpr.pvglbeqvfgevpg";a:2:{i:0;R:27393;i:1;R:9;}s:34:"1230:bssvprf.qrsvararjbssvpr.fgngr";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:bssvprf.qrsvararjbssvpr.pbhagel";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:bssvprf.qrsvararjbssvpr.cbfgnypbqr";a:2:{i:0;R:27393;i:1;R:9;}s:33:"1230:abgrzcgl.bssvprsbezorna.anzr";a:2:{i:0;R:27393;i:1;R:9;}s:44:"1230:abgrzcgl.bssvprsbezorna.bssvprfubeganzr";a:2:{i:0;R:27393;i:1;R:9;}s:37:"1230:abgrzcgl.bssvprsbezorna.cneragvq";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:abgrzcgl.bssvprsbezorna.yriryvq";a:2:{i:0;R:27393;i:1;R:9;}s:74:"1230:qngnqvfcynlnaqehyrf.qrsvarnqqvgvbanysvryqf.nqqvgvbanysvryqvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:70:"1230:qngnqvfcynlnaqehyrf.qrsvarnqqvgvbanysvryqf.qrsvarnqqvgvbanysvryqf";a:2:{i:0;R:27393;i:1;R:9;}s:79:"1230:qngnqvfcynlnaqehyrf.qrsvarnqqvgvbanysvryqf.ragrenqqvgvbanysvryqvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:70:"1230:qngnqvfcynlnaqehyrf.qrsvarnqqvgvbanysvryqf.nqqvgvbanysvryqqrgnvyf";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:qngnqvfcynlnaqehyrf.qrsvarnqqvgvbanysvryqf.pngrtbel";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:qngnqvfcynlnaqehyrf.qrsvarnqqvgvbanysvryqf.ynory";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:qngnqvfcynlnaqehyrf.qrsvarnqqvgvbanysvryqf.qngnglcr";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:qngnqvfcynlnaqehyrf.qrsvarnqqvgvbanysvryqf.ahzrevp";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:qngnqvfcynlnaqehyrf.qrsvarnqqvgvbanysvryqf.grkg";a:2:{i:0;R:27393;i:1;R:9;}s:60:"1230:qngnqvfcynlnaqehyrf.qrsvarnqqvgvbanysvryqf.qrsnhyginyhr";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:qngnqvfcynlnaqehyrf.qrsvarnqqvgvbanysvryqf.crefbaary";a:2:{i:0;R:27393;i:1;R:9;}s:54:"1230:qngnqvfcynlnaqehyrf.qrsvarnqqvgvbanysvryqf.bssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:qngnqvfcynlnaqehyrf.qrsvarnqqvgvbanysvryqf.tebhc";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:qngnqvfcynlnaqehyrf.qrsvarnqqvgvbanysvryqf.ybna";a:2:{i:0;R:27393;i:1;R:9;}s:54:"1230:qngnqvfcynlnaqehyrf.qrsvarnqqvgvbanysvryqf.pyvrag";a:2:{i:0;R:27393;i:1;R:9;}s:54:"1230:qngnqvfcynlnaqehyrf.qrsvarnqqvgvbanysvryqf.pragre";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:qngnqvfcynlnaqehyrf.qrsvarnqqvgvbanysvryqf.fnivatf";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:betnavmngvbacersreraprf.qrsvarnpprcgrqcnlzragglcrf";a:2:{i:0;R:27393;i:1;R:9;}s:144:"1230:betnavmngvbacersreraprf.qrsvarnpprcgrqcnlzragglcrf.fcrpvslgurnpprcgrqcnlzragglcrforybj.pyvpxbancnlzragglcrvaguryrsgobkgbfryrpg.gurapyvpxnqq";a:2:{i:0;R:27393;i:1;R:9;}s:121:"1230:betnavmngvbacersreraprf.qrsvarnpprcgrqcnlzragglcrf.gberzbir,pyvpxbancnlzragglcrbagurevtugobkgbfryrpg.gurapyvpxerzbir";a:2:{i:0;R:27393;i:1;R:9;}s:78:"1230:betnavmngvbacersreraprf.qrsvarnpprcgrqcnlzragglcrf.pyvragf/tebhcf/pragref";a:2:{i:0;R:27393;i:1;R:9;}s:60:"1230:betnavmngvbacersreraprf.qrsvarnpprcgrqcnlzragglcrf.pnfu";a:2:{i:0;R:27393;i:1;R:9;}s:63:"1230:betnavmngvbacersreraprf.qrsvarnpprcgrqcnlzragglcrf.ibhpure";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:betnavmngvbacersreraprf.qrsvarnpprcgrqcnlzragglcrf.purdhr";a:2:{i:0;R:27393;i:1;R:9;}s:69:"1230:betnavmngvbacersreraprf.qrsvarnpprcgrqcnlzragglcrf.qvfohefrzragf";a:2:{i:0;R:27393;i:1;R:9;}s:66:"1230:betnavmngvbacersreraprf.qrsvarnpprcgrqcnlzragglcrf.ercnlzragf";a:2:{i:0;R:27393;i:1;R:9;}s:67:"1230:betnavmngvbacersreraprf.qrsvarnpprcgrqcnlzragglcrf.jvguqenjnyf";a:2:{i:0;R:27393;i:1;R:9;}s:64:"1230:betnavmngvbacersreraprf.qrsvarnpprcgrqcnlzragglcrf.qrcbfvgf";a:2:{i:0;R:27393;i:1;R:9;}s:60:"1230:betnavmngvbacersreraprf.qrsvarnpprcgrqcnlzragglcrf.srrf";a:2:{i:0;R:27393;i:1;R:9;}s:61:"1230:betnavmngvbacersreraprf.qrsvarnpprcgrqcnlzragglcrf.ybnaf";a:2:{i:0;R:27393;i:1;R:9;}s:63:"1230:betnavmngvbacersreraprf.qrsvarnpprcgrqcnlzragglcrf.fnivatf";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:znantrvzcbegf.vzcbeggenafnpgvbaf.vzcbegvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:58:"1230:znantrvzcbegf.vzcbeggenafnpgvbaf.ragresvyrvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:116:"1230:znantrvzcbegf.vzcbeggenafnpgvbaf.pbzcyrgrgursvryqforybj.pyvpxpnaprygbergheagbnqzvajvgubhgfhozvggvatvasbezngvba.";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:znantrvzcbegf.vzcbeggenafnpgvbaf.vzcbegsbezng";a:2:{i:0;R:27393;i:1;R:9;}s:54:"1230:znantrvzcbegf.vzcbeggenafnpgvbaf.fryrpgvzcbegsvyr";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:znantrybnanppbhagf.erqbybnaqvfohefny.fryrpgphfgbzre";a:2:{i:0;R:27393;i:1;R:9;}s:64:"1230:znantrybnanppbhagf.erqbybnaqvfohefny.ybnanppbhagvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:65:"1230:znantrybnanppbhagf.erqbybnaqvfohefny.erivrj/rqvgvafgnyyzragf";a:2:{i:0;R:27393;i:1;R:9;}s:58:"1230:znantrybnanppbhagf.erqbybnaqvfohefny.erqbybnafnppbhag";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:znantrybnanppbhagf.erqbybnaqvfohefny.fryrpgnphfgbzre";a:2:{i:0;R:27393;i:1;R:9;}s:79:"1230:znantrybnanppbhagf.erqbybnaqvfohefny.ragrenpyvragbetebhcanzrnaqpyvpxfrnepu";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:bssvprf.rqvgbssvprvasbezngvba.grfgnernbssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:bssvprf.rqvgbssvprvasbezngvba.rqvgbssvprvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:136:"1230:bssvprf.rqvgbssvprvasbezngvba.cerivrjgursvryqforybj.gurapyvpxpbasvez.pyvpxpnaprygbergheagbbssvprqrgnvyfjvgubhgfhozvggvatvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:bssvprf.rqvgbssvprvasbezngvba.bssvprqrgnvyf";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:bssvprf.rqvgbssvprvasbezngvba.bssvpranzr";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:bssvprf.rqvgbssvprvasbezngvba.bssvprfubeganzr";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:bssvprf.rqvgbssvprvasbezngvba.bssvprglcr";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:bssvprf.rqvgbssvprvasbezngvba.ertvbanybssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:bssvprf.rqvgbssvprvasbezngvba.qvivfvbanybssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:bssvprf.rqvgbssvprvasbezngvba.nernbssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:47:"1230:bssvprf.rqvgbssvprvasbezngvba.oenapubssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:47:"1230:bssvprf.rqvgbssvprvasbezngvba.cneragbssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:54:"1230:bssvprf.rqvgbssvprvasbezngvba.urnqbssvpr(zvsbfub)";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:bssvprf.rqvgbssvprvasbezngvba.fgnghf";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:bssvprf.rqvgbssvprvasbezngvba.npgvir";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:bssvprf.rqvgbssvprvasbezngvba.vanpgvir";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:bssvprf.rqvgbssvprvasbezngvba.bssvprnqqerff";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:bssvprf.rqvgbssvprvasbezngvba.nqqerff1";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:bssvprf.rqvgbssvprvasbezngvba.nqqerff2";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:bssvprf.rqvgbssvprvasbezngvba.nqqerff3";a:2:{i:0;R:27393;i:1;R:9;}s:44:"1230:bssvprf.rqvgbssvprvasbezngvba.gryrcubar";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:bssvprf.rqvgbssvprvasbezngvba.nqqvgvbanyvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:bssvprf.rqvgbssvprvasbezngvba.pvglbeqvfgevpg";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:bssvprf.rqvgbssvprvasbezngvba.fgngr";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:bssvprf.rqvgbssvprvasbezngvba.pbhagel";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:bssvprf.rqvgbssvprvasbezngvba.cbfgnypbqr";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:qngnqvfcynlnaqehyrf.rqvgnqqvgvbanysvryqf";a:2:{i:0;R:27393;i:1;R:9;}s:77:"1230:qngnqvfcynlnaqehyrf.rqvgnqqvgvbanysvryqf.ragrenqqvgvbanysvryqvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:141:"1230:qngnqvfcynlnaqehyrf.rqvgnqqvgvbanysvryqf.pbzcyrgrgursvryqforybj.gurapyvpxcerivrj.pyvpxpnaprygbergheagbnqzvajvgubhgfhozvggvatvasbezngvba.";a:2:{i:0;R:27393;i:1;R:9;}s:68:"1230:qngnqvfcynlnaqehyrf.rqvgnqqvgvbanysvryqf.nqqvgvbanysvryqqrgnvyf";a:2:{i:0;R:27393;i:1;R:9;}s:54:"1230:qngnqvfcynlnaqehyrf.rqvgnqqvgvbanysvryqf.pngrtbel";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:qngnqvfcynlnaqehyrf.rqvgnqqvgvbanysvryqf.ynory";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:qngnqvfcynlnaqehyrf.rqvgnqqvgvbanysvryqf.znaqngbel";a:2:{i:0;R:27393;i:1;R:9;}s:54:"1230:qngnqvfcynlnaqehyrf.rqvgnqqvgvbanysvryqf.qngnglcr";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:qngnqvfcynlnaqehyrf.rqvgnqqvgvbanysvryqf.grkg";a:2:{i:0;R:27393;i:1;R:9;}s:58:"1230:qngnqvfcynlnaqehyrf.rqvgnqqvgvbanysvryqf.qrsnhyginyhr";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:qngnqvfcynlnaqehyrf.rqvgnqqvgvbanysvryqf.ahzrevp";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:qngnqvfcynlnaqehyrf.rqvgnqqvgvbanysvryqf.crefbaary";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:qngnqvfcynlnaqehyrf.rqvgnqqvgvbanysvryqf.bssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:qngnqvfcynlnaqehyrf.rqvgnqqvgvbanysvryqf.pyvrag";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:qngnqvfcynlnaqehyrf.rqvgnqqvgvbanysvryqf.tebhc";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:qngnqvfcynlnaqehyrf.rqvgnqqvgvbanysvryqf.pragre";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:qngnqvfcynlnaqehyrf.rqvgnqqvgvbanysvryqf.ybna";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:qngnqvfcynlnaqehyrf.rqvgnqqvgvbanysvryqf.fnivatf";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:bssvprf.cerivrjbssvpr.cerivrjbssvprvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:bssvprf.ivrjbssvprqrgnvyf.bssvpranzr";a:2:{i:0;R:27393;i:1;R:9;}s:46:"1230:bssvprf.ivrjbssvprqrgnvyf.bssvprfubeganzr";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:bssvprf.ivrjbssvprqrgnvyf.bssvprglcr";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:bssvprf.ivrjbssvprqrgnvyf.cneragbssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:bssvprf.ivrjbssvprqrgnvyf.rqvgbssvprvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:bssvprf.ivrjbssvprqrgnvyf.nqqvgvbanyvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:47:"1230:bssvprf.ivrjbssvprqrgnvyf.abnqqerffragrerq";a:2:{i:0;R:27393;i:1;R:9;}s:38:"1230:bssvprf.ivrjbssvprqrgnvyf.nqqerff";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:bssvprf.ivrjbssvprqrgnvyf.yvar1";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:bssvprf.ivrjbssvprqrgnvyf.yvar2";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:bssvprf.ivrjbssvprqrgnvyf.yvar3";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:bssvprf.ivrjbssvprqrgnvyf.pvgl";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:bssvprf.ivrjbssvprqrgnvyf.fgngr";a:2:{i:0;R:27393;i:1;R:9;}s:38:"1230:bssvprf.ivrjbssvprqrgnvyf.pbhagel";a:2:{i:0;R:27393;i:1;R:9;}s:34:"1230:bssvprf.ivrjbssvprqrgnvyf.mvc";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:bssvprf.ivrjbssvprqrgnvyf.cubarahzore";a:2:{i:0;R:27393;i:1;R:9;}s:73:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.betnavmngvbanyfrggvatf";a:2:{i:0;R:27393;i:1;R:9;}s:61:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.svfpnylrne";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.jbexvatqnlf";a:2:{i:0;R:27393;i:1;R:9;}s:85:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.nyybjpnyraqneqrsvavgvbasbearkglrne";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.fgnegbsjrrx";a:2:{i:0;R:27393;i:1;R:9;}s:58:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.bssqnlf";a:2:{i:0;R:27393;i:1;R:9;}s:74:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.zrrgvatvapnfrbsnubyvqnl";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.ybpnyr";a:2:{i:0;R:27393;i:1;R:9;}s:58:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.pbhagel";a:2:{i:0;R:27393;i:1;R:9;}s:60:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.qverpgvba";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.ynathntr";a:2:{i:0;R:27393;i:1;R:9;}s:66:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.nppbhagvatehyrf";a:2:{i:0;R:27393;i:1;R:9;}s:66:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.znkvzhzvagrerfg";a:2:{i:0;R:27393;i:1;R:9;}s:66:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.zvavzhzvagrerfg";a:2:{i:0;R:27393;i:1;R:9;}s:78:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.ahzorebsqvtvgforsberqrpvzny";a:2:{i:0;R:27393;i:1;R:9;}s:88:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.ahzorebsqvtvgfnsgreqrpvznysbevagrerfg";a:2:{i:0;R:27393;i:1;R:9;}s:89:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.ahzorebsqvtvgforsberqrpvznysbevagrerfg";a:2:{i:0;R:27393;i:1;R:9;}s:71:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.ahzorebsvagrerfgqnlf";a:2:{i:0;R:27393;i:1;R:9;}s:71:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.pheeraplebhaqvatzbqr";a:2:{i:0;R:27393;i:1;R:9;}s:70:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.vavgvnyebhaqvatzbqr";a:2:{i:0;R:27393;i:1;R:9;}s:68:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.svanyebhaqvatzbqr";a:2:{i:0;R:27393;i:1;R:9;}s:61:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.pheerapvrf";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.pheerapl";a:2:{i:0;R:27393;i:1;R:9;}s:77:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.ahzorebsqvtvgfnsgreqrpvzny";a:2:{i:0;R:27393;i:1;R:9;}s:72:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.svanyebhaqbsszhygvcyr";a:2:{i:0;R:27393;i:1;R:9;}s:74:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.vavgvnyebhaqbsszhygvcyr";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.pyvragehyrf";a:2:{i:0;R:27393;i:1;R:9;}s:72:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.pragreuvrenepulrkvfgf";a:2:{i:0;R:27393;i:1;R:9;}s:79:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.tebhcfnyybjrqgbnccylsbeybnaf";a:2:{i:0;R:27393;i:1;R:9;}s:77:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.pyvragpnarkvfgbhgfvqrtebhc";a:2:{i:0;R:27393;i:1;R:9;}s:63:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.anzrfrdhrapr";a:2:{i:0;R:27393;i:1;R:9;}s:66:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.ntrpurpxranoyrq";a:2:{i:0;R:27393;i:1;R:9;}s:81:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.zvavzhznyybjrqntrsbearjpyvragf";a:2:{i:0;R:27393;i:1;R:9;}s:81:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.znkvzhznyybjrqntrsbearjpyvragf";a:2:{i:0;R:27393;i:1;R:9;}s:82:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.nqqvgvbanysnzvylqrgnvyferdhverq";a:2:{i:0;R:27393;i:1;R:9;}s:79:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.znkvzhzahzorebssnzvylzrzoref";a:2:{i:0;R:27393;i:1;R:9;}s:76:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.cebprffsybj/bcgvbanyfgngr";a:2:{i:0;R:27393;i:1;R:9;}s:84:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.pyvragcraqvatnccebinyfgngrranoyrq";a:2:{i:0;R:27393;i:1;R:9;}s:83:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.tebhccraqvatnccebinyfgngrranoyrq";a:2:{i:0;R:27393;i:1;R:9;}s:89:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.ybnaqvfohefrqgbybnabssvprefgngrranoyrq";a:2:{i:0;R:27393;i:1;R:9;}s:82:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.ybnacraqvatnccebinyfgngrranoyrq";a:2:{i:0;R:27393;i:1;R:9;}s:85:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.fnivatfcraqvatnccebinyfgngrranoyrq";a:2:{i:0;R:27393;i:1;R:9;}s:64:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.zvfpryynarbhf";a:2:{i:0;R:27393;i:1;R:9;}s:65:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.frffvbagvzrbhg";a:2:{i:0;R:27393;i:1;R:9;}s:107:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.ahzorebsqnlfvanqinaprgurpbyyrpgvbafurrgfubhyqortrarengrq";a:2:{i:0;R:27393;i:1;R:9;}s:79:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.onpxqngrqgenafnpgvbafnyybjrq";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.tyvz";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.yfvz";a:2:{i:0;R:27393;i:1;R:9;}s:71:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.zvapnfusybjguerfubyq";a:2:{i:0;R:27393;i:1;R:9;}s:71:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.znkpnfusybjguerfubyq";a:2:{i:0;R:27393;i:1;R:9;}s:71:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.zvaercnlzragpncnpvgl";a:2:{i:0;R:27393;i:1;R:9;}s:71:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.znkercnlzragpncnpvgl";a:2:{i:0;R:27393;i:1;R:9;}s:71:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.zvavaqrogrqarffengvb";a:2:{i:0;R:27393;i:1;R:9;}s:71:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.znkvaqrogrqarffengvb";a:2:{i:0;R:27393;i:1;R:9;}s:80:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.qvtvgfnsgreqrpvznysbepnfusybj";a:2:{i:0;R:27393;i:1;R:9;}s:72:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.oenapuznantreebyranzr";a:2:{i:0;R:27393;i:1;R:9;}s:72:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.znkcbvagfcreccvfheirl";a:2:{i:0;R:27393;i:1;R:9;}s:72:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.ongpufvmrsbeongpuwbof";a:2:{i:0;R:27393;i:1;R:9;}s:77:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.bhgchgvagreinysbeongpuwbof";a:2:{i:0;R:27393;i:1;R:9;}s:83:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.erpbeqpbzzvggvatfvmrsbeongpuwbof";a:2:{i:0;R:27393;i:1;R:9;}s:97:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.nyybjqngncersrgpuvatjurafnivatpbyyrpgvbafurrgf";a:2:{i:0;R:27393;i:1;R:9;}s:73:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.hcybnqfgbentrqverpgbel";a:2:{i:0;R:27393;i:1;R:9;}s:89:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.fuhgqbjapbhagqbjaabgvsvpngvbaguerfubyq";a:2:{i:0;R:27393;i:1;R:9;}s:68:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.hcybnqdtqverpgbel";a:2:{i:0;R:27393;i:1;R:9;}s:72:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.vzntrfgbentrqverpgbel";a:2:{i:0;R:27393;i:1;R:9;}s:63:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.qvfohefnyznk";a:2:{i:0;R:27393;i:1;R:9;}s:67:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.nccebinyerdhverq";a:2:{i:0;R:27393;i:1;R:9;}s:67:"1230:betnavmngvbafrggvatf.ivrjbetnavmngvbafrggvatf.vzntrfgbentrglcr";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.qrsvarybnacebqhpg";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.ybnanzbhag";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.fubeganzr";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.qrfpevcgvba";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.cebqhpgpngrtbel";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.fgnegqngr";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.raqqngr";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.nccyvpnoyrsbe";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.pheerapl";a:2:{i:0;R:27393;i:1;R:9;}s:67:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.vapyhqrvaybnaplpyrpbhagre";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.vagrerfgjnvire";a:2:{i:0;R:27393;i:1;R:9;}s:63:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.pnyphyngrybnanzbhagnf";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.zvaybnanzbhag";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.znkybnanzbhag";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.qrsnhygnzbhag";a:2:{i:0;R:27393;i:1;R:9;}s:54:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.vagrerfgengr";a:2:{i:0;R:27393;i:1;R:9;}s:58:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.vagrerfgengrglcr";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.znkvagrerfgengr";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.zvavagrerfgengr";a:2:{i:0;R:27393;i:1;R:9;}s:61:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.qrsnhygvagrerfgengr";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.ercnlzragfpurqhyr";a:2:{i:0;R:27393;i:1;R:9;}s:65:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.serdhraplbsvafgnyyzragf";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.zvabsvafgnyyzragf";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.znkbsvafgnyyzragf";a:2:{i:0;R:27393;i:1;R:9;}s:63:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.qrsnhygbsvafgnyyzragf";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.tenprcrevbqglcr";a:2:{i:0;R:27393;i:1;R:9;}s:61:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.tenprcrevbqqhengvba";a:2:{i:0;R:27393;i:1;R:9;}s:46:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.srrf";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.nppbhagvat";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.fbheprfbsshaqf";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.cebqhpgtypbqr";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.vagrerfg";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.cevapvcny";a:2:{i:0;R:27393;i:1;R:9;}s:60:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.ybnacebqhpgqrgnvyf";a:2:{i:0;R:27393;i:1;R:9;}s:64:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.ybnacebqhpgvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:60:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.nqqnarjybnacebqhpg";a:2:{i:0;R:27393;i:1;R:9;}s:69:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.ragreybnacebqhpgvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:61:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.cebqhpgvafgnapranzr";a:2:{i:0;R:27393;i:1;R:9;}s:101:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.pbzcyrgrgursvryqforybj.gurapyvpxcerivrj.pyvpxpnaprygberghea";a:2:{i:0;R:27393;i:1;R:9;}s:47:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.bgure";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.fnzrsbenyyybnaf";a:2:{i:0;R:27393;i:1;R:9;}s:58:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.olynfgybnanzbhag";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.olybnaplpyr";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.ynfgybnanzbhag";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.ybnaplpyrab";a:2:{i:0;R:27393;i:1;R:9;}s:58:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.ybnaplpyrab.mreb";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.ybnaplpyrab.bar";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.ybnaplpyrab.gjb";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.ybnaplpyrab.guerr";a:2:{i:0;R:27393;i:1;R:9;}s:58:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.ybnaplpyrab.sbhe";a:2:{i:0;R:27393;i:1;R:9;}s:63:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.ybnaplpyrab.nobirsbhe";a:2:{i:0;R:27393;i:1;R:9;}s:46:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.syng";a:2:{i:0;R:27393;i:1;R:9;}s:58:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.qrpyvavatonynapr";a:2:{i:0;R:27393;i:1;R:9;}s:84:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.qrpyvavatonynapr-rdhnycevapvcnyvafgnyyzrag";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.jrrxyl";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.zbaguyl";a:2:{i:0;R:27393;i:1;R:9;}s:69:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.vsjrrxf,fcrpvslgursbyybjvat";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.erpherirel";a:2:{i:0;R:27393;i:1;R:9;}s:70:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.vszbaguf,fcrpvslgursbyybjvat";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.jrrx(f)";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.zbagu(f)";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.qnlbszbaguynory";a:2:{i:0;R:27393;i:1;R:9;}s:58:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.jrrxbszbaguynory";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.bsrirel";a:2:{i:0;R:27393;i:1;R:9;}s:67:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.pnyphyngrbsvafgnyyzragfnf";a:2:{i:0;R:27393;i:1;R:9;}s:46:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.abar";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.tenprbanyyercnlzragf";a:2:{i:0;R:27393;i:1;R:9;}s:60:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.cevapvcnybayltenpr";a:2:{i:0;R:27393;i:1;R:9;}s:54:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.vafgnyyzragf";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.nggnpusrrglcrf";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.pyvpxbansrrglcr";a:2:{i:0;R:27393;i:1;R:9;}s:54:"1230:znantrybnacebqhpgf.qrsvarybnacebqhpg.pyvpxbanshaq";a:2:{i:0;R:27393;i:1;R:9;}s:16:"1230:obbyrna.lrf";a:2:{i:0;R:27393;i:1;R:9;}s:15:"1230:obbyrna.ab";a:2:{i:0;R:27393;i:1;R:9;}s:61:"1230:abgrzcgl.ybnacebqhpg.fryrpgrqvagrerfgengrpnyphyngvbaglcr";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:abgahyy.ybnacebqhpg.zvavagrerfgengr";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:abgahyy.ybnacebqhpg.znkvagrerfgengr";a:2:{i:0;R:27393;i:1;R:9;}s:44:"1230:abgahyy.ybnacebqhpg.qrsnhygvagrerfgengr";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:abgrzcgl.ybnacebqhpg.fryrpgrqcevapvcny";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:abgrzcgl.ybnacebqhpg.fryrpgrqvagrerfg";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:glcrzvfzngpu.ybnacebqhpg.ybnanzbhagfnzrsbenyyybnaf.zva";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:glcrzvfzngpu.ybnacebqhpg.ybnanzbhagfnzrsbenyyybnaf.znk";a:2:{i:0;R:27393;i:1;R:9;}s:66:"1230:glcrzvfzngpu.ybnacebqhpg.ybnanzbhagfnzrsbenyyybnaf.gurqrsnhyg";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:zva.ybnacebqhpg.fnzrsbenyyybnaf.zva";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:zva.ybnacebqhpg.fnzrsbenyyybnaf.znk";a:2:{i:0;R:27393;i:1;R:9;}s:47:"1230:zva.ybnacebqhpg.fnzrsbenyyybnaf.gurqrsnhyg";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:znk.ybnacebqhpg.fnzrsbenyyybnaf.znk";a:2:{i:0;R:27393;i:1;R:9;}s:47:"1230:znk.ybnacebqhpg.fnzrsbenyyybnaf.gurqrsnhyg";a:2:{i:0;R:27393;i:1;R:9;}s:44:"1230:abgahyy.ybnacebqhpg.fnzrsbenyyybnaf.zva";a:2:{i:0;R:27393;i:1;R:9;}s:44:"1230:abgahyy.ybnacebqhpg.fnzrsbenyyybnaf.znk";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:abgahyy.ybnacebqhpg.fnzrsbenyyybnaf.gurqrsnhyg";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:glcrzvfzngpu.ybnacebqhpg.ybnanzbhagolynfgybnanzbhag.ybjre";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:abgahyy.ybnacebqhpg.ybnanzbhagolynfgybnanzbhag.ybjre";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:zva.ybnacebqhpg.ybnanzbhagolynfgybnanzbhag.ybjre";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:glcrzvfzngpu.ybnacebqhpg.ybnanzbhagolynfgybnanzbhag.hccre";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:abgahyy.ybnacebqhpg.ybnanzbhagolynfgybnanzbhag.hccre";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:zva.ybnacebqhpg.ybnanzbhagolynfgybnanzbhag.hccre";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:znk.ybnacebqhpg.ybnanzbhagolynfgybnanzbhag.hccre";a:2:{i:0;R:27393;i:1;R:9;}s:60:"1230:glcrzvfzngpu.ybnacebqhpg.ybnanzbhagolynfgybnanzbhag.zva";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:abgahyy.ybnacebqhpg.ybnanzbhagolynfgybnanzbhag.zva";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:zva.ybnacebqhpg.ybnanzbhagolynfgybnanzbhag.zva";a:2:{i:0;R:27393;i:1;R:9;}s:60:"1230:glcrzvfzngpu.ybnacebqhpg.ybnanzbhagolynfgybnanzbhag.znk";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:abgahyy.ybnacebqhpg.ybnanzbhagolynfgybnanzbhag.znk";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:zva.ybnacebqhpg.ybnanzbhagolynfgybnanzbhag.znk";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:znk.ybnacebqhpg.ybnanzbhagolynfgybnanzbhag.znk";a:2:{i:0;R:27393;i:1;R:9;}s:67:"1230:glcrzvfzngpu.ybnacebqhpg.ybnanzbhagolynfgybnanzbhag.gurqrsnhyg";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:abgahyy.ybnacebqhpg.ybnanzbhagolynfgybnanzbhag.gurqrsnhyg";a:2:{i:0;R:27393;i:1;R:9;}s:58:"1230:zva.ybnacebqhpg.ybnanzbhagolynfgybnanzbhag.gurqrsnhyg";a:2:{i:0;R:27393;i:1;R:9;}s:58:"1230:znk.ybnacebqhpg.ybnanzbhagolynfgybnanzbhag.gurqrsnhyg";a:2:{i:0;R:27393;i:1;R:9;}s:64:"1230:glcrzvfzngpu.ybnacebqhpg.vafgnyyzragfolynfgybnanzbhag.ybjre";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:abgahyy.ybnacebqhpg.vafgnyyzragfolynfgybnanzbhag.ybjre";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:zva.ybnacebqhpg.vafgnyyzragfolynfgybnanzbhag.ybjre";a:2:{i:0;R:27393;i:1;R:9;}s:64:"1230:glcrzvfzngpu.ybnacebqhpg.vafgnyyzragfolynfgybnanzbhag.hccre";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:abgahyy.ybnacebqhpg.vafgnyyzragfolynfgybnanzbhag.hccre";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:zva.ybnacebqhpg.vafgnyyzragfolynfgybnanzbhag.hccre";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:znk.ybnacebqhpg.vafgnyyzragfolynfgybnanzbhag.hccre";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:glcrzvfzngpu.ybnacebqhpg.vafgnyyzragfolynfgybnanzbhag.zva";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:abgahyy.ybnacebqhpg.vafgnyyzragfolynfgybnanzbhag.zva";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:zva.ybnacebqhpg.vafgnyyzragfolynfgybnanzbhag.zva";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:glcrzvfzngpu.ybnacebqhpg.vafgnyyzragfolynfgybnanzbhag.znk";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:abgahyy.ybnacebqhpg.vafgnyyzragfolynfgybnanzbhag.znk";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:zva.ybnacebqhpg.vafgnyyzragfolynfgybnanzbhag.znk";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:znk.ybnacebqhpg.vafgnyyzragfolynfgybnanzbhag.znk";a:2:{i:0;R:27393;i:1;R:9;}s:69:"1230:glcrzvfzngpu.ybnacebqhpg.vafgnyyzragfolynfgybnanzbhag.gurqrsnhyg";a:2:{i:0;R:27393;i:1;R:9;}s:64:"1230:abgahyy.ybnacebqhpg.vafgnyyzragfolynfgybnanzbhag.gurqrsnhyg";a:2:{i:0;R:27393;i:1;R:9;}s:60:"1230:zva.ybnacebqhpg.vafgnyyzragfolynfgybnanzbhag.gurqrsnhyg";a:2:{i:0;R:27393;i:1;R:9;}s:60:"1230:znk.ybnacebqhpg.vafgnyyzragfolynfgybnanzbhag.gurqrsnhyg";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:glcrzvfzngpu.ybnacebqhpg.ybnanzbhagolybnaplpyr.gurqrsnhyg";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:abgahyy.ybnacebqhpg.ybnanzbhagolybnaplpyr.gurqrsnhyg";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:zva.ybnacebqhpg.ybnanzbhagolybnaplpyr.gurqrsnhyg";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:znk.ybnacebqhpg.ybnanzbhagolybnaplpyr.gurqrsnhyg";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:glcrzvfzngpu.ybnacebqhpg.ybnanzbhagolybnaplpyr.zva";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:abgahyy.ybnacebqhpg.ybnanzbhagolybnaplpyr.zva";a:2:{i:0;R:27393;i:1;R:9;}s:46:"1230:zva.ybnacebqhpg.ybnanzbhagolybnaplpyr.zva";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:glcrzvfzngpu.ybnacebqhpg.ybnanzbhagolybnaplpyr.znk";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:abgahyy.ybnacebqhpg.ybnanzbhagolybnaplpyr.znk";a:2:{i:0;R:27393;i:1;R:9;}s:46:"1230:zva.ybnacebqhpg.ybnanzbhagolybnaplpyr.znk";a:2:{i:0;R:27393;i:1;R:9;}s:46:"1230:znk.ybnacebqhpg.ybnanzbhagolybnaplpyr.znk";a:2:{i:0;R:27393;i:1;R:9;}s:64:"1230:glcrzvfzngpu.ybnacebqhpg.vafgnyyzragfolybnaplpyr.gurqrsnhyg";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:abgahyy.ybnacebqhpg.vafgnyyzragfolybnaplpyr.gurqrsnhyg";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:zva.ybnacebqhpg.vafgnyyzragfolybnaplpyr.gurqrsnhyg";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:znk.ybnacebqhpg.vafgnyyzragfolybnaplpyr.gurqrsnhyg";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:glcrzvfzngpu.ybnacebqhpg.vafgnyyzragfolybnaplpyr.zva";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:abgahyy.ybnacebqhpg.vafgnyyzragfolybnaplpyr.zva";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:zva.ybnacebqhpg.vafgnyyzragfolybnaplpyr.zva";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:glcrzvfzngpu.ybnacebqhpg.vafgnyyzragfolybnaplpyr.znk";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:abgahyy.ybnacebqhpg.vafgnyyzragfolybnaplpyr.znk";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:zva.ybnacebqhpg.vafgnyyzragfolybnaplpyr.znk";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:znk.ybnacebqhpg.vafgnyyzragfolybnaplpyr.znk";a:2:{i:0;R:27393;i:1;R:9;}s:60:"1230:abgahyy.ybnacebqhpg.vafgnyyzragserdhraplerpheeraprrirel";a:2:{i:0;R:27393;i:1;R:9;}s:61:"1230:glcrzvfzngpu.ybnacebqhpg.vafgnyyzragffnzrsbenyyybnaf.zva";a:2:{i:0;R:27393;i:1;R:9;}s:61:"1230:glcrzvfzngpu.ybnacebqhpg.vafgnyyzragffnzrsbenyyybnaf.znk";a:2:{i:0;R:27393;i:1;R:9;}s:68:"1230:glcrzvfzngpu.ybnacebqhpg.vafgnyyzragffnzrsbenyyybnaf.gurqrsnhyg";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:zva.ybnacebqhpg.vafgnyyzragffnzrsbenyyybnaf.zva";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:zva.ybnacebqhpg.vafgnyyzragffnzrsbenyyybnaf.znk";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:zva.ybnacebqhpg.vafgnyyzragffnzrsbenyyybnaf.gurqrsnhyg";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:abgahyy.ybnacebqhpg.vafgnyyzragffnzrsbenyyybnaf.zva";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:abgahyy.ybnacebqhpg.vafgnyyzragffnzrsbenyyybnaf.znk";a:2:{i:0;R:27393;i:1;R:9;}s:63:"1230:abgahyy.ybnacebqhpg.vafgnyyzragffnzrsbenyyybnaf.gurqrsnhyg";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:znk.ybnacebqhpg.vafgnyyzragffnzrsbenyyybnaf.znk";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:znk.ybnacebqhpg.vafgnyyzragffnzrsbenyyybnaf.gurqrsnhyg";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:glcrzvfzngpu.ybnacebqhpg.zvavagrerfgengr";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:glcrzvfzngpu.ybnacebqhpg.znkvagrerfgengr";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:glcrzvfzngpu.ybnacebqhpg.qrsnhygvagrerfgengr";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:zva.ybnacebqhpg.zvavagrerfgengr";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:znk.ybnacebqhpg.zvavagrerfgengr";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:zva.ybnacebqhpg.znkvagrerfgengr";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:znk.ybnacebqhpg.znkvagrerfgengr";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:zva.ybnacebqhpg.qrsnhygvagrerfgengr";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:znk.ybnacebqhpg.qrsnhygvagrerfgengr";a:2:{i:0;R:27393;i:1;R:9;}s:38:"1230:enatr.ybnacebqhpg.znkvagrerfgengr";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:enatr.ybnacebqhpg.qrsnhygvagrerfgengr";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:flfgrzhfref.znantrebyrfnaqcrezvffvbaf.ebyrfnaqcrezvffvbaf";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:flfgrzhfref.znantrebyrfnaqcrezvffvbaf.nebyrvfguranzr";a:2:{i:0;R:27393;i:1;R:9;}s:65:"1230:flfgrzhfref.znantrebyrfnaqcrezvffvbaf.anzrnaqgnfxcrezvffvbaf";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:flfgrzhfref.znantrebyrfnaqcrezvffvbaf.arjebyr";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:flfgrzhfref.znantrebyrfnaqcrezvffvbaf.qryrgrebyr";a:2:{i:0;R:27393;i:1;R:9;}s:20:"1230:erivrjnaqfhozvg";a:2:{i:0;R:27393;i:1;R:9;}s:107:"1230:flfgrzhfref.qrsvararjflfgrzhfre.gbfryrpg,pyvpxbanbssvprsebzguryvfgorybj.pyvpxpnaprygbergheagbnqzvacntr";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:svryqfznexrqjvgunanfgrevfxnererdhverq.";a:2:{i:0;R:27393;i:1;R:9;}s:18:"1230:--fryrpgbar--";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:bssvprf.qrsvararjbssvpr.pvgl/qvfgevpg";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:bssvprf.rqvgbssvprvasbezngvba.fgnghf1";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:bssvprf.rqvgbssvprvasbezngvba.pvgl/qvfgevpg";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:flfgrznqzvavfgengvba.ongpuwbof.ongpuwbofvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:66:"1230:flfgrznqzvavfgengvba.ongpuwbof.jrypbzrgbgurzvsbfongpuwbofnern";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:flfgrznqzvavfgengvba.ongpuwbof.fpurqhyrefgnghf";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:flfgrznqzvavfgengvba.ongpuwbof.fpurqhyrqgnfxf";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:flfgrznqzvavfgengvba.ongpuwbof.gnfxffragsberkrphgvba";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:flfgrznqzvavfgengvba.ongpuwbof.fhfcraq";a:2:{i:0;R:27393;i:1;R:9;}s:44:"1230:flfgrznqzvavfgengvba.ongpuwbof.npgvingr";a:2:{i:0;R:27393;i:1;R:9;}s:46:"1230:flfgrznqzvavfgengvba.ongpuwbof.gnfxfgnghf";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:flfgrznqzvavfgengvba.ongpuwbof.abezny";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:flfgrznqzvavfgengvba.ongpuwbof.cnhfrq";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:flfgrznqzvavfgengvba.ongpuwbof.haxabja";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:flfgrznqzvavfgengvba.ongpuwbof.pbzcyrgrq";a:2:{i:0;R:27393;i:1;R:9;}s:44:"1230:flfgrznqzvavfgengvba.ongpuwbof.fgnegvat";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:flfgrznqzvavfgengvba.ongpuwbof.fgnegrq";a:2:{i:0;R:27393;i:1;R:9;}s:44:"1230:flfgrznqzvavfgengvba.ongpuwbof.fgbccvat";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:flfgrznqzvavfgengvba.ongpuwbof.fgbccrq";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:flfgrznqzvavfgengvba.ongpuwbof.snvyrq";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:flfgrznqzvavfgengvba.ongpuwbof.nonaqbarq";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:flfgrznqzvavfgengvba.ongpuwbof.arirerkrphgrqlrg";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:flfgrznqzvavfgengvba.ongpuwbof.abar";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:flfgrznqzvavfgengvba.ongpuwbof.npgvir";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:flfgrznqzvavfgengvba.ongpuwbof.fgnaqol";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:flfgrznqzvavfgengvba.ongpuwbof.cerivbhfehafgneg";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:flfgrznqzvavfgengvba.ongpuwbof.zbfgerpragfhpprffshyeha";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:flfgrznqzvavfgengvba.ongpuwbof.cerivbhfehafgnghf";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:flfgrznqzvavfgengvba.ongpuwbof.arkgfgneg";a:2:{i:0;R:27393;i:1;R:9;}s:44:"1230:flfgrznqzvavfgengvba.ongpuwbof.gnfxglcr";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:flfgrznqzvavfgengvba.ongpuwbof.pebarkcerffvba";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:flfgrznqzvavfgengvba.ongpuwbof.ercrngvagreiny";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:flfgrznqzvavfgengvba.ongpuwbof.zvyvfrp";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:flfgrznqzvavfgengvba.ongpuwbof.gnfxcevbevgl";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:flfgrznqzvavfgengvba.ongpuwbof.gnfxqrcraqfba";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:flfgrznqzvavfgengvba.ongpuwbof.ehafryrpgrqgnfxf";a:2:{i:0;R:27393;i:1;R:9;}s:47:"1230:flfgrznqzvavfgengvba.ongpuwbof.fnirpunatrf";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:flfgrznqzvavfgengvba.ongpuwbof.erybnq";a:2:{i:0;R:27393;i:1;R:9;}s:47:"1230:flfgrznqzvavfgengvba.ongpuwbof.fubjqrgnvyf";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:flfgrznqzvavfgengvba.ongpuwbof.ongpuwbofsnvyqrgnvyf";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:flfgrznqzvavfgengvba.ongpuwbof.erghea";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:flfgrznqzvavfgengvba.ongpuwbof.fryrpgnyy";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:flfgrznqzvavfgengvba.zbagupybfvat.zbagupybfvatvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:82:"1230:flfgrznqzvavfgengvba.zbagupybfvat.jrypbzrgbgurzvsbfzbagupybfvatznantrzragnern";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:flfgrznqzvavfgengvba.zbagupybfvat.pheeragzbagupybfvatqngr";a:2:{i:0;R:27393;i:1;R:9;}s:47:"1230:flfgrznqzvavfgengvba.zbagupybfvat.punatrgb";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:flfgrznqzvavfgengvba.zbagupybfvat.punatr";a:2:{i:0;R:27393;i:1;R:9;}s:86:"1230:flfgrznqzvavfgengvba.ivrjflfgrzvasbezngvba.jrypbzrgbgurzvsbfflfgrzvasbezngvbanern";a:2:{i:0;R:27393;i:1;R:9;}s:65:"1230:flfgrznqzvavfgengvba.ivrjflfgrzvasbezngvba.flfgrzvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:67:"1230:flfgrznqzvavfgengvba.ivrjflfgrzvasbezngvba.bcrengvatflfgrznepu";a:2:{i:0;R:27393;i:1;R:9;}s:65:"1230:flfgrznqzvavfgengvba.ivrjflfgrzvasbezngvba.wniniraqbeirefvba";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:flfgrznqzvavfgengvba.ivrjflfgrzvasbezngvba.qngnonfriraqbe";a:2:{i:0;R:27393;i:1;R:9;}s:69:"1230:flfgrznqzvavfgengvba.ivrjflfgrzvasbezngvba.qngnonfrqevireirefvba";a:2:{i:0;R:27393;i:1;R:9;}s:65:"1230:flfgrznqzvavfgengvba.ivrjflfgrzvasbezngvba.nccyvpngvbafreire";a:2:{i:0;R:27393;i:1;R:9;}s:63:"1230:flfgrznqzvavfgengvba.ivrjflfgrzvasbezngvba.nccyvrqhctenqrf";a:2:{i:0;R:27393;i:1;R:9;}s:70:"1230:flfgrznqzvavfgengvba.ivrjflfgrzvasbezngvba.phfgbzercbegfqverpgbel";a:2:{i:0;R:27393;i:1;R:9;}s:64:"1230:flfgrznqzvavfgengvba.ivrjflfgrzvasbezngvba.pbzzvgvqragvsvre";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:flfgrznqzvavfgengvba.ivrjflfgrzvasbezngvba.eryrnfranzr";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:flfgrznqzvavfgengvba.ivrjflfgrzvasbezngvba.ohvyqqngr";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:flfgrznqzvavfgengvba.ivrjflfgrzvasbezngvba.ohvyqahzore";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:flfgrznqzvavfgengvba.ivrjflfgrzvasbezngvba.qngnonfrfbhepr";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:flfgrznqzvavfgengvba.ivrjflfgrzvasbezngvba.qngnonfrfreire";a:2:{i:0;R:27393;i:1;R:9;}s:60:"1230:flfgrznqzvavfgengvba.ivrjflfgrzvasbezngvba.qngnonfrcbeg";a:2:{i:0;R:27393;i:1;R:9;}s:60:"1230:flfgrznqzvavfgengvba.ivrjflfgrzvasbezngvba.qngnonfranzr";a:2:{i:0;R:27393;i:1;R:9;}s:60:"1230:flfgrznqzvavfgengvba.ivrjflfgrzvasbezngvba.qngnonfrhfre";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:flfgrznqzvavfgengvba.ivrjflfgrzvasbezngvba.qngrnaqgvzr";a:2:{i:0;R:27393;i:1;R:9;}s:74:"1230:flfgrznqzvavfgengvba.ivrjflfgrzvasbezngvba.qngrnaqgvzrvavfb8601sbezng";a:2:{i:0;R:27393;i:1;R:9;}s:54:"1230:flfgrznqzvavfgengvba.ivrjflfgrzvasbezngvba.bfhfre";a:2:{i:0;R:27393;i:1;R:9;}s:54:"1230:flfgrznqzvavfgengvba.fuhgqbja.fuhgqbjavasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:74:"1230:flfgrznqzvavfgengvba.fuhgqbja.jrypbzrgbgurzvsbffuhgqbjaznantrzragnern";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:flfgrznqzvavfgengvba.fuhgqbja.fuhgqbjafgnghf";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:flfgrznqzvavfgengvba.fuhgqbja.fpurqhyrva";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:flfgrznqzvavfgengvba.fuhgqbja.frpbaqf";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:flfgrznqzvavfgengvba.fuhgqbja.fgnegfuhgqbja";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:flfgrznqzvavfgengvba.fuhgqbja.pnapryfuhgqbja";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:flfgrznqzvavfgengvba.fuhgqbja.erserfu";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:flfgrznqzvavfgengvba.fuhgqbja.npgvirfrffvbaf";a:2:{i:0;R:27393;i:1;R:9;}s:98:"1230:flfgrznqzvavfgengvba.ivrjflfgrzvasbezngvba.zvsbfqngnonfrirefvba.yvfgbsnccyvrqqngnonfrhctenqrf";a:2:{i:0;R:27393;i:1;R:9;}s:100:"1230:flfgrznqzvavfgengvba.ivrjflfgrzvasbezngvba.zvsbfqngnonfrirefvba.yvfgbshanccyvrqqngnonfrhctenqrf";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:nqzva.ivrjflfgrzvasbezngvba.vq";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:nqzva.ivrjflfgrzvasbezngvba.nhgube";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:nqzva.ivrjflfgrzvasbezngvba.pbagrkgf";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:nqzva.ivrjflfgrzvasbezngvba.qngrrkrphgrq";a:2:{i:0;R:27393;i:1;R:9;}s:46:"1230:nqzva.ivrjflfgrzvasbezngvba.rkrphgvbaglcr";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:nqzva.ivrjflfgrzvasbezngvba.aberpbeqf";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.ybnacebqhpganzr";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.ivrjybnacebqhpgf";a:2:{i:0;R:27393;i:1;R:9;}s:66:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.rqvgybnacebqhpgvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:58:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.ybnacebqhpgqrgnvyf";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.cebqhpgvafgnapranzr";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.fubeganzr";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.qrfpevcgvba";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.cebqhpgpngrtbel";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.fgnegqngr";a:2:{i:0;R:27393;i:1;R:9;}s:47:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.raqqngr";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.nccyvpnoyrsbe";a:2:{i:0;R:27393;i:1;R:9;}s:65:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.vapyhqrvaybnaplpyrpbhagre";a:2:{i:0;R:27393;i:1;R:9;}s:61:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.pnyphyngrybnanzbhagnf";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.zvaybnanzbhag";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.znkybnanzbhag";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.qrsnhygnzbhag";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.vagrerfgengr";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.vagrerfgengrglcr";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.znkvagrerfgengr";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.zvavagrerfgengr";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.qrsnhygvagrerfgengr";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.ercnlzragfpurqhyr";a:2:{i:0;R:27393;i:1;R:9;}s:63:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.serdhraplbsvafgnyyzragf";a:2:{i:0;R:27393;i:1;R:9;}s:65:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.pnyphyngrbsvafgnyyzragfnf";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.zvabsvafgnyyzragf";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.znkbsvafgnyyzragf";a:2:{i:0;R:27393;i:1;R:9;}s:61:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.qrsnhygbsvafgnyyzragf";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.tenprcrevbqglcr";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.tenprcrevbqqhengvba";a:2:{i:0;R:27393;i:1;R:9;}s:44:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.srrf";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.nppbhagvat";a:2:{i:0;R:27393;i:1;R:9;}s:54:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.fbheprfbsshaqf";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.cebqhpgtypbqr";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.vagrerfg";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.cevapvcny";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:znantrybnacebqhpgf.rqvgybnacebqhpg.ivrjpunatrybt";a:2:{i:0;R:27393;i:1;R:9;}s:64:"1230:znantrfniatfcebqhpgf.rqvgfnivatfcebqhpg.ivrjfnivatfcebqhpgf";a:2:{i:0;R:27393;i:1;R:9;}s:63:"1230:znantrfniatfcebqhpgf.rqvgfnivatfcebqhpg.fnivatfcebqhpganzr";a:2:{i:0;R:27393;i:1;R:9;}s:74:"1230:znantrfniatfcebqhpgf.rqvgfnivatfcebqhpg.rqvgfnivatfcebqhpgvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:66:"1230:znantrfniatfcebqhpgf.rqvgfnivatfcebqhpg.fnivatfcebqhpgqrgnvyf";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:znantrfniatfcebqhpgf.rqvgfnivatfcebqhpg.glcrbsqrcbfvgf";a:2:{i:0;R:27393;i:1;R:9;}s:70:"1230:znantrfniatfcebqhpgf.rqvgfnivatfcebqhpg.znaqngbelnzbhagsbeqrcbfvg";a:2:{i:0;R:27393;i:1;R:9;}s:60:"1230:znantrfniatfcebqhpgf.rqvgfnivatfcebqhpg.nzbhagnccyvrfgb";a:2:{i:0;R:27393;i:1;R:9;}s:67:"1230:znantrfniatfcebqhpgf.rqvgfnivatfcebqhpg.znknzbhagcrejvguqenjny";a:2:{i:0;R:27393;i:1;R:9;}s:77:"1230:znantrfniatfcebqhpgf.rqvgfnivatfcebqhpg.nynaprhfrqsbevagrerfgpnyphyngvba";a:2:{i:0;R:27393;i:1;R:9;}s:77:"1230:znantrfniatfcebqhpgf.rqvgfnivatfcebqhpg.gvzrcrevbqsbevagrerfgpnyphyngvba";a:2:{i:0;R:27393;i:1;R:9;}s:81:"1230:znantrfniatfcebqhpgf.rqvgfnivatfcebqhpg.serdhraplbsvagrerfgcbfgvatgbnppbhagf";a:2:{i:0;R:27393;i:1;R:9;}s:89:"1230:znantrfniatfcebqhpgf.rqvgfnivatfcebqhpg.zvavzhzonynaprerdhverqsbevagrerfgpnyphyngvba";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:znantrfniatfcebqhpgf.rqvgfnivatfcebqhpg.nppbhagvat";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:znantrfniatfcebqhpgf.rqvgfnivatfcebqhpg.typbqrsbeqrcbfvgf";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:znantrfniatfcebqhpgf.rqvgfnivatfcebqhpg.typbqrsbevagrerfg";a:2:{i:0;R:27393;i:1;R:9;}s:58:"1230:znantrfniatfcebqhpgf.rqvgfnivatfcebqhpg.ivrjpunatrybt";a:2:{i:0;R:27393;i:1;R:9;}s:64:"1230:znantrfniatfcebqhpgf.rqvgfnivatfcebqhpg.cebqhpgvafgnapranzr";a:2:{i:0;R:27393;i:1;R:9;}s:54:"1230:znantrfniatfcebqhpgf.rqvgfnivatfcebqhpg.fubeganzr";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:znantrfniatfcebqhpgf.rqvgfnivatfcebqhpg.qrfpevcgvba";a:2:{i:0;R:27393;i:1;R:9;}s:60:"1230:znantrfniatfcebqhpgf.rqvgfnivatfcebqhpg.cebqhpgpngrtbel";a:2:{i:0;R:27393;i:1;R:9;}s:54:"1230:znantrfniatfcebqhpgf.rqvgfnivatfcebqhpg.fgnegqngr";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:znantrfniatfcebqhpgf.rqvgfnivatfcebqhpg.raqqngr";a:2:{i:0;R:27393;i:1;R:9;}s:58:"1230:znantrfniatfcebqhpgf.rqvgfnivatfcebqhpg.nccyvpnoyrsbe";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:znantrfniatfcebqhpgf.rqvgfnivatfcebqhpg.vagrerfgengr";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:znantrfniatfcebqhpgf.rqvgfnivatfcebqhpg.fgnghf";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:betnavmngvbacersreraprf.rqvgpurpxyvfg.ivrjpurpxyvfgf";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:betnavmngvbacersreraprf.rqvgpurpxyvfg.purpxyvfganzr";a:2:{i:0;R:27393;i:1;R:9;}s:47:"1230:betnavmngvbacersreraprf.rqvgpurpxyvfg.glcr";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:betnavmngvbacersreraprf.rqvgpurpxyvfg.fgnghf";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:betnavmngvbacersreraprf.rqvgpurpxyvfg.perngrqol";a:2:{i:0;R:27393;i:1;R:9;}s:54:"1230:betnavmngvbacersreraprf.rqvgpurpxyvfg.perngrqqngr";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:betnavmngvbacersreraprf.rqvgpurpxyvfg.vgrzf";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:betnavmngvbacersreraprf.rqvgpurpxyvfg.vgrzf1";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:betnavmngvbacersreraprf.rqvgpurpxyvfg.vgrzf2";a:2:{i:0;R:27393;i:1;R:9;}s:67:"1230:betnavmngvbacersreraprf.rqvgpurpxyvfg.rqvgpurpxyvfgvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:63:"1230:betnavmngvbacersreraprf.shaqcerivrj.cerivrjshaqvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:60:"1230:betnavmngvbacersreraprf.shaqcerivrj.rqvgshaqvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:11:"1230:pnapry";a:2:{i:0;R:27393;i:1;R:9;}s:58:"1230:betnavmngvbacersreraprf.qrsvararjshaq.shaqvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:betnavmngvbacersreraprf.qrsvararjshaq.qrsvararjshaq";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:betnavmngvbacersreraprf.qrsvararjshaq.qrsvarnarjshaq";a:2:{i:0;R:27393;i:1;R:9;}s:141:"1230:betnavmngvbacersreraprf.qrsvararjshaq.pbzcyrgrgursvryqforybj.gurapyvpxcerivrj.pyvpxpnaprygbergheagbnqzvacntrjvgubhgfhozvggvatvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:54:"1230:betnavmngvbacersreraprf.qrsvararjshaq.shaqqrgnvyf";a:2:{i:0;R:27393;i:1;R:9;}s:47:"1230:betnavmngvbacersreraprf.qrsvararjshaq.anzr";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:betnavmngvbacersreraprf.qrsvararjshaq.shaqpbqr";a:2:{i:0;R:27393;i:1;R:9;}s:63:"1230:betnavmngvbacersreraprf.qrsvararjshaq.ragreshaqvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:64:"1230:betnavmngvbacersreraprf.qrsvararjcranygl.cranyglvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:betnavmngvbacersreraprf.qrsvararjcranygl.qrsvararjcranygl";a:2:{i:0;R:27393;i:1;R:9;}s:63:"1230:betnavmngvbacersreraprf.qrsvararjcranygl.qrsvarnarjcranygl";a:2:{i:0;R:27393;i:1;R:9;}s:144:"1230:betnavmngvbacersreraprf.qrsvararjcranygl.pbzcyrgrgursvryqforybj.gurapyvpxcerivrj.pyvpxpnaprygbergheagbnqzvacntrjvgubhgfhozvggvatvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:60:"1230:betnavmngvbacersreraprf.qrsvararjcranygl.cranyglqrgnvyf";a:2:{i:0;R:27393;i:1;R:9;}s:65:"1230:betnavmngvbacersreraprf.qrsvararjcranygl.vagrerfgpnyphyngvba";a:2:{i:0;R:27393;i:1;R:9;}s:63:"1230:betnavmngvbacersreraprf.qrsvararjcranygl.nppbhagvatqrgnvyf";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:betnavmngvbacersreraprf.qrsvararjcranygl.anzr";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:betnavmngvbacersreraprf.qrsvararjcranygl.nccyvrfgb";a:2:{i:0;R:27393;i:1;R:9;}s:61:"1230:betnavmngvbacersreraprf.qrsvararjcranygl.tenprcrevbqglcr";a:2:{i:0;R:27393;i:1;R:9;}s:65:"1230:betnavmngvbacersreraprf.qrsvararjcranygl.tenprcrevbqqhengvba";a:2:{i:0;R:27393;i:1;R:9;}s:71:"1230:betnavmngvbacersreraprf.qrsvararjcranygl.zvaphzhyngvircranyglyvzvg";a:2:{i:0;R:27393;i:1;R:9;}s:71:"1230:betnavmngvbacersreraprf.qrsvararjcranygl.znkphzhyngvircranyglyvzvg";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:betnavmngvbacersreraprf.qrsvararjcranygl.svkrqnzbhag";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:betnavmngvbacersreraprf.qrsvararjcranygl.be";a:2:{i:0;R:27393;i:1;R:9;}s:64:"1230:betnavmngvbacersreraprf.qrsvararjcranygl.pnyphyngrcranyglnf";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:betnavmngvbacersreraprf.qrsvararjcranygl.crepragbs";a:2:{i:0;R:27393;i:1;R:9;}s:73:"1230:betnavmngvbacersreraprf.qrsvararjcranygl.cranyglnccyvpngvbaserdhrapl";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:betnavmngvbacersreraprf.qrsvararjcranygl.typbqr";a:2:{i:0;R:27393;i:1;R:9;}s:69:"1230:betnavmngvbacersreraprf.qrsvararjcranygl.ragrecranyglvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:68:"1230:betnavmngvbacersreraprf.ivrjcranygl.rqvg.rqvgcranyglvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:152:"1230:betnavmngvbacersreraprf.ivrjcranygl.rqvg.pbzcyrgrgursvryqforybj.gurapyvpxcerivrj.pyvpxpnaprygbergheagbivrjcranygvrfcntrjvgubhgfhozvggvatvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:145:"1230:betnavmngvbacersreraprf.ivrjcranygl.rqvg.cerivrjgursvryqforybjgurapyvpxfhozvgpyvpxpnaprygbergheagbcranyglqrgnvyfjvgubhgfhozvggvatvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:71:"1230:betnavmngvbacersreraprf.ivrjcranygl.rqvg.cerivrjcranyglvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:betnavmngvbacersreraprf.ivrjcranygl.rqvg.fgnghf";a:2:{i:0;R:27393;i:1;R:9;}s:58:"1230:betnavmngvbacersreraprf.qrsvararjubyvqnl.ivrjubyvqnlf";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:betnavmngvbacersreraprf.qrsvararjubyvqnl.nqqubyvqnl";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:betnavmngvbacersreraprf.qrsvararjubyvqnl.ubyvqnlanzr";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:betnavmngvbacersreraprf.qrsvararjubyvqnl.sebzqng";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:betnavmngvbacersreraprf.qrsvararjubyvqnl.gbqngr";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:betnavmngvbacersreraprf.qrsvararjubyvqnl.qq";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:betnavmngvbacersreraprf.qrsvararjubyvqnl.zz";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:betnavmngvbacersreraprf.qrsvararjubyvqnl.llll";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:betnavmngvbacersreraprf.qrsvararjubyvqnl.ercnlzragehyr";a:2:{i:0;R:27393;i:1;R:9;}s:15:"1230:--fryrpg--";a:2:{i:0;R:27393;i:1;R:9;}s:12:"1230:fnzrqnl";a:2:{i:0;R:27393;i:1;R:9;}s:26:"1230:arkgzrrgvat/ercnlzrag";a:2:{i:0;R:27393;i:1;R:9;}s:19:"1230:arkgjbexvatqnl";a:2:{i:0;R:27393;i:1;R:9;}s:24:"1230:ercnlzragzbengbevhz";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:betnavmngvbacersreraprf.qrsvararjubyvqnl.fnzrqnl";a:2:{i:0;R:27393;i:1;R:9;}s:67:"1230:betnavmngvbacersreraprf.qrsvararjubyvqnl.arkgzrrgvat/ercnlzrag";a:2:{i:0;R:27393;i:1;R:9;}s:60:"1230:betnavmngvbacersreraprf.qrsvararjubyvqnl.arkgjbexvatqnl";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:betnavmngvbacersreraprf.qrsvararjubyvqnl.nccyvrfgb";a:2:{i:0;R:27393;i:1;R:9;}s:34:"1230:reebe.ubyvqnl.znaqngbel_svryq";a:2:{i:0;R:27393;i:1;R:9;}s:29:"1230:ubyvqnl.sebzqngr.vainyvq";a:2:{i:0;R:27393;i:1;R:9;}s:30:"1230:ubyvqnl.sebzqngr.vainyvq2";a:2:{i:0;R:27393;i:1;R:9;}s:30:"1230:ubyvqnl.sebzqngr.vainyvq3";a:2:{i:0;R:27393;i:1;R:9;}s:30:"1230:ubyvqnl.sebzqngr.vainyvq4";a:2:{i:0;R:27393;i:1;R:9;}s:29:"1230:ubyvqnl.guehqngr.vainyvq";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:ubyvqnl.ercnlzragehyr.erdhverq";a:2:{i:0;R:27393;i:1;R:9;}s:31:"1230:ubyvqnl.nccyvrfgb.erdhverq";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:pyvragyrsgcnar.pyvragfnaqnppbhagfgnfxf";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:pyvragyrsgcnar.znantrpbyyrpgvbafurrgf";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:pyvragyrsgcnar.perngrarjpyvragf";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:pyvragyrsgcnar.perngrarjpragre";a:2:{i:0;R:27393;i:1;R:9;}s:34:"1230:pyvragyrsgcnar.perngrarjtebhc";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:pyvragyrsgcnar.perngrarjpyvrag";a:2:{i:0;R:27393;i:1;R:9;}s:37:"1230:pyvragyrsgcnar.perngrarjnppbhagf";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:pyvragyrsgcnar.perngrfnivatfnppbhag";a:2:{i:0;R:27393;i:1;R:9;}s:37:"1230:pyvragyrsgcnar.perngrybnanppbhag";a:2:{i:0;R:27393;i:1;R:9;}s:46:"1230:pyvragyrsgcnar.perngrzhygvcyrybnanppbhagf";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:pyvragyrsgcnar.znantrnppbhagfgnghf";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:pyvragyrsgcnar.nccebirzhygvcyrybnaf";a:2:{i:0;R:27393;i:1;R:9;}s:44:"1230:pyvragyrsgcnar.ragrepbyyrpgvbafurrgqngn";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:betnavmngvbacersreraprf.ivrjpurpxyvfgf";a:2:{i:0;R:27393;i:1;R:9;}s:63:"1230:betnavmngvbacersreraprf.ivrjpurpxyvfgf.qrsvarnarjpurpxyvfg";a:2:{i:0;R:27393;i:1;R:9;}s:95:"1230:betnavmngvbacersreraprf.ivrjpurpxyvfgf.pyvpxbanpurpxyvfgorybjgbivrjqrgnvyfnaqznxrpunatrfbe";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:betnavmngvbacersreraprf.ivrjpurpxyvfgf.pragre";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:betnavmngvbacersreraprf.ivrjpurpxyvfgf.tebhc";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:betnavmngvbacersreraprf.ivrjpurpxyvfgf.pyvrag";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:betnavmngvbacersreraprf.ivrjpurpxyvfgf.ybna";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:betnavmngvbacersreraprf.ivrjpurpxyvfgf.fnivatf";a:2:{i:0;R:27393;i:1;R:9;}s:26:"1230:punatrcnffjbeq.ybtbhg";a:2:{i:0;R:27393;i:1;R:9;}s:34:"1230:punatrcnffjbeq.punatrcnffjbeq";a:2:{i:0;R:27393;i:1;R:9;}s:93:"1230:punatrcnffjbeq.ragrepheeragcnffjbeqnaqgurapubbfrlbhearjcnffjbeqpyvpxfhozvgjuralbhnerqbar";a:2:{i:0;R:27393;i:1;R:9;}s:28:"1230:punatrcnffjbeq.hfreanzr";a:2:{i:0;R:27393;i:1;R:9;}s:31:"1230:punatrcnffjbeq.byqcnffjbeq";a:2:{i:0;R:27393;i:1;R:9;}s:31:"1230:punatrcnffjbeq.arjcnffjbeq";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:punatrcnffjbeq.arjcnffjbeqpbasvezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:16:"1230:ybtva.ybtva";a:2:{i:0;R:27393;i:1;R:9;}s:25:"1230:ybtva.jrypbzrgbzvsbf";a:2:{i:0;R:27393;i:1;R:9;}s:19:"1230:ybtva.hfreanzr";a:2:{i:0;R:27393;i:1;R:9;}s:19:"1230:ybtva.cnffjbeq";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:ybtva.puvarfr.genafyngvba.nggevohgvba";a:2:{i:0;R:27393;i:1;R:9;}s:20:"1230:shaqvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:19:"1230:qrsvarnarjshaq";a:2:{i:0;R:27393;i:1;R:9;}s:142:"1230:erivrjgurvasbezngvbaorybj.pyvpxfhozvgvslbhnerfngvfsvrqbepyvpxrqvggbznxrpunatrf.pyvpxpnaprygbergheagbnqzvacntrjvgubhgfhozvggvatvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:16:"1230:shaqqrgnvyf";a:2:{i:0;R:27393;i:1;R:9;}s:9:"1230:anzr";a:2:{i:0;R:27393;i:1;R:9;}s:13:"1230:shaqpbqr";a:2:{i:0;R:27393;i:1;R:9;}s:38:"1230:betnavmngvbacersreraprf.ivrjshaqf";a:2:{i:0;R:27393;i:1;R:9;}s:44:"1230:betnavmngvbacersreraprf.ivrjshaqf.shaqf";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:znantrybnacebqhpgf.ivrjybnacebqhpgf";a:2:{i:0;R:27393;i:1;R:9;}s:94:"1230:znantrybnacebqhpgf.ivrjybnacebqhpgf.pyvpxbanybnacebqhpgorybjgbivrjqrgnvyfnaqznxrpunatrfbe";a:2:{i:0;R:27393;i:1;R:9;}s:100:"1230:znantrybnacebqhpgf.ivrjfnivatfcebqhpgf.pyvpxbanfnivatfcebqhpgorybjgbivrjqrgnvyfnaqznxrpunatrfbe";a:2:{i:0;R:27393;i:1;R:9;}s:66:"1230:znantrybnacebqhpgf.ivrjfnivatfcebqhpgf.qrsvararjfnivatcbeqhpg";a:2:{i:0;R:27393;i:1;R:9;}s:8:"1230:nqq";a:2:{i:0;R:27393;i:1;R:9;}s:11:"1230:erzbir";a:2:{i:0;R:27393;i:1;R:9;}s:9:"1230:rqvg";a:2:{i:0;R:27393;i:1;R:9;}s:99:"1230:pbzcyrgrgursvryqforybj.gurapyvpxcerivrj.pyvpxpnaprygbergheagbnqzvajvgubhgfhozvggvatvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:11:"1230:npgvir";a:2:{i:0;R:27393;i:1;R:9;}s:13:"1230:vanpgvir";a:2:{i:0;R:27393;i:1;R:9;}s:12:"1230:cerivrj";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:flfgrzhfre.lbhunirfhpprffshyylnqqrqnarjhfre";a:2:{i:0;R:27393;i:1;R:9;}s:68:"1230:flfgrzhfre.cyrnfrabgrflfgrzhfreunforranffvtarqgurflfgrzvqahzore";a:2:{i:0;R:27393;i:1;R:9;}s:34:"1230:flfgrzhfre.ivrjhfreqrgnvyfabj";a:2:{i:0;R:27393;i:1;R:9;}s:27:"1230:flfgrzhfre.nqqnarjhfre";a:2:{i:0;R:27393;i:1;R:9;}s:47:"1230:bssvprf.lbhunirfhpprffshyylnqqrqnarjbssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:68:"1230:bssvprf.cyrnfrabgrbssvpr1bssvprunforranffvtarqgurflfgrzvqahzore";a:2:{i:0;R:27393;i:1;R:9;}s:33:"1230:bssvprf.ivrjbssvprqrgnvyfabj";a:2:{i:0;R:27393;i:1;R:9;}s:26:"1230:bssvprf.nqqnarjbssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:lbhunirfhpprffshyylnqqrqnarjcebqhpgpngrtbel";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:cyrnfrabgrcebqhpgpngrtbelunforranffvtarqgurflfgrzvqahzore";a:2:{i:0;R:27393;i:1;R:9;}s:27:"1230:ivrjpngrtbelqrgnvyfabj";a:2:{i:0;R:27393;i:1;R:9;}s:30:"1230:qrsvarnarjcebqhpgpngrtbel";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:znantrcebqhpgzvk.lbhunirfhpprffshyylqrsvarqnarjcebqhpgzvk";a:2:{i:0;R:27393;i:1;R:9;}s:46:"1230:znantrcebqhpgzvk.ivrjcebqhpgzvkqrgnvyfabj";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:znantrcebqhpgzvk.qrsvarzvksbenarjcebqhpg";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:znantrybnacebqhpg.lbhunirfhpprffshyylnqqrqnarjybnacebqhpg";a:2:{i:0;R:27393;i:1;R:9;}s:66:"1230:znantrybnacebqhpg.ybnacebqhpgunforranffvtarqgurflfgrzvqahzore";a:2:{i:0;R:27393;i:1;R:9;}s:33:"1230:znantrybnacebqhpg.cyrnfrabgr";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:znantrybnacebqhpg.ivrjybnacebqhpgqrgnvyfabj";a:2:{i:0;R:27393;i:1;R:9;}s:44:"1230:znantrybnacebqhpg.qrsvarnarjybnacebqhpg";a:2:{i:0;R:27393;i:1;R:9;}s:68:"1230:znantrfnivatfcebqhpg.lbhunirfhpprffshyylnqqrqnarjfnivatfcebqhpg";a:2:{i:0;R:27393;i:1;R:9;}s:72:"1230:znantrfnivatfcebqhpg.fnivatfcebqhpgunforranffvtarqgurflfgrzvqahzore";a:2:{i:0;R:27393;i:1;R:9;}s:54:"1230:znantrfnivatfcebqhpg.ivrjfnivatfcebqhpgqrgnvyfabj";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:znantrfnivatfcebqhpg.qrsvarnarjfnivatfcebqhpg";a:2:{i:0;R:27393;i:1;R:9;}s:16:"1230:erpragabgrf";a:2:{i:0;R:27393;i:1;R:9;}s:30:"1230:erpragabgrf.abarninvynoyr";a:2:{i:0;R:27393;i:1;R:9;}s:24:"1230:erpragabgrf.nqqabgr";a:2:{i:0;R:27393;i:1;R:9;}s:25:"1230:erpragabgrf.nyyabgrf";a:2:{i:0;R:27393;i:1;R:9;}s:37:"1230:flfgrzhfref.cerivrj.pubbfrbssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:flfgrzhfref.cerivrj.hfrevasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:flfgrzhfref.cerivrj.nqqnarjhfre";a:2:{i:0;R:27393;i:1;R:9;}s:33:"1230:flfgrzhfref.cerivrj.rqvghfre";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:flfgrzhfref.cerivrj.erivrjgurvasbezngvbaorybj";a:2:{i:0;R:27393;i:1;R:9;}s:31:"1230:flfgrzhfref.cerivrj.bssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:flfgrzhfref.cerivrj.hfreqrgnvyf";a:2:{i:0;R:27393;i:1;R:9;}s:32:"1230:flfgrzhfref.cerivrj.nqqerff";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:flfgrzhfref.cerivrj.crezvffvbaf";a:2:{i:0;R:27393;i:1;R:9;}s:34:"1230:flfgrzhfref.cerivrj.ybtvavasb";a:2:{i:0;R:27393;i:1;R:9;}s:34:"1230:flfgrzhfref.cerivrj.svefganzr";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:flfgrzhfref.cerivrj.zvqqyranzr";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:flfgrzhfref.cerivrj.frpbaqynfganzr";a:2:{i:0;R:27393;i:1;R:9;}s:33:"1230:flfgrzhfref.cerivrj.ynfganzr";a:2:{i:0;R:27393;i:1;R:9;}s:37:"1230:flfgrzhfref.cerivrj.tbireazragvq";a:2:{i:0;R:27393;i:1;R:9;}s:30:"1230:flfgrzhfref.cerivrj.rznvy";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:flfgrzhfref.cerivrj.qngrbsovegu";a:2:{i:0;R:27393;i:1;R:9;}s:28:"1230:flfgrzhfref.cerivrj.ntr";a:2:{i:0;R:27393;i:1;R:9;}s:31:"1230:flfgrzhfref.cerivrj.traqre";a:2:{i:0;R:27393;i:1;R:9;}s:38:"1230:flfgrzhfref.cerivrj.znevgnyfgnghf";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:flfgrzhfref.cerivrj.ynathntrcersreerq";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:flfgrzhfref.cerivrj.zsvwbvavatqngr";a:2:{i:0;R:27393;i:1;R:9;}s:31:"1230:flfgrzhfref.cerivrj.fgnghf";a:2:{i:0;R:27393;i:1;R:9;}s:33:"1230:flfgrzhfref.cerivrj.nqqerff1";a:2:{i:0;R:27393;i:1;R:9;}s:33:"1230:flfgrzhfref.cerivrj.nqqerff2";a:2:{i:0;R:27393;i:1;R:9;}s:33:"1230:flfgrzhfref.cerivrj.nqqerff3";a:2:{i:0;R:27393;i:1;R:9;}s:29:"1230:flfgrzhfref.cerivrj.pvgl";a:2:{i:0;R:27393;i:1;R:9;}s:30:"1230:flfgrzhfref.cerivrj.fgngr";a:2:{i:0;R:27393;i:1;R:9;}s:32:"1230:flfgrzhfref.cerivrj.pbhagel";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:flfgrzhfref.cerivrj.cbfgnypbqr";a:2:{i:0;R:27393;i:1;R:9;}s:34:"1230:flfgrzhfref.cerivrj.gryrcubar";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:flfgrzhfref.cerivrj.bssvprnaqcrezvffvbaf";a:2:{i:0;R:27393;i:1;R:9;}s:34:"1230:flfgrzhfref.cerivrj.hfregvgyr";a:2:{i:0;R:27393;i:1;R:9;}s:38:"1230:flfgrzhfref.cerivrj.hfreuvrenepul";a:2:{i:0;R:27393;i:1;R:9;}s:30:"1230:flfgrzhfref.cerivrj.ebyrf";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:flfgrzhfref.cerivrj.ybtvavasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:33:"1230:flfgrzhfref.cerivrj.hfreanzr";a:2:{i:0;R:27393;i:1;R:9;}s:33:"1230:flfgrzhfref.cerivrj.cnffjbeq";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:flfgrzhfref.cerivrj.pbasvezrqcnffjbeq";a:2:{i:0;R:27393;i:1;R:9;}s:46:"1230:flfgrzhfref.cerivrj.nqqvgvbanyvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:flfgrzhfref.cerivrj.rkgreanyvq";a:2:{i:0;R:27393;i:1;R:9;}s:34:"1230:abgahyy.hfresbezorna.bssvprvq";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:abgrzcgl.hfresbezorna.svefganzr";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:abgrzcgl.hfresbezorna.ynfganzr";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:abgahyy.hfresbezorna.qngrbsoveguqnl";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:zva.hfresbezorna.qngrbsoveguqnl";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:znk.hfresbezorna.qngrbsoveguqnl";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:abgahyy.hfresbezorna.qngrbsoveguzbagu";a:2:{i:0;R:27393;i:1;R:9;}s:38:"1230:zva.hfresbezorna.qngrbsoveguzbagu";a:2:{i:0;R:27393;i:1;R:9;}s:38:"1230:znk.hfresbezorna.qngrbsoveguzbagu";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:abgahyy.hfresbezorna.qngrbsovegulrne";a:2:{i:0;R:27393;i:1;R:9;}s:38:"1230:abginyvq.hfresbezorna.qngrbsoevgu";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:zva.hfresbezorna.zsvwbvavatqngrqnl";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:znk.hfresbezorna.zsvwbvavatqngrqnl";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:zva.hfresbezorna.zsvwbvavatqngrzbagu";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:znk.hfresbezorna.zsvwbvavatqngrzbagu";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:abginyvq.hfresbezorna.zsvwbvavatqngr";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:abgrzcgl.hfresbezorna.fryrpgrqtraqre";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:abgrzcgl.hfresbezorna.fryrpgrqhfreuvrenepul";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:abgrzcgl.hfresbezorna.hfreanzr";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:abgrzcgl.hfresbezorna.cnffjbeq";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:abgrdhny.hfresbezorna.cnffjbeq";a:2:{i:0;R:27393;i:1;R:9;}s:30:"1230:zva.hfresbezorna.cnffjbeq";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:abgrzcgl.hfresbezorna.nqqerff.nqqerff1";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:abgrzcgl.hfresbezorna.nqqvgvbanysvryq";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:zva.hfresbezorna.nqqvgvbanyqngrsvryq";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:znk.hfresbezorna.nqqvgvbanyqngrsvryq";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:inyvq.hfresbezorna.nqqvgvbanyqngrsvryq";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:inyvq.hfresbezorna.nqqvgvbanyahzoresvryq";a:2:{i:0;R:27393;i:1;R:9;}s:47:"1230:bssvprf.cerivrjarjbssvpr.bssvprvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:bssvprf.cerivrjarjbssvpr.nqqnarjbssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:bssvprf.cerivrjarjbssvpr.bssvpranzr";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:bssvprf.cerivrjarjbssvpr.bssvprfubeganzr";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:bssvprf.cerivrjarjbssvpr.bssvprglcr";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:bssvprf.cerivrjarjbssvpr.cneragbssvpr";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:bssvprf.cerivrjarjbssvpr.bssvprnqqerff";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:bssvprf.cerivrjarjbssvpr.gryrcubar";a:2:{i:0;R:27393;i:1;R:9;}s:44:"1230:bssvprf.cerivrjarjbssvpr.pvglbeqvfgevpg";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:bssvprf.cerivrjarjbssvpr.fgngr";a:2:{i:0;R:27393;i:1;R:9;}s:37:"1230:bssvprf.cerivrjarjbssvpr.pbhagel";a:2:{i:0;R:27393;i:1;R:9;}s:40:"1230:bssvprf.cerivrjarjbssvpr.cbfgnypbqr";a:2:{i:0;R:27393;i:1;R:9;}s:66:"1230:betnavmngvbacersreraprf.cerivrjpurpxyvfg.purpxyvfgvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:61:"1230:betnavmngvbacersreraprf.cerivrjpurpxyvfg.nqqarjpurpxyvfg";a:2:{i:0;R:27393;i:1;R:9;}s:72:"1230:betnavmngvbacersreraprf.cerivrjpurpxyvfg.erivrjpurpxyvfgvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:83:"1230:betnavmngvbacersreraprf.cerivrjpurpxyvfg.erivrjgurvasbezngvbaorybj.pyvpxfhozvg";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:betnavmngvbacersreraprf.cerivrjpurpxyvfg.purpxyvfgqrgnvyf";a:2:{i:0;R:27393;i:1;R:9;}s:60:"1230:betnavmngvbacersreraprf.cerivrjpurpxyvfg.ivrjpurpxyvfgf";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:betnavmngvbacersreraprf.cerivrjpurpxyvfg.anzr";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:betnavmngvbacersreraprf.cerivrjpurpxyvfg.glcr";a:2:{i:0;R:27393;i:1;R:9;}s:75:"1230:betnavmngvbacersreraprf.cerivrjpurpxyvfg.qvfcynlrqjurazbivatvagbfgnghf";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:betnavmngvbacersreraprf.cerivrjpurpxyvfg.vgrzf";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:betnavmngvbacersreraprf.cerivrjpurpxyvfg.vgrzf1";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:betnavmngvbacersreraprf.cerivrjpurpxyvfg.vgrzf2";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:znantrcebqhpgf.cerivrjcebqhpgzvk.cebqhpgzvkvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:znantrcebqhpgf.cerivrjcebqhpgzvk.nqqnarjcebqhpgzvk";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:erivrjgurvasbezngvbaorybj.pyvpxfhozvg";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:znantrcebqhpgf.cerivrjcebqhpgzvk.cebqhpgzvkqrgnvyf";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:znantrcebqhpgf.cerivrjcebqhpgzvk.cebqhpgglcr";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:znantrcebqhpgf.cerivrjcebqhpgzvk.cebqhpgvafgnapranzr";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:znantrcebqhpgf.cerivrjcebqhpgzvk.nyybjrqcebqhpgf";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:znantrcebqhpgf.cerivrjcebqhpgzvk.fgnaqneqpyvragybna";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:znantrcebqhpgf.cerivrjcebqhpgzvk.vaqvivqhnyzrqvpnyybna";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:znantrcebqhpgf.cerivrjcebqhpgzvk.ubhfrubyqvzcebirzragybna";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:znantrcebqhpgf.cerivrjcebqhpgzvk.tebhcyvirfgbpxybna";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:znantrcebqhpgf.cerivrjcebqhpgzvk.rqhpngvbanyybna";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:znantrcebqhpgf.cerivrjcebqhpgzvk.fgnaqneqtebhcybna";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:znantrcebqhpgf.cerivrjcebqhpgzvk.ubhfvat";a:2:{i:0;R:27393;i:1;R:9;}s:44:"1230:znantrcebqhpgf.cerivrjcebqhpgzvk.eragny";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:znantrcebqhpgf.cerivrjcebqhpgzvk.vaqvivqhnyybna";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:znantrcebqhpgf.cerivrjcebqhpgzvk.abgnyybjrqcebqhpgf";a:2:{i:0;R:27393;i:1;R:9;}s:61:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.nqqnarjybnacebqhpg";a:2:{i:0;R:27393;i:1;R:9;}s:65:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.ybnacebqhpgvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:61:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.ybnacebqhpgqrgnvyf";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.cebqhpgvafgnapranzr";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.fubeganzr";a:2:{i:0;R:27393;i:1;R:9;}s:54:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.qrfpevcgvba";a:2:{i:0;R:27393;i:1;R:9;}s:58:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.cebqhpgpngrtbel";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.fgnegqngr";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.raqqngr";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.nccyvpnoyrsbe";a:2:{i:0;R:27393;i:1;R:9;}s:68:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.vapyhqrvaybnaplpyrpbhagre";a:2:{i:0;R:27393;i:1;R:9;}s:64:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.pnyphyngrybnanzbhagnf";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.zvaybnanzbhag";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.znkybnanzbhag";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.qrsnhygnzbhag";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.vagrerfgengr";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.vagrerfgengrglcr";a:2:{i:0;R:27393;i:1;R:9;}s:58:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.znkvagrerfgengr";a:2:{i:0;R:27393;i:1;R:9;}s:58:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.zvavagrerfgengr";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.qrsnhygvagrerfgengr";a:2:{i:0;R:27393;i:1;R:9;}s:60:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.ercnlzragfpurqhyr";a:2:{i:0;R:27393;i:1;R:9;}s:66:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.serdhraplbsvafgnyyzragf";a:2:{i:0;R:27393;i:1;R:9;}s:68:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.pnyphyngrbsvafgnyyzragfnf";a:2:{i:0;R:27393;i:1;R:9;}s:60:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.zvabsvafgnyyzragf";a:2:{i:0;R:27393;i:1;R:9;}s:60:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.znkbsvafgnyyzragf";a:2:{i:0;R:27393;i:1;R:9;}s:64:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.qrsnhygbsvafgnyyzragf";a:2:{i:0;R:27393;i:1;R:9;}s:58:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.tenprcrevbqglcr";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.tenprcrevbqqhengvba";a:2:{i:0;R:27393;i:1;R:9;}s:47:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.srrf";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.srrfglcrf";a:2:{i:0;R:27393;i:1;R:9;}s:53:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.nppbhagvat";a:2:{i:0;R:27393;i:1;R:9;}s:57:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.fbheprfbsshaqf";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.cebqhpgtypbqr";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.vagrerfg";a:2:{i:0;R:27393;i:1;R:9;}s:52:"1230:znantrybnacebqhpgf.cerivrjybnacebqhpg.cevapvcny";a:2:{i:0;R:27393;i:1;R:9;}s:70:"1230:znantrfniatfcebqhpgf.cerivrjfnivatfcebqhpgf.nqqnarjfnivatfcebqhpg";a:2:{i:0;R:27393;i:1;R:9;}s:74:"1230:znantrfniatfcebqhpgf.cerivrjfnivatfcebqhpgf.fnivatfcebqhpgvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:70:"1230:znantrfniatfcebqhpgf.cerivrjfnivatfcebqhpgf.fnivatfcebqhpgqrgnvyf";a:2:{i:0;R:27393;i:1;R:9;}s:63:"1230:znantrfniatfcebqhpgf.cerivrjfnivatfcebqhpgf.glcrbsqrcbfvgf";a:2:{i:0;R:27393;i:1;R:9;}s:74:"1230:znantrfniatfcebqhpgf.cerivrjfnivatfcebqhpgf.znaqngbelnzbhagsbeqrcbfvg";a:2:{i:0;R:27393;i:1;R:9;}s:64:"1230:znantrfniatfcebqhpgf.cerivrjfnivatfcebqhpgf.nzbhagnccyvrfgb";a:2:{i:0;R:27393;i:1;R:9;}s:71:"1230:znantrfniatfcebqhpgf.cerivrjfnivatfcebqhpgf.znknzbhagcrejvguqenjny";a:2:{i:0;R:27393;i:1;R:9;}s:82:"1230:znantrfniatfcebqhpgf.cerivrjfnivatfcebqhpgf.onynaprhfrqsbevagrerfgpnyphyngvba";a:2:{i:0;R:27393;i:1;R:9;}s:81:"1230:znantrfniatfcebqhpgf.cerivrjfnivatfcebqhpgf.gvzrcrevbqsbevagrerfgpnyphyngvba";a:2:{i:0;R:27393;i:1;R:9;}s:85:"1230:znantrfniatfcebqhpgf.cerivrjfnivatfcebqhpgf.serdhraplbsvagrerfgcbfgvatgbnppbhagf";a:2:{i:0;R:27393;i:1;R:9;}s:93:"1230:znantrfniatfcebqhpgf.cerivrjfnivatfcebqhpgf.zvavzhzonynaprerdhverqsbevagrerfgpnyphyngvba";a:2:{i:0;R:27393;i:1;R:9;}s:66:"1230:znantrfniatfcebqhpgf.cerivrjfnivatfcebqhpgf.typbqrsbeqrcbfvgf";a:2:{i:0;R:27393;i:1;R:9;}s:66:"1230:znantrfniatfcebqhpgf.cerivrjfnivatfcebqhpgf.typbqrsbevagrerfg";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:znantrfniatfcebqhpgf.cerivrjfnivatfcebqhpgf.ivrjpunatrybt";a:2:{i:0;R:27393;i:1;R:9;}s:68:"1230:znantrfniatfcebqhpgf.cerivrjfnivatfcebqhpgf.cebqhpgvafgnapranzr";a:2:{i:0;R:27393;i:1;R:9;}s:58:"1230:znantrfniatfcebqhpgf.cerivrjfnivatfcebqhpgf.fubeganzr";a:2:{i:0;R:27393;i:1;R:9;}s:60:"1230:znantrfniatfcebqhpgf.cerivrjfnivatfcebqhpgf.qrfpevcgvba";a:2:{i:0;R:27393;i:1;R:9;}s:64:"1230:znantrfniatfcebqhpgf.cerivrjfnivatfcebqhpgf.cebqhpgpngrtbel";a:2:{i:0;R:27393;i:1;R:9;}s:58:"1230:znantrfniatfcebqhpgf.cerivrjfnivatfcebqhpgf.fgnegqngr";a:2:{i:0;R:27393;i:1;R:9;}s:56:"1230:znantrfniatfcebqhpgf.cerivrjfnivatfcebqhpgf.raqqngr";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:znantrfniatfcebqhpgf.cerivrjfnivatfcebqhpgf.nccyvpnoyrsbe";a:2:{i:0;R:27393;i:1;R:9;}s:61:"1230:znantrfniatfcebqhpgf.cerivrjfnivatfcebqhpgf.vagrerfgengr";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:znantrfniatfcebqhpgf.cerivrjfnivatfcebqhpgf.nppbhagvat";a:2:{i:0;R:27393;i:1;R:9;}s:90:"1230:znantrfniatfcebqhpgf.cerivrjfnivatfcebqhpgf.gnetrgrqqrcbfvgfnaqjvguqenjnyerfgevpgvbaf";a:2:{i:0;R:27393;i:1;R:9;}s:20:"1230:nqzva.hcybnqccv";a:2:{i:0;R:27393;i:1;R:9;}s:60:"1230:znantrercbegf.ivrjnqzvaqbpf.ivrjnqzvavfgengvirqbphzragf";a:2:{i:0;R:27393;i:1;R:9;}s:100:"1230:znantrercbegf.ivrjnqzvaqbpf.orybjvfnyvfgbsnqzvaqbpf.gbrqvgpyvpxbarqvg.gbqbjaybnqpyvpxbaqbjaybnq";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:znantrercbegf.ivrjnqzvaqbpf.hcybnqnarjnqzvaqbp";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:znantrercbegf.ivrjnqzvaqbpf.qbjaybnqnqzvaqbphzragf";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:znantrercbegf.qrsvarnqzvaqbpf.hcybnqnqzvaqbpf";a:2:{i:0;R:27393;i:1;R:9;}s:54:"1230:znantrercbegf.qrsvarnqzvaqbpf.qbphzragvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:znantrercbegf.qrsvarnqzvaqbpf.nqzvaqbphzragqrgnvyf";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:znantrercbegf.qrsvarnqzvaqbpf.nqzvavfgengvirqbphzraggvgyr";a:2:{i:0;R:27393;i:1;R:9;}s:46:"1230:znantrercbegf.qrsvarnqzvaqbpf.nppbhagglcr";a:2:{i:0;R:27393;i:1;R:9;}s:46:"1230:znantrercbegf.qrsvarnqzvaqbpf.ybnanppbhag";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:znantrercbegf.qrsvarnqzvaqbpf.fnivatfnppbhag";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:znantrercbegf.qrsvarnqzvaqbpf.fubjjurafgnghf";a:2:{i:0;R:27393;i:1;R:9;}s:63:"1230:znantrercbegf.qrsvarnqzvaqbpf.fryrpgnqzvavfgengvirqbphzrag";a:2:{i:0;R:27393;i:1;R:9;}s:58:"1230:znantrercbegf.qrsvarnqzvaqbpf.bcgvbaf.craqvatnccebiny";a:2:{i:0;R:27393;i:1;R:9;}s:54:"1230:znantrercbegf.qrsvarnqzvaqbpf.bcgvbaf.nccnccebirq";a:2:{i:0;R:27393;i:1;R:9;}s:61:"1230:znantrercbegf.qrsvarnqzvaqbpf.bcgvbaf.npgvirtbbqfgnaqvat";a:2:{i:0;R:27393;i:1;R:9;}s:60:"1230:znantrercbegf.qrsvarnqzvaqbpf.bcgvbaf.npgvironqfgnaqvat";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:znantrercbegf.qrsvarnqzvaqbpf.bcgvbaf.pybfrqboyvtngvbazrg";a:2:{i:0;R:27393;i:1;R:9;}s:59:"1230:znantrercbegf.qrsvarnqzvaqbpf.bcgvbaf.pybfrqjevggrabss";a:2:{i:0;R:27393;i:1;R:9;}s:60:"1230:znantrercbegf.qrsvarnqzvaqbpf.bcgvbaf.pybfrqerfpurqhyrq";a:2:{i:0;R:27393;i:1;R:9;}s:62:"1230:znantrercbegf.qrsvarnqzvaqbpf.bcgvbaf.phfgzenppbhagnpgvir";a:2:{i:0;R:27393;i:1;R:9;}s:64:"1230:znantrercbegf.qrsvarnqzvaqbpf.bcgvbaf.phfgzenppbhagvanpgvir";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:znantrercbegf.qrsvarnqzvaqbpf.bcgvbaf.npgvir";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:znantrercbegf.qrsvarnqzvaqbpf.bcgvbaf.pybfrq";a:2:{i:0;R:27393;i:1;R:9;}s:51:"1230:znantrercbegf.qrsvarnqzvaqbpf.bcgvbaf.vanpgvir";a:2:{i:0;R:27393;i:1;R:9;}s:66:"1230:znantrercbegf.qrsvarnqzvaqbpf.cerivrj.rqvgnqzvaqbpvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:55:"1230:pyvpxbarqvg/qryrgrgbznxrpunatrfgbnercbegpngrtbelbe";a:2:{i:0;R:27393;i:1;R:9;}s:26:"1230:nqqnarjercbegpngrtbel";a:2:{i:0;R:27393;i:1;R:9;}s:25:"1230:ercbegf.pngrtbelanzr";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:rqvgercbegpngrtbel.pngrtbelvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:48:"1230:rqvgercbegpngrtbel.ragrepngrtbelvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:42:"1230:rqvgercbegpngrtbel.vasbezngvbazrffntr";a:2:{i:0;R:27393;i:1;R:9;}s:39:"1230:rqvgercbegpngrtbel.pngrtbelqrgnvyf";a:2:{i:0;R:27393;i:1;R:9;}s:36:"1230:rqvgercbegpngrtbel.pngrtbelanzr";a:2:{i:0;R:27393;i:1;R:9;}s:47:"1230:rqvgercbegpngrtbel.rqvgpngrtbelvasbezngvba";a:2:{i:0;R:27393;i:1;R:9;}s:23:"1230:erpbeqperngvbaqngr";a:2:{i:0;R:27393;i:1;R:9;}s:9:"1230:qngr";a:2:{i:0;R:27393;i:1;R:9;}s:10:"1230:svryq";a:2:{i:0;R:27393;i:1;R:9;}s:13:"1230:byqinyhr";a:2:{i:0;R:27393;i:1;R:9;}s:13:"1230:arjinyhr";a:2:{i:0;R:27393;i:1;R:9;}s:22:"1230:onpxgbqrgnvyfcntr";a:2:{i:0;R:27393;i:1;R:9;}s:14:"1230:punatrybt";a:2:{i:0;R:27393;i:1;R:9;}s:25:"1230:ivrjflfgrzhfref.arkg";a:2:{i:0;R:27393;i:1;R:9;}s:29:"1230:ivrjflfgrzhfref.cerivbhf";a:2:{i:0;R:27393;i:1;R:9;}s:12:"1230:erfhygf";a:2:{i:0;R:27393;i:1;R:9;}s:19:"1230:qngrgvzrhcqngr";a:2:{i:0;R:27393;i:1;R:9;}s:19:"1230:hcqngvatgbgvzr";a:2:{i:0;R:27393;i:1;R:9;}s:27:"1230:phfgbzcebcregvrfhcqngr";a:2:{i:0;R:27393;i:1;R:9;}s:19:"1230:hcqngvatybpnyr";a:2:{i:0;R:27393;i:1;R:9;}s:28:"1230:hcqngvatnppbhagvatehyrf";a:2:{i:0;R:27393;i:1;R:9;}s:19:"1230:hcqngvatvzcbeg";a:2:{i:0;R:27393;i:1;R:9;}s:32:"1230:hcqngvatsvfpnypnyraqneehyrf";a:2:{i:0;R:27393;i:1;R:9;}s:24:"1230:hcqngvatpyvragehyrf";a:2:{i:0;R:27393;i:1;R:9;}s:24:"1230:hcqngvatcebprffsybj";a:2:{i:0;R:27393;i:1;R:9;}s:11:"1230:reebef";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:phfgbzvmrgrkgnqq.nqqzrffntr.bevtvanygrkg";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:phfgbzvmrgrkgnqq.nqqzrffntr.phfgbzgrkg";a:2:{i:0;R:27393;i:1;R:9;}s:27:"1230:phfgbzvmrgrkgnqq.gvgyr";a:2:{i:0;R:27393;i:1;R:9;}s:34:"1230:phfgbzvmrgrkgnqq.vafgehpgvbaf";a:2:{i:0;R:27393;i:1;R:9;}s:33:"1230:phfgbzvmrgrkgnqqrqvg.rknzcyr";a:2:{i:0;R:27393;i:1;R:9;}s:28:"1230:phfgbzvmrgrkgrqvg.gvgyr";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:phfgbzvmrgrkgrqvg.vafgehpgvbaf";a:2:{i:0;R:27393;i:1;R:9;}s:41:"1230:phfgbzvmrgrkgivrj.phfgbzvmrqgrkgyvfg";a:2:{i:0;R:27393;i:1;R:9;}s:35:"1230:phfgbzvmrgrkgivrj.vafgehpgvbaf";a:2:{i:0;R:27393;i:1;R:9;}s:50:"1230:abgrzcgl.phfgbzvmrqgrkgfryrpgsbezorna.zrffntr";a:2:{i:0;R:27393;i:1;R:9;}s:49:"1230:abgrzcgl.phfgbzvmrqgrkgsbezorna.bevtvanygrkg";a:2:{i:0;R:27393;i:1;R:9;}s:47:"1230:abgrzcgl.phfgbzvmrqgrkgsbezorna.phfgbzgrkg";a:2:{i:0;R:27393;i:1;R:9;}s:45:"1230:fvmr.phfgbzvmrqgrkgsbezorna.bevtvanygrkg";a:2:{i:0;R:27393;i:1;R:9;}s:43:"1230:fvmr.phfgbzvmrqgrkgsbezorna.phfgbzgrkg";a:2:{i:0;R:27393;i:1;R:9;}s:37:"1230:birecnlzragf.pyrne.vainyvq.inyhr";a:2:{i:0;R:27393;i:1;R:9;}s:24:"1230:cranygl.rqvgcranygl";a:2:{i:0;R:27393;i:1;R:9;}s:26:"1230:cranygl.ivrjcranygvrf";a:2:{i:0;R:27393;i:1;R:9;}s:24:"1230:pf-phfgbzrefrnepu.n";a:2:{i:0;s:12:"out-mifos-cs";i:1;R:9;}s:30:"1230:pf-phfgbzrefrnepu.nppbhag";a:2:{i:0;R:28964;i:1;R:9;}s:26:"1230:pf-phfgbzrefrnepu.nyy";a:2:{i:0;R:28964;i:1;R:9;}s:34:"1230:pf-phfgbzrefrnepu.nyyoenapurf";a:2:{i:0;R:28964;i:1;R:9;}s:32:"1230:pf-phfgbzrefrnepu.ninvynoyr";a:2:{i:0;R:28964;i:1;R:9;}s:29:"1230:pf-phfgbzrefrnepu.oenapu";a:2:{i:0;R:28964;i:1;R:9;}s:27:"1230:pf-phfgbzrefrnepu.rqvg";a:2:{i:0;R:28964;i:1;R:9;}s:28:"1230:pf-phfgbzrefrnepu.ragre";a:2:{i:0;R:28964;i:1;R:9;}s:30:"1230:pf-phfgbzrefrnepu.ynfgybt";a:2:{i:0;R:28964;i:1;R:9;}s:32:"1230:pf-phfgbzrefrnepu.yvaxfyrsg";a:2:{i:0;R:28964;i:1;R:9;}s:34:"1230:pf-phfgbzrefrnepu.ybnabssvpre";a:2:{i:0;R:28964;i:1;R:9;}s:35:"1230:pf-phfgbzrefrnepu.ybnabssvpref";a:2:{i:0;R:28964;i:1;R:9;}s:31:"1230:pf-phfgbzrefrnepu.anivtngr";a:2:{i:0;R:28964;i:1;R:9;}s:25:"1230:pf-phfgbzrefrnepu.ab";a:2:{i:0;R:28964;i:1;R:9;}s:46:"1230:pf-phfgbzrefrnepu.abragvglninvynoyrcersvk";a:2:{i:0;R:28964;i:1;R:9;}s:46:"1230:pf-phfgbzrefrnepu.abragvglninvynoyrfhssvk";a:2:{i:0;R:28964;i:1;R:9;}s:25:"1230:pf-phfgbzrefrnepu.be";a:2:{i:0;R:28964;i:1;R:9;}s:34:"1230:pf-phfgbzrefrnepu.dhvpxylsvaq";a:2:{i:0;R:28964;i:1;R:9;}s:45:"1230:pf-phfgbzrefrnepu.erivrjrqvgvafgehpgvba1";a:2:{i:0;R:28964;i:1;R:9;}s:45:"1230:pf-phfgbzrefrnepu.erivrjrqvgvafgehpgvba2";a:2:{i:0;R:28964;i:1;R:9;}s:24:"1230:pf-phfgbzrefrnepu.f";a:2:{i:0;R:28964;i:1;R:9;}s:29:"1230:pf-phfgbzrefrnepu.frnepu";a:2:{i:0;R:28964;i:1;R:9;}s:32:"1230:pf-phfgbzrefrnepu.frnepusbe";a:2:{i:0;R:28964;i:1;R:9;}s:34:"1230:pf-phfgbzrefrnepu.frnepuorybj";a:2:{i:0;R:28964;i:1;R:9;}s:38:"1230:pf-phfgbzrefrnepu.frnepubaguryrsg";a:2:{i:0;R:28964;i:1;R:9;}s:31:"1230:pf-phfgbzrefrnepu.frnepuol";a:2:{i:0;R:28964;i:1;R:9;}s:41:"1230:pf-phfgbzrefrnepu.frnepuvafgehpgvba1";a:2:{i:0;R:28964;i:1;R:9;}s:38:"1230:pf-phfgbzrefrnepu.frnepuanzrflfvq";a:2:{i:0;R:28964;i:1;R:9;}s:35:"1230:pf-phfgbzrefrnepu.frnepufgevat";a:2:{i:0;R:28964;i:1;R:9;}s:29:"1230:pf-phfgbzrefrnepu.fryrpg";a:2:{i:0;R:28964;i:1;R:9;}s:40:"1230:pf-phfgbzrefrnepu.fryrpgybnabssvpre";a:2:{i:0;R:28964;i:1;R:9;}s:32:"1230:pf-phfgbzrefrnepu.gnofnggbc";a:2:{i:0;R:28964;i:1;R:9;}s:31:"1230:pf-phfgbzrefrnepu.gberivrj";a:2:{i:0;R:28964;i:1;R:9;}s:31:"1230:pf-phfgbzrefrnepu.gbfrnepu";a:2:{i:0;R:28964;i:1;R:9;}s:30:"1230:pf-phfgbzrefrnepu.jrypbzr";a:2:{i:0;R:28964;i:1;R:9;}s:29:"1230:pf-phfgbzrefrnepu.lbhpna";a:2:{i:0;R:28964;i:1;R:9;}s:39:"1230:pf-phfgbzrefrnepu.hcpbzvatzrrgvatf";a:2:{i:0;R:28964;i:1;R:9;}s:34:"1230:pf-reebe.npgvivgl.abg.nyybjrq";a:2:{i:0;R:28964;i:1;R:9;}s:21:"1230:pf-reebef.sbbgre";a:2:{i:0;R:28964;i:1;R:9;}s:21:"1230:pf-reebef.urnqre";a:2:{i:0;R:28964;i:1;R:9;}s:26:"1230:pf-reebef.vqznaqngbel";a:2:{i:0;R:28964;i:1;R:9;}s:28:"1230:pf-reebef.anzrznaqngbel";a:2:{i:0;R:28964;i:1;R:9;}s:29:"1230:pf-reebef.abfrnepufgevat";a:2:{i:0;R:28964;i:1;R:9;}s:21:"1230:pf-reebef.cersvk";a:2:{i:0;R:28964;i:1;R:9;}s:21:"1230:pf-reebef.fhssvk";a:2:{i:0;R:28964;i:1;R:9;}s:25:"1230:pfr-ohyxragel.oenapu";a:2:{i:0;s:13:"out-mifos-cse";i:1;R:9;}s:25:"1230:pfr-ohyxragel.pragre";a:2:{i:0;R:29010;i:1;R:9;}s:31:"1230:pfr-ohyxragel.nppbyyrpgvba";a:2:{i:0;R:29010;i:1;R:9;}s:37:"1230:pfr-ohyxragel.nppbhagtebhcpragre";a:2:{i:0;R:29010;i:1;R:9;}s:29:"1230:pfr-ohyxragel.nggraqnapr";a:2:{i:0;R:29010;i:1;R:9;}s:23:"1230:pfr-ohyxragel.ngga";a:2:{i:0;R:29010;i:1;R:9;}s:28:"1230:pfr-ohyxragel.ohyxragel";a:2:{i:0;R:29010;i:1;R:9;}s:25:"1230:pfr-ohyxragel.pnapry";a:2:{i:0;R:29010;i:1;R:9;}s:28:"1230:pfr-ohyxragel.pyvpxpnap";a:2:{i:0;R:29010;i:1;R:9;}s:29:"1230:pfr-ohyxragel.pyvraganzr";a:2:{i:0;R:29010;i:1;R:9;}s:23:"1230:pfr-ohyxragel.pbag";a:2:{i:0;R:29010;i:1;R:9;}s:26:"1230:pfr-ohyxragel.qngnsbe";a:2:{i:0;R:29010;i:1;R:9;}s:29:"1230:pfr-ohyxragel.qngrbsgeka";a:2:{i:0;R:29010;i:1;R:9;}s:33:"1230:pfr-ohyxragel.qhrpbyyrpgvbaf";a:2:{i:0;R:29010;i:1;R:9;}s:34:"1230:pfr-ohyxragel.qhrpbyyrpgvbaf2";a:2:{i:0;R:29010;i:1;R:9;}s:26:"1230:pfr-ohyxragel.qhrpbyy";a:2:{i:0;R:29010;i:1;R:9;}s:27:"1230:pfr-ohyxragel.rqvgqngn";a:2:{i:0;R:29010;i:1;R:9;}s:32:"1230:pfr-ohyxragel.ragqngnpyvcer";a:2:{i:0;R:29010;i:1;R:9;}s:37:"1230:pfr-ohyxragel.ragrepbyyfurrgqngn";a:2:{i:0;R:29010;i:1;R:9;}s:28:"1230:pfr-ohyxragel.ragreqngn";a:2:{i:0;R:29010;i:1;R:9;}s:28:"1230:pfr-ohyxragel.ragrefhpp";a:2:{i:0;R:29010;i:1;R:9;}s:27:"1230:pfr-ohyxragel.unfragre";a:2:{i:0;R:29010;i:1;R:9;}s:36:"1230:pfr-ohyxragel.vffhrfjvguqenjnyf";a:2:{i:0;R:29010;i:1;R:9;}s:26:"1230:pfr-ohyxragel.vffjvgu";a:2:{i:0;R:29010;i:1;R:9;}s:36:"1230:pfr-ohyxragel.ybnaqvfohefrzragf";a:2:{i:0;R:29010;i:1;R:9;}s:33:"1230:pfr-ohyxragel.ybnaercnlzragf";a:2:{i:0;R:29010;i:1;R:9;}s:30:"1230:pfr-ohyxragel.ybnabssvpre";a:2:{i:0;R:29010;i:1;R:9;}s:28:"1230:pfr-ohyxragel.znaqngbel";a:2:{i:0;R:29010;i:1;R:9;}s:30:"1230:pfr-ohyxragel.zrrgvatqngr";a:2:{i:0;R:29010;i:1;R:9;}s:26:"1230:pfr-ohyxragel.argpnfu";a:2:{i:0;R:29010;i:1;R:9;}s:35:"1230:pfr-ohyxragel.bgurepbyyrpgvbaf";a:2:{i:0;R:29010;i:1;R:9;}s:26:"1230:pfr-ohyxragel.cyfabgr";a:2:{i:0;R:29010;i:1;R:9;}s:27:"1230:pfr-ohyxragel.czagglcr";a:2:{i:0;R:29010;i:1;R:9;}s:33:"1230:pfr-ohyxragel.ceriqngnpyvfho";a:2:{i:0;R:29010;i:1;R:9;}s:26:"1230:pfr-ohyxragel.cerivrj";a:2:{i:0;R:29010;i:1;R:9;}s:27:"1230:pfr-ohyxragel.epcgqngr";a:2:{i:0;R:29010;i:1;R:9;}s:25:"1230:pfr-ohyxragel.epcgvq";a:2:{i:0;R:29010;i:1;R:9;}s:26:"1230:pfr-ohyxragel.eriafho";a:2:{i:0;R:29010;i:1;R:9;}s:33:"1230:pfr-ohyxragel.fnivatfqrcbfvg";a:2:{i:0;R:29010;i:1;R:9;}s:36:"1230:pfr-ohyxragel.fnivatfjvguqenjny";a:2:{i:0;R:29010;i:1;R:9;}s:25:"1230:pfr-ohyxragel.fryrpg";a:2:{i:0;R:29010;i:1;R:9;}s:39:"1230:pfr-ohyxragel.fryrpgbssvprsebzyvfg";a:2:{i:0;R:29010;i:1;R:9;}s:25:"1230:pfr-ohyxragel.fhozvg";a:2:{i:0;R:29010;i:1;R:9;}s:24:"1230:pfr-ohyxragel.gbgny";a:2:{i:0;R:29010;i:1;R:9;}s:35:"1230:pfr-ohyxragel.gbgnypbyyrpgvbaf";a:2:{i:0;R:29010;i:1;R:9;}s:35:"1230:pfr-ohyxragel.gbgnytebhcpragre";a:2:{i:0;R:29010;i:1;R:9;}s:41:"1230:pfr-ohyxragel.gbgnyvffhrfjvguqenjnyf";a:2:{i:0;R:29010;i:1;R:9;}s:27:"1230:pfr-ohyxragel.gekaqngr";a:2:{i:0;R:29010;i:1;R:9;}s:30:"1230:pfr-ohyxragel.jvguqenjnyf";a:2:{i:0;R:29010;i:1;R:9;}s:30:"1230:pfr-reebef.vainyvqgkaqngr";a:2:{i:0;R:29010;i:1;R:9;}s:48:"1230:pfr-reebef.vainyvqgkaqngrzbagunyernqlpybfrq";a:2:{i:0;R:29010;i:1;R:9;}s:35:"1230:pfr-reebe.npgvivgl.abg.nyybjrq";a:2:{i:0;R:29010;i:1;R:9;}s:34:"1230:pfr-reebef.vainyvqerprvcgqngr";a:2:{i:0;R:29010;i:1;R:9;}s:29:"1230:pfr-reebef.vainyvqnzbhag";a:2:{i:0;R:29010;i:1;R:9;}s:35:"1230:pfr-reebef.vainyvqcercnlnzbhag";a:2:{i:0;R:29010;i:1;R:9;}s:36:"1230:pfr-reebef.vainyvqnppbyyrpgvbaf";a:2:{i:0;R:29010;i:1;R:9;}s:34:"1230:pfr-reebef.vainyvqnzbhaginyhr";a:2:{i:0;R:29010;i:1;R:9;}s:27:"1230:pfr-reebef.vainyvqqngr";a:2:{i:0;R:29010;i:1;R:9;}s:30:"1230:pfr-reebef.znaqngbelragre";a:2:{i:0;R:29010;i:1;R:9;}s:31:"1230:pfr-reebef.znaqngbelfryrpg";a:2:{i:0;R:29010;i:1;R:9;}s:27:"1230:pfr-reebef.zrrgvatqngr";a:2:{i:0;R:29010;i:1;R:9;}s:22:"1230:pfr-reebef.hcqngr";a:2:{i:0;R:29010;i:1;R:9;}s:24:"1230:pfr-reebef.qngnonfr";a:2:{i:0;R:29010;i:1;R:9;}s:49:"1230:pfr-rkprcgvba.senzrjbex.cntrrkcverqrkprcgvba";a:2:{i:0;R:29010;i:1;R:9;}s:15:"1230:phv-nzbhag";a:2:{i:0;R:13;i:1;R:9;}s:38:"1230:phv-phfgbzre.nppbhagfgngrzragnfbs";a:2:{i:0;R:13;i:1;R:9;}s:39:"1230:phv-phfgbzre.npgvirnppbhagfcerfrag";a:2:{i:0;R:13;i:1;R:9;}s:28:"1230:phv-phfgbzre.nqqarjabgr";a:2:{i:0;R:13;i:1;R:9;}s:24:"1230:phv-phfgbzre.nzbhag";a:2:{i:0;R:13;i:1;R:9;}s:44:"1230:phv-phfgbzre.pragrefgngrpunatrrkprcgvba";a:2:{i:0;R:13;i:1;R:9;}s:30:"1230:phv-phfgbzre.purpxyvfgzft";a:2:{i:0;R:13;i:1;R:9;}s:30:"1230:phv-phfgbzre.pyvpxpnapry1";a:2:{i:0;R:13;i:1;R:9;}s:30:"1230:phv-phfgbzre.pyvpxpnapry2";a:2:{i:0;R:13;i:1;R:9;}s:31:"1230:phv-phfgbzre.pyvpxpbagvahr";a:2:{i:0;R:13;i:1;R:9;}s:30:"1230:phv-phfgbzre.pyvpxcerivrj";a:2:{i:0;R:13;i:1;R:9;}s:29:"1230:phv-phfgbzre.pyvpxfhozvg";a:2:{i:0;R:13;i:1;R:9;}s:37:"1230:phv-phfgbzre.pbasvezfgnghfpunatr";a:2:{i:0;R:13;i:1;R:9;}s:29:"1230:phv-phfgbzre.qngrbsovegu";a:2:{i:0;R:13;i:1;R:9;}s:22:"1230:phv-phfgbzre.rqvg";a:2:{i:0;R:13;i:1;R:9;}s:27:"1230:phv-phfgbzre.rqvgynory";a:2:{i:0;R:13;i:1;R:9;}s:28:"1230:phv-phfgbzre.rqvgfgnghf";a:2:{i:0;R:13;i:1;R:9;}s:28:"1230:phv-phfgbzre.ragrenabgr";a:2:{i:0;R:13;i:1;R:9;}s:27:"1230:phv-phfgbzre.svefganzr";a:2:{i:0;R:13;i:1;R:9;}s:24:"1230:phv-phfgbzre.traqre";a:2:{i:0;R:13;i:1;R:9;}s:38:"1230:phv-phfgbzre.uvfgbel.vagrerfgcnvq";a:2:{i:0;R:13;i:1;R:9;}s:37:"1230:phv-phfgbzre.vapbzcyrgrpurpxyvfg";a:2:{i:0;R:13;i:1;R:9;}s:26:"1230:phv-phfgbzre.ynfganzr";a:2:{i:0;R:13;i:1;R:9;}s:37:"1230:phv-phfgbzre.ybnabssvprevanpgvir";a:2:{i:0;R:13;i:1;R:9;}s:27:"1230:phv-phfgbzre.arjfgnghf";a:2:{i:0;R:13;i:1;R:9;}s:29:"1230:phv-phfgbzre.abpurpxyvfg";a:2:{i:0;R:13;i:1;R:9;}s:34:"1230:phv-phfgbzre.absyntfninvynoyr";a:2:{i:0;R:13;i:1;R:9;}s:27:"1230:phv-phfgbzre.abgrynory";a:2:{i:0;R:13;i:1;R:9;}s:27:"1230:phv-phfgbzre.byqfgnghf";a:2:{i:0;R:13;i:1;R:9;}s:29:"1230:phv-phfgbzre.cerivrjabgr";a:2:{i:0;R:13;i:1;R:9;}s:28:"1230:phv-phfgbzre.erivrjgrkg";a:2:{i:0;R:13;i:1;R:9;}s:28:"1230:phv-phfgbzre.fnyhgngvba";a:2:{i:0;R:13;i:1;R:9;}s:37:"1230:phv-phfgbzre.fryrpgrkcynvangvba1";a:2:{i:0;R:13;i:1;R:9;}s:37:"1230:phv-phfgbzre.fryrpgrkcynvangvba2";a:2:{i:0;R:13;i:1;R:9;}s:30:"1230:phv-phfgbzre.fryrpgfgnghf";a:2:{i:0;R:13;i:1;R:9;}s:33:"1230:phv-phfgbzre.fcbhfrsvefganzr";a:2:{i:0;R:13;i:1;R:9;}s:32:"1230:phv-phfgbzre.fcbhfrynfganzr";a:2:{i:0;R:13;i:1;R:9;}s:28:"1230:phv-phfgbzre.fcbhfrglcr";a:2:{i:0;R:13;i:1;R:9;}s:38:"1230:phv-phfgbzre.fgngrpunatrrkprcgvba";a:2:{i:0;R:13;i:1;R:9;}s:37:"1230:phv-phfgbzre.fgnghfabgrferdhverq";a:2:{i:0;R:13;i:1;R:9;}s:37:"1230:phv-phfgbzre.nqqvgvbanysrrnzbhag";a:2:{i:0;R:13;i:1;R:9;}s:32:"1230:phv-phfgbzre.nqqabgrurnqvat";a:2:{i:0;R:13;i:1;R:9;}s:35:"1230:phv-phfgbzre.nqwhfgzrag_qrgnvy";a:2:{i:0;R:13;i:1;R:9;}s:32:"1230:phv-phfgbzre.nqzvasrrnzbhag";a:2:{i:0;R:13;i:1;R:9;}s:29:"1230:phv-phfgbzre.nyyoenapurf";a:2:{i:0;R:13;i:1;R:9;}s:36:"1230:phv-phfgbzre.nzag_gbor_nqwhfgrq";a:2:{i:0;R:13;i:1;R:9;}s:31:"1230:phv-phfgbzre.nccyl_punetrf";a:2:{i:0;R:13;i:1;R:9;}s:33:"1230:phv-phfgbzre.nccylnqwhfgzrag";a:2:{i:0;R:13;i:1;R:9;}s:38:"1230:phv-phfgbzre.oga_erivrjnqwhfgzrag";a:2:{i:0;R:13;i:1;R:9;}s:24:"1230:phv-phfgbzre.pnapry";a:2:{i:0;R:13;i:1;R:9;}s:30:"1230:phv-phfgbzre.punatrfgnghf";a:2:{i:0;R:13;i:1;R:9;}s:38:"1230:phv-phfgbzre.pux_erireg_ynfg_czag";a:2:{i:0;R:13;i:1;R:9;}s:31:"1230:phv-phfgbzre.pheeragfgnghf";a:2:{i:0;R:13;i:1;R:9;}s:22:"1230:phv-phfgbzre.synt";a:2:{i:0;R:13;i:1;R:9;}s:21:"1230:phv-phfgbzre.sbe";a:2:{i:0;R:13;i:1;R:9;}s:20:"1230:phv-phfgbzre.va";a:2:{i:0;R:13;i:1;R:9;}s:27:"1230:phv-phfgbzre.ynfg_czag";a:2:{i:0;R:13;i:1;R:9;}s:25:"1230:phv-phfgbzre.zvfpsrr";a:2:{i:0;R:13;i:1;R:9;}s:29:"1230:phv-phfgbzre.zvfpcranygl";a:2:{i:0;R:13;i:1;R:9;}s:35:"1230:phv-phfgbzre.aberfhygfsbhaqsbe";a:2:{i:0;R:13;i:1;R:9;}s:22:"1230:phv-phfgbzre.abgr";a:2:{i:0;R:13;i:1;R:9;}s:25:"1230:phv-phfgbzre.cerivrj";a:2:{i:0;R:13;i:1;R:9;}s:28:"1230:phv-phfgbzre.erfhygfsbe";a:2:{i:0;R:13;i:1;R:9;}s:34:"1230:phv-phfgbzre.erivrjnqwhfgzrag";a:2:{i:0;R:13;i:1;R:9;}s:41:"1230:phv-phfgbzre.erivrjnqwhfgzrag_qrgnvy";a:2:{i:0;R:13;i:1;R:9;}s:24:"1230:phv-phfgbzre.fgnghf";a:2:{i:0;R:13;i:1;R:9;}s:13:"1230:phv-qngr";a:2:{i:0;R:13;i:1;R:9;}s:20:"1230:phv-qrfpevcgvba";a:2:{i:0;R:13;i:1;R:9;}s:29:"1230:phv-tebhcfgnghfrkprcgvba";a:2:{i:0;R:13;i:1;R:9;}s:40:"1230:phv-ybnabssvpreabgnffvtarqrkprcgvba";a:2:{i:0;R:13;i:1;R:9;}s:17:"1230:phv-cbfgrqol";a:2:{i:0;R:13;i:1;R:9;}s:32:"1230:phv-fgnghferdhverqrkprcgvba";a:2:{i:0;R:13;i:1;R:9;}s:22:"1230:phv-ohggba.pnapry";a:2:{i:0;R:13;i:1;R:9;}s:23:"1230:phv-ohggba.cerivrj";a:2:{i:0;R:13;i:1;R:9;}s:22:"1230:phv-ohggba.fhozvg";a:2:{i:0;R:13;i:1;R:9;}s:35:"1230:phv-reebe.npgvivgl.abg.nyybjrq";a:2:{i:0;R:13;i:1;R:9;}s:31:"1230:phv-reebe.phfgbzreabgsbhaq";a:2:{i:0;R:13;i:1;R:9;}s:34:"1230:phv-reebe.vapbzcyrgrpurpxyvfg";a:2:{i:0;R:13;i:1;R:9;}s:37:"1230:phv-reebe.fgnghfpunatrabgnyybjrq";a:2:{i:0;R:13;i:1;R:9;}s:31:"1230:phv-reebe.haxabjarkprcgvba";a:2:{i:0;R:13;i:1;R:9;}s:34:"1230:phv-reebe.irefvbaabqbabgzngpu";a:2:{i:0;R:13;i:1;R:9;}s:37:"1230:phv-reebef.pyvrag.tebhcpnapryyrq";a:2:{i:0;R:13;i:1;R:9;}s:36:"1230:phv-reebef.nqwhfgzragabgrgbbovt";a:2:{i:0;R:13;i:1;R:9;}s:30:"1230:phv-reebef.pragrevanpgvir";a:2:{i:0;R:13;i:1;R:9;}s:29:"1230:phv-reebef.qrpvznysbezng";a:2:{i:0;R:13;i:1;R:9;}s:19:"1230:phv-reebef.srr";a:2:{i:0;R:13;i:1;R:9;}s:23:"1230:phv-reebef.trarevp";a:2:{i:0;R:13;i:1;R:9;}s:43:"1230:phv-reebef.tebhcybnabssvpreabgnffvtarq";a:2:{i:0;R:13;i:1;R:9;}s:29:"1230:phv-reebef.vainyvqahzore";a:2:{i:0;R:13;i:1;R:9;}s:25:"1230:phv-reebef.znaqngbel";a:2:{i:0;R:13;i:1;R:9;}s:33:"1230:phv-reebef.znaqngbel_grkgobk";a:2:{i:0;R:13;i:1;R:9;}s:33:"1230:phv-reebef.znaqngbelpurpxobk";a:2:{i:0;R:13;i:1;R:9;}s:31:"1230:phv-reebef.znaqngbelfryrpg";a:2:{i:0;R:13;i:1;R:9;}s:33:"1230:phv-reebef.znaqngbelgrkgnern";a:2:{i:0;R:13;i:1;R:9;}s:25:"1230:phv-reebef.znkyratgu";a:2:{i:0;R:13;i:1;R:9;}s:34:"1230:phv-reebef.zrrgvatabgnffvtarq";a:2:{i:0;R:13;i:1;R:9;}s:33:"1230:phv-reebef.zhfgabgorartngvir";a:2:{i:0;R:13;i:1;R:9;}s:22:"1230:phv-reebef.cersvk";a:2:{i:0;R:13;i:1;R:9;}s:22:"1230:phv-reebef.fhssvk";a:2:{i:0;R:13;i:1;R:9;}s:61:"1230:phv-rkprcgvba.nppbhagf.nccyvpngvbarkprcgvba.pnaabgnqwhfg";a:2:{i:0;R:13;i:1;R:9;}s:75:"1230:phv-rkprcgvba.nppbhagf.nccyvpngvbarkprcgvba.svaqoltybonynppagrkprcgvba";a:2:{i:0;R:13;i:1;R:9;}s:67:"1230:phv-rkprcgvba.nppbhagf.nccyvpngvbarkprcgvba.mrebnzagnqwhfgzarg";a:2:{i:0;R:13;i:1;R:9;}s:50:"1230:phv-rkprcgvba.senzrjbex.qbhoyrfhozvgrkprcgvba";a:2:{i:0;R:13;i:1;R:9;}s:29:"1230:phv-ynory.zsvwbvavatqngr";a:2:{i:0;R:13;i:1;R:9;}s:31:"1230:phv-ynory.zftbanqqabgrcntr";a:2:{i:0;R:13;i:1;R:9;}s:26:"1230:phv-ynory.nqq_rqvg_uq";a:2:{i:0;R:13;i:1;R:9;}s:23:"1230:phv-ynory.nqqnabgr";a:2:{i:0;R:13;i:1;R:9;}s:22:"1230:phv-ynory.nqqabgr";a:2:{i:0;R:13;i:1;R:9;}s:23:"1230:phv-ynory.nzbhagbs";a:2:{i:0;R:13;i:1;R:9;}s:27:"1230:phv-ynory.nzbhagbsybna";a:2:{i:0;R:13;i:1;R:9;}s:32:"1230:phv-ynory.nzbhagbsybnaynory";a:2:{i:0;R:13;i:1;R:9;}s:31:"1230:phv-ynory.onpxgbqrgnvycntr";a:2:{i:0;R:13;i:1;R:9;}s:32:"1230:phv-ynory.onpxgbqrgnvyfcntr";a:2:{i:0;R:13;i:1;R:9;}s:20:"1230:phv-ynory.pbyba";a:2:{i:0;R:13;i:1;R:9;}s:33:"1230:phv-ynory.rqvguvfgbevpnyqngn";a:2:{i:0;R:13;i:1;R:9;}s:29:"1230:phv-ynory.uvfgbevpnyqngn";a:2:{i:0;R:13;i:1;R:9;}s:27:"1230:phv-ynory.vagrerfgcnvq";a:2:{i:0;R:13;i:1;R:9;}s:32:"1230:phv-ynory.vagrerfgcnvqynory";a:2:{i:0;R:13;i:1;R:9;}s:31:"1230:phv-ynory.ybnaplpyrpbhagre";a:2:{i:0;R:13;i:1;R:9;}s:30:"1230:phv-ynory.ybnaplpyrahzore";a:2:{i:0;R:13;i:1;R:9;}s:19:"1230:phv-ynory.abgr";a:2:{i:0;R:13;i:1;R:9;}s:22:"1230:phv-ynory.abgrzft";a:2:{i:0;R:13;i:1;R:9;}s:23:"1230:phv-ynory.abgrzft1";a:2:{i:0;R:13;i:1;R:9;}s:23:"1230:phv-ynory.abgrzft2";a:2:{i:0;R:13;i:1;R:9;}s:23:"1230:phv-ynory.abgrzft3";a:2:{i:0;R:13;i:1;R:9;}s:23:"1230:phv-ynory.abgrzft4";a:2:{i:0;R:13;i:1;R:9;}s:20:"1230:phv-ynory.abgrf";a:2:{i:0;R:13;i:1;R:9;}s:37:"1230:phv-ynory.ahzorebszvffrqcnlzragf";a:2:{i:0;R:13;i:1;R:9;}s:36:"1230:phv-ynory.cerivrjuvfgbevpnyqngn";a:2:{i:0;R:13;i:1;R:9;}s:26:"1230:phv-ynory.cerivrjabgr";a:2:{i:0;R:13;i:1;R:9;}s:26:"1230:phv-ynory.cebqhpganzr";a:2:{i:0;R:13;i:1;R:9;}s:31:"1230:phv-ynory.cebqhpganzrynory";a:2:{i:0;R:13;i:1;R:9;}s:30:"1230:phv-ynory.gbgnynzbhagcnvq";a:2:{i:0;R:13;i:1;R:9;}s:35:"1230:phv-ynory.gbgnynzbhagcnvqynory";a:2:{i:0;R:13;i:1;R:9;}s:36:"1230:phv-ynory.gbgnyahzorebscnlzragf";a:2:{i:0;R:13;i:1;R:9;}s:62:"1230:rkprcgvba-rkprcgvba.senzrjbex.pbafgnagfabgybnqrqrkprcgvba";a:2:{i:0;s:19:"out-mifos-exception";i:1;R:9;}s:81:"1230:rkprcgvba-rkprcgvba.senzrjbex.flfgrzrkprcgvba.inyhrbowrpgpbairefvbarkprcgvba";a:2:{i:0;R:29210;i:1;R:9;}s:74:"1230:rkprcgvba-rkprcgvba.inyvqngvba.ccv.zvffvatyvxryvubbqpunegebjrkprcgvba";a:2:{i:0;R:29210;i:1;R:9;}s:73:"1230:rkprcgvba-rkprcgvba.inyvqngvba.ccv.ccvyvxryvubbqnetfvainyvqrkprcgvba";a:2:{i:0;R:29210;i:1;R:9;}s:81:"1230:rkprcgvba-rkprcgvba.inyvqngvba.ccv.jebatahzorebsyvxryvubbqpunegebjfrkprcgvba";a:2:{i:0;R:29210;i:1;R:9;}s:42:"1230:srrf-srrf.perngrsrrfpnapryvafgehpgvba";a:2:{i:0;s:14:"out-mifos-fees";i:1;R:9;}s:41:"1230:srrf-srrf.perngrsrrfsvryqvafgehpgvba";a:2:{i:0;R:29216;i:1;R:9;}s:36:"1230:srrf-srrf.perngrsrrfvafgehpgvba";a:2:{i:0;R:29216;i:1;R:9;}s:27:"1230:srrf-srrf.qrsnhygsrrab";a:2:{i:0;R:29216;i:1;R:9;}s:28:"1230:srrf-srrf.qrsnhygsrrlrf";a:2:{i:0;R:29216;i:1;R:9;}s:21:"1230:srrf-srrf.typbqr";a:2:{i:0;R:29216;i:1;R:9;}s:37:"1230:srrf-srrf.cerivrjsrrfvafgehpgvba";a:2:{i:0;R:29216;i:1;R:9;}s:34:"1230:srrf-srrf.ivrjsrrfvafgehpgvba";a:2:{i:0;R:29216;i:1;R:9;}s:27:"1230:srrf-srrf.nppbhag.1001";a:2:{i:0;R:29216;i:1;R:9;}s:27:"1230:srrf-srrf.nppbhag.1002";a:2:{i:0;R:29216;i:1;R:9;}s:27:"1230:srrf-srrf.nppbhag.1003";a:2:{i:0;R:29216;i:1;R:9;}s:29:"1230:srrf-srrf.nppbhag.fryrpg";a:2:{i:0;R:29216;i:1;R:9;}s:29:"1230:srrf-srrf.nppbhagqvfcynl";a:2:{i:0;R:29216;i:1;R:9;}s:25:"1230:srrf-srrf.nppbhagvat";a:2:{i:0;R:29216;i:1;R:9;}s:20:"1230:srrf-srrf.nqzva";a:2:{i:0;R:29216;i:1;R:9;}s:25:"1230:srrf-srrf.nyypyvragf";a:2:{i:0;R:29216;i:1;R:9;}s:26:"1230:srrf-srrf.nyycebqhpgf";a:2:{i:0;R:29216;i:1;R:9;}s:21:"1230:srrf-srrf.nzbhag";a:2:{i:0;R:29216;i:1;R:9;}s:33:"1230:srrf-srrf.nzbhagpnyppbzcyrgr";a:2:{i:0;R:29216;i:1;R:9;}s:33:"1230:srrf-srrf.nzbhagpnyphyngrqnf";a:2:{i:0;R:29216;i:1;R:9;}s:29:"1230:srrf-srrf.pnyphyngrsrrnf";a:2:{i:0;R:29216;i:1;R:9;}s:21:"1230:srrf-srrf.pnapry";a:2:{i:0;R:29216;i:1;R:9;}s:22:"1230:srrf-srrf.pragref";a:2:{i:0;R:29216;i:1;R:9;}s:30:"1230:srrf-srrf.punatrnccyvrfgb";a:2:{i:0;R:29216;i:1;R:9;}s:41:"1230:srrf-srrf.pyvpxbaivrjbeqrsvararjsrrf";a:2:{i:0;R:29216;i:1;R:9;}s:25:"1230:srrf-srrf.pyvragsrrf";a:2:{i:0;R:29216;i:1;R:9;}s:23:"1230:srrf-srrf.pheerapl";a:2:{i:0;R:29216;i:1;R:9;}s:20:"1230:srrf-srrf.qnvyl";a:2:{i:0;R:29216;i:1;R:9;}s:31:"1230:srrf-srrf.qnvylvafgehpgvba";a:2:{i:0;R:29216;i:1;R:9;}s:18:"1230:srrf-srrf.qnl";a:2:{i:0;R:29216;i:1;R:9;}s:25:"1230:srrf-srrf.qnlzbaguyl";a:2:{i:0;R:29216;i:1;R:9;}s:26:"1230:srrf-srrf.qrsnhygsrrf";a:2:{i:0;R:29216;i:1;R:9;}s:27:"1230:srrf-srrf.qrsvararjsrr";a:2:{i:0;R:29216;i:1;R:9;}s:19:"1230:srrf-srrf.rqvg";a:2:{i:0;R:29216;i:1;R:9;}s:30:"1230:srrf-srrf.rqvgsrrfzrffntr";a:2:{i:0;R:29216;i:1;R:9;}s:33:"1230:srrf-srrf.rqvgsrrvasbezngvba";a:2:{i:0;R:29216;i:1;R:9;}s:26:"1230:srrf-srrf.ragrenzbhag";a:2:{i:0;R:29216;i:1;R:9;}s:34:"1230:srrf-srrf.ragresrrvasbezngvba";a:2:{i:0;R:29216;i:1;R:9;}s:27:"1230:srrf-srrf.reebe.nzbhag";a:2:{i:0;R:29216;i:1;R:9;}s:32:"1230:srrf-srrf.reebe.srrpngrtbel";a:2:{i:0;R:29216;i:1;R:9;}s:28:"1230:srrf-srrf.reebe.srranzr";a:2:{i:0;R:29216;i:1;R:9;}s:27:"1230:srrf-srrf.reebe.typbqr";a:2:{i:0;R:29216;i:1;R:9;}s:25:"1230:srrf-srrf.reebe.engr";a:2:{i:0;R:29216;i:1;R:9;}s:27:"1230:srrf-srrf.reebe.fgnghf";a:2:{i:0;R:29216;i:1;R:9;}s:20:"1230:srrf-srrf.rirel";a:2:{i:0;R:29216;i:1;R:9;}s:27:"1230:srrf-srrf.rireljrrxqnl";a:2:{i:0;R:29216;i:1;R:9;}s:40:"1230:srrf-srrf.rkvfgvatnaqshghernppbhagf";a:2:{i:0;R:29216;i:1;R:9;}s:20:"1230:srrf-srrf.srr01";a:2:{i:0;R:29216;i:1;R:9;}s:20:"1230:srrf-srrf.srr02";a:2:{i:0;R:29216;i:1;R:9;}s:20:"1230:srrf-srrf.srr03";a:2:{i:0;R:29216;i:1;R:9;}s:20:"1230:srrf-srrf.srr04";a:2:{i:0;R:29216;i:1;R:9;}s:27:"1230:srrf-srrf.srrnccyvrfgb";a:2:{i:0;R:29216;i:1;R:9;}s:29:"1230:srrf-srrf.srrpnyphyngvba";a:2:{i:0;R:29216;i:1;R:9;}s:25:"1230:srrf-srrf.srrqrgnvyf";a:2:{i:0;R:29216;i:1;R:9;}s:29:"1230:srrf-srrf.srrvasbezngvba";a:2:{i:0;R:29216;i:1;R:9;}s:22:"1230:srrf-srrf.srranzr";a:2:{i:0;R:29216;i:1;R:9;}s:37:"1230:srrf-srrf.srrfhpprffshyylperngrq";a:2:{i:0;R:29216;i:1;R:9;}s:24:"1230:srrf-srrf.serdhrapl";a:2:{i:0;R:29216;i:1;R:9;}s:21:"1230:srrf-srrf.sevqnl";a:2:{i:0;R:29216;i:1;R:9;}s:29:"1230:srrf-srrf.shghernppbhagf";a:2:{i:0;R:29216;i:1;R:9;}s:23:"1230:srrf-srrf.vanpgvir";a:2:{i:0;R:29216;i:1;R:9;}s:23:"1230:srrf-srrf.ynoryqnl";a:2:{i:0;R:29216;i:1;R:9;}s:26:"1230:srrf-srrf.ynoryzbaguf";a:2:{i:0;R:29216;i:1;R:9;}s:27:"1230:srrf-srrf.ynorybsrirel";a:2:{i:0;R:29216;i:1;R:9;}s:30:"1230:srrf-srrf.ynoryerpherirel";a:2:{i:0;R:29216;i:1;R:9;}s:31:"1230:srrf-srrf.ynoryerphezbaguf";a:2:{i:0;R:29216;i:1;R:9;}s:30:"1230:srrf-srrf.ynoryerphejrrxf";a:2:{i:0;R:29216;i:1;R:9;}s:23:"1230:srrf-srrf.ynorygur";a:2:{i:0;R:29216;i:1;R:9;}s:25:"1230:srrf-srrf.ynoryjrrxf";a:2:{i:0;R:29216;i:1;R:9;}s:32:"1230:srrf-srrf.znaqngbel_srranzr";a:2:{i:0;R:29216;i:1;R:9;}s:34:"1230:srrf-srrf.znaqngbel_serdhrapl";a:2:{i:0;R:29216;i:1;R:9;}s:31:"1230:srrf-srrf.znaqngbel_typbqr";a:2:{i:0;R:29216;i:1;R:9;}s:31:"1230:srrf-srrf.znaqngbel_fgnghf";a:2:{i:0;R:29216;i:1;R:9;}s:42:"1230:srrf-srrf.zrffntrsbecerivrjsrrqrgnvyf";a:2:{i:0;R:29216;i:1;R:9;}s:21:"1230:srrf-srrf.zbaqnl";a:2:{i:0;R:29216;i:1;R:9;}s:20:"1230:srrf-srrf.zbagu";a:2:{i:0;R:29216;i:1;R:9;}s:22:"1230:srrf-srrf.zbaguyl";a:2:{i:0;R:29216;i:1;R:9;}s:33:"1230:srrf-srrf.zbaguylvafgehpgvba";a:2:{i:0;R:29216;i:1;R:9;}s:18:"1230:srrf-srrf.bsn";a:2:{i:0;R:29216;i:1;R:9;}s:22:"1230:srrf-srrf.bsrirel";a:2:{i:0;R:29216;i:1;R:9;}s:22:"1230:srrf-srrf.bargvzr";a:2:{i:0;R:29216;i:1;R:9;}s:17:"1230:srrf-srrf.be";a:2:{i:0;R:29216;i:1;R:9;}s:24:"1230:srrf-srrf.crepragbs";a:2:{i:0;R:29216;i:1;R:9;}s:23:"1230:srrf-srrf.crevbqvp";a:2:{i:0;R:29216;i:1;R:9;}s:22:"1230:srrf-srrf.cerivrj";a:2:{i:0;R:29216;i:1;R:9;}s:37:"1230:srrf-srrf.cerivrjpunatrnccyvrfgb";a:2:{i:0;R:29216;i:1;R:9;}s:32:"1230:srrf-srrf.cerivrjsrrqrgnvyf";a:2:{i:0;R:29216;i:1;R:9;}s:36:"1230:srrf-srrf.cerivrjsrrvasbezngvba";a:2:{i:0;R:29216;i:1;R:9;}s:26:"1230:srrf-srrf.cebqhpgsrrf";a:2:{i:0;R:29216;i:1;R:9;}s:25:"1230:srrf-srrf.erpherirel";a:2:{i:0;R:29216;i:1;R:9;}s:30:"1230:srrf-srrf.erivrjnaqfhozvg";a:2:{i:0;R:29216;i:1;R:9;}s:23:"1230:srrf-srrf.fngheqnl";a:2:{i:0;R:29216;i:1;R:9;}s:22:"1230:srrf-srrf.fnivatf";a:2:{i:0;R:29216;i:1;R:9;}s:33:"1230:srrf-srrf.fryrpggvzrbspunetr";a:2:{i:0;R:29216;i:1;R:9;}s:24:"1230:srrf-srrf.frgtypbqr";a:2:{i:0;R:29216;i:1;R:9;}s:32:"1230:srrf-srrf.fznyyqrsvararjsrr";a:2:{i:0;R:29216;i:1;R:9;}s:21:"1230:srrf-srrf.fgnghf";a:2:{i:0;R:29216;i:1;R:9;}s:21:"1230:srrf-srrf.fhozvg";a:2:{i:0;R:29216;i:1;R:9;}s:29:"1230:srrf-srrf.fhpprffzrffntr";a:2:{i:0;R:29216;i:1;R:9;}s:21:"1230:srrf-srrf.fhaqnl";a:2:{i:0;R:29216;i:1;R:9;}s:18:"1230:srrf-srrf.gur";a:2:{i:0;R:29216;i:1;R:9;}s:23:"1230:srrf-srrf.guhefqnl";a:2:{i:0;R:29216;i:1;R:9;}s:27:"1230:srrf-srrf.gvzrgbpunetr";a:2:{i:0;R:29216;i:1;R:9;}s:22:"1230:srrf-srrf.ghrfqnl";a:2:{i:0;R:29216;i:1;R:9;}s:28:"1230:srrf-srrf.ivrjsrrqrgnvy";a:2:{i:0;R:29216;i:1;R:9;}s:23:"1230:srrf-srrf.ivrjsrrf";a:2:{i:0;R:29216;i:1;R:9;}s:24:"1230:srrf-srrf.jrqarfqnl";a:2:{i:0;R:29216;i:1;R:9;}s:21:"1230:srrf-srrf.jrrxyl";a:2:{i:0;R:29216;i:1;R:9;}s:32:"1230:srrf-srrf.jrrxylvafgehpgvba";a:2:{i:0;R:29216;i:1;R:9;}s:21:"1230:srrf-srrf.jrrxba";a:2:{i:0;R:29216;i:1;R:9;}s:21:"1230:srrf-srrf.erzbir";a:2:{i:0;R:29216;i:1;R:9;}s:36:"1230:srrf-reebe.npgvivgl.abg.nyybjrq";a:2:{i:0;R:29216;i:1;R:9;}s:34:"1230:srrf-reebe.nzbhagpnaabgorahyy";a:2:{i:0;R:29216;i:1;R:9;}s:25:"1230:srrf-reebe.ragreengr";a:2:{i:0;R:29216;i:1;R:9;}s:34:"1230:srrf-reebe.bagvzrnaqcnlzragvq";a:2:{i:0;R:29216;i:1;R:9;}s:36:"1230:srrf-reebe.crevbqvpnaqserdhrapl";a:2:{i:0;R:29216;i:1;R:9;}s:32:"1230:srrf-reebe.crevbqvpbebagvzr";a:2:{i:0;R:29216;i:1;R:9;}s:25:"1230:srrf-reebe.erhezbagu";a:2:{i:0;R:29216;i:1;R:9;}s:24:"1230:srrf-reebe.erhejrrx";a:2:{i:0;R:29216;i:1;R:9;}s:35:"1230:srrf-reebe.irefvbaabqbabgzngpu";a:2:{i:0;R:29216;i:1;R:9;}s:34:"1230:srrf-reebef.srr.vainyvqtypbqr";a:2:{i:0;R:29216;i:1;R:9;}s:42:"1230:srrf-reebef.zrrgvat.vainyvqerphensgre";a:2:{i:0;R:29216;i:1;R:9;}s:34:"1230:srrf-reebef.nzbhagterngreguna";a:2:{i:0;R:29216;i:1;R:9;}s:29:"1230:srrf-reebef.nzbhagbeengr";a:2:{i:0;R:29216;i:1;R:9;}s:30:"1230:srrf-reebef.qrpvznysbezng";a:2:{i:0;R:29216;i:1;R:9;}s:22:"1230:srrf-reebef.ragre";a:2:{i:0;R:29216;i:1;R:9;}s:23:"1230:srrf-reebef.sbbgre";a:2:{i:0;R:29216;i:1;R:9;}s:24:"1230:srrf-reebef.trarevp";a:2:{i:0;R:29216;i:1;R:9;}s:23:"1230:srrf-reebef.urnqre";a:2:{i:0;R:29216;i:1;R:9;}s:26:"1230:srrf-reebef.znaqngbel";a:2:{i:0;R:29216;i:1;R:9;}s:39:"1230:srrf-reebef.znaqngbel_srrfpngrtbel";a:2:{i:0;R:29216;i:1;R:9;}s:36:"1230:srrf-reebef.znaqngbel_fryrpgobk";a:2:{i:0;R:29216;i:1;R:9;}s:34:"1230:srrf-reebef.znaqngbel_grkgobk";a:2:{i:0;R:29216;i:1;R:9;}s:21:"1230:srrf-reebef.znfx";a:2:{i:0;R:29216;i:1;R:9;}s:30:"1230:srrf-reebef.znkvzhzyratgu";a:2:{i:0;R:29216;i:1;R:9;}s:30:"1230:srrf-reebef.zvavzhzyratgu";a:2:{i:0;R:29216;i:1;R:9;}s:38:"1230:srrf-reebef.zhfgorterngregunamreb";a:2:{i:0;R:29216;i:1;R:9;}s:23:"1230:srrf-reebef.cersvk";a:2:{i:0;R:29216;i:1;R:9;}s:33:"1230:srrf-reebef.engrnaqsbezhynvq";a:2:{i:0;R:29216;i:1;R:9;}s:35:"1230:srrf-reebef.engrterngregura999";a:2:{i:0;R:29216;i:1;R:9;}s:23:"1230:srrf-reebef.fryrpg";a:2:{i:0;R:29216;i:1;R:9;}s:29:"1230:srrf-reebef.fryrpgfgnghf";a:2:{i:0;R:29216;i:1;R:9;}s:23:"1230:srrf-reebef.fhssvk";a:2:{i:0;R:29216;i:1;R:9;}s:51:"1230:srrf-rkprcgvba.senzrjbex.qbhoyrfhozvgrkprcgvba";a:2:{i:0;R:29216;i:1;R:9;}s:50:"1230:srrf-rkprcgvba.senzrjbex.cntrrkcverqrkprcgvba";a:2:{i:0;R:29216;i:1;R:9;}s:27:"1230:srrf-zrrgvat.serdhrapl";a:2:{i:0;R:29216;i:1;R:9;}s:26:"1230:srrf-zrrgvat.ynoryqnl";a:2:{i:0;R:29216;i:1;R:9;}s:29:"1230:srrf-zrrgvat.ynoryzbaguf";a:2:{i:0;R:29216;i:1;R:9;}s:30:"1230:srrf-zrrgvat.ynorybsrirel";a:2:{i:0;R:29216;i:1;R:9;}s:33:"1230:srrf-zrrgvat.ynoryerpherirel";a:2:{i:0;R:29216;i:1;R:9;}s:34:"1230:srrf-zrrgvat.ynoryerphezbaguf";a:2:{i:0;R:29216;i:1;R:9;}s:33:"1230:srrf-zrrgvat.ynoryerphejrrxf";a:2:{i:0;R:29216;i:1;R:9;}s:26:"1230:srrf-zrrgvat.ynorygur";a:2:{i:0;R:29216;i:1;R:9;}s:28:"1230:srrf-zrrgvat.ynoryjrrxf";a:2:{i:0;R:29216;i:1;R:9;}s:28:"1230:srrf-reebe.erzbirnpgvir";a:2:{i:0;R:29216;i:1;R:9;}s:25:"1230:srrf-srrf.srrerzbirq";a:2:{i:0;R:29216;i:1;R:9;}s:32:"1230:srrf-srrf.srrerzbirqsebzceq";a:2:{i:0;R:29216;i:1;R:9;}s:33:"1230:srrf-srrf.srrpnaabgorerzbirq";a:2:{i:0;R:29216;i:1;R:9;}s:31:"1230:srrf-srrf.srrabghfrqerzbir";a:2:{i:0;R:29216;i:1;R:9;}s:26:"1230:svryq-pragre.nqqerff1";a:2:{i:0;s:15:"out-mifos-field";i:1;R:9;}s:26:"1230:svryq-pragre.nqqerff2";a:2:{i:0;R:29376;i:1;R:9;}s:26:"1230:svryq-pragre.nqqerff3";a:2:{i:0;R:29376;i:1;R:9;}s:22:"1230:svryq-pragre.pvgl";a:2:{i:0;R:29376;i:1;R:9;}s:25:"1230:svryq-pragre.pbhagel";a:2:{i:0;R:29376;i:1;R:9;}s:28:"1230:svryq-pragre.rkgreanyvq";a:2:{i:0;R:29376;i:1;R:9;}s:29:"1230:svryq-pragre.cubarahzore";a:2:{i:0;R:29376;i:1;R:9;}s:28:"1230:svryq-pragre.cbfgnypbqr";a:2:{i:0;R:29376;i:1;R:9;}s:23:"1230:svryq-pragre.fgngr";a:2:{i:0;R:29376;i:1;R:9;}s:26:"1230:svryq-pyvrag.nqqerff1";a:2:{i:0;R:29376;i:1;R:9;}s:26:"1230:svryq-pyvrag.nqqerff2";a:2:{i:0;R:29376;i:1;R:9;}s:26:"1230:svryq-pyvrag.nqqerff3";a:2:{i:0;R:29376;i:1;R:9;}s:36:"1230:svryq-pyvrag.ohfvarffnpgvivgvrf";a:2:{i:0;R:29376;i:1;R:9;}s:34:"1230:svryq-pyvrag.ahzorebspuvyqera";a:2:{i:0;R:29376;i:1;R:9;}s:29:"1230:svryq-pyvrag.pvgvmrafuvc";a:2:{i:0;R:29376;i:1;R:9;}s:22:"1230:svryq-pyvrag.pvgl";a:2:{i:0;R:29376;i:1;R:9;}s:25:"1230:svryq-pyvrag.pbhagel";a:2:{i:0;R:29376;i:1;R:9;}s:32:"1230:svryq-pyvrag.rqhpngvbayriry";a:2:{i:0;R:29376;i:1;R:9;}s:27:"1230:svryq-pyvrag.rguavpvgl";a:2:{i:0;R:29376;i:1;R:9;}s:28:"1230:svryq-pyvrag.rkgreanyvq";a:2:{i:0;R:29376;i:1;R:9;}s:31:"1230:svryq-pyvrag.snzvylqrgnvyf";a:2:{i:0;R:29376;i:1;R:9;}s:30:"1230:svryq-pyvrag.tbireazragvq";a:2:{i:0;R:29376;i:1;R:9;}s:29:"1230:svryq-pyvrag.unaqvpnccrq";a:2:{i:0;R:29376;i:1;R:9;}s:28:"1230:svryq-pyvrag.zvqqyranzr";a:2:{i:0;R:29376;i:1;R:9;}s:29:"1230:svryq-pyvrag.cubarahzore";a:2:{i:0;R:29376;i:1;R:9;}s:23:"1230:svryq-pyvrag.cubgb";a:2:{i:0;R:29376;i:1;R:9;}s:28:"1230:svryq-pyvrag.cbfgnypbqr";a:2:{i:0;R:29376;i:1;R:9;}s:31:"1230:svryq-pyvrag.cbireglfgnghf";a:2:{i:0;R:29376;i:1;R:9;}s:31:"1230:svryq-pyvrag.znevgnyfgnghf";a:2:{i:0;R:29376;i:1;R:9;}s:32:"1230:svryq-pyvrag.frpbaqynfganzr";a:2:{i:0;R:29376;i:1;R:9;}s:41:"1230:svryq-pyvrag.fcbhfrsngurevasbezngvba";a:2:{i:0;R:29376;i:1;R:9;}s:40:"1230:svryq-pyvrag.fcbhfrsngurezvqqyranzr";a:2:{i:0;R:29376;i:1;R:9;}s:44:"1230:svryq-pyvrag.fcbhfrsngurefrpbaqynfganzr";a:2:{i:0;R:29376;i:1;R:9;}s:23:"1230:svryq-pyvrag.fgngr";a:2:{i:0;R:29376;i:1;R:9;}s:25:"1230:svryq-pyvrag.genvarq";a:2:{i:0;R:29376;i:1;R:9;}s:29:"1230:svryq-pyvrag.genvarqqngr";a:2:{i:0;R:29376;i:1;R:9;}s:25:"1230:svryq-tebhc.nqqerff1";a:2:{i:0;R:29376;i:1;R:9;}s:25:"1230:svryq-tebhc.nqqerff2";a:2:{i:0;R:29376;i:1;R:9;}s:25:"1230:svryq-tebhc.nqqerff3";a:2:{i:0;R:29376;i:1;R:9;}s:21:"1230:svryq-tebhc.pvgl";a:2:{i:0;R:29376;i:1;R:9;}s:24:"1230:svryq-tebhc.pbhagel";a:2:{i:0;R:29376;i:1;R:9;}s:27:"1230:svryq-tebhc.rkgreanyvq";a:2:{i:0;R:29376;i:1;R:9;}s:28:"1230:svryq-tebhc.cubarahzore";a:2:{i:0;R:29376;i:1;R:9;}s:27:"1230:svryq-tebhc.cbfgnypbqr";a:2:{i:0;R:29376;i:1;R:9;}s:22:"1230:svryq-tebhc.fgngr";a:2:{i:0;R:29376;i:1;R:9;}s:24:"1230:svryq-tebhc.genvarq";a:2:{i:0;R:29376;i:1;R:9;}s:28:"1230:svryq-tebhc.genvarqqngr";a:2:{i:0;R:29376;i:1;R:9;}s:31:"1230:svryq-ybna.pbyyngrenyabgrf";a:2:{i:0;R:29376;i:1;R:9;}s:30:"1230:svryq-ybna.pbyyngrenyglcr";a:2:{i:0;R:29376;i:1;R:9;}s:29:"1230:svryq-ybna.checbfrbsybna";a:2:{i:0;R:29376;i:1;R:9;}s:25:"1230:svryq-bssvpr.pbhagel";a:2:{i:0;R:29376;i:1;R:9;}s:28:"1230:svryq-bssvpr.cbfgnypbqr";a:2:{i:0;R:29376;i:1;R:9;}s:23:"1230:svryq-bssvpr.fgngr";a:2:{i:0;R:29376;i:1;R:9;}s:29:"1230:svryq-crefbaary.nqqerff3";a:2:{i:0;R:29376;i:1;R:9;}s:28:"1230:svryq-crefbaary.pbhagel";a:2:{i:0;R:29376;i:1;R:9;}s:33:"1230:svryq-crefbaary.tbireazragvq";a:2:{i:0;R:29376;i:1;R:9;}s:31:"1230:svryq-crefbaary.zvqqyranzr";a:2:{i:0;R:29376;i:1;R:9;}s:32:"1230:svryq-crefbaary.cubarahzore";a:2:{i:0;R:29376;i:1;R:9;}s:31:"1230:svryq-crefbaary.cbfgnypbqr";a:2:{i:0;R:29376;i:1;R:9;}s:35:"1230:svryq-crefbaary.frpbaqynfganzr";a:2:{i:0;R:29376;i:1;R:9;}s:26:"1230:svryq-crefbaary.fgngr";a:2:{i:0;R:29376;i:1;R:9;}s:33:"1230:senzrjbex-senzrjbex.nppbhagf";a:2:{i:0;s:19:"out-mifos-framework";i:1;R:9;}s:30:"1230:senzrjbex-senzrjbex.nqzva";a:2:{i:0;R:29438;i:1;R:9;}s:43:"1230:senzrjbex-senzrjbex.pyvragfnaqnppbhagf";a:2:{i:0;R:29438;i:1;R:9;}s:42:"1230:senzrjbex-senzrjbex.perngrybnanppbhag";a:2:{i:0;R:29438;i:1;R:9;}s:42:"1230:senzrjbex-senzrjbex.perngrarjnppbhagf";a:2:{i:0;R:29438;i:1;R:9;}s:40:"1230:senzrjbex-senzrjbex.perngrarjpragre";a:2:{i:0;R:29438;i:1;R:9;}s:40:"1230:senzrjbex-senzrjbex.perngrarjpyvrag";a:2:{i:0;R:29438;i:1;R:9;}s:41:"1230:senzrjbex-senzrjbex.perngrarjpyvragf";a:2:{i:0;R:29438;i:1;R:9;}s:39:"1230:senzrjbex-senzrjbex.perngrarjtebhc";a:2:{i:0;R:29438;i:1;R:9;}s:45:"1230:senzrjbex-senzrjbex.perngrfnivatfnppbhag";a:2:{i:0;R:29438;i:1;R:9;}s:49:"1230:senzrjbex-senzrjbex.ragrepbyyrpgvbafurrgqngn";a:2:{i:0;R:29438;i:1;R:9;}s:29:"1230:senzrjbex-senzrjbex.ubzr";a:2:{i:0;R:29438;i:1;R:9;}s:31:"1230:senzrjbex-senzrjbex.ybtbhg";a:2:{i:0;R:29438;i:1;R:9;}s:47:"1230:senzrjbex-senzrjbex.znantrpbyyrpgvbafurrgf";a:2:{i:0;R:29438;i:1;R:9;}s:57:"1230:senzrjbex-senzrjbex.zrahgvgyrpyvragfnaqnppbhagfgnfxf";a:2:{i:0;R:29438;i:1;R:9;}s:32:"1230:senzrjbex-senzrjbex.ercbegf";a:2:{i:0;R:29438;i:1;R:9;}s:31:"1230:senzrjbex-senzrjbex.frnepu";a:2:{i:0;R:29438;i:1;R:9;}s:39:"1230:senzrjbex-senzrjbex.frnepupevgrevn";a:2:{i:0;R:29438;i:1;R:9;}s:37:"1230:senzrjbex-senzrjbex.lbhefrggvatf";a:2:{i:0;R:29438;i:1;R:9;}s:39:"1230:senzrjbex-senzrjbex.fjvgpufvgrglcr";a:2:{i:0;R:29438;i:1;R:9;}s:56:"1230:sgy-sgyqrsvarqynoryf.ivrjbssvpruvrenepul.urnqbssvpr";a:2:{i:0;s:13:"out-mifos-ftl";i:1;R:9;}s:60:"1230:sgy-sgyqrsvarqynoryf.ivrjbssvpruvrenepul.ertvbanybssvpr";a:2:{i:0;R:29459;i:1;R:9;}s:62:"1230:sgy-sgyqrsvarqynoryf.ivrjbssvpruvrenepul.qvivfvbanybssvpr";a:2:{i:0;R:29459;i:1;R:9;}s:56:"1230:sgy-sgyqrsvarqynoryf.ivrjbssvpruvrenepul.nernbssvpr";a:2:{i:0;R:29459;i:1;R:9;}s:58:"1230:sgy-sgyqrsvarqynoryf.ivrjbssvpruvrenepul.oenapubssvpr";a:2:{i:0;R:29459;i:1;R:9;}s:68:"1230:sgy-sgyqrsvarqynoryf.znantrcebqhpgf.ivrjcebqhpgpngrtbevrf.ybnaf";a:2:{i:0;R:29459;i:1;R:9;}s:70:"1230:sgy-sgyqrsvarqynoryf.znantrcebqhpgf.ivrjcebqhpgpngrtbevrf.fnivatf";a:2:{i:0;R:29459;i:1;R:9;}s:66:"1230:sgy-sgyqrsvarqynoryf.znantrcebqhpgf.rqvgyngrarffqbeznapl.ybna";a:2:{i:0;R:29459;i:1;R:9;}s:83:"1230:sgy-sgyqrsvarqynoryf.znantrcebqhpgf.rqvgyngrarffqbeznapl.frgyngrarffqrsvavgvba";a:2:{i:0;R:29459;i:1;R:9;}s:96:"1230:sgy-sgyqrsvarqynoryf.znantrcebqhpgf.rqvgyngrarffqbeznapl.fcrpvslgurahzorebsqnlfbsabacnlzrag";a:2:{i:0;R:29459;i:1;R:9;}s:69:"1230:sgy-sgyqrsvarqynoryf.znantrcebqhpgf.rqvgyngrarffqbeznapl.fnivatf";a:2:{i:0;R:29459;i:1;R:9;}s:100:"1230:sgy-sgyqrsvarqynoryf.znantrcebqhpgf.rqvgyngrarffqbeznapl.fcrpvslgurahzorebsqnlfgbqrsvarqbeznapl";a:2:{i:0;R:29459;i:1;R:9;}s:59:"1230:sgy-sgyqrsvarqynoryf.znantrcebqhpg.ivrjcebqhpgzvk.ybna";a:2:{i:0;R:29459;i:1;R:9;}s:62:"1230:sgy-sgyqrsvarqynoryf.znantrcebqhpg.ivrjcebqhpgzvk.fnivatf";a:2:{i:0;R:29459;i:1;R:9;}s:51:"1230:sgy-sgyqrsvarqynoryf.nqzva.ivrjfnivatfcebqhpgf";a:2:{i:0;R:29459;i:1;R:9;}s:121:"1230:sgy-sgyqrsvarqynoryf.znantrybnacebqhpgf.ivrjfnivatfcebqhpgf.pyvpxbanfnivatfcebqhpgorybjgbivrjqrgnvyfnaqznxrpunatrfbe";a:2:{i:0;R:29459;i:1;R:9;}s:87:"1230:sgy-sgyqrsvarqynoryf.znantrybnacebqhpgf.ivrjfnivatfcebqhpgf.qrsvararjfnivatcbeqhpg";a:2:{i:0;R:29459;i:1;R:9;}s:88:"1230:sgy-sgyqrsvarqynoryf.znantrcebqhpgf.qrsvarfnivatfcebqhpgf.fnivatfcebqhpgvasbezngvba";a:2:{i:0;R:29459;i:1;R:9;}s:84:"1230:sgy-sgyqrsvarqynoryf.znantrcebqhpgf.qrsvarfnivatfcebqhpgf.nqqnarjfnivatfcebqhpg";a:2:{i:0;R:29459;i:1;R:9;}s:93:"1230:sgy-sgyqrsvarqynoryf.znantrcebqhpgf.qrsvarfnivatfcebqhpgf.ragrefnivatfcebqhpgvasbezngvba";a:2:{i:0;R:29459;i:1;R:9;}s:84:"1230:sgy-sgyqrsvarqynoryf.znantrcebqhpgf.qrsvarfnivatfcebqhpgf.fnivatfcebqhpgqrgnvyf";a:2:{i:0;R:29459;i:1;R:9;}s:85:"1230:sgy-sgyqrsvarqynoryf.znantrfniatfcebqhpgf.rqvgfnivatfcebqhpg.ivrjfnivatfcebqhpgf";a:2:{i:0;R:29459;i:1;R:9;}s:95:"1230:sgy-sgyqrsvarqynoryf.znantrfniatfcebqhpgf.rqvgfnivatfcebqhpg.rqvgfnivatfcebqhpgvasbezngvba";a:2:{i:0;R:29459;i:1;R:9;}s:87:"1230:sgy-sgyqrsvarqynoryf.znantrfniatfcebqhpgf.rqvgfnivatfcebqhpg.fnivatfcebqhpgqrgnvyf";a:2:{i:0;R:29459;i:1;R:9;}s:78:"1230:sgy-sgyqrsvarqynoryf.znantrcebqhpgf.rqvgfnivatfcebqhpg.rqvggursvryqforybj";a:2:{i:0;R:29459;i:1;R:9;}s:34:"1230:sgy-sgyqrsvarqynoryf.vanpgvir";a:2:{i:0;R:29459;i:1;R:9;}s:32:"1230:sgy-sgyqrsvarqynoryf.npgvir";a:2:{i:0;R:29459;i:1;R:9;}s:58:"1230:sgy-sgyqrsvarqynoryf.znantrcebqhpgf.rqvgpngrtbel.ybna";a:2:{i:0;R:29459;i:1;R:9;}s:61:"1230:sgy-sgyqrsvarqynoryf.znantrcebqhpgf.rqvgpngrtbel.fnivatf";a:2:{i:0;R:29459;i:1;R:9;}s:70:"1230:sgy-sgyqrsvarqynoryf.znantrcebqhpgf.qrsvararjpngrtbel.cebqhpganzr";a:2:{i:0;R:29459;i:1;R:9;}s:36:"1230:shaq-reebe.npgvivgl.abg.nyybjrq";a:2:{i:0;s:14:"out-mifos-fund";i:1;R:9;}s:43:"1230:shaq-reebef.qhcyvpngrshaqanzrrkprcgvba";a:2:{i:0;R:29490;i:1;R:9;}s:37:"1230:shaq-reebef.shaq.vainyvqshaqpbqr";a:2:{i:0;R:29490;i:1;R:9;}s:33:"1230:shaq-reebef.shaq.vainyvqanzr";a:2:{i:0;R:29490;i:1;R:9;}s:23:"1230:shaq-reebef.sbbgre";a:2:{i:0;R:29490;i:1;R:9;}s:23:"1230:shaq-reebef.urnqre";a:2:{i:0;R:29490;i:1;R:9;}s:26:"1230:shaq-reebef.znaqngbel";a:2:{i:0;R:29490;i:1;R:9;}s:36:"1230:shaq-reebef.znaqngbel_fryrpgobk";a:2:{i:0;R:29490;i:1;R:9;}s:34:"1230:shaq-reebef.znaqngbel_grkgobk";a:2:{i:0;R:29490;i:1;R:9;}s:23:"1230:shaq-reebef.cersvk";a:2:{i:0;R:29490;i:1;R:9;}s:23:"1230:shaq-reebef.fryrpg";a:2:{i:0;R:29490;i:1;R:9;}s:23:"1230:shaq-reebef.fhssvk";a:2:{i:0;R:29490;i:1;R:9;}s:51:"1230:shaq-rkprcgvba.senzrjbex.qbhoyrfhozvgrkprcgvba";a:2:{i:0;R:29490;i:1;R:9;}s:21:"1230:shaq-shaqf.nqzva";a:2:{i:0;R:29490;i:1;R:9;}s:22:"1230:shaq-shaqf.pnapry";a:2:{i:0;R:29490;i:1;R:9;}s:20:"1230:shaq-shaqf.rqvg";a:2:{i:0;R:29490;i:1;R:9;}s:41:"1230:shaq-shaqf.rqvg_cerivrj_vafgehpgvbaf";a:2:{i:0;R:29490;i:1;R:9;}s:24:"1230:shaq-shaqf.rqvgshaq";a:2:{i:0;R:29490;i:1;R:9;}s:41:"1230:shaq-shaqf.rqvgshaq_cntrvafgehpgvbaf";a:2:{i:0;R:29490;i:1;R:9;}s:26:"1230:shaq-shaqf.ragre_shaq";a:2:{i:0;R:29490;i:1;R:9;}s:24:"1230:shaq-shaqf.shaqpbqr";a:2:{i:0;R:29490;i:1;R:9;}s:31:"1230:shaq-shaqf.shaqvasbezngvba";a:2:{i:0;R:29490;i:1;R:9;}s:24:"1230:shaq-shaqf.shaqanzr";a:2:{i:0;R:29490;i:1;R:9;}s:28:"1230:shaq-shaqf.shaq_qrgnvyf";a:2:{i:0;R:29490;i:1;R:9;}s:25:"1230:shaq-shaqf.shaq_anzr";a:2:{i:0;R:29490;i:1;R:9;}s:37:"1230:shaq-shaqf.znaqngbelvafgehpgvbaf";a:2:{i:0;R:29490;i:1;R:9;}s:24:"1230:shaq-shaqf.arj_shaq";a:2:{i:0;R:29490;i:1;R:9;}s:40:"1230:shaq-shaqf.arjshaq_cntrvafgehpgvbaf";a:2:{i:0;R:29490;i:1;R:9;}s:23:"1230:shaq-shaqf.cerivrj";a:2:{i:0;R:29490;i:1;R:9;}s:32:"1230:shaq-shaqf.cerivrj_shaqvasb";a:2:{i:0;R:29490;i:1;R:9;}s:36:"1230:shaq-shaqf.cerivrj_vafgehpgvbaf";a:2:{i:0;R:29490;i:1;R:9;}s:22:"1230:shaq-shaqf.erivrj";a:2:{i:0;R:29490;i:1;R:9;}s:31:"1230:shaq-shaqf.erivrjnaqfhozvg";a:2:{i:0;R:29490;i:1;R:9;}s:19:"1230:shaq-shaqf.fho";a:2:{i:0;R:29490;i:1;R:9;}s:22:"1230:shaq-shaqf.fhozvg";a:2:{i:0;R:29490;i:1;R:9;}s:25:"1230:shaq-shaqf.ivrjshaqf";a:2:{i:0;R:29490;i:1;R:9;}s:35:"1230:tebhc-phfgbzre.zrrgvaterdhverq";a:2:{i:0;R:16;i:1;R:9;}s:44:"1230:tebhc-sbezrqolybnabssvpreoynaxrkprcgvba";a:2:{i:0;R:16;i:1;R:9;}s:20:"1230:tebhc-tebhc.nqq";a:2:{i:0;R:16;i:1;R:9;}s:29:"1230:tebhc-tebhc.nzbhagbsynfg";a:2:{i:0;R:16;i:1;R:9;}s:36:"1230:tebhc-tebhc.nffvtarqybnabssvpre";a:2:{i:0;R:16;i:1;R:9;}s:30:"1230:tebhc-tebhc.nitvaqvivqhny";a:2:{i:0;R:16;i:1;R:9;}s:23:"1230:tebhc-tebhc.pragre";a:2:{i:0;R:16;i:1;R:9;}s:38:"1230:tebhc-tebhc.rqvgtebhcvafgehpgvbaf";a:2:{i:0;R:16;i:1;R:9;}s:25:"1230:tebhc-tebhc.sbezrqol";a:2:{i:0;R:16;i:1;R:9;}s:24:"1230:tebhc-tebhc.abynory";a:2:{i:0;R:16;i:1;R:9;}s:32:"1230:tebhc-tebhc.cbegsbyvbngevfx";a:2:{i:0;R:16;i:1;R:9;}s:25:"1230:tebhc-tebhc.fryrpgrq";a:2:{i:0;R:16;i:1;R:9;}s:22:"1230:tebhc-tebhc.gbgny";a:2:{i:0;R:16;i:1;R:9;}s:25:"1230:tebhc-tebhc.lrfynory";a:2:{i:0;R:16;i:1;R:9;}s:20:"1230:tebhc-tebhc.npp";a:2:{i:0;R:16;i:1;R:9;}s:24:"1230:tebhc-tebhc.nppbhag";a:2:{i:0;R:16;i:1;R:9;}s:35:"1230:tebhc-tebhc.nppbhagvasbezngvba";a:2:{i:0;R:16;i:1;R:9;}s:23:"1230:tebhc-tebhc.nppfhz";a:2:{i:0;R:16;i:1;R:9;}s:30:"1230:tebhc-tebhc.nqqzrzorefuvc";a:2:{i:0;R:16;i:1;R:9;}s:25:"1230:tebhc-tebhc.nqqnabgr";a:2:{i:0;R:16;i:1;R:9;}s:31:"1230:tebhc-tebhc.nqqvgvbanysrrf";a:2:{i:0;R:16;i:1;R:9;}s:38:"1230:tebhc-tebhc.nqqvgvbanyvasbezngvba";a:2:{i:0;R:16;i:1;R:9;}s:24:"1230:tebhc-tebhc.nqqerff";a:2:{i:0;R:16;i:1;R:9;}s:25:"1230:tebhc-tebhc.nqqerff1";a:2:{i:0;R:16;i:1;R:9;}s:28:"1230:tebhc-tebhc.nqqerff1zft";a:2:{i:0;R:16;i:1;R:9;}s:25:"1230:tebhc-tebhc.nqqerff2";a:2:{i:0;R:16;i:1;R:9;}s:28:"1230:tebhc-tebhc.nqqerff2zft";a:2:{i:0;R:16;i:1;R:9;}s:25:"1230:tebhc-tebhc.nqqerff3";a:2:{i:0;R:16;i:1;R:9;}s:28:"1230:tebhc-tebhc.nqqerff3zft";a:2:{i:0;R:16;i:1;R:9;}s:29:"1230:tebhc-tebhc.nqzvafrgsrff";a:2:{i:0;R:16;i:1;R:9;}s:23:"1230:tebhc-tebhc.nzbhag";a:2:{i:0;R:16;i:1;R:9;}s:26:"1230:tebhc-tebhc.nzbhagqhr";a:2:{i:0;R:16;i:1;R:9;}s:23:"1230:tebhc-tebhc.nzgqhr";a:2:{i:0;R:16;i:1;R:9;}s:27:"1230:tebhc-tebhc.nzgbireqhr";a:2:{i:0;R:16;i:1;R:9;}s:32:"1230:tebhc-tebhc.nccylnqwhfgzrag";a:2:{i:0;R:16;i:1;R:9;}s:33:"1230:tebhc-tebhc.nccylgenafnpgvba";a:2:{i:0;R:16;i:1;R:9;}s:29:"1230:tebhc-tebhc.nccebinyqngr";a:2:{i:0;R:16;i:1;R:9;}s:43:"1230:tebhc-tebhc.nffvtapyvragfgbtebhcgvgyrf";a:2:{i:0;R:16;i:1;R:9;}s:44:"1230:tebhc-tebhc.nffvtapyvragfgbtebhcgvgyrf1";a:2:{i:0;R:16;i:1;R:9;}s:44:"1230:tebhc-tebhc.nffvtapyvragfgbtebhcgvgyrf2";a:2:{i:0;R:16;i:1;R:9;}s:44:"1230:tebhc-tebhc.nffvtapyvragfgbtebhcgvgyrf3";a:2:{i:0;R:16;i:1;R:9;}s:25:"1230:tebhc-tebhc.nffvtarq";a:2:{i:0;R:16;i:1;R:9;}s:26:"1230:tebhc-tebhc.nffvtarq1";a:2:{i:0;R:16;i:1;R:9;}s:30:"1230:tebhc-tebhc.nggnpunfheirl";a:2:{i:0;R:16;i:1;R:9;}s:29:"1230:tebhc-tebhc.nggnpufheirl";a:2:{i:0;R:16;i:1;R:9;}s:24:"1230:tebhc-tebhc.onynapr";a:2:{i:0;R:16;i:1;R:9;}s:30:"1230:tebhc-tebhc.oenapubssvprf";a:2:{i:0;R:16;i:1;R:9;}s:29:"1230:tebhc-tebhc.pragrenffvta";a:2:{i:0;R:16;i:1;R:9;}s:31:"1230:tebhc-tebhc.pragrenffvtarq";a:2:{i:0;R:16;i:1;R:9;}s:48:"1230:tebhc-tebhc.pragrezrzorefuvc&zrrgvatqrgnvyf";a:2:{i:0;R:16;i:1;R:9;}s:33:"1230:tebhc-tebhc.punatrzrzorefuvc";a:2:{i:0;R:16;i:1;R:9;}s:39:"1230:tebhc-tebhc.punatrpragrezrzorefuvc";a:2:{i:0;R:16;i:1;R:9;}s:43:"1230:tebhc-tebhc.punatrpragrezrzorefuvcurnq";a:2:{i:0;R:16;i:1;R:9;}s:29:"1230:tebhc-tebhc.punatrfgnghf";a:2:{i:0;R:16;i:1;R:9;}s:24:"1230:tebhc-tebhc.punetrf";a:2:{i:0;R:16;i:1;R:9;}s:30:"1230:tebhc-tebhc.purpxgberzbir";a:2:{i:0;R:16;i:1;R:9;}s:29:"1230:tebhc-tebhc.pubbfroenapu";a:2:{i:0;R:16;i:1;R:9;}s:33:"1230:tebhc-tebhc.pubbfrpragrezft1";a:2:{i:0;R:16;i:1;R:9;}s:33:"1230:tebhc-tebhc.pubbfrpragrezft2";a:2:{i:0;R:16;i:1;R:9;}s:21:"1230:tebhc-tebhc.pvgl";a:2:{i:0;R:16;i:1;R:9;}s:24:"1230:tebhc-tebhc.pvglzft";a:2:{i:0;R:16;i:1;R:9;}s:28:"1230:tebhc-tebhc.pyvpxpnapry";a:2:{i:0;R:16;i:1;R:9;}s:28:"1230:tebhc-tebhc.pyvpxbssvpr";a:2:{i:0;R:16;i:1;R:9;}s:29:"1230:tebhc-tebhc.pyvragnffvta";a:2:{i:0;R:16;i:1;R:9;}s:32:"1230:tebhc-tebhc.pyvragfnffvtarq";a:2:{i:0;R:16;i:1;R:9;}s:36:"1230:tebhc-tebhc.pbyyrpgvbafurrgglcr";a:2:{i:0;R:16;i:1;R:9;}s:22:"1230:tebhc-tebhc.pbzzn";a:2:{i:0;R:16;i:1;R:9;}s:24:"1230:tebhc-tebhc.pbasvez";a:2:{i:0;R:16;i:1;R:9;}s:34:"1230:tebhc-tebhc.pbasvezpragrezft1";a:2:{i:0;R:16;i:1;R:9;}s:36:"1230:tebhc-tebhc.pbasvezfgnghfpunatr";a:2:{i:0;R:16;i:1;R:9;}s:24:"1230:tebhc-tebhc.pbhagel";a:2:{i:0;R:16;i:1;R:9;}s:27:"1230:tebhc-tebhc.pbhagelzft";a:2:{i:0;R:16;i:1;R:9;}s:23:"1230:tebhc-tebhc.perngr";a:2:{i:0;R:16;i:1;R:9;}s:32:"1230:tebhc-tebhc.perngrnanppbhag";a:2:{i:0;R:16;i:1;R:9;}s:33:"1230:tebhc-tebhc.perngrarjnppbhag";a:2:{i:0;R:16;i:1;R:9;}s:30:"1230:tebhc-tebhc.perngrnppbhag";a:2:{i:0;R:16;i:1;R:9;}s:32:"1230:tebhc-tebhc.perngrnarjtebhc";a:2:{i:0;R:16;i:1;R:9;}s:30:"1230:tebhc-tebhc.perngrpbasvez";a:2:{i:0;R:16;i:1;R:9;}s:35:"1230:tebhc-tebhc.perngrpbasvezurnq1";a:2:{i:0;R:16;i:1;R:9;}s:35:"1230:tebhc-tebhc.perngrpbasvezurnq2";a:2:{i:0;R:16;i:1;R:9;}s:35:"1230:tebhc-tebhc.perngrpbasvezurnq3";a:2:{i:0;R:16;i:1;R:9;}s:35:"1230:tebhc-tebhc.perngrpbasvezurnq4";a:2:{i:0;R:16;i:1;R:9;}s:32:"1230:tebhc-tebhc.perngrvafhenapr";a:2:{i:0;R:16;i:1;R:9;}s:27:"1230:tebhc-tebhc.perngrybna";a:2:{i:0;R:16;i:1;R:9;}s:26:"1230:tebhc-tebhc.perngrarj";a:2:{i:0;R:16;i:1;R:9;}s:31:"1230:tebhc-tebhc.perngrarjtebhc";a:2:{i:0;R:16;i:1;R:9;}s:32:"1230:tebhc-tebhc.perngrcntrurnq1";a:2:{i:0;R:16;i:1;R:9;}s:32:"1230:tebhc-tebhc.perngrcntrurnq2";a:2:{i:0;R:16;i:1;R:9;}s:32:"1230:tebhc-tebhc.perngrcntrurnq3";a:2:{i:0;R:16;i:1;R:9;}s:32:"1230:tebhc-tebhc.perngrcntrurnq4";a:2:{i:0;R:16;i:1;R:9;}s:30:"1230:tebhc-tebhc.perngrfnivatf";a:2:{i:0;R:16;i:1;R:9;}s:30:"1230:tebhc-tebhc.perngrfhpprff";a:2:{i:0;R:16;i:1;R:9;}s:30:"1230:tebhc-tebhc.pheeragfgnghf";a:2:{i:0;R:16;i:1;R:9;}s:21:"1230:tebhc-tebhc.qngr";a:2:{i:0;R:16;i:1;R:9;}s:33:"1230:tebhc-tebhc.qngrtebhcfgnegrq";a:2:{i:0;R:16;i:1;R:9;}s:28:"1230:tebhc-tebhc.qrfpevcgvba";a:2:{i:0;R:16;i:1;R:9;}s:24:"1230:tebhc-tebhc.qrgnvyf";a:2:{i:0;R:16;i:1;R:9;}s:20:"1230:tebhc-tebhc.qbg";a:2:{i:0;R:16;i:1;R:9;}s:21:"1230:tebhc-tebhc.rqvg";a:2:{i:0;R:16;i:1;R:9;}s:34:"1230:tebhc-tebhc.rqvgteczrzorefuvc";a:2:{i:0;R:16;i:1;R:9;}s:32:"1230:tebhc-tebhc.rqvgvasbezngvba";a:2:{i:0;R:16;i:1;R:9;}s:25:"1230:tebhc-tebhc.rqvgznt2";a:2:{i:0;R:16;i:1;R:9;}s:39:"1230:tebhc-tebhc.rqvgznt2ergheagbqrgnvy";a:2:{i:0;R:16;i:1;R:9;}s:37:"1230:tebhc-tebhc.rqvgznt2ergheagbrqvg";a:2:{i:0;R:16;i:1;R:9;}s:25:"1230:tebhc-tebhc.rqvgznt3";a:2:{i:0;R:16;i:1;R:9;}s:31:"1230:tebhc-tebhc.rqvgzrzorefuvc";a:2:{i:0;R:16;i:1;R:9;}s:25:"1230:tebhc-tebhc.rqvgzft1";a:2:{i:0;R:16;i:1;R:9;}s:37:"1230:tebhc-tebhc.rqvgbssvprzrzorefuvc";a:2:{i:0;R:16;i:1;R:9;}s:27:"1230:tebhc-tebhc.rqvgfgnghf";a:2:{i:0;R:16;i:1;R:9;}s:37:"1230:tebhc-tebhc.rqvgpragrezrzorefuvc";a:2:{i:0;R:16;i:1;R:9;}s:37:"1230:tebhc-tebhc.rqvgtebhcvasbezngvba";a:2:{i:0;R:16;i:1;R:9;}s:32:"1230:tebhc-tebhc.rqvgtebhcfgnghf";a:2:{i:0;R:16;i:1;R:9;}s:35:"1230:tebhc-tebhc.rqvgzrrgvatpurqhyr";a:2:{i:0;R:16;i:1;R:9;}s:31:"1230:tebhc-tebhc.rqvgcerivrjzft";a:2:{i:0;R:16;i:1;R:9;}s:22:"1230:tebhc-tebhc.ragre";a:2:{i:0;R:16;i:1;R:9;}s:32:"1230:tebhc-tebhc.ragrenaqcebprrq";a:2:{i:0;R:16;i:1;R:9;}s:31:"1230:tebhc-tebhc.ragrenaqfrnepu";a:2:{i:0;R:16;i:1;R:9;}s:33:"1230:tebhc-tebhc.ragrevasbezngvba";a:2:{i:0;R:16;i:1;R:9;}s:23:"1230:tebhc-tebhc.ragren";a:2:{i:0;R:16;i:1;R:9;}s:38:"1230:tebhc-tebhc.ragretebhcvasbezngvba";a:2:{i:0;R:16;i:1;R:9;}s:27:"1230:tebhc-tebhc.rkgreanyvq";a:2:{i:0;R:16;i:1;R:9;}s:24:"1230:tebhc-tebhc.srrglcr";a:2:{i:0;R:16;i:1;R:9;}s:22:"1230:tebhc-tebhc.tebhc";a:2:{i:0;R:16;i:1;R:9;}s:28:"1230:tebhc-tebhc.tebhcqrgnvy";a:2:{i:0;R:16;i:1;R:9;}s:32:"1230:tebhc-tebhc.tebhczrzorefuvc";a:2:{i:0;R:16;i:1;R:9;}s:34:"1230:tebhc-tebhc.tebhcnccebinyqngr";a:2:{i:0;R:16;i:1;R:9;}s:29:"1230:tebhc-tebhc.tebhcpunetrf";a:2:{i:0;R:16;i:1;R:9;}s:31:"1230:tebhc-tebhc.tebhcqrgnvyzft";a:2:{i:0;R:16;i:1;R:9;}s:32:"1230:tebhc-tebhc.tebhcqrgnvyzft1";a:2:{i:0;R:16;i:1;R:9;}s:32:"1230:tebhc-tebhc.tebhcqrgnvyzft2";a:2:{i:0;R:16;i:1;R:9;}s:35:"1230:tebhc-tebhc.tebhcqrgnvyivrjzft";a:2:{i:0;R:16;i:1;R:9;}s:29:"1230:tebhc-tebhc.tebhcqrgnvyf";a:2:{i:0;R:16;i:1;R:9;}s:31:"1230:tebhc-tebhc.tebhcshaqybnaf";a:2:{i:0;R:16;i:1;R:9;}s:33:"1230:tebhc-tebhc.tebhcvasbezngvba";a:2:{i:0;R:16;i:1;R:9;}s:26:"1230:tebhc-tebhc.tebhcanzr";a:2:{i:0;R:16;i:1;R:9;}s:29:"1230:tebhc-tebhc.tebhcanzrzft";a:2:{i:0;R:16;i:1;R:9;}s:41:"1230:tebhc-tebhc.tebhcfrnepu_vafgehpgvbaf";a:2:{i:0;R:16;i:1;R:9;}s:29:"1230:tebhc-tebhc.tebhcgenvarq";a:2:{i:0;R:16;i:1;R:9;}s:31:"1230:tebhc-tebhc.tebhcgenvarqba";a:2:{i:0;R:16;i:1;R:9;}s:23:"1230:tebhc-tebhc.unfubs";a:2:{i:0;R:16;i:1;R:9;}s:26:"1230:tebhc-tebhc.vafhenapr";a:2:{i:0;R:16;i:1;R:9;}s:21:"1230:tebhc-tebhc.ybna";a:2:{i:0;R:16;i:1;R:9;}s:33:"1230:tebhc-tebhc.ybnaplpyrpbhagre";a:2:{i:0;R:16;i:1;R:9;}s:28:"1230:tebhc-tebhc.ybnabssvpre";a:2:{i:0;R:16;i:1;R:9;}s:31:"1230:tebhc-tebhc.ybnabssvprezft";a:2:{i:0;R:16;i:1;R:9;}s:36:"1230:tebhc-tebhc.ybnabssvprenffvtarq";a:2:{i:0;R:16;i:1;R:9;}s:37:"1230:tebhc-tebhc.ybpngvbabsgurzrrgvat";a:2:{i:0;R:16;i:1;R:9;}s:28:"1230:tebhc-tebhc.znantrtebhc";a:2:{i:0;R:16;i:1;R:9;}s:24:"1230:tebhc-tebhc.zrrgvat";a:2:{i:0;R:16;i:1;R:9;}s:31:"1230:tebhc-tebhc.zrrgvatqrgnvyf";a:2:{i:0;R:16;i:1;R:9;}s:25:"1230:tebhc-tebhc.zrrgvatf";a:2:{i:0;R:16;i:1;R:9;}s:32:"1230:tebhc-tebhc.zrrgvatfpurqhyr";a:2:{i:0;R:16;i:1;R:9;}s:38:"1230:tebhc-tebhc.zrzorefuvcabgerdhverq";a:2:{i:0;R:16;i:1;R:9;}s:31:"1230:tebhc-tebhc.zsvvasbezngvba";a:2:{i:0;R:16;i:1;R:9;}s:21:"1230:tebhc-tebhc.anzr";a:2:{i:0;R:16;i:1;R:9;}s:35:"1230:tebhc-tebhc.anzrnaqpyvpxfrnepu";a:2:{i:0;R:16;i:1;R:9;}s:32:"1230:tebhc-tebhc.anzrgbpunatrgur";a:2:{i:0;R:16;i:1;R:9;}s:20:"1230:tebhc-tebhc.arj";a:2:{i:0;R:16;i:1;R:9;}s:26:"1230:tebhc-tebhc.arjfgnghf";a:2:{i:0;R:16;i:1;R:9;}s:35:"1230:tebhc-tebhc.abpyvragfninvynoyr";a:2:{i:0;R:16;i:1;R:9;}s:21:"1230:tebhc-tebhc.abar";a:2:{i:0;R:16;i:1;R:9;}s:33:"1230:tebhc-tebhc.ababgrfninvynoyr";a:2:{i:0;R:16;i:1;R:9;}s:21:"1230:tebhc-tebhc.abgr";a:2:{i:0;R:16;i:1;R:9;}s:20:"1230:tebhc-tebhc.abj";a:2:{i:0;R:16;i:1;R:9;}s:31:"1230:tebhc-tebhc.bssvpvnyfgnghf";a:2:{i:0;R:16;i:1;R:9;}s:39:"1230:tebhc-tebhc.bssvpvnygvgyrfnffvtarq";a:2:{i:0;R:16;i:1;R:9;}s:31:"1230:tebhc-tebhc.bcraarjnppbhag";a:2:{i:0;R:16;i:1;R:9;}s:35:"1230:tebhc-tebhc.cresbeznapruvfgbel";a:2:{i:0;R:16;i:1;R:9;}s:28:"1230:tebhc-tebhc.crevbqvpvgl";a:2:{i:0;R:16;i:1;R:9;}s:37:"1230:tebhc-tebhc.crefbaaryvasbezngvba";a:2:{i:0;R:16;i:1;R:9;}s:27:"1230:tebhc-tebhc.cyrnfrabgr";a:2:{i:0;R:16;i:1;R:9;}s:26:"1230:tebhc-tebhc.cbegsbyvb";a:2:{i:0;R:16;i:1;R:9;}s:27:"1230:tebhc-tebhc.cbfgnypbqr";a:2:{i:0;R:16;i:1;R:9;}s:30:"1230:tebhc-tebhc.cbfgnypbqrzft";a:2:{i:0;R:16;i:1;R:9;}s:25:"1230:tebhc-tebhc.cbfgrqol";a:2:{i:0;R:16;i:1;R:9;}s:24:"1230:tebhc-tebhc.cerivrj";a:2:{i:0;R:16;i:1;R:9;}s:35:"1230:tebhc-tebhc.cerivrjvasbezngvba";a:2:{i:0;R:16;i:1;R:9;}s:39:"1230:tebhc-tebhc.cerivrjperngrcntrurnq1";a:2:{i:0;R:16;i:1;R:9;}s:39:"1230:tebhc-tebhc.cerivrjperngrcntrurnq2";a:2:{i:0;R:16;i:1;R:9;}s:40:"1230:tebhc-tebhc.cerivrjtebhcvasbezngvba";a:2:{i:0;R:16;i:1;R:9;}s:27:"1230:tebhc-tebhc.cebtenzzft";a:2:{i:0;R:16;i:1;R:9;}s:25:"1230:tebhc-tebhc.cebtenzf";a:2:{i:0;R:16;i:1;R:9;}s:34:"1230:tebhc-tebhc.erp_perngvba_qngr";a:2:{i:0;R:16;i:1;R:9;}s:26:"1230:tebhc-tebhc.erpnppnpg";a:2:{i:0;R:16;i:1;R:9;}s:28:"1230:tebhc-tebhc.erpragabgrf";a:2:{i:0;R:16;i:1;R:9;}s:37:"1230:tebhc-tebhc.erpheevatnppbhagsrrf";a:2:{i:0;R:16;i:1;R:9;}s:23:"1230:tebhc-tebhc.erzbir";a:2:{i:0;R:16;i:1;R:9;}s:38:"1230:tebhc-tebhc.erzbirtebhczrzorefuvc";a:2:{i:0;R:16;i:1;R:9;}s:33:"1230:tebhc-tebhc.erzbirzrzorefuvc";a:2:{i:0;R:16;i:1;R:9;}s:32:"1230:tebhc-tebhc.erivrjnaqfhozvg";a:2:{i:0;R:16;i:1;R:9;}s:24:"1230:tebhc-tebhc.fnivatf";a:2:{i:0;R:16;i:1;R:9;}s:32:"1230:tebhc-tebhc.fpurqhyrzrrgvat";a:2:{i:0;R:16;i:1;R:9;}s:27:"1230:tebhc-tebhc.frnepuzft1";a:2:{i:0;R:16;i:1;R:9;}s:28:"1230:tebhc-tebhc.frrnyyabgrf";a:2:{i:0;R:16;i:1;R:9;}s:23:"1230:tebhc-tebhc.fryrpg";a:2:{i:0;R:16;i:1;R:9;}s:25:"1230:tebhc-tebhc.fryrpgbe";a:2:{i:0;R:16;i:1;R:9;}s:21:"1230:tebhc-tebhc.fvmr";a:2:{i:0;R:16;i:1;R:9;}s:24:"1230:tebhc-tebhc.fgnegrq";a:2:{i:0;R:16;i:1;R:9;}s:22:"1230:tebhc-tebhc.fgngr";a:2:{i:0;R:16;i:1;R:9;}s:25:"1230:tebhc-tebhc.fgngrzft";a:2:{i:0;R:16;i:1;R:9;}s:23:"1230:tebhc-tebhc.fgnghf";a:2:{i:0;R:16;i:1;R:9;}s:24:"1230:tebhc-tebhc.fgnghf1";a:2:{i:0;R:16;i:1;R:9;}s:27:"1230:tebhc-tebhc.fgnghfzft1";a:2:{i:0;R:16;i:1;R:9;}s:27:"1230:tebhc-tebhc.fgnghfzft2";a:2:{i:0;R:16;i:1;R:9;}s:27:"1230:tebhc-tebhc.fgnghfzft3";a:2:{i:0;R:16;i:1;R:9;}s:34:"1230:tebhc-tebhc.fgnghfcerivrjzft1";a:2:{i:0;R:16;i:1;R:9;}s:34:"1230:tebhc-tebhc.fgnghfcerivrjzft2";a:2:{i:0;R:16;i:1;R:9;}s:34:"1230:tebhc-tebhc.fgnghfcerivrjzft3";a:2:{i:0;R:16;i:1;R:9;}s:34:"1230:tebhc-tebhc.fgnghfcerivrjzft4";a:2:{i:0;R:16;i:1;R:9;}s:35:"1230:tebhc-tebhc.fhttrfgrqarkgfgrcf";a:2:{i:0;R:16;i:1;R:9;}s:29:"1230:tebhc-tebhc.fhergbqryrgr";a:2:{i:0;R:16;i:1;R:9;}s:33:"1230:tebhc-tebhc.fhergbgenafsregb";a:2:{i:0;R:16;i:1;R:9;}s:24:"1230:tebhc-tebhc.fheirlf";a:2:{i:0;R:16;i:1;R:9;}s:25:"1230:tebhc-tebhc.flfgrzvq";a:2:{i:0;R:16;i:1;R:9;}s:26:"1230:tebhc-tebhc.gryrcubar";a:2:{i:0;R:16;i:1;R:9;}s:31:"1230:tebhc-tebhc.gbgnycbegsbyvb";a:2:{i:0;R:16;i:1;R:9;}s:26:"1230:tebhc-tebhc.genvarqba";a:2:{i:0;R:16;i:1;R:9;}s:31:"1230:tebhc-tebhc.genvavatfgnghf";a:2:{i:0;R:16;i:1;R:9;}s:25:"1230:tebhc-tebhc.genafsre";a:2:{i:0;R:16;i:1;R:9;}s:31:"1230:tebhc-tebhc.genafsreoenapu";a:2:{i:0;R:16;i:1;R:9;}s:35:"1230:tebhc-tebhc.genafsreoenapuzft1";a:2:{i:0;R:16;i:1;R:9;}s:35:"1230:tebhc-tebhc.genafsreoenapuzft2";a:2:{i:0;R:16;i:1;R:9;}s:35:"1230:tebhc-tebhc.genafsreoenapuzft3";a:2:{i:0;R:16;i:1;R:9;}s:32:"1230:tebhc-tebhc.genafsrepbasvez";a:2:{i:0;R:16;i:1;R:9;}s:30:"1230:tebhc-tebhc.genafsretebhc";a:2:{i:0;R:16;i:1;R:9;}s:29:"1230:tebhc-tebhc.hcpbzpunetrf";a:2:{i:0;R:16;i:1;R:9;}s:21:"1230:tebhc-tebhc.ivrj";a:2:{i:0;R:16;i:1;R:9;}s:39:"1230:tebhc-tebhc.ivrjnyynppbhagnpgvivgl";a:2:{i:0;R:16;i:1;R:9;}s:32:"1230:tebhc-tebhc.ivrjtebhcqrgnvy";a:2:{i:0;R:16;i:1;R:9;}s:32:"1230:tebhc-tebhc.ivrjgekauvfgbel";a:2:{i:0;R:16;i:1;R:9;}s:34:"1230:tebhc-tebhc.ivrjnyynpgvivgvrf";a:2:{i:0;R:16;i:1;R:9;}s:38:"1230:tebhc-tebhc.ivrjnyypybfrqnppbhagf";a:2:{i:0;R:16;i:1;R:9;}s:30:"1230:tebhc-tebhc.ivrjpunatrybt";a:2:{i:0;R:16;i:1;R:9;}s:28:"1230:tebhc-tebhc.ivrjqrgnvyf";a:2:{i:0;R:16;i:1;R:9;}s:36:"1230:tebhc-tebhc.ivrjtebhcqrgnvyfabj";a:2:{i:0;R:16;i:1;R:9;}s:35:"1230:tebhc-tebhc.ivrjuvfgbevpnyqngn";a:2:{i:0;R:16;i:1;R:9;}s:22:"1230:tebhc-tebhc.jnvir";a:2:{i:0;R:16;i:1;R:9;}s:26:"1230:tebhc-ohggba.nccebirq";a:2:{i:0;R:16;i:1;R:9;}s:24:"1230:tebhc-ohggba.pnapry";a:2:{i:0;R:16;i:1;R:9;}s:26:"1230:tebhc-ohggba.pbagvahr";a:2:{i:0;R:16;i:1;R:9;}s:28:"1230:tebhc-ohggba.rqvgfgnghf";a:2:{i:0;R:16;i:1;R:9;}s:25:"1230:tebhc-ohggba.cerivrj";a:2:{i:0;R:16;i:1;R:9;}s:25:"1230:tebhc-ohggba.cebprrq";a:2:{i:0;R:16;i:1;R:9;}s:30:"1230:tebhc-ohggba.fnirsbeyngre";a:2:{i:0;R:16;i:1;R:9;}s:24:"1230:tebhc-ohggba.frnepu";a:2:{i:0;R:16;i:1;R:9;}s:24:"1230:tebhc-ohggba.fhozvg";a:2:{i:0;R:16;i:1;R:9;}s:35:"1230:tebhc-ohggba.fhozvgsbenccebiny";a:2:{i:0;R:16;i:1;R:9;}s:37:"1230:tebhc-reebe.npgvivgl.abg.nyybjrq";a:2:{i:0;R:16;i:1;R:9;}s:36:"1230:tebhc-reebe.irefvbaabqbabgzngpu";a:2:{i:0;R:16;i:1;R:9;}s:49:"1230:tebhc-reebef.phfgbzre.pyvragunfnpgvirnppbhag";a:2:{i:0;R:16;i:1;R:9;}s:44:"1230:tebhc-reebef.phfgbzre.qhcyvpngrphfgbzre";a:2:{i:0;R:16;i:1;R:9;}s:47:"1230:tebhc-reebef.phfgbzre.qhcyvpngrcrevbqvpsrr";a:2:{i:0;R:16;i:1;R:9;}s:47:"1230:tebhc-reebef.phfgbzre.srrserdhraplzvfzngpu";a:2:{i:0;R:16;i:1;R:9;}s:43:"1230:tebhc-reebef.phfgbzre.unfnpgvirnppbhag";a:2:{i:0;R:16;i:1;R:9;}s:45:"1230:tebhc-reebef.phfgbzre.vainyvqybnabssvpre";a:2:{i:0;R:16;i:1;R:9;}s:41:"1230:tebhc-reebef.phfgbzre.vainyvqzrrgvat";a:2:{i:0;R:16;i:1;R:9;}s:51:"1230:tebhc-reebef.phfgbzre.zrrgvatserdhraplzvfzngpu";a:2:{i:0;R:16;i:1;R:9;}s:41:"1230:tebhc-reebef.phfgbzre.bssvprvanpgvir";a:2:{i:0;R:16;i:1;R:9;}s:41:"1230:tebhc-reebef.phfgbzre.cneragvanpgvir";a:2:{i:0;R:16;i:1;R:9;}s:45:"1230:tebhc-reebef.phfgbzre.fnzroenapugenafsre";a:2:{i:0;R:16;i:1;R:9;}s:54:"1230:tebhc-reebef.phfgbzre.fnzrcneraggenafsrerkprcgvba";a:2:{i:0;R:16;i:1;R:9;}s:50:"1230:tebhc-reebef.phfgbzre.fcrpvslphfgbzsvryqinyhr";a:2:{i:0;R:16;i:1;R:9;}s:42:"1230:tebhc-reebef.phfgbzre.phfgbzqngrsvryq";a:2:{i:0;R:16;i:1;R:9;}s:43:"1230:tebhc-reebef.phfgbzre.fcrpvslsrrnzbhag";a:2:{i:0;R:16;i:1;R:9;}s:45:"1230:tebhc-reebef.phfgbzre.fcrpvslybnabssvpre";a:2:{i:0;R:16;i:1;R:9;}s:41:"1230:tebhc-reebef.phfgbzre.fcrpvslzrrgvat";a:2:{i:0;R:16;i:1;R:9;}s:38:"1230:tebhc-reebef.phfgbzre.fcrpvslanzr";a:2:{i:0;R:16;i:1;R:9;}s:51:"1230:tebhc-reebef.tebhc.pyvragnpgvirnppbhagfcerfrag";a:2:{i:0;R:16;i:1;R:9;}s:44:"1230:tebhc-reebef.tebhc.pyvragvfngvgyrubyqre";a:2:{i:0;R:16;i:1;R:9;}s:50:"1230:tebhc-reebef.tebhc.tebhcnpgvirnppbhagfcerfrag";a:2:{i:0;R:16;i:1;R:9;}s:36:"1230:tebhc-reebef.vainyvqgenvarqqngr";a:2:{i:0;R:16;i:1;R:9;}s:33:"1230:tebhc-reebef.genvarqpurpxobk";a:2:{i:0;R:16;i:1;R:9;}s:35:"1230:tebhc-reebef.genvarqqngrarrqrq";a:2:{i:0;R:16;i:1;R:9;}s:45:"1230:tebhc-reebef.nffvtarqybnabssvpreerdhverq";a:2:{i:0;R:16;i:1;R:9;}s:32:"1230:tebhc-reebef.oenapuvanpgvir";a:2:{i:0;R:16;i:1;R:9;}s:32:"1230:tebhc-reebef.pragrevanpgvir";a:2:{i:0;R:16;i:1;R:9;}s:30:"1230:tebhc-reebef.qhcyvpngrsrr";a:2:{i:0;R:16;i:1;R:9;}s:32:"1230:tebhc-reebef.qhcyvpngrtebhc";a:2:{i:0;R:16;i:1;R:9;}s:29:"1230:tebhc-reebef.srrvanpgvir";a:2:{i:0;R:16;i:1;R:9;}s:35:"1230:tebhc-reebef.srrjvgubhgzrrgvat";a:2:{i:0;R:16;i:1;R:9;}s:25:"1230:tebhc-reebef.trarevp";a:2:{i:0;R:16;i:1;R:9;}s:39:"1230:tebhc-reebef.tebhcpyvragfnernpgvir";a:2:{i:0;R:16;i:1;R:9;}s:43:"1230:tebhc-reebef.tebhcpyvragfunfnpgvirybna";a:2:{i:0;R:16;i:1;R:9;}s:29:"1230:tebhc-reebef.tebhcperngr";a:2:{i:0;R:16;i:1;R:9;}s:40:"1230:tebhc-reebef.tebhcunfnpgvirnppbhagf";a:2:{i:0;R:16;i:1;R:9;}s:37:"1230:tebhc-reebef.tebhcvainyvqirefvba";a:2:{i:0;R:16;i:1;R:9;}s:45:"1230:tebhc-reebef.tebhcybnabssvpreabgnffvtarq";a:2:{i:0;R:16;i:1;R:9;}s:31:"1230:tebhc-reebef.tebhcabgsbhaq";a:2:{i:0;R:16;i:1;R:9;}s:29:"1230:tebhc-reebef.tebhchcqngr";a:2:{i:0;R:16;i:1;R:9;}s:45:"1230:tebhc-reebef.vzcbffvoyrgbperngrtebhcybna";a:2:{i:0;R:16;i:1;R:9;}s:37:"1230:tebhc-reebef.vapbzcyrgrpurpxyvfg";a:2:{i:0;R:16;i:1;R:9;}s:31:"1230:tebhc-reebef.vainyvqsrrnzg";a:2:{i:0;R:16;i:1;R:9;}s:37:"1230:tebhc-reebef.ybnabssvprevanpgvir";a:2:{i:0;R:16;i:1;R:9;}s:37:"1230:tebhc-reebef.ybnabssvpreerdhverq";a:2:{i:0;R:16;i:1;R:9;}s:49:"1230:tebhc-reebef.ybnabssvpreerdhverq_npgvirtebhc";a:2:{i:0;R:16;i:1;R:9;}s:27:"1230:tebhc-reebef.znaqngbel";a:2:{i:0;R:16;i:1;R:9;}s:33:"1230:tebhc-reebef.znaqngbelfryrpg";a:2:{i:0;R:16;i:1;R:9;}s:25:"1230:tebhc-reebef.znfxzft";a:2:{i:0;R:16;i:1;R:9;}s:27:"1230:tebhc-reebef.znkyratgu";a:2:{i:0;R:16;i:1;R:9;}s:36:"1230:tebhc-reebef.zrrgvatabgnffvtarq";a:2:{i:0;R:16;i:1;R:9;}s:34:"1230:tebhc-reebef.zrrgvateerdhverq";a:2:{i:0;R:16;i:1;R:9;}s:32:"1230:tebhc-reebef.abfrnepufgevat";a:2:{i:0;R:16;i:1;R:9;}s:24:"1230:tebhc-reebef.cersvk";a:2:{i:0;R:16;i:1;R:9;}s:37:"1230:tebhc-reebef.erdhverqphfgbzsvryq";a:2:{i:0;R:16;i:1;R:9;}s:28:"1230:tebhc-reebef.fnzroenapu";a:2:{i:0;R:16;i:1;R:9;}s:28:"1230:tebhc-reebef.fnzrcnerag";a:2:{i:0;R:16;i:1;R:9;}s:24:"1230:tebhc-reebef.fhssvk";a:2:{i:0;R:16;i:1;R:9;}s:29:"1230:tebhc-reebef.genvarqqngr";a:2:{i:0;R:16;i:1;R:9;}s:40:"1230:tebhc-reebef.genafsrerk_npgvirybnaf";a:2:{i:0;R:16;i:1;R:9;}s:48:"1230:tebhc-reebef.genafsrerk_pyvragunfnpgvirybna";a:2:{i:0;R:16;i:1;R:9;}s:49:"1230:tebhc-reebef.genafsrerk_pyvraggenafsresnvyrq";a:2:{i:0;R:16;i:1;R:9;}s:34:"1230:tebhc-reebef.haxabjarkprcgvba";a:2:{i:0;R:16;i:1;R:9;}s:51:"1230:tebhc-rkprcgvba.senzrjbex.pbapheeraplrkprcgvba";a:2:{i:0;R:16;i:1;R:9;}s:52:"1230:tebhc-rkprcgvba.senzrjbex.qbhoyrfhozvgrkprcgvba";a:2:{i:0;R:16;i:1;R:9;}s:59:"1230:tebhc-rkprcgvba.senzrjbex.svryqpbasvthengvba.znaqngbel";a:2:{i:0;R:16;i:1;R:9;}s:29:"1230:tebhc-tebhc.nccylpunetrf";a:2:{i:0;R:16;i:1;R:9;}s:29:"1230:tebhc-tebhc.nccylcnlzrag";a:2:{i:0;R:16;i:1;R:9;}s:37:"1230:tebhc-jneavat.abpyvragfnffvtarq1";a:2:{i:0;R:16;i:1;R:9;}s:37:"1230:tebhc-jneavat.abpyvragfnffvtarq2";a:2:{i:0;R:16;i:1;R:9;}s:37:"1230:tebhc-jneavat.abpyvragfnffvtarq3";a:2:{i:0;R:16;i:1;R:9;}s:14:"1230:ubyvqnl-1";a:2:{i:0;s:17:"out-mifos-holiday";i:1;R:9;}s:37:"1230:ubyvqnl-ps.ybbxhcragvgl.ragvglvq";a:2:{i:0;R:29847;i:1;R:9;}s:27:"1230:ubyvqnl-psqrs.ragvglvq";a:2:{i:0;R:29847;i:1;R:9;}s:39:"1230:ubyvqnl-reebe.npgvivgl.abg.nyybjrq";a:2:{i:0;R:29847;i:1;R:9;}s:45:"1230:ubyvqnl-reebe.ubyvqnl.yriryabgpbasvtherq";a:2:{i:0;R:29847;i:1;R:9;}s:42:"1230:ubyvqnl-reebe.ubyvqnl.znaqngbel_svryq";a:2:{i:0;R:29847;i:1;R:9;}s:37:"1230:ubyvqnl-reebef.sebzqngrrkprcgvba";a:2:{i:0;R:29847;i:1;R:9;}s:53:"1230:ubyvqnl-reebef.ubyvqnl.ubyvqnlyriryabgpbasvtherq";a:2:{i:0;R:29847;i:1;R:9;}s:41:"1230:ubyvqnl-reebef.ubyvqnl.cneragvainyvq";a:2:{i:0;R:29847;i:1;R:9;}s:43:"1230:ubyvqnl-reebef.ubyvqnl.cneragabgnpgvir";a:2:{i:0;R:29847;i:1;R:9;}s:47:"1230:ubyvqnl-reebef.ubyvqnl.fubeganzr.zvayratgu";a:2:{i:0;R:29847;i:1;R:9;}s:51:"1230:ubyvqnl-reebef.ubyvqnl.hcqngvbauvrenepulsnvyrq";a:2:{i:0;R:29847;i:1;R:9;}s:26:"1230:ubyvqnl-reebef.cersvk";a:2:{i:0;R:29847;i:1;R:9;}s:26:"1230:ubyvqnl-reebef.fhssvk";a:2:{i:0;R:29847;i:1;R:9;}s:37:"1230:ubyvqnl-reebef.guehqngrrkprcgvba";a:2:{i:0;R:29847;i:1;R:9;}s:54:"1230:ubyvqnl-rkprcgvba.senzrjbex.qbhoyrfhozvgrkprcgvba";a:2:{i:0;R:29847;i:1;R:9;}s:61:"1230:ubyvqnl-rkprcgvba.senzrjbex.svryqpbasvthengvba.znaqngbel";a:2:{i:0;R:29847;i:1;R:9;}s:38:"1230:ubyvqnl-ubyvqnl.nccyvpnoyrbssvprf";a:2:{i:0;R:29847;i:1;R:9;}s:36:"1230:ubyvqnl-ubyvqnl.ubyvqnlsebzqngr";a:2:{i:0;R:29847;i:1;R:9;}s:32:"1230:ubyvqnl-ubyvqnl.ubyvqnlanzr";a:2:{i:0;R:29847;i:1;R:9;}s:41:"1230:ubyvqnl-ubyvqnl.ubyvqnlercnlzragehyr";a:2:{i:0;R:29847;i:1;R:9;}s:36:"1230:ubyvqnl-ubyvqnl.ubyvqnlguehqngr";a:2:{i:0;R:29847;i:1;R:9;}s:49:"1230:ubyvqnl-ubyvqnl.nqqerff.nqqerff1.erdhverqzft";a:2:{i:0;R:29847;i:1;R:9;}s:45:"1230:ubyvqnl-ubyvqnl.nqqerff.pvgl.erdhverqzft";a:2:{i:0;R:29847;i:1;R:9;}s:48:"1230:ubyvqnl-ubyvqnl.nqqerff.pbhagel.erdhverqzft";a:2:{i:0;R:29847;i:1;R:9;}s:51:"1230:ubyvqnl-ubyvqnl.nqqerff.cbfgnypbqr.erdhverqzft";a:2:{i:0;R:29847;i:1;R:9;}s:46:"1230:ubyvqnl-ubyvqnl.nqqerff.fgngr.erdhverqzft";a:2:{i:0;R:29847;i:1;R:9;}s:29:"1230:ubyvqnl-ubyvqnl.nfgrevfx";a:2:{i:0;R:29847;i:1;R:9;}s:34:"1230:ubyvqnl-ubyvqnl.ohggba.pnapry";a:2:{i:0;R:29847;i:1;R:9;}s:32:"1230:ubyvqnl-ubyvqnl.ohggba.rqvg";a:2:{i:0;R:29847;i:1;R:9;}s:35:"1230:ubyvqnl-ubyvqnl.ohggba.cerivrj";a:2:{i:0;R:29847;i:1;R:9;}s:29:"1230:ubyvqnl-ubyvqnl.rqvggeka";a:2:{i:0;R:29847;i:1;R:9;}s:41:"1230:ubyvqnl-ubyvqnl.reebe.perngvbasnvyrq";a:2:{i:0;R:29847;i:1;R:9;}s:51:"1230:ubyvqnl-ubyvqnl.reebe.reebevaybnqvatznfgreqngn";a:2:{i:0;R:29847;i:1;R:9;}s:36:"1230:ubyvqnl-ubyvqnl.reebe.trgsnvyrq";a:2:{i:0;R:29847;i:1;R:9;}s:44:"1230:ubyvqnl-ubyvqnl.reebe.unfnpgvirpuvyqrea";a:2:{i:0;R:29847;i:1;R:9;}s:56:"1230:ubyvqnl-ubyvqnl.reebe.unfnpgvirubyvqnljvguguvfyriry";a:2:{i:0;R:29847;i:1;R:9;}s:45:"1230:ubyvqnl-ubyvqnl.reebe.unfnpgvircrefbaary";a:2:{i:0;R:29847;i:1;R:9;}s:37:"1230:ubyvqnl-ubyvqnl.reebe.ybnqsnvyrq";a:2:{i:0;R:29847;i:1;R:9;}s:41:"1230:ubyvqnl-ubyvqnl.reebe.hcqngvbasnvyrq";a:2:{i:0;R:29847;i:1;R:9;}s:50:"1230:ubyvqnl-ubyvqnl.reebe.hcqngvbauvrenepulsnvyrq";a:2:{i:0;R:29847;i:1;R:9;}s:46:"1230:ubyvqnl-ubyvqnl.sbezubyvqnlglcr.anzrrkvfg";a:2:{i:0;R:29847;i:1;R:9;}s:49:"1230:ubyvqnl-ubyvqnl.sbezubyvqnlglcr.cyrnfryryrpg";a:2:{i:0;R:29847;i:1;R:9;}s:48:"1230:ubyvqnl-ubyvqnl.sbezubyvqnlglcr.erdhverqzft";a:2:{i:0;R:29847;i:1;R:9;}s:51:"1230:ubyvqnl-ubyvqnl.sbezubyvqnlglcr.fubeganzrrkvfg";a:2:{i:0;R:29847;i:1;R:9;}s:50:"1230:ubyvqnl-ubyvqnl.sbezcneragubyvqnl.erdhverqzft";a:2:{i:0;R:29847;i:1;R:9;}s:44:"1230:ubyvqnl-ubyvqnl.ubyvqnlanzr.qvfcynlanzr";a:2:{i:0;R:29847;i:1;R:9;}s:40:"1230:ubyvqnl-ubyvqnl.ubyvqnlanzr.znfxzft";a:2:{i:0;R:29847;i:1;R:9;}s:37:"1230:ubyvqnl-ubyvqnl.ubyvqnlfubeganzr";a:2:{i:0;R:29847;i:1;R:9;}s:32:"1230:ubyvqnl-ubyvqnl.ubyvqnlglcr";a:2:{i:0;R:29847;i:1;R:9;}s:39:"1230:ubyvqnl-ubyvqnl.ynorynqqubyvqnlabj";a:2:{i:0;R:29847;i:1;R:9;}s:32:"1230:ubyvqnl-ubyvqnl.ynorynqqarj";a:2:{i:0;R:29847;i:1;R:9;}s:39:"1230:ubyvqnl-ubyvqnl.ynorynqqarjubyvqnl";a:2:{i:0;R:29847;i:1;R:9;}s:42:"1230:ubyvqnl-ubyvqnl.ynorynqqarjubyvqnlabj";a:2:{i:0;R:29847;i:1;R:9;}s:45:"1230:ubyvqnl-ubyvqnl.ynorynqqvgvbavasbezngvba";a:2:{i:0;R:29847;i:1;R:9;}s:33:"1230:ubyvqnl-ubyvqnl.ynorynqqerff";a:2:{i:0;R:29847;i:1;R:9;}s:34:"1230:ubyvqnl-ubyvqnl.ynorynqqerff1";a:2:{i:0;R:29847;i:1;R:9;}s:34:"1230:ubyvqnl-ubyvqnl.ynorynqqerff2";a:2:{i:0;R:29847;i:1;R:9;}s:34:"1230:ubyvqnl-ubyvqnl.ynorynqqerff3";a:2:{i:0;R:29847;i:1;R:9;}s:37:"1230:ubyvqnl-ubyvqnl.ynorynernubyvqnl";a:2:{i:0;R:29847;i:1;R:9;}s:39:"1230:ubyvqnl-ubyvqnl.ynoryoenapuubyvqnl";a:2:{i:0;R:29847;i:1;R:9;}s:38:"1230:ubyvqnl-ubyvqnl.ynorypunatrfgnghf";a:2:{i:0;R:29847;i:1;R:9;}s:44:"1230:ubyvqnl-ubyvqnl.ynorypurpxyriryvapyhqrq";a:2:{i:0;R:29847;i:1;R:9;}s:30:"1230:ubyvqnl-ubyvqnl.ynorypvgl";a:2:{i:0;R:29847;i:1;R:9;}s:43:"1230:ubyvqnl-ubyvqnl.ynorypbzcyrgrgursvryqf";a:2:{i:0;R:29847;i:1;R:9;}s:33:"1230:ubyvqnl-ubyvqnl.ynorypbhagel";a:2:{i:0;R:29847;i:1;R:9;}s:45:"1230:ubyvqnl-ubyvqnl.ynoryperngrqfhpprffshyyl";a:2:{i:0;R:29847;i:1;R:9;}s:41:"1230:ubyvqnl-ubyvqnl.ynoryrqvgubyvqnlvasb";a:2:{i:0;R:29847;i:1;R:9;}s:49:"1230:ubyvqnl-ubyvqnl.ynoryragreubyvqnlvasbezngvba";a:2:{i:0;R:29847;i:1;R:9;}s:50:"1230:ubyvqnl-ubyvqnl.ynorysvryqfznexrqjvgunfgrevfx";a:2:{i:0;R:29847;i:1;R:9;}s:37:"1230:ubyvqnl-ubyvqnl.ynoryurnqubyvqnl";a:2:{i:0;R:29847;i:1;R:9;}s:40:"1230:ubyvqnl-ubyvqnl.ynoryubyvqnlnqqerff";a:2:{i:0;R:29847;i:1;R:9;}s:47:"1230:ubyvqnl-ubyvqnl.ynoryubyvqnlnffvtarqahzore";a:2:{i:0;R:29847;i:1;R:9;}s:37:"1230:ubyvqnl-ubyvqnl.ynoryubyvqnlpbqr";a:2:{i:0;R:29847;i:1;R:9;}s:51:"1230:ubyvqnl-ubyvqnl.ynoryubyvqnlperngrqvafgehpgvba";a:2:{i:0;R:29847;i:1;R:9;}s:40:"1230:ubyvqnl-ubyvqnl.ynoryubyvqnlqrgnvyf";a:2:{i:0;R:29847;i:1;R:9;}s:44:"1230:ubyvqnl-ubyvqnl.ynoryubyvqnlvasbezngvba";a:2:{i:0;R:29847;i:1;R:9;}s:37:"1230:ubyvqnl-ubyvqnl.ynoryubyvqnlanzr";a:2:{i:0;R:29847;i:1;R:9;}s:42:"1230:ubyvqnl-ubyvqnl.ynoryubyvqnlfubeganzr";a:2:{i:0;R:29847;i:1;R:9;}s:37:"1230:ubyvqnl-ubyvqnl.ynoryubyvqnlglcr";a:2:{i:0;R:29847;i:1;R:9;}s:41:"1230:ubyvqnl-ubyvqnl.ynoryubyvqnlfsbelrne";a:2:{i:0;R:29847;i:1;R:9;}s:35:"1230:ubyvqnl-ubyvqnl.ynoryyvaxnqzva";a:2:{i:0;R:29847;i:1;R:9;}s:39:"1230:ubyvqnl-ubyvqnl.ynoryyvaxpyvpxurer";a:2:{i:0;R:29847;i:1;R:9;}s:38:"1230:ubyvqnl-ubyvqnl.ynoryyvaxubyvqnlf";a:2:{i:0;R:29847;i:1;R:9;}s:56:"1230:ubyvqnl-ubyvqnl.ynoryyvaxyvfgbetnavmngvbanyubyvqnlf";a:2:{i:0;R:29847;i:1;R:9;}s:42:"1230:ubyvqnl-ubyvqnl.ynoryyvaxivrjubyvqnlf";a:2:{i:0;R:29847;i:1;R:9;}s:58:"1230:ubyvqnl-ubyvqnl.ynoryyvaxivrjubyvqnlfbetnavmngvbajvqr";a:2:{i:0;R:29847;i:1;R:9;}s:48:"1230:ubyvqnl-ubyvqnl.ynoryyvaxivrjbssvprubyvqnlf";a:2:{i:0;R:29847;i:1;R:9;}s:56:"1230:ubyvqnl-ubyvqnl.ynoryyvaxivrjbetnavmngvbanyubyvqnlf";a:2:{i:0;R:29847;i:1;R:9;}s:47:"1230:ubyvqnl-ubyvqnl.ynoryznaqngbelvafgehpgvbaf";a:2:{i:0;R:29847;i:1;R:9;}s:37:"1230:ubyvqnl-ubyvqnl.ynoryznkzvayriry";a:2:{i:0;R:29847;i:1;R:9;}s:28:"1230:ubyvqnl-ubyvqnl.ynoryab";a:2:{i:0;R:29847;i:1;R:9;}s:30:"1230:ubyvqnl-ubyvqnl.ynoryabgr";a:2:{i:0;R:29847;i:1;R:9;}s:41:"1230:ubyvqnl-ubyvqnl.ynoryabgrvafgehpgvba";a:2:{i:0;R:29847;i:1;R:9;}s:39:"1230:ubyvqnl-ubyvqnl.ynorycneragubyvqnl";a:2:{i:0;R:29847;i:1;R:9;}s:36:"1230:ubyvqnl-ubyvqnl.ynorycyrnfrabgr";a:2:{i:0;R:29847;i:1;R:9;}s:36:"1230:ubyvqnl-ubyvqnl.ynorycbfgnypbqr";a:2:{i:0;R:29847;i:1;R:9;}s:33:"1230:ubyvqnl-ubyvqnl.ynorycerfrag";a:2:{i:0;R:29847;i:1;R:9;}s:40:"1230:ubyvqnl-ubyvqnl.ynorycerivrjubyvqnl";a:2:{i:0;R:29847;i:1;R:9;}s:51:"1230:ubyvqnl-ubyvqnl.ynorycerivrjubyvqnlvasbezngvba";a:2:{i:0;R:29847;i:1;R:9;}s:41:"1230:ubyvqnl-ubyvqnl.ynoryertvbanyubyvqnl";a:2:{i:0;R:29847;i:1;R:9;}s:41:"1230:ubyvqnl-ubyvqnl.ynoryerivrjnaqfhozvg";a:2:{i:0;R:29847;i:1;R:9;}s:31:"1230:ubyvqnl-ubyvqnl.ynoryfgngr";a:2:{i:0;R:29847;i:1;R:9;}s:32:"1230:ubyvqnl-ubyvqnl.ynoryfgnghf";a:2:{i:0;R:29847;i:1;R:9;}s:44:"1230:ubyvqnl-ubyvqnl.ynoryfhoertvbanyubyvqnl";a:2:{i:0;R:29847;i:1;R:9;}s:35:"1230:ubyvqnl-ubyvqnl.ynorygryrcubar";a:2:{i:0;R:29847;i:1;R:9;}s:50:"1230:ubyvqnl-ubyvqnl.ynoryivrjubyvqnlnqqarjubyvqnl";a:2:{i:0;R:29847;i:1;R:9;}s:44:"1230:ubyvqnl-ubyvqnl.ynoryivrjubyvqnlqrgnvyf";a:2:{i:0;R:29847;i:1;R:9;}s:46:"1230:ubyvqnl-ubyvqnl.ynoryivrjubyvqnluvrenepul";a:2:{i:0;R:29847;i:1;R:9;}s:48:"1230:ubyvqnl-ubyvqnl.ynoryivrjubyvqnlvafgehpgvba";a:2:{i:0;R:29847;i:1;R:9;}s:40:"1230:ubyvqnl-ubyvqnl.znaqngbel_fryrpgobk";a:2:{i:0;R:29847;i:1;R:9;}s:38:"1230:ubyvqnl-ubyvqnl.znaqngbel_grkgobk";a:2:{i:0;R:29847;i:1;R:9;}s:44:"1230:ubyvqnl-ubyvqnl.ahzorebszrzorefcretebhc";a:2:{i:0;R:29847;i:1;R:9;}s:45:"1230:ubyvqnl-ubyvqnl.ahzorebszrzorefcrexraqen";a:2:{i:0;R:29847;i:1;R:9;}s:34:"1230:ubyvqnl-ubyvqnl.cneragubyvqnl";a:2:{i:0;R:29847;i:1;R:9;}s:42:"1230:ubyvqnl-ubyvqnl.fubeganzr.qvfcynlanzr";a:2:{i:0;R:29847;i:1;R:9;}s:26:"1230:ubyvqnl-ubyvqnl.gvgyr";a:2:{i:0;R:29847;i:1;R:9;}s:65:"1230:ybna--------------------------------------------------------";a:2:{i:0;R:19;i:1;R:9;}s:14:"1230:ybna-qngr";a:2:{i:0;R:19;i:1;R:9;}s:21:"1230:ybna-qrfpevcgvba";a:2:{i:0;R:19;i:1;R:9;}s:17:"1230:ybna-qhrqngr";a:2:{i:0;R:19;i:1;R:9;}s:14:"1230:ybna-srrf";a:2:{i:0;R:19;i:1;R:9;}s:15:"1230:ybna-svryq";a:2:{i:0;R:19;i:1;R:9;}s:21:"1230:ybna-vafgnyyzrag";a:2:{i:0;R:19;i:1;R:9;}s:18:"1230:ybna-vagrerfg";a:2:{i:0;R:19;i:1;R:9;}s:30:"1230:ybna-ybna.pbyyngrenyabgrf";a:2:{i:0;R:19;i:1;R:9;}s:29:"1230:ybna-ybna.pbyyngrenyglcr";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.checbfrbsybna";a:2:{i:0;R:19;i:1;R:9;}s:19:"1230:ybna-arjfgnghf";a:2:{i:0;R:19;i:1;R:9;}s:18:"1230:ybna-arjinyhr";a:2:{i:0;R:19;i:1;R:9;}s:19:"1230:ybna-byqfgnghf";a:2:{i:0;R:19;i:1;R:9;}s:18:"1230:ybna-byqinyhr";a:2:{i:0;R:19;i:1;R:9;}s:19:"1230:ybna-cevapvcny";a:2:{i:0;R:19;i:1;R:9;}s:15:"1230:ybna-gbgny";a:2:{i:0;R:19;i:1;R:9;}s:14:"1230:ybna-hfre";a:2:{i:0;R:19;i:1;R:9;}s:24:"1230:ybna-nppbhagf.pbyba";a:2:{i:0;R:19;i:1;R:9;}s:31:"1230:ybna-nppbhagf.qngr_bs_geka";a:2:{i:0;R:19;i:1;R:9;}s:27:"1230:ybna-nppbhagf.rqvggeka";a:2:{i:0;R:19;i:1;R:9;}s:30:"1230:ybna-nppbhagf.erprvcgqngr";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-nppbhagf.erprvcgvq";a:2:{i:0;R:19;i:1;R:9;}s:36:"1230:ybna-reebe.npgvivgl.abg.nyybjrq";a:2:{i:0;R:19;i:1;R:9;}s:35:"1230:ybna-reebe.vapbzcyrgrpurpxyvfg";a:2:{i:0;R:19;i:1;R:9;}s:38:"1230:ybna-reebe.fgnghfpunatrabgnyybjrq";a:2:{i:0;R:19;i:1;R:9;}s:35:"1230:ybna-reebe.irefvbaabqbabgzngpu";a:2:{i:0;R:19;i:1;R:9;}s:48:"1230:ybna-reebef.nppbhag.fcrpvslphfgbzsvryqinyhr";a:2:{i:0;R:19;i:1;R:9;}s:40:"1230:ybna-reebef.nppbhag.phfgbzqngrsvryq";a:2:{i:0;R:19;i:1;R:9;}s:33:"1230:ybna-reebef.nyyrnfgbarerpbeq";a:2:{i:0;R:19;i:1;R:9;}s:67:"1230:ybna-reebef.pnaabgperngrybna.orpnhfr.pyvragfnerperngrqvashgher";a:2:{i:0;R:19;i:1;R:9;}s:63:"1230:ybna-reebef.pnaabgqvfohefrybna.orpnhfr.bgureybnafnernpgvir";a:2:{i:0;R:19;i:1;R:9;}s:60:"1230:ybna-reebef.pnaabgqvfohefrybna.orpnhfr.havgrzvfrqernfba";a:2:{i:0;R:19;i:1;R:9;}s:58:"1230:ybna-reebef.pnaabgqvfohefrybna.orpnhfr.qvfohefrsnvyrq";a:2:{i:0;R:19;i:1;R:9;}s:36:"1230:ybna-reebef.phfgbzreabgfryrpgrq";a:2:{i:0;R:19;i:1;R:9;}s:29:"1230:ybna-reebef.qngrzvfzngpu";a:2:{i:0;R:19;i:1;R:9;}s:30:"1230:ybna-reebef.qrpvznysbezng";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-reebef.qrszvaznk";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-reebef.qbhoyr";a:2:{i:0;R:19;i:1;R:9;}s:38:"1230:ybna-reebef.rzvglcr_abg_fhccbegrq";a:2:{i:0;R:19;i:1;R:9;}s:27:"1230:ybna-reebef.rkgreanyvq";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-reebef.srrfpurqhyr";a:2:{i:0;R:19;i:1;R:9;}s:27:"1230:ybna-reebef.shgherqngr";a:2:{i:0;R:19;i:1;R:9;}s:24:"1230:ybna-reebef.trarevp";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-reebef.tenprcrevbq";a:2:{i:0;R:19;i:1;R:9;}s:38:"1230:ybna-reebef.tenprcrevbqcebqhpgqrs";a:2:{i:0;R:19;i:1;R:9;}s:25:"1230:ybna-reebef.tenprcre";a:2:{i:0;R:19;i:1;R:9;}s:38:"1230:ybna-reebef.vaqvivqhnynzbhagsvryq";a:2:{i:0;R:19;i:1;R:9;}s:45:"1230:ybna-reebef.vaqvivqhnychecbfrbsybnasvryq";a:2:{i:0;R:19;i:1;R:9;}s:44:"1230:ybna-reebef.vaqvivqhnyfbheprbsshaqsvryq";a:2:{i:0;R:19;i:1;R:9;}s:24:"1230:ybna-reebef.vagrtre";a:2:{i:0;R:19;i:1;R:9;}s:47:"1230:ybna-reebef.vagrerfgqrqphgrq_cevapvcnyynfg";a:2:{i:0;R:19;i:1;R:9;}s:46:"1230:ybna-reebef.vagrerfgqrqhpgrq_vainyvqtenpr";a:2:{i:0;R:19;i:1;R:9;}s:40:"1230:ybna-reebef.vainyvqqvfohefrzragqngr";a:2:{i:0;R:19;i:1;R:9;}s:46:"1230:ybna-reebef.vainyvqqvfohefrzragqngrsbezng";a:2:{i:0;R:19;i:1;R:9;}s:51:"1230:ybna-reebef.vainyvqqvfohefrzragqngrsbeerqbybna";a:2:{i:0;R:19;i:1;R:9;}s:33:"1230:ybna-reebef.vainyvqcrefbaary";a:2:{i:0;R:19;i:1;R:9;}s:31:"1230:ybna-reebef.vainyvqgkaqngr";a:2:{i:0;R:19;i:1;R:9;}s:49:"1230:ybna-reebef.vainyvqgkaqngrzbagunyernqlpybfrq";a:2:{i:0;R:19;i:1;R:9;}s:58:"1230:ybna-reebef.vainyvqgkaqngryrffgunaynfggenafnpgvbaznqr";a:2:{i:0;R:19;i:1;R:9;}s:42:"1230:ybna-reebef.vainyvqgkaqngrbsqvfohefny";a:2:{i:0;R:19;i:1;R:9;}s:63:"1230:ybna-reebef.vainyvqgkaqngrjuraqvfohefnynsgresvefgercnlzrag";a:2:{i:0;R:19;i:1;R:9;}s:42:"1230:ybna-reebef.ybna.qhcyvpngrcrevbqvpsrr";a:2:{i:0;R:19;i:1;R:9;}s:38:"1230:ybna-reebef.ybna.fcrpvslsrrnzbhag";a:2:{i:0;R:19;i:1;R:9;}s:63:"1230:ybna-reebef.ybnanaqchecbfrragerqjvgubhgfryrpgvatvaqvivqhny";a:2:{i:0;R:19;i:1;R:9;}s:36:"1230:ybna-reebef.ybnapbhyqabgpbrkvfg";a:2:{i:0;R:19;i:1;R:9;}s:56:"1230:ybna-reebef.ybnapbhyqabgpbrkvfgnpebffphfgbzreyriryf";a:2:{i:0;R:19;i:1;R:9;}s:40:"1230:ybna-reebef.ybnabssrevatabgfryrpgrq";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-reebef.znxrcnlzrag";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-reebef.znaqngbel";a:2:{i:0;R:19;i:1;R:9;}s:34:"1230:ybna-reebef.znaqngbel_grkgobk";a:2:{i:0;R:19;i:1;R:9;}s:39:"1230:ybna-reebef.znaqngbelznkvzhzyratgu";a:2:{i:0;R:19;i:1;R:9;}s:32:"1230:ybna-reebef.znaqngbelfryrpg";a:2:{i:0;R:19;i:1;R:9;}s:21:"1230:ybna-reebef.znfx";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-reebef.znkzva";a:2:{i:0;R:19;i:1;R:9;}s:30:"1230:ybna-reebef.znkvzhzyratgu";a:2:{i:0;R:19;i:1;R:9;}s:33:"1230:ybna-reebef.znkenatrvfabgzrg";a:2:{i:0;R:19;i:1;R:9;}s:30:"1230:ybna-reebef.zvavzhzyratgu";a:2:{i:0;R:19;i:1;R:9;}s:33:"1230:ybna-reebef.zvaenatrvfabgzrg";a:2:{i:0;R:19;i:1;R:9;}s:34:"1230:ybna-reebef.zhfgabgorartngvir";a:2:{i:0;R:19;i:1;R:9;}s:38:"1230:ybna-reebef.zhfgorterngregunamreb";a:2:{i:0;R:19;i:1;R:9;}s:33:"1230:ybna-reebef.unfvainyvqsbezng";a:2:{i:0;R:19;i:1;R:9;}s:32:"1230:ybna-reebef.abfrnepuerfhygf";a:2:{i:0;R:19;i:1;R:9;}s:43:"1230:ybna-reebef.abg_fhccbegrq_qhengvbaglcr";a:2:{i:0;R:19;i:1;R:9;}s:41:"1230:ybna-reebef.abg_fhccbegrq_srrsbezhyn";a:2:{i:0;R:19;i:1;R:9;}s:41:"1230:ybna-reebef.abg_fhccbegrq_srrcnlzrag";a:2:{i:0;R:19;i:1;R:9;}s:38:"1230:ybna-reebef.abg_fhccbegrq_srrglcr";a:2:{i:0;R:19;i:1;R:9;}s:44:"1230:ybna-reebef.abg_fhccbegrq_serdhraplglcr";a:2:{i:0;R:19;i:1;R:9;}s:40:"1230:ybna-reebef.abg_fhccbegrq_tenprglcr";a:2:{i:0;R:19;i:1;R:9;}s:43:"1230:ybna-reebef.abg_fhccbegrq_vagrerfgqnlf";a:2:{i:0;R:19;i:1;R:9;}s:42:"1230:ybna-reebef.abg_fhccbegrq_zrrgvatglcr";a:2:{i:0;R:19;i:1;R:9;}s:41:"1230:ybna-reebef.abg_inyvq_qvfohefny_qngr";a:2:{i:0;R:19;i:1;R:9;}s:55:"1230:ybna-reebef.ahzorebsfryrpgrqzrzorefvfabgngyrnfggjb";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-reebef.cersvk";a:2:{i:0;R:19;i:1;R:9;}s:43:"1230:ybna-reebef.cevapvcnyynfg_vainyvqtenpr";a:2:{i:0;R:19;i:1;R:9;}s:22:"1230:ybna-reebef.enatr";a:2:{i:0;R:19;i:1;R:9;}s:39:"1230:ybna-reebef.ercnlzragqnlvferdhverq";a:2:{i:0;R:19;i:1;R:9;}s:45:"1230:ybna-reebef.ercnlzragvachgf_abgfcrpvsvrq";a:2:{i:0;R:19;i:1;R:9;}s:31:"1230:ybna-reebef.fryrpgnalinyhr";a:2:{i:0;R:19;i:1;R:9;}s:37:"1230:ybna-reebef.fcrpvslybnanppbhagvq";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-reebef.fhssvk";a:2:{i:0;R:19;i:1;R:9;}s:70:"1230:ybna-reebef.fhzbsvaqvivqhnynzbhagfvfabgvagurenatrbsnyybjrqnzbhagf";a:2:{i:0;R:19;i:1;R:9;}s:34:"1230:ybna-reebef.inyvqnaqznaqngbel";a:2:{i:0;R:19;i:1;R:9;}s:45:"1230:ybna-reebef.pnfusybjjneavatvainyvqsbezng";a:2:{i:0;R:19;i:1;R:9;}s:47:"1230:ybna-reebef.vaqrogrqarffengvbvainyvqsbezng";a:2:{i:0;R:19;i:1;R:9;}s:47:"1230:ybna-reebef.ercnlzragpncnpvglvainyvqsbezng";a:2:{i:0;R:19;i:1;R:9;}s:49:"1230:ybna-reebef.cnlzrag.qngr.orsber.ynfg.cnlzrag";a:2:{i:0;R:19;i:1;R:9;}s:48:"1230:ybna-rkprcgvba.nppbhagf.punatrvaybnazrrgvat";a:2:{i:0;R:19;i:1;R:9;}s:35:"1230:ybna-rkprcgvba.nppbhagf.perngr";a:2:{i:0;R:19;i:1;R:9;}s:53:"1230:ybna-rkprcgvba.nppbhagf.perngr.phfgbzre.vanpgvir";a:2:{i:0;R:19;i:1;R:9;}s:48:"1230:ybna-rkprcgvba.nppbhagf.perngr.ceq.vanpgvir";a:2:{i:0;R:19;i:1;R:9;}s:50:"1230:ybna-rkprcgvba.senzrjbex.pbapheeraplrkprcgvba";a:2:{i:0;R:19;i:1;R:9;}s:51:"1230:ybna-rkprcgvba.senzrjbex.qbhoyrfhozvgrkprcgvba";a:2:{i:0;R:19;i:1;R:9;}s:58:"1230:ybna-rkprcgvba.senzrjbex.svryqpbasvthengvba.znaqngbel";a:2:{i:0;R:19;i:1;R:9;}s:58:"1230:ybna-rkprcgvbaf.nccyvpngvba.ybna.punatrvaybnabssrevat";a:2:{i:0;R:19;i:1;R:9;}s:58:"1230:ybna-rkprcgvbaf.nccyvpngvba.ybna.qhcyvpngrcrevbqvpsrr";a:2:{i:0;R:19;i:1;R:9;}s:63:"1230:ybna-rkprcgvbaf.nccyvpngvba.ybna.vapbzcngvoyrsrrerpheerapr";a:2:{i:0;R:19;i:1;R:9;}s:67:"1230:ybna-rkprcgvbaf.nccyvpngvba.ybna.vapbzcngvoyrzrrgvaterpheerapr";a:2:{i:0;R:19;i:1;R:9;}s:61:"1230:ybna-rkprcgvbaf.nccyvpngvba.ybna.vainyvqqvfohefrzragqngr";a:2:{i:0;R:19;i:1;R:9;}s:71:"1230:ybna-rkprcgvbaf.nccyvpngvba.ybna.qvfohefrzragqngrzhfgornjbexvatqnl";a:2:{i:0;R:19;i:1;R:9;}s:73:"1230:ybna-rkprcgvbaf.nccyvpngvba.ybna.qvfohefrzragqngrzhfgabgorvanubyvqnl";a:2:{i:0;R:19;i:1;R:9;}s:52:"1230:ybna-rkprcgvbaf.nccyvpngvba.ybna.vainyvqsrrnzag";a:2:{i:0;R:19;i:1;R:9;}s:61:"1230:ybna-rkprcgvbaf.nccyvpngvba.ybna.vainyvqabbsvafgnyyzragf";a:2:{i:0;R:19;i:1;R:9;}s:60:"1230:ybna-rkprcgvbaf.nccyvpngvba.ybna.vainyvqgenafnpgvbaqngr";a:2:{i:0;R:19;i:1;R:9;}s:70:"1230:ybna-rkprcgvbaf.nccyvpngvba.ybna.vainyvqgenafnpgvbaqngrsbecnlzrag";a:2:{i:0;R:19;i:1;R:9;}s:50:"1230:ybna-rkprcgvbaf.nccyvpngvba.ybna.vainyvqsvryq";a:2:{i:0;R:19;i:1;R:9;}s:54:"1230:ybna-rkprcgvbaf.nccyvpngvba.ybna.vainyvqybnasvryq";a:2:{i:0;R:19;i:1;R:9;}s:59:"1230:ybna-rkprcgvbaf.nccyvpngvba.ybna.ybnahcqngvbarkprcgvba";a:2:{i:0;R:19;i:1;R:9;}s:65:"1230:ybna-rkprcgvbaf.nccyvpngvba.ybna.abbsvafgnyyzragfyrffgunagjb";a:2:{i:0;R:19;i:1;R:9;}s:27:"1230:ybna-ybna.purpxyvfgzft";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.pyvpxpnapry";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.pyvpxpbagvahr";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.pyvpxfhozvg";a:2:{i:0;R:19;i:1;R:9;}s:34:"1230:ybna-ybna.pbasvezfgnghfpunatr";a:2:{i:0;R:19;i:1;R:9;}s:19:"1230:ybna-ybna.rqvg";a:2:{i:0;R:19;i:1;R:9;}s:25:"1230:ybna-ybna.rqvgfgnghf";a:2:{i:0;R:19;i:1;R:9;}s:52:"1230:ybna-ybna.svryqfznexrqjvgunanfgrevfxnererdhverq";a:2:{i:0;R:19;i:1;R:9;}s:24:"1230:ybna-ybna.arjfgnghf";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.abpurpxyvfg";a:2:{i:0;R:19;i:1;R:9;}s:31:"1230:ybna-ybna.absyntfninvynoyr";a:2:{i:0;R:19;i:1;R:9;}s:31:"1230:ybna-ybna.ababgrfninvynoyr";a:2:{i:0;R:19;i:1;R:9;}s:21:"1230:ybna-ybna.fryrpg";a:2:{i:0;R:19;i:1;R:9;}s:33:"1230:ybna-ybna.fryrpgrkcynvangvba";a:2:{i:0;R:19;i:1;R:9;}s:27:"1230:ybna-ybna.fryrpgfgnghf";a:2:{i:0;R:19;i:1;R:9;}s:20:"1230:ybna-ybna.fynfu";a:2:{i:0;R:19;i:1;R:9;}s:37:"1230:ybna-ybna.gvzrbsqvfohefrzragsrrf";a:2:{i:0;R:19;i:1;R:9;}s:16:"1230:ybna-ybna.n";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.npp_qrgnvyf";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-ybna.npp_vasb";a:2:{i:0;R:19;i:1;R:9;}s:24:"1230:ybna-ybna.npp_bjare";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.npp_fgngrzrag";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.npp_fhzznel";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.nppbhagolvq";a:2:{i:0;R:19;i:1;R:9;}s:35:"1230:ybna-ybna.nppbhagfgnghfpunatrq";a:2:{i:0;R:19;i:1;R:9;}s:30:"1230:ybna-ybna.nppbhagnffvtarq";a:2:{i:0;R:19;i:1;R:9;}s:24:"1230:ybna-ybna.nppbhagvq";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.nppbhagahzore";a:2:{i:0;R:19;i:1;R:9;}s:27:"1230:ybna-ybna.nppbhagbjare";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-ybna.nppbhagf";a:2:{i:0;R:19;i:1;R:9;}s:19:"1230:ybna-ybna.nppf";a:2:{i:0;R:19;i:1;R:9;}s:41:"1230:ybna-ybna.nppfjvgusbyybjvatvqperngrq";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.nppjvgubhgfho";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-ybna.npgvivgl";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-ybna.nqq_abgr";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.nqqvgvbanysrr";a:2:{i:0;R:19;i:1;R:9;}s:29:"1230:ybna-ybna.nqqvgvbanyvasb";a:2:{i:0;R:19;i:1;R:9;}s:25:"1230:ybna-ybna.nqqarjabgr";a:2:{i:0;R:19;i:1;R:9;}s:22:"1230:ybna-ybna.nqqabgr";a:2:{i:0;R:19;i:1;R:9;}s:20:"1230:ybna-ybna.nqzva";a:2:{i:0;R:19;i:1;R:9;}s:29:"1230:ybna-ybna.nqzva_frg_srrf";a:2:{i:0;R:19;i:1;R:9;}s:30:"1230:ybna-ybna.nyybjrqvagrerfg";a:2:{i:0;R:19;i:1;R:9;}s:29:"1230:ybna-ybna.nyybjrq_nzbhag";a:2:{i:0;R:19;i:1;R:9;}s:30:"1230:ybna-ybna.nyybjrq_nzbhag1";a:2:{i:0;R:19;i:1;R:9;}s:32:"1230:ybna-ybna.nyybjrq_vagrerfg1";a:2:{i:0;R:19;i:1;R:9;}s:32:"1230:ybna-ybna.nyybjrq_vagrerfg2";a:2:{i:0;R:19;i:1;R:9;}s:33:"1230:ybna-ybna.nyybjrq_ab_bs_vafg";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.nyycnlzragf";a:2:{i:0;R:19;i:1;R:9;}s:31:"1230:ybna-ybna.nyernqlqvfohefrq";a:2:{i:0;R:19;i:1;R:9;}s:21:"1230:ybna-ybna.nzbhag";a:2:{i:0;R:19;i:1;R:9;}s:30:"1230:ybna-ybna.nzbhagqvfohefrq";a:2:{i:0;R:19;i:1;R:9;}s:25:"1230:ybna-ybna.nzbhag_qhr";a:2:{i:0;R:19;i:1;R:9;}s:24:"1230:ybna-ybna.nzbhagqhr";a:2:{i:0;R:19;i:1;R:9;}s:25:"1230:ybna-ybna.nzbhagcnvq";a:2:{i:0;R:19;i:1;R:9;}s:18:"1230:ybna-ybna.nzg";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-ybna.nzg_cnvq";a:2:{i:0;R:19;i:1;R:9;}s:31:"1230:ybna-ybna.nagv_qvfohefr_qq";a:2:{i:0;R:19;i:1;R:9;}s:22:"1230:ybna-ybna.ncc_srr";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.ncc_srr_nzg";a:2:{i:0;R:19;i:1;R:9;}s:24:"1230:ybna-ybna.nccy_srrf";a:2:{i:0;R:19;i:1;R:9;}s:29:"1230:ybna-ybna.nccyl_nqq_srrf";a:2:{i:0;R:19;i:1;R:9;}s:31:"1230:ybna-ybna.nccyl_nqwhfgzrag";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.nccyl_punetrf";a:2:{i:0;R:19;i:1;R:9;}s:37:"1230:ybna-ybna.ivrj_bevtvany_fpurqhyr";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.nccyl_cnlzrag";a:2:{i:0;R:19;i:1;R:9;}s:31:"1230:ybna-ybna.nccyl_cercnlzrag";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.nccyl_genaf";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-ybna.nccebirq";a:2:{i:0;R:19;i:1;R:9;}s:18:"1230:ybna-ybna.nce";a:2:{i:0;R:19;i:1;R:9;}s:25:"1230:ybna-ybna.nerlbhfher";a:2:{i:0;R:19;i:1;R:9;}s:21:"1230:ybna-ybna.neerne";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-ybna.nfgrevfx";a:2:{i:0;R:19;i:1;R:9;}s:22:"1230:ybna-ybna.onynapr";a:2:{i:0;R:19;i:1;R:9;}s:34:"1230:ybna-ybna.onynapr_ng_qvfohefr";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-ybna.onaxanzr";a:2:{i:0;R:19;i:1;R:9;}s:21:"1230:ybna-ybna.oenapu";a:2:{i:0;R:19;i:1;R:9;}s:24:"1230:ybna-ybna.oenapu-01";a:2:{i:0;R:19;i:1;R:9;}s:32:"1230:ybna-ybna.ohfvarff_jbex_npg";a:2:{i:0;R:19;i:1;R:9;}s:21:"1230:ybna-ybna.pnapry";a:2:{i:0;R:19;i:1;R:9;}s:25:"1230:ybna-ybna.punatr_ybt";a:2:{i:0;R:19;i:1;R:9;}s:27:"1230:ybna-ybna.punatrfgnghf";a:2:{i:0;R:19;i:1;R:9;}s:30:"1230:ybna-ybna.punetrq_nccyvrq";a:2:{i:0;R:19;i:1;R:9;}s:22:"1230:ybna-ybna.punetrf";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.purpxahzore";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.purpxgberzbir";a:2:{i:0;R:19;i:1;R:9;}s:27:"1230:ybna-ybna.purpx_erzbir";a:2:{i:0;R:19;i:1;R:9;}s:35:"1230:ybna-ybna.purpxobkcnlzraginyhr";a:2:{i:0;R:19;i:1;R:9;}s:32:"1230:ybna-ybna.pyvpxpnapryerghea";a:2:{i:0;R:19;i:1;R:9;}s:31:"1230:ybna-ybna.pyvpxpnaprynqzva";a:2:{i:0;R:19;i:1;R:9;}s:32:"1230:ybna-ybna.pyvrag/tebhc_anzr";a:2:{i:0;R:19;i:1;R:9;}s:30:"1230:ybna-ybna.pbyy_furrg_glcr";a:2:{i:0;R:19;i:1;R:9;}s:32:"1230:ybna-ybna.pbyyngrenyqrgnvyf";a:2:{i:0;R:19;i:1;R:9;}s:31:"1230:ybna-ybna.pbyyngreny_abgrf";a:2:{i:0;R:19;i:1;R:9;}s:30:"1230:ybna-ybna.pbyyngreny_glcr";a:2:{i:0;R:19;i:1;R:9;}s:20:"1230:ybna-ybna.pbyba";a:2:{i:0;R:19;i:1;R:9;}s:29:"1230:ybna-ybna.pbzcyrgr_svryq";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-ybna.pbatb1_1";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-ybna.pbatb1_2";a:2:{i:0;R:19;i:1;R:9;}s:21:"1230:ybna-ybna.pbatb2";a:2:{i:0;R:19;i:1;R:9;}s:21:"1230:ybna-ybna.pbatb3";a:2:{i:0;R:19;i:1;R:9;}s:30:"1230:ybna-ybna.pbafhygnapl_srr";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-ybna.pbagvahr";a:2:{i:0;R:19;i:1;R:9;}s:21:"1230:ybna-ybna.perngr";a:2:{i:0;R:19;i:1;R:9;}s:29:"1230:ybna-ybna.perngrzhygvcyr";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.perngrnppbhag";a:2:{i:0;R:19;i:1;R:9;}s:30:"1230:ybna-ybna.perngr_ybna_npp";a:2:{i:0;R:19;i:1;R:9;}s:21:"1230:ybna-ybna.perqvg";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.pheeragfgnghf";a:2:{i:0;R:19;i:1;R:9;}s:34:"1230:ybna-ybna.pheerag_vafgnyyzrag";a:2:{i:0;R:19;i:1;R:9;}s:19:"1230:ybna-ybna.qngr";a:2:{i:0;R:19;i:1;R:9;}s:24:"1230:ybna-ybna.qngr_cnvq";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.qngr_cbfgrq";a:2:{i:0;R:19;i:1;R:9;}s:33:"1230:ybna-ybna.qngrbsqvfo/cnlzrag";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.qngrbscnlzrag";a:2:{i:0;R:19;i:1;R:9;}s:29:"1230:ybna-ybna.jnvirevagrerfg";a:2:{i:0;R:19;i:1;R:9;}s:34:"1230:ybna-ybna.qbabgjnvirevagrerfg";a:2:{i:0;R:19;i:1;R:9;}s:36:"1230:ybna-ybna.jnvirevagrerfgjneavat";a:2:{i:0;R:19;i:1;R:9;}s:36:"1230:ybna-ybna.jnvirevagrerfgcerivrj";a:2:{i:0;R:19;i:1;R:9;}s:25:"1230:ybna-ybna.qngrbsgeka";a:2:{i:0;R:19;i:1;R:9;}s:27:"1230:ybna-ybna.qnlf_neernef";a:2:{i:0;R:19;i:1;R:9;}s:20:"1230:ybna-ybna.qrovg";a:2:{i:0;R:19;i:1;R:9;}s:21:"1230:ybna-ybna.qrsnzg";a:2:{i:0;R:19;i:1;R:9;}s:22:"1230:ybna-ybna.qrsvafg";a:2:{i:0;R:19;i:1;R:9;}s:25:"1230:ybna-ybna.qrsnhygsrr";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.qryvadhrapl";a:2:{i:0;R:19;i:1;R:9;}s:19:"1230:ybna-ybna.qrfp";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.qrfpevcgvba";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-ybna.qvf_qngr";a:2:{i:0;R:19;i:1;R:9;}s:22:"1230:ybna-ybna.qvfo_ce";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.qvfoqrgnvyf";a:2:{i:0;R:19;i:1;R:9;}s:24:"1230:ybna-ybna.qvfohefny";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.qvfohefnyqngr";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-ybna.qvfohefr";a:2:{i:0;R:19;i:1;R:9;}s:27:"1230:ybna-ybna.qvfohefrybna";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-ybna.qhr_qngr";a:2:{i:0;R:19;i:1;R:9;}s:22:"1230:ybna-ybna.qhrqngr";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-ybna.rqvggeka";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.rqvg_npp_vasb";a:2:{i:0;R:19;i:1;R:9;}s:30:"1230:ybna-ybna.rqvg_npp_fgnghf";a:2:{i:0;R:19;i:1;R:9;}s:24:"1230:ybna-ybna.rqvg_vasb";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.rqvg_ybna_npp";a:2:{i:0;R:19;i:1;R:9;}s:24:"1230:ybna-ybna.rqvggenaf";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-ybna.rqh_ybna";a:2:{i:0;R:19;i:1;R:9;}s:27:"1230:ybna-ybna.ragrenppvasb";a:2:{i:0;R:19;i:1;R:9;}s:35:"1230:ybna-ybna.ragre_pyvrag_qrgnvyf";a:2:{i:0;R:19;i:1;R:9;}s:33:"1230:ybna-ybna.ragreqrgnvyffrnepu";a:2:{i:0;R:19;i:1;R:9;}s:33:"1230:ybna-ybna.ragreqrgnvyffhozvg";a:2:{i:0;R:19;i:1;R:9;}s:33:"1230:ybna-ybna.ragre_ybna_nppvasb";a:2:{i:0;R:19;i:1;R:9;}s:25:"1230:ybna-ybna.ragre_abgr";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.ragrenzbhag";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.ragvglnppvasb";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-ybna.srrnzgvf";a:2:{i:0;R:19;i:1;R:9;}s:21:"1230:ybna-ybna.srr_cq";a:2:{i:0;R:19;i:1;R:9;}s:22:"1230:ybna-ybna.srr_erp";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-ybna.srr_glcr";a:2:{i:0;R:19;i:1;R:9;}s:19:"1230:ybna-ybna.srrf";a:2:{i:0;R:19;i:1;R:9;}s:20:"1230:ybna-ybna.svryq";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.sbyyqrgnvyf";a:2:{i:0;R:19;i:1;R:9;}s:27:"1230:ybna-ybna.serd_bs_vafg";a:2:{i:0;R:19;i:1;R:9;}s:29:"1230:ybna-ybna.shgher_vafgnyy";a:2:{i:0;R:19;i:1;R:9;}s:30:"1230:ybna-ybna.trarengr_ercbeg";a:2:{i:0;R:19;i:1;R:9;}s:21:"1230:ybna-ybna.ty_pbq";a:2:{i:0;R:19;i:1;R:9;}s:39:"1230:ybna-ybna.tenprcrevbqsbeercnlzragf";a:2:{i:0;R:19;i:1;R:9;}s:27:"1230:ybna-ybna.tenpr_crevbq";a:2:{i:0;R:19;i:1;R:9;}s:32:"1230:ybna-ybna.tenpr_crevbq_glcr";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.tenprcreqhe";a:2:{i:0;R:19;i:1;R:9;}s:32:"1230:ybna-ybna.ubcr&rssbeg_tebhc";a:2:{i:0;R:19;i:1;R:9;}s:31:"1230:ybna-ybna.vslbhpyvpxfhozvg";a:2:{i:0;R:19;i:1;R:9;}s:34:"1230:ybna-ybna.vaqvivqhny.fpurqhyr";a:2:{i:0;R:19;i:1;R:9;}s:18:"1230:ybna-ybna.vaf";a:2:{i:0;R:19;i:1;R:9;}s:19:"1230:ybna-ybna.vafg";a:2:{i:0;R:19;i:1;R:9;}s:27:"1230:ybna-ybna.vafgnyy_cnvq";a:2:{i:0;R:19;i:1;R:9;}s:34:"1230:ybna-ybna.vafgnyyzrag_qrgnvyf";a:2:{i:0;R:19;i:1;R:9;}s:27:"1230:ybna-ybna.vafgnyyzragf";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.vafgnapr_vasb";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.vafgnapr_anzr";a:2:{i:0;R:19;i:1;R:9;}s:27:"1230:ybna-ybna.vafgnapranzr";a:2:{i:0;R:19;i:1;R:9;}s:24:"1230:ybna-ybna.vafgg_qhr";a:2:{i:0;R:19;i:1;R:9;}s:25:"1230:ybna-ybna.vafgg_cnvq";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-ybna.vag_engr";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-ybna.vagrerfg";a:2:{i:0;R:19;i:1;R:9;}s:35:"1230:ybna-ybna.vagrerfgqvfohefrzrag";a:2:{i:0;R:19;i:1;R:9;}s:27:"1230:ybna-ybna.vagrerfgengr";a:2:{i:0;R:19;i:1;R:9;}s:31:"1230:ybna-ybna.vagrerfgengrglcr";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.vagrerfgehyrf";a:2:{i:0;R:19;i:1;R:9;}s:30:"1230:ybna-ybna.vagrerfg_nzbhag";a:2:{i:0;R:19;i:1;R:9;}s:36:"1230:ybna-ybna.vagrerfg_pny_cnlzragf";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.vagrerfg_qvfo";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.vagrerfg_engr";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.vagrerfg_glcr";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-ybna.vage_erp";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.vagengrglcr";a:2:{i:0;R:19;i:1;R:9;}s:27:"1230:ybna-ybna.vf_erqb_ybna";a:2:{i:0;R:19;i:1;R:9;}s:31:"1230:ybna-ybna.xnanxchen_pragre";a:2:{i:0;R:19;i:1;R:9;}s:32:"1230:ybna-ybna.ynfgcnlzragnzbhag";a:2:{i:0;R:19;i:1;R:9;}s:37:"1230:ybna-ybna.ynfgcnlzragqrfpevcgvba";a:2:{i:0;R:19;i:1;R:9;}s:33:"1230:ybna-ybna.ybnanppbhagqrgnvyf";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.ybnanzbhagsbe";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.ybnaonynapr";a:2:{i:0;R:19;i:1;R:9;}s:31:"1230:ybna-ybna.ybnavafgnapranzr";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.ybnabssvpre";a:2:{i:0;R:19;i:1;R:9;}s:33:"1230:ybna-ybna.ybnacebqhpgfhzznel";a:2:{i:0;R:19;i:1;R:9;}s:31:"1230:ybna-ybna.ybna_npp_qrgnvyf";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.ybna_nzbhag";a:2:{i:0;R:19;i:1;R:9;}s:27:"1230:ybna-ybna.ybna_onynapr";a:2:{i:0;R:19;i:1;R:9;}s:25:"1230:ybna-ybna.ybnanzbhag";a:2:{i:0;R:19;i:1;R:9;}s:30:"1230:ybna-ybna.znvagranapr_srr";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.znghevgl_qngr";a:2:{i:0;R:19;i:1;R:9;}s:22:"1230:ybna-ybna.znkvafg";a:2:{i:0;R:19;i:1;R:9;}s:25:"1230:ybna-ybna.znkvagengr";a:2:{i:0;R:19;i:1;R:9;}s:25:"1230:ybna-ybna.znkybnanzg";a:2:{i:0;R:19;i:1;R:9;}s:30:"1230:ybna-ybna.zrrgvat_punetrf";a:2:{i:0;R:19;i:1;R:9;}s:29:"1230:ybna-ybna.zrzore_srr_nzg";a:2:{i:0;R:19;i:1;R:9;}s:29:"1230:ybna-ybna.zrzorefuvc_srr";a:2:{i:0;R:19;i:1;R:9;}s:22:"1230:ybna-ybna.zvavafg";a:2:{i:0;R:19;i:1;R:9;}s:25:"1230:ybna-ybna.zvavagengr";a:2:{i:0;R:19;i:1;R:9;}s:25:"1230:ybna-ybna.zvaybnanzg";a:2:{i:0;R:19;i:1;R:9;}s:30:"1230:ybna-ybna.zvffrq_cnlzragf";a:2:{i:0;R:19;i:1;R:9;}s:30:"1230:ybna-ybna.zbqr_bs_cnlzrag";a:2:{i:0;R:19;i:1;R:9;}s:18:"1230:ybna-ybna.zba";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-ybna.zbagu(f)";a:2:{i:0;R:19;i:1;R:9;}s:27:"1230:ybna-ybna.zber_qrgnvyf";a:2:{i:0;R:19;i:1;R:9;}s:18:"1230:ybna-ybna.arj";a:2:{i:0;R:19;i:1;R:9;}s:25:"1230:ybna-ybna.arj_fgnghf";a:2:{i:0;R:19;i:1;R:9;}s:22:"1230:ybna-ybna.arj_iny";a:2:{i:0;R:19;i:1;R:9;}s:24:"1230:ybna-ybna.arkg_vafg";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.arkg_vafg_qhr";a:2:{i:0;R:19;i:1;R:9;}s:35:"1230:ybna-ybna.arkg_vafgnyy_qrgnvyf";a:2:{i:0;R:19;i:1;R:9;}s:17:"1230:ybna-ybna.ab";a:2:{i:0;R:19;i:1;R:9;}s:31:"1230:ybna-ybna.abbsvafgnyyzragf";a:2:{i:0;R:19;i:1;R:9;}s:25:"1230:ybna-ybna.ab_bs_vafg";a:2:{i:0;R:19;i:1;R:9;}s:29:"1230:ybna-ybna.abcnlzragfznqr";a:2:{i:0;R:19;i:1;R:9;}s:19:"1230:ybna-ybna.abgr";a:2:{i:0;R:19;i:1;R:9;}s:20:"1230:ybna-ybna.abgrf";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.bs_cnlzragf";a:2:{i:0;R:19;i:1;R:9;}s:25:"1230:ybna-ybna.byq_fgnghf";a:2:{i:0;R:19;i:1;R:9;}s:22:"1230:ybna-ybna.byq_iny";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.bapr_20qnlf";a:2:{i:0;R:19;i:1;R:9;}s:32:"1230:ybna-ybna.bar_gvzr_npp_srrf";a:2:{i:0;R:19;i:1;R:9;}s:37:"1230:ybna-ybna.bar_gvzr_npp_cranygvrf";a:2:{i:0;R:19;i:1;R:9;}s:32:"1230:ybna-ybna.bcraarjnppbhagsbe";a:2:{i:0;R:19;i:1;R:9;}s:33:"1230:ybna-ybna.bcraarjybnanppbhag";a:2:{i:0;R:19;i:1;R:9;}s:36:"1230:ybna-ybna.bcraarjfnivatfnppbhag";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-ybna.bcra_arj";a:2:{i:0;R:19;i:1;R:9;}s:27:"1230:ybna-ybna.bcra_arj_npp";a:2:{i:0;R:19;i:1;R:9;}s:33:"1230:ybna-ybna.bcra_arj_vafhe_npp";a:2:{i:0;R:19;i:1;R:9;}s:32:"1230:ybna-ybna.bcra_arj_ybna_npp";a:2:{i:0;R:19;i:1;R:9;}s:31:"1230:ybna-ybna.bcra_arj_fni_npp";a:2:{i:0;R:19;i:1;R:9;}s:27:"1230:ybna-ybna.bevtvanyybna";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.bevtvany_ybna";a:2:{i:0;R:19;i:1;R:9;}s:33:"1230:ybna-ybna.bhgfgnaqvatonynapr";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.bireqhrnzbhag";a:2:{i:0;R:19;i:1;R:9;}s:27:"1230:ybna-ybna.birecnlzragf";a:2:{i:0;R:19;i:1;R:9;}s:33:"1230:ybna-ybna.birecnlzragf_pyrne";a:2:{i:0;R:19;i:1;R:9;}s:19:"1230:ybna-ybna.cnvq";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-ybna.cnfg_qhr";a:2:{i:0;R:19;i:1;R:9;}s:31:"1230:ybna-ybna.cnfg_qhr_qrgnvyf";a:2:{i:0;R:19;i:1;R:9;}s:22:"1230:ybna-ybna.cnfgqhr";a:2:{i:0;R:19;i:1;R:9;}s:22:"1230:ybna-ybna.cnlzrag";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.cnlzragqngr";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.cnlzragglcr";a:2:{i:0;R:19;i:1;R:9;}s:25:"1230:ybna-ybna.cnlzrag_vq";a:2:{i:0;R:19;i:1;R:9;}s:29:"1230:ybna-ybna.cnlzragqrgnvyf";a:2:{i:0;R:19;i:1;R:9;}s:24:"1230:ybna-ybna.cnlzragvq";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-ybna.cnlzragf";a:2:{i:0;R:19;i:1;R:9;}s:27:"1230:ybna-ybna.cnlzragfznqr";a:2:{i:0;R:19;i:1;R:9;}s:22:"1230:ybna-ybna.cranygl";a:2:{i:0;R:19;i:1;R:9;}s:25:"1230:ybna-ybna.cranygl_01";a:2:{i:0;R:19;i:1;R:9;}s:25:"1230:ybna-ybna.cranygl_02";a:2:{i:0;R:19;i:1;R:9;}s:27:"1230:ybna-ybna.cranygl_glcr";a:2:{i:0;R:19;i:1;R:9;}s:34:"1230:ybna-ybna.cresbeznapr_uvfgbel";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.crevbqvpvgl";a:2:{i:0;R:19;i:1;R:9;}s:34:"1230:ybna-ybna.crevbqvpvglglcrsyng";a:2:{i:0;R:19;i:1;R:9;}s:34:"1230:ybna-ybna.crevbqvpvglglcrengr";a:2:{i:0;R:19;i:1;R:9;}s:37:"1230:ybna-ybna.crevbqvpvgl_naahny_srr";a:2:{i:0;R:19;i:1;R:9;}s:39:"1230:ybna-ybna.crevbqvpvgl_bar_gvzr_srr";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.cubarahzore";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-ybna.cym_abgr";a:2:{i:0;R:19;i:1;R:9;}s:24:"1230:ybna-ybna.cbfgrq_ol";a:2:{i:0;R:19;i:1;R:9;}s:20:"1230:ybna-ybna.ce_cq";a:2:{i:0;R:19;i:1;R:9;}s:22:"1230:ybna-ybna.cerivrj";a:2:{i:0;R:19;i:1;R:9;}s:30:"1230:ybna-ybna.cerivrj_nppvasb";a:2:{i:0;R:19;i:1;R:9;}s:24:"1230:ybna-ybna.cevapvcny";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.cevapvcyr_qhr";a:2:{i:0;R:19;i:1;R:9;}s:30:"1230:ybna-ybna.cebqhpg_fhzznel";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.cebcbfrq_qngr";a:2:{i:0;R:19;i:1;R:9;}s:32:"1230:ybna-ybna.erp_perngvba_qngr";a:2:{i:0;R:19;i:1;R:9;}s:24:"1230:ybna-ybna.erprvcgvq";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.erprvcgahzore";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.erprvcgqngr";a:2:{i:0;R:19;i:1;R:9;}s:29:"1230:ybna-ybna.erpragnpgvivgl";a:2:{i:0;R:19;i:1;R:9;}s:27:"1230:ybna-ybna.erprag_abgrf";a:2:{i:0;R:19;i:1;R:9;}s:33:"1230:ybna-ybna.erpheevat_npp_srrf";a:2:{i:0;R:19;i:1;R:9;}s:38:"1230:ybna-ybna.erpheevat_npp_cranygvrf";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.erqbnppbhag";a:2:{i:0;R:19;i:1;R:9;}s:29:"1230:ybna-ybna.erqb_ybna_abgr";a:2:{i:0;R:19;i:1;R:9;}s:21:"1230:ybna-ybna.erzbir";a:2:{i:0;R:19;i:1;R:9;}s:20:"1230:ybna-ybna.ercnl";a:2:{i:0;R:19;i:1;R:9;}s:29:"1230:ybna-ybna.ercnlzragehyrf";a:2:{i:0;R:19;i:1;R:9;}s:29:"1230:ybna-ybna.ercnlzrag_qngr";a:2:{i:0;R:19;i:1;R:9;}s:30:"1230:ybna-ybna.ercnlzrag_fpurq";a:2:{i:0;R:19;i:1;R:9;}s:37:"1230:ybna-ybna.ergheagbnppbhagqrgnvyf";a:2:{i:0;R:19;i:1;R:9;}s:40:"1230:ybna-ybna.ergheagbercnlzragfpurqhyr";a:2:{i:0;R:19;i:1;R:9;}s:32:"1230:ybna-ybna.bevtvany.fpurqhyr";a:2:{i:0;R:19;i:1;R:9;}s:22:"1230:ybna-ybna.erirefr";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.erivrj&rqvg";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.erivrj&fhozvg";a:2:{i:0;R:19;i:1;R:9;}s:30:"1230:ybna-ybna.erivrj/rqvg_vaf";a:2:{i:0;R:19;i:1;R:9;}s:38:"1230:ybna-ybna.erivrj_cnlzrag_fpurqhyr";a:2:{i:0;R:19;i:1;R:9;}s:31:"1230:ybna-ybna.erivrjnppbagvasb";a:2:{i:0;R:19;i:1;R:9;}s:40:"1230:ybna-ybna.erivrjnppbhagvasbezngvba1";a:2:{i:0;R:19;i:1;R:9;}s:40:"1230:ybna-ybna.erivrjnppbhagvasbezngvba2";a:2:{i:0;R:19;i:1;R:9;}s:40:"1230:ybna-ybna.erivrjnppbhagvasbezngvba3";a:2:{i:0;R:19;i:1;R:9;}s:32:"1230:ybna-ybna.erivrjgenafnpgvba";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.ehaavat_ony";a:2:{i:0;R:19;i:1;R:9;}s:16:"1230:ybna-ybna.f";a:2:{i:0;R:19;i:1;R:9;}s:27:"1230:ybna-ybna.fnirsbeyngre";a:2:{i:0;R:19;i:1;R:9;}s:21:"1230:ybna-ybna.frnepu";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.frrnyyabgrf";a:2:{i:0;R:19;i:1;R:9;}s:30:"1230:ybna-ybna.fry_punetr_glcr";a:2:{i:0;R:19;i:1;R:9;}s:33:"1230:ybna-ybna.fryrpgybnavafgnapr";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.fryrpg_pyvrag";a:2:{i:0;R:19;i:1;R:9;}s:34:"1230:ybna-ybna.fryrpg_pyvrag/tebhc";a:2:{i:0;R:19;i:1;R:9;}s:31:"1230:ybna-ybna.fryrpg_ybna_vafg";a:2:{i:0;R:19;i:1;R:9;}s:24:"1230:ybna-ybna.fryrpgvba";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.fbhepr_shaq";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.fcrpvslabgr";a:2:{i:0;R:19;i:1;R:9;}s:21:"1230:ybna-ybna.fgnghf";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.fgnghf_npgvir";a:2:{i:0;R:19;i:1;R:9;}s:29:"1230:ybna-ybna.fgnghf_uvfgbel";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-ybna.fhogbgny";a:2:{i:0;R:19;i:1;R:9;}s:21:"1230:ybna-ybna.fhozvg";a:2:{i:0;R:19;i:1;R:9;}s:32:"1230:ybna-ybna.fhozvgsbenccebiny";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.fhppperngrarj";a:2:{i:0;R:19;i:1;R:9;}s:33:"1230:ybna-ybna.fhpprffshyperngvba";a:2:{i:0;R:19;i:1;R:9;}s:35:"1230:ybna-ybna.fhpprffshyerperngvba";a:2:{i:0;R:19;i:1;R:9;}s:34:"1230:ybna-ybna.fhpprffshy_perngvba";a:2:{i:0;R:19;i:1;R:9;}s:36:"1230:ybna-ybna.fhpprffshy_erperngvba";a:2:{i:0;R:19;i:1;R:9;}s:30:"1230:ybna-ybna.fhttrfgrq_fgrcf";a:2:{i:0;R:19;i:1;R:9;}s:20:"1230:ybna-ybna.gbgny";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.gbgnynzgqhr";a:2:{i:0;R:19;i:1;R:9;}s:25:"1230:ybna-ybna.gbgnyqhrba";a:2:{i:0;R:19;i:1;R:9;}s:32:"1230:ybna-ybna.gbgny_qhr_vafgnyy";a:2:{i:0;R:19;i:1;R:9;}s:26:"1230:ybna-ybna.gbgnynzbhag";a:2:{i:0;R:19;i:1;R:9;}s:27:"1230:ybna-ybna.genvavat_srr";a:2:{i:0;R:19;i:1;R:9;}s:29:"1230:ybna-ybna.genafnpgvba_vq";a:2:{i:0;R:19;i:1;R:9;}s:29:"1230:ybna-ybna.genafp_uvfgbel";a:2:{i:0;R:19;i:1;R:9;}s:19:"1230:ybna-ybna.geka";a:2:{i:0;R:19;i:1;R:9;}s:19:"1230:ybna-ybna.glcr";a:2:{i:0;R:19;i:1;R:9;}s:21:"1230:ybna-ybna.glcr_1";a:2:{i:0;R:19;i:1;R:9;}s:21:"1230:ybna-ybna.glcr_2";a:2:{i:0;R:19;i:1;R:9;}s:19:"1230:ybna-ybna.hfre";a:2:{i:0;R:19;i:1;R:9;}s:30:"1230:ybna-ybna.ivrjybnaqrgnvyf";a:2:{i:0;R:19;i:1;R:9;}s:32:"1230:ybna-ybna.ivrj_npp_npgvivgl";a:2:{i:0;R:19;i:1;R:9;}s:30:"1230:ybna-ybna.ivrj_punatr_ybt";a:2:{i:0;R:19;i:1;R:9;}s:32:"1230:ybna-ybna.ivrj_vafg_qrgnvyf";a:2:{i:0;R:19;i:1;R:9;}s:39:"1230:ybna-ybna.ivrj_vafgnyyzrag_qrgnvyf";a:2:{i:0;R:19;i:1;R:9;}s:29:"1230:ybna-ybna.ivrj_ybna_npp1";a:2:{i:0;R:19;i:1;R:9;}s:29:"1230:ybna-ybna.ivrj_ybna_npp2";a:2:{i:0;R:19;i:1;R:9;}s:24:"1230:ybna-ybna.ivrj_fpuq";a:2:{i:0;R:19;i:1;R:9;}s:34:"1230:ybna-ybna.ivrj_fgnghf_uvfgbel";a:2:{i:0;R:19;i:1;R:9;}s:34:"1230:ybna-ybna.ivrj_genafp_uvfgbel";a:2:{i:0;R:19;i:1;R:9;}s:58:"1230:ybna-ybna.ivrjdhrfgvbatebhcsbepybfrqybnaerfcbafrfyvax";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.ibhpureahzore";a:2:{i:0;R:19;i:1;R:9;}s:20:"1230:ybna-ybna.jnvir";a:2:{i:0;R:19;i:1;R:9;}s:22:"1230:ybna-ybna.jrrx(f)";a:2:{i:0;R:19;i:1;R:9;}s:18:"1230:ybna-ybna.lrf";a:2:{i:0;R:19;i:1;R:9;}s:23:"1230:ybna-ybna.inyvqngr";a:2:{i:0;R:19;i:1;R:9;}s:43:"1230:ybna-ybna.bevtvanyfpurqhyrvafgnyyzragf";a:2:{i:0;R:19;i:1;R:9;}s:44:"1230:ybna-reebef.vafgnyyzrag.qhrqngr.vainyvq";a:2:{i:0;R:19;i:1;R:9;}s:58:"1230:ybna-reebef.vafgnyyzrag.qhrqngr.fnzr.nf.qvfohefr.qngr";a:2:{i:0;R:19;i:1;R:9;}s:47:"1230:ybna-reebef.vafgnyyzrag.qhrqngr.vf.ubyvqnl";a:2:{i:0;R:19;i:1;R:9;}s:57:"1230:ybna-reebef.vafgnyyzrag.qhrqngr.orsber.qvfohefr.qngr";a:2:{i:0;R:19;i:1;R:9;}s:51:"1230:ybna-reebef.vafgnyyzrag.qhrqngr.jvguva.zva.tnc";a:2:{i:0;R:19;i:1;R:9;}s:51:"1230:ybna-reebef.vafgnyyzrag.qhrqngr.orlbaq.znk.tnc";a:2:{i:0;R:19;i:1;R:9;}s:46:"1230:ybna-reebef.vafgnyyzrag.qhrqngr.qhcyvpngr";a:2:{i:0;R:19;i:1;R:9;}s:50:"1230:ybna-reebef.vafgnyyzrag.qhrqngr.vainyvq.beqre";a:2:{i:0;R:19;i:1;R:9;}s:56:"1230:ybna-reebef.vafgnyyzrag.nzbhag.yrff.guna.zva.nzbhag";a:2:{i:0;R:19;i:1;R:9;}s:58:"1230:ybna-reebef.vafgnyyzrag.nzbhag.yrff.guna.vagrerfg.srr";a:2:{i:0;R:19;i:1;R:9;}s:49:"1230:ybna-reebef.vafgnyyzrag.gbgny.nzbhag.vainyvq";a:2:{i:0;R:19;i:1;R:9;}s:30:"1230:ybna-ybna.pnfusybjfhzznel";a:2:{i:0;R:19;i:1;R:9;}s:21:"1230:ybna-ybna.zbaguf";a:2:{i:0;R:19;i:1;R:9;}s:33:"1230:ybna-ybna.phzhyngvirpnfusybj";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.pnfusybjabgrf";a:2:{i:0;R:19;i:1;R:9;}s:54:"1230:ybna-ybna.phzhyngvirpnfusybjzvahfgbgnyvafgnyyzrag";a:2:{i:0;R:19;i:1;R:9;}s:40:"1230:ybna-ybna.gbgnyvafgnyyzragnfcreprag";a:2:{i:0;R:19;i:1;R:9;}s:60:"1230:ybna-jneavat.pnfusybj_vafgnyyzrag_qvss_orlbaq_guerfubyq";a:2:{i:0;R:19;i:1;R:9;}s:46:"1230:ybna-jneavat.phzhyngvir_pnfusybj_artngvir";a:2:{i:0;R:19;i:1;R:9;}s:42:"1230:ybna-jneavat.phzhyngvir_pnfusybj_mreb";a:2:{i:0;R:19;i:1;R:9;}s:58:"1230:ybna-reebef.vafgnyyzrag_qhr_qngr_orlbaq_pnfusybj_qngr";a:2:{i:0;R:19;i:1;R:9;}s:33:"1230:ybna-ybna.rqvg_ybna_fpurqhyr";a:2:{i:0;R:19;i:1;R:9;}s:36:"1230:ybna-ybna.jnvirevagrerfgzrffntr";a:2:{i:0;R:19;i:1;R:9;}s:44:"1230:ybna-ybna.jnvirevagrerfg.abg.pbasvtherq";a:2:{i:0;R:19;i:1;R:9;}s:63:"1230:ybna-reebef.crevbqvpsrrabgnccyvpnoyrsbeinevnoyrvafgnyyzrag";a:2:{i:0;R:19;i:1;R:9;}s:63:"1230:ybna-reebef.zhygvcyrvafgnaprfbsgurfnzrbargvzrsrrabgnyybjrq";a:2:{i:0;R:19;i:1;R:9;}s:28:"1230:ybna-ybna.ivrj_fpurqhyr";a:2:{i:0;R:19;i:1;R:9;}s:90:"1230:ybna-reebef.srrpnyvphyngrqnfcrepragbsvagrerfgpnaabgornccyvrqgbinevnoyrvafgnyyzragybna";a:2:{i:0;R:19;i:1;R:9;}s:53:"1230:ybna-reebef.ercnlzrag.pncnpvgl.yrff.guna.nyybjrq";a:2:{i:0;R:19;i:1;R:9;}s:65:"1230:ybna-rkprcgvbaf.nccyvpngvba.ybna.vainyvqgenafnpgvbaqngrbeqre";a:2:{i:0;R:19;i:1;R:9;}s:42:"1230:ybna-rkprcgvba.nppbhagf.pnagerzbirsrr";a:2:{i:0;R:19;i:1;R:9;}s:43:"1230:ybttvat-phfgbzre.qhcyvpngrphfgbzreanzr";a:2:{i:0;s:17:"out-mifos-logging";i:1;R:9;}s:48:"1230:ybttvat-rapelcgvba.abfhpunytbevguzrkprcgvba";a:2:{i:0;R:30494;i:1;R:9;}s:46:"1230:ybttvat-rapelcgvba.abfhpucnqqvatrkprcgvba";a:2:{i:0;R:30494;i:1;R:9;}s:42:"1230:ybttvat-ybnabssvpreabgnpgvirrkprcgvba";a:2:{i:0;R:30494;i:1;R:9;}s:18:"1230:ybttvat-ragel";a:2:{i:0;R:30494;i:1;R:9;}s:39:"1230:ybttvat-reebe.npgvivgl.abg.nyybjrq";a:2:{i:0;R:30494;i:1;R:9;}s:60:"1230:ybttvat-rkprcgvba.senzrjbex.pbaarpgvbaabgsbhaqrkprcgvba";a:2:{i:0;R:30494;i:1;R:9;}s:53:"1230:ybttvat-rkprcgvba.senzrjbex.cntrrkcverqrkprcgvba";a:2:{i:0;R:30494;i:1;R:9;}s:60:"1230:ybttvat-rkprcgvba.senzrjbex.freivprhaninvynoyrrkprcgvba";a:2:{i:0;R:30494;i:1;R:9;}s:48:"1230:ybttvat-rkprcgvba.senzrjbex.flfgrzrkprcgvba";a:2:{i:0;R:30494;i:1;R:9;}s:77:"1230:ybttvat-rkprcgvba.senzrjbex.flfgrzrkprcgvba.uvoreangrpbaarpgvbarkprcgvba";a:2:{i:0;R:30494;i:1;R:9;}s:79:"1230:ybttvat-rkprcgvba.senzrjbex.flfgrzrkprcgvba.inyhrbowrpgpbairefvbarkprcgvba";a:2:{i:0;R:30494;i:1;R:9;}s:64:"1230:ybttvat-rkprcgvbaf.nccyvpngvba.ybna.vainyvqqvfohefrzragqngr";a:2:{i:0;R:30494;i:1;R:9;}s:17:"1230:ybttvat-rkvg";a:2:{i:0;R:30494;i:1;R:9;}s:69:"1230:ybttvat-rkprcgvba.svanapvny.nccyvpngvbarkprcgvba.nppbhagabgsbhaq";a:2:{i:0;R:30494;i:1;R:9;}s:30:"1230:ybtva-reebef.vyyrtnyfgngr";a:2:{i:0;s:15:"out-mifos-login";i:1;R:9;}s:33:"1230:ybtva-reebef.ongpuwboehaavat";a:2:{i:0;R:30510;i:1;R:9;}s:26:"1230:ybtva-reebef.fuhgqbja";a:2:{i:0;R:30510;i:1;R:9;}s:36:"1230:ybtva-reebef.vainyvqbyqcnffjbeq";a:2:{i:0;R:30510;i:1;R:9;}s:27:"1230:ybtva-reebef.ybtbhgbhg";a:2:{i:0;R:30510;i:1;R:9;}s:27:"1230:ybtva-reebef.znaqngbel";a:2:{i:0;R:30510;i:1;R:9;}s:31:"1230:ybtva-reebef.znkvzhzyratgu";a:2:{i:0;R:30510;i:1;R:9;}s:31:"1230:ybtva-reebef.zvavzhzyratgu";a:2:{i:0;R:30510;i:1;R:9;}s:33:"1230:ybtva-reebef.arjpbascnffjbeq";a:2:{i:0;R:30510;i:1;R:9;}s:24:"1230:ybtva-reebef.cersvk";a:2:{i:0;R:30510;i:1;R:9;}s:39:"1230:ybtva-reebef.fnzrbyqnaqarjcnffjbeq";a:2:{i:0;R:30510;i:1;R:9;}s:32:"1230:ybtva-reebef.frffvbagvzrbhg";a:2:{i:0;R:30510;i:1;R:9;}s:27:"1230:ybtva-reebef.fcnprznfx";a:2:{i:0;R:30510;i:1;R:9;}s:24:"1230:ybtva-reebef.fhssvk";a:2:{i:0;R:30510;i:1;R:9;}s:23:"1230:ybtva-ybtva.pnapry";a:2:{i:0;R:30510;i:1;R:9;}s:31:"1230:ybtva-ybtva.punatrcnffjbeq";a:2:{i:0;R:30510;i:1;R:9;}s:36:"1230:ybtva-ybtva.punatrcnffjbeq.grkg";a:2:{i:0;R:30510;i:1;R:9;}s:32:"1230:ybtva-ybtva.pbasvezcnffjbeq";a:2:{i:0;R:30510;i:1;R:9;}s:22:"1230:ybtva-ybtva.ybtva";a:2:{i:0;R:30510;i:1;R:9;}s:23:"1230:ybtva-ybtva.ybtbhg";a:2:{i:0;R:30510;i:1;R:9;}s:28:"1230:ybtva-ybtva.arjcnffjbeq";a:2:{i:0;R:30510;i:1;R:9;}s:28:"1230:ybtva-ybtva.byqcnffjbeq";a:2:{i:0;R:30510;i:1;R:9;}s:25:"1230:ybtva-ybtva.cnffjbeq";a:2:{i:0;R:30510;i:1;R:9;}s:23:"1230:ybtva-ybtva.fhozvg";a:2:{i:0;R:30510;i:1;R:9;}s:25:"1230:ybtva-ybtva.hfreanzr";a:2:{i:0;R:30510;i:1;R:9;}s:24:"1230:ybtva-ybtva.jrypbzr";a:2:{i:0;R:30510;i:1;R:9;}s:33:"1230:ybtva-ybtva.freirevfabgwrggl";a:2:{i:0;R:30510;i:1;R:9;}s:36:"1230:ybbxhc-nppbhagnpgvba-nqwhfgzrag";a:2:{i:0;s:16:"out-mifos-lookup";i:1;R:9;}s:50:"1230:ybbxhc-nppbhagnpgvba-phfgbzrenppbhagercnlzrag";a:2:{i:0;R:30538;i:1;R:9;}s:44:"1230:ybbxhc-nppbhagnpgvba-phfgbzrenqwhfgzrag";a:2:{i:0;R:30538;i:1;R:9;}s:33:"1230:ybbxhc-nppbhagnpgvba-qrcbfvg";a:2:{i:0;R:30538;i:1;R:9;}s:35:"1230:ybbxhc-nppbhagnpgvba-qvfohefny";a:2:{i:0;R:30538;i:1;R:9;}s:50:"1230:ybbxhc-nppbhagnpgvba-qvfeohefnynzbhagerirefny";a:2:{i:0;R:30538;i:1;R:9;}s:29:"1230:ybbxhc-nppbhagnpgvba-srr";a:2:{i:0;R:30538;i:1;R:9;}s:42:"1230:ybbxhc-nppbhagnpgvba-vagrerfg_cbfgvat";a:2:{i:0;R:30538;i:1;R:9;}s:39:"1230:ybbxhc-nppbhagnpgvba-ybnaercnlzrag";a:2:{i:0;R:30538;i:1;R:9;}s:41:"1230:ybbxhc-nppbhagnpgvba-ybnaerfpurqhyrq";a:2:{i:0;R:30538;i:1;R:9;}s:38:"1230:ybbxhc-nppbhagnpgvba-ybnaerirefny";a:2:{i:0;R:30538;i:1;R:9;}s:40:"1230:ybbxhc-nppbhagnpgvba-ybnajevggrabss";a:2:{i:0;R:30538;i:1;R:9;}s:41:"1230:ybbxhc-nppbhagnpgvba-zvfpryyrabhfsrr";a:2:{i:0;R:30538;i:1;R:9;}s:45:"1230:ybbxhc-nppbhagnpgvba-zvfpryyrabhfcranygl";a:2:{i:0;R:30538;i:1;R:9;}s:33:"1230:ybbxhc-nppbhagnpgvba-cnlzrag";a:2:{i:0;R:30538;i:1;R:9;}s:33:"1230:ybbxhc-nppbhagnpgvba-cranygl";a:2:{i:0;R:30538;i:1;R:9;}s:43:"1230:ybbxhc-nppbhagnpgvba-fnivatfnqwhfgzrag";a:2:{i:0;R:30538;i:1;R:9;}s:37:"1230:ybbxhc-nppbhagnpgvba-jnvirbssqhr";a:2:{i:0;R:30538;i:1;R:9;}s:41:"1230:ybbxhc-nppbhagnpgvba-jnvirbssbireqhr";a:2:{i:0;R:30538;i:1;R:9;}s:36:"1230:ybbxhc-nppbhagnpgvba-jvguqenjny";a:2:{i:0;R:30538;i:1;R:9;}s:37:"1230:ybbxhc-nppbhagsyntf-ybnaerirefny";a:2:{i:0;R:30538;i:1;R:9;}s:30:"1230:ybbxhc-nppbhagsyntf-bgure";a:2:{i:0;R:30538;i:1;R:9;}s:33:"1230:ybbxhc-nppbhagsyntf-erwrpgrq";a:2:{i:0;R:30538;i:1;R:9;}s:33:"1230:ybbxhc-nppbhagsyntf-jvguqenj";a:2:{i:0;R:30538;i:1;R:9;}s:44:"1230:ybbxhc-nppbhagfgngr-npgvirvaonqfgnaqvat";a:2:{i:0;R:30538;i:1;R:9;}s:45:"1230:ybbxhc-nppbhagfgngr-npgvirvatbbqfgnaqvat";a:2:{i:0;R:30538;i:1;R:9;}s:44:"1230:ybbxhc-nppbhagfgngr-nccyvpngvbanccebirq";a:2:{i:0;R:30538;i:1;R:9;}s:51:"1230:ybbxhc-nppbhagfgngr-nccyvpngvbacraqvatnccebiny";a:2:{i:0;R:30538;i:1;R:9;}s:31:"1230:ybbxhc-nppbhagfgngr-pnapry";a:2:{i:0;R:30538;i:1;R:9;}s:44:"1230:ybbxhc-nppbhagfgngr-pybfrqboyvtngvbazrg";a:2:{i:0;R:30538;i:1;R:9;}s:42:"1230:ybbxhc-nppbhagfgngr-pybfrqerfpurqhyrq";a:2:{i:0;R:30538;i:1;R:9;}s:41:"1230:ybbxhc-nppbhagfgngr-pybfrqjevggrabss";a:2:{i:0;R:30538;i:1;R:9;}s:38:"1230:ybbxhc-nppbhagfgngr-qvfohefrqgbyb";a:2:{i:0;R:30538;i:1;R:9;}s:43:"1230:ybbxhc-nppbhagfgngr-cnegvnynccyvpngvba";a:2:{i:0;R:30538;i:1;R:9;}s:32:"1230:ybbxhc-nppbhagglcr-phfgbzre";a:2:{i:0;R:30538;i:1;R:9;}s:28:"1230:ybbxhc-nppbhagglcr-ybna";a:2:{i:0;R:30538;i:1;R:9;}s:30:"1230:ybbxhc-nppbhagglcr-fnivat";a:2:{i:0;R:30538;i:1;R:9;}s:42:"1230:ybbxhc-ohfvarffnpgvivgvrf-ntevphygher";a:2:{i:0;R:30538;i:1;R:9;}s:46:"1230:ybbxhc-ohfvarffnpgvivgvrf-navznyuhfonaqel";a:2:{i:0;R:30538;i:1;R:9;}s:42:"1230:ybbxhc-ohfvarffnpgvivgvrf-qnvylynobhe";a:2:{i:0;R:30538;i:1;R:9;}s:46:"1230:ybbxhc-ohfvarffnpgvivgvrf-zvpebragrecevfr";a:2:{i:0;R:30538;i:1;R:9;}s:41:"1230:ybbxhc-ohfvarffnpgvivgvrf-cebqhpgvba";a:2:{i:0;R:30538;i:1;R:9;}s:38:"1230:ybbxhc-ohfvarffnpgvivgvrf-genqvat";a:2:{i:0;R:30538;i:1;R:9;}s:37:"1230:ybbxhc-pngrtbelglcr-nyyphfgbzref";a:2:{i:0;R:30538;i:1;R:9;}s:40:"1230:ybbxhc-pngrtbelglcr-nyycebqhpgglcrf";a:2:{i:0;R:30538;i:1;R:9;}s:31:"1230:ybbxhc-pngrtbelglcr-pragre";a:2:{i:0;R:30538;i:1;R:9;}s:31:"1230:ybbxhc-pngrtbelglcr-pyvrag";a:2:{i:0;R:30538;i:1;R:9;}s:30:"1230:ybbxhc-pngrtbelglcr-tebhc";a:2:{i:0;R:30538;i:1;R:9;}s:30:"1230:ybbxhc-pngrtbelglcr-ybnaf";a:2:{i:0;R:30538;i:1;R:9;}s:32:"1230:ybbxhc-pngrtbelglcr-fnivatf";a:2:{i:0;R:30538;i:1;R:9;}s:31:"1230:ybbxhc-pragrefgnghf-npgvir";a:2:{i:0;R:30538;i:1;R:9;}s:33:"1230:ybbxhc-pragrefgnghf-vanpgvir";a:2:{i:0;R:30538;i:1;R:9;}s:34:"1230:ybbxhc-pyvragsynt-oynpxyvfgrq";a:2:{i:0;R:30538;i:1;R:9;}s:32:"1230:ybbxhc-pyvragsynt-qhcyvpngr";a:2:{i:0;R:30538;i:1;R:9;}s:28:"1230:ybbxhc-pyvragsynt-bgure";a:2:{i:0;R:30538;i:1;R:9;}s:31:"1230:ybbxhc-pyvragsynt-erwrpgrq";a:2:{i:0;R:30538;i:1;R:9;}s:31:"1230:ybbxhc-pyvragsynt-jvguqenj";a:2:{i:0;R:30538;i:1;R:9;}s:31:"1230:ybbxhc-pyvragfgnghf-npgvir";a:2:{i:0;R:30538;i:1;R:9;}s:51:"1230:ybbxhc-pyvragfgnghf-nccyvpngvbacraqvatnccebiny";a:2:{i:0;R:30538;i:1;R:9;}s:34:"1230:ybbxhc-pyvragfgnghf-pnapryyrq";a:2:{i:0;R:30538;i:1;R:9;}s:31:"1230:ybbxhc-pyvragfgnghf-pybfrq";a:2:{i:0;R:30538;i:1;R:9;}s:31:"1230:ybbxhc-pyvragfgnghf-baubyq";a:2:{i:0;R:30538;i:1;R:9;}s:43:"1230:ybbxhc-pyvragfgnghf-cnegvnynccyvpngvba";a:2:{i:0;R:30538;i:1;R:9;}s:33:"1230:ybbxhc-pbyyngrenyglcrf-glcr1";a:2:{i:0;R:30538;i:1;R:9;}s:33:"1230:ybbxhc-pbyyngrenyglcrf-glcr2";a:2:{i:0;R:30538;i:1;R:9;}s:33:"1230:ybbxhc-phfgbzrenggraqnapr-no";a:2:{i:0;R:30538;i:1;R:9;}s:33:"1230:ybbxhc-phfgbzrenggraqnapr-ny";a:2:{i:0;R:30538;i:1;R:9;}s:32:"1230:ybbxhc-phfgbzrenggraqnapr-y";a:2:{i:0;R:30538;i:1;R:9;}s:32:"1230:ybbxhc-phfgbzrenggraqnapr-c";a:2:{i:0;R:30538;i:1;R:9;}s:48:"1230:ybbxhc-phfgbzrefgnghf-phfgbzrenppbhagnpgvir";a:2:{i:0;R:30538;i:1;R:9;}s:50:"1230:ybbxhc-phfgbzrefgnghf-phfgbzrenppbhagvanpgvir";a:2:{i:0;R:30538;i:1;R:9;}s:25:"1230:ybbxhc-qnlenax-svefg";a:2:{i:0;R:30538;i:1;R:9;}s:26:"1230:ybbxhc-qnlenax-sbhegu";a:2:{i:0;R:30538;i:1;R:9;}s:24:"1230:ybbxhc-qnlenax-ynfg";a:2:{i:0;R:30538;i:1;R:9;}s:26:"1230:ybbxhc-qnlenax-frpbaq";a:2:{i:0;R:30538;i:1;R:9;}s:25:"1230:ybbxhc-qnlenax-guveq";a:2:{i:0;R:30538;i:1;R:9;}s:18:"1230:ybbxhc-zbgure";a:2:{i:0;R:30538;i:1;R:9;}s:17:"1230:ybbxhc-puvyq";a:2:{i:0;R:30538;i:1;R:9;}s:37:"1230:ybbxhc-srrsbezhynznfgre-vagrerfg";a:2:{i:0;R:30538;i:1;R:9;}s:39:"1230:ybbxhc-srrsbezhynznfgre-ybnanzbhag";a:2:{i:0;R:30538;i:1;R:9;}s:47:"1230:ybbxhc-srrsbezhynznfgre-ybnanzbhagvagrerfg";a:2:{i:0;R:30538;i:1;R:9;}s:32:"1230:ybbxhc-srrserdhrapl-bargvzr";a:2:{i:0;R:30538;i:1;R:9;}s:33:"1230:ybbxhc-srrserdhrapl-crevbqvp";a:2:{i:0;R:30538;i:1;R:9;}s:41:"1230:ybbxhc-srrcnlzrag-gvzrbsqvfohefgzrag";a:2:{i:0;R:30538;i:1;R:9;}s:47:"1230:ybbxhc-srrcnlzrag-gvzrbssvefgybnaercnlzrag";a:2:{i:0;R:30538;i:1;R:9;}s:30:"1230:ybbxhc-srrcnlzrag-hcsebag";a:2:{i:0;R:30538;i:1;R:9;}s:28:"1230:ybbxhc-srrfgnghf-npgvir";a:2:{i:0;R:30538;i:1;R:9;}s:30:"1230:ybbxhc-srrfgnghf-vanpgvir";a:2:{i:0;R:30538;i:1;R:9;}s:34:"1230:ybbxhc-srrglcr-pbafhygnaplsrr";a:2:{i:0;R:30538;i:1;R:9;}s:34:"1230:ybbxhc-srrglcr-znvagranaprsrr";a:2:{i:0;R:30538;i:1;R:9;}s:34:"1230:ybbxhc-srrglcr-zrrgvatpunetrf";a:2:{i:0;R:30538;i:1;R:9;}s:31:"1230:ybbxhc-srrglcr-genvavatsrr";a:2:{i:0;R:30538;i:1;R:9;}s:54:"1230:ybbxhc-svanapvnynpgvba-phfgbzrenppbhagsrrfcbfgvat";a:2:{i:0;R:30538;i:1;R:9;}s:46:"1230:ybbxhc-svanapvnynpgvba-phfgbzrenqwhfgzrag";a:2:{i:0;R:30538;i:1;R:9;}s:32:"1230:ybbxhc-svanapvnynpgvba-srrf";a:2:{i:0;R:30538;i:1;R:9;}s:36:"1230:ybbxhc-svanapvnynpgvba-vagrerfg";a:2:{i:0;R:30538;i:1;R:9;}s:44:"1230:ybbxhc-svanapvnynpgvba-vagrerfg_cbfgvat";a:2:{i:0;R:30538;i:1;R:9;}s:44:"1230:ybbxhc-svanapvnynpgvba-ybnaqvfohefrzrag";a:2:{i:0;R:30538;i:1;R:9;}s:43:"1230:ybbxhc-svanapvnynpgvba-ybnaerfpurqhyrq";a:2:{i:0;R:30538;i:1;R:9;}s:42:"1230:ybbxhc-svanapvnynpgvba-ybnajevggrabss";a:2:{i:0;R:30538;i:1;R:9;}s:44:"1230:ybbxhc-svanapvnynpgvba-znaqngbelqrcbfvg";a:2:{i:0;R:30538;i:1;R:9;}s:54:"1230:ybbxhc-svanapvnynpgvba-znaqngbelqrcbfvgnqwhfgzrag";a:2:{i:0;R:30538;i:1;R:9;}s:47:"1230:ybbxhc-svanapvnynpgvba-znaqngbeljvguqenjny";a:2:{i:0;R:30538;i:1;R:9;}s:57:"1230:ybbxhc-svanapvnynpgvba-znaqngbeljvguqenjnynqwhfgzrag";a:2:{i:0;R:30538;i:1;R:9;}s:35:"1230:ybbxhc-svanapvnynpgvba-zvfpsrr";a:2:{i:0;R:30538;i:1;R:9;}s:39:"1230:ybbxhc-svanapvnynpgvba-zvfpcranygl";a:2:{i:0;R:30538;i:1;R:9;}s:35:"1230:ybbxhc-svanapvnynpgvba-cranygl";a:2:{i:0;R:30538;i:1;R:9;}s:37:"1230:ybbxhc-svanapvnynpgvba-cevapvcny";a:2:{i:0;R:30538;i:1;R:9;}s:46:"1230:ybbxhc-svanapvnynpgvba-erirefnynqwhfgzrag";a:2:{i:0;R:30538;i:1;R:9;}s:47:"1230:ybbxhc-svanapvnynpgvba-ebhaqvatnqwhfgzragf";a:2:{i:0;R:30538;i:1;R:9;}s:50:"1230:ybbxhc-svanapvnynpgvba-fnivatfvagrerfgcbfgvat";a:2:{i:0;R:30538;i:1;R:9;}s:44:"1230:ybbxhc-svanapvnynpgvba-ibyhagnelqrcbfvg";a:2:{i:0;R:30538;i:1;R:9;}s:54:"1230:ybbxhc-svanapvnynpgvba-ibyhagnelqrcbfvgnqwhfgzrag";a:2:{i:0;R:30538;i:1;R:9;}s:47:"1230:ybbxhc-svanapvnynpgvba-ibyhagneljvguqenjny";a:2:{i:0;R:30538;i:1;R:9;}s:57:"1230:ybbxhc-svanapvnynpgvba-ibyhagneljvguqenjnynqwhfgzrag";a:2:{i:0;R:30538;i:1;R:9;}s:25:"1230:ybbxhc-traqre-srznyr";a:2:{i:0;R:30538;i:1;R:9;}s:23:"1230:ybbxhc-traqre-znyr";a:2:{i:0;R:30538;i:1;R:9;}s:49:"1230:ybbxhc-tenprcrevbqglcrf-tenprbanyyercnlzragf";a:2:{i:0;R:30538;i:1;R:9;}s:33:"1230:ybbxhc-tenprcrevbqglcrf-abar";a:2:{i:0;R:30538;i:1;R:9;}s:47:"1230:ybbxhc-tenprcrevbqglcrf-cevapvcnybayltenpr";a:2:{i:0;R:30538;i:1;R:9;}s:33:"1230:ybbxhc-tebhcsynt-oynpxyvfgrq";a:2:{i:0;R:30538;i:1;R:9;}s:31:"1230:ybbxhc-tebhcsynt-qhcyvpngr";a:2:{i:0;R:30538;i:1;R:9;}s:33:"1230:ybbxhc-tebhcsynt-yrsgcebtenz";a:2:{i:0;R:30538;i:1;R:9;}s:27:"1230:ybbxhc-tebhcsynt-bgure";a:2:{i:0;R:30538;i:1;R:9;}s:30:"1230:ybbxhc-tebhcsynt-erwrpgrq";a:2:{i:0;R:30538;i:1;R:9;}s:33:"1230:ybbxhc-tebhcsynt-genafsreerq";a:2:{i:0;R:30538;i:1;R:9;}s:30:"1230:ybbxhc-tebhcsynt-jvguqenj";a:2:{i:0;R:30538;i:1;R:9;}s:30:"1230:ybbxhc-tebhcfgnghf-npgvir";a:2:{i:0;R:30538;i:1;R:9;}s:50:"1230:ybbxhc-tebhcfgnghf-nccyvpngvbacraqvatnccebiny";a:2:{i:0;R:30538;i:1;R:9;}s:33:"1230:ybbxhc-tebhcfgnghf-pnapryyrq";a:2:{i:0;R:30538;i:1;R:9;}s:30:"1230:ybbxhc-tebhcfgnghf-pybfrq";a:2:{i:0;R:30538;i:1;R:9;}s:30:"1230:ybbxhc-tebhcfgnghf-baubyq";a:2:{i:0;R:30538;i:1;R:9;}s:42:"1230:ybbxhc-tebhcfgnghf-cnegvnynccyvpngvba";a:2:{i:0;R:30538;i:1;R:9;}s:38:"1230:ybbxhc-vagpnyglcrf-nirentronynapr";a:2:{i:0;R:30538;i:1;R:9;}s:38:"1230:ybbxhc-vagpnyglcrf-zvavzhzonynapr";a:2:{i:0;R:30538;i:1;R:9;}s:46:"1230:ybbxhc-vagrerfgpnypehyr-nyjnlferpnyphyngr";a:2:{i:0;R:30538;i:1;R:9;}s:45:"1230:ybbxhc-vagrerfgpnypehyr-arireerpnyphyngr";a:2:{i:0;R:30538;i:1;R:9;}s:42:"1230:ybbxhc-vagrerfgglcrf-qrpyvavatonynapr";a:2:{i:0;R:30538;i:1;R:9;}s:51:"1230:ybbxhc-vagrerfgglcrf-qrpyvavatcevapvcnyonynapr";a:2:{i:0;R:30538;i:1;R:9;}s:68:"1230:ybbxhc-vagrerfgglcrf-qrpyvavatonynapr-rdhnycevapvcnyvafgnyyzrag";a:2:{i:0;R:30538;i:1;R:9;}s:30:"1230:ybbxhc-vagrerfgglcrf-syng";a:2:{i:0;R:30538;i:1;R:9;}s:28:"1230:ybbxhc-ynathntr-ratyvfu";a:2:{i:0;R:30538;i:1;R:9;}s:27:"1230:ybbxhc-ynathntr-serapu";a:2:{i:0;R:30538;i:1;R:9;}s:30:"1230:ybbxhc-ynathntr-vprynaqvp";a:2:{i:0;R:30538;i:1;R:9;}s:28:"1230:ybbxhc-ynathntr-fcnavfu";a:2:{i:0;R:30538;i:1;R:9;}s:27:"1230:ybbxhc-ynathntr-nenovp";a:2:{i:0;R:30538;i:1;R:9;}s:28:"1230:ybbxhc-ynathntr-puvarfr";a:2:{i:0;R:30538;i:1;R:9;}s:28:"1230:ybbxhc-ynathntr-fjnuvyv";a:2:{i:0;R:30538;i:1;R:9;}s:31:"1230:ybbxhc-ynathntr-cbeghthrfr";a:2:{i:0;R:30538;i:1;R:9;}s:26:"1230:ybbxhc-ynathntr-xuzre";a:2:{i:0;R:30538;i:1;R:9;}s:24:"1230:ybbxhc-ynathntr-ynb";a:2:{i:0;R:30538;i:1;R:9;}s:30:"1230:ybbxhc-ynathntr-uhatnevna";a:2:{i:0;R:30538;i:1;R:9;}s:20:"1230:ybbxhc-gbtrgure";a:2:{i:0;R:30538;i:1;R:9;}s:23:"1230:ybbxhc-abggbtrgure";a:2:{i:0;R:30538;i:1;R:9;}s:21:"1230:ybbxhc-ybna-ybna";a:2:{i:0;R:30538;i:1;R:9;}s:33:"1230:ybbxhc-znevgnyfgnghf-zneevrq";a:2:{i:0;R:30538;i:1;R:9;}s:35:"1230:ybbxhc-znevgnyfgnghf-hazneevrq";a:2:{i:0;R:30538;i:1;R:9;}s:33:"1230:ybbxhc-znevgnyfgnghf-jvqbjrq";a:2:{i:0;R:30538;i:1;R:9;}s:28:"1230:ybbxhc-bssvprpbqr-pbqr1";a:2:{i:0;R:30538;i:1;R:9;}s:28:"1230:ybbxhc-bssvprpbqr-pbqr2";a:2:{i:0;R:30538;i:1;R:9;}s:35:"1230:ybbxhc-bssvpryriryf-nernbssvpr";a:2:{i:0;R:30538;i:1;R:9;}s:37:"1230:ybbxhc-bssvpryriryf-oenapubssvpr";a:2:{i:0;R:30538;i:1;R:9;}s:41:"1230:ybbxhc-bssvpryriryf-qvivfvbanybssvpr";a:2:{i:0;R:30538;i:1;R:9;}s:35:"1230:ybbxhc-bssvpryriryf-urnqbssvpr";a:2:{i:0;R:30538;i:1;R:9;}s:39:"1230:ybbxhc-bssvpryriryf-ertvbanybssvpr";a:2:{i:0;R:30538;i:1;R:9;}s:31:"1230:ybbxhc-bssvprfgnghf-npgvir";a:2:{i:0;R:30538;i:1;R:9;}s:33:"1230:ybbxhc-bssvprfgnghf-vanpgvir";a:2:{i:0;R:30538;i:1;R:9;}s:28:"1230:ybbxhc-cnlzragglcr-pnfu";a:2:{i:0;R:30538;i:1;R:9;}s:30:"1230:ybbxhc-cnlzragglcr-purdhr";a:2:{i:0;R:30538;i:1;R:9;}s:31:"1230:ybbxhc-cnlzragglcr-ibhpure";a:2:{i:0;R:30538;i:1;R:9;}s:32:"1230:ybbxhc-crezvffvbaf-nanylfvf";a:2:{i:0;R:30538;i:1;R:9;}s:28:"1230:ybbxhc-crezvffvbaf-ohyx";a:2:{i:0;R:30538;i:1;R:9;}s:48:"1230:ybbxhc-crezvffvbaf-pnanqqabgrfgbybnanppbhag";a:2:{i:0;R:30538;i:1;R:9;}s:46:"1230:ybbxhc-crezvffvbaf-pnanqqabgrfgbcrefbaary";a:2:{i:0;R:30538;i:1;R:9;}s:51:"1230:ybbxhc-crezvffvbaf-pnanqqabgrfgbfnivatfnppbhag";a:2:{i:0;R:30538;i:1;R:9;}s:78:"1230:ybbxhc-crezvffvbaf-pnanqwhfgcnlzragjuranppbhagfgnghfvfpybfrqboyvtngvbazrg";a:2:{i:0;R:30538;i:1;R:9;}s:44:"1230:ybbxhc-crezvffvbaf-pnanqzvavfgreercbegf";a:2:{i:0;R:30538;i:1;R:9;}s:46:"1230:ybbxhc-crezvffvbaf-pnanccylpunetrfgbybnaf";a:2:{i:0;R:30538;i:1;R:9;}s:45:"1230:ybbxhc-crezvffvbaf-pnanccebirybnafvaohyx";a:2:{i:0;R:30538;i:1;R:9;}s:41:"1230:ybbxhc-crezvffvbaf-pnanccebirerfgncv";a:2:{i:0;R:30538;i:1;R:9;}s:50:"1230:ybbxhc-crezvffvbaf-pnaoynpxyvfgfnivatfnppbhag";a:2:{i:0;R:30538;i:1;R:9;}s:58:"1230:ybbxhc-crezvffvbaf-pnapunatrfgngrgbcnegvnynccyvpngvba";a:2:{i:0;R:30538;i:1;R:9;}s:46:"1230:ybbxhc-crezvffvbaf-pnapybfrfnivatfnppbhag";a:2:{i:0;R:30538;i:1;R:9;}s:38:"1230:ybbxhc-crezvffvbaf-pnaperngrshaqf";a:2:{i:0;R:30538;i:1;R:9;}s:53:"1230:ybbxhc-crezvffvbaf-pnaperngrzhygvcyrybnanppbhagf";a:2:{i:0;R:30538;i:1;R:9;}s:66:"1230:ybbxhc-crezvffvbaf-pnaperngrarjybnanppbhagvafnirsbeyngrefgngr";a:2:{i:0;R:30538;i:1;R:9;}s:71:"1230:ybbxhc-crezvffvbaf-pnaperngrarjybnanppbhagvafhozvgsbenccebinyfgngr";a:2:{i:0;R:30538;i:1;R:9;}s:42:"1230:ybbxhc-crezvffvbaf-pnaperngrarjbssvpr";a:2:{i:0;R:30538;i:1;R:9;}s:40:"1230:ybbxhc-crezvffvbaf-pnaperngrarjebyr";a:2:{i:0;R:30538;i:1;R:9;}s:69:"1230:ybbxhc-crezvffvbaf-pnaperngrarjfnivatfnppbhagvafnirsbeyngrefgngr";a:2:{i:0;R:30538;i:1;R:9;}s:74:"1230:ybbxhc-crezvffvbaf-pnaperngrarjfnivatfnppbhagvafhozvgsbenccebinyfgngr";a:2:{i:0;R:30538;i:1;R:9;}s:47:"1230:ybbxhc-crezvffvbaf-pnaperngrarjflfgrzhfref";a:2:{i:0;R:30538;i:1;R:9;}s:52:"1230:ybbxhc-crezvffvbaf-pnaqrsvarnpprcgrqcnlzragglcr";a:2:{i:0;R:30538;i:1;R:9;}s:47:"1230:ybbxhc-crezvffvbaf-pnaznantrdhrfgvbatebhcf";a:2:{i:0;R:30538;i:1;R:9;}s:49:"1230:ybbxhc-crezvffvbaf-pnanpgvingrdhrfgvbatebhcf";a:2:{i:0;R:30538;i:1;R:9;}s:54:"1230:ybbxhc-crezvffvbaf-pnaqrsvaruvqqraznaqngbelsvryqf";a:2:{i:0;R:30538;i:1;R:9;}s:40:"1230:ybbxhc-crezvffvbaf-pnaqrsvarubyvqnl";a:2:{i:0;R:30538;i:1;R:9;}s:47:"1230:ybbxhc-crezvffvbaf-pnaqrsvarphfgbzvmrqgrkg";a:2:{i:0;R:30538;i:1;R:9;}s:45:"1230:ybbxhc-crezvffvbaf-pnaqrsvarybbxhcinyhrf";a:2:{i:0;R:30538;i:1;R:9;}s:49:"1230:ybbxhc-crezvffvbaf-pnaqrsvararjpurpxyvfgglcr";a:2:{i:0;R:30538;i:1;R:9;}s:43:"1230:ybbxhc-crezvffvbaf-pnaqrsvararjsrrglcr";a:2:{i:0;R:30538;i:1;R:9;}s:55:"1230:ybbxhc-crezvffvbaf-pnaqrsvararjybnacebqhpgvafgnapr";a:2:{i:0;R:30538;i:1;R:9;}s:53:"1230:ybbxhc-crezvffvbaf-pnaqrsvararjcebqhpgpngrtbevrf";a:2:{i:0;R:30538;i:1;R:9;}s:50:"1230:ybbxhc-crezvffvbaf-pnaqrsvararjercbegpngrtbel";a:2:{i:0;R:30538;i:1;R:9;}s:58:"1230:ybbxhc-crezvffvbaf-pnaqrsvararjfnivatfcebqhpgvafgnapr";a:2:{i:0;R:30538;i:1;R:9;}s:43:"1230:ybbxhc-crezvffvbaf-pnaqrsvarcebqhpgzvk";a:2:{i:0;R:30538;i:1;R:9;}s:38:"1230:ybbxhc-crezvffvbaf-pnaqryrgrnebyr";a:2:{i:0;R:30538;i:1;R:9;}s:47:"1230:ybbxhc-crezvffvbaf-pnaqryrgrercbegpngrtbel";a:2:{i:0;R:30538;i:1;R:9;}s:39:"1230:ybbxhc-crezvffvbaf-pnaqvfohefrybna";a:2:{i:0;R:30538;i:1;R:9;}s:57:"1230:ybbxhc-crezvffvbaf-pnaqbnqwhfgzragfsbefnivatfnppbhag";a:2:{i:0;R:30538;i:1;R:9;}s:49:"1230:ybbxhc-crezvffvbaf-pnaqbjaybnqercbeggrzcyngr";a:2:{i:0;R:30538;i:1;R:9;}s:53:"1230:ybbxhc-crezvffvbaf-pnarqvgybnanppbhagvasbezngvba";a:2:{i:0;R:30538;i:1;R:9;}s:51:"1230:ybbxhc-crezvffvbaf-pnarqvgybnacebqhpgvafgnaprf";a:2:{i:0;R:30538;i:1;R:9;}s:57:"1230:ybbxhc-crezvffvbaf-pnarqvgcebqhpgpngrtbelvasbezngvba";a:2:{i:0;R:30538;i:1;R:9;}s:41:"1230:ybbxhc-crezvffvbaf-pnarqvgcebqhpgzvk";a:2:{i:0;R:30538;i:1;R:9;}s:48:"1230:ybbxhc-crezvffvbaf-pnarqvgercbegvasbezngvba";a:2:{i:0;R:30538;i:1;R:9;}s:54:"1230:ybbxhc-crezvffvbaf-pnarqvgfnivatfcebqhpgvafgnaprf";a:2:{i:0;R:30538;i:1;R:9;}s:46:"1230:ybbxhc-crezvffvbaf-pnarqvgfrysvasbezngvba";a:2:{i:0;R:30538;i:1;R:9;}s:51:"1230:ybbxhc-crezvffvbaf-pnaragrepbyyrpgvbafurrgqngn";a:2:{i:0;R:30538;i:1;R:9;}s:40:"1230:ybbxhc-crezvffvbaf-pnavzcbegpyvragf";a:2:{i:0;R:30538;i:1;R:9;}s:45:"1230:ybbxhc-crezvffvbaf-pnavzcbeggenafnpgvbaf";a:2:{i:0;R:30538;i:1;R:9;}s:58:"1230:ybbxhc-crezvffvbaf-pnaznxrnqwhfgzragragelgbgurnppbhag";a:2:{i:0;R:30538;i:1;R:9;}s:64:"1230:ybbxhc-crezvffvbaf-pnaznxrqrcbfvgjvguqenjnygbfnivatfnppbhag";a:2:{i:0;R:30538;i:1;R:9;}s:50:"1230:ybbxhc-crezvffvbaf-pnaznxrcnlzraggbgurnppbhag";a:2:{i:0;R:30538;i:1;R:9;}s:38:"1230:ybbxhc-crezvffvbaf-pnazbqvslnebyr";a:2:{i:0;R:30538;i:1;R:9;}s:53:"1230:ybbxhc-crezvffvbaf-pnazbqvslpurpxyvfgvasbezngvba";a:2:{i:0;R:30538;i:1;R:9;}s:47:"1230:ybbxhc-crezvffvbaf-pnazbqvslsrrvasbezngvba";a:2:{i:0;R:30538;i:1;R:9;}s:38:"1230:ybbxhc-crezvffvbaf-pnazbqvslshaqf";a:2:{i:0;R:30538;i:1;R:9;}s:59:"1230:ybbxhc-crezvffvbaf-pnazbqvslyngrarffqbeznaplqrsvavgvba";a:2:{i:0;R:30538;i:1;R:9;}s:48:"1230:ybbxhc-crezvffvbaf-pnazbqvslbssvpruvrenepul";a:2:{i:0;R:30538;i:1;R:9;}s:50:"1230:ybbxhc-crezvffvbaf-pnazbqvslbssvprvasbezngvba";a:2:{i:0;R:30538;i:1;R:9;}s:48:"1230:ybbxhc-crezvffvbaf-pnazbqvslhfrevasbezngvba";a:2:{i:0;R:30538;i:1;R:9;}s:41:"1230:ybbxhc-crezvffvbaf-pnacerivrjercbegf";a:2:{i:0;R:30538;i:1;R:9;}s:45:"1230:ybbxhc-crezvffvbaf-pnaerqbybnaqvfohefnyf";a:2:{i:0;R:30538;i:1;R:9;}s:61:"1230:ybbxhc-crezvffvbaf-pnaerzbirsrrglcrfnggnpurqgbgurnppbhag";a:2:{i:0;R:30538;i:1;R:9;}s:33:"1230:ybbxhc-crezvffvbaf-cranygvrf";a:2:{i:0;R:30538;i:1;R:9;}s:47:"1230:ybbxhc-crezvffvbaf-pnaqrsvararjcranyglglcr";a:2:{i:0;R:30538;i:1;R:9;}s:51:"1230:ybbxhc-crezvffvbaf-pnazbqvslcranyglvasbezngvba";a:2:{i:0;R:30538;i:1;R:9;}s:64:"1230:ybbxhc-crezvffvbaf-pnaerzbircranyglnggnpurqgbgurybnanppbhag";a:2:{i:0;R:30538;i:1;R:9;}s:36:"1230:ybbxhc-crezvffvbaf-pnaercnlybna";a:2:{i:0;R:30538;i:1;R:9;}s:48:"1230:ybbxhc-crezvffvbaf-pnaerirefrybnaqvfohefnyf";a:2:{i:0;R:30538;i:1;R:9;}s:47:"1230:ybbxhc-crezvffvbaf-pnaehaongpuwbofbaqrznaq";a:2:{i:0;R:30538;i:1;R:9;}s:40:"1230:ybbxhc-crezvffvbaf-pnafuhgqbjazvsbf";a:2:{i:0;R:30538;i:1;R:9;}s:45:"1230:ybbxhc-crezvffvbaf-pnaivrjnpgvirfrffvbaf";a:2:{i:0;R:30538;i:1;R:9;}s:46:"1230:ybbxhc-crezvffvbaf-pnafrgzbagupybfvatqngr";a:2:{i:0;R:30538;i:1;R:9;}s:45:"1230:ybbxhc-crezvffvbaf-pnafgnegzvsbffuhgqbja";a:2:{i:0;R:30538;i:1;R:9;}s:38:"1230:ybbxhc-crezvffvbaf-pnahaybpxnhfre";a:2:{i:0;R:30538;i:1;R:9;}s:55:"1230:ybbxhc-crezvffvbaf-pnahcqngrongpuwbofpbasvthengvba";a:2:{i:0;R:30538;i:1;R:9;}s:47:"1230:ybbxhc-crezvffvbaf-pnahcqngrfnivatfnppbhag";a:2:{i:0;R:30538;i:1;R:9;}s:47:"1230:ybbxhc-crezvffvbaf-pnahcybnqnqzvaqbphzragf";a:2:{i:0;R:30538;i:1;R:9;}s:43:"1230:ybbxhc-crezvffvbaf-pnahcybnqarjercbegf";a:2:{i:0;R:30538;i:1;R:9;}s:47:"1230:ybbxhc-crezvffvbaf-pnahcybnqercbeggrzcyngr";a:2:{i:0;R:30538;i:1;R:9;}s:51:"1230:ybbxhc-crezvffvbaf-pnahfrnppbhagvatvagrtengvba";a:2:{i:0;R:30538;i:1;R:9;}s:55:"1230:ybbxhc-crezvffvbaf-pnaivrjnpgvirybnafolybnabssvpre";a:2:{i:0;R:30538;i:1;R:9;}s:45:"1230:ybbxhc-crezvffvbaf-pnaivrjnqzvaqbphzragf";a:2:{i:0;R:30538;i:1;R:9;}s:58:"1230:ybbxhc-crezvffvbaf-pnaivrjnerncresbeznaprfgnghfercbeg";a:2:{i:0;R:30538;i:1;R:9;}s:59:"1230:ybbxhc-crezvffvbaf-pnaivrjoenapupnfupbasvezngvbaercbeg";a:2:{i:0;R:30538;i:1;R:9;}s:58:"1230:ybbxhc-crezvffvbaf-pnaivrjoenapuqhrqvfohefrzragercbeg";a:2:{i:0;R:30538;i:1;R:9;}s:60:"1230:ybbxhc-crezvffvbaf-pnaivrjoenapucresbeznaprfgnghfercbeg";a:2:{i:0;R:30538;i:1;R:9;}s:51:"1230:ybbxhc-crezvffvbaf-pnaivrjoenapucebterffercbeg";a:2:{i:0;R:30538;i:1;R:9;}s:52:"1230:ybbxhc-crezvffvbaf-pnaivrjpragrezrrgvatfpurqhyr";a:2:{i:0;R:30538;i:1;R:9;}s:50:"1230:ybbxhc-crezvffvbaf-pnaivrjpragrefhzznelercbeg";a:2:{i:0;R:30538;i:1;R:9;}s:66:"1230:ybbxhc-crezvffvbaf-pnaivrjpyvragsrrfpunetrfnaqcranygvrfercbeg";a:2:{i:0;R:30538;i:1;R:9;}s:58:"1230:ybbxhc-crezvffvbaf-pnaivrjpyvragybnaercnlzragfpurqhyr";a:2:{i:0;R:30538;i:1;R:9;}s:58:"1230:ybbxhc-crezvffvbaf-pnaivrjpyvragcraqvatnccebinyercbeg";a:2:{i:0;R:30538;i:1;R:9;}s:61:"1230:ybbxhc-crezvffvbaf-pnaivrjpyvragcebqhpgjvfruvfgbelercbeg";a:2:{i:0;R:30538;i:1;R:9;}s:57:"1230:ybbxhc-crezvffvbaf-pnaivrjpyvragfrggyrzragvasbercbeg";a:2:{i:0;R:30538;i:1;R:9;}s:57:"1230:ybbxhc-crezvffvbaf-pnaivrjpyvragfhzzneluvfgbelercbeg";a:2:{i:0;R:30538;i:1;R:9;}s:59:"1230:ybbxhc-crezvffvbaf-pnaivrjpyvragfjvgubhgfnivatfnppbhag";a:2:{i:0;R:30538;i:1;R:9;}s:46:"1230:ybbxhc-crezvffvbaf-pnaivrjpbyyrpgvbafurrg";a:2:{i:0;R:30538;i:1;R:9;}s:52:"1230:ybbxhc-crezvffvbaf-pnaivrjpbyyrpgvbafurrgercbeg";a:2:{i:0;R:30538;i:1;R:9;}s:67:"1230:ybbxhc-crezvffvbaf-pnaivrjqnvylpnfupbasvezngvbaercbegfgnssjvfr";a:2:{i:0;R:30538;i:1;R:9;}s:56:"1230:ybbxhc-crezvffvbaf-pnaivrjqnvylpnfusybjercbegoenapu";a:2:{i:0;R:30538;i:1;R:9;}s:75:"1230:ybbxhc-crezvffvbaf-pnaivrjqnvylcbegsbyvbdhnyvglqngnercbegntvatnanylfvf";a:2:{i:0;R:30538;i:1;R:9;}s:60:"1230:ybbxhc-crezvffvbaf-pnaivrjqnvylgenafnpgvbafhzznelercbeg";a:2:{i:0;R:30538;i:1;R:9;}s:61:"1230:ybbxhc-crezvffvbaf-pnaivrjqrgnvyrqntvatbscbegsbyvbngevfx";a:2:{i:0;R:30538;i:1;R:9;}s:62:"1230:ybbxhc-crezvffvbaf-pnaivrjqvivfvbacresbeznaprfgnghfercbeg";a:2:{i:0;R:30538;i:1;R:9;}s:52:"1230:ybbxhc-crezvffvbaf-pnaivrjshaqerdhverzragercbeg";a:2:{i:0;R:30538;i:1;R:9;}s:66:"1230:ybbxhc-crezvffvbaf-pnaivrjtenzrraxbbgncresbeznaprfgnghfercbeg";a:2:{i:0;R:30538;i:1;R:9;}s:50:"1230:ybbxhc-crezvffvbaf-pnaivrjybnanppbhagfercbegf";a:2:{i:0;R:30538;i:1;R:9;}s:97:"1230:ybbxhc-crezvffvbaf-pnaivrjybnacebqhpgqvfgevohgvbanpgvivgljvfrfvmrjvmrcebqhpgjvfrfrdhrapljvfr";a:2:{i:0;R:30538;i:1;R:9;}s:57:"1230:ybbxhc-crezvffvbaf-pnaivrjybnafcraqvatnccebinyercbeg";a:2:{i:0;R:30538;i:1;R:9;}s:51:"1230:ybbxhc-crezvffvbaf-pnaivrjbetnavmngvbafrggvatf";a:2:{i:0;R:30538;i:1;R:9;}s:45:"1230:ybbxhc-crezvffvbaf-pnaivrjbhgernpuercbeg";a:2:{i:0;R:30538;i:1;R:9;}s:60:"1230:ybbxhc-crezvffvbaf-pnaivrjertvbacresbeznaprfgnghfercbeg";a:2:{i:0;R:30538;i:1;R:9;}s:45:"1230:ybbxhc-crezvffvbaf-pnaivrjercbegpngrtbel";a:2:{i:0;R:30538;i:1;R:9;}s:38:"1230:ybbxhc-crezvffvbaf-pnaivrjercbegf";a:2:{i:0;R:30538;i:1;R:9;}s:53:"1230:ybbxhc-crezvffvbaf-pnaivrjfgnsscresbeznaprercbeg";a:2:{i:0;R:30538;i:1;R:9;}s:48:"1230:ybbxhc-crezvffvbaf-pnaivrjflfgrzvasbezngvba";a:2:{i:0;R:30538;i:1;R:9;}s:47:"1230:ybbxhc-crezvffvbaf-pnajnvirnsrrvafgnyyzrag";a:2:{i:0;R:30538;i:1;R:9;}s:60:"1230:ybbxhc-crezvffvbaf-pnajnvirqhrqrcbfvgfsbefnivatfnppbhag";a:2:{i:0;R:30538;i:1;R:9;}s:64:"1230:ybbxhc-crezvffvbaf-pnajnvirbireqhrqrcbfvgfsbefnivatfnppbhag";a:2:{i:0;R:30538;i:1;R:9;}s:39:"1230:ybbxhc-crezvffvbaf-pnajnvircranygl";a:2:{i:0;R:30538;i:1;R:9;}s:30:"1230:ybbxhc-crezvffvbaf-pragre";a:2:{i:0;R:30538;i:1;R:9;}s:31:"1230:ybbxhc-crezvffvbaf-pragref";a:2:{i:0;R:30538;i:1;R:9;}s:58:"1230:ybbxhc-crezvffvbaf-pragref-pnanqqabgrfgbpragreerpbeqf";a:2:{i:0;R:30538;i:1;R:9;}s:63:"1230:ybbxhc-crezvffvbaf-pragref-pnanccylpunetrfgbpragrenppbhagf";a:2:{i:0;R:30538;i:1;R:9;}s:50:"1230:ybbxhc-crezvffvbaf-pragref-pnaperngrarjpragre";a:2:{i:0;R:30538;i:1;R:9;}s:51:"1230:ybbxhc-crezvffvbaf-pragref-pnarqvgpragrefgnghf";a:2:{i:0;R:30538;i:1;R:9;}s:68:"1230:ybbxhc-crezvffvbaf-pragref-pnarqvgsrrnzbhagnggnpurqgbgurnppbhag";a:2:{i:0;R:30538;i:1;R:9;}s:54:"1230:ybbxhc-crezvffvbaf-pragref-pnarqvgzrrgvatfpurqhyr";a:2:{i:0;R:30538;i:1;R:9;}s:71:"1230:ybbxhc-crezvffvbaf-pragref-pnaznxrnqwhfgzragragevrfgbpragrenppbhag";a:2:{i:0;R:30538;i:1;R:9;}s:63:"1230:ybbxhc-crezvffvbaf-pragref-pnaznxrcnlzragfgbpragrenppbhagf";a:2:{i:0;R:30538;i:1;R:9;}s:58:"1230:ybbxhc-crezvffvbaf-pragref-pnazbqvslpragrevasbezngvba";a:2:{i:0;R:30538;i:1;R:9;}s:66:"1230:ybbxhc-crezvffvbaf-pragref-pnaerzbirsrrglcrfsebzpragrenppbhag";a:2:{i:0;R:30538;i:1;R:9;}s:57:"1230:ybbxhc-crezvffvbaf-pragref-pnafcrpvslzrrgvatfpurqhyr";a:2:{i:0;R:30538;i:1;R:9;}s:50:"1230:ybbxhc-crezvffvbaf-pragref-pnajnvirnqhrnzbhag";a:2:{i:0;R:30538;i:1;R:9;}s:34:"1230:ybbxhc-crezvffvbaf-purpxyvfgf";a:2:{i:0;R:30538;i:1;R:9;}s:36:"1230:ybbxhc-crezvffvbaf-pyvragqrgnvy";a:2:{i:0;R:30538;i:1;R:9;}s:40:"1230:ybbxhc-crezvffvbaf-pyvragznantrzrag";a:2:{i:0;R:30538;i:1;R:9;}s:31:"1230:ybbxhc-crezvffvbaf-pyvragf";a:2:{i:0;R:30538;i:1;R:9;}s:62:"1230:ybbxhc-crezvffvbaf-pyvragf-pnanqqnarkvfgvatpyvraggbntebhc";a:2:{i:0;R:30538;i:1;R:9;}s:56:"1230:ybbxhc-crezvffvbaf-pyvragf-pnanqqrqvguvfgbevpnyqngn";a:2:{i:0;R:30538;i:1;R:9;}s:51:"1230:ybbxhc-crezvffvbaf-pyvragf-pnanqqabgrfgbpyvrag";a:2:{i:0;R:30538;i:1;R:9;}s:63:"1230:ybbxhc-crezvffvbaf-pyvragf-pnanccylpunetrfgbpyvragnppbhagf";a:2:{i:0;R:30538;i:1;R:9;}s:51:"1230:ybbxhc-crezvffvbaf-pyvragf-pnaoynpxyvfgnpyvrag";a:2:{i:0;R:30538;i:1;R:9;}s:54:"1230:ybbxhc-crezvffvbaf-pyvragf-pnapunatrfgngrgbnpgvir";a:2:{i:0;R:30538;i:1;R:9;}s:74:"1230:ybbxhc-crezvffvbaf-pyvragf-pnapunatrfgngrgbnccyvpngvbacraqvatnccebiny";a:2:{i:0;R:30538;i:1;R:9;}s:57:"1230:ybbxhc-crezvffvbaf-pyvragf-pnapunatrfgngrgbpnapryyrq";a:2:{i:0;R:30538;i:1;R:9;}s:54:"1230:ybbxhc-crezvffvbaf-pyvragf-pnapunatrfgngrgbpybfrq";a:2:{i:0;R:30538;i:1;R:9;}s:54:"1230:ybbxhc-crezvffvbaf-pyvragf-pnapunatrfgngrgbbaubyq";a:2:{i:0;R:30538;i:1;R:9;}s:66:"1230:ybbxhc-crezvffvbaf-pyvragf-pnapunatrfgngrgbcnegvnynccyvpngvba";a:2:{i:0;R:30538;i:1;R:9;}s:69:"1230:ybbxhc-crezvffvbaf-pyvragf-pnaperngrarjpyvragvafnirsbeyngrefgngr";a:2:{i:0;R:30538;i:1;R:9;}s:74:"1230:ybbxhc-crezvffvbaf-pyvragf-pnaperngrarjpyvragvafhozvgsbenccebinyfgngr";a:2:{i:0;R:30538;i:1;R:9;}s:68:"1230:ybbxhc-crezvffvbaf-pyvragf-pnarqvgsrrnzbhagnggnpurqgbgurnppbhag";a:2:{i:0;R:30538;i:1;R:9;}s:54:"1230:ybbxhc-crezvffvbaf-pyvragf-pnarqvgtebhczrzorefuvc";a:2:{i:0;R:30538;i:1;R:9;}s:54:"1230:ybbxhc-crezvffvbaf-pyvragf-pnarqvgzrrgvatfpurqhyr";a:2:{i:0;R:30538;i:1;R:9;}s:53:"1230:ybbxhc-crezvffvbaf-pyvragf-pnarqvgzsvvasbezngvba";a:2:{i:0;R:30538;i:1;R:9;}s:55:"1230:ybbxhc-crezvffvbaf-pyvragf-pnarqvgbssvprzrzorefuvc";a:2:{i:0;R:30538;i:1;R:9;}s:58:"1230:ybbxhc-crezvffvbaf-pyvragf-pnarqvgcrefbanyvasbezngvba";a:2:{i:0;R:30538;i:1;R:9;}s:71:"1230:ybbxhc-crezvffvbaf-pyvragf-pnaznxrnqwhfgzragragevrfgbpyvragnppbhag";a:2:{i:0;R:30538;i:1;R:9;}s:63:"1230:ybbxhc-crezvffvbaf-pyvragf-pnaznxrcnlzragfgbpyvragnppbhagf";a:2:{i:0;R:30538;i:1;R:9;}s:58:"1230:ybbxhc-crezvffvbaf-pyvragf-pnaerzbirpyvragfsebztebhcf";a:2:{i:0;R:30538;i:1;R:9;}s:66:"1230:ybbxhc-crezvffvbaf-pyvragf-pnaerzbirsrrglcrfsebzpyvragnppbhag";a:2:{i:0;R:30538;i:1;R:9;}s:57:"1230:ybbxhc-crezvffvbaf-pyvragf-pnafcrpvslzrrgvatfpurqhyr";a:2:{i:0;R:30538;i:1;R:9;}s:50:"1230:ybbxhc-crezvffvbaf-pyvragf-pnajnvirnqhrnzbhag";a:2:{i:0;R:30538;i:1;R:9;}s:50:"1230:ybbxhc-crezvffvbaf-pyvragf-pnarqvgcubarahzore";a:2:{i:0;R:30538;i:1;R:9;}s:47:"1230:ybbxhc-crezvffvbaf-pbasvthengvbaznantrzrag";a:2:{i:0;R:30538;i:1;R:9;}s:28:"1230:ybbxhc-crezvffvbaf-srrf";a:2:{i:0;R:30538;i:1;R:9;}s:29:"1230:ybbxhc-crezvffvbaf-shaqf";a:2:{i:0;R:30538;i:1;R:9;}s:30:"1230:ybbxhc-crezvffvbaf-tebhcf";a:2:{i:0;R:30538;i:1;R:9;}s:55:"1230:ybbxhc-crezvffvbaf-tebhcf-pnanqqrqvguvfgbevpnyqngn";a:2:{i:0;R:30538;i:1;R:9;}s:49:"1230:ybbxhc-crezvffvbaf-tebhcf-pnanqqabgrfgbtebhc";a:2:{i:0;R:30538;i:1;R:9;}s:61:"1230:ybbxhc-crezvffvbaf-tebhcf-pnanccylpunetrfgbtebhcnppbhagf";a:2:{i:0;R:30538;i:1;R:9;}s:49:"1230:ybbxhc-crezvffvbaf-tebhcf-pnaoynpxyvfgntebhc";a:2:{i:0;R:30538;i:1;R:9;}s:53:"1230:ybbxhc-crezvffvbaf-tebhcf-pnapunatrfgngrgbnpgvir";a:2:{i:0;R:30538;i:1;R:9;}s:73:"1230:ybbxhc-crezvffvbaf-tebhcf-pnapunatrfgngrgbnccyvpngvbacraqvatnccebiny";a:2:{i:0;R:30538;i:1;R:9;}s:56:"1230:ybbxhc-crezvffvbaf-tebhcf-pnapunatrfgngrgbpnapryyrq";a:2:{i:0;R:30538;i:1;R:9;}s:53:"1230:ybbxhc-crezvffvbaf-tebhcf-pnapunatrfgngrgbpybfrq";a:2:{i:0;R:30538;i:1;R:9;}s:53:"1230:ybbxhc-crezvffvbaf-tebhcf-pnapunatrfgngrgbbaubyq";a:2:{i:0;R:30538;i:1;R:9;}s:65:"1230:ybbxhc-crezvffvbaf-tebhcf-pnapunatrfgngrgbcnegvnynccyvpngvba";a:2:{i:0;R:30538;i:1;R:9;}s:67:"1230:ybbxhc-crezvffvbaf-tebhcf-pnaperngrarjtebhcvafnirsbeyngrefgngr";a:2:{i:0;R:30538;i:1;R:9;}s:72:"1230:ybbxhc-crezvffvbaf-tebhcf-pnaperngrarjtebhcvafhozvgsbenccebinyfgngr";a:2:{i:0;R:30538;i:1;R:9;}s:54:"1230:ybbxhc-crezvffvbaf-tebhcf-pnarqvgpragrezrzorefuvc";a:2:{i:0;R:30538;i:1;R:9;}s:67:"1230:ybbxhc-crezvffvbaf-tebhcf-pnarqvgsrrnzbhagnggnpurqgbgurnppbhag";a:2:{i:0;R:30538;i:1;R:9;}s:54:"1230:ybbxhc-crezvffvbaf-tebhcf-pnarqvgtebhcvasbezngvba";a:2:{i:0;R:30538;i:1;R:9;}s:53:"1230:ybbxhc-crezvffvbaf-tebhcf-pnarqvgzrrgvatfpurqhyr";a:2:{i:0;R:30538;i:1;R:9;}s:54:"1230:ybbxhc-crezvffvbaf-tebhcf-pnarqvgbssvprzrzorefuvc";a:2:{i:0;R:30538;i:1;R:9;}s:69:"1230:ybbxhc-crezvffvbaf-tebhcf-pnaznxrnqwhfgzragragevrfgbtebhcnppbhag";a:2:{i:0;R:30538;i:1;R:9;}s:61:"1230:ybbxhc-crezvffvbaf-tebhcf-pnaznxrcnlzragfgbtebhcnppbhagf";a:2:{i:0;R:30538;i:1;R:9;}s:64:"1230:ybbxhc-crezvffvbaf-tebhcf-pnaerzbirsrrglcrfsebztebhcnppbhag";a:2:{i:0;R:30538;i:1;R:9;}s:56:"1230:ybbxhc-crezvffvbaf-tebhcf-pnafcrpvslzrrgvatfpurqhyr";a:2:{i:0;R:30538;i:1;R:9;}s:49:"1230:ybbxhc-crezvffvbaf-tebhcf-pnajnvirnqhrnzbhag";a:2:{i:0;R:30538;i:1;R:9;}s:38:"1230:ybbxhc-crezvffvbaf-ybnaznantrzrag";a:2:{i:0;R:30538;i:1;R:9;}s:38:"1230:ybbxhc-crezvffvbaf-ybnacebprffvat";a:2:{i:0;R:30538;i:1;R:9;}s:63:"1230:ybbxhc-crezvffvbaf-ybnacebprffvat-pnapunatrfgngrgbnccebirq";a:2:{i:0;R:30538;i:1;R:9;}s:64:"1230:ybbxhc-crezvffvbaf-ybnacebprffvat-pnapunatrfgngrgbpnapryyrq";a:2:{i:0;R:30538;i:1;R:9;}s:72:"1230:ybbxhc-crezvffvbaf-ybnacebprffvat-pnapunatrfgngrgbpybfrqerfpurqhyrq";a:2:{i:0;R:30538;i:1;R:9;}s:71:"1230:ybbxhc-crezvffvbaf-ybnacebprffvat-pnapunatrfgngrgbpybfrqjevggrabss";a:2:{i:0;R:30538;i:1;R:9;}s:68:"1230:ybbxhc-crezvffvbaf-ybnacebprffvat-pnapunatrfgngrgbqvfohefrqgbyb";a:2:{i:0;R:30538;i:1;R:9;}s:73:"1230:ybbxhc-crezvffvbaf-ybnacebprffvat-pnapunatrfgngrgbcnegvnynccyvpngvba";a:2:{i:0;R:30538;i:1;R:9;}s:70:"1230:ybbxhc-crezvffvbaf-ybnacebprffvat-pnapunatrfgngrgbcraqvatnccebiny";a:2:{i:0;R:30538;i:1;R:9;}s:41:"1230:ybbxhc-crezvffvbaf-ybnacebqhpgqrgnvy";a:2:{i:0;R:30538;i:1;R:9;}s:36:"1230:ybbxhc-crezvffvbaf-ybnacebqhpgf";a:2:{i:0;R:30538;i:1;R:9;}s:40:"1230:ybbxhc-crezvffvbaf-ybnagenafnpgvbaf";a:2:{i:0;R:30538;i:1;R:9;}s:54:"1230:ybbxhc-crezvffvbaf-pnanqwhfgonpxqngrqgenafnpgvbaf";a:2:{i:0;R:30538;i:1;R:9;}s:37:"1230:ybbxhc-crezvffvbaf-zvfpryynarbhf";a:2:{i:0;R:30538;i:1;R:9;}s:38:"1230:ybbxhc-crezvffvbaf-abgvzcyrzragrq";a:2:{i:0;R:30538;i:1;R:9;}s:40:"1230:ybbxhc-crezvffvbaf-bssvprznantrzrag";a:2:{i:0;R:30538;i:1;R:9;}s:31:"1230:ybbxhc-crezvffvbaf-bssvprf";a:2:{i:0;R:30538;i:1;R:9;}s:46:"1230:ybbxhc-crezvffvbaf-betnavmngvbaznantrzrag";a:2:{i:0;R:30538;i:1;R:9;}s:35:"1230:ybbxhc-crezvffvbaf-cresbeznapr";a:2:{i:0;R:30538;i:1;R:9;}s:33:"1230:ybbxhc-crezvffvbaf-crefbaary";a:2:{i:0;R:30538;i:1;R:9;}s:41:"1230:ybbxhc-crezvffvbaf-cebqhpgpngrtbevrf";a:2:{i:0;R:30538;i:1;R:9;}s:41:"1230:ybbxhc-crezvffvbaf-cebqhpgqrsvavgvba";a:2:{i:0;R:30538;i:1;R:9;}s:34:"1230:ybbxhc-crezvffvbaf-cebqhpgzvk";a:2:{i:0;R:30538;i:1;R:9;}s:41:"1230:ybbxhc-crezvffvbaf-ercbegfznantrzrag";a:2:{i:0;R:30538;i:1;R:9;}s:29:"1230:ybbxhc-crezvffvbaf-ebyrf";a:2:{i:0;R:30538;i:1;R:9;}s:41:"1230:ybbxhc-crezvffvbaf-fnivatfznantrzrag";a:2:{i:0;R:30538;i:1;R:9;}s:64:"1230:ybbxhc-crezvffvbaf-fnivatfznantrzrag-pnapunatrfgngrgbnpgvir";a:2:{i:0;R:30538;i:1;R:9;}s:64:"1230:ybbxhc-crezvffvbaf-fnivatfznantrzrag-pnapunatrfgngrgbpnapry";a:2:{i:0;R:30538;i:1;R:9;}s:66:"1230:ybbxhc-crezvffvbaf-fnivatfznantrzrag-pnapunatrfgngrgbvanpgvir";a:2:{i:0;R:30538;i:1;R:9;}s:76:"1230:ybbxhc-crezvffvbaf-fnivatfznantrzrag-pnapunatrfgngrgbcnegvnynccyvpngvba";a:2:{i:0;R:30538;i:1;R:9;}s:73:"1230:ybbxhc-crezvffvbaf-fnivatfznantrzrag-pnapunatrfgngrgbcraqvatnccebiny";a:2:{i:0;R:30538;i:1;R:9;}s:39:"1230:ybbxhc-crezvffvbaf-fnivatfcebqhpgf";a:2:{i:0;R:30538;i:1;R:9;}s:30:"1230:ybbxhc-crezvffvbaf-fgnghf";a:2:{i:0;R:30538;i:1;R:9;}s:41:"1230:ybbxhc-crezvffvbaf-flfgrzvasbezngvba";a:2:{i:0;R:30538;i:1;R:9;}s:38:"1230:ybbxhc-crezvffvbaf-hfreznantrzrag";a:2:{i:0;R:30538;i:1;R:9;}s:31:"1230:ybbxhc-crefbaary-crefbaary";a:2:{i:0;R:30538;i:1;R:9;}s:39:"1230:ybbxhc-crefbaaryyriryf-ybnabssvpre";a:2:{i:0;R:30538;i:1;R:9;}s:42:"1230:ybbxhc-crefbaaryyriryf-abaybnabssvpre";a:2:{i:0;R:30538;i:1;R:9;}s:34:"1230:ybbxhc-crefbaaryfgnghf-npgvir";a:2:{i:0;R:30538;i:1;R:9;}s:36:"1230:ybbxhc-crefbaaryfgnghf-vanpgvir";a:2:{i:0;R:30538;i:1;R:9;}s:40:"1230:ybbxhc-crefbaaryfgnghfhahfrq-npgvir";a:2:{i:0;R:30538;i:1;R:9;}s:42:"1230:ybbxhc-crefbaaryfgnghfhahfrq-vanpgvir";a:2:{i:0;R:30538;i:1;R:9;}s:33:"1230:ybbxhc-cbfvgvba-pragreyrnqre";a:2:{i:0;R:30538;i:1;R:9;}s:36:"1230:ybbxhc-cbfvgvba-pragrefrpergnel";a:2:{i:0;R:30538;i:1;R:9;}s:32:"1230:ybbxhc-cbfvgvba-tebhcyrnqre";a:2:{i:0;R:30538;i:1;R:9;}s:35:"1230:ybbxhc-cbfvgvba-tebhcfrpergnel";a:2:{i:0;R:30538;i:1;R:9;}s:33:"1230:ybbxhc-cbireglfgnghf-abacbbe";a:2:{i:0;R:30538;i:1;R:9;}s:30:"1230:ybbxhc-cbireglfgnghf-cbbe";a:2:{i:0;R:30538;i:1;R:9;}s:34:"1230:ybbxhc-cbireglfgnghf-irelcbbe";a:2:{i:0;R:30538;i:1;R:9;}s:39:"1230:ybbxhc-ceqnccyvpnoyrznfgre-pragref";a:2:{i:0;R:30538;i:1;R:9;}s:39:"1230:ybbxhc-ceqnccyvpnoyrznfgre-pyvragf";a:2:{i:0;R:30538;i:1;R:9;}s:38:"1230:ybbxhc-ceqnccyvpnoyrznfgre-tebhcf";a:2:{i:0;R:30538;i:1;R:9;}s:40:"1230:ybbxhc-cebqhpgpngrtbelfgnghf-npgvir";a:2:{i:0;R:30538;i:1;R:9;}s:42:"1230:ybbxhc-cebqhpgpngrtbelfgnghf-vanpgvir";a:2:{i:0;R:30538;i:1;R:9;}s:31:"1230:ybbxhc-cebqhpgfgngr-npgvir";a:2:{i:0;R:30538;i:1;R:9;}s:30:"1230:ybbxhc-cebqhpgfgngr-pybfr";a:2:{i:0;R:30538;i:1;R:9;}s:33:"1230:ybbxhc-cebqhpgfgngr-vanpgvir";a:2:{i:0;R:30538;i:1;R:9;}s:32:"1230:ybbxhc-cebqhpgfgnghf-npgvir";a:2:{i:0;R:30538;i:1;R:9;}s:32:"1230:ybbxhc-cebqhpgfgnghf-pybfrq";a:2:{i:0;R:30538;i:1;R:9;}s:34:"1230:ybbxhc-cebqhpgfgnghf-vanpgvir";a:2:{i:0;R:30538;i:1;R:9;}s:44:"1230:ybbxhc-erpbzzraqrqnzghavg-pbzcyrgrtebhc";a:2:{i:0;R:30538;i:1;R:9;}s:44:"1230:ybbxhc-erpbzzraqrqnzghavg-crevaqvivqhny";a:2:{i:0;R:30538;i:1;R:9;}s:46:"1230:ybbxhc-ercnlzragehyr-arkgzrrgvatercnlzrag";a:2:{i:0;R:30538;i:1;R:9;}s:40:"1230:ybbxhc-ercnlzragehyr-arkgjbexvatqnl";a:2:{i:0;R:30538;i:1;R:9;}s:45:"1230:ybbxhc-ercnlzragehyr-ercnlzragzbengbevhz";a:2:{i:0;R:30538;i:1;R:9;}s:33:"1230:ybbxhc-ercnlzragehyr-fnzrqnl";a:2:{i:0;R:30538;i:1;R:9;}s:25:"1230:ybbxhc-fnyhgngvba-ze";a:2:{i:0;R:30538;i:1;R:9;}s:26:"1230:ybbxhc-fnyhgngvba-zef";a:2:{i:0;R:30538;i:1;R:9;}s:25:"1230:ybbxhc-fnyhgngvba-zf";a:2:{i:0;R:30538;i:1;R:9;}s:27:"1230:ybbxhc-fnivatf-fnivatf";a:2:{i:0;R:30538;i:1;R:9;}s:42:"1230:ybbxhc-fnivatfnppbhagsynt-oynpxyvfgrq";a:2:{i:0;R:30538;i:1;R:9;}s:39:"1230:ybbxhc-fnivatfnppbhagsynt-erwrpgrq";a:2:{i:0;R:30538;i:1;R:9;}s:39:"1230:ybbxhc-fnivatfnppbhagsynt-jvguqenj";a:2:{i:0;R:30538;i:1;R:9;}s:32:"1230:ybbxhc-fnivatffgnghf-npgvir";a:2:{i:0;R:30538;i:1;R:9;}s:52:"1230:ybbxhc-fnivatffgnghf-nccyvpngvbacraqvatnccebiny";a:2:{i:0;R:30538;i:1;R:9;}s:35:"1230:ybbxhc-fnivatffgnghf-pnapryyrq";a:2:{i:0;R:30538;i:1;R:9;}s:32:"1230:ybbxhc-fnivatffgnghf-pybfrq";a:2:{i:0;R:30538;i:1;R:9;}s:34:"1230:ybbxhc-fnivatffgnghf-vanpgvir";a:2:{i:0;R:30538;i:1;R:9;}s:44:"1230:ybbxhc-fnivatffgnghf-cnegvnynccyvpngvba";a:2:{i:0;R:30538;i:1;R:9;}s:33:"1230:ybbxhc-fnivatfglcr-znaqngbel";a:2:{i:0;R:30538;i:1;R:9;}s:33:"1230:ybbxhc-fnivatfglcr-ibyhagnel";a:2:{i:0;R:30538;i:1;R:9;}s:31:"1230:ybbxhc-fcbhfrsngure-sngure";a:2:{i:0;R:30538;i:1;R:9;}s:31:"1230:ybbxhc-fcbhfrsngure-fcbhfr";a:2:{i:0;R:30538;i:1;R:9;}s:27:"1230:ybbxhc-jrrxqnlf-sevqnl";a:2:{i:0;R:30538;i:1;R:9;}s:27:"1230:ybbxhc-jrrxqnlf-zbaqnl";a:2:{i:0;R:30538;i:1;R:9;}s:29:"1230:ybbxhc-jrrxqnlf-fngheqnl";a:2:{i:0;R:30538;i:1;R:9;}s:27:"1230:ybbxhc-jrrxqnlf-fhaqnl";a:2:{i:0;R:30538;i:1;R:9;}s:29:"1230:ybbxhc-jrrxqnlf-guhefqnl";a:2:{i:0;R:30538;i:1;R:9;}s:28:"1230:ybbxhc-jrrxqnlf-ghrfqnl";a:2:{i:0;R:30538;i:1;R:9;}s:30:"1230:ybbxhc-jrrxqnlf-jrqarfqnl";a:2:{i:0;R:30538;i:1;R:9;}s:20:"1230:ybbxhc-lrfab-ab";a:2:{i:0;R:30538;i:1;R:9;}s:21:"1230:ybbxhc-lrfab-lrf";a:2:{i:0;R:30538;i:1;R:9;}s:59:"1230:ybbxhc-srrhcqngvbaglcr-nccyvrfgbrkvfgvatshghernppbhagf";a:2:{i:0;R:30538;i:1;R:9;}s:51:"1230:ybbxhc-srrhcqngvbaglcr-nccyvrfgbshghernppbhagf";a:2:{i:0;R:30538;i:1;R:9;}s:33:"1230:ybbxhc-cranyglpngrtbel-ybnaf";a:2:{i:0;R:30538;i:1;R:9;}s:35:"1230:ybbxhc-cranyglpngrtbel-fnivatf";a:2:{i:0;R:30538;i:1;R:9;}s:53:"1230:ybbxhc-cranyglsbezhyn-bhgfgnaqvatcevapvcnynzbhag";a:2:{i:0;R:30538;i:1;R:9;}s:48:"1230:ybbxhc-cranyglsbezhyn-bhgfgnaqvatybnanzbhag";a:2:{i:0;R:30538;i:1;R:9;}s:43:"1230:ybbxhc-cranyglsbezhyn-bireqhrnzbhagqhr";a:2:{i:0;R:30538;i:1;R:9;}s:43:"1230:ybbxhc-cranyglsbezhyn-bireqhrcevapvcny";a:2:{i:0;R:30538;i:1;R:9;}s:46:"1230:ybbxhc-cranyglcrevbq-ahzorebsvafgnyyzragf";a:2:{i:0;R:30538;i:1;R:9;}s:38:"1230:ybbxhc-cranyglcrevbq-ahzorebsqnlf";a:2:{i:0;R:30538;i:1;R:9;}s:30:"1230:ybbxhc-cranyglcrevbq-abar";a:2:{i:0;R:30538;i:1;R:9;}s:33:"1230:ybbxhc-cranyglserdhrapl-abar";a:2:{i:0;R:30538;i:1;R:9;}s:34:"1230:ybbxhc-cranyglserdhrapl-qnvyl";a:2:{i:0;R:30538;i:1;R:9;}s:35:"1230:ybbxhc-cranyglserdhrapl-jrrxyl";a:2:{i:0;R:30538;i:1;R:9;}s:36:"1230:ybbxhc-cranyglserdhrapl-zbaguyl";a:2:{i:0;R:30538;i:1;R:9;}s:32:"1230:ybbxhc-cranyglfgnghf-npgvir";a:2:{i:0;R:30538;i:1;R:9;}s:34:"1230:ybbxhc-cranyglfgnghf-vanpgvir";a:2:{i:0;R:30538;i:1;R:9;}s:39:"1230:zrrgvat-reebe.npgvivgl.abg.nyybjrq";a:2:{i:0;s:17:"out-mifos-meeting";i:1;R:9;}s:44:"1230:zrrgvat-reebef.zrrgvat.vainyvqqnlahzore";a:2:{i:0;R:31011;i:1;R:9;}s:47:"1230:zrrgvat-reebef.zrrgvat.vainyvqzrrgvatcynpr";a:2:{i:0;R:31011;i:1;R:9;}s:45:"1230:zrrgvat-reebef.zrrgvat.vainyvqerphensgre";a:2:{i:0;R:31011;i:1;R:9;}s:49:"1230:zrrgvat-reebef.zrrgvat.vainyvqerpheeraprglcr";a:2:{i:0;R:31011;i:1;R:9;}s:54:"1230:zrrgvat-reebef.zrrgvat.fcrpvslqnlahznaqerphensgre";a:2:{i:0;R:31011;i:1;R:9;}s:58:"1230:zrrgvat-reebef.zrrgvat.fcrpvslzbaguylzrrgvatbajrrxqnl";a:2:{i:0;R:31011;i:1;R:9;}s:55:"1230:zrrgvat-reebef.zrrgvat.fcrpvsljrrxqnlnaqerphensgre";a:2:{i:0;R:31011;i:1;R:9;}s:26:"1230:zrrgvat-reebef.cersvk";a:2:{i:0;R:31011;i:1;R:9;}s:26:"1230:zrrgvat-reebef.fhssvk";a:2:{i:0;R:31011;i:1;R:9;}s:44:"1230:zrrgvat-zrrgvat.ynoryserdhraplbszrrgvat";a:2:{i:0;R:31011;i:1;R:9;}s:34:"1230:zrrgvat-zrrgvat.ohggba.perngr";a:2:{i:0;R:31011;i:1;R:9;}s:32:"1230:zrrgvat-zrrgvat.ohggba.fnir";a:2:{i:0;R:31011;i:1;R:9;}s:32:"1230:zrrgvat-zrrgvat.qnlfpurqhyr";a:2:{i:0;R:31011;i:1;R:9;}s:39:"1230:zrrgvat-zrrgvat.qnlfpurqhyr.punatr";a:2:{i:0;R:31011;i:1;R:9;}s:41:"1230:zrrgvat-zrrgvat.reebe.perngvbasnvyrq";a:2:{i:0;R:31011;i:1;R:9;}s:42:"1230:zrrgvat-zrrgvat.reebe.vainyvqzbzguqnl";a:2:{i:0;R:31011;i:1;R:9;}s:44:"1230:zrrgvat-zrrgvat.reebe.vainyvqerphensgre";a:2:{i:0;R:31011;i:1;R:9;}s:37:"1230:zrrgvat-zrrgvat.reebe.ybnqsnvyrq";a:2:{i:0;R:31011;i:1;R:9;}s:39:"1230:zrrgvat-zrrgvat.reebe.hcqngrsnvyrq";a:2:{i:0;R:31011;i:1;R:9;}s:43:"1230:zrrgvat-zrrgvat.ynoryperngrvafgehpgvba";a:2:{i:0;R:31011;i:1;R:9;}s:29:"1230:zrrgvat-zrrgvat.ynoryqnl";a:2:{i:0;R:31011;i:1;R:9;}s:30:"1230:zrrgvat-zrrgvat.ynoryqnlf";a:2:{i:0;R:31011;i:1;R:9;}s:41:"1230:zrrgvat-zrrgvat.ynoryzrrgvatfpurqhyr";a:2:{i:0;R:31011;i:1;R:9;}s:44:"1230:zrrgvat-zrrgvat.ynoryzrrgvatfpurqhyrsbe";a:2:{i:0;R:31011;i:1;R:9;}s:32:"1230:zrrgvat-zrrgvat.ynoryzbaguf";a:2:{i:0;R:31011;i:1;R:9;}s:33:"1230:zrrgvat-zrrgvat.ynorybsrirel";a:2:{i:0;R:31011;i:1;R:9;}s:40:"1230:zrrgvat-zrrgvat.ynorycynprbszrrgvat";a:2:{i:0;R:31011;i:1;R:9;}s:35:"1230:zrrgvat-zrrgvat.ynoryerpheqnlf";a:2:{i:0;R:31011;i:1;R:9;}s:36:"1230:zrrgvat-zrrgvat.ynoryerpherirel";a:2:{i:0;R:31011;i:1;R:9;}s:37:"1230:zrrgvat-zrrgvat.ynoryerphezbaguf";a:2:{i:0;R:31011;i:1;R:9;}s:36:"1230:zrrgvat-zrrgvat.ynoryerphejrrxf";a:2:{i:0;R:31011;i:1;R:9;}s:38:"1230:zrrgvat-zrrgvat.ynoryercnlzragqnl";a:2:{i:0;R:31011;i:1;R:9;}s:29:"1230:zrrgvat-zrrgvat.ynorygur";a:2:{i:0;R:31011;i:1;R:9;}s:31:"1230:zrrgvat-zrrgvat.ynoryjrrxf";a:2:{i:0;R:31011;i:1;R:9;}s:57:"1230:zrrgvat-zrrgvat.ynoryzrrgvatfpurqhyr&tebhczrzorefuvc";a:2:{i:0;R:31011;i:1;R:9;}s:36:"1230:zrrgvat-zrrgvat.zbaguqnl.ahzore";a:2:{i:0;R:31011;i:1;R:9;}s:35:"1230:zrrgvat-zrrgvat.zbaguqnl.enatr";a:2:{i:0;R:31011;i:1;R:9;}s:35:"1230:zrrgvat-zrrgvat.zbaguserdhrapl";a:2:{i:0;R:31011;i:1;R:9;}s:38:"1230:zrrgvat-zrrgvat.zbaguzbagu.ahzore";a:2:{i:0;R:31011;i:1;R:9;}s:40:"1230:zrrgvat-zrrgvat.zbaguzbagu.erdhverq";a:2:{i:0;R:31011;i:1;R:9;}s:47:"1230:zrrgvat-zrrgvat.zbaguzbaguenax.erdhverqzft";a:2:{i:0;R:31011;i:1;R:9;}s:34:"1230:zrrgvat-zrrgvat.zbagufpurqhyr";a:2:{i:0;R:31011;i:1;R:9;}s:41:"1230:zrrgvat-zrrgvat.zbagufpurqhyr.punatr";a:2:{i:0;R:31011;i:1;R:9;}s:39:"1230:zrrgvat-zrrgvat.zbagufpurqhyrfubeg";a:2:{i:0;R:31011;i:1;R:9;}s:48:"1230:zrrgvat-zrrgvat.zbaguglcr.erdhverqzftcyrnfr";a:2:{i:0;R:31011;i:1;R:9;}s:42:"1230:zrrgvat-zrrgvat.zbagujrrx.erdhverqzft";a:2:{i:0;R:31011;i:1;R:9;}s:37:"1230:zrrgvat-zrrgvat.zfthcqngrzrrgvat";a:2:{i:0;R:31011;i:1;R:9;}s:36:"1230:zrrgvat-zrrgvat.erhejrrx.ahzore";a:2:{i:0;R:31011;i:1;R:9;}s:40:"1230:zrrgvat-zrrgvat.jrrxqnl.erdhverqzft";a:2:{i:0;R:31011;i:1;R:9;}s:34:"1230:zrrgvat-zrrgvat.jrrxserdhrapl";a:2:{i:0;R:31011;i:1;R:9;}s:33:"1230:zrrgvat-zrrgvat.jrrxfpurqhyr";a:2:{i:0;R:31011;i:1;R:9;}s:40:"1230:zrrgvat-zrrgvat.jrrxfpurqhyr.punatr";a:2:{i:0;R:31011;i:1;R:9;}s:38:"1230:zrrgvat-zrrgvat.jrrxfpurqhyrfubeg";a:2:{i:0;R:31011;i:1;R:9;}s:28:"1230:zrah-ohggba.nqzvazbqhyr";a:2:{i:0;s:14:"out-mifos-menu";i:1;R:9;}s:29:"1230:zrah-ohggba.pyvragzbqhyr";a:2:{i:0;R:31066;i:1;R:9;}s:20:"1230:zrah-ynory.ybna";a:2:{i:0;R:31066;i:1;R:9;}s:23:"1230:zrah-ynory.fnivatf";a:2:{i:0;R:31066;i:1;R:9;}s:23:"1230:zrah-ynory.nppbhag";a:2:{i:0;R:31066;i:1;R:9;}s:28:"1230:zrah-ynory.nppbhagfznyy";a:2:{i:0;R:31066;i:1;R:9;}s:24:"1230:zrah-ynory.nppbhagf";a:2:{i:0;R:31066;i:1;R:9;}s:29:"1230:zrah-ynory.nppbhagffznyy";a:2:{i:0;R:31066;i:1;R:9;}s:26:"1230:zrah-ynory.nqzvagnfxf";a:2:{i:0;R:31066;i:1;R:9;}s:22:"1230:zrah-ynory.ngevfx";a:2:{i:0;R:31066;i:1;R:9;}s:22:"1230:zrah-ynory.oenapu";a:2:{i:0;R:31066;i:1;R:9;}s:22:"1230:zrah-ynory.pragre";a:2:{i:0;R:31066;i:1;R:9;}s:22:"1230:zrah-ynory.punatr";a:2:{i:0;R:31066;i:1;R:9;}s:36:"1230:zrah-ynory.nccebirzhygvcyrybnaf";a:2:{i:0;R:31066;i:1;R:9;}s:22:"1230:zrah-ynory.pyvrag";a:2:{i:0;R:31066;i:1;R:9;}s:23:"1230:zrah-ynory.pyvragf";a:2:{i:0;R:31066;i:1;R:9;}s:31:"1230:zrah-ynory.pbyyrpgvbafurrg";a:2:{i:0;R:31066;i:1;R:9;}s:32:"1230:zrah-ynory.pbyyrpgvbafurrgf";a:2:{i:0;R:31066;i:1;R:9;}s:22:"1230:zrah-ynory.perngr";a:2:{i:0;R:31066;i:1;R:9;}s:42:"1230:zrah-ynory.perngrzhygvcyrybnanppbhagf";a:2:{i:0;R:31066;i:1;R:9;}s:36:"1230:zrah-ynory.perngrfnivatfnppbhag";a:2:{i:0;R:31066;i:1;R:9;}s:33:"1230:zrah-ynory.perngrybnanppbhag";a:2:{i:0;R:31066;i:1;R:9;}s:25:"1230:zrah-ynory.perngrarj";a:2:{i:0;R:31066;i:1;R:9;}s:30:"1230:zrah-ynory.perngrarjtebhc";a:2:{i:0;R:31066;i:1;R:9;}s:31:"1230:zrah-ynory.perngrarjpragre";a:2:{i:0;R:31066;i:1;R:9;}s:31:"1230:zrah-ynory.perngrarjpyvrag";a:2:{i:0;R:31066;i:1;R:9;}s:20:"1230:zrah-ynory.qngn";a:2:{i:0;R:31066;i:1;R:9;}s:31:"1230:zrah-ynory.qryvadhragybnaf";a:2:{i:0;R:31066;i:1;R:9;}s:21:"1230:zrah-ynory.ragre";a:2:{i:0;R:31066;i:1;R:9;}s:40:"1230:zrah-ynory.ragrepbyyrpgvbafurrgqngn";a:2:{i:0;R:31066;i:1;R:9;}s:21:"1230:zrah-ynory.tebhc";a:2:{i:0;R:31066;i:1;R:9;}s:20:"1230:zrah-ynory.uryc";a:2:{i:0;R:31066;i:1;R:9;}s:27:"1230:zrah-ynory.ybnabssvpre";a:2:{i:0;R:31066;i:1;R:9;}s:22:"1230:zrah-ynory.znantr";a:2:{i:0;R:31066;i:1;R:9;}s:30:"1230:zrah-ynory.znantrrkvfgvat";a:2:{i:0;R:31066;i:1;R:9;}s:26:"1230:zrah-ynory.zrahfrnepu";a:2:{i:0;R:31066;i:1;R:9;}s:24:"1230:zrah-ynory.zhygvcyr";a:2:{i:0;R:31066;i:1;R:9;}s:34:"1230:zrah-ynory.bcraarjybnanppbhag";a:2:{i:0;R:31066;i:1;R:9;}s:37:"1230:zrah-ynory.bcraarjfnivatfnppbhag";a:2:{i:0;R:31066;i:1;R:9;}s:23:"1230:zrah-ynory.bcraarj";a:2:{i:0;R:31066;i:1;R:9;}s:25:"1230:zrah-ynory.cbegsbyvb";a:2:{i:0;R:31066;i:1;R:9;}s:21:"1230:zrah-ynory.cevag";a:2:{i:0;R:31066;i:1;R:9;}s:26:"1230:zrah-ynory.dhvpxfgneg";a:2:{i:0;R:31066;i:1;R:9;}s:22:"1230:zrah-ynory.ercbeg";a:2:{i:0;R:31066;i:1;R:9;}s:23:"1230:zrah-ynory.ercbegf";a:2:{i:0;R:31066;i:1;R:9;}s:31:"1230:zrah-ynory.frnepuanzrflfvq";a:2:{i:0;R:31066;i:1;R:9;}s:23:"1230:zrah-ynory.frrnyfb";a:2:{i:0;R:31066;i:1;R:9;}s:22:"1230:zrah-ynory.fgnghf";a:2:{i:0;R:31066;i:1;R:9;}s:21:"1230:zrah-ynory.gnfxf";a:2:{i:0;R:31066;i:1;R:9;}s:20:"1230:zrah-ynory.ivrj";a:2:{i:0;R:31066;i:1;R:9;}s:25:"1230:zrah-ynory.j/bpragre";a:2:{i:0;R:31066;i:1;R:9;}s:28:"1230:zrah-ynory.lbhefrggvatf";a:2:{i:0;R:31066;i:1;R:9;}s:27:"1230:zy-nppbhagnpgvba.ynory";a:2:{i:0;s:12:"out-mifos-ml";i:1;R:9;}s:34:"1230:zy-nppbhagnpgvbaglcrf.qrcbfvg";a:2:{i:0;R:31119;i:1;R:9;}s:36:"1230:zy-nppbhagnpgvbaglcrf.qvfohefny";a:2:{i:0;R:31119;i:1;R:9;}s:40:"1230:zy-nppbhagnpgvbaglcrf.srr_ercnlzrag";a:2:{i:0;R:31119;i:1;R:9;}s:41:"1230:zy-nppbhagnpgvbaglcrf.ybna_ercnlzrag";a:2:{i:0;R:31119;i:1;R:9;}s:37:"1230:zy-nppbhagnpgvbaglcrf.jvguqenjny";a:2:{i:0;R:31119;i:1;R:9;}s:26:"1230:zy-nppbhagsyntf.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:26:"1230:zy-nppbhagfgngr.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:25:"1230:zy-nppbhagglcr.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:22:"1230:zy-nqqerff1.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:22:"1230:zy-nqqerff2.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:22:"1230:zy-nqqerff3.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:20:"1230:zy-nzbhag.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:23:"1230:zy-ohyxragel.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:32:"1230:zy-ohfvarffnpgvivgvrf.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:26:"1230:zy-pngrtbelglcr.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:20:"1230:zy-pragre.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:26:"1230:zy-pragrefgnghf.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:25:"1230:zy-pvgvmrafuvc.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:18:"1230:zy-pvgl.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:20:"1230:zy-pyvrag.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:26:"1230:zy-pyvragfgnghf.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:29:"1230:zy-pbyyngrenyglcrf.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:37:"1230:zy-phfgbzsvryqglcr.nycun_ahzrevp";a:2:{i:0;R:31119;i:1;R:9;}s:28:"1230:zy-phfgbzsvryqglcr.qngr";a:2:{i:0;R:31119;i:1;R:9;}s:31:"1230:zy-phfgbzsvryqglcr.ahzrevp";a:2:{i:0;R:31119;i:1;R:9;}s:32:"1230:zy-phfgbzrenggraqnapr.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:28:"1230:zy-phfgbzrefgnghf.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:18:"1230:zy-qngr.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:21:"1230:zy-qnlenax.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:25:"1230:zy-qrfpevcgvba.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:36:"1230:zy-qvfgnaprsebzobgbpragre.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:32:"1230:zy-qvfgnaprsebzubgbob.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:28:"1230:zy-rqhpngvbayriry.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:23:"1230:zy-rguavpvgl.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:24:"1230:zy-rkgreanyvq.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:28:"1230:zy-rkgreanyybnavq.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:25:"1230:zy-rkgreanyfnivatfvq";a:2:{i:0;R:31119;i:1;R:9;}s:31:"1230:zy-rkgreanyfnivatfvq.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:30:"1230:zy-srrsbezhynznfgre.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:24:"1230:zy-srrcnlzrag.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:23:"1230:zy-srrfgnghf.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:21:"1230:zy-srrglcr.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:19:"1230:zy-svryq.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:29:"1230:zy-svanapvnynpgvba.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:24:"1230:zy-tegfgnssvq.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:20:"1230:zy-traqre.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:26:"1230:zy-tbireazragvq.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:30:"1230:zy-tenprcrevbqglcrf.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:19:"1230:zy-tebhc.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:23:"1230:zy-tebhcsynt.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:25:"1230:zy-tebhcfgnghf.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:25:"1230:zy-unaqvpnccrq.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:25:"1230:zy-vagpnyglcrf.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:22:"1230:zy-vagrerfg.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:30:"1230:zy-vagrerfgpnypehyr.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:27:"1230:zy-vagrerfgglcrf.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:22:"1230:zy-ynathntr.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:18:"1230:zy-ybna.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:26:"1230:zy-ybnachecbfrf.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:27:"1230:zy-znevgnyfgnghf.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:25:"1230:zy-zrrgvatgvzr.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:22:"1230:zy-arjinyhr.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:34:"1230:zy-abbspyvragfcrepragre.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:33:"1230:zy-abbspyvragfcretebhc.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:20:"1230:zy-bssvpr.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:24:"1230:zy-bssvprpbqr.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:26:"1230:zy-bssvpryriryf.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:26:"1230:zy-bssvprfgnghf.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:22:"1230:zy-byqinyhr.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:25:"1230:zy-cnlzragglcr.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:25:"1230:zy-cnlzragglcrf.pnfu";a:2:{i:0;R:31119;i:1;R:9;}s:27:"1230:zy-cnlzragglcrf.purdhr";a:2:{i:0;R:31119;i:1;R:9;}s:28:"1230:zy-cnlzragglcrf.ibhpure";a:2:{i:0;R:31119;i:1;R:9;}s:25:"1230:zy-crezvffvbaf.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:23:"1230:zy-crefbaary.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:29:"1230:zy-crefbaaryyriryf.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:29:"1230:zy-crefbaaryfgnghf.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:29:"1230:zy-crefbaarygvgyrf.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:24:"1230:zy-cbfgnypbqr.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:27:"1230:zy-cbireglfgnghf.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:33:"1230:zy-ceqnccyvpnoyrznfgre.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:35:"1230:zy-cebqhpgpngrtbelfgnghf.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:26:"1230:zy-cebqhpgfgngr.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:27:"1230:zy-cebqhpgfgnghf.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:23:"1230:zy-enaxbsqnl.svefg";a:2:{i:0;R:31119;i:1;R:9;}s:24:"1230:zy-enaxbsqnl.frpbaq";a:2:{i:0;R:31119;i:1;R:9;}s:23:"1230:zy-enaxbsqnl.guveq";a:2:{i:0;R:31119;i:1;R:9;}s:24:"1230:zy-enaxbsqnl.sbhegu";a:2:{i:0;R:31119;i:1;R:9;}s:22:"1230:zy-enaxbsqnl.ynfg";a:2:{i:0;R:31119;i:1;R:9;}s:32:"1230:zy-erpbzzraqrqnzghavg.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:31:"1230:zy-ercynprzragfgnghf.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:24:"1230:zy-fnyhgngvba.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:21:"1230:zy-fnivatf.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:27:"1230:zy-fnivatffgnghf.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:25:"1230:zy-fnivatfglcr.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:27:"1230:zy-freivprpunetr.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:26:"1230:zy-fcbhfrsngure.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:19:"1230:zy-fgngr.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:20:"1230:zy-gvgyrf.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:18:"1230:zy-hfre.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:22:"1230:zy-jrrxqnl.sevqnl";a:2:{i:0;R:31119;i:1;R:9;}s:22:"1230:zy-jrrxqnl.zbaqnl";a:2:{i:0;R:31119;i:1;R:9;}s:24:"1230:zy-jrrxqnl.fngheqnl";a:2:{i:0;R:31119;i:1;R:9;}s:22:"1230:zy-jrrxqnl.fhaqnl";a:2:{i:0;R:31119;i:1;R:9;}s:24:"1230:zy-jrrxqnl.guhefqnl";a:2:{i:0;R:31119;i:1;R:9;}s:23:"1230:zy-jrrxqnl.ghrfqnl";a:2:{i:0;R:31119;i:1;R:9;}s:25:"1230:zy-jrrxqnl.jrqarfqnl";a:2:{i:0;R:31119;i:1;R:9;}s:22:"1230:zy-jrrxqnlf.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:19:"1230:zy-lrfab.ynory";a:2:{i:0;R:31119;i:1;R:9;}s:20:"1230:zy-lrfabsynt.ab";a:2:{i:0;R:31119;i:1;R:9;}s:21:"1230:zy-lrfabsynt.lrf";a:2:{i:0;R:31119;i:1;R:9;}s:16:"1230:bsssvprhv-1";a:2:{i:0;s:19:"out-mifos-offficeui";i:1;R:9;}s:50:"1230:bsssvprhv-bssvpr.nqqerff.nqqerff1.erdhverqzft";a:2:{i:0;R:31232;i:1;R:9;}s:46:"1230:bsssvprhv-bssvpr.nqqerff.pvgl.erdhverqzft";a:2:{i:0;R:31232;i:1;R:9;}s:49:"1230:bsssvprhv-bssvpr.nqqerff.pbhagel.erdhverqzft";a:2:{i:0;R:31232;i:1;R:9;}s:52:"1230:bsssvprhv-bssvpr.nqqerff.cbfgnypbqr.erdhverqzft";a:2:{i:0;R:31232;i:1;R:9;}s:47:"1230:bsssvprhv-bssvpr.nqqerff.fgngr.erdhverqzft";a:2:{i:0;R:31232;i:1;R:9;}s:39:"1230:bsssvprhv-bssvpr.nqqerffabgragrerq";a:2:{i:0;R:31232;i:1;R:9;}s:28:"1230:bsssvprhv-bssvpr.pnapry";a:2:{i:0;R:31232;i:1;R:9;}s:26:"1230:bsssvprhv-bssvpr.rqvg";a:2:{i:0;R:31232;i:1;R:9;}s:42:"1230:bsssvprhv-bssvpr.reebe.perngvbasnvyrq";a:2:{i:0;R:31232;i:1;R:9;}s:52:"1230:bsssvprhv-bssvpr.reebe.reebevaybnqvatznfgreqngn";a:2:{i:0;R:31232;i:1;R:9;}s:37:"1230:bsssvprhv-bssvpr.reebe.trgsnvyrq";a:2:{i:0;R:31232;i:1;R:9;}s:45:"1230:bsssvprhv-bssvpr.reebe.unfnpgvirpuvyqrea";a:2:{i:0;R:31232;i:1;R:9;}s:56:"1230:bsssvprhv-bssvpr.reebe.unfnpgvirbssvprjvguguvfyriry";a:2:{i:0;R:31232;i:1;R:9;}s:46:"1230:bsssvprhv-bssvpr.reebe.unfnpgvircrefbaary";a:2:{i:0;R:31232;i:1;R:9;}s:38:"1230:bsssvprhv-bssvpr.reebe.ybnqsnvyrq";a:2:{i:0;R:31232;i:1;R:9;}s:42:"1230:bsssvprhv-bssvpr.reebe.hcqngvbasnvyrq";a:2:{i:0;R:31232;i:1;R:9;}s:51:"1230:bsssvprhv-bssvpr.reebe.hcqngvbauvrenepulsnvyrq";a:2:{i:0;R:31232;i:1;R:9;}s:46:"1230:bsssvprhv-bssvpr.sbezbssvprglcr.anzrrkvfg";a:2:{i:0;R:31232;i:1;R:9;}s:49:"1230:bsssvprhv-bssvpr.sbezbssvprglcr.cyrnfryryrpg";a:2:{i:0;R:31232;i:1;R:9;}s:48:"1230:bsssvprhv-bssvpr.sbezbssvprglcr.erdhverqzft";a:2:{i:0;R:31232;i:1;R:9;}s:51:"1230:bsssvprhv-bssvpr.sbezbssvprglcr.fubeganzrrkvfg";a:2:{i:0;R:31232;i:1;R:9;}s:50:"1230:bsssvprhv-bssvpr.sbezcneragbssvpr.erdhverqzft";a:2:{i:0;R:31232;i:1;R:9;}s:33:"1230:bsssvprhv-bssvpr.ynorynqqarj";a:2:{i:0;R:31232;i:1;R:9;}s:39:"1230:bsssvprhv-bssvpr.ynorynqqarjbssvpr";a:2:{i:0;R:31232;i:1;R:9;}s:42:"1230:bsssvprhv-bssvpr.ynorynqqarjbssvprabj";a:2:{i:0;R:31232;i:1;R:9;}s:46:"1230:bsssvprhv-bssvpr.ynorynqqvgvbavasbezngvba";a:2:{i:0;R:31232;i:1;R:9;}s:34:"1230:bsssvprhv-bssvpr.ynorynqqerff";a:2:{i:0;R:31232;i:1;R:9;}s:35:"1230:bsssvprhv-bssvpr.ynorynqqerff1";a:2:{i:0;R:31232;i:1;R:9;}s:35:"1230:bsssvprhv-bssvpr.ynorynqqerff2";a:2:{i:0;R:31232;i:1;R:9;}s:35:"1230:bsssvprhv-bssvpr.ynorynqqerff3";a:2:{i:0;R:31232;i:1;R:9;}s:37:"1230:bsssvprhv-bssvpr.ynorynernbssvpr";a:2:{i:0;R:31232;i:1;R:9;}s:39:"1230:bsssvprhv-bssvpr.ynoryoenapubssvpr";a:2:{i:0;R:31232;i:1;R:9;}s:39:"1230:bsssvprhv-bssvpr.ynorypunatrfgnghf";a:2:{i:0;R:31232;i:1;R:9;}s:45:"1230:bsssvprhv-bssvpr.ynorypurpxyriryvapyhqrq";a:2:{i:0;R:31232;i:1;R:9;}s:31:"1230:bsssvprhv-bssvpr.ynorypvgl";a:2:{i:0;R:31232;i:1;R:9;}s:44:"1230:bsssvprhv-bssvpr.ynorypbzcyrgrgursvryqf";a:2:{i:0;R:31232;i:1;R:9;}s:34:"1230:bsssvprhv-bssvpr.ynorypbhagel";a:2:{i:0;R:31232;i:1;R:9;}s:46:"1230:bsssvprhv-bssvpr.ynoryperngrqfhpprffshyyl";a:2:{i:0;R:31232;i:1;R:9;}s:43:"1230:bsssvprhv-bssvpr.ynoryqvivfvbanybssvpr";a:2:{i:0;R:31232;i:1;R:9;}s:41:"1230:bsssvprhv-bssvpr.ynoryrqvgbssvprvasb";a:2:{i:0;R:31232;i:1;R:9;}s:49:"1230:bsssvprhv-bssvpr.ynoryragrebssvprvasbezngvba";a:2:{i:0;R:31232;i:1;R:9;}s:51:"1230:bsssvprhv-bssvpr.ynorysvryqfznexrqjvgunfgrevfx";a:2:{i:0;R:31232;i:1;R:9;}s:37:"1230:bsssvprhv-bssvpr.ynoryurnqbssvpr";a:2:{i:0;R:31232;i:1;R:9;}s:36:"1230:bsssvprhv-bssvpr.ynoryyvaxnqzva";a:2:{i:0;R:31232;i:1;R:9;}s:42:"1230:bsssvprhv-bssvpr.ynoryyvaxivrjbssvprf";a:2:{i:0;R:31232;i:1;R:9;}s:48:"1230:bsssvprhv-bssvpr.ynoryznaqngbelvafgehpgvbaf";a:2:{i:0;R:31232;i:1;R:9;}s:38:"1230:bsssvprhv-bssvpr.ynoryznkzvayriry";a:2:{i:0;R:31232;i:1;R:9;}s:29:"1230:bsssvprhv-bssvpr.ynoryab";a:2:{i:0;R:31232;i:1;R:9;}s:31:"1230:bsssvprhv-bssvpr.ynoryabgr";a:2:{i:0;R:31232;i:1;R:9;}s:42:"1230:bsssvprhv-bssvpr.ynoryabgrvafgehpgvba";a:2:{i:0;R:31232;i:1;R:9;}s:40:"1230:bsssvprhv-bssvpr.ynorybssvprnqqerff";a:2:{i:0;R:31232;i:1;R:9;}s:47:"1230:bsssvprhv-bssvpr.ynorybssvprnffvtarqahzore";a:2:{i:0;R:31232;i:1;R:9;}s:37:"1230:bsssvprhv-bssvpr.ynorybssvprpbqr";a:2:{i:0;R:31232;i:1;R:9;}s:51:"1230:bsssvprhv-bssvpr.ynorybssvprperngrqvafgehpgvba";a:2:{i:0;R:31232;i:1;R:9;}s:40:"1230:bsssvprhv-bssvpr.ynorybssvprqrgnvyf";a:2:{i:0;R:31232;i:1;R:9;}s:44:"1230:bsssvprhv-bssvpr.ynorybssvprvasbezngvba";a:2:{i:0;R:31232;i:1;R:9;}s:37:"1230:bsssvprhv-bssvpr.ynorybssvpranzr";a:2:{i:0;R:31232;i:1;R:9;}s:42:"1230:bsssvprhv-bssvpr.ynorybssvprfubeganzr";a:2:{i:0;R:31232;i:1;R:9;}s:37:"1230:bsssvprhv-bssvpr.ynorybssvprglcr";a:2:{i:0;R:31232;i:1;R:9;}s:39:"1230:bsssvprhv-bssvpr.ynorycneragbssvpr";a:2:{i:0;R:31232;i:1;R:9;}s:37:"1230:bsssvprhv-bssvpr.ynorycyrnfrabgr";a:2:{i:0;R:31232;i:1;R:9;}s:37:"1230:bsssvprhv-bssvpr.ynorycbfgnypbqr";a:2:{i:0;R:31232;i:1;R:9;}s:34:"1230:bsssvprhv-bssvpr.ynorycerfrag";a:2:{i:0;R:31232;i:1;R:9;}s:51:"1230:bsssvprhv-bssvpr.ynorycerivrjbssvprvasbezngvba";a:2:{i:0;R:31232;i:1;R:9;}s:41:"1230:bsssvprhv-bssvpr.ynoryertvbanybssvpr";a:2:{i:0;R:31232;i:1;R:9;}s:42:"1230:bsssvprhv-bssvpr.ynoryerivrjnaqfhozvg";a:2:{i:0;R:31232;i:1;R:9;}s:32:"1230:bsssvprhv-bssvpr.ynoryfgngr";a:2:{i:0;R:31232;i:1;R:9;}s:33:"1230:bsssvprhv-bssvpr.ynoryfgnghf";a:2:{i:0;R:31232;i:1;R:9;}s:44:"1230:bsssvprhv-bssvpr.ynoryfhoertvbanybssvpr";a:2:{i:0;R:31232;i:1;R:9;}s:36:"1230:bsssvprhv-bssvpr.ynorygryrcubar";a:2:{i:0;R:31232;i:1;R:9;}s:49:"1230:bsssvprhv-bssvpr.ynoryivrjbssvprnqqarjbssvpr";a:2:{i:0;R:31232;i:1;R:9;}s:44:"1230:bsssvprhv-bssvpr.ynoryivrjbssvprqrgnvyf";a:2:{i:0;R:31232;i:1;R:9;}s:46:"1230:bsssvprhv-bssvpr.ynoryivrjbssvpruvrenepul";a:2:{i:0;R:31232;i:1;R:9;}s:48:"1230:bsssvprhv-bssvpr.ynoryivrjbssvprvafgehpgvba";a:2:{i:0;R:31232;i:1;R:9;}s:41:"1230:bsssvprhv-bssvpr.znaqngbel_fryrpgobk";a:2:{i:0;R:31232;i:1;R:9;}s:39:"1230:bsssvprhv-bssvpr.znaqngbel_grkgobk";a:2:{i:0;R:31232;i:1;R:9;}s:45:"1230:bsssvprhv-bssvpr.ahzorebszrzorefcretebhc";a:2:{i:0;R:31232;i:1;R:9;}s:46:"1230:bsssvprhv-bssvpr.ahzorebszrzorefcrexraqen";a:2:{i:0;R:31232;i:1;R:9;}s:33:"1230:bsssvprhv-bssvpr.bssvpryriry";a:2:{i:0;R:31232;i:1;R:9;}s:32:"1230:bsssvprhv-bssvpr.bssvpranzr";a:2:{i:0;R:31232;i:1;R:9;}s:44:"1230:bsssvprhv-bssvpr.bssvpranzr.qvfcynlanzr";a:2:{i:0;R:31232;i:1;R:9;}s:40:"1230:bsssvprhv-bssvpr.bssvpranzr.znfxzft";a:2:{i:0;R:31232;i:1;R:9;}s:37:"1230:bsssvprhv-bssvpr.bssvprfubeganzr";a:2:{i:0;R:31232;i:1;R:9;}s:32:"1230:bsssvprhv-bssvpr.bssvprglcr";a:2:{i:0;R:31232;i:1;R:9;}s:35:"1230:bsssvprhv-bssvpr.bcrengvbazbqr";a:2:{i:0;R:31232;i:1;R:9;}s:34:"1230:bsssvprhv-bssvpr.cneragbssvpr";a:2:{i:0;R:31232;i:1;R:9;}s:29:"1230:bsssvprhv-bssvpr.cerivrj";a:2:{i:0;R:31232;i:1;R:9;}s:43:"1230:bsssvprhv-bssvpr.fubeganzr.qvfcynlanzr";a:2:{i:0;R:31232;i:1;R:9;}s:28:"1230:bsssvprhv-bssvpr.fhozvg";a:2:{i:0;R:31232;i:1;R:9;}s:27:"1230:bsssvprhv-bssvpr.gvgyr";a:2:{i:0;R:31232;i:1;R:9;}s:39:"1230:bsssvprhv-ps.ybbxhcragvgl.ragvglvq";a:2:{i:0;R:31232;i:1;R:9;}s:29:"1230:bsssvprhv-psqrs.ragvglvq";a:2:{i:0;R:31232;i:1;R:9;}s:41:"1230:bsssvprhv-reebe.npgvivgl.abg.nyybjrq";a:2:{i:0;R:31232;i:1;R:9;}s:34:"1230:bsssvprhv-reebe.abbssvpryriry";a:2:{i:0;R:31232;i:1;R:9;}s:35:"1230:bsssvprhv-reebe.abbssvprfgnghf";a:2:{i:0;R:31232;i:1;R:9;}s:45:"1230:bsssvprhv-reebe.bssvpr.puvyqunfzberyriry";a:2:{i:0;R:31232;i:1;R:9;}s:41:"1230:bsssvprhv-reebe.bssvpr.qhcyvpngranzr";a:2:{i:0;R:31232;i:1;R:9;}s:46:"1230:bsssvprhv-reebe.bssvpr.qhcyvpngrfubeganzr";a:2:{i:0;R:31232;i:1;R:9;}s:52:"1230:bsssvprhv-reebe.bssvpr.shgherubyvqnlfabggurfnzr";a:2:{i:0;R:31232;i:1;R:9;}s:47:"1230:bsssvprhv-reebe.bssvpr.vainyvqcneragbssvpr";a:2:{i:0;R:31232;i:1;R:9;}s:46:"1230:bsssvprhv-reebe.bssvpr.yriryabgpbasvtherq";a:2:{i:0;R:31232;i:1;R:9;}s:43:"1230:bsssvprhv-reebe.bssvpr.znaqngbel_svryq";a:2:{i:0;R:31232;i:1;R:9;}s:38:"1230:bsssvprhv-reebe.bssvpr.znkernpurq";a:2:{i:0;R:31232;i:1;R:9;}s:56:"1230:bsssvprhv-reebe.bssvpr.cebivqrnqqvgvbanyvasbezngvba";a:2:{i:0;R:31232;i:1;R:9;}s:43:"1230:bsssvprhv-reebe.bssvpr.phfgbzqngrsvryq";a:2:{i:0;R:31232;i:1;R:9;}s:40:"1230:bsssvprhv-reebe.irefvbaabqbabgzngpu";a:2:{i:0;R:31232;i:1;R:9;}s:53:"1230:bsssvprhv-reebef.bssvpr.bssvpryriryabgpbasvtherq";a:2:{i:0;R:31232;i:1;R:9;}s:42:"1230:bsssvprhv-reebef.bssvpr.cneragvainyvq";a:2:{i:0;R:31232;i:1;R:9;}s:44:"1230:bsssvprhv-reebef.bssvpr.cneragabgnpgvir";a:2:{i:0;R:31232;i:1;R:9;}s:48:"1230:bsssvprhv-reebef.bssvpr.fubeganzr.zvayratgu";a:2:{i:0;R:31232;i:1;R:9;}s:52:"1230:bsssvprhv-reebef.bssvpr.hcqngvbauvrenepulsnvyrq";a:2:{i:0;R:31232;i:1;R:9;}s:28:"1230:bsssvprhv-reebef.cersvk";a:2:{i:0;R:31232;i:1;R:9;}s:28:"1230:bsssvprhv-reebef.fhssvk";a:2:{i:0;R:31232;i:1;R:9;}s:56:"1230:bsssvprhv-rkprcgvba.senzrjbex.qbhoyrfhozvgrkprcgvba";a:2:{i:0;R:31232;i:1;R:9;}s:63:"1230:bsssvprhv-rkprcgvba.senzrjbex.svryqpbasvthengvba.znaqngbel";a:2:{i:0;R:31232;i:1;R:9;}s:13:"1230:bssvpr-1";a:2:{i:0;s:16:"out-mifos-office";i:1;R:9;}s:36:"1230:bssvpr-ps.ybbxhcragvgl.ragvglvq";a:2:{i:0;R:31349;i:1;R:9;}s:26:"1230:bssvpr-psqrs.ragvglvq";a:2:{i:0;R:31349;i:1;R:9;}s:38:"1230:bssvpr-reebe.npgvivgl.abg.nyybjrq";a:2:{i:0;R:31349;i:1;R:9;}s:43:"1230:bssvpr-reebe.bssvpr.yriryabgpbasvtherq";a:2:{i:0;R:31349;i:1;R:9;}s:40:"1230:bssvpr-reebe.bssvpr.znaqngbel_svryq";a:2:{i:0;R:31349;i:1;R:9;}s:50:"1230:bssvpr-reebef.bssvpr.bssvpryriryabgpbasvtherq";a:2:{i:0;R:31349;i:1;R:9;}s:39:"1230:bssvpr-reebef.bssvpr.cneragvainyvq";a:2:{i:0;R:31349;i:1;R:9;}s:41:"1230:bssvpr-reebef.bssvpr.cneragabgnpgvir";a:2:{i:0;R:31349;i:1;R:9;}s:45:"1230:bssvpr-reebef.bssvpr.fubeganzr.zvayratgu";a:2:{i:0;R:31349;i:1;R:9;}s:49:"1230:bssvpr-reebef.bssvpr.hcqngvbauvrenepulsnvyrq";a:2:{i:0;R:31349;i:1;R:9;}s:25:"1230:bssvpr-reebef.cersvk";a:2:{i:0;R:31349;i:1;R:9;}s:25:"1230:bssvpr-reebef.fhssvk";a:2:{i:0;R:31349;i:1;R:9;}s:53:"1230:bssvpr-rkprcgvba.senzrjbex.qbhoyrfhozvgrkprcgvba";a:2:{i:0;R:31349;i:1;R:9;}s:60:"1230:bssvpr-rkprcgvba.senzrjbex.svryqpbasvthengvba.znaqngbel";a:2:{i:0;R:31349;i:1;R:9;}s:47:"1230:bssvpr-bssvpr.nqqerff.nqqerff1.erdhverqzft";a:2:{i:0;R:31349;i:1;R:9;}s:43:"1230:bssvpr-bssvpr.nqqerff.pvgl.erdhverqzft";a:2:{i:0;R:31349;i:1;R:9;}s:46:"1230:bssvpr-bssvpr.nqqerff.pbhagel.erdhverqzft";a:2:{i:0;R:31349;i:1;R:9;}s:49:"1230:bssvpr-bssvpr.nqqerff.cbfgnypbqr.erdhverqzft";a:2:{i:0;R:31349;i:1;R:9;}s:44:"1230:bssvpr-bssvpr.nqqerff.fgngr.erdhverqzft";a:2:{i:0;R:31349;i:1;R:9;}s:32:"1230:bssvpr-bssvpr.ohggba.pnapry";a:2:{i:0;R:31349;i:1;R:9;}s:30:"1230:bssvpr-bssvpr.ohggba.rqvg";a:2:{i:0;R:31349;i:1;R:9;}s:33:"1230:bssvpr-bssvpr.ohggba.cerivrj";a:2:{i:0;R:31349;i:1;R:9;}s:39:"1230:bssvpr-bssvpr.reebe.perngvbasnvyrq";a:2:{i:0;R:31349;i:1;R:9;}s:49:"1230:bssvpr-bssvpr.reebe.reebevaybnqvatznfgreqngn";a:2:{i:0;R:31349;i:1;R:9;}s:34:"1230:bssvpr-bssvpr.reebe.trgsnvyrq";a:2:{i:0;R:31349;i:1;R:9;}s:42:"1230:bssvpr-bssvpr.reebe.unfnpgvirpuvyqrea";a:2:{i:0;R:31349;i:1;R:9;}s:53:"1230:bssvpr-bssvpr.reebe.unfnpgvirbssvprjvguguvfyriry";a:2:{i:0;R:31349;i:1;R:9;}s:43:"1230:bssvpr-bssvpr.reebe.unfnpgvircrefbaary";a:2:{i:0;R:31349;i:1;R:9;}s:35:"1230:bssvpr-bssvpr.reebe.ybnqsnvyrq";a:2:{i:0;R:31349;i:1;R:9;}s:39:"1230:bssvpr-bssvpr.reebe.hcqngvbasnvyrq";a:2:{i:0;R:31349;i:1;R:9;}s:48:"1230:bssvpr-bssvpr.reebe.hcqngvbauvrenepulsnvyrq";a:2:{i:0;R:31349;i:1;R:9;}s:43:"1230:bssvpr-bssvpr.sbezbssvprglcr.anzrrkvfg";a:2:{i:0;R:31349;i:1;R:9;}s:46:"1230:bssvpr-bssvpr.sbezbssvprglcr.cyrnfryryrpg";a:2:{i:0;R:31349;i:1;R:9;}s:45:"1230:bssvpr-bssvpr.sbezbssvprglcr.erdhverqzft";a:2:{i:0;R:31349;i:1;R:9;}s:48:"1230:bssvpr-bssvpr.sbezbssvprglcr.fubeganzrrkvfg";a:2:{i:0;R:31349;i:1;R:9;}s:47:"1230:bssvpr-bssvpr.sbezcneragbssvpr.erdhverqzft";a:2:{i:0;R:31349;i:1;R:9;}s:30:"1230:bssvpr-bssvpr.ynorynqqarj";a:2:{i:0;R:31349;i:1;R:9;}s:36:"1230:bssvpr-bssvpr.ynorynqqarjbssvpr";a:2:{i:0;R:31349;i:1;R:9;}s:39:"1230:bssvpr-bssvpr.ynorynqqarjbssvprabj";a:2:{i:0;R:31349;i:1;R:9;}s:43:"1230:bssvpr-bssvpr.ynorynqqvgvbavasbezngvba";a:2:{i:0;R:31349;i:1;R:9;}s:31:"1230:bssvpr-bssvpr.ynorynqqerff";a:2:{i:0;R:31349;i:1;R:9;}s:32:"1230:bssvpr-bssvpr.ynorynqqerff1";a:2:{i:0;R:31349;i:1;R:9;}s:32:"1230:bssvpr-bssvpr.ynorynqqerff2";a:2:{i:0;R:31349;i:1;R:9;}s:32:"1230:bssvpr-bssvpr.ynorynqqerff3";a:2:{i:0;R:31349;i:1;R:9;}s:34:"1230:bssvpr-bssvpr.ynorynernbssvpr";a:2:{i:0;R:31349;i:1;R:9;}s:36:"1230:bssvpr-bssvpr.ynoryoenapubssvpr";a:2:{i:0;R:31349;i:1;R:9;}s:36:"1230:bssvpr-bssvpr.ynorypunatrfgnghf";a:2:{i:0;R:31349;i:1;R:9;}s:42:"1230:bssvpr-bssvpr.ynorypurpxyriryvapyhqrq";a:2:{i:0;R:31349;i:1;R:9;}s:28:"1230:bssvpr-bssvpr.ynorypvgl";a:2:{i:0;R:31349;i:1;R:9;}s:41:"1230:bssvpr-bssvpr.ynorypbzcyrgrgursvryqf";a:2:{i:0;R:31349;i:1;R:9;}s:31:"1230:bssvpr-bssvpr.ynorypbhagel";a:2:{i:0;R:31349;i:1;R:9;}s:43:"1230:bssvpr-bssvpr.ynoryperngrqfhpprffshyyl";a:2:{i:0;R:31349;i:1;R:9;}s:38:"1230:bssvpr-bssvpr.ynoryrqvgbssvprvasb";a:2:{i:0;R:31349;i:1;R:9;}s:46:"1230:bssvpr-bssvpr.ynoryragrebssvprvasbezngvba";a:2:{i:0;R:31349;i:1;R:9;}s:48:"1230:bssvpr-bssvpr.ynorysvryqfznexrqjvgunfgrevfx";a:2:{i:0;R:31349;i:1;R:9;}s:34:"1230:bssvpr-bssvpr.ynoryurnqbssvpr";a:2:{i:0;R:31349;i:1;R:9;}s:33:"1230:bssvpr-bssvpr.ynoryyvaxnqzva";a:2:{i:0;R:31349;i:1;R:9;}s:39:"1230:bssvpr-bssvpr.ynoryyvaxivrjbssvprf";a:2:{i:0;R:31349;i:1;R:9;}s:45:"1230:bssvpr-bssvpr.ynoryznaqngbelvafgehpgvbaf";a:2:{i:0;R:31349;i:1;R:9;}s:35:"1230:bssvpr-bssvpr.ynoryznkzvayriry";a:2:{i:0;R:31349;i:1;R:9;}s:26:"1230:bssvpr-bssvpr.ynoryab";a:2:{i:0;R:31349;i:1;R:9;}s:28:"1230:bssvpr-bssvpr.ynoryabgr";a:2:{i:0;R:31349;i:1;R:9;}s:39:"1230:bssvpr-bssvpr.ynoryabgrvafgehpgvba";a:2:{i:0;R:31349;i:1;R:9;}s:37:"1230:bssvpr-bssvpr.ynorybssvprnqqerff";a:2:{i:0;R:31349;i:1;R:9;}s:44:"1230:bssvpr-bssvpr.ynorybssvprnffvtarqahzore";a:2:{i:0;R:31349;i:1;R:9;}s:34:"1230:bssvpr-bssvpr.ynorybssvprpbqr";a:2:{i:0;R:31349;i:1;R:9;}s:48:"1230:bssvpr-bssvpr.ynorybssvprperngrqvafgehpgvba";a:2:{i:0;R:31349;i:1;R:9;}s:37:"1230:bssvpr-bssvpr.ynorybssvprqrgnvyf";a:2:{i:0;R:31349;i:1;R:9;}s:41:"1230:bssvpr-bssvpr.ynorybssvprvasbezngvba";a:2:{i:0;R:31349;i:1;R:9;}s:34:"1230:bssvpr-bssvpr.ynorybssvpranzr";a:2:{i:0;R:31349;i:1;R:9;}s:39:"1230:bssvpr-bssvpr.ynorybssvprfubeganzr";a:2:{i:0;R:31349;i:1;R:9;}s:34:"1230:bssvpr-bssvpr.ynorybssvprglcr";a:2:{i:0;R:31349;i:1;R:9;}s:36:"1230:bssvpr-bssvpr.ynorycneragbssvpr";a:2:{i:0;R:31349;i:1;R:9;}s:34:"1230:bssvpr-bssvpr.ynorycyrnfrabgr";a:2:{i:0;R:31349;i:1;R:9;}s:34:"1230:bssvpr-bssvpr.ynorycbfgnypbqr";a:2:{i:0;R:31349;i:1;R:9;}s:31:"1230:bssvpr-bssvpr.ynorycerfrag";a:2:{i:0;R:31349;i:1;R:9;}s:48:"1230:bssvpr-bssvpr.ynorycerivrjbssvprvasbezngvba";a:2:{i:0;R:31349;i:1;R:9;}s:38:"1230:bssvpr-bssvpr.ynoryertvbanybssvpr";a:2:{i:0;R:31349;i:1;R:9;}s:39:"1230:bssvpr-bssvpr.ynoryerivrjnaqfhozvg";a:2:{i:0;R:31349;i:1;R:9;}s:29:"1230:bssvpr-bssvpr.ynoryfgngr";a:2:{i:0;R:31349;i:1;R:9;}s:30:"1230:bssvpr-bssvpr.ynoryfgnghf";a:2:{i:0;R:31349;i:1;R:9;}s:41:"1230:bssvpr-bssvpr.ynoryfhoertvbanybssvpr";a:2:{i:0;R:31349;i:1;R:9;}s:33:"1230:bssvpr-bssvpr.ynorygryrcubar";a:2:{i:0;R:31349;i:1;R:9;}s:46:"1230:bssvpr-bssvpr.ynoryivrjbssvprnqqarjbssvpr";a:2:{i:0;R:31349;i:1;R:9;}s:41:"1230:bssvpr-bssvpr.ynoryivrjbssvprqrgnvyf";a:2:{i:0;R:31349;i:1;R:9;}s:43:"1230:bssvpr-bssvpr.ynoryivrjbssvpruvrenepul";a:2:{i:0;R:31349;i:1;R:9;}s:45:"1230:bssvpr-bssvpr.ynoryivrjbssvprvafgehpgvba";a:2:{i:0;R:31349;i:1;R:9;}s:38:"1230:bssvpr-bssvpr.znaqngbel_fryrpgobk";a:2:{i:0;R:31349;i:1;R:9;}s:36:"1230:bssvpr-bssvpr.znaqngbel_grkgobk";a:2:{i:0;R:31349;i:1;R:9;}s:42:"1230:bssvpr-bssvpr.ahzorebszrzorefcretebhc";a:2:{i:0;R:31349;i:1;R:9;}s:43:"1230:bssvpr-bssvpr.ahzorebszrzorefcrexraqen";a:2:{i:0;R:31349;i:1;R:9;}s:29:"1230:bssvpr-bssvpr.bssvpranzr";a:2:{i:0;R:31349;i:1;R:9;}s:41:"1230:bssvpr-bssvpr.bssvpranzr.qvfcynlanzr";a:2:{i:0;R:31349;i:1;R:9;}s:37:"1230:bssvpr-bssvpr.bssvpranzr.znfxzft";a:2:{i:0;R:31349;i:1;R:9;}s:34:"1230:bssvpr-bssvpr.bssvprfubeganzr";a:2:{i:0;R:31349;i:1;R:9;}s:29:"1230:bssvpr-bssvpr.bssvprglcr";a:2:{i:0;R:31349;i:1;R:9;}s:31:"1230:bssvpr-bssvpr.cneragbssvpr";a:2:{i:0;R:31349;i:1;R:9;}s:40:"1230:bssvpr-bssvpr.fubeganzr.qvfcynlanzr";a:2:{i:0;R:31349;i:1;R:9;}s:24:"1230:bssvpr-bssvpr.gvgyr";a:2:{i:0;R:31349;i:1;R:9;}s:34:"1230:cq-reebe.npgvivgl.abg.nyybjrq";a:2:{i:0;R:22;i:1;R:9;}s:34:"1230:cq-reebef.pnypvafgnyyzragglcr";a:2:{i:0;R:22;i:1;R:9;}s:33:"1230:cq-reebef.pnypybnanzbhagglcr";a:2:{i:0;R:22;i:1;R:9;}s:21:"1230:cq-reebef.pubbfr";a:2:{i:0;R:22;i:1;R:9;}s:28:"1230:cq-reebef.qrpvznysbezng";a:2:{i:0;R:22;i:1;R:9;}s:25:"1230:cq-reebef.qrsvagengr";a:2:{i:0;R:22;i:1;R:9;}s:31:"1230:cq-reebef.qrsvagengrpbasvt";a:2:{i:0;R:22;i:1;R:9;}s:28:"1230:cq-reebef.qrsybnanzbhag";a:2:{i:0;R:22;i:1;R:9;}s:24:"1230:cq-reebef.qrszvaznk";a:2:{i:0;R:22;i:1;R:9;}s:30:"1230:cq-reebef.qrszvaznkpbasvt";a:2:{i:0;R:22;i:1;R:9;}s:34:"1230:cq-reebef.qrsnhygvafgnyyzragf";a:2:{i:0;R:22;i:1;R:9;}s:32:"1230:cq-reebef.qrsnhygybnanzbhag";a:2:{i:0;R:22;i:1;R:9;}s:45:"1230:cq-reebef.qrsnhygybnanzbhagvainyvqsbezng";a:2:{i:0;R:22;i:1;R:9;}s:30:"1230:cq-reebef.qrsvafgnyyzragf";a:2:{i:0;R:22;i:1;R:9;}s:39:"1230:cq-reebef.qrsvagrerfgvainyvqsbezng";a:2:{i:0;R:22;i:1;R:9;}s:21:"1230:cq-reebef.qbhoyr";a:2:{i:0;R:22;i:1;R:9;}s:31:"1230:cq-reebef.qhcypngrtbelanzr";a:2:{i:0;R:22;i:1;R:9;}s:30:"1230:cq-reebef.qhcyceqvafganzr";a:2:{i:0;R:22;i:1;R:9;}s:35:"1230:cq-reebef.qhcyceqvafgfubeganzr";a:2:{i:0;R:22;i:1;R:9;}s:31:"1230:cq-reebef.raqqngrrkprcgvba";a:2:{i:0;R:22;i:1;R:9;}s:29:"1230:cq-reebef.raqvafgnyyzrag";a:2:{i:0;R:22;i:1;R:9;}s:28:"1230:cq-reebef.raqybnanzbhag";a:2:{i:0;R:22;i:1;R:9;}s:27:"1230:cq-reebef.srrserdhrapl";a:2:{i:0;R:22;i:1;R:9;}s:31:"1230:cq-reebef.srrpheeraplzngpu";a:2:{i:0;R:22;i:1;R:9;}s:21:"1230:cq-reebef.sbbgre";a:2:{i:0;R:22;i:1;R:9;}s:22:"1230:cq-reebef.trarevp";a:2:{i:0;R:22;i:1;R:9;}s:29:"1230:cq-reebef.tenprcrevbqqhe";a:2:{i:0;R:22;i:1;R:9;}s:30:"1230:cq-reebef.terngregunamreb";a:2:{i:0;R:22;i:1;R:9;}s:21:"1230:cq-reebef.urnqre";a:2:{i:0;R:22;i:1;R:9;}s:22:"1230:cq-reebef.vagengr";a:2:{i:0;R:22;i:1;R:9;}s:27:"1230:cq-reebef.vagengrinyhr";a:2:{i:0;R:22;i:1;R:9;}s:22:"1230:cq-reebef.vagrtre";a:2:{i:0;R:22;i:1;R:9;}s:22:"1230:cq-reebef.vainyvq";a:2:{i:0;R:22;i:1;R:9;}s:25:"1230:cq-reebef.znaqnzbhag";a:2:{i:0;R:22;i:1;R:9;}s:24:"1230:cq-reebef.znaqngbel";a:2:{i:0;R:22;i:1;R:9;}s:30:"1230:cq-reebef.znaqngbelpbasvt";a:2:{i:0;R:22;i:1;R:9;}s:19:"1230:cq-reebef.znfx";a:2:{i:0;R:22;i:1;R:9;}s:21:"1230:cq-reebef.znkzva";a:2:{i:0;R:22;i:1;R:9;}s:23:"1230:cq-reebef.znkinyhr";a:2:{i:0;R:22;i:1;R:9;}s:28:"1230:cq-reebef.znkvzhzyratgu";a:2:{i:0;R:22;i:1;R:9;}s:30:"1230:cq-reebef.znkvafgnyyzragf";a:2:{i:0;R:22;i:1;R:9;}s:39:"1230:cq-reebef.znkvagrerfgvainyvqsbezng";a:2:{i:0;R:22;i:1;R:9;}s:28:"1230:cq-reebef.znkybnanzbhag";a:2:{i:0;R:22;i:1;R:9;}s:41:"1230:cq-reebef.znkybnanzbhagvainyvqsbezng";a:2:{i:0;R:22;i:1;R:9;}s:28:"1230:cq-reebef.znkzvavagengr";a:2:{i:0;R:22;i:1;R:9;}s:34:"1230:cq-reebef.znkzvavagengrpbasvt";a:2:{i:0;R:22;i:1;R:9;}s:31:"1230:cq-reebef.znkzvaybnanzbhag";a:2:{i:0;R:22;i:1;R:9;}s:32:"1230:cq-reebef.znkzvaabbsvafgnyy";a:2:{i:0;R:22;i:1;R:9;}s:29:"1230:cq-reebef.znkcranyglengr";a:2:{i:0;R:22;i:1;R:9;}s:28:"1230:cq-reebef.zvavzhzyratgu";a:2:{i:0;R:22;i:1;R:9;}s:30:"1230:cq-reebef.zvavafgnyyzragf";a:2:{i:0;R:22;i:1;R:9;}s:39:"1230:cq-reebef.zvavagrerfgvainyvqsbezng";a:2:{i:0;R:22;i:1;R:9;}s:28:"1230:cq-reebef.zvaybnanzbhag";a:2:{i:0;R:22;i:1;R:9;}s:41:"1230:cq-reebef.zvaybnanzbhagvainyvqsbezng";a:2:{i:0;R:22;i:1;R:9;}s:32:"1230:cq-reebef.zhfgabgorartngvir";a:2:{i:0;R:22;i:1;R:9;}s:21:"1230:cq-reebef.cersvk";a:2:{i:0;R:22;i:1;R:9;}s:41:"1230:cq-reebef.cevapvcnyynfg_vainyvqtenpr";a:2:{i:0;R:22;i:1;R:9;}s:21:"1230:cq-reebef.fryrpg";a:2:{i:0;R:22;i:1;R:9;}s:27:"1230:cq-reebef.fryrpgpbasvt";a:2:{i:0;R:22;i:1;R:9;}s:28:"1230:cq-reebef.fubeganzrznfx";a:2:{i:0;R:22;i:1;R:9;}s:33:"1230:cq-reebef.fgnegqngrrkprcgvba";a:2:{i:0;R:22;i:1;R:9;}s:39:"1230:cq-reebef.fgnegqngrhcqngrrkprcgvba";a:2:{i:0;R:22;i:1;R:9;}s:34:"1230:cq-reebef.fgnegraqvafgnyyzrag";a:2:{i:0;R:22;i:1;R:9;}s:38:"1230:cq-reebef.fgnegraqenatrybnanzbhag";a:2:{i:0;R:22;i:1;R:9;}s:31:"1230:cq-reebef.fgnegvafgnyyzrag";a:2:{i:0;R:22;i:1;R:9;}s:30:"1230:cq-reebef.fgnegybnanzbhag";a:2:{i:0;R:22;i:1;R:9;}s:21:"1230:cq-reebef.fhssvk";a:2:{i:0;R:22;i:1;R:9;}s:49:"1230:cq-rkprcgvba.senzrjbex.qbhoyrfhozvgrkprcgvba";a:2:{i:0;R:22;i:1;R:9;}s:54:"1230:cq-rkprcgvbaf.nccyvpngvba.cebqhpgqrs.vainyvqsvryq";a:2:{i:0;R:22;i:1;R:9;}s:55:"1230:cq-rkprcgvbaf.qrpyvarvagrerfgqvfohefrzragqrqhpgvba";a:2:{i:0;R:22;i:1;R:9;}s:38:"1230:cq-cebqhpg.qrsvarzvksbearjcebqhpg";a:2:{i:0;R:22;i:1;R:9;}s:30:"1230:cq-cebqhpg.typbqrvagrerfg";a:2:{i:0;R:22;i:1;R:9;}s:31:"1230:cq-cebqhpg.typbqrcranygvrf";a:2:{i:0;R:22;i:1;R:9;}s:31:"1230:cq-cebqhpg.typbqrcevapvcny";a:2:{i:0;R:22;i:1;R:9;}s:26:"1230:cq-cebqhpg.nppbhagvat";a:2:{i:0;R:22;i:1;R:9;}s:22:"1230:cq-cebqhpg.npgvir";a:2:{i:0;R:22;i:1;R:9;}s:33:"1230:cq-cebqhpg.nqqarjybnacebqhpg";a:2:{i:0;R:22;i:1;R:9;}s:27:"1230:cq-cebqhpg.nqqybnacebq";a:2:{i:0;R:22;i:1;R:9;}s:22:"1230:cq-cebqhpg.nqqarj";a:2:{i:0;R:22;i:1;R:9;}s:29:"1230:cq-cebqhpg.nqqarjybnaceq";a:2:{i:0;R:22;i:1;R:9;}s:28:"1230:cq-cebqhpg.nqqarjceqpng";a:2:{i:0;R:22;i:1;R:9;}s:32:"1230:cq-cebqhpg.nqqarjfnivatfceq";a:2:{i:0;R:22;i:1;R:9;}s:29:"1230:cq-cebqhpg.nqqfhpprffshy";a:2:{i:0;R:22;i:1;R:9;}s:21:"1230:cq-cebqhpg.nqzva";a:2:{i:0;R:22;i:1;R:9;}s:31:"1230:cq-cebqhpg.nyybjrqcebqhpgf";a:2:{i:0;R:22;i:1;R:9;}s:22:"1230:cq-cebqhpg.nzbhag";a:2:{i:0;R:22;i:1;R:9;}s:28:"1230:cq-cebqhpg.nccputarjnpp";a:2:{i:0;R:22;i:1;R:9;}s:32:"1230:cq-cebqhpg.nccputarjbcranpp";a:2:{i:0;R:22;i:1;R:9;}s:23:"1230:cq-cebqhpg.nccysbe";a:2:{i:0;R:22;i:1;R:9;}s:31:"1230:cq-cebqhpg.nggnpusrrfglcrf";a:2:{i:0;R:22;i:1;R:9;}s:36:"1230:cq-cebqhpg.nggnpucranygvrfglcrf";a:2:{i:0;R:22;i:1;R:9;}s:25:"1230:cq-cebqhpg.nhgbzngvp";a:2:{i:0;R:22;i:1;R:9;}s:20:"1230:cq-cebqhpg.onpx";a:2:{i:0;R:22;i:1;R:9;}s:30:"1230:cq-cebqhpg.onyhfrqsbepnyp";a:2:{i:0;R:22;i:1;R:9;}s:31:"1230:cq-cebqhpg.onynaprvagrerfg";a:2:{i:0;R:22;i:1;R:9;}s:26:"1230:cq-cebqhpg.onyhfrqsbe";a:2:{i:0;R:22;i:1;R:9;}s:38:"1230:cq-cebqhpg.onyhfrqsbevafgpnypehyr";a:2:{i:0;R:22;i:1;R:9;}s:26:"1230:cq-cebqhpg.ohgrqvgpng";a:2:{i:0;R:22;i:1;R:9;}s:31:"1230:cq-cebqhpg.ohgrqvgybnavasb";a:2:{i:0;R:22;i:1;R:9;}s:34:"1230:cq-cebqhpg.ohgrqvgfnivatfvasb";a:2:{i:0;R:22;i:1;R:9;}s:25:"1230:cq-cebqhpg.ohgfhozvg";a:2:{i:0;R:22;i:1;R:9;}s:32:"1230:cq-cebqhpg.olynfgybnanzbhag";a:2:{i:0;R:22;i:1;R:9;}s:27:"1230:cq-cebqhpg.olybnaplpyr";a:2:{i:0;R:22;i:1;R:9;}s:20:"1230:cq-cebqhpg.pnyp";a:2:{i:0;R:22;i:1;R:9;}s:31:"1230:cq-cebqhpg.pnypvafgnyyzrag";a:2:{i:0;R:22;i:1;R:9;}s:30:"1230:cq-cebqhpg.pnypybnanzbhag";a:2:{i:0;R:22;i:1;R:9;}s:22:"1230:cq-cebqhpg.pnapry";a:2:{i:0;R:22;i:1;R:9;}s:28:"1230:cq-cebqhpg.pngrtbelqrfp";a:2:{i:0;R:22;i:1;R:9;}s:27:"1230:cq-cebqhpg.pngrtbelqrg";a:2:{i:0;R:22;i:1;R:9;}s:31:"1230:cq-cebqhpg.pngrtbelqrgnvyf";a:2:{i:0;R:22;i:1;R:9;}s:28:"1230:cq-cebqhpg.pngrtbelvasb";a:2:{i:0;R:22;i:1;R:9;}s:28:"1230:cq-cebqhpg.pngrtbelanzr";a:2:{i:0;R:22;i:1;R:9;}s:25:"1230:cq-cebqhpg.punatrybt";a:2:{i:0;R:22;i:1;R:9;}s:25:"1230:cq-cebqhpg.putfgnghf";a:2:{i:0;R:22;i:1;R:9;}s:41:"1230:cq-cebqhpg.pyvpxgbznxrpunatrffnivatf";a:2:{i:0;R:22;i:1;R:9;}s:37:"1230:cq-cebqhpg.pyvpxgbivrjzvkqrgnvyf";a:2:{i:0;R:22;i:1;R:9;}s:25:"1230:cq-cebqhpg.pyvpxpnap";a:2:{i:0;R:22;i:1;R:9;}s:28:"1230:cq-cebqhpg.pyvpxpnappng";a:2:{i:0;R:22;i:1;R:9;}s:27:"1230:cq-cebqhpg.pyvpxpnapry";a:2:{i:0;R:22;i:1;R:9;}s:37:"1230:cq-cebqhpg.pyvpxpnapryceqzvkvasb";a:2:{i:0;R:22;i:1;R:9;}s:29:"1230:cq-cebqhpg.pyvpxpnapvasb";a:2:{i:0;R:22;i:1;R:9;}s:29:"1230:cq-cebqhpg.pyvpxpnapybna";a:2:{i:0;R:22;i:1;R:9;}s:32:"1230:cq-cebqhpg.pyvpxpnapfnivatf";a:2:{i:0;R:22;i:1;R:9;}s:27:"1230:cq-cebqhpg.pyvpxpngqrg";a:2:{i:0;R:22;i:1;R:9;}s:29:"1230:cq-cebqhpg.pyvpxsrrglcrf";a:2:{i:0;R:22;i:1;R:9;}s:33:"1230:cq-cebqhpg.pyvpxcranyglglcrf";a:2:{i:0;R:22;i:1;R:9;}s:26:"1230:cq-cebqhpg.pyvpxshaqf";a:2:{i:0;R:22;i:1;R:9;}s:28:"1230:cq-cebqhpg.pyvpxybnaqrg";a:2:{i:0;R:22;i:1;R:9;}s:23:"1230:cq-cebqhpg.pyvpxba";a:2:{i:0;R:22;i:1;R:9;}s:28:"1230:cq-cebqhpg.pyvpxcerivrj";a:2:{i:0;R:22;i:1;R:9;}s:31:"1230:cq-cebqhpg.pyvpxclzgfryrpg";a:2:{i:0;R:22;i:1;R:9;}s:34:"1230:cq-cebqhpg.pyvpxevtuggbfryrpg";a:2:{i:0;R:22;i:1;R:9;}s:31:"1230:cq-cebqhpg.pyvpxfnivatfqrg";a:2:{i:0;R:22;i:1;R:9;}s:27:"1230:cq-cebqhpg.pyvpxfhozvg";a:2:{i:0;R:22;i:1;R:9;}s:34:"1230:cq-cebqhpg.pyvragtebhcpragref";a:2:{i:0;R:22;i:1;R:9;}s:23:"1230:cq-cebqhpg.pyvragf";a:2:{i:0;R:22;i:1;R:9;}s:26:"1230:cq-cebqhpg.pbzcsvryqf";a:2:{i:0;R:22;i:1;R:9;}s:43:"1230:cq-cebqhpg.pbzcyrgrsvryqfvafgehpgvbany";a:2:{i:0;R:22;i:1;R:9;}s:24:"1230:cq-cebqhpg.pheerapl";a:2:{i:0;R:22;i:1;R:9;}s:28:"1230:cq-cebqhpg.plpyrpbhagre";a:2:{i:0;R:22;i:1;R:9;}s:19:"1230:cq-cebqhpg.qnl";a:2:{i:0;R:22;i:1;R:9;}s:20:"1230:cq-cebqhpg.qnlf";a:2:{i:0;R:22;i:1;R:9;}s:29:"1230:cq-cebqhpg.qrqhpgrqngqvf";a:2:{i:0;R:22;i:1;R:9;}s:37:"1230:cq-cebqhpg.qrsnppbhagcebprffsybj";a:2:{i:0;R:22;i:1;R:9;}s:22:"1230:cq-cebqhpg.qrsnzg";a:2:{i:0;R:22;i:1;R:9;}s:23:"1230:cq-cebqhpg.qrsnhyg";a:2:{i:0;R:22;i:1;R:9;}s:29:"1230:cq-cebqhpg.qrsnhygnzbhag";a:2:{i:0;R:22;i:1;R:9;}s:27:"1230:cq-cebqhpg.qrsnhygengr";a:2:{i:0;R:22;i:1;R:9;}s:36:"1230:cq-cebqhpg.qrspyvragcebprffsybj";a:2:{i:0;R:22;i:1;R:9;}s:22:"1230:cq-cebqhpg.qrsvar";a:2:{i:0;R:22;i:1;R:9;}s:25:"1230:cq-cebqhpg.qrsvararj";a:2:{i:0;R:22;i:1;R:9;}s:23:"1230:cq-cebqhpg.qrsvafg";a:2:{i:0;R:22;i:1;R:9;}s:26:"1230:cq-cebqhpg.qrsvagengr";a:2:{i:0;R:22;i:1;R:9;}s:25:"1230:cq-cebqhpg.qrsceqpng";a:2:{i:0;R:22;i:1;R:9;}s:30:"1230:cq-cebqhpg.qrscebprffsybj";a:2:{i:0;R:22;i:1;R:9;}s:20:"1230:cq-cebqhpg.qrfp";a:2:{i:0;R:22;i:1;R:9;}s:23:"1230:cq-cebqhpg.qrgnvyf";a:2:{i:0;R:22;i:1;R:9;}s:27:"1230:cq-cebqhpg.qvfohefgbyb";a:2:{i:0;R:22;i:1;R:9;}s:28:"1230:cq-cebqhpg.qbeznaplqnlf";a:2:{i:0;R:22;i:1;R:9;}s:29:"1230:cq-cebqhpg.rqvgpnaprypng";a:2:{i:0;R:22;i:1;R:9;}s:28:"1230:cq-cebqhpg.rqvgybnavasb";a:2:{i:0;R:22;i:1;R:9;}s:37:"1230:cq-cebqhpg.rqvgcerivrjfhozvgybna";a:2:{i:0;R:22;i:1;R:9;}s:40:"1230:cq-cebqhpg.rqvgcerivrjfhozvgfnivatf";a:2:{i:0;R:22;i:1;R:9;}s:31:"1230:cq-cebqhpg.rqvgfnivatfvasb";a:2:{i:0;R:22;i:1;R:9;}s:26:"1230:cq-cebqhpg.rqvgsvryqf";a:2:{i:0;R:22;i:1;R:9;}s:29:"1230:cq-cebqhpg.rqvgceqzvkvas";a:2:{i:0;R:22;i:1;R:9;}s:23:"1230:cq-cebqhpg.raqqngr";a:2:{i:0;R:22;i:1;R:9;}s:21:"1230:cq-cebqhpg.ragre";a:2:{i:0;R:22;i:1;R:9;}s:36:"1230:cq-cebqhpg.ragreybnacebqhpgvasb";a:2:{i:0;R:22;i:1;R:9;}s:39:"1230:cq-cebqhpg.ragrefnivatfcebqhpgvasb";a:2:{i:0;R:22;i:1;R:9;}s:25:"1230:cq-cebqhpg.ragresbyy";a:2:{i:0;R:22;i:1;R:9;}s:33:"1230:cq-cebqhpg.ragreybnacebqvasb";a:2:{i:0;R:22;i:1;R:9;}s:20:"1230:cq-cebqhpg.srrf";a:2:{i:0;R:22;i:1;R:9;}s:25:"1230:cq-cebqhpg.srrfglcrf";a:2:{i:0;R:22;i:1;R:9;}s:25:"1230:cq-cebqhpg.cranygvrf";a:2:{i:0;R:22;i:1;R:9;}s:30:"1230:cq-cebqhpg.cranygvrfglcrf";a:2:{i:0;R:22;i:1;R:9;}s:30:"1230:cq-cebqhpg.svryqferdhverq";a:2:{i:0;R:22;i:1;R:9;}s:34:"1230:cq-cebqhpg.sbeolynfgybnangebj";a:2:{i:0;R:22;i:1;R:9;}s:35:"1230:cq-cebqhpg.sbeolybnaplpyrngebj";a:2:{i:0;R:22;i:1;R:9;}s:51:"1230:cq-cebqhpg.sbeahzorebsynfgybnavafgnyyzragngebj";a:2:{i:0;R:22;i:1;R:9;}s:20:"1230:cq-cebqhpg.serd";a:2:{i:0;R:22;i:1;R:9;}s:27:"1230:cq-cebqhpg.serdcbfgnpp";a:2:{i:0;R:22;i:1;R:9;}s:31:"1230:cq-cebqhpg.serdvafgcbfgnpp";a:2:{i:0;R:22;i:1;R:9;}s:26:"1230:cq-cebqhpg.serdbsvafg";a:2:{i:0;R:22;i:1;R:9;}s:25:"1230:cq-cebqhpg.serdhrapl";a:2:{i:0;R:22;i:1;R:9;}s:25:"1230:cq-cebqhpg.typbqrsbe";a:2:{i:0;R:22;i:1;R:9;}s:25:"1230:cq-cebqhpg.typbqrqrc";a:2:{i:0;R:22;i:1;R:9;}s:25:"1230:cq-cebqhpg.typbqrvag";a:2:{i:0;R:22;i:1;R:9;}s:28:"1230:cq-cebqhpg.tenprcranygl";a:2:{i:0;R:22;i:1;R:9;}s:27:"1230:cq-cebqhpg.tenprcreqhe";a:2:{i:0;R:22;i:1;R:9;}s:28:"1230:cq-cebqhpg.tenprcreglcr";a:2:{i:0;R:22;i:1;R:9;}s:22:"1230:cq-cebqhpg.tebhcf";a:2:{i:0;R:22;i:1;R:9;}s:24:"1230:cq-cebqhpg.vanpgvir";a:2:{i:0;R:22;i:1;R:9;}s:38:"1230:cq-cebqhpg.vapyvaybnaplpyrpbhagre";a:2:{i:0;R:22;i:1;R:9;}s:22:"1230:cq-cebqhpg.vapyva";a:2:{i:0;R:22;i:1;R:9;}s:34:"1230:cq-cebqhpg.vapyybnaplppbhagre";a:2:{i:0;R:22;i:1;R:9;}s:39:"1230:cq-cebqhpg.vapyhqr.vagrerfg.jnvire";a:2:{i:0;R:22;i:1;R:9;}s:19:"1230:cq-cebqhpg.vas";a:2:{i:0;R:22;i:1;R:9;}s:20:"1230:cq-cebqhpg.vasb";a:2:{i:0;R:22;i:1;R:9;}s:39:"1230:cq-cebqhpg.vafgnyyolynfgybnanzbhag";a:2:{i:0;R:22;i:1;R:9;}s:34:"1230:cq-cebqhpg.vafgnyyolybnaplpyr";a:2:{i:0;R:22;i:1;R:9;}s:28:"1230:cq-cebqhpg.vafgnyyzragf";a:2:{i:0;R:22;i:1;R:9;}s:25:"1230:cq-cebqhpg.vafhenapr";a:2:{i:0;R:22;i:1;R:9;}s:25:"1230:cq-cebqhpg.vagqrqqvf";a:2:{i:0;R:22;i:1;R:9;}s:24:"1230:cq-cebqhpg.vagrerfg";a:2:{i:0;R:22;i:1;R:9;}s:23:"1230:cq-cebqhpg.vagengr";a:2:{i:0;R:22;i:1;R:9;}s:31:"1230:cq-cebqhpg.vagengrpnypclzg";a:2:{i:0;R:22;i:1;R:9;}s:27:"1230:cq-cebqhpg.vagengrglcr";a:2:{i:0;R:22;i:1;R:9;}s:30:"1230:cq-cebqhpg.ynfgybnanzbhag";a:2:{i:0;R:22;i:1;R:9;}s:28:"1230:cq-cebqhpg.yngrarffqnlf";a:2:{i:0;R:22;i:1;R:9;}s:20:"1230:cq-cebqhpg.ybna";a:2:{i:0;R:22;i:1;R:9;}s:34:"1230:cq-cebqhpg.ybnacebqhpgqrgnvyf";a:2:{i:0;R:22;i:1;R:9;}s:31:"1230:cq-cebqhpg.ybnacebqhpgvasb";a:2:{i:0;R:22;i:1;R:9;}s:34:"1230:cq-cebqhpg.ybnanppbhagpunatrq";a:2:{i:0;R:22;i:1;R:9;}s:33:"1230:cq-cebqhpg.ybnanqqfhpprffshy";a:2:{i:0;R:22;i:1;R:9;}s:26:"1230:cq-cebqhpg.ybnanzbhag";a:2:{i:0;R:22;i:1;R:9;}s:28:"1230:cq-cebqhpg.ybnanzbhagnf";a:2:{i:0;R:22;i:1;R:9;}s:27:"1230:cq-cebqhpg.ybnaplpyrab";a:2:{i:0;R:22;i:1;R:9;}s:26:"1230:cq-cebqhpg.ybnaqrsceq";a:2:{i:0;R:22;i:1;R:9;}s:27:"1230:cq-cebqhpg.ybnacebqqrg";a:2:{i:0;R:22;i:1;R:9;}s:28:"1230:cq-cebqhpg.ybnacebqvasb";a:2:{i:0;R:22;i:1;R:9;}s:27:"1230:cq-cebqhpg.ybnacebqahz";a:2:{i:0;R:22;i:1;R:9;}s:21:"1230:cq-cebqhpg.ybnaf";a:2:{i:0;R:22;i:1;R:9;}s:27:"1230:cq-cebqhpg.ybnaivrjqrg";a:2:{i:0;R:22;i:1;R:9;}s:27:"1230:cq-cebqhpg.znxrpunatrf";a:2:{i:0;R:22;i:1;R:9;}s:27:"1230:cq-cebqhpg.znaqnzagqrc";a:2:{i:0;R:22;i:1;R:9;}s:22:"1230:cq-cebqhpg.znahny";a:2:{i:0;R:22;i:1;R:9;}s:38:"1230:cq-cebqhpg.znetvazbarlfhpprffybna";a:2:{i:0;R:22;i:1;R:9;}s:41:"1230:cq-cebqhpg.znetvazbarlfhpprfffnivatf";a:2:{i:0;R:22;i:1;R:9;}s:34:"1230:cq-cebqhpg.znetvazbarlfhpprff";a:2:{i:0;R:22;i:1;R:9;}s:19:"1230:cq-cebqhpg.znk";a:2:{i:0;R:22;i:1;R:9;}s:25:"1230:cq-cebqhpg.znknzbhag";a:2:{i:0;R:22;i:1;R:9;}s:23:"1230:cq-cebqhpg.znkqnlf";a:2:{i:0;R:22;i:1;R:9;}s:23:"1230:cq-cebqhpg.znkengr";a:2:{i:0;R:22;i:1;R:9;}s:25:"1230:cq-cebqhpg.znknzgjvq";a:2:{i:0;R:22;i:1;R:9;}s:23:"1230:cq-cebqhpg.znkvafg";a:2:{i:0;R:22;i:1;R:9;}s:26:"1230:cq-cebqhpg.znkvagengr";a:2:{i:0;R:22;i:1;R:9;}s:26:"1230:cq-cebqhpg.znkybnanzg";a:2:{i:0;R:22;i:1;R:9;}s:19:"1230:cq-cebqhpg.zva";a:2:{i:0;R:22;i:1;R:9;}s:25:"1230:cq-cebqhpg.zvanzbhag";a:2:{i:0;R:22;i:1;R:9;}s:29:"1230:cq-cebqhpg.zvaonysbepnyp";a:2:{i:0;R:22;i:1;R:9;}s:23:"1230:cq-cebqhpg.zvaengr";a:2:{i:0;R:22;i:1;R:9;}s:30:"1230:cq-cebqhpg.zvaonyvafgpnyp";a:2:{i:0;R:22;i:1;R:9;}s:25:"1230:cq-cebqhpg.zvaonyerd";a:2:{i:0;R:22;i:1;R:9;}s:23:"1230:cq-cebqhpg.zvavafg";a:2:{i:0;R:22;i:1;R:9;}s:26:"1230:cq-cebqhpg.zvavagengr";a:2:{i:0;R:22;i:1;R:9;}s:26:"1230:cq-cebqhpg.zvaybnanzg";a:2:{i:0;R:22;i:1;R:9;}s:19:"1230:cq-cebqhpg.zvk";a:2:{i:0;R:22;i:1;R:9;}s:26:"1230:cq-cebqhpg.zvkqrgnvyf";a:2:{i:0;R:22;i:1;R:9;}s:21:"1230:cq-cebqhpg.zbagu";a:2:{i:0;R:22;i:1;R:9;}s:22:"1230:cq-cebqhpg.zbaguf";a:2:{i:0;R:22;i:1;R:9;}s:18:"1230:cq-cebqhpg.ab";a:2:{i:0;R:22;i:1;R:9;}s:34:"1230:cq-cebqhpg.abgnyybjrqcebqhpgf";a:2:{i:0;R:22;i:1;R:9;}s:35:"1230:cq-cebqhpg.ahzorebsvafgnyyzrag";a:2:{i:0;R:22;i:1;R:9;}s:23:"1230:cq-cebqhpg.bsrirel";a:2:{i:0;R:22;i:1;R:9;}s:36:"1230:cq-cebqhpg.bcgvbanypyvragfgnghf";a:2:{i:0;R:22;i:1;R:9;}s:35:"1230:cq-cebqhpg.bcgvbanytebhcfgnghf";a:2:{i:0;R:22;i:1;R:9;}s:46:"1230:cq-cebqhpg.bcgvbanyvafhenaprnppbhagfgnghf";a:2:{i:0;R:22;i:1;R:9;}s:41:"1230:cq-cebqhpg.bcgvbanyybnanppbhagfgnghf";a:2:{i:0;R:22;i:1;R:9;}s:44:"1230:cq-cebqhpg.bcgvbanyfnivatfnppbhagfgnghf";a:2:{i:0;R:22;i:1;R:9;}s:42:"1230:cq-cebqhpg.bgurefceqjvyyorhcqngrqnhgb";a:2:{i:0;R:22;i:1;R:9;}s:26:"1230:cq-ebqhpg.cranyglengr";a:2:{i:0;R:22;i:1;R:9;}s:27:"1230:cq-cebqhpg.cranyglglcr";a:2:{i:0;R:22;i:1;R:9;}s:20:"1230:cq-cebqhpg.crep";a:2:{i:0;R:22;i:1;R:9;}s:23:"1230:cq-cebqhpg.cyfabgr";a:2:{i:0;R:22;i:1;R:9;}s:23:"1230:cq-cebqhpg.cbfgnpp";a:2:{i:0;R:22;i:1;R:9;}s:31:"1230:cq-cebqhpg.cbfgvatnppbhagf";a:2:{i:0;R:22;i:1;R:9;}s:26:"1230:cq-cebqhpg.ceqqrgnvyf";a:2:{i:0;R:22;i:1;R:9;}s:23:"1230:cq-cebqhpg.ceqrqvg";a:2:{i:0;R:22;i:1;R:9;}s:33:"1230:cq-cebqhpg.ceqzvkqrsvarqnarj";a:2:{i:0;R:22;i:1;R:9;}s:32:"1230:cq-cebqhpg.ceqzvkqrgnvyfabj";a:2:{i:0;R:22;i:1;R:9;}s:23:"1230:cq-cebqhpg.ceqengr";a:2:{i:0;R:22;i:1;R:9;}s:23:"1230:cq-cebqhpg.cerivrj";a:2:{i:0;R:22;i:1;R:9;}s:38:"1230:cq-cebqhpg.cerivrjybnacebqhpgvasb";a:2:{i:0;R:22;i:1;R:9;}s:41:"1230:cq-cebqhpg.cerivrjfnivatfcebqhpgvasb";a:2:{i:0;R:22;i:1;R:9;}s:36:"1230:cq-cebqhpg.cerivrjfhozvgfnivatf";a:2:{i:0;R:22;i:1;R:9;}s:29:"1230:cq-cebqhpg.cerivrjsvryqf";a:2:{i:0;R:22;i:1;R:9;}s:25:"1230:cq-cebqhpg.cevapvcny";a:2:{i:0;R:22;i:1;R:9;}s:28:"1230:cq-cebqhpg.cevaynfgvafg";a:2:{i:0;R:22;i:1;R:9;}s:19:"1230:cq-cebqhpg.ceb";a:2:{i:0;R:22;i:1;R:9;}s:23:"1230:cq-cebqhpg.cebqpng";a:2:{i:0;R:22;i:1;R:9;}s:28:"1230:cq-cebqhpg.cebqvafganzr";a:2:{i:0;R:22;i:1;R:9;}s:23:"1230:cq-cebqhpg.cebqahz";a:2:{i:0;R:22;i:1;R:9;}s:23:"1230:cq-cebqhpg.cebqhpg";a:2:{i:0;R:22;i:1;R:9;}s:33:"1230:cq-cebqhpg.cebqhpgnffvtarqvq";a:2:{i:0;R:22;i:1;R:9;}s:27:"1230:cq-cebqhpg.cebqhpgengr";a:2:{i:0;R:22;i:1;R:9;}s:30:"1230:cq-cebqhpg.cebqhpgpngvasb";a:2:{i:0;R:22;i:1;R:9;}s:29:"1230:cq-cebqhpg.cebqhpgtypbqr";a:2:{i:0;R:22;i:1;R:9;}s:27:"1230:cq-cebqhpg.cebqhpgvasb";a:2:{i:0;R:22;i:1;R:9;}s:35:"1230:cq-cebqhpg.cebqhpgabgnyybjrqgb";a:2:{i:0;R:22;i:1;R:9;}s:24:"1230:cq-cebqhpg.cebqhpgf";a:2:{i:0;R:22;i:1;R:9;}s:27:"1230:cq-cebqhpg.cebqhpgglcr";a:2:{i:0;R:22;i:1;R:9;}s:26:"1230:cq-cebqhpg.ceiybnaceq";a:2:{i:0;R:22;i:1;R:9;}s:29:"1230:cq-cebqhpg.ceifnivatfceq";a:2:{i:0;R:22;i:1;R:9;}s:33:"1230:cq-cebqhpg.clzgglcrfqrcbfvgf";a:2:{i:0;R:22;i:1;R:9;}s:31:"1230:cq-cebqhpg.clzgglcrfqvfohe";a:2:{i:0;R:22;i:1;R:9;}s:29:"1230:cq-cebqhpg.clzgglcrfsrrf";a:2:{i:0;R:22;i:1;R:9;}s:30:"1230:cq-cebqhpg.clzgglcrfercnl";a:2:{i:0;R:22;i:1;R:9;}s:35:"1230:cq-cebqhpg.clzgglcrfjvguqejnyf";a:2:{i:0;R:22;i:1;R:9;}s:20:"1230:cq-cebqhpg.engr";a:2:{i:0;R:22;i:1;R:9;}s:26:"1230:cq-cebqhpg.erpnzgnccy";a:2:{i:0;R:22;i:1;R:9;}s:25:"1230:cq-cebqhpg.erpnzgqrc";a:2:{i:0;R:22;i:1;R:9;}s:34:"1230:cq-cebqhpg.erpbeqperngvbaqngr";a:2:{i:0;R:22;i:1;R:9;}s:21:"1230:cq-cebqhpg.erphe";a:2:{i:0;R:22;i:1;R:9;}s:25:"1230:cq-cebqhpg.erpheqnlf";a:2:{i:0;R:22;i:1;R:9;}s:27:"1230:cq-cebqhpg.erphezbaguf";a:2:{i:0;R:22;i:1;R:9;}s:26:"1230:cq-cebqhpg.erphejrrxf";a:2:{i:0;R:22;i:1;R:9;}s:32:"1230:cq-cebqhpg.erzbirabgnyybjrq";a:2:{i:0;R:22;i:1;R:9;}s:24:"1230:cq-cebqhpg.ercnlfpu";a:2:{i:0;R:22;i:1;R:9;}s:22:"1230:cq-cebqhpg.erivrj";a:2:{i:0;R:22;i:1;R:9;}s:37:"1230:cq-cebqhpg.fnzrsbenyyvafgnyyzrag";a:2:{i:0;R:22;i:1;R:9;}s:31:"1230:cq-cebqhpg.fnzrsbenyyybnaf";a:2:{i:0;R:22;i:1;R:9;}s:26:"1230:cq-cebqhpg.fnivatcebq";a:2:{i:0;R:22;i:1;R:9;}s:23:"1230:cq-cebqhpg.fnivatf";a:2:{i:0;R:22;i:1;R:9;}s:33:"1230:cq-cebqhpg.fnivatfnffvtarqgb";a:2:{i:0;R:22;i:1;R:9;}s:37:"1230:cq-cebqhpg.fnivatfcebqhpgqrgnvyf";a:2:{i:0;R:22;i:1;R:9;}s:34:"1230:cq-cebqhpg.fnivatfcebqhpgvasb";a:2:{i:0;R:22;i:1;R:9;}s:37:"1230:cq-cebqhpg.fnivatfnppbhagpunatrq";a:2:{i:0;R:22;i:1;R:9;}s:36:"1230:cq-cebqhpg.fnivatfnqqfhpprffshy";a:2:{i:0;R:22;i:1;R:9;}s:32:"1230:cq-cebqhpg.fnivatfqrsvararj";a:2:{i:0;R:22;i:1;R:9;}s:29:"1230:cq-cebqhpg.fnivatfqrsarj";a:2:{i:0;R:22;i:1;R:9;}s:29:"1230:cq-cebqhpg.fnivatfqrsceq";a:2:{i:0;R:22;i:1;R:9;}s:34:"1230:cq-cebqhpg.fnivatfvagengrcrep";a:2:{i:0;R:22;i:1;R:9;}s:30:"1230:cq-cebqhpg.fnivatfcebqahz";a:2:{i:0;R:22;i:1;R:9;}s:27:"1230:cq-cebqhpg.fnivatfivrj";a:2:{i:0;R:22;i:1;R:9;}s:30:"1230:cq-cebqhpg.fnivatfivrjqrg";a:2:{i:0;R:22;i:1;R:9;}s:26:"1230:cq-cebqhpg.frgqbezqrs";a:2:{i:0;R:22;i:1;R:9;}s:26:"1230:cq-cebqhpg.frgyngrqrs";a:2:{i:0;R:22;i:1;R:9;}s:25:"1230:cq-cebqhpg.frgcrapny";a:2:{i:0;R:22;i:1;R:9;}s:25:"1230:cq-cebqhpg.fubeganzr";a:2:{i:0;R:22;i:1;R:9;}s:44:"1230:cq-cebqhpg.fcrpybnaabqnlfnppbhagpunatrq";a:2:{i:0;R:22;i:1;R:9;}s:49:"1230:cq-cebqhpg.fcrpfnivatfqbezqnlfnppbhagpunatrq";a:2:{i:0;R:22;i:1;R:9;}s:39:"1230:cq-cebqhpg.fcrpnpprcgclzgvafhenapr";a:2:{i:0;R:22;i:1;R:9;}s:35:"1230:cq-cebqhpg.fcrpnpprcgclzgybnaf";a:2:{i:0;R:22;i:1;R:9;}s:38:"1230:cq-cebqhpg.fcrpnpprcgclzgglcrfptp";a:2:{i:0;R:22;i:1;R:9;}s:30:"1230:cq-cebqhpg.fcrpybnaabqnlf";a:2:{i:0;R:22;i:1;R:9;}s:26:"1230:cq-cebqhpg.fcrpcrapny";a:2:{i:0;R:22;i:1;R:9;}s:36:"1230:cq-cebqhpg.fcrpclzgglcrffnivatf";a:2:{i:0;R:22;i:1;R:9;}s:31:"1230:cq-cebqhpg.fcrpfniqbezqnlf";a:2:{i:0;R:22;i:1;R:9;}s:24:"1230:cq-cebqhpg.fepshaqf";a:2:{i:0;R:22;i:1;R:9;}s:25:"1230:cq-cebqhpg.fgnegqngr";a:2:{i:0;R:22;i:1;R:9;}s:22:"1230:cq-cebqhpg.fgnghf";a:2:{i:0;R:22;i:1;R:9;}s:33:"1230:cq-cebqhpg.fhozvgsbenccebiny";a:2:{i:0;R:22;i:1;R:9;}s:39:"1230:cq-cebqhpg.fhpprffshyylqrsvarqnarj";a:2:{i:0;R:22;i:1;R:9;}s:29:"1230:cq-cebqhpg.gneqrcjvqerfg";a:2:{i:0;R:22;i:1;R:9;}s:19:"1230:cq-cebqhpg.gur";a:2:{i:0;R:22;i:1;R:9;}s:22:"1230:cq-cebqhpg.gurqnl";a:2:{i:0;R:22;i:1;R:9;}s:27:"1230:cq-cebqhpg.gvzrcrepnyp";a:2:{i:0;R:22;i:1;R:9;}s:26:"1230:cq-cebqhpg.gvzrcrevbq";a:2:{i:0;R:22;i:1;R:9;}s:23:"1230:cq-cebqhpg.gvzrcre";a:2:{i:0;R:22;i:1;R:9;}s:31:"1230:cq-cebqhpg.gvzrcrevafgpnyp";a:2:{i:0;R:22;i:1;R:9;}s:39:"1230:cq-cebqhpg.gbpbagvahrpyvpxbafhozvg";a:2:{i:0;R:22;i:1;R:9;}s:20:"1230:cq-cebqhpg.glcr";a:2:{i:0;R:22;i:1;R:9;}s:25:"1230:cq-cebqhpg.glcrbsqrc";a:2:{i:0;R:22;i:1;R:9;}s:20:"1230:cq-cebqhpg.ivrj";a:2:{i:0;R:22;i:1;R:9;}s:31:"1230:cq-cebqhpg.ivrjybnaqrgnvyf";a:2:{i:0;R:22;i:1;R:9;}s:32:"1230:cq-cebqhpg.ivrjybnacebqhpgf";a:2:{i:0;R:22;i:1;R:9;}s:34:"1230:cq-cebqhpg.ivrjfnivatfqrgnvyf";a:2:{i:0;R:22;i:1;R:9;}s:35:"1230:cq-cebqhpg.ivrjfnivatfcebqhpgf";a:2:{i:0;R:22;i:1;R:9;}s:35:"1230:cq-cebqhpg.ivrjnpprcgclzgglcrf";a:2:{i:0;R:22;i:1;R:9;}s:29:"1230:cq-cebqhpg.ivrjpunatrybt";a:2:{i:0;R:22;i:1;R:9;}s:23:"1230:cq-cebqhpg.ivrjqrg";a:2:{i:0;R:22;i:1;R:9;}s:27:"1230:cq-cebqhpg.ivrjyngrqrs";a:2:{i:0;R:22;i:1;R:9;}s:27:"1230:cq-cebqhpg.ivrjybnaceq";a:2:{i:0;R:22;i:1;R:9;}s:26:"1230:cq-cebqhpg.ivrjceqpng";a:2:{i:0;R:22;i:1;R:9;}s:26:"1230:cq-cebqhpg.ivrjceqzvk";a:2:{i:0;R:22;i:1;R:9;}s:30:"1230:cq-cebqhpg.ivrjfnivatfceq";a:2:{i:0;R:22;i:1;R:9;}s:20:"1230:cq-cebqhpg.jrrx";a:2:{i:0;R:22;i:1;R:9;}s:21:"1230:cq-cebqhpg.jrrxf";a:2:{i:0;R:22;i:1;R:9;}s:29:"1230:cq-cebqhpg.jvgubhgfhozvg";a:2:{i:0;R:22;i:1;R:9;}s:19:"1230:cq-cebqhpg.lrf";a:2:{i:0;R:22;i:1;R:9;}s:19:"1230:cq-cebqhg.rqvg";a:2:{i:0;R:22;i:1;R:9;}s:30:"1230:cq-cebqhpg.dhrfgvbatebhcf";a:2:{i:0;R:22;i:1;R:9;}s:35:"1230:cq-cebqhpg.nffbpdhrfgvbatebhcf";a:2:{i:0;R:22;i:1;R:9;}s:37:"1230:cq-cebqhpg.nffbprqdhrfgvbatebhcf";a:2:{i:0;R:22;i:1;R:9;}s:35:"1230:cq-cebqhpg.pyvpxdhrfgvbatebhcf";a:2:{i:0;R:22;i:1;R:9;}s:48:"1230:cq-cebqhpg.pnapbasvtherinevnoyrvafgnyyzragf";a:2:{i:0;R:22;i:1;R:9;}s:38:"1230:cq-cebqhpg.svkrqercnlzragfpurqhyr";a:2:{i:0;R:22;i:1;R:9;}s:45:"1230:cq-cebqhpg.zvavzhztncorgjrravafgnyyzragf";a:2:{i:0;R:22;i:1;R:9;}s:45:"1230:cq-cebqhpg.znkvzhztncorgjrravafgnyyzragf";a:2:{i:0;R:22;i:1;R:9;}s:40:"1230:cq-cebqhpg.zvavzhzvafgnyyzragnzbhag";a:2:{i:0;R:22;i:1;R:9;}s:29:"1230:cq-cebqhpg.abgnccyvpnoyr";a:2:{i:0;R:22;i:1;R:9;}s:34:"1230:cq-cebqhpg.pnfusybjinyvqngvba";a:2:{i:0;R:22;i:1;R:9;}s:33:"1230:cq-cebqhpg.pnfusybjguerfubyq";a:2:{i:0;R:22;i:1;R:9;}s:33:"1230:cq-cebqhpg.vaqrogrqarffengvb";a:2:{i:0;R:22;i:1;R:9;}s:33:"1230:cq-cebqhpg.ercnlzragpncnpvgl";a:2:{i:0;R:22;i:1;R:9;}s:64:"1230:cq-reebef.zvatnczbergunaznktncsbeinevnoyrvafgnyyzragcebqhpg";a:2:{i:0;R:22;i:1;R:9;}s:54:"1230:cq-reebef.inevnoyrvafgnyyzragzvatncartngvirbemreb";a:2:{i:0;R:22;i:1;R:9;}s:54:"1230:cq-reebef.inevnoyrvafgnyyzragznktncartngvirbemreb";a:2:{i:0;R:22;i:1;R:9;}s:55:"1230:cq-reebef.inevnoyrvafgnyyzragzvatnczbergunanyybjrq";a:2:{i:0;R:22;i:1;R:9;}s:55:"1230:cq-reebef.inevnoyrvafgnyyzragznktnczbergunanyybjrq";a:2:{i:0;R:22;i:1;R:9;}s:48:"1230:cq-reebef.zvavafgnyyzragnzbhagvainyvqsbezng";a:2:{i:0;R:22;i:1;R:9;}s:39:"1230:cq-reebef.pnfusybjguerfubyqvainyvq";a:2:{i:0;R:22;i:1;R:9;}s:39:"1230:cq-reebef.vaqrogrqarffengvbvainyvq";a:2:{i:0;R:22;i:1;R:9;}s:39:"1230:cq-reebef.ercnlzragpncnpvglvainyvq";a:2:{i:0;R:22;i:1;R:9;}s:51:"1230:cq-reebef.inevnoyrvafgnyyzragzvatncabgcebivqrq";a:2:{i:0;R:22;i:1;R:9;}s:43:"1230:cq-reebef.pnfusybjjneavatvainyvqsbezng";a:2:{i:0;R:22;i:1;R:9;}s:45:"1230:cq-reebef.vaqrogrqarffengvbvainyvqsbezng";a:2:{i:0;R:22;i:1;R:9;}s:45:"1230:cq-reebef.ercnlzragpncnpvglvainyvqsbezng";a:2:{i:0;R:22;i:1;R:9;}s:56:"1230:cq-reebef.vagrerfgglcrvainyvqsbeinevnoyrvafgnyyzrag";a:2:{i:0;R:22;i:1;R:9;}s:61:"1230:cq-reebef.crevbqvpsrrabgnccyvpnoyrsbeinevnoyrvafgnyyzrag";a:2:{i:0;R:22;i:1;R:9;}s:88:"1230:cq-reebef.srrpnyvphyngrqnfcrepragbsvagrerfgpnaabgornccyvrqgbinevnoyrvafgnyyzragybna";a:2:{i:0;R:22;i:1;R:9;}s:49:"1230:cq-reebef.vagrerfgglcrvainyvqsbetenprcrevbqf";a:2:{i:0;R:22;i:1;R:9;}s:21:"1230:crefbaary-nzbhag";a:2:{i:0;s:19:"out-mifos-personnel";i:1;R:9;}s:19:"1230:crefbaary-qngr";a:2:{i:0;R:31853;i:1;R:9;}s:26:"1230:crefbaary-qrfpevcgvba";a:2:{i:0;R:31853;i:1;R:9;}s:20:"1230:crefbaary-svryq";a:2:{i:0;R:31853;i:1;R:9;}s:23:"1230:crefbaary-arjinyhr";a:2:{i:0;R:31853;i:1;R:9;}s:23:"1230:crefbaary-byqinyhr";a:2:{i:0;R:31853;i:1;R:9;}s:35:"1230:crefbaary-crefbaary.nqqarjabgr";a:2:{i:0;R:31853;i:1;R:9;}s:35:"1230:crefbaary-crefbaary.nqqarjhfre";a:2:{i:0;R:31853;i:1;R:9;}s:32:"1230:crefbaary-crefbaary.nqqabgr";a:2:{i:0;R:31853;i:1;R:9;}s:39:"1230:crefbaary-crefbaary.nqqvgvbanyvasb";a:2:{i:0;R:31853;i:1;R:9;}s:32:"1230:crefbaary-crefbaary.nqqerff";a:2:{i:0;R:31853;i:1;R:9;}s:33:"1230:crefbaary-crefbaary.nqqerff1";a:2:{i:0;R:31853;i:1;R:9;}s:38:"1230:crefbaary-crefbaary.nqqerff1ynory";a:2:{i:0;R:31853;i:1;R:9;}s:33:"1230:crefbaary-crefbaary.nqqerff2";a:2:{i:0;R:31853;i:1;R:9;}s:38:"1230:crefbaary-crefbaary.nqqerff2ynory";a:2:{i:0;R:31853;i:1;R:9;}s:33:"1230:crefbaary-crefbaary.nqqerff3";a:2:{i:0;R:31853;i:1;R:9;}s:38:"1230:crefbaary-crefbaary.nqqerff3ynory";a:2:{i:0;R:31853;i:1;R:9;}s:30:"1230:crefbaary-crefbaary.nqzva";a:2:{i:0;R:31853;i:1;R:9;}s:28:"1230:crefbaary-crefbaary.ntr";a:2:{i:0;R:31853;i:1;R:9;}s:35:"1230:crefbaary-crefbaary.nerlbhfher";a:2:{i:0;R:31853;i:1;R:9;}s:42:"1230:crefbaary-crefbaary.onpxgbqrgnvyfcntr";a:2:{i:0;R:31853;i:1;R:9;}s:39:"1230:crefbaary-crefbaary.pnapryfrggvatf";a:2:{i:0;R:31853;i:1;R:9;}s:34:"1230:crefbaary-crefbaary.punatrybt";a:2:{i:0;R:31853;i:1;R:9;}s:39:"1230:crefbaary-crefbaary.punatrcnffjbeq";a:2:{i:0;R:31853;i:1;R:9;}s:37:"1230:crefbaary-crefbaary.punatrfgnghf";a:2:{i:0;R:31853;i:1;R:9;}s:37:"1230:crefbaary-crefbaary.pubbfrbssvpr";a:2:{i:0;R:31853;i:1;R:9;}s:29:"1230:crefbaary-crefbaary.pvgl";a:2:{i:0;R:31853;i:1;R:9;}s:34:"1230:crefbaary-crefbaary.pvglynory";a:2:{i:0;R:31853;i:1;R:9;}s:36:"1230:crefbaary-crefbaary.pyvpxpnapry";a:2:{i:0;R:31853;i:1;R:9;}s:49:"1230:crefbaary-crefbaary.pyvpxpnaprygbqrgnvyfcntr";a:2:{i:0;R:31853;i:1;R:9;}s:51:"1230:crefbaary-crefbaary.pyvpxrqvgcrefbaaryfrggvatf";a:2:{i:0;R:31853;i:1;R:9;}s:37:"1230:crefbaary-crefbaary.pyvpxcerivrj";a:2:{i:0;R:31853;i:1;R:9;}s:38:"1230:crefbaary-crefbaary.pyvpxhfreyvax";a:2:{i:0;R:31853;i:1;R:9;}s:39:"1230:crefbaary-crefbaary.pbzcyrgrsvryqf";a:2:{i:0;R:31853;i:1;R:9;}s:40:"1230:crefbaary-crefbaary.pbasvezcnffjbeq";a:2:{i:0;R:31853;i:1;R:9;}s:32:"1230:crefbaary-crefbaary.pbhagel";a:2:{i:0;R:31853;i:1;R:9;}s:37:"1230:crefbaary-crefbaary.pbhagelynory";a:2:{i:0;R:31853;i:1;R:9;}s:28:"1230:crefbaary-crefbaary.qbo";a:2:{i:0;R:31853;i:1;R:9;}s:33:"1230:crefbaary-crefbaary.qboynory";a:2:{i:0;R:31853;i:1;R:9;}s:34:"1230:crefbaary-crefbaary.qbwoenapu";a:2:{i:0;R:31853;i:1;R:9;}s:31:"1230:crefbaary-crefbaary.qbwzsv";a:2:{i:0;R:31853;i:1;R:9;}s:36:"1230:crefbaary-crefbaary.qbwzsvynory";a:2:{i:0;R:31853;i:1;R:9;}s:29:"1230:crefbaary-crefbaary.rqvg";a:2:{i:0;R:31853;i:1;R:9;}s:40:"1230:crefbaary-crefbaary.rqvgvasbezngvba";a:2:{i:0;R:31853;i:1;R:9;}s:34:"1230:crefbaary-crefbaary.rqvgynory";a:2:{i:0;R:31853;i:1;R:9;}s:44:"1230:crefbaary-crefbaary.rqvghfrevasbezngvba";a:2:{i:0;R:31853;i:1;R:9;}s:41:"1230:crefbaary-crefbaary.rqvglbhefrggvatf";a:2:{i:0;R:31853;i:1;R:9;}s:30:"1230:crefbaary-crefbaary.rznvy";a:2:{i:0;R:31853;i:1;R:9;}s:37:"1230:crefbaary-crefbaary.rznvynqqerff";a:2:{i:0;R:31853;i:1;R:9;}s:35:"1230:crefbaary-crefbaary.rznvyynory";a:2:{i:0;R:31853;i:1;R:9;}s:35:"1230:crefbaary-crefbaary.ragrenabgr";a:2:{i:0;R:31853;i:1;R:9;}s:45:"1230:crefbaary-crefbaary.ragrehfrevasbezngvba";a:2:{i:0;R:31853;i:1;R:9;}s:40:"1230:crefbaary-crefbaary.svryqfznaqngbel";a:2:{i:0;R:31853;i:1;R:9;}s:34:"1230:crefbaary-crefbaary.svefganzr";a:2:{i:0;R:31853;i:1;R:9;}s:39:"1230:crefbaary-crefbaary.svefganzrynory";a:2:{i:0;R:31853;i:1;R:9;}s:31:"1230:crefbaary-crefbaary.traqre";a:2:{i:0;R:31853;i:1;R:9;}s:36:"1230:crefbaary-crefbaary.traqreynory";a:2:{i:0;R:31853;i:1;R:9;}s:34:"1230:crefbaary-crefbaary.tbigvqahz";a:2:{i:0;R:31853;i:1;R:9;}s:39:"1230:crefbaary-crefbaary.tbigvqahzynory";a:2:{i:0;R:31853;i:1;R:9;}s:42:"1230:crefbaary-crefbaary.ynathntrcersreerq";a:2:{i:0;R:31853;i:1;R:9;}s:42:"1230:crefbaary-crefbaary.fvgrglcrcersreerq";a:2:{i:0;R:31853;i:1;R:9;}s:33:"1230:crefbaary-crefbaary.ynfganzr";a:2:{i:0;R:31853;i:1;R:9;}s:38:"1230:crefbaary-crefbaary.ynfganzrynory";a:2:{i:0;R:31853;i:1;R:9;}s:31:"1230:crefbaary-crefbaary.ybpxrq";a:2:{i:0;R:31853;i:1;R:9;}s:38:"1230:crefbaary-crefbaary.ybtvanggrzcgf";a:2:{i:0;R:31853;i:1;R:9;}s:41:"1230:crefbaary-crefbaary.ybtvavasbezngvba";a:2:{i:0;R:31853;i:1;R:9;}s:38:"1230:crefbaary-crefbaary.znevgnyfgnghf";a:2:{i:0;R:31853;i:1;R:9;}s:35:"1230:crefbaary-crefbaary.zvqqyranzr";a:2:{i:0;R:31853;i:1;R:9;}s:40:"1230:crefbaary-crefbaary.zvqqyranzrynory";a:2:{i:0;R:31853;i:1;R:9;}s:39:"1230:crefbaary-crefbaary.zbqvslfrggvatf";a:2:{i:0;R:31853;i:1;R:9;}s:41:"1230:crefbaary-crefbaary.ababgrfninvynoyr";a:2:{i:0;R:31853;i:1;R:9;}s:29:"1230:crefbaary-crefbaary.abgr";a:2:{i:0;R:31853;i:1;R:9;}s:34:"1230:crefbaary-crefbaary.abgrynory";a:2:{i:0;R:31853;i:1;R:9;}s:30:"1230:crefbaary-crefbaary.abgrf";a:2:{i:0;R:31853;i:1;R:9;}s:31:"1230:crefbaary-crefbaary.bssvpr";a:2:{i:0;R:31853;i:1;R:9;}s:36:"1230:crefbaary-crefbaary.bssvprynory";a:2:{i:0;R:31853;i:1;R:9;}s:42:"1230:crefbaary-crefbaary.bssvprcrezvffvbaf";a:2:{i:0;R:31853;i:1;R:9;}s:33:"1230:crefbaary-crefbaary.cnffjbeq";a:2:{i:0;R:31853;i:1;R:9;}s:38:"1230:crefbaary-crefbaary.cnffjbeqynory";a:2:{i:0;R:31853;i:1;R:9;}s:35:"1230:crefbaary-crefbaary.crezvffvba";a:2:{i:0;R:31853;i:1;R:9;}s:35:"1230:crefbaary-crefbaary.cyrnfrabgr";a:2:{i:0;R:31853;i:1;R:9;}s:35:"1230:crefbaary-crefbaary.cbfgnypbqr";a:2:{i:0;R:31853;i:1;R:9;}s:40:"1230:crefbaary-crefbaary.cbfgnypbqrynory";a:2:{i:0;R:31853;i:1;R:9;}s:36:"1230:crefbaary-crefbaary.cerivrjabgr";a:2:{i:0;R:31853;i:1;R:9;}s:36:"1230:crefbaary-crefbaary.cerivrjhfre";a:2:{i:0;R:31853;i:1;R:9;}s:44:"1230:crefbaary-crefbaary.cerivrjlbhefrggvatf";a:2:{i:0;R:31853;i:1;R:9;}s:36:"1230:crefbaary-crefbaary.erpragabgrf";a:2:{i:0;R:31853;i:1;R:9;}s:43:"1230:crefbaary-crefbaary.erpbeqperngvbaqngr";a:2:{i:0;R:31853;i:1;R:9;}s:42:"1230:crefbaary-crefbaary.erivrjvasbezngvba";a:2:{i:0;R:31853;i:1;R:9;}s:37:"1230:crefbaary-crefbaary.erivrjfhozvg";a:2:{i:0;R:31853;i:1;R:9;}s:35:"1230:crefbaary-crefbaary.erivrjgrkg";a:2:{i:0;R:31853;i:1;R:9;}s:30:"1230:crefbaary-crefbaary.ebyrf";a:2:{i:0;R:31853;i:1;R:9;}s:34:"1230:crefbaary-crefbaary.frnepuzft";a:2:{i:0;R:31853;i:1;R:9;}s:39:"1230:crefbaary-crefbaary.frpbaqynfganzr";a:2:{i:0;R:31853;i:1;R:9;}s:44:"1230:crefbaary-crefbaary.frpbaqynfganzrynory";a:2:{i:0;R:31853;i:1;R:9;}s:36:"1230:crefbaary-crefbaary.frrnyyabgrf";a:2:{i:0;R:31853;i:1;R:9;}s:30:"1230:crefbaary-crefbaary.fgngr";a:2:{i:0;R:31853;i:1;R:9;}s:35:"1230:crefbaary-crefbaary.fgngrynory";a:2:{i:0;R:31853;i:1;R:9;}s:31:"1230:crefbaary-crefbaary.fgnghf";a:2:{i:0;R:31853;i:1;R:9;}s:31:"1230:crefbaary-crefbaary.fhozvg";a:2:{i:0;R:31853;i:1;R:9;}s:37:"1230:crefbaary-crefbaary.fhozvgberqvg";a:2:{i:0;R:31853;i:1;R:9;}s:39:"1230:crefbaary-crefbaary.fhzovgbepnapry";a:2:{i:0;R:31853;i:1;R:9;}s:41:"1230:crefbaary-crefbaary.flfgrzvqnffvtarq";a:2:{i:0;R:31853;i:1;R:9;}s:34:"1230:crefbaary-crefbaary.gryrcubar";a:2:{i:0;R:31853;i:1;R:9;}s:39:"1230:crefbaary-crefbaary.gryrcubarynory";a:2:{i:0;R:31853;i:1;R:9;}s:35:"1230:crefbaary-crefbaary.haybpxhfre";a:2:{i:0;R:31853;i:1;R:9;}s:48:"1230:crefbaary-crefbaary.haybpxhfrepbasvezngvbaf";a:2:{i:0;R:31853;i:1;R:9;}s:34:"1230:crefbaary-crefbaary.hfrenqqrq";a:2:{i:0;R:31853;i:1;R:9;}s:36:"1230:crefbaary-crefbaary.hfreqrgnvyf";a:2:{i:0;R:31853;i:1;R:9;}s:38:"1230:crefbaary-crefbaary.hfreuvrenepul";a:2:{i:0;R:31853;i:1;R:9;}s:43:"1230:crefbaary-crefbaary.hfreuvrenepulynory";a:2:{i:0;R:31853;i:1;R:9;}s:40:"1230:crefbaary-crefbaary.hfrevasbezngvba";a:2:{i:0;R:31853;i:1;R:9;}s:33:"1230:crefbaary-crefbaary.hfreanzr";a:2:{i:0;R:31853;i:1;R:9;}s:38:"1230:crefbaary-crefbaary.hfreanzrynory";a:2:{i:0;R:31853;i:1;R:9;}s:41:"1230:crefbaary-crefbaary.hfreerpbeqybpxrq";a:2:{i:0;R:31853;i:1;R:9;}s:34:"1230:crefbaary-crefbaary.hfregvgyr";a:2:{i:0;R:31853;i:1;R:9;}s:38:"1230:crefbaary-crefbaary.ivrjpunatrybt";a:2:{i:0;R:31853;i:1;R:9;}s:43:"1230:crefbaary-crefbaary.ivrjhfreqrgnvyfabj";a:2:{i:0;R:31853;i:1;R:9;}s:34:"1230:crefbaary-crefbaary.ivrjhfref";a:2:{i:0;R:31853;i:1;R:9;}s:33:"1230:crefbaary-crefbaary.lrnefbyq";a:2:{i:0;R:31853;i:1;R:9;}s:36:"1230:crefbaary-crefbaary.lbheqrgnvyf";a:2:{i:0;R:31853;i:1;R:9;}s:37:"1230:crefbaary-crefbaary.lbhefrggvatf";a:2:{i:0;R:31853;i:1;R:9;}s:42:"1230:crefbaary-crefbaary.nqqerffabgragrerq";a:2:{i:0;R:31853;i:1;R:9;}s:35:"1230:crefbaary-crefbaary.punatr_ybt";a:2:{i:0;R:31853;i:1;R:9;}s:36:"1230:crefbaary-crefbaary.vafeghpgvba";a:2:{i:0;R:31853;i:1;R:9;}s:42:"1230:crefbaary-crefbaary.cnffjbeqybjrepnfr";a:2:{i:0;R:31853;i:1;R:9;}s:42:"1230:crefbaary-crefbaary.erp_perngvba_qngr";a:2:{i:0;R:31853;i:1;R:9;}s:40:"1230:crefbaary-crefbaary.ergheagbqrgnvyf";a:2:{i:0;R:31853;i:1;R:9;}s:23:"1230:crefbaary-cbfgrqol";a:2:{i:0;R:31853;i:1;R:9;}s:19:"1230:crefbaary-hfre";a:2:{i:0;R:31853;i:1;R:9;}s:41:"1230:crefbaary-ohggba.rqvghfrevasbezngvba";a:2:{i:0;R:31853;i:1;R:9;}s:28:"1230:crefbaary-ohggba.pnapry";a:2:{i:0;R:31853;i:1;R:9;}s:29:"1230:crefbaary-ohggba.cerivrj";a:2:{i:0;R:31853;i:1;R:9;}s:28:"1230:crefbaary-ohggba.frnepu";a:2:{i:0;R:31853;i:1;R:9;}s:28:"1230:crefbaary-ohggba.fhozvg";a:2:{i:0;R:31853;i:1;R:9;}s:39:"1230:crefbaary-ps.ybbxhcragvgl.ragvglvq";a:2:{i:0;R:31853;i:1;R:9;}s:29:"1230:crefbaary-psqrs.ragvglvq";a:2:{i:0;R:31853;i:1;R:9;}s:41:"1230:crefbaary-reebe.npgvivgl.abg.nyybjrq";a:2:{i:0;R:31853;i:1;R:9;}s:33:"1230:crefbaary-reebe.perngrsnvyrq";a:2:{i:0;R:31853;i:1;R:9;}s:32:"1230:crefbaary-reebe.phfgbzsvryq";a:2:{i:0;R:31853;i:1;R:9;}s:36:"1230:crefbaary-reebe.phfgbzqngrsvryq";a:2:{i:0;R:31853;i:1;R:9;}s:24:"1230:crefbaary-reebe.qbo";a:2:{i:0;R:31853;i:1;R:9;}s:46:"1230:crefbaary-reebe.qhcyvpngr_hfreanzr_be_qbo";a:2:{i:0;R:31853;i:1;R:9;}s:36:"1230:crefbaary-reebe.qhcyvpngrtbigvq";a:2:{i:0;R:31853;i:1;R:9;}s:34:"1230:crefbaary-reebe.qhcyvpngrhfre";a:2:{i:0;R:31853;i:1;R:9;}s:26:"1230:crefbaary-reebe.rznvy";a:2:{i:0;R:31853;i:1;R:9;}s:30:"1230:crefbaary-reebe.svefganzr";a:2:{i:0;R:31853;i:1;R:9;}s:27:"1230:crefbaary-reebe.traqre";a:2:{i:0;R:31853;i:1;R:9;}s:36:"1230:crefbaary-reebe.uvrenepulpunatr";a:2:{i:0;R:31853;i:1;R:9;}s:35:"1230:crefbaary-reebe.vanpgviroenapu";a:2:{i:0;R:31853;i:1;R:9;}s:31:"1230:crefbaary-reebe.vainyvqqbo";a:2:{i:0;R:31853;i:1;R:9;}s:36:"1230:crefbaary-reebe.vainyvqhfreanzr";a:2:{i:0;R:31853;i:1;R:9;}s:35:"1230:crefbaary-reebe.vainyvqirefvba";a:2:{i:0;R:31853;i:1;R:9;}s:29:"1230:crefbaary-reebe.ynfganzr";a:2:{i:0;R:31853;i:1;R:9;}s:26:"1230:crefbaary-reebe.yriry";a:2:{i:0;R:31853;i:1;R:9;}s:40:"1230:crefbaary-reebe.yb_bayl_va_oenapurf";a:2:{i:0;R:31853;i:1;R:9;}s:31:"1230:crefbaary-reebe.znfgreqngn";a:2:{i:0;R:31853;i:1;R:9;}s:35:"1230:crefbaary-reebe.abfrnepufgevat";a:2:{i:0;R:31853;i:1;R:9;}s:35:"1230:crefbaary-reebe.cnffjbeqyratgu";a:2:{i:0;R:31853;i:1;R:9;}s:37:"1230:crefbaary-reebe.haxabjarkprcgvba";a:2:{i:0;R:31853;i:1;R:9;}s:33:"1230:crefbaary-reebe.hcqngrsnvyrq";a:2:{i:0;R:31853;i:1;R:9;}s:34:"1230:crefbaary-reebe.hfrepunatrybt";a:2:{i:0;R:31853;i:1;R:9;}s:29:"1230:crefbaary-reebe.hfreanzr";a:2:{i:0;R:31853;i:1;R:9;}s:33:"1230:crefbaary-reebe.hfreabgsbhaq";a:2:{i:0;R:31853;i:1;R:9;}s:37:"1230:crefbaary-reebe.hfrefgnghfpunatr";a:2:{i:0;R:31853;i:1;R:9;}s:33:"1230:crefbaary-reebe.hfregenafsre";a:2:{i:0;R:31853;i:1;R:9;}s:31:"1230:crefbaary-reebe.invyqrznvy";a:2:{i:0;R:31853;i:1;R:9;}s:40:"1230:crefbaary-reebe.irefvbaabqbabgzngpu";a:2:{i:0;R:31853;i:1;R:9;}s:28:"1230:crefbaary-reebef.sbbgre";a:2:{i:0;R:31853;i:1;R:9;}s:28:"1230:crefbaary-reebef.urnqre";a:2:{i:0;R:31853;i:1;R:9;}s:27:"1230:crefbaary-reebef.yriry";a:2:{i:0;R:31853;i:1;R:9;}s:31:"1230:crefbaary-reebef.znaqngbel";a:2:{i:0;R:31853;i:1;R:9;}s:37:"1230:crefbaary-reebef.znaqngbelfryrpg";a:2:{i:0;R:31853;i:1;R:9;}s:39:"1230:crefbaary-reebef.znaqngbelgrkgnern";a:2:{i:0;R:31853;i:1;R:9;}s:31:"1230:crefbaary-reebef.znkyratgu";a:2:{i:0;R:31853;i:1;R:9;}s:31:"1230:crefbaary-reebef.zvayratgu";a:2:{i:0;R:31853;i:1;R:9;}s:28:"1230:crefbaary-reebef.cersvk";a:2:{i:0;R:31853;i:1;R:9;}s:32:"1230:crefbaary-reebef.fcnprfznfx";a:2:{i:0;R:31853;i:1;R:9;}s:28:"1230:crefbaary-reebef.fgnghf";a:2:{i:0;R:31853;i:1;R:9;}s:28:"1230:crefbaary-reebef.fhssvk";a:2:{i:0;R:31853;i:1;R:9;}s:35:"1230:crefbaary-reebef.inyvqcnffjbeq";a:2:{i:0;R:31853;i:1;R:9;}s:32:"1230:crefbaary-reebef.inyvqinyhr";a:2:{i:0;R:31853;i:1;R:9;}s:56:"1230:crefbaary-rkprcgvba.senzrjbex.qbhoyrfhozvgrkprcgvba";a:2:{i:0;R:31853;i:1;R:9;}s:63:"1230:crefbaary-rkprcgvba.senzrjbex.svryqpbasvthengvba.znaqngbel";a:2:{i:0;R:31853;i:1;R:9;}s:19:"1230:ccv-ccv.npgvir";a:2:{i:0;s:13:"out-mifos-ppi";i:1;R:9;}s:24:"1230:ccv-ccv.onaq.ngevfx";a:2:{i:0;R:32038;i:1;R:9;}s:25:"1230:ccv-ccv.onaq.abacbbe";a:2:{i:0;R:32038;i:1;R:9;}s:22:"1230:ccv-ccv.onaq.cbbe";a:2:{i:0;R:32038;i:1;R:9;}s:26:"1230:ccv-ccv.onaq.irelcbbe";a:2:{i:0;R:32038;i:1;R:9;}s:20:"1230:ccv-ccv.pbhagel";a:2:{i:0;R:32038;i:1;R:9;}s:26:"1230:ccv-ccv.pbhagel.vaqvn";a:2:{i:0;R:32038;i:1;R:9;}s:21:"1230:ccv-ccv.vanpgvir";a:2:{i:0;R:32038;i:1;R:9;}s:19:"1230:ccv-ccv.cbvagf";a:2:{i:0;R:32038;i:1;R:9;}s:25:"1230:ccv-ccv.cbirelfgnghf";a:2:{i:0;R:32038;i:1;R:9;}s:19:"1230:ccv-ccv.fgnghf";a:2:{i:0;R:32038;i:1;R:9;}s:30:"1230:ccv-ccv.fheirlfpberyvzvgf";a:2:{i:0;R:32038;i:1;R:9;}s:18:"1230:ccv-ccv.gbgny";a:2:{i:0;R:32038;i:1;R:9;}s:34:"1230:ccv-ccv.pbasvthervafgehpgvbaf";a:2:{i:0;R:32038;i:1;R:9;}s:41:"1230:ccv-ccv.qrsvarcbireglzrnfherzraggbby";a:2:{i:0;R:32038;i:1;R:9;}s:32:"1230:ccv-ccv.qrsvarcbireglfgnghf";a:2:{i:0;R:32038;i:1;R:9;}s:43:"1230:ccv-ccv.qrsvarcbireglfgnghfvagehpgvbaf";a:2:{i:0;R:32038;i:1;R:9;}s:37:"1230:ccv-ccv.rqvgccvgbbypbasvthengvba";a:2:{i:0;R:32038;i:1;R:9;}s:21:"1230:ccv-ccv.ybatanzr";a:2:{i:0;R:32038;i:1;R:9;}s:29:"1230:ccv-ccv.ccvpbasvthengvba";a:2:{i:0;R:32038;i:1;R:9;}s:33:"1230:ccv-ccv.ccvgbbypbasvthengvba";a:2:{i:0;R:32038;i:1;R:9;}s:26:"1230:ccv-ccv.fryrpgpbhagel";a:2:{i:0;R:32038;i:1;R:9;}s:23:"1230:ccv-ccv.fheirlanzr";a:2:{i:0;R:32038;i:1;R:9;}s:40:"1230:ccv-reebef.vaginyvqngbe.vainyvq_vag";a:2:{i:0;R:32038;i:1;R:9;}s:52:"1230:ccv-reebef.sbezhynvp.rahzinyvqngbe.vainyvq_rahz";a:2:{i:0;R:32038;i:1;R:9;}s:33:"1230:ccv-reebef.ccv.vainyvqyvzvgf";a:2:{i:0;R:32038;i:1;R:9;}s:22:"1230:ccv-reebef.cersvk";a:2:{i:0;R:32038;i:1;R:9;}s:22:"1230:ccv-reebef.fhssvk";a:2:{i:0;R:32038;i:1;R:9;}s:47:"1230:dhrfgvbaanver-dhrfgvbaanver.ivrj.dhrfgvbaf";a:2:{i:0;s:23:"out-mifos-questionnaire";i:1;R:9;}s:55:"1230:dhrfgvbaanver-dhrfgvbaanver.perngr.dhrfgvba.cebzcg";a:2:{i:0;R:32067;i:1;R:9;}s:53:"1230:dhrfgvbaanver-dhrfgvbaanver.perngr.dhrfgvba.yvax";a:2:{i:0;R:32067;i:1;R:9;}s:46:"1230:dhrfgvbaanver-dhrfgvbaanver.ivrj.dhrfgvba";a:2:{i:0;R:32067;i:1;R:9;}s:41:"1230:dhrfgvbaanver-dhrfgvbaanver.dhrfgvba";a:2:{i:0;R:32067;i:1;R:9;}s:44:"1230:dhrfgvbaanver-dhrfgvbaanver.nafjre.glcr";a:2:{i:0;R:32067;i:1;R:9;}s:45:"1230:dhrfgvbaanver-dhrfgvbaanver.nqq.dhrfgvba";a:2:{i:0;R:32067;i:1;R:9;}s:46:"1230:dhrfgvbaanver-dhrfgvbaanver.nqq.dhrfgvbaf";a:2:{i:0;R:32067;i:1;R:9;}s:58:"1230:dhrfgvbaanver-dhrfgvbaanver.ivrjnqqvgvbanyvasbezngvba";a:2:{i:0;R:32067;i:1;R:9;}s:53:"1230:dhrfgvbaanver-dhrfgvbaanver.ivrj.dhrfgvba.tebhcf";a:2:{i:0;R:32067;i:1;R:9;}s:61:"1230:dhrfgvbaanver-dhrfgvbaanver.perngr.dhrfgvba.tebhc.cebzcg";a:2:{i:0;R:32067;i:1;R:9;}s:59:"1230:dhrfgvbaanver-dhrfgvbaanver.perngr.dhrfgvba.tebhc.yvax";a:2:{i:0;R:32067;i:1;R:9;}s:52:"1230:dhrfgvbaanver-dhrfgvbaanver.ivrj.dhrfgvba.tebhc";a:2:{i:0;R:32067;i:1;R:9;}s:46:"1230:dhrfgvbaanver-dhrfgvbaanver.dhrfgvba.anzr";a:2:{i:0;R:32067;i:1;R:9;}s:51:"1230:dhrfgvbaanver-dhrfgvbaanver.dhrfgvba.znaqngbel";a:2:{i:0;R:32067;i:1;R:9;}s:61:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.ab.dhrfgvba.va.frpgvba";a:2:{i:0;R:32067;i:1;R:9;}s:59:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.dhrfgvba.gvgyr.rzcgl";a:2:{i:0;R:32067;i:1;R:9;}s:57:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.dhrfgvba.qhcyvpngr";a:2:{i:0;R:32067;i:1;R:9;}s:48:"1230:dhrfgvbaanver-dhrfgvbaanver.frevipr.snvyher";a:2:{i:0;R:32067;i:1;R:9;}s:56:"1230:dhrfgvbaanver-dhrfgvbaanver.perngr.dhrfgvba.fhpprff";a:2:{i:0;R:32067;i:1;R:9;}s:60:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.dhrfgvbatebhc.vainyvq";a:2:{i:0;R:32067;i:1;R:9;}s:61:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.dhrfgvbatebhc.abgsbhaq";a:2:{i:0;R:32067;i:1;R:9;}s:55:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.dhrfgvba.vainyvq";a:2:{i:0;R:32067;i:1;R:9;}s:56:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.dhrfgvba.abgsbhaq";a:2:{i:0;R:32067;i:1;R:9;}s:57:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.frpgvba.anzr.rzcgl";a:2:{i:0;R:32067;i:1;R:9;}s:57:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.frpgvba.ngyrnfgbar";a:2:{i:0;R:32067;i:1;R:9;}s:58:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.nccyvrfgb.znaqngbel";a:2:{i:0;R:32067;i:1;R:9;}s:55:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.dhrfgvba.pubvprf";a:2:{i:0;R:32067;i:1;R:9;}s:62:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.dhrfgvba.gntf.qhcyvpngr";a:2:{i:0;R:32067;i:1;R:9;}s:58:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.dhrfgvba.gntf.yvzvg";a:2:{i:0;R:32067;i:1;R:9;}s:49:"1230:dhrfgvbaanver-dhrfgvbaanver.nqqdhrfgvbatebhc";a:2:{i:0;R:32067;i:1;R:9;}s:51:"1230:dhrfgvbaanver-dhrfgvbaanver.dhrfgvbatebhcgvgyr";a:2:{i:0;R:32067;i:1;R:9;}s:55:"1230:dhrfgvbaanver-dhrfgvbaanver.dhrfgvbatebhcnccyvrfgb";a:2:{i:0;R:32067;i:1;R:9;}s:52:"1230:dhrfgvbaanver-dhrfgvbaanver.pheeragfrpgvbagvgyr";a:2:{i:0;R:32067;i:1;R:9;}s:39:"1230:dhrfgvbaanver-dhrfgvbaanver.erzbir";a:2:{i:0;R:32067;i:1;R:9;}s:37:"1230:dhrfgvbaanver-dhrfgvbaanver.gntf";a:2:{i:0;R:32067;i:1;R:9;}s:44:"1230:dhrfgvbaanver-dhrfgvbaanver.erzbir.yvax";a:2:{i:0;R:32067;i:1;R:9;}s:48:"1230:dhrfgvbaanver-dhrfgvbaanver.dhrfgvba.qryrgr";a:2:{i:0;R:32067;i:1;R:9;}s:47:"1230:dhrfgvbaanver-dhrfgvbaanver.dhrfgvba.beqre";a:2:{i:0;R:32067;i:1;R:9;}s:36:"1230:dhrfgvbaanver-dhrfgvbaanver.lrf";a:2:{i:0;R:32067;i:1;R:9;}s:35:"1230:dhrfgvbaanver-dhrfgvbaanver.ab";a:2:{i:0;R:32067;i:1;R:9;}s:39:"1230:dhrfgvbaanver-dhrfgvbaanver.fhozvg";a:2:{i:0;R:32067;i:1;R:9;}s:39:"1230:dhrfgvbaanver-dhrfgvbaanver.pnapry";a:2:{i:0;R:32067;i:1;R:9;}s:41:"1230:dhrfgvbaanver-dhrfgvbaanver.pbagvahr";a:2:{i:0;R:32067;i:1;R:9;}s:58:"1230:dhrfgvbaanver-dhrfgvbaanver.dhrfvgba.pubvprf.serrgrkg";a:2:{i:0;R:32067;i:1;R:9;}s:56:"1230:dhrfgvbaanver-dhrfgvbaanver.dhrfvgba.pubvprf.ahzore";a:2:{i:0;R:32067;i:1;R:9;}s:54:"1230:dhrfgvbaanver-dhrfgvbaanver.dhrfvgba.pubvprf.qngr";a:2:{i:0;R:32067;i:1;R:9;}s:61:"1230:dhrfgvbaanver-dhrfgvbaanver.dhrfvgba.pubvprf.zhygvfryrpg";a:2:{i:0;R:32067;i:1;R:9;}s:62:"1230:dhrfgvbaanver-dhrfgvbaanver.dhrfvgba.pubvprf.fvatyrfryrpg";a:2:{i:0;R:32067;i:1;R:9;}s:61:"1230:dhrfgvbaanver-dhrfgvbaanver.dhrfvgba.pubvprf.fznegfryrpg";a:2:{i:0;R:32067;i:1;R:9;}s:63:"1230:dhrfgvbaanver-dhrfgvbaanver.dhrfvgba.pubvprf.abgnccyvpnoyr";a:2:{i:0;R:32067;i:1;R:9;}s:49:"1230:dhrfgvbaanver-dhrfgvbaanver.dhrfvgba.pubvprf";a:2:{i:0;R:32067;i:1;R:9;}s:48:"1230:dhrfgvbaanver-dhrfgvbaanver.dhrfvgba.pubvpr";a:2:{i:0;R:32067;i:1;R:9;}s:45:"1230:dhrfgvbaanver-dhrfgvbaanver.dhrfvgba.nqq";a:2:{i:0;R:32067;i:1;R:9;}s:55:"1230:dhrfgvbaanver-dhrfgvbaanver.nccylgbnyyybnacebqhpgf";a:2:{i:0;R:32067;i:1;R:9;}s:39:"1230:dhrfgvbaanver-dhrfgvbaanver.pubvpr";a:2:{i:0;R:32067;i:1;R:9;}s:40:"1230:dhrfgvbaanver-dhrfgvbaanver.pubvprf";a:2:{i:0;R:32067;i:1;R:9;}s:41:"1230:dhrfgvbaanver-dhrfgvbaanver.rqvgnoyr";a:2:{i:0;R:32067;i:1;R:9;}s:39:"1230:dhrfgvbaanver-dhrfgvbaanver.fgnghf";a:2:{i:0;R:32067;i:1;R:9;}s:39:"1230:dhrfgvbaanver-dhrfgvbaanver.npgvir";a:2:{i:0;R:32067;i:1;R:9;}s:41:"1230:dhrfgvbaanver-dhrfgvbaanver.vanpgvir";a:2:{i:0;R:32067;i:1;R:9;}s:47:"1230:dhrfgvbaanver-dhrfgvbaanver.dhrfgvba.gvgyr";a:2:{i:0;R:32067;i:1;R:9;}s:39:"1230:dhrfgvbaanver-dhrfgvbaanver.nggnpu";a:2:{i:0;R:32067;i:1;R:9;}s:45:"1230:dhrfgvbaanver-dhrfgvbaanver.vafgehpgvbaf";a:2:{i:0;R:32067;i:1;R:9;}s:42:"1230:dhrfgvbaanver-dhrfgvbaanver.ragreqngn";a:2:{i:0;R:32067;i:1;R:9;}s:52:"1230:dhrfgvbaanver-dhrfgvbaanver.fryrpgdhrfgvbaanver";a:2:{i:0;R:32067;i:1;R:9;}s:42:"1230:dhrfgvbaanver-dhrfgvbaanver.fryrpgbar";a:2:{i:0;R:32067;i:1;R:9;}s:37:"1230:dhrfgvbaanver-dhrfgvbaanver.rqvg";a:2:{i:0;R:32067;i:1;R:9;}s:45:"1230:dhrfgvbaanver-dhrfgvbaanver.rqvgdhrfgvba";a:2:{i:0;R:32067;i:1;R:9;}s:53:"1230:dhrfgvbaanver-dhrfgvbaanver.rqvgdhrfgvba.jneavat";a:2:{i:0;R:32067;i:1;R:9;}s:58:"1230:dhrfgvbaanver-dhrfgvbaanver.rqvgdhrfgvba.vafgehpgvbaf";a:2:{i:0;R:32067;i:1;R:9;}s:43:"1230:dhrfgvbaanver-dhrfgvbaanver.aberfcbafr";a:2:{i:0;R:32067;i:1;R:9;}s:61:"1230:dhrfgvbaanver-dhrfgvbaanver.vainyvq.ahzrevp.zva.erfcbafr";a:2:{i:0;R:32067;i:1;R:9;}s:61:"1230:dhrfgvbaanver-dhrfgvbaanver.vainyvq.ahzrevp.znk.erfcbafr";a:2:{i:0;R:32067;i:1;R:9;}s:63:"1230:dhrfgvbaanver-dhrfgvbaanver.vainyvq.ahzrevp.enatr.erfcbafr";a:2:{i:0;R:32067;i:1;R:9;}s:57:"1230:dhrfgvbaanver-dhrfgvbaanver.vainyvq.ahzrevp.erfcbafr";a:2:{i:0;R:32067;i:1;R:9;}s:64:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.dhrfgvbatebhc.gvgyr.rzcgl";a:2:{i:0;R:32067;i:1;R:9;}s:60:"1230:dhrfgvbaanver-abgahyy.dhrfgvbasbez.pheeragdhrfgvba.grkg";a:2:{i:0;R:32067;i:1;R:9;}s:60:"1230:dhrfgvbaanver-cnggrea.dhrfgvbasbez.pheeragdhrfgvba.grkg";a:2:{i:0;R:32067;i:1;R:9;}s:57:"1230:dhrfgvbaanver-fvmr.dhrfgvbasbez.pheeragdhrfgvba.grkg";a:2:{i:0;R:32067;i:1;R:9;}s:60:"1230:dhrfgvbaanver-cnggrea.dhrfgvbasbez.pheeragdhrfgvba.glcr";a:2:{i:0;R:32067;i:1;R:9;}s:60:"1230:dhrfgvbaanver-abgahyy.dhrfgvbasbez.pheeragdhrfgvba.glcr";a:2:{i:0;R:32067;i:1;R:9;}s:49:"1230:dhrfgvbaanver-dhrfgvbaanver.fryrpg.dhrfgvbaf";a:2:{i:0;R:32067;i:1;R:9;}s:62:"1230:dhrfgvbaanver-dhrfgvbaanver.ivrj.dhrfgvba.tebhc.erfcbafrf";a:2:{i:0;R:32067;i:1;R:9;}s:49:"1230:dhrfgvbaanver-dhrfgvbaanver.onpx.gb.cerivbhf";a:2:{i:0;R:32067;i:1;R:9;}s:53:"1230:dhrfgvbaanver-dhrfgvbaanver.dhrfvgba.ahzrevp.zva";a:2:{i:0;R:32067;i:1;R:9;}s:53:"1230:dhrfgvbaanver-dhrfgvbaanver.dhrfvgba.ahzrevp.znk";a:2:{i:0;R:32067;i:1;R:9;}s:48:"1230:dhrfgvbaanver-dhrfgvbaanver.dhrfgvba.nqqgnt";a:2:{i:0;R:32067;i:1;R:9;}s:52:"1230:dhrfgvbaanver-dhrfgvbaanver.hcybnqdhrfgvbatebhc";a:2:{i:0;R:32067;i:1;R:9;}s:59:"1230:dhrfgvbaanver-dhrfgvbaanver.hcybnqdhrfgvbatebhczrffntr";a:2:{i:0;R:32067;i:1;R:9;}s:53:"1230:dhrfgvbaanver-dhrfgvbaanver.fryrpg.dhrfgvbatebhc";a:2:{i:0;R:32067;i:1;R:9;}s:50:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.ccv.pbhagel";a:2:{i:0;R:32067;i:1;R:9;}s:63:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.srgpuccvpbhagelkzysnvyrq";a:2:{i:0;R:32067;i:1;R:9;}s:60:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.ccvfheirlhcybnqsnvyrq";a:2:{i:0;R:32067;i:1;R:9;}s:68:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.dhrfgvbatebhcgvgyrabgcebivqrq";a:2:{i:0;R:32067;i:1;R:9;}s:63:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.dhrfgvbatebhcgvgyrgbbovt";a:2:{i:0;R:32067;i:1;R:9;}s:66:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.dhrfgvbatebhcgvgyrqhcyvpngr";a:2:{i:0;R:32067;i:1;R:9;}s:65:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.vainyvqriragfbheprcebivqrq";a:2:{i:0;R:32067;i:1;R:9;}s:70:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.dhrfgvbatebhcfrpgvbaabgcebivqrq";a:2:{i:0;R:32067;i:1;R:9;}s:62:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.frpgvbagvgyrabgcebivqrq";a:2:{i:0;R:32067;i:1;R:9;}s:60:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.frpgvbagvgyrqhcyvpngr";a:2:{i:0;R:32067;i:1;R:9;}s:62:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.frpgvbabeqreabgcebivqrq";a:2:{i:0;R:32067;i:1;R:9;}s:60:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.frpgvbabeqreqhcyvpngr";a:2:{i:0;R:32067;i:1;R:9;}s:68:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.ab.dhrfgvbaf.sbhaq.va.frpgvba";a:2:{i:0;R:32067;i:1;R:9;}s:63:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.dhrfgvbagvgyrabgcebivqrq";a:2:{i:0;R:32067;i:1;R:9;}s:56:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.qhcyvpngrdhrfgvba";a:2:{i:0;R:32067;i:1;R:9;}s:63:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.dhrfgvbabeqreabgcebivqrq";a:2:{i:0;R:32067;i:1;R:9;}s:61:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.dhrfgvbabeqreqhcyvpngr";a:2:{i:0;R:32067;i:1;R:9;}s:60:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.nafjreglcrabgcebivqrq";a:2:{i:0;R:32067;i:1;R:9;}s:66:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.dhrfgvbapubvprfvafhssvpvrag";a:2:{i:0;R:32067;i:1;R:9;}s:61:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.dhrfgvbapubvprfvainyvq";a:2:{i:0;R:32067;i:1;R:9;}s:61:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.vainyvq.ahzrevp.obhaqf";a:2:{i:0;R:32067;i:1;R:9;}s:56:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.frpgvbaanzrgbbovt";a:2:{i:0;R:32067;i:1;R:9;}s:58:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.dhrfgvbagvgyrgbbovt";a:2:{i:0;R:32067;i:1;R:9;}s:60:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.ccvfheirlsvyrabgsbhaq";a:2:{i:0;R:32067;i:1;R:9;}s:58:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.ccvfheirlcnefrreebe";a:2:{i:0;R:32067;i:1;R:9;}s:63:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.ccvfheirlpbairefvbareebe";a:2:{i:0;R:32067;i:1;R:9;}s:75:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.dhrfgvbagvgyrzngpurfrkvfgvatdhrfgvba";a:2:{i:0;R:32067;i:1;R:9;}s:61:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.npgvingvba.abg.nyybjrq";a:2:{i:0;R:32067;i:1;R:9;}s:47:"1230:dhrfgvbaanver-dhrfgvbaanver.nqqarjdhrfgvba";a:2:{i:0;R:32067;i:1;R:9;}s:48:"1230:dhrfgvbaanver-dhrfgvbaanver.fryrpgdhrfgvbaf";a:2:{i:0;R:32067;i:1;R:9;}s:65:"1230:dhrfgvbaanver-abgahyy.dhrfgvbatebhcsbez.pheeragdhrfgvba.grkg";a:2:{i:0;R:32067;i:1;R:9;}s:65:"1230:dhrfgvbaanver-cnggrea.dhrfgvbatebhcsbez.pheeragdhrfgvba.grkg";a:2:{i:0;R:32067;i:1;R:9;}s:62:"1230:dhrfgvbaanver-fvmr.dhrfgvbatebhcsbez.pheeragdhrfgvba.grkg";a:2:{i:0;R:32067;i:1;R:9;}s:65:"1230:dhrfgvbaanver-cnggrea.dhrfgvbatebhcsbez.pheeragdhrfgvba.glcr";a:2:{i:0;R:32067;i:1;R:9;}s:65:"1230:dhrfgvbaanver-abgahyy.dhrfgvbatebhcsbez.pheeragdhrfgvba.glcr";a:2:{i:0;R:32067;i:1;R:9;}s:46:"1230:dhrfgvbaanver-dhrfgvbaanver.dhrfgvbatebhc";a:2:{i:0;R:32067;i:1;R:9;}s:50:"1230:dhrfgvbaanver-dhrfgvbaanver.rqvgdhrfgvbatebhc";a:2:{i:0;R:32067;i:1;R:9;}s:71:"1230:dhrfgvbaanver-dhrfgvbaanver.reebe.znaqngbel.dhrfgvba.unf.ab.nafjre";a:2:{i:0;R:32067;i:1;R:9;}s:35:"1230:enc-reebe.npgvivgl.abg.nyybjrq";a:2:{i:0;s:13:"out-mifos-rap";i:1;R:9;}s:25:"1230:enc-reebef.znkyratgu";a:2:{i:0;R:32197;i:1;R:9;}s:22:"1230:enc-reebef.cersvk";a:2:{i:0;R:32197;i:1;R:9;}s:22:"1230:enc-reebef.fhssvk";a:2:{i:0;R:32197;i:1;R:9;}s:50:"1230:enc-rkprcgvba.senzrjbex.qbhoyrfhozvgrkprcgvba";a:2:{i:0;R:32197;i:1;R:9;}s:40:"1230:enc-ebyrnaqcrezvffvba.ohggba.pnapry";a:2:{i:0;R:32197;i:1;R:9;}s:40:"1230:enc-ebyrnaqcrezvffvba.ohggba.perngr";a:2:{i:0;R:32197;i:1;R:9;}s:40:"1230:enc-ebyrnaqcrezvffvba.ohggba.qryrgr";a:2:{i:0;R:32197;i:1;R:9;}s:40:"1230:enc-ebyrnaqcrezvffvba.ohggba.fhozvg";a:2:{i:0;R:32197;i:1;R:9;}s:40:"1230:enc-ebyrnaqcrezvffvba.ohggba.hcqngr";a:2:{i:0;R:32197;i:1;R:9;}s:51:"1230:enc-ebyrnaqcrezvffvba.reebe.ybnqgrzcyrgrsnvyrq";a:2:{i:0;R:32197;i:1;R:9;}s:51:"1230:enc-ebyrnaqcrezvffvba.reebe.abnpgvivglfryrpgrq";a:2:{i:0;R:32197;i:1;R:9;}s:60:"1230:enc-ebyrnaqcrezvffvba.reebe.abnpgvivglfryrpgrqsbehcqngr";a:2:{i:0;R:32197;i:1;R:9;}s:47:"1230:enc-ebyrnaqcrezvffvba.reebe.abebyrvaflfgrz";a:2:{i:0;R:32197;i:1;R:9;}s:51:"1230:enc-ebyrnaqcrezvffvba.reebe.ebyrperngvbasnvyrq";a:2:{i:0;R:32197;i:1;R:9;}s:49:"1230:enc-ebyrnaqcrezvffvba.reebe.ebyrqryrgrsnvyrq";a:2:{i:0;R:32197;i:1;R:9;}s:46:"1230:enc-ebyrnaqcrezvffvba.reebe.ebyranzrrkvfg";a:2:{i:0;R:32197;i:1;R:9;}s:49:"1230:enc-ebyrnaqcrezvffvba.reebe.ebyrhcqngrsnvyrq";a:2:{i:0;R:32197;i:1;R:9;}s:45:"1230:enc-ebyrnaqcrezvffvba.reebe.ebyrnffvtarq";a:2:{i:0;R:32197;i:1;R:9;}s:44:"1230:enc-ebyrnaqcrezvffvba.reebe.ebyrqryrgrq";a:2:{i:0;R:32197;i:1;R:9;}s:44:"1230:enc-ebyrnaqcrezvffvba.reebeebyrabgrkvfg";a:2:{i:0;R:32197;i:1;R:9;}s:42:"1230:enc-ebyrnaqcrezvffvba.ynorynqqarjebyr";a:2:{i:0;R:32197;i:1;R:9;}s:53:"1230:enc-ebyrnaqcrezvffvba.ynorynqqarjebyrvafgehpgvba";a:2:{i:0;R:32197;i:1;R:9;}s:37:"1230:enc-ebyrnaqcrezvffvba.ynorynqzva";a:2:{i:0;R:32197;i:1;R:9;}s:42:"1230:enc-ebyrnaqcrezvffvba.ynoryqryrgrebyr";a:2:{i:0;R:32197;i:1;R:9;}s:53:"1230:enc-ebyrnaqcrezvffvba.ynoryqryrgrebyrvafgehpgvba";a:2:{i:0;R:32197;i:1;R:9;}s:42:"1230:enc-ebyrnaqcrezvffvba.ynoryzbqvslebyr";a:2:{i:0;R:32197;i:1;R:9;}s:53:"1230:enc-ebyrnaqcrezvffvba.ynoryzbsvslebyrvafgehpgvba";a:2:{i:0;R:32197;i:1;R:9;}s:39:"1230:enc-ebyrnaqcrezvffvba.ynoryarjebyr";a:2:{i:0;R:32197;i:1;R:9;}s:49:"1230:enc-ebyrnaqcrezvffvba.ynoryebyrnaqcrezvffvba";a:2:{i:0;R:32197;i:1;R:9;}s:40:"1230:enc-ebyrnaqcrezvffvba.ynoryebyranzr";a:2:{i:0;R:32197;i:1;R:9;}s:47:"1230:enc-ebyrnaqcrezvffvba.ebyranzr.qvfcynlanzr";a:2:{i:0;R:32197;i:1;R:9;}s:43:"1230:enc-ebyrnaqcrezvffvba.ebyranzr.znfxzft";a:2:{i:0;R:32197;i:1;R:9;}s:44:"1230:enc-ebyrnaqcrezvffvba.ebyranzr.erdhverq";a:2:{i:0;R:32197;i:1;R:9;}s:32:"1230:ep-reebe.pngrtbelunfercbegf";a:2:{i:0;s:12:"out-mifos-rc";i:1;R:9;}s:26:"1230:ep-reebe.pngrtbelanzr";a:2:{i:0;R:32232;i:1;R:9;}s:38:"1230:ep-reebe.pngrtbelanzrnyernqlrkvfg";a:2:{i:0;R:32232;i:1;R:9;}s:33:"1230:ep-reebe.pngrtbelanzrabgrqvg";a:2:{i:0;R:32232;i:1;R:9;}s:37:"1230:ep-reebe.abzberqlanzvpnpgvivglvq";a:2:{i:0;R:32232;i:1;R:9;}s:21:"1230:ep-reebef.sbbgre";a:2:{i:0;R:32232;i:1;R:9;}s:21:"1230:ep-reebef.urnqre";a:2:{i:0;R:32232;i:1;R:9;}s:21:"1230:ep-reebef.cersvk";a:2:{i:0;R:32232;i:1;R:9;}s:21:"1230:ep-reebef.fhssvk";a:2:{i:0;R:32232;i:1;R:9;}s:30:"1230:ep-ercbegfpngrtbel.pnapry";a:2:{i:0;R:32232;i:1;R:9;}s:35:"1230:ep-ercbegfpngrtbel.pyvpxpnapry";a:2:{i:0;R:32232;i:1;R:9;}s:35:"1230:ep-ercbegfpngrtbel.pyvpxfhozvg";a:2:{i:0;R:32232;i:1;R:9;}s:47:"1230:ep-ercbegfpngrtbel.qrsvararjercbegpngrtbel";a:2:{i:0;R:32232;i:1;R:9;}s:30:"1230:ep-ercbegfpngrtbel.qryrgr";a:2:{i:0;R:32232;i:1;R:9;}s:38:"1230:ep-ercbegfpngrtbel.qryrgrpngrtbel";a:2:{i:0;R:32232;i:1;R:9;}s:45:"1230:ep-ercbegfpngrtbel.qryrgrpngrtbelpbasvez";a:2:{i:0;R:32232;i:1;R:9;}s:49:"1230:ep-ercbegfpngrtbel.qryrgrpngrtbelvafgehpgvba";a:2:{i:0;R:32232;i:1;R:9;}s:30:"1230:ep-ercbegfpngrtbel.qrgnvy";a:2:{i:0;R:32232;i:1;R:9;}s:31:"1230:ep-ercbegfpngrtbel.qrgnvyf";a:2:{i:0;R:32232;i:1;R:9;}s:28:"1230:ep-ercbegfpngrtbel.rqvg";a:2:{i:0;R:32232;i:1;R:9;}s:39:"1230:ep-ercbegfpngrtbel.rqvgvasbezngvba";a:2:{i:0;R:32232;i:1;R:9;}s:46:"1230:ep-ercbegfpngrtbel.rqvgercbegpngrtbelgvcf";a:2:{i:0;R:32232;i:1;R:9;}s:58:"1230:ep-ercbegfpngrtbel.rqvgercbegpngrtbelgvcfjvgunfgrevfx";a:2:{i:0;R:32232;i:1;R:9;}s:45:"1230:ep-ercbegfpngrtbel.rqvgercbegvasbezngvba";a:2:{i:0;R:32232;i:1;R:9;}s:48:"1230:ep-ercbegfpngrtbel.ragrepngrtbelvasbezngvba";a:2:{i:0;R:32232;i:1;R:9;}s:35:"1230:ep-ercbegfpngrtbel.vasbezngvba";a:2:{i:0;R:32232;i:1;R:9;}s:33:"1230:ep-ercbegfpngrtbel.ynoryvasb";a:2:{i:0;R:32232;i:1;R:9;}s:46:"1230:ep-ercbegfpngrtbel.yvaxivrjercbegpngrtbel";a:2:{i:0;R:32232;i:1;R:9;}s:32:"1230:ep-ercbegfpngrtbel.yvaxvasb";a:2:{i:0;R:32232;i:1;R:9;}s:44:"1230:ep-ercbegfpngrtbel.znexrqsvryqfgngrzrag";a:2:{i:0;R:32232;i:1;R:9;}s:28:"1230:ep-ercbegfpngrtbel.anzr";a:2:{i:0;R:32232;i:1;R:9;}s:31:"1230:ep-ercbegfpngrtbel.cerivrj";a:2:{i:0;R:32232;i:1;R:9;}s:45:"1230:ep-ercbegfpngrtbel.cerivrjercbegpngrtbel";a:2:{i:0;R:32232;i:1;R:9;}s:37:"1230:ep-ercbegfpngrtbel.erivrj&fhozvg";a:2:{i:0;R:32232;i:1;R:9;}s:39:"1230:ep-ercbegfpngrtbel.erivrjfgngrzrag";a:2:{i:0;R:32232;i:1;R:9;}s:33:"1230:ep-ercbegfpngrtbel.fgngrzrag";a:2:{i:0;R:32232;i:1;R:9;}s:30:"1230:ep-ercbegfpngrtbel.fhozvg";a:2:{i:0;R:32232;i:1;R:9;}s:40:"1230:ep-ercbegfpngrtbel.ivrjcntrurnqanzr";a:2:{i:0;R:32232;i:1;R:9;}s:24:"1230:er-oenapuvq.vainyvq";a:2:{i:0;s:12:"out-mifos-re";i:1;R:9;}s:24:"1230:er-pragrevq.vainyvq";a:2:{i:0;R:32271;i:1;R:9;}s:29:"1230:er-ybnabssvprevq.vainyvq";a:2:{i:0;R:32271;i:1;R:9;}s:29:"1230:er-ybnacebqhpgvq.vainyvq";a:2:{i:0;R:32271;i:1;R:9;}s:27:"1230:er-zrrgvatqngr.vainyvq";a:2:{i:0;R:32271;i:1;R:9;}s:23:"1230:er-ehaqngr.vainyvq";a:2:{i:0;R:32271;i:1;R:9;}s:24:"1230:er-ehaqngr.abgsbhaq";a:2:{i:0;R:32271;i:1;R:9;}s:39:"1230:ercbegf-reebe.npgvivgl.abg.nyybjrq";a:2:{i:0;s:17:"out-mifos-reports";i:1;R:9;}s:29:"1230:ercbegf-reebe.pngrtbelvq";a:2:{i:0;R:32279;i:1;R:9;}s:23:"1230:ercbegf-reebe.svyr";a:2:{i:0;R:32279;i:1;R:9;}s:42:"1230:ercbegf-reebe.abzberqlanzvpnpgvivglvq";a:2:{i:0;R:32279;i:1;R:9;}s:41:"1230:ercbegf-reebe.ercbegnpgvivglvqvfahyy";a:2:{i:0;R:32279;i:1;R:9;}s:37:"1230:ercbegf-reebe.ercbegnyernqlrkvfg";a:2:{i:0;R:32279;i:1;R:9;}s:36:"1230:ercbegf-reebe.ercbegvasbabgrqvg";a:2:{i:0;R:32279;i:1;R:9;}s:25:"1230:ercbegf-reebe.fgnghf";a:2:{i:0;R:32279;i:1;R:9;}s:36:"1230:ercbegf-reebe.gvgyrnyernqlrkvfg";a:2:{i:0;R:32279;i:1;R:9;}s:28:"1230:ercbegf-reebe.gvgyranzr";a:2:{i:0;R:32279;i:1;R:9;}s:26:"1230:ercbegf-reebef.sbbgre";a:2:{i:0;R:32279;i:1;R:9;}s:26:"1230:ercbegf-reebef.urnqre";a:2:{i:0;R:32279;i:1;R:9;}s:26:"1230:ercbegf-reebef.cersvk";a:2:{i:0;R:32279;i:1;R:9;}s:26:"1230:ercbegf-reebef.fhssvk";a:2:{i:0;R:32279;i:1;R:9;}s:26:"1230:ercbegf-ercbegf.nqzva";a:2:{i:0;R:32279;i:1;R:9;}s:35:"1230:ercbegf-ercbegf.ercbeggrzcyngr";a:2:{i:0;R:32279;i:1;R:9;}s:35:"1230:ercbegf-ercbegf.fubjjurafgnghf";a:2:{i:0;R:32279;i:1;R:9;}s:32:"1230:ercbegf-ercbegf.nppbhagglcr";a:2:{i:0;R:32279;i:1;R:9;}s:27:"1230:ercbegf-ercbegf.npgvir";a:2:{i:0;R:32279;i:1;R:9;}s:24:"1230:ercbegf-ercbegf.nqq";a:2:{i:0;R:32279;i:1;R:9;}s:33:"1230:ercbegf-ercbegf.nqqercbegfqf";a:2:{i:0;R:32279;i:1;R:9;}s:37:"1230:ercbegf-ercbegf.nqqercbegfcnenzf";a:2:{i:0;R:32279;i:1;R:9;}s:39:"1230:ercbegf-ercbegf.nqzvaqbphzraggvgyr";a:2:{i:0;R:32279;i:1;R:9;}s:38:"1230:ercbegf-ercbegf.nqzvavfgreercbegf";a:2:{i:0;R:32279;i:1;R:9;}s:50:"1230:ercbegf-ercbegf.nqzvavfgengvirqbphzragqrgnvyf";a:2:{i:0;R:32279;i:1;R:9;}s:43:"1230:ercbegf-ercbegf.nqzvavfgengvirqbphzrag";a:2:{i:0;R:32279;i:1;R:9;}s:44:"1230:ercbegf-ercbegf.nqzvavfgengvirqbphzragf";a:2:{i:0;R:32279;i:1;R:9;}s:27:"1230:ercbegf-ercbegf.pnapry";a:2:{i:0;R:32279;i:1;R:9;}s:29:"1230:ercbegf-ercbegf.pngrtbel";a:2:{i:0;R:32279;i:1;R:9;}s:37:"1230:ercbegf-ercbegf.punatrercbegvasb";a:2:{i:0;R:32279;i:1;R:9;}s:30:"1230:ercbegf-ercbegf.pynffanzr";a:2:{i:0;R:32279;i:1;R:9;}s:32:"1230:ercbegf-ercbegf.pyvpxpnapry";a:2:{i:0;R:32279;i:1;R:9;}s:32:"1230:ercbegf-ercbegf.pyvpxfhozvg";a:2:{i:0;R:32279;i:1;R:9;}s:40:"1230:ercbegf-ercbegf.perngrarjercbegvasb";a:2:{i:0;R:32279;i:1;R:9;}s:25:"1230:ercbegf-ercbegf.qngn";a:2:{i:0;R:32279;i:1;R:9;}s:32:"1230:ercbegf-ercbegf.qrfpevcgvba";a:2:{i:0;R:32279;i:1;R:9;}s:28:"1230:ercbegf-ercbegf.qrgnvyf";a:2:{i:0;R:32279;i:1;R:9;}s:40:"1230:ercbegf-ercbegf.qbphzragvasbezngvba";a:2:{i:0;R:32279;i:1;R:9;}s:24:"1230:ercbegf-ercbegf.qbg";a:2:{i:0;R:32279;i:1;R:9;}s:29:"1230:ercbegf-ercbegf.qbjaybnq";a:2:{i:0;R:32279;i:1;R:9;}s:43:"1230:ercbegf-ercbegf.qbjaybnqnqzvaqbphzragf";a:2:{i:0;R:32279;i:1;R:9;}s:27:"1230:ercbegf-ercbegf.qevire";a:2:{i:0;R:32279;i:1;R:9;}s:27:"1230:ercbegf-ercbegf.qfanzr";a:2:{i:0;R:32279;i:1;R:9;}s:25:"1230:ercbegf-ercbegf.rqvg";a:2:{i:0;R:32279;i:1;R:9;}s:44:"1230:ercbegf-ercbegf.rqvgqbphzragvasbezngvba";a:2:{i:0;R:32279;i:1;R:9;}s:42:"1230:ercbegf-ercbegf.rqvgercbegvasbezngvba";a:2:{i:0;R:32279;i:1;R:9;}s:36:"1230:ercbegf-ercbegf.rqvgvasbezngvba";a:2:{i:0;R:32279;i:1;R:9;}s:35:"1230:ercbegf-ercbegf.rqvgercbeggvcf";a:2:{i:0;R:32279;i:1;R:9;}s:47:"1230:ercbegf-ercbegf.rqvgercbeggvcfjvgunfgrevfx";a:2:{i:0;R:32279;i:1;R:9;}s:45:"1230:ercbegf-ercbegf.ragreqbphzragvasbezngvba";a:2:{i:0;R:32279;i:1;R:9;}s:38:"1230:ercbegf-ercbegf.ragreevasbezngvba";a:2:{i:0;R:32279;i:1;R:9;}s:33:"1230:ercbegf-ercbegf.rkcbegsbezng";a:2:{i:0;R:32279;i:1;R:9;}s:29:"1230:ercbegf-ercbegf.vanpgvir";a:2:{i:0;R:32279;i:1;R:9;}s:32:"1230:ercbegf-ercbegf.vasbezngvba";a:2:{i:0;R:32279;i:1;R:9;}s:33:"1230:ercbegf-ercbegf.vafgehpgvbaf";a:2:{i:0;R:32279;i:1;R:9;}s:48:"1230:ercbegf-ercbegf.ynorynqzvavfgengvirqbphzrag";a:2:{i:0;R:32279;i:1;R:9;}s:34:"1230:ercbegf-ercbegf.ynorypngrtbel";a:2:{i:0;R:32279;i:1;R:9;}s:38:"1230:ercbegf-ercbegf.ynoryercbegfgnghf";a:2:{i:0;R:32279;i:1;R:9;}s:40:"1230:ercbegf-ercbegf.ynoryfryrpggrzcyngr";a:2:{i:0;R:32279;i:1;R:9;}s:31:"1230:ercbegf-ercbegf.ynorygvgyr";a:2:{i:0;R:32279;i:1;R:9;}s:35:"1230:ercbegf-ercbegf.yvaxivrjercbeg";a:2:{i:0;R:32279;i:1;R:9;}s:37:"1230:ercbegf-ercbegf.yvaxivrjgrzcyngr";a:2:{i:0;R:32279;i:1;R:9;}s:27:"1230:ercbegf-ercbegf.yvfgqf";a:2:{i:0;R:32279;i:1;R:9;}s:31:"1230:ercbegf-ercbegf.yvfgcnenzf";a:2:{i:0;R:32279;i:1;R:9;}s:34:"1230:ercbegf-ercbegf.yvfgcnenzfznc";a:2:{i:0;R:32279;i:1;R:9;}s:32:"1230:ercbegf-ercbegf.yvfgercbegf";a:2:{i:0;R:32279;i:1;R:9;}s:34:"1230:ercbegf-ercbegf.yvfghfrecnenz";a:2:{i:0;R:32279;i:1;R:9;}s:41:"1230:ercbegf-ercbegf.znexrqsvryqfgngrzrag";a:2:{i:0;R:32279;i:1;R:9;}s:38:"1230:ercbegf-ercbegf.arjercbegyvaxgrkg";a:2:{i:0;R:32279;i:1;R:9;}s:23:"1230:ercbegf-ercbegf.be";a:2:{i:0;R:32279;i:1;R:9;}s:31:"1230:ercbegf-ercbegf.cnenzrgref";a:2:{i:0;R:32279;i:1;R:9;}s:30:"1230:ercbegf-ercbegf.cnenzanzr";a:2:{i:0;R:32279;i:1;R:9;}s:29:"1230:ercbegf-ercbegf.cnffjbeq";a:2:{i:0;R:32279;i:1;R:9;}s:28:"1230:ercbegf-ercbegf.cerivrj";a:2:{i:0;R:32279;i:1;R:9;}s:38:"1230:ercbegf-ercbegf.cerivrjercbeggvcf";a:2:{i:0;R:32279;i:1;R:9;}s:28:"1230:ercbegf-ercbegf.ercbegf";a:2:{i:0;R:32279;i:1;R:9;}s:34:"1230:ercbegf-ercbegf.erivrj&fhozvg";a:2:{i:0;R:32279;i:1;R:9;}s:36:"1230:ercbegf-ercbegf.erivrjfgngrzrag";a:2:{i:0;R:32279;i:1;R:9;}s:33:"1230:ercbegf-ercbegf.fryrpgercbeg";a:2:{i:0;R:32279;i:1;R:9;}s:30:"1230:ercbegf-ercbegf.fgngrzrag";a:2:{i:0;R:32279;i:1;R:9;}s:27:"1230:ercbegf-ercbegf.fgnghf";a:2:{i:0;R:32279;i:1;R:9;}s:27:"1230:ercbegf-ercbegf.fhozvg";a:2:{i:0;R:32279;i:1;R:9;}s:37:"1230:ercbegf-ercbegf.fhzznelnaqercbeg";a:2:{i:0;R:32279;i:1;R:9;}s:26:"1230:ercbegf-ercbegf.gvgyr";a:2:{i:0;R:32279;i:1;R:9;}s:34:"1230:ercbegf-ercbegf.gbrqvgpyvpxba";a:2:{i:0;R:32279;i:1;R:9;}s:25:"1230:ercbegf-ercbegf.glcr";a:2:{i:0;R:32279;i:1;R:9;}s:27:"1230:ercbegf-ercbegf.hcybnq";a:2:{i:0;R:32279;i:1;R:9;}s:49:"1230:ercbegf-ercbegf.hcybnqnqzvavfgengvirqbphzrag";a:2:{i:0;R:32279;i:1;R:9;}s:33:"1230:ercbegf-ercbegf.hcybnqercbeg";a:2:{i:0;R:32279;i:1;R:9;}s:34:"1230:ercbegf-ercbegf.hcybnq_ercbeg";a:2:{i:0;R:32279;i:1;R:9;}s:39:"1230:ercbegf-ercbegf.hcybnqnarjnqzvaqbp";a:2:{i:0;R:32279;i:1;R:9;}s:24:"1230:ercbegf-ercbegf.hey";a:2:{i:0;R:32279;i:1;R:9;}s:29:"1230:ercbegf-ercbegf.hfreanzr";a:2:{i:0;R:32279;i:1;R:9;}s:34:"1230:ercbegf-ercbegf.ivrjercbegfqf";a:2:{i:0;R:32279;i:1;R:9;}s:38:"1230:ercbegf-ercbegf.ivrjercbegfcnenzf";a:2:{i:0;R:32279;i:1;R:9;}s:19:"1230:erfbheprf-arkg";a:2:{i:0;s:19:"out-mifos-resources";i:1;R:9;}s:23:"1230:erfbheprf-cerivbhf";a:2:{i:0;R:32375;i:1;R:9;}s:22:"1230:erfbheprf-erfhygf";a:2:{i:0;R:32375;i:1;R:9;}s:22:"1230:erfbheprf-nyfbfrr";a:2:{i:0;R:32375;i:1;R:9;}s:21:"1230:erfbheprf-pragre";a:2:{i:0;R:32375;i:1;R:9;}s:21:"1230:erfbheprf-pyvrag";a:2:{i:0;R:32375;i:1;R:9;}s:27:"1230:erfbheprf-reebe.sjqxrl";a:2:{i:0;R:32375;i:1;R:9;}s:29:"1230:erfbheprf-reebe.abnpgvba";a:2:{i:0;R:32375;i:1;R:9;}s:30:"1230:erfbheprf-reebe.abkzysvyr";a:2:{i:0;R:32375;i:1;R:9;}s:34:"1230:erfbheprf-reebe.gnoyrabgsbhaq";a:2:{i:0;R:32375;i:1;R:9;}s:30:"1230:erfbheprf-reebe.jebatglcr";a:2:{i:0;R:32375;i:1;R:9;}s:32:"1230:erfbheprf-reebef.harkcrpgrq";a:2:{i:0;R:32375;i:1;R:9;}s:20:"1230:erfbheprf-tebhc";a:2:{i:0;R:32375;i:1;R:9;}s:19:"1230:erfbheprf-ybna";a:2:{i:0;R:32375;i:1;R:9;}s:36:"1230:erfbheprf-ybnanppbhag_fgngrvq_1";a:2:{i:0;R:32375;i:1;R:9;}s:37:"1230:erfbheprf-ybnanppbhag_fgngrvq_10";a:2:{i:0;R:32375;i:1;R:9;}s:36:"1230:erfbheprf-ybnanppbhag_fgngrvq_2";a:2:{i:0;R:32375;i:1;R:9;}s:36:"1230:erfbheprf-ybnanppbhag_fgngrvq_3";a:2:{i:0;R:32375;i:1;R:9;}s:36:"1230:erfbheprf-ybnanppbhag_fgngrvq_4";a:2:{i:0;R:32375;i:1;R:9;}s:36:"1230:erfbheprf-ybnanppbhag_fgngrvq_5";a:2:{i:0;R:32375;i:1;R:9;}s:36:"1230:erfbheprf-ybnanppbhag_fgngrvq_6";a:2:{i:0;R:32375;i:1;R:9;}s:36:"1230:erfbheprf-ybnanppbhag_fgngrvq_7";a:2:{i:0;R:32375;i:1;R:9;}s:36:"1230:erfbheprf-ybnanppbhag_fgngrvq_8";a:2:{i:0;R:32375;i:1;R:9;}s:36:"1230:erfbheprf-ybnanppbhag_fgngrvq_9";a:2:{i:0;R:32375;i:1;R:9;}s:26:"1230:erfbheprf-ybnabssvpre";a:2:{i:0;R:32375;i:1;R:9;}s:22:"1230:erfbheprf-fnivatf";a:2:{i:0;R:32375;i:1;R:9;}s:33:"1230:erfbheprf-fnivatf_fgngrvq_13";a:2:{i:0;R:32375;i:1;R:9;}s:33:"1230:erfbheprf-fnivatf_fgngrvq_14";a:2:{i:0;R:32375;i:1;R:9;}s:33:"1230:erfbheprf-fnivatf_fgngrvq_15";a:2:{i:0;R:32375;i:1;R:9;}s:33:"1230:erfbheprf-fnivatf_fgngrvq_16";a:2:{i:0;R:32375;i:1;R:9;}s:33:"1230:erfbheprf-fnivatf_fgngrvq_17";a:2:{i:0;R:32375;i:1;R:9;}s:33:"1230:erfbheprf-fnivatf_fgngrvq_18";a:2:{i:0;R:32375;i:1;R:9;}s:21:"1230:erfbheprf-fgnghf";a:2:{i:0;R:32375;i:1;R:9;}s:22:"1230:erfbheprf-inyhr_1";a:2:{i:0;R:32375;i:1;R:9;}s:23:"1230:erfbheprf-inyhr_10";a:2:{i:0;R:32375;i:1;R:9;}s:23:"1230:erfbheprf-inyhr_11";a:2:{i:0;R:32375;i:1;R:9;}s:23:"1230:erfbheprf-inyhr_12";a:2:{i:0;R:32375;i:1;R:9;}s:23:"1230:erfbheprf-inyhr_13";a:2:{i:0;R:32375;i:1;R:9;}s:23:"1230:erfbheprf-inyhr_14";a:2:{i:0;R:32375;i:1;R:9;}s:22:"1230:erfbheprf-inyhr_2";a:2:{i:0;R:32375;i:1;R:9;}s:22:"1230:erfbheprf-inyhr_3";a:2:{i:0;R:32375;i:1;R:9;}s:22:"1230:erfbheprf-inyhr_4";a:2:{i:0;R:32375;i:1;R:9;}s:22:"1230:erfbheprf-inyhr_5";a:2:{i:0;R:32375;i:1;R:9;}s:22:"1230:erfbheprf-inyhr_6";a:2:{i:0;R:32375;i:1;R:9;}s:22:"1230:erfbheprf-inyhr_7";a:2:{i:0;R:32375;i:1;R:9;}s:22:"1230:erfbheprf-inyhr_8";a:2:{i:0;R:32375;i:1;R:9;}s:22:"1230:erfbheprf-inyhr_9";a:2:{i:0;R:32375;i:1;R:9;}s:21:"1230:fnivatf-npgvivgl";a:2:{i:0;R:24;i:1;R:9;}s:28:"1230:fnivatf-nqwhfgzragabgrf";a:2:{i:0;R:24;i:1;R:9;}s:19:"1230:fnivatf-nzbhag";a:2:{i:0;R:24;i:1;R:9;}s:20:"1230:fnivatf-onynapr";a:2:{i:0;R:24;i:1;R:9;}s:23:"1230:fnivatf-pyvraganzr";a:2:{i:0;R:24;i:1;R:9;}s:19:"1230:fnivatf-perqvg";a:2:{i:0;R:24;i:1;R:9;}s:17:"1230:fnivatf-qngr";a:2:{i:0;R:24;i:1;R:9;}s:23:"1230:fnivatf-qngrcbfgrq";a:2:{i:0;R:24;i:1;R:9;}s:18:"1230:fnivatf-qrovg";a:2:{i:0;R:24;i:1;R:9;}s:24:"1230:fnivatf-qrfpevcgvba";a:2:{i:0;R:24;i:1;R:9;}s:19:"1230:fnivatf-typbqr";a:2:{i:0;R:24;i:1;R:9;}s:22:"1230:fnivatf-arjfgnghf";a:2:{i:0;R:24;i:1;R:9;}s:22:"1230:fnivatf-byqfgnghf";a:2:{i:0;R:24;i:1;R:9;}s:22:"1230:fnivatf-cnlzragvq";a:2:{i:0;R:24;i:1;R:9;}s:21:"1230:fnivatf-cbfgrqol";a:2:{i:0;R:24;i:1;R:9;}s:27:"1230:fnivatf-ehaavatonynapr";a:2:{i:0;R:24;i:1;R:9;}s:25:"1230:fnivatf-fnivatf.narj";a:2:{i:0;R:24;i:1;R:9;}s:41:"1230:fnivatf-fnivatf.nppbhagfgngrzragnfbs";a:2:{i:0;R:24;i:1;R:9;}s:31:"1230:fnivatf-fnivatf.pyvraganzr";a:2:{i:0;R:24;i:1;R:9;}s:27:"1230:fnivatf-fnivatf.perngr";a:2:{i:0;R:24;i:1;R:9;}s:25:"1230:fnivatf-fnivatf.rqvg";a:2:{i:0;R:24;i:1;R:9;}s:43:"1230:fnivatf-fnivatf.rqvgnppbhagvasbezngvba";a:2:{i:0;R:24;i:1;R:9;}s:26:"1230:fnivatf-fnivatf.ragre";a:2:{i:0;R:24;i:1;R:9;}s:29:"1230:fnivatf-fnivatf.vagrerfg";a:2:{i:0;R:24;i:1;R:9;}s:28:"1230:fnivatf-fnivatf.cerivrj";a:2:{i:0;R:24;i:1;R:9;}s:28:"1230:fnivatf-fnivatf.fnivatf";a:2:{i:0;R:24;i:1;R:9;}s:27:"1230:fnivatf-fnivatf.fryrpg";a:2:{i:0;R:24;i:1;R:9;}s:39:"1230:fnivatf-fnivatf.genafnpgvbauvfgbel";a:2:{i:0;R:24;i:1;R:9;}s:25:"1230:fnivatf-fnivatf.ivrj";a:2:{i:0;R:24;i:1;R:9;}s:28:"1230:fnivatf-fnivatf.nppbhag";a:2:{i:0;R:24;i:1;R:9;}s:36:"1230:fnivatf-fnivatf.nppbhagnffvtarq";a:2:{i:0;R:24;i:1;R:9;}s:35:"1230:fnivatf-fnivatf.nppbhagonynapr";a:2:{i:0;R:24;i:1;R:9;}s:39:"1230:fnivatf-fnivatf.nppbhagqrgnvyfcntr";a:2:{i:0;R:24;i:1;R:9;}s:39:"1230:fnivatf-fnivatf.nppbhagvasbezngvba";a:2:{i:0;R:24;i:1;R:9;}s:33:"1230:fnivatf-fnivatf.nppbhagbjare";a:2:{i:0;R:24;i:1;R:9;}s:29:"1230:fnivatf-fnivatf.nqqnabgr";a:2:{i:0;R:24;i:1;R:9;}s:42:"1230:fnivatf-fnivatf.nqqvgvbanyvasbezngvba";a:2:{i:0;R:24;i:1;R:9;}s:27:"1230:fnivatf-fnivatf.nzbhag";a:2:{i:0;R:24;i:1;R:9;}s:36:"1230:fnivatf-fnivatf.nccylnqwhfgzrag";a:2:{i:0;R:24;i:1;R:9;}s:31:"1230:fnivatf-fnivatf.nccylgenaf";a:2:{i:0;R:24;i:1;R:9;}s:28:"1230:fnivatf-fnivatf.onynapr";a:2:{i:0;R:24;i:1;R:9;}s:35:"1230:fnivatf-fnivatf.onynaprhfrqsbe";a:2:{i:0;R:24;i:1;R:9;}s:39:"1230:fnivatf-fnivatf.ogaergheagbqrgnvyf";a:2:{i:0;R:24;i:1;R:9;}s:32:"1230:fnivatf-fnivatf.pyvpxpnapry";a:2:{i:0;R:24;i:1;R:9;}s:40:"1230:fnivatf-fnivatf.pyvpxpnaprygberghea";a:2:{i:0;R:24;i:1;R:9;}s:34:"1230:fnivatf-fnivatf.pyvpxpbagvahr";a:2:{i:0;R:24;i:1;R:9;}s:42:"1230:fnivatf-fnivatf.pyvpxpbagvahrbepnapry";a:2:{i:0;R:24;i:1;R:9;}s:33:"1230:fnivatf-fnivatf.pyvpxcerivrj";a:2:{i:0;R:24;i:1;R:9;}s:43:"1230:fnivatf-fnivatf.pyvpxfhozvgvsfngvfsvrq";a:2:{i:0;R:24;i:1;R:9;}s:58:"1230:fnivatf-fnivatf.pyvpxfhozvgvsfngvfsvrq.erghea.pybfvat";a:2:{i:0;R:24;i:1;R:9;}s:41:"1230:fnivatf-fnivatf.pyvpxfhozvgbacerivrj";a:2:{i:0;R:24;i:1;R:9;}s:33:"1230:fnivatf-fnivatf.pybfrnppbhag";a:2:{i:0;R:24;i:1;R:9;}s:43:"1230:fnivatf-fnivatf.pbzcyrgrgursvryqforybj";a:2:{i:0;R:24;i:1;R:9;}s:54:"1230:fnivatf-fnivatf.pbasvezngvbazftbaerivrjnqwhfgzrag";a:2:{i:0;R:24;i:1;R:9;}s:38:"1230:fnivatf-fnivatf.qngrnppbhagbcrarq";a:2:{i:0;R:24;i:1;R:9;}s:31:"1230:fnivatf-fnivatf.qngrbsgeka";a:2:{i:0;R:24;i:1;R:9;}s:38:"1230:fnivatf-fnivatf.qrcbfvgqhrqrgnvyf";a:2:{i:0;R:24;i:1;R:9;}s:32:"1230:fnivatf-fnivatf.qrfpevcgvba";a:2:{i:0;R:24;i:1;R:9;}s:31:"1230:fnivatf-fnivatf.qrgnvyfabj";a:2:{i:0;R:24;i:1;R:9;}s:42:"1230:fnivatf-fnivatf.qrgnvyfjvgubhgpybfvat";a:2:{i:0;R:24;i:1;R:9;}s:38:"1230:fnivatf-fnivatf.rqvgnppbhagfgnghf";a:2:{i:0;R:24;i:1;R:9;}s:31:"1230:fnivatf-fnivatf.rqvgsvryqf";a:2:{i:0;R:24;i:1;R:9;}s:64:"1230:fnivatf-fnivatf.rqvgsvryqf.pyvpxcerivrj.pyvpxpnaprygberghea";a:2:{i:0;R:24;i:1;R:9;}s:36:"1230:fnivatf-fnivatf.rqvggenafnpgvba";a:2:{i:0;R:24;i:1;R:9;}s:32:"1230:fnivatf-fnivatf.ragrenzbhag";a:2:{i:0;R:24;i:1;R:9;}s:35:"1230:fnivatf-fnivatf.svryqferdhverq";a:2:{i:0;R:24;i:1;R:9;}s:24:"1230:fnivatf-fnivatf.sbe";a:2:{i:0;R:24;i:1;R:9;}s:32:"1230:fnivatf-fnivatf.serdhraplbs";a:2:{i:0;R:24;i:1;R:9;}s:29:"1230:fnivatf-fnivatf.vafgnapr";a:2:{i:0;R:24;i:1;R:9;}s:40:"1230:fnivatf-fnivatf.vafgnaprvasbezngvba";a:2:{i:0;R:24;i:1;R:9;}s:33:"1230:fnivatf-fnivatf.vafgnapranzr";a:2:{i:0;R:24;i:1;R:9;}s:42:"1230:fnivatf-fnivatf.znxrqrcbfvgjvguqenjny";a:2:{i:0;R:24;i:1;R:9;}s:41:"1230:fnivatf-fnivatf.znxrqrcbfvgjvguqenjy";a:2:{i:0;R:24;i:1;R:9;}s:46:"1230:fnivatf-fnivatf.znaqngbelnzbhagsbeqrcbfvg";a:2:{i:0;R:24;i:1;R:9;}s:42:"1230:fnivatf-fnivatf.znknzbhagcrejvguqenjy";a:2:{i:0;R:24;i:1;R:9;}s:39:"1230:fnivatf-fnivatf.zvaonynaprerdhverq";a:2:{i:0;R:24;i:1;R:9;}s:35:"1230:fnivatf-fnivatf.zvffrqqrcbfvgf";a:2:{i:0;R:24;i:1;R:9;}s:34:"1230:fnivatf-fnivatf.zbqrbscnlzrag";a:2:{i:0;R:24;i:1;R:9;}s:38:"1230:fnivatf-fnivatf.zbqvslynfgcnlzrag";a:2:{i:0;R:24;i:1;R:9;}s:53:"1230:fnivatf-fnivatf.zbernppbhagnaqgenafnpgvbaqrgnvyf";a:2:{i:0;R:24;i:1;R:9;}s:58:"1230:fnivatf-fnivatf.zftbagbcynfgcnlzragzbqvsvrqnqwhfgzrag";a:2:{i:0;R:24;i:1;R:9;}s:32:"1230:fnivatf-fnivatf.arkgqrcbfvg";a:2:{i:0;R:24;i:1;R:9;}s:33:"1230:fnivatf-fnivatf.abafcrpvsvrq";a:2:{i:0;R:24;i:1;R:9;}s:26:"1230:fnivatf-fnivatf.abgrf";a:2:{i:0;R:24;i:1;R:9;}s:23:"1230:fnivatf-fnivatf.ba";a:2:{i:0;R:24;i:1;R:9;}s:29:"1230:fnivatf-fnivatf.bcranarj";a:2:{i:0;R:24;i:1;R:9;}s:39:"1230:fnivatf-fnivatf.bcranabgurenppbhag";a:2:{i:0;R:24;i:1;R:9;}s:36:"1230:fnivatf-fnivatf.cnfgqrcbfvgfqhr";a:2:{i:0;R:24;i:1;R:9;}s:32:"1230:fnivatf-fnivatf.cnlzragglcr";a:2:{i:0;R:24;i:1;R:9;}s:25:"1230:fnivatf-fnivatf.crep";a:2:{i:0;R:24;i:1;R:9;}s:39:"1230:fnivatf-fnivatf.cresbeznapruvfgbel";a:2:{i:0;R:24;i:1;R:9;}s:31:"1230:fnivatf-fnivatf.cyrnfrabgr";a:2:{i:0;R:24;i:1;R:9;}s:38:"1230:fnivatf-fnivatf.cbfgvatgbnppbhagf";a:2:{i:0;R:24;i:1;R:9;}s:36:"1230:fnivatf-fnivatf.cebqhpgvafgnapr";a:2:{i:0;R:24;i:1;R:9;}s:35:"1230:fnivatf-fnivatf.cebqhpgfhzznel";a:2:{i:0;R:24;i:1;R:9;}s:42:"1230:fnivatf-fnivatf.cebivqrqrgnvyfgbpybfr";a:2:{i:0;R:24;i:1;R:9;}s:25:"1230:fnivatf-fnivatf.engr";a:2:{i:0;R:24;i:1;R:9;}s:36:"1230:fnivatf-fnivatf.engrpnyphyngvba";a:2:{i:0;R:24;i:1;R:9;}s:32:"1230:fnivatf-fnivatf.erprvcgqngr";a:2:{i:0;R:24;i:1;R:9;}s:30:"1230:fnivatf-fnivatf.erprvcgvq";a:2:{i:0;R:24;i:1;R:9;}s:35:"1230:fnivatf-fnivatf.erpragnpgvivgl";a:2:{i:0;R:24;i:1;R:9;}s:32:"1230:fnivatf-fnivatf.erpragabgrf";a:2:{i:0;R:24;i:1;R:9;}s:47:"1230:fnivatf-fnivatf.erpbzzraqrqnzagqbhoyrinyhr";a:2:{i:0;R:24;i:1;R:9;}s:48:"1230:fnivatf-fnivatf.erpbzzraqrqnzbhagsbeqrcbfvg";a:2:{i:0;R:24;i:1;R:9;}s:43:"1230:fnivatf-fnivatf.ergheagbnppbhagqrgnvyf";a:2:{i:0;R:24;i:1;R:9;}s:27:"1230:fnivatf-fnivatf.erivrj";a:2:{i:0;R:24;i:1;R:9;}s:34:"1230:fnivatf-fnivatf.erivrj&fhozvg";a:2:{i:0;R:24;i:1;R:9;}s:37:"1230:fnivatf-fnivatf.erivrjnqwhfgzrag";a:2:{i:0;R:24;i:1;R:9;}s:34:"1230:fnivatf-fnivatf.erivrjqrgnvyf";a:2:{i:0;R:24;i:1;R:9;}s:38:"1230:fnivatf-fnivatf.erivrjvasbezngvba";a:2:{i:0;R:24;i:1;R:9;}s:38:"1230:fnivatf-fnivatf.erivrjgenafnpgvba";a:2:{i:0;R:24;i:1;R:9;}s:33:"1230:fnivatf-fnivatf.frnepuobkzft";a:2:{i:0;R:24;i:1;R:9;}s:32:"1230:fnivatf-fnivatf.frrnyyabgrf";a:2:{i:0;R:24;i:1;R:9;}s:28:"1230:fnivatf-fnivatf.fryrpgn";a:2:{i:0;R:24;i:1;R:9;}s:33:"1230:fnivatf-fnivatf.fryrpgpyvrag";a:2:{i:0;R:24;i:1;R:9;}s:29:"1230:fnivatf-fnivatf.fhogbgny";a:2:{i:0;R:24;i:1;R:9;}s:40:"1230:fnivatf-fnivatf.fhpprffshyylperngrq";a:2:{i:0;R:24;i:1;R:9;}s:39:"1230:fnivatf-fnivatf.fhttrfgrqarkgfgrcf";a:2:{i:0;R:24;i:1;R:9;}s:34:"1230:fnivatf-fnivatf.gvzrcrevbqsbe";a:2:{i:0;R:24;i:1;R:9;}s:34:"1230:fnivatf-fnivatf.gbznxrpunatrf";a:2:{i:0;R:24;i:1;R:9;}s:35:"1230:fnivatf-fnivatf.gbgnynzbhagqhr";a:2:{i:0;R:24;i:1;R:9;}s:37:"1230:fnivatf-fnivatf.gbgnynzbhagqhrba";a:2:{i:0;R:24;i:1;R:9;}s:34:"1230:fnivatf-fnivatf.gbgnyqrcbfvgf";a:2:{i:0;R:24;i:1;R:9;}s:40:"1230:fnivatf-fnivatf.gbgnyvagrerfgrnearq";a:2:{i:0;R:24;i:1;R:9;}s:36:"1230:fnivatf-fnivatf.gbgnyjvguqenjyf";a:2:{i:0;R:24;i:1;R:9;}s:33:"1230:fnivatf-fnivatf.genafnpgvbaf";a:2:{i:0;R:24;i:1;R:9;}s:35:"1230:fnivatf-fnivatf.glcrbsqrcbfvgf";a:2:{i:0;R:24;i:1;R:9;}s:43:"1230:fnivatf-fnivatf.ivrjnyynppbhagnpgvivgl";a:2:{i:0;R:24;i:1;R:9;}s:34:"1230:fnivatf-fnivatf.ivrjpunatrybt";a:2:{i:0;R:24;i:1;R:9;}s:42:"1230:fnivatf-fnivatf.ivrjqrcbfvgqhrqrgnvyf";a:2:{i:0;R:24;i:1;R:9;}s:38:"1230:fnivatf-fnivatf.ivrjfgnghfuvfgbel";a:2:{i:0;R:24;i:1;R:9;}s:43:"1230:fnivatf-fnivatf.ivrjgenafnpgvbauvfgbel";a:2:{i:0;R:24;i:1;R:9;}s:67:"1230:fnivatf-fnivatf.ivrjdhrfgvbatebhcsbepybfrqfnivatferfcbafrfyvax";a:2:{i:0;R:24;i:1;R:9;}s:26:"1230:fnivatf-fnivatf.jnvir";a:2:{i:0;R:24;i:1;R:9;}s:26:"1230:fnivatf-genafnpgvbavq";a:2:{i:0;R:24;i:1;R:9;}s:17:"1230:fnivatf-glcr";a:2:{i:0;R:24;i:1;R:9;}s:17:"1230:fnivatf-hfre";a:2:{i:0;R:24;i:1;R:9;}s:39:"1230:fnivatf-reebe.npgvivgl.abg.nyybjrq";a:2:{i:0;R:24;i:1;R:9;}s:38:"1230:fnivatf-reebe.vapbzcyrgrpurpxyvfg";a:2:{i:0;R:24;i:1;R:9;}s:47:"1230:fnivatf-reebe.fgngrvavgvnyvmngvbarkprcgvba";a:2:{i:0;R:24;i:1;R:9;}s:41:"1230:fnivatf-reebe.fgnghfpunatrabgnyybjrq";a:2:{i:0;R:24;i:1;R:9;}s:35:"1230:fnivatf-reebe.haxabjarkprcgvba";a:2:{i:0;R:24;i:1;R:9;}s:38:"1230:fnivatf-reebe.irefvbaabqbabgzngpu";a:2:{i:0;R:24;i:1;R:9;}s:51:"1230:fnivatf-reebef.nppbhag.fcrpvslphfgbzsvryqinyhr";a:2:{i:0;R:24;i:1;R:9;}s:43:"1230:fnivatf-reebef.nppbhag.phfgbzqngrsvryq";a:2:{i:0;R:24;i:1;R:9;}s:32:"1230:fnivatf-reebef.perngrsnvyrq";a:2:{i:0;R:24;i:1;R:9;}s:33:"1230:fnivatf-reebef.qrpvznysbezng";a:2:{i:0;R:24;i:1;R:9;}s:26:"1230:fnivatf-reebef.qbhoyr";a:2:{i:0;R:24;i:1;R:9;}s:39:"1230:fnivatf-reebef.rkprrqznkjvguqenjny";a:2:{i:0;R:24;i:1;R:9;}s:30:"1230:fnivatf-reebef.shgherqngr";a:2:{i:0;R:24;i:1;R:9;}s:27:"1230:fnivatf-reebef.trarevp";a:2:{i:0;R:24;i:1;R:9;}s:38:"1230:fnivatf-reebef.vafhssvpragonynapr";a:2:{i:0;R:24;i:1;R:9;}s:43:"1230:fnivatf-reebef.vainyvqnqwhfgzragnzbhag";a:2:{i:0;R:24;i:1;R:9;}s:41:"1230:fnivatf-reebef.vainyvqvagrerfgnzbhag";a:2:{i:0;R:24;i:1;R:9;}s:36:"1230:fnivatf-reebef.vainyvqcrefbaary";a:2:{i:0;R:24;i:1;R:9;}s:34:"1230:fnivatf-reebef.vainyvqgkaqngr";a:2:{i:0;R:24;i:1;R:9;}s:52:"1230:fnivatf-reebef.vainyvqgkaqngrzbagunyernqlpybfrq";a:2:{i:0;R:24;i:1;R:9;}s:31:"1230:fnivatf-reebef.vainyvqqngr";a:2:{i:0;R:24;i:1;R:9;}s:38:"1230:fnivatf-reebef.vainyvqynfgcnlzrag";a:2:{i:0;R:24;i:1;R:9;}s:29:"1230:fnivatf-reebef.znaqngbel";a:2:{i:0;R:24;i:1;R:9;}s:35:"1230:fnivatf-reebef.znaqngbelfryrpg";a:2:{i:0;R:24;i:1;R:9;}s:33:"1230:fnivatf-reebef.znkvzhzyratgu";a:2:{i:0;R:24;i:1;R:9;}s:41:"1230:fnivatf-reebef.znkvzhzyratgusbeabgrf";a:2:{i:0;R:24;i:1;R:9;}s:41:"1230:fnivatf-reebef.zhfgorterngregunamreb";a:2:{i:0;R:24;i:1;R:9;}s:26:"1230:fnivatf-reebef.cersvk";a:2:{i:0;R:24;i:1;R:9;}s:26:"1230:fnivatf-reebef.fhssvk";a:2:{i:0;R:24;i:1;R:9;}s:32:"1230:fnivatf-reebef.hcqngrsnvyrq";a:2:{i:0;R:24;i:1;R:9;}s:52:"1230:fnivatf-reebef.cnlzrag.qngr.orsber.ynfg.cnlzrag";a:2:{i:0;R:24;i:1;R:9;}s:65:"1230:fnivatf-rkprcgvba.nppbhagf.nccyvpngvbarkprcgvba.pnaabgnqwhfg";a:2:{i:0;R:24;i:1;R:9;}s:27:"1230:fnivatf-fnivatf.pnapry";a:2:{i:0;R:24;i:1;R:9;}s:33:"1230:fnivatf-fnivatf.purpxyvfgzft";a:2:{i:0;R:24;i:1;R:9;}s:33:"1230:fnivatf-fnivatf.pyvpxpnapry1";a:2:{i:0;R:24;i:1;R:9;}s:33:"1230:fnivatf-fnivatf.pyvpxpnapry2";a:2:{i:0;R:24;i:1;R:9;}s:40:"1230:fnivatf-fnivatf.pbasvezfgnghfpunatr";a:2:{i:0;R:24;i:1;R:9;}s:31:"1230:fnivatf-fnivatf.rqvgfgnghf";a:2:{i:0;R:24;i:1;R:9;}s:25:"1230:fnivatf-fnivatf.ynfg";a:2:{i:0;R:24;i:1;R:9;}s:30:"1230:fnivatf-fnivatf.arjfgnghf";a:2:{i:0;R:24;i:1;R:9;}s:32:"1230:fnivatf-fnivatf.abpurpxyvfg";a:2:{i:0;R:24;i:1;R:9;}s:37:"1230:fnivatf-fnivatf.absyntfninvynoyr";a:2:{i:0;R:24;i:1;R:9;}s:30:"1230:fnivatf-fnivatf.byqfgnghf";a:2:{i:0;R:24;i:1;R:9;}s:40:"1230:fnivatf-fnivatf.fryrpgrkcynvangvba1";a:2:{i:0;R:24;i:1;R:9;}s:40:"1230:fnivatf-fnivatf.fryrpgrkcynvangvba2";a:2:{i:0;R:24;i:1;R:9;}s:33:"1230:fnivatf-fnivatf.fryrpgfgnghf";a:2:{i:0;R:24;i:1;R:9;}s:27:"1230:fnivatf-fnivatf.fhozvg";a:2:{i:0;R:24;i:1;R:9;}s:33:"1230:fnivatf-fnivatf.punatrfgnghf";a:2:{i:0;R:24;i:1;R:9;}s:28:"1230:fnivatf-fnivatf.pbeerpg";a:2:{i:0;R:24;i:1;R:9;}s:34:"1230:fnivatf-fnivatf.pheeragfgnghf";a:2:{i:0;R:24;i:1;R:9;}s:25:"1230:fnivatf-fnivatf.znqr";a:2:{i:0;R:24;i:1;R:9;}s:25:"1230:fnivatf-fnivatf.abgr";a:2:{i:0;R:24;i:1;R:9;}s:27:"1230:fnivatf-fnivatf.fgnghf";a:2:{i:0;R:24;i:1;R:9;}s:49:"1230:frphevgl-frphevgl.reebe.rapbqvatabgfhccbegrq";a:2:{i:0;s:18:"out-mifos-security";i:1;R:9;}s:41:"1230:frphevgl-frphevgl.reebe.trarenyreebe";a:2:{i:0;R:32613;i:1;R:9;}s:38:"1230:frphevgl-frphevgl.reebe.vavsnvyrq";a:2:{i:0;R:32613;i:1;R:9;}s:44:"1230:frphevgl-frphevgl.reebe.abfhpunytbevguz";a:2:{i:0;R:32613;i:1;R:9;}s:42:"1230:frphevgl-frphevgl.reebe.abfhpucnqqvat";a:2:{i:0;R:32613;i:1;R:9;}s:37:"1230:funerq-reebef.zhygvcyrpheerapvrf";a:2:{i:0;s:16:"out-mifos-shared";i:1;R:9;}s:34:"1230:fheirlf-fheirlf.nggnpunfheirl";a:2:{i:0;s:17:"out-mifos-surveys";i:1;R:9;}s:28:"1230:fheirlf-fheirlf.fheirlf";a:2:{i:0;R:32621;i:1;R:9;}s:27:"1230:fheirlf-fheirlf.npgvir";a:2:{i:0;R:32621;i:1;R:9;}s:24:"1230:fheirlf-fheirlf.nqq";a:2:{i:0;R:32621;i:1;R:9;}s:32:"1230:fheirlf-fheirlf.nqqdhrfgvba";a:2:{i:0;R:32621;i:1;R:9;}s:33:"1230:fheirlf-fheirlf.nqqdhrfgvbaf";a:2:{i:0;R:32621;i:1;R:9;}s:27:"1230:fheirlf-fheirlf.nafjre";a:2:{i:0;R:32621;i:1;R:9;}s:33:"1230:fheirlf-fheirlf.nafjrepubvpr";a:2:{i:0;R:32621;i:1;R:9;}s:31:"1230:fheirlf-fheirlf.nafjreglcr";a:2:{i:0;R:32621;i:1;R:9;}s:30:"1230:fheirlf-fheirlf.nccyvrfgb";a:2:{i:0;R:32621;i:1;R:9;}s:32:"1230:fheirlf-fheirlf.pragreynory";a:2:{i:0;R:32621;i:1;R:9;}s:27:"1230:fheirlf-fheirlf.pubvpr";a:2:{i:0;R:32621;i:1;R:9;}s:28:"1230:fheirlf-fheirlf.pubvprf";a:2:{i:0;R:32621;i:1;R:9;}s:32:"1230:fheirlf-fheirlf.pyvragynory";a:2:{i:0;R:32621;i:1;R:9;}s:38:"1230:fheirlf-fheirlf.perngrarjvafgnapr";a:2:{i:0;R:32621;i:1;R:9;}s:30:"1230:fheirlf-fheirlf.phfgbzref";a:2:{i:0;R:32621;i:1;R:9;}s:38:"1230:fheirlf-fheirlf.phfgbzrefnaqybnaf";a:2:{i:0;R:32621;i:1;R:9;}s:25:"1230:fheirlf-fheirlf.qngr";a:2:{i:0;R:32621;i:1;R:9;}s:27:"1230:fheirlf-fheirlf.qryrgr";a:2:{i:0;R:32621;i:1;R:9;}s:28:"1230:fheirlf-fheirlf.qrgnvyf";a:2:{i:0;R:32621;i:1;R:9;}s:37:"1230:fheirlf-fheirlf.rqvgvafgehpgvbaf";a:2:{i:0;R:32621;i:1;R:9;}s:29:"1230:fheirlf-fheirlf.rqvgabgr";a:2:{i:0;R:32621;i:1;R:9;}s:33:"1230:fheirlf-fheirlf.rqvgdhrfgvba";a:2:{i:0;R:32621;i:1;R:9;}s:37:"1230:fheirlf-fheirlf.rqvgdhrfgvbavasb";a:2:{i:0;R:32621;i:1;R:9;}s:31:"1230:fheirlf-fheirlf.rqvgfheirl";a:2:{i:0;R:32621;i:1;R:9;}s:29:"1230:fheirlf-fheirlf.serrgrkg";a:2:{i:0;R:32621;i:1;R:9;}s:31:"1230:fheirlf-fheirlf.tebhcynory";a:2:{i:0;R:32621;i:1;R:9;}s:29:"1230:fheirlf-fheirlf.vanpgvir";a:2:{i:0;R:32621;i:1;R:9;}s:30:"1230:fheirlf-fheirlf.ybnaynory";a:2:{i:0;R:32621;i:1;R:9;}s:26:"1230:fheirlf-fheirlf.ybnaf";a:2:{i:0;R:32621;i:1;R:9;}s:30:"1230:fheirlf-fheirlf.znaqngbel";a:2:{i:0;R:32621;i:1;R:9;}s:32:"1230:fheirlf-fheirlf.zhygvfryrpg";a:2:{i:0;R:32621;i:1;R:9;}s:23:"1230:fheirlf-fheirlf.ab";a:2:{i:0;R:32621;i:1;R:9;}s:27:"1230:fheirlf-fheirlf.ahzore";a:2:{i:0;R:32621;i:1;R:9;}s:35:"1230:fheirlf-fheirlf.cntrqdhrfgvbaf";a:2:{i:0;R:32621;i:1;R:9;}s:40:"1230:fheirlf-fheirlf.cerivrjrqvgdhrfgvba";a:2:{i:0;R:32621;i:1;R:9;}s:35:"1230:fheirlf-fheirlf.cevagreirefvba";a:2:{i:0;R:32621;i:1;R:9;}s:29:"1230:fheirlf-fheirlf.dhrfgvba";a:2:{i:0;R:32621;i:1;R:9;}s:33:"1230:fheirlf-fheirlf.dhrfgvbaanzr";a:2:{i:0;R:32621;i:1;R:9;}s:30:"1230:fheirlf-fheirlf.dhrfgvbaf";a:2:{i:0;R:32621;i:1;R:9;}s:34:"1230:fheirlf-fheirlf.dhrfgvbagvgyr";a:2:{i:0;R:32621;i:1;R:9;}s:27:"1230:fheirlf-fheirlf.erzbir";a:2:{i:0;R:32621;i:1;R:9;}s:33:"1230:fheirlf-fheirlf.fnivatfynory";a:2:{i:0;R:32621;i:1;R:9;}s:33:"1230:fheirlf-fheirlf.fvatyrfryrpg";a:2:{i:0;R:32621;i:1;R:9;}s:27:"1230:fheirlf-fheirlf.fgnghf";a:2:{i:0;R:32621;i:1;R:9;}s:24:"1230:fheirlf-fheirlf.lrf";a:2:{i:0;R:32621;i:1;R:9;}s:34:"1230:fheirlf-fheirlf.nppbhagf_glcr";a:2:{i:0;R:32621;i:1;R:9;}s:29:"1230:fheirlf-fheirlf.nyy_glcr";a:2:{i:0;R:32621;i:1;R:9;}s:24:"1230:fheirlf-fheirlf.naq";a:2:{i:0;R:32621;i:1;R:9;}s:35:"1230:fheirlf-fheirlf.nccyvrfgbsvryq";a:2:{i:0;R:32621;i:1;R:9;}s:34:"1230:fheirlf-fheirlf.nggnpu_fheirl";a:2:{i:0;R:32621;i:1;R:9;}s:28:"1230:fheirlf-fheirlf.orgjrra";a:2:{i:0;R:32621;i:1;R:9;}s:30:"1230:fheirlf-fheirlf.obgu_glcr";a:2:{i:0;R:32621;i:1;R:9;}s:45:"1230:fheirlf-fheirlf.ohggba.onpxgbqrgnvyfcntr";a:2:{i:0;R:32621;i:1;R:9;}s:34:"1230:fheirlf-fheirlf.ohggba.pnapry";a:2:{i:0;R:32621;i:1;R:9;}s:36:"1230:fheirlf-fheirlf.ohggba.pyrnenyy";a:2:{i:0;R:32621;i:1;R:9;}s:36:"1230:fheirlf-fheirlf.ohggba.pbagvahr";a:2:{i:0;R:32621;i:1;R:9;}s:34:"1230:fheirlf-fheirlf.ohggba.qryrgr";a:2:{i:0;R:32621;i:1;R:9;}s:32:"1230:fheirlf-fheirlf.ohggba.rqvg";a:2:{i:0;R:32621;i:1;R:9;}s:38:"1230:fheirlf-fheirlf.ohggba.rqvgfheirl";a:2:{i:0;R:32621;i:1;R:9;}s:35:"1230:fheirlf-fheirlf.ohggba.cerivrj";a:2:{i:0;R:32621;i:1;R:9;}s:33:"1230:fheirlf-fheirlf.ohggba.cevag";a:2:{i:0;R:32621;i:1;R:9;}s:34:"1230:fheirlf-fheirlf.ohggba.fhozvg";a:2:{i:0;R:32621;i:1;R:9;}s:27:"1230:fheirlf-fheirlf.pragre";a:2:{i:0;R:32621;i:1;R:9;}s:32:"1230:fheirlf-fheirlf.pragre_glcr";a:2:{i:0;R:32621;i:1;R:9;}s:45:"1230:fheirlf-fheirlf.pubbfr_cntr_vafgehpgvbaf";a:2:{i:0;R:32621;i:1;R:9;}s:34:"1230:fheirlf-fheirlf.pubbfrbssvpre";a:2:{i:0;R:32621;i:1;R:9;}s:27:"1230:fheirlf-fheirlf.pyvrag";a:2:{i:0;R:32621;i:1;R:9;}s:32:"1230:fheirlf-fheirlf.pyvrag_glcr";a:2:{i:0;R:32621;i:1;R:9;}s:45:"1230:fheirlf-fheirlf.perngr_cntr_vafgehpgvbaf";a:2:{i:0;R:32621;i:1;R:9;}s:39:"1230:fheirlf-fheirlf.perngrfheirlurnqre";a:2:{i:0;R:32621;i:1;R:9;}s:36:"1230:fheirlf-fheirlf.perngrfheirlzft";a:2:{i:0;R:32621;i:1;R:9;}s:35:"1230:fheirlf-fheirlf.phfgbzref_glcr";a:2:{i:0;R:32621;i:1;R:9;}s:36:"1230:fheirlf-fheirlf.qrsvararjfheirl";a:2:{i:0;R:32621;i:1;R:9;}s:35:"1230:fheirlf-fheirlf.qrsvardhrfgvba";a:2:{i:0;R:32621;i:1;R:9;}s:33:"1230:fheirlf-fheirlf.qrsvarfheirl";a:2:{i:0;R:32621;i:1;R:9;}s:33:"1230:fheirlf-fheirlf.ragre_fheirl";a:2:{i:0;R:32621;i:1;R:9;}s:40:"1230:fheirlf-fheirlf.ragrerqvagbflfgrzol";a:2:{i:0;R:32621;i:1;R:9;}s:45:"1230:fheirlf-fheirlf.ragrevafgnaprvasbezngvba";a:2:{i:0;R:32621;i:1;R:9;}s:26:"1230:fheirlf-fheirlf.tebhc";a:2:{i:0;R:32621;i:1;R:9;}s:31:"1230:fheirlf-fheirlf.tebhc_glcr";a:2:{i:0;R:32621;i:1;R:9;}s:42:"1230:fheirlf-fheirlf.vafgnapr.qngrbsfheirl";a:2:{i:0;R:32621;i:1;R:9;}s:45:"1230:fheirlf-fheirlf.vafgnapr.ragrefheirlqngn";a:2:{i:0;R:32621;i:1;R:9;}s:42:"1230:fheirlf-fheirlf.vafgnapr.vafgehpgvbaf";a:2:{i:0;R:32621;i:1;R:9;}s:40:"1230:fheirlf-fheirlf.vafgnapr.fheirlrqol";a:2:{i:0;R:32621;i:1;R:9;}s:38:"1230:fheirlf-fheirlf.vafgnapr.flfgrzvq";a:2:{i:0;R:32621;i:1;R:9;}s:40:"1230:fheirlf-fheirlf.vafgnaprvasbezngvba";a:2:{i:0;R:32621;i:1;R:9;}s:30:"1230:fheirlf-fheirlf.yvaxnqzva";a:2:{i:0;R:32621;i:1;R:9;}s:25:"1230:fheirlf-fheirlf.ybna";a:2:{i:0;R:32621;i:1;R:9;}s:30:"1230:fheirlf-fheirlf.ybna_glcr";a:2:{i:0;R:32621;i:1;R:9;}s:42:"1230:fheirlf-fheirlf.znvacntr_vafgehpgvbaf";a:2:{i:0;R:32621;i:1;R:9;}s:36:"1230:fheirlf-fheirlf.znantrdhrfgvbaf";a:2:{i:0;R:32621;i:1;R:9;}s:30:"1230:fheirlf-fheirlf.anzrsvryq";a:2:{i:0;R:32621;i:1;R:9;}s:42:"1230:fheirlf-fheirlf.arjdhrfgvbafzftcersvk";a:2:{i:0;R:32621;i:1;R:9;}s:42:"1230:fheirlf-fheirlf.arjdhrfgvbafzftfhssvk";a:2:{i:0;R:32621;i:1;R:9;}s:37:"1230:fheirlf-fheirlf.abdhrfgvbafnqqrq";a:2:{i:0;R:32621;i:1;R:9;}s:37:"1230:fheirlf-fheirlf.abfheirlfzrffntr";a:2:{i:0;R:32621;i:1;R:9;}s:34:"1230:fheirlf-fheirlf.abgnccyvpnoyr";a:2:{i:0;R:32621;i:1;R:9;}s:28:"1230:fheirlf-fheirlf.bssvpre";a:2:{i:0;R:32621;i:1;R:9;}s:38:"1230:fheirlf-fheirlf.cerivrjfheirlqngn";a:2:{i:0;R:32621;i:1;R:9;}s:51:"1230:fheirlf-fheirlf.cevagre.zhygvfryrpgqrfpevcgvba";a:2:{i:0;R:32621;i:1;R:9;}s:52:"1230:fheirlf-fheirlf.cevagre.fvatyrfryrpgqrfpevcgvba";a:2:{i:0;R:32621;i:1;R:9;}s:31:"1230:fheirlf-fheirlf.erzbiryvax";a:2:{i:0;R:32621;i:1;R:9;}s:27:"1230:fheirlf-fheirlf.erivrj";a:2:{i:0;R:32621;i:1;R:9;}s:39:"1230:fheirlf-fheirlf.erivrjvafgehpgvbaf";a:2:{i:0;R:32621;i:1;R:9;}s:28:"1230:fheirlf-fheirlf.fnivatf";a:2:{i:0;R:32621;i:1;R:9;}s:33:"1230:fheirlf-fheirlf.fnivatf_glcr";a:2:{i:0;R:32621;i:1;R:9;}s:37:"1230:fheirlf-fheirlf.fryrpg_dhrfgvbaf";a:2:{i:0;R:32621;i:1;R:9;}s:34:"1230:fheirlf-fheirlf.fryrpg_fheirl";a:2:{i:0;R:32621;i:1;R:9;}s:38:"1230:fheirlf-fheirlf.fheirlvasbezngvba";a:2:{i:0;R:32621;i:1;R:9;}s:35:"1230:fheirlf-fheirlf.fheirl_qrgnvyf";a:2:{i:0;R:32621;i:1;R:9;}s:32:"1230:fheirlf-fheirlf.fheirl_anzr";a:2:{i:0;R:32621;i:1;R:9;}s:47:"1230:fheirlf-fheirlf.ivrjdhrfgvbaf_vafgehpgvbaf";a:2:{i:0;R:32621;i:1;R:9;}s:43:"1230:fheirlf-fheirlf.ivrjdhrfgvbaf_ccv_abgr";a:2:{i:0;R:32621;i:1;R:9;}s:35:"1230:fheirlf-fheirlf.ivrjnyyfheirlf";a:2:{i:0;R:32621;i:1;R:9;}s:34:"1230:fheirlf-fheirlf.ivrjdhrfgvbaf";a:2:{i:0;R:32621;i:1;R:9;}s:38:"1230:fheirlf-fheirlf.ivrjfheirlqrgnvyf";a:2:{i:0;R:32621;i:1;R:9;}s:32:"1230:fheirlf-fheirlf.ivrjfheirlf";a:2:{i:0;R:32621;i:1;R:9;}s:41:"1230:fheirlf-reebef.onfrinyvqngbe.zvffvat";a:2:{i:0;R:32621;i:1;R:9;}s:45:"1230:fheirlf-reebef.qngrinyvqngbe.qngr_sbezng";a:2:{i:0;R:32621;i:1;R:9;}s:44:"1230:fheirlf-reebef.qngrinyvqngbe.qngrsbezng";a:2:{i:0;R:32621;i:1;R:9;}s:50:"1230:fheirlf-reebef.qngrinyvqngbe.vainyvqcrefbaary";a:2:{i:0;R:32621;i:1;R:9;}s:46:"1230:fheirlf-reebef.rahzinyvqngbe.vainyvq_rahz";a:2:{i:0;R:32621;i:1;R:9;}s:45:"1230:fheirlf-reebef.rahzinyvqngbe.vainyvqrahz";a:2:{i:0;R:32621;i:1;R:9;}s:46:"1230:fheirlf-reebef.znkyratguinyvqngbe.gbbybat";a:2:{i:0;R:32621;i:1;R:9;}s:49:"1230:fheirlf-reebef.abgahyyrzcglinyvqngbe.zvffvat";a:2:{i:0;R:32621;i:1;R:9;}s:55:"1230:fheirlf-reebef.abgahyyrzcglinyvqngbe.zvffvat_svryq";a:2:{i:0;R:32621;i:1;R:9;}s:50:"1230:fheirlf-reebef.ahzoreinyvqngbe.vainyvq_ahzore";a:2:{i:0;R:32621;i:1;R:9;}s:47:"1230:fheirlf-reebef.barbsinyvqngbe.abg_n_pubvpr";a:2:{i:0;R:32621;i:1;R:9;}s:43:"1230:fheirlf-reebef.fheirlinyvqngbe.zvffvat";a:2:{i:0;R:32621;i:1;R:9;}s:44:"1230:fheirlf-reebef.qngrfheirlrq.qngr_sbezng";a:2:{i:0;R:32621;i:1;R:9;}s:34:"1230:fheirlf-reebef.vainyvqbssvpre";a:2:{i:0;R:32621;i:1;R:9;}s:30:"1230:fheirlf-reebef.anzrrkvfgf";a:2:{i:0;R:32621;i:1;R:9;}s:26:"1230:fheirlf-reebef.cersvk";a:2:{i:0;R:32621;i:1;R:9;}s:28:"1230:fheirlf-reebef.ernqbayl";a:2:{i:0;R:32621;i:1;R:9;}s:26:"1230:fheirlf-reebef.fhssvk";a:2:{i:0;R:32621;i:1;R:9;}s:41:"1230:fheirlf-reebf.vainyvqahzorebspubvprf";a:2:{i:0;R:32621;i:1;R:9;}s:51:"1230:fheirlf-dhrfgvbaanver.rqvgnqqvgbanyvasbezngvba";a:2:{i:0;R:32621;i:1;R:9;}s:24:"1230:hv-pbairefvba_reebe";a:2:{i:0;s:12:"out-mifos-ui";i:1;R:9;}s:16:"1230:hv-pyvragvq";a:2:{i:0;R:32760;i:1;R:9;}s:14:"1230:hv-pyvrag";a:2:{i:0;R:32760;i:1;R:9;}s:13:"1230:hv-tebhc";a:2:{i:0;R:32760;i:1;R:9;}s:14:"1230:hv-pragre";a:2:{i:0;R:32760;i:1;R:9;}s:14:"1230:hv-bssvpr";a:2:{i:0;R:32760;i:1;R:9;}s:12:"1230:hv-ybna";a:2:{i:0;R:32760;i:1;R:9;}s:16:"1230:hv-vagrerfg";a:2:{i:0;R:32760;i:1;R:9;}s:71:"1230:hv-rkprrqvat_ahzore_bs_qvtvgf_nsgre_qrpvzny_frcnengbe_sbe_vagrerfg";a:2:{i:0;R:32760;i:1;R:9;}s:68:"1230:hv-rkprrqvat_ahzore_bs_qvtvgf_nsgre_qrpvzny_frcnengbe_sbe_zbarl";a:2:{i:0;R:32760;i:1;R:9;}s:72:"1230:hv-rkprrqvat_ahzore_bs_qvtvgf_orsber_qrpvzny_frcnengbe_sbe_vagrerfg";a:2:{i:0;R:32760;i:1;R:9;}s:69:"1230:hv-rkprrqvat_ahzore_bs_qvtvgf_orsber_qrpvzny_frcnengbe_sbe_zbarl";a:2:{i:0;R:32760;i:1;R:9;}s:83:"1230:hv-rkprrqvat_ahzore_bs_qvtvgf_orsber_qrpvzny_frcnengbe_sbe_pnfusybj_inyvqngvba";a:2:{i:0;R:32760;i:1;R:9;}s:82:"1230:hv-rkprrqvat_ahzore_bs_qvtvgf_nsgre_qrpvzny_frcnengbe_sbe_pnfusybj_inyvqngvba";a:2:{i:0;R:32760;i:1;R:9;}s:10:"1230:hv-vq";a:2:{i:0;R:32760;i:1;R:9;}s:29:"1230:hv-vagrerfg_bhg_bs_enatr";a:2:{i:0;R:32760;i:1;R:9;}s:40:"1230:hv-pnfu_sybj_guerfubyq_bhg_bs_enatr";a:2:{i:0;R:32760;i:1;R:9;}s:39:"1230:hv-vaqrogrqarff_engvb_bhg_bs_enatr";a:2:{i:0;R:32760;i:1;R:9;}s:39:"1230:hv-ercnlzrag_pncnpvgl_bhg_bs_enatr";a:2:{i:0;R:32760;i:1;R:9;}s:22:"1230:hv-abg_nyy_ahzore";a:2:{i:0;R:32760;i:1;R:9;}s:21:"1230:hv-ohggba.perngr";a:2:{i:0;R:32760;i:1;R:9;}s:21:"1230:hv-ohggba.qryrgr";a:2:{i:0;R:32760;i:1;R:9;}s:18:"1230:hv-ohggba.trg";a:2:{i:0;R:32760;i:1;R:9;}s:19:"1230:hv-ohggba.arkg";a:2:{i:0;R:32760;i:1;R:9;}s:22:"1230:hv-ohggba.cerivrj";a:2:{i:0;R:32760;i:1;R:9;}s:23:"1230:hv-ohggba.cerivbhf";a:2:{i:0;R:32760;i:1;R:9;}s:21:"1230:hv-ohggba.frnepu";a:2:{i:0;R:32760;i:1;R:9;}s:21:"1230:hv-ohggba.hcqngr";a:2:{i:0;R:32760;i:1;R:9;}s:14:"1230:hv-pnapry";a:2:{i:0;R:32760;i:1;R:9;}s:20:"1230:hv-pubbfrbssvpr";a:2:{i:0;R:32760;i:1;R:9;}s:29:"1230:hv-pbasvezoenapugenafsre";a:2:{i:0;R:32760;i:1;R:9;}s:28:"1230:hv-pbasveztebhcgenafsre";a:2:{i:0;R:32760;i:1;R:9;}s:29:"1230:hv-pbasvezcneraggenafsre";a:2:{i:0;R:32760;i:1;R:9;}s:16:"1230:hv-pbagvahr";a:2:{i:0;R:32760;i:1;R:9;}s:19:"1230:hv-rqvgzsvvasb";a:2:{i:0;R:32760;i:1;R:9;}s:24:"1230:hv-rqvgcrefbanyvasb";a:2:{i:0;R:32760;i:1;R:9;}s:19:"1230:hv-trgnyyshaqf";a:2:{i:0;R:32760;i:1;R:9;}s:18:"1230:hv-trgqrgnvyf";a:2:{i:0;R:32760;i:1;R:9;}s:19:"1230:hv-trgubzrcntr";a:2:{i:0;R:32760;i:1;R:9;}s:29:"1230:hv-trgvafgnyyzragqrgnvyf";a:2:{i:0;R:32760;i:1;R:9;}s:29:"1230:hv-trgvafgnyyzraguvfgbel";a:2:{i:0;R:32760;i:1;R:9;}s:25:"1230:hv-trgbssvprubzrcntr";a:2:{i:0;R:32760;i:1;R:9;}s:23:"1230:hv-trgceqbssrevatf";a:2:{i:0;R:32760;i:1;R:9;}s:21:"1230:hv-trgercbegcntr";a:2:{i:0;R:32760;i:1;R:9;}s:22:"1230:hv-uvrenepulpurpx";a:2:{i:0;R:32760;i:1;R:9;}s:12:"1230:hv-ybnq";a:2:{i:0;R:32760;i:1;R:9;}s:23:"1230:hv-ybnqnyyoenapurf";a:2:{i:0;R:32760;i:1;R:9;}s:26:"1230:hv-ybnqoenapugenafsre";a:2:{i:0;R:32760;i:1;R:9;}s:19:"1230:hv-ybnqpragref";a:2:{i:0;R:32760;i:1;R:9;}s:26:"1230:hv-ybnqpunatrcnffjbeq";a:2:{i:0;R:32760;i:1;R:9;}s:21:"1230:hv-ybnqphfgbzref";a:2:{i:0;R:32760;i:1;R:9;}s:25:"1230:hv-ybnqtebhcgenafsre";a:2:{i:0;R:32760;i:1;R:9;}s:26:"1230:hv-ybnquvfgbevpnyqngn";a:2:{i:0;R:32760;i:1;R:9;}s:24:"1230:hv-ybnqybnabssvpref";a:2:{i:0;R:32760;i:1;R:9;}s:19:"1230:hv-ybnqzrrgvat";a:2:{i:0;R:32760;i:1;R:9;}s:18:"1230:hv-ybnqcnerag";a:2:{i:0;R:32760;i:1;R:9;}s:26:"1230:hv-ybnqcneraggenafsre";a:2:{i:0;R:32760;i:1;R:9;}s:18:"1230:hv-ybnqfrnepu";a:2:{i:0;R:32760;i:1;R:9;}s:18:"1230:hv-ybnqfgnghf";a:2:{i:0;R:32760;i:1;R:9;}s:20:"1230:hv-ybnqgenafsre";a:2:{i:0;R:32760;i:1;R:9;}s:22:"1230:hv-ybnqhaybpxhfre";a:2:{i:0;R:32760;i:1;R:9;}s:15:"1230:hv-ybnqnyy";a:2:{i:0;R:32760;i:1;R:9;}s:13:"1230:hv-ybtva";a:2:{i:0;R:32760;i:1;R:9;}s:14:"1230:hv-ybtbhg";a:2:{i:0;R:32760;i:1;R:9;}s:14:"1230:hv-znantr";a:2:{i:0;R:32760;i:1;R:9;}s:15:"1230:hv-cerybnq";a:2:{i:0;R:32760;i:1;R:9;}s:19:"1230:hv-cerizsvvasb";a:2:{i:0;R:32760;i:1;R:9;}s:24:"1230:hv-cericrefbanyvasb";a:2:{i:0;R:32760;i:1;R:9;}s:22:"1230:hv-cerivrjzsvvasb";a:2:{i:0;R:32760;i:1;R:9;}s:27:"1230:hv-cerivrjcrefbanyvasb";a:2:{i:0;R:32760;i:1;R:9;}s:23:"1230:hv-ergevrircvpgher";a:2:{i:0;R:32760;i:1;R:9;}s:32:"1230:hv-ergevrircvpgherbacerivrj";a:2:{i:0;R:32760;i:1;R:9;}s:18:"1230:hv-frnepuarkg";a:2:{i:0;R:32760;i:1;R:9;}s:18:"1230:hv-frnepuceri";a:2:{i:0;R:32760;i:1;R:9;}s:14:"1230:hv-fryrpg";a:2:{i:0;R:32760;i:1;R:9;}s:35:"1230:hv-frgqrsnhygsbezrqolcrefbaary";a:2:{i:0;R:32760;i:1;R:9;}s:19:"1230:hv-fubjcvpgher";a:2:{i:0;R:32760;i:1;R:9;}s:25:"1230:hv-haybpxhfrenppbhag";a:2:{i:0;R:32760;i:1;R:9;}s:20:"1230:hv-hcqngroenapu";a:2:{i:0;R:32760;i:1;R:9;}s:21:"1230:hv-hcqngrzrrgvat";a:2:{i:0;R:32760;i:1;R:9;}s:17:"1230:hv-hcqngrzsv";a:2:{i:0;R:32760;i:1;R:9;}s:20:"1230:hv-hcqngrcnerag";a:2:{i:0;R:32760;i:1;R:9;}s:22:"1230:hv-hcqngrfrggvatf";a:2:{i:0;R:32760;i:1;R:9;}s:20:"1230:hv-hcqngrfgnghf";a:2:{i:0;R:32760;i:1;R:9;}s:16:"1230:hv-inyvqngr";a:2:{i:0;R:32760;i:1;R:9;}s:13:"1230:hv-jnvir";a:2:{i:0;R:32760;i:1;R:9;}s:16:"1230:hv-jevgrbss";a:2:{i:0;R:32760;i:1;R:9;}s:39:"1230:hvybna-phfgbzrefrnepu.cntrfhogvgyr";a:2:{i:0;s:16:"out-mifos-uiloan";i:1;R:9;}s:37:"1230:hvybna-phfgbzrefrnepu.frnepugrez";a:2:{i:0;R:32848;i:1;R:9;}s:39:"1230:hvybna-phfgbzrefrnepu.vafgehpgvbaf";a:2:{i:0;R:32848;i:1;R:9;}s:39:"1230:hvybna-fryrpgphfgbzre.vafgehpgvbaf";a:2:{i:0;R:32848;i:1;R:9;}s:57:"1230:hvybna-perngrybnanppbhag.phfgbzrefrnepu.cntrfhogvgyr";a:2:{i:0;R:32848;i:1;R:9;}s:57:"1230:hvybna-perngrybnanppbhag.phfgbzrefrnepu.vafgehpgvbaf";a:2:{i:0;R:32848;i:1;R:9;}s:56:"1230:hvybna-abgrzcgl.phfgbzrefrnepusbezorna.frnepufgevat";a:2:{i:0;R:32848;i:1;R:9;}s:54:"1230:hvybna-perngrybnanppbhag.sybjfgngr.fryrpgphfgbzre";a:2:{i:0;R:32848;i:1;R:9;}s:56:"1230:hvybna-perngrybnanppbhag.sybjfgngr.ragrenppbhagvasb";a:2:{i:0;R:32848;i:1;R:9;}s:58:"1230:hvybna-perngrybnanppbhag.sybjfgngr.erivrjvafgnyyzragf";a:2:{i:0;R:32848;i:1;R:9;}s:55:"1230:hvybna-perngrybnanppbhag.sybjfgngr.erivrjnaqfhozvg";a:2:{i:0;R:32848;i:1;R:9;}s:42:"1230:hvybna-perngrybnanppbhag.jvmneq.gvgyr";a:2:{i:0;R:32848;i:1;R:9;}s:56:"1230:hvybna-perngrybnanppbhag.fryrpgcebqhpg.cntrfhogvgyr";a:2:{i:0;R:32848;i:1;R:9;}s:56:"1230:hvybna-perngrybnanppbhag.fryrpgcebqhpg.vafgehpgvbaf";a:2:{i:0;R:32848;i:1;R:9;}s:61:"1230:hvybna-perngrybnanppbhag.erivrjvafgnyyzragf.cntrfhogvgyr";a:2:{i:0;R:32848;i:1;R:9;}s:61:"1230:hvybna-perngrybnanppbhag.erivrjvafgnyyzragf.vafgehpgvbaf";a:2:{i:0;R:32848;i:1;R:9;}s:50:"1230:hvybna-perngrybnanppbhag.cerivrj.cntrfhogvgyr";a:2:{i:0;R:32848;i:1;R:9;}s:50:"1230:hvybna-perngrybnanppbhag.cerivrj.vafgehpgvbaf";a:2:{i:0;R:32848;i:1;R:9;}s:50:"1230:hvybna-erqbybnanppbhag.jvmneq.uvtuyvtugrqabgr";a:2:{i:0;R:32848;i:1;R:9;}s:40:"1230:hvybna-erqbybnanppbhag.jvmneq.gvgyr";a:2:{i:0;R:32848;i:1;R:9;}s:42:"1230:hvybna-fryrpgcebqhpg.nppbhagbjareanzr";a:2:{i:0;R:32848;i:1;R:9;}s:44:"1230:hvybna-fryrpgcebqhpg.fryrpgcebqhpgynory";a:2:{i:0;R:32848;i:1;R:9;}s:51:"1230:hvybna-abgahyy.fryrpgcebqhpgsbezorna.cebqhpgvq";a:2:{i:0;R:32848;i:1;R:9;}s:68:"1230:hvybna-perngrybnanppbhag.ragrenppbhagvasb.cebqhpgfhzznel.urnqre";a:2:{i:0;R:32848;i:1;R:9;}s:90:"1230:hvybna-perngrybnanppbhag.ragrenppbhagvasb.nppbhagqrgnvy.tyvz.vaqvivqhnyqrgnvyf.urnqre";a:2:{i:0;R:32848;i:1;R:9;}s:67:"1230:hvybna-perngrybnanppbhag.ragrenppbhagvasb.nppbhagqrgnvy.urnqre";a:2:{i:0;R:32848;i:1;R:9;}s:65:"1230:hvybna-perngrybnanppbhag.ragrenppbhagvasb.qrsnhygsrrf.urnqre";a:2:{i:0;R:32848;i:1;R:9;}s:70:"1230:hvybna-perngrybnanppbhag.ragrenppbhagvasb.qrsnhygcranygvrf.urnqre";a:2:{i:0;R:32848;i:1;R:9;}s:68:"1230:hvybna-perngrybnanppbhag.ragrenppbhagvasb.nqqvgvbanysrrf.urnqre";a:2:{i:0;R:32848;i:1;R:9;}s:38:"1230:hvybna-cebqhpgfhzznel.qrfpevcgvba";a:2:{i:0;R:32848;i:1;R:9;}s:43:"1230:hvybna-cebqhpgfhzznel.vagrerfgengrglcr";a:2:{i:0;R:32848;i:1;R:9;}s:45:"1230:hvybna-cebqhpgfhzznel.serdbsvafgnyyzragf";a:2:{i:0;R:32848;i:1;R:9;}s:42:"1230:hvybna-cebqhpgfhzznel.tenprcrevbqglcr";a:2:{i:0;R:32848;i:1;R:9;}s:43:"1230:hvybna-cebqhpgfhzznel.tenprcrevbq.abar";a:2:{i:0;R:32848;i:1;R:9;}s:52:"1230:hvybna-cebqhpgfhzznel.tenprcrevbq.nyyercnlzragf";a:2:{i:0;R:32848;i:1;R:9;}s:52:"1230:hvybna-cebqhpgfhzznel.tenprcrevbq.cevapvcnybayl";a:2:{i:0;R:32848;i:1;R:9;}s:54:"1230:hvybna-cebqhpgfhzznel.inevnoyrvafgnyyzragfnyybjrq";a:2:{i:0;R:32848;i:1;R:9;}s:49:"1230:hvybna-cebqhpgfhzznel.svkrqercnlzragfpurqhyr";a:2:{i:0;R:32848;i:1;R:9;}s:53:"1230:hvybna-cebqhpgfhzznel.inevnorvafgnyyzragf.zvatnc";a:2:{i:0;R:32848;i:1;R:9;}s:53:"1230:hvybna-cebqhpgfhzznel.inevnorvafgnyyzragf.znktnc";a:2:{i:0;R:32848;i:1;R:9;}s:67:"1230:hvybna-cebqhpgfhzznel.inevnorvafgnyyzragf.zvavafgnyyzragnzbhag";a:2:{i:0;R:32848;i:1;R:9;}s:81:"1230:hvybna-cebqhpgfhzznel.inevnorvafgnyyzragf.zvavafgnyyzragnzbhag.abgnccyvpnoyr";a:2:{i:0;R:32848;i:1;R:9;}s:51:"1230:hvybna-cebqhpgfhzznel.inevnorvafgnyyzragf.qnlf";a:2:{i:0;R:32848;i:1;R:9;}s:75:"1230:hvybna-ybnanppbhagsbezorna.nqqvgvbanysrrf.inevnoyrvafgnyyzragf.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:72:"1230:hvybna-ybnanppbhagsbezorna.qrsnhygsrrf.inevnoyrvafgnyyzragf.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:36:"1230:hvybna-perngrybnanppbhag.nzbhag";a:2:{i:0;R:32848;i:1;R:9;}s:43:"1230:hvybna-perngrybnanppbhag.nyybjrqnzbhag";a:2:{i:0;R:32848;i:1;R:9;}s:42:"1230:hvybna-perngrybnanppbhag.vagrerfgengr";a:2:{i:0;R:32848;i:1;R:9;}s:49:"1230:hvybna-perngrybnanppbhag.nyybjrqvagrerfgengr";a:2:{i:0;R:32848;i:1;R:9;}s:50:"1230:hvybna-perngrybnanppbhag.ahzorebsvafgnyyzragf";a:2:{i:0;R:32848;i:1;R:9;}s:57:"1230:hvybna-perngrybnanppbhag.nyybjrqahzorebsvafgnyyzragf";a:2:{i:0;R:32848;i:1;R:9;}s:43:"1230:hvybna-perngrybnanppbhag.qvfohefnyqngr";a:2:{i:0;R:32848;i:1;R:9;}s:42:"1230:hvybna-perngrybnanppbhag.ercnlzragqnl";a:2:{i:0;R:32848;i:1;R:9;}s:43:"1230:hvybna-perngrybnanppbhag.tenprqhengvba";a:2:{i:0;R:32848;i:1;R:9;}s:56:"1230:hvybna-perngrybnanppbhag.nyybjrqtenprvavafgnyyzragf";a:2:{i:0;R:32848;i:1;R:9;}s:42:"1230:hvybna-perngrybnanppbhag.fbheprbsshaq";a:2:{i:0;R:32848;i:1;R:9;}s:43:"1230:hvybna-perngrybnanppbhag.checbfrbsybna";a:2:{i:0;R:32848;i:1;R:9;}s:44:"1230:hvybna-perngrybnanppbhag.pbyyngrenyglcr";a:2:{i:0;R:32848;i:1;R:9;}s:45:"1230:hvybna-perngrybnanppbhag.pbyyngrenyabgrf";a:2:{i:0;R:32848;i:1;R:9;}s:40:"1230:hvybna-perngrybnanppbhag.rkgreanyvq";a:2:{i:0;R:32848;i:1;R:9;}s:37:"1230:hvybna-perngrybnanppbhag.srrglcr";a:2:{i:0;R:32848;i:1;R:9;}s:39:"1230:hvybna-perngrybnanppbhag.srrnzbhag";a:2:{i:0;R:32848;i:1;R:9;}s:41:"1230:hvybna-perngrybnanppbhag.crevbqvpvgl";a:2:{i:0;R:32848;i:1;R:9;}s:39:"1230:hvybna-perngrybnanppbhag.serdhrapl";a:2:{i:0;R:32848;i:1;R:9;}s:37:"1230:hvybna-perngrybnanppbhag.sbezhyn";a:2:{i:0;R:32848;i:1;R:9;}s:35:"1230:hvybna-perngrybnanppbhag.jrrxf";a:2:{i:0;R:32848;i:1;R:9;}s:36:"1230:hvybna-perngrybnanppbhag.zbaguf";a:2:{i:0;R:32848;i:1;R:9;}s:49:"1230:hvybna-perngrybnanppbhag.crevbqvpvgl.bargvzr";a:2:{i:0;R:32848;i:1;R:9;}s:58:"1230:hvybna-perngrybnanppbhag.serdhrapl.gvzrbsqvfohefrzrag";a:2:{i:0;R:32848;i:1;R:9;}s:64:"1230:hvybna-perngrybnanppbhag.serdhrapl.gvzrbssvefgybnaercnlzrag";a:2:{i:0;R:32848;i:1;R:9;}s:47:"1230:hvybna-perngrybnanppbhag.serdhrapl.hcsebag";a:2:{i:0;R:32848;i:1;R:9;}s:46:"1230:hvybna-ybnanppbhagsbezorna.nzbhag.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:52:"1230:hvybna-ybnanppbhagsbezorna.vagrerfgengr.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:60:"1230:hvybna-ybnanppbhagsbezorna.ahzorebsvafgnyyzragf.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:53:"1230:hvybna-ybnanppbhagsbezorna.qvfohefnyqngr.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:56:"1230:hvybna-ybnanppbhagsbezorna.qvfohefnyqngr.qq.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:56:"1230:hvybna-ybnanppbhagsbezorna.qvfohefnyqngr.zz.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:58:"1230:hvybna-ybnanppbhagsbezorna.qvfohefnyqngr.llll.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:67:"1230:hvybna-qvohefrzragqngr.vainyvq.va.eryngvba.gb.zrrgvat.fpurqhyr";a:2:{i:0;R:32848;i:1;R:9;}s:44:"1230:hvybna-qvohefrzragqngr.snyyf.ba.ubyvqnl";a:2:{i:0;R:32848;i:1;R:9;}s:59:"1230:hvybna-qvohefrzragqngr.orsber.phfgbzre.npgvingvba.qngr";a:2:{i:0;R:32848;i:1;R:9;}s:52:"1230:hvybna-qvohefrzragqngr.orsber.cebqhpg.fgnegqngr";a:2:{i:0;R:32848;i:1;R:9;}s:56:"1230:hvybna-qvohefrzragqngr.pnaabg.or.orsber.gbqnlf.qngr";a:2:{i:0;R:32848;i:1;R:9;}s:46:"1230:hvybna-qvohefrzragqngr.orsber.gbqnlf.qngr";a:2:{i:0;R:32848;i:1;R:9;}s:55:"1230:hvybna-cnlzragqngr.orsber.qvfohefrzragqngr.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:54:"1230:hvybna-cnlzragqngr.orsber.ynfgcnlzragqngr.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:46:"1230:hvybna-cnlzragqngr.vf.shgher.qngr.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:42:"1230:hvybna-gbgnycnlzragf.rkprrqrq.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:53:"1230:hvybna-ybnanppbhagsbezorna.fbheprbsshaqf.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:53:"1230:hvybna-ybnanppbhagsbezorna.checbfrbsybna.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:50:"1230:hvybna-ybnanppbhagsbezorna.rkgreanyvq.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:57:"1230:hvybna-ybnanppbhagsbezorna.tyvz.pyvragnzbhag.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:58:"1230:hvybna-ybnanppbhagsbezorna.tyvz.checbfrbsybna.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:55:"1230:hvybna-ybnanppbhagsbezorna.tyvz.pyvrag.abgfryrpgrq";a:2:{i:0;R:32848;i:1;R:9;}s:53:"1230:hvybna-ybnanppbhagsbezorna.tyvz.abgrabhtupyvragf";a:2:{i:0;R:32848;i:1;R:9;}s:56:"1230:hvybna-ybnanppbhagsbezorna.tyvz.gbgnynzbhag.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:72:"1230:hvybna-ybnanppbhagsbezorna.ercnlzragqnl.zbaguyl.jrrxbszbagu.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:70:"1230:hvybna-ybnanppbhagsbezorna.ercnlzragqnl.zbaguyl.qnlbsjrrx.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:69:"1230:hvybna-ybnanppbhagsbezorna.ercnlzragqnl.jrrxyl.qnlbsjrrx.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:64:"1230:hvybna-ybnanppbhagsbezorna.ercnlzragqnl.erphefrirel.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:71:"1230:hvybna-ybnanppbhagsbezorna.ercnlzragqnl.zbaguyl.qnlbszbagu.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:76:"1230:hvybna-ybnanppbhagsbezorna.tenprcrevbqqhengvba.rzcglbevapbeerpg.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:59:"1230:hvybna-ybnanppbhagsbezorna.tenprcrevbqqhengvba.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:83:"1230:hvybna-ybnanppbhagsbezorna.tenprcrevbqqhengvbavaeryngvbagbvafgnyyzragf.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:53:"1230:hvybna-ybnanppbhagsbezorna.nqqvgvbanysrr.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:69:"1230:hvybna-ybnanppbhagsbezorna.qvtvgfnsgreqrpvznysbevagrerfg.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:70:"1230:hvybna-ybnanppbhagsbezorna.qvtvgforsberqrpvznysbevagrerfg.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:65:"1230:hvybna-ybnanppbhagsbezorna.nzbhag.qvtvgfnsgreqrpvzny.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:66:"1230:hvybna-ybnanppbhagsbezorna.nzbhag.qvtvgforsberqrpvzny.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:72:"1230:hvybna-ybnanppbhagsbezorna.pyvrag.nzbhag.qvtvgfnsgreqrpvzny.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:73:"1230:hvybna-ybnanppbhagsbezorna.pyvrag.nzbhag.qvtvgforsberqrpvzny.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:80:"1230:hvybna-perngrybnanppbhag.tyvz.vainyvq.yrff.guna.gjb.npgvir.pyvragf.va.tebhc";a:2:{i:0;R:32848;i:1;R:9;}s:88:"1230:hvybna-ybnanppbhagsbezorna.nqqvgvbanysrrf.nzbhagbeengr.qvtvgf.nsgre.qrpvzny.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:89:"1230:hvybna-ybnanppbhagsbezorna.nqqvgvbanysrrf.nzbhagbeengr.qvtvgf.orsber.qrpvzny.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:85:"1230:hvybna-ybnanppbhagsbezorna.qrsnhygsrrf.nzbhagbeengr.qvtvgf.nsgre.qrpvzny.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:86:"1230:hvybna-ybnanppbhagsbezorna.qrsnhygsrrf.nzbhagbeengr.qvtvgf.orsber.qrpvzny.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:46:"1230:hvybna-erivrjvafgnyyzragf.zbqr_bs_cnlzrag";a:2:{i:0;R:32848;i:1;R:9;}s:51:"1230:hvybna-erivrjvafgnyyzragf.zbqrbscnlzragurnqvat";a:2:{i:0;R:32848;i:1;R:9;}s:38:"1230:hvybna-erivrjvafgnyyzragf.urnqvat";a:2:{i:0;R:32848;i:1;R:9;}s:41:"1230:hvybna-erivrjvafgnyyzragf.ybnanzbhag";a:2:{i:0;R:32848;i:1;R:9;}s:46:"1230:hvybna-erivrjvafgnyyzragf.qvfohefzragqngr";a:2:{i:0;R:32848;i:1;R:9;}s:43:"1230:hvybna-erivrjvafgnyyzragf.gnoyrurnqvat";a:2:{i:0;R:32848;i:1;R:9;}s:49:"1230:hvybna-erivrjvafgnyyzragf.vafgnyyzragurnqvat";a:2:{i:0;R:32848;i:1;R:9;}s:45:"1230:hvybna-erivrjvafgnyyzragf.qhrqngrurnqvat";a:2:{i:0;R:32848;i:1;R:9;}s:55:"1230:hvybna-erivrjvafgnyyzragf.npghnycnlzragqngrurnqvat";a:2:{i:0;R:32848;i:1;R:9;}s:47:"1230:hvybna-erivrjvafgnyyzragf.cevapvcnyurnqvat";a:2:{i:0;R:32848;i:1;R:9;}s:46:"1230:hvybna-erivrjvafgnyyzragf.vagrerfgurnqvat";a:2:{i:0;R:32848;i:1;R:9;}s:42:"1230:hvybna-erivrjvafgnyyzragf.srrfurnqvat";a:2:{i:0;R:32848;i:1;R:9;}s:43:"1230:hvybna-erivrjvafgnyyzragf.gbgnyurnqvat";a:2:{i:0;R:32848;i:1;R:9;}s:47:"1230:hvybna-erivrjvafgnyyzragf.npghnynzbhagcnvq";a:2:{i:0;R:32848;i:1;R:9;}s:51:"1230:hvybna-erivrjvafgnyyzragf.erqb.qngrcnvqurnqvat";a:2:{i:0;R:32848;i:1;R:9;}s:59:"1230:hvybna-erivrjvafgnyyzragf.erqb.cnvqvafgnyyzragfurnqvat";a:2:{i:0;R:32848;i:1;R:9;}s:61:"1230:hvybna-erivrjvafgnyyzragf.erqb.shghervafgnyyzragfurnqvat";a:2:{i:0;R:32848;i:1;R:9;}s:57:"1230:hvybna-erivrjvafgnyyzragf.erqb.ehaavatonynaprurnqvat";a:2:{i:0;R:32848;i:1;R:9;}s:52:"1230:hvybna-erivrjvafgnyyzragf.erqb.cevapvcnyurnqvat";a:2:{i:0;R:32848;i:1;R:9;}s:51:"1230:hvybna-erivrjvafgnyyzragf.erqb.vagrerfgurnqvat";a:2:{i:0;R:32848;i:1;R:9;}s:47:"1230:hvybna-erivrjvafgnyyzragf.erqb.srrfurnqvat";a:2:{i:0;R:32848;i:1;R:9;}s:59:"1230:hvybna-erivrjvafgnyyzragf.erqb.gbgnyvafgnyyzragurnqvat";a:2:{i:0;R:32848;i:1;R:9;}s:54:"1230:hvybna-vafgnyyzrag.gbgny.nzbhag.oynax.naq.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:53:"1230:hvybna-vafgnyyzrag.nzbhag.cnvq.oynax.naq.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:49:"1230:hvybna-vafgnyyzrag.qhrqngr.oynax.naq.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:59:"1230:hvybna-vafgnyyzrag.npghnycnlzragqngr.oynax.naq.vainyvq";a:2:{i:0;R:32848;i:1;R:9;}s:49:"1230:hvybna-perngrybnanppbhag.cerivrj.ybnaurnqvat";a:2:{i:0;R:32848;i:1;R:9;}s:53:"1230:hvybna-perngrybnanppbhag.cerivrj.vafgnaprurnqvat";a:2:{i:0;R:32848;i:1;R:9;}s:59:"1230:hvybna-perngrybnanppbhag.cerivrj.punetrfnccyvrqurnqvat";a:2:{i:0;R:32848;i:1;R:9;}s:58:"1230:hvybna-perngrybnanppbhag.cerivrj.tyvz.pyvragvqurnqvat";a:2:{i:0;R:32848;i:1;R:9;}s:60:"1230:hvybna-perngrybnanppbhag.cerivrj.tyvz.pyvraganzrurnqvat";a:2:{i:0;R:32848;i:1;R:9;}s:62:"1230:hvybna-perngrybnanppbhag.cerivrj.tyvz.tbireazragvqurnqvat";a:2:{i:0;R:32848;i:1;R:9;}s:60:"1230:hvybna-perngrybnanppbhag.cerivrj.tyvz.ybnanzbhagurnqvat";a:2:{i:0;R:32848;i:1;R:9;}s:61:"1230:hvybna-perngrybnanppbhag.cerivrj.tyvz.ybnachecbfrurnqvat";a:2:{i:0;R:32848;i:1;R:9;}s:55:"1230:hvybna-perngrybnanppbhag.nppbhagperngrq.cyrnfrabgr";a:2:{i:0;R:32848;i:1;R:9;}s:59:"1230:hvybna-perngrybnanppbhag.nppbhagperngrq.nppbhagqrgnvyf";a:2:{i:0;R:32848;i:1;R:9;}s:62:"1230:hvybna-perngrybnanppbhag.nppbhagperngrq.frnepuvafgehpgvba";a:2:{i:0;R:32848;i:1;R:9;}s:59:"1230:hvybna-perngrybnanppbhag.nppbhagperngrq.fhpprffzrffntr";a:2:{i:0;R:32848;i:1;R:9;}s:54:"1230:hvybna-perngrybnanppbhag.nppbhagperngrq.arkgfgrcf";a:2:{i:0;R:32848;i:1;R:9;}s:70:"1230:hvybna-perngrybnanppbhag.nppbhagperngrq.npgvba.ivrjfnivatfnppbhag";a:2:{i:0;R:32848;i:1;R:9;}s:73:"1230:hvybna-perngrybnanppbhag.nppbhagperngrq.npgvba.bcraarjfnivatfnppbhag";a:2:{i:0;R:32848;i:1;R:9;}s:70:"1230:hvybna-perngrybnanppbhag.nppbhagperngrq.npgvba.bcraarjybnanppbhag";a:2:{i:0;R:32848;i:1;R:9;}s:38:"1230:hvybna-erdhverqsvryqfvafgehpgvbaf";a:2:{i:0;R:32848;i:1;R:9;}s:24:"1230:hvybna-fryrpgcebzcg";a:2:{i:0;R:32848;i:1;R:9;}s:24:"1230:hvybna-qngrsvryq.qq";a:2:{i:0;R:32848;i:1;R:9;}s:24:"1230:hvybna-qngrsvryq.zz";a:2:{i:0;R:32848;i:1;R:9;}s:26:"1230:hvybna-qngrsvryq.llll";a:2:{i:0;R:32848;i:1;R:9;}s:60:"1230:hvfnovatf-perngrfnivatfnppbhag.sybjfgngr.fryrpgphfgbzre";a:2:{i:0;s:19:"out-mifos-uisavings";i:1;R:9;}s:62:"1230:hvfnovatf-perngrfnivatfnppbhag.sybjfgngr.ragrenppbhagvasb";a:2:{i:0;R:33012;i:1;R:9;}s:61:"1230:hvfnovatf-perngrfnivatfnppbhag.sybjfgngr.erivrjnaqfhozvg";a:2:{i:0;R:33012;i:1;R:9;}s:62:"1230:hvfnovatf-perngrfnivatfnppbhag.fryrpgcebqhpg.fryrpgcebzcg";a:2:{i:0;R:33012;i:1;R:9;}s:60:"1230:hvfnovatf-perngrfnivatfnppbhag.phfgbzrefrnepu.cntrgvgyr";a:2:{i:0;R:33012;i:1;R:9;}s:60:"1230:hvfnovatf-perngrfnivatfnppbhag.fryrpgphfgbzre.cntrgvgyr";a:2:{i:0;R:33012;i:1;R:9;}s:63:"1230:hvfnovatf-perngrfnivatfnppbhag.fryrpgphfgbzre.cntrfhogvgyr";a:2:{i:0;R:33012;i:1;R:9;}s:61:"1230:hvfnovatf-perngrfnivatfnppbhag.fryrpgphfgbzre.frnepugrez";a:2:{i:0;R:33012;i:1;R:9;}s:63:"1230:hvfnovatf-perngrfnivatfnppbhag.fryrpgphfgbzre.vafgehpgvbaf";a:2:{i:0;R:33012;i:1;R:9;}s:69:"1230:hvfnovatf-perngrfnivatfnppbhag.fryrpgphfgbzre.frnepuyvzvgernpurq";a:2:{i:0;R:33012;i:1;R:9;}s:59:"1230:hvfnovatf-perngrfnivatfnppbhag.fryrpgcebqhpg.cntrgvgyr";a:2:{i:0;R:33012;i:1;R:9;}s:62:"1230:hvfnovatf-perngrfnivatfnppbhag.fryrpgcebqhpg.cntrfhogvgyr";a:2:{i:0;R:33012;i:1;R:9;}s:62:"1230:hvfnovatf-perngrfnivatfnppbhag.fryrpgcebqhpg.vafgehpgvbaf";a:2:{i:0;R:33012;i:1;R:9;}s:70:"1230:hvfnovatf-perngrfnivatfnppbhag.fryrpgcebqhpg.fryrpgfnivatfcebqhpg";a:2:{i:0;R:33012;i:1;R:9;}s:76:"1230:hvfnovatf-perngrfnivatfnppbhag.fryrpgcebqhpg.erdhverqsvryqfvafgehpgvbaf";a:2:{i:0;R:33012;i:1;R:9;}s:66:"1230:hvfnovatf-perngrfnivatfnppbhag.fryrpgcebqhpg.nppbhagbjareanzr";a:2:{i:0;R:33012;i:1;R:9;}s:62:"1230:hvfnovatf-perngrfnivatfnppbhag.ragrenppbhagvasb.cntrgvgyr";a:2:{i:0;R:33012;i:1;R:9;}s:65:"1230:hvfnovatf-perngrfnivatfnppbhag.ragrenppbhagvasb.cntrfhogvgyr";a:2:{i:0;R:33012;i:1;R:9;}s:65:"1230:hvfnovatf-perngrfnivatfnppbhag.ragrenppbhagvasb.vafgehpgvbaf";a:2:{i:0;R:33012;i:1;R:9;}s:79:"1230:hvfnovatf-perngrfnivatfnppbhag.ragrenppbhagvasb.erdhverqsvryqfvafgehpgvbaf";a:2:{i:0;R:33012;i:1;R:9;}s:69:"1230:hvfnovatf-perngrfnivatfnppbhag.ragrenppbhagvasb.nppbhagbjareanzr";a:2:{i:0;R:33012;i:1;R:9;}s:73:"1230:hvfnovatf-perngrfnivatfnppbhag.ragrenppbhagvasb.fryrpgfnivatfcebqhpg";a:2:{i:0;R:33012;i:1;R:9;}s:74:"1230:hvfnovatf-perngrfnivatfnppbhag.ragrenppbhagvasb.cebqhpgfhzznel.urnqre";a:2:{i:0;R:33012;i:1;R:9;}s:79:"1230:hvfnovatf-perngrfnivatfnppbhag.ragrenppbhagvasb.fnivatnppbhagqrgnvy.urnqre";a:2:{i:0;R:33012;i:1;R:9;}s:96:"1230:hvfnovatf-perngrfnivatfnppbhag.ragrenppbhagvasb.fnivatnppbhagqrgnvy.qrcbfvgnzbhag.znaqngbel";a:2:{i:0;R:33012;i:1;R:9;}s:96:"1230:hvfnovatf-perngrfnivatfnppbhag.ragrenppbhagvasb.fnivatnppbhagqrgnvy.qrcbfvgnzbhag.ibyhagnel";a:2:{i:0;R:33012;i:1;R:9;}s:53:"1230:hvfnovatf-perngrfnivatfnppbhag.cerivrj.cntrgvgyr";a:2:{i:0;R:33012;i:1;R:9;}s:56:"1230:hvfnovatf-perngrfnivatfnppbhag.cerivrj.cntrfhogvgyr";a:2:{i:0;R:33012;i:1;R:9;}s:56:"1230:hvfnovatf-perngrfnivatfnppbhag.cerivrj.vafgehpgvbaf";a:2:{i:0;R:33012;i:1;R:9;}s:70:"1230:hvfnovatf-perngrfnivatfnppbhag.cerivrj.erdhverqsvryqfvafgehpgvbaf";a:2:{i:0;R:33012;i:1;R:9;}s:60:"1230:hvfnovatf-perngrfnivatfnppbhag.cerivrj.nppbhagbjareanzr";a:2:{i:0;R:33012;i:1;R:9;}s:63:"1230:hvfnovatf-perngrfnivatfnppbhag.cerivrj.fnivatfvafgnapranzr";a:2:{i:0;R:33012;i:1;R:9;}s:56:"1230:hvfnovatf-perngrfnivatfnppbhag.cerivrj.vafgnaprvasb";a:2:{i:0;R:33012;i:1;R:9;}s:65:"1230:hvfnovatf-perngrfnivatfnppbhag.cerivrj.cebqhpgfhzznel.urnqre";a:2:{i:0;R:33012;i:1;R:9;}s:62:"1230:hvfnovatf-perngrfnivatfnppbhag.cebqhpgfhzznel.qrfpevcgvba";a:2:{i:0;R:33012;i:1;R:9;}s:65:"1230:hvfnovatf-perngrfnivatfnppbhag.cebqhpgfhzznel.glcrbsqrcbfvgf";a:2:{i:0;R:33012;i:1;R:9;}s:70:"1230:hvfnovatf-perngrfnivatfnppbhag.cebqhpgfhzznel.znkjvguqenjnynzbhag";a:2:{i:0;R:33012;i:1;R:9;}s:80:"1230:hvfnovatf-perngrfnivatfnppbhag.cebqhpgfhzznel.onynaprsbevagrerfgpnyphyngvba";a:2:{i:0;R:33012;i:1;R:9;}s:79:"1230:hvfnovatf-perngrfnivatfnppbhag.cebqhpgfhzznel.crevbqsbevagrerfgpnyphyngvba";a:2:{i:0;R:33012;i:1;R:9;}s:75:"1230:hvfnovatf-perngrfnivatfnppbhag.cebqhpgfhzznel.vagrerfgcbfgvatserdhrapl";a:2:{i:0;R:33012;i:1;R:9;}s:83:"1230:hvfnovatf-perngrfnivatfnppbhag.cebqhpgfhzznel.zvaonynaprsbevagrerfgpnyphyngvba";a:2:{i:0;R:33012;i:1;R:9;}s:63:"1230:hvfnovatf-perngrfnivatfnppbhag.cebqhpgfhzznel.vagrerfgengr";a:2:{i:0;R:33012;i:1;R:9;}s:70:"1230:hvfnovatf-perngrfnivatfnppbhag.cerivrj.fnivatnppbhagqrgnvy.urnqre";a:2:{i:0;R:33012;i:1;R:9;}s:87:"1230:hvfnovatf-perngrfnivatfnppbhag.cerivrj.fnivatnppbhagqrgnvy.qrcbfvgnzbhag.znaqngbel";a:2:{i:0;R:33012;i:1;R:9;}s:87:"1230:hvfnovatf-perngrfnivatfnppbhag.cerivrj.fnivatnppbhagqrgnvy.qrcbfvgnzbhag.ibyhagnel";a:2:{i:0;R:33012;i:1;R:9;}s:68:"1230:hvfnovatf-perngrfnivatfnppbhag.cerivrj.rqvgnppbhagqrgnvyfohggba";a:2:{i:0;R:33012;i:1;R:9;}s:67:"1230:hvfnovatf-perngrfnivatfnppbhag.cerivrj.rqvgdhrfgvbatebhcohggba";a:2:{i:0;R:33012;i:1;R:9;}s:61:"1230:hvfnovatf-perngrfnivatfnppbhag.nppbhagperngrq.cyrnfrabgr";a:2:{i:0;R:33012;i:1;R:9;}s:65:"1230:hvfnovatf-perngrfnivatfnppbhag.nppbhagperngrq.nppbhagqrgnvyf";a:2:{i:0;R:33012;i:1;R:9;}s:68:"1230:hvfnovatf-perngrfnivatfnppbhag.nppbhagperngrq.frnepuvafgehpgvba";a:2:{i:0;R:33012;i:1;R:9;}s:65:"1230:hvfnovatf-perngrfnivatfnppbhag.nppbhagperngrq.fhpprffzrffntr";a:2:{i:0;R:33012;i:1;R:9;}s:60:"1230:hvfnovatf-perngrfnivatfnppbhag.nppbhagperngrq.arkgfgrcf";a:2:{i:0;R:33012;i:1;R:9;}s:76:"1230:hvfnovatf-perngrfnivatfnppbhag.nppbhagperngrq.npgvba.ivrjfnivatfnppbhag";a:2:{i:0;R:33012;i:1;R:9;}s:79:"1230:hvfnovatf-perngrfnivatfnppbhag.nppbhagperngrq.npgvba.bcraarjfnivatfnppbhag";a:2:{i:0;R:33012;i:1;R:9;}s:76:"1230:hvfnovatf-perngrfnivatfnppbhag.nppbhagperngrq.npgvba.bcraarjybnanppbhag";a:2:{i:0;R:33012;i:1;R:9;}s:56:"1230:hvfnovatf-perngrfnivatfnppbhag.erpheeraprglcr.qnvyl";a:2:{i:0;R:33012;i:1;R:9;}s:57:"1230:hvfnovatf-perngrfnivatfnppbhag.erpheeraprglcr.jrrxyl";a:2:{i:0;R:33012;i:1;R:9;}s:58:"1230:hvfnovatf-perngrfnivatfnppbhag.erpheeraprglcr.zbaguyl";a:2:{i:0;R:33012;i:1;R:9;}s:59:"1230:hvfnovatf-perngrfnivatfnppbhag.erpheeraprserdhrapl.qnl";a:2:{i:0;R:33012;i:1;R:9;}s:61:"1230:hvfnovatf-perngrfnivatfnppbhag.erpheeraprserdhrapl.zbagu";a:2:{i:0;R:33012;i:1;R:9;}s:57:"1230:hvfnovatf-perngrfnivatfnppbhag.fnivatfglcr.znaqngbel";a:2:{i:0;R:33012;i:1;R:9;}s:57:"1230:hvfnovatf-perngrfnivatfnppbhag.fnivatfglcr.ibyhagnel";a:2:{i:0;R:33012;i:1;R:9;}s:65:"1230:hvfnovatf-abgrzcgl.perngrfnivatfnppbhagsbezorna.frnepufgevat";a:2:{i:0;R:33012;i:1;R:9;}s:61:"1230:hvfnovatf-abgahyy.perngrfnivatfnppbhagsbezorna.cebqhpgvq";a:2:{i:0;R:33012;i:1;R:9;}s:65:"1230:hvfnovatf-abgahyy.perngrfnivatfnppbhagsbezorna.qrcbfvgnzbhag";a:2:{i:0;R:33012;i:1;R:9;}s:68:"1230:hvfnovatf-qrpvznyzva.perngrfnivatfnppbhagsbezorna.qrcbfvgnzbhag";a:2:{i:0;R:33012;i:1;R:9;}s:74:"1230:hvfnovatf-cnggrea.perngrfnivatfnppbhagsbezorna.znaqngbelqrcbfvgnzbhag";a:2:{i:0;R:33012;i:1;R:9;}s:79:"1230:hvfnovatf-qvtvgforsber.perngrfnivatfnppbhagsbezorna.znaqngbelqrcbfvgnzbhag";a:2:{i:0;R:33012;i:1;R:9;}s:78:"1230:hvfnovatf-qvtvgfnsgre.perngrfnivatfnppbhagsbezorna.znaqngbelqrcbfvgnzbhag";a:2:{i:0;R:33012;i:1;R:9;}s:74:"1230:hvfnovatf-cnggrea.perngrfnivatfnppbhagsbezorna.ibyhagnelqrcbfvgnzbhag";a:2:{i:0;R:33012;i:1;R:9;}s:52:"1230:hvfnovatf-sgy.znpeb.ybbxhc.erpheeraprglcr.qnvyl";a:2:{i:0;R:33012;i:1;R:9;}s:53:"1230:hvfnovatf-sgy.znpeb.ybbxhc.erpheeraprglcr.jrrxyl";a:2:{i:0;R:33012;i:1;R:9;}s:54:"1230:hvfnovatf-sgy.znpeb.ybbxhc.erpheeraprglcr.zbaguyl";a:2:{i:0;R:33012;i:1;R:9;}s:56:"1230:hvfnovatf-sgy.znpeb.ybbxhc.erpheeraprglcr.haqrsvarq";a:2:{i:0;R:33012;i:1;R:9;}s:55:"1230:hvfnovatf-sgy.znpeb.ybbxhc.erpheeraprserdhrapl.qnl";a:2:{i:0;R:33012;i:1;R:9;}s:57:"1230:hvfnovatf-sgy.znpeb.ybbxhc.erpheeraprserdhrapl.zbagu";a:2:{i:0;R:33012;i:1;R:9;}s:61:"1230:hvfnovatf-sgy.znpeb.ybbxhc.erpheeraprserdhrapl.haqrsvarq";a:2:{i:0;R:33012;i:1;R:9;}s:53:"1230:hvfnovatf-sgy.znpeb.ybbxhc.fnivatfglcr.znaqngbel";a:2:{i:0;R:33012;i:1;R:9;}s:53:"1230:hvfnovatf-sgy.znpeb.ybbxhc.fnivatfglcr.ibyhagnel";a:2:{i:0;R:33012;i:1;R:9;}s:53:"1230:hvfnovatf-sgy.znpeb.ybbxhc.fnivatfglcr.haqrsvarq";a:2:{i:0;R:33012;i:1;R:9;}s:42:"1230:hvjvqtrg-wdhrel.qngngnoyrf.cebprffvat";a:2:{i:0;s:18:"out-mifos-uiwidget";i:1;R:9;}s:38:"1230:hvjvqtrg-wdhrel.qngngnoyrf.svygre";a:2:{i:0;R:33093;i:1;R:9;}s:49:"1230:hvjvqtrg-wdhrel.qngngnoyrf.vasb.uvgfsvygrerq";a:2:{i:0;R:33093;i:1;R:9;}s:45:"1230:hvjvqtrg-wdhrel.qngngnoyrf.vasb.jvguuvgf";a:2:{i:0;R:33093;i:1;R:9;}s:43:"1230:hvjvqtrg-wdhrel.qngngnoyrf.vasb.abuvgf";a:2:{i:0;R:33093;i:1;R:9;}s:38:"1230:hvjvqtrg-wdhrel.qngngnoyrf.abuvgf";a:2:{i:0;R:33093;i:1;R:9;}s:51:"1230:hvjvqtrg-wdhrel.qngngnoyrf.uvgfcrecntrfryrpgbe";a:2:{i:0;R:33093;i:1;R:9;}s:45:"1230:hvjvqtrg-jvqtrg.sbez.ohggbaynory.cerivrj";a:2:{i:0;R:33093;i:1;R:9;}s:46:"1230:hvjvqtrg-jvqtrg.sbez.ohggbaynory.pbagvahr";a:2:{i:0;R:33093;i:1;R:9;}s:44:"1230:hvjvqtrg-jvqtrg.sbez.ohggbaynory.pnapry";a:2:{i:0;R:33093;i:1;R:9;}s:42:"1230:hvjvqtrg-jvqtrg.sbez.ohggbaynory.fnir";a:2:{i:0;R:33093;i:1;R:9;}s:44:"1230:hvjvqtrg-jvqtrg.sbez.ohggbaynory.fhozvg";a:2:{i:0;R:33093;i:1;R:9;}s:44:"1230:hvjvqtrg-jvqtrg.sbez.ohggbaynory.frnepu";a:2:{i:0;R:33093;i:1;R:9;}s:50:"1230:hvjvqtrg-jvqtrg.sbez.ohggbaynory.fnirsbeyngre";a:2:{i:0;R:33093;i:1;R:9;}s:53:"1230:hvjvqtrg-jvqtrg.sbez.ohggbaynory.fnirsbenccebiny";a:2:{i:0;R:33093;i:1;R:9;}s:45:"1230:hvjvqtrg-jvqtrg.sbez.ohggbaynory.nccebir";a:2:{i:0;R:33093;i:1;R:9;}s:53:"1230:hvjvqtrg-jvqtrg.sbez.ohggbaynory.rqvgnppbhagvasb";a:2:{i:0;R:33093;i:1;R:9;}s:58:"1230:hvjvqtrg-jvqtrg.sbez.ohggbaynory.rqvgybnafpurqhyrvasb";a:2:{i:0;R:33093;i:1;R:9;}s:54:"1230:hvjvqtrg-jvqtrg.sbez.ohggbaynory.rqvgpnfusybjvasb";a:2:{i:0;R:33093;i:1;R:9;}s:59:"1230:hvjvqtrg-jvqtrg.sbez.ohggbaynory.rqvgdhrfgvbatebhcvasb";a:2:{i:0;R:33093;i:1;R:9;}s:46:"1230:hvjvqtrg-jvqtrg.sbez.ohggbaynory.inyvqngr";a:2:{i:0;R:33093;i:1;R:9;}s:41:"1230:hvjvqtrg-jvqtrg.sbez.ohggbaynory.nqq";a:2:{i:0;R:33093;i:1;R:9;}s:42:"1230:hvjvqtrg-jvqtrg.sbez.ohggbaynory.qbar";a:2:{i:0;R:33093;i:1;R:9;}s:42:"1230:hvjvqtrg-jvqtrg.sbez.ohggbaynory.rqvg";a:2:{i:0;R:33093;i:1;R:9;}s:44:"1230:hvjvqtrg-jvqtrg.sbez.ohggbaynory.erzbir";a:2:{i:0;R:33093;i:1;R:9;}s:28:"1230:ibf-ibf.nppbhagvatehyrf";a:2:{i:0;s:13:"out-mifos-vos";i:1;R:9;}s:35:"1230:ibf-ibf.nyybjpnyqrssbearkglrne";a:2:{i:0;R:33119;i:1;R:9;}s:34:"1230:ibf-ibf.onpxqngrqgenafnpgvbaf";a:2:{i:0;R:33119;i:1;R:9;}s:34:"1230:ibf-ibf.pragreuvrenepulrkvfgf";a:2:{i:0;R:33119;i:1;R:9;}s:31:"1230:ibf-ibf.pyvragcraqvatfgngr";a:2:{i:0;R:33119;i:1;R:9;}s:24:"1230:ibf-ibf.pyvragehyrf";a:2:{i:0;R:33119;i:1;R:9;}s:33:"1230:ibf-ibf.pyvragfbhgfvqrtebhcf";a:2:{i:0;R:33119;i:1;R:9;}s:39:"1230:ibf-ibf.pbyyrpgvbafurrgnqinaprqnlf";a:2:{i:0;R:33119;i:1;R:9;}s:20:"1230:ibf-ibf.pbhagel";a:2:{i:0;R:33119;i:1;R:9;}s:23:"1230:ibf-ibf.pheerapvrf";a:2:{i:0;R:33119;i:1;R:9;}s:21:"1230:ibf-ibf.pheerapl";a:2:{i:0;R:33119;i:1;R:9;}s:30:"1230:ibf-ibf.qnlforsberlrneraq";a:2:{i:0;R:33119;i:1;R:9;}s:31:"1230:ibf-ibf.qvtvgfnsgreqrpvzny";a:2:{i:0;R:33119;i:1;R:9;}s:32:"1230:ibf-ibf.qvtvgforsberqrpvzny";a:2:{i:0;R:33119;i:1;R:9;}s:23:"1230:ibf-ibf.svfpnylrne";a:2:{i:0;R:33119;i:1;R:9;}s:17:"1230:ibf-ibf.tyvz";a:2:{i:0;R:33119;i:1;R:9;}s:30:"1230:ibf-ibf.tebhccraqvatfgngr";a:2:{i:0;R:33119;i:1;R:9;}s:27:"1230:ibf-ibf.ubyvqnlzrrgvat";a:2:{i:0;R:33119;i:1;R:9;}s:34:"1230:ibf-ibf.vagqvtvgfnsgreqrpvzny";a:2:{i:0;R:33119;i:1;R:9;}s:35:"1230:ibf-ibf.vagqvtvgforsberqrpvzny";a:2:{i:0;R:33119;i:1;R:9;}s:25:"1230:ibf-ibf.vagrerfgqnlf";a:2:{i:0;R:33119;i:1;R:9;}s:30:"1230:ibf-ibf.vfntrpurpxranoyrq";a:2:{i:0;R:33119;i:1;R:9;}s:36:"1230:ibf-ibf.vfsnzvylqrgnvyferdhverq";a:2:{i:0;R:33119;i:1;R:9;}s:33:"1230:ibf-ibf.pheeraplebhaqvatzbqr";a:2:{i:0;R:33119;i:1;R:9;}s:32:"1230:ibf-ibf.vavgvnyebhaqvatzbqr";a:2:{i:0;R:33119;i:1;R:9;}s:30:"1230:ibf-ibf.svanyebhaqvatzbqr";a:2:{i:0;R:33119;i:1;R:9;}s:34:"1230:ibf-ibf.svanyebhaqbsszhygvcyr";a:2:{i:0;R:33119;i:1;R:9;}s:36:"1230:ibf-ibf.vavgvnyebhaqbsszhygvcyr";a:2:{i:0;R:33119;i:1;R:9;}s:27:"1230:ibf-ibf.ynoryyvaxnqzva";a:2:{i:0;R:33119;i:1;R:9;}s:21:"1230:ibf-ibf.ynathntr";a:2:{i:0;R:33119;i:1;R:9;}s:31:"1230:ibf-ibf.ybnaqvfohefrqfgngr";a:2:{i:0;R:33119;i:1;R:9;}s:29:"1230:ibf-ibf.ybnacraqvatfgngr";a:2:{i:0;R:33119;i:1;R:9;}s:27:"1230:ibf-ibf.ybnafsbetebhcf";a:2:{i:0;R:33119;i:1;R:9;}s:19:"1230:ibf-ibf.ybpnyr";a:2:{i:0;R:33119;i:1;R:9;}s:17:"1230:ibf-ibf.yfvz";a:2:{i:0;R:33119;i:1;R:9;}s:24:"1230:ibf-ibf.znkvagrerfg";a:2:{i:0;R:33119;i:1;R:9;}s:23:"1230:ibf-ibf.znkvzhzntr";a:2:{i:0;R:33119;i:1;R:9;}s:41:"1230:ibf-ibf.znkvzhzahzorebssnzvylzrzoref";a:2:{i:0;R:33119;i:1;R:9;}s:23:"1230:ibf-ibf.zvavzhzntr";a:2:{i:0;R:33119;i:1;R:9;}s:24:"1230:ibf-ibf.zvavagrerfg";a:2:{i:0;R:33119;i:1;R:9;}s:20:"1230:ibf-ibf.zvahgrf";a:2:{i:0;R:33119;i:1;R:9;}s:26:"1230:ibf-ibf.zvfpryynarbhf";a:2:{i:0;R:33119;i:1;R:9;}s:25:"1230:ibf-ibf.anzrfrdhrapr";a:2:{i:0;R:33119;i:1;R:9;}s:20:"1230:ibf-ibf.bssqnlf";a:2:{i:0;R:33119;i:1;R:9;}s:26:"1230:ibf-ibf.bcgvbanyfgngr";a:2:{i:0;R:33119;i:1;R:9;}s:35:"1230:ibf-ibf.betnavmngvbanyfrggvatf";a:2:{i:0;R:33119;i:1;R:9;}s:24:"1230:ibf-ibf.cebprffsybj";a:2:{i:0;R:33119;i:1;R:9;}s:32:"1230:ibf-ibf.fnivatfcraqvatfgngr";a:2:{i:0;R:33119;i:1;R:9;}s:27:"1230:ibf-ibf.frffvbagvzrbhg";a:2:{i:0;R:33119;i:1;R:9;}s:24:"1230:ibf-ibf.fgnegbsjrrx";a:2:{i:0;R:33119;i:1;R:9;}s:21:"1230:ibf-ibf.jrrxqnlf";a:2:{i:0;R:33119;i:1;R:9;}s:24:"1230:ibf-ibf.jbexvatqnlf";a:2:{i:0;R:33119;i:1;R:9;}s:22:"1220:bxnjvk-qbp.gvgyr0";a:2:{i:0;s:14:"out-okawix-doc";i:1;s:16:"out-okawix-0-all";}s:21:"1220:bxnjvk-qbp.vgrz0";a:2:{i:0;R:33172;i:1;R:33173;}s:22:"1220:bxnjvk-qbp.gvgyr1";a:2:{i:0;R:33172;i:1;R:33173;}s:21:"1220:bxnjvk-qbp.vgrz1";a:2:{i:0;R:33172;i:1;R:33173;}s:22:"1220:bxnjvk-qbp.gvgyr2";a:2:{i:0;R:33172;i:1;R:33173;}s:21:"1220:bxnjvk-qbp.vgrz2";a:2:{i:0;R:33172;i:1;R:33173;}s:22:"1220:bxnjvk-qbp.gvgyr3";a:2:{i:0;R:33172;i:1;R:33173;}s:21:"1220:bxnjvk-qbp.vgrz3";a:2:{i:0;R:33172;i:1;R:33173;}s:22:"1220:bxnjvk-qbp.gvgyr4";a:2:{i:0;R:33172;i:1;R:33173;}s:21:"1220:bxnjvk-qbp.vgrz4";a:2:{i:0;R:33172;i:1;R:33173;}s:22:"1220:bxnjvk-qbp.gvgyr5";a:2:{i:0;R:33172;i:1;R:33173;}s:21:"1220:bxnjvk-qbp.vgrz5";a:2:{i:0;R:33172;i:1;R:33173;}s:22:"1220:bxnjvk-qbp.gvgyr6";a:2:{i:0;R:33172;i:1;R:33173;}s:21:"1220:bxnjvk-qbp.vgrz6";a:2:{i:0;R:33172;i:1;R:33173;}s:22:"1220:bxnjvk-qbp.gvgyr7";a:2:{i:0;R:33172;i:1;R:33173;}s:21:"1220:bxnjvk-qbp.vgrz7";a:2:{i:0;R:33172;i:1;R:33173;}s:22:"1220:bxnjvk-qbp.gvgyr8";a:2:{i:0;R:33172;i:1;R:33173;}s:21:"1220:bxnjvk-qbp.vgrz8";a:2:{i:0;R:33172;i:1;R:33173;}s:22:"1220:bxnjvk-qbp.gvgyr9";a:2:{i:0;R:33172;i:1;R:33173;}s:21:"1220:bxnjvk-qbp.vgrz9";a:2:{i:0;R:33172;i:1;R:33173;}s:23:"1220:bxnjvk-qbp.gvgyr10";a:2:{i:0;R:33172;i:1;R:33173;}s:22:"1220:bxnjvk-qbp.vgrz10";a:2:{i:0;R:33172;i:1;R:33173;}s:23:"1220:bxnjvk-qbp.gvgyr11";a:2:{i:0;R:33172;i:1;R:33173;}s:22:"1220:bxnjvk-qbp.vgrz11";a:2:{i:0;R:33172;i:1;R:33173;}s:23:"1220:bxnjvk-qbp.gvgyr12";a:2:{i:0;R:33172;i:1;R:33173;}s:22:"1220:bxnjvk-qbp.vgrz12";a:2:{i:0;R:33172;i:1;R:33173;}s:23:"1220:bxnjvk-qbp.gvgyr13";a:2:{i:0;R:33172;i:1;R:33173;}s:22:"1220:bxnjvk-qbp.vgrz13";a:2:{i:0;R:33172;i:1;R:33173;}s:17:"1220:bxnjvk.gvgyr";a:2:{i:0;s:14:"out-okawix-dtd";i:1;R:33173;}s:16:"1220:bxnjvk.onpx";a:2:{i:0;R:33202;i:1;R:33173;}s:19:"1220:bxnjvk.sbejneq";a:2:{i:0;R:33202;i:1;R:33173;}s:16:"1220:bxnjvk.ubzr";a:2:{i:0;R:33202;i:1;R:33173;}s:18:"1220:bxnjvk.frnepu";a:2:{i:0;R:33202;i:1;R:33173;}s:22:"1220:bxnjvk.fubjfrnepu";a:2:{i:0;R:33202;i:1;R:33173;}s:21:"1220:bxnjvk.fubjuvfgb";a:2:{i:0;R:33202;i:1;R:33173;}s:17:"1220:bxnjvk.cevag";a:2:{i:0;R:33202;i:1;R:33173;}s:21:"1220:bxnjvk.frnepuone";a:2:{i:0;R:33202;i:1;R:33173;}s:24:"1220:bxnjvk.frnepuohggba";a:2:{i:0;R:33202;i:1;R:33173;}s:18:"1220:bxnjvk.svaqva";a:2:{i:0;R:33202;i:1;R:33173;}s:22:"1220:bxnjvk.zberpbechf";a:2:{i:0;R:33202;i:1;R:33173;}s:17:"1220:bxnjvk.nobhg";a:2:{i:0;R:33202;i:1;R:33173;}s:16:"1220:bxnjvk.uryc";a:2:{i:0;R:33202;i:1;R:33173;}s:16:"1220:bxnjvk.fnir";a:2:{i:0;R:33202;i:1;R:33173;}s:25:"1220:bxnjvk.pbechf.nqqarj";a:2:{i:0;R:33202;i:1;R:33173;}s:30:"1220:bxnjvk.pbechf.nqqarjybpny";a:2:{i:0;R:33202;i:1;R:33173;}s:25:"1220:bxnjvk.pbechf.erzbir";a:2:{i:0;R:33202;i:1;R:33173;}s:22:"1220:bxnjvk.cbchc.pbcl";a:2:{i:0;R:33202;i:1;R:33173;}s:27:"1220:bxnjvk.cbchc.fryrpgnyy";a:2:{i:0;R:33202;i:1;R:33173;}s:22:"1220:bxnjvk.cbchc.svaq";a:2:{i:0;R:33202;i:1;R:33173;}s:30:"1220:bxnjvk.cbchc.bcrarkgreany";a:2:{i:0;R:33202;i:1;R:33173;}s:28:"1220:bxnjvk.cbchc.fryrpgfxva";a:2:{i:0;R:33202;i:1;R:33173;}s:28:"1220:bxnjvk.cbchc.fryrpgynat";a:2:{i:0;R:33202;i:1;R:33173;}s:28:"1220:bxnjvk.cbchc.flfgrzynat";a:2:{i:0;R:33202;i:1;R:33173;}s:29:"1220:bxnjvk.cbchc.vafgnyyynat";a:2:{i:0;R:33202;i:1;R:33173;}s:35:"1220:bxnjvk.cbchc.pheeragqvpgvbanel";a:2:{i:0;R:33202;i:1;R:33173;}s:22:"1220:bxnjvk.cbchc.mbbz";a:2:{i:0;R:33202;i:1;R:33173;}s:24:"1220:bxnjvk.cbchc.mbbzva";a:2:{i:0;R:33202;i:1;R:33173;}s:25:"1220:bxnjvk.cbchc.mbbzbhg";a:2:{i:0;R:33202;i:1;R:33173;}s:26:"1220:bxnjvk.cbchc.nqqnfxva";a:2:{i:0;R:33202;i:1;R:33173;}s:26:"1220:bxnjvk.cbchc.frggvatf";a:2:{i:0;R:33202;i:1;R:33173;}s:30:"1220:bxnjvk.cbchc.pbasrkgreany";a:2:{i:0;R:33202;i:1;R:33173;}s:27:"1220:bxnjvk.fvqrone.erfhygf";a:2:{i:0;R:33202;i:1;R:33173;}s:29:"1220:bxnjvk.fvqrone.aberfhygf";a:2:{i:0;R:33202;i:1;R:33173;}s:27:"1220:bxnjvk.fvqrone.uvfgbel";a:2:{i:0;R:33202;i:1;R:33173;}s:26:"1220:bxnjvk.fvqrone.pbechf";a:2:{i:0;R:33202;i:1;R:33173;}s:26:"1220:bxnjvk.vj.qrfgvangvba";a:2:{i:0;R:33202;i:1;R:33173;}s:25:"1220:bxnjvk.vj.vafgnyyvat";a:2:{i:0;R:33202;i:1;R:33173;}s:21:"1220:bxnjvk.vj.oebjfr";a:2:{i:0;R:33202;i:1;R:33173;}s:27:"1220:bxnjvk.vj.fnirybpngvba";a:2:{i:0;R:33202;i:1;R:33173;}s:25:"1220:bxnjvk.vj.cyrnfrjnvg";a:2:{i:0;R:33202;i:1;R:33173;}s:21:"1220:bxnjvk.vj.vzntrf";a:2:{i:0;R:33202;i:1;R:33173;}s:19:"1220:bxnjvk.vj.fvmr";a:2:{i:0;R:33202;i:1;R:33173;}s:20:"1220:bxnjvk.ce.gvgyr";a:2:{i:0;R:33202;i:1;R:33173;}s:18:"1220:bxnjvk.ce.hfr";a:2:{i:0;R:33202;i:1;R:33173;}s:21:"1220:bxnjvk.ce.freire";a:2:{i:0;R:33202;i:1;R:33173;}s:19:"1220:bxnjvk.ce.cbeg";a:2:{i:0;R:33202;i:1;R:33173;}s:23:"1220:bxnjvk.uryc.gbcvpf";a:2:{i:0;R:33202;i:1;R:33173;}s:22:"1220:bxnjvk.uryc.pybfr";a:2:{i:0;R:33202;i:1;R:33173;}s:7:"1220:qr";a:2:{i:0;s:15:"out-okawix-prop";i:1;R:33173;}s:7:"1220:ra";a:2:{i:0;R:33253;i:1;R:33173;}s:7:"1220:rf";a:2:{i:0;R:33253;i:1;R:33173;}s:7:"1220:sv";a:2:{i:0;R:33253;i:1;R:33173;}s:7:"1220:se";a:2:{i:0;R:33253;i:1;R:33173;}s:7:"1220:uh";a:2:{i:0;R:33253;i:1;R:33173;}s:7:"1220:vq";a:2:{i:0;R:33253;i:1;R:33173;}s:7:"1220:wn";a:2:{i:0;R:33253;i:1;R:33173;}s:7:"1220:ay";a:2:{i:0;R:33253;i:1;R:33173;}s:7:"1220:cy";a:2:{i:0;R:33253;i:1;R:33173;}s:7:"1220:eh";a:2:{i:0;R:33253;i:1;R:33173;}s:7:"1220:fx";a:2:{i:0;R:33253;i:1;R:33173;}s:32:"1220:bxnjvk.jx.nhgbfrnepuranoyrq";a:2:{i:0;R:33253;i:1;R:33173;}s:33:"1220:bxnjvk.jx.nhgbfrnepuqvfnoyrq";a:2:{i:0;R:33253;i:1;R:33173;}s:22:"1220:bxnjvk.vj.vafgnyy";a:2:{i:0;R:33253;i:1;R:33173;}s:21:"1220:bxnjvk.vj.pnapry";a:2:{i:0;R:33253;i:1;R:33173;}s:27:"1220:bxnjvk.rkg.fxvacnpxntr";a:2:{i:0;R:33253;i:1;R:33173;}s:27:"1220:bxnjvk.rkg.ynatcnpxntr";a:2:{i:0;R:33253;i:1;R:33173;}s:23:"1220:bxnjvk.rkg.fryrpgn";a:2:{i:0;R:33253;i:1;R:33173;}s:35:"1220:bxnjvk.rkg.funyyerfgnegsbefxva";a:2:{i:0;R:33253;i:1;R:33173;}s:35:"1220:bxnjvk.rkg.funyyerfgnegsbeynat";a:2:{i:0;R:33253;i:1;R:33173;}s:24:"1220:bxnjvk.fo.nqqvzntrf";a:2:{i:0;R:33253;i:1;R:33173;}s:21:"1220:bxnjvk.fo.erzbir";a:2:{i:0;R:33253;i:1;R:33173;}s:19:"1220:bxnjvk.fo.rqvg";a:2:{i:0;R:33253;i:1;R:33173;}s:23:"1220:bxnjvk.fo.qebcurer";a:2:{i:0;R:33253;i:1;R:33173;}s:28:"1220:bxnjvk.fo.pbasvezerzbir";a:2:{i:0;R:33253;i:1;R:33173;}s:22:"1220:bxnjvk.fo.nfxcngu";a:2:{i:0;R:33253;i:1;R:33173;}s:30:"1220:bxnjvk.fo.qverpgbelrkvfgf";a:2:{i:0;R:33253;i:1;R:33173;}s:27:"1220:bxnjvk.jx.vafgnyyreebe";a:2:{i:0;R:33253;i:1;R:33173;}s:23:"1220:bxnjvk.jx.inavfurq";a:2:{i:0;R:33253;i:1;R:33173;}s:28:"1220:bxnjvk-fvgr.urnqre_ubzr";a:2:{i:0;s:15:"out-okawix-site";i:1;R:33173;}s:30:"1220:bxnjvk-fvgr.urnqre_ubzr_f";a:2:{i:0;R:33284;i:1;R:33173;}s:28:"1220:bxnjvk-fvgr.urnqre_arjf";a:2:{i:0;R:33284;i:1;R:33173;}s:32:"1220:bxnjvk-fvgr.urnqre_gbeeragf";a:2:{i:0;R:33284;i:1;R:33173;}s:28:"1220:bxnjvk-fvgr.urnqre_fubc";a:2:{i:0;R:33284;i:1;R:33173;}s:30:"1220:bxnjvk-fvgr.urnqre_fubc_f";a:2:{i:0;R:33284;i:1;R:33173;}s:37:"1220:bxnjvk-fvgr.urnqre_qbphzragngvba";a:2:{i:0;R:33284;i:1;R:33173;}s:23:"1220:bxnjvk-fvgr.ubzr_1";a:2:{i:0;R:33284;i:1;R:33173;}s:37:"1220:bxnjvk-fvgr.ubzr_2_serr_fbsgjner";a:2:{i:0;R:33284;i:1;R:33173;}s:41:"1220:bxnjvk-fvgr.ubzr_3_srnghevat_jvxvjvk";a:2:{i:0;R:33284;i:1;R:33173;}s:41:"1220:bxnjvk-fvgr.ubzr_4_qbjaybnq_fbsgjner";a:2:{i:0;R:33284;i:1;R:33173;}s:32:"1220:bxnjvk-fvgr.ubzr_5_ohl_xrlf";a:2:{i:0;R:33284;i:1;R:33173;}s:33:"1220:bxnjvk-fvgr.ubzr_6_dhrfgvbaf";a:2:{i:0;R:33284;i:1;R:33173;}s:34:"1220:bxnjvk-fvgr.ubzr_7_abgvpr_tcy";a:2:{i:0;R:33284;i:1;R:33173;}s:45:"1220:bxnjvk-fvgr.qbphzragngvba_genafyngvba_ol";a:2:{i:0;R:33284;i:1;R:33173;}s:50:"1220:bxnjvk-fvgr.qbphzragngvba_ninvynoyr_ynathntrf";a:2:{i:0;R:33284;i:1;R:33173;}s:44:"1220:bxnjvk-fvgr.qbphzragngvba_onpx_gb_vaqrk";a:2:{i:0;R:33284;i:1;R:33173;}s:45:"1220:bxnjvk-fvgr.fubc_ahzore_naq_glcr_bs_xrlf";a:2:{i:0;R:33284;i:1;R:33173;}s:34:"1220:bxnjvk-fvgr.fubc_rzcgl_onfxrg";a:2:{i:0;R:33284;i:1;R:33173;}s:33:"1220:bxnjvk-fvgr.fubc_lbhe_onfxrg";a:2:{i:0;R:33284;i:1;R:33173;}s:37:"1220:bxnjvk-fvgr.fubc_perngr_hfo_xrlf";a:2:{i:0;R:33284;i:1;R:33173;}s:36:"1220:bxnjvk-fvgr.fubc_ahzore_bs_xrlf";a:2:{i:0;R:33284;i:1;R:33173;}s:34:"1220:bxnjvk-fvgr.fubc_fvmr_hfo_xrl";a:2:{i:0;R:33284;i:1;R:33173;}s:42:"1220:bxnjvk-fvgr.fubc_lbhe_onfxrg_pbagnvaf";a:2:{i:0;R:33284;i:1;R:33173;}s:25:"1220:bxnjvk-fvgr.fubc_nqq";a:2:{i:0;R:33284;i:1;R:33173;}s:26:"1220:bxnjvk-fvgr.fubc_rqvg";a:2:{i:0;R:33284;i:1;R:33173;}s:38:"1220:bxnjvk-fvgr.fubc_fbeel_ab_pbagrag";a:2:{i:0;R:33284;i:1;R:33173;}s:28:"1220:bxnjvk-fvgr.fubc_fhozvg";a:2:{i:0;R:33284;i:1;R:33173;}s:40:"1220:bxnjvk-fvgr.fuvc_ohl_qrfpevorq_xrlf";a:2:{i:0;R:33284;i:1;R:33173;}s:38:"1220:bxnjvk-fvgr.fuvc_qryvirel_nqqerff";a:2:{i:0;R:33284;i:1;R:33173;}s:30:"1220:bxnjvk-fvgr.fuvc_pvivyvgr";a:2:{i:0;R:33284;i:1;R:33173;}s:26:"1220:bxnjvk-fvgr.fuvc_zvff";a:2:{i:0;R:33284;i:1;R:33173;}s:25:"1220:bxnjvk-fvgr.fuvc_zef";a:2:{i:0;R:33284;i:1;R:33173;}s:24:"1220:bxnjvk-fvgr.fuvc_ze";a:2:{i:0;R:33284;i:1;R:33173;}s:32:"1220:bxnjvk-fvgr.fuvc_svefg_anzr";a:2:{i:0;R:33284;i:1;R:33173;}s:30:"1220:bxnjvk-fvgr.fuvc_ynfg_nzr";a:2:{i:0;R:33284;i:1;R:33173;}s:29:"1220:bxnjvk-fvgr.fuvc_nqqerff";a:2:{i:0;R:33284;i:1;R:33173;}s:27:"1220:bxnjvk-fvgr.fuvc_rznvy";a:2:{i:0;R:33284;i:1;R:33173;}s:28:"1220:bxnjvk-fvgr.fuvc_ertvba";a:2:{i:0;R:33284;i:1;R:33173;}s:30:"1220:bxnjvk-fvgr.fuvc_mvc_pbqr";a:2:{i:0;R:33284;i:1;R:33173;}s:26:"1220:bxnjvk-fvgr.fuvc_pvgl";a:2:{i:0;R:33284;i:1;R:33173;}s:29:"1220:bxnjvk-fvgr.fuvc_pbhagel";a:2:{i:0;R:33284;i:1;R:33173;}s:44:"1220:bxnjvk-fvgr.fuvc_pbhagel_qrsnhyg_pubvpr";a:2:{i:0;R:33284;i:1;R:33173;}s:28:"1220:bxnjvk-fvgr.fuvc_pnapry";a:2:{i:0;R:33284;i:1;R:33173;}s:26:"1220:bxnjvk-fvgr.fuvc_fraq";a:2:{i:0;R:33284;i:1;R:33173;}s:34:"1220:bxnjvk-fvgr.fuvc_tb_gb_frpher";a:2:{i:0;R:33284;i:1;R:33173;}s:40:"1220:bxnjvk-fvgr.pbechf_fryrpg_ynathntrf";a:2:{i:0;R:33284;i:1;R:33173;}s:40:"1220:bxnjvk-fvgr.pbechf_pubfra_ynathntrf";a:2:{i:0;R:33284;i:1;R:33173;}s:28:"1220:bxnjvk-fvgr.pbechf_fnir";a:2:{i:0;R:33284;i:1;R:33173;}s:30:"1220:bxnjvk-fvgr.gbeerag_gvgyr";a:2:{i:0;R:33284;i:1;R:33173;}s:30:"1220:bxnjvk-fvgr.svyr_qbjaybnq";a:2:{i:0;R:33284;i:1;R:33173;}s:20:"1220:bxnjvk-fvgr.naq";a:2:{i:0;R:33284;i:1;R:33173;}s:26:"1220:bxnjvk-fvgr.svyr_fvmr";a:2:{i:0;R:33284;i:1;R:33173;}s:27:"1220:bxnjvk-fvgr.gbgny_fvmr";a:2:{i:0;R:33284;i:1;R:33173;}s:33:"1220:bxnjvk-fvgr-qbjaybnq.pngnybt";a:2:{i:0;R:33284;i:1;R:33173;}s:38:"1220:bxnjvk-fvgr-qbjaybnq.trarengrq_ng";a:2:{i:0;R:33284;i:1;R:33173;}s:28:"1220:bxnjvk-fvgr-qbjaybnq.tb";a:2:{i:0;R:33284;i:1;R:33173;}s:30:"1220:bxnjvk-fvgr-qbjaybnq.ubzr";a:2:{i:0;R:33284;i:1;R:33173;}s:48:"1220:bxnjvk-fvgr-qbjaybnq.pbasvezngvba_znvy_frag";a:2:{i:0;R:33284;i:1;R:33173;}s:49:"1220:bxnjvk-fvgr-qbjaybnq.pbasvezngvba_znvy_gvgyr";a:2:{i:0;R:33284;i:1;R:33173;}s:43:"1220:bxnjvk-fvgr-qbjaybnq.pbasvezngvba_znvy";a:2:{i:0;R:33284;i:1;R:33173;}s:49:"1220:bxnjvk-fvgr-qbjaybnq.gunaxf_sbe_pbasvezngvba";a:2:{i:0;R:33284;i:1;R:33173;}s:33:"1220:bxnjvk-fvgr-qbjaybnq.ybt_bhg";a:2:{i:0;R:33284;i:1;R:33173;}s:35:"1220:bxnjvk-fvgr-qbjaybnq.abg_sbhaq";a:2:{i:0;R:33284;i:1;R:33173;}s:39:"1220:bxnjvk-fvgr-qbjaybnq.ybfg_cnffjbeq";a:2:{i:0;R:33284;i:1;R:33173;}s:33:"1220:bxnjvk-fvgr-qbjaybnq.uryc_zr";a:2:{i:0;R:33284;i:1;R:33173;}s:31:"1220:bxnjvk-fvgr-qbjaybnq.ybtva";a:2:{i:0;R:33284;i:1;R:33173;}s:34:"1220:bxnjvk-fvgr-qbjaybnq.arj_hfre";a:2:{i:0;R:33284;i:1;R:33173;}s:36:"1220:bxnjvk-fvgr-qbjaybnq.lbhe_rznvy";a:2:{i:0;R:33284;i:1;R:33173;}s:41:"1220:bxnjvk-fvgr-qbjaybnq.pubbfr_cnffjbeq";a:2:{i:0;R:33284;i:1;R:33173;}s:39:"1220:bxnjvk-fvgr-qbjaybnq.ertvfgre_uryc";a:2:{i:0;R:33284;i:1;R:33173;}s:41:"1220:bxnjvk-fvgr-qbjaybnq.ybfg_znvy_gvgyr";a:2:{i:0;R:33284;i:1;R:33173;}s:35:"1220:bxnjvk-fvgr-qbjaybnq.ybfg_znvy";a:2:{i:0;R:33284;i:1;R:33173;}s:41:"1220:bxnjvk-fvgr-qbjaybnq.punatr_cnffjbeq";a:2:{i:0;R:33284;i:1;R:33173;}s:45:"1220:bxnjvk-fvgr-qbjaybnq.frg_nf_arj_cnffjbeq";a:2:{i:0;R:33284;i:1;R:33173;}s:46:"1220:bxnjvk-fvgr-qbjaybnq.punatr_cnffjbeq_uryc";a:2:{i:0;R:33284;i:1;R:33173;}s:40:"1220:bxnjvk-fvgr-qbjaybnq.cnffjq_punatrq";a:2:{i:0;R:33284;i:1;R:33173;}s:40:"1220:bxnjvk-fvgr-qbjaybnq.choyvp_pngnybt";a:2:{i:0;R:33284;i:1;R:33173;}s:41:"1220:bxnjvk-fvgr-qbjaybnq.cevingr_pngnybt";a:2:{i:0;R:33284;i:1;R:33173;}s:34:"1220:bxnjvk-fvgr-qbjaybnq.frggvatf";a:2:{i:0;R:33284;i:1;R:33173;}s:41:"1220:bxnjvk-fvgr-qbjaybnq.onpx_gb_pngnybt";a:2:{i:0;R:33284;i:1;R:33173;}s:29:"1220:bxnjvk-fvgr-qbjaybnq.nqq";a:2:{i:0;R:33284;i:1;R:33173;}s:38:"1220:bxnjvk-fvgr-qbjaybnq.fbpvny_gvgyr";a:2:{i:0;R:33284;i:1;R:33173;}s:37:"1220:bxnjvk-fvgr-qbjaybnq.fbpvny_uryc";a:2:{i:0;R:33284;i:1;R:33173;}s:34:"1220:bxnjvk-fvgr-qbjaybnq.qbjaybnq";a:2:{i:0;R:33284;i:1;R:33173;}s:37:"1220:bxnjvk-fvgr-qbjaybnq.ynfg_hcqngr";a:2:{i:0;R:33284;i:1;R:33173;}s:41:"1220:bxnjvk-fvgr-qbjaybnq.orvat_trarengrq";a:2:{i:0;R:33284;i:1;R:33173;}s:40:"1220:bxnjvk-fvgr-qbjaybnq.qryrgr_pbasvez";a:2:{i:0;R:33284;i:1;R:33173;}s:49:"1220:bxnjvk-fvgr-qbjaybnq.reebe_ertvfgre_qhcrznvy";a:2:{i:0;R:33284;i:1;R:33173;}s:15:"1234:urnq.gvgyr";a:2:{i:0;s:19:"out-openimages-core";i:1;s:20:"out-openimages-0-all";}s:21:"1234:urnq.qrfpevcgvba";a:2:{i:0;R:33374;i:1;R:33375;}s:20:"1234:urnq.vavgvngvir";a:2:{i:0;R:33374;i:1;R:33375;}s:24:"1234:freivpr.yngrfg_arjf";a:2:{i:0;R:33374;i:1;R:33375;}s:21:"1234:freivpr.ernqzber";a:2:{i:0;R:33374;i:1;R:33375;}s:28:"1234:freivpr.pubbfr_ynathntr";a:2:{i:0;R:33374;i:1;R:33375;}s:20:"1234:frnepu.nqinaprq";a:2:{i:0;R:33374;i:1;R:33375;}s:24:"1234:frnepu.nal_ynathntr";a:2:{i:0;R:33374;i:1;R:33375;}s:22:"1234:frnepu.nal_yratgu";a:2:{i:0;R:33374;i:1;R:33375;}s:23:"1234:frnepu.nal_yvprafr";a:2:{i:0;R:33374;i:1;R:33375;}s:22:"1234:frnepu.nal_crevbq";a:2:{i:0;R:33374;i:1;R:33375;}s:18:"1234:frnepu.ohggba";a:2:{i:0;R:33374;i:1;R:33375;}s:17:"1234:frnepu.zrqvn";a:2:{i:0;R:33374;i:1;R:33375;}s:25:"1234:frnepu.frnepurq_jvgu";a:2:{i:0;R:33374;i:1;R:33375;}s:35:"1234:frnepu.frnepurq_jvgu_naq_sbhaq";a:2:{i:0;R:33374;i:1;R:33375;}s:16:"1234:frnepu.sebz";a:2:{i:0;R:33374;i:1;R:33375;}s:27:"1234:frnepu.abgzbergunanqnl";a:2:{i:0;R:33374;i:1;R:33375;}s:28:"1234:frnepu.abgzbergunanjrrx";a:2:{i:0;R:33374;i:1;R:33375;}s:29:"1234:frnepu.abgzbergunanzbagu";a:2:{i:0;R:33374;i:1;R:33375;}s:28:"1234:frnepu.abgzbergunanlrne";a:2:{i:0;R:33374;i:1;R:33375;}s:8:"1234:gnt";a:2:{i:0;R:33374;i:1;R:33375;}s:12:"1234:gnt.nqq";a:2:{i:0;R:33374;i:1;R:33375;}s:16:"1234:gnt.nqq_gnt";a:2:{i:0;R:33374;i:1;R:33375;}s:14:"1234:gnt.nqqrq";a:2:{i:0;R:33374;i:1;R:33375;}s:23:"1234:gnt.nyernql_gnttrq";a:2:{i:0;R:33374;i:1;R:33375;}s:23:"1234:gnt.svaq_be_perngr";a:2:{i:0;R:33374;i:1;R:33375;}s:14:"1234:gnt.abgnt";a:2:{i:0;R:33374;i:1;R:33375;}s:19:"1234:gnt.abgnyybjrq";a:2:{i:0;R:33374;i:1;R:33375;}s:15:"1234:gnt.erzbir";a:2:{i:0;R:33374;i:1;R:33375;}s:16:"1234:gnt.erzbirq";a:2:{i:0;R:33374;i:1;R:33375;}s:22:"1234:gnt.fubj_nyy_gntf";a:2:{i:0;R:33374;i:1;R:33375;}s:17:"1234:gnt.gbbfubeg";a:2:{i:0;R:33374;i:1;R:33375;}s:16:"1234:ybtva.ybtva";a:2:{i:0;R:33374;i:1;R:33375;}s:23:"1234:ybtva.nppbhag_anzr";a:2:{i:0;R:33374;i:1;R:33375;}s:19:"1234:ybtva.cnffjbeq";a:2:{i:0;R:33374;i:1;R:33375;}s:17:"1234:ybtva.ybtbhg";a:2:{i:0;R:33374;i:1;R:33375;}s:16:"1234:ybtva.reebe";a:2:{i:0;R:33374;i:1;R:33375;}s:26:"1234:ybtva.sbetbg_cnffjbeq";a:2:{i:0;R:33374;i:1;R:33375;}s:22:"1234:ybtva.ab_cnffjbeq";a:2:{i:0;R:33374;i:1;R:33375;}s:18:"1234:ybtva.zrffntr";a:2:{i:0;R:33374;i:1;R:33375;}s:18:"1234:ybtva.fvta_va";a:2:{i:0;R:33374;i:1;R:33375;}s:23:"1234:ybtva.gb_ybtvacntr";a:2:{i:0;R:33374;i:1;R:33375;}s:18:"1234:ybtva.lbh_ner";a:2:{i:0;R:33374;i:1;R:33375;}s:14:"1234:401.gvgyr";a:2:{i:0;R:33374;i:1;R:33375;}s:16:"1234:401.zrffntr";a:2:{i:0;R:33374;i:1;R:33375;}s:13:"1234:ertvfgre";a:2:{i:0;R:33374;i:1;R:33375;}s:22:"1234:ertvfgre.pbzcyrgr";a:2:{i:0;R:33374;i:1;R:33375;}s:22:"1234:ertvfgre.irevsvrq";a:2:{i:0;R:33374;i:1;R:33375;}s:24:"1234:ertvfgre.vapbzcyrgr";a:2:{i:0;R:33374;i:1;R:33375;}s:21:"1234:ertvfgre.pbasvez";a:2:{i:0;R:33374;i:1;R:33375;}s:27:"1234:ertvfgre.pbasvez.reebe";a:2:{i:0;R:33374;i:1;R:33375;}s:32:"1234:ertvfgre.ncv.rznvy_erdhverq";a:2:{i:0;R:33374;i:1;R:33375;}s:35:"1234:ertvfgre.v_npprcg_grezf_bs_hfr";a:2:{i:0;R:33374;i:1;R:33375;}s:37:"1234:ertvfgre.v_npprcg_perngr_nppbhag";a:2:{i:0;R:33374;i:1;R:33375;}s:26:"1234:erfrgcnffjbeq.zrffntr";a:2:{i:0;R:33374;i:1;R:33375;}s:30:"1234:erfrgcnffjbeq.ab_hfreanzr";a:2:{i:0;R:33374;i:1;R:33375;}s:23:"1234:erfrgcnffjbeq.sebz";a:2:{i:0;R:33374;i:1;R:33375;}s:26:"1234:erfrgcnffjbeq.fhowrpg";a:2:{i:0;R:33374;i:1;R:33375;}s:23:"1234:erfrgcnffjbeq.obql";a:2:{i:0;R:33374;i:1;R:33375;}s:18:"1234:zrqvn.perngbe";a:2:{i:0;R:33374;i:1;R:33375;}s:15:"1234:zrqvn.qngr";a:2:{i:0;R:33374;i:1;R:33375;}s:19:"1234:zrqvn.qbjaybnq";a:2:{i:0;R:33374;i:1;R:33375;}s:31:"1234:zrqvn.qrfpevcgvba_ynathntr";a:2:{i:0;R:33374;i:1;R:33375;}s:15:"1234:zrqvn.rqvg";a:2:{i:0;R:33374;i:1;R:33375;}s:19:"1234:zrqvn.snibevgr";a:2:{i:0;R:33374;i:1;R:33375;}s:19:"1234:zrqvn.srngherq";a:2:{i:0;R:33374;i:1;R:33375;}s:16:"1234:zrqvn.svyrf";a:2:{i:0;R:33374;i:1;R:33375;}s:20:"1234:zrqvn.unfsbezng";a:2:{i:0;R:33374;i:1;R:33375;}s:18:"1234:zrqvn.ugzygnt";a:2:{i:0;R:33374;i:1;R:33375;}s:15:"1234:zrqvn.vgrz";a:2:{i:0;R:33374;i:1;R:33375;}s:19:"1234:zrqvn.xrljbeqf";a:2:{i:0;R:33374;i:1;R:33375;}s:19:"1234:zrqvn.ynathntr";a:2:{i:0;R:33374;i:1;R:33375;}s:25:"1234:zrqvn.yngrfg_hcybnqf";a:2:{i:0;R:33374;i:1;R:33375;}s:17:"1234:zrqvn.yratgu";a:2:{i:0;R:33374;i:1;R:33375;}s:18:"1234:zrqvn.yvprafr";a:2:{i:0;R:33374;i:1;R:33375;}s:36:"1234:zrqvn.yvprafr.vf_yvprafrq_haqre";a:2:{i:0;R:33374;i:1;R:33375;}s:23:"1234:zrqvn.yvax_gb_cntr";a:2:{i:0;R:33374;i:1;R:33375;}s:15:"1234:zrqvn.zber";a:2:{i:0;R:33374;i:1;R:33375;}s:15:"1234:zrqvn.yrff";a:2:{i:0;R:33374;i:1;R:33375;}s:25:"1234:zrqvn.zber_sebz_hfre";a:2:{i:0;R:33374;i:1;R:33375;}s:20:"1234:zrqvn.arj_zrqvn";a:2:{i:0;R:33374;i:1;R:33375;}s:27:"1234:zrqvn.zl_pbagevohgvbaf";a:2:{i:0;R:33374;i:1;R:33375;}s:16:"1234:zrqvn.beqre";a:2:{i:0;R:33374;i:1;R:33375;}s:21:"1234:zrqvn.beqre_grkg";a:2:{i:0;R:33374;i:1;R:33375;}s:15:"1234:zrqvn.cntr";a:2:{i:0;R:33374;i:1;R:33375;}s:18:"1234:zrqvn.cerivrj";a:2:{i:0;R:33374;i:1;R:33375;}s:18:"1234:zrqvn.eryngrq";a:2:{i:0;R:33374;i:1;R:33375;}s:24:"1234:zrqvn.eryngrq_vgrzf";a:2:{i:0;R:33374;i:1;R:33375;}s:20:"1234:zrqvn.eryrinapr";a:2:{i:0;R:33374;i:1;R:33375;}s:16:"1234:zrqvn.funer";a:2:{i:0;R:33374;i:1;R:33375;}s:17:"1234:zrqvn.fbegol";a:2:{i:0;R:33374;i:1;R:33375;}s:17:"1234:zrqvn.fbhepr";a:2:{i:0;R:33374;i:1;R:33375;}s:14:"1234:zrqvn.gnt";a:2:{i:0;R:33374;i:1;R:33375;}s:15:"1234:zrqvn.gntf";a:2:{i:0;R:33374;i:1;R:33375;}s:16:"1234:zrqvn.gvgyr";a:2:{i:0;R:33374;i:1;R:33375;}s:15:"1234:zrqvn.glcr";a:2:{i:0;R:33374;i:1;R:33375;}s:21:"1234:zrqvn.guhzoanvyf";a:2:{i:0;R:33374;i:1;R:33375;}s:15:"1234:zrqvn.yvfg";a:2:{i:0;R:33374;i:1;R:33375;}s:20:"1234:zrqvn.choyvfure";a:2:{i:0;R:33374;i:1;R:33375;}s:27:"1234:zrqvn.eryngrq.abgsbhaq";a:2:{i:0;R:33374;i:1;R:33375;}s:19:"1234:zrqvn.hcybnqrq";a:2:{i:0;R:33374;i:1;R:33375;}s:20:"1234:zrqvn.hcybnqvat";a:2:{i:0;R:33374;i:1;R:33375;}s:15:"1234:zrqvn.hfre";a:2:{i:0;R:33374;i:1;R:33375;}s:17:"1234:zrqvn.hcybnq";a:2:{i:0;R:33374;i:1;R:33375;}s:22:"1234:zrqvn.hcybnq_svyr";a:2:{i:0;R:33374;i:1;R:33375;}s:34:"1234:zrqvn.hcybnq_svyr.vasbezngvba";a:2:{i:0;R:33374;i:1;R:33375;}s:10:"1234:hfref";a:2:{i:0;R:33374;i:1;R:33375;}s:14:"1234:hfref.nqq";a:2:{i:0;R:33374;i:1;R:33375;}s:24:"1234:hfref.nqq_fbzrguvat";a:2:{i:0;R:33374;i:1;R:33375;}s:15:"1234:hfref.onpx";a:2:{i:0;R:33374;i:1;R:33375;}s:17:"1234:hfref.pnapry";a:2:{i:0;R:33374;i:1;R:33375;}s:16:"1234:hfref.pybfr";a:2:{i:0;R:33374;i:1;R:33375;}s:29:"1234:hfref.sbez.nqq_zber_vasb";a:2:{i:0;R:33374;i:1;R:33375;}s:21:"1234:hfref.sbez.reebe";a:2:{i:0;R:33374;i:1;R:33375;}s:20:"1234:hfref.sbez.fnir";a:2:{i:0;R:33374;i:1;R:33375;}s:21:"1234:hfref.sbez.fnirq";a:2:{i:0;R:33374;i:1;R:33375;}s:18:"1234:hfref.cvpgher";a:2:{i:0;R:33374;i:1;R:33375;}s:19:"1234:hfref.hfreanzr";a:2:{i:0;R:33374;i:1;R:33375;}s:19:"1234:hfref.ertvfgre";a:2:{i:0;R:33374;i:1;R:33375;}s:17:"1234:hfref.frnepu";a:2:{i:0;R:33374;i:1;R:33375;}s:22:"1234:hfref.frnepu_hfre";a:2:{i:0;R:33374;i:1;R:33375;}s:17:"1234:hfref.znlabg";a:2:{i:0;R:33374;i:1;R:33375;}s:20:"1234:hfref.nqq_vzntr";a:2:{i:0;R:33374;i:1;R:33375;}s:23:"1234:hfref.qryrgr_vzntr";a:2:{i:0;R:33374;i:1;R:33375;}s:28:"1234:hfref.qryrgr_vzntr_fher";a:2:{i:0;R:33374;i:1;R:33375;}s:27:"1234:hfref.qryrgr_abqr_fher";a:2:{i:0;R:33374;i:1;R:33375;}s:15:"1234:hfref.rqvg";a:2:{i:0;R:33374;i:1;R:33375;}s:21:"1234:hfref.rqvg_vzntr";a:2:{i:0;R:33374;i:1;R:33375;}s:27:"1234:hfref.perngr_arj_vzntr";a:2:{i:0;R:33374;i:1;R:33375;}s:17:"1234:hfref.ybtbhg";a:2:{i:0;R:33374;i:1;R:33375;}s:17:"1234:hfref.qryrgr";a:2:{i:0;R:33374;i:1;R:33375;}s:14:"1234:hfref.arj";a:2:{i:0;R:33374;i:1;R:33375;}s:23:"1234:hfref.zl_snibevgrf";a:2:{i:0;R:33374;i:1;R:33375;}s:18:"1234:hfref.bcgvbaf";a:2:{i:0;R:33374;i:1;R:33375;}s:15:"1234:hfref.fnir";a:2:{i:0;R:33374;i:1;R:33375;}s:27:"1234:hfref.fgnefnererdhverq";a:2:{i:0;R:33374;i:1;R:33375;}s:23:"1234:hfref.genafyngvbaf";a:2:{i:0;R:33374;i:1;R:33375;}s:33:"1234:hfref.perngr_arj_genafyngvba";a:2:{i:0;R:33374;i:1;R:33375;}s:26:"1234:hfref.hcybnq.svavfurq";a:2:{i:0;R:33374;i:1;R:33375;}s:28:"1234:hfref.hcybnq.abgfgnegrq";a:2:{i:0;R:33374;i:1;R:33375;}s:30:"1234:hfref.hcybnq.yvprafrgvgyr";a:2:{i:0;R:33374;i:1;R:33375;}s:29:"1234:hfref.hcybnq.yvprafrgrkg";a:2:{i:0;R:33374;i:1;R:33375;}s:29:"1234:hfref.hcybnq.gnxrfnjuvyr";a:2:{i:0;R:33374;i:1;R:33375;}s:20:"1234:hfre.qvfnyybjrq";a:2:{i:0;R:33374;i:1;R:33375;}s:19:"1234:hfre.qnfuobneq";a:2:{i:0;R:33374;i:1;R:33375;}s:16:"1234:hfre.qryrgr";a:2:{i:0;R:33374;i:1;R:33375;}s:21:"1234:hfre.qryrgr_fher";a:2:{i:0;R:33374;i:1;R:33375;}s:23:"1234:hfre.abqrfgbqryrgr";a:2:{i:0;R:33374;i:1;R:33375;}s:17:"1234:hfre.qryrgrq";a:2:{i:0;R:33374;i:1;R:33375;}s:13:"1234:hfre.lrf";a:2:{i:0;R:33374;i:1;R:33375;}s:12:"1234:hfre.ab";a:2:{i:0;R:33374;i:1;R:33375;}s:28:"1234:zrqvn.frnepuvasb.cbegny";a:2:{i:0;R:33374;i:1;R:33375;}s:31:"1234:zrqvn.frnepuvasb.choyvfurq";a:2:{i:0;R:33374;i:1;R:33375;}s:30:"1234:zrqvn.frnepuvasb.hcybnqrq";a:2:{i:0;R:33374;i:1;R:33375;}s:30:"1234:zrqvn.frnepuvasb.ynathntr";a:2:{i:0;R:33374;i:1;R:33375;}s:29:"1234:zrqvn.frnepuvasb.yvprafr";a:2:{i:0;R:33374;i:1;R:33375;}s:27:"1234:zrqvn.fbegol.eryrinapr";a:2:{i:0;R:33374;i:1;R:33375;}s:23:"1234:zrqvn.fbegol.gvgyr";a:2:{i:0;R:33374;i:1;R:33375;}s:34:"1234:zrqvn.fbegol.choyvpngvba_qngr";a:2:{i:0;R:33374;i:1;R:33375;}s:31:"1234:zrqvn.fbegol.qngr_hcybnqrq";a:2:{i:0;R:33374;i:1;R:33375;}s:22:"1234:zrqvn.fbegol.hfre";a:2:{i:0;R:33374;i:1;R:33375;}s:24:"1234:zrqvn.fbegol.fbhepr";a:2:{i:0;R:33374;i:1;R:33375;}s:16:"1234:zrqvn.ivqrb";a:2:{i:0;R:33374;i:1;R:33375;}s:16:"1234:zrqvn.nhqvb";a:2:{i:0;R:33374;i:1;R:33375;}s:17:"1234:zrqvn.vzntrf";a:2:{i:0;R:33374;i:1;R:33375;}s:20:"1234:zrqvn.snibevgrf";a:2:{i:0;R:33374;i:1;R:33375;}s:43:"1234:zrqvn.erfhygf_sebz_pbzcyrgr_ercbfvgbel";a:2:{i:0;R:33374;i:1;R:33375;}s:36:"1234:zrqvn.jvxvcrqvn.jnf_hcybnqrq_gb";a:2:{i:0;R:33374;i:1;R:33375;}s:38:"1234:zrqvn.jvxvcrqvn.vf_orvat_hcybnqrq";a:2:{i:0;R:33374;i:1;R:33375;}s:27:"1234:zrqvn.jvxvcrqvn.hcybnq";a:2:{i:0;R:33374;i:1;R:33375;}s:29:"1234:zrqvn.jvxvcrqvn.erhcybnq";a:2:{i:0;R:33374;i:1;R:33375;}s:16:"1234:rqvgbef.nqq";a:2:{i:0;R:33374;i:1;R:33375;}s:21:"1234:rqvgbef.nqq_glcr";a:2:{i:0;R:33374;i:1;R:33375;}s:19:"1234:rqvgbef.qryrgr";a:2:{i:0;R:33374;i:1;R:33375;}s:24:"1234:rqvgbef.qryrgr_glcr";a:2:{i:0;R:33374;i:1;R:33375;}s:17:"1234:rqvgbef.rqvg";a:2:{i:0;R:33374;i:1;R:33375;}s:22:"1234:rqvgbef.rqvg_glcr";a:2:{i:0;R:33374;i:1;R:33375;}s:29:"1234:rqvgbef.erzbir_sebz_yvfg";a:2:{i:0;R:33374;i:1;R:33375;}s:39:"1234:rqvgbef.erzbir_guvf_glcr_sebz_yvfg";a:2:{i:0;R:33374;i:1;R:33375;}s:19:"1234:rqvgbef.frnepu";a:2:{i:0;R:33374;i:1;R:33375;}s:24:"1234:rqvgbef.frnepu_glcr";a:2:{i:0;R:33374;i:1;R:33375;}s:23:"1234:rqvgbef.vf_qryrgrq";a:2:{i:0;R:33374;i:1;R:33375;}s:29:"1234:rqvgbef.vzntr_vf_qryrgrq";a:2:{i:0;R:33374;i:1;R:33375;}s:33:"1234:rqvgbef.qryrgr_abqrglcr_fher";a:2:{i:0;R:33374;i:1;R:33375;}s:9:"1234:sebz";a:2:{i:0;s:34:"out-openimages-verifyemailtemplate";i:1;R:33375;}s:12:"1234:fhowrpg";a:2:{i:0;R:33560;i:1;R:33375;}s:9:"1234:obql";a:2:{i:0;R:33560;i:1;R:33375;}s:29:"1222:uryc-uryc.trggvatfgnegrq";a:2:{i:0;s:22:"out-osm-potlatch2-help";i:1;s:13:"out-osm-0-all";}s:22:"1222:uryc-uryc.jrypbzr";a:2:{i:0;R:33564;i:1;R:33565;}s:31:"1222:uryc-uryc.julbcrafgerrgznc";a:2:{i:0;R:33564;i:1;R:33565;}s:28:"1222:uryc-uryc.npgvirzrzoref";a:2:{i:0;R:33564;i:1;R:33565;}s:25:"1222:uryc-uryc.arjzrzoref";a:2:{i:0;R:33564;i:1;R:33565;}s:24:"1222:uryc-uryc.vagebgrkg";a:2:{i:0;R:33564;i:1;R:33565;}s:27:"1222:uryc-uryc.vagebqhpgvba";a:2:{i:0;R:33564;i:1;R:33565;}s:23:"1222:uryc-uryc.pbagebyf";a:2:{i:0;R:33564;i:1;R:33565;}s:32:"1222:uryc-uryc.vagresnprpbagebyf";a:2:{i:0;R:33564;i:1;R:33565;}s:28:"1222:uryc-uryc.znconpxtebhaq";a:2:{i:0;R:33564;i:1;R:33565;}s:26:"1222:uryc-uryc.pbybhefglyr";a:2:{i:0;R:33564;i:1;R:33565;}s:18:"1222:uryc-uryc.tcf";a:2:{i:0;R:33564;i:1;R:33565;}s:27:"1222:uryc-uryc.perngrbfzznc";a:2:{i:0;R:33564;i:1;R:33565;}s:20:"1222:uryc-uryc.zltcf";a:2:{i:0;R:33564;i:1;R:33565;}s:25:"1222:uryc-uryc.qvfcynltcf";a:2:{i:0;R:33564;i:1;R:33565;}s:23:"1222:uryc-uryc.haqberqb";a:2:{i:0;R:33564;i:1;R:33565;}s:26:"1222:uryc-uryc.znqrzvfgnxr";a:2:{i:0;R:33564;i:1;R:33565;}s:19:"1222:uryc-uryc.uryc";a:2:{i:0;R:33564;i:1;R:33565;}s:30:"1222:uryc-uryc.thvqrvasbzngvba";a:2:{i:0;R:33564;i:1;R:33565;}s:19:"1222:uryc-uryc.fnir";a:2:{i:0;R:33564;i:1;R:33565;}s:29:"1222:uryc-uryc.nqqvatsrngherf";a:2:{i:0;R:33564;i:1;R:33565;}s:33:"1222:uryc-uryc.nqqvatsrngherfgrkg";a:2:{i:0;R:33564;i:1;R:33565;}s:22:"1222:uryc-uryc.rqvgort";a:2:{i:0;R:33564;i:1;R:33565;}s:30:"1222:uryc-uryc.rqvgvatsrngherf";a:2:{i:0;R:33564;i:1;R:33565;}s:34:"1222:uryc-uryc.rqvgvatsrngherfgrkg";a:2:{i:0;R:33564;i:1;R:33565;}s:22:"1222:uryc-uryc.rqvgnqi";a:2:{i:0;R:33564;i:1;R:33565;}s:33:"1222:uryc-uryc.rqvgvatsrngherfnqi";a:2:{i:0;R:33564;i:1;R:33565;}s:37:"1222:uryc-uryc.rqvgvatsrngherfnqigrkg";a:2:{i:0;R:33564;i:1;R:33565;}s:18:"1222:uryc-uryc.gnt";a:2:{i:0;R:33564;i:1;R:33565;}s:30:"1222:uryc-uryc.gnttvatsrngherf";a:2:{i:0;R:33564;i:1;R:33565;}s:34:"1222:uryc-uryc.gnttvatsrngherfgrkg";a:2:{i:0;R:33564;i:1;R:33565;}s:24:"1222:uryc-uryc.fubegphgf";a:2:{i:0;R:33564;i:1;R:33565;}s:32:"1222:uryc-uryc.xrlobneqfubegphgf";a:2:{i:0;R:33564;i:1;R:33565;}s:19:"1222:znva-znva.haqb";a:2:{i:0;s:22:"out-osm-potlatch2-main";i:1;R:33565;}s:19:"1222:znva-znva.erqb";a:2:{i:0;R:33599;i:1;R:33565;}s:25:"1222:znva-znva.onpxtebhaq";a:2:{i:0;R:33599;i:1;R:33565;}s:24:"1222:znva-znva.znc_fglyr";a:2:{i:0;R:33599;i:1;R:33565;}s:24:"1222:znva-znva.tcfohggba";a:2:{i:0;R:33599;i:1;R:33565;}s:23:"1222:znva-znva.tcf_qngn";a:2:{i:0;R:33599;i:1;R:33565;}s:24:"1222:znva-znva.zl_genpxf";a:2:{i:0;R:33599;i:1;R:33565;}s:24:"1222:znva-znva.pyrne_tcf";a:2:{i:0;R:33599;i:1;R:33565;}s:19:"1222:znva-znva.uryc";a:2:{i:0;R:33599;i:1;R:33565;}s:22:"1222:znva-znva.bcgvbaf";a:2:{i:0;R:33599;i:1;R:33565;}s:19:"1222:znva-znva.fnir";a:2:{i:0;R:33599;i:1;R:33565;}s:30:"1222:znva-gnt_ivrjre.qaqcebzcg";a:2:{i:0;R:33599;i:1;R:33565;}s:29:"1222:znva-gbbyobk.qryrgr_abqr";a:2:{i:0;R:33599;i:1;R:33565;}s:29:"1222:znva-gbbyobk.qryrgr_nern";a:2:{i:0;R:33599;i:1;R:33565;}s:28:"1222:znva-gbbyobk.qryrgr_jnl";a:2:{i:0;R:33599;i:1;R:33565;}s:29:"1222:znva-gbbyobk.qryrgr_vgrz";a:2:{i:0;R:33599;i:1;R:33565;}s:35:"1222:znva-gbbyobk.erirefr_qverpgvba";a:2:{i:0;R:33599;i:1;R:33565;}s:27:"1222:znva-gbbyobk.fcyvg_jnl";a:2:{i:0;R:33599;i:1;R:33565;}s:28:"1222:znva-gbbyobk.zretr_jnlf";a:2:{i:0;R:33599;i:1;R:33565;}s:32:"1222:znva-gbbyobk.fgenvtugra_jnl";a:2:{i:0;R:33599;i:1;R:33565;}s:31:"1222:znva-gbbyobk.znxr_pvephyne";a:2:{i:0;R:33599;i:1;R:33565;}s:35:"1222:znva-gbbyobk.znxr_evtug_natyrq";a:2:{i:0;R:33599;i:1;R:33565;}s:38:"1222:znva-gbbyobk.perngr_cneenyyry_jnl";a:2:{i:0;R:33599;i:1;R:33565;}s:26:"1222:znva-bnhgu.tbgyvaxobk";a:2:{i:0;R:33599;i:1;R:33565;}s:26:"1222:znva-bnhgu.nhgubevmrq";a:2:{i:0;R:33599;i:1;R:33565;}s:27:"1222:znva-bnhgu.qravrqynory";a:2:{i:0;R:33599;i:1;R:33565;}s:26:"1222:znva-bnhgu.erzrzorezr";a:2:{i:0;R:33599;i:1;R:33565;}s:24:"1222:znva-bnhgu.crezsnvy";a:2:{i:0;R:33599;i:1;R:33565;}s:24:"1222:znva-bnhgu.grzcsnvy";a:2:{i:0;R:33599;i:1;R:33565;}s:31:"1222:znva-bnhgu.gelnpprffohggba";a:2:{i:0;R:33599;i:1;R:33565;}s:28:"1222:znva-bnhgu.pnapryohggba";a:2:{i:0;R:33599;i:1;R:33565;}s:30:"1222:znva-fnir.rqvgqrfpevcgvba";a:2:{i:0;R:33599;i:1;R:33565;}s:34:"1222:znva-fglyrfryrpgbe.rqvgohggba";a:2:{i:0;R:33599;i:1;R:33565;}s:32:"1222:znva-onpxtebhaqfryrpgbe.qvz";a:2:{i:0;R:33599;i:1;R:33565;}s:36:"1222:znva-onpxtebhaqfryrpgbe.funecra";a:2:{i:0;R:33599;i:1;R:33565;}s:39:"1222:znva-onpxtebhaqfryrpgbe.rqvgohggba";a:2:{i:0;R:33599;i:1;R:33565;}s:41:"1222:znva-onpxtebhaqfryrpgbe.irpgbeohggba";a:2:{i:0;R:33599;i:1;R:33565;}s:25:"1222:znva-bcgvbaf.gopurpx";a:2:{i:0;R:33599;i:1;R:33565;}s:29:"1222:znva-bcgvbaf.phefbepurpx";a:2:{i:0;R:33599;i:1;R:33565;}s:20:"1222:znva-bcgvbaf.bx";a:2:{i:0;R:33599;i:1;R:33565;}s:13:"1222:ugzy.qve";a:2:{i:0;s:12:"out-osm-site";i:1;R:33565;}s:26:"1222:gvzr.sbezngf.sevraqyl";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:npgvirerpbeq.zbqryf.npy";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:npgvirerpbeq.zbqryf.punatrfrg";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:npgvirerpbeq.zbqryf.punatrfrg_gnt";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:npgvirerpbeq.zbqryf.pbhagel";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:npgvirerpbeq.zbqryf.qvnel_pbzzrag";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:npgvirerpbeq.zbqryf.qvnel_ragel";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:npgvirerpbeq.zbqryf.sevraq";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:npgvirerpbeq.zbqryf.ynathntr";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:npgvirerpbeq.zbqryf.zrffntr";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:npgvirerpbeq.zbqryf.abqr";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:npgvirerpbeq.zbqryf.abqr_gnt";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:npgvirerpbeq.zbqryf.abgvsvre";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:npgvirerpbeq.zbqryf.byq_abqr";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:npgvirerpbeq.zbqryf.byq_abqr_gnt";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:npgvirerpbeq.zbqryf.byq_eryngvba";a:2:{i:0;R:33640;i:1;R:33565;}s:44:"1222:npgvirerpbeq.zbqryf.byq_eryngvba_zrzore";a:2:{i:0;R:33640;i:1;R:33565;}s:41:"1222:npgvirerpbeq.zbqryf.byq_eryngvba_gnt";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:npgvirerpbeq.zbqryf.byq_jnl";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:npgvirerpbeq.zbqryf.byq_jnl_abqr";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:npgvirerpbeq.zbqryf.byq_jnl_gnt";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:npgvirerpbeq.zbqryf.eryngvba";a:2:{i:0;R:33640;i:1;R:33565;}s:40:"1222:npgvirerpbeq.zbqryf.eryngvba_zrzore";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:npgvirerpbeq.zbqryf.eryngvba_gnt";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:npgvirerpbeq.zbqryf.frffvba";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:npgvirerpbeq.zbqryf.genpr";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:npgvirerpbeq.zbqryf.genprcbvag";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:npgvirerpbeq.zbqryf.genprgnt";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:npgvirerpbeq.zbqryf.hfre";a:2:{i:0;R:33640;i:1;R:33565;}s:40:"1222:npgvirerpbeq.zbqryf.hfre_cersrerapr";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:npgvirerpbeq.zbqryf.hfre_gbxra";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:npgvirerpbeq.zbqryf.jnl";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:npgvirerpbeq.zbqryf.jnl_abqr";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:npgvirerpbeq.zbqryf.jnl_gnt";a:2:{i:0;R:33640;i:1;R:33565;}s:47:"1222:npgvirerpbeq.nggevohgrf.qvnel_pbzzrag.obql";a:2:{i:0;R:33640;i:1;R:33565;}s:45:"1222:npgvirerpbeq.nggevohgrf.qvnel_ragel.hfre";a:2:{i:0;R:33640;i:1;R:33565;}s:46:"1222:npgvirerpbeq.nggevohgrf.qvnel_ragel.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:49:"1222:npgvirerpbeq.nggevohgrf.qvnel_ragel.yngvghqr";a:2:{i:0;R:33640;i:1;R:33565;}s:50:"1222:npgvirerpbeq.nggevohgrf.qvnel_ragel.ybatvghqr";a:2:{i:0;R:33640;i:1;R:33565;}s:49:"1222:npgvirerpbeq.nggevohgrf.qvnel_ragel.ynathntr";a:2:{i:0;R:33640;i:1;R:33565;}s:40:"1222:npgvirerpbeq.nggevohgrf.sevraq.hfre";a:2:{i:0;R:33640;i:1;R:33565;}s:42:"1222:npgvirerpbeq.nggevohgrf.sevraq.sevraq";a:2:{i:0;R:33640;i:1;R:33565;}s:39:"1222:npgvirerpbeq.nggevohgrf.genpr.hfre";a:2:{i:0;R:33640;i:1;R:33565;}s:42:"1222:npgvirerpbeq.nggevohgrf.genpr.ivfvoyr";a:2:{i:0;R:33640;i:1;R:33565;}s:39:"1222:npgvirerpbeq.nggevohgrf.genpr.anzr";a:2:{i:0;R:33640;i:1;R:33565;}s:39:"1222:npgvirerpbeq.nggevohgrf.genpr.fvmr";a:2:{i:0;R:33640;i:1;R:33565;}s:43:"1222:npgvirerpbeq.nggevohgrf.genpr.yngvghqr";a:2:{i:0;R:33640;i:1;R:33565;}s:44:"1222:npgvirerpbeq.nggevohgrf.genpr.ybatvghqr";a:2:{i:0;R:33640;i:1;R:33565;}s:41:"1222:npgvirerpbeq.nggevohgrf.genpr.choyvp";a:2:{i:0;R:33640;i:1;R:33565;}s:46:"1222:npgvirerpbeq.nggevohgrf.genpr.qrfpevcgvba";a:2:{i:0;R:33640;i:1;R:33565;}s:43:"1222:npgvirerpbeq.nggevohgrf.zrffntr.fraqre";a:2:{i:0;R:33640;i:1;R:33565;}s:42:"1222:npgvirerpbeq.nggevohgrf.zrffntr.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:41:"1222:npgvirerpbeq.nggevohgrf.zrffntr.obql";a:2:{i:0;R:33640;i:1;R:33565;}s:46:"1222:npgvirerpbeq.nggevohgrf.zrffntr.erpvcvrag";a:2:{i:0;R:33640;i:1;R:33565;}s:39:"1222:npgvirerpbeq.nggevohgrf.hfre.rznvy";a:2:{i:0;R:33640;i:1;R:33565;}s:40:"1222:npgvirerpbeq.nggevohgrf.hfre.npgvir";a:2:{i:0;R:33640;i:1;R:33565;}s:46:"1222:npgvirerpbeq.nggevohgrf.hfre.qvfcynl_anzr";a:2:{i:0;R:33640;i:1;R:33565;}s:45:"1222:npgvirerpbeq.nggevohgrf.hfre.qrfpevcgvba";a:2:{i:0;R:33640;i:1;R:33565;}s:43:"1222:npgvirerpbeq.nggevohgrf.hfre.ynathntrf";a:2:{i:0;R:33640;i:1;R:33565;}s:44:"1222:npgvirerpbeq.nggevohgrf.hfre.cnff_pelcg";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:cevagnoyr_anzr.jvgu_vq";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:cevagnoyr_anzr.jvgu_irefvba";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:cevagnoyr_anzr.jvgu_anzr";a:2:{i:0;R:33640;i:1;R:33565;}s:19:"1222:rqvgbe.qrsnhyg";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:rqvgbe.cbgyngpu.anzr";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:rqvgbe.cbgyngpu.qrfpevcgvba";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:rqvgbe.cbgyngpu2.anzr";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:rqvgbe.cbgyngpu2.qrfpevcgvba";a:2:{i:0;R:33640;i:1;R:33565;}s:23:"1222:rqvgbe.erzbgr.anzr";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:rqvgbe.erzbgr.qrfpevcgvba";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:oebjfr.punatrfrg.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:oebjfr.punatrfrg.punatrfrg";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:oebjfr.punatrfrg.qbjaybnq";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:oebjfr.punatrfrg.punatrfrgkzy";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:oebjfr.punatrfrg.bfzpunatrkzy";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:oebjfr.punatrfrg.srrq.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:40:"1222:oebjfr.punatrfrg.srrq.gvgyr_pbzzrag";a:2:{i:0;R:33640;i:1;R:33565;}s:39:"1222:oebjfr.anivtngvba.cntvat.hfre.ceri";a:2:{i:0;R:33640;i:1;R:33565;}s:39:"1222:oebjfr.anivtngvba.cntvat.hfre.arkg";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:oebjfr.anivtngvba.cntvat.nyy.ceri";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:oebjfr.anivtngvba.cntvat.nyy.arkg";a:2:{i:0;R:33640;i:1;R:33565;}s:50:"1222:oebjfr.anivtngvba.hfre.anzr_punatrfrg_gbbygvc";a:2:{i:0;R:33640;i:1;R:33565;}s:50:"1222:oebjfr.anivtngvba.hfre.ceri_punatrfrg_gbbygvc";a:2:{i:0;R:33640;i:1;R:33565;}s:50:"1222:oebjfr.anivtngvba.hfre.arkg_punatrfrg_gbbygvc";a:2:{i:0;R:33640;i:1;R:33565;}s:44:"1222:oebjfr.anivtngvba.nyy.ceri_abqr_gbbygvc";a:2:{i:0;R:33640;i:1;R:33565;}s:44:"1222:oebjfr.anivtngvba.nyy.arkg_abqr_gbbygvc";a:2:{i:0;R:33640;i:1;R:33565;}s:43:"1222:oebjfr.anivtngvba.nyy.ceri_jnl_gbbygvc";a:2:{i:0;R:33640;i:1;R:33565;}s:43:"1222:oebjfr.anivtngvba.nyy.arkg_jnl_gbbygvc";a:2:{i:0;R:33640;i:1;R:33565;}s:48:"1222:oebjfr.anivtngvba.nyy.ceri_eryngvba_gbbygvc";a:2:{i:0;R:33640;i:1;R:33565;}s:48:"1222:oebjfr.anivtngvba.nyy.arkg_eryngvba_gbbygvc";a:2:{i:0;R:33640;i:1;R:33565;}s:49:"1222:oebjfr.anivtngvba.nyy.ceri_punatrfrg_gbbygvc";a:2:{i:0;R:33640;i:1;R:33565;}s:49:"1222:oebjfr.anivtngvba.nyy.arkg_punatrfrg_gbbygvc";a:2:{i:0;R:33640;i:1;R:33565;}s:40:"1222:oebjfr.punatrfrg_qrgnvyf.perngrq_ng";a:2:{i:0;R:33640;i:1;R:33565;}s:39:"1222:oebjfr.punatrfrg_qrgnvyf.pybfrq_ng";a:2:{i:0;R:33640;i:1;R:33565;}s:40:"1222:oebjfr.punatrfrg_qrgnvyf.orybatf_gb";a:2:{i:0;R:33640;i:1;R:33565;}s:42:"1222:oebjfr.punatrfrg_qrgnvyf.obhaqvat_obk";a:2:{i:0;R:33640;i:1;R:33565;}s:45:"1222:oebjfr.punatrfrg_qrgnvyf.ab_obhaqvat_obk";a:2:{i:0;R:33640;i:1;R:33565;}s:43:"1222:oebjfr.punatrfrg_qrgnvyf.fubj_nern_obk";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:oebjfr.punatrfrg_qrgnvyf.obk";a:2:{i:0;R:33640;i:1;R:33565;}s:39:"1222:oebjfr.punatrfrg_qrgnvyf.unf_abqrf";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:oebjfr.punatrfrg_qrgnvyf.unf_jnlf";a:2:{i:0;R:33640;i:1;R:33565;}s:43:"1222:oebjfr.punatrfrg_qrgnvyf.unf_eryngvbaf";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:oebjfr.pbzzba_qrgnvyf.rqvgrq_ng";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:oebjfr.pbzzba_qrgnvyf.rqvgrq_ol";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:oebjfr.pbzzba_qrgnvyf.qryrgrq_ng";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:oebjfr.pbzzba_qrgnvyf.qryrgrq_ol";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:oebjfr.pbzzba_qrgnvyf.irefvba";a:2:{i:0;R:33640;i:1;R:33565;}s:39:"1222:oebjfr.pbzzba_qrgnvyf.va_punatrfrg";a:2:{i:0;R:33640;i:1;R:33565;}s:44:"1222:oebjfr.pbzzba_qrgnvyf.punatrfrg_pbzzrag";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:oebjfr.pbagnvavat_eryngvba.ragel";a:2:{i:0;R:33640;i:1;R:33565;}s:42:"1222:oebjfr.pbagnvavat_eryngvba.ragel_ebyr";a:2:{i:0;R:33640;i:1;R:33565;}s:23:"1222:oebjfr.znc.ybnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:23:"1222:oebjfr.znc.qryrgrq";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:oebjfr.znc.ynetre.nern";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:oebjfr.znc.ynetre.abqr";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:oebjfr.znc.ynetre.jnl";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:oebjfr.znc.ynetre.eryngvba";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:oebjfr.znc.rqvg.nern";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:oebjfr.znc.rqvg.abqr";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:oebjfr.znc.rqvg.jnl";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:oebjfr.znc.rqvg.eryngvba";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:oebjfr.abqr_qrgnvyf.pbbeqvangrf";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:oebjfr.abqr_qrgnvyf.cneg_bs";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:oebjfr.abqr_uvfgbel.abqr_uvfgbel";a:2:{i:0;R:33640;i:1;R:33565;}s:43:"1222:oebjfr.abqr_uvfgbel.abqr_uvfgbel_gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:oebjfr.abqr_uvfgbel.qbjaybnq";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:oebjfr.abqr_uvfgbel.qbjaybnq_kzy";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:oebjfr.abqr_uvfgbel.ivrj_qrgnvyf";a:2:{i:0;R:33640;i:1;R:33565;}s:21:"1222:oebjfr.abqr.abqr";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:oebjfr.abqr.abqr_gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:oebjfr.abqr.qbjaybnq";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:oebjfr.abqr.qbjaybnq_kzy";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:oebjfr.abqr.ivrj_uvfgbel";a:2:{i:0;R:33640;i:1;R:33565;}s:21:"1222:oebjfr.abqr.rqvg";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:oebjfr.abg_sbhaq.fbeel";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:oebjfr.abg_sbhaq.glcr.abqr";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:oebjfr.abg_sbhaq.glcr.jnl";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:oebjfr.abg_sbhaq.glcr.eryngvba";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:oebjfr.abg_sbhaq.glcr.punatrfrg";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:oebjfr.gvzrbhg.fbeel";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:oebjfr.gvzrbhg.glcr.abqr";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:oebjfr.gvzrbhg.glcr.jnl";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:oebjfr.gvzrbhg.glcr.eryngvba";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:oebjfr.gvzrbhg.glcr.punatrfrg";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:oebjfr.cntvat_ani.fubjvat_cntr";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:oebjfr.cntvat_ani.bs";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:oebjfr.erqnpgrq.erqnpgvba";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:oebjfr.erqnpgrq.zrffntr_ugzy";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:oebjfr.erqnpgrq.glcr.abqr";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:oebjfr.erqnpgrq.glcr.jnl";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:oebjfr.erqnpgrq.glcr.eryngvba";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:oebjfr.eryngvba_qrgnvyf.zrzoref";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:oebjfr.eryngvba_qrgnvyf.cneg_bs";a:2:{i:0;R:33640;i:1;R:33565;}s:45:"1222:oebjfr.eryngvba_uvfgbel.eryngvba_uvfgbel";a:2:{i:0;R:33640;i:1;R:33565;}s:51:"1222:oebjfr.eryngvba_uvfgbel.eryngvba_uvfgbel_gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:oebjfr.eryngvba_uvfgbel.qbjaybnq";a:2:{i:0;R:33640;i:1;R:33565;}s:41:"1222:oebjfr.eryngvba_uvfgbel.qbjaybnq_kzy";a:2:{i:0;R:33640;i:1;R:33565;}s:41:"1222:oebjfr.eryngvba_uvfgbel.ivrj_qrgnvyf";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:oebjfr.eryngvba_zrzore.ragel";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:oebjfr.eryngvba_zrzore.ragel_ebyr";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:oebjfr.eryngvba_zrzore.glcr.abqr";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:oebjfr.eryngvba_zrzore.glcr.jnl";a:2:{i:0;R:33640;i:1;R:33565;}s:41:"1222:oebjfr.eryngvba_zrzore.glcr.eryngvba";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:oebjfr.eryngvba.eryngvba";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:oebjfr.eryngvba.eryngvba_gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:oebjfr.eryngvba.qbjaybnq";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:oebjfr.eryngvba.qbjaybnq_kzy";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:oebjfr.eryngvba.ivrj_uvfgbel";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:oebjfr.fgneg.ivrj_qngn";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:oebjfr.fgneg.znahnyyl_fryrpg";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:oebjfr.fgneg_ewf.qngn_ynlre_anzr";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:oebjfr.fgneg_ewf.qngn_senzr_gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:oebjfr.fgneg_ewf.mbbz_be_fryrpg";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:oebjfr.fgneg_ewf.qent_n_obk";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:oebjfr.fgneg_ewf.znahnyyl_fryrpg";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:oebjfr.fgneg_ewf.uvqr_nernf";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:oebjfr.fgneg_ewf.fubj_nernf";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:oebjfr.fgneg_ewf.ybnqrq_na_nern_jvgu_ahz_srngherf";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:oebjfr.fgneg_ewf.ybnq_qngn";a:2:{i:0;R:33640;i:1;R:33565;}s:41:"1222:oebjfr.fgneg_ewf.hanoyr_gb_ybnq_fvmr";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:oebjfr.fgneg_ewf.ybnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:oebjfr.fgneg_ewf.fubj_uvfgbel";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:oebjfr.fgneg_ewf.jnvg";a:2:{i:0;R:33640;i:1;R:33565;}s:41:"1222:oebjfr.fgneg_ewf.uvfgbel_sbe_srngher";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:oebjfr.fgneg_ewf.qrgnvyf";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:oebjfr.fgneg_ewf.cevingr_hfre";a:2:{i:0;R:33640;i:1;R:33565;}s:49:"1222:oebjfr.fgneg_ewf.rqvgrq_ol_hfre_ng_gvzrfgnzc";a:2:{i:0;R:33640;i:1;R:33565;}s:41:"1222:oebjfr.fgneg_ewf.bowrpg_yvfg.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:oebjfr.fgneg_ewf.bowrpg_yvfg.onpx";a:2:{i:0;R:33640;i:1;R:33565;}s:43:"1222:oebjfr.fgneg_ewf.bowrpg_yvfg.glcr.abqr";a:2:{i:0;R:33640;i:1;R:33565;}s:42:"1222:oebjfr.fgneg_ewf.bowrpg_yvfg.glcr.jnl";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:oebjfr.fgneg_ewf.bowrpg_yvfg.ncv";a:2:{i:0;R:33640;i:1;R:33565;}s:41:"1222:oebjfr.fgneg_ewf.bowrpg_yvfg.qrgnvyf";a:2:{i:0;R:33640;i:1;R:33565;}s:52:"1222:oebjfr.fgneg_ewf.bowrpg_yvfg.fryrpgrq.glcr.abqr";a:2:{i:0;R:33640;i:1;R:33565;}s:51:"1222:oebjfr.fgneg_ewf.bowrpg_yvfg.fryrpgrq.glcr.jnl";a:2:{i:0;R:33640;i:1;R:33565;}s:51:"1222:oebjfr.fgneg_ewf.bowrpg_yvfg.uvfgbel.glcr.abqr";a:2:{i:0;R:33640;i:1;R:33565;}s:50:"1222:oebjfr.fgneg_ewf.bowrpg_yvfg.uvfgbel.glcr.jnl";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:oebjfr.gnt_qrgnvyf.gntf";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:oebjfr.gnt_qrgnvyf.jvxv_yvax.xrl";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:oebjfr.gnt_qrgnvyf.jvxv_yvax.gnt";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:oebjfr.gnt_qrgnvyf.jvxvcrqvn_yvax";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:oebjfr.jnl_qrgnvyf.abqrf";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:oebjfr.jnl_qrgnvyf.cneg_bs";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:oebjfr.jnl_qrgnvyf.nyfb_cneg_bs";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:oebjfr.jnl_uvfgbel.jnl_uvfgbel";a:2:{i:0;R:33640;i:1;R:33565;}s:41:"1222:oebjfr.jnl_uvfgbel.jnl_uvfgbel_gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:oebjfr.jnl_uvfgbel.qbjaybnq";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:oebjfr.jnl_uvfgbel.qbjaybnq_kzy";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:oebjfr.jnl_uvfgbel.ivrj_qrgnvyf";a:2:{i:0;R:33640;i:1;R:33565;}s:19:"1222:oebjfr.jnl.jnl";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:oebjfr.jnl.jnl_gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:oebjfr.jnl.qbjaybnq";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:oebjfr.jnl.qbjaybnq_kzy";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:oebjfr.jnl.ivrj_uvfgbel";a:2:{i:0;R:33640;i:1;R:33565;}s:20:"1222:oebjfr.jnl.rqvg";a:2:{i:0;R:33640;i:1;R:33565;}s:48:"1222:punatrfrg.punatrfrg_cntvat_ani.fubjvat_cntr";a:2:{i:0;R:33640;i:1;R:33565;}s:40:"1222:punatrfrg.punatrfrg_cntvat_ani.arkg";a:2:{i:0;R:33640;i:1;R:33565;}s:44:"1222:punatrfrg.punatrfrg_cntvat_ani.cerivbhf";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:punatrfrg.punatrfrg.vq";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:punatrfrg.punatrfrg.fgvyy_rqvgvat";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:punatrfrg.punatrfrg.nabalzbhf";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:punatrfrg.punatrfrg.ab_pbzzrag";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:punatrfrg.punatrfrg.ab_rqvgf";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:punatrfrg.punatrfrg.fubj_nern_obk";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:punatrfrg.punatrfrg.ovt_nern";a:2:{i:0;R:33640;i:1;R:33565;}s:47:"1222:punatrfrg.punatrfrg.ivrj_punatrfrg_qrgnvyf";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:punatrfrg.punatrfrgf.vq";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:punatrfrg.punatrfrgf.fnirq_ng";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:punatrfrg.punatrfrgf.hfre";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:punatrfrg.punatrfrgf.pbzzrag";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:punatrfrg.punatrfrgf.nern";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:punatrfrg.yvfg.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:punatrfrg.yvfg.gvgyr_hfre";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:punatrfrg.yvfg.gvgyr_oobk";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:punatrfrg.yvfg.gvgyr_hfre_oobk";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:punatrfrg.yvfg.gvgyr_sevraq";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:punatrfrg.yvfg.gvgyr_arneol";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:punatrfrg.yvfg.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:punatrfrg.yvfg.urnqvat_hfre";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:punatrfrg.yvfg.urnqvat_oobk";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:punatrfrg.yvfg.urnqvat_hfre_oobk";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:punatrfrg.yvfg.urnqvat_sevraq";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:punatrfrg.yvfg.urnqvat_arneol";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:punatrfrg.yvfg.qrfpevcgvba";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:punatrfrg.yvfg.qrfpevcgvba_hfre";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:punatrfrg.yvfg.qrfpevcgvba_oobk";a:2:{i:0;R:33640;i:1;R:33565;}s:41:"1222:punatrfrg.yvfg.qrfpevcgvba_hfre_oobk";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:punatrfrg.yvfg.qrfpevcgvba_sevraq";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:punatrfrg.yvfg.qrfpevcgvba_arneol";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:punatrfrg.gvzrbhg.fbeel";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:qvnel_ragel.arj.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:qvnel_ragel.yvfg.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:qvnel_ragel.yvfg.gvgyr_sevraqf";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:qvnel_ragel.yvfg.gvgyr_arneol";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:qvnel_ragel.yvfg.hfre_gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:39:"1222:qvnel_ragel.yvfg.va_ynathntr_gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:qvnel_ragel.yvfg.arj";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:qvnel_ragel.yvfg.arj_gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:qvnel_ragel.yvfg.ab_ragevrf";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:qvnel_ragel.yvfg.erprag_ragevrf";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:qvnel_ragel.yvfg.byqre_ragevrf";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:qvnel_ragel.yvfg.arjre_ragevrf";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:qvnel_ragel.rqvg.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:qvnel_ragel.rqvg.fhowrpg";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:qvnel_ragel.rqvg.obql";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:qvnel_ragel.rqvg.ynathntr";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:qvnel_ragel.rqvg.ybpngvba";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:qvnel_ragel.rqvg.yngvghqr";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:qvnel_ragel.rqvg.ybatvghqr";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:qvnel_ragel.rqvg.hfr_znc_yvax";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:qvnel_ragel.rqvg.fnir_ohggba";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:qvnel_ragel.rqvg.znexre_grkg";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:qvnel_ragel.ivrj.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:qvnel_ragel.ivrj.hfre_gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:qvnel_ragel.ivrj.yrnir_n_pbzzrag";a:2:{i:0;R:33640;i:1;R:33565;}s:46:"1222:qvnel_ragel.ivrj.ybtva_gb_yrnir_n_pbzzrag";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:qvnel_ragel.ivrj.ybtva";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:qvnel_ragel.ivrj.fnir_ohggba";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:qvnel_ragel.ab_fhpu_ragel.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:qvnel_ragel.ab_fhpu_ragel.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:qvnel_ragel.ab_fhpu_ragel.obql";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:qvnel_ragel.qvnel_ragel.cbfgrq_ol";a:2:{i:0;R:33640;i:1;R:33565;}s:41:"1222:qvnel_ragel.qvnel_ragel.pbzzrag_yvax";a:2:{i:0;R:33640;i:1;R:33565;}s:39:"1222:qvnel_ragel.qvnel_ragel.ercyl_yvax";a:2:{i:0;R:33640;i:1;R:33565;}s:42:"1222:qvnel_ragel.qvnel_ragel.pbzzrag_pbhag";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:qvnel_ragel.qvnel_ragel.rqvg_yvax";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:qvnel_ragel.qvnel_ragel.uvqr_yvax";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:qvnel_ragel.qvnel_ragel.pbasvez";a:2:{i:0;R:33640;i:1;R:33565;}s:43:"1222:qvnel_ragel.qvnel_pbzzrag.pbzzrag_sebz";a:2:{i:0;R:33640;i:1;R:33565;}s:40:"1222:qvnel_ragel.qvnel_pbzzrag.uvqr_yvax";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:qvnel_ragel.qvnel_pbzzrag.pbasvez";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:qvnel_ragel.ybpngvba.ybpngvba";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:qvnel_ragel.ybpngvba.ivrj";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:qvnel_ragel.ybpngvba.rqvg";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:qvnel_ragel.srrq.hfre.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:qvnel_ragel.srrq.hfre.qrfpevcgvba";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:qvnel_ragel.srrq.ynathntr.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:42:"1222:qvnel_ragel.srrq.ynathntr.qrfpevcgvba";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:qvnel_ragel.srrq.nyy.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:qvnel_ragel.srrq.nyy.qrfpevcgvba";a:2:{i:0;R:33640;i:1;R:33565;}s:42:"1222:qvnel_ragel.pbzzragf.unf_pbzzragrq_ba";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:qvnel_ragel.pbzzragf.cbfg";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:qvnel_ragel.pbzzragf.jura";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:qvnel_ragel.pbzzragf.pbzzrag";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:qvnel_ragel.pbzzragf.ntb";a:2:{i:0;R:33640;i:1;R:33565;}s:40:"1222:qvnel_ragel.pbzzragf.arjre_pbzzragf";a:2:{i:0;R:33640;i:1;R:33565;}s:40:"1222:qvnel_ragel.pbzzragf.byqre_pbzzragf";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:rkcbeg.fgneg.nern_gb_rkcbeg";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:rkcbeg.fgneg.znahnyyl_fryrpg";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:rkcbeg.fgneg.sbezng_gb_rkcbeg";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:rkcbeg.fgneg.bfz_kzy_qngn";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:rkcbeg.fgneg.znc_vzntr";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:rkcbeg.fgneg.rzorqqnoyr_ugzy";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:rkcbeg.fgneg.yvprapr";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:rkcbeg.fgneg.rkcbeg_qrgnvyf";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:rkcbeg.fgneg.gbb_ynetr.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:rkcbeg.fgneg.gbb_ynetr.obql";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:rkcbeg.fgneg.bcgvbaf";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:rkcbeg.fgneg.sbezng";a:2:{i:0;R:33640;i:1;R:33565;}s:23:"1222:rkcbeg.fgneg.fpnyr";a:2:{i:0;R:33640;i:1;R:33565;}s:21:"1222:rkcbeg.fgneg.znk";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:rkcbeg.fgneg.vzntr_fvmr";a:2:{i:0;R:33640;i:1;R:33565;}s:22:"1222:rkcbeg.fgneg.mbbz";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:rkcbeg.fgneg.nqq_znexre";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:rkcbeg.fgneg.yngvghqr";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:rkcbeg.fgneg.ybatvghqr";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:rkcbeg.fgneg.bhgchg";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:rkcbeg.fgneg.cnfgr_ugzy";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:rkcbeg.fgneg.rkcbeg_ohggba";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:rkcbeg.fgneg_ewf.rkcbeg";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:rkcbeg.fgneg_ewf.qent_n_obk";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:rkcbeg.fgneg_ewf.znahnyyl_fryrpg";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:rkcbeg.fgneg_ewf.pyvpx_nqq_znexre";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:rkcbeg.fgneg_ewf.punatr_znexre";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:rkcbeg.fgneg_ewf.nqq_znexre";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:rkcbeg.fgneg_ewf.ivrj_ynetre_znc";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:trbpbqre.frnepu.gvgyr.yngyba";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:trbpbqre.frnepu.gvgyr.hf_cbfgpbqr";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:trbpbqre.frnepu.gvgyr.hx_cbfgpbqr";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:trbpbqre.frnepu.gvgyr.pn_cbfgpbqr";a:2:{i:0;R:33640;i:1;R:33565;}s:41:"1222:trbpbqre.frnepu.gvgyr.bfz_anzrsvaqre";a:2:{i:0;R:33640;i:1;R:33565;}s:40:"1222:trbpbqre.frnepu.gvgyr.bfz_abzvangvz";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:trbpbqre.frnepu.gvgyr.trbanzrf";a:2:{i:0;R:33640;i:1;R:33565;}s:42:"1222:trbpbqre.frnepu_bfz_anzrsvaqre.cersvk";a:2:{i:0;R:33640;i:1;R:33565;}s:48:"1222:trbpbqre.frnepu_bfz_anzrsvaqre.fhssvk_cynpr";a:2:{i:0;R:33640;i:1;R:33565;}s:49:"1222:trbpbqre.frnepu_bfz_anzrsvaqre.fhssvk_cnerag";a:2:{i:0;R:33640;i:1;R:33565;}s:49:"1222:trbpbqre.frnepu_bfz_anzrsvaqre.fhssvk_fhoheo";a:2:{i:0;R:33640;i:1;R:33565;}s:48:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk_sbezng";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nrebjnl.nrebqebzr";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nrebjnl.nceba";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nrebjnl.tngr";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nrebjnl.uryvcnq";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nrebjnl.ehajnl";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nrebjnl.gnkvjnl";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nrebjnl.grezvany";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.nvecbeg";a:2:{i:0;R:33640;i:1;R:33565;}s:61:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.negf_prager";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.negjbex";a:2:{i:0;R:33640;i:1;R:33565;}s:53:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.ngz";a:2:{i:0;R:33640;i:1;R:33565;}s:60:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.nhqvgbevhz";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.onax";a:2:{i:0;R:33640;i:1;R:33565;}s:53:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.one";a:2:{i:0;R:33640;i:1;R:33565;}s:53:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.ood";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.orapu";a:2:{i:0;R:33640;i:1;R:33565;}s:65:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.ovplpyr_cnexvat";a:2:{i:0;R:33640;i:1;R:33565;}s:64:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.ovplpyr_eragny";a:2:{i:0;R:33640;i:1;R:33565;}s:60:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.ovretnegra";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.oebgury";a:2:{i:0;R:33640;i:1;R:33565;}s:66:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.ohernh_qr_punatr";a:2:{i:0;R:33640;i:1;R:33565;}s:61:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.ohf_fgngvba";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.pnsr";a:2:{i:0;R:33640;i:1;R:33565;}s:60:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.pne_eragny";a:2:{i:0;R:33640;i:1;R:33565;}s:61:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.pne_funevat";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.pne_jnfu";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.pnfvab";a:2:{i:0;R:33640;i:1;R:33565;}s:66:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.punetvat_fgngvba";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.pvarzn";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.pyvavp";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.pyho";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.pbyyrtr";a:2:{i:0;R:33640;i:1;R:33565;}s:66:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.pbzzhavgl_prager";a:2:{i:0;R:33640;i:1;R:33565;}s:60:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.pbhegubhfr";a:2:{i:0;R:33640;i:1;R:33565;}s:61:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.perzngbevhz";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.qragvfg";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.qbpgbef";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.qbezvgbel";a:2:{i:0;R:33640;i:1;R:33565;}s:64:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.qevaxvat_jngre";a:2:{i:0;R:33640;i:1;R:33565;}s:64:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.qevivat_fpubby";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.rzonffl";a:2:{i:0;R:33640;i:1;R:33565;}s:65:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.rzretrapl_cubar";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.snfg_sbbq";a:2:{i:0;R:33640;i:1;R:33565;}s:64:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.sreel_grezvany";a:2:{i:0;R:33640;i:1;R:33565;}s:62:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.sver_ulqenag";a:2:{i:0;R:33640;i:1;R:33565;}s:62:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.sver_fgngvba";a:2:{i:0;R:33640;i:1;R:33565;}s:60:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.sbbq_pbheg";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.sbhagnva";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.shry";a:2:{i:0;R:33640;i:1;R:33565;}s:60:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.tenir_lneq";a:2:{i:0;R:33640;i:1;R:33565;}s:53:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.tlz";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.unyy";a:2:{i:0;R:33640;i:1;R:33565;}s:63:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.urnygu_prager";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.ubfcvgny";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.ubgry";a:2:{i:0;R:33640;i:1;R:33565;}s:63:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.uhagvat_fgnaq";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.vpr_pernz";a:2:{i:0;R:33640;i:1;R:33565;}s:62:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.xvaqretnegra";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.yvoenel";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.znexrg";a:2:{i:0;R:33640;i:1;R:33565;}s:61:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.znexrgcynpr";a:2:{i:0;R:33640;i:1;R:33565;}s:65:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.zbhagnva_erfphr";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.avtugpyho";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.ahefrel";a:2:{i:0;R:33640;i:1;R:33565;}s:62:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.ahefvat_ubzr";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.bssvpr";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.cnex";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.cnexvat";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.cuneznpl";a:2:{i:0;R:33640;i:1;R:33565;}s:66:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.cynpr_bs_jbefuvc";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.cbyvpr";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.cbfg_obk";a:2:{i:0;R:33640;i:1;R:33565;}s:61:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.cbfg_bssvpr";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.cerfpubby";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.cevfba";a:2:{i:0;R:33640;i:1;R:33565;}s:53:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.cho";a:2:{i:0;R:33640;i:1;R:33565;}s:65:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.choyvp_ohvyqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:63:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.choyvp_znexrg";a:2:{i:0;R:33640;i:1;R:33565;}s:64:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.erprcgvba_nern";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.erplpyvat";a:2:{i:0;R:33640;i:1;R:33565;}s:60:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.erfgnhenag";a:2:{i:0;R:33640;i:1;R:33565;}s:65:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.ergverzrag_ubzr";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.fnhan";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.fpubby";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.furygre";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.fubc";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.fubccvat";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.fubjre";a:2:{i:0;R:33640;i:1;R:33565;}s:63:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.fbpvny_prager";a:2:{i:0;R:33640;i:1;R:33565;}s:61:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.fbpvny_pyho";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.fghqvb";a:2:{i:0;R:33640;i:1;R:33565;}s:61:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.fhcreznexrg";a:2:{i:0;R:33640;i:1;R:33565;}s:63:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.fjvzzvat_cbby";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.gnkv";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.gryrcubar";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.gurnger";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.gbvyrgf";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.gbjaunyy";a:2:{i:0;R:33640;i:1;R:33565;}s:60:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.havirefvgl";a:2:{i:0;R:33640;i:1;R:33565;}s:65:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.iraqvat_znpuvar";a:2:{i:0;R:33640;i:1;R:33565;}s:60:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.irgrevanel";a:2:{i:0;R:33640;i:1;R:33565;}s:62:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.ivyyntr_unyy";a:2:{i:0;R:33640;i:1;R:33565;}s:62:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.jnfgr_onfxrg";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.jvsv";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.jyna";a:2:{i:0;R:33640;i:1;R:33565;}s:62:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.nzravgl.lbhgu_prager";a:2:{i:0;R:33640;i:1;R:33565;}s:65:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.obhaqnel.nqzvavfgengvir";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.obhaqnel.prafhf";a:2:{i:0;R:33640;i:1;R:33565;}s:64:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.obhaqnel.angvbany_cnex";a:2:{i:0;R:33640;i:1;R:33565;}s:65:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.obhaqnel.cebgrpgrq_nern";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.oevqtr.ndhrqhpg";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.oevqtr.fhfcrafvba";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.oevqtr.fjvat";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.oevqtr.ivnqhpg";a:2:{i:0;R:33640;i:1;R:33565;}s:52:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.oevqtr.lrf";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ohvyqvat.lrf";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.oevqyrjnl";a:2:{i:0;R:33640;i:1;R:33565;}s:62:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.ohf_thvqrjnl";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.ohf_fgbc";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.oljnl";a:2:{i:0;R:33640;i:1;R:33565;}s:62:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.pbafgehpgvba";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.plpyrjnl";a:2:{i:0;R:33640;i:1;R:33565;}s:72:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.rzretrapl_npprff_cbvag";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.sbbgjnl";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.sbeq";a:2:{i:0;R:33640;i:1;R:33565;}s:63:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.yvivat_fgerrg";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.zvyrfgbar";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.zvabe";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.zbgbejnl";a:2:{i:0;R:33640;i:1;R:33565;}s:67:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.zbgbejnl_whapgvba";a:2:{i:0;R:33640;i:1;R:33565;}s:63:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.zbgbejnl_yvax";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.cngu";a:2:{i:0;R:33640;i:1;R:33565;}s:60:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.crqrfgevna";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.cyngsbez";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.cevznel";a:2:{i:0;R:33640;i:1;R:33565;}s:62:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.cevznel_yvax";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.enprjnl";a:2:{i:0;R:33640;i:1;R:33565;}s:61:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.erfvqragvny";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.erfg_nern";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.ebnq";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.frpbaqnel";a:2:{i:0;R:33640;i:1;R:33565;}s:64:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.frpbaqnel_yvax";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.freivpr";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.freivprf";a:2:{i:0;R:33640;i:1;R:33565;}s:62:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.fcrrq_pnzren";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.fgrcf";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.fgvyr";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.gregvnel";a:2:{i:0;R:33640;i:1;R:33565;}s:63:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.gregvnel_yvax";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.genpx";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.genvy";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.gehax";a:2:{i:0;R:33640;i:1;R:33565;}s:60:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.gehax_yvax";a:2:{i:0;R:33640;i:1;R:33565;}s:62:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.hapynffvsvrq";a:2:{i:0;R:33640;i:1;R:33565;}s:60:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvtujnl.hafhesnprq";a:2:{i:0;R:33640;i:1;R:33565;}s:70:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvfgbevp.nepunrbybtvpny_fvgr";a:2:{i:0;R:33640;i:1;R:33565;}s:62:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvfgbevp.onggyrsvryq";a:2:{i:0;R:33640;i:1;R:33565;}s:65:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvfgbevp.obhaqnel_fgbar";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvfgbevp.ohvyqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvfgbevp.pnfgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvfgbevp.puhepu";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvfgbevp.sbeg";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvfgbevp.ubhfr";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvfgbevp.vpba";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvfgbevp.znabe";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvfgbevp.zrzbevny";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvfgbevp.zvar";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvfgbevp.zbahzrag";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvfgbevp.zhfrhz";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvfgbevp.ehvaf";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvfgbevp.gbjre";a:2:{i:0;R:33640;i:1;R:33565;}s:64:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvfgbevp.jnlfvqr_pebff";a:2:{i:0;R:33640;i:1;R:33565;}s:65:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvfgbevp.jnlfvqr_fuevar";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.uvfgbevp.jerpx";a:2:{i:0;R:33640;i:1;R:33565;}s:60:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.nyybgzragf";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.onfva";a:2:{i:0;R:33640;i:1;R:33565;}s:60:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.oebjasvryq";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.przrgrel";a:2:{i:0;R:33640;i:1;R:33565;}s:60:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.pbzzrepvny";a:2:{i:0;R:33640;i:1;R:33565;}s:62:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.pbafreingvba";a:2:{i:0;R:33640;i:1;R:33565;}s:62:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.pbafgehpgvba";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.snez";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.snezynaq";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.snezlneq";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.sberfg";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.tnentrf";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.tenff";a:2:{i:0;R:33640;i:1;R:33565;}s:60:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.terrasvryq";a:2:{i:0;R:33640;i:1;R:33565;}s:60:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.vaqhfgevny";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.ynaqsvyy";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.zrnqbj";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.zvyvgnel";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.zvar";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.bepuneq";a:2:{i:0;R:33640;i:1;R:33565;}s:64:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.angher_erfreir";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.cnex";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.cvfgr";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.dhneel";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.envyjnl";a:2:{i:0;R:33640;i:1;R:33565;}s:67:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.erperngvba_tebhaq";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.erfreibve";a:2:{i:0;R:33640;i:1;R:33565;}s:69:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.erfreibve_jngrefurq";a:2:{i:0;R:33640;i:1;R:33565;}s:61:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.erfvqragvny";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.ergnvy";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.ebnq";a:2:{i:0;R:33640;i:1;R:33565;}s:63:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.ivyyntr_terra";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.ivarlneq";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.jrgynaq";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ynaqhfr.jbbq";a:2:{i:0;R:33640;i:1;R:33565;}s:62:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.yrvfher.ornpu_erfbeg";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.yrvfher.oveq_uvqr";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.yrvfher.pbzzba";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.yrvfher.svfuvat";a:2:{i:0;R:33640;i:1;R:33565;}s:65:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.yrvfher.svgarff_fgngvba";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.yrvfher.tneqra";a:2:{i:0;R:33640;i:1;R:33565;}s:61:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.yrvfher.tbys_pbhefr";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.yrvfher.vpr_evax";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.yrvfher.znevan";a:2:{i:0;R:33640;i:1;R:33565;}s:64:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.yrvfher.zvavngher_tbys";a:2:{i:0;R:33640;i:1;R:33565;}s:64:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.yrvfher.angher_erfreir";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.yrvfher.cnex";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.yrvfher.cvgpu";a:2:{i:0;R:33640;i:1;R:33565;}s:60:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.yrvfher.cynltebhaq";a:2:{i:0;R:33640;i:1;R:33565;}s:67:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.yrvfher.erperngvba_tebhaq";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.yrvfher.fnhan";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.yrvfher.fyvcjnl";a:2:{i:0;R:33640;i:1;R:33565;}s:63:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.yrvfher.fcbegf_prager";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.yrvfher.fgnqvhz";a:2:{i:0;R:33640;i:1;R:33565;}s:63:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.yrvfher.fjvzzvat_cbby";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.yrvfher.genpx";a:2:{i:0;R:33640;i:1;R:33565;}s:60:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.yrvfher.jngre_cnex";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.zvyvgnel.nvesvryq";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.zvyvgnel.oneenpxf";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.zvyvgnel.ohaxre";a:2:{i:0;R:33640;i:1;R:33565;}s:53:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.onl";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.ornpu";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.pncr";a:2:{i:0;R:33640;i:1;R:33565;}s:63:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.pnir_ragenapr";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.punaary";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.pyvss";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.pengre";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.qhar";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.srngher";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.sryy";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.swbeq";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.sberfg";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.trlfre";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.tynpvre";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.urngu";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.uvyy";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.vfynaq";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.ynaq";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.znefu";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.zbbe";a:2:{i:0;R:33640;i:1;R:33565;}s:53:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.zhq";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.crnx";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.cbvag";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.errs";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.evqtr";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.evire";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.ebpx";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.fperr";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.fpeho";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.fubny";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.fcevat";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.fgbar";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.fgenvg";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.gerr";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.inyyrl";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.ibypnab";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.jngre";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.jrgynaq";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.jrgynaqf";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.angheny.jbbq";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.bssvpr.nppbhagnag";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.bssvpr.nepuvgrpg";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.bssvpr.pbzcnal";a:2:{i:0;R:33640;i:1;R:33565;}s:66:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.bssvpr.rzcyblzrag_ntrapl";a:2:{i:0;R:33640;i:1;R:33565;}s:61:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.bssvpr.rfgngr_ntrag";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.bssvpr.tbireazrag";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.bssvpr.vafhenapr";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.bssvpr.ynjlre";a:2:{i:0;R:33640;i:1;R:33565;}s:52:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.bssvpr.atb";a:2:{i:0;R:33640;i:1;R:33565;}s:66:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.bssvpr.gryrpbzzhavpngvba";a:2:{i:0;R:33640;i:1;R:33565;}s:61:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.bssvpr.geniry_ntrag";a:2:{i:0;R:33640;i:1;R:33565;}s:52:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.bssvpr.lrf";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.cynpr.nvecbeg";a:2:{i:0;R:33640;i:1;R:33565;}s:52:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.cynpr.pvgl";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.cynpr.pbhagel";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.cynpr.pbhagl";a:2:{i:0;R:33640;i:1;R:33565;}s:52:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.cynpr.snez";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.cynpr.unzyrg";a:2:{i:0;R:33640;i:1;R:33565;}s:53:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.cynpr.ubhfr";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.cynpr.ubhfrf";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.cynpr.vfynaq";a:2:{i:0;R:33640;i:1;R:33565;}s:53:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.cynpr.vfyrg";a:2:{i:0;R:33640;i:1;R:33565;}s:65:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.cynpr.vfbyngrq_qjryyvat";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.cynpr.ybpnyvgl";a:2:{i:0;R:33640;i:1;R:33565;}s:52:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.cynpr.zbbe";a:2:{i:0;R:33640;i:1;R:33565;}s:60:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.cynpr.zhavpvcnyvgl";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.cynpr.cbfgpbqr";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.cynpr.ertvba";a:2:{i:0;R:33640;i:1;R:33565;}s:51:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.cynpr.frn";a:2:{i:0;R:33640;i:1;R:33565;}s:53:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.cynpr.fgngr";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.cynpr.fhoqvivfvba";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.cynpr.fhoheo";a:2:{i:0;R:33640;i:1;R:33565;}s:52:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.cynpr.gbja";a:2:{i:0;R:33640;i:1;R:33565;}s:67:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.cynpr.havapbecbengrq_nern";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.cynpr.ivyyntr";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.envyjnl.nonaqbarq";a:2:{i:0;R:33640;i:1;R:33565;}s:62:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.envyjnl.pbafgehpgvba";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.envyjnl.qvfhfrq";a:2:{i:0;R:33640;i:1;R:33565;}s:65:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.envyjnl.qvfhfrq_fgngvba";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.envyjnl.shavphyne";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.envyjnl.unyg";a:2:{i:0;R:33640;i:1;R:33565;}s:66:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.envyjnl.uvfgbevp_fgngvba";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.envyjnl.whapgvba";a:2:{i:0;R:33640;i:1;R:33565;}s:64:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.envyjnl.yriry_pebffvat";a:2:{i:0;R:33640;i:1;R:33565;}s:60:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.envyjnl.yvtug_envy";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.envyjnl.zvavngher";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.envyjnl.zbabenvy";a:2:{i:0;R:33640;i:1;R:33565;}s:62:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.envyjnl.aneebj_tnhtr";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.envyjnl.cyngsbez";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.envyjnl.cerfreirq";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.envyjnl.fche";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.envyjnl.fgngvba";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.envyjnl.fhojnl";a:2:{i:0;R:33640;i:1;R:33565;}s:65:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.envyjnl.fhojnl_ragenapr";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.envyjnl.fjvgpu";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.envyjnl.genz";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.envyjnl.genz_fgbc";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.envyjnl.lneq";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.nypbuby";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.nagvdhrf";a:2:{i:0;R:33640;i:1;R:33565;}s:50:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.neg";a:2:{i:0;R:33640;i:1;R:33565;}s:53:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.onxrel";a:2:{i:0;R:33640;i:1;R:33565;}s:53:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.ornhgl";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.orirentrf";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.ovplpyr";a:2:{i:0;R:33640;i:1;R:33565;}s:52:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.obbxf";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.ohgpure";a:2:{i:0;R:33640;i:1;R:33565;}s:50:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.pne";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.pne_cnegf";a:2:{i:0;R:33640;i:1;R:33565;}s:53:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.pnecrg";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.pne_ercnve";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.punevgl";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.purzvfg";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.pybgurf";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.pbzchgre";a:2:{i:0;R:33640;i:1;R:33565;}s:60:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.pbasrpgvbarel";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.pbairavrapr";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.pbclfubc";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.pbfzrgvpf";a:2:{i:0;R:33640;i:1;R:33565;}s:63:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.qrcnegzrag_fgber";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.qvfpbhag";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.qbvglbhefrys";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.qel_pyrnavat";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.ryrpgebavpf";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.rfgngr_ntrag";a:2:{i:0;R:33640;i:1;R:33565;}s:51:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.snez";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.snfuvba";a:2:{i:0;R:33640;i:1;R:33565;}s:51:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.svfu";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.sybevfg";a:2:{i:0;R:33640;i:1;R:33565;}s:51:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.sbbq";a:2:{i:0;R:33640;i:1;R:33565;}s:64:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.shareny_qverpgbef";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.sheavgher";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.tnyyrel";a:2:{i:0;R:33640;i:1;R:33565;}s:60:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.tneqra_prager";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.trareny";a:2:{i:0;R:33640;i:1;R:33565;}s:51:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.tvsg";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.terratebpre";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.tebprel";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.unveqerffre";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.uneqjner";a:2:{i:0;R:33640;i:1;R:33565;}s:51:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.uvsv";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.vafhenapr";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.wrjryel";a:2:{i:0;R:33640;i:1;R:33565;}s:52:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.xvbfx";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.ynhaqel";a:2:{i:0;R:33640;i:1;R:33565;}s:51:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.znyy";a:2:{i:0;R:33640;i:1;R:33565;}s:53:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.znexrg";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.zbovyr_cubar";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.zbgbeplpyr";a:2:{i:0;R:33640;i:1;R:33565;}s:52:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.zhfvp";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.arjfntrag";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.bcgvpvna";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.betnavp";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.bhgqbbe";a:2:{i:0;R:33640;i:1;R:33565;}s:50:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.crg";a:2:{i:0;R:33640;i:1;R:33565;}s:52:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.cubgb";a:2:{i:0;R:33640;i:1;R:33565;}s:52:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.fnyba";a:2:{i:0;R:33640;i:1;R:33565;}s:52:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.fubrf";a:2:{i:0;R:33640;i:1;R:33565;}s:62:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.fubccvat_prager";a:2:{i:0;R:33640;i:1;R:33565;}s:53:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.fcbegf";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.fgngvbarel";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.fhcreznexrg";a:2:{i:0;R:33640;i:1;R:33565;}s:51:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.gblf";a:2:{i:0;R:33640;i:1;R:33565;}s:60:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.geniry_ntrapl";a:2:{i:0;R:33640;i:1;R:33565;}s:52:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.ivqrb";a:2:{i:0;R:33640;i:1;R:33565;}s:51:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.fubc.jvar";a:2:{i:0;R:33640;i:1;R:33565;}s:60:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.gbhevfz.nycvar_uhg";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.gbhevfz.negjbex";a:2:{i:0;R:33640;i:1;R:33565;}s:60:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.gbhevfz.nggenpgvba";a:2:{i:0;R:33640;i:1;R:33565;}s:67:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.gbhevfz.orq_naq_oernxsnfg";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.gbhevfz.pnova";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.gbhevfz.pnzc_fvgr";a:2:{i:0;R:33640;i:1;R:33565;}s:62:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.gbhevfz.pnenina_fvgr";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.gbhevfz.punyrg";a:2:{i:0;R:33640;i:1;R:33565;}s:61:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.gbhevfz.thrfg_ubhfr";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.gbhevfz.ubfgry";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.gbhevfz.ubgry";a:2:{i:0;R:33640;i:1;R:33565;}s:61:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.gbhevfz.vasbezngvba";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.gbhevfz.yrna_gb";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.gbhevfz.zbgry";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.gbhevfz.zhfrhz";a:2:{i:0;R:33640;i:1;R:33565;}s:61:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.gbhevfz.cvpavp_fvgr";a:2:{i:0;R:33640;i:1;R:33565;}s:60:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.gbhevfz.gurzr_cnex";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.gbhevfz.inyyrl";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.gbhevfz.ivrjcbvag";a:2:{i:0;R:33640;i:1;R:33565;}s:53:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.gbhevfz.mbb";a:2:{i:0;R:33640;i:1;R:33565;}s:52:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.ghaary.lrf";a:2:{i:0;R:33640;i:1;R:33565;}s:61:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.jngrejnl.negvsvpvny";a:2:{i:0;R:33640;i:1;R:33565;}s:59:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.jngrejnl.obnglneq";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.jngrejnl.pnany";a:2:{i:0;R:33640;i:1;R:33565;}s:60:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.jngrejnl.pbaarpgbe";a:2:{i:0;R:33640;i:1;R:33565;}s:54:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.jngrejnl.qnz";a:2:{i:0;R:33640;i:1;R:33565;}s:65:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.jngrejnl.qreryvpg_pnany";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.jngrejnl.qvgpu";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.jngrejnl.qbpx";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.jngrejnl.qenva";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.jngrejnl.ybpx";a:2:{i:0;R:33640;i:1;R:33565;}s:60:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.jngrejnl.ybpx_tngr";a:2:{i:0;R:33640;i:1;R:33565;}s:65:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.jngrejnl.zvareny_fcevat";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.jngrejnl.zbbevat";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.jngrejnl.encvqf";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.jngrejnl.evire";a:2:{i:0;R:33640;i:1;R:33565;}s:60:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.jngrejnl.evireonax";a:2:{i:0;R:33640;i:1;R:33565;}s:57:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.jngrejnl.fgernz";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.jngrejnl.jnqv";a:2:{i:0;R:33640;i:1;R:33565;}s:60:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.jngrejnl.jngresnyy";a:2:{i:0;R:33640;i:1;R:33565;}s:62:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.jngrejnl.jngre_cbvag";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:trbpbqre.frnepu_bfz_abzvangvz.cersvk.jngrejnl.jrve";a:2:{i:0;R:33640;i:1;R:33565;}s:46:"1222:trbpbqre.qrfpevcgvba.gvgyr.bfz_anzrsvaqre";a:2:{i:0;R:33640;i:1;R:33565;}s:45:"1222:trbpbqre.qrfpevcgvba.gvgyr.bfz_abzvangvz";a:2:{i:0;R:33640;i:1;R:33565;}s:40:"1222:trbpbqre.qrfpevcgvba.gvgyr.trbanzrf";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:trbpbqre.qrfpevcgvba.glcrf.pvgvrf";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:trbpbqre.qrfpevcgvba.glcrf.gbjaf";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:trbpbqre.qrfpevcgvba.glcrf.cynprf";a:2:{i:0;R:33640;i:1;R:33565;}s:47:"1222:trbpbqre.qrfpevcgvba_bfz_anzrsvaqre.cersvk";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:trbpbqre.erfhygf.ab_erfhygf";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:trbpbqre.erfhygf.zber_erfhygf";a:2:{i:0;R:33640;i:1;R:33565;}s:22:"1222:trbpbqre.qvfgnapr";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:trbpbqre.qverpgvba.fbhgu_jrfg";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:trbpbqre.qverpgvba.fbhgu";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:trbpbqre.qverpgvba.fbhgu_rnfg";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:trbpbqre.qverpgvba.rnfg";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:trbpbqre.qverpgvba.abegu_rnfg";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:trbpbqre.qverpgvba.abegu";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:trbpbqre.qverpgvba.abegu_jrfg";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:trbpbqre.qverpgvba.jrfg";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:ynlbhgf.cebwrpg_anzr.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:ynlbhgf.cebwrpg_anzr.u1";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:ynlbhgf.ybtb.nyg_grkg";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:ynlbhgf.jrypbzr_hfre";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:ynlbhgf.jrypbzr_hfre_yvax_gbbygvc";a:2:{i:0;R:33640;i:1;R:33565;}s:17:"1222:ynlbhgf.ubzr";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:ynlbhgf.ubzr_gbbygvc";a:2:{i:0;R:33640;i:1;R:33565;}s:18:"1222:ynlbhgf.vaobk";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:ynlbhgf.vaobk_gbbygvc";a:2:{i:0;R:33640;i:1;R:33565;}s:19:"1222:ynlbhgf.ybtbhg";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:ynlbhgf.ybtbhg_gbbygvc";a:2:{i:0;R:33640;i:1;R:33565;}s:19:"1222:ynlbhgf.ybt_va";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:ynlbhgf.ybt_va_gbbygvc";a:2:{i:0;R:33640;i:1;R:33565;}s:20:"1222:ynlbhgf.fvta_hc";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:ynlbhgf.fvta_hc_gbbygvc";a:2:{i:0;R:33640;i:1;R:33565;}s:17:"1222:ynlbhgf.ivrj";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:ynlbhgf.ivrj_gbbygvc";a:2:{i:0;R:33640;i:1;R:33565;}s:17:"1222:ynlbhgf.rqvg";a:2:{i:0;R:33640;i:1;R:33565;}s:20:"1222:ynlbhgf.uvfgbel";a:2:{i:0;R:33640;i:1;R:33565;}s:19:"1222:ynlbhgf.rkcbeg";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:ynlbhgf.rkcbeg_gbbygvc";a:2:{i:0;R:33640;i:1;R:33565;}s:23:"1222:ynlbhgf.tcf_genprf";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:ynlbhgf.tcf_genprf_gbbygvc";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:ynlbhgf.hfre_qvnevrf";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:ynlbhgf.hfre_qvnevrf_gbbygvc";a:2:{i:0;R:33640;i:1;R:33565;}s:22:"1222:ynlbhgf.rqvg_jvgu";a:2:{i:0;R:33640;i:1;R:33565;}s:21:"1222:ynlbhgf.gnt_yvar";a:2:{i:0;R:33640;i:1;R:33565;}s:20:"1222:ynlbhgf.vageb_1";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:ynlbhgf.vageb_2_ugzy";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:ynlbhgf.vageb_2_perngr_nppbhag";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:ynlbhgf.vageb_2_yvprafr";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:ynlbhgf.vageb_2_hfr";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:ynlbhgf.vageb_2_qbjaybnq";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:ynlbhgf.vageb_2_hfr_hey";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:ynlbhgf.cnegaref_ugzy";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:ynlbhgf.cnegaref_hpy";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:ynlbhgf.cnegaref_vp";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:ynlbhgf.cnegaref_olgrznex";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:ynlbhgf.cnegaref_cnegaref";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:ynlbhgf.cnegaref_hey";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:ynlbhgf.bfz_bssyvar";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:ynlbhgf.bfz_ernq_bayl";a:2:{i:0;R:33640;i:1;R:33565;}s:19:"1222:ynlbhgf.qbangr";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:ynlbhgf.qbangr_yvax_grkg";a:2:{i:0;R:33640;i:1;R:33565;}s:17:"1222:ynlbhgf.uryc";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:ynlbhgf.uryc_prager";a:2:{i:0;R:33640;i:1;R:33565;}s:21:"1222:ynlbhgf.uryc_hey";a:2:{i:0;R:33640;i:1;R:33565;}s:23:"1222:ynlbhgf.uryc_gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:17:"1222:ynlbhgf.jvxv";a:2:{i:0;R:33640;i:1;R:33565;}s:21:"1222:ynlbhgf.jvxv_hey";a:2:{i:0;R:33640;i:1;R:33565;}s:23:"1222:ynlbhgf.jvxv_gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:ynlbhgf.qbphzragngvba";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:ynlbhgf.qbphzragngvba_gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:22:"1222:ynlbhgf.pbclevtug";a:2:{i:0;R:33640;i:1;R:33565;}s:22:"1222:ynlbhgf.pbzzhavgl";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:ynlbhgf.pbzzhavgl_oybtf";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:ynlbhgf.pbzzhavgl_oybtf_gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:23:"1222:ynlbhgf.sbhaqngvba";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:ynlbhgf.sbhaqngvba_gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:21:"1222:ynlbhgf.fbgz2011";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:ynlbhgf.yvprafr.nyg";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:ynlbhgf.yvprafr.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:ynlbhgf.znxr_n_qbangvba.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:ynlbhgf.znxr_n_qbangvba.grkg";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:yvprafr_cntr.sbervta.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:yvprafr_cntr.sbervta.grkg";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:yvprafr_cntr.sbervta.ratyvfu_yvax";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:yvprafr_cntr.angvir.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:yvprafr_cntr.angvir.grkg";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:yvprafr_cntr.angvir.angvir_yvax";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:yvprafr_cntr.angvir.znccvat_yvax";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:yvprafr_cntr.yrtny_onooyr";a:2:{i:0;R:33640;i:1;R:33565;}s:48:"1222:abgvsvre.qvnel_pbzzrag_abgvsvpngvba.fhowrpg";a:2:{i:0;R:33640;i:1;R:33565;}s:43:"1222:abgvsvre.qvnel_pbzzrag_abgvsvpngvba.uv";a:2:{i:0;R:33640;i:1;R:33565;}s:47:"1222:abgvsvre.qvnel_pbzzrag_abgvsvpngvba.urnqre";a:2:{i:0;R:33640;i:1;R:33565;}s:47:"1222:abgvsvre.qvnel_pbzzrag_abgvsvpngvba.sbbgre";a:2:{i:0;R:33640;i:1;R:33565;}s:49:"1222:abgvsvre.zrffntr_abgvsvpngvba.fhowrpg_urnqre";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:abgvsvre.zrffntr_abgvsvpngvba.uv";a:2:{i:0;R:33640;i:1;R:33565;}s:41:"1222:abgvsvre.zrffntr_abgvsvpngvba.urnqre";a:2:{i:0;R:33640;i:1;R:33565;}s:42:"1222:abgvsvre.zrffntr_abgvsvpngvba.sbbgre1";a:2:{i:0;R:33640;i:1;R:33565;}s:42:"1222:abgvsvre.zrffntr_abgvsvpngvba.sbbgre2";a:2:{i:0;R:33640;i:1;R:33565;}s:41:"1222:abgvsvre.sevraq_abgvsvpngvba.fhowrpg";a:2:{i:0;R:33640;i:1;R:33565;}s:47:"1222:abgvsvre.sevraq_abgvsvpngvba.unq_nqqrq_lbh";a:2:{i:0;R:33640;i:1;R:33565;}s:51:"1222:abgvsvre.sevraq_abgvsvpngvba.frr_gurve_cebsvyr";a:2:{i:0;R:33640;i:1;R:33565;}s:47:"1222:abgvsvre.sevraq_abgvsvpngvba.orsevraq_gurz";a:2:{i:0;R:33640;i:1;R:33565;}s:39:"1222:abgvsvre.tck_abgvsvpngvba.terrgvat";a:2:{i:0;R:33640;i:1;R:33565;}s:44:"1222:abgvsvre.tck_abgvsvpngvba.lbhe_tck_svyr";a:2:{i:0;R:33640;i:1;R:33565;}s:47:"1222:abgvsvre.tck_abgvsvpngvba.jvgu_qrfpevcgvba";a:2:{i:0;R:33640;i:1;R:33565;}s:43:"1222:abgvsvre.tck_abgvsvpngvba.naq_gur_gntf";a:2:{i:0;R:33640;i:1;R:33565;}s:42:"1222:abgvsvre.tck_abgvsvpngvba.naq_ab_gntf";a:2:{i:0;R:33640;i:1;R:33565;}s:46:"1222:abgvsvre.tck_abgvsvpngvba.snvyher.fhowrpg";a:2:{i:0;R:33640;i:1;R:33565;}s:55:"1222:abgvsvre.tck_abgvsvpngvba.snvyher.snvyrq_gb_vzcbeg";a:2:{i:0;R:33640;i:1;R:33565;}s:50:"1222:abgvsvre.tck_abgvsvpngvba.snvyher.zber_vasb_1";a:2:{i:0;R:33640;i:1;R:33565;}s:50:"1222:abgvsvre.tck_abgvsvpngvba.snvyher.zber_vasb_2";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:abgvsvre.tck_abgvsvpngvba.snvyher.vzcbeg_snvyherf_hey";a:2:{i:0;R:33640;i:1;R:33565;}s:46:"1222:abgvsvre.tck_abgvsvpngvba.fhpprff.fhowrpg";a:2:{i:0;R:33640;i:1;R:33565;}s:58:"1222:abgvsvre.tck_abgvsvpngvba.fhpprff.ybnqrq_fhpprffshyyl";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:abgvsvre.fvtahc_pbasvez.fhowrpg";a:2:{i:0;R:33640;i:1;R:33565;}s:43:"1222:abgvsvre.fvtahc_pbasvez_cynva.terrgvat";a:2:{i:0;R:33640;i:1;R:33565;}s:48:"1222:abgvsvre.fvtahc_pbasvez_cynva.ubcrshyyl_lbh";a:2:{i:0;R:33640;i:1;R:33565;}s:51:"1222:abgvsvre.fvtahc_pbasvez_cynva.pyvpx_gur_yvax_1";a:2:{i:0;R:33640;i:1;R:33565;}s:51:"1222:abgvsvre.fvtahc_pbasvez_cynva.pyvpx_gur_yvax_2";a:2:{i:0;R:33640;i:1;R:33565;}s:53:"1222:abgvsvre.fvtahc_pbasvez_cynva.vagebqhpgbel_ivqrb";a:2:{i:0;R:33640;i:1;R:33565;}s:46:"1222:abgvsvre.fvtahc_pbasvez_cynva.zber_ivqrbf";a:2:{i:0;R:33640;i:1;R:33565;}s:43:"1222:abgvsvre.fvtahc_pbasvez_cynva.gur_jvxv";a:2:{i:0;R:33640;i:1;R:33565;}s:47:"1222:abgvsvre.fvtahc_pbasvez_cynva.gur_jvxv_hey";a:2:{i:0;R:33640;i:1;R:33565;}s:51:"1222:abgvsvre.fvtahc_pbasvez_cynva.oybt_naq_gjvggre";a:2:{i:0;R:33640;i:1;R:33565;}s:46:"1222:abgvsvre.fvtahc_pbasvez_cynva.bcratrbqngn";a:2:{i:0;R:33640;i:1;R:33565;}s:48:"1222:abgvsvre.fvtahc_pbasvez_cynva.nfx_dhrfgvbaf";a:2:{i:0;R:33640;i:1;R:33565;}s:46:"1222:abgvsvre.fvtahc_pbasvez_cynva.jvxv_fvtahc";a:2:{i:0;R:33640;i:1;R:33565;}s:50:"1222:abgvsvre.fvtahc_pbasvez_cynva.jvxv_fvtahc_hey";a:2:{i:0;R:33640;i:1;R:33565;}s:46:"1222:abgvsvre.fvtahc_pbasvez_cynva.hfre_jvxv_1";a:2:{i:0;R:33640;i:1;R:33565;}s:46:"1222:abgvsvre.fvtahc_pbasvez_cynva.hfre_jvxv_2";a:2:{i:0;R:33640;i:1;R:33565;}s:49:"1222:abgvsvre.fvtahc_pbasvez_cynva.pheerag_hfre_1";a:2:{i:0;R:33640;i:1;R:33565;}s:49:"1222:abgvsvre.fvtahc_pbasvez_cynva.pheerag_hfre_2";a:2:{i:0;R:33640;i:1;R:33565;}s:42:"1222:abgvsvre.fvtahc_pbasvez_ugzy.terrgvat";a:2:{i:0;R:33640;i:1;R:33565;}s:47:"1222:abgvsvre.fvtahc_pbasvez_ugzy.ubcrshyyl_lbh";a:2:{i:0;R:33640;i:1;R:33565;}s:48:"1222:abgvsvre.fvtahc_pbasvez_ugzy.pyvpx_gur_yvax";a:2:{i:0;R:33640;i:1;R:33565;}s:52:"1222:abgvsvre.fvtahc_pbasvez_ugzy.vagebqhpgbel_ivqrb";a:2:{i:0;R:33640;i:1;R:33565;}s:56:"1222:abgvsvre.fvtahc_pbasvez_ugzy.ivqrb_gb_bcrafgerrgznc";a:2:{i:0;R:33640;i:1;R:33565;}s:45:"1222:abgvsvre.fvtahc_pbasvez_ugzy.zber_ivqrbf";a:2:{i:0;R:33640;i:1;R:33565;}s:50:"1222:abgvsvre.fvtahc_pbasvez_ugzy.zber_ivqrbf_urer";a:2:{i:0;R:33640;i:1;R:33565;}s:45:"1222:abgvsvre.fvtahc_pbasvez_ugzy.trg_ernqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:47:"1222:abgvsvre.fvtahc_pbasvez_ugzy.nfx_dhrfgvbaf";a:2:{i:0;R:33640;i:1;R:33565;}s:45:"1222:abgvsvre.fvtahc_pbasvez_ugzy.jvxv_fvtahc";a:2:{i:0;R:33640;i:1;R:33565;}s:48:"1222:abgvsvre.fvtahc_pbasvez_ugzy.hfre_jvxv_cntr";a:2:{i:0;R:33640;i:1;R:33565;}s:46:"1222:abgvsvre.fvtahc_pbasvez_ugzy.pheerag_hfre";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:abgvsvre.rznvy_pbasvez.fhowrpg";a:2:{i:0;R:33640;i:1;R:33565;}s:42:"1222:abgvsvre.rznvy_pbasvez_cynva.terrgvat";a:2:{i:0;R:33640;i:1;R:33565;}s:49:"1222:abgvsvre.rznvy_pbasvez_cynva.ubcrshyyl_lbh_1";a:2:{i:0;R:33640;i:1;R:33565;}s:49:"1222:abgvsvre.rznvy_pbasvez_cynva.ubcrshyyl_lbh_2";a:2:{i:0;R:33640;i:1;R:33565;}s:48:"1222:abgvsvre.rznvy_pbasvez_cynva.pyvpx_gur_yvax";a:2:{i:0;R:33640;i:1;R:33565;}s:41:"1222:abgvsvre.rznvy_pbasvez_ugzy.terrgvat";a:2:{i:0;R:33640;i:1;R:33565;}s:46:"1222:abgvsvre.rznvy_pbasvez_ugzy.ubcrshyyl_lbh";a:2:{i:0;R:33640;i:1;R:33565;}s:47:"1222:abgvsvre.rznvy_pbasvez_ugzy.pyvpx_gur_yvax";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:abgvsvre.ybfg_cnffjbeq.fhowrpg";a:2:{i:0;R:33640;i:1;R:33565;}s:42:"1222:abgvsvre.ybfg_cnffjbeq_cynva.terrgvat";a:2:{i:0;R:33640;i:1;R:33565;}s:49:"1222:abgvsvre.ybfg_cnffjbeq_cynva.ubcrshyyl_lbh_1";a:2:{i:0;R:33640;i:1;R:33565;}s:49:"1222:abgvsvre.ybfg_cnffjbeq_cynva.ubcrshyyl_lbh_2";a:2:{i:0;R:33640;i:1;R:33565;}s:48:"1222:abgvsvre.ybfg_cnffjbeq_cynva.pyvpx_gur_yvax";a:2:{i:0;R:33640;i:1;R:33565;}s:41:"1222:abgvsvre.ybfg_cnffjbeq_ugzy.terrgvat";a:2:{i:0;R:33640;i:1;R:33565;}s:46:"1222:abgvsvre.ybfg_cnffjbeq_ugzy.ubcrshyyl_lbh";a:2:{i:0;R:33640;i:1;R:33565;}s:47:"1222:abgvsvre.ybfg_cnffjbeq_ugzy.pyvpx_gur_yvax";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:zrffntr.vaobk.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:zrffntr.vaobk.zl_vaobk";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:zrffntr.vaobk.bhgobk";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:zrffntr.vaobk.zrffntrf";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:zrffntr.vaobk.arj_zrffntrf";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:zrffntr.vaobk.byq_zrffntrf";a:2:{i:0;R:33640;i:1;R:33565;}s:23:"1222:zrffntr.vaobk.sebz";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:zrffntr.vaobk.fhowrpg";a:2:{i:0;R:33640;i:1;R:33565;}s:23:"1222:zrffntr.vaobk.qngr";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:zrffntr.vaobk.ab_zrffntrf_lrg";a:2:{i:0;R:33640;i:1;R:33565;}s:40:"1222:zrffntr.vaobk.crbcyr_znccvat_arneol";a:2:{i:0;R:33640;i:1;R:33565;}s:42:"1222:zrffntr.zrffntr_fhzznel.haernq_ohggba";a:2:{i:0;R:33640;i:1;R:33565;}s:40:"1222:zrffntr.zrffntr_fhzznel.ernq_ohggba";a:2:{i:0;R:33640;i:1;R:33565;}s:41:"1222:zrffntr.zrffntr_fhzznel.ercyl_ohggba";a:2:{i:0;R:33640;i:1;R:33565;}s:42:"1222:zrffntr.zrffntr_fhzznel.qryrgr_ohggba";a:2:{i:0;R:33640;i:1;R:33565;}s:22:"1222:zrffntr.arj.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:zrffntr.arj.fraq_zrffntr_gb";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:zrffntr.arj.fhowrpg";a:2:{i:0;R:33640;i:1;R:33565;}s:21:"1222:zrffntr.arj.obql";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:zrffntr.arj.fraq_ohggba";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:zrffntr.arj.onpx_gb_vaobk";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:zrffntr.arj.zrffntr_frag";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:zrffntr.arj.yvzvg_rkprrqrq";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:zrffntr.ab_fhpu_zrffntr.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:zrffntr.ab_fhpu_zrffntr.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:zrffntr.ab_fhpu_zrffntr.obql";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:zrffntr.bhgobk.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:zrffntr.bhgobk.zl_vaobk";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:zrffntr.bhgobk.vaobk";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:zrffntr.bhgobk.bhgobk";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:zrffntr.bhgobk.zrffntrf";a:2:{i:0;R:33640;i:1;R:33565;}s:22:"1222:zrffntr.bhgobk.gb";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:zrffntr.bhgobk.fhowrpg";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:zrffntr.bhgobk.qngr";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:zrffntr.bhgobk.ab_frag_zrffntrf";a:2:{i:0;R:33640;i:1;R:33565;}s:41:"1222:zrffntr.bhgobk.crbcyr_znccvat_arneol";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:zrffntr.ercyl.jebat_hfre";a:2:{i:0;R:33640;i:1;R:33565;}s:23:"1222:zrffntr.ernq.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:39:"1222:zrffntr.ernq.ernqvat_lbhe_zrffntrf";a:2:{i:0;R:33640;i:1;R:33565;}s:22:"1222:zrffntr.ernq.sebz";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:zrffntr.ernq.fhowrpg";a:2:{i:0;R:33640;i:1;R:33565;}s:22:"1222:zrffntr.ernq.qngr";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:zrffntr.ernq.ercyl_ohggba";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:zrffntr.ernq.haernq_ohggba";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:zrffntr.ernq.onpx_gb_vaobk";a:2:{i:0;R:33640;i:1;R:33565;}s:44:"1222:zrffntr.ernq.ernqvat_lbhe_frag_zrffntrf";a:2:{i:0;R:33640;i:1;R:33565;}s:20:"1222:zrffntr.ernq.gb";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:zrffntr.ernq.onpx_gb_bhgobk";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:zrffntr.ernq.jebat_hfre";a:2:{i:0;R:33640;i:1;R:33565;}s:47:"1222:zrffntr.frag_zrffntr_fhzznel.qryrgr_ohggba";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:zrffntr.znex.nf_ernq";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:zrffntr.znex.nf_haernq";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:zrffntr.qryrgr.qryrgrq";a:2:{i:0;R:33640;i:1;R:33565;}s:20:"1222:fvgr.vaqrk.wf_1";a:2:{i:0;R:33640;i:1;R:33565;}s:20:"1222:fvgr.vaqrk.wf_2";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:fvgr.vaqrk.creznyvax";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:fvgr.vaqrk.fubegyvax";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:fvgr.vaqrk.yvprafr.abgvpr";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:fvgr.vaqrk.yvprafr.yvprafr_anzr";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:fvgr.vaqrk.yvprafr.yvprafr_hey";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:fvgr.vaqrk.yvprafr.cebwrpg_anzr";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:fvgr.vaqrk.yvprafr.cebwrpg_hey";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:fvgr.vaqrk.erzbgr_snvyrq";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:fvgr.rqvg.abg_choyvp";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:fvgr.rqvg.abg_choyvp_qrfpevcgvba";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:fvgr.rqvg.hfre_cntr_yvax";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:fvgr.rqvg.naba_rqvgf";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:fvgr.rqvg.naba_rqvgf_yvax";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:fvgr.rqvg.naba_rqvgf_yvax_grkg";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:fvgr.rqvg.synfu_cynlre_erdhverq";a:2:{i:0;R:33640;i:1;R:33565;}s:39:"1222:fvgr.rqvg.cbgyngpu_hafnirq_punatrf";a:2:{i:0;R:33640;i:1;R:33565;}s:39:"1222:fvgr.rqvg.cbgyngpu2_abg_pbasvtherq";a:2:{i:0;R:33640;i:1;R:33565;}s:40:"1222:fvgr.rqvg.cbgyngpu2_hafnirq_punatrf";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:fvgr.rqvg.ab_vsenzr_fhccbeg";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:fvgr.fvqrone.frnepu_erfhygf";a:2:{i:0;R:33640;i:1;R:33565;}s:23:"1222:fvgr.fvqrone.pybfr";a:2:{i:0;R:33640;i:1;R:33565;}s:23:"1222:fvgr.frnepu.frnepu";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:fvgr.frnepu.jurer_nz_v";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:fvgr.frnepu.jurer_nz_v_gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:fvgr.frnepu.fhozvg_grkg";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:fvgr.frnepu.frnepu_uryc";a:2:{i:0;R:33640;i:1;R:33565;}s:21:"1222:fvgr.xrl.znc_xrl";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:fvgr.xrl.znc_xrl_gbbygvc";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:fvgr.xrl.gnoyr.ragel.zbgbejnl";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:fvgr.xrl.gnoyr.ragel.gehax";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:fvgr.xrl.gnoyr.ragel.cevznel";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:fvgr.xrl.gnoyr.ragel.frpbaqnel";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:fvgr.xrl.gnoyr.ragel.hapynffvsvrq";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:fvgr.xrl.gnoyr.ragel.hafhesnprq";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:fvgr.xrl.gnoyr.ragel.genpx";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:fvgr.xrl.gnoyr.ragel.oljnl";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:fvgr.xrl.gnoyr.ragel.oevqyrjnl";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:fvgr.xrl.gnoyr.ragel.plpyrjnl";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:fvgr.xrl.gnoyr.ragel.sbbgjnl";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:fvgr.xrl.gnoyr.ragel.envy";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:fvgr.xrl.gnoyr.ragel.fhojnl";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:fvgr.xrl.gnoyr.ragel.genz.0";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:fvgr.xrl.gnoyr.ragel.genz.1";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:fvgr.xrl.gnoyr.ragel.pnoyr.0";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:fvgr.xrl.gnoyr.ragel.pnoyr.1";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:fvgr.xrl.gnoyr.ragel.ehajnl.0";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:fvgr.xrl.gnoyr.ragel.ehajnl.1";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:fvgr.xrl.gnoyr.ragel.nceba.0";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:fvgr.xrl.gnoyr.ragel.nceba.1";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:fvgr.xrl.gnoyr.ragel.nqzva";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:fvgr.xrl.gnoyr.ragel.sberfg";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:fvgr.xrl.gnoyr.ragel.jbbq";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:fvgr.xrl.gnoyr.ragel.tbys";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:fvgr.xrl.gnoyr.ragel.cnex";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:fvgr.xrl.gnoyr.ragel.erfvqrag";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:fvgr.xrl.gnoyr.ragel.gbhevfg";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:fvgr.xrl.gnoyr.ragel.pbzzba.0";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:fvgr.xrl.gnoyr.ragel.pbzzba.1";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:fvgr.xrl.gnoyr.ragel.ergnvy";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:fvgr.xrl.gnoyr.ragel.vaqhfgevny";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:fvgr.xrl.gnoyr.ragel.pbzzrepvny";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:fvgr.xrl.gnoyr.ragel.urnguynaq";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:fvgr.xrl.gnoyr.ragel.ynxr.0";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:fvgr.xrl.gnoyr.ragel.ynxr.1";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:fvgr.xrl.gnoyr.ragel.snez";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:fvgr.xrl.gnoyr.ragel.oebjasvryq";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:fvgr.xrl.gnoyr.ragel.przrgrel";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:fvgr.xrl.gnoyr.ragel.nyybgzragf";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:fvgr.xrl.gnoyr.ragel.cvgpu";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:fvgr.xrl.gnoyr.ragel.prager";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:fvgr.xrl.gnoyr.ragel.erfreir";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:fvgr.xrl.gnoyr.ragel.zvyvgnel";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:fvgr.xrl.gnoyr.ragel.fpubby.0";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:fvgr.xrl.gnoyr.ragel.fpubby.1";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:fvgr.xrl.gnoyr.ragel.ohvyqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:fvgr.xrl.gnoyr.ragel.fgngvba";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:fvgr.xrl.gnoyr.ragel.fhzzvg.0";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:fvgr.xrl.gnoyr.ragel.fhzzvg.1";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:fvgr.xrl.gnoyr.ragel.ghaary";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:fvgr.xrl.gnoyr.ragel.oevqtr";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:fvgr.xrl.gnoyr.ragel.cevingr";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:fvgr.xrl.gnoyr.ragel.crezvffvir";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:fvgr.xrl.gnoyr.ragel.qrfgvangvba";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:fvgr.xrl.gnoyr.ragel.pbafgehpgvba";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:fvgr.evpugrkg_nern.rqvg";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:fvgr.evpugrkg_nern.cerivrj";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:fvgr.znexqbja_uryc.gvgyr_ugzy";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:fvgr.znexqbja_uryc.urnqvatf";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:fvgr.znexqbja_uryc.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:fvgr.znexqbja_uryc.fhournqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:fvgr.znexqbja_uryc.habeqrerq";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:fvgr.znexqbja_uryc.beqrerq";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:fvgr.znexqbja_uryc.svefg";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:fvgr.znexqbja_uryc.frpbaq";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:fvgr.znexqbja_uryc.yvax";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:fvgr.znexqbja_uryc.grkg";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:fvgr.znexqbja_uryc.vzntr";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:fvgr.znexqbja_uryc.nyg";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:fvgr.znexqbja_uryc.hey";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:genpr.ivfvovyvgl.cevingr";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:genpr.ivfvovyvgl.choyvp";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:genpr.ivfvovyvgl.genpxnoyr";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:genpr.ivfvovyvgl.vqragvsvnoyr";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:genpr.perngr.hcybnq_genpr";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:genpr.perngr.genpr_hcybnqrq";a:2:{i:0;R:33640;i:1;R:33565;}s:21:"1222:genpr.rqvg.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:23:"1222:genpr.rqvg.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:genpr.rqvg.svyranzr";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:genpr.rqvg.qbjaybnq";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:genpr.rqvg.hcybnqrq_ng";a:2:{i:0;R:33640;i:1;R:33565;}s:22:"1222:genpr.rqvg.cbvagf";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:genpr.rqvg.fgneg_pbbeq";a:2:{i:0;R:33640;i:1;R:33565;}s:19:"1222:genpr.rqvg.znc";a:2:{i:0;R:33640;i:1;R:33565;}s:20:"1222:genpr.rqvg.rqvg";a:2:{i:0;R:33640;i:1;R:33565;}s:21:"1222:genpr.rqvg.bjare";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:genpr.rqvg.qrfpevcgvba";a:2:{i:0;R:33640;i:1;R:33565;}s:20:"1222:genpr.rqvg.gntf";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:genpr.rqvg.gntf_uryc";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:genpr.rqvg.fnir_ohggba";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:genpr.rqvg.ivfvovyvgl";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:genpr.rqvg.ivfvovyvgl_uryc";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:genpr.rqvg.ivfvovyvgl_uryc_hey";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:genpr.genpr_sbez.hcybnq_tck";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:genpr.genpr_sbez.qrfpevcgvba";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:genpr.genpr_sbez.gntf";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:genpr.genpr_sbez.gntf_uryc";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:genpr.genpr_sbez.ivfvovyvgl";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:genpr.genpr_sbez.ivfvovyvgl_uryc";a:2:{i:0;R:33640;i:1;R:33565;}s:41:"1222:genpr.genpr_sbez.ivfvovyvgl_uryc_hey";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:genpr.genpr_sbez.hcybnq_ohggba";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:genpr.genpr_sbez.uryc";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:genpr.genpr_sbez.uryc_hey";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:genpr.genpr_urnqre.hcybnq_genpr";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:genpr.genpr_urnqre.frr_nyy_genprf";a:2:{i:0;R:33640;i:1;R:33565;}s:39:"1222:genpr.genpr_urnqre.frr_lbhe_genprf";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:genpr.genpr_urnqre.genprf_jnvgvat";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:genpr.genpr_bcgvbanyf.gntf";a:2:{i:0;R:33640;i:1;R:33565;}s:21:"1222:genpr.ivrj.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:23:"1222:genpr.ivrj.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:23:"1222:genpr.ivrj.craqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:genpr.ivrj.svyranzr";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:genpr.ivrj.qbjaybnq";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:genpr.ivrj.hcybnqrq";a:2:{i:0;R:33640;i:1;R:33565;}s:22:"1222:genpr.ivrj.cbvagf";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:genpr.ivrj.fgneg_pbbeqvangrf";a:2:{i:0;R:33640;i:1;R:33565;}s:19:"1222:genpr.ivrj.znc";a:2:{i:0;R:33640;i:1;R:33565;}s:20:"1222:genpr.ivrj.rqvg";a:2:{i:0;R:33640;i:1;R:33565;}s:21:"1222:genpr.ivrj.bjare";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:genpr.ivrj.qrfpevcgvba";a:2:{i:0;R:33640;i:1;R:33565;}s:20:"1222:genpr.ivrj.gntf";a:2:{i:0;R:33640;i:1;R:33565;}s:20:"1222:genpr.ivrj.abar";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:genpr.ivrj.rqvg_genpx";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:genpr.ivrj.qryrgr_genpx";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:genpr.ivrj.genpr_abg_sbhaq";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:genpr.ivrj.ivfvovyvgl";a:2:{i:0;R:33640;i:1;R:33565;}s:40:"1222:genpr.genpr_cntvat_ani.fubjvat_cntr";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:genpr.genpr_cntvat_ani.arkg";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:genpr.genpr_cntvat_ani.cerivbhf";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:genpr.genpr.craqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:genpr.genpr.pbhag_cbvagf";a:2:{i:0;R:33640;i:1;R:33565;}s:20:"1222:genpr.genpr.ntb";a:2:{i:0;R:33640;i:1;R:33565;}s:21:"1222:genpr.genpr.zber";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:genpr.genpr.genpr_qrgnvyf";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:genpr.genpr.ivrj_znc";a:2:{i:0;R:33640;i:1;R:33565;}s:21:"1222:genpr.genpr.rqvg";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:genpr.genpr.rqvg_znc";a:2:{i:0;R:33640;i:1;R:33565;}s:23:"1222:genpr.genpr.choyvp";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:genpr.genpr.vqragvsvnoyr";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:genpr.genpr.cevingr";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:genpr.genpr.genpxnoyr";a:2:{i:0;R:33640;i:1;R:33565;}s:19:"1222:genpr.genpr.ol";a:2:{i:0;R:33640;i:1;R:33565;}s:19:"1222:genpr.genpr.va";a:2:{i:0;R:33640;i:1;R:33565;}s:20:"1222:genpr.genpr.znc";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:genpr.yvfg.choyvp_genprf";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:genpr.yvfg.lbhe_genprf";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:genpr.yvfg.choyvp_genprf_sebz";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:genpr.yvfg.gnttrq_jvgu";a:2:{i:0;R:33640;i:1;R:33565;}s:40:"1222:genpr.qryrgr.fpurqhyrq_sbe_qryrgvba";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:genpr.znxr_choyvp.znqr_choyvp";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:genpr.bssyvar_jneavat.zrffntr";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:genpr.bssyvar.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:genpr.bssyvar.zrffntr";a:2:{i:0;R:33640;i:1;R:33565;}s:47:"1222:nccyvpngvba.erdhver_pbbxvrf.pbbxvrf_arrqrq";a:2:{i:0;R:33640;i:1;R:33565;}s:50:"1222:nccyvpngvba.erdhver_zbqrengbe.abg_n_zbqrengbe";a:2:{i:0;R:33640;i:1;R:33565;}s:40:"1222:nccyvpngvba.frghc_hfre_nhgu.oybpxrq";a:2:{i:0;R:33640;i:1;R:33565;}s:50:"1222:nccyvpngvba.frghc_hfre_nhgu.arrq_gb_frr_grezf";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:bnhgu.bnhgubevmr.erdhrfg_npprff";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:bnhgu.bnhgubevmr.nyybj_gb";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:bnhgu.bnhgubevmr.nyybj_ernq_cersf";a:2:{i:0;R:33640;i:1;R:33565;}s:39:"1222:bnhgu.bnhgubevmr.nyybj_jevgr_cersf";a:2:{i:0;R:33640;i:1;R:33565;}s:39:"1222:bnhgu.bnhgubevmr.nyybj_jevgr_qvnel";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:bnhgu.bnhgubevmr.nyybj_jevgr_ncv";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:bnhgu.bnhgubevmr.nyybj_ernq_tck";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:bnhgu.bnhgubevmr.nyybj_jevgr_tck";a:2:{i:0;R:33640;i:1;R:33565;}s:23:"1222:bnhgu.eribxr.synfu";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:bnhgu_pyvragf.arj.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:bnhgu_pyvragf.arj.fhozvg";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:bnhgu_pyvragf.rqvg.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:bnhgu_pyvragf.rqvg.fhozvg";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:bnhgu_pyvragf.fubj.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:bnhgu_pyvragf.fubj.xrl";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:bnhgu_pyvragf.fubj.frperg";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:bnhgu_pyvragf.fubj.hey";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:bnhgu_pyvragf.fubj.npprff_hey";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:bnhgu_pyvragf.fubj.nhgubevmr_hey";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:bnhgu_pyvragf.fubj.fhccbeg_abgvpr";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:bnhgu_pyvragf.fubj.rqvg";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:bnhgu_pyvragf.fubj.erdhrfgf";a:2:{i:0;R:33640;i:1;R:33565;}s:40:"1222:bnhgu_pyvragf.fubj.nyybj_ernq_cersf";a:2:{i:0;R:33640;i:1;R:33565;}s:41:"1222:bnhgu_pyvragf.fubj.nyybj_jevgr_cersf";a:2:{i:0;R:33640;i:1;R:33565;}s:41:"1222:bnhgu_pyvragf.fubj.nyybj_jevgr_qvnel";a:2:{i:0;R:33640;i:1;R:33565;}s:39:"1222:bnhgu_pyvragf.fubj.nyybj_jevgr_ncv";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:bnhgu_pyvragf.fubj.nyybj_ernq_tck";a:2:{i:0;R:33640;i:1;R:33565;}s:39:"1222:bnhgu_pyvragf.fubj.nyybj_jevgr_tck";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:bnhgu_pyvragf.vaqrk.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:bnhgu_pyvragf.vaqrk.zl_gbxraf";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:bnhgu_pyvragf.vaqrk.yvfg_gbxraf";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:bnhgu_pyvragf.vaqrk.nccyvpngvba";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:bnhgu_pyvragf.vaqrk.vffhrq_ng";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:bnhgu_pyvragf.vaqrk.eribxr";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:bnhgu_pyvragf.vaqrk.zl_nccf";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:bnhgu_pyvragf.vaqrk.ab_nccf";a:2:{i:0;R:33640;i:1;R:33565;}s:40:"1222:bnhgu_pyvragf.vaqrk.ertvfgrerq_nccf";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:bnhgu_pyvragf.vaqrk.ertvfgre_arj";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:bnhgu_pyvragf.sbez.anzr";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:bnhgu_pyvragf.sbez.erdhverq";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:bnhgu_pyvragf.sbez.hey";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:bnhgu_pyvragf.sbez.pnyyonpx_hey";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:bnhgu_pyvragf.sbez.fhccbeg_hey";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:bnhgu_pyvragf.sbez.erdhrfgf";a:2:{i:0;R:33640;i:1;R:33565;}s:40:"1222:bnhgu_pyvragf.sbez.nyybj_ernq_cersf";a:2:{i:0;R:33640;i:1;R:33565;}s:41:"1222:bnhgu_pyvragf.sbez.nyybj_jevgr_cersf";a:2:{i:0;R:33640;i:1;R:33565;}s:41:"1222:bnhgu_pyvragf.sbez.nyybj_jevgr_qvnel";a:2:{i:0;R:33640;i:1;R:33565;}s:39:"1222:bnhgu_pyvragf.sbez.nyybj_jevgr_ncv";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:bnhgu_pyvragf.sbez.nyybj_ernq_tck";a:2:{i:0;R:33640;i:1;R:33565;}s:39:"1222:bnhgu_pyvragf.sbez.nyybj_jevgr_tck";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:bnhgu_pyvragf.abg_sbhaq.fbeel";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:bnhgu_pyvragf.perngr.synfu";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:bnhgu_pyvragf.hcqngr.synfu";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:bnhgu_pyvragf.qrfgebl.synfu";a:2:{i:0;R:33640;i:1;R:33565;}s:21:"1222:hfre.ybtva.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:23:"1222:hfre.ybtva.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:hfre.ybtva.rznvy_be_hfreanzr";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:hfre.ybtva.cnffjbeq";a:2:{i:0;R:33640;i:1;R:33565;}s:22:"1222:hfre.ybtva.bcravq";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:hfre.ybtva.erzrzore";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:hfre.ybtva.ybfg_cnffjbeq_yvax";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:hfre.ybtva.ybtva_ohggba";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:hfre.ybtva.ertvfgre_abj";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:hfre.ybtva.jvgu_hfreanzr";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:hfre.ybtva.jvgu_bcravq";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:hfre.ybtva.arj_gb_bfz";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:hfre.ybtva.gb_znxr_punatrf";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:hfre.ybtva.perngr_nppbhag_zvahgr";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:hfre.ybtva.ab_nppbhag";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:hfre.ybtva.nppbhag_abg_npgvir";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:hfre.ybtva.nppbhag_vf_fhfcraqrq";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:hfre.ybtva.nhgu_snvyher";a:2:{i:0;R:33640;i:1;R:33565;}s:22:"1222:hfre.ybtva.abgvpr";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:hfre.ybtva.abgvpr_grezf";a:2:{i:0;R:33640;i:1;R:33565;}s:39:"1222:hfre.ybtva.bcravq_zvffvat_cebivqre";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:hfre.ybtva.bcravq_vainyvq";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:hfre.ybtva.bcravq_ybtb_nyg";a:2:{i:0;R:33640;i:1;R:33565;}s:45:"1222:hfre.ybtva.bcravq_cebivqref.bcravq.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:43:"1222:hfre.ybtva.bcravq_cebivqref.bcravq.nyg";a:2:{i:0;R:33640;i:1;R:33565;}s:45:"1222:hfre.ybtva.bcravq_cebivqref.tbbtyr.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:43:"1222:hfre.ybtva.bcravq_cebivqref.tbbtyr.nyg";a:2:{i:0;R:33640;i:1;R:33565;}s:44:"1222:hfre.ybtva.bcravq_cebivqref.lnubb.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:42:"1222:hfre.ybtva.bcravq_cebivqref.lnubb.nyg";a:2:{i:0;R:33640;i:1;R:33565;}s:47:"1222:hfre.ybtva.bcravq_cebivqref.zlbcravq.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:45:"1222:hfre.ybtva.bcravq_cebivqref.zlbcravq.nyg";a:2:{i:0;R:33640;i:1;R:33565;}s:48:"1222:hfre.ybtva.bcravq_cebivqref.jbeqcerff.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:46:"1222:hfre.ybtva.bcravq_cebivqref.jbeqcerff.nyg";a:2:{i:0;R:33640;i:1;R:33565;}s:42:"1222:hfre.ybtva.bcravq_cebivqref.nby.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:40:"1222:hfre.ybtva.bcravq_cebivqref.nby.nyg";a:2:{i:0;R:33640;i:1;R:33565;}s:22:"1222:hfre.ybtbhg.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:hfre.ybtbhg.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:hfre.ybtbhg.ybtbhg_ohggba";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:hfre.ybfg_cnffjbeq.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:hfre.ybfg_cnffjbeq.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:hfre.ybfg_cnffjbeq.rznvy_nqqerff";a:2:{i:0;R:33640;i:1;R:33565;}s:43:"1222:hfre.ybfg_cnffjbeq.arj_cnffjbeq_ohggba";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:hfre.ybfg_cnffjbeq.uryc_grkg";a:2:{i:0;R:33640;i:1;R:33565;}s:43:"1222:hfre.ybfg_cnffjbeq.abgvpr_rznvy_ba_jnl";a:2:{i:0;R:33640;i:1;R:33565;}s:48:"1222:hfre.ybfg_cnffjbeq.abgvpr_rznvy_pnaabg_svaq";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:hfre.erfrg_cnffjbeq.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:hfre.erfrg_cnffjbeq.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:hfre.erfrg_cnffjbeq.cnffjbeq";a:2:{i:0;R:33640;i:1;R:33565;}s:41:"1222:hfre.erfrg_cnffjbeq.pbasvez_cnffjbeq";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:hfre.erfrg_cnffjbeq.erfrg";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:hfre.erfrg_cnffjbeq.synfu_punatrq";a:2:{i:0;R:33640;i:1;R:33565;}s:40:"1222:hfre.erfrg_cnffjbeq.synfu_gbxra_onq";a:2:{i:0;R:33640;i:1;R:33565;}s:19:"1222:hfre.arj.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:21:"1222:hfre.arj.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:hfre.arj.ab_nhgb_nppbhag_perngr";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:hfre.arj.pbagnpg_jroznfgre";a:2:{i:0;R:33640;i:1;R:33565;}s:23:"1222:hfre.arj.svyy_sbez";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:hfre.arj.yvprafr_nterrzrag";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:hfre.arj.rznvy_nqqerff";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:hfre.arj.pbasvez_rznvy_nqqerff";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:hfre.arj.abg_qvfcynlrq_choyvpyl";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:hfre.arj.qvfcynl_anzr";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:hfre.arj.qvfcynl_anzr_qrfpevcgvba";a:2:{i:0;R:33640;i:1;R:33565;}s:20:"1222:hfre.arj.bcravq";a:2:{i:0;R:33640;i:1;R:33565;}s:22:"1222:hfre.arj.cnffjbeq";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:hfre.arj.pbasvez_cnffjbeq";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:hfre.arj.hfr_bcravq";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:hfre.arj.bcravq_ab_cnffjbeq";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:hfre.arj.bcravq_nffbpvngvba";a:2:{i:0;R:33640;i:1;R:33565;}s:22:"1222:hfre.arj.pbagvahr";a:2:{i:0;R:33640;i:1;R:33565;}s:42:"1222:hfre.arj.synfu_perngr_fhpprff_zrffntr";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:hfre.arj.grezf_npprcgrq";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:hfre.arj.grezf_qrpyvarq";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:hfre.arj.grezf_qrpyvarq_hey";a:2:{i:0;R:33640;i:1;R:33565;}s:21:"1222:hfre.grezf.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:23:"1222:hfre.grezf.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:hfre.grezf.ernq_naq_npprcg";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:hfre.grezf.pbafvqre_cq";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:hfre.grezf.pbafvqre_cq_jul";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:hfre.grezf.pbafvqre_cq_jul_hey";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:hfre.grezf.thvqnapr";a:2:{i:0;R:33640;i:1;R:33565;}s:21:"1222:hfre.grezf.nterr";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:hfre.grezf.qrpyvarq";a:2:{i:0;R:33640;i:1;R:33565;}s:23:"1222:hfre.grezf.qrpyvar";a:2:{i:0;R:33640;i:1;R:33565;}s:45:"1222:hfre.grezf.lbh_arrq_gb_npprcg_be_qrpyvar";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:hfre.grezf.yrtnyr_fryrpg";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:hfre.grezf.yrtnyr_anzrf.senapr";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:hfre.grezf.yrtnyr_anzrf.vgnyl";a:2:{i:0;R:33640;i:1;R:33565;}s:42:"1222:hfre.grezf.yrtnyr_anzrf.erfg_bs_jbeyq";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:hfre.ab_fhpu_hfre.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:hfre.ab_fhpu_hfre.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:hfre.ab_fhpu_hfre.obql";a:2:{i:0;R:33640;i:1;R:33565;}s:23:"1222:hfre.ivrj.zl_qvnel";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:hfre.ivrj.arj_qvnel_ragel";a:2:{i:0;R:33640;i:1;R:33565;}s:23:"1222:hfre.ivrj.zl_rqvgf";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:hfre.ivrj.zl_genprf";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:hfre.ivrj.zl_frggvatf";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:hfre.ivrj.zl_pbzzragf";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:hfre.ivrj.bnhgu_frggvatf";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:hfre.ivrj.oybpxf_ba_zr";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:hfre.ivrj.oybpxf_ol_zr";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:hfre.ivrj.fraq_zrffntr";a:2:{i:0;R:33640;i:1;R:33565;}s:20:"1222:hfre.ivrj.qvnel";a:2:{i:0;R:33640;i:1;R:33565;}s:20:"1222:hfre.ivrj.rqvgf";a:2:{i:0;R:33640;i:1;R:33565;}s:21:"1222:hfre.ivrj.genprf";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:hfre.ivrj.erzbir_nf_sevraq";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:hfre.ivrj.nqq_nf_sevraq";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:hfre.ivrj.znccre_fvapr";a:2:{i:0;R:33640;i:1;R:33565;}s:18:"1222:hfre.ivrj.ntb";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:hfre.ivrj.pg_fgnghf";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:hfre.ivrj.pg_haqrpvqrq";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:hfre.ivrj.pg_qrpyvarq";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:hfre.ivrj.pg_npprcgrq";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:hfre.ivrj.yngrfg_rqvg";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:hfre.ivrj.rznvy_nqqerff";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:hfre.ivrj.perngrq_sebz";a:2:{i:0;R:33640;i:1;R:33565;}s:21:"1222:hfre.ivrj.fgnghf";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:hfre.ivrj.fcnz_fpber";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:hfre.ivrj.qrfpevcgvba";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:hfre.ivrj.hfre_ybpngvba";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:hfre.ivrj.vs_frg_ybpngvba";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:hfre.ivrj.frggvatf_yvax_grkg";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:hfre.ivrj.lbhe_sevraqf";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:hfre.ivrj.ab_sevraqf";a:2:{i:0;R:33640;i:1;R:33565;}s:22:"1222:hfre.ivrj.xz_njnl";a:2:{i:0;R:33640;i:1;R:33565;}s:21:"1222:hfre.ivrj.z_njnl";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:hfre.ivrj.arneol_hfref";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:hfre.ivrj.ab_arneol_hfref";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:hfre.ivrj.ebyr.nqzvavfgengbe";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:hfre.ivrj.ebyr.zbqrengbe";a:2:{i:0;R:33640;i:1;R:33565;}s:39:"1222:hfre.ivrj.ebyr.tenag.nqzvavfgengbe";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:hfre.ivrj.ebyr.tenag.zbqrengbe";a:2:{i:0;R:33640;i:1;R:33565;}s:40:"1222:hfre.ivrj.ebyr.eribxr.nqzvavfgengbe";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:hfre.ivrj.ebyr.eribxr.zbqrengbe";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:hfre.ivrj.oybpx_uvfgbel";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:hfre.ivrj.zbqrengbe_uvfgbel";a:2:{i:0;R:33640;i:1;R:33565;}s:23:"1222:hfre.ivrj.pbzzragf";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:hfre.ivrj.perngr_oybpx";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:hfre.ivrj.npgvingr_hfre";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:hfre.ivrj.qrnpgvingr_hfre";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:hfre.ivrj.pbasvez_hfre";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:hfre.ivrj.uvqr_hfre";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:hfre.ivrj.hauvqr_hfre";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:hfre.ivrj.qryrgr_hfre";a:2:{i:0;R:33640;i:1;R:33565;}s:22:"1222:hfre.ivrj.pbasvez";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:hfre.ivrj.sevraqf_punatrfrgf";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:hfre.ivrj.sevraqf_qvnevrf";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:hfre.ivrj.arneol_punatrfrgf";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:hfre.ivrj.arneol_qvnevrf";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:hfre.cbchc.lbhe_ybpngvba";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:hfre.cbchc.arneol_znccre";a:2:{i:0;R:33640;i:1;R:33565;}s:22:"1222:hfre.cbchc.sevraq";a:2:{i:0;R:33640;i:1;R:33565;}s:23:"1222:hfre.nppbhag.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:hfre.nppbhag.zl_frggvatf";a:2:{i:0;R:33640;i:1;R:33565;}s:39:"1222:hfre.nppbhag.pheerag_rznvy_nqqerff";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:hfre.nppbhag.arj_rznvy_nqqerff";a:2:{i:0;R:33640;i:1;R:33565;}s:48:"1222:hfre.nppbhag.rznvy_arire_qvfcynlrq_choyvpyl";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:hfre.nppbhag.bcravq.bcravq";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:hfre.nppbhag.bcravq.yvax";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:hfre.nppbhag.bcravq.yvax_grkg";a:2:{i:0;R:33640;i:1;R:33565;}s:40:"1222:hfre.nppbhag.choyvp_rqvgvat.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:40:"1222:hfre.nppbhag.choyvp_rqvgvat.ranoyrq";a:2:{i:0;R:33640;i:1;R:33565;}s:45:"1222:hfre.nppbhag.choyvp_rqvgvat.ranoyrq_yvax";a:2:{i:0;R:33640;i:1;R:33565;}s:50:"1222:hfre.nppbhag.choyvp_rqvgvat.ranoyrq_yvax_grkg";a:2:{i:0;R:33640;i:1;R:33565;}s:41:"1222:hfre.nppbhag.choyvp_rqvgvat.qvfnoyrq";a:2:{i:0;R:33640;i:1;R:33565;}s:51:"1222:hfre.nppbhag.choyvp_rqvgvat.qvfnoyrq_yvax_grkg";a:2:{i:0;R:33640;i:1;R:33565;}s:45:"1222:hfre.nppbhag.choyvp_rqvgvat_abgr.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:42:"1222:hfre.nppbhag.choyvp_rqvgvat_abgr.grkg";a:2:{i:0;R:33640;i:1;R:33565;}s:43:"1222:hfre.nppbhag.pbagevohgbe_grezf.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:42:"1222:hfre.nppbhag.pbagevohgbe_grezf.nterrq";a:2:{i:0;R:33640;i:1;R:33565;}s:50:"1222:hfre.nppbhag.pbagevohgbe_grezf.abg_lrg_nterrq";a:2:{i:0;R:33640;i:1;R:33565;}s:52:"1222:hfre.nppbhag.pbagevohgbe_grezf.erivrj_yvax_grkg";a:2:{i:0;R:33640;i:1;R:33565;}s:50:"1222:hfre.nppbhag.pbagevohgbe_grezf.nterrq_jvgu_cq";a:2:{i:0;R:33640;i:1;R:33565;}s:40:"1222:hfre.nppbhag.pbagevohgbe_grezf.yvax";a:2:{i:0;R:33640;i:1;R:33565;}s:45:"1222:hfre.nppbhag.pbagevohgbe_grezf.yvax_grkg";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:hfre.nppbhag.cebsvyr_qrfpevcgvba";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:hfre.nppbhag.cersreerq_ynathntrf";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:hfre.nppbhag.cersreerq_rqvgbe";a:2:{i:0;R:33640;i:1;R:33565;}s:23:"1222:hfre.nppbhag.vzntr";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:hfre.nppbhag.arj_vzntr";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:hfre.nppbhag.xrrc_vzntr";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:hfre.nppbhag.qryrgr_vzntr";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:hfre.nppbhag.ercynpr_vzntr";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:hfre.nppbhag.vzntr_fvmr_uvag";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:hfre.nppbhag.ubzr_ybpngvba";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:hfre.nppbhag.ab_ubzr_ybpngvba";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:hfre.nppbhag.yngvghqr";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:hfre.nppbhag.ybatvghqr";a:2:{i:0;R:33640;i:1;R:33565;}s:47:"1222:hfre.nppbhag.hcqngr_ubzr_ybpngvba_ba_pyvpx";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:hfre.nppbhag.fnir_punatrf_ohggba";a:2:{i:0;R:33640;i:1;R:33565;}s:42:"1222:hfre.nppbhag.znxr_rqvgf_choyvp_ohggba";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:hfre.nppbhag.erghea_gb_cebsvyr";a:2:{i:0;R:33640;i:1;R:33565;}s:53:"1222:hfre.nppbhag.synfu_hcqngr_fhpprff_pbasvez_arrqrq";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:hfre.nppbhag.synfu_hcqngr_fhpprff";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:hfre.pbasvez.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:hfre.pbasvez.cerff_pbasvez_ohggba";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:hfre.pbasvez.ohggba";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:hfre.pbasvez.fhpprff";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:hfre.pbasvez.orsber_lbh_fgneg";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:hfre.pbasvez.nyernql_npgvir";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:hfre.pbasvez.haxabja_gbxra";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:hfre.pbasvez.erpbasvez";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:hfre.pbasvez_erfraq.fhpprff";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:hfre.pbasvez_erfraq.snvyher";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:hfre.pbasvez_rznvy.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:44:"1222:hfre.pbasvez_rznvy.cerff_pbasvez_ohggba";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:hfre.pbasvez_rznvy.ohggba";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:hfre.pbasvez_rznvy.fhpprff";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:hfre.pbasvez_rznvy.snvyher";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:hfre.frg_ubzr.synfu_fhpprff";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:hfre.tb_choyvp.synfu_fhpprff";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:hfre.znxr_sevraq.fhpprff";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:hfre.znxr_sevraq.snvyrq";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:hfre.znxr_sevraq.nyernql_n_sevraq";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:hfre.erzbir_sevraq.fhpprff";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:hfre.erzbir_sevraq.abg_n_sevraq";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:hfre.svygre.abg_na_nqzvavfgengbe";a:2:{i:0;R:33640;i:1;R:33565;}s:20:"1222:hfre.yvfg.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:22:"1222:hfre.yvfg.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:22:"1222:hfre.yvfg.fubjvat";a:2:{i:0;R:33640;i:1;R:33565;}s:22:"1222:hfre.yvfg.fhzznel";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:hfre.yvfg.fhzznel_ab_vc";a:2:{i:0;R:33640;i:1;R:33565;}s:22:"1222:hfre.yvfg.pbasvez";a:2:{i:0;R:33640;i:1;R:33565;}s:19:"1222:hfre.yvfg.uvqr";a:2:{i:0;R:33640;i:1;R:33565;}s:20:"1222:hfre.yvfg.rzcgl";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:hfre.fhfcraqrq.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:hfre.fhfcraqrq.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:hfre.fhfcraqrq.jroznfgre";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:hfre.fhfcraqrq.obql";a:2:{i:0;R:33640;i:1;R:33565;}s:42:"1222:hfre_ebyr.svygre.abg_na_nqzvavfgengbe";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:hfre_ebyr.svygre.abg_n_ebyr";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:hfre_ebyr.svygre.nyernql_unf_ebyr";a:2:{i:0;R:33640;i:1;R:33565;}s:38:"1222:hfre_ebyr.svygre.qbrfag_unir_ebyr";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:hfre_ebyr.tenag.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:hfre_ebyr.tenag.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:hfre_ebyr.tenag.ner_lbh_fher";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:hfre_ebyr.tenag.pbasvez";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:hfre_ebyr.tenag.snvy";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:hfre_ebyr.eribxr.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:hfre_ebyr.eribxr.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:hfre_ebyr.eribxr.ner_lbh_fher";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:hfre_ebyr.eribxr.pbasvez";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:hfre_ebyr.eribxr.snvy";a:2:{i:0;R:33640;i:1;R:33565;}s:42:"1222:hfre_oybpx.zbqry.aba_zbqrengbe_hcqngr";a:2:{i:0;R:33640;i:1;R:33565;}s:42:"1222:hfre_oybpx.zbqry.aba_zbqrengbe_eribxr";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:hfre_oybpx.abg_sbhaq.fbeel";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:hfre_oybpx.abg_sbhaq.onpx";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:hfre_oybpx.arj.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:hfre_oybpx.arj.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:hfre_oybpx.arj.ernfba";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:hfre_oybpx.arj.crevbq";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:hfre_oybpx.arj.fhozvg";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:hfre_oybpx.arj.gevrq_pbagnpgvat";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:hfre_oybpx.arj.gevrq_jnvgvat";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:hfre_oybpx.arj.arrqf_ivrj";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:hfre_oybpx.arj.onpx";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:hfre_oybpx.rqvg.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:hfre_oybpx.rqvg.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:hfre_oybpx.rqvg.ernfba";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:hfre_oybpx.rqvg.crevbq";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:hfre_oybpx.rqvg.fhozvg";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:hfre_oybpx.rqvg.fubj";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:hfre_oybpx.rqvg.onpx";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:hfre_oybpx.rqvg.arrqf_ivrj";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:hfre_oybpx.svygre.oybpx_rkcverq";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:hfre_oybpx.svygre.oybpx_crevbq";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:hfre_oybpx.perngr.gel_pbagnpgvat";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:hfre_oybpx.perngr.gel_jnvgvat";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:hfre_oybpx.perngr.synfu";a:2:{i:0;R:33640;i:1;R:33565;}s:44:"1222:hfre_oybpx.hcqngr.bayl_perngbe_pna_rqvg";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:hfre_oybpx.hcqngr.fhpprff";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:hfre_oybpx.vaqrk.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:hfre_oybpx.vaqrk.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:hfre_oybpx.vaqrk.rzcgl";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:hfre_oybpx.eribxr.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:hfre_oybpx.eribxr.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:hfre_oybpx.eribxr.gvzr_shgher";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:hfre_oybpx.eribxr.cnfg";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:hfre_oybpx.eribxr.pbasvez";a:2:{i:0;R:33640;i:1;R:33565;}s:29:"1222:hfre_oybpx.eribxr.eribxr";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:hfre_oybpx.eribxr.synfu";a:2:{i:0;R:33640;i:1;R:33565;}s:22:"1222:hfre_oybpx.crevbq";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:hfre_oybpx.cnegvny.fubj";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:hfre_oybpx.cnegvny.rqvg";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:hfre_oybpx.cnegvny.eribxr";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:hfre_oybpx.cnegvny.pbasvez";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:hfre_oybpx.cnegvny.qvfcynl_anzr";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:hfre_oybpx.cnegvny.perngbe_anzr";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:hfre_oybpx.cnegvny.ernfba";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:hfre_oybpx.cnegvny.fgnghf";a:2:{i:0;R:33640;i:1;R:33565;}s:36:"1222:hfre_oybpx.cnegvny.eribxre_anzr";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:hfre_oybpx.cnegvny.abg_eribxrq";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:hfre_oybpx.urycre.gvzr_shgher";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:hfre_oybpx.urycre.hagvy_ybtva";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:hfre_oybpx.urycre.gvzr_cnfg";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:hfre_oybpx.oybpxf_ba.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:hfre_oybpx.oybpxf_ba.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:hfre_oybpx.oybpxf_ba.rzcgl";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:hfre_oybpx.oybpxf_ol.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:33:"1222:hfre_oybpx.oybpxf_ol.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:hfre_oybpx.oybpxf_ol.rzcgl";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:hfre_oybpx.fubj.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:hfre_oybpx.fubj.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:hfre_oybpx.fubj.gvzr_shgher";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:hfre_oybpx.fubj.gvzr_cnfg";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:hfre_oybpx.fubj.fgnghf";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:hfre_oybpx.fubj.fubj";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:hfre_oybpx.fubj.rqvg";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:hfre_oybpx.fubj.eribxr";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:hfre_oybpx.fubj.pbasvez";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:hfre_oybpx.fubj.ernfba";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:hfre_oybpx.fubj.onpx";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:hfre_oybpx.fubj.eribxre";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:hfre_oybpx.fubj.arrqf_ivrj";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:wninfpevcgf.znc.onfr.fgnaqneq";a:2:{i:0;R:33640;i:1;R:33565;}s:35:"1222:wninfpevcgf.znc.onfr.plpyr_znc";a:2:{i:0;R:33640;i:1;R:33565;}s:39:"1222:wninfpevcgf.znc.onfr.genafcbeg_znc";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:wninfpevcgf.znc.onfr.zncdhrfg";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:wninfpevcgf.znc.bireynlf.zncyvag";a:2:{i:0;R:33640;i:1;R:33565;}s:34:"1222:wninfpevcgf.fvgr.rqvg_gbbygvc";a:2:{i:0;R:33640;i:1;R:33565;}s:43:"1222:wninfpevcgf.fvgr.rqvg_qvfnoyrq_gbbygvc";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:wninfpevcgf.fvgr.rqvg_mbbz_nyreg";a:2:{i:0;R:33640;i:1;R:33565;}s:37:"1222:wninfpevcgf.fvgr.uvfgbel_gbbygvc";a:2:{i:0;R:33640;i:1;R:33565;}s:46:"1222:wninfpevcgf.fvgr.uvfgbel_qvfnoyrq_gbbygvc";a:2:{i:0;R:33640;i:1;R:33565;}s:40:"1222:wninfpevcgf.fvgr.uvfgbel_mbbz_nyreg";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:erqnpgvba.rqvg.qrfpevcgvba";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:erqnpgvba.rqvg.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:erqnpgvba.rqvg.fhozvg";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:erqnpgvba.rqvg.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:erqnpgvba.vaqrk.rzcgl";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:erqnpgvba.vaqrk.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:erqnpgvba.vaqrk.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:30:"1222:erqnpgvba.arj.qrfpevcgvba";a:2:{i:0;R:33640;i:1;R:33565;}s:26:"1222:erqnpgvba.arj.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:erqnpgvba.arj.fhozvg";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:erqnpgvba.arj.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:31:"1222:erqnpgvba.fubj.qrfpevcgvba";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:erqnpgvba.fubj.urnqvat";a:2:{i:0;R:33640;i:1;R:33565;}s:25:"1222:erqnpgvba.fubj.gvgyr";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:erqnpgvba.fubj.hfre";a:2:{i:0;R:33640;i:1;R:33565;}s:24:"1222:erqnpgvba.fubj.rqvg";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:erqnpgvba.fubj.qrfgebl";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:erqnpgvba.fubj.pbasvez";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:erqnpgvba.perngr.synfu";a:2:{i:0;R:33640;i:1;R:33565;}s:27:"1222:erqnpgvba.hcqngr.synfu";a:2:{i:0;R:33640;i:1;R:33565;}s:32:"1222:erqnpgvba.qrfgebl.abg_rzcgl";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:erqnpgvba.qrfgebl.synfu";a:2:{i:0;R:33640;i:1;R:33565;}s:28:"1222:erqnpgvba.qrfgebl.reebe";a:2:{i:0;R:33640;i:1;R:33565;}s:20:"1238:nqq_grkg-nqqvat";a:2:{i:0;s:23:"out-pywikipedia-addtext";i:1;s:21:"out-pywikipedia-0-all";}s:26:"1238:nepuvirobg-byqre-guna";a:2:{i:0;s:26:"out-pywikipedia-archivebot";i:1;R:35237;}s:28:"1238:nepuvirobg-cntr-fhzznel";a:2:{i:0;R:35239;i:1;R:35237;}s:29:"1238:nepuvirobg-nepuvirurnqre";a:2:{i:0;R:35239;i:1;R:35237;}s:28:"1238:nepuvirobg-nepuvir-shyy";a:2:{i:0;R:35239;i:1;R:35237;}s:31:"1238:nepuvirobg-nepuvir-fhzznel";a:2:{i:0;R:35239;i:1;R:35237;}s:19:"1238:onfvp-punatvat";a:2:{i:0;s:21:"out-pywikipedia-basic";i:1;R:35237;}s:41:"1238:pncvgnyvmr_erqverpgf-perngr-erqverpg";a:2:{i:0;s:35:"out-pywikipedia-capitalizeredirects";i:1;R:35237;}s:20:"1238:pngnyy-punatvat";a:2:{i:0;s:22:"out-pywikipedia-catall";i:1;R:35237;}s:23:"1238:pngrtbel-jnf-zbirq";a:2:{i:0;s:24:"out-pywikipedia-category";i:1;R:35237;}s:24:"1238:pngrtbel-yvfgvslvat";a:2:{i:0;R:35251;i:1;R:35237;}s:29:"1238:pngrtbel-irefvba-uvfgbel";a:2:{i:0;R:35251;i:1;R:35237;}s:22:"1238:pngrtbel-punatvat";a:2:{i:0;R:35251;i:1;R:35237;}s:27:"1238:pngrtbel-jnf-qvfonaqrq";a:2:{i:0;R:35251;i:1;R:35237;}s:21:"1238:pngrtbel-nyfb-va";a:2:{i:0;R:35251;i:1;R:35237;}s:27:"1238:pngrtbel-frpgvba-gvgyr";a:2:{i:0;R:35251;i:1;R:35237;}s:23:"1238:pngrtbel-ercynpvat";a:2:{i:0;R:35251;i:1;R:35237;}s:20:"1238:pngrtbel-nqqvat";a:2:{i:0;R:35251;i:1;R:35237;}s:22:"1238:pngrtbel-erzbivat";a:2:{i:0;R:35251;i:1;R:35237;}s:30:"1238:pngrtbel_erqverpg-pbzzrag";a:2:{i:0;s:32:"out-pywikipedia-categoryredirect";i:1;R:35237;}s:38:"1238:pngrtbel_erqverpg-punatr-pngrtbel";a:2:{i:0;R:35262;i:1;R:35237;}s:35:"1238:pngrtbel_erqverpg-nqq-grzcyngr";a:2:{i:0;R:35262;i:1;R:35237;}s:35:"1238:pngrtbel_erqverpg-rqvg-erdhrfg";a:2:{i:0;R:35262;i:1;R:35237;}s:40:"1238:pngrtbel_erqverpg-rqvg-erdhrfg-vgrz";a:2:{i:0;R:35262;i:1;R:35237;}s:33:"1238:pngrtbel_erqverpg-svk-qbhoyr";a:2:{i:0;R:35262;i:1;R:35237;}s:26:"1238:pyrna_fnaqobk-pyrnarq";a:2:{i:0;s:28:"out-pywikipedia-cleansandbox";i:1;R:35237;}s:23:"1238:pbzzbaf-svyr-zbirq";a:2:{i:0;s:23:"out-pywikipedia-commons";i:1;R:35237;}s:31:"1238:pbzzbaf-svyr-abj-ninvynoyr";a:2:{i:0;R:35271;i:1;R:35237;}s:32:"1238:pbfzrgvp_punatrf-fgnaqnybar";a:2:{i:0;s:31:"out-pywikipedia-cosmeticchanges";i:1;R:35237;}s:28:"1238:pbfzrgvp_punatrf-nccraq";a:2:{i:0;R:35274;i:1;R:35237;}s:18:"1238:qryrgr-vzntrf";a:2:{i:0;s:22:"out-pywikipedia-delete";i:1;R:35237;}s:27:"1238:qryrgr-ersreevat-cntrf";a:2:{i:0;R:35277;i:1;R:35237;}s:25:"1238:qryrgr-sebz-pngrtbel";a:2:{i:0;R:35277;i:1;R:35237;}s:21:"1238:qryrgr-sebz-svyr";a:2:{i:0;R:35277;i:1;R:35237;}s:24:"1238:qryrgr-yvaxrq-cntrf";a:2:{i:0;R:35277;i:1;R:35237;}s:22:"1238:qwihgrkg-perngvat";a:2:{i:0;s:24:"out-pywikipedia-djvutext";i:1;R:35237;}s:21:"1238:rqvgnegvpyr-rqvg";a:2:{i:0;s:27:"out-pywikipedia-editarticle";i:1;R:35237;}s:18:"1238:srngherq-tbbq";a:2:{i:0;s:24:"out-pywikipedia-featured";i:1;R:35237;}s:18:"1238:srngherq-yvfg";a:2:{i:0;R:35287;i:1;R:35237;}s:22:"1238:srngherq-srngherq";a:2:{i:0;R:35287;i:1;R:35237;}s:20:"1238:srngherq-sbezre";a:2:{i:0;R:35287;i:1;R:35237;}s:28:"1238:svkvat_erqverpgf-svkvat";a:2:{i:0;s:31:"out-pywikipedia-fixingredirects";i:1;R:35237;}s:31:"1238:vagrejvxv-nqqvat-zbqvslvat";a:2:{i:0;s:25:"out-pywikipedia-interwiki";i:1;R:35237;}s:30:"1238:vagrejvxv-nqqvat-erzbivat";a:2:{i:0;R:35294;i:1;R:35237;}s:21:"1238:vagrejvxv-nqqvat";a:2:{i:0;R:35294;i:1;R:35237;}s:23:"1238:vagrejvxv-erzbivat";a:2:{i:0;R:35294;i:1;R:35237;}s:40:"1238:vagrejvxv-nqqvat-erzbivat-zbqvslvat";a:2:{i:0;R:35294;i:1;R:35237;}s:24:"1238:vagrejvxv-zbqvslvat";a:2:{i:0;R:35294;i:1;R:35237;}s:33:"1238:vagrejvxv-erzbivat-zbqvslvat";a:2:{i:0;R:35294;i:1;R:35237;}s:20:"1238:vfoa-sbeznggvat";a:2:{i:0;s:20:"out-pywikipedia-isbn";i:1;R:35237;}s:21:"1238:zbircntrf-zbivat";a:2:{i:0;s:25:"out-pywikipedia-movepages";i:1;R:35237;}s:25:"1238:abersreraprf-nqq-gnt";a:2:{i:0;s:28:"out-pywikipedia-noreferences";i:1;R:35237;}s:25:"1238:erqverpg-erzbir-ybbc";a:2:{i:0;s:24:"out-pywikipedia-redirect";i:1;R:35237;}s:24:"1238:erqverpg-svk-qbhoyr";a:2:{i:0;R:35308;i:1;R:35237;}s:27:"1238:erqverpg-erzbir-oebxra";a:2:{i:0;R:35308;i:1;R:35237;}s:38:"1238:erqverpg-oebxra-erqverpg-grzcyngr";a:2:{i:0;R:35308;i:1;R:35237;}s:22:"1238:ercynpr-ercynpvat";a:2:{i:0;s:23:"out-pywikipedia-replace";i:1;R:35237;}s:42:"1238:fbyir_qvfnzovthngvba-erqverpg-erzbirq";a:2:{i:0;s:35:"out-pywikipedia-solvedisambiguation";i:1;R:35237;}s:43:"1238:fbyir_qvfnzovthngvba-erqverpg-erfbyirq";a:2:{i:0;R:35315;i:1;R:35237;}s:40:"1238:fbyir_qvfnzovthngvba-yvaxf-erfbyirq";a:2:{i:0;R:35315;i:1;R:35237;}s:53:"1238:fbyir_qvfnzovthngvba-erqverpg-nqqvat-qa-grzcyngr";a:2:{i:0;R:35315;i:1;R:35237;}s:44:"1238:fbyir_qvfnzovthngvba-nqqvat-qa-grzcyngr";a:2:{i:0;R:35315;i:1;R:35237;}s:38:"1238:fbyir_qvfnzovthngvba-haxabja-cntr";a:2:{i:0;R:35315;i:1;R:35237;}s:39:"1238:fbyir_qvfnzovthngvba-yvaxf-erzbirq";a:2:{i:0;R:35315;i:1;R:35237;}s:24:"1238:gnoyr2jvxv-jneavatf";a:2:{i:0;s:26:"out-pywikipedia-table2wiki";i:1;R:35237;}s:26:"1238:gnoyr2jvxv-ab-jneavat";a:2:{i:0;R:35323;i:1;R:35237;}s:22:"1238:grzcyngr-erzbivat";a:2:{i:0;s:24:"out-pywikipedia-template";i:1;R:35237;}s:22:"1238:grzcyngr-punatvat";a:2:{i:0;R:35326;i:1;R:35237;}s:26:"1238:grzcyngr-fhofgvghgvat";a:2:{i:0;R:35326;i:1;R:35237;}s:49:"1238:guveqcnegl-qegevtbaobg-fhz_qvfp-fhzznel-urnq";a:2:{i:0;s:26:"out-pywikipedia-thirdparty";i:1;R:35237;}s:51:"1238:guveqcnegl-qegevtbaobg-fhz_qvfp-cnefr-abauhzna";a:2:{i:0;R:35330;i:1;R:35237;}s:48:"1238:guveqcnegl-qegevtbaobg-fhz_qvfp-cnefr-fgneg";a:2:{i:0;R:35330;i:1;R:35237;}s:42:"1238:guveqcnegl-qegevtbaobg-fhz_qvfp-cnefr";a:2:{i:0;R:35330;i:1;R:35237;}s:50:"1238:guveqcnegl-qegevtbaobg-fhz_qvfp-cnefr-jneavat";a:2:{i:0;R:35330;i:1;R:35237;}s:47:"1238:guveqcnegl-qegevtbaobg-fhz_qvfp-abgvsl-arj";a:2:{i:0;R:35330;i:1;R:35237;}s:49:"1238:guveqcnegl-qegevtbaobg-fhz_qvfp-cnefr-abgvsl";a:2:{i:0;R:35330;i:1;R:35237;}s:50:"1238:guveqcnegl-qegevtbaobg-fhz_qvfp-abgvsl-abgvsl";a:2:{i:0;R:35330;i:1;R:35237;}s:47:"1238:guveqcnegl-qegevtbaobg-fhofgre-fhzznel-zbq";a:2:{i:0;R:35330;i:1;R:35237;}s:50:"1238:guveqcnegl-qegevtbaobg-fhz_qvfp-abgvsl-pybfrq";a:2:{i:0;R:35330;i:1;R:35237;}s:49:"1238:guveqcnegl-qegevtbaobg-fhz_qvfp-cnefr-pybfrq";a:2:{i:0;R:35330;i:1;R:35237;}s:48:"1238:guveqcnegl-qegevtbaobg-fhz_qvfp-fhzznel-nqq";a:2:{i:0;R:35330;i:1;R:35237;}s:51:"1238:guveqcnegl-qegevtbaobg-fhz_qvfp-abgvsl-punatrq";a:2:{i:0;R:35330;i:1;R:35237;}s:50:"1238:guveqcnegl-qegevtbaobg-fhz_qvfp-fhzznel-pyrna";a:2:{i:0;R:35330;i:1;R:35237;}s:48:"1238:guveqcnegl-qegevtbaobg-fhz_qvfp-fhzznel-zbq";a:2:{i:0;R:35330;i:1;R:35237;}s:52:"1238:guveqcnegl-qegevtbaobg-fhz_qvfp-abgvsl-znvagzft";a:2:{i:0;R:35330;i:1;R:35237;}s:46:"1238:guveqcnegl-qegevtbaobg-fhz_qvfp-cnefr-raq";a:2:{i:0;R:35330;i:1;R:35237;}s:21:"1238:hayvax-hayvaxvat";a:2:{i:0;s:22:"out-pywikipedia-unlink";i:1;R:35237;}s:20:"1238:jrypbzr-jrypbzr";a:2:{i:0;s:23:"out-pywikipedia-welcome";i:1;R:35237;}s:25:"1238:jrypbzr-onq_hfreanzr";a:2:{i:0;R:35350;i:1;R:35237;}s:21:"1238:jrypbzr-hcqngvat";a:2:{i:0;R:35350;i:1;R:35237;}s:76:"1208:1oso53s31024n9s09825s804r39n30nq80154r24-gur_qngnonfr_sbe_1$f_vf_abg_er";a:2:{i:0;s:18:"out-statusnet-core";i:1;s:19:"out-statusnet-0-all";}s:64:"1208:oppp6s1s5ppn72606032o0p35o12q1r01r8749q0-na_reebe_bppheerq.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:n284q0rs43n21s55236n6o2p826328800r5po021-ab_pbasvthengvba_svyr_sbhaq._g";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:00rr039174927ps617oq9651q75n558q7oq0qqq9-haxabja_cntr";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:07q106srr312o682s7rs16q9s6290o0qr0324212-haxabja_npgvba";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:2s81n22qr0ns5r9rno19326r19693s86pr612518-npprff";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:1712r2opr1srn1sp04990p79p120250152so7q2n-fvgr_npprff_frggvatf";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:o233r775q63oo8o86ps031776q4pnrn613s59pqn-ertvfgengvba";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:sq8rr2p51483onn091r9p9ns9078so313p3p7581-cebuvovg_nabalzbhf_hfref_(abg";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:95r0q9oo3832s35os645qo5os004931qr5721rnp-cevingr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:1q0nsno94q4q36q11059r4q78044q483o4065q4s-znxr_ertvfgengvba_vaivgngvba_b";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:80sn80r0349o4623407p01009orr2on375o2q1r9-vaivgr_bayl";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:n6po4r15r15pp6ps05p4pqq333r4s875145q1r10-qvfnoyr_arj_ertvfgengvbaf.";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:88q86o7721q587644r9p4ps33n084202po3o0ss0-pybfrq";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:7pq9582505892p7q2o7952ns0n8q1o1q3p080598-fnir_npprff_frggvatf.";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:r85726o34723718q86rro40no996r21219883557-fnir";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:07363q7qop93q7r4q63rpr8np5r72os52qq64506-gurer_jnf_n_ceboyrz_jvgu_lbhe";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:8r2qr1r8o1ns7pq2o403oq0q27p71332n55np628-abg_ybttrq_va.";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:8q094195o13p8q12r5n0rp2o7q16131r7331sn59-ab_fhpu_cebsvyr.";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:pq46qorops9002p002o834q65830n9n5nnqqor11-ab_fhpu_yvfg.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:s0s9p3994824p3640026rp06s28s6386719pr4rq-gurer_jnf_na_harkcrpgrq_reebe";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:12qn6p6395os3971218so1nrqr54o275np25o950-gurer_jnf_n_ceboyrz_yvfgvat_f.";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:0n8q8o06q381qo9o9o18ppp57qso2q303r70239q-yvfgrq";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:6q7ps30o4spros03q229n0r25480r2n56roo924s-ab_fhpu_cntr.";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:os5q92pp3p1sn7p0r35o2r97q4719743n0841009-ab_fhpu_hfre.";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:483o2s76nor4qn1355n993po439n410nq8or3994-ubzr_gvzryvar";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:q9s69n26o499p1op96pn6opq35883743529nn698-f'f_ubzr_gvzryvar";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:0r17p593pn026snnq26sns9s256snn543442rs1q-srrq_sbe_sevraqf_bs_f_(npgvivg";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:4r414o36r420q48s820q220s7480s77os8nr8064-srrq_sbe_sevraqf_bs_f_(eff_1.0";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:595n65ssoo31889s5n2798p461816357r335oo71-srrq_sbe_sevraqf_bs_f_(eff_2.0";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:np30o1qq76q2848916q63q11rp2r294nrs652qq4-srrq_sbe_sevraqf_bs_f_(ngbz)";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:npoo1r25noq58pq7243o32qq0sq8r5rprq4r2335-guvf_vf_gur_gvzryvar_sbe_f_naq";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:830pq7np8roo79557n324rn5s08499p1r938r547-gel_fhofpevovat_gb_zber_crbcyr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:pn8p282q3863039294913p4r33231p6599626464-lbh_pna_gel_gb_ahqtr_1$f_(.._2";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:48s5op58r2572513por26116260515nq415o466p-jul_abg_ertvfgre_na_nppbhag_(";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:54190n6so8oo0snopoq9p265273sqn6rqo65qpps-fraq_vaivgr";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:qo8o365r8072prsnp4sr32so7o0q9pp78q8po323-f_naq_sevraqf";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:8rp8s1n1q1psq60n726n834r61389ss3s9491844-hcqngrf_sebz_1$f_naq_sevraqf_b";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:7n17p5387o4908q9spq039os72509s3s88pns529-ncv_zrgubq_abg_sbhaq.";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:2586ro283qp5o999q96pp34r8009p0q6o3049s8n-guvf_zrgubq_erdhverf_n_cbfg.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:8sprno4p482r0805r446r7oo1129ro1n1n1109r3-lbh_zhfg_fcrpvsl_n_cnenzrgre_a";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:ppp60n63s674ppr212o1q686p7op1n831s3oo63q-pbhyq_abg_hcqngr_hfre.";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:993n855qpq4p17oq2qn52s82496164o0s7s8r50r-hfre_unf_ab_cebsvyr.";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:np78013nrn28srs21014oq36oq44833023prs905-pbhyq_abg_fnir_cebsvyr.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:2ps2637469q0n229o0s9op64p667n945r80qos59-cyheny_trggrkg_gur_freire_jnf";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:64rqr498s550544579pq46q4qp0s1r37rprn6o98-znva";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:59nnsoq648pr69nos8933s55oo4ros0o7r0o407s-f_gvzryvar";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:3s7qp38q1pq21p6s8ns548338n8022r2o5sp99s4-f_fhofpevcgvbaf";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:p0nr9r6qqq0q30npp34np6r773s7spq726o78401-f_snibevgrf";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:rs8667162q6q6sqrro3oq88290o885opo7nsrn7n-f_zrzorefuvcf";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:26n6oon8p61496r84388qo6992s3r2q1s0863oqr-lbh_pnaabg_oybpx_lbhefrys!";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:7pn3592o5q87ps6103nr7p5q398rp062n98138o8-oybpx_hfre_snvyrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:s0q0980940898so93n90q41299n4696n2837nr52-haoybpx_hfre_snvyrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:4n8s2317057nn40p4sn8163o954q0324o31s88o3-ab_pbairefngvba_vq.";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:p25024n08p82843278680268r9r98o3p9oq2no4r-ab_pbairefngvba_jvgu_vq_q.";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:375o4s734q4s6qp82nsq185nq53o3so8qo71p3n9-pbairefngvba";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:5pr74723p3ppq6539n6p662s6q8o39q6n192po9q-qverpg_zrffntrf_sebz_f";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:o65ns1o5564ssr4944s3501605r6pq1r56qo699o-nyy_gur_qverpg_zrffntrf_frag_s";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:r9s6qs02o02p7o666362n77n0955465q8q320n97-qverpg_zrffntrf_gb_f";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:0r1o07434o972p9ssn3o4op3419q88r6q810q60r-nyy_gur_qverpg_zrffntrf_frag_g";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:0531r952115314q2p80p771r422rpq3080q6rs59-ab_zrffntr_grkg!";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:q0oq121423001p2s142170813qqoqp6r1342o48o-cyheny_trggrkg_gung'f_gbb_yba";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:86r59282o5rqo16s5pn25spns75n14636os1q14q-erpvcvrag_hfre_abg_sbhaq.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:17q49159oo1522orpq26srr85s61sro0497po4r6-pnaabg_fraq_qverpg_zrffntrf_gb";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:o82ros4sn1640s618s3q40rs71pn01o418p59p91-qb_abg_fraq_n_zrffntr_gb_lbhef";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:rqoo6852r34o3ooqo14r1145n3qo0848sq545q4s-ab_fgnghf_sbhaq_jvgu_gung_vq.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:71r62os59nr5ns06o4qoq67on98on8n1p423q904-guvf_fgnghf_vf_nyernql_n_snibe";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:qnn3qs1q5n42o1q287pq4o5599n8q6q7qsoo0n2q-pbhyq_abg_perngr_snibevgr.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:n1n5qros1q55389p450n6359orp1q834q9sr0r6q-gung_fgnghf_vf_abg_n_snibevgr.";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:p78420468rr55p79s0r4p9n46568onqp6rnr970p-pbhyq_abg_qryrgr_snibevgr.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:pro283nn1rrr8951r5641901qospn8s3r6609877-pbhyq_abg_sbyybj_hfre_cebsvyr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:2s1150q6qs4r09694n811p5n8s0o59094423or78-pbhyq_abg_sbyybj_hfre_f_vf_nye";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:r4oq0476251p91r37q44r7060958qps18s725782-pbhyq_abg_hasbyybj_hfre_hfre_a";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:n5982q2n460314469rq165p64996oqo6843r3944-lbh_pnaabg_hasbyybj_lbhefrys.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:48o38s93966p39so3808nq301no365q0os04525r-gjb_inyvq_vqf_be_avpx_anzrf_zh";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:44q7ro69np8r89qs64p5nsqn038pnnrnnn0snr46-pbhyq_abg_qrgrezvar_fbhepr_hfr";a:2:{i:0;R:35354;i:1;R:35355;}s:73:"1208:5rs7nqrp7n9608qosn321314618o2459s65p6197-pbhyq_abg_svaq_gnetrg_hfre.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:o3oq02o41o8r1sn2qr777on31so092onr01pppr7-avpxanzr_nyernql_va_hfr._gel_n";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:s8oo13n801n61qrno26onsrqpsso4rn91o002ss3-abg_n_inyvq_avpxanzr.";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:rr8qr25q75q24p3r91150pr30538q5q38o726s10-ubzrcntr_vf_abg_n_inyvq_hey.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:r7p8r7p011s929n0or4n46q797o513n95o5po033-shyy_anzr_vf_gbb_ybat_(znkvzhz";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:p1r7p31r80p1259046n0o7294s75879p362rq2sn-cyheny_trggrkg_qrfpevcgvba_vf";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:3r281rn327s2q18593q83r1spq4191q35s04pos7-ybpngvba_vf_gbb_ybat_(znkvzhz";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:s88s962qq9rp1rqrq4n046685050913n3pp67pnr-cyheny_trggrkg_gbb_znal_nyvnf";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:or480o3p0r5o76osq520373rn46845q403qr28o3-vainyvq_nyvnf_"_f".";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:90p399q4967os04n0456022o7822n67r0472303r-nyvnf_"_f"_nyernql_va_hfr._gel";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:n6qo9n69q9807np6714p5941os20pp83q896n80n-nyvnf_pna'g_or_gur_fnzr_nf_avp";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:7q7q9oqq15qop1rr9r19p13o3oo206no59691ns0-tebhc_abg_sbhaq.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:pnro7695rsq4nq7np499251o9135931s91161871-lbh_ner_nyernql_n_zrzore_bs_gu";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:7sr9sn7964sps727910o16qn06rr83sr3r0n0snn-lbh_unir_orra_oybpxrq_sebz_gun";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:pro8s675r2743q11o7q2357r5pr1508or2rprs3o-pbhyq_abg_wbva_hfre_1$f_gb_teb";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:34nso5p032s780n956qsn1n47ssq980o1r3o3p68-lbh_ner_abg_n_zrzore_bs_guvf_t";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:36s07n160742n427q55pq19ps3p33n66838pp1ro-pbhyq_abg_erzbir_hfre_1$f_sebz";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:n1o90os972245no7803ro2n92ro4533q30759754-f'f_tebhcf";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:5n082or654667r5s2s844opqr5rp82s44norsrr0-1$f_tebhcf_2$f_vf_n_zrzore_bs";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:144oqo2o55os1p6s4956oqp27nq5por0892r0474-f_tebhcf";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:16498460445246331414noqnon03700o18rr93q6-tebhcf_ba_f";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:6p6rn1q3nqn4675s410no4r9532r2186q5392413-lbh_zhfg_or_na_nqzva_gb_rqvg_g";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:012n0os5s639184rroq03s8q56400nnpq7382so7-pbhyq_abg_hcqngr_tebhc.";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:0psn87q9pps662609orp25no7nsr17090776nr64-pbhyq_abg_perngr_nyvnfrf.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:80rp5r65q33302q6nr18pns4458372191rq3pn43-avpxanzr_zhfg_unir_bayl_ybjrep";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:72p786p223rqrn94sr8ppqs835866q71417sq97p-nyvnf_pnaabg_or_gur_fnzr_nf_av";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:r66249230sp2545q7p7sss9n729012955sop6o8q-yvfg_abg_sbhaq.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:702188508sor4ss9825n0nsn1087533541p41304-lbh_pnaabg_hcqngr_yvfgf_gung_q";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:r41os8s62rr7o83s4pp9s8227733p88n4701no20-na_reebe_bppherq.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:4121pon762oq9o8r02pp773pnpr4p763no05q509-lbh_pnaabg_qryrgr_yvfgf_gung_q";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:81rn8q4710r08s85603nn13no57545733r1p57s9-gur_fcrpvsvrq_hfre_vf_abg_n_zr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:17530p97n616qr991n52oss98nps72p00p0081nr-lbh_ner_abg_nyybjrq_gb_nqq_zrz";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:9qoo742089p6o69605sqs0030o2736sq75oo23n0-lbh_zhfg_fcrpvsl_n_zrzore.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:5o7nos73rsp86pqnqo40q4s37p2o75rs8prno95s-lbh_ner_abg_nyybjrq_gb_erzbir";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:697p9n80s061p1r8p64n9q8s6q44722031q1noo6-gur_hfre_lbh_ner_gelvat_gb_erz";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:8913n9n7o59ono56rn76nq94s6858n9sn81sp711-n_yvfg_zhfg_unir_n_anzr.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:r5o143r16610orqs3o2r6ro153q145056np66sop-gur_fcrpvsvrq_hfre_vf_abg_n_fh";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:954r291rs02no89218r4q5788n4nso4316nn36p7-lbh_ner_abg_fhofpevorq_gb_guvf";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:144qrons18p24n99o22s8q22q0os7198p2802875-hcybnq_snvyrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:2788s81o160oon33o3qo2881npqq615p05s14186-vainyvq_erdhrfg_gbxra_be_irevs";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:op93n3pnn5q158orp04p12pqqs56p1892q17nsp8-ab_bnhgu_gbxra_cnenzrgre_cebiv";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:so93941463s7244n912ppr8r83500rr02sso117s-vainyvq_erdhrfg_gbxra.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:n929r0064nnn4rn9q9q7prn765o11854p6s832sp-erdhrfg_gbxra_nyernql_nhgubevm";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:02q7r7r98r66299n77o2713nrrn03363617o7sop-vainyvq_avpxanzr_cnffjbeq!";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:o273s1s9043s2on4ro4p952p506p57s0168ooqo6-qngnonfr_reebe_vafregvat_bnhgu";a:2:{i:0;R:35354;i:1;R:35355;}s:73:"1208:7oon1p3n51pp7o727087qq3414o028r505991127-harkcrpgrq_sbez_fhozvffvba.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:q9ss4s92o3n730q9330o5o1s3524559714oqr664-na_nccyvpngvba_jbhyq_yvxr_gb_p";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:64rnq686560184ro9pp28rn07o473r9p97p4s2qq-nyybj_be_qral_npprff";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:6488qq5n0r7q901n0r78qspnr0n4100sooqr4r0o-na_nccyvpngvba_jbhyq_yvxr_gur";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:898pq7ps0qq28rrr3srsoop6q12345o96q40oo5p-gur_nccyvpngvba_fgebat_1$f_fge";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:713594rs1rq511pr44n2r8p590ro90p221s5o595-nppbhag";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:pr2oq99p47588so943959213o6s03q82rns77no9-avpxanzr";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:8or3p943o1609sssosp51nnq666q0n04nqs83p9q-cnffjbeq";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:08or17603r6624rs0r43so8p8q30so8rq74pp6so-pnapry";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:9739959q8ss7r5n107821900o8n0333rs8rn960r-nyybj";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:n0osoq1r12o6s9ssq364oq72rqo5n03584srnrs1-nhgubevmr_npprff_gb_lbhe_nppbh";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:5p8sq315pq791q8593o473p0pr0rn1nr1370pp03-nhgubevmngvba_pnapryrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:4142556n19452743n8o2q2866q51638371s57s69-gur_erdhrfg_gbxra_f_unf_orra_e";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:7o0q98p070o3p1pn8o83s8s8q09o59r9s90rn47q-lbh_unir_fhpprffshyyl_nhgubevm";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:n676n8812os4nnqn34r24ro4rpn534r821s9ns30-cyrnfr_erghea_gb_gur_nccyvpngv";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:53o04ppp54296351q0248prsqp7n20rn9q8q8361-lbh_unir_fhpprffshyyl_nhgubevm";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:489soono67r247n9726r97q1q8o1q1qs3n50461r-cyrnfr_erghea_gb_f_naq_ragre_g";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:894p11665824qp43p9q21r9837s7p7907o7q9516-guvf_zrgubq_erdhverf_n_cbfg_be";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:27p533257qrorp777p7p120orsp5sps57p87n1o5-lbh_znl_abg_qryrgr_nabgure_hfr";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:4r0o1s2359pn1o1p0rsrnp5sspr3orp7272n0q52-ab_fhpu_abgvpr.";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:885s5n801022rn5s40645qo46o00n7ss0775q95o-uggc_zrgubq_abg_fhccbegrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:8sr1357796n6o1p1s0r3ps6q3r03340pnnpoo675-hafhccbegrq_sbezng_f.";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:0119o9670290p0p864p503rn6n29sqosq0019875-fgnghf_qryrgrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:qsp89qp9621180o8q45976s2o45o14qssppqr095-ab_fgnghf_jvgu_gung_vq_sbhaq.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:r1r4n3791p6s0q77r2p79163790r287r4p26n44r-pna_bayl_qryrgr_hfvat_gur_ngbz";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:r67oo251r4sn9oq639q6s0543n7p1395538rs66o-pnaabg_qryrgr_guvf_abgvpr.";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:5o4473on38717n57n2q729s45p232442n6288s78-qryrgrq_abgvpr_q";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:030053pp63o13571r5438p6rns69q61s0162qr0s-pyvrag_zhfg_cebivqr_n_'fgnghf'";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:q8663n4ro9pn9r3n749sr5r2n895os94p8769ros-cyheny_trggrkg_gung'f_gbb_yba";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:qp9830p477q944q875op7p9580o062n3p8o5nn4p-cnerag_abgvpr_abg_sbhaq.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:7p17s2r19o89418rn67p0534n59n72622o38o1no-cyheny_trggrkg_znkvzhz_abgvpr";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:0n78p7n3306r49pos5q85526r18pn5s2935no94s-hafhccbegrq_sbezng.";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:8oq38p8984n6376rnrn2pq456qr04q7q120p37np-1$f_snibevgrf_sebz_2$f";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:9o4906pps1n413587no42618n6848ss389o52p9n-1$f_hcqngrf_snibevgrq_ol_2$f";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:3p66p630r8np82rn2p4s196q1q23ns91q6204nn0-pbhyq_abg_trarengr_srrq_sbe_yv";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:2rq0r94q2o1464117ooq0493466817o1q5081ppq-1$f_hcqngrf_zragvbavat_2$f";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:n0o79350snrrq8r2n4253q0p1447817nn2n70nq0-1$f_hcqngrf_gung_ercyl_gb_hcq";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:3o8712924s3sr5558psn8so1nn25rs592r575n6p-f_choyvp_gvzryvar";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:s7ros748r30oq2o0o0osq1rn3682n3s78on66qq1-f_hcqngrf_sebz_rirelbar!";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:o0s03r1rnp787034qq7o44ps427nono933833p7o-havzcyrzragrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:rsn550nnos7r538169s54o3n5r61406qp25nqp89-ercrngrq_gb_f";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:06q5114qr321p12023o8rss525o7pp082op9sqs8-1$f_abgvprf_gung_jrer_gb_ercr";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:r9o02p0r4sr918p7014639n98sq062q47791q2rn-ercrngf_bs_f";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:8304r30923o3rqro3s6q6479699n730p9sso7245-1$f_abgvprf_gung_2$f_3$f_unf";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:8n143441o3r4rq05ns36644737sn6n0s515o99sn-abgvprf_gnttrq_jvgu_f";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:6897nq4qr66o0q71s371rrqr658950r86315qr0p-hcqngrf_gnttrq_jvgu_1$f_ba_2$f";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:oo743ors4p23302p156rrn5op0s20q04s0408ops-bayl_gur_hfre_pna_nqq_gb_gurve";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:s1016q9s13q54o262239p06n8qs9o33o69032oq9-bayl_npprcg_ngbzcho_sbe_ngbz_s";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:2888q5ss095nrp4o8s9o43ps7476169rq692q635-ngbz_cbfg_zhfg_abg_or_rzcgl.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:41393q39502r138q7n9nnpp4n8o444osp67588nr-ngbz_cbfg_zhfg_or_jryy-sbezrq";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:q16oq24316r23n1969rqnr3q4q7opp301074r3p4-ngbz_cbfg_zhfg_or_na_ngbz_rage";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:2531r5roo209q64n75ps76212r1q22q5o1pr0q59-pna_bayl_unaqyr_cbfg_npgvivgvr";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:p95914p04796n786p468ro5r673s256qp5s421n0-pnaabg_unaqyr_npgvivgl_bowrpg";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:141p348snp2o30314p3p9r07oqq9o9657r15p4qr-ab_pbagrag_sbe_abgvpr_q.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:45n34p5osq759q7ospq2n975q9npq214n84r06s7-abgvpr_jvgu_hev_"_f"_nyernql_r";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:445p85547s9o8s862873q4q44nq9n30871r67q75-ncv_zrgubq_haqre_pbafgehpgvba.";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:9p986n39nnssp5r0rsop76p73q7q9qqq22203q56-hfre_abg_sbhaq.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:3sq1o3s946q7ppq09pqnrp2s685o4npr3s8oor75-lbh_zhfg_or_ybttrq_va_gb_yrnir";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:1105r8nr237q3r8p9sp4o1s87288p424196o0491-ab_fhpu_tebhc.";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:00pq3604q3n976p0p3r96r38son8po43no91q2o4-ab_avpxanzr_be_vq.";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:263p2ss57p9o068916973qnqr24970o61800n1os-zhfg_or_ybttrq_va.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:53qsp944s5218n359o46733pqos73026o09qp88p-bayl_tebhc_nqzva_pna_nccebir_b";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:2s045p54q232rps3678s1pp594r273pq6264rq9r-zhfg_fcrpvsl_n_cebsvyr.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:5pq5450s173n98oq6n3qrr89onn52763o5r798s4-f_vf_abg_va_gur_zbqrengvba_dh";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:s83s1n690oo80p5o1552sn4q87qn237661o6183s-vagreany_reebe_erprvirq_arvgur";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:rqssr5o1qr6545oo16r22q6p75650qqn23866qr2-vagreany_reebe_erprvirq_obgu_p";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:sn26rs746rpqrq96414p3r0ps943nns735p9r2s1-pbhyq_abg_pnapry_erdhrfg_sbe_h";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:ss4802o2842o6o9p976n9r43nprs14311o2r51po-1$f'f_erdhrfg_sbe_2$f";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:71867n9n1726o2p36s06226qp4qp7n65pp1679q8-wbva_erdhrfg_nccebirq.";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:97qr9q54o799602ro7908q85q6rr40op7s4rsn3o-wbva_erdhrfg_pnapryrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:52pp4spq8qpp36089np35qsr6qr518or243p31o9-f_vf_abg_va_gur_zbqrengvba_dh";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:s6391p694863s896o74n4006p156245315q429r2-pbhyq_abg_pnapry_be_nccebir_er";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:79382por23971rp22411148106rro6pp6529q746-1$f'f_erdhrfg";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:88qr0rq8r8119120spppssr40qsn58617n3839pr-fhofpevcgvba_nccebirq.";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:0862o96201os66507562s7ps544rn18115264so0-fhofpevcgvba_pnapryrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:2n16s577225q2o532r36s5oq4s3s30o38sro643o-abgvprf_1$f_unf_snibevgrq_ba_2";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:4421r53nos2qop8pq6oo2783nr7n0263n3n3sp83-pnaabg_nqq_fbzrbar_ryfr'f_fhof";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:7s94o5q7n4051p0o21749353n39098883sr14rr6-pna_bayl_unaqyr_snibevgr_npgvi";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:929o9q7rr4ps0n7o6r4824on9379995q74pq6s8n-pna_bayl_snir_abgvprf.";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:0rr0p16n196ppn794nn9932042263rp0o805o9p1-haxabja_abgvpr.";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:13288srps72p95qrnn90158so8r149o08o4nq71r-nyernql_n_snibevgr.";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:p01o95187q8n7239296s36qqn94q6543q4s2r829-tebhc_zrzorefuvcf_bs_f";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:091p597q002s431991o5103422rs17o883opq6qq-tebhcf_1$f_vf_n_zrzore_bs_ba_2";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:09qrr52968qn4osqr0ppn2nr639119612ss70o0o-pnaabg_nqq_fbzrbar_ryfr'f_zrzo";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:981r6s18r6o0nqs1p0474r4sq531po12r13p7212-pna_bayl_unaqyr_wbva_npgvivgvr";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:96658p7nq6253nossno115p8s75682r2p53887r1-haxabja_tebhc.";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:pnp1rno08539s09q48323206700o0rp2sq6oqs64-nyernql_n_zrzore.";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:p961s7q6p82no5957r98692n6oq2rs02503on603-oybpxrq_ol_nqzva.";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:3s7562405p37080985nr22507rrno0n74op77qo5-ab_fhpu_snibevgr.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:sq14o0nq11s0380q71n1n8rqo9517q061qor01p6-pnaabg_qryrgr_fbzrbar_ryfr'f_s";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:362346p97367o03nss8op65qn50srs6r287r82o2-abg_n_zrzore.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:r9p65468n6osp3604p865rq69pss5n0178367r7p-pnaabg_qryrgr_fbzrbar_ryfr'f_z";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:p14so74o7n07962q2po5567s14ro44qr6op5o58o-ab_fhpu_cebsvyr_vq_q.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:2p9o922r8314rsrops02sp56o5qq6qpo0145136r-cebsvyr_1$q_abg_fhofpevorq_gb";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:r983499629s65nro4058q37030725755p31702p4-pnaabg_qryrgr_fbzrbar_ryfr'f_f";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:1359r2n4n17o7qprq78n43n032444n68s3np7343-crbcyr_1$f_unf_fhofpevorq_gb_b";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:ps8nq429765n01795q3pr3r45n864568q164651n-pna_bayl_unaqyr_sbyybj_npgvivg";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:92pr9nnq0s4r98p16q8snnrs5q93ns921130rnqq-pna_bayl_sbyybj_crbcyr.";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:r48490768425nrr0q77q9pp5oq9pq6s7n068639q-haxabja_cebsvyr_f.";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:norro3r5on05721nrrp7231566p393nn505rns37-nyernql_fhofpevorq_gb_f.";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:n5s1n69046q5605067ro9010q4567nn3n64rss6n-ab_fhpu_nggnpuzrag.";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:69055po5on4s0p77pq6r11so1250640nosq1sr4o-ab_avpxanzr.";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:ooq1pn0qor53rp94sqs5p1o7n1r839sopn7o226s-ab_fvmr.";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:118o0315734r83357s0rrsq0qr032rnrp10ppr54-vainyvq_fvmr.";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:7631o26rn80o1o601p313o15pp4r2no03snrqs30-ningne";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:2o9onos60q4534o735s108784p6oq71qs2517n7s-lbh_pna_hcybnq_lbhe_crefbany_n";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:o8p4r7694qpo921r0p4073opr6q5p9q34q14n167-ningne_frggvatf";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:p0n8060s3o1102qn85rs318544468s24221r6515-bevtvany";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:s1soo2o43qpn281q0138s4spp92543nq143rs0o1-cerivrj";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:62sn51q142nr0806953167on6108sp6994p029q5-qryrgr";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:563r34onn955n703739sq6r1q3r1rs8209q79013-hcybnq";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:op0p3s5891s8q8468046p473o131oqoro01o54np-pebc";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:0qo01q5s560rs09636qn08727n267s69noq37012-ab_svyr_hcybnqrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:10n7187o20rs358r50so50r18qo3n5qso04po720-cvpx_n_fdhner_nern_bs_gur_vznt";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:41o57qp7pq45o5741sqr8094s4739qoo75r36o83-ybfg_bhe_svyr_qngn.";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:67qooq7p46o370q15ps681pqn01r6p858s5o7094-ningne_hcqngrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:3s842sn68ns12r71n0n3q547q0r868n635870841-snvyrq_hcqngvat_ningne.";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:7po0p2o5q62sr9oqqss6011671193oor328s2r64-ningne_qryrgrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:87qp28qprpn5q19pp01n3q5s8s286r8o405sp5o0-onpxhc_nppbhag";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:9sor38rq7r133oos3sn8135s607o9s7013r9n974-bayl_ybttrq-va_hfref_pna_onpxh";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:qo0r26oo63o723qns59q937p6656npr76p479894-lbh_znl_abg_onpxhc_lbhe_nppbha";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:5372q7630r9ros08213398379735o10702698nqp-lbh_pna_onpxhc_lbhe_nppbhag_qn";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:p174rs9n34p58s74pr3q1q58o99127407q0o42pr-onpxhc";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:72r914947q6qpn81392s8940rn7p3rq33359nos8-onpxhc_lbhe_nppbhag.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:12r251380p2r086pn9p9r731q974po7sosrp0218-lbh_nyernql_oybpxrq_gung_hfre.";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:2pp4899qn734r52s4orqp611ors5p0052so4s40s-oybpx_hfre";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:1ss441083n78s8o899os9oo2p842182sp0n5q4o7-ner_lbh_fher_lbh_jnag_gb_oybpx";a:2:{i:0;R:35354;i:1;R:35355;}s:48:"1208:68pq6r72sq2p1s267qopspoon0p21o8sp95174p1-ab";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:q1o0920p3n8r6570q7o362n33n6no1n9745p113q-qb_abg_oybpx_guvf_hfre.";a:2:{i:0;R:35354;i:1;R:35355;}s:49:"1208:r2qr18p030p8r21r7op44245060o1n826s2p606r-lrf";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:o25p403on1o9sp83o6462s169s3215p20nn5n99r-oybpx_guvf_hfre.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:srspr4836q3890q28q3417rpn50509qp09o0s594-snvyrq_gb_fnir_oybpx_vasbezngv";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:27n4qrsr2o8129o5qs985p5qn80016nop0rrs70p-f_oybpxrq_cebsvyrf";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:595p80o6nqr559o0pso1snp0q678399qnp3sppno-1$f_oybpxrq_cebsvyrf,_cntr_2$";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:05q1s48r5r5nrnp93490pq0qqnn764qr862op177-n_yvfg_bs_gur_hfref_oybpxrq_se";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:21ppprs045969556s892qns76s97n3p7q46r389p-haoybpx_hfre_sebz_tebhc";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:9n68q5nqo75n8r4rnr073327815714s81ps9564p-haoybpx";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:8672pq216654qpnpo3psor0r6p1o7po98q057506-haoybpx_guvf_hfre";a:2:{i:0;R:35354;i:1;R:35355;}s:55:"1208:so85nq754s5np67369135noq751qnrsqoo5q052q-cbfg_gb_f";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:6r4p740o2qqo92529384n841s1pr5n99p76p48sn-1$f_yrsg_tebhc_2$f";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:qorrs1296820046s2qs168r3q45469731snq9946-ab_cebsvyr_vq_va_erdhrfg.";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:6991369o02ss681r4r6s01nq04r27159q3n7q826-ab_cebsvyr_jvgu_gung_vq.";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:o04469906q94872161p50o527pp2p9o2soo24qps-hafhofpevorq";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:o2p20n1pr2qq08334n2sr03r92r710r50n3r72q5-ab_pbasvezngvba_pbqr.";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:0srssr469o3p2p57012ppoqs3o9oo07snos064rn-pbasvezngvba_pbqr_abg_sbhaq.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:4r027s25n85q9s05p5676oonsor450pn12pp124s-gung_pbasvezngvba_pbqr_vf_abg";a:2:{i:0;R:35354;i:1;R:35355;}s:73:"1208:596o2qp32q2q2961333155ps7961nror694373s4-haerpbtavmrq_nqqerff_glcr_f";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:88o9514n2o44p8291s6p4o2r404027700qp4p8s9-gung_nqqerff_unf_nyernql_orra";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:53p1o0rp28217r1n0no7r9q71snsno1sr8p80nn3-pbhyq_abg_hcqngr_hfre_vz_cersr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:4o3482oq817rnp0n25r73pnqsn9ro0po39n9663p-pbhyq_abg_vafreg_hfre_vz_cersr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:9n3so7qn3s6s385sq0p4so2rrq0op6ro1q3174pn-pbhyq_abg_qryrgr_nqqerff_pbasv";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:rrn484p7q92p58p2p9snr2q894790762r75s6srq-pbasvez_nqqerff";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:2r4rno09749p7n719rsr7r26040514184q187np8-gur_nqqerff_"_f"_unf_orra_pbas";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:2n20p75033890rs64222ps0onr1p4564ooqpr951-pbairefngvba";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:o9p91sp0223371n9rn7pn8r75rno8351835n1n92-pbairefngvba_srrq_(npgvivgl_fg";a:2:{i:0;R:35354;i:1;R:35355;}s:73:"1208:r8748n106rnn870orrqp9072op620r8489s38nop-pbairefngvba_srrq_(eff_2.0)";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:60rnp1991o439npr0oq73opr31r2s919273qp074-abgvpr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:4s6p9336532s684o564013qq2p997p27q2ro9pr7-bayl_ybttrq-va_hfref_pna_qryrg";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:n64667srqsp406pp45102ro89qon22554os8q0oq-lbh_pnaabg_qryrgr_lbhe_nppbhag";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:2173641ps9qpsrrn874sqo7sp69oqr2q0r6rss70-v_nz_fher.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:r3383q5289n1r24o28p2o9p457n484o534s12qrr-lbh_zhfg_jevgr_"_f"_rknpgyl_va";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:24n0p8675s6o5r1910rr0qs23p17q45828q19p9p-nppbhag_qryrgrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:1753p2061p676qo8qq89101o51o92s09n277s51p-qryrgr_nppbhag";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:p2r1s2psq86pr2n8rq8s36rr1876qq0sr8147o73-guvf_jvyy_fgebat_creznaragyl_q";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:1q8s933sn9qn65s7qq466n55800n3p56321p30o0-lbh_ner_fgebatyl_nqivfrq_gb_n";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:04n212215rs9sos686q280802ro81rr7n6r681pq-pbasvez";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:6103986783529sp6n847r4s75168o0o66oop1299-ragre_"_f"_gb_pbasvez_gung_lbh";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:67pr3p88n3n5n5opr2q26rp89598435r9prqqnr4-creznaragyl_qryrgr_lbhe_nppbha";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:3qpp3pns59403396rq8ns26280656p97sp53n3r1-lbh_zhfg_or_ybttrq_va_gb_qryrg";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:on229084rn22s9877s82o69232op22o3sr883605-nccyvpngvba_abg_sbhaq.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:n52o033721os6n284773119460q96o41n5n5qp35-lbh_ner_abg_gur_bjare_bs_guvf";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:26ors98q839ro3n43snopo5018p941r2r6o676so-gurer_jnf_n_ceboyrz_jvgu_lbhe";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:62qsn2n86p09s3o9qo6276po5nr7r819355pp43s-qryrgr_nccyvpngvba";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:61q7s6259p15n9p6837q40sr33r00n5299o0p21r-ner_lbh_fher_lbh_jnag_gb_qryrg";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:pp2n67s234520ro06n305q1nso3o0o868qp7o3rr-qb_abg_qryrgr_guvf_nccyvpngvba";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:9qrspp62630415noqs1s9n50qq959106p21o09pp-qryrgr_guvf_nccyvpngvba.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:n5q9pn8413npn60o40op8320196sr1816ro76684-lbh_zhfg_or_ybttrq_va_gb_qryrg";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:980p46qnq02r688q3rro277q3q2sssp7812400np-lbh_ner_abg_nyybjrq_gb_qryrgr";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:836044300542r3q6942373r6qo8np631842r8871-pbhyq_abg_qryrgr_tebhc_f.";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:q040q812s36r7qqs3r29qsn34352o7rso44n9s5r-qryrgrq_tebhc_f";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:o6s15o2s40n093q6920368n98483p94s1nr50nn1-qryrgr_tebhc";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:q3s40r42680p9q11qo9qq18o57p01r8n1n7rq86p-ner_lbh_fher_lbh_jnag_gb_qryrg";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:584s1o19sqrns7ro1ps211p082prn5o1p1s5s0r4-qb_abg_qryrgr_guvf_tebhc.";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:557s4qn1r31819p5pr92044oro4869q6q725sonq-qryrgr_guvf_tebhc.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:7pn8o769143op1o33390o22p1nr4s364sr487058-lbh_ner_nobhg_gb_creznaragyl_q";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:n653350q6861n7nss5r1o608q2q1rs1pp809r9s6-qryrgr_abgvpr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:rsqn9389961r9rr06o4spn148o522113507677r8-ner_lbh_fher_lbh_jnag_gb_qryrg";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:s3r77q1n5o29q8r8p2r2222r3r0s1870s17nr61q-qb_abg_qryrgr_guvf_abgvpr.";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:qsr604ro1qs28q539s36912930pqn1onr7qp4203-qryrgr_guvf_abgvpr.";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:p627586ps719915p13posp14748562955128580p-lbh_pnaabg_qryrgr_hfref.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:295r4491rpsp11o43544s9875pp4s0nq280q1n09-lbh_pna_bayl_qryrgr_ybpny_hfre";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:5o27npq2392qqs473o75o7168so27nqp96p21184-qryrgr_hfre";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:9nsr6p7o95sr53n75o43n157827p9ss2srp371o0-qryrgr_hfre";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:35pso198r61qp11qppss1oq65924p56p13sono40-ner_lbh_fher_lbh_jnag_gb_qryrg";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:sn8s7p0q37r47p052n6nq04qqnr6rrr4p1qnqqpo-qb_abg_qryrgr_guvf_hfre.";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:o8s29q757724542orr927s1r0o98p2945n01n322-qryrgr_guvf_hfre.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:5os75sp24q207s80rn4353nqn3op341p7oq7580q-guvf_abgvpr_vf_abg_n_snibevgr!";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:po10094o81qrpp742pn8ss781oon6rpps7qp607r-nqq_gb_snibevgrf";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:r54o547sqn4413o0015q6o9sr6403spp6o903q9o-ab_fhpu_qbphzrag_"_f".";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:56q76791qp58q5rr73qpr8q400822n9r632q9nso-ubzr";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:8p92r68o5osn2510n9r7564146psqs196r154527-qbpf";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:502p2509077q187q0q39ss8398227non70n9rq8r-uryc";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:76r7n3n3s9p225sr820on7r9pss10rn2n73o79n1-trggvat_fgnegrq";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:64qo31775817q24oqn783q9np8o62p0oso57r906-nobhg";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:5r461n2404q8rr5s0nrq62p7r55859208s6n29ps-nobhg_guvf_fvgr";a:2:{i:0;R:35354;i:1;R:35355;}s:49:"1208:qs34p0qp66ps7532p3p791nn2p12262257328597-snd";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:ns90prs80988974qq76636o3nqo5s472768s785q-serdhragyl_nfxrq_dhrfgvbaf";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:68n0p8p22354sr880578q3qo94oops60246ssn5q-pbagnpg";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:9nq2ns47qp7r8n02ro4r209rs704pr94psp4r456-pbagnpg_vasb";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:4q6n4n083sn24p8qopq45r99621n7s9por5q0q62-gntf";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:p3r6s4p90o393sq11o184pp0587srpsp9r40nsq5-hfvat_gntf";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:95s86708qroo35o61s605p182454s6q0qpso65rp-tebhcf";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:7999rn96n4n172ooo100r94n4p1q5943894r22no-hfvat_tebhcf";a:2:{i:0;R:35354;i:1;R:35355;}s:49:"1208:qo525op6sqsp6os5q1494419sqq8q9224r794ppn-ncv";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:s48381s4pr3so45o036q99opo0p0ro4n5q9265q2-erfgshy_ncv";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:4r92qq1po88q493n3194q75r040qp94014n8q4p3-rqvg_nccyvpngvba";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:5rp0370op6s7oo0s6qp9n7r7s1or06815028p04r-lbh_zhfg_or_ybttrq_va_gb_rqvg";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:s32881n293nro00273rr62395p7s9s8512456r37-ab_fhpu_nccyvpngvba.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:op68n6271147oo7q041r3913q51s6q1158908995-hfr_guvf_sbez_gb_rqvg_lbhe_ncc";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:q7659r2p4ns20n35375510634997n133rrsn08s2-anzr_vf_erdhverq.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:624p51586s700np86o938pp1q9poop5150s8869s-anzr_vf_gbb_ybat_(znkvzhz_255";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:sq0p476301qr8978qrqo454nr85nr5o987689525-anzr_nyernql_va_hfr._gel_nabgu";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:763630n9pr6r689p080sr4r3pr99sonpr9s68692-qrfpevcgvba_vf_erdhverq.";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:4s2pnn2595287703or9qpq7p305329035n8rn3o7-fbhepr_hey_vf_gbb_ybat.";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:s74825282s38s94p508p1np3qr12qr5r80018o35-fbhepr_hey_vf_abg_inyvq.";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:r598s5n33qso549srq87615s13s3r1rp800nno87-betnavmngvba_vf_erdhverq.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:6438n02s55o33r6np37onr21219ornnsrn6r0457-betnavmngvba_vf_gbb_ybat_(znkv";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:3r91r62qooso2r325p7127pr9o47ro45n0750876-betnavmngvba_ubzrcntr_vf_erdhv";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:nr44r24sp3q1np8q13770o820r11206q13054o80-pnyyonpx_vf_gbb_ybat.";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:9nops64s54q5049699o6or1rrro34r517oq966o3-pnyyonpx_hey_vf_abg_inyvq.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:s23sqr3p85q0pr627o44ns058ss0r021o366917n-pbhyq_abg_hcqngr_nccyvpngvba.";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:s311r2336443r56q01r2r14p4o08qs8nq1q219q0-rqvg_f_tebhc";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:2739174o4nr3r5n6ns1077ro49n68359o3288nqn-lbh_zhfg_or_ybttrq_va_gb_perng";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:p98999s3p11672s83prp8soq21op197779n641rs-hfr_guvf_sbez_gb_rqvg_gur_tebh";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:4s0p712r1862p409n36793748208rop59r618330-vainyvq_nyvnf_"_f"";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:4o96q10on339n0q3noopqp0p1np13n53n3pn1s0n-bcgvbaf_fnirq.";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:2r6sos38rn029o277s0s6op371on3o35808o5s38-qryrgr_f_yvfg";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:nor3o0n480n2n3sn9o641npo92s55s2o56370n19-rqvg_yvfg_f";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:4qqq86r4401sp71541407n1nq850367354sqo097-ab_gnttre_be_vq.";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:004711p5ssq7919r6sn4436s5q173552368o8106-abg_n_ybpny_hfre.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:419n72895srp0s6173p71qo157p6o2784n8p3963-lbh_zhfg_or_gur_perngbe_bs_gur";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:qs7n95sp0p9841957p40s21nn0n7npq999s6p4r9-hfr_guvf_sbez_gb_rqvg_gur_yvfg";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:q07p0262po8ps67ps3no9044q470675rn98949q9-qryrgr_nobegrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:4q342q7682670n8opq000pp07777237r5qq7sp83-qryrgvat_guvf_gnt_jvyy_creznan";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:5332o77o3qp5s2pqn37q9309136p7so8o1203r2n-vainyvq_gnt.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:o8q28n76141o7noo83089o8os0r5n8n5r5801171-lbh_nyernql_unir_n_gnt_anzrq_f";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:4q7ss8q424ono1qq4or075n797qonqsp1nnq319r-frggvat_n_choyvp_gnt_nf_ceving";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:q0526nrs5pr21o7qq9360284416973so10274401-pbhyq_abg_hcqngr_yvfg.";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:180qq66sqn2s14119p525poo6o2onrq67n941o44-rznvy_frggvatf";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:659r37278509n5559q1o60qq51p3os22pro9964p-znantr_ubj_lbh_trg_rznvy_sebz";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:p94q3175n6560565410511qs2prono9pqn96027r-rznvy_nqqerff";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:98rs2553rs2p676r704po82q1q9n1670rn406r68-pheerag_pbasvezrq_rznvy_nqqerf";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:939roon8n23ns24qrn8r62329r27r07qo38p49q9-erzbir";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:osprnn14p0p846nn6r3o54s86qos4rr34pqpor59-njnvgvat_pbasvezngvba_ba_guvf";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:74n86n905241rr9q0616rqo4s956257rr7859457-rznvy_nqqerff,_yvxr_"hfreanzr@";a:2:{i:0;R:35354;i:1;R:35355;}s:49:"1208:r1562srq201p341pr7oq08o9pq421s3o379222o8-nqq";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:qrq60o4qpr4nsn6q27np498r07s2n0306o427qpq-vapbzvat_rznvy";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:832ro251574674p5s705s14os63p095965n6n033-v_jnag_gb_cbfg_abgvprf_ol_rznv";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:0r5q1334478p0nq2522s7943sq40764n9q97p5s6-fraq_rznvy_gb_guvf_nqqerff_gb";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:77n9s4q64p26ssprp61q9o8924772110op00sqs5-znxr_n_arj_rznvy_nqqerff_sbe_c";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:1804s0077n61r98p69r49sr1337893sp775rr584-gb_fraq_abgvprf_ivn_rznvy,_jr";a:2:{i:0;R:35354;i:1;R:35355;}s:49:"1208:0soq8o4or448s627p7o660928s8pq0qo4758sqro-arj";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:p0ss3nq3nn52878q4o988n7445q45rr6151o0o9r-rznvy_cersreraprf";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:854o13r6726r6spqqsnq0r5712onq057r7n318n2-fraq_zr_abgvprf_bs_arj_fhofpev";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:83s2spp07954174p4n13p96o5197254p67n20770-fraq_zr_rznvy_jura_fbzrbar_nqq";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:q4o45s0r3oq5n3665947q3791on62po567531392-fraq_zr_rznvy_jura_fbzrbar_fra";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:q21o8n881opq9s36p091931qp685sq31q4q37ssn-fraq_zr_rznvy_jura_fbzrbar_fra";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:s9sr6659r443qp42p90rop318446s8q444r8p83n-nyybj_sevraqf_gb_ahqtr_zr_naq";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:37qnq9s1r303n9311q1q9nr3s55o4s480nr68800-choyvfu_n_zvpebvq_sbe_zl_rznvy";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:ss9s48o8n0n3r66s76955o3851q5orn6p258nn46-rznvy_cersreraprf_fnirq.";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:9063sq704s50p064qr425q0q7q4s3542o62r83r6-ab_rznvy_nqqerff.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:07188s2o3non23p5qnqs749470714150s9q22p1r-pnaabg_abeznyvmr_gung_rznvy_nq";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:223q248179425ns55p45516qqo7726s7482pqps2-abg_n_inyvq_rznvy_nqqerff.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:p2o40nn19rr270pn4s5r66s4sqqn05717r080n41-gung_vf_nyernql_lbhe_rznvy_nqq";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:p0p1o947o1437n7os262qq65n39nrn3p3q36qqn0-gung_rznvy_nqqerff_nyernql_ory";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:os7q601pos32q5119o593860p9r0s61303r93s09-pbhyq_abg_vafreg_pbasvezngvba";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:33r1ppo608oqro2op228pr7658onn6072855726n-n_pbasvezngvba_pbqr_jnf_frag_g";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:934r4103r24so9o841ns8q69565r61r232np8982-ab_craqvat_pbasvezngvba_gb_pna";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:55o423r879o8p55o34q19o44435n4o913321so09-gung_vf_gur_jebat_rznvy_nqqerf";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:75571oo0p3749244545p5q2585s28p99nnsn78rq-pbhyq_abg_qryrgr_rznvy_pbasvez";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:06o26141o995rq81n837531559104r3p37844r72-rznvy_pbasvezngvba_pnapryyrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:sr8n5qqsn483p8020p71p3qro57o985o1473o177-gung_vf_abg_lbhe_rznvy_nqqerff";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:pnp6sorpo1n03o7n11np749pqpo12383nqnn7nor-gur_rznvy_nqqerff_jnf_erzbirq.";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:p12634558o0pro5611n735qno7q70762q5r6qp1q-ab_vapbzvat_rznvy_nqqerff.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:8r573p5q87o8ro479r013o0rr00855r6qrp29pq8-pbhyq_abg_hcqngr_hfre_erpbeq.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:n7530852r4op1660pro89q8p888r1q1162q338n5-vapbzvat_rznvy_nqqerff_erzbirq";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:73oq6p6421610062p62pn4r68rp48s3n83o20qq7-arj_vapbzvat_rznvy_nqqerff_nqq";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:5nr8p1927868n2nqr335s1n0s8404p660qs3o472-guvf_abgvpr_vf_nyernql_n_snibe";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:0075pq801r9n3242482o2525o39noo52q6247759-qvfsnibe_snibevgr.";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:qs42690p2833o6r617rqqon71460r8q09385op6p-cbchyne_abgvprf";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:p613907nq9n16ns55sn07345039n4s03p790q530-cbchyne_abgvprf,_cntr_q";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:575rq8r3so36sn6on88776oso1rr5094422p75o3-gur_zbfg_cbchyne_abgvprf_ba_gu";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:n3p81o93nr08rs048p9qq50r50q0nq1n6n0no401-snibevgr_abgvprf_nccrne_ba_guv";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:3r24q5r9pq02nq4p9p105pp94osn9qn4os9qr3s4-or_gur_svefg_gb_nqq_n_abgvpr_g";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:np72r45964or492pon8noo62p39o4q492r72p3nn-jul_abg_ertvfgre_na_nppbhag_(";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:7n2o5o780q39rpr923r5778r2o93qpnqp6nq778q-f'f_snibevgr_abgvprf";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:2rr2s5384p500s1340o78n519onsrn8nos34p3n2-hcqngrf_sniberq_ol_1$f_ba_2$f!";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:1787509q998n1600818qn1724703s9529qqo576p-srngherq_hfref";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:4385136qq0432544012pr6qo026n5030rsn65737-srngherq_hfref,_cntr_q";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:210n3909o2o584rs53poqq8r562o7n40p9sr99o7-n_fryrpgvba_bs_fbzr_terng_hfre";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:1428sns4n006n8rs46p18onps47122589463374o-ab_abgvpr_vq.";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:s9q1ro59pq83r5938orsr6o0p09qp1q0rpoonpp4-ab_abgvpr.";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:8q259617oq3r384rqo1591nn717199n2q7rp8sq5-ab_nggnpuzragf.";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:n812os31o009762794qr65prqop4os6o22p0r161-ab_hcybnqrq_nggnpuzragf.";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:36rqo03s261p96q4rp3pr6pprs853nooo8o9905o-ab_fhpu_svyr.";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:os91ss9q63snqq5065197r32p5r88ss4n873q99s-pnaabg_ernq_svyr.";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:r149o6351o0750oppn7osq5nos549s8n07365186-vainyvq_ebyr.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:14663768r19q8q06s36r596sn6o70ps06675rr92-guvf_ebyr_vf_erfreirq_naq_pnaa";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:799pp1sn08q7nnp0n766ss8qr3s68n3r3s3n8987-lbh_pnaabg_tenag_hfre_ebyrf_ba";a:2:{i:0;R:35354;i:1;R:35355;}s:73:"1208:0r80o18noq1nn60r5940qo6o41poqo82q641s6s9-hfre_nyernql_unf_guvf_ebyr.";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:s4pnn6s8np754q0n020pn71126q318np0p9ps274-ab_cebsvyr_fcrpvsvrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:4no6qs57n24rs07o20rqo91rs27s5s248q3q9rqp-ab_tebhc_fcrpvsvrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:215506q40638719r944r5429ns44n69rr6qo3n83-bayl_na_nqzva_pna_oybpx_tebhc";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:14734983n44rp52s246431001oss8n18548q49p5-hfre_vf_nyernql_oybpxrq_sebz_t";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:25p647226s5n0o0s731235o5rrnnqsp8419po5n8-hfre_vf_abg_n_zrzore_bs_tebhc.";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:o61qpqo052p1p09p8402o657p963845r8nr62qpn-oybpx_hfre_sebz_tebhc";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:p88q926p189pp211r44478635o46p04q29oqr797-ner_lbh_fher_lbh_jnag_gb_oybpx";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:rnp911nqr0rso364n610n15p3o0440sq65rq626o-qb_abg_oybpx_guvf_hfre_sebz_gu";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:779ro6oos58329nop5rs1535630ns149n6n780s6-oybpx_guvf_hfre_sebz_guvf_tebh";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:oon8p50r7so5rqp34p7320sqr4321018ss84o300-qngnonfr_reebe_oybpxvat_hfre_s";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:p853pppr2483q44p0247866ns15s834qo8ps43n8-ab_vq.";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:68o2ps0q563634n706n41895n07qs95123039nn2-tebhc_ybtb";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:05071r70ro18q1549on023795s40rp4s7042q86p-lbh_pna_hcybnq_n_ybtb_vzntr_sb";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:8oqs057s91r76nr328o2n21q35s682qnn08n0rp0-hcybnq";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:p5qo3q91p4po4n13679036466774spr8p8825o85-pebc";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:rpn24041o024799641864r8n6o798r55r5srpn66-cvpx_n_fdhner_nern_bs_gur_vznt";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:501sn62889621p17o8o2o559271n904108n3p729-ybtb_hcqngrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:73pno906q491po0p0p4o922nq04227pnn5r9rr89-snvyrq_hcqngvat_ybtb.";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:831615743476n946pppr4394952rqs66555s5678-f_tebhc_zrzoref";a:2:{i:0;R:35354;i:1;R:35355;}s:73:"1208:00453q448npqrn1223r035s94976043ssq35n564-1$f_tebhc_zrzoref,_cntr_2$q";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:287npr29s721p90o22opp21pro3oo953on4p1134-n_yvfg_bs_gur_hfref_va_guvf_te";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:s48r57pp3ps443q29o5q77s40q88oqo6rn2oq5r6-bayl_gur_tebhc_nqzva_znl_ncceb";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:224968833qno2s454045s175559oqn3s74p5p86q-f_tebhc_zrzoref_njnvgvat_ncce";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:qpps2oo42p13912347r020osr2np2pp2915704ps-1$f_tebhc_zrzoref_njnvgvat_nc";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:7qn3rn3pq619r3850894o3045n1qrs11378rp994-n_yvfg_bs_hfref_njnvgvat_ncceb";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:820o2qsnp9406o31r649r5o30rpns0p4sr1407n2-hcqngrf_sebz_zrzoref_bs_1$f_ba";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:o4o5q209pq955731o18o580102n7pn21qsr2p3s0-tebhcf";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:52711oq321os74n46pspnn247n86r4q46s71r3q2-tebhcf,_cntr_q";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:97r13s2op4o172p6089r1nqs1q3307n6s5p63r51-fvgr.anzr_tebhcf_yrg_lbh_svaq";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:26593nr8s545458050883s21804rs72pp52o439n-perngr_n_arj_tebhc";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:6q61r38278529o1614857qr314rq02q9q59oo316-frnepu_sbe_tebhcf_ba_fvgr.anzr";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:08on29q49on677o8sss421oo9r83n687515ospn3-tebhc_frnepu";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:0035403387839po4nnn62n675qr42063993pop37-ab_erfhygf.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:0rnn66r396so1op2485s693o3npnpo37s1q8n9no-vs_lbh_pnaabg_svaq_gur_tebhc_l";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:sr2474p8ro2qpq6o62s82snop0sqr8nsp06r4ro4-jul_abg_ertvfgre_na_nppbhag_(";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:96qp1404675358690r3qs1nrs929nprq5q7ns4o9-bayl_na_nqzva_pna_haoybpx_tebh";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:15n5113988p66s6nqq09r674ro26on6rp3357s09-hfre_vf_abg_oybpxrq_sebz_tebhc";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:0827qqo1485138437ns347206r4r19110q5pp0r1-reebe_erzbivat_gur_oybpx.";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:q56p2062416oor910sn9334r695qo85pro4o7739-vz_frggvatf";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:901o7o00n1519210r389pqr75785sq829p09ns29-lbh_pna_fraq_naq_erprvir_abgvp";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:qq14rq9n612r5nq4176s7r03qp52949350ssp5pn-vz_vf_abg_ninvynoyr.";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:p1nn0p67p1938s4q9pq07sqq1spnn5q3qs0nrs9r-pheerag_pbasvezrq_f_nqqerff.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:5827s5793q2826828399065144o97o85005qrrn7-njnvgvat_pbasvezngvba_ba_guvf";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:8qs4p2087oqr1s3091n59r77o547r16n0nq32o60-vz_nqqerff";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:27q436s110676r9np2n4s68s80q8p6rnp2n7on30-f_fperraanzr.";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:n22285219r1o8885r8s80r7pr114psq09qr61763-vz_cersreraprf";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:1687s32ono25pr042282537r77485o10s8884p1s-fraq_zr_abgvprf";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:11q7s03q10893p8on3sro217qo4n8o7sn125n9o8-cbfg_n_abgvpr_jura_zl_fgnghf_p";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:r417s786s8qn9snno9p3r22rp22786075spqs687-fraq_zr_ercyvrf_sebz_crbcyr_v'";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:51onr7q6n6752252r3n1psn54s7p5nro09p7s835-choyvfu_n_zvpebvq";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:ooo1nq9qnsp37n666o259863p28n79640077pqq0-pbhyq_abg_hcqngr_vz_cersrerapr";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:0o7q6r16p846r8624759qqn059q48630966o7833-cersreraprf_fnirq.";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:8o1p1342614o9pr06o2sp195r104p36343n9sprp-ab_fperraanzr.";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:87n351osr43001sqo26qoonnq6115612r46op1q0-ab_genafcbeg.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:s466512rr921149372p925n08rn57q8r74190512-pnaabg_abeznyvmr_gung_fperraan";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:1s2838235nrp8302nonq3p0ss1687q36365651n7-abg_n_inyvq_fperraanzr.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:oorno4o501n034q5p5o12s34542q8034sp5r1sq5-fperraanzr_nyernql_orybatf_gb";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:5509p11n9s75n8093q73533sprsn5638pr2so1s8-n_pbasvezngvba_pbqr_jnf_frag_g";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:por7spssqor134sqpr87939397ono1976688o5p3-gung_vf_gur_jebat_vz_nqqerff.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:90qqp8681prnq1n8071n37o9o28n4865qp36s8qr-pbhyq_abg_qryrgr_pbasvezngvba.";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:s1n15npo870n9pnnn9r6n54n2040p6987p1599s2-vz_pbasvezngvba_pnapryyrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:ro326921s8s2p6409q618s0944rp90s76r13q0p5-gung_vf_abg_lbhe_fperraanzr.";a:2:{i:0;R:35354;i:1;R:35355;}s:73:"1208:986s0pq09224681o5nsqr3o1r0120rq04n8q1o69-gur_vz_nqqerff_jnf_erzbirq.";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:0rn763s39257no74s819p85r20qq08rr9q9s87ns-vaobk_sbe_1$f_-_cntr_2$q";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:7q2qr767454s00q03pp3o889p9r666nrrs85q14p-vaobk_sbe_f";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:r625q59on5q9s24099snsq927r6s6433po42q4sp-guvf_vf_lbhe_vaobk,_juvpu_yvfg";a:2:{i:0;R:35354;i:1;R:35355;}s:73:"1208:qpo3n7s106p09p7q45q5p6p5r95ssrs335ron91p-vaivgrf_unir_orra_qvfnoyrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:61orno5822n94s2708p0p99o8726n43831119on4-lbh_zhfg_or_ybttrq_va_gb_vaivg";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:q4o918ns267615n93n27r4p0o047s82o0428n367-vainyvq_rznvy_nqqerff_f.";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:nn9s6s86p4122538q512749qpn37pp1349n06n05-vaivgngvbaf_frag";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:q996r6455p940rqo191p294pq00pn3r24o39qq46-vaivgr_arj_hfref";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:s612n11ppoqr0s5sq46r7qq279105996ro23r5oo-cyheny_trggrkg_lbh_ner_nyernq";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:9527r5136o5s50n56s13o507n79r912417p9n6n7-1$f_(_2$f)";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:sono1051o7r5oos5ssr77828o9613o8q9s7p2171-cyheny_trggrkg_guvf_crefba_vf";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:3p323q5qo7oqsr6sr12op0p66on08n56on56q062-cyheny_trggrkg_vaivgngvba_fra";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:6p8492s8s330757q20rnq9073r841onrsr6snp84-lbh_jvyy_or_abgvsvrq_jura_lbhe";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:2o7o81o5o3o93r039653q6p8q40p8nor37p4q399-hfr_guvf_sbez_gb_vaivgr_lbhe_s";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:07o85250107s0909pqn0srs643ns2263ssn4o414-1$f_unf_vaivgrq_lbh_gb_wbva_g";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:r9o4r6524p5r93o70r0n4sqq6294r745504756r3-lbh_zhfg_or_ybttrq_va_gb_wbva";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:41538n7sn4548n747246s85735256q03p922sps5-1$f_wbvarq_tebhc_2$f";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:85rp36217o704s20q4p979395009sop348p79ro0-haxabja_reebe_wbvavat_tebhc.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:2ns2r7q935nonn0po4927863ss1563848q9554rs-lbh_ner_abg_n_zrzore_bs_gung_t";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:q7s8s89q1o8o704qnqsro31nqq520p47s659rs07-yvprafr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:rqnn92s06qq02p277qs03p525255so7184158749-yvprafr_sbe_guvf_fgnghfarg_fvg";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:8pr59sq92q4345r0n7r9n2os11n2so2324r28q74-vainyvq_yvprafr_fryrpgvba.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:ns4r1o687196s7osr7s44782505327p409qoq813-lbh_zhfg_fcrpvsl_gur_bjare_bs";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:730r2qp532n6988o38p013p821o5rrqn2q110np4-vainyvq_yvprafr_gvgyr._znkvzhz";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:263q0s20p2s9598n8p486720141p24753sr380s9-vainyvq_yvprafr_hey.";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:s35s96157pq8o58p538s4on9554r34o4380r7o7r-vainyvq_yvprafr_vzntr_hey.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:pn3p95126226nn95nr23ss39897o9218on38rr92-yvprafr_hey_zhfg_or_oynax_be_n";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:ns6n8n9n5oq0425q105nopqqrpq22qq972927n98-yvprafr_vzntr_zhfg_or_oynax_be";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:41rp4198r1o540s136o4rqo4o7opqo970n0o9p4o-yvprafr_fryrpgvba";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:237qsn0n21p8r17n7276ps161rrs7r0son067p47-cevingr";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:po5746or52330331844qrn750os452p0618nrpo3-nyy_evtugf_erfreirq";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:oq69n179607qs57opps919n54p841963pp55314p-perngvir_pbzzbaf";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:3qro7456519697rps4rrsp455516p969n3681onr-glcr";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:sso576r55n84rpp3sor1n3pn42q7p67sr3s5qnr9-fryrpg_n_yvprafr.";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:3p38s963r5r7opq7n0837q71o61p1q9o24on3818-yvprafr_qrgnvyf";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:89ss31225p5s042sss61r92rp8ps80r417n7140p-bjare";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:p6rp669834q6199r08sp1903o7po28s5673oq82q-anzr_bs_gur_bjare_bs_gur_fvgr'";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:s086p0q52q43p2261nn9n84p4727q40s0060r3r7-yvprafr_gvgyr";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:qnsno9pp30p5sq42s174712631rpq8sp77661s0q-gur_gvgyr_bs_gur_yvprafr.";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:050n8o1n8n6349nnp987q710942pn31214rq4373-yvprafr_hey";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:29p7rp2r683p0oo3qropr49q07762q5820o60313-hey_sbe_zber_vasbezngvba_nobhg";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:5r45s3743n25o9pqrp242s8qq3q4r9827132n686-yvprafr_vzntr_hey";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:0r02q64os723s24r515s99o0o9p62o536ns1o9q4-hey_sbe_na_vzntr_gb_qvfcynl_jv";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:075qns85o2843s0o01s33osrq9prq77opn60987o-fnir_yvprafr_frggvatf.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:s4q670o1ro75793729n8so736qrs7osq3nonrpq7-vapbeerpg_hfreanzr_be_cnffjbeq";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:r86rp2q9rprn608064ps6q1rrq194n173763n5qs-reebe_frggvat_hfre._lbh_ner_ce";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:4r5n2893oqpp7q239p1qo72r4p4ssor4orn73174-ybtva";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:2525n3471s174q99p1o87qqp8ono55q30rnpq06o-ybtva_gb_fvgr";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:4s8553693s6866o09n2q5r8rq3qs638q3552o314-hfreanzr_be_rznvy_nqqerff";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:prq7o308n348567sos21qq775rr496qq01207s24-erzrzore_zr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:os8p97r9743990n3soq075r5r2r44n7417rpp9n1-nhgbzngvpnyyl_ybtva_va_gur_shg";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:rpr2qn368s3p0r7n56538p0472r4p9940qqn4qq4-ybtva";a:2:{i:0;R:35354;i:1;R:35355;}s:73:"1208:q8o553ppoq10r58q05o67135720r374653917s00-ybfg_be_sbetbggra_cnffjbeq?";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:n82nr0982r6s95qss5no4q8nn30nqp01615516ns-sbe_frphevgl_ernfbaf,_cyrnfr_e";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:q400o7s4497r20r07p7n51771s46nop143p03qs2-ybtva_jvgu_lbhe_hfreanzr_naq_c";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:q459q9rr3222600sn1p7o4o8405256n4n4np3ppp-qba'g_unir_n_hfreanzr_lrg?_ert";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:08897snpq9r771sq9572s875oq618poqrn6q8o3p-bayl_na_nqzva_pna_znxr_nabgure";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:s50q47rnorp5966369r536ss2o38566q4r4r0rr6-1$f_vf_nyernql_na_nqzva_sbe_t";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:39489s2nr6oro08r4np6q0s0o9o1qo3rr103nos4-pna'g_trg_zrzorefuvc_erpbeq_sb";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:0p4pp6143472qo2nq392o122snson7n54so1sn22-pna'g_znxr_1$f_na_nqzva_sbe_te";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:r42405r3q47r57822500qr05nrq86673nn9p5844-ab_pheerag_fgnghf.";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:3p9n5r52344sr5q1311o3o6s36o19391ps89rnp0-arj_nccyvpngvba";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:4po77pr28o6qos007s10ss9432qor317or412r1n-lbh_zhfg_or_ybttrq_va_gb_ertvf";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:921q4p8p8235o2srs43016sss55sn11p509s2364-hfr_guvf_sbez_gb_ertvfgre_n_ar";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:41q495o3757o8popo0nr134s0oq052p14961o6p7-fbhepr_hey_vf_erdhverq.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:23r20155n128504n9004onoon2r1os9n4p6n4885-pbhyq_abg_perngr_nccyvpngvba.";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:q80r79o2q2752ssnp8r61580pss52r548p230146-vainyvq_vzntr.";a:2:{i:0;R:35354;i:1;R:35355;}s:55:"1208:s9850p0o4269no40ons44513n855r925rqr2no11-arj_tebhc";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:2q71r4o57rr060167s1rn43659021sr60349096s-lbh_ner_abg_nyybjrq_gb_perngr";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:5oss3qn2o52np18no2500rq6o79053sss954n3pp-hfr_guvf_sbez_gb_perngr_n_arj";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:1rq2r7o50sn1qoos1693q1p38nqs270p04qo10p6-arj_zrffntr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:21o60o8q21rno5s7nn72018o22r3nss09210oos3-lbh_pnaabg_fraq_n_zrffntr_gb_g";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:9os4n936qr5prs0r4592ops06qop2p16920s9701-ab_pbagrag!";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:npn110r4o7rqsr682rq7s93419o872n9177ps424-ab_erpvcvrag_fcrpvsvrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:9ps1o68p1o0rs27o7p68n192n2rn1n2pnpsq903r-zrffntr_frag";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:n3894o1256no040rq20n35rrqrrpr8829p62q5no-qverpg_zrffntr_gb_f_frag.";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:0r657r6p2p14392822nqn6r9n892so276n926307-nwnk_reebe";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:77r7n058680rrs2287n6826n395qrn4q2p413r94-arj_abgvpr";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:582n435snopr633qon5540prrn77ro5p7q9r091s-abgvpr_cbfgrq";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:1rs8101p8rss574s9059r1444s95q4s342079822-frnepu_sbe_abgvprf_ba_fvgr.anz";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:8onn0s0q8692s57sq9n38poq1oq23q7p1r61483r-grkg_frnepu";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:n24qp3s56qr91qrn3o4pq8rpp3qor904528q45o6-frnepu_erfhygf_sbe_"_1$f"_ba_2";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:osp4on49p061064s4738np837s9n9q9rqq26p4q6-or_gur_svefg_gb_cbfg_ba_guvf_g";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:4076p68s415p99o453nn90p43rro248527n16s73-jul_abg_ertvfgre_na_nppbhag_(";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:s3nq151pr1381r2noppp22p418o628po520pn441-hcqngrf_jvgu_"_f"";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:6opop6q50q68p8155p342051qn5q54r1722r3q33-hcqngrf_zngpuvat_frnepu_grez_"";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:6276ppn68485rrns8956o30633n5p9939624oo16-guvf_hfre_qbrfa'g_nyybj_ahqtrf";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:90s9rn86180qo6o965r3qpnnspno78985s90p7nn-ahqtr_frag";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:n0qq10q7p67snppon3864qr99753nq1369o5s286-ahqtr_frag!";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:n3p7q01ooos54r4op24ro598999r06235p31opsn-lbh_zhfg_or_ybttrq_va_gb_yvfg";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:44rr7q782s845nnso42p9n2n43o42s790534377o-bnhgu_nccyvpngvbaf";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:326r72n316o52pq626n5252159sosn40q2221030-nccyvpngvbaf_lbh_unir_ertvfgre";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:0420o7247so0508q8r1070n1030712n880poosrs-lbh_unir_abg_ertvfgrerq_nal_nc";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:29r111sr1635275o38q0p3s4n3pp715972q13q65-pbaarpgrq_nccyvpngvbaf";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:83qop8on5soo409n27r3pos29238sp0s78osq682-gur_sbyybjvat_pbaarpgvbaf_rkvf";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:85o17708r7378p30q2sns76q2955486573s37o98-lbh_ner_abg_n_hfre_bs_gung_ncc";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:q38rp2p49n2nn65o0p3sn0nn057671p28rq3n142-hanoyr_gb_eribxr_npprff_sbe_nc";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:nr139o2psrn62s42so2qrq858r5qr4r7988725q4-lbh_unir_fhpprffshyyl_eribxrq";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:7959q77996169q0515r408n6004p2s10oq443377-lbh_unir_abg_nhgubevmrq_nal_nc";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:sp5280p7745174r924s6o46npr5qs49n3p8979ns-ner_lbh_n_qrirybcre?_ertvfgre";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:q665s55040o4nn7598q3q2688r427618445n9r80-"_f"_abg_sbhaq.";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:ros0430240p8qp550psp569s3716314890414998-abgvpr_f_abg_sbhaq.";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:o5q7n597rq69800qnqspr0279518n5n0q9r5246p-abgvpr_unf_ab_cebsvyr.";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:7817q236r6spoq18q9q6q65qs29o4694np1n0053-1$f'f_fgnghf_ba_2$f";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:4p13pos654ro9o4n4490p118rn4p9rr3q753r35o-nggnpuzrag_f_abg_sbhaq.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:18op4nq37760o0r454o9p67s8poon9p030qsq74r-"_f"_abg_fhccbegrq_sbe_brzorq";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:937s4r8p16s5835p6n2q0500s01pp550p4299475-pbagrag_glcr_f_abg_fhccbegrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:3s5q826o2n489505s48rprsp03s120q6ss427rn8-bayl_f_heyf_bire_cynva_uggc_cy";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:418q91q41p5p659458p27n1qq28n2n3152q78117-abg_n_fhccbegrq_qngn_sbezng.";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:q78453s947q6po9q0922977pns55ro45979o0801-byq_fpubby_hv_frggvatf";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:o2r21p7os2o0p1s01s575os968246n1orq038s3q-vs_lbh_yvxr_vg_"gur_byq_jnl",";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:s133o2924r9r0rs379o1po63n7so85q3o77p6p53-frggvatf_fnirq.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:61s2po4qr3r48q3r09r8o3p2s609r4n4855p73so-bayl_fgernz_zbqr_(ab_pbairefng";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:p0r7p15oo44r682r1q6op9r7910q482796s4o530-fubj_pbairefngvba_cntr_nf_uvre";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:8n3o49778223rr0n6746257482r723p91q736q65-fubj_avpxanzrf_(abg_shyy_anzrf";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:rsp007n393s66pqo14q57q385822n3q9r36rs873-fnir";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:66nqnq465q65s3r03o61qsqr66rpr83799789o60-crbcyr_frnepu";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:93p9o4ro288s81r903997p66ro4qq61110o66353-abgvpr_frnepu";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:sooosr3331rqo0p2pr74ors6s8q5749p52p3017o-nyernql_ybttrq_va.";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:8314181539q9p4no258r8np3n55qpp9068qr683s-ab_hfre_vq_fcrpvsvrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:24r388n0op8n179988q8343qo7orpn67875n5373-ab_ybtva_gbxra_fcrpvsvrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:93o385p510o629qqp315735048snq3628q500s19-ab_ybtva_gbxra_erdhrfgrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:no567852nn840r0qr67294rr1n89r97971095oq3-vainyvq_ybtva_gbxra_fcrpvsvrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:566q188s105679r2r1s59p894rs54pq5p4s4041r-ybtva_gbxra_rkcverq.";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:4r67340op287891q2787rqq9410072o84973559r-bhgobk_sbe_1$f_-_cntr_2$q";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:n61sp130n14r1r88865s7so8p95261rr082pq07s-bhgobk_sbe_f";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:931633n2q6r54pr3rqno0993671n1rq7p03rr439-guvf_vf_lbhe_bhgobk,_juvpu_yvf";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:6qqnn02q74475436975nr791s3n0203733044131-punatr_cnffjbeq";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:q6qp9onqpp47sr11s47ononr13n0028274q0s915-punatr_lbhe_cnffjbeq.";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:po1q265n07qs179q0r372p15qs3sosrop633spo8-cnffjbeq_punatr";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:r3053sonn7622ppnr5s59565r7so553s9p2q79p8-byq_cnffjbeq";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:q850rr188p7p55o64op3624534qr5p5051n57qp6-arj_cnffjbeq";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:93497onrqrs44os19pn92pno33np244or6s9nq73-6_be_zber_punenpgref.";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:992roo33s4o2q3544n3p097p2476r2r959142qnn-pbasvez";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:r0qsp75rq73r0p4r716s94rr34p63pr5sp6464qr-fnzr_nf_cnffjbeq_nobir.";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:60q82sr2rr8p4821q39r35387p157q701r108q0n-punatr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:7r4r5372nqoo3150psn10qp5nr4n156484671136-cnffjbeq_zhfg_or_6_be_zber_pun";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:s7p3pq475924qp45r184s50qq91r9r4qn76p740o-cnffjbeqf_qb_abg_zngpu.";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:p46733o9pqp3s4np8p1n97p7n1p02s9p5s15q4sp-vapbeerpg_byq_cnffjbeq.";a:2:{i:0;R:35354;i:1;R:35355;}s:73:"1208:998n0opn4915p3prs5q480573635p0r5p1qo8r04-reebe_fnivat_hfre;_vainyvq.";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:8800o146989740on59onpq402165p369sr4r7139-pnaabg_fnir_arj_cnffjbeq.";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:o50r3758s83sn12nr8rq4o065365q12s5s3121s6-cnffjbeq_fnirq.";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:13r7r11722s7q8309p367rn7823oq6pq32011prq-cnguf";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:s65rqo458316s4184qp13s1rr31r2211qr042nqn-cngu_naq_freire_frggvatf_sbe_g";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:58p3nps77s34r50q4p57s7r2n9s5pp95o06367q0-gurzr_qverpgbel_abg_ernqnoyr_f";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:5r9rro7o6448s6880rp6rq5742rpq5rs3371s06r-ningne_qverpgbel_abg_jevgnoyr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:0os71155p90819q86sr7pn09925192p3s939o553-ybpnyrf_qverpgbel_abg_ernqnoyr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:5721o2q3n013ss598377p8s91795n53842os41nr-vainyvq_ffy_freire._gur_znkvzh";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:5o6825q3p67n35898o7o65sq986n7sr6pn47771q-fvgr";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:po0po170q106s8r8q5ns1r05ooqoq3n96n7qr197-freire";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:297356306r45p21390568p999n089qq09n1o6nso-fvgr'f_freire_ubfganzr.";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:519r39132oo98418pp0483pp446pps5s3p8qpssr-cngu";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:1366q28sqqnp4518r0r799s4q1631031o2r8r76s-fvgr_cngu.";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:0809s450qs09222466son443o717799855p14280-ybpnyr_qverpgbel";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:qr064s8o8ns29o21soqq283332q841858n084353-qverpgbel_cngu_gb_ybpnyrf.";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:s2528rpp2r89sq26p9n2non2n865qo541sq1pn88-snapl_heyf";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:82p867183582s6r7381692126so186o7p1qqs6p8-hfr_snapl_heyf_(zber_ernqnoyr";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:pn5snp1p0rp06r6soqo20733p2rq24ps5080po1r-gurzr";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:7r855424rr786701s066o27503801n0pq34n5p1r-freire_sbe_gurzrf.";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:q1n64663o34n18218roso244s7qr6rro5sn37n0p-jro_cngu_gb_gurzrf.";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:46547r5sp066254711s42r35snr0r388712p7s6o-ffy_freire";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:9609p7pq68r2279ns593q20o65r285n37q2981q7-ffy_freire_sbe_gurzrf_(qrsnhyg";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:q2505n93rsq48676orn8593ssq2o3o54p404r312-ffy_cngu";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:2o45s5536836r2qrpq3rr30o16q92p761qr0n67q-ffy_cngu_gb_gurzrf_(qrsnhyg_gu";a:2:{i:0;R:35354;i:1;R:35355;}s:55:"1208:4o892sr0p040sn8n944037q1q2817p41no7qn958-qverpgbel";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:181ns5ppoo82p95o2qs41s0spo93o47nnsn7r1s7-qverpgbel_jurer_gurzrf_ner_ybp";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:sp022roppor90s9sq2ron2s0p096575n867ps116-ningnef";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:74r44537n958qnrq872q13rqo018405oo4q7587p-ningne_freire";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:0q56n86289noq883718280qs134n6r5o2p18s650-freire_sbe_ningnef.";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:ss6oo3412qsp241655s1q580p78nn9904373q2qn-ningne_cngu";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:oo7857s051s4q7r70887p1r0n8sonsr3r5rqnq62-jro_cngu_gb_ningnef.";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:onn21r1s76oq82rr104s8166454p14o1236qq48r-ningne_qverpgbel";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:9r893o2688r3n3971069s602o9185ro86qqp266s-qverpgbel_jurer_ningnef_ner_yb";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:6771nqr6r8965n499op298107sso52r9n18qq7r3-nggnpuzragf";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:855np5899q436prp395964rq1254q2933sro5r70-freire_sbe_nggnpuzragf.";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:prp3rn1ooo978p498r1835r6o1o87q9o56n6p806-jro_cngu_gb_nggnpuzragf.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:844q55onn44orp219389830qpr4987q9s50n9249-freire_sbe_nggnpuzragf_ba_ffy";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:43q6qp30qo410s4q696n11ors0410or247368ns5-jro_cngu_gb_nggnpuzragf_ba_ffy";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:725q2o088567o5r36q1p2pq2p690822qr1sp3673-qverpgbel_jurer_nggnpuzragf_ne";a:2:{i:0;R:35354;i:1;R:35355;}s:49:"1208:240p12n793s4q87qs3q69o3p46op52r0s44oor49-ffy";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:80p3052q33ppqrr15ssnnn110p5p39072495sr63-arire";a:2:{i:0;R:35354;i:1;R:35355;}s:55:"1208:1op4q666p7o53r256ss357ppo85s9qqp9n007sp1-fbzrgvzrf";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:n91oppr893o5qr905rpoq22n99n03889pqpp2544-nyjnlf";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:ps12s10744r5rnssr587645oo29r0327o38q3493-hfr_ffy";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:qr6qnn58q5n215p77q99qo91p8o9psp13q2n41qp-jura_gb_hfr_ffy.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:41r5073q8s1r6855n2214297sno99nnn7358nr6s-freire_gb_qverpg_ffy_erdhrfgf";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:541518p9s901p0s4p4s6q7nrrn176988o8p30n15-fnir_cngu_frggvatf.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:9rr7o2sp9n65521p625660srrp982o7622qrrsro-frnepu_sbe_crbcyr_ba_fvgr.anzr";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:4128o6r1qrr10sos8n2028q4oqnrr84619rr31p5-crbcyr_frnepu";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:4nr56o7p265474293po1n967rro97ps25sn28p85-choyvp_yvfg_f";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:8snqr6nnn65rspppp3n96q8r3q8r20q50po4p657-choyvp_yvfg_1$f,_cntr_2$q";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:p5259rno4575soo71p51543sp1p62n609s859qo7-yvfgf_ner_ubj_lbh_fbeg_fvzvyne";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:5q6o95161p021849sp818q66sr4r60nq1rq2q966-ab_gnttre.";a:2:{i:0;R:35354;i:1;R:35355;}s:73:"1208:94255o2nnnr3so7s870prsr5op6n2s69995qprrn-crbcyr_yvfgrq_va_1$f_ol_2$f";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:pqq0n3479o7r9n95sonn9n85852091n6r8636n0r-crbcyr_yvfgrq_va_1$f_ol_2$f,_c";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:817o79o0ns2qo11qn9523oq5738397ros823132o-perngbe";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:5016052p77rq609n6nnq42847568ss7846p67729-cevingr_yvfgf_ol_lbh";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:5rrqqp80oq983p657964q83p4rqs789q86131p7n-choyvp_yvfgf_ol_lbh";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:5s6n2q04355q2p9r3pn11364304754ppsn4ssr77-yvfgf_ol_lbh";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:078n3p6ps34p4r1054078n6n8s7q706ss6o2n7q7-yvfgf_ol_f";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:4r616o0n37r5pn26n23n38rr5oqs6s939n9o3q65-yvfgf_ol_1$f,_cntr_2$q";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:61qqs527sqspn517o201o364sp5nss005pr3p857-lbh_pnaabg_ivrj_bguref'_ceving";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:n7o93q2128r820s861sp8qsppq9s5521r89nq21s-zbqr";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:052p240o37nsqq2pp878ssn2prq80092q910no4q-yvfgf_sbe_f";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:625ons316oq0p35q111496317qsro4qr8546s152-fryrpg_gnt_gb_svygre";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:32o75nqp6r2073n7orq019q24p11n872p92spo4n-fubj_cevingr_gntf.";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:5896r2o7rsr5589n3r2n0p5p3oq90o471n7r2o68-choyvp";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:r6s8snnn54pr63no2o57no64876605o6r26124n1-fubj_choyvp_gntf.";a:2:{i:0;R:35354;i:1;R:35355;}s:48:"1208:196pp191s3p30oo1pnn5137q7246sr39442os125-tb";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:q70475op9p4q83s43rro18o1n76955psr540r469-gurfr_ner_yvfgf_perngrq_ol_**";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:ros7oq6qs3820s26o58460795o8qs1nrs86n0q26-f_unf_abg_perngrq_nal_yvfgf_(";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:070467q662492qs65qn9n7o7r7r29o22860npo7o-yvfgf_jvgu_f_va_gurz";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:024qso32935nqrrp547q312nqn0pr02son80s50o-yvfgf_jvgu_1$f,_cntr_2$q";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:964o997104r6479793s25n28rr24onssp3q918q9-gurfr_ner_yvfgf_sbe_**_f**._yv";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:0262988q7r88q486qo3207s53499s31531r75ss7-f_unf_abg_orra_yvfgrq_(_qbp.y";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:p1n203o7068r613823q7o94o8pr7s4rs3186894p-fhofpevoref_gb_yvfg_1$f_ol_2$f";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:s7440591s14o083o1p6362n7967s8r7707rps6on-fhofpevoref_gb_yvfg_1$f_ol_2$f";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:p3nqn585r47rqro5oors097ps9r47o5ps741o5s1-yvfgf_fhofpevorq_gb_ol_f";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:0nr95s852p8s1r85595pp9rrsno074rq957s114q-yvfgf_fhofpevorq_gb_ol_1$f,_cn";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:ns88p050pn422745n57r14oq2oooopn665s4r6q6-gurfr_ner_yvfgf_fhofpevorq_gb";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:q6no8174r776qqq4q44903s29423nr4258qo59n3-qvfnoyrq";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:n5s41936r2o5289nqr24514732713pq67pp47335-guvf_npgvba_bayl_npprcgf_cbfg";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:166q6321p4r6no2734no9o6r923p8q9009s76955-lbh_pnaabg_nqzvavfgre_cyhtvaf.";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:60776996popqr250r4sq8178r1or620613qp462p-ab_fhpu_cyhtva.";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:sqr88r6qq4rorro10rp6r20s283876140o8r1358-ranoyrq";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:r9o6q4sns3qn7326np5sn1587oor9pr6q3r7p160-cyhtvaf";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:868o0p82rnp6qp388q59o9pr3s3r56420o3s5q0n-nqqvgvbany_cyhtvaf_pna_or_rano";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:pss1o622opn7s6351q6q6q16p300692074808422-qrsnhyg_cyhtvaf";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:s2s7n3752n12q1nn37o28288q82n56psqs33s943-nyy_qrsnhyg_cyhtvaf_unir_orra";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:sq9q93oq45077s3o930789p6q50388008n24465o-havqragvsvrq_svryq_f.";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:0s82sr37359q6ppr80s80p200q6s351q674p5n07-frnepu_erfhygf";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:61q8soq1qq4n2rrpo576np521p1p32o13ns8n307-gur_frnepu_fgevat_zhfg_or_ng_y";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:o1072rq658n8536o02q5sqs75337q5q06s90s7r3-cebsvyr_frggvatf";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:6rs400o126so8q1s973n725np0701313p77p0pp7-lbh_pna_hcqngr_lbhe_crefbany_c";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:16179702052s50153ossop7q1prq9111q4qr5479-cebsvyr_vasbezngvba";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:2q5ns6n79p80o154ors7q5ss52q6qo27755r287s-1-64_ybjrepnfr_yrggref_be_ahzo";a:2:{i:0;R:35354;i:1;R:35355;}s:55:"1208:rro692087q629o32s2s1820369q9756q60p5pon8-shyy_anzr";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:np066591rqo7q47406r88rrq7on536040n82qns4-ubzrcntr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:239qr07p3qs533r039o3833s0spnqr0o52487s94-hey_bs_lbhe_ubzrcntr,_oybt,_be";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:50s5n3qspo24rq3351437o8po5r68q7n14p0r644-cyheny_trggrkg_qrfpevor_lbhef";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:r58310p127o9sr3sprr7904rop487s86269709sr-qrfpevor_lbhefrys_naq_lbhe_vag";a:2:{i:0;R:35354;i:1;R:35355;}s:49:"1208:o31sp969o4889so445sn3r7q99o845nn2s0q3497-ovb";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:q219p68101s532qr10nqq2ps42so9qorpn73q3or-ybpngvba";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:6n5rr4pq2q9rpp946qqp9524q1or0r01r1095255-jurer_lbh_ner,_yvxr_"pvgl,_fgn";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:872r49or4s485pn94rq65rnsooqsq554o7q5nrop-funer_zl_pheerag_ybpngvba_jura";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:848rrq0soq5429s556o2982qrp3rn87136r33r44-gntf";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:652240279o60spo8pp668o46o70pssr09435193n-gntf_sbe_lbhefrys_(yrggref,_ah";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:89o86no0r66s527166q98qs92qqops5416rq58s6-ynathntr";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:n757n009706914o2412694p940q9983873626s04-cersreerq_ynathntr.";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:q1s7qp891o5r5q1797163o556r805123p9369r4s-gvzrmbar";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:86n15ropr05o4qo7r2po4sn9o0436rn20r5393p9-jung_gvzrmbar_ner_lbh_abeznyyl";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:p589119oo1343r7nsp7688r279p248727rnrq669-nhgbzngvpnyyl_fhofpevor_gb_jub";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:5516rn6qp1ossq82rs69q9r288s1os654726p555-fhofpevcgvba_cbyvpl";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:p0950070q9229218o4936q3o4665n3p50qs6n635-yrg_nalbar_sbyybj_zr";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:518n3257sn7rn06osq0s0nq354qsos4qn562n2o0-nfx_zr_svefg";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:nos4q6593r9ppo644rq03p9p616360sop0p19np9-jurgure_bgure_hfref_arrq_lbhe";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:10op92qs06r40919oopn06q1521s7oqqq64r6830-znxr_hcqngrf_ivfvoyr_bayl_gb_z";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:8q33943407q4so3251374qo4o45026srn8945n2o-cyheny_trggrkg_ovb_vf_gbb_yba";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:5q5qr7173p9s10q5554nq7n7srn5206o561p6nr3-gvzrmbar_abg_fryrpgrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:rp42330p33125q42o06207n219pr0o834rs83940-ynathntr_vf_gbb_ybat_(znkvzhz";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:70n039130ns0285ro4n810rqrqo2715o88r54983-vainyvq_gnt_"_f".";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:rp8q8nr68s6q842837q637q15n7q369r062r7p5p-pbhyq_abg_hcqngr_hfre_sbe_nhgb";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:64574rqn7ns1o096ornn290778q2q68po5418965-pbhyq_abg_fnir_ybpngvba_cersf.";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:s4s7399qo2nq6s3nr39n177944761440r6q7828p-pbhyq_abg_fnir_gntf.";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:196o4or7o9sq793rs94955984r84r04n7ppp924n-erfgber_nppbhag";a:2:{i:0;R:35354;i:1;R:35355;}s:73:"1208:0nppo5o010qq20n6opp75o45622q84675009r115-orlbaq_gur_cntr_yvzvg_(_f).";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:1s738qn92qp24p1482p4srnr372pr0r99224qnpn-pbhyq_abg_ergevrir_choyvp_gvzr";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:51rs4r7375rq07501s85773r7p7s8217onqn57q0-choyvp_gvzryvar,_cntr_q";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:629srsqno5r25642161pqq570934q7sr07o7s860-choyvp_gvzryvar";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:93n787qo9p37q9167qr3807289s99qs36447q177-choyvp_gvzryvar_srrq_(npgvivgl";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:s67qr66oq3s504607p8654npp99o4q1n346sp2n4-choyvp_gvzryvar_srrq_(eff_1.0)";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:2ps5213s04r1q9qrs7461s063s3019r95sprq21o-choyvp_gvzryvar_srrq_(eff_2.0)";a:2:{i:0;R:35354;i:1;R:35355;}s:73:"1208:r671nn846n8n38qs8p99po483pq7897079posn86-choyvp_gvzryvar_srrq_(ngbz)";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:7079r60446r41p809s9sr54qp0r758n56q45r5rp-guvf_vf_gur_choyvp_gvzryvar_sb";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:o1ppn6q9qrq297rs96136264po8qs3nn45r77958-or_gur_svefg_gb_cbfg!";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:1n2pror5pr2r3sn0r9nsq00p6142qr76011p1252-jul_abg_ertvfgre_na_nppbhag_(";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:55p1197515n6s3429290131043o4098r115051rr-guvf_vf_fvgr.anzr_,_n_zvpeb-oy";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:r2n5040qn3o473053os0336590530qpq5o4q47q8-guvf_vf_fvgr.anzr_,_n_zvpeb-oy";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:1oos86npr5840q33981nrrqq7479q1n85q90p98s-f_hcqngrf_sebz_rirelbar.";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:21os5p6s4865pr39n9p90s259738009o6o5ro4qn-choyvp_gnt_pybhq";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:8531o6p8o83ponp63040r92qr49067p79r270sn2-gurfr_ner_zbfg_cbchyne_erprag";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:959pq079o11nsn80sqq817nr70rsq659o09rr96p-ab_bar_unf_cbfgrq_n_abgvpr_jvg";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:30sq3pon15p61q020oo691843prrprq218r1npo6-or_gur_svefg_gb_cbfg_bar!";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:5p6q06p678099r59qqr020654p336p044q5144o8-jul_abg_ertvfgre_na_nppbhag_(";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:p2q50p4q314o04r0q29452r0o57937q1o733npso-lbh_ner_nyernql_ybttrq_va!";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:3s156n634o1qn20p2nn4s5826p4867nn9r53sps4-ab_fhpu_erpbirel_pbqr.";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:s89n2463n7rr399o434q4s1o5q3so9q72s0n9r63-abg_n_erpbirel_pbqr.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:r75qr02p25qp59p9r2n332p6p4n1sr4s88091qr8-erpbirel_pbqr_sbe_haxabja_hfre";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:042q435r7o75qrr79n33s1s9rp1o08pn7np9p79p-reebe_jvgu_pbasvezngvba_pbqr.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:onoqop0166q39989835s8qr38018po288qn24843-guvf_pbasvezngvba_pbqr_vf_gbb";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:sr487485704srp17299nq61q2os78r9253rn9s2q-pbhyq_abg_hcqngr_hfre_jvgu_pba";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:138n379rn1818q64p6n54rqsp5741n11q73r6q30-vs_lbh_unir_sbetbggra_be_ybfg";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:p4r884np096q19084q64212ss20osqqo562rn582-lbh_unir_orra_vqragvsvrq._ragr";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:9o87234r60o143n2174q2n0nos79n2rrorpr3s36-cnffjbeq_erpbirel";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:427qr3725pq828r2sq83638o88954323p56oq661-avpxanzr_be_rznvy_nqqerff";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:qo773n9r87771qs518n670o06nq4n9p2n6s26n7q-lbhe_avpxanzr_ba_guvf_freire,";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:4nqqos16731014npqs0q8n16840no8n8no4rn995-erpbire";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:9r097o03r55q7n4s8627nr8n06p9o186o6on6p27-erpbire";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:5p4op97rr5q0np344829qoprs02q7302sro098n8-erfrg_cnffjbeq";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:1ns32qnq545s4r807437rn22or330o747r75prr9-erpbire_cnffjbeq";a:2:{i:0;R:35354;i:1;R:35355;}s:73:"1208:14p0253n14n935r20s53453n1110p8840n1025qq-cnffjbeq_erpbirel_erdhrfgrq";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:s6sno237qo3r182rsssn6n72orr004269956so76-cnffjbeq_fnirq";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:q4o18p7qq559s0300836704p919s78952r2714op-6_be_zber_punenpgref,_naq_qb_a";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:05370455s8p18277rnq45o46p713qn3r10qq4200-erfrg";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:p42rq2753s138r913768n0oq32q93nn9137no50n-ragre_n_avpxanzr_be_rznvy_nqqe";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:qq43n02r412823669r37r973o70r7p20n3n59040-vafgehpgvbaf_sbe_erpbirevat_lb";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:2q166s82898roq5s7n09q77q4676q969282p7p40-harkcrpgrq_cnffjbeq_erfrg.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:661p7n7q15q23sq562144p2s1qp8923979n1723r-cnffjbeq_zhfg_or_6_punenpgref";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:26s6nn827p383p470997rno857q8pq4o7n845273-cnffjbeq_naq_pbasvezngvba_qb_a";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:o6s5p7n2s37q6ooon75p762175q4440n9515n51r-reebe_frggvat_hfre.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:9n435o93noq7213os57osnpr384pr313s9435374-arj_cnffjbeq_fhpprffshyyl_fnir";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:r0453816r6srqo9699no2p92n9469p8q280r12ss-ab_vq_cnenzrgre.";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:r5q56662op126898147596oqp9p8s8rn260o3n83-ab_fhpu_svyr_"_q".";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:5o6r9r101113r18542153629pn75r80309s415rq-fbeel,_bayl_vaivgrq_crbcyr_pna";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:1o9r0768s232ro3r5r38rp32p256o84r526019o4-fbeel,_vainyvq_vaivgngvba_pbqr";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:qrr760q19o446s58q6q263469r2948nq3qr7o7o9-ertvfgengvba_fhpprffshy";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:5211488s154o45qp9ppqo2n735s7o52p1n58p1pq-ertvfgre";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:38pop2o2241ss6r84oq71264noq0o941448r5s11-ertvfgengvba_abg_nyybjrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:01r682rs71prqoq33o744626rp870qq46s6n2210-lbh_pnaabg_ertvfgre_vs_lbh_qb";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:6s720r57394r2393p2475sq1s345r2750777q59n-rznvy_nqqerff_nyernql_rkvfgf.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:0pp909or0s2qn4on1n41oo22noq333rr5q822722-vainyvq_hfreanzr_be_cnffjbeq.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:3rp023o9n4p1qr820391s607n4n98r36668s3726-jvgu_guvf_sbez_lbh_pna_perngr";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:r0p6r84ps6036997oq6925o17o04n22924n4op03-pbasvez";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:54213nqs04451s300sr4p09s545o5s52n862p185-rznvy";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:8o8s6qo0r466os3os17q8370672093s3spr41126-hfrq_bayl_sbe_hcqngrf,_naabhap";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:psrq6429ro133q546n940324s7s992163p8qn9r4-ybatre_anzr,_cersrenoyl_lbhe_"";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:93o77n7o03293008502q7n8pqs144655q8qron7p-ertvfgre";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:3o68202010p84s062p880473q334r651o2749r4o-v_haqrefgnaq_gung_pbagrag_naq";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:52s37r8or6o1p7p614s9n392418s688281o1p7o0-zl_grkg_naq_svyrf_ner_pbclevtu";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:q01886nsrqn4044o5q3sp689615s4p0r76ro2pp8-zl_grkg_naq_svyrf_erznva_haqre";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:3639rp0s50o0s9n9n60809qp558n8o5q72srs67o-nyy_evtugf_erfreirq.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:1p2574o14145598p6sn33pp45425952463977prp-zl_grkg_naq_svyrf_ner_ninvynoy";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:r6r942sr260qoqp6276p2p1q7r27q64rqo4prrr7-pbatenghyngvbaf,_1$f!_naq_jryp";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:5r80150n3724573r8p1p326600ss27os03p646rp-(lbh_fubhyq_erprvir_n_zrffntr";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:0n7767rpn594761q415352pnqqrns89469ps0pn1-gurer_jnf_na_harkcrpgrq_reebe";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:9608qnq98o7pqr3936qs70568128n8r40qqq4084-gurer_jnf_n_ceboyrz_yvfgvat_f.";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:8q92p584s2q32or1300rq0r53o1n33o92s0n62n0-hayvfgrq";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:3por18402s8n33qr2q5ssq4rq9os0n8928r832ss-bayl_ybttrq-va_hfref_pna_ercrn";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:1n945spn46r46560415rn91n2o014qsq566n4o92-ab_abgvpr_fcrpvsvrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:sr67p2o99n562p350645pq7080nop2r1rq37r534-ercrngrq";a:2:{i:0;R:35354;i:1;R:35355;}s:55:"1208:3qr268s8p13697888n7016proq067q576oo94n33-ercrngrq!";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:5q22r9nqq1q99n05nrq26o8156p53sq3347p1s12-ercyvrf_gb_f";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:31045oq1n0ss0747qp87q3o1s516o9155ro377sq-ercyvrf_gb_1$f,_cntr_2$q";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:3121q321728nqqn4r9185516738r7146p5668666-ercyvrf_srrq_sbe_f_(npgvivgl_f";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:s3po00o577o9r410689p25p245r1rrn300p428s7-ercyvrf_srrq_sbe_f_(eff_1.0)";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:058o7nqr15328sno4s94010q9s33p39536p4oqn0-ercyvrf_srrq_sbe_f_(eff_2.0)";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:p89ps44qs53q4n13857p6pq379p0o0on67q33p49-ercyvrf_srrq_sbe_f_(ngbz)";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:312309psr9875o2p0046s670700on164494r80q4-guvf_vf_gur_gvzryvar_fubjvat_e";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:r459q36p70r4s0853s35rqon5s4p97n5noqn648n-lbh_pna_ratntr_bgure_hfref_va";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:09qq5n60o4qn2onppq16r50p66r8o526n3981r0r-lbh_pna_gel_gb_ahqtr_1$f_(.._2";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:2126pqp57o317o9669806782rr812n221ssr54ro-ercyvrf_gb_1$f_ba_2$f.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:556109q95s29859n2p1p1s92266142qp38nn74p2-bayl_ybttrq-va_hfref_pna_erfgb";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:62477q126811n70q1p05pp84n1n81100o1633581-lbh_znl_abg_erfgber_lbhe_nppbh";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:0qnoqn1np88249080488o65non44152o1p6qr0ss-ab_hcybnqrq_svyr.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:qo34751r9119087q17r8585p91n758pn65p615sp-gur_hcybnqrq_svyr_rkprrqf_gur";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:1qr0n02877n32903017nq0nr5257o40o4r23n7nr-gur_hcybnqrq_svyr_rkprrqf_gur";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:1598621np42463r9q5qnp7r65899003oqq2s61qr-gur_hcybnqrq_svyr_jnf_bayl_cne";a:2:{i:0;R:35354;i:1;R:35355;}s:73:"1208:1559oo04o98428pn773p336q601276r9q4rpr2p9-zvffvat_n_grzcbenel_sbyqre.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:38s7065s2s3oq7pn5osq7n4n33971s8o3o114543-snvyrq_gb_jevgr_svyr_gb_qvfx.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:25pns85nrrq8qp17q9201362rp9pss79595446r9-svyr_hcybnq_fgbccrq_ol_rkgrafv";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:1p976ps1r9636r313qp4045q67p4n58s5558so0o-flfgrz_reebe_hcybnqvat_svyr.";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:q1631051s0o0s6rq5r3p93o0r75r546q1335165s-abg_na_ngbz_srrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:n11901957sq3084o97r45srp2s27on3qqs27r047-srrq_unf_orra_erfgberq._lbhe_b";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:po958q2os0q094ps59p829491q25r805rpo7s9q4-srrq_jvyy_or_erfgberq._cyrnfr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:13676ps5o06632133r7q04n5o872s88n46326224-lbh_pna_hcybnq_n_onpxrq-hc_gvz";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:810pr662o16oqo5689s42spq69013pro0n53rq4q-hcybnq_gur_svyr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:1n19on91385qrq8261rqqrrrrpq3532454qo2pr4-lbh_pnaabg_eribxr_hfre_ebyrf_b";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:8s2317o0rrop286qo4ssr501oo0312225rr6q7p5-hfre_qbrf_abg_unir_guvf_ebyr.";a:2:{i:0;R:35354;i:1;R:35355;}s:55:"1208:39444564986s7r740r938r747nop32029541551p-fgnghfarg";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:5po5pr954rprp8q6pq62n6nqo745s57748s9q45n-lbh_pnaabg_fnaqobk_hfref_ba_gu";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:orq428o1053n7nq8rrq47p5r2s26s7o5s68o0o7q-hfre_vf_nyernql_fnaqobkrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:3683o2239q0544q219roon617o18np6o3nsn5o33-abg_n_inyvq_yvfg_f.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:4nq48so9q0ns4q80398nsso36135no2pn799q015-hfref_frys-gnttrq_jvgu_1$f,_cn";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:n56826s4oqnpronq15nor64os8s41r436o692126-frffvbaf";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:0696o5rp7pns4r707nr3r218n01r97s980on61s9-frffvba_frggvatf_sbe_guvf_fgng";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:2prrr78r3n4161n39os9o8p456qpr65r04r35qrp-frffvbaf";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:o12q376p1n1n05so638qo1sssqn03s1949861872-unaqyr_frffvbaf";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:p619nss0s719327nor1203rq1877orqp47qr5664-unaqyr_frffvbaf_bhefryirf.";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:qpo4q1oo51p7oonppr8981s0211po8q8prn639nr-frffvba_qrohttvat";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:84842r8r423prsppq3q9s7op644or374o86595r5-ranoyr_qrohttvat_bhgchg_sbe_fr";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:12q3s4261689755ops073nq014roqr120p995r0s-fnir_frffvba_frggvatf";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:o0748120nqs92r828os5qo85861rq8p64q6751r6-lbh_zhfg_or_ybttrq_va_gb_ivrj";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:p3sp31933861snon0s80n303s64sr6291q246sr3-nccyvpngvba_cebsvyr";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:n50nnrr5738osso95n969376p0ns92n2922p7520-cyheny_trggrkg_perngrq_ol_1$f";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:2523qopr8qrr56q929n73173849q3q897067464s-nccyvpngvba_npgvbaf";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:5o4o8531q7q5oqo41oos0484555rqp62868rs8o8-rqvg";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:46n1n1o5969370ooo946o1sr87552o2q2or96984-erfrg_xrl_frperg";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:77po99856s6o6716r6np314641n8s34r85p7qn04-nccyvpngvba_vasb";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:1q8242026o516o87520qso3p6612np416s79qrns-pbafhzre_xrl";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:n76s1q0q217q57n1n44q4849pppoo0102rq2s0sq-pbafhzre_frperg";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:85r2o9q804967o19p65ns2qss7926167onp20q43-erdhrfg_gbxra_hey";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:0ss273no152po0o28r27p2p3sq40ro00230s6n14-npprff_gbxra_hey";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:q62p81orprq099459np93734776s6n7s79p53pq0-nhgubevmr_hey";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:o26719q58068pn9s0n8ornrsnp7448r2198n8o1o-abgr_uznp-fun1_fvtangherf_ner";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:8rn589s6r940365p087932n583s8312qo80rn4n7-ner_lbh_fher_lbh_jnag_gb_erfrg";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:2904ssrnn2p164023q756pq78125r6o458848487-1$f'f_snibevgr_abgvprf,_cntr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:44nnr9351r836s5r0r9rr12099418r4oq04rn79o-pbhyq_abg_ergevrir_snibevgr_ab";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:72r344n2pq4350s4r67or137q86700nn881q8r64-srrq_sbe_snibevgrf_bs_f_(npgvi";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:0189330sn93159rpqq66oporo0pspn415rs94p18-srrq_sbe_snibevgrf_bs_f_(eff_1";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:8453s4sp86n98q2746n53119013r0214so86628q-srrq_sbe_snibevgrf_bs_f_(eff_2";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:4oos1620ro8p7on152os090300o3695756n39126-srrq_sbe_snibevgrf_bs_f_(ngbz)";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:o0p82505r48s7onpop0sr3532rn4orsrpqr7rpn8-lbh_unira'g_pubfra_nal_snibevg";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:n7664s70p93qs3n237769s202o1p3967ro691120-f_unfa'g_nqqrq_nal_snibevgr_a";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:pp6nr3721o83q3r77890p2s8ssn22q01540554q0-f_unfa'g_nqqrq_nal_snibevgr_a";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:8n06npr632sq41nr70q8prnn1popqnsr975q972p-guvf_vf_n_jnl_gb_funer_jung_lb";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:s4n8967p3p7r339n8765op97p552qo09rn8188r9-f_tebhc";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:190npn44957o1n7nqs2q4nqs03s877qp802opo34-1$f_tebhc,_cntr_2$q";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:52416424o88rros48so23n3pnrs3q166q5qo5q35-abgvpr_srrq_sbe_f_tebhc_(npgvi";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:qs6pr76qr5n760031023p004qrn1634n70poqs67-abgvpr_srrq_sbe_f_tebhc_(eff_1";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:9n0ns77rq8qno040p2p1581760o6528nqs776np4-abgvpr_srrq_sbe_f_tebhc_(eff_2";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:qpqo643022572482p65n71n2orq0sn1142s40q1p-abgvpr_srrq_sbe_f_tebhc_(ngbz)";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:4q0r9o1o3108p09os5osn6p192ss539p8nnp4p6o-sbns_sbe_f_tebhc";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:4489q44r98q2847q2qn5qrrn593s8rps6475s2on-**_f**_vf_n_hfre_tebhc_ba_fvgr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:s277qos6o8p89sn6403643n84o6qs69538po5n3q-**_f**_vf_n_hfre_tebhc_ba_fvgr";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:4ns59009qr4p05p5oo746859511n14413515onq7-ab_fhpu_zrffntr.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:6651817o91592o64r12n27o044pnr016127409s0-bayl_gur_fraqre_naq_erpvcvrag";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:s0o1n61qnn4849qqn3119o328s9076o2qr0p97r8-zrffntr_gb_1$f_ba_2$f";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:qs182o8pq24r3q6pqrrqn45s7q56p22rs4n90po5-zrffntr_sebz_1$f_ba_2$f";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:8630555o78sn47n1207o095508o30p93n94s5p55-abg_ninvynoyr.";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:51qqo3oss79oqoqn9qp4p990o37691nn02q292o9-abgvpr_qryrgrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:npn926s2116ro00oq2n51q35ss8ro143oo862s5q-cevingr_gvzryvar_sbe_1$f_yvfg";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:77790830or1q7rs988q4613p90qn7q487959pq9s-gvzryvar_sbe_1$f_yvfg_ol_lbh,";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:562093nq4q6n09qp9o080rnoon21s3p9080sq3p3-gvzryvar_sbe_1$f_yvfg_ol_2$f,";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:sp20o9n11r3p0444r4s367ro2poo4188878r4rno-cevingr_gvzryvar_bs_f_yvfg_ol";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:sr82262097q008792ps575q5288919oro15qop81-gvzryvar_sbe_f_yvfg_ol_lbh";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:orn2p7p2p5n24n86737p7o62oq9p556r8opn1158-gvzryvar_sbe_1$f_yvfg_ol_2$f";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:045q285q419spono2rnn379q2q7r65rq79238432-srrq_sbe_1$f_yvfg_ol_2$f_(ngbz";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:n24r009851284o4p59q4s8r2366r879oooq0o68n-guvf_vf_gur_gvzryvar_sbe_1$f_y";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:7ppr57s608s289q4s84q7ornqq932025153165p6-gel_gnttvat_zber_crbcyr.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:9q984o61sr691sn61972412srp0324p24o7qo132-jul_abg_ertvfgre_na_nppbhag_(";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:opor3886o5p26oq97ors30q4801o3r4qo9oq0130-yvfgrq";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:9s3o78224q494123o16p8o0885n4693389on9n1r-(abar)";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:50n279qr829s2qp398np2np7p9367508rn4o5qs5-fubj_nyy";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:6s13qs39n03s7577sq7qss463r4p31o98p1s1sr2-fhofpevoref";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:34o9s2o65nq7p3p1p2977s586p81ns432q2nsqp0-abgvprf_ol_1$f_gnttrq_2$f";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:0qr5o5933222r324424r6s0pn9qrrq10o1o9opqn-abgvprf_ol_1$f_gnttrq_2$f,_cnt";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:nn186pqs0399800n212poon861pq2q5pp0s28p85-abgvprf_ol_1$f,_cntr_2$q";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:70npq46o5763sq79432p6r5pp86oo62sn71no8s3-abgvpr_srrq_sbe_1$f_gnttrq_2$f";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:5sn6sp4405nn8q2rp186078s1npp289on9qn6054-abgvpr_srrq_sbe_f_(npgvivgl_fg";a:2:{i:0;R:35354;i:1;R:35355;}s:73:"1208:516s4q80p067p9s760563403s43p9s42864p69nq-abgvpr_srrq_sbe_f_(eff_1.0)";a:2:{i:0;R:35354;i:1;R:35355;}s:73:"1208:qn045sqs1n4828s185s0449oq8r13115sso3r537-abgvpr_srrq_sbe_f_(eff_2.0)";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:5971q45p4osns5800q7o5ron58208r32rr9r6no8-abgvpr_srrq_sbe_f_(ngbz)";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:s82nr71rn3r98qs87oqo08s464423ppsoq7170qo-sbns_sbe_f";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:7pn1886s1704p27rp09p6n4p4op06so592q45151-guvf_vf_gur_gvzryvar_sbe_1$f,";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:sosq7oo698r39p2s33133q71rqr5q5os0pn80n95-frra_nalguvat_vagrerfgvat_erpr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:q61p245249867q5o2o90880o970930rr1pn39375-lbh_pna_gel_gb_ahqtr_1$f_be_cb";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:97591810134sn26p14qpr454nss13nso84q84s8n-**_f**_unf_na_nppbhag_ba_fvgr.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:11p3q8200329p47q1q65q9003337oo3ro64ss984-**_f**_unf_na_nppbhag_ba_fvgr.";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:615q9922r9qs2pq05n7rs75n8r5727273opn3770-ercrng_bs_f";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:6s99qqr6q3660p1o01p04ro16qn9q50232o28q22-lbh_pnaabg_fvyrapr_hfref_ba_gu";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:s82232q34s3966928p11893qpr6200s4407r3297-hfre_vf_nyernql_fvyraprq.";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:7qn403753p97n9p8q41n6n9srr4n54os26o9q6nn-fvgr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:461o84927r52701012n191s4opq031q2qso97919-onfvp_frggvatf_sbe_guvf_fgnghf";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:434307s7p9rr4o66ssnr340494q9177pqr6025pr-fvgr_anzr_zhfg_unir_aba-mreb_y";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:57nq7063391p55804nrp94qo1n4ps4061so8rno2-lbh_zhfg_unir_n_inyvq_pbagnpg";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:04sqq919820519571050npr26o30113153q3o863-vainyvq_ybtb_hey.";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:s9q83n67ppq2o702s8r9oo59rp2n83pp38637sr5-vainyvq_ffy_ybtb_hey.";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:1r7r4q0r2r2185q196qs893sssqosqo3887772r1-haxabja_ynathntr_"_f".";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:0q25q33onr8n39q8q228s5nqo9n7rp18453q8o36-zvavzhz_grkg_yvzvg_vf_0_(hayvz";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:n4n1q0rrons7n9q62onr889ns9np6p06rpq1s8n3-qhcr_yvzvg_zhfg_or_bar_be_zber";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:r9q09r2npo31r464r812r020o0q4ro27ss600254-trareny";a:2:{i:0;R:35354;i:1;R:35355;}s:55:"1208:q1r1nro545opp50qn76q692sq6598rn3p3q6n32o-fvgr_anzr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:1852n8sn856n05r623805957q07o9ppo9153o8q3-gur_anzr_bs_lbhe_fvgr,_yvxr_"l";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:9393s9rn81oo4o106s0712930s028n65p58s4oq1-oebhtug_ol";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:14453pn5961453np5p9099510pnq7345163717r6-grkg_hfrq_sbe_perqvgf_yvax_va";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:6304195r84sp43rno85so257n8q511369sr0s949-oebhtug_ol_hey";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:n8nrs6sr96r1pq0q17062o162q10o2r71q95025o-hey_hfrq_sbe_perqvgf_yvax_va_s";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:84nqq5o2952787581po9n8851rrs63q1rp75q22o-rznvy";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:52qs0qo68385s2s4rrpr53854so560s6715r92nn-pbagnpg_rznvy_nqqerff_sbe_lbhe";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:8o9288759r2n035099qo40s92pn2n395n3667r45-ybpny";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:9q0n8r82qs83oo677s7710113o5qq84q9r5s6n41-qrsnhyg_gvzrmbar";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:o4o7ro7643r7n3n080oqs281qq1625qns3rq0s1n-qrsnhyg_gvzrmbar_sbe_gur_fvgr;";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:852814s288pp2951733962464n5np17702s46s35-qrsnhyg_ynathntr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:0p5rr3o642s9qo3s8596448q84qp9612o7rrnrq1-gur_fvgr_ynathntr_jura_nhgbqrg";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:464588s4pqpn01q760123qp278ososoo8q5oq750-yvzvgf";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:n2qq239n2o9211364p22031164583397qss063n4-grkg_yvzvg";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:1r1s517213676s39r33799876o60rp4007028q0n-znkvzhz_ahzore_bs_punenpgref_s";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:414rrq68256o6rrq190q7p2290r3762885onp151-qhcr_yvzvg";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:7794315629p904psqssr2o53r3r64064209p6op5-ubj_ybat_hfref_zhfg_jnvg_(va_f";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:83spr8327410848p9ro609npo21732p7p0srp96n-ybtb";a:2:{i:0;R:35354;i:1;R:35355;}s:55:"1208:1s34o863on69q7273o0on5r58o3s6575432n5oq8-fvgr_ybtb";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:nso62p6q3o4o0r6o461791p3r410241o4705pnso-ffy_ybtb";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:r33oqso3s5666po2q893q47r17n451798o0969po-fnir_gur_fvgr_frggvatf.";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:1p904s9o439r0p8701p1p83s61psprp3ro7oq436-fvgr_abgvpr";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:3p621so19869s79611255o7q3351411qqn0139n4-rqvg_fvgr-jvqr_zrffntr";a:2:{i:0;R:35354;i:1;R:35355;}s:73:"1208:0rs3o3543934sqsn65pon029o64264713sqnrq08-hanoyr_gb_fnir_fvgr_abgvpr.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:97oq49p5s4n941n703r61r24n6052816q0npp950-znkvzhz_yratgu_sbe_gur_fvgr-jv";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:2noq5qs90931741o928oo1n6r128997s341oqss6-fvgr_abgvpr_grkg";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:8p6o8n0qrp8n3ns927o67prqs7r5357041snn6p6-fvgr-jvqr_abgvpr_grkg_(255_pun";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:3r2513067228r38qp72756o4p3sn8s14n1678o87-fnir_fvgr_abgvpr.";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:q3ss87771n2r8os68357570529p832446oqo8n76-fzf_frggvatf";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:2q655p81no03spo65p7p01726s4q13s5n1q7q9n9-lbh_pna_erprvir_fzf_zrffntrf_g";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:o1r22967pr6n96n14r5755r5o81545roqs52rpss-fzf_vf_abg_ninvynoyr.";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:p511q08328pqr1p95no92rr097503qs06n0649sq-fzf_nqqerff";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:p97140s89r57qp4r65o6s0n595rs2opp3498s847-pheerag_pbasvezrq_fzf-ranoyrq";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:9o3po709r0207q423o3675o77o5q3sp6r886n457-njnvgvat_pbasvezngvba_ba_guvf";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:4r9r48sqq225499341o8q74150n973on0q43q3s3-pbasvezngvba_pbqr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:4rrpq4870opoo30so8p7pr02np0o25060oo4o391-ragre_gur_pbqr_lbh_erprvirq_ba";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:n6nso0090264o55035307ps80292nq2qn38q9os9-pbasvez";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:302sssq887786r0s8q16s441r15oo520o0o02148-fzf_cubar_ahzore";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:13pn8p057rpo995or83r236o80q7s4010s3459rn-cubar_ahzore,_ab_chapghngvba_b";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:43351q7nnq59403q8p4s9087q94951051r8pr83q-fzf_cersreraprf";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:8r8np1ro61qqp0qn0q44n4o7n8qs89p50n14o49o-fraq_zr_abgvprf_guebhtu_fzf;_v";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:334775q67p4or40623r17q589s37q275s1657qo7-fzf_cersreraprf_fnirq.";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:936or3r5p4srs3997o3o82sn18sop6161ns66s19-ab_cubar_ahzore.";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:7s6p61s319p8265so2270n0169810317o4794364-ab_pneevre_fryrpgrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:6333n93p1rp31o1son0nsoo0s376p5494rqo75qp-gung_vf_nyernql_lbhe_cubar_ahz";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:19n4noqro8s14po3p4sn668s1ns2q1pq41po192s-gung_cubar_ahzore_nyernql_oryb";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:nrn1n6483718po9556498p6n81soqp13p6n79n9o-n_pbasvezngvba_pbqr_jnf_frag_g";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:po5orrnoq8nr4o37926p06on05or7r67osn5qsn7-gung_vf_gur_jebat_pbasvezngvba";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:n4n6456q7p3ns6674o9818nr78q36s78438o7946-pbhyq_abg_qryrgr_fzf_pbasvezng";a:2:{i:0;R:35354;i:1;R:35355;}s:73:"1208:980o31n132o543r425o6ss57595631osr985o4r7-fzf_pbasvezngvba_pnapryyrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:50rnq364so6n32045prq8s5r094q7p5s67r0s55r-gung_vf_abg_lbhe_cubar_ahzore.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:sr16p555580q07p2qn7p3p2q04418p83o1op7rq3-gur_fzf_cubar_ahzore_jnf_erzbi";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:68582p2nsn39qr901555n4372o4q028q68n9rr64-zbovyr_pneevre";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:r19s271o4r2404s198050q9q7149988nn9896p6n-fryrpg_n_pneevre";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:34310q363oq0354psr5330qn70pqqnn5918r8sor-zbovyr_pneevre_sbe_lbhe_cubar.";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:6q0748031op595s9070pn27s0qr6pq0832012q79-ab_pbqr_ragrerq.";a:2:{i:0;R:35354;i:1;R:35355;}s:55:"1208:s4s12087p1q9n479s725552300p4524o35o3sosq-fancfubgf";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:sp50o27qo693n8qr7s10pp351o5408145o728o48-znantr_fancfubg_pbasvthengvba";a:2:{i:0;R:35354;i:1;R:35355;}s:73:"1208:6os9040p834p2217636psr9p86r4112840655p19-vainyvq_fancfubg_eha_inyhr.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:n07rn45or1oo18764s1rn7n769s620666p9s807p-fancfubg_serdhrapl_zhfg_or_n_a";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:o900p9212q5qn35981sq806p6178032166982s99-vainyvq_fancfubg_ercbeg_hey.";a:2:{i:0;R:35354;i:1;R:35355;}s:55:"1208:o2n5no59086s90q0o4ss22pp072pq223r17q12sn-fancfubgf";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:p51s0o956726137p0s26r6p6on75s0o15480999n-enaqbzyl_qhevat_jro_uvg";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:9424p3o53196s23qnq55r319319q2rrr6p1qn472-va_n_fpurqhyrq_wbo";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:s0qo62nrq9p2730q7so7673q7n3n52r66s3qsn03-qngn_fancfubgf";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:r0o65036s849o0r6n108p165561546n2pooo2202-jura_gb_fraq_fgngvfgvpny_qngn";a:2:{i:0;R:35354;i:1;R:35355;}s:55:"1208:89836n870r44so467q13116254o39r2482s5pqs1-serdhrapl";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:451o20o6139n15nr9n7s4os1890q6648s6ospo78-fancfubgf_jvyy_or_frag_bapr_ri";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:6r92o5227n4o812r638156o366871o3qrpqp853o-ercbeg_hey";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:35qo261o2no80p76q13r28q47143q463on41np9o-fancfubgf_jvyy_or_frag_gb_guvf";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:77o9o4os145no43q6o78r82rp326pn94149pp553-fnir_fancfubg_frggvatf.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:38196317p982q022p1p4195qqqrq964s4n314385-lbh_ner_abg_fhofpevorq_gb_gung";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:5osr57014n4r7n22738rp2727128p5o801n5n6op-pbhyq_abg_fnir_fhofpevcgvba.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:8n9725p03o6qn9543o93n3n232766r5n97090q9n-lbh_znl_bayl_nccebir_lbhe_bja";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:s9n2824442sn5r50s6n8q24r2sp85s3150285322-f_fhofpevoref_njnvgvat_nccebi";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:onn7ns3n760s16o7585pr2r0o1n5nn0os2rs5r3o-1$f_fhofpevoref_njnvgvat_ncce";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:0o2ss996so5oo30qp1109q9o0363654r73r0585q-n_yvfg_bs_hfref_njnvgvat_ncceb";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:qq1242n8sp29346652osqno77420rr2576o04652-fhofpevorq";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:q267pno5p36765rn1n588o96q2n4nr9qr2p2rp3s-lbh_zhfg_or_ybttrq_va_gb_hafho";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:nqq0p560731opro5570966so4qp9r3n845nnss83-ab_vq_tvira.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:9q287os3r89235qsrpsq2qspr89npq690nspq231-pbhyq_abg_fhofpevor_hfre_1$f_g";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:n8r5466641sp53pp1785r412nq528692120pp0o0-1$f_fhofpevorq_gb_yvfg_2$f_ol";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:s9q919986q3s2639qqpqop6693qo5n02r6oq6762-f_fhofpevoref";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:sr34ro7800pnsrq574q807341rqsp1sn63sn8r2p-1$f_fhofpevoref,_cntr_2$q";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:qr2o5qs4po070o601sq7748p4qq079rp9p5p6616-gurfr_ner_gur_crbcyr_jub_yvfgr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:19818rpnp4r74o8r98p372rq4so47404357sp938-gurfr_ner_gur_crbcyr_jub_yvfgr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:5n0580424n492r6006qp4n2q75s84q30q2o4o4sr-lbh_unir_ab_fhofpevoref._gel_f";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:n088nn63sr023667n9771956o0s7q40310q3s612-f_unf_ab_fhofpevoref._jnag_gb";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:pr71sqoq35n4r5s48r493ssr30666r71q8770669-f_unf_ab_fhofpevoref._jul_abg";a:2:{i:0;R:35354;i:1;R:35355;}s:73:"1208:65s884s1q4p46o0q92r1216q8n48295271ro828r-1$f_fhofpevcgvbaf,_cntr_2$q";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:765971115poq0oson3751p974q54o57517qos8qr-gurfr_ner_gur_crbcyr_jubfr_abg";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:25on9qs65n7s6r9p32op26oor206o08qqs904orn-gurfr_ner_gur_crbcyr_jubfr_abg";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:3879p5sr3nr88890r0o2oq7s4515ro612n04349r-lbh'er_abg_yvfgravat_gb_nalbar";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:sp4qnp89105o4q264675sn742so1oqq0p6nq219n-f_vf_abg_yvfgravat_gb_nalbar.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:2177p7q30s6s454r8346oo107n192749p59r8on8-fhofpevcgvba_srrq_sbe_f_(ngbz)";a:2:{i:0;R:35354;i:1;R:35355;}s:48:"1208:q9686024p27774r86s82s7ps4607447srp11s0ns-vz";a:2:{i:0;R:35354;i:1;R:35355;}s:49:"1208:9r10q4517q5n2s4r8r567950p34q021599s90sr2-fzf";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:4p20n806o55p354p1q8qq015n5rsprn92qr0pqpn-abgvprf_gnttrq_jvgu_1$f,_cntr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:r1r23op6sp8q04p1198qnn463054p96n856r0ps0-abgvpr_srrq_sbe_gnt_f_(npgvivg";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:0o9894854q096429rpnr184n6nn2o73ssq485047-abgvpr_srrq_sbe_gnt_f_(eff_1.0";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:no9psqq73q571s4o3qrro1461q0r7prq88950320-abgvpr_srrq_sbe_gnt_f_(eff_2.0";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:pqo1n072q5840s6o263r71p378r351sq27nq758p-abgvpr_srrq_sbe_gnt_f_(ngbz)";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:rn301655q1q0r9ns5026s4987or048o0o2o54o04-lbh_pnaabg_gnt_guvf_hfre.";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:8633q4q99ro3r515o78rq4279so088rr89103r93-yvfg_n_cebsvyr";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:n2oq134s83s4r0388546q032r73256359s4q6q5s-yvfg_f";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:90644sonp1q0896354onn2rq2849sr8065pq6n84-reebe";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:59s86qr772o532001n2n0ns35p68r9n6r09r4032-hfre_cebsvyr";a:2:{i:0;R:35354;i:1;R:35355;}s:55:"1208:61r3ps0p66p4375n3997q38no928sr63o79235p2-yvfg_hfre";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:476697snps6sq4q581n64qno65q03223qnp4s4rs-yvfgf";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:29036r3s16r40r6q4386777549qp4006ro36rns4-yvfgf_sbe_guvf_hfre_(yrggref,";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:0440499s272n9273or1rnn1058n4065996439p5n-gntf";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:sn1sp7q994poon3np37rq2pqpq601917pr46so01-yvfgf_fnirq.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:qo89nn890o7835pq225p2n927058n2p9011o11po-hfr_guvf_sbez_gb_nqq_lbhe_fhof";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:5n904qqnr2p750sonrrp70opoo9ssn7np1q9q2r7-ab_fhpu_gnt.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:8q41sr04104611510np1s15n0o43q401snr20r55-lbh_unira'g_oybpxrq_gung_hfre.";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:04opo2p6s1n26srpssqqs763521nn85r973648n2-hfre_vf_abg_fnaqobkrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:onr54rsp508s35s1qs6683o2n6o182oo0q8o98p3-hfre_vf_abg_fvyraprq.";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:9no84878n997p48p4oq68o3n65572p1r75133o8r-hafhofpevorq";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:nno38qnp9s0on121o6sqnr0p39nn56n178198o4o-1$f_hafhofpevorq_sebz_yvfg_2$";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:on97o020pon0os103n56ns4o01pqnopn53s3ro14-hey_frggvatf";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:98854snns5q9p50n3sp942p16p94s83q5qsq4s81-znantr_inevbhf_bgure_bcgvbaf.";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:9opr1401o6rq20r6698s3544n798784857rn4865-(serr_freivpr)";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:39q957r9s366s71n239rr7nn7r81rp25582o094o-abar";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:n5or65388q36o04664912r15r8q55sn43pn1pssq-vagreany";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:7ros1q03428o7r3r2npr7647p4r5s1n8p8nq6530-fubegra_heyf_jvgu";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:6r51r71o37sqp5s26ppp9r93947psr425pqs0r3r-nhgbzngvp_fubegravat_freivpr_g";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:1s0p1o828s9q4s94640r253p459o27ps921q14o6-hey_ybatre_guna";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:2p48ror2s9o84q8q968s655q1ops646pq288ro70-heyf_ybatre_guna_guvf_jvyy_or";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:n4o79s9sn5qnss2p2q9447p81n051qq53n2por02-grkg_ybatre_guna";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:0opr1p011qq16n6q155r54p23qo3oso8oqp43oo4-heyf_va_abgvprf_ybatre_guna_gu";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:3rss48q2508or208q76o472o9468p5rp698p1307-hey_fubegravat_freivpr_vf_gbb";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:srro481p12o360nnq9qq47035857860p63s8nq54-vainyvq_ahzore_sbe_znkvzhz_hey";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:254ro042so70o1024543r445131r2928p2p00n30-vainyvq_ahzore_sbe_znkvzhz_abg";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:19p60202497qp3q139210qp9547835nq6365457r-reebe_fnivat_hfre_hey_fubegrav";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:1615r2ss261q43pr5441247527sqro8063328258-hfre";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:np79n64o0s76q929r4orq4s7646ns4981sn6528s-hfre_frggvatf_sbe_guvf_fgnghfa";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:r29o611r054rrrs5296373psons17rpn5p6r87q3-vainyvq_ovb_yvzvg._zhfg_or_ahz";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:s9q45047o6q20569025qqqo9qs55qq55oo5qnsso-vainyvq_jrypbzr_grkg._znkvzhz";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:7n4qrr3516696spsn406859q8s13709qsorp48os-vainyvq_qrsnhyg_fhofpevcgba_"";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:qo28182o68r512n47037339p9o2po0n9s53s067o-cebsvyr";a:2:{i:0;R:35354;i:1;R:35355;}s:55:"1208:9sns28q245109np4q437r8246r359670p5oro93r-ovb_yvzvg";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:916qs2sr0pqq48o6744s8qo2n6qpr963pn1qr8q1-znkvzhz_yratgu_bs_n_cebsvyr_ov";a:2:{i:0;R:35354;i:1;R:35355;}s:55:"1208:s9p5072410qnp93s605r41n4590s5o81nq278090-arj_hfref";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:p27349nqqrp97q1q555396q0s971302p75qn5s77-arj_hfre_jrypbzr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:r2716p9rp4o05o47o9249s567r26240s2113q014-jrypbzr_grkg_sbe_arj_hfref_(zn";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:q91rrs76p77qp95161s83orpo69s4ppp1o3o0089-qrsnhyg_fhofpevcgvba";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:9n880r5qssr6n083894rq2o7qq5n4s4384o88p11-nhgbzngvpnyyl_fhofpevor_arj_hf";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:9o69n35no52450so70os29psq08os16692s7278o-vaivgngvbaf";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:12646827317n4pps2713o094pq2363o30n58n34n-vaivgngvbaf_ranoyrq";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:5oo5q35oo1813210q1p21978r15o82n6742o2s3n-jurgure_gb_nyybj_hfref_gb_vaiv";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:1q8r570on35807r54oq04p1s28300389rnp8o586-fnir_hfre_frggvatf.";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:rn4p685ns4662664451rqnpqq452p2895oo9r8qn-1$f_tebhcf,_cntr_2$q";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:9504s70264or98ps5192362035r095rsn5n8919r-frnepu_sbe_zber_tebhcf";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:1sqr5n81r0237716prn591385213rr2oo6n4898o-f_vf_abg_n_zrzore_bs_nal_tebh";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:os8onn26722557ss7265qrqpn9pn24p6962509s6-gel_frnepuvat_sbe_tebhcf_(_npg";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:sp57s40n0o4r700o5n51q8rp3p2rpo310pqs8322-hcqngrf_sebz_1$f_ba_2$f!";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:67rs127rp85257s2o291q4r4o683856q85s3qqrs-fgnghfarg_f";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:4p6ps8475or3r8sp399r517588r3935730r0p57p-guvf_fvgr_vf_cbjrerq_ol_1$f_ir";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:n60n223p98o2p36522s0o7s89s57nr14r144678n-pbagevohgbef";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:3229609r15436rp51ops00818n69n84qop58n0p2-yvprafr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:096407oq343p6630q57496p3136443568s9nq7r1-fgnghfarg_vf_serr_fbsgjner_lbh";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:p6qqr656n0140652rqn4sp29r4765n01r4sp219s-guvf_cebtenz_vf_qvfgevohgrq_va";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:624sn1391qsp07osnr9r1p84nop61on41466o67n-lbh_fubhyq_unir_erprvirq_n_pbc";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:no2r26qq8o8868n3969po3321r0p983p0q9q67q4-cyhtvaf";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:183p6796p63p3qq77r6471953q8r915o74rs76q3-anzr";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:66s93r3r37o1nr7367q68q0q566o730o70o09141-irefvba";a:2:{i:0;R:35354;i:1;R:35355;}s:55:"1208:oo96n5n141321spqq09602sp8npopn161qsn06s2-nhgube(f)";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:598945n93p61898510p9n7p951n142r7o89qo203-qrfpevcgvba";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:ss7264o2ns49q983303o80o866nnr575472859r3-snibe";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:qo52q07q8qon8srpqpsp25n789p6s1qs93qrq22s-1$f_znexrq_abgvpr_2$f_nf_n_sn";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:p34331ro1sr14oo459o42r99109o8n4248sp2pop-pnaabg_cebprff_hey_'_f'";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:184r3o0185q3s83n768nrqonp9np618p2sno6n8p-ebova_guvaxf_fbzrguvat_vf_vzcb";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:18rrq92sn4q7842so212622rss9161o213p7o159-cyheny_trggrkg_1$q_olgr_1$q_o";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:1o36261o4n47316po6n13p5ns8psn0s422n80so3-cyheny_trggrkg_ab_svyr_znl_or";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:5sqsq07s39n9138174723n29qq4p1s9o2n1r3472-cyheny_trggrkg_n_svyr_guvf_yn";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:2oo6op69nsq84o5p34pp1qp5o404q459o1nor368-cyheny_trggrkg_n_svyr_guvf_yn";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:s3poqpnnpoo9366r479153pso6q685r65s4oo3n1-vainyvq_svyranzr.";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:747rrs297or170o004117254opoop98n2ron12n8-cebsvyr_vq_f_vf_vainyvq.";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:p449rqn536s4sr914756nn999s569459nqqnq1r9-tebhc_vq_f_vf_vainyvq.";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:6q57onosn3sop803p0q7702q397r36op302p431r-tebhc_wbva_snvyrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:5qn91n2o6r266o48pq47s50qrpq656647rp2qq02-abg_cneg_bs_tebhc.";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:n309qr340s8rr8pn3onr2950249p5q0rsp3p9n2n-tebhc_yrnir_snvyrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:r0q73143qr80q17r82qr2r017np156pn3o9p4r01-wbva";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:p4s38n7072nr842sqq4104pron8558n992157rn1-1$f_unf_wbvarq_tebhc_2$f.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:p3r97ns85opqp136n00s08q6s3494q850n712rrr-pbhyq_abg_hcqngr_ybpny_tebhc.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:080rq554423o4o0n4rs57qo0528o4q4s37s0s7n8-pbhyq_abg_perngr_ybtva_gbxra_s";a:2:{i:0;R:35354;i:1;R:35355;}s:73:"1208:402229o8p6or07r9pp1368r934r6695ppr444r36-pnaabg_vafgnagvngr_pynff_f.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:pr4q4ns3o7pn37pr598ns9n46p18481q08qr9p63-ab_qngnonfr_anzr_be_qfa_sbhaq";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:60o840qo464rq9rq54065qq35p2s2n8q08os2nqs-lbh_ner_onaarq_sebz_fraqvat_qv";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:92s02q0sr9492p3q359r9n33o9psp05sr0srqn8r-pbhyq_abg_vafreg_zrffntr.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:36838825921540sp2o5nq6o4rqq3n098q70s1sro-pbhyq_abg_hcqngr_zrffntr_jvgu";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:96qp47n486prq2pq7opoopn168n8nnn40q428259-ab_fhpu_cebsvyr_(_1$q)_sbe_abg";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:pq2726n39q1o4345rnqqrp12r6q13q87s4o2779s-qngnonfr_reebe_vafregvat_unfug";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:n6933r9sn28968181o6326p687sn6q4n99904718-ceboyrz_fnivat_abgvpr._gbb_yba";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:6n025153r9805771690ss1098sq5395r99048q36-ceboyrz_fnivat_abgvpr._haxabja";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:1n8ssrr40p1s2742112oq2629r839s80q6qsn33o-gbb_znal_abgvprf_gbb_snfg;_gnx";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:678s316o1sn060qoqn40r5155p97op38s6q14n93-gbb_znal_qhcyvpngr_zrffntrf_gb";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:5rr9n6p0o9s8os0qr42q09046nss0996448q9o56-lbh_ner_onaarq_sebz_cbfgvat_ab";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:1s04r76no9sspn46r0r07p65o582r80q6r9r509r-pnaabg_ercrng;_bevtvany_abgvpr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:o4q18951n7ps017014r28n88p0o01o09ns844602-lbh_pnaabg_ercrng_lbhe_bja_abg";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:s039on60qpq1nn8147927s43srn3qn2660nrn107-pnaabg_ercrng_n_cevingr_abgvpr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:548r4s7s509ros3042453npo62qpqr8078no57r4-pnaabg_ercrng_n_abgvpr_lbh_pna";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:pp9238905srq6nno7q6s10n3nro6qosr90ps5391-lbh_nyernql_ercrngrq_gung_abgv";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:s85s4p0536n89972p1n62p75939937r44psporr6-1$f_unf_ab_npprff_gb_abgvpr_2";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:50r3n4q5s8n60145snr39or4rop73qp5n379o2o3-ceboyrz_fnivat_abgvpr.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:oq45or2669qn8294r72q6s1np9ns413890pr6210-onq_glcr_cebivqrq_gb_fnirxabja";a:2:{i:0;R:35354;i:1;R:35355;}s:73:"1208:4590r038rss8679o24n8nss6o95ro6595242o132-ceboyrz_fnivat_tebhc_vaobk.";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:35qo97n57q981p643479o9po6s58or2q093nss08-eg_@_1$f_2$f";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:qo4140o1o5r5qq5qr59rn5nr004o09552q838o6s-1$f_(_2$f)";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:nr8qn5701089s178896q697118r9s1933s41rn95-pnaabg_eribxr_ebyr_"_1$f"_sbe";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:s327465p5s6qp5snsn7ro7rq97759p378ps0473p-pnaabg_eribxr_ebyr_"_1$f"_sbe";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:r57604sn23n6250qq37o01rs0964q350qn018n31-gur_gnt_lbh_ner_gelvat_gb_eran";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:3234q8nr70s7sp14p9371859s0n9pn76904ns5so-ab_gnttre_fcrpvsvrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:5564sn11sp317868pqpn2q4q0p88ns2r702r3oqq-ab_gnt_fcrpvsvrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:96n383o9s74o1n660r3po43873rn4sp2q87r5q3o-pbhyq_abg_perngr_cebsvyr_gnt.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:5po6870qr4n693189739o98s6qsop883q57ns750-pbhyq_abg_frg_cebsvyr_gnt_hev.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:3994p74n130036pnq0q9132s13s330nnq59q10s7-pbhyq_abg_frg_cebsvyr_gnt_znva";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:2ns231648612590953489q476937q64pp15845qn-lbh_nyernql_unir_perngrq_q_be";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:70705r04s8o6ns6r3p07n906308r4n8041nnn0s6-lbh_nyernql_unir_1$q_be_zber_c";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:0onrqr92r998q29358q626s7s41ns06prq95q321-nqqvat_yvfg_fhofpevcgvba_snvyr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:s4566o25q18qorpqso71n3910q648np6o52pqo38-erzbivat_yvfg_fhofpevcgvba_snv";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:147o7rqr260143q3o3679n73p3qr0nn6r89o9771-zvffvat_cebsvyr.";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:6r3rp1r6270or97279264468s3o9277352n5787r-hanoyr_gb_fnir_gnt.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:458s720nr3sr83qo9pqp7n50soo90oq609519391-lbh_unir_orra_onaarq_sebz_fhof";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:sp49n5r4o77pnq32n08noop8s9np3035q78qs66q-nyernql_fhofpevorq!";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:6n46q09n69o0p3777rp8905nro364r5q06n55q1n-hfre_unf_oybpxrq_lbh.";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:57o20p6npr343no08s550s826041650207rp788q-abg_fhofpevorq!";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:8rr3pn06p6p4po991s934qq13pp3310rqn0o1qno-pbhyq_abg_qryrgr_frys-fhofpevc";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:9s67368s81910829p967s5s037087o11n41o0so3-pbhyq_abg_qryrgr_fhofpevcgvba.";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:94874483pr5n77p68r7r51rsn4o3q94ppr51prq0-sbyybj";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:38o52pqs006r6150p0so93rp6n72606180s23163-1$f_vf_abj_sbyybjvat_2$f.";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:1q2ooq445p37no22n6rss895o9qnqprr723072po-jrypbzr_gb_1$f,_@_2$f!";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:ns5559rq39s690s8p28q2696503n5p1q45168r39-abg_vzcyrzragrq_fvapr_vaobk_pu";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:5672268n33r8p1803sp4nn2o292qq3r6np1p5917-ab_fvatyr_hfre_qrsvarq_sbe_fva";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:62751q24rpq0r0q510n5n06oq651q43ss31996p1-fvatyr-hfre_zbqr_pbqr_pnyyrq_j";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:195or46p2834s4273os8qp62n9p899s0n533182o-ab_hfre_jvgu_gung_rznvy_nqqerf";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:18nq26rr8n196s8n089p665o1r7q8rp0o40pr88n-ab_ertvfgrerq_rznvy_nqqerff_sb";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:qs2s672149666oqp47p9p907q299no10p1o62901-reebe_fnivat_nqqerff_pbasvezng";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:o5310s6qn7515n5s96o07qsrnp94656795099n43-pbhyq_abg_perngr_tebhc.";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:s739pr4po3nsr0q1q0600sq7661ns515n1s9ns30-pbhyq_abg_frg_tebhc_hev.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:77q1n9rq5835849s4n7110pnr9qp6n328rs88s2o-pbhyq_abg_frg_tebhc_zrzorefuvc";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:816962o22rp0ns346137n50s11469po21549p9r3-pbhyq_abg_fnir_ybpny_tebhc_vas";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:8o4q87orqs6r893p6193s9n658s8rsss7n2305ss-pnaabg_ybpngr_nppbhag_f.";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:42s44sr1nn7784nsorr6064143q49636p8n682o5-pnaabg_svaq_keq_sbe_f.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:qs61oo2qs364s25159r934o64qp41n1n6544o1sn-ab_ngbzcho_ncv_freivpr_sbe_f.";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:81939432qq6709sn9p725744o383574p6686356p-hfre_npgvbaf";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:n54o6rn25rp976412s28oo303507sp266q52n270-hfre_qryrgvba_va_cebterff...";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:09rq22362op121725q4r9r908sqn15808r94oqp0-rqvg_cebsvyr_frggvatf.";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:238qn947sq67s77775rqrq8s37q42nqr0r82qpq4-rqvg";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:po52rn9s24501p4pqs11678o6300qp4p3609432r-fraq_n_qverpg_zrffntr_gb_guvf";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:31n6or363686209on9ppr02q183r16q04846p06s-zrffntr";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:rn8o09p2354o17p2n83673437q6380or0r7o8p73-zbqrengr";a:2:{i:0;R:35354;i:1;R:35355;}s:55:"1208:364o2rro40p52qrqn57n4s5o21o6ssq0po2o1nq6-hfre_ebyr";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:4658spn85n931snqs9p28q7517oo381ppq8p5740-nqzvavfgengbe";a:2:{i:0;R:35354;i:1;R:35355;}s:55:"1208:n377rp9640rop4548445326oo34669s07083sn86-zbqrengbe";a:2:{i:0;R:35354;i:1;R:35355;}s:55:"1208:59s6071op1r36q16oq4735p7781p734q7or14572-1$f_-_2$f";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:o5s468oq36n8oq995o016521n40370p609115n4r-hagvgyrq_cntr";a:2:{i:0;R:35354;i:1;R:35355;}s:55:"1208:2rq54ro8o886936886p5np9972s8201q3568n5r5-fubj_zber";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:pq71nrnr76p7945n45r039oqs1892n8049nnn178-ercyl";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:126pq2pq3647q57211269pnqq82np2773299qs76-jevgr_n_ercyl...";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:8n3nq4s25s2oop3p0or6ro7oo4r6spnp38672726-fgnghf";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:s88n848493p155r3os04pr4616p87qo7nroor96o-**_fvgr.anzr_**_vf_n_zvpeboybt";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:46807npq31o6895r0238prp45846r87904385rr1-**_fvgr.anzr_**_vf_n_zvpeboybt";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:278663psq49pn1qsp6638ps4ps4s55069p1rr0oo-vg_ehaf_gur_fgnghfarg_(uggc_fg";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:s32q8qoronrr32n37n59n018946o11q717722865-pbagrag_naq_qngn_bs_1$f_ner_ce";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:s92sqonno180319nq0124po0541q42oqsr374q75-pbagrag_naq_qngn_pbclevtug_ol";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:79768op921627s481n01o65sn60s03ns93252472-pbagrag_naq_qngn_pbclevtug_ol";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:052653o50snrs29621p517095p95psqp413311ps-nyy_1$f_pbagrag_naq_qngn_ner_n";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:79on5r1o3s99nosq54rs8q839on12oq2np4q79po-nsgre";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:74s39697np328p6325pr068o6nnpn626nop0os63-orsber";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:72sp697280p127657n4466n87499r220n14ns855-rkcrpgvat_n_ebbg_srrq_ryrzrag";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:qo5964949r56s3rq9p9s22o6974nq4rpopqrnp36-haxabja_ireo_"_f".";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:5nonnsrr67r81n1p2op1n2p04050ro5q7o9n66qp-pnaabg_sbepr_fhofpevcgvba_sbe";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:4n0o1op5n011432496n4o00o844o505n6015r576-pnaabg_sbepr_erzbgr_hfre_gb_fh";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:s5r8n5sospqr7ns2r173829r2ssp1q6q24oo4464-haxabja_cebsvyr.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:qr6r9p33ron2n5n06q6n76809701qr69r9r7p067-guvf_npgvivgl_frrzf_haeryngrq";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:1s7q032pq11q7rn8r3692o17rp319432o393nr01-erzbgr_cebsvyr_vf_abg_n_tebhc!";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:8135sp70o70r1q665308qpq3o1npqq46np816313-hfre_vf_nyernql_n_zrzore_bs_gu";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:po94s6071rn6so84qqs2o82qr2oq9750pnp1r75n-nyernql_xabj_nobhg_abgvpr_1$f";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:oqrn4o8n5oro0q0404320862o50oop3q929013p9-abg_birejevgvat_nhgube_vasb_sb";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:4s77r276n2o55os74s2nn948672p734989nrrpqr-ab_pbagrag_sbe_abgvpr_f.";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:n40ro24115112453ro90895p67o8q51rr7qq83o4-ab_fhpu_hfre_"_f".";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:r14p8825836sqrrsr1q1131786n93qnsqq19o590-1$f_2$f_3$f";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:sn9qr07o229613n4p20sn57pnrps1rrr5r564n20-pna'g_unaqyr_erzbgr_pbagrag_lr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:18s0252s05p931975q2p40q6sro330n002or547q-pna'g_unaqyr_rzorqqrq_kzy_pbag";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:r341o9q209n226q6q2r28386r0121141n1r4739q-pna'g_unaqyr_rzorqqrq_onfr64_p";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:34pnpp0sop66pr1463n73q27rrn8q910sqp6q348-lbh_pnaabg_znxr_punatrf_gb_guv";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:8so85p1o4q5sn3nr6r49sr74qn6qqr55ospr1n56-punatrf_gb_gung_cnary_ner_abg";a:2:{i:0;R:35354;i:1;R:35355;}s:73:"1208:ns03sq0oqn0s8587pn6s72o57r08o074q8q4r57s-fubjsbez()_abg_vzcyrzragrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:o21q310816rnn82892n748r5on77rs1n1376sno6-fnirfrggvatf()_abg_vzcyrzragrq";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:5sopn073o45893030rp0012s6orr2123n4sp61o2-ubzr";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:s3sp9o8so27p211427on96pon620827n3nqs6098-nqzva";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:o71qnss3o5rp2q2n5s61615p36r274n0nqn4o443-onfvp_fvgr_pbasvthengvba";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:396q4q707537p2np38srrnon288oons2562o369p-fvgr";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:r71s83q6nn24s20qq3281640614339n97r3p03rq-hfre_pbasvthengvba";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:60050s02q3qo7s2s1op03r2ro7orp4966srpnpo9-hfre";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:5sq1nqopo64486p43n7767so70o63o5r3450rp20-npprff_pbasvthengvba";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:359839p0o054qsr48n09r2nq2s0oo6ro6o97o1ro-npprff";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:285o529qo9nn9rnn54109p829038q3325o6893o4-cnguf_pbasvthengvba";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:n1qq028q3n9so917srnos46rs048n7s1r8rs3470-cnguf";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:75sn9nr52108o19n13q7528n9n8q7894o4p3qoq7-frffvbaf_pbasvthengvba";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:o2228q5pn1852559r6pq84s7qrno4r59237n28q0-frffvbaf";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:r2184308o205rp78723q6107s9359p6so9ro7535-rqvg_fvgr_abgvpr";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:8qqon7048qq6n30929nns0793r5sp131559rq57n-fvgr_abgvpr";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:s146566q08nq5op896470o2pp5r3789n31306571-fancfubgf_pbasvthengvba";a:2:{i:0;R:35354;i:1;R:35355;}s:55:"1208:0605r1oq59o5147989982qn4o4o8218rpp1nq6pn-fancfubgf";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:oq50037q6008794p6514818078q0448nr03837q7-frg_fvgr_yvprafr";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:so5n6p53r27pqp4999o9353o4oo2o0rr0qq32667-yvprafr";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:48753rr16r791010n61r50970npo51436979n3r1-cyhtvaf_pbasvthengvba";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:o8r35169400286o1s9qoq37221s4q5s3q65nr03p-cyhtvaf";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:p97nnpno00321116oo4179p1sp1p399q7np879q4-ncv_erfbhepr_erdhverf_ernq-jev";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:854o68ps1snpq615nn04s3q56r576pr2s793164s-ab_nccyvpngvba_sbe_gung_pbafhz";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:44n4ro3502469s81q23662890n361s70o3qr2216-abg_nyybjrq_gb_hfr_ncv.";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:q18r13rs93o31sr040q6osps5s4s6p7s92o00r33-onq_npprff_gbxra.";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:p6132o30q39197n8192q267sr0580p80423r7902-ab_hfre_sbe_gung_gbxra.";a:2:{i:0;R:35354;i:1;R:35355;}s:73:"1208:91581421218739345qoopqnr25842519np6q90o8-pbhyq_abg_nhguragvpngr_lbh.";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:716s63o96r0p263222949n3o8n00pqo4s46q3183-vpba";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:823o516356283q7136n0psr723603123p90opp0r-vpba_sbe_guvf_nccyvpngvba";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:709n23220s2p3q64q1r1q6q18p4q5280s8q82spn-anzr";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:565q8q818sn2304237s34p96pq437612srn7n312-cyheny_trggrkg_qrfpevor_lbhe";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:3275osnnpppq0qo822or97p8n6n410r38921s8q9-qrfpevor_lbhe_nccyvpngvba";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:55s8rop805r65o5o71qqnsqnr390r3or2opq69ns-qrfpevcgvba";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:3730q1o7on89p841r6rpp1qspor49r19n1017260-hey_bs_gur_ubzrcntr_bs_guvf_nc";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:601856o5npr6oq225q0nsq68spq7p62801013q9s-fbhepr_hey";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:95s07qq8sr522r997qo637751p8r41qp78qns95n-betnavmngvba_erfcbafvoyr_sbe_g";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:519255nr1s74ssp5qqq29979295p7572s048nq81-betnavmngvba";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:2o8637p73sp85159754r17pn2n217334695roppr-hey_sbe_gur_ubzrcntr_bs_gur_be";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:94942pq18r1pr0909rr065117r607364np1o474q-hey_gb_erqverpg_gb_nsgre_nhgur";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:54n2ps5r634qoon0or2os8n55s79252s5p790oqo-oebjfre";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:532p67sr1o5nsnr15q2q08son7n78qr0s63pp4o5-qrfxgbc";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:r479oq90650682p5828004q866o450o17969pn2q-glcr_bs_nccyvpngvba,_oebjfre_b";a:2:{i:0;R:35354;i:1;R:35355;}s:55:"1208:9o19n5n212qro29444pp1o420nq81703205848or-ernq-bayl";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:3po38069622qs964nqn791onr1456265o89p22p7-ernq-jevgr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:0r1on52n6n1143ro806252p5o3n52o284oqnr0p9-qrsnhyg_npprff_sbe_guvf_nccyvp";a:2:{i:0;R:35354;i:1;R:35355;}s:73:"1208:493qsp5826821os3qq60280n66096525p80s22n7-pnapry_nccyvpngvba_punatrf.";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:4no584907387982r822nnq4nq4qrp9nons88qon4-fnir_nccyvpngvba_punatrf.";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:s871r62n4484p941sp4532o488363p74pqq27ss4-haxabja_nccyvpngvba";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:5sp528qp81rs72n65n69oo1054rss1947r0988p7-ol_\";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:73o9s04976qsp2q88430s0582op42066ns9s5n3p-ernq-jevgr";a:2:{i:0;R:35354;i:1;R:35355;}s:55:"1208:1q8q39n6r91n5q579q831544so5p2o08q7rn8q5q-ernq-bayl";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:47o0p716ns2sn6p3n73s926rps0s8opr659r5rrq-nccebirq_1$f_-_"_2$f"_npprff.";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:2q155n6238s4rq1ooqosp30pqo1010p4q2261784-npprff_gbxra_fgnegvat_jvgu_f";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:4806r431n33qrp66499p82so67241s2s70o19518-eribxr";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:8s71r98756779sr804p9006r12285n4q482038p9-npprcg";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:2p602588037pp364232n4norp0r7997s9o6qs8qo-erwrpg";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:p03685qq0800597r0r83r331869q22770s83np5r-nhgube_ryrzrag_zhfg_pbagnva_n";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:qp518o7623ss7n47r6sp1q9o257p6951759pp877-qb_abg_hfr_guvf_zrgubq!";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:2s53q22561oq94r6rs1oq377p0rs4qpso9po46o2-gvzryvar_sbe_crbcyr_va_yvfg_1$";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:0no2563101sn2q05noq1p79s78s138rq9830p369-hcqngrf_sebz_1$f'f_yvfg_2$f_ba";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:40613pp4qs3o8747o395735q5ssqq33qs11911n0-abgvprf_jurer_guvf_nggnpuzrag";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:no2107q3nsn76n1p10rrqn8ooo9067prno7975rn-gntf_sbe_guvf_nggnpuzrag";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:orn1p9427q9r670112r56n3q0287o7p43q504q43-cnffjbeq_punatvat_snvyrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:610r3p0n1704qn2r504n2nqp1108ns987126s335-cnffjbeq_punatvat_vf_abg_nyybj";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:82qq2pqs36s9436q89s404454654nq3r53sq428q-oybpx";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:8442o97nqp4ss27n1so0n671rs231ppn4nn84216-oybpx_guvf_hfre";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:30432sn107o04524op51sopqpsqon0p4084pn57p-pnapry_wbva_erdhrfg";a:2:{i:0;R:35354;i:1;R:35355;}s:73:"1208:s20607p58rs76ssq76o199s66p65r369qr668qo1-pnapry_fhofpevcgvba_erdhrfg";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:5q6o1n9630519o05584834341404005pnnqp50p3-pbzznaq_erfhygf";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:q43nr4p09qpso7q66n1ornp62593r37n9p7onn5n-nwnk_reebe";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:n8r399530785r82473qo9214518q592802nso8n1-pbzznaq_pbzcyrgr";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:nq9s31pn5n9203n7qp515532p1806prpoo8940p7-pbzznaq_snvyrq";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:9nn7nq605oq85n4n7803op9350p20046r4s7r591-abgvpr_jvgu_gung_vq_qbrf_abg_r";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:986psr81q8pp5s109374n8p3r685qpop0srr34o0-hfre_unf_ab_ynfg_abgvpr.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:oq8723486o0s5r6325299nn9q25s14120251p6o3-pbhyq_abg_svaq_n_hfre_jvgu_avp";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:1r4840n638rs6n271sn45no4prsr7ro54465pr3s-pbhyq_abg_svaq_n_ybpny_hfre_jv";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:7sn0r79s5rr77591so4384r5qq88634r588q8819-fbeel,_guvf_pbzznaq_vf_abg_lrg";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:7859rs0078524q39214r44qnq5q900952n42r857-vg_qbrf_abg_znxr_n_ybg_bs_fraf";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:opqrop07n908qr92nqno8q644o1nrp5q4rqspoq9-ahqtr_frag_gb_f.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:7pn3r4r0p1n89272so2r966o5q3n86400035r7qn-fhofpevcgvbaf_1$f_fhofpevoref";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:144r2pq366s9n39nr86qr4opnns5s97o26o49p2q-pbhyq_abg_perngr_snibevgr_nyer";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:7o1956o98sn9sq0s0sq6267970o5pqrs49295srr-abgvpr_znexrq_nf_snir.";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:s9302o263n0o6o1spp9o9064q04s58nnop966q21-1$f_wbvarq_tebhc_2$f.";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:8r4n726rp99n1n741q10p4n148pso01818sros3o-1$f_yrsg_tebhc_2$f.";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:qp6q7088r7qq0n711r04p9q82p91o55p8762099n-reebe_gnttvat_1$f_2$f";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:s9r634806655056o66r1s57n6p1s44np0srq766p-cyheny_trggrkg_1$f_jnf_gnttrq";a:2:{i:0;R:35354;i:1;R:35355;}s:49:"1208:42060s9325p91799o8755r3571o866r0q40pssno-,_\";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:3qq6q2r04p97n12q965p4n22q99o48pp53710o3r-vainyvq_gnt_"_f"";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:2o6381607249n30p5o8snn639016sqo194n6q901-reebe_hagnttvat_1$f_2$f";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:s79q696q6o3or84ooqr27q52pr163r5n41122039-cyheny_trggrkg_gur_sbyybjvat";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:6827s032rrn37rq3547p8n1p65n3481pq410233p-1$f_(_2$f)";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:ps606n78s7366r955n29s977r079rs7536900886-shyyanzr_f";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:0s05o3431390qos672qo77417qp9rq0244068351-ybpngvba_f";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:n1r987n6on4ps701620q7ornp22141ornr3o9580-ubzrcntr_f";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:98s78486229271o13r4o47o71sorsr764639ps5o-nobhg_f";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:50n8567n727spnrr1sn0415ssq47r198q7403q79-f_vf_n_erzbgr_cebsvyr;_lbh_pn";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:s4pr858060n60n1p93s3n16q7q978os1p51338r0-cyheny_trggrkg_zrffntr_gbb_yb";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:2255o667o8070op58o57s7555srpp65p31ns5560-lbh_pna'g_fraq_n_zrffntr_gb_gu";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:qsns673pn89qrr00p7994q165op389s2243oooos-reebe_fraqvat_qverpg_zrffntr.";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:9p3s8sr501839psq5r3691no145q3n32n5o682oo-abgvpr_sebz_f_ercrngrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:q8245p94q0q39s0nqnn7006r695r0210oro156ro-cyheny_trggrkg_abgvpr_gbb_yba";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:5pp1p2s10s145o26289009569roo32r439n95np8-ercyl_gb_f_frag.";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:744s851q20657402618sso86qnrp903504s6pn1s-reebe_fnivat_abgvpr.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:29nn616q68n64n01pr5r3p63rp8os820nq01040p-fcrpvsl_gur_anzr_bs_gur_hfre_g";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:88q1r4npposn42646736p423s2n126s640o1479n-pna'g_fhofpevor_gb_bzo_cebsvyr";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:ono7831437q40po1no89o254pr7s256314q938n3-fhofpevorq_gb_f.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:q2o4rr3nq99p7ss44rnr1r113sp421593s9s7qq0-fcrpvsl_gur_anzr_bs_gur_hfre_g";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:pq154n927s6s67849p29pn532np5o00q42392qp2-hafhofpevorq_sebz_f.";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:rnp55n6r7q98667s1p7nr14rs42p2opq45pq4o19-pbzznaq_abg_lrg_vzcyrzragrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:9nq5rpr207r660n4591s2p78766or5s53q6q2o91-abgvsvpngvba_bss.";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:sn88373s9n11034068r7620139q9647rs83810r6-pna'g_ghea_bss_abgvsvpngvba.";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:15q9o53r3o1p83o246snq20r6s4ss57q30609n62-abgvsvpngvba_ba.";a:2:{i:0;R:35354;i:1;R:35355;}s:73:"1208:056ps8poo60553877763o90q2412p270q04q8ss4-pna'g_ghea_ba_abgvsvpngvba.";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:3800013970965qp945n78ns6spq661264po20r88-ybtva_pbzznaq_vf_qvfnoyrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:r10psp77963r0o553r58773879p8693qq60n29qq-guvf_yvax_vf_hfrnoyr_bayl_bapr";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:os9oq7qso888115p99pq5977767s376p5550969n-hafhofpevorq_f.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:53o38sqnr971rqp84qo03904ns5337rrq296sr30-lbh_ner_abg_fhofpevorq_gb_nalb";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:oqq1qp6onq213qs7r8060n830q171r35r56ss39s-cyheny_trggrkg_lbh_ner_fhofpe";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:3op3q0200r81r4o68107p796o9s62525o82oq031-ab_bar_vf_fhofpevorq_gb_lbh.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:34r775rs4nps369q44rr3671s33qsrq7qq627oqo-cyheny_trggrkg_guvf_crefba_vf";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:1795043qonn3rpp970o1s80q74047qsoqrr67n8q-lbh_ner_abg_n_zrzore_bs_nal_te";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:po3n4ps1137q494249619338sp14909n340334sr-cyheny_trggrkg_lbh_ner_n_zrzo";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:2p5ro2qp13sor22n412pn847o271o846pssn3n91-pbzznaqf";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:q69s87qqp3os68p6rqn57n3qos8soq4996226564-ghea_ba_abgvsvpngvbaf";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:np035sr723sqr914s08o135o2qpo878sp23s7n5r-ghea_bss_abgvsvpngvbaf";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:8rs1s714814sr6r535s23916242p216p6sr6993r-fubj_guvf_uryc";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:8n67p1r9q14pr164q5117n44spqr2qn38r3916r4-fhofpevor_gb_hfre";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:14no59or058090n0rr2np529s92pqo07r6spp087-yvfgf_gur_tebhcf_lbh_unir_wbva";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:r9n778p15o131qps82rp0s877913194q189s9rs9-gnt_n_hfre";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:4o241s0oop98s012q701519qsp9s5793968494p9-hagnt_n_hfre";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:qr6r5q403n9ps320s01528361or7ron41qpo26s3-yvfg_gur_crbcyr_lbh_sbyybj";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:s2842550o51401388n349sp6623o2q2ro3130r9q-yvfg_gur_crbcyr_gung_sbyybj_lb";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:236n061r626rn612q70o3ps1s2r9n6o4s68q99ns-hafhofpevor_sebz_hfre";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:4285q509r416n393275so8q7pr3779n2551s6o4q-qverpg_zrffntr_gb_hfre";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:3sr175885p1r41315n0353p5p457n66133n68301-trg_ynfg_abgvpr_sebz_hfre";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:o098836s398o9103p9300012nr252po4s03325ro-trg_cebsvyr_vasb_ba_hfre";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:629q69q9r1o3432s17093o1rrr41123o98457os3-sbepr_hfre_gb_fgbc_sbyybjvat_l";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:64308r9p9r079886nr40qn85npq0p16s6pn2848n-nqq_hfre'f_ynfg_abgvpr_nf_n_'s";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:84p448q0283po3n8q22q52o5por892qqoq3o9n8r-nqq_abgvpr_jvgu_gur_tvira_vq_n";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:259297qoo5r85269112378qn97q76400s540s9s1-ercrng_n_abgvpr_jvgu_n_tvira_v";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:9nq59pq5rr7n359o1n93qsroq32pqs0r52633767-ercrng_gur_ynfg_abgvpr_sebz_hf";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:s8o276q711n35p69rqr135938o6p0q8p0q375537-ercyl_gb_abgvpr_jvgu_n_tvira_v";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:pp7n2p395981r52454n7r2954n60q25n5os6nrso-ercyl_gb_gur_ynfg_abgvpr_sebz";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:p15sp10q7717q4330pn42o07381n5rrps741rr95-wbva_tebhc";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:s736884r004s6871661611ns089049761933rq1o-trg_n_yvax_gb_ybtva_gb_gur_jro";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:76sn9s3n0946r74r4o787os471qppp6s3ooon890-yrnir_tebhc";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:s795qs3n31o34734rs11orp211o6222p437os449-trg_lbhe_fgngf";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:2nq5n8654qo5o46pop34n41796684n27s6607n55-fnzr_nf_'bss'";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:963n3p8nr6858r58r2546nr4o1oo55710q22o11p-fnzr_nf_'sbyybj'";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:96s9oo8p39n25nqnn6p21sq17p52o11358n85ops-fnzr_nf_'yrnir'";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:9qp1n332r780335s4ss94534spos30q330np941q-fnzr_nf_'trg'";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:o1n538n244o49921889ss266p8pqs1094r88qnp8-abg_lrg_vzcyrzragrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:9n2n96p10r6orro9q9qq9nq080np9nq0spn2p93o-erzvaq_n_hfre_gb_hcqngr.";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:rr64o74686rs6o944psqrn973200n75n4or993op-ab_pbasvthengvba_svyr_sbhaq.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:nno9n174sn4363182q1qoo76991s73q01292r019-v_ybbxrq_sbe_pbasvthengvba_svy";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:rn0p100q92n751pr34o14rqr7q858o6888pp98r4-lbh_znl_jvfu_gb_eha_gur_vafgny";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:ps627oqr332sosq731992n0p69n18n6690675002-tb_gb_gur_vafgnyyre.";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:r94865q46012ro81682r78sr62s4n98sr76300sq-abgvprf";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:1r7o9124q5655728s90284715p9q5qp3571n6036-qngnonfr_reebe";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:nqop612p0827n6s024n8o3ps448q3728rn33987q-choyvp";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:592725o6qo70nn1os52n6672oq7628885n0s41p0-yvfgf";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:s6sqor48qp54qq86s63097n03oq24094qrqq713n-qryrgr";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:9467s5q392no25735s03pq799pp3s1820s5q9po7-qryrgr_guvf_hfre";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:5qps01071p0768p05rq547sro86sqq002q6nqn2q-hanoyr_gb_svaq_freivprf_sbe_f.";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:nr89ns1s8p4s5q1o251rps53797opq9149rp38o5-qvfsnibe_guvf_abgvpr";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:sq2295o304sns2ns63799554n8s6o30ss3q5r58s-qvfsnibe_snibevgr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:q731o9q14664311p7or31804270q7osr0963roo7-erzbir_guvf_abgvpr_sebz_lbhe_y";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:23768nso237p0887o84qr9nrsp0qrpn63sqop47r-snibe_guvf_abgvpr";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:660o0nr43q4152p6o9r9132qq1812o9s3p9qq225-snibe";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:q958nn7200656r01o4qs3r0sr2qnqo6n8pn7q8o5-nqq_guvf_abgvpr_gb_lbhe_yvfg_b";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:p1qr387q0579s79s0qq7199r969s11n9r8pn5sqq-eff_1.0";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:8308pq9837ss1qnp65727sqo46049040n3p1oq0q-eff_2.0";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:41qqrq417052424oqps3p39s6p8664147snr6806-ngbz";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:q9nr6n5973sp5nr4qpr6075n4q929ss233rs4147-sbns";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:7npss077122s9p4o827o5o993o529pr5o019017q-npgvivgl_fgernzf";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:np4218posqn959rq04q754s27or43ss2s3169s56-ab_nhgube_va_gur_srrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:onn0oop8rp225oq7o3q4o5s7581s80n65867596o-pnaabg_vzcbeg_jvgubhg_n_hfre.";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:ssr8r99492rr9o850395q53s6p519938952sqr0q-srrqf";a:2:{i:0;R:35354;i:1;R:35355;}s:49:"1208:974352941464oq61po50sr6999pn7s9o0780q1r6-nyy";a:2:{i:0;R:35354;i:1;R:35355;}s:49:"1208:982963p1p41porq8pno073724749592sr35p532o-gnt";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:78prrp221n470797p7nno01oss75p7n0407549sq-pubbfr_n_gnt_gb_aneebj_yvfg.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:pq6s7q31sr6n627851sqpr3294571r7r50snr0q3-tenag_guvf_hfre_gur_"_f"_ebyr";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:1po449p1126609o4o41r1q87s65s0q7pq19o49o9-zrzoref";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:2rq2p0rq6or51noo5oqn6qn58q32436402s88476-nyy_zrzoref";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:96s608p16prs16pnn06os38901so5s618n35n70o-craqvat";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:99613p74pr010q98rq5501785s3591344n19op17-oybpxrq";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:s5s4so7671930s4q919p37n2p8nrr17so3760n6s-nqzvaf";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:9163qn5915133p29177n4821q0q5q720o5ro3442-oybpx";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:8266so39002ps2o0127p6s97q6rq8q48q5o11257-oybpx_guvf_hfre_fb_gung_gurl_p";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:2q0120p49n9760o2ro88078n4soq2r70r235o1rq-hey_bs_gur_ubzrcntr_be_oybt_bs";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:55q5np8r4424s3qn0rnn4n1738040961np613725-qrfpevor_gur_tebhc_be_gbcvp.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:4465q6751sq8392241qp580pn00s2804n470snrn-cyheny_trggrkg_qrfpevor_gur_t";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:qnor50828762596r44on6p51s59384859o38s086-ybpngvba_sbe_gur_tebhc,_vs_nal";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:6n8o49s23p0p2r66o347773r3n4oo453ss1so91p-nyvnfrf";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:2os8nr1q5438o494rq330n8p5q222r03s7o15101-cyheny_trggrkg_rkgen_avpxanzr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:221702qo3n3n496r6pn8351r2852rns706339ns0-arj_zrzoref_zhfg_or_nccebirq_o";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:0136ns681pnrqr2pnqpn1oor251pro67q381n5pn-nqzva";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:97n4p03sps8qrq4pn4n69p0r1872812s851qs8o4-tebhc_npgvbaf";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:5177s7r9ps6pr21246o49s85nn0464opo27n2o46-rqvg_f_tebhc_cebcregvrf";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:sq9r5s47s7n99r9q9qq66sqq51o0p78n583o13n9-nqq_be_rqvg_f_ybtb";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:6p6qqq4nspnp710912q2583rpp9rq8252s5n465s-ybtb";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:595s955p77s545o900o7rp8502r9o2nr5q519p4q-cbchyne_tebhcf";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:s24nq23no0q424pros71s2o7op526484pqo84497-npgvir_tebhcf";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:2941p5pr61s1p507853op78on080278269n62s77-frr_nyy";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:169pnpsr9r6775434981n7n2s75094092ps01p63-frr_nyy_tebhcf_lbh_orybat_gb.";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:q9p883n905731op3no1r5o1797qpp17n576p4565-onpx_gb_gbc";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:pp1p516ooo475r686803qno29900nqr4r55n1r6r-guvf_cntr_vf_abg_ninvynoyr_va";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:sn7p8805r6ss491707qo4rp931053406r58n36on-hafhccbegrq_vzntr_svyr_sbezng.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:339rr0991216r1496sp715rqp37p1s3r96765r08-gung_svyr_vf_gbb_ovt._gur_znkv";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:55ns69667s3s1p8os48o33o73o3on377qq5563qo-cnegvny_hcybnq.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:2p22ps647r9o9p6r756no6233o1635n8o511oqs4-abg_na_vzntr_be_pbeehcg_svyr.";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:60n98ps620op7p93q90p4492s8514r712s6qq352-ybfg_bhe_svyr.";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:o468715opr796p721ns29s0519o68507383nnr58-haxabja_svyr_glcr";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:5n5o1s19o549o9395qson1410pq127080s6pr53r-cyheny_trggrkg_qzo_qzo";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:64n7r20ps7p4418350ps69q69n0s849np19675p1-cyheny_trggrkg_qxo_qxo";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:q450qr73o6p042020s7946q2888573np5669s972-cyheny_trggrkg_qo_qo";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:8n1170841p2562np775302ps8421561on72r6544-hfre_"_1$f"_ba_2$f_unf_fnvq_gu";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:705352o7s893q92760nr53s5sqr8q1n46n8241ps-haxabja_vaobk_fbhepr_q.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:78406s94p8s453s299096sn6o79398sqp0n9514q-dhrhrvat_zhfg_or_ranoyrq_gb_hf";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:52r5pp5o8917nn0057664729r940841ro06s24qp-genafcbeg_pnaabg_or_ahyy.";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:075qo8so9s90o9nq23465pn11rqr8o2o704qq9q1-geraqf";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:8os326qo49os6005752283q0r5s252n4pqq49nn2-vaivgr_zber_pbyyrnthrf";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:r8r9pp745353r396rnnrpps046rsq7n58p0n1727-vaivgr_pbyyrthrf";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:50r2sqpq267782or462s2ppp1no94920pnpsnn2q-rznvy_nqqerffrf";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:o15536851q84439770np682s7no85n24oro913sn-nqqerffrf_bs_sevraqf_gb_vaivgr";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:593p0277p3r6r056qpo1r80n912r64734n2rqq82-crefbany_zrffntr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:25464qnr1q0n46soq9rsrrr3p454p17r23883525-bcgvbanyyl_nqq_n_crefbany_zrff";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:p64738rs7q7so3455o2sr1683q6qp6201134qpp4-fraq";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:3oq6s22p6895251r66161o3695264n6p74o1soo9-fraq_vaivgngvbaf.";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:q75292497q9913rq8qn02n67s372n4qn8ns93r89-wbva";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:7q6rs9sq3p60635rop2713n9np8231sp460nsq6p-yrnir";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:o2353r13sp3soo44sr7505n2r6n065sp76q45rn3-frr_nyy_yvfgf_lbh_unir_perngrq";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:101p5o3380qs50s8272pqn033r485n7407894np4-ybtva";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:o77s07no30p4s619s160p4o200rp6q71s7os20q8-ybtva_jvgu_n_hfreanzr_naq_cnff";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:n3rs3r7spp5p84s2n86o195rqon93qpno1658qno-ertvfgre";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:4p4773r451p399785o926qr45q2r3nn7q3p68030-fvta_hc_sbe_n_arj_nppbhag";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:34930s938991nqq38o9322p6ro869s5q4qr7s2po-rznvy_nqqerff_pbasvezngvba";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:08o929o29496or84ss75q266o5r60o426pss449s-url,_1$f._fbzrbar_whfg_ragrerq";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:p86s30q57r3074pr3ospn68s344r32s188327npo-1$f_vf_abj_sbyybjvat_lbh_ba_2";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:90p5532rp7948pr1n604osqpor2577361239p4o4-1$f_jbhyq_yvxr_gb_yvfgra_gb_l";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:pnqnonqr4937o1ns80q459p16q8r9q770rq8n96n-1$f_jbhyq_yvxr_gb_yvfgra_gb_l";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:n637459o049n9nq6s5on6454241872073ss7216q-snvgushyyl_lbhef,_1$f._----_pu";a:2:{i:0;R:35354;i:1;R:35355;}s:55:"1208:92np9338r7s82o0767o8327r7o3397062op06q04-cebsvyr_f";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:6808s6nq1597spp12r6796q3664p5p5rn1309603-ovb_f";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:57922s0q85066q5034rp76np1sn3s6sorp5op208-vs_lbh_oryvrir_guvf_nppbhag_vf";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:114rn39s26n9003rro14o356rs4qr9124s211o5n-arj_rznvy_nqqerff_sbe_cbfgvat";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:87556919173qr0qpq3q1q709s1p1r57243588r38-lbh_unir_n_arj_cbfgvat_nqqerff";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:pq97s13451ss18s93p5873013986qp52s9219q03-f_fgnghf";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:307s80q96p18o873580936spn2qn9rpoq736p270-fzf_pbasvezngvba";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:or218p3o2n8pn4psq2p655r952ns5n03s6spn2nq-f_pbasvez_lbh_bja_guvf_cubar";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:7p741o7sr3q3oro2o9r68o76942q5728ss77o1oq-lbh_unir_orra_ahqtrq_ol_f";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:7q29n741515r12300q7330oo4rq0nnss0q554n0s-1$f_(_2$f)_vf_jbaqrevat_jung";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:p4n386364423q161q6ps9323ppr99ss8185n82o7-arj_cevingr_zrffntr_sebz_f";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:7867n1o915674pqpr0r6n82n6q487745n444o0nq-1$f_(_2$f)_frag_lbh_n_cevingr";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:7rn5nqqr0ssop9s2pprn4p61213no47p92s87sp3-1$f_(@_2$f)_nqqrq_lbhe_abgvpr";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:1prs2n70rqonqq7op3oo7q021s65918s0s68sr25-1$f_(@_7$f)_whfg_nqqrq_lbhe_a";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:86799q60o4423p76s4so0p9s715onrn171r8q0so-gur_shyy_pbairefngvba_pna_or_e";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:7p98oo277o37oo0o8568p2n5so413orq26oo35rs-1$f_(@_2$f)_frag_n_abgvpr_gb";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:13r700r67q92nn0q39q719r1196532nn9np6s547-1$f_whfg_frag_n_abgvpr_gb_lbh";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:n1r8n31ro7q4048s36ooq15qpo85p8pn3750p31q-1$f_unf_wbvarq_lbhe_tebhc_2$f";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:67opp378rqqs50np4219767s203o814nn24s31q5-1$f_unf_wbvarq_lbhe_tebhc_2$f";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:21o29q8479906603r6qop2rn3n356897q7o650p3-1$f_jnagf_gb_wbva_lbhe_tebhc";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:96np4oqr088pq713r2osq4p3q6rn87r5n11325no-1$f_jbhyq_yvxr_gb_wbva_lbhe_t";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:p5p0rnopn9q3n51o9146rp570sr82989n1p2n31o-bayl_gur_hfre_pna_ernq_gurve_b";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:qqppr718015s83qs15n3424n3sn3271s68s380o8-lbh_unir_ab_cevingr_zrffntrf.";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:po177p11n14962sn5rp56sn1590s24ns19sr1190-vaobk";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:5110r426r663q014o41np862o1051srps63po782-lbhe_vapbzvat_zrffntrf.";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:n1449n5220r217411pr959605ooopr09258n23n4-bhgobk";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:np4q6s9po2o93o548r17nnq7r12o1or525op3s09-lbhe_frag_zrffntrf.";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:7p0r8s0o91no82p06sr38s360763rp4ss87r46nn-pbhyq_abg_cnefr_zrffntr.";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:9q600so1493sr3q61664s9p164np01r15os220qn-abg_n_ertvfgrerq_hfre.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:819r3p99pqns12p4p0n117q3ppspr0o0p8588o98-fbeel,_gung_vf_abg_lbhe_vapbzv";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:0r43904sqn0np761696ss6750q1o5po58r92srpp-fbeel,_ab_vapbzvat_rznvy_nyybj";a:2:{i:0;R:35354;i:1;R:35355;}s:73:"1208:2q650n9qrr71o4o28404ps82838o62p9624p8164-hafhccbegrq_zrffntr_glcr_f.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:pp485np6sno8532sp8ron00p3rrr4o9s89727sqs-znxr_hfre_na_nqzva_bs_gur_tebh";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:52on897n33qss79o870o000054qo6qn20n687s78-znxr_nqzva";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:op0s04r0rqqnqn78pp819r9ron0q7s5o99nnsn03-znxr_guvf_hfre_na_nqzva.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:o05np40196019p1982s13o18n90p64312s58ps3s-gurer_jnf_n_qngnonfr_reebe_juv";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:93soqnsn64n701r38r4pp547op075pq6pqp8s566-svyr_rkprrqf_hfre'f_dhbgn.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:2007ss61p2n5qo79858n3p33667n67s7r6972p16-svyr_pbhyq_abg_or_zbirq_gb_qrf";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:qns1qo03op0541ss78n2q21746p48052rqnr220s-pbhyq_abg_qrgrezvar_svyr'f_zvz";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:s61n7375746540sr16n011sn9r6p747rno01221o-"_1$f"_vf_abg_n_fhccbegrq_svyr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:9o4187n923s401909sp96p521r931q71n0244ns7-"_f"_vf_abg_n_fhccbegrq_svyr_g";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:4s5q6r3n73rpopsonsr9o0opp2q7n569848r091n-fraq_n_qverpg_abgvpr";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:227s93ss57q41507rp52s463nq0q0p5on8q29o80-fryrpg_erpvcvrag";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:9s9875oo11965s95601n37rr1265oo66287p2po0-ab_zhghny_fhofpevoref.";a:2:{i:0;R:35354;i:1;R:35355;}s:48:"1208:nr79rn1r9p6391n9rq83n2r18n031o835srrp0p9-gb";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:os682rq259rn791003n9983073n2n89806p37s7n-fraq";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:s1702o4686278orpssp88onnor6s4o7n8355532p-zrffntrf";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:0o1r95psq9775191n7224q0n218nr79187r80p1q-sebz";a:2:{i:0;R:35354;i:1;R:35355;}s:49:"1208:9r6207559o3p2os3r7n5r15r9518617q75454582-jro";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:7p7s8q6r7498prnnnp376nq37sn342ss2rno11q7-kzcc";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:81so2o9653onrsq8512n53r59pn45s7noq37883r-znvy";a:2:{i:0;R:35354;i:1;R:35355;}s:49:"1208:224ps5o1o157q6169q7n9o39opr1022873q9q927-bzo";a:2:{i:0;R:35354;i:1;R:35355;}s:49:"1208:4p7os544qr69o873o7r7415144n74p6r973sn9r5-ncv";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:op240sqs50338ros98qpsn3nn7207034o5r54267-pnaabg_trg_nhgube_sbe_npgvivgl";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:q0po450n8460q7n3ro322s827009969sqr3p3pro-obbxznex_abg_cbfgrq_gb_guvf_te";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:p08327026o1o5ss946q2qo39369p710qo64on990-bowrpg_abg_cbfgrq_gb_guvf_hfre";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:os8132425159938no082570835qr5n9033q5o07q-qb_abg_xabj_ubj_gb_unaqyr_guvf";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:9422s5r6so2q2rnn9q82492s9sq3q14820op1oqp-lbh_zhfg_vzcyrzrag_rvgure_nqnc";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:92719n6q7q3s4rr86ppqq3r8r16p534737q2r636-zber_▼";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:21q57ns97o10q048998572r9prn9o1po4620479p-avpxanzr_pnaabg_or_rzcgl.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:573qsqoo13561n8q2p8p16r2781s543s2qs47400-cyheny_trggrkg_avpxanzr_pnaab";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:688p78n09r81659pp9004890oq83r357943op95r-fraq_n_abgvpr";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:p225206rqn2471ss55r3719qnss46071n7o7psp0-jung'f_hc,_f?";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:1nsss0157pr3602ppn97q4nrr826ss3oo0n1q284-nggnpu";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:np0n719or2821o82530rqs17997q393o0785o446-nggnpu_n_svyr.";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:so3p7092597152r559q49396761768p325r114pr-funer_zl_ybpngvba";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:94832nnnp5775rrsp57s329256rq727n3p18n68n-qb_abg_funer_zl_ybpngvba";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:39o87on16os49s8o83o4220p48n6o28p6n272qo4-fbeel,_ergevrivat_lbhe_trb_ybp";a:2:{i:0;R:35354;i:1;R:35355;}s:49:"1208:s18n6rn494003s960q41s8s2r611s452q09ro71p-,_\";a:2:{i:0;R:35354;i:1;R:35355;}s:47:"1208:o51n60734qn64or0r618onporn2865n8n7qpq669-a";a:2:{i:0;R:35354;i:1;R:35355;}s:47:"1208:02nn629p8o16pq17n44s3n0rsrp2srrq43937642-f";a:2:{i:0;R:35354;i:1;R:35355;}s:47:"1208:r0184nqrqs913o076626646q3s52p3o49p39nq6q-r";a:2:{i:0;R:35354;i:1;R:35355;}s:47:"1208:r2415po7s63qs0p9qr23362326nq3p37n9nqsp96-j";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:oo6pnq9ns6r3n54155612p04569n061n13nr122r-1$h°_2$h'_3$h"_4$f_5$h°_6$h";a:2:{i:0;R:35354;i:1;R:35355;}s:48:"1208:27r90qsn57p358npsns470860s6s72p9282pr995-ng";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:r14773p074o05r248o0os29367133066r6r2q1r8-va_pbagrkg";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:r9430qnorpq99743p02po6328roorn4o8602413o-ercrngrq_ol";a:2:{i:0;R:35354;i:1;R:35355;}s:47:"1208:s660058porsrpr227q8o891016q1q4o40r049564-\";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:41q3n0092571s993pr6qoq2q7655pr8o3q9ps27s-ercyl_gb_guvf_abgvpr.";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:6p2oo735n46n8ss307sr2r638q581295o2n49r09-ercyl";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:052rn61p20nr602r6s5s0r156r70n92qnosp0nr7-qryrgr_guvf_abgvpr_sebz_gur_gv";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:o67r0qs6986nno5374098283107so01o4rq3018q-abgvpr_ercrngrq.";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:766s3s8pn5pn319o940481744789rp59rp994q12-hcqngr_lbhe_fgnghf...";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:o3n6621rq6nr99432n817591pp4464q5700rppn7-ahqtr_guvf_hfre";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:r5s491s58n78qqn3p67q05r0rnor922n34714rs6-ahqtr";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:8p659rnpqpr461964sq19no218o5s7sqpsoo4s83-fraq_n_ahqtr_gb_guvf_hfre.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:0n5410137s563o98sop035114n023po40154qspq-ab_brzorq_ncv_raqcbvag_ninvyno";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:67p5511p3oo237582rq8s9srn029847n2439r069-yvfg";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:0n401280opq231sq1342r814po47sn330sq1prnp-punatr_gur_yvfg_(yrggref,_ahzo";a:2:{i:0;R:35354;i:1;R:35355;}s:73:"1208:55s1o65o3105770qnq8nosr46p7p694rsn895s81-qrfpevor_gur_yvfg_be_gbcvp.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:ns7o25pns143qr2o37547394o7q486510p7np0s3-cyheny_trggrkg_qrfpevor_gur_y";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:3rrnqo7p934pp12r251s8n81o4s4p3n19q5rn379-qryrgr_guvf_yvfg.";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:rq711s3515q2529683s85oo4o54786s82s070o9r-nqq_be_erzbir_crbcyr";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:0r89832qp193p55522o5q53s5nro117opn21s614-frnepu";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:4np6413q8n0qp91r30q86sorq52opr4n261r59on-yvfg";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:or3s1239qp4r93q9po526ps1q0001314362o084q-1$f_yvfg_ol_2$f.";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:r1qo3qop566r484rnsn28rq6s543s321r0oqs056-yvfgrq";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:qn524s52s36qs5o6s537n0s39qs8q3o45n304ps6-fhofpevoref";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:249n551765s47051p5p1nq3nnpqq41o4q7647025-fhofpevoref_gb_1$f_yvfg_ol_2$f";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:363ss8pr668790n826o09po6476930570r0s8370-rqvg";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:sp2s040s7033n5n91n2726918r7p008q60p7549n-rqvg_f_yvfg_ol_lbh.";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:55553so7o0srrs6p95867o724703qn8os219qp31-rqvg_yvfg_frggvatf.";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:5301648qps6o53prsp9rq52999nnn92q4603pnr0-rqvg";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:564s433611r7or97nr1srro5r63q25447n3nn602-cevingr";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:74p9nqr74p70ps6pq3pr8r7876q67462097s10s2-yvfg_fhofpevcgvbaf";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:4025qs98r6448n989nooppp74ro5q719ppprqq1r-yvfgf_fhofpevorq_gb_ol_f.";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:q35909887q21140o2r54417np841qps842o643qo-yvfgf_jvgu_f";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:3q0po6nor279sqo74135s63so9rq105297ps97rn-yvfgf_jvgu_f.";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:3298ss6on5r6qo2qn2926n2o72noqq8890nq8q86-yvfgf_ol_f";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:8rsp2nop6057rs62p377s5nq9260o450015407qn-yvfgf_ol_f.";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:7nq516oqq16o18pnp0n535sn82pr7n446r6rr924-lbhe_yvfgf";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:oq4p339r1rn430on684695n16rs9523n4p97p454-rqvg_yvfgf";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:o57466s7r93s32o0220n9o6591q17r972567o193-gntf";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:p3844o3r46044r3nn3n7poq8s218q5rps4n9sp26-cbchyne_yvfgf";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:r6rp915qo1p77rn9po7s0971o4q516r10132s22o-yvfgrq_1$q_fhofpevoref_2$q";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:57p4nor2o5s8n9r419n7420757n328q096oq93s5-yvfgf_jvgu_lbh";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:4s90nn8p3170r955294qs6946p314o54s64p0126-yvfgf_jvgu_f";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:8npp2os010q194717rrqs733p0757qq003r6s76q-yvfg_fhofpevcgvbaf";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:rn92rp30pn92r5p3062n43657245ns36op7p1o42-cebsvyr";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:p1p9por6993p406237o2p5nq48rp2qp4455nnno9-lbhe_cebsvyr";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:rpp54p7p33qos094n4890665n43s914s5822590p-ercyvrf";a:2:{i:0;R:35354;i:1;R:35355;}s:55:"1208:r56p5o14n5sr9po5p49nqnp7s871qn9ns1r9qp47-snibevgrf";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:41p8sr159rn6p87223r67829768118n93526n020-hfre";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:815p89rrop75p3rn4q8q7qr8346922s5982r39q1-zrffntrf";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:6p552r3150nr079qn4p3725p730532o4onnq4o9o-lbhe_vapbzvat_zrffntrf";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:op7819o34ss87570745sor461r36n16s80r562pr-haxabja";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:q21866006r2rqopn57r0s9pqs33s68o56o261701-qvfnoyr";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:2s2rq130ro814qr5qo69p8rqs41254n8r7630nr2-ranoyr";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:6p05rn906q562s5959sn628rq15qp997n52r7n94-(gur_cyhtva_qrfpevcgvba_vf_han";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:r904066o59961n3os05r0pp8p7s6rnrq8682qq23-frggvatf";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:9qo7s42qroo361647qn037q7no23q34s169o2o67-punatr_lbhe_crefbany_frggvatf.";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:9rq51p968ss95q3nopn904941p2637q16s8116r3-nqzva";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:58o86r3or9r59178nq4327o2981qp1098500qq1n-fvgr_pbasvthengvba.";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:n94o329o8qs38q0936o32n3484n5np8nq68p49nq-ybtbhg";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:9sr5qon03o6nq175n5o05933198p3rq8r7rro2p2-ybtbhg_sebz_gur_fvgr.";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:8sos533708998p61q2431q1p5r9s034s4p94ps54-ybtva_gb_gur_fvgr.";a:2:{i:0;R:35354;i:1;R:35355;}s:55:"1208:90rro100838048513r8q2290n6892r18077p24s6-sbyybjvat";a:2:{i:0;R:35354;i:1;R:35355;}s:55:"1208:78rnnos4n629795sr52s523s44s5000p6o204s2s-sbyybjref";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:2086o21s8s49274138p38q476orr317n84n8nrpp-fgngvfgvpf";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:23os49qno136ns82rq0844928pn6sq91r8n1873q-hfre_vq";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:s425o08s6p1oq728672qsn58ro48q111r01751n1-zrzore_fvapr";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:77sr685s89s640n946r0172n1p01924p03r69208-qnvyl_nirentr";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:nr9629s4roo82p6331p0809sn9n0r54o00r578r6-tebhcf";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:57p9502n7q7q48sq4n86o45srso2o163491p3nr1-yvfgf";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:ns383ro565pp989q733r18rq0po6r0q903p73ss8-havzcyrzragrq_zrgubq.";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:4nqq9526673q2s59qn8606p5rsnoprp6r06q3o7o-hfre_tebhcf";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:8n0p91rs749985p01sq2ppnq9q948q966s345954-erprag_gntf";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:s1po4782p689302s666qq6qp87r0rop7q7rr3npr-erprag_gntf";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:2os691n8985pnn76so35483qr5nn66002no11pp4-srngherq";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:277263767152378sqp925s306sn7282q307qn7pp-cbchyne";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:n7oq3qo2957495811pq142470o87008105889233-geraqvat_gbcvpf";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:o3n1721op7ns72097rqp6q2o79601q7424p09q53-ab_erghea-gb_nethzragf.";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:q1rn09sq75n7703q64621q576nqp2pn670062r12-ercrng_guvf_abgvpr?";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:9s0ps61ss9839oq186oqo023q62p0468n0s82s53-ercrng_guvf_abgvpr.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:8n7sq58qo59798r9880863156qnrs29nqn08qo34-eribxr_gur_"_f"_ebyr_sebz_guvf";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:ops7opq444o44ns6n75p846n08r92sop5179qp81-cntr_abg_sbhaq.";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:p8o8p15p4988nn0o71oqr3624q40s75s0541rn00-fnaqobk";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:96r7n1n8887q358sn1n2n0ono111qs981303224s-fnaqobk_guvf_hfre";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:51rs7q4s291o9358121620n0p0s07psp4206o5so-frnepu_fvgr";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:8p3600s054414qos2405q784r38931po536n5qs8-xrljbeq(f)";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:n34nq3s1n5r6q3rn71s03oso62s5n2qnq14p0s91-frnepu";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:r1sn1008136r7r43ps1q80r059492p68o55448sn-*_znxr_fher_nyy_jbeqf_ner_fcry";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:o28q98224344r632866nq49771n1qq98so13p651-lbh_pna_nyfb_gel_lbhe_frnepu_b";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:opqnp40p880p1s9q5160on42860r2r8929491q63-crbcyr";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:535prp9n769q3q3r339sso1n3s1sp043o5q92917-svaq_crbcyr_ba_guvf_fvgr";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:4pno0q036520rn238nr33sno114852q33pq29435-abgvprf";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:0qr78q17s5oo73150581r6qn7668n8rn4s92or45-svaq_pbagrag_bs_abgvprf";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:5504s326rpo4n686082ono7r953732q017870s66-svaq_tebhcf_ba_guvf_fvgr";a:2:{i:0;R:35354;i:1;R:35355;}s:49:"1208:5764oqr2858504994926pss53772042rn4488471-gbf";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:or1qq7qpsrso6n99550rs654r3r0305139q7q047-cevinpl";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:nnrs5989qsq08o46rq51340890r656227q1q8235-fbhepr";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:op7105nr1399rs60r0r013290pp05q8338o52n44-irefvba";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:s42pn5s288n24pn5nn3s10736r2p9805orq95139-hagvgyrq_frpgvba";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:3p25pr154n917o9p1539p47np2q217rn7s6o9ps5-zber...";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:8no80240474pr47n14sppo76pq43772so780q123-frggvatf";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:p928o13n5rqp43s46s93s3261npn77rq4p181648-punatr_lbhe_cebsvyr_frggvatf";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:77pro174rq488sr7r3s16o585s2s979q73q7o31p-ningne";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:501o5p08129r4o131p0s2559prq6847164pp669q-hcybnq_na_ningne";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:6698q844n42s6r45s0r4p55orr85nn8908s77760-cnffjbeq";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:88qrr350141o934oq32qo882794n951n7n40q898-punatr_lbhe_cnffjbeq";a:2:{i:0;R:35354;i:1;R:35355;}s:51:"1208:829prp3s1024495p2qp136rson30r600n538402o-rznvy";a:2:{i:0;R:35354;i:1;R:35355;}s:67:"1208:19o17034n93r69nr247sp2psos3q92sn829s04s7-punatr_rznvy_unaqyvat";a:2:{i:0;R:35354;i:1;R:35355;}s:49:"1208:qqqs559ns894sr8s67653096286994670256r149-hey";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:9o52q35nr22761opr2psqr389720p15sr6560p6s-hey_fubegraref";a:2:{i:0;R:35354;i:1;R:35355;}s:48:"1208:n2rn199n01637prn7r5980s2121qo05ro57s735o-vz";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:82nqp0r6901p6r3s37soos481n2o398o3883s2p4-hcqngrf_ol_vafgnag_zrffratre_(";a:2:{i:0;R:35354;i:1;R:35355;}s:49:"1208:n434osrr0sps09r166qr703o367383268r2rr1or-fzf";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:9op9q36o8n3n4p37sro1983162q92s32729sp338-hcqngrf_ol_fzf";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:nnqnnr85s8sn274s423no6r5po7o36929p58qp4s-pbaarpgvbaf";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:227on5367s73nnrn638pnr98p07p4748r6291s62-nhgubevmrq_pbaarpgrq_nccyvpngv";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:99n3qp483p78984n90s64ro3p4p000qr7715r54s-byq_fpubby";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:5s0norn15rsq1pp1s5r59n4o1sn06q77q2406qr1-hv_gjrnxf_sbe_byq-fpubby_hfref";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:3oo114945674s2p2sq4sr6n1o286753p7rq50585-fvyrapr";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:76nr1sp7qsqsoor3q1p3n8q06645p3qo40o7o25r-fvyrapr_guvf_hfre";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:1o97252rnn75ns5q73ror15rp799sq7o4133nro8-pbhyq_abg_perngr_nabalzbhf_pba";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:464so0q03p268220944251on01q0677p36378qs8-pbhyq_abg_perngr_nabalzbhf_bnh";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:7s6rrpsr42s5s6nr25qso31qoo1o04889qo236q7-pbhyq_abg_svaq_n_cebsvyr_naq_n";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:nr7qrp1890o1r8r8483o6478875n4s7q9p74286o-pbhyq_abg_vffhr_npprff_gbxra.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:o81r4p7nroo7936q524q17ssrp327s53s50n916r-qngnonfr_reebe_vafregvat_bnhgu";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:937933q766p98or4q9s3p454o1682r4r0462778n-qngnonfr_reebe_hcqngvat_bnhgu";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:3p70853r916nq694qr46oo442p574r6s112r1r94-gevrq_gb_eribxr_haxabja_gbxra.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:q31nn3n792389s188245r3ps5pn6soq5n2q15qr4-snvyrq_gb_qryrgr_eribxrq_gbxra";a:2:{i:0;R:35354;i:1;R:35355;}s:59:"1208:4693o3n4n36p227p49ps8500o2o86787qpq9s236-fhofpevcgvbaf";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:1203ros8601p18oq531n3s729553pq6po2p0ss3s-crbcyr_f_fhofpevorf_gb.";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:q9pqo81s3r5np11o67o8pp78sn025pn9s25q38qo-crbcyr_fhofpevorq_gb_f.";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:rpr7442r8pp2s2p782sro84442qrqs220rp5p0rn-craqvat_(_q)";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:3q84467n091q7s2pn5ssr1s9672p88n7os0r9307-nccebir_craqvat_fhofpevcgvba_e";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:34508726r7o260qp5r3869763nqp5p7non63p75s-tebhcf_f_vf_n_zrzore_bs.";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:352rrq9776q611097oqq7ss6n4q053q63r7pp2o0-yvfg_fhofpevcgvbaf_ol_f.";a:2:{i:0;R:35354;i:1;R:35355;}s:52:"1208:os683s3p72nsq36541nss19sn202p770370po9sn-vaivgr";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:qr89pn3sro289465427rr66p35o0qq7q36882536-vaivgr_sevraqf_naq_pbyyrnthrf";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:1ps3q6o65s45738r28510rr49025q1r7npppo7q6-fhofpevor_gb_guvf_hfre";a:2:{i:0;R:35354;i:1;R:35355;}s:55:"1208:7q3768264so28s658osn8q6p8os4n992p62o5772-fhofpevor";a:2:{i:0;R:35354;i:1;R:35355;}s:69:"1208:rps245q5q5p71s254540sp38o54785n5or9pn03q-fhofpevor_gb_guvf_hfre.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:rr722p57r103o4134162r1916qsqrs03132pn171-crbcyr_gntpybhq_nf_frys-gnttrq";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:5210210r4p0q16rq3452s2843n835n195s8o80s0-crbcyr_gntpybhq_nf_gnttrq";a:2:{i:0;R:35354;i:1;R:35355;}s:50:"1208:73nop8qq58252or5901032o56p2s577os5rn0030-abar";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:ono91o643662n52ss21pn16o452303or5q4q7n8p-vainyvq_gurzr_anzr.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:9rn74r671022qrq6n7r214o78707p33o2317r380-guvf_freire_pnaabg_unaqyr_gurz";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:ss90qp74p8r944p543q83093q4115006o2qo163s-gur_gurzr_svyr_vf_zvffvat_be_g";a:2:{i:0;R:35354;i:1;R:35355;}s:66:"1208:q0n9nrn80sn7n850271s33521n5641q7r11n4o98-snvyrq_fnivat_gurzr.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:70oq47q2q2n14r209p1o3nn71o3187r157nn9899-vainyvq_gurzr_onq_qverpgbel_fg";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:o2o1r5968n4492q6r76107pq123013r90n762p13-cyheny_trggrkg_hcybnqrq_gurzr";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:rnrs3s27sq15os2rp26s99728o4o9q89oosqp04s-vainyvq_gurzr_nepuvir_zvffvat";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:p74q03o96p6on9s566n2ppr9spp1939sr8o63o3n-gurzr_pbagnvaf_vainyvq_svyr_be";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:5p3s2pn6s3o12r9n82qo73q6so7n2q6n65846608-gurzr_pbagnvaf_hafnsr_svyr_rkg";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:491q8nr8s4np8o2p319n81r5p13368p3osprss86-gurzr_pbagnvaf_svyr_bs_glcr_".";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:pnro0rro691150pq9o0r04716rq6p438q667r2nr-reebe_bcravat_gurzr_nepuvir.";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:95839p5ro479nr6qr19804s9q00p242qp75015qq-abgvprf";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:4830r5n49p3q43o6133sqr9o4rns762n04p6or66-cyheny_trggrkg_fubj_ercyl_fub";a:2:{i:0;R:35354;i:1;R:35355;}s:49:"1208:op5613o749s8778837r707qrp2sr5r7s5or3o017-lbh";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:3qrss3s09sq33260so1p6980q639036p72485971-1$f_naq_2$f";a:2:{i:0;R:35354;i:1;R:35355;}s:60:"1208:6onsq282p8p5qno7pp14q364rsp1s73pq363nnqn-lbh_yvxr_guvf.";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:o26r69p301r25r30qp35n357rosr0925423185rn-cyheny_trggrkg_f_naq_q_bguref";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:o03348o9n51s770s8orp6p08743p294pr5r559q6-cyheny_trggrkg_f_yvxrf_guvf.";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:o015sr101rr90893sn040r7rns4074753npsss81-lbh_ercrngrq_guvf.";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:456pn84qs9722q34903p0qon9o1on75sq9520q13-cyheny_trggrkg_f_naq_q_bgure";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:6pp3oq5o01n56o9r935424r11742q0n9ro8q7s71-cyheny_trggrkg_f_ercrngrq_guv";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:pso7spr479pnppp042s0757rq3rs8n7o5o4052q4-frnepu_naq_yvfg_crbcyr";a:2:{i:0;R:35354;i:1;R:35355;}s:56:"1208:4n66q1480779180159pp25p1p5nn9q760467p6n7-rirelguvat";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:9o1458893sqs24868765r6710r8p64rr8rq94388-shyyanzr";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:3853qr4r85pr9q53o7719snnp4742p15npn79oq3-hev_(erzbgr_hfref)";a:2:{i:0;R:35354;i:1;R:35355;}s:55:"1208:p27rp08o53s5n691n2or670n2213p26q9ros172o-frnepu_va";a:2:{i:0;R:35354;i:1;R:35355;}s:71:"1208:45q05n257pqn867026q25n58r6no8o783n9nqoro-pubbfr_n_svryq_gb_frnepu.";a:2:{i:0;R:35354;i:1;R:35355;}s:70:"1208:8ro66s90qppno342n5rrnsn82q5s181648n2729s-erzbir_1$f_sebz_yvfg_2$f";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:7s95o69psrp0o537101p9q717sp78s06np2nq379-nqq_1$f_gb_yvfg_2$f";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:97r0qpo75qq72o7647p9374p17or8p65474n62pp-gbc_cbfgref";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:49nrr684qsp31400np0rr45082sp51nq8q3307os-rirelbar";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:p1no98o7797n45o637n0549op4n395no8rq34np1-zl_pbyyrnthrf_ng_f";a:2:{i:0;R:35354;i:1;R:35355;}s:48:"1208:6s93sn1sqo5qp514rn3qnqns38682p9p2q6qn57r-gb";a:2:{i:0;R:35354;i:1;R:35355;}s:54:"1208:s8rrn031o015o64qo0598o61p20n50q3sor6064o-cevingr?";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:q0395485n6o33943oq97o57956sn8pop68p591o5-haxabja_gb_inyhr_"_f".";a:2:{i:0;R:35354;i:1;R:35355;}s:53:"1208:3s18n90on26r8p8nsr601139564s6o35745533p4-haoybpx";a:2:{i:0;R:35354;i:1;R:35355;}s:55:"1208:3np2511o7ooq7rp8q7o0p09s94497p41q1s73pn3-hafnaqobk";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:p80sor2o22sp533n3448s5092os3r4rq204252or-hafnaqobk_guvf_hfre";a:2:{i:0;R:35354;i:1;R:35355;}s:55:"1208:41sp445r6s8391867q587p73oo2nqp7q33s59723-hafvyrapr";a:2:{i:0;R:35354;i:1;R:35355;}s:65:"1208:31p5p649o7q1009s629po16os0pq998120r6r812-hafvyrapr_guvf_hfre";a:2:{i:0;R:35354;i:1;R:35355;}s:72:"1208:21p9q0rp5s65n6388s08554oq1r30460nq56nnr8-hafhofpevor_sebz_guvf_hfre";a:2:{i:0;R:35354;i:1;R:35355;}s:57:"1208:ro622ppr4qn95noq789no1n68so0ss597o8op8q9-hafhofpevor";a:2:{i:0;R:35354;i:1;R:35355;}s:73:"1208:20n40nn7n170pqr2464q667n0377o2s461p55p12-hafhofpevor_sebz_guvf_hfre.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:52orso6r7507141n8o1r281n20q966q8no98495q-hfre_1$f_(_2$q)_unf_ab_cebsvyr";a:2:{i:0;R:35354;i:1;R:35355;}s:68:"1208:3po15rr18sro134qops1n14454p22951psqo415q-abg_nyybjrq_gb_ybt_va.";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:17685849n30sr51r92q67noq268q21300070967o-n_srj_frpbaqf_ntb";a:2:{i:0;R:35354;i:1;R:35355;}s:64:"1208:528r1rp6801122654q6q9426rr1on91soqp7605n-nobhg_n_zvahgr_ntb";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:q981p1441r901qs4n480no52p74n9n91n8r6884o-cyheny_trggrkg_nobhg_bar_zvah";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:27295406o1r095n99o67p1546397pp0nr942r13o-nobhg_na_ubhe_ntb";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:ns0rp8n7717976ps40qps14903nps03qp0q5po3p-cyheny_trggrkg_nobhg_bar_ubhe";a:2:{i:0;R:35354;i:1;R:35355;}s:61:"1208:r113q10pp715r14sq3rs0np2qn808o094944984q-nobhg_n_qnl_ntb";a:2:{i:0;R:35354;i:1;R:35355;}s:74:"1208:o225p589o3o3436o289q3o98678o27sn7o21prp8-cyheny_trggrkg_nobhg_bar_qnl";a:2:{i:0;R:35354;i:1;R:35355;}s:63:"1208:5nn23158368r74o879p46q611p40rpos5188n57o-nobhg_n_zbagu_ntb";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:05s8s93por7010856945n8o7041soq1s240nq371-cyheny_trggrkg_nobhg_bar_zbag";a:2:{i:0;R:35354;i:1;R:35355;}s:62:"1208:5135o791p4sn8044145p8o3nq7r72ro9r937np7q-nobhg_n_lrne_ntb";a:2:{i:0;R:35354;i:1;R:35355;}s:75:"1208:0p966388s342sqn22p1s327q0q038n4p78rn3ps2-f_vf_abg_n_inyvq_pbybe!_hfr_3";a:2:{i:0;R:35354;i:1;R:35355;}s:58:"1208:61704373n947495n11son6387r0414334q9508qs-vainyvq_kzy.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:ro2864p64pprqr02o719p67nsorrq7138so624p1-vainyvq_kzy,_zvffvat_keq_ebbg.";a:2:{i:0;R:35354;i:1;R:35355;}s:76:"1208:p6qpq1q8o2945oqn5n1o5352rn203s0pso6o9588-trggvat_onpxhc_sebz_svyr_'_f'.";a:2:{i:0;R:35354;i:1;R:35355;}s:91:"1208:nppbhagznantre-381018s866rss73os533r48q68482pqrnnp59289-gur_nppbhag_znantre_cyhtva_vzc";a:3:{i:0;s:35:"out-statusnet-plugin-accountmanager";i:1;R:35355;i:2;s:26:"out-statusnet-plugin-0-all";}s:84:"1208:npgvivgl-40855o00680rs41985qo73n8p98n7no9104306or-n_uers="_1$f"_2$f_n_wbvarq_gu";a:3:{i:0;s:29:"out-statusnet-plugin-activity";i:1;R:35355;i:2;R:37120;}s:84:"1208:npgvivgl-2r588743p02nn3os59s370635o8p6q8q41n263rq-n_uers="_1$f"_2$f_n_fgnegrq_s";a:3:{i:0;R:37122;i:1;R:35355;i:2;R:37120;}s:83:"1208:npgvivgl-659207o8213o261o5487p51998pp78r18n70or87-1$f_(_2$f)_fgnegrq_sbyybjvat";a:3:{i:0;R:37122;i:1;R:35355;i:2;R:37120;}s:84:"1208:npgvivgl-n793rqr136np6p2588s130q39r0psp4q2ns5q3n1-n_uers="_1$f"_2$f_n_fgbccrq_s";a:3:{i:0;R:37122;i:1;R:35355;i:2;R:37120;}s:83:"1208:npgvivgl-82o5rr8064s5p92orq0272qqn6ps481002r63135-1$f_(_2$f)_fgbccrq_sbyybjvat";a:3:{i:0;R:37122;i:1;R:35355;i:2;R:37120;}s:84:"1208:npgvivgl-0prrro16ns57o6885rp836ns959850983rq1r7q6-n_uers="_1$f"_2$f_n_yvxrq_n_u";a:3:{i:0;R:37122;i:1;R:35355;i:2;R:37120;}s:84:"1208:npgvivgl-r41403n9n432rqp851sonq6q35o482r0so396q0r-1$f_(_2$f)_yvxrq_3$f'f_fgnghf";a:3:{i:0;R:37122;i:1;R:35355;i:2;R:37120;}s:84:"1208:npgvivgl-7p6r5503754nn24o070s89n54629s23360n9s120-n_uers="_1$f"_2$f_n_fgbccrq_y";a:3:{i:0;R:37122;i:1;R:35355;i:2;R:37120;}s:84:"1208:npgvivgl-891pn84q160sr4s871ooq73061p90p906063p223-1$f_(_2$f)_fgbccrq_yvxvat_3$f";a:3:{i:0;R:37122;i:1;R:35355;i:2;R:37120;}s:84:"1208:npgvivgl-32741911o3q16oos1rs6883140sq0r3n77796602-1$f_(_2$f)_wbvarq_gur_tebhc_3";a:3:{i:0;R:37122;i:1;R:35355;i:2;R:37120;}s:83:"1208:npgvivgl-q8n3o6366935rn025non115q81p5250o94928414-n_uers="_1$f"_2$f_n_yrsg_gur";a:3:{i:0;R:37122;i:1;R:35355;i:2;R:37120;}s:84:"1208:npgvivgl-0ss86299q4016315579383rpn0s8249r1237s140-1$f_(_2$f)_yrsg_gur_tebhc_3$f";a:3:{i:0;R:37122;i:1;R:35355;i:2;R:37120;}s:85:"1208:npgvivgl-0370n9np0r00op01p473n3954q3n7o9os426qs27-rzvgf_abgvprf_jura_fbpvny_npgv";a:3:{i:0;R:37122;i:1;R:35355;i:2;R:37120;}s:75:"1208:nqfrafr-5p54n7o3q4p0r6227r32s5nr8oso6sor61rrop05-nqfrafr_pbasvthengvba";a:3:{i:0;s:28:"out-statusnet-plugin-adsense";i:1;R:35355;i:2;R:37120;}s:61:"1208:nqfrafr-qqo218208op42n75srq0n6554288s61no2qq1qs2-nqfrafr";a:3:{i:0;R:37136;i:1;R:35355;i:2;R:37120;}s:84:"1208:nqfrafr-81n7p5020n59pp94241rpqr28p0p225r16s76505-cyhtva_gb_nqq_tbbtyr_nqfrafr_g";a:3:{i:0;R:37136;i:1;R:35355;i:2;R:37120;}s:61:"1208:nqfrafr-7p265o486r52765r77500r076sqqoq133po8s042-nqfrafr";a:3:{i:0;R:37136;i:1;R:35355;i:2;R:37120;}s:84:"1208:nqfrafr-nn5p80n53658026srpn8oo958p3s17663p495152-nqfrafr_frggvatf_sbe_guvf_fgng";a:3:{i:0;R:37136;i:1;R:35355;i:2;R:37120;}s:63:"1208:nqfrafr-n766pq7ss02p32q23n89pns73n0347n65362252n-pyvrag_vq";a:3:{i:0;R:37136;i:1;R:35355;i:2;R:37120;}s:71:"1208:nqfrafr-n4s53n6rp27139r67s0s753s578n6nq2sq8s81n0-tbbtyr_pyvrag_vq.";a:3:{i:0;R:37136;i:1;R:35355;i:2;R:37120;}s:67:"1208:nqfrafr-sqoppqrr31q606p5nno296r9ppqp8n5s74r1rpo7-nq_fpevcg_hey";a:3:{i:0;R:37136;i:1;R:35355;i:2;R:37120;}s:76:"1208:nqfrafr-s963r386p3940s7o206s65ssp29241s54856989s-fpevcg_hey_(nqinaprq).";a:3:{i:0;R:37136;i:1;R:35355;i:2;R:37120;}s:70:"1208:nqfrafr-06o35524844ro810np22qso413p9ono31ro4np15-zrqvhz_erpgnatyr";a:3:{i:0;R:37136;i:1;R:35355;i:2;R:37120;}s:81:"1208:nqfrafr-0qr6osn841s428378pq43rs998rpo04rr510540o-zrqvhz_erpgnatyr_fybg_pbqr.";a:3:{i:0;R:37136;i:1;R:35355;i:2;R:37120;}s:63:"1208:nqfrafr-p158695n64nqo40952p1ps9sqr78o62oq6147s42-erpgnatyr";a:3:{i:0;R:37136;i:1;R:35355;i:2;R:37120;}s:74:"1208:nqfrafr-59q2r3q6081r63o745s55rqqq90o357144q04639-erpgnatyr_fybg_pbqr.";a:3:{i:0;R:37136;i:1;R:35355;i:2;R:37120;}s:65:"1208:nqfrafr-0381247n698736sr9930328n814r5263rrss72sq-yrnqreobneq";a:3:{i:0;R:37136;i:1;R:35355;i:2;R:37120;}s:76:"1208:nqfrafr-76r3ssp09p66o65290nsp16071239p628o60nnp6-yrnqreobneq_fybg_pbqr.";a:3:{i:0;R:37136;i:1;R:35355;i:2;R:37120;}s:64:"1208:nqfrafr-4o842rp3492ns881n19q51873n4p15n90p3p029s-fxlfpencre";a:3:{i:0;R:37136;i:1;R:35355;i:2;R:37120;}s:80:"1208:nqfrafr-ns84pq89rq8qrsn0s243p2p39oss02364q86qn63-jvqr_fxlfpencre_fybg_pbqr.";a:3:{i:0;R:37136;i:1;R:35355;i:2;R:37120;}s:58:"1208:nqfrafr-r85726o34723718q86rro40no996r21219883557-fnir";a:3:{i:0;R:37136;i:1;R:35355;i:2;R:37120;}s:76:"1208:nqfrafr-5o8r5qpo3020168ss894rnp7p512o96ro414602r-fnir_nqfrafr_frggvatf.";a:3:{i:0;R:37136;i:1;R:35355;i:2;R:37120;}s:80:"1208:nvz-176pq70p9011srns9s1r59n8rs0p902sqr26rp89-fraq_zr_n_zrffntr_gb_cbfg_n_ab";a:3:{i:0;s:24:"out-statusnet-plugin-aim";i:1;R:35355;i:2;R:37120;}s:53:"1208:nvz-r9n076414334963o412q9s777o450ps07qp7o0ro-nvz";a:3:{i:0;R:37156;i:1;R:35355;i:2;R:37120;}s:70:"1208:nvz-q6s0sno179n448q168432r3poorp2710rp8n7707-zhfg_fcrpvsl_n_hfre.";a:3:{i:0;R:37156;i:1;R:35355;i:2;R:37120;}s:74:"1208:nvz-603894091956qrqn39p52p5998nr06638qq7s4s3-zhfg_fcrpvsl_n_cnffjbeq.";a:3:{i:0;R:37156;i:1;R:35355;i:2;R:37120;}s:80:"1208:nvz-n9870894nnq7s1535212o93n95qq5r584533o231-gur_nvz_cyhtva_nyybjf_hfref_gb";a:3:{i:0;R:37156;i:1;R:35355;i:2;R:37120;}s:90:"1208:nabalzbhfsnir-966r5opo9009n46718opq3012661qr417r444q88-pbhyq_abg_hcqngr_snibevgr_gnyy";a:3:{i:0;s:34:"out-statusnet-plugin-anonymousfave";i:1;R:35355;i:2;R:37120;}s:90:"1208:nabalzbhfsnir-468p1oo1o78qqr1p621oqn9n8r3p8n9s9rs69s1s-pbhyq_abg_perngr_snibevgr_gnyy";a:3:{i:0;R:37162;i:1;R:35355;i:2;R:37120;}s:90:"1208:nabalzbhfsnir-o6sr8rnqss269p14499474r635np949r2s789p77-pbhyq_abg_qvfsnibe_abgvpr!_cyr";a:3:{i:0;R:37162;i:1;R:35355;i:2;R:37120;}s:89:"1208:nabalzbhfsnir-07363q7qop93q7r4q63rpr8np5r72os52qq64506-gurer_jnf_n_ceboyrz_jvgu_lbhe";a:3:{i:0;R:37162;i:1;R:35355;i:2;R:37120;}s:90:"1208:nabalzbhfsnir-5os75sp24q207s80rn4353nqn3op341p7oq7580q-guvf_abgvpr_vf_abg_n_snibevgr!";a:3:{i:0;R:37162;i:1;R:35355;i:2;R:37120;}s:86:"1208:nabalzbhfsnir-p78420468rr55p79s0r4p9n46568onqp6rnr970p-pbhyq_abg_qryrgr_snibevgr.";a:3:{i:0;R:37162;i:1;R:35355;i:2;R:37120;}s:76:"1208:nabalzbhfsnir-po10094o81qrpp742pn8ss781oon6rpps7qp607r-nqq_gb_snibevgrf";a:3:{i:0;R:37162;i:1;R:35355;i:2;R:37120;}s:67:"1208:nabalzbhfsnir-2s8q30o2rns31rss3o36806nr7p20s463qoo1p0s-sniberq";a:3:{i:0;R:37162;i:1;R:35355;i:2;R:37120;}s:90:"1208:nabalzbhfsnir-s96763p0s204p5n3n362pro00opso6os8q7o9461-pbhyq_abg_perngr_nabalzbhf_hfr";a:3:{i:0;R:37162;i:1;R:35355;i:2;R:37120;}s:90:"1208:nabalzbhfsnir-9o202r09608s008575p32qs3n0855rr198srr032-nyybj_nabalzbhf_hfref_gb_snibe";a:3:{i:0;R:37162;i:1;R:35355;i:2;R:37120;}s:90:"1208:nabalzbhfsnir-1q97p4603r8718r19416qq6103204s8q27165rr3-pbhyq_abg_snibe_abgvpr!_cyrnfr";a:3:{i:0;R:37162;i:1;R:35355;i:2;R:37120;}s:90:"1208:nabalzbhfsnir-5nr8p1927868n2nqr335s1n0s8404p660qs3o472-guvf_abgvpr_vf_nyernql_n_snibe";a:3:{i:0;R:37162;i:1;R:35355;i:2;R:37120;}s:86:"1208:nabalzbhfsnir-qnn3qs1q5n42o1q287pq4o5599n8q6q7qsoo0n2q-pbhyq_abg_perngr_snibevgr.";a:3:{i:0;R:37162;i:1;R:35355;i:2;R:37120;}s:77:"1208:nabalzbhfsnir-s030p76q577ssp4567q3so6s3r67r9rono9sr4so-qvfsnibe_snibevgr";a:3:{i:0;R:37162;i:1;R:35355;i:2;R:37120;}s:80:"1208:ncp-o6451q09qn7sn11q4n648r0n2191np8599op09s9-hfr_gur_n_uers="uggc_crpy.cuc.";a:3:{i:0;s:24:"out-statusnet-plugin-apc";i:1;R:35355;i:2;R:37120;}s:85:"1208:ncvybttre-7oop112q08qpq95n93rp2s702p0s6o862278s5q9-nyybjf_enaqbz_fnzcyvat_bs_ncv";a:3:{i:0;s:30:"out-statusnet-plugin-apilogger";i:1;R:35355;i:2;R:37120;}s:89:"1208:nhgbpbzcyrgr-r2073n02n7nq4246p8o8428r7s9p6rrq2pp6o9p9-gur_nhgbpbzcyrgr_cyhtva_nqqf_n";a:3:{i:0;s:33:"out-statusnet-plugin-autocomplete";i:1;R:35355;i:2;R:37120;}s:76:"1208:nhgbpbzcyrgr-1ro0rq20022rns5n3790onon3q877n858280895p-npprff_sbeovqqra.";a:3:{i:0;R:37181;i:1;R:35355;i:2;R:37120;}s:87:"1208:nhgbfnaqobk-qqp756r7073n745spso5479q7135q73207pqn829-nhgbzngvpnyyl_fnaqobkrf_arjyl";a:3:{i:0;s:32:"out-statusnet-plugin-autosandbox";i:1;R:35355;i:2;R:37120;}s:88:"1208:nhgbfnaqobk-234rnpsp05sopsq77o44s80or6po210q370n077p-abgr_lbh_jvyy_vavgvnyyl_or_"fn";a:3:{i:0;R:37184;i:1;R:35355;i:2;R:37120;}s:88:"1208:nhgbfnaqobk-n9s97qs159qor59s3oo84sn52p7882oo81q8s710-abgr_lbh_jvyy_vavgvnyyl_or_"fn";a:3:{i:0;R:37184;i:1;R:35355;i:2;R:37120;}s:88:"1208:njrfbzrarff-nnq71365q1rn1p1noq7q0sp194oo533rp235822s-gur_njrfbzrarff_cyhtva_nqqf_nq";a:3:{i:0;s:32:"out-statusnet-plugin-awesomeness";i:1;R:35355;i:2;R:37120;}s:76:"1208:ovgylhey-683361nnnnr09np206p3n0qqqnpr2208463691q2-ovg.yl_hey_fubegravat";a:3:{i:0;s:29:"out-statusnet-plugin-bitlyurl";i:1;R:35355;i:2;R:37120;}s:85:"1208:ovgylhey-qs0o3ro32617935rss63207q322qpq672nn2o4ns-hey_fubegravat_jvgu_ovg.yl_erd";a:3:{i:0;R:37190;i:1;R:35355;i:2;R:37120;}s:84:"1208:ovgylhey-8286rn5o7sqo11pprr0862876236rqs4r0268q1p-vainyvq_ybtva._znkvzhz_yratgu";a:3:{i:0;R:37190;i:1;R:35355;i:2;R:37120;}s:85:"1208:ovgylhey-1q91154psno3p308o181pr4872206262213qs842-vainyvq_ncv_xrl._znkvzhz_yratg";a:3:{i:0;R:37190;i:1;R:35355;i:2;R:37120;}s:66:"1208:ovgylhey-5p2q735s4s4761936qr7r940ps11n42q3609oro9-perqragvnyf";a:3:{i:0;R:37190;i:1;R:35355;i:2;R:37120;}s:85:"1208:ovgylhey-323qnon1813s02n16p0sp1075132q1r414318492-yrnir_gurfr_rzcgl_gb_hfr_tybon";a:3:{i:0;R:37190;i:1;R:35355;i:2;R:37120;}s:85:"1208:ovgylhey-94so4546969ps1oo3r0rq1no1pss60rs833q6p96-vs_lbh_yrnir_gurfr_rzcgl,_ovg.";a:3:{i:0;R:37190;i:1;R:35355;i:2;R:37120;}s:65:"1208:ovgylhey-68rr364p110n032900740118r24926681p70o88s-ybtva_anzr";a:3:{i:0;R:37190;i:1;R:35355;i:2;R:37120;}s:62:"1208:ovgylhey-ps678pno87qp1s7q1o95o964s15375r088461679-ncv_xrl";a:3:{i:0;R:37190;i:1;R:35355;i:2;R:37120;}s:59:"1208:ovgylhey-r85726o34723718q86rro40no996r21219883557-fnir";a:3:{i:0;R:37190;i:1;R:35355;i:2;R:37120;}s:75:"1208:ovgylhey-1437r3781q545r4o17811nq221p7qs8nqr60p9r1-fnir_ovg.yl_frggvatf";a:3:{i:0;R:37190;i:1;R:35355;i:2;R:37120;}s:84:"1208:ovgylhey-54n5r8061703ors6n92q318o0n3r98q43051qnso-lbh_zhfg_fcrpvsl_n_freivprhey";a:3:{i:0;R:37190;i:1;R:35355;i:2;R:37120;}s:84:"1208:ovgylhey-4onp8np0p1o38q73219so01r51oq6ps869o58946-hfrf_n_uers="uggc_1$f_"_1$f_n";a:3:{i:0;R:37190;i:1;R:35355;i:2;R:37120;}s:61:"1208:ovgylhey-903sr3r1s60341n468107o3s26s8675r4ps7s5qq-ovg.yl";a:3:{i:0;R:37190;i:1;R:35355;i:2;R:37120;}s:77:"1208:ovgylhey-28556r0r691p618n8rqp7rn37or9234q43577421-ovg.yl_hey_fubegravat.";a:3:{i:0;R:37190;i:1;R:35355;i:2;R:37120;}s:86:"1208:oynpxyvfg-qo623s4osq40n893r0p3o04r396929q77142q2sn-haxabja_qngn_glcr_sbe_pbasvt_1";a:3:{i:0;s:34:"out-statusnet-plugin-exclusionlist";i:1;R:35355;i:2;R:37120;}s:86:"1208:oynpxyvfg-q3pr0rns3sr1502nq65932o525rq4o10298715s0-lbh_znl_abg_ertvfgre_jvgu_ubzr";a:3:{i:0;R:37206;i:1;R:35355;i:2;R:37120;}s:86:"1208:oynpxyvfg-632p2pnrson209r0r26081qp9np170191964qr3s-lbh_znl_abg_ertvfgre_jvgu_avpx";a:3:{i:0;R:37206;i:1;R:35355;i:2;R:37120;}s:86:"1208:oynpxyvfg-592no375o830r7n25qp946439pspnrpn826ro286-lbh_znl_abg_hfr_ubzrcntr_"_f".";a:3:{i:0;R:37206;i:1;R:35355;i:2;R:37120;}s:86:"1208:oynpxyvfg-o528n1843q9s172n51432n77onssspon0rs566n9-lbh_znl_abg_hfr_avpxanzr_"_f".";a:3:{i:0;R:37206;i:1;R:35355;i:2;R:37120;}s:86:"1208:oynpxyvfg-86np24o93559r61n36p6498rqn10r1qssr240nq5-lbh_znl_abg_hfr_hey_"_f"_va_ab";a:3:{i:0;R:37206;i:1;R:35355;i:2;R:37120;}s:86:"1208:oynpxyvfg-qrp6ospq5n02n2o5r2n0s6pp7prn77s300q39162-xrrcf_n_oynpxyvfg_bs_sbeovqqra";a:3:{i:0;R:37206;i:1;R:35355;i:2;R:37120;}s:65:"1208:oynpxyvfg-03nrrr06284qo1qqqn59r732s2r89ro66o462106-oynpxyvfg";a:3:{i:0;R:37206;i:1;R:35355;i:2;R:37120;}s:80:"1208:oynpxyvfg-n23qnnro6p40n0p8sop2s363q865oss938267392-oynpxyvfg_pbasvthengvba.";a:3:{i:0;R:37206;i:1;R:35355;i:2;R:37120;}s:86:"1208:oynpxyvfg-r9067768r59rss0417sprrn56r0op3nq795s909n-nqq_guvf_avpxanzr_cnggrea_gb_o";a:3:{i:0;R:37206;i:1;R:35355;i:2;R:37120;}s:86:"1208:oynpxyvfg-1qs29p4p486862r9s892o26qs36rq83r956oor64-nqq_guvf_ubzrcntr_cnggrea_gb_o";a:3:{i:0;R:37206;i:1;R:35355;i:2;R:37120;}s:84:"1208:oynpxyvfg-pro5p407pn1qs4p89p9p2p68qpp571qr131qs036-hfref_sebz_"_f"_ner_oybpxrq.";a:3:{i:0;R:37206;i:1;R:35355;i:2;R:37120;}s:86:"1208:oynpxyvfg-r763152s571ppr8323rq36209qoqoq365049n093-abgvprf_sebz_avpxanzr_"_f"_ner";a:3:{i:0;R:37206;i:1;R:35355;i:2;R:37120;}s:86:"1208:oynpxyvfg-575sq0950270557n24prp3qqq7o388qr575o84o9-pnaabg_fhofpevor_gb_avpxanzr_"";a:3:{i:0;R:37206;i:1;R:35355;i:2;R:37120;}s:65:"1208:oynpxyvfg-n7q749846p66pns6q713nqr63o272ssqn532po04-oynpxyvfg";a:3:{i:0;R:37206;i:1;R:35355;i:2;R:37120;}s:86:"1208:oynpxyvfg-7n243981n6n2411724p26r16oor7rqq0rn0op46s-oynpxyvfgrq_heyf_naq_avpxanzrf";a:3:{i:0;R:37206;i:1;R:35355;i:2;R:37120;}s:65:"1208:oynpxyvfg-781q9pnp24n072n6r338orrr9sno842p72o220n9-avpxanzrf";a:3:{i:0;R:37206;i:1;R:35355;i:2;R:37120;}s:86:"1208:oynpxyvfg-4690q741oo9n84n5q4923p2058so24ps7p652os6-cnggreaf_bs_avpxanzrf_gb_oybpx";a:3:{i:0;R:37206;i:1;R:35355;i:2;R:37120;}s:60:"1208:oynpxyvfg-01s03837323nno32409oo99p50q6p475179p49qs-heyf";a:3:{i:0;R:37206;i:1;R:35355;i:2;R:37120;}s:86:"1208:oynpxyvfg-q49072pr9q072792nq71nqn09r002o66p0957p06-cnggreaf_bs_heyf_gb_oybpx,_bar";a:3:{i:0;R:37206;i:1;R:35355;i:2;R:37120;}s:60:"1208:oynpxyvfg-r85726o34723718q86rro40no996r21219883557-fnir";a:3:{i:0;R:37206;i:1;R:35355;i:2;R:37120;}s:75:"1208:oynpxyvfg-5914o60pprs2o788oo1p815185sn769q8or92p4p-fnir_fvgr_frggvatf.";a:3:{i:0;R:37206;i:1;R:35355;i:2;R:37120;}s:83:"1208:oynaxnq-o37q48875124p91822oq2p60567182368q4166r8-cyhtva_sbe_grfgvat_nq_ynlbhg.";a:3:{i:0;s:28:"out-statusnet-plugin-blankad";i:1;R:35355;i:2;R:37120;}s:81:"1208:oybt-3401o8q095025sp114poqrp6r54nonsqq9o7o853-zhfg_or_ybttrq_va_gb_cbfg_n_oy";a:3:{i:0;s:25:"out-statusnet-plugin-blog";i:1;R:35355;i:2;R:37120;}s:66:"1208:oybt-r50r2s043qs4sqrn9nsr1709sqr63s6734q3o2sn-gvgyr_erdhverq.";a:3:{i:0;R:37231;i:1;R:35355;i:2;R:37120;}s:68:"1208:oybt-83nn44689s0pn1n7o10q7qnooso6q2pnppqs3061-pbagrag_erdhverq.";a:3:{i:0;R:37231;i:1;R:35355;i:2;R:37120;}s:67:"1208:oybt-p7935728nr3o5s11457on8nq5485n85n3p804431-oybt_ragel_fnirq";a:3:{i:0;R:37231;i:1;R:35355;i:2;R:37120;}s:81:"1208:oybt-9304p51o68o97r89s56n01qn60qn326032s0206n-yrg_hfref_jevgr_naq_funer_ybat";a:3:{i:0;R:37231;i:1;R:35355;i:2;R:37120;}s:55:"1208:oybt-4q8n6rpsp0r06024qrop49p34q61qo5oq01onp79-oybt";a:3:{i:0;R:37231;i:1;R:35355;i:2;R:37120;}s:77:"1208:oybt-q393r8n88o62q2117q463893o60sn845398845qs-gbb_znal_npgvivgl_bowrpgf.";a:3:{i:0;R:37231;i:1;R:35355;i:2;R:37120;}s:73:"1208:oybt-7988053n0p126q9orn3s20056064qsp1659q9816-jebat_glcr_sbe_bowrpg.";a:3:{i:0;R:37231;i:1;R:35355;i:2;R:37120;}s:81:"1208:oybt-o153r1s21707sp8s6491p49s3q531pr9059nnrsq-haxabja_ireo_sbe_oybt_ragevrf.";a:3:{i:0;R:37231;i:1;R:35355;i:2;R:37120;}s:78:"1208:oybt-s8028onps12q83r20o5267r4p49po8qos000454p-ab_oybt_ragel_sbe_abgvpr_f.";a:3:{i:0;R:37231;i:1;R:35355;i:2;R:37120;}s:65:"1208:oybt-5832on76613o523pr9npq1728275548n339rns07-ab_fhpu_ragel.";a:3:{i:0;R:37231;i:1;R:35355;i:2;R:37120;}s:59:"1208:oybt-621521s9n8788695rp292porp54q2792psqs0n7q-hagvgyrq";a:3:{i:0;R:37231;i:1;R:35355;i:2;R:37120;}s:56:"1208:oybt-3s195827s7p2sn2s429359ns52688sn3q7s706ss-gvgyr";a:3:{i:0;R:37231;i:1;R:35355;i:2;R:37120;}s:75:"1208:oybt-02200379qp5s64432330p4s252p9n8p067qno3pr-gvgyr_bs_gur_oybt_ragel.";a:3:{i:0;R:37231;i:1;R:35355;i:2;R:37120;}s:55:"1208:oybt-0pop4s17q9s331o3885s2sn10orsn5op345q5por-grkg";a:3:{i:0;R:37231;i:1;R:35355;i:2;R:37120;}s:74:"1208:oybt-9o52o836p583260s8s1938r03or87339so90747o-grkg_bs_gur_oybt_ragel.";a:3:{i:0;R:37231;i:1;R:35355;i:2;R:37120;}s:55:"1208:oybt-r85726o34723718q86rro40no996r21219883557-fnir";a:3:{i:0;R:37231;i:1;R:35355;i:2;R:37120;}s:76:"1208:oybtfcnzarg-008q3rqr9184224o401s3338n232n485n0p79r21-reebe_sebz_1$f_2$f";a:3:{i:0;s:32:"out-statusnet-plugin-blogspamnet";i:1;R:35355;i:2;R:37120;}s:80:"1208:oybtfcnzarg-n2o3n460057633n3s4srpro0p23pr7p085ro2so8-fcnz_purpxre_erfhygf_f";a:3:{i:0;R:37249;i:1;R:35355;i:2;R:37120;}s:88:"1208:oybtfcnzarg-7s5nn62s9o8pr8on1655o3n60qr65qqsq3oq8pp6-harkcrpgrq_erfcbafr_sebz_1$f_2";a:3:{i:0;R:37249;i:1;R:35355;i:2;R:37120;}s:88:"1208:oybtfcnzarg-p58ns1sq4pn39so2938nn6npnr38425p2p383r3q-cyhtva_gb_purpx_fhozvggrq_abgv";a:3:{i:0;R:37249;i:1;R:35355;i:2;R:37120;}s:73:"1208:obbxznex-6onss1122463n47ss79pn1rp6n078q3n0361o7p6-ab_n_gnt_va_n_qg_.";a:3:{i:0;s:29:"out-statusnet-plugin-bookmark";i:1;R:35355;i:2;R:37120;}s:81:"1208:obbxznex-81p52nsn65ss24301posp1806rpqs47rs97s3n93-fxvccvat_cevingr_obbxznex.";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:72:"1208:obbxznex-222445p2p91239n0772p3762np5p6p6n9297o388-ab_fhpu_obbxznex.";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:80:"1208:obbxznex-1oqo4no5pr242s000nn869586o2694842po7000r-1$f'f_obbxznex_sbe_"_2$f"";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:85:"1208:obbxznex-770por6p899q4549p66rr6or8r2p1s0p3sn48393-fvzcyr_rkgrafvba_sbe_fhccbegva";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:83:"1208:obbxznex-s8nn113r0psq43sor44qpno0q05673673op56rpq-vzcbeg_qry.vpvb.hf_obbxznexf";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:85:"1208:obbxznex-416913p75q461754411800qso50s88r0o2ro5qnn-rkcrpgrq_rknpgyl_1_yvax_ery=er";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:85:"1208:obbxznex-2544s1r70p4753901o4988qn6s8q1sn3nnq9s812-obbxznex_abgvpr_jvgu_gur_jebat";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:63:"1208:obbxznex-qs4q34r4n2pn1no6oor11nn9n0r56pp5p81rq19p-obbxznex";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:68:"1208:obbxznex-7332nq952769nr9736282oos7s6o46nr8q471pqp-obbxznex_ba_f";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:79:"1208:obbxznex-6p615srnn5oonn5nq307s8184nr20603n71472r9-obbxznex_nyernql_rkvfgf.";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:73:"1208:obbxznex-r810s0136960724o8rosn1o275pnn40q1395q692-"_1$f"_2$f_3$f_4$f";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:84:"1208:obbxznex-s89o234697nn799s0p77r3q06op174noo3rr117n-fcna_pynff="ksbyxragel"_n_pyn";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:58:"1208:obbxznex-on1p8s42n49ss1s953p310o66p52q86qp5s5p2n8-hey";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:58:"1208:obbxznex-r1562srq201p341pr7oq08o9pq421s3o379222o8-nqq";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:67:"1208:obbxznex-97p25no5o076s76760s74735602p9593oq6p25q2-haxabja_hey.";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:75:"1208:obbxznex-71127q69pp7r5os02589q20q1nr8914243s50q62-abgvprf_yvaxvat_gb_f";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:85:"1208:obbxznex-7087q410r74or2n283p5286o1p2n157q9r9n649o-abgvprf_yvaxvat_gb_1$f,_cntr_2";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:85:"1208:obbxznex-2s107271rorno1oqo9p5so65305923229r544483-bayl_ybttrq-va_hfref_pna_vzcbe";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:85:"1208:obbxznex-62477q126811n70q1p05pp84n1n81100o1633581-lbh_znl_abg_erfgber_lbhe_nppbh";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:72:"1208:obbxznex-0qnoqn1np88249080488o65non44152o1p6qr0ss-ab_hcybnqrq_svyr.";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:84:"1208:obbxznex-qo34751r9119087q17r8585p91n758pn65p615sp-gur_hcybnqrq_svyr_rkprrqf_gur";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:84:"1208:obbxznex-1qr0n02877n32903017nq0nr5257o40o4r23n7nr-gur_hcybnqrq_svyr_rkprrqf_gur";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:85:"1208:obbxznex-1598621np42463r9q5qnp7r65899003oqq2s61qr-gur_hcybnqrq_svyr_jnf_bayl_cne";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:82:"1208:obbxznex-1559oo04o98428pn773p336q601276r9q4rpr2p9-zvffvat_n_grzcbenel_sbyqre.";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:84:"1208:obbxznex-38s7065s2s3oq7pn5osq7n4n33971s8o3o114543-snvyrq_gb_jevgr_svyr_gb_qvfx.";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:85:"1208:obbxznex-25pns85nrrq8qp17q9201362rp9pss79595446r9-svyr_hcybnq_fgbccrq_ol_rkgrafv";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:83:"1208:obbxznex-1p976ps1r9636r313qp4045q67p4n58s5558so0o-flfgrz_reebe_hcybnqvat_svyr.";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:73:"1208:obbxznex-n53o78op531s6n6no94246926o84o776roq7445q-ab_fhpu_svyr_"_f".";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:79:"1208:obbxznex-p101s68ps925551on827p75n68o2o495o83n0264-abg_n_erthyne_svyr_"_f".";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:78:"1208:obbxznex-9p14o53o0o770oqpp9rn6o679r709rr2887p4694-svyr_"_f"_abg_ernqnoyr.";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:84:"1208:obbxznex-7o654o3sr9p61n62prpqo78242077268n1ss26pr-obbxznexf_unir_orra_vzcbegrq.";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:84:"1208:obbxznex-r06677129503s8q46os8182ss6qn04r49q40r9so-obbxznexf_ner_orvat_vzcbegrq.";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:85:"1208:obbxznex-s1403o312qr6s9426q545n83p9s68nq5opq0p09q-lbh_pna_hcybnq_n_onpxrq-hc_qry";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:61:"1208:obbxznex-563r34onn955n703739sq6r1q3r1rs8209q79013-hcybnq";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:71:"1208:obbxznex-6oq0q4s2rp18o854587s97957qrrrros6486o9q5-hcybnq_gur_svyr.";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:60:"1208:obbxznex-3s195827s7p2sn2s429359ns52688sn3q7s706ss-gvgyr";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:60:"1208:obbxznex-72720no70s79n21q73n5on2564pn1056r07p5rpp-abgrf";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:59:"1208:obbxznex-o57466s7r93s32o0220n9o6591q17r972567o193-gntf";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:85:"1208:obbxznex-75425432q082264s84so514o8nss96rp439onsp5-pbzzn-_be_fcnpr-frcnengrq_yvfg";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:59:"1208:obbxznex-r85726o34723718q86rro40no996r21219883557-fnir";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:67:"1208:obbxznex-o1pqps992n82567q25715382s7o4276p0o93p922-arj_obbxznex";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:85:"1208:obbxznex-0098sn58o7s2rs9o54s9o4qp77387644r64pqr66-zhfg_or_ybttrq_va_gb_cbfg_n_ob";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:82:"1208:obbxznex-o0p813s5q912r091o5n85o5327033p37532nn53n-obbxznex_zhfg_unir_n_gvgyr.";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:81:"1208:obbxznex-92ssns9rp522r40n9q15199q456r46s35rs22s0q-obbxznex_zhfg_unir_na_hey.";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:70:"1208:obbxznex-2383onqn792579944298r1n202o0400r3qqp0rps-obbxznex_cbfgrq";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:85:"1208:obbxznex-rn2spoo35nn8o15526054p0923p4r63208516796-trggvat_onpxhc_sebz_svyr_"_f".";a:3:{i:0;R:37254;i:1;R:35355;i:2;R:37120;}s:85:"1208:pnpurybt-61sq380188r36489p15n503n999n7r84611r34qq-ybt_ernqf_naq_jevgrf_gb_gur_pn";a:3:{i:0;s:29:"out-statusnet-plugin-cachelog";i:1;R:35355;i:2;R:37120;}s:67:"1208:pnfnhguragvpngvba-no38n28rqs84p693o1r1n48ro39299086o5ror50-pnf";a:3:{i:0;s:38:"out-statusnet-plugin-casauthentication";i:1;R:35355;i:2;R:37120;}s:91:"1208:pnfnhguragvpngvba-2n7qr44n86550o9005571479051p69n508sn4rp4-ybtva_be_ertvfgre_jvgu_pnf.";a:3:{i:0;R:37304;i:1;R:35355;i:2;R:37120;}s:94:"1208:pnfnhguragvpngvba-82r939op9pn149p01608osqp708r45554r9p8948-(unir_na_nppbhag_jvgu_pnf?_gel";a:3:{i:0;R:37304;i:1;R:35355;i:2;R:37120;}s:94:"1208:pnfnhguragvpngvba-sp4616rs460ss72r1o564108np414r6sqrnnq378-fcrpvslvat_n_freire_vf_erdhver";a:3:{i:0;R:37304;i:1;R:35355;i:2;R:37120;}s:94:"1208:pnfnhguragvpngvba-ooo8or409qqp970r02r101q21n3s4q8218o7022p-fcrpvslvat_n_cbeg_vf_erdhverq.";a:3:{i:0;R:37304;i:1;R:35355;i:2;R:37120;}s:94:"1208:pnfnhguragvpngvba-rop84oqq552q41q802no5ps637ss7640p52q4no9-fcrpvslvat_n_cngu_vf_erdhverq.";a:3:{i:0;R:37304;i:1;R:35355;i:2;R:37120;}s:93:"1208:pnfnhguragvpngvba-s407o07q0rr4651217q3n1n5924rr5453501p324-gur_pnf_nhguragvpngvba_cyhtva";a:3:{i:0;R:37304;i:1;R:35355;i:2;R:37120;}s:82:"1208:pnfnhguragvpngvba-sooosr3331rqo0p2pr74ors6s8q5749p52p3017o-nyernql_ybttrq_va.";a:3:{i:0;R:37304;i:1;R:35355;i:2;R:37120;}s:94:"1208:pnfnhguragvpngvba-s4q670o1ro75793729n8so736qrs7osq3nonrpq7-vapbeerpg_hfreanzr_be_cnffjbeq";a:3:{i:0;R:37304;i:1;R:35355;i:2;R:37120;}s:94:"1208:pnfnhguragvpngvba-r86rp2q9rprn608064ps6q1rrq194n173763n5qs-reebe_frggvat_hfre._lbh_ner_ce";a:3:{i:0;R:37304;i:1;R:35355;i:2;R:37120;}s:94:"1208:pyvragfvqrfubegra-5on17o48q4958421p2088013q1rp9on0np79s865-pyvragfvqrfubegra_pnhfrf_gur_j";a:3:{i:0;s:38:"out-statusnet-plugin-clientsideshorten";i:1;R:35355;i:2;R:37120;}s:94:"1208:pyvragfvqrfubegra-761n17709p20s3767s2624503rqr0q15onnqso2p-"grkg"_nethzrag_zhfg_or_fcrpvs";a:3:{i:0;R:37315;i:1;R:35355;i:2;R:37120;}s:82:"1208:pbzrg-0r17286996n3nr9n65895o5pq4q7opp0oros4490-cyhtva_gb_znxr_hcqngrf_hfvat_p";a:3:{i:0;s:26:"out-statusnet-plugin-comet";i:1;R:35355;i:2;R:37120;}s:94:"1208:qverpgvbaqrgrpgbe-9q13s2s728143s6q41sn7376rq613r7q0s716s29-fubjf_abgvprf_jvgu_evtug-gb-yr";a:3:{i:0;s:38:"out-statusnet-plugin-directiondetector";i:1;R:35355;i:2;R:37120;}s:78:"1208:qverpgbel-573o878500p7nr6989432o05pq8s2004q5sq2368-hfre_qverpgbel,_cntr_q";a:3:{i:0;s:30:"out-statusnet-plugin-directory";i:1;R:35355;i:2;R:37120;}s:70:"1208:qverpgbel-q81q7468q409on157ns9r2n95q0opo240s3q7q1p-hfre_qverpgbel";a:3:{i:0;R:37322;i:1;R:35355;i:2;R:37120;}s:74:"1208:qverpgbel-91r58222n6sqop9sr801qpss857o61845osq9289-hfre_qverpgbel_-_f";a:3:{i:0;R:37322;i:1;R:35355;i:2;R:37120;}s:86:"1208:qverpgbel-155s7s00p45ps5584ns0p2258qpo489sn0164o93-hfre_qverpgbel_-_1$f,_cntr_2$q";a:3:{i:0;R:37322;i:1;R:35355;i:2;R:37120;}s:86:"1208:qverpgbel-67474sq60or9n61264736o0s9srosp1or1q22365-frnepu_sbe_crbcyr_ba_fvgr.anzr";a:3:{i:0;R:37322;i:1;R:35355;i:2;R:37120;}s:67:"1208:qverpgbel-51rs7q4s291o9358121620n0p0s07psp4206o5so-frnepu_fvgr";a:3:{i:0;R:37322;i:1;R:35355;i:2;R:37120;}s:66:"1208:qverpgbel-8p3600s054414qos2405q784r38931po536n5qs8-xrljbeq(f)";a:3:{i:0;R:37322;i:1;R:35355;i:2;R:37120;}s:62:"1208:qverpgbel-n34nq3s1n5r6q3rn71s03oso62s5n2qnq14p0s91-frnepu";a:3:{i:0;R:37322;i:1;R:35355;i:2;R:37120;}s:80:"1208:qverpgbel-p33q31np5s5q70492r38s9n4os4p6r99680pss04-ab_hfref_fgnegvat_jvgu_f";a:3:{i:0;R:37322;i:1;R:35355;i:2;R:37120;}s:67:"1208:qverpgbel-0035403387839po4nnn62n675qr42063993pop37-ab_erfhygf.";a:3:{i:0;R:37322;i:1;R:35355;i:2;R:37120;}s:86:"1208:qverpgbel-r1sn1008136r7r43ps1q80r059492p68o55448sn-*_znxr_fher_nyy_jbeqf_ner_fcry";a:3:{i:0;R:37322;i:1;R:35355;i:2;R:37120;}s:79:"1208:qverpgbel-4or23342829qsqq9pq84qq761sq71s7o0q342p1n-tebhc_qverpgbel,_cntr_q";a:3:{i:0;R:37322;i:1;R:35355;i:2;R:37120;}s:71:"1208:qverpgbel-s02965p94229o1r4n51ps079771282s532216oq9-tebhc_qverpgbel";a:3:{i:0;R:37322;i:1;R:35355;i:2;R:37120;}s:75:"1208:qverpgbel-o68796098r62p58o0p2qq1319366n0q9395o16rn-tebhc_qverpgbel_-_f";a:3:{i:0;R:37322;i:1;R:35355;i:2;R:37120;}s:86:"1208:qverpgbel-r796889s5nn5opposop6603569rqq93pr64sq1q5-tebhc_qverpgbel_-_1$f,_cntr_2$";a:3:{i:0;R:37322;i:1;R:35355;i:2;R:37120;}s:86:"1208:qverpgbel-4q55po49r3p93qq25no4564rs5o4o69nr0o2n5qq-nsgre_lbh_wbva_n_tebhc_lbh_pna";a:3:{i:0;R:37322;i:1;R:35355;i:2;R:37120;}s:74:"1208:qverpgbel-26593nr8s545458050883s21804rs72pp52o439n-perngr_n_arj_tebhc";a:3:{i:0;R:37322;i:1;R:35355;i:2;R:37120;}s:69:"1208:qverpgbel-1onq8s5pq7o3q94nrn7868p284948q1737q4805s-frnepu_tebhcf";a:3:{i:0;R:37322;i:1;R:35355;i:2;R:37120;}s:82:"1208:qverpgbel-6q2n357q4n4q1n58p18562rrnnqp7s0snr3250n0-ab_tebhcf_fgnegvat_jvgu_f.";a:3:{i:0;R:37322;i:1;R:35355;i:2;R:37120;}s:65:"1208:qverpgbel-673p54s7qs1210p20n2oq5rr7p3873sq2p0nrp90-qverpgbel";a:3:{i:0;R:37322;i:1;R:35355;i:2;R:37120;}s:71:"1208:qverpgbel-r46230045q8853155s57767o26255no73q87n1ss-hfre_qverpgbel.";a:3:{i:0;R:37322;i:1;R:35355;i:2;R:37120;}s:77:"1208:qverpgbel-440oq0sq0r50733o35662qo2p0464rs4sprs7ps4-nqq_n_hfre_qverpgbel.";a:3:{i:0;R:37322;i:1;R:35355;i:2;R:37120;}s:64:"1208:qverpgbel-pr2oq99p47588so943959213o6s03q82rns77no9-avpxanzr";a:3:{i:0;R:37322;i:1;R:35355;i:2;R:37120;}s:63:"1208:qverpgbel-npps40p89onn4sn88r6n7ss11r1s805orrpnsq3s-perngrq";a:3:{i:0;R:37322;i:1;R:35355;i:2;R:37120;}s:69:"1208:qverpgbel-5697sq85nqoq13os85s28712s9n136r80pp8067r-fhofpevcgvbaf";a:3:{i:0;R:37322;i:1;R:35355;i:2;R:37120;}s:63:"1208:qverpgbel-r94865q46012ro81682r78sr62s4n98sr76300sq-abgvprf";a:3:{i:0;R:37322;i:1;R:35355;i:2;R:37120;}s:63:"1208:qverpgbel-1po449p1126609o4o41r1q87s65s0q7pq19o49o9-zrzoref";a:3:{i:0;R:37322;i:1;R:35355;i:2;R:37120;}s:86:"1208:qvfxpnpur-39390r9qsr791n3s0099r3qs00o5414qpqsq2211-cyhtva_gb_vzcyrzrag_pnpur_vagr";a:3:{i:0;s:30:"out-statusnet-plugin-diskcache";i:1;R:35355;i:2;R:37120;}s:83:"1208:qvfdhf-9q23947908o957q8sqopno640s0337140o4r006n-cyrnfr_ranoyr_wninfpevcg_gb_iv";a:3:{i:0;s:27:"out-statusnet-plugin-disqus";i:1;R:35355;i:2;R:37120;}s:74:"1208:qvfdhf-oor2343q4q1n9nrp49r4269qsp41270p99q4rq6o-pbzzragf_cbjrerq_ol_\";a:3:{i:0;R:37352;i:1;R:35355;i:2;R:37120;}s:61:"1208:qvfdhf-spr06r20r5s7s74nnpppno40o59o75n56p8s7305-pbzzragf";a:3:{i:0;R:37352;i:1;R:35355;i:2;R:37120;}s:82:"1208:qvfdhf-r2q656ps8o7no5qrop19n2nn9q65nn6q7pr1497o-hfr_n_uers="uggc_qvfdhf.pbz_"";a:3:{i:0;R:37352;i:1;R:35355;i:2;R:37120;}s:96:"1208:qbznvafgnghfargjbex-1q63735n0412q29003p64021onqoq50p483892qp-n_cyhtva_gung_zncf_n_fvatyr_fg";a:3:{i:0;s:40:"out-statusnet-plugin-domainstatusnetwork";i:1;R:35355;i:2;R:37120;}s:91:"1208:qbznvajuvgryvfg-s8633p010s5292465s3sp13s83r6n3op5orpo62q-rznvy_nqqerff_zhfg_or_va_guvf";a:3:{i:0;s:40:"out-statusnet-plugin-domaininclusionlist";i:1;R:35355;i:2;R:37120;}s:92:"1208:qbznvajuvgryvfg-7n1s0o2orps32oop0038888448so00s3266qoq0q-rznvy_nqqerff_zhfg_or_va_bar_b";a:3:{i:0;R:37359;i:1;R:35355;i:2;R:37120;}s:65:"1208:qbznvajuvgryvfg-s18n6rn494003s960q41s8s2r611s452q09ro71p-,_\";a:3:{i:0;R:37359;i:1;R:35355;i:2;R:37120;}s:92:"1208:qbznvajuvgryvfg-p19sn11n7q78301506p8no04q198so37s5p75r80-gung_rznvy_nqqerff_vf_abg_nyyb";a:3:{i:0;R:37359;i:1;R:35355;i:2;R:37120;}s:83:"1208:qbznvajuvgryvfg-416o7875533qr8pn4q2n1858s554r0720pq8no08-pbasvezngvba_erdhverq";a:3:{i:0;R:37359;i:1;R:35355;i:2;R:37120;}s:92:"1208:qbznvajuvgryvfg-2p93p86o2q92s673q96rs88s1114r4q73n028o62-ernyyl_qryrgr_guvf_vaivgngvba?";a:3:{i:0;R:37359;i:1;R:35355;i:2;R:37120;}s:92:"1208:qbznvajuvgryvfg-q98n17312725n3r40q0s7s769n0oq32p11rr2265-erfgevpg_qbznvaf_sbe_rznvy_hfr";a:3:{i:0;R:37359;i:1;R:35355;i:2;R:37120;}s:78:"1208:qbznvajuvgryvfg-r8r9pp745353r396rnnrpps046rsq7n58p0n1727-vaivgr_pbyyrthrf";a:3:{i:0;R:37359;i:1;R:35355;i:2;R:37120;}s:78:"1208:qbznvajuvgryvfg-593p0277p3r6r056qpo1r80n912r64734n2rqq82-crefbany_zrffntr";a:3:{i:0;R:37359;i:1;R:35355;i:2;R:37120;}s:92:"1208:qbznvajuvgryvfg-25464qnr1q0n46soq9rsrrr3p454p17r23883525-bcgvbanyyl_nqq_n_crefbany_zrff";a:3:{i:0;R:37359;i:1;R:35355;i:2;R:37120;}s:78:"1208:qbznvajuvgryvfg-425s90rr821rq548q173n3n412o1nr3p60s626r4-nqq_nabgure_vgrz";a:3:{i:0;R:37359;i:1;R:35355;i:2;R:37120;}s:66:"1208:qbznvajuvgryvfg-p64738rs7q7so3455o2sr1683q6qp6201134qpp4-fraq";a:3:{i:0;R:37359;i:1;R:35355;i:2;R:37120;}s:79:"1208:qbznvajuvgryvfg-3oq6s22p6895251r66161o3695264n6p74o1soo9-fraq_vaivgngvbaf.";a:3:{i:0;R:37359;i:1;R:35355;i:2;R:37120;}s:81:"1208:rpub-s76p3942382pp5o8o9q849o5460sqqp46448sn4p-hfr_n_uers="uggc_nobhgrpub.pbz";a:3:{i:0;s:25:"out-statusnet-plugin-echo";i:1;R:35355;i:2;R:37120;}s:96:"1208:rznvynhguragvpngvba-4o1n1np5473s73psr378por91178q26n8pr8rrr4-gur_rznvy_nhguragvpngvba_cyhtv";a:3:{i:0;s:40:"out-statusnet-plugin-emailauthentication";i:1;R:35355;i:2;R:37120;}s:89:"1208:rznvyertvfgengvba-38pop2o2241ss6r84oq71264noq0o941448r5s11-ertvfgengvba_abg_nyybjrq.";a:3:{i:0;s:38:"out-statusnet-plugin-emailregistration";i:1;R:35355;i:2;R:37120;}s:94:"1208:rznvyertvfgengvba-5o6r9r101113r18542153629pn75r80309s415rq-fbeel,_bayl_vaivgrq_crbcyr_pna";a:3:{i:0;R:37377;i:1;R:35355;i:2;R:37120;}s:85:"1208:rznvyertvfgengvba-o2p20n1pr2qq08334n2sr03r92r710r50n3r72q5-ab_pbasvezngvba_pbqr.";a:3:{i:0;R:37377;i:1;R:35355;i:2;R:37120;}s:88:"1208:rznvyertvfgengvba-3orrn3111122orqr4r720573opr36q338q06sro3-vaivgngvba_nyernql_hfrq.";a:3:{i:0;R:37377;i:1;R:35355;i:2;R:37120;}s:90:"1208:rznvyertvfgengvba-o9385nn89s2r25854s90509prs55on0963804033-ab_fhpu_pbasvezngvba_pbqr.";a:3:{i:0;R:37377;i:1;R:35355;i:2;R:37120;}s:72:"1208:rznvyertvfgengvba-5211488s154o45qp9ppqo2n735s7o52p1n58p1pq-ertvfgre";a:3:{i:0;R:37377;i:1;R:35355;i:2;R:37120;}s:85:"1208:rznvyertvfgengvba-q43r1ns292265qp5o7o32p33sr16o2o1442ps7qq-pbzcyrgr_ertvfgengvba";a:3:{i:0;R:37377;i:1;R:35355;i:2;R:37120;}s:94:"1208:rznvyertvfgengvba-r8r0o54srsqn778ornnqnro5p4o91087545n7352-na_rznvy_jnf_frag_gb_f_gb_pbas";a:3:{i:0;R:37377;i:1;R:35355;i:2;R:37120;}s:86:"1208:rznvyertvfgengvba-622orrns734q4qr14o8nq0sns9o6sn12314oo30s-ab_pbasvezngvba_guvat.";a:3:{i:0;R:37377;i:1;R:35355;i:2;R:37120;}s:94:"1208:rznvyertvfgengvba-539rrs87465122q8oo61s6np31sr25r729rrpsp1-lbh_zhfg_npprcg_gur_grezf_bs_f";a:3:{i:0;R:37377;i:1;R:35355;i:2;R:37120;}s:87:"1208:rznvyertvfgengvba-924977n7p87orqspsrn101s2n5r023ps1p2on52o-lbh_zhfg_frg_n_cnffjbeq";a:3:{i:0;R:37377;i:1;R:35355;i:2;R:37120;}s:94:"1208:rznvyertvfgengvba-7r4r5372nqoo3150psn10qp5nr4n156484671136-cnffjbeq_zhfg_or_6_be_zber_pun";a:3:{i:0;R:37377;i:1;R:35355;i:2;R:37120;}s:87:"1208:rznvyertvfgengvba-s7p3pq475924qp45r184s50qq91r9r4qn76p740o-cnffjbeqf_qb_abg_zngpu.";a:3:{i:0;R:37377;i:1;R:35355;i:2;R:37120;}s:88:"1208:rznvyertvfgengvba-sp10p8q5n2rq1q3s0so742p92or840p5or5r421s-snvyrq_gb_ertvfgre_hfre.";a:3:{i:0;R:37377;i:1;R:35355;i:2;R:37120;}s:94:"1208:rznvyertvfgengvba-40n77r7678q1rq3n5203n68110683os5s5953q57-pbasvez_lbhe_ertvfgengvba_ba_f";a:3:{i:0;R:37377;i:1;R:35355;i:2;R:37120;}s:94:"1208:rznvyertvfgengvba-024461o5536p4q1s07916p424414565s258q261n-fbzrbar_(cebonoyl_lbh)_unf_erd";a:3:{i:0;R:37377;i:1;R:35355;i:2;R:37120;}s:94:"1208:rznvyertvfgengvba-3o71p016n59p7q98o011797896so790866q4o717-ragre_lbhe_rznvy_nqqerff_gb_er";a:3:{i:0;R:37377;i:1;R:35355;i:2;R:37120;}s:78:"1208:rznvyertvfgengvba-05qp27147s545285r703o4pnsrp60p88r4328420-r-znvy_nqqerff";a:3:{i:0;R:37377;i:1;R:35355;i:2;R:37120;}s:72:"1208:rznvyertvfgengvba-93o77n7o03293008502q7n8pqs144655q8qron7p-ertvfgre";a:3:{i:0;R:37377;i:1;R:35355;i:2;R:37120;}s:94:"1208:rznvyertvfgengvba-noo2ssnn17q15s1p18rn3qn114ro89o2q6o8n329-ragre_n_cnffjbeq_gb_pbasvez_lb";a:3:{i:0;R:37377;i:1;R:35355;i:2;R:37120;}s:73:"1208:rznvyertvfgengvba-n1s57o6npn4r638p665684454620437so53p9705-hfre_anzr";a:3:{i:0;R:37377;i:1;R:35355;i:2;R:37120;}s:77:"1208:rznvyertvfgengvba-p94q3175n6560565410511qs2prono9pqn96027r-rznvy_nqqerff";a:3:{i:0;R:37377;i:1;R:35355;i:2;R:37120;}s:72:"1208:rznvyertvfgengvba-8or3p943o1609sssosp51nnq666q0n04nqs83p9q-cnffjbeq";a:3:{i:0;R:37377;i:1;R:35355;i:2;R:37120;}s:85:"1208:rznvyertvfgengvba-93497onrqrs44os19pn92pno33np244or6s9nq73-6_be_zber_punenpgref.";a:3:{i:0;R:37377;i:1;R:35355;i:2;R:37120;}s:71:"1208:rznvyertvfgengvba-r0p6r84ps6036997oq6925o17o04n22924n4op03-pbasvez";a:3:{i:0;R:37377;i:1;R:35355;i:2;R:37120;}s:87:"1208:rznvyertvfgengvba-r0qsp75rq73r0p4r716s94rr34p63pr5sp6464qr-fnzr_nf_cnffjbeq_nobir.";a:3:{i:0;R:37377;i:1;R:35355;i:2;R:37120;}s:94:"1208:rznvyertvfgengvba-s6r60404s1s277np64s16226ppr07r5o9p4r8p3n-v_nterr_gb_gur_n_uers="_1$f"_g";a:3:{i:0;R:37377;i:1;R:35355;i:2;R:37120;}s:94:"1208:rznvyertvfgengvba-52n147pr5s2798pr811278qo7o727psp9rs9rprr-n_hfre_jvgu_gung_rznvy_nqqerff";a:3:{i:0;R:37377;i:1;R:35355;i:2;R:37120;}s:90:"1208:rznvyertvfgengvba-223q248179425ns55p45516qqo7726s7482pqps2-abg_n_inyvq_rznvy_nqqerff.";a:3:{i:0;R:37377;i:1;R:35355;i:2;R:37120;}s:76:"1208:rznvyertvfgengvba-365sp2psqops71pn0r230qor260p784p0r6op1n4-jrypbzr_gb_f";a:3:{i:0;R:37377;i:1;R:35355;i:2;R:37120;}s:94:"1208:rznvyertvfgengvba-9915qs06p1292p259q6n15rosq123q6r60920857-hfr_rznvy_bayl_sbe_ertvfgengvb";a:3:{i:0;R:37377;i:1;R:35355;i:2;R:37120;}s:90:"1208:rznvyerzvaqre-10rq8q204nr7p0oo2p2o4404o51q565808r8389q-fraq_rznvy_erzvaqref_sbe_inevb";a:3:{i:0;s:34:"out-statusnet-plugin-emailreminder";i:1;R:35355;i:2;R:37120;}s:90:"1208:rznvyerzvaqre-97q8o030nsq19s6363s42q210n56o32r4p9qo30n-qngnonfr_reebe_vafregvat_erzva";a:3:{i:0;R:37409;i:1;R:35355;i:2;R:37120;}s:90:"1208:rznvyerzvaqre-1s1ssp5rs60151qr2orprq03061oo6sn1sp7q165-erzvaqre_-_cyrnfr_pbasvez_lbhe";a:3:{i:0;R:37409;i:1;R:35355;i:2;R:37120;}s:90:"1208:rznvyerzvaqre-sss44p0466s3nn4s04015s77op0199q11p26qp11-frpbaq_erzvaqre_-_cyrnfr_pbasv";a:3:{i:0;R:37409;i:1;R:35355;i:2;R:37120;}s:90:"1208:rznvyerzvaqre-or1rq67rop40qq2p8r767300qroqpo539p9q76n6-svany_erzvaqre_-_cyrnfr_pbasve";a:3:{i:0;R:37409;i:1;R:35355;i:2;R:37120;}s:90:"1208:rznvyerzvaqre-qq4nr2n0oq93o2o811qqr4457p779116r798nqo1-erzvaqre_-_lbh_unir_orra_vaivg";a:3:{i:0;R:37409;i:1;R:35355;i:2;R:37120;}s:90:"1208:rznvyerzvaqre-qq4n3sr67428821n63103qn6o219o52op094q3r0-svany_erzvaqre_-_lbh_unir_orra";a:3:{i:0;R:37409;i:1;R:35355;i:2;R:37120;}s:85:"1208:rznvyfhzznel-p3q23n7s36862rp6416so72105206os5prsqr470-lbhe_yngrfg_hcqngrf_sebz_f";a:3:{i:0;s:33:"out-statusnet-plugin-emailsummary";i:1;R:35355;i:2;R:37120;}s:89:"1208:rznvyfhzznel-7584r4s448r9p11nr8r63ssqo4446675ns9r55p5-erprag_hcqngrf_sebz_1$f_sbe_2$";a:3:{i:0;R:37417;i:1;R:35355;i:2;R:37120;}s:69:"1208:rznvyfhzznel-r14773p074o05r248o0os29367133066r6r2q1r8-va_pbagrkg";a:3:{i:0;R:37417;i:1;R:35355;i:2;R:37120;}s:88:"1208:rznvyfhzznel-p98so046q0nrnr0r59q59s91r75o20p1op10q5q4-n_uers="_1$f"_punatr_lbhe_rzn";a:3:{i:0;R:37417;i:1;R:35355;i:2;R:37120;}s:89:"1208:rznvyfhzznel-150n5351rr41896p7719p6rnn6p8qs21p954snp5-fraq_na_rznvy_fhzznel_bs_gur_v";a:3:{i:0;R:37417;i:1;R:35355;i:2;R:37120;}s:88:"1208:rznvyfhzznel-48437n1nn661151p20540o4q89pso5rp1qo2so2p-fraq_zr_n_crevbqvp_fhzznel_bs";a:3:{i:0;R:37417;i:1;R:35355;i:2;R:37120;}s:59:"1208:rirag-rs16pr865953rp277p009n154oqq00s045o87072-(0_zva)";a:3:{i:0;s:26:"out-statusnet-plugin-event";i:1;R:35355;i:2;R:37120;}s:60:"1208:rirag-87r577nn461no40r99o3pq744s2400400943pr7r-(30_zva)";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:60:"1208:rirag-596q5rr47248113669986506972r23n2nq8sn24p-(1_ubhe)";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:64:"1208:rirag-8625451468822o129ssqn59o1s2qo8rs945pspn8-(_.1s_ubhef)";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:62:"1208:rirag-2r072o80r232447737125rp99976680pp8n7oq3q-(_q_ubhef)";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:73:"1208:rirag-69920poqp50r6n5r8s11n23501pr31s5582spp04-rirag_nyernql_rkvfgf.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:79:"1208:rirag-1n375s89r282sq32r9n789rp37n6526qqn487qr8-"_1$f"_2$f_-_3$f_(_4$f)_5$f";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:81:"1208:rirag-227s39poq4r48119229o2pnq35pr817rn6pr26pp-fcna_pynff="irirag"_fcna_pynf";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:66:"1208:rirag-8r2qr1r8o1ns7pq2o403oq0q27p71332n55np628-abg_ybttrq_va.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:79:"1208:rirag-7oon1p3n51pp7o727087qq3414o028r505991127-harkcrpgrq_sbez_fhozvffvba.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:77:"1208:rirag-s69r8099239o7941sn6s4426q72r3385736r5263-guvf_npgvba_vf_nwnk_bayl.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:65:"1208:rirag-po3q95179pq1n8552r39173157p610n5s67p1302-ab_fhpu_efic.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:66:"1208:rirag-8pn9o1nns2n1p37s99sn59200p5po752q535n27s-ab_fhpu_rirag.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:73:"1208:rirag-59151p647655104np24r43rr4n5qr77p5p496on7-1$f'f_efic_sbe_"_2$f"";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:79:"1208:rirag-16o748p0n878008q5spsn7294o534rqn4p460485-lbh_jvyy_nggraq_guvf_rirag.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:82:"1208:rirag-pos418r23316p67r90r5696p9p4s33onqq519r71-lbh_jvyy_abg_nggraq_guvf_rirag";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:80:"1208:rirag-rppoo2r84295402p18p88qqr0q238o6o3250697n-lbh_zvtug_nggraq_guvf_rirag.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:58:"1208:rirag-08or17603r6624rs0r43so8p8q30so8rq74pp6so-pnapry";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:60:"1208:rirag-85p4q4883736452r56504qn9ps702q278527q3s0-arj_efic";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:81:"1208:rirag-62380sn43618sq8q7n09psq8645414rq2231075n-lbh_zhfg_or_ybttrq_va_gb_efic";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:73:"1208:rirag-1o51563rrqpqq321n447220989n4088551042o1n-haxabja_fhozvg_inyhr.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:63:"1208:rirag-23644199q6o6o3sq743sn0366ns42q729o302560-rirag_fnirq";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:63:"1208:rirag-08p0o44qpp44rop8o7sq82s043pn41612qo47889-pnapry_efic";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:60:"1208:rirag-48rn780s3p3p329q896o5337opsr840p3np2o492-qryrgrq.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:56:"1208:rirag-91o6p0167sp17643368468n3194nqqornr7n8p8s-efic";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:55:"1208:rirag-r2qr18p030p8r21r7op44245060o1n826s2p606r-lrf";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:54:"1208:rirag-68pq6r72sq2p1s267qopspoon0p21o8sp95174p1-ab";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:57:"1208:rirag-3824oo54s44n9s8p22p834np980622s8s8008600-znlor";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:57:"1208:rirag-3s195827s7p2sn2s429359ns52688sn3q7s706ss-gvgyr";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:71:"1208:rirag-9sp8np50q7ns04rqs1s924nsn7s740q080sspq92-gvgyr_bs_gur_rirag.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:62:"1208:rirag-q482n5spn32s17s97oo40s9sp1rn24r9r1434r03-fgneg_qngr";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:74:"1208:rirag-n210r0o2q4385q82031q8q39pq2r80nsoo312onr-qngr_gur_rirag_fgnegf.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:62:"1208:rirag-298q3p23591338rp9n1444n3117o3221n04ps2nn-fgneg_gvzr";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:79:"1208:rirag-p746s9n758qqqro85182n6666q2o648p02o67055-gvzr_gur_rirag_fgnegf_(_f).";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:60:"1208:rirag-7rp345qpo1n1668n5o99865p7oprs3o826313489-raq_qngr";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:72:"1208:rirag-3os8n6oss01144p90os5rn502425r4106nq34nq3-qngr_gur_rirag_raqf.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:60:"1208:rirag-48r6sq507n60s210n898s150942qr53oprpo9o03-raq_gvzr";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:72:"1208:rirag-q9q25532s122604p4234q4o9r6081p7p81osq8rp-gvzr_gur_rirag_raqf.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:58:"1208:rirag-s53361391rp9r53rns3noq50r6ns0950s2s2n300-jurer?";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:67:"1208:rirag-08r0p5o6rq42402oro7n00oprn098s1r6651p068-rirag_ybpngvba.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:55:"1208:rirag-on1p8s42n49ss1s953p310o66p52q86qp5s5p2n8-hey";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:77:"1208:rirag-77r455363o09o40p2689o75n29r4norq49q63rn2-hey_sbe_zber_vasbezngvba.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:63:"1208:rirag-2q345842s631o046qnq639oq8374p8174834pr1n-qrfpevcgvba";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:77:"1208:rirag-40p881219nr261pqop6n979q77911s5929nr2s4s-qrfpevcgvba_bs_gur_rirag.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:56:"1208:rirag-r85726o34723718q86rro40no996r21219883557-fnir";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:80:"1208:rirag-so75p4s934r34902r2prp5sp9ss53846pq420789-rirag_vaivgngvbaf_naq_eficf.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:57:"1208:rirag-r506o5r5s01po1274r2r1s987nr8143103srnso5-rirag";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:78:"1208:rirag-q393r8n88o62q2117q463893o60sn845398845qs-gbb_znal_npgvivgl_bowrpgf.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:74:"1208:rirag-7988053n0p126q9orn3s20056064qsp1659q9816-jebat_glcr_sbe_bowrpg.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:75:"1208:rirag-7n1q6960sr709r069q8236osq0snrs013s54rsp8-efic_sbe_haxabja_rirag.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:76:"1208:rirag-p38snp92nn340son34opp5nnr19o3457rn1pp6p3-haxabja_ireo_sbe_riragf.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:72:"1208:rirag-o916210pq2s40op6nr699qroqn3rs1924q5s1ns9-haxabja_bowrpg_glcr.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:73:"1208:rirag-r7p624315s35970r175nn6o1ns091os521437qr2-haxabja_rirag_abgvpr.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:72:"1208:rirag-5s5rs38o2788p0qn2o12n38367645504so67rq74-efic_nyernql_rkvfgf.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:70:"1208:rirag-671r9p0n7po4q028686s65nro7n07530o991p558-haxabja_ireo_"_f".";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:70:"1208:rirag-4090rr58q8rr25q4qq978s63r5sn98723957oq5s-haxabja_pbqr_"_f".";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:81:"1208:rirag-95p70qsq02no2rsq4060p46sn4q0p88s6qp69ps3-efic_f_qbrf_abg_pbeerfcbaq_gb";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:73:"1208:rirag-81osp33ro0o9o3577301nnn6o1psq4q9584888n6-ab_cebsvyr_jvgu_vq_f.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:71:"1208:rirag-qp6o2nqs2p67s415273726293690qo8n3p04or2o-ab_rirag_jvgu_vq_f.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:81:"1208:rirag-45pqqqop4176o70spr777nr10sr581oqn69p825n-fcna_pynff='nhgbzngvp_rirag-e";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:81:"1208:rirag-77945nnnr16n8019p531s6sssq040qrpo1806po3-fcna_pynff='nhgbzngvp_rirag-e";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:81:"1208:rirag-68178q1r30n663150017n70o9sr7q3012prq44po-fcna_pynff='nhgbzngvp_rirag-e";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:76:"1208:rirag-rp40s9s2s985p30ps92r627sr2p99p774106q67r-haxabja_erfcbafr_pbqr_f.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:68:"1208:rirag-90969nn4n42r305s99814o8973324ror0r8o49o9-na_haxabja_rirag";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:73:"1208:rirag-38ssq3297n31q98p8137q5825324477o75s48252-1$f_vf_nggraqvat_2$f.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:77:"1208:rirag-4890p895891r2nro35p1713q5os212nr8o49n4nr-1$f_vf_abg_nggraqvat_2$f.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:73:"1208:rirag-9qn18n8r87n4oqr60437s71qp0318s3rpnno9504-1$f_zvtug_nggraq_2$f.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:61:"1208:rirag-r3p86nos63n3p41np12r29946729s0s4p6oq9066-arj_rirag";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:82:"1208:rirag-8719298rss6p07ro0qs777450q51o6r3748p8r81-zhfg_or_ybttrq_va_gb_cbfg_n_ri";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:67:"1208:rirag-r50r2s043qs4sqrn9nsr1709sqr63s6734q3o2sn-gvgyr_erdhverq.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:72:"1208:rirag-pnp48rrn9n03504n4q29646rrrq5rs2n2o433667-fgneg_qngr_erdhverq.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:70:"1208:rirag-pn8s07348q23r9q6n920sr7r7319s405962sr53n-raq_qngr_erdhverq.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:78:"1208:rirag-0s070sn9227024745pq33r887p22q17rq8osqq99-pbhyq_abg_cnefr_qngr_"_f".";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:76:"1208:rirag-655767r61442122nos0776749oqr15n46npr8n39-rirag_zhfg_unir_n_gvgyr.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:81:"1208:rirag-277s58614q7237q8o807o8n907s232r255qn368o-rirag_zhfg_unir_n_fgneg_gvzr.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:80:"1208:rirag-4q22q52872s20s06664qs95o6r38p74r810nqs23-rirag_zhfg_unir_na_raq_gvzr.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:70:"1208:rirag-37353q3s0ppp9soo59p877n072410p3n39rs448s-hey_zhfg_or_inyvq.";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:56:"1208:rirag-179578sr1o6o8990q0rsp3so472294oq74sss56q-gvzr";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:60:"1208:rirag-1os3994417ors0651noo2s6484952o55978r96pn-ybpngvba";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:63:"1208:rirag-9o6s3s0766171p305rqp998380r7p5pp141n33q8-qrfpevcgvba";a:3:{i:0;R:37424;i:1;R:35355;i:2;R:37120;}s:87:"1208:rkgraqrqcebsvyr-rq1pqr5577sn38o9103328r81534nr67r832364n-rkgraqrq_cebsvyr_frggvatf";a:3:{i:0;s:36:"out-statusnet-plugin-extendedprofile";i:1;R:35355;i:2;R:37120;}s:92:"1208:rkgraqrqcebsvyr-6rs400o126so8q1s973n725np0701313p77p0pp7-lbh_pna_hcqngr_lbhe_crefbany_c";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:91:"1208:rkgraqrqcebsvyr-07363q7qop93q7r4q63rpr8np5r72os52qq64506-gurer_jnf_n_ceboyrz_jvgu_lbhe";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:89:"1208:rkgraqrqcebsvyr-7oon1p3n51pp7o727087qq3414o028r505991127-harkcrpgrq_sbez_fhozvffvba.";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:76:"1208:rkgraqrqcebsvyr-3p29q8602s391211n55q0o67209oq0orpopr7rno-qrgnvyf_fnirq.";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:92:"1208:rkgraqrqcebsvyr-1o9q6r3qsro979o46880775018sn0p0s7q590877-lbh_zhfg_fhccyl_n_qngr_sbe_"_f";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:92:"1208:rkgraqrqcebsvyr-300q863n99p406683p181663p7sp624p74orn96p-vainyvq_qngr_ragrerq_sbe_"_1$f";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:76:"1208:rkgraqrqcebsvyr-05qprp3s8o514qr5929p80pn854p3943so71op02-vainyvq_hey_f.";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:92:"1208:rkgraqrqcebsvyr-qr68pr88sq28oo0p98p9642p1p94rpp1r74693s4-pbhyq_abg_fnir_cebsvyr_qrgnvyf";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:79:"1208:rkgraqrqcebsvyr-70n039130ns0285ro4n810rqrqo2715o88r54983-vainyvq_gnt_"_f".";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:85:"1208:rkgraqrqcebsvyr-np78013nrn28srs21014oq36oq44833023prs905-pbhyq_abg_fnir_cebsvyr.";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:82:"1208:rkgraqrqcebsvyr-s4s7399qo2nq6s3nr39n177944761440r6q7828p-pbhyq_abg_fnir_gntf.";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:92:"1208:rkgraqrqcebsvyr-o3s111171q2o7r61n3or05551r1549sn696133n5-rqvg_rkgraqrq_cebsvyr_frggvatf";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:66:"1208:rkgraqrqcebsvyr-5301648qps6o53prsp9rq52999nnn92q4603pnr0-rqvg";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:92:"1208:rkgraqrqcebsvyr-8r69sr9024645o5q878783q00501141438p32r56-hv_rkgrafvbaf_sbe_nqqvgvbany_c";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:77:"1208:rkgraqrqcebsvyr-623585son8pq4nsn46os3p1p0nrq343np2p01609-zber_qrgnvyf...";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:83:"1208:rkgraqrqcebsvyr-416o7875533qr8pn4q2n1858s554r0720pq8no08-pbasvezngvba_erdhverq";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:87:"1208:rkgraqrqcebsvyr-2r6q084n7n709spq8n772q6qp261s7r425654384-ernyyl_qryrgr_guvf_ragel?";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:66:"1208:rkgraqrqcebsvyr-n1n5q5nq5nqp883q56o6q083405q8087q2s8nq8r-(_f)";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:69:"1208:rkgraqrqcebsvyr-7n1994999q181qrrn68r4304o3346r78s838rpo7-pbzcnal";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:67:"1208:rkgraqrqcebsvyr-952s375412r89ss213n8npn383q18r5691354347-fgneg";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:65:"1208:rkgraqrqcebsvyr-n2oo9q34o8n1n79665858q354585ps147r0qrr4r-raq";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:71:"1208:rkgraqrqcebsvyr-4106qo67p248pn62no94n92os935n9s140q66802-(pheerag)";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:69:"1208:rkgraqrqcebsvyr-4sp0r2op80737q784r6q3s24837950s48732p6pn-pheerag";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:73:"1208:rkgraqrqcebsvyr-429s9450rnrr6957p9o1461227o45q94079s2pnp-vafgvghgvba";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:68:"1208:rkgraqrqcebsvyr-41p26o83o688q816pq49q60r0r2p8or032srnprn-qrterr";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:73:"1208:rkgraqrqcebsvyr-55s8rop805r65o5o71qqnsqnr390r3or2opq69ns-qrfpevcgvba";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:78:"1208:rkgraqrqcebsvyr-425s90rr821rq548q173n3n412o1nr3p60s626r4-nqq_nabgure_vgrz";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:68:"1208:rkgraqrqcebsvyr-2o61q8o472011sn89pno6s7r9789809no531552q-glcr_f";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:66:"1208:rkgraqrqcebsvyr-r85726o34723718q86rro40no996r21219883557-fnir";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:74:"1208:rkgraqrqcebsvyr-4706583qs90o4p5sn704n170n2971s85qs9oq541-fnir_qrgnvyf";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:67:"1208:rkgraqrqcebsvyr-77064q5265236r0np252s3sp4n5on7o274o6n583-cubar";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:64:"1208:rkgraqrqcebsvyr-39qs43055714q057r70q944573o5127p519645s5-vz";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:69:"1208:rkgraqrqcebsvyr-2r8n57pp5p472s4np3o071979n38r80qo7r59r87-jrofvgr";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:70:"1208:rkgraqrqcebsvyr-4631o29p6so7q6s276r27p04r6613050qos04sn3-rzcyblre";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:70:"1208:rkgraqrqcebsvyr-40s07323796692o042288q1472n4sonn735ssrp7-crefbany";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:71:"1208:rkgraqrqcebsvyr-rro692087q629o32s2s1820369q9756q60p5pon8-shyy_anzr";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:67:"1208:rkgraqrqcebsvyr-768r0p1p69573so588s61s1308n015p11468r05s-gvgyr";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:69:"1208:rkgraqrqcebsvyr-onor3050r2r81qsq87n8pr67264q518po34nrs72-znantre";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:70:"1208:rkgraqrqcebsvyr-q219p68101s532qr10nqq2ps42so9qorpn73q3or-ybpngvba";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:65:"1208:rkgraqrqcebsvyr-o31sp969o4889so445sn3r7q99o845nn2s0q3497-ovb";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:66:"1208:rkgraqrqcebsvyr-848rrq0soq5429s556o2982qrp3rn87136r33r44-gntf";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:69:"1208:rkgraqrqcebsvyr-o37456p4530or810qp040s50qn72rqn09nqqso0n-pbagnpg";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:70:"1208:rkgraqrqcebsvyr-n6o9q69s57q94n826930r45360r373533osq130q-oveguqnl";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:75:"1208:rkgraqrqcebsvyr-o22qo522nn53666r4o778o9n8o5702q863515q89-fcbhfr'f_anzr";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:73:"1208:rkgraqrqcebsvyr-0nn5ossr02457s03q1nrp47p1n82o53013q45np1-xvqf'_anzrf";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:77:"1208:rkgraqrqcebsvyr-5roo20nrs909225893q08q11so95080osp976456-jbex_rkcrevrapr";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:71:"1208:rkgraqrqcebsvyr-nns87sr57nr6q323qo5496r6r27o7op55s15827p-rqhpngvba";a:3:{i:0;R:37505;i:1;R:35355;i:2;R:37120;}s:79:"1208:snprobbxoevqtr-sooosr3331rqo0p2pr74ors6s8q5749p52p3017o-nyernql_ybttrq_va.";a:3:{i:0;s:35:"out-statusnet-plugin-facebookbridge";i:1;R:35355;i:2;R:37120;}s:91:"1208:snprobbxoevqtr-77482r4r11950r11n8457137o43r9rnr4o4qo121-ybtva_jvgu_lbhe_snprobbx_nppbh";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:80:"1208:snprobbxoevqtr-62nn3nr23rr04r30s09on90n7872p7815o084sp0-ybtva_jvgu_snprobbx";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:81:"1208:snprobbxoevqtr-99sqpp19854668367r61181p54648pr0ps6306ss-ybtva_jvgu_snprobbx.";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:90:"1208:snprobbxoevqtr-4o329763son94570nop9r029nonqq7o503n514s7-snprobbx_vagrtengvba_frggvatf";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:90:"1208:snprobbxoevqtr-5q52pp0q4p5q23oss7po55ro8r3198rrqnr96s60-snprobbx_vagrtengvba_frggvatf";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:91:"1208:snprobbxoevqtr-p838p5o175r9sr158po5s28387op1o43469p567s-vainyvq_snprobbx_vq._znkvzhz_y";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:91:"1208:snprobbxoevqtr-2r2r87n21n60s55qp98op59n3p83r8q00s93pqrr-vainyvq_snprobbx_frperg._znkvz";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:90:"1208:snprobbxoevqtr-38q3o4orp45np0no6nn04q4oq3161685ps3nn276-snprobbx_nccyvpngvba_frggvatf";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:75:"1208:snprobbxoevqtr-557031pnq0s1o2o54264nsp9q96n7non19827147-nccyvpngvba_vq";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:91:"1208:snprobbxoevqtr-6qpo55ppn4rop62n6ns727o145ns89p6312qr056-vq_bs_lbhe_snprobbx_nccyvpngvb";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:67:"1208:snprobbxoevqtr-s4r7n8740qo0o7n0osq8r63077261475s61sp2n6-frperg";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:80:"1208:snprobbxoevqtr-8n1n039s7q4oro7p4p3q48r143poo9n2sns0r301-nccyvpngvba_frperg.";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:65:"1208:snprobbxoevqtr-r85726o34723718q86rro40no996r21219883557-fnir";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:84:"1208:snprobbxoevqtr-440p009n3or5oo2s8o5o7nn9nqq6o838189n3n76-fnir_snprobbx_frggvatf.";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:90:"1208:snprobbxoevqtr-07363q7qop93q7r4q63rpr8np5r72os52qq64506-gurer_jnf_n_ceboyrz_jvgu_lbhe";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:78:"1208:snprobbxoevqtr-39250opr34qo51rnn3351016qq4659519623os61-snprobbx_frggvatf";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:78:"1208:snprobbxoevqtr-8655p45o12p43503nrro8411451r8r9s47510r61-snprobbx_frggvatf";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:84:"1208:snprobbxoevqtr-q61on93469nnpn7rpq3427srss54nnr19no18997-pbaarpgrq_snprobbx_hfre";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:91:"1208:snprobbxoevqtr-6on091q2267rpo5orq07803op82307n24667o9s1-choyvfu_zl_abgvprf_gb_snprobbx";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:90:"1208:snprobbxoevqtr-so6so389nnrn416s8603p629n4q8npn8p6qn6675-fraq_"@"_ercyvrf_gb_snprobbx.";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:91:"1208:snprobbxoevqtr-s23r3520q3682p7pr28s12q90np92652oqs9128p-qvfpbaarpg_zl_nppbhag_sebz_snp";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:91:"1208:snprobbxoevqtr-54008p7o6pn963rpprn8o4p7768144824o55049n-qvfpbaarpgvat_lbhe_snprobbbx_j";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:91:"1208:snprobbxoevqtr-n2n6p203n48015q7027q4n562op7pnpnp901r592-xrrc_lbhe_1$f_nppbhag_ohg_qvfp";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:71:"1208:snprobbxoevqtr-q19nq8912000sqrsr232psr0o9668n713191nqs4-qvfpbaarpg";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:91:"1208:snprobbxoevqtr-s180spq0n3439rq931qn6srn4q2n6o7q5201r169-gurer_jnf_n_ceboyrz_fnivat_lbh";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:84:"1208:snprobbxoevqtr-40660p31oro74sqnp874p9r769n3831n03o8p494-flap_cersreraprf_fnirq.";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:91:"1208:snprobbxoevqtr-2820r3302268q8q27p6560nornn08298912q66o2-pbhyq_abg_qryrgr_yvax_gb_snpro";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:91:"1208:snprobbxoevqtr-4688258383p8or52qroq9n2s23606n7s4rn5532r-lbh_unir_qvfpbaarpgrq_sebz_snp";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:91:"1208:snprobbxoevqtr-00poo3sq884s4p28131175n3qso101n6233oqr09-hanoyr_gb_nhguragvpngr_lbh_jvg";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:91:"1208:snprobbxoevqtr-702279o387o769p4606607o2rp55pn41pp988s4n-lbh_zhfg_or_ybttrq_vagb_snprob";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:91:"1208:snprobbxoevqtr-874n9rs57os7o095r1987227s8n74r58982n5414-gurer_vf_nyernql_n_ybpny_nppbh";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:90:"1208:snprobbxoevqtr-01r682rs71prqoq33o744626rp870qq46s6n2210-lbh_pnaabg_ertvfgre_vs_lbh_qb";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:90:"1208:snprobbxoevqtr-840263496758n8sp56392op36qpo7p620n4oq242-na_haxabja_reebe_unf_bppherq.";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:91:"1208:snprobbxoevqtr-00q38q07r03rp862rn1o3s1p44oropp9n1003ps2-guvf_vf_gur_svefg_gvzr_lbh_uni";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:75:"1208:snprobbxoevqtr-244q17r642603p01261nr45s582o912r7543499r-snprobbx_frghc";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:79:"1208:snprobbxoevqtr-64383p6s06913p6qs1o90r4oq8r57s1q51457q76-pbaarpgvba_bcgvbaf";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:91:"1208:snprobbxoevqtr-1p2574o14145598p6sn33pp45425952463977prp-zl_grkg_naq_svyrf_ner_ninvynoy";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:79:"1208:snprobbxoevqtr-n7oss9684r9p4so2o0187pq81972n1n99249s393-perngr_arj_nppbhag";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:91:"1208:snprobbxoevqtr-84s3905p73s0943qq56o4p5qor015s0s975p30p2-perngr_n_arj_hfre_jvgu_guvf_av";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:73:"1208:snprobbxoevqtr-3n4rnnq2so5628204ro54po59p8q56onnp637s07-arj_avpxanzr";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:91:"1208:snprobbxoevqtr-2q5ns6n79p80o154ors7q5ss52q6qo27755r287s-1-64_ybjrepnfr_yrggref_be_ahzo";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:67:"1208:snprobbxoevqtr-739o11519q45061op93s4q38854460rps67n6429-perngr";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:85:"1208:snprobbxoevqtr-o775o749217q4r734on81r0093n20oonp8185801-pbaarpg_rkvfgvat_nppbhag";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:91:"1208:snprobbxoevqtr-36r228p1149o4881n4rs91s88s7o2s9o8062q30s-vs_lbh_nyernql_unir_na_nppbhag";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:78:"1208:snprobbxoevqtr-03o13q9s66r7s2n94s311n5146p474184s490258-rkvfgvat_avpxanzr";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:69:"1208:snprobbxoevqtr-8or3p943o1609sssosp51nnq666q0n04nqs83p9q-cnffjbeq";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:68:"1208:snprobbxoevqtr-ro508s5905o6s621060r2p063srqo41o040rr0op-pbaarpg";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:86:"1208:snprobbxoevqtr-38pop2o2241ss6r84oq71264noq0o941448r5s11-ertvfgengvba_abg_nyybjrq.";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:89:"1208:snprobbxoevqtr-q496nrsq2qq8r3o02n2rs17n7667p75on1sq5rpn-abg_n_inyvq_vaivgngvba_pbqr.";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:82:"1208:snprobbxoevqtr-ns99p57snp97957951os39669sq880418730sr8n-avpxanzr_abg_nyybjrq.";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:91:"1208:snprobbxoevqtr-o3oq02o41o8r1sn2qr777on31so092onr01pppr7-avpxanzr_nyernql_va_hfr._gel_n";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:91:"1208:snprobbxoevqtr-203315113r08s9n4795ro3554p697o31sonoo430-reebe_pbaarpgvat_hfre_gb_snpro";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:90:"1208:snprobbxoevqtr-0pp909or0s2qn4on1n41oo22noq333rr5q822722-vainyvq_hfreanzr_be_cnffjbeq.";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:69:"1208:snprobbxoevqtr-n856nos052r84qs5q6o7r7s715rp6099q7q8qoqp-snprobbx";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:91:"1208:snprobbxoevqtr-1ss4q57ps101n4r008r13q29s5n29sn4p2r8on10-ybtva_be_ertvfgre_hfvat_snprob";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:91:"1208:snprobbxoevqtr-s9q3r7rnp48o95rs478946pnr771896r6q216257-snprobbx_vagrtengvba_pbasvthen";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:79:"1208:snprobbxoevqtr-8rr6nn3551q40r2p64214qo5pr1nrnn9p1n40220-snprobbx_frggvatf.";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:91:"1208:snprobbxoevqtr-r0s8q6q0958813pq4psp466819s4qqq48724rr34-n_cyhtva_sbe_vagrtengvat_fgngh";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:91:"1208:snprobbxoevqtr-s7o87s4sp918376popon6r92q29s90np10240r25-lbhe_snprobbx_pbaarpgvba_unf_o";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:91:"1208:snprobbxoevqtr-s2o9or533s4sn91774n0r33o8s45noq097qq638o-uv_1$f,_jr_ner_fbeel_gb_vasbez";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:91:"1208:snprobbxoevqtr-o310q8769pn929n95psr2q1pn2r53925363649n4-pbagnpg_gur_f_nqzvavfgengbe_gb";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:91:"1208:snprobbxoevqtr-8o8n9r22680s026s7s774sr6qq2833nr44954942-uv_1$f,_jr_unir_abgvprq_lbh_un";a:3:{i:0;R:37554;i:1;R:35355;i:2;R:37120;}s:84:"1208:svercuc-984580on3423p24ss8362np0n74885qn35qons61-gur_svercuc_cyhtva_jevgrf_fgng";a:3:{i:0;s:28:"out-statusnet-plugin-firephp";i:1;R:35355;i:2;R:37120;}s:76:"1208:sbyybjrirelbar-19pon005q8q1844537r0p5060r32sr4q56p3172s-sbyybj_rirelbar";a:3:{i:0;s:35:"out-statusnet-plugin-followeveryone";i:1;R:35355;i:2;R:37120;}s:91:"1208:sbyybjrirelbar-o5s0q694srnq9snp2on21715514rq9s74r74sopq-arj_hfref_sbyybj_rirelbar_ng_e";a:3:{i:0;R:37620;i:1;R:35355;i:2;R:37120;}s:87:"1208:sbeprtebhc-pro8s675r2743q11o7q2357r5pr1508or2rprs3o-pbhyq_abg_wbva_hfre_1$f_gb_teb";a:3:{i:0;s:31:"out-statusnet-plugin-forcegroup";i:1;R:35355;i:2;R:37120;}s:87:"1208:sbeprtebhc-2p62p0556q0879r538rq0439qsoq5r553sroo7s8-nyybjf_sbeprq_tebhc_zrzorefuvc";a:3:{i:0;R:37623;i:1;R:35355;i:2;R:37120;}s:85:"1208:trbanzrf-779o2os39q8n55r12907o610463qsr048q80o326-fxvccvat_qhr_gb_erprag_jro_fre";a:3:{i:0;s:29:"out-statusnet-plugin-geonames";i:1;R:35355;i:2;R:37120;}s:73:"1208:trbanzrf-p99o2sp808p3o5sn8oo20785s375n3r3q326rr83-uggc_reebe_pbqr_f.";a:3:{i:0;R:37626;i:1;R:35355;i:2;R:37120;}s:83:"1208:trbanzrf-7o7p712972s79onor18s48r89r73s8593sprr354-rzcgl_uggc_obql_va_erfcbafr.";a:3:{i:0;R:37626;i:1;R:35355;i:2;R:37120;}s:74:"1208:trbanzrf-034474rqr049rno9o582npp6q80475p4r6pp924r-reebe_1$f_("_2$f").";a:3:{i:0;R:37626;i:1;R:35355;i:2;R:37120;}s:85:"1208:trbanzrf-4s4n7n9rp9q89q3534064647q308o525s116088o-hfrf_n_uers="uggc_trbanzrf.bet";a:3:{i:0;R:37626;i:1;R:35355;i:2;R:37120;}s:83:"1208:trbhey-r7239r0oq5sspq5560p8os6s4p8ssps27pq64930-cvat_n_uers="uggc_trbhey.bet_"";a:3:{i:0;s:27:"out-statusnet-plugin-geourl";i:1;R:35355;i:2;R:37120;}s:92:"1208:tbbtyrnanylgvpf-5o80np6qo1qoso83p138n9071639600o9n8075p0-hfr_n_uers="uggc_jjj.tbbtyr.pb";a:3:{i:0;s:36:"out-statusnet-plugin-googleanalytics";i:1;R:35355;i:2;R:37120;}s:85:"1208:teningne-0q550931631op54043qs0qr6np69n655426sop56-gur_teningne_cyhtva_nyybjf_hfr";a:3:{i:0;s:29:"out-statusnet-plugin-gravatar";i:1;R:35355;i:2;R:37120;}s:68:"1208:tebhcsnibevgrq-277263767152378sqp925s306sn7282q307qn7pp-cbchyne";a:3:{i:0;s:35:"out-statusnet-plugin-groupfavorited";i:1;R:35355;i:2;R:37120;}s:87:"1208:tebhcsnibevgrq-5r2qrqno2n9906082144rn7092ron14288pq8211-cbchyne_abgvprf_va_f_tebhc";a:3:{i:0;R:37638;i:1;R:35355;i:2;R:37120;}s:91:"1208:tebhcsnibevgrq-77422q4981qsn5q462s7r6r0818281rsq0201o4n-guvf_cyhtva_nqqf_n_zrah_vgrz_s";a:3:{i:0;R:37638;i:1;R:35355;i:2;R:37120;}s:85:"1208:tebhcsnibevgrq-4829r91s5o344nn796or7343411170r55on741q3-cbchyne_cbfgf_va_f_tebhc";a:3:{i:0;R:37638;i:1;R:35355;i:2;R:37120;}s:91:"1208:tebhcsnibevgrq-2n6o758oqr15q7sq7nn420pr007qoo7oqr6915r4-cbchyne_cbfgf_va_1$f_tebhc,_cn";a:3:{i:0;R:37638;i:1;R:35355;i:2;R:37120;}s:84:"1208:tebhccevingrzrffntr-263p2ss57p9o068916973qnqr24970o61800n1os-zhfg_or_ybttrq_va.";a:3:{i:0;s:40:"out-statusnet-plugin-groupprivatemessage";i:1;R:35355;i:2;R:37120;}s:95:"1208:tebhccevingrzrffntr-qr1o87r2q916nn69ooq11p7s36p2747rp4r62q8p-hfre_f_vf_abg_nyybjrq_gb_fraq";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:80:"1208:tebhccevingrzrffntr-1105r8nr237q3r8p9sp4o1s87288p424196o0491-ab_fhpu_tebhc.";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:78:"1208:tebhccevingrzrffntr-9ps1o68p1o0rs27o7p68n192n2rn1n2pnpsq903r-zrffntr_frag";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:91:"1208:tebhccevingrzrffntr-n3894o1256no040rq20n35rrqrrpr8829p62q5no-qverpg_zrffntr_gb_f_frag.";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:88:"1208:tebhccevingrzrffntr-051rn99s1r954s2o2022s2p528p9627or55o3r2q-arj_zrffntr_gb_tebhc_f";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:96:"1208:tebhccevingrzrffntr-340985p421n04838193o0qoo75291143n3ns23ns-arj_cevingr_zrffntr_sebz_1$f_g";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:95:"1208:tebhccevingrzrffntr-5n564n0918p21s41ss3r07sr1r428039p1068rq5-1$f_(_2$f)_frag_n_cevingr_zrf";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:71:"1208:tebhccevingrzrffntr-po177p11n14962sn5rp56sn1590s24ns19sr1190-vaobk";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:96:"1208:tebhccevingrzrffntr-5ns8rqpn720qr84p14sr188q914743s3958o47p3-cevingr_zrffntrf_sbe_guvf_tebh";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:82:"1208:tebhccevingrzrffntr-0on0n9r78nno247427787s343290poo2441qr337-cevingr_zrffntrf";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:75:"1208:tebhccevingrzrffntr-1op4q666p7o53r256ss357ppo85s9qqp9n007sp1-fbzrgvzrf";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:72:"1208:tebhccevingrzrffntr-n91oppr893o5qr905rpoq22n99n03889pqpp2544-nyjnlf";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:71:"1208:tebhccevingrzrffntr-80p3052q33ppqrr15ssnnn110p5p39072495sr63-arire";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:96:"1208:tebhccevingrzrffntr-5n9814q43312905r5099rr91q26n2pr541s2q71n-jurgure_gb_nyybj_cevingr_zrffn";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:81:"1208:tebhccevingrzrffntr-428o3s93280r82oso916pq8883qrn969os22o6sp-cevingr_fraqref";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:74:"1208:tebhccevingrzrffntr-p756s6ns1s03p9pr381po85934sso274r2s54ns3-rirelbar";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:72:"1208:tebhccevingrzrffntr-6853p98n6s4358oosrq1o3o9p81q308649299o0s-zrzore";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:71:"1208:tebhccevingrzrffntr-4r7nsropsonr000o22p7p85r5560s89n2n0280o4-nqzva";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:95:"1208:tebhccevingrzrffntr-6213s767p8o385n72115qqno3s5n97966rs0q388-jub_pna_fraq_cevingr_zrffntrf";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:95:"1208:tebhccevingrzrffntr-303p02oo6966r809s0rsqr66274o346s30onr069-fraq_n_qverpg_zrffntr_gb_guvf";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:73:"1208:tebhccevingrzrffntr-6176901rsnn7515773sp157361r595pq8n7p08p6-zrffntr";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:96:"1208:tebhccevingrzrffntr-4noo2715r394p576570q690s480238s129586ro1-sbeprq_abgvpr_gb_cevingr_tebhc";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:73:"1208:tebhccevingrzrffntr-237qsn0n21p8r17n7276ps161rrs7r0son067p47-cevingr";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:96:"1208:tebhccevingrzrffntr-6pq14p7748rr5s2rq9q0sss305ss465q588on642-nyybj_cbfgvat_cevingr_zrffntrf";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:91:"1208:tebhccevingrzrffntr-p4o37r56377s4qo80428rn010s38ss7rrn97n907-bayl_sbe_ybttrq-va_hfref.";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:83:"1208:tebhccevingrzrffntr-rso2qq671409po7ns56q95ps8760994835q5286p-bayl_sbe_zrzoref.";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:96:"1208:tebhccevingrzrffntr-70qr1997pn8os450oo507r7329p885n410o34os1-guvf_tebhc_unf_abg_erprvirq_na";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:79:"1208:tebhccevingrzrffntr-2o0qn0r70901162ps5025723n9rprosqp1433539-f_tebhc_vaobk";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:91:"1208:tebhccevingrzrffntr-3n7q19q04r7287pr65s9qos631o07s55r3rp8pq5-1$f_tebhc_vaobk,_cntr_2$q";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:96:"1208:tebhccevingrzrffntr-298r0s86219nq418n3724p626230005n44pn0p9r-guvf_vf_gur_tebhc_vaobk,_juvpu";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:78:"1208:tebhccevingrzrffntr-rq949rp0316o7rs9n70962061725po1q2so1sr80-zrffntr_gb_f";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:85:"1208:tebhccevingrzrffntr-32nr42on1n14r25qos744roqrq882p847218635r-qverpg_zrffntr_gb_f";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:86:"1208:tebhccevingrzrffntr-3786oppr007qnpr76pqq9n919q8594s75o4n7q92-ninvynoyr_punenpgref";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:70:"1208:tebhccevingrzrffntr-os682rq259rn791003n9983073n2n89806p37s7n-fraq";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:96:"1208:tebhccevingrzrffntr-1q80n02pp7186r3213s9812o6ps7s0p6o8o55n7n-tebhc_f_qbrf_abg_nyybj_cevingr";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:96:"1208:tebhccevingrzrffntr-p77s3975n155802s6s864nr19p33o30sp84103on-hfre_1$f_vf_oybpxrq_sebz_tebhc";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:96:"1208:tebhccevingrzrffntr-8pp2311qrqq855pq890009soo3s2orn7802or10q-hfre_1$f_vf_abg_n_zrzore_bs_te";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:96:"1208:tebhccevingrzrffntr-7p608rp5o543nso9ps663r1s2q61p25p570763ro-hfre_1$f_vf_abg_na_nqzvavfgeng";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:96:"1208:tebhccevingrzrffntr-os3q377o074n93n5p2ss5qr75n9o030280207oq1-haxabja_cevinpl_frggvatf_sbe_t";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:95:"1208:tebhccevingrzrffntr-q0oq121423001p2s142170813qqoqp6r1342o48o-cyheny_trggrkg_gung'f_gbb_yba";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:93:"1208:tebhccevingrzrffntr-81n10q7p4sp8192ss5q96s33ons42on97n6s6347-ab_tebhc_sbe_tebhc_zrffntr.";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:94:"1208:tebhccevingrzrffntr-48016onsp7s13r6orn69r9sp4894691sqq044555-ab_fraqre_sbe_tebhc_zrffntr.";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:95:"1208:tebhccevingrzrffntr-7808899p14p2o7o48o23rqq179q4q173spq50131-bayl_ybttrq-va_hfref_pna_ivrj";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:82:"1208:tebhccevingrzrffntr-4ns59009qr4p05p5oo746859511n14413515onq7-ab_fhpu_zrffntr.";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:82:"1208:tebhccevingrzrffntr-7q7q9oqq15qop1rr9r19p13o3oo206no59691ns0-tebhc_abg_sbhaq.";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:86:"1208:tebhccevingrzrffntr-479664q5p720n06po47s302q0spop6p36q2303rp-pnaabg_ernq_zrffntr.";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:82:"1208:tebhccevingrzrffntr-6roo67n23270071p438q5nsoq89n4qs474478n15-ab_fraqre_sbhaq.";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:95:"1208:tebhccevingrzrffntr-4035q69ppn59np015208p7srr03097398969o107-zrffntr_sebz_1$f_gb_tebhc_2$f";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:96:"1208:tebhccevingrzrffntr-79r78p23pqos061p81pps54nnor0or7n71n458sp-qverpg_zrffntr_gb_tebhc_f_frag";a:3:{i:0;R:37644;i:1;R:35355;i:2;R:37120;}s:56:"1208:vznc-7s2s6n15ps8qn2o27r5n4ns47o58r7nq71p0o3q9-reebe";a:3:{i:0;s:25:"out-statusnet-plugin-imap";i:1;R:35355;i:2;R:37120;}s:80:"1208:vznc-950nsp03p245o75s7n697ro4rpn77no1980s926n-vzncznantre_fubhyq_or_perngrq";a:3:{i:0;R:37695;i:1;R:35355;i:2;R:37120;}s:79:"1208:vznc-2q6p9958no6066n4qn3s9qo17rro2o3r5o5r5083-n_znvyobk_zhfg_or_fcrpvsvrq.";a:3:{i:0;R:37695;i:1;R:35355;i:2;R:37120;}s:76:"1208:vznc-s246n4s2pp6r8991q8n340rr22r977236r6r7s91-n_hfre_zhfg_or_fcrpvsvrq.";a:3:{i:0;R:37695;i:1;R:35355;i:2;R:37120;}s:80:"1208:vznc-6n2723144r0512rs13774r45145s22o547868no0-n_cnffjbeq_zhfg_or_fcrpvsvrq.";a:3:{i:0;R:37695;i:1;R:35355;i:2;R:37120;}s:81:"1208:vznc-753r73nso856315q0oprn32qnqpons9q0887r12s-n_cbyy_serdhrapl_zhfg_or_fcrpv";a:3:{i:0;R:37695;i:1;R:35355;i:2;R:37120;}s:81:"1208:vznc-7o8r5r93r487896749265840846005974oq54769-gur_vznc_cyhtva_nyybjf_sbe_fgn";a:3:{i:0;R:37695;i:1;R:35355;i:2;R:37120;}s:91:"1208:vasvavgrfpebyy-04578776np846012rp3p45n74qqs07622rq87470-vasvavgr_fpebyy_nqqf_gur_sbyyb";a:3:{i:0;s:35:"out-statusnet-plugin-infinitescroll";i:1;R:35355;i:2;R:37120;}s:91:"1208:vacebprffpnpur-q211524oqor61n041s54s9241op78pr250s4221q-nqqvgvbany_va-cebprff_pnpur_sb";a:3:{i:0;s:35:"out-statusnet-plugin-inprocesscache";i:1;R:35355;i:2;R:37120;}s:53:"1208:vep-n68sn8rsr4n09q8p0p63nr60426q9366434oppo2-vep";a:3:{i:0;s:24:"out-statusnet-plugin-irc";i:1;R:35355;i:2;R:37120;}s:80:"1208:vep-p8n008p2075s6qss2841sqn1n64p777q0onqns49-hfre_"_1$f"_ba_2$f_unf_fnvq_gu";a:3:{i:0;R:37707;i:1;R:35355;i:2;R:37120;}s:74:"1208:vep-p8q7r1r2s7232n76nspo4o55pr9680080744n15r-lbh_zhfg_fcrpvsl_n_ubfg.";a:3:{i:0;R:37707;i:1;R:35355;i:2;R:37120;}s:78:"1208:vep-93p3sn527n3qpq56q6981n082n98997q2758r102-lbh_zhfg_fcrpvsl_n_hfreanzr.";a:3:{i:0;R:37707;i:1;R:35355;i:2;R:37120;}s:80:"1208:vep-2257nn0p8o16305r7s09s42nn99859245q79so94-lbh_zhfg_fcrpvsl_n_"erny_anzr"";a:3:{i:0;R:37707;i:1;R:35355;i:2;R:37120;}s:78:"1208:vep-4622n6q07062s8o08nn73qsns158p18pso5so2p2-lbh_zhfg_fcrpvsl_n_avpxanzr.";a:3:{i:0;R:37707;i:1;R:35355;i:2;R:37120;}s:80:"1208:vep-o2qn4qq79s62n0025s6oqs53p8ronrs61qnpo789-gur_vep_cyhtva_nyybjf_hfref_gb";a:3:{i:0;R:37707;i:1;R:35355;i:2;R:37120;}s:80:"1208:vep-s597po4282q4pp116n4772s64sn0s4oor24q890o-pbhyq_abg_vaperzrag_nggrzcgf_p";a:3:{i:0;R:37707;i:1;R:35355;i:2;R:37120;}s:80:"1208:vep-onn0n297n79574q86o477s8s804o9qpsnr3s3262-lbhe_avpxanzr_vf_abg_ertvfgrer";a:3:{i:0;R:37707;i:1;R:35355;i:2;R:37120;}s:80:"1208:vep-90qqp8681prnq1n8071n37o9o28n4865qp36s8qr-pbhyq_abg_qryrgr_pbasvezngvba.";a:3:{i:0;R:37707;i:1;R:35355;i:2;R:37120;}s:80:"1208:vep-677r1s660qqr1o9noo581n621168649oo12359rr-qngnonfr_reebe_vafregvat_vep_j";a:3:{i:0;R:37707;i:1;R:35355;i:2;R:37120;}s:95:"1208:yqncnhguragvpngvba-96644r0p4oq6q83o191p65362r976sn8s51ps7s5-lbh_zhfg_fcrpvsl_n_avpxanzr_ng";a:3:{i:0;s:39:"out-statusnet-plugin-ldapauthentication";i:1;R:35355;i:2;R:37120;}s:95:"1208:yqncnhguragvpngvba-0s02o9n58409pq51r50n9s56216ronp8374nqq94-vs_cnffjbeq_punatrnoyr_vf_frg,";a:3:{i:0;R:37719;i:1;R:35355;i:2;R:37120;}s:95:"1208:yqncnhguragvpngvba-61q71p0n40749pnq0ro97087p9po4q8253rq68s3-qb_lbh_unir_na_yqnc_nppbhag?_h";a:3:{i:0;R:37719;i:1;R:35355;i:2;R:37120;}s:95:"1208:yqncnhguragvpngvba-r05p0s896nr7n24r17ss38n0s9p89on66o40o088-gur_yqnc_nhguragvpngvba_cyhtva";a:3:{i:0;R:37719;i:1;R:35355;i:2;R:37120;}s:94:"1208:yqncnhgubevmngvba-8406r535pq00989r24p2p818750910qq8ro26p40-cebivqre_anzr_zhfg_or_frg._hfr";a:3:{i:0;s:38:"out-statusnet-plugin-ldapauthorization";i:1;R:35355;i:2;R:37120;}s:94:"1208:yqncnhgubevmngvba-4ss668ros5r1n4o60q24noq0533p36o5qs4or36o-havdhrzrzore_nggevohgr_zhfg_or";a:3:{i:0;R:37724;i:1;R:35355;i:2;R:37120;}s:93:"1208:yqncnhgubevmngvba-4r42o9o5854opnq70p9pr4s63q55so2s3qp39q49-gur_yqnc_nhgubevmngvba_cyhtva";a:3:{i:0;R:37724;i:1;R:35355;i:2;R:37120;}s:82:"1208:yqncpbzzba-9341oqp4os9p235r8970851521586n172n4rqo4s-n_ubfg_zhfg_or_fcrpvsvrq.";a:3:{i:0;s:31:"out-statusnet-plugin-ldapcommon";i:1;R:35355;i:2;R:37120;}s:84:"1208:yqncpbzzba-1r02227223762p8so802884pn986302550r45771-"onfrqa"_zhfg_or_fcrpvsvrq.";a:3:{i:0;R:37728;i:1;R:35355;i:2;R:37120;}s:87:"1208:yqncpbzzba-np3spo8r6p20n3850434pqs769883pqq74459p07-gur_hfreanzr_nggevohgr_zhfg_or";a:3:{i:0;R:37728;i:1;R:35355;i:2;R:37120;}s:87:"1208:yqncpbzzba-2q37902536rrq8q50roo692o8907p6n232so2ps8-pbhyq_abg_pbaarpg_gb_yqnc_frei";a:3:{i:0;R:37728;i:1;R:35355;i:2;R:37120;}s:87:"1208:yqncpbzzba-2s308oqo9r69s6opnspr5n43spnr169r37413o1p-pbhyq_abg_pbaarpg_gb_yqnc_frei";a:3:{i:0;R:37728;i:1;R:35355;i:2;R:37120;}s:83:"1208:yvyhey-1o66066pp18053nrr165on7r1sp3nn7qo84598nr-n_freivprhey_zhfg_or_fcrpvsvrq";a:3:{i:0;s:27:"out-statusnet-plugin-lilurl";i:1;R:35355;i:2;R:37120;}s:82:"1208:yvyhey-4onp8np0p1o38q73219so01r51oq6ps869o58946-hfrf_n_uers="uggc_1$f_"_1$f_n";a:3:{i:0;R:37734;i:1;R:35355;i:2;R:37120;}s:74:"1208:yvaxonpx-7817q236r6spoq18q9q6q65qs29o4694np1n0053-1$f'f_fgnghf_ba_2$f";a:3:{i:0;s:29:"out-statusnet-plugin-linkback";i:1;R:35355;i:2;R:37120;}s:85:"1208:yvaxonpx-on2o62q5q44pnrrrr4320s92454ro0908n0pq95p-abgvsl_oybt_nhgubef_jura_gurve";a:3:{i:0;R:37737;i:1;R:35355;i:2;R:37120;}s:88:"1208:yvaxcerivrj-r896rn99r35r96p1s66n5n5440n54o263846sr06-hv_rkgrafvba_sbe_cerivrjvat_gu";a:3:{i:0;s:32:"out-statusnet-plugin-linkpreview";i:1;R:35355;i:2;R:37120;}s:87:"1208:yvaxcerivrj-07363q7qop93q7r4q63rpr8np5r72os52qq64506-gurer_jnf_n_ceboyrz_jvgu_lbhe";a:3:{i:0;R:37740;i:1;R:35355;i:2;R:37120;}s:88:"1208:yvaxcerivrj-o1861600o4o4556p6r37r59pnr1965r003rn54r1-vainyvq_sbezng;_bayl_wfba_fhcc";a:3:{i:0;R:37740;i:1;R:35355;i:2;R:37120;}s:70:"1208:yvaxcerivrj-4479onps0p412586qo80r97022266qp0n385927r-vainyvq_hey.";a:3:{i:0;R:37740;i:1;R:35355;i:2;R:37120;}s:86:"1208:ybtsvygre-6oq072r94qs265n504302229n2ro0q74s0s33ors-cebivqrf_freire-fvqr_frggvat_g";a:3:{i:0;s:30:"out-statusnet-plugin-logfilter";i:1;R:35355;i:2;R:37120;}s:62:"1208:zncfgenpgvba-no478s3rsp840rrono919qss1o9512286s70p10p-znc";a:3:{i:0;s:33:"out-statusnet-plugin-mapstraction";i:1;R:35355;i:2;R:37120;}s:68:"1208:zncfgenpgvba-3o7o17n9278o4oq4p1os7q48n5q7s54sss51q1n2-shyy_fvmr";a:3:{i:0;R:37747;i:1;R:35355;i:2;R:37120;}s:89:"1208:zncfgenpgvba-op8q0q0rrr30np76r28qo55on19qs36633o962rs-fubj_zncf_bs_hfref'_naq_sevraq";a:3:{i:0;R:37747;i:1;R:35355;i:2;R:37120;}s:72:"1208:zncfgenpgvba-q7p2qo9pq7659ns98881ro29s73no5n6r4ssr216-f_sevraqf_znc";a:3:{i:0;R:37747;i:1;R:35355;i:2;R:37120;}s:84:"1208:zncfgenpgvba-n96qp38005pq45q06734on2n0s35q496q2qr3062-1$f_sevraqf_znc,_cntr_2$q";a:3:{i:0;R:37747;i:1;R:35355;i:2;R:37120;}s:72:"1208:zncfgenpgvba-os5q92pp3p1sn7p0r35o2r97q4719743n0841009-ab_fhpu_hfre.";a:3:{i:0;R:37747;i:1;R:35355;i:2;R:37120;}s:79:"1208:zncfgenpgvba-993n855qpq4p17oq2qn52s82496164o0s7s8r50r-hfre_unf_ab_cebsvyr.";a:3:{i:0;R:37747;i:1;R:35355;i:2;R:37120;}s:64:"1208:zncfgenpgvba-1rpo811s7p38p76srrs12psqn636s9p9104s9903-f_znc";a:3:{i:0;R:37747;i:1;R:35355;i:2;R:37120;}s:85:"1208:zrzpnpur-ps14orq3n7893pn5o23r460o8o88s1180n54rroq-hfr_n_uers="uggc_zrzpnpurq.bet";a:3:{i:0;s:29:"out-statusnet-plugin-memcache";i:1;R:35355;i:2;R:37120;}s:86:"1208:zrzpnpurq-ps14orq3n7893pn5o23r460o8o88s1180n54rroq-hfr_n_uers="uggc_zrzpnpurq.bet";a:3:{i:0;s:30:"out-statusnet-plugin-memcached";i:1;R:35355;i:2;R:37120;}s:83:"1208:zrgrbe-03s159253n4po03s57nqs4q43ppr5540p780n5so-pbhyq_abg_pbaarpg_gb_1$f_ba_2$";a:3:{i:0;s:27:"out-statusnet-plugin-meteor";i:1;R:35355;i:2;R:37120;}s:82:"1208:zrgrbe-ospnp962no4qo028qs09rqr875243o135s1soqpr-reebe_nqqvat_zrgrbe_zrffntr_"";a:3:{i:0;R:37760;i:1;R:35355;i:2;R:37120;}s:83:"1208:zrgrbe-548p28392r194r999so3ro1qp0q571o93q2q7968-cyhtva_gb_qb_"erny_gvzr"_hcqng";a:3:{i:0;R:37760;i:1;R:35355;i:2;R:37120;}s:83:"1208:zvavsl-p7q403or16455o6p9onnss34n3851orrn96o1n6o-gur_zvavsl_cyhtva_zvavsvrf_fgn";a:3:{i:0;s:27:"out-statusnet-plugin-minify";i:1;R:35355;i:2;R:37120;}s:83:"1208:zvavsl-26p39961785943q8rn74o37nr2r4r3068sn7s9q5-gur_cnenzrgre_"s"_vf_abg_n_iny";a:3:{i:0;R:37764;i:1;R:35355;i:2;R:37120;}s:82:"1208:zvavsl-6700863sn49r4on40spo629oo5114q953s86677q-gur_cnenzrgre_"s"_vf_erdhverq";a:3:{i:0;R:37764;i:1;R:35355;i:2;R:37120;}s:77:"1208:zvavsl-82r1n0p795o4o4r9qr874290s8r88p71n9n913rq-svyr_glcr_abg_fhccbegrq.";a:3:{i:0;R:37764;i:1;R:35355;i:2;R:37120;}s:89:"1208:zbovyrcebsvyr-7rp13q4nq9n8575o619sr142sq3o5893on2305sn-guvf_cntr_vf_abg_ninvynoyr_va";a:3:{i:0;s:34:"out-statusnet-plugin-mobileprofile";i:1;R:35355;i:2;R:37120;}s:90:"1208:zbovyrcebsvyr-6s9p4n22poq5qn7rqp8o21370n6o5170s163r9r8-fjvgpu_gb_qrfxgbc_fvgr_ynlbhg.";a:3:{i:0;R:37769;i:1;R:35355;i:2;R:37120;}s:89:"1208:zbovyrcebsvyr-6onp7q8025rq27rn0s95pqq3p52pq07pn0p827p2-fjvgpu_gb_zbovyr_fvgr_ynlbhg.";a:3:{i:0;R:37769;i:1;R:35355;i:2;R:37120;}s:90:"1208:zbovyrcebsvyr-or8qno7sss816orq7044o66n8q157586npnss07q-kugzy_zbovyrcebsvyr_bhgchg_sbe";a:3:{i:0;R:37769;i:1;R:35355;i:2;R:37120;}s:86:"1208:zbqurycre-8r18r080p9o60746470oo5psr9psrqr55po0572s-yrgf_hfref_jub_unir_orra_znahn";a:3:{i:0;s:30:"out-statusnet-plugin-modhelper";i:1;R:35355;i:2;R:37120;}s:74:"1208:zbqcyhf-993n855qpq4p17oq2qn52s82496164o0s7s8r50r-hfre_unf_ab_cebsvyr.";a:3:{i:0;s:28:"out-statusnet-plugin-modplus";i:1;R:35355;i:2;R:37120;}s:64:"1208:zbqcyhf-105q6r4o9o834932rrpsnp4s42201905on5on3op-1$f_ba_2$f";a:3:{i:0;R:37776;i:1;R:35355;i:2;R:37120;}s:84:"1208:zbqcyhf-595r2n6484onsqp02s18os8791q0n61573rn207n-guvf_erzbgr_cebsvyr_vf_ertvfgr";a:3:{i:0;R:37776;i:1;R:35355;i:2;R:37120;}s:83:"1208:zbqcyhf-00q514943q45r1q170067307s0sq71424p33q29p-fvgr_zbqrengbef_unir_fvyraprq";a:3:{i:0;R:37776;i:1;R:35355;i:2;R:37120;}s:84:"1208:zbqcyhf-7sp13qoo04sn0r02156s1946oso36sn301r7279q-hv_rkgrafvba_sbe_cebsvyr_zbqre";a:3:{i:0;R:37776;i:1;R:35355;i:2;R:37120;}s:79:"1208:zbqcyhf-9n6qo42s8769231rr940o590520367q189715213-erzbgr_cebsvyr_bcgvbaf...";a:3:{i:0;R:37776;i:1;R:35355;i:2;R:37120;}s:67:"1208:zbyybz-n212280514n8q5548sp8r591prpnn870os3o41o1-fcnz_qrgrpgrq.";a:3:{i:0;s:27:"out-statusnet-plugin-mollom";i:1;R:35355;i:2;R:37120;}s:80:"1208:zfa-176pq70p9011srns9s1r59n8rs0p902sqr26rp89-fraq_zr_n_zrffntr_gb_cbfg_n_ab";a:3:{i:0;s:24:"out-statusnet-plugin-msn";i:1;R:35355;i:2;R:37120;}s:80:"1208:zfa-s8s7497nq20917sn5sp8on9op2os3r59s44q7p66-qngnonfr_reebe_vafregvat_dhrhr";a:3:{i:0;R:37785;i:1;R:35355;i:2;R:37120;}s:53:"1208:zfa-s2o393r855no3n9833or975qs39258q992071369-zfa";a:3:{i:0;R:37785;i:1;R:35355;i:2;R:37120;}s:70:"1208:zfa-q6s0sno179n448q168432r3poorp2710rp8n7707-zhfg_fcrpvsl_n_hfre.";a:3:{i:0;R:37785;i:1;R:35355;i:2;R:37120;}s:74:"1208:zfa-603894091956qrqn39p52p5998nr06638qq7s4s3-zhfg_fcrpvsl_n_cnffjbeq.";a:3:{i:0;R:37785;i:1;R:35355;i:2;R:37120;}s:74:"1208:zfa-56onq35826o898o761705q6p6r6sq86q87656o51-zhfg_fcrpvsl_n_avpxanzr.";a:3:{i:0;R:37785;i:1;R:35355;i:2;R:37120;}s:80:"1208:zfa-02q9063no01qr1653s2r1pr9sn2r7p395sr9n9o0-gur_zfa_cyhtva_nyybjf_hfref_gb";a:3:{i:0;R:37785;i:1;R:35355;i:2;R:37120;}s:88:"1208:abgvprgvgyr-36rq8sns6565r77nn6s86srrrpnno54n035o05rp-nqqf_bcgvbany_gvgyrf_gb_abgvpr";a:3:{i:0;s:32:"out-statusnet-plugin-noticetitle";i:1;R:35355;i:2;R:37120;}s:87:"1208:abgvprgvgyr-o857482q71s182880n53s9p4n94s544qr551rq82-cyheny_trggrkg_gur_abgvpr_gvg";a:3:{i:0;R:37793;i:1;R:35355;i:2;R:37120;}s:67:"1208:abgvprgvgyr-59s6071op1r36q16oq4735p7781p734q7or14572-1$f_-_2$f";a:3:{i:0;R:37793;i:1;R:35355;i:2;R:37120;}s:59:"1208:bzo-7q3768264so28s658osn8q6p8os4n992p62o5772-fhofpevor";a:3:{i:0;s:24:"out-statusnet-plugin-omb";i:1;R:35355;i:2;R:37120;}s:56:"1208:bzo-8s71r98756779sr804p9006r12285n4q482038p9-npprcg";a:3:{i:0;R:37797;i:1;R:35355;i:2;R:37120;}s:56:"1208:bzo-2p602588037pp364232n4norp0r7997s9o6qs8qo-erwrpg";a:3:{i:0;R:37797;i:1;R:35355;i:2;R:37120;}s:80:"1208:bzo-7s97426qr9268o8o423n8q1sqn973rqr66o196r5-lbh_pnaabg_fhofpevor_gb_na_bzo";a:3:{i:0;R:37797;i:1;R:35355;i:2;R:37120;}s:80:"1208:bzo-po0572n577n617172o1o991ns5p11on679o18r2p-lbh_pnaabg_yvfg_na_bzo_0.1_erz";a:3:{i:0;R:37797;i:1;R:35355;i:2;R:37120;}s:80:"1208:bzo-p397p568882qn6460o23227140rnnp28nsop4n10-lbh_pnaabg_(ha)yvfg_na_bzo_0.1";a:3:{i:0;R:37797;i:1;R:35355;i:2;R:37120;}s:79:"1208:bzo-0719707q8937pssr3p9rr29os24q30662p7q78o0-pbhyq_abg_qryrgr_fhofpevcgvba";a:3:{i:0;R:37797;i:1;R:35355;i:2;R:37120;}s:80:"1208:bzo-65s2186q29757r681577n7q2os02s2rn496q722q-n_fnzcyr_cyhtva_gb_fubj_onfvpf";a:3:{i:0;R:37797;i:1;R:35355;i:2;R:37120;}s:99:"1208:bcrarkgreanyyvaxgnetrg-nnop4s9n0r0q49p6311543104r246q0345pn58o9-bcraf_rkgreany_yvaxf_(v.r._jvg";a:3:{i:0;s:43:"out-statusnet-plugin-openexternallinktarget";i:1;R:35355;i:2;R:37120;}s:81:"1208:bcravq-5n8q197q2ps854o187593846q832qr1206q73n9p-bcravq_vqragvgl_irevsvpngvba";a:3:{i:0;s:27:"out-statusnet-plugin-openid";i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-93s5205snr171orq0270763n20182517o1p3os1n-guvf_cntr_fubhyq_bayl_or_ernpu";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:82:"1208:bcravq-2n637o03nr2qson8o244r150372489120r3srq46-f_unf_nfxrq_gb_irevsl_lbhe_vq";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:61:"1208:bcravq-47q80or3ro9761p60rnq0914r890449394r75pss-pbagvahr";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:59:"1208:bcravq-08or17603r6624rs0r43so8p8q30so8rq74pp6so-pnapry";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:72:"1208:bcravq-qs90sns2r24293o614756215so8s256q75p9r1pp-haninvynoyr_npgvba.";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:71:"1208:bcravq-9p6658qr7pq04pp3607n3507r30nsn28o31ss267-ybtva_gb_gur_fvgr.";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:58:"1208:bcravq-101p5o3380qs50s8272pqn033r485n7407894np4-ybtva";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:61:"1208:bcravq-1s6p8r9s7qp62non548ooo04817s68n16nn33q00-uryc_zr!";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:57:"1208:bcravq-502p2509077q187q0q39ss8398227non70n9rq8r-uryc";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:79:"1208:bcravq-80n823889p9pp59oqrq651059608n09n59s1165q-frnepu_sbe_crbcyr_be_grkg.";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:59:"1208:bcravq-o61srqoqo869nop7892o98s6857oqronn05s433q-frnepu";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:59:"1208:bcravq-11on792p1o37r37s6r10s21448r5np3no1sr88sq-bcravq";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-652023n68s94720p8ro2234s402pn595756q8or4-ybtva_be_ertvfgre_jvgu_bcravq.";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:75:"1208:bcravq-2716n97583o5p73932prp89184qo6046q4p580r0-nqq_be_erzbir_bcravqf.";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-5qs15q898n8pr68505soro4s3p74o0sq41q81650-(unir_na_bcravq_(uggc_bcravq.a";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-2578p0nn851qs3554o841s799qqq6so8r23p4300-(unir_na_bcravq_(uggc_bcravq.a";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-r43s4080s691ps742rqq05r2s1srpo3255122355-(unir_na_bcravq_(uggc_bcravq.a";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:74:"1208:bcravq-o48qo1ropo133r1s88p0833q115q5076rso6n3oo-bcravq_pbasvthengvba.";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:82:"1208:bcravq-3n537q87483o810qr997s621s82697p5430s1355-hfr_n_uers="uggc_bcravq.arg_"";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:65:"1208:bcravq-380610s1720987rrq1o0pn12ss73p879139sp098-bcravq_ybtva";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:68:"1208:bcravq-sp6qn2n5r234o1747o1ro607s9611796836676n9-bcravq_cebivqre";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:73:"1208:bcravq-3q29qpp84297741n72sp8o70r548nqps95sr9270-ragre_lbhe_hfreanzr.";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-55rns7q151p2r273534758q68pn6o98nn92r7prq-lbh_jvyy_or_frag_gb_gur_cebivq";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:63:"1208:bcravq-10691n643296887on5nn51prp5qr3o8p46o31592-bcravq_hey";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:69:"1208:bcravq-4nn8805n69481sq28370n916q2n3nq4304qqss61-lbhe_bcravq_hey.";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:71:"1208:bcravq-sooosr3331rqo0p2pr74ors6s8q5749p52p3017o-nyernql_ybttrq_va.";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:82:"1208:bcravq-07363q7qop93q7r4q63rpr8np5r72os52qq64506-gurer_jnf_n_ceboyrz_jvgu_lbhe";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:82:"1208:bcravq-01r682rs71prqoq33o744626rp870qq46s6n2210-lbh_pnaabg_ertvfgre_vs_lbh_qb";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:82:"1208:bcravq-840263496758n8sp56392op36qpo7p620n4oq242-na_haxabja_reebe_unf_bppherq.";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-8r725po160o1o9o4r4r1r4nr7q7r7p3318qp411r-guvf_vf_gur_svefg_gvzr_lbh_uni";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:73:"1208:bcravq-93031no8q39p136n35n46210p61542pon45q79o9-bcravq_nppbhag_frghc";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:71:"1208:bcravq-n7oss9684r9p4so2o0187pq81972n1n99249s393-perngr_arj_nppbhag";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-84s3905p73s0943qq56o4p5qor015s0s975p30p2-perngr_n_arj_hfre_jvgu_guvf_av";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:65:"1208:bcravq-3n4rnnq2so5628204ro54po59p8q56onnp637s07-arj_avpxanzr";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-2q5ns6n79p80o154ors7q5ss52q6qo27755r287s-1-64_ybjrepnfr_yrggref_be_ahzo";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:58:"1208:bcravq-84nqq5o2952787581po9n8851rrs63q1rp75q22o-rznvy";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-8o8s6qo0r466os3os17q8370672093s3spr41126-hfrq_bayl_sbe_hcqngrf,_naabhap";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-1p2574o14145598p6sn33pp45425952463977prp-zl_grkg_naq_svyrf_ner_ninvynoy";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:59:"1208:bcravq-739o11519q45061op93s4q38854460rps67n6429-perngr";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:77:"1208:bcravq-o775o749217q4r734on81r0093n20oonp8185801-pbaarpg_rkvfgvat_nppbhag";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-9757r41q57148p92n73534qp61899qn0rs2qs038-vs_lbh_nyernql_unir_na_nppbhag";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:70:"1208:bcravq-03o13q9s66r7s2n94s311n5146p474184s490258-rkvfgvat_avpxanzr";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:61:"1208:bcravq-8or3p943o1609sssosp51nnq666q0n04nqs83p9q-cnffjbeq";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:60:"1208:bcravq-ro508s5905o6s621060r2p063srqo41o040rr0op-pbaarpg";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-830nr36p85s41451rr06q64po51803qs70qo27o8-bcravq_nhguragvpngvba_pnapryyr";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-nr98rp4r30r86rr05q694p9s1qs7rnrq8o191426-bcravq_nhguragvpngvba_snvyrq_f";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:82:"1208:bcravq-82r522pn744q5871q8pqq5912p0n03r63nsoq14s-bcravq_nhguragvpngvba_nobegrq";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:78:"1208:bcravq-38pop2o2241ss6r84oq71264noq0o941448r5s11-ertvfgengvba_abg_nyybjrq.";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:81:"1208:bcravq-q496nrsq2qq8r3o02n2rs17n7667p75on1sq5rpn-abg_n_inyvq_vaivgngvba_pbqr.";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:74:"1208:bcravq-ns99p57snp97957951os39669sq880418730sr8n-avpxanzr_abg_nyybjrq.";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-o3oq02o41o8r1sn2qr777on31so092onr01pppr7-avpxanzr_nyernql_va_hfr._gel_n";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:77:"1208:bcravq-1s45q385p7r481n6o9n2684505r2033192r102ps-fgberq_bcravq_abg_sbhaq.";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-q683o662p9s70sn6s12qo89440q53426n1n4pp49-perngvat_arj_nppbhag_sbe_bcrav";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:82:"1208:bcravq-0pp909or0s2qn4on1n41oo22noq333rr5q822722-vainyvq_hfreanzr_be_cnffjbeq.";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-n07p803s6ps055p7464sn32241qp0qn38s15s1o8-reebe_pbaarpgvat_hfre_gb_bcrav";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-ns82148qr80r34p6r4osq04rq58241qn32pn966n-pnaabg_vafgnagvngr_bcravq_pbaf";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:72:"1208:bcravq-257nop46sn43p1sq39n8p8o86q6p36q510235p3s-abg_n_inyvq_bcravq.";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:70:"1208:bcravq-6r08026207opo7n2sn76prq7p36opr6780858962-bcravq_snvyher_f.";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-r37n16o943893nn57s0r9p1p57np733pnq593323-pbhyq_abg_erqverpg_gb_freire_f";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-3ssns4qs0p67433nr1s2so7637n038q1034rr139-guvf_sbez_fubhyq_nhgbzngvpnyyl";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:78:"1208:bcravq-r30o73nos74247rp107nr4n13n6rnp231op503ss-reebe_fnivat_gur_cebsvyr.";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:75:"1208:bcravq-qq1330n942r04q0s774n52q9op8r4qror4q157o8-reebe_fnivat_gur_hfre.";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-9nsr1r49n87q51303o8s6r7301404sooo2583pp3-hanhgubevmrq_hey_hfrq_sbe_bcra";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:76:"1208:bcravq-483723q8o4289745qn82o317q6o732s38r322r17-bcravq_ybtva_fhozvffvba";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:82:"1208:bcravq-s374n3q81p03on22530qos2572p5s48rq376p14n-erdhrfgvat_nhgubevmngvba_sebz";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-2572oo72n3125721p39nr5po8513rns6s0rnp90s-vs_lbh_ner_abg_erqverpgrq_gb_l";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:68:"1208:bcravq-pppoqrq49s8p0881rpnp52498rp18sp9386rr1rp-bcravq_frggvatf";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:68:"1208:bcravq-675282r12nr976q0rr4r21q1n7p6pn0n11327665-bcravq_frggvatf";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:82:"1208:bcravq-441qo1776084261162o118r1n812q13rn08993r4-vainyvq_cebivqre_hey._znkvzhz";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-351016n6o8ppr8s91n1p00112p08ps116po00q51-vainyvq_grnz_anzr._znkvzhz_yra";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:69:"1208:bcravq-5o493s1ssop18426147459rr1409pss043s8090q-gehfgrq_cebivqre";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:82:"1208:bcravq-9s9ppp188o116ro8n2r9347s73op4q822q25nprr-ol_qrsnhyg,_hfref_ner_nyybjrq";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:65:"1208:bcravq-qr1s83r4n8n34q9233699s84729pnpn28208555q-cebivqre_hey";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-n601q218ss1474p6nr1o577n66n3sossnqq303q2-nyy_bcravq_ybtvaf_jvyy_or_frag";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:82:"1208:bcravq-n5pn6os7r2p873r113opp8131n765881980q6175-nccraq_n_hfreanzr_gb_onfr_hey";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:82:"1208:bcravq-65446n8994p019p9p5781rq4s772275258968orp-ybtva_sbez_jvyy_fubj_gur_onfr";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:66:"1208:bcravq-53n83574qqq391r778o772s2noq04n8ns46316r3-erdhverq_grnz";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-3n828os6557854375r1s466r8sp4277n05p2n12q-bayl_nyybj_ybtvaf_sebz_hfref_v";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:60:"1208:bcravq-6756269q25n095npn8s423090qq88p1n8n592oo4-bcgvbaf";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:76:"1208:bcravq-160s43968n8q4oo13s9s3s36944r69nnp10q0n4q-ranoyr_bcravq-bayl_zbqr";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-s2pn660519q5482os7p19r558558s3por413q016-erdhver_nyy_hfref_gb_ybtva_ivn";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:57:"1208:bcravq-r85726o34723718q86rro40no996r21219883557-fnir";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:74:"1208:bcravq-03q4p9s0rponsn10r34q84q6rsp86rnn512qo77n-fnir_bcravq_frggvatf.";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:67:"1208:bcravq-8r2qr1r8o1ns7pq2o403oq0q27p71332n55np628-abg_ybttrq_va.";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:82:"1208:bcravq-so650282607p544q29s638n32048q0o962q0nn95-lbh_nyernql_unir_guvf_bcravq!";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:82:"1208:bcravq-rq2r5q303944psop6o5o3op34s957484o80q9p79-fbzrbar_ryfr_nyernql_unf_guvf";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:75:"1208:bcravq-4qrr9q3q07s1n82sn1272qo4ps6776235o3884r9-reebe_pbaarpgvat_hfre.";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:76:"1208:bcravq-soq14o4nnp546s13p679n60o5sn1rs08s5qo67rp-reebe_hcqngvat_cebsvyr.";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:65:"1208:bcravq-r58ppn408o0q88s98p929q734r5q7p8849n02p8o-bcravq_ybtva";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:68:"1208:bcravq-222r16p3n4183on37q97529n1so0n791477p7r9p-bcravq_frggvatf";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:82:"1208:bcravq-21ss53303s80948s06s0r1sp75p2rp04ppn8o544-bcravq_(_qbp.bcravq_)_yrgf_lb";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:63:"1208:bcravq-319qnq068pros4235s174or68358qp88nq7pos44-nqq_bcravq";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-o847op940q810833183op09op7n9q9nnp182nqq4-vs_lbh_jnag_gb_nqq_na_bcravq_g";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:56:"1208:bcravq-r1562srq201p341pr7oq08o9pq421s3o379222o8-nqq";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:66:"1208:bcravq-4174q587250151046n36r8r2o16o07n0nss9r535-erzbir_bcravq";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-37n9r1533n9oorrn628n951q6q8r296789no8s08-erzbivat_lbhe_bayl_bcravq_jbhy";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:82:"1208:bcravq-rso85ro0234s6n6313s14785op62pn97q7so581s-lbh_pna_erzbir_na_bcravq_sebz";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:59:"1208:bcravq-939roon8n23ns24qrn8r62329r27r07qo38p49q9-erzbir";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:73:"1208:bcravq-66s78270s553orsn099sro8528p34924n5oq68qo-bcravq_gehfgrq_fvgrf";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-8s744r10s0q86n958690nr66r5r1p046r343n603-gur_sbyybjvat_fvgrf_ner_nyybjr";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:78:"1208:bcravq-ppo272806n34os602855np92782rn016144qn166-pnaabg_nqq_arj_cebivqref.";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:78:"1208:bcravq-674s224854rps6s0s452r50r257pp88p27pp9189-fbzrguvat_jrveq_unccrarq.";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:78:"1208:bcravq-4nr5rr49058p19o0n3os1pp192315n14942s4q21-ab_fhpu_bcravq_gehfgebbg.";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:72:"1208:bcravq-so10101noss474n6883oq8noo1rr776n0oo437qr-gehfgebbgf_erzbirq.";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:68:"1208:bcravq-6439s123440oo18rr92o6npqp831ro97n518qn96-ab_fhpu_bcravq.";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-07q75p77903r46r6r175ps22qn895r4n4nn38763-gung_bcravq_qbrf_abg_orybat_gb";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:68:"1208:bcravq-6s096q4p430r9340qp12o8756s0p1784s98pp0nr-bcravq_erzbirq.";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:82:"1208:bcravq-spo516o840ssn6o4oq9o00r6rr0s3954q4p0n534-lbh_ner_abg_nhgubevmrq_gb_hfr";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-4r802407142o97537448s98ossp70s8q2p1oonp6-whfg_na_bcravq_cebivqre._abguv";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-24r9n703779q506pq758p38s1n8s28p44n3p0rs9-sbe_frphevgl_ernfbaf,_cyrnfr_e";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-21863n636p7n2q74018n96s42324o9051psnn5so-ybtva_jvgu_na_bcravq_(_qbp.bcr";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:65:"1208:bcravq-6s66828po46no6s827o5r564nsr8n4q8ps54n3nn-bcravq_ybtva";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:68:"1208:bcravq-71978qs18s7sppn1qo2r1797n11461srrs1s826r-bcravq_cebivqre";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:64:"1208:bcravq-prq7o308n348567sos21qq775rr496qq01207s24-erzrzore_zr";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:83:"1208:bcravq-os8p97r9743990n3soq075r5r2r44n7417rpp9n1-nhgbzngvpnyyl_ybtva_va_gur_shg";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:58:"1208:bcravq-rpr2qn368s3p0r7n56538p0472r4p9940qqn4qq4-ybtva";a:3:{i:0;R:37808;i:1;R:35355;i:2;R:37120;}s:72:"1208:bcrak-321s2p63549p46r3nn9ossnr43n0pn07n1q65204-bcrak_pbasvthengvba.";a:3:{i:0;s:26:"out-statusnet-plugin-openx";i:1;R:35355;i:2;R:37120;}s:57:"1208:bcrak-o7s62800r2soqqpp849873359pp67n135nppr303-bcrak";a:3:{i:0;R:37926;i:1;R:35355;i:2;R:37120;}s:82:"1208:bcrak-np9s169r6o6q2n832r89o95p2o4r833s8n5rpsr6-cyhtva_sbe_n_uers="uggc_jjj.bc";a:3:{i:0;R:37926;i:1;R:35355;i:2;R:37120;}s:57:"1208:bcrak-s976q54snp140r1517r251r52o14sq5n2r82s1np-bcrak";a:3:{i:0;R:37926;i:1;R:35355;i:2;R:37120;}s:82:"1208:bcrak-3pr352q15pq62730p8382s78n3o69p46r5po9s1p-bcrak_frggvatf_sbe_guvf_fgnghf";a:3:{i:0;R:37926;i:1;R:35355;i:2;R:37120;}s:65:"1208:bcrak-sqoppqrr31q606p5nno296r9ppqp8n5s74r1rpo7-nq_fpevcg_hey";a:3:{i:0;R:37926;i:1;R:35355;i:2;R:37120;}s:62:"1208:bcrak-5971npq9p189p435298p5q42s457s5462s9957r5-fpevcg_hey";a:3:{i:0;R:37926;i:1;R:35355;i:2;R:37120;}s:68:"1208:bcrak-06o35524844ro810np22qso413p9ono31ro4np15-zrqvhz_erpgnatyr";a:3:{i:0;R:37926;i:1;R:35355;i:2;R:37120;}s:73:"1208:bcrak-r36pns37no2os59rn8r23oo416ppsq6o6pop28pp-zrqvhz_erpgnatyr_mbar";a:3:{i:0;R:37926;i:1;R:35355;i:2;R:37120;}s:61:"1208:bcrak-p158695n64nqo40952p1ps9sqr78o62oq6147s42-erpgnatyr";a:3:{i:0;R:37926;i:1;R:35355;i:2;R:37120;}s:66:"1208:bcrak-qrpo5o1749q6n643716n987n4n52r8r92pq55n9p-erpgnatyr_mbar";a:3:{i:0;R:37926;i:1;R:35355;i:2;R:37120;}s:63:"1208:bcrak-0381247n698736sr9930328n814r5263rrss72sq-yrnqreobneq";a:3:{i:0;R:37926;i:1;R:35355;i:2;R:37120;}s:68:"1208:bcrak-7p196p8qp7o325p066p397sn6por0rrq7s509194-yrnqreobneq_mbar";a:3:{i:0;R:37926;i:1;R:35355;i:2;R:37120;}s:62:"1208:bcrak-4o842rp3492ns881n19q51873n4p15n90p3p029s-fxlfpencre";a:3:{i:0;R:37926;i:1;R:35355;i:2;R:37120;}s:72:"1208:bcrak-s78255036posp45ro300o1155p9p792o96088n1p-jvqr_fxlfpencre_mbar";a:3:{i:0;R:37926;i:1;R:35355;i:2;R:37120;}s:56:"1208:bcrak-r85726o34723718q86rro40no996r21219883557-fnir";a:3:{i:0;R:37926;i:1;R:35355;i:2;R:37120;}s:72:"1208:bcrak-1pp839nrp9oo9rq552818313o5499qn658829rno-fnir_bcrak_frggvatf.";a:3:{i:0;R:37926;i:1;R:35355;i:2;R:37120;}s:84:"1208:beovgrq-0ss0oo926o315sp5p29292qr4r1s8q306742r167-snvyrq_gb_pbaarpg_gb_dhrhr_fre";a:3:{i:0;s:28:"out-statusnet-plugin-orbited";i:1;R:35355;i:2;R:37120;}s:84:"1208:beovgrq-5pqqqr18037s48osp25qnsp0573pq3p8509so870-cyhtva_gb_znxr_hcqngrf_hfvat_b";a:3:{i:0;R:37944;i:1;R:35355;i:2;R:37120;}s:59:"1208:bfgnghf-ssr8r99492rr9o850395q53s6p519938952sqr0q-srrqf";a:3:{i:0;s:28:"out-statusnet-plugin-ostatus";i:1;R:35355;i:2;R:37120;}s:63:"1208:bfgnghf-q6981s74767q6p63q6062nq21o3oqspq0q0q6602-fhofpevor";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:73:"1208:bfgnghf-2229780s414rq51226rs03n538pqqnoo475q4on6-yvfg_erzbgr_cebsvyr";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:68:"1208:bfgnghf-q45rp363rn6s309o496rn40n77s2658s7556n537-erzbgr_cebsvyr";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-qp1p10ro3ssq99094045s213sn4r9or237qonq2p-bfgnghf_hfre'f_nqqerff,_yvxr_a";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:59:"1208:bfgnghf-35543ps3943q8q462nq05s0sqq4n579rps1oq0qn-srgpu";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:66:"1208:bfgnghf-818rqso8p48rnq4560929po27308426n745sr359-vainyvq_hev.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-p6ss738s16477qs93765rpqsos186r94prp4nrn5-fbeel,_jr_pbhyq_abg_ernpu_gung";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:77:"1208:bfgnghf-54p25oo8o9nr26549389r3p40n30920nr592pqs3-frag_sebz_f_ivn_bfgnghf";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-q821995409os6n8q3oqqr83qss4rq07no66100qs-pbhyq_abg_frg_hc_erzbgr_fhofpe";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:62:"1208:bfgnghf-43n7nn1q937550150339631s00870s30r36q4p7o-hasbyybj";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:80:"1208:bfgnghf-7rq30745q502646912orrps5o812pqo8nn13n2o3-1$f_fgbccrq_sbyybjvat_2$f.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:83:"1208:bfgnghf-255s2o9q5p456o98s0817028369p392rs7677695-pbhyq_abg_frg_hc_erzbgr_tebhc";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:58:"1208:bfgnghf-5410069222n680q6o0n930459pqossnp2176n674-wbva";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:79:"1208:bfgnghf-p4s38n7072nr842sqq4104pron8558n992157rn1-1$f_unf_wbvarq_tebhc_2$f.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:82:"1208:bfgnghf-po6942q648343s3110588985476064s3pn4q2835-snvyrq_wbvavat_erzbgr_tebhc.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:59:"1208:bfgnghf-7s2q9q87723s5qq0o170r1nn1999r9q585pnq15q-yrnir";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:77:"1208:bfgnghf-5sp229oq90s321p2789n5sq1oqo7493osqoo0541-1$f_unf_yrsg_tebhc_2$f.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-8152o90qrp4818nr481r74155oqrrp3soo3nr547-pbhyq_abg_frg_hc_erzbgr_yvfg_f";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:65:"1208:bfgnghf-p1qo1757o2o3on12n7s9n070o3os919s9qo56oqr-sbyybj_yvfg";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:83:"1208:bfgnghf-12sqpp55061370ooorn47prn7p98o5rp51053qn8-1$f_vf_abj_sbyybjvat_crbcyr_y";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-p5268s7pps01q3pqq5s6sp88q751369qo1r47r2o-snvyrq_fhofpevovat_gb_erzbgr_y";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:67:"1208:bfgnghf-61rs108p55rpq9516r3pqq2qs01n9poo5n662or4-hasbyybj_yvfg";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:83:"1208:bfgnghf-7r3q1623173723q59596n30o70s58os5sqo9p371-1$f_fgbccrq_sbyybjvat_gur_yvf";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:58:"1208:bfgnghf-5133r006p6rq2p734or7q4pq547n5qs3qp60pp31-yvfg";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:83:"1208:bfgnghf-q8o113n4s46po0prq9p38982n71n4s6po46o2s94-1$f_yvfgrq_2$f_va_gur_yvfg_3$";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-o7qq67902sp60p2622193oq11q7pop464r636427-pbhyq_abg_pbzcyrgr_fhofpevcgvb";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:60:"1208:bfgnghf-q0334009o0n16s2659781npq4pn8srn35977172p-hayvfg";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:83:"1208:bfgnghf-ops2p618p44oqs9542475poss84o98q76nss78qo-1$f_erzbirq_2$f_sebz_gur_yvfg";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:60:"1208:bfgnghf-r4sp409268936r0qn48o9n4pso9650o21029s3p0-hayvxr";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:78:"1208:bfgnghf-n8401or549p0o178034srn8q9r8q4q835q063ss0-1$f_ab_ybatre_yvxrf_2$f.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:60:"1208:bfgnghf-p93s6536qpsorrrr0o339npp7q769os64450r761-erzbgr";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:68:"1208:bfgnghf-4p9rp5288sp8p00p9r2po9oq9no78877qqq737rq-cebsvyr_hcqngr";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:83:"1208:bfgnghf-07nn93532437qq7son35p5q277n0o16q75161659-f_unf_hcqngrq_gurve_cebsvyr_c";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:58:"1208:bfgnghf-n1sssnnnso7pp996685opro829p053pp4s7qr43q-yvfg";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-5r832727n90049n936847qn41p633q6n4p1o5277-sbyybj_crbcyr_npebff_fbpvny_ar";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-q8864nsnoq6r8op364r475p0q9qqoqs9514po60q-choyvfuvat_bhgfvqr_srrqf_abg_f";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:77:"1208:bfgnghf-s3ro5o8pr1r3pp98862on2n41373pr68o386s3p5-haerpbtavmrq_zbqr_"_f".";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-n1088803704qo10q92936o90r092q4noprq8p7o1-hafhccbegrq_uho.gbcvp_f_guvf_u";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-r0rsr6629po34op5981s938qqr10q6q1ns59s538-vainyvq_uho.irevsl_"_f"._vg_zh";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-378n33opono59485619ro41nssq6158rqpo90s05-vainyvq_uho.yrnfr_"_f"._vg_zhf";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-10qqr1sq997s3n61p006439rs37roq0p882o6351-vainyvq_uho.frperg_"_f"._vg_zh";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-9970o38p26p45p4pnq6615383s625882ros928r7-vainyvq_uho.gbcvp_"_f"._hfre_q";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:83:"1208:bfgnghf-4376n8q5nq709qp91014990361o3o3s544p3515o-vainyvq_uho.gbcvp_"_f"._tebhc";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-09qpo30n430rs1pp87srprprr1s9r71n13pp63p5-vainyvq_uho.gbcvp_f;_yvfg_qbrf";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-p7o535rspon5pp79oon9p56r07p188s1109q8608-vainyvq_hey_cnffrq_sbe_1$f_"_2";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-15o253r1n83247472r3o5p9rsr7o6sr9sq524n34-lbh_pna_hfr_gur_ybpny_yvfg_sha";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:60:"1208:bfgnghf-s766q6783r243p531ssq71on83q6q9r75o2s3so3-yvfg_f";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:56:"1208:bfgnghf-196pp191s3p30oo1pnn5137q7246sr39442os125-tb";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:67:"1208:bfgnghf-3qs20o0o2n84s0qpn0348557r4p3q4n1104s6np7-hfre_avpxanzr";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:83:"1208:bfgnghf-73r906s49p7948s8o08059qq3oq0orp2os3o85ro-avpxanzr_bs_gur_hfre_lbh_jnag";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:69:"1208:bfgnghf-q4sns0por78ops96or306q23qopn9100rpr73sp7-cebsvyr_nppbhag";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-78p44651p7prn5opr5982n6n9ns455507o264o34-lbhe_nppbhag_vq_(sbe_rknzcyr_h";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-r0np4q8nos2r59n690o44467239s1qs577or235n-pbhyq_abg_ybbx_hc_bfgnghf_nppb";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-qo3240p7p6pr91n636sqo3oq6576rq3s6876p84r-pbhyq_abg_pbasvez_erzbgr_cebsv";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:66:"1208:bfgnghf-1n1qr0s43553nn8892r6s98795qp500181ro77p1-bfgnghf_yvfg";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:79:"1208:bfgnghf-62no7qs1prqs2nsn94r524nssr0o17262n35qp18-rzcgl_be_vainyvq_srrq_vq.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:76:"1208:bfgnghf-2s3714n9023p1o404sr9q66n99o1o569n3q0n7p3-haxabja_chfu_srrq_vq_f";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:78:"1208:bfgnghf-p5onn23sp5p2q763nq681417868368o95723o317-onq_uho.gbcvp_srrq_"_f".";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-44r7542551s6rp2p085psr7r2r5q25o9r745p7p4-onq_uho.irevsl_gbxra_1$f_sbe_2";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-28sp701o66s4qq4sqq3n71r4q868pn80n1pq3n1q-harkcrpgrq_fhofpevor_erdhrfg_s";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-nqop15p7481n1qo5o53q80r83pso834r9052n682-harkcrpgrq_hafhofpevor_erdhrfg";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:67:"1208:bfgnghf-os5q92pp3p1sn7p0r35o2r97q4719743n0841009-ab_fhpu_hfre.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:66:"1208:bfgnghf-n7no5oo1n460246n71q680pr3oq3o419o73s0n82-fhofpevor_gb";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:62:"1208:bfgnghf-47q80or3ro9761p60rnq0914r890449394r75pss-pbagvahr";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:58:"1208:bfgnghf-r0q73143qr80q17r82qr2r017np156pn3o9p4r01-wbva";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:69:"1208:bfgnghf-21s155o5762q72p8584oq5100s872n9o41o7s5pp-wbva_guvf_tebhc";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:61:"1208:bfgnghf-n6nso0090264o55035307ps80292nq2qn38q9os9-pbasvez";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:76:"1208:bfgnghf-1ps3q6o65s45738r28510rr49025q1r7npppo7q6-fhofpevor_gb_guvf_hfre";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:83:"1208:bfgnghf-so714q7q6229715ns03063p10p9291o75511sp69-lbh_ner_nyernql_fhofpevorq_gb";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-831q80645o1r1q22216r59384654q5qsp8ppq805-fbeel,_jr_pbhyq_abg_ernpu_gung";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:73:"1208:bfgnghf-sp49n5r4o77pnq32n08noop8s9np3035q78qs66q-nyernql_fhofpevorq!";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:81:"1208:bfgnghf-n3po00rss5nq4ss2nnrnq8q85sn089754n5001p4-erzbgr_fhofpevcgvba_snvyrq!";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:83:"1208:bfgnghf-07363q7qop93q7r4q63rpr8np5r72os52qq64506-gurer_jnf_n_ceboyrz_jvgu_lbhe";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:71:"1208:bfgnghf-o91429816s452qs8607q1r2p2pnn057216314112-fhofpevor_gb_hfre";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:61:"1208:bfgnghf-04n212215rs9sos686q280802ro81rr7n6r681pq-pbasvez";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-4488p175868sp390n49n1sq895po0rq4pr292461-lbh_pna_fhofpevor_gb_hfref_seb";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:64:"1208:bfgnghf-270q026s009040rq30psso7rn22n5r62p40o7447-wbva_tebhc";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:83:"1208:bfgnghf-9515po05272881r48407r4909q863s9r18712s98-bfgnghf_tebhc'f_nqqerff,_yvxr";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-q3pp2q4r3q011q709r348887rorqqn23np7668r6-lbh_ner_nyernql_n_zrzore_bs_gu";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:71:"1208:bfgnghf-9s4rqqn32sq4s62nnr2nrr9p30qn5063o1s7582q-nyernql_n_zrzore!";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:79:"1208:bfgnghf-psqs69rnqo1o232511545or6853r1nr1o06o993q-erzbgr_tebhc_wbva_snvyrq!";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:82:"1208:bfgnghf-721119556sn6sq0ppqn02r6srpp4o2o9p982nrr7-pbasvez_wbvavat_erzbgr_tebhc";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-8srs7s4q25060r1o5o55r630qn477q6r5s7055q9-lbh_pna_fhofpevor_gb_tebhcf_se";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:60:"1208:bfgnghf-p853pppr2483q44p0247866ns15s834qo8ps43n8-ab_vq.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-9418rp9n470r9274on3s2ror5q560sqsn6sp0r77-pnaabg_unaqyr_gung_xvaq_bs_cbf";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:81:"1208:bfgnghf-39435rns9p317r57q2so0nos4no2q932sn3sq1n6-va_ercyl_gb_haxabja_abgvpr.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-n229nq508o539443p0o4834864154sn311s7rn98-va_ercyl_gb_n_abgvpr_abg_ol_gu";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-n8o412r9qno49q301581o9qp7pr3r2909s7o6888-gb_gur_nggragvba_bs_hfre(f),_a";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-149q067rr7r93n88or8q73q49oo74649p824nop0-abg_gb_nalbar_va_ercyl_gb_nalg";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:81:"1208:bfgnghf-14511o27p85393s8887431o44q0rn29951969rn3-guvf_vf_nyernql_n_snibevgr.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:82:"1208:bfgnghf-p8p7rsqn9214ro120o4on97917p11s0065os31ps-pbhyq_abg_fnir_arj_snibevgr.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:79:"1208:bfgnghf-r5s633o4qr03682n5sn905ron6492rrr5o8r3543-abgvpr_jnf_abg_snibevgrq!";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:74:"1208:bfgnghf-6428s91p3pss42so55qrn323qnn8qss5o7o06839-abg_n_crefba_bowrpg.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-4n6pq4302s7q7qo7po28504s26895184nr8so1s4-havqragvsvrq_cebsvyr_orvat_yvf";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-6933osoo908p26ppo68q9ss20qqs2nn26s50qpr3-guvf_hfre_vf_abg_gur_bar_orvat";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-05568o65n739r564pr26026p7o79sq0r660o9p4o-gur_yvfgvat_pbhyq_abg_or_fnirq";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-817p33307n1n5s40r784p03q8p9r16nn5nr44rn3-havqragvsvrq_cebsvyr_orvat_hay";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-q2o668o8p5q237p3p5q0nr6205n831r26ssrq13s-guvf_hfre_vf_abg_gur_bar_orvat";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-rsprn7q31s26sq4r5qn1r721s0rs45rr7308965r-gur_yvfgvat_pbhyq_abg_or_qryrg";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-9qr3701o65qr7428167q77648n8o193q5qnn0977-pnaabg_snibevgr_hasnibevgr_jvg";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-8sq790qn28sos97o14s185q1679727o84pn3r034-pnaabg_unaqyr_gung_xvaq_bs_bow";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:79:"1208:bfgnghf-719425n5r517s36n7o576n175p3511o5ps6r96sq-abgvpr_jvgu_vq_f_haxabja.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:83:"1208:bfgnghf-o194qps1pq0037q55sq095r2512o663s22pr4pqs-abgvpr_jvgu_vq_1$f_abg_cbfgrq";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:71:"1208:bfgnghf-5pr8p104999snnr751q88q58p89p5769285r7n95-fhofpevor_gb_yvfg";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-990po12485o22s3780or8npr67sr9spq5o9sr898-nqqerff_bs_gur_bfgnghf_yvfg,_y";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:83:"1208:bfgnghf-835sss3rpoop8pq7192358osro4rq605s81294sn-lbh_ner_nyernql_fhofpevorq_gb";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-qppp33981spnqo0832n79qp77np3s6247q8rs199-pbasvez_fhofpevcgvba_gb_erzbgr";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-sns84p14sqps109q024ss97q720012840nqpqso6-lbh_pna_fhofpevor_gb_yvfgf_seb";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:68:"1208:bfgnghf-1105r8nr237q3r8p9sp4o1s87288p424196o0491-ab_fhpu_tebhc.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-p95671o9655568p985341398nr728644s1sno4p9-pnaabg_npprcg_erzbgr_cbfgf_sbe";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:83:"1208:bfgnghf-122q5o3ns8n005979s76po936p757q43rpp99qqn-pnaabg_ernq_cebsvyr_gb_frg_hc";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:80:"1208:bfgnghf-47qsn9roqs8oss6558055rr591o919070nqp1n03-tebhcf_pnaabg_wbva_tebhcf.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-7sr9sn7964sps727910o16qn06rr83sr3r0n0snn-lbh_unir_orra_oybpxrq_sebz_gun";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-8r98303sor23411q880639518r651o1616n0o59o-pbhyq_abg_wbva_erzbgr_hfre_1$f";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:83:"1208:bfgnghf-9610q87602r7qs5777692o2n21os7599qn9n0844-pnaabg_ernq_cebsvyr_gb_pnapry";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-45r5o9695nqn6s9s6p716n591p909ps38557o679-pbhyq_abg_erzbir_erzbgr_hfre_1";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:67:"1208:bfgnghf-pq46qorops9002p002o834q65830n9n5nnqqor11-ab_fhpu_yvfg.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-3q5nnn9p4q541o57p8p8n3548p303oq067r98280-pnaabg_npprcg_erzbgr_cbfgf_sbe";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:83:"1208:bfgnghf-892n4n3oopp97o1p9s4nr04qp1ssr4sr7o25p95o-pnaabg_ernq_cebsvyr_gb_frg_hc";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-6443pnq33s7qs035o8o8q41q6onn32r96q05pn43-tebhcf_pnaabg_fhofpevor_gb_yvf";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-5p75s75n0or39029q24393q30rn4o1so615r1q51-pbhyq_abg_fhofpevor_erzbgr_hfr";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:83:"1208:bfgnghf-2555r5944922421nr23or0p141q5874625qo70q3-pnaabg_ernq_cebsvyr_gb_pnapry";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-n0o102s8519s185s134onsn5o6ro66o225671341-pbhyq_abg_hafhofpevor_erzbgr_h";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-q7r4sr6665n8p0s81571q83s0939p46327o94361-lbh_pna_hfr_gur_ybpny_fhofpevc";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:71:"1208:bfgnghf-8o97s6n34srrr23o09920n7r27rp5286n0o1p15o-fhofpevor_gb_hfre";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:66:"1208:bfgnghf-q98pr8287r550o73266r259oo005369qp781104s-wbva_tebhc_f";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:58:"1208:bfgnghf-q75292497q9913rq8qn02n67s372n4qn8ns93r89-wbva";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:82:"1208:bfgnghf-o6oos46q23p2213q74o77s3rs0oqn2509137r63r-fhofpevor_gb_yvfg_1$f_ol_2$f";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:63:"1208:bfgnghf-7q3768264so28s658osn8q6p8os4n992p62o5772-fhofpevor";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:68:"1208:bfgnghf-86r83856184nq1n812s60068oooro7n8nos9n688-fhofpevor_gb_f";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:68:"1208:bfgnghf-s20sp176p4366pr051nop42s32860psp6rnqn071-tebhc_avpxanzr";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-12321q9oo3169r0o796pr39423843pp4pso35p1p-avpxanzr_bs_gur_tebhc_lbh_jnag";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:83:"1208:bfgnghf-5812ss13rp09qr201qs18sn6872os32snp1s72q1-avpxanzr_bs_gur_hfre_lbh_jnag";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-26p91qr3sn38s0519n6053son69923oq950qqr5r-lbhe_nppbhag_vq_(r.t._hfre@vqr";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-1797oo46s5s634888101r9226442o02r3o00q6n8-zhfg_cebivqr_n_erzbgr_cebsvyr.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-q5737954q0p3sn150o2885843o01qo1r6107ooq0-ab_ybpny_hfre_be_tebhc_avpxanz";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:69:"1208:bfgnghf-p80875643r6no1395p8o0q5031o9557r81qn7q86-bfgnghf_pbaarpg";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:75:"1208:bfgnghf-14sn96pr5547485495678s9o782981904qp138s6-vainyvq_ningne_hey_f.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-o9p90o71rsnss871813500p4p78qn0sq3nr0p116-gevrq_gb_hcqngr_ningne_sbe_haf";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-p5s53r263395s64p94n1s85r15o0035nqs87rrn8-hanoyr_gb_srgpu_ningne_sebz_f.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:83:"1208:bfgnghf-776n952344n630819501s355152os66631n26o5r-pbhyq_abg_svaq_n_srrq_hey_sbe";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-q838r07srr9p15s12p82055360787090s032ro17-abg_n_inyvq_jrosvatre_nqqerff.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-9813on9o2q60r7068o6816ps4p6709p8o93s4705-pbhyq_abg_svaq_n_inyvq_cebsvyr";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-075615777n46765sqq12774n67429r9psq706177-nggrzcgvat_gb_fgneg_chfu_fhofp";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-s587273867r5640non802242199r4n40nr5q75o8-nggrzcgvat_gb_raq_chfu_fhofpev";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:83:"1208:bfgnghf-ns70sn8o2ss20o97rnop8r72ro3p572221p64287-vainyvq_bfgnghf_cebsvyr_fgngr";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:83:"1208:bfgnghf-0p5s820124792p1p5n6s31n08q7444onp38p49q9-vainyvq_bfgnghf_cebsvyr_fgngr";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-8q04or1p1q600r9rnss4o53n8p5o57r7o7pq28r6-vainyvq_npgbe_cnffrq_gb_1$f_2$";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-43on75p1555583n0p354q1n510o075o4pqq6p11p-vainyvq_glcr_cnffrq_gb_bfgnghf";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:74:"1208:bfgnghf-67q166o90p887926pr5302708p560o4s03123267-haxabja_srrq_sbezng.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:81:"1208:bfgnghf-r4o5r7qo66n41pp98p9068814r85q5747ps6o255-eff_srrq_jvgubhg_n_punaary.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-p88985ss779r82r1p3oo3ppn1nsn70796rrp4ss0-pna_bayl_unaqyr_funer_npgvivgv";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-9n6n47875qqs5n04soo3124231o207srpnq1p609-pna_bayl_unaqyr_funerq_npgvivg";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:80:"1208:bfgnghf-6r972598os0n4011sr596pp29q45s7319s2706p0-snvyrq_gb_fnir_npgvivgl_f.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:78:"1208:bfgnghf-4s77r276n2o55os74s2nn948672p734989nrrpqr-ab_pbagrag_sbe_abgvpr_f.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:63:"1208:bfgnghf-25911q48r023pq10sp08q378641rr620s5r39q86-fubj_zber";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-pq6oqp2q1443no4s2rq4r79qq9532s32625nr9s8-pbhyq_abg_ernpu_cebsvyr_cntr_f";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-n60ss0r9s6421qr1o9o268r40171p628r2945rr1-pnaabg_svaq_rabhtu_cebsvyr_vas";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:77:"1208:bfgnghf-opn059121q9rn43qp3952r8p5o44n9qns26qs34r-ab_nhgube_vq_hev_sbhaq.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:69:"1208:bfgnghf-84qn0p5n04rq3396q62no00rn241675pn46sooq2-ab_cebsvyr_hev.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-4p931opponr872q0s59nq4qrq0776s3p3oo6s696-ybpny_hfre_pnaabg_or_ersrerapr";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-1ssnqr482s958o8504n6sq5r672os86np60sp8r9-ybpny_tebhc_pnaabg_or_ersrerap";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-83os526863768r4qqspq60rnoqq7p55p062135o9-ybpny_yvfg_pnaabg_or_ersrerapr";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:80:"1208:bfgnghf-2opoqn7np35qq386r4820q3oq894s6759823r064-pnaabg_fnir_ybpny_cebsvyr.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:77:"1208:bfgnghf-2ns7nq82s9orr0230160178nq44q683n70or8710-pnaabg_fnir_ybpny_yvfg.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:82:"1208:bfgnghf-ss4poq34471142558nn852188qpp6ros25pro8q4-pnaabg_fnir_bfgnghf_cebsvyr.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-o999n868034875oo179r6963sqn48qr2ns353s25-pbhyq_abg_fnir_cebsvyr_sbe_"_f";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-qr79q7n11060q33so5nrss0sp59pqn73o9540r7n-pbhyq_abg_fnir_bfgnghf_cebsvyr";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-818037909o32os3qoror5575n8q985393041s72n-pbhyq_abg_fgber_ugzy_pbagrag_b";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:83:"1208:bfgnghf-71p6130200s65n9975pp6n0o7n85s0030nonp5r2-haerpbtavmrq_hev_cebgbpby_sbe";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-s8rs7rspp47qqq7s7769o3ro2nq5nn89o4p0q7o3-ab_hev_cebgbpby_sbe_cebsvyr_f.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-4n2361o952o56p575nr43pq5670r62762pq5q901-uho_fhofpevore_irevsvpngvba_er";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:83:"1208:bfgnghf-ns4sn2o1823631qq8rq1pn1q8q75030sq6n57n53-pnyyonpx_erghearq_fgnghf_1$f.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-9o50no34723s79s6po8r3no50rq5469pps32pr18-hanoyr_gb_ybpngr_fvtare_choyvp";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-2n74o95qs9rs4n88sn54q1n9s322opq7qq8s980n-fnyzba_vainyvq_npgbe_sbe_fvtav";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:82:"1208:bfgnghf-2586ro283qp5o999q96pp34r8009p0q6o3049s8n-guvf_zrgubq_erdhverf_n_cbfg.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-q109n2o46125nq81313pq02q38p9rps69p705036-fnyzba_erdhverf_"nccyvpngvba_z";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:83:"1208:bfgnghf-330315o2738133ssn86o665r49q7rn28p968onnr-fnyzba_fvtangher_irevsvpngvba";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-500s991631qr906q2pn665676ppr92p3s4923sp3-fnyzba_cbfg_zhfg_or_na_ngbz_ra";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:81:"1208:bfgnghf-s8snos81on27o05117rnq3r85040676452n12424-haerpbtavmrq_npgvivgl_glcr.";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-4p60127pnq91pp04n6p8s800o2ro462n9r16s742-guvf_gnetrg_qbrf_abg_haqrefgna";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-154q9n138q88n9090140236p081p16o074n4o2p0-guvf_gnetrg_qbrf_abg_haqrefgna";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-859os6q26p1071p24016q857nn0604pq9nq327s2-guvf_gnetrg_qbrf_abg_haqrefgna";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-09591oo57o540536797997748703s122162989pr-guvf_gnetrg_qbrf_abg_haqrefgna";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-ro02p3qnrq066n825730617qo08n8q26126r846r-guvf_gnetrg_qbrf_abg_haqrefgna";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-6760qq71qr881rs2qo935s8p21q25ss9o2o1nso8-guvf_gnetrg_qbrf_abg_haqrefgna";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-o6r6379q255no8735340o6p9n886rpr6or4ns39q-guvf_gnetrg_qbrf_abg_haqrefgna";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-5564o42s4s28p553s262647s272748336rn27234-guvf_gnetrg_qbrf_abg_haqrefgna";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-norp5148343r4973pnpo022440qq36np226ns81o-guvf_gnetrg_qbrf_abg_haqrefgna";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-5p046r9n9r779r05n1q7s2946o4811s0sp75r766-guvf_gnetrg_qbrf_abg_haqrefgna";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:84:"1208:bfgnghf-05018sn68q1r0043q1906qp8598nn3ooro338nqp-erprvirq_n_fnyzba_fync_sebz_ha";a:3:{i:0;R:37947;i:1;R:35355;i:2;R:37120;}s:91:"1208:cvjvxnanylgvpf-n8nrq26op04149rrqq36rs9n14q6ssp6n270696o-hfr_n_uers="uggc_cvjvx.bet_"_c";a:3:{i:0;s:35:"out-statusnet-plugin-piwikanalytics";i:1;R:35355;i:2;R:37120;}s:64:"1208:cbyy-006r416sp0q0954808p784p76125n082o7142qn9-ab_fhpu_cbyy.";a:3:{i:0;s:25:"out-statusnet-plugin-poll";i:1;R:35355;i:2;R:37120;}s:71:"1208:cbyy-85r403q1928s8129599rq54nq3nsonn1sso10637-ab_fhpu_cbyy_abgvpr.";a:3:{i:0;R:38142;i:1;R:35355;i:2;R:37120;}s:65:"1208:cbyy-q12s27pso31889p5n4889468qq36q4n87ron1715-1$f'f_cbyy_2$f";a:3:{i:0;R:38142;i:1;R:35355;i:2;R:37120;}s:59:"1208:cbyy-002ss598115q84595ssrrr6219po5p03q3n1q4n6-dhrfgvba";a:3:{i:0;R:38142;i:1;R:35355;i:2;R:37120;}s:81:"1208:cbyy-6n3s666o1r37454733832070299ss6ornn6q635n-jung_dhrfgvba_ner_crbcyr_nafjr";a:3:{i:0;R:38142;i:1;R:35355;i:2;R:37120;}s:59:"1208:cbyy-r3418qp02964qq196oq6qp0o2op378p67p5oq4o4-bcgvba_q";a:3:{i:0;R:38142;i:1;R:35355;i:2;R:37120;}s:55:"1208:cbyy-r85726o34723718q86rro40no996r21219883557-fnir";a:3:{i:0;R:38142;i:1;R:35355;i:2;R:37120;}s:81:"1208:cbyy-n7o06sr740o934504s4o23q43s39694ns3953q58-fvzcyr_rkgrafvba_sbe_fhccbegva";a:3:{i:0;R:38142;i:1;R:35355;i:2;R:37120;}s:80:"1208:cbyy-s9657s29r556463qr64sq0s487p526o689p44q0s-vainyvq_cbyy_erfcbafr_ab_cbyy";a:3:{i:0;R:38142;i:1;R:35355;i:2;R:37120;}s:80:"1208:cbyy-8p26064138p63p2p8578r9020095pn1q9nq3pq25-vainyvq_cbyy_erfcbafr_cbyy_vf";a:3:{i:0;R:38142;i:1;R:35355;i:2;R:37120;}s:81:"1208:cbyy-o4s000rr2n0p7o411s271p4oo080s972q90964pr-harkcrpgrq_glcr_sbe_cbyy_cyhtv";a:3:{i:0;R:38142;i:1;R:35355;i:2;R:37120;}s:71:"1208:cbyy-n723pns59s59rns0ss34o310p5sssqn36s92p6q8-cbyy_qngn_vf_zvffvat";a:3:{i:0;R:38142;i:1;R:35355;i:2;R:37120;}s:55:"1208:cbyy-475o0os64pr8po8765211489519n5001q25200p4-cbyy";a:3:{i:0;R:38142;i:1;R:35355;i:2;R:37120;}s:74:"1208:cbyy-4671q72317065n760q683rooqnrp2rs9n206rn71-vainyvq_cbyy_fryrpgvba.";a:3:{i:0;R:38142;i:1;R:35355;i:2;R:37120;}s:65:"1208:cbyy-2o087n6s6qqss80ss50p4p15qqn79rn539sn96pp-ibgrq_sbe_"_f"";a:3:{i:0;R:38142;i:1;R:35355;i:2;R:37120;}s:57:"1208:cbyy-p7609qoqo56n28q629pn4837r804o21os0s2851q-fhozvg";a:3:{i:0;R:38142;i:1;R:35355;i:2;R:37120;}s:63:"1208:cbyy-p5qro9r39n0o0qop9q8prns185602nqnoo29spor-cbyy_1$f_2$f";a:3:{i:0;R:38142;i:1;R:35355;i:2;R:37120;}s:57:"1208:cbyy-8orp8p1q415r2682ps7ron85858458r3s10047p8-cbyy_f";a:3:{i:0;R:38142;i:1;R:35355;i:2;R:37120;}s:59:"1208:cbyy-6q62oq5rsn90q537ropo1p8016p311s8p9224018-arj_cbyy";a:3:{i:0;R:38142;i:1;R:35355;i:2;R:37120;}s:80:"1208:cbyy-s86o746703n3o39p792899828r64so9899q396r8-lbh_zhfg_or_ybttrq_va_gb_cbfg";a:3:{i:0;R:38142;i:1;R:35355;i:2;R:37120;}s:77:"1208:cbyy-5926201070n9n638n732srsopn84s2317r15r71s-cbyy_zhfg_unir_n_dhrfgvba.";a:3:{i:0;R:38142;i:1;R:35355;i:2;R:37120;}s:81:"1208:cbyy-26psnp0254qqn62n1116qs3636737054411436qq-cbyy_zhfg_unir_ng_yrnfg_gjb_bc";a:3:{i:0;R:38142;i:1;R:35355;i:2;R:37120;}s:64:"1208:cbyy-582n435snopr633qon5540prrn77ro5p7q9r091s-abgvpr_cbfgrq";a:3:{i:0;R:38142;i:1;R:35355;i:2;R:37120;}s:64:"1208:cbyy-sp5qo11roso5o73sq1n629srsnn1919o7n0185o5-cbyy_erfcbafr";a:3:{i:0;R:38142;i:1;R:35355;i:2;R:37120;}s:81:"1208:cbyy-41o373659541p20nqs5n596nornn838p8o067166-lbh_zhfg_or_ybttrq_va_gb_erfcb";a:3:{i:0;R:38142;i:1;R:35355;i:2;R:37120;}s:75:"1208:cbyy-n7664ssnn035p81650r6nr0028492209o3prn097-vainyvq_be_zvffvat_cbyy.";a:3:{i:0;R:38142;i:1;R:35355;i:2;R:37120;}s:63:"1208:cbyy-8n535n1qrs73648n0n55n9osn21p9q370r434pr5-cbyy_erfhygf";a:3:{i:0;R:38142;i:1;R:35355;i:2;R:37120;}s:86:"1208:cbfgqroht-p6pnq1p51noq04so4692q49qo3p0n0345664p814-qrohttvat_gbby_gb_erpbeq_erdhr";a:3:{i:0;s:30:"out-statusnet-plugin-postdebug";i:1;R:35355;i:2;R:37120;}s:95:"1208:cbjrerqolfgnghfarg-0s2199ns7q6p415005r73s31706o53r45q740109-cbjrerq_ol_n_uers="uggc_fgnghf";a:3:{i:0;s:39:"out-statusnet-plugin-poweredbystatusnet";i:1;R:35355;i:2;R:37120;}s:95:"1208:cbjrerqolfgnghfarg-403np5q34p96r4r944o6q6s5sop4s1555qns95p2-bhgchgf_"cbjrerq_ol_n_uers="ug";a:3:{i:0;R:38172;i:1;R:35355;i:2;R:37120;}s:83:"1208:cgvghey-n7n70rq8qpnn1350s3pnp1p08o3n44142opn6174-lbh_zhfg_fcrpvsl_n_freivprhey";a:3:{i:0;s:28:"out-statusnet-plugin-ptiturl";i:1;R:35355;i:2;R:37120;}s:83:"1208:cgvghey-4onp8np0p1o38q73219so01r51oq6ps869o58946-hfrf_n_uers="uggc_1$f_"_1$f_n";a:3:{i:0;R:38175;i:1;R:35355;i:2;R:37120;}s:62:"1208:dan-10p9793931975q323q02o4n81p4o928nnopos935-arj_dhrfgvba";a:3:{i:0;s:24:"out-statusnet-plugin-qna";i:1;R:35355;i:2;R:37120;}s:79:"1208:dan-877nn8oss4r46796s39po264pnr43p3o625621s1-lbh_zhfg_or_ybttrq_va_gb_cbfg";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:77:"1208:dan-20921popn47rs1r18p5nr8r1ps2o3s5040o93ppq-dhrfgvba_zhfg_unir_n_gvgyr.";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:65:"1208:dan-r02n92q7q02qr1467q1s99oopn3o94n6s2699692-dhrfgvba_cbfgrq";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:65:"1208:dan-759q3p6sq59oqp990sns90353q51s62180p7ops1-ab_fhpu_nafjre.";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:78:"1208:dan-61op441086p0137nqn062n694rr59qonpp4qq8sp-ab_dhrfgvba_sbe_guvf_nafjre.";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:63:"1208:dan-os5q92pp3p1sn7p0r35o2r97q4719743n0841009-ab_fhpu_hfre.";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:73:"1208:dan-59spr11p6450891qr5012spn8o9or4pp9nos5n4n-hfre_jvgubhg_n_cebsvyr.";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:72:"1208:dan-7p346575r1765o431qoqooo6050posr18np07r49-1$f'f_nafjre_gb_"_2$f"";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:63:"1208:dan-8q9or673628r8n1q05q18rp37121q1nr95049751-erivfr_nafjre";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:80:"1208:dan-rn6sq4p3on566s2636ro3843prr64nr5q35592ns-lbh_zhfg_or_ybttrq_va_gb_nafjr";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:76:"1208:dan-7q5214rsp8s78n980n4987498nnn08npsss51959-vainyvq_be_zvffvat_nafjre.";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:56:"1208:dan-n16n4rqn7po2p8r91q7rqq25r809nr9q392p7498-nafjre";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:56:"1208:dan-o55r1p4n0n68q35r495r82o75nrp442q02709386-nafjre";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:67:"1208:dan-s9rs2047s083r3097r7784po1r93107906671o11-ab_fhpu_dhrfgvba.";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:74:"1208:dan-456ss424ro07n82n61osrsq9o119116438o34n0q-ab_fhpu_dhrfgvba_abgvpr.";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:68:"1208:dan-29658ps56o2orossprn589631so276on6q62nq53-1$f'f_dhrfgvba_2$f";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:64:"1208:dan-s218s3s1n438771265on82r5ss09s3o2n8259r85-pybfr_dhrfgvba";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:80:"1208:dan-o893sqp1n20o01p14p29s4192qr18p9qo48s42r5-lbh_zhfg_or_ybttrq_va_gb_pybfr";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:78:"1208:dan-509sq264oq7o38695699s0p5s3710osn06n476n5-vainyvq_be_zvffvat_dhrfgvba.";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:80:"1208:dan-519qrq1pp8057sp89435q2n4ps400562sr4n713n-lbh_qvq_abg_nfx_guvf_dhrfgvba.";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:57:"1208:dan-o12sprqp7os1s597r5nq2703s34s510p39410n64-nafjref";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:60:"1208:dan-0r657r6p2p14392822nqn6r9n892so276n926307-nwnk_reebe";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:61:"1208:dan-588795o35r8p54r21s44s1236n56704566346nq3-lbhe_nafjre";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:73:"1208:dan-28o72r4121n893071r59ppo102pp50186r6n2o17-nafjre_qngn_vf_zvffvat.";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:80:"1208:dan-9r5ssn4247085noq4p98n4r998846p864or7458o-dhrfgvba_naq_nafjref_zvpeb-ncc";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:58:"1208:dan-8p11027p8q01440orp536n7266orr9n8528q2s34-dhrfgvba";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:76:"1208:dan-q393r8n88o62q2117q463893o60sn845398845qs-gbb_znal_npgvivgl_bowrpgf.";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:72:"1208:dan-7988053n0p126q9orn3s20056064qsp1659q9816-jebat_glcr_sbe_bowrpg.";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:77:"1208:dan-pq4051ssr57068111q8559o63qq40q600no8o0o0-nafjre_gb_haxabja_dhrfgvba.";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:70:"1208:dan-o916210pq2s40op6nr699qroqn3rs1924q5s1ns9-haxabja_bowrpg_glcr.";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:74:"1208:dan-70o03op5pqn12271qr8q5r5q32850ro5rq750s02-haxabja_dhrfgvba_abgvpr.";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:80:"1208:dan-3ors3617rn195407112s809p2ns4528p4s99rr86-harkcrpgrq_glcr_sbe_dan_cyhtva";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:75:"1208:dan-oo118399646n0306o25qp27qqros7nr011o03p7n-dhrfgvba_qngn_vf_zvffvat.";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:64:"1208:dan-18o1204n7ropqnon7o8q343p0srq44313n981718-lbhe_nafjre...";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:53:"1208:dan-qs316r17qr9p36858417on18r0qn4qn282qrn84n-…";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:57:"1208:dan-4sq94os46pn189p307p2s15p2or806oqqq151p0s-zber...";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:71:"1208:dan-28p63272oon7r39668031r428r98np8s8767qr04-ab_dhrfgvba_jvgu_vq_f";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:70:"1208:dan-22s6692n9pon2pq1r25n8rrrrq0n01s3osp0p3n4-ab_cebsvyr_jvgu_vq_f";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:79:"1208:dan-nq9r68q63537pppq08r15s60s729po5r7s100qs0-cyheny_trggrkg_f_erivfvba_f_e";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:79:"1208:dan-ppr65o6rr6qoqp15rrp6or07oq8pr9333s487sqn-1$f_nafjrerq_gur_dhrfgvba_"_2";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:63:"1208:dan-rq0o3o5598023332855o089544pnp1562608or9n-nafjrerq_"_f"";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:79:"1208:dan-5ro00r5n4151r39on88o4po13rn7o0sqsr58q43q-cyheny_trggrkg_f_nafjre_f_naf";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:74:"1208:dan-30r808r0rpr4q2q97312o629n4543q66no1po568-guvf_dhrfgvba_vf_pybfrq.";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:60:"1208:dan-003185s77550992700o580s1987o6poo0919p83o-dhrfgvba_f";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:56:"1208:dan-p7609qoqo56n28q629pn4837r804o21os0s2851q-fhozvg";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:67:"1208:dan-roo68r77o0sn701qns7489ps8son49ro5no1n91q-ragre_lbhe_nafjre";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:56:"1208:dan-q31rq85n3orso63p70o0no4n24pq846r9rn024o1-nafjre";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:55:"1208:dan-3s195827s7p2sn2s429359ns52688sn3q7s706ss-gvgyr";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:77:"1208:dan-13o14s0s9qn15o9p8503qp94p944srsp754o4118-gur_gvgyr_bs_lbhe_dhrfgvba.";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:61:"1208:dan-2q345842s631o046qnq639oq8374p8174834pr1n-qrfpevcgvba";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:74:"1208:dan-r1n4rr73sq887q8s0r4sq002p733902r60q6991o-lbhe_dhrfgvba_va_qrgnvy.";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:54:"1208:dan-r85726o34723718q86rro40no996r21219883557-fnir";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:58:"1208:dan-qs7np47p1p326p10srpon14p30nn07008r7054q7-dhrfgvba";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:55:"1208:dan-o872p3ss4438sps555poq88pn2713s78798qs223-pybfr";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:80:"1208:dan-8ors12pq5nros2r15r67p8o7q72o4rn1964qn88p-pybfr_gur_dhrfgvba_gb_ab_bar_p";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:54:"1208:dan-154q346rqr44s61885q2pn19141r75n7rpp55r30-orfg";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:80:"1208:dan-1srnon0spp74193qsq6n36o41r12qq05qo61r7s0-znex_guvf_nafjre_nf_gur_orfg_n";a:3:{i:0;R:38178;i:1;R:35355;i:2;R:37120;}s:75:"1208:ernygvzr-n445qson8s789r3133871q60s7p3nqnsn717181p-lbh_unir_gb_cbfg_vg.";a:3:{i:0;s:29:"out-statusnet-plugin-realtime";i:1;R:35355;i:2;R:37120;}s:79:"1208:ernygvzr-qo3o96441365o3125osr33nn429so7q7n73ron75-ab_punaary_xrl_nethzrag.";a:3:{i:0;R:38237;i:1;R:35355;i:2;R:37120;}s:71:"1208:ernygvzr-4snq94o80881o4qqr0pn3qs05nr4nq3sqrq2op66-ab_fhpu_punaary.";a:3:{i:0;R:38237;i:1;R:35355;i:2;R:37120;}s:59:"1208:ernygvzr-0s38ors1o29o5o403p90916169qq4q42p38419r0-cynl";a:3:{i:0;R:38237;i:1;R:35355;i:2;R:37120;}s:59:"1208:ernygvzr-1r4prsp39q83n99r09n627qn9q419spqoo4q232s-cynl";a:3:{i:0;R:38237;i:1;R:35355;i:2;R:37120;}s:60:"1208:ernygvzr-oqr1pqp32rs0o1s653nq7oq6s98onqo8o0n957r2-cnhfr";a:3:{i:0;R:38237;i:1;R:35355;i:2;R:37120;}s:60:"1208:ernygvzr-6695347r9s9r1q9po96981pnssno83701672pros-cnhfr";a:3:{i:0;R:38237;i:1;R:35355;i:2;R:37120;}s:61:"1208:ernygvzr-orq8461on3nrrp29p1nq7q645857100osn4055n5-cbc_hc";a:3:{i:0;R:38237;i:1;R:35355;i:2;R:37120;}s:73:"1208:ernygvzr-0354nq786258rqq7108poqo367p52371r543oq33-cbc_hc_va_n_jvaqbj";a:3:{i:0;R:38237;i:1;R:35355;i:2;R:37120;}s:63:"1208:erpncgpun-r9312oq1o14rn0402qq548180o030r6p19q7p452-pncgpun";a:3:{i:0;s:30:"out-statusnet-plugin-recaptcha";i:1;R:35355;i:2;R:37120;}s:79:"1208:erpncgpun-612nrr128so6n4r4qn0ons9nq5rs3n1q57659oq7-pncgpun_qbrf_abg_zngpu!";a:3:{i:0;R:38247;i:1;R:35355;i:2;R:37120;}s:86:"1208:erpncgpun-9r8pqn00p59oq58r10s4qp560o6nnq393sr9s40n-hfrf_n_uers="uggc_erpncgpun.be";a:3:{i:0;R:38247;i:1;R:35355;i:2;R:37120;}s:86:"1208:ertvfgreguebggyr-9433035srn67s7or72rro2q91315n8767469non8-pnaabg_svaq_vc_nqqerff.";a:3:{i:0;s:37:"out-statusnet-plugin-registerthrottle";i:1;R:35355;i:2;R:37120;}s:93:"1208:ertvfgreguebggyr-n08642300r1199r6013525469q8878nrq7586p71-gbb_znal_ertvfgengvbaf._gnxr_n";a:3:{i:0;R:38251;i:1;R:35355;i:2;R:37120;}s:93:"1208:ertvfgreguebggyr-s50p7sqo04o787n9p92p64r009pqo20r07786nqq-n_onaarq_hfre_unf_ertvfgrerq_s";a:3:{i:0;R:38251;i:1;R:35355;i:2;R:37120;}s:93:"1208:ertvfgreguebggyr-698p38r5249n9s02q1pnqp0rroqn795176r96n04-guebggyrf_rkprffvir_ertvfgengv";a:3:{i:0;R:38251;i:1;R:35355;i:2;R:37120;}s:98:"1208:erdhverinyvqngrqrznvy-2qq6rr788noqs0rs2nrq463s854rq2pqs8500o68-lbh_zhfg_inyvqngr_lbhe_rznvy_n";a:3:{i:0;s:42:"out-statusnet-plugin-requirevalidatedemail";i:1;R:35355;i:2;R:37120;}s:98:"1208:erdhverinyvqngrqrznvy-113o6r7s65qoso58o27q31qnp538o00098ppn90q-lbh_zhfg_cebivqr_na_rznvy_nqqe";a:3:{i:0;R:38256;i:1;R:35355;i:2;R:37120;}s:98:"1208:erdhverinyvqngrqrznvy-p1r4037rorr261o08p2qo58776nonqp945324r03-qvfnoyrf_cbfgvat_jvgubhg_n_iny";a:3:{i:0;R:38256;i:1;R:35355;i:2;R:37120;}s:94:"1208:erdhverinyvqngrqrznvy-70p2r3s9o18013985n935s28q000r66p60676ns0-lbh_ner_nyernql_ybttrq_va.";a:3:{i:0;R:38256;i:1;R:35355;i:2;R:37120;}s:96:"1208:erdhverinyvqngrqrznvy-0srssr469o3p2p57012ppoqs3o9oo07snos064rn-pbasvezngvba_pbqr_abg_sbhaq.";a:3:{i:0;R:38256;i:1;R:35355;i:2;R:37120;}s:97:"1208:erdhverinyvqngrqrznvy-1516508007596qr0np199qr3593206prp735rqsq-ab_hfre_sbe_gung_pbasvezngvba";a:3:{i:0;R:38256;i:1;R:35355;i:2;R:37120;}s:96:"1208:erdhverinyvqngrqrznvy-2633pp6n6pnn5394324sr97620no9506348s3rs0-haerpbtavmrq_nqqerff_glcr_f.";a:3:{i:0;R:38256;i:1;R:35355;i:2;R:37120;}s:97:"1208:erdhverinyvqngrqrznvy-88o9514n2o44p8291s6p4o2r404027700qp4p8s9-gung_nqqerff_unf_nyernql_orra";a:3:{i:0;R:38256;i:1;R:35355;i:2;R:37120;}s:87:"1208:erdhverinyvqngrqrznvy-0qqp0940qrn7314or3r09646r0s2o0s22n34o39s-cnffjbeq_gbb_fubeg.";a:3:{i:0;R:38256;i:1;R:35355;i:2;R:37120;}s:91:"1208:erdhverinyvqngrqrznvy-s7p3pq475924qp45r184s50qq91r9r4qn76p740o-cnffjbeqf_qb_abg_zngpu.";a:3:{i:0;R:38256;i:1;R:35355;i:2;R:37120;}s:98:"1208:erdhverinyvqngrqrznvy-50s4s25q4q22op9835r4p6o3r0r472pp9r5o600q-lbh_unir_pbasvezrq_gur_rznvy_n";a:3:{i:0;R:38256;i:1;R:35355;i:2;R:37120;}s:82:"1208:erdhverinyvqngrqrznvy-s5p8s412prq17309s432417q981p7q37s0532n6n-frg_n_cnffjbeq";a:3:{i:0;R:38256;i:1;R:35355;i:2;R:37120;}s:89:"1208:erdhverinyvqngrqrznvy-0r4s1r7pn014p23oo42p16os0q32ns27p235p4no-pbasvez_rznvy_nqqerff";a:3:{i:0;R:38256;i:1;R:35355;i:2;R:37120;}s:80:"1208:erdhverinyvqngrqrznvy-q850rr188p7p55o64op3624534qr5p5051n57qp6-arj_cnffjbeq";a:3:{i:0;R:38256;i:1;R:35355;i:2;R:37120;}s:89:"1208:erdhverinyvqngrqrznvy-93497onrqrs44os19pn92pno33np244or6s9nq73-6_be_zber_punenpgref.";a:3:{i:0;R:38256;i:1;R:35355;i:2;R:37120;}s:75:"1208:erdhverinyvqngrqrznvy-992roo33s4o2q3544n3p097p2476r2r959142qnn-pbasvez";a:3:{i:0;R:38256;i:1;R:35355;i:2;R:37120;}s:91:"1208:erdhverinyvqngrqrznvy-r0qsp75rq73r0p4r716s94rr34p63pr5sp6464qr-fnzr_nf_cnffjbeq_nobir.";a:3:{i:0;R:38256;i:1;R:35355;i:2;R:37120;}s:72:"1208:erdhverinyvqngrqrznvy-r85726o34723718q86rro40no996r21219883557-fnir";a:3:{i:0;R:38256;i:1;R:35355;i:2;R:37120;}s:106:"1208:erirefrhfreanzrnhguragvpngvba-p866s7s747483q09po933npp833954r916075pn5-gur_erirefr_hfreanzr_nhguragvp";a:3:{i:0;s:50:"out-statusnet-plugin-reverseusernameauthentication";i:1;R:35355;i:2;R:37120;}s:83:"1208:effpybhq-4n908728o7213498q290n2r6o708p9p087r2q2sq-n_hey_cnenzrgre_vf_erdhverq.";a:3:{i:0;s:29:"out-statusnet-plugin-rsscloud";i:1;R:35355;i:2;R:37120;}s:85:"1208:effpybhq-8n986366n194ooqp3oo90o6057248p7rp62sp8q6-guvf_erfbhepr_erdhverf_na_uggc";a:3:{i:0;R:38277;i:1;R:35355;i:2;R:37120;}s:85:"1208:effpybhq-24q6930ossq5927078qn05058qq9857no6nqo975-guvf_erfbhepr_erdhverf_na_uggc";a:3:{i:0;R:38277;i:1;R:35355;i:2;R:37120;}s:76:"1208:effpybhq-npo8qp29p88n6onp71o79os3r685125psq72qrp1-erdhrfg_zhfg_or_cbfg.";a:3:{i:0;R:38277;i:1;R:35355;i:2;R:37120;}s:85:"1208:effpybhq-8235or40pp5p7785n08r3snqs07rn217120p1q44-bayl_uggc_cbfg_abgvsvpngvbaf_n";a:3:{i:0;R:38277;i:1;R:35355;i:2;R:37120;}s:58:"1208:effpybhq-s18n6rn494003s960q41s8s2r611s452q09ro71p-,_\";a:3:{i:0;R:38277;i:1;R:35355;i:2;R:37120;}s:84:"1208:effpybhq-n5oq45p1qs62n6pn4754onpons83ro39r168ps87-gur_sbyybjvat_cnenzrgref_jrer";a:3:{i:0;R:38277;i:1;R:35355;i:2;R:37120;}s:84:"1208:effpybhq-62pn96556n00s2054pr7s68n47q702n35o354n93-lbh_zhfg_cebivqr_ng_yrnfg_bar";a:3:{i:0;R:38277;i:1;R:35355;i:2;R:37120;}s:85:"1208:effpybhq-q5qn4s2p62p6851029583p6575q12sp44r5996p8-srrq_fhofpevcgvba_snvyrq_abg_n";a:3:{i:0;R:38277;i:1;R:35355;i:2;R:37120;}s:85:"1208:effpybhq-40oq11o5r492247r2o27sn1p845772668rnro744-srrq_fhofpevcgvba_snvyrq_abgvs";a:3:{i:0;R:38277;i:1;R:35355;i:2;R:37120;}s:85:"1208:effpybhq-2p33269287s6624s046r6852317s55o7p6774rp1-gunaxf_sbe_gur_fhofpevcgvba._j";a:3:{i:0;R:38277;i:1;R:35355;i:2;R:37120;}s:85:"1208:effpybhq-83218p5q18152r40q9p32p12o72q03pq43p90503-gur_effpybhq_cyhtva_ranoyrf_lb";a:3:{i:0;R:38277;i:1;R:35355;i:2;R:37120;}s:58:"1208:fnzcyr-s7ss9r8o7oo2r09o70935n5q785r0pp5q9q0nos0-uryyb";a:3:{i:0;s:27:"out-statusnet-plugin-sample";i:1;R:35355;i:2;R:37120;}s:62:"1208:fnzcyr-90p09354s987r96sr09o3q10n0499q2684sp1136-uryyb,_f!";a:3:{i:0;R:38290;i:1;R:35355;i:2;R:37120;}s:69:"1208:fnzcyr-5490621s32o660p0410os5q397q99330p04ns708-uryyb,_fgenatre!";a:3:{i:0;R:38290;i:1;R:35355;i:2;R:37120;}s:61:"1208:fnzcyr-o0qn2r5ps267581q4p096276ps8sp6n7s14n304s-uryyb,_f";a:3:{i:0;R:38290;i:1;R:35355;i:2;R:37120;}s:82:"1208:fnzcyr-4s029r8n8o082pn3p8q3q8o173sqp4o7rqop666o-cyheny_trggrkg_v_unir_terrgrq";a:3:{i:0;R:38290;i:1;R:35355;i:2;R:37120;}s:68:"1208:fnzcyr-n1ro8rrn60800rsnn714q32ns8658o5p0rso50so-n_jnez_terrgvat";a:3:{i:0;R:38290;i:1;R:35355;i:2;R:37120;}s:83:"1208:fnzcyr-65s2186q29757r681577n7q2os02s2rn496q722q-n_fnzcyr_cyhtva_gb_fubj_onfvpf";a:3:{i:0;R:38290;i:1;R:35355;i:2;R:37120;}s:83:"1208:fnzcyr-ppsrp6020072539o0p317030r10o1r9718os41q3-pbhyq_abg_fnir_arj_terrgvat_pb";a:3:{i:0;R:38290;i:1;R:35355;i:2;R:37120;}s:83:"1208:fnzcyr-0s1p83s6n8492n29o85q4s1r699n4s8nr8q77993-pbhyq_abg_vaperzrag_terrgvat_p";a:3:{i:0;R:38290;i:1;R:35355;i:2;R:37120;}s:80:"1208:frnepufho-3qor703qs118963qn2pn719324s9r69106971052-f'f_frnepu_fhofpevcgvbaf";a:3:{i:0;s:30:"out-statusnet-plugin-searchsub";i:1;R:35355;i:2;R:37120;}s:85:"1208:frnepufho-2978r410282r7r7197n1no27130952so7s29n476-1$f'f_frnepu_fhofpevcgvbaf,_c";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:86:"1208:frnepufho-8roopp58907oq2s4q6p8qr01pn1orq7632n925no-lbh_unir_fhofpevorq_gb_erprvir";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:85:"1208:frnepufho-s37251on84r003q1s0613qoo5202p048277rro5o-f_unf_fhofpevorq_gb_erprvir_n";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:85:"1208:frnepufho-2401p4p7q77521np69916r242rr09qr9no2p47s6-lbh_ner_abg_fhofpevorq_gb_nal";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:85:"1208:frnepufho-6812qqs4r5s09308pn88o12oq65r396s1973o8sr-f_vf_abg_fhofpevorq_gb_nal_fr";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:85:"1208:frnepufho-096nq0oo62387865607n8sspon8s3n94r9o0q849-"_n_uers="_1$f"_2$f_n_"_fvapr";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:86:"1208:frnepufho-6qp33q2860pn63qp6101nqs0o2530n060r4q2pqr-lbh_ner_abg_genpxvat_gur_frnep";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:86:"1208:frnepufho-7pp559q669po91160918no503416n19sop2o1s2s-pbhyq_abg_raq_n_frnepu_fhofpev";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:86:"1208:frnepufho-7p38n23npnoqos0sqq0roop2rs4sq439qr74n68o-lbh_ner_ab_ybatre_fhofpevorq_g";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:85:"1208:frnepufho-n5s41936r2o5289nqr24514732713pq67pp47335-guvf_npgvba_bayl_npprcgf_cbfg";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:85:"1208:frnepufho-07363q7qop93q7r4q63rpr8np5r72os52qq64506-gurer_jnf_n_ceboyrz_jvgu_lbhe";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:70:"1208:frnepufho-8r2qr1r8o1ns7pq2o403oq0q27p71332n55np628-abg_ybttrq_va.";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:72:"1208:frnepufho-8q094195o13p8q12r5n0rp2o7q16131r7331sn59-ab_fhpu_cebsvyr.";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:66:"1208:frnepufho-qq1242n8sp29346652osqno77420rr2576o04652-fhofpevorq";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:84:"1208:frnepufho-q993qp93n2rs32pnsn2260s0282520nrp23o5psq-hafhofpevor_sebz_guvf_frnepu";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:67:"1208:frnepufho-ro622ppr4qn95noq789no1n68so0ss597o8op8q9-hafhofpevor";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:85:"1208:frnepufho-p95rp328p1s222130o582942p65q1q8q5o8r6155-hafhofpevor_sebz_guvf_frnepu.";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:68:"1208:frnepufho-9no84878n997p48p4oq68o3n65572p1r75133o8r-hafhofpevorq";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:86:"1208:frnepufho-460806741s921p4s181100q90op1ssp9rnq13qns-lbh_ner_nyernql_genpxvat_gur_f";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:86:"1208:frnepufho-q8923sps4o87p6s483q7820r4ooq8n07s8qo739n-pbhyq_abg_fgneg_n_frnepu_fhofp";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:86:"1208:frnepufho-qn48os62sp73s03qqpo2rr09q22832qo1q121osq-lbh_ner_fhofpevorq_gb_gur_frne";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:85:"1208:frnepufho-4q4oo34s3s28o25qoq76s75180s8onr481p2270s-cyhtva_gb_nyybj_sbyybjvat_nyy";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:64:"1208:frnepufho-499pp4ns71so4840s970oss01q322n2opon02pp7-frnepurf";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:86:"1208:frnepufho-3npss838839r7oqsq540315797r5rnpn1p643qo5-pbasvther_frnepu_fhofpevcgvbaf";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:86:"1208:frnepufho-957ns2qo135np4o1os23r8rqr8o0sno46990r4p9-fgneg_sbyybjvat_abgvprf_zngpuv";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:86:"1208:frnepufho-q461q945qssnqprqnr68r91p144spnn3876008n6-fgbc_sbyybjvat_abgvprf_zngpuva";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:86:"1208:frnepufho-s3176q706pr8s71630510440r5qnqn8po1r3qq5o-qvfnoyr_nyy_genpxrq_frnepu_fho";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:86:"1208:frnepufho-so8rp5580s8p279rnon71951q20r2517qq27s253-yvfg_nyy_lbhe_frnepu_fhofpevcg";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:86:"1208:frnepufho-57qo47r307s8n041n09n5o853on392o5o7ppoo9n-lbh_ner_abg_genpxvat_nal_frnep";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:60:"1208:frnepufho-27r9sn0p734028pn57n7s569po8p1s91q9qs3633-",_"";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:85:"1208:frnepufho-q6p548059q53074547qs385s8rqqs7p3r63nn190-lbh_ner_genpxvat_frnepurf_sbe";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:80:"1208:frnepufho-2r4q74112s765pso91379pn5n80qq94nrs123628-fhofpevor_gb_guvf_frnepu";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:65:"1208:frnepufho-7q3768264so28s658osn8q6p8os4n992p62o5772-fhofpevor";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:81:"1208:frnepufho-579s0o328s81or5o72po53q10ns993s6663745p2-fhofpevor_gb_guvf_frnepu.";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:86:"1208:frnepufho-q2617rn244qo0939s278825o3260r222rnqpp139-reebe_qvfnoyvat_frnepu_fhofpev";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:86:"1208:frnepufho-967o0oqns2p644n9800ors0898pr407q9o57753p-qvfnoyrq_nyy_lbhe_frnepu_fhofp";a:3:{i:0;R:38300;i:1;R:35355;i:2;R:37120;}s:62:"1208:funerabgvpr-39qns9rp6so75035s5567oqp86691r00619q7n22-"_f"";a:3:{i:0;s:32:"out-statusnet-plugin-sharenotice";i:1;R:35355;i:2;R:37120;}s:61:"1208:funerabgvpr-qs316r17qr9p36858417on18r0qn4qn282qrn84n-…";a:3:{i:0;R:38338;i:1;R:35355;i:2;R:37120;}s:74:"1208:funerabgvpr-175n1p5sr6pq471q752q333r94o3o0993s5q5s39-funer_ba_gjvggre";a:3:{i:0;R:38338;i:1;R:35355;i:2;R:37120;}s:68:"1208:funerabgvpr-684oq56p8qrr9o09n53p825q2sq1nns7o0113p5r-funer_ba_f";a:3:{i:0;R:38338;i:1;R:35355;i:2;R:37120;}s:75:"1208:funerabgvpr-853s1p24r87n3s9812proo55o6ssq080r3sr5o01-funer_ba_snprobbx";a:3:{i:0;R:38338;i:1;R:35355;i:2;R:37120;}s:87:"1208:funerabgvpr-oor9o0813q677664293s4sqnps41695n35567956-guvf_cyhtva_nyybjf_funevat_bs";a:3:{i:0;R:38338;i:1;R:35355;i:2;R:37120;}s:86:"1208:fvzcyrhey-no1080or122p6758o03o1s518005422r490qr989-lbh_zhfg_fcrpvsl_n_freivprhey.";a:3:{i:0;s:30:"out-statusnet-plugin-simpleurl";i:1;R:35355;i:2;R:37120;}s:85:"1208:fvzcyrhey-4onp8np0p1o38q73219so01r51oq6ps869o58946-hfrf_n_uers="uggc_1$f_"_1$f_n";a:3:{i:0;R:38345;i:1;R:35355;i:2;R:37120;}s:61:"1208:fvgrznc-84rp3r71q2p9q85nnns417n243p8r7q9s42135sp-fvgrznc";a:3:{i:0;s:28:"out-statusnet-plugin-sitemap";i:1;R:35355;i:2;R:37120;}s:84:"1208:fvgrznc-p4n7p0q42p376860r3s00orp1nr9q0s11s652426-fvgrznc_frggvatf_sbe_guvf_fgng";a:3:{i:0;R:38348;i:1;R:35355;i:2;R:37120;}s:64:"1208:fvgrznc-2ns222678242593qpn663q1555pqn29457r3n045-tbbtyr_xrl";a:3:{i:0;R:38348;i:1;R:35355;i:2;R:37120;}s:84:"1208:fvgrznc-9306r948sr1r1684q00762666np136qr13332686-tbbtyr_jroznfgre_gbbyf_irevsvp";a:3:{i:0;R:38348;i:1;R:35355;i:2;R:37120;}s:63:"1208:fvgrznc-o70029596o2pnoq1ror898s6110478o003pqo1s6-lnubb_xrl";a:3:{i:0;R:38348;i:1;R:35355;i:2;R:37120;}s:84:"1208:fvgrznc-9qp689rsq900001n42qs393nrsoq8qosqp49p3ro-lnubb!_fvgr_rkcybere_irevsvpng";a:3:{i:0;R:38348;i:1;R:35355;i:2;R:37120;}s:62:"1208:fvgrznc-r670957rp6393135s842o624n13302q4pq801q9o-ovat_xrl";a:3:{i:0;R:38348;i:1;R:35355;i:2;R:37120;}s:84:"1208:fvgrznc-4s339n6r3831n57rq637668r5q7n5n6987nq8071-ovat_jroznfgre_gbbyf_irevsvpng";a:3:{i:0;R:38348;i:1;R:35355;i:2;R:37120;}s:58:"1208:fvgrznc-r85726o34723718q86rro40no996r21219883557-fnir";a:3:{i:0;R:38348;i:1;R:35355;i:2;R:37120;}s:76:"1208:fvgrznc-o7p9n44n894r95pr315825p55357os1o2so5o8n2-fnir_fvgrznc_frggvatf.";a:3:{i:0;R:38348;i:1;R:35355;i:2;R:37120;}s:75:"1208:fvgrznc-6s63qsr31p88qp28317r70690oq897s8097639qq-fvgrznc_pbasvthengvba";a:3:{i:0;R:38348;i:1;R:35355;i:2;R:37120;}s:61:"1208:fvgrznc-6q5q9p40o48qr30n0p9sono333025rqq2or70328-fvgrznc";a:3:{i:0;R:38348;i:1;R:35355;i:2;R:37120;}s:84:"1208:fvgrznc-op57r5or8no0oq40onp36o0npnp37q6090497570-guvf_cyhtva_nyybjf_perngvba_bs";a:3:{i:0;R:38348;i:1;R:35355;i:2;R:37120;}s:92:"1208:fyvprqsnibevgrf-76r05r2qsqnoqo11340qo9n1q48601773n8nsr4n-fubjf_gvzryvarf_bs_cbchyne_abg";a:3:{i:0;s:36:"out-statusnet-plugin-slicedfavorites";i:1;R:35355;i:2;R:37120;}s:86:"1208:fyvprqsnibevgrf-4ns0o176q96s47r8r3p11s56q3qps7o2o40nn038-haxabja_snibevgrf_fyvpr.";a:3:{i:0;R:38362;i:1;R:35355;i:2;R:37120;}s:89:"1208:fcuvakfrnepu-nqp9n3o1s25q2605599oo7186925rp32s3r8o1o9-fcuvak_frnepu_pbhyq_abg_vqragv";a:3:{i:0;s:33:"out-statusnet-plugin-sphinxsearch";i:1;R:35355;i:2;R:37120;}s:89:"1208:fcuvakfrnepu-8n16887p04osqnn698q39pnqno6s76360p70qp05-fcuvak_cuc_rkgrafvba_zhfg_or_v";a:3:{i:0;R:38365;i:1;R:35355;i:2;R:37120;}s:89:"1208:fcuvakfrnepu-npopso90ps3s519oop6q2q6npqqqs0p69q90ss25-cyhtva_sbe_fcuvak_frnepu_onpxr";a:3:{i:0;R:38365;i:1;R:35355;i:2;R:37120;}s:84:"1208:fcbgvsl-p0r77853o4s2o53rr5rs099256o0ps7437q26rqn-perngr_cerggl_n_uers="uggc_jjj";a:3:{i:0;s:28:"out-statusnet-plugin-spotify";i:1;R:35355;i:2;R:37120;}s:87:"1208:fdycebsvyr-p1615o63p45ssqs0n6641s3538q39556o5n09qqr-qroht_gbby_gb_jngpu_sbe_cbbeyl";a:3:{i:0;s:31:"out-statusnet-plugin-sqlprofile";i:1;R:35355;i:2;R:37120;}s:85:"1208:fdyfgngf-p1615o63p45ssqs0n6641s3538q39556o5n09qqr-qroht_gbby_gb_jngpu_sbe_cbbeyl";a:3:{i:0;s:29:"out-statusnet-plugin-sqlstats";i:1;R:35355;i:2;R:37120;}s:99:"1208:fgevpggenafcbegfrphevgl-2s331912o77r8o1psn2122osr55481s2r850nq5r-gur_fgevpg_genafcbeg_frphevgl";a:3:{i:0;s:44:"out-statusnet-plugin-stricttransportsecurity";i:1;R:35355;i:2;R:37120;}s:75:"1208:fhozveebe-s66q64098s74or272n9o011n15s4659o14onn573-vainyvq_srrq_hey_f.";a:3:{i:0;s:30:"out-statusnet-plugin-submirror";i:1;R:35355;i:2;R:37120;}s:86:"1208:fhozveebe-40q4oqp88s7482531r8qprp88qn5p004oo0441n6-vainyvq_cebsvyr_sbe_zveebevat.";a:3:{i:0;R:38377;i:1;R:35355;i:2;R:37120;}s:86:"1208:fhozveebe-p53pq3151poqqq00n0r2s1po054n6521spspn417-pnaabg_zveebe_n_fgnghfarg_tebh";a:3:{i:0;R:38377;i:1;R:35355;i:2;R:37120;}s:85:"1208:fhozveebe-n5s41936r2o5289nqr24514732713pq67pp47335-guvf_npgvba_bayl_npprcgf_cbfg";a:3:{i:0;R:38377;i:1;R:35355;i:2;R:37120;}s:85:"1208:fhozveebe-07363q7qop93q7r4q63rpr8np5r72os52qq64506-gurer_jnf_n_ceboyrz_jvgu_lbhe";a:3:{i:0;R:38377;i:1;R:35355;i:2;R:37120;}s:70:"1208:fhozveebe-8r2qr1r8o1ns7pq2o403oq0q27p71332n55np628-abg_ybttrq_va.";a:3:{i:0;R:38377;i:1;R:35355;i:2;R:37120;}s:66:"1208:fhozveebe-qq1242n8sp29346652osqno77420rr2576o04652-fhofpevorq";a:3:{i:0;R:38377;i:1;R:35355;i:2;R:37120;}s:86:"1208:fhozveebe-66qp6q09137971rq9779r2179p65161p1qqo4sqp-erdhrfgrq_vainyvq_cebsvyr_gb_r";a:3:{i:0;R:38377;i:1;R:35355;i:2;R:37120;}s:70:"1208:fhozveebe-092777p17919p8723q9qs4n551r53pq4r6n95q1o-onq_sbez_qngn.";a:3:{i:0;R:38377;i:1;R:35355;i:2;R:37120;}s:86:"1208:fhozveebe-rq9p771rrrn2188202o0pps7qq73o6q7rqq1218r-gur_zveebe_erdhrfg_snvyrq,_orp";a:3:{i:0;R:38377;i:1;R:35355;i:2;R:37120;}s:86:"1208:fhozveebe-1sn3r9680o4q6o4r1rrn9ss1s128r041s6rs610p-vagreany_sbez_reebe_haerpbtavm";a:3:{i:0;R:38377;i:1;R:35355;i:2;R:37120;}s:84:"1208:fhozveebe-7212p0595n4650n4575p98571nr76n70531s32s0-pbhyq_abg_fhofpevor_gb_srrq.";a:3:{i:0;R:38377;i:1;R:35355;i:2;R:37120;}s:76:"1208:fhozveebe-76po54s6366r2s81n02193q2oo230357s335pp5o-srrq_zveebe_frggvatf";a:3:{i:0;R:38377;i:1;R:35355;i:2;R:37120;}s:86:"1208:fhozveebe-p27151r036ns358p78s751821o840r41000n7q9r-lbh_pna_zveebe_hcqngrf_sebz_zn";a:3:{i:0;R:38377;i:1;R:35355;i:2;R:37120;}s:68:"1208:fhozveebe-srp1oor7493s5sq8q7sp2npsn65s58oooq714nro-cebivqre_nqq";a:3:{i:0;R:38377;i:1;R:35355;i:2;R:37120;}s:86:"1208:fhozveebe-rn65217006r6n9q0o045ssr0np9sp6r4rns2q0s8-chyy_srrqf_vagb_lbhe_gvzryvar!";a:3:{i:0;R:38377;i:1;R:35355;i:2;R:37120;}s:65:"1208:fhozveebe-75nnrr8q2soo066r95856s14sr83o7rpp168sr99-zveebevat";a:3:{i:0;R:38377;i:1;R:35355;i:2;R:37120;}s:86:"1208:fhozveebe-62nr7q9q87q7161qn31o4s5014010rn6n037p324-pbasvther_zveebevat_bs_cbfgf_s";a:3:{i:0;R:38377;i:1;R:35355;i:2;R:37120;}s:70:"1208:fhozveebe-03n2r127rq85141qo05p59n6rppr8o062q8s32qq-zveeberq_srrqf";a:3:{i:0;R:38377;i:1;R:35355;i:2;R:37120;}s:76:"1208:fhozveebe-5sno8648820873o0p1rq8p31ss578806rrr7po44-jro_cntr_be_srrq_hey";a:3:{i:0;R:38377;i:1;R:35355;i:2;R:37120;}s:64:"1208:fhozveebe-q9p2093623q6np3rsso708o2rp044291o221oqnr-nqq_srrq";a:3:{i:0;R:38377;i:1;R:35355;i:2;R:37120;}s:72:"1208:fhozveebe-4po246o9454o3s596653oqo0qqnn950pr6p4q822-gjvggre_hfreanzr";a:3:{i:0;R:38377;i:1;R:35355;i:2;R:37120;}s:67:"1208:fhozveebe-o4no80n2o2966s00s1nq1o588115nnr5p8sp6256-erzbgr_srrq";a:3:{i:0;R:38377;i:1;R:35355;i:2;R:37120;}s:66:"1208:fhozveebe-p1q9n58p909n57742383p54s00n6r251oo68poo4-ybpny_hfre";a:3:{i:0;R:38377;i:1;R:35355;i:2;R:37120;}s:71:"1208:fhozveebe-n87677r029oq73528s0nq1s191n2pr508q1q2217-zveebevat_fglyr";a:3:{i:0;R:38377;i:1;R:35355;i:2;R:37120;}s:85:"1208:fhozveebe-74rs3084s4q805ns90r5q5s0qo3o3151243qo55s-ercrng_ersrerapr_gur_bevtvany";a:3:{i:0;R:38377;i:1;R:35355;i:2;R:37120;}s:86:"1208:fhozveebe-rsr42q458sro449532s260r5n524423o9oo5qoq5-ercbfg_gur_pbagrag_haqre_zl_np";a:3:{i:0;R:38377;i:1;R:35355;i:2;R:37120;}s:60:"1208:fhozveebe-r85726o34723718q86rro40no996r21219883557-fnir";a:3:{i:0;R:38377;i:1;R:35355;i:2;R:37120;}s:70:"1208:fhozveebe-90qo67r69s8982o81q6qr74n9547s7n0s0756s7o-fgbc_zveebevat";a:3:{i:0;R:38377;i:1;R:35355;i:2;R:37120;}s:63:"1208:fhozveebe-5392p950oqqr4or7r5s5o8sqp6n1pn5s21r905ps-gjvggre";a:3:{i:0;R:38377;i:1;R:35355;i:2;R:37120;}s:72:"1208:fhozveebe-87np5p0qp3s80n2ss8o920n27ppr1324360p281r-eff_be_ngbz_srrq";a:3:{i:0;R:38377;i:1;R:35355;i:2;R:37120;}s:78:"1208:fhozveebe-35s2291nsppqnrn2rpqo93772rnp521930931r14-fryrpg_n_srrq_cebivqre";a:3:{i:0;R:38377;i:1;R:35355;i:2;R:37120;}s:97:"1208:fhofpevcgvbaguebggyr-34r1or0s6nq3o65pn97np816671n671p3073361o-gbb_znal_fhofpevcgvbaf._gnxr_n";a:3:{i:0;s:41:"out-statusnet-plugin-subscriptionthrottle";i:1;R:35355;i:2;R:37120;}s:97:"1208:fhofpevcgvbaguebggyr-0o15r9s207709q75r23rr3r218qp424q9ps4125p-gbb_znal_zrzorefuvcf._gnxr_n_o";a:3:{i:0;R:38410;i:1;R:35355;i:2;R:37120;}s:97:"1208:fhofpevcgvbaguebggyr-opr96r62p65185p781non67160072on82q3r9917-pbasvthenoyr_yvzvgf_sbe_fhofpe";a:3:{i:0;R:38410;i:1;R:35355;i:2;R:37120;}s:85:"1208:gnosbphf-q43496q53n8prpn502n5pp0pn444po9ron1np973-gnosbphf_punatrf_gur_abgvpr_sb";a:3:{i:0;s:29:"out-statusnet-plugin-tabfocus";i:1;R:35355;i:2;R:37120;}s:78:"1208:gntfho-29po8p970n75o482rr16osr7p26op77q2o3r4r0o-hafhofpevor_sebz_guvf_gnt";a:3:{i:0;s:27:"out-statusnet-plugin-tagsub";i:1;R:35355;i:2;R:37120;}s:64:"1208:gntfho-ro622ppr4qn95noq789no1n68so0ss597o8op8q9-hafhofpevor";a:3:{i:0;R:38416;i:1;R:35355;i:2;R:37120;}s:79:"1208:gntfho-p14924np1001pop933qs6q15631qq58nsp160r79-hafhofpevor_sebz_guvf_gnt.";a:3:{i:0;R:38416;i:1;R:35355;i:2;R:37120;}s:82:"1208:gntfho-o24osps878o95q9630rrr5p7p553735383519snp-cyhtva_gb_nyybj_sbyybjvat_nyy";a:3:{i:0;R:38416;i:1;R:35355;i:2;R:37120;}s:57:"1208:gntfho-4q6n4n083sn24p8qopq45r99621n7s9por5q0q62-gntf";a:3:{i:0;R:38416;i:1;R:35355;i:2;R:37120;}s:80:"1208:gntfho-s680624o741op5r864n563107s5r544067n7929s-pbasvther_gnt_fhofpevcgvbaf";a:3:{i:0;R:38416;i:1;R:35355;i:2;R:37120;}s:57:"1208:gntfho-848rrq0soq5429s556o2982qrp3rn87136r33r44-gntf";a:3:{i:0;R:38416;i:1;R:35355;i:2;R:37120;}s:74:"1208:gntfho-r63np9nq38o6nos13n31sr9o417745qo992rr636-fhofpevor_gb_guvf_gnt";a:3:{i:0;R:38416;i:1;R:35355;i:2;R:37120;}s:62:"1208:gntfho-7q3768264so28s658osn8q6p8os4n992p62o5772-fhofpevor";a:3:{i:0;R:38416;i:1;R:35355;i:2;R:37120;}s:75:"1208:gntfho-p668o8440o61n3s35n825454o79o414472psoq19-fhofpevor_gb_guvf_gnt.";a:3:{i:0;R:38416;i:1;R:35355;i:2;R:37120;}s:65:"1208:gntfho-9no84878n997p48p4oq68o3n65572p1r75133o8r-hafhofpevorq";a:3:{i:0;R:38416;i:1;R:35355;i:2;R:37120;}s:82:"1208:gntfho-n5s41936r2o5289nqr24514732713pq67pp47335-guvf_npgvba_bayl_npprcgf_cbfg";a:3:{i:0;R:38416;i:1;R:35355;i:2;R:37120;}s:82:"1208:gntfho-07363q7qop93q7r4q63rpr8np5r72os52qq64506-gurer_jnf_n_ceboyrz_jvgu_lbhe";a:3:{i:0;R:38416;i:1;R:35355;i:2;R:37120;}s:67:"1208:gntfho-8r2qr1r8o1ns7pq2o403oq0q27p71332n55np628-abg_ybttrq_va.";a:3:{i:0;R:38416;i:1;R:35355;i:2;R:37120;}s:69:"1208:gntfho-8q094195o13p8q12r5n0rp2o7q16131r7331sn59-ab_fhpu_cebsvyr.";a:3:{i:0;R:38416;i:1;R:35355;i:2;R:37120;}s:63:"1208:gntfho-qq1242n8sp29346652osqno77420rr2576o04652-fhofpevorq";a:3:{i:0;R:38416;i:1;R:35355;i:2;R:37120;}s:74:"1208:gntfho-971552804o64163osoqnp2r17on8382n8o6896r9-f'f_gnt_fhofpevcgvbaf";a:3:{i:0;R:38416;i:1;R:35355;i:2;R:37120;}s:82:"1208:gntfho-6621021p4p939577n969rq96841896sq96s508q6-1$f'f_gnt_fhofpevcgvbaf,_cntr";a:3:{i:0;R:38416;i:1;R:35355;i:2;R:37120;}s:83:"1208:gntfho-717or052r00o025745rs4p579r1ps610o7o72934-lbh_unir_fhofpevorq_gb_erprvir";a:3:{i:0;R:38416;i:1;R:35355;i:2;R:37120;}s:82:"1208:gntfho-06s6638q4742558q4oq516697o42o2r81sp3rp6p-f_unf_fhofpevorq_gb_erprvir_n";a:3:{i:0;R:38416;i:1;R:35355;i:2;R:37120;}s:83:"1208:gntfho-8pps40pn460q467034q3p6s3ps83s66449p5s653-lbh_ner_abg_yvfgravat_gb_nal_u";a:3:{i:0;R:38416;i:1;R:35355;i:2;R:37120;}s:81:"1208:gntfho-547n094146n2803770on3qqrsn56npnsp0o27242-f_vf_abg_sbyybjvat_nal_gntf.";a:3:{i:0;R:38416;i:1;R:35355;i:2;R:37120;}s:82:"1208:gntfho-s87nrs2804n833387qsr23sp8247q5pr50802644-n_uers="_1$f"_2$f_n_fvapr_3$f";a:3:{i:0;R:38416;i:1;R:35355;i:2;R:37120;}s:85:"1208:gvtughey-no1080or122p6758o03o1s518005422r490qr989-lbh_zhfg_fcrpvsl_n_freivprhey.";a:3:{i:0;s:29:"out-statusnet-plugin-tighturl";i:1;R:35355;i:2;R:37120;}s:84:"1208:gvtughey-4onp8np0p1o38q73219so01r51oq6ps869o58946-hfrf_n_uers="uggc_1$f_"_1$f_n";a:3:{i:0;R:38440;i:1;R:35355;i:2;R:37120;}s:84:"1208:gvalzpr-407s1009569o97250q15q094p91q9o46qq1nro4s-hfr_gvalzpr_yvoenel_gb_nyybj_e";a:3:{i:0;s:28:"out-statusnet-plugin-tinymce";i:1;R:35355;i:2;R:37120;}s:76:"1208:gjvggreoevqtr-r4p40qo8772116034n463n5271sp78sn363qr612-gjvggre_frggvatf";a:3:{i:0;s:34:"out-statusnet-plugin-twitterbridge";i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-4184q42r213p82902q7n53q5sp2o185s48n07p82-pbaarpg_lbhe_gjvggre_nppbhag_g";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:75:"1208:gjvggreoevqtr-3s9s33r224qs5r093onq041r4r285pss74714490-gjvggre_nppbhag";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:85:"1208:gjvggreoevqtr-p6115208p345429001311q6q0pqo96s7no355sor-pbaarpgrq_gjvggre_nppbhag";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-53o955628s0q3r8rro445qp35qn671930146761n-qvfpbaarpg_zl_nppbhag_sebz_gjv";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-o7q11o6o4qos25nr3n7q1r16sno0051qos988o75-qvfpbaarpgvat_lbhe_gjvggre_npp";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-78621qo8n0r3858022n083294491138n9o447063-xrrc_lbhe_1$f_nppbhag_ohg_qvfp";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:70:"1208:gjvggreoevqtr-q19nq8912000sqrsr232psr0o9668n713191nqs4-qvfpbaarpg";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:71:"1208:gjvggreoevqtr-9qsq349rorr555ro8q652or20qnq971pnr439rpn-cersreraprf";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:89:"1208:gjvggreoevqtr-5qn64op83o8123o35nqponqs216791p4rs1165r2-nhgbzngvpnyyl_fraq_zl_abgvprf";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-7opn6q699n2o6n778qpnn3p813n7nr459187r246-fraq_ybpny_"@"_ercyvrf_gb_gjvg";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-8n9sq8n5qo83pqq19177814p36n0np506614r7on-fhofpevor_gb_zl_gjvggre_sevraq";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:87:"1208:gjvggreoevqtr-p4s1s2o938p2op637r5qp920s801676nqrr1p9n9-vzcbeg_zl_sevraqf_gvzryvar.";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:64:"1208:gjvggreoevqtr-r85726o34723718q86rro40no996r21219883557-fnir";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:63:"1208:gjvggreoevqtr-r1562srq201p341pr7oq08o9pq421s3o379222o8-nqq";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:89:"1208:gjvggreoevqtr-07363q7qop93q7r4q63rpr8np5r72os52qq64506-gurer_jnf_n_ceboyrz_jvgu_lbhe";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:87:"1208:gjvggreoevqtr-7oon1p3n51pp7o727087qq3414o028r505991127-harkcrpgrq_sbez_fhozvffvba.";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-rn2srn767pp0r97pn74p9r10p272rr2q7qpr9p5n-ab_gjvggre_pbaarpgvba_gb_erzbi";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-o53p91q531p78817q59320p843no15823s12952p-pbhyq_abg_erzbir_gjvggre_hfre.";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:89:"1208:gjvggreoevqtr-9n4op0pon5020o881q57osq62pn5psq581or7qpr-gjvggre_nppbhag_qvfpbaarpgrq.";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-72738494no75ro3q6sqs1q07rn4sp52o7205217n-pbhyq_abg_fnir_gjvggre_cersrer";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:86:"1208:gjvggreoevqtr-98qqs70513rr2s444op7nn28qo0oq216s392o608-gjvggre_cersreraprf_fnirq.";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:89:"1208:gjvggreoevqtr-01r682rs71prqoq33o744626rp870qq46s6n2210-lbh_pnaabg_ertvfgre_vs_lbh_qb";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:85:"1208:gjvggreoevqtr-674s224854rps6s0s452r50r257pp88p27pp9189-fbzrguvat_jrveq_unccrarq.";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-2336ssn622no40pn5np51o690338q918671s1345-pbhyq_abg_yvax_lbhe_gjvggre_np";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-onr722s55o1996s85381o36rsppr3oornq4o88n9-pbhyq_abg_yvax_lbhe_gjvggre_np";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-01005q7rq27081766s5r7os5s93673o7rs88qpnq-guvf_vf_gur_svefg_gvzr_lbh_uni";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:81:"1208:gjvggreoevqtr-55qo5197p758s5r11o675p541n8n1003s7003r9q-gjvggre_nppbhag_frghc";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:78:"1208:gjvggreoevqtr-64383p6s06913p6qs1o90r4oq8r57s1q51457q76-pbaarpgvba_bcgvbaf";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:78:"1208:gjvggreoevqtr-n7oss9684r9p4so2o0187pq81972n1n99249s393-perngr_arj_nppbhag";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-84s3905p73s0943qq56o4p5qor015s0s975p30p2-perngr_n_arj_hfre_jvgu_guvf_av";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:72:"1208:gjvggreoevqtr-3n4rnnq2so5628204ro54po59p8q56onnp637s07-arj_avpxanzr";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-2q5ns6n79p80o154ors7q5ss52q6qo27755r287s-1-64_ybjrepnfr_yrggref_be_ahzo";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:65:"1208:gjvggreoevqtr-54213nqs04451s300sr4p09s545o5s52n862p185-rznvy";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-qq7q1n67n63r6n2snq2n061430pqs7s90647p1pr-hfrq_bayl_sbe_hcqngrf,_naabhap";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:66:"1208:gjvggreoevqtr-739o11519q45061op93s4q38854460rps67n6429-perngr";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:84:"1208:gjvggreoevqtr-o775o749217q4r734on81r0093n20oonp8185801-pbaarpg_rkvfgvat_nppbhag";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-rr55781o4p7o80qqr72r2sp812po5o4579683206-vs_lbh_nyernql_unir_na_nppbhag";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:77:"1208:gjvggreoevqtr-03o13q9s66r7s2n94s311n5146p474184s490258-rkvfgvat_avpxanzr";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:68:"1208:gjvggreoevqtr-8or3p943o1609sssosp51nnq666q0n04nqs83p9q-cnffjbeq";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:67:"1208:gjvggreoevqtr-3229609r15436rp51ops00818n69n84qop58n0p2-yvprafr";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-1p2574o14145598p6sn33pp45425952463977prp-zl_grkg_naq_svyrf_ner_ninvynoy";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:67:"1208:gjvggreoevqtr-ro508s5905o6s621060r2p063srqo41o040rr0op-pbaarpg";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:85:"1208:gjvggreoevqtr-38pop2o2241ss6r84oq71264noq0o941448r5s11-ertvfgengvba_abg_nyybjrq.";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:88:"1208:gjvggreoevqtr-q496nrsq2qq8r3o02n2rs17n7667p75on1sq5rpn-abg_n_inyvq_vaivgngvba_pbqr.";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:81:"1208:gjvggreoevqtr-ns99p57snp97957951os39669sq880418730sr8n-avpxanzr_abg_nyybjrq.";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-o3oq02o41o8r1sn2qr777on31so092onr01pppr7-avpxanzr_nyernql_va_hfr._gel_n";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:83:"1208:gjvggreoevqtr-oq604on4r05921n4n3oo7r451832n41p22n01or5-reebe_ertvfgrevat_hfre.";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-o9973p7nq77qq363096s5oopq996q600301oo13s-reebe_pbaarpgvat_hfre_gb_gjvgg";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:89:"1208:gjvggreoevqtr-0pp909or0s2qn4on1n41oo22noq333rr5q822722-vainyvq_hfreanzr_be_cnffjbeq.";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:67:"1208:gjvggreoevqtr-85s9731rs356oo409r29909nr05q43457q289s98-gjvggre";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:83:"1208:gjvggreoevqtr-1n5n20q43rps9042q015sqoor0932333p091s033-gjvggre_oevqtr_frggvatf";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:89:"1208:gjvggreoevqtr-248r3r4ps2sqqorqrss48s3s618sqn197pssq6os-vainyvq_pbafhzre_xrl._znkvzhz";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-7264sq7nqn3n0q1or5p8oq5n096s0q0p5212pr83-vainyvq_pbafhzre_frperg._znkvz";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:88:"1208:gjvggreoevqtr-51o3r1962pr95ro7o127161o4sss6q1roo64rqp1-gjvggre_nccyvpngvba_frggvatf";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:72:"1208:gjvggreoevqtr-1q8242026o516o87520qso3p6612np416s79qrns-pbafhzre_xrl";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-no2031o0q0ssnp3s85qs245r73p2s44r67prr0qn-gur_pbafhzre_xrl_nffvtarq_ol_g";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:75:"1208:gjvggreoevqtr-n76s1q0q217q57n1n44q4849pppoo0102rq2s0sq-pbafhzre_frperg";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-qo0r037r691p672p1q007sr862p34p6os4r1n1p3-gur_pbafhzre_frperg_nffvtarq_o";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-9op9644r9ro196pr23n7ror42o34373no2p99pso-abgr_n_tybony_pbafhzre_xrl_naq";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:78:"1208:gjvggreoevqtr-p03q4oso6p5058n520s110642n3prps2200328qq-vagrtengvba_fbhepr";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-q30r132n6n98q2851s77p8qn1o7p37r8q289sqs7-gur_anzr_bs_lbhe_gjvggre_nccyv";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:67:"1208:gjvggreoevqtr-6os5qn9p080orr3n8142586p412nn39971137rrr-bcgvbaf";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:89:"1208:gjvggreoevqtr-n0o6s94p6q6844oq88on0p4orn14n10rqp106p31-ranoyr_"fvta-va_jvgu_gjvggre"";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-np845896n5rn9p4ns57271587743p2nn58309852-guvf_nyybj_hfref_gb_ybtva_jvgu";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:81:"1208:gjvggreoevqtr-12326561ro20nq4798q0152144r4no25or8s89pp-ranoyr_gjvggre_vzcbeg";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-4ss9psn2262r4oq3o068s02n71661s7rr8n962sn-nyybj_hfref_gb_vzcbeg_gurve_gj";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-484q01046955751031n1116823pq92p02564ooo6-fnir_gur_gjvggre_oevqtr_frggva";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-2p300r01n4nn1r2019nqp4n363s8n7oq90oo643o-vainyvq_hey_fpurzr_sbe_uggc_fg";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-2os695q49650n2rq8sp77r4qpo2r9r6068qpq13n-tbg_vachg_sebz_harkcrpgrq_fbpx";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-73poq95sspq2p3p1pr94nqrqssn19o3p746910p7-vainyvq_fgngr_va_unaqyryvar_f.";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:89:"1208:gjvggreoevqtr-2op44s9290n195rn0s449q9492p4o9r5spr13s96-vainyvq_uggc_erfcbafr_yvar_f.";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-6352r8n7p9126q6o4qn2o1955s00992s53p9o66q-vainyvq_uggc_erfcbafr_yvar_puh";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-99q247q3o3898671275868374s9o5987o3923o44-onq_uggc_erfcbafr_pbqr_1$f_2$f";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:67:"1208:gjvggreoevqtr-5r15r50n812434q6r07588s2p5o941q1070o7025-gjvggre";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-rrq99142o408oq3p6465pprrp790q62rpor82o7p-ybtva_be_ertvfgre_hfvat_gjvggr";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:87:"1208:gjvggreoevqtr-02qs8po79q42rsn2r16n829q6ns0089823q07nq3-gjvggre_vagrtengvba_bcgvbaf";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:67:"1208:gjvggreoevqtr-5392p950oqqr4or7r5s5o8sqp6n1pn5s21r905ps-gjvggre";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-p5nr5n6q3qrn257sn34os0o6o0ns0053rn413rnn-gjvggre_oevqtr_pbasvthengvba_c";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-ro7r7r6p181s7o36728np3o5153527s3874qrpn6-gur_gjvggre_"oevqtr"_cyhtva_ny";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:78:"1208:gjvggreoevqtr-sooosr3331rqo0p2pr74ors6s8q5749p52p3017o-nyernql_ybttrq_va.";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:73:"1208:gjvggreoevqtr-osnr71s5nq6193n8n75r08417106pn076rrp2np9-gjvggre_ybtva";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-21o20n0os2q826s784s49980107r1145q009826p-ybtva_jvgu_lbhe_gjvggre_nppbha";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:80:"1208:gjvggreoevqtr-6p3p1qr299r8r958290opnop34n72ss09pr336p4-fvta_va_jvgu_gjvggre";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-230ps0qq6osqp10p8010731p542808s25osoq7n9-lbhe_gjvggre_oevqtr_unf_orra_q";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:90:"1208:gjvggreoevqtr-4o0or96np552ro363sn96r64725pqpoo1086n82n-uv,_1$f._jr'er_fbeel_gb_vasbez";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:72:"1208:gjvggreoevqtr-35qo97n57q981p643479o9po6s58or2q093nss08-eg_@_1$f_2$f";a:3:{i:0;R:38445;i:1;R:35355;i:2;R:37120;}s:73:"1208:hfresynt-0p686p1p10p1650rp0qp3r775n967oqs5n452595-synttrq_sbe_erivrj";a:3:{i:0;s:29:"out-statusnet-plugin-userflag";i:1;R:35355;i:2;R:37120;}s:62:"1208:hfresynt-s8qo8n172or6sno179n39nn7qrr85r1s7nspoq56-synttrq";a:3:{i:0;R:38533;i:1;R:35355;i:2;R:37120;}s:85:"1208:hfresynt-p5651n36qq173qpq0rn3q8448qo7q73542os7r15-guvf_cyhtva_nyybjf_synttvat_bs";a:3:{i:0;R:38533;i:1;R:35355;i:2;R:37120;}s:59:"1208:hfresynt-n774409n00p21qr377ps8rq5p6n56o8547973042-synt";a:3:{i:0;R:38533;i:1;R:35355;i:2;R:37120;}s:79:"1208:hfresynt-49qnpnpq78n16n7n46278692n95ns0807s3p0o8n-synt_cebsvyr_sbe_erivrj.";a:3:{i:0;R:38533;i:1;R:35355;i:2;R:37120;}s:60:"1208:hfresynt-719rn396nq92r01o4757rp2o93oo1r5s270s771q-pyrne";a:3:{i:0;R:38533;i:1;R:35355;i:2;R:37120;}s:70:"1208:hfresynt-6302280op4sr06r8r430s4prp93n64763o6qno86-pyrne_nyy_syntf";a:3:{i:0;R:38533;i:1;R:35355;i:2;R:37120;}s:69:"1208:hfresynt-8r2qr1r8o1ns7pq2o403oq0q27p71332n55np628-abg_ybttrq_va.";a:3:{i:0;R:38533;i:1;R:35355;i:2;R:37120;}s:85:"1208:hfresynt-8q84r1170627r711s5sn5o8rrs03sq7133o7r1sn-lbh_pnaabg_erivrj_cebsvyr_synt";a:3:{i:0;R:38533;i:1;R:35355;i:2;R:37120;}s:71:"1208:hfresynt-37rns35r81o524rr508nn20754s125792qsq50n3-synttrq_cebsvyrf";a:3:{i:0;R:38533;i:1;R:35355;i:2;R:37120;}s:63:"1208:hfresynt-rn8o09p2354o17p2n83673437q6380or0r7o8p73-zbqrengr";a:3:{i:0;R:38533;i:1;R:35355;i:2;R:37120;}s:84:"1208:hfresynt-7s8o0n253on09r942r6rqs330q35694o3n3o527q-cyheny_trggrkg_synttrq_ol_1$f";a:3:{i:0;R:38533;i:1;R:35355;i:2;R:37120;}s:67:"1208:hfresynt-o71078r6o5q33onr69834p034s35s77or0p1qnn8-synttrq_ol_f";a:3:{i:0;R:38533;i:1;R:35355;i:2;R:37120;}s:85:"1208:hfresynt-37773p1r891n346n678978p314624r0753752482-pbhyq_abg_pyrne_syntf_sbe_cebs";a:3:{i:0;R:38533;i:1;R:35355;i:2;R:37120;}s:68:"1208:hfresynt-134p1991n49q49253428o42q5478pros9n97895p-syntf_pyrnerq";a:3:{i:0;R:38533;i:1;R:35355;i:2;R:37120;}s:62:"1208:hfresynt-n5654n3791201n60o1r0166479ss4o7r0ppop445-pyrnerq";a:3:{i:0;R:38533;i:1;R:35355;i:2;R:37120;}s:85:"1208:hfresynt-n87q91r982sps166p7ro04n1498p79568r5384p8-pbhyq_abg_synt_cebsvyr_"_q"_sb";a:3:{i:0;R:38533;i:1;R:35355;i:2;R:37120;}s:85:"1208:hfreyvzvg-0r1925254410on6734nq620o4937o031q09po594-cyheny_trggrkg_pnaabg_ertvfgr";a:3:{i:0;s:30:"out-statusnet-plugin-userlimit";i:1;R:35355;i:2;R:37120;}s:85:"1208:hfreyvzvg-7o52548541p97626sp3q09o9ssno412958r847pn-yvzvg_gur_ahzore_bs_hfref_jub";a:3:{i:0;R:38551;i:1;R:35355;i:2;R:37120;}s:89:"1208:jvxvunfugntf-oo1o25o2sr80596o53n26194r0rn9s9150r61q9p-rqvg_gur_negvpyr_sbe_f_ba_jvxv";a:3:{i:0;s:33:"out-statusnet-plugin-wikihashtags";i:1;R:35355;i:2;R:37120;}s:63:"1208:jvxvunfugntf-5301648qps6o53prsp9rq52999nnn92q4603pnr0-rqvg";a:3:{i:0;R:38554;i:1;R:35355;i:2;R:37120;}s:88:"1208:jvxvunfugntf-ssr9p96o0q817s02ooqq232s72rqopr3npnp6r80-funerq_haqre_gur_grezf_bs_gur";a:3:{i:0;R:38554;i:1;R:35355;i:2;R:37120;}s:66:"1208:jvxvunfugntf-8s0psonss9010717pn04s5s876sq262sp4073ro9-tah_sqy";a:3:{i:0;R:38554;i:1;R:35355;i:2;R:37120;}s:89:"1208:jvxvunfugntf-r10003q7954n9nn63p10n073sp6552r655330nn0-fgneg_gur_negvpyr_sbe_f_ba_jvx";a:3:{i:0;R:38554;i:1;R:35355;i:2;R:37120;}s:89:"1208:jvxvunfugntf-9q7o71n67p59r57r9p9n00opn1n70748r3p12pp0-trgf_unfugnt_qrfpevcgvbaf_sebz";a:3:{i:0;R:38554;i:1;R:35355;i:2;R:37120;}s:91:"1208:jvxvubjcebsvyr-523or9s20n2oo91pp87p9746709np226903027q9-srgpurf_ningne_naq_bgure_cebsv";a:3:{i:0;s:35:"out-statusnet-plugin-wikihowprofile";i:1;R:35355;i:2;R:37120;}s:91:"1208:jvxvubjcebsvyr-61sppr1o79505854qsns087324sq1qpq850o99p5-jvxvubj_cebsvyr_cntr_srgpu_snv";a:3:{i:0;R:38561;i:1;R:35355;i:2;R:37120;}s:91:"1208:jvxvubjcebsvyr-7q9n06301039911r1qps2092110972rro381n4r8-ugzy_cnefr_snvyher_qhevat_purp";a:3:{i:0;R:38561;i:1;R:35355;i:2;R:37120;}s:82:"1208:jvxvubjcebsvyr-14sn96pr5547485495678s9o782981904qp138s6-vainyvq_ningne_hey_f.";a:3:{i:0;R:38561;i:1;R:35355;i:2;R:37120;}s:91:"1208:jvxvubjcebsvyr-p5s53r263395s64p94n1s85r15o0035nqs87rrn8-hanoyr_gb_srgpu_ningne_sebz_f.";a:3:{i:0;R:38561;i:1;R:35355;i:2;R:37120;}s:83:"1208:kpnpur-8s4s0106so281310r009397169qs822opq90179n-hfr_gur_n_uers="uggc_kpnpur.yv";a:3:{i:0;s:27:"out-statusnet-plugin-xcache";i:1;R:35355;i:2;R:37120;}s:81:"1208:kzcc-176pq70p9011srns9s1r59n8rs0p902sqr26rp89-fraq_zr_n_zrffntr_gb_cbfg_n_ab";a:3:{i:0;s:25:"out-statusnet-plugin-xmpp";i:1;R:35355;i:2;R:37120;}s:68:"1208:kzcc-r351qn2pr0o63q14sq4pn19qr8pqq71r5rq44706-kzcc_wnoore_tgnyx";a:3:{i:0;R:38569;i:1;R:35355;i:2;R:37120;}s:75:"1208:kzcc-ps05835s0q24nono292qq1nqn7q14r0455101r5r-vainyvq_wvq_gbb_znal_@f.";a:3:{i:0;R:38569;i:1;R:35355;i:2;R:37120;}s:76:"1208:kzcc-o8ooq0r10q9osp634n3oq1027qp809p0sp1s0505-vainyvq_wvq_@_ohg_ab_abqr";a:3:{i:0;R:38569;i:1;R:35355;i:2;R:37120;}s:77:"1208:kzcc-oq8oo76n91n5ropppps2rq5r6oo2q839536r7558-vainyvq_wvq_abqr_gbb_ybat.";a:3:{i:0;R:38569;i:1;R:35355;i:2;R:37120;}s:73:"1208:kzcc-s3819n746697838o90558rq99s23844oqnnnn35n-vainyvq_wvq_abqr_"_f".";a:3:{i:0;R:38569;i:1;R:35355;i:2;R:37120;}s:79:"1208:kzcc-4n446onpq068q14o9086q5n6r43np93586s53pp3-vainyvq_wvq_qbznva_gbb_ybat.";a:3:{i:0;R:38569;i:1;R:35355;i:2;R:37120;}s:80:"1208:kzcc-4snnn2o29037s1n7s19q8258583ss60p8pnr9306-vainyvq_wvq_qbznva_anzr_"_f".";a:3:{i:0;R:38569;i:1;R:35355;i:2;R:37120;}s:77:"1208:kzcc-n861r25o5ro2112rs54q10pnpsn9r997672254s2-vainyvq_wvq_erfbhepr_"_f".";a:3:{i:0;R:38569;i:1;R:35355;i:2;R:37120;}s:52:"1208:kzcc-856pqnr959s1392q1411n9sn258p3np5492s08sn-f";a:3:{i:0;R:38569;i:1;R:35355;i:2;R:37120;}s:81:"1208:kzcc-16pr38502o93r455s38749rpon02079n1391o4op-lbh_zhfg_fcrpvsl_n_freire_va_g";a:3:{i:0;R:38569;i:1;R:35355;i:2;R:37120;}s:81:"1208:kzcc-96n39963sr92o18s2309o412sr802sn39r9803r2-lbh_zhfg_fcrpvsl_n_cbeg_va_gur";a:3:{i:0;R:38569;i:1;R:35355;i:2;R:37120;}s:81:"1208:kzcc-1r589s0op84p075561r31pp9p5sp8s2809nr554o-lbh_zhfg_fcrpvsl_n_hfre_va_gur";a:3:{i:0;R:38569;i:1;R:35355;i:2;R:37120;}s:81:"1208:kzcc-9o146pq0srnqr9p82o6ns076488o73o1s82r1q34-lbh_zhfg_fcrpvsl_n_cnffjbeq_va";a:3:{i:0;R:38569;i:1;R:35355;i:2;R:37120;}s:81:"1208:kzcc-24246sps2qsons01p87432q2np6ro1p86s470p16-gur_kzcc_cyhtva_nyybjf_hfref_g";a:3:{i:0;R:38569;i:1;R:35355;i:2;R:37120;}s:76:"1208:lnzzrevzcbeg-34p891o0456463896601s1042n3141sq83n115np-pbaarpg_gb_lnzzre";a:3:{i:0;s:33:"out-statusnet-plugin-yammerimport";i:1;R:35355;i:2;R:37120;}s:72:"1208:lnzzrevzcbeg-18rqp11q9nos20q2p37qqo36303615rrorp957o3-lnzzre_vzcbeg";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:89:"1208:lnzzrevzcbeg-9o612078s70q5npq6p8960sro31391340spsor57-guvf_lnzzre_vzcbeg_gbby_vf_fgv";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:83:"1208:lnzzrevzcbeg-5n0o8s0q54491p32ps936op962sns6n50n592371-cnhfrq_sebz_nqzva_cnary.";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:71:"1208:lnzzrevzcbeg-507s46rp0sn7sr8q86s3qo61220457o5n395ro5p-vainyvq_cbfg";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:72:"1208:lnzzrevzcbeg-088s82q144p40oq221spq42sn703sqn0541q1p85-lnzzre_vzcbeg";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:65:"1208:lnzzrevzcbeg-so78s24356q3p0669s37n5pq7s9119560s0np4qq-lnzzre";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:80:"1208:lnzzrevzcbeg-630n38r6615438son395q8380pq51519opp82243-lnzzre_vzcbeg_zbqhyr.";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:89:"1208:lnzzrevzcbeg-3p6604q7n835o7356s23so326s775on99oonsn27-jebat_vgrz_glcr_frag_gb_lnzzre";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:68:"1208:lnzzrevzcbeg-84127nn53780ps7919o960434726r8421s9qnos4-rkcregvfr";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:89:"1208:lnzzrevzcbeg-r02s7r8r4so1ps533r895opq652205ro1oq410pp-jebat_vgrz_glcr_frag_gb_lnzzre";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:89:"1208:lnzzrevzcbeg-7p48s8r21n6o91227767po625r20sn1qoor0899p-jebat_vgrz_glcr_frag_gb_lnzzre";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:80:"1208:lnzzrevzcbeg-14sn96pr5547485495678s9o782981904qp138s6-vainyvq_ningne_hey_f.";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:89:"1208:lnzzrevzcbeg-p5s53r263395s64p94n1s85r15o0035nqs87rrn8-hanoyr_gb_srgpu_ningne_sebz_f.";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:79:"1208:lnzzrevzcbeg-pprnr17o39s6q4n21498n2p8no674n9s20012oo4-fgneg_nhguragvpngvba";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:89:"1208:lnzzrevzcbeg-6ns991qr0sr6n9586o5r9p41n5n1onrp1592p9n4-erdhrfg_nhgubevmngvba_gb_pbaar";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:73:"1208:lnzzrevzcbeg-orqqn57809p06q26n003q7136625or8rqqon1797-punatr_ncv_xrl";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:89:"1208:lnzzrevzcbeg-2p4pqo0n16p563sp0528672srq4qppq94o50so24-pnaabg_erdhrfg_lnzzre_nhgu;_ny";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:89:"1208:lnzzrevzcbeg-6s9sno9323r9rqr3p51qp4q2265364s2sor4s4o6-pnaabg_trg_lnzzre_nhgu_hey_jur";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:88:"1208:lnzzrevzcbeg-60rn8244s5qs3nq102qonoo915qrq2n882065qrs-lnzzre_ncv_erghearq_uggc_pbqr";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:89:"1208:lnzzrevzcbeg-19p575r8o65q4oq00q8n1sqs760018s8p1p781o8-vainyvq_wfba_erfcbafr_sebz_lnz";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:89:"1208:lnzzrevzcbeg-r76n5n9p8nnq0489qp5008o1r61sq31p5p583622-erdhrfgvat_n_gbxra,_ohg_nyernq";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:69:"1208:lnzzrevzcbeg-n459qss3012qn591453989r5860n6sq825s63pr3-vavgvnyvmr";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:76:"1208:lnzzrevzcbeg-471pror939rs1op4o93qn5oqp36osq12oospns8n-ab_vzcbeg_ehaavat";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:89:"1208:lnzzrevzcbeg-9opp0867439n2r2355343q125243995826p22snn-vavgvngrq_lnzzre_freire_pbaarp";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:84:"1208:lnzzrevzcbeg-qrrn04o84pq70ps460r897287oo8sp87457795r3-njnvgvat_nhgubevmngvba...";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:69:"1208:lnzzrevzcbeg-26287pns41qrn4onq0770nn70pr1q16p5o17s6q5-pbaarpgrq.";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:79:"1208:lnzzrevzcbeg-oo371o36snq9rn0385r77s2268s36p92oq7r7sq9-vzcbeg_hfre_nppbhagf";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:88:"1208:lnzzrevzcbeg-91760o42n1opp6349r2852p9r657n72q910s0rq0-cyheny_trggrkg_vzcbegvat_q_hf";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:88:"1208:lnzzrevzcbeg-3r026onsq38orn173745q7rn079s9rp91r6q21so-cyheny_trggrkg_vzcbegrq_q_hfr";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:77:"1208:lnzzrevzcbeg-43s586sosq815q3p2s399p0s0450r32o3s31067q-vzcbeg_hfre_tebhcf";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:88:"1208:lnzzrevzcbeg-9ns4n50n482s2469qr17s8s575sqn10r93990p42-cyheny_trggrkg_vzcbegvat_q_te";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:88:"1208:lnzzrevzcbeg-q4r11p4pq4rp42n0475s006o7r844974ssqo2p65-cyheny_trggrkg_vzcbegrq_q_teb";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:89:"1208:lnzzrevzcbeg-94292os07nnn326160n3363n7pp614s0q999p81n-cercner_choyvp_abgvprf_sbe_vzc";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:88:"1208:lnzzrevzcbeg-89r9s5s543237208r991sqnos40o9286n7r3634s-cyheny_trggrkg_cercnevat_q_ab";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:88:"1208:lnzzrevzcbeg-r6sq265p0485q883no1r9n60r34qns0821266o05-cyheny_trggrkg_cercnerq_q_abg";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:80:"1208:lnzzrevzcbeg-1qs4r4197q61r44n736o58034prp73682068q118-vzcbeg_choyvp_abgvprf";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:88:"1208:lnzzrevzcbeg-7op3pq6r7nr4n24n2rs7snp782p526503r50717r-cyheny_trggrkg_vzcbegvat_q_ab";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:88:"1208:lnzzrevzcbeg-18465op7399pnp45no496r90676os61236n36n51-cyheny_trggrkg_vzcbegrq_q_abg";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:63:"1208:lnzzrevzcbeg-r9o450q14op2363q292p84s17psnq5psoq58n458-qbar";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:78:"1208:lnzzrevzcbeg-srprn563p3o751pq75r3oo76sr3920242n384936-vzcbeg_vf_pbzcyrgr!";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:72:"1208:lnzzrevzcbeg-qprp35736n15qo28605s701s6rr4nr700q8q19oq-vzcbeg_fgnghf";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:69:"1208:lnzzrevzcbeg-52212s0p524r310o9205r4qn7793snq36s4363p5-jnvgvat...";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:77:"1208:lnzzrevzcbeg-s189212o7n1q700sp06o2qrrro82nq8o01o40oo5-erfrg_vzcbeg_fgngr";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:71:"1208:lnzzrevzcbeg-op18s671s2psq492or90s51ssp14243n6o27no43-cnhfr_vzcbeg";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:82:"1208:lnzzrevzcbeg-85p6n236457q41nnq0qq2q5q0o1r911807op6141-rapbhagrerq_reebe_"_f".";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:65:"1208:lnzzrevzcbeg-p7qso6s1q9p58n41n7p5rrp76r7rq6qoq3750804-cnhfrq";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:67:"1208:lnzzrevzcbeg-2r02623966s9391snps6rnrsp8o079rq5o630orr-pbagvahr";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:71:"1208:lnzzrevzcbeg-ro636431089rqr3sqs966n3ss5s42421613s0137-nobeg_vzcbeg";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:89:"1208:lnzzrevzcbeg-rr9r29342qr888sqn110qo60opr24so40p1n35r4-sbyybj_guvf_yvax_gb_pbasvez_nh";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:89:"1208:lnzzrevzcbeg-612n0692302r2ns185sp1p96o3ro42n88ss4r447-bcra_lnzzre_nhguragvpngvba_jva";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:89:"1208:lnzzrevzcbeg-q8p361753n15545nrp89p9no1s1pq59q822q9opn-pbcl_gur_irevsvpngvba_pbqr_lbh";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:76:"1208:lnzzrevzcbeg-36o82o2nqr6pror7250s654nps2095no2914n147-irevsvpngvba_pbqr";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:67:"1208:lnzzrevzcbeg-47q80or3ro9761p60rnq0914r890449394r75pss-pbagvahr";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:89:"1208:lnzzrevzcbeg-srq544n31q422ns6s3080nsqp0op4625s7o13n06-fnir_gur_irevsvpngvba_pbqr_naq";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:82:"1208:lnzzrevzcbeg-so32q97n42994nn5nqn8r6q32q96348n66r48sr1-lnzzre_ncv_ertvfgengvba";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:88:"1208:lnzzrevzcbeg-1n1p6rqsnrp195p86624125r46854s1257n9450r-orsber_jr_pna_pbaarpg_gb_lbhe";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:89:"1208:lnzzrevzcbeg-3oo7pr717s3r0ss3381o9406350s6p8rs6919s79-bcra_lnzzre_nccyvpngvba_ertvfg";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:89:"1208:lnzzrevzcbeg-0n4r45qrr974s1s47r0r91nr281or05n7ro6603s-pbcl_gur_pbafhzre_xrl_naq_frpe";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:71:"1208:lnzzrevzcbeg-5sq6s5638s6o3np7s714s501rqqn35rr1125704q-pbafhzre_xrl";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:74:"1208:lnzzrevzcbeg-171p2qnrq08055641rpn47p7089s858pn15on68o-pbafhzre_frperg";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:63:"1208:lnzzrevzcbeg-r85726o34723718q86rro40no996r21219883557-fnir";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:88:"1208:lnzzrevzcbeg-2qn0nr56160442no36s075675613r120rqp62n39-fnir_gur_ragrerq_pbafhzre_xrl";a:3:{i:0;R:38585;i:1;R:35355;i:2;R:37120;}s:36:"1198:cebwrpg_yvfg/cntr_qvfcynl_gvgyr";a:2:{i:0;s:17:"page-Project list";i:1;s:10:"page-0-all";}s:19:"1198:cebwrpg_yvfg/3";a:2:{i:0;R:38649;i:1;R:38650;}s:19:"1198:cebwrpg_yvfg/1";a:2:{i:0;R:38649;i:1;R:38650;}s:19:"1198:cebwrpg_yvfg/2";a:2:{i:0;R:38649;i:1;R:38650;}s:37:"1198:cebwrpg:nobhg/cntr_qvfcynl_gvgyr";a:2:{i:0;s:18:"page-Project:About";i:1;R:38650;}s:20:"1198:cebwrpg:nobhg/1";a:2:{i:0;R:38655;i:1;R:38650;}s:20:"1198:cebwrpg:nobhg/2";a:2:{i:0;R:38655;i:1;R:38650;}s:20:"1198:cebwrpg:nobhg/3";a:2:{i:0;R:38655;i:1;R:38650;}s:20:"1198:cebwrpg:nobhg/4";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/55";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/56";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/57";a:2:{i:0;R:38655;i:1;R:38650;}s:20:"1198:cebwrpg:nobhg/5";a:2:{i:0;R:38655;i:1;R:38650;}s:20:"1198:cebwrpg:nobhg/6";a:2:{i:0;R:38655;i:1;R:38650;}s:20:"1198:cebwrpg:nobhg/7";a:2:{i:0;R:38655;i:1;R:38650;}s:20:"1198:cebwrpg:nobhg/8";a:2:{i:0;R:38655;i:1;R:38650;}s:20:"1198:cebwrpg:nobhg/9";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/10";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/11";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/12";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/13";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/14";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/15";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/16";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/17";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/18";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/19";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/20";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/21";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/22";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/23";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/24";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/25";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/26";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/27";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/28";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/29";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/30";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/31";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/32";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/33";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/34";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/35";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/36";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/37";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/38";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/39";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/40";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/41";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/42";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/43";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/44";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/45";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/46";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/47";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/48";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/49";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/50";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/51";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/52";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/53";a:2:{i:0;R:38655;i:1;R:38650;}s:21:"1198:cebwrpg:nobhg/54";a:2:{i:0;R:38655;i:1;R:38650;}s:46:"1198:cebwrpg:cevinpl_cbyvpl/cntr_qvfcynl_gvgyr";a:2:{i:0;s:27:"page-Project:Privacy policy";i:1;R:38650;}s:29:"1198:cebwrpg:cevinpl_cbyvpl/1";a:2:{i:0;R:38714;i:1;R:38650;}s:29:"1198:cebwrpg:cevinpl_cbyvpl/2";a:2:{i:0;R:38714;i:1;R:38650;}s:29:"1198:cebwrpg:cevinpl_cbyvpl/3";a:2:{i:0;R:38714;i:1;R:38650;}s:29:"1198:cebwrpg:cevinpl_cbyvpl/4";a:2:{i:0;R:38714;i:1;R:38650;}s:29:"1198:cebwrpg:cevinpl_cbyvpl/5";a:2:{i:0;R:38714;i:1;R:38650;}s:29:"1198:cebwrpg:cevinpl_cbyvpl/6";a:2:{i:0;R:38714;i:1;R:38650;}s:29:"1198:cebwrpg:cevinpl_cbyvpl/7";a:2:{i:0;R:38714;i:1;R:38650;}s:29:"1198:cebwrpg:cevinpl_cbyvpl/8";a:2:{i:0;R:38714;i:1;R:38650;}s:29:"1198:cebwrpg:cevinpl_cbyvpl/9";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/10";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/11";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/12";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/13";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/14";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/15";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/16";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/17";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/18";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/19";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/20";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/21";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/22";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/23";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/24";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/25";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/26";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/27";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/28";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/29";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/30";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/31";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/32";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/33";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/34";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/35";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/36";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/37";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/38";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/39";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/40";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/41";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/42";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/43";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/44";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/45";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/46";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/47";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/48";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/49";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/50";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/51";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/52";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/53";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/54";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/55";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/56";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/57";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/58";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/59";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/60";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/61";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/62";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/63";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/64";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/65";a:2:{i:0;R:38714;i:1;R:38650;}s:30:"1198:cebwrpg:cevinpl_cbyvpl/66";a:2:{i:0;R:38714;i:1;R:38650;}s:34:"1198:grpuabybtl/cntr_qvfcynl_gvgyr";a:2:{i:0;s:15:"page-Technology";i:1;R:38650;}s:17:"1198:grpuabybtl/1";a:2:{i:0;R:38782;i:1;R:38650;}s:17:"1198:grpuabybtl/2";a:2:{i:0;R:38782;i:1;R:38650;}s:17:"1198:grpuabybtl/3";a:2:{i:0;R:38782;i:1;R:38650;}s:17:"1198:grpuabybtl/4";a:2:{i:0;R:38782;i:1;R:38650;}s:17:"1198:grpuabybtl/5";a:2:{i:0;R:38782;i:1;R:38650;}s:17:"1198:grpuabybtl/6";a:2:{i:0;R:38782;i:1;R:38650;}s:17:"1198:grpuabybtl/7";a:2:{i:0;R:38782;i:1;R:38650;}s:17:"1198:grpuabybtl/8";a:2:{i:0;R:38782;i:1;R:38650;}s:17:"1198:grpuabybtl/9";a:2:{i:0;R:38782;i:1;R:38650;}s:24:"1198:grpuabybtl/ncregvhz";a:2:{i:0;R:38782;i:1;R:38650;}s:31:"1198:grpuabybtl/tbbtyrgenafyngr";a:2:{i:0;R:38782;i:1;R:38650;}s:48:"1198:genafyngvat:ubj_gb_fgneg/cntr_qvfcynl_gvgyr";a:2:{i:0;s:29:"page-Translating:How to start";i:1;R:38650;}s:38:"1198:genafyngvat:ubj_gb_fgneg/cntranzr";a:2:{i:0;R:38795;i:1;R:38650;}s:40:"1198:genafyngvat:ubj_gb_fgneg/ubjgbfgneg";a:2:{i:0;R:38795;i:1;R:38650;}s:37:"1198:genafyngvat:ubj_gb_fgneg/bssyvar";a:2:{i:0;R:38795;i:1;R:38650;}s:41:"1198:genafyngvat:ubj_gb_fgneg/erpbzzraqrq";a:2:{i:0;R:38795;i:1;R:38650;}s:48:"1198:genafyngvat:ubj_gb_fgneg/erpbzzraqrqqrgnvyf";a:2:{i:0;R:38795;i:1;R:38650;}s:34:"1198:genafyngvat:ubj_gb_fgneg/zber";a:2:{i:0;R:38795;i:1;R:38650;}s:38:"1198:genafyngvat:ubj_gb_fgneg/ynfggvcf";a:2:{i:0;R:38795;i:1;R:38650;}s:41:"1198:genafyngvat:vageb/cntr_qvfcynl_gvgyr";a:2:{i:0;s:22:"page-Translating:Intro";i:1;R:38650;}s:31:"1198:genafyngvat:vageb/arkgcntr";a:2:{i:0;R:38804;i:1;R:38650;}s:30:"1198:genafyngvat:vageb/urnqvat";a:2:{i:0;R:38804;i:1;R:38650;}s:28:"1198:genafyngvat:vageb/vageb";a:2:{i:0;R:38804;i:1;R:38650;}s:27:"1198:genafyngvat:vageb/nvzf";a:2:{i:0;R:38804;i:1;R:38650;}s:27:"1198:genafyngvat:vageb/nvz1";a:2:{i:0;R:38804;i:1;R:38650;}s:27:"1198:genafyngvat:vageb/nvz2";a:2:{i:0;R:38804;i:1;R:38650;}s:36:"1198:genafyngvat:vageb/whfggenafyngr";a:2:{i:0;R:38804;i:1;R:38650;}s:31:"1198:genafyngvat:vageb/xabjasbe";a:2:{i:0;R:38804;i:1;R:38650;}s:47:"1198:genafyngvat:arj_cebwrpg/cntr_qvfcynl_gvgyr";a:2:{i:0;s:28:"page-Translating:New project";i:1;R:38650;}s:30:"1198:genafyngvat:arj_cebwrpg/1";a:2:{i:0;R:38814;i:1;R:38650;}s:30:"1198:genafyngvat:arj_cebwrpg/2";a:2:{i:0;R:38814;i:1;R:38650;}s:30:"1198:genafyngvat:arj_cebwrpg/3";a:2:{i:0;R:38814;i:1;R:38650;}s:30:"1198:genafyngvat:arj_cebwrpg/4";a:2:{i:0;R:38814;i:1;R:38650;}s:30:"1198:genafyngvat:arj_cebwrpg/5";a:2:{i:0;R:38814;i:1;R:38650;}s:30:"1198:genafyngvat:arj_cebwrpg/6";a:2:{i:0;R:38814;i:1;R:38650;}s:30:"1198:genafyngvat:arj_cebwrpg/7";a:2:{i:0;R:38814;i:1;R:38650;}s:30:"1198:genafyngvat:arj_cebwrpg/8";a:2:{i:0;R:38814;i:1;R:38650;}s:30:"1198:genafyngvat:arj_cebwrpg/9";a:2:{i:0;R:38814;i:1;R:38650;}s:31:"1198:genafyngvat:arj_cebwrpg/10";a:2:{i:0;R:38814;i:1;R:38650;}s:31:"1198:genafyngvat:arj_cebwrpg/11";a:2:{i:0;R:38814;i:1;R:38650;}s:31:"1198:genafyngvat:arj_cebwrpg/12";a:2:{i:0;R:38814;i:1;R:38650;}s:31:"1198:genafyngvat:arj_cebwrpg/13";a:2:{i:0;R:38814;i:1;R:38650;}s:31:"1198:genafyngvat:arj_cebwrpg/14";a:2:{i:0;R:38814;i:1;R:38650;}s:31:"1198:genafyngvat:arj_cebwrpg/15";a:2:{i:0;R:38814;i:1;R:38650;}s:31:"1198:genafyngvat:arj_cebwrpg/16";a:2:{i:0;R:38814;i:1;R:38650;}s:31:"1198:genafyngvat:arj_cebwrpg/17";a:2:{i:0;R:38814;i:1;R:38650;}s:31:"1198:genafyngvat:arj_cebwrpg/18";a:2:{i:0;R:38814;i:1;R:38650;}s:31:"1198:genafyngvat:arj_cebwrpg/19";a:2:{i:0;R:38814;i:1;R:38650;}s:31:"1198:genafyngvat:arj_cebwrpg/20";a:2:{i:0;R:38814;i:1;R:38650;}s:31:"1198:genafyngvat:arj_cebwrpg/21";a:2:{i:0;R:38814;i:1;R:38650;}s:31:"1198:genafyngvat:arj_cebwrpg/22";a:2:{i:0;R:38814;i:1;R:38650;}s:31:"1198:genafyngvat:arj_cebwrpg/23";a:2:{i:0;R:38814;i:1;R:38650;}s:46:"1198:genafyngvat:fgngvfgvpf/cntr_qvfcynl_gvgyr";a:2:{i:0;s:27:"page-Translating:Statistics";i:1;R:38650;}s:29:"1198:genafyngvat:fgngvfgvpf/1";a:2:{i:0;R:38839;i:1;R:38650;}s:29:"1198:genafyngvat:fgngvfgvpf/2";a:2:{i:0;R:38839;i:1;R:38650;}s:29:"1198:genafyngvat:fgngvfgvpf/3";a:2:{i:0;R:38839;i:1;R:38650;}s:29:"1198:genafyngvat:fgngvfgvpf/4";a:2:{i:0;R:38839;i:1;R:38650;}s:29:"1198:genafyngvat:fgngvfgvpf/5";a:2:{i:0;R:38839;i:1;R:38650;}s:29:"1198:genafyngvat:fgngvfgvpf/6";a:2:{i:0;R:38839;i:1;R:38650;}s:29:"1198:genafyngvat:fgngvfgvpf/7";a:2:{i:0;R:38839;i:1;R:38650;}s:29:"1198:genafyngvat:fgngvfgvpf/8";a:2:{i:0;R:38839;i:1;R:38650;}s:29:"1198:genafyngvat:fgngvfgvpf/9";a:2:{i:0;R:38839;i:1;R:38650;}s:30:"1198:genafyngvat:fgngvfgvpf/10";a:2:{i:0;R:38839;i:1;R:38650;}s:30:"1198:genafyngvat:fgngvfgvpf/11";a:2:{i:0;R:38839;i:1;R:38650;}s:30:"1198:genafyngvat:fgngvfgvpf/12";a:2:{i:0;R:38839;i:1;R:38650;}s:30:"1198:genafyngvat:fgngvfgvpf/13";a:2:{i:0;R:38839;i:1;R:38650;}s:30:"1198:genafyngvat:fgngvfgvpf/14";a:2:{i:0;R:38839;i:1;R:38650;}s:30:"1198:genafyngvat:fgngvfgvpf/15";a:2:{i:0;R:38839;i:1;R:38650;}s:30:"1198:genafyngvat:fgngvfgvpf/16";a:2:{i:0;R:38839;i:1;R:38650;}s:20:"1198:hfre:shmmlobg/1";a:2:{i:0;s:18:"page-User:FuzzyBot";i:1;R:38650;}s:37:"1198:jro_vagresnpr/cntr_qvfcynl_gvgyr";a:2:{i:0;s:18:"page-Web interface";i:1;R:38650;}s:20:"1198:jro_vagresnpr/1";a:2:{i:0;R:38859;i:1;R:38650;}s:20:"1198:jro_vagresnpr/2";a:2:{i:0;R:38859;i:1;R:38650;}s:20:"1198:jro_vagresnpr/3";a:2:{i:0;R:38859;i:1;R:38650;}s:20:"1198:jro_vagresnpr/4";a:2:{i:0;R:38859;i:1;R:38650;}s:20:"1198:jro_vagresnpr/5";a:2:{i:0;R:38859;i:1;R:38650;}s:20:"1198:jro_vagresnpr/6";a:2:{i:0;R:38859;i:1;R:38650;}s:20:"1198:jro_vagresnpr/7";a:2:{i:0;R:38859;i:1;R:38650;}s:20:"1198:jro_vagresnpr/8";a:2:{i:0;R:38859;i:1;R:38650;}s:20:"1198:jro_vagresnpr/9";a:2:{i:0;R:38859;i:1;R:38650;}s:21:"1198:jro_vagresnpr/10";a:2:{i:0;R:38859;i:1;R:38650;}s:21:"1198:jro_vagresnpr/11";a:2:{i:0;R:38859;i:1;R:38650;}s:21:"1198:jro_vagresnpr/12";a:2:{i:0;R:38859;i:1;R:38650;}s:21:"1198:jro_vagresnpr/13";a:2:{i:0;R:38859;i:1;R:38650;}s:21:"1198:jro_vagresnpr/14";a:2:{i:0;R:38859;i:1;R:38650;}s:21:"1198:jro_vagresnpr/15";a:2:{i:0;R:38859;i:1;R:38650;}s:21:"1198:jro_vagresnpr/16";a:2:{i:0;R:38859;i:1;R:38650;}s:21:"1198:jro_vagresnpr/17";a:2:{i:0;R:38859;i:1;R:38650;}s:21:"1198:jro_vagresnpr/18";a:2:{i:0;R:38859;i:1;R:38650;}s:21:"1198:jro_vagresnpr/19";a:2:{i:0;R:38859;i:1;R:38650;}s:21:"1198:jro_vagresnpr/20";a:2:{i:0;R:38859;i:1;R:38650;}s:21:"1198:jro_vagresnpr/21";a:2:{i:0;R:38859;i:1;R:38650;}s:21:"1198:jro_vagresnpr/22";a:2:{i:0;R:38859;i:1;R:38650;}s:21:"1198:jro_vagresnpr/23";a:2:{i:0;R:38859;i:1;R:38650;}s:21:"1198:jro_vagresnpr/24";a:2:{i:0;R:38859;i:1;R:38650;}s:21:"1198:jro_vagresnpr/25";a:2:{i:0;R:38859;i:1;R:38650;}s:21:"1198:jro_vagresnpr/26";a:2:{i:0;R:38859;i:1;R:38650;}s:21:"1198:jro_vagresnpr/27";a:2:{i:0;R:38859;i:1;R:38650;}s:21:"1198:jro_vagresnpr/28";a:2:{i:0;R:38859;i:1;R:38650;}s:21:"1198:jro_vagresnpr/29";a:2:{i:0;R:38859;i:1;R:38650;}s:21:"1198:jro_vagresnpr/30";a:2:{i:0;R:38859;i:1;R:38650;}s:21:"1198:jro_vagresnpr/31";a:2:{i:0;R:38859;i:1;R:38650;}s:32:"1226:npgvivgvrf-npgvivgl.perngrq";a:2:{i:0;s:18:"shapado-activities";i:1;s:13:"shapado-0-all";}s:32:"1226:npgvivgvrf-npgvivgl.hcqngrq";a:2:{i:0;R:38892;i:1;R:38893;}s:32:"1226:npgvivgvrf-npgvivgl.qryrgrq";a:2:{i:0;R:38892;i:1;R:38893;}s:34:"1226:npgvivgvrf-npgvivgl.qrfgeblrq";a:2:{i:0;R:38892;i:1;R:38893;}s:32:"1226:npgvivgvrf-npgvivgl.punatrq";a:2:{i:0;R:38892;i:1;R:38893;}s:30:"1226:npgvivgvrf-npgvivgl.nfxrq";a:2:{i:0;R:38892;i:1;R:38893;}s:43:"1226:npgvivgvrf-npgvivgl.erdhrfgrq_gb_pybfr";a:2:{i:0;R:38892;i:1;R:38893;}s:42:"1226:npgvivgvrf-npgvivgl.erdhrfgrq_gb_bcra";a:2:{i:0;R:38892;i:1;R:38893;}s:32:"1226:npgvivgvrf-npgvivgl.synttrq";a:2:{i:0;R:38892;i:1;R:38893;}s:46:"1226:npgvivgvrf-npgvirerpbeq.zbqryf.npgvivgvrf";a:2:{i:0;R:38892;i:1;R:38893;}s:44:"1226:npgvivgvrf-npgvirerpbeq.zbqryf.npgvivgl";a:2:{i:0;R:38892;i:1;R:38893;}s:44:"1226:naabhaprzragf-naabhaprzragf.vaqrk.gvgyr";a:2:{i:0;s:21:"shapado-announcements";i:1;R:38893;}s:50:"1226:naabhaprzragf-naabhaprzragf.vaqrk.qrfpevcgvba";a:2:{i:0;R:38905;i:1;R:38893;}s:47:"1226:naabhaprzragf-naabhaprzragf.perngr.fhpprff";a:2:{i:0;R:38905;i:1;R:38893;}s:37:"1226:naabhaprzragf-naabhaprzragf.sbez";a:2:{i:0;R:38905;i:1;R:38893;}s:46:"1226:naabhaprzragf-naabhaprzragf.npgvbaf.gvgyr";a:2:{i:0;R:38905;i:1;R:38893;}s:47:"1226:naabhaprzragf-naabhaprzragf.npgvbaf.qryrgr";a:2:{i:0;R:38905;i:1;R:38893;}s:63:"1226:naabhaprzragf-npgvirerpbeq.nggevohgrf.naabhaprzrag.zrffntr";a:2:{i:0;R:38905;i:1;R:38893;}s:65:"1226:naabhaprzragf-npgvirerpbeq.nggevohgrf.naabhaprzrag.fgnegf_ng";a:2:{i:0;R:38905;i:1;R:38893;}s:63:"1226:naabhaprzragf-npgvirerpbeq.nggevohgrf.naabhaprzrag.raqf_ng";a:2:{i:0;R:38905;i:1;R:38893;}s:70:"1226:naabhaprzragf-npgvirerpbeq.nggevohgrf.naabhaprzrag.bayl_nabalzbhf";a:2:{i:0;R:38905;i:1;R:38893;}s:39:"1226:nafjref-nafjref.sbez.pbzzrag_ynory";a:2:{i:0;s:15:"shapado-answers";i:1;R:38893;}s:38:"1226:nafjref-nafjref.sbez.nafjre_ynory";a:2:{i:0;R:38916;i:1;R:38893;}s:40:"1226:nafjref-nafjref.sbez.pbzzrag_fhozvg";a:2:{i:0;R:38916;i:1;R:38893;}s:32:"1226:nafjref-nafjref.sbez.fhozvg";a:2:{i:0;R:38916;i:1;R:38893;}s:31:"1226:nafjref-nafjref.rqvg.gvgyr";a:2:{i:0;R:38916;i:1;R:38893;}s:40:"1226:nafjref-nafjref.perngr.naaba_abgvpr";a:2:{i:0;R:38916;i:1;R:38893;}s:40:"1226:nafjref-nafjref.perngr.synfu_abgvpr";a:2:{i:0;R:38916;i:1;R:38893;}s:39:"1226:nafjref-nafjref.perngr.synfu_reebe";a:2:{i:0;R:38916;i:1;R:38893;}s:40:"1226:nafjref-nafjref.hcqngr.synfu_abgvpr";a:2:{i:0;R:38916;i:1;R:38893;}s:33:"1226:nafjref-nafjref.erireg.gvgyr";a:2:{i:0;R:38916;i:1;R:38893;}s:40:"1226:nafjref-npgvirerpbeq.zbqryf.nafjref";a:2:{i:0;R:38916;i:1;R:38893;}s:39:"1226:nafjref-npgvirerpbeq.zbqryf.nafjre";a:2:{i:0;R:38916;i:1;R:38893;}s:48:"1226:nafjref-npgvirerpbeq.nggevohgrf.nafjre.yvax";a:2:{i:0;R:38916;i:1;R:38893;}s:54:"1226:nafjref-npgvirerpbeq.nggevohgrf.nafjre.perngrq_ng";a:2:{i:0;R:38916;i:1;R:38893;}s:48:"1226:nafjref-npgvirerpbeq.nggevohgrf.nafjre.obql";a:2:{i:0;R:38916;i:1;R:38893;}s:30:"1226:onqtrf-onqtrf.vaqrk.gvgyr";a:2:{i:0;s:14:"shapado-badges";i:1;R:38893;}s:36:"1226:onqtrf-onqtrf.vaqrk.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:32:"1226:onqtrf-onqtrf.vaqrk.trareny";a:2:{i:0;R:38932;i:1;R:38893;}s:29:"1226:onqtrf-onqtrf.vaqrk.gntf";a:2:{i:0;R:38932;i:1;R:38893;}s:29:"1226:onqtrf-onqtrf.vaqrk.tbyq";a:2:{i:0;R:38932;i:1;R:38893;}s:31:"1226:onqtrf-onqtrf.vaqrk.fvyire";a:2:{i:0;R:38932;i:1;R:38893;}s:31:"1226:onqtrf-onqtrf.vaqrk.oebamr";a:2:{i:0;R:38932;i:1;R:38893;}s:40:"1226:onqtrf-onqtrf.vaqrk.trareny_gbbygvc";a:2:{i:0;R:38932;i:1;R:38893;}s:36:"1226:onqtrf-onqtrf.vaqrk.nyy_gbbygvc";a:2:{i:0;R:38932;i:1;R:38893;}s:37:"1226:onqtrf-onqtrf.vaqrk.gntf_gbbygvc";a:2:{i:0;R:38932;i:1;R:38893;}s:37:"1226:onqtrf-onqtrf.vaqrk.tbyq_gbbygvc";a:2:{i:0;R:38932;i:1;R:38893;}s:39:"1226:onqtrf-onqtrf.vaqrk.fvyire_gbbygvc";a:2:{i:0;R:38932;i:1;R:38893;}s:39:"1226:onqtrf-onqtrf.vaqrk.oebamr_gbbygvc";a:2:{i:0;R:38932;i:1;R:38893;}s:29:"1226:onqtrf-onqtrf.fubj.gvgyr";a:2:{i:0;R:38932;i:1;R:38893;}s:35:"1226:onqtrf-onqtrf.fubj.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:38:"1226:onqtrf-onqtrf.fubj.sbe_gnt_oebamr";a:2:{i:0;R:38932;i:1;R:38893;}s:38:"1226:onqtrf-onqtrf.fubj.sbe_gnt_fvyire";a:2:{i:0;R:38932;i:1;R:38893;}s:36:"1226:onqtrf-onqtrf.fubj.sbe_gnt_tbyq";a:2:{i:0;R:38932;i:1;R:38893;}s:30:"1226:onqtrf-onqtrf.fubj.rnearq";a:2:{i:0;R:38932;i:1;R:38893;}s:39:"1226:onqtrf-onqtrf.funerq.ebpxfgne.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:46:"1226:onqtrf-onqtrf.funerq.ebpxfgne.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:38:"1226:onqtrf-onqtrf.funerq.cbcfgne.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:45:"1226:onqtrf-onqtrf.funerq.cbcfgne.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:38:"1226:onqtrf-onqtrf.funerq.snangvp.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:45:"1226:onqtrf-onqtrf.funerq.snangvp.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:44:"1226:onqtrf-onqtrf.funerq.freivpr_zrqny.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:51:"1226:onqtrf-onqtrf.funerq.freivpr_zrqny.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:46:"1226:onqtrf-onqtrf.funerq.snzbhf_dhrfgvba.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:53:"1226:onqtrf-onqtrf.funerq.snzbhf_dhrfgvba.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:47:"1226:onqtrf-onqtrf.funerq.abgnoyr_dhrfgvba.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:54:"1226:onqtrf-onqtrf.funerq.abgnoyr_dhrfgvba.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:47:"1226:onqtrf-onqtrf.funerq.cbchyne_dhrfgvba.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:54:"1226:onqtrf-onqtrf.funerq.cbchyne_dhrfgvba.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:45:"1226:onqtrf-onqtrf.funerq.cbchyne_crefba.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:52:"1226:onqtrf-onqtrf.funerq.cbchyne_crefba.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:35:"1226:onqtrf-onqtrf.funerq.theh.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:42:"1226:onqtrf-onqtrf.funerq.theh.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:46:"1226:onqtrf-onqtrf.funerq.snibevgr_nafjre.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:53:"1226:onqtrf-onqtrf.funerq.snibevgr_nafjre.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:45:"1226:onqtrf-onqtrf.funerq.fgryyne_nafjre.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:52:"1226:onqtrf-onqtrf.funerq.fgryyne_nafjre.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:48:"1226:onqtrf-onqtrf.funerq.snibevgr_dhrfgvba.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:55:"1226:onqtrf-onqtrf.funerq.snibevgr_dhrfgvba.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:36:"1226:onqtrf-onqtrf.funerq.ghgbe.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:43:"1226:onqtrf-onqtrf.funerq.ghgbe.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:37:"1226:onqtrf-onqtrf.funerq.nqqvpg.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:44:"1226:onqtrf-onqtrf.funerq.nqqvpg.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:44:"1226:onqtrf-onqtrf.funerq.tbbq_dhrfgvba.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:51:"1226:onqtrf-onqtrf.funerq.tbbq_dhrfgvba.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:42:"1226:onqtrf-onqtrf.funerq.tbbq_nafjre.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:49:"1226:onqtrf-onqtrf.funerq.tbbq_nafjre.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:38:"1226:onqtrf-onqtrf.funerq.cvbarre.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:45:"1226:onqtrf-onqtrf.funerq.cvbarre.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:40:"1226:onqtrf-onqtrf.funerq.fhccbegre.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:47:"1226:onqtrf-onqtrf.funerq.fhccbegre.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:37:"1226:onqtrf-onqtrf.funerq.pevgvp.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:44:"1226:onqtrf-onqtrf.funerq.pevgvp.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:39:"1226:onqtrf-onqtrf.funerq.vadhvere.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:46:"1226:onqtrf-onqtrf.funerq.vadhvere.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:45:"1226:onqtrf-onqtrf.funerq.gebhoyrfubbgre.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:52:"1226:onqtrf-onqtrf.funerq.gebhoyrfubbgre.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:42:"1226:onqtrf-onqtrf.funerq.pbzzragngbe.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:49:"1226:onqtrf-onqtrf.funerq.pbzzragngbe.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:42:"1226:onqtrf-onqtrf.funerq.zrevg_zrqny.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:49:"1226:onqtrf-onqtrf.funerq.zrevg_zrqny.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:43:"1226:onqtrf-onqtrf.funerq.rssbeg_zrqny.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:50:"1226:onqtrf-onqtrf.funerq.rssbeg_zrqny.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:38:"1226:onqtrf-onqtrf.funerq.fghqrag.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:45:"1226:onqtrf-onqtrf.funerq.fghqrag.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:45:"1226:onqtrf-onqtrf.funerq.funcnqb.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:37:"1226:onqtrf-onqtrf.funerq.rqvgbe.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:44:"1226:onqtrf-onqtrf.funerq.rqvgbe.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:39:"1226:onqtrf-onqtrf.funerq.sevraqyl.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:46:"1226:onqtrf-onqtrf.funerq.sevraqyl.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:49:"1226:onqtrf-onqtrf.funerq.vagrerfgvat_crefba.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:56:"1226:onqtrf-onqtrf.funerq.vagrerfgvat_crefba.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:40:"1226:onqtrf-onqtrf.funerq.pryroevgl.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:47:"1226:onqtrf-onqtrf.funerq.pryroevgl.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:42:"1226:onqtrf-onqtrf.funerq.arpebznapre.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:49:"1226:onqtrf-onqtrf.funerq.arpebznapre.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:47:"1226:onqtrf-onqtrf.funerq.fgryyne_dhrfgvba.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:54:"1226:onqtrf-onqtrf.funerq.fgryyne_dhrfgvba.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:44:"1226:onqtrf-onqtrf.funerq.avpr_dhrfgvba.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:51:"1226:onqtrf-onqtrf.funerq.avpr_dhrfgvba.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:42:"1226:onqtrf-onqtrf.funerq.avpr_nafjre.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:49:"1226:onqtrf-onqtrf.funerq.avpr_nafjre.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:45:"1226:onqtrf-onqtrf.funerq.terng_dhrfgvba.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:52:"1226:onqtrf-onqtrf.funerq.terng_dhrfgvba.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:43:"1226:onqtrf-onqtrf.funerq.terng_nafjre.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:50:"1226:onqtrf-onqtrf.funerq.terng_nafjre.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:44:"1226:onqtrf-onqtrf.funerq.crre_cerffher.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:51:"1226:onqtrf-onqtrf.funerq.crre_cerffher.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:42:"1226:onqtrf-onqtrf.funerq.rayvtugrarq.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:49:"1226:onqtrf-onqtrf.funerq.rayvtugrarq.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:42:"1226:onqtrf-onqtrf.funerq.qvfpvcyvarq.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:49:"1226:onqtrf-onqtrf.funerq.qvfpvcyvarq.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:38:"1226:onqtrf-onqtrf.funerq.pyrnahc.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:45:"1226:onqtrf-onqtrf.funerq.pyrnahc.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:41:"1226:onqtrf-onqtrf.funerq.pvivp_qhgl.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:48:"1226:onqtrf-onqtrf.funerq.pvivp_qhgl.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:45:"1226:onqtrf-onqtrf.funerq.pvgvmra_cngeby.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:52:"1226:onqtrf-onqtrf.funerq.pvgvmra_cngeby.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:43:"1226:onqtrf-onqtrf.funerq.frys-yrneare.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:50:"1226:onqtrf-onqtrf.funerq.frys-yrneare.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:38:"1226:onqtrf-onqtrf.funerq.fpubyne.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:45:"1226:onqtrf-onqtrf.funerq.fpubyne.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:45:"1226:onqtrf-onqtrf.funerq.nhgbovbtencure.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:52:"1226:onqtrf-onqtrf.funerq.nhgbovbtencure.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:40:"1226:onqtrf-onqtrf.funerq.betnavmre.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:47:"1226:onqtrf-onqtrf.funerq.betnavmre.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:39:"1226:onqtrf-onqtrf.funerq.nygehvfg.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:46:"1226:onqtrf-onqtrf.funerq.nygehvfg.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:41:"1226:onqtrf-onqtrf.funerq.orarsnpgbe.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:48:"1226:onqtrf-onqtrf.funerq.orarsnpgbe.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:39:"1226:onqtrf-onqtrf.funerq.vairfgbe.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:46:"1226:onqtrf-onqtrf.funerq.vairfgbe.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:39:"1226:onqtrf-onqtrf.funerq.cebzbgre.anzr";a:2:{i:0;R:38932;i:1;R:38893;}s:46:"1226:onqtrf-onqtrf.funerq.cebzbgre.qrfpevcgvba";a:2:{i:0;R:38932;i:1;R:38893;}s:37:"1226:onqtrf-npgvirerpbeq.zbqryf.onqtr";a:2:{i:0;R:38932;i:1;R:38893;}s:38:"1226:onqtrf-npgvirerpbeq.zbqryf.onqtrf";a:2:{i:0;R:38932;i:1;R:38893;}s:40:"1226:pybfrerd-pybfr_erdhrfgf.vaqrk.gvgyr";a:2:{i:0;s:21:"shapado-closerequests";i:1;R:38893;}s:41:"1226:pybfrerd-pybfr_erdhrfgf.sbez.ergenpg";a:2:{i:0;R:39053;i:1;R:38893;}s:38:"1226:pybfrerd-pybfr_erdhrfgf.sbez.qhcr";a:2:{i:0;R:39053;i:1;R:38893;}s:36:"1226:pybfrerd-pybfr_erdhrfgf.sbez.bg";a:2:{i:0;R:39053;i:1;R:38893;}s:45:"1226:pybfrerd-pybfr_erdhrfgf.sbez.ab_dhrfgvba";a:2:{i:0;R:39053;i:1;R:38893;}s:46:"1226:pybfrerd-pybfr_erdhrfgf.sbez.abg_eryrinag";a:2:{i:0;R:39053;i:1;R:38893;}s:38:"1226:pybfrerd-pybfr_erdhrfgf.sbez.fcnz";a:2:{i:0;R:39053;i:1;R:38893;}s:57:"1226:pybfrerd-pybfr_erdhrfgf.sbez.erdhrfg_pybfvat_qrgnvyf";a:2:{i:0;R:39053;i:1;R:38893;}s:51:"1226:pybfrerd-pybfr_erdhrfgf.sbez.pybfr_jvgu_ernfba";a:2:{i:0;R:39053;i:1;R:38893;}s:39:"1226:pybfrerd-pybfr_erdhrfgf.rqvg.gvgyr";a:2:{i:0;R:39053;i:1;R:38893;}s:48:"1226:pybfrerd-pybfr_erdhrfgf.perngr.synfu_abgvpr";a:2:{i:0;R:39053;i:1;R:38893;}s:48:"1226:pybfrerd-pybfr_erdhrfgf.hcqngr.synfu_abgvpr";a:2:{i:0;R:39053;i:1;R:38893;}s:49:"1226:pybfrerd-pybfr_erdhrfgf.qrfgebl.synfu_abgvpr";a:2:{i:0;R:39053;i:1;R:38893;}s:39:"1226:pybfrerd-pybfr_erdhrfgf.zbqry.anzr";a:2:{i:0;R:39053;i:1;R:38893;}s:46:"1226:pybfrerd-pybfr_erdhrfgf.zbqry.ceheny_anzr";a:2:{i:0;R:39053;i:1;R:38893;}s:61:"1226:pybfrerd-pybfr_erdhrfgf.zbqry.zrffntrf.nyernql_erdhrfgrq";a:2:{i:0;R:39053;i:1;R:38893;}s:50:"1226:pybfrerd-pybfr_erdhrfgf.zbqry.nggevohgrf.hfre";a:2:{i:0;R:39053;i:1;R:38893;}s:52:"1226:pybfrerd-pybfr_erdhrfgf.zbqry.nggevohgrf.ernfba";a:2:{i:0;R:39053;i:1;R:38893;}s:53:"1226:pybfrerd-pybfr_erdhrfgf.zbqry.nggevohgrf.pbzzrag";a:2:{i:0;R:39053;i:1;R:38893;}s:33:"1226:pbzzragf-pbzzragf.rqvg.gvgyr";a:2:{i:0;s:16:"shapado-comments";i:1;R:38893;}s:42:"1226:pbzzragf-pbzzragf.perngr.synfu_abgvpr";a:2:{i:0;R:39073;i:1;R:38893;}s:42:"1226:pbzzragf-pbzzragf.hcqngr.synfu_abgvpr";a:2:{i:0;R:39073;i:1;R:38893;}s:41:"1226:pbzzragf-pbzzragf.funerq.nqq_pbzzrag";a:2:{i:0;R:39073;i:1;R:38893;}s:44:"1226:pbzzragf-pbzzragf.funerq.pbzzrag_fhozvg";a:2:{i:0;R:39073;i:1;R:38893;}s:34:"1226:pbzzragf-pbzzragf.funerq.fnvq";a:2:{i:0;R:39073;i:1;R:38893;}s:35:"1226:pbzzragf-pbzzragf.funerq.ercyl";a:2:{i:0;R:39073;i:1;R:38893;}s:29:"1226:pbzzragf-zbqryf.pbzzragf";a:2:{i:0;R:39073;i:1;R:38893;}s:28:"1226:pbzzragf-zbqryf.pbzzrag";a:2:{i:0;R:39073;i:1;R:38893;}s:58:"1226:pbafgenvafpbasvt-npgvirzbqry.zbqryf.pbafgenvaf_pbasvt";a:2:{i:0;s:24:"shapado-constrainsconfig";i:1;R:38893;}s:37:"1226:qrivfr-reebef.zrffntrf.abg_sbhaq";a:2:{i:0;s:14:"shapado-devise";i:1;R:38893;}s:45:"1226:qrivfr-reebef.zrffntrf.nyernql_pbasvezrq";a:2:{i:0;R:39085;i:1;R:38893;}s:38:"1226:qrivfr-reebef.zrffntrf.abg_ybpxrq";a:2:{i:0;R:39085;i:1;R:38893;}s:42:"1226:qrivfr-qrivfr.snvyher.hanhguragvpngrq";a:2:{i:0;R:39085;i:1;R:38893;}s:38:"1226:qrivfr-qrivfr.snvyher.hapbasvezrq";a:2:{i:0;R:39085;i:1;R:38893;}s:33:"1226:qrivfr-qrivfr.snvyher.ybpxrq";a:2:{i:0;R:39085;i:1;R:38893;}s:34:"1226:qrivfr-qrivfr.snvyher.vainyvq";a:2:{i:0;R:39085;i:1;R:38893;}s:40:"1226:qrivfr-qrivfr.snvyher.vainyvq_gbxra";a:2:{i:0;R:39085;i:1;R:38893;}s:34:"1226:qrivfr-qrivfr.snvyher.gvzrbhg";a:2:{i:0;R:39085;i:1;R:38893;}s:35:"1226:qrivfr-qrivfr.snvyher.vanpgvir";a:2:{i:0;R:39085;i:1;R:38893;}s:40:"1226:qrivfr-qrivfr.frffvbaf.fvtava_tebhc";a:2:{i:0;R:39085;i:1;R:38893;}s:37:"1226:qrivfr-qrivfr.frffvbaf.fvtarq_va";a:2:{i:0;R:39085;i:1;R:38893;}s:38:"1226:qrivfr-qrivfr.frffvbaf.fvtarq_bhg";a:2:{i:0;R:39085;i:1;R:38893;}s:32:"1226:qrivfr-qrivfr.frffvbaf.yvax";a:2:{i:0;R:39085;i:1;R:38893;}s:36:"1226:qrivfr-qrivfr.frffvbaf.fvta_bhg";a:2:{i:0;R:39085;i:1;R:38893;}s:43:"1226:qrivfr-qrivfr.frffvbaf.ertvfgrerq_bayl";a:2:{i:0;R:39085;i:1;R:38893;}s:43:"1226:qrivfr-qrivfr.frffvbaf.arj.erzrzore_zr";a:2:{i:0;R:39085;i:1;R:38893;}s:42:"1226:qrivfr-qrivfr.frffvbaf.arj.bcravq_hey";a:2:{i:0;R:39085;i:1;R:38893;}s:40:"1226:qrivfr-qrivfr.cnffjbeqf.fraq_ohggba";a:2:{i:0;R:39085;i:1;R:38893;}s:46:"1226:qrivfr-qrivfr.cnffjbeqf.fraq_vafgehpgvbaf";a:2:{i:0;R:39085;i:1;R:38893;}s:36:"1226:qrivfr-qrivfr.cnffjbeqf.hcqngrq";a:2:{i:0;R:39085;i:1;R:38893;}s:33:"1226:qrivfr-qrivfr.cnffjbeqf.yvax";a:2:{i:0;R:39085;i:1;R:38893;}s:50:"1226:qrivfr-qrivfr.pbasvezngvbaf.fraq_vafgehpgvbaf";a:2:{i:0;R:39085;i:1;R:38893;}s:42:"1226:qrivfr-qrivfr.pbasvezngvbaf.pbasvezrq";a:2:{i:0;R:39085;i:1;R:38893;}s:42:"1226:qrivfr-qrivfr.ertvfgengvbaf.fvtarq_hc";a:2:{i:0;R:39085;i:1;R:38893;}s:40:"1226:qrivfr-qrivfr.ertvfgengvbaf.hcqngrq";a:2:{i:0;R:39085;i:1;R:38893;}s:42:"1226:qrivfr-qrivfr.ertvfgengvbaf.qrfgeblrq";a:2:{i:0;R:39085;i:1;R:38893;}s:37:"1226:qrivfr-qrivfr.ertvfgengvbaf.yvax";a:2:{i:0;R:39085;i:1;R:38893;}s:44:"1226:qrivfr-qrivfr.haybpxf.fraq_vafgehpgvbaf";a:2:{i:0;R:39085;i:1;R:38893;}s:35:"1226:qrivfr-qrivfr.haybpxf.haybpxrq";a:2:{i:0;R:39085;i:1;R:38893;}s:31:"1226:qrivfr-qrivfr.haybpxf.yvax";a:2:{i:0;R:39085;i:1;R:38893;}s:59:"1226:qrivfr-qrivfr.znvyre.pbasvezngvba_vafgehpgvbaf.fhowrpg";a:2:{i:0;R:39085;i:1;R:38893;}s:61:"1226:qrivfr-qrivfr.znvyre.erfrg_cnffjbeq_vafgehpgvbaf.fhowrpg";a:2:{i:0;R:39085;i:1;R:38893;}s:53:"1226:qrivfr-qrivfr.znvyre.haybpx_vafgehpgvbaf.fhowrpg";a:2:{i:0;R:39085;i:1;R:38893;}s:31:"1226:qrivfr-qrivfr.znvyre.uryyb";a:2:{i:0;R:39085;i:1;R:38893;}s:45:"1226:qrivfr-qrivfr.znvyre.haybpx.vafgehpgvba1";a:2:{i:0;R:39085;i:1;R:38893;}s:45:"1226:qrivfr-qrivfr.znvyre.haybpx.vafgehpgvba2";a:2:{i:0;R:39085;i:1;R:38893;}s:37:"1226:qrivfr-qrivfr.znvyre.haybpx.yvax";a:2:{i:0;R:39085;i:1;R:38893;}s:53:"1226:qrivfr-qrivfr.znvyre.erfrg_cnffjbeq.vafgehpgvba1";a:2:{i:0;R:39085;i:1;R:38893;}s:53:"1226:qrivfr-qrivfr.znvyre.erfrg_cnffjbeq.abaerdhrfgrq";a:2:{i:0;R:39085;i:1;R:38893;}s:48:"1226:qrivfr-qrivfr.znvyre.erfrg_cnffjbeq.jneavat";a:2:{i:0;R:39085;i:1;R:38893;}s:45:"1226:qrivfr-qrivfr.znvyre.erfrg_cnffjbeq.yvax";a:2:{i:0;R:39085;i:1;R:38893;}s:49:"1226:qrivfr-qrivfr.znvyre.pbasvez_nppbhag.jrypbzr";a:2:{i:0;R:39085;i:1;R:38893;}s:54:"1226:qrivfr-qrivfr.znvyre.pbasvez_nppbhag.vafgehpgvba1";a:2:{i:0;R:39085;i:1;R:38893;}s:46:"1226:qrivfr-qrivfr.znvyre.pbasvez_nppbhag.yvax";a:2:{i:0;R:39085;i:1;R:38893;}s:23:"1226:qbp-qbp.pung.gvgyr";a:2:{i:0;s:11:"shapado-doc";i:1;R:38893;}s:24:"1226:qbp-qbp.cynaf.cynaf";a:2:{i:0;R:39131;i:1;R:38893;}s:24:"1226:qbp-qbp.cynaf.gvgyr";a:2:{i:0;R:39131;i:1;R:38893;}s:28:"1226:qbp-qbp.cynaf.serr_cyna";a:2:{i:0;R:39131;i:1;R:38893;}s:27:"1226:qbp-qbp.cynaf.jr_bssre";a:2:{i:0;R:39131;i:1;R:38893;}s:33:"1226:qbp-qbp.cynaf.jvgu_hayvzvgrq";a:2:{i:0;R:39131;i:1;R:38893;}s:28:"1226:qbp-qbp.cynaf.orgn_vasb";a:2:{i:0;R:39131;i:1;R:38893;}s:29:"1226:qbp-qbp.cynaf.uhtr_fvgrf";a:2:{i:0;R:39131;i:1;R:38893;}s:28:"1226:qbp-qbp.cynaf.ovt_fvgrf";a:2:{i:0;R:39131;i:1;R:38893;}s:34:"1226:qbp-qbp.cynaf.trggvat_cbchyne";a:2:{i:0;R:39131;i:1;R:38893;}s:35:"1226:qbp-qbp.cynaf.fgneg_zbargvmvat";a:2:{i:0;R:39131;i:1;R:38893;}s:32:"1226:qbp-qbp.cynaf.fznyy_cevingr";a:2:{i:0;R:39131;i:1;R:38893;}s:29:"1226:qbp-qbp.cynaf.cntr_ivrjf";a:2:{i:0;R:39131;i:1;R:38893;}s:32:"1226:qbp-qbp.cynaf.phfgbz_gurzrf";a:2:{i:0;R:39131;i:1;R:38893;}s:31:"1226:qbp-qbp.cynaf.cevingr_fvgr";a:2:{i:0;R:39131;i:1;R:38893;}s:32:"1226:qbp-qbp.cynaf.phfgbz_qbznva";a:2:{i:0;R:39131;i:1;R:38893;}s:28:"1226:qbp-qbp.cynaf.phfgbz_hv";a:2:{i:0;R:39131;i:1;R:38893;}s:29:"1226:qbp-qbp.cynaf.phfgbz_nqf";a:2:{i:0;R:39131;i:1;R:38893;}s:35:"1226:qbp-qbp.cynaf.phfgbz_nanylgvpf";a:2:{i:0;R:39131;i:1;R:38893;}s:26:"1226:qbp-qbp.cynaf.fhccbeg";a:2:{i:0;R:39131;i:1;R:38893;}s:28:"1226:qbp-qbp.cynaf.hayvzvgrq";a:2:{i:0;R:39131;i:1;R:38893;}s:27:"1226:qbp-qbp.cynaf.1zvyyvba";a:2:{i:0;R:39131;i:1;R:38893;}s:28:"1226:qbp-qbp.cynaf.5zvyyvbaf";a:2:{i:0;R:39131;i:1;R:38893;}s:29:"1226:qbp-qbp.cynaf.15zvyyvbaf";a:2:{i:0;R:39131;i:1;R:38893;}s:30:"1226:qbp-qbp.cynaf.jro_fhccbeg";a:2:{i:0;R:39131;i:1;R:38893;}s:30:"1226:qbp-qbp.cynaf.nyy_fhccbeg";a:2:{i:0;R:39131;i:1;R:38893;}s:34:"1226:qbp-qbp.cynaf.247_nyy_fhccbeg";a:2:{i:0;R:39131;i:1;R:38893;}s:37:"1226:qbp-qbp.cynaf.onfvp_erfgevpgvbaf";a:2:{i:0;R:39131;i:1;R:38893;}s:24:"1226:qbp-qbp.cynaf.zbagu";a:2:{i:0;R:39131;i:1;R:38893;}s:32:"1226:reebef-reebef.bcgvbaf_ynory";a:2:{i:0;s:14:"shapado-errors";i:1;R:38893;}s:24:"1226:reebef-reebef.tb_gb";a:2:{i:0;R:39161;i:1;R:38893;}s:33:"1226:reebef-reebef.uryc_hf_nafjre";a:2:{i:0;R:39161;i:1;R:38893;}s:25:"1226:reebef-reebef.frnepu";a:2:{i:0;R:39161;i:1;R:38893;}s:34:"1226:reebef-reebef.sbeovqqra.gvgyr";a:2:{i:0;R:39161;i:1;R:38893;}s:40:"1226:reebef-reebef.sbeovqqra.rkcynangvba";a:2:{i:0;R:39161;i:1;R:38893;}s:34:"1226:reebef-reebef.abg_sbhaq.gvgyr";a:2:{i:0;R:39161;i:1;R:38893;}s:40:"1226:reebef-reebef.abg_sbhaq.rkcynangvba";a:2:{i:0;R:39161;i:1;R:38893;}s:45:"1226:reebef-reebef.hacebprffnoyr_ragvgl.gvgyr";a:2:{i:0;R:39161;i:1;R:38893;}s:51:"1226:reebef-reebef.hacebprffnoyr_ragvgl.rkcynangvba";a:2:{i:0;R:39161;i:1;R:38893;}s:39:"1226:reebef-reebef.vagreany_reebe.gvgyr";a:2:{i:0;R:39161;i:1;R:38893;}s:45:"1226:reebef-reebef.vagreany_reebe.rkcynangvba";a:2:{i:0;R:39161;i:1;R:38893;}s:42:"1226:snif-snibevgrf.perngr.hanhguragvpngrq";a:2:{i:0;s:17:"shapado-favorites";i:1;R:38893;}s:34:"1226:snif-snibevgrf.perngr.fhpprff";a:2:{i:0;R:39174;i:1;R:38893;}s:39:"1226:snif-npgvirerpbeq.zbqryf.snibevgrf";a:2:{i:0;R:39174;i:1;R:38893;}s:38:"1226:snif-npgvirerpbeq.zbqryf.snibevgr";a:2:{i:0;R:39174;i:1;R:38893;}s:26:"1226:syntf-syntf.sbez.fcnz";a:2:{i:0;s:13:"shapado-flags";i:1;R:38893;}s:31:"1226:syntf-syntf.sbez.bssrafvir";a:2:{i:0;R:39179;i:1;R:38893;}s:31:"1226:syntf-syntf.sbez.nggragvba";a:2:{i:0;R:39179;i:1;R:38893;}s:27:"1226:syntf-syntf.sbez.ynory";a:2:{i:0;R:39179;i:1;R:38893;}s:36:"1226:syntf-syntf.perngr.synfu_abgvpr";a:2:{i:0;R:39179;i:1;R:38893;}s:35:"1226:syntf-syntf.perngr.synfu_reebe";a:2:{i:0;R:39179;i:1;R:38893;}s:26:"1226:syntf-syntf.arj.gvgyr";a:2:{i:0;R:39179;i:1;R:38893;}s:27:"1226:syntf-syntf.rqvg.gvgyr";a:2:{i:0;R:39179;i:1;R:38893;}s:37:"1226:syntf-syntf.qrfgebl.synfu_abgvpr";a:2:{i:0;R:39179;i:1;R:38893;}s:36:"1226:syntf-syntf.hcqngr.synfu_abgvpr";a:2:{i:0;R:39179;i:1;R:38893;}s:49:"1226:syntf-syntf.zbqry.zrffntrf.nyernql_erdhrfgrq";a:2:{i:0;R:39179;i:1;R:38893;}s:36:"1226:syntf-npgvirerpbeq.zbqryf.syntf";a:2:{i:0;R:39179;i:1;R:38893;}s:35:"1226:syntf-npgvirerpbeq.zbqryf.synt";a:2:{i:0;R:39179;i:1;R:38893;}s:46:"1226:syntf-npgvirerpbeq.nggevohgrf.synt.ernfba";a:2:{i:0;R:39179;i:1;R:38893;}s:22:"1226:tybony-ebyrf.hfre";a:2:{i:0;s:14:"shapado-global";i:1;R:38893;}s:27:"1226:tybony-ebyrf.zbqrengbe";a:2:{i:0;R:39194;i:1;R:38893;}s:23:"1226:tybony-ebyrf.bjare";a:2:{i:0;R:39194;i:1;R:38893;}s:34:"1226:tybony-ivrjf.cntvangvba.svefg";a:2:{i:0;R:39194;i:1;R:38893;}s:33:"1226:tybony-ivrjf.cntvangvba.ynfg";a:2:{i:0;R:39194;i:1;R:38893;}s:33:"1226:tybony-ivrjf.cntvangvba.arkg";a:2:{i:0;R:39194;i:1;R:38893;}s:37:"1226:tybony-ivrjf.cntvangvba.cerivbhf";a:2:{i:0;R:39194;i:1;R:38893;}s:37:"1226:tybony-ivrjf.cntvangvba.gehapngr";a:2:{i:0;R:39194;i:1;R:38893;}s:33:"1226:tybony-fpnssbyq.ner_lbh_fher";a:2:{i:0;R:39194;i:1;R:38893;}s:25:"1226:tybony-fpnssbyq.fher";a:2:{i:0;R:39194;i:1;R:38893;}s:25:"1226:tybony-fpnssbyq.fubj";a:2:{i:0;R:39194;i:1;R:38893;}s:25:"1226:tybony-fpnssbyq.rqvg";a:2:{i:0;R:39194;i:1;R:38893;}s:28:"1226:tybony-fpnssbyq.qrfgebl";a:2:{i:0;R:39194;i:1;R:38893;}s:25:"1226:tybony-fpnssbyq.onpx";a:2:{i:0;R:39194;i:1;R:38893;}s:27:"1226:tybony-fpnssbyq.hcqngr";a:2:{i:0;R:39194;i:1;R:38893;}s:27:"1226:tybony-fpnssbyq.pnapry";a:2:{i:0;R:39194;i:1;R:38893;}s:26:"1226:tybony-fpnssbyq.pybfr";a:2:{i:0;R:39194;i:1;R:38893;}s:27:"1226:tybony-fpnssbyq.perngr";a:2:{i:0;R:39194;i:1;R:38893;}s:24:"1226:tybony-fpnssbyq.arj";a:2:{i:0;R:39194;i:1;R:38893;}s:25:"1226:tybony-fpnssbyq.zber";a:2:{i:0;R:39194;i:1;R:38893;}s:24:"1226:tybony-fpnssbyq.nqq";a:2:{i:0;R:39194;i:1;R:38893;}s:25:"1226:tybony-fpnssbyq.fraq";a:2:{i:0;R:39194;i:1;R:38893;}s:25:"1226:tybony-fpnssbyq.fnir";a:2:{i:0;R:39194;i:1;R:38893;}s:28:"1226:tybony-fpnssbyq.qrgnvyf";a:2:{i:0;R:39194;i:1;R:38893;}s:38:"1226:tybony-fpnssbyq.cbfg_nf_nabalzbhf";a:2:{i:0;R:39194;i:1;R:38893;}s:22:"1226:tybony-gvzr.gbqnl";a:2:{i:0;R:39194;i:1;R:38893;}s:26:"1226:tybony-gvzr.lrfgreqnl";a:2:{i:0;R:39194;i:1;R:38893;}s:20:"1226:tybony-gvzr.ntb";a:2:{i:0;R:39194;i:1;R:38893;}s:27:"1226:tybony-zbqryf.dhrfgvba";a:2:{i:0;R:39194;i:1;R:38893;}s:23:"1226:tybony-tybony.bcra";a:2:{i:0;R:39194;i:1;R:38893;}s:23:"1226:tybony-tybony.fvmr";a:2:{i:0;R:39194;i:1;R:38893;}s:33:"1226:tybony-tybony.nycunorgvpnyyl";a:2:{i:0;R:39194;i:1;R:38893;}s:23:"1226:tybony-tybony.sebz";a:2:{i:0;R:39194;i:1;R:38893;}s:36:"1226:tybony-tybony.crezvffvba_qravrq";a:2:{i:0;R:39194;i:1;R:38893;}s:31:"1226:tybony-tybony.cyrnfr_ybtva";a:2:{i:0;R:39194;i:1;R:38893;}s:34:"1226:tybony-tybony.tebhc_abg_sbhaq";a:2:{i:0;R:39194;i:1;R:38893;}s:26:"1226:tybony-tybony.cerivrj";a:2:{i:0;R:39194;i:1;R:38893;}s:21:"1226:tybony-tybony.be";a:2:{i:0;R:39194;i:1;R:38893;}s:21:"1226:tybony-tybony.ol";a:2:{i:0;R:39194;i:1;R:38893;}s:26:"1226:tybony-tybony.ol_frzv";a:2:{i:0;R:39194;i:1;R:38893;}s:33:"1226:tybony-tybony.rqvgrq_ol_frzv";a:2:{i:0;R:39194;i:1;R:38893;}s:28:"1226:tybony-tybony.rqvgrq_ol";a:2:{i:0;R:39194;i:1;R:38893;}s:26:"1226:tybony-tybony.pheerag";a:2:{i:0;R:39194;i:1;R:38893;}s:27:"1226:tybony-tybony.cerivbhf";a:2:{i:0;R:39194;i:1;R:38893;}s:24:"1226:tybony-tybony.funer";a:2:{i:0;R:39194;i:1;R:38893;}s:25:"1226:tybony-tybony.npgvir";a:2:{i:0;R:39194;i:1;R:38893;}s:28:"1226:tybony-tybony.nabalzbhf";a:2:{i:0;R:39194;i:1;R:38893;}s:32:"1226:tybony-tybony.haxabja_cynpr";a:2:{i:0;R:39194;i:1;R:38893;}s:25:"1226:tybony-tybony.sbyybj";a:2:{i:0;R:39194;i:1;R:38893;}s:28:"1226:tybony-tybony.sbyybjvat";a:2:{i:0;R:39194;i:1;R:38893;}s:27:"1226:tybony-tybony.hasbyybj";a:2:{i:0;R:39194;i:1;R:38893;}s:30:"1226:tybony-tybony.arkg_ohggba";a:2:{i:0;R:39194;i:1;R:38893;}s:23:"1226:tybony-tybony.ivrj";a:2:{i:0;R:39194;i:1;R:38893;}s:32:"1226:tybony-tybony.ivrj_dhrfgvba";a:2:{i:0;R:39194;i:1;R:38893;}s:29:"1226:tybony-tybony.jung_gb_qb";a:2:{i:0;R:39194;i:1;R:38893;}s:26:"1226:tybony-tybony.npgvbaf";a:2:{i:0;R:39194;i:1;R:38893;}s:26:"1226:tybony-tybony.fvta_hc";a:2:{i:0;R:39194;i:1;R:38893;}s:27:"1226:tybony-tybony.srrqonpx";a:2:{i:0;R:39194;i:1;R:38893;}s:23:"1226:tybony-tybony.pung";a:2:{i:0;R:39194;i:1;R:38893;}s:22:"1226:tybony-tybony.gbf";a:2:{i:0;R:39194;i:1;R:38893;}s:26:"1226:tybony-tybony.cevinpl";a:2:{i:0;R:39194;i:1;R:38893;}s:23:"1226:tybony-tybony.oybt";a:2:{i:0;R:39194;i:1;R:38893;}s:23:"1226:tybony-tybony.ubzr";a:2:{i:0;R:39194;i:1;R:38893;}s:26:"1226:tybony-tybony.fbeg_ol";a:2:{i:0;R:39194;i:1;R:38893;}s:29:"1226:tybony-tybony.gntf_ynory";a:2:{i:0;R:39194;i:1;R:38893;}s:30:"1226:tybony-tybony.sbyybjrq_ol";a:2:{i:0;R:39194;i:1;R:38893;}s:25:"1226:tybony-tybony.rqvgrq";a:2:{i:0;R:39194;i:1;R:38893;}s:26:"1226:tybony-srrqf.dhrfgvba";a:2:{i:0;R:39194;i:1;R:38893;}s:27:"1226:tybony-srrqf.dhrfgvbaf";a:2:{i:0;R:39194;i:1;R:38893;}s:21:"1226:tybony-srrqf.gnt";a:2:{i:0;R:39194;i:1;R:38893;}s:22:"1226:tybony-srrqf.hfre";a:2:{i:0;R:39194;i:1;R:38893;}s:22:"1226:tybony-srrqf.srrq";a:2:{i:0;R:39194;i:1;R:38893;}s:36:"1226:tybony-srrqf.cbfg_arj_dhrfgvbaf";a:2:{i:0;R:39194;i:1;R:38893;}s:34:"1226:tybony-srrqf.funer_ba_gjvggre";a:2:{i:0;R:39194;i:1;R:38893;}s:35:"1226:tybony-cersreerq_ynathntrf.nal";a:2:{i:0;R:39194;i:1;R:38893;}s:36:"1226:tybony-cersreerq_ynathntrf.hfre";a:2:{i:0;R:39194;i:1;R:38893;}s:25:"1226:tybony-ahzore.k_gvzr";a:2:{i:0;R:39194;i:1;R:38893;}s:32:"1226:tebhcf-tebhcf.hcqngr.abgvpr";a:2:{i:0;s:14:"shapado-groups";i:1;R:38893;}s:44:"1226:tebhcf-tebhcf.gbc_tebhcyvfg.npgvir_fvgr";a:2:{i:0;R:39272;i:1;R:38893;}s:30:"1226:tebhcf-tebhcf.vaqrk.gvgyr";a:2:{i:0;R:39272;i:1;R:38893;}s:36:"1226:tebhcf-tebhcf.vaqrk.qrfpevcgvba";a:2:{i:0;R:39272;i:1;R:38893;}s:40:"1226:tebhcf-tebhcf.vaqrk.perngr_lbhe_bja";a:2:{i:0;R:39272;i:1;R:38893;}s:31:"1226:tebhcf-tebhcf.vaqrk.svygre";a:2:{i:0;R:39272;i:1;R:38893;}s:32:"1226:tebhcf-tebhcf.vaqrk.npgvirf";a:2:{i:0;R:39272;i:1;R:38893;}s:33:"1226:tebhcf-tebhcf.vaqrk.craqvatf";a:2:{i:0;R:39272;i:1;R:38893;}s:36:"1226:tebhcf-tebhcf.vaqrk.zbfg_npgvir";a:2:{i:0;R:39272;i:1;R:38893;}s:38:"1226:tebhcf-tebhcf.vaqrk.erdhrfg_tebhc";a:2:{i:0;R:39272;i:1;R:38893;}s:29:"1226:tebhcf-tebhcf.vaqrk.anzr";a:2:{i:0;R:39272;i:1;R:38893;}s:30:"1226:tebhcf-tebhcf.tebhc.nobhg";a:2:{i:0;R:39272;i:1;R:38893;}s:30:"1226:tebhcf-tebhcf.tebhc.pybfr";a:2:{i:0;R:39272;i:1;R:38893;}s:37:"1226:tebhcf-tebhcf.tebhc.npprcg_tebhc";a:2:{i:0;R:39272;i:1;R:38893;}s:36:"1226:tebhcf-tebhcf.tebhc.pybfr_tebhc";a:2:{i:0;R:39272;i:1;R:38893;}s:34:"1226:tebhcf-tebhcf.tebhc.nyybj_nqf";a:2:{i:0;R:39272;i:1;R:38893;}s:37:"1226:tebhcf-tebhcf.tebhc.qvfnyybj_nqf";a:2:{i:0;R:39272;i:1;R:38893;}s:29:"1226:tebhcf-tebhcf.fubj.gvgyr";a:2:{i:0;R:39272;i:1;R:38893;}s:35:"1226:tebhcf-tebhcf.fubj.ivfvg_tebhc";a:2:{i:0;R:39272;i:1;R:38893;}s:49:"1226:tebhcf-tebhcf.fubj.tebhc_njnvgvat_npprcgnapr";a:2:{i:0;R:39272;i:1;R:38893;}s:36:"1226:tebhcf-tebhcf.fubj.tebhc_pybfrq";a:2:{i:0;R:39272;i:1;R:38893;}s:36:"1226:tebhcf-tebhcf.fubj.npprcg_tebhc";a:2:{i:0;R:39272;i:1;R:38893;}s:35:"1226:tebhcf-tebhcf.fubj.pybfr_tebhc";a:2:{i:0;R:39272;i:1;R:38893;}s:52:"1226:tebhcf-tebhcf.fubj.npprcg_tebhc_jvgu_phfgbz_nqf";a:2:{i:0;R:39272;i:1;R:38893;}s:28:"1226:tebhcf-tebhcf.arj.gvgyr";a:2:{i:0;R:39272;i:1;R:38893;}s:38:"1226:tebhcf-tebhcf.perngr.synfu_abgvpr";a:2:{i:0;R:39272;i:1;R:38893;}s:29:"1226:tebhcf-tebhcf.rqvg.gvgyr";a:2:{i:0;R:39272;i:1;R:38893;}s:42:"1226:tebhcf-tebhcf.sbez.qrfpevcgvba_yrtraq";a:2:{i:0;R:39272;i:1;R:38893;}s:37:"1226:tebhcf-tebhcf.sbez.yrtraq_yrtraq";a:2:{i:0;R:39272;i:1;R:38893;}s:43:"1226:tebhcf-tebhcf.sbez.qrsnhyg_gntf_yrtraq";a:2:{i:0;R:39272;i:1;R:38893;}s:35:"1226:tebhcf-tebhcf.sbez.ybtb_yrtraq";a:2:{i:0;R:39272;i:1;R:38893;}s:36:"1226:tebhcf-tebhcf.sbez.nal_ynathntr";a:2:{i:0;R:39272;i:1;R:38893;}s:30:"1226:tebhcf-tebhcf.sbez.npprff";a:2:{i:0;R:39272;i:1;R:38893;}s:37:"1226:tebhcf-tebhcf.sbez.vfbyngr_tebhc";a:2:{i:0;R:39272;i:1;R:38893;}s:36:"1226:tebhcf-tebhcf.sbez.zrzoref_bayl";a:2:{i:0;R:39272;i:1;R:38893;}s:35:"1226:tebhcf-tebhcf.sbez.phfgbz_ugzy";a:2:{i:0;R:39272;i:1;R:38893;}s:33:"1226:tebhcf-tebhcf.sbez.phfgbz_wf";a:2:{i:0;R:39272;i:1;R:38893;}s:40:"1226:tebhcf-tebhcf.sbez.phfgbz_nanylgvpf";a:2:{i:0;R:39272;i:1;R:38893;}s:40:"1226:tebhcf-tebhcf.sbez.nanylgvpf_ratvar";a:2:{i:0;R:39272;i:1;R:38893;}s:44:"1226:tebhcf-tebhcf.sbez.jrofvgr_nanylgvpf_vq";a:2:{i:0;R:39272;i:1;R:38893;}s:40:"1226:tebhcf-tebhcf.sbez.nanylgvpf_yrtraq";a:2:{i:0;R:39272;i:1;R:38893;}s:34:"1226:tebhcf-tebhcf.sbez.fvtahc_nyy";a:2:{i:0;R:39272;i:1;R:38893;}s:38:"1226:tebhcf-tebhcf.sbez.fvtahc_abrznvy";a:2:{i:0;R:39272;i:1;R:38893;}s:37:"1226:tebhcf-tebhcf.sbez.fvtahc_fbpvny";a:2:{i:0;R:39272;i:1;R:38893;}s:36:"1226:tebhcf-tebhcf.sbez.fvtahc_rznvy";a:2:{i:0;R:39272;i:1;R:38893;}s:70:"1226:tebhcf-tebhcf.pbaarpg_tebhc_gb_gjvggre.fhpprff_gjvggre_pbaarpgvba";a:2:{i:0;R:39272;i:1;R:38893;}s:69:"1226:tebhcf-tebhcf.pbaarpg_tebhc_gb_gjvggre.snvyrq_gjvggre_pbaarpgvba";a:2:{i:0;R:39272;i:1;R:38893;}s:38:"1226:tebhcf-npgvirerpbeq.zbqryf.tebhcf";a:2:{i:0;R:39272;i:1;R:38893;}s:37:"1226:tebhcf-npgvirerpbeq.zbqryf.tebhc";a:2:{i:0;R:39272;i:1;R:38893;}s:52:"1226:tebhcf-npgvirerpbeq.zbqryf.qrsnhyg_gntf_zrffntr";a:2:{i:0;R:39272;i:1;R:38893;}s:54:"1226:tebhcf-npgvirerpbeq.zbqryf.erchgngvba_erjneqf_xrl";a:2:{i:0;R:39272;i:1;R:38893;}s:64:"1226:tebhcf-npgvirerpbeq.zbqryf.erchgngvba_erjneqf_nfx_pbafgenva";a:2:{i:0;R:39272;i:1;R:38893;}s:67:"1226:tebhcf-npgvirerpbeq.zbqryf.erchgngvba_erjneqf_nafjre_pbafgenva";a:2:{i:0;R:39272;i:1;R:38893;}s:56:"1226:tebhcf-npgvirerpbeq.zbqryf.qhcyvpngr_qbznva_zrffntr";a:2:{i:0;R:39272;i:1;R:38893;}s:46:"1226:tebhcf-npgvirerpbeq.nggevohgrf.tebhc.anzr";a:2:{i:0;R:39272;i:1;R:38893;}s:51:"1226:tebhcf-npgvirerpbeq.nggevohgrf.tebhc.fhoqbznva";a:2:{i:0;R:39272;i:1;R:38893;}s:48:"1226:tebhcf-npgvirerpbeq.nggevohgrf.tebhc.qbznva";a:2:{i:0;R:39272;i:1;R:38893;}s:48:"1226:tebhcf-npgvirerpbeq.nggevohgrf.tebhc.yrtraq";a:2:{i:0;R:39272;i:1;R:38893;}s:53:"1226:tebhcf-npgvirerpbeq.nggevohgrf.tebhc.qrfpevcgvba";a:2:{i:0;R:39272;i:1;R:38893;}s:47:"1226:tebhcf-npgvirerpbeq.nggevohgrf.tebhc.fgngr";a:2:{i:0;R:39272;i:1;R:38893;}s:47:"1226:tebhcf-npgvirerpbeq.nggevohgrf.tebhc.bjare";a:2:{i:0;R:39272;i:1;R:38893;}s:58:"1226:tebhcf-npgvirerpbeq.nggevohgrf.tebhc.tebhc_perngrq_ol";a:2:{i:0;R:39272;i:1;R:38893;}s:50:"1226:tebhcf-npgvirerpbeq.nggevohgrf.tebhc.ynathntr";a:2:{i:0;R:39272;i:1;R:38893;}s:51:"1226:tebhcf-npgvirerpbeq.nggevohgrf.tebhc.ynathntrf";a:2:{i:0;R:39272;i:1;R:38893;}s:54:"1226:tebhcf-npgvirerpbeq.nggevohgrf.tebhc.qrsnhyg_gntf";a:2:{i:0;R:39272;i:1;R:38893;}s:46:"1226:tebhcf-npgvirerpbeq.nggevohgrf.tebhc.ybtb";a:2:{i:0;R:39272;i:1;R:38893;}s:47:"1226:tebhcf-npgvirerpbeq.nggevohgrf.tebhc.sbehz";a:2:{i:0;R:39272;i:1;R:38893;}s:53:"1226:tebhcf-npgvirerpbeq.nggevohgrf.tebhc.fvtahc_glcr";a:2:{i:0;R:39272;i:1;R:38893;}s:57:"1226:tebhcf-npgvirerpbeq.nggevohgrf.tebhc.ertvfgrerq_bayl";a:2:{i:0;R:39272;i:1;R:38893;}s:67:"1226:tebhcf-npgvirerpbeq.nggevohgrf.tebhc.znl_pbagnva_nqhyg_pbagrag";a:2:{i:0;R:39272;i:1;R:38893;}s:56:"1226:tebhcf-npgvirerpbeq.nggevohgrf.tebhc.jlfvjlt_rqvgbe";a:2:{i:0;R:39272;i:1;R:38893;}s:51:"1226:tebhcf-npgvirerpbeq.nggevohgrf.tebhc.so_ohggba";a:2:{i:0;R:39272;i:1;R:38893;}s:54:"1226:tebhcf-npgvirerpbeq.nggevohgrf.tebhc.ranoyr_yngrk";a:2:{i:0;R:39272;i:1;R:38893;}s:56:"1226:tebhcf-npgvirerpbeq.nggevohgrf.tebhc.ranoyr_znguwnk";a:2:{i:0;R:39272;i:1;R:38893;}s:51:"1226:tebhcf-npgvirerpbeq.nggevohgrf.tebhc.qnvyl_pnc";a:2:{i:0;R:39272;i:1;R:38893;}s:53:"1226:tebhcf-npgvirerpbeq.nggevohgrf.tebhc.genpx_hfref";a:2:{i:0;R:39272;i:1;R:38893;}s:51:"1226:vzcbegf-vzcbegf.fhognof.arrq_pbasvezngvba.anzr";a:2:{i:0;s:15:"shapado-imports";i:1;R:38893;}s:52:"1226:vzcbegf-vzcbegf.fhognof.arrq_pbasvezngvba.gvgyr";a:2:{i:0;R:39349;i:1;R:38893;}s:48:"1226:vaivgngvbaf-vaivgngvbaf.erfraq.synfu_abgvpr";a:2:{i:0;s:19:"shapado-invitations";i:1;R:38893;}s:48:"1226:vaivgngvbaf-vaivgngvbaf.eribxr.synfu_abgvpr";a:2:{i:0;R:39352;i:1;R:38893;}s:48:"1226:vaivgngvbaf-vaivgngvbaf.perngr.synfu_abgvpr";a:2:{i:0;R:39352;i:1;R:38893;}s:48:"1226:vaivgngvbaf-vaivgngvbaf.perngr.yvzvg_abgvpr";a:2:{i:0;R:39352;i:1;R:38893;}s:43:"1226:vaivgngvbaf-vaivgngvbaf.npprcg.jrypbzr";a:2:{i:0;R:39352;i:1;R:38893;}s:47:"1226:vaivgngvbaf-vaivgngvbaf.npprcg.qrfpevcgvba";a:2:{i:0;R:39352;i:1;R:38893;}s:42:"1226:vaivgngvbaf-vaivgngvbaf.npprcg.cbvag1";a:2:{i:0;R:39352;i:1;R:38893;}s:42:"1226:vaivgngvbaf-vaivgngvbaf.npprcg.cbvag2";a:2:{i:0;R:39352;i:1;R:38893;}s:42:"1226:vaivgngvbaf-vaivgngvbaf.npprcg.cbvag3";a:2:{i:0;R:39352;i:1;R:38893;}s:42:"1226:vaivgngvbaf-vaivgngvbaf.npprcg.cbvag4";a:2:{i:0;R:39352;i:1;R:38893;}s:50:"1226:vaivgngvbaf-vaivgngvbaf.npprcg.perngr_nppbhag";a:2:{i:0;R:39352;i:1;R:38893;}s:52:"1226:vaivgngvbaf-vaivgngvbaf.npprcg.snprobbx_pbaarpg";a:2:{i:0;R:39352;i:1;R:38893;}s:51:"1226:vaivgngvbaf-vaivgngvbaf.npprcg.gjvggre_pbaarpg";a:2:{i:0;R:39352;i:1;R:38893;}s:49:"1226:vaivgngvbaf-vaivgngvbaf.npprcg.bgure_pbaarpg";a:2:{i:0;R:39352;i:1;R:38893;}s:56:"1226:vaivgngvbaf-vaivgngvbaf.npprcg.bgure_fbpvny_bcgvbaf";a:2:{i:0;R:39352;i:1;R:38893;}s:46:"1226:vaivgngvbaf-vaivgngvbaf.npprcg.svany_fgrc";a:2:{i:0;R:39352;i:1;R:38893;}s:56:"1226:vaivgngvbaf-vaivgngvbaf.npprcg.perngr_nppbhag_fgrc2";a:2:{i:0;R:39352;i:1;R:38893;}s:48:"1226:vaivgngvbaf-vaivgngvbaf.npprcg.svaq_sevraqf";a:2:{i:0;R:39352;i:1;R:38893;}s:49:"1226:vaivgngvbaf-vaivgngvbaf.npprcg.sbyybj_guvatf";a:2:{i:0;R:39352;i:1;R:38893;}s:61:"1226:vaivgngvbaf-vaivgngvbaf.npprcg.sbyybj_guvatf_qrfpevcgvba";a:2:{i:0;R:39352;i:1;R:38893;}s:40:"1226:vaivgngvbaf-vaivgngvbaf.npprcg.qbar";a:2:{i:0;R:39352;i:1;R:38893;}s:45:"1226:wbof-wbof.onfr.perngr_onqtr.fraq_gjvggre";a:2:{i:0;s:12:"shapado-jobs";i:1;R:38893;}s:51:"1226:wbof-wbof.onfr.perngr_onqtr.tebhc_fraq_gjvggre";a:2:{i:0;R:39374;i:1;R:38893;}s:54:"1226:wbof-wbof.nafjref.ba_snibevgr_nafjre.fraq_gjvggre";a:2:{i:0;R:39374;i:1;R:38893;}s:60:"1226:wbof-wbof.nafjref.ba_snibevgr_nafjre.tebhc_fraq_gjvggre";a:2:{i:0;R:39374;i:1;R:38893;}s:52:"1226:wbof-wbof.nafjref.ba_perngr_nafjre.fraq_gjvggre";a:2:{i:0;R:39374;i:1;R:38893;}s:58:"1226:wbof-wbof.nafjref.ba_perngr_nafjre.tebhc_fraq_gjvggre";a:2:{i:0;R:39374;i:1;R:38893;}s:47:"1226:wbof-wbof.pbzzragf.ba_pbzzrag.fraq_gjvggre";a:2:{i:0;R:39374;i:1;R:38893;}s:51:"1226:wbof-wbof.pbzzragf.ba_pbzzrag.tebhc_ba_pbzzrag";a:2:{i:0;R:39374;i:1;R:38893;}s:21:"1226:wf-ba_yrnir_cntr";a:2:{i:0;s:10:"shapado-js";i:1;R:38893;}s:15:"1226:wf-ybnqvat";a:2:{i:0;R:39383;i:1;R:38893;}s:37:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.srrq";a:2:{i:0;s:15:"shapado-layouts";i:1;R:38893;}s:47:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.arrq_gb_fvtava";a:2:{i:0;R:39386;i:1;R:38893;}s:55:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.abg_zrzore_wbva_qvnybt";a:2:{i:0;R:39386;i:1;R:38893;}s:54:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.fhpprff_wbvavat_tebhc";a:2:{i:0;R:39386;i:1;R:38893;}s:43:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.wbva_tebhc";a:2:{i:0;R:39386;i:1;R:38893;}s:38:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.gvgyr";a:2:{i:0;R:39386;i:1;R:38893;}s:42:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.dhrfgvbaf";a:2:{i:0;R:39386;i:1;R:38893;}s:45:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.dhrfgvbaf_va";a:2:{i:0;R:39386;i:1;R:38893;}s:49:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.dhrfgvbaf_gnttrq";a:2:{i:0;R:39386;i:1;R:38893;}s:45:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.nfx_dhrfgvba";a:2:{i:0;R:39386;i:1;R:38893;}s:37:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.gntf";a:2:{i:0;R:39386;i:1;R:38893;}s:38:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.hfref";a:2:{i:0;R:39386;i:1;R:38893;}s:39:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.onqtrf";a:2:{i:0;R:39386;i:1;R:38893;}s:43:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.hanafjrerq";a:2:{i:0;R:39386;i:1;R:38893;}s:38:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.cntrf";a:2:{i:0;R:39386;i:1;R:38893;}s:39:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.ybtbhg";a:2:{i:0;R:39386;i:1;R:38893;}s:39:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.ybttrq";a:2:{i:0;R:39386;i:1;R:38893;}s:39:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.frnepu";a:2:{i:0;R:39386;i:1;R:38893;}s:39:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.sbetbg";a:2:{i:0;R:39386;i:1;R:38893;}s:39:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.ybt_va";a:2:{i:0;R:39386;i:1;R:38893;}s:39:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.fvtahc";a:2:{i:0;R:39386;i:1;R:38893;}s:41:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.frggvatf";a:2:{i:0;R:39386;i:1;R:38893;}s:42:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.ynathntrf";a:2:{i:0;R:39386;i:1;R:38893;}s:41:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.zbqrengr";a:2:{i:0;R:39386;i:1;R:38893;}s:43:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.znantr_nqf";a:2:{i:0;R:39386;i:1;R:38893;}s:37:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.ubzr";a:2:{i:0;R:39386;i:1;R:38893;}s:42:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.fhofpevor";a:2:{i:0;R:39386;i:1;R:38893;}s:45:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.jrypbzr_sebz";a:2:{i:0;R:39386;i:1;R:38893;}s:36:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.abj";a:2:{i:0;R:39386;i:1;R:38893;}s:36:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.snd";a:2:{i:0;R:39386;i:1;R:38893;}s:36:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.nyy";a:2:{i:0;R:39386;i:1;R:38893;}s:41:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.sbyybjrq";a:2:{i:0;R:39386;i:1;R:38893;}s:38:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.ol_zr";a:2:{i:0;R:39386;i:1;R:38893;}s:42:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.cersreerq";a:2:{i:0;R:39386;i:1;R:38893;}s:44:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.pbagevohgrq";a:2:{i:0;R:39386;i:1;R:38893;}s:44:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.pbyynobengr";a:2:{i:0;R:39386;i:1;R:38893;}s:48:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.enaqbz_dhrfgvba";a:2:{i:0;R:39386;i:1;R:38893;}s:52:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.sbyybj_hf_naq_funer";a:2:{i:0;R:39386;i:1;R:38893;}s:52:"1226:ynlbhgf-ynlbhgf.nccyvpngvba.bcravq.rkcynvangvba";a:2:{i:0;R:39386;i:1;R:38893;}s:39:"1226:ynlbhgf-ynlbhgf.znantr.pybfr_tebhc";a:2:{i:0;R:39386;i:1;R:38893;}s:39:"1226:ynlbhgf-ynlbhgf.znantr.rqvg_ynlbhg";a:2:{i:0;R:39386;i:1;R:38893;}s:49:"1226:ynlbhgf-ynlbhgf.znantr.tebhc_hfre_znantrzrag";a:2:{i:0;R:39386;i:1;R:38893;}s:42:"1226:ynlbhgf-ynlbhgf.znantr.tebhc_srngherf";a:2:{i:0;R:39386;i:1;R:38893;}s:47:"1226:ynlbhgf-ynlbhgf.znantr.tebhc_ybbx_naq_srry";a:2:{i:0;R:39386;i:1;R:38893;}s:34:"1226:ynlbhgf-ynlbhgf.znantr.gurzrf";a:2:{i:0;R:39386;i:1;R:38893;}s:38:"1226:ynlbhgf-ynlbhgf.znantr.nccrnenapr";a:2:{i:0;R:39386;i:1;R:38893;}s:37:"1226:ynlbhgf-ynlbhgf.znantr.qnfuobneq";a:2:{i:0;R:39386;i:1;R:38893;}s:38:"1226:ynlbhgf-ynlbhgf.znantr.cebcregvrf";a:2:{i:0;R:39386;i:1;R:38893;}s:35:"1226:ynlbhgf-ynlbhgf.znantr.jvqtrgf";a:2:{i:0;R:39386;i:1;R:38893;}s:35:"1226:ynlbhgf-ynlbhgf.znantr.npgvbaf";a:2:{i:0;R:39386;i:1;R:38893;}s:33:"1226:ynlbhgf-ynlbhgf.znantr.fgngf";a:2:{i:0;R:39386;i:1;R:38893;}s:35:"1226:ynlbhgf-ynlbhgf.znantr.zrzoref";a:2:{i:0;R:39386;i:1;R:38893;}s:38:"1226:ynlbhgf-ynlbhgf.znantr.erchgngvba";a:2:{i:0;R:39386;i:1;R:38893;}s:35:"1226:ynlbhgf-ynlbhgf.znantr.pbagrag";a:2:{i:0;R:39386;i:1;R:38893;}s:33:"1226:ynlbhgf-ynlbhgf.znantr.gurzr";a:2:{i:0;R:39386;i:1;R:38893;}s:34:"1226:ynlbhgf-ynlbhgf.znantr.qbznva";a:2:{i:0;R:39386;i:1;R:38893;}s:36:"1226:ynlbhgf-ynlbhgf.znantr.vaibvprf";a:2:{i:0;R:39386;i:1;R:38893;}s:33:"1226:ynlbhgf-ynlbhgf.znantr.cntrf";a:2:{i:0;R:39386;i:1;R:38893;}s:38:"1226:ynlbhgf-ynlbhgf.znantr.pbafgenvaf";a:2:{i:0;R:39386;i:1;R:38893;}s:35:"1226:ynlbhgf-ynlbhgf.znantr.erjneqf";a:2:{i:0;R:39386;i:1;R:38893;}s:35:"1226:ynlbhgf-ynlbhgf.znantr.trareny";a:2:{i:0;R:39386;i:1;R:38893;}s:41:"1226:ynlbhgf-ynlbhgf.znantr.naabhaprzragf";a:2:{i:0;R:39386;i:1;R:38893;}s:34:"1226:ynlbhgf-ynlbhgf.znantr.fbpvny";a:2:{i:0;R:39386;i:1;R:38893;}s:39:"1226:ynlbhgf-ynlbhgf.znantr.vaivgngvbaf";a:2:{i:0;R:39386;i:1;R:38893;}s:34:"1226:ynlbhgf-ynlbhgf.znantr.npprff";a:2:{i:0;R:39386;i:1;R:38893;}s:42:"1226:ynlbhgf-ynlbhgf.abgvsvpngvbaf.zrffntr";a:2:{i:0;R:39386;i:1;R:38893;}s:59:"1226:znvyref-znvyref.abgvsvpngvbaf.arj_nafjre.fhowrpg_bjare";a:2:{i:0;s:15:"shapado-mailers";i:1;R:38893;}s:60:"1226:znvyref-znvyref.abgvsvpngvbaf.arj_nafjre.fhowrpg_sevraq";a:2:{i:0;R:39453;i:1;R:38893;}s:59:"1226:znvyref-znvyref.abgvsvpngvbaf.arj_nafjre.fhowrpg_bgure";a:2:{i:0;R:39453;i:1;R:38893;}s:54:"1226:znvyref-znvyref.abgvsvpngvbaf.arj_pbzzrag.fhowrpg";a:2:{i:0;R:39453;i:1;R:38893;}s:54:"1226:znvyref-znvyref.abgvsvpngvbaf.tvir_nqivpr.fhowrpg";a:2:{i:0;R:39453;i:1;R:38893;}s:61:"1226:znvyref-znvyref.abgvsvpngvbaf.tvir_nqivpr.sevraq_fhowrpg";a:2:{i:0;R:39453;i:1;R:38893;}s:49:"1226:znvyref-znvyref.abgvsvpngvbaf.sbyybj.fhowrpg";a:2:{i:0;R:39453;i:1;R:38893;}s:55:"1226:znvyref-znvyref.abgvsvpngvbaf.rnearq_onqtr.fhowrpg";a:2:{i:0;R:39453;i:1;R:38893;}s:52:"1226:znvyref-znvyref.abgvsvpngvbaf.snibevgrq.fhowrpg";a:2:{i:0;R:39453;i:1;R:38893;}s:49:"1226:znvyref-znvyref.abgvsvpngvbaf.ercbeg.fhowrpg";a:2:{i:0;R:39453;i:1;R:38893;}s:55:"1226:znvyref-znvyref.abgvsvpngvbaf.perngrq_synt.fhowrpg";a:2:{i:0;R:39453;i:1;R:38893;}s:57:"1226:znvyref-znvyref.abgvsvpngvbaf.arj_vaivgngvba.fhowrpg";a:2:{i:0;R:39453;i:1;R:38893;}s:48:"1226:znantr-nqzva.znantr.pybfr_tebhc.qrfpevcgvba";a:2:{i:0;s:14:"shapado-manage";i:1;R:38893;}s:45:"1226:znantr-nqzva.znantr.pybfr_tebhc.srrqonpx";a:2:{i:0;R:39466;i:1;R:38893;}s:48:"1226:znantr-nqzva.znantr.dhrfgvbaf.onaavat.gvgyr";a:2:{i:0;R:39466;i:1;R:38893;}s:46:"1226:znantr-nqzva.znantr.nafjref.onaavat.gvgyr";a:2:{i:0;R:39466;i:1;R:38893;}s:40:"1226:znantr-nqzva.znantr.gbc_nqzva.gvgyr";a:2:{i:0;R:39466;i:1;R:38893;}s:39:"1226:znantr-nqzva.znantr.gbc_nqzva.fvgr";a:2:{i:0;R:39466;i:1;R:38893;}s:37:"1226:znantr-nqzva.znantr.npprff.gvgyr";a:2:{i:0;R:39466;i:1;R:38893;}s:42:"1226:znantr-nqzva.znantr.vaivgngvbaf.gvgyr";a:2:{i:0;R:39466;i:1;R:38893;}s:43:"1226:znantr-nqzva.znantr.vaivgngvbaf.vaivgr";a:2:{i:0;R:39466;i:1;R:38893;}s:48:"1226:znantr-nqzva.znantr.vaivgngvbaf.vaivgngvbaf";a:2:{i:0;R:39466;i:1;R:38893;}s:49:"1226:znantr-nqzva.znantr.vaivgngvbaf.vaivgr_gvgyr";a:2:{i:0;R:39466;i:1;R:38893;}s:54:"1226:znantr-nqzva.znantr.vaivgngvbaf.vaivgngvbaf_gvgyr";a:2:{i:0;R:39466;i:1;R:38893;}s:37:"1226:znantr-nqzva.znantr.fbpvny.gvgyr";a:2:{i:0;R:39466;i:1;R:38893;}s:43:"1226:znantr-nqzva.znantr.fbpvny.qrfpevcgvba";a:2:{i:0;R:39466;i:1;R:38893;}s:47:"1226:znantr-nqzva.znantr.fbpvny.cbfg_gb_gjvggre";a:2:{i:0;R:39466;i:1;R:38893;}s:48:"1226:znantr-nqzva.znantr.fbpvny.nfx_sebz_gjvggre";a:2:{i:0;R:39466;i:1;R:38893;}s:44:"1226:znantr-nqzva.znantr.fbpvny.snprobbx_ncc";a:2:{i:0;R:39466;i:1;R:38893;}s:47:"1226:znantr-nqzva.znantr.fbpvny.gjvggre_nppbhag";a:2:{i:0;R:39466;i:1;R:38893;}s:47:"1226:znantr-nqzva.znantr.fbpvny.gnt_lbhe_gjrrgf";a:2:{i:0;R:39466;i:1;R:38893;}s:53:"1226:znantr-nqzva.znantr.fbpvny.gnt_lbhe_gjrrgf_gvgyr";a:2:{i:0;R:39466;i:1;R:38893;}s:53:"1226:znantr-nqzva.znantr.fbpvny.cbfg_gb_gjvggre_gvgyr";a:2:{i:0;R:39466;i:1;R:38893;}s:54:"1226:znantr-nqzva.znantr.fbpvny.nfx_sebz_gjvggre_gvgyr";a:2:{i:0;R:39466;i:1;R:38893;}s:50:"1226:znantr-nqzva.znantr.fbpvny.snprobbx_ncc_gvgyr";a:2:{i:0;R:39466;i:1;R:38893;}s:53:"1226:znantr-nqzva.znantr.fbpvny.gjvggre_nppbhag_gvgyr";a:2:{i:0;R:39466;i:1;R:38893;}s:38:"1226:znantr-nqzva.znantr.pbagrag.gvgyr";a:2:{i:0;R:39466;i:1;R:38893;}s:44:"1226:znantr-nqzva.znantr.pbagrag.qrfpevcgvba";a:2:{i:0;R:39466;i:1;R:38893;}s:48:"1226:znantr-nqzva.znantr.pbagrag.dhrfgvba_cebzcg";a:2:{i:0;R:39466;i:1;R:38893;}s:46:"1226:znantr-nqzva.znantr.pbagrag.dhrfgvba_uryc";a:2:{i:0;R:39466;i:1;R:38893;}s:37:"1226:znantr-nqzva.znantr.pbagrag.urnq";a:2:{i:0;R:39466;i:1;R:38893;}s:39:"1226:znantr-nqzva.znantr.pbagrag.sbbgre";a:2:{i:0;R:39466;i:1;R:38893;}s:40:"1226:znantr-nqzva.znantr.pbagrag.gbc_one";a:2:{i:0;R:39466;i:1;R:38893;}s:44:"1226:znantr-nqzva.znantr.pbagrag.gbc_one_gvc";a:2:{i:0;R:39466;i:1;R:38893;}s:41:"1226:znantr-nqzva.znantr.nccrnenapr.gvgyr";a:2:{i:0;R:39466;i:1;R:38893;}s:47:"1226:znantr-nqzva.znantr.nccrnenapr.ybtb_yrtraq";a:2:{i:0;R:39466;i:1;R:38893;}s:41:"1226:znantr-nqzva.znantr.cebcregvrf.gvgyr";a:2:{i:0;R:39466;i:1;R:38893;}s:48:"1226:znantr-nqzva.znantr.cebcregvrf.vaivgr.gvgyr";a:2:{i:0;R:39466;i:1;R:38893;}s:60:"1226:znantr-nqzva.znantr.cebcregvrf.vaivgr.obql_vafgehpgvbaf";a:2:{i:0;R:39466;i:1;R:38893;}s:62:"1226:znantr-nqzva.znantr.cebcregvrf.vaivgr.obql_yratgu_jneavat";a:2:{i:0;R:39466;i:1;R:38893;}s:62:"1226:znantr-nqzva.znantr.cebcregvrf.vaivgr.rznvyf_vafgehpgvbaf";a:2:{i:0;R:39466;i:1;R:38893;}s:52:"1226:znantr-nqzva.znantr.cebcregvrf.vaivgr.hfre_ebyr";a:2:{i:0;R:39466;i:1;R:38893;}s:49:"1226:znantr-nqzva.znantr.cebcregvrf.vaivgr.vaivgr";a:2:{i:0;R:39466;i:1;R:38893;}s:54:"1226:znantr-nqzva.znantr.cebcregvrf.vaivgr.vaivgngvbaf";a:2:{i:0;R:39466;i:1;R:38893;}s:61:"1226:znantr-nqzva.znantr.cebcregvrf.vaivgngvbaf.eribxr_ohggba";a:2:{i:0;R:39466;i:1;R:38893;}s:61:"1226:znantr-nqzva.znantr.cebcregvrf.vaivgngvbaf.erfraq_ohggba";a:2:{i:0;R:39466;i:1;R:38893;}s:67:"1226:znantr-nqzva.znantr.cebcregvrf.cbfg_gb_gjvggre.cbfg_gb_gjvggre";a:2:{i:0;R:39466;i:1;R:38893;}s:77:"1226:znantr-nqzva.znantr.cebcregvrf.cbfg_gb_gjvggre.fraq_dhrfgvbaf_gb_gjvggre";a:2:{i:0;R:39466;i:1;R:38893;}s:74:"1226:znantr-nqzva.znantr.cebcregvrf.cbfg_gb_gjvggre.fraq_onqtrf_gb_gjvggre";a:2:{i:0;R:39466;i:1;R:38893;}s:77:"1226:znantr-nqzva.znantr.cebcregvrf.cbfg_gb_gjvggre.fraq_snibevgrf_gb_gjvggre";a:2:{i:0;R:39466;i:1;R:38893;}s:75:"1226:znantr-nqzva.znantr.cebcregvrf.cbfg_gb_gjvggre.fraq_nafjref_gb_gjvggre";a:2:{i:0;R:39466;i:1;R:38893;}s:76:"1226:znantr-nqzva.znantr.cebcregvrf.cbfg_gb_gjvggre.fraq_pbzzragf_gb_gjvggre";a:2:{i:0;R:39466;i:1;R:38893;}s:58:"1226:znantr-nqzva.znantr.cebcregvrf.cbfg_gb_gjvggre.yrtraq";a:2:{i:0;R:39466;i:1;R:38893;}s:66:"1226:znantr-nqzva.znantr.cebcregvrf.cbfg_gb_gjvggre.yrtraq_pbaarpg";a:2:{i:0;R:39466;i:1;R:38893;}s:69:"1226:znantr-nqzva.znantr.cebcregvrf.gnt_lbhe_gjrrgf.gjrrg_fgnegf_jvgu";a:2:{i:0;R:39466;i:1;R:38893;}s:67:"1226:znantr-nqzva.znantr.cebcregvrf.gnt_lbhe_gjrrgf.gjrrg_raqf_jvgu";a:2:{i:0;R:39466;i:1;R:38893;}s:71:"1226:znantr-nqzva.znantr.cebcregvrf.gnt_lbhe_gjrrgf.fgnegf_jvgu_rknzcyr";a:2:{i:0;R:39466;i:1;R:38893;}s:69:"1226:znantr-nqzva.znantr.cebcregvrf.gnt_lbhe_gjrrgf.raqf_jvgu_rknzcyr";a:2:{i:0;R:39466;i:1;R:38893;}s:60:"1226:znantr-nqzva.znantr.cebcregvrf.gnt_lbhe_gjrrgf.nqq_gntf";a:2:{i:0;R:39466;i:1;R:38893;}s:57:"1226:znantr-nqzva.znantr.cebcregvrf.gnt_lbhe_gjrrgf.gvgyr";a:2:{i:0;R:39466;i:1;R:38893;}s:72:"1226:znantr-nqzva.znantr.cebcregvrf.nfx_sebz_gjvggre.nfxvat_sebz_gjvggre";a:2:{i:0;R:39466;i:1;R:38893;}s:74:"1226:znantr-nqzva.znantr.cebcregvrf.nfx_sebz_gjvggre.dhrfgvba_zhfg_vapyhqr";a:2:{i:0;R:39466;i:1;R:38893;}s:68:"1226:znantr-nqzva.znantr.cebcregvrf.nfx_sebz_gjvggre.gjvggre_nppbhag";a:2:{i:0;R:39466;i:1;R:38893;}s:70:"1226:znantr-nqzva.znantr.cebcregvrf.nfx_sebz_gjvggre.dhrfgvba_nfxrq_gb";a:2:{i:0;R:39466;i:1;R:38893;}s:82:"1226:znantr-nqzva.znantr.cebcregvrf.nfx_sebz_gjvggre.dhrfgvba_zhfg_vapyhqr_rknzcyr";a:2:{i:0;R:39466;i:1;R:38893;}s:55:"1226:znantr-nqzva.znantr.cebcregvrf.snprobbx_ncc.yrtraq";a:2:{i:0;R:39466;i:1;R:38893;}s:63:"1226:znantr-nqzva.znantr.cebcregvrf.snprobbx_ncc.nccyvpngvba_vq";a:2:{i:0;R:39466;i:1;R:38893;}s:59:"1226:znantr-nqzva.znantr.cebcregvrf.snprobbx_ncc.frperg_xrl";a:2:{i:0;R:39466;i:1;R:38893;}s:61:"1226:znantr-nqzva.znantr.cebcregvrf.snprobbx_ncc.snprobbx_ncc";a:2:{i:0;R:39466;i:1;R:38893;}s:59:"1226:znantr-nqzva.znantr.cebcregvrf.gjvggre_ncc.gjvggre_ncc";a:2:{i:0;R:39466;i:1;R:38893;}s:51:"1226:znantr-nqzva.znantr.cebcregvrf.gjvggre_ncc.xrl";a:2:{i:0;R:39466;i:1;R:38893;}s:54:"1226:znantr-nqzva.znantr.cebcregvrf.gjvggre_ncc.frperg";a:2:{i:0;R:39466;i:1;R:38893;}s:67:"1226:znantr-nqzva.znantr.cebcregvrf.gjvggre_nppbhag.gjvggre_nppbhag";a:2:{i:0;R:39466;i:1;R:38893;}s:76:"1226:znantr-nqzva.znantr.cebcregvrf.gjvggre_nppbhag.pbaarpg_gb_bgure_gjvggre";a:2:{i:0;R:39466;i:1;R:38893;}s:71:"1226:znantr-nqzva.znantr.cebcregvrf.gjvggre_nppbhag.yrtraq_jvgu_nppbhag";a:2:{i:0;R:39466;i:1;R:38893;}s:76:"1226:znantr-nqzva.znantr.cebcregvrf.gjvggre_nppbhag.qvfpbaarpg_gjvggre_tebhc";a:2:{i:0;R:39466;i:1;R:38893;}s:70:"1226:znantr-nqzva.znantr.cebcregvrf.gjvggre_nppbhag.pbaarpg_gb_gjvggre";a:2:{i:0;R:39466;i:1;R:38893;}s:58:"1226:znantr-nqzva.znantr.cebcregvrf.gjvggre_nppbhag.yrtraq";a:2:{i:0;R:39466;i:1;R:38893;}s:49:"1226:znantr-nqzva.znantr.cebcregvrf.trareny.gvgyr";a:2:{i:0;R:39466;i:1;R:38893;}s:47:"1226:znantr-nqzva.znantr.cebcregvrf.funer.gvgyr";a:2:{i:0;R:39466;i:1;R:38893;}s:52:"1226:znantr-nqzva.znantr.cebcregvrf.pbafgenvaf.gvgyr";a:2:{i:0;R:39466;i:1;R:38893;}s:77:"1226:znantr-nqzva.znantr.cebcregvrf.pbafgenvaf.erchgngvba_pbafgenvaf_fhogvgyr";a:2:{i:0;R:39466;i:1;R:38893;}s:80:"1226:znantr-nqzva.znantr.cebcregvrf.pbafgenvaf.erchgngvba_pbafgenvaf_qrfpevcgvba";a:2:{i:0;R:39466;i:1;R:38893;}s:49:"1226:znantr-nqzva.znantr.cebcregvrf.erjneqf.gvgyr";a:2:{i:0;R:39466;i:1;R:38893;}s:71:"1226:znantr-nqzva.znantr.cebcregvrf.erjneqf.erchgngvba_erjneqf_fhogvgyr";a:2:{i:0;R:39466;i:1;R:38893;}s:74:"1226:znantr-nqzva.znantr.cebcregvrf.erjneqf.erchgngvba_erjneqf_qrfpevcgvba";a:2:{i:0;R:39466;i:1;R:38893;}s:48:"1226:znantr-nqzva.znantr.cebcregvrf.qbznva.gvgyr";a:2:{i:0;R:39466;i:1;R:38893;}s:54:"1226:znantr-nqzva.znantr.cebcregvrf.qbznva.qrfpevcgvba";a:2:{i:0;R:39466;i:1;R:38893;}s:55:"1226:znantr-nqzva.znantr.cebcregvrf.qbznva.vafgehpgvba1";a:2:{i:0;R:39466;i:1;R:38893;}s:55:"1226:znantr-nqzva.znantr.cebcregvrf.qbznva.vafgehpgvba2";a:2:{i:0;R:39466;i:1;R:38893;}s:55:"1226:znantr-nqzva.znantr.cebcregvrf.qbznva.vafgehpgvba3";a:2:{i:0;R:39466;i:1;R:38893;}s:55:"1226:znantr-nqzva.znantr.cebcregvrf.qbznva.vafgehpgvba4";a:2:{i:0;R:39466;i:1;R:38893;}s:55:"1226:znantr-nqzva.znantr.cebcregvrf.qbznva.vafgehpgvba5";a:2:{i:0;R:39466;i:1;R:38893;}s:55:"1226:znantr-nqzva.znantr.cebcregvrf.qbznva.vafgehpgvba6";a:2:{i:0;R:39466;i:1;R:38893;}s:50:"1226:znantr-nqzva.znantr.cebcregvrf.qbznva.jneavat";a:2:{i:0;R:39466;i:1;R:38893;}s:48:"1226:zrzoref-npgvirerpbeq.nggevohgrf.zrzore.ebyr";a:2:{i:0;s:15:"shapado-members";i:1;R:38893;}s:32:"1226:zrzoref-zrzoref.vaqrk.gvgyr";a:2:{i:0;R:39560;i:1;R:38893;}s:40:"1226:zrzoref-zrzoref.vaqrk.gvgyr_vfbyngr";a:2:{i:0;R:39560;i:1;R:38893;}s:47:"1226:zrzoref-zrzoref.vaqrk.znantr_zrzoref_gvgyr";a:2:{i:0;R:39560;i:1;R:38893;}s:35:"1226:zrzoref-zrzoref.sbez.ybtva_gvc";a:2:{i:0;R:39560;i:1;R:38893;}s:41:"1226:zrzoref-zrzoref.sbez.qrfgebl_pbasvez";a:2:{i:0;R:39560;i:1;R:38893;}s:34:"1226:zrzoref-zrzoref.perngr.abgvpr";a:2:{i:0;R:39560;i:1;R:38893;}s:33:"1226:zrzoref-zrzoref.perngr.reebe";a:2:{i:0;R:39560;i:1;R:38893;}s:33:"1226:zrzoref-zrzoref.hcqngr.reebe";a:2:{i:0;R:39560;i:1;R:38893;}s:44:"1226:zbqrengr-zbqrengr.dhrfgvbaf.vaqrk.gvgyr";a:2:{i:0;s:16:"shapado-moderate";i:1;R:38893;}s:46:"1226:zbqrengr-zbqrengr.dhrfgvbaf.synttrq.gvgyr";a:2:{i:0;R:39570;i:1;R:38893;}s:48:"1226:zbqrengr-zbqrengr.dhrfgvbaf.synttrq.svygref";a:2:{i:0;R:39570;i:1;R:38893;}s:49:"1226:zbqrengr-zbqrengr.dhrfgvbaf.synttrq.haonaarq";a:2:{i:0;R:39570;i:1;R:38893;}s:57:"1226:zbqrengr-zbqrengr.dhrfgvbaf.synttrq.haonaarq_gbbygvc";a:2:{i:0;R:39570;i:1;R:38893;}s:47:"1226:zbqrengr-zbqrengr.dhrfgvbaf.synttrq.onaarq";a:2:{i:0;R:39570;i:1;R:38893;}s:55:"1226:zbqrengr-zbqrengr.dhrfgvbaf.synttrq.onaarq_gbbygvc";a:2:{i:0;R:39570;i:1;R:38893;}s:46:"1226:zbqrengr-zbqrengr.dhrfgvbaf.fhognof.ergnt";a:2:{i:0;R:39570;i:1;R:38893;}s:54:"1226:zbqrengr-zbqrengr.dhrfgvbaf.fhognof.ergnt_gbbygvc";a:2:{i:0;R:39570;i:1;R:38893;}s:48:"1226:zbqrengr-zbqrengr.dhrfgvbaf.fhognof.synttrq";a:2:{i:0;R:39570;i:1;R:38893;}s:56:"1226:zbqrengr-zbqrengr.dhrfgvbaf.fhognof.synttrq_gbbygvc";a:2:{i:0;R:39570;i:1;R:38893;}s:49:"1226:zbqrengr-zbqrengr.dhrfgvbaf.fhognof.gb_pybfr";a:2:{i:0;R:39570;i:1;R:38893;}s:57:"1226:zbqrengr-zbqrengr.dhrfgvbaf.fhognof.gb_pybfr_gbbygvc";a:2:{i:0;R:39570;i:1;R:38893;}s:48:"1226:zbqrengr-zbqrengr.dhrfgvbaf.fhognof.gb_bcra";a:2:{i:0;R:39570;i:1;R:38893;}s:56:"1226:zbqrengr-zbqrengr.dhrfgvbaf.fhognof.gb_bcra_gbbygvc";a:2:{i:0;R:39570;i:1;R:38893;}s:40:"1226:zbqrengr-nqzva.zbqrengr.vaqrk.gvgyr";a:2:{i:0;R:39570;i:1;R:38893;}s:38:"1226:zbqrengr-nqzva.zbqrengr.vaqrk.ona";a:2:{i:0;R:39570;i:1;R:38893;}s:42:"1226:zbqrengr-nqzva.zbqrengr.vaqrk.pbagrag";a:2:{i:0;R:39570;i:1;R:38893;}s:45:"1226:zbqrengr-nqzva.zbqrengr.vaqrk.vgrz_gvgyr";a:2:{i:0;R:39570;i:1;R:38893;}s:38:"1226:zbqrengr-nqzva.zbqrengr.vaqrk.nyy";a:2:{i:0;R:39570;i:1;R:38893;}s:42:"1226:zbqrengr-nqzva.zbqrengr.vaqrk.synttrq";a:2:{i:0;R:39570;i:1;R:38893;}s:41:"1226:zbqrengr-nqzva.zbqrengr.vaqrk.onaarq";a:2:{i:0;R:39570;i:1;R:38893;}s:44:"1226:zbqrengr-nqzva.zbqrengr.vaqrk.arrq_gntf";a:2:{i:0;R:39570;i:1;R:38893;}s:42:"1226:zbqrengr-nqzva.zbqrengr.bcravat.gvgyr";a:2:{i:0;R:39570;i:1;R:38893;}s:42:"1226:zbqrengr-nqzva.zbqrengr.pybfvat.gvgyr";a:2:{i:0;R:39570;i:1;R:38893;}s:32:"1226:abgvsvre-abgvsvre.tybony.uv";a:2:{i:0;s:16:"shapado-notifier";i:1;R:38893;}s:40:"1226:abgvsvre-abgvsvre.tybony.uv_ab_hfre";a:2:{i:0;R:39596;i:1;R:38893;}s:39:"1226:abgvsvre-abgvsvre.tybony.hfre_cntr";a:2:{i:0;R:39596;i:1;R:38893;}s:41:"1226:abgvsvre-abgvsvre.snibevgrq.zrffntr1";a:2:{i:0;R:39596;i:1;R:38893;}s:41:"1226:abgvsvre-abgvsvre.snibevgrq.zrffntr2";a:2:{i:0;R:39596;i:1;R:38893;}s:41:"1226:abgvsvre-abgvsvre.snibevgrq.zrffntr3";a:2:{i:0;R:39596;i:1;R:38893;}s:44:"1226:abgvsvre-abgvsvre.rnearq_onqtr.zrffntr1";a:2:{i:0;R:39596;i:1;R:38893;}s:44:"1226:abgvsvre-abgvsvre.rnearq_onqtr.zrffntr2";a:2:{i:0;R:39596;i:1;R:38893;}s:44:"1226:abgvsvre-abgvsvre.rnearq_onqtr.zrffntr3";a:2:{i:0;R:39596;i:1;R:38893;}s:44:"1226:abgvsvre-abgvsvre.perngrq_synt.zrffntr1";a:2:{i:0;R:39596;i:1;R:38893;}s:44:"1226:abgvsvre-abgvsvre.perngrq_synt.zrffntr2";a:2:{i:0;R:39596;i:1;R:38893;}s:47:"1226:abgvsvre-abgvsvre.perngrq_synt.zrffntr2ovf";a:2:{i:0;R:39596;i:1;R:38893;}s:51:"1226:abgvsvre-abgvsvre.perngrq_synt.zrffntr2ovfgrkg";a:2:{i:0;R:39596;i:1;R:38893;}s:44:"1226:abgvsvre-abgvsvre.perngrq_synt.zrffntr3";a:2:{i:0;R:39596;i:1;R:38893;}s:44:"1226:abgvsvre-abgvsvre.perngrq_synt.zrffntr4";a:2:{i:0;R:39596;i:1;R:38893;}s:38:"1226:abgvsvre-abgvsvre.sbyybj.zrffntr1";a:2:{i:0;R:39596;i:1;R:38893;}s:38:"1226:abgvsvre-abgvsvre.sbyybj.zrffntr2";a:2:{i:0;R:39596;i:1;R:38893;}s:43:"1226:abgvsvre-abgvsvre.tvir_nqivpr.zrffntr1";a:2:{i:0;R:39596;i:1;R:38893;}s:43:"1226:abgvsvre-abgvsvre.tvir_nqivpr.zrffntr2";a:2:{i:0;R:39596;i:1;R:38893;}s:43:"1226:abgvsvre-abgvsvre.tvir_nqivpr.zrffntr3";a:2:{i:0;R:39596;i:1;R:38893;}s:43:"1226:abgvsvre-abgvsvre.tvir_nqivpr.zrffntr4";a:2:{i:0;R:39596;i:1;R:38893;}s:41:"1226:abgvsvre-abgvsvre.arj_nafjre.zrffntr";a:2:{i:0;R:39596;i:1;R:38893;}s:42:"1226:abgvsvre-abgvsvre.arj_pbzzrag.zrffntr";a:2:{i:0;R:39596;i:1;R:38893;}s:44:"1226:abgvsvre-abgvsvre.arj_srrqonpx.zrffntr1";a:2:{i:0;R:39596;i:1;R:38893;}s:44:"1226:abgvsvre-abgvsvre.arj_srrqonpx.zrffntr2";a:2:{i:0;R:39596;i:1;R:38893;}s:44:"1226:abgvsvre-abgvsvre.arj_srrqonpx.zrffntr3";a:2:{i:0;R:39596;i:1;R:38893;}s:44:"1226:abgvsvre-abgvsvre.arj_srrqonpx.zrffntr4";a:2:{i:0;R:39596;i:1;R:38893;}s:38:"1226:abgvsvre-abgvsvre.ercbeg.zrffntr1";a:2:{i:0;R:39596;i:1;R:38893;}s:38:"1226:abgvsvre-abgvsvre.ercbeg.zrffntr2";a:2:{i:0;R:39596;i:1;R:38893;}s:38:"1226:abgvsvre-abgvsvre.ercbeg.zrffntr3";a:2:{i:0;R:39596;i:1;R:38893;}s:38:"1226:abgvsvre-abgvsvre.ercbeg.zrffntr4";a:2:{i:0;R:39596;i:1;R:38893;}s:38:"1226:abgvsvre-abgvsvre.ercbeg.zrffntr5";a:2:{i:0;R:39596;i:1;R:38893;}s:38:"1226:abgvsvre-abgvsvre.ercbeg.zrffntr6";a:2:{i:0;R:39596;i:1;R:38893;}s:38:"1226:abgvsvre-abgvsvre.ercbeg.zrffntr7";a:2:{i:0;R:39596;i:1;R:38893;}s:38:"1226:abgvsvre-abgvsvre.ercbeg.zrffntr8";a:2:{i:0;R:39596;i:1;R:38893;}s:42:"1226:abgvsvre-abgvsvre.nqzva_ybtva.fhowrpg";a:2:{i:0;R:39596;i:1;R:38893;}s:43:"1226:abgvsvre-abgvsvre.nqzva_ybtva.zrffntr1";a:2:{i:0;R:39596;i:1;R:38893;}s:45:"1226:abgvsvre-abgvsvre.arj_vaivgngvba.fhowrpg";a:2:{i:0;R:39596;i:1;R:38893;}s:46:"1226:abgvsvre-abgvsvre.arj_vaivgngvba.zrffntr1";a:2:{i:0;R:39596;i:1;R:38893;}s:46:"1226:abgvsvre-abgvsvre.arj_vaivgngvba.zrffntr2";a:2:{i:0;R:39596;i:1;R:38893;}s:46:"1226:abgvsvre-abgvsvre.arj_vaivgngvba.zrffntr3";a:2:{i:0;R:39596;i:1;R:38893;}s:43:"1226:bcraerdhrfgf-bcra_erdhrfgf.vaqrk.gvgyr";a:2:{i:0;s:20:"shapado-openrequests";i:1;R:38893;}s:60:"1226:bcraerdhrfgf-bcra_erdhrfgf.sbez.erdhrfg_bcravat_qrgnvyf";a:2:{i:0;R:39638;i:1;R:38893;}s:41:"1226:bcraerdhrfgf-bcra_erdhrfgf.arj.gvgyr";a:2:{i:0;R:39638;i:1;R:38893;}s:42:"1226:bcraerdhrfgf-bcra_erdhrfgf.rqvg.gvgyr";a:2:{i:0;R:39638;i:1;R:38893;}s:51:"1226:bcraerdhrfgf-bcra_erdhrfgf.perngr.synfu_abgvpr";a:2:{i:0;R:39638;i:1;R:38893;}s:51:"1226:bcraerdhrfgf-bcra_erdhrfgf.hcqngr.synfu_abgvpr";a:2:{i:0;R:39638;i:1;R:38893;}s:52:"1226:bcraerdhrfgf-bcra_erdhrfgf.qrfgebl.synfu_abgvpr";a:2:{i:0;R:39638;i:1;R:38893;}s:49:"1226:bcraerdhrfgf-bcra_erdhrfgf.zbqry.ceheny_anzr";a:2:{i:0;R:39638;i:1;R:38893;}s:22:"1226:cntrf-cntrf.gvgyr";a:2:{i:0;s:13:"shapado-pages";i:1;R:38893;}s:34:"1226:cntrf-cntrf.vaqrk.perngr_cntr";a:2:{i:0;R:39647;i:1;R:38893;}s:28:"1226:cntrf-cntrf.vaqrk.gvgyr";a:2:{i:0;R:39647;i:1;R:38893;}s:27:"1226:cntrf-cntrf.vaqrk.jvxv";a:2:{i:0;R:39647;i:1;R:38893;}s:33:"1226:cntrf-cntrf.vaqrk.jvxv_cntrf";a:2:{i:0;R:39647;i:1;R:38893;}s:33:"1226:cntrf-cntrf.vaqrk.jevggra_va";a:2:{i:0;R:39647;i:1;R:38893;}s:27:"1226:cntrf-cntrf.rqvg.gvgyr";a:2:{i:0;R:39647;i:1;R:38893;}s:31:"1226:cntrf-cntrf.perngr.fhpprff";a:2:{i:0;R:39647;i:1;R:38893;}s:31:"1226:cntrf-cntrf.hcqngr.fhpprff";a:2:{i:0;R:39647;i:1;R:38893;}s:26:"1226:cntrf-cntrf.arj.gvgyr";a:2:{i:0;R:39647;i:1;R:38893;}s:31:"1226:cntrf-cntrf.sbez.gvgyr_gvc";a:2:{i:0;R:39647;i:1;R:38893;}s:34:"1226:cntrf-cntrf.sbez.ynathntr_gvc";a:2:{i:0;R:39647;i:1;R:38893;}s:30:"1226:cntrf-cntrf.npgvbaf.gvgyr";a:2:{i:0;R:39647;i:1;R:38893;}s:36:"1226:cntrf-cntrf.npgvbaf.perngr_cntr";a:2:{i:0;R:39647;i:1;R:38893;}s:34:"1226:cntrf-cntrf.npgvbaf.rqvg_cntr";a:2:{i:0;R:39647;i:1;R:38893;}s:35:"1226:cntrf-npgvirerpbeq.zbqryf.cntr";a:2:{i:0;R:39647;i:1;R:38893;}s:36:"1226:cntrf-npgvirerpbeq.zbqryf.cntrf";a:2:{i:0;R:39647;i:1;R:38893;}s:42:"1226:cntrf-npgvirerpbeq.nggevohgrf.cntr.wf";a:2:{i:0;R:39647;i:1;R:38893;}s:43:"1226:cntrf-npgvirerpbeq.nggevohgrf.cntr.pff";a:2:{i:0;R:39647;i:1;R:38893;}s:41:"1226:dhrfgvbaf-dhrfgvbaf.gbbyone.erdhrfgf";a:2:{i:0;s:17:"shapado-questions";i:1;R:38893;}s:51:"1226:dhrfgvbaf-dhrfgvbaf.gbbyone.lbhe_pybfr_erdhrfg";a:2:{i:0;R:39667;i:1;R:38893;}s:47:"1226:dhrfgvbaf-dhrfgvbaf.gbbyone.nafjre_ol_znvy";a:2:{i:0;R:39667;i:1;R:38893;}s:45:"1226:dhrfgvbaf-dhrfgvbaf.gbbyone.zber_npgvbaf";a:2:{i:0;R:39667;i:1;R:38893;}s:54:"1226:dhrfgvbaf-dhrfgvbaf.nafjre_gbbyone.synttrq_ol_lbh";a:2:{i:0;R:39667;i:1;R:38893;}s:44:"1226:dhrfgvbaf-dhrfgvbaf.qvfnyybj_fcnz.reebe";a:2:{i:0;R:39667;i:1;R:38893;}s:37:"1226:dhrfgvbaf-dhrfgvbaf.uvfgbel.onpx";a:2:{i:0;R:39667;i:1;R:38893;}s:36:"1226:dhrfgvbaf-dhrfgvbaf.vaqrk.gvgyr";a:2:{i:0;R:39667;i:1;R:38893;}s:34:"1226:dhrfgvbaf-dhrfgvbaf.vaqrk.ubg";a:2:{i:0;R:39667;i:1;R:38893;}s:37:"1226:dhrfgvbaf-dhrfgvbaf.vaqrk.npgvir";a:2:{i:0;R:39667;i:1;R:38893;}s:36:"1226:dhrfgvbaf-dhrfgvbaf.vaqrk.ibgrf";a:2:{i:0;R:39667;i:1;R:38893;}s:37:"1226:dhrfgvbaf-dhrfgvbaf.vaqrk.arjrfg";a:2:{i:0;R:39667;i:1;R:38893;}s:37:"1226:dhrfgvbaf-dhrfgvbaf.vaqrk.byqrfg";a:2:{i:0;R:39667;i:1;R:38893;}s:43:"1226:dhrfgvbaf-dhrfgvbaf.vaqrk.nfx_dhrfgvba";a:2:{i:0;R:39667;i:1;R:38893;}s:36:"1226:dhrfgvbaf-dhrfgvbaf.vaqrk.rzcgl";a:2:{i:0;R:39667;i:1;R:38893;}s:45:"1226:dhrfgvbaf-dhrfgvbaf.vaqrk.uryc_gb_nafjre";a:2:{i:0;R:39667;i:1;R:38893;}s:51:"1226:dhrfgvbaf-dhrfgvbaf.vaqrk.hanafjrerq_dhrfgvbaf";a:2:{i:0;R:39667;i:1;R:38893;}s:42:"1226:dhrfgvbaf-dhrfgvbaf.vaqrk.ubg_gbbygvc";a:2:{i:0;R:39667;i:1;R:38893;}s:45:"1226:dhrfgvbaf-dhrfgvbaf.vaqrk.npgvir_gbbygvc";a:2:{i:0;R:39667;i:1;R:38893;}s:48:"1226:dhrfgvbaf-dhrfgvbaf.vaqrk.sbyybjref_gbbygvc";a:2:{i:0;R:39667;i:1;R:38893;}s:45:"1226:dhrfgvbaf-dhrfgvbaf.vaqrk.arjrfg_gbbygvc";a:2:{i:0;R:39667;i:1;R:38893;}s:44:"1226:dhrfgvbaf-dhrfgvbaf.vaqrk.unf_sbyybjref";a:2:{i:0;R:39667;i:1;R:38893;}s:37:"1226:dhrfgvbaf-dhrfgvbaf.fubj.uvfgbel";a:2:{i:0;R:39667;i:1;R:38893;}s:43:"1226:dhrfgvbaf-dhrfgvbaf.fubj.perngr_erjneq";a:2:{i:0;R:39667;i:1;R:38893;}s:55:"1226:dhrfgvbaf-dhrfgvbaf.fubj.perngr_erjneq_qrfpevcgvba";a:2:{i:0;R:39667;i:1;R:38893;}s:39:"1226:dhrfgvbaf-dhrfgvbaf.fubj.sbyybj_hc";a:2:{i:0;R:39667;i:1;R:38893;}s:51:"1226:dhrfgvbaf-dhrfgvbaf.fubj.sbyybj_hc_qrfpevcgvba";a:2:{i:0;R:39667;i:1;R:38893;}s:42:"1226:dhrfgvbaf-dhrfgvbaf.fubj.zber_npgvbaf";a:2:{i:0;R:39667;i:1;R:38893;}s:37:"1226:dhrfgvbaf-dhrfgvbaf.fubj.nafjref";a:2:{i:0;R:39667;i:1;R:38893;}s:45:"1226:dhrfgvbaf-dhrfgvbaf.fubj.nabgure_nafjref";a:2:{i:0;R:39667;i:1;R:38893;}s:38:"1226:dhrfgvbaf-dhrfgvbaf.fubj.fbyhgvba";a:2:{i:0;R:39667;i:1;R:38893;}s:35:"1226:dhrfgvbaf-dhrfgvbaf.fubj.funer";a:2:{i:0;R:39667;i:1;R:38893;}s:38:"1226:dhrfgvbaf-dhrfgvbaf.fubj.funer_ba";a:2:{i:0;R:39667;i:1;R:38893;}s:47:"1226:dhrfgvbaf-dhrfgvbaf.fubj.eryngrq_dhrfgvbaf";a:2:{i:0;R:39667;i:1;R:38893;}s:35:"1226:dhrfgvbaf-dhrfgvbaf.fubj.syntf";a:2:{i:0;R:39667;i:1;R:38893;}s:34:"1226:dhrfgvbaf-dhrfgvbaf.fubj.synt";a:2:{i:0;R:39667;i:1;R:38893;}s:40:"1226:dhrfgvbaf-dhrfgvbaf.fubj.synttrq_nf";a:2:{i:0;R:39667;i:1;R:38893;}s:36:"1226:dhrfgvbaf-dhrfgvbaf.fubj.ivrjrq";a:2:{i:0;R:39667;i:1;R:38893;}s:48:"1226:dhrfgvbaf-dhrfgvbaf.fubj.gb_nafjre_dhrfgvba";a:2:{i:0;R:39667;i:1;R:38893;}s:44:"1226:dhrfgvbaf-dhrfgvbaf.fubj.sbyybj_gbbygvc";a:2:{i:0;R:39667;i:1;R:38893;}s:46:"1226:dhrfgvbaf-dhrfgvbaf.fubj.npprcgrq_gbbygvc";a:2:{i:0;R:39667;i:1;R:38893;}s:46:"1226:dhrfgvbaf-dhrfgvbaf.fubj.hasbyybj_gbbygvc";a:2:{i:0;R:39667;i:1;R:38893;}s:38:"1226:dhrfgvbaf-dhrfgvbaf.fubj.nfxrq_ba";a:2:{i:0;R:39667;i:1;R:38893;}s:43:"1226:dhrfgvbaf-dhrfgvbaf.fubj.ynfg_npgvivgl";a:2:{i:0;R:39667;i:1;R:38893;}s:35:"1226:dhrfgvbaf-dhrfgvbaf.fubj.ergnt";a:2:{i:0;R:39667;i:1;R:38893;}s:51:"1226:dhrfgvbaf-dhrfgvbaf.fubj.hanhguragvpngrq_ergnt";a:2:{i:0;R:39667;i:1;R:38893;}s:45:"1226:dhrfgvbaf-dhrfgvbaf.fubj.erdhrfg_pybfvat";a:2:{i:0;R:39667;i:1;R:38893;}s:53:"1226:dhrfgvbaf-dhrfgvbaf.fubj.erdhrfg_pybfvat_qrgnvyf";a:2:{i:0;R:39667;i:1;R:38893;}s:35:"1226:dhrfgvbaf-dhrfgvbaf.fubj.pybfr";a:2:{i:0;R:39667;i:1;R:38893;}s:45:"1226:dhrfgvbaf-dhrfgvbaf.fubj.erdhrfg_bcravat";a:2:{i:0;R:39667;i:1;R:38893;}s:53:"1226:dhrfgvbaf-dhrfgvbaf.fubj.erdhrfg_bcravat_qrgnvyf";a:2:{i:0;R:39667;i:1;R:38893;}s:34:"1226:dhrfgvbaf-dhrfgvbaf.fubj.bcra";a:2:{i:0;R:39667;i:1;R:38893;}s:33:"1226:dhrfgvbaf-dhrfgvbaf.fubj.ona";a:2:{i:0;R:39667;i:1;R:38893;}s:35:"1226:dhrfgvbaf-dhrfgvbaf.fubj.haona";a:2:{i:0;R:39667;i:1;R:38893;}s:45:"1226:dhrfgvbaf-dhrfgvbaf.fubj.ergenpg_erdhrfg";a:2:{i:0;R:39667;i:1;R:38893;}s:42:"1226:dhrfgvbaf-dhrfgvbaf.fubj.pybfr_ernfba";a:2:{i:0;R:39667;i:1;R:38893;}s:48:"1226:dhrfgvbaf-dhrfgvbaf.fubj.erdhrfgrq_pybfr_nf";a:2:{i:0;R:39667;i:1;R:38893;}s:49:"1226:dhrfgvbaf-dhrfgvbaf.fubj.erdhrfgrq_erbcravat";a:2:{i:0;R:39667;i:1;R:38893;}s:42:"1226:dhrfgvbaf-dhrfgvbaf.fubj.rqvg_erdhrfg";a:2:{i:0;R:39667;i:1;R:38893;}s:42:"1226:dhrfgvbaf-dhrfgvbaf.fubj.sbyybj_hc_bs";a:2:{i:0;R:39667;i:1;R:38893;}s:36:"1226:dhrfgvbaf-dhrfgvbaf.ergnt.gvgyr";a:2:{i:0;R:39667;i:1;R:38893;}s:43:"1226:dhrfgvbaf-dhrfgvbaf.nafjre.cvpx_nafjre";a:2:{i:0;R:39667;i:1;R:38893;}s:44:"1226:dhrfgvbaf-dhrfgvbaf.nafjre.hafrg_nafjre";a:2:{i:0;R:39667;i:1;R:38893;}s:36:"1226:dhrfgvbaf-dhrfgvbaf.nafjre.synt";a:2:{i:0;R:39667;i:1;R:38893;}s:43:"1226:dhrfgvbaf-dhrfgvbaf.nafjre.nqq_pbzzrag";a:2:{i:0;R:39667;i:1;R:38893;}s:40:"1226:dhrfgvbaf-dhrfgvbaf.nafjre.snibevgr";a:2:{i:0;R:39667;i:1;R:38893;}s:42:"1226:dhrfgvbaf-dhrfgvbaf.nafjre.hasnibevgr";a:2:{i:0;R:39667;i:1;R:38893;}s:48:"1226:dhrfgvbaf-dhrfgvbaf.nafjre.snibevgr_gbbygvc";a:2:{i:0;R:39667;i:1;R:38893;}s:50:"1226:dhrfgvbaf-dhrfgvbaf.nafjre.hasnibevgr_gbbygvc";a:2:{i:0;R:39667;i:1;R:38893;}s:50:"1226:dhrfgvbaf-dhrfgvbaf.dhrfgvba.npprcgrq_gbbygvc";a:2:{i:0;R:39667;i:1;R:38893;}s:44:"1226:dhrfgvbaf-dhrfgvbaf.dhrfgvba.jvxv_gvgyr";a:2:{i:0;R:39667;i:1;R:38893;}s:45:"1226:dhrfgvbaf-dhrfgvbaf.dhrfgvba.unf_nafjref";a:2:{i:0;R:39667;i:1;R:38893;}s:45:"1226:dhrfgvbaf-dhrfgvbaf.dhrfgvba.nafjre_ireo";a:2:{i:0;R:39667;i:1;R:38893;}s:38:"1226:dhrfgvbaf-dhrfgvbaf.sbez.obql_gvc";a:2:{i:0;R:39667;i:1;R:38893;}s:42:"1226:dhrfgvbaf-dhrfgvbaf.sbez.ynathntr_gvc";a:2:{i:0;R:39667;i:1;R:38893;}s:38:"1226:dhrfgvbaf-dhrfgvbaf.sbez.gntf_gvc";a:2:{i:0;R:39667;i:1;R:38893;}s:43:"1226:dhrfgvbaf-dhrfgvbaf.sbez.nqhyg_pbagrag";a:2:{i:0;R:39667;i:1;R:38893;}s:44:"1226:dhrfgvbaf-dhrfgvbaf.sbez.nqq_nggnpuzrag";a:2:{i:0;R:39667;i:1;R:38893;}s:47:"1226:dhrfgvbaf-dhrfgvbaf.sbez.erzbir_nggnpuzrag";a:2:{i:0;R:39667;i:1;R:38893;}s:52:"1226:dhrfgvbaf-dhrfgvbaf.sbez.eryngrq_dhrfgvbaf_qrfp";a:2:{i:0;R:39667;i:1;R:38893;}s:35:"1226:dhrfgvbaf-dhrfgvbaf.synt.gvgyr";a:2:{i:0;R:39667;i:1;R:38893;}s:35:"1226:dhrfgvbaf-dhrfgvbaf.rqvg.gvgyr";a:2:{i:0;R:39667;i:1;R:38893;}s:41:"1226:dhrfgvbaf-dhrfgvbaf.hanafjrerq.gvgyr";a:2:{i:0;R:39667;i:1;R:38893;}s:40:"1226:dhrfgvbaf-dhrfgvbaf.hanafjrerq.gntf";a:2:{i:0;R:39667;i:1;R:38893;}s:41:"1226:dhrfgvbaf-dhrfgvbaf.hanafjrerq.rzcgl";a:2:{i:0;R:39667;i:1;R:38893;}s:43:"1226:dhrfgvbaf-dhrfgvbaf.hanafjrerq.zl_gntf";a:2:{i:0;R:39667;i:1;R:38893;}s:42:"1226:dhrfgvbaf-dhrfgvbaf.hanafjrerq.rkcreg";a:2:{i:0;R:39667;i:1;R:38893;}s:35:"1226:dhrfgvbaf-dhrfgvbaf.gntf.gvgyr";a:2:{i:0;R:39667;i:1;R:38893;}s:37:"1226:dhrfgvbaf-dhrfgvbaf.gntf.gbbygvc";a:2:{i:0;R:39667;i:1;R:38893;}s:36:"1226:dhrfgvbaf-dhrfgvbaf.gntf.svygre";a:2:{i:0;R:39667;i:1;R:38893;}s:34:"1226:dhrfgvbaf-dhrfgvbaf.arj.gvgyr";a:2:{i:0;R:39667;i:1;R:38893;}s:40:"1226:dhrfgvbaf-dhrfgvbaf.arj.qrfpevcgvba";a:2:{i:0;R:39667;i:1;R:38893;}s:39:"1226:dhrfgvbaf-dhrfgvbaf.arj.ubj_gb_nfx";a:2:{i:0;R:39667;i:1;R:38893;}s:44:"1226:dhrfgvbaf-dhrfgvbaf.perngr.synfu_abgvpr";a:2:{i:0;R:39667;i:1;R:38893;}s:50:"1226:dhrfgvbaf-dhrfgvbaf.perngr.nyernql_ertvfgrerq";a:2:{i:0;R:39667;i:1;R:38893;}s:44:"1226:dhrfgvbaf-dhrfgvbaf.hcqngr.synfu_abgvpr";a:2:{i:0;R:39667;i:1;R:38893;}s:43:"1226:dhrfgvbaf-dhrfgvbaf.fbyir.synfu_abgvpr";a:2:{i:0;R:39667;i:1;R:38893;}s:45:"1226:dhrfgvbaf-dhrfgvbaf.hafbyir.synfu_abgvpr";a:2:{i:0;R:39667;i:1;R:38893;}s:38:"1226:dhrfgvbaf-dhrfgvbaf.jngpu.fhpprff";a:2:{i:0;R:39667;i:1;R:38893;}s:40:"1226:dhrfgvbaf-dhrfgvbaf.hajngpu.fhpprff";a:2:{i:0;R:39667;i:1;R:38893;}s:37:"1226:dhrfgvbaf-dhrfgvbaf.erireg.gvgyr";a:2:{i:0;R:39667;i:1;R:38893;}s:35:"1226:dhrfgvbaf-dhrfgvbaf.zbir.gvgyr";a:2:{i:0;R:39667;i:1;R:38893;}s:41:"1226:dhrfgvbaf-dhrfgvbaf.zbir.tebhc_ynory";a:2:{i:0;R:39667;i:1;R:38893;}s:36:"1226:dhrfgvbaf-dhrfgvbaf.zbir.fhozvg";a:2:{i:0;R:39667;i:1;R:38893;}s:40:"1226:dhrfgvbaf-dhrfgvbaf.zbir_gb.fhpprff";a:2:{i:0;R:39667;i:1;R:38893;}s:50:"1226:dhrfgvbaf-dhrfgvbaf.zbir_gb.tebhc_qbag_rkvfgf";a:2:{i:0;R:39667;i:1;R:38893;}s:36:"1226:dhrfgvbaf-dhrfgvbaf.funerq.synt";a:2:{i:0;R:39667;i:1;R:38893;}s:41:"1226:dhrfgvbaf-dhrfgvbaf.ergnt_sbez.gvgyr";a:2:{i:0;R:39667;i:1;R:38893;}s:42:"1226:dhrfgvbaf-dhrfgvbaf.ergnt_sbez.fhozvg";a:2:{i:0;R:39667;i:1;R:38893;}s:42:"1226:dhrfgvbaf-dhrfgvbaf.ergnt_sbez.pnapry";a:2:{i:0;R:39667;i:1;R:38893;}s:41:"1226:dhrfgvbaf-dhrfgvbaf.ergnt_gb.fhpprff";a:2:{i:0;R:39667;i:1;R:38893;}s:41:"1226:dhrfgvbaf-dhrfgvbaf.ergnt_gb.snvyher";a:2:{i:0;R:39667;i:1;R:38893;}s:38:"1226:dhrfgvbaf-dhrfgvbaf.pybfr.snvyher";a:2:{i:0;R:39667;i:1;R:38893;}s:49:"1226:dhrfgvbaf-dhrfgvbaf.zbqry.zrffntrf.gbb_fubeg";a:2:{i:0;R:39667;i:1;R:38893;}s:53:"1226:dhrfgvbaf-dhrfgvbaf.zbqry.zrffntrf.gbb_znal_gntf";a:2:{i:0;R:39667;i:1;R:38893;}s:50:"1226:dhrfgvbaf-dhrfgvbaf.zbqry.zrffntrf.rzcgl_gntf";a:2:{i:0;R:39667;i:1;R:38893;}s:54:"1226:dhrfgvbaf-dhrfgvbaf.zbqry.zrffntrf.gvgyr_gbb_ybat";a:2:{i:0;R:39667;i:1;R:38893;}s:54:"1226:dhrfgvbaf-dhrfgvbaf.zbqry.zrffntrf.gntf_abg_nqqrq";a:2:{i:0;R:39667;i:1;R:38893;}s:44:"1226:dhrfgvbaf-npgvirerpbeq.zbqryf.dhrfgvbaf";a:2:{i:0;R:39667;i:1;R:38893;}s:43:"1226:dhrfgvbaf-npgvirerpbeq.zbqryf.dhrfgvba";a:2:{i:0;R:39667;i:1;R:38893;}s:53:"1226:dhrfgvbaf-npgvirerpbeq.nggevohgrf.dhrfgvba.gvgyr";a:2:{i:0;R:39667;i:1;R:38893;}s:52:"1226:dhrfgvbaf-npgvirerpbeq.nggevohgrf.dhrfgvba.obql";a:2:{i:0;R:39667;i:1;R:38893;}s:52:"1226:dhrfgvbaf-npgvirerpbeq.nggevohgrf.dhrfgvba.gntf";a:2:{i:0;R:39667;i:1;R:38893;}s:56:"1226:dhrfgvbaf-npgvirerpbeq.nggevohgrf.dhrfgvba.nfxrq_ol";a:2:{i:0;R:39667;i:1;R:38893;}s:55:"1226:dhrfgvbaf-npgvirerpbeq.nggevohgrf.dhrfgvba.nafjref";a:2:{i:0;R:39667;i:1;R:38893;}s:53:"1226:dhrfgvbaf-npgvirerpbeq.nggevohgrf.dhrfgvba.ivrjf";a:2:{i:0;R:39667;i:1;R:38893;}s:53:"1226:dhrfgvbaf-npgvirerpbeq.nggevohgrf.dhrfgvba.ibgrf";a:2:{i:0;R:39667;i:1;R:38893;}s:56:"1226:dhrfgvbaf-npgvirerpbeq.nggevohgrf.dhrfgvba.ynathntr";a:2:{i:0;R:39667;i:1;R:38893;}s:58:"1226:dhrfgvbaf-npgvirerpbeq.nggevohgrf.dhrfgvba.perngrq_ng";a:2:{i:0;R:39667;i:1;R:38893;}s:58:"1226:dhrfgvbaf-npgvirerpbeq.nggevohgrf.dhrfgvba.hcqngrq_ng";a:2:{i:0;R:39667;i:1;R:38893;}s:58:"1226:dhrfgvbaf-npgvirerpbeq.nggevohgrf.dhrfgvba.hcqngrq_ol";a:2:{i:0;R:39667;i:1;R:38893;}s:54:"1226:dhrfgvbaf-npgvirerpbeq.nggevohgrf.dhrfgvba.pybfrq";a:2:{i:0;R:39667;i:1;R:38893;}s:54:"1226:dhrfgvbaf-npgvirerpbeq.nggevohgrf.dhrfgvba.onaarq";a:2:{i:0;R:39667;i:1;R:38893;}s:40:"1226:erjneqf-erjneqf.fgneg.npgvir_abgvpr";a:2:{i:0;s:15:"shapado-rewards";i:1;R:38893;}s:38:"1226:erjneqf-erjneqf.fgneg.jnvg_abgvpr";a:2:{i:0;R:39801;i:1;R:38893;}s:44:"1226:erjneqf-erjneqf.fgneg.erchgngvba_abgvpr";a:2:{i:0;R:39801;i:1;R:38893;}s:32:"1226:erjneqf-erjneqf.pybfr.reebe";a:2:{i:0;R:39801;i:1;R:38893;}s:42:"1226:frnepurf-frnepurf.vaqrk.sbhaq_erfhygf";a:2:{i:0;s:16:"shapado-searches";i:1;R:38893;}s:34:"1226:frnepurf-frnepurf.vaqrk.rzcgl";a:2:{i:0;R:39806;i:1;R:38893;}s:33:"1226:frnepurf-frnepurf.vaqrk.gntf";a:2:{i:0;R:39806;i:1;R:38893;}s:40:"1226:frnepurf-frnepurf.vaqrk.frnepu_grkg";a:2:{i:0;R:39806;i:1;R:38893;}s:44:"1226:frnepurf-frnepurf.vaqrk.nqinaprq_frnepu";a:2:{i:0;R:39806;i:1;R:38893;}s:40:"1226:frnepurf-frnepurf.vaqrk.qrfpevcgvba";a:2:{i:0;R:39806;i:1;R:38893;}s:41:"1226:frnepurf-frnepurf.vaqrk.vachg_yrtraq";a:2:{i:0;R:39806;i:1;R:38893;}s:40:"1226:frnepurf-frnepurf.vaqrk.vachg_gvgyr";a:2:{i:0;R:39806;i:1;R:38893;}s:33:"1226:frnepurf-frnepurf.sbez.pyrne";a:2:{i:0;R:39806;i:1;R:38893;}s:44:"1226:frnepurf-frnepurf.sbez.frnepu_obk_gvgyr";a:2:{i:0;R:39806;i:1;R:38893;}s:36:"1226:frnepurf-frnepurf.sbez.gntf_gvc";a:2:{i:0;R:39806;i:1;R:38893;}s:42:"1226:frffvbaf-frffvbaf.perngr.synfu_abgvpr";a:2:{i:0;s:16:"shapado-sessions";i:1;R:38893;}s:41:"1226:frffvbaf-frffvbaf.perngr.synfu_reebe";a:2:{i:0;R:39818;i:1;R:38893;}s:43:"1226:frffvbaf-frffvbaf.qrfgebl.synfu_abgvpr";a:2:{i:0;R:39818;i:1;R:38893;}s:38:"1226:frffvbaf-frffvbaf.arj.jvgu_bcravq";a:2:{i:0;R:39818;i:1;R:38893;}s:40:"1226:frffvbaf-frffvbaf.arj.jvgu_snprobbx";a:2:{i:0;R:39818;i:1;R:38893;}s:39:"1226:frffvbaf-frffvbaf.arj.jvgu_gjvggre";a:2:{i:0;R:39818;i:1;R:38893;}s:46:"1226:frffvbaf-frffvbaf.arj.jvgu_nhguragvpngvba";a:2:{i:0;R:39818;i:1;R:38893;}s:37:"1226:frffvbaf-frffvbaf.arj.ertvfgrerq";a:2:{i:0;R:39818;i:1;R:38893;}s:41:"1226:frffvbaf-frffvbaf.arj.abg_ertvfgrerq";a:2:{i:0;R:39818;i:1;R:38893;}s:33:"1226:frffvbaf-frffvbaf.arj.ybt_va";a:2:{i:0;R:39818;i:1;R:38893;}s:33:"1226:frffvbaf-frffvbaf.arj.fvtahc";a:2:{i:0;R:39818;i:1;R:38893;}s:34:"1226:frffvbaf-frffvbaf.arj.fvta_va";a:2:{i:0;R:39818;i:1;R:38893;}s:38:"1226:frffvbaf-frffvbaf.arj.erzrzore_zr";a:2:{i:0;R:39818;i:1;R:38893;}s:25:"1226:funerq-funerq.svygre";a:2:{i:0;s:14:"shapado-shared";i:1;R:38893;}s:28:"1226:funerq-funerq.ivrj_zbqr";a:2:{i:0;R:39832;i:1;R:38893;}s:28:"1226:funerq-funerq.ynathntrf";a:2:{i:0;R:39832;i:1;R:38893;}s:42:"1226:funerq-funerq.ynathntr_svygre_gbbygvc";a:2:{i:0;R:39832;i:1;R:38893;}s:23:"1226:funerq-funerq.anzr";a:2:{i:0;R:39832;i:1;R:38893;}s:30:"1226:funerq-funerq.qrfpevcgvba";a:2:{i:0;R:39832;i:1;R:38893;}s:26:"1226:funerq-funerq.ol_naba";a:2:{i:0;R:39832;i:1;R:38893;}s:33:"1226:funerq-funerq.cersreerq_ynat";a:2:{i:0;R:39832;i:1;R:38893;}s:27:"1226:funerq-funerq.ynathntr";a:2:{i:0;R:39832;i:1;R:38893;}s:27:"1226:funerq-funerq.nal_ynat";a:2:{i:0;R:39832;i:1;R:38893;}s:49:"1226:funerq-funerq.dhvpx_dhrfgvba.enaqbz_dhrfgvba";a:2:{i:0;R:39832;i:1;R:38893;}s:46:"1226:funerq-funerq.ybtva_qebc_qbja.jvgu_tbbtyr";a:2:{i:0;R:39832;i:1;R:38893;}s:48:"1226:funerq-funerq.ybtva_qebc_qbja.jvgu_snprobbx";a:2:{i:0;R:39832;i:1;R:38893;}s:47:"1226:funerq-funerq.ybtva_qebc_qbja.jvgu_gjvggre";a:2:{i:0;R:39832;i:1;R:38893;}s:49:"1226:funerq-funerq.ybtva_qebc_qbja.jvgu_yvaxrq_va";a:2:{i:0;R:39832;i:1;R:38893;}s:48:"1226:funerq-funerq.ybtva_qebc_qbja.jvgu_vqragvpn";a:2:{i:0;R:39832;i:1;R:38893;}s:46:"1226:funerq-funerq.ybtva_qebc_qbja.jvgu_bcravq";a:2:{i:0;R:39832;i:1;R:38893;}s:50:"1226:funerq-funerq.ybtva_qebc_qbja.jvgu_rznvy_cnff";a:2:{i:0;R:39832;i:1;R:38893;}s:52:"1226:funerq-funerq.ybtva_qebc_qbja.fvta_hc_hfre_cnff";a:2:{i:0;R:39832;i:1;R:38893;}s:55:"1226:funerq-funerq.fbpvny_pbaarpg.svaq_sevraqf_snprobbx";a:2:{i:0;R:39832;i:1;R:38893;}s:54:"1226:funerq-funerq.fbpvny_pbaarpg.svaq_sevraqf_gjvggre";a:2:{i:0;R:39832;i:1;R:38893;}s:56:"1226:funerq-funerq.fbpvny_pbaarpg.svaq_sevraqf_yvaxrq_va";a:2:{i:0;R:39832;i:1;R:38893;}s:55:"1226:funerq-funerq.fbpvny_pbaarpg.svaq_sevraqf_vqragvpn";a:2:{i:0;R:39832;i:1;R:38893;}s:35:"1226:funerq-funerq.gbcone.ybttrq_nf";a:2:{i:0;R:39832;i:1;R:38893;}s:31:"1226:funerq-funerq.gbcone.nqzva";a:2:{i:0;R:39832;i:1;R:38893;}s:35:"1226:funerq-funerq.gbcone.hfre_cntr";a:2:{i:0;R:39832;i:1;R:38893;}s:37:"1226:funerq-funerq.pheerag_gntf.gvgyr";a:2:{i:0;R:39832;i:1;R:38893;}s:50:"1226:funerq-funerq.znantr_anivtngvba.gvgyr_bcgvbaf";a:2:{i:0;R:39832;i:1;R:38893;}s:50:"1226:funerq-funerq.znantr_anivtngvba.gvgyr_pbagrag";a:2:{i:0;R:39832;i:1;R:38893;}s:51:"1226:funerq-funerq.znantr_anivtngvba.gvgyr_srngherf";a:2:{i:0;R:39832;i:1;R:38893;}s:38:"1226:funerq-funerq.rzcgl.qrsnhyg.gvgyr";a:2:{i:0;R:39832;i:1;R:38893;}s:49:"1226:funerq-funerq.rzcgl.qrsnhyg.qrfpevcgvba.grkg";a:2:{i:0;R:39832;i:1;R:38893;}s:58:"1226:funerq-funerq.rzcgl.dhrfgvbaf.qrfpevcgvba.npgvba_yvax";a:2:{i:0;R:39832;i:1;R:38893;}s:51:"1226:funerq-funerq.rzcgl.dhrfgvbaf.qrfpevcgvba.grkg";a:2:{i:0;R:39832;i:1;R:38893;}s:61:"1226:funerq-funerq.rzcgl.svygrerq_ol_ynathntr_dhrfgvbaf.gvgyr";a:2:{i:0;R:39832;i:1;R:38893;}s:72:"1226:funerq-funerq.rzcgl.svygrerq_ol_ynathntr_dhrfgvbaf.qrfpevcgvba.grkg";a:2:{i:0;R:39832;i:1;R:38893;}s:79:"1226:funerq-funerq.rzcgl.svygrerq_ol_ynathntr_dhrfgvbaf.qrfpevcgvba.npgvba_yvax";a:2:{i:0;R:39832;i:1;R:38893;}s:49:"1226:funerq-funerq.rzcgl.svygrerq_dhrfgvbaf.gvgyr";a:2:{i:0;R:39832;i:1;R:38893;}s:60:"1226:funerq-funerq.rzcgl.svygrerq_dhrfgvbaf.qrfpevcgvba.grkg";a:2:{i:0;R:39832;i:1;R:38893;}s:67:"1226:funerq-funerq.rzcgl.svygrerq_dhrfgvbaf.qrfpevcgvba.npgvba_yvax";a:2:{i:0;R:39832;i:1;R:38893;}s:37:"1226:funerq-funerq.rzcgl.gurzrf.gvgyr";a:2:{i:0;R:39832;i:1;R:38893;}s:48:"1226:funerq-funerq.rzcgl.gurzrf.qrfpevcgvba.grkg";a:2:{i:0;R:39832;i:1;R:38893;}s:55:"1226:funerq-funerq.rzcgl.gurzrf.qrfpevcgvba.npgvba_yvax";a:2:{i:0;R:39832;i:1;R:38893;}s:41:"1226:funerq-funerq.rzcgl.npgvivgvrf.gvgyr";a:2:{i:0;R:39832;i:1;R:38893;}s:52:"1226:funerq-funerq.rzcgl.npgvivgvrf.qrfpevcgvba.grkg";a:2:{i:0;R:39832;i:1;R:38893;}s:38:"1226:funerq-funerq.rzcgl.nafjref.gvgyr";a:2:{i:0;R:39832;i:1;R:38893;}s:49:"1226:funerq-funerq.rzcgl.nafjref.qrfpevcgvba.grkg";a:2:{i:0;R:39832;i:1;R:38893;}s:42:"1226:funerq-funerq.ynlbhg.sbbgre.pp_sbbgre";a:2:{i:0;R:39832;i:1;R:38893;}s:43:"1226:funerq-funerq.ynlbhg.sbbgre.cbjrerq_ol";a:2:{i:0;R:39832;i:1;R:38893;}s:33:"1226:gurzrf-gurzrf.fubj.abg_ernql";a:2:{i:0;s:14:"shapado-themes";i:1;R:38893;}s:32:"1226:gurzrf-gurzrf.fubj.ot_pbybe";a:2:{i:0;R:39882;i:1;R:38893;}s:32:"1226:gurzrf-gurzrf.fubj.st_pbybe";a:2:{i:0;R:39882;i:1;R:38893;}s:32:"1226:gurzrf-gurzrf.fubj.ot_vzntr";a:2:{i:0;R:39882;i:1;R:38893;}s:31:"1226:gurzrf-gurzrf.fubj.ivrj_ot";a:2:{i:0;R:39882;i:1;R:38893;}s:31:"1226:gurzrf-gurzrf.fubj.ivrj_st";a:2:{i:0;R:39882;i:1;R:38893;}s:33:"1226:gurzrf-gurzrf.fubj.ohggba_ot";a:2:{i:0;R:39882;i:1;R:38893;}s:33:"1226:gurzrf-gurzrf.fubj.ohggba_st";a:2:{i:0;R:39882;i:1;R:38893;}s:31:"1226:gurzrf-gurzrf.fubj.yvax_ot";a:2:{i:0;R:39882;i:1;R:38893;}s:31:"1226:gurzrf-gurzrf.fubj.yvax_st";a:2:{i:0;R:39882;i:1;R:38893;}s:35:"1226:gurzrf-gurzrf.fubj.hfr_yvax_ot";a:2:{i:0;R:39882;i:1;R:38893;}s:34:"1226:gurzrf-gurzrf.fubj.znva_pbybe";a:2:{i:0;R:39882;i:1;R:38893;}s:37:"1226:gurzrf-gurzrf.fubj.zbqhyrf_pbybe";a:2:{i:0;R:39882;i:1;R:38893;}s:34:"1226:gurzrf-gurzrf.fubj.grkg_pbybe";a:2:{i:0;R:39882;i:1;R:38893;}s:29:"1226:gurzrf-gurzrf.fubj.nccyl";a:2:{i:0;R:39882;i:1;R:38893;}s:27:"1226:gurzrf-gurzrf.fubj.gel";a:2:{i:0;R:39882;i:1;R:38893;}s:29:"1226:gurzrf-gurzrf.fubj.syhvq";a:2:{i:0;R:39882;i:1;R:38893;}s:35:"1226:gurzrf-gurzrf.fubj.oenaq_pbybe";a:2:{i:0;R:39882;i:1;R:38893;}s:30:"1226:gurzrf-gurzrf.sbez.hcqngr";a:2:{i:0;R:39882;i:1;R:38893;}s:37:"1226:gurzrf-gurzrf.sbez.pbybef_naq_ot";a:2:{i:0;R:39882;i:1;R:38893;}s:36:"1226:gurzrf-gurzrf.sbez.syhvq_ynlbhg";a:2:{i:0;R:39882;i:1;R:38893;}s:43:"1226:gurzrf-gurzrf.sbez.syhvq_ynlbhg_yrtraq";a:2:{i:0;R:39882;i:1;R:38893;}s:39:"1226:gurzrf-gurzrf.sbez.ot_pbybe_yrtraq";a:2:{i:0;R:39882;i:1;R:38893;}s:39:"1226:gurzrf-gurzrf.sbez.ot_vzntr_yrtraq";a:2:{i:0;R:39882;i:1;R:38893;}s:41:"1226:gurzrf-gurzrf.sbez.znva_pbybe_yrtraq";a:2:{i:0;R:39882;i:1;R:38893;}s:44:"1226:gurzrf-gurzrf.sbez.zbqhyrf_pbybe_yrtraq";a:2:{i:0;R:39882;i:1;R:38893;}s:41:"1226:gurzrf-gurzrf.sbez.grkg_pbybe_yrtraq";a:2:{i:0;R:39882;i:1;R:38893;}s:41:"1226:gurzrf-gurzrf.sbez.phfgbz_pff_yrtraq";a:2:{i:0;R:39882;i:1;R:38893;}s:37:"1226:gurzrf-gurzrf.sbez.fhozvg_hcqngr";a:2:{i:0;R:39882;i:1;R:38893;}s:36:"1226:gurzrf-gurzrf.vaqrk.qrfpevcgvba";a:2:{i:0;R:39882;i:1;R:38893;}s:34:"1226:gurzrf-gurzrf.vaqrk.arj_gurzr";a:2:{i:0;R:39882;i:1;R:38893;}s:29:"1226:gurzrf-gurzrf.rqvg.gvgyr";a:2:{i:0;R:39882;i:1;R:38893;}s:32:"1226:gurzrf-gurzrf.ernql.fhpprff";a:2:{i:0;R:39882;i:1;R:38893;}s:45:"1226:hasni-hasnibevgrf.perngr.hanhguragvpngrq";a:2:{i:0;s:19:"shapado-unfavorites";i:1;R:38893;}s:37:"1226:hasni-hasnibevgrf.perngr.fhpprff";a:2:{i:0;R:39916;i:1;R:38893;}s:40:"1226:hasni-npgvirerpbeq.zbqryf.snibevgrf";a:2:{i:0;R:39916;i:1;R:38893;}s:39:"1226:hasni-npgvirerpbeq.zbqryf.snibevgr";a:2:{i:0;R:39916;i:1;R:38893;}s:34:"1226:hfref-hfref.fubj_wfba.rqvg_vg";a:2:{i:0;s:13:"shapado-users";i:1;R:38893;}s:41:"1226:hfref-hfref.fubj_wfba.ab_qrfpevcgvba";a:2:{i:0;R:39921;i:1;R:38893;}s:32:"1226:hfref-hfref.hfre_zvav.nqzva";a:2:{i:0;R:39921;i:1;R:38893;}s:30:"1226:hfref-hfref.hfre_zvav.zbq";a:2:{i:0;R:39921;i:1;R:38893;}s:33:"1226:hfref-hfref.hfre_zvav.rqvgbe";a:2:{i:0;R:39921;i:1;R:38893;}s:35:"1226:hfref-hfref.hfre_one.fvtarq_nf";a:2:{i:0;R:39921;i:1;R:38893;}s:39:"1226:hfref-hfref.hfre_one.abg_ybttrq_va";a:2:{i:0;R:39921;i:1;R:38893;}s:40:"1226:hfref-hfref.hfre_one.perngr_nppbhag";a:2:{i:0;R:39921;i:1;R:38893;}s:33:"1226:hfref-hfref.gbc_hfre.cebsvyr";a:2:{i:0;R:39921;i:1;R:38893;}s:34:"1226:hfref-hfref.gbc_hfre.zl_xnezn";a:2:{i:0;R:39921;i:1;R:38893;}s:33:"1226:hfref-hfref.gbc_hfre.pbaarpg";a:2:{i:0;R:39921;i:1;R:38893;}s:28:"1226:hfref-hfref.vaqrk.gvgyr";a:2:{i:0;R:39921;i:1;R:38893;}s:28:"1226:hfref-hfref.vaqrk.rzcgl";a:2:{i:0;R:39921;i:1;R:38893;}s:29:"1226:hfref-hfref.vaqrk.svygre";a:2:{i:0;R:39921;i:1;R:38893;}s:33:"1226:hfref-hfref.vaqrk.erchgngvba";a:2:{i:0;R:39921;i:1;R:38893;}s:29:"1226:hfref-hfref.vaqrk.arjrfg";a:2:{i:0;R:39921;i:1;R:38893;}s:29:"1226:hfref-hfref.vaqrk.byqrfg";a:2:{i:0;R:39921;i:1;R:38893;}s:27:"1226:hfref-hfref.vaqrk.anzr";a:2:{i:0;R:39921;i:1;R:38893;}s:27:"1226:hfref-hfref.vaqrk.arne";a:2:{i:0;R:39921;i:1;R:38893;}s:35:"1226:hfref-hfref.vaqrk.arne_gbbygvc";a:2:{i:0;R:39921;i:1;R:38893;}s:41:"1226:hfref-hfref.vaqrk.erchgngvba_gbbygvc";a:2:{i:0;R:39921;i:1;R:38893;}s:37:"1226:hfref-hfref.vaqrk.arjrfg_gbbygvc";a:2:{i:0;R:39921;i:1;R:38893;}s:37:"1226:hfref-hfref.vaqrk.byqrfg_gbbygvc";a:2:{i:0;R:39921;i:1;R:38893;}s:35:"1226:hfref-hfref.vaqrk.anzr_gbbygvc";a:2:{i:0;R:39921;i:1;R:38893;}s:26:"1226:hfref-hfref.arj.gvgyr";a:2:{i:0;R:39921;i:1;R:38893;}s:27:"1226:hfref-hfref.arj.fhozvg";a:2:{i:0;R:39921;i:1;R:38893;}s:31:"1226:hfref-hfref.arj.wbva_tebhc";a:2:{i:0;R:39921;i:1;R:38893;}s:32:"1226:hfref-hfref.arj.qrfpevcgvba";a:2:{i:0;R:39921;i:1;R:38893;}s:27:"1226:hfref-hfref.rqvg.gvgyr";a:2:{i:0;R:39921;i:1;R:38893;}s:28:"1226:hfref-hfref.rqvg.fhozvg";a:2:{i:0;R:39921;i:1;R:38893;}s:36:"1226:hfref-hfref.rqvg.ranoyr_gjvggre";a:2:{i:0;R:39921;i:1;R:38893;}s:38:"1226:hfref-hfref.punatr_cnffjbeq.gvgyr";a:2:{i:0;R:39921;i:1;R:38893;}s:39:"1226:hfref-hfref.punatr_cnffjbeq.fhozvg";a:2:{i:0;R:39921;i:1;R:38893;}s:27:"1226:hfref-hfref.fubj.gvgyr";a:2:{i:0;R:39921;i:1;R:38893;}s:28:"1226:hfref-hfref.fubj.sbyybj";a:2:{i:0;R:39921;i:1;R:38893;}s:30:"1226:hfref-hfref.fubj.hasbyybj";a:2:{i:0;R:39921;i:1;R:38893;}s:27:"1226:hfref-hfref.fubj.ivrjf";a:2:{i:0;R:39921;i:1;R:38893;}s:31:"1226:hfref-hfref.fubj.sbyybjref";a:2:{i:0;R:39921;i:1;R:38893;}s:31:"1226:hfref-hfref.fubj.sbyybjvat";a:2:{i:0;R:39921;i:1;R:38893;}s:34:"1226:hfref-hfref.fubj.rqvg_cebsvyr";a:2:{i:0;R:39921;i:1;R:38893;}s:36:"1226:hfref-hfref.sbyybj.synfu_abgvpr";a:2:{i:0;R:39921;i:1;R:38893;}s:35:"1226:hfref-hfref.sbyybj.synfu_reebe";a:2:{i:0;R:39921;i:1;R:38893;}s:38:"1226:hfref-hfref.hasbyybj.synfu_abgvpr";a:2:{i:0;R:39921;i:1;R:38893;}s:59:"1226:hfref-hfref.hcqngr_sbyybjrq_gntf.sbyybjrq.synfu_abgvpr";a:2:{i:0;R:39921;i:1;R:38893;}s:61:"1226:hfref-hfref.hcqngr_sbyybjrq_gntf.hasbyybjrq.synfu_abgvpr";a:2:{i:0;R:39921;i:1;R:38893;}s:42:"1226:hfref-hfref.purpx_phfgbz_qbznva.gvgyr";a:2:{i:0;R:39921;i:1;R:38893;}s:56:"1226:hfref-hfref.purpx_phfgbz_qbznva.erfrg_qbznva_ohggba";a:2:{i:0;R:39921;i:1;R:38893;}s:56:"1226:hfref-hfref.purpx_phfgbz_qbznva.jbexvat_qbznva_yvax";a:2:{i:0;R:39921;i:1;R:38893;}s:40:"1226:hfref-hfref.sbez.purpx_qbznva_gvgyr";a:2:{i:0;R:39921;i:1;R:38893;}s:34:"1226:hfref-hfref.sbez.purpx_qbznva";a:2:{i:0;R:39921;i:1;R:38893;}s:42:"1226:hfref-hfref.sbez.qrfxgbc_abgvsvpngvba";a:2:{i:0;R:39921;i:1;R:38893;}s:33:"1226:hfref-hfref.sbez.vasbezngvba";a:2:{i:0;R:39921;i:1;R:38893;}s:35:"1226:hfref-hfref.sbez.abgvsvpngvbaf";a:2:{i:0;R:39921;i:1;R:38893;}s:45:"1226:hfref-hfref.sbez.arj_nafjre_abgvsvpngvba";a:2:{i:0;R:39921;i:1;R:38893;}s:46:"1226:hfref-hfref.sbez.tvir_nqivpr_abgvsvpngvba";a:2:{i:0;R:39921;i:1;R:38893;}s:45:"1226:hfref-hfref.sbez.npgvivgvrf_abgvsvpngvba";a:2:{i:0;R:39921;i:1;R:38893;}s:42:"1226:hfref-hfref.sbez.ercbegf_abgvsvpngvba";a:2:{i:0;R:39921;i:1;R:38893;}s:32:"1226:hfref-hfref.sbez.ningne_gvc";a:2:{i:0;R:39921;i:1;R:38893;}s:36:"1226:hfref-hfref.sbez.fubj_zber_ynat";a:2:{i:0;R:39921;i:1;R:38893;}s:30:"1226:hfref-hfref.sbez.ynathntr";a:2:{i:0;R:39921;i:1;R:38893;}s:47:"1226:hfref-hfref.sbez.fraq_dhrfgvbaf_gb_gjvggre";a:2:{i:0;R:39921;i:1;R:38893;}s:44:"1226:hfref-hfref.sbez.fraq_onqtrf_gb_gjvggre";a:2:{i:0;R:39921;i:1;R:38893;}s:47:"1226:hfref-hfref.sbez.fraq_snibevgrf_gb_gjvggre";a:2:{i:0;R:39921;i:1;R:38893;}s:45:"1226:hfref-hfref.sbez.fraq_nafjref_gb_gjvggre";a:2:{i:0;R:39921;i:1;R:38893;}s:46:"1226:hfref-hfref.sbez.fraq_pbzzragf_gb_gjvggre";a:2:{i:0;R:39921;i:1;R:38893;}s:40:"1226:hfref-hfref.sbez.fbpvny_vagrenpgvba";a:2:{i:0;R:39921;i:1;R:38893;}s:36:"1226:hfref-hfref.perngr.synfu_abgvpr";a:2:{i:0;R:39921;i:1;R:38893;}s:35:"1226:hfref-hfref.perngr.synfu_reebe";a:2:{i:0;R:39921;i:1;R:38893;}s:50:"1226:hfref-hfref.zrffntrf.reebef.erchgngvba_arrqrq";a:2:{i:0;R:39921;i:1;R:38893;}s:32:"1226:hfref-hfref.npgvbaf.ibgr_hc";a:2:{i:0;R:39921;i:1;R:38893;}s:34:"1226:hfref-hfref.npgvbaf.ibgr_qbja";a:2:{i:0;R:39921;i:1;R:38893;}s:29:"1226:hfref-hfref.npgvbaf.synt";a:2:{i:0;R:39921;i:1;R:38893;}s:42:"1226:hfref-hfref.npgvbaf.rqvg_bguref_cbfgf";a:2:{i:0;R:39921;i:1;R:38893;}s:39:"1226:hfref-hfref.npgvbaf.rqvg_jvxv_cbfg";a:2:{i:0;R:39921;i:1;R:38893;}s:47:"1226:hfref-hfref.npgvbaf.ergnt_bguref_dhrfgvbaf";a:2:{i:0;R:39921;i:1;R:38893;}s:51:"1226:hfref-hfref.npgvbaf.ibgr_gb_pybfr_bja_dhrfgvba";a:2:{i:0;R:39921;i:1;R:38893;}s:51:"1226:hfref-hfref.npgvbaf.ibgr_gb_pybfr_nal_dhrfgvba";a:2:{i:0;R:39921;i:1;R:38893;}s:43:"1226:hfref-hfref.nabalzbhf_sbez.arire_fubja";a:2:{i:0;R:39921;i:1;R:38893;}s:36:"1226:hfref-npgvirerpbeq.zbqryf.hfref";a:2:{i:0;R:39921;i:1;R:38893;}s:35:"1226:hfref-npgvirerpbeq.zbqryf.hfre";a:2:{i:0;R:39921;i:1;R:38893;}s:45:"1226:hfref-npgvirerpbeq.nggevohgrf.hfre.ybtva";a:2:{i:0;R:39921;i:1;R:38893;}s:45:"1226:hfref-npgvirerpbeq.nggevohgrf.hfre.rznvy";a:2:{i:0;R:39921;i:1;R:38893;}s:44:"1226:hfref-npgvirerpbeq.nggevohgrf.hfre.anzr";a:2:{i:0;R:39921;i:1;R:38893;}s:56:"1226:hfref-npgvirerpbeq.nggevohgrf.hfre.pheerag_cnffjbeq";a:2:{i:0;R:39921;i:1;R:38893;}s:48:"1226:hfref-npgvirerpbeq.nggevohgrf.hfre.cnffjbeq";a:2:{i:0;R:39921;i:1;R:38893;}s:61:"1226:hfref-npgvirerpbeq.nggevohgrf.hfre.cnffjbeq_pbasvezngvba";a:2:{i:0;R:39921;i:1;R:38893;}s:50:"1226:hfref-npgvirerpbeq.nggevohgrf.hfre.perngrq_ng";a:2:{i:0;R:39921;i:1;R:38893;}s:50:"1226:hfref-npgvirerpbeq.nggevohgrf.hfre.hcqngrq_ng";a:2:{i:0;R:39921;i:1;R:38893;}s:55:"1226:hfref-npgvirerpbeq.nggevohgrf.hfre.npgvingvba_pbqr";a:2:{i:0;R:39921;i:1;R:38893;}s:52:"1226:hfref-npgvirerpbeq.nggevohgrf.hfre.npgvingrq_ng";a:2:{i:0;R:39921;i:1;R:38893;}s:48:"1226:hfref-npgvirerpbeq.nggevohgrf.hfre.shyyanzr";a:2:{i:0;R:39921;i:1;R:38893;}s:48:"1226:hfref-npgvirerpbeq.nggevohgrf.hfre.ynathntr";a:2:{i:0;R:39921;i:1;R:38893;}s:48:"1226:hfref-npgvirerpbeq.nggevohgrf.hfre.nfxrq_ol";a:2:{i:0;R:39921;i:1;R:38893;}s:48:"1226:hfref-npgvirerpbeq.nggevohgrf.hfre.gvzrmbar";a:2:{i:0;R:39921;i:1;R:38893;}s:54:"1226:hfref-npgvirerpbeq.nggevohgrf.hfre.cersreerq_gntf";a:2:{i:0;R:39921;i:1;R:38893;}s:59:"1226:hfref-npgvirerpbeq.nggevohgrf.hfre.cersreerq_ynathntrf";a:2:{i:0;R:39921;i:1;R:38893;}s:54:"1226:hfref-npgvirerpbeq.nggevohgrf.hfre.ynfg_ybttrq_ng";a:2:{i:0;R:39921;i:1;R:38893;}s:50:"1226:hfref-npgvirerpbeq.nggevohgrf.hfre.erchgngvba";a:2:{i:0;R:39921;i:1;R:38893;}s:46:"1226:hfref-npgvirerpbeq.nggevohgrf.hfre.ningne";a:2:{i:0;R:39921;i:1;R:38893;}s:52:"1226:hfref-npgvirerpbeq.nggevohgrf.hfre.uvqr_pbhagel";a:2:{i:0;R:39921;i:1;R:38893;}s:55:"1226:hfref-npgvirerpbeq.nggevohgrf.hfre.ynathntr_svygre";a:2:{i:0;R:39921;i:1;R:38893;}s:47:"1226:hfref-npgvirerpbeq.nggevohgrf.hfre.jrofvgr";a:2:{i:0;R:39921;i:1;R:38893;}s:48:"1226:hfref-npgvirerpbeq.nggevohgrf.hfre.oveguqnl";a:2:{i:0;R:39921;i:1;R:38893;}s:43:"1226:hfref-npgvirerpbeq.nggevohgrf.hfre.ntr";a:2:{i:0;R:39921;i:1;R:38893;}s:45:"1226:ibgrf-ibgrf.pbzzragf.gvgyr.bar_ibgr_hfre";a:2:{i:0;s:13:"shapado-votes";i:1;R:38893;}s:50:"1226:ibgrf-ibgrf.pbzzragf.gvgyr.bar_ibgr_gjb_hfref";a:2:{i:0;R:40026;i:1;R:38893;}s:47:"1226:ibgrf-ibgrf.pbzzragf.gvgyr.zber_ibgrf_hfre";a:2:{i:0;R:40026;i:1;R:38893;}s:47:"1226:ibgrf-ibgrf.pbzzragf.gvgyr.ab_hfre_ab_ibgr";a:2:{i:0;R:40026;i:1;R:38893;}s:48:"1226:ibgrf-ibgrf.pbzzragf.gvgyr.ab_hfre_bar_ibgr";a:2:{i:0;R:40026;i:1;R:38893;}s:50:"1226:ibgrf-ibgrf.pbzzragf.gvgyr.ab_hfre_zber_ibgrf";a:2:{i:0;R:40026;i:1;R:38893;}s:36:"1226:ibgrf-ibgrf.perngr.synfu_abgvpr";a:2:{i:0;R:40026;i:1;R:38893;}s:35:"1226:ibgrf-ibgrf.perngr.synfu_reebe";a:2:{i:0;R:40026;i:1;R:38893;}s:39:"1226:ibgrf-ibgrf.perngr.hanhguragvpngrq";a:2:{i:0;R:40026;i:1;R:38893;}s:31:"1226:ibgrf-ibgrf.perngr.nirentr";a:2:{i:0;R:40026;i:1;R:38893;}s:37:"1226:ibgrf-ibgrf.qrfgebl.synfu_abgvpr";a:2:{i:0;R:40026;i:1;R:38893;}s:35:"1226:ibgrf-ibgrf.pbageby.gb_ibgr_hc";a:2:{i:0;R:40026;i:1;R:38893;}s:37:"1226:ibgrf-ibgrf.pbageby.gb_ibgr_qbja";a:2:{i:0;R:40026;i:1;R:38893;}s:38:"1226:ibgrf-ibgrf.pbageby.unir_ibgrq_hc";a:2:{i:0;R:40026;i:1;R:38893;}s:40:"1226:ibgrf-ibgrf.pbageby.unir_ibgrq_qbja";a:2:{i:0;R:40026;i:1;R:38893;}s:47:"1226:ibgrf-ibgrf.zbqry.zrffntrf.pybfrq_dhrfgvba";a:2:{i:0;R:40026;i:1;R:38893;}s:49:"1226:ibgrf-ibgrf.zbqry.zrffntrf.ibgr_qbja_pbzzrag";a:2:{i:0;R:40026;i:1;R:38893;}s:36:"1226:ibgrf-npgvirerpbeq.zbqryf.ibgrf";a:2:{i:0;R:40026;i:1;R:38893;}s:35:"1226:ibgrf-npgvirerpbeq.zbqryf.ibgr";a:2:{i:0;R:40026;i:1;R:38893;}s:35:"1226:jrypbzr-jrypbzr.srrqonpx.gvgyr";a:2:{i:0;s:15:"shapado-welcome";i:1;R:38893;}s:44:"1226:jrypbzr-jrypbzr.srrqonpx.srrqonpx_gvgyr";a:2:{i:0;R:40046;i:1;R:38893;}s:50:"1226:jrypbzr-jrypbzr.srrqonpx.srrqonpx_qrfpevcgvba";a:2:{i:0;R:40046;i:1;R:38893;}s:47:"1226:jrypbzr-jrypbzr.srrqonpx.rznvy_qrfpevcgvba";a:2:{i:0;R:40046;i:1;R:38893;}s:43:"1226:jrypbzr-jrypbzr.srrqonpx.pncgpun_reebe";a:2:{i:0;R:40046;i:1;R:38893;}s:44:"1226:jrypbzr-jrypbzr.srrqonpx.pncgpun_abgvpr";a:2:{i:0;R:40046;i:1;R:38893;}s:30:"1226:jrypbzr-jrypbzr.vaqrk.ubg";a:2:{i:0;R:40046;i:1;R:38893;}s:33:"1226:jrypbzr-jrypbzr.vaqrk.npgvir";a:2:{i:0;R:40046;i:1;R:38893;}s:43:"1226:jrypbzr-jrypbzr.vaqrk.erprag_dhrfgvbaf";a:2:{i:0;R:40046;i:1;R:38893;}s:41:"1226:jrypbzr-jrypbzr.vaqrk.dhvpx_dhrfgvba";a:2:{i:0;R:40046;i:1;R:38893;}s:42:"1226:jrypbzr-jrypbzr.vaqrk.perngr_bja_fvgr";a:2:{i:0;R:40046;i:1;R:38893;}s:48:"1226:jrypbzr-jrypbzr.vaqrk.oebjfr_nyy_be_ol_gntf";a:2:{i:0;R:40046;i:1;R:38893;}s:49:"1226:jrypbzr-jrypbzr.vaqrk.shyy_yvfg_bs_dhrfgvbaf";a:2:{i:0;R:40046;i:1;R:38893;}s:41:"1226:jrypbzr-jrypbzr.vaqrk.oebjfr_ol_gntf";a:2:{i:0;R:40046;i:1;R:38893;}s:40:"1226:jrypbzr-jrypbzr.pbasvez_ntr.jneavat";a:2:{i:0;R:40046;i:1;R:38893;}s:39:"1226:jrypbzr-jrypbzr.pbasvez_ntr.abgvpr";a:2:{i:0;R:40046;i:1;R:38893;}s:41:"1226:jrypbzr-jrypbzr.pbasvez_ntr.haqre_18";a:2:{i:0;R:40046;i:1;R:38893;}s:40:"1226:jrypbzr-jrypbzr.pbasvez_ntr.bire_18";a:2:{i:0;R:40046;i:1;R:38893;}s:31:"1226:jvqtrgf-jvqtrgf.rqvg.gvgyr";a:2:{i:0;s:15:"shapado-widgets";i:1;R:38893;}s:43:"1226:jvqtrgf-jvqtrgf.jvqtrg.punatr_cbfvgvba";a:2:{i:0;R:40065;i:1;R:38893;}s:34:"1226:jvqtrgf-jvqtrgf.perngr.abgvpr";a:2:{i:0;R:40065;i:1;R:38893;}s:34:"1226:jvqtrgf-jvqtrgf.hcqngr.abgvpr";a:2:{i:0;R:40065;i:1;R:38893;}s:32:"1226:jvqtrgf-jvqtrgf.vaqrk.gvgyr";a:2:{i:0;R:40065;i:1;R:38893;}s:38:"1226:jvqtrgf-jvqtrgf.vaqrk.qrfpevcgvba";a:2:{i:0;R:40065;i:1;R:38893;}s:42:"1226:jvqtrgf-jvqtrgf.vaqrk.jrypbzr_jvqtrgf";a:2:{i:0;R:40065;i:1;R:38893;}s:43:"1226:jvqtrgf-jvqtrgf.vaqrk.znvayvfg_jvqtrgf";a:2:{i:0;R:40065;i:1;R:38893;}s:43:"1226:jvqtrgf-jvqtrgf.vaqrk.dhrfgvba_jvqtrgf";a:2:{i:0;R:40065;i:1;R:38893;}s:43:"1226:jvqtrgf-jvqtrgf.vaqrk.rkgreany_jvqtrgf";a:2:{i:0;R:40065;i:1;R:38893;}s:49:"1226:jvqtrgf-jvqtrgf.vaqrk.znvayvfg_jvqtrgf_gvgyr";a:2:{i:0;R:40065;i:1;R:38893;}s:49:"1226:jvqtrgf-jvqtrgf.vaqrk.dhrfgvba_jvqtrgf_gvgyr";a:2:{i:0;R:40065;i:1;R:38893;}s:49:"1226:jvqtrgf-jvqtrgf.vaqrk.rkgreany_jvqtrgf_gvgyr";a:2:{i:0;R:40065;i:1;R:38893;}s:33:"1226:jvqtrgf-jvqtrgf.vaqrk.urnqre";a:2:{i:0;R:40065;i:1;R:38893;}s:31:"1226:jvqtrgf-jvqtrgf.vaqrk.mbar";a:2:{i:0;R:40065;i:1;R:38893;}s:31:"1226:jvqtrgf-jvqtrgf.vaqrk.glcr";a:2:{i:0;R:40065;i:1;R:38893;}s:31:"1226:jvqtrgf-jvqtrgf.vaqrk.anzr";a:2:{i:0;R:40065;i:1;R:38893;}s:34:"1226:jvqtrgf-jvqtrgf.vaqrk.nqq_arj";a:2:{i:0;R:40065;i:1;R:38893;}s:33:"1226:jvqtrgf-jvqtrgf.vaqrk.anione";a:2:{i:0;R:40065;i:1;R:38893;}s:34:"1226:jvqtrgf-jvqtrgf.vaqrk.fvqrone";a:2:{i:0;R:40065;i:1;R:38893;}s:33:"1226:jvqtrgf-jvqtrgf.vaqrk.sbbgre";a:2:{i:0;R:40065;i:1;R:38893;}s:33:"1226:jvqtrgf-jvqtrgf.onqtrf.gvgyr";a:2:{i:0;R:40065;i:1;R:38893;}s:39:"1226:jvqtrgf-jvqtrgf.onqtrf.qrfpevcgvba";a:2:{i:0;R:40065;i:1;R:38893;}s:35:"1226:jvqtrgf-jvqtrgf.onqtrf.frr_nyy";a:2:{i:0;R:40065;i:1;R:38893;}s:33:"1226:jvqtrgf-jvqtrgf.tebhcf.gvgyr";a:2:{i:0;R:40065;i:1;R:38893;}s:39:"1226:jvqtrgf-jvqtrgf.tebhcf.qrfpevcgvba";a:2:{i:0;R:40065;i:1;R:38893;}s:37:"1226:jvqtrgf-jvqtrgf.gbc_tebhcf.gvgyr";a:2:{i:0;R:40065;i:1;R:38893;}s:43:"1226:jvqtrgf-jvqtrgf.gbc_tebhcf.qrfpevcgvba";a:2:{i:0;R:40065;i:1;R:38893;}s:43:"1226:jvqtrgf-jvqtrgf.gbc_tebhcf.unf_zrzoref";a:2:{i:0;R:40065;i:1;R:38893;}s:36:"1226:jvqtrgf-jvqtrgf.gbc_hfref.gvgyr";a:2:{i:0;R:40065;i:1;R:38893;}s:42:"1226:jvqtrgf-jvqtrgf.gbc_hfref.qrfpevcgvba";a:2:{i:0;R:40065;i:1;R:38893;}s:32:"1226:jvqtrgf-jvqtrgf.hfref.gvgyr";a:2:{i:0;R:40065;i:1;R:38893;}s:38:"1226:jvqtrgf-jvqtrgf.hfref.qrfpevcgvba";a:2:{i:0;R:40065;i:1;R:38893;}s:36:"1226:jvqtrgf-jvqtrgf.gnt_pybhq.gvgyr";a:2:{i:0;R:40065;i:1;R:38893;}s:42:"1226:jvqtrgf-jvqtrgf.gnt_pybhq.qrfpevcgvba";a:2:{i:0;R:40065;i:1;R:38893;}s:32:"1226:jvqtrgf-jvqtrgf.cntrf.gvgyr";a:2:{i:0;R:40065;i:1;R:38893;}s:38:"1226:jvqtrgf-jvqtrgf.cntrf.qrfpevcgvba";a:2:{i:0;R:40065;i:1;R:38893;}s:30:"1226:jvqtrgf-jvqtrgf.cntrf.arj";a:2:{i:0;R:40065;i:1;R:38893;}s:34:"1226:jvqtrgf-jvqtrgf.nqfrafr.gvgyr";a:2:{i:0;R:40065;i:1;R:38893;}s:40:"1226:jvqtrgf-jvqtrgf.nqfrafr.qrfpevcgvba";a:2:{i:0;R:40065;i:1;R:38893;}s:44:"1226:jvqtrgf-jvqtrgf.phfgbz_ugzy.qrfpevcgvba";a:2:{i:0;R:40065;i:1;R:38893;}s:35:"1226:jvqtrgf-jvqtrgf.frggvatf.yvzvg";a:2:{i:0;R:40065;i:1;R:38893;}s:41:"1226:jvqtrgf-jvqtrgf.frggvatf.phfgbz_ugzy";a:2:{i:0;R:40065;i:1;R:38893;}s:40:"1226:jvqtrgf-jvqtrgf.frggvatf.ba_jrypbzr";a:2:{i:0;R:40065;i:1;R:38893;}s:42:"1226:jvqtrgf-jvqtrgf.frggvatf.ba_dhrfgvbaf";a:2:{i:0;R:40065;i:1;R:38893;}s:46:"1226:jvqtrgf-jvqtrgf.frggvatf.ba_fubj_dhrfgvba";a:2:{i:0;R:40065;i:1;R:38893;}s:53:"1226:jvqtrgf-jvqtrgf.frggvatf.rkpyhqr_pff_ba_rkgreany";a:2:{i:0;R:40065;i:1;R:38893;}s:49:"1226:jvqtrgf-jvqtrgf.frggvatf.phfgbz_rkgreany_pff";a:2:{i:0;R:40065;i:1;R:38893;}s:34:"1226:jvqtrgf-jvqtrgf.frggvatf.pbqr";a:2:{i:0;R:40065;i:1;R:38893;}s:37:"1226:jvqtrgf-jvqtrgf.frggvatf.cerivrj";a:2:{i:0;R:40065;i:1;R:38893;}s:46:"1226:jvqtrgf-jvqtrgf.frggvatf.tbbtyr_nq_pyvrag";a:2:{i:0;R:40065;i:1;R:38893;}s:44:"1226:jvqtrgf-jvqtrgf.frggvatf.tbbtyr_nq_fybg";a:2:{i:0;R:40065;i:1;R:38893;}s:45:"1226:jvqtrgf-jvqtrgf.frggvatf.tbbtyr_nq_jvqgu";a:2:{i:0;R:40065;i:1;R:38893;}s:46:"1226:jvqtrgf-jvqtrgf.frggvatf.tbbtyr_nq_urvtug";a:2:{i:0;R:40065;i:1;R:38893;}s:42:"1226:jvqtrgf-jvqtrgf.funevat_ohggbaf.gvgyr";a:2:{i:0;R:40065;i:1;R:38893;}s:48:"1226:jvqtrgf-jvqtrgf.funevat_ohggbaf.qrfpevcgvba";a:2:{i:0;R:40065;i:1;R:38893;}s:41:"1226:jvqtrgf-jvqtrgf.zbq_vasb.qrfpevcgvba";a:2:{i:0;R:40065;i:1;R:38893;}s:40:"1226:jvqtrgf-jvqtrgf.dhrfgvba_gntf.gvgyr";a:2:{i:0;R:40065;i:1;R:38893;}s:46:"1226:jvqtrgf-jvqtrgf.dhrfgvba_gntf.qrfpevcgvba";a:2:{i:0;R:40065;i:1;R:38893;}s:42:"1226:jvqtrgf-jvqtrgf.dhrfgvba_onqtrf.gvgyr";a:2:{i:0;R:40065;i:1;R:38893;}s:48:"1226:jvqtrgf-jvqtrgf.dhrfgvba_onqtrf.qrfpevcgvba";a:2:{i:0;R:40065;i:1;R:38893;}s:47:"1226:jvqtrgf-jvqtrgf.dhrfgvba_fgngf.qrfpevcgvba";a:2:{i:0;R:40065;i:1;R:38893;}s:44:"1226:jvqtrgf-jvqtrgf.eryngrq_dhrfgvbaf.gvgyr";a:2:{i:0;R:40065;i:1;R:38893;}s:50:"1226:jvqtrgf-jvqtrgf.eryngrq_dhrfgvbaf.qrfpevcgvba";a:2:{i:0;R:40065;i:1;R:38893;}s:45:"1226:jvqtrgf-jvqtrgf.pheerag_gntf.qrfpevcgvba";a:2:{i:0;R:40065;i:1;R:38893;}s:35:"1226:jvqtrgf-jvqtrgf.gnt_yvfg.gvgyr";a:2:{i:0;R:40065;i:1;R:38893;}s:41:"1226:jvqtrgf-jvqtrgf.gnt_yvfg.qrfpevcgvba";a:2:{i:0;R:40065;i:1;R:38893;}s:45:"1226:jvqtrgf-jvqtrgf.nfx_dhrfgvba.qrfpevcgvba";a:2:{i:0;R:40065;i:1;R:38893;}s:39:"1226:jvqtrgf-jvqtrgf.nfx_dhrfgvba.gvgyr";a:2:{i:0;R:40065;i:1;R:38893;}s:40:"1226:jvqtrgf-jvqtrgf.nfx_dhrfgvba.sbbgre";a:2:{i:0;R:40065;i:1;R:38893;}s:37:"1226:jvqtrgf-jvqtrgf.nfx_dhrfgvba.nfx";a:2:{i:0;R:40065;i:1;R:38893;}s:47:"1226:jvqtrgf-jvqtrgf.nfx_dhrfgvba.ivrj_dhrfgvba";a:2:{i:0;R:40065;i:1;R:38893;}s:38:"1226:jvqtrgf-jvqtrgf.fhttrfgvbaf.gvgyr";a:2:{i:0;R:40065;i:1;R:38893;}s:44:"1226:jvqtrgf-jvqtrgf.fhttrfgvbaf.qrfpevcgvba";a:2:{i:0;R:40065;i:1;R:38893;}s:44:"1226:jvqtrgf-jvqtrgf.fhttrfgvbaf.sbyybjrq_ol";a:2:{i:0;R:40065;i:1;R:38893;}s:44:"1226:jvqtrgf-jvqtrgf.fhttrfgvbaf.sbyybj_hfre";a:2:{i:0;R:40065;i:1;R:38893;}s:43:"1226:jvqtrgf-jvqtrgf.fhttrfgvbaf.sbyybj_gnt";a:2:{i:0;R:40065;i:1;R:38893;}s:45:"1226:jvqtrgf-jvqtrgf.fhttrfgvbaf.hasbyybj_gnt";a:2:{i:0;R:40065;i:1;R:38893;}s:46:"1226:jvqtrgf-jvqtrgf.fhttrfgvbaf.hasbyybj_hfre";a:2:{i:0;R:40065;i:1;R:38893;}s:39:"1226:jvqtrgf-jvqtrgf.pbagevohgbef.gvgyr";a:2:{i:0;R:40065;i:1;R:38893;}s:45:"1226:jvqtrgf-jvqtrgf.pbagevohgbef.qrfpevcgvba";a:2:{i:0;R:40065;i:1;R:38893;}s:41:"1226:jvqtrgf-jvqtrgf.tebhc_argjbexf.gvgyr";a:2:{i:0;R:40065;i:1;R:38893;}s:47:"1226:jvqtrgf-jvqtrgf.tebhc_argjbexf.qrfpevcgvba";a:2:{i:0;R:40065;i:1;R:38893;}s:32:"1226:jvqtrgf-jvqtrgf.funer.gvgyr";a:2:{i:0;R:40065;i:1;R:38893;}s:38:"1226:jvqtrgf-jvqtrgf.funer.qrfpevcgvba";a:2:{i:0;R:40065;i:1;R:38893;}s:32:"1226:jvqtrgf-jvqtrgf.nobhg.gvgyr";a:2:{i:0;R:40065;i:1;R:38893;}s:38:"1226:jvqtrgf-jvqtrgf.nobhg.qrfpevcgvba";a:2:{i:0;R:40065;i:1;R:38893;}s:28:"1226:jvxv-jvxv.uvfgbel.gvgyr";a:2:{i:0;s:12:"shapado-wiki";i:1;R:38893;}s:40:"1226:jvxv-jvxv.uvfgbel.cerivbhf_irefvbaf";a:2:{i:0;R:40153;i:1;R:38893;}s:38:"1226:jvxv-jvxv.uvfgbel.pheerag_irefvba";a:2:{i:0;R:40153;i:1;R:38893;}s:30:"1226:jvxv-jvxv.uvfgbel.irefvba";a:2:{i:0;R:40153;i:1;R:38893;}s:38:"1226:jvxv-jvxv.uvfgbel.irefvba_fhzznel";a:2:{i:0;R:40153;i:1;R:38893;}s:25:"1226:jvxv-jvxv.qvss.gvgyr";a:2:{i:0;R:40153;i:1;R:38893;}s:29:"1226:jvxv-jvxv.npgvbaf.erireg";a:2:{i:0;R:40153;i:1;R:38893;}s:32:"1226:jvxv-jvxv.npgvbaf.fubj_qvss";a:2:{i:0;R:40153;i:1;R:38893;}s:34:"1226:jvxv-jvxv.npgvbaf.nyy_uvfgbel";a:2:{i:0;R:40153;i:1;R:38893;}s:39:"1226:jvxv-jvxv.npgvbaf.onpx_gb_dhrfgvba";a:2:{i:0;R:40153;i:1;R:38893;}s:39:"1226:jvxv-jvxv.zbqry.nggevohgrf.zrffntr";a:2:{i:0;R:40153;i:1;R:38893;}s:18:"1240:pngqbja-gvgyr";a:2:{i:0;s:13:"tsint-catdown";i:1;s:11:"tsint-0-all";}s:21:"1240:pngqbja-fhogvgyr";a:2:{i:0;R:40165;i:1;R:40166;}s:20:"1240:pngqbja-cebwrpg";a:2:{i:0;R:40165;i:1;R:40166;}s:21:"1240:pngqbja-pngrtbel";a:2:{i:0;R:40165;i:1;R:40166;}s:25:"1240:pngqbja-guhzoanvyvat";a:2:{i:0;R:40165;i:1;R:40166;}s:22:"1240:pngqbja-znk-jvqgu";a:2:{i:0;R:40165;i:1;R:40166;}s:23:"1240:pngqbja-znk-urvtug";a:2:{i:0;R:40165;i:1;R:40166;}s:26:"1240:pngqbja-vainyvq-jvqgu";a:2:{i:0;R:40165;i:1;R:40166;}s:27:"1240:pngqbja-vainyvq-urvtug";a:2:{i:0;R:40165;i:1;R:40166;}s:28:"1240:pngqbja-ab-fhpu-cebwrpg";a:2:{i:0;R:40165;i:1;R:40166;}s:22:"1240:pngqbja-ab-vzntrf";a:2:{i:0;R:40165;i:1;R:40166;}s:28:"1240:pngqbja-pngrtbel-vf-hey";a:2:{i:0;R:40165;i:1;R:40166;}s:40:"1240:pngqbja-pngrtbel-pbagnvaf-anzrfcnpr";a:2:{i:0;R:40165;i:1;R:40166;}s:23:"1240:pngqbja-mvc-snvyrq";a:2:{i:0;R:40165;i:1;R:40166;}s:31:"1240:pngqbja-vzntr-nern-gbb-ovt";a:2:{i:0;R:40165;i:1;R:40166;}s:26:"1240:pngqbja-qbjaybnq-vasb";a:2:{i:0;R:40165;i:1;R:40166;}s:21:"1240:pngqbja-qbjaybnq";a:2:{i:0;R:40165;i:1;R:40166;}s:28:"1240:pngqbja-ernqzr-pbagragf";a:2:{i:0;R:40165;i:1;R:40166;}s:29:"1240:pngqbja-aba-ohaqyrq-jtrg";a:2:{i:0;R:40165;i:1;R:40166;}s:22:"1240:pngqbja-jtrg-vasb";a:2:{i:0;R:40165;i:1;R:40166;}s:25:"1240:pngqbja-fpnyvat-abar";a:2:{i:0;R:40165;i:1;R:40166;}s:26:"1240:pngqbja-fpnyvat-jvqgu";a:2:{i:0;R:40165;i:1;R:40166;}s:27:"1240:pngqbja-fpnyvat-urvtug";a:2:{i:0;R:40165;i:1;R:40166;}s:25:"1240:pngqbja-fpnyvat-obgu";a:2:{i:0;R:40165;i:1;R:40166;}s:28:"1240:pngqbja-fpevcg-svyranzr";a:2:{i:0;R:40165;i:1;R:40166;}s:28:"1240:pngqbja-ernqzr-svyranzr";a:2:{i:0;R:40165;i:1;R:40166;}s:25:"1240:pbzzbafurycre2-gvgyr";a:2:{i:0;s:20:"tsint-commonshelper2";i:1;R:40166;}s:29:"1240:pbzzbafurycre2-nggragvba";a:2:{i:0;R:40193;i:1;R:40166;}s:34:"1240:pbzzbafurycre2-pbzzbafurycre2";a:2:{i:0;R:40193;i:1;R:40166;}s:31:"1240:pbzzbafurycre2-qrfpevcgvba";a:2:{i:0;R:40193;i:1;R:40166;}s:31:"1240:pbzzbafurycre2-punatr_zrgn";a:2:{i:0;R:40193;i:1;R:40166;}s:29:"1240:pbzzbafurycre2-wven_yvax";a:2:{i:0;R:40193;i:1;R:40166;}s:28:"1240:pbzzbafurycre2-ynathntr";a:2:{i:0;R:40193;i:1;R:40166;}s:27:"1240:pbzzbafurycre2-cebwrpg";a:2:{i:0;R:40193;i:1;R:40166;}s:31:"1240:pbzzbafurycre2-fbhepr_svyr";a:2:{i:0;R:40193;i:1;R:40166;}s:31:"1240:pbzzbafurycre2-gnetrg_svyr";a:2:{i:0;R:40193;i:1;R:40166;}s:36:"1240:pbzzbafurycre2-pbzzbaf_hfreanzr";a:2:{i:0;R:40193;i:1;R:40166;}s:38:"1240:pbzzbafurycre2-pbzzbaf_gb_cebwrpg";a:2:{i:0;R:40193;i:1;R:40166;}s:38:"1240:pbzzbafurycre2-zbir_svyr_sebz_pbz";a:2:{i:0;R:40193;i:1;R:40166;}s:30:"1240:pbzzbafurycre2-pngrtbevrf";a:2:{i:0;R:40193;i:1;R:40166;}s:31:"1240:pbzzbafurycre2-erzbir_pngf";a:2:{i:0;R:40193;i:1;R:40166;}s:30:"1240:pbzzbafurycre2-purpxhfntr";a:2:{i:0;R:40193;i:1;R:40166;}s:34:"1240:pbzzbafurycre2-hfr_purpxhfntr";a:2:{i:0;R:40193;i:1;R:40166;}s:24:"1240:pbzzbafurycre2-ghfp";a:2:{i:0;R:40193;i:1;R:40166;}s:28:"1240:pbzzbafurycre2-hfr_ghfp";a:2:{i:0;R:40193;i:1;R:40166;}s:29:"1240:pbzzbafurycre2-ghfp_hfre";a:2:{i:0;R:40193;i:1;R:40166;}s:29:"1240:pbzzbafurycre2-ghfp_cnff";a:2:{i:0;R:40193;i:1;R:40166;}s:25:"1240:pbzzbafurycre2-qb_vg";a:2:{i:0;R:40193;i:1;R:40166;}s:38:"1240:pbzzbafurycre2-reebe_genafsre_hfe";a:2:{i:0;R:40193;i:1;R:40166;}s:36:"1240:pbzzbafurycre2-reebe_abg_rkvfgf";a:2:{i:0;R:40193;i:1;R:40166;}s:36:"1240:pbzzbafurycre2-reebe_ba_pbzzbaf";a:2:{i:0;R:40193;i:1;R:40166;}s:37:"1240:pbzzbafurycre2-reebe_svyr_rkvfgf";a:2:{i:0;R:40193;i:1;R:40166;}s:37:"1240:pbzzbafurycre2-reebe_qvss_rkvfgf";a:2:{i:0;R:40193;i:1;R:40166;}s:33:"1240:pbzzbafurycre2-reebe_ab_zrgn";a:2:{i:0;R:40193;i:1;R:40166;}s:38:"1240:pbzzbafurycre2-reebe_zrgn_ab_tbbq";a:2:{i:0;R:40193;i:1;R:40166;}s:34:"1240:pbzzbafurycre2-reebe_zrgn_onq";a:2:{i:0;R:40193;i:1;R:40166;}s:37:"1240:pbzzbafurycre2-bevtvany_jvxvgrkg";a:2:{i:0;R:40193;i:1;R:40166;}s:32:"1240:pbzzbafurycre2-arj_jvxvgrkg";a:2:{i:0;R:40193;i:1;R:40166;}s:32:"1240:pbzzbafurycre2-arj_svyranzr";a:2:{i:0;R:40193;i:1;R:40166;}s:38:"1240:pbzzbafurycre2-bhgchg_vasbezngvba";a:2:{i:0;R:40193;i:1;R:40166;}s:33:"1240:pbzzbafurycre2-hcybnq_fhozvg";a:2:{i:0;R:40193;i:1;R:40166;}s:31:"1240:pbzzbafurycre2-gnetrg_jvxv";a:2:{i:0;R:40193;i:1;R:40166;}s:37:"1240:pbzzbafurycre2-fgnaqneq_ynathntr";a:2:{i:0;R:40193;i:1;R:40166;}s:36:"1240:pbzzbafurycre2-fgnaqneq_cebwrpg";a:2:{i:0;R:40193;i:1;R:40166;}s:37:"1240:pbzzbafurycre2-reebe_obg_oybpxrq";a:2:{i:0;R:40193;i:1;R:40166;}s:37:"1240:pbzzbafurycre2-reebe_hcybnq_zrgn";a:2:{i:0;R:40193;i:1;R:40166;}s:37:"1240:pbzzbafurycre2-reebe_ghfp_snvyrq";a:2:{i:0;R:40193;i:1;R:40166;}s:38:"1240:pbzzbafurycre2-reebe_bayl_pbzzbaf";a:2:{i:0;R:40193;i:1;R:40166;}s:39:"1240:pbzzbafurycre2-hcybnq_pbageby_grkg";a:2:{i:0;R:40193;i:1;R:40166;}s:38:"1240:pbzzbafurycre2-reebe_pbzzbaf_hfre";a:2:{i:0;R:40193;i:1;R:40166;}s:38:"1240:pbzzbafurycre2-reebe_hcybnq_hfref";a:2:{i:0;R:40193;i:1;R:40166;}s:37:"1240:pbzzbafurycre2-reebe_hcybnq_svyr";a:2:{i:0;R:40193;i:1;R:40166;}s:30:"1240:pbzzbafurycre2-uryc_vageb";a:2:{i:0;R:40193;i:1;R:40166;}s:29:"1240:pbzzbafurycre2-uryc_wven";a:2:{i:0;R:40193;i:1;R:40166;}s:29:"1240:pbzzbafurycre2-uryc_znvy";a:2:{i:0;R:40193;i:1;R:40166;}s:32:"1240:pbzzbafurycre2-uryc_pbzzbaf";a:2:{i:0;R:40193;i:1;R:40166;}s:22:"1240:gfvaghvgvba-gvgyr";a:2:{i:0;s:10:"tsint-core";i:1;R:40166;}s:25:"1240:gfvaghvgvba-shyyanzr";a:2:{i:0;R:40244;i:1;R:40166;}s:33:"1240:gfvaghvgvba-pheerag-frggvatf";a:2:{i:0;R:40244;i:1;R:40166;}s:33:"1240:gfvaghvgvba-pheerag-ynathntr";a:2:{i:0;R:40244;i:1;R:40166;}s:32:"1240:gfvaghvgvba-frggvatf-yrtraq";a:2:{i:0;R:40244;i:1;R:40166;}s:32:"1240:gfvaghvgvba-pubbfr-ynathntr";a:2:{i:0;R:40244;i:1;R:40166;}s:30:"1240:gfvaghvgvba-pyrne-pbbxvrf";a:2:{i:0;R:40244;i:1;R:40166;}s:30:"1240:gfvaghvgvba-erarj-pbbxvrf";a:2:{i:0;R:40244;i:1;R:40166;}s:34:"1240:gfvaghvgvba-pbbxvr-rkcvengvba";a:2:{i:0;R:40244;i:1;R:40166;}s:37:"1240:gfvaghvgvba-pyrnepbbxvrf-fhpprff";a:2:{i:0;R:40244;i:1;R:40166;}s:37:"1240:gfvaghvgvba-erarjpbbxvrf-fhpprff";a:2:{i:0;R:40244;i:1;R:40166;}s:29:"1240:gfvaghvgvba-gno-bireivrj";a:2:{i:0;R:40244;i:1;R:40166;}s:29:"1240:gfvaghvgvba-gno-frggvatf";a:2:{i:0;R:40244;i:1;R:40166;}s:26:"1240:gfvaghvgvba-gno-nobhg";a:2:{i:0;R:40244;i:1;R:40166;}s:25:"1240:gfvaghvgvba-gno-qrzb";a:2:{i:0;R:40244;i:1;R:40166;}s:30:"1240:gfvaghvgvba-oy-zlfrggvatf";a:2:{i:0;R:40244;i:1;R:40166;}s:34:"1240:gfvaghvgvba-oy-zlfrggvatf-arj";a:2:{i:0;R:40244;i:1;R:40166;}s:25:"1240:gfvaghvgvba-oy-cebzb";a:2:{i:0;R:40244;i:1;R:40166;}s:34:"1240:gfvaghvgvba-oy-punatrynathntr";a:2:{i:0;R:40244;i:1;R:40166;}s:22:"1240:gfvaghvgvba-hfntr";a:2:{i:0;R:40244;i:1;R:40166;}s:36:"1240:gfvaghvgvba-uryc-genafyngr-gbby";a:2:{i:0;R:40244;i:1;R:40166;}s:35:"1240:gfvaghvgvba-uryc-genafyngr-nyy";a:2:{i:0;R:40244;i:1;R:40166;}s:39:"1240:gfvaghvgvba-uryc-genafyngr-gbbygvc";a:2:{i:0;R:40244;i:1;R:40166;}s:23:"1240:trareny-qngrsbezng";a:2:{i:0;s:13:"tsint-general";i:1;R:40166;}s:18:"1240:trareny-uryyb";a:2:{i:0;R:40268;i:1;R:40166;}s:20:"1240:trareny-jrypbzr";a:2:{i:0;R:40268;i:1;R:40166;}s:29:"1240:trareny-gbbyirefvbafgnzc";a:2:{i:0;R:40268;i:1;R:40166;}s:16:"1240:trareny-rgp";a:2:{i:0;R:40268;i:1;R:40166;}s:28:"1240:trareny-pbyba-frcnengbe";a:2:{i:0;R:40268;i:1;R:40166;}s:22:"1240:trareny-anzrfcnpr";a:2:{i:0;R:40268;i:1;R:40166;}s:24:"1240:trareny-sbez-fhozvg";a:2:{i:0;R:40268;i:1;R:40166;}s:23:"1240:trareny-sbez-erfrg";a:2:{i:0;R:40268;i:1;R:40166;}s:18:"1240:trareny-lrnef";a:2:{i:0;R:40268;i:1;R:40166;}s:18:"1240:trareny-jrrxf";a:2:{i:0;R:40268;i:1;R:40166;}s:17:"1240:trareny-qnlf";a:2:{i:0;R:40268;i:1;R:40166;}s:18:"1240:trareny-ubhef";a:2:{i:0;R:40268;i:1;R:40166;}s:20:"1240:trareny-zvahgrf";a:2:{i:0;R:40268;i:1;R:40166;}s:20:"1240:trareny-frpbaqf";a:2:{i:0;R:40268;i:1;R:40166;}s:31:"1240:trareny-ynfg-zbqvsvrq-qngr";a:2:{i:0;R:40268;i:1;R:40166;}s:24:"1240:trareny-ivrj-fbhepr";a:2:{i:0;R:40268;i:1;R:40166;}s:24:"1240:trareny-cneragurfrf";a:2:{i:0;R:40268;i:1;R:40166;}s:21:"1240:trgjvxvncv-gvgyr";a:2:{i:0;s:16:"tsint-getwikiapi";i:1;R:40166;}s:31:"1240:trgjvxvncv-sbezngf-urnqvat";a:2:{i:0;R:40287;i:1;R:40166;}s:21:"1240:trgjvxvncv-vachg";a:2:{i:0;R:40287;i:1;R:40166;}s:29:"1240:trgjvxvncv-ynory-jvxvvqf";a:2:{i:0;R:40287;i:1;R:40166;}s:26:"1240:trgjvxvncv-ab-zngpurf";a:2:{i:0;R:40287;i:1;R:40166;}s:22:"1240:trgjvxvncv-bhgchg";a:2:{i:0;R:40287;i:1;R:40166;}s:16:"1240:wneel-gvgyr";a:2:{i:0;s:11:"tsint-jarry";i:1;R:40166;}s:20:"1240:wneel-zbergbbyf";a:2:{i:0;R:40294;i:1;R:40166;}s:15:"1240:wneel-ohtf";a:2:{i:0;R:40294;i:1;R:40166;}s:19:"1240:wneel-pbzzragf";a:2:{i:0;R:40294;i:1;R:40166;}s:27:"1240:wneel-reebe-sbez-rzcgl";a:2:{i:0;R:40294;i:1;R:40166;}s:23:"1240:xevaxyr-nyjf-ynory";a:2:{i:0;s:13:"tsint-krinkle";i:1;R:40166;}s:28:"1240:xevaxyr-nyjf-fryrpgjvxv";a:2:{i:0;R:40300;i:1;R:40166;}s:32:"1240:xevaxyr-nyjf-tebhc-zhfghfrq";a:2:{i:0;R:40300;i:1;R:40166;}s:29:"1240:xevaxyr-nyjf-tebhc-nyynm";a:2:{i:0;R:40300;i:1;R:40166;}s:33:"1240:xevaxyr-sbez-yrtraq-frggvatf";a:2:{i:0;R:40300;i:1;R:40166;}s:23:"1240:zbahzragfncv-gvgyr";a:2:{i:0;s:18:"tsint-monumentsapi";i:1;R:40166;}s:30:"1240:zbahzragfncv-frnepu-gvgyr";a:2:{i:0;R:40306;i:1;R:40166;}s:43:"1240:zbahzragfncv-frnepu-zbahzragf-qngnonfr";a:2:{i:0;R:40306;i:1;R:40166;}s:39:"1240:zbahzragfncv-frnepu-gnoyr-gu-svryq";a:2:{i:0;R:40306;i:1;R:40166;}s:40:"1240:zbahzragfncv-frnepu-gnoyr-gu-svygre";a:2:{i:0;R:40306;i:1;R:40166;}s:40:"1240:zbahzragfncv-frnepu-gnoyr-gu-frnepu";a:2:{i:0;R:40306;i:1;R:40166;}s:38:"1240:zbahzragfncv-svygre-nyy-pbhagevrf";a:2:{i:0;R:40306;i:1;R:40166;}s:38:"1240:zbahzragfncv-svygre-nyy-ynathntrf";a:2:{i:0;R:40306;i:1;R:40166;}s:34:"1240:zbahzragfncv-qo-svryq-pbhagel";a:2:{i:0;R:40306;i:1;R:40166;}s:31:"1240:zbahzragfncv-qo-svryq-ynat";a:2:{i:0;R:40306;i:1;R:40166;}s:29:"1240:zbahzragfncv-qo-svryq-vq";a:2:{i:0;R:40306;i:1;R:40166;}s:31:"1240:zbahzragfncv-qo-svryq-anzr";a:2:{i:0;R:40306;i:1;R:40166;}s:34:"1240:zbahzragfncv-qo-svryq-nqqerff";a:2:{i:0;R:40306;i:1;R:40166;}s:39:"1240:zbahzragfncv-qo-svryq-zhavpvcnyvgl";a:2:{i:0;R:40306;i:1;R:40166;}s:30:"1240:zbahzragfncv-qo-svryq-yng";a:2:{i:0;R:40306;i:1;R:40166;}s:30:"1240:zbahzragfncv-qo-svryq-yba";a:2:{i:0;R:40306;i:1;R:40166;}s:32:"1240:zbahzragfncv-qo-svryq-vzntr";a:2:{i:0;R:40306;i:1;R:40166;}s:34:"1240:zbahzragfncv-qo-svryq-punatrq";a:2:{i:0;R:40306;i:1;R:40166;}s:33:"1240:zbahzragfncv-qo-svryq-fbhepr";a:2:{i:0;R:40306;i:1;R:40166;}s:43:"1240:zbahzragfncv-qo-svryq-zbahzrag_negvpyr";a:2:{i:0;R:40306;i:1;R:40166;}s:41:"1240:zbahzragfncv-qo-svryq-ertvfgenag_hey";a:2:{i:0;R:40306;i:1;R:40166;}s:43:"1240:zbahzragfncv-gbbyobk-ynory-frnepugvccf";a:2:{i:0;R:40306;i:1;R:40166;}s:36:"1240:zbahzragfncv-gbbyobk-zrgn-gvgyr";a:2:{i:0;R:40306;i:1;R:40166;}s:36:"1240:zbahzragfncv-gbbyobk-znva-gvgyr";a:2:{i:0;R:40306;i:1;R:40166;}s:42:"1240:zbahzragfncv-gbbyobk-znva-qrfpevcgvba";a:2:{i:0;R:40306;i:1;R:40166;}s:44:"1240:zbahzragfncv-gbbyobk-jvxvybirfzbahzragf";a:2:{i:0;R:40306;i:1;R:40166;}s:38:"1240:zbahzragfncv-gbbyobk-ani-ubzrcntr";a:2:{i:0;R:40306;i:1;R:40166;}s:40:"1240:zbahzragfncv-gbbyobk-ani-fgngvfgvpf";a:2:{i:0;R:40306;i:1;R:40166;}s:36:"1240:zbahzragfncv-gbbyobk-ani-frnepu";a:2:{i:0;R:40306;i:1;R:40166;}s:47:"1240:zbahzragfncv-gbbyobk-gvgyr-frnepuzbahzragf";a:2:{i:0;R:40306;i:1;R:40166;}s:22:"1240:becunagnyx2-gvgyr";a:2:{i:0;s:17:"tsint-orphantalk2";i:1;R:40166;}s:34:"1240:becunagnyx2-fryrpg-jvxv-svefg";a:2:{i:0;R:40337;i:1;R:40166;}s:30:"1240:becunagnyx2-uvqrerqverpgf";a:2:{i:0;R:40337;i:1;R:40166;}s:29:"1240:becunagnyx2-uvqrfhocntrf";a:2:{i:0;R:40337;i:1;R:40166;}s:22:"1240:becunagnyx2-yvzvg";a:2:{i:0;R:40337;i:1;R:40166;}s:21:"1240:becunagnyx2-cntr";a:2:{i:0;R:40337;i:1;R:40166;}s:25:"1240:becunagnyx2-erqverpg";a:2:{i:0;R:40337;i:1;R:40166;}s:23:"1240:becunagnyx2-bhgchg";a:2:{i:0;R:40337;i:1;R:40166;}s:23:"1240:becunagnyx2-hcqngr";a:2:{i:0;R:40337;i:1;R:40166;}s:29:"1240:becunagnyx2-gbbyf-qryrgr";a:2:{i:0;R:40337;i:1;R:40166;}s:28:"1240:becunagnyx2-gbbyf-yvaxf";a:2:{i:0;R:40337;i:1;R:40166;}s:30:"1240:becunagnyx2-gbbyf-fhowrpg";a:2:{i:0;R:40337;i:1;R:40166;}s:27:"1240:becunagnyx2-gbbyf-uvfg";a:2:{i:0;R:40337;i:1;R:40166;}s:27:"1240:becunagnyx2-gbbyf-phee";a:2:{i:0;R:40337;i:1;R:40166;}s:34:"1240:becunagnyx2-gbbyf-tybonyhfntr";a:2:{i:0;R:40337;i:1;R:40166;}s:30:"1240:becunagnyx2-qryrgrfhzznel";a:2:{i:0;R:40337;i:1;R:40166;}s:26:"1240:becunagnyx2-aberfhygf";a:2:{i:0;R:40337;i:1;R:40166;}s:31:"1240:becunagnyx2-erfhygfyvzvgrq";a:2:{i:0;R:40337;i:1;R:40166;}s:34:"1240:erpragnabalzbhfnpgvivgl-gvgyr";a:2:{i:0;s:29:"tsint-recentanonymousactivity";i:1;R:40166;}s:23:"1240:fitgenafyngr-gvgyr";a:2:{i:0;s:18:"tsint-svgtranslate";i:1;R:40166;}s:32:"1240:fitgenafyngr-reebe-gelntnva";a:2:{i:0;R:40358;i:1;R:40166;}s:31:"1240:fitgenafyngr-reebe-abguvat";a:2:{i:0;R:40358;i:1;R:40166;}s:30:"1240:fitgenafyngr-reebe-abgfit";a:2:{i:0;R:40358;i:1;R:40166;}s:34:"1240:fitgenafyngr-reebe-harkcrpgrq";a:2:{i:0;R:40358;i:1;R:40166;}s:32:"1240:fitgenafyngr-reebe-abgsbhaq";a:2:{i:0;R:40358;i:1;R:40166;}s:30:"1240:fitgenafyngr-reebe-hcybnq";a:2:{i:0;R:40358;i:1;R:40166;}s:35:"1240:fitgenafyngr-ortva-genafyngvba";a:2:{i:0;R:40358;i:1;R:40166;}s:29:"1240:fitgenafyngr-gu-bevtvany";a:2:{i:0;R:40358;i:1;R:40166;}s:32:"1240:fitgenafyngr-gu-genafyngvba";a:2:{i:0;R:40358;i:1;R:40166;}s:29:"1240:fitgenafyngr-gu-ynathntr";a:2:{i:0;R:40358;i:1;R:40166;}s:29:"1240:fitgenafyngr-gu-hfreanzr";a:2:{i:0;R:40358;i:1;R:40166;}s:29:"1240:fitgenafyngr-gu-cnffjbeq";a:2:{i:0;R:40358;i:1;R:40166;}s:27:"1240:fitgenafyngr-gu-zrgubq";a:2:{i:0;R:40358;i:1;R:40166;}s:29:"1240:fitgenafyngr-bcgvba-ghfp";a:2:{i:0;R:40358;i:1;R:40166;}s:31:"1240:fitgenafyngr-bcgvba-znahny";a:2:{i:0;R:40358;i:1;R:40166;}s:25:"1240:fitgenafyngr-cerivrj";a:2:{i:0;R:40358;i:1;R:40166;}s:27:"1240:fitgenafyngr-genafyngr";a:2:{i:0;R:40358;i:1;R:40166;}s:40:"1240:fitgenafyngr-genafyngr-vafgehpgvbaf";a:2:{i:0;R:40358;i:1;R:40166;}s:41:"1240:fitgenafyngr-sbezng-svyranzr-rknzcyr";a:2:{i:0;R:40358;i:1;R:40166;}s:40:"1240:fitgenafyngr-sbezng-shyyhey-rknzcyr";a:2:{i:0;R:40358;i:1;R:40166;}s:32:"1240:fitgenafyngr-fitvachg-ynory";a:2:{i:0;R:40358;i:1;R:40166;}s:30:"1240:fitgenafyngr-fgngf-sbbgre";a:2:{i:0;R:40358;i:1;R:40166;}s:27:"1240:fitgenafyngr-hcybnqvat";a:2:{i:0;R:40358;i:1;R:40166;}s:33:"1240:fitgenafyngr-hcybnq-pbzcyrgr";a:2:{i:0;R:40358;i:1;R:40166;}s:37:"1240:fitgenafyngr-rqvgqrfpevcgvbacntr";a:2:{i:0;R:40358;i:1;R:40166;}s:28:"1240:fitgenafyngr-qvfpynvzre";a:2:{i:0;R:40358;i:1;R:40166;}s:33:"1240:fitgenafyngr-nhgube-pbzcyrgr";a:2:{i:0;R:40358;i:1;R:40166;}s:30:"1240:fitgenafyngr-cerivrj-uvqr";a:2:{i:0;R:40358;i:1;R:40166;}s:33:"1240:fitgenafyngr-cerivrj-erserfu";a:2:{i:0;R:40358;i:1;R:40166;}s:35:"1240:fitgenafyngr-reebe-zhfg-npprcg";a:2:{i:0;R:40358;i:1;R:40166;}s:35:"1240:fitgenafyngr-reebe-ghfp-snvyrq";a:2:{i:0;R:40358;i:1;R:40166;}s:37:"1240:fitgenafyngr-qrfpevcgvba-yvprafr";a:2:{i:0;R:40358;i:1;R:40166;}s:26:"1240:fitgenafyngr-svanyvfr";a:2:{i:0;R:40358;i:1;R:40166;}s:24:"1240:grzcyngrpbhag-gvgyr";a:2:{i:0;s:19:"tsint-templatecount";i:1;R:40166;}s:32:"1240:grzcyngrpbhag-ragre-qrgnvyf";a:2:{i:0;R:40393;i:1;R:40166;}s:31:"1240:grzcyngrpbhag-vagebqhpgvba";a:2:{i:0;R:40393;i:1;R:40166;}s:33:"1240:grzcyngrpbhag-ynathntr-ynory";a:2:{i:0;R:40393;i:1;R:40166;}s:34:"1240:grzcyngrpbhag-anzrfcnpr-ynory";a:2:{i:0;R:40393;i:1;R:40166;}s:33:"1240:grzcyngrpbhag-cntranzr-ynory";a:2:{i:0;R:40393;i:1;R:40166;}s:43:"1240:grzcyngrpbhag-genafpyhfvba-pbhag-ynory";a:2:{i:0;R:40393;i:1;R:40166;}s:37:"1240:grzcyngrpbhag-genafpyhfvba-pbhag";a:2:{i:0;R:40393;i:1;R:40166;}s:35:"1240:grzcyngrpbhag-reebe-fhttrfgvba";a:2:{i:0;R:40393;i:1;R:40166;}s:29:"1240:grzcyngrpbhag-gvzr-ynory";a:2:{i:0;R:40393;i:1;R:40166;}s:42:"1240:gbbyfreirefgnghf-gbbyfreire-fgnghf-bx";a:2:{i:0;s:22:"tsint-toolserverstatus";i:1;R:40166;}s:44:"1240:gbbyfreirefgnghf-gbbyfreire-fgnghf-vasb";a:2:{i:0;R:40404;i:1;R:40166;}s:44:"1240:gbbyfreirefgnghf-gbbyfreire-fgnghf-jnea";a:2:{i:0;R:40404;i:1;R:40166;}s:44:"1240:gbbyfreirefgnghf-gbbyfreire-fgnghf-qbja";a:2:{i:0;R:40404;i:1;R:40166;}s:44:"1240:gbbyfreirefgnghf-gbbyfreire-fgnghf-reeb";a:2:{i:0;R:40404;i:1;R:40166;}s:47:"1240:gbbyfreirefgnghf-gbbyfreire-fgnghf-haxabja";a:2:{i:0;R:40404;i:1;R:40166;}s:47:"1240:gbbyfreirefgnghf-gbbyfreire-fgnghf-zvffvat";a:2:{i:0;R:40404;i:1;R:40166;}s:48:"1240:gbbyfreirefgnghf-gbbyfreire-fgnghf-fubeg-bx";a:2:{i:0;R:40404;i:1;R:40166;}s:50:"1240:gbbyfreirefgnghf-gbbyfreire-fgnghf-fubeg-vasb";a:2:{i:0;R:40404;i:1;R:40166;}s:50:"1240:gbbyfreirefgnghf-gbbyfreire-fgnghf-fubeg-jnea";a:2:{i:0;R:40404;i:1;R:40166;}s:50:"1240:gbbyfreirefgnghf-gbbyfreire-fgnghf-fubeg-qbja";a:2:{i:0;R:40404;i:1;R:40166;}s:50:"1240:gbbyfreirefgnghf-gbbyfreire-fgnghf-fubeg-reeb";a:2:{i:0;R:40404;i:1;R:40166;}s:53:"1240:gbbyfreirefgnghf-gbbyfreire-fgnghf-fubeg-haxabja";a:2:{i:0;R:40404;i:1;R:40166;}s:53:"1240:gbbyfreirefgnghf-gbbyfreire-fgnghf-fubeg-zvffvat";a:2:{i:0;R:40404;i:1;R:40166;}s:14:"1240:jyz-gvgyr";a:2:{i:0;s:9:"tsint-wlm";i:1;R:40166;}s:13:"1240:jyz-svyr";a:2:{i:0;R:40419;i:1;R:40166;}s:22:"1240:jyz-zbahzrag-glcr";a:2:{i:0;R:40419;i:1;R:40166;}s:20:"1240:jyz-zbahzrag-vq";a:2:{i:0;R:40419;i:1;R:40166;}s:17:"1240:jyz-cebivapr";a:2:{i:0;R:40419;i:1;R:40166;}s:17:"1240:jyz-pbznedhr";a:2:{i:0;R:40419;i:1;R:40166;}s:33:"1240:jyz-cebivapr-pbznedhr-wbvare";a:2:{i:0;R:40419;i:1;R:40166;}s:17:"1240:jyz-pbzcrgrf";a:2:{i:0;R:40419;i:1;R:40166;}s:15:"1240:jyz-nhgube";a:2:{i:0;R:40419;i:1;R:40166;}s:20:"1240:jyz-hcybnq-gvzr";a:2:{i:0;R:40419;i:1;R:40166;}s:16:"1240:jyz-qryrgrq";a:2:{i:0;R:40419;i:1;R:40166;}s:17:"1240:jyz-pbaphefn";a:2:{i:0;R:40419;i:1;R:40166;}s:20:"1240:jyz-ab-pbaphefn";a:2:{i:0;R:40419;i:1;R:40166;}s:22:"1240:jyz-abg-ninvynoyr";a:2:{i:0;R:40419;i:1;R:40166;}s:21:"1240:jyz-qngr-haxabja";a:2:{i:0;R:40419;i:1;R:40166;}s:21:"1240:jyz-gbgny-vzntrf";a:2:{i:0;R:40419;i:1;R:40166;}s:34:"1240:jyz-ivrj-hapngrtbevmrq-vzntrf";a:2:{i:0;R:40419;i:1;R:40166;}s:19:"1240:jyz-cebivqr-vq";a:2:{i:0;R:40419;i:1;R:40166;}s:29:"1240:jyz-fubj-vzntrf-onq-bayl";a:2:{i:0;R:40419;i:1;R:40166;}s:24:"1240:jyz-fubj-vzntrf-nyy";a:2:{i:0;R:40419;i:1;R:40166;}s:28:"1240:jyz-fubj-vzntrf-erzbirq";a:2:{i:0;R:40419;i:1;R:40166;}s:25:"1240:jyz-frnepu-zbahzragf";a:2:{i:0;R:40419;i:1;R:40166;}s:23:"1240:jyz-ivrj-serdhrapl";a:2:{i:0;R:40419;i:1;R:40166;}s:18:"1240:jyz-ivrj-ppnn";a:2:{i:0;R:40419;i:1;R:40166;}s:22:"1240:jyz-ivrj-cebivapr";a:2:{i:0;R:40419;i:1;R:40166;}s:17:"1240:jyz-vq-ynory";a:2:{i:0;R:40419;i:1;R:40166;}s:20:"1240:jyz-qngr-sbezng";a:2:{i:0;R:40419;i:1;R:40166;}s:16:"1240:jyz-vq-abar";a:2:{i:0;R:40419;i:1;R:40166;}s:25:"1240:jyz-zbahzrag-urnqvat";a:2:{i:0;R:40419;i:1;R:40166;}s:22:"1240:jyz-pbhag-urnqvat";a:2:{i:0;R:40419;i:1;R:40166;}s:17:"1240:jyz-ovp-yvfg";a:2:{i:0;R:40419;i:1;R:40166;}s:20:"1240:jyz-ovp-tnyyrel";a:2:{i:0;R:40419;i:1;R:40166;}s:23:"1240:jyz-tnyyrel-urnqre";a:2:{i:0;R:40419;i:1;R:40166;}s:29:"1240:jyz-tnyyrel-urnqre-cynpr";a:2:{i:0;R:40419;i:1;R:40166;}s:27:"1240:jyz-jnyy-bs-funzr-grkg";a:2:{i:0;R:40419;i:1;R:40166;}s:23:"1240:jyz-nhgube-urnqvat";a:2:{i:0;R:40419;i:1;R:40166;}s:21:"1240:jyz-ovp-yvfg-onq";a:2:{i:0;R:40419;i:1;R:40166;}s:21:"1240:jyz-ovp-yvfg-nyy";a:2:{i:0;R:40419;i:1;R:40166;}s:21:"1240:jyz-haertvfgrerq";a:2:{i:0;R:40419;i:1;R:40166;}s:19:"1240:jyz-hfref-grkg";a:2:{i:0;R:40419;i:1;R:40166;}s:19:"1240:jyz-hfref-yvfg";a:2:{i:0;R:40419;i:1;R:40166;}s:26:"1240:jyz-qvfgvpg-zbahzragf";a:2:{i:0;R:40419;i:1;R:40166;}s:25:"1240:jyz-cebivapr-urnqvat";a:2:{i:0;R:40419;i:1;R:40166;}s:22:"1240:jyz-cebivapr-abar";a:2:{i:0;R:40419;i:1;R:40166;}s:21:"1240:jyz-ppnn-urnqvat";a:2:{i:0;R:40419;i:1;R:40166;}s:24:"1232:npuvrirzragfvv-qrfp";a:2:{i:0;s:20:"wikia-achievementsii";i:1;s:11:"wikia-0-all";}s:30:"1232:npuvrirzragf-hcybnq-reebe";a:2:{i:0;R:40465;i:1;R:40466;}s:36:"1232:npuvrirzragf-hcybnq-abg-nyybjrq";a:2:{i:0;R:40465;i:1;R:40466;}s:39:"1232:npuvrirzragf-aba-rkvfgvat-pngrtbel";a:2:{i:0;R:40465;i:1;R:40466;}s:49:"1232:npuvrirzragf-rqvg-cyhf-pngrtbel-genpx-rkvfgf";a:2:{i:0;R:40465;i:1;R:40466;}s:34:"1232:npuvrirzragf-ab-fgho-pngrtbel";a:2:{i:0;R:40465;i:1;R:40466;}s:19:"1232:evtug-cyngvahz";a:2:{i:0;R:40465;i:1;R:40466;}s:33:"1232:evtug-fcbafberq-npuvrirzragf";a:2:{i:0;R:40465;i:1;R:40466;}s:26:"1232:npuvrirzragf-cyngvahz";a:2:{i:0;R:40465;i:1;R:40466;}s:22:"1232:npuvrirzragf-tbyq";a:2:{i:0;R:40465;i:1;R:40466;}s:24:"1232:npuvrirzragf-fvyire";a:2:{i:0;R:40465;i:1;R:40466;}s:24:"1232:npuvrirzragf-oebamr";a:2:{i:0;R:40465;i:1;R:40466;}s:29:"1232:npuvrirzragf-tbyq-cbvagf";a:2:{i:0;R:40465;i:1;R:40466;}s:31:"1232:npuvrirzragf-fvyire-cbvagf";a:2:{i:0;R:40465;i:1;R:40466;}s:31:"1232:npuvrirzragf-oebamr-cbvagf";a:2:{i:0;R:40465;i:1;R:40466;}s:26:"1232:npuvrirzragf-lbh-zhfg";a:2:{i:0;R:40465;i:1;R:40466;}s:23:"1232:yrnqreobneq-ohggba";a:2:{i:0;R:40465;i:1;R:40466;}s:33:"1232:npuvrirzragf-znfgurnq-cbvagf";a:2:{i:0;R:40465;i:1;R:40466;}s:34:"1232:npuvrirzragf-cebsvyr-gvgyr-ab";a:2:{i:0;R:40465;i:1;R:40466;}s:27:"1232:npuvrirzragf-ab-onqtrf";a:2:{i:0;R:40465;i:1;R:40466;}s:33:"1232:npuvrirzragf-genpx-anzr-rqvg";a:2:{i:0;R:40465;i:1;R:40466;}s:36:"1232:npuvrirzragf-genpx-anzr-cvpgher";a:2:{i:0;R:40465;i:1;R:40466;}s:37:"1232:npuvrirzragf-genpx-anzr-pngrtbel";a:2:{i:0;R:40465;i:1;R:40466;}s:37:"1232:npuvrirzragf-genpx-anzr-oybtcbfg";a:2:{i:0;R:40465;i:1;R:40466;}s:40:"1232:npuvrirzragf-genpx-anzr-oybtpbzzrag";a:2:{i:0;R:40465;i:1;R:40466;}s:33:"1232:npuvrirzragf-genpx-anzr-ybir";a:2:{i:0;R:40465;i:1;R:40466;}s:36:"1232:npuvrirzragf-genpx-anzr-funevat";a:2:{i:0;R:40465;i:1;R:40466;}s:36:"1232:npuvrirzragf-abgvsvpngvba-gvgyr";a:2:{i:0;R:40465;i:1;R:40466;}s:39:"1232:npuvrirzragf-abgvsvpngvba-fhogvgyr";a:2:{i:0;R:40465;i:1;R:40466;}s:35:"1232:npuvrirzragf-abgvsvpngvba-yvax";a:2:{i:0;R:40465;i:1;R:40466;}s:24:"1232:npuvrirzragf-cbvagf";a:2:{i:0;R:40465;i:1;R:40466;}s:35:"1232:npuvrirzragf-cbvagf-jvgu-oernx";a:2:{i:0;R:40465;i:1;R:40466;}s:24:"1232:npuvrirzragf-rnearq";a:2:{i:0;R:40465;i:1;R:40466;}s:31:"1232:npuvrirzragf-cebsvyr-gvgyr";a:2:{i:0;R:40465;i:1;R:40466;}s:42:"1232:npuvrirzragf-cebsvyr-gvgyr-punyyratrf";a:2:{i:0;R:40465;i:1;R:40466;}s:35:"1232:npuvrirzragf-cebsvyr-phfgbzvmr";a:2:{i:0;R:40465;i:1;R:40466;}s:24:"1232:npuvrirzragf-enaxrq";a:2:{i:0;R:40465;i:1;R:40466;}s:25:"1232:npuvrirzragf-ivrjnyy";a:2:{i:0;R:40465;i:1;R:40466;}s:26:"1232:npuvrirzragf-ivrjyrff";a:2:{i:0;R:40465;i:1;R:40466;}s:37:"1232:npuvrirzragf-cebsvyr-gvgyr-bnfvf";a:2:{i:0;R:40465;i:1;R:40466;}s:30:"1232:npuvrirzragf-enaxrq-bnfvf";a:2:{i:0;R:40465;i:1;R:40466;}s:31:"1232:npuvrirzragf-ivrjnyy-bnfvf";a:2:{i:0;R:40465;i:1;R:40466;}s:29:"1232:npuvrirzragf-gbttyr-uvqr";a:2:{i:0;R:40465;i:1;R:40466;}s:27:"1232:yrnqreobneq-vageb-uvqr";a:2:{i:0;R:40465;i:1;R:40466;}s:27:"1232:yrnqreobneq-vageb-bcra";a:2:{i:0;R:40465;i:1;R:40466;}s:31:"1232:yrnqreobneq-vageb-urnqyvar";a:2:{i:0;R:40465;i:1;R:40466;}s:22:"1232:yrnqreobneq-vageb";a:2:{i:0;R:40465;i:1;R:40466;}s:16:"1232:yrnqreobneq";a:2:{i:0;R:40465;i:1;R:40466;}s:23:"1232:npuvrirzragf-gvgyr";a:2:{i:0;R:40465;i:1;R:40466;}s:22:"1232:yrnqreobneq-gvgyr";a:2:{i:0;R:40465;i:1;R:40466;}s:38:"1232:npuvrirzragf-erprag-rnearq-onqtrf";a:2:{i:0;R:40465;i:1;R:40466;}s:29:"1232:npuvrirzragf-erprag-vasb";a:2:{i:0;R:40465;i:1;R:40466;}s:35:"1232:npuvrirzragf-npgvivglsrrq-vasb";a:2:{i:0;R:40465;i:1;R:40466;}s:40:"1232:npuvrirzragf-yrnqreobneq-qvfpynvzre";a:2:{i:0;R:40465;i:1;R:40466;}s:40:"1232:npuvrirzragf-yrnqreobneq-enax-ynory";a:2:{i:0;R:40465;i:1;R:40466;}s:42:"1232:npuvrirzragf-yrnqreobneq-zrzore-ynory";a:2:{i:0;R:40465;i:1;R:40466;}s:42:"1232:npuvrirzragf-yrnqreobneq-cbvagf-ynory";a:2:{i:0;R:40465;i:1;R:40466;}s:36:"1232:npuvrirzragf-yrnqreobneq-cbvagf";a:2:{i:0;R:40465;i:1;R:40466;}s:56:"1232:npuvrirzragf-yrnqreobneq-zbfg-erpragyl-rnearq-ynory";a:2:{i:0;R:40465;i:1;R:40466;}s:22:"1232:npuvrirzragf-fraq";a:2:{i:0;R:40465;i:1;R:40466;}s:22:"1232:npuvrirzragf-fnir";a:2:{i:0;R:40465;i:1;R:40466;}s:26:"1232:npuvrirzragf-eriregrq";a:2:{i:0;R:40465;i:1;R:40466;}s:27:"1232:npuvrirzragf-phfgbzvmr";a:2:{i:0;R:40465;i:1;R:40466;}s:46:"1232:npuvrirzragf-phfgbzvmr-arj-pngrtbel-genpx";a:2:{i:0;R:40465;i:1;R:40466;}s:30:"1232:npuvrirzragf-ranoyr-genpx";a:2:{i:0;R:40465;i:1;R:40466;}s:24:"1232:npuvrirzragf-erireg";a:2:{i:0;R:40465;i:1;R:40466;}s:31:"1232:npuvrirzragf-fcrpvny-fnirq";a:2:{i:0;R:40465;i:1;R:40466;}s:25:"1232:npuvrirzragf-fcrpvny";a:2:{i:0;R:40465;i:1;R:40466;}s:24:"1232:npuvrirzragf-frperg";a:2:{i:0;R:40465;i:1;R:40466;}s:26:"1232:npuvrirzragfphfgbzvmr";a:2:{i:0;R:40465;i:1;R:40466;}s:29:"1232:npuvrirzragf-nobhg-gvgyr";a:2:{i:0;R:40465;i:1;R:40466;}s:31:"1232:npuvrirzragf-nobhg-pbagrag";a:2:{i:0;R:40465;i:1;R:40466;}s:47:"1232:npuvrirzragf-rqvg-cyhf-pngrtbel-genpx-anzr";a:2:{i:0;R:40465;i:1;R:40466;}s:49:"1232:npuvrirzragf-perngr-rqvg-cyhf-pngrtbel-gvgyr";a:2:{i:0;R:40465;i:1;R:40466;}s:51:"1232:npuvrirzragf-perngr-rqvg-cyhf-pngrtbel-pbagrag";a:2:{i:0;R:40465;i:1;R:40466;}s:43:"1232:npuvrirzragf-perngr-rqvg-cyhf-pngrtbel";a:2:{i:0;R:40465;i:1;R:40466;}s:13:"1232:cyngvahz";a:2:{i:0;R:40465;i:1;R:40466;}s:58:"1232:npuvrirzragf-pbzzhavgl-cyngvahz-njneqrq-rznvy-fhowrpg";a:2:{i:0;R:40465;i:1;R:40466;}s:60:"1232:npuvrirzragf-pbzzhavgl-cyngvahz-njneqrq-rznvy-obql-grkg";a:2:{i:0;R:40465;i:1;R:40466;}s:60:"1232:npuvrirzragf-pbzzhavgl-cyngvahz-njneqrq-rznvy-obql-ugzy";a:2:{i:0;R:40465;i:1;R:40466;}s:48:"1232:npuvrirzragf-pbzzhavgl-cyngvahz-njneqrq-sbe";a:2:{i:0;R:40465;i:1;R:40466;}s:48:"1232:npuvrirzragf-pbzzhavgl-cyngvahz-ubj-gb-rnea";a:2:{i:0;R:40465;i:1;R:40466;}s:56:"1232:npuvrirzragf-pbzzhavgl-cyngvahz-njneqrq-sbe-rknzcyr";a:2:{i:0;R:40465;i:1;R:40466;}s:56:"1232:npuvrirzragf-pbzzhavgl-cyngvahz-ubj-gb-rnea-rknzcyr";a:2:{i:0;R:40465;i:1;R:40466;}s:48:"1232:npuvrirzragf-pbzzhavgl-cyngvahz-onqtr-vzntr";a:2:{i:0;R:40465;i:1;R:40466;}s:47:"1232:npuvrirzragf-pbzzhavgl-cyngvahz-njneqrq-gb";a:2:{i:0;R:40465;i:1;R:40466;}s:51:"1232:npuvrirzragf-pbzzhavgl-cyngvahz-pheerag-onqtrf";a:2:{i:0;R:40465;i:1;R:40466;}s:49:"1232:npuvrirzragf-pbzzhavgl-cyngvahz-perngr-onqtr";a:2:{i:0;R:40465;i:1;R:40466;}s:44:"1232:npuvrirzragf-pbzzhavgl-cyngvahz-ranoyrq";a:2:{i:0;R:40465;i:1;R:40466;}s:49:"1232:npuvrirzragf-pbzzhavgl-cyngvahz-fubj-erpragf";a:2:{i:0;R:40465;i:1;R:40466;}s:41:"1232:npuvrirzragf-pbzzhavgl-cyngvahz-rqvg";a:2:{i:0;R:40465;i:1;R:40466;}s:41:"1232:npuvrirzragf-pbzzhavgl-cyngvahz-fnir";a:2:{i:0;R:40465;i:1;R:40466;}s:43:"1232:npuvrirzragf-pbzzhavgl-cyngvahz-pnapry";a:2:{i:0;R:40465;i:1;R:40466;}s:52:"1232:npuvrirzragf-pbzzhavgl-cyngvahz-fcbafberq-ynory";a:2:{i:0;R:40465;i:1;R:40466;}s:66:"1232:npuvrirzragf-pbzzhavgl-cyngvahz-fcbafberq-ubire-pbagrag-ynory";a:2:{i:0;R:40465;i:1;R:40466;}s:79:"1232:npuvrirzragf-pbzzhavgl-cyngvahz-fcbafberq-onqtr-vzcerffvba-cvkry-hey-ynory";a:2:{i:0;R:40465;i:1;R:40466;}s:79:"1232:npuvrirzragf-pbzzhavgl-cyngvahz-fcbafberq-ubire-vzcerffvba-cvkry-hey-ynory";a:2:{i:0;R:40465;i:1;R:40466;}s:68:"1232:npuvrirzragf-pbzzhavgl-cyngvahz-fcbafberq-onqtr-pyvpx-hey-ynory";a:2:{i:0;R:40465;i:1;R:40466;}s:66:"1232:npuvrirzragf-pbzzhavgl-cyngvahz-fcbafberq-onqtr-pyvpx-gbbygvc";a:2:{i:0;R:40465;i:1;R:40466;}s:35:"1232:npuvrirzragf-onqtr-anzr-rqvg-0";a:2:{i:0;R:40465;i:1;R:40466;}s:35:"1232:npuvrirzragf-onqtr-anzr-rqvg-1";a:2:{i:0;R:40465;i:1;R:40466;}s:35:"1232:npuvrirzragf-onqtr-anzr-rqvg-2";a:2:{i:0;R:40465;i:1;R:40466;}s:35:"1232:npuvrirzragf-onqtr-anzr-rqvg-3";a:2:{i:0;R:40465;i:1;R:40466;}s:35:"1232:npuvrirzragf-onqtr-anzr-rqvg-4";a:2:{i:0;R:40465;i:1;R:40466;}s:35:"1232:npuvrirzragf-onqtr-anzr-rqvg-5";a:2:{i:0;R:40465;i:1;R:40466;}s:35:"1232:npuvrirzragf-onqtr-anzr-rqvg-6";a:2:{i:0;R:40465;i:1;R:40466;}s:35:"1232:npuvrirzragf-onqtr-anzr-rqvg-7";a:2:{i:0;R:40465;i:1;R:40466;}s:38:"1232:npuvrirzragf-onqtr-anzr-cvpgher-0";a:2:{i:0;R:40465;i:1;R:40466;}s:38:"1232:npuvrirzragf-onqtr-anzr-cvpgher-1";a:2:{i:0;R:40465;i:1;R:40466;}s:38:"1232:npuvrirzragf-onqtr-anzr-cvpgher-2";a:2:{i:0;R:40465;i:1;R:40466;}s:38:"1232:npuvrirzragf-onqtr-anzr-cvpgher-3";a:2:{i:0;R:40465;i:1;R:40466;}s:38:"1232:npuvrirzragf-onqtr-anzr-cvpgher-4";a:2:{i:0;R:40465;i:1;R:40466;}s:38:"1232:npuvrirzragf-onqtr-anzr-cvpgher-5";a:2:{i:0;R:40465;i:1;R:40466;}s:38:"1232:npuvrirzragf-onqtr-anzr-cvpgher-6";a:2:{i:0;R:40465;i:1;R:40466;}s:38:"1232:npuvrirzragf-onqtr-anzr-cvpgher-7";a:2:{i:0;R:40465;i:1;R:40466;}s:39:"1232:npuvrirzragf-onqtr-anzr-pngrtbel-0";a:2:{i:0;R:40465;i:1;R:40466;}s:39:"1232:npuvrirzragf-onqtr-anzr-pngrtbel-1";a:2:{i:0;R:40465;i:1;R:40466;}s:39:"1232:npuvrirzragf-onqtr-anzr-pngrtbel-2";a:2:{i:0;R:40465;i:1;R:40466;}s:39:"1232:npuvrirzragf-onqtr-anzr-pngrtbel-3";a:2:{i:0;R:40465;i:1;R:40466;}s:39:"1232:npuvrirzragf-onqtr-anzr-pngrtbel-4";a:2:{i:0;R:40465;i:1;R:40466;}s:39:"1232:npuvrirzragf-onqtr-anzr-pngrtbel-5";a:2:{i:0;R:40465;i:1;R:40466;}s:39:"1232:npuvrirzragf-onqtr-anzr-pngrtbel-6";a:2:{i:0;R:40465;i:1;R:40466;}s:39:"1232:npuvrirzragf-onqtr-anzr-oybtcbfg-0";a:2:{i:0;R:40465;i:1;R:40466;}s:39:"1232:npuvrirzragf-onqtr-anzr-oybtcbfg-1";a:2:{i:0;R:40465;i:1;R:40466;}s:39:"1232:npuvrirzragf-onqtr-anzr-oybtcbfg-2";a:2:{i:0;R:40465;i:1;R:40466;}s:39:"1232:npuvrirzragf-onqtr-anzr-oybtcbfg-3";a:2:{i:0;R:40465;i:1;R:40466;}s:39:"1232:npuvrirzragf-onqtr-anzr-oybtcbfg-4";a:2:{i:0;R:40465;i:1;R:40466;}s:42:"1232:npuvrirzragf-onqtr-anzr-oybtpbzzrag-0";a:2:{i:0;R:40465;i:1;R:40466;}s:42:"1232:npuvrirzragf-onqtr-anzr-oybtpbzzrag-1";a:2:{i:0;R:40465;i:1;R:40466;}s:35:"1232:npuvrirzragf-onqtr-anzr-ybir-0";a:2:{i:0;R:40465;i:1;R:40466;}s:35:"1232:npuvrirzragf-onqtr-anzr-ybir-1";a:2:{i:0;R:40465;i:1;R:40466;}s:35:"1232:npuvrirzragf-onqtr-anzr-ybir-2";a:2:{i:0;R:40465;i:1;R:40466;}s:35:"1232:npuvrirzragf-onqtr-anzr-ybir-3";a:2:{i:0;R:40465;i:1;R:40466;}s:35:"1232:npuvrirzragf-onqtr-anzr-ybir-4";a:2:{i:0;R:40465;i:1;R:40466;}s:35:"1232:npuvrirzragf-onqtr-anzr-ybir-5";a:2:{i:0;R:40465;i:1;R:40466;}s:35:"1232:npuvrirzragf-onqtr-anzr-ybir-6";a:2:{i:0;R:40465;i:1;R:40466;}s:38:"1232:npuvrirzragf-onqtr-anzr-funevat-0";a:2:{i:0;R:40465;i:1;R:40466;}s:38:"1232:npuvrirzragf-onqtr-anzr-funevat-1";a:2:{i:0;R:40465;i:1;R:40466;}s:38:"1232:npuvrirzragf-onqtr-anzr-funevat-2";a:2:{i:0;R:40465;i:1;R:40466;}s:38:"1232:npuvrirzragf-onqtr-anzr-funevat-3";a:2:{i:0;R:40465;i:1;R:40466;}s:38:"1232:npuvrirzragf-onqtr-anzr-funevat-4";a:2:{i:0;R:40465;i:1;R:40466;}s:36:"1232:npuvrirzragf-onqtr-anzr-jrypbzr";a:2:{i:0;R:40465;i:1;R:40466;}s:41:"1232:npuvrirzragf-onqtr-anzr-vagebqhpgvba";a:2:{i:0;R:40465;i:1;R:40466;}s:34:"1232:npuvrirzragf-onqtr-anzr-fnluv";a:2:{i:0;R:40465;i:1;R:40466;}s:36:"1232:npuvrirzragf-onqtr-anzr-perngbe";a:2:{i:0;R:40465;i:1;R:40466;}s:35:"1232:npuvrirzragf-onqtr-anzr-cbhapr";a:2:{i:0;R:40465;i:1;R:40466;}s:40:"1232:npuvrirzragf-onqtr-anzr-pnssrvangrq";a:2:{i:0;R:40465;i:1;R:40466;}s:38:"1232:npuvrirzragf-onqtr-anzr-yhpxlrqvg";a:2:{i:0;R:40465;i:1;R:40466;}s:38:"1232:npuvrirzragf-onqtr-gb-trg-funevat";a:2:{i:0;R:40465;i:1;R:40466;}s:35:"1232:npuvrirzragf-onqtr-gb-trg-rqvg";a:2:{i:0;R:40465;i:1;R:40466;}s:49:"1232:npuvrirzragf-onqtr-gb-trg-rqvg-cyhf-pngrtbel";a:2:{i:0;R:40465;i:1;R:40466;}s:38:"1232:npuvrirzragf-onqtr-gb-trg-cvpgher";a:2:{i:0;R:40465;i:1;R:40466;}s:39:"1232:npuvrirzragf-onqtr-gb-trg-pngrtbel";a:2:{i:0;R:40465;i:1;R:40466;}s:39:"1232:npuvrirzragf-onqtr-gb-trg-oybtcbfg";a:2:{i:0;R:40465;i:1;R:40466;}s:42:"1232:npuvrirzragf-onqtr-gb-trg-oybtpbzzrag";a:2:{i:0;R:40465;i:1;R:40466;}s:35:"1232:npuvrirzragf-onqtr-gb-trg-ybir";a:2:{i:0;R:40465;i:1;R:40466;}s:38:"1232:npuvrirzragf-onqtr-gb-trg-jrypbzr";a:2:{i:0;R:40465;i:1;R:40466;}s:43:"1232:npuvrirzragf-onqtr-gb-trg-vagebqhpgvba";a:2:{i:0;R:40465;i:1;R:40466;}s:36:"1232:npuvrirzragf-onqtr-gb-trg-fnluv";a:2:{i:0;R:40465;i:1;R:40466;}s:38:"1232:npuvrirzragf-onqtr-gb-trg-perngbe";a:2:{i:0;R:40465;i:1;R:40466;}s:37:"1232:npuvrirzragf-onqtr-gb-trg-cbhapr";a:2:{i:0;R:40465;i:1;R:40466;}s:42:"1232:npuvrirzragf-onqtr-gb-trg-pnssrvangrq";a:2:{i:0;R:40465;i:1;R:40466;}s:40:"1232:npuvrirzragf-onqtr-gb-trg-yhpxlrqvg";a:2:{i:0;R:40465;i:1;R:40466;}s:46:"1232:npuvrirzragf-onqtr-gb-trg-funevat-qrgnvyf";a:2:{i:0;R:40465;i:1;R:40466;}s:43:"1232:npuvrirzragf-onqtr-gb-trg-rqvg-qrgnvyf";a:2:{i:0;R:40465;i:1;R:40466;}s:57:"1232:npuvrirzragf-onqtr-gb-trg-rqvg-cyhf-pngrtbel-qrgnvyf";a:2:{i:0;R:40465;i:1;R:40466;}s:46:"1232:npuvrirzragf-onqtr-gb-trg-cvpgher-qrgnvyf";a:2:{i:0;R:40465;i:1;R:40466;}s:47:"1232:npuvrirzragf-onqtr-gb-trg-pngrtbel-qrgnvyf";a:2:{i:0;R:40465;i:1;R:40466;}s:47:"1232:npuvrirzragf-onqtr-gb-trg-oybtcbfg-qrgnvyf";a:2:{i:0;R:40465;i:1;R:40466;}s:50:"1232:npuvrirzragf-onqtr-gb-trg-oybtpbzzrag-qrgnvyf";a:2:{i:0;R:40465;i:1;R:40466;}s:43:"1232:npuvrirzragf-onqtr-gb-trg-ybir-qrgnvyf";a:2:{i:0;R:40465;i:1;R:40466;}s:46:"1232:npuvrirzragf-onqtr-gb-trg-jrypbzr-qrgnvyf";a:2:{i:0;R:40465;i:1;R:40466;}s:51:"1232:npuvrirzragf-onqtr-gb-trg-vagebqhpgvba-qrgnvyf";a:2:{i:0;R:40465;i:1;R:40466;}s:44:"1232:npuvrirzragf-onqtr-gb-trg-fnluv-qrgnvyf";a:2:{i:0;R:40465;i:1;R:40466;}s:46:"1232:npuvrirzragf-onqtr-gb-trg-perngbe-qrgnvyf";a:2:{i:0;R:40465;i:1;R:40466;}s:45:"1232:npuvrirzragf-onqtr-gb-trg-cbhapr-qrgnvyf";a:2:{i:0;R:40465;i:1;R:40466;}s:50:"1232:npuvrirzragf-onqtr-gb-trg-pnssrvangrq-qrgnvyf";a:2:{i:0;R:40465;i:1;R:40466;}s:48:"1232:npuvrirzragf-onqtr-gb-trg-yhpxlrqvg-qrgnvyf";a:2:{i:0;R:40465;i:1;R:40466;}s:57:"1232:npuvrirzragf-onqtr-gb-trg-pbzzhavgl-cyngvahz-qrgnvyf";a:2:{i:0;R:40465;i:1;R:40466;}s:42:"1232:npuvrirzragf-onqtr-ubire-qrfp-funevat";a:2:{i:0;R:40465;i:1;R:40466;}s:39:"1232:npuvrirzragf-onqtr-ubire-qrfp-rqvg";a:2:{i:0;R:40465;i:1;R:40466;}s:53:"1232:npuvrirzragf-onqtr-ubire-qrfp-rqvg-cyhf-pngrtbel";a:2:{i:0;R:40465;i:1;R:40466;}s:42:"1232:npuvrirzragf-onqtr-ubire-qrfp-cvpgher";a:2:{i:0;R:40465;i:1;R:40466;}s:43:"1232:npuvrirzragf-onqtr-ubire-qrfp-pngrtbel";a:2:{i:0;R:40465;i:1;R:40466;}s:43:"1232:npuvrirzragf-onqtr-ubire-qrfp-oybtcbfg";a:2:{i:0;R:40465;i:1;R:40466;}s:46:"1232:npuvrirzragf-onqtr-ubire-qrfp-oybtpbzzrag";a:2:{i:0;R:40465;i:1;R:40466;}s:39:"1232:npuvrirzragf-onqtr-ubire-qrfp-ybir";a:2:{i:0;R:40465;i:1;R:40466;}s:42:"1232:npuvrirzragf-onqtr-ubire-qrfp-jrypbzr";a:2:{i:0;R:40465;i:1;R:40466;}s:47:"1232:npuvrirzragf-onqtr-ubire-qrfp-vagebqhpgvba";a:2:{i:0;R:40465;i:1;R:40466;}s:40:"1232:npuvrirzragf-onqtr-ubire-qrfp-fnluv";a:2:{i:0;R:40465;i:1;R:40466;}s:42:"1232:npuvrirzragf-onqtr-ubire-qrfp-perngbe";a:2:{i:0;R:40465;i:1;R:40466;}s:41:"1232:npuvrirzragf-onqtr-ubire-qrfp-cbhapr";a:2:{i:0;R:40465;i:1;R:40466;}s:46:"1232:npuvrirzragf-onqtr-ubire-qrfp-pnssrvangrq";a:2:{i:0;R:40465;i:1;R:40466;}s:44:"1232:npuvrirzragf-onqtr-ubire-qrfp-yhpxlrqvg";a:2:{i:0;R:40465;i:1;R:40466;}s:53:"1232:npuvrirzragf-onqtr-ubire-qrfp-pbzzhavgl-cyngvahz";a:2:{i:0;R:40465;i:1;R:40466;}s:41:"1232:npuvrirzragf-onqtr-lbhe-qrfp-funevat";a:2:{i:0;R:40465;i:1;R:40466;}s:38:"1232:npuvrirzragf-onqtr-lbhe-qrfp-rqvg";a:2:{i:0;R:40465;i:1;R:40466;}s:52:"1232:npuvrirzragf-onqtr-lbhe-qrfp-rqvg-cyhf-pngrtbel";a:2:{i:0;R:40465;i:1;R:40466;}s:41:"1232:npuvrirzragf-onqtr-lbhe-qrfp-cvpgher";a:2:{i:0;R:40465;i:1;R:40466;}s:42:"1232:npuvrirzragf-onqtr-lbhe-qrfp-pngrtbel";a:2:{i:0;R:40465;i:1;R:40466;}s:42:"1232:npuvrirzragf-onqtr-lbhe-qrfp-oybtcbfg";a:2:{i:0;R:40465;i:1;R:40466;}s:45:"1232:npuvrirzragf-onqtr-lbhe-qrfp-oybtpbzzrag";a:2:{i:0;R:40465;i:1;R:40466;}s:38:"1232:npuvrirzragf-onqtr-lbhe-qrfp-ybir";a:2:{i:0;R:40465;i:1;R:40466;}s:41:"1232:npuvrirzragf-onqtr-lbhe-qrfp-jrypbzr";a:2:{i:0;R:40465;i:1;R:40466;}s:46:"1232:npuvrirzragf-onqtr-lbhe-qrfp-vagebqhpgvba";a:2:{i:0;R:40465;i:1;R:40466;}s:39:"1232:npuvrirzragf-onqtr-lbhe-qrfp-fnluv";a:2:{i:0;R:40465;i:1;R:40466;}s:41:"1232:npuvrirzragf-onqtr-lbhe-qrfp-perngbe";a:2:{i:0;R:40465;i:1;R:40466;}s:40:"1232:npuvrirzragf-onqtr-lbhe-qrfp-cbhapr";a:2:{i:0;R:40465;i:1;R:40466;}s:45:"1232:npuvrirzragf-onqtr-lbhe-qrfp-pnssrvangrq";a:2:{i:0;R:40465;i:1;R:40466;}s:43:"1232:npuvrirzragf-onqtr-lbhe-qrfp-yhpxlrqvg";a:2:{i:0;R:40465;i:1;R:40466;}s:36:"1232:npuvrirzragf-onqtr-qrfp-funevat";a:2:{i:0;R:40465;i:1;R:40466;}s:33:"1232:npuvrirzragf-onqtr-qrfp-rqvg";a:2:{i:0;R:40465;i:1;R:40466;}s:47:"1232:npuvrirzragf-onqtr-qrfp-rqvg-cyhf-pngrtbel";a:2:{i:0;R:40465;i:1;R:40466;}s:36:"1232:npuvrirzragf-onqtr-qrfp-cvpgher";a:2:{i:0;R:40465;i:1;R:40466;}s:37:"1232:npuvrirzragf-onqtr-qrfp-pngrtbel";a:2:{i:0;R:40465;i:1;R:40466;}s:37:"1232:npuvrirzragf-onqtr-qrfp-oybtcbfg";a:2:{i:0;R:40465;i:1;R:40466;}s:40:"1232:npuvrirzragf-onqtr-qrfp-oybtpbzzrag";a:2:{i:0;R:40465;i:1;R:40466;}s:33:"1232:npuvrirzragf-onqtr-qrfp-ybir";a:2:{i:0;R:40465;i:1;R:40466;}s:36:"1232:npuvrirzragf-onqtr-qrfp-jrypbzr";a:2:{i:0;R:40465;i:1;R:40466;}s:41:"1232:npuvrirzragf-onqtr-qrfp-vagebqhpgvba";a:2:{i:0;R:40465;i:1;R:40466;}s:34:"1232:npuvrirzragf-onqtr-qrfp-fnluv";a:2:{i:0;R:40465;i:1;R:40466;}s:36:"1232:npuvrirzragf-onqtr-qrfp-perngbe";a:2:{i:0;R:40465;i:1;R:40466;}s:35:"1232:npuvrirzragf-onqtr-qrfp-cbhapr";a:2:{i:0;R:40465;i:1;R:40466;}s:40:"1232:npuvrirzragf-onqtr-qrfp-pnssrvangrq";a:2:{i:0;R:40465;i:1;R:40466;}s:38:"1232:npuvrirzragf-onqtr-qrfp-yhpxlrqvg";a:2:{i:0;R:40465;i:1;R:40466;}s:38:"1232:npuvrirzragf-hfrecebsvyr-gvgyr-ab";a:2:{i:0;R:40465;i:1;R:40466;}s:35:"1232:npuvrirzragf-hfrecebsvyr-gvgyr";a:2:{i:0;R:40465;i:1;R:40466;}s:45:"1232:npuvrirzragf-hfrecebsvyr-ab-onqtrf-bjare";a:2:{i:0;R:40465;i:1;R:40466;}s:47:"1232:npuvrirzragf-hfrecebsvyr-ab-onqtrf-ivfvgbe";a:2:{i:0;R:40465;i:1;R:40466;}s:43:"1232:npuvrirzragf-hfrecebsvyr-cebsvyr-fpber";a:2:{i:0;R:40465;i:1;R:40466;}s:36:"1232:npuvrirzragf-hfrecebsvyr-enaxrq";a:2:{i:0;R:40465;i:1;R:40466;}s:25:"1232:nqzvaqnfuobneq-gvgyr";a:2:{i:0;s:20:"wikia-admindashboard";i:1;R:40466;}s:26:"1232:nqzvaqnfuobneq-urnqre";a:2:{i:0;R:40698;i:1;R:40466;}s:32:"1232:nqzvaqnfuobneq-gbbyone-yvax";a:2:{i:0;R:40698;i:1;R:40466;}s:32:"1232:nqzvaqnfuobneq-gno-nqinaprq";a:2:{i:0;R:40698;i:1;R:40466;}s:31:"1232:nqzvaqnfuobneq-gno-trareny";a:2:{i:0;R:40698;i:1;R:40466;}s:40:"1232:nqzvaqnfuobneq-pbagebyf-jvxv-urnqre";a:2:{i:0;R:40698;i:1;R:40466;}s:48:"1232:nqzvaqnfuobneq-pbageby-gurzr-qrfvtare-ynory";a:2:{i:0;R:40698;i:1;R:40466;}s:50:"1232:nqzvaqnfuobneq-pbageby-gurzr-qrfvtare-gbbygvc";a:2:{i:0;R:40698;i:1;R:40466;}s:48:"1232:nqzvaqnfuobneq-pbageby-erprag-punatrf-ynory";a:2:{i:0;R:40698;i:1;R:40466;}s:50:"1232:nqzvaqnfuobneq-pbageby-erprag-punatrf-gbbygvc";a:2:{i:0;R:40698;i:1;R:40466;}s:48:"1232:nqzvaqnfuobneq-pbageby-gbc-anivtngvba-ynory";a:2:{i:0;R:40698;i:1;R:40466;}s:50:"1232:nqzvaqnfuobneq-pbageby-gbc-anivtngvba-gbbygvc";a:2:{i:0;R:40698;i:1;R:40466;}s:47:"1232:nqzvaqnfuobneq-pbageby-jvxv-srngherf-ynory";a:2:{i:0;R:40698;i:1;R:40466;}s:49:"1232:nqzvaqnfuobneq-pbageby-jvxv-srngherf-gbbygvc";a:2:{i:0;R:40698;i:1;R:40466;}s:53:"1232:nqzvaqnfuobneq-pbageby-cntr-ynlbhg-ohvyqre-ynory";a:2:{i:0;R:40698;i:1;R:40466;}s:55:"1232:nqzvaqnfuobneq-pbageby-cntr-ynlbhg-ohvyqre-gbbygvc";a:2:{i:0;R:40698;i:1;R:40466;}s:45:"1232:nqzvaqnfuobneq-pbagebyf-pbzzhavgl-urnqre";a:2:{i:0;R:40698;i:1;R:40466;}s:43:"1232:nqzvaqnfuobneq-pbageby-hfre-yvfg-ynory";a:2:{i:0;R:40698;i:1;R:40466;}s:45:"1232:nqzvaqnfuobneq-pbageby-hfre-yvfg-gbbygvc";a:2:{i:0;R:40698;i:1;R:40466;}s:45:"1232:nqzvaqnfuobneq-pbageby-hfre-evtugf-ynory";a:2:{i:0;R:40698;i:1;R:40466;}s:47:"1232:nqzvaqnfuobneq-pbageby-hfre-evtugf-gbbygvc";a:2:{i:0;R:40698;i:1;R:40466;}s:46:"1232:nqzvaqnfuobneq-pbageby-tebhc-evtugf-ynory";a:2:{i:0;R:40698;i:1;R:40466;}s:48:"1232:nqzvaqnfuobneq-pbageby-tebhc-evtugf-gbbygvc";a:2:{i:0;R:40698;i:1;R:40466;}s:40:"1232:nqzvaqnfuobneq-pbageby-vaivgr-ynory";a:2:{i:0;R:40698;i:1;R:40466;}s:42:"1232:nqzvaqnfuobneq-pbageby-vaivgr-gbbygvc";a:2:{i:0;R:40698;i:1;R:40466;}s:38:"1232:nqzvaqnfuobneq-pbageby-uryc-ynory";a:2:{i:0;R:40698;i:1;R:40466;}s:40:"1232:nqzvaqnfuobneq-pbageby-uryc-gbbygvc";a:2:{i:0;R:40698;i:1;R:40466;}s:36:"1232:nqzvaqnfuobneq-pbageby-uryc-hey";a:2:{i:0;R:40698;i:1;R:40466;}s:50:"1232:nqzvaqnfuobneq-pbageby-pbzzhavgl-pbeare-ynory";a:2:{i:0;R:40698;i:1;R:40466;}s:52:"1232:nqzvaqnfuobneq-pbageby-pbzzhavgl-pbeare-gbbygvc";a:2:{i:0;R:40698;i:1;R:40466;}s:43:"1232:nqzvaqnfuobneq-pbagebyf-pbagrag-urnqre";a:2:{i:0;R:40698;i:1;R:40466;}s:49:"1232:nqzvaqnfuobneq-pbageby-pngrtbevrf-yvfg-ynory";a:2:{i:0;R:40698;i:1;R:40466;}s:51:"1232:nqzvaqnfuobneq-pbageby-pngrtbevrf-yvfg-gbbygvc";a:2:{i:0;R:40698;i:1;R:40466;}s:42:"1232:nqzvaqnfuobneq-pbageby-nqq-cntr-ynory";a:2:{i:0;R:40698;i:1;R:40466;}s:44:"1232:nqzvaqnfuobneq-pbageby-nqq-cntr-gbbygvc";a:2:{i:0;R:40698;i:1;R:40466;}s:43:"1232:nqzvaqnfuobneq-pbageby-nqq-cubgb-ynory";a:2:{i:0;R:40698;i:1;R:40466;}s:45:"1232:nqzvaqnfuobneq-pbageby-nqq-cubgb-gbbygvc";a:2:{i:0;R:40698;i:1;R:40466;}s:42:"1232:nqzvaqnfuobneq-pbageby-nqq-oybt-ynory";a:2:{i:0;R:40698;i:1;R:40466;}s:44:"1232:nqzvaqnfuobneq-pbageby-nqq-oybt-gbbygvc";a:2:{i:0;R:40698;i:1;R:40466;}s:49:"1232:nqzvaqnfuobneq-pbageby-zhygvcyr-hcybnq-ynory";a:2:{i:0;R:40698;i:1;R:40466;}s:51:"1232:nqzvaqnfuobneq-pbageby-zhygvcyr-hcybnq-gbbygvc";a:2:{i:0;R:40698;i:1;R:40466;}s:28:"1232:dhvpxfgngf-urnqre-ynory";a:2:{i:0;s:31:"wikia-admindashboard-quickstats";i:1;R:40466;}s:27:"1232:dhvpxfgngf-urnqre-qngr";a:2:{i:0;R:40740;i:1;R:40466;}s:28:"1232:dhvpxfgngf-urnqre-ivrjf";a:2:{i:0;R:40740;i:1;R:40466;}s:28:"1232:dhvpxfgngf-urnqre-rqvgf";a:2:{i:0;R:40740;i:1;R:40466;}s:29:"1232:dhvpxfgngf-urnqre-cubgbf";a:2:{i:0;R:40740;i:1;R:40466;}s:28:"1232:dhvpxfgngf-urnqre-yvxrf";a:2:{i:0;R:40740;i:1;R:40466;}s:27:"1232:dhvpxfgngf-qngr-sbezng";a:2:{i:0;R:40740;i:1;R:40466;}s:28:"1232:dhvpxfgngf-gbgnyf-ynory";a:2:{i:0;R:40740;i:1;R:40466;}s:35:"1232:dhvpxfgngf-frr-zber-fgngf-yvax";a:2:{i:0;R:40740;i:1;R:40466;}s:33:"1232:dhvpxfgngf-ahzore-fubegravat";a:2:{i:0;R:40740;i:1;R:40466;}s:42:"1232:dhvpxfgngf-ahzore-fubegravat-zvyyvbaf";a:2:{i:0;R:40740;i:1;R:40466;}s:42:"1232:dhvpxfgngf-ahzore-fubegravat-ovyyvbaf";a:2:{i:0;R:40740;i:1;R:40466;}s:33:"1232:dhvpxfgngf-tn-oebxra-zrffntr";a:2:{i:0;R:40740;i:1;R:40466;}s:26:"1232:nwnkcbyy-crepragibgrf";a:2:{i:0;s:14:"wikia-ajaxpoll";i:1;R:40466;}s:22:"1232:nwnkcbyy-gunaxlbh";a:2:{i:0;R:40754;i:1;R:40466;}s:19:"1232:nwnkcbyy-reebe";a:2:{i:0;R:40754;i:1;R:40466;}s:21:"1232:nwnkcbyy-fhzznel";a:2:{i:0;R:40754;i:1;R:40466;}s:20:"1232:nwnkcbyy-fhozvg";a:2:{i:0;R:40754;i:1;R:40466;}s:20:"1232:nwnkcbyy-pybfrq";a:2:{i:0;R:40754;i:1;R:40466;}s:24:"1232:nwnkcbyy-fhozvggvat";a:2:{i:0;R:40754;i:1;R:40466;}s:31:"1232:negvpyr-pbzzragf-nabalzbhf";a:2:{i:0;s:21:"wikia-articlecomments";i:1;R:40466;}s:30:"1232:negvpyr-pbzzragf-pbzzragf";a:2:{i:0;R:40762;i:1;R:40466;}s:26:"1232:negvpyr-pbzzragf-cbfg";a:2:{i:0;R:40762;i:1;R:40466;}s:28:"1232:negvpyr-pbzzragf-pnapry";a:2:{i:0;R:40762;i:1;R:40466;}s:28:"1232:negvpyr-pbzzragf-qryrgr";a:2:{i:0;R:40762;i:1;R:40466;}s:26:"1232:negvpyr-pbzzragf-rqvg";a:2:{i:0;R:40762;i:1;R:40466;}s:29:"1232:negvpyr-pbzzragf-uvfgbel";a:2:{i:0;R:40762;i:1;R:40466;}s:27:"1232:negvpyr-pbzzragf-reebe";a:2:{i:0;R:40762;i:1;R:40466;}s:39:"1232:negvpyr-pbzzragf-haqryrgrq-pbzzrag";a:2:{i:0;R:40762;i:1;R:40466;}s:32:"1232:negvpyr-pbzzragf-ep-pbzzrag";a:2:{i:0;R:40762;i:1;R:40466;}s:33:"1232:negvpyr-pbzzragf-ep-pbzzragf";a:2:{i:0;R:40762;i:1;R:40466;}s:29:"1232:negvpyr-pbzzragf-soybtva";a:2:{i:0;R:40762;i:1;R:40466;}s:31:"1232:negvpyr-pbzzragf-sopbaarpg";a:2:{i:0;R:40762;i:1;R:40466;}s:37:"1232:negvpyr-pbzzragf-ep-oybt-pbzzrag";a:2:{i:0;R:40762;i:1;R:40466;}s:38:"1232:negvpyr-pbzzragf-ep-oybt-pbzzragf";a:2:{i:0;R:40762;i:1;R:40466;}s:27:"1232:negvpyr-pbzzragf-ybtva";a:2:{i:0;R:40762;i:1;R:40466;}s:30:"1232:negvpyr-pbzzragf-gbp-vgrz";a:2:{i:0;R:40762;i:1;R:40466;}s:40:"1232:negvpyr-pbzzragf-pbzzrag-pnaabg-nqq";a:2:{i:0;R:40762;i:1;R:40466;}s:26:"1232:negvpyr-pbzzragf-ibgr";a:2:{i:0;R:40762;i:1;R:40466;}s:27:"1232:negvpyr-pbzzragf-ercyl";a:2:{i:0;R:40762;i:1;R:40466;}s:30:"1232:negvpyr-pbzzragf-fubj-nyy";a:2:{i:0;R:40762;i:1;R:40466;}s:31:"1232:negvpyr-pbzzragf-ceri-cntr";a:2:{i:0;R:40762;i:1;R:40466;}s:31:"1232:negvpyr-pbzzragf-arkg-cntr";a:2:{i:0;R:40762;i:1;R:40466;}s:33:"1232:negvpyr-pbzzragf-cntr-fcnpre";a:2:{i:0;R:40762;i:1;R:40466;}s:35:"1232:negvpyr-pbzzragf-qryrgr-ernfba";a:2:{i:0;R:40762;i:1;R:40466;}s:35:"1232:negvpyr-pbzzragf-rzcgl-pbzzrag";a:2:{i:0;R:40762;i:1;R:40466;}s:40:"1232:jvxvnzbovyr-negvpyr-pbzzragf-urnqre";a:2:{i:0;R:40762;i:1;R:40466;}s:38:"1232:jvxvnzbovyr-negvpyr-pbzzragf-zber";a:2:{i:0;R:40762;i:1;R:40466;}s:38:"1232:jvxvnzbovyr-negvpyr-pbzzragf-ceri";a:2:{i:0;R:40762;i:1;R:40466;}s:38:"1232:jvxvnzbovyr-negvpyr-pbzzragf-abar";a:2:{i:0;R:40762;i:1;R:40466;}s:38:"1232:jvxvnzbovyr-negvpyr-pbzzragf-ivrj";a:2:{i:0;R:40762;i:1;R:40466;}s:41:"1232:jvxvnzbovyr-negvpyr-pbzzragf-ercyvrf";a:2:{i:0;R:40762;i:1;R:40466;}s:44:"1232:jvxvnzbovyr-negvpyr-pbzzragf-cbfg-ercyl";a:2:{i:0;R:40762;i:1;R:40466;}s:38:"1232:jvxvnzbovyr-negvpyr-pbzzragf-cbfg";a:2:{i:0;R:40762;i:1;R:40466;}s:45:"1232:jvxvnzbovyr-negvpyr-pbzzragf-cynprubyqre";a:2:{i:0;R:40762;i:1;R:40466;}s:38:"1232:jvxvnzbovyr-negvpyr-pbzzragf-fubj";a:2:{i:0;R:40762;i:1;R:40466;}s:44:"1232:jvxvnzbovyr-negvpyr-pbzzragf-ybtva-cbfg";a:2:{i:0;R:40762;i:1;R:40466;}s:35:"1232:rabgvs_fhowrpg_negvpyr_pbzzrag";a:2:{i:0;R:40762;i:1;R:40466;}s:32:"1232:rabgvs_obql_negvpyr_pbzzrag";a:2:{i:0;R:40762;i:1;R:40466;}s:37:"1232:rabgvs_obql_negvpyr_pbzzrag-ugzy";a:2:{i:0;R:40762;i:1;R:40466;}s:19:"1232:nhgbperngrjvxv";a:2:{i:0;s:20:"wikia-autocreatewiki";i:1;R:40466;}s:24:"1232:nhgbperngrjvxv-qrfp";a:2:{i:0;R:40803;i:1;R:40466;}s:38:"1232:nhgbperngrjvxv-cntr-gvgyr-qrsnhyg";a:2:{i:0;R:40803;i:1;R:40466;}s:38:"1232:nhgbperngrjvxv-cntr-gvgyr-nafjref";a:2:{i:0;R:40803;i:1;R:40466;}s:15:"1232:perngrjvxv";a:2:{i:0;R:40803;i:1;R:40466;}s:29:"1232:nhgbperngrjvxv-pubbfrbar";a:2:{i:0;R:40803;i:1;R:40466;}s:28:"1232:nhgbperngrjvxv-erdhverq";a:2:{i:0;R:40803;i:1;R:40466;}s:31:"1232:nhgbperngrjvxv-jro-nqqerff";a:2:{i:0;R:40803;i:1;R:40466;}s:35:"1232:nhgbperngrjvxv-pngrtbel-fryrpg";a:2:{i:0;R:40803;i:1;R:40466;}s:32:"1232:nhgbperngrjvxv-ynathntr-gbc";a:2:{i:0;R:40803;i:1;R:40466;}s:32:"1232:nhgbperngrjvxv-ynathntr-nyy";a:2:{i:0;R:40803;i:1;R:40466;}s:29:"1232:nhgbperngrjvxv-oveguqngr";a:2:{i:0;R:40803;i:1;R:40466;}s:31:"1232:nhgbperngrjvxv-oyheel-jbeq";a:2:{i:0;R:40803;i:1;R:40466;}s:28:"1232:nhgbperngrjvxv-erzrzore";a:2:{i:0;R:40803;i:1;R:40466;}s:34:"1232:nhgbperngrjvxv-perngr-nppbhag";a:2:{i:0;R:40803;i:1;R:40466;}s:24:"1232:nhgbperngrjvxv-qbar";a:2:{i:0;R:40803;i:1;R:40466;}s:25:"1232:nhgbperngrjvxv-reebe";a:2:{i:0;R:40803;i:1;R:40466;}s:40:"1232:nhgbperngrjvxv-unirnppbhag-dhrfgvba";a:2:{i:0;R:40803;i:1;R:40466;}s:41:"1232:nhgbperngrjvxv-fhpprff-gvgyr-qrsnhyg";a:2:{i:0;R:40803;i:1;R:40466;}s:41:"1232:nhgbperngrjvxv-fhpprff-gvgyr-nafjref";a:2:{i:0;R:40803;i:1;R:40466;}s:36:"1232:nhgbperngrjvxv-fhpprff-fhogvgyr";a:2:{i:0;R:40803;i:1;R:40466;}s:44:"1232:nhgbperngrjvxv-fhpprff-unf-orra-perngrq";a:2:{i:0;R:40803;i:1;R:40466;}s:39:"1232:nhgbperngrjvxv-fhpprff-trg-fgnegrq";a:2:{i:0;R:40803;i:1;R:40466;}s:31:"1232:nhgbperngrjvxv-vasb-qbznva";a:2:{i:0;R:40803;i:1;R:40466;}s:30:"1232:nhgbperngrjvxv-vasb-gbcvp";a:2:{i:0;R:40803;i:1;R:40466;}s:41:"1232:nhgbperngrjvxv-vasb-pngrtbel-qrsnhyg";a:2:{i:0;R:40803;i:1;R:40466;}s:41:"1232:nhgbperngrjvxv-vasb-pngrtbel-nafjref";a:2:{i:0;R:40803;i:1;R:40466;}s:33:"1232:nhgbperngrjvxv-vasb-ynathntr";a:2:{i:0;R:40803;i:1;R:40466;}s:38:"1232:nhgbperngrjvxv-vasb-rznvy-nqqerff";a:2:{i:0;R:40803;i:1;R:40466;}s:33:"1232:nhgbperngrjvxv-vasb-ernyanzr";a:2:{i:0;R:40803;i:1;R:40466;}s:34:"1232:nhgbperngrjvxv-vasb-oveguqngr";a:2:{i:0;R:40803;i:1;R:40466;}s:36:"1232:nhgbperngrjvxv-vasb-oyheel-jbeq";a:2:{i:0;R:40803;i:1;R:40466;}s:36:"1232:nhgbperngrjvxv-vasb-grezf-nterr";a:2:{i:0;R:40803;i:1;R:40466;}s:39:"1232:nhgbperngrjvxv-vasb-fgnss-hfreanzr";a:2:{i:0;R:40803;i:1;R:40466;}s:34:"1232:nhgbperngrjvxv-gvgyr-grzcyngr";a:2:{i:0;R:40803;i:1;R:40466;}s:27:"1232:nhgbperngrjvxv-gntyvar";a:2:{i:0;R:40803;i:1;R:40466;}s:29:"1232:nhgbperngrjvxv-yvzvg-qnl";a:2:{i:0;R:40803;i:1;R:40466;}s:34:"1232:nhgbperngrjvxv-yvzvg-perngvba";a:2:{i:0;R:40803;i:1;R:40466;}s:31:"1232:nhgbperngrjvxv-rzcgl-svryq";a:2:{i:0;R:40803;i:1;R:40466;}s:28:"1232:nhgbperngrjvxv-onq-anzr";a:2:{i:0;R:40803;i:1;R:40466;}s:36:"1232:nhgbperngrjvxv-vainyvq-jvxvanzr";a:2:{i:0;R:40803;i:1;R:40466;}s:34:"1232:nhgbperngrjvxv-ivbyngr-cbyvpl";a:2:{i:0;R:40803;i:1;R:40466;}s:30:"1232:nhgbperngrjvxv-anzr-gnxra";a:2:{i:0;R:40803;i:1;R:40466;}s:34:"1232:nhgbperngrjvxv-anzr-gbb-fubeg";a:2:{i:0;R:40803;i:1;R:40466;}s:33:"1232:nhgbperngrjvxv-anzr-gbb-ybat";a:2:{i:0;R:40803;i:1;R:40466;}s:33:"1232:nhgbperngrjvxv-fvzvyne-jvxvf";a:2:{i:0;R:40803;i:1;R:40466;}s:36:"1232:nhgbperngrjvxv-vainyvq-hfreanzr";a:2:{i:0;R:40803;i:1;R:40466;}s:33:"1232:nhgbperngrjvxv-ohfl-hfreanzr";a:2:{i:0;R:40803;i:1;R:40466;}s:36:"1232:nhgbperngrjvxv-oybpxrq-hfreanzr";a:2:{i:0;R:40803;i:1;R:40466;}s:36:"1232:nhgbperngrjvxv-hfre-abgybttrqva";a:2:{i:0;R:40803;i:1;R:40466;}s:34:"1232:nhgbperngrjvxv-rzcgl-ynathntr";a:2:{i:0;R:40803;i:1;R:40466;}s:34:"1232:nhgbperngrjvxv-rzcgl-pngrtbel";a:2:{i:0;R:40803;i:1;R:40466;}s:34:"1232:nhgbperngrjvxv-rzcgl-jvxvanzr";a:2:{i:0;R:40803;i:1;R:40466;}s:34:"1232:nhgbperngrjvxv-rzcgl-hfreanzr";a:2:{i:0;R:40803;i:1;R:40466;}s:34:"1232:nhgbperngrjvxv-rzcgl-cnffjbeq";a:2:{i:0;R:40803;i:1;R:40466;}s:41:"1232:nhgbperngrjvxv-rzcgl-erglcr-cnffjbeq";a:2:{i:0;R:40803;i:1;R:40466;}s:34:"1232:nhgbperngrjvxv-pngrtbel-ynory";a:2:{i:0;R:40803;i:1;R:40466;}s:34:"1232:nhgbperngrjvxv-pngrtbel-bgure";a:2:{i:0;R:40803;i:1;R:40466;}s:32:"1232:nhgbperngrjvxv-frg-hfreanzr";a:2:{i:0;R:40803;i:1;R:40466;}s:36:"1232:nhgbperngrjvxv-vainyvq-pngrtbel";a:2:{i:0;R:40803;i:1;R:40466;}s:36:"1232:nhgbperngrjvxv-vainyvq-ynathntr";a:2:{i:0;R:40803;i:1;R:40466;}s:41:"1232:nhgbperngrjvxv-vainyvq-erglcr-cnffjq";a:2:{i:0;R:40803;i:1;R:40466;}s:36:"1232:nhgbperngrjvxv-vainyvq-oveguqnl";a:2:{i:0;R:40803;i:1;R:40466;}s:34:"1232:nhgbperngrjvxv-yvzvg-oveguqnl";a:2:{i:0;R:40803;i:1;R:40466;}s:29:"1232:nhgbperngrjvxv-ybt-gvgyr";a:2:{i:0;R:40803;i:1;R:40466;}s:25:"1232:nhgbperngrjvxv-fgrc0";a:2:{i:0;R:40803;i:1;R:40466;}s:31:"1232:nhgbperngrjvxv-fgrcqrsnhyg";a:2:{i:0;R:40803;i:1;R:40466;}s:32:"1232:nhgbperngrjvxv-reebeqrsnhyg";a:2:{i:0;R:40803;i:1;R:40466;}s:25:"1232:nhgbperngrjvxv-fgrc1";a:2:{i:0;R:40803;i:1;R:40466;}s:25:"1232:nhgbperngrjvxv-fgrc2";a:2:{i:0;R:40803;i:1;R:40466;}s:25:"1232:nhgbperngrjvxv-fgrc3";a:2:{i:0;R:40803;i:1;R:40466;}s:25:"1232:nhgbperngrjvxv-fgrc4";a:2:{i:0;R:40803;i:1;R:40466;}s:25:"1232:nhgbperngrjvxv-fgrc5";a:2:{i:0;R:40803;i:1;R:40466;}s:25:"1232:nhgbperngrjvxv-fgrc6";a:2:{i:0;R:40803;i:1;R:40466;}s:25:"1232:nhgbperngrjvxv-fgrc7";a:2:{i:0;R:40803;i:1;R:40466;}s:25:"1232:nhgbperngrjvxv-fgrc8";a:2:{i:0;R:40803;i:1;R:40466;}s:25:"1232:nhgbperngrjvxv-fgrc9";a:2:{i:0;R:40803;i:1;R:40466;}s:26:"1232:nhgbperngrjvxv-fgrc10";a:2:{i:0;R:40803;i:1;R:40466;}s:26:"1232:nhgbperngrjvxv-fgrc11";a:2:{i:0;R:40803;i:1;R:40466;}s:28:"1232:nhgbperngrjvxv-erqverpg";a:2:{i:0;R:40803;i:1;R:40466;}s:34:"1232:nhgbperngrjvxv-pbatenghyngvba";a:2:{i:0;R:40803;i:1;R:40466;}s:35:"1232:nhgbperngrjvxv-jrypbzrgnyx-ybt";a:2:{i:0;R:40803;i:1;R:40466;}s:39:"1232:nhgbperngrjvxv-ertrk-reebe-pbzzrag";a:2:{i:0;R:40803;i:1;R:40466;}s:31:"1232:nhgbperngrjvxv-fgrc2-reebe";a:2:{i:0;R:40803;i:1;R:40466;}s:31:"1232:nhgbperngrjvxv-fgrc3-reebe";a:2:{i:0;R:40803;i:1;R:40466;}s:31:"1232:nhgbperngrjvxv-fgrc6-reebe";a:2:{i:0;R:40803;i:1;R:40466;}s:31:"1232:nhgbperngrjvxv-fgrc7-reebe";a:2:{i:0;R:40803;i:1;R:40466;}s:32:"1232:erdhrfgjvxv-svygre-ynathntr";a:2:{i:0;R:40803;i:1;R:40466;}s:34:"1232:nhgbperngrjvxv-cebgrpg-ernfba";a:2:{i:0;R:40803;i:1;R:40466;}s:34:"1232:nhgbperngrjvxv-jrypbzrfhowrpg";a:2:{i:0;R:40803;i:1;R:40466;}s:31:"1232:nhgbperngrjvxv-jrypbzrobql";a:2:{i:0;R:40803;i:1;R:40466;}s:31:"1232:nhgbperngrjvxv-jrypbzrgnyx";a:2:{i:0;R:40803;i:1;R:40466;}s:13:"1232:arjjvxvf";a:2:{i:0;R:40803;i:1;R:40466;}s:18:"1232:arjjvxvffgneg";a:2:{i:0;R:40803;i:1;R:40466;}s:36:"1232:nhgbperngrjvxv-erzvaqre-fhowrpg";a:2:{i:0;R:40803;i:1;R:40466;}s:33:"1232:nhgbperngrjvxv-erzvaqre-obql";a:2:{i:0;R:40803;i:1;R:40466;}s:38:"1232:nhgbperngrjvxv-erzvaqre-obql-ugzy";a:2:{i:0;R:40803;i:1;R:40466;}s:35:"1232:nhgbperngrjvxv-fhoanzr-nafjref";a:2:{i:0;R:40803;i:1;R:40466;}s:37:"1232:nhgbperngrjvxv-ynathntr-gbc-yvfg";a:2:{i:0;R:40803;i:1;R:40466;}s:17:"1232:jvxvnqbcgvba";a:2:{i:0;s:27:"wikia-automaticwikiadoption";i:1;R:40466;}s:22:"1232:jvxvnqbcgvba-qrfp";a:2:{i:0;R:40903;i:1;R:40466;}s:24:"1232:jvxvnqbcgvba-urnqre";a:2:{i:0;R:40903;i:1;R:40466;}s:30:"1232:jvxvnqbcgvba-ohggba-nqbcg";a:2:{i:0;R:40903;i:1;R:40466;}s:31:"1232:jvxvnqbcgvba-nqbcg-vadhvel";a:2:{i:0;R:40903;i:1;R:40466;}s:29:"1232:jvxvnqbcgvba-qrfpevcgvba";a:2:{i:0;R:40903;i:1;R:40466;}s:34:"1232:jvxvnqbcgvba-xabj-zber-urnqre";a:2:{i:0;R:40903;i:1;R:40466;}s:39:"1232:jvxvnqbcgvba-xabj-zber-qrfpevcgvba";a:2:{i:0;R:40903;i:1;R:40466;}s:36:"1232:jvxvnqbcgvba-nqbcgvba-fhpprffrq";a:2:{i:0;R:40903;i:1;R:40466;}s:33:"1232:jvxvnqbcgvba-nqbcgvba-snvyrq";a:2:{i:0;R:40903;i:1;R:40466;}s:29:"1232:jvxvnqbcgvba-abg-nyybjrq";a:2:{i:0;R:40903;i:1;R:40466;}s:34:"1232:jvxvnqbcgvba-abg-rabhtu-rqvgf";a:2:{i:0;R:40903;i:1;R:40466;}s:34:"1232:jvxvnqbcgvba-nqbcgrq-erpragyl";a:2:{i:0;R:40903;i:1;R:40466;}s:28:"1232:jvxvnqbcgvba-ybt-ernfba";a:2:{i:0;R:40903;i:1;R:40466;}s:30:"1232:jvxvnqbcgvba-abgvsvpngvba";a:2:{i:0;R:40903;i:1;R:40466;}s:36:"1232:jvxvnqbcgvba-znvy-svefg-fhowrpg";a:2:{i:0;R:40903;i:1;R:40466;}s:36:"1232:jvxvnqbcgvba-znvy-svefg-pbagrag";a:2:{i:0;R:40903;i:1;R:40466;}s:41:"1232:jvxvnqbcgvba-znvy-svefg-pbagrag-ugzy";a:2:{i:0;R:40903;i:1;R:40466;}s:37:"1232:jvxvnqbcgvba-znvy-frpbaq-fhowrpg";a:2:{i:0;R:40903;i:1;R:40466;}s:37:"1232:jvxvnqbcgvba-znvy-frpbaq-pbagrag";a:2:{i:0;R:40903;i:1;R:40466;}s:42:"1232:jvxvnqbcgvba-znvy-frpbaq-pbagrag-ugzy";a:2:{i:0;R:40903;i:1;R:40466;}s:39:"1232:jvxvnqbcgvba-znvy-nqbcgvba-fhowrpg";a:2:{i:0;R:40903;i:1;R:40466;}s:39:"1232:jvxvnqbcgvba-znvy-nqbcgvba-pbagrag";a:2:{i:0;R:40903;i:1;R:40466;}s:44:"1232:jvxvnqbcgvba-znvy-nqbcgvba-pbagrag-ugzy";a:2:{i:0;R:40903;i:1;R:40466;}s:22:"1232:gbt-nqbcgvbaznvyf";a:2:{i:0;R:40903;i:1;R:40466;}s:25:"1232:gbt-nqbcgvbaznvyf-i2";a:2:{i:0;R:40903;i:1;R:40466;}s:28:"1232:jvxvnqbcgvba-cers-ynory";a:2:{i:0;R:40903;i:1;R:40466;}s:32:"1232:jvxvnqbcgvba-jrypbzr-urnqre";a:2:{i:0;R:40903;i:1;R:40466;}s:30:"1232:jvxvnqbcgvba-jrypbzr-obql";a:2:{i:0;R:40903;i:1;R:40466;}s:20:"1232:ongpuhfreevtugf";a:2:{i:0;s:21:"wikia-batchuserrights";i:1;R:40466;}s:25:"1232:ongpuhfreevtugf-qrfp";a:2:{i:0;R:40933;i:1;R:40466;}s:26:"1232:ongpuhfreevtugf-anzrf";a:2:{i:0;R:40933;i:1;R:40466;}s:26:"1232:ongpuhfreevtugf-vageb";a:2:{i:0;R:40933;i:1;R:40466;}s:43:"1232:ongpuhfreevtugf-fvatyr-cebterff-hcqngr";a:2:{i:0;R:40933;i:1;R:40466;}s:31:"1232:ongpuhfreevtugf-nqq-tebhcf";a:2:{i:0;R:40933;i:1;R:40466;}s:35:"1232:ongpuhfreevtugf-hfreybnq-reebe";a:2:{i:0;R:40933;i:1;R:40466;}s:30:"1232:ongpuhfreevtugf-ab-tebhcf";a:2:{i:0;R:40933;i:1;R:40466;}s:19:"1232:perngroybtcntr";a:2:{i:0;s:11:"wikia-blogs";i:1;R:40466;}s:26:"1232:perngroybtyvfgvatcntr";a:2:{i:0;R:40942;i:1;R:40466;}s:21:"1232:perngr-oybt-fcnz";a:2:{i:0;R:40942;i:1;R:40466;}s:26:"1232:perngr-oybt-pnag-rqvg";a:2:{i:0;R:40942;i:1;R:40466;}s:30:"1232:perngr-oybt-cbfg-pngrtbel";a:2:{i:0;R:40942;i:1;R:40466;}s:35:"1232:perngr-oybt-cbfg-pngrtbel-obql";a:2:{i:0;R:40942;i:1;R:40466;}s:34:"1232:perngr-oybt-cbfg-pngrtbel-ybt";a:2:{i:0;R:40942;i:1;R:40466;}s:36:"1232:perngr-oybt-cbfg-erprag-yvfgvat";a:2:{i:0;R:40942;i:1;R:40466;}s:42:"1232:perngr-oybt-cbfg-erprag-yvfgvat-gvgyr";a:2:{i:0;R:40942;i:1;R:40466;}s:40:"1232:perngr-oybt-cbfg-erprag-yvfgvat-ybt";a:2:{i:0;R:40942;i:1;R:40466;}s:27:"1232:perngr-oybt-cbfg-gvgyr";a:2:{i:0;R:40942;i:1;R:40466;}s:32:"1232:perngr-oybt-cbfg-gvgyr-rqvg";a:2:{i:0;R:40942;i:1;R:40466;}s:27:"1232:perngr-oybt-sbez-gvgyr";a:2:{i:0;R:40942;i:1;R:40466;}s:31:"1232:perngr-oybt-sbez-cbfg-grkg";a:2:{i:0;R:40942;i:1;R:40466;}s:26:"1232:perngr-oybt-sbez-vasb";a:2:{i:0;R:40942;i:1;R:40466;}s:32:"1232:perngr-oybt-sbez-cbfg-gvgyr";a:2:{i:0;R:40942;i:1;R:40466;}s:34:"1232:perngr-oybt-rzcgl-gvgyr-reebe";a:2:{i:0;R:40942;i:1;R:40466;}s:33:"1232:perngr-oybt-rzcgl-cbfg-reebe";a:2:{i:0;R:40942;i:1;R:40466;}s:30:"1232:perngr-oybt-rzcgl-negvpyr";a:2:{i:0;R:40942;i:1;R:40466;}s:34:"1232:perngr-oybt-rzcgl-negvpyr-ybt";a:2:{i:0;R:40942;i:1;R:40466;}s:36:"1232:perngr-oybt-vainyvq-gvgyr-reebe";a:2:{i:0;R:40942;i:1;R:40466;}s:32:"1232:perngr-yvfgvat-pbasvez-vasb";a:2:{i:0;R:40942;i:1;R:40466;}s:25:"1232:perngr-oybt-ab-ybtva";a:2:{i:0;R:40942;i:1;R:40466;}s:31:"1232:perngr-oybt-ybtva-erdhverq";a:2:{i:0;R:40942;i:1;R:40466;}s:33:"1232:perngr-oybt-pngrtbevrf-gvgyr";a:2:{i:0;R:40942;i:1;R:40466;}s:37:"1232:perngr-oybt-pngrtbevrf-grkgvachg";a:2:{i:0;R:40942;i:1;R:40466;}s:34:"1232:perngr-oybt-pngrtbevrf-fhozvg";a:2:{i:0;R:40942;i:1;R:40466;}s:21:"1232:perngr-oybt-fnir";a:2:{i:0;R:40942;i:1;R:40466;}s:24:"1232:perngr-oybt-cerivrj";a:2:{i:0;R:40942;i:1;R:40466;}s:24:"1232:perngr-oybt-hcqngrq";a:2:{i:0;R:40942;i:1;R:40466;}s:34:"1232:perngr-oybt-crezvffvba-qravrq";a:2:{i:0;R:40942;i:1;R:40466;}s:39:"1232:perngr-oybt-negvpyr-nyernql-rkvfgf";a:2:{i:0;R:40942;i:1;R:40466;}s:30:"1232:perngr-oybt-yvfgvat-gvgyr";a:2:{i:0;R:40942;i:1;R:40466;}s:35:"1232:perngr-oybt-yvfgvat-sbez-gvgyr";a:2:{i:0;R:40942;i:1;R:40466;}s:34:"1232:perngr-oybt-yvfgvat-sbez-vasb";a:2:{i:0;R:40942;i:1;R:40466;}s:35:"1232:perngr-oybt-yvfgvat-cntr-gvgyr";a:2:{i:0;R:40942;i:1;R:40466;}s:32:"1232:perngr-oybt-yvfgvat-cerivrj";a:2:{i:0;R:40942;i:1;R:40466;}s:32:"1232:perngr-oybt-yvfgvat-nhgubef";a:2:{i:0;R:40942;i:1;R:40466;}s:51:"1232:perngr-oybt-yvfgvat-oybt-cbfg-pngrtbevrf-gvgyr";a:2:{i:0;R:40942;i:1;R:40466;}s:46:"1232:perngr-oybt-yvfgvat-cntr-pngrtbevrf-gvgyr";a:2:{i:0;R:40942;i:1;R:40466;}s:32:"1232:perngr-oybt-yvfgvat-zngpurf";a:2:{i:0;R:40942;i:1;R:40466;}s:42:"1232:perngr-oybt-yvfgvat-zngpurf-pnyphyngr";a:2:{i:0;R:40942;i:1;R:40466;}s:44:"1232:perngr-oybt-yvfgvat-zngpurf-erpnyphyngr";a:2:{i:0;R:40942;i:1;R:40466;}s:37:"1232:perngr-oybt-yvfgvat-zngpurf-vasb";a:2:{i:0;R:40942;i:1;R:40466;}s:31:"1232:perngr-oybt-yvfgvat-fbegol";a:2:{i:0;R:40942;i:1;R:40466;}s:36:"1232:perngr-oybt-yvfgvat-fbegol-qngr";a:2:{i:0;R:40942;i:1;R:40466;}s:38:"1232:perngr-oybt-yvfgvat-fbegol-nhgube";a:2:{i:0;R:40942;i:1;R:40466;}s:40:"1232:perngr-oybt-yvfgvat-fbegol-pbzzragf";a:2:{i:0;R:40942;i:1;R:40466;}s:38:"1232:perngr-oybt-yvfgvat-bhgchg-nf-obk";a:2:{i:0;R:40942;i:1;R:40466;}s:39:"1232:perngr-oybt-yvfgvat-bhgchg-nf-cntr";a:2:{i:0;R:40942;i:1;R:40466;}s:58:"1232:perngr-oybt-yvfgvat-gnt-sbezng-abg-erpbtavmrq-ba-cntr";a:2:{i:0;R:40942;i:1;R:40466;}s:16:"1232:oybt-urnqre";a:2:{i:0;R:40942;i:1;R:40466;}s:19:"1232:oybt-fhournqre";a:2:{i:0;R:40942;i:1;R:40466;}s:23:"1232:oybt-fhournqre-nyy";a:2:{i:0;R:40942;i:1;R:40466;}s:22:"1232:oybt-vainyvqcnenz";a:2:{i:0;R:40942;i:1;R:40466;}s:20:"1232:oybt-rzcglcnenz";a:2:{i:0;R:40942;i:1;R:40466;}s:22:"1232:oybt-qrsnhyggvgyr";a:2:{i:0;R:40942;i:1;R:40466;}s:25:"1232:oybt-pbagvahrernqvat";a:2:{i:0;R:40942;i:1;R:40466;}s:22:"1232:oybt-ernqshyycbfg";a:2:{i:0;R:40942;i:1;R:40466;}s:20:"1232:oybt-byqrecbfgf";a:2:{i:0;R:40942;i:1;R:40466;}s:20:"1232:oybt-arjrecbfgf";a:2:{i:0;R:40942;i:1;R:40466;}s:21:"1232:oybt-aoepbzzragf";a:2:{i:0;R:40942;i:1;R:40466;}s:21:"1232:oybt-abcbfgsbhaq";a:2:{i:0;R:40942;i:1;R:40466;}s:18:"1232:oybt-jevgrbar";a:2:{i:0;R:40942;i:1;R:40466;}s:25:"1232:oybt-rzcgl-hfre-oybt";a:2:{i:0;R:40942;i:1;R:40466;}s:21:"1232:oybt-ynfg-rqvgrq";a:2:{i:0;R:40942;i:1;R:40466;}s:15:"1232:oybt-nqqrq";a:2:{i:0;R:40942;i:1;R:40466;}s:16:"1232:oybt-rqvgrq";a:2:{i:0;R:40942;i:1;R:40466;}s:14:"1232:oybt-cntr";a:2:{i:0;R:40942;i:1;R:40466;}s:23:"1232:oybt-mreb-pbzzragf";a:2:{i:0;R:40942;i:1;R:40466;}s:22:"1232:oybt-pbzzrag-cbfg";a:2:{i:0;R:40942;i:1;R:40466;}s:18:"1232:oybt-pbzzragf";a:2:{i:0;R:40942;i:1;R:40466;}s:21:"1232:oybt-ep-pbzzragf";a:2:{i:0;R:40942;i:1;R:40466;}s:22:"1232:oybt-pbzzragf-arj";a:2:{i:0;R:40942;i:1;R:40466;}s:23:"1232:oybt-pbzzragf-fnir";a:2:{i:0;R:40942;i:1;R:40466;}s:24:"1232:oybt-pbzzragf-ynory";a:2:{i:0;R:40942;i:1;R:40466;}s:22:"1232:oybt-ibgvat-ynory";a:2:{i:0;R:40942;i:1;R:40466;}s:23:"1232:oybt-pbzzragf-vasb";a:2:{i:0;R:40942;i:1;R:40466;}s:24:"1232:oybt-pbzzragf-ybtva";a:2:{i:0;R:40942;i:1;R:40466;}s:22:"1232:oybt-pbzzragf-qfp";a:2:{i:0;R:40942;i:1;R:40466;}s:22:"1232:oybt-pbzzragf-nfp";a:2:{i:0;R:40942;i:1;R:40466;}s:28:"1232:oybt-pbzzragf-nabalzbhf";a:2:{i:0;R:40942;i:1;R:40466;}s:24:"1232:oybt-pbzzrag-qryrgr";a:2:{i:0;R:40942;i:1;R:40466;}s:22:"1232:oybt-pbzzrag-uvqr";a:2:{i:0;R:40942;i:1;R:40466;}s:24:"1232:oybt-pbzzrag-hauvqr";a:2:{i:0;R:40942;i:1;R:40466;}s:25:"1232:oybt-pbzzrag-uvfgbel";a:2:{i:0;R:40942;i:1;R:40466;}s:22:"1232:oybt-pbzzrag-rqvg";a:2:{i:0;R:40942;i:1;R:40466;}s:23:"1232:oybt-pbzzrag-reebe";a:2:{i:0;R:40942;i:1;R:40466;}s:28:"1232:oybt-pbzzrag-pnaabg-nqq";a:2:{i:0;R:40942;i:1;R:40466;}s:25:"1232:oybt-ningne-qrsnhygf";a:2:{i:0;R:40942;i:1;R:40466;}s:18:"1232:oyht-phg-fvta";a:2:{i:0;R:40942;i:1;R:40466;}s:34:"1232:oybt-ningne-cersreraprf-gvgyr";a:2:{i:0;R:40942;i:1;R:40466;}s:19:"1232:oybt-cntr-engr";a:2:{i:0;R:40942;i:1;R:40466;}s:27:"1232:oybt-perngr-cbfg-ynory";a:2:{i:0;R:40942;i:1;R:40466;}s:22:"1232:oybt-perngr-ynory";a:2:{i:0;R:40942;i:1;R:40466;}s:27:"1232:oybt-perngr-arkg-ynory";a:2:{i:0;R:40942;i:1;R:40466;}s:30:"1232:oybt-perngr-yvfgvat-ynory";a:2:{i:0;R:40942;i:1;R:40466;}s:23:"1232:oybt-erserfu-ynory";a:2:{i:0;R:40942;i:1;R:40466;}s:23:"1232:oybt-jvqtrgf-ynory";a:2:{i:0;R:40942;i:1;R:40466;}s:27:"1232:oybt-yvfgvat-mreb-frys";a:2:{i:0;R:40942;i:1;R:40466;}s:28:"1232:oybt-yvfgvat-mreb-bgure";a:2:{i:0;R:40942;i:1;R:40466;}s:25:"1232:oybt-yvfgvat-perngrq";a:2:{i:0;R:40942;i:1;R:40466;}s:18:"1232:oybt-hfreoybt";a:2:{i:0;R:40942;i:1;R:40466;}s:22:"1232:oybt-sebzfvgranzr";a:2:{i:0;R:40942;i:1;R:40466;}s:24:"1232:oybtf-ercbegceboyrz";a:2:{i:0;R:40942;i:1;R:40466;}s:25:"1232:oybtf-pbzzrag-uvqqra";a:2:{i:0;R:40942;i:1;R:40466;}s:31:"1232:evtug-oybt-pbzzragf-gbttyr";a:2:{i:0;R:40942;i:1;R:40466;}s:31:"1232:evtug-oybt-pbzzragf-qryrgr";a:2:{i:0;R:40942;i:1;R:40466;}s:29:"1232:evtug-oybt-negvpyrf-rqvg";a:2:{i:0;R:40942;i:1;R:40466;}s:29:"1232:evtug-oybt-negvpyrf-zbir";a:2:{i:0;R:40942;i:1;R:40466;}s:28:"1232:oybtf-haqryrgrq-pbzzrag";a:2:{i:0;R:40942;i:1;R:40466;}s:21:"1232:oybtf-erprag-hey";a:2:{i:0;R:40942;i:1;R:40466;}s:26:"1232:oybtf-erprag-hey-grkg";a:2:{i:0;R:40942;i:1;R:40466;}s:14:"1232:oybt-qrfp";a:2:{i:0;R:40942;i:1;R:40466;}s:27:"1232:oybt-zbircntr-onqgvgyr";a:2:{i:0;R:40942;i:1;R:40466;}s:25:"1232:oybt-pbzzrag-fraqvat";a:2:{i:0;R:40942;i:1;R:40466;}s:12:"1232:oybt-ol";a:2:{i:0;R:40942;i:1;R:40466;}s:25:"1232:pnzcsver-cntr-urnqre";a:2:{i:0;s:14:"wikia-campfire";i:1;R:40466;}s:28:"1232:pnzcsver-yvprafrq-haqre";a:2:{i:0;R:41060;i:1;R:40466;}s:33:"1232:pngrtbel-rkuvovgvba-fbegglcr";a:2:{i:0;s:24:"wikia-categoryexhibition";i:1;R:40466;}s:37:"1232:pngrtbel-rkuvovgvba-nycunorgvpny";a:2:{i:0;R:41063;i:1;R:40466;}s:36:"1232:pngrtbel-rkuvovgvba-zbfgivfvgrq";a:2:{i:0;R:41063;i:1;R:40466;}s:36:"1232:pngrtbel-rkuvovgvba-erpragrqvgf";a:2:{i:0;R:41063;i:1;R:40466;}s:36:"1232:pngrtbel-rkuvovgvba-cntr-urnqre";a:2:{i:0;R:41063;i:1;R:40466;}s:45:"1232:pngrtbel-rkuvovgvba-fhopngrtbevrf-urnqre";a:2:{i:0;R:41063;i:1;R:40466;}s:37:"1232:pngrtbel-rkuvovgvba-zrqvn-urnqre";a:2:{i:0;R:41063;i:1;R:40466;}s:37:"1232:pngrtbel-rkuvovgvba-oybtf-urnqre";a:2:{i:0;R:41063;i:1;R:40466;}s:36:"1232:pngrtbel-rkuvovgvba-qvfcynl-byq";a:2:{i:0;R:41063;i:1;R:40466;}s:36:"1232:pngrtbel-rkuvovgvba-qvfcynl-arj";a:2:{i:0;R:41063;i:1;R:40466;}s:27:"1232:pngrtbeltnyyrevrf-qrfp";a:2:{i:0;s:23:"wikia-categorygalleries";i:1;R:40466;}s:24:"1232:pngrtbelfryrpg-qrfp";a:2:{i:0;s:20:"wikia-categoryselect";i:1;R:40466;}s:29:"1232:pngrtbelfryrpg-pbqr-ivrj";a:2:{i:0;R:41076;i:1;R:40466;}s:41:"1232:pngrtbelfryrpg-pbqr-ivrj-cynprubyqre";a:2:{i:0;R:41076;i:1;R:40466;}s:31:"1232:pngrtbelfryrpg-ivfhny-ivrj";a:2:{i:0;R:41076;i:1;R:40466;}s:35:"1232:pngrtbelfryrpg-vasbobk-pncgvba";a:2:{i:0;R:41076;i:1;R:40466;}s:36:"1232:pngrtbelfryrpg-vasbobk-pngrtbel";a:2:{i:0;R:41076;i:1;R:40466;}s:35:"1232:pngrtbelfryrpg-vasbobk-fbegxrl";a:2:{i:0;R:41076;i:1;R:40466;}s:38:"1232:pngrtbelfryrpg-nqqpngrtbel-ohggba";a:2:{i:0;R:41076;i:1;R:40466;}s:36:"1232:pngrtbelfryrpg-nqqpngrtbel-rqvg";a:2:{i:0;R:41076;i:1;R:40466;}s:32:"1232:pngrtbelfryrpg-fhttrfg-uvag";a:2:{i:0;R:41076;i:1;R:40466;}s:27:"1232:pngrtbelfryrpg-gbbygvc";a:2:{i:0;R:41076;i:1;R:40466;}s:36:"1232:pngrtbelfryrpg-haunaqyrq-flagnk";a:2:{i:0;R:41076;i:1;R:40466;}s:32:"1232:pngrtbelfryrpg-rqvg-fhzznel";a:2:{i:0;R:41076;i:1;R:40466;}s:30:"1232:pngrtbelfryrpg-rzcgl-anzr";a:2:{i:0;R:41076;i:1;R:40466;}s:31:"1232:pngrtbelfryrpg-ohggba-fnir";a:2:{i:0;R:41076;i:1;R:40466;}s:33:"1232:pngrtbelfryrpg-ohggba-pnapry";a:2:{i:0;R:41076;i:1;R:40466;}s:35:"1232:pngrtbelfryrpg-reebe-abg-rkvfg";a:2:{i:0;R:41076;i:1;R:40466;}s:37:"1232:pngrtbelfryrpg-reebe-hfre-evtugf";a:2:{i:0;R:41076;i:1;R:40466;}s:35:"1232:pngrtbelfryrpg-reebe-qo-ybpxrq";a:2:{i:0;R:41076;i:1;R:40466;}s:30:"1232:pngrtbelfryrpg-rqvg-nobeg";a:2:{i:0;R:41076;i:1;R:40466;}s:30:"1232:gbt-qvfnoyrpngrtbelfryrpg";a:2:{i:0;R:41076;i:1;R:40466;}s:33:"1232:gbt-qvfnoyrpngrtbelfryrpg-i2";a:2:{i:0;R:41076;i:1;R:40466;}s:27:"1232:pragenyurycfrnepu-qrfp";a:2:{i:0;s:23:"wikia-centralhelpsearch";i:1;R:40466;}s:34:"1232:pragenyurycfrnepu-cynprubyqre";a:2:{i:0;R:41099;i:1;R:40466;}s:9:"1232:pung";a:2:{i:0;s:10:"wikia-chat";i:1;R:40466;}s:14:"1232:pung-qrfp";a:2:{i:0;R:41102;i:1;R:40466;}s:18:"1232:pung-ab-ybtva";a:2:{i:0;R:41102;i:1;R:40466;}s:23:"1232:pung-ab-ybtva-grkg";a:2:{i:0;R:41102;i:1;R:40466;}s:23:"1232:pung-qrsnhyg-gbcvp";a:2:{i:0;R:41102;i:1;R:40466;}s:21:"1232:pung-hfre-wbvarq";a:2:{i:0;R:41102;i:1;R:40466;}s:19:"1232:pung-ernq-bayl";a:2:{i:0;R:41102;i:1;R:40466;}s:21:"1232:pung-hfre-cnegrq";a:2:{i:0;R:41102;i:1;R:40466;}s:22:"1232:pung-hfre-oybpxrq";a:2:{i:0;R:41102;i:1;R:40466;}s:20:"1232:pung-hfre-nyybj";a:2:{i:0;R:41102;i:1;R:40466;}s:29:"1232:pung-hfre-jnf-xvpxonaarq";a:2:{i:0;R:41102;i:1;R:40466;}s:39:"1232:pung-hfre-creznaragyl-qvfpbaarpgrq";a:2:{i:0;R:41102;i:1;R:40466;}s:38:"1232:pung-vayvarnyreg-n-znqr-o-pungzbq";a:2:{i:0;R:41102;i:1;R:40466;}s:44:"1232:pung-ree-pbaarpgrq-sebz-nabgure-oebjfre";a:2:{i:0;R:41102;i:1;R:40466;}s:42:"1232:pung-ree-pbzzhavpngvat-jvgu-zrqvnjvxv";a:2:{i:0;R:41102;i:1;R:40466;}s:32:"1232:pung-ona-pnag-ona-zbqrengbe";a:2:{i:0;R:41102;i:1;R:40466;}s:28:"1232:pung-ona-nyernql-onaarq";a:2:{i:0;R:41102;i:1;R:40466;}s:33:"1232:pung-ona-lbh-arrq-crezvffvba";a:2:{i:0;R:41102;i:1;R:40466;}s:36:"1232:pung-zvffvat-erdhverq-cnenzrgre";a:2:{i:0;R:41102;i:1;R:40466;}s:29:"1232:pung-ree-nyernql-pungzbq";a:2:{i:0;R:41102;i:1;R:40466;}s:42:"1232:pung-ree-ab-crezvffvba-gb-nqq-pungzbq";a:2:{i:0;R:41102;i:1;R:40466;}s:40:"1232:pung-hfreevtugfybt-n-znqr-o-pungzbq";a:2:{i:0;R:41102;i:1;R:40466;}s:38:"1232:pung-ree-vainyvq-hfreanzr-pungzbq";a:2:{i:0;R:41102;i:1;R:40466;}s:24:"1232:pung-lbh-ner-onaarq";a:2:{i:0;R:41102;i:1;R:40466;}s:29:"1232:pung-lbh-ner-onaarq-grkg";a:2:{i:0;R:41102;i:1;R:40466;}s:34:"1232:pung-ebbz-vf-abg-ba-guvf-jvxv";a:2:{i:0;R:41102;i:1;R:40466;}s:25:"1232:pung-xvpx-ybt-ernfba";a:2:{i:0;R:41102;i:1;R:40466;}s:18:"1232:pung-urnqyvar";a:2:{i:0;R:41102;i:1;R:40466;}s:14:"1232:pung-yvir";a:2:{i:0;R:41102;i:1;R:40466;}s:22:"1232:pung-fgneg-n-pung";a:2:{i:0;R:41102;i:1;R:40466;}s:19:"1232:pung-jubf-urer";a:2:{i:0;R:41102;i:1;R:40466;}s:23:"1232:pung-wbva-gur-pung";a:2:{i:0;R:41102;i:1;R:40466;}s:20:"1232:pung-rqvg-pbhag";a:2:{i:0;R:41102;i:1;R:40466;}s:22:"1232:pung-zrzore-fvapr";a:2:{i:0;R:41102;i:1;R:40466;}s:31:"1232:pung-terng-lbher-ybttrq-va";a:2:{i:0;R:41102;i:1;R:40466;}s:27:"1232:pung-hfre-znah-cebsvyr";a:2:{i:0;R:41102;i:1;R:40466;}s:28:"1232:pung-hfre-znah-pbagevof";a:2:{i:0;R:41102;i:1;R:40466;}s:27:"1232:pung-hfre-znah-cevingr";a:2:{i:0;R:41102;i:1;R:40466;}s:33:"1232:pung-hfre-znah-tvir-pung-zbq";a:2:{i:0;R:41102;i:1;R:40466;}s:27:"1232:pung-hfre-znah-xvpxona";a:2:{i:0;R:41102;i:1;R:40466;}s:33:"1232:pung-hfre-znah-cevingr-oybpx";a:2:{i:0;R:41102;i:1;R:40466;}s:33:"1232:pung-hfre-znah-cevingr-nyybj";a:2:{i:0;R:41102;i:1;R:40466;}s:33:"1232:pung-hfre-znah-cevingr-pybfr";a:2:{i:0;R:41102;i:1;R:40466;}s:26:"1232:pung-cevingr-urnqyvar";a:2:{i:0;R:41102;i:1;R:40466;}s:24:"1232:evtug-pungzbqrengbe";a:2:{i:0;R:41102;i:1;R:40466;}s:24:"1232:tebhc-pungzbqrengbe";a:2:{i:0;R:41102;i:1;R:40466;}s:31:"1232:tebhc-pungzbqrengbe-zrzore";a:2:{i:0;R:41102;i:1;R:40466;}s:28:"1232:tebhccntr-pungzbqrengbe";a:2:{i:0;R:41102;i:1;R:40466;}s:25:"1232:tebhc-onaarqsebzpung";a:2:{i:0;R:41102;i:1;R:40466;}s:32:"1232:tebhc-onaarqsebzpung-zrzore";a:2:{i:0;R:41102;i:1;R:40466;}s:29:"1232:tebhccntr-onaarqsebzpung";a:2:{i:0;R:41102;i:1;R:40466;}s:14:"1232:rzbgvpbaf";a:2:{i:0;R:41102;i:1;R:40466;}s:15:"1232:pybnxpurpx";a:2:{i:0;s:16:"wikia-cloakcheck";i:1;R:40466;}s:20:"1232:pybnxpurpx-qrfp";a:2:{i:0;R:41155;i:1;R:40466;}s:21:"1232:evtug-pybnxpurpx";a:2:{i:0;R:41155;i:1;R:40466;}s:29:"1232:pybnxpurpx-sbez-hfreanzr";a:2:{i:0;R:41155;i:1;R:40466;}s:26:"1232:pybnxpurpx-sbez-purpx";a:2:{i:0;R:41155;i:1;R:40466;}s:31:"1232:pybnxpurpx-sbez-purpx-frys";a:2:{i:0;R:41155;i:1;R:40466;}s:29:"1232:pybnxpurpx-cebprff-rzcgl";a:2:{i:0;R:41155;i:1;R:40466;}s:32:"1232:pybnxpurpx-cebprff-abgrkvfg";a:2:{i:0;R:41155;i:1;R:40466;}s:32:"1232:pybnxpurpx-cebprff-hfreanzr";a:2:{i:0;R:41155;i:1;R:40466;}s:38:"1232:pybnxpurpx-cebprff-nppbhagntr-lrf";a:2:{i:0;R:41155;i:1;R:40466;}s:37:"1232:pybnxpurpx-cebprff-nppbhagntr-ab";a:2:{i:0;R:41155;i:1;R:40466;}s:37:"1232:pybnxpurpx-cebprff-rznvypbas-lrf";a:2:{i:0;R:41155;i:1;R:40466;}s:36:"1232:pybnxpurpx-cebprff-rznvypbas-ab";a:2:{i:0;R:41155;i:1;R:40466;}s:33:"1232:pybnxpurpx-cebprff-rqvgf-lrf";a:2:{i:0;R:41155;i:1;R:40466;}s:32:"1232:pybnxpurpx-cebprff-rqvgf-ab";a:2:{i:0;R:41155;i:1;R:40466;}s:24:"1232:pbzobnwnkybtva-qrfp";a:2:{i:0;s:20:"wikia-comboajaxlogin";i:1;R:40466;}s:29:"1232:pbzobnwnkybtva-perngrybt";a:2:{i:0;R:41171;i:1;R:40466;}s:29:"1232:pbzobnwnkybtva-npgvbazft";a:2:{i:0;R:41171;i:1;R:40466;}s:39:"1232:pbzobnwnkybtva-npgvbazft-cebgrpgrq";a:2:{i:0;R:41171;i:1;R:40466;}s:36:"1232:pbzobnwnkybtva-pbaarpgznexrgvat";a:2:{i:0;R:41171;i:1;R:40466;}s:46:"1232:pbzobnwnkybtva-ybt-va-jvgu-snprobbx-bnfvf";a:2:{i:0;R:41171;i:1;R:40466;}s:42:"1232:pbzobnwnkybtva-pbaarpgznexrgvat-bnfvf";a:2:{i:0;R:41171;i:1;R:40466;}s:41:"1232:pbzobnwnkybtva-pbaarpgznexrgvat-onpx";a:2:{i:0;R:41171;i:1;R:40466;}s:44:"1232:pbzobnwnkybtva-pbaarpgznexrgvat-sbejneq";a:2:{i:0;R:41171;i:1;R:40466;}s:37:"1232:pbzobnwnkybtva-pbaarpgqverpgvbaf";a:2:{i:0;R:41171;i:1;R:40466;}s:39:"1232:pbzobnwnkybtva-cbfg-abg-haqrefgbbq";a:2:{i:0;R:41171;i:1;R:40466;}s:32:"1232:pbzobnwnkybtva-ernqbaylgrkg";a:2:{i:0;R:41171;i:1;R:40466;}s:29:"1232:pbzobnwnkybtva-nwnkreebe";a:2:{i:0;R:41171;i:1;R:40466;}s:27:"1232:pbzzhavglzrffntrf-qrfp";a:2:{i:0;s:23:"wikia-communitymessages";i:1;R:40466;}s:33:"1232:pbzzhavglzrffntrf-abgvpr-zft";a:2:{i:0;R:41185;i:1;R:40466;}s:28:"1232:pbasvezrznvycebzcg-qrfp";a:2:{i:0;s:24:"wikia-confirmemailprompt";i:1;R:40466;}s:29:"1232:pbasvezrznvycebzcg-reebe";a:2:{i:0;R:41188;i:1;R:40466;}s:22:"1232:pbagragsrrqf-qrfp";a:2:{i:0;s:18:"wikia-contentfeeds";i:1;R:40466;}s:37:"1232:pbagragsrrqf-arjvzntrf-eff-gvgyr";a:2:{i:0;R:41191;i:1;R:40466;}s:36:"1232:pbagragsrrqf-arjvzntrf-eff-qrfp";a:2:{i:0;R:41191;i:1;R:40466;}s:45:"1232:pbagragsrrqf-svefgsrjnegvpyrf-gnt-urnqre";a:2:{i:0;R:41191;i:1;R:40466;}s:44:"1232:pbagragsrrqf-svefgsrjnegvpyrf-gnt-gvgyr";a:2:{i:0;R:41191;i:1;R:40466;}s:43:"1232:pbagragsrrqf-svefgsrjnegvpyrf-gnt-arkg";a:2:{i:0;R:41191;i:1;R:40466;}s:56:"1232:pbagragsrrqf-svefgsrjnegvpyrf-gnt-rzcgl-gvgyr-reebe";a:2:{i:0;R:41191;i:1;R:40466;}s:55:"1232:pbagragsrrqf-svefgsrjnegvpyrf-gnt-rzcgl-obql-reebe";a:2:{i:0;R:41191;i:1;R:40466;}s:23:"1232:perngrarjjvxv-qrfp";a:2:{i:0;s:19:"wikia-createnewwiki";i:1;R:40466;}s:13:"1232:paj-arkg";a:2:{i:0;R:41200;i:1;R:40466;}s:13:"1232:paj-onpx";a:2:{i:0;R:41200;i:1;R:40466;}s:11:"1232:paj-be";a:2:{i:0;R:41200;i:1;R:40466;}s:14:"1232:paj-gvgyr";a:2:{i:0;R:41200;i:1;R:40466;}s:27:"1232:paj-anzr-jvxv-urnqyvar";a:2:{i:0;R:41200;i:1;R:40466;}s:27:"1232:paj-anzr-jvxv-perngvir";a:2:{i:0;R:41200;i:1;R:40466;}s:24:"1232:paj-anzr-jvxv-ynory";a:2:{i:0;R:41200;i:1;R:40466;}s:23:"1232:paj-anzr-jvxv-jvxv";a:2:{i:0;R:41200;i:1;R:40466;}s:31:"1232:paj-anzr-jvxv-qbznva-ynory";a:2:{i:0;R:41200;i:1;R:40466;}s:27:"1232:paj-anzr-jvxv-ynathntr";a:2:{i:0;R:41200;i:1;R:40466;}s:25:"1232:paj-anzr-jvxv-qbznva";a:2:{i:0;R:41200;i:1;R:40466;}s:31:"1232:paj-anzr-jvxv-fhozvg-reebe";a:2:{i:0;R:41200;i:1;R:40466;}s:14:"1232:paj-ybtva";a:2:{i:0;R:41200;i:1;R:40466;}s:15:"1232:paj-fvtahc";a:2:{i:0;R:41200;i:1;R:40466;}s:22:"1232:paj-fvtahc-cebzcg";a:2:{i:0;R:41200;i:1;R:40466;}s:23:"1232:paj-pnyy-gb-fvtahc";a:2:{i:0;R:41200;i:1;R:40466;}s:21:"1232:paj-ybtva-cebzcg";a:2:{i:0;R:41200;i:1;R:40466;}s:22:"1232:paj-pnyy-gb-ybtva";a:2:{i:0;R:41200;i:1;R:40466;}s:22:"1232:paj-nhgu-urnqyvar";a:2:{i:0;R:41200;i:1;R:40466;}s:23:"1232:paj-nhgu-urnqyvar2";a:2:{i:0;R:41200;i:1;R:40466;}s:22:"1232:paj-nhgu-perngvir";a:2:{i:0;R:41200;i:1;R:40466;}s:29:"1232:paj-nhgu-fvtahc-perngvir";a:2:{i:0;R:41200;i:1;R:40466;}s:29:"1232:paj-nhgu-snprobbx-fvtahc";a:2:{i:0;R:41200;i:1;R:40466;}s:28:"1232:paj-nhgu-snprobbx-ybtva";a:2:{i:0;R:41200;i:1;R:40466;}s:26:"1232:paj-hfrenhgu-urnqyvar";a:2:{i:0;R:41200;i:1;R:40466;}s:26:"1232:paj-hfrenhgu-perngvir";a:2:{i:0;R:41200;i:1;R:40466;}s:35:"1232:paj-hfrenhgu-znexrgvat-urnqvat";a:2:{i:0;R:41200;i:1;R:40466;}s:32:"1232:paj-hfrenhgu-znexrgvat-obql";a:2:{i:0;R:41200;i:1;R:40466;}s:31:"1232:paj-hfrenhgu-fvtahc-ohggba";a:2:{i:0;R:41200;i:1;R:40466;}s:22:"1232:paj-qrfp-urnqyvar";a:2:{i:0;R:41200;i:1;R:40466;}s:22:"1232:paj-qrfp-perngvir";a:2:{i:0;R:41200;i:1;R:40466;}s:25:"1232:paj-qrfp-cynprubyqre";a:2:{i:0;R:41200;i:1;R:40466;}s:18:"1232:paj-qrfp-gvc1";a:2:{i:0;R:41200;i:1;R:40466;}s:27:"1232:paj-qrfp-gvc1-perngvir";a:2:{i:0;R:41200;i:1;R:40466;}s:18:"1232:paj-qrfp-gvc2";a:2:{i:0;R:41200;i:1;R:40466;}s:27:"1232:paj-qrfp-gvc2-perngvir";a:2:{i:0;R:41200;i:1;R:40466;}s:18:"1232:paj-qrfp-gvc3";a:2:{i:0;R:41200;i:1;R:40466;}s:27:"1232:paj-qrfp-gvc3-perngvir";a:2:{i:0;R:41200;i:1;R:40466;}s:20:"1232:paj-qrfp-pubbfr";a:2:{i:0;R:41200;i:1;R:40466;}s:24:"1232:paj-qrfp-fryrpg-bar";a:2:{i:0;R:41200;i:1;R:40466;}s:26:"1232:paj-qrfp-qrsnhyg-ynat";a:2:{i:0;R:41200;i:1;R:40466;}s:25:"1232:paj-qrfp-punatr-ynat";a:2:{i:0;R:41200;i:1;R:40466;}s:18:"1232:paj-qrfp-ynat";a:2:{i:0;R:41200;i:1;R:40466;}s:31:"1232:paj-qrfp-jvxv-fhozvg-reebe";a:2:{i:0;R:41200;i:1;R:40466;}s:23:"1232:paj-gurzr-urnqyvar";a:2:{i:0;R:41200;i:1;R:40466;}s:23:"1232:paj-gurzr-perngvir";a:2:{i:0;R:41200;i:1;R:40466;}s:26:"1232:paj-gurzr-vafgehpgvba";a:2:{i:0;R:41200;i:1;R:40466;}s:25:"1232:paj-hctenqr-urnqyvar";a:2:{i:0;R:41200;i:1;R:40466;}s:25:"1232:paj-hctenqr-perngvir";a:2:{i:0;R:41200;i:1;R:40466;}s:26:"1232:paj-hctenqr-znexrgvat";a:2:{i:0;R:41200;i:1;R:40466;}s:20:"1232:paj-hctenqr-abj";a:2:{i:0;R:41200;i:1;R:40466;}s:24:"1232:paj-hctenqr-qrpyvar";a:2:{i:0;R:41200;i:1;R:40466;}s:25:"1232:paj-jrypbzr-urnqyvar";a:2:{i:0;R:41200;i:1;R:40466;}s:29:"1232:paj-jrypbzr-vafgehpgvba1";a:2:{i:0;R:41200;i:1;R:40466;}s:29:"1232:paj-jrypbzr-vafgehpgvba2";a:2:{i:0;R:41200;i:1;R:40466;}s:21:"1232:paj-jrypbzr-uryc";a:2:{i:0;R:41200;i:1;R:40466;}s:22:"1232:paj-reebe-trareny";a:2:{i:0;R:41200;i:1;R:40466;}s:30:"1232:paj-reebe-trareny-urnqvat";a:2:{i:0;R:41200;i:1;R:40466;}s:23:"1232:paj-reebe-qngnonfr";a:2:{i:0;R:41200;i:1;R:40466;}s:23:"1232:paj-onqjbeq-urnqre";a:2:{i:0;R:41200;i:1;R:40466;}s:20:"1232:paj-onqjbeq-zft";a:2:{i:0;R:41200;i:1;R:40466;}s:32:"1232:paj-reebe-jvxv-yvzvg-urnqre";a:2:{i:0;R:41200;i:1;R:40466;}s:25:"1232:paj-reebe-jvxv-yvzvg";a:2:{i:0;R:41200;i:1;R:40466;}s:29:"1232:paj-reebe-oybpxrq-urnqre";a:2:{i:0;R:41200;i:1;R:40466;}s:22:"1232:paj-reebe-oybpxrq";a:2:{i:0;R:41200;i:1;R:40466;}s:23:"1232:paj-reebe-gbeoybpx";a:2:{i:0;R:41200;i:1;R:40466;}s:18:"1232:paj-reebe-obg";a:2:{i:0;R:41200;i:1;R:40466;}s:25:"1232:paj-reebe-obg-urnqre";a:2:{i:0;R:41200;i:1;R:40466;}s:20:"1232:perngrcntr-qrfp";a:2:{i:0;s:16:"wikia-createpage";i:1;R:40466;}s:24:"1232:perngrcntr-fc-gvgyr";a:2:{i:0;R:41270;i:1;R:40466;}s:21:"1232:perngrcntr_gvgyr";a:2:{i:0;R:41270;i:1;R:40466;}s:29:"1232:perngrcntr_gvgyr_pncgvba";a:2:{i:0;R:41270;i:1;R:40466;}s:26:"1232:perngrcntr_ragre_grkg";a:2:{i:0;R:41270;i:1;R:40466;}s:33:"1232:perngrcntr_rzcgl_gvgyr_reebe";a:2:{i:0;R:41270;i:1;R:40466;}s:40:"1232:perngrcntr_rzcgl_negvpyr_obql_reebe";a:2:{i:0;R:41270;i:1;R:40466;}s:35:"1232:perngrcntr_vainyvq_gvgyr_reebe";a:2:{i:0;R:41270;i:1;R:40466;}s:38:"1232:perngrcntr_negvpyr_nyernql_rkvfgf";a:2:{i:0;R:41270;i:1;R:40466;}s:20:"1232:perngrcntr_fcnz";a:2:{i:0;R:41270;i:1;R:40466;}s:25:"1232:perngrcntr_pnag_rqvg";a:2:{i:0;R:41270;i:1;R:40466;}s:28:"1232:perngrcntr-qvnybt-gvgyr";a:2:{i:0;R:41270;i:1;R:40466;}s:31:"1232:perngrcntr-qvnybt-zrffntr1";a:2:{i:0;R:41270;i:1;R:40466;}s:31:"1232:perngrcntr-qvnybt-zrffntr2";a:2:{i:0;R:41270;i:1;R:40466;}s:29:"1232:perngrcntr-qvnybt-pubbfr";a:2:{i:0;R:41270;i:1;R:40466;}s:29:"1232:perngrcntr-qvnybt-sbezng";a:2:{i:0;R:41270;i:1;R:40466;}s:28:"1232:perngrcntr-qvnybt-oynax";a:2:{i:0;R:41270;i:1;R:40466;}s:33:"1232:perngrcntr-reebe-rzcgl-gvgyr";a:2:{i:0;R:41270;i:1;R:40466;}s:35:"1232:perngrcntr-reebe-vainyvq-gvgyr";a:2:{i:0;R:41270;i:1;R:40466;}s:36:"1232:perngrcntr-reebe-negvpyr-rkvfgf";a:2:{i:0;R:41270;i:1;R:40466;}s:34:"1232:perngrcntr-reebe-negvpyr-fcnz";a:2:{i:0;R:41270;i:1;R:40466;}s:37:"1232:perngrcntr-reebe-negvpyr-oybpxrq";a:2:{i:0;R:41270;i:1;R:40466;}s:31:"1232:gbt-perngrcntrqrsnhygoynax";a:2:{i:0;R:41270;i:1;R:40466;}s:32:"1232:gbt-perngrcntrcbchcqvfnoyrq";a:2:{i:0;R:41270;i:1;R:40466;}s:18:"1232:arjcntrynlbhg";a:2:{i:0;R:41270;i:1;R:40466;}s:16:"1232:rqvgnppbhag";a:2:{i:0;s:17:"wikia-editaccount";i:1;R:40466;}s:21:"1232:rqvgnppbhag-qrfp";a:2:{i:0;R:41296;i:1;R:40466;}s:22:"1232:rqvgnppbhag-gvgyr";a:2:{i:0;R:41296;i:1;R:40466;}s:29:"1232:rqvgnppbhag-senzr-znantr";a:2:{i:0;R:41296;i:1;R:40466;}s:28:"1232:rqvgnppbhag-senzr-hfntr";a:2:{i:0;R:41296;i:1;R:40466;}s:22:"1232:rqvgnppbhag-hfntr";a:2:{i:0;R:41296;i:1;R:40466;}s:29:"1232:rqvgnppbhag-ynory-fryrpg";a:2:{i:0;R:41296;i:1;R:40466;}s:31:"1232:rqvgnppbhag-fhozvg-nppbhag";a:2:{i:0;R:41296;i:1;R:40466;}s:30:"1232:rqvgnppbhag-senzr-nppbhag";a:2:{i:0;R:41296;i:1;R:40466;}s:28:"1232:rqvgnppbhag-senzr-pybfr";a:2:{i:0;R:41296;i:1;R:40466;}s:28:"1232:rqvgnppbhag-ynory-rznvy";a:2:{i:0;R:41296;i:1;R:40466;}s:27:"1232:rqvgnppbhag-ynory-cnff";a:2:{i:0;R:41296;i:1;R:40466;}s:31:"1232:rqvgnppbhag-ynory-ernyanzr";a:2:{i:0;R:41296;i:1;R:40466;}s:33:"1232:rqvgnppbhag-ynory-pyrnehafho";a:2:{i:0;R:41296;i:1;R:40466;}s:29:"1232:rqvgnppbhag-fhozvg-rznvy";a:2:{i:0;R:41296;i:1;R:40466;}s:28:"1232:rqvgnppbhag-fhozvg-cnff";a:2:{i:0;R:41296;i:1;R:40466;}s:32:"1232:rqvgnppbhag-fhozvg-ernyanzr";a:2:{i:0;R:41296;i:1;R:40466;}s:34:"1232:rqvgnppbhag-fhozvg-pyrnehafho";a:2:{i:0;R:41296;i:1;R:40466;}s:36:"1232:rqvgnppbhag-fhozvg-pyrneqvfnoyr";a:2:{i:0;R:41296;i:1;R:40466;}s:29:"1232:rqvgnppbhag-fhozvg-pybfr";a:2:{i:0;R:41296;i:1;R:40466;}s:28:"1232:rqvgnppbhag-hfntr-pybfr";a:2:{i:0;R:41296;i:1;R:40466;}s:30:"1232:rqvgnppbhag-jneavat-pybfr";a:2:{i:0;R:41296;i:1;R:40466;}s:23:"1232:rqvgnppbhag-fgnghf";a:2:{i:0;R:41296;i:1;R:40466;}s:30:"1232:rqvgnppbhag-fhpprff-rznvy";a:2:{i:0;R:41296;i:1;R:40466;}s:36:"1232:rqvgnppbhag-fhpprff-rznvy-oynax";a:2:{i:0;R:41296;i:1;R:40466;}s:29:"1232:rqvgnppbhag-fhpprff-cnff";a:2:{i:0;R:41296;i:1;R:40466;}s:33:"1232:rqvgnppbhag-fhpprff-ernyanzr";a:2:{i:0;R:41296;i:1;R:40466;}s:30:"1232:rqvgnppbhag-fhpprff-hafho";a:2:{i:0;R:41296;i:1;R:40466;}s:32:"1232:rqvgnppbhag-fhpprff-qvfnoyr";a:2:{i:0;R:41296;i:1;R:40466;}s:30:"1232:rqvgnppbhag-fhpprff-pybfr";a:2:{i:0;R:41296;i:1;R:40466;}s:28:"1232:rqvgnppbhag-reebe-rznvy";a:2:{i:0;R:41296;i:1;R:40466;}s:27:"1232:rqvgnppbhag-reebe-cnff";a:2:{i:0;R:41296;i:1;R:40466;}s:31:"1232:rqvgnppbhag-reebe-ernyanzr";a:2:{i:0;R:41296;i:1;R:40466;}s:28:"1232:rqvgnppbhag-reebe-pybfr";a:2:{i:0;R:41296;i:1;R:40466;}s:30:"1232:rqvgnppbhag-vainyvq-rznvy";a:2:{i:0;R:41296;i:1;R:40466;}s:23:"1232:rqvgnppbhag-abhfre";a:2:{i:0;R:41296;i:1;R:40466;}s:35:"1232:rqvgnppbhag-erzbir-ningne-snvy";a:2:{i:0;R:41296;i:1;R:40466;}s:26:"1232:rqvgnppbhag-erdhrfgrq";a:2:{i:0;R:41296;i:1;R:40466;}s:30:"1232:rqvgnppbhag-abg-erdhrfgrq";a:2:{i:0;R:41296;i:1;R:40466;}s:37:"1232:rqvgnppbhag-ynony-nppbhag-fgnghf";a:2:{i:0;R:41296;i:1;R:40466;}s:35:"1232:rqvgnppbhag-ynony-rznvy-fgnghf";a:2:{i:0;R:41296;i:1;R:40466;}s:33:"1232:rqvgnppbhag-fgnghf-pbasvezrq";a:2:{i:0;R:41296;i:1;R:40466;}s:35:"1232:rqvgnppbhag-fgnghf-hapbasvezrq";a:2:{i:0;R:41296;i:1;R:40466;}s:32:"1232:rqvgnppbhag-fgnghf-ernyhfre";a:2:{i:0;R:41296;i:1;R:40466;}s:32:"1232:rqvgnppbhag-fgnghf-grzchfre";a:2:{i:0;R:41296;i:1;R:40466;}s:37:"1232:rqvgnppbhag-reebe-grzchfre-rznvy";a:2:{i:0;R:41296;i:1;R:40466;}s:39:"1232:rqvgnppbhag-rznvy-punatr-erdhrfgrq";a:2:{i:0;R:41296;i:1;R:40466;}s:20:"1232:rqvgnppbhag-ybt";a:2:{i:0;R:41296;i:1;R:40466;}s:27:"1232:rqvgnppbhag-ybt-urnqre";a:2:{i:0;R:41296;i:1;R:40466;}s:32:"1232:rqvgnppbhag-ybt-ragel-rznvy";a:2:{i:0;R:41296;i:1;R:40466;}s:31:"1232:rqvgnppbhag-ybt-ragel-cnff";a:2:{i:0;R:41296;i:1;R:40466;}s:35:"1232:rqvgnppbhag-ybt-ragel-ernyanzr";a:2:{i:0;R:41296;i:1;R:40466;}s:32:"1232:rqvgnppbhag-ybt-ragel-pybfr";a:2:{i:0;R:41296;i:1;R:40466;}s:29:"1232:rqvg-nppbhag-pybfrq-synt";a:2:{i:0;R:41296;i:1;R:40466;}s:22:"1232:evtug-rqvgnppbhag";a:2:{i:0;R:41296;i:1;R:40466;}s:24:"1232:rqvgcntrynlbhg-zber";a:2:{i:0;s:20:"wikia-editpagelayout";i:1;R:40466;}s:24:"1232:rqvgcntrynlbhg-yrff";a:2:{i:0;R:41352;i:1;R:40466;}s:32:"1232:rqvgcntrynlbhg-urycyvax-hey";a:2:{i:0;R:41352;i:1;R:40466;}s:28:"1232:rqvgcntrynlbhg-urycyvax";a:2:{i:0;R:41352;i:1;R:40466;}s:37:"1232:rqvgcntrynlbhg-abgvsvpngvbafyvax";a:2:{i:0;R:41352;i:1;R:40466;}s:42:"1232:rqvgcntrynlbhg-abgvsvpngvbafyvax-abar";a:2:{i:0;R:41352;i:1;R:40466;}s:30:"1232:rqvgcntrynlbhg-rqvg-gvgyr";a:2:{i:0;R:41352;i:1;R:40466;}s:29:"1232:rqvgcntrynlbhg-rqvg-vasb";a:2:{i:0;R:41352;i:1;R:40466;}s:35:"1232:rqvgcntrynlbhg-qvss-urnqre-hey";a:2:{i:0;R:41352;i:1;R:40466;}s:31:"1232:rqvgcntrynlbhg-qvss-urnqre";a:2:{i:0;R:41352;i:1;R:40466;}s:33:"1232:rqvgcntrynlbhg-zlrqvg-urnqre";a:2:{i:0;R:41352;i:1;R:40466;}s:33:"1232:rqvgcntrynlbhg-pncgpun-gvgyr";a:2:{i:0;R:41352;i:1;R:40466;}s:41:"1232:rqvgcntrynlbhg-cntrpbagebyf-cntryvax";a:2:{i:0;R:41352;i:1;R:40466;}s:42:"1232:rqvgcntrynlbhg-cntrpbagebyf-zvaberqvg";a:2:{i:0;R:41352;i:1;R:40466;}s:45:"1232:rqvgcntrynlbhg-cntrpbagebyf-fhzznelynory";a:2:{i:0;R:41352;i:1;R:40466;}s:48:"1232:rqvgcntrynlbhg-cntrpbagebyf-arjfrpgvbaynory";a:2:{i:0;R:41352;i:1;R:40466;}s:37:"1232:rqvgcntrynlbhg-cntrpbagebyf-onpx";a:2:{i:0;R:41352;i:1;R:40466;}s:40:"1232:rqvgcntrynlbhg-cntrpbagebyf-punatrf";a:2:{i:0;R:41352;i:1;R:40466;}s:32:"1232:rqvgcntrynlbhg-oybpxrq-hfre";a:2:{i:0;R:41352;i:1;R:40466;}s:38:"1232:rqvgcntrynlbhg-rqvg-fhzznel-ynory";a:2:{i:0;R:41352;i:1;R:40466;}s:42:"1232:rqvgcntrynlbhg-fhowrpg-urnqyvar-ynory";a:2:{i:0;R:41352;i:1;R:40466;}s:29:"1232:jvxvn-rqvgbe-zrqvn-vzntr";a:2:{i:0;R:41352;i:1;R:40466;}s:31:"1232:jvxvn-rqvgbe-zrqvn-tnyyrel";a:2:{i:0;R:41352;i:1;R:40466;}s:33:"1232:jvxvn-rqvgbe-zrqvn-fyvqrfubj";a:2:{i:0;R:41352;i:1;R:40466;}s:30:"1232:jvxvn-rqvgbe-zrqvn-fyvqre";a:2:{i:0;R:41352;i:1;R:40466;}s:29:"1232:jvxvn-rqvgbe-zrqvn-ivqrb";a:2:{i:0;R:41352;i:1;R:40466;}s:37:"1232:jvxvn-rqvgbe-zrqvn-vzntr-gbbygvc";a:2:{i:0;R:41352;i:1;R:40466;}s:39:"1232:jvxvn-rqvgbe-zrqvn-tnyyrel-gbbygvc";a:2:{i:0;R:41352;i:1;R:40466;}s:41:"1232:jvxvn-rqvgbe-zrqvn-fyvqrfubj-gbbygvc";a:2:{i:0;R:41352;i:1;R:40466;}s:38:"1232:jvxvn-rqvgbe-zrqvn-fyvqre-gbbygvc";a:2:{i:0;R:41352;i:1;R:40466;}s:37:"1232:jvxvn-rqvgbe-zrqvn-ivqrb-gbbygvc";a:2:{i:0;R:41352;i:1;R:40466;}s:37:"1232:jvxvn-rqvgbe-fbhepr-obyq-gbbygvc";a:2:{i:0;R:41352;i:1;R:40466;}s:39:"1232:jvxvn-rqvgbe-fbhepr-vgnyvp-gbbygvc";a:2:{i:0;R:41352;i:1;R:40466;}s:37:"1232:jvxvn-rqvgbe-fbhepr-yvax-gbbygvc";a:2:{i:0;R:41352;i:1;R:40466;}s:41:"1232:jvxvn-rqvgbe-zbqhyrf-grzcyngrf-gvgyr";a:2:{i:0;R:41352;i:1;R:40466;}s:47:"1232:jvxvn-rqvgbe-zbqhyrf-grzcyngrf-nqq-gbbygvc";a:2:{i:0;R:41352;i:1;R:40466;}s:50:"1232:jvxvn-rqvgbe-zbqhyrf-grzcyngrf-bguregrzcyngrf";a:2:{i:0;R:41352;i:1;R:40466;}s:48:"1232:jvxvn-rqvgbe-zbqhyrf-grzcyngrf-fubjhfrqyvfg";a:2:{i:0;R:41352;i:1;R:40466;}s:61:"1232:jvxvn-rqvgbe-zbqhyrf-grzcyngrf-fubjhfrqyvfg-qvnybt-gvgyr";a:2:{i:0;R:41352;i:1;R:40466;}s:46:"1232:jvxvn-rqvgbe-zbqhyrf-grzcyngrf-znxrynlbhg";a:2:{i:0;R:41352;i:1;R:40466;}s:65:"1232:jvxvn-rqvgbe-zbqhyrf-grzcyngrf-znxrynlbhg-pbasvezngvba-gvgyr";a:2:{i:0;R:41352;i:1;R:40466;}s:64:"1232:jvxvn-rqvgbe-zbqhyrf-grzcyngrf-znxrynlbhg-pbasvezngvba-grkg";a:2:{i:0;R:41352;i:1;R:40466;}s:38:"1232:jvxvn-rqvgbe-zbqhyrf-yvprafr-grkg";a:2:{i:0;R:41352;i:1;R:40466;}s:38:"1232:jvxvn-rqvgbe-zbqhyrf-vafreg-gvgyr";a:2:{i:0;R:41352;i:1;R:40466;}s:42:"1232:jvxvn-rqvgbe-zbqhyrf-pngrtbevrf-gvgyr";a:2:{i:0;R:41352;i:1;R:40466;}s:39:"1232:jvxvn-rqvgbe-ybnqvatfgngrf-ybnqvat";a:2:{i:0;R:41352;i:1;R:40466;}s:40:"1232:jvxvn-rqvgbe-ybnqvatfgngrf-gbfbhepr";a:2:{i:0;R:41352;i:1;R:40466;}s:40:"1232:jvxvn-rqvgbe-ybnqvatfgngrf-gbivfhny";a:2:{i:0;R:41352;i:1;R:40466;}s:38:"1232:jvxvn-rqvgbe-ybnqvatfgngrf-fnivat";a:2:{i:0;R:41352;i:1;R:40466;}s:35:"1232:jvxvn-rqvgbe-rqvggbbyf-pncgvba";a:2:{i:0;R:41352;i:1;R:40466;}s:40:"1232:jvxvn-rqvgbe-rqvggbbyf-qvnybt-gvgyr";a:2:{i:0;R:41352;i:1;R:40466;}s:38:"1232:jvxvn-rqvgbe-abgvprf-qvnybt-gvgyr";a:2:{i:0;R:41352;i:1;R:40466;}s:37:"1232:jvxvn-rqvgbe-cerivrj-rqvgfhzznel";a:2:{i:0;R:41352;i:1;R:40466;}s:38:"1232:jvxvn-rqvgbe-yrnirpbasvez-zrffntr";a:2:{i:0;R:41352;i:1;R:40466;}s:29:"1232:abahavpbqroebjfre-abgvpr";a:2:{i:0;R:41352;i:1;R:40466;}s:28:"1232:eri-qryrgrq-grkg-abgvpr";a:2:{i:0;R:41352;i:1;R:40466;}s:27:"1232:ernqbayljneavat-abgvpr";a:2:{i:0;R:41352;i:1;R:40466;}s:27:"1232:nabarqvgjneavat-abgvpr";a:2:{i:0;R:41352;i:1;R:40466;}s:27:"1232:ybatcntrjneavat-abgvpr";a:2:{i:0;R:41352;i:1;R:40466;}s:33:"1232:hfrevainyvqpffwfgvgyr-abgvpr";a:2:{i:0;R:41352;i:1;R:40466;}s:36:"1232:frzvcebgrpgrqcntrjneavat-abgvpr";a:2:{i:0;R:41352;i:1;R:40466;}s:32:"1232:cebgrpgrqcntrjneavat-abgvpr";a:2:{i:0;R:41352;i:1;R:40466;}s:33:"1232:gvgyrcebgrpgrqjneavat-abgvpr";a:2:{i:0;R:41352;i:1;R:40466;}s:38:"1232:erperngr-zbirqqryrgrq-jnea-abgvpr";a:2:{i:0;R:41352;i:1;R:40466;}s:25:"1232:erfgber-rqvgf-abgvpr";a:2:{i:0;R:41352;i:1;R:40466;}s:30:"1232:erfgber-rqvgf-qvss-abgvpr";a:2:{i:0;R:41352;i:1;R:40466;}s:18:"1232:cersf-trareny";a:2:{i:0;R:41352;i:1;R:40466;}s:27:"1232:cersf-fgnegvat-na-rqvg";a:2:{i:0;R:41352;i:1;R:40466;}s:29:"1232:cersf-rqvgvat-rkcrevrapr";a:2:{i:0;R:41352;i:1;R:40466;}s:26:"1232:cersf-zbabobbx-ynlbhg";a:2:{i:0;R:41352;i:1;R:40466;}s:24:"1232:cersf-rqvgnern-fvmr";a:2:{i:0;R:41352;i:1;R:40466;}s:20:"1232:gbt-rqvgfrpgvba";a:2:{i:0;R:41352;i:1;R:40466;}s:18:"1232:gbt-rqvgjvqgu";a:2:{i:0;R:41352;i:1;R:40466;}s:21:"1232:gbt-zvabeqrsnhyg";a:2:{i:0;R:41352;i:1;R:40466;}s:25:"1232:gbt-sbeprrqvgfhzznel";a:2:{i:0;R:41352;i:1;R:40466;}s:16:"1232:sbyybj-qrfp";a:2:{i:0;s:12:"wikia-follow";i:1;R:40466;}s:16:"1232:cersf-onfvp";a:2:{i:0;R:41428;i:1;R:40466;}s:48:"1232:jvxvnsbyybjrqcntrf-fcrpvny-urnqvat-pngrtbel";a:2:{i:0;R:41428;i:1;R:40466;}s:47:"1232:jvxvnsbyybjrqcntrf-fcrpvny-urnqvat-negvpyr";a:2:{i:0;R:41428;i:1;R:40466;}s:45:"1232:jvxvnsbyybjrqcntrf-fcrpvny-urnqvat-oybtf";a:2:{i:0;R:41428;i:1;R:40466;}s:45:"1232:jvxvnsbyybjrqcntrf-fcrpvny-urnqvat-sbehz";a:2:{i:0;R:41428;i:1;R:40466;}s:47:"1232:jvxvnsbyybjrqcntrf-fcrpvny-urnqvat-cebwrpg";a:2:{i:0;R:41428;i:1;R:40466;}s:44:"1232:jvxvnsbyybjrqcntrf-fcrpvny-urnqvat-hfre";a:2:{i:0;R:41428;i:1;R:40466;}s:49:"1232:jvxvnsbyybjrqcntrf-fcrpvny-urnqvat-grzcyngrf";a:2:{i:0;R:41428;i:1;R:40466;}s:49:"1232:jvxvnsbyybjrqcntrf-fcrpvny-urnqvat-zrqvnjvxv";a:2:{i:0;R:41428;i:1;R:40466;}s:45:"1232:jvxvnsbyybjrqcntrf-fcrpvny-urnqvat-zrqvn";a:2:{i:0;R:41428;i:1;R:40466;}s:41:"1232:jvxvnsbyybjrqcntrf-fcrpvny-anzrfcnpr";a:2:{i:0;R:41428;i:1;R:40466;}s:44:"1232:jvxvnsbyybjrqcntrf-fcrpvny-urnqvat-jnyy";a:2:{i:0;R:41428;i:1;R:40466;}s:37:"1232:jvxvnsbyybjrqcntrf-fcrpvny-rzcgl";a:2:{i:0;R:41428;i:1;R:40466;}s:36:"1232:jvxvnsbyybjrqcntrf-fcrpvny-naba";a:2:{i:0;R:41428;i:1;R:40466;}s:44:"1232:bnfvf-jvxvnsbyybjrqcntrf-fcrpvny-frrnyy";a:2:{i:0;R:41428;i:1;R:40466;}s:38:"1232:jvxvnsbyybjrqcntrf-fcrpvny-frrnyy";a:2:{i:0;R:41428;i:1;R:40466;}s:39:"1232:jvxvnsbyybjrqcntrf-fcrpvny-fubjnyy";a:2:{i:0;R:41428;i:1;R:40466;}s:40:"1232:jvxvnsbyybjrqcntrf-fcrpvny-fubjzber";a:2:{i:0;R:41428;i:1;R:40466;}s:37:"1232:jvxvnsbyybjrqcntrf-fcrpvny-gvgyr";a:2:{i:0;R:41428;i:1;R:40466;}s:46:"1232:jvxvnsbyybjrqcntrf-fcrpvny-qryrgr-gbbygvc";a:2:{i:0;R:41428;i:1;R:40466;}s:38:"1232:jvxvnsbyybjrqcntrf-fcrpvny-uvqqra";a:2:{i:0;R:41428;i:1;R:40466;}s:45:"1232:jvxvnsbyybjrqcntrf-fcrpvny-uvqqra-hauvqr";a:2:{i:0;R:41428;i:1;R:40466;}s:39:"1232:jvxvnsbyybjrqcntrf-fcrpvny-oybt-ol";a:2:{i:0;R:41428;i:1;R:40466;}s:32:"1232:jvxvnsbyybjrqcntrf-znfgurnq";a:2:{i:0;R:41428;i:1;R:40466;}s:33:"1232:jvxvnsbyybjrqcntrf-sbyybjvat";a:2:{i:0;R:41428;i:1;R:40466;}s:45:"1232:jvxvnsbyybjrqcntrf-fcrpvny-gvgyr-hfreone";a:2:{i:0;R:41428;i:1;R:40466;}s:28:"1232:gbt-rabgvssbyybjrqcntrf";a:2:{i:0;R:41428;i:1;R:40466;}s:33:"1232:gbt-rabgvssbyybjrqzvaberqvgf";a:2:{i:0;R:41428;i:1;R:40466;}s:44:"1232:cersf-jvxvnsbyybjrqcntrf-cersf-nqinaprq";a:2:{i:0;R:41428;i:1;R:40466;}s:45:"1232:cersf-jvxvnsbyybjrqcntrf-cersf-jngpuyvfg";a:2:{i:0;R:41428;i:1;R:40466;}s:26:"1232:gbt-uvqrsbyybjrqcntrf";a:2:{i:0;R:41428;i:1;R:40466;}s:31:"1232:sbyybj-pngrtbelnqq-fhzznel";a:2:{i:0;R:41428;i:1;R:40466;}s:31:"1232:sbyybj-oybtyvfgvat-fhzznel";a:2:{i:0;R:41428;i:1;R:40466;}s:40:"1232:jvxvnsbyybjrqcntrf-hfrecntr-urnqvat";a:2:{i:0;R:41428;i:1;R:40466;}s:45:"1232:jvxvnsbyybjrqcntrf-hfrecntr-uvqr-gbbygvc";a:2:{i:0;R:41428;i:1;R:40466;}s:37:"1232:jvxvnsbyybjrqcntrf-hfrecntr-zber";a:2:{i:0;R:41428;i:1;R:40466;}s:37:"1232:jvxvnsbyybjrqcntrf-hfrecntr-uvqr";a:2:{i:0;R:41428;i:1;R:40466;}s:38:"1232:jvxvnsbyybjrqcntrf-hfrecntr-rzcgl";a:2:{i:0;R:41428;i:1;R:40466;}s:31:"1232:rabgvs_fhowrpg_pngrtbelnqq";a:2:{i:0;R:41428;i:1;R:40466;}s:28:"1232:rabgvs_obql_pngrtbelnqq";a:2:{i:0;R:41428;i:1;R:40466;}s:33:"1232:rabgvs_obql_pngrtbelnqq-ugzy";a:2:{i:0;R:41428;i:1;R:40466;}s:28:"1232:rabgvs_fhowrpg_oybtcbfg";a:2:{i:0;R:41428;i:1;R:40466;}s:25:"1232:rabgvs_obql_oybtcbfg";a:2:{i:0;R:41428;i:1;R:40466;}s:30:"1232:rabgvs_obql_oybtcbfg-ugzy";a:2:{i:0;R:41428;i:1;R:40466;}s:23:"1232:sbhaqrerznvyf-qrfp";a:2:{i:0;s:19:"wikia-founderemails";i:1;R:40466;}s:29:"1232:gbt-sbhaqrerznvyfranoyrq";a:2:{i:0;R:41474;i:1;R:40466;}s:48:"1232:sbhaqrerznvyf-rznvy-hfre-ertvfgrerq-fhowrpg";a:2:{i:0;R:41474;i:1;R:40466;}s:45:"1232:sbhaqrerznvyf-rznvy-hfre-ertvfgrerq-obql";a:2:{i:0;R:41474;i:1;R:40466;}s:49:"1232:sbhaqrerznvyf-rznvy-hfre-ertvfgrerq-terrgvat";a:2:{i:0;R:41474;i:1;R:40466;}s:49:"1232:sbhaqrerznvyf-rznvy-hfre-ertvfgrerq-urnqyvar";a:2:{i:0;R:41474;i:1;R:40466;}s:48:"1232:sbhaqrerznvyf-rznvy-hfre-ertvfgrerq-pbagrag";a:2:{i:0;R:41474;i:1;R:40466;}s:50:"1232:sbhaqrerznvyf-rznvy-hfre-ertvfgrerq-fvtangher";a:2:{i:0;R:41474;i:1;R:40466;}s:47:"1232:sbhaqrerznvyf-rznvy-hfre-ertvfgrerq-ohggba";a:2:{i:0;R:41474;i:1;R:40466;}s:50:"1232:sbhaqrerznvyf-rznvy-hfre-ertvfgrerq-obql-ugzy";a:2:{i:0;R:41474;i:1;R:40466;}s:46:"1232:sbhaqrerznvyf-rznvy-0-qnlf-cnffrq-fhowrpg";a:2:{i:0;R:41474;i:1;R:40466;}s:43:"1232:sbhaqrerznvyf-rznvy-0-qnlf-cnffrq-obql";a:2:{i:0;R:41474;i:1;R:40466;}s:48:"1232:sbhaqrerznvyf-rznvy-0-qnlf-cnffrq-obql-ugzy";a:2:{i:0;R:41474;i:1;R:40466;}s:46:"1232:sbhaqrerznvyf-rznvy-3-qnlf-cnffrq-fhowrpg";a:2:{i:0;R:41474;i:1;R:40466;}s:43:"1232:sbhaqrerznvyf-rznvy-3-qnlf-cnffrq-obql";a:2:{i:0;R:41474;i:1;R:40466;}s:48:"1232:sbhaqrerznvyf-rznvy-3-qnlf-cnffrq-obql-ugzy";a:2:{i:0;R:41474;i:1;R:40466;}s:47:"1232:sbhaqrerznvyf-rznvy-10-qnlf-cnffrq-fhowrpg";a:2:{i:0;R:41474;i:1;R:40466;}s:44:"1232:sbhaqrerznvyf-rznvy-10-qnlf-cnffrq-obql";a:2:{i:0;R:41474;i:1;R:40466;}s:64:"1232:sbhaqrerznvyf-rznvy-cntr-rqvgrq-ert-hfre-svefg-rqvg-fhowrpg";a:2:{i:0;R:41474;i:1;R:40466;}s:61:"1232:sbhaqrerznvyf-rznvy-cntr-rqvgrq-ert-hfre-svefg-rqvg-obql";a:2:{i:0;R:41474;i:1;R:40466;}s:44:"1232:sbhaqrerznvyf-rznvy-svefg-rqvg-terrgvat";a:2:{i:0;R:41474;i:1;R:40466;}s:44:"1232:sbhaqrerznvyf-rznvy-svefg-rqvg-urnqyvar";a:2:{i:0;R:41474;i:1;R:40466;}s:43:"1232:sbhaqrerznvyf-rznvy-svefg-rqvg-pbagrag";a:2:{i:0;R:41474;i:1;R:40466;}s:45:"1232:sbhaqrerznvyf-rznvy-svefg-rqvg-fvtangher";a:2:{i:0;R:41474;i:1;R:40466;}s:42:"1232:sbhaqrerznvyf-rznvy-svefg-rqvg-ohggba";a:2:{i:0;R:41474;i:1;R:40466;}s:66:"1232:sbhaqrerznvyf-rznvy-cntr-rqvgrq-ert-hfre-svefg-rqvg-obql-ugzy";a:2:{i:0;R:41474;i:1;R:40466;}s:53:"1232:sbhaqrerznvyf-rznvy-cntr-rqvgrq-ert-hfre-fhowrpg";a:2:{i:0;R:41474;i:1;R:40466;}s:50:"1232:sbhaqrerznvyf-rznvy-cntr-rqvgrq-ert-hfre-obql";a:2:{i:0;R:41474;i:1;R:40466;}s:46:"1232:sbhaqrerznvyf-rznvy-trareny-rqvg-terrgvat";a:2:{i:0;R:41474;i:1;R:40466;}s:46:"1232:sbhaqrerznvyf-rznvy-trareny-rqvg-urnqyvar";a:2:{i:0;R:41474;i:1;R:40466;}s:45:"1232:sbhaqrerznvyf-rznvy-trareny-rqvg-pbagrag";a:2:{i:0;R:41474;i:1;R:40466;}s:47:"1232:sbhaqrerznvyf-rznvy-trareny-rqvg-fvtangher";a:2:{i:0;R:41474;i:1;R:40466;}s:44:"1232:sbhaqrerznvyf-rznvy-trareny-rqvg-ohggba";a:2:{i:0;R:41474;i:1;R:40466;}s:55:"1232:sbhaqrerznvyf-rznvy-cntr-rqvgrq-ert-hfre-obql-ugzy";a:2:{i:0;R:41474;i:1;R:40466;}s:49:"1232:sbhaqrerznvyf-rznvy-cntr-rqvgrq-naba-fhowrpg";a:2:{i:0;R:41474;i:1;R:40466;}s:46:"1232:sbhaqrerznvyf-rznvy-cntr-rqvgrq-naba-obql";a:2:{i:0;R:41474;i:1;R:40466;}s:43:"1232:sbhaqrerznvyf-rznvy-naba-rqvg-terrgvat";a:2:{i:0;R:41474;i:1;R:40466;}s:43:"1232:sbhaqrerznvyf-rznvy-naba-rqvg-urnqyvar";a:2:{i:0;R:41474;i:1;R:40466;}s:42:"1232:sbhaqrerznvyf-rznvy-naba-rqvg-pbagrag";a:2:{i:0;R:41474;i:1;R:40466;}s:44:"1232:sbhaqrerznvyf-rznvy-naba-rqvg-fvtangher";a:2:{i:0;R:41474;i:1;R:40466;}s:41:"1232:sbhaqrerznvyf-rznvy-naba-rqvg-ohggba";a:2:{i:0;R:41474;i:1;R:40466;}s:51:"1232:sbhaqrerznvyf-rznvy-cntr-rqvgrq-naba-obql-ugzy";a:2:{i:0;R:41474;i:1;R:40466;}s:56:"1232:sbhaqrerznvyf-nafjref-rznvy-hfre-ertvfgrerq-fhowrpg";a:2:{i:0;R:41474;i:1;R:40466;}s:53:"1232:sbhaqrerznvyf-nafjref-rznvy-hfre-ertvfgrerq-obql";a:2:{i:0;R:41474;i:1;R:40466;}s:58:"1232:sbhaqrerznvyf-nafjref-rznvy-hfre-ertvfgrerq-obql-ugzy";a:2:{i:0;R:41474;i:1;R:40466;}s:54:"1232:sbhaqrerznvyf-nafjref-rznvy-0-qnlf-cnffrq-fhowrpg";a:2:{i:0;R:41474;i:1;R:40466;}s:51:"1232:sbhaqrerznvyf-nafjref-rznvy-0-qnlf-cnffrq-obql";a:2:{i:0;R:41474;i:1;R:40466;}s:56:"1232:sbhaqrerznvyf-nafjref-rznvy-0-qnlf-cnffrq-obql-ugzy";a:2:{i:0;R:41474;i:1;R:40466;}s:54:"1232:sbhaqrerznvyf-nafjref-rznvy-3-qnlf-cnffrq-fhowrpg";a:2:{i:0;R:41474;i:1;R:40466;}s:51:"1232:sbhaqrerznvyf-nafjref-rznvy-3-qnlf-cnffrq-obql";a:2:{i:0;R:41474;i:1;R:40466;}s:56:"1232:sbhaqrerznvyf-nafjref-rznvy-3-qnlf-cnffrq-obql-ugzy";a:2:{i:0;R:41474;i:1;R:40466;}s:55:"1232:sbhaqrerznvyf-nafjref-rznvy-10-qnlf-cnffrq-fhowrpg";a:2:{i:0;R:41474;i:1;R:40466;}s:52:"1232:sbhaqrerznvyf-nafjref-rznvy-10-qnlf-cnffrq-obql";a:2:{i:0;R:41474;i:1;R:40466;}s:57:"1232:sbhaqrerznvyf-nafjref-rznvy-10-qnlf-cnffrq-obql-ugzy";a:2:{i:0;R:41474;i:1;R:40466;}s:72:"1232:sbhaqrerznvyf-nafjref-rznvy-cntr-rqvgrq-ert-hfre-svefg-rqvg-fhowrpg";a:2:{i:0;R:41474;i:1;R:40466;}s:69:"1232:sbhaqrerznvyf-nafjref-rznvy-cntr-rqvgrq-ert-hfre-svefg-rqvg-obql";a:2:{i:0;R:41474;i:1;R:40466;}s:74:"1232:sbhaqrerznvyf-nafjref-rznvy-cntr-rqvgrq-ert-hfre-svefg-rqvg-obql-ugzy";a:2:{i:0;R:41474;i:1;R:40466;}s:61:"1232:sbhaqrerznvyf-nafjref-rznvy-cntr-rqvgrq-ert-hfre-fhowrpg";a:2:{i:0;R:41474;i:1;R:40466;}s:58:"1232:sbhaqrerznvyf-nafjref-rznvy-cntr-rqvgrq-ert-hfre-obql";a:2:{i:0;R:41474;i:1;R:40466;}s:63:"1232:sbhaqrerznvyf-nafjref-rznvy-cntr-rqvgrq-ert-hfre-obql-ugzy";a:2:{i:0;R:41474;i:1;R:40466;}s:57:"1232:sbhaqrerznvyf-nafjref-rznvy-cntr-rqvgrq-naba-fhowrpg";a:2:{i:0;R:41474;i:1;R:40466;}s:54:"1232:sbhaqrerznvyf-nafjref-rznvy-cntr-rqvgrq-naba-obql";a:2:{i:0;R:41474;i:1;R:40466;}s:59:"1232:sbhaqrerznvyf-nafjref-rznvy-cntr-rqvgrq-naba-obql-ugzy";a:2:{i:0;R:41474;i:1;R:40466;}s:40:"1232:sbhaqrerznvyf-ybg-unccravat-fhowrpg";a:2:{i:0;R:41474;i:1;R:40466;}s:37:"1232:sbhaqrerznvyf-ybg-unccravat-obql";a:2:{i:0;R:41474;i:1;R:40466;}s:42:"1232:sbhaqrerznvyf-ybg-unccravat-obql-ugzy";a:2:{i:0;R:41474;i:1;R:40466;}s:47:"1232:sbhaqrerznvyf-rznvy-ybg-unccravat-terrgvat";a:2:{i:0;R:41474;i:1;R:40466;}s:47:"1232:sbhaqrerznvyf-rznvy-ybg-unccravat-urnqyvar";a:2:{i:0;R:41474;i:1;R:40466;}s:46:"1232:sbhaqrerznvyf-rznvy-ybg-unccravat-pbagrag";a:2:{i:0;R:41474;i:1;R:40466;}s:48:"1232:sbhaqrerznvyf-rznvy-ybg-unccravat-fvtangher";a:2:{i:0;R:41474;i:1;R:40466;}s:45:"1232:sbhaqrerznvyf-rznvy-ybg-unccravat-ohggba";a:2:{i:0;R:41474;i:1;R:40466;}s:37:"1232:sbhaqrerznvyf-rznvy-sbbgre-yvar1";a:2:{i:0;R:41474;i:1;R:40466;}s:37:"1232:sbhaqrerznvyf-rznvy-sbbgre-yvar2";a:2:{i:0;R:41474;i:1;R:40466;}s:37:"1232:sbhaqrerznvyf-rznvy-sbbgre-yvar3";a:2:{i:0;R:41474;i:1;R:40466;}s:38:"1232:sbhaqrerznvyf-rznvy-0-qnl-urnqvat";a:2:{i:0;R:41474;i:1;R:40466;}s:46:"1232:sbhaqrerznvyf-rznvy-0-qnl-pbatenghyngvbaf";a:2:{i:0;R:41474;i:1;R:40466;}s:43:"1232:sbhaqrerznvyf-rznvy-0-qnl-gvcf-urnqvat";a:2:{i:0;R:41474;i:1;R:40466;}s:47:"1232:sbhaqrerznvyf-rznvy-0-qnl-nqqcntrf-urnqvat";a:2:{i:0;R:41474;i:1;R:40466;}s:47:"1232:sbhaqrerznvyf-rznvy-0-qnl-nqqcntrf-pbagrag";a:2:{i:0;R:41474;i:1;R:40466;}s:46:"1232:sbhaqrerznvyf-rznvy-0-qnl-nqqcntrf-ohggba";a:2:{i:0;R:41474;i:1;R:40466;}s:48:"1232:sbhaqrerznvyf-rznvy-0-qnl-nqqcubgbf-urnqvat";a:2:{i:0;R:41474;i:1;R:40466;}s:48:"1232:sbhaqrerznvyf-rznvy-0-qnl-nqqcubgbf-pbagrag";a:2:{i:0;R:41474;i:1;R:40466;}s:47:"1232:sbhaqrerznvyf-rznvy-0-qnl-nqqcubgbf-ohggba";a:2:{i:0;R:41474;i:1;R:40466;}s:53:"1232:sbhaqrerznvyf-rznvy-0-qnl-phfgbzvmrgurzr-urnqvat";a:2:{i:0;R:41474;i:1;R:40466;}s:53:"1232:sbhaqrerznvyf-rznvy-0-qnl-phfgbzvmrgurzr-pbagrag";a:2:{i:0;R:41474;i:1;R:40466;}s:52:"1232:sbhaqrerznvyf-rznvy-0-qnl-phfgbzvmrgurzr-ohggba";a:2:{i:0;R:41474;i:1;R:40466;}s:46:"1232:sbhaqrerznvyf-rznvy-0-qnl-jvxvnurycf-grkg";a:2:{i:0;R:41474;i:1;R:40466;}s:51:"1232:sbhaqrerznvyf-rznvy-0-qnl-jvxvnurycf-fvtangher";a:2:{i:0;R:41474;i:1;R:40466;}s:38:"1232:sbhaqrerznvyf-rznvy-3-qnl-urnqvat";a:2:{i:0;R:41474;i:1;R:40466;}s:46:"1232:sbhaqrerznvyf-rznvy-3-qnl-pbatenghyngvbaf";a:2:{i:0;R:41474;i:1;R:40466;}s:43:"1232:sbhaqrerznvyf-rznvy-3-qnl-gvcf-urnqvat";a:2:{i:0;R:41474;i:1;R:40466;}s:51:"1232:sbhaqrerznvyf-rznvy-3-qnl-rqvgznvacntr-urnqvat";a:2:{i:0;R:41474;i:1;R:40466;}s:51:"1232:sbhaqrerznvyf-rznvy-3-qnl-rqvgznvacntr-pbagrag";a:2:{i:0;R:41474;i:1;R:40466;}s:50:"1232:sbhaqrerznvyf-rznvy-3-qnl-rqvgznvacntr-ohggba";a:2:{i:0;R:41474;i:1;R:40466;}s:48:"1232:sbhaqrerznvyf-rznvy-3-qnl-nqqcubgbf-urnqvat";a:2:{i:0;R:41474;i:1;R:40466;}s:48:"1232:sbhaqrerznvyf-rznvy-3-qnl-nqqcubgbf-pbagrag";a:2:{i:0;R:41474;i:1;R:40466;}s:47:"1232:sbhaqrerznvyf-rznvy-3-qnl-nqqcubgbf-ohggba";a:2:{i:0;R:41474;i:1;R:40466;}s:46:"1232:sbhaqrerznvyf-rznvy-3-qnl-rkcyber-urnqvat";a:2:{i:0;R:41474;i:1;R:40466;}s:46:"1232:sbhaqrerznvyf-rznvy-3-qnl-rkcyber-pbagrag";a:2:{i:0;R:41474;i:1;R:40466;}s:45:"1232:sbhaqrerznvyf-rznvy-3-qnl-rkcyber-ohggba";a:2:{i:0;R:41474;i:1;R:40466;}s:46:"1232:sbhaqrerznvyf-rznvy-3-qnl-jvxvnurycf-grkg";a:2:{i:0;R:41474;i:1;R:40466;}s:51:"1232:sbhaqrerznvyf-rznvy-3-qnl-jvxvnurycf-fvtangher";a:2:{i:0;R:41474;i:1;R:40466;}s:39:"1232:sbhaqrerznvyf-rznvy-10-qnl-urnqvat";a:2:{i:0;R:41474;i:1;R:40466;}s:47:"1232:sbhaqrerznvyf-rznvy-10-qnl-pbatenghyngvbaf";a:2:{i:0;R:41474;i:1;R:40466;}s:44:"1232:sbhaqrerznvyf-rznvy-10-qnl-gvcf-urnqvat";a:2:{i:0;R:41474;i:1;R:40466;}s:45:"1232:sbhaqrerznvyf-rznvy-10-qnl-funer-urnqvat";a:2:{i:0;R:41474;i:1;R:40466;}s:45:"1232:sbhaqrerznvyf-rznvy-10-qnl-funer-pbagrag";a:2:{i:0;R:41474;i:1;R:40466;}s:45:"1232:sbhaqrerznvyf-rznvy-10-qnl-rznvy-urnqvat";a:2:{i:0;R:41474;i:1;R:40466;}s:45:"1232:sbhaqrerznvyf-rznvy-10-qnl-rznvy-pbagrag";a:2:{i:0;R:41474;i:1;R:40466;}s:44:"1232:sbhaqrerznvyf-rznvy-10-qnl-wbva-urnqvat";a:2:{i:0;R:41474;i:1;R:40466;}s:44:"1232:sbhaqrerznvyf-rznvy-10-qnl-wbva-pbagrag";a:2:{i:0;R:41474;i:1;R:40466;}s:47:"1232:sbhaqrerznvyf-rznvy-10-qnl-jvxvnurycf-grkg";a:2:{i:0;R:41474;i:1;R:40466;}s:52:"1232:sbhaqrerznvyf-rznvy-10-qnl-jvxvnurycf-fvtangher";a:2:{i:0;R:41474;i:1;R:40466;}s:45:"1232:sbhaqrerznvyf-rznvy-ivrjf-qvtrfg-fhowrpg";a:2:{i:0;R:41474;i:1;R:40466;}s:42:"1232:sbhaqrerznvyf-rznvy-ivrjf-qvtrfg-obql";a:2:{i:0;R:41474;i:1;R:40466;}s:46:"1232:sbhaqrerznvyf-rznvy-ivrjf-qvtrfg-terrgvat";a:2:{i:0;R:41474;i:1;R:40466;}s:46:"1232:sbhaqrerznvyf-rznvy-ivrjf-qvtrfg-urnqyvar";a:2:{i:0;R:41474;i:1;R:40466;}s:45:"1232:sbhaqrerznvyf-rznvy-ivrjf-qvtrfg-pbagrag";a:2:{i:0;R:41474;i:1;R:40466;}s:47:"1232:sbhaqrerznvyf-rznvy-ivrjf-qvtrfg-fvtangher";a:2:{i:0;R:41474;i:1;R:40466;}s:44:"1232:sbhaqrerznvyf-rznvy-ivrjf-qvtrfg-ohggba";a:2:{i:0;R:41474;i:1;R:40466;}s:48:"1232:sbhaqrerznvyf-rznvy-pbzcyrgr-qvtrfg-fhowrpg";a:2:{i:0;R:41474;i:1;R:40466;}s:45:"1232:sbhaqrerznvyf-rznvy-pbzcyrgr-qvtrfg-obql";a:2:{i:0;R:41474;i:1;R:40466;}s:49:"1232:sbhaqrerznvyf-rznvy-pbzcyrgr-qvtrfg-terrgvat";a:2:{i:0;R:41474;i:1;R:40466;}s:49:"1232:sbhaqrerznvyf-rznvy-pbzcyrgr-qvtrfg-urnqyvar";a:2:{i:0;R:41474;i:1;R:40466;}s:57:"1232:sbhaqrerznvyf-rznvy-pbzcyrgr-qvtrfg-pbagrag-urnqvat1";a:2:{i:0;R:41474;i:1;R:40466;}s:49:"1232:sbhaqrerznvyf-rznvy-pbzcyrgr-qvtrfg-pbagrag1";a:2:{i:0;R:41474;i:1;R:40466;}s:57:"1232:sbhaqrerznvyf-rznvy-pbzcyrgr-qvtrfg-pbagrag-urnqvat2";a:2:{i:0;R:41474;i:1;R:40466;}s:49:"1232:sbhaqrerznvyf-rznvy-pbzcyrgr-qvtrfg-pbagrag2";a:2:{i:0;R:41474;i:1;R:40466;}s:57:"1232:sbhaqrerznvyf-rznvy-pbzcyrgr-qvtrfg-pbagrag-urnqvat3";a:2:{i:0;R:41474;i:1;R:40466;}s:49:"1232:sbhaqrerznvyf-rznvy-pbzcyrgr-qvtrfg-pbagrag3";a:2:{i:0;R:41474;i:1;R:40466;}s:50:"1232:sbhaqrerznvyf-rznvy-pbzcyrgr-qvtrfg-fvtangher";a:2:{i:0;R:41474;i:1;R:40466;}s:47:"1232:sbhaqrerznvyf-rznvy-pbzcyrgr-qvtrfg-ohggba";a:2:{i:0;R:41474;i:1;R:40466;}s:29:"1232:sbhaqrerznvyf-cers-wbvaf";a:2:{i:0;R:41474;i:1;R:40466;}s:29:"1232:sbhaqrerznvyf-cers-rqvgf";a:2:{i:0;R:41474;i:1;R:40466;}s:36:"1232:sbhaqrerznvyf-cers-ivrjf-qvtrfg";a:2:{i:0;R:41474;i:1;R:40466;}s:39:"1232:sbhaqrerznvyf-cers-pbzcyrgr-qvtrfg";a:2:{i:0;R:41474;i:1;R:40466;}s:32:"1232:sbhaqrerznvyf-cers-wbvaf-i2";a:2:{i:0;R:41474;i:1;R:40466;}s:32:"1232:sbhaqrerznvyf-cers-rqvgf-i2";a:2:{i:0;R:41474;i:1;R:40466;}s:39:"1232:sbhaqrerznvyf-cers-ivrjf-qvtrfg-i2";a:2:{i:0;R:41474;i:1;R:40466;}s:42:"1232:sbhaqrerznvyf-cers-pbzcyrgr-qvtrfg-i2";a:2:{i:0;R:41474;i:1;R:40466;}s:31:"1232:sbhaqrecebterffone-perqvgf";a:2:{i:0;s:24:"wikia-founderprogressbar";i:1;R:40466;}s:36:"1232:sbhaqrecebterffone-jvqtrg-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:38:"1232:sbhaqrecebterffone-cebterff-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:46:"1232:sbhaqrecebterffone-cebterff-frr-shyy-yvfg";a:2:{i:0;R:41615;i:1;R:40466;}s:47:"1232:sbhaqrecebterffone-cebterff-uvqr-shyy-yvfg";a:2:{i:0;R:41615;i:1;R:40466;}s:36:"1232:sbhaqrecebterffone-fxvc-sbe-abj";a:2:{i:0;R:41615;i:1;R:40466;}s:38:"1232:sbhaqrecebterffone-gnfx-pbzcyrgrq";a:2:{i:0;R:41615;i:1;R:40466;}s:34:"1232:sbhaqrecebterffone-yvfg-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:41:"1232:sbhaqrecebterffone-yvfg-qrfpevcgvba1";a:2:{i:0;R:41615;i:1;R:40466;}s:41:"1232:sbhaqrecebterffone-yvfg-qrfpevcgvba2";a:2:{i:0;R:41615;i:1;R:40466;}s:39:"1232:sbhaqrecebterffone-yvfg-gnfx-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:47:"1232:sbhaqrecebterffone-yvfg-fxvccrq-gnfx-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:46:"1232:sbhaqrecebterffone-yvfg-fxvccrq-gnfx-qrfp";a:2:{i:0;R:41615;i:1;R:40466;}s:45:"1232:sbhaqrecebterffone-yvfg-obahf-gnfx-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:44:"1232:sbhaqrecebterffone-yvfg-obahf-gnfx-qrfp";a:2:{i:0;R:41615;i:1;R:40466;}s:43:"1232:sbhaqrecebterffone-gnfx-pnyy-gb-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:42:"1232:sbhaqrecebterffone-pbzcyrgvba-zrffntr";a:2:{i:0;R:41615;i:1;R:40466;}s:41:"1232:sbhaqrecebterffone-obahf-gnfx-abgvpr";a:2:{i:0;R:41615;i:1;R:40466;}s:40:"1232:sbhaqrecebterffone-cntr-nqq10-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:41:"1232:sbhaqrecebterffone-cntr-nqq10-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:46:"1232:sbhaqrecebterffone-cntr-nqq10-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:49:"1232:sbhaqrecebterffone-gurzrqrfvtare-ivfvg-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:50:"1232:sbhaqrecebterffone-gurzrqrfvtare-ivfvg-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:55:"1232:sbhaqrecebterffone-gurzrqrfvtare-ivfvg-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:43:"1232:sbhaqrecebterffone-znvacntr-rqvg-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:44:"1232:sbhaqrecebterffone-znvacntr-rqvg-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:49:"1232:sbhaqrecebterffone-znvacntr-rqvg-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:41:"1232:sbhaqrecebterffone-cubgb-nqq10-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:42:"1232:sbhaqrecebterffone-cubgb-nqq10-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:47:"1232:sbhaqrecebterffone-cubgb-nqq10-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:43:"1232:sbhaqrecebterffone-pngrtbel-nqq3-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:44:"1232:sbhaqrecebterffone-pngrtbel-nqq3-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:49:"1232:sbhaqrecebterffone-pngrtbel-nqq3-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:47:"1232:sbhaqrecebterffone-pbzzprageny-ivfvg-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:48:"1232:sbhaqrecebterffone-pbzzprageny-ivfvg-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:53:"1232:sbhaqrecebterffone-pbzzprageny-ivfvg-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:45:"1232:sbhaqrecebterffone-pbzzprageny-ivfvg-hey";a:2:{i:0;R:41615;i:1;R:40466;}s:48:"1232:sbhaqrecebterffone-jvxvnpgvivgl-ivfvg-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:49:"1232:sbhaqrecebterffone-jvxvnpgvivgl-ivfvg-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:54:"1232:sbhaqrecebterffone-jvxvnpgvivgl-ivfvg-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:42:"1232:sbhaqrecebterffone-cebsvyr-rqvg-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:43:"1232:sbhaqrecebterffone-cebsvyr-rqvg-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:48:"1232:sbhaqrecebterffone-cebsvyr-rqvg-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:41:"1232:sbhaqrecebterffone-cubgb-nqq20-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:42:"1232:sbhaqrecebterffone-cubgb-nqq20-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:47:"1232:sbhaqrecebterffone-cubgb-nqq20-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:42:"1232:sbhaqrecebterffone-gbgny-rqvg75-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:43:"1232:sbhaqrecebterffone-gbgny-rqvg75-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:48:"1232:sbhaqrecebterffone-gbgny-rqvg75-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:40:"1232:sbhaqrecebterffone-cntr-nqq20-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:41:"1232:sbhaqrecebterffone-cntr-nqq20-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:46:"1232:sbhaqrecebterffone-cntr-nqq20-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:43:"1232:sbhaqrecebterffone-pngrtbel-rqvg-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:44:"1232:sbhaqrecebterffone-pngrtbel-rqvg-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:49:"1232:sbhaqrecebterffone-pngrtbel-rqvg-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:45:"1232:sbhaqrecebterffone-jvxvnynof-ivfvg-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:46:"1232:sbhaqrecebterffone-jvxvnynof-ivfvg-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:51:"1232:sbhaqrecebterffone-jvxvnynof-ivfvg-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:40:"1232:sbhaqrecebterffone-so-pbaarpg-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:41:"1232:sbhaqrecebterffone-so-pbaarpg-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:46:"1232:sbhaqrecebterffone-so-pbaarpg-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:43:"1232:sbhaqrecebterffone-pngrtbel-nqq5-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:44:"1232:sbhaqrecebterffone-pngrtbel-nqq5-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:49:"1232:sbhaqrecebterffone-pngrtbel-nqq5-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:46:"1232:sbhaqrecebterffone-cntrynlbhg-ivfvg-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:47:"1232:sbhaqrecebterffone-cntrynlbhg-ivfvg-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:52:"1232:sbhaqrecebterffone-cntrynlbhg-ivfvg-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:41:"1232:sbhaqrecebterffone-tnyyrel-nqq-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:42:"1232:sbhaqrecebterffone-tnyyrel-nqq-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:47:"1232:sbhaqrecebterffone-tnyyrel-nqq-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:39:"1232:sbhaqrecebterffone-tnyyrel-nqq-hey";a:2:{i:0;R:41615;i:1;R:40466;}s:41:"1232:sbhaqrecebterffone-gbcani-rqvg-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:42:"1232:sbhaqrecebterffone-gbcani-rqvg-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:47:"1232:sbhaqrecebterffone-gbcani-rqvg-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:48:"1232:sbhaqrecebterffone-znvacntr-nqqfyvqre-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:49:"1232:sbhaqrecebterffone-znvacntr-nqqfyvqre-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:54:"1232:sbhaqrecebterffone-znvacntr-nqqfyvqre-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:45:"1232:sbhaqrecebterffone-pbzzpbeare-rqvg-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:46:"1232:sbhaqrecebterffone-pbzzpbeare-rqvg-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:51:"1232:sbhaqrecebterffone-pbzzpbeare-rqvg-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:39:"1232:sbhaqrecebterffone-ivqrb-nqq-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:40:"1232:sbhaqrecebterffone-ivqrb-nqq-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:45:"1232:sbhaqrecebterffone-ivqrb-nqq-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:39:"1232:sbhaqrecebterffone-hfre-nqq5-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:40:"1232:sbhaqrecebterffone-hfre-nqq5-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:45:"1232:sbhaqrecebterffone-hfre-nqq5-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:37:"1232:sbhaqrecebterffone-hfre-nqq5-hey";a:2:{i:0;R:41615;i:1;R:40466;}s:49:"1232:sbhaqrecebterffone-erpragpunatrf-ivfvg-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:50:"1232:sbhaqrecebterffone-erpragpunatrf-ivfvg-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:55:"1232:sbhaqrecebterffone-erpragpunatrf-ivfvg-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:43:"1232:sbhaqrecebterffone-jbeqznex-rqvg-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:44:"1232:sbhaqrecebterffone-jbeqznex-rqvg-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:49:"1232:sbhaqrecebterffone-jbeqznex-rqvg-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:47:"1232:sbhaqrecebterffone-zbfgivfvgrq-ivfvg-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:48:"1232:sbhaqrecebterffone-zbfgivfvgrq-ivfvg-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:53:"1232:sbhaqrecebterffone-zbfgivfvgrq-ivfvg-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:44:"1232:sbhaqrecebterffone-gbcgrayvfg-nqq-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:45:"1232:sbhaqrecebterffone-gbcgrayvfg-nqq-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:50:"1232:sbhaqrecebterffone-gbcgrayvfg-nqq-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:42:"1232:sbhaqrecebterffone-oybtcbfg-nqq-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:43:"1232:sbhaqrecebterffone-oybtcbfg-nqq-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:48:"1232:sbhaqrecebterffone-oybtcbfg-nqq-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:39:"1232:sbhaqrecebterffone-so-yvxrf3-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:40:"1232:sbhaqrecebterffone-so-yvxrf3-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:45:"1232:sbhaqrecebterffone-so-yvxrf3-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:49:"1232:sbhaqrecebterffone-hapngrtbevmrq-ivfvg-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:50:"1232:sbhaqrecebterffone-hapngrtbevmrq-ivfvg-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:55:"1232:sbhaqrecebterffone-hapngrtbevmrq-ivfvg-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:43:"1232:sbhaqrecebterffone-gbgny-rqvg300-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:44:"1232:sbhaqrecebterffone-gbgny-rqvg300-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:49:"1232:sbhaqrecebterffone-gbgny-rqvg300-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:47:"1232:sbhaqrecebterffone-obahf-cubgb-nqq10-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:48:"1232:sbhaqrecebterffone-obahf-cubgb-nqq10-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:53:"1232:sbhaqrecebterffone-obahf-cubgb-nqq10-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:45:"1232:sbhaqrecebterffone-obahf-cntr-nqq5-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:46:"1232:sbhaqrecebterffone-obahf-cntr-nqq5-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:51:"1232:sbhaqrecebterffone-obahf-cntr-nqq5-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:50:"1232:sbhaqrecebterffone-obahf-cntrynlbhg-nqq-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:51:"1232:sbhaqrecebterffone-obahf-cntrynlbhg-nqq-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:56:"1232:sbhaqrecebterffone-obahf-cntrynlbhg-nqq-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:42:"1232:sbhaqrecebterffone-obahf-rqvg50-ynory";a:2:{i:0;R:41615;i:1;R:40466;}s:43:"1232:sbhaqrecebterffone-obahf-rqvg50-npgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:48:"1232:sbhaqrecebterffone-obahf-rqvg50-qrfpevcgvba";a:2:{i:0;R:41615;i:1;R:40466;}s:40:"1232:sbhaqrecebterffone-oebjfr-cntr-anzr";a:2:{i:0;R:41615;i:1;R:40466;}s:25:"1232:jvxvntnzrthvqrf-qrfp";a:2:{i:0;s:16:"wikia-gameguides";i:1;R:40466;}s:28:"1232:tybonyabgvsvpngvba-qrfp";a:2:{i:0;s:24:"wikia-globalnotification";i:1;R:40466;}s:44:"1232:tybonyabgvsvpngvba-trareny-nwnk-snvyher";a:2:{i:0;R:41742;i:1;R:40466;}s:25:"1232:tybonyjngpuyvfg-qrfp";a:2:{i:0;s:21:"wikia-globalwatchlist";i:1;R:40466;}s:24:"1232:gbt-jngpuyvfgqvtrfg";a:2:{i:0;R:41745;i:1;R:40466;}s:29:"1232:gbt-jngpuyvfgqvtrfgpyrne";a:2:{i:0;R:41745;i:1;R:40466;}s:29:"1232:tybonyjngpuyvfg-frr-zber";a:2:{i:0;R:41745;i:1;R:40466;}s:41:"1232:tybonyjngpuyvfg-qvtrfg-rznvy-fhowrpg";a:2:{i:0;R:41745;i:1;R:40466;}s:38:"1232:tybonyjngpuyvfg-qvtrfg-rznvy-obql";a:2:{i:0;R:41745;i:1;R:40466;}s:44:"1232:tybonyjngpuyvfg-oybt-cntr-gvgyr-pbzzrag";a:2:{i:0;R:41745;i:1;R:40466;}s:34:"1232:tybonyjngpuyvfg-ab-cntr-sbhaq";a:2:{i:0;R:41745;i:1;R:40466;}s:39:"1232:tybonyjngpuyvfg-ab-oybt-cntr-sbhaq";a:2:{i:0;R:41745;i:1;R:40466;}s:17:"1232:tenprrkcverq";a:2:{i:0;s:18:"wikia-graceexpired";i:1;R:40466;}s:21:"1232:tenprrkcverq-ebj";a:2:{i:0;R:41755;i:1;R:40466;}s:24:"1232:tenprrkcverq-urnqre";a:2:{i:0;R:41755;i:1;R:40466;}s:17:"1232:jrypbzr-hfre";a:2:{i:0;s:15:"wikia-hawelcome";i:1;R:40466;}s:16:"1232:jrypbzr-obg";a:2:{i:0;R:41759;i:1;R:40466;}s:20:"1232:jrypbzr-ranoyrq";a:2:{i:0;R:41759;i:1;R:40466;}s:22:"1232:jrypbzr-hfre-cntr";a:2:{i:0;R:41759;i:1;R:40466;}s:25:"1232:jrypbzr-zrffntr-hfre";a:2:{i:0;R:41759;i:1;R:40466;}s:25:"1232:jrypbzr-zrffntr-naba";a:2:{i:0;R:41759;i:1;R:40466;}s:24:"1232:jrypbzr-zrffntr-ybt";a:2:{i:0;R:41759;i:1;R:40466;}s:31:"1232:jrypbzr-zrffntr-hfre-fgnss";a:2:{i:0;R:41759;i:1;R:40466;}s:31:"1232:jrypbzr-zrffntr-naba-fgnss";a:2:{i:0;R:41759;i:1;R:40466;}s:18:"1232:fgnssfvt-grkg";a:2:{i:0;R:41759;i:1;R:40466;}s:18:"1232:unjrypbzrrqvg";a:2:{i:0;R:41759;i:1;R:40466;}s:30:"1232:jrypbzr-zrffntr-jnyy-hfre";a:2:{i:0;R:41759;i:1;R:40466;}s:36:"1232:jrypbzr-zrffntr-jnyy-hfre-fgnss";a:2:{i:0;R:41759;i:1;R:40466;}s:30:"1232:jrypbzr-zrffntr-jnyy-naba";a:2:{i:0;R:41759;i:1;R:40466;}s:36:"1232:jrypbzr-zrffntr-jnyy-naba-fgnss";a:2:{i:0;R:41759;i:1;R:40466;}s:21:"1232:urnygupurpx-qrfp";a:2:{i:0;s:17:"wikia-healthcheck";i:1;R:40466;}s:25:"1232:uhyhivqrbcnary-gvgyr";a:2:{i:0;s:20:"wikia-huluvideopanel";i:1;R:40466;}s:29:"1232:yvtugobk_qrgnvyf_gbbygvc";a:2:{i:0;s:19:"wikia-imagelightbox";i:1;R:40466;}s:19:"1232:yvtugobk-sbehz";a:2:{i:0;R:41779;i:1;R:40466;}s:27:"1232:yvtugobk-fgnaqneq-yvax";a:2:{i:0;R:41779;i:1;R:40466;}s:23:"1232:yvtugobk-oybt-yvax";a:2:{i:0;R:41779;i:1;R:40466;}s:18:"1232:yvtugobk-fraq";a:2:{i:0;R:41779;i:1;R:40466;}s:31:"1232:yvtugobk-funer-qrfpevcgvba";a:2:{i:0;R:41779;i:1;R:40466;}s:33:"1232:yvtugobk-funer-rznvy-fhowrpg";a:2:{i:0;R:41779;i:1;R:40466;}s:30:"1232:yvtugobk-funer-rznvy-obql";a:2:{i:0;R:41779;i:1;R:40466;}s:32:"1232:yvtugobk-funer-ohggba-rznvy";a:2:{i:0;R:41779;i:1;R:40466;}s:30:"1232:yvtugobk-funer-ohggba-jjj";a:2:{i:0;R:41779;i:1;R:40466;}s:32:"1232:yvtugobk-funer-ohggba-rzorq";a:2:{i:0;R:41779;i:1;R:40466;}s:31:"1232:yvtugobk-funer-rznvy-ynory";a:2:{i:0;R:41779;i:1;R:40466;}s:36:"1232:yvtugobk-funer-rznvy-cntr-ynory";a:2:{i:0;R:41779;i:1;R:40466;}s:44:"1232:yvtugobk-funer-rznvy-cntr-ynory-nqqerff";a:2:{i:0;R:41779;i:1;R:40466;}s:36:"1232:yvtugobk-funer-rznvy-bx-pncgvba";a:2:{i:0;R:41779;i:1;R:40466;}s:36:"1232:yvtugobk-funer-rznvy-bx-pbagrag";a:2:{i:0;R:41779;i:1;R:40466;}s:39:"1232:yvtugobk-funer-rznvy-reebe-pncgvba";a:2:{i:0;R:41779;i:1;R:40466;}s:39:"1232:yvtugobk-funer-rznvy-reebe-pbagrag";a:2:{i:0;R:41779;i:1;R:40466;}s:37:"1232:yvtugobk-funer-rznvy-reebe-ybtva";a:2:{i:0;R:41779;i:1;R:40466;}s:41:"1232:yvtugobk-funer-rznvy-reebe-abnqqerff";a:2:{i:0;R:41779;i:1;R:40466;}s:28:"1232:yvtugobk-ivfvg-gur-jvxv";a:2:{i:0;R:41779;i:1;R:40466;}s:18:"1232:vztcyp-perngr";a:2:{i:0;s:22:"wikia-imageplaceholder";i:1;R:40466;}s:23:"1232:vztcyp-cynprubyqre";a:2:{i:0;R:41801;i:1;R:40466;}s:17:"1232:vztcyp-vzntr";a:2:{i:0;R:41801;i:1;R:40466;}s:24:"1232:vztcyp-abgvauvfgbel";a:2:{i:0;R:41801;i:1;R:40466;}s:22:"1232:vzntrfreivat-qrfp";a:2:{i:0;s:18:"wikia-imageserving";i:1;R:40466;}s:39:"1232:vagrefgvgvny-qrsnhyg-pnzcnvta-pbqr";a:2:{i:0;s:18:"wikia-interstitial";i:1;R:40466;}s:25:"1232:vagrefgvgvny-fxvc-nq";a:2:{i:0;R:41808;i:1;R:40466;}s:43:"1232:vagrefgvgvny-nyernql-ybttrq-va-ab-yvax";a:2:{i:0;R:41808;i:1;R:40466;}s:34:"1232:vagrefgvgvny-qvfnoyrq-ab-yvax";a:2:{i:0;R:41808;i:1;R:40466;}s:27:"1232:vagrefgvgvny-yvax-njnl";a:2:{i:0;R:41808;i:1;R:40466;}s:22:"1232:rkvgfgvgvny-gvgyr";a:2:{i:0;R:41808;i:1;R:40466;}s:25:"1232:rkvgfgvgvny-ertvfgre";a:2:{i:0;R:41808;i:1;R:40466;}s:23:"1232:rkvgfgvgvny-ohggba";a:2:{i:0;R:41808;i:1;R:40466;}s:31:"1232:bhgobhaq-fperra-ybtva-grkg";a:2:{i:0;s:33:"wikia-interstitial-outboundscreen";i:1;R:40466;}s:46:"1232:bhgobhaq-fperra-nyernql-ybttrq-va-ab-yvax";a:2:{i:0;R:41817;i:1;R:40466;}s:36:"1232:bhgobhaq-fperra-lbh-ner-yrnivat";a:2:{i:0;R:41817;i:1;R:40466;}s:24:"1232:vagrejvxvqvfcngpure";a:2:{i:0;s:25:"wikia-interwikidispatcher";i:1;R:40466;}s:29:"1232:vagrejvxvqvfcngpure-qrfp";a:2:{i:0;R:41821;i:1;R:40466;}s:16:"1232:ynaqvatcntr";a:2:{i:0;s:17:"wikia-landingpage";i:1;R:40466;}s:32:"1232:ynaqvatcntr-fgneg-rkcybevat";a:2:{i:0;R:41824;i:1;R:40466;}s:37:"1232:ynaqvatcntr-fgneg-rkcybevat-grkg";a:2:{i:0;R:41824;i:1;R:40466;}s:24:"1232:ynaqvatcntr-ernqsnd";a:2:{i:0;R:41824;i:1;R:40466;}s:21:"1232:ynaqvatcntr-grkg";a:2:{i:0;R:41824;i:1;R:40466;}s:35:"1232:ynaqvatcntr-ohggbaf-yrnea-zber";a:2:{i:0;R:41824;i:1;R:40466;}s:31:"1232:ynaqvatcntr-ynathntr-yvaxf";a:2:{i:0;R:41824;i:1;R:40466;}s:40:"1232:ynaqvatcntr-ohggbaf-nobhg-jvxvn-hey";a:2:{i:0;R:41824;i:1;R:40466;}s:28:"1232:ynaqvatcntr-gjvggre-hey";a:2:{i:0;R:41824;i:1;R:40466;}s:29:"1232:ynaqvatcntr-snprobbx-hey";a:2:{i:0;R:41824;i:1;R:40466;}s:31:"1232:ynaqvatcntr-jvxvn-oybt-hey";a:2:{i:0;R:41824;i:1;R:40466;}s:24:"1232:ynaqvatcntr-snd-hey";a:2:{i:0;R:41824;i:1;R:40466;}s:22:"1232:ynaqvatcntr-fvgrf";a:2:{i:0;R:41824;i:1;R:40466;}s:27:"1232:gbt-qvfnoyryvaxfhttrfg";a:2:{i:0;s:17:"wikia-linksuggest";i:1;R:40466;}s:16:"1232:ybttre-qrfp";a:2:{i:0;s:12:"wikia-logger";i:1;R:40466;}s:11:"1232:ybttre";a:2:{i:0;R:41840;i:1;R:40466;}s:16:"1232:ybttregvgyr";a:2:{i:0;R:41840;i:1;R:40466;}s:24:"1232:ybttrefryrpgybtanzr";a:2:{i:0;R:41840;i:1;R:40466;}s:29:"1232:ybttreerpbeqfjvgucreprag";a:2:{i:0;R:41840;i:1;R:40466;}s:18:"1232:ybttreerpbeqf";a:2:{i:0;R:41840;i:1;R:40466;}s:13:"1232:ybttretb";a:2:{i:0;R:41840;i:1;R:40466;}s:19:"1232:ybttreaberfhyg";a:2:{i:0;R:41840;i:1;R:40466;}s:19:"1232:ybbxhcpbagevof";a:2:{i:0;s:20:"wikia-lookupcontribs";i:1;R:40466;}s:24:"1232:ybbxhcpbagevofgvgyr";a:2:{i:0;R:41849;i:1;R:40466;}s:38:"1232:ybbxhcpbagevoferpragpbagevohgvbaf";a:2:{i:0;R:41849;i:1;R:40466;}s:37:"1232:ybbxhcpbagevofsvanypbagevohgvbaf";a:2:{i:0;R:41849;i:1;R:40466;}s:23:"1232:ybbxhcpbagevofuryc";a:2:{i:0;R:41849;i:1;R:40466;}s:32:"1232:ybbxhcpbagevohfreabgfcrpvsl";a:2:{i:0;R:41849;i:1;R:40466;}s:29:"1232:ybbxhcpbagevoffryrpghfre";a:2:{i:0;R:41849;i:1;R:40466;}s:28:"1232:ybbxhcpbagevoffryrpgsbe";a:2:{i:0;R:41849;i:1;R:40466;}s:30:"1232:ybbxhcpbagevofqvfcynlzbqr";a:2:{i:0;R:41849;i:1;R:40466;}s:35:"1232:ybbxhcpbagevoffryrpgzbqrabezny";a:2:{i:0;R:41849;i:1;R:40466;}s:34:"1232:ybbxhcpbagevoffryrpgzbqrsvany";a:2:{i:0;R:41849;i:1;R:40466;}s:32:"1232:ybbxhcpbagevoffryrpgzbqrnyy";a:2:{i:0;R:41849;i:1;R:40466;}s:27:"1232:ybbxhcpbagevofshyyheyf";a:2:{i:0;R:41849;i:1;R:40466;}s:24:"1232:ybbxhcpbagevofyvaxf";a:2:{i:0;R:41849;i:1;R:40466;}s:21:"1232:ybbxhcpbagevoftb";a:2:{i:0;R:41849;i:1;R:40466;}s:30:"1232:ybbxhcpbagevofvainyvqhfre";a:2:{i:0;R:41849;i:1;R:40466;}s:34:"1232:ybbxhcpbagevofvainyvqivrjzbqr";a:2:{i:0;R:41849;i:1;R:40466;}s:30:"1232:ybbxhcpbagevofvainyvqzbqr";a:2:{i:0;R:41849;i:1;R:40466;}s:30:"1232:ybbxhcpbagevoffryrpgjvxvf";a:2:{i:0;R:41849;i:1;R:40466;}s:32:"1232:ybbxhcpbagevofyvfgjvxvnvasb";a:2:{i:0;R:41849;i:1;R:40466;}s:32:"1232:ybbxhcpbagevofaberfhygsbhaq";a:2:{i:0;R:41849;i:1;R:40466;}s:33:"1232:ybbxhcpbagevofvainyvqerfhygf";a:2:{i:0;R:41849;i:1;R:40466;}s:23:"1232:ybbxhcpbagevofjvxv";a:2:{i:0;R:41849;i:1;R:40466;}s:29:"1232:ybbxhcpbagevofjvxvqoanzr";a:2:{i:0;R:41849;i:1;R:40466;}s:26:"1232:ybbxhcpbagevofjvxvhey";a:2:{i:0;R:41849;i:1;R:40466;}s:28:"1232:ybbxhcpbagevofjvxvgvgyr";a:2:{i:0;R:41849;i:1;R:40466;}s:30:"1232:ybbxhcpbagevofjvxvbcgvbaf";a:2:{i:0;R:41849;i:1;R:40466;}s:31:"1232:ybbxhcpbagevofpbagevofyvax";a:2:{i:0;R:41849;i:1;R:40466;}s:26:"1232:ybbxhcpbagevofqrgnvyf";a:2:{i:0;R:41849;i:1;R:40466;}s:29:"1232:ybbxhcpbagevofynfgrqvgrq";a:2:{i:0;R:41849;i:1;R:40466;}s:31:"1232:ybbxhcpbagevoferpbeqfcntre";a:2:{i:0;R:41849;i:1;R:40466;}s:27:"1232:ybbxhcpbagevofpbagevof";a:2:{i:0;R:41849;i:1;R:40466;}s:28:"1232:ybbxhcpbagevofaoeerfhyg";a:2:{i:0;R:41849;i:1;R:40466;}s:23:"1232:ybbxhcpbagevofarkg";a:2:{i:0;R:41849;i:1;R:40466;}s:27:"1232:ybbxhcpbagevofcerivbhf";a:2:{i:0;R:41849;i:1;R:40466;}s:30:"1232:ybbxhcpbagevofcntrerzbirq";a:2:{i:0;R:41849;i:1;R:40466;}s:26:"1232:ybbxhcpbagevoferfgber";a:2:{i:0;R:41849;i:1;R:40466;}s:22:"1232:ybbxhcpbagevofybt";a:2:{i:0;R:41849;i:1;R:40466;}s:23:"1232:ybbxhcpbagevofuvfg";a:2:{i:0;R:41849;i:1;R:40466;}s:23:"1232:ybbxhcpbagevofqvss";a:2:{i:0;R:41849;i:1;R:40466;}s:25:"1232:evtug-ybbxhcpbagevof";a:2:{i:0;R:41849;i:1;R:40466;}s:28:"1232:ybbxhcpbagevoffubjcntrf";a:2:{i:0;R:41849;i:1;R:40466;}s:26:"1232:ybbxhcpbagevofpbagrag";a:2:{i:0;R:41849;i:1;R:40466;}s:38:"1232:ybbxhcpbagevofpbagevogvgyrsbehfre";a:2:{i:0;R:41849;i:1;R:40466;}s:25:"1232:ybbxhcpbagevofabezny";a:2:{i:0;R:41849;i:1;R:40466;}s:24:"1232:ybbxhcpbagevofsvany";a:2:{i:0;R:41849;i:1;R:40466;}s:22:"1232:ybbxhcpbagevofnyy";a:2:{i:0;R:41849;i:1;R:40466;}s:30:"1232:npgvivglvaqvpngbe-zrffntr";a:2:{i:0;s:23:"wikia-mobile-gameguides";i:1;R:40466;}s:23:"1232:jvaqbj-jvxvf-gvgyr";a:2:{i:0;R:41897;i:1;R:40466;}s:38:"1232:jvaqbj-jvxvf-jvxvyvfg-frnepu-uvag";a:2:{i:0;R:41897;i:1;R:40466;}s:31:"1232:jvaqbj-pngrtbel-ybnq-ongpu";a:2:{i:0;R:41897;i:1;R:40466;}s:32:"1232:jvaqbj-negvpyr-ohggba-pybfr";a:2:{i:0;R:41897;i:1;R:40466;}s:31:"1232:jvaqbj-negvpyr-ohggba-onpx";a:2:{i:0;R:41897;i:1;R:40466;}s:37:"1232:jvaqbj-negvpyr-zrah-frnepu-ynory";a:2:{i:0;R:41897;i:1;R:40466;}s:40:"1232:jvaqbj-negvpyr-zrah-qnfuobneq-ynory";a:2:{i:0;R:41897;i:1;R:40466;}s:37:"1232:jvaqbj-negvpyr-zrah-pnapry-ynory";a:2:{i:0;R:41897;i:1;R:40466;}s:26:"1232:frnepuivrj-ab-erfhygf";a:2:{i:0;R:41897;i:1;R:40466;}s:32:"1232:frnepuivrj-ohggba-onpx-yvfg";a:2:{i:0;R:41897;i:1;R:40466;}s:35:"1232:frnepuivrj-ohggba-onpx-negvpyr";a:2:{i:0;R:41897;i:1;R:40466;}s:19:"1232:frnepuone-uvag";a:2:{i:0;R:41897;i:1;R:40466;}s:41:"1232:nyreg-qbjaybnq-hcqngrq-jvxvf-zrffntr";a:2:{i:0;R:41897;i:1;R:40466;}s:43:"1232:nyreg-qbjaybnq-hcqngrq-jvxvf-ohggba-bx";a:2:{i:0;R:41897;i:1;R:40466;}s:26:"1232:reebe-hcqngr-erdhverq";a:2:{i:0;R:41897;i:1;R:40466;}s:24:"1232:reebe-ab-pbaarpgvba";a:2:{i:0;R:41897;i:1;R:40466;}s:17:"1232:reebe-freire";a:2:{i:0;R:41897;i:1;R:40466;}s:21:"1232:reebe-wfba-cnefr";a:2:{i:0;R:41897;i:1;R:40466;}s:16:"1232:ncc-ybnqvat";a:2:{i:0;s:22:"wikia-mobile-lyricwiki";i:1;R:40466;}s:19:"1232:ncc-gno-frnepu";a:2:{i:0;R:41917;i:1;R:40466;}s:18:"1232:ncc-gno-nobhg";a:2:{i:0;R:41917;i:1;R:40466;}s:19:"1232:ncc-gno-oebjfr";a:2:{i:0;R:41917;i:1;R:40466;}s:17:"1232:ncc-gno-fbgq";a:2:{i:0;R:41917;i:1;R:40466;}s:26:"1232:ncc-nflap-reebe-gvgyr";a:2:{i:0;R:41917;i:1;R:40466;}s:28:"1232:ncc-nflap-reebe-zrffntr";a:2:{i:0;R:41917;i:1;R:40466;}s:31:"1232:ncc-abargjbex-qvnybt-gvgyr";a:2:{i:0;R:41917;i:1;R:40466;}s:33:"1232:ncc-abargjbex-qvnybt-zrffntr";a:2:{i:0;R:41917;i:1;R:40466;}s:38:"1232:ncc-abargjbex-qvnybt-pybfr-ohggba";a:2:{i:0;R:41917;i:1;R:40466;}s:14:"1232:frnepu-tb";a:2:{i:0;R:41917;i:1;R:40466;}s:21:"1232:frnepu-uvag-grkg";a:2:{i:0;R:41917;i:1;R:40466;}s:26:"1232:frnepu-ab-zngpu-sbhaq";a:2:{i:0;R:41917;i:1;R:40466;}s:32:"1232:frnepu-ab-zngpu-sbhaq-dhrel";a:2:{i:0;R:41917;i:1;R:40466;}s:25:"1232:frnepu-erfhygf-gvgyr";a:2:{i:0;R:41917;i:1;R:40466;}s:16:"1232:ybtva-ynory";a:2:{i:0;R:41917;i:1;R:40466;}s:24:"1232:ybtva-hfreanzr-uvag";a:2:{i:0;R:41917;i:1;R:40466;}s:24:"1232:ybtva-cnffjbeq-uvag";a:2:{i:0;R:41917;i:1;R:40466;}s:24:"1232:ybtva-fhozvg-ohggba";a:2:{i:0;R:41917;i:1;R:40466;}s:18:"1232:nobhg-urnqvat";a:2:{i:0;R:41917;i:1;R:40466;}s:18:"1232:nobhg-perqvgf";a:2:{i:0;R:41917;i:1;R:40466;}s:23:"1232:nobhg-urnqvat-gvcf";a:2:{i:0;R:41917;i:1;R:40466;}s:17:"1232:nobhg-gvcf-0";a:2:{i:0;R:41917;i:1;R:40466;}s:17:"1232:nobhg-gvcf-1";a:2:{i:0;R:41917;i:1;R:40466;}s:28:"1232:nobhg-urnqvat-yvprafvat";a:2:{i:0;R:41917;i:1;R:40466;}s:22:"1232:nobhg-yvprafvat-0";a:2:{i:0;R:41917;i:1;R:40466;}s:27:"1232:nobhg-urnqvat-srrqonpx";a:2:{i:0;R:41917;i:1;R:40466;}s:21:"1232:nobhg-srrqonpx-0";a:2:{i:0;R:41917;i:1;R:40466;}s:23:"1232:nobhg-urnqvat-engr";a:2:{i:0;R:41917;i:1;R:40466;}s:25:"1232:nobhg-engr-0-naqebvq";a:2:{i:0;R:41917;i:1;R:40466;}s:21:"1232:nobhg-engr-0-vbf";a:2:{i:0;R:41917;i:1;R:40466;}s:23:"1232:tenprabgr-gnxrqbja";a:2:{i:0;R:41917;i:1;R:40466;}s:25:"1232:ylevpf-negvfg-olyvar";a:2:{i:0;R:41917;i:1;R:40466;}s:29:"1232:evatgbar-zngpure-ol-fbat";a:2:{i:0;R:41917;i:1;R:40466;}s:22:"1232:znva-gno-qvfpbire";a:2:{i:0;s:21:"wikia-mobile-wikiapad";i:1;R:40466;}s:22:"1232:znva-gno-crefbany";a:2:{i:0;R:41952;i:1;R:40466;}s:20:"1232:znva-gno-frnepu";a:2:{i:0;R:41952;i:1;R:40466;}s:21:"1232:znva-gno-bssyvar";a:2:{i:0;R:41952;i:1;R:40466;}s:33:"1232:gno-qvfpbire-ybnqvat-zrffntr";a:2:{i:0;R:41952;i:1;R:40466;}s:41:"1232:gno-qvfpbire-ab-argjbex-qvnybt-gvgyr";a:2:{i:0;R:41952;i:1;R:40466;}s:43:"1232:gno-qvfpbire-ab-argjbex-qvnybt-zrffntr";a:2:{i:0;R:41952;i:1;R:40466;}s:48:"1232:gno-qvfpbire-ab-argjbex-qvnybt-pybfr-ohggba";a:2:{i:0;R:41952;i:1;R:40466;}s:31:"1232:gno-frnepu-ybnqvat-zrffntr";a:2:{i:0;R:41952;i:1;R:40466;}s:28:"1232:oebjfre-ybnqvat-zrffntr";a:2:{i:0;R:41952;i:1;R:40466;}s:26:"1232:zbfgcbchynepngrtbevrf";a:2:{i:0;s:27:"wikia-mostpopularcategories";i:1;R:40466;}s:21:"1232:zbfgivfvgrqcntrf";a:2:{i:0;s:22:"wikia-mostvisitedpages";i:1;R:40466;}s:31:"1232:zbfgivfvgrqcntrffrnepugrkg";a:2:{i:0;R:41965;i:1;R:40466;}s:30:"1232:zbfgivfvgrqcntrffrnepuoga";a:2:{i:0;R:41965;i:1;R:40466;}s:27:"1232:zbfgivfvgrqcntrfyngrfg";a:2:{i:0;R:41965;i:1;R:40466;}s:31:"1232:zbfgivfvgrqcntrfyngrfgyvax";a:2:{i:0;R:41965;i:1;R:40466;}s:28:"1232:zbfgivfvgrqcntrfnyyyvax";a:2:{i:0;R:41965;i:1;R:40466;}s:31:"1232:zhygvgnfxf-yvax-onpx-ynory";a:2:{i:0;s:16:"wikia-multitasks";i:1;R:40466;}s:18:"1232:zhygvjvxvrqvg";a:2:{i:0;R:41972;i:1;R:40466;}s:25:"1232:zhygvjvxvrqvg_ohggba";a:2:{i:0;R:41972;i:1;R:40466;}s:26:"1232:zhygvjvxvrqvg_pbasvez";a:2:{i:0;R:41972;i:1;R:40466;}s:23:"1232:zhygvjvxvrqvg_uryc";a:2:{i:0;R:41972;i:1;R:40466;}s:26:"1232:zhygvjvxvrqvg_pncgvba";a:2:{i:0;R:41972;i:1;R:40466;}s:24:"1232:zhygvjvxvrqvg_gvgyr";a:2:{i:0;R:41972;i:1;R:40466;}s:21:"1232:zhygvjvxvrqvg_nf";a:2:{i:0;R:41972;i:1;R:40466;}s:29:"1232:zhygvjvxvrqvg_obgu_zbqrf";a:2:{i:0;R:41972;i:1;R:40466;}s:21:"1232:zhygvjvxvrqvg_be";a:2:{i:0;R:41972;i:1;R:40466;}s:29:"1232:zhygvjvxvrqvg_gnfx_nqqrq";a:2:{i:0;R:41972;i:1;R:40466;}s:29:"1232:zhygvjvxvrqvg_gnfx_reebe";a:2:{i:0;R:41972;i:1;R:40466;}s:37:"1232:zhygvjvxvrqvg_gnfx_abar_fryrpgrq";a:2:{i:0;R:41972;i:1;R:40466;}s:28:"1232:zhygvjvxvrqvg_gnfx_yvax";a:2:{i:0;R:41972;i:1;R:40466;}s:21:"1232:zhygvjvxvrqvg_ba";a:2:{i:0;R:41972;i:1;R:40466;}s:23:"1232:zhygvjvxvrqvg_cntr";a:2:{i:0;R:41972;i:1;R:40466;}s:28:"1232:zhygvjvxvrqvg_cntr_grkg";a:2:{i:0;R:41972;i:1;R:40466;}s:25:"1232:zhygvjvxvrqvg_ernfba";a:2:{i:0;R:41972;i:1;R:40466;}s:31:"1232:zhygvjvxvrqvg_yvfg_pncgvba";a:2:{i:0;R:41972;i:1;R:40466;}s:36:"1232:zhygvjvxvrqvg_zvaberqvg_pncgvba";a:2:{i:0;R:41972;i:1;R:40466;}s:34:"1232:zhygvjvxvrqvg_obgrqvg_pncgvba";a:2:{i:0;R:41972;i:1;R:40466;}s:38:"1232:zhygvjvxvrqvg_nhgbfhzznel_pncgvba";a:2:{i:0;R:41972;i:1;R:40466;}s:42:"1232:zhygvjvxvrqvg_aberpragpunatrf_pncgvba";a:2:{i:0;R:41972;i:1;R:40466;}s:34:"1232:zhygvjvxvrqvg_arjbayl_pncgvba";a:2:{i:0;R:41972;i:1;R:40466;}s:34:"1232:zhygvjvxvrqvg_pubbfr_negvpyrf";a:2:{i:0;R:41972;i:1;R:40466;}s:29:"1232:zhygvjvxvrqvg_cebprffvat";a:2:{i:0;R:41972;i:1;R:40466;}s:28:"1232:zhygvjvxvrqvg_sebz_svyr";a:2:{i:0;R:41972;i:1;R:40466;}s:28:"1232:zhygvjvxvrqvg_sebz_sbez";a:2:{i:0;R:41972;i:1;R:40466;}s:31:"1232:zhygvjvxvrqvg_fhzznel_grkg";a:2:{i:0;R:41972;i:1;R:40466;}s:28:"1232:zhygvjvxvrqvg_guvf_jvxv";a:2:{i:0;R:41972;i:1;R:40466;}s:32:"1232:zhygvjvxvrqvg_vaobk_pncgvba";a:2:{i:0;R:41972;i:1;R:40466;}s:28:"1232:zhygvjvxvrqvg_nyy_jvxvf";a:2:{i:0;R:41972;i:1;R:40466;}s:33:"1232:zhygvjvxvrqvg_fryrpgrq_jvxvf";a:2:{i:0;R:41972;i:1;R:40466;}s:35:"1232:zhygvjvxvrqvg_fhpprff_fhogvgyr";a:2:{i:0;R:41972;i:1;R:40466;}s:28:"1232:zhygvjvxvrqvg_yvax_onpx";a:2:{i:0;R:41972;i:1;R:40466;}s:39:"1232:zhygvjvxvrqvg_bzvggvat_abarkvfgnag";a:2:{i:0;R:41972;i:1;R:40466;}s:35:"1232:zhygvjvxvrqvg_bzvggvat_vainyvq";a:2:{i:0;R:41972;i:1;R:40466;}s:34:"1232:zhygvjvxvrqvg_svyr_onq_sbezng";a:2:{i:0;R:41972;i:1;R:40466;}s:31:"1232:zhygvjvxvrqvg_svyr_zvffvat";a:2:{i:0;R:41972;i:1;R:40466;}s:32:"1232:zhygvjvxvrqvg_fryrpg_fpevcg";a:2:{i:0;R:41972;i:1;R:40466;}s:34:"1232:zhygvjvxvrqvg_fryrpg_lbhefrys";a:2:{i:0;R:41972;i:1;R:40466;}s:26:"1232:zhygvjvxvrqvg_ab_cntr";a:2:{i:0;R:41972;i:1;R:40466;}s:32:"1232:zhygvjvxvrqvg_fcyvg_erfhygf";a:2:{i:0;R:41972;i:1;R:40466;}s:35:"1232:zhygvjvxvrqvg_znk_qvfcynl_fvmr";a:2:{i:0;R:41972;i:1;R:40466;}s:27:"1232:zhygvjvxvrqvg_nqq_grkg";a:2:{i:0;R:41972;i:1;R:40466;}s:31:"1232:zhygvjvxvrqvg_fhccyl_jvxvf";a:2:{i:0;R:41972;i:1;R:40466;}s:29:"1232:zhygvjvxvrqvg_gnfxf_yvfg";a:2:{i:0;R:41972;i:1;R:40466;}s:34:"1232:zhygvjvxvrqvg_trareny_bcgvbaf";a:2:{i:0;R:41972;i:1;R:40466;}s:31:"1232:zhygvjvxvrqvg_rqvg_bcgvbaf";a:2:{i:0;R:41972;i:1;R:40466;}s:16:"1232:zhygvqryrgr";a:2:{i:0;R:41972;i:1;R:40466;}s:23:"1232:zhygvqryrgr_ohggba";a:2:{i:0;R:41972;i:1;R:40466;}s:21:"1232:zhygvqryrgr_uryc";a:2:{i:0;R:41972;i:1;R:40466;}s:24:"1232:zhygvqryrgr_pncgvba";a:2:{i:0;R:41972;i:1;R:40466;}s:22:"1232:zhygvqryrgr_gvgyr";a:2:{i:0;R:41972;i:1;R:40466;}s:27:"1232:zhygvqryrgr_obgu_zbqrf";a:2:{i:0;R:41972;i:1;R:40466;}s:19:"1232:zhygvqryrgr_be";a:2:{i:0;R:41972;i:1;R:40466;}s:23:"1232:zhygvqryrgr_ernfba";a:2:{i:0;R:41972;i:1;R:40466;}s:38:"1232:zhygvqryrgr_reebe_rzcgl_fryrpgvba";a:2:{i:0;R:41972;i:1;R:40466;}s:34:"1232:zhygvqryrgr_reebe_rzcgl_cntrf";a:2:{i:0;R:41972;i:1;R:40466;}s:33:"1232:zhygvqryrgr_reebe_zhygv_cntr";a:2:{i:0;R:41972;i:1;R:40466;}s:32:"1232:zhygvqryrgr_vasb_rzcgl_yvfg";a:2:{i:0;R:41972;i:1;R:40466;}s:27:"1232:zhygvqryrgr_gnfx_nqqrq";a:2:{i:0;R:41972;i:1;R:40466;}s:27:"1232:zhygvqryrgr_gnfx_reebe";a:2:{i:0;R:41972;i:1;R:40466;}s:35:"1232:zhygvqryrgr_gnfx_abar_fryrpgrq";a:2:{i:0;R:41972;i:1;R:40466;}s:26:"1232:zhygvqryrgr_gnfx_yvax";a:2:{i:0;R:41972;i:1;R:40466;}s:27:"1232:zhygvqryrgr_fryrpg_nyy";a:2:{i:0;R:41972;i:1;R:40466;}s:21:"1232:zhygvqryrgr_cntr";a:2:{i:0;R:41972;i:1;R:40466;}s:29:"1232:zhygvqryrgr_yvfg_pncgvba";a:2:{i:0;R:41972;i:1;R:40466;}s:32:"1232:zhygvqryrgr_pubbfr_negvpyrf";a:2:{i:0;R:41972;i:1;R:40466;}s:27:"1232:zhygvqryrgr_cebprffvat";a:2:{i:0;R:41972;i:1;R:40466;}s:26:"1232:zhygvqryrgr_guvf_jvxv";a:2:{i:0;R:41972;i:1;R:40466;}s:30:"1232:zhygvqryrgr_vaobk_pncgvba";a:2:{i:0;R:41972;i:1;R:40466;}s:26:"1232:zhygvqryrgr_nyy_jvxvf";a:2:{i:0;R:41972;i:1;R:40466;}s:31:"1232:zhygvqryrgr_fryrpgrq_jvxvf";a:2:{i:0;R:41972;i:1;R:40466;}s:33:"1232:zhygvqryrgr_fhpprff_fhogvgyr";a:2:{i:0;R:41972;i:1;R:40466;}s:26:"1232:zhygvqryrgr_yvax_onpx";a:2:{i:0;R:41972;i:1;R:40466;}s:37:"1232:zhygvqryrgr_bzvggvat_abarkvfgnag";a:2:{i:0;R:41972;i:1;R:40466;}s:33:"1232:zhygvqryrgr_bzvggvat_vainyvq";a:2:{i:0;R:41972;i:1;R:40466;}s:32:"1232:zhygvqryrgr_svyr_onq_sbezng";a:2:{i:0;R:41972;i:1;R:40466;}s:29:"1232:zhygvqryrgr_svyr_zvffvat";a:2:{i:0;R:41972;i:1;R:40466;}s:30:"1232:zhygvqryrgr_fryrpg_fpevcg";a:2:{i:0;R:41972;i:1;R:40466;}s:24:"1232:zhygvqryrgr_ab_cntr";a:2:{i:0;R:41972;i:1;R:40466;}s:30:"1232:zhygvqryrgr_fcyvg_erfhygf";a:2:{i:0;R:41972;i:1;R:40466;}s:33:"1232:zhygvqryrgr_znk_qvfcynl_fvmr";a:2:{i:0;R:41972;i:1;R:40466;}s:43:"1232:zhygvqryrgr_oenmvyvna_cbeghthrfr_jvxvf";a:2:{i:0;R:41972;i:1;R:40466;}s:29:"1232:zhygvqryrgr_uroerj_jvxvf";a:2:{i:0;R:41972;i:1;R:40466;}s:30:"1232:zhygvqryrgr_puvarfr_jvxvf";a:2:{i:0;R:41972;i:1;R:40466;}s:29:"1232:zhygvqryrgr_cbyvfu_jvxvf";a:2:{i:0;R:41972;i:1;R:40466;}s:28:"1232:zhygvqryrgr_pmrpu_jvxvf";a:2:{i:0;R:41972;i:1;R:40466;}s:33:"1232:zhygvqryrgr_cbeghthrfr_jvxvf";a:2:{i:0;R:41972;i:1;R:40466;}s:28:"1232:zhygvqryrgr_qhgpu_jvxvf";a:2:{i:0;R:41972;i:1;R:40466;}s:30:"1232:zhygvqryrgr_vgnyvna_jvxvf";a:2:{i:0;R:41972;i:1;R:40466;}s:30:"1232:zhygvqryrgr_ehffvna_jvxvf";a:2:{i:0;R:41972;i:1;R:40466;}s:30:"1232:zhygvqryrgr_ratyvfu_jvxvf";a:2:{i:0;R:41972;i:1;R:40466;}s:31:"1232:zhygvqryrgr_wncnarfr_jvxvf";a:2:{i:0;R:41972;i:1;R:40466;}s:30:"1232:zhygvqryrgr_svaavfu_jvxvf";a:2:{i:0;R:41972;i:1;R:40466;}s:30:"1232:zhygvqryrgr_fcnavfu_jvxvf";a:2:{i:0;R:41972;i:1;R:40466;}s:29:"1232:zhygvqryrgr_serapu_jvxvf";a:2:{i:0;R:41972;i:1;R:40466;}s:30:"1232:zhygvqryrgr_fjrqvfu_jvxvf";a:2:{i:0;R:41972;i:1;R:40466;}s:29:"1232:zhygvqryrgr_trezna_jvxvf";a:2:{i:0;R:41972;i:1;R:40466;}s:20:"1232:zhygvjvxvsvaqre";a:2:{i:0;R:41972;i:1;R:40466;}s:27:"1232:zhygvjvxvsvaqcntranzrf";a:2:{i:0;R:41972;i:1;R:40466;}s:27:"1232:zhygvjvxvragrecntranzr";a:2:{i:0;R:41972;i:1;R:40466;}s:21:"1232:zhygvjvxverpbeqf";a:2:{i:0;R:41972;i:1;R:40466;}s:16:"1232:zlubzr-qrfp";a:2:{i:0;s:12:"wikia-myhome";i:1;R:40466;}s:11:"1232:zlubzr";a:2:{i:0;R:42077;i:1;R:40466;}s:17:"1232:jvxvnpgvivgl";a:2:{i:0;R:42077;i:1;R:40466;}s:25:"1232:zlubzr-npgvivgl-zber";a:2:{i:0;R:42077;i:1;R:40466;}s:25:"1232:zlubzr-npgvivgl-srrq";a:2:{i:0;R:42077;i:1;R:40466;}s:31:"1232:zlubzr-npgvivgl-srrq-rzcgl";a:2:{i:0;R:42077;i:1;R:40466;}s:26:"1232:zlubzr-jngpuyvfg-srrq";a:2:{i:0;R:42077;i:1;R:40466;}s:32:"1232:zlubzr-jngpuyvfg-srrq-rzcgl";a:2:{i:0;R:42077;i:1;R:40466;}s:35:"1232:zlubzr-hfre-pbagevohgvbaf-srrq";a:2:{i:0;R:42077;i:1;R:40466;}s:26:"1232:zlubzr-ubg-fcbgf-srrq";a:2:{i:0;R:42077;i:1;R:40466;}s:32:"1232:zlubzr-ubg-fcbgf-srrq-rzcgl";a:2:{i:0;R:42077;i:1;R:40466;}s:28:"1232:zlubzr-ubg-fcbgf-arjrfg";a:2:{i:0;R:42077;i:1;R:40466;}s:30:"1232:gbt-zlubzrqvfnoyrerqverpg";a:2:{i:0;R:42077;i:1;R:40466;}s:17:"1232:cersf-zlubzr";a:2:{i:0;R:42077;i:1;R:40466;}s:24:"1232:zlubzr-srrq-arjcntr";a:2:{i:0;R:42077;i:1;R:40466;}s:21:"1232:zlubzr-srrq-rqvg";a:2:{i:0;R:42077;i:1;R:40466;}s:21:"1232:zlubzr-srrq-zbir";a:2:{i:0;R:42077;i:1;R:40466;}s:25:"1232:zlubzr-srrq-gnyxcntr";a:2:{i:0;R:42077;i:1;R:40466;}s:28:"1232:zlubzr-srrq-oybtpbzzrag";a:2:{i:0;R:42077;i:1;R:40466;}s:23:"1232:zlubzr-srrq-qryrgr";a:2:{i:0;R:42077;i:1;R:40466;}s:22:"1232:zlubzr-srrq-vzntr";a:2:{i:0;R:42077;i:1;R:40466;}s:22:"1232:zlubzr-srrq-ivqrb";a:2:{i:0;R:42077;i:1;R:40466;}s:31:"1232:zlubzr-srrq-pngrtbevmngvba";a:2:{i:0;R:42077;i:1;R:40466;}s:27:"1232:zlubzr-srrq-perngrq-ol";a:2:{i:0;R:42077;i:1;R:40466;}s:25:"1232:zlubzr-srrq-nqqrq-ol";a:2:{i:0;R:42077;i:1;R:40466;}s:26:"1232:zlubzr-srrq-rqvgrq-ol";a:2:{i:0;R:42077;i:1;R:40466;}s:26:"1232:zlubzr-srrq-cbfgrq-ol";a:2:{i:0;R:42077;i:1;R:40466;}s:27:"1232:zlubzr-srrq-pbzzrag-ol";a:2:{i:0;R:42077;i:1;R:40466;}s:27:"1232:zlubzr-srrq-qryrgrq-ol";a:2:{i:0;R:42077;i:1;R:40466;}s:25:"1232:zlubzr-srrq-zbirq-ol";a:2:{i:0;R:42077;i:1;R:40466;}s:43:"1232:zlubzr-srrq-negvpyr-pbzzrag-perngrq-ol";a:2:{i:0;R:42077;i:1;R:40466;}s:42:"1232:zlubzr-srrq-negvpyr-pbzzrag-rqvgrq-ol";a:2:{i:0;R:42077;i:1;R:40466;}s:19:"1232:zlubzr-srrq-ol";a:2:{i:0;R:42077;i:1;R:40466;}s:25:"1232:zlubzr-srrq-qvss-nyg";a:2:{i:0;R:42077;i:1;R:40466;}s:33:"1232:zlubzr-srrq-arj-cntr-qrgnvyf";a:2:{i:0;R:42077;i:1;R:40466;}s:32:"1232:zlubzr-srrq-fhzznel-qrgnvyf";a:2:{i:0;R:42077;i:1;R:40466;}s:37:"1232:zlubzr-srrq-frpgvba-rqvg-qrgnvyf";a:2:{i:0;R:42077;i:1;R:40466;}s:38:"1232:zlubzr-srrq-arj-oybt-cbfg-qrgnvyf";a:2:{i:0;R:42077;i:1;R:40466;}s:41:"1232:zlubzr-srrq-arj-oybt-pbzzrag-qrgnvyf";a:2:{i:0;R:42077;i:1;R:40466;}s:44:"1232:zlubzr-srrq-arj-negvpyr-pbzzrag-qrgnvyf";a:2:{i:0;R:42077;i:1;R:40466;}s:29:"1232:zlubzr-srrq-zbir-qrgnvyf";a:2:{i:0;R:42077;i:1;R:40466;}s:33:"1232:zlubzr-srrq-erqverpg-qrgnvyf";a:2:{i:0;R:42077;i:1;R:40466;}s:39:"1232:zlubzr-srrq-vafregrq-vzntr-qrgnvyf";a:2:{i:0;R:42077;i:1;R:40466;}s:39:"1232:zlubzr-srrq-vafregrq-ivqrb-qrgnvyf";a:2:{i:0;R:42077;i:1;R:40466;}s:42:"1232:zlubzr-srrq-vafregrq-pngrtbel-qrgnvyf";a:2:{i:0;R:42077;i:1;R:40466;}s:36:"1232:zlubzr-hfre-pbagevohgvbaf-rzcgl";a:2:{i:0;R:42077;i:1;R:40466;}s:39:"1232:zlubzr-ubg-fcbgf-ahzore-bs-rqvgbef";a:2:{i:0;R:42077;i:1;R:40466;}s:18:"1232:zlubzr-ybt-va";a:2:{i:0;R:42077;i:1;R:40466;}s:28:"1232:zlubzr-fjvgpu-gb-zbanpb";a:2:{i:0;R:42077;i:1;R:40466;}s:26:"1232:zlubzr-anzrfcnpr-oybt";a:2:{i:0;R:42077;i:1;R:40466;}s:35:"1232:zlubzr-pbzzhavgl-pbeare-urnqre";a:2:{i:0;R:42077;i:1;R:40466;}s:39:"1232:bnfvf-zlubzr-pbzzhavgl-pbeare-rqvg";a:2:{i:0;R:42077;i:1;R:40466;}s:33:"1232:zlubzr-pbzzhavgl-pbeare-rqvg";a:2:{i:0;R:42077;i:1;R:40466;}s:21:"1232:pbzzhavgl-pbeare";a:2:{i:0;R:42077;i:1;R:40466;}s:32:"1232:zlubzr-ubg-fcbgf-qrsvavgvba";a:2:{i:0;R:42077;i:1;R:40466;}s:33:"1232:zlubzr-qrsnhyg-ivrj-purpxobk";a:2:{i:0;R:42077;i:1;R:40466;}s:32:"1232:zlubzr-qrsnhyg-ivrj-fhpprff";a:2:{i:0;R:42077;i:1;R:40466;}s:24:"1232:npprffxrl-cg-zlubzr";a:2:{i:0;R:42077;i:1;R:40466;}s:22:"1232:gbbygvc-cg-zlubzr";a:2:{i:0;R:42077;i:1;R:40466;}s:17:"1232:npgvivglsrrq";a:2:{i:0;R:42077;i:1;R:40466;}s:46:"1232:jvxv-npgvivgl-zrffntr-jnyy-zrffntrf-pbhag";a:2:{i:0;R:42077;i:1;R:40466;}s:15:"1232:bnfvf-ubzr";a:2:{i:0;s:11:"wikia-oasis";i:1;R:40466;}s:15:"1232:bnfvf-zber";a:2:{i:0;R:42139;i:1;R:40466;}s:18:"1232:bnfvf-zlgbbyf";a:2:{i:0;R:42139;i:1;R:40466;}s:17:"1232:bnfvf-sbyybj";a:2:{i:0;R:42139;i:1;R:40466;}s:16:"1232:bnfvf-funer";a:2:{i:0;R:42139;i:1;R:40466;}s:15:"1232:bnfvf-yvxr";a:2:{i:0;R:42139;i:1;R:40466;}s:17:"1232:bnfvf-fvtahc";a:2:{i:0;R:42139;i:1;R:40466;}s:33:"1232:bnfvf-rqvg-cebgrpgrq-negvpyr";a:2:{i:0;R:42139;i:1;R:40466;}s:29:"1232:bnfvf-ohggba-enaqbz-cntr";a:2:{i:0;R:42139;i:1;R:40466;}s:37:"1232:bnfvf-ohggba-enaqbz-cntr-gbbygvc";a:2:{i:0;R:42139;i:1;R:40466;}s:29:"1232:bnfvf-ohggba-enaqbz-jvxv";a:2:{i:0;R:42139;i:1;R:40466;}s:31:"1232:bnfvf-ohggba-jvxv-npgvivgl";a:2:{i:0;R:42139;i:1;R:40466;}s:39:"1232:bnfvf-ohggba-jvxv-npgvivgl-gbbygvc";a:2:{i:0;R:42139;i:1;R:40466;}s:36:"1232:bnfvf-ohggba-jvxv-npgvivgl-srrq";a:2:{i:0;R:42139;i:1;R:40466;}s:41:"1232:bnfvf-ohggba-jvxv-npgvivgl-jngpuyvfg";a:2:{i:0;R:42139;i:1;R:40466;}s:35:"1232:bnfvf-npgvivgl-jngpuyvfg-ybtva";a:2:{i:0;R:42139;i:1;R:40466;}s:26:"1232:bnfvf-npgvivgl-urnqre";a:2:{i:0;R:42139;i:1;R:40466;}s:31:"1232:bnfvf-eryngrq-ivqrb-urnqre";a:2:{i:0;R:42139;i:1;R:40466;}s:32:"1232:bnfvf-eryngrq-ivqrb-ol-5zva";a:2:{i:0;R:42139;i:1;R:40466;}s:34:"1232:bnfvf-gbgny-negvpyrf-znvacntr";a:2:{i:0;R:42139;i:1;R:40466;}s:31:"1232:bnfvf-yngrfg-cubgbf-urnqre";a:2:{i:0;R:42139;i:1;R:40466;}s:29:"1232:bnfvf-yngrfg-cubgbf-zber";a:2:{i:0;R:42139;i:1;R:40466;}s:38:"1232:bnfvf-yngrfg-cubgbf-vaare-zrffntr";a:2:{i:0;R:42139;i:1;R:40466;}s:31:"1232:bnfvf-yngrfg-cubgbf-fvatyr";a:2:{i:0;R:42139;i:1;R:40466;}s:30:"1232:bnfvf-yngrfg-cubgbf-rzcgl";a:2:{i:0;R:42139;i:1;R:40466;}s:27:"1232:bnfvf-yngrfg-cubgbf-ol";a:2:{i:0;R:42139;i:1;R:40466;}s:34:"1232:bnfvf-yngrfg-cubgbf-cbfgrq-va";a:2:{i:0;R:42139;i:1;R:40466;}s:39:"1232:bnfvf-yngrfg-cubgbf-zber-qbgqbgqbg";a:2:{i:0;R:42139;i:1;R:40466;}s:33:"1232:bnfvf-tybony-ani-perngr-jvxv";a:2:{i:0;R:42139;i:1;R:40466;}s:42:"1232:bnfvf-cntr-urnqre-ab-pbzzragf-gbbygvc";a:2:{i:0;R:42139;i:1;R:40466;}s:31:"1232:bnfvf-cntr-urnqre-pbzzragf";a:2:{i:0;R:42139;i:1;R:40466;}s:33:"1232:bnfvf-cntr-urnqre-pbzzragf-x";a:2:{i:0;R:42139;i:1;R:40466;}s:33:"1232:bnfvf-cntr-urnqre-pbzzragf-z";a:2:{i:0;R:42139;i:1;R:40466;}s:27:"1232:bnfvf-cntr-urnqre-gnyx";a:2:{i:0;R:42139;i:1;R:40466;}s:32:"1232:bnfvf-cntr-urnqre-rqvgrq-ol";a:2:{i:0;R:42139;i:1;R:40466;}s:29:"1232:bnfvf-cntr-urnqre-rqvgrq";a:2:{i:0;R:42139;i:1;R:40466;}s:32:"1232:bnfvf-cntr-urnqre-ernq-zber";a:2:{i:0;R:42139;i:1;R:40466;}s:35:"1232:bnfvf-cntr-urnqre-uvfgbel-yvax";a:2:{i:0;R:42139;i:1;R:40466;}s:38:"1232:bnfvf-cntr-urnqre-onpx-gb-negvpyr";a:2:{i:0;R:42139;i:1;R:40466;}s:39:"1232:bnfvf-cntr-urnqre-onpx-gb-grzcyngr";a:2:{i:0;R:42139;i:1;R:40466;}s:40:"1232:bnfvf-cntr-urnqre-onpx-gb-zrqvnjvxv";a:2:{i:0;R:42139;i:1;R:40466;}s:39:"1232:bnfvf-cntr-urnqre-onpx-gb-pngrtbel";a:2:{i:0;R:42139;i:1;R:40466;}s:35:"1232:bnfvf-cntr-urnqre-onpx-gb-svyr";a:2:{i:0;R:42139;i:1;R:40466;}s:36:"1232:bnfvf-cntr-urnqre-onpx-gb-ivqrb";a:2:{i:0;R:42139;i:1;R:40466;}s:32:"1232:bnfvf-cntr-urnqre-nqq-gbcvp";a:2:{i:0;R:42139;i:1;R:40466;}s:35:"1232:bnfvf-cntr-urnqre-rqvg-cebsvyr";a:2:{i:0;R:42139;i:1;R:40466;}s:30:"1232:bnfvf-cntr-urnqre-rqvgvat";a:2:{i:0;R:42139;i:1;R:40466;}s:38:"1232:bnfvf-cntr-urnqre-rqvgvat-frpgvba";a:2:{i:0;R:42139;i:1;R:40466;}s:30:"1232:bnfvf-cntr-urnqre-cerivrj";a:2:{i:0;R:42139;i:1;R:40466;}s:30:"1232:bnfvf-cntr-urnqre-punatrf";a:2:{i:0;R:42139;i:1;R:40466;}s:27:"1232:bnfvf-cntr-urnqre-qvss";a:2:{i:0;R:42139;i:1;R:40466;}s:30:"1232:bnfvf-cntr-urnqre-uvfgbel";a:2:{i:0;R:42139;i:1;R:40466;}s:22:"1232:bnfvf-naba-urnqre";a:2:{i:0;R:42139;i:1;R:40466;}s:31:"1232:bnfvf-cerivrj-pbasvezngvba";a:2:{i:0;R:42139;i:1;R:40466;}s:29:"1232:bnfvf-onqtr-abgvsvpngvba";a:2:{i:0;R:42139;i:1;R:40466;}s:38:"1232:bnfvf-onqtr-abgvsvpngvba-frr-zber";a:2:{i:0;R:42139;i:1;R:40466;}s:41:"1232:bnfvf-cntr-urnqre-fhogvgyr-zrqvnjvxv";a:2:{i:0;R:42139;i:1;R:40466;}s:39:"1232:bnfvf-cntr-urnqre-fhogvgyr-fcrpvny";a:2:{i:0;R:42139;i:1;R:40466;}s:40:"1232:bnfvf-cntr-urnqre-fhogvgyr-grzcyngr";a:2:{i:0;R:42139;i:1;R:40466;}s:40:"1232:bnfvf-cntr-urnqre-fhogvgyr-pngrtbel";a:2:{i:0;R:42139;i:1;R:40466;}s:37:"1232:bnfvf-cntr-urnqre-fhogvgyr-sbehz";a:2:{i:0;R:42139;i:1;R:40466;}s:52:"1232:bnfvf-cntr-urnqre-fhogvgyr-fcrpvny-jvxvnpgvivgl";a:2:{i:0;R:42139;i:1;R:40466;}s:30:"1232:bnfvf-frnepu-erfhygf-sebz";a:2:{i:0;R:42139;i:1;R:40466;}s:40:"1232:bnfvf-frnepu-erfhygf-sebz-nyy-jvxvf";a:2:{i:0;R:42139;i:1;R:40466;}s:34:"1232:bnfvf-hfre-cntr-punatr-ningne";a:2:{i:0;R:42139;i:1;R:40466;}s:35:"1232:bnfvf-pbagrag-cvpgher-nqqrq-ol";a:2:{i:0;R:42139;i:1;R:40466;}s:36:"1232:bnfvf-pbasvezngvba-cntr-qryrgrq";a:2:{i:0;R:42139;i:1;R:40466;}s:39:"1232:bnfvf-pbasvezngvba-pbzzrag-qryrgrq";a:2:{i:0;R:42139;i:1;R:40466;}s:38:"1232:bnfvf-pbasvezngvba-cntr-haqryrgrq";a:2:{i:0;R:42139;i:1;R:40466;}s:35:"1232:bnfvf-pbasvezngvba-hfre-ybtbhg";a:2:{i:0;R:42139;i:1;R:40466;}s:42:"1232:bnfvf-abgvsvpngvba-lbhunirarjzrffntrf";a:2:{i:0;R:42139;i:1;R:40466;}s:23:"1232:bnfvf-zrzore-fvapr";a:2:{i:0;R:42139;i:1;R:40466;}s:24:"1232:bnfvf-rqvgf-pbhagre";a:2:{i:0;R:42139;i:1;R:40466;}s:21:"1232:bnfvf-rqvg-fnirq";a:2:{i:0;R:42139;i:1;R:40466;}s:36:"1232:bnfvf-ohggba-pbagevohgr-gbbygvc";a:2:{i:0;R:42139;i:1;R:40466;}s:27:"1232:bnfvf-ohggba-nqq-ivqrb";a:2:{i:0;R:42139;i:1;R:40466;}s:29:"1232:bnfvf-ohggba-perngr-cntr";a:2:{i:0;R:42139;i:1;R:40466;}s:27:"1232:bnfvf-ohggba-nqq-cubgb";a:2:{i:0;R:42139;i:1;R:40466;}s:39:"1232:bnfvf-ohggba-rqvg-jvxvn-ybpny-zrah";a:2:{i:0;R:42139;i:1;R:40466;}s:40:"1232:bnfvf-ohggba-rqvg-jvxvn-tybony-zrah";a:2:{i:0;R:42139;i:1;R:40466;}s:29:"1232:bnfvf-gbbyone-rqvg-gvgyr";a:2:{i:0;R:42139;i:1;R:40466;}s:36:"1232:bnfvf-gbbyone-rqvg-gbbyone-yvfg";a:2:{i:0;R:42139;i:1;R:40466;}s:38:"1232:bnfvf-gbbyone-rqvg-erfrg-qrsnhygf";a:2:{i:0;R:42139;i:1;R:40466;}s:35:"1232:bnfvf-gbbyone-rqvg-svaq-n-gbby";a:2:{i:0;R:42139;i:1;R:40466;}s:38:"1232:bnfvf-gbbyone-rqvg-nqinaprq-gbbyf";a:2:{i:0;R:42139;i:1;R:40466;}s:39:"1232:bnfvf-gbbyone-rqvg-frnepu-sbe-gbby";a:2:{i:0;R:42139;i:1;R:40466;}s:37:"1232:bnfvf-gbbyone-rqvg-cbchyne-gbbyf";a:2:{i:0;R:42139;i:1;R:40466;}s:34:"1232:bnfvf-gbbyone-rqvg-uvqr-gbbyf";a:2:{i:0;R:42139;i:1;R:40466;}s:28:"1232:bnfvf-gbbyone-rqvg-fnir";a:2:{i:0;R:42139;i:1;R:40466;}s:30:"1232:bnfvf-gbbyone-rqvg-pnapry";a:2:{i:0;R:42139;i:1;R:40466;}s:35:"1232:bnfvf-gbbyone-rqvg-eranzr-vgrz";a:2:{i:0;R:42139;i:1;R:40466;}s:34:"1232:bnfvf-gbbyone-sbe-nqzvaf-bayl";a:2:{i:0;R:42139;i:1;R:40466;}s:35:"1232:bnfvf-gbbyone-abg-ranoyrq-urer";a:2:{i:0;R:42139;i:1;R:40466;}s:23:"1232:bnfvf-gbbyone-zber";a:2:{i:0;R:42139;i:1;R:40466;}s:28:"1232:bnfvf-gbbyone-phfgbzvmr";a:2:{i:0;R:42139;i:1;R:40466;}s:26:"1232:bnfvf-gbbyone-qrivasb";a:2:{i:0;R:42139;i:1;R:40466;}s:26:"1232:bnfvf-pbzzragf-urnqre";a:2:{i:0;R:42139;i:1;R:40466;}s:39:"1232:bnfvf-pbzzragf-fubjvat-zbfg-erprag";a:2:{i:0;R:42139;i:1;R:40466;}s:36:"1232:bnfvf-pbzzragf-nabalzbhf-cebzcg";a:2:{i:0;R:42139;i:1;R:40466;}s:28:"1232:bnfvf-pbzzragf-fubj-nyy";a:2:{i:0;R:42139;i:1;R:40466;}s:28:"1232:bnfvf-pbzzragf-nqqrq-ol";a:2:{i:0;R:42139;i:1;R:40466;}s:22:"1232:bnfvf-enaqbz-jvxv";a:2:{i:0;R:42139;i:1;R:40466;}s:20:"1232:bnfvf-nqq-cubgb";a:2:{i:0;R:42139;i:1;R:40466;}s:20:"1232:bnfvf-naba-hfre";a:2:{i:0;R:42139;i:1;R:40466;}s:22:"1232:bnfvf-perngr-cntr";a:2:{i:0;R:42139;i:1;R:40466;}s:19:"1232:bnfvf-nqq-cntr";a:2:{i:0;R:42139;i:1;R:40466;}s:23:"1232:bnfvf-frpgvba-rqvg";a:2:{i:0;R:42139;i:1;R:40466;}s:27:"1232:bnfvf-frpgvba-rqvg-nyg";a:2:{i:0;R:42139;i:1;R:40466;}s:30:"1232:bnfvf-cbchyne-oybtf-gvgyr";a:2:{i:0;R:42139;i:1;R:40466;}s:32:"1232:bnfvf-fcbgyvtugf-envy-gvgyr";a:2:{i:0;R:42139;i:1;R:40466;}s:34:"1232:bnfvf-fcbgyvtugf-sbbgre-gvgyr";a:2:{i:0;R:42139;i:1;R:40466;}s:18:"1232:gurzrqrfvtare";a:2:{i:0;R:42139;i:1;R:40466;}s:31:"1232:bnfvf-cntrf-ba-jvxv-urnqre";a:2:{i:0;R:42139;i:1;R:40466;}s:38:"1232:bnfvf-yngrfg-npgvivgl-arj-qrgnvyf";a:2:{i:0;R:42139;i:1;R:40466;}s:39:"1232:bnfvf-yngrfg-npgvivgl-rqvg-qrgnvyf";a:2:{i:0;R:42139;i:1;R:40466;}s:41:"1232:bnfvf-yngrfg-npgvivgl-qryrgr-qrgnvyf";a:2:{i:0;R:42139;i:1;R:40466;}s:25:"1232:bnfvf-rqvg-guvf-zrah";a:2:{i:0;R:42139;i:1;R:40466;}s:29:"1232:bnfvf-vagreynat-fubj-nyy";a:2:{i:0;R:42139;i:1;R:40466;}s:30:"1232:bnfvf-vagreynat-ynathntrf";a:2:{i:0;R:42139;i:1;R:40466;}s:20:"1232:cubgbfoynpxyvfg";a:2:{i:0;R:42139;i:1;R:40466;}s:22:"1232:pngrtbeloynpxyvfg";a:2:{i:0;R:42139;i:1;R:40466;}s:20:"1232:jvxv-anivtngvba";a:2:{i:0;R:42139;i:1;R:40466;}s:25:"1232:vzntrfrb-srngherq-ba";a:2:{i:0;R:42139;i:1;R:40466;}s:27:"1232:vzntrfrb-srngherq-zber";a:2:{i:0;R:42139;i:1;R:40466;}s:35:"1232:bnfvf-rqvgcntr-ernqbayljneavat";a:2:{i:0;R:42139;i:1;R:40466;}s:30:"1232:bnfvf-hcybnq-cubgbf-gvgyr";a:2:{i:0;R:42139;i:1;R:40466;}s:37:"1232:bnfvf-hcybnq-cubgbf-zber-bcgvbaf";a:2:{i:0;R:42139;i:1;R:40466;}s:38:"1232:bnfvf-hcybnq-cubgbf-srjre-bcgvbaf";a:2:{i:0;R:42139;i:1;R:40466;}s:30:"1232:bnfvf-hcybnq-cubgbf-sbepr";a:2:{i:0;R:42139;i:1;R:40466;}s:32:"1232:bnfvf-hcybnq-cubgbf-pncgvba";a:2:{i:0;R:42139;i:1;R:40466;}s:49:"1232:bnfvf-pbecbengrsbbgre-uho-ragregnvazrag-yvax";a:2:{i:0;R:42139;i:1;R:40466;}s:42:"1232:bnfvf-pbecbengrsbbgre-uho-tnzvat-yvax";a:2:{i:0;R:42139;i:1;R:40466;}s:47:"1232:bnfvf-pbecbengrsbbgre-uho-ivqrb_tnzrf-yvax";a:2:{i:0;R:42139;i:1;R:40466;}s:45:"1232:bnfvf-pbecbengrsbbgre-uho-yvsrfglyr-yvax";a:2:{i:0;R:42139;i:1;R:40466;}s:50:"1232:bnfvf-pbecbengrsbbgre-uho-sbbq_naq_qevax-yvax";a:2:{i:0;R:42139;i:1;R:40466;}s:31:"1232:bnfvf-zbqny-reebe-urnqyvar";a:2:{i:0;R:42139;i:1;R:40466;}s:26:"1232:bnfvf-fxvc-gb-pbagrag";a:2:{i:0;R:42139;i:1;R:40466;}s:34:"1232:bnfvf-fxvc-gb-jvxv-anivtngvba";a:2:{i:0;R:42139;i:1;R:40466;}s:34:"1232:bnfvf-fxvc-gb-fvgr-anivtngvba";a:2:{i:0;R:42139;i:1;R:40466;}s:26:"1232:bnfvf-jvxv-anivtngvba";a:2:{i:0;R:42139;i:1;R:40466;}s:29:"1232:bnfvf-eryngrq-pngrtbevrf";a:2:{i:0;R:42139;i:1;R:40466;}s:36:"1232:bnfvf-anivtngvba-i2-perngr-cntr";a:2:{i:0;R:42139;i:1;R:40466;}s:34:"1232:bnfvf-anivtngvba-i2-rqvg-cntr";a:2:{i:0;R:42139;i:1;R:40466;}s:34:"1232:bnfvf-anivtngvba-i2-nqq-cubgb";a:2:{i:0;R:42139;i:1;R:40466;}s:46:"1232:bnfvf-anivtngvba-i2-rqvg-jvxvn-ybpny-zrah";a:2:{i:0;R:42139;i:1;R:40466;}s:47:"1232:bnfvf-anivtngvba-i2-rqvg-jvxvn-tybony-zrah";a:2:{i:0;R:42139;i:1;R:40466;}s:39:"1232:bnfvf-anivtngvba-i2-rqvg-guvf-zrah";a:2:{i:0;R:42139;i:1;R:40466;}s:42:"1232:bnfvf-anivtngvba-i2-yriry1-inyvqngvba";a:2:{i:0;R:42139;i:1;R:40466;}s:42:"1232:bnfvf-anivtngvba-i2-yriry2-inyvqngvba";a:2:{i:0;R:42139;i:1;R:40466;}s:43:"1232:bnfvf-anivtngvba-i2-yriry12-inyvqngvba";a:2:{i:0;R:42139;i:1;R:40466;}s:46:"1232:bnfvf-anivtngvba-i2-zntvp-jbeq-inyvqngvba";a:2:{i:0;R:42139;i:1;R:40466;}s:40:"1232:bnfvf-anivtngvba-i2-inyvqngvba-arkg";a:2:{i:0;R:42139;i:1;R:40466;}s:43:"1232:bnfvf-anivtngvba-i2-inyvqngvba-pncgvba";a:2:{i:0;R:42139;i:1;R:40466;}s:35:"1232:bnfvf-anivtngvba-i2-arj-cubgbf";a:2:{i:0;R:42139;i:1;R:40466;}s:22:"1232:bnfvf-ba-gur-jvxv";a:2:{i:0;R:42139;i:1;R:40466;}s:39:"1232:bnfvf-funevat-gbbyone-znvy-fhowrpg";a:2:{i:0;R:42139;i:1;R:40466;}s:36:"1232:bnfvf-funevat-gbbyone-znvy-obql";a:2:{i:0;R:42139;i:1;R:40466;}s:18:"1232:bhe404unaqyre";a:2:{i:0;s:19:"wikia-our404handler";i:1;R:40466;}s:23:"1232:bhe404unaqyre-bbcf";a:2:{i:0;R:42297;i:1;R:40466;}s:15:"1232:zrffntr404";a:2:{i:0;R:42297;i:1;R:40466;}s:22:"1232:cntrynlbhgohvyqre";a:2:{i:0;s:23:"wikia-pagelayoutbuilder";i:1;R:40466;}s:27:"1232:cntrynlbhgohvyqre-qrfp";a:2:{i:0;R:42301;i:1;R:40466;}s:34:"1232:cyo-fcrpvny-sbez-negvpyr-anzr";a:2:{i:0;R:42301;i:1;R:40466;}s:33:"1232:cyo-fcrpvny-sbez-gvgyr-rzcgl";a:2:{i:0;R:42301;i:1;R:40466;}s:41:"1232:cyo-fcrpvny-sbez-vainyvq-gvgyr-reebe";a:2:{i:0;R:42301;i:1;R:40466;}s:36:"1232:cyo-fcrpvny-sbez-nyernql-rkvfgf";a:2:{i:0;R:42301;i:1;R:40466;}s:30:"1232:cyo-fcrpvny-sbez-erdhverq";a:2:{i:0;R:42301;i:1;R:40466;}s:38:"1232:cyo-fcrpvny-sbez-rzcglsbezcerivrj";a:2:{i:0;R:42301;i:1;R:40466;}s:35:"1232:cyo-fcrpvny-sbez-ynlbhg-qryrgr";a:2:{i:0;R:42301;i:1;R:40466;}s:34:"1232:cyo-fcrpvny-sbez-haxabj-reebe";a:2:{i:0;R:42301;i:1;R:40466;}s:31:"1232:cyo-fcrpvny-sbez-pnag-rqvg";a:2:{i:0;R:42301;i:1;R:40466;}s:26:"1232:cyo-fcrpvny-sbez-fcnz";a:2:{i:0;R:42301;i:1;R:40466;}s:32:"1232:cyo-fcrpvny-sbez-perngr-arj";a:2:{i:0;R:42301;i:1;R:40466;}s:34:"1232:cyo-fcrpvny-sbez-rqvg-negvpyr";a:2:{i:0;R:42301;i:1;R:40466;}s:33:"1232:cyo-fcrpvny-sbez-obk-pncgvba";a:2:{i:0;R:42301;i:1;R:40466;}s:32:"1232:cyo-fcrpvny-sbez-obk-perngr";a:2:{i:0;R:42301;i:1;R:40466;}s:36:"1232:cyo-fcrpvny-sbez-perngr-cerivrj";a:2:{i:0;R:42301;i:1;R:40466;}s:30:"1232:cyo-fcrpvny-sbez-png-vasb";a:2:{i:0;R:42301;i:1;R:40466;}s:32:"1232:cyo-fcrpvny-sbez-reebe-vasb";a:2:{i:0;R:42301;i:1;R:40466;}s:25:"1232:cyo-fcrpvny-sbez-arj";a:2:{i:0;R:42301;i:1;R:40466;}s:34:"1232:cyo-fcrpvny-sbez-frffvba-snvy";a:2:{i:0;R:42301;i:1;R:40466;}s:35:"1232:cyo-fcrpvny-sbez-fnir-nf-qensg";a:2:{i:0;R:42301;i:1;R:40466;}s:34:"1232:cyo-fcrpvny-sbez-cerivrj-sbez";a:2:{i:0;R:42301;i:1;R:40466;}s:26:"1232:cyo-fcrpvny-ab-ynlbhg";a:2:{i:0;R:42301;i:1;R:40466;}s:31:"1232:cyo-fcrpvny-ab-ynlbhg-obql";a:2:{i:0;R:42301;i:1;R:40466;}s:27:"1232:cyo-fcrpvny-ab-negvpyr";a:2:{i:0;R:42301;i:1;R:40466;}s:32:"1232:cyo-fcrpvny-ab-negvpyr-obql";a:2:{i:0;R:42301;i:1;R:40466;}s:25:"1232:cyo-fcrpvny-ab-ybtva";a:2:{i:0;R:42301;i:1;R:40466;}s:23:"1232:cyo-ybtva-erdhverq";a:2:{i:0;R:42301;i:1;R:40466;}s:19:"1232:cyo-rzcgl-cntr";a:2:{i:0;R:42301;i:1;R:40466;}s:32:"1232:cyo-perngr-rzcgl-obql-reebe";a:2:{i:0;R:42301;i:1;R:40466;}s:26:"1232:cyo-perngr-rzcgl-qrfp";a:2:{i:0;R:42301;i:1;R:40466;}s:25:"1232:cyo-perngr-arj-gvgyr";a:2:{i:0;R:42301;i:1;R:40466;}s:31:"1232:cyo-perngr-arj-zbqny-gvgyr";a:2:{i:0;R:42301;i:1;R:40466;}s:26:"1232:cyo-perngr-rqvg-gvgyr";a:2:{i:0;R:42301;i:1;R:40466;}s:29:"1232:cyo-perngr-cerivrj-gvgyr";a:2:{i:0;R:42301;i:1;R:40466;}s:35:"1232:cyo-perngr-ohggba-ynlbhg-gvgyr";a:2:{i:0;R:42301;i:1;R:40466;}s:29:"1232:cyo-perngr-ohggba-ynlbhg";a:2:{i:0;R:42301;i:1;R:40466;}s:34:"1232:cyo-perngr-ohggba-qensg-gvgyr";a:2:{i:0;R:42301;i:1;R:40466;}s:28:"1232:cyo-perngr-ohggba-qensg";a:2:{i:0;R:42301;i:1;R:40466;}s:34:"1232:cyo-perngr-ohggba-cerivrjsbez";a:2:{i:0;R:42301;i:1;R:40466;}s:40:"1232:cyo-perngr-ohggba-cerivrjsbez-gvgyr";a:2:{i:0;R:42301;i:1;R:40466;}s:37:"1232:cyo-perngr-ohggba-cerivrjnegvpyr";a:2:{i:0;R:42301;i:1;R:40466;}s:43:"1232:cyo-perngr-ohggba-cerivrjnegvpyr-gvgyr";a:2:{i:0;R:42301;i:1;R:40466;}s:33:"1232:cyo-perngr-rzcgl-gvgyr-reebe";a:2:{i:0;R:42301;i:1;R:40466;}s:35:"1232:cyo-perngr-vainyvq-gvgyr-reebe";a:2:{i:0;R:42301;i:1;R:40466;}s:36:"1232:cyo-perngr-nyernql-rkvfgf-reebe";a:2:{i:0;R:42301;i:1;R:40466;}s:31:"1232:cyo-perngr-hcqngrq-fhzznel";a:2:{i:0;R:42301;i:1;R:40466;}s:25:"1232:cyo-perngr-pnag-rqvg";a:2:{i:0;R:42301;i:1;R:40466;}s:20:"1232:cyo-perngr-fcnz";a:2:{i:0;R:42301;i:1;R:40466;}s:35:"1232:cyo-fcrpvny-sbez-fhozvg-ohggba";a:2:{i:0;R:42301;i:1;R:40466;}s:36:"1232:cyo-fcrpvny-sbez-cerivrj-ohggba";a:2:{i:0;R:42301;i:1;R:40466;}s:29:"1232:cyo-fcrpvny-sbez-fhzznel";a:2:{i:0;R:42301;i:1;R:40466;}s:19:"1232:cyo-sbez-gvgyr";a:2:{i:0;R:42301;i:1;R:40466;}s:18:"1232:cyo-sbez-qrfp";a:2:{i:0;R:42301;i:1;R:40466;}s:32:"1232:cyo-sbez-gvgyr-vafgehpgvbaf";a:2:{i:0;R:42301;i:1;R:40466;}s:31:"1232:cyo-sbez-qrfp-vafgehpgvbaf";a:2:{i:0;R:42301;i:1;R:40466;}s:28:"1232:cyo-yvfg-pbasvez-qryrgr";a:2:{i:0;R:42301;i:1;R:40466;}s:29:"1232:cyo-yvfg-pbasvez-choyvfu";a:2:{i:0;R:42301;i:1;R:40466;}s:18:"1232:cyo-yvfg-anzr";a:2:{i:0;R:42301;i:1;R:40466;}s:18:"1232:cyo-yvfg-qrfp";a:2:{i:0;R:42301;i:1;R:40466;}s:25:"1232:cyo-yvfg-ynfg-rqvgbe";a:2:{i:0;R:42301;i:1;R:40466;}s:19:"1232:cyo-yvfg-pbhag";a:2:{i:0;R:42301;i:1;R:40466;}s:23:"1232:cyo-yvfg-ynfg-rqvg";a:2:{i:0;R:42301;i:1;R:40466;}s:25:"1232:cyo-yvfg-npgvba-rqvg";a:2:{i:0;R:42301;i:1;R:40466;}s:27:"1232:cyo-yvfg-npgvba-qryrgr";a:2:{i:0;R:42301;i:1;R:40466;}s:28:"1232:cyo-yvfg-npgvba-choyvfu";a:2:{i:0;R:42301;i:1;R:40466;}s:27:"1232:cyo-yvfg-npgvba-perngr";a:2:{i:0;R:42301;i:1;R:40466;}s:19:"1232:cyo-yvfg-gvgyr";a:2:{i:0;R:42301;i:1;R:40466;}s:29:"1232:cyo-cnefre-ragre-pncgvba";a:2:{i:0;R:42301;i:1;R:40466;}s:26:"1232:cyo-cnefre-vq-abg-vag";a:2:{i:0;R:42301;i:1;R:40466;}s:34:"1232:cyo-cnefre-vzntr-fvmr-abg-vag";a:2:{i:0;R:42301;i:1;R:40466;}s:34:"1232:cyo-cnefre-vzntr-fvmr-gbb-ovt";a:2:{i:0;R:42301;i:1;R:40466;}s:37:"1232:cyo-cnefre-vzntr-vapbeerpg-nyvta";a:2:{i:0;R:42301;i:1;R:40466;}s:37:"1232:cyo-cnefre-vzntr-vapbeerpg-senzr";a:2:{i:0;R:42301;i:1;R:40466;}s:29:"1232:cyo-cnefre-vq-abg-havdhr";a:2:{i:0;R:42301;i:1;R:40466;}s:27:"1232:cyo-cnefre-vq-gbb-ybat";a:2:{i:0;R:42301;i:1;R:40466;}s:28:"1232:cyo-cnefre-ab-nggevohgr";a:2:{i:0;R:42301;i:1;R:40466;}s:27:"1232:cyo-cnefre-rzcgl-inyhr";a:2:{i:0;R:42301;i:1;R:40466;}s:31:"1232:cyo-cnefre-qrsnhyg-pncgvba";a:2:{i:0;R:42301;i:1;R:40466;}s:36:"1232:cyo-cnefre-qrsnhyg-vafgehpgvbaf";a:2:{i:0;R:42301;i:1;R:40466;}s:33:"1232:cyo-cnefre-rzcgl-inyhr-vzntr";a:2:{i:0;R:42301;i:1;R:40466;}s:34:"1232:cyo-cnefre-cerivrj-vzntr-hfre";a:2:{i:0;R:42301;i:1;R:40466;}s:38:"1232:cyo-cnefre-cerivrj-vzntr-hfreanzr";a:2:{i:0;R:42301;i:1;R:40466;}s:37:"1232:cyo-cnefre-cerivrj-vzntr-pncgvba";a:2:{i:0;R:42301;i:1;R:40466;}s:33:"1232:cyo-cnefre-cerivrj-vzntr-nqq";a:2:{i:0;R:42301;i:1;R:40466;}s:29:"1232:cyo-cnefre-cerivrj-vachg";a:2:{i:0;R:42301;i:1;R:40466;}s:31:"1232:cyo-cnefre-cerivrj-zyvachg";a:2:{i:0;R:42301;i:1;R:40466;}s:30:"1232:cyo-cnefre-cerivrj-fvachg";a:2:{i:0;R:42301;i:1;R:40466;}s:32:"1232:cyo-fcrpvny-sbez-abar-inyhr";a:2:{i:0;R:42301;i:1;R:40466;}s:32:"1232:cyo-perngr-sebz-negvpyr-arj";a:2:{i:0;R:42301;i:1;R:40466;}s:35:"1232:cyo-perngr-sebz-negvpyr-ohggba";a:2:{i:0;R:42301;i:1;R:40466;}s:41:"1232:cyo-perngr-sebz-negvpyr-ohggba-gvgyr";a:2:{i:0;R:42301;i:1;R:40466;}s:40:"1232:cyo-perngr-sebz-negvpyr-ohggba-qrfp";a:2:{i:0;R:42301;i:1;R:40466;}s:24:"1232:cyo-ynlbhg-hfrepnag";a:2:{i:0;R:42301;i:1;R:40466;}s:38:"1232:cyo-rqvgbe-ryrzragf-va-gur-rqvgbe";a:2:{i:0;R:42301;i:1;R:40466;}s:27:"1232:cyo-rqvgbe-nqq-ryrzrag";a:2:{i:0;R:42301;i:1;R:40466;}s:20:"1232:cyo-rqvgbe-rqvg";a:2:{i:0;R:42301;i:1;R:40466;}s:31:"1232:cyo-rqvgbe-gbbyone-pncgvba";a:2:{i:0;R:42301;i:1;R:40466;}s:34:"1232:cyo-rqvgbe-gbbyone-sbeznggvat";a:2:{i:0;R:42301;i:1;R:40466;}s:30:"1232:cyo-rqvgbe-gbbyone-fgngvp";a:2:{i:0;R:42301;i:1;R:40466;}s:27:"1232:cyo-rqvgbe-egr-pncgvba";a:2:{i:0;R:42301;i:1;R:40466;}s:23:"1232:cyo-rqvgbe-cerivrj";a:2:{i:0;R:42301;i:1;R:40466;}s:28:"1232:cyo-rqvgbe-cerivrj-qrfp";a:2:{i:0;R:42301;i:1;R:40466;}s:20:"1232:cyo-rqvgbe-vasb";a:2:{i:0;R:42301;i:1;R:40466;}s:28:"1232:cyo-rqvgbe-cerivrj-vasb";a:2:{i:0;R:42301;i:1;R:40466;}s:28:"1232:cyo-rqvgbe-bireynl-rqvg";a:2:{i:0;R:42301;i:1;R:40466;}s:29:"1232:cyo-rqvgbe-ragre-pncgvba";a:2:{i:0;R:42301;i:1;R:40466;}s:37:"1232:cyo-rqvgbe-yrsg-fvqrone-ghgbevny";a:2:{i:0;R:42301;i:1;R:40466;}s:40:"1232:cyo-rqvgbe-ernq-bayl-fryrpgvba-vasb";a:2:{i:0;R:42301;i:1;R:40466;}s:31:"1232:cyo-rqvgbe-fnivat-nf-qensg";a:2:{i:0;R:42301;i:1;R:40466;}s:30:"1232:cyo-jvqtrg-anzr-cyo_vachg";a:2:{i:0;R:42301;i:1;R:40466;}s:32:"1232:cyo-jvqtrg-anzr-cyo_zyvachg";a:2:{i:0;R:42301;i:1;R:40466;}s:30:"1232:cyo-jvqtrg-anzr-cyo_vzntr";a:2:{i:0;R:42301;i:1;R:40466;}s:31:"1232:cyo-jvqtrg-anzr-cyo_fvachg";a:2:{i:0;R:42301;i:1;R:40466;}s:32:"1232:cyo-jvqtrg-anzr-cyo_tnyyrel";a:2:{i:0;R:42301;i:1;R:40466;}s:30:"1232:cyo-cebcregl-rqvgbe-jvqgu";a:2:{i:0;R:42301;i:1;R:40466;}s:32:"1232:cyo-cebcregl-rqvgbe-fcnpvat";a:2:{i:0;R:42301;i:1;R:40466;}s:38:"1232:cyo-cebcregl-rqvgbe-fcnpvat-fznyy";a:2:{i:0;R:42301;i:1;R:40466;}s:39:"1232:cyo-cebcregl-rqvgbe-fcnpvat-zrqvhz";a:2:{i:0;R:42301;i:1;R:40466;}s:38:"1232:cyo-cebcregl-rqvgbe-fcnpvat-ynetr";a:2:{i:0;R:42301;i:1;R:40466;}s:39:"1232:cyo-cebcregl-rqvgbe-inyhr-erdhverq";a:2:{i:0;R:42301;i:1;R:40466;}s:32:"1232:cyo-cebcregl-rqvgbe-pncgvba";a:2:{i:0;R:42301;i:1;R:40466;}s:37:"1232:cyo-cebcregl-rqvgbe-vafgehpgvbaf";a:2:{i:0;R:42301;i:1;R:40466;}s:33:"1232:cyo-cebcregl-rqvgbe-erdhverq";a:2:{i:0;R:42301;i:1;R:40466;}s:34:"1232:cyo-cebcregl-rqvgbe-nyvtazrag";a:2:{i:0;R:42301;i:1;R:40466;}s:39:"1232:cyo-cebcregl-rqvgbe-nyvtazrag-yrsg";a:2:{i:0;R:42301;i:1;R:40466;}s:41:"1232:cyo-cebcregl-rqvgbe-nyvtazrag-pragre";a:2:{i:0;R:42301;i:1;R:40466;}s:40:"1232:cyo-cebcregl-rqvgbe-nyvtazrag-evtug";a:2:{i:0;R:42301;i:1;R:40466;}s:38:"1232:cyo-cebcregl-rqvgbe-znkvzhz-jvqgu";a:2:{i:0;R:42301;i:1;R:40466;}s:34:"1232:cyo-cebcregl-rqvgbe-guhzoanvy";a:2:{i:0;R:42301;i:1;R:40466;}s:32:"1232:cyo-cebcregl-rqvgbe-pubvprf";a:2:{i:0;R:42301;i:1;R:40466;}s:29:"1232:cyo-cebcregl-rqvgbe-fnir";a:2:{i:0;R:42301;i:1;R:40466;}s:31:"1232:cyo-cebcregl-rqvgbe-pnapry";a:2:{i:0;R:42301;i:1;R:40466;}s:21:"1232:cyo-zlgbbyf-yvax";a:2:{i:0;R:42301;i:1;R:40466;}s:36:"1232:cyo-cnefre-tnyyrel-fvmr-abg-vag";a:2:{i:0;R:42301;i:1;R:40466;}s:38:"1232:cyo-cnefre-tnyyrel-fvmr-gbb-fznyy";a:2:{i:0;R:42301;i:1;R:40466;}s:36:"1232:cyo-cnefre-tnyyrel-fvmr-gbb-ovt";a:2:{i:0;R:42301;i:1;R:40466;}s:41:"1232:cyo-cnefre-tnyyrel-vapbeerpg-fcnpvat";a:2:{i:0;R:42301;i:1;R:40466;}s:39:"1232:cyo-cnefre-tnyyrel-vapbeerpg-nyvta";a:2:{i:0;R:42301;i:1;R:40466;}s:37:"1232:cyo-cebcregl-rqvgbe-uryc-pncgvba";a:2:{i:0;R:42301;i:1;R:40466;}s:42:"1232:cyo-cebcregl-rqvgbe-uryc-vafgehpgvbaf";a:2:{i:0;R:42301;i:1;R:40466;}s:38:"1232:cyo-cebcregl-rqvgbe-uryc-erdhverq";a:2:{i:0;R:42301;i:1;R:40466;}s:39:"1232:cyo-cebcregl-rqvgbe-uryc-nyvtazrag";a:2:{i:0;R:42301;i:1;R:40466;}s:43:"1232:cyo-cebcregl-rqvgbe-uryc-znkvzhz-jvqgu";a:2:{i:0;R:42301;i:1;R:40466;}s:39:"1232:cyo-cebcregl-rqvgbe-uryc-guhzoanvy";a:2:{i:0;R:42301;i:1;R:40466;}s:37:"1232:cyo-cebcregl-rqvgbe-uryc-pubvprf";a:2:{i:0;R:42301;i:1;R:40466;}s:37:"1232:cyo-cebcregl-rqvgbe-uryc-fcnpvat";a:2:{i:0;R:42301;i:1;R:40466;}s:22:"1232:cyo-urycobk-gvgyr";a:2:{i:0;R:42301;i:1;R:40466;}s:26:"1232:cyo-urycobk-znxrfrafr";a:2:{i:0;R:42301;i:1;R:40466;}s:27:"1232:cyo-urycobk-trgfgnegrq";a:2:{i:0;R:42301;i:1;R:40466;}s:25:"1232:cyo-urycobk-qbagfubj";a:2:{i:0;R:42301;i:1;R:40466;}s:31:"1232:cyo-urycobk-ovtvzntr-gvgyr";a:2:{i:0;R:42301;i:1;R:40466;}s:30:"1232:cyo-urycobk-ovtvzntr-qrfp";a:2:{i:0;R:42301;i:1;R:40466;}s:30:"1232:cyo-urycobk-ohgggba-urnq1";a:2:{i:0;R:42301;i:1;R:40466;}s:30:"1232:cyo-urycobk-ohgggba-urnq2";a:2:{i:0;R:42301;i:1;R:40466;}s:30:"1232:cyo-urycobk-purpxobkvasb1";a:2:{i:0;R:42301;i:1;R:40466;}s:21:"1232:cyo-urycobk-obk1";a:2:{i:0;R:42301;i:1;R:40466;}s:21:"1232:cyo-urycobk-obk2";a:2:{i:0;R:42301;i:1;R:40466;}s:21:"1232:cyo-urycobk-obk3";a:2:{i:0;R:42301;i:1;R:40466;}s:34:"1232:cyo-urycobk-uryc-ohggba-urnq3";a:2:{i:0;R:42301;i:1;R:40466;}s:30:"1232:cyo-urycobk-purpxobkvasb2";a:2:{i:0;R:42301;i:1;R:40466;}s:26:"1232:cyo-urycobk-uryc-qrfp";a:2:{i:0;R:42301;i:1;R:40466;}s:26:"1232:cyo-urycobk-uryc-yvax";a:2:{i:0;R:42301;i:1;R:40466;}s:32:"1232:cyo-urycobk-uryc-yvax-gvgyr";a:2:{i:0;R:42301;i:1;R:40466;}s:25:"1232:cyo-yvfg-npgvba-pbcl";a:2:{i:0;R:42301;i:1;R:40466;}s:21:"1232:cyo-pbcl-pbasvez";a:2:{i:0;R:42301;i:1;R:40466;}s:25:"1232:cyo-pbcl-qryrgr-yvax";a:2:{i:0;R:42301;i:1;R:40466;}s:21:"1232:cyo-pbcl-png-nqq";a:2:{i:0;R:42301;i:1;R:40466;}s:25:"1232:cyo-pbcl-fhozvg-yvax";a:2:{i:0;R:42301;i:1;R:40466;}s:42:"1232:jvxvn-rqvgbe-zbqhyrf-cyo-vafreg-gvgyr";a:2:{i:0;R:42301;i:1;R:40466;}s:40:"1232:jvxvn-rqvgbe-zbqhyrf-cyo-yvfg-gvgyr";a:2:{i:0;R:42301;i:1;R:40466;}s:46:"1232:jvxvn-rqvgbe-zbqhyrf-cyo-yvfg-gvgyr-pbhag";a:2:{i:0;R:42301;i:1;R:40466;}s:41:"1232:jvxvn-rqvgbe-cyo-fubj-fgngvp-ohggbaf";a:2:{i:0;R:42301;i:1;R:40466;}s:19:"1232:cntvangbe-arkg";a:2:{i:0;s:15:"wikia-paginator";i:1;R:40466;}s:19:"1232:cntvangbe-onpx";a:2:{i:0;R:42476;i:1;R:40466;}s:42:"1232:cnegare-srrq-npuvrirzragf-yrnqreobneq";a:2:{i:0;s:17:"wikia-partnerfeed";i:1;R:40466;}s:31:"1232:cnegare-srrq-rnearq-onqtrf";a:2:{i:0;R:42479;i:1;R:40466;}s:35:"1232:cnegare-srrq-erprag-oybt-cbfgf";a:2:{i:0;R:42479;i:1;R:40466;}s:31:"1232:cnegare-srrq-yngrfg-vzntrf";a:2:{i:0;R:42479;i:1;R:40466;}s:28:"1232:cnegare-srrq-ubgpbagrag";a:2:{i:0;R:42479;i:1;R:40466;}s:38:"1232:cnegare-srrq-erprag-oybt-pbzzragf";a:2:{i:0;R:42479;i:1;R:40466;}s:32:"1232:cnegare-srrq-erprag-punatrf";a:2:{i:0;R:42479;i:1;R:40466;}s:16:"1232:cnegaresrrq";a:2:{i:0;R:42479;i:1;R:40466;}s:21:"1232:reebe-ab-negvpyr";a:2:{i:0;R:42479;i:1;R:40466;}s:25:"1232:srrq-gvgyr-oybtcbfgf";a:2:{i:0;R:42479;i:1;R:40466;}s:29:"1232:srrq-gvgyr-erprag-onqtrf";a:2:{i:0;R:42479;i:1;R:40466;}s:29:"1232:srrq-gvgyr-erprag-vzntrf";a:2:{i:0;R:42479;i:1;R:40466;}s:27:"1232:srrq-gvgyr-yrnqreobneq";a:2:{i:0;R:42479;i:1;R:40466;}s:20:"1232:srrq-znva-gvgyr";a:2:{i:0;R:42479;i:1;R:40466;}s:19:"1232:nyy-oybt-cbfgf";a:2:{i:0;R:42479;i:1;R:40466;}s:28:"1232:oybt-cbfgf-sebz-yvfgvat";a:2:{i:0;R:42479;i:1;R:40466;}s:27:"1232:srrq-gvgyr-ubg-pbagrag";a:2:{i:0;R:42479;i:1;R:40466;}s:28:"1232:srrq-gvgyr-oybtpbzzragf";a:2:{i:0;R:42479;i:1;R:40466;}s:29:"1232:srrq-gvgyr-erpragpunatrf";a:2:{i:0;R:42479;i:1;R:40466;}s:17:"1232:cunynak-qrfp";a:2:{i:0;s:13:"wikia-phalanx";i:1;R:40466;}s:12:"1232:cunynak";a:2:{i:0;R:42499;i:1;R:40466;}s:18:"1232:cunynak-gvgyr";a:2:{i:0;R:42499;i:1;R:40466;}s:25:"1232:cunynak-glcr-pbagrag";a:2:{i:0;R:42499;i:1;R:40466;}s:25:"1232:cunynak-glcr-fhzznel";a:2:{i:0;R:42499;i:1;R:40466;}s:23:"1232:cunynak-glcr-gvgyr";a:2:{i:0;R:42499;i:1;R:40466;}s:22:"1232:cunynak-glcr-hfre";a:2:{i:0;R:42499;i:1;R:40466;}s:28:"1232:cunynak-glcr-hfre-rznvy";a:2:{i:0;R:42499;i:1;R:40466;}s:40:"1232:cunynak-glcr-nafjref-dhrfgvba-gvgyr";a:2:{i:0;R:42499;i:1;R:40466;}s:42:"1232:cunynak-glcr-nafjref-erprag-dhrfgvbaf";a:2:{i:0;R:42499;i:1;R:40466;}s:31:"1232:cunynak-glcr-jvxv-perngvba";a:2:{i:0;R:42499;i:1;R:40466;}s:22:"1232:cunynak-nqq-oybpx";a:2:{i:0;R:42499;i:1;R:40466;}s:23:"1232:cunynak-rqvg-oybpx";a:2:{i:0;R:42499;i:1;R:40466;}s:25:"1232:cunynak-ynory-svygre";a:2:{i:0;R:42499;i:1;R:40466;}s:25:"1232:cunynak-ynory-ernfba";a:2:{i:0;R:42499;i:1;R:40466;}s:25:"1232:cunynak-ynory-rkcvel";a:2:{i:0;R:42499;i:1;R:40466;}s:23:"1232:cunynak-ynory-glcr";a:2:{i:0;R:42499;i:1;R:40466;}s:23:"1232:cunynak-ynory-ynat";a:2:{i:0;R:42499;i:1;R:40466;}s:22:"1232:cunynak-ivrj-glcr";a:2:{i:0;R:42499;i:1;R:40466;}s:25:"1232:cunynak-ivrj-oybpxre";a:2:{i:0;R:42499;i:1;R:40466;}s:24:"1232:cunynak-ivrj-oybpxf";a:2:{i:0;R:42499;i:1;R:40466;}s:20:"1232:cunynak-ivrj-vq";a:2:{i:0;R:42499;i:1;R:40466;}s:27:"1232:cunynak-ivrj-vq-fhozvg";a:2:{i:0;R:42499;i:1;R:40466;}s:29:"1232:cunynak-rkcver-qhengvbaf";a:2:{i:0;R:42499;i:1;R:40466;}s:24:"1232:cunynak-sbezng-grkg";a:2:{i:0;R:42499;i:1;R:40466;}s:25:"1232:cunynak-sbezng-ertrk";a:2:{i:0;R:42499;i:1;R:40466;}s:24:"1232:cunynak-sbezng-pnfr";a:2:{i:0;R:42499;i:1;R:40466;}s:25:"1232:cunynak-sbezng-rknpg";a:2:{i:0;R:42499;i:1;R:40466;}s:21:"1232:cunynak-gno-znva";a:2:{i:0;R:42499;i:1;R:40466;}s:26:"1232:cunynak-gno-frpbaqnel";a:2:{i:0;R:42499;i:1;R:40466;}s:26:"1232:cunynak-oybpx-fhpprff";a:2:{i:0;R:42499;i:1;R:40466;}s:26:"1232:cunynak-oybpx-snvyher";a:2:{i:0;R:42499;i:1;R:40466;}s:27:"1232:cunynak-zbqvsl-fhpprff";a:2:{i:0;R:42499;i:1;R:40466;}s:27:"1232:cunynak-zbqvsl-snvyher";a:2:{i:0;R:42499;i:1;R:40466;}s:27:"1232:cunynak-zbqvsl-jneavat";a:2:{i:0;R:42499;i:1;R:40466;}s:29:"1232:cunynak-grfg-qrfpevcgvba";a:2:{i:0;R:42499;i:1;R:40466;}s:24:"1232:cunynak-grfg-fhozvg";a:2:{i:0;R:42499;i:1;R:40466;}s:32:"1232:cunynak-grfg-erfhygf-yrtraq";a:2:{i:0;R:42499;i:1;R:40466;}s:31:"1232:cunynak-qvfcynl-ebj-oybpxf";a:2:{i:0;R:42499;i:1;R:40466;}s:32:"1232:cunynak-qvfcynl-ebj-perngrq";a:2:{i:0;R:42499;i:1;R:40466;}s:25:"1232:cunynak-yvax-haoybpx";a:2:{i:0;R:42499;i:1;R:40466;}s:24:"1232:cunynak-yvax-zbqvsl";a:2:{i:0;R:42499;i:1;R:40466;}s:23:"1232:cunynak-yvax-fgngf";a:2:{i:0;R:42499;i:1;R:40466;}s:23:"1232:cunynak-erfrg-sbez";a:2:{i:0;R:42499;i:1;R:40466;}s:25:"1232:cunynak-yrtraq-vachg";a:2:{i:0;R:42499;i:1;R:40466;}s:27:"1232:cunynak-yrtraq-yvfgvat";a:2:{i:0;R:42499;i:1;R:40466;}s:28:"1232:cunynak-haoybpx-zrffntr";a:2:{i:0;R:42499;i:1;R:40466;}s:30:"1232:cunynak-uryc-glcr-pbagrag";a:2:{i:0;R:42499;i:1;R:40466;}s:30:"1232:cunynak-uryc-glcr-fhzznel";a:2:{i:0;R:42499;i:1;R:40466;}s:28:"1232:cunynak-uryc-glcr-gvgyr";a:2:{i:0;R:42499;i:1;R:40466;}s:27:"1232:cunynak-uryc-glcr-hfre";a:2:{i:0;R:42499;i:1;R:40466;}s:36:"1232:cunynak-uryc-glcr-jvxv-perngvba";a:2:{i:0;R:42499;i:1;R:40466;}s:45:"1232:cunynak-uryc-glcr-nafjref-dhrfgvba-gvgyr";a:2:{i:0;R:42499;i:1;R:40466;}s:47:"1232:cunynak-uryc-glcr-nafjref-erprag-dhrfgvbaf";a:2:{i:0;R:42499;i:1;R:40466;}s:33:"1232:cunynak-uryc-glcr-hfre-rznvy";a:2:{i:0;R:42499;i:1;R:40466;}s:33:"1232:cunynak-hfre-oybpx-ernfba-vc";a:2:{i:0;R:42499;i:1;R:40466;}s:36:"1232:cunynak-hfre-oybpx-ernfba-rknpg";a:2:{i:0;R:42499;i:1;R:40466;}s:38:"1232:cunynak-hfre-oybpx-ernfba-fvzvyne";a:2:{i:0;R:42499;i:1;R:40466;}s:35:"1232:cunynak-hfre-oybpx-arj-nppbhag";a:2:{i:0;R:42499;i:1;R:40466;}s:37:"1232:cunynak-hfre-oybpx-jvguernfba-vc";a:2:{i:0;R:42499;i:1;R:40466;}s:40:"1232:cunynak-hfre-oybpx-jvguernfba-rknpg";a:2:{i:0;R:42499;i:1;R:40466;}s:42:"1232:cunynak-hfre-oybpx-jvguernfba-fvzvyne";a:2:{i:0;R:42499;i:1;R:40466;}s:31:"1232:cunynak-gvgyr-zbir-fhzznel";a:2:{i:0;R:42499;i:1;R:40466;}s:33:"1232:cunynak-pbagrag-fcnz-fhzznel";a:2:{i:0;R:42499;i:1;R:40466;}s:24:"1232:cunynak-fgngf-gvgyr";a:2:{i:0;R:42499;i:1;R:40466;}s:33:"1232:cunynak-fgngf-oybpx-abgsbhaq";a:2:{i:0;R:42499;i:1;R:40466;}s:27:"1232:cunynak-fgngf-gnoyr-vq";a:2:{i:0;R:42499;i:1;R:40466;}s:29:"1232:cunynak-fgngf-gnoyr-hfre";a:2:{i:0;R:42499;i:1;R:40466;}s:29:"1232:cunynak-fgngf-gnoyr-glcr";a:2:{i:0;R:42499;i:1;R:40466;}s:31:"1232:cunynak-fgngf-gnoyr-perngr";a:2:{i:0;R:42499;i:1;R:40466;}s:31:"1232:cunynak-fgngf-gnoyr-rkcver";a:2:{i:0;R:42499;i:1;R:40466;}s:30:"1232:cunynak-fgngf-gnoyr-rknpg";a:2:{i:0;R:42499;i:1;R:40466;}s:30:"1232:cunynak-fgngf-gnoyr-ertrk";a:2:{i:0;R:42499;i:1;R:40466;}s:29:"1232:cunynak-fgngf-gnoyr-pnfr";a:2:{i:0;R:42499;i:1;R:40466;}s:33:"1232:cunynak-fgngf-gnoyr-ynathntr";a:2:{i:0;R:42499;i:1;R:40466;}s:29:"1232:cunynak-fgngf-gnoyr-grkg";a:2:{i:0;R:42499;i:1;R:40466;}s:31:"1232:cunynak-fgngf-gnoyr-ernfba";a:2:{i:0;R:42499;i:1;R:40466;}s:22:"1232:cunynak-fgngf-ebj";a:2:{i:0;R:42499;i:1;R:40466;}s:31:"1232:cunynak-fgngf-ebj-cre-jvxv";a:2:{i:0;R:42499;i:1;R:40466;}s:26:"1232:cunynak-ehyr-ybt-anzr";a:2:{i:0;R:42499;i:1;R:40466;}s:28:"1232:cunynak-ehyr-ybt-urnqre";a:2:{i:0;R:42499;i:1;R:40466;}s:32:"1232:cunynak-rznvy-ehyr-ybt-anzr";a:2:{i:0;R:42499;i:1;R:40466;}s:34:"1232:cunynak-rznvy-ehyr-ybt-urnqre";a:2:{i:0;R:42499;i:1;R:40466;}s:25:"1232:cunynak-ehyr-ybt-nqq";a:2:{i:0;R:42499;i:1;R:40466;}s:26:"1232:cunynak-ehyr-ybt-rqvg";a:2:{i:0;R:42499;i:1;R:40466;}s:28:"1232:cunynak-ehyr-ybt-qryrgr";a:2:{i:0;R:42499;i:1;R:40466;}s:29:"1232:cunynak-ehyr-ybt-qrgnvyf";a:2:{i:0;R:42499;i:1;R:40466;}s:32:"1232:cunynak-fgngf-gnoyr-jvxv-vq";a:2:{i:0;R:42499;i:1;R:40466;}s:34:"1232:cunynak-fgngf-gnoyr-jvxv-anzr";a:2:{i:0;R:42499;i:1;R:40466;}s:33:"1232:cunynak-fgngf-gnoyr-jvxv-hey";a:2:{i:0;R:42499;i:1;R:40466;}s:41:"1232:cunynak-fgngf-gnoyr-jvxv-ynfg-rqvgrq";a:2:{i:0;R:42499;i:1;R:40466;}s:32:"1232:cunynak-rznvy-svygre-uvqqra";a:2:{i:0;R:42499;i:1;R:40466;}s:18:"1232:evtug-cunynak";a:2:{i:0;R:42499;i:1;R:40466;}s:24:"1232:evtug-cunynakrkrzcg";a:2:{i:0;R:42499;i:1;R:40466;}s:28:"1232:evtug-cunynakrznvyoybpx";a:2:{i:0;R:42499;i:1;R:40466;}s:25:"1232:cubgbcbc-frghc-gvgyr";a:2:{i:0;s:14:"wikia-photopop";i:1;R:40466;}s:34:"1232:cubgbcbc-frghc-pngrtbel-ynory";a:2:{i:0;R:42595;i:1;R:40466;}s:32:"1232:cubgbcbc-frghc-pngrtbel-gvc";a:2:{i:0;R:42595;i:1;R:40466;}s:30:"1232:cubgbcbc-frghc-vpba-ynory";a:2:{i:0;R:42595;i:1;R:40466;}s:28:"1232:cubgbcbc-frghc-vpba-gvc";a:2:{i:0;R:42595;i:1;R:40466;}s:35:"1232:cubgbcbc-frghc-jngreznex-ynory";a:2:{i:0;R:42595;i:1;R:40466;}s:33:"1232:cubgbcbc-frghc-jngreznex-gvc";a:2:{i:0;R:42595;i:1;R:40466;}s:32:"1232:cubgbcbc-frghc-fhozvg-ynory";a:2:{i:0;R:42595;i:1;R:40466;}s:36:"1232:cubgbcbc-pheerag-frggvatf-gvgyr";a:2:{i:0;R:42595;i:1;R:40466;}s:26:"1232:cubgcbc-pngrtbel-abar";a:2:{i:0;R:42595;i:1;R:40466;}s:41:"1232:cubgbcbc-reebe-pngrtbel-aba-rkvfgvat";a:2:{i:0;R:42595;i:1;R:40466;}s:36:"1232:cubgbcbc-reebe-svryq-pbzchyfbel";a:2:{i:0;R:42595;i:1;R:40466;}s:37:"1232:cubgbcbc-reebe-svyr-aba-rkvfgvat";a:2:{i:0;R:42595;i:1;R:40466;}s:28:"1232:cubgbcbc-reebe-qo-reebe";a:2:{i:0;R:42595;i:1;R:40466;}s:28:"1232:cubgbcbc-frggvatf-fnirq";a:2:{i:0;R:42595;i:1;R:40466;}s:27:"1232:cubgbcbc-vzntr-cerivrj";a:2:{i:0;R:42595;i:1;R:40466;}s:24:"1232:cubgbcbc-tnzr-ebhaq";a:2:{i:0;R:42595;i:1;R:40466;}s:26:"1232:cubgbcbc-tnzr-pbeerpg";a:2:{i:0;R:42595;i:1;R:40466;}s:25:"1232:cubgbcbc-tnzr-cbvagf";a:2:{i:0;R:42595;i:1;R:40466;}s:24:"1232:cubgbcbc-tnzr-gbgny";a:2:{i:0;R:42595;i:1;R:40466;}s:24:"1232:cubgbcbc-tnzr-fpber";a:2:{i:0;R:42595;i:1;R:40466;}s:23:"1232:cubgbcbc-tnzr-jvxv";a:2:{i:0;R:42595;i:1;R:40466;}s:23:"1232:cubgbcbc-tnzr-qngr";a:2:{i:0;R:42595;i:1;R:40466;}s:25:"1232:cubgbcbc-tnzr-gvzrhc";a:2:{i:0;R:42595;i:1;R:40466;}s:30:"1232:cubgbcbc-tnzr-cyrnfr-jnvg";a:2:{i:0;R:42595;i:1;R:40466;}s:32:"1232:cubgbcbc-tnzr-ybnqvat-vzntr";a:2:{i:0;R:42595;i:1;R:40466;}s:26:"1232:cubgbcbc-tnzr-ybnqvat";a:2:{i:0;R:42595;i:1;R:40466;}s:28:"1232:cubgbcbc-tnzr-uvtufpber";a:2:{i:0;R:42595;i:1;R:40466;}s:29:"1232:cubgbcbc-tnzr-uvtufpberf";a:2:{i:0;R:42595;i:1;R:40466;}s:27:"1232:cubgbcbc-tnzr-pbagvahr";a:2:{i:0;R:42595;i:1;R:40466;}s:25:"1232:cubgbcbc-tnzr-lbhtbg";a:2:{i:0;R:42595;i:1;R:40466;}s:24:"1232:cubgbcbc-tnzr-bhgbs";a:2:{i:0;R:42595;i:1;R:40466;}s:27:"1232:cubgbcbc-tnzr-cebterff";a:2:{i:0;R:42595;i:1;R:40466;}s:27:"1232:cubgbcbc-tnzr-svavfurq";a:2:{i:0;R:42595;i:1;R:40466;}s:35:"1232:cubgbcbc-tnzr-vzntr-ybnq-reebe";a:2:{i:0;R:42595;i:1;R:40466;}s:33:"1232:cubgbcbc-tnzr-ghgbevny-vageb";a:2:{i:0;R:42595;i:1;R:40466;}s:36:"1232:cubgbcbc-tnzr-ghgbevny-pbagvahr";a:2:{i:0;R:42595;i:1;R:40466;}s:34:"1232:cubgbcbc-tnzr-ghgbevny-qenjre";a:2:{i:0;R:42595;i:1;R:40466;}s:32:"1232:cubgbcbc-tnzr-ghgbevny-gvyr";a:2:{i:0;R:42595;i:1;R:40466;}s:32:"1232:cubgbcbc-tnzr-arj-uvtufpber";a:2:{i:0;R:42595;i:1;R:40466;}s:25:"1232:cubgbcbc-tnzr-cnhfrq";a:2:{i:0;R:42595;i:1;R:40466;}s:33:"1232:cubgbcbc-tnzr-ybnqvat-nffrgf";a:2:{i:0;R:42595;i:1;R:40466;}s:26:"1232:cubgbcbc-tnzr-zbagu-0";a:2:{i:0;R:42595;i:1;R:40466;}s:26:"1232:cubgbcbc-tnzr-zbagu-1";a:2:{i:0;R:42595;i:1;R:40466;}s:26:"1232:cubgbcbc-tnzr-zbagu-2";a:2:{i:0;R:42595;i:1;R:40466;}s:26:"1232:cubgbcbc-tnzr-zbagu-3";a:2:{i:0;R:42595;i:1;R:40466;}s:26:"1232:cubgbcbc-tnzr-zbagu-4";a:2:{i:0;R:42595;i:1;R:40466;}s:26:"1232:cubgbcbc-tnzr-zbagu-5";a:2:{i:0;R:42595;i:1;R:40466;}s:26:"1232:cubgbcbc-tnzr-zbagu-6";a:2:{i:0;R:42595;i:1;R:40466;}s:26:"1232:cubgbcbc-tnzr-zbagu-7";a:2:{i:0;R:42595;i:1;R:40466;}s:26:"1232:cubgbcbc-tnzr-zbagu-8";a:2:{i:0;R:42595;i:1;R:40466;}s:26:"1232:cubgbcbc-tnzr-zbagu-9";a:2:{i:0;R:42595;i:1;R:40466;}s:27:"1232:cubgbcbc-tnzr-zbagu-10";a:2:{i:0;R:42595;i:1;R:40466;}s:27:"1232:cubgbcbc-tnzr-zbagu-11";a:2:{i:0;R:42595;i:1;R:40466;}s:31:"1232:cubgbcbc-tnzr-ab-uvtufpber";a:2:{i:0;R:42595;i:1;R:40466;}s:29:"1232:cubgbcbc-tnzr-reebe-grkg";a:2:{i:0;R:42595;i:1;R:40466;}s:37:"1232:cubgbcbc-tnzr-reebe-argjbex-grkg";a:2:{i:0;R:42595;i:1;R:40466;}s:41:"1232:cubgbcbc-tnzr-qbjaybnq-cebterff-grkg";a:2:{i:0;R:42595;i:1;R:40466;}s:39:"1232:cubgbcbc-tnzr-hcqngr-cebterff-grkg";a:2:{i:0;R:42595;i:1;R:40466;}s:38:"1232:cubgbcbc-tnzr-qbjaybnq-reebe-grkg";a:2:{i:0;R:42595;i:1;R:40466;}s:18:"1232:cvttlonp-qrfp";a:2:{i:0;s:15:"wikia-piggyback";i:1;R:40466;}s:14:"1232:cvttlonpx";a:2:{i:0;R:42656;i:1;R:40466;}s:28:"1232:cvttlonpx-bgurehfreanzr";a:2:{i:0;R:42656;i:1;R:40466;}s:25:"1232:cvttlonpx-abfhpuhfre";a:2:{i:0;R:42656;i:1;R:40466;}s:24:"1232:cvttlonpx-jebathfre";a:2:{i:0;R:42656;i:1;R:40466;}s:26:"1232:cvttlonpx-ybtvacebzcg";a:2:{i:0;R:42656;i:1;R:40466;}s:26:"1232:cvttlonpx-svefgybtbhg";a:2:{i:0;R:42656;i:1;R:40466;}s:22:"1232:cvttlonpx-vgvflbh";a:2:{i:0;R:42656;i:1;R:40466;}s:24:"1232:cvttlonpx-vfflfbcgb";a:2:{i:0;R:42656;i:1;R:40466;}s:11:"1232:cynprf";a:2:{i:0;s:12:"wikia-places";i:1;R:40466;}s:16:"1232:cynprf-qrfp";a:2:{i:0;R:42666;i:1;R:40466;}s:23:"1232:cynprf-va-pngrtbel";a:2:{i:0;R:42666;i:1;R:40466;}s:18:"1232:cynprf-ba-znc";a:2:{i:0;R:42666;i:1;R:40466;}s:31:"1232:cynprf-zbqny-tb-gb-fcrpvny";a:2:{i:0;R:42666;i:1;R:40466;}s:34:"1232:cynprf-gbbyone-ohggba-gbbygvc";a:2:{i:0;R:42666;i:1;R:40466;}s:34:"1232:cynprf-gbbyone-ohggba-nqqerff";a:2:{i:0;R:42666;i:1;R:40466;}s:25:"1232:cynprf-rqvgbe-frnepu";a:2:{i:0;R:42666;i:1;R:40466;}s:35:"1232:cynprf-rqvgbe-gvgyr-perngr-arj";a:2:{i:0;R:42666;i:1;R:40466;}s:29:"1232:cynprf-rqvgbe-gvgyr-rqvg";a:2:{i:0;R:42666;i:1;R:40466;}s:35:"1232:cynprf-rqvgbe-fubj-zl-ybpngvba";a:2:{i:0;R:42666;i:1;R:40466;}s:30:"1232:cynprf-rqvgbe-trbcbfvgvba";a:2:{i:0;R:42666;i:1;R:40466;}s:36:"1232:cynprf-trbybpngvba-ohggba-ynory";a:2:{i:0;R:42666;i:1;R:40466;}s:39:"1232:cynprf-trbybpngvba-zbqny-nqq-gvgyr";a:2:{i:0;R:42666;i:1;R:40466;}s:41:"1232:cynprf-trbybpngvba-zbqny-reebe-gvgyr";a:2:{i:0;R:42666;i:1;R:40466;}s:35:"1232:cynprf-trbybpngvba-zbqny-reebe";a:2:{i:0;R:42666;i:1;R:40466;}s:43:"1232:cynprf-trbybpngvba-zbqny-abg-ninvynoyr";a:2:{i:0;R:42666;i:1;R:40466;}s:28:"1232:cynprf-reebe-ab-negvpyr";a:2:{i:0;R:42666;i:1;R:40466;}s:38:"1232:cynprf-reebe-cynpr-nyernql-rkvfgf";a:2:{i:0;R:42666;i:1;R:40466;}s:31:"1232:cynprf-hcqngrq-trbybpngvba";a:2:{i:0;R:42666;i:1;R:40466;}s:27:"1232:cynprf-pngrtbel-fjvgpu";a:2:{i:0;R:42666;i:1;R:40466;}s:31:"1232:cynprf-pngrtbel-fjvgpu-bss";a:2:{i:0;R:42666;i:1;R:40466;}s:21:"1232:dhvpxperngr-qrfp";a:2:{i:0;s:17:"wikia-quickcreate";i:1;R:40466;}s:16:"1232:dhvpxperngr";a:2:{i:0;R:42689;i:1;R:40466;}s:20:"1232:enaqbzjvxv-qrfp";a:2:{i:0;s:16:"wikia-randomwiki";i:1;R:40466;}s:15:"1232:enaqbzjvxv";a:2:{i:0;R:42692;i:1;R:40466;}s:27:"1232:jvxvneryngrqcntrf-qrfp";a:2:{i:0;s:18:"wikia-relatedpages";i:1;R:40466;}s:30:"1232:jvxvneryngrqcntrf-urnqvat";a:2:{i:0;R:42695;i:1;R:40466;}s:25:"1232:eryngrq-ivqrbf-gnyyl";a:2:{i:0;s:19:"wikia-relatedvideos";i:1;R:40466;}s:33:"1232:eryngrq-ivqrbf-gnyyl-negvpyr";a:2:{i:0;R:42698;i:1;R:40466;}s:28:"1232:eryngrq-ivqrbf-nqqrq-ol";a:2:{i:0;R:42698;i:1;R:40466;}s:26:"1232:eryngrq-ivqrbf-erzbir";a:2:{i:0;R:42698;i:1;R:40466;}s:29:"1232:eryngrq-ivqrbf-nqq-ivqrb";a:2:{i:0;R:42698;i:1;R:40466;}s:34:"1232:eryngrq-ivqrbf-yrnir-srrqonpx";a:2:{i:0;R:42698;i:1;R:40466;}s:42:"1232:eryngrq-ivqrbf-nqq-ivqrb-gb-guvf-cntr";a:2:{i:0;R:42698;i:1;R:40466;}s:32:"1232:eryngrq-ivqrbq-nqq-ivqrb-bx";a:2:{i:0;R:42698;i:1;R:40466;}s:40:"1232:eryngrq-ivqrbq-nqq-ivqrb-ynory-anzr";a:2:{i:0;R:42698;i:1;R:40466;}s:39:"1232:eryngrq-ivqrbq-nqq-ivqrb-ynory-nyy";a:2:{i:0;R:42698;i:1;R:40466;}s:43:"1232:eryngrq-ivqrbf-nqq-ivqrb-reebe-onq-hey";a:2:{i:0;R:42698;i:1;R:40466;}s:47:"1232:eryngrq-ivqrbf-nqq-ivqrb-reebe-abarkvfgvat";a:2:{i:0;R:42698;i:1;R:40466;}s:44:"1232:eryngrq-ivqrbf-nqq-ivqrb-reebe-onq-anzr";a:2:{i:0;R:42698;i:1;R:40466;}s:52:"1232:eryngrq-ivqrbf-nqq-ivqrb-reebe-crezvffvba-ivqrb";a:2:{i:0;R:42698;i:1;R:40466;}s:51:"1232:eryngrq-ivqrbf-nqq-ivqrb-reebe-cebgrpgrq-ivqrb";a:2:{i:0;R:42698;i:1;R:40466;}s:45:"1232:eryngrq-ivqrbf-nqq-ivqrb-reebe-qhcyvpngr";a:2:{i:0;R:42698;i:1;R:40466;}s:33:"1232:eryngrq-ivqrbf-reebe-haxabja";a:2:{i:0;R:42698;i:1;R:40466;}s:44:"1232:eryngrq-ivqrbf-reebe-crezvffvba-negvpyr";a:2:{i:0;R:42698;i:1;R:40466;}s:39:"1232:eryngrq-ivqrbf-reebe-ab-negvpyr-vq";a:2:{i:0;R:42698;i:1;R:40466;}s:38:"1232:eryngrq-ivqrbf-reebe-ab-ivqrb-hey";a:2:{i:0;R:42698;i:1;R:40466;}s:40:"1232:eryngrq-ivqrbf-reebe-ab-ivqrb-gvgyr";a:2:{i:0;R:42698;i:1;R:40466;}s:39:"1232:eryngrq-ivqrbf-reebe-juvyr-ybnqvat";a:2:{i:0;R:42698;i:1;R:40466;}s:26:"1232:eryngrq-ivqrbf-abgvsl";a:2:{i:0;R:42698;i:1;R:40466;}s:40:"1232:eryngrq-ivqrbf-fbzrguvat-jrag-jebat";a:2:{i:0;R:42698;i:1;R:40466;}s:48:"1232:eryngrq-ivqrbf-erzbir-ivqrb-reebe-qhcyvpngr";a:2:{i:0;R:42698;i:1;R:40466;}s:50:"1232:eryngrq-ivqrbf-erzbir-ivqrb-reebe-abarkvfgvat";a:2:{i:0;R:42698;i:1;R:40466;}s:34:"1232:eryngrq-ivqrbf-erzbir-pbasvez";a:2:{i:0;R:42698;i:1;R:40466;}s:31:"1232:eryngrq-ivqrbf-erzbir-pnyy";a:2:{i:0;R:42698;i:1;R:40466;}s:42:"1232:eryngrq-ivqrbf-jvxv-fhzznel-oynpxyvfg";a:2:{i:0;R:42698;i:1;R:40466;}s:42:"1232:eryngrq-ivqrbf-jvxv-fhzznel-juvgryvfg";a:2:{i:0;R:42698;i:1;R:40466;}s:44:"1232:eryngrq-ivqrbf-hcqngr-fhzznel-oynpxyvfg";a:2:{i:0;R:42698;i:1;R:40466;}s:44:"1232:eryngrq-ivqrbf-hcqngr-fhzznel-juvgryvfg";a:2:{i:0;R:42698;i:1;R:40466;}s:31:"1232:eryngrq-ivqrbf-gbbygvc-nqq";a:2:{i:0;R:42698;i:1;R:40466;}s:34:"1232:eryngrq-ivqrbf-gbbygvc-erzbir";a:2:{i:0;R:42698;i:1;R:40466;}s:33:"1232:eryngrq-ivqrbf-gbbygvc-rzorq";a:2:{i:0;R:42698;i:1;R:40466;}s:32:"1232:eryngrq-ivqrbf-orgn-srngher";a:2:{i:0;R:42698;i:1;R:40466;}s:29:"1232:eryngrq-ivqrbf-ercb-anzr";a:2:{i:0;R:42698;i:1;R:40466;}s:30:"1232:eryngrq-ivqrbf-rzorq-grkg";a:2:{i:0;R:42698;i:1;R:40466;}s:32:"1232:eryngrq-ivqrbf-ivqrb-vf-arj";a:2:{i:0;R:42698;i:1;R:40466;}s:30:"1232:eryngrq-ivqrbf-cntvangvba";a:2:{i:0;R:42698;i:1;R:40466;}s:25:"1232:eryngrq-ivqrbf-rzcgl";a:2:{i:0;R:42698;i:1;R:40466;}s:33:"1232:eryngrq-ivqrbf-erdhrfgohggba";a:2:{i:0;R:42698;i:1;R:40466;}s:31:"1232:eryngrq-ivqrbf-erdhrfggrkg";a:2:{i:0;R:42698;i:1;R:40466;}s:13:"1232:egr-qrfp";a:2:{i:0;s:14:"wikia-rte-base";i:1;R:40466;}s:23:"1232:egr-ab-wf-snyyonpx";a:2:{i:0;R:42742;i:1;R:40466;}s:28:"1232:egr-rqtrpnfr-vasb-gvgyr";a:2:{i:0;R:42742;i:1;R:40466;}s:22:"1232:egr-rqtrpnfr-vasb";a:2:{i:0;R:42742;i:1;R:40466;}s:25:"1232:egr-rqtrpnfr-pbzzrag";a:2:{i:0;R:42742;i:1;R:40466;}s:29:"1232:egr-rqtrpnfr-gevcyrpheyf";a:2:{i:0;R:42742;i:1;R:40466;}s:27:"1232:egr-rqtrpnfr-abjlfvjlt";a:2:{i:0;R:42742;i:1;R:40466;}s:37:"1232:egr-rqtrpnfr-pbzcyrk-qrfpevcgvba";a:2:{i:0;R:42742;i:1;R:40466;}s:36:"1232:egr-rqtrpnfr-grzcyngr-jvgu-yvax";a:2:{i:0;R:42742;i:1;R:40466;}s:24:"1232:egr-rqtrpnfr-flagnk";a:2:{i:0;R:42742;i:1;R:40466;}s:33:"1232:egr-rqtrpnfr-vzntr-jvgu-yvax";a:2:{i:0;R:42742;i:1;R:40466;}s:26:"1232:egr-rqtrpnfr-erqverpg";a:2:{i:0;R:42742;i:1;R:40466;}s:33:"1232:egr-rqtrpnfr-grzcyngrvagnoyr";a:2:{i:0;R:42742;i:1;R:40466;}s:31:"1232:egr-rqtrpnfr-hapybfrq-gntf";a:2:{i:0;R:42742;i:1;R:40466;}s:25:"1232:ranoyrevpugrkgrqvgbe";a:2:{i:0;R:42742;i:1;R:40466;}s:36:"1232:egr-ranoyrevpugrkgrqvgbezrffntr";a:2:{i:0;R:42742;i:1;R:40466;}s:25:"1232:egr-svefg-eha-abgvpr";a:2:{i:0;R:42742;i:1;R:40466;}s:14:"1232:cersf-egr";a:2:{i:0;R:42742;i:1;R:40466;}s:33:"1232:egr-px-ohpxrg-grkgnccrnenapr";a:2:{i:0;s:17:"wikia-rte-ckwikia";i:1;R:40466;}s:25:"1232:egr-px-ohpxrg-vafreg";a:2:{i:0;R:42761;i:1;R:40466;}s:27:"1232:egr-px-ohpxrg-pbagebyf";a:2:{i:0;R:42761;i:1;R:40466;}s:31:"1232:egr-px-pbzzragrqvgbe-gvgyr";a:2:{i:0;R:42761;i:1;R:40466;}s:27:"1232:egr-px-reebecbchcgvgyr";a:2:{i:0;R:42761;i:1;R:40466;}s:43:"1232:egr-px-ubirecerivrj-pbqrqryrzrag-vageb";a:2:{i:0;R:42761;i:1;R:40466;}s:43:"1232:egr-px-ubirecerivrj-pbqrqryrzrag-gvgyr";a:2:{i:0;R:42761;i:1;R:40466;}s:38:"1232:egr-px-ubirecerivrj-pbzzrag-vageb";a:2:{i:0;R:42761;i:1;R:40466;}s:38:"1232:egr-px-ubirecerivrj-pbzzrag-gvgyr";a:2:{i:0;R:42761;i:1;R:40466;}s:38:"1232:egr-px-ubirecerivrj-pbasvezqryrgr";a:2:{i:0;R:42761;i:1;R:40466;}s:31:"1232:egr-px-ubirecerivrj-qryrgr";a:2:{i:0;R:42761;i:1;R:40466;}s:29:"1232:egr-px-ubirecerivrj-rqvg";a:2:{i:0;R:42761;i:1;R:40466;}s:42:"1232:egr-px-ubirecerivrj-zrqvn-abgrkvfgvat";a:2:{i:0;R:42761;i:1;R:40466;}s:39:"1232:egr-px-ubirecerivrj-grzcyngr-vageb";a:2:{i:0;R:42761;i:1;R:40466;}s:45:"1232:egr-px-ubirecerivrj-grzcyngr-abgrkvfgvat";a:2:{i:0;R:42761;i:1;R:40466;}s:42:"1232:egr-px-ubirecerivrj-ivqrb-abgrkvfgvat";a:2:{i:0;R:42761;i:1;R:40466;}s:21:"1232:egr-px-vzntr-nqq";a:2:{i:0;R:42761;i:1;R:40466;}s:23:"1232:egr-px-vzntr-cubgb";a:2:{i:0;R:42761;i:1;R:40466;}s:31:"1232:egr-px-vzntr-pbasvezqryrgr";a:2:{i:0;R:42761;i:1;R:40466;}s:36:"1232:egr-px-vzntr-pbasvezqryrgrgvgyr";a:2:{i:0;R:42761;i:1;R:40466;}s:42:"1232:egr-px-vzntrcynprubyqre-pbasvezqryrgr";a:2:{i:0;R:42761;i:1;R:40466;}s:47:"1232:egr-px-vzntrcynprubyqre-pbasvezqryrgrgvgyr";a:2:{i:0;R:42761;i:1;R:40466;}s:36:"1232:egr-px-vzntrcynprubyqre-gbbygvc";a:2:{i:0;R:42761;i:1;R:40466;}s:26:"1232:egr-px-whfgvsl-pragre";a:2:{i:0;R:42761;i:1;R:40466;}s:20:"1232:egr-px-yvax-nqq";a:2:{i:0;R:42761;i:1;R:40466;}s:35:"1232:egr-px-yvax-reebe-onqcntrgvgyr";a:2:{i:0;R:42761;i:1;R:40466;}s:29:"1232:egr-px-yvax-reebe-onqhey";a:2:{i:0;R:42761;i:1;R:40466;}s:28:"1232:egr-px-yvax-reebe-gvgyr";a:2:{i:0;R:42761;i:1;R:40466;}s:34:"1232:egr-px-yvax-rkgreany-yvaxgrkg";a:2:{i:0;R:42761;i:1;R:40466;}s:38:"1232:egr-px-yvax-rkgreany-ahzorerqyvax";a:2:{i:0;R:42761;i:1;R:40466;}s:29:"1232:egr-px-yvax-rkgreany-gno";a:2:{i:0;R:42761;i:1;R:40466;}s:29:"1232:egr-px-yvax-rkgreany-hey";a:2:{i:0;R:42761;i:1;R:40466;}s:34:"1232:egr-px-yvax-vagreany-yvaxgrkg";a:2:{i:0;R:42761;i:1;R:40466;}s:34:"1232:egr-px-yvax-vagreany-cntranzr";a:2:{i:0;R:42761;i:1;R:40466;}s:29:"1232:egr-px-yvax-vagreany-gno";a:2:{i:0;R:42761;i:1;R:40466;}s:22:"1232:egr-px-yvax-gvgyr";a:2:{i:0;R:42761;i:1;R:40466;}s:29:"1232:egr-px-yvax-ynory-gnetrg";a:2:{i:0;R:42761;i:1;R:40466;}s:30:"1232:egr-px-yvax-ynory-qvfcynl";a:2:{i:0;R:42761;i:1;R:40466;}s:31:"1232:egr-px-yvax-ynory-vagreany";a:2:{i:0;R:42761;i:1;R:40466;}s:31:"1232:egr-px-yvax-ynory-rkgreany";a:2:{i:0;R:42761;i:1;R:40466;}s:32:"1232:egr-px-yvax-fgnghf-purpxvat";a:2:{i:0;R:42761;i:1;R:40466;}s:30:"1232:egr-px-yvax-fgnghf-rkvfgf";a:2:{i:0;R:42761;i:1;R:40466;}s:33:"1232:egr-px-yvax-fgnghf-abgrkvfgf";a:2:{i:0;R:42761;i:1;R:40466;}s:32:"1232:egr-px-yvax-fgnghf-rkgreany";a:2:{i:0;R:42761;i:1;R:40466;}s:24:"1232:egr-px-zrqvn-qryrgr";a:2:{i:0;R:42761;i:1;R:40466;}s:22:"1232:egr-px-zrqvn-rqvg";a:2:{i:0;R:42761;i:1;R:40466;}s:31:"1232:egr-px-zbqrfjvgpu-gbfbhepr";a:2:{i:0;R:42761;i:1;R:40466;}s:32:"1232:egr-px-zbqrfjvgpu-gbjlfvjlt";a:2:{i:0;R:42761;i:1;R:40466;}s:38:"1232:egr-px-zbqrfjvgpu-gbfbheprgbbygvc";a:2:{i:0;R:42761;i:1;R:40466;}s:39:"1232:egr-px-zbqrfjvgpu-gbjlfvjltgbbygvc";a:2:{i:0;R:42761;i:1;R:40466;}s:28:"1232:egr-px-zbqrfjvgpu-reebe";a:2:{i:0;R:42761;i:1;R:40466;}s:32:"1232:egr-px-cubgbtnyyrel-tnyyrel";a:2:{i:0;R:42761;i:1;R:40466;}s:34:"1232:egr-px-cubgbtnyyrel-fyvqrfubj";a:2:{i:0;R:42761;i:1;R:40466;}s:31:"1232:egr-px-cubgbtnyyrel-fyvqre";a:2:{i:0;R:42761;i:1;R:40466;}s:35:"1232:egr-px-cubgbtnyyrel-nqqtnyyrel";a:2:{i:0;R:42761;i:1;R:40466;}s:37:"1232:egr-px-cubgbtnyyrel-nqqfyvqrfubj";a:2:{i:0;R:42761;i:1;R:40466;}s:34:"1232:egr-px-cubgbtnyyrel-nqqfyvqre";a:2:{i:0;R:42761;i:1;R:40466;}s:38:"1232:egr-px-cubgbtnyyrel-pbasvezqryrgr";a:2:{i:0;R:42761;i:1;R:40466;}s:43:"1232:egr-px-cubgbtnyyrel-pbasvezqryrgrgvgyr";a:2:{i:0;R:42761;i:1;R:40466;}s:32:"1232:egr-px-cubgbtnyyrel-gbbygvc";a:2:{i:0;R:42761;i:1;R:40466;}s:41:"1232:egr-px-cubgbtnyyrel-gbbygvcfyvqrfubj";a:2:{i:0;R:42761;i:1;R:40466;}s:20:"1232:egr-px-cbyy-nqq";a:2:{i:0;R:42761;i:1;R:40466;}s:21:"1232:egr-px-cbyy-cbyy";a:2:{i:0;R:42761;i:1;R:40466;}s:25:"1232:egr-px-fvtangher-nqq";a:2:{i:0;R:42761;i:1;R:40466;}s:27:"1232:egr-px-fvtangher-ynory";a:2:{i:0;R:42761;i:1;R:40466;}s:29:"1232:egr-px-gnoyr-nyvtaabgfrg";a:2:{i:0;R:42761;i:1;R:40466;}s:29:"1232:egr-px-gnoyr-vainyvqpbyf";a:2:{i:0;R:42761;i:1;R:40466;}s:29:"1232:egr-px-gnoyr-vainyvqebjf";a:2:{i:0;R:42761;i:1;R:40466;}s:32:"1232:egr-px-gnoyr-gbbyonegbbygvc";a:2:{i:0;R:42761;i:1;R:40466;}s:45:"1232:egr-px-grzcyngrqebcqbja-pubbfrnabguregcy";a:2:{i:0;R:42761;i:1;R:40466;}s:41:"1232:egr-px-grzcyngrqebcqbja-fubjhfrqyvfg";a:2:{i:0;R:42761;i:1;R:40466;}s:39:"1232:egr-px-grzcyngrqebcqbja-znxrynlbhg";a:2:{i:0;R:42761;i:1;R:40466;}s:34:"1232:egr-px-grzcyngrqebcqbja-ynory";a:2:{i:0;R:42761;i:1;R:40466;}s:34:"1232:egr-px-grzcyngrqebcqbja-gvgyr";a:2:{i:0;R:42761;i:1;R:40466;}s:40:"1232:egr-px-grzcyngrrqvgbe-qvnybt-oebjfr";a:2:{i:0;R:42761;i:1;R:40466;}s:40:"1232:egr-px-grzcyngrrqvgbe-qvnybt-vafreg";a:2:{i:0;R:42761;i:1;R:40466;}s:44:"1232:egr-px-grzcyngrrqvgbe-qvnybt-zntvpjbeqf";a:2:{i:0;R:42761;i:1;R:40466;}s:48:"1232:egr-px-grzcyngrrqvgbe-qvnybt-zntvpjbeqfyvax";a:2:{i:0;R:42761;i:1;R:40466;}s:52:"1232:egr-px-grzcyngrrqvgbe-qvnybt-zbfgserdhragylhfrq";a:2:{i:0;R:42761;i:1;R:40466;}s:40:"1232:egr-px-grzcyngrrqvgbe-qvnybt-frnepu";a:2:{i:0;R:42761;i:1;R:40466;}s:50:"1232:egr-px-grzcyngrrqvgbe-rqvgbe-pubbfrnabguregcy";a:2:{i:0;R:42761;i:1;R:40466;}s:39:"1232:egr-px-grzcyngrrqvgbe-rqvgbe-vageb";a:2:{i:0;R:42761;i:1;R:40466;}s:44:"1232:egr-px-grzcyngrrqvgbe-rqvgbe-cnenzrgref";a:2:{i:0;R:42761;i:1;R:40466;}s:47:"1232:egr-px-grzcyngrrqvgbe-rqvgbe-cerivrjohggba";a:2:{i:0;R:42761;i:1;R:40466;}s:46:"1232:egr-px-grzcyngrrqvgbe-rqvgbe-cerivrjgvgyr";a:2:{i:0;R:42761;i:1;R:40466;}s:46:"1232:egr-px-grzcyngrrqvgbe-rqvgbe-ivrjgrzcyngr";a:2:{i:0;R:42761;i:1;R:40466;}s:46:"1232:egr-px-grzcyngrrqvgbe-hfrqgrzcyngrf-gvgyr";a:2:{i:0;R:42761;i:1;R:40466;}s:32:"1232:egr-px-grzcyngrrqvgbe-gvgyr";a:2:{i:0;R:42761;i:1;R:40466;}s:18:"1232:egr-px-hayvax";a:2:{i:0;R:42761;i:1;R:40466;}s:21:"1232:egr-px-ivqrb-nqq";a:2:{i:0;R:42761;i:1;R:40466;}s:23:"1232:egr-px-ivqrb-ivqrb";a:2:{i:0;R:42761;i:1;R:40466;}s:31:"1232:egr-px-ivqrb-pbasvezqryrgr";a:2:{i:0;R:42761;i:1;R:40466;}s:36:"1232:egr-px-ivqrb-pbasvezqryrgrgvgyr";a:2:{i:0;R:42761;i:1;R:40466;}s:42:"1232:egr-px-ivqrbcynprubyqre-pbasvezqryrgr";a:2:{i:0;R:42761;i:1;R:40466;}s:47:"1232:egr-px-ivqrbcynprubyqre-pbasvezqryrgrgvgyr";a:2:{i:0;R:42761;i:1;R:40466;}s:36:"1232:egr-px-ivqrbcynprubyqre-gbbygvc";a:2:{i:0;R:42761;i:1;R:40466;}s:29:"1232:egr-px-jvqrfperra-gbttyr";a:2:{i:0;R:42761;i:1;R:40466;}s:30:"1232:egr-px-cbyy-pbasvezqryrgr";a:2:{i:0;R:42761;i:1;R:40466;}s:35:"1232:egr-px-cbyy-pbasvezqryrgrgvgyr";a:2:{i:0;R:42761;i:1;R:40466;}s:40:"1232:egr-px-fcryypurpxre-zberfhttrfgvbaf";a:2:{i:0;R:42761;i:1;R:40466;}s:27:"1232:egr-px-cnfgrgrkg-gvgyr";a:2:{i:0;R:42761;i:1;R:40466;}s:30:"1232:egr-px-pyvcobneq-cnfgrzft";a:2:{i:0;R:42761;i:1;R:40466;}s:24:"1232:egr-px-sbezng-gnt_c";a:2:{i:0;R:42761;i:1;R:40466;}s:26:"1232:egr-px-sbezng-gnt_cer";a:2:{i:0;R:42761;i:1;R:40466;}s:25:"1232:egr-px-sbezng-gnt_u2";a:2:{i:0;R:42761;i:1;R:40466;}s:25:"1232:egr-px-sbezng-gnt_u3";a:2:{i:0;R:42761;i:1;R:40466;}s:25:"1232:egr-px-sbezng-gnt_u4";a:2:{i:0;R:42761;i:1;R:40466;}s:25:"1232:egr-px-sbezng-gnt_u5";a:2:{i:0;R:42761;i:1;R:40466;}s:23:"1232:fpniratreuhag-qrfp";a:2:{i:0;s:19:"wikia-scavengerhunt";i:1;R:40466;}s:18:"1232:fpniratreuhag";a:2:{i:0;R:42870;i:1;R:40466;}s:37:"1232:fpniratreuhag-pbzzba-zbqny-gvgyr";a:2:{i:0;R:42870;i:1;R:40466;}s:35:"1232:fpniratreuhag-yvfg-urnqre-anzr";a:2:{i:0;R:42870;i:1;R:40466;}s:41:"1232:fpniratreuhag-yvfg-urnqre-vf-ranoyrq";a:2:{i:0;R:42870;i:1;R:40466;}s:38:"1232:fpniratreuhag-yvfg-urnqre-npgvbaf";a:2:{i:0;R:42870;i:1;R:40466;}s:31:"1232:fpniratreuhag-yvfg-ranoyrq";a:2:{i:0;R:42870;i:1;R:40466;}s:32:"1232:fpniratreuhag-yvfg-qvfnoyrq";a:2:{i:0;R:42870;i:1;R:40466;}s:28:"1232:fpniratreuhag-yvfg-rqvg";a:2:{i:0;R:42870;i:1;R:40466;}s:37:"1232:fpniratreuhag-ynory-qvnybt-purpx";a:2:{i:0;R:42870;i:1;R:40466;}s:36:"1232:fpniratreuhag-ynory-vzntr-purpx";a:2:{i:0;R:42870;i:1;R:40466;}s:32:"1232:fpniratreuhag-ynory-trareny";a:2:{i:0;R:42870;i:1;R:40466;}s:29:"1232:fpniratreuhag-ynory-anzr";a:2:{i:0;R:42870;i:1;R:40466;}s:38:"1232:fpniratreuhag-ynory-ynaqvat-gvgyr";a:2:{i:0;R:42870;i:1;R:40466;}s:44:"1232:fpniratreuhag-ynory-ynaqvat-ohggba-grkg";a:2:{i:0;R:42870;i:1;R:40466;}s:41:"1232:fpniratreuhag-ynory-ynaqvat-ohggba-k";a:2:{i:0;R:42870;i:1;R:40466;}s:41:"1232:fpniratreuhag-ynory-ynaqvat-ohggba-l";a:2:{i:0;R:42870;i:1;R:40466;}s:38:"1232:fpniratreuhag-ynory-fgnegvat-pyhr";a:2:{i:0;R:42870;i:1;R:40466;}s:44:"1232:fpniratreuhag-ynory-fgnegvat-pyhr-gvgyr";a:2:{i:0;R:42870;i:1;R:40466;}s:43:"1232:fpniratreuhag-ynory-fgnegvat-pyhr-grkg";a:2:{i:0;R:42870;i:1;R:40466;}s:44:"1232:fpniratreuhag-ynory-fgnegvat-pyhr-vzntr";a:2:{i:0;R:42870;i:1;R:40466;}s:50:"1232:fpniratreuhag-ynory-fgnegvat-pyhr-ohggba-grkg";a:2:{i:0;R:42870;i:1;R:40466;}s:52:"1232:fpniratreuhag-ynory-fgnegvat-pyhr-ohggba-gnetrg";a:2:{i:0;R:42870;i:1;R:40466;}s:32:"1232:fpniratreuhag-ynory-negvpyr";a:2:{i:0;R:42870;i:1;R:40466;}s:38:"1232:fpniratreuhag-ynory-negvpyr-gvgyr";a:2:{i:0;R:42870;i:1;R:40466;}s:45:"1232:fpniratreuhag-ynory-negvpyr-uvqqra-vzntr";a:2:{i:0;R:42870;i:1;R:40466;}s:43:"1232:fpniratreuhag-ynory-negvpyr-pyhr-gvgyr";a:2:{i:0;R:42870;i:1;R:40466;}s:42:"1232:fpniratreuhag-ynory-negvpyr-pyhr-grkg";a:2:{i:0;R:42870;i:1;R:40466;}s:43:"1232:fpniratreuhag-ynory-negvpyr-pyhr-vzntr";a:2:{i:0;R:42870;i:1;R:40466;}s:49:"1232:fpniratreuhag-ynory-negvpyr-pyhr-ohggba-grkg";a:2:{i:0;R:42870;i:1;R:40466;}s:51:"1232:fpniratreuhag-ynory-negvpyr-pyhr-ohggba-gnetrg";a:2:{i:0;R:42870;i:1;R:40466;}s:35:"1232:fpniratreuhag-ynory-ragel-sbez";a:2:{i:0;R:42870;i:1;R:40466;}s:41:"1232:fpniratreuhag-ynory-ragel-sbez-gvgyr";a:2:{i:0;R:42870;i:1;R:40466;}s:40:"1232:fpniratreuhag-ynory-ragel-sbez-grkg";a:2:{i:0;R:42870;i:1;R:40466;}s:41:"1232:fpniratreuhag-ynory-ragel-sbez-vzntr";a:2:{i:0;R:42870;i:1;R:40466;}s:44:"1232:fpniratreuhag-ynory-ragel-sbez-dhrfgvba";a:2:{i:0;R:42870;i:1;R:40466;}s:47:"1232:fpniratreuhag-ynory-ragel-sbez-ohggba-grkg";a:2:{i:0;R:42870;i:1;R:40466;}s:32:"1232:fpniratreuhag-ynory-tbbqolr";a:2:{i:0;R:42870;i:1;R:40466;}s:38:"1232:fpniratreuhag-ynory-tbbqolr-gvgyr";a:2:{i:0;R:42870;i:1;R:40466;}s:37:"1232:fpniratreuhag-ynory-tbbqolr-grkg";a:2:{i:0;R:42870;i:1;R:40466;}s:38:"1232:fpniratreuhag-ynory-tbbqolr-vzntr";a:2:{i:0;R:42870;i:1;R:40466;}s:29:"1232:fpniratreuhag-ohggba-nqq";a:2:{i:0;R:42870;i:1;R:40466;}s:30:"1232:fpniratreuhag-ohggba-fnir";a:2:{i:0;R:42870;i:1;R:40466;}s:33:"1232:fpniratreuhag-ohggba-qvfnoyr";a:2:{i:0;R:42870;i:1;R:40466;}s:32:"1232:fpniratreuhag-ohggba-ranoyr";a:2:{i:0;R:42870;i:1;R:40466;}s:32:"1232:fpniratreuhag-ohggba-qryrgr";a:2:{i:0;R:42870;i:1;R:40466;}s:32:"1232:fpniratreuhag-ohggba-rkcbeg";a:2:{i:0;R:42870;i:1;R:40466;}s:37:"1232:fpniratreuhag-ohggba-nqq-frpgvba";a:2:{i:0;R:42870;i:1;R:40466;}s:40:"1232:fpniratreuhag-ohggba-erzbir-frpgvba";a:2:{i:0;R:42870;i:1;R:40466;}s:29:"1232:fpniratreuhag-sbez-reebe";a:2:{i:0;R:42870;i:1;R:40466;}s:34:"1232:fpniratreuhag-sbez-reebe-anzr";a:2:{i:0;R:42870;i:1;R:40466;}s:46:"1232:fpniratreuhag-sbez-reebe-ab-ynaqvat-gvgyr";a:2:{i:0;R:42870;i:1;R:40466;}s:43:"1232:fpniratreuhag-sbez-reebe-vainyvq-gvgyr";a:2:{i:0;R:42870;i:1;R:40466;}s:49:"1232:fpniratreuhag-sbez-reebe-ynaqvat-ohggba-grkg";a:2:{i:0;R:42870;i:1;R:40466;}s:53:"1232:fpniratreuhag-sbez-reebe-ynaqvat-ohggba-cbfvgvba";a:2:{i:0;R:42870;i:1;R:40466;}s:43:"1232:fpniratreuhag-sbez-reebe-fgnegvat-pyhr";a:2:{i:0;R:42870;i:1;R:40466;}s:40:"1232:fpniratreuhag-sbez-reebe-ragel-sbez";a:2:{i:0;R:42870;i:1;R:40466;}s:37:"1232:fpniratreuhag-sbez-reebe-tbbqolr";a:2:{i:0;R:42870;i:1;R:40466;}s:46:"1232:fpniratreuhag-sbez-reebe-ab-negvpyr-gvgyr";a:2:{i:0;R:42870;i:1;R:40466;}s:54:"1232:fpniratreuhag-sbez-reebe-qhcyvpngrq-negvpyr-gvgyr";a:2:{i:0;R:42870;i:1;R:40466;}s:50:"1232:fpniratreuhag-sbez-reebe-negvpyr-uvqqra-vzntr";a:2:{i:0;R:42870;i:1;R:40466;}s:42:"1232:fpniratreuhag-sbez-reebe-negvpyr-pyhr";a:2:{i:0;R:42870;i:1;R:40466;}s:34:"1232:fpniratreuhag-sbez-reebe-pyhr";a:2:{i:0;R:42870;i:1;R:40466;}s:63:"1232:fpniratreuhag-sbez-reebe-cebterffoneuvagynory-fcevgr-rzcgl";a:2:{i:0;R:42870;i:1;R:40466;}s:59:"1232:fpniratreuhag-sbez-reebe-fgnegcbchcfcevgr-fcevgr-rzcgl";a:2:{i:0;R:42870;i:1;R:40466;}s:60:"1232:fpniratreuhag-sbez-reebe-svavfucbchcfcevgr-fcevgr-rzcgl";a:2:{i:0;R:42870;i:1;R:40466;}s:70:"1232:fpniratreuhag-sbez-reebe-cebterffoneonpxtebhaqfcevgr-fcevgr-rzcgl";a:2:{i:0;R:42870;i:1;R:40466;}s:64:"1232:fpniratreuhag-sbez-reebe-cebterffonerkvgfcevgr-fcevgr-rzcgl";a:2:{i:0;R:42870;i:1;R:40466;}s:65:"1232:fpniratreuhag-sbez-reebe-negvpyr-fcevgrabgsbhaq-fcevgr-rzcgl";a:2:{i:0;R:42870;i:1;R:40466;}s:70:"1232:fpniratreuhag-sbez-reebe-negvpyr-fcevgrvacebterffone-fcevgr-rzcgl";a:2:{i:0;R:42870;i:1;R:40466;}s:75:"1232:fpniratreuhag-sbez-reebe-negvpyr-fcevgrvacebterffoneubire-fcevgr-rzcgl";a:2:{i:0;R:42870;i:1;R:40466;}s:45:"1232:fpniratreuhag-sbez-reebe-ab-fcevgr-vzntr";a:2:{i:0;R:42870;i:1;R:40466;}s:78:"1232:fpniratreuhag-sbez-reebe-negvpyr-fcevgrvacebterffoneabgsbhaq-fcevgr-rzcgl";a:2:{i:0;R:42870;i:1;R:40466;}s:41:"1232:fpniratreuhag-sbez-reebe-ab-negvpyrf";a:2:{i:0;R:42870;i:1;R:40466;}s:41:"1232:fpniratreuhag-sbez-reebe-vainyvq-hey";a:2:{i:0;R:42870;i:1;R:40466;}s:39:"1232:fpniratreuhag-sbez-reebe-pyhrpbybe";a:2:{i:0;R:42870;i:1;R:40466;}s:40:"1232:fpniratreuhag-tnzr-unf-orra-perngrq";a:2:{i:0;R:42870;i:1;R:40466;}s:38:"1232:fpniratreuhag-tnzr-unf-orra-fnirq";a:2:{i:0;R:42870;i:1;R:40466;}s:40:"1232:fpniratreuhag-tnzr-unf-orra-ranoyrq";a:2:{i:0;R:42870;i:1;R:40466;}s:41:"1232:fpniratreuhag-tnzr-unf-orra-qvfnoyrq";a:2:{i:0;R:42870;i:1;R:40466;}s:42:"1232:fpniratreuhag-tnzr-unf-abg-orra-fnirq";a:2:{i:0;R:42870;i:1;R:40466;}s:38:"1232:fpniratreuhag-rqvg-gbxra-zvfzngpu";a:2:{i:0;R:42870;i:1;R:40466;}s:34:"1232:fpniratreuhag-ragel-sbez-anzr";a:2:{i:0;R:42870;i:1;R:40466;}s:35:"1232:fpniratreuhag-ragel-sbez-rznvy";a:2:{i:0;R:42870;i:1;R:40466;}s:36:"1232:fpniratreuhag-ragel-sbez-fhozvg";a:2:{i:0;R:42870;i:1;R:40466;}s:35:"1232:fpniratreuhag-ynory-fcevgr-vzt";a:2:{i:0;R:42870;i:1;R:40466;}s:33:"1232:fpniratreuhag-ynory-fcevgr-k";a:2:{i:0;R:42870;i:1;R:40466;}s:34:"1232:fpniratreuhag-ynory-fcevgr-k1";a:2:{i:0;R:42870;i:1;R:40466;}s:34:"1232:fpniratreuhag-ynory-fcevgr-k2";a:2:{i:0;R:42870;i:1;R:40466;}s:40:"1232:fpniratreuhag-tnzr-unf-orra-qryrgrq";a:2:{i:0;R:42870;i:1;R:40466;}s:34:"1232:fpniratreuhag-tnzr-zber-gb-tb";a:2:{i:0;R:42870;i:1;R:40466;}s:37:"1232:fpniratreuhag-ynory-cebterff-one";a:2:{i:0;R:42870;i:1;R:40466;}s:36:"1232:fpniratreuhag-dhvg-tnzr-pbagrag";a:2:{i:0;R:42870;i:1;R:40466;}s:38:"1232:fpniratreuhag-fjvgpu-tnzr-pbagrag";a:2:{i:0;R:42870;i:1;R:40466;}s:40:"1232:fpniratreuhag-dhvg-tnzr-ohggba-dhvg";a:2:{i:0;R:42870;i:1;R:40466;}s:42:"1232:fpniratreuhag-dhvg-tnzr-ohggba-pnapry";a:2:{i:0;R:42870;i:1;R:40466;}s:40:"1232:fpniratreuhag-dhvg-tnzr-ohggba-fgnl";a:2:{i:0;R:42870;i:1;R:40466;}s:45:"1232:fpniratreuhag-ynory-cebterffoneuvagynory";a:2:{i:0;R:42870;i:1;R:40466;}s:41:"1232:fpniratreuhag-ynory-ragel-sbez-rznvy";a:2:{i:0;R:42870;i:1;R:40466;}s:44:"1232:fpniratreuhag-ynory-ragel-sbez-hfreanzr";a:2:{i:0;R:42870;i:1;R:40466;}s:52:"1232:fpniratreuhag-ynory-cebterffoneonpxtebhaqfcevgr";a:2:{i:0;R:42870;i:1;R:40466;}s:46:"1232:fpniratreuhag-ynory-cebterffonerkvgfcevgr";a:2:{i:0;R:42870;i:1;R:40466;}s:41:"1232:fpniratreuhag-ynory-fgnegcbchcfcevgr";a:2:{i:0;R:42870;i:1;R:40466;}s:39:"1232:fpniratreuhag-ynory-fcevgrabgsbhaq";a:2:{i:0;R:42870;i:1;R:40466;}s:44:"1232:fpniratreuhag-ynory-fcevgrvacebterffone";a:2:{i:0;R:42870;i:1;R:40466;}s:49:"1232:fpniratreuhag-ynory-fcevgrvacebterffoneubire";a:2:{i:0;R:42870;i:1;R:40466;}s:52:"1232:fpniratreuhag-ynory-fcevgrvacebterffoneabgsbhaq";a:2:{i:0;R:42870;i:1;R:40466;}s:42:"1232:fpniratreuhag-ynory-svavfucbchcfcevgr";a:2:{i:0;R:42870;i:1;R:40466;}s:35:"1232:fpniratreuhag-ynory-pyhr-pbybe";a:2:{i:0;R:42870;i:1;R:40466;}s:34:"1232:fpniratreuhag-ynory-pyhr-fvmr";a:2:{i:0;R:42870;i:1;R:40466;}s:34:"1232:fpniratreuhag-ynory-pyhr-sbag";a:2:{i:0;R:42870;i:1;R:40466;}s:41:"1232:fpniratreuhag-ynory-negvpyr-pbatengf";a:2:{i:0;R:42870;i:1;R:40466;}s:33:"1232:fpniratreuhag-ynory-snprobbx";a:2:{i:0;R:42870;i:1;R:40466;}s:34:"1232:fpniratreuhag-rqvgbe-gvc-anzr";a:2:{i:0;R:42870;i:1;R:40466;}s:43:"1232:fpniratreuhag-rqvgbe-gvc-ynaqvat-gvgyr";a:2:{i:0;R:42870;i:1;R:40466;}s:49:"1232:fpniratreuhag-rqvgbe-gvc-ynaqvat-ohggba-grkg";a:2:{i:0;R:42870;i:1;R:40466;}s:40:"1232:fpniratreuhag-rqvgbe-gvc-fcevgr-vzt";a:2:{i:0;R:42870;i:1;R:40466;}s:57:"1232:fpniratreuhag-rqvgbe-gvc-cebterffoneonpxtebhaqfcevgr";a:2:{i:0;R:42870;i:1;R:40466;}s:51:"1232:fpniratreuhag-rqvgbe-gvc-cebterffonerkvgfcevgr";a:2:{i:0;R:42870;i:1;R:40466;}s:50:"1232:fpniratreuhag-rqvgbe-gvc-cebterffoneuvagynory";a:2:{i:0;R:42870;i:1;R:40466;}s:49:"1232:fpniratreuhag-rqvgbe-gvc-fgnegvat-pyhr-gvgyr";a:2:{i:0;R:42870;i:1;R:40466;}s:48:"1232:fpniratreuhag-rqvgbe-gvc-fgnegvat-pyhr-grkg";a:2:{i:0;R:42870;i:1;R:40466;}s:55:"1232:fpniratreuhag-rqvgbe-gvc-fgnegvat-pyhr-ohggba-grkg";a:2:{i:0;R:42870;i:1;R:40466;}s:57:"1232:fpniratreuhag-rqvgbe-gvc-fgnegvat-pyhr-ohggba-gnetrg";a:2:{i:0;R:42870;i:1;R:40466;}s:46:"1232:fpniratreuhag-rqvgbe-gvc-fgnegcbchcfcevgr";a:2:{i:0;R:42870;i:1;R:40466;}s:42:"1232:fpniratreuhag-rqvgbe-gvc-negvpyrgvgyr";a:2:{i:0;R:42870;i:1;R:40466;}s:44:"1232:fpniratreuhag-rqvgbe-gvc-fcevgrabgsbhaq";a:2:{i:0;R:42870;i:1;R:40466;}s:49:"1232:fpniratreuhag-rqvgbe-gvc-fcevgrvacebterffone";a:2:{i:0;R:42870;i:1;R:40466;}s:54:"1232:fpniratreuhag-rqvgbe-gvc-fcevgrvacebterffoneubire";a:2:{i:0;R:42870;i:1;R:40466;}s:57:"1232:fpniratreuhag-rqvgbe-gvc-fcevgrvacebterffoneabgsbhaq";a:2:{i:0;R:42870;i:1;R:40466;}s:47:"1232:fpniratreuhag-rqvgbe-gvc-negvpyr-pyhr-grkg";a:2:{i:0;R:42870;i:1;R:40466;}s:46:"1232:fpniratreuhag-rqvgbe-gvc-negvpyr-pbatengf";a:2:{i:0;R:42870;i:1;R:40466;}s:43:"1232:fpniratreuhag-rqvgbe-gvc-negvpyr-gvgyr";a:2:{i:0;R:42870;i:1;R:40466;}s:46:"1232:fpniratreuhag-rqvgbe-gvc-ragel-sbez-gvgyr";a:2:{i:0;R:42870;i:1;R:40466;}s:45:"1232:fpniratreuhag-rqvgbe-gvc-ragel-sbez-grkg";a:2:{i:0;R:42870;i:1;R:40466;}s:49:"1232:fpniratreuhag-rqvgbe-gvc-ragel-sbez-dhrfgvba";a:2:{i:0;R:42870;i:1;R:40466;}s:46:"1232:fpniratreuhag-rqvgbe-gvc-ragel-sbez-rznvy";a:2:{i:0;R:42870;i:1;R:40466;}s:49:"1232:fpniratreuhag-rqvgbe-gvc-ragel-sbez-hfreanzr";a:2:{i:0;R:42870;i:1;R:40466;}s:47:"1232:fpniratreuhag-rqvgbe-gvc-svavfucbchcfcevgr";a:2:{i:0;R:42870;i:1;R:40466;}s:43:"1232:fpniratreuhag-rqvgbe-gvc-tbbqolr-gvgyr";a:2:{i:0;R:42870;i:1;R:40466;}s:42:"1232:fpniratreuhag-rqvgbe-gvc-tbbqolr-grkg";a:2:{i:0;R:42870;i:1;R:40466;}s:40:"1232:fpniratreuhag-rqvgbe-gvc-pyhr-pbybe";a:2:{i:0;R:42870;i:1;R:40466;}s:52:"1232:fpniratreuhag-rqvgbe-gvc-ragel-sbez-ohggba-grkg";a:2:{i:0;R:42870;i:1;R:40466;}s:44:"1232:fpniratreuhag-rqvgbe-gvc-snprobbx-vzntr";a:2:{i:0;R:42870;i:1;R:40466;}s:50:"1232:fpniratreuhag-rqvgbe-gvc-snprobbx-qrfpevcgvba";a:2:{i:0;R:42870;i:1;R:40466;}s:33:"1232:fpniratreuhag-snprobbx-vzntr";a:2:{i:0;R:42870;i:1;R:40466;}s:39:"1232:fpniratreuhag-snprobbx-qrfpevcgvba";a:2:{i:0;R:42870;i:1;R:40466;}s:16:"1232:fpevor-qrfp";a:2:{i:0;s:12:"wikia-scribe";i:1;R:40466;}s:17:"1232:fpevorriragf";a:2:{i:0;R:43018;i:1;R:40466;}s:24:"1232:fpevorriragferpbeqf";a:2:{i:0;R:43018;i:1;R:40466;}s:16:"1232:frnepu-qrfp";a:2:{i:0;s:12:"wikia-search";i:1;R:40466;}s:28:"1232:jvxvnfrnepu-gvgyrf-bayl";a:2:{i:0;R:43022;i:1;R:40466;}s:33:"1232:jvxvnfrnepu-flfgrz-reebe-zft";a:2:{i:0;R:43022;i:1;R:40466;}s:33:"1232:jvxvnfrnepu-frnepu-guvf-jvxv";a:2:{i:0;R:43022;i:1;R:40466;}s:29:"1232:jvxvnfrnepu-frnepu-jvxvn";a:2:{i:0;R:43022;i:1;R:40466;}s:30:"1232:jvxvnfrnepu-vzntr-erfhygf";a:2:{i:0;R:43022;i:1;R:40466;}s:33:"1232:jvxvnfrnepu-frnepu-nyy-jvxvn";a:2:{i:0;R:43022;i:1;R:40466;}s:20:"1232:funerquryc-qrfp";a:2:{i:0;s:16:"wikia-sharedhelp";i:1;R:40466;}s:38:"1232:funerquryc-nhgbgnyxperngr-fhzznel";a:2:{i:0;R:43030;i:1;R:40466;}s:30:"1232:fubjcresbeznaprfgngf-qrfp";a:2:{i:0;s:26:"wikia-showperformancestats";i:1;R:40466;}s:26:"1232:cresbeznaprfgng-gbgny";a:2:{i:0;R:43033;i:1;R:40466;}s:27:"1232:cresbeznaprfgng-ncnpur";a:2:{i:0;R:43033;i:1;R:40466;}s:24:"1232:cresbeznaprfgng-pch";a:2:{i:0;R:43033;i:1;R:40466;}s:16:"1232:fvtahc-qrfp";a:2:{i:0;s:12:"wikia-signup";i:1;R:40466;}s:11:"1232:fvtahc";a:2:{i:0;R:43038;i:1;R:40466;}s:17:"1232:fvgrznc-qrfp";a:2:{i:0;s:13:"wikia-sitemap";i:1;R:40466;}s:21:"1232:fvgrjvqrzrffntrf";a:2:{i:0;s:22:"wikia-sitewidemessages";i:1;R:40466;}s:26:"1232:fjz-cntr-gvgyr-rqvgbe";a:2:{i:0;R:43043;i:1;R:40466;}s:27:"1232:fjz-cntr-gvgyr-cerivrj";a:2:{i:0;R:43043;i:1;R:40466;}s:24:"1232:fjz-cntr-gvgyr-fraq";a:2:{i:0;R:43043;i:1;R:40466;}s:24:"1232:fjz-cntr-gvgyr-frag";a:2:{i:0;R:43043;i:1;R:40466;}s:27:"1232:fjz-cntr-gvgyr-qvfzvff";a:2:{i:0;R:43043;i:1;R:40466;}s:24:"1232:fjz-cntr-gvgyr-yvfg";a:2:{i:0;R:43043;i:1;R:40466;}s:22:"1232:fjz-ynory-cerivrj";a:2:{i:0;R:43043;i:1;R:40466;}s:19:"1232:fjz-ynory-rqvg";a:2:{i:0;R:43043;i:1;R:40466;}s:21:"1232:fjz-ynory-erzbir";a:2:{i:0;R:43043;i:1;R:40466;}s:19:"1232:fjz-ynory-frag";a:2:{i:0;R:43043;i:1;R:40466;}s:19:"1232:fjz-ynory-yvfg";a:2:{i:0;R:43043;i:1;R:40466;}s:24:"1232:fjz-ynory-erpvcvrag";a:2:{i:0;R:43043;i:1;R:40466;}s:30:"1232:fjz-ynory-erpvcvrag-jvxvf";a:2:{i:0;R:43043;i:1;R:40466;}s:30:"1232:fjz-ynory-erpvcvrag-hfref";a:2:{i:0;R:43043;i:1;R:40466;}s:25:"1232:fjz-ynory-rkcvengvba";a:2:{i:0;R:43043;i:1;R:40466;}s:30:"1232:fjz-ynory-rkcvengvba-uvag";a:2:{i:0;R:43043;i:1;R:40466;}s:29:"1232:fjz-ynory-zbqr-jvxvf-nyy";a:2:{i:0;R:43043;i:1;R:40466;}s:29:"1232:fjz-ynory-zbqr-jvxvf-uho";a:2:{i:0;R:43043;i:1;R:40466;}s:33:"1232:fjz-ynory-zbqr-jvxvf-pyhfgre";a:2:{i:0;R:43043;i:1;R:40466;}s:30:"1232:fjz-ynory-zbqr-jvxvf-jvxv";a:2:{i:0;R:43043;i:1;R:40466;}s:29:"1232:fjz-ynory-zbqr-hfref-nyy";a:2:{i:0;R:43043;i:1;R:40466;}s:32:"1232:fjz-ynory-zbqr-hfref-npgvir";a:2:{i:0;R:43043;i:1;R:40466;}s:31:"1232:fjz-ynory-zbqr-hfref-tebhc";a:2:{i:0;R:43043;i:1;R:40466;}s:36:"1232:fjz-ynory-zbqr-hfref-tebhc-uvag";a:2:{i:0;R:43043;i:1;R:40466;}s:30:"1232:fjz-ynory-zbqr-hfref-hfre";a:2:{i:0;R:43043;i:1;R:40466;}s:35:"1232:fjz-ynory-zbqr-hfref-hfre-uvag";a:2:{i:0;R:43043;i:1;R:40466;}s:36:"1232:fjz-ynory-zbqr-hfref-hfre-zhygv";a:2:{i:0;R:43043;i:1;R:40466;}s:41:"1232:fjz-ynory-zbqr-hfref-hfre-zhygv-uvag";a:2:{i:0;R:43043;i:1;R:40466;}s:22:"1232:fjz-ynory-pbagrag";a:2:{i:0;R:43043;i:1;R:40466;}s:22:"1232:fjz-ynory-pbzzrag";a:2:{i:0;R:43043;i:1;R:40466;}s:24:"1232:fjz-ynory-qvfzvffrq";a:2:{i:0;R:43043;i:1;R:40466;}s:23:"1232:fjz-ynory-ynathntr";a:2:{i:0;R:43043;i:1;R:40466;}s:29:"1232:fjz-ohggba-ynat-purpxnyy";a:2:{i:0;R:43043;i:1;R:40466;}s:30:"1232:fjz-ohggba-ynat-purpxabar";a:2:{i:0;R:43043;i:1;R:40466;}s:25:"1232:fjz-gnfxznantre-uvag";a:2:{i:0;R:43043;i:1;R:40466;}s:23:"1232:fjz-ohggba-cerivrj";a:2:{i:0;R:43043;i:1;R:40466;}s:20:"1232:fjz-ohggba-fraq";a:2:{i:0;R:43043;i:1;R:40466;}s:20:"1232:fjz-ohggba-fnir";a:2:{i:0;R:43043;i:1;R:40466;}s:19:"1232:fjz-ohggba-arj";a:2:{i:0;R:43043;i:1;R:40466;}s:20:"1232:fjz-zft-frag-bx";a:2:{i:0;R:43043;i:1;R:40466;}s:21:"1232:fjz-zft-frag-ree";a:2:{i:0;R:43043;i:1;R:40466;}s:19:"1232:fjz-zft-erzbir";a:2:{i:0;R:43043;i:1;R:40466;}s:13:"1232:fjz-qnlf";a:2:{i:0;R:43043;i:1;R:40466;}s:23:"1232:fjz-rkcver-bcgvbaf";a:2:{i:0;R:43043;i:1;R:40466;}s:20:"1232:fjz-rkcver-vasb";a:2:{i:0;R:43043;i:1;R:40466;}s:21:"1232:fjz-yvax-qvfzvff";a:2:{i:0;R:43043;i:1;R:40466;}s:24:"1232:fjz-qvfzvff-pbagrag";a:2:{i:0;R:43043;i:1;R:40466;}s:25:"1232:fjz-yvfg-ab-zrffntrf";a:2:{i:0;R:43043;i:1;R:40466;}s:22:"1232:fjz-yvfg-gnoyr-vq";a:2:{i:0;R:43043;i:1;R:40466;}s:26:"1232:fjz-yvfg-gnoyr-fraqre";a:2:{i:0;R:43043;i:1;R:40466;}s:24:"1232:fjz-yvfg-gnoyr-jvxv";a:2:{i:0;R:43043;i:1;R:40466;}s:29:"1232:fjz-yvfg-gnoyr-erpvcvrag";a:2:{i:0;R:43043;i:1;R:40466;}s:25:"1232:fjz-yvfg-gnoyr-tebhc";a:2:{i:0;R:43043;i:1;R:40466;}s:26:"1232:fjz-yvfg-gnoyr-rkcver";a:2:{i:0;R:43043;i:1;R:40466;}s:24:"1232:fjz-yvfg-gnoyr-qngr";a:2:{i:0;R:43043;i:1;R:40466;}s:27:"1232:fjz-yvfg-gnoyr-erzbirq";a:2:{i:0;R:43043;i:1;R:40466;}s:27:"1232:fjz-yvfg-gnoyr-pbagrag";a:2:{i:0;R:43043;i:1;R:40466;}s:25:"1232:fjz-yvfg-gnoyr-gbbyf";a:2:{i:0;R:43043;i:1;R:40466;}s:24:"1232:fjz-yvfg-gnoyr-ynat";a:2:{i:0;R:43043;i:1;R:40466;}s:12:"1232:fjz-lrf";a:2:{i:0;R:43043;i:1;R:40466;}s:11:"1232:fjz-ab";a:2:{i:0;R:43043;i:1;R:40466;}s:27:"1232:fjz-reebe-ab-fhpu-jvxv";a:2:{i:0;R:43043;i:1;R:40466;}s:27:"1232:fjz-reebe-ab-fhpu-hfre";a:2:{i:0;R:43043;i:1;R:40466;}s:27:"1232:fjz-reebe-ab-hfre-yvfg";a:2:{i:0;R:43043;i:1;R:40466;}s:28:"1232:fjz-reebe-rzcgl-zrffntr";a:2:{i:0;R:43043;i:1;R:40466;}s:27:"1232:fjz-reebe-ybat-zrffntr";a:2:{i:0;R:43043;i:1;R:40466;}s:26:"1232:fjz-reebe-rzcgl-tebhc";a:2:{i:0;R:43043;i:1;R:40466;}s:27:"1232:fjz-reebe-vainyvq-gvzr";a:2:{i:0;R:43043;i:1;R:40466;}s:19:"1232:fjz-ynat-bgure";a:2:{i:0;R:43043;i:1;R:40466;}s:21:"1232:fxvapubbfre-qrfp";a:2:{i:0;s:17:"wikia-skinchooser";i:1;R:40466;}s:26:"1232:fxvapubbfre-phfgbzpff";a:2:{i:0;R:43114;i:1;R:40466;}s:13:"1232:arj-ybbx";a:2:{i:0;R:43114;i:1;R:40466;}s:16:"1232:fvgr-ynlbhg";a:2:{i:0;R:43114;i:1;R:40466;}s:19:"1232:fyvqregnt-qrfp";a:2:{i:0;s:15:"wikia-slidertag";i:1;R:40466;}s:29:"1232:fyvqregnt-srngherq-jvxvf";a:2:{i:0;R:43119;i:1;R:40466;}s:20:"1232:pnpurrcbpu-qrfp";a:2:{i:0;s:23:"wikia-specialcacheepoch";i:1;R:40466;}s:15:"1232:pnpurrcbpu";a:2:{i:0;R:43122;i:1;R:40466;}s:22:"1232:pnpurrcbpu-urnqre";a:2:{i:0;R:43122;i:1;R:40466;}s:21:"1232:pnpurrcbpu-inyhr";a:2:{i:0;R:43122;i:1;R:40466;}s:22:"1232:pnpurrcbpu-fhozvg";a:2:{i:0;R:43122;i:1;R:40466;}s:23:"1232:pnpurrcbpu-hcqngrq";a:2:{i:0;R:43122;i:1;R:40466;}s:27:"1232:pnpurrcbpu-abg-hcqngrq";a:2:{i:0;R:43122;i:1;R:40466;}s:25:"1232:pnpurrcbpu-js-ernfba";a:2:{i:0;R:43122;i:1;R:40466;}s:21:"1232:pnpurrcbpu-ab-js";a:2:{i:0;R:43122;i:1;R:40466;}s:12:"1232:pbagnpg";a:2:{i:0;s:20:"wikia-specialcontact";i:1;R:40466;}s:25:"1232:fcrpvnypbagnpg-jvxvn";a:2:{i:0;R:43132;i:1;R:40466;}s:29:"1232:fcrpvnypbagnpg-cntrgvgyr";a:2:{i:0;R:43132;i:1;R:40466;}s:25:"1232:fcrpvnypbagnpg-vageb";a:2:{i:0;R:43132;i:1;R:40466;}s:28:"1232:fcrpvnypbagnpg-hfreanzr";a:2:{i:0;R:43132;i:1;R:40466;}s:28:"1232:fcrpvnypbagnpg-jvxvanzr";a:2:{i:0;R:43132;i:1;R:40466;}s:28:"1232:fcrpvnypbagnpg-ernyanzr";a:2:{i:0;R:43132;i:1;R:40466;}s:28:"1232:fcrpvnypbagnpg-lbheznvy";a:2:{i:0;R:43132;i:1;R:40466;}s:27:"1232:fcrpvnypbagnpg-ceboyrz";a:2:{i:0;R:43132;i:1;R:40466;}s:31:"1232:fcrpvnypbagnpg-ceboyrzqrfp";a:2:{i:0;R:43132;i:1;R:40466;}s:24:"1232:fcrpvnypbagnpg-znvy";a:2:{i:0;R:43132;i:1;R:40466;}s:28:"1232:fcrpvnypbagnpg-svyyrqva";a:2:{i:0;R:43132;i:1;R:40466;}s:24:"1232:fcrpvnypbagnpg-ppzr";a:2:{i:0;R:43132;i:1;R:40466;}s:30:"1232:fcrpvnypbagnpg-ppqvfnoyrq";a:2:{i:0;R:43132;i:1;R:40466;}s:26:"1232:fcrpvnypbagnpg-abglbh";a:2:{i:0;R:43132;i:1;R:40466;}s:31:"1232:fcrpvnypbagnpg-pncgpunvasb";a:2:{i:0;R:43132;i:1;R:40466;}s:32:"1232:fcrpvnypbagnpg-pncgpungvgyr";a:2:{i:0;R:43132;i:1;R:40466;}s:29:"1232:fcrpvnypbagnpg-sbezgvgyr";a:2:{i:0;R:43132;i:1;R:40466;}s:29:"1232:fcrpvnypbagnpg-abzrffntr";a:2:{i:0;R:43132;i:1;R:40466;}s:31:"1232:fcrpvnypbagnpg-pncgpunsnvy";a:2:{i:0;R:43132;i:1;R:40466;}s:27:"1232:fcrpvnypbagnpg-znvyfho";a:2:{i:0;R:43132;i:1;R:40466;}s:29:"1232:fcrpvnypbagnpg-znvyfhopp";a:2:{i:0;R:43132;i:1;R:40466;}s:28:"1232:fcrpvnypbagnpg-ppurnqre";a:2:{i:0;R:43132;i:1;R:40466;}s:34:"1232:fcrpvnypbagnpg-fhozvgpbzcyrgr";a:2:{i:0;R:43132;i:1;R:40466;}s:18:"1232:vagrejvxvrqvg";a:2:{i:0;s:26:"wikia-specialinterwikiedit";i:1;R:40466;}s:17:"1232:vjrqvg-gvgyr";a:2:{i:0;R:43157;i:1;R:40466;}s:31:"1232:vjrqvg-ynathntr-vagrejvxvf";a:2:{i:0;R:43157;i:1;R:40466;}s:26:"1232:vjrqvg-nyy-vagrejvxvf";a:2:{i:0;R:43157;i:1;R:40466;}s:18:"1232:vjrqvg-hcqngr";a:2:{i:0;R:43157;i:1;R:40466;}s:17:"1232:vjrqvg-reebe";a:2:{i:0;R:43157;i:1;R:40466;}s:19:"1232:vjrqvg-fhpprff";a:2:{i:0;R:43157;i:1;R:40466;}s:31:"1232:fcrpvnyzhygvcyrybbxhc-qrfp";a:2:{i:0;s:27:"wikia-specialmultiplelookup";i:1;R:40466;}s:16:"1232:zhygvybbxhc";a:2:{i:0;R:43165;i:1;R:40466;}s:22:"1232:zhygvybbxhcfgvgyr";a:2:{i:0;R:43165;i:1;R:40466;}s:26:"1232:zhygvybbxhcfryrpghfre";a:2:{i:0;R:43165;i:1;R:40466;}s:18:"1232:zhygvybbxhctb";a:2:{i:0;R:43165;i:1;R:40466;}s:26:"1232:zhygvybbxhcabgfcrpvsl";a:2:{i:0;R:43165;i:1;R:40466;}s:20:"1232:zhygvybbxhcarkg";a:2:{i:0;R:43165;i:1;R:40466;}s:24:"1232:zhygvybbxhccerivbhf";a:2:{i:0;R:43165;i:1;R:40466;}s:25:"1232:zhygvybbxhcaoeerfhyg";a:2:{i:0;R:43165;i:1;R:40466;}s:30:"1232:zhygvybbxhcvainyvqerfhygf";a:2:{i:0;R:43165;i:1;R:40466;}s:29:"1232:zhygvybbxhcaberfhygsbhaq";a:2:{i:0;R:43165;i:1;R:40466;}s:20:"1232:zhygvybbxhcjvxv";a:2:{i:0;R:43165;i:1;R:40466;}s:20:"1232:zhygvybbxhcyvax";a:2:{i:0;R:43165;i:1;R:40466;}s:23:"1232:zhygvybbxhcqrgnvyf";a:2:{i:0;R:43165;i:1;R:40466;}s:29:"1232:zhygvybbxhcyvfgjvxvnvasb";a:2:{i:0;R:43165;i:1;R:40466;}s:27:"1232:zhygvybbxhcvainyvqhfre";a:2:{i:0;R:43165;i:1;R:40466;}s:24:"1232:zhygvybbxhcynfgrqvg";a:2:{i:0;R:43165;i:1;R:40466;}s:26:"1232:zhygvybbxhcjvxvqoanzr";a:2:{i:0;R:43165;i:1;R:40466;}s:23:"1232:zhygvybbxhcjvxvhey";a:2:{i:0;R:43165;i:1;R:40466;}s:25:"1232:zhygvybbxhcjvxvgvgyr";a:2:{i:0;R:43165;i:1;R:40466;}s:27:"1232:zhygvybbxhcjvxvbcgvbaf";a:2:{i:0;R:43165;i:1;R:40466;}s:27:"1232:zhygvybbxhcynfgrqvguqe";a:2:{i:0;R:43165;i:1;R:40466;}s:28:"1232:zhygvybbxhcerpbeqfcntre";a:2:{i:0;R:43165;i:1;R:40466;}s:22:"1232:evtug-zhygvybbxhc";a:2:{i:0;R:43165;i:1;R:40466;}s:28:"1232:fcrpvnycebgrpgfvgr-qrfp";a:2:{i:0;s:24:"wikia-specialprotectsite";i:1;R:40466;}s:16:"1232:cebgrpgfvgr";a:2:{i:0;R:43190;i:1;R:40466;}s:29:"1232:cebgrpgfvgr-grkg-cebgrpg";a:2:{i:0;R:43190;i:1;R:40466;}s:31:"1232:cebgrpgfvgr-grkg-hacebgrpg";a:2:{i:0;R:43190;i:1;R:40466;}s:22:"1232:cebgrpgfvgr-gvgyr";a:2:{i:0;R:43190;i:1;R:40466;}s:25:"1232:cebgrpgfvgr-nyybjnyy";a:2:{i:0;R:43190;i:1;R:40466;}s:31:"1232:cebgrpgfvgr-nyybjhfreflfbc";a:2:{i:0;R:43190;i:1;R:40466;}s:27:"1232:cebgrpgfvgr-nyybjflfbc";a:2:{i:0;R:43190;i:1;R:40466;}s:30:"1232:cebgrpgfvgr-perngrnppbhag";a:2:{i:0;R:43190;i:1;R:40466;}s:27:"1232:cebgrpgfvgr-perngrcntr";a:2:{i:0;R:43190;i:1;R:40466;}s:21:"1232:cebgrpgfvgr-rqvg";a:2:{i:0;R:43190;i:1;R:40466;}s:21:"1232:cebgrpgfvgr-zbir";a:2:{i:0;R:43190;i:1;R:40466;}s:23:"1232:cebgrpgfvgr-hcybnq";a:2:{i:0;R:43190;i:1;R:40466;}s:24:"1232:cebgrpgfvgr-gvzrbhg";a:2:{i:0;R:43190;i:1;R:40466;}s:30:"1232:cebgrpgfvgr-gvzrbhg-reebe";a:2:{i:0;R:43190;i:1;R:40466;}s:27:"1232:cebgrpgfvgr-znkgvzrbhg";a:2:{i:0;R:43190;i:1;R:40466;}s:24:"1232:cebgrpgfvgr-pbzzrag";a:2:{i:0;R:43190;i:1;R:40466;}s:25:"1232:cebgrpgfvgr-hpbzzrag";a:2:{i:0;R:43190;i:1;R:40466;}s:22:"1232:cebgrpgfvgr-hagvy";a:2:{i:0;R:43190;i:1;R:40466;}s:24:"1232:cebgrpgfvgr-cebgrpg";a:2:{i:0;R:43190;i:1;R:40466;}s:26:"1232:cebgrpgfvgr-hacebgrpg";a:2:{i:0;R:43190;i:1;R:40466;}s:23:"1232:cebgrpgfvgr-abybtf";a:2:{i:0;R:43190;i:1;R:40466;}s:21:"1232:fcbafbecntr-qrfp";a:2:{i:0;s:24:"wikia-specialsponsorpage";i:1;R:40466;}s:19:"1232:fcbafbe-urnqre";a:2:{i:0;R:43213;i:1;R:40466;}s:16:"1232:fcbafbe-zft";a:2:{i:0;R:43213;i:1;R:40466;}s:21:"1232:fcbafbe-grzcyngr";a:2:{i:0;R:43213;i:1;R:40466;}s:27:"1232:fcbafbe-cerivrj-cebzcg";a:2:{i:0;R:43213;i:1;R:40466;}s:27:"1232:fcbafbe-cerivrj-reebef";a:2:{i:0;R:43213;i:1;R:40466;}s:21:"1232:fcbafbe-sbez-hey";a:2:{i:0;R:43213;i:1;R:40466;}s:26:"1232:fcbafbe-sbez-yvaxgrkg";a:2:{i:0;R:43213;i:1;R:40466;}s:32:"1232:fcbafbe-sbez-nqqvgvbanygrkg";a:2:{i:0;R:43213;i:1;R:40466;}s:22:"1232:fcbafbe-sbez-cntr";a:2:{i:0;R:43213;i:1;R:40466;}s:23:"1232:fcbafbe-sbez-cevpr";a:2:{i:0;R:43213;i:1;R:40466;}s:23:"1232:fcbafbe-sbez-rznvy";a:2:{i:0;R:43213;i:1;R:40466;}s:24:"1232:fcbafbe-sbez-gunaxf";a:2:{i:0;R:43213;i:1;R:40466;}s:23:"1232:fcbafbe-cevpr-45le";a:2:{i:0;R:43213;i:1;R:40466;}s:22:"1232:fcbafbe-cevpr-5zb";a:2:{i:0;R:43213;i:1;R:40466;}s:21:"1232:fcbafbecntr-rqvg";a:2:{i:0;R:43213;i:1;R:40466;}s:21:"1232:fcbafbecntr-fnir";a:2:{i:0;R:43213;i:1;R:40466;}s:13:"1232:hfreqngn";a:2:{i:0;s:21:"wikia-specialuserdata";i:1;R:40466;}s:26:"1232:hfreqngn-hfrevq-ynory";a:2:{i:0;R:43231;i:1;R:40466;}s:20:"1232:hfreqngn-fhozvg";a:2:{i:0;R:43231;i:1;R:40466;}s:25:"1232:fcrpvnyhfreqngn-qrfp";a:2:{i:0;R:43231;i:1;R:40466;}s:20:"1232:hfreqngn-urnqre";a:2:{i:0;R:43231;i:1;R:40466;}s:19:"1232:hfreqngn-inyhr";a:2:{i:0;R:43231;i:1;R:40466;}s:21:"1232:hfreqngn-hcqngrq";a:2:{i:0;R:43231;i:1;R:40466;}s:25:"1232:hfreqngn-abg-hcqngrq";a:2:{i:0;R:43231;i:1;R:40466;}s:23:"1232:hfreqngn-js-ernfba";a:2:{i:0;R:43231;i:1;R:40466;}s:19:"1232:hfreqngn-ab-js";a:2:{i:0;R:43231;i:1;R:40466;}s:22:"1232:fcryypurpxre-qrfp";a:2:{i:0;s:18:"wikia-spellchecker";i:1;R:40466;}s:23:"1232:ranoyrfcryypurpxre";a:2:{i:0;R:43242;i:1;R:40466;}s:22:"1232:fcryypurpxre-vasb";a:2:{i:0;R:43242;i:1;R:40466;}s:32:"1232:fcryypurpxre-vasb-ynathntrf";a:2:{i:0;R:43242;i:1;R:40466;}s:31:"1232:fcryypurpxre-vasb-cebivqre";a:2:{i:0;R:43242;i:1;R:40466;}s:35:"1232:fcryypurpxre-vasb-qvpgvbanevrf";a:2:{i:0;R:43242;i:1;R:40466;}s:38:"1232:fcryypurpxre-vasb-fcryypurpx-grkg";a:2:{i:0;R:43242;i:1;R:40466;}s:43:"1232:fcryypurpxre-vasb-fcryypurpx-ynathntrf";a:2:{i:0;R:43242;i:1;R:40466;}s:40:"1232:fcryypurpxre-vasb-fcryypurpx-fhozvg";a:2:{i:0;R:43242;i:1;R:40466;}s:44:"1232:fcryypurpxre-vasb-fcryypurpx-vf-pbeerpg";a:2:{i:0;R:43242;i:1;R:40466;}s:45:"1232:fcryypurpxre-vasb-fcryypurpx-fhttrfgvbaf";a:2:{i:0;R:43242;i:1;R:40466;}s:26:"1232:fcbafbefuvc-qnfuobneq";a:2:{i:0;s:26:"wikia-sponsorshipdashboard";i:1;R:40466;}s:34:"1232:fcbafbefuvc-qnfuobneq-frevr-n";a:2:{i:0;R:43254;i:1;R:40466;}s:34:"1232:fcbafbefuvc-qnfuobneq-frevr-o";a:2:{i:0;R:43254;i:1;R:40466;}s:34:"1232:fcbafbefuvc-qnfuobneq-frevr-p";a:2:{i:0;R:43254;i:1;R:40466;}s:34:"1232:fcbafbefuvc-qnfuobneq-frevr-q";a:2:{i:0;R:43254;i:1;R:40466;}s:34:"1232:fcbafbefuvc-qnfuobneq-frevr-r";a:2:{i:0;R:43254;i:1;R:40466;}s:34:"1232:fcbafbefuvc-qnfuobneq-frevr-s";a:2:{i:0;R:43254;i:1;R:40466;}s:34:"1232:fcbafbefuvc-qnfuobneq-frevr-t";a:2:{i:0;R:43254;i:1;R:40466;}s:34:"1232:fcbafbefuvc-qnfuobneq-frevr-u";a:2:{i:0;R:43254;i:1;R:40466;}s:34:"1232:fcbafbefuvc-qnfuobneq-frevr-v";a:2:{i:0;R:43254;i:1;R:40466;}s:34:"1232:fcbafbefuvc-qnfuobneq-frevr-w";a:2:{i:0;R:43254;i:1;R:40466;}s:34:"1232:fcbafbefuvc-qnfuobneq-frevr-x";a:2:{i:0;R:43254;i:1;R:40466;}s:60:"1232:fcbafbefuvc-qnfuobneq-frevr-arj-cntrf-pbagrag-anzrfcnpr";a:2:{i:0;R:43254;i:1;R:40466;}s:40:"1232:fcbafbefuvc-qnfuobneq-frevr-betnavp";a:2:{i:0;R:43254;i:1;R:40466;}s:41:"1232:fcbafbefuvc-qnfuobneq-frevr-ersreeny";a:2:{i:0;R:43254;i:1;R:40466;}s:48:"1232:fcbafbefuvc-qnfuobneq-frevr-pbagrag-negvpyr";a:2:{i:0;R:43254;i:1;R:40466;}s:41:"1232:fcbafbefuvc-qnfuobneq-frevr-gbcyvfgf";a:2:{i:0;R:43254;i:1;R:40466;}s:46:"1232:fcbafbefuvc-qnfuobneq-frevr-oybt-pbzzragf";a:2:{i:0;R:43254;i:1;R:40466;}s:46:"1232:fcbafbefuvc-qnfuobneq-frevr-trareny-rqvgf";a:2:{i:0;R:43254;i:1;R:40466;}s:48:"1232:fcbafbefuvc-qnfuobneq-frevr-negvpyr-rqvgf-1";a:2:{i:0;R:43254;i:1;R:40466;}s:48:"1232:fcbafbefuvc-qnfuobneq-frevr-negvpyr-rqvgf-5";a:2:{i:0;R:43254;i:1;R:40466;}s:49:"1232:fcbafbefuvc-qnfuobneq-frevr-negvpyr-rqvgf-10";a:2:{i:0;R:43254;i:1;R:40466;}s:42:"1232:fcbafbefuvc-qnfuobneq-frevr-cntrivrjf";a:2:{i:0;R:43254;i:1;R:40466;}s:39:"1232:fcbafbefuvc-qnfuobneq-frevr-pyvpxf";a:2:{i:0;R:43254;i:1;R:40466;}s:39:"1232:fcbafbefuvc-qnfuobneq-frevr-ivfvgf";a:2:{i:0;R:43254;i:1;R:40466;}s:43:"1232:fcbafbefuvc-qnfuobneq-frevr-gvzrbafvgr";a:2:{i:0;R:43254;i:1;R:40466;}s:42:"1232:fcbafbefuvc-qnfuobneq-frevr-arjivfvgf";a:2:{i:0;R:43254;i:1;R:40466;}s:40:"1232:fcbafbefuvc-qnfuobneq-frevr-obhaprf";a:2:{i:0;R:43254;i:1;R:40466;}s:41:"1232:fcbafbefuvc-qnfuobneq-frevr-ivfvgbef";a:2:{i:0;R:43254;i:1;R:40466;}s:45:"1232:fcbafbefuvc-qnfuobneq-frevr-ragenaprengr";a:2:{i:0;R:43254;i:1;R:40466;}s:48:"1232:fcbafbefuvc-qnfuobneq-frevr-havdhrcntrivrjf";a:2:{i:0;R:43254;i:1;R:40466;}s:41:"1232:fcbafbefuvc-qnfuobneq-frevr-rkvgengr";a:2:{i:0;R:43254;i:1;R:40466;}s:46:"1232:fcbafbefuvc-qnfuobneq-frevr-nitgvzrbafvgr";a:2:{i:0;R:43254;i:1;R:40466;}s:48:"1232:fcbafbefuvc-qnfuobneq-frevr-ivfvgobhaprengr";a:2:{i:0;R:43254;i:1;R:40466;}s:49:"1232:fcbafbefuvc-qnfuobneq-frevr-crepragarjivfvgf";a:2:{i:0;R:43254;i:1;R:40466;}s:48:"1232:fcbafbefuvc-qnfuobneq-frevr-betnavpfrnepurf";a:2:{i:0;R:43254;i:1;R:40466;}s:46:"1232:fcbafbefuvc-qnfuobneq-frevr-nitgvzrbacntr";a:2:{i:0;R:43254;i:1;R:40466;}s:42:"1232:fcbafbefuvc-qnfuobneq-frevr-ragenaprf";a:2:{i:0;R:43254;i:1;R:40466;}s:50:"1232:fcbafbefuvc-qnfuobneq-frevr-cntrivrjfcreivfvg";a:2:{i:0;R:43254;i:1;R:40466;}s:38:"1232:fcbafbefuvc-qnfuobneq-frevr-rkvgf";a:2:{i:0;R:43254;i:1;R:40466;}s:52:"1232:fcbafbefuvc-qnfuobneq-frevr-arjivfvgfgvzrbafvgr";a:2:{i:0;R:43254;i:1;R:40466;}s:48:"1232:fcbafbefuvc-qnfuobneq-frevr-anzrfcnpr-zrqvn";a:2:{i:0;R:43254;i:1;R:40466;}s:50:"1232:fcbafbefuvc-qnfuobneq-frevr-anzrfcnpr-fcrpvny";a:2:{i:0;R:43254;i:1;R:40466;}s:47:"1232:fcbafbefuvc-qnfuobneq-frevr-anzrfcnpr-gnyx";a:2:{i:0;R:43254;i:1;R:40466;}s:47:"1232:fcbafbefuvc-qnfuobneq-frevr-anzrfcnpr-hfre";a:2:{i:0;R:43254;i:1;R:40466;}s:52:"1232:fcbafbefuvc-qnfuobneq-frevr-anzrfcnpr-hfre_gnyx";a:2:{i:0;R:43254;i:1;R:40466;}s:50:"1232:fcbafbefuvc-qnfuobneq-frevr-anzrfcnpr-cebwrpg";a:2:{i:0;R:43254;i:1;R:40466;}s:55:"1232:fcbafbefuvc-qnfuobneq-frevr-anzrfcnpr-cebwrpg_gnyx";a:2:{i:0;R:43254;i:1;R:40466;}s:47:"1232:fcbafbefuvc-qnfuobneq-frevr-anzrfcnpr-svyr";a:2:{i:0;R:43254;i:1;R:40466;}s:52:"1232:fcbafbefuvc-qnfuobneq-frevr-anzrfcnpr-svyr_gnyx";a:2:{i:0;R:43254;i:1;R:40466;}s:52:"1232:fcbafbefuvc-qnfuobneq-frevr-anzrfcnpr-zrqvnjvxv";a:2:{i:0;R:43254;i:1;R:40466;}s:57:"1232:fcbafbefuvc-qnfuobneq-frevr-anzrfcnpr-zrqvnjvxv_gnyx";a:2:{i:0;R:43254;i:1;R:40466;}s:51:"1232:fcbafbefuvc-qnfuobneq-frevr-anzrfcnpr-grzcyngr";a:2:{i:0;R:43254;i:1;R:40466;}s:56:"1232:fcbafbefuvc-qnfuobneq-frevr-anzrfcnpr-grzcyngr_gnyx";a:2:{i:0;R:43254;i:1;R:40466;}s:47:"1232:fcbafbefuvc-qnfuobneq-frevr-anzrfcnpr-uryc";a:2:{i:0;R:43254;i:1;R:40466;}s:52:"1232:fcbafbefuvc-qnfuobneq-frevr-anzrfcnpr-uryc_gnyx";a:2:{i:0;R:43254;i:1;R:40466;}s:51:"1232:fcbafbefuvc-qnfuobneq-frevr-anzrfcnpr-pngrtbel";a:2:{i:0;R:43254;i:1;R:40466;}s:56:"1232:fcbafbefuvc-qnfuobneq-frevr-anzrfcnpr-pngrtbel_gnyx";a:2:{i:0;R:43254;i:1;R:40466;}s:54:"1232:fcbafbefuvc-qnfuobneq-frevr-anzrfcnpr-gbc_10_yvfg";a:2:{i:0;R:43254;i:1;R:40466;}s:60:"1232:fcbafbefuvc-qnfuobneq-frevr-anzrfcnpr-hfre_oybt_pbzzrag";a:2:{i:0;R:43254;i:1;R:40466;}s:52:"1232:fcbafbefuvc-qnfuobneq-frevr-anzrfcnpr-hfre_oybt";a:2:{i:0;R:43254;i:1;R:40466;}s:47:"1232:fcbafbefuvc-qnfuobneq-qrfpevcgvba-npgvivgl";a:2:{i:0;R:43254;i:1;R:40466;}s:49:"1232:fcbafbefuvc-qnfuobneq-qrfpevcgvba-ratntrzrag";a:2:{i:0;R:43254;i:1;R:40466;}s:52:"1232:fcbafbefuvc-qnfuobneq-qrfpevcgvba-cnegvpvcngvba";a:2:{i:0;R:43254;i:1;R:40466;}s:45:"1232:fcbafbefuvc-qnfuobneq-qrfpevcgvba-fbhepr";a:2:{i:0;R:43254;i:1;R:40466;}s:50:"1232:fcbafbefuvc-qnfuobneq-qrfpevcgvba-pbzcrgvgbef";a:2:{i:0;R:43254;i:1;R:40466;}s:48:"1232:fcbafbefuvc-qnfuobneq-qrfpevcgvba-vagrerfgf";a:2:{i:0;R:43254;i:1;R:40466;}s:47:"1232:fcbafbefuvc-qnfuobneq-qrfpevcgvba-xrljbeqf";a:2:{i:0;R:43254;i:1;R:40466;}s:47:"1232:fcbafbefuvc-qnfuobneq-qrfpevcgvba-ivfvgbef";a:2:{i:0;R:43254;i:1;R:40466;}s:46:"1232:fcbafbefuvc-qnfuobneq-qrfpevcgvba-genssvp";a:2:{i:0;R:43254;i:1;R:40466;}s:46:"1232:fcbafbefuvc-qnfuobneq-qrfpevcgvba-pbagrag";a:2:{i:0;R:43254;i:1;R:40466;}s:42:"1232:fcbafbefuvc-qnfuobneq-ercbeg-npgvivgl";a:2:{i:0;R:43254;i:1;R:40466;}s:44:"1232:fcbafbefuvc-qnfuobneq-ercbeg-ratntrzrag";a:2:{i:0;R:43254;i:1;R:40466;}s:47:"1232:fcbafbefuvc-qnfuobneq-ercbeg-cnegvpvcngvba";a:2:{i:0;R:43254;i:1;R:40466;}s:40:"1232:fcbafbefuvc-qnfuobneq-ercbeg-fbhepr";a:2:{i:0;R:43254;i:1;R:40466;}s:45:"1232:fcbafbefuvc-qnfuobneq-ercbeg-pbzcrgvgbef";a:2:{i:0;R:43254;i:1;R:40466;}s:43:"1232:fcbafbefuvc-qnfuobneq-ercbeg-vagrerfgf";a:2:{i:0;R:43254;i:1;R:40466;}s:42:"1232:fcbafbefuvc-qnfuobneq-ercbeg-xrljbeqf";a:2:{i:0;R:43254;i:1;R:40466;}s:42:"1232:fcbafbefuvc-qnfuobneq-ercbeg-ivfvgbef";a:2:{i:0;R:43254;i:1;R:40466;}s:41:"1232:fcbafbefuvc-qnfuobneq-ercbeg-genssvp";a:2:{i:0;R:43254;i:1;R:40466;}s:41:"1232:fcbafbefuvc-qnfuobneq-ercbeg-pbagrag";a:2:{i:0;R:43254;i:1;R:40466;}s:45:"1232:fcbafbefuvc-qnfuobneq-gno-znexrgerfrnepu";a:2:{i:0;R:43254;i:1;R:40466;}s:45:"1232:fcbafbefuvc-qnfuobneq-gno-hfreratntrzrag";a:2:{i:0;R:43254;i:1;R:40466;}s:44:"1232:fcbafbefuvc-qnfuobneq-gno-tebjguzrgevpf";a:2:{i:0;R:43254;i:1;R:40466;}s:36:"1232:fcbafbefuvc-qnfuobneq-inevnoyrf";a:2:{i:0;R:43254;i:1;R:40466;}s:41:"1232:fcbafbefuvc-qnfuobneq-bireivrj-ynory";a:2:{i:0;R:43254;i:1;R:40466;}s:43:"1232:fcbafbefuvc-qnfuobneq-bireivrj-raqqngr";a:2:{i:0;R:43254;i:1;R:40466;}s:45:"1232:fcbafbefuvc-qnfuobneq-bireivrj-fgnegqngr";a:2:{i:0;R:43254;i:1;R:40466;}s:30:"1232:fcbafbefuvc-qnfuobneq-qnl";a:2:{i:0;R:43254;i:1;R:40466;}s:32:"1232:fcbafbefuvc-qnfuobneq-zbagu";a:2:{i:0;R:43254;i:1;R:40466;}s:31:"1232:fcbafbefuvc-qnfuobneq-lrne";a:2:{i:0;R:43254;i:1;R:40466;}s:37:"1232:fcbafbefuvc-qnfuobneq-sebz-ynory";a:2:{i:0;R:43254;i:1;R:40466;}s:35:"1232:fcbafbefuvc-qnfuobneq-gb-ynory";a:2:{i:0;R:43254;i:1;R:40466;}s:53:"1232:fcbafbefuvc-qnfuobneq-reebe-abqngnsbepheeragjrrx";a:2:{i:0;R:43254;i:1;R:40466;}s:16:"1232:abg-nyybjrq";a:2:{i:0;R:43254;i:1;R:40466;}s:9:"1232:fubj";a:2:{i:0;R:43254;i:1;R:40466;}s:25:"1232:fcbafbefuvcqnfuobneq";a:2:{i:0;R:43254;i:1;R:40466;}s:38:"1232:fcbafbefuvc-qnfuobneq-pvgl-fryrpg";a:2:{i:0;R:43254;i:1;R:40466;}s:36:"1232:fcbafbefuvc-qnfuobneq-ercbeg-01";a:2:{i:0;R:43254;i:1;R:40466;}s:36:"1232:fcbafbefuvc-qnfuobneq-ercbeg-02";a:2:{i:0;R:43254;i:1;R:40466;}s:36:"1232:fcbafbefuvc-qnfuobneq-ercbeg-03";a:2:{i:0;R:43254;i:1;R:40466;}s:37:"1232:fcbafbefuvc-qnfobneq-fcrpvnycntr";a:2:{i:0;R:43254;i:1;R:40466;}s:41:"1232:fcbafbefuvc-qnfuobneq-birejvri-ynory";a:2:{i:0;R:43254;i:1;R:40466;}s:38:"1232:fcbafbefuvc-qnfuobneq-rzcgl-puneg";a:2:{i:0;R:43254;i:1;R:40466;}s:51:"1232:fcbafbefuvc-qnfuobneq-pvglanzr-naq-snzvyvnevgl";a:2:{i:0;R:43254;i:1;R:40466;}s:42:"1232:fcbafbefuvc-qnfuobneq-fnir-fhpprffshy";a:2:{i:0;R:43254;i:1;R:40466;}s:42:"1232:fcbafbefuvc-qnfuobneq-gno-ivrjercbegf";a:2:{i:0;R:43254;i:1;R:40466;}s:41:"1232:fcbafbefuvc-qnfuobneq-gno-ivrjtebhcf";a:2:{i:0;R:43254;i:1;R:40466;}s:40:"1232:fcbafbefuvc-qnfuobneq-gno-ivrjhfref";a:2:{i:0;R:43254;i:1;R:40466;}s:39:"1232:fcbafbefuvc-qnfuobneq-gno-ivrjvasb";a:2:{i:0;R:43254;i:1;R:40466;}s:36:"1232:fcbafbefuvc-qnfuobneq-tebhc-arj";a:2:{i:0;R:43254;i:1;R:40466;}s:37:"1232:fcbafbefuvc-qnfuobneq-tebhc-anzr";a:2:{i:0;R:43254;i:1;R:40466;}s:35:"1232:fcbafbefuvc-qnfuobneq-hfre-arj";a:2:{i:0;R:43254;i:1;R:40466;}s:36:"1232:fcbafbefuvc-qnfuobneq-hfre-anzr";a:2:{i:0;R:43254;i:1;R:40466;}s:36:"1232:fcbafbefuvc-qnfuobneq-hfre-glcr";a:2:{i:0;R:43254;i:1;R:40466;}s:37:"1232:fcbafbefuvc-qnfuobneq-ercbeg-arj";a:2:{i:0;R:43254;i:1;R:40466;}s:38:"1232:fcbafbefuvc-qnfuobneq-qrfpevcgvba";a:2:{i:0;R:43254;i:1;R:40466;}s:40:"1232:fcbafbefuvc-qnfuobneq-hfref-hfre-vq";a:2:{i:0;R:43254;i:1;R:40466;}s:37:"1232:fcbafbefuvc-qnfuobneq-hfref-anzr";a:2:{i:0;R:43254;i:1;R:40466;}s:39:"1232:fcbafbefuvc-qnfuobneq-hfref-fgnghf";a:2:{i:0;R:43254;i:1;R:40466;}s:37:"1232:fcbafbefuvc-qnfuobneq-hfref-glcr";a:2:{i:0;R:43254;i:1;R:40466;}s:39:"1232:fcbafbefuvc-qnfuobneq-rqvgbe-hfref";a:2:{i:0;R:43254;i:1;R:40466;}s:41:"1232:fcbafbefuvc-qnfuobneq-rqvgbe-ercbegf";a:2:{i:0;R:43254;i:1;R:40466;}s:40:"1232:fcbafbefuvc-qnfuobneq-rqvgbe-tebhcf";a:2:{i:0;R:43254;i:1;R:40466;}s:38:"1232:fcbafbefuvc-qnfuobneq-hfre-glcr-0";a:2:{i:0;R:43254;i:1;R:40466;}s:38:"1232:fcbafbefuvc-qnfuobneq-hfre-glcr-1";a:2:{i:0;R:43254;i:1;R:40466;}s:44:"1232:fcbafbefuvc-qnfuobneq-rzcgl-qrfpevcgvba";a:2:{i:0;R:43254;i:1;R:40466;}s:43:"1232:fcbafbefuvc-qnfuobneq-ercbeg-ab-fbhepr";a:2:{i:0;R:43254;i:1;R:40466;}s:45:"1232:fcbafbefuvc-qnfuobneq-ercbeg-qngn-fbhepr";a:2:{i:0;R:43254;i:1;R:40466;}s:45:"1232:fcbafbefuvc-qnfuobneq-ercbeg-qrfpevcgvba";a:2:{i:0;R:43254;i:1;R:40466;}s:39:"1232:fcbafbefuvc-qnfuobneq-ercbeg-gvgyr";a:2:{i:0;R:43254;i:1;R:40466;}s:48:"1232:fcbafbefuvc-qnfuobneq-ercbeg-qngn-serdhrapl";a:2:{i:0;R:43254;i:1;R:40466;}s:48:"1232:fcbafbefuvc-qnfuobneq-ercbeg-znk-qngr-havgf";a:2:{i:0;R:43254;i:1;R:40466;}s:46:"1232:fcbafbefuvc-qnfuobneq-ercbeg-qngr-zbaguyl";a:2:{i:0;R:43254;i:1;R:40466;}s:44:"1232:fcbafbefuvc-qnfuobneq-ercbeg-qngr-qnvyl";a:2:{i:0;R:43254;i:1;R:40466;}s:49:"1232:fcbafbefuvc-qnfuobneq-ercbeg-arj-fbhepr-tncv";a:2:{i:0;R:43254;i:1;R:40466;}s:56:"1232:fcbafbefuvc-qnfuobneq-ercbeg-arj-fbhepr-tncv-phfgbz";a:2:{i:0;R:43254;i:1;R:40466;}s:50:"1232:fcbafbefuvc-qnfuobneq-ercbeg-arj-fbhepr-fgngf";a:2:{i:0;R:43254;i:1;R:40466;}s:51:"1232:fcbafbefuvc-qnfuobneq-ercbeg-arj-fbhepr-barqbg";a:2:{i:0;R:43254;i:1;R:40466;}s:33:"1232:fcbafbefuvc-qnfuobneq-pnapry";a:2:{i:0;R:43254;i:1;R:40466;}s:31:"1232:fcbafbefuvc-qnfuobneq-fnir";a:2:{i:0;R:43254;i:1;R:40466;}s:34:"1232:fcbafbefuvc-qnfuobneq-cerivrj";a:2:{i:0;R:43254;i:1;R:40466;}s:31:"1232:fcbafbefuvc-qnfuobneq-rqvg";a:2:{i:0;R:43254;i:1;R:40466;}s:38:"1232:fcbafbefuvc-qnfuobneq-0-zrnaf-nyy";a:2:{i:0;R:43254;i:1;R:40466;}s:48:"1232:fcbafbefuvc-qnfuobneq-ercbeg-trareny-cgvbaf";a:2:{i:0;R:43254;i:1;R:40466;}s:32:"1232:fcbafbefuvc-qnfuobneq-tebhc";a:2:{i:0;R:43254;i:1;R:40466;}s:41:"1232:fcbafbefuvc-qnfuobneq-fbhepr-qvfpneq";a:2:{i:0;R:43254;i:1;R:40466;}s:44:"1232:fcbafbefuvc-qnfuobneq-fbhepr-qngnfbhepr";a:2:{i:0;R:43254;i:1;R:40466;}s:41:"1232:fcbafbefuvc-qnfuobneq-fbhepr-zrgevpf";a:2:{i:0;R:43254;i:1;R:40466;}s:49:"1232:fcbafbefuvc-qnfuobneq-fbhepr-tbbtyrnanylgvpf";a:2:{i:0;R:43254;i:1;R:40466;}s:40:"1232:fcbafbefuvc-qnfuobneq-fbhepr-barqbg";a:2:{i:0;R:43254;i:1;R:40466;}s:40:"1232:fcbafbefuvc-qnfuobneq-fbhepr-zbovyr";a:2:{i:0;R:43254;i:1;R:40466;}s:44:"1232:fcbafbefuvc-qnfuobneq-fbhepr-jvxvnfgngf";a:2:{i:0;R:43254;i:1;R:40466;}s:43:"1232:fcbafbefuvc-qnfuobneq-fbhepr-inevnoyrf";a:2:{i:0;R:43254;i:1;R:40466;}s:54:"1232:fcbafbefuvc-qnfuobneq-fbhepr-nqqvgvbany-qvzrafvba";a:2:{i:0;R:43254;i:1;R:40466;}s:38:"1232:fcbafbefuvc-qnfuobneq-fbhepr-abar";a:2:{i:0;R:43254;i:1;R:40466;}s:41:"1232:fcbafbefuvc-qnfuobneq-fbhepr-qrsnhyg";a:2:{i:0;R:43254;i:1;R:40466;}s:50:"1232:fcbafbefuvc-qnfuobneq-fbhepr-va-pnfr-bs-rzcgl";a:2:{i:0;R:43254;i:1;R:40466;}s:45:"1232:fcbafbefuvc-qnfuobneq-fbhepr-yrnir-rzcgl";a:2:{i:0;R:43254;i:1;R:40466;}s:39:"1232:fcbafbefuvc-qnfuobneq-fbhepr-jvxvf";a:2:{i:0;R:43254;i:1;R:40466;}s:43:"1232:fcbafbefuvc-qnfuobneq-fbhepr-znva-jvxv";a:2:{i:0;R:43254;i:1;R:40466;}s:38:"1232:fcbafbefuvc-qnfuobneq-fbhepr-yvfg";a:2:{i:0;R:43254;i:1;R:40466;}s:44:"1232:fcbafbefuvc-qnfuobneq-gbc-k-pbzcrgvgbef";a:2:{i:0;R:43254;i:1;R:40466;}s:55:"1232:fcbafbefuvc-qnfuobneq-fbhepr-ahzore-bs-pbzcrgvgbef";a:2:{i:0;R:43254;i:1;R:40466;}s:41:"1232:fcbafbefuvc-qnfuobneq-fbhepr-jvxv-vq";a:2:{i:0;R:43254;i:1;R:40466;}s:40:"1232:fcbafbefuvc-qnfuobneq-fbhepr-uho-vq";a:2:{i:0;R:43254;i:1;R:40466;}s:54:"1232:fcbafbefuvc-qnfuobneq-fbhepr-cntrivrjf-anzrfcnprf";a:2:{i:0;R:43254;i:1;R:40466;}s:46:"1232:fcbafbefuvc-qnfuobneq-ercbeg-qngn-fbheprf";a:2:{i:0;R:43254;i:1;R:40466;}s:40:"1232:fcbafbefuvc-qnfuobneq-zbovyr-frevr-";a:2:{i:0;R:43254;i:1;R:40466;}s:51:"1232:fcbafbefuvc-qnfuobneq-ercbeg-arj-fbhepr-zbovyr";a:2:{i:0;R:43254;i:1;R:40466;}s:62:"1232:fcbafbefuvc-qnfuobneq-zbovyr-frevr-yvfg_pngrtbel_pbagragf";a:2:{i:0;R:43254;i:1;R:40466;}s:50:"1232:fcbafbefuvc-qnfuobneq-zbovyr-frevr-yvfg_tnzrf";a:2:{i:0;R:43254;i:1;R:40466;}s:58:"1232:fcbafbefuvc-qnfuobneq-zbovyr-frevr-yvfg_jvxv_pbagragf";a:2:{i:0;R:43254;i:1;R:40466;}s:52:"1232:fcbafbefuvc-qnfuobneq-zbovyr-frevr-ybpny_frnepu";a:2:{i:0;R:43254;i:1;R:40466;}s:47:"1232:fcbafbefuvc-qnfuobneq-zbovyr-frevr-naqebvq";a:2:{i:0;R:43254;i:1;R:40466;}s:46:"1232:fcbafbefuvc-qnfuobneq-zbovyr-frevr-vcubar";a:2:{i:0;R:43254;i:1;R:40466;}s:49:"1232:fcbafbefuvc-qnfuobneq-zbovyr-frevr-haqrsvarq";a:2:{i:0;R:43254;i:1;R:40466;}s:50:"1232:fcbafbefuvc-qnfuobneq-zbovyr-frevr-tnzrthvqrf";a:2:{i:0;R:43254;i:1;R:40466;}s:41:"1232:fcbafbefuvc-qnfuobneq-fbhepr-npgvbaf";a:2:{i:0;R:43254;i:1;R:40466;}s:36:"1232:fcbafbefuvc-qnfuobneq-fbhepr-bf";a:2:{i:0;R:43254;i:1;R:40466;}s:37:"1232:fcbafbefuvc-qnfuobneq-fbhepr-ncc";a:2:{i:0;R:43254;i:1;R:40466;}s:38:"1232:fcbafbefuvc-qnfuobneq-ercbeg-anzr";a:2:{i:0;R:43254;i:1;R:40466;}s:45:"1232:fcbafbefuvc-qnfuobneq-fbhepr-jvxv-ncc-vq";a:2:{i:0;R:43254;i:1;R:40466;}s:44:"1232:fcbafbefuvc-qnfuobneq-fbhepr-frevr-anzr";a:2:{i:0;R:43254;i:1;R:40466;}s:52:"1232:fcbafbefuvc-qnfuobneq-fbhepr-tncv-sbepr-nppbhag";a:2:{i:0;R:43254;i:1;R:40466;}s:39:"1232:fcbafbefuvc-qnfuobneq-fbhepr-dhrel";a:2:{i:0;R:43254;i:1;R:40466;}s:42:"1232:fcbafbefuvc-qnfuobneq-fbhepr-tncv-hey";a:2:{i:0;R:43254;i:1;R:40466;}s:43:"1232:fcbafbefuvc-qnfuobneq-fbhepr-tncv-anzr";a:2:{i:0;R:43254;i:1;R:40466;}s:45:"1232:fcbafbefuvc-qnfuobneq-qrsnhyg-cntr-gvgyr";a:2:{i:0;R:43254;i:1;R:40466;}s:44:"1232:fcbafbefuvc-qnfuobneq-ercbeg-cntr-gvgyr";a:2:{i:0;R:43254;i:1;R:40466;}s:42:"1232:fcbafbefuvc-qnfuobneq-pnpurqngr-ynory";a:2:{i:0;R:43254;i:1;R:40466;}s:40:"1232:fcbafbefuvc-qnfuobneq-bgure-bcgvbaf";a:2:{i:0;R:43254;i:1;R:40466;}s:41:"1232:fcbafbefuvc-qnfuobneq-qbjaybnq-puneg";a:2:{i:0;R:43254;i:1;R:40466;}s:52:"1232:fcbafbefuvc-qnfuobneq-sebz-purpxobk-fubj-geraqf";a:2:{i:0;R:43254;i:1;R:40466;}s:45:"1232:fcbafbefuvc-qnfuobneq-gnoyr-pbyyhza-qngr";a:2:{i:0;R:43254;i:1;R:40466;}s:38:"1232:fcbafbefuvc-qnfuobneq-hfref-reebe";a:2:{i:0;R:43254;i:1;R:40466;}s:38:"1232:fcbafbefuvc-qnfuboneq-abg-nyybjrq";a:2:{i:0;R:43254;i:1;R:40466;}s:39:"1232:fcbafbefuvc-qnfuobneq-qbjaybnq-pfi";a:2:{i:0;R:43254;i:1;R:40466;}s:38:"1232:fcbafbefuvc-qnfuobneq-fnir-nf-arj";a:2:{i:0;R:43254;i:1;R:40466;}s:40:"1232:fcbafbefuvc-qnfuobneq-fbhepr-tybony";a:2:{i:0;R:43254;i:1;R:40466;}s:46:"1232:fcbafbefuvc-qnfuobneq-fbhepr-znk-ryrzragf";a:2:{i:0;R:43254;i:1;R:40466;}s:35:"1232:fcbafbefuvc-qnfuobneq-pbzcyrng";a:2:{i:0;R:43254;i:1;R:40466;}s:37:"1232:fcbafbefuvc-qnfuobneq-fryrpg-nyy";a:2:{i:0;R:43254;i:1;R:40466;}s:39:"1232:fcbafbefuvc-qnfuobneq-qrfryrpg-nyy";a:2:{i:0;R:43254;i:1;R:40466;}s:35:"1232:fcbafbefuvc-qnfuobneq-qbjaybnq";a:2:{i:0;R:43254;i:1;R:40466;}s:18:"1232:fgnssybt-qrfp";a:2:{i:0;s:14:"wikia-stafflog";i:1;R:40466;}s:13:"1232:fgnssybt";a:2:{i:0;R:43460;i:1;R:40466;}s:22:"1232:fgnssybt-oybpxzft";a:2:{i:0;R:43460;i:1;R:40466;}s:31:"1232:fgnssybt-cvttlonpxybtvazft";a:2:{i:0;R:43460;i:1;R:40466;}s:32:"1232:fgnssybt-cvttlonpxybtbhgzft";a:2:{i:0;R:43460;i:1;R:40466;}s:19:"1232:evtug-fgnssybt";a:2:{i:0;R:43460;i:1;R:40466;}s:32:"1232:fgnssybt-jvxv-fgnghf-punatr";a:2:{i:0;R:43460;i:1;R:40466;}s:26:"1232:fgnssybt-svygre-ynory";a:2:{i:0;R:43460;i:1;R:40466;}s:25:"1232:fgnssybt-svygre-hfre";a:2:{i:0;R:43460;i:1;R:40466;}s:25:"1232:fgnssybt-svygre-glcr";a:2:{i:0;R:43460;i:1;R:40466;}s:26:"1232:fgnssybt-svygre-nccyl";a:2:{i:0;R:43460;i:1;R:40466;}s:31:"1232:fgnssybt-svygre-glcr-oybpx";a:2:{i:0;R:43460;i:1;R:40466;}s:35:"1232:fgnssybt-svygre-glcr-cvttlonpx";a:2:{i:0;R:43460;i:1;R:40466;}s:36:"1232:fgnssybt-svygre-glcr-eranzrhfre";a:2:{i:0;R:43460;i:1;R:40466;}s:37:"1232:fgnssybt-svygre-glcr-jvxvsnpgbel";a:2:{i:0;R:43460;i:1;R:40466;}s:32:"1232:fgnsscbjref-vcoybpx-nobegrq";a:2:{i:0;s:17:"wikia-staffpowers";i:1;R:40466;}s:15:"1232:gntfercbeg";a:2:{i:0;s:16:"wikia-tagsreport";i:1;R:40466;}s:20:"1232:gntfercbeggvgyr";a:2:{i:0;R:43478;i:1;R:40466;}s:24:"1232:gntfercbegfryrpggnt";a:2:{i:0;R:43478;i:1;R:40466;}s:17:"1232:gntfercbegtb";a:2:{i:0;R:43478;i:1;R:40466;}s:25:"1232:gntfercbegabgfcrpvsl";a:2:{i:0;R:43478;i:1;R:40466;}s:24:"1232:gntfercbegaberfhygf";a:2:{i:0;R:43478;i:1;R:40466;}s:25:"1232:gntfercbegznvaafcnpr";a:2:{i:0;R:43478;i:1;R:40466;}s:20:"1232:gntfercbegcntrf";a:2:{i:0;R:43478;i:1;R:40466;}s:25:"1232:gntfercbegcntrfsbhaq";a:2:{i:0;R:43478;i:1;R:40466;}s:24:"1232:gntfercbegtrarengrq";a:2:{i:0;R:43478;i:1;R:40466;}s:16:"1232:gnfxznantre";a:2:{i:0;s:17:"wikia-taskmanager";i:1;R:40466;}s:22:"1232:gnfxznantre_gvgyr";a:2:{i:0;R:43489;i:1;R:40466;}s:25:"1232:gnfxznantre_gnfxyvfg";a:2:{i:0;R:43489;i:1;R:40466;}s:22:"1232:evtug-gnfxznantre";a:2:{i:0;R:43489;i:1;R:40466;}s:29:"1232:evtug-gnfxznantre-npgvba";a:2:{i:0;R:43489;i:1;R:40466;}s:14:"1232:grkgertrk";a:2:{i:0;s:15:"wikia-textregex";i:1;R:40466;}s:19:"1232:grkgertrk-qrfp";a:2:{i:0;R:43495;i:1;R:40466;}s:25:"1232:grkgertrk-cntr-gvgyr";a:2:{i:0;R:43495;i:1;R:40466;}s:31:"1232:grkgertrk-reebe-haoybpxvat";a:2:{i:0;R:43495;i:1;R:40466;}s:32:"1232:grkgertrk-pheeragyl-oybpxrq";a:2:{i:0;R:43495;i:1;R:40466;}s:34:"1232:grkgertrk_abpheeragyl-oybpxrq";a:2:{i:0;R:43495;i:1;R:40466;}s:27:"1232:grkgertrk-nqqrqol-hfre";a:2:{i:0;R:43495;i:1;R:40466;}s:25:"1232:grkgertrk-erzbir-hey";a:2:{i:0;R:43495;i:1;R:40466;}s:24:"1232:grkgertrk-fgngf-hey";a:2:{i:0;R:43495;i:1;R:40466;}s:27:"1232:grkgertrk-haoybpx-fhpp";a:2:{i:0;R:43495;i:1;R:40466;}s:25:"1232:grkgertrk-oybpx-fhpp";a:2:{i:0;R:43495;i:1;R:40466;}s:30:"1232:grkgertrk-haoybpx-zrffntr";a:2:{i:0;R:43495;i:1;R:40466;}s:28:"1232:grkgertrk-oybpx-zrffntr";a:2:{i:0;R:43495;i:1;R:40466;}s:26:"1232:grkgertrk-ertrk-oybpx";a:2:{i:0;R:43495;i:1;R:40466;}s:27:"1232:grkgertrk-fhozvg-ertrk";a:2:{i:0;R:43495;i:1;R:40466;}s:26:"1232:grkgertrk-rzcgl-ertrk";a:2:{i:0;R:43495;i:1;R:40466;}s:28:"1232:grkgertrk-vainyvq-ertrk";a:2:{i:0;R:43495;i:1;R:40466;}s:28:"1232:grkgertrk-nyernql-nqqrq";a:2:{i:0;R:43495;i:1;R:40466;}s:27:"1232:grkgertrk-abqngn-sbhaq";a:2:{i:0;R:43495;i:1;R:40466;}s:27:"1232:grkgertrk-fgngf-erpbeq";a:2:{i:0;R:43495;i:1;R:40466;}s:29:"1232:grkgertrk-fryrpg-fhocntr";a:2:{i:0;R:43495;i:1;R:40466;}s:29:"1232:grkgertrk-fryrpg-qrsnhyg";a:2:{i:0;R:43495;i:1;R:40466;}s:29:"1232:grkgertrk-perngr-fhocntr";a:2:{i:0;R:43495;i:1;R:40466;}s:31:"1232:grkgertrk-fryrpg-ertrkyvfg";a:2:{i:0;R:43495;i:1;R:40466;}s:30:"1232:grkgertrk-vainyvq-ertrkvq";a:2:{i:0;R:43495;i:1;R:40466;}s:32:"1232:grkgertrk-cuenfr-fgngvfgvpf";a:2:{i:0;R:43495;i:1;R:40466;}s:30:"1232:grkgertrk-erghea-znvacntr";a:2:{i:0;R:43495;i:1;R:40466;}s:21:"1232:gurzrqrfvtare-be";a:2:{i:0;s:19:"wikia-themedesigner";i:1;R:40466;}s:23:"1232:gurzrqrfvtare-qrfp";a:2:{i:0;R:43523;i:1;R:40466;}s:24:"1232:gurzrqrfvtare-gvgyr";a:2:{i:0;R:43523;i:1;R:40466;}s:29:"1232:gurzrqrfvtare-onpxtebhaq";a:2:{i:0;R:43523;i:1;R:40466;}s:23:"1232:gurzrqrfvtare-cntr";a:2:{i:0;R:43523;i:1;R:40466;}s:24:"1232:gurzrqrfvtare-pbybe";a:2:{i:0;R:43523;i:1;R:40466;}s:26:"1232:gurzrqrfvtare-tencuvp";a:2:{i:0;R:43523;i:1;R:40466;}s:26:"1232:gurzrqrfvtare-ohggbaf";a:2:{i:0;R:43523;i:1;R:40466;}s:24:"1232:gurzrqrfvtare-yvaxf";a:2:{i:0;R:43523;i:1;R:40466;}s:25:"1232:gurzrqrfvtare-urnqre";a:2:{i:0;R:43523;i:1;R:40466;}s:32:"1232:gurzrqrfvtare-grkg-jbeqznex";a:2:{i:0;R:43523;i:1;R:40466;}s:35:"1232:gurzrqrfvtare-tencuvp-jbeqznex";a:2:{i:0;R:43523;i:1;R:40466;}s:24:"1232:gurzrqrfvtare-fznyy";a:2:{i:0;R:43523;i:1;R:40466;}s:25:"1232:gurzrqrfvtare-zrqvhz";a:2:{i:0;R:43523;i:1;R:40466;}s:24:"1232:gurzrqrfvtare-ynetr";a:2:{i:0;R:43523;i:1;R:40466;}s:34:"1232:gurzrqrfvtare-gvyr-onpxtebhaq";a:2:{i:0;R:43523;i:1;R:40466;}s:33:"1232:gurzrqrfvtare-svk-onpxtebhaq";a:2:{i:0;R:43523;i:1;R:40466;}s:31:"1232:gurzrqrfvtare-genafcnerapl";a:2:{i:0;R:43523;i:1;R:40466;}s:28:"1232:gurzrqrfvtare-gno-gurzr";a:2:{i:0;R:43523;i:1;R:40466;}s:32:"1232:gurzrqrfvtare-gno-phfgbzvmr";a:2:{i:0;R:43523;i:1;R:40466;}s:31:"1232:gurzrqrfvtare-gno-jbeqznex";a:2:{i:0;R:43523;i:1;R:40466;}s:31:"1232:gurzrqrfvtare-cerivrj-zbqr";a:2:{i:0;R:43523;i:1;R:40466;}s:36:"1232:gurzrqrfvtare-cerivbhf-irefvbaf";a:2:{i:0;R:43523;i:1;R:40466;}s:38:"1232:gurzrqrfvtare-ohggba-fnir-vz-qbar";a:2:{i:0;R:43523;i:1;R:40466;}s:32:"1232:gurzrqrfvtare-ohggba-pnapry";a:2:{i:0;R:43523;i:1;R:40466;}s:31:"1232:gurzrqrfvtare-cvpx-n-pbybe";a:2:{i:0;R:43523;i:1;R:40466;}s:33:"1232:gurzrqrfvtare-ragre-lbhe-bja";a:2:{i:0;R:43523;i:1;R:40466;}s:41:"1232:gurzrqrfvtare-pbybe-anzr-be-urk-pbqr";a:2:{i:0;R:43523;i:1;R:40466;}s:28:"1232:gurzrqrfvtare-ohggba-bx";a:2:{i:0;R:43523;i:1;R:40466;}s:32:"1232:gurzrqrfvtare-cvpx-na-vzntr";a:2:{i:0;R:43523;i:1;R:40466;}s:40:"1232:gurzrqrfvtare-qbag-hfr-n-onpxtebhaq";a:2:{i:0;R:43523;i:1;R:40466;}s:34:"1232:gurzrqrfvtare-hcybnq-lbhe-bja";a:2:{i:0;R:43523;i:1;R:40466;}s:32:"1232:gurzrqrfvtare-ohggba-hcybnq";a:2:{i:0;R:43523;i:1;R:40466;}s:41:"1232:gurzrqrfvtare-ohggba-hcybnq-jbeqznex";a:2:{i:0;R:43523;i:1;R:40466;}s:35:"1232:gurzrqrfvtare-ehyrf-onpxtebhaq";a:2:{i:0;R:43523;i:1;R:40466;}s:26:"1232:gurzrqrfvtare-qrsnhyg";a:2:{i:0;R:43523;i:1;R:40466;}s:23:"1232:gurzrqrfvtare-sbag";a:2:{i:0;R:43523;i:1;R:40466;}s:23:"1232:gurzrqrfvtare-fvmr";a:2:{i:0;R:43523;i:1;R:40466;}s:30:"1232:gurzrqrfvtare-ohggba-fnir";a:2:{i:0;R:43523;i:1;R:40466;}s:35:"1232:gurzrqrfvtare-hcybnq-n-tencuvp";a:2:{i:0;R:43523;i:1;R:40466;}s:33:"1232:gurzrqrfvtare-ehyrf-jbeqznex";a:2:{i:0;R:43523;i:1;R:40466;}s:32:"1232:gurzrqrfvtare-ehyrf-snivpba";a:2:{i:0;R:43523;i:1;R:40466;}s:48:"1232:gurzrqrfvtare-ehyrf-snivpba-yrnea-zber-yvax";a:2:{i:0;R:43523;i:1;R:40466;}s:37:"1232:gurzrqrfvtare-qbag-hfr-n-tencuvp";a:2:{i:0;R:43523;i:1;R:40466;}s:31:"1232:gurzrqrfvtare-uvfgbel-vgrz";a:2:{i:0;R:43523;i:1;R:40466;}s:37:"1232:gurzrqrfvtare-ohggba-punatr-grkg";a:2:{i:0;R:43523;i:1;R:40466;}s:25:"1232:gurzrqrfvtare-ernfba";a:2:{i:0;R:43523;i:1;R:40466;}s:29:"1232:gurzrqrfvtare-fvmr-reebe";a:2:{i:0;R:43523;i:1;R:40466;}s:35:"1232:gurzrqrfvtare-qvzrafvbaf-reebe";a:2:{i:0;R:43523;i:1;R:40466;}s:29:"1232:gurzrqrfvtare-glcr-reebe";a:2:{i:0;R:43523;i:1;R:40466;}s:31:"1232:gurzrqrfhtore-hxabja-reebe";a:2:{i:0;R:43523;i:1;R:40466;}s:38:"1232:gurzrqrfvtare-znahny-hcybnq-reebe";a:2:{i:0;R:43523;i:1;R:40466;}s:34:"1232:gurzrqrfvtare-snivpba-urnqvat";a:2:{i:0;R:43523;i:1;R:40466;}s:34:"1232:gurzrqrfvtare-jbqznex-cerivrj";a:2:{i:0;R:43523;i:1;R:40466;}s:22:"1232:gurbelgno-fhocntr";a:2:{i:0;s:15:"wikia-theorytab";i:1;R:40466;}s:20:"1232:gurbelgno-gvgyr";a:2:{i:0;R:43578;i:1;R:40466;}s:27:"1232:gurbelgno-cnerag-gvgyr";a:2:{i:0;R:43578;i:1;R:40466;}s:26:"1232:gvzrntbzrffntvat-qrfp";a:2:{i:0;s:22:"wikia-timeagomessaging";i:1;R:40466;}s:16:"1232:gvzrntb-qnl";a:2:{i:0;R:43582;i:1;R:40466;}s:17:"1232:gvzrntb-ubhe";a:2:{i:0;R:43582;i:1;R:40466;}s:19:"1232:gvzrntb-zvahgr";a:2:{i:0;R:43582;i:1;R:40466;}s:18:"1232:gvzrntb-zbagu";a:2:{i:0;R:43582;i:1;R:40466;}s:19:"1232:gvzrntb-frpbaq";a:2:{i:0;R:43582;i:1;R:40466;}s:18:"1232:gbcyvfgf-qrfp";a:2:{i:0;s:14:"wikia-toplists";i:1;R:40466;}s:36:"1232:evtug-gbcyvfgf-perngr-rqvg-yvfg";a:2:{i:0;R:43589;i:1;R:40466;}s:31:"1232:evtug-gbcyvfgf-perngr-vgrz";a:2:{i:0;R:43589;i:1;R:40466;}s:29:"1232:evtug-gbcyvfgf-rqvg-vgrz";a:2:{i:0;R:43589;i:1;R:40466;}s:31:"1232:evtug-gbcyvfgf-qryrgr-vgrz";a:2:{i:0;R:43589;i:1;R:40466;}s:18:"1232:perngrgbcyvfg";a:2:{i:0;R:43589;i:1;R:40466;}s:16:"1232:rqvggbcyvfg";a:2:{i:0;R:43589;i:1;R:40466;}s:22:"1232:gbcyvfgf-pngrtbel";a:2:{i:0;R:43589;i:1;R:40466;}s:33:"1232:gbcyvfgf-reebe-vainyvq-gvgyr";a:2:{i:0;R:43589;i:1;R:40466;}s:35:"1232:gbcyvfgf-reebe-vainyvq-cvpgher";a:2:{i:0;R:43589;i:1;R:40466;}s:32:"1232:gbcyvfgf-reebe-gvgyr-rkvfgf";a:2:{i:0;R:43589;i:1;R:40466;}s:30:"1232:gbcyvfgf-reebe-gvgyr-fcnz";a:2:{i:0;R:43589;i:1;R:40466;}s:35:"1232:gbcyvfgf-reebe-negvpyr-oybpxrq";a:2:{i:0;R:43589;i:1;R:40466;}s:38:"1232:gbcyvfgf-reebe-negvpyr-abg-rkvfgf";a:2:{i:0;R:43589;i:1;R:40466;}s:38:"1232:gbcyvfgf-reebe-cvpgher-abg-rkvfgf";a:2:{i:0;R:43589;i:1;R:40466;}s:36:"1232:gbcyvfgf-reebe-qhcyvpngrq-ragel";a:2:{i:0;R:43589;i:1;R:40466;}s:35:"1232:gbcyvfgf-reebe-rzcgl-vgrz-anzr";a:2:{i:0;R:43589;i:1;R:40466;}s:32:"1232:gbcyvfgf-vgrz-pnaabg-qryrgr";a:2:{i:0;R:43589;i:1;R:40466;}s:40:"1232:gbcyvfgf-reebe-vzntr-nyernql-rkvfgf";a:2:{i:0;R:43589;i:1;R:40466;}s:33:"1232:gbcyvfgf-reebe-nqq-vgrz-naba";a:2:{i:0;R:43589;i:1;R:40466;}s:39:"1232:gbcyvfgf-reebe-nqq-vgrz-crezvffvba";a:2:{i:0;R:43589;i:1;R:40466;}s:44:"1232:gbcyvfgf-reebe-nqq-vgrz-yvfg-abg-rkvfgf";a:2:{i:0;R:43589;i:1;R:40466;}s:34:"1232:gbcyvfgf-hcybnq-reebe-haxabja";a:2:{i:0;R:43589;i:1;R:40466;}s:32:"1232:gbcyvfgf-rqvgbe-gvgyr-ynory";a:2:{i:0;R:43589;i:1;R:40466;}s:38:"1232:gbcyvfgf-rqvgbe-gvgyr-cynprubyqre";a:2:{i:0;R:43589;i:1;R:40466;}s:42:"1232:gbcyvfgf-rqvgbe-eryngrq-negvpyr-ynory";a:2:{i:0;R:43589;i:1;R:40466;}s:48:"1232:gbcyvfgf-rqvgbe-eryngrq-negvpyr-cynprubyqre";a:2:{i:0;R:43589;i:1;R:40466;}s:45:"1232:gbcyvfgf-rqvgbe-fbpvny-qrfpevcgvba-ynory";a:2:{i:0;R:43589;i:1;R:40466;}s:51:"1232:gbcyvfgf-rqvgbe-fbpvny-qrfpevcgvba-cynprubyqre";a:2:{i:0;R:43589;i:1;R:40466;}s:42:"1232:gbcyvfgf-rqvgbe-vzntr-oebjfre-gbbygvc";a:2:{i:0;R:43589;i:1;R:40466;}s:40:"1232:gbcyvfgf-rqvgbe-erzbir-vgrz-gbbygvc";a:2:{i:0;R:43589;i:1;R:40466;}s:38:"1232:gbcyvfgf-rqvgbe-qent-vgrz-gbbygvc";a:2:{i:0;R:43589;i:1;R:40466;}s:35:"1232:gbcyvfgf-rqvgbe-nqq-vgrz-ynory";a:2:{i:0;R:43589;i:1;R:40466;}s:37:"1232:gbcyvfgf-rqvgbe-nqq-vgrz-gbbygvc";a:2:{i:0;R:43589;i:1;R:40466;}s:27:"1232:gbcyvfgf-perngr-ohggba";a:2:{i:0;R:43589;i:1;R:40466;}s:27:"1232:gbcyvfgf-hcqngr-ohggba";a:2:{i:0;R:43589;i:1;R:40466;}s:27:"1232:gbcyvfgf-pnapry-ohggba";a:2:{i:0;R:43589;i:1;R:40466;}s:27:"1232:gbcyvfgf-vgrzf-erzbirq";a:2:{i:0;R:43589;i:1;R:40466;}s:27:"1232:gbcyvfgf-vgrzf-perngrq";a:2:{i:0;R:43589;i:1;R:40466;}s:27:"1232:gbcyvfgf-vgrzf-hcqngrq";a:2:{i:0;R:43589;i:1;R:40466;}s:28:"1232:gbcyvfgf-vgrzf-abpunatr";a:2:{i:0;R:43589;i:1;R:40466;}s:46:"1232:gbcyvgf-vzntr-oebjfre-ab-cvpgher-fryrpgrq";a:2:{i:0;R:43589;i:1;R:40466;}s:40:"1232:gbcyvgf-vzntr-oebjfre-pyrne-cvpgher";a:2:{i:0;R:43589;i:1;R:40466;}s:43:"1232:gbcyvgf-vzntr-oebjfre-fryrpgrq-cvpgher";a:2:{i:0;R:43589;i:1;R:40466;}s:38:"1232:gbcyvfgf-vzntr-oebjfre-hcybnq-oga";a:2:{i:0;R:43589;i:1;R:40466;}s:40:"1232:gbcyvfgf-vzntr-oebjfre-hcybnq-ynory";a:2:{i:0;R:43589;i:1;R:40466;}s:35:"1232:gbcyvfgf-yvfg-perngvba-fhzznel";a:2:{i:0;R:43589;i:1;R:40466;}s:33:"1232:gbcyvfgf-yvfg-hcqngr-fhzznel";a:2:{i:0;R:43589;i:1;R:40466;}s:35:"1232:gbcyvfgf-vgrz-perngvba-fhzznel";a:2:{i:0;R:43589;i:1;R:40466;}s:33:"1232:gbcyvfgf-vgrz-hcqngr-fhzznel";a:2:{i:0;R:43589;i:1;R:40466;}s:33:"1232:gbcyvfgf-vgrz-erzbir-fhzznel";a:2:{i:0;R:43589;i:1;R:40466;}s:27:"1232:gbcyvfgf-vgrz-erfgberq";a:2:{i:0;R:43589;i:1;R:40466;}s:29:"1232:gbcyvfgf-yvfg-eryngrq-gb";a:2:{i:0;R:43589;i:1;R:40466;}s:28:"1232:gbcyvfgf-yvfg-ibgrf-ahz";a:2:{i:0;R:43589;i:1;R:40466;}s:29:"1232:gbcyvfgf-yvfg-perngrq-ol";a:2:{i:0;R:43589;i:1;R:40466;}s:26:"1232:gbcyvfgf-yvfg-ibgr-hc";a:2:{i:0;R:43589;i:1;R:40466;}s:32:"1232:gbcyvfgf-yvfg-ubgvgrz-pbhag";a:2:{i:0;R:43589;i:1;R:40466;}s:33:"1232:gbcyvfgf-yvfg-nqq-vgrz-ynory";a:2:{i:0;R:43589;i:1;R:40466;}s:38:"1232:gbcyvfgf-yvfg-nqq-vgrz-anzr-ynory";a:2:{i:0;R:43589;i:1;R:40466;}s:29:"1232:gbcyvfgf-yvfg-vgrz-ibgrq";a:2:{i:0;R:43589;i:1;R:40466;}s:37:"1232:gbcyvfgf-perngrcntr-qvnybt-ynory";a:2:{i:0;R:43589;i:1;R:40466;}s:27:"1232:gbcyvfgf-rznvy-fhowrpg";a:2:{i:0;R:43589;i:1;R:40466;}s:24:"1232:gbcyvfgf-rznvy-obql";a:2:{i:0;R:43589;i:1;R:40466;}s:21:"1232:gbcyvfgf-frpbaqf";a:2:{i:0;R:43589;i:1;R:40466;}s:21:"1232:gbcyvfgf-zvahgrf";a:2:{i:0;R:43589;i:1;R:40466;}s:19:"1232:gbcyvfgf-ubhef";a:2:{i:0;R:43589;i:1;R:40466;}s:18:"1232:gbcyvfgf-qnlf";a:2:{i:0;R:43589;i:1;R:40466;}s:19:"1232:gbcyvfgf-jrrxf";a:2:{i:0;R:43589;i:1;R:40466;}s:39:"1232:gbcyvfgf-zft-so-baengrnegvpyr-yvax";a:2:{i:0;R:43589;i:1;R:40466;}s:40:"1232:gbcyvfgf-zft-so-baengrnegvpyr-fubeg";a:2:{i:0;R:43589;i:1;R:40466;}s:34:"1232:gbcyvfgf-zft-so-baengrnegvpyr";a:2:{i:0;R:43589;i:1;R:40466;}s:28:"1232:gbcyvfgf-perngr-urnqvat";a:2:{i:0;R:43589;i:1;R:40466;}s:31:"1232:gbcyvfgf-perngr-ohggba-zft";a:2:{i:0;R:43589;i:1;R:40466;}s:16:"1232:hafhofpevor";a:2:{i:0;s:17:"wikia-unsubscribe";i:1;R:40466;}s:26:"1232:hafhofpevor-onqnpprff";a:2:{i:0;R:43663;i:1;R:40466;}s:25:"1232:hafhofpevor-onqgbxra";a:2:{i:0;R:43663;i:1;R:40466;}s:25:"1232:hafhofpevor-onqrznvy";a:2:{i:0;R:43663;i:1;R:40466;}s:24:"1232:hafhofpevor-onqgvzr";a:2:{i:0;R:43663;i:1;R:40466;}s:24:"1232:hafhofpevor-abhfref";a:2:{i:0;R:43663;i:1;R:40466;}s:28:"1232:hafhofpevor-abpbashfref";a:2:{i:0;R:43663;i:1;R:40466;}s:31:"1232:hafhofpevor-pbasvez-yrtraq";a:2:{i:0;R:43663;i:1;R:40466;}s:29:"1232:hafhofpevor-pbasvez-grkg";a:2:{i:0;R:43663;i:1;R:40466;}s:31:"1232:hafhofpevor-pbasvez-ohggba";a:2:{i:0;R:43663;i:1;R:40466;}s:24:"1232:hafhofpevor-jbexvat";a:2:{i:0;R:43663;i:1;R:40466;}s:32:"1232:hafhofpevor-jbexvat-ceboyrz";a:2:{i:0;R:43663;i:1;R:40466;}s:29:"1232:hafhofpevor-jbexvat-qbar";a:2:{i:0;R:43663;i:1;R:40466;}s:35:"1232:hafhofpevor-cersreraprf-gbttyr";a:2:{i:0;R:43663;i:1;R:40466;}s:35:"1232:hafhofpevor-cersreraprf-abgvpr";a:2:{i:0;R:43663;i:1;R:40466;}s:38:"1232:hfrecebsvyrcntr-rqvg-zbqny-urnqre";a:2:{i:0;s:23:"wikia-userprofilepagev3";i:1;R:40466;}s:37:"1232:hfrecebsvyrcntr-dhrfgvba-pncgvba";a:2:{i:0;R:43679;i:1;R:40466;}s:46:"1232:hfrecebsvyrcntr-yvtugobk-vagreivrj-pnapry";a:2:{i:0;R:43679;i:1;R:40466;}s:44:"1232:hfrecebsvyrcntr-yvtugobk-vagreivrj-fnir";a:2:{i:0;R:43679;i:1;R:40466;}s:47:"1232:hfrecebsvyrcntr-vagreivrj-rqvg-arj-fhzznel";a:2:{i:0;R:43679;i:1;R:40466;}s:50:"1232:hfrecebsvyrcntr-vagreivrj-rqvg-hcqngr-fhzznel";a:2:{i:0;R:43679;i:1;R:40466;}s:41:"1232:hfrecebsvyrcntr-vagreivrj-fnir-reebe";a:2:{i:0;R:43679;i:1;R:40466;}s:50:"1232:hfrecebsvyrcntr-vagreivrj-fnir-vagreany-reebe";a:2:{i:0;R:43679;i:1;R:40466;}s:40:"1232:hfrecebsvyrcntr-nafjref-fgngf-gvgyr";a:2:{i:0;R:43679;i:1;R:40466;}s:39:"1232:hfrecebsvyrcntr-nafjref-fgngf-vasb";a:2:{i:0;R:43679;i:1;R:40466;}s:33:"1232:hfrecebsvyrcntr-nqq-dhrfgvba";a:2:{i:0;R:43679;i:1;R:40466;}s:34:"1232:hfrecebsvyrcntr-dhrfgvba-fnir";a:2:{i:0;R:43679;i:1;R:40466;}s:40:"1232:hfrecebsvyrcntr-dhrfgvba-yvfg-gvgyr";a:2:{i:0;R:43679;i:1;R:40466;}s:44:"1232:hfrecebsvyrcntr-vagreivrj-frpgvba-gvgyr";a:2:{i:0;R:43679;i:1;R:40466;}s:33:"1232:hfrecebsvyrcntr-vainyvq-hfre";a:2:{i:0;R:43679;i:1;R:40466;}s:38:"1232:hfrecebsvyrcntr-ningne-reebe-glcr";a:2:{i:0;R:43679;i:1;R:40466;}s:44:"1232:hfrecebsvyrcntr-ningne-reebe-erfbyhgvba";a:2:{i:0;R:43679;i:1;R:40466;}s:27:"1232:hfre-vqragvgl-obk-rqvg";a:2:{i:0;R:43679;i:1;R:40466;}s:40:"1232:hfre-vqragvgl-obk-jvxvn-pbagevohgbe";a:2:{i:0;R:43679;i:1;R:40466;}s:34:"1232:hfre-vqragvgl-obk-rqvg-ningne";a:2:{i:0;R:43679;i:1;R:40466;}s:36:"1232:hfre-vqragvgl-obk-qryrgr-ningne";a:2:{i:0;R:43679;i:1;R:40466;}s:43:"1232:hfre-vqragvgl-obk-ningne-hcybnq-ningne";a:2:{i:0;R:43679;i:1;R:40466;}s:46:"1232:hfre-vqragvgl-obk-ningne-so-vzcbeg-ningne";a:2:{i:0;R:43679;i:1;R:40466;}s:43:"1232:hfre-vqragvgl-obk-ningne-pubbfr-ningne";a:2:{i:0;R:43679;i:1;R:40466;}s:34:"1232:hfre-vqragvgl-obk-ningne-fnir";a:2:{i:0;R:43679;i:1;R:40466;}s:36:"1232:hfre-vqragvgl-obk-ningne-pnapry";a:2:{i:0;R:43679;i:1;R:40466;}s:45:"1232:hfre-vqragvgl-obk-ningne-naba-hfre-reebe";a:2:{i:0;R:43679;i:1;R:40466;}s:39:"1232:hfre-vqragvgl-obk-uvqr-rqvgf-jvxvf";a:2:{i:0;R:43679;i:1;R:40466;}s:39:"1232:hfre-vqragvgl-obk-onaarq-sebz-pung";a:2:{i:0;R:43679;i:1;R:40466;}s:32:"1232:hfre-vqragvgl-obk-nxn-ynory";a:2:{i:0;R:43679;i:1;R:40466;}s:33:"1232:hfre-vqragvgl-obk-zl-gjvggre";a:2:{i:0;R:43679;i:1;R:40466;}s:33:"1232:hfre-vqragvgl-obk-zl-jrofvgr";a:2:{i:0;R:43679;i:1;R:40466;}s:33:"1232:hfre-vqragvgl-obk-zl-so-cntr";a:2:{i:0;R:43679;i:1;R:40466;}s:32:"1232:hfre-vqragvgl-obk-sni-jvxvf";a:2:{i:0;R:43679;i:1;R:40466;}s:31:"1232:hfre-vqragvgl-obk-ybpngvba";a:2:{i:0;R:43679;i:1;R:40466;}s:34:"1232:hfre-vqragvgl-obk-jnf-obea-ba";a:2:{i:0;R:43679;i:1;R:40466;}s:34:"1232:hfre-vqragvgl-obk-jnf-obea-va";a:2:{i:0;R:43679;i:1;R:40466;}s:33:"1232:hfre-vqragvgl-obk-bpphcngvba";a:2:{i:0;R:43679;i:1;R:40466;}s:23:"1232:hfre-vqragvgl-v-nz";a:2:{i:0;R:43679;i:1;R:40466;}s:42:"1232:hfre-vqragvgl-obk-rqvgf-fvapr-wbvavat";a:2:{i:0;R:43679;i:1;R:40466;}s:28:"1232:hfre-vqragvgl-obk-rqvgf";a:2:{i:0;R:43679;i:1;R:40466;}s:36:"1232:hfre-vqragvgl-obk-tebhc-oybpxrq";a:2:{i:0;R:43679;i:1;R:40466;}s:42:"1232:hfre-vqragvgl-obk-tebhc-pungzbqrengbe";a:2:{i:0;R:43679;i:1;R:40466;}s:34:"1232:hfre-vqragvgl-obk-tebhc-flfbc";a:2:{i:0;R:43679;i:1;R:40466;}s:39:"1232:hfre-vqragvgl-obk-tebhc-ohernhpeng";a:2:{i:0;R:43679;i:1;R:40466;}s:36:"1232:hfre-vqragvgl-obk-tebhc-sbhaqre";a:2:{i:0;R:43679;i:1;R:40466;}s:34:"1232:hfre-vqragvgl-obk-tebhc-fgnss";a:2:{i:0;R:43679;i:1;R:40466;}s:35:"1232:hfre-vqragvgl-obk-tebhc-urycre";a:2:{i:0;R:43679;i:1;R:40466;}s:33:"1232:hfre-vqragvgl-obk-tebhc-ifgs";a:2:{i:0;R:43679;i:1;R:40466;}s:42:"1232:hfre-vqragvgl-obk-tebhc-nhguragvpngrq";a:2:{i:0;R:43679;i:1;R:40466;}s:36:"1232:hfre-vqragvgl-obk-tebhc-pbhapvy";a:2:{i:0;R:43679;i:1;R:40466;}s:42:"1232:hfre-vqragvgl-obk-mreb-fgngr-ybpngvba";a:2:{i:0;R:43679;i:1;R:40466;}s:42:"1232:hfre-vqragvgl-obk-mreb-fgngr-oveguqnl";a:2:{i:0;R:43679;i:1;R:40466;}s:40:"1232:hfre-vqragvgl-obk-mreb-fgngr-traqre";a:2:{i:0;R:43679;i:1;R:40466;}s:44:"1232:hfre-vqragvgl-obk-mreb-fgngr-bpphcngvba";a:2:{i:0;R:43679;i:1;R:40466;}s:41:"1232:hfre-vqragvgl-obk-mreb-fgngr-gjvggre";a:2:{i:0;R:43679;i:1;R:40466;}s:41:"1232:hfre-vqragvgl-obk-mreb-fgngr-jrofvgr";a:2:{i:0;R:43679;i:1;R:40466;}s:41:"1232:hfre-vqragvgl-obk-mreb-fgngr-so-cntr";a:2:{i:0;R:43679;i:1;R:40466;}s:31:"1232:hfre-vqragvgl-obk-nobhg-zr";a:2:{i:0;R:43679;i:1;R:40466;}s:29:"1232:hfre-vqragvgl-obk-ningne";a:2:{i:0;R:43679;i:1;R:40466;}s:33:"1232:hfre-vqragvgl-obk-nobhg-anzr";a:2:{i:0;R:43679;i:1;R:40466;}s:37:"1232:hfre-vqragvgl-obk-nobhg-ybpngvba";a:2:{i:0;R:43679;i:1;R:40466;}s:37:"1232:hfre-vqragvgl-obk-nobhg-oveguqnl";a:2:{i:0;R:43679;i:1;R:40466;}s:39:"1232:hfre-vqragvgl-obk-nobhg-bpphcngvba";a:2:{i:0;R:43679;i:1;R:40466;}s:35:"1232:hfre-vqragvgl-obk-nobhg-traqre";a:2:{i:0;R:43679;i:1;R:40466;}s:36:"1232:hfre-vqragvgl-obk-nobhg-jrofvgr";a:2:{i:0;R:43679;i:1;R:40466;}s:34:"1232:hfre-vqragvgl-obk-nobhg-gjrrg";a:2:{i:0;R:43679;i:1;R:40466;}s:38:"1232:hfre-vqragvgl-obk-nobhg-sni-jvxvf";a:2:{i:0;R:43679;i:1;R:40466;}s:46:"1232:hfre-vqragvgl-obk-nobhg-sni-jvxvf-erserfu";a:2:{i:0;R:43679;i:1;R:40466;}s:38:"1232:hfre-vqragvgl-obk-wbva-zber-jvxvf";a:2:{i:0;R:43679;i:1;R:40466;}s:37:"1232:hfre-vqragvgl-obk-vzcbeg-sebz-so";a:2:{i:0;R:43679;i:1;R:40466;}s:36:"1232:hfre-vqragvgl-obk-pbaarpg-gb-so";a:2:{i:0;R:43679;i:1;R:40466;}s:31:"1232:hfre-vqragvgl-obk-haflp-so";a:2:{i:0;R:43679;i:1;R:40466;}s:30:"1232:hfre-vqragvgl-obk-so-cntr";a:2:{i:0;R:43679;i:1;R:40466;}s:42:"1232:hfre-vqragvgl-obk-vainyvq-so-vq-reebe";a:2:{i:0;R:43679;i:1;R:40466;}s:31:"1232:hfre-vqragvgl-obk-so-cersf";a:2:{i:0;R:43679;i:1;R:40466;}s:42:"1232:hfre-vqragvgl-obk-ningne-reebe-absvyr";a:2:{i:0;R:43679;i:1;R:40466;}s:45:"1232:hfre-vqragvgl-obk-ningne-reebe-pnagjevgr";a:2:{i:0;R:43679;i:1;R:40466;}s:40:"1232:hfre-vqragvgl-obk-ningne-reebe-fvmr";a:2:{i:0;R:43679;i:1;R:40466;}s:35:"1232:hfre-vqragvgl-obk-ningne-reebe";a:2:{i:0;R:43679;i:1;R:40466;}s:45:"1232:hfrecebsvyrcntr-yvtugobk-nobhg-zr-pnapry";a:2:{i:0;R:43679;i:1;R:40466;}s:43:"1232:hfrecebsvyrcntr-yvtugobk-nobhg-zr-fnir";a:2:{i:0;R:43679;i:1;R:40466;}s:35:"1232:hfre-vqragvgl-obk-fnivat-reebe";a:2:{i:0;R:43679;i:1;R:40466;}s:44:"1232:hfre-vqragvgl-obk-fnivat-vagreany-reebe";a:2:{i:0;R:43679;i:1;R:40466;}s:41:"1232:hfrecebsvyrcntr-pybfvat-cbchc-urnqre";a:2:{i:0;R:43679;i:1;R:40466;}s:39:"1232:hfrecebsvyrcntr-pybfvat-cbchc-vasb";a:2:{i:0;R:43679;i:1;R:40466;}s:51:"1232:hfrecebsvyrcntr-pybfvat-cbchc-qvfpneq-naq-dhvg";a:2:{i:0;R:43679;i:1;R:40466;}s:48:"1232:hfrecebsvyrcntr-pybfvat-cbchc-fnir-naq-dhvg";a:2:{i:0;R:43679;i:1;R:40466;}s:41:"1232:hfrecebsvyrcntr-pybfvat-cbchc-pnapry";a:2:{i:0;R:43679;i:1;R:40466;}s:26:"1232:hfre-npgvba-zrah-rqvg";a:2:{i:0;R:43679;i:1;R:40466;}s:34:"1232:hfre-npgvba-zrah-rqvg-cebsvyr";a:2:{i:0;R:43679;i:1;R:40466;}s:35:"1232:hfre-npgvba-zrah-yrnir-zrffntr";a:2:{i:0;R:43679;i:1;R:40466;}s:33:"1232:hfre-npgvba-zrah-ivrj-fbhepr";a:2:{i:0;R:43679;i:1;R:40466;}s:29:"1232:hfre-npgvba-zrah-cebgrpg";a:2:{i:0;R:43679;i:1;R:40466;}s:31:"1232:hfre-npgvba-zrah-hacebgrpg";a:2:{i:0;R:43679;i:1;R:40466;}s:28:"1232:hfre-npgvba-zrah-eranzr";a:2:{i:0;R:43679;i:1;R:40466;}s:28:"1232:hfre-npgvba-zrah-qryrgr";a:2:{i:0;R:43679;i:1;R:40466;}s:29:"1232:hfre-npgvba-zrah-uvfgbel";a:2:{i:0;R:43679;i:1;R:40466;}s:21:"1232:hfreznfgurnq-ybt";a:2:{i:0;R:43679;i:1;R:40466;}s:29:"1232:hfreznfgurnq-ybt-zrffntr";a:2:{i:0;R:43679;i:1;R:40466;}s:25:"1232:hfreznfgurnq-ybt-nyg";a:2:{i:0;R:43679;i:1;R:40466;}s:19:"1232:hfreningne-ybt";a:2:{i:0;R:43679;i:1;R:40466;}s:28:"1232:oybt-ningne-punatrq-ybt";a:2:{i:0;R:43679;i:1;R:40466;}s:28:"1232:oybt-ningne-erzbirq-ybt";a:2:{i:0;R:43679;i:1;R:40466;}s:20:"1232:oybt-ningne-nyg";a:2:{i:0;R:43679;i:1;R:40466;}s:38:"1232:hfre-vqragvgl-erzbir-pbasvezngvba";a:2:{i:0;R:43679;i:1;R:40466;}s:30:"1232:hfre-vqragvgl-erzbir-snvy";a:2:{i:0;R:43679;i:1;R:40466;}s:19:"1232:hfreeranzrgbby";a:2:{i:0;s:20:"wikia-userrenametool";i:1;R:40466;}s:15:"1232:eranzrhfre";a:2:{i:0;R:43787;i:1;R:40466;}s:27:"1232:hfreeranzrgbby-jneavat";a:2:{i:0;R:43787;i:1;R:40466;}s:24:"1232:hfreeranzrgbby-qrfp";a:2:{i:0;R:43787;i:1;R:40466;}s:23:"1232:hfreeranzrgbby-byq";a:2:{i:0;R:43787;i:1;R:40466;}s:23:"1232:hfreeranzrgbby-arj";a:2:{i:0;R:43787;i:1;R:40466;}s:26:"1232:hfreeranzrgbby-ernfba";a:2:{i:0;R:43787;i:1;R:40466;}s:24:"1232:hfreeranzrgbby-zbir";a:2:{i:0;R:43787;i:1;R:40466;}s:27:"1232:hfreeranzrgbby-erfreir";a:2:{i:0;R:43787;i:1;R:40466;}s:34:"1232:hfreeranzrgbby-abgvsl-eranzrq";a:2:{i:0;R:43787;i:1;R:40466;}s:28:"1232:hfreeranzrgbby-jneavatf";a:2:{i:0;R:43787;i:1;R:40466;}s:36:"1232:hfreeranzrgbby-erdhrfgrq-eranzr";a:2:{i:0;R:43787;i:1;R:40466;}s:42:"1232:hfreeranzrgbby-qvq-abg-erdhrfg-eranzr";a:2:{i:0;R:43787;i:1;R:40466;}s:38:"1232:hfreeranzrgbby-cerivbhfyl-eranzrq";a:2:{i:0;R:43787;i:1;R:40466;}s:35:"1232:hfreeranzrgbby-cunynak-zngpurf";a:2:{i:0;R:43787;i:1;R:40466;}s:27:"1232:hfreeranzrgbby-pbasvez";a:2:{i:0;R:43787;i:1;R:40466;}s:26:"1232:hfreeranzrgbby-fhozvg";a:2:{i:0;R:43787;i:1;R:40466;}s:37:"1232:hfreeranzrgbby-reebeqbrfabgrkvfg";a:2:{i:0;R:43787;i:1;R:40466;}s:31:"1232:hfreeranzrgbby-reeberkvfgf";a:2:{i:0;R:43787;i:1;R:40466;}s:32:"1232:hfreeranzrgbby-reebevainyvq";a:2:{i:0;R:43787;i:1;R:40466;}s:35:"1232:hfreeranzrgbby-reebevainyvqarj";a:2:{i:0;R:43787;i:1;R:40466;}s:32:"1232:hfreeranzrgbby-reebegbbznal";a:2:{i:0;R:43787;i:1;R:40466;}s:35:"1232:hfreeranzrgbby-reebecebprffvat";a:2:{i:0;R:43787;i:1;R:40466;}s:32:"1232:hfreeranzrgbby-reebeoybpxrq";a:2:{i:0;R:43787;i:1;R:40466;}s:31:"1232:hfreeranzrgbby-reebeybpxrq";a:2:{i:0;R:43787;i:1;R:40466;}s:28:"1232:hfreeranzrgbby-reebeobg";a:2:{i:0;R:43787;i:1;R:40466;}s:33:"1232:hfreeranzrgbby-reebe-erdhrfg";a:2:{i:0;R:43787;i:1;R:40466;}s:35:"1232:hfreeranzrgbby-reebe-fnzr-hfre";a:2:{i:0;R:43787;i:1;R:40466;}s:41:"1232:hfreeranzrgbby-reebe-rkgrafvba-nobeg";a:2:{i:0;R:43787;i:1;R:40466;}s:47:"1232:hfreeranzrgbby-reebe-pnaabg-eranzr-nppbhag";a:2:{i:0;R:43787;i:1;R:40466;}s:45:"1232:hfreeranzrgbby-reebe-pnaabg-perngr-oybpx";a:2:{i:0;R:43787;i:1;R:40466;}s:31:"1232:hfreeranzrgbby-jnea-ercrng";a:2:{i:0;R:43787;i:1;R:40466;}s:38:"1232:hfreeranzrgbby-jnea-gnoyr-zvffvat";a:2:{i:0;R:43787;i:1;R:40466;}s:32:"1232:hfreeranzrgbby-vasb-fgnegrq";a:2:{i:0;R:43787;i:1;R:40466;}s:33:"1232:hfreeranzrgbby-vasb-svavfurq";a:2:{i:0;R:43787;i:1;R:40466;}s:31:"1232:hfreeranzrgbby-vasb-snvyrq";a:2:{i:0;R:43787;i:1;R:40466;}s:38:"1232:hfreeranzrgbby-vasb-jvxv-svavfurq";a:2:{i:0;R:43787;i:1;R:40466;}s:47:"1232:hfreeranzrgbby-vasb-jvxv-svavfurq-ceboyrzf";a:2:{i:0;R:43787;i:1;R:40466;}s:36:"1232:hfreeranzrgbby-vasb-va-cebterff";a:2:{i:0;R:43787;i:1;R:40466;}s:27:"1232:hfreeranzrgbby-fhpprff";a:2:{i:0;R:43787;i:1;R:40466;}s:33:"1232:hfreeranzrgbby-pbasvez-vageb";a:2:{i:0;R:43787;i:1;R:40466;}s:31:"1232:hfreeranzrgbby-pbasvez-lrf";a:2:{i:0;R:43787;i:1;R:40466;}s:30:"1232:hfreeranzrgbby-pbasvez-ab";a:2:{i:0;R:43787;i:1;R:40466;}s:31:"1232:hfreeranzrgbby-cntr-rkvfgf";a:2:{i:0;R:43787;i:1;R:40466;}s:30:"1232:hfreeranzrgbby-cntr-zbirq";a:2:{i:0;R:43787;i:1;R:40466;}s:32:"1232:hfreeranzrgbby-cntr-hazbirq";a:2:{i:0;R:43787;i:1;R:40466;}s:42:"1232:hfreeranzrgbby-svavfurq-rznvy-fhowrpg";a:2:{i:0;R:43787;i:1;R:40466;}s:44:"1232:hfreeranzrgbby-svavfurq-rznvy-obql-grkg";a:2:{i:0;R:43787;i:1;R:40466;}s:44:"1232:hfreeranzrgbby-svavfurq-rznvy-obql-ugzy";a:2:{i:0;R:43787;i:1;R:40466;}s:27:"1232:hfreeranzrgbby-ybtcntr";a:2:{i:0;R:43787;i:1;R:40466;}s:31:"1232:hfreeranzrgbby-ybtcntrgrkg";a:2:{i:0;R:43787;i:1;R:40466;}s:28:"1232:hfreeranzrgbby-ybtragel";a:2:{i:0;R:43787;i:1;R:40466;}s:23:"1232:hfreeranzrgbby-ybt";a:2:{i:0;R:43787;i:1;R:40466;}s:28:"1232:hfreeranzrgbby-zbir-ybt";a:2:{i:0;R:43787;i:1;R:40466;}s:21:"1232:evtug-eranzrhfre";a:2:{i:0;R:43787;i:1;R:40466;}s:15:"1232:irg-hcybnq";a:2:{i:0;s:20:"wikia-videoembedtool";i:1;R:40466;}s:18:"1232:irg-abgybttrq";a:2:{i:0;R:43843;i:1;R:40466;}s:13:"1232:irg-svaq";a:2:{i:0;R:43843;i:1;R:40466;}s:17:"1232:irg-guvfjvxv";a:2:{i:0;R:43843;i:1;R:40466;}s:15:"1232:irg-syvpxe";a:2:{i:0;R:43843;i:1;R:40466;}s:19:"1232:irg-hcybnq-oga";a:2:{i:0;R:43843;i:1;R:40466;}s:17:"1232:irg-svaq-oga";a:2:{i:0;R:43843;i:1;R:40466;}s:19:"1232:irg-syvpxe-vas";a:2:{i:0;R:43843;i:1;R:40466;}s:21:"1232:irg-pbasyvpg-vas";a:2:{i:0;R:43843;i:1;R:40466;}s:15:"1232:irg-eranzr";a:2:{i:0;R:43843;i:1;R:40466;}s:17:"1232:irg-rkvfgvat";a:2:{i:0;R:43843;i:1;R:40466;}s:18:"1232:irg-birejevgr";a:2:{i:0;R:43843;i:1;R:40466;}s:15:"1232:irg-vafreg";a:2:{i:0;R:43843;i:1;R:40466;}s:20:"1232:irg-qrgnvyf-vas";a:2:{i:0;R:43843;i:1;R:40466;}s:13:"1232:irg-anzr";a:2:{i:0;R:43843;i:1;R:40466;}s:16:"1232:irg-yvprafr";a:2:{i:0;R:43843;i:1;R:40466;}s:21:"1232:irg-qrgnvyf-vas2";a:2:{i:0;R:43843;i:1;R:40466;}s:13:"1232:irg-fvmr";a:2:{i:0;R:43843;i:1;R:40466;}s:18:"1232:irg-guhzoanvy";a:2:{i:0;R:43843;i:1;R:40466;}s:17:"1232:irg-shyyfvmr";a:2:{i:0;R:43843;i:1;R:40466;}s:14:"1232:irg-jvqgu";a:2:{i:0;R:43843;i:1;R:40466;}s:15:"1232:irg-ynlbhg";a:2:{i:0;R:43843;i:1;R:40466;}s:16:"1232:irg-pncgvba";a:2:{i:0;R:43843;i:1;R:40466;}s:17:"1232:irg-bcgvbany";a:2:{i:0;R:43843;i:1;R:40466;}s:16:"1232:irg-vafreg2";a:2:{i:0;R:43843;i:1;R:40466;}s:15:"1232:irg-hcqngr";a:2:{i:0;R:43843;i:1;R:40466;}s:27:"1232:irg-ivqrb-ercynpr-yvax";a:2:{i:0;R:43843;i:1;R:40466;}s:13:"1232:irg-ceri";a:2:{i:0;R:43843;i:1;R:40466;}s:13:"1232:irg-arkg";a:2:{i:0;R:43843;i:1;R:40466;}s:17:"1232:irg-zrgnpnsr";a:2:{i:0;R:43843;i:1;R:40466;}s:16:"1232:irg-vafreg3";a:2:{i:0;R:43843;i:1;R:40466;}s:19:"1232:irg-erprag-vas";a:2:{i:0;R:43843;i:1;R:40466;}s:18:"1232:irg-guvfjvxv2";a:2:{i:0;R:43843;i:1;R:40466;}s:16:"1232:irg-fhpprff";a:2:{i:0;R:43843;i:1;R:40466;}s:15:"1232:irg-erghea";a:2:{i:0;R:43843;i:1;R:40466;}s:13:"1232:irg-onpx";a:2:{i:0;R:43843;i:1;R:40466;}s:14:"1232:irg-pybfr";a:2:{i:0;R:43843;i:1;R:40466;}s:14:"1232:irg-jnea1";a:2:{i:0;R:43843;i:1;R:40466;}s:14:"1232:irg-jnea2";a:2:{i:0;R:43843;i:1;R:40466;}s:14:"1232:irg-jnea3";a:2:{i:0;R:43843;i:1;R:40466;}s:18:"1232:irg-vzntryvax";a:2:{i:0;R:43843;i:1;R:40466;}s:20:"1232:irg-vzntrohggba";a:2:{i:0;R:43843;i:1;R:40466;}s:19:"1232:irg-yvprafr-pp";a:2:{i:0;R:43843;i:1;R:40466;}s:23:"1232:irg-anzr-vapbeerpg";a:2:{i:0;R:43843;i:1;R:40466;}s:20:"1232:irg-qrfpevcgvba";a:2:{i:0;R:43843;i:1;R:40466;}s:19:"1232:irg-hcybnqgrkg";a:2:{i:0;R:43843;i:1;R:40466;}s:21:"1232:irg-fubj-zrffntr";a:2:{i:0;R:43843;i:1;R:40466;}s:21:"1232:irg-uvqr-zrffntr";a:2:{i:0;R:43843;i:1;R:40466;}s:25:"1232:irg-uvqr-yvprafr-zft";a:2:{i:0;R:43843;i:1;R:40466;}s:25:"1232:irg-fubj-yvprafr-zft";a:2:{i:0;R:43843;i:1;R:40466;}s:18:"1232:irg-znk-guhzo";a:2:{i:0;R:43843;i:1;R:40466;}s:19:"1232:irg-abgnyybjrq";a:2:{i:0;R:43843;i:1;R:40466;}s:14:"1232:irg-gvgyr";a:2:{i:0;R:43843;i:1;R:40466;}s:18:"1232:irg-fhccbegrq";a:2:{i:0;R:43843;i:1;R:40466;}s:16:"1232:irg-cerivrj";a:2:{i:0;R:43843;i:1;R:40466;}s:16:"1232:irg-onq-hey";a:2:{i:0;R:43843;i:1;R:40466;}s:21:"1232:irg-aba-rkvfgvat";a:2:{i:0;R:43843;i:1;R:40466;}s:18:"1232:irg-znva-vasb";a:2:{i:0;R:43843;i:1;R:40466;}s:21:"1232:irg-cntr-fhpprff";a:2:{i:0;R:43843;i:1;R:40466;}s:19:"1232:irg-nqq-ohggba";a:2:{i:0;R:43843;i:1;R:40466;}s:27:"1232:irg-nqqrq-sebz-tnyyrel";a:2:{i:0;R:43843;i:1;R:40466;}s:16:"1232:irg-frr-nyy";a:2:{i:0;R:43843;i:1;R:40466;}s:19:"1232:irg-onq-frnepu";a:2:{i:0;R:43843;i:1;R:40466;}s:19:"1232:irg-ab-cerivrj";a:2:{i:0;R:43843;i:1;R:40466;}s:23:"1232:irg-fvatyr-fhpprff";a:2:{i:0;R:43843;i:1;R:40466;}s:31:"1232:irg-tnyyrel-perngr-fhpprff";a:2:{i:0;R:43843;i:1;R:40466;}s:28:"1232:irg-tnyyrel-nqq-fhpprff";a:2:{i:0;R:43843;i:1;R:40466;}s:13:"1232:irg-yrsg";a:2:{i:0;R:43843;i:1;R:40466;}s:14:"1232:irg-evtug";a:2:{i:0;R:43843;i:1;R:40466;}s:16:"1232:irg-tnyyrel";a:2:{i:0;R:43843;i:1;R:40466;}s:18:"1232:irg-cebgrpgrq";a:2:{i:0;R:43843;i:1;R:40466;}s:18:"1232:jnyy-ab-gvgyr";a:2:{i:0;s:10:"wikia-wall";i:1;R:40466;}s:26:"1232:jnyy-zrffntr-ybnqzber";a:2:{i:0;R:43915;i:1;R:40466;}s:22:"1232:jnyy-zrffntr-jnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:30:"1232:jnyy-zrffntr-jnyy-fubegra";a:2:{i:0;R:43915;i:1;R:40466;}s:26:"1232:jnyy-zrffntr-hasbyybj";a:2:{i:0;R:43915;i:1;R:40466;}s:28:"1232:jnyy-zrffntr-haqberzbir";a:2:{i:0;R:43915;i:1;R:40466;}s:24:"1232:jnyy-zrffntr-rqvgrq";a:2:{i:0;R:43915;i:1;R:40466;}s:24:"1232:jnyy-zrffntr-zljnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:25:"1232:jnyy-gbbyone-uvfgbel";a:2:{i:0;R:43915;i:1;R:40466;}s:24:"1232:jnyy-zrffntr-abgvsl";a:2:{i:0;R:43915;i:1;R:40466;}s:24:"1232:jnyy-zrffntr-erzbir";a:2:{i:0;R:43915;i:1;R:40466;}s:28:"1232:jnyy-zrffntr-eri-qryrgr";a:2:{i:0;R:43915;i:1;R:40466;}s:27:"1232:jnyy-zrffntr-ryfrfjnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:31:"1232:jnyy-zrffntr-ab-crezvffvba";a:2:{i:0;R:43915;i:1;R:40466;}s:24:"1232:jnyy-guernq-erzbirq";a:2:{i:0;R:43915;i:1;R:40466;}s:24:"1232:jnyy-guernq-qryrgrq";a:2:{i:0;R:43915;i:1;R:40466;}s:23:"1232:jnyy-qrsnhyg-gvgyr";a:2:{i:0;R:43915;i:1;R:40466;}s:26:"1232:jnyy-ab-gvgyr-jneavat";a:2:{i:0;R:43915;i:1;R:40466;}s:14:"1232:jnyy-qrfp";a:2:{i:0;R:43915;i:1;R:40466;}s:23:"1232:jnyy-qvfnoyrq-qrfp";a:2:{i:0;R:43915;i:1;R:40466;}s:27:"1232:jnyy-cynprubyqre-gbcvp";a:2:{i:0;R:43915;i:1;R:40466;}s:29:"1232:jnyy-cynprubyqre-zrffntr";a:2:{i:0;R:43915;i:1;R:40466;}s:34:"1232:jnyy-cynprubyqre-zrffntr-naba";a:2:{i:0;R:43915;i:1;R:40466;}s:27:"1232:jnyy-cynprubyqre-ercyl";a:2:{i:0;R:43915;i:1;R:40466;}s:35:"1232:jnyy-ohggba-gb-cerivrj-pbzzrag";a:2:{i:0;R:43915;i:1;R:40466;}s:34:"1232:jnyy-ohggba-gb-pnapry-cerivrj";a:2:{i:0;R:43915;i:1;R:40466;}s:34:"1232:jnyy-ohggba-gb-fhozvg-pbzzrag";a:2:{i:0;R:43915;i:1;R:40466;}s:32:"1232:jnyy-ohggba-gb-fhozvg-ercyl";a:2:{i:0;R:43915;i:1;R:40466;}s:43:"1232:jnyy-ohggba-gb-fhozvg-pbzzrag-ab-gbcvp";a:2:{i:0;R:43915;i:1;R:40466;}s:29:"1232:jnyy-ohggba-fnir-punatrf";a:2:{i:0;R:43915;i:1;R:40466;}s:31:"1232:jnyy-ohggba-pnapry-punatrf";a:2:{i:0;R:43915;i:1;R:40466;}s:28:"1232:jnyy-ohggba-qbar-fbhepr";a:2:{i:0;R:43915;i:1;R:40466;}s:22:"1232:jnyy-zrffntr-rqvg";a:2:{i:0;R:43915;i:1;R:40466;}s:22:"1232:jnyy-zrffntr-zber";a:2:{i:0;R:43915;i:1;R:40466;}s:24:"1232:jnyy-zrffntr-qryrgr";a:2:{i:0;R:43915;i:1;R:40466;}s:40:"1232:jnyy-zrffntr-erzbirq-guernq-orpnhfr";a:2:{i:0;R:43915;i:1;R:40466;}s:40:"1232:jnyy-zrffntr-qryrgrq-guernq-orpnhfr";a:2:{i:0;R:43915;i:1;R:40466;}s:32:"1232:jnyy-zrffntr-erfgber-guernq";a:2:{i:0;R:43915;i:1;R:40466;}s:39:"1232:jnyy-zrffntr-erzbirq-ercyl-orpnhfr";a:2:{i:0;R:43915;i:1;R:40466;}s:39:"1232:jnyy-zrffntr-qryrgrq-ercyl-orpnhfr";a:2:{i:0;R:43915;i:1;R:40466;}s:31:"1232:jnyy-zrffntr-erfgber-ercyl";a:2:{i:0;R:43915;i:1;R:40466;}s:23:"1232:jnyy-qryrgr-ernfba";a:2:{i:0;R:43915;i:1;R:40466;}s:39:"1232:jnyy-hfre-gnyx-cntr-nepuvir-napube";a:2:{i:0;R:43915;i:1;R:40466;}s:38:"1232:jnyy-hfre-gnyx-nepuvir-cntr-gvgyr";a:2:{i:0;R:43915;i:1;R:40466;}s:35:"1232:jnyy-npgvba-nyy-pbasvez-pnapry";a:2:{i:0;R:43915;i:1;R:40466;}s:35:"1232:jnyy-npgvba-nyy-pbasvez-abgvsl";a:2:{i:0;R:43915;i:1;R:40466;}s:35:"1232:jnyy-npgvba-erzbir-ercyl-gvgyr";a:2:{i:0;R:43915;i:1;R:40466;}s:36:"1232:jnyy-npgvba-erzbir-guernq-gvgyr";a:2:{i:0;R:43915;i:1;R:40466;}s:33:"1232:jnyy-pbasvez-zbabobbx-erzbir";a:2:{i:0;R:43915;i:1;R:40466;}s:32:"1232:jnyy-pbasvez-zbabobbx-nqzva";a:2:{i:0;R:43915;i:1;R:40466;}s:34:"1232:jnyy-pbasvez-zbabobbx-erfgber";a:2:{i:0;R:43915;i:1;R:40466;}s:28:"1232:jnyy-qryrgr-reebe-gvgyr";a:2:{i:0;R:43915;i:1;R:40466;}s:30:"1232:jnyy-qryrgr-reebe-pbagrag";a:2:{i:0;R:43915;i:1;R:40466;}s:41:"1232:jnyy-pbasvez-zbabobbx-ynpx-bs-ernfba";a:2:{i:0;R:43915;i:1;R:40466;}s:31:"1232:jnyy-npgvba-erzbir-pbasvez";a:2:{i:0;R:43915;i:1;R:40466;}s:43:"1232:jnyy-npgvba-erzbir-guernq-pbasvez-vasb";a:2:{i:0;R:43915;i:1;R:40466;}s:42:"1232:jnyy-npgvba-erzbir-ercyl-pbasvez-vasb";a:2:{i:0;R:43915;i:1;R:40466;}s:34:"1232:jnyy-npgvba-erzbir-pbasvez-bx";a:2:{i:0;R:43915;i:1;R:40466;}s:35:"1232:jnyy-npgvba-nqzva-guernq-gvgyr";a:2:{i:0;R:43915;i:1;R:40466;}s:34:"1232:jnyy-npgvba-nqzva-ercyl-gvgyr";a:2:{i:0;R:43915;i:1;R:40466;}s:30:"1232:jnyy-npgvba-nqzva-pbasvez";a:2:{i:0;R:43915;i:1;R:40466;}s:42:"1232:jnyy-npgvba-nqzva-guernq-pbasvez-vasb";a:2:{i:0;R:43915;i:1;R:40466;}s:41:"1232:jnyy-npgvba-nqzva-ercyl-pbasvez-vasb";a:2:{i:0;R:43915;i:1;R:40466;}s:33:"1232:jnyy-npgvba-nqzva-pbasvez-bx";a:2:{i:0;R:43915;i:1;R:40466;}s:37:"1232:jnyy-npgvba-erfgber-guernq-gvgyr";a:2:{i:0;R:43915;i:1;R:40466;}s:36:"1232:jnyy-npgvba-erfgber-ercyl-gvgyr";a:2:{i:0;R:43915;i:1;R:40466;}s:32:"1232:jnyy-npgvba-erfgber-pbasvez";a:2:{i:0;R:43915;i:1;R:40466;}s:35:"1232:jnyy-npgvba-erfgber-pbasvez-bx";a:2:{i:0;R:43915;i:1;R:40466;}s:33:"1232:jnyy-npgvba-eri-guernq-gvgyr";a:2:{i:0;R:43915;i:1;R:40466;}s:32:"1232:jnyy-npgvba-eri-ercyl-gvgyr";a:2:{i:0;R:43915;i:1;R:40466;}s:34:"1232:jnyy-npgvba-eri-ercyl-pbasvez";a:2:{i:0;R:43915;i:1;R:40466;}s:35:"1232:jnyy-npgvba-eri-guernq-pbasvez";a:2:{i:0;R:43915;i:1;R:40466;}s:31:"1232:jnyy-npgvba-eri-pbasvez-bx";a:2:{i:0;R:43915;i:1;R:40466;}s:23:"1232:jnyy-abgvsvpngvbaf";a:2:{i:0;R:43915;i:1;R:40466;}s:27:"1232:jnyy-abgvsvpngvbaf-nyy";a:2:{i:0;R:43915;i:1;R:40466;}s:34:"1232:jnyy-abgvsvpngvbaf-znexnfernq";a:2:{i:0;R:43915;i:1;R:40466;}s:44:"1232:jnyy-abgvsvpngvbaf-znexnfernq-nyy-jvxvf";a:2:{i:0;R:43915;i:1;R:40466;}s:44:"1232:jnyy-abgvsvpngvbaf-znexnfernq-guvf-jvxv";a:2:{i:0;R:43915;i:1;R:40466;}s:29:"1232:jnyy-abgvsvpngvbaf-rzcgl";a:2:{i:0;R:43915;i:1;R:40466;}s:31:"1232:jnyy-abgvsvpngvbaf-ybnqvat";a:2:{i:0;R:43915;i:1;R:40466;}s:32:"1232:jnyy-abgvsvpngvbaf-erzvaqre";a:2:{i:0;R:43915;i:1;R:40466;}s:37:"1232:jnyy-abgvsvpngvbaf-jnyy-qvfnoyrq";a:2:{i:0;R:43915;i:1;R:40466;}s:33:"1232:ja-hfre1-ercyl-lbh-lbhe-jnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:33:"1232:ja-hfre2-ercyl-lbh-lbhe-jnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:33:"1232:ja-hfre3-ercyl-lbh-lbhe-jnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:34:"1232:ja-hfre1-ercyl-frys-lbhe-jnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:34:"1232:ja-hfre2-ercyl-frys-lbhe-jnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:34:"1232:ja-hfre3-ercyl-frys-lbhe-jnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:35:"1232:ja-hfre1-ercyl-bgure-lbhe-jnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:35:"1232:ja-hfre2-ercyl-bgure-lbhe-jnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:35:"1232:ja-hfre3-ercyl-bgure-lbhe-jnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:34:"1232:ja-hfre1-ercyl-lbh-bgure-jnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:34:"1232:ja-hfre2-ercyl-lbh-bgure-jnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:34:"1232:ja-hfre3-ercyl-lbh-bgure-jnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:35:"1232:ja-hfre1-ercyl-frys-bgure-jnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:35:"1232:ja-hfre2-ercyl-frys-bgure-jnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:35:"1232:ja-hfre3-ercyl-frys-bgure-jnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:36:"1232:ja-hfre1-ercyl-bgure-bgure-jnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:36:"1232:ja-hfre2-ercyl-bgure-bgure-jnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:36:"1232:ja-hfre3-ercyl-bgure-bgure-jnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:30:"1232:ja-hfre1-ercyl-lbh-n-jnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:30:"1232:ja-hfre2-ercyl-lbh-n-jnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:30:"1232:ja-hfre3-ercyl-lbh-n-jnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:31:"1232:ja-hfre1-ercyl-frys-n-jnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:31:"1232:ja-hfre2-ercyl-frys-n-jnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:31:"1232:ja-hfre3-ercyl-frys-n-jnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:32:"1232:ja-hfre1-ercyl-bgure-n-jnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:32:"1232:ja-hfre2-ercyl-bgure-n-jnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:32:"1232:ja-hfre3-ercyl-bgure-n-jnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:23:"1232:ja-arjzft-bazljnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:14:"1232:ja-arjzft";a:2:{i:0;R:43915;i:1;R:40466;}s:31:"1232:ja-arjzft-ba-sbyybjrq-jnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:28:"1232:ja-nqzva-guernq-qryrgrq";a:2:{i:0;R:43915;i:1;R:40466;}s:27:"1232:ja-nqzva-ercyl-qryrgrq";a:2:{i:0;R:43915;i:1;R:40466;}s:28:"1232:ja-bjare-guernq-qryrgrq";a:2:{i:0;R:43915;i:1;R:40466;}s:27:"1232:ja-bjare-ercyl-qryrgrq";a:2:{i:0;R:43915;i:1;R:40466;}s:32:"1232:jnyy-fbegvat-arjrfg-guernqf";a:2:{i:0;R:43915;i:1;R:40466;}s:32:"1232:jnyy-fbegvat-byqrfg-guernqf";a:2:{i:0;R:43915;i:1;R:40466;}s:32:"1232:jnyy-fbegvat-arjrfg-ercyvrf";a:2:{i:0;R:43915;i:1;R:40466;}s:29:"1232:jnyy-fbegvat-zbfg-npgvir";a:2:{i:0;R:43915;i:1;R:40466;}s:26:"1232:jnyy-fbegvat-nepuvirq";a:2:{i:0;R:43915;i:1;R:40466;}s:25:"1232:gbt-rabgvsjnyyguernq";a:2:{i:0;R:43915;i:1;R:40466;}s:21:"1232:gbt-rabgvszljnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:31:"1232:jnyy-qryrgrq-zft-cntrgvgyr";a:2:{i:0;R:43915;i:1;R:40466;}s:26:"1232:jnyy-qryrgrq-zft-grkg";a:2:{i:0;R:43915;i:1;R:40466;}s:31:"1232:jnyy-qryrgrq-zft-erghea-gb";a:2:{i:0;R:43915;i:1;R:40466;}s:26:"1232:jnyy-qryrgrq-zft-ivrj";a:2:{i:0;R:43915;i:1;R:40466;}s:48:"1232:jnyy-erpragpunatrf-negvpyr-yvax-arj-zrffntr";a:2:{i:0;R:43915;i:1;R:40466;}s:43:"1232:jnyy-erpragpunatrf-pbzzrag-arj-zrffntr";a:2:{i:0;R:43915;i:1;R:40466;}s:33:"1232:jnyy-erpragpunatrf-arj-ercyl";a:2:{i:0;R:43915;i:1;R:40466;}s:28:"1232:jnyy-erpragpunatrf-rqvg";a:2:{i:0;R:43915;i:1;R:40466;}s:43:"1232:jnyy-erpragpunatrf-jnyy-erzbirq-guernq";a:2:{i:0;R:43915;i:1;R:40466;}s:42:"1232:jnyy-erpragpunatrf-jnyy-erzbirq-ercyl";a:2:{i:0;R:43915;i:1;R:40466;}s:44:"1232:jnyy-erpragpunatrf-jnyy-erfgberq-guernq";a:2:{i:0;R:43915;i:1;R:40466;}s:43:"1232:jnyy-erpragpunatrf-jnyy-erfgberq-ercyl";a:2:{i:0;R:43915;i:1;R:40466;}s:43:"1232:jnyy-erpragpunatrf-jnyy-qryrgrq-guernq";a:2:{i:0;R:43915;i:1;R:40466;}s:42:"1232:jnyy-erpragpunatrf-jnyy-qryrgrq-ercyl";a:2:{i:0;R:43915;i:1;R:40466;}s:43:"1232:jnyy-erpragpunatrf-qryrgrq-ercyl-gvgyr";a:2:{i:0;R:43915;i:1;R:40466;}s:55:"1232:jnyy-erpragpunatrf-anzrfcnpr-fryrpgbe-zrffntr-jnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:34:"1232:jnyy-erpragpunatrf-jnyy-tebhc";a:2:{i:0;R:43915;i:1;R:40466;}s:41:"1232:jnyy-erpragpunatrf-jnyy-uvfgbel-yvax";a:2:{i:0;R:43915;i:1;R:40466;}s:43:"1232:jnyy-erpragpunatrf-guernq-uvfgbel-yvax";a:2:{i:0;R:43915;i:1;R:40466;}s:33:"1232:jnyy-pbagevohgvbaf-jnyy-yvar";a:2:{i:0;R:43915;i:1;R:40466;}s:33:"1232:jnyy-jungyvaxfurer-jnyy-yvar";a:2:{i:0;R:43915;i:1;R:40466;}s:27:"1232:jnyy-zrffntr-abg-sbhaq";a:2:{i:0;R:43915;i:1;R:40466;}s:28:"1232:jnyy-zrffntr-fgnss-grkg";a:2:{i:0;R:43915;i:1;R:40466;}s:26:"1232:jnyy-vconyybjhfregnyx";a:2:{i:0;R:43915;i:1;R:40466;}s:22:"1232:jnyy-vcojngpuhfre";a:2:{i:0;R:43915;i:1;R:40466;}s:26:"1232:jnyy-jvxv-npgvivgl-ba";a:2:{i:0;R:43915;i:1;R:40466;}s:34:"1232:jnyy-jvxv-npgvivgl-jnyy-bjare";a:2:{i:0;R:43915;i:1;R:40466;}s:29:"1232:jnyy-erzbirq-guernq-haqb";a:2:{i:0;R:43915;i:1;R:40466;}s:28:"1232:jnyy-erzbirq-ercyl-haqb";a:2:{i:0;R:43915;i:1;R:40466;}s:23:"1232:jnyy-erzbirq-ercyl";a:2:{i:0;R:43915;i:1;R:40466;}s:29:"1232:jnyy-qryrgrq-guernq-haqb";a:2:{i:0;R:43915;i:1;R:40466;}s:28:"1232:jnyy-qryrgrq-ercyl-haqb";a:2:{i:0;R:43915;i:1;R:40466;}s:23:"1232:jnyy-qryrgrq-ercyl";a:2:{i:0;R:43915;i:1;R:40466;}s:17:"1232:jnyy-uvfgbel";a:2:{i:0;R:43915;i:1;R:40466;}s:31:"1232:jnyy-uvfgbel-hfreanzr-shyy";a:2:{i:0;R:43915;i:1;R:40466;}s:32:"1232:jnyy-uvfgbel-hfreanzr-fubeg";a:2:{i:0;R:43915;i:1;R:40466;}s:23:"1232:jnyy-uvfgbel-gvgyr";a:2:{i:0;R:43915;i:1;R:40466;}s:41:"1232:jnyy-uvfgbel-jub-vaibyirq-jnyy-gvgyr";a:2:{i:0;R:43915;i:1;R:40466;}s:43:"1232:jnyy-uvfgbel-jub-vaibyirq-guernq-gvgyr";a:2:{i:0;R:43915;i:1;R:40466;}s:32:"1232:jnyy-uvfgbel-guernq-perngrq";a:2:{i:0;R:43915;i:1;R:40466;}s:32:"1232:jnyy-uvfgbel-guernq-erzbirq";a:2:{i:0;R:43915;i:1;R:40466;}s:33:"1232:jnyy-uvfgbel-guernq-erfgberq";a:2:{i:0;R:43915;i:1;R:40466;}s:38:"1232:jnyy-uvfgbel-guernq-nqzva-qryrgrq";a:2:{i:0;R:43915;i:1;R:40466;}s:38:"1232:jnyy-uvfgbel-fbegvat-arjrfg-svefg";a:2:{i:0;R:43915;i:1;R:40466;}s:38:"1232:jnyy-uvfgbel-fbegvat-byqrfg-svefg";a:2:{i:0;R:43915;i:1;R:40466;}s:31:"1232:jnyy-uvfgbel-fhzznel-ynory";a:2:{i:0;R:43915;i:1;R:40466;}s:27:"1232:jnyy-uvfgbel-envy-jnyy";a:2:{i:0;R:43915;i:1;R:40466;}s:31:"1232:jnyy-uvfgbel-envy-pbagevof";a:2:{i:0;R:43915;i:1;R:40466;}s:28:"1232:jnyy-uvfgbel-envy-oybpx";a:2:{i:0;R:43915;i:1;R:40466;}s:29:"1232:jnyy-uvfgbel-npgvba-ivrj";a:2:{i:0;R:43915;i:1;R:40466;}s:32:"1232:jnyy-uvfgbel-npgvba-erfgber";a:2:{i:0;R:43915;i:1;R:40466;}s:39:"1232:jnyy-uvfgbel-npgvba-guernq-uvfgbel";a:2:{i:0;R:43915;i:1;R:40466;}s:30:"1232:jnyy-guernq-uvfgbel-gvgyr";a:2:{i:0;R:43915;i:1;R:40466;}s:39:"1232:jnyy-guernq-uvfgbel-guernq-perngrq";a:2:{i:0;R:43915;i:1;R:40466;}s:38:"1232:jnyy-guernq-uvfgbel-ercyl-perngrq";a:2:{i:0;R:43915;i:1;R:40466;}s:39:"1232:jnyy-guernq-uvfgbel-guernq-erzbirq";a:2:{i:0;R:43915;i:1;R:40466;}s:38:"1232:jnyy-guernq-uvfgbel-ercyl-erzbirq";a:2:{i:0;R:43915;i:1;R:40466;}s:40:"1232:jnyy-guernq-uvfgbel-guernq-erfgberq";a:2:{i:0;R:43915;i:1;R:40466;}s:39:"1232:jnyy-guernq-uvfgbel-ercyl-erfgberq";a:2:{i:0;R:43915;i:1;R:40466;}s:39:"1232:jnyy-guernq-uvfgbel-guernq-qryrgrq";a:2:{i:0;R:43915;i:1;R:40466;}s:38:"1232:jnyy-guernq-uvfgbel-guernq-rqvgrq";a:2:{i:0;R:43915;i:1;R:40466;}s:37:"1232:jnyy-guernq-uvfgbel-ercyl-rqvgrq";a:2:{i:0;R:43915;i:1;R:40466;}s:38:"1232:jnyy-uvfgbel-npgvba-erfgber-ercyl";a:2:{i:0;R:43915;i:1;R:40466;}s:39:"1232:jnyy-uvfgbel-npgvba-erfgber-guernq";a:2:{i:0;R:43915;i:1;R:40466;}s:33:"1232:jnyy-zrffntr-abg-sbhaq-va-qo";a:2:{i:0;R:43915;i:1;R:40466;}s:34:"1232:znvy-abgvsvpngvba-arj-fbzrbar";a:2:{i:0;R:43915;i:1;R:40466;}s:31:"1232:znvy-abgvsvpngvba-arj-lbhe";a:2:{i:0;R:43915;i:1;R:40466;}s:33:"1232:znvy-abgvsvpngvba-ercyl-lbhe";a:2:{i:0;R:43915;i:1;R:40466;}s:32:"1232:znvy-abgvsvpngvba-ercyl-uvf";a:2:{i:0;R:43915;i:1;R:40466;}s:36:"1232:znvy-abgvsvpngvba-ercyl-fbzrbar";a:2:{i:0;R:43915;i:1;R:40466;}s:36:"1232:znvy-abgvsvpngvba-ugzy-terrgvat";a:2:{i:0;R:43915;i:1;R:40466;}s:34:"1232:znvy-abgvsvpngvba-ugzy-ohggba";a:2:{i:0;R:43915;i:1;R:40466;}s:30:"1232:znvy-abgvsvpngvba-fhowrpg";a:2:{i:0;R:43915;i:1;R:40466;}s:40:"1232:znvy-abgvsvpngvba-ugzy-sbbgre-yvar3";a:2:{i:0;R:43915;i:1;R:40466;}s:40:"1232:znvy-abgvsvpngvba-ugzy-sbbgre-yvar1";a:2:{i:0;R:43915;i:1;R:40466;}s:40:"1232:znvy-abgvsvpngvba-ugzy-sbbgre-yvar2";a:2:{i:0;R:43915;i:1;R:40466;}s:27:"1232:znvy-abgvsvpngvba-obql";a:2:{i:0;R:43915;i:1;R:40466;}s:32:"1232:znvy-abgvsvpngvba-obql-ugzy";a:2:{i:0;R:43915;i:1;R:40466;}s:24:"1232:cersf-rznvy-jnyy-i2";a:2:{i:0;R:43915;i:1;R:40466;}s:28:"1232:gbt-rabgvsjnyyguernq-i2";a:2:{i:0;R:43915;i:1;R:40466;}s:27:"1232:gbt-rabgvszljnyy-rirel";a:2:{i:0;R:43915;i:1;R:40466;}s:34:"1232:gbt-rabgvszljnyy-fvaprivfvgrq";a:2:{i:0;R:43915;i:1;R:40466;}s:30:"1232:gbt-rabgvszljnyy-erzvaqre";a:2:{i:0;R:43915;i:1;R:40466;}s:29:"1232:gbt-rabgvszljnyy-abrznvy";a:2:{i:0;R:43915;i:1;R:40466;}s:29:"1232:jnyyfubjfbhepr-gbttyr-i2";a:2:{i:0;R:43915;i:1;R:40466;}s:26:"1232:jnyyfubjfbhepr-gbttyr";a:2:{i:0;R:43915;i:1;R:40466;}s:22:"1232:jnyyqryrgr-gbttyr";a:2:{i:0;R:43915;i:1;R:40466;}s:29:"1232:jvxvn-jngpufhocntrf-qrfp";a:2:{i:0;s:19:"wikia-watchsubpages";i:1;R:40466;}s:26:"1232:gbt-jngpuyvfgfhocntrf";a:2:{i:0;R:44126;i:1;R:40466;}s:21:"1232:jurervfrkgrafvba";a:2:{i:0;s:22:"wikia-whereisextension";i:1;R:40466;}s:28:"1232:jurervfrkgrafvba-fhozvg";a:2:{i:0;R:44129;i:1;R:40466;}s:26:"1232:jurervfrkgrafvba-yvfg";a:2:{i:0;R:44129;i:1;R:40466;}s:27:"1232:jurervfrkgrafvba-vffrg";a:2:{i:0;R:44129;i:1;R:40466;}s:28:"1232:jurervfrkgrafvba-svygre";a:2:{i:0;R:44129;i:1;R:40466;}s:32:"1232:jurervfrkgrafvba-nyy-tebhcf";a:2:{i:0;R:44129;i:1;R:40466;}s:35:"1232:jurervfrkgrafvba-anzr-pbagnvaf";a:2:{i:0;R:44129;i:1;R:40466;}s:39:"1232:jurervfrkgrafvba-frnepu-yvxr-inyhr";a:2:{i:0;R:44129;i:1;R:40466;}s:33:"1232:jurervfrkgrafvba-frnepu-glcr";a:2:{i:0;R:44129;i:1;R:40466;}s:38:"1232:jurervfrkgrafvba-frnepu-glcr-obby";a:2:{i:0;R:44129;i:1;R:40466;}s:38:"1232:jurervfrkgrafvba-frnepu-glcr-shyy";a:2:{i:0;R:44129;i:1;R:40466;}s:21:"1232:veptngr-hfreanzr";a:2:{i:0;s:21:"wikia-wikiaircgateway";i:1;R:40466;}s:20:"1232:veptngr-punaary";a:2:{i:0;R:44141;i:1;R:40466;}s:24:"1232:veptngr-punaaryyvfg";a:2:{i:0;R:44141;i:1;R:40466;}s:21:"1232:jzh-hcybnq-vzntr";a:2:{i:0;s:21:"wikia-wikiaminiupload";i:1;R:40466;}s:14:"1232:jzh-gvgyr";a:2:{i:0;R:44145;i:1;R:40466;}s:15:"1232:jzh-hcybnq";a:2:{i:0;R:44145;i:1;R:40466;}s:18:"1232:jzh-abgybttrq";a:2:{i:0;R:44145;i:1;R:40466;}s:13:"1232:jzh-svaq";a:2:{i:0;R:44145;i:1;R:40466;}s:17:"1232:jzh-guvfjvxv";a:2:{i:0;R:44145;i:1;R:40466;}s:15:"1232:jzh-syvpxe";a:2:{i:0;R:44145;i:1;R:40466;}s:19:"1232:jzh-hcybnq-oga";a:2:{i:0;R:44145;i:1;R:40466;}s:17:"1232:jzh-svaq-oga";a:2:{i:0;R:44145;i:1;R:40466;}s:19:"1232:jzh-syvpxe-vas";a:2:{i:0;R:44145;i:1;R:40466;}s:21:"1232:jzh-pbasyvpg-vas";a:2:{i:0;R:44145;i:1;R:40466;}s:15:"1232:jzh-eranzr";a:2:{i:0;R:44145;i:1;R:40466;}s:17:"1232:jzh-rkvfgvat";a:2:{i:0;R:44145;i:1;R:40466;}s:18:"1232:jzh-birejevgr";a:2:{i:0;R:44145;i:1;R:40466;}s:15:"1232:jzh-vafreg";a:2:{i:0;R:44145;i:1;R:40466;}s:20:"1232:jzh-qrgnvyf-vas";a:2:{i:0;R:44145;i:1;R:40466;}s:13:"1232:jzh-anzr";a:2:{i:0;R:44145;i:1;R:40466;}s:16:"1232:jzh-yvprafr";a:2:{i:0;R:44145;i:1;R:40466;}s:18:"1232:jzh-yvprafvat";a:2:{i:0;R:44145;i:1;R:40466;}s:21:"1232:jzh-qrgnvyf-vas2";a:2:{i:0;R:44145;i:1;R:40466;}s:13:"1232:jzh-fvmr";a:2:{i:0;R:44145;i:1;R:40466;}s:18:"1232:jzh-guhzoanvy";a:2:{i:0;R:44145;i:1;R:40466;}s:17:"1232:jzh-shyyfvmr";a:2:{i:0;R:44145;i:1;R:40466;}s:14:"1232:jzh-jvqgu";a:2:{i:0;R:44145;i:1;R:40466;}s:15:"1232:jzh-ynlbhg";a:2:{i:0;R:44145;i:1;R:40466;}s:16:"1232:jzh-pncgvba";a:2:{i:0;R:44145;i:1;R:40466;}s:13:"1232:jzh-yvax";a:2:{i:0;R:44145;i:1;R:40466;}s:17:"1232:jzh-bcgvbany";a:2:{i:0;R:44145;i:1;R:40466;}s:16:"1232:jzh-vafreg2";a:2:{i:0;R:44145;i:1;R:40466;}s:13:"1232:jzh-ceri";a:2:{i:0;R:44145;i:1;R:40466;}s:13:"1232:jzh-arkg";a:2:{i:0;R:44145;i:1;R:40466;}s:16:"1232:jzh-syvpxe2";a:2:{i:0;R:44145;i:1;R:40466;}s:16:"1232:jzh-vafreg3";a:2:{i:0;R:44145;i:1;R:40466;}s:19:"1232:jzh-erprag-vas";a:2:{i:0;R:44145;i:1;R:40466;}s:18:"1232:jzh-guvfjvxv2";a:2:{i:0;R:44145;i:1;R:40466;}s:16:"1232:jzh-fhpprff";a:2:{i:0;R:44145;i:1;R:40466;}s:28:"1232:jzh-fhpprff-cynprubyqre";a:2:{i:0;R:44145;i:1;R:40466;}s:15:"1232:jzh-erghea";a:2:{i:0;R:44145;i:1;R:40466;}s:13:"1232:jzh-onpx";a:2:{i:0;R:44145;i:1;R:40466;}s:14:"1232:jzh-pybfr";a:2:{i:0;R:44145;i:1;R:40466;}s:14:"1232:jzh-jnea1";a:2:{i:0;R:44145;i:1;R:40466;}s:14:"1232:jzh-jnea2";a:2:{i:0;R:44145;i:1;R:40466;}s:14:"1232:jzh-jnea3";a:2:{i:0;R:44145;i:1;R:40466;}s:18:"1232:jzh-vzntryvax";a:2:{i:0;R:44145;i:1;R:40466;}s:20:"1232:jzh-vzntrohggba";a:2:{i:0;R:44145;i:1;R:40466;}s:19:"1232:jzh-yvprafr-pp";a:2:{i:0;R:44145;i:1;R:40466;}s:22:"1232:jzh-onq-rkgrafvba";a:2:{i:0;R:44145;i:1;R:40466;}s:25:"1232:jzh-svyrglcr-zvffvat";a:2:{i:0;R:44145;i:1;R:40466;}s:27:"1232:jzh-svyrglcr-vapbeerpg";a:2:{i:0;R:44145;i:1;R:40466;}s:25:"1232:jzh-uvqr-yvprafr-zft";a:2:{i:0;R:44145;i:1;R:40466;}s:25:"1232:jzh-fubj-yvprafr-zft";a:2:{i:0;R:44145;i:1;R:40466;}s:18:"1232:jzh-znk-guhzo";a:2:{i:0;R:44145;i:1;R:40466;}s:19:"1232:jzh-abgnyybjrq";a:2:{i:0;R:44145;i:1;R:40466;}s:17:"1232:jzh-ernqbayl";a:2:{i:0;R:44145;i:1;R:40466;}s:20:"1232:jzh-cynprubyqre";a:2:{i:0;R:44145;i:1;R:40466;}s:16:"1232:jzh-tnyyrel";a:2:{i:0;R:44145;i:1;R:40466;}s:16:"1232:jzh-pbyhzaf";a:2:{i:0;R:44145;i:1;R:40466;}s:15:"1232:jzh-pbyhza";a:2:{i:0;R:44145;i:1;R:40466;}s:23:"1232:jzh-nqqrq-sebz-cyp";a:2:{i:0;R:44145;i:1;R:40466;}s:23:"1232:jzh-hcybnqqvfnoyrq";a:2:{i:0;R:44145;i:1;R:40466;}s:24:"1232:jzh-tnyyrel-fhpprff";a:2:{i:0;R:44145;i:1;R:40466;}s:21:"1232:jzh-tnyyrel-oga1";a:2:{i:0;R:44145;i:1;R:40466;}s:21:"1232:jzh-tnyyrel-oga2";a:2:{i:0;R:44145;i:1;R:40466;}s:19:"1232:jzh-ab-cerivrj";a:2:{i:0;R:44145;i:1;R:40466;}s:19:"1232:jzh-ab-cebgrpg";a:2:{i:0;R:44145;i:1;R:40466;}s:18:"1232:jzh-ab-evtugf";a:2:{i:0;R:44145;i:1;R:40466;}s:21:"1232:jzh-zber-bcgvbaf";a:2:{i:0;R:44145;i:1;R:40466;}s:22:"1232:jzh-srjre-bcgvbaf";a:2:{i:0;R:44145;i:1;R:40466;}s:32:"1232:jzh-ercynpr-qrsnhyg-pncgvba";a:2:{i:0;R:44145;i:1;R:40466;}s:30:"1232:jzh-nccrnenapr-va-negvpyr";a:2:{i:0;R:44145;i:1;R:40466;}s:18:"1232:jzh-nyvtazrag";a:2:{i:0;R:44145;i:1;R:40466;}s:23:"1232:jzh-svyr-cebgrpgrq";a:2:{i:0;R:44145;i:1;R:40466;}s:19:"1232:jzh-svyr-reebe";a:2:{i:0;R:44145;i:1;R:40466;}s:23:"1232:jvxvnzbovyr-frnepu";a:2:{i:0;s:17:"wikia-wikiamobile";i:1;R:40466;}s:28:"1232:jvxvnzbovyr-frnepu-jvxv";a:2:{i:0;R:44219;i:1;R:40466;}s:29:"1232:jvxvnzbovyr-frnepu-jvxvn";a:2:{i:0;R:44219;i:1;R:40466;}s:22:"1232:jvxvnzbovyr-ybtva";a:2:{i:0;R:44219;i:1;R:40466;}s:25:"1232:jvxvnzbovyr-cnffjbeq";a:2:{i:0;R:44219;i:1;R:40466;}s:29:"1232:jvxvnzbovyr-ybtva-fhozvg";a:2:{i:0;R:44219;i:1;R:40466;}s:21:"1232:jvxvnzbovyr-zrah";a:2:{i:0;R:44219;i:1;R:40466;}s:24:"1232:jvxvnzbovyr-rkcyber";a:2:{i:0;R:44219;i:1;R:40466;}s:35:"1232:jvxvnzbovyr-negvpyr-pngrtbevrf";a:2:{i:0;R:44219;i:1;R:40466;}s:25:"1232:jvxvnzbovyr-srrqonpx";a:2:{i:0;R:44219;i:1;R:40466;}s:21:"1232:jvxvnzbovyr-onpx";a:2:{i:0;R:44219;i:1;R:40466;}s:29:"1232:jvxvnzbovyr-uvqr-frpgvba";a:2:{i:0;R:44219;i:1;R:40466;}s:36:"1232:jvxvnzbovyr-sbbgre-yvax-yvprafr";a:2:{i:0;R:44219;i:1;R:40466;}s:38:"1232:jvxvnzbovyr-sbbgre-yvax-yvsrfglyr";a:2:{i:0;R:44219;i:1;R:40466;}s:42:"1232:jvxvnzbovyr-sbbgre-yvax-ragregnvazrag";a:2:{i:0;R:44219;i:1;R:40466;}s:39:"1232:jvxvnzbovyr-sbbgre-yvax-ivqrbtnzrf";a:2:{i:0;R:44219;i:1;R:40466;}s:39:"1232:jvxvnzbovyr-pngrtbevrf-vgrzf-gbgny";a:2:{i:0;R:44219;i:1;R:40466;}s:36:"1232:jvxvnzbovyr-pngrtbel-vgrzf-zber";a:2:{i:0;R:44219;i:1;R:40466;}s:36:"1232:jvxvnzbovyr-pngrtbel-vgrzf-ceri";a:2:{i:0;R:44219;i:1;R:40466;}s:34:"1232:jvxvnzbovyr-pngrtbevrf-rkcnaq";a:2:{i:0;R:44219;i:1;R:40466;}s:36:"1232:jvxvnzbovyr-pngrtbevrf-pbyyncfr";a:2:{i:0;R:44219;i:1;R:40466;}s:36:"1232:jvxvnzbovyr-funevat-zrqvn-vzntr";a:2:{i:0;R:44219;i:1;R:40466;}s:34:"1232:jvxvnzbovyr-funevat-cntr-grkg";a:2:{i:0;R:44219;i:1;R:40466;}s:35:"1232:jvxvnzbovyr-funevat-zbqny-grkg";a:2:{i:0;R:44219;i:1;R:40466;}s:35:"1232:jvxvnzbovyr-funevat-rznvy-grkg";a:2:{i:0;R:44219;i:1;R:40466;}s:25:"1232:jvxvnzbovyr-nq-pybfr";a:2:{i:0;R:44219;i:1;R:40466;}s:27:"1232:jvxvncubgbtnyyrel-qrfp";a:2:{i:0;s:23:"wikia-wikiaphotogallery";i:1;R:40466;}s:27:"1232:jvxvncubgbtnyyrel-onpx";a:2:{i:0;R:44246;i:1;R:40466;}s:29:"1232:jvxvncubgbtnyyrel-svavfu";a:2:{i:0;R:44246;i:1;R:40466;}s:35:"1232:jvxvncubgbtnyyrel-srrq-pncgvba";a:2:{i:0;R:44246;i:1;R:40466;}s:39:"1232:jvxvncubgbtnyyrel-yvtugobk-pncgvba";a:2:{i:0;R:44246;i:1;R:40466;}s:34:"1232:jvxvncubgbtnyyrel-nqq-tnyyrel";a:2:{i:0;R:44246;i:1;R:40466;}s:40:"1232:jvxvncubgbtnyyrel-ivrjzbqr-nqqcubgb";a:2:{i:0;R:44246;i:1;R:40466;}s:33:"1232:jvxvncubgbtnyyrel-rqvg-nobeg";a:2:{i:0;R:44246;i:1;R:40466;}s:35:"1232:jvxvncubgbtnyyrel-rqvg-fhzznel";a:2:{i:0;R:44246;i:1;R:40466;}s:36:"1232:jvxvncubgbtnyyrel-reebe-pncgvba";a:2:{i:0;R:44246;i:1;R:40466;}s:37:"1232:jvxvncubgbtnyyrel-reebe-bhgqngrq";a:2:{i:0;R:44246;i:1;R:40466;}s:40:"1232:jvxvncubgbtnyyrel-reebe-jebat-gvgyr";a:2:{i:0;R:44246;i:1;R:40466;}s:40:"1232:jvxvncubgbtnyyrel-reebe-hfre-evtugf";a:2:{i:0;R:44246;i:1;R:40466;}s:35:"1232:jvxvncubgbtnyyrel-hcybnq-gvgyr";a:2:{i:0;R:44246;i:1;R:40466;}s:46:"1232:jvxvncubgbtnyyrel-hcybnq-vasb-pubbfr-yvfg";a:2:{i:0;R:44246;i:1;R:40466;}s:47:"1232:jvxvncubgbtnyyrel-hcybnq-vasb-vzntrf-ynory";a:2:{i:0;R:44246;i:1;R:40466;}s:41:"1232:jvxvncubgbtnyyrel-hcybnq-vasb-hcybnq";a:2:{i:0;R:44246;i:1;R:40466;}s:49:"1232:jvxvncubgbtnyyrel-hcybnq-vasb-hcybnqrq-ynory";a:2:{i:0;R:44246;i:1;R:40466;}s:41:"1232:jvxvncubgbtnyyrel-hcybnq-hcybnqgvgyr";a:2:{i:0;R:44246;i:1;R:40466;}s:42:"1232:jvxvncubgbtnyyrel-hcybnq-hcybnqohggba";a:2:{i:0;R:44246;i:1;R:40466;}s:39:"1232:jvxvncubgbtnyyrel-hcybnq-svaqgvgyr";a:2:{i:0;R:44246;i:1;R:40466;}s:40:"1232:jvxvncubgbtnyyrel-hcybnq-svaqohggba";a:2:{i:0;R:44246;i:1;R:40466;}s:44:"1232:jvxvncubgbtnyyrel-hcybnq-svyrfgvgyr-cer";a:2:{i:0;R:44246;i:1;R:40466;}s:45:"1232:jvxvncubgbtnyyrel-hcybnq-svyrfgvgyr-cbfg";a:2:{i:0;R:44246;i:1;R:40466;}s:39:"1232:jvxvncubgbtnyyrel-hcybnq-cntr-arkg";a:2:{i:0;R:44246;i:1;R:40466;}s:39:"1232:jvxvncubgbtnyyrel-hcybnq-cntr-ceri";a:2:{i:0;R:44246;i:1;R:40466;}s:41:"1232:jvxvncubgbtnyyrel-hcybnq-svyrfvafreg";a:2:{i:0;R:44246;i:1;R:40466;}s:41:"1232:jvxvncubgbtnyyrel-hcybnq-reebe-gvgyr";a:2:{i:0;R:44246;i:1;R:40466;}s:49:"1232:jvxvncubgbtnyyrel-hcybnq-reebe-onq-rkgrafvba";a:2:{i:0;R:44246;i:1;R:40466;}s:54:"1232:jvxvncubgbtnyyrel-hcybnq-reebe-svyranzr-vapbeerpg";a:2:{i:0;R:44246;i:1;R:40466;}s:54:"1232:jvxvncubgbtnyyrel-hcybnq-reebe-svyrglcr-vapbeerpg";a:2:{i:0;R:44246;i:1;R:40466;}s:52:"1232:jvxvncubgbtnyyrel-hcybnq-reebe-svyrglcr_zvffvat";a:2:{i:0;R:44246;i:1;R:40466;}s:44:"1232:jvxvncubgbtnyyrel-hcybnq-reebe-ernqbayl";a:2:{i:0;R:44246;i:1;R:40466;}s:50:"1232:jvxvncubgbtnyyrel-hcybnq-reebe-pbasyvpg-vageb";a:2:{i:0;R:44246;i:1;R:40466;}s:52:"1232:jvxvncubgbtnyyrel-hcybnq-reebe-svyrglcr-zvffvat";a:2:{i:0;R:44246;i:1;R:40466;}s:51:"1232:jvxvncubgbtnyyrel-hcybnq-reebe-pbasyvpg-eranzr";a:2:{i:0;R:44246;i:1;R:40466;}s:50:"1232:jvxvncubgbtnyyrel-hcybnq-reebe-pbasyvpg-erhfr";a:2:{i:0;R:44246;i:1;R:40466;}s:54:"1232:jvxvncubgbtnyyrel-hcybnq-reebe-pbasyvpg-birejevgr";a:2:{i:0;R:44246;i:1;R:40466;}s:51:"1232:jvxvncubgbtnyyrel-hcybnq-reebe-pbasyvpg-vafreg";a:2:{i:0;R:44246;i:1;R:40466;}s:43:"1232:jvxvncubgbtnyyrel-hcybnq-fryrpg-vzntrf";a:2:{i:0;R:44246;i:1;R:40466;}s:41:"1232:jvxvncubgbtnyyrel-cubgbbcgvbaf-gvgyr";a:2:{i:0;R:44246;i:1;R:40466;}s:40:"1232:jvxvncubgbtnyyrel-cubgbbcgvbaf-qbar";a:2:{i:0;R:44246;i:1;R:40466;}s:40:"1232:jvxvncubgbtnyyrel-cerivrj-ab-vzntrf";a:2:{i:0;R:44246;i:1;R:40466;}s:36:"1232:jvxvncubgbtnyyrel-cerivrj-gvgyr";a:2:{i:0;R:44246;i:1;R:40466;}s:43:"1232:jvxvncubgbtnyyrel-cerivrj-ubire-zbqvsl";a:2:{i:0;R:44246;i:1;R:40466;}s:43:"1232:jvxvncubgbtnyyrel-cerivrj-ubire-qryrgr";a:2:{i:0;R:44246;i:1;R:40466;}s:43:"1232:jvxvncubgbtnyyrel-cerivrj-cerivrjgvgyr";a:2:{i:0;R:44246;i:1;R:40466;}s:40:"1232:jvxvncubgbtnyyrel-cerivrj-nqq-cubgb";a:2:{i:0;R:44246;i:1;R:40466;}s:42:"1232:jvxvncubgbtnyyrel-cerivrj-nqq-pncgvba";a:2:{i:0;R:44246;i:1;R:40466;}s:46:"1232:jvxvncubgbtnyyrel-cerivrj-nqq-qrfpevcgvba";a:2:{i:0;R:44246;i:1;R:40466;}s:39:"1232:jvxvncubgbtnyyrel-cerivrj-nqq-yvax";a:2:{i:0;R:44246;i:1;R:40466;}s:50:"1232:jvxvncubgbtnyyrel-cerivrj-cynprubyqre-pncgvba";a:2:{i:0;R:44246;i:1;R:40466;}s:43:"1232:jvxvncubgbtnyyrel-cerivrj-yvax-gbbygvc";a:2:{i:0;R:44246;i:1;R:40466;}s:41:"1232:jvxvncubgbtnyyrel-cerivrj-srrq-ynory";a:2:{i:0;R:44246;i:1;R:40466;}s:41:"1232:jvxvncubgbtnyyrel-cerivrj-gno-ynlbhg";a:2:{i:0;R:44246;i:1;R:40466;}s:35:"1232:jvxvncubgbtnyyrel-cerivrj-fvmr";a:2:{i:0;R:44246;i:1;R:40466;}s:33:"1232:jvxvncubgbtnyyrel-cerivrj-ck";a:2:{i:0;R:44246;i:1;R:40466;}s:43:"1232:jvxvncubgbtnyyrel-cerivrj-fvmr-fznyyre";a:2:{i:0;R:44246;i:1;R:40466;}s:42:"1232:jvxvncubgbtnyyrel-cerivrj-fvmr-ynetre";a:2:{i:0;R:44246;i:1;R:40466;}s:38:"1232:jvxvncubgbtnyyrel-cerivrj-pbyhzaf";a:2:{i:0;R:44246;i:1;R:40466;}s:46:"1232:jvxvncubgbtnyyrel-cerivrj-pbyhzaf-qlanzvp";a:2:{i:0;R:44246;i:1;R:40466;}s:39:"1232:jvxvncubgbtnyyrel-cerivrj-cbfvgvba";a:2:{i:0;R:44246;i:1;R:40466;}s:44:"1232:jvxvncubgbtnyyrel-cerivrj-cbfvgvba-yrsg";a:2:{i:0;R:44246;i:1;R:40466;}s:46:"1232:jvxvncubgbtnyyrel-cerivrj-cbfvgvba-pragre";a:2:{i:0;R:44246;i:1;R:40466;}s:45:"1232:jvxvncubgbtnyyrel-cerivrj-cbfvgvba-evtug";a:2:{i:0;R:44246;i:1;R:40466;}s:38:"1232:jvxvncubgbtnyyrel-cerivrj-fcnpvat";a:2:{i:0;R:44246;i:1;R:40466;}s:44:"1232:jvxvncubgbtnyyrel-cerivrj-fcnpvat-fznyy";a:2:{i:0;R:44246;i:1;R:40466;}s:45:"1232:jvxvncubgbtnyyrel-cerivrj-fcnpvat-zrqvhz";a:2:{i:0;R:44246;i:1;R:40466;}s:44:"1232:jvxvncubgbtnyyrel-cerivrj-fcnpvat-ynetr";a:2:{i:0;R:44246;i:1;R:40466;}s:42:"1232:jvxvncubgbtnyyrel-cerivrj-bevragngvba";a:2:{i:0;R:44246;i:1;R:40466;}s:57:"1232:jvxvncubgbtnyyrel-cerivrj-bevragngvba-fdhner-gbbygvc";a:2:{i:0;R:44246;i:1;R:40466;}s:60:"1232:jvxvncubgbtnyyrel-cerivrj-bevragngvba-ynaqfpncr-gbbygvc";a:2:{i:0;R:44246;i:1;R:40466;}s:59:"1232:jvxvncubgbtnyyrel-cerivrj-bevragngvba-cbegenvg-gbbygvc";a:2:{i:0;R:44246;i:1;R:40466;}s:55:"1232:jvxvncubgbtnyyrel-cerivrj-bevragngvba-abar-gbbygvc";a:2:{i:0;R:44246;i:1;R:40466;}s:39:"1232:jvxvncubgbtnyyrel-cerivrj-pebc-fho";a:2:{i:0;R:44246;i:1;R:40466;}s:40:"1232:jvxvncubgbtnyyrel-cerivrj-gno-gurzr";a:2:{i:0;R:44246;i:1;R:40466;}s:46:"1232:jvxvncubgbtnyyrel-cerivrj-pncgvbacbfvgvba";a:2:{i:0;R:44246;i:1;R:40466;}s:53:"1232:jvxvncubgbtnyyrel-cerivrj-pncgvbacbfvgvba-jvguva";a:2:{i:0;R:44246;i:1;R:40466;}s:52:"1232:jvxvncubgbtnyyrel-cerivrj-pncgvbacbfvgvba-orybj";a:2:{i:0;R:44246;i:1;R:40466;}s:47:"1232:jvxvncubgbtnyyrel-cerivrj-pncgvbanyvtazrag";a:2:{i:0;R:44246;i:1;R:40466;}s:52:"1232:jvxvncubgbtnyyrel-cerivrj-pncgvbanyvtazrag-yrsg";a:2:{i:0;R:44246;i:1;R:40466;}s:54:"1232:jvxvncubgbtnyyrel-cerivrj-pncgvbanyvtazrag-pragre";a:2:{i:0;R:44246;i:1;R:40466;}s:53:"1232:jvxvncubgbtnyyrel-cerivrj-pncgvbanyvtazrag-evtug";a:2:{i:0;R:44246;i:1;R:40466;}s:42:"1232:jvxvncubgbtnyyrel-cerivrj-pncgvbafvmr";a:2:{i:0;R:44246;i:1;R:40466;}s:48:"1232:jvxvncubgbtnyyrel-cerivrj-pncgvbafvmr-fznyy";a:2:{i:0;R:44246;i:1;R:40466;}s:49:"1232:jvxvncubgbtnyyrel-cerivrj-pncgvbafvmr-zrqvhz";a:2:{i:0;R:44246;i:1;R:40466;}s:48:"1232:jvxvncubgbtnyyrel-cerivrj-pncgvbafvmr-ynetr";a:2:{i:0;R:44246;i:1;R:40466;}s:43:"1232:jvxvncubgbtnyyrel-cerivrj-pncgvbapbybe";a:2:{i:0;R:44246;i:1;R:40466;}s:41:"1232:jvxvncubgbtnyyrel-cerivrj-obeqrefvmr";a:2:{i:0;R:44246;i:1;R:40466;}s:46:"1232:jvxvncubgbtnyyrel-cerivrj-obeqrefvmr-abar";a:2:{i:0;R:44246;i:1;R:40466;}s:47:"1232:jvxvncubgbtnyyrel-cerivrj-obeqrefvmr-fznyy";a:2:{i:0;R:44246;i:1;R:40466;}s:48:"1232:jvxvncubgbtnyyrel-cerivrj-obeqrefvmr-zrqvhz";a:2:{i:0;R:44246;i:1;R:40466;}s:47:"1232:jvxvncubgbtnyyrel-cerivrj-obeqrefvmr-ynetr";a:2:{i:0;R:44246;i:1;R:40466;}s:42:"1232:jvxvncubgbtnyyrel-cerivrj-obeqrepbybe";a:2:{i:0;R:44246;i:1;R:40466;}s:48:"1232:jvxvncubgbtnyyrel-cerivrj-pbybecvpxre-gvgyr";a:2:{i:0;R:44246;i:1;R:40466;}s:46:"1232:jvxvncubgbtnyyrel-cerivrj-pbybecvpxre-urk";a:2:{i:0;R:44246;i:1;R:40466;}s:39:"1232:jvxvncubgbtnyyrel-cerivrj-pncgvbaf";a:2:{i:0;R:44246;i:1;R:40466;}s:44:"1232:jvxvncubgbtnyyrel-cerivrj-pncgvbaf-yrsg";a:2:{i:0;R:44246;i:1;R:40466;}s:46:"1232:jvxvncubgbtnyyrel-cerivrj-pncgvbaf-pragre";a:2:{i:0;R:44246;i:1;R:40466;}s:45:"1232:jvxvncubgbtnyyrel-cerivrj-pncgvbaf-evtug";a:2:{i:0;R:44246;i:1;R:40466;}s:37:"1232:jvxvncubgbtnyyrel-pbasyvpg-gvgyr";a:2:{i:0;R:44246;i:1;R:40466;}s:36:"1232:jvxvncubgbtnyyrel-pbasyvpg-uryc";a:2:{i:0;R:44246;i:1;R:40466;}s:36:"1232:jvxvncubgbtnyyrel-pbasyvpg-rqvg";a:2:{i:0;R:44246;i:1;R:40466;}s:36:"1232:jvxvncubgbtnyyrel-pbasyvpg-ivrj";a:2:{i:0;R:44246;i:1;R:40466;}s:43:"1232:jvxvncubgbtnyyrel-cerivrj-qryrgr-gvgyr";a:2:{i:0;R:44246;i:1;R:40466;}s:37:"1232:jvxvncubgbtnyyrel-cerivrj-qryrgr";a:2:{i:0;R:44246;i:1;R:40466;}s:43:"1232:jvxvncubgbtnyyrel-cerivrj-fnivat-gvgyr";a:2:{i:0;R:44246;i:1;R:40466;}s:43:"1232:jvxvncubgbtnyyrel-cerivrj-fnivat-vageb";a:2:{i:0;R:44246;i:1;R:40466;}s:33:"1232:jvxvncubgbtnyyrel-dhvg-gvgyr";a:2:{i:0;R:44246;i:1;R:40466;}s:33:"1232:jvxvncubgbtnyyrel-dhvg-vageb";a:2:{i:0;R:44246;i:1;R:40466;}s:36:"1232:jvxvncubgbtnyyrel-dhvg-fnirdhvg";a:2:{i:0;R:44246;i:1;R:40466;}s:36:"1232:jvxvncubgbtnyyrel-dhvg-dhvgbayl";a:2:{i:0;R:44246;i:1;R:40466;}s:52:"1232:jvxvncubgbtnyyrel-fyvqrfubj-ivrj-cbcbhg-gbbygvc";a:2:{i:0;R:44246;i:1;R:40466;}s:46:"1232:jvxvncubgbtnyyrel-fyvqrfubj-ivrj-nqqcubgb";a:2:{i:0;R:44246;i:1;R:40466;}s:50:"1232:jvxvncubgbtnyyrel-fyvqrfubj-ivrj-arkg-gbbygvc";a:2:{i:0;R:44246;i:1;R:40466;}s:50:"1232:jvxvncubgbtnyyrel-fyvqrfubj-ivrj-ceri-gbbygvc";a:2:{i:0;R:44246;i:1;R:40466;}s:43:"1232:jvxvncubgbtnyyrel-fyvqrfubj-ivrj-gvgyr";a:2:{i:0;R:44246;i:1;R:40466;}s:44:"1232:jvxvncubgbtnyyrel-fyvqrfubj-ivrj-ahzore";a:2:{i:0;R:44246;i:1;R:40466;}s:52:"1232:jvxvncubgbtnyyrel-fyvqrfubj-ivrj-fgnegfyvqrfubj";a:2:{i:0;R:44246;i:1;R:40466;}s:51:"1232:jvxvncubgbtnyyrel-fyvqrfubj-ivrj-fgbcfyvqrfubj";a:2:{i:0;R:44246;i:1;R:40466;}s:53:"1232:jvxvncubgbtnyyrel-fyvqrfubj-ivrj-qrgnvyf-gbbygvc";a:2:{i:0;R:44246;i:1;R:40466;}s:50:"1232:jvxvncubgbtnyyrel-fyvqrfubj-ivrj-yvax-bireynl";a:2:{i:0;R:44246;i:1;R:40466;}s:35:"1232:jvxvncubgbtnyyrel-pubvpr-gvgyr";a:2:{i:0;R:44246;i:1;R:40466;}s:35:"1232:jvxvncubgbtnyyrel-pubvpr-vageb";a:2:{i:0;R:44246;i:1;R:40466;}s:39:"1232:jvxvncubgbtnyyrel-pubvpr-fyvqrfubj";a:2:{i:0;R:44246;i:1;R:40466;}s:37:"1232:jvxvncubgbtnyyrel-pubvpr-tnyyrel";a:2:{i:0;R:44246;i:1;R:40466;}s:36:"1232:jvxvncubgbtnyyrel-pubvpr-fyvqre";a:2:{i:0;R:44246;i:1;R:40466;}s:45:"1232:jvxvncubgbtnyyrel-fyvqrfubjcerivrj-gvgyr";a:2:{i:0;R:44246;i:1;R:40466;}s:52:"1232:jvxvncubgbtnyyrel-fyvqrfubjcerivrj-bcgvbafgvgyr";a:2:{i:0;R:44246;i:1;R:40466;}s:44:"1232:jvxvncubgbtnyyrel-fyvqrfubjcerivrj-fvmr";a:2:{i:0;R:44246;i:1;R:40466;}s:52:"1232:jvxvncubgbtnyyrel-fyvqrfubjcerivrj-fvmr-fznyyre";a:2:{i:0;R:44246;i:1;R:40466;}s:51:"1232:jvxvncubgbtnyyrel-fyvqrfubjcerivrj-fvmr-ynetre";a:2:{i:0;R:44246;i:1;R:40466;}s:44:"1232:jvxvncubgbtnyyrel-fyvqrfubjcerivrj-pebc";a:2:{i:0;R:44246;i:1;R:40466;}s:53:"1232:jvxvncubgbtnyyrel-fyvqrfubjcerivrj-erpraghcybnqf";a:2:{i:0;R:44246;i:1;R:40466;}s:51:"1232:jvxvncubgbtnyyrel-fyvqrfubjcerivrj-cubgbfgvgyr";a:2:{i:0;R:44246;i:1;R:40466;}s:48:"1232:jvxvncubgbtnyyrel-fyvqrfubjcerivrj-nqqcubgb";a:2:{i:0;R:44246;i:1;R:40466;}s:48:"1232:jvxvncubgbtnyyrel-fyvqrfubjcerivrj-cbfvgvba";a:2:{i:0;R:44246;i:1;R:40466;}s:53:"1232:jvxvncubgbtnyyrel-fyvqrfubjcerivrj-cbfvgvba-yrsg";a:2:{i:0;R:44246;i:1;R:40466;}s:55:"1232:jvxvncubgbtnyyrel-fyvqrfubjcerivrj-cbfvgvba-pragre";a:2:{i:0;R:44246;i:1;R:40466;}s:54:"1232:jvxvncubgbtnyyrel-fyvqrfubjcerivrj-cbfvgvba-evtug";a:2:{i:0;R:44246;i:1;R:40466;}s:48:"1232:jvxvncubgbtnyyrel-fyvqrecerivrj-cubgbfgvgyr";a:2:{i:0;R:44246;i:1;R:40466;}s:49:"1232:jvxvncubgbtnyyrel-fyvqrecerivrj-bcgvbafgvgyr";a:2:{i:0;R:44246;i:1;R:40466;}s:47:"1232:jvxvncubgbtnyyrel-fyvqrecerivrj-pubbfrglcr";a:2:{i:0;R:44246;i:1;R:40466;}s:62:"1232:jvxvncubgbtnyyrel-fyvqrecerivrj-pubbfrglcr-obggbz-gbbygvc";a:2:{i:0;R:44246;i:1;R:40466;}s:61:"1232:jvxvncubgbtnyyrel-fyvqrecerivrj-pubbfrglcr-evtug-gbbygvc";a:2:{i:0;R:44246;i:1;R:40466;}s:45:"1232:jvxvncubgbtnyyrel-fyvqrecerivrj-nqqcubgb";a:2:{i:0;R:44246;i:1;R:40466;}s:42:"1232:jvxvncubgbtnyyrel-fyvqrecerivrj-gvgyr";a:2:{i:0;R:44246;i:1;R:40466;}s:45:"1232:jvxvncubgbtnyyrel-hcybnq-gvgyr-fyvqrfubj";a:2:{i:0;R:44246;i:1;R:40466;}s:43:"1232:jvxvncubgbtnyyrel-hcybnq-gvgyr-tnyyrel";a:2:{i:0;R:44246;i:1;R:40466;}s:42:"1232:jvxvncubgbtnyyrel-hcybnq-gvgyr-fyvqre";a:2:{i:0;R:44246;i:1;R:40466;}s:40:"1232:jvxvncubgbtnyyrel-hcybnq-hcybnqgrkg";a:2:{i:0;R:44246;i:1;R:40466;}s:42:"1232:jvxvncubgbtnyyrel-hcybnq-rkvfgvatgrkg";a:2:{i:0;R:44246;i:1;R:40466;}s:52:"1232:jvxvncubgbtnyyrel-hcybnq-rkvfgvatgrkg-banegvpyr";a:2:{i:0;R:44246;i:1;R:40466;}s:55:"1232:jvxvncubgbtnyyrel-hcybnq-rkvfgvatgrkg-erpraghcybnq";a:2:{i:0;R:44246;i:1;R:40466;}s:42:"1232:jvxvncubgbtnyyrel-hcybnq-fryrpgohggba";a:2:{i:0;R:44246;i:1;R:40466;}s:51:"1232:jvxvncubgbtnyyrel-cubgbbcgvbaf-gvgyr-fyvqrfubj";a:2:{i:0;R:44246;i:1;R:40466;}s:49:"1232:jvxvncubgbtnyyrel-cubgbbcgvbaf-gvgyr-tnyyrel";a:2:{i:0;R:44246;i:1;R:40466;}s:48:"1232:jvxvncubgbtnyyrel-cubgbbcgvbaf-pncgvbagvgyr";a:2:{i:0;R:44246;i:1;R:40466;}s:46:"1232:jvxvncubgbtnyyrel-cubgbbcgvbaf-pncgvbafho";a:2:{i:0;R:44246;i:1;R:40466;}s:45:"1232:jvxvncubgbtnyyrel-cubgbbcgvbaf-yvaxgvgyr";a:2:{i:0;R:44246;i:1;R:40466;}s:43:"1232:jvxvncubgbtnyyrel-cubgbbcgvbaf-yvaxfho";a:2:{i:0;R:44246;i:1;R:40466;}s:44:"1232:jvxvncubgbtnyyrel-cubgbbcgvbaf-yvaxgrkg";a:2:{i:0;R:44246;i:1;R:40466;}s:43:"1232:jvxvncubgbtnyyrel-cubgbbcgvbaf-yvaxhey";a:2:{i:0;R:44246;i:1;R:40466;}s:47:"1232:jvxvncubgbtnyyrel-cubgbbcgvbaf-qrfpevcgvba";a:2:{i:0;R:44246;i:1;R:40466;}s:37:"1232:jvxvncubgbtnyyrel-frnepu-gbbygvc";a:2:{i:0;R:44246;i:1;R:40466;}s:46:"1232:jvxvncubgbtnyyrel-hcybnq-vzntr-fvmr-reebe";a:2:{i:0;R:44246;i:1;R:40466;}s:40:"1232:jvxvncubgbtnyyrel-hcybnq-vzntr-fvmr";a:2:{i:0;R:44246;i:1;R:40466;}s:36:"1232:jvxvncubgbtnyyrel-abg-qvfcynlrq";a:2:{i:0;R:44246;i:1;R:40466;}s:28:"1232:tnyrel-fyvqre-ernq-zber";a:2:{i:0;R:44246;i:1;R:40466;}s:19:"1232:jvxvncbyy-qrfp";a:2:{i:0;s:15:"wikia-wikiapoll";i:1;R:40466;}s:27:"1232:jvxvncbyy-crbcyr-ibgrq";a:2:{i:0;R:44416;i:1;R:40466;}s:23:"1232:jvxvncbyy-dhrfgvba";a:2:{i:0;R:44416;i:1;R:40466;}s:30:"1232:jvxvncbyy-gunaxf-sbe-ibgr";a:2:{i:0;R:44416;i:1;R:40466;}s:19:"1232:jvxvncbyy-ibgr";a:2:{i:0;R:44416;i:1;R:40466;}s:20:"1232:jvxvncbyy-ibgrf";a:2:{i:0;R:44416;i:1;R:40466;}s:34:"1232:jvxvncbyy-dhrfgvba-znex-nsgre";a:2:{i:0;R:44416;i:1;R:40466;}s:35:"1232:jvxvncbyy-dhrfgvba-znex-orsber";a:2:{i:0;R:44416;i:1;R:40466;}s:34:"1232:jvxvncbyy-perngrcbyy-urnqyvar";a:2:{i:0;R:44416;i:1;R:40466;}s:32:"1232:jvxvncbyy-rqvgcbyy-urnqyvar";a:2:{i:0;R:44416;i:1;R:40466;}s:29:"1232:jvxvncbyy-dhrfgvba-ynory";a:2:{i:0;R:44416;i:1;R:40466;}s:31:"1232:jvxvncbyy-nqqarjvgrz-ynory";a:2:{i:0;R:44416;i:1;R:40466;}s:27:"1232:jvxvncbyy-pnapry-ynory";a:2:{i:0;R:44416;i:1;R:40466;}s:28:"1232:jvxvncbyy-choyvfu-ynory";a:2:{i:0;R:44416;i:1;R:40466;}s:30:"1232:jvxvncbyy-reebe-qhcyvpngr";a:2:{i:0;R:44416;i:1;R:40466;}s:34:"1232:jvxvncbyy-reebe-vainyvq-gvgyr";a:2:{i:0;R:44416;i:1;R:40466;}s:19:"1232:jvxvndhvm-qrfp";a:2:{i:0;s:15:"wikia-wikiaquiz";i:1;R:40466;}s:34:"1232:jvxvndhvm-perngrdhvm-urnqyvar";a:2:{i:0;R:44433;i:1;R:40466;}s:32:"1232:jvxvndhvm-rqvgdhvm-urnqyvar";a:2:{i:0;R:44433;i:1;R:40466;}s:41:"1232:jvxvndhvm-perngrdhvmnegvpyr-urnqyvar";a:2:{i:0;R:44433;i:1;R:40466;}s:39:"1232:jvxvndhvm-rqvgdhvmnegvpyr-urnqyvar";a:2:{i:0;R:44433;i:1;R:40466;}s:26:"1232:jvxvndhvm-gvgyr-ynory";a:2:{i:0;R:44433;i:1;R:40466;}s:36:"1232:jvxvndhvm-gvgyrfperragrkg-ynory";a:2:{i:0;R:44433;i:1;R:40466;}s:41:"1232:jvxvndhvm-soerpbzzraqngvbagrkg-ynory";a:2:{i:0;R:44433;i:1;R:40466;}s:38:"1232:jvxvndhvm-gvgyrfperravzntrf-ynory";a:2:{i:0;R:44433;i:1;R:40466;}s:36:"1232:jvxvndhvm-zbervasburnqvat-ynory";a:2:{i:0;R:44433;i:1;R:40466;}s:33:"1232:jvxvndhvm-erdhverrznvy-ynory";a:2:{i:0;R:44433;i:1;R:40466;}s:34:"1232:jvxvndhvm-zbervasbyvaxf-ynory";a:2:{i:0;R:44433;i:1;R:40466;}s:36:"1232:jvxvndhvm-zbervasbnegvpyr-ynory";a:2:{i:0;R:44433;i:1;R:40466;}s:37:"1232:jvxvndhvm-zbervasbyvaxgrkg-ynory";a:2:{i:0;R:44433;i:1;R:40466;}s:29:"1232:jvxvndhvm-dhrfgvba-ynory";a:2:{i:0;R:44433;i:1;R:40466;}s:26:"1232:jvxvndhvm-vzntr-ynory";a:2:{i:0;R:44433;i:1;R:40466;}s:26:"1232:jvxvndhvm-ivqrb-ynory";a:2:{i:0;R:44433;i:1;R:40466;}s:32:"1232:jvxvndhvm-rkcynangvba-ynory";a:2:{i:0;R:44433;i:1;R:40466;}s:25:"1232:jvxvndhvm-dhvm-ynory";a:2:{i:0;R:44433;i:1;R:40466;}s:30:"1232:jvxvndhvm-dhrfgvbaf-ynory";a:2:{i:0;R:44433;i:1;R:40466;}s:28:"1232:jvxvndhvm-nafjref-ynory";a:2:{i:0;R:44433;i:1;R:40466;}s:27:"1232:jvxvndhvm-nafjre-ynory";a:2:{i:0;R:44433;i:1;R:40466;}s:28:"1232:jvxvndhvm-pbeerpg-ynory";a:2:{i:0;R:44433;i:1;R:40466;}s:31:"1232:jvxvndhvm-nqqarjvgrz-ynory";a:2:{i:0;R:44433;i:1;R:40466;}s:27:"1232:jvxvndhvm-pnapry-ynory";a:2:{i:0;R:44433;i:1;R:40466;}s:28:"1232:jvxvndhvm-choyvfu-ynory";a:2:{i:0;R:44433;i:1;R:40466;}s:35:"1232:jvxvndhvm-reebe-qhcyvpngr-dhvm";a:2:{i:0;R:44433;i:1;R:40466;}s:39:"1232:jvxvndhvm-reebe-qhcyvpngr-dhrfgvba";a:2:{i:0;R:44433;i:1;R:40466;}s:37:"1232:jvxvndhvm-reebe-vainyvq-dhrfgvba";a:2:{i:0;R:44433;i:1;R:40466;}s:34:"1232:jvxvndhvm-reebe-vainyvq-vzntr";a:2:{i:0;R:44433;i:1;R:40466;}s:34:"1232:jvxvndhvm-reebe-vainyvq-ivqrb";a:2:{i:0;R:44433;i:1;R:40466;}s:36:"1232:jvxvndhvm-reebe-zvffvat-nafjref";a:2:{i:0;R:44433;i:1;R:40466;}s:43:"1232:jvxvndhvm-reebe-vainyvq-pbeerpg-nafjre";a:2:{i:0;R:44433;i:1;R:40466;}s:33:"1232:jvxvndhvm-reebe-vainyvq-dhvm";a:2:{i:0;R:44433;i:1;R:40466;}s:36:"1232:jvxvndhvm-reebe-vainyvq-negvpyr";a:2:{i:0;R:44433;i:1;R:40466;}s:49:"1232:jvxvndhvm-reebe-vainyvq-negvpyr-jvgu-qrgnvyf";a:2:{i:0;R:44433;i:1;R:40466;}s:32:"1232:jvxvndhvm-tnzr-fgneg-ohggba";a:2:{i:0;R:44433;i:1;R:40466;}s:29:"1232:jvxvndhvm-tnzr-pnqrapr-3";a:2:{i:0;R:44433;i:1;R:40466;}s:29:"1232:jvxvndhvm-tnzr-pnqrapr-2";a:2:{i:0;R:44433;i:1;R:40466;}s:29:"1232:jvxvndhvm-tnzr-pnqrapr-1";a:2:{i:0;R:44433;i:1;R:40466;}s:34:"1232:jvxvndhvm-tnzr-dhrfgvba-ynory";a:2:{i:0;R:44433;i:1;R:40466;}s:31:"1232:jvxvndhvm-tnzr-arkg-ohggba";a:2:{i:0;R:44433;i:1;R:40466;}s:33:"1232:jvxvndhvm-tnzr-svavfu-ohggba";a:2:{i:0;R:44433;i:1;R:40466;}s:33:"1232:jvxvndhvm-tnzr-pbeerpg-ynory";a:2:{i:0;R:44433;i:1;R:40466;}s:35:"1232:jvxvndhvm-tnzr-vapbeerpg-ynory";a:2:{i:0;R:44433;i:1;R:40466;}s:35:"1232:jvxvndhvm-tnzr-pbatenghyngvbaf";a:2:{i:0;R:44433;i:1;R:40466;}s:40:"1232:jvxvndhvm-tnzr-pbatenghyngvbaf-naba";a:2:{i:0;R:44433;i:1;R:40466;}s:30:"1232:jvxvndhvm-tnzr-lbhe-fpber";a:2:{i:0;R:44433;i:1;R:40466;}s:35:"1232:jvxvndhvm-tnzr-pbagvahr-ohggba";a:2:{i:0;R:44433;i:1;R:40466;}s:26:"1232:jvxvndhvm-tnzr-gunaxf";a:2:{i:0;R:44433;i:1;R:40466;}s:33:"1232:jvxvndhvm-tnzr-cebivqr-rznvy";a:2:{i:0;R:44433;i:1;R:40466;}s:37:"1232:jvxvndhvm-tnzr-rznvy-cynprubyqre";a:2:{i:0;R:44433;i:1;R:40466;}s:32:"1232:jvxvndhvm-tnzr-rznvy-ohggba";a:2:{i:0;R:44433;i:1;R:40466;}s:38:"1232:jvxvndhvm-tnzr-rznvy-inyvq-cyrnfr";a:2:{i:0;R:44433;i:1;R:40466;}s:40:"1232:jvxvndhvm-tnzr-rznvy-gbxra-zvfzngpu";a:2:{i:0;R:44433;i:1;R:40466;}s:33:"1232:jvxvndhvm-tnzr-rznvy-fhowrpg";a:2:{i:0;R:44433;i:1;R:40466;}s:30:"1232:jvxvndhvm-tnzr-rznvy-obql";a:2:{i:0;R:44433;i:1;R:40466;}s:31:"1232:jvxvndhvm-tnzr-rznvy-reebe";a:2:{i:0;R:44433;i:1;R:40466;}s:29:"1232:jvxvndhvm-tnzr-punyyratr";a:2:{i:0;R:44433;i:1;R:40466;}s:24:"1232:jvxvndhvm-tnzr-zhgr";a:2:{i:0;R:44433;i:1;R:40466;}s:24:"1232:jvxvnivqrb-eriregrq";a:2:{i:0;s:16:"wikia-wikiavideo";i:1;R:40466;}s:26:"1232:jvxvnivqrb-haeriregrq";a:2:{i:0;R:44494;i:1;R:40466;}s:21:"1232:jvxvnivqrb-nqqrq";a:2:{i:0;R:44494;i:1;R:40466;}s:23:"1232:jvxvnivqrb-hcqngrq";a:2:{i:0;R:44494;i:1;R:40466;}s:20:"1232:jvxvnivqrb-onpx";a:2:{i:0;R:44494;i:1;R:40466;}s:22:"1232:jvxvnivqrb-perngr";a:2:{i:0;R:44494;i:1;R:40466;}s:23:"1232:jvxvnivqrb-ercynpr";a:2:{i:0;R:44494;i:1;R:40466;}s:24:"1232:jvxvnivqrb-pngrtbel";a:2:{i:0;R:44494;i:1;R:40466;}s:21:"1232:jvxvnivqrb-yvaxf";a:2:{i:0;R:44494;i:1;R:40466;}s:27:"1232:jvxvnivqrb-cynprubyqre";a:2:{i:0;R:44494;i:1;R:40466;}s:32:"1232:jvxvnivqrb-tnyyrel-grzcyngr";a:2:{i:0;R:44494;i:1;R:40466;}s:29:"1232:jvxvnivqrb-abg-fhccbegrq";a:2:{i:0;R:44494;i:1;R:40466;}s:27:"1232:jvxvnivqrb-qryrgrq-byq";a:2:{i:0;R:44494;i:1;R:40466;}s:25:"1232:jvxvnivqrb-vageb-byq";a:2:{i:0;R:44494;i:1;R:40466;}s:23:"1232:jvxvnivqrb-qrgnvyf";a:2:{i:0;R:44494;i:1;R:40466;}s:16:"1232:jin-fhpprff";a:2:{i:0;s:19:"wikia-wikiavideoadd";i:1;R:40466;}s:25:"1232:jin-fhpprff-ercynprq";a:2:{i:0;R:44510;i:1;R:40466;}s:16:"1232:jin-snvyher";a:2:{i:0;R:44510;i:1;R:40466;}s:13:"1232:jin-anzr";a:2:{i:0;R:44510;i:1;R:40466;}s:12:"1232:jin-hey";a:2:{i:0;R:44510;i:1;R:40466;}s:12:"1232:jin-nqq";a:2:{i:0;R:44510;i:1;R:40466;}s:14:"1232:jin-gvgyr";a:2:{i:0;R:44510;i:1;R:40466;}s:18:"1232:jin-abgybttrq";a:2:{i:0;R:44510;i:1;R:40466;}s:19:"1232:jin-abgnyybjrq";a:2:{i:0;R:44510;i:1;R:40466;}s:18:"1232:jin-cebgrpgrq";a:2:{i:0;R:44510;i:1;R:40466;}s:16:"1232:jvxvnjvqtrg";a:2:{i:0;s:17:"wikia-wikiawidget";i:1;R:40466;}s:21:"1232:jvxvohvyqre-qrfp";a:2:{i:0;s:17:"wikia-wikibuilder";i:1;R:40466;}s:14:"1232:bjo-gvgyr";a:2:{i:0;R:44523;i:1;R:40466;}s:17:"1232:bjo-urnqyvar";a:2:{i:0;R:44523;i:1;R:40466;}s:20:"1232:bjo-ohggba-fxvc";a:2:{i:0;R:44523;i:1;R:40466;}s:26:"1232:bjo-ohggba-fnir-vageb";a:2:{i:0;R:44523;i:1;R:40466;}s:26:"1232:bjo-ohggba-fnir-gurzr";a:2:{i:0;R:44523;i:1;R:40466;}s:26:"1232:bjo-ohggba-fnir-cntrf";a:2:{i:0;R:44523;i:1;R:40466;}s:20:"1232:bjo-ohggba-qbar";a:2:{i:0;R:44523;i:1;R:40466;}s:20:"1232:bjo-ohggba-cyhf";a:2:{i:0;R:44523;i:1;R:40466;}s:14:"1232:bjo-fgrc1";a:2:{i:0;R:44523;i:1;R:40466;}s:20:"1232:bjo-fgrc1-ynory";a:2:{i:0;R:44523;i:1;R:40466;}s:30:"1232:bjo-fgrc1-ynory-sbeznggrq";a:2:{i:0;R:44523;i:1;R:40466;}s:26:"1232:bjo-fgrc1-vafgehpgvba";a:2:{i:0;R:44523;i:1;R:40466;}s:21:"1232:bjo-fgrc1-fnzcyr";a:2:{i:0;R:44523;i:1;R:40466;}s:14:"1232:bjo-fgrc2";a:2:{i:0;R:44523;i:1;R:40466;}s:20:"1232:bjo-fgrc2-ynory";a:2:{i:0;R:44523;i:1;R:40466;}s:30:"1232:bjo-fgrc2-ynory-sbeznggrq";a:2:{i:0;R:44523;i:1;R:40466;}s:27:"1232:bjo-fgrc2-vafgehpgvba1";a:2:{i:0;R:44523;i:1;R:40466;}s:27:"1232:bjo-fgrc2-vafgehpgvba2";a:2:{i:0;R:44523;i:1;R:40466;}s:22:"1232:bjo-fgrc2-tnyyrel";a:2:{i:0;R:44523;i:1;R:40466;}s:14:"1232:bjo-fgrc3";a:2:{i:0;R:44523;i:1;R:40466;}s:20:"1232:bjo-fgrc3-ynory";a:2:{i:0;R:44523;i:1;R:40466;}s:30:"1232:bjo-fgrc3-ynory-sbeznggrq";a:2:{i:0;R:44523;i:1;R:40466;}s:26:"1232:bjo-fgrc3-vafgehpgvba";a:2:{i:0;R:44523;i:1;R:40466;}s:25:"1232:bjo-fgrc3-lbhe-cntrf";a:2:{i:0;R:44523;i:1;R:40466;}s:30:"1232:bjo-fgrc3-rknzcyrf1-gvgyr";a:2:{i:0;R:44523;i:1;R:40466;}s:24:"1232:bjo-fgrc3-rknzcyrf1";a:2:{i:0;R:44523;i:1;R:40466;}s:30:"1232:bjo-fgrc3-rknzcyrf2-gvgyr";a:2:{i:0;R:44523;i:1;R:40466;}s:24:"1232:bjo-fgrc3-rknzcyrf2";a:2:{i:0;R:44523;i:1;R:40466;}s:14:"1232:bjo-fgrc4";a:2:{i:0;R:44523;i:1;R:40466;}s:30:"1232:bjo-fgrc4-ynory-sbeznggrq";a:2:{i:0;R:44523;i:1;R:40466;}s:20:"1232:bjo-fgrc4-ynory";a:2:{i:0;R:44523;i:1;R:40466;}s:26:"1232:bjo-fgrc4-vafgehpgvba";a:2:{i:0;R:44523;i:1;R:40466;}s:26:"1232:bjo-fgrc4-onfvp-cevpr";a:2:{i:0;R:44523;i:1;R:40466;}s:28:"1232:bjo-fgrc4-onfvp-qrgnvyf";a:2:{i:0;R:44523;i:1;R:40466;}s:25:"1232:bjo-fgrc4-cyhf-cevpr";a:2:{i:0;R:44523;i:1;R:40466;}s:27:"1232:bjo-fgrc4-cyhf-qrgnvyf";a:2:{i:0;R:44523;i:1;R:40466;}s:28:"1232:bjo-fgrc4-reebe-pncgvba";a:2:{i:0;R:44523;i:1;R:40466;}s:36:"1232:bjo-fgrc4-reebe-hctenqr-pbagrag";a:2:{i:0;R:44523;i:1;R:40466;}s:34:"1232:bjo-fgrc4-reebe-gbxra-pbagrag";a:2:{i:0;R:44523;i:1;R:40466;}s:22:"1232:bjo-fgnghf-fnivat";a:2:{i:0;R:44523;i:1;R:40466;}s:35:"1232:bjo-hanoyr-gb-rqvg-qrfpevcgvba";a:2:{i:0;R:44523;i:1;R:40466;}s:27:"1232:bjo-ernqbayl-gel-ntnva";a:2:{i:0;R:44523;i:1;R:40466;}s:30:"1232:bjo-reebe-fnivat-negvpyrf";a:2:{i:0;R:44523;i:1;R:40466;}s:24:"1232:bjo-ncv-reebe-gvgyr";a:2:{i:0;R:44523;i:1;R:40466;}s:18:"1232:bjo-ncv-reebe";a:2:{i:0;R:44523;i:1;R:40466;}s:23:"1232:bjo-arj-cntrf-grkg";a:2:{i:0;R:44523;i:1;R:40466;}s:25:"1232:jvxvsnpgbelcntrgvgyr";a:2:{i:0;s:17:"wikia-wikifactory";i:1;R:40466;}s:16:"1232:jvxvsnpgbel";a:2:{i:0;R:44571;i:1;R:40466;}s:14:"1232:pybfrjvxv";a:2:{i:0;R:44571;i:1;R:40466;}s:16:"1232:js_pvgl_hey";a:2:{i:0;R:44571;i:1;R:40466;}s:15:"1232:js_pvgl_vq";a:2:{i:0;R:44571;i:1;R:40466;}s:18:"1232:js_pvgl_gvgyr";a:2:{i:0;R:44571;i:1;R:40466;}s:20:"1232:js_pvgl_perngrq";a:2:{i:0;R:44571;i:1;R:40466;}s:26:"1232:js_pvgl_sbhaqvat_hfre";a:2:{i:0;R:44571;i:1;R:40466;}s:27:"1232:js_pvgl_sbhaqvat_rznvy";a:2:{i:0;R:44571;i:1;R:40466;}s:19:"1232:js_pvgl_choyvp";a:2:{i:0;R:44571;i:1;R:40466;}s:17:"1232:js_pvgl_ynat";a:2:{i:0;R:44571;i:1;R:40466;}s:15:"1232:js_pp_anzr";a:2:{i:0;R:44571;i:1;R:40466;}s:31:"1232:jvxvsnpgbel_erzbirinevnoyr";a:2:{i:0;R:44571;i:1;R:40466;}s:30:"1232:jvxvsnpgbel_erzbirpbasvez";a:2:{i:0;R:44571;i:1;R:40466;}s:27:"1232:jvxvsnpgbel-ynory-vasb";a:2:{i:0;R:44571;i:1;R:40466;}s:32:"1232:jvxvsnpgbel-ynory-inevnoyrf";a:2:{i:0;R:44571;i:1;R:40466;}s:33:"1232:jvxvsnpgbel-ynory-inevnoyrf2";a:2:{i:0;R:44571;i:1;R:40466;}s:27:"1232:jvxvsnpgbel-ynory-uhof";a:2:{i:0;R:44571;i:1;R:40466;}s:30:"1232:jvxvsnpgbel-ynory-qbznvaf";a:2:{i:0;R:44571;i:1;R:40466;}s:29:"1232:jvxvsnpgbel-ynory-erghea";a:2:{i:0;R:44571;i:1;R:40466;}s:27:"1232:jvxvsnpgbel-ynory-pybt";a:2:{i:0;R:44571;i:1;R:40466;}s:30:"1232:jvxvsnpgbel-ynory-npgvbaf";a:2:{i:0;R:44571;i:1;R:40466;}s:29:"1232:jvxvsnpgbel-ynory-tbbtyr";a:2:{i:0;R:44571;i:1;R:40466;}s:28:"1232:jvxvsnpgbel-ynory-pybfr";a:2:{i:0;R:44571;i:1;R:40466;}s:27:"1232:jvxvsnpgbel-ynory-gntf";a:2:{i:0;R:44571;i:1;R:40466;}s:28:"1232:jvxvsnpgbel-ynory-gntf2";a:2:{i:0;R:44571;i:1;R:40466;}s:31:"1232:jvxvsnpgbel-ynory-znffgntf";a:2:{i:0;R:44571;i:1;R:40466;}s:31:"1232:jvxvsnpgbel-ynory-svaqgntf";a:2:{i:0;R:44571;i:1;R:40466;}s:37:"1232:jvxvsnpgbel-ynory-rmfunerqhcybnq";a:2:{i:0;R:44571;i:1;R:40466;}s:34:"1232:jvxvsnpgbel-ynory-rmanzrfcnpr";a:2:{i:0;R:44571;i:1;R:40466;}s:30:"1232:jvxvsnpgbel-ynory-pbzcner";a:2:{i:0;R:44571;i:1;R:40466;}s:22:"1232:evtug-jvxvsnpgbel";a:2:{i:0;R:44571;i:1;R:40466;}s:28:"1232:jvxvsnpgbel-qbznva-rqvg";a:2:{i:0;R:44571;i:1;R:40466;}s:30:"1232:jvxvsnpgbel-qbznva-erzbir";a:2:{i:0;R:44571;i:1;R:40466;}s:31:"1232:jvxvsnpgbel-qbznva-frgznva";a:2:{i:0;R:44571;i:1;R:40466;}s:32:"1232:pybfrjvxv-purpx-naq-pbasvez";a:2:{i:0;R:44571;i:1;R:40466;}s:26:"1232:pybfrjvxv-erqverpg-gb";a:2:{i:0;R:44571;i:1;R:40466;}s:22:"1232:pybfrjvxv-zrffntr";a:2:{i:0;R:44571;i:1;R:40466;}s:29:"1232:pybfrjvxv-pbasvez-ohggba";a:2:{i:0;R:44571;i:1;R:40466;}s:23:"1232:pybfrjvxv-aoe-jvxv";a:2:{i:0;R:44571;i:1;R:40466;}s:26:"1232:pybfrjvxv-jvxv-pybfrq";a:2:{i:0;R:44571;i:1;R:40466;}s:34:"1232:pybfrjvxv-jvxv-pybfrq_erzbirq";a:2:{i:0;R:44571;i:1;R:40466;}s:35:"1232:pybfrjvxv-jvxv-pybfrq_erqverpg";a:2:{i:0;R:44571;i:1;R:40466;}s:23:"1232:pybfrjvxv-qhzc-hey";a:2:{i:0;R:44571;i:1;R:40466;}s:25:"1232:pybfrjvxv-vzntrf-hey";a:2:{i:0;R:44571;i:1;R:40466;}s:22:"1232:pybfrjvxv-haxabja";a:2:{i:0;R:44571;i:1;R:40466;}s:21:"1232:pybfrjvxv-erghea";a:2:{i:0;R:44571;i:1;R:40466;}s:33:"1232:jvxvsnpgbel-ohggba-fnircnefr";a:2:{i:0;R:44571;i:1;R:40466;}s:28:"1232:jvxvsnpgbel-ohggba-fnir";a:2:{i:0;R:44571;i:1;R:40466;}s:52:"1232:jvxvsnpgbel-choyvp-fgnghf-punatr-qrsnhyg-ernfba";a:2:{i:0;R:44571;i:1;R:40466;}s:34:"1232:njp-zrgevpf-ynathntr-gbc-yvfg";a:2:{i:0;R:44571;i:1;R:40466;}s:22:"1232:njp-zrgevpf-jvxvf";a:2:{i:0;R:44571;i:1;R:40466;}s:23:"1232:njp-zrgevpf-fryrpg";a:2:{i:0;R:44571;i:1;R:40466;}s:28:"1232:njp-zrgevpf-ol-ynathntr";a:2:{i:0;R:44571;i:1;R:40466;}s:25:"1232:njp-zrgevpf-pngrtbel";a:2:{i:0;R:44571;i:1;R:40466;}s:20:"1232:njp-zrgevpf-nyy";a:2:{i:0;R:44571;i:1;R:40466;}s:30:"1232:njp-zrgevpf-nyy-ynathntrf";a:2:{i:0;R:44571;i:1;R:40466;}s:23:"1232:njp-zrgevpf-frnepu";a:2:{i:0;R:44571;i:1;R:40466;}s:25:"1232:njp-zrgevpf-bar-jrrx";a:2:{i:0;R:44571;i:1;R:40466;}s:26:"1232:njp-zrgevpf-gjb-jrrxf";a:2:{i:0;R:44571;i:1;R:40466;}s:28:"1232:njp-zrgevpf-guerr-jrrxf";a:2:{i:0;R:44571;i:1;R:40466;}s:27:"1232:njp-zrgevpf-bar-zbaguf";a:2:{i:0;R:44571;i:1;R:40466;}s:27:"1232:njp-zrgevpf-gjb-zbaguf";a:2:{i:0;R:44571;i:1;R:40466;}s:29:"1232:njp-zrgevpf-guerr-zbaguf";a:2:{i:0;R:44571;i:1;R:40466;}s:26:"1232:njp-zrgevpf-unys-lrne";a:2:{i:0;R:44571;i:1;R:40466;}s:25:"1232:njp-zrgevpf-ol-rznvy";a:2:{i:0;R:44571;i:1;R:40466;}s:24:"1232:njp-zrgevpf-ol-hfre";a:2:{i:0;R:44571;i:1;R:40466;}s:26:"1232:njp-zrgevpf-ol-qoanzr";a:2:{i:0;R:44571;i:1;R:40466;}s:25:"1232:njp-zrgevpf-ol-gvgyr";a:2:{i:0;R:44571;i:1;R:40466;}s:27:"1232:njp-zrgevpf-ol-qbznvaf";a:2:{i:0;R:44571;i:1;R:40466;}s:26:"1232:njp-zrgevpf-abg-sbhaq";a:2:{i:0;R:44571;i:1;R:40466;}s:27:"1232:njp-zrgevpf-aoe-erfhyg";a:2:{i:0;R:44571;i:1;R:40466;}s:32:"1232:njp-zrgevpf-perngrq-orgjrra";a:2:{i:0;R:44571;i:1;R:40466;}s:24:"1232:njp-zrgevpf-jvxvnaf";a:2:{i:0;R:44571;i:1;R:40466;}s:25:"1232:njp-zrgevpf-negvpyrf";a:2:{i:0;R:44571;i:1;R:40466;}s:33:"1232:njp-zrgevpf-negvpyrf-cre-qnl";a:2:{i:0;R:44571;i:1;R:40466;}s:35:"1232:njp-zrgevpf-erivfvbaf-cre-cntr";a:2:{i:0;R:44571;i:1;R:40466;}s:33:"1232:njp-zrgevpf-negvpyr-nit-fvmr";a:2:{i:0;R:44571;i:1;R:40466;}s:22:"1232:njp-zrgevpf-rqvgf";a:2:{i:0;R:44571;i:1;R:40466;}s:24:"1232:njp-zrgevpf-qo-fvmr";a:2:{i:0;R:44571;i:1;R:40466;}s:23:"1232:njp-zrgevpf-vzntrf";a:2:{i:0;R:44571;i:1;R:40466;}s:26:"1232:njp-zrgevpf-nyy-hfref";a:2:{i:0;R:44571;i:1;R:40466;}s:39:"1232:njp-zrgevpf-nyy-hfref-rqvg-znva-af";a:2:{i:0;R:44571;i:1;R:40466;}s:26:"1232:njp-zrgevpf-cntrivrjf";a:2:{i:0;R:44571;i:1;R:40466;}s:27:"1232:njp-zrgevpf-fgngvfgvpf";a:2:{i:0;R:44571;i:1;R:40466;}s:22:"1232:njp-zrgevpf-pybfr";a:2:{i:0;R:44571;i:1;R:40466;}s:29:"1232:njp-zrgevpf-pybfr-npgvba";a:2:{i:0;R:44571;i:1;R:40466;}s:23:"1232:njp-zrgevpf-npgvir";a:2:{i:0;R:44571;i:1;R:40466;}s:23:"1232:njp-zrgevpf-pybfrq";a:2:{i:0;R:44571;i:1;R:40466;}s:27:"1232:njp-zrgevpf-erqverpgrq";a:2:{i:0;R:44571;i:1;R:40466;}s:24:"1232:njp-zrgevpf-erzbirq";a:2:{i:0;R:44571;i:1;R:40466;}s:21:"1232:njp-zrgevpf-uhof";a:2:{i:0;R:44571;i:1;R:40466;}s:25:"1232:njp-zrgevpf-arjf-qnl";a:2:{i:0;R:44571;i:1;R:40466;}s:26:"1232:njp-zrgevpf-fhz-zbagu";a:2:{i:0;R:44571;i:1;R:40466;}s:24:"1232:njp-zrgevpf-fhz-qnl";a:2:{i:0;R:44571;i:1;R:40466;}s:27:"1232:njp-zrgevpf-srjre-guna";a:2:{i:0;R:44571;i:1;R:40466;}s:28:"1232:njp-zrgevpf-rqvgf-ynory";a:2:{i:0;R:44571;i:1;R:40466;}s:27:"1232:njp-zrgevpf-guvf-zbagu";a:2:{i:0;R:44571;i:1;R:40466;}s:27:"1232:njp-zrgevpf-ynfg-zbagu";a:2:{i:0;R:44571;i:1;R:40466;}s:32:"1232:njp-zrgevpf-cntrivrjf-ynory";a:2:{i:0;R:44571;i:1;R:40466;}s:29:"1232:njp-zrgevpf-pybfr-yvfgrq";a:2:{i:0;R:44571;i:1;R:40466;}s:30:"1232:njp-zrgevpf-pybfr-purpxrq";a:2:{i:0;R:44571;i:1;R:40466;}s:28:"1232:njp-zrgevpf-rknpg-zngpu";a:2:{i:0;R:44571;i:1;R:40466;}s:29:"1232:njp-zrgevpf-erpbeqfcntre";a:2:{i:0;R:44571;i:1;R:40466;}s:16:"1232:pybfrq-jvxv";a:2:{i:0;R:44571;i:1;R:40466;}s:21:"1232:pybfrq-jvxv-vasb";a:2:{i:0;R:44571;i:1;R:40466;}s:23:"1232:qvfnoyrq-jvxv-vasb";a:2:{i:0;R:44571;i:1;R:40466;}s:28:"1232:pybfrq-jvxv-qhzc-rkvfgf";a:2:{i:0;R:44571;i:1;R:40466;}s:30:"1232:pybfrq-jvxv-qhzc-abrkvfgf";a:2:{i:0;R:44571;i:1;R:40466;}s:28:"1232:pybfrq-jvxv-perngr-jvxv";a:2:{i:0;R:44571;i:1;R:40466;}s:23:"1232:pybfrq-jvxv-cbyvpl";a:2:{i:0;R:44571;i:1;R:40466;}s:23:"1232:pybfrq-perngr-qhzc";a:2:{i:0;R:44571;i:1;R:40466;}s:32:"1232:pybfrq-perngr-vzntr-nepuvir";a:2:{i:0;R:44571;i:1;R:40466;}s:34:"1232:pybfrq-qryrgr-qngnonfr-vzntrf";a:2:{i:0;R:44571;i:1;R:40466;}s:25:"1232:pybfrq-qryrgr-vzntrf";a:2:{i:0;R:44571;i:1;R:40466;}s:20:"1232:pybfrq-serr-hey";a:2:{i:0;R:44571;i:1;R:40466;}s:22:"1232:pybfrq-uvqr-qhzcf";a:2:{i:0;R:44571;i:1;R:40466;}s:24:"1232:pybfrq-erqverpg-hey";a:2:{i:0;R:44571;i:1;R:40466;}s:23:"1232:pybfrq-pbasvez-oga";a:2:{i:0;R:44571;i:1;R:40466;}s:26:"1232:pybfrq-erqverpg-nyreg";a:2:{i:0;R:44571;i:1;R:40466;}s:18:"1232:pybfrq-ernfba";a:2:{i:0;R:44571;i:1;R:40466;}s:18:"1232:arjjvxvftencu";a:2:{i:0;R:44571;i:1;R:40466;}s:31:"1232:arjjvxvftencu-ercbeg-gvgyr";a:2:{i:0;R:44571;i:1;R:40466;}s:32:"1232:arjjvxvftencu-jvxvf-perngrq";a:2:{i:0;R:44571;i:1;R:40466;}s:28:"1232:arjjvxvftencu-cnenz-nyy";a:2:{i:0;R:44571;i:1;R:40466;}s:30:"1232:arjjvxvftencu-cnenz-bgure";a:2:{i:0;R:44571;i:1;R:40466;}s:18:"1232:qhzc-qngnonfr";a:2:{i:0;s:22:"wikia-wikifactorydumps";i:1;R:40466;}s:23:"1232:qhzc-qngnonfr-vasb";a:2:{i:0;R:44698;i:1;R:40466;}s:29:"1232:qhzc-qngnonfr-phee-cntrf";a:2:{i:0;R:44698;i:1;R:40466;}s:34:"1232:qhzc-qngnonfr-phee-cntrf-vasb";a:2:{i:0;R:44698;i:1;R:40466;}s:29:"1232:qhzc-qngnonfr-shyy-cntrf";a:2:{i:0;R:44698;i:1;R:40466;}s:34:"1232:qhzc-qngnonfr-shyy-cntrf-vasb";a:2:{i:0;R:44698;i:1;R:40466;}s:26:"1232:qhzc-qngnonfr-erdhrfg";a:2:{i:0;R:44698;i:1;R:40466;}s:31:"1232:qhzc-qngnonfr-erdhrfg-vasb";a:2:{i:0;R:44698;i:1;R:40466;}s:33:"1232:qhzc-qngnonfr-erdhrfg-fhozvg";a:2:{i:0;R:44698;i:1;R:40466;}s:44:"1232:qhzc-qngnonfr-erdhrfg-nyernql-fhozvggrq";a:2:{i:0;R:44698;i:1;R:40466;}s:36:"1232:qhzc-qngnonfr-erdhrfg-erdhrfgrq";a:2:{i:0;R:44698;i:1;R:40466;}s:28:"1232:qhzc-qngnonfr-vasb-zber";a:2:{i:0;R:44698;i:1;R:40466;}s:24:"1232:jvxvsnpgbelercbegre";a:2:{i:0;s:25:"wikia-wikifactoryreporter";i:1;R:40466;}s:17:"1232:jvxvsrngherf";a:2:{i:0;s:18:"wikia-wikifeatures";i:1;R:40466;}s:23:"1232:jvxvsrngherf-gvgyr";a:2:{i:0;R:44713;i:1;R:40466;}s:25:"1232:jvxvsrngherf-urnqvat";a:2:{i:0;R:44713;i:1;R:40466;}s:26:"1232:jvxvsrngherf-perngvir";a:2:{i:0;R:44713;i:1;R:40466;}s:30:"1232:jvxvsrngherf-ynof-urnqvat";a:2:{i:0;R:44713;i:1;R:40466;}s:31:"1232:jvxvsrngherf-ynof-perngvir";a:2:{i:0;R:44713;i:1;R:40466;}s:26:"1232:jvxvsrngherf-srrqonpx";a:2:{i:0;R:44713;i:1;R:40466;}s:34:"1232:jvxvsrngherf-reebe-crezvffvba";a:2:{i:0;R:44713;i:1;R:40466;}s:41:"1232:jvxvsrngherf-reebe-vainyvq-cnenzrgre";a:2:{i:0;R:44713;i:1;R:40466;}s:31:"1232:jvxvsrngherf-reebe-zrffntr";a:2:{i:0;R:44713;i:1;R:40466;}s:36:"1232:jvxvsrngherf-reebe-fcnz-nggrzcg";a:2:{i:0;R:44713;i:1;R:40466;}s:40:"1232:jvxvsrngherf-reebe-vainyvq-pngrtbel";a:2:{i:0;R:44713;i:1;R:40466;}s:31:"1232:jvxvsrngherf-gbttyr-npgvir";a:2:{i:0;R:44713;i:1;R:40466;}s:33:"1232:jvxvsrngherf-gbttyr-vanpgvir";a:2:{i:0;R:44713;i:1;R:40466;}s:27:"1232:jvxvsrngherf-npgvir-ba";a:2:{i:0;R:44713;i:1;R:40466;}s:37:"1232:jvxvsrngherf-pngrtbel-pubbfr-bar";a:2:{i:0;R:44713;i:1;R:40466;}s:35:"1232:jvxvsrngherf-ybir-guvf-cebwrpg";a:2:{i:0;R:44713;i:1;R:40466;}s:35:"1232:jvxvsrngherf-ungr-guvf-cebwrpg";a:2:{i:0;R:44713;i:1;R:40466;}s:38:"1232:jvxvsrngherf-ceboyrz-jvgu-cebwrpg";a:2:{i:0;R:44713;i:1;R:40466;}s:37:"1232:jvxvsrngherf-na-vqrn-sbe-cebwrpg";a:2:{i:0;R:44713;i:1;R:40466;}s:34:"1232:jvxvsrngherf-srrqonpx-urnqvat";a:2:{i:0;R:44713;i:1;R:40466;}s:38:"1232:jvxvsrngherf-srrqonpx-qrfpevcgvba";a:2:{i:0;R:44713;i:1;R:40466;}s:37:"1232:jvxvsrngherf-srrqonpx-glcr-ynory";a:2:{i:0;R:44713;i:1;R:40466;}s:40:"1232:jvxvsrngherf-srrqonpx-pbzzrag-ynory";a:2:{i:0;R:44713;i:1;R:40466;}s:34:"1232:jvxvsrngherf-srrqonpx-fhpprff";a:2:{i:0;R:44713;i:1;R:40466;}s:36:"1232:jvxvsrngherf-qrnpgvingr-urnqvat";a:2:{i:0;R:44713;i:1;R:40466;}s:40:"1232:jvxvsrngherf-qrnpgvingr-qrfpevcgvba";a:2:{i:0;R:44713;i:1;R:40466;}s:41:"1232:jvxvsrngherf-qrnpgvingr-abgvsvpngvba";a:2:{i:0;R:44713;i:1;R:40466;}s:43:"1232:jvxvsrngherf-qrnpgvingr-pbasvez-ohggba";a:2:{i:0;R:44713;i:1;R:40466;}s:42:"1232:jvxvsrngherf-qrnpgvingr-pnapry-ohggba";a:2:{i:0;R:44713;i:1;R:40466;}s:31:"1232:jvxvsrngherf-cebzbgvba-arj";a:2:{i:0;R:44713;i:1;R:40466;}s:28:"1232:jvxvsrngherf-bnfvf-bayl";a:2:{i:0;R:44713;i:1;R:40466;}s:60:"1232:jvxvsrngherf-srngher-urnqvat-jtfubjgbcyvfgfvaperngrcntr";a:2:{i:0;R:44713;i:1;R:40466;}s:64:"1232:jvxvsrngherf-srngher-qrfpevcgvba-jtfubjgbcyvfgfvaperngrcntr";a:2:{i:0;R:44713;i:1;R:40466;}s:57:"1232:jvxvsrngherf-srngher-urnqvat-jtranoyrnpuvrirzragfrkg";a:2:{i:0;R:44713;i:1;R:40466;}s:61:"1232:jvxvsrngherf-srngher-qrfpevcgvba-jtranoyrnpuvrirzragfrkg";a:2:{i:0;R:44713;i:1;R:40466;}s:60:"1232:jvxvsrngherf-srngher-urnqvat-jtranoyrnegvpyrpbzzragfrkg";a:2:{i:0;R:44713;i:1;R:40466;}s:64:"1232:jvxvsrngherf-srngher-qrfpevcgvba-jtranoyrnegvpyrpbzzragfrkg";a:2:{i:0;R:44713;i:1;R:40466;}s:63:"1232:jvxvsrngherf-srngher-urnqvat-jtranoyrpngrtbelrkuvovgvbarkg";a:2:{i:0;R:44713;i:1;R:40466;}s:67:"1232:jvxvsrngherf-srngher-qrfpevcgvba-jtranoyrpngrtbelrkuvovgvbarkg";a:2:{i:0;R:44713;i:1;R:40466;}s:46:"1232:jvxvsrngherf-srngher-urnqvat-jtranoyrpung";a:2:{i:0;R:44713;i:1;R:40466;}s:50:"1232:jvxvsrngherf-srngher-qrfpevcgvba-jtranoyrpung";a:2:{i:0;R:44713;i:1;R:40466;}s:59:"1232:jvxvsrngherf-srngher-urnqvat-jtranoyrrqvgcntrerfxvarkg";a:2:{i:0;R:44713;i:1;R:40466;}s:63:"1232:jvxvsrngherf-srngher-qrfpevcgvba-jtranoyrrqvgcntrerfxvarkg";a:2:{i:0;R:44713;i:1;R:40466;}s:53:"1232:jvxvsrngherf-srngher-urnqvat-jtranoyrnwnkcbyyrkg";a:2:{i:0;R:44713;i:1;R:40466;}s:57:"1232:jvxvsrngherf-srngher-qrfpevcgvba-jtranoyrnwnkcbyyrkg";a:2:{i:0;R:44713;i:1;R:40466;}s:59:"1232:jvxvsrngherf-srngher-urnqvat-jtranoyrcntrynlbhgohvyqre";a:2:{i:0;R:44713;i:1;R:40466;}s:63:"1232:jvxvsrngherf-srngher-qrfpevcgvba-jtranoyrcntrynlbhgohvyqre";a:2:{i:0;R:44713;i:1;R:40466;}s:54:"1232:jvxvsrngherf-srngher-urnqvat-jtranoyroybtnegvpyrf";a:2:{i:0;R:44713;i:1;R:40466;}s:58:"1232:jvxvsrngherf-srngher-qrfpevcgvba-jtranoyroybtnegvpyrf";a:2:{i:0;R:44713;i:1;R:40466;}s:49:"1232:jvxvsrngherf-srngher-urnqvat-jtranoyrjnyyrkg";a:2:{i:0;R:44713;i:1;R:40466;}s:53:"1232:jvxvsrngherf-srngher-qrfpevcgvba-jtranoyrjnyyrkg";a:2:{i:0;R:44713;i:1;R:40466;}s:46:"1232:jvxvsrngherf-srngher-urnqvat-jtbnfvfanii2";a:2:{i:0;R:44713;i:1;R:40466;}s:50:"1232:jvxvsrngherf-srngher-qrfpevcgvba-jtbnfvfanii2";a:2:{i:0;R:44713;i:1;R:40466;}s:43:"1232:jvxvsrngherf-srngher-urnqvat-rzcglynof";a:2:{i:0;R:44713;i:1;R:40466;}s:47:"1232:jvxvsrngherf-srngher-qrfpevcgvba-rzcglynof";a:2:{i:0;R:44713;i:1;R:40466;}s:26:"1232:jvxvsrngherf-ybt-anzr";a:2:{i:0;R:44713;i:1;R:40466;}s:28:"1232:jvxvsrngherf-ybt-urnqre";a:2:{i:0;R:44713;i:1;R:40466;}s:14:"1232:jvxvfgngf";a:2:{i:0;s:15:"wikia-wikistats";i:1;R:40466;}s:20:"1232:jvxvfgngf_jvxvn";a:2:{i:0;R:44772;i:1;R:40466;}s:24:"1232:jvxvfgngf_cntrgvgyr";a:2:{i:0;R:44772;i:1;R:40466;}s:19:"1232:jvxvfgngf_vasb";a:2:{i:0;R:44772;i:1;R:40466;}s:29:"1232:jvxvfgngf_znvafgngf_vasb";a:2:{i:0;R:44772;i:1;R:40466;}s:26:"1232:jvxvfgngf_pbzcnevfvba";a:2:{i:0;R:44772;i:1;R:40466;}s:28:"1232:jvxvfgngf_fubjfgngf_oga";a:2:{i:0;R:44772;i:1;R:40466;}s:32:"1232:jvxvfgngf_jvxvn_vasbezngvba";a:2:{i:0;R:44772;i:1;R:40466;}s:28:"1232:jvxvnfgnfg_erserfu_qngn";a:2:{i:0;R:44772;i:1;R:40466;}s:25:"1232:jvxvfgngf_fubjpunegf";a:2:{i:0;R:44772;i:1;R:40466;}s:25:"1232:jvxvfgngf_rkcbeg_kyf";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_cnary_pybfr_oga";a:2:{i:0;R:44772;i:1;R:40466;}s:29:"1232:jvxvfgngf_qngrenatr_sebz";a:2:{i:0;R:44772;i:1;R:40466;}s:27:"1232:jvxvfgngf_qngrenatr_gb";a:2:{i:0;R:44772;i:1;R:40466;}s:28:"1232:jvxvfgngf_abfgngf_sbhaq";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_civrjf_abgsbhaq";a:2:{i:0;R:44772;i:1;R:40466;}s:27:"1232:jvxvfgngf_vainyvq_qngr";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_qvfgevo_negvpyr";a:2:{i:0;R:44772;i:1;R:40466;}s:32:"1232:jvxvfgngf_oernxqbja_rqvgbef";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_oernxqbja_nabaf";a:2:{i:0;R:44772;i:1;R:40466;}s:36:"1232:jvxvfgngf_npgvir_nofrag_jvxvnaf";a:2:{i:0;R:44772;i:1;R:40466;}s:27:"1232:jvxvfgngf_naba_jvxvnaf";a:2:{i:0;R:44772;i:1;R:40466;}s:33:"1232:jvxvfgngf_naba_jvxvnaf_pbhag";a:2:{i:0;R:44772;i:1;R:40466;}s:31:"1232:jvxvfgngf_yngrfg_cntrivrjf";a:2:{i:0;R:44772;i:1;R:40466;}s:31:"1232:jvxvfgngf_yngrfg_hfreivrjf";a:2:{i:0;R:44772;i:1;R:40466;}s:31:"1232:jvxvfgngf_npgvir_hfrerqvgf";a:2:{i:0;R:44772;i:1;R:40466;}s:37:"1232:jvxvfgngf_yngrfg_hfreivrjf_cntrf";a:2:{i:0;R:44772;i:1;R:40466;}s:36:"1232:jvxvfgngf_yngrfg_hfreivrjf_yvfg";a:2:{i:0;R:44772;i:1;R:40466;}s:40:"1232:jvxvfgngf_yngrfg_cntrivrjf_fhogvgyr";a:2:{i:0;R:44772;i:1;R:40466;}s:24:"1232:jvxvfgngf_cntrivrjf";a:2:{i:0;R:44772;i:1;R:40466;}s:31:"1232:jvxvfgngf_negvpyr_bar_yvax";a:2:{i:0;R:44772;i:1;R:40466;}s:38:"1232:jvxvfgngf_erpragyl_npgvir_jvxvnaf";a:2:{i:0;R:44772;i:1;R:40466;}s:38:"1232:jvxvfgngf_erpragyl_nofrag_jvxvnaf";a:2:{i:0;R:44772;i:1;R:40466;}s:38:"1232:jvxvfgngf_npgvir_jvxvnaf_fhogvgyr";a:2:{i:0;R:44772;i:1;R:40466;}s:36:"1232:jvxvfgngf_naba_jvxvnaf_fhogvgyr";a:2:{i:0;R:44772;i:1;R:40466;}s:43:"1232:jvxvfgngf_npgvir_jvxvnaf_fhogvgyr_vasb";a:2:{i:0;R:44772;i:1;R:40466;}s:32:"1232:jvxvfgngf_cntrivrjf_fhogrkg";a:2:{i:0;R:44772;i:1;R:40466;}s:33:"1232:jvxvfgngf_cntrivrjf_pbhagvat";a:2:{i:0;R:44772;i:1;R:40466;}s:32:"1232:jvxvfgngf_cntrivrjf_creprag";a:2:{i:0;R:44772;i:1;R:40466;}s:38:"1232:jvxvfgngf_qvfgevo_negvpyr_fhogrkg";a:2:{i:0;R:44772;i:1;R:40466;}s:39:"1232:jvxvfgngf_qvfgevo_negvpyr_pbhagvat";a:2:{i:0;R:44772;i:1;R:40466;}s:32:"1232:jvxvfgngf_anzrfcnpr_erpbeqf";a:2:{i:0;R:44772;i:1;R:40466;}s:25:"1232:jvxvfgngf_cntr_rqvgf";a:2:{i:0;R:44772;i:1;R:40466;}s:34:"1232:jvxvfgngf_bgure_afcnprf_rqvgf";a:2:{i:0;R:44772;i:1;R:40466;}s:31:"1232:jvxvfgngf_cntr_rqvgf_pbhag";a:2:{i:0;R:44772;i:1;R:40466;}s:40:"1232:jvxvfgngf_bgure_afcnprf_rqvgf_pbhag";a:2:{i:0;R:44772;i:1;R:40466;}s:34:"1232:jvxvfgngf_npgvir_jvxvnaf_qngr";a:2:{i:0;R:44772;i:1;R:40466;}s:25:"1232:jvxvfgngf_npgvir_qnl";a:2:{i:0;R:44772;i:1;R:40466;}s:27:"1232:jvxvfgngf_npgvir_zbagu";a:2:{i:0;R:44772;i:1;R:40466;}s:26:"1232:jvxvfgngf_npgvir_lrne";a:2:{i:0;R:44772;i:1;R:40466;}s:28:"1232:jvxvfgngf_npgvir_zbaguf";a:2:{i:0;R:44772;i:1;R:40466;}s:29:"1232:jvxvfgngf_ahzore_rqvgbef";a:2:{i:0;R:44772;i:1;R:40466;}s:27:"1232:jvxvfgngf_ahzore_nabaf";a:2:{i:0;R:44772;i:1;R:40466;}s:22:"1232:jvxvfgngf_jvxvnaf";a:2:{i:0;R:44772;i:1;R:40466;}s:23:"1232:jvxvfgngf_negvpyrf";a:2:{i:0;R:44772;i:1;R:40466;}s:28:"1232:jvxvfgngf_negvpyrf_grkg";a:2:{i:0;R:44772;i:1;R:40466;}s:23:"1232:jvxvfgngf_nepuvirq";a:2:{i:0;R:44772;i:1;R:40466;}s:20:"1232:jvxvfgngf_bgure";a:2:{i:0;R:44772;i:1;R:40466;}s:23:"1232:jvxvfgngf_qngnonfr";a:2:{i:0;R:44772;i:1;R:40466;}s:20:"1232:jvxvfgngf_yvaxf";a:2:{i:0;R:44772;i:1;R:40466;}s:24:"1232:jvxvfgngf_ert_hfref";a:2:{i:0;R:44772;i:1;R:40466;}s:21:"1232:jvxvfgngf_vzntrf";a:2:{i:0;R:44772;i:1;R:40466;}s:20:"1232:jvxvfgngf_ivqrb";a:2:{i:0;R:44772;i:1;R:40466;}s:20:"1232:jvxvfgngf_zrqvn";a:2:{i:0;R:44772;i:1;R:40466;}s:28:"1232:jvxvfgngf_ivqrb_rzorqrq";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_hcybnqrq_vzntrf";a:2:{i:0;R:44772;i:1;R:40466;}s:25:"1232:jvxvfgngf_jvgu_yvaxf";a:2:{i:0;R:44772;i:1;R:40466;}s:31:"1232:jvxvfgngf_pbaarpgvba_reebe";a:2:{i:0;R:44772;i:1;R:40466;}s:28:"1232:jvxvfgngf_qvfgevo_rqvgf";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_qvfgevo_jvxvnaf";a:2:{i:0;R:44772;i:1;R:40466;}s:34:"1232:jvxvfgngf_qvfgevo_rqvgf_gbgny";a:2:{i:0;R:44772;i:1;R:40466;}s:19:"1232:jvxvfgngf_qngr";a:2:{i:0;R:44772;i:1;R:40466;}s:24:"1232:jvxvfgngf_anzrfcnpr";a:2:{i:0;R:44772;i:1;R:40466;}s:19:"1232:jvxvfgngf_fubj";a:2:{i:0;R:44772;i:1;R:40466;}s:20:"1232:jvxvfgngf_fgngf";a:2:{i:0;R:44772;i:1;R:40466;}s:19:"1232:jvxvfgngf_uvqr";a:2:{i:0;R:44772;i:1;R:40466;}s:23:"1232:jvxvfgngf_jvxvanzr";a:2:{i:0;R:44772;i:1;R:40466;}s:25:"1232:jvxvfgngf_jvxvqoanzr";a:2:{i:0;R:44772;i:1;R:40466;}s:27:"1232:jvxvfgngf_jvxvpngrtbel";a:2:{i:0;R:44772;i:1;R:40466;}s:21:"1232:jvxvfgngf_jvxvvq";a:2:{i:0;R:44772;i:1;R:40466;}s:19:"1232:jvxvfgngf_zrna";a:2:{i:0;R:44772;i:1;R:40466;}s:25:"1232:jvxvfgngf_ynetreguna";a:2:{i:0;R:44772;i:1;R:40466;}s:23:"1232:jvxvfgngf_hfreanzr";a:2:{i:0;R:44772;i:1;R:40466;}s:24:"1232:jvxvfgngf_hfreanzrf";a:2:{i:0;R:44772;i:1;R:40466;}s:20:"1232:jvxvfgngf_rqvgf";a:2:{i:0;R:44772;i:1;R:40466;}s:20:"1232:jvxvfgngf_olgrf";a:2:{i:0;R:44772;i:1;R:40466;}s:19:"1232:jvxvfgngf_fvmr";a:2:{i:0;R:44772;i:1;R:40466;}s:20:"1232:jvxvfgngf_jbeqf";a:2:{i:0;R:44772;i:1;R:40466;}s:23:"1232:jvxvfgngf_vagreany";a:2:{i:0;R:44772;i:1;R:40466;}s:24:"1232:jvxvfgngf_vagrejvxv";a:2:{i:0;R:44772;i:1;R:40466;}s:20:"1232:jvxvfgngf_vzntr";a:2:{i:0;R:44772;i:1;R:40466;}s:23:"1232:jvxvfgngf_rkgreany";a:2:{i:0;R:44772;i:1;R:40466;}s:22:"1232:jvxvfgngf_ebyyhcf";a:2:{i:0;R:44772;i:1;R:40466;}s:25:"1232:jvxvfgngf_anzrfcnprf";a:2:{i:0;R:44772;i:1;R:40466;}s:24:"1232:jvxvfgngf_erqverpgf";a:2:{i:0;R:44772;i:1;R:40466;}s:34:"1232:jvxvfgngf_rqvgrq_va_anzrfcnpr";a:2:{i:0;R:44772;i:1;R:40466;}s:29:"1232:jvxvfgngf_znva_anzrfcnpr";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_vzntr_anzrfcnpr";a:2:{i:0;R:44772;i:1;R:40466;}s:28:"1232:jvxvfgngf_cntr_erdhrfgf";a:2:{i:0;R:44772;i:1;R:40466;}s:21:"1232:jvxvfgngf_ivfvgf";a:2:{i:0;R:44772;i:1;R:40466;}s:26:"1232:jvxvfgngf_arj_cre_qnl";a:2:{i:0;R:44772;i:1;R:40466;}s:23:"1232:jvxvfgngf_bssvpvny";a:2:{i:0;R:44772;i:1;R:40466;}s:26:"1232:jvxvfgngf_zber_200_pu";a:2:{i:0;R:44772;i:1;R:40466;}s:20:"1232:jvxvfgngf_pbhag";a:2:{i:0;R:44772;i:1;R:40466;}s:27:"1232:jvxvfgngf_havdhr_hfref";a:2:{i:0;R:44772;i:1;R:40466;}s:25:"1232:jvxvfgngf_svefg_rqvg";a:2:{i:0;R:44772;i:1;R:40466;}s:24:"1232:jvxvfgngf_ynfg_rqvg";a:2:{i:0;R:44772;i:1;R:40466;}s:19:"1232:jvxvfgngf_enax";a:2:{i:0;R:44772;i:1;R:40466;}s:29:"1232:jvxvfgngf_cerivbhf_zbagu";a:2:{i:0;R:44772;i:1;R:40466;}s:20:"1232:jvxvfgngf_gbgny";a:2:{i:0;R:44772;i:1;R:40466;}s:18:"1232:jvxvfgngf_arj";a:2:{i:0;R:44772;i:1;R:40466;}s:23:"1232:jvxvfgngf_ertvfgre";a:2:{i:0;R:44772;i:1;R:40466;}s:25:"1232:jvxvfgngf_haertvfgre";a:2:{i:0;R:44772;i:1;R:40466;}s:23:"1232:jvxvfgngf_zber_gkg";a:2:{i:0;R:44772;i:1;R:40466;}s:18:"1232:jvxvfgngf_abj";a:2:{i:0;R:44772;i:1;R:40466;}s:24:"1232:jvxvfgngf_ceri_enax";a:2:{i:0;R:44772;i:1;R:40466;}s:28:"1232:jvxvfgngf_ceri_enax_kyf";a:2:{i:0;R:44772;i:1;R:40466;}s:23:"1232:jvxvfgngf_qnlf_ntb";a:2:{i:0;R:44772;i:1;R:40466;}s:24:"1232:jvxvfgngf_zbagu_ntb";a:2:{i:0;R:44772;i:1;R:40466;}s:22:"1232:jvxvfgngf_jvxvhey";a:2:{i:0;R:44772;i:1;R:40466;}s:26:"1232:jvxvfgngf_jvxvperngrq";a:2:{i:0;R:44772;i:1;R:40466;}s:23:"1232:jvxvfgngf_jvxvynat";a:2:{i:0;R:44772;i:1;R:40466;}s:29:"1232:jvxvfgngf_abgr_znvafgngf";a:2:{i:0;R:44772;i:1;R:40466;}s:39:"1232:jvxvfgngf_uvfgbel_znvafgngf_inyhr1";a:2:{i:0;R:44772;i:1;R:40466;}s:39:"1232:jvxvfgngf_uvfgbel_znvafgngf_inyhr2";a:2:{i:0;R:44772;i:1;R:40466;}s:39:"1232:jvxvfgngf_uvfgbel_znvafgngf_inyhr3";a:2:{i:0;R:44772;i:1;R:40466;}s:39:"1232:jvxvfgngf_uvfgbel_znvafgngf_inyhr4";a:2:{i:0;R:44772;i:1;R:40466;}s:23:"1232:jvxvfgngf_pbyhza_n";a:2:{i:0;R:44772;i:1;R:40466;}s:23:"1232:jvxvfgngf_pbyhza_o";a:2:{i:0;R:44772;i:1;R:40466;}s:23:"1232:jvxvfgngf_pbyhza_p";a:2:{i:0;R:44772;i:1;R:40466;}s:23:"1232:jvxvfgngf_pbyhza_q";a:2:{i:0;R:44772;i:1;R:40466;}s:23:"1232:jvxvfgngf_pbyhza_r";a:2:{i:0;R:44772;i:1;R:40466;}s:23:"1232:jvxvfgngf_pbyhza_s";a:2:{i:0;R:44772;i:1;R:40466;}s:23:"1232:jvxvfgngf_pbyhza_t";a:2:{i:0;R:44772;i:1;R:40466;}s:23:"1232:jvxvfgngf_pbyhza_u";a:2:{i:0;R:44772;i:1;R:40466;}s:23:"1232:jvxvfgngf_pbyhza_v";a:2:{i:0;R:44772;i:1;R:40466;}s:23:"1232:jvxvfgngf_pbyhza_w";a:2:{i:0;R:44772;i:1;R:40466;}s:23:"1232:jvxvfgngf_pbyhza_x";a:2:{i:0;R:44772;i:1;R:40466;}s:22:"1232:jvxvfgngf_jrofvgr";a:2:{i:0;R:44772;i:1;R:40466;}s:21:"1232:jvxvfgngf_gnoyrf";a:2:{i:0;R:44772;i:1;R:40466;}s:21:"1232:jvxvfgngf_punegf";a:2:{i:0;R:44772;i:1;R:40466;}s:31:"1232:jvxvfgngf_onpx_gb_znvacntr";a:2:{i:0;R:44772;i:1;R:40466;}s:31:"1232:jvxvfgngf_onpx_gb_cericntr";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_geraq_zrna_vasb";a:2:{i:0;R:44772;i:1;R:40466;}s:32:"1232:jvxvfgngf_geraq_tebjgu_vasb";a:2:{i:0;R:44772;i:1;R:40466;}s:26:"1232:jvxvfgngf_geraq_inyhr";a:2:{i:0;R:44772;i:1;R:40466;}s:28:"1232:jvxvfgngf_geraq_sbezhyn";a:2:{i:0;R:44772;i:1;R:40466;}s:28:"1232:jvxvfgngf_geraq_beqrerq";a:2:{i:0;R:44772;i:1;R:40466;}s:31:"1232:jvxvfgngf_geraq_jurer_grkg";a:2:{i:0;R:44772;i:1;R:40466;}s:35:"1232:jvxvfgngf_geraq_nyy_jvxvn_grkg";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_nyjnlf_fryrpgrq";a:2:{i:0;R:44772;i:1;R:40466;}s:34:"1232:jvxvfgngf_perngvba_jvxvn_grkg";a:2:{i:0;R:44772;i:1;R:40466;}s:38:"1232:jvxvfgngf_perngvba_jvxvn_svyranzr";a:2:{i:0;R:44772;i:1;R:40466;}s:36:"1232:jvxvfgngf_perngvba_cnary_urnqre";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_perngvba_yrtraq";a:2:{i:0;R:44772;i:1;R:40466;}s:32:"1232:jvxvfgngf_fryrpg_fgngvfgvpf";a:2:{i:0;R:44772;i:1;R:40466;}s:38:"1232:jvxvfgngf_fryrpg_jvxvn_fgngvfgvpf";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_kyf_svyrf_fgngf";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_shyy_qhzc_fgngf";a:2:{i:0;R:44772;i:1;R:40466;}s:33:"1232:jvxvfgngf_pheerag_qhzc_fgngf";a:2:{i:0;R:44772;i:1;R:40466;}s:34:"1232:jvxvfgngf_qngnonfr_anzr_fgngf";a:2:{i:0;R:44772;i:1;R:40466;}s:28:"1232:jvxvfgngf_qoqhzcf_fgngf";a:2:{i:0;R:44772;i:1;R:40466;}s:26:"1232:jvxvfgngf_cyrnfr_jnvg";a:2:{i:0;R:44772;i:1;R:40466;}s:27:"1232:jvxvfgngf_kyf_trarengr";a:2:{i:0;R:44772;i:1;R:40466;}s:25:"1232:jvxvfgngf_kyf_pnapry";a:2:{i:0;R:44772;i:1;R:40466;}s:26:"1232:jvxvfgngf_fryrpg_grkg";a:2:{i:0;R:44772;i:1;R:40466;}s:25:"1232:jvxvfgngf_fryrpg_oga";a:2:{i:0;R:44772;i:1;R:40466;}s:31:"1232:jvxvfgngf_kyf_hapurpx_yvfg";a:2:{i:0;R:44772;i:1;R:40466;}s:32:"1232:jvxvfgngf_kyf_cerff_hapurpx";a:2:{i:0;R:44772;i:1;R:40466;}s:31:"1232:jvxvfgngf_qoqhzc_trarengrq";a:2:{i:0;R:44772;i:1;R:40466;}s:22:"1232:jvxvfgngf_erpbeqf";a:2:{i:0;R:44772;i:1;R:40466;}s:23:"1232:jvxvfgngf_kzy_qhzc";a:2:{i:0;R:44772;i:1;R:40466;}s:27:"1232:jvxvfgngf_frr_zj_fgngf";a:2:{i:0;R:44772;i:1;R:40466;}s:35:"1232:jvxvfgngf_frr_jvxvn_jvqr_fgngf";a:2:{i:0;R:44772;i:1;R:40466;}s:28:"1232:jvxvfgngf_frr_uryc_cntr";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_frr_qrsvavgvbaf";a:2:{i:0;R:44772;i:1;R:40466;}s:33:"1232:jvxvfgngf_trarengr_fgngf_zft";a:2:{i:0;R:44772;i:1;R:40466;}s:38:"1232:jvxvfgngf_trarengr_kyf_svyr_gvgyr";a:2:{i:0;R:44772;i:1;R:40466;}s:29:"1232:jvxvfgngf_ynathntr_fgngf";a:2:{i:0;R:44772;i:1;R:40466;}s:37:"1232:jvxvfgngf_znva_fgngvfgvpf_yrtraq";a:2:{i:0;R:44772;i:1;R:40466;}s:35:"1232:jvxvfgngf_af_fgngvfgvpf_yrtraq";a:2:{i:0;R:44772;i:1;R:40466;}s:38:"1232:jvxvfgngf_bgure_fgngvfgvpf_yrtraq";a:2:{i:0;R:44772;i:1;R:40466;}s:32:"1232:jvxvfgngf_fgngvfgvpf_yrtraq";a:2:{i:0;R:44772;i:1;R:40466;}s:31:"1232:jvxvfgngf_qngr_bs_trarengr";a:2:{i:0;R:44772;i:1;R:40466;}s:26:"1232:jvxvfgngf_frnepu_grkg";a:2:{i:0;R:44772;i:1;R:40466;}s:29:"1232:jvxvfgngf_fbeg_yvfg_fvmr";a:2:{i:0;R:44772;i:1;R:40466;}s:33:"1232:jvxvfgngf_fbeg_yvfg_nycunorg";a:2:{i:0;R:44772;i:1;R:40466;}s:38:"1232:jvxvfgngf_frr_byq_fgngvfgvpf_cntr";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_fubj_arj_jvaqbj";a:2:{i:0;R:44772;i:1;R:40466;}s:35:"1232:jvxvfgngf_fubj_aoe_jvxvf_purpx";a:2:{i:0;R:44772;i:1;R:40466;}s:31:"1232:jvxvfgngf_yvsrgvzr_rqvgbef";a:2:{i:0;R:44772;i:1;R:40466;}s:28:"1232:jvxvfgngf_negvpyr_gbgny";a:2:{i:0;R:44772;i:1;R:40466;}s:28:"1232:jvxvfgngf_negvpyr_rqvgf";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_negvpyr_perngrq";a:2:{i:0;R:44772;i:1;R:40466;}s:27:"1232:jvxvfgngf_negvpyr_gnyx";a:2:{i:0;R:44772;i:1;R:40466;}s:27:"1232:jvxvfgngf_oybt_perngrq";a:2:{i:0;R:44772;i:1;R:40466;}s:27:"1232:jvxvfgngf_oybt_pbzzrag";a:2:{i:0;R:44772;i:1;R:40466;}s:24:"1232:jvxvfgngf_cubgb_arj";a:2:{i:0;R:44772;i:1;R:40466;}s:24:"1232:jvxvfgngf_ivqrb_arj";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_hfre_cntr_rqvgf";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_hfre_gnyx_rqvgf";a:2:{i:0;R:44772;i:1;R:40466;}s:28:"1232:jvxvfgngf_negvpyr_qnvyl";a:2:{i:0;R:44772;i:1;R:40466;}s:28:"1232:jvxvfgngf_vzntr_hcybnqf";a:2:{i:0;R:44772;i:1;R:40466;}s:28:"1232:jvxvfgngf_ivqrb_hcybnqf";a:2:{i:0;R:44772;i:1;R:40466;}s:28:"1232:jvxvfgngf_cre_anzrfcnpr";a:2:{i:0;R:44772;i:1;R:40466;}s:27:"1232:jvxvfgngf_zbaguf_rqvgf";a:2:{i:0;R:44772;i:1;R:40466;}s:22:"1232:jvxvfgngf_pbagrag";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_pbagrag_rqvgbef";a:2:{i:0;R:44772;i:1;R:40466;}s:21:"1232:jvxvfgngf_hfreaf";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_bgure_anzrfcnpr";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_erfgevpgrq_cntr";a:2:{i:0;R:44772;i:1;R:40466;}s:33:"1232:jvxvfgngf_svyranzr_znvafgngf";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_svyranzr_bgure1";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_svyranzr_bgure2";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_svyranzr_bgure3";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_svyranzr_bgure4";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_svyranzr_bgure5";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_svyranzr_bgure6";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_svyranzr_bgure7";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_svyranzr_bgure8";a:2:{i:0;R:44772;i:1;R:40466;}s:29:"1232:jvxvfgngf_svyranzr_geraq";a:2:{i:0;R:44772;i:1;R:40466;}s:32:"1232:jvxvfgngf_svyranzr_perngvba";a:2:{i:0;R:44772;i:1;R:40466;}s:27:"1232:jvxvfgngf_pbqr_irefvba";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_zrqvnjvxv_fgngf";a:2:{i:0;R:44772;i:1;R:40466;}s:37:"1232:jvxvfgngf_fgngvfgvpf_vasbezngvba";a:2:{i:0;R:44772;i:1;R:40466;}s:23:"1232:jvxvfgngf_aoe_xvyb";a:2:{i:0;R:44772;i:1;R:40466;}s:23:"1232:jvxvfgngf_aoe_zrtn";a:2:{i:0;R:44772;i:1;R:40466;}s:23:"1232:jvxvfgngf_aoe_tvtn";a:2:{i:0;R:44772;i:1;R:40466;}s:25:"1232:jvxvfgngf_aoe_sbezng";a:2:{i:0;R:44772;i:1;R:40466;}s:20:"1232:jvxvfgngf_qnvyl";a:2:{i:0;R:44772;i:1;R:40466;}s:20:"1232:jvxvfgngf_zbagu";a:2:{i:0;R:44772;i:1;R:40466;}s:28:"1232:jvxvfgngf_pheerag_zbagu";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_jvxvnjvqr_fgngf";a:2:{i:0;R:44772;i:1;R:40466;}s:25:"1232:jvxvfgngf_uryc_fgngf";a:2:{i:0;R:44772;i:1;R:40466;}s:23:"1232:jvxvfgngf_frr_nyfb";a:2:{i:0;R:44772;i:1;R:40466;}s:27:"1232:jvxvfgngf_ynathntr_gbc";a:2:{i:0;R:44772;i:1;R:40466;}s:27:"1232:jvxvfgngf_ynathntr_nyy";a:2:{i:0;R:44772;i:1;R:40466;}s:31:"1232:jvxvfgngf_ynathntr_gbcyvfg";a:2:{i:0;R:44772;i:1;R:40466;}s:27:"1232:jvxvfgngf_erpbeqfcntre";a:2:{i:0;R:44772;i:1;R:40466;}s:20:"1232:jvxvfgngf_gvgyr";a:2:{i:0;R:44772;i:1;R:40466;}s:27:"1232:jvxvfgngf_fhzznel_qngn";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_anzrfcnprf_gnyx";a:2:{i:0;R:44772;i:1;R:40466;}s:35:"1232:jvxvfgngf_anzrfcnprf_gbc10yvfg";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_anzrfcnprf_oybt";a:2:{i:0;R:44772;i:1;R:40466;}s:30:"1232:jvxvfgngf_anzrfcnprf_hfre";a:2:{i:0;R:44772;i:1;R:40466;}s:37:"1232:jvxvfgngf_anzrfcnprf_znvagranapr";a:2:{i:0;R:44772;i:1;R:40466;}s:28:"1232:jvxvfgngf_anzrfcnpr_gbc";a:2:{i:0;R:44772;i:1;R:40466;}s:35:"1232:jvxvfgngf_reebe_znysbezrq_qngr";a:2:{i:0;R:44772;i:1;R:40466;}}
diff --git a/Translate/tests/phpunit/data/minimal.xlf b/Translate/tests/phpunit/data/minimal.xlf
new file mode 100644
index 00000000..d8013cc8
--- /dev/null
+++ b/Translate/tests/phpunit/data/minimal.xlf
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
+<file source-language="EN" datatype="plaintext" original="file.ext">
+<body>
+<trans-unit id="1">
+<source>Hello world</source>
+<target>Hei maailma</target>
+</trans-unit>
+<trans-unit id="2">
+<source>Fuzzy message</source>
+<target state="needs-l10n">Fuzzy translation</target>
+</trans-unit>
+<trans-unit id="3">
+<source>This is <g id="1" ctype="bold">bold</g>.</source>
+<target>Tämä on <g id="1" ctype="bold">paksu</g>.</target>
+</trans-unit>
+</body>
+</file>
+</xliff>
diff --git a/Translate/tests/phpunit/data/pythontest.py b/Translate/tests/phpunit/data/pythontest.py
new file mode 100644
index 00000000..921383db
--- /dev/null
+++ b/Translate/tests/phpunit/data/pythontest.py
@@ -0,0 +1,13 @@
+# -*- coding: utf-8 -*-
+msg = {
+ 'en': {
+ 'user': u'Users',
+ },
+ 'qqq': {
+ 'user': u'The people who report bugs and request features.',
+ },
+ # Author: Nike
+ 'encrypted': {
+ 'user': u'Käyttäjät',
+ }
+}
diff --git a/Translate/tests/phpunit/data/validation-exclusion-list.php b/Translate/tests/phpunit/data/validation-exclusion-list.php
new file mode 100644
index 00000000..f9b8fe00
--- /dev/null
+++ b/Translate/tests/phpunit/data/validation-exclusion-list.php
@@ -0,0 +1,13 @@
+<?php
+
+$validationExclusionList = [
+ [
+ 'check' => 'plural',
+ 'code' => [ 'en-gb' ]
+ ],
+ [
+ 'message' => [
+ 'regex-key-test'
+ ]
+ ]
+];
diff --git a/Translate/tests/phpunit/ffs/AmdFFSTest.php b/Translate/tests/phpunit/ffs/AmdFFSTest.php
new file mode 100644
index 00000000..a2f5884e
--- /dev/null
+++ b/Translate/tests/phpunit/ffs/AmdFFSTest.php
@@ -0,0 +1,117 @@
+<?php
+/**
+ * Tests for the AMD i18n message file format (used by require.js and Dojo).
+ *
+ * @file
+ * @author Matthias Palmer
+ * @copyright Copyright © 2011-2015, MetaSolutions AB
+ * @license GPL-2.0-or-later
+ */
+
+/** @covers \AmdFFS */
+class AmdFFSTest extends MediaWikiIntegrationTestCase {
+
+ protected function setUp(): void {
+ parent::setUp();
+ $this->groupConfiguration = [
+ 'BASIC' => [
+ 'class' => FileBasedMessageGroup::class,
+ 'id' => 'test-id',
+ 'label' => 'Test Label',
+ 'namespace' => 'NS_MEDIAWIKI',
+ 'description' => 'Test description',
+ ],
+ 'FILES' => [
+ 'class' => AmdFFS::class,
+ 'sourcePattern' => 'fake_reference_not_used_in_practise',
+ 'targetPattern' => 'fake_reference_not_used_in_practise',
+ ],
+ ];
+ }
+
+ protected $groupConfiguration;
+
+ /** @dataProvider amdProvider */
+ public function testParsing( $messages, $authors, $file ) {
+ /** @var FileBasedMessageGroup $group */
+ $group = MessageGroupBase::factory( $this->groupConfiguration );
+ $ffs = new AmdFFS( $group );
+ $parsed = $ffs->readFromVariable( $file );
+ $expected = [
+ 'MESSAGES' => $messages,
+ 'AUTHORS' => $authors,
+ 'METADATA' => [],
+ ];
+ $this->assertEquals( $expected, $parsed );
+ }
+
+ public function amdProvider() {
+ $values = [];
+
+ $file1 =
+ <<<JS
+define({
+ "one": "jeden",
+ "two": "dwa",
+ "three": "trzy"
+});
+JS;
+
+ $values[] = [
+ [
+ 'one' => 'jeden',
+ 'two' => 'dwa',
+ 'three' => 'trzy',
+ ],
+ [],
+ $file1,
+ ];
+
+ $file2 =
+ <<<JS
+/**
+ * Translators:
+ * - Matthias
+ * - Hannes
+ */
+define({
+ "root": {
+ "word": "слово"
+ }
+});
+JS;
+
+ $values[] = [
+ [ 'word' => 'слово' ],
+ [ 'Matthias', 'Hannes' ],
+ $file2,
+ ];
+
+ return $values;
+ }
+
+ public function testExport() {
+ $collection = new MockMessageCollectionForExport();
+ /** @var FileBasedMessageGroup $group */
+ $group = MessageGroupBase::factory( $this->groupConfiguration );
+ $ffs = new AmdFFS( $group );
+ $data = $ffs->writeIntoVariable( $collection );
+ $parsed = $ffs->readFromVariable( $data );
+
+ $this->assertEquals(
+ [ 'Nike the bunny' ],
+ $parsed['AUTHORS'],
+ 'Authors are exported'
+ );
+
+ $this->assertArrayHasKey( 'fuzzymsg', $parsed['MESSAGES'], 'fuzzy message is exported' );
+ $this->assertArrayHasKey(
+ 'translatedmsg',
+ $parsed['MESSAGES'],
+ 'translated message is exported'
+ );
+ if ( array_key_exists( 'untranslatedmsg', $parsed['MESSAGES'] ) ) {
+ $this->fail( 'Untranslated messages should not be exported' );
+ }
+ }
+}
diff --git a/Translate/tests/phpunit/ffs/AndroidXmlFFSTest.php b/Translate/tests/phpunit/ffs/AndroidXmlFFSTest.php
new file mode 100644
index 00000000..150f6b8b
--- /dev/null
+++ b/Translate/tests/phpunit/ffs/AndroidXmlFFSTest.php
@@ -0,0 +1,153 @@
+<?php
+declare( strict_types = 1 );
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @covers \AndroidXmlFFS
+ */
+class AndroidXmlFFSTest extends MediaWikiIntegrationTestCase {
+ private const DOCLANG = 'qqq';
+
+ protected function setUp(): void {
+ $this->setMwGlobals( 'wgTranslateDocumentationLanguageCode', self::DOCLANG );
+ }
+
+ protected $groupConfiguration = [
+ 'BASIC' => [
+ 'class' => FileBasedMessageGroup::class,
+ 'id' => 'test-id',
+ 'label' => 'Test Label',
+ 'namespace' => 'NS_MEDIAWIKI',
+ 'description' => 'Test description',
+ ],
+ 'FILES' => [
+ 'class' => AndroidXmlFFS::class,
+ 'sourcePattern' => '',
+ ],
+ ];
+
+ public function testParsing() {
+ $file =
+<<<'XML'
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Authors:
+* Imaginary translator
+-->
+<resources>
+ <string name="wpt_voicerec">Voice recording</string>
+ <string name="wpt_stillimage" fuzzy="true">Picture</string>
+ <plurals name="alot">
+ <item quantity="one">bunny</item>
+ <item quantity="other">bunnies</item>
+ </plurals>
+ <string name="has_quotes">Go to \"Wikipedia\"</string>
+ <string name="starts_with_at">\@Wikipedia</string>
+ <string name="has_ampersand">1&amp;nbsp;000</string>
+ <string name="has_newline">first\nsecond</string>
+ <string name="has_slashes">first \\ second</string>
+ <string name="utf8_symbols">Hello World: \\u1234 \u1234 \\\u1234</string>
+ <string name="quote_double_slash">Hello World: \' \\\'</string>
+</resources>
+XML;
+
+ /** @var FileBasedMessageGroup $group */
+ $group = MessageGroupBase::factory( $this->groupConfiguration );
+ $ffs = new AndroidXmlFFS( $group );
+ $parsed = $ffs->readFromVariable( $file );
+ $expected = [
+ 'MESSAGES' => [
+ 'wpt_voicerec' => 'Voice recording',
+ 'wpt_stillimage' => '!!FUZZY!!Picture',
+ 'alot' => '{{PLURAL|one=bunny|bunnies}}',
+ 'has_quotes' => 'Go to "Wikipedia"',
+ 'starts_with_at' => '@Wikipedia',
+ 'has_ampersand' => '1&nbsp;000',
+ 'has_newline' => "first\nsecond",
+ 'has_slashes' => 'first \\ second',
+ 'utf8_symbols' => "Hello World: \u1234 ሴ \ሴ",
+ 'quote_double_slash' => 'Hello World: \' \\\''
+ ],
+ 'AUTHORS' => [
+ 'Imaginary translator',
+ ]
+ ];
+
+ $this->assertEquals( $expected, $parsed );
+ }
+
+ public function testWrite() {
+ /** @var FileBasedMessageGroup $group */
+ $group = MessageGroupBase::factory( $this->groupConfiguration );
+ $ffs = new AndroidXmlFFS( $group );
+
+ $messages = [
+ 'ko=26ra' => 'wawe',
+ 'foobar' => '!!FUZZY!!Kissa kala <koira> "a\'b',
+ 'amuch' => '{{PLURAL|one=bunny|bunnies}}',
+ 'ampersand' => '&nbsp; &foo',
+ 'newlines' => "first\nsecond",
+ 'slashes' => 'has \\ slash'
+ ];
+ $authors = [
+ '1 Hyphen-Fan',
+ '2 Hyphen--Lover',
+ '3 Hyphen---Fanatic-',
+ ];
+
+ $collection = new MockMessageCollection( $messages );
+ $collection->addCollectionAuthors( $authors, 'set' );
+
+ $xml = $ffs->writeIntoVariable( $collection );
+ $parsed = $ffs->readFromVariable( $xml );
+ $expected = [
+ 'MESSAGES' => $messages,
+ 'AUTHORS' => $authors,
+ ];
+ $this->assertEquals( $expected, $parsed );
+ }
+
+ public function testWriteDoc() {
+ /** @var FileBasedMessageGroup $group */
+ $group = MessageGroupBase::factory( $this->groupConfiguration );
+ $ffs = new AndroidXmlFFS( $group );
+
+ $messages = [
+ 'a' => 'b',
+ ];
+
+ $collection = new MockMessageCollection( $messages, self::DOCLANG );
+
+ $actual = $ffs->writeIntoVariable( $collection );
+ $expected = <<<'XML'
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="all">
+ <string name="a">b</string>
+</resources>
+
+XML;
+ $this->assertEquals( $expected, $actual );
+ }
+}
+
+class MockMessageCollection extends MessageCollection {
+ public function __construct( array $messages, string $code = 'en' ) {
+ $this->code = $code;
+ $keys = array_keys( $messages );
+ $this->keys = array_combine( $keys, $keys );
+ foreach ( $messages as $key => $value ) {
+ $m = new FatMessage( $key, $value );
+ $m->setTranslation( $value );
+ if ( $key === 'foobar' ) {
+ $m->addTag( 'fuzzy' );
+ }
+ $this->messages[$key] = $m;
+ }
+ }
+
+ public function filter( $type, $condition = true, $value = null ) {
+ }
+
+ public function loadTranslations() {
+ }
+}
diff --git a/Translate/tests/phpunit/ffs/AppleFFSTest.php b/Translate/tests/phpunit/ffs/AppleFFSTest.php
new file mode 100644
index 00000000..069faa4d
--- /dev/null
+++ b/Translate/tests/phpunit/ffs/AppleFFSTest.php
@@ -0,0 +1,113 @@
+<?php
+/**
+ * The AppleFFS class is responsible for loading messages from .strings
+ * files, which are used in many iOS and Mac OS X projects.
+ * These tests check that the message keys are loaded, mangled and unmangled
+ * correctly.
+ * @author Brion Vibber
+ * @author Niklas Laxström
+ * @file
+ */
+
+/** @covers AppleFFS */
+class AppleFFSTest extends MediaWikiIntegrationTestCase {
+
+ protected $groupConfiguration = [
+ 'BASIC' => [
+ 'class' => FileBasedMessageGroup::class,
+ 'id' => 'test-id',
+ 'label' => 'Test Label',
+ 'namespace' => 'NS_MEDIAWIKI',
+ 'description' => 'Test description',
+ ],
+ 'FILES' => [
+ 'class' => AppleFFS::class,
+ ],
+ ];
+
+ public function testParsing() {
+ $file =
+ <<<STRINGS
+// aslkfjlkasdfjklfsj
+/* You are reading the ".strings" entry. */
+/* It's all for fun and fun for all.
+On two lines! */
+ /* This is a
+ Multiline comment
+ test */
+// Author: Testy McTesterson
+"website" = "<nowiki>http://en.wikipedia.org/</nowiki>";
+"language" = "English";
+// Add spaces to the key
+"key with spaces" = "Value that can be looked up with \"key with spaces\".";
+"key-with-{curlies}" = "Value that can be looked up with \"key-with-{curlies}\".";
+STRINGS;
+
+ /** @var FileBasedMessageGroup $group */
+ $group = MessageGroupBase::factory( $this->groupConfiguration );
+ $ffs = new AppleFFS( $group );
+ $parsed = $ffs->readFromVariable( $file );
+ $expected = [
+ 'website' => '<nowiki>http://en.wikipedia.org/</nowiki>',
+ 'language' => 'English',
+ 'key with spaces' => 'Value that can be looked up with "key with spaces".',
+ // We expect this one to be mangled for storage
+ 'key-with-=7Bcurlies=7D' => 'Value that can be looked up with "key-with-{curlies}".',
+ ];
+ $authors = [
+ 'Testy McTesterson',
+ ];
+ $expected = [ 'MESSAGES' => $expected, 'AUTHORS' => $authors ];
+ $this->assertEquals( $expected, $parsed );
+ }
+
+ /** @dataProvider rowValuesProvider */
+ public function testRowRoundtrip( $key, $value, $comment ) {
+ $write = AppleFFS::writeRow( $key, $value );
+ // Trim the trailing newline
+ $write = rtrim( $write );
+ list( $newkey, $newvalue ) = AppleFFS::readRow( $write );
+
+ $this->assertSame( $key, $newkey, "Key survives roundtrip in testdata: $comment" );
+ $this->assertSame( $value, $newvalue, "Value survives roundtrip in testdata: $comment" );
+ }
+
+ public function testFileRoundtrip() {
+ $infile = file_get_contents( __DIR__ . '/../data/AppleFFSTest1.strings' );
+ /** @var FileBasedMessageGroup $group */
+ $group = MessageGroupBase::factory( $this->groupConfiguration );
+ $ffs = new AppleFFS( $group );
+ $parsed = $ffs->readFromVariable( $infile );
+
+ $outfile = '';
+ foreach ( $parsed['MESSAGES'] as $key => $value ) {
+ $outfile .= AppleFFS::writeRow( $key, $value );
+ }
+ $reparsed = $ffs->readFromVariable( $outfile );
+
+ $this->assertSame( $parsed['MESSAGES'], $reparsed['MESSAGES'],
+ 'Messages survive roundtrip through write and read' );
+ }
+
+ public function rowValuesProvider() {
+ return [
+ [ 'key', 'value', 'simple row' ],
+ [ 'key', 'value', 'row with different sep' ],
+ [ 'key', 'val=ue', 'row with sep inside value' ],
+ [ 'k=ey', 'value', 'row with sep inside key' ],
+ [ '!key', 'value', 'row with ! at the beginning of key' ],
+ [ 'k!ey', 'value', 'row with ! inside key' ],
+ [ '#key', 'value', 'row with # at the beginning of key' ],
+ [ 'k#ey', 'value', 'row with # inside key' ],
+ [ 'k{ey}', 'value', 'row with { and } inside key' ],
+ [ 'k\\tey', 'value\\', 'row with escapes' ],
+ [ '01234', '13.34', 'row with numbers' ],
+ [ '\\n\\tкая', 'кая', 'row with annoying characteres' ],
+ [ '=', '', 'row with empty value' ],
+ [ '#k e\\=y#', '=v!\\=alue\\ \\\\', 'complex row' ],
+ [ 'Key with "quotes"', 'Value "with quotes" also', 'row with double-quotes' ],
+ [ 'Key with \\"quotes\\"', 'Value \\"with quotes\\" also',
+ 'row with double-quotes AND backslashes' ],
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/ffs/AppleInfoPlistFfsTest.php b/Translate/tests/phpunit/ffs/AppleInfoPlistFfsTest.php
new file mode 100644
index 00000000..53944e02
--- /dev/null
+++ b/Translate/tests/phpunit/ffs/AppleInfoPlistFfsTest.php
@@ -0,0 +1,74 @@
+<?php
+/**
+ * The AppleInfoPListFfs class is responsible for loading messages from .strings
+ * files, which are used in many iOS and Mac OS X projects.
+ * These tests check that the message keys are loaded, mangled and unmangled
+ * correctly.
+ *
+ * @file
+ */
+
+/** @covers AppleInfoPlistFfs */
+class AppleInfoPlistFfsTest extends MediaWikiIntegrationTestCase {
+
+ protected $groupConfigurationInfoPList = [
+ 'BASIC' => [
+ 'class' => FileBasedMessageGroup::class,
+ 'id' => 'test-id',
+ 'label' => 'Test Label',
+ 'namespace' => 'NS_MEDIAWIKI',
+ 'description' => 'Test description',
+ ],
+ 'FILES' => [
+ 'class' => AppleInfoPlistFfs::class,
+ ],
+ ];
+
+ /**
+ * @covers AppleInfoPlistFfs::readRow
+ * @dataProvider stringProvider
+ */
+ public function testInfoPlistException( $input, $exceptionMessage ) {
+ $this->expectException( RuntimeException::class );
+ $this->expectExceptionMessage( $exceptionMessage );
+
+ $group = MessageGroupBase::factory( $this->groupConfigurationInfoPList );
+ $ffs = new AppleInfoPlistFfs( $group );
+ $ffs->readFromVariable( $input );
+ }
+
+ /**
+ * @covers AppleInfoPlistFfs::readRow
+ * @covers AppleInfoPlistFfs::writeRow
+ */
+ public function testInfoPlistFileRoundtrip() {
+ $infile = file_get_contents( __DIR__ . '/../data/AppleInfoPlistFfsTest1.strings' );
+ /** @var FileBasedMessageGroup $group */
+ $group = MessageGroupBase::factory( $this->groupConfigurationInfoPList );
+ $ffs = new AppleInfoPlistFfs( $group );
+ $parsed = $ffs->readFromVariable( $infile );
+
+ $outfile = '';
+ foreach ( $parsed['MESSAGES'] as $key => $value ) {
+ $outfile .= AppleInfoPlistFfs::writeRow( $key, $value );
+ }
+ $reparsed = $ffs->readFromVariable( $outfile );
+
+ $this->assertSame( $parsed['MESSAGES'], $reparsed['MESSAGES'],
+ 'Messages survive roundtrip through write and read' );
+ }
+
+ public function stringProvider() {
+ $input = <<<STRINGS
+website = "<nowiki>http://en.wikipedia.org/</nowiki>";
+"language" = "English";
+STRINGS;
+ yield [ $input, 'Empty or invalid key in line: "language" = "English"' ];
+
+ $input = <<<STRINGS
+website = "<nowiki>http://en.wikipedia.org/</nowiki>";
+language key = "English";
+STRINGS;
+ yield [ $input, 'Key with space found in line: language key = "English"' ];
+ }
+}
diff --git a/Translate/tests/phpunit/ffs/DtdFFSTest.php b/Translate/tests/phpunit/ffs/DtdFFSTest.php
new file mode 100644
index 00000000..a7a9bcd2
--- /dev/null
+++ b/Translate/tests/phpunit/ffs/DtdFFSTest.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * The DtdFFS class is responsible for loading messages from .dtd
+ * files.
+ * These tests check that the message keys are loaded and saved correctly.
+ * @author Niklas Laxström
+ * @author Amir E. Aharoni
+ * @file
+ * @license GPL-2.0-or-later
+ */
+
+/** @covers DtdFFS */
+class DtdFFSTest extends MediaWikiIntegrationTestCase {
+
+ protected $groupConfiguration = [
+ 'BASIC' => [
+ 'class' => FileBasedMessageGroup::class,
+ 'id' => 'test-id',
+ 'label' => 'Test Label',
+ 'namespace' => 'NS_MEDIAWIKI',
+ 'description' => 'Test description',
+ ],
+ 'FILES' => [
+ 'class' => DtdFFS::class,
+ ],
+ ];
+
+ public function testParsing() {
+ $file =
+ <<<DTD
+ <!--
+# Messages for Interlingua (interlingua)
+# Exported from translatewiki.net
+
+# Author: McDutchie
+-->
+<!ENTITY okawix.title "Okawix &okawix.vernum; - Navigator de Wikipedia">
+<!ENTITY okawix.back
+"Retro">
+DTD;
+
+ /** @var FileBasedMessageGroup $group */
+ $group = MessageGroupBase::factory( $this->groupConfiguration );
+ $ffs = new DtdFFS( $group );
+ $parsed = $ffs->readFromVariable( $file );
+ $expected = [
+ 'okawix.title' => 'Okawix &okawix.vernum; - Navigator de Wikipedia',
+ 'okawix.back' => 'Retro',
+ ];
+ $expected = [ 'MESSAGES' => $expected, 'AUTHORS' => [ 'McDutchie' ] ];
+ $this->assertEquals( $expected, $parsed );
+ }
+}
diff --git a/Translate/tests/phpunit/ffs/GettextFFSTest.php b/Translate/tests/phpunit/ffs/GettextFFSTest.php
new file mode 100644
index 00000000..bf8c0606
--- /dev/null
+++ b/Translate/tests/phpunit/ffs/GettextFFSTest.php
@@ -0,0 +1,265 @@
+<?php
+/**
+ * Tests for Gettext message file format.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @copyright Copyright © 2012-2013, Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+/** @covers \GettextFFS */
+class GettextFFSTest extends MediaWikiIntegrationTestCase {
+ protected $groupConfiguration;
+
+ protected function setUp(): void {
+ parent::setUp();
+ $this->groupConfiguration = [
+ 'BASIC' => [
+ 'class' => FileBasedMessageGroup::class,
+ 'id' => 'test-id',
+ 'label' => 'Test Label',
+ 'namespace' => 'NS_MEDIAWIKI',
+ 'description' => 'Test description',
+ ],
+ 'FILES' => [
+ 'class' => GettextFFS::class,
+ 'sourcePattern' => __DIR__ . '/../data/gettext.po',
+ ],
+ ];
+ }
+
+ /** @dataProvider provideMangling */
+ public function testMangling( $expected, $item, $algo ) {
+ $this->assertEquals( $expected, GettextFFS::generateKeyFromItem( $item, $algo ) );
+ }
+
+ public static function provideMangling() {
+ return [
+ [
+ '3f9999051ce0bc6e98f43224fe6ee1c220e34e49-Hello!_world_loooooooooooooooo',
+ [ 'id' => 'Hello! world loooooooooooooooooooooooooooooooooooooooooong', 'ctxt' => 'baa' ],
+ 'legacy'
+ ],
+ [
+ '3f9999-Hello!_world_loooooooooooooooo',
+ [ 'id' => 'Hello! world loooooooooooooooooooooooooooooooooooooooooong', 'ctxt' => 'baa' ],
+ 'simple'
+ ],
+
+ [
+ '1437e478b59e220640bf530f7e3bac93950eb8ae-"¤_=FJQ"_¤r_£_ab',
+ [ 'id' => '"¤#=FJQ"<>¤r £}[]}%ab', 'ctxt' => false ],
+ 'legacy'
+ ],
+ [
+ '1437e4-"¤#=FJQ"<>¤r_£}[]}%ab',
+ [ 'id' => '"¤#=FJQ"<>¤r £}[]}%ab', 'ctxt' => false ],
+ 'simple'
+ ],
+
+ ];
+ }
+
+ public function testHashing() {
+ $item1 = [
+ 'id' => 'a',
+ 'str' => 'b',
+ 'ctxt' => false,
+ ];
+
+ $item2 = [
+ 'id' => 'a',
+ 'str' => 'b',
+ 'ctxt' => '',
+ ];
+
+ $this->assertNotEquals(
+ GettextFFS::generateKeyFromItem( $item1, 'legacy' ),
+ GettextFFS::generateKeyFromItem( $item2, 'legacy' ),
+ 'Empty msgctxt is different from no msgctxt'
+ );
+
+ $this->assertNotEquals(
+ GettextFFS::generateKeyFromItem( $item1, 'simple' ),
+ GettextFFS::generateKeyFromItem( $item2, 'simple' ),
+ 'Empty msgctxt is different from no msgctxt'
+ );
+
+ $this->assertEquals(
+ sha1( $item1['id'] ) . '-' . $item1['id'],
+ GettextFFS::generateKeyFromItem( $item1, 'legacy' )
+ );
+
+ $this->assertEquals(
+ substr( sha1( $item1['id'] ), 0, 6 ) . '-' . $item1['id'],
+ GettextFFS::generateKeyFromItem( $item1, 'simple' )
+ );
+ }
+
+ public function testMsgctxtExport() {
+ /** @var FileBasedMessageGroup $group */
+ $group = MessageGroupBase::factory( $this->groupConfiguration );
+ $ffs = new GettextFFS( $group );
+
+ $object = new ReflectionObject( $ffs );
+ $method = $object->getMethod( 'formatMessageBlock' );
+ $method->setAccessible( true );
+
+ $key = 'key';
+ $m = new FatMessage( 'key', 'definition' );
+ $m->setTranslation( 'translation' );
+ $trans = [];
+ $pot = [];
+ $pluralCount = 0;
+
+ $results = <<<GETTEXT
+#
+msgid "definition"
+msgstr "translation"
+
+#
+msgctxt ""
+msgid "definition"
+msgstr "translation"
+
+#
+msgctxt "context"
+msgid "definition"
+msgstr "translation"
+GETTEXT;
+
+ $results = preg_split( '/\n\n/', $results );
+
+ // Case 1: no context
+ $this->assertEquals(
+ $results[0],
+ trim( $method->invoke( $ffs, $key, $m, $trans, $pot, $pluralCount ) )
+ );
+
+ // Case 2: empty context
+ $pot['ctxt'] = '';
+ $this->assertEquals(
+ $results[1],
+ trim( $method->invoke( $ffs, $key, $m, $trans, $pot, $pluralCount ) )
+ );
+
+ // Case 3: context
+ $pot['ctxt'] = 'context';
+ $this->assertEquals(
+ $results[2],
+ trim( $method->invoke( $ffs, $key, $m, $trans, $pot, $pluralCount ) )
+ );
+ }
+
+ /** @dataProvider provideShouldOverwrite */
+ public function testShouldOverwrite( $a, $b, $expected, $comment ) {
+ $group = MessageGroupBase::factory( $this->groupConfiguration );
+ $ffs = new GettextFFS( $group );
+ $actual = $ffs->shouldOverwrite( $a, $b );
+ $this->assertEquals( $expected, $actual, $comment );
+ }
+
+ public function provideShouldOverwrite() {
+ $cases = [];
+
+ $cases[] = [
+<<<GETTEXT
+#
+msgid ""
+msgstr ""
+""
+"PO-Revision-Date: 2017-02-09 07:24:07+0000\\n"
+"X-POT-Import-Date: 2016-08-11 04:53:15+0000\\n"
+"Content-Type: text/plain; charset=UTF-8\\n"
+"Content-Transfer-Encoding: 8bit\\n"
+"Language: azb\\n"
+"X-Generator: MediaWiki 1.29.0-alpha; Translate 2017-01-24\\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\\n"
+
+#: frontend/templates/index.html:38
+msgid "About the map"
+msgstr ""
+GETTEXT
+ ,
+<<<GETTEXT
+#
+msgid ""
+msgstr ""
+""
+"PO-Revision-Date: 2017-02-06 07:07:03+0000\\n"
+"X-POT-Import-Date: 2016-08-11 04:53:15+0000\\n"
+"Content-Type: text/plain; charset=UTF-8\\n"
+"Content-Transfer-Encoding: 8bit\\n"
+"Language: azb\\n"
+"X-Generator: MediaWiki 1.29.0-alpha; Translate 2017-01-24\\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\\n"
+
+#: frontend/templates/index.html:38
+msgid "About the map"
+msgstr ""
+GETTEXT
+ ,
+ false,
+ "Only date has changed"
+ ];
+
+ $cases[] = [
+<<<GETTEXT
+#
+msgid ""
+msgstr ""
+""
+"PO-Revision-Date: 2017-02-09 07:24:07+0000\\n"
+"X-POT-Import-Date: 2016-08-11 04:53:15+0000\\n"
+"Content-Type: text/plain; charset=UTF-8\\n"
+"Content-Transfer-Encoding: 8bit\\n"
+"Language: azb\\n"
+"X-Generator: MediaWiki 1.29.0-alpha; Translate 2017-01-24\\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\\n"
+
+#: frontend/templates/index.html:38
+msgid "About the map"
+msgstr ""
+GETTEXT
+ ,
+<<<GETTEXT
+#
+msgid ""
+msgstr ""
+""
+"PO-Revision-Date: 2017-02-06 07:07:03+0000\\n"
+"X-POT-Import-Date: 2016-08-11 04:53:15+0000\\n"
+"Content-Type: text/plain; charset=UTF-8\\n"
+"Content-Transfer-Encoding: 8bit\\n"
+"Language: fi\\n"
+"X-Generator: MediaWiki 1.29.0-alpha; Translate 2017-01-24\\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\\n"
+
+#: frontend/templates/index.html:38
+msgid "About the map"
+msgstr "Tietoja kartasta"
+GETTEXT
+ ,
+ true,
+ "Content has changed"
+ ];
+
+ return $cases;
+ }
+
+ public function testIsContentEqual() {
+ $group = MessageGroupBase::factory( $this->groupConfiguration );
+ $ffs = new GettextFFS( $group );
+
+ $this->assertTrue( $ffs->isContentEqual( 'Foo bar', 'Foo bar' ) );
+ $this->assertTrue( $ffs->isContentEqual(
+ 'The bunnies stole {{PLURAL:GETTEXT|one carrot|%{count} carrots}}.',
+ '{{PLURAL:GETTEXT|The bunnies stole one carrot.|The bunnies stole %{count} carrots.}}' ) );
+
+ $this->assertFalse( $ffs->isContentEqual( 'Foo bar', 'Foo baz' ) );
+ $this->assertFalse( $ffs->isContentEqual(
+ 'The bunnies stole {{PLURAL:GETTEXT|one banana|%{count} carrots}}.',
+ '{{PLURAL:GETTEXT|The bunnies stole one carrot.|The bunnies stole %{count} carrots.}}' ) );
+ }
+}
diff --git a/Translate/tests/phpunit/ffs/IniFFSTest.php b/Translate/tests/phpunit/ffs/IniFFSTest.php
new file mode 100644
index 00000000..2ef648e1
--- /dev/null
+++ b/Translate/tests/phpunit/ffs/IniFFSTest.php
@@ -0,0 +1,66 @@
+<?php
+/**
+ * The IniFFS class is responsible for loading messages from .ini
+ * files, which are sometimes used for translations.
+ * @author Niklas Laxström
+ * @copyright Copyright © 2012-2013, Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+/** @covers IniFFS */
+class IniFFSTest extends MediaWikiIntegrationTestCase {
+
+ protected $groupConfiguration = [
+ 'BASIC' => [
+ 'class' => FileBasedMessageGroup::class,
+ 'id' => 'test-id',
+ 'label' => 'Test Label',
+ 'namespace' => 'NS_MEDIAWIKI',
+ 'description' => 'Test description',
+ ],
+ 'FILES' => [
+ 'class' => IniFFS::class,
+ 'sourcePattern' => 'ignored',
+ ],
+ ];
+
+ public function testParsing() {
+ $file = file_get_contents( __DIR__ . '/../data/IniFFSTest1.ini' );
+
+ /** @var FileBasedMessageGroup $group */
+ $group = MessageGroupBase::factory( $this->groupConfiguration );
+ $ffs = new IniFFS( $group );
+
+ $this->assertTrue( IniFFS::isValid( $file ) );
+
+ $parsed = $ffs->readFromVariable( $file );
+ $expected = [
+ 'hello' => 'Hello',
+ 'world' => 'World!',
+ 'all' => 'all = all',
+ 'foo.bar' => 'bar',
+ 'quote' => "We're having fun?",
+ ];
+ $expected = [
+ 'MESSAGES' => $expected,
+ 'AUTHORS' => [ 'The king of very small kingdom' ]
+ ];
+ $this->assertEquals( $expected, $parsed );
+
+ $invalidContent = 'Invalid-Ini-Content';
+ $this->assertFalse( IniFFS::isValid( $invalidContent ) );
+ }
+
+ public function testExport() {
+ global $wgSitename;
+ $file = file_get_contents( __DIR__ . '/../data/IniFFSTest2.ini' );
+ $file = str_replace( '$wgSitename', $wgSitename, $file );
+
+ $collection = new MockMessageCollectionForExport();
+ /** @var FileBasedMessageGroup $group */
+ $group = MessageGroupBase::factory( $this->groupConfiguration );
+ $ffs = new IniFFS( $group );
+ $this->assertEquals( $file, $ffs->writeIntoVariable( $collection ) );
+ }
+}
diff --git a/Translate/tests/phpunit/ffs/JavaFFSTest.php b/Translate/tests/phpunit/ffs/JavaFFSTest.php
new file mode 100644
index 00000000..5784da2e
--- /dev/null
+++ b/Translate/tests/phpunit/ffs/JavaFFSTest.php
@@ -0,0 +1,88 @@
+<?php
+/**
+ * The JavaFFS class is responsible for loading messages from .properties
+ * files, which are used in many JavaScript and Java projects.
+ * These tests check that the message keys are loaded, mangled and unmangled
+ * correctly.
+ * @author Niklas Laxström
+ * @file
+ */
+
+/** @covers JavaFFS */
+class JavaFFSTest extends MediaWikiIntegrationTestCase {
+
+ protected $groupConfiguration = [
+ 'BASIC' => [
+ 'class' => FileBasedMessageGroup::class,
+ 'id' => 'test-id',
+ 'label' => 'Test Label',
+ 'namespace' => 'NS_MEDIAWIKI',
+ 'description' => 'Test description',
+ ],
+ 'FILES' => [
+ 'class' => JavaFFS::class,
+ ],
+ ];
+
+ public function testParsing() {
+ $file =
+ <<<PROPERTIES
+ # You are reading the ".properties" entry.
+! The exclamation mark can also mark text as comments.
+website = <nowiki>http://en.wikipedia.org/</nowiki>
+language = English
+# The backslash below tells the application to continue reading
+# the value onto the next line.
+message = Welcome to \
+ Wikipedia!
+# Add spaces to the key
+key\ with\ spaces = Value that can be looked up with "key with spaces".
+key-with-{curlies} = Value that can be looked up with "key-with-{curlies}".
+PROPERTIES;
+
+ /** @var FileBasedMessageGroup $group */
+ $group = MessageGroupBase::factory( $this->groupConfiguration );
+ $ffs = new JavaFFS( $group );
+ $parsed = $ffs->readFromVariable( $file );
+ $expected = [
+ 'website' => '<nowiki>http://en.wikipedia.org/</nowiki>',
+ 'language' => 'English',
+ 'message' => 'Welcome to Wikipedia!',
+ 'key with spaces' => 'Value that can be looked up with "key with spaces".',
+ // We expect this one to be mangled for storage
+ 'key-with-=7Bcurlies=7D' => 'Value that can be looked up with "key-with-{curlies}".',
+ ];
+ $expected = [ 'MESSAGES' => $expected, 'AUTHORS' => [] ];
+ $this->assertEquals( $expected, $parsed );
+ }
+
+ /** @dataProvider rowValuesProvider */
+ public function testRowRoundtrip( $key, $sep, $value, $comment ) {
+ $write = JavaFFS::writeRow( $key, $sep, $value );
+ // Trim the trailing newline
+ $write = rtrim( $write );
+ list( $newkey, $newvalue ) = JavaFFS::readRow( $write, $sep );
+
+ $this->assertSame( $key, $newkey, "Key survives roundtrip in testdata: $comment" );
+ $this->assertSame( $value, $newvalue, "Value survives roundtrip in testdata: $comment" );
+ }
+
+ public function rowValuesProvider() {
+ return [
+ [ 'key', '=', 'value', 'simple row' ],
+ [ 'key', ':', 'value', 'row with different sep' ],
+ [ 'key', '=', 'val=ue', 'row with sep inside value' ],
+ [ 'k=ey', '=', 'value', 'row with sep inside key' ],
+ [ '!key', '=', 'value', 'row with ! at the beginning of key' ],
+ [ 'k!ey', '=', 'value', 'row with ! inside key' ],
+ [ '#key', '=', 'value', 'row with # at the beginning of key' ],
+ [ 'k#ey', '=', 'value', 'row with # inside key' ],
+ [ 'k{ey}', '=', 'value', 'row with { and } inside key' ],
+ [ 'k\\tey', '=', 'value\\', 'row with escapes' ],
+ [ '01234', '=', '13.34', 'row with numbers' ],
+ [ '\\n\\tкая', '=', 'кая', 'row with annoying characteres' ],
+ [ '=', '=', '', 'row with empty value' ],
+ [ '#k e\\=y#', '=', '=v!\\=alue\\ \\\\', 'complex row' ],
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/ffs/JsonFFSTest.php b/Translate/tests/phpunit/ffs/JsonFFSTest.php
new file mode 100644
index 00000000..8eadd473
--- /dev/null
+++ b/Translate/tests/phpunit/ffs/JsonFFSTest.php
@@ -0,0 +1,136 @@
+<?php
+/**
+ * Tests for JSON message file format.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @copyright Copyright © 2012-2013, Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+/** @covers \JsonFFS */
+class JsonFFSTest extends MediaWikiIntegrationTestCase {
+
+ protected function setUp(): void {
+ parent::setUp();
+ $this->groupConfiguration = [
+ 'BASIC' => [
+ 'class' => FileBasedMessageGroup::class,
+ 'id' => 'test-id',
+ 'label' => 'Test Label',
+ 'namespace' => 'NS_MEDIAWIKI',
+ 'description' => 'Test description',
+ ],
+ 'FILES' => [
+ 'class' => JsonFFS::class,
+ 'sourcePattern' => __DIR__ . '/../data/jsontest_%CODE%.json',
+ 'targetPattern' => 'jsontest_%CODE%.json',
+ ],
+ ];
+ }
+
+ protected $groupConfiguration;
+
+ /** @dataProvider jsonProvider */
+ public function testParsing( $messages, $authors, $file ) {
+ /** @var FileBasedMessageGroup $group */
+ $group = MessageGroupBase::factory( $this->groupConfiguration );
+ $ffs = new JsonFFS( $group );
+ $parsed = $ffs->readFromVariable( $file );
+ $expected = [
+ 'MESSAGES' => $messages,
+ 'AUTHORS' => $authors,
+ 'EXTRA' => [ 'METADATA' => [] ],
+ ];
+ $this->assertEquals( $expected, $parsed );
+
+ if ( $messages === [] ) {
+ $this->assertFalse( JsonFFS::isValid( $file ) );
+ } else {
+ $this->assertTrue( JsonFFS::isValid( $file ) );
+ }
+ }
+
+ public function jsonProvider() {
+ $values = [];
+
+ $file1 =
+ <<<JSON
+ {
+ "one": "jeden",
+ "two": "dwa",
+ "three": "trzy"
+}
+JSON;
+
+ $values[] = [
+ [
+ 'one' => 'jeden',
+ 'two' => 'dwa',
+ 'three' => 'trzy',
+ ],
+ [],
+ $file1,
+ ];
+
+ $file2 =
+ <<<JSON
+ {
+ "@metadata": {
+ "authors": ["Niklas", "Amir"]
+ },
+ "word": "слово"
+}
+JSON;
+
+ $values[] = [
+ [ 'word' => 'слово' ],
+ [ 'Niklas', 'Amir' ],
+ $file2,
+ ];
+
+ $file3 =
+ <<<JSON
+ <This is not
+Json!>@£0 file
+JSON;
+
+ $values[] = [
+ [],
+ [],
+ $file3,
+ ];
+
+ return $values;
+ }
+
+ public function testExport() {
+ $collection = new MockMessageCollectionForExport();
+ /** @var FileBasedMessageGroup $group */
+ $group = MessageGroupBase::factory( $this->groupConfiguration );
+ $ffs = new JsonFFS( $group );
+ $data = $ffs->writeIntoVariable( $collection );
+ $parsed = $ffs->readFromVariable( $data );
+
+ $this->assertEquals(
+ [ 'Nike the bunny' ],
+ $parsed['AUTHORS'],
+ 'Authors are exported'
+ );
+ $this->assertArrayHasKey( 'fuzzymsg', $parsed['MESSAGES'], 'fuzzy message is exported' );
+ $this->assertArrayHasKey(
+ 'translatedmsg',
+ $parsed['MESSAGES'],
+ 'translated message is exported'
+ );
+ if ( array_key_exists( 'untranslatedmsg', $parsed['MESSAGES'] ) ) {
+ $this->fail( 'Untranslated messages should not be exported' );
+ }
+
+ $this->assertEquals(
+ 'metavalue',
+ $parsed['EXTRA']['METADATA']['metakey'],
+ 'metadata is preserved'
+ );
+ }
+}
diff --git a/Translate/tests/phpunit/ffs/MediaWikiExtensionsTest.php b/Translate/tests/phpunit/ffs/MediaWikiExtensionsTest.php
new file mode 100644
index 00000000..a2dc72eb
--- /dev/null
+++ b/Translate/tests/phpunit/ffs/MediaWikiExtensionsTest.php
@@ -0,0 +1,46 @@
+<?php
+
+/**
+ * Test for parsing the special definition file for mediawiki-extensions
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+class MediaWikiExtensionsTest extends PHPUnit\Framework\TestCase {
+ /**
+ * @requires function yaml_parse
+ * @covers PremadeMediawikiExtensionGroups
+ */
+ public function testParsing() {
+ $defs = __DIR__ . '/../data/mediawiki-extensions.txt';
+ $path = '%GROUPROOT%/mediawiki-extensions/extensions';
+ $foo = new PremadeMediawikiExtensionGroups( $defs, $path );
+ $list = $deps = $autoload = [];
+ $foo->register( $list, $deps, $autoload );
+
+ $this->assertCount( 1, $deps, 'A dependency to definition file was added' );
+ $this->assertCount( 5, $list, 'Right number of groups were created' );
+
+ $this->assertArrayHasKey( 'ext-wikimediamessages', $list );
+ $expected = TranslateYaml::load( __DIR__ . '/../data/MediaWikiExtensionTest-conf2.yaml' );
+ $this->assertEquals( $expected, $list['ext-wikimediamessages']->getConfiguration() );
+
+ $this->assertArrayHasKey( 'ext-examplejsonextension', $list );
+ $expected = TranslateYaml::load( __DIR__ . '/../data/MediaWikiExtensionTest-conf3.yaml' );
+ $this->assertEquals( $expected, $list['ext-examplejsonextension']->getConfiguration() );
+
+ $this->assertArrayHasKey( 'ext-exampleextension2', $list );
+ $expected = TranslateYaml::load( __DIR__ . '/../data/MediaWikiExtensionTest-conf4.yaml' );
+ $this->assertEquals( $expected, $list['ext-exampleextension2']->getConfiguration() );
+
+ $this->assertArrayHasKey( 'ext-languagesmodified', $list );
+ $languages = $list['ext-languagesmodified']->getTranslatableLanguages();
+ $this->assertArrayHasKey( 'foo', $languages, 'Included language is available' );
+ $this->assertArrayNotHasKey( 'bar', $languages, 'Excluded language is not available' );
+ $this->assertArrayHasKey( 'de', $languages, 'Default language is available' );
+
+ $this->assertArrayHasKey( 'ext-languagesset', $list );
+ $languages = $list['ext-languagesset']->getTranslatableLanguages();
+ $this->assertArrayHasKey( 'foo', $languages, 'Set language is available' );
+ $this->assertArrayNotHasKey( 'de', $languages, 'Unset language is not available' );
+ }
+}
diff --git a/Translate/tests/phpunit/ffs/XliffFFSTest.php b/Translate/tests/phpunit/ffs/XliffFFSTest.php
new file mode 100644
index 00000000..9c6422c4
--- /dev/null
+++ b/Translate/tests/phpunit/ffs/XliffFFSTest.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+/** @covers XliffFFS */
+class XliffFFSTest extends MediaWikiIntegrationTestCase {
+ protected $groupConfiguration = [
+ 'BASIC' => [
+ 'class' => FileBasedMessageGroup::class,
+ 'id' => 'test-id',
+ 'label' => 'Test Label',
+ 'namespace' => 'NS_MEDIAWIKI',
+ 'description' => 'Test description',
+ ],
+ 'FILES' => [
+ 'class' => XliffFFS::class,
+ 'sourcePattern' => '',
+ ],
+ ];
+
+ public function testParsing() {
+ /** @var FileBasedMessageGroup $group */
+ $group = MessageGroupBase::factory( $this->groupConfiguration );
+ $ffs = new XliffFFS( $group );
+
+ $file = file_get_contents( __DIR__ . '/../data/minimal.xlf' );
+ $parsed = $ffs->readFromVariable( $file, 'target' );
+ $expected = [
+ '1' => 'Hei maailma',
+ '2' => TRANSLATE_FUZZY . 'Fuzzy translation',
+ '3' => 'Tämä on <g id="1" ctype="bold">paksu</g>.',
+ ];
+ $expected = [ 'MESSAGES' => $expected ];
+ $this->assertEquals( $expected, $parsed );
+
+ $parsed = $ffs->readFromVariable( $file, 'source' );
+ $expected = [
+ '1' => 'Hello world',
+ '2' => 'Fuzzy message',
+ '3' => 'This is <g id="1" ctype="bold">bold</g>.',
+ ];
+ $expected = [ 'MESSAGES' => $expected ];
+ $this->assertEquals( $expected, $parsed );
+ }
+}
diff --git a/Translate/tests/phpunit/helpers/TranslatablePageTestTrait.php b/Translate/tests/phpunit/helpers/TranslatablePageTestTrait.php
new file mode 100644
index 00000000..41f4e534
--- /dev/null
+++ b/Translate/tests/phpunit/helpers/TranslatablePageTestTrait.php
@@ -0,0 +1,64 @@
+<?php
+/**
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+use MediaWiki\Extension\Translate\PageTranslation\TranslatablePage;
+use MediaWiki\MediaWikiServices;
+
+/**
+ * A utility trait containing reusable methods for use in tests
+ * @since 2020.04
+ */
+trait TranslatablePageTestTrait {
+ /**
+ * Creates a translatable page but does not mark it for translation.
+ *
+ * @param string $title
+ * @param string $content
+ * @param User $creator
+ * @return TranslatablePage
+ */
+ public function createUnmarkedTranslatablePage(
+ string $title, string $content, User $creator
+ ): TranslatablePage {
+ return $this->createTranslatablePage( $title, $content, $creator, false );
+ }
+
+ /**
+ * Creates a translatable page and marks it for translation.
+ *
+ * @param string $title
+ * @param string $content
+ * @param User $creator
+ * @return TranslatablePage
+ */
+ public function createMarkedTranslatablePage(
+ string $title, string $content, User $creator
+ ): TranslatablePage {
+ return $this->createTranslatablePage( $title, $content, $creator, true );
+ }
+
+ private function createTranslatablePage(
+ string $title, string $content, User $creator, bool $markForTranslation
+ ): TranslatablePage {
+ // Create new page
+ $translatablePageTitle = Title::newFromText( $title );
+ $page = MediaWikiServices::getInstance()->getWikiPageFactory()->newFromTitle( $translatablePageTitle );
+ $text = "<translate>$content</translate>";
+ $content = ContentHandler::makeContent( $text, $translatablePageTitle );
+ $translatablePage = TranslatablePage::newFromTitle( $translatablePageTitle );
+
+ // Create the page
+ $editStatus = $page->doUserEditContent( $content, $creator, __METHOD__ );
+
+ if ( $markForTranslation ) {
+ // Mark the page for translation
+ $latestRevisionId = $editStatus->value['revision-record']->getId();
+ $translatablePage->addMarkedTag( $latestRevisionId );
+ }
+
+ return $translatablePage;
+ }
+}
diff --git a/Translate/tests/phpunit/messagegroups/AggregateMessageGroupLoaderTest.php b/Translate/tests/phpunit/messagegroups/AggregateMessageGroupLoaderTest.php
new file mode 100644
index 00000000..404bad6e
--- /dev/null
+++ b/Translate/tests/phpunit/messagegroups/AggregateMessageGroupLoaderTest.php
@@ -0,0 +1,36 @@
+<?php
+
+/**
+ * @group Database
+ * @covers AggregateMessageGroupLoader
+ */
+class AggregateMessageGroupLoaderTest extends PHPUnit\Framework\TestCase {
+ public function testCacheCalls() {
+ /** @var MessageGroupWANCache $mockMgWANCache */
+ $mockMgWANCache = $this->getMockBuilder( MessageGroupWANCache::class )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $aggregateLoader = new AggregateMessageGroupLoader(
+ TranslateUtils::getSafeReadDB(),
+ $mockMgWANCache
+ );
+
+ $mockMgWANCache->expects( $this->once() )
+ ->method( 'getValue' )
+ ->with( 'recache' )
+ ->willReturn( [] );
+
+ // should trigger a get call on cache
+ $aggregateLoader->recache();
+
+ // should return the cached groups from process cache
+ $this->assertEquals( [], $aggregateLoader->getGroups() );
+
+ $mockMgWANCache->expects( $this->once() )
+ ->method( 'delete' );
+
+ // should trigger the delete method on cache
+ $aggregateLoader->clearCache();
+ }
+}
diff --git a/Translate/tests/phpunit/messagegroups/FileBasedMessageGroupLoaderTest.php b/Translate/tests/phpunit/messagegroups/FileBasedMessageGroupLoaderTest.php
new file mode 100644
index 00000000..b02c8156
--- /dev/null
+++ b/Translate/tests/phpunit/messagegroups/FileBasedMessageGroupLoaderTest.php
@@ -0,0 +1,84 @@
+<?php
+
+/** @covers FileBasedMessageGroupLoader */
+class FileBasedMessageGroupLoaderTest extends MediaWikiIntegrationTestCase {
+ /** @var FileBasedMessageGroupLoader */
+ protected $mgFileLoader;
+
+ protected function setUp(): void {
+ parent::setUp();
+
+ $conf = [
+ __DIR__ . '/../data/MessageLoaderGroups.yaml',
+ ];
+
+ $this->setMwGlobals( [
+ 'wgTranslateGroupFiles' => $conf,
+ ] );
+
+ $this->setTemporaryHook( 'TranslateInitGroupLoaders',
+ 'FileBasedMessageGroupLoader::registerLoader' );
+
+ $this->mgFileLoader = new FileBasedMessageGroupLoader(
+ new MessageGroupWANCache(
+ new WANObjectCache( [ 'cache' => new HashBagOStuff() ] )
+ )
+ );
+ }
+
+ public function testGetGroups() {
+ $fileBasedGroups = $this->mgFileLoader->getGroups();
+ $this->assertCount( 1, $fileBasedGroups, 'the configured file based ' .
+ 'message group is returned' );
+ $this->assertEquals( 'message-loader-group', current( $fileBasedGroups )->getId(),
+ ' the correct configured group is returned.' );
+ }
+
+ public function testRecache() {
+ $prevGroupCount = count( $this->mgFileLoader->getGroups() );
+
+ $this->setMwGlobals( [
+ 'wgTranslateGroupFiles' => [],
+ ] );
+ $countBeforeRecache = count( $this->mgFileLoader->getGroups() );
+ $this->assertEquals( $prevGroupCount, $countBeforeRecache,
+ 'removed groups still remain until recache is called' );
+
+ $this->mgFileLoader->recache();
+
+ $updatedCount = count( $this->mgFileLoader->getGroups() );
+ $this->assertEquals( ( $prevGroupCount - 1 ), $updatedCount,
+ 'removed groups disappear after recache is called' );
+ }
+
+ public function testCacheCalls() {
+ $dummy = new DependencyWrapper( [
+ 'groups' => [],
+ 'autoload' => []
+ ], [] );
+
+ /** @var MessageGroupWANCache $mockMgWANCache */
+ $mockMgWANCache = $this->getMockBuilder( MessageGroupWANCache::class )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $fileBasedLoader = new FileBasedMessageGroupLoader( $mockMgWANCache );
+
+ $mockMgWANCache->expects( $this->once() )
+ ->method( 'getValue' )
+ ->with( 'recache' )
+ ->willReturn( $dummy );
+
+ // should trigger a get call on cache
+ $fileBasedLoader->recache();
+
+ // should return the cached groups from process cache
+ $this->assertEquals( [], $fileBasedLoader->getGroups() );
+
+ $mockMgWANCache->expects( $this->once() )
+ ->method( 'delete' );
+
+ // should trigger the delete method on cache
+ $fileBasedLoader->clearCache();
+ }
+}
diff --git a/Translate/tests/phpunit/messagegroups/MessageGroupLoaderTest.php b/Translate/tests/phpunit/messagegroups/MessageGroupLoaderTest.php
new file mode 100644
index 00000000..fdba56b1
--- /dev/null
+++ b/Translate/tests/phpunit/messagegroups/MessageGroupLoaderTest.php
@@ -0,0 +1,56 @@
+<?php
+
+/** @covers MessageGroupLoader */
+class MessageGroupLoaderTest extends MediaWikiIntegrationTestCase {
+
+ protected $cacheLoaderMock;
+
+ protected function setUp(): void {
+ parent::setUp();
+
+ $this->cacheLoaderMock = $this->createMock( MockCacheMessageGroupLoader::class );
+ $this->setTemporaryHook( 'TranslateInitGroupLoaders', [ $this, 'registerLoader' ] );
+
+ $mg = MessageGroups::singleton();
+ $mg->setCache( new WANObjectCache( [ 'cache' => new HashBagOStuff() ] ) );
+ $mg->clearCache();
+ }
+
+ public function registerLoader( array &$groupLoader ) {
+ $groupLoader[] = $this->cacheLoaderMock;
+ }
+
+ public function testGroupLoaderRecache() {
+ $this->cacheLoaderMock->expects( $this->once() )
+ ->method( 'getGroups' )
+ ->willReturn( [] );
+
+ $this->cacheLoaderMock->expects( $this->once() )
+ ->method( 'recache' );
+
+ MessageGroups::singleton()->recache();
+ }
+
+ public function testGroupLoaderClearCache() {
+ $this->cacheLoaderMock->expects( $this->once() )
+ ->method( 'clearCache' );
+
+ MessageGroups::singleton()->clearCache();
+ }
+
+ public function testGroupLoaderGetGroups() {
+ $testGroup = new WikiMessageGroup( 'testgroup', 'hello' );
+
+ $this->cacheLoaderMock->expects( $this->once() )
+ ->method( 'getGroups' )
+ ->willReturn( [
+ $testGroup
+ ] );
+
+ $groups = MessageGroups::singleton()->getGroups();
+
+ $this->assertCount( 1, $groups, 'the message group returned by the loader is present' );
+ $this->assertEquals( 'testgroup', $groups[0]->getId(), 'the id of the message group ' .
+ 'returned by the loader is present in the groups' );
+ }
+}
diff --git a/Translate/tests/phpunit/messagegroups/TranslatablePageMessageGroupStoreTest.php b/Translate/tests/phpunit/messagegroups/TranslatablePageMessageGroupStoreTest.php
new file mode 100644
index 00000000..f7ae38ff
--- /dev/null
+++ b/Translate/tests/phpunit/messagegroups/TranslatablePageMessageGroupStoreTest.php
@@ -0,0 +1,89 @@
+<?php
+
+/**
+ * @group Database
+ * @covers TranslatablePageMessageGroupStore
+ */
+class TranslatablePageMessageGroupStoreTest extends MediaWikiIntegrationTestCase {
+ use TranslatablePageTestTrait;
+
+ /** @var TranslatablePageMessageGroupStore */
+ protected $mgTranslateStore;
+
+ protected function setUp(): void {
+ parent::setUp();
+
+ $this->setMwGlobals( [
+ 'wgEnablePageTranslation' => true
+ ] );
+
+ $this->mgTranslateStore = new TranslatablePageMessageGroupStore(
+ TranslateUtils::getSafeReadDB(),
+ new MessageGroupWANCache(
+ new WANObjectCache( [ 'cache' => new HashBagOStuff() ] )
+ )
+ );
+ }
+
+ public function testRecache() {
+ $prevGroupCount = count( $this->mgTranslateStore->getGroups() );
+
+ $this->createMarkedTranslatablePage( 'Upyog', 'Upyog', $this->getTestSysop()->getUser() );
+
+ $countBeforeRecache = count( $this->mgTranslateStore->getGroups() );
+ $this->assertEquals( $prevGroupCount, $countBeforeRecache,
+ 'new groups do not appear unless recache is called' );
+
+ $this->mgTranslateStore->recache();
+
+ $updatedCount = count( $this->mgTranslateStore->getGroups() );
+ $this->assertEquals( ( $prevGroupCount + 1 ), $updatedCount,
+ 'new groups appear after recache is called' );
+ }
+
+ public function testGlobalFlag() {
+ $this->createMarkedTranslatablePage( 'Upyon - 22', 'Upyog', $this->getTestSysop()->getUser() );
+ $this->mgTranslateStore->recache();
+ $prevCount = count( $this->mgTranslateStore->getGroups() );
+ $this->assertGreaterThanOrEqual( 1, $prevCount, 'there is atleast 1 ' .
+ 'translatable page returned' );
+
+ $this->setMwGlobals( [
+ 'wgEnablePageTranslation' => false
+ ] );
+
+ $this->mgTranslateStore->recache();
+ $this->assertCount( 0, $this->mgTranslateStore->getGroups(), 'no translatable pages returned' );
+ }
+
+ public function testCacheCalls() {
+ $dummy = new DependencyWrapper( [], [] );
+
+ /** @var MessageGroupWANCache $mockMgWANCache */
+ $mockMgWANCache = $this->getMockBuilder( MessageGroupWANCache::class )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $translateStore = new TranslatablePageMessageGroupStore(
+ TranslateUtils::getSafeReadDB(),
+ $mockMgWANCache
+ );
+
+ $mockMgWANCache->expects( $this->once() )
+ ->method( 'getValue' )
+ ->with( 'recache' )
+ ->willReturn( $dummy );
+
+ // should trigger a get call on cache
+ $translateStore->recache();
+
+ // should return the cached groups from process cache
+ $this->assertEquals( [], $translateStore->getGroups() );
+
+ $mockMgWANCache->expects( $this->once() )
+ ->method( 'delete' );
+
+ // should trigger the delete method on cache
+ $translateStore->clearCache();
+ }
+}
diff --git a/Translate/tests/phpunit/mocks/MockCacheMessageGroupLoader.php b/Translate/tests/phpunit/mocks/MockCacheMessageGroupLoader.php
new file mode 100644
index 00000000..11278337
--- /dev/null
+++ b/Translate/tests/phpunit/mocks/MockCacheMessageGroupLoader.php
@@ -0,0 +1,21 @@
+<?php
+
+class MockCacheMessageGroupLoader extends MessageGroupLoader
+ implements CachedMessageGroupLoader {
+
+ public function getGroups() {
+ return [];
+ }
+
+ public function recache() {
+ }
+
+ public function clearCache() {
+ }
+
+ public static function registerLoader( array &$groupLoader, array $deps ) {
+ $groupLoader[] = new self( new MessageGroupWANCache(
+ $deps['cache']
+ ) );
+ }
+}
diff --git a/Translate/tests/phpunit/mocks/MockCustomInsertableSuggester.php b/Translate/tests/phpunit/mocks/MockCustomInsertableSuggester.php
new file mode 100644
index 00000000..350e6643
--- /dev/null
+++ b/Translate/tests/phpunit/mocks/MockCustomInsertableSuggester.php
@@ -0,0 +1,10 @@
+<?php
+declare( strict_types = 1 );
+
+use MediaWiki\Extension\Translate\TranslatorInterface\Insertable\InsertablesSuggester;
+
+class MockCustomInsertableSuggester implements InsertablesSuggester {
+ public function getInsertables( string $text ): array {
+ return [ new Insertable( 'test' ) ];
+ }
+}
diff --git a/Translate/tests/phpunit/mocks/MockFileBasedMessageGroup.php b/Translate/tests/phpunit/mocks/MockFileBasedMessageGroup.php
new file mode 100644
index 00000000..b009a11a
--- /dev/null
+++ b/Translate/tests/phpunit/mocks/MockFileBasedMessageGroup.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * This file contains a managed message group implementation mock object.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @copyright Copyright © 2012-2013, Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+class MockFileBasedMessageGroup extends FileBasedMessageGroup {
+ public function load( $code ): array {
+ return [ $this->getId() . '-messagekey' => 'üga' ];
+ }
+
+ public function exists(): bool {
+ return true;
+ }
+
+ public function getKeys(): array {
+ return array_keys( $this->load( 'en' ) );
+ }
+}
diff --git a/Translate/tests/phpunit/mocks/MockMessageCollectionForExport.php b/Translate/tests/phpunit/mocks/MockMessageCollectionForExport.php
new file mode 100644
index 00000000..0f260f85
--- /dev/null
+++ b/Translate/tests/phpunit/mocks/MockMessageCollectionForExport.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Mock class for unit tests
+ * @author Niklas Laxström
+ * @file
+ * @copyright Copyright © 2012-2013, Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * This class can be used to test exporting of message groups.
+ */
+class MockMessageCollectionForExport extends MessageCollection {
+ public function __construct() {
+ $msg = new FatMessage( 'translatedmsg', 'definition' );
+ $msg->setTranslation( 'translation' );
+ $this->messages['translatedmsg'] = $msg;
+
+ $msg = new FatMessage( 'fuzzymsg', 'definition' );
+ $msg->addTag( 'fuzzy' );
+ $msg->setTranslation( '!!FUZZY!!translation' );
+ $this->messages['fuzzymsg'] = $msg;
+
+ $msg = new FatMessage( 'untranslatedmsg', 'definition' );
+ $this->messages['untranslatedmsg'] = $msg;
+
+ $this->tags = [
+ 'fuzzy' => [ 'fuzzymsg' ],
+ ];
+
+ $this->keys = array_flip( array_keys( $this->messages ) );
+ }
+
+ public function getAuthors() {
+ return [ 'Nike the bunny' ];
+ }
+
+ public function getLanguage() {
+ return 'fi';
+ }
+}
diff --git a/Translate/tests/phpunit/mocks/MockValidators.php b/Translate/tests/phpunit/mocks/MockValidators.php
new file mode 100644
index 00000000..14e11a70
--- /dev/null
+++ b/Translate/tests/phpunit/mocks/MockValidators.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * Contains mock validators used for testing purpose.
+ *
+ * @file
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Extension\Translate\Validation\MessageValidator;
+use MediaWiki\Extension\Translate\Validation\ValidationIssue;
+use MediaWiki\Extension\Translate\Validation\ValidationIssues;
+
+class MockTranslateValidator implements MessageValidator {
+ public function getIssues( TMessage $message, string $targetLanguage ): ValidationIssues {
+ $issues = new ValidationIssues();
+ $issues->add( new ValidationIssue( 'plural', 'missing', 'translate-checks-plural' ) );
+ $issues->add( new ValidationIssue( 'pagename', 'namespace', 'translate-checks-pagename' ) );
+
+ return $issues;
+ }
+}
+
+class AnotherMockTranslateValidator implements MessageValidator {
+ public function getIssues( TMessage $message, string $targetLanguage ): ValidationIssues {
+ $issues = new ValidationIssues();
+ $issues->add( new ValidationIssue( 'plural', 'dupe', 'translate-checks-plural-dupe' ) );
+
+ return $issues;
+ }
+}
diff --git a/Translate/tests/phpunit/mocks/MockWikiMessageGroup.php b/Translate/tests/phpunit/mocks/MockWikiMessageGroup.php
new file mode 100644
index 00000000..7df6a3a6
--- /dev/null
+++ b/Translate/tests/phpunit/mocks/MockWikiMessageGroup.php
@@ -0,0 +1,74 @@
+<?php
+
+use MediaWiki\Extension\Translate\Validation\ValidationRunner;
+
+/**
+ * This file contains multiple unmanaged message group implementation.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @author Siebrand Mazeland
+ * @copyright Copyright © 2008-2013, Niklas Laxström, Siebrand Mazeland
+ * @license GPL-2.0-or-later
+ */
+
+class MockWikiMessageGroup extends WikiMessageGroup {
+ public function __construct( $id, array $messages ) {
+ parent::__construct( $id, 'unused' );
+ $this->id = $id;
+ $this->messages = $messages;
+ }
+
+ public function getDefinitions() {
+ return $this->messages;
+ }
+
+ public function getMessage( $key, $code ) {
+ if ( $code === $this->getSourceLanguage() ) {
+ return $this->messages[strtolower( $key )] ?? null;
+ }
+ parent::getMessage( $key, $code );
+ }
+}
+
+/**
+ * Has validators that always return a validation error and warning.
+ */
+class MockWikiValidationMessageGroup extends MockWikiMessageGroup {
+ public function getValidator() {
+ $validator = new ValidationRunner( $this->getId() );
+ $validator->setValidators( [
+ [ 'class' => AnotherMockTranslateValidator::class ],
+ [
+ 'class' => MockTranslateValidator::class,
+ 'enforce' => true,
+ 'include' => [
+ 'translated',
+ 'untranslated',
+ [
+ 'type' => 'regex',
+ 'pattern' => '/regex-key/'
+ ],
+ [
+ 'type' => 'wildcard',
+ 'pattern' => '*translated*'
+ ]
+ ],
+ 'exclude' => [
+ 'key-excluded',
+ [
+ 'type' => 'regex',
+ 'pattern' => '/regex-exclude/'
+ ],
+ [
+ 'type' => 'wildcard',
+ 'pattern' => '*wildcard-exclude*'
+ ]
+ ]
+
+ ],
+ ] );
+
+ return $validator;
+ }
+}
diff --git a/Translate/tests/phpunit/tag/PageTranslationParserTest.php b/Translate/tests/phpunit/tag/PageTranslationParserTest.php
new file mode 100644
index 00000000..2d325f51
--- /dev/null
+++ b/Translate/tests/phpunit/tag/PageTranslationParserTest.php
@@ -0,0 +1,90 @@
+<?php
+declare( strict_types = 1 );
+
+use MediaWiki\Extension\Translate\PageTranslation\ParserOutput;
+use MediaWiki\Extension\Translate\PageTranslation\ParsingFailure;
+use MediaWiki\Extension\Translate\PageTranslation\TestingParsingPlaceholderFactory;
+use MediaWiki\Extension\Translate\PageTranslation\TranslatablePageParser;
+use MediaWiki\Extension\Translate\PageTranslation\TranslationPage;
+
+/**
+ * Custom testing framework for page translation parser.
+ * @ingroup PageTranslation
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\PageTranslation\TranslatablePageParser
+ */
+class PageTranslationParserTest extends MediaWikiIntegrationTestCase {
+ public static function provideTestFiles() {
+ foreach ( glob( __DIR__ . '/pagetranslation/*.ptfile' ) as $file ) {
+ yield [ basename( $file, '.ptfile' ), $file ];
+ }
+ }
+
+ /** @dataProvider provideTestFiles */
+ public function testParsing( string $name, string $file ) {
+ if ( $name === 'FailNotAtomic' ) {
+ $this->markTestSkipped( 'Extended validation not yet implemented' );
+ }
+
+ if ( $name !== 'Whitespace' ) {
+ $this->markTestSkipped( 'Extended validation not yet implemented' );
+ }
+
+ if ( strpos( $name, 'Fail' ) === 0 ) {
+ $this->expectException( ParsingFailure::class );
+ }
+
+ $title = Title::newFromText( $name );
+ $inputSourceText = file_get_contents( $file );
+ $parser = new TranslatablePageParser( new TestingParsingPlaceholderFactory() );
+ $parserOutput = $parser->parse( $inputSourceText );
+
+ $pattern = dirname( $file ) . "/$name";
+
+ if ( file_exists( "$pattern.ptsource" ) ) {
+ $source = $parserOutput->sourcePageTextForSaving();
+ $this->assertSame(
+ file_get_contents( "$pattern.ptsource" ),
+ $source,
+ 'Marked source text is as expected'
+ );
+ }
+
+ if ( file_exists( "$pattern.pttarget" ) ) {
+ $translationPage = $this->getTranslationPage( $title, $parserOutput );
+ $target = $translationPage->generateSourceFromTranslations(
+ $this->createStub( Parser::class ), []
+ );
+ $this->assertEquals(
+ file_get_contents( "$pattern.pttarget" ),
+ $target,
+ 'Generated translation page text is as expected'
+ );
+ }
+
+ // Custom tests written in php
+ if ( file_exists( "$pattern.pttest" ) ) {
+ require "$pattern.pttest";
+ }
+ }
+
+ // This is copy of TranslatablePage::getTranslationPage, to mock WikiPageMessageGroup
+ private function getTranslationPage(
+ Title $title,
+ ParserOutput $parserOutput
+ ): TranslationPage {
+ $showOutdated = false;
+ $wrapUntranslated = false;
+
+ return new TranslationPage(
+ $parserOutput,
+ $this->createMock( WikiPageMessageGroup::class ),
+ Language::factory( 'en' ),
+ Language::factory( 'en' ),
+ $showOutdated,
+ $wrapUntranslated,
+ $title
+ );
+ }
+}
diff --git a/Translate/tests/phpunit/tag/PageTranslationTaggingTest.php b/Translate/tests/phpunit/tag/PageTranslationTaggingTest.php
new file mode 100644
index 00000000..3afc9053
--- /dev/null
+++ b/Translate/tests/phpunit/tag/PageTranslationTaggingTest.php
@@ -0,0 +1,144 @@
+<?php
+
+use MediaWiki\Extension\Translate\PageTranslation\RenderTranslationPageJob;
+use MediaWiki\Extension\Translate\PageTranslation\TranslatablePage;
+use MediaWiki\MediaWikiServices;
+
+/**
+ * @group Database
+ * @group medium
+ * @covers TranslatablePage
+ */
+class PageTranslationTaggingTest extends MediaWikiIntegrationTestCase {
+ protected function setUp(): void {
+ parent::setUp();
+
+ $this->setMwGlobals( [
+ 'wgEnablePageTranslation' => true,
+ 'wgTranslateTranslationServices' => [],
+ ] );
+ TranslateHooks::setupTranslate();
+ $this->setTemporaryHook( 'TranslateInitGroupLoaders',
+ [ 'TranslatablePageMessageGroupStore::registerLoader' ] );
+
+ $mg = MessageGroups::singleton();
+ $mg->setCache( new WANObjectCache( [ 'cache' => new HashBagOStuff() ] ) );
+ $mg->recache();
+
+ MessageIndex::setInstance( new HashMessageIndex() );
+ MessageIndex::singleton()->rebuild();
+ }
+
+ public function testNormalPage() {
+ $title = Title::newFromText( 'Fréttinga' );
+ $this->assertNotNull( $title, 'Title is valid' );
+ $page = $this->getServiceContainer()->getWikiPageFactory()->newFromTitle( $title );
+ $this->assertNotNull( $page, 'WikiPage is valid' );
+ $translatablePage = TranslatablePage::newFromTitle( $title );
+ $content = ContentHandler::makeContent( 'kissa', $title );
+
+ $page->doUserEditContent(
+ $content,
+ $this->getTestUser()->getUser(),
+ 'Test case'
+ );
+
+ $this->assertNull( $translatablePage->getReadyTag(), 'No ready tag was added' );
+ $this->assertNull( $translatablePage->getMarkedTag(), 'No marked tag was added' );
+ }
+
+ public function testTranslatablePage() {
+ $title = Title::newFromText( 'Fréttinga' );
+ $this->assertNotNull( $title, 'Title is valid' );
+ $page = $this->getServiceContainer()->getWikiPageFactory()->newFromTitle( $title );
+ $this->assertNotNull( $page, 'WikiPage is valid' );
+ $translatablePage = TranslatablePage::newFromTitle( $title );
+
+ $content = ContentHandler::makeContent( '<translate>kissa</translate>', $title );
+ $status = $page->doUserEditContent(
+ $content,
+ $this->getTestUser()->getUser(),
+ 'Test case'
+ );
+ $latest = $status->value['revision-record']->getId();
+
+ $this->assertSame( $latest, $translatablePage->getReadyTag(), 'Ready tag was added' );
+ $this->assertNull( $translatablePage->getMarkedTag(), 'No marked tag was added' );
+ }
+
+ public function testTranslatablePageWithMarked() {
+ $title = Title::newFromText( 'Fréttinga' );
+ $this->assertNotNull( $title, 'Title is valid' );
+ $page = $this->getServiceContainer()->getWikiPageFactory()->newFromTitle( $title );
+ $this->assertNotNull( $page, 'WikiPage is valid' );
+ $translatablePage = TranslatablePage::newFromTitle( $title );
+
+ $content = ContentHandler::makeContent( '<translate>koira</translate>', $title );
+ $status = $page->doUserEditContent(
+ $content,
+ $this->getTestUser()->getUser(),
+ 'Test case'
+ );
+ $latest = $status->value['revision-record']->getId();
+
+ $translatablePage->addMarkedTag( $latest, [ 'foo' ] );
+ $this->assertSame( $latest, $translatablePage->getReadyTag(), 'Ready tag was added' );
+ $this->assertSame( $latest, $translatablePage->getMarkedTag(), 'Marked tag was added' );
+
+ $cascade = false;
+ $user = $this->getTestSysop()->getUser();
+ $page->doUpdateRestrictions(
+ [ 'edit' => 'sysop' ],
+ [],
+ $cascade,
+ 'Test case',
+ $user
+ );
+
+ $newLatest = $latest + 1;
+ $this->assertSame(
+ $newLatest,
+ $translatablePage->getReadyTag(),
+ 'Ready tag was updated after protection'
+ );
+ $this->assertSame(
+ $latest,
+ $translatablePage->getMarkedTag(),
+ 'Marked tag was not updated after protection'
+ );
+
+ $page->doUpdateRestrictions( [], [], $cascade, 'Test case', $user );
+ }
+
+ public function testTranslationPageRestrictions() {
+ $superUser = $this->getTestSysop()->getUser();
+ $title = Title::newFromText( 'Translatable page' );
+ $page = $this->getServiceContainer()->getWikiPageFactory()->newFromTitle( $title );
+ $content = ContentHandler::makeContent( '<translate>Hello</translate>', $title );
+
+ $status = $page->doUserEditContent(
+ $content,
+ $superUser,
+ 'New page'
+ );
+
+ $revisionId = $status->value['revision-record']->getId();
+ $translatablePage = TranslatablePage::newFromRevision( $title, $revisionId );
+ $translatablePage->addMarkedTag( $revisionId );
+ MessageGroups::singleton()->recache();
+
+ $translationPage = Title::newFromText( 'Translatable page/fi' );
+ $pm = MediaWikiServices::getInstance()->getPermissionManager();
+ RenderTranslationPageJob::newJob( $translationPage )->run();
+ $this->assertTrue( $pm->userCan( 'read', $superUser, $translationPage ),
+ 'Users can read existing translation pages' );
+ $this->assertFalse( $pm->userCan( 'edit', $superUser, $translationPage ),
+ 'Users can not edit existing translation pages' );
+
+ $translationPage = Title::newFromText( 'Translatable page/ab' );
+ $this->assertTrue( $pm->userCan( 'read', $superUser, $translationPage ),
+ 'Users can read non-existing translation pages' );
+ $this->assertFalse( $pm->userCan( 'edit', $superUser, $translationPage ),
+ 'Users can not edit non-existing translation pages' );
+ }
+}
diff --git a/Translate/tests/phpunit/tag/TranslatablePageIntegrationTest.php b/Translate/tests/phpunit/tag/TranslatablePageIntegrationTest.php
new file mode 100644
index 00000000..a501f1d2
--- /dev/null
+++ b/Translate/tests/phpunit/tag/TranslatablePageIntegrationTest.php
@@ -0,0 +1,40 @@
+<?php
+declare( strict_types = 1 );
+
+use MediaWiki\Extension\Translate\PageTranslation\TranslatablePage;
+use MediaWiki\MediaWikiServices;
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @covers \TranslatablePage
+ */
+class TranslatablePageIntegrationTest extends MediaWikiIntegrationTestCase {
+ use TranslatablePageTestTrait;
+
+ protected function setUp(): void {
+ parent::setUp();
+
+ $this->setMwGlobals( [
+ 'wgEnablePageTranslation' => true
+ ] );
+ }
+
+ public function testIsSourcePage() {
+ $translatablePage = $this->createMarkedTranslatablePage(
+ 'Test page', 'Testing page', $this->getTestSysop()->getUser()
+ );
+
+ $this->assertTrue(
+ TranslatablePage::isSourcePage( $translatablePage->getTitle() )
+ );
+
+ $translatablePage->unmarkTranslatablePage();
+
+ MediaWikiServices::getInstance()->getMainWANObjectCache()->clearProcessCache();
+
+ $this->assertFalse(
+ TranslatablePage::isSourcePage( $translatablePage->getTitle() )
+ );
+ }
+}
diff --git a/Translate/tests/phpunit/tag/pagetranslation/FailDoubleOpen.ptfile b/Translate/tests/phpunit/tag/pagetranslation/FailDoubleOpen.ptfile
new file mode 100644
index 00000000..0c4008d4
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/FailDoubleOpen.ptfile
@@ -0,0 +1,3 @@
+<translate>
+<translate>
+</translate>
diff --git a/Translate/tests/phpunit/tag/pagetranslation/FailDoubleOpenNowrap.ptfile b/Translate/tests/phpunit/tag/pagetranslation/FailDoubleOpenNowrap.ptfile
new file mode 100644
index 00000000..6810db92
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/FailDoubleOpenNowrap.ptfile
@@ -0,0 +1,3 @@
+<translate nowrap>
+<translate nowrap>
+</translate>
diff --git a/Translate/tests/phpunit/tag/pagetranslation/FailEmptySection.ptfile b/Translate/tests/phpunit/tag/pagetranslation/FailEmptySection.ptfile
new file mode 100644
index 00000000..c31a5e2a
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/FailEmptySection.ptfile
@@ -0,0 +1,4 @@
+<translate>
+<!--T:1-->
+
+</translate>
diff --git a/Translate/tests/phpunit/tag/pagetranslation/FailMultipleSectionMarkers.ptfile b/Translate/tests/phpunit/tag/pagetranslation/FailMultipleSectionMarkers.ptfile
new file mode 100644
index 00000000..11843926
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/FailMultipleSectionMarkers.ptfile
@@ -0,0 +1,5 @@
+<translate>
+<!--T:1-->
+<!--T:2-->
+Lorem ipsum dolor
+</translate>
diff --git a/Translate/tests/phpunit/tag/pagetranslation/FailNotAtomic.ptfile b/Translate/tests/phpunit/tag/pagetranslation/FailNotAtomic.ptfile
new file mode 100644
index 00000000..909c29aa
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/FailNotAtomic.ptfile
@@ -0,0 +1,5 @@
+<div>
+<translate>
+This is not fun!
+</div>
+</translate>
diff --git a/Translate/tests/phpunit/tag/pagetranslation/FailSectionMarkerPlace.ptfile b/Translate/tests/phpunit/tag/pagetranslation/FailSectionMarkerPlace.ptfile
new file mode 100644
index 00000000..2907f48b
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/FailSectionMarkerPlace.ptfile
@@ -0,0 +1,3 @@
+<translate>
+Once upon time <!--T:1--> there was a planet called meow.
+</translate>
diff --git a/Translate/tests/phpunit/tag/pagetranslation/FailTags.ptfile b/Translate/tests/phpunit/tag/pagetranslation/FailTags.ptfile
new file mode 100644
index 00000000..cfee0ed5
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/FailTags.ptfile
@@ -0,0 +1,7 @@
+<translate>
+Dog
+<translate>
+Cat
+</translate>
+A cute rabbit
+</translate>
diff --git a/Translate/tests/phpunit/tag/pagetranslation/FailTags2.ptfile b/Translate/tests/phpunit/tag/pagetranslation/FailTags2.ptfile
new file mode 100644
index 00000000..a15085a6
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/FailTags2.ptfile
@@ -0,0 +1,10 @@
+<translate>
+Dog
+<translate>
+Cat
+</translate>
+A cute rabbit
+<translate>
+Cow
+</translate>
+</translate>
diff --git a/Translate/tests/phpunit/tag/pagetranslation/FailUnclosed.ptfile b/Translate/tests/phpunit/tag/pagetranslation/FailUnclosed.ptfile
new file mode 100644
index 00000000..eb40768b
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/FailUnclosed.ptfile
@@ -0,0 +1,2 @@
+<translate>
+The end is missing! \ No newline at end of file
diff --git a/Translate/tests/phpunit/tag/pagetranslation/HeaderSection.ptfile b/Translate/tests/phpunit/tag/pagetranslation/HeaderSection.ptfile
new file mode 100644
index 00000000..37a70fb1
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/HeaderSection.ptfile
@@ -0,0 +1,7 @@
+<translate>
+== Topic == <!--T:1-->
+Some long text here.
+
+<!--T:2-->
+Another paragraph.
+</translate>
diff --git a/Translate/tests/phpunit/tag/pagetranslation/HeaderSection.ptsource b/Translate/tests/phpunit/tag/pagetranslation/HeaderSection.ptsource
new file mode 100644
index 00000000..37a70fb1
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/HeaderSection.ptsource
@@ -0,0 +1,7 @@
+<translate>
+== Topic == <!--T:1-->
+Some long text here.
+
+<!--T:2-->
+Another paragraph.
+</translate>
diff --git a/Translate/tests/phpunit/tag/pagetranslation/HeaderSection.pttarget b/Translate/tests/phpunit/tag/pagetranslation/HeaderSection.pttarget
new file mode 100644
index 00000000..dcc5e400
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/HeaderSection.pttarget
@@ -0,0 +1,4 @@
+== Topic ==
+Some long text here.
+
+Another paragraph.
diff --git a/Translate/tests/phpunit/tag/pagetranslation/Inline.ptfile b/Translate/tests/phpunit/tag/pagetranslation/Inline.ptfile
new file mode 100644
index 00000000..9ec78b58
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/Inline.ptfile
@@ -0,0 +1 @@
+We had a nice <translate>day</translate> today.
diff --git a/Translate/tests/phpunit/tag/pagetranslation/Inline.ptsource b/Translate/tests/phpunit/tag/pagetranslation/Inline.ptsource
new file mode 100644
index 00000000..78c4146e
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/Inline.ptsource
@@ -0,0 +1 @@
+We had a nice <translate><!--T:-1--> day</translate> today.
diff --git a/Translate/tests/phpunit/tag/pagetranslation/Inline.pttarget b/Translate/tests/phpunit/tag/pagetranslation/Inline.pttarget
new file mode 100644
index 00000000..53135308
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/Inline.pttarget
@@ -0,0 +1 @@
+We had a nice day today.
diff --git a/Translate/tests/phpunit/tag/pagetranslation/LoneHeader.ptfile b/Translate/tests/phpunit/tag/pagetranslation/LoneHeader.ptfile
new file mode 100644
index 00000000..fa999259
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/LoneHeader.ptfile
@@ -0,0 +1,5 @@
+<translate>
+== One ==
+
+A cat sleeps.
+</translate>
diff --git a/Translate/tests/phpunit/tag/pagetranslation/LoneHeader.ptsource b/Translate/tests/phpunit/tag/pagetranslation/LoneHeader.ptsource
new file mode 100644
index 00000000..77f4e00f
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/LoneHeader.ptsource
@@ -0,0 +1,6 @@
+<translate>
+== One == <!--T:-1-->
+
+<!--T:-1-->
+A cat sleeps.
+</translate>
diff --git a/Translate/tests/phpunit/tag/pagetranslation/Nowiki.ptfile b/Translate/tests/phpunit/tag/pagetranslation/Nowiki.ptfile
new file mode 100644
index 00000000..a5b90485
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/Nowiki.ptfile
@@ -0,0 +1,3 @@
+I just want to speak about <nowiki><translate></nowiki>.
+
+<translate>Yes!</translate>
diff --git a/Translate/tests/phpunit/tag/pagetranslation/Nowiki.pttarget b/Translate/tests/phpunit/tag/pagetranslation/Nowiki.pttarget
new file mode 100644
index 00000000..36235dc9
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/Nowiki.pttarget
@@ -0,0 +1,3 @@
+I just want to speak about <nowiki><translate></nowiki>.
+
+Yes!
diff --git a/Translate/tests/phpunit/tag/pagetranslation/NowikiInside.ptfile b/Translate/tests/phpunit/tag/pagetranslation/NowikiInside.ptfile
new file mode 100644
index 00000000..eeea132a
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/NowikiInside.ptfile
@@ -0,0 +1,4 @@
+<translate>
+I just want to speak about <nowiki><translate></nowiki>.
+
+Yes!</translate>
diff --git a/Translate/tests/phpunit/tag/pagetranslation/NowikiInside.pttarget b/Translate/tests/phpunit/tag/pagetranslation/NowikiInside.pttarget
new file mode 100644
index 00000000..36235dc9
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/NowikiInside.pttarget
@@ -0,0 +1,3 @@
+I just want to speak about <nowiki><translate></nowiki>.
+
+Yes!
diff --git a/Translate/tests/phpunit/tag/pagetranslation/NowikiOnly.ptfile b/Translate/tests/phpunit/tag/pagetranslation/NowikiOnly.ptfile
new file mode 100644
index 00000000..93b7e672
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/NowikiOnly.ptfile
@@ -0,0 +1 @@
+<nowiki><translate></nowiki> \ No newline at end of file
diff --git a/Translate/tests/phpunit/tag/pagetranslation/NowikiOnly.pttest b/Translate/tests/phpunit/tag/pagetranslation/NowikiOnly.pttest
new file mode 100644
index 00000000..0923d10e
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/NowikiOnly.pttest
@@ -0,0 +1,5 @@
+<?php
+
+if ( !defined( 'MEDIAWIKI' ) ) die();
+
+$this->assertEmpty( $parserOutput->units(), 'number of sections should be zero' );
diff --git a/Translate/tests/phpunit/tag/pagetranslation/Simple.ptfile b/Translate/tests/phpunit/tag/pagetranslation/Simple.ptfile
new file mode 100644
index 00000000..a591ffcb
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/Simple.ptfile
@@ -0,0 +1,3 @@
+<translate>
+A cat sleeps.
+</translate>
diff --git a/Translate/tests/phpunit/tag/pagetranslation/Simple.ptsource b/Translate/tests/phpunit/tag/pagetranslation/Simple.ptsource
new file mode 100644
index 00000000..b86cf357
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/Simple.ptsource
@@ -0,0 +1,4 @@
+<translate>
+<!--T:-1-->
+A cat sleeps.
+</translate>
diff --git a/Translate/tests/phpunit/tag/pagetranslation/Simple.pttarget b/Translate/tests/phpunit/tag/pagetranslation/Simple.pttarget
new file mode 100644
index 00000000..66ac6bad
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/Simple.pttarget
@@ -0,0 +1 @@
+A cat sleeps.
diff --git a/Translate/tests/phpunit/tag/pagetranslation/Simple.pttest b/Translate/tests/phpunit/tag/pagetranslation/Simple.pttest
new file mode 100644
index 00000000..98e4ed1d
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/Simple.pttest
@@ -0,0 +1,3 @@
+<?php
+
+if ( !defined( 'MEDIAWIKI' ) ) die();
diff --git a/Translate/tests/phpunit/tag/pagetranslation/SimpleWithMarker.ptfile b/Translate/tests/phpunit/tag/pagetranslation/SimpleWithMarker.ptfile
new file mode 100644
index 00000000..bf6b2a99
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/SimpleWithMarker.ptfile
@@ -0,0 +1,4 @@
+<translate>
+<!--T:1-->
+A cat sleeps.
+</translate>
diff --git a/Translate/tests/phpunit/tag/pagetranslation/SimpleWithMarker.pttarget b/Translate/tests/phpunit/tag/pagetranslation/SimpleWithMarker.pttarget
new file mode 100644
index 00000000..66ac6bad
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/SimpleWithMarker.pttarget
@@ -0,0 +1 @@
+A cat sleeps.
diff --git a/Translate/tests/phpunit/tag/pagetranslation/Variables.ptfile b/Translate/tests/phpunit/tag/pagetranslation/Variables.ptfile
new file mode 100644
index 00000000..4f254b77
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/Variables.ptfile
@@ -0,0 +1,6 @@
+Prettig met u kennis te maken.
+
+<translate>
+Today we have {{PLURAL:<tvar|1>666</>|one cat|$1 cats}}. Which like<tvar|2> to eat</>!
+There is a <tvar| }[]#<33|>cat</> $ }[]#<33| here.
+</translate>
diff --git a/Translate/tests/phpunit/tag/pagetranslation/Variables.pttarget b/Translate/tests/phpunit/tag/pagetranslation/Variables.pttarget
new file mode 100644
index 00000000..4bf27198
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/Variables.pttarget
@@ -0,0 +1,4 @@
+Prettig met u kennis te maken.
+
+Today we have {{PLURAL:666|one cat|666 cats}}. Which like to eat!
+There is a cat cat here.
diff --git a/Translate/tests/phpunit/tag/pagetranslation/Whitespace.ptfile b/Translate/tests/phpunit/tag/pagetranslation/Whitespace.ptfile
new file mode 100644
index 00000000..471de069
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/Whitespace.ptfile
@@ -0,0 +1,17 @@
+There is a two new lines after this line.
+
+<translate>
+
+There is a two new lines before and after this line.
+
+</translate>
+
+There is a two new lines before and after this line also.
+
+
+There is three spaces trailing on this line: <translate>
+
+ This line is prefixed with a space, with two trailing spaces </translate>
+
+<translate>line1</translate>
+<translate>line2</translate>
diff --git a/Translate/tests/phpunit/tag/pagetranslation/Whitespace.ptsource b/Translate/tests/phpunit/tag/pagetranslation/Whitespace.ptsource
new file mode 100644
index 00000000..e6773415
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/Whitespace.ptsource
@@ -0,0 +1,19 @@
+There is a two new lines after this line.
+
+<translate>
+
+<!--T:-1-->
+There is a two new lines before and after this line.
+
+</translate>
+
+There is a two new lines before and after this line also.
+
+
+There is three spaces trailing on this line: <translate>
+
+ <!--T:-1-->
+This line is prefixed with a space, with two trailing spaces </translate>
+
+<translate><!--T:-1--> line1</translate>
+<translate><!--T:-1--> line2</translate>
diff --git a/Translate/tests/phpunit/tag/pagetranslation/Whitespace.pttarget b/Translate/tests/phpunit/tag/pagetranslation/Whitespace.pttarget
new file mode 100644
index 00000000..2ee66313
--- /dev/null
+++ b/Translate/tests/phpunit/tag/pagetranslation/Whitespace.pttarget
@@ -0,0 +1,14 @@
+There is a two new lines after this line.
+
+
+There is a two new lines before and after this line.
+
+
+There is a two new lines before and after this line also.
+
+
+There is three spaces trailing on this line:
+ This line is prefixed with a space, with two trailing spaces
+
+line1
+line2
diff --git a/Translate/tests/phpunit/unit/Makefile b/Translate/tests/phpunit/unit/Makefile
new file mode 100644
index 00000000..5197ce76
--- /dev/null
+++ b/Translate/tests/phpunit/unit/Makefile
@@ -0,0 +1,9 @@
+ifndef MW_INSTALL_PATH
+ MW_INSTALL_PATH=../../../../..
+endif
+
+default:
+ @echo "\033[0;33m>>> >>> >>> >>> >>> >>> >>> >>> \033[0;30;46m Run unit-tests \033[0m"
+ @php ${MW_INSTALL_PATH}/vendor/bin/phpunit -c ${MW_INSTALL_PATH}/phpunit.xml.dist .
+ @echo ""
+
diff --git a/Translate/tests/phpunit/unit/MessageBundleTranslation/MessageBundleContentTest.php b/Translate/tests/phpunit/unit/MessageBundleTranslation/MessageBundleContentTest.php
new file mode 100644
index 00000000..228046e5
--- /dev/null
+++ b/Translate/tests/phpunit/unit/MessageBundleTranslation/MessageBundleContentTest.php
@@ -0,0 +1,236 @@
+<?php
+declare( strict_types = 1 );
+
+use MediaWiki\Extension\Translate\MessageBundleTranslation\MalformedBundle;
+use MediaWiki\Extension\Translate\MessageBundleTranslation\MessageBundleContent;
+use MediaWiki\Extension\Translate\MessageBundleTranslation\MessageBundleMetadata;
+
+/** @coversDefaultClass \MediaWiki\Extension\Translate\MessageBundleTranslation\MessageBundleContent */
+class MessageBundleContentTest extends MediaWikiUnitTestCase {
+ /**
+ * @dataProvider provideJsonStructures
+ * @dataProvider provideValidJsonStructure
+ * @covers ::isValid
+ */
+ public function testIsValid( string $json, bool $isValid ): void {
+ $content = new MessageBundleContent( $json );
+ $this->assertEquals( $isValid, $content->isValid() );
+ }
+
+ /**
+ * @dataProvider provideJsonStructures
+ * @covers ::validate
+ */
+ public function testValidate( string $json, bool $isValid, ?string $exceptionMessage ): void {
+ $content = new MessageBundleContent( $json );
+
+ if ( $exceptionMessage ) {
+ $this->expectException( MalformedBundle::class );
+ $this->expectExceptionMessageMatches( '/' . $exceptionMessage . '/i' );
+ }
+ $content->validate();
+ }
+
+ public function provideJsonStructures() {
+ // Message validation
+ yield [
+ json_encode( [
+ '@invalid' => 'hello',
+ '@metadata' => [
+ 'priorityLanguages' => []
+ ],
+ 'k1' => 'a',
+ 'k2' => 'b'
+ ] ),
+ false,
+ 'key-invalid-characters'
+ ];
+
+ yield [
+ json_encode( [
+ 'k1' => [],
+ 'k2' => 'b'
+ ] ),
+ false,
+ 'error-invalid-value'
+ ];
+
+ yield [
+ json_encode( [
+ '' => 'a',
+ 'k2' => 'b'
+ ] ),
+ false,
+ 'error-key-empty'
+ ];
+
+ yield [
+ json_encode( [
+ 'k1' => '',
+ 'k2' => 'b'
+ ] ),
+ false,
+ 'error-empty-value'
+ ];
+
+ $data = [ 'k2' => 'b' ];
+ $data[ str_repeat( 'abcdef', 20 ) ] = 'a';
+ yield [ json_encode( $data ), false, 'key-too-long' ];
+
+ // Metadata validation
+ yield [
+ json_encode(
+ [
+ '@metadata' => 'hello',
+ 'k1' => 'a',
+ 'k2' => 'b'
+ ]
+ ),
+ false,
+ 'error-metadata-type'
+ ];
+
+ yield [
+ json_encode( [
+ '@metadata' => [
+ 'invalid' => true
+ ],
+ 'k1' => 'a',
+ 'k2' => 'b',
+
+ ] ),
+ false,
+ 'error-invalid-metadata'
+ ];
+
+ yield [
+ json_encode( [
+ '@metadata' => [
+ 'sourceLanguage' => true
+ ],
+ 'k1' => 'a',
+ 'k2' => 'b',
+
+ ] ),
+ false,
+ 'error-invalid-sourcelanguage'
+ ];
+
+ yield [
+ json_encode( [
+ '@metadata' => [
+ 'priorityLanguages' => true
+ ],
+ 'k1' => 'a',
+ 'k2' => 'b',
+
+ ] ),
+ false,
+ 'error-invalid-prioritylanguage'
+ ];
+
+ yield [
+ json_encode( [
+ '@metadata' => [
+ 'description' => true
+ ],
+ 'k1' => 'a',
+ 'k2' => 'b',
+ ] ),
+ false,
+ 'translate-messagebundle-error-invalid-description'
+ ];
+ }
+
+ public function provideValidJsonStructure() {
+ // Valid value
+ yield [
+ json_encode( [
+ '@metadata' => [
+ 'sourceLanguage' => 'fr',
+ 'priorityLanguages' => [ 'en', 'es' ],
+ 'description' => 'Hello World!'
+ ],
+ 'k1' => 'a',
+ 'k2' => 'b',
+ ] ),
+ true
+ ];
+ }
+
+ /** @covers ::getMessages */
+ public function testGetMessages(): void {
+ $json = json_encode(
+ [
+ '@metadata' => [
+ 'sourceLanguage' => 'fr',
+ 'priorityLanguages' => [ 'en', 'es' ]
+ ],
+ 'k1' => 'a',
+ 'k2' => 'b',
+ ]
+ );
+
+ $content = new MessageBundleContent( $json );
+
+ $this->assertArrayEquals(
+ [
+ 'k1' => 'a',
+ 'k2' => 'b'
+ ],
+ $content->getMessages()
+ );
+ }
+
+ /**
+ * @dataProvider provideGetMetadata
+ * @covers ::getMetadata
+ */
+ public function testGetMetadata(
+ string $json,
+ ?string $sourceLanguageCode,
+ ?array $priorityLanguageCodes,
+ bool $allowPriorityLanguagesOnly
+ ): void {
+ $content = new MessageBundleContent( $json );
+ $metadata = $content->getMetadata();
+
+ $this->assertInstanceOf( MessageBundleMetadata::class, $metadata );
+ $this->assertEquals( $sourceLanguageCode, $metadata->getSourceLanguageCode() );
+ $this->assertEquals( $priorityLanguageCodes, $metadata->getPriorityLanguages() );
+ $this->assertEquals( $allowPriorityLanguagesOnly, $metadata->areOnlyPriorityLanguagesAllowed() );
+ }
+
+ public function provideGetMetadata() {
+ yield [
+ json_encode(
+ [
+ '@metadata' => [],
+ 'k1' => '1',
+ 'k2' => '2'
+ ]
+ ),
+ null,
+ null,
+ false
+ ];
+
+ yield [
+ json_encode(
+ [
+ '@metadata' => [
+ 'sourceLanguage' => 'fr',
+ 'priorityLanguages' => [ 'en', 'es' ],
+ 'allowOnlyPriorityLanguages' => true
+ ],
+ 'k1' => '1',
+ 'k2' => '2'
+ ]
+ ),
+ 'fr',
+ [ 'en', 'es' ],
+ true
+ ];
+ }
+
+}
diff --git a/Translate/tests/phpunit/unit/MessageGroupProcessing/TranslatableBundleStatusStoreTest.php b/Translate/tests/phpunit/unit/MessageGroupProcessing/TranslatableBundleStatusStoreTest.php
new file mode 100644
index 00000000..bf05bea7
--- /dev/null
+++ b/Translate/tests/phpunit/unit/MessageGroupProcessing/TranslatableBundleStatusStoreTest.php
@@ -0,0 +1,73 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageGroupProcessing;
+
+use Collation;
+use MediaWiki\Extension\Translate\PageTranslation\TranslatablePage;
+use MediaWiki\Extension\Translate\PageTranslation\TranslatablePageStatus;
+use MediaWikiUnitTestCase;
+use Title;
+use Wikimedia\Rdbms\Database;
+use Wikimedia\Rdbms\IMaintainableDatabase;
+
+/**
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\MessageGroupProcessing\TranslatableBundleStatusStore
+ */
+class TranslatableBundleStatusStoreTest extends MediaWikiUnitTestCase {
+ public function testSetStatus() {
+ $prefixedDbKey = 'TitleKey';
+ $db = $this->getDatabaseMock();
+ $collation = $this->getCollationMock( $prefixedDbKey );
+ $dbMaintenance = $this->getMaintenanceDatabaseMock();
+ $title = $this->getTitleMock( $prefixedDbKey );
+ $status = new TranslatablePageStatus( TranslatablePageStatus::ACTIVE );
+
+ $bundleStatusStore = new TranslatableBundleStatusStore( $db, $collation, $dbMaintenance );
+ $bundleStatusStore->setStatus( $title, $status, TranslatablePage::class );
+ }
+
+ private function getDatabaseMock() {
+ // Set status should replace the record if it exists, or insert
+ $mock = $this->createMock( Database::class );
+ $mock->expects( $this->once() )
+ ->method( 'replace' );
+
+ return $mock;
+ }
+
+ private function getTitleMock( string $prefixedDbKey ) {
+ // Title::getPrefixedDBKey should be called to perform sorting
+ $mock = $this->createMock( Title::class );
+ $mock->expects( $this->once() )
+ ->method( 'getPrefixedDBkey' )
+ ->willReturn( $prefixedDbKey );
+
+ $mock->method( 'getArticleID' )
+ ->willReturn( 1 );
+
+ return $mock;
+ }
+
+ private function getCollationMock( string $titlePrefixedDbKey ) {
+ // Collation::getSortKey should be used to sort the records
+ $mock = $this->createMock( Collation::class );
+ $mock->expects( $this->once() )
+ ->method( 'getSortKey' )
+ ->with( $titlePrefixedDbKey )
+ ->willReturn( $titlePrefixedDbKey );
+
+ return $mock;
+ }
+
+ private function getMaintenanceDatabaseMock() {
+ $mock = $this->createMock( IMaintainableDatabase::class );
+ $mock->expects( $this->once() )
+ ->method( 'tableExists' )
+ ->willReturn( true );
+
+ return $mock;
+ }
+}
diff --git a/Translate/tests/phpunit/unit/MessageProcessing/ArrayFlattenerTest.php b/Translate/tests/phpunit/unit/MessageProcessing/ArrayFlattenerTest.php
new file mode 100644
index 00000000..463f67fd
--- /dev/null
+++ b/Translate/tests/phpunit/unit/MessageProcessing/ArrayFlattenerTest.php
@@ -0,0 +1,273 @@
+<?php
+
+namespace MediaWiki\Extension\Translate\MessageProcessing;
+
+use MediaWikiUnitTestCase;
+use MWException;
+
+/** @coversDefaultClass \MediaWiki\Extension\Translate\MessageProcessing\ArrayFlattener */
+class ArrayFlattenerTest extends MediaWikiUnitTestCase {
+ /**
+ * @dataProvider provideTestFlatten
+ * @covers ::flatten
+ */
+ public function testFlatten( $sep, $input, $expected ) {
+ $flattener = new ArrayFlattener( $sep );
+ $output = $flattener->flatten( $input );
+ $this->assertEquals( $expected, $output );
+ }
+
+ /**
+ * @dataProvider provideTestFlatten
+ * @covers ::unflatten
+ */
+ public function testUnflatten( $sep, $expected, $input ) {
+ $flattener = new ArrayFlattener( $sep );
+ $output = $flattener->unflatten( $input );
+ $this->assertEquals( $expected, $output );
+ }
+
+ /**
+ * @dataProvider provideTestCLDRPlurals
+ * @covers ::flattenCLDRPlurals
+ */
+ public function testFlattenCLDRPlurals( $sep, $input, $expected ) {
+ $flattener = new ArrayFlattener( $sep, true );
+ $output = $flattener->flatten( $input );
+ $this->assertEquals( $expected, $output );
+ }
+
+ /**
+ * @dataProvider provideTestCLDRPlurals
+ * @dataProvider provideUnflattenCLDRPlurals
+ * @covers ::unflattenCLDRPlurals
+ */
+ public function testUnflattenCLDRPlurals( $sep, $expected, $input ) {
+ $flattener = new ArrayFlattener( $sep, true );
+ $output = $flattener->unflatten( $input );
+ $this->assertEquals( $expected, $output );
+ }
+
+ /**
+ * @dataProvider provideTestMixedCLDRPlurals
+ * @covers ::flattenCLDRPlurals
+ */
+ public function testFlattenMixedCLDRPlurals( $input ) {
+ $flattener = new ArrayFlattener( '.', true );
+ $this->expectException( MWException::class );
+ $flattener->flatten( $input );
+ }
+
+ public static function provideTestFlatten() {
+ yield [
+ '.',
+ [ 'a' => 1 ],
+ [ 'a' => 1 ],
+ ];
+
+ yield [
+ '.',
+ [ 'a' => [ 'b' => [ 'c' => 1, 'd' => 2 ] ] ],
+ [ 'a.b.c' => 1, 'a.b.d' => 2 ],
+ ];
+
+ // By default, CLDR plural keywords should be treated like any other key
+ yield [
+ '/',
+ [ 'number' => [ 'one' => '1', 'other' => '999' ] ],
+ [ 'number/one' => '1', 'number/other' => '999' ]
+ ];
+ }
+
+ public static function provideTestCLDRPlurals() {
+ // We include some non-plural data to ensure it is processed correctly
+ yield [
+ '/',
+ [
+ 'cat' => 'An amount of cats',
+ 'mice' => [
+ 'Frankie',
+ 'Benjy'
+ ],
+ 'dog or dogs' => [
+ 'one' => 'One dog',
+ 'two' => 'Two doggies',
+ 'other' => 'Some dogs'
+ ],
+ 'hello' => [
+ 'world' => 'hey',
+ 'other' => 'hello world'
+ ]
+ ],
+ [
+ 'cat' => 'An amount of cats',
+ 'mice/0' => 'Frankie',
+ 'mice/1' => 'Benjy',
+ 'dog or dogs' => '{{PLURAL|one=One dog|two=Two doggies|Some dogs}}',
+ 'hello/world' => 'hey',
+ 'hello/other' => 'hello world'
+ ],
+ ];
+
+ yield [
+ '/',
+ [
+ 'dog or dogs' => [
+ 'zero' => 'No dogs',
+ 'one' => 'One dog',
+ 'two' => 'A couple doggies',
+ 'few' => 'A few dogs',
+ 'many' => '%1 dogs',
+ 'other' => 'Some dogs'
+ ]
+ ],
+ [
+ 'dog or dogs' => '{{PLURAL|zero=No dogs|one=One dog|two=A couple doggies|' .
+ 'few=A few dogs|many=%1 dogs|Some dogs}}'
+ ],
+ ];
+
+ yield [
+ '/',
+ [
+ 'math is hard' => [
+ 'one' => 'a=400',
+ 'other' => 'a=999'
+ ]
+ ],
+ [ 'math is hard' => '{{PLURAL|one=a=400|a=999}}' ],
+ ];
+ }
+
+ /**
+ * Separate input due to bug Phab:T233402.
+ * TODO: Remove and add to provideTestCLDRPlurals itself once the
+ * above bug is fixed.
+ */
+ public static function provideUnflattenCLDRPlurals() {
+ yield [
+ '/',
+ [
+ 'collect' => [
+ 'one' => '%{count} collection',
+ 'other' => '%{count} collection'
+ ]
+ ],
+ [ 'collect' => '%{count} collection{{PLURAL|one=|}}' ]
+ ];
+
+ yield [
+ '/',
+ [
+ 'collect many' => [
+ 'one' => '%{count} collection',
+ 'other' => '%{count} collections'
+ ]
+ ],
+ [ 'collect many' => '%{count} collection{{PLURAL|one=|s}}' ]
+ ];
+ }
+
+ // Separate provider because the input throws an exception
+ public static function provideTestMixedCLDRPlurals() {
+ yield [
+ [
+ 'dog or dogs' => [
+ 'one' => 'One dog',
+ 'two' => 'Two doggies',
+ 'other' => 'Some dogs',
+ 'Pluto' => 'A specific dog'
+ ]
+ ]
+ ];
+
+ yield [
+ [
+ 'dog or dogs' => [
+ 'Pluto' => 'A specific dog',
+ 'one' => 'One dog',
+ 'two' => 'Two doggies',
+ 'other' => 'Some dogs',
+ ]
+ ]
+ ];
+ }
+
+ /**
+ * @dataProvider provideMatchingValues
+ * @covers ::compareContent
+ */
+ public function testCompareTrue( $input1, $input2 ) {
+ $flattener = new ArrayFlattener( '.', true );
+
+ $this->assertTrue(
+ $flattener->compareContent( $input1, $input2 )
+ );
+ }
+
+ /**
+ * @dataProvider provideNonMatchingValues
+ * @covers ::compareContent
+ */
+ public function testCompareFalse( $input1, $input2 ) {
+ $flattener = new ArrayFlattener( '.', true );
+
+ $this->assertfalse(
+ $flattener->compareContent( $input1, $input2 )
+ );
+ }
+
+ public static function provideMatchingValues() {
+ // We include some non-plural data to ensure it is processed correctly
+ yield [
+ 'a',
+ 'a'
+ ];
+
+ yield [
+ '{{PLURAL|one=cat|cats}}',
+ '{{PLURAL|one=cat|cats}}',
+ ];
+
+ yield [
+ 'Give me {{PLURAL|one=a cat|cats}}',
+ '{{PLURAL|one=Give me a cat|Give me cats}}',
+ ];
+
+ // Order should not matter
+ yield [
+ '{{PLURAL|one=Give me a cat|Give me cats}}',
+ 'Give me {{PLURAL|one=a cat|cats}}',
+ ];
+
+ // Multiple inlines
+ yield [
+ 'Test {{PLURAL|one=one|other}} and {{PLURAL|one=one|other}} and {{PLURAL|one=one|other}}!',
+ '{{PLURAL|one=Test one and one and one|Test other and other and other}}!',
+ ];
+
+ // Lots of keys
+ yield [
+ 'Is {{PLURAL|zero=zero|one=one|two=two|few=few|many=many|other}}',
+ '{{PLURAL|zero=Is zero|one=Is one|two=Is two|few=Is few|many=Is many|Is other}}',
+ ];
+ }
+
+ public static function provideNonMatchingValues() {
+ yield [
+ 'a',
+ 'b'
+ ];
+
+ yield [
+ '{{PLURAL|one=cat|cats}}',
+ '{{PLURAL|one=dog|dogs}}',
+ ];
+
+ // Different set of keys
+ yield [
+ 'Is {{PLURAL|zero=zero|one=one|two=two|few=few|other}}',
+ '{{PLURAL|zero=Is zero|two=Is two|few=Is few|many=Is many|Is other}}',
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/unit/PageTranslation/ParserOutputTest.php b/Translate/tests/phpunit/unit/PageTranslation/ParserOutputTest.php
new file mode 100644
index 00000000..9cad2b5c
--- /dev/null
+++ b/Translate/tests/phpunit/unit/PageTranslation/ParserOutputTest.php
@@ -0,0 +1,100 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use InvalidArgumentException;
+use Language;
+use MediaWikiUnitTestCase;
+use Parser;
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\PageTranslation\ParserOutput
+ */
+class ParserOutputTest extends MediaWikiUnitTestCase {
+ public function testConstructor() {
+ $actual = new ParserOutput( '', [], [] );
+ $this->assertInstanceOf( ParserOutput::class, $actual );
+ }
+
+ public function testConstructorFail() {
+ $this->expectException( InvalidArgumentException::class );
+ $actual = new ParserOutput( '', [ (object)[] ], [] );
+ $this->assertInstanceOf( ParserOutput::class, $actual );
+ }
+
+ public function testConstructorFail2() {
+ $this->expectException( InvalidArgumentException::class );
+ $actual = new ParserOutput( '', [], [ (object)[] ] );
+ $this->assertInstanceOf( ParserOutput::class, $actual );
+ }
+
+ public function testSourcePageTemplate() {
+ $output = new ParserOutput(
+ 'A<0>B',
+ [ '<0>' => new Section( '<translate>', '<1>', '</translate>' ) ],
+ []
+ );
+
+ $this->assertSame( 'A<translate><1></translate>B', $output->sourcePageTemplate() );
+ }
+
+ public function testTranslationPageTemplate() {
+ $output = new ParserOutput(
+ 'A<0>B',
+ [ '<0>' => new Section( '<translate>', '<1>', '</translate>' ) ],
+ []
+ );
+
+ $this->assertSame( 'A<1>B', $output->translationPageTemplate() );
+ }
+
+ public function testUnits() {
+ $units = [];
+ $units['<1>'] = new TranslationUnit( '' );
+
+ $output = new ParserOutput(
+ 'A<0>B',
+ [ '<0>' => new Section( '<translate>', '<1>', '</translate>' ) ],
+ $units
+ );
+
+ $this->assertSame( $units, $output->units() );
+ }
+
+ public function testSourcePageTextForRendering() {
+ $units = [];
+ $units['<1>'] = new TranslationUnit( 'Hello' );
+
+ $output = new ParserOutput(
+ 'A<0>B',
+ [ '<0>' => new Section( '<translate>', '<1>', '</translate>' ) ],
+ $units
+ );
+
+ $language = $this->createStub( Language::class );
+ $parser = $this->createStub( Parser::class );
+ $language->method( 'getHtmlCode' )
+ ->willReturn( 'en-GB' );
+ $language->method( 'getCode' )
+ ->willReturn( 'en-GB' );
+
+ $this->assertSame( 'AHelloB', $output->sourcePageTextForRendering( $language ) );
+ }
+
+ public function testSourcePageTextForSaving() {
+ $units = [];
+ $units['<1>'] = new TranslationUnit( 'Hello', 'abc' );
+ $units['<1>']->setIsInline( true );
+
+ $output = new ParserOutput(
+ 'A<0>B',
+ [ '<0>' => new Section( '<translate>', '<1>', '</translate>' ) ],
+ $units
+ );
+
+ $this->assertSame( 'A<translate><!--T:abc--> Hello</translate>B', $output->sourcePageTextForSaving() );
+ }
+}
diff --git a/Translate/tests/phpunit/unit/PageTranslation/SectionTest.php b/Translate/tests/phpunit/unit/PageTranslation/SectionTest.php
new file mode 100644
index 00000000..1cfcb5f1
--- /dev/null
+++ b/Translate/tests/phpunit/unit/PageTranslation/SectionTest.php
@@ -0,0 +1,23 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use MediaWikiUnitTestCase;
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\PageTranslation\Section
+ */
+class SectionTest extends MediaWikiUnitTestCase {
+ public function test() {
+ $section = new Section( '<translate>', '2045903458', '</translate>' );
+ $this->assertSame( '2045903458', $section->contents() );
+ $this->assertSame( '<translate>2045903458</translate>', $section->wrappedContents() );
+
+ $section = new Section( '<translate>', "\n\n<0>\n\n", '</translate>' );
+ $this->assertSame( "\n<0>\n", $section->contents() );
+ $this->assertSame( "<translate>\n\n<0>\n\n</translate>", $section->wrappedContents() );
+ }
+}
diff --git a/Translate/tests/phpunit/unit/PageTranslation/TranslatablePageInsertablesSuggesterTest.php b/Translate/tests/phpunit/unit/PageTranslation/TranslatablePageInsertablesSuggesterTest.php
new file mode 100644
index 00000000..fbf36125
--- /dev/null
+++ b/Translate/tests/phpunit/unit/PageTranslation/TranslatablePageInsertablesSuggesterTest.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use MediaWiki\Extension\Translate\TranslatorInterface\Insertable\Insertable;
+use MediaWikiUnitTestCase;
+
+/** @covers \MediaWiki\Extension\Translate\PageTranslation\TranslatablePageInsertablesSuggester */
+class TranslatablePageInsertablesSuggesterTest extends MediaWikiUnitTestCase {
+ /** @dataProvider getInsertablesProvider */
+ public function testGetInsertables( $input, $expected ) {
+ $suggester = new TranslatablePageInsertablesSuggester();
+ $this->assertEquals( $expected, $suggester->getInsertables( $input ) );
+ }
+
+ public function getInsertablesProvider() {
+ return [
+ [
+ 'Hi $1, I am $myname $myLastName.',
+ [
+ new Insertable( '$1', '$1', '' ),
+ new Insertable( '$myname', '$myname', '' ),
+ new Insertable( '$myLastName', '$myLastName', '' ),
+ ]
+ ],
+ [
+ 'Insertables can $have-hyphens, $number9 and $under_scores',
+ [
+ new Insertable( '$have-hyphens', '$have-hyphens', '' ),
+ new Insertable( '$number9', '$number9', '' ),
+ new Insertable( '$under_scores', '$under_scores', '' ),
+ ]
+ ],
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/unit/PageTranslation/TranslatablePageParserTest.php b/Translate/tests/phpunit/unit/PageTranslation/TranslatablePageParserTest.php
new file mode 100644
index 00000000..6f70e237
--- /dev/null
+++ b/Translate/tests/phpunit/unit/PageTranslation/TranslatablePageParserTest.php
@@ -0,0 +1,312 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use MediaWiki\Extension\Translate\Utilities\ParsingPlaceholderFactory;
+use MediaWikiUnitTestCase;
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\PageTranslation\TranslatablePageParser
+ */
+class TranslatablePageParserTest extends MediaWikiUnitTestCase {
+ /** @dataProvider provideTestContainsMarkup */
+ public function testContainsMarkup( string $input, bool $expected ) {
+ $parser = new TranslatablePageParser( new ParsingPlaceholderFactory() );
+ $this->assertSame( $expected, $parser->containsMarkup( $input ) );
+ }
+
+ public function provideTestContainsMarkup() {
+ yield [ 'Plain page', false ];
+
+ yield [ '<languages/>', false ];
+
+ yield [ '<translate>Board, Run!</translate>', true ];
+
+ yield [ '<translate nowrap>Board, Run!</translate>', true ];
+
+ yield [ '<translate unknown="attributes">Board, Run!</translate>', true ];
+
+ yield [ '</translate>', true ];
+
+ yield [ '<nowiki><translate></nowiki>', false ];
+ }
+
+ /** @dataProvider provideTestCleanupTags */
+ public function testCleanupTags( string $input, string $expected ) {
+ $parser = new TranslatablePageParser( new ParsingPlaceholderFactory() );
+ $this->assertSame( $expected, $parser->cleanupTags( $input ) );
+ }
+
+ public function provideTestCleanupTags() {
+ yield 'Unbalanced tag in a section preview' => [
+ "== Hello ==\n</translate>",
+ '== Hello ==',
+ ];
+
+ yield 'Unbalanced tags, no whitespace' => [
+ "</translate><translate>",
+ '',
+ ];
+
+ yield 'Balanced tags, non-removable whitespace' => [
+ "1\n2<translate>3\n4</translate>5\n6",
+ "1\n23\n45\n6",
+ ];
+
+ yield 'Balanced tags, removable whitespace' => [
+ "1<translate>\n\n</translate>2",
+ '12',
+ ];
+
+ yield 'Old style translation variable tag is collapsed' => [
+ '[[<tvar|wmf>Special:MyLanguage/Wikimedia Foundation</>|Wikimedia Foundation]].',
+ '[[Special:MyLanguage/Wikimedia Foundation|Wikimedia Foundation]].',
+ ];
+
+ yield 'Translation variable tag is collapsed' => [
+ '[[<tvar name=wmf>Special:MyLanguage/Wikimedia Foundation</tvar>|Wikimedia Foundation]].',
+ '[[Special:MyLanguage/Wikimedia Foundation|Wikimedia Foundation]].',
+ ];
+
+ yield 'Tag inside a nowiki is retained' => [
+ 'You can use the <nowiki><translate></nowiki> tag.',
+ 'You can use the <nowiki><translate></nowiki> tag.',
+ ];
+
+ yield 'Broken tag is retained' => [
+ 'What if I <translate and </translate>.',
+ 'What if I <translate and .',
+ ];
+
+ yield 'Tag with nowrap is removed' => [
+ '<abbr title="<translate nowrap>Careful unselfish true engineer</translate>">CUTE</abbr>',
+ '<abbr title="Careful unselfish true engineer">CUTE</abbr>',
+ ];
+
+ yield 'No content to remove' => [
+ 'Plain page',
+ 'Plain page',
+ ];
+
+ yield 'Language tag should not be removed by this method' => [
+ '<languages/>',
+ '<languages/>',
+ ];
+
+ yield 'Unclosed tag is removed' => [
+ '<translate>No worries, I will try to remember to close this tag',
+ 'No worries, I will try to remember to close this tag',
+
+ ];
+
+ yield 'Complex old translation variable syntax is parsed and replaced with contents' => [
+ '<translate nowrap>I have <tvar|!><:D></></translate>!',
+ 'I have <:D>!',
+ ];
+
+ yield 'Complex translation variable syntax is parsed and replaced with contents' => [
+ '<translate nowrap>I have <tvar name="--$"><:D></tvar></translate>!',
+ 'I have <:D>!',
+ ];
+
+ yield 'No extra newlines is added' => [
+ 'A<translate>B<translate>C</translate>D</translate>E',
+ 'ABCDE',
+ ];
+
+ yield 'Reasonable amount of newlines is stripped' => [
+ "A\n<translate>\n\nB</translate>\nC\n<translate>D\n\n\n\n</translate>E",
+ "A\n\nB\nC\nD\n\n\nE",
+
+ ];
+
+ yield 'Section markers are removed from headings' => [
+ "<translate>\n== Head of the header == <!--T:1-->\n</translate>",
+ "== Head of the header ==",
+ ];
+
+ yield 'Section markers are removed, but not other text' => [
+ ' <!--T:10--> text <!--T:11--> more text <!--T:12--> even more',
+ ' text more text even more',
+ ];
+ }
+
+ /** @dataProvider provideTestParse */
+ public function testParse(
+ string $input,
+ string $expectedTranslationTemplate,
+ string $expectedSourceTemplate,
+ array $expectedUnits
+ ) {
+ $parser = new TranslatablePageParser( new TestingParsingPlaceholderFactory() );
+ $output = $parser->parse( $input );
+ $this->assertSame( $expectedTranslationTemplate, $output->translationPageTemplate() );
+ $this->assertSame( $expectedSourceTemplate, $output->sourcePageTemplate() );
+ $this->assertEquals( $expectedUnits, $output->units() );
+ }
+
+ public function provideTestParse() {
+ // Test case 1 //
+ $s1 = new TranslationUnit( '== Unit tests ==' );
+ $s2 = new TranslationUnit( 'Introduction to unit tests.' );
+ $s3 = new TranslationUnit( 'They are fun.' );
+
+ $s4 = new TranslationUnit( 'Smilie' );
+ $s4->setCanWrap( false );
+ $s4->setIsInline( true );
+
+ yield [
+ <<<INPUT
+<languages/>
+<translate>
+== Unit tests ==
+
+Introduction to unit tests.
+
+They are fun.
+</translate>
+
+<abbr title="<translate nowrap>Smilie</translate>">:)</abbr>
+INPUT
+ , <<<TRANSLATION_TEMPLATE
+<languages/>
+<1>
+
+<2>
+
+<3>
+
+<abbr title="<5>">:)</abbr>
+TRANSLATION_TEMPLATE
+ , <<<SOURCE_TEMPLATE
+<languages/>
+<translate>
+<1>
+
+<2>
+
+<3>
+</translate>
+
+<abbr title="<translate nowrap><5></translate>">:)</abbr>
+SOURCE_TEMPLATE
+ ,
+ [
+ '<1>' => $s1,
+ '<2>' => $s2,
+ '<3>' => $s3,
+ '<5>' => $s4,
+ ]
+ ];
+
+ // Test case 2 //
+ $s1 = new TranslationUnit( '== Unit tests ==', '11' );
+ $s2 = new TranslationUnit( 'Introduction to unit tests.', '22' );
+ $s3 = new TranslationUnit( 'They are fun.', '33' );
+
+ $s4 = new TranslationUnit( 'Smilie', '44' );
+ $s4->setCanWrap( false );
+ $s4->setIsInline( true );
+
+ yield [
+ <<<INPUT
+<languages/>
+<translate>
+== Unit tests == <!--T:11-->
+
+<!--T:22-->
+Introduction to unit tests.
+
+<!--T:33-->
+They are fun.
+</translate>
+
+<abbr title="<translate nowrap><!--T:44--> Smilie</translate>">:)</abbr>
+INPUT
+ , <<<TRANSLATION_TEMPLATE
+<languages/>
+<1>
+
+<2>
+
+<3>
+
+<abbr title="<5>">:)</abbr>
+TRANSLATION_TEMPLATE
+ , <<<SOURCE_TEMPLATE
+<languages/>
+<translate>
+<1>
+
+<2>
+
+<3>
+</translate>
+
+<abbr title="<translate nowrap><5></translate>">:)</abbr>
+SOURCE_TEMPLATE
+ ,
+ [
+ '<1>' => $s1,
+ '<2>' => $s2,
+ '<3>' => $s3,
+ '<5>' => $s4,
+ ]
+ ];
+ }
+
+ /** @dataProvider provideTestParseSection */
+ public function testParseSection(
+ string $input,
+ string $expectedTemplate,
+ array $expectedUnits,
+ string $comment
+ ) {
+ $parser = new TranslatablePageParser( new TestingParsingPlaceholderFactory() );
+ $canWrap = true;
+ $result = $parser->parseSection( $input, $canWrap );
+ $this->assertSame( $expectedTemplate, $result['template'], $comment );
+ $this->assertEquals( $expectedUnits, $result['sections'], $comment );
+ }
+
+ public static function provideTestParseSection() {
+ $u = new TranslationUnit( 'Hello' );
+ $u->setIsInline( true );
+ yield [
+ 'Hello',
+ '<0>',
+ [ '<0>' => $u ],
+ 'No surrounding whitespace',
+ ];
+
+ $u = new TranslationUnit( 'Hello' );
+ yield [
+ "\nHello",
+ "\n<0>",
+ [ '<0>' => $u ],
+ 'With surrounding whitespace',
+ ];
+
+ $u0 = new TranslationUnit( 'Hello world' );
+ $u1 = new TranslationUnit( 'Bunny' );
+ yield [
+ "\nHello world\n\nBunny\n",
+ "\n<0>\n\n<1>\n",
+ [ '<0>' => $u0, '<1>' => $u1 ],
+ 'Splitting at one empty line',
+ ];
+
+ $u0 = new TranslationUnit( 'First' );
+ $u1 = new TranslationUnit( 'Second' );
+ $u2 = new TranslationUnit( 'Third' );
+ yield [
+ "First\n\n\n\n\nSecond\n\nThird",
+ "<0>\n\n\n\n\n<1>\n\n<2>",
+ [ '<0>' => $u0, '<1>' => $u1, '<2>' => $u2 ],
+ 'Splitting with multiple empty lines',
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/unit/PageTranslation/TranslatablePageStoreTest.php b/Translate/tests/phpunit/unit/PageTranslation/TranslatablePageStoreTest.php
new file mode 100644
index 00000000..991771f2
--- /dev/null
+++ b/Translate/tests/phpunit/unit/PageTranslation/TranslatablePageStoreTest.php
@@ -0,0 +1,131 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\MessageGroupProcessing;
+
+use JobQueueGroup;
+use MediaWiki\Extension\Translate\PageTranslation\TranslatablePageStatus;
+use MediaWikiUnitTestCase;
+use MessageIndex;
+use Title;
+use Wikimedia\Rdbms\LoadBalancer;
+
+/**
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\MessageGroupProcessing\TranslatablePageStore
+ */
+class TranslatablePageStoreTest extends MediaWikiUnitTestCase {
+ /** @dataProvider provideUpdateStatus */
+ public function testUpdateStatus(
+ ?int $readyRevisionId,
+ ?int $markRevisionId,
+ int $latestRevisionId,
+ ?int $expectedStatus
+ ): void {
+ $shouldSetStatusBeCalled = (bool)$expectedStatus;
+ $title = $this->getTitleStub( $latestRevisionId );
+ $tpPageStore = new TranslatablePageStore(
+ $this->createStub( MessageIndex::class ),
+ $this->createStub( JobQueueGroup::class ),
+ $this->getRevTagStoreStub( $readyRevisionId, $markRevisionId ),
+ $this->createStub( LoadBalancer::class ),
+ $this->getTranslatableBundleStatusStoreMock( $shouldSetStatusBeCalled, $title, $expectedStatus )
+ );
+
+ $status = $tpPageStore->updateStatus( $title );
+
+ if ( $expectedStatus ) {
+ $this->assertEquals( $expectedStatus, $status->getId() );
+ } else {
+ $this->assertNull( $status );
+ }
+ }
+
+ public static function provideUpdateStatus() {
+ $readyRevisionId = 1;
+ $markRevisionId = null;
+ $latestRevisionId = 1;
+ yield 'Proposed pages' => [
+ $readyRevisionId,
+ $markRevisionId,
+ $latestRevisionId,
+ TranslatablePageStatus::PROPOSED
+ ];
+
+ $readyRevisionId = $markRevisionId = $latestRevisionId = 1;
+ yield 'Active pages' => [
+ $readyRevisionId,
+ $markRevisionId,
+ $latestRevisionId,
+ TranslatablePageStatus::ACTIVE
+ ];
+
+ $markRevisionId = 1;
+ $readyRevisionId = $latestRevisionId = 2;
+ yield 'Outdated pages' => [
+ $readyRevisionId,
+ $markRevisionId,
+ $latestRevisionId,
+ TranslatablePageStatus::OUTDATED
+ ];
+
+ $readyRevisionId = $markRevisionId = 1;
+ $latestRevisionId = 2;
+ yield 'Broken pages' => [
+ $readyRevisionId,
+ $markRevisionId,
+ $latestRevisionId,
+ TranslatablePageStatus::BROKEN
+ ];
+
+ $readyRevisionId = $markRevisionId = null;
+ $latestRevisionId = 1;
+ yield 'Not a translatable page' => [
+ $readyRevisionId,
+ $markRevisionId,
+ $latestRevisionId,
+ null
+ ];
+ }
+
+ private function getTranslatableBundleStatusStoreMock(
+ bool $shouldBeCalled = false,
+ ?Title $title = null,
+ ?int $status = null
+ ) {
+ $mock = $this->createMock( TranslatableBundleStatusStore::class );
+ if ( $shouldBeCalled ) {
+ $mock->expects( $this->once() )
+ ->method( 'setStatus' )
+ ->with( $title, new TranslatablePageStatus( $status ) );
+ }
+ return $mock;
+ }
+
+ private function getRevTagStoreStub( ?int $readyRevisionId, ?int $markRevisionId ) {
+ $stub = $this->createStub( RevTagStore::class );
+ $returnValue = [];
+ if ( $readyRevisionId ) {
+ $returnValue[RevTagStore::TP_READY_TAG] = $readyRevisionId;
+ }
+
+ if ( $markRevisionId ) {
+ $returnValue[RevTagStore::TP_MARK_TAG] = $markRevisionId;
+ }
+ $stub->method( 'getLatestRevisionsForTags' )
+ ->willReturn( $returnValue );
+ return $stub;
+ }
+
+ private function getTitleStub( int $latestRevisionId ) {
+ $stub = $this->createStub( Title::class );
+ $stub->method( 'getLatestRevID' )
+ ->willReturn( $latestRevisionId );
+ $stub->method( 'exists' )
+ ->willReturn( true );
+ $stub->method( 'getId' )
+ ->willReturn( 1 );
+ return $stub;
+ }
+}
diff --git a/Translate/tests/phpunit/unit/PageTranslation/TranslatablePageTest.php b/Translate/tests/phpunit/unit/PageTranslation/TranslatablePageTest.php
new file mode 100644
index 00000000..b319d371
--- /dev/null
+++ b/Translate/tests/phpunit/unit/PageTranslation/TranslatablePageTest.php
@@ -0,0 +1,115 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use MediaWiki\Linker\LinkTarget;
+use MediaWikiUnitTestCase;
+use TitleValue;
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @covers MediaWiki\Extension\Translate\PageTranslation\TranslatablePage
+ */
+class TranslatablePageTest extends MediaWikiUnitTestCase {
+ /** @dataProvider provideTestParseTranslationUnit */
+ public function testParseTranslationUnit( LinkTarget $input, array $expected ) {
+ $output = TranslatablePage::parseTranslationUnit( $input );
+ $this->assertEquals( $expected, $output );
+ }
+
+ public static function provideTestParseTranslationUnit() {
+ // The namespace constant is not defined in unit tests. But it is ignored anway.
+ $ns = 1198;
+
+ yield [
+ new TitleValue( $ns, 'Template:Foo/bar/SectionName/LanguageCode' ),
+ [
+ 'sourcepage' => 'Template:Foo/bar',
+ 'section' => 'SectionName',
+ 'language' => 'LanguageCode',
+ ]
+ ];
+
+ yield [
+ new TitleValue( $ns, 'Template:Foo/bar/SectionName' ),
+ [
+ 'sourcepage' => 'Template:Foo',
+ 'section' => 'bar',
+ 'language' => 'SectionName',
+ ]
+ ];
+
+ yield [
+ new TitleValue( $ns, 'Foo' ),
+ [
+ 'sourcepage' => '',
+ 'section' => '',
+ 'language' => 'Foo',
+ ]
+ ];
+ }
+
+ /** @dataProvider provideDetermineStatus */
+ public function testDetermineStatus(
+ ?int $readyRevisionId,
+ ?int $markRevisionId,
+ int $latestRevisionId,
+ ?int $expectedStatus
+ ): void {
+ $status = TranslatablePage::determineStatus( $readyRevisionId, $markRevisionId, $latestRevisionId );
+ if ( $expectedStatus ) {
+ $this->assertEquals( $expectedStatus, $status->getId() );
+ } else {
+ $this->assertNull( $status );
+ }
+ }
+
+ public static function provideDetermineStatus() {
+ $readyRevisionId = 1;
+ $markRevisionId = null;
+ $latestRevisionId = 1;
+ yield 'Proposed pages' => [
+ $readyRevisionId,
+ $markRevisionId,
+ $latestRevisionId,
+ TranslatablePageStatus::PROPOSED
+ ];
+
+ $readyRevisionId = $markRevisionId = $latestRevisionId = 1;
+ yield 'Active pages' => [
+ $readyRevisionId,
+ $markRevisionId,
+ $latestRevisionId,
+ TranslatablePageStatus::ACTIVE
+ ];
+
+ $markRevisionId = 1;
+ $readyRevisionId = $latestRevisionId = 2;
+ yield 'Outdated pages' => [
+ $readyRevisionId,
+ $markRevisionId,
+ $latestRevisionId,
+ TranslatablePageStatus::OUTDATED
+ ];
+
+ $readyRevisionId = $markRevisionId = 1;
+ $latestRevisionId = 2;
+ yield 'Broken pages' => [
+ $readyRevisionId,
+ $markRevisionId,
+ $latestRevisionId,
+ TranslatablePageStatus::BROKEN
+ ];
+
+ $readyRevisionId = $markRevisionId = null;
+ $latestRevisionId = 1;
+ yield 'Not a translatable page' => [
+ $readyRevisionId,
+ $markRevisionId,
+ $latestRevisionId,
+ null
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/unit/PageTranslation/TranslationUnitIssueTest.php b/Translate/tests/phpunit/unit/PageTranslation/TranslationUnitIssueTest.php
new file mode 100644
index 00000000..5929b312
--- /dev/null
+++ b/Translate/tests/phpunit/unit/PageTranslation/TranslationUnitIssueTest.php
@@ -0,0 +1,44 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use InvalidArgumentException;
+use MediaWikiUnitTestCase;
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\PageTranslation\TranslationUnitIssue
+ */
+class TranslationUnitIssueTest extends MediaWikiUnitTestCase {
+ public function testConstructor() {
+ $actual = new TranslationUnitIssue( TranslationUnitIssue::WARNING, 'key', [ 'param1' ] );
+ $this->assertInstanceOf( TranslationUnitIssue::class, $actual );
+
+ $this->expectException( InvalidArgumentException::class );
+ new TranslationUnitIssue( 'essay', 'key' );
+ }
+
+ public function testGetSeverity() {
+ $expected = TranslationUnitIssue::WARNING;
+ $issue = new TranslationUnitIssue( $expected, 'key' );
+ $this->assertEquals( $expected, $issue->getSeverity() );
+ }
+
+ public function testGetKey() {
+ $expected = 'key';
+ $issue = new TranslationUnitIssue( TranslationUnitIssue::ERROR, $expected );
+ $this->assertEquals( $expected, $issue->getKey() );
+ }
+
+ public function testGetParams() {
+ $expected = [];
+ $issue = new TranslationUnitIssue( TranslationUnitIssue::ERROR, 'key' );
+ $this->assertEquals( $expected, $issue->getParams(), 'default value' );
+
+ $expected = [ 'param1' ];
+ $issue = new TranslationUnitIssue( TranslationUnitIssue::ERROR, 'key', $expected );
+ $this->assertEquals( $expected, $issue->getParams() );
+ }
+}
diff --git a/Translate/tests/phpunit/unit/PageTranslation/TranslationUnitTest.php b/Translate/tests/phpunit/unit/PageTranslation/TranslationUnitTest.php
new file mode 100644
index 00000000..2146d4da
--- /dev/null
+++ b/Translate/tests/phpunit/unit/PageTranslation/TranslationUnitTest.php
@@ -0,0 +1,509 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\PageTranslation;
+
+use FatMessage;
+use Language;
+use MediaWikiUnitTestCase;
+use Parser;
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\PageTranslation\TranslationUnit
+ */
+class TranslationUnitTest extends MediaWikiUnitTestCase {
+ public function setUp(): void {
+ parent::setUp();
+
+ if ( !defined( 'TRANSLATE_FUZZY' ) ) {
+ define( 'TRANSLATE_FUZZY', '!!FUZZY!!' );
+ }
+ }
+
+ /** @dataProvider providerTestGetMarkedText */
+ public function testGetMarkedText(
+ string $name, string $text, bool $inline, string $expected
+ ) {
+ $section = new TranslationUnit( $text, $name );
+ $section->setIsInline( $inline );
+ $output = $section->getMarkedText();
+ $this->assertEquals( $expected, $output );
+ }
+
+ /** @dataProvider providerTestGetTextWithVariables */
+ public function testGetTextWithVariables( string $text, string $expected ) {
+ $section = new TranslationUnit( $text );
+ $output = $section->getTextWithVariables();
+ $this->assertEquals( $expected, $output );
+ }
+
+ /** @dataProvider providerTestGetTextForTrans */
+ public function testGetTextForTrans( string $text, string $expected ) {
+ $section = new TranslationUnit( $text );
+ $output = $section->getTextForTrans();
+ $this->assertEquals( $expected, $output );
+ }
+
+ public static function providerTestGetMarkedText() {
+ $cases = [];
+
+ // Inline syntax
+ $cases[] = [
+ 'name',
+ 'Hello',
+ true,
+ '<!--T:name--> Hello',
+ ];
+
+ // Normal syntax
+ $cases[] = [
+ 'name',
+ 'Hello',
+ false,
+ "<!--T:name-->\nHello",
+ ];
+
+ // Inline should not matter for headings, which have special syntax, but test both values
+ $cases[] = [
+ 'name',
+ '== Hello ==',
+ true,
+ '== Hello == <!--T:name-->',
+ ];
+
+ $cases[] = [
+ 'name',
+ '====== Hello ======',
+ false,
+ '====== Hello ====== <!--T:name-->',
+ ];
+
+ return $cases;
+ }
+
+ public static function providerTestGetTextWithVariables() {
+ $cases = [];
+
+ // syntax
+ $cases[] = [
+ "<tvar|abc>Peter\n cat!</>",
+ '$abc',
+ ];
+
+ $cases[] = [
+ "<tvar|1>Hello</>\n<tvar|2>Hello</>",
+ "$1\n$2",
+ ];
+
+ return $cases;
+ }
+
+ public static function providerTestGetTextForTrans() {
+ $cases = [];
+
+ // syntax
+ $cases[] = [
+ "<tvar|abc>Peter\n cat!</>",
+ "Peter\n cat!",
+ ];
+
+ $cases[] = [
+ "<tvar|1>Hello</>\n<tvar|2>Hello</>",
+ "Hello\nHello",
+ ];
+
+ return $cases;
+ }
+
+ /** @dataProvider provideTestGetTextForRendering */
+ public function testGetTextForRendering(
+ string $source,
+ ?string $translation,
+ bool $fuzzy,
+ bool $inline,
+ bool $canWrap,
+ string $expected
+ ) {
+ $unit = new TranslationUnit( $source );
+ $unit->setIsInline( $inline );
+ $unit->setCanWrap( $canWrap );
+
+ $msg = null;
+ if ( $translation !== null ) {
+ $msg = new FatMessage( '', $unit->getTextWithVariables() );
+ $msg->setTranslation( $translation );
+ if ( $fuzzy ) {
+ $msg->addTag( 'fuzzy' );
+ }
+ }
+
+ $sourceLanguage = $this->getLanguageStub( 'en-GB', 'en-gb', 'ltr' );
+ $targetLanguage = $this->getLanguageStub( 'ar', 'ar', 'rtl' );
+
+ $parser = $this->createStub( Parser::class );
+ $parser->method( 'guessSectionNameFromWikiText' )->willReturnCallback(
+ static function ( string $headingText ) {
+ if ( $headingText && $headingText[0] === '#' ) {
+ return '##headingId';
+ }
+
+ return '#headingId';
+ }
+ );
+
+ $wrapUntranslated = true;
+ $actual = $unit->getTextForRendering(
+ $msg,
+ $sourceLanguage,
+ $targetLanguage,
+ $wrapUntranslated,
+ $parser
+ );
+ $this->assertEquals( $expected, $actual );
+ }
+
+ public function provideTestGetTextForRendering() {
+ $fuzzy = true;
+ $inline = true;
+ $block = false;
+ $wrap = true;
+
+ yield 'language wrapping' => [
+ 'Hello <tvar|abc>peter</>!',
+ null,
+ !$fuzzy,
+ $inline,
+ $wrap,
+ '<span lang="en-GB" dir="ltr" class="mw-content-ltr">Hello peter!</span>'
+ ];
+
+ yield 'old translation variable syntax' => [
+ 'Hello <tvar|abc>peter</>!',
+ 'Hejsan $abc!',
+ !$fuzzy,
+ $inline,
+ $wrap,
+ 'Hejsan peter!'
+ ];
+
+ yield 'translation variable syntax without quotes' => [
+ 'Hello <tvar name=abc>peter</tvar>!',
+ 'Hejsan $abc!',
+ !$fuzzy,
+ $inline,
+ $wrap,
+ 'Hejsan peter!'
+ ];
+
+ yield 'translation variable syntax with double quotes' => [
+ 'Hello <tvar name="abc">peter</tvar>!',
+ 'Hejsan $abc!',
+ !$fuzzy,
+ $inline,
+ $wrap,
+ 'Hejsan peter!'
+ ];
+
+ yield 'translation variable syntax with single quotes' => [
+ 'Hello <tvar name=\'abc\'>peter</tvar>!',
+ 'Hejsan $abc!',
+ !$fuzzy,
+ $inline,
+ $wrap,
+ 'Hejsan peter!'
+ ];
+
+ yield 'translation variable syntax with spaces' => [
+ 'Hello <tvar name = abc >peter</tvar>!',
+ 'Hejsan $abc!',
+ !$fuzzy,
+ $inline,
+ $wrap,
+ 'Hejsan peter!'
+ ];
+
+ yield 'mixed variable syntax' => [
+ 'Hello <tvar name=2>peter</tvar> and <tvar|1>peter</>!',
+ 'Hejsan $1 and $2!',
+ !$fuzzy,
+ $inline,
+ $wrap,
+ 'Hejsan peter and peter!'
+ ];
+
+ yield 'special characters in variable name' => [
+ 'Hello <tvar name=abc_123-АБВ$>peter</tvar>!',
+ 'Hejsan $abc_123-АБВ$!',
+ !$fuzzy,
+ $inline,
+ $wrap,
+ 'Hejsan peter!'
+ ];
+
+ yield 'inline fuzzy wrapping' => [
+ 'Hello <tvar|abc>peter</>!',
+ 'Hejsan $abc!',
+ $fuzzy,
+ $inline,
+ $wrap,
+ '<span class="mw-translate-fuzzy">Hejsan peter!</span>'
+ ];
+
+ yield 'block language wrapping' => [
+ 'Hello <tvar|abc>peter</>!',
+ null,
+ !$fuzzy,
+ $block,
+ $wrap,
+ "<div lang=\"en-GB\" dir=\"ltr\" class=\"mw-content-ltr\">\nHello peter!\n</div>"
+ ];
+
+ yield 'block variables' => [
+ 'Hello <tvar name=abc>peter</tvar>!',
+ 'Hejsan $abc!',
+ !$fuzzy,
+ $block,
+ $wrap,
+ 'Hejsan peter!'
+ ];
+
+ yield 'block fuzzy wrapping' => [
+ 'Hello <tvar|abc>peter</>!',
+ 'Hejsan $abc!',
+ $fuzzy,
+ $block,
+ $wrap,
+ "<div class=\"mw-translate-fuzzy\">\nHejsan peter!\n</div>"
+ ];
+
+ yield 'translation language in the source' => [
+ '{{TRANSLATIONLANGUAGE}}',
+ null,
+ !$fuzzy,
+ $inline,
+ $wrap,
+ '<span lang="en-GB" dir="ltr" class="mw-content-ltr">en-gb</span>'
+ ];
+
+ yield 'translation language in the translation' => [
+ '{{TRANSLATIONLANGUAGE}}',
+ '{{TRANSLATIONLANGUAGE}}',
+ $fuzzy,
+ $inline,
+ $wrap,
+ '<span class="mw-translate-fuzzy">ar</span>'
+ ];
+
+ yield 'translation language in a variable' => [
+ 'Lang: <tvar|code>{{TRANSLATIONLANGUAGE}}</>',
+ 'Lang: $code',
+ !$fuzzy,
+ $inline,
+ $wrap,
+ 'Lang: ar'
+ ];
+
+ yield 'anchor for heading with translation' => [
+ '== Hello World ==',
+ '== Hello World - ES ==',
+ !$fuzzy,
+ !$inline,
+ $wrap,
+ "<span id=\"headingId\"></span>\n== Hello World - ES =="
+ ];
+
+ yield 'anchor for heading with fuzzy translation' => [
+ '== Hello World ==',
+ '== Hello World - ES ==',
+ $fuzzy,
+ !$inline,
+ $wrap,
+ "<span id=\"headingId\"></span>\n<div class=\"mw-translate-fuzzy\">\n== Hello World - ES ==\n</div>"
+ ];
+
+ yield 'no anchor for heading without translation' => [
+ '== Hello World ==',
+ null,
+ !$fuzzy,
+ !$inline,
+ $wrap,
+ "<div lang=\"en-GB\" dir=\"ltr\" class=\"mw-content-ltr\">\n== Hello World ==\n</div>"
+ ];
+
+ yield 'anchor is added when source string contains heading even if translation does not' => [
+ '== Hello world ==',
+ 'This is not a heading',
+ !$fuzzy,
+ !$inline,
+ $wrap,
+ "<span id=\"headingId\"></span>\nThis is not a heading"
+ ];
+
+ yield 'anchor is not added when translation contains heading but source string does not' => [
+ 'This has no heading',
+ '== Hello world ==',
+ !$fuzzy,
+ !$inline,
+ $wrap,
+ "== Hello world =="
+ ];
+
+ yield 'anchor is not added for inline translate tags containing "="' => [
+ '== Hello world ==',
+ '== Hello world ==',
+ !$fuzzy,
+ $inline,
+ $wrap,
+ "== Hello world =="
+ ];
+
+ yield 'anchor is not added when nowrap is set' => [
+ '== Hello world ==',
+ 'This is not a heading',
+ !$fuzzy,
+ !$inline,
+ !$wrap,
+ "This is not a heading"
+ ];
+
+ yield 'anchor id has # when definition has it' => [
+ '== #Hello world ==',
+ '# Hello',
+ !$fuzzy,
+ !$inline,
+ $wrap,
+ "<span id=\"#headingId\"></span>\n# Hello"
+ ];
+ }
+
+ /** @dataProvider providerTestGetIssues */
+ public function testGetIssues( $input, $expected ) {
+ // FIXME: How to avoid this? It's used by wfEscapeWikitext
+ global $wgEnableMagicLinks;
+ $wgEnableMagicLinks = [];
+
+ $unit = new TranslationUnit( $input );
+ $issues = $unit->getIssues();
+ $actual = array_map( static function ( $x ) {
+ return $x->getKey();
+ }, $issues );
+ $this->assertArrayEquals( $expected, $actual );
+ }
+
+ public function providerTestGetIssues() {
+ // We are testing the message keys here to document the checks.
+ // Severity is left untested to allow changing them easily.
+ yield 'no variables - no issues' => [
+ 'Bunny guarding the garden',
+ [],
+ ];
+
+ yield 'ok variable name - no issues' => [
+ '<tvar name=name>Bunny</tvar> guarding the garden',
+ [],
+ ];
+
+ yield 'bad insertable variable name' => [
+ 'Information about carrots: <tvar name=wp.org>https://en.wikipedia.org/wiki/carrot</tvar>',
+ [ 'tpt-validation-not-insertable' ],
+ ];
+
+ yield 'multiple names get separate issues' => [
+ '<tvar name="1/2">first half</tvar><tvar name="2/2">second half</tvar>',
+ [ 'tpt-validation-not-insertable', 'tpt-validation-not-insertable' ],
+ ];
+
+ yield 'single repeated name only has one issue' => [
+ '<tvar name="1/1">whole</tvar><tvar name="1/1">whole</tvar>',
+ [ 'tpt-validation-not-insertable' ],
+ ];
+
+ yield 'name reuse okay\'ish with same content' => [
+ 'The parameter’s value is {{#if:<tvar name="1">{{{param|}}}</tvar>|' .
+ '<tvar name="1">{{{param|}}}</tvar>|not specified}}.',
+ [],
+ ];
+
+ yield 'name reuse not okay with different content' => [
+ 'Allowed values <tvar name=1>snake</tvar> and <tvar name=2>alligator</tvar>. ' .
+ 'When using <tvar name=1>cobra</tvar> you may hear a hissing sound.',
+ [ 'tpt-validation-name-reuse' ],
+ ];
+ }
+
+ /** @dataProvider provideTestHeadingParsing */
+ public function testHeadingParsing( string $source, string $translation, ?string $expectedHeadingText ) {
+ $unit = new TranslationUnit( $source );
+ $msg = new FatMessage( '', $unit->getTextWithVariables() );
+ $msg->setTranslation( $translation );
+
+ $parser = $this->createMock( Parser::class );
+
+ if ( $expectedHeadingText === null ) {
+ $parser->expects( $this->never() )
+ ->method( 'guessSectionNameFromWikiText' );
+ } else {
+ $parser->expects( $this->once() )
+ ->method( 'guessSectionNameFromWikiText' )
+ ->willReturn( '#headingId' )
+ ->with( $expectedHeadingText );
+ }
+
+ $wrapUntranslated = true;
+ $unit->getTextForRendering(
+ $msg,
+ $this->getLanguageStub( 'en-GB', 'en-gb', 'ltr' ),
+ $this->getLanguageStub( 'ar', 'ar', 'rtl' ),
+ $wrapUntranslated,
+ $parser
+ );
+ }
+
+ public function provideTestHeadingParsing() {
+ yield 'parsing of heading text with balanced "="' => [
+ '== Hello ==',
+ '== Hello - Translated ==',
+ 'Hello'
+ ];
+
+ yield 'parsing of heading text unbalanced "="' => [
+ '===Hello ==',
+ '=== Hello translated ==',
+ '=Hello'
+ ];
+
+ yield 'parsing of text with = but also newline' => [
+ "== Heading\n ==",
+ "Heading translated",
+ null
+ ];
+
+ yield 'parsing of normal text' => [
+ 'Heading',
+ 'Heading',
+ null
+ ];
+
+ yield 'parsing of heading with more than 7 "="' => [
+ '======== Heading =======',
+ '======== Heading Translate =======',
+ '== Heading ='
+ ];
+
+ yield 'anchor is skipped when translation and definition are same' => [
+ '= Heading =',
+ '= Heading =',
+ null
+ ];
+ }
+
+ private function getLanguageStub( string $htmlCode, string $langCode, string $dir ) {
+ $language = $this->createStub( Language::class );
+ $language->method( 'getHtmlCode' )->willReturn( $htmlCode );
+ $language->method( 'getCode' )->willReturn( $langCode );
+ $language->method( 'getDir' )->willReturn( $dir );
+ return $language;
+ }
+}
diff --git a/Translate/tests/phpunit/unit/Synchronization/MessageUpdateParameterTest.php b/Translate/tests/phpunit/unit/Synchronization/MessageUpdateParameterTest.php
new file mode 100644
index 00000000..1f901b97
--- /dev/null
+++ b/Translate/tests/phpunit/unit/Synchronization/MessageUpdateParameterTest.php
@@ -0,0 +1,98 @@
+<?php
+
+namespace MediaWiki\Extension\Translate\Synchronization;
+
+use MediaWikiUnitTestCase;
+use MessageUpdateJob;
+use Title;
+
+/** @covers \MediaWiki\Extension\Translate\Synchronization\MessageUpdateParameter */
+class MessageUpdateParameterTest extends MediaWikiUnitTestCase {
+ /** @dataProvider provideSerializable */
+ public function testSerializable(
+ string $title,
+ string $content,
+ bool $isRename,
+ string $target = '',
+ string $replacement = '',
+ bool $isFuzzy = false,
+ array $otherLangs = []
+ ) {
+ $job = $this->getJobFromInput(
+ $title, $content, $isRename, $target, $replacement, $isFuzzy, $otherLangs
+ );
+
+ $messageParam = MessageUpdateParameter::createFromJob( $job );
+
+ $serializedMessageParam = unserialize( serialize( $messageParam ) );
+ $this->assertEquals( $messageParam, $serializedMessageParam );
+ }
+
+ /** @dataProvider provideSerializable */
+ public function testCreateFromJob(
+ string $title,
+ string $content,
+ bool $isRename,
+ string $target = '',
+ string $replacement = '',
+ bool $isFuzzy = false,
+ array $otherLangs = []
+ ) {
+ $job = $this->getJobFromInput(
+ $title, $content, $isRename, $target, $replacement, $isFuzzy, $otherLangs
+ );
+ $messageParams = MessageUpdateParameter::createFromJob( $job );
+ $this->assertEquals( $title, $messageParams->getPageName() );
+ $this->assertEquals( $content, $messageParams->getContent() );
+ $this->assertEquals( $isRename, $messageParams->isRename() );
+ $this->assertEquals( $isFuzzy, $messageParams->isFuzzy() );
+
+ if ( $isRename ) {
+ $this->assertEquals( $target, $messageParams->getTargetValue() );
+ $this->assertEquals( $replacement, $messageParams->getReplacementValue() );
+ $this->assertEquals( $otherLangs, $messageParams->getOtherLangs() );
+ } else {
+ $this->assertNull( $messageParams->getOtherLangs() );
+ }
+ }
+
+ private function getJobFromInput(
+ string $title,
+ string $content,
+ bool $isRename,
+ string $target,
+ string $replacement,
+ bool $isFuzzy,
+ array $otherLangs
+ ): MessageUpdateJob {
+ $title = Title::makeTitle( NS_MAIN, $title );
+ if ( $isRename ) {
+ $job = MessageUpdateJob::newRenameJob(
+ $title, $target, $replacement, $isFuzzy, $content, $otherLangs
+ );
+ } else {
+ $job = MessageUpdateJob::newJob( $title, $content, $isFuzzy );
+ }
+
+ return $job;
+ }
+
+ public function provideSerializable() {
+ yield [
+ 'Normal_Job/en',
+ 'Hello World!',
+ false,
+ ];
+
+ yield [
+ 'Rename_Job/en',
+ 'Hello World - Rename!',
+ true,
+ 'target',
+ 'replacement',
+ true,
+ [ 'hello' => 'world' ]
+ ];
+ }
+
+}
diff --git a/Translate/tests/phpunit/unit/TranslatorInterface/Insertable/CombinedInsertablesSuggesterTest.php b/Translate/tests/phpunit/unit/TranslatorInterface/Insertable/CombinedInsertablesSuggesterTest.php
new file mode 100644
index 00000000..1f2d82b1
--- /dev/null
+++ b/Translate/tests/phpunit/unit/TranslatorInterface/Insertable/CombinedInsertablesSuggesterTest.php
@@ -0,0 +1,90 @@
+<?php
+/**
+ * @file
+ * @author Geoffrey Mon
+ * @license GPL-2.0-or-later
+ */
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Insertable;
+
+use MediaWikiUnitTestCase;
+
+/** @covers \MediaWiki\Extension\Translate\TranslatorInterface\Insertable\CombinedInsertablesSuggester */
+class CombinedInsertablesSuggesterTest extends MediaWikiUnitTestCase {
+ /** @dataProvider getInsertablesProvider */
+ public function testGetInsertables( $suggesters, $input, $expected ) {
+ $suggester = new CombinedInsertablesSuggester( $suggesters );
+ $this->assertArrayEquals( $expected, $suggester->getInsertables( $input ) );
+ }
+
+ public function getInsertablesProvider() {
+ return [
+ // Test basic combination of multiple InsertablesSuggesters
+ [
+ [
+ new TestingInsertablesSuggester(),
+ new NumericalParameterInsertablesSuggester(),
+ ],
+ 'test $1 foo $2 bar $3spam eggs',
+ [
+ new Insertable( 'Test', 'Test', '' ),
+ new Insertable( '$1', '$1', '' ),
+ new Insertable( '$2', '$2', '' ),
+ new Insertable( '$3', '$3', '' ),
+ ]
+ ],
+ // Test removal of duplicate suggestions
+ [
+ [
+ new NumericalParameterInsertablesSuggester(),
+ new NumericalParameterInsertablesSuggester(),
+ ],
+ 'test $1 duplicates $2 $3',
+ [
+ new Insertable( '$1', '$1', '' ),
+ new Insertable( '$2', '$2', '' ),
+ new Insertable( '$3', '$3', '' ),
+ ]
+ ],
+ // Test removal of duplicate suggestions
+ [
+ [
+ new TestingDuplicateInsertablesSuggester(),
+ new NumericalParameterInsertablesSuggester(),
+ ],
+ 'test $1 duplicates $2 $3',
+ [
+ new Insertable( '$1', '$1', '' ),
+ new Insertable( '$2', '$2', '' ),
+ new Insertable( '$3', '$3', '' ),
+ new Insertable( 'Test', 'Test', '' ),
+ new Insertable( '', 'Test', 'Test' ),
+ ]
+ ],
+ // Test no InsertablesSuggesters
+ [
+ [],
+ 'test $1 duplicates $2 $3',
+ []
+ ],
+ ];
+ }
+}
+
+class TestingInsertablesSuggester implements InsertablesSuggester {
+ public function getInsertables( string $text ): array {
+ return [ new Insertable( 'Test', 'Test', '' ) ];
+ }
+}
+
+class TestingDuplicateInsertablesSuggester implements InsertablesSuggester {
+ public function getInsertables( string $text ): array {
+ return [
+ new Insertable( '$1', '$1', '' ),
+ new Insertable( '$1', '$1', '' ),
+ new Insertable( 'Test', 'Test', '' ),
+ new Insertable( 'Test', 'Test', '' ),
+ new Insertable( '', 'Test', 'Test' ),
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/unit/TranslatorInterface/Insertable/HtmlTagInsertablesSuggesterTest.php b/Translate/tests/phpunit/unit/TranslatorInterface/Insertable/HtmlTagInsertablesSuggesterTest.php
new file mode 100644
index 00000000..fd439254
--- /dev/null
+++ b/Translate/tests/phpunit/unit/TranslatorInterface/Insertable/HtmlTagInsertablesSuggesterTest.php
@@ -0,0 +1,88 @@
+<?php
+/**
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Insertable;
+
+use MediaWikiUnitTestCase;
+
+/** @covers \MediaWiki\Extension\Translate\TranslatorInterface\Insertable\HtmlTagInsertablesSuggester */
+class HtmlTagInsertablesSuggesterTest extends MediaWikiUnitTestCase {
+ /** @dataProvider getTestHtmlTagInsertablesSuggesterProvider */
+ public function testHtmlTagInsertablesSuggester( $text, $expected, $comment = '' ) {
+ $suggester = new HtmlTagInsertablesSuggester();
+ $actual = $suggester->getInsertables( $text );
+
+ $this->assertCount(
+ count( $expected ),
+ $actual,
+ 'should return correct number of insertables ' . $comment
+ );
+
+ foreach ( $expected as $i => $values ) {
+ $this->assertEquals(
+ $values['display'],
+ $actual[$i]->getDisplayText(),
+ 'should return the correct display text ' . $comment
+ );
+ $this->assertEquals(
+ $values['pre'],
+ $actual[$i]->getPreText(),
+ 'should return the correct pre text ' . $comment
+ );
+ $this->assertEquals(
+ $values['post'],
+ $actual[$i]->getPostText(),
+ 'should return the correct post text ' . $comment
+ );
+ }
+ }
+
+ public function getTestHtmlTagInsertablesSuggesterProvider() {
+ yield [
+ 'Hello <b>World</b>',
+ [
+ [ 'display' => '<b></b>', 'pre' => '<b>', 'post' => '</b>' ],
+ ],
+ 'for plain tag'
+ ];
+
+ yield [
+ '<html> <rocks>',
+ [],
+ 'for unclosed tags'
+ ];
+
+ yield [
+ 'Hello <b class="shaking">World</b>',
+ [
+ [ 'display' => '<b class="shaking"></b>', 'pre' => '<b class="shaking">', 'post'
+ => '</b>' ],
+ ],
+ 'for tag with attributes'
+ ];
+
+ // TODO: support nested tags
+ yield [
+ 'Hello <b><i>World</i></b>',
+ [
+ [ 'display' => '<b></b>', 'pre' => '<b>', 'post' => '</b>' ],
+ ],
+ 'for nested tags (currently not supported)'
+ ];
+
+ // TODO: avoid duplicate insertables. Not a big issue as frontend de-duplicates
+ yield [
+ 'Hello <b>a</b><i>b</i><b>c</b>',
+ [
+ [ 'display' => '<b></b>', 'pre' => '<b>', 'post' => '</b>' ],
+ [ 'display' => '<i></i>', 'pre' => '<i>', 'post' => '</i>' ],
+ [ 'display' => '<b></b>', 'pre' => '<b>', 'post' => '</b>' ],
+ ],
+ 'for multiple tags'
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/unit/TranslatorInterface/Insertable/InsertableFactoryTest.php b/Translate/tests/phpunit/unit/TranslatorInterface/Insertable/InsertableFactoryTest.php
new file mode 100644
index 00000000..7b20fa12
--- /dev/null
+++ b/Translate/tests/phpunit/unit/TranslatorInterface/Insertable/InsertableFactoryTest.php
@@ -0,0 +1,56 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Insertable;
+
+use InvalidArgumentException;
+use MediaWikiUnitTestCase;
+use MockTranslateValidator;
+
+/** @covers \MediaWiki\Extension\Translate\TranslatorInterface\Insertable\InsertableFactory */
+class InsertableFactoryTest extends MediaWikiUnitTestCase {
+ /**
+ * @dataProvider getPreProvidedInsertables
+ * @dataProvider getCustomInsertables
+ */
+ public function testValidLoadInstance( string $className, $params = null ) {
+ $instance = InsertableFactory::make( $className, $params );
+ $this->assertInstanceOf(
+ InsertablesSuggester::class,
+ $instance,
+ 'Existing class returns an instance of the InsertableSuggester'
+ );
+ }
+
+ public function testNonExistentInsertable() {
+ $this->expectException( InvalidArgumentException::class );
+ $this->expectExceptionMessageMatches( '/could not find/i' );
+ InsertableFactory::make( 'TranslateNonExistentClass', '' );
+ }
+
+ public function testInvalidInsertable() {
+ $this->expectException( InvalidArgumentException::class );
+ $this->expectExceptionMessageMatches( '/does not implement/i' );
+ InsertableFactory::make( MockTranslateValidator::class, '' );
+ }
+
+ public function getPreprovidedInsertables() {
+ yield [ HtmlTagInsertablesSuggester::class ];
+
+ yield [
+ RegexInsertablesSuggester::class,
+ [ 'regex' => 'abcd' ]
+ ];
+
+ yield [ RegexInsertablesSuggester::class, 'abcd' ];
+
+ yield 'Preprovided insertables without fully qualified namespace' => [
+ // Not using ::class since that would add the fully qualified namespace
+ 'NumericalParameterInsertablesSuggester'
+ ];
+ }
+
+ public function getCustomInsertables() {
+ yield [ \MockCustomInsertableSuggester::class ];
+ }
+}
diff --git a/Translate/tests/phpunit/unit/TranslatorInterface/Insertable/MediaWikiInsertablesSuggesterTest.php b/Translate/tests/phpunit/unit/TranslatorInterface/Insertable/MediaWikiInsertablesSuggesterTest.php
new file mode 100644
index 00000000..8fede921
--- /dev/null
+++ b/Translate/tests/phpunit/unit/TranslatorInterface/Insertable/MediaWikiInsertablesSuggesterTest.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Insertable;
+
+use MediaWikiUnitTestCase;
+
+/** @covers \MediaWiki\Extension\Translate\TranslatorInterface\Insertable\MediaWikiInsertablesSuggester */
+class MediaWikiInsertablesSuggesterTest extends MediaWikiUnitTestCase {
+ /** @dataProvider getInsertablesProvider */
+ public function testGetInsertables( $input, $expected ) {
+ $suggester = new MediaWikiInsertablesSuggester();
+ $this->assertEquals( $expected, $suggester->getInsertables( $input ) );
+ }
+
+ public function getInsertablesProvider() {
+ return [
+ [ 'Hi $1', [
+ new Insertable( '$1', '$1', '' )
+ ] ],
+ [ 'Hello $1user', [
+ new Insertable( '$1user', '$1user', '' ),
+ ] ],
+ [ '{{GENDER:$1|he|she}}', [
+ new Insertable( '$1', '$1', '' ),
+ new Insertable( 'GENDER:$1', '{{GENDER:$1|', '}}' ),
+ ] ],
+ // Parameterless gender
+ [ '{{GENDER:|he|she}}', [
+ new Insertable( 'GENDER:', '{{GENDER:|', '}}' ),
+ ] ],
+ [
+ 'Hello <a href="https://en.wikipedia.org">World!</a>',
+ [
+ new Insertable(
+ '<a href="https://en.wikipedia.org"></a>',
+ '<a href="https://en.wikipedia.org">',
+ '</a>'
+ )
+ ]
+ ]
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/unit/TranslatorInterface/Insertable/NumericalParameterInsertablesSuggesterTest.php b/Translate/tests/phpunit/unit/TranslatorInterface/Insertable/NumericalParameterInsertablesSuggesterTest.php
new file mode 100644
index 00000000..a8913585
--- /dev/null
+++ b/Translate/tests/phpunit/unit/TranslatorInterface/Insertable/NumericalParameterInsertablesSuggesterTest.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * @file
+ * @author Geoffrey Mon
+ * @license GPL-2.0-or-later
+ */
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Insertable;
+
+use MediaWikiUnitTestCase;
+
+/** @covers \MediaWiki\Extension\Translate\TranslatorInterface\Insertable\NumericalParameterInsertablesSuggester */
+class NumericalParameterInsertablesSuggesterTest extends MediaWikiUnitTestCase {
+ /** @dataProvider getInsertablesProvider */
+ public function testGetInsertables( $input, $expected ) {
+ $suggester = new NumericalParameterInsertablesSuggester();
+ $this->assertEquals( $expected, $suggester->getInsertables( $input ) );
+ }
+
+ public function getInsertablesProvider() {
+ return [
+ [ '$1 $2 $3', [
+ new Insertable( '$1', '$1', '' ),
+ new Insertable( '$2', '$2', '' ),
+ new Insertable( '$3', '$3', '' ),
+ ] ],
+ [ 'test $1 foo $2 bar $3spam eggs', [
+ new Insertable( '$1', '$1', '' ),
+ new Insertable( '$2', '$2', '' ),
+ new Insertable( '$3', '$3', '' ),
+ ] ],
+ [ '$1 or $2, $15!', [
+ new Insertable( '$1', '$1', '' ),
+ new Insertable( '$2', '$2', '' ),
+ new Insertable( '$15', '$15', '' ),
+ ] ],
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/unit/TranslatorInterface/Insertable/RegexInsertablesSuggesterTest.php b/Translate/tests/phpunit/unit/TranslatorInterface/Insertable/RegexInsertablesSuggesterTest.php
new file mode 100644
index 00000000..e17be4fd
--- /dev/null
+++ b/Translate/tests/phpunit/unit/TranslatorInterface/Insertable/RegexInsertablesSuggesterTest.php
@@ -0,0 +1,70 @@
+<?php
+/**
+ * @file
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ */
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Insertable;
+
+use MediaWikiUnitTestCase;
+
+/** @covers \MediaWiki\Extension\Translate\TranslatorInterface\Insertable\RegexInsertablesSuggester */
+class RegexInsertablesSuggesterTest extends MediaWikiUnitTestCase {
+ /** @dataProvider getTestRegexInsertableProvider */
+ public function testRegexInsertable( $text, $params, $expectedVals ) {
+ $insertablesSuggester = new RegexInsertablesSuggester( $params );
+ $insertables = $insertablesSuggester->getInsertables( $text );
+
+ $this->assertCount( count( $expectedVals ), $insertables,
+ 'should return all the expected insertables.' );
+
+ foreach ( $expectedVals as $i => $values ) {
+ $this->assertEquals( $values['display'], $insertables[$i]->getDisplayText(),
+ 'should return the correct display text.' );
+ $this->assertEquals( $values['pre'], $insertables[$i]->getPreText(),
+ 'should return the correct pre text.' );
+ $this->assertEquals( $values['post'], $insertables[$i]->getPostText(),
+ 'should return the correct post text.' );
+ }
+ }
+
+ public function getTestRegexInsertableProvider() {
+ yield [
+ 'Hello $name! I\'m $myname',
+ [
+ 'regex' => '/\$[a-z0-9]+/'
+ ],
+ [
+ [ 'display' => '$name', 'pre' => '$name', 'post' => '' ],
+ [ 'display' => '$myname', 'pre' => '$myname', 'post' => '' ],
+ ]
+ ];
+
+ yield [
+ '<html> <rocks>',
+ [
+ 'regex' => '/(?<display>\<[a-z]+>)/',
+ 'display' => '$display',
+ ],
+ [
+ [ 'display' => '<html>', 'pre' => '<html>', 'post' => '' ],
+ [ 'display' => '<rocks>', 'pre' => '<rocks>', 'post' => '' ]
+ ]
+ ];
+
+ yield [
+ '[Hello]($1) [World]($2)',
+ [
+ 'regex' => '/(?<pre>\[)[^]]+(?<post>\]\([^)]+\))/',
+ 'display' => '$pre$post',
+ 'pre' => '$pre',
+ 'post' => '$post'
+ ],
+ [
+ [ 'display' => '[]($1)', 'pre' => '[', 'post' => ']($1)' ],
+ [ 'display' => '[]($2)', 'pre' => '[', 'post' => ']($2)' ]
+ ]
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/unit/TranslatorInterface/Insertable/UrlInsertablesSuggesterTest.php b/Translate/tests/phpunit/unit/TranslatorInterface/Insertable/UrlInsertablesSuggesterTest.php
new file mode 100644
index 00000000..e736b1ca
--- /dev/null
+++ b/Translate/tests/phpunit/unit/TranslatorInterface/Insertable/UrlInsertablesSuggesterTest.php
@@ -0,0 +1,99 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TranslatorInterface\Insertable;
+
+use MediaWikiUnitTestCase;
+
+/**
+ * @author Niklas Laxström
+ * @author Jon Harald Søby
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\TranslatorInterface\Insertable\UrlInsertablesSuggester
+ */
+class UrlInsertablesSuggesterTest extends MediaWikiUnitTestCase {
+ /** @dataProvider getTestUrlInsertablesSuggesterProvider */
+ public function testUrlInsertablesSuggester( $text, $expected, $comment = '' ) {
+ $suggester = new UrlInsertablesSuggester();
+ $actual = $suggester->getInsertables( $text );
+
+ $this->assertCount(
+ count( $expected ),
+ $actual,
+ 'should return correct number of insertables ' . $comment
+ );
+
+ foreach ( $expected as $i => $values ) {
+ $this->assertEquals(
+ $values['display'],
+ $actual[$i]->getDisplayText(),
+ 'should return the correct display text ' . $comment
+ );
+ $this->assertEquals(
+ $values['pre'],
+ $actual[$i]->getPreText(),
+ 'should return the correct pre text ' . $comment
+ );
+ $this->assertEquals(
+ $values['post'],
+ $actual[$i]->getPostText(),
+ 'should return the correct post text ' . $comment
+ );
+ }
+ }
+
+ public function getTestUrlInsertablesSuggesterProvider() {
+ yield [
+ 'Visit http://wikipedia.org',
+ [
+ [
+ 'display' => 'http://wikipedia.org/',
+ 'pre' => 'http://wikipedia.org',
+ 'post' => ''
+ ],
+ ],
+ 'for simple domain URL'
+ ];
+
+ yield [
+ 'See the [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:API documentation page]',
+ [
+ [
+ 'display' => 'https://www.mediawiki.org/',
+ 'pre' => 'https://www.mediawiki.org/wiki/Special:MyLanguage/Help:API',
+ 'post' => ''
+ ],
+ ],
+ 'for URLs with slugs'
+ ];
+
+ yield [
+ '[//en.wikipedia.org/w/index.php?title=Special:MyTalk&action=edit&section=new Add new section]',
+ [
+ [
+ 'display' => '//en.wikipedia.org/',
+ 'pre' => '//en.wikipedia.org/w/index.php?title=Special:MyTalk&action=edit&section=new',
+ 'post' => ''
+ ],
+ ],
+ 'for URLs with parameters'
+ ];
+
+ yield [
+ 'https://w.wiki/4nCc and https://www.mediawiki.org/wiki/Localisation are the same',
+ [
+ [
+ 'display' => 'https://w.wiki/',
+ 'pre' => 'https://w.wiki/4nCc',
+ 'post' => ''
+ ],
+ [
+ 'display' => 'https://www.mediawiki.org/',
+ 'pre' => 'https://www.mediawiki.org/wiki/Localisation',
+ 'post' => ''
+ ]
+ ],
+ 'for multiple URLs'
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/unit/TtmServer/TtmServerFactoryTest.php b/Translate/tests/phpunit/unit/TtmServer/TtmServerFactoryTest.php
new file mode 100644
index 00000000..e7f3223e
--- /dev/null
+++ b/Translate/tests/phpunit/unit/TtmServer/TtmServerFactoryTest.php
@@ -0,0 +1,72 @@
+<?php
+declare( strict_types = 1 );
+
+namespace MediaWiki\Extension\Translate\TtmServer;
+
+use DatabaseTTMServer;
+use MediaWikiUnitTestCase;
+
+/**
+ * @since 2021.01
+ * @license GPL-2.0-or-later
+ * @author Niklas Laxström
+ * @covers \MediaWiki\Extension\Translate\TtmServer\TtmServerFactory
+ */
+class TtmServerFactoryTest extends MediaWikiUnitTestCase {
+ public function testGetNames() {
+ $factory = new TtmServerFactory(
+ [
+ 'one' => [ 'type' => 'ttmserver' ],
+ 'two' => [ 'type' => 'remote-ttmserver' ],
+ 'three' => []
+ ]
+ );
+ $actual = $factory->getNames();
+ $this->assertArrayEquals( [ 'one', 'two' ], $actual );
+ }
+
+ public function testHas() {
+ $factory = new TtmServerFactory(
+ [
+ 'exists' => [],
+ 'one' => [ 'type' => 'ttmserver' ],
+ ],
+ 'one'
+ );
+ $this->assertFalse( $factory->has( 'unknown' ) );
+ $this->assertFalse( $factory->has( 'exists' ) );
+ $this->assertTrue( $factory->has( 'one' ) );
+ }
+
+ public function testCreate() {
+ $name = '1';
+ $factory = new TtmServerFactory(
+ [
+ $name => [
+ 'database' => false,
+ // Passed to wfGetDB
+ 'cutoff' => 0.75,
+ 'type' => 'ttmserver',
+ 'public' => false,
+ ],
+ ],
+ $name
+ );
+
+ $actual = $factory->create( $name );
+ $this->assertInstanceOf( DatabaseTTMServer::class, $actual );
+ }
+
+ /** @dataProvider provideCreateFailure */
+ public function testCreateFailure( array $input ) {
+ $factory = new TtmServerFactory( $input );
+ $this->expectException( ServiceCreationFailure::class );
+ $factory->create( '' );
+ }
+
+ public function provideCreateFailure() {
+ yield 'unknown' => [ [] ];
+ yield 'malformed' => [ [ '' => 'gibberish' ] ];
+ yield 'incomplete config' => [ [ '' => [ 'someoption' => 'somevalue' ] ] ];
+ }
+}
diff --git a/Translate/tests/phpunit/unit/Utilities/GettextPluralTest.php b/Translate/tests/phpunit/unit/Utilities/GettextPluralTest.php
new file mode 100644
index 00000000..bf4f727e
--- /dev/null
+++ b/Translate/tests/phpunit/unit/Utilities/GettextPluralTest.php
@@ -0,0 +1,142 @@
+<?php
+/**
+ * @file
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Extension\Translate\Utilities\GettextPlural;
+
+/** @coversDefaultClass \MediaWiki\Extension\Translate\Utilities\GettextPlural */
+class GettextPluralTest extends MediaWikiUnitTestCase {
+ /** @covers ::getPluralRule */
+ public function testGetPluralRule() {
+ $expected = 'nplurals=2; plural=(n != 1);';
+ $actual = GettextPlural::getPluralRule( 'en' );
+ $this->assertEquals( $expected, $actual, 'valid language code' );
+
+ $expected = '';
+ $actual = GettextPlural::getPluralRule( 'EN' );
+ $this->assertEquals( $expected, $actual, 'invalid language code' );
+ }
+
+ public static function provideGetPluralCount() {
+ yield [ 2, 'nplurals=2; plural=(n != 1);' ];
+ yield [ 1, 'nplurals=1; plural=0;' ];
+ yield [ 5, 'nplurals=5; plural=(n == 1) ? 0 : ( (n == 2) ? 1 : ( (n < 7) ? 2 :' .
+ ' ( (n < 11) ? 3 : 4 ) ) );' ];
+ yield [ 2222, 'nplurals=2222; plural=(n != 1);' ];
+ }
+
+ /**
+ * @dataProvider provideGetPluralCount
+ * @covers ::getPluralCount
+ */
+ public function testGetPluralCount( $expected, $input ) {
+ $actual = GettextPlural::getPluralCount( $input );
+ $this->assertEquals( $expected, $actual );
+ }
+
+ public static function provideGetPluralCountThrows() {
+ yield [ 'nplurals=; plural=(n != 1);' ];
+ yield [ 'hello' ];
+ }
+
+ /**
+ * @dataProvider provideGetPluralCountThrows
+ * @covers ::getPluralCount
+ */
+ public function testGetPluralCountThrows( $input ) {
+ $this->expectException( InvalidArgumentException::class );
+ GettextPlural::getPluralCount( $input );
+ }
+
+ public static function provideHasPlural() {
+ yield [ true, 'foo {{PLURAL:GETTEXT|one|many}} bar' ];
+ yield [ true, '{{PLURAL:GETTEXT|one|many}} {{PLURAL:GETTEXT|yksi|monta}}' ];
+ yield [ false, 'Pupu syö kalkkunaa' ];
+ yield [ false, '{{plural:gettext|}}' ];
+ yield [ false, '{{PLURAL:GETTEXT}}' ];
+ yield [ false, '{{PLURAL:GETEXT|aa|bee' ];
+ }
+
+ /**
+ * @dataProvider provideHasPlural
+ * @covers ::hasPlural
+ */
+ public function testHasPlural( $expected, $input ) {
+ $actual = GettextPlural::hasPlural( $input );
+ $this->assertEquals( $expected, $actual );
+ }
+
+ public static function provideFlatten() {
+ yield [
+ '{{PLURAL:GETTEXT|}}',
+ []
+ ];
+
+ yield [
+ '{{PLURAL:GETTEXT|a|b}}',
+ [ 'a', 'b' ]
+ ];
+ }
+
+ /**
+ * @dataProvider provideFlatten
+ * @covers ::flatten
+ */
+ public function testFlatten( $expected, $input ) {
+ $actual = GettextPlural::flatten( $input );
+ $this->assertEquals( $expected, $actual );
+ }
+
+ public static function provideUnflatten() {
+ yield [
+ [ 'Hei' ],
+ 'Hei',
+ 1
+ ];
+
+ yield [
+ [ 'a', 'b' ],
+ '{{PLURAL:GETTEXT|a|b}}',
+ 2,
+ ];
+
+ yield [
+ [ 'a', 'b' ],
+ '{{PLURAL:GETTEXT|a|b|c|d|e}}',
+ 2,
+ ];
+
+ yield [
+ [ 'pre a middle a post', 'pre b middle b post' ],
+ 'pre {{PLURAL:GETTEXT|a|b}} middle {{PLURAL:GETTEXT|a|b}} post',
+ 2,
+ ];
+
+ yield [
+ [ 'pre a|/|daa', 'pre b|/|dau' ],
+ 'pre {{PLURAL:GETTEXT|a|/|daa|b|/|dau}}',
+ 2,
+ ];
+
+ yield [
+ [ '{1} item waiting at {0}', '{1} items waiting at {0}' ],
+ '{{PLURAL:GETTEXT|{1} item waiting at {0}|{1} items waiting at {0}}}',
+ 2,
+ ];
+ }
+
+ /**
+ * @dataProvider provideUnflatten
+ * @covers ::unflatten
+ * @covers ::parsePluralForms
+ * @covers ::expandTemplate
+ * @covers ::armour
+ * @covers ::unarmour
+ */
+ public function testUnflatten( $expected, $inputText, $inputFormCount ) {
+ $actual = GettextPlural::unflatten( $inputText, $inputFormCount );
+ $this->assertEquals( $expected, $actual );
+ }
+}
diff --git a/Translate/tests/phpunit/unit/Utilities/ParsingPlaceholderFactoryTest.php b/Translate/tests/phpunit/unit/Utilities/ParsingPlaceholderFactoryTest.php
new file mode 100644
index 00000000..8cff7cd2
--- /dev/null
+++ b/Translate/tests/phpunit/unit/Utilities/ParsingPlaceholderFactoryTest.php
@@ -0,0 +1,24 @@
+<?php
+declare( strict_types = 1 );
+
+use MediaWiki\Extension\Translate\Utilities\ParsingPlaceholderFactory;
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\Utilities\ParsingPlaceholderFactory
+ */
+class ParsingPlaceholderFactoryTest extends MediaWikiUnitTestCase {
+ public function testMake() {
+ $obj = new ParsingPlaceholderFactory();
+
+ if ( method_exists( $this, 'assertMatchesRegularExpression' ) ) {
+ // PHPUnit 9.x+
+ $this->assertMatchesRegularExpression( '/[a-zA-Z0-9\x7f]/', $obj->make() );
+
+ } else {
+ // PHPUnit 8.x, to be dropped when dropping master compatibility with REL1_39
+ $this->assertRegExp( '/[a-zA-Z0-9\x7f]/', $obj->make() );
+ }
+ }
+}
diff --git a/Translate/tests/phpunit/unit/Utilities/SmartFormatPluralTest.php b/Translate/tests/phpunit/unit/Utilities/SmartFormatPluralTest.php
new file mode 100644
index 00000000..9ed3a8ed
--- /dev/null
+++ b/Translate/tests/phpunit/unit/Utilities/SmartFormatPluralTest.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * @file
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Extension\Translate\Utilities\SmartFormatPlural;
+
+/** @covers \MediaWiki\Extension\Translate\Utilities\SmartFormatPlural */
+class SmartFormatPluralTest extends MediaWikiUnitTestCase {
+ /** @dataProvider provideTestGetPluralInstances */
+ public function testGetPluralInstances( $input, $expected ) {
+ $actual = SmartFormatPlural::getPluralInstances( $input );
+ $this->assertEquals( $expected, $actual );
+ }
+
+ public static function provideTestGetPluralInstances() {
+ yield [
+ '{0} {0:message|messages} older than {1} {1:week|weeks} {0:has|have} been deleted.',
+ [
+ '0' => [
+ [
+ 'forms' => [ 'message', 'messages' ],
+ 'original' => '{0:message|messages}',
+ ],
+ [
+ 'forms' => [ 'has', 'have' ],
+ 'original' => '{0:has|have}',
+ ],
+ ],
+ '1' => [
+ [
+ 'forms' => [ 'week', 'weeks' ],
+ 'original' => '{1:week|weeks}',
+ ],
+ ],
+ ]
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/unit/Utilities/UnicodePluralTest.php b/Translate/tests/phpunit/unit/Utilities/UnicodePluralTest.php
new file mode 100644
index 00000000..a7f4498d
--- /dev/null
+++ b/Translate/tests/phpunit/unit/Utilities/UnicodePluralTest.php
@@ -0,0 +1,170 @@
+<?php
+/**
+ * @file
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Extension\Translate\Utilities\UnicodePlural;
+
+/** @coversDefaultClass \MediaWiki\Extension\Translate\Utilities\UnicodePlural */
+class UnicodePluralTest extends MediaWikiUnitTestCase {
+ /** @covers ::getPluralKeywords */
+ public function testGetPluralKeywords() {
+ $expected = [ 'one', 'other' ];
+ $actual = UnicodePlural::getPluralKeywords( 'en' );
+ $this->assertEquals( $expected, $actual, 'valid language code' );
+
+ $expected = null;
+ $actual = UnicodePlural::getPluralKeywords( 'EN' );
+ $this->assertEquals( $expected, $actual, 'invalid language code' );
+ }
+
+ public static function provideHasPlural() {
+ yield [ true, 'foo {{PLURAL|one=one|many}} bar' ];
+ yield [ true, '{{PLURAL|one=one|many}} {{PLURAL|one=yksi|monta}}' ];
+ yield [ false, 'Pupu syö kalkkunaa' ];
+ yield [ false, '{{plural|unicode|}}' ];
+ yield [ false, '{{PLURAL}}' ];
+ yield [ false, '{{PLURAL:aa|bee' ];
+ }
+
+ /**
+ * @dataProvider provideHasPlural
+ * @covers ::hasPlural
+ */
+ public function testHasPlural( $expected, $input ) {
+ $actual = UnicodePlural::hasPlural( $input );
+ $this->assertEquals( $expected, $actual );
+ }
+
+ public static function provideFlattenList() {
+ yield [
+ '{{PLURAL|}}',
+ []
+ ];
+
+ yield [
+ '{{PLURAL|one=a|b}}',
+ [ [ 'one', 'a' ], [ 'other', 'b' ] ],
+ ];
+
+ yield [
+ '{{PLURAL|one=a|one=b}}',
+ [ [ 'one', 'a' ], [ 'one', 'b' ] ],
+ ];
+ }
+
+ /**
+ * @dataProvider provideFlattenList
+ * @covers ::flattenList
+ * @covers ::formatForm
+ */
+ public function testFlattenList( $expected, $input ) {
+ $actual = UnicodePlural::flattenList( $input );
+ $this->assertEquals( $expected, $actual );
+ }
+
+ public static function provideFlattenMap() {
+ yield [
+ '{{PLURAL|}}',
+ []
+ ];
+
+ yield [
+ '{{PLURAL|one=a|b}}',
+ [ 'one' => 'a', 'other' => 'b' ],
+ ];
+
+ yield [
+ '{{PLURAL|one=a|two=b|c}}',
+ [ 'one' => 'a', 'two' => 'b', 'other' => 'c' ],
+ ];
+ }
+
+ /**
+ * @dataProvider provideFlattenMap
+ * @covers ::flattenMap
+ */
+ public function testFlattenMap( $expected, $input ) {
+ $actual = UnicodePlural::flattenMap( $input );
+ $this->assertEquals( $expected, $actual );
+ }
+
+ public static function provideUnflatten() {
+ yield [
+ [ 'other' => 'Hei' ],
+ 'Hei',
+ [ 'other' ]
+ ];
+
+ yield [
+ [ 'one' => 'a', 'other' => 'b' ],
+ '{{PLURAL|one=a|b}}',
+ [ 'one', 'other' ],
+ ];
+
+ yield [
+ [ 'one' => 'a', 'other' => 'e' ],
+ '{{PLURAL|one=a|b|c|d|e}}',
+ [ 'one', 'other' ],
+ ];
+
+ yield [
+ [ 'one' => 'pre a middle a post', 'other' => 'pre b middle b post' ],
+ 'pre {{PLURAL|one=a|b}} middle {{PLURAL|one=a|b}} post',
+ [ 'one', 'other' ],
+ ];
+
+ yield [
+ [ 'a' => 'A', 'b' => 'B', 'c' => '' ],
+ "{{PLURAL| a = A |\nb\n=\nB\n}}",
+ [ 'a', 'b', 'c' ]
+ ];
+
+ yield [
+ [ 'a' => 'A' ],
+ "{{PLURAL| a = A |\nb\n=\nB\n}}",
+ [ 'a' ]
+ ];
+ }
+
+ /**
+ * @dataProvider provideUnflatten
+ * @covers ::unflatten
+ * @covers ::parsePluralForms
+ * @covers ::expandTemplate
+ */
+ public function testUnflatten( $expected, $inputText, $keywords ) {
+ $actual = UnicodePlural::unflatten( $inputText, $keywords );
+ $this->assertEquals( $expected, $actual );
+ }
+
+ public static function provideConvertFormListToFormMap() {
+ yield [
+ [ 'one' => 'B', 'other' => 'C' ],
+ [ [ 'one', 'A' ], [ 'one', 'B' ], [ 'other', 'C' ] ],
+ [ 'one', 'other' ],
+ ];
+
+ yield [
+ [ 'a' => 'A', 'b' => 'B', 'c' => '' ],
+ [ [ 'a', 'A' ], [ 'b', 'B' ] ],
+ [ 'a', 'b', 'c' ]
+ ];
+
+ yield [
+ [ 'a' => 'A' ],
+ [ [ 'a', 'A' ], [ 'b', 'B' ] ],
+ [ 'a' ]
+ ];
+ }
+
+ /**
+ * @dataProvider provideConvertFormListToFormMap
+ * @covers ::convertFormListToFormMap
+ */
+ public function testConvertFormListToFormMap( $expected, array $formsList, array $keywords ) {
+ $actual = UnicodePlural::convertFormListToFormMap( $formsList, $keywords );
+ $this->assertEquals( $expected, $actual );
+ }
+}
diff --git a/Translate/tests/phpunit/unit/Validation/Validators/BaseValidatorTestCase.php b/Translate/tests/phpunit/unit/Validation/Validators/BaseValidatorTestCase.php
new file mode 100644
index 00000000..8b2afb2f
--- /dev/null
+++ b/Translate/tests/phpunit/unit/Validation/Validators/BaseValidatorTestCase.php
@@ -0,0 +1,39 @@
+<?php
+declare( strict_types = 1 );
+
+use MediaWiki\Extension\Translate\Validation\MessageValidator;
+use MediaWiki\Extension\Translate\Validation\ValidationIssue;
+use MediaWiki\Extension\Translate\Validation\ValidationIssues;
+
+/**
+ * Base class for translation validator tests
+ * @license GPL-2.0-or-later
+ */
+class BaseValidatorTestCase extends MediaWikiUnitTestCase {
+ public function runValidatorTests(
+ MessageValidator $validator,
+ string $type,
+ string $definition,
+ ?string $translation,
+ array $subTypes,
+ string $msg
+ ) {
+ $message = new FatMessage( 'key', $definition );
+ $message->setTranslation( $translation );
+
+ // Target language code should have valid CLDR plural rules
+ $actual = $validator->getIssues( $message, 'fr' );
+ foreach ( $actual as $issue ) {
+ /** @var ValidationIssue $issue */
+ $this->assertSame( $type, $issue->type(), $msg );
+ }
+ $this->assertArrayEquals( $subTypes, self::getSubTypes( $actual ) );
+ }
+
+ /** @return string[] */
+ private static function getSubTypes( ValidationIssues $issues ): array {
+ return array_map( static function ( ValidationIssue $x ) {
+ return $x->subType();
+ }, iterator_to_array( $issues ) );
+ }
+}
diff --git a/Translate/tests/phpunit/unit/Validation/Validators/BraceBalanceValidatorTest.php b/Translate/tests/phpunit/unit/Validation/Validators/BraceBalanceValidatorTest.php
new file mode 100644
index 00000000..2e0f6dcc
--- /dev/null
+++ b/Translate/tests/phpunit/unit/Validation/Validators/BraceBalanceValidatorTest.php
@@ -0,0 +1,45 @@
+<?php
+declare( strict_types = 1 );
+
+use MediaWiki\Extension\Translate\Validation\Validators\BraceBalanceValidator;
+
+/**
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\Validation\Validators\BraceBalanceValidator
+ */
+class BraceBalanceValidatorTest extends BaseValidatorTestCase {
+ /** @dataProvider provideTestCases */
+ public function test( ...$params ) {
+ $this->runValidatorTests( new BraceBalanceValidator(), 'balance', ...$params );
+ }
+
+ public function provideTestCases() {
+ yield [
+ '{{ Hello }}',
+ '{{ Hello }}}',
+ [ 'brace' ],
+ 'should return an issue for a message containing non-matching braces.'
+ ];
+
+ yield [
+ '[[ Hello ]]',
+ '[[ Hello ]]',
+ [],
+ 'should not set any issue for a balanced translation.'
+ ];
+
+ yield [
+ 'Hello :]',
+ 'Hello :]',
+ [],
+ 'should not set any issue if definition is unbalanced.'
+ ];
+
+ yield [
+ 'Hello :]',
+ 'Hello :)',
+ [ 'brace' ],
+ 'balancedness only applies to one brace type, for other types still raise an issue.'
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/unit/Validation/Validators/EscapeCharacterValidatorTest.php b/Translate/tests/phpunit/unit/Validation/Validators/EscapeCharacterValidatorTest.php
new file mode 100644
index 00000000..384fa75a
--- /dev/null
+++ b/Translate/tests/phpunit/unit/Validation/Validators/EscapeCharacterValidatorTest.php
@@ -0,0 +1,68 @@
+<?php
+declare( strict_types = 1 );
+
+use MediaWiki\Extension\Translate\Validation\Validators\EscapeCharacterValidator;
+
+/**
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\Validation\Validators\EscapeCharacterValidator
+ */
+class EscapeCharacterValidatorTest extends BaseValidatorTestCase {
+ /** @dataProvider provideTestCases */
+ public function test( $constructorParams, ...$params ) {
+ $validator = new EscapeCharacterValidator( $constructorParams );
+ $this->runValidatorTests( $validator, 'escape', ...$params );
+ }
+
+ public function provideTestCases() {
+ $message = new FatMessage( 'key', 'Hello' );
+
+ yield [
+ [ 'values' => [ '\n', '\\\\' ] ],
+ 'Hello',
+ 'Hello\n',
+ [],
+ 'Correct escape is not an issue'
+ ];
+
+ yield [
+ [ 'values' => [ '\b' ] ],
+ 'Hello',
+ 'Hello\n',
+ [ 'invalid' ],
+ 'Unsupported escape is an issue'
+ ];
+
+ yield [
+ [ 'values' => [ '\\\\', '\n' ] ],
+ 'Hello',
+ 'Hello\b',
+ [ 'invalid' ],
+ 'Unsupported escape is an issue'
+ ];
+
+ yield [
+ [ 'values' => [ '\\\\', '\n' ] ],
+ 'Hello',
+ 'Hello\\\\',
+ [],
+ 'Correct escape is not an issue'
+ ];
+ }
+
+ public function testEmptyValues() {
+ $this->expectException( InvalidArgumentException::class );
+ $this->expectExceptionMessageMatches( '/no values provided/i' );
+ new EscapeCharacterValidator( [
+ 'values' => [],
+ ] );
+ }
+
+ public function testInvalidEscape() {
+ $this->expectException( InvalidArgumentException::class );
+ $this->expectExceptionMessageMatches( '/invalid escape character/i' );
+ new EscapeCharacterValidator( [
+ 'values' => [ '\c' ],
+ ] );
+ }
+}
diff --git a/Translate/tests/phpunit/unit/Validation/Validators/GettextNewlineValidatorTest.php b/Translate/tests/phpunit/unit/Validation/Validators/GettextNewlineValidatorTest.php
new file mode 100644
index 00000000..e2828f1b
--- /dev/null
+++ b/Translate/tests/phpunit/unit/Validation/Validators/GettextNewlineValidatorTest.php
@@ -0,0 +1,45 @@
+<?php
+declare( strict_types = 1 );
+
+use MediaWiki\Extension\Translate\Validation\Validators\GettextNewlineValidator;
+
+/**
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\Validation\Validators\GettextNewlineValidator
+ */
+class GettextNewlineValidatorTest extends BaseValidatorTestCase {
+ /** @dataProvider provideTestCases */
+ public function test( ...$params ) {
+ $this->runValidatorTests( new GettextNewlineValidator(), 'newline', ...$params );
+ }
+
+ public function provideTestCases() {
+ yield [
+ "\n\nHello\n\n\\",
+ "\nHello World\n\n\n\\",
+ [ 'missing-start', 'extra-end' ],
+ 'should see a notice due to missing / extra newlines.',
+ ];
+
+ yield [
+ "\nHello\n\\",
+ "\nHello World\n\\",
+ [],
+ 'should not see a notice when newlines are matching.',
+ ];
+
+ yield [
+ "\n\nHello",
+ "\nHello World",
+ [ 'missing-start' ],
+ 'should see a notice due to missing / extra newlines.',
+ ];
+
+ yield [
+ "Hello",
+ "Hello World\n\\",
+ [ 'extra-end' ],
+ 'should see a notice due to missing / extra newlines.',
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/unit/Validation/Validators/GettextPluralValidatorTest.php b/Translate/tests/phpunit/unit/Validation/Validators/GettextPluralValidatorTest.php
new file mode 100644
index 00000000..a3e6dc83
--- /dev/null
+++ b/Translate/tests/phpunit/unit/Validation/Validators/GettextPluralValidatorTest.php
@@ -0,0 +1,54 @@
+<?php
+declare( strict_types = 1 );
+
+use MediaWiki\Extension\Translate\Validation\Validators\GettextPluralValidator;
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\Validation\Validators\GettextPluralValidator
+ */
+class GettextPluralValidatorTest extends BaseValidatorTestCase {
+ /** @dataProvider provideTestCases */
+ public function test( ...$params ) {
+ $this->runValidatorTests( new GettextPluralValidator(), 'plural', ...$params );
+ }
+
+ public function provideTestCases() {
+ // Note that BaseValidatorTestCase uses 'fr' as target language
+ yield [
+ '{{PLURAL:GETTEXT|meter|meters}}',
+ '{{PLURAL:GETTEXT|metre|metres}}',
+ [],
+ 'Correct number of plural forms is not an issue'
+ ];
+
+ yield [
+ '{{PLURAL:GETTEXT|meter|meters}}',
+ '{{PLURAL:GETTEXT|metre|metres|so many metres}}',
+ [ 'forms' ],
+ 'Extra plural form is an issue'
+ ];
+
+ yield [
+ '{{PLURAL:GETTEXT|meter|meters}}',
+ '{{PLURAL:GETTEXT|metres}}',
+ [ 'forms' ],
+ 'Missing plural form is an issue'
+ ];
+
+ yield [
+ '{{PLURAL:GETTEXT|meter|meters}}',
+ 'metres',
+ [ 'missing' ],
+ 'Missing plural is an issue'
+ ];
+
+ yield [
+ 'meters',
+ '{{PLURAL:GETTEXT|meter|meters}}',
+ [ 'unsupported' ],
+ 'Plural in translation when lacking in the source an issue'
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/unit/Validation/Validators/InsertableRegexValidatorTest.php b/Translate/tests/phpunit/unit/Validation/Validators/InsertableRegexValidatorTest.php
new file mode 100644
index 00000000..dc008579
--- /dev/null
+++ b/Translate/tests/phpunit/unit/Validation/Validators/InsertableRegexValidatorTest.php
@@ -0,0 +1,42 @@
+<?php
+declare( strict_types = 1 );
+
+use MediaWiki\Extension\Translate\Validation\Validators\InsertableRegexValidator;
+
+/**
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\Validation\Validators\InsertableRegexValidator
+ */
+class InsertableRegexValidatorTest extends BaseValidatorTestCase {
+ /** @dataProvider provideTestCases */
+ public function test( $constructorParams, ...$params ) {
+ $validator = new InsertableRegexValidator( $constructorParams );
+ $this->runValidatorTests( $validator, 'variable', ...$params );
+ }
+
+ public function provideTestCases() {
+ yield [
+ '/\$[a-z0-9]+/',
+ '$contacts is $diff less than that.',
+ '$contacts2 as $diff2 less.',
+ [ 'missing', 'unknown' ],
+ 'should correctly identifiy the missing and unknown parameters.'
+ ];
+
+ yield [
+ [ 'regex' => '/\$[a-z0-9]+/' ],
+ '$contacts is $diff less than that.',
+ '$contacts less.',
+ [ 'missing' ],
+ 'should correctly identifiy the missing parameters.'
+ ];
+
+ yield [
+ '/<[a-z]+>/',
+ '<hello> <world>',
+ '<hello> <world> <msg>',
+ [ 'unknown' ],
+ 'should correctly identify the unknown parameters.'
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/unit/Validation/Validators/InsertableRubyVariableValidatorTest.php b/Translate/tests/phpunit/unit/Validation/Validators/InsertableRubyVariableValidatorTest.php
new file mode 100644
index 00000000..af67dfac
--- /dev/null
+++ b/Translate/tests/phpunit/unit/Validation/Validators/InsertableRubyVariableValidatorTest.php
@@ -0,0 +1,38 @@
+<?php
+declare( strict_types = 1 );
+
+use MediaWiki\Extension\Translate\Validation\Validators\InsertableRubyVariableValidator;
+
+/**
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\Validation\Validators\InsertableRubyVariableValidator
+ */
+class InsertableRubyValidatorTest extends BaseValidatorTestCase {
+ /** @dataProvider provideTestCases */
+ public function test( ...$params ) {
+ $this->runValidatorTests( new InsertableRubyVariableValidator(), 'variable', ...$params );
+ }
+
+ public function provideTestCases() {
+ yield [
+ 'Test variable - %{ruby} %{ruby2}',
+ '%{hello} - Testing translation',
+ [ 'missing', 'unknown' ],
+ 'should return proper notices for missing and non-matching variables.'
+ ];
+
+ yield [
+ 'Testing variables - %{ruby} %{php}',
+ 'Another testing - %{ruby} %{ruby2}',
+ [ 'missing' ],
+ 'should see a notice set when parameter names don\'t match.'
+ ];
+
+ yield [
+ 'Testing variables - %{ruby} %{php}',
+ 'Another testing - %{ruby} %{php}',
+ [],
+ 'should not set any notice for a valid message.'
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/unit/Validation/Validators/IosVariableValidatorTest.php b/Translate/tests/phpunit/unit/Validation/Validators/IosVariableValidatorTest.php
new file mode 100644
index 00000000..e7a0e1db
--- /dev/null
+++ b/Translate/tests/phpunit/unit/Validation/Validators/IosVariableValidatorTest.php
@@ -0,0 +1,38 @@
+<?php
+declare( strict_types = 1 );
+
+use MediaWiki\Extension\Translate\Validation\Validators\IosVariableValidator;
+
+/**
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\Validation\Validators\IosVariableValidator
+ */
+class IosVariableValidatorTest extends BaseValidatorTestCase {
+ /** @dataProvider provideTestCases */
+ public function test( ...$params ) {
+ $this->runValidatorTests( new IosVariableValidator(), 'variable', ...$params );
+ }
+
+ public static function provideTestCases() {
+ yield [
+ 'My name is %@',
+ 'This is invalid',
+ [ 'missing' ],
+ 'missing %@ is an issue'
+ ];
+
+ yield [
+ 'My name is %5d',
+ 'This is invalid',
+ [ 'missing' ],
+ 'missing %5d is an issue'
+ ];
+
+ yield [
+ 'My name is %ld.',
+ 'This is invalid: %ld %d.',
+ [ 'unknown' ],
+ 'unknown %d is an issue'
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/unit/Validation/Validators/MatchSetValidatorTest.php b/Translate/tests/phpunit/unit/Validation/Validators/MatchSetValidatorTest.php
new file mode 100644
index 00000000..9ca10165
--- /dev/null
+++ b/Translate/tests/phpunit/unit/Validation/Validators/MatchSetValidatorTest.php
@@ -0,0 +1,49 @@
+<?php
+declare( strict_types = 1 );
+
+use MediaWiki\Extension\Translate\Validation\Validators\MatchSetValidator;
+
+/**
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\Validation\Validators\MatchSetValidator
+ */
+class MatchSetValidatorTest extends BaseValidatorTestCase {
+ /** @dataProvider provideTestCases */
+ public function test( $constructorParams, ...$params ) {
+ $validator = new MatchSetValidator( $constructorParams );
+ $this->runValidatorTests( $validator, 'value-not-present', ...$params );
+ }
+
+ public function provideTestCases() {
+ yield [
+ [ 'values' => [ 'rtl', 'Ltr' ] ],
+ 'rtl',
+ 'ltr',
+ [ 'invalid' ],
+ 'Wrong case (case-sensitive) is an issue'
+ ];
+
+ yield [
+ [ 'values' => [ 'rtl', 'Ltr' ], 'caseSensitive' => false ],
+ 'rtl',
+ 'ltr',
+ [],
+ 'Matching value (case-insensitive) is not an issue'
+ ];
+
+ yield [
+ [ 'values' => [ 'rtl', 'etc' ] ],
+ 'rtl',
+ 'ltr',
+ [ 'invalid' ],
+ 'Wrong value (case-sensitive) is an issue'
+ ];
+ }
+
+ public function testEmptyValues() {
+ $this->expectException( InvalidArgumentException::class );
+ new MatchSetValidator( [
+ 'values' => [],
+ ] );
+ }
+}
diff --git a/Translate/tests/phpunit/unit/Validation/Validators/MediaWikiLinkValidatorTest.php b/Translate/tests/phpunit/unit/Validation/Validators/MediaWikiLinkValidatorTest.php
new file mode 100644
index 00000000..eaaa1155
--- /dev/null
+++ b/Translate/tests/phpunit/unit/Validation/Validators/MediaWikiLinkValidatorTest.php
@@ -0,0 +1,40 @@
+<?php
+declare( strict_types = 1 );
+
+use MediaWiki\Extension\Translate\Validation\Validators\MediaWikiLinkValidator;
+
+/**
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\Validation\Validators\MediaWikiLinkValidator
+ */
+class MediaWikiLinkValidatorTest extends BaseValidatorTestCase {
+ /** @dataProvider provideTestCases */
+ public function test( ...$params ) {
+ $this->runValidatorTests( new MediaWikiLinkValidator(), 'links', ...$params );
+ }
+
+ public function provideTestCases() {
+ yield [
+ '[[$3|Hello]] [[#Hello|Hello World]]',
+ 'Hello world',
+ [ 'missing' ],
+ 'Two links missing is an issue'
+
+ ];
+
+ yield [
+ '[[$3|Hello]] [[#Hello|Hello World]]',
+ '[[$3|Hola]] [[#Hello|Hey]]',
+ [],
+ 'All links present, no issue'
+
+ ];
+
+ yield [
+ '[[$3|Hello]] [[#Hello|Hello World]]',
+ '[[$3|Food]] [[#Hey|Hey]]',
+ [ 'missing', 'extra' ],
+ 'One link changed is two issues'
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/unit/Validation/Validators/MediaWikiPageNameValidatorTest.php b/Translate/tests/phpunit/unit/Validation/Validators/MediaWikiPageNameValidatorTest.php
new file mode 100644
index 00000000..fbc47ed5
--- /dev/null
+++ b/Translate/tests/phpunit/unit/Validation/Validators/MediaWikiPageNameValidatorTest.php
@@ -0,0 +1,38 @@
+<?php
+declare( strict_types = 1 );
+
+use MediaWiki\Extension\Translate\Validation\Validators\MediaWikiPageNameValidator;
+
+/**
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\Validation\Validators\MediaWikiPageNameValidator
+ */
+class MediaWikiPageNameValidatorTest extends BaseValidatorTestCase {
+ /** @dataProvider provideTestCases */
+ public function test( ...$params ) {
+ $this->runValidatorTests( new MediaWikiPageNameValidator(), 'pagename', ...$params );
+ }
+
+ public function provideTestCases() {
+ yield [
+ '{{ns:project}}:hello',
+ '{{ns:hello}}:hello',
+ [ 'namespace' ],
+ 'Changed namespace is an issue'
+ ];
+
+ yield [
+ 'help:me',
+ 'help:me',
+ [],
+ 'Unchanged namespace is not an issue'
+ ];
+
+ yield [
+ '{{ns:project}}:hello',
+ '{{ns:project}}:Hey!',
+ [],
+ 'Unchanged namespace is not an issue'
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/unit/Validation/Validators/MediaWikiParameterValidatorTest.php b/Translate/tests/phpunit/unit/Validation/Validators/MediaWikiParameterValidatorTest.php
new file mode 100644
index 00000000..f2ba8d86
--- /dev/null
+++ b/Translate/tests/phpunit/unit/Validation/Validators/MediaWikiParameterValidatorTest.php
@@ -0,0 +1,53 @@
+<?php
+declare( strict_types = 1 );
+
+use MediaWiki\Extension\Translate\Validation\Validators\MediaWikiParameterValidator;
+
+/**
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\Validation\Validators\MediaWikiParameterValidator
+ */
+class MediaWikiParameterValidatorTest extends BaseValidatorTestCase {
+ /** @dataProvider provideTestCases */
+ public function test( ...$params ) {
+ $this->runValidatorTests( new MediaWikiParameterValidator(), 'variable', ...$params );
+ }
+
+ public static function provideTestCases() {
+ yield [
+ '$1',
+ 'a',
+ [ 'missing' ],
+ 'missing variable is an issue'
+ ];
+
+ yield [
+ '$1',
+ '$2',
+ [ 'missing', 'unknown' ],
+ 'typoed variable is two issues'
+ ];
+
+ yield [
+ 'a',
+ '$1',
+ [ 'unknown' ],
+ 'unknown variable is an issue'
+ ];
+
+ yield [
+ '$1$2 $3',
+ '$3$2 $1',
+ [],
+ 'all variables used is not an issue'
+ ];
+
+ // This fails, deprecate this class in favor of NumericalParameterValidator?
+ /*yield [
+ '$13',
+ '$12',
+ [ 'missing' ],
+ 'missing large variable is an issue'
+ ];*/
+ }
+}
diff --git a/Translate/tests/phpunit/unit/Validation/Validators/MediaWikiTimeListValidatorTest.php b/Translate/tests/phpunit/unit/Validation/Validators/MediaWikiTimeListValidatorTest.php
new file mode 100644
index 00000000..127274c7
--- /dev/null
+++ b/Translate/tests/phpunit/unit/Validation/Validators/MediaWikiTimeListValidatorTest.php
@@ -0,0 +1,60 @@
+<?php
+declare( strict_types = 1 );
+
+use MediaWiki\Extension\Translate\Validation\Validators\MediaWikiTimeListValidator;
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\Validation\Validators\MediaWikiTimeListValidator
+ */
+class MediaWikiTimeListValidatorTest extends BaseValidatorTestCase {
+ /** @dataProvider provideTestCases */
+ public function test( ...$params ) {
+ $this->runValidatorTests( new MediaWikiTimeListValidator(), 'miscmw', ...$params );
+ }
+
+ public static function provideTestCases() {
+ yield [
+ '2 hours:2 hours,1 day:1 day',
+ '2 tuntia:2 hours,1 päivä:1 day',
+ [],
+ 'Good translation is not an issue'
+ ];
+
+ yield [
+ '2 hours:2 hours,1 day:1 day,1 week:1 week',
+ '2 tuntia:2 hours,1 päivä:1 day',
+ [ 'timelist-count' ],
+ 'Missing option is an issue'
+ ];
+
+ yield [
+ '2 hours:2 hours,1 day:1 day',
+ '2 tuntia:2 hours,1 päivä:1 day,1 viikko: 1 week',
+ [ 'timelist-count' ],
+ 'Extra option is an issue'
+ ];
+
+ yield [
+ '2 hours:2 hours,1 day:1 day',
+ '2 tuntia:2 hours,2 days:2 päivää',
+ [ 'timelist-format-value' ],
+ 'Changed option is an issue'
+ ];
+
+ yield [
+ '2 hours:2 hours,1 day:1 day',
+ '2 tuntia:2 hours,1 day:1 päivä: 2 piävää:',
+ [ 'timelist-format' ],
+ 'Wrong format is an issue'
+ ];
+
+ yield [
+ '2 hours:2 hours,1 day:1 day',
+ '1 päivä:1 day,2 tuntia:2 hours',
+ [ 'timelist-format-value', 'timelist-format-value' ],
+ 'Changed order is an issue'
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/unit/Validation/Validators/NewlineValidatorTest.php b/Translate/tests/phpunit/unit/Validation/Validators/NewlineValidatorTest.php
new file mode 100644
index 00000000..6e310f50
--- /dev/null
+++ b/Translate/tests/phpunit/unit/Validation/Validators/NewlineValidatorTest.php
@@ -0,0 +1,45 @@
+<?php
+declare( strict_types = 1 );
+
+use MediaWiki\Extension\Translate\Validation\Validators\NewlineValidator;
+
+/**
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\Validation\Validators\NewlineValidator
+ */
+class NewlineValidatorTest extends BaseValidatorTestCase {
+ /** @dataProvider provideTestCases */
+ public function test( ...$params ) {
+ $this->runValidatorTests( new NewlineValidator(), 'newline', ...$params );
+ }
+
+ public function provideTestCases() {
+ yield [
+ 'Hello',
+ 'Hello World',
+ [],
+ 'should not see a notice when newlines are not present.',
+ ];
+
+ yield [
+ "\nHello",
+ "\nHello World",
+ [],
+ 'should not see a notice when newlines are matching.',
+ ];
+
+ yield [
+ "\n\nHello",
+ "\nHello World",
+ [ 'missing-start' ],
+ 'should see a notice due to missing starting newlines.',
+ ];
+
+ yield [
+ "Hello",
+ "\nHello World",
+ [ 'extra-start' ],
+ 'should see a notice due to extra starting newlines.',
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/unit/Validation/Validators/NotEmptyValidatorTest.php b/Translate/tests/phpunit/unit/Validation/Validators/NotEmptyValidatorTest.php
new file mode 100644
index 00000000..b95fa5a4
--- /dev/null
+++ b/Translate/tests/phpunit/unit/Validation/Validators/NotEmptyValidatorTest.php
@@ -0,0 +1,45 @@
+<?php
+declare( strict_types = 1 );
+
+use MediaWiki\Extension\Translate\Validation\Validators\NotEmptyValidator;
+
+/**
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\Validation\Validators\NotEmptyValidator
+ */
+class NotEmptyValidatorTest extends BaseValidatorTestCase {
+ /** @dataProvider provideTestCases */
+ public function test( ...$params ) {
+ $this->runValidatorTests( new NotEmptyValidator(), 'empty', ...$params );
+ }
+
+ public function provideTestCases() {
+ yield [
+ 'Hello',
+ '',
+ [ 'empty' ],
+ 'should see a notice when an empty translation is provided.',
+ ];
+
+ yield [
+ 'Hello',
+ " \n ",
+ [ 'empty' ],
+ 'should see a notice when a translation with newlines is provided.',
+ ];
+
+ yield [
+ 'Hello',
+ 'Hello World',
+ [],
+ 'should not see a notice when translation is not an empty string.',
+ ];
+
+ yield [
+ 'Hello',
+ null,
+ [],
+ 'should not see a notice when translation is null.'
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/unit/Validation/Validators/NumericalParameterValidatorTest.php b/Translate/tests/phpunit/unit/Validation/Validators/NumericalParameterValidatorTest.php
new file mode 100644
index 00000000..c4665c8c
--- /dev/null
+++ b/Translate/tests/phpunit/unit/Validation/Validators/NumericalParameterValidatorTest.php
@@ -0,0 +1,45 @@
+<?php
+declare( strict_types = 1 );
+
+use MediaWiki\Extension\Translate\Validation\Validators\NumericalParameterValidator;
+
+/**
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\Validation\Validators\NumericalParameterValidator
+ */
+class NumericalParameterValidatorTest extends BaseValidatorTestCase {
+ /** @dataProvider provideTestCases */
+ public function test( ...$params ) {
+ $this->runValidatorTests( new NumericalParameterValidator(), 'variable', ...$params );
+ }
+
+ public static function provideTestCases() {
+ yield [
+ '$12',
+ 'a',
+ [ 'missing' ],
+ 'missing variable is an issue'
+ ];
+
+ yield [
+ '$1',
+ '$2',
+ [ 'missing', 'unknown' ],
+ 'typoed variable is two issues'
+ ];
+
+ yield [
+ 'a',
+ '$11',
+ [ 'unknown' ],
+ 'unknown variable is an issue'
+ ];
+
+ yield [
+ '$32',
+ '$32',
+ [],
+ 'all variables used, no issues',
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/unit/Validation/Validators/PrintfValidatorTest.php b/Translate/tests/phpunit/unit/Validation/Validators/PrintfValidatorTest.php
new file mode 100644
index 00000000..666d7bfd
--- /dev/null
+++ b/Translate/tests/phpunit/unit/Validation/Validators/PrintfValidatorTest.php
@@ -0,0 +1,62 @@
+<?php
+declare( strict_types = 1 );
+
+use MediaWiki\Extension\Translate\Validation\Validators\PrintfValidator;
+
+/**
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\Validation\Validators\PrintfValidator
+ */
+class PrintfValidatorTest extends BaseValidatorTestCase {
+ /** @dataProvider provideTestCases */
+ public function test( ...$params ) {
+ $this->runValidatorTests( new PrintfValidator(), 'variable', ...$params );
+ }
+
+ public static function provideTestCases() {
+ $key = 'key';
+ $code = 'en';
+
+ yield [
+ '%2$f',
+ 'a',
+ [ 'missing' ],
+ 'missing positional variable is an issue'
+ ];
+
+ yield [
+ '%2$f',
+ '%3$d',
+ [ 'missing', 'unknown' ],
+ 'typoed variable is two issues'
+ ];
+
+ yield [
+ 'abc',
+ '%4$d',
+ [ 'unknown' ],
+ 'unknown positional variable is an issue'
+ ];
+
+ yield [
+ '%2$f',
+ '%2$f',
+ [],
+ 'all variables are used, no issues'
+ ];
+
+ yield [
+ '%2$.2f',
+ '%2$f',
+ [ 'missing', 'unknown' ],
+ 'changing precision is not supported'
+ ];
+
+ yield [
+ '%.2f',
+ '%2$f',
+ [ 'missing', 'unknown' ],
+ 'changing precision and position is not supported'
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/unit/Validation/Validators/PythonInterpolationValidatorTest.php b/Translate/tests/phpunit/unit/Validation/Validators/PythonInterpolationValidatorTest.php
new file mode 100644
index 00000000..456b2b51
--- /dev/null
+++ b/Translate/tests/phpunit/unit/Validation/Validators/PythonInterpolationValidatorTest.php
@@ -0,0 +1,45 @@
+<?php
+declare( strict_types = 1 );
+
+use MediaWiki\Extension\Translate\Validation\Validators\PythonInterpolationValidator;
+
+/**
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\Validation\Validators\PythonInterpolationValidator
+ */
+class PythonInterpolationValidatorTest extends BaseValidatorTestCase {
+ /** @dataProvider provideTestCases */
+ public function test( ...$params ) {
+ $this->runValidatorTests( new PythonInterpolationValidator(), 'variable', ...$params );
+ }
+
+ public static function provideTestCases() {
+ yield [
+ 'My name is %s',
+ 'This is invalid',
+ [ 'missing' ],
+ 'missing unnamed variable is an issue'
+ ];
+
+ yield [
+ 'My name is %(name)s',
+ 'This is invalid.',
+ [ 'missing' ],
+ 'missing named variable is an issue'
+ ];
+
+ yield [
+ 'My name is %(name)s',
+ 'This is an invalid %(aaaa)d %(name)s variable.',
+ [ 'unknown' ],
+ 'unknown named variable is an issue'
+ ];
+
+ yield [
+ 'My name is %s',
+ 'This is a value: %s',
+ [],
+ 'all variables are used, not an issue'
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/unit/Validation/Validators/ReplacementValidatorTest.php b/Translate/tests/phpunit/unit/Validation/Validators/ReplacementValidatorTest.php
new file mode 100644
index 00000000..31cf88a1
--- /dev/null
+++ b/Translate/tests/phpunit/unit/Validation/Validators/ReplacementValidatorTest.php
@@ -0,0 +1,47 @@
+<?php
+declare( strict_types = 1 );
+
+use MediaWiki\Extension\Translate\Validation\Validators\ReplacementValidator;
+
+/**
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\Validation\Validators\ReplacementValidator
+ */
+class ReplacementValidatorTest extends BaseValidatorTestCase {
+ /** @dataProvider provideTestCases */
+ public function test( $constructorParams, ...$params ) {
+ $validator = new ReplacementValidator( $constructorParams );
+ $this->runValidatorTests( $validator, 'replacement', ...$params );
+ }
+
+ public static function provideTestCases() {
+ yield [
+ [ 'search' => 'rude', 'replace' => 'nice' ],
+ 'Grumpy bunny is kind',
+ 'Grumpy bunny is rude',
+ [ 'replacement' ],
+ 'Search match is an issue'
+ ];
+
+ yield [
+ [ 'search' => 'rude', 'replace' => 'nice' ],
+ 'Grumpy bunny is kind',
+ 'Grumpy bunny is nice',
+ [],
+ 'No match is not an issue'
+ ];
+ }
+
+ /** @dataProvider provideBadTestCases */
+ public function testBadValues( $params ) {
+ $this->expectException( InvalidArgumentException::class );
+ new ReplacementValidator( $params );
+ }
+
+ public static function provideBadTestCases() {
+ yield [ [ 'oma maa' ] ];
+ yield [ [ 'source' => 'mansikka' ] ];
+ yield [ [ 'replacement' => 'mustikka' ] ];
+ }
+}
diff --git a/Translate/tests/phpunit/unit/Validation/Validators/SmartFormatPluralValidatorTest.php b/Translate/tests/phpunit/unit/Validation/Validators/SmartFormatPluralValidatorTest.php
new file mode 100644
index 00000000..5303fef2
--- /dev/null
+++ b/Translate/tests/phpunit/unit/Validation/Validators/SmartFormatPluralValidatorTest.php
@@ -0,0 +1,75 @@
+<?php
+declare( strict_types = 1 );
+
+use MediaWiki\Extension\Translate\Validation\Validators\SmartFormatPluralValidator;
+
+/**
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\Validation\Validators\SmartFormatPluralValidator
+ */
+class SmartFormatPluralValidatorTest extends BaseValidatorTestCase {
+ /** @dataProvider provideTestCases */
+ public function test( ...$params ) {
+ $this->runValidatorTests( new SmartFormatPluralValidator(), 'plural', ...$params );
+ }
+
+ public function provideTestCases() {
+ yield [
+ '{0:message|messages}',
+ '{1:test|tests}{0:message|messages}',
+ [ 'unsupported' ],
+ 'Using plural on an unsupported parameter is an issue'
+ ];
+
+ yield [
+ '{0:message|messages}',
+ 'translation',
+ [ 'missing' ],
+ 'Missing plural on an unsupported parameter is an issue'
+ ];
+
+ yield [
+ '{0:message|messages}',
+ '{0:message|messages|messages}',
+ [ 'forms' ],
+ 'Extra plural form is an issue'
+ ];
+
+ yield [
+ '{0:message|messages}',
+ '{0:message|messages}',
+ [],
+ 'Correct plural forms are not an issue'
+ ];
+ }
+
+ /** @dataProvider provideInsertable */
+ public function testInsertable( $text, $displayText, $preText = '', $postText = '' ) {
+ $validator = new SmartFormatPluralValidator();
+
+ $insertables = $validator->getInsertables( $text );
+
+ if ( $displayText === null ) {
+ $this->assertSame( [], $insertables );
+ } else {
+ $this->assertCount( 1, $insertables );
+ $this->assertSame( $insertables[0]->getPreText(), $preText );
+ $this->assertSame( $insertables[0]->getPostText(), $postText );
+ $this->assertSame( $insertables[0]->getDisplayText(), $displayText );
+ }
+ }
+
+ public static function provideInsertable() {
+ yield [
+ '{0:message|messages}',
+ '{0:|}',
+ '{0:',
+ '|}'
+ ];
+
+ yield [
+ 'contains no pluralization',
+ null
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/unit/Validation/Validators/UnicodePluralValidatorTest.php b/Translate/tests/phpunit/unit/Validation/Validators/UnicodePluralValidatorTest.php
new file mode 100644
index 00000000..df9a7604
--- /dev/null
+++ b/Translate/tests/phpunit/unit/Validation/Validators/UnicodePluralValidatorTest.php
@@ -0,0 +1,45 @@
+<?php
+declare( strict_types = 1 );
+
+use MediaWiki\Extension\Translate\Validation\Validators\UnicodePluralValidator;
+
+/**
+ * @license GPL-2.0-or-later
+ * @covers \MediaWiki\Extension\Translate\Validation\Validators\UnicodePluralValidator
+ */
+class UnicodePluralValidatorTest extends BaseValidatorTestCase {
+ /** @dataProvider provideTestCases */
+ public function test( ...$params ) {
+ $this->runValidatorTests( new UnicodePluralValidator(), 'plural', ...$params );
+ }
+
+ public function provideTestCases() {
+ yield [
+ '{{PLURAL|one=a|b}}',
+ 'a',
+ [ 'missing' ],
+ 'Missing plural is an issue'
+ ];
+
+ yield [
+ 'a',
+ '{{PLURAL|one=a|b}}',
+ [ 'unsupported' ],
+ 'Plural in an unsupported message is an issue'
+ ];
+
+ yield [
+ '{{PLURAL|one=a|b}}',
+ '{{PLURAL|one=aa|bb}}',
+ [],
+ 'Correct plural syntax is not an issue'
+ ];
+
+ yield [
+ '{{PLURAL|one=a|b}}',
+ '{{PLURAL|one=a|two=b|c}}',
+ [ 'forms' ],
+ 'Extra plural forms are an issue'
+ ];
+ }
+}
diff --git a/Translate/tests/phpunit/unit/utils/MessageSourceChangeTest.php b/Translate/tests/phpunit/unit/utils/MessageSourceChangeTest.php
new file mode 100644
index 00000000..99b71beb
--- /dev/null
+++ b/Translate/tests/phpunit/unit/utils/MessageSourceChangeTest.php
@@ -0,0 +1,224 @@
+<?php
+/**
+ * @file
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Extension\Translate\MessageSync\MessageSourceChange;
+
+/** @covers MediaWiki\Extension\Translate\MessageSync\MessageSourceChange */
+class MessageSourceChangeTest extends MediaWikiUnitTestCase {
+ /** @var MessageSourceChange */
+ protected $change;
+
+ /**
+ * Creates a new MessageSourceChange object before each test.
+ */
+ protected function setUp(): void {
+ parent::setUp();
+
+ $this->change = new MessageSourceChange();
+ $this->change->addAddition( 'en', 'added', 'content-added' );
+ $this->change->addChange( 'en', 'changed', 'content-changed' );
+ $this->change->addDeletion( 'en', 'deleted', 'content-deleted' );
+ $this->change->addRename(
+ 'en',
+ [
+ 'key' => 'renameAdded',
+ 'content' => 'added'
+ ],
+ [
+ 'key' => 'renameDeleted',
+ 'content' => 'deleted'
+ ],
+ 0
+ );
+
+ $this->change->addAddition( 'en-gb', 'added', 'en-gb-content-added' );
+ }
+
+ public function testAddFindDelete() {
+ $modificationType = null;
+
+ $added = $this->change->findMessage( 'en', 'added', [ MessageSourceChange::ADDITION ] );
+ $changed = $this->change->findMessage(
+ 'en', 'changed', [ MessageSourceChange::CHANGE ]
+ );
+ $deleted = $this->change->findMessage(
+ 'en', 'deleted', [ MessageSourceChange::DELETION ]
+ );
+ $rename = $this->change->findMessage(
+ 'en', 'renameDeleted', [ MessageSourceChange::RENAME ]
+ );
+
+ $this->assertArrayHasKey( 'key', $added, 'findMessage returns added message.' );
+ $this->assertArrayHasKey( 'key', $changed, 'findMessage returns changed message.' );
+ $this->assertArrayHasKey( 'key', $deleted, 'findMessage returns deleted message.' );
+ $this->assertArrayHasKey( 'key', $rename, 'findMessage returns deleted rename message.' );
+
+ $modificationAdded = $this->change->findMessage( 'en-gb', 'added', [
+ MessageSourceChange::ADDITION,
+ MessageSourceChange::CHANGE,
+ MessageSourceChange::DELETION
+ ], $modificationType );
+ $this->assertArrayHasKey(
+ 'key', $modificationAdded,
+ 'findMessage returns added message correctly when checking multiple types.'
+ );
+ $this->assertEquals( $modificationType, MessageSourceChange::ADDITION );
+
+ $this->change->removeAdditions( 'en', [ 'added' ] );
+ $this->change->removeChanges( 'en', [ 'changed' ] );
+ $this->change->removeDeletions( 'en', [ 'deleted' ] );
+
+ $added = $this->change->findMessage( 'en', 'added', [ MessageSourceChange::ADDITION ] );
+ $changed = $this->change->findMessage(
+ 'en', 'changed', [ MessageSourceChange::CHANGE ]
+ );
+ $deleted = $this->change->findMessage(
+ 'en', 'deleted', [ MessageSourceChange::DELETION ]
+ );
+
+ $this->assertNull( $added, 'findMessage returns null for removed additions.' );
+ $this->assertNull( $changed, 'findMessage returns null for removed changes.' );
+ $this->assertNull( $deleted, 'findMessage returns null for removed deleted.' );
+ }
+
+ public function testBreakRename() {
+ $added = $this->change->findMessage(
+ 'en', 'renameAdded', [ MessageSourceChange::ADDITION ]
+ );
+ $deleted = $this->change->findMessage(
+ 'en', 'renameDeleted', [ MessageSourceChange::DELETION ]
+ );
+
+ $this->assertNull(
+ $added, 'renamed message is removed from additions.'
+ );
+ $this->assertNull(
+ $deleted, 'renamed message is removed from deletions.'
+ );
+
+ $this->change->breakRename( 'en', 'renameAdded' );
+
+ $added = $this->change->findMessage(
+ 'en', 'renameAdded', [ MessageSourceChange::ADDITION ]
+ );
+ $deleted = $this->change->findMessage(
+ 'en', 'renameDeleted', [ MessageSourceChange::DELETION ]
+ );
+
+ $this->assertArrayHasKey(
+ 'key', $added, 'broken rename message is added back to additions'
+ );
+ $this->assertArrayHasKey(
+ 'key', $deleted, 'broken rename message is added back to deletions'
+ );
+ }
+
+ public function testPreviousState() {
+ $this->change->addRename( 'en-gb', [
+ 'key' => 'renameAdded',
+ 'content' => 'added'
+ ],
+ [
+ 'key' => 'renameDeleted',
+ 'content' => 'deleted'
+ ], 0 );
+
+ $this->change->setRenameState( 'en-gb', 'renameDeleted', MessageSourceChange::NONE );
+
+ $changed = $this->change->findMessage(
+ 'en-gb', 'renameDeleted', [ MessageSourceChange::CHANGE ]
+ );
+ $this->assertNull(
+ $changed, 'findMessage returns null when searching changes for renamed message.'
+ );
+
+ $this->change->breakRename( 'en-gb', 'renameAdded' );
+
+ $changed = $this->change->findMessage( 'en-gb', 'renameDeleted', [] );
+ $added = $this->change->findMessage(
+ 'en-gb', 'renameAdded', [ MessageSourceChange::ADDITION ]
+ );
+
+ $this->assertNull(
+ $changed, 'broken rename message with previous state as NONE is not found in changes'
+ );
+ $this->assertArrayHasKey(
+ 'key', $added,
+ 'broken rename message with previous state as additions is found ' .
+ 'in the additions list'
+ );
+ }
+
+ public function testRemoveBasedOnType() {
+ $this->change->addAddition( 'en', 'added2', 'content-added' );
+ $this->change->removeBasedOnType( 'en', [ 'added', 'added2' ],
+ MessageSourceChange::ADDITION );
+ $this->change->removeBasedOnType( 'en', [ 'deleted' ], MessageSourceChange::DELETION );
+
+ $this->expectException( InvalidArgumentException::class );
+ $this->change->removeBasedOnType(
+ 'en', [ 'renameDeleted' ], MessageSourceChange::RENAME
+ );
+
+ $added = $this->change->findMessage( 'en', 'added', [ MessageSourceChange::ADDITION ] );
+ $added2 = $this->change->findMessage( 'en', 'added2', [ MessageSourceChange::ADDITION ] );
+ $deleted = $this->change->findMessage( 'en', 'deleted', [ MessageSourceChange::DELETION ] );
+ $renames = $this->change->findMessage(
+ 'en', 'renameDeleted', [ MessageSourceChange::RENAME ]
+ );
+
+ $this->assertNull( $added, 'findMessage returns null for removed additions.' );
+ $this->assertNull( $added2, 'findMessage returns null for removed changes.' );
+ $this->assertNull( $deleted, 'findMessage returns null for removed deleted.' );
+ $this->assertArrayHasKey(
+ 'key', $renames, 'removeBasedOnType does not remove rename messages.'
+ );
+ }
+
+ public function testIsPreviousState() {
+ $isAddedOrChanged = $this->change->isPreviousState( 'en', 'renameDeleted', [
+ MessageSourceChange::ADDITION, MessageSourceChange::CHANGE
+ ] );
+
+ $this->assertFalse(
+ $isAddedOrChanged, 'previousState returns false for incorrect previous state'
+ );
+
+ $isDeleted = $this->change->isPreviousState( 'en', 'renameDeleted', [
+ MessageSourceChange::DELETION
+ ] );
+
+ $this->assertTrue( $isDeleted,
+ 'previousState returns true for correct previous state' );
+ }
+
+ public function testGetMatchedMessage() {
+ $matchedMsg = $this->change->getMatchedMessage( 'en', 'renameAdded' );
+ $this->assertEquals(
+ 'renameDeleted', $matchedMsg['key'], 'getMatchedMessage fetches the proper matched message'
+ );
+
+ $matchedMsg = $this->change->getMatchedMessage( 'en', 'renameDeleted' );
+ $this->assertEquals(
+ 'renameAdded', $matchedMsg['key'], 'getMatchedMessage fetches the proper matched message'
+ );
+ }
+
+ public function testHasOnly() {
+ $enGbHasOnly = $this->change->hasOnly( 'en-gb', MessageSourceChange::ADDITION );
+ $this->assertTrue( $enGbHasOnly, 'hasOnly ' );
+
+ $enHasOnly = $this->change->hasOnly( 'en-gb', MessageSourceChange::RENAME );
+ $this->assertFalse( $enHasOnly, '' );
+ }
+
+ public function testGetLanguages() {
+ $changeLanguages = $this->change->getLanguages();
+ $this->assertCount(
+ 2, $changeLanguages, 'getLanguages returns all languages that have modifications'
+ );
+ }
+}
diff --git a/Translate/tests/phpunit/utils/MessageGroupCacheTest.php b/Translate/tests/phpunit/utils/MessageGroupCacheTest.php
new file mode 100644
index 00000000..02d236dc
--- /dev/null
+++ b/Translate/tests/phpunit/utils/MessageGroupCacheTest.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+/** @covers MessageGroupCache */
+class MessageGroupCacheTest extends MediaWikiIntegrationTestCase {
+ public function testCacheRoundtrip() {
+ $parseOutput = [
+ 'AUTHORS' => [ 'Bunny the king of the carrot land' ],
+ 'MESSAGES' => [
+ 'x-message' => 'fluffy',
+ 'b-message' => 'animal',
+ 'X-message' => 'with',
+ 'a-message' => 'ears',
+ ],
+ 'EXTRA' => [
+ 'food' => 'carrot'
+ ],
+ ];
+
+ $group = $this->createMock( FileBasedMessageGroup::class );
+ $group->method( 'getSourceFilePath' )->willReturn( __FILE__ );
+ $group->method( 'parseExternal' )->willReturn( $parseOutput );
+
+ $cache = new MessageGroupCache( $group, 'en', $this->getNewTempFile() );
+ $cache->create();
+
+ $expected = array_keys( $parseOutput['MESSAGES'] );
+ $actual = $cache->getKeys();
+ $this->assertSame( $expected, $actual, 'Cache should return correct keys in same order' );
+
+ $expected = $parseOutput['MESSAGES']['b-message'];
+ $actual = $cache->get( 'b-message' );
+ $this->assertSame( $expected, $actual, 'Cache should return correct message content' );
+
+ $expected = $parseOutput['AUTHORS'];
+ $actual = $cache->getAuthors();
+ $this->assertSame( $expected, $actual, 'Cache should return correct authors' );
+
+ $expected = $parseOutput['EXTRA'];
+ $actual = $cache->getExtra();
+ $this->assertSame( $expected, $actual, 'Cache should return extra data' );
+ }
+}
diff --git a/Translate/tests/phpunit/utils/MessageGroupStatsTest.php b/Translate/tests/phpunit/utils/MessageGroupStatsTest.php
new file mode 100644
index 00000000..99594925
--- /dev/null
+++ b/Translate/tests/phpunit/utils/MessageGroupStatsTest.php
@@ -0,0 +1,72 @@
+<?php
+/**
+ * @author Niklas Laxström
+ * @file
+ * @license GPL-2.0-or-later
+ */
+
+/** @covers MessageGroupStats */
+class MessageGroupStatsTest extends MediaWikiIntegrationTestCase {
+ protected function setUp(): void {
+ parent::setUp();
+
+ $this->setTemporaryHook(
+ 'TranslatePostInitGroups',
+ static function ( &$list ) {
+ $exampleMessageGroup = new WikiMessageGroup( 'theid', 'thesource' );
+ $exampleMessageGroup->setLabel( 'thelabel' ); // Example
+ $exampleMessageGroup->setNamespace( 5 ); // Example
+ $list['theid'] = $exampleMessageGroup;
+ }
+ );
+
+ $mg = MessageGroups::singleton();
+ $mg->setCache( new WANObjectCache( [ 'cache' => new HashBagOStuff() ] ) );
+ $mg->recache();
+ }
+
+ public function testGetDatabaseIdForGroupId() {
+ $shortId = 'abab';
+ $longId = str_repeat( 'ab', 100 );
+
+ $this->assertLessThanOrEqual(
+ 100,
+ strlen( MessageGroupStats::getDatabaseIdForGroupId( $shortId ) ),
+ 'Short id is <= 100 bytes long'
+ );
+
+ $this->assertLessThanOrEqual(
+ 100,
+ strlen( MessageGroupStats::getDatabaseIdForGroupId( $longId ) ),
+ 'Long id is <= 100 bytes long'
+ );
+
+ $longId1 = str_repeat( 'ab', 100 ) . '1';
+ $longId2 = str_repeat( 'ab', 100 ) . '2';
+
+ $this->assertNotEquals(
+ MessageGroupStats::getDatabaseIdForGroupId( $longId1 ),
+ MessageGroupStats::getDatabaseIdForGroupId( $longId2 ),
+ 'Two long ids with the same prefix do not collide'
+ );
+ }
+
+ public function testFunctionReturnFormat() {
+ $validLang = MessageGroupStats::forLanguage( 'en', MessageGroupStats::FLAG_CACHE_ONLY );
+ $invalidLang = MessageGroupStats::forLanguage( 'ffff', MessageGroupStats::FLAG_CACHE_ONLY );
+
+ $validGroup = MessageGroupStats::forGroup( 'theid', MessageGroupStats::FLAG_CACHE_ONLY );
+ $invalidGroup = MessageGroupStats::forGroup( 'invalid-mg-group',
+ MessageGroupStats::FLAG_CACHE_ONLY );
+
+ $this->assertIsArray( current( $validLang ),
+ 'forLanguage returns data in valid format for valid language' );
+ $this->assertIsArray( current( $invalidLang ),
+ 'forLanguage returns data in valid format for invalid language' );
+
+ $this->assertIsArray( current( $validGroup ),
+ 'forGroup returns data in valid format for valid group' );
+ $this->assertIsArray( current( $invalidGroup ),
+ 'forGroup returns data in valid format for invalid group' );
+ }
+}
diff --git a/Translate/tests/phpunit/utils/MessageGroupWANCacheTest.php b/Translate/tests/phpunit/utils/MessageGroupWANCacheTest.php
new file mode 100644
index 00000000..27736b17
--- /dev/null
+++ b/Translate/tests/phpunit/utils/MessageGroupWANCacheTest.php
@@ -0,0 +1,93 @@
+<?php
+
+/** @covers MessageGroupWANCache */
+class MessageGroupWANCacheTest extends MediaWikiIntegrationTestCase {
+ protected $mgCache;
+
+ protected function setUp(): void {
+ parent::setUp();
+ $this->mgCache = new MessageGroupWANCache(
+ new WANObjectCache( [ 'cache' => new HashBagOStuff() ] )
+ );
+ }
+
+ public function testCacheKeyConfiguration() {
+ $this->expectException( InvalidArgumentException::class );
+ $this->expectExceptionMessage( 'Invalid cache key' );
+
+ $this->mgCache->configure( [
+ 'regenerator' => static function () {
+ return 'hello';
+ }
+ ] );
+ }
+
+ public function testCacheRegeneratorConfig() {
+ $this->expectException( InvalidArgumentException::class );
+ $this->expectExceptionMessage( 'Invalid regenerator' );
+
+ $this->mgCache->configure( [
+ 'key' => 'test',
+ 'regenerator' => 'hello-world'
+ ] );
+ }
+
+ public function testNoConfigureCall() {
+ $this->expectException( InvalidArgumentException::class );
+ $this->expectExceptionMessage( 'configure function' );
+
+ $this->mgCache->setValue( [ 'abc' ] );
+ }
+
+ public function testDefaultConfig() {
+ $cacheData = [ 'dummy', 'data' ];
+ $this->mgCache->configure( [
+ 'key' => 'mg-wan-test',
+ 'regenerator' => static function () use ( $cacheData ) {
+ return $cacheData;
+ }
+ ] );
+
+ $mgCacheData = $this->mgCache->getValue();
+ $this->assertEquals( $cacheData, $mgCacheData, 'correctly returns the data ' .
+ 'returned in regenerator function.' );
+ }
+
+ public function testTouchCallbackConfig() {
+ $this->expectException( InvalidArgumentException::class );
+ $this->expectExceptionMessage( 'touchedCallback is not callable' );
+
+ $this->mgCache->configure( [
+ 'key' => 'mg-wan-test',
+ 'regenerator' => static function () {
+ return 'hello';
+ },
+ 'touchedCallback' => 'blah'
+ ] );
+ }
+
+ public function testTouchCallbackIsCalled() {
+ $wrapper = new DependencyWrapper( [ 'dummy' ] );
+
+ $mockMgLoader = $this->createMock( MockCacheMessageGroupLoader::class );
+ $this->mgCache->configure( [
+ 'key' => 'mg-wan-test',
+ 'regenerator' => [ $mockMgLoader, 'getGroups' ],
+ 'touchedCallback' => [ $mockMgLoader, 'isExpired' ]
+ ] );
+
+ $mockMgLoader->expects( $this->once() )
+ ->method( 'getGroups' )
+ ->willReturn( $wrapper );
+
+ $mockMgLoader->expects( $this->once() )
+ ->method( 'isExpired' )
+ ->with( $wrapper )
+ ->willReturn( false );
+
+ // touchedCallback is not called the first time,
+ // since the value was just obtained
+ $this->mgCache->getValue();
+ $this->mgCache->getValue();
+ }
+}
diff --git a/Translate/tests/qunit/.eslintrc.json b/Translate/tests/qunit/.eslintrc.json
new file mode 100644
index 00000000..4c3e3523
--- /dev/null
+++ b/Translate/tests/qunit/.eslintrc.json
@@ -0,0 +1,7 @@
+{
+ "root": true,
+ "extends": [
+ "../../resources/.eslintrc.json",
+ "wikimedia/qunit"
+ ]
+}
diff --git a/Translate/tests/qunit/ext.translate.parsers.test.js b/Translate/tests/qunit/ext.translate.parsers.test.js
new file mode 100644
index 00000000..cc86ed1f
--- /dev/null
+++ b/Translate/tests/qunit/ext.translate.parsers.test.js
@@ -0,0 +1,33 @@
+/*!
+ * Tests for ext.translate.parsers.js.
+ *
+ * @license GPL-2.0-or-later
+ */
+
+( function () {
+ 'use strict';
+
+ QUnit.module( 'ext.translate.parsers', QUnit.newMwEnvironment() );
+
+ QUnit.test( '-- External links', function ( assert ) {
+ mw.config.set( 'wgArticlePath', '/wiki/$1' );
+
+ assert.strictEqual(
+ mw.translate.formatMessageGently( 'This page is [in English]' ),
+ 'This page is [in English]',
+ 'Brackets without protocol doesn\'t make a link'
+ );
+
+ assert.strictEqual(
+ mw.translate.formatMessageGently( 'This page has [https://www.mediawiki.org a link]' ),
+ 'This page has <a href="https://www.mediawiki.org">a link</a>',
+ 'Brackets with https:// protocol creates a link'
+ );
+
+ assert.strictEqual(
+ mw.translate.formatMessageGently( 'No kun [[m:MassMessage]] ja plum [[m:|Meta-Wiki]].' ),
+ 'No kun <a href="/wiki/m:MassMessage">m:MassMessage</a> ja plum <a href="/wiki/m:">Meta-Wiki</a>.',
+ 'Link parsing is non-greedy'
+ );
+ } );
+}() );
diff --git a/Translate/tests/qunit/ext.translate.special.pagemigration.test.js b/Translate/tests/qunit/ext.translate.special.pagemigration.test.js
new file mode 100644
index 00000000..fdf3d644
--- /dev/null
+++ b/Translate/tests/qunit/ext.translate.special.pagemigration.test.js
@@ -0,0 +1,130 @@
+/*!
+ * @license GPL-2.0-or-later
+ */
+QUnit.module( 'ext.translate.special.pagemigration', function ( hooks ) {
+ 'use strict';
+
+ hooks.beforeEach( function () {
+ this.server = this.sandbox.useFakeServer();
+ } );
+
+ QUnit.test( 'Source units', function ( assert ) {
+ var data = '{ "query": { "messagecollection": [ { "key": "key_",' +
+ ' "definition": "definition_", "title": "title_" }, { "key": "key_1",' +
+ ' "definition": "definition_1", "title": "title_1" } ] } }';
+
+ var done = assert.async();
+ mw.translate.getSourceUnits( 'Help:Special pages' ).done( function ( sourceUnits ) {
+ assert.strictEqual( sourceUnits.length, 2, 'Source units retrieved' );
+ done();
+ } );
+
+ this.server.respond( function ( request ) {
+ request.respond( 200, { 'Content-Type': 'application/json' }, data );
+ } );
+ } );
+
+ QUnit.test( 'Page does not exist', function ( assert ) {
+ var data = '{ "query": { "pages": { "-1": { "missing": "" } } } }';
+
+ var done = assert.async();
+ mw.translate.getFuzzyTimestamp( 'ugagagagagaga/uga' ).fail( function ( timestamp ) {
+ assert.strictEqual( timestamp, undefined, 'Page does not exist' );
+ done();
+ } );
+
+ this.server.respond( function ( request ) {
+ request.respond( 200, { 'Content-Type': 'application/json' }, data );
+ } );
+ } );
+
+ QUnit.test( 'Fuzzy timestamp', function ( assert ) {
+ var data = '{ "query": { "pages": { "19563": {"revisions": ' +
+ '[ {"timestamp": "2014-02-18T20:59:58Z" }, { "timestamp": "t2" } ] } } } }';
+
+ var done = assert.async();
+ mw.translate.getFuzzyTimestamp( 'Help:Special pages/fr' ).done( function ( timestamp ) {
+ assert.strictEqual( timestamp, '2014-02-18T20:59:57.000Z', 'Fuzzy timestamp retrieved' );
+ done();
+ } );
+
+ this.server.respond( function ( request ) {
+ request.respond( 200, { 'Content-Type': 'application/json' }, data );
+ } );
+ } );
+
+ QUnit.test( 'Split translation page', function ( assert ) {
+ var data = '{ "query": { "pages": { "19563": { "revisions": ' +
+ '[ { "*": "unit1\\n\\nunit2\\n\\nunit3" } ] } } } }';
+
+ var done = assert.async();
+ mw.translate.splitTranslationPage( '2014-02-18T20:59:57.000Z', 'Help:Special pages/fr' )
+ .done( function ( translationUnits ) {
+ assert.strictEqual( translationUnits.length, 3, 'Translation page split into units' );
+ done();
+ } );
+
+ this.server.respond( function ( request ) {
+ request.respond( 200, { 'Content-Type': 'application/json' }, data );
+ } );
+ } );
+
+ QUnit.test( 'Split headers', function ( assert ) {
+ var translationUnits, expected, result;
+ translationUnits = [
+ '== already split ==',
+ 'some text\nwith a newline',
+ '==nospace l2==\nabc',
+ '===nospacel3===\ndef',
+ '== spaced l2 ==\nghi',
+ '=== spaced l3 ===\njkl',
+ '== bad spacing==\nmno',
+ '== multiple ==\n===headers===\nin\n===succession===\npqr',
+ '== header ==\nmore text\nwith a newline'
+ ];
+ expected = [
+ '== already split ==',
+ 'some text\nwith a newline',
+ '==nospace l2==',
+ 'abc',
+ '===nospacel3===',
+ 'def',
+ '== spaced l2 ==',
+ 'ghi',
+ '=== spaced l3 ===',
+ 'jkl',
+ '== bad spacing==',
+ 'mno',
+ '== multiple ==',
+ '===headers===',
+ 'in\n',
+ '===succession===',
+ 'pqr',
+ '== header ==',
+ 'more text\nwith a newline'
+ ];
+ result = mw.translate.splitHeaders( translationUnits );
+ assert.deepEqual( result, expected, 'Headers split into separate units' );
+
+ } );
+
+ QUnit.test( 'Align h2 headers', function ( assert ) {
+ var sourceUnits = [
+ { identifier: '1', definition: 'abc' }, { identifier: '2', definition: '==123==' },
+ { identifier: '3', definition: 'pqr' }, { identifier: '4', definition: 'xyz' },
+ { identifier: '5', definition: 'mno' }, { identifier: '6', definition: '==456==' }
+ ];
+
+ var translationUnits1 = [ '==123==', 'pqr', '==456==' ];
+ var translationUnits2 = [ 'abc', 'lmn', '==123==', 'pqr', '==456==' ];
+
+ var result1 = [ '', '==123==', 'pqr', '', '', '==456==' ];
+ var result2 = [ 'abc\nlmn\n', '==123==', 'pqr', '', '', '==456==' ];
+
+ translationUnits1 = mw.translate.alignHeaders( sourceUnits, translationUnits1 );
+ assert.deepEqual( result1, translationUnits1, 'h2 headers aligned without merging' );
+
+ translationUnits2 = mw.translate.alignHeaders( sourceUnits, translationUnits2 );
+ assert.deepEqual( result2, translationUnits2, 'h2 headers aligned with merging' );
+ } );
+} );
diff --git a/Translate/ttmserver/CrossLanguageTranslationSearchQuery.php b/Translate/ttmserver/CrossLanguageTranslationSearchQuery.php
new file mode 100644
index 00000000..c10ac5d6
--- /dev/null
+++ b/Translate/ttmserver/CrossLanguageTranslationSearchQuery.php
@@ -0,0 +1,159 @@
+<?php
+
+/**
+ * Cross Language Translation Search.
+ * @since 2015.08
+ */
+class CrossLanguageTranslationSearchQuery {
+ /** @var SearchableTTMServer */
+ protected $server;
+ /** @var array */
+ protected $params;
+ /** @var \Elastica\ResultSet */
+ protected $resultset;
+ /** @var int */
+ protected $total = 0;
+ protected $hl = [ '', '' ];
+
+ public function __construct( array $params, SearchableTTMServer $server ) {
+ $this->params = $params;
+ $this->server = $server;
+ }
+
+ public function getDocuments() {
+ $documents = [];
+ $offset = $this->params['offset'];
+ $limit = $this->params['limit'];
+
+ $options = $this->params;
+ $options['language'] = $this->params['sourcelanguage'];
+ // Use a bigger limit that what was requested, since we are likely to throw away many
+ // results in the local filtering step at extractMessages
+ $options['limit'] = $limit * 10;
+ // TODO: the real offset should be communicated to the frontend. It currently assumes
+ // next offset is current offset + limit and previous one is current offset - limit.
+ // It might be difficult to fix scrolling results backwards. For now we handle offset
+ // locally.
+ $options['offset'] = 0;
+
+ // @phan-suppress-next-line PhanUndeclaredMethod
+ $search = $this->server->createSearch( $this->params['query'], $options, $this->hl );
+ $scroll = $search->scroll( '5s' );
+
+ // Used for aggregations. Only the first scroll response has them.
+ $this->resultset = null;
+
+ foreach ( $scroll as $resultSet ) {
+ if ( !$this->resultset ) {
+ $this->resultset = $resultSet;
+ $this->total = $resultSet->getTotalHits();
+ }
+
+ $results = $this->extractMessages( $resultSet->getDocuments() );
+ $documents = array_merge( $documents, $results );
+
+ $count = count( $documents );
+
+ if ( $count >= $offset + $limit ) {
+ break;
+ }
+ }
+
+ if ( !$this->resultset ) {
+ // No hits for documents, just set the result set.
+ $this->resultset = $scroll->current();
+ $this->total = $scroll->current()->getTotalHits();
+ }
+
+ // clear was introduced in Elastica 5.3.1, but Elastica extension uses 5.3.0
+ if ( is_callable( [ $scroll, 'clear' ] ) ) {
+ $scroll->clear();
+ }
+ $documents = array_slice( $documents, $offset, $limit );
+
+ return $documents;
+ }
+
+ /**
+ * Extract messages from the documents and build message definitions.
+ * Create a message collection from the definitions in the target language.
+ * Filter the message collection to get filtered messages.
+ * Slice messages according to limit and offset given.
+ * @param \Elastica\Document[] $documents
+ * @return array[]
+ */
+ protected function extractMessages( $documents ) {
+ $messages = $ret = [];
+
+ $language = $this->params['language'];
+ foreach ( $documents as $document ) {
+ $data = $document->getData();
+
+ // @phan-suppress-next-line PhanUndeclaredMethod
+ if ( !$this->server->isLocalSuggestion( $data ) ) {
+ continue;
+ }
+
+ $title = Title::newFromText( $data['localid'] );
+ if ( !$title ) {
+ continue;
+ }
+
+ $handle = new MessageHandle( $title );
+ if ( !$handle->isValid() ) {
+ continue;
+ }
+
+ $key = $title->getNamespace() . ':' . $title->getDBkey();
+ $messages[$key] = $data['content'];
+ }
+
+ $definitions = new MessageDefinitions( $messages );
+ $collection = MessageCollection::newFromDefinitions( $definitions, $language );
+
+ $filter = $this->params['filter'];
+ if ( $filter === 'untranslated' ) {
+ $collection->filter( 'hastranslation', true );
+ } elseif ( in_array( $filter, $this->getAvailableFilters() ) ) {
+ $collection->filter( $filter, false );
+ }
+
+ if ( $filter === 'translated' || $filter === 'fuzzy' ) {
+ $collection->loadTranslations();
+ }
+
+ foreach ( $collection->keys() as $mkey => $titleValue ) {
+ $title = Title::newFromLinkTarget( $titleValue );
+
+ $result = [];
+ $result['content'] = $messages[$mkey];
+ if ( $filter === 'translated' || $filter === 'fuzzy' ) {
+ $result['content'] = $collection[$mkey]->translation();
+ }
+ $handle = new MessageHandle( $title );
+ $result['localid'] = $handle->getTitleForBase()->getPrefixedText();
+ $result['language'] = $language;
+
+ $ret[] = $result;
+ }
+
+ return $ret;
+ }
+
+ /** @return array */
+ public function getAvailableFilters() {
+ return [
+ 'translated',
+ 'fuzzy',
+ 'untranslated'
+ ];
+ }
+
+ public function getTotalHits() {
+ return $this->total;
+ }
+
+ public function getResultSet() {
+ return $this->resultset;
+ }
+}
diff --git a/Translate/ttmserver/DatabaseTTMServer.php b/Translate/ttmserver/DatabaseTTMServer.php
new file mode 100644
index 00000000..8f971706
--- /dev/null
+++ b/Translate/ttmserver/DatabaseTTMServer.php
@@ -0,0 +1,288 @@
+<?php
+/**
+ * TTMServer - The Translate extension translation memory interface
+ *
+ * @file
+ * @author Niklas Laxström
+ * @copyright Copyright © 2012-2013, Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @ingroup TTMServer
+ */
+
+use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\DBQueryError;
+
+/**
+ * Mysql based backend.
+ * @ingroup TTMServer
+ * @since 2012-06-27
+ */
+class DatabaseTTMServer extends TTMServer implements WritableTTMServer, ReadableTTMServer {
+ protected $sids;
+
+ /**
+ * @param int $mode DB_REPLICA|DB_PRIMARY
+ * @return \Wikimedia\Rdbms\IDatabase
+ */
+ protected function getDB( $mode = DB_REPLICA ) {
+ return wfGetDB( $mode, 'ttmserver', $this->config['database'] );
+ }
+
+ public function update( MessageHandle $handle, $targetText ) {
+ if ( !$handle->isValid() || $handle->getCode() === '' ) {
+ return false;
+ }
+
+ $mkey = $handle->getKey();
+ $group = $handle->getGroup();
+ $targetLanguage = $handle->getCode();
+ $sourceLanguage = $group->getSourceLanguage();
+
+ // Skip definitions to not slow down mass imports etc.
+ // These will be added when the first translation is made
+ if ( $targetLanguage === $sourceLanguage ) {
+ return false;
+ }
+
+ $definition = $group->getMessage( $mkey, $sourceLanguage );
+ if ( !is_string( $definition ) || !strlen( trim( $definition ) ) ) {
+ return false;
+ }
+
+ $context = Title::makeTitle( $handle->getTitle()->getNamespace(), $mkey );
+ $dbw = $this->getDB( DB_PRIMARY );
+ /* Check that the definition exists and fetch the sid. If not, add
+ * the definition and retrieve the sid. If the definition changes,
+ * we will create a new entry - otherwise we could at some point
+ * get suggestions which do not match the original definition any
+ * longer. The old translations are still kept until purged by
+ * rerunning the bootstrap script. */
+ $conds = [
+ 'tms_context' => $context->getPrefixedText(),
+ 'tms_text' => $definition,
+ ];
+
+ $sid = $dbw->selectField( 'translate_tms', 'tms_sid', $conds, __METHOD__ );
+ if ( $sid === false ) {
+ $sid = $this->insertSource( $context, $sourceLanguage, $definition );
+ }
+
+ // Delete old translations for this message if any. Could also use replace
+ $deleteConds = [
+ 'tmt_sid' => $sid,
+ 'tmt_lang' => $targetLanguage,
+ ];
+ $dbw->delete( 'translate_tmt', $deleteConds, __METHOD__ );
+
+ // Insert the new translation
+ if ( $targetText !== null ) {
+ $row = $deleteConds + [
+ 'tmt_text' => $targetText,
+ ];
+
+ $dbw->insert( 'translate_tmt', $row, __METHOD__ );
+ }
+
+ return true;
+ }
+
+ protected function insertSource( Title $context, $sourceLanguage, $text ) {
+ $row = [
+ 'tms_lang' => $sourceLanguage,
+ 'tms_len' => mb_strlen( $text ),
+ 'tms_text' => $text,
+ 'tms_context' => $context->getPrefixedText(),
+ ];
+
+ $dbw = $this->getDB( DB_PRIMARY );
+ $dbw->insert( 'translate_tms', $row, __METHOD__ );
+ $sid = $dbw->insertId();
+
+ $fulltext = $this->filterForFulltext( $sourceLanguage, $text );
+ if ( count( $fulltext ) ) {
+ $row = [
+ 'tmf_sid' => $sid,
+ 'tmf_text' => implode( ' ', $fulltext ),
+ ];
+ $dbw->insert( 'translate_tmf', $row, __METHOD__ );
+ }
+
+ return $sid;
+ }
+
+ /**
+ * Tokenizes the text for fulltext search.
+ * Tries to find the most useful tokens.
+ *
+ * @param string $language Language code
+ * @param string $input
+ * @return array
+ */
+ protected function filterForFulltext( $language, $input ) {
+ $lang = Language::factory( $language );
+
+ $text = preg_replace( '/[^[:alnum:]]/u', ' ', $input );
+ $text = $lang->segmentByWord( $text );
+ $text = $lang->lc( $text );
+ $segments = preg_split( '/\s+/', $text, -1, PREG_SPLIT_NO_EMPTY );
+ if ( count( $segments ) < 4 ) {
+ return [];
+ }
+
+ foreach ( $segments as $i => $segment ) {
+ // Yes strlen
+ $len = strlen( $segment );
+ if ( $len < 4 || $len > 15 ) {
+ unset( $segments[$i] );
+ }
+ }
+
+ $segments = array_unique( $segments );
+ $segments = array_slice( $segments, 0, 10 );
+
+ return $segments;
+ }
+
+ public function beginBootstrap() {
+ $dbw = $this->getDB( DB_PRIMARY );
+ $dbw->delete( 'translate_tms', '*', __METHOD__ );
+ $dbw->delete( 'translate_tmt', '*', __METHOD__ );
+ $dbw->delete( 'translate_tmf', '*', __METHOD__ );
+ $table = $dbw->tableName( 'translate_tmf' );
+ try {
+ $dbw->query( "DROP INDEX tmf_text ON $table", __METHOD__ );
+ } catch ( DBQueryError $e ) {
+ // Perhaps the script was aborted before it got
+ // chance to add the index back.
+ }
+ }
+
+ public function beginBatch() {
+ $this->sids = [];
+ }
+
+ public function batchInsertDefinitions( array $batch ) {
+ foreach ( $batch as $key => $item ) {
+ list( $title, $language, $text ) = $item;
+ $handle = new MessageHandle( $title );
+ $context = Title::makeTitle( $handle->getTitle()->getNamespace(), $handle->getKey() );
+ $this->sids[$key] = $this->insertSource( $context, $language, $text );
+ }
+ $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
+ $lbFactory->waitForReplication( [ 'ifWritesSince' => 10 ] );
+ }
+
+ public function batchInsertTranslations( array $batch ) {
+ $rows = [];
+ foreach ( $batch as $key => $data ) {
+ list( , $language, $text ) = $data;
+ $rows[] = [
+ 'tmt_sid' => $this->sids[$key],
+ 'tmt_lang' => $language,
+ 'tmt_text' => $text,
+ ];
+ }
+
+ $dbw = $this->getDB( DB_PRIMARY );
+ $dbw->insert( 'translate_tmt', $rows, __METHOD__ );
+ $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
+ $lbFactory->waitForReplication( [ 'ifWritesSince' => 10 ] );
+ }
+
+ public function endBatch() {
+ }
+
+ public function endBootstrap() {
+ $dbw = $this->getDB( DB_PRIMARY );
+ $table = $dbw->tableName( 'translate_tmf' );
+ $dbw->query( "CREATE FULLTEXT INDEX tmf_text ON $table (tmf_text)", __METHOD__ );
+ }
+
+ /* Reading interface */
+
+ public function isLocalSuggestion( array $suggestion ) {
+ return true;
+ }
+
+ public function expandLocation( array $suggestion ) {
+ $title = Title::newFromText( $suggestion['location'] );
+
+ return $title->getCanonicalURL();
+ }
+
+ public function query( $sourceLanguage, $targetLanguage, $text ) {
+ // Calculate the bounds of the string length which are able
+ // to satisfy the cutoff percentage in edit distance.
+ $len = mb_strlen( $text );
+ $min = ceil( max( $len * $this->config['cutoff'], 2 ) );
+ $max = floor( $len / $this->config['cutoff'] );
+
+ // We could use fulltext index to narrow the results further
+ $dbr = $this->getDB( DB_REPLICA );
+ $tables = [ 'translate_tmt', 'translate_tms' ];
+ $fields = [ 'tms_context', 'tms_text', 'tmt_lang', 'tmt_text' ];
+
+ $conds = [
+ 'tms_lang' => $sourceLanguage,
+ 'tmt_lang' => $targetLanguage,
+ "tms_len BETWEEN $min AND $max",
+ 'tms_sid = tmt_sid',
+ ];
+
+ $fulltext = $this->filterForFulltext( $sourceLanguage, $text );
+ if ( $fulltext ) {
+ $tables[] = 'translate_tmf';
+ $list = implode( ' ', $fulltext );
+ $conds[] = 'tmf_sid = tmt_sid';
+ $conds[] = "MATCH(tmf_text) AGAINST( '$list' )";
+ }
+
+ $res = $dbr->select( $tables, $fields, $conds, __METHOD__ );
+
+ return $this->processQueryResults( $res, $text, $targetLanguage );
+ }
+
+ protected function processQueryResults( $res, $text, $targetLanguage ) {
+ $timeLimit = microtime( true ) + 5;
+
+ $lenA = mb_strlen( $text );
+ $results = [];
+ foreach ( $res as $row ) {
+ if ( microtime( true ) > $timeLimit ) {
+ // Having no suggestions is better than preventing translation
+ // altogether by timing out the request :(
+ break;
+ }
+
+ $a = $text;
+ $b = $row->tms_text;
+ $lenB = mb_strlen( $b );
+ $len = min( $lenA, $lenB );
+ if ( $len > 600 ) {
+ // two strings of length 1500 ~ 10s
+ // two strings of length 2250 ~ 30s
+ $dist = $len;
+ } else {
+ $dist = self::levenshtein( $a, $b, $lenA, $lenB );
+ }
+ $quality = 1 - ( $dist * 0.9 / $len );
+
+ if ( $quality >= $this->config['cutoff'] ) {
+ $results[] = [
+ 'source' => $row->tms_text,
+ 'target' => $row->tmt_text,
+ 'context' => $row->tms_context,
+ 'location' => $row->tms_context . '/' . $targetLanguage,
+ 'quality' => $quality,
+ 'wiki' => $row->tms_wiki ?? WikiMap::getCurrentWikiId(),
+ ];
+ }
+ }
+ $results = TTMServer::sortSuggestions( $results );
+
+ return $results;
+ }
+
+ public function setDoReIndex() {
+ }
+}
diff --git a/Translate/ttmserver/ElasticSearchTTMServer.php b/Translate/ttmserver/ElasticSearchTTMServer.php
new file mode 100644
index 00000000..f3a950e1
--- /dev/null
+++ b/Translate/ttmserver/ElasticSearchTTMServer.php
@@ -0,0 +1,864 @@
+<?php
+/**
+ * TTMServer - The Translate extension translation memory interface
+ *
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @ingroup TTMServer
+ */
+
+use Elastica\Aggregation\Terms;
+use Elastica\Client;
+use Elastica\Document;
+use Elastica\Exception\ExceptionInterface;
+use Elastica\Query;
+use Elastica\Query\BoolQuery;
+use Elastica\Query\FunctionScore;
+use Elastica\Query\MatchQuery;
+use Elastica\Query\Term;
+use MediaWiki\Extension\Elastica\MWElasticUtils;
+use MediaWiki\Extension\Translate\TranslatorInterface\TranslationHelperException;
+use MediaWiki\Logger\LoggerFactory;
+
+/**
+ * TTMServer backed based on ElasticSearch. Depends on Elastica.
+ * @since 2014.04
+ * @ingroup TTMServer
+ */
+class ElasticSearchTTMServer
+ extends TTMServer
+ implements ReadableTTMServer, WritableTTMServer, SearchableTTMServer
+{
+ /**
+ * @const int in case a write operation fails during a batch process
+ * this constant controls the number of times we will retry the same
+ * operation.
+ */
+ private const BULK_INDEX_RETRY_ATTEMPTS = 5;
+
+ /**
+ * @const int time (seconds) to wait for the index to ready before
+ * starting to index. Since we wait for index status it can be relatively
+ * long especially if some nodes are restarted.
+ */
+ private const WAIT_UNTIL_READY_TIMEOUT = 3600;
+
+ /** @var Client */
+ protected $client;
+ /**
+ * Reference to the maintenance script to relay logging output.
+ */
+ protected $logger;
+ /**
+ * Used for Reindex
+ */
+ protected $updateMapping = false;
+
+ public function isLocalSuggestion( array $suggestion ) {
+ return $suggestion['wiki'] === WikiMap::getCurrentWikiId();
+ }
+
+ public function expandLocation( array $suggestion ) {
+ return $suggestion['uri'];
+ }
+
+ public function query( $sourceLanguage, $targetLanguage, $text ) {
+ try {
+ return $this->doQuery( $sourceLanguage, $targetLanguage, $text );
+ } catch ( Exception $e ) {
+ throw new TranslationHelperException( 'Elastica exception: ' . $e );
+ }
+ }
+
+ protected function doQuery( $sourceLanguage, $targetLanguage, $text ) {
+ if ( !$this->useWikimediaExtraPlugin() ) {
+ // ElasticTTM is currently not compatible with elasticsearch 2.x/5.x
+ // It needs FuzzyLikeThis ported via the wmf extra plugin
+ throw new RuntimeException( 'The wikimedia extra plugin is mandatory.' );
+ }
+ /* Two query system:
+ * 1) Find all strings in source language that match text
+ * 2) Do another query for translations for those strings
+ */
+ $connection = $this->getClient()->getConnection();
+ $oldTimeout = $connection->getTimeout();
+ $connection->setTimeout( 10 );
+
+ $fuzzyQuery = new FuzzyLikeThis();
+ $fuzzyQuery->setLikeText( $text );
+ $fuzzyQuery->addFields( [ 'content' ] );
+
+ $boostQuery = new FunctionScore();
+ $boostQuery->addFunction(
+ 'levenshtein_distance_score',
+ [
+ 'text' => $text,
+ 'field' => 'content'
+ ]
+ );
+ $boostQuery->setBoostMode( FunctionScore::BOOST_MODE_REPLACE );
+
+ // Wrap the fuzzy query so it can be used as a filter.
+ // This is slightly faster, as ES can throw away the scores by this query.
+ $bool = new BoolQuery();
+ $bool->addFilter( $fuzzyQuery );
+ $bool->addMust( $boostQuery );
+
+ $languageFilter = new Term();
+ $languageFilter->setTerm( 'language', $sourceLanguage );
+ $bool->addFilter( $languageFilter );
+
+ // The whole query
+ $query = new Query();
+ $query->setQuery( $bool );
+
+ // The interface usually displays three best candidates. These might
+ // come from more than three source things, if the translations are
+ // the same. In other words suggestions are grouped by the suggested
+ // translation. This algorithm might not find all suggestions, if the
+ // top N best matching source texts don't have equivalent translations
+ // in the target language, but worse matches which we did not fetch do.
+ // This code tries to balance between doing too many or too big queries
+ // and not fetching enough results to show all possible suggestions.
+ $sizeFirst = 100;
+ $sizeSecond = $sizeFirst * 5;
+
+ $query->setFrom( 0 );
+ $query->setSize( $sizeFirst );
+ $query->setParam( '_source', [ 'content' ] );
+ $cutoff = $this->config['cutoff'] ?? 0.65;
+ $query->setParam( 'min_score', $cutoff );
+ $query->setSort( [ '_score', 'wiki', 'localid' ] );
+
+ /* This query is doing two unrelated things:
+ * 1) Collect the message contents and scores so that they can
+ * be accessed later for the translations we found.
+ * 2) Build the query string for the query that fetches the translations.
+ */
+ $contents = $scores = $terms = [];
+ do {
+ $resultset = $this->getIndex()->search( $query );
+
+ if ( count( $resultset ) === 0 ) {
+ break;
+ }
+
+ foreach ( $resultset->getResults() as $result ) {
+ $data = $result->getData();
+ $score = $result->getScore();
+
+ $sourceId = preg_replace( '~/[^/]+$~', '', $result->getId() );
+ $contents[$sourceId] = $data['content'];
+ $scores[$sourceId] = $score;
+ $terms[] = "$sourceId/$targetLanguage";
+ }
+
+ // Check if it looks like that we are hitting the long tail already.
+ // Otherwise, we'll do a query to fetch some more to reach a "sane"
+ // breaking point, i.e. include all suggestions with same content
+ // for reliable used X times statistics.
+ if ( count( array_unique( $scores ) ) > 5 ) {
+ break;
+ }
+
+ // Okay, We are now in second iteration of the loop. We already got
+ // lots of suggestions. We will give up for now even if it means we
+ // return in some sense incomplete results.
+ if ( count( $resultset ) === $sizeSecond ) {
+ break;
+ }
+
+ // After the first query, the smallest score is the new threshold.
+ // @phan-suppress-next-line PhanPossiblyUndeclaredVariable
+ $query->setParam( 'min_score', $score );
+ $query->setFrom( $query->getParam( 'size' ) + $query->getParam( 'from' ) );
+ $query->setSize( $sizeSecond );
+
+ // Break if we already got all hits
+ } while ( $resultset->getTotalHits() > count( $contents ) );
+
+ $suggestions = [];
+
+ // Skip second query if first query found nothing. Keeping only one return
+ // statement in this method to avoid forgetting to reset connection timeout
+ if ( $terms !== [] ) {
+ $idQuery = new Query\Terms( '_id', $terms );
+
+ $query = new Query( $idQuery );
+ $query->setSize( 25 );
+ $query->setParam( '_source', [ 'wiki', 'uri', 'content', 'localid' ] );
+ $resultset = $this->getIndex()->search( $query );
+
+ foreach ( $resultset->getResults() as $result ) {
+ $data = $result->getData();
+
+ // Construct the matching source id
+ $sourceId = preg_replace( '~/[^/]+$~', '', $result->getId() );
+
+ $suggestions[] = [
+ 'source' => $contents[$sourceId],
+ 'target' => $data['content'],
+ 'context' => $data['localid'],
+ 'quality' => $scores[$sourceId],
+ 'wiki' => $data['wiki'],
+ 'location' => $data['localid'] . '/' . $targetLanguage,
+ 'uri' => $data['uri'],
+ ];
+ }
+
+ // Ensure results are in quality order
+ uasort( $suggestions, static function ( $a, $b ) {
+ if ( $a['quality'] === $b['quality'] ) {
+ return 0;
+ }
+
+ return ( $a['quality'] < $b['quality'] ) ? 1 : -1;
+ } );
+ }
+
+ $connection->setTimeout( $oldTimeout );
+
+ return $suggestions;
+ }
+
+ /* Write functions */
+
+ /**
+ * Add / update translations.
+ *
+ * @param MessageHandle $handle
+ * @param ?string $targetText
+ * @return bool
+ * @throws RuntimeException
+ */
+ public function update( MessageHandle $handle, $targetText ) {
+ if ( !$handle->isValid() || $handle->getCode() === '' ) {
+ return false;
+ }
+
+ /* There are various different cases here:
+ * [new or updated] [fuzzy|non-fuzzy] [translation|definition]
+ * 1) We don't distinguish between new or updated here.
+ * 2) Delete old translation, but not definition
+ * 3) Insert new translation or definition, if non-fuzzy
+ * The definition should never be fuzzied anyway.
+ *
+ * These only apply to known messages.
+ */
+
+ $sourceLanguage = $handle->getGroup()->getSourceLanguage();
+
+ // Do not delete definitions, because the translations are attached to that
+ if ( $handle->getCode() !== $sourceLanguage ) {
+ $localid = $handle->getTitleForBase()->getPrefixedText();
+ $this->deleteByQuery( $this->getIndex(), Query::create(
+ ( new BoolQuery() )
+ ->addFilter( new Term( [ 'wiki' => WikiMap::getCurrentWikiId() ] ) )
+ ->addFilter( new Term( [ 'language' => $handle->getCode() ] ) )
+ ->addFilter( new Term( [ 'localid' => $localid ] ) ) ) );
+ }
+
+ // If translation was made fuzzy, we do not need to add anything
+ if ( $targetText === null ) {
+ return true;
+ }
+
+ // source language is null, skip doing rest of the stuff
+ if ( $sourceLanguage === null ) {
+ return true;
+ }
+
+ $revId = $handle->getTitleForLanguage( $sourceLanguage )->getLatestRevID();
+ $doc = $this->createDocument( $handle, $targetText, $revId );
+ $fname = __METHOD__;
+
+ $mwElasticUtilsClass = $this->getMWElasticUtilsClass();
+ $mwElasticUtilsClass::withRetry( self::BULK_INDEX_RETRY_ATTEMPTS,
+ function () use ( $doc ) {
+ $this->getIndex()->addDocuments( [ $doc ] );
+ },
+ static function ( $e, $errors ) use ( $fname ) {
+ $c = get_class( $e );
+ $msg = $e->getMessage();
+ error_log( $fname . ": update failed ($c: $msg); retrying." );
+ sleep( 10 );
+ }
+ );
+
+ return true;
+ }
+
+ /**
+ * @param MessageHandle $handle
+ * @param string $text
+ * @param int $revId
+ * @return Document
+ */
+ protected function createDocument( MessageHandle $handle, $text, $revId ) {
+ $language = $handle->getCode();
+
+ $localid = $handle->getTitleForBase()->getPrefixedText();
+ $wiki = WikiMap::getCurrentWikiId();
+ $globalid = "$wiki-$localid-$revId/$language";
+
+ $data = [
+ 'wiki' => $wiki,
+ 'uri' => $handle->getTitle()->getCanonicalURL(),
+ 'localid' => $localid,
+ 'language' => $language,
+ 'content' => $text,
+ 'group' => $handle->getGroupIds(),
+ ];
+
+ return new Document( $globalid, $data, '_doc' );
+ }
+
+ /**
+ * Create index
+ * @param bool $rebuild Deletes index first if already exists
+ */
+ public function createIndex( $rebuild ) {
+ $indexSettings = [
+ 'settings' => [
+ 'index' => [
+ 'number_of_shards' => $this->getShardCount(),
+ 'analysis' => [
+ 'filter' => [
+ 'prefix_filter' => [
+ 'type' => 'edge_ngram',
+ 'min_gram' => 2,
+ 'max_gram' => 20
+ ]
+ ],
+ 'analyzer' => [
+ 'prefix' => [
+ 'type' => 'custom',
+ 'tokenizer' => 'standard',
+ 'filter' => [ 'lowercase', 'prefix_filter' ]
+ ],
+ 'casesensitive' => [
+ 'tokenizer' => 'standard'
+ ]
+ ]
+ ]
+ ],
+ ],
+ ];
+ $replicas = $this->getReplicaCount();
+ if ( strpos( $replicas, '-' ) === false ) {
+ $indexSettings['settings']['index']['number_of_replicas'] = $replicas;
+ } else {
+ $indexSettings['settings']['index']['auto_expand_replicas'] = $replicas;
+ }
+
+ $this->getIndex()->create( $indexSettings, $rebuild );
+ }
+
+ /**
+ * Begin the bootstrap process.
+ *
+ * @throws RuntimeException
+ */
+ public function beginBootstrap() {
+ $this->checkElasticsearchVersion();
+ $index = $this->getIndex();
+ if ( $this->updateMapping ) {
+ $this->logOutput( 'Updating the index mappings...' );
+ $this->createIndex( true );
+ } elseif ( !$index->exists() ) {
+ $this->createIndex( false );
+ }
+
+ $settings = $index->getSettings();
+ $settings->setRefreshInterval( '-1' );
+
+ $this->deleteByQuery( $this->getIndex(), Query::create(
+ ( new Term() )->setTerm( 'wiki', WikiMap::getCurrentWikiId() ) ) );
+
+ $properties = [
+ 'wiki' => [ 'type' => 'keyword' ],
+ 'localid' => [ 'type' => 'keyword' ],
+ 'uri' => [ 'type' => 'keyword' ],
+ 'language' => [ 'type' => 'keyword' ],
+ 'group' => [ 'type' => 'keyword' ],
+ 'content' => [
+ 'type' => 'text',
+ 'fields' => [
+ 'content' => [
+ 'type' => 'text',
+ 'term_vector' => 'yes'
+ ],
+ 'prefix_complete' => [
+ 'type' => 'text',
+ 'analyzer' => 'prefix',
+ 'search_analyzer' => 'standard',
+ 'term_vector' => 'yes'
+ ],
+ 'case_sensitive' => [
+ 'type' => 'text',
+ 'analyzer' => 'casesensitive',
+ 'term_vector' => 'yes'
+ ]
+ ]
+ ],
+ ];
+ if ( $this->useElastica6() ) {
+ // Elastica 6 support
+ // @phan-suppress-next-line PhanUndeclaredClassMethod
+ $mapping = new \Elastica\Type\Mapping();
+ // @phan-suppress-next-line PhanUndeclaredMethod, PhanUndeclaredClassMethod
+ $mapping->setType( $index->getType( '_doc' ) );
+ // @phan-suppress-next-line PhanUndeclaredClassMethod
+ $mapping->setProperties( $properties );
+ // @phan-suppress-next-line PhanUndeclaredClassMethod
+ $mapping->send( [ 'include_type_name' => 'true' ] );
+ } else {
+ // Elastica 7
+ $mapping = new \Elastica\Mapping( $properties );
+ $mapping->send( $index, [ 'include_type_name' => 'false' ] );
+ }
+
+ $this->waitUntilReady();
+ }
+
+ public function beginBatch() {
+ // I hate the rule that forbids {}
+ }
+
+ /**
+ * @param array[] $batch
+ * @phan-param array<int,array{0:MessageHandle,1:string,2:string}> $batch
+ */
+ public function batchInsertDefinitions( array $batch ) {
+ $lb = new LinkBatch();
+ foreach ( $batch as $data ) {
+ $lb->addObj( $data[0]->getTitle() );
+ }
+ $lb->execute();
+
+ $this->batchInsertTranslations( $batch );
+ }
+
+ public function batchInsertTranslations( array $batch ) {
+ $docs = [];
+ foreach ( $batch as $data ) {
+ [ $handle, $sourceLanguage, $text ] = $data;
+ $revId = $handle->getTitleForLanguage( $sourceLanguage )->getLatestRevID();
+ $docs[] = $this->createDocument( $handle, $text, $revId );
+ }
+
+ $mwElasticUtilsClass = $this->getMWElasticUtilsClass();
+ $mwElasticUtilsClass::withRetry( self::BULK_INDEX_RETRY_ATTEMPTS,
+ function () use ( $docs ) {
+ $this->getIndex()->addDocuments( $docs );
+ },
+ function ( $e, $errors ) {
+ $c = get_class( $e );
+ $msg = $e->getMessage();
+ $this->logOutput( "Batch failed ($c: $msg), trying again in 10 seconds" );
+ sleep( 10 );
+ }
+ );
+ }
+
+ public function endBatch() {
+ // I hate the rule that forbids {}
+ }
+
+ public function endBootstrap() {
+ $index = $this->getIndex();
+ $index->refresh();
+ $index->forcemerge();
+ $index->getSettings()->setRefreshInterval( '5s' );
+ }
+
+ public function getClient() {
+ if ( !$this->client ) {
+ if ( isset( $this->config['config'] ) ) {
+ $this->client = new Client( $this->config['config'] );
+ } else {
+ $this->client = new Client();
+ }
+ }
+ return $this->client;
+ }
+
+ /** @return true if the backend is configured with the wikimedia extra plugin */
+ public function useWikimediaExtraPlugin() {
+ return isset( $this->config['use_wikimedia_extra'] ) && $this->config['use_wikimedia_extra'];
+ }
+
+ /** @return string */
+ private function getIndexName() {
+ return $this->config['index'] ?? 'ttmserver';
+ }
+
+ public function getIndex() {
+ return $this->getClient()
+ ->getIndex( $this->getIndexName() );
+ }
+
+ protected function getShardCount() {
+ return $this->config['shards'] ?? 1;
+ }
+
+ protected function getReplicaCount() {
+ return $this->config['replicas'] ?? '0-2';
+ }
+
+ /**
+ * Get index health
+ * TODO: Remove this code in the future as we drop support for
+ * older versions of the Elastica extension.
+ *
+ * @param string $indexName
+ * @return array the index health status
+ */
+ protected function getIndexHealth( $indexName ) {
+ $path = "_cluster/health/$indexName";
+ $response = $this->getClient()->request( $path );
+ if ( $response->hasError() ) {
+ throw new Exception( "Error while fetching index health status: " . $response->getError() );
+ }
+ return $response->getData();
+ }
+
+ /**
+ * Wait for the index to go green
+ *
+ * NOTE: This method has been copied and adjusted from
+ * CirrusSearch/includes/Maintenance/ConfigUtils.php. Ideally we'd
+ * like to make these utility methods available in the Elastica
+ * extension, but this one requires some refactoring in cirrus first.
+ * TODO: Remove this code in the future as we drop support for
+ * older versions of the Elastica extension.
+ *
+ * @param string $indexName
+ * @param int $timeout
+ * @return bool true if the index is green false otherwise.
+ */
+ protected function waitForGreen( $indexName, $timeout ) {
+ $startTime = time();
+ while ( ( $startTime + $timeout ) > time() ) {
+ try {
+ $response = $this->getIndexHealth( $indexName );
+ $status = $response['status'] ?? 'unknown';
+ if ( $status === 'green' ) {
+ $this->logOutput( "\tGreen!" );
+ return true;
+ }
+ $this->logOutput( "\tIndex is $status retrying..." );
+ sleep( 5 );
+ } catch ( Exception $e ) {
+ $this->logOutput( "Error while waiting for green ({$e->getMessage()}), retrying..." );
+ }
+ }
+ return false;
+ }
+
+ protected function waitUntilReady() {
+ $mwElasticUtilsClass = $this->getMWElasticUtilsClass();
+ $statuses = $mwElasticUtilsClass::waitForGreen(
+ $this->getClient(),
+ $this->getIndexName(),
+ self::WAIT_UNTIL_READY_TIMEOUT );
+ $this->logOutput( "Waiting for the index to go green..." );
+ foreach ( $statuses as $message ) {
+ $this->logOutput( $message );
+ }
+
+ if ( !$statuses->getReturn() ) {
+ die( "Timeout! Please check server logs for {$this->getIndexName()}." );
+ }
+ }
+
+ public function setLogger( $logger ) {
+ $this->logger = $logger;
+ }
+
+ // Can it get any uglier?
+ protected function logOutput( $text ) {
+ if ( $this->logger ) {
+ $this->logger->statusLine( "$text\n" );
+ }
+ }
+
+ /**
+ * Force the update of index mappings
+ * @inheritDoc
+ */
+ public function setDoReIndex() {
+ $this->updateMapping = true;
+ }
+
+ /**
+ * Parse query string and build the search query
+ * @param string $queryString
+ * @param array $opts
+ * @return array
+ */
+ protected function parseQueryString( $queryString, array $opts ) {
+ $fields = $highlights = [];
+ $terms = preg_split( '/\s+/', $queryString );
+ $match = $opts['match'];
+ $case = $opts['case'];
+
+ // Map each word in the query string with its corresponding field
+ foreach ( $terms as $term ) {
+ $prefix = strstr( $term, '*', true );
+ if ( $prefix ) {
+ // For wildcard search
+ $fields['content.prefix_complete'][] = $prefix;
+ } elseif ( $case === '1' ) {
+ // For case sensitive search
+ $fields['content.case_sensitive'][] = $term;
+ } else {
+ $fields['content'][] = $term;
+ }
+ }
+
+ // Allow searching either by message content or message id (page name
+ // without language subpage) with exact match only.
+ $searchQuery = new BoolQuery();
+ foreach ( $fields as $analyzer => $words ) {
+ foreach ( $words as $word ) {
+ $boolQuery = new BoolQuery();
+ $contentQuery = new MatchQuery();
+ $contentQuery->setFieldQuery( $analyzer, $word );
+ $boolQuery->addShould( $contentQuery );
+ $messageQuery = new Term();
+ $messageQuery->setTerm( 'localid', $word );
+ $boolQuery->addShould( $messageQuery );
+
+ if ( $match === 'all' ) {
+ $searchQuery->addMust( $boolQuery );
+ } else {
+ $searchQuery->addShould( $boolQuery );
+ }
+
+ // Fields for highlighting
+ $highlights[$analyzer] = [
+ 'number_of_fragments' => 0
+ ];
+
+ // Allow searching by exact message title (page name with
+ // language subpage).
+ $title = Title::newFromText( $word );
+ if ( !$title ) {
+ continue;
+ }
+ $handle = new MessageHandle( $title );
+ if ( $handle->isValid() && $handle->getCode() !== '' ) {
+ $localid = $handle->getTitleForBase()->getPrefixedText();
+ $boolQuery = new BoolQuery();
+ $messageId = new Term();
+ $messageId->setTerm( 'localid', $localid );
+ $boolQuery->addMust( $messageId );
+ $searchQuery->addShould( $boolQuery );
+ }
+ }
+ }
+
+ return [ $searchQuery, $highlights ];
+ }
+
+ /**
+ * Search interface
+ * @param string $queryString
+ * @param array $opts
+ * @param array $highlight
+ * @return \Elastica\Search
+ */
+ public function createSearch( $queryString, $opts, $highlight ) {
+ $query = new Query();
+
+ [ $searchQuery, $highlights ] = $this->parseQueryString( $queryString, $opts );
+ $query->setQuery( $searchQuery );
+
+ $language = new Terms( 'language' );
+ $language->setField( 'language' );
+ $language->setSize( 500 );
+ $query->addAggregation( $language );
+
+ $group = new Terms( 'group' );
+ $group->setField( 'group' );
+ // Would like to prioritize the top level groups and not show subgroups
+ // if the top group has only few hits, but that doesn't seem to be possile.
+ $group->setSize( 500 );
+ $query->addAggregation( $group );
+
+ $query->setSize( $opts['limit'] );
+ $query->setFrom( $opts['offset'] );
+
+ // BoolAnd filters are executed in sequence per document. Bool filters with
+ // multiple must clauses are executed by converting each filter into a bit
+ // field then anding them together. The latter is normally faster if either
+ // of the subfilters are reused. May not make a difference in this context.
+ $filters = new BoolQuery();
+
+ $language = $opts['language'];
+ if ( $language !== '' ) {
+ $languageFilter = new Term();
+ $languageFilter->setTerm( 'language', $language );
+ $filters->addFilter( $languageFilter );
+ }
+
+ $group = $opts['group'];
+ if ( $group !== '' ) {
+ $groupFilter = new Term();
+ $groupFilter->setTerm( 'group', $group );
+ $filters->addFilter( $groupFilter );
+ }
+
+ // Check that we have at least one filter to avoid invalid query errors.
+ if ( $language !== '' || $group !== '' ) {
+ // TODO: This seems wrong, but perhaps for aggregation purposes?
+ // should make $search a must clause and use the bool query
+ // as main.
+ $query->setPostFilter( $filters );
+ }
+
+ [ $pre, $post ] = $highlight;
+ $query->setHighlight( [
+ // The value must be an object
+ 'pre_tags' => [ $pre ],
+ 'post_tags' => [ $post ],
+ 'fields' => $highlights,
+ ] );
+
+ return $this->getIndex()->createSearch( $query );
+ }
+
+ /**
+ * Search interface
+ * @param string $queryString
+ * @param array $opts
+ * @param array $highlight
+ * @throws TTMServerException
+ * @return \Elastica\ResultSet
+ */
+ public function search( $queryString, $opts, $highlight ) {
+ $search = $this->createSearch( $queryString, $opts, $highlight );
+
+ try {
+ return $search->search();
+ } catch ( ExceptionInterface $e ) {
+ throw new TTMServerException( $e->getMessage() );
+ }
+ }
+
+ /**
+ * @param \Elastica\ResultSet $resultset
+ * @return array
+ */
+ public function getFacets( $resultset ) {
+ $aggs = $resultset->getAggregations();
+ '@phan-var array[][][] $aggs';
+
+ $ret = [
+ 'language' => [],
+ 'group' => []
+ ];
+
+ foreach ( $aggs as $type => $info ) {
+ foreach ( $info['buckets'] as $row ) {
+ $ret[$type][$row['key']] = $row['doc_count'];
+ }
+ }
+
+ return $ret;
+ }
+
+ /**
+ * @param \Elastica\ResultSet $resultset
+ * @return int
+ */
+ public function getTotalHits( $resultset ) {
+ return $resultset->getTotalHits();
+ }
+
+ /**
+ * @param \Elastica\ResultSet $resultset
+ * @return array
+ */
+ public function getDocuments( $resultset ) {
+ $ret = [];
+ foreach ( $resultset->getResults() as $document ) {
+ $data = $document->getData();
+ $hl = $document->getHighlights();
+ if ( isset( $hl['content.prefix_complete'][0] ) ) {
+ $data['content'] = $hl['content.prefix_complete'][0];
+ } elseif ( isset( $hl['content.case_sensitive'][0] ) ) {
+ $data['content'] = $hl['content.case_sensitive'][0];
+ } elseif ( isset( $hl['content'][0] ) ) {
+ $data['content'] = $hl['content'][0];
+ }
+ $ret[] = $data;
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Delete docs by query by using the scroll API.
+ * TODO: Elastica\Index::deleteByQuery() ? was removed
+ * in 2.x and returned in 5.x.
+ *
+ * @param \Elastica\Index $index the source index
+ * @param Query $query
+ * @throws RuntimeException
+ */
+ private function deleteByQuery( \Elastica\Index $index, Query $query ) {
+ try {
+ $mwElasticUtilsClass = $this->getMWElasticUtilsClass();
+ $mwElasticUtilsClass::deleteByQuery( $index, $query, /* $allowConflicts = */ true );
+ } catch ( Exception $e ) {
+ LoggerFactory::getInstance( 'ElasticSearchTTMServer' )->error(
+ 'Problem encountered during deletion.',
+ [ 'exception' => $e ]
+ );
+
+ throw new RuntimeException( "Problem encountered during deletion.\n" . $e );
+ }
+ }
+
+ /**
+ * For MW < 1.38 MWElasticUtils was not namespaced in the Elastica extension
+ * Changed in Id29047c67a7d0bedc9a7e7ebd3879f21f82b2742
+ * @return string
+ */
+ private function getMWElasticUtilsClass(): string {
+ if ( class_exists( MWElasticUtils::class ) ) {
+ return MWElasticUtils::class;
+ } else {
+ return '\MWElasticUtils';
+ }
+ }
+
+ /* @throws RuntimeException */
+ private function getElasticsearchVersion(): string {
+ $response = $this->getClient()->request( '' );
+ if ( !$response->isOK() ) {
+ throw new \RuntimeException( "Cannot fetch elasticsearch version: " . $response->getError() );
+ }
+
+ $result = $response->getData();
+ if ( !isset( $result['version']['number'] ) ) {
+ throw new \RuntimeException( 'Unable to determine elasticsearch version, aborting.' );
+ }
+
+ return $result[ 'version' ][ 'number' ];
+ }
+
+ private function checkElasticsearchVersion() {
+ $version = $this->getElasticsearchVersion();
+ if ( strpos( $version, '6.8' ) !== 0 && strpos( $version, '7.' ) !== 0 ) {
+ throw new \RuntimeException( "Only Elasticsearch 6.8.x and 7.x are supported. Your version: $version." );
+ }
+ }
+
+ private function useElastica6(): bool {
+ return class_exists( '\Elastica\Type' );
+ }
+}
diff --git a/Translate/ttmserver/Exceptions.php b/Translate/ttmserver/Exceptions.php
new file mode 100644
index 00000000..97859cf0
--- /dev/null
+++ b/Translate/ttmserver/Exceptions.php
@@ -0,0 +1,4 @@
+<?php
+
+class TTMServerException extends MWException {
+}
diff --git a/Translate/ttmserver/FakeTTMServer.php b/Translate/ttmserver/FakeTTMServer.php
new file mode 100644
index 00000000..9a35822e
--- /dev/null
+++ b/Translate/ttmserver/FakeTTMServer.php
@@ -0,0 +1,63 @@
+<?php
+/**
+ * TTMServer - The Translate extension translation memory interface
+ *
+ * @file
+ * @author Niklas Laxström
+ * @copyright Copyright © 2012-2013, Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @ingroup TTMServer
+ */
+
+/**
+ * NO-OP version of TTMServer when it is disabled.
+ * Keeps other code simpler when they can just do
+ * TTMServer::primary()->update( ... );
+ * @since 2012-01-28
+ * @ingroup TTMServer
+ */
+class FakeTTMServer implements ReadableTTMServer, WritableTTMServer {
+ public function query( $sourceLanguage, $targetLanguage, $text ) {
+ return [];
+ }
+
+ public function isLocalSuggestion( array $suggestion ) {
+ return false;
+ }
+
+ public function expandLocation( array $suggestion ) {
+ return '';
+ }
+
+ public function update( MessageHandle $handle, $targetText ) {
+ }
+
+ public function beginBootstrap() {
+ }
+
+ public function beginBatch() {
+ }
+
+ public function batchInsertDefinitions( array $batch ) {
+ }
+
+ public function batchInsertTranslations( array $batch ) {
+ }
+
+ public function endBatch() {
+ }
+
+ public function endBootstrap() {
+ }
+
+ public function getMirrors() {
+ return [];
+ }
+
+ public function isFrozen() {
+ return false;
+ }
+
+ public function setDoReIndex() {
+ }
+}
diff --git a/Translate/ttmserver/FuzzyLikeThis.php b/Translate/ttmserver/FuzzyLikeThis.php
new file mode 100644
index 00000000..8369f25b
--- /dev/null
+++ b/Translate/ttmserver/FuzzyLikeThis.php
@@ -0,0 +1,213 @@
+<?php
+/**
+ * NOTE: the following class has been copied from elastica 2.3.1 :
+ * https://github.com/ruflin/Elastica/blob/2.3.1/lib/Elastica/Query/FuzzyLikeThis.php
+ * (few modifications have been made to comply with phpcs rules used by this extension)
+ * It is intended to be used as a temporary workaround with the wmf extra
+ * elasticsearch plugin with elasticsearch 2.x.
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2014 Nicolas Ruflin
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * (c.f. https://github.com/ruflin/Elastica/blob/2.3.1/LICENSE.txt)
+ *
+ * @file
+ * @license MIT
+ * @ingroup TTMServer
+ */
+
+/**
+ * Fuzzy Like This query.
+ *
+ * @author Raul Martinez, Jr <juneym@gmail.com>
+ *
+ * @link https://www.elastic.co/guide/en/elasticsearch/reference/1.7/query-dsl-flt-query.html
+ *
+ * @since 2016.05
+ * @ingroup TTMServer
+ */
+class FuzzyLikeThis extends \Elastica\Query\AbstractQuery {
+ // phpcs:disable PSR2.Classes.PropertyDeclaration.Underscore
+ /**
+ * Field names.
+ *
+ * @var array Field names
+ */
+ protected $_fields = [];
+ /**
+ * Like text.
+ *
+ * @var string Like text
+ */
+ protected $_likeText = '';
+ /**
+ * Ignore term frequency.
+ *
+ * @var bool ignore term frequency
+ */
+ protected $_ignoreTF = false;
+ /**
+ * Max query terms value.
+ *
+ * @var int Max query terms value
+ */
+ protected $_maxQueryTerms = 25;
+ /**
+ * fuzziness.
+ *
+ * @var int fuzziness
+ */
+ protected $_fuzziness = 2;
+ /**
+ * Prefix Length.
+ *
+ * @var int Prefix Length
+ */
+ protected $_prefixLength = 0;
+ /**
+ * Analyzer.
+ *
+ * @var string Analyzer
+ */
+ protected $_analyzer;
+ // phpcs:enable
+
+ /**
+ * Adds field to flt query.
+ *
+ * @param array $fields Field names
+ *
+ * @return $this
+ */
+ public function addFields( array $fields ) {
+ $this->_fields = $fields;
+
+ return $this;
+ }
+
+ /**
+ * Set the "like_text" value.
+ *
+ * @param string $text
+ *
+ * @return $this
+ */
+ public function setLikeText( $text ) {
+ $text = trim( $text );
+ $this->_likeText = $text;
+
+ return $this;
+ }
+
+ /**
+ * Set the "ignore_tf" value (ignore term frequency).
+ *
+ * @param bool $ignoreTF
+ *
+ * @return $this
+ */
+ public function setIgnoreTF( $ignoreTF ) {
+ $this->_ignoreTF = (bool)$ignoreTF;
+
+ return $this;
+ }
+
+ /**
+ * Set the minimum similarity.
+ *
+ * @param int $value
+ *
+ * @return $this
+ */
+ public function setFuzziness( $value ) {
+ $value = (int)$value;
+ $this->_fuzziness = $value;
+
+ return $this;
+ }
+
+ /**
+ * @param int $value Prefix length
+ *
+ * @return $this
+ */
+ public function setPrefixLength( $value ) {
+ $this->_prefixLength = (int)$value;
+
+ return $this;
+ }
+
+ /**
+ * Set max_query_terms.
+ *
+ * @param int $value Max query terms value
+ *
+ * @return $this
+ */
+ public function setMaxQueryTerms( $value ) {
+ $this->_maxQueryTerms = (int)$value;
+
+ return $this;
+ }
+
+ /**
+ * @param string $text Analyzer text
+ *
+ * @return $this
+ */
+ public function setAnalyzer( $text ) {
+ $text = trim( $text );
+ $this->_analyzer = $text;
+
+ return $this;
+ }
+
+ /**
+ * Converts fuzzy like this query to array.
+ *
+ * @return array Query array
+ *
+ * @see \Elastica\Query\AbstractQuery::toArray()
+ */
+ public function toArray() {
+ $args = [];
+ if ( !empty( $this->_fields ) ) {
+ $args['fields'] = $this->_fields;
+ }
+
+ if ( !empty( $this->_analyzer ) ) {
+ $args['analyzer'] = $this->_analyzer;
+ }
+
+ $args['fuzziness'] = ( $this->_fuzziness > 0 ) ? $this->_fuzziness : 0;
+
+ $args['like_text'] = $this->_likeText;
+ $args['prefix_length'] = $this->_prefixLength;
+ $args['ignore_tf'] = $this->_ignoreTF;
+ $args['max_query_terms'] = $this->_maxQueryTerms;
+
+ $data = parent::toArray();
+ $args = array_merge( $args, $data['fuzzy_like_this'] );
+
+ return [ 'fuzzy_like_this' => $args ];
+ }
+}
diff --git a/Translate/ttmserver/Interfaces.php b/Translate/ttmserver/Interfaces.php
new file mode 100644
index 00000000..0240bbef
--- /dev/null
+++ b/Translate/ttmserver/Interfaces.php
@@ -0,0 +1,161 @@
+<?php
+/**
+ * TTMServer - The Translate extension translation memory interface
+ *
+ * @file
+ * @author Niklas Laxström
+ * @copyright Copyright © 2012-2013, Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @ingroup TTMServer
+ */
+
+/**
+ * Interface for TTMServer that can be queried (=all of them).
+ * @ingroup TTMServer
+ * @since 2012-06-27
+ */
+interface ReadableTTMServer {
+ /**
+ * Fetches all relevant suggestions for given text.
+ *
+ * @param string $sourceLanguage language code for the provide text
+ * @param string $targetLanguage language code for the suggestions
+ * @param string $text the text for which to search suggestions
+ * @return array List: unordered suggestions, which each has fields:
+ * - source: String: the original text of the suggestion
+ * - target: String: the suggestion
+ * - context: String: title of the page where the suggestion comes from
+ * - quality: Float: the quality of suggestion, 1 is perfect match
+ */
+ public function query( $sourceLanguage, $targetLanguage, $text );
+
+ /**
+ * Determines if the suggestion returned by this TTMServer comes
+ * from this wiki or any other wiki.
+ * @param array $suggestion
+ * @return bool
+ */
+ public function isLocalSuggestion( array $suggestion );
+
+ /**
+ * Given suggestion returned by this TTMServer, constructs fully
+ * qualified URL to the location of the translation.
+ * @param array $suggestion
+ * @return string URL
+ */
+ public function expandLocation( array $suggestion );
+}
+
+/**
+ * Interface for TTMServer that can be updated.
+ * @ingroup TTMServer
+ * @since 2012-06-27
+ */
+interface WritableTTMServer {
+ /**
+ * Shovels the new translation into translation memory.
+ * Use this for single updates (=after message edit).
+ * If no text is provided, entry will be removed from the translation
+ * memory.
+ *
+ * @param MessageHandle $handle
+ * @param string|null $targetText Use null to only delete.
+ */
+ public function update( MessageHandle $handle, $targetText );
+
+ /**
+ * Called when starting to fill the translation memory.
+ * Set up necessary variables and remove old content
+ * from the server.
+ */
+ public function beginBootstrap();
+
+ /**
+ * Called before every batch (MessageGroup).
+ */
+ public function beginBatch();
+
+ /**
+ * Called multiple times per batch if necessary.
+ *
+ * @param array $batch
+ */
+ public function batchInsertDefinitions( array $batch );
+
+ /**
+ * Called multiple times per batch if necessary.
+ *
+ * @param array $batch
+ */
+ public function batchInsertTranslations( array $batch );
+
+ /**
+ * Called before every batch (MessageGroup).
+ */
+ public function endBatch();
+
+ /**
+ * Do any cleanup, optimizing etc.
+ */
+ public function endBootstrap();
+
+ /**
+ * Get the list of services to duplicate writes to make them "mirrors"
+ * of this service.
+ *
+ * @since 2017.04
+ * @return string[]
+ */
+ public function getMirrors();
+
+ /**
+ * Check if the service is frozen, attempting to write to
+ * a frozen service may lead to errors or unexpected behaviors.
+ *
+ * @since 2017.04
+ * @deprecated since 2022.04
+ * @return bool true if the service is frozen
+ */
+ public function isFrozen();
+
+ /**
+ * Instruct the service to fully wipe the index and start from scratch.
+ * @since 2020.01
+ */
+ public function setDoReIndex();
+}
+
+/**
+ * Interface for TTMServer that can act as backend for translation search.
+ * @ingroup TTMServer
+ * @since 2014.04
+ */
+interface SearchableTTMServer {
+ /**
+ * Performs a search in the translation database.
+ *
+ * @param string $queryString String to search for.
+ * @param array $opts Query options like language.
+ * @param array $highlight Tags for highlighting.
+ * @return mixed Result set
+ */
+ public function search( $queryString, $opts, $highlight );
+
+ /**
+ * @param mixed $resultset
+ * @return array[]
+ */
+ public function getFacets( $resultset );
+
+ /**
+ * @param mixed $resultset
+ * @return int
+ */
+ public function getTotalHits( $resultset );
+
+ /**
+ * @param mixed $resultset
+ * @return array[]
+ */
+ public function getDocuments( $resultset );
+}
diff --git a/Translate/ttmserver/RemoteTTMServer.php b/Translate/ttmserver/RemoteTTMServer.php
new file mode 100644
index 00000000..402ad5ac
--- /dev/null
+++ b/Translate/ttmserver/RemoteTTMServer.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * TTMServer - The Translate extension translation memory interface
+ *
+ * @file
+ * @author Niklas Laxström
+ * @copyright Copyright © 2012-2013, Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @ingroup TTMServer
+ */
+
+/**
+ * Class for handling remote TTMServers over MediaWiki API.
+ * Currently querying is done in TranslationHelpers, and
+ * this class only handles location retrieval.
+ * @since 2012-06-27
+ * @ingroup TTMServer
+ */
+class RemoteTTMServer extends TTMServer implements ReadableTTMServer {
+ public function query( $sourceLanguage, $targetLanguage, $text ) {
+ // @todo Implement some day perhaps?
+ return [];
+ }
+
+ public function isLocalSuggestion( array $suggestion ) {
+ return false;
+ }
+
+ public function expandLocation( array $suggestion ) {
+ return $suggestion['location'];
+ }
+}
diff --git a/Translate/ttmserver/TTMServer.php b/Translate/ttmserver/TTMServer.php
new file mode 100644
index 00000000..6c1f4c58
--- /dev/null
+++ b/Translate/ttmserver/TTMServer.php
@@ -0,0 +1,185 @@
+<?php
+/**
+ * TTMServer - The Translate extension translation memory interface
+ *
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @defgroup TTMServer The Translate extension translation memory interface
+ */
+
+use MediaWiki\Extension\Translate\Services;
+use MediaWiki\MediaWikiServices;
+
+/**
+ * Some general static methods for instantiating TTMServer and helpers.
+ * @since 2012-01-28
+ * Rewritten in 2012-06-27.
+ * @ingroup TTMServer
+ */
+abstract class TTMServer {
+ /** @var array */
+ protected $config;
+
+ /** @param array $config */
+ public function __construct( array $config ) {
+ $this->config = $config;
+ }
+
+ /**
+ * @param array $config
+ * @return TTMServer|null
+ * @throws MWException
+ * @deprecated Use Services::getInstance()->getTtmServerFactory()->create()
+ */
+ public static function factory( array $config ) {
+ // Cannot call factory directly because we don't have the name.
+ if ( isset( $config['class'] ) ) {
+ $class = $config['class'];
+
+ return new $class( $config );
+ } elseif ( isset( $config['type'] ) ) {
+ $type = $config['type'];
+ switch ( $type ) {
+ case 'ttmserver':
+ return new DatabaseTTMServer( $config );
+ case 'remote-ttmserver':
+ return new RemoteTTMServer( $config );
+ default:
+ return null;
+ }
+ }
+
+ throw new MWException( 'TTMServer with no type' );
+ }
+
+ /**
+ * Returns the primary server instance, useful for chaining.
+ * Primary instance is defined by $wgTranslateTranslationDefaultService
+ * which is a key to $wgTranslateTranslationServices.
+ * @return WritableTTMServer
+ * @deprecated Use Services::getInstance()->getTtmServerFactory()->getDefault()
+ */
+ public static function primary() {
+ return Services::getInstance()->getTtmServerFactory()->getDefault();
+ }
+
+ /**
+ * @param array[] $suggestions
+ * @return array[]
+ */
+ public static function sortSuggestions( array $suggestions ) {
+ usort( $suggestions, static function ( $a, $b ) {
+ return $b['quality'] <=> $a['quality'];
+ } );
+
+ return $suggestions;
+ }
+
+ /**
+ * PHP implementation of Levenshtein edit distance algorithm.
+ * Uses the native PHP implementation when possible for speed.
+ * The native levenshtein is limited to 255 bytes.
+ *
+ * @param string $str1
+ * @param string $str2
+ * @param int $length1
+ * @param int $length2
+ * @return int
+ */
+ public static function levenshtein( $str1, $str2, $length1, $length2 ) {
+ if ( $length1 === 0 ) {
+ return $length2;
+ }
+ if ( $length2 === 0 ) {
+ return $length1;
+ }
+ if ( $str1 === $str2 ) {
+ return 0;
+ }
+
+ $bytelength1 = strlen( $str1 );
+ $bytelength2 = strlen( $str2 );
+ if ( $bytelength1 === $length1 && $bytelength1 <= 255
+ && $bytelength2 === $length2 && $bytelength2 <= 255
+ ) {
+ return levenshtein( $str1, $str2 );
+ }
+
+ $prevRow = range( 0, $length2 );
+ for ( $i = 0; $i < $length1; $i++ ) {
+ $currentRow = [];
+ $currentRow[0] = $i + 1;
+ $c1 = mb_substr( $str1, $i, 1 );
+ for ( $j = 0; $j < $length2; $j++ ) {
+ $c2 = mb_substr( $str2, $j, 1 );
+ $insertions = $prevRow[$j + 1] + 1;
+ $deletions = $currentRow[$j] + 1;
+ $substitutions = $prevRow[$j] + ( ( $c1 !== $c2 ) ? 1 : 0 );
+ $currentRow[] = min( $insertions, $deletions, $substitutions );
+ }
+ $prevRow = $currentRow;
+ }
+
+ return $prevRow[$length2];
+ }
+
+ /**
+ * Hook: ArticleDeleteComplete
+ * @param WikiPage $wikipage
+ */
+ public static function onDelete( WikiPage $wikipage ) {
+ $handle = new MessageHandle( $wikipage->getTitle() );
+ $job = TTMServerMessageUpdateJob::newJob( $handle, 'delete' );
+ MediaWikiServices::getInstance()->getJobQueueGroup()->push( $job );
+ }
+
+ /**
+ * Called from TranslateEditAddons::onSave
+ * @param MessageHandle $handle
+ */
+ public static function onChange( MessageHandle $handle ) {
+ $job = TTMServerMessageUpdateJob::newJob( $handle, 'refresh' );
+ MediaWikiServices::getInstance()->getJobQueueGroup()->push( $job );
+ }
+
+ /**
+ * @param MessageHandle $handle
+ * @param array $old
+ */
+ public static function onGroupChange( MessageHandle $handle, $old ) {
+ if ( $old === [] ) {
+ // Don't bother for newly added messages
+ return;
+ }
+
+ $job = TTMServerMessageUpdateJob::newJob( $handle, 'rebuild' );
+ MediaWikiServices::getInstance()->getJobQueueGroup()->push( $job );
+ }
+
+ /** @return string[] */
+ public function getMirrors() {
+ global $wgTranslateTranslationServices;
+ if ( isset( $this->config['mirrors'] ) ) {
+ $mirrors = [];
+ foreach ( $this->config['mirrors'] as $name ) {
+ if ( !is_string( $name ) ) {
+ throw new TTMServerException( "Invalid configuration set in " .
+ "mirrors, expected an array of strings" );
+ }
+ if ( !isset( $wgTranslateTranslationServices[$name] ) ) {
+ throw new TTMServerException( "Invalid configuration in " .
+ "mirrors, unknown service $name" );
+ }
+ $mirrors[$name] = true;
+ }
+ return array_keys( $mirrors );
+ }
+ return [];
+ }
+
+ /** @return bool */
+ public function isFrozen() {
+ return false;
+ }
+}
diff --git a/Translate/ttmserver/TTMServerMessageUpdateJob.php b/Translate/ttmserver/TTMServerMessageUpdateJob.php
new file mode 100644
index 00000000..6d81c0ec
--- /dev/null
+++ b/Translate/ttmserver/TTMServerMessageUpdateJob.php
@@ -0,0 +1,301 @@
+<?php
+/**
+ * Contains class with job for updating translation memory.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\MediaWikiServices;
+
+/**
+ * Job for updating translation memory.
+ *
+ * job params:
+ * - command: the command to run, defaults to 'rebuild'
+ * - service: the service to write to, if set to null the job will write
+ * to the default (primary) service and its replicas.
+ * - errorCount: number of errors encountered while trying to perform the write
+ * on this service
+ *
+ * This job handles retries itself and return false in allowRetries to disable
+ * JobQueue's internal retry service.
+ *
+ * If mirroring is activated on the primary service then the first job
+ * will try to write to all services, it will resend a new job to
+ * every single service that failed and will increment errorCount.
+ * When too many errors occur on single service the job is dropped.
+ *
+ * @ingroup JobQueue
+ */
+class TTMServerMessageUpdateJob extends Job {
+ /**
+ * Number of *retries* allowed, 4 means we attempt
+ * to run the job 5 times (1 initial attempt + 4 retries).
+ */
+ protected const MAX_ERROR_RETRY = 4;
+
+ /**
+ * Constant used by backoffDelay().
+ * With 7 the cumulative delay between the first and last attempt is
+ * between 8 and 33 minutes.
+ */
+ protected const WRITE_BACKOFF_EXPONENT = 7;
+ /** @var JobQueueGroup */
+ private $jobQueueGroup;
+
+ /**
+ * @param MessageHandle $handle
+ * @param string $command
+ * @return self
+ */
+ public static function newJob( MessageHandle $handle, $command ) {
+ $job = new self( $handle->getTitle(), [ 'command' => $command ] );
+
+ return $job;
+ }
+
+ /**
+ * @param Title $title
+ * @param array $params
+ */
+ public function __construct( $title, $params = [] ) {
+ parent::__construct(
+ __CLASS__,
+ $title,
+ $params + [
+ 'command' => 'rebuild',
+ 'service' => null,
+ 'errorCount' => 0,
+ ]
+ );
+
+ $this->jobQueueGroup = MediaWikiServices::getInstance()->getJobQueueGroup();
+ }
+
+ /**
+ * Fetch all the translations and update them.
+ * @return bool
+ */
+ public function run() {
+ global $wgTranslateTranslationServices,
+ $wgTranslateTranslationDefaultService;
+
+ $service = $this->params['service'];
+ $writeToMirrors = false;
+
+ if ( $service === null ) {
+ $service = $wgTranslateTranslationDefaultService;
+ $writeToMirrors = true;
+ }
+
+ if ( !isset( $wgTranslateTranslationServices[$service] ) ) {
+ LoggerFactory::getInstance( 'TTMServerUpdates' )->warning(
+ 'Received update job for a an unknown service {service}.',
+ [ 'service' => $service ]
+ );
+ return true;
+ }
+
+ $services = [ $service ];
+ if ( $writeToMirrors ) {
+ $config = $wgTranslateTranslationServices[$service];
+ $server = TTMServer::factory( $config );
+ $services = array_unique(
+ array_merge( $services, $server->getMirrors() )
+ );
+ }
+
+ foreach ( $services as $service ) {
+ $this->runCommandWithRetry( $service );
+ }
+ return true;
+ }
+
+ /** @inheritDoc */
+ public function allowRetries() {
+ return false;
+ }
+
+ /**
+ * Run the update on the specified service name.
+ *
+ * @param string $serviceName the service name
+ */
+ private function runCommandWithRetry( $serviceName ) {
+ global $wgTranslateTranslationServices;
+
+ if ( !isset( $wgTranslateTranslationServices[$serviceName] ) ) {
+ LoggerFactory::getInstance( 'TTMServerUpdates' )->warning(
+ 'Cannot write to {service}: service is unknown.',
+ [ 'service' => $serviceName ]
+ );
+ return;
+ }
+ $ttmserver = TTMServer::factory( $wgTranslateTranslationServices[$serviceName] );
+
+ if ( $serviceName === null || !( $ttmserver instanceof WritableTTMServer ) ) {
+ LoggerFactory::getInstance( 'TTMServerUpdates' )->warning(
+ 'Received update job for a service that does not implement ' .
+ 'WritableTTMServer, please check config for {service}.',
+ [ 'service' => $serviceName ]
+ );
+ return;
+ }
+
+ try {
+ $this->runCommand( $ttmserver );
+ } catch ( Exception $e ) {
+ $this->requeueError( $serviceName, $e );
+ }
+ }
+
+ /**
+ * @param string $serviceName the service in error
+ * @param Exception $e the error
+ */
+ private function requeueError( $serviceName, $e ) {
+ LoggerFactory::getInstance( 'TTMServerUpdates' )->warning(
+ 'Exception thrown while running {command} on ' .
+ 'service {service}: {errorMessage}',
+ [
+ 'command' => $this->params['command'],
+ 'service' => $serviceName,
+ 'errorMessage' => $e->getMessage(),
+ 'exception' => $e,
+ ]
+ );
+ if ( $this->params['errorCount'] >= self::MAX_ERROR_RETRY ) {
+ LoggerFactory::getInstance( 'TTMServerUpdates' )->warning(
+ 'Dropping failing job {command} for service {service} ' .
+ 'after repeated failure',
+ [
+ 'command' => $this->params['command'],
+ 'service' => $serviceName,
+ ]
+ );
+ return;
+ }
+
+ $delay = self::backoffDelay( $this->params['errorCount'] );
+ $job = clone $this;
+ $job->params['errorCount']++;
+ $job->params['service'] = $serviceName;
+ $job->setDelay( $delay );
+ LoggerFactory::getInstance( 'TTMServerUpdates' )->info(
+ 'Update job reported failure on service {service}. ' .
+ 'Requeueing job with delay of {delay}.',
+ [
+ 'service' => $serviceName,
+ 'delay' => $delay
+ ]
+ );
+ $this->resend( $job );
+ }
+
+ /**
+ * Extracted for testing purpose
+ * @param self $job
+ */
+ protected function resend( self $job ) {
+ $this->jobQueueGroup->push( $job );
+ }
+
+ private function runCommand( WritableTTMServer $ttmserver ) {
+ $handle = $this->getHandle();
+ $command = $this->params['command'];
+
+ if ( $command === 'delete' ) {
+ $this->updateItem( $ttmserver, $handle, null, false );
+ } elseif ( $command === 'rebuild' ) {
+ $this->updateMessage( $ttmserver, $handle );
+ } elseif ( $command === 'refresh' ) {
+ $this->updateTranslation( $ttmserver, $handle );
+ }
+ }
+
+ /**
+ * Extracted for testing purpose
+ *
+ * @return MessageHandle
+ */
+ protected function getHandle() {
+ return new MessageHandle( $this->title );
+ }
+
+ /**
+ * Extracted for testing purpose
+ *
+ * @param MessageHandle $handle
+ * @return string
+ */
+ protected function getTranslation( MessageHandle $handle ) {
+ return TranslateUtils::getMessageContent(
+ $handle->getKey(),
+ $handle->getCode(),
+ $handle->getTitle()->getNamespace()
+ );
+ }
+
+ private function updateMessage( WritableTTMServer $ttmserver, MessageHandle $handle ) {
+ // Base page update, e.g. group change. Update everything.
+ $translations = TranslateUtils::getTranslations( $handle );
+ foreach ( $translations as $page => $data ) {
+ $tTitle = Title::makeTitle( $this->title->getNamespace(), $page );
+ $tHandle = new MessageHandle( $tTitle );
+ $this->updateItem( $ttmserver, $tHandle, $data[0], $tHandle->isFuzzy() );
+ }
+ }
+
+ private function updateTranslation( WritableTTMServer $ttmserver, MessageHandle $handle ) {
+ // Update only this translation
+ $translation = $this->getTranslation( $handle );
+ $this->updateItem( $ttmserver, $handle, $translation, $handle->isFuzzy() );
+ }
+
+ private function updateItem( WritableTTMServer $ttmserver, MessageHandle $handle, $text, $fuzzy ) {
+ if ( $fuzzy ) {
+ $text = null;
+ }
+ $ttmserver->update( $handle, $text );
+ }
+
+ /**
+ * Set a delay for this job. Note that this might not be possible, the JobQueue
+ * implementation handling this job doesn't support it (JobQueueDB) but is possible
+ * for the high performance JobQueueRedis. Note also that delays are minimums -
+ * at least JobQueueRedis makes no effort to remove the delay as soon as possible
+ * after it has expired. By default it only checks every five minutes or so.
+ * Note yet again that if another delay has been set that is longer then this one
+ * then the _longer_ delay stays.
+ *
+ * @param int $delay seconds to delay this job if possible
+ */
+ public function setDelay( $delay ) {
+ $jobQueue = $this->jobQueueGroup->get( $this->getType() );
+ if ( !$delay || !$jobQueue->delayedJobsEnabled() ) {
+ return;
+ }
+ $oldTime = $this->getReleaseTimestamp();
+ $newTime = time() + $delay;
+ if ( $oldTime !== null && $oldTime >= $newTime ) {
+ return;
+ }
+ $this->params[ 'jobReleaseTimestamp' ] = $newTime;
+ }
+
+ /**
+ * @param int $errorCount The number of times the job has errored out.
+ * @return int Number of seconds to delay. With the default minimum exponent
+ * of 6 the possible return values are 64, 128, 256, 512 and 1024 giving a
+ * maximum delay of 17 minutes.
+ */
+ public static function backoffDelay( $errorCount ) {
+ return ceil( pow(
+ 2,
+ static::WRITE_BACKOFF_EXPONENT + rand( 0, min( $errorCount, 4 ) )
+ ) );
+ }
+}
diff --git a/Translate/utils/ExternalMessageSourceStateComparator.php b/Translate/utils/ExternalMessageSourceStateComparator.php
new file mode 100644
index 00000000..7434f3ad
--- /dev/null
+++ b/Translate/utils/ExternalMessageSourceStateComparator.php
@@ -0,0 +1,433 @@
+<?php
+
+/**
+ * Finds external changes for file based message groups.
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2013.12
+ */
+
+use MediaWiki\Extension\Translate\MessageSync\MessageSourceChange;
+use MediaWiki\Extension\Translate\Utilities\StringComparators\StringComparator;
+
+class ExternalMessageSourceStateComparator {
+ /** Process all languages supported by the message group */
+ public const ALL_LANGUAGES = 'all languages';
+
+ /** @var StringComparator */
+ protected $stringComparator;
+
+ /** @param StringComparator $stringComparator */
+ public function __construct( StringComparator $stringComparator ) {
+ $this->stringComparator = $stringComparator;
+ }
+
+ /**
+ * Finds modifications in external sources compared to wiki state.
+ *
+ * The MessageSourceChange object returned stores the following about each modification,
+ * - First level of classification is the language code
+ * - Second level of classification is the type of modification,
+ * - addition (new message in the file)
+ * - deletion (message in wiki not present in the file)
+ * - change (difference in content)
+ * - rename (message key is modified)
+ * - Third level is a list of modifications
+ * - For each modification, the following is saved,
+ * - key (the message key)
+ * - content (the message content in external source, null for deletions)
+ * - matched_to (present in case of renames, key of the matched message)
+ * - similarity (present in case of renames, similarity % with the matched message)
+ * - previous_state (present in case of renames, state of the message before rename)
+ *
+ * @param FileBasedMessageGroup $group
+ * @param array|string $languages
+ * @throws InvalidArgumentException
+ * @return MessageSourceChange
+ */
+ public function processGroup( FileBasedMessageGroup $group, $languages ) {
+ $changes = new MessageSourceChange();
+ $processAll = false;
+
+ if ( $languages === self::ALL_LANGUAGES ) {
+ $processAll = true;
+ $languages = $group->getTranslatableLanguages();
+
+ // This means all languages
+ if ( $languages === null ) {
+ $languages = TranslateUtils::getLanguageNames( 'en' );
+ }
+
+ $languages = array_keys( $languages );
+ } elseif ( !is_array( $languages ) ) {
+ throw new InvalidArgumentException( 'Invalid input given for $languages' );
+ }
+
+ // Process the source language before others. Source language might not
+ // be included in $group->getTranslatableLanguages(). The expected
+ // behavior is that source language is always processed when given
+ // self::ALL_LANGUAGES.
+ $sourceLanguage = $group->getSourceLanguage();
+ $index = array_search( $sourceLanguage, $languages );
+ if ( $processAll || $index !== false ) {
+ unset( $languages[$index] );
+ $this->processLanguage( $group, $sourceLanguage, $changes );
+ }
+
+ foreach ( $languages as $language ) {
+ $this->processLanguage( $group, $language, $changes );
+ }
+
+ return $changes;
+ }
+
+ protected function processLanguage(
+ FileBasedMessageGroup $group, $language, MessageSourceChange $changes
+ ) {
+ $cache = $group->getMessageGroupCache( $language );
+ $reason = 0;
+ if ( !$cache->isValid( $reason ) ) {
+ $this->addMessageUpdateChanges( $group, $language, $changes, $reason, $cache );
+
+ if ( $changes->getModificationsForLanguage( $language ) === [] ) {
+ /* Update the cache immediately if file and wiki state match.
+ * Otherwise the cache will get outdated compared to file state
+ * and will give false positive conflicts later. */
+ $cache->create();
+ }
+ }
+ }
+
+ /**
+ * This is the detective novel. We have three sources of information:
+ * - current message state in the file
+ * - current message state in the wiki
+ * - cached message state since cache was last build
+ * (usually after export from wiki)
+ *
+ * Now we must try to guess what in earth has driven the file state and
+ * wiki state out of sync. Then we must compile list of events that would
+ * bring those to sync. Types of events are addition, deletion, (content)
+ * change and key renames. After that the list of events are stored for
+ * later processing of a translation administrator, who can decide what
+ * actions to take on those events to bring the state more or less in sync.
+ *
+ * @param FileBasedMessageGroup $group
+ * @param string $language
+ * @param MessageSourceChange $changes
+ * @param int $reason
+ * @param MessageGroupCache $cache
+ * @throws RuntimeException
+ */
+ protected function addMessageUpdateChanges(
+ FileBasedMessageGroup $group, $language, MessageSourceChange $changes, $reason, $cache
+ ) {
+ // initCollection returns empty list before first import
+ $wiki = $group->initCollection( $language );
+ $wiki->filter( 'hastranslation', false );
+ $wiki->loadTranslations();
+ $wikiKeys = $wiki->getMessageKeys();
+
+ $sourceLanguage = $group->getSourceLanguage();
+ // By-pass cached message definitions
+ $ffs = $group->getFFS();
+ if ( $language === $sourceLanguage && !$ffs->exists( $language ) ) {
+ $path = $group->getSourceFilePath( $language );
+ throw new RuntimeException( "Source message file for {$group->getId()} does not exist: $path" );
+ }
+
+ $file = $ffs->read( $language );
+
+ // Does not exist
+ if ( $file === false ) {
+ return;
+ }
+
+ // Something went wrong
+ if ( !isset( $file['MESSAGES'] ) ) {
+ $id = $group->getId();
+ $ffsClass = get_class( $ffs );
+
+ error_log( "$id has an FFS ($ffsClass) - it didn't return cake for $language" );
+
+ return;
+ }
+
+ $fileKeys = array_keys( $file['MESSAGES'] );
+
+ $common = array_intersect( $fileKeys, $wikiKeys );
+
+ $supportsFuzzy = $ffs->supportsFuzzy();
+ $changesToRemove = [];
+
+ foreach ( $common as $key ) {
+ $sourceContent = $file['MESSAGES'][$key];
+ /** @var TMessage $wikiMessage */
+ $wikiMessage = $wiki[$key];
+ $wikiContent = $wikiMessage->translation();
+
+ // @todo: Fuzzy checking can also be moved to $ffs->isContentEqual();
+ // If FFS doesn't support it, ignore fuzziness as difference
+ $wikiContent = str_replace( TRANSLATE_FUZZY, '', $wikiContent );
+
+ // But if it does, ensure we have exactly one fuzzy marker prefixed
+ if ( $supportsFuzzy === 'yes' && $wikiMessage->hasTag( 'fuzzy' ) ) {
+ $wikiContent = TRANSLATE_FUZZY . $wikiContent;
+ }
+
+ if ( $ffs->isContentEqual( $sourceContent, $wikiContent ) ) {
+ // File and wiki stage agree, nothing to do
+ continue;
+ }
+
+ // Check against interim cache to see whether we have changes
+ // in the wiki, in the file or both.
+
+ if ( $reason !== MessageGroupCache::NO_CACHE ) {
+ $cacheContent = $cache->get( $key );
+
+ /* We want to ignore the common situation that the string
+ * in the wiki has been changed since the last export.
+ * Hence we check that source === cache && cache !== wiki
+ * and if so we skip this string. */
+ if (
+ !$ffs->isContentEqual( $wikiContent, $cacheContent ) &&
+ $ffs->isContentEqual( $sourceContent, $cacheContent )
+ ) {
+ continue;
+ }
+ }
+
+ if ( $language !== $sourceLanguage ) {
+ // Assuming that this is the old key, lets check if it has a corresponding
+ // rename in the source language. The key of the matching message will be
+ // the new renamed key.
+ $renameMsg = $changes->getMatchedMessage( $sourceLanguage, $key );
+ if ( $renameMsg !== null ) {
+ // Rename present in source language but this message has a content change
+ // with the OLD key in a non-source language. We will not process this
+ // here but add it as a rename instead. This way, the key will be renamed
+ // and then the content updated.
+ $this->addNonSourceRenames(
+ $changes, $key, $renameMsg['key'], $sourceContent, $wikiContent, $language
+ );
+ $changesToRemove[] = $key;
+ continue;
+ }
+ }
+ $changes->addChange( $language, $key, $sourceContent );
+ }
+
+ $changes->removeChanges( $language, $changesToRemove );
+
+ $added = array_diff( $fileKeys, $wikiKeys );
+ foreach ( $added as $key ) {
+ $sourceContent = $file['MESSAGES'][$key];
+ $changes->addAddition( $language, $key, $sourceContent );
+ }
+
+ /* Should the cache not exist, don't consider the messages
+ * missing from the file as deleted - they probably aren't
+ * yet exported. For example new language translations are
+ * exported the first time. */
+ if ( $reason !== MessageGroupCache::NO_CACHE ) {
+ $deleted = array_diff( $wikiKeys, $fileKeys );
+ foreach ( $deleted as $key ) {
+ if ( $cache->get( $key ) === false ) {
+ /* This message has never existed in the cache, so it
+ * must be a newly made in the wiki. */
+ continue;
+ }
+ $changes->addDeletion( $language, $key, $wiki[$key]->translation() );
+ }
+ }
+
+ if ( $language === $sourceLanguage ) {
+ $this->findAndMarkSourceRenames( $changes, $language );
+ } else {
+ // Non source language
+ $this->checkNonSourceAdditionsForRename(
+ $changes, $sourceLanguage, $language, $wiki, $wikiKeys
+ );
+ }
+ }
+
+ /**
+ * For non source languages, we look at additions and see if they have been
+ * added as renames in the source language.
+ * @param MessageSourceChange $changes
+ * @param string $sourceLanguage
+ * @param string $targetLanguage
+ * @param MessageCollection $wiki
+ * @param string[] $wikiKeys
+ */
+ private function checkNonSourceAdditionsForRename(
+ MessageSourceChange $changes, $sourceLanguage, $targetLanguage, MessageCollection $wiki, $wikiKeys
+ ) {
+ $additions = $changes->getAdditions( $targetLanguage );
+ if ( $additions === [] ) {
+ return;
+ }
+
+ $additionsToRemove = [];
+ $deletionsToRemove = [];
+ foreach ( $additions as $addedMsg ) {
+ $addedMsgKey = $addedMsg['key'];
+
+ // Check if this key is renamed in source.
+ $renamedSourceMsg = $changes->findMessage(
+ $sourceLanguage, $addedMsgKey, [ MessageSourceChange::RENAME ]
+ );
+
+ if ( $renamedSourceMsg === null ) {
+ continue;
+ }
+
+ // Since this key is new, and is present in the renames for the source language,
+ // we will add it as a rename.
+ $deletedSource = $changes->getMatchedMessage( $sourceLanguage, $renamedSourceMsg['key'] );
+ $deletedMsgKey = $deletedSource['key'];
+ $deletedMsg = $changes->findMessage(
+ $targetLanguage, $deletedMsgKey, [ MessageSourceChange::DELETION ]
+ );
+
+ // Sometimes when the cache does not have the translations, the deleted message
+ // is not added in the translations. It is also possible that for this non-source
+ // language the key has not been removed.
+ if ( $deletedMsg === null ) {
+ $content = '';
+ if ( array_search( $deletedMsgKey, $wikiKeys ) !== false ) {
+ $content = $wiki[ $deletedMsgKey ]->translation();
+ }
+ $deletedMsg = [
+ 'key' => $deletedMsgKey,
+ 'content' => $content
+ ];
+ }
+
+ $similarityPercent = $this->stringComparator->getSimilarity(
+ $addedMsg['content'], $deletedMsg['content']
+ );
+
+ $changes->addRename( $targetLanguage, [
+ 'key' => $addedMsgKey,
+ 'content' => $addedMsg['content']
+ ], [
+ 'key' => $deletedMsgKey,
+ 'content' => $deletedMsg['content']
+ ], $similarityPercent );
+
+ $deletionsToRemove[] = $deletedMsgKey;
+ $additionsToRemove[] = $addedMsgKey;
+ }
+
+ $changes->removeAdditions( $targetLanguage, $additionsToRemove );
+ $changes->removeDeletions( $targetLanguage, $deletionsToRemove );
+ }
+
+ /**
+ * Check for renames and add them to the changes. To identify renames we need to
+ * compare the contents of the added messages with the deleted ones and identify
+ * messages that match.
+ * @param MessageSourcechange $changes
+ * @param string $sourceLanguage
+ */
+ private function findAndMarkSourceRenames( MessageSourceChange $changes, $sourceLanguage ) {
+ // Now check for renames. To identify renames we need to compare
+ // the contents of the added messages with the deleted ones and
+ // identify messages that match.
+ $deletions = $changes->getDeletions( $sourceLanguage );
+ $additions = $changes->getAdditions( $sourceLanguage );
+ if ( $deletions === [] || $additions === [] ) {
+ return;
+ }
+
+ // This array contains a dictionary with matching renames in the following structure -
+ // [ A1|D1 => 1.0, A1|D2 => 0.95, A2|D1 => 0.95 ]
+ $potentialRenames = [];
+ foreach ( $additions as $addedMsg ) {
+ $addedMsgKey = $addedMsg['key'];
+
+ foreach ( $deletions as $deletedMsg ) {
+ $similarityPercent = $this->stringComparator->getSimilarity(
+ $addedMsg['content'], $deletedMsg['content']
+ );
+
+ if ( $changes->areStringsSimilar( $similarityPercent ) ) {
+ $potentialRenames[ $addedMsgKey . '|' . $deletedMsg['key'] ] = $similarityPercent;
+ }
+ }
+ }
+
+ $this->matchRenames( $changes, $potentialRenames, $sourceLanguage );
+ }
+
+ /**
+ * Adds non source language renames to the list of changes
+ * @param MessageSourceChange $changes
+ * @param string $key
+ * @param string $renameKey
+ * @param string $sourceContent
+ * @param string $wikiContent
+ * @param string $language
+ */
+ private function addNonSourceRenames(
+ MessageSourceChange $changes, $key, $renameKey, $sourceContent, $wikiContent, $language
+ ) {
+ $addedMsg = [
+ 'key' => $renameKey,
+ 'content' => $sourceContent
+ ];
+
+ $removedMsg = [
+ 'key' => $key,
+ 'content' => $wikiContent
+ ];
+
+ $similarityPercent = $this->stringComparator->getSimilarity(
+ $sourceContent, $wikiContent
+ );
+ $changes->addRename( $language, $addedMsg, $removedMsg, $similarityPercent );
+ }
+
+ /**
+ * Identifies which added message to be associated with the deleted message based on
+ * similarity percentage.
+ *
+ * We sort the $trackRename array on the similarity percentage and then start adding the
+ * messages as renames.
+ * @param MessageSourceChange $changes
+ * @param array $trackRename
+ * @param string $language
+ */
+ private function matchRenames( MessageSourceChange $changes, array $trackRename, $language ) {
+ arsort( $trackRename, SORT_NUMERIC );
+
+ $alreadyRenamed = $additionsToRemove = $deletionsToRemove = [];
+ foreach ( $trackRename as $key => $similarityPercent ) {
+ list( $addKey, $deleteKey ) = explode( '|', $key, 2 );
+ if ( isset( $alreadyRenamed[ $addKey ] ) || isset( $alreadyRenamed[ $deleteKey ] ) ) {
+ // Already mapped with another name.
+ continue;
+ }
+
+ // Using key should be faster than saving values and searching for them in the array.
+ $alreadyRenamed[ $addKey ] = 1;
+ $alreadyRenamed[ $deleteKey ] = 1;
+
+ $addMsg = $changes->findMessage( $language, $addKey, [ MessageSourceChange::ADDITION ] );
+ $deleteMsg = $changes->findMessage( $language, $deleteKey, [ MessageSourceChange::DELETION ] );
+
+ $changes->addRename( $language, $addMsg, $deleteMsg, $similarityPercent );
+
+ // @phan-suppress-next-line PhanTypeArraySuspiciousNullable
+ $additionsToRemove[] = $addMsg['key'];
+ // @phan-suppress-next-line PhanTypeArraySuspiciousNullable
+ $deletionsToRemove[] = $deleteMsg['key'];
+ }
+
+ $changes->removeAdditions( $language, $additionsToRemove );
+ $changes->removeDeletions( $language, $deletionsToRemove );
+ }
+}
diff --git a/Translate/utils/MessageChangeStorage.php b/Translate/utils/MessageChangeStorage.php
new file mode 100644
index 00000000..b53f966c
--- /dev/null
+++ b/Translate/utils/MessageChangeStorage.php
@@ -0,0 +1,152 @@
+<?php
+/**
+ * Handles storage / retrieval of data from message change files.
+ *
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ * @since 2016.02
+ * @file
+ */
+
+use MediaWiki\Extension\Translate\MessageSync\MessageSourceChange;
+
+class MessageChangeStorage {
+ public const DEFAULT_NAME = 'default';
+
+ /**
+ * Writes change array as a serialized file.
+ *
+ * @param MessageSourceChange[] $changes Array of changes as returned by processGroup
+ * indexed by message group id.
+ * @param string $file Which file to use.
+ */
+ public static function writeChanges( array $changes, $file ) {
+ $cache = \Cdb\Writer::open( $file );
+ $keys = array_keys( $changes );
+ $cache->set( '#keys', TranslateUtils::serialize( $keys ) );
+
+ /** @var MessageSourceChange $change */
+ foreach ( $changes as $key => $change ) {
+ $value = TranslateUtils::serialize( $change->getAllModifications() );
+ $cache->set( $key, $value );
+ }
+ $cache->close();
+ }
+
+ /**
+ * Validate a name.
+ *
+ * @param string $name Which file to use.
+ * @return bool
+ */
+ public static function isValidCdbName( $name ) {
+ return preg_match( '/^[a-z_-]{1,100}$/i', $name );
+ }
+
+ /**
+ * Get a full path to file in a known location.
+ *
+ * @param string $name Which file to use.
+ * @return string
+ */
+ public static function getCdbPath( $name ) {
+ return TranslateUtils::cacheFile( "messagechanges.$name.cdb" );
+ }
+
+ /**
+ * Fetches changes for a group from the message change file.
+ * @param string $cdbPath Path of the cdb file.
+ * @param string $groupId Group Id
+ * @return MessageSourceChange
+ */
+ public static function getGroupChanges( $cdbPath, $groupId ) {
+ $reader = self::getCdbReader( $cdbPath );
+ if ( $reader === null ) {
+ return MessageSourceChange::loadModifications( [] );
+ }
+
+ $groups = TranslateUtils::deserialize( $reader->get( '#keys' ) );
+
+ if ( !in_array( $groupId, $groups, true ) ) {
+ throw new InvalidArgumentException( "Group Id - '$groupId' not found in cdb file " .
+ "(path: $cdbPath)." );
+ }
+
+ return MessageSourceChange::loadModifications(
+ TranslateUtils::deserialize( $reader->get( $groupId ) )
+ );
+ }
+
+ /**
+ * Writes changes for a group. Has to read the changes first from the file,
+ * and then re-write them to the file.
+ * @param MessageSourceChange $changes
+ * @param string $groupId Group Id
+ * @param string $cdbPath Path of the cdb file.
+ */
+ public static function writeGroupChanges( MessageSourceChange $changes, $groupId, $cdbPath ) {
+ $reader = self::getCdbReader( $cdbPath );
+ if ( $reader === null ) {
+ return;
+ }
+
+ $groups = TranslateUtils::deserialize( $reader->get( '#keys' ) );
+
+ $allChanges = [];
+ foreach ( $groups as $id ) {
+ $allChanges[$id] = MessageSourceChange::loadModifications(
+ TranslateUtils::deserialize( $reader->get( $id ) )
+ );
+ }
+ $allChanges[$groupId] = $changes;
+
+ self::writeChanges( $allChanges, $cdbPath );
+ }
+
+ /**
+ * Validate and return a reader reference to the CDB file
+ * @param string $cdbPath
+ * @return \Cdb\Reader
+ */
+ private static function getCdbReader( $cdbPath ) {
+ // File not found, probably no changes.
+ if ( !file_exists( $cdbPath ) ) {
+ return null;
+ }
+
+ return \Cdb\Reader::open( $cdbPath );
+ }
+
+ /**
+ * Gets the last modified time for the CDB file.
+ *
+ * @param string $cdbPath
+ * @return int time of last modification (Unix timestamp)
+ */
+ public static function getLastModifiedTime( $cdbPath ) {
+ // File not found
+ if ( !file_exists( $cdbPath ) ) {
+ return null;
+ }
+
+ $stat = stat( $cdbPath );
+
+ return $stat['mtime'];
+ }
+
+ /**
+ * Checks if the CDB file has been modified since the time given.
+ * @param string $cdbPath
+ * @param int $time Unix timestamp
+ * @return bool
+ */
+ public static function isModifiedSince( $cdbPath, $time ) {
+ $lastModifiedTime = self::getLastModifiedTime( $cdbPath );
+
+ if ( $lastModifiedTime === null ) {
+ throw new InvalidArgumentException( "CDB file not found - $cdbPath" );
+ }
+
+ return $lastModifiedTime <= $time;
+ }
+}
diff --git a/Translate/utils/MessageGroupCache.php b/Translate/utils/MessageGroupCache.php
new file mode 100644
index 00000000..a2e1b124
--- /dev/null
+++ b/Translate/utils/MessageGroupCache.php
@@ -0,0 +1,288 @@
+<?php
+/**
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+use Cdb\Reader;
+use Cdb\Writer;
+
+/**
+ * Caches messages of file based message group source file. Can also track
+ * that the cache is up to date. Parsing the source files can be slow, so
+ * constructing CDB cache makes accessing that data constant speed regardless
+ * of the actual format. This also avoid having to deal with potentially unsafe
+ * external files during web requests.
+ *
+ * @ingroup MessageGroups
+ */
+class MessageGroupCache {
+ public const NO_SOURCE = 1;
+ public const NO_CACHE = 2;
+ public const CHANGED = 3;
+ private const VERSION = '4';
+ /** @var FileBasedMessageGroup */
+ protected $group;
+ /** @var Reader */
+ protected $cache;
+ /** @var string */
+ protected $code;
+ /** @var string */
+ private $cacheFilePath;
+
+ /**
+ * Contructs a new cache object for given group and language code.
+ * @param FileBasedMessageGroup $group
+ * @param string $code Language code.
+ * @param string $cacheFilePath
+ */
+ public function __construct(
+ FileBasedMessageGroup $group,
+ string $code,
+ string $cacheFilePath
+ ) {
+ $this->group = $group;
+ $this->code = $code;
+ $this->cacheFilePath = $cacheFilePath;
+ }
+
+ /**
+ * Returns whether cache exists for this language and group.
+ * @return bool
+ */
+ public function exists() {
+ return file_exists( $this->getCacheFilePath() );
+ }
+
+ /**
+ * Returns list of message keys that are stored.
+ * @return string[] Message keys that can be passed one-by-one to get() method.
+ */
+ public function getKeys() {
+ $reader = $this->open();
+ $keys = [];
+
+ $key = $reader->firstkey();
+ while ( $key !== false ) {
+ if ( ( $key[0] ?? '' ) !== '#' ) {
+ $keys[] = $key;
+ }
+
+ $key = $reader->nextkey();
+ }
+
+ return $keys;
+ }
+
+ /**
+ * Returns timestamp in unix-format about when this cache was first created.
+ * @return string Unix timestamp.
+ */
+ public function getTimestamp() {
+ return $this->open()->get( '#created' );
+ }
+
+ /**
+ * ...
+ * @return string Unix timestamp.
+ */
+ public function getUpdateTimestamp() {
+ return $this->open()->get( '#updated' );
+ }
+
+ /**
+ * Get an item from the cache.
+ * @param string $key
+ * @return string
+ */
+ public function get( $key ) {
+ return $this->open()->get( $key );
+ }
+
+ /**
+ * Get a list of authors.
+ * @return string[]
+ * @since 2020.04
+ */
+ public function getAuthors(): array {
+ $cache = $this->open();
+ return $cache->exists( '#authors' ) ?
+ $this->unserialize( $cache->get( '#authors' ) ) : [];
+ }
+
+ /**
+ * Get other data cached from the FFS class.
+ * @return array
+ * @since 2020.04
+ */
+ public function getExtra(): array {
+ $cache = $this->open();
+ return $cache->exists( '#extra' ) ? $this->unserialize( $cache->get( '#extra' ) ) : [];
+ }
+
+ /**
+ * Populates the cache from current state of the source file.
+ * @param bool|string $created Unix timestamp when the cache is created (for automatic updates).
+ */
+ public function create( $created = false ) {
+ $this->close(); // Close the reader instance just to be sure
+
+ $parseOutput = $this->group->parseExternal( $this->code );
+ $messages = $parseOutput['MESSAGES'];
+ if ( $messages === [] ) {
+ if ( $this->exists() ) {
+ // Delete stale cache files
+ unlink( $this->getCacheFilePath() );
+ }
+
+ return; // Don't create empty caches
+ }
+ $hash = md5( file_get_contents( $this->group->getSourceFilePath( $this->code ) ) );
+
+ wfMkdirParents( dirname( $this->getCacheFilePath() ) );
+ $cache = Writer::open( $this->getCacheFilePath() );
+
+ foreach ( $messages as $key => $value ) {
+ $cache->set( $key, $value );
+ }
+ $cache->set( '#authors', $this->serialize( $parseOutput['AUTHORS'] ) );
+ $cache->set( '#extra', $this->serialize( $parseOutput['EXTRA'] ) );
+ $cache->set( '#created', $created ?: wfTimestamp() );
+ $cache->set( '#updated', wfTimestamp() );
+ $cache->set( '#filehash', $hash );
+ $cache->set( '#msghash', md5( serialize( $parseOutput ) ) );
+ $cache->set( '#version', self::VERSION );
+ $cache->close();
+ }
+
+ /**
+ * Checks whether the cache still reflects the source file.
+ * It uses multiple conditions to speed up the checking from file
+ * modification timestamps to hashing.
+ * @param int &$reason
+ * @return bool Whether the cache is up to date.
+ */
+ public function isValid( &$reason ) {
+ $group = $this->group;
+ $pattern = $group->getSourceFilePath( '*' );
+ $filename = $group->getSourceFilePath( $this->code );
+
+ $parseOutput = null;
+
+ // If the file pattern is not dependent on the language, we will assume
+ // that all translations are stored in one file. This means we need to
+ // actually parse the file to know if a language is present.
+ if ( strpos( $pattern, '*' ) === false ) {
+ $parseOutput = $group->parseExternal( $this->code );
+ $source = $parseOutput['MESSAGES'] !== [];
+ } else {
+ static $globCache = [];
+ if ( !isset( $globCache[$pattern] ) ) {
+ $globCache[$pattern] = array_flip( glob( $pattern, GLOB_NOESCAPE ) );
+ // Definition file might not match the above pattern
+ $globCache[$pattern][$group->getSourceFilePath( 'en' )] = true;
+ }
+ $source = isset( $globCache[$pattern][$filename] );
+ }
+
+ $cache = $this->exists();
+
+ // Timestamp and existence checks
+ if ( !$cache && !$source ) {
+ return true;
+ } elseif ( !$cache && $source ) {
+ $reason = self::NO_CACHE;
+
+ return false;
+ } elseif ( $cache && !$source ) {
+ $reason = self::NO_SOURCE;
+
+ return false;
+ }
+
+ if ( $this->get( '#version' ) !== self::VERSION ) {
+ $reason = self::CHANGED;
+ return false;
+ }
+
+ if ( filemtime( $filename ) <= $this->get( '#updated' ) ) {
+ return true;
+ }
+
+ // From now on cache and source file exists, but source file mtime is newer
+ $created = $this->get( '#created' );
+
+ // File hash check
+ $newhash = md5( file_get_contents( $filename ) );
+ if ( $this->get( '#filehash' ) === $newhash ) {
+ // Update cache so that we don't need to compare hashes next time
+ $this->create( $created );
+
+ return true;
+ }
+
+ // Parse output hash check
+ $parseOutput = $parseOutput ?? $group->parseExternal( $this->code );
+ if ( $this->get( '#msghash' ) === md5( serialize( $parseOutput ) ) ) {
+ // Update cache so that we don't need to do slow checks next time
+ $this->create( $created );
+
+ return true;
+ }
+
+ $reason = self::CHANGED;
+
+ return false;
+ }
+
+ public function invalidate(): void {
+ $this->close();
+ unlink( $this->getCacheFilePath() );
+ }
+
+ private function serialize( array $data ): string {
+ // Using simple prefix for easy future extension
+ return 'J' . json_encode( $data );
+ }
+
+ private function unserialize( string $serialized ): array {
+ $type = $serialized[0];
+
+ if ( $type !== 'J' ) {
+ throw new RuntimeException( 'Unknown serialization format' );
+ }
+
+ return json_decode( substr( $serialized, 1 ), true );
+ }
+
+ /**
+ * Open the cache for reading.
+ * @return Reader
+ */
+ protected function open() {
+ if ( $this->cache === null ) {
+ $this->cache = Reader::open( $this->getCacheFilePath() );
+ }
+
+ return $this->cache;
+ }
+
+ /**
+ * Close the cache from reading.
+ */
+ protected function close() {
+ if ( $this->cache !== null ) {
+ $this->cache->close();
+ $this->cache = null;
+ }
+ }
+
+ /**
+ * Returns full path to the cache file.
+ * @return string
+ */
+ protected function getCacheFilePath(): string {
+ return $this->cacheFilePath;
+ }
+}
diff --git a/Translate/utils/MessageGroupStates.php b/Translate/utils/MessageGroupStates.php
new file mode 100644
index 00000000..11161356
--- /dev/null
+++ b/Translate/utils/MessageGroupStates.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Wrapper class for using message group states.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @author Siebrand Mazeland
+ * @copyright Copyright © 2012-2013 Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * Class for making the use of message group state easier.
+ * @since 2012-10-05
+ */
+class MessageGroupStates {
+ private const CONDKEY = 'state conditions';
+
+ protected $config;
+
+ public function __construct( array $config = null ) {
+ $this->config = $config;
+ }
+
+ public function getStates() {
+ $conf = $this->config;
+ unset( $conf[self::CONDKEY] );
+
+ return $conf;
+ }
+
+ public function getConditions() {
+ $conf = $this->config;
+ return $conf[self::CONDKEY] ?? [];
+ }
+}
diff --git a/Translate/utils/MessageGroupStatesUpdaterJob.php b/Translate/utils/MessageGroupStatesUpdaterJob.php
new file mode 100644
index 00000000..19acd7b3
--- /dev/null
+++ b/Translate/utils/MessageGroupStatesUpdaterJob.php
@@ -0,0 +1,162 @@
+<?php
+/**
+ * Logic for handling automatic message group state changes
+ *
+ * @file
+ * @author Niklas Laxström
+ * @copyright Copyright © 2012-2013, Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Extension\Translate\Jobs\GenericTranslateJob;
+use MediaWiki\Extension\Translate\Services;
+use MediaWiki\Extension\Translate\SystemUsers\FuzzyBot;
+use MediaWiki\MediaWikiServices;
+
+/**
+ * Logic for handling automatic message group state changes
+ *
+ * @ingroup JobQueue
+ */
+class MessageGroupStatesUpdaterJob extends GenericTranslateJob {
+ /**
+ * @param Title $title
+ * @param array $params
+ */
+ public function __construct( $title, $params = [] ) {
+ parent::__construct( __CLASS__, $title, $params );
+ $this->removeDuplicates = true;
+ }
+
+ /**
+ * Hook: TranslateEventTranslationReview
+ * and also on translation changes
+ * @param MessageHandle $handle
+ * @return true
+ */
+ public static function onChange( MessageHandle $handle ) {
+ $job = self::newJob( $handle->getTitle() );
+ MediaWikiServices::getInstance()->getJobQueueGroup()->push( $job );
+
+ return true;
+ }
+
+ /**
+ * @param Title $title
+ * @return self
+ */
+ public static function newJob( $title ) {
+ $job = new self( $title );
+
+ return $job;
+ }
+
+ public function run() {
+ $lb = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
+ if ( !$lb->waitForReplication() ) {
+ $this->logWarning( 'Continuing despite replication lag' );
+ }
+
+ $title = $this->title;
+ $handle = new MessageHandle( $title );
+ $code = $handle->getCode();
+
+ if ( !$code && !$handle->isValid() ) {
+ return true;
+ }
+
+ $groups = self::getGroupsWithTransitions( $handle );
+ $messageGroupReview = Services::getInstance()->getMessageGroupReview();
+ foreach ( $groups as $id => $transitions ) {
+ $group = MessageGroups::getGroup( $id );
+ $stats = MessageGroupStats::forItem( $id, $code, MessageGroupStats::FLAG_IMMEDIATE_WRITES );
+ $state = self::getNewState( $stats, $transitions );
+ if ( $state ) {
+ $messageGroupReview->changeState( $group, $code, $state, FuzzyBot::getUser() );
+ }
+ }
+
+ return true;
+ }
+
+ public static function getGroupsWithTransitions( MessageHandle $handle ) {
+ $listeners = [];
+ foreach ( $handle->getGroupIds() as $id ) {
+ $group = MessageGroups::getGroup( $id );
+
+ // No longer exists?
+ if ( !$group ) {
+ continue;
+ }
+
+ $conds = $group->getMessageGroupStates()->getConditions();
+ if ( $conds ) {
+ $listeners[$id] = $conds;
+ }
+ }
+
+ return $listeners;
+ }
+
+ public static function getStatValue( $stats, $type ) {
+ $total = $stats[MessageGroupStats::TOTAL];
+ $translated = $stats[MessageGroupStats::TRANSLATED];
+ $outdated = $stats[MessageGroupStats::FUZZY];
+ $proofread = $stats[MessageGroupStats::PROOFREAD];
+
+ switch ( $type ) {
+ case 'UNTRANSLATED':
+ return $total - $translated - $outdated;
+ case 'OUTDATED':
+ return $outdated;
+ case 'TRANSLATED':
+ return $translated;
+ case 'PROOFREAD':
+ return $proofread;
+ default:
+ throw new MWException( "Unknown condition $type" );
+ }
+ }
+
+ public static function matchCondition( $value, $condition, $max ) {
+ switch ( $condition ) {
+ case 'ZERO':
+ return $value === 0;
+ case 'NONZERO':
+ return $value > 0;
+ case 'MAX':
+ return $value === $max;
+ default:
+ throw new MWException( "Unknown condition value $condition" );
+ }
+ }
+
+ /**
+ * @param int[] $stats
+ * @param array[] $transitions
+ *
+ * @return string|bool
+ */
+ public static function getNewState( $stats, $transitions ) {
+ foreach ( $transitions as $transition ) {
+ [ $newState, $conds ] = $transition;
+ $match = true;
+
+ foreach ( $conds as $type => $cond ) {
+ $statValue = self::getStatValue( $stats, $type );
+ $max = $stats[MessageGroupStats::TOTAL];
+ $match = $match && self::matchCondition( $statValue, $cond, $max );
+ // Conditions are AND, so no point trying more if no match
+ if ( !$match ) {
+ break;
+ }
+ }
+
+ if ( $match ) {
+ return $newState;
+ }
+ }
+
+ return false;
+ }
+}
diff --git a/Translate/utils/MessageGroupStats.php b/Translate/utils/MessageGroupStats.php
new file mode 100644
index 00000000..037df47b
--- /dev/null
+++ b/Translate/utils/MessageGroupStats.php
@@ -0,0 +1,665 @@
+<?php
+/**
+ * This file aims to provide efficient mechanism for fetching translation completion stats.
+ *
+ * @file
+ * @author Wikia (trac.wikia-code.com/browser/wikia/trunk/extensions/wikia/TranslationStatistics)
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\IDatabase;
+
+/**
+ * This class abstract MessageGroup statistics calculation and storing.
+ * You can access stats easily per language or per group.
+ * Stat array for each item is of format array( total, translate, fuzzy ).
+ *
+ * @ingroup Stats MessageGroups
+ */
+class MessageGroupStats {
+ /// Name of the database table
+ private const TABLE = 'translate_groupstats';
+
+ public const TOTAL = 0; ///< Array index
+ public const TRANSLATED = 1; ///< Array index
+ public const FUZZY = 2; ///< Array index
+ public const PROOFREAD = 3; ///< Array index
+
+ /// If stats are not cached, do not attempt to calculate them on the fly
+ public const FLAG_CACHE_ONLY = 1;
+ /// Ignore cached values. Useful for updating stale values.
+ public const FLAG_NO_CACHE = 2;
+ /// Do not defer updates. Meant for jobs like MessageGroupStatsRebuildJob.
+ public const FLAG_IMMEDIATE_WRITES = 4;
+
+ /** @var array[] */
+ protected static $updates = [];
+ /** @var string[] */
+ private static $languages;
+
+ /**
+ * Returns empty stats array. Useful because the number of elements
+ * may change.
+ * @return int[]
+ * @since 2012-09-21
+ */
+ public static function getEmptyStats() {
+ return [ 0, 0, 0, 0 ];
+ }
+
+ /**
+ * Returns empty stats array that indicates stats are incomplete or
+ * unknown.
+ * @return null[]
+ * @since 2013-01-02
+ */
+ protected static function getUnknownStats() {
+ return [ null, null, null, null ];
+ }
+
+ private static function isValidLanguage( $code ) {
+ $languages = self::getLanguages();
+ return in_array( $code, $languages );
+ }
+
+ private static function isValidMessageGroup( MessageGroup $group = null ) {
+ /* In case some code calls stats for dynamic groups. Calculating these numbers
+ * don't make sense for dynamic groups, and would just throw an exception. */
+ return $group && !MessageGroups::isDynamic( $group );
+ }
+
+ /**
+ * Returns stats for given group in given language.
+ * @param string $id Group id
+ * @param string $code Language code
+ * @param int $flags Combination of FLAG_* constants.
+ * @return null[]|int[]
+ */
+ public static function forItem( $id, $code, $flags = 0 ) {
+ $group = MessageGroups::getGroup( $id );
+ if ( !self::isValidMessageGroup( $group ) || !self::isValidLanguage( $code ) ) {
+ return self::getUnknownStats();
+ }
+
+ $res = self::selectRowsIdLang( [ $id ], [ $code ], $flags );
+ $stats = self::extractResults( $res, [ $id ] );
+
+ if ( !isset( $stats[$id][$code] ) ) {
+ $stats[$id][$code] = self::forItemInternal( $stats, $group, $code, $flags );
+ }
+
+ self::queueUpdates( $flags );
+
+ return $stats[$id][$code];
+ }
+
+ /**
+ * Returns stats for all groups in given language.
+ * @param string $code Language code
+ * @param int $flags Combination of FLAG_* constants.
+ * @return array[]
+ */
+ public static function forLanguage( $code, $flags = 0 ) {
+ if ( !self::isValidLanguage( $code ) ) {
+ $stats = [];
+ $groups = MessageGroups::singleton()->getGroups();
+ $ids = array_keys( $groups );
+ foreach ( $ids as $id ) {
+ $stats[$id] = self::getUnknownStats();
+ }
+
+ return $stats;
+ }
+
+ $stats = self::forLanguageInternal( $code, [], $flags );
+ $flattened = [];
+ foreach ( $stats as $group => $languages ) {
+ $flattened[$group] = $languages[$code];
+ }
+
+ self::queueUpdates( $flags );
+
+ return $flattened;
+ }
+
+ /**
+ * Returns stats for all languages in given group.
+ * @param string $id Group id
+ * @param int $flags Combination of FLAG_* constants.
+ * @return array[]
+ */
+ public static function forGroup( $id, $flags = 0 ) {
+ $group = MessageGroups::getGroup( $id );
+ if ( !self::isValidMessageGroup( $group ) ) {
+ $languages = self::getLanguages();
+ $stats = [];
+ foreach ( $languages as $code ) {
+ $stats[$code] = self::getUnknownStats();
+ }
+
+ return $stats;
+ }
+
+ $stats = self::forGroupInternal( $group, [], $flags );
+
+ self::queueUpdates( $flags );
+
+ return $stats[$id];
+ }
+
+ /**
+ * Returns stats for all group in all languages.
+ * Might be slow, might use lots of memory.
+ * Returns two dimensional array indexed by group and language.
+ * @param int $flags Combination of FLAG_* constants.
+ * @return array[]
+ */
+ public static function forEverything( $flags = 0 ) {
+ $groups = MessageGroups::singleton()->getGroups();
+ $stats = [];
+ foreach ( $groups as $g ) {
+ $stats = self::forGroupInternal( $g, $stats, $flags );
+ }
+
+ self::queueUpdates( $flags );
+
+ return $stats;
+ }
+
+ /**
+ * Recalculate stats for all groups associated with the message.
+ *
+ * Hook: TranslateEventTranslationReview
+ * @param MessageHandle $handle
+ */
+ public static function clear( MessageHandle $handle ): void {
+ $code = $handle->getCode();
+ if ( !self::isValidLanguage( $code ) ) {
+ return;
+ }
+ $groups = self::getSortedGroupsForClearing( $handle->getGroupIds() );
+ self::internalClearGroups( $code, $groups, 0 );
+ }
+
+ /**
+ * Recalculate stats for given group(s).
+ *
+ * @param string|string[] $id Message group ids.
+ * @param int $flags Combination of FLAG_* constants.
+ */
+ public static function clearGroup( $id, int $flags = 0 ): void {
+ $languages = self::getLanguages();
+ $groups = self::getSortedGroupsForClearing( (array)$id );
+
+ // Do one language at a time, to save memory
+ foreach ( $languages as $code ) {
+ self::internalClearGroups( $code, $groups, $flags );
+ }
+ }
+
+ /**
+ * Helper for clear and clearGroup that caches already loaded statistics.
+ *
+ * @param string $code
+ * @param MessageGroup[] $groups
+ * @param int $flags Combination of FLAG_* constants.
+ */
+ private static function internalClearGroups( $code, array $groups, int $flags ): void {
+ $stats = [];
+ foreach ( $groups as $group ) {
+ // $stats is modified by reference
+ self::forItemInternal( $stats, $group, $code, $flags );
+ }
+ self::queueUpdates( 0 );
+ }
+
+ /**
+ * Get sorted message groups ids that can be used for efficient clearing.
+ *
+ * To optimize performance, we first need to process all non-aggregate groups.
+ * Because aggregate groups are flattened (see self::expandAggregates), we can
+ * process them any order and allow use of cache, except for the aggregate groups
+ * itself.
+ *
+ * @param string[] $ids
+ * @return MessageGroup[]
+ */
+ private static function getSortedGroupsForClearing( array $ids ) {
+ $groups = array_map( [ MessageGroups::class, 'getGroup' ], $ids );
+ // Sanity: Remove any invalid groups
+ $groups = array_filter( $groups );
+
+ $sorted = [];
+ $aggs = [];
+ foreach ( $groups as $group ) {
+ if ( $group instanceof AggregateMessageGroup ) {
+ $aggs[$group->getId()] = $group;
+ } else {
+ $sorted[$group->getId()] = $group;
+ }
+ }
+
+ return array_merge( $sorted, $aggs );
+ }
+
+ /**
+ * Get list of supported languages for statistics.
+ *
+ * @return string[]
+ */
+ private static function getLanguages() {
+ if ( self::$languages === null ) {
+ $languages = array_keys( TranslateUtils::getLanguageNames( 'en' ) );
+ sort( $languages );
+ self::$languages = $languages;
+ }
+
+ return self::$languages;
+ }
+
+ public static function clearLanguage( $code ) {
+ if ( !count( $code ) ) {
+ return;
+ }
+ $dbw = wfGetDB( DB_PRIMARY );
+ $conds = [ 'tgs_lang' => $code ];
+ $dbw->delete( self::TABLE, $conds, __METHOD__ );
+ wfDebugLog( 'messagegroupstats', 'Cleared ' . serialize( $conds ) );
+ }
+
+ /**
+ * Purges all cached stats.
+ *
+ * Mostly for testing purposes. Calling this in normal operation will cause performance issues.
+ */
+ public static function clearAll() {
+ $dbw = wfGetDB( DB_PRIMARY );
+ $dbw->delete( self::TABLE, '*', __METHOD__ );
+ wfDebugLog( 'messagegroupstats', 'Cleared everything :(' );
+ }
+
+ /**
+ * Use this to extract results returned from selectRowsIdLang. You must pass the
+ * message group ids you want to retrieve. Entries that do not match are not returned.
+ *
+ * @param iterable $res Database result object
+ * @param string[] $ids List of message group ids
+ * @param array[] $stats Optional array to append results to.
+ * @return array[]
+ */
+ protected static function extractResults( $res, array $ids, array $stats = [] ) {
+ // Map the internal ids back to real ids
+ $idmap = array_combine( array_map( [ self::class, 'getDatabaseIdForGroupId' ], $ids ), $ids );
+
+ foreach ( $res as $row ) {
+ if ( !isset( $idmap[$row->tgs_group] ) ) {
+ // Stale entry, ignore for now
+ // TODO: Schedule for purge
+ continue;
+ }
+
+ $realId = $idmap[$row->tgs_group];
+ $stats[$realId][$row->tgs_lang] = self::extractNumbers( $row );
+ }
+
+ return $stats;
+ }
+
+ /**
+ * Returns an array of needed database fields.
+ * @param stdClass $row
+ * @return array
+ */
+ protected static function extractNumbers( $row ) {
+ return [
+ self::TOTAL => (int)$row->tgs_total,
+ self::TRANSLATED => (int)$row->tgs_translated,
+ self::FUZZY => (int)$row->tgs_fuzzy,
+ self::PROOFREAD => (int)$row->tgs_proofread,
+ ];
+ }
+
+ /**
+ * @param string $code Language code
+ * @param array[] $stats
+ * @param int $flags Combination of FLAG_* constants.
+ * @return array[]
+ */
+ protected static function forLanguageInternal( $code, array $stats, $flags ) {
+ $groups = MessageGroups::singleton()->getGroups();
+
+ $ids = array_keys( $groups );
+ $res = self::selectRowsIdLang( null, [ $code ], $flags );
+ $stats = self::extractResults( $res, $ids, $stats );
+
+ foreach ( $groups as $id => $group ) {
+ if ( isset( $stats[$id][$code] ) ) {
+ continue;
+ }
+ $stats[$id][$code] = self::forItemInternal( $stats, $group, $code, $flags );
+ }
+
+ return $stats;
+ }
+
+ /**
+ * @param AggregateMessageGroup $agg
+ * @return MessageGroup[]
+ */
+ protected static function expandAggregates( AggregateMessageGroup $agg ) {
+ $flattened = [];
+
+ /** @var MessageGroup|AggregateMessageGroup $group */
+ foreach ( $agg->getGroups() as $group ) {
+ if ( $group instanceof AggregateMessageGroup ) {
+ $flattened += self::expandAggregates( $group );
+ } else {
+ $flattened[$group->getId()] = $group;
+ }
+ }
+
+ return $flattened;
+ }
+
+ /**
+ * @param MessageGroup $group
+ * @param array[] $stats
+ * @param int $flags Combination of FLAG_* constants.
+ * @return array[]
+ */
+ protected static function forGroupInternal( MessageGroup $group, array $stats, $flags ) {
+ $id = $group->getId();
+
+ $res = self::selectRowsIdLang( [ $id ], null, $flags );
+ $stats = self::extractResults( $res, [ $id ], $stats );
+
+ // Go over each language filling missing entries
+ $languages = self::getLanguages();
+ foreach ( $languages as $code ) {
+ if ( isset( $stats[$id][$code] ) ) {
+ continue;
+ }
+ $stats[$id][$code] = self::forItemInternal( $stats, $group, $code, $flags );
+ }
+
+ // This is for sorting the values added later in correct order
+ foreach ( array_keys( $stats ) as $key ) {
+ ksort( $stats[$key] );
+ }
+
+ return $stats;
+ }
+
+ /**
+ * Fetch rows from the database. Use extractResults to process this value.
+ *
+ * @param ?string[] $ids List of message group ids
+ * @param ?string[] $codes List of language codes
+ * @param int $flags Combination of FLAG_* constants.
+ * @return iterable Database result object
+ */
+ protected static function selectRowsIdLang( ?array $ids, ?array $codes, $flags ) {
+ if ( $flags & self::FLAG_NO_CACHE ) {
+ return [];
+ }
+
+ $conds = [];
+ if ( $ids !== null ) {
+ $dbids = array_map( [ self::class, 'getDatabaseIdForGroupId' ], $ids );
+ $conds['tgs_group'] = $dbids;
+ }
+
+ if ( $codes !== null ) {
+ $conds['tgs_lang'] = $codes;
+ }
+
+ $dbr = TranslateUtils::getSafeReadDB();
+ $res = $dbr->select( self::TABLE, '*', $conds, __METHOD__ );
+
+ return $res;
+ }
+
+ /**
+ * @param array[] &$stats
+ * @param MessageGroup $group
+ * @param string $code Language code
+ * @param int $flags Combination of FLAG_* constants.
+ * @return null[]|int[]
+ */
+ protected static function forItemInternal( &$stats, MessageGroup $group, $code, $flags ) {
+ $id = $group->getId();
+
+ if ( $flags & self::FLAG_CACHE_ONLY ) {
+ $stats[$id][$code] = self::getUnknownStats();
+ return $stats[$id][$code];
+ }
+
+ // It may happen that caches are requested repeatedly for a group before we get a chance
+ // to write the values to the database. Check for queued updates first. This has the
+ // benefit of avoiding duplicate rows for inserts. Ideally this would be checked before we
+ // query the database for missing values. This code is somewhat ugly as it needs to
+ // reverse engineer the values from the row format.
+ $databaseGroupId = self::getDatabaseIdForGroupId( $id );
+ $uniqueKey = "$databaseGroupId|$code";
+ $queuedValue = self::$updates[$uniqueKey] ?? null;
+ if ( $queuedValue && !( $flags & self::FLAG_NO_CACHE ) ) {
+ return [
+ self::TOTAL => $queuedValue['tgs_total'],
+ self::TRANSLATED => $queuedValue['tgs_translated'],
+ self::FUZZY => $queuedValue['tgs_fuzzy'],
+ self::PROOFREAD => $queuedValue['tgs_proofread'],
+ ];
+ }
+
+ if ( $group instanceof AggregateMessageGroup ) {
+ $aggregates = self::calculateAggregageGroup( $stats, $group, $code, $flags );
+ } else {
+ $aggregates = self::calculateGroup( $group, $code );
+ }
+ // Cache for use in subsequent forItemInternal calls
+ $stats[$id][$code] = $aggregates;
+
+ // Don't add nulls to the database, causes annoying warnings
+ if ( $aggregates[self::TOTAL] === null ) {
+ return $aggregates;
+ }
+
+ self::$updates[$uniqueKey] = [
+ 'tgs_group' => $databaseGroupId,
+ 'tgs_lang' => $code,
+ 'tgs_total' => $aggregates[self::TOTAL],
+ 'tgs_translated' => $aggregates[self::TRANSLATED],
+ 'tgs_fuzzy' => $aggregates[self::FUZZY],
+ 'tgs_proofread' => $aggregates[self::PROOFREAD],
+ ];
+
+ // For big and lengthy updates, attempt some interim saves. This might not have
+ // any effect, because writes to the database may be deferred.
+ if ( count( self::$updates ) % 100 === 0 ) {
+ self::queueUpdates( $flags );
+ }
+
+ return $aggregates;
+ }
+
+ private static function calculateAggregageGroup( &$stats, $group, $code, $flags ) {
+ $aggregates = self::getEmptyStats();
+
+ $expanded = self::expandAggregates( $group );
+ $subGroupIds = array_keys( $expanded );
+
+ // Performance: if we have per-call cache of stats, do not query them again.
+ foreach ( $subGroupIds as $index => $sid ) {
+ if ( isset( $stats[$sid][$code] ) ) {
+ unset( $subGroupIds[ $index ] );
+ }
+ }
+
+ if ( $subGroupIds !== [] ) {
+ $res = self::selectRowsIdLang( $subGroupIds, [ $code ], $flags );
+ $stats = self::extractResults( $res, $subGroupIds, $stats );
+ }
+
+ foreach ( $expanded as $sid => $subgroup ) {
+ // Discouraged groups may belong to another group, usually if there
+ // is an aggregate group for all translatable pages. In that case
+ // calculate and store the statistics, but don't count them as part of
+ // the aggregate group, so that the numbers in Special:LanguageStats
+ // add up. The statistics for discouraged groups can still be viewed
+ // through Special:MessageGroupStats.
+ if ( !isset( $stats[$sid][$code] ) ) {
+ $stats[$sid][$code] = self::forItemInternal( $stats, $subgroup, $code, $flags );
+ }
+
+ if ( !TranslateMetadata::isExcluded( $sid, $code ) ) {
+ $aggregates = self::multiAdd( $aggregates, $stats[$sid][$code] );
+ }
+ }
+
+ return $aggregates;
+ }
+
+ public static function multiAdd( &$a, $b ) {
+ if ( $a[0] === null || $b[0] === null ) {
+ return array_fill( 0, count( $a ), null );
+ }
+ foreach ( $a as $i => &$v ) {
+ $v += $b[$i];
+ }
+
+ return $a;
+ }
+
+ /**
+ * @param MessageGroup $group
+ * @param string $code Language code
+ * @return int[] ( total, translated, fuzzy, proofread )
+ */
+ protected static function calculateGroup( MessageGroup $group, $code ) {
+ global $wgTranslateDocumentationLanguageCode;
+ // Calculate if missing and store in the db
+ $collection = $group->initCollection( $code );
+
+ if (
+ $code === $wgTranslateDocumentationLanguageCode
+ && $group instanceof FileBasedMessageGroup
+ ) {
+ $cache = $group->getMessageGroupCache( $group->getSourceLanguage() );
+ if ( $cache->exists() ) {
+ $template = $cache->getExtra()['TEMPLATE'] ?? [];
+ $infile = [];
+ foreach ( $template as $key => $data ) {
+ if ( isset( $data['comments']['.'] ) ) {
+ $infile[$key] = '1';
+ }
+ }
+ $collection->setInFile( $infile );
+ }
+ }
+
+ $collection->filter( 'ignored' );
+ $collection->filterUntranslatedOptional();
+ // Store the count of real messages for later calculation.
+ $total = count( $collection );
+
+ // Count fuzzy first.
+ $collection->filter( 'fuzzy' );
+ $fuzzy = $total - count( $collection );
+
+ // Count the completed translations.
+ $collection->filter( 'hastranslation', false );
+ $translated = count( $collection );
+
+ // Count how many of the completed translations
+ // have been proofread
+ $collection->filter( 'reviewer', false );
+ $proofread = count( $collection );
+
+ return [
+ self::TOTAL => $total,
+ self::TRANSLATED => $translated,
+ self::FUZZY => $fuzzy,
+ self::PROOFREAD => $proofread,
+ ];
+ }
+
+ protected static function queueUpdates( $flags ) {
+ if ( MediaWikiServices::getInstance()->getReadOnlyMode()->isReadOnly() ) {
+ return;
+ }
+
+ if ( self::$updates === [] ) {
+ return;
+ }
+
+ $lb = MediaWikiServices::getInstance()->getDBLoadBalancer();
+ $dbw = $lb->getConnectionRef( DB_PRIMARY ); // avoid connecting yet
+ $table = self::TABLE;
+ $callers = wfGetAllCallers( 50 );
+
+ $updateOp = self::withLock(
+ $dbw,
+ 'updates',
+ __METHOD__,
+ static function ( IDatabase $dbw, $method ) use ( $table, $callers ) {
+ // Maybe another deferred update already processed these
+ if ( self::$updates === [] ) {
+ return;
+ }
+
+ // This path should only be hit during web requests
+ if ( count( self::$updates ) > 100 ) {
+ $groups = array_unique( array_column( self::$updates, 'tgs_group' ) );
+ LoggerFactory::getInstance( 'Translate' )->warning(
+ "Huge translation update of {count} rows for group(s) {groups}",
+ [
+ 'count' => count( self::$updates ),
+ 'groups' => implode( ', ', $groups ),
+ 'callers' => $callers,
+ ]
+ );
+ }
+
+ $primaryKey = [ 'tgs_group', 'tgs_lang' ];
+ $dbw->replace( $table, [ $primaryKey ], array_values( self::$updates ), $method );
+ self::$updates = [];
+ }
+ );
+
+ if ( $flags & self::FLAG_IMMEDIATE_WRITES ) {
+ call_user_func( $updateOp );
+ } else {
+ DeferredUpdates::addCallableUpdate( $updateOp );
+ }
+ }
+
+ protected static function withLock( IDatabase $dbw, $key, $method, $callback ) {
+ $fname = __METHOD__;
+ return static function () use ( $dbw, $key, $method, $callback, $fname ) {
+ $lockName = 'MessageGroupStats:' . $key;
+ if ( !$dbw->lock( $lockName, $fname, 1 ) ) {
+ return; // raced out
+ }
+
+ $dbw->commit( $fname, 'flush' );
+ call_user_func( $callback, $dbw, $method );
+ $dbw->commit( $fname, 'flush' );
+
+ $dbw->unlock( $lockName, $fname );
+ };
+ }
+
+ public static function getDatabaseIdForGroupId( $id ) {
+ // The column is 100 bytes long, but we don't need to use it all
+ if ( strlen( $id ) <= 72 ) {
+ return $id;
+ }
+
+ $hash = hash( 'sha256', $id, /*asHex*/false );
+ $dbid = substr( $id, 0, 50 ) . '||' . substr( $hash, 0, 20 );
+ return $dbid;
+ }
+}
diff --git a/Translate/utils/MessageGroupStatsRebuildJob.php b/Translate/utils/MessageGroupStatsRebuildJob.php
new file mode 100644
index 00000000..4b7ab9cb
--- /dev/null
+++ b/Translate/utils/MessageGroupStatsRebuildJob.php
@@ -0,0 +1,85 @@
+<?php
+/**
+ * Contains class with job for rebuilding message group stats.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Extension\Translate\Jobs\GenericTranslateJob;
+use MediaWiki\MediaWikiServices;
+
+/**
+ * Job for rebuilding message group stats.
+ *
+ * @ingroup JobQueue
+ */
+class MessageGroupStatsRebuildJob extends GenericTranslateJob {
+ /**
+ * @param array $params
+ * @return self
+ */
+ public static function newJob( $params ) {
+ $job = new self( Title::newMainPage(), $params );
+ return $job;
+ }
+
+ /**
+ * Force updating of message group stats for given groups.
+ *
+ * This uses cache for groups not given. If given groups have dependencies such
+ * as an aggregate group and it's subgroup, this attempts to take care of it so
+ * that no duplicate work is done.
+ *
+ * @param string[] $messageGroupIds
+ * @return self
+ */
+ public static function newRefreshGroupsJob( array $messageGroupIds ) {
+ return new self( Title::newMainPage(), [ 'cleargroups' => $messageGroupIds ] );
+ }
+
+ /**
+ * @param Title $title
+ * @param array $params
+ */
+ public function __construct( $title, $params = [] ) {
+ parent::__construct( __CLASS__, $title, $params );
+ }
+
+ public function run() {
+ $lb = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
+ if ( !$lb->waitForReplication() ) {
+ $this->logWarning( 'Continuing despite replication lag' );
+ }
+
+ $params = $this->params;
+ $flags = 0;
+
+ // Sanity check that this is run via JobQueue. Immediate writes are only safe when they
+ // are run in isolation, e.g. as a separate job in the JobQueue.
+ if ( defined( 'MEDIAWIKI_JOB_RUNNER' ) ) {
+ $flags |= MessageGroupStats::FLAG_IMMEDIATE_WRITES;
+ }
+
+ // This is to make sure the priority value is not read from the process cache.
+ // There is still a possibility that, due to replication lag, an old value is read.
+ MessageGroups::singleton()->clearProcessCache();
+
+ if ( isset( $params[ 'purge' ] ) && $params[ 'purge' ] ) {
+ $flags |= MessageGroupStats::FLAG_NO_CACHE;
+ }
+
+ if ( isset( $params[ 'groupid' ] ) ) {
+ MessageGroupStats::forGroup( $params[ 'groupid' ], $flags );
+ } elseif ( isset( $params[ 'cleargroups' ] ) ) {
+ MessageGroupStats::clearGroup( $params[ 'cleargroups' ], $flags );
+ } elseif ( isset( $params[ 'languagecode' ] ) ) {
+ MessageGroupStats::forLanguage( $params[ 'languagecode' ], $flags );
+ } else {
+ throw new InvalidArgumentException( 'No groupid or languagecode or cleargroup provided' );
+ }
+
+ return true;
+ }
+}
diff --git a/Translate/utils/MessageGroupWANCache.php b/Translate/utils/MessageGroupWANCache.php
new file mode 100644
index 00000000..5d228101
--- /dev/null
+++ b/Translate/utils/MessageGroupWANCache.php
@@ -0,0 +1,168 @@
+<?php
+/**
+ * This file contains a wrapper around WANObjectCache
+ *
+ * @file
+ * @author Abijeet Patro
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * Wrapper around WANObjectCache providing a simpler interface for
+ * MessageGroups to use the cache.
+ * @since 2019.05
+ */
+class MessageGroupWANCache {
+
+ /** @var WANObjectCache */
+ protected $cache;
+ /**
+ * Cache key
+ *
+ * @var string
+ */
+ protected $cacheKey;
+ /**
+ * Cache version
+ *
+ * @var int
+ */
+ protected $cacheVersion;
+ /**
+ * To be called when the cache is empty or expired to get the data
+ * to repopulate the cache
+ * @var Closure
+ */
+ protected $regenerator;
+ /**
+ * @see @https://doc.wikimedia.org/mediawiki-core/master/php/classWANObjectCache.html
+ * @var int
+ */
+ protected $lockTSE;
+ /**
+ * @see @https://doc.wikimedia.org/mediawiki-core/master/php/classWANObjectCache.html
+ * @var array
+ */
+ protected $checkKeys;
+ /**
+ * @see @https://doc.wikimedia.org/mediawiki-core/master/php/classWANObjectCache.html
+ * @var Closure
+ */
+ protected $touchedCallback;
+ /**
+ * @see @https://doc.wikimedia.org/mediawiki-core/master/php/classWANObjectCache.html
+ * @var int
+ */
+ protected $ttl;
+
+ /**
+ * A prefix for all keys saved by this cache
+ * @var string
+ */
+ private const KEY_PREFIX = 'translate-mg';
+
+ public function __construct( WANObjectCache $cache ) {
+ $this->cache = $cache;
+ }
+
+ /**
+ * Fetches value from cache for a message group.
+ *
+ * @param bool $recache
+ * @return mixed
+ */
+ public function getValue( $recache = false ) {
+ $this->checkConfig();
+
+ $cacheData = $this->cache->getWithSetCallback(
+ $this->cacheKey,
+ $this->ttl,
+ $this->regenerator,
+ [
+ 'lockTSE' => $this->lockTSE, // avoid stampedes (mutex)
+ 'checkKeys' => $this->checkKeys,
+ 'touchedCallback' => function ( $value ) {
+ if ( $this->touchedCallback && call_user_func( $this->touchedCallback, $value ) ) {
+ // treat value as if it just expired (for "lockTSE")
+ return time();
+ }
+
+ return null;
+ },
+ // "miss" on recache
+ 'minAsOf' => $recache ? INF : WANObjectCache::MIN_TIMESTAMP_NONE,
+ ]
+ );
+
+ return $cacheData;
+ }
+
+ /**
+ * Sets value in the cache for the message group
+ *
+ * @param mixed $cacheData
+ */
+ public function setValue( $cacheData ) {
+ $this->checkConfig();
+ $this->cache->set( $this->cacheKey, $cacheData, $this->ttl );
+ }
+
+ public function touchKey() {
+ $this->checkConfig();
+ $this->cache->touchCheckKey( $this->cacheKey );
+ }
+
+ /**
+ * Deletes the cached value
+ */
+ public function delete() {
+ $this->checkConfig();
+ $this->cache->delete( $this->cacheKey );
+ }
+
+ /**
+ * Configure the message group. This must be called before making a call to any other
+ * method.
+ *
+ * @param array $config
+ */
+ public function configure( array $config ) {
+ $this->cacheKey = $config['key'] ?? null;
+ $this->cacheVersion = $config['version'] ?? null;
+ $this->regenerator = $config['regenerator'] ?? null;
+ $this->lockTSE = $config['lockTSE'] ?? 30;
+ $this->checkKeys = $config['checkKeys'] ?? [ $this->cacheKey ];
+ $this->touchedCallback = $config['touchedCallback'] ?? null;
+ $this->ttl = $config['ttl'] ?? WANObjectCache::TTL_DAY;
+
+ $this->checkConfig();
+
+ if ( $this->cacheVersion ) {
+ $this->cacheKey = $this->cache->makeKey( self::KEY_PREFIX,
+ strtolower( $this->cacheKey ), 'v' . $this->cacheVersion );
+ } else {
+ $this->cacheKey = $this->cache->makeKey(
+ self::KEY_PREFIX, strtolower( $this->cacheKey )
+ );
+ }
+ }
+
+ /**
+ * Check to see if the instance is configured properly.
+ */
+ protected function checkConfig() {
+ if ( $this->cacheKey === null ) {
+ throw new InvalidArgumentException( "Invalid cache key set. " .
+ "Ensure you have called the configure function before get / setting values." );
+ }
+
+ if ( !is_callable( $this->regenerator ) ) {
+ throw new InvalidArgumentException( "Invalid regenerator set. " .
+ "Ensure you have called the configure function before get / setting values." );
+ }
+
+ if ( $this->touchedCallback && !is_callable( $this->touchedCallback ) ) {
+ throw new InvalidArgumentException( "touchedCallback is not callable. " );
+ }
+ }
+}
diff --git a/Translate/utils/MessageHandle.php b/Translate/utils/MessageHandle.php
new file mode 100644
index 00000000..d3d91b47
--- /dev/null
+++ b/Translate/utils/MessageHandle.php
@@ -0,0 +1,293 @@
+<?php
+/**
+ * Class that enhances Title with stuff related to message groups
+ * @file
+ * @author Niklas Laxström
+ * @copyright Copyright © 2011-2013 Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Extension\Translate\MessageGroupProcessing\RevTagStore;
+use MediaWiki\Linker\LinkTarget;
+use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\MediaWikiServices;
+
+/**
+ * Class for pointing to messages, like Title class is for titles.
+ * @since 2011-03-13
+ */
+class MessageHandle {
+ /** @var LinkTarget */
+ protected $title;
+ /** @var string|null */
+ protected $key;
+ /** @var string|null Language code */
+ protected $code;
+ /** @var string[]|null */
+ protected $groupIds;
+
+ public function __construct( LinkTarget $title ) {
+ $this->title = $title;
+ }
+
+ /**
+ * Check if this handle is in a message namespace.
+ * @return bool
+ */
+ public function isMessageNamespace() {
+ global $wgTranslateMessageNamespaces;
+ $namespace = $this->title->getNamespace();
+
+ return in_array( $namespace, $wgTranslateMessageNamespaces );
+ }
+
+ /**
+ * Recommended to use getCode and getKey instead.
+ * @return string[] Array of the message key and the language code
+ */
+ public function figureMessage() {
+ if ( $this->key === null ) {
+ // Check if this is a valid message first
+ $this->key = $this->title->getDBkey();
+ $known = MessageIndex::singleton()->getGroupIds( $this ) !== [];
+
+ $pos = strrpos( $this->key, '/' );
+ if ( $known || $pos === false ) {
+ $this->code = '';
+ } else {
+ // For keys like Foo/, substr returns false instead of ''
+ $this->code = (string)( substr( $this->key, $pos + 1 ) );
+ $this->key = substr( $this->key, 0, $pos );
+ }
+ }
+
+ return [ $this->key, $this->code ];
+ }
+
+ /**
+ * Returns the identified or guessed message key.
+ * @return string
+ */
+ public function getKey() {
+ $this->figureMessage();
+
+ return $this->key;
+ }
+
+ /**
+ * Returns the language code.
+ * For language codeless source messages will return empty string.
+ * @return string
+ */
+ public function getCode() {
+ $this->figureMessage();
+
+ return $this->code;
+ }
+
+ /**
+ * Return the Language object for the assumed language of the content, which might
+ * be different from the subpage code (qqq, no subpage).
+ * @return Language
+ * @since 2016-01
+ */
+ public function getEffectiveLanguage() {
+ $code = $this->getCode();
+ if ( $code === '' || $this->isDoc() ) {
+ return MediaWikiServices::getInstance()->getContentLanguage();
+ }
+
+ return wfGetLangObj( $code );
+ }
+
+ /**
+ * Determine whether the current handle is for message documentation.
+ * @return bool
+ */
+ public function isDoc() {
+ global $wgTranslateDocumentationLanguageCode;
+
+ return $this->getCode() === $wgTranslateDocumentationLanguageCode;
+ }
+
+ /**
+ * Determine whether the current handle is for page translation feature.
+ * This does not consider whether the handle corresponds to any message.
+ * @return bool
+ */
+ public function isPageTranslation() {
+ return $this->title->inNamespace( NS_TRANSLATIONS );
+ }
+
+ /**
+ * Returns all message group ids this message belongs to.
+ * The primary message group id is always the first one.
+ * If the handle does not correspond to any message, the returned array
+ * is empty.
+ * @return string[]
+ */
+ public function getGroupIds() {
+ if ( $this->groupIds === null ) {
+ $this->groupIds = MessageIndex::singleton()->getGroupIds( $this );
+ }
+
+ return $this->groupIds;
+ }
+
+ /**
+ * Get the primary MessageGroup this message belongs to.
+ * You should check first that the handle is valid.
+ * @throws MWException
+ * @return MessageGroup|null
+ */
+ public function getGroup() {
+ $ids = $this->getGroupIds();
+ if ( !isset( $ids[0] ) ) {
+ throw new MWException( 'called before isValid' );
+ }
+
+ return MessageGroups::getGroup( $ids[0] );
+ }
+
+ /**
+ * Checks if the handle corresponds to a known message.
+ * @since 2011-03-16
+ * @return bool
+ */
+ public function isValid() {
+ if ( !$this->isMessageNamespace() ) {
+ return false;
+ }
+
+ $groups = $this->getGroupIds();
+ if ( !$groups ) {
+ return false;
+ }
+
+ // Do another check that the group actually exists
+ $group = $this->getGroup();
+ if ( !$group ) {
+ $logger = LoggerFactory::getInstance( 'Translate' );
+ $logger->warning(
+ '[MessageHandle] MessageIndex is out of date. Page {pagename} refers to ' .
+ 'unknown group {messagegroup}',
+ [
+ 'pagename' => $this->getTitle()->getPrefixedText(),
+ 'messagegroup' => $groups[0],
+ ]
+ );
+
+ // Schedule a job in the job queue (with deduplication)
+ $job = MessageIndexRebuildJob::newJob();
+ MediaWikiServices::getInstance()->getJobQueueGroup()->push( $job );
+
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Get the original title.
+ * @return Title
+ */
+ public function getTitle() {
+ return Title::newFromLinkTarget( $this->title );
+ }
+
+ /**
+ * Get the original title.
+ * @param string $code Language code.
+ * @return Title
+ * @since 2014.04
+ */
+ public function getTitleForLanguage( $code ) {
+ return Title::makeTitle(
+ $this->title->getNamespace(),
+ $this->getKey() . "/$code"
+ );
+ }
+
+ /**
+ * Get the title for the page base.
+ * @return Title
+ * @since 2014.04
+ */
+ public function getTitleForBase() {
+ return Title::makeTitle(
+ $this->title->getNamespace(),
+ $this->getKey()
+ );
+ }
+
+ /**
+ * Check if a string contains the fuzzy string.
+ *
+ * @param string $text Arbitrary text
+ * @return bool If string contains fuzzy string.
+ */
+ public static function hasFuzzyString( $text ) {
+ return strpos( $text, TRANSLATE_FUZZY ) !== false;
+ }
+
+ /**
+ * Check if a title is marked as fuzzy.
+ * @return bool If title is marked fuzzy.
+ */
+ public function isFuzzy() {
+ $dbr = wfGetDB( DB_REPLICA );
+
+ $tables = [ 'page', 'revtag' ];
+ $field = 'rt_type';
+ $conds = [
+ 'page_namespace' => $this->title->getNamespace(),
+ 'page_title' => $this->title->getDBkey(),
+ 'rt_type' => RevTagStore::FUZZY_TAG,
+ 'page_id=rt_page',
+ 'page_latest=rt_revision'
+ ];
+
+ $res = $dbr->selectField( $tables, $field, $conds, __METHOD__ );
+
+ return $res !== false;
+ }
+
+ /**
+ * This returns the key that can be used for showMessage parameter for Special:Translate
+ * for regular message groups. It is not possible to automatically determine this key
+ * from the title alone.
+ * @return string
+ * @since 2017.10
+ */
+ public function getInternalKey(): string {
+ $nsInfo = MediaWikiServices::getInstance()->getNamespaceInfo();
+ $contentLanguage = MediaWikiServices::getInstance()->getContentLanguage();
+
+ $key = $this->getKey();
+ $group = $this->getGroup();
+ $groupKeys = $group->getKeys();
+
+ if ( in_array( $key, $groupKeys, true ) ) {
+ return $key;
+ }
+
+ $namespace = $this->title->getNamespace();
+ if ( $nsInfo->isCapitalized( $namespace ) ) {
+ $lowercaseKey = $contentLanguage->lcfirst( $key );
+ if ( in_array( $lowercaseKey, $groupKeys, true ) ) {
+ return $lowercaseKey;
+ }
+ }
+
+ // Brute force all the keys to find the one. This one should always find a match
+ // if there is one.
+ foreach ( $groupKeys as $haystackKey ) {
+ $normalizedHaystackKey = Title::makeTitleSafe( $namespace, $haystackKey )->getDBkey();
+ if ( $normalizedHaystackKey === $key ) {
+ return $haystackKey;
+ }
+ }
+
+ return "BUG:$key";
+ }
+}
diff --git a/Translate/utils/MessageIndex.php b/Translate/utils/MessageIndex.php
new file mode 100644
index 00000000..92196de2
--- /dev/null
+++ b/Translate/utils/MessageIndex.php
@@ -0,0 +1,777 @@
+<?php
+/**
+ * Contains classes for handling the message index.
+ *
+ * @file
+ * @author Niklas Laxstrom
+ * @copyright Copyright © 2008-2013, Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+use Cdb\Reader;
+use Cdb\Writer;
+use MediaWiki\Extension\Translate\Services;
+use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\MediaWikiServices;
+
+/**
+ * Creates a database of keys in all groups, so that namespace and key can be
+ * used to get the groups they belong to. This is used as a fallback when
+ * loadgroup parameter is not provided in the request, which happens if someone
+ * reaches a messages from somewhere else than Special:Translate. Also used
+ * by Special:TranslationStats and alike which need to map lots of titles
+ * to message groups.
+ */
+abstract class MessageIndex {
+ private const CACHEKEY = 'Translate-MessageIndex-interim';
+
+ private const READ_LATEST = true;
+
+ /** @var self */
+ protected static $instance;
+ /** @var MapCacheLRU|null */
+ private static $keysCache;
+ /** @var BagOStuff */
+ protected $interimCache;
+ /** @var WANObjectCache */
+ private $statusCache;
+ /** @var JobQueueGroup */
+ private $jobQueueGroup;
+
+ public function __construct() {
+ // TODO: Use dependency injection
+ $mwInstance = MediaWikiServices::getInstance();
+ $this->statusCache = $mwInstance->getMainWANObjectCache();
+ $this->jobQueueGroup = $mwInstance->getJobQueueGroup();
+ }
+
+ /**
+ * @deprecated Since 2020.10 Use Services::getMessageIndex()
+ * @return self
+ */
+ public static function singleton(): self {
+ if ( self::$instance === null ) {
+ self::$instance = Services::getInstance()->getMessageIndex();
+ }
+
+ return self::$instance;
+ }
+
+ /**
+ * Override the global instance, for testing.
+ *
+ * @since 2015.04
+ * @param MessageIndex $instance
+ */
+ public static function setInstance( self $instance ) {
+ self::$instance = $instance;
+ }
+
+ /**
+ * Retrieves a list of groups given MessageHandle belongs to.
+ * @since 2012-01-04
+ * @param MessageHandle $handle
+ * @return string[]
+ */
+ public static function getGroupIds( MessageHandle $handle ): array {
+ global $wgTranslateMessageNamespaces;
+
+ $title = $handle->getTitle();
+
+ if ( !$title->inNamespaces( $wgTranslateMessageNamespaces ) ) {
+ return [];
+ }
+
+ $namespace = $title->getNamespace();
+ $key = $handle->getKey();
+ $normkey = TranslateUtils::normaliseKey( $namespace, $key );
+
+ $cache = self::getCache();
+ $value = $cache->get( $normkey );
+ if ( $value === null ) {
+ $value = (array)self::singleton()->getWithCache( $normkey );
+ $cache->set( $normkey, $value );
+ }
+
+ return $value;
+ }
+
+ /** @return MapCacheLRU */
+ private static function getCache() {
+ if ( self::$keysCache === null ) {
+ self::$keysCache = new MapCacheLRU( 30 );
+ }
+ return self::$keysCache;
+ }
+
+ /**
+ * @since 2012-01-04
+ * @param MessageHandle $handle
+ * @return ?string
+ */
+ public static function getPrimaryGroupId( MessageHandle $handle ): ?string {
+ $groups = self::getGroupIds( $handle );
+
+ return count( $groups ) ? array_shift( $groups ) : null;
+ }
+
+ private function getWithCache( $key ) {
+ $interimCacheValue = $this->getInterimCache()->get( self::CACHEKEY );
+ if ( $interimCacheValue && isset( $interimCacheValue['newKeys'][$key] ) ) {
+ return $interimCacheValue['newKeys'][$key];
+ }
+
+ return $this->get( $key );
+ }
+
+ /**
+ * Looks up the stored value for single key. Only for testing.
+ * @since 2012-04-10
+ * @param string $key
+ * @return string|array|null
+ */
+ protected function get( $key ) {
+ // Default implementation
+ $mi = $this->retrieve();
+ return $mi[$key] ?? null;
+ }
+
+ abstract public function retrieve( bool $readLatest = false ): array;
+
+ /**
+ * @since 2018.01
+ * @return string[]
+ */
+ public function getKeys() {
+ return array_keys( $this->retrieve() );
+ }
+
+ abstract protected function store( array $array, array $diff );
+
+ protected function lock() {
+ return true;
+ }
+
+ protected function unlock() {
+ return true;
+ }
+
+ /**
+ * Creates the index from scratch.
+ *
+ * @param float|null $timestamp Purge interim caches older than this timestamp.
+ * @return array
+ * @throws Exception
+ */
+ public function rebuild( float $timestamp = null ): array {
+ $logger = LoggerFactory::getInstance( 'Translate' );
+
+ static $recursion = 0;
+
+ if ( $recursion > 0 ) {
+ $msg = __METHOD__ . ': trying to recurse - building the index first time?';
+ wfWarn( $msg );
+
+ $recursion--;
+ return [];
+ }
+ $recursion++;
+
+ $logger->info(
+ '[MessageIndex] Started rebuild. Initiated by {callers}',
+ [ 'callers' => wfGetAllCallers( 20 ) ]
+ );
+
+ $groups = MessageGroups::singleton()->getGroups();
+
+ $tsStart = microtime( true );
+ if ( !$this->lock() ) {
+ throw new MessageIndexException( __CLASS__ . ': unable to acquire lock' );
+ }
+
+ $lockWaitDuration = microtime( true ) - $tsStart;
+ $logger->info(
+ '[MessageIndex] Got lock in {duration}',
+ [ 'duration' => $lockWaitDuration ]
+ );
+
+ self::getCache()->clear();
+
+ $new = [];
+ $old = $this->retrieve( self::READ_LATEST );
+ $postponed = [];
+
+ /** @var MessageGroup $g */
+ foreach ( $groups as $g ) {
+ if ( !$g->exists() ) {
+ $id = $g->getId();
+ wfWarn( __METHOD__ . ": group '$id' is registered but does not exist" );
+ continue;
+ }
+
+ # Skip meta thingies
+ if ( $g->isMeta() ) {
+ $postponed[] = $g;
+ continue;
+ }
+
+ $this->checkAndAdd( $new, $g );
+ }
+
+ foreach ( $postponed as $g ) {
+ $this->checkAndAdd( $new, $g, true );
+ }
+
+ $diff = self::getArrayDiff( $old, $new );
+ $this->store( $new, $diff['keys'] );
+ $this->unlock();
+
+ $criticalSectionDuration = microtime( true ) - $tsStart - $lockWaitDuration;
+ $logger->info(
+ '[MessageIndex] Finished critical section in {duration}',
+ [ 'duration' => $criticalSectionDuration ]
+ );
+
+ $cache = $this->getInterimCache();
+ $interimCacheValue = $cache->get( self::CACHEKEY );
+ $timestamp = $timestamp ?? microtime( true );
+ if ( $interimCacheValue ) {
+ if ( $interimCacheValue['timestamp'] <= $timestamp ) {
+ $cache->delete( self::CACHEKEY );
+ } else {
+ // Cache has a later timestamp. This may be caused due to
+ // job deduplication. Just in case, spin off a new job to clean up the cache.
+ $job = MessageIndexRebuildJob::newJob();
+ $this->jobQueueGroup->push( $job );
+ }
+ }
+
+ // Other caches can check this key to know when they need to refresh
+ $this->statusCache->touchCheckKey( $this->getStatusCacheKey() );
+
+ $this->clearMessageGroupStats( $diff );
+
+ $recursion--;
+
+ return $new;
+ }
+
+ /**
+ * @since 2021.10
+ * @return string
+ */
+ public function getStatusCacheKey(): string {
+ return $this->statusCache->makeKey( 'Translate', 'MessageIndex', 'status' );
+ }
+
+ private function getInterimCache(): BagOStuff {
+ return ObjectCache::getInstance( CACHE_ANYTHING );
+ }
+
+ public function storeInterim( MessageGroup $group, array $newKeys ): void {
+ $namespace = $group->getNamespace();
+ $id = $group->getId();
+
+ $normalizedNewKeys = [];
+ foreach ( $newKeys as $key ) {
+ $normalizedNewKeys[TranslateUtils::normaliseKey( $namespace, $key )] = $id;
+ }
+
+ $cache = $this->getInterimCache();
+ // Merge existing with existing keys
+ $interimCacheValue = $cache->get( self::CACHEKEY, $cache::READ_LATEST );
+ if ( $interimCacheValue ) {
+ $normalizedNewKeys = array_merge( $interimCacheValue['newKeys'], $normalizedNewKeys );
+ }
+
+ $value = [
+ 'timestamp' => microtime( true ),
+ 'newKeys' => $normalizedNewKeys,
+ ];
+
+ $cache->set( self::CACHEKEY, $value, $cache::TTL_DAY );
+ }
+
+ /**
+ * Compares two associative arrays.
+ *
+ * Values must be a string or list of strings. Returns an array of added,
+ * deleted and modified keys as well as value changes (you can think values
+ * as categories and keys as pages). Each of the keys ('add', 'del', 'mod'
+ * respectively) maps to an array whose keys are the changed keys of the
+ * original arrays and values are lists where first element contains the
+ * old value and the second element the new value.
+ *
+ * @code
+ * $a = [ 'a' => '1', 'b' => '2', 'c' => '3' ];
+ * $b = [ 'b' => '2', 'c' => [ '3', '2' ], 'd' => '4' ];
+ *
+ * self::getArrayDiff( $a, $b ) === [
+ * 'keys' => [
+ * 'add' => [ 'd' => [ [], [ '4' ] ] ],
+ * 'del' => [ 'a' => [ [ '1' ], [] ] ],
+ * 'mod' => [ 'c' => [ [ '3' ], [ '3', '2' ] ] ],
+ * ],
+ * 'values' => [ 2, 4, 1 ]
+ * ];
+ * @endcode
+ *
+ * @param array $old
+ * @param array $new
+ * @return array
+ */
+ public static function getArrayDiff( array $old, array $new ) {
+ $values = [];
+ $record = static function ( $groups ) use ( &$values ) {
+ foreach ( $groups as $group ) {
+ $values[$group] = true;
+ }
+ };
+
+ $keys = [
+ 'add' => [],
+ 'del' => [],
+ 'mod' => [],
+ ];
+
+ foreach ( $new as $key => $groups ) {
+ if ( !isset( $old[$key] ) ) {
+ $keys['add'][$key] = [ [], (array)$groups ];
+ $record( (array)$groups );
+ // Using != here on purpose to ignore the order of items
+ } elseif ( $groups != $old[$key] ) {
+ $keys['mod'][$key] = [ (array)$old[$key], (array)$groups ];
+ $record( array_diff( (array)$old[$key], (array)$groups ) );
+ $record( array_diff( (array)$groups, (array)$old[$key] ) );
+ }
+ }
+
+ foreach ( $old as $key => $groups ) {
+ if ( !isset( $new[$key] ) ) {
+ $keys['del'][$key] = [ (array)$groups, [] ];
+ $record( (array)$groups );
+ }
+ // We already checked for diffs above
+ }
+
+ return [
+ 'keys' => $keys,
+ 'values' => array_keys( $values ),
+ ];
+ }
+
+ /**
+ * Purge stuff when set of keys have changed.
+ *
+ * @param array $diff
+ */
+ protected function clearMessageGroupStats( array $diff ) {
+ $job = MessageGroupStatsRebuildJob::newRefreshGroupsJob( $diff['values'] );
+ $this->jobQueueGroup->push( $job );
+
+ foreach ( $diff['keys'] as $keys ) {
+ foreach ( $keys as $key => $data ) {
+ [ $ns, $pagename ] = explode( ':', $key, 2 );
+ $title = Title::makeTitle( (int)$ns, $pagename );
+ $handle = new MessageHandle( $title );
+ [ $oldGroups, $newGroups ] = $data;
+ Hooks::run( 'TranslateEventMessageMembershipChange',
+ [ $handle, $oldGroups, $newGroups ] );
+ }
+ }
+ }
+
+ /**
+ * @param array &$hugearray
+ * @param MessageGroup $g
+ * @param bool $ignore
+ */
+ protected function checkAndAdd( &$hugearray, MessageGroup $g, $ignore = false ) {
+ $keys = $g->getKeys();
+ $id = $g->getId();
+ $namespace = $g->getNamespace();
+
+ foreach ( $keys as $key ) {
+ # Force all keys to lower case, because the case doesn't matter and it is
+ # easier to do comparing when the case of first letter is unknown, because
+ # mediawiki forces it to upper case
+ $key = TranslateUtils::normaliseKey( $namespace, $key );
+ if ( isset( $hugearray[$key] ) ) {
+ if ( !$ignore ) {
+ $to = implode( ', ', (array)$hugearray[$key] );
+ wfWarn( "Key $key already belongs to $to, conflict with $id" );
+ }
+
+ if ( is_array( $hugearray[$key] ) ) {
+ // Hard work is already done, just add a new reference
+ $hugearray[$key][] = & $id;
+ } else {
+ // Store the actual reference, then remove it from array, to not
+ // replace the references value, but to store an array of new
+ // references instead. References are hard!
+ $value = & $hugearray[$key];
+ unset( $hugearray[$key] );
+ $hugearray[$key] = [ &$value, &$id ];
+ }
+ } else {
+ $hugearray[$key] = & $id;
+ }
+ }
+ unset( $id ); // Disconnect the previous references to this $id
+ }
+
+ /**
+ * These are probably slower than serialize and unserialize,
+ * but they are more space efficient because we only need
+ * strings and arrays.
+ * @param mixed $data
+ * @return mixed
+ */
+ protected function serialize( $data ) {
+ if ( is_array( $data ) ) {
+ return implode( '|', $data );
+ } else {
+ return $data;
+ }
+ }
+
+ protected function unserialize( $data ) {
+ if ( strpos( $data, '|' ) !== false ) {
+ return explode( '|', $data );
+ }
+
+ return $data;
+ }
+}
+
+/**
+ * Storage on serialized file.
+ *
+ * This serializes the whole array. Because this format can preserve
+ * the values which are stored as references inside the array, this is
+ * the most space efficient storage method and fastest when you want
+ * the full index.
+ *
+ * Unfortunately when the size of index grows to about 50000 items, even
+ * though it is only 3,5M on disk, it takes 35M when loaded into memory
+ * and the loading can take more than 0,5 seconds. Because usually we
+ * need to look up only few keys, it is better to use another backend
+ * which provides random access - this backend doesn't support that.
+ */
+class SerializedMessageIndex extends MessageIndex {
+ /** @var array|null */
+ protected $index;
+ protected $filename = 'translate_messageindex.ser';
+
+ public function retrieve( bool $readLatest = false ): array {
+ if ( $this->index !== null ) {
+ return $this->index;
+ }
+
+ $file = TranslateUtils::cacheFile( $this->filename );
+ if ( file_exists( $file ) ) {
+ $this->index = unserialize( file_get_contents( $file ) );
+ } else {
+ $this->index = $this->rebuild();
+ }
+
+ return $this->index;
+ }
+
+ protected function store( array $array, array $diff ) {
+ $file = TranslateUtils::cacheFile( $this->filename );
+ file_put_contents( $file, serialize( $array ) );
+ $this->index = $array;
+ }
+}
+
+/**
+ * Storage on the database itself.
+ *
+ * This is likely to be the slowest backend. However, it scales okay
+ * and provides random access. It also doesn't need any special setup,
+ * the database table is added with update.php together with other tables,
+ * which is the reason this is the default backend. It also works well
+ * on multi-server setup without needing for shared file storage.
+ *
+ * @since 2012-04-12
+ */
+class DatabaseMessageIndex extends MessageIndex {
+ /** @var array|null */
+ protected $index;
+
+ protected function lock() {
+ $dbw = wfGetDB( DB_PRIMARY );
+
+ // Any transaction should be flushed after getting the lock to avoid
+ // stale pre-lock REPEATABLE-READ snapshot data.
+ $ok = $dbw->lock( 'translate-messageindex', __METHOD__, 30 );
+ if ( $ok ) {
+ $dbw->commit( __METHOD__, 'flush' );
+ }
+
+ return $ok;
+ }
+
+ protected function unlock() {
+ $fname = __METHOD__;
+ $dbw = wfGetDB( DB_PRIMARY );
+ // Unlock once the rows are actually unlocked to avoid deadlocks
+ if ( !$dbw->trxLevel() ) {
+ $dbw->unlock( 'translate-messageindex', $fname );
+ } elseif ( is_callable( [ $dbw, 'onTransactionResolution' ] ) ) { // 1.28
+ $dbw->onTransactionResolution( static function () use ( $dbw, $fname ) {
+ $dbw->unlock( 'translate-messageindex', $fname );
+ }, $fname );
+ } else {
+ $dbw->onTransactionCommitOrIdle( static function () use ( $dbw, $fname ) {
+ $dbw->unlock( 'translate-messageindex', $fname );
+ }, $fname );
+ }
+
+ return true;
+ }
+
+ public function retrieve( bool $readLatest = false ): array {
+ if ( $this->index !== null && !$readLatest ) {
+ return $this->index;
+ }
+
+ $dbr = wfGetDB( $readLatest ? DB_PRIMARY : DB_REPLICA );
+ $res = $dbr->select( 'translate_messageindex', '*', [], __METHOD__ );
+ $this->index = [];
+ foreach ( $res as $row ) {
+ $this->index[$row->tmi_key] = $this->unserialize( $row->tmi_value );
+ }
+
+ return $this->index;
+ }
+
+ protected function get( $key ) {
+ $dbr = wfGetDB( DB_REPLICA );
+ $value = $dbr->selectField(
+ 'translate_messageindex',
+ 'tmi_value',
+ [ 'tmi_key' => $key ],
+ __METHOD__
+ );
+
+ if ( is_string( $value ) ) {
+ $value = $this->unserialize( $value );
+ } else {
+ $value = null;
+ }
+
+ return $value;
+ }
+
+ protected function store( array $array, array $diff ) {
+ $updates = [];
+
+ foreach ( [ $diff['add'], $diff['mod'] ] as $changes ) {
+ foreach ( $changes as $key => $data ) {
+ [ , $new ] = $data;
+ $updates[] = [
+ 'tmi_key' => $key,
+ 'tmi_value' => $this->serialize( $new ),
+ ];
+ }
+ }
+
+ $index = [ 'tmi_key' ];
+ $deletions = array_keys( $diff['del'] );
+
+ $dbw = wfGetDB( DB_PRIMARY );
+ $dbw->startAtomic( __METHOD__ );
+
+ if ( $updates !== [] ) {
+ $dbw->replace( 'translate_messageindex', [ $index ], $updates, __METHOD__ );
+ }
+
+ if ( $deletions !== [] ) {
+ $dbw->delete( 'translate_messageindex', [ 'tmi_key' => $deletions ], __METHOD__ );
+ }
+
+ $dbw->endAtomic( __METHOD__ );
+
+ $this->index = $array;
+ }
+}
+
+/**
+ * Storage on the object cache.
+ *
+ * This can be faster than DatabaseMessageIndex, but it doesn't
+ * provide random access, and the data is not guaranteed to be persistent.
+ *
+ * This is unlikely to be the best backend for you, so don't use it.
+ */
+class CachedMessageIndex extends MessageIndex {
+ protected $key = 'translate-messageindex';
+ protected $cache;
+ /** @var array|null */
+ protected $index;
+
+ protected function __construct() {
+ parent::__construct();
+ $this->cache = ObjectCache::getInstance( CACHE_ANYTHING );
+ }
+
+ public function retrieve( bool $readLatest = false ): array {
+ if ( $this->index !== null ) {
+ return $this->index;
+ }
+
+ $key = $this->cache->makeKey( $this->key );
+ $data = $this->cache->get( $key );
+ if ( is_array( $data ) ) {
+ $this->index = $data;
+ } else {
+ $this->index = $this->rebuild();
+ }
+
+ return $this->index;
+ }
+
+ protected function store( array $array, array $diff ) {
+ $key = $this->cache->makeKey( $this->key );
+ $this->cache->set( $key, $array );
+
+ $this->index = $array;
+ }
+}
+
+/**
+ * Storage on CDB files.
+ *
+ * This is improved version of SerializedMessageIndex. It uses CDB files
+ * for storage, which means it provides random access. The CDB files are
+ * about double the size of serialized files (~7M for 50000 keys).
+ *
+ * Loading the whole index is slower than serialized, but about the same
+ * as for database. Suitable for single-server setups where
+ * SerializedMessageIndex is too slow for loading the whole index.
+ *
+ * @since 2012-04-10
+ */
+class CDBMessageIndex extends MessageIndex {
+ /** @var array|null */
+ protected $index;
+ /** @var Reader|null */
+ protected $reader;
+ /** @var string */
+ protected $filename = 'translate_messageindex.cdb';
+
+ /**
+ * @param bool $readLatest
+ * @return array
+ */
+ public function retrieve( bool $readLatest = false ): array {
+ $reader = $this->getReader();
+ // This must be below the line above, which may fill the index
+ if ( $this->index !== null ) {
+ return $this->index;
+ }
+
+ $this->index = [];
+ foreach ( $this->getKeys() as $key ) {
+ $this->index[$key] = $this->unserialize( $reader->get( $key ) );
+ }
+
+ return $this->index;
+ }
+
+ public function getKeys() {
+ $reader = $this->getReader();
+ $keys = [];
+ while ( true ) {
+ $key = $keys === [] ? $reader->firstkey() : $reader->nextkey();
+ if ( $key === false ) {
+ break;
+ }
+ $keys[] = $key;
+ }
+
+ return $keys;
+ }
+
+ protected function get( $key ) {
+ $reader = $this->getReader();
+ // We might have the full cache loaded
+ if ( $this->index !== null ) {
+ return $this->index[$key] ?? null;
+ }
+
+ $value = $reader->get( $key );
+ if ( !is_string( $value ) ) {
+ $value = null;
+ } else {
+ $value = $this->unserialize( $value );
+ }
+
+ return $value;
+ }
+
+ protected function store( array $array, array $diff ) {
+ $this->reader = null;
+
+ $file = TranslateUtils::cacheFile( $this->filename );
+ $cache = Writer::open( $file );
+
+ foreach ( $array as $key => $value ) {
+ $value = $this->serialize( $value );
+ $cache->set( $key, $value );
+ }
+
+ $cache->close();
+
+ $this->index = $array;
+ }
+
+ protected function getReader() {
+ if ( $this->reader ) {
+ return $this->reader;
+ }
+
+ $file = TranslateUtils::cacheFile( $this->filename );
+ if ( !file_exists( $file ) ) {
+ // Create an empty index to allow rebuild
+ $this->store( [], [] );
+ $this->index = $this->rebuild();
+ }
+
+ $this->reader = Reader::open( $file );
+ return $this->reader;
+ }
+}
+
+/**
+ * Storage on hash.
+ *
+ * For testing.
+ *
+ * @since 2015.04
+ */
+class HashMessageIndex extends MessageIndex {
+ /** @var array */
+ protected $index = [];
+
+ public function retrieve( bool $readLatest = false ): array {
+ return $this->index;
+ }
+
+ /**
+ * @param string $key
+ * @return mixed
+ */
+ protected function get( $key ) {
+ return $this->index[$key] ?? null;
+ }
+
+ protected function store( array $array, array $diff ) {
+ $this->index = $array;
+ }
+
+ protected function clearMessageGroupStats( array $diff ) {
+ }
+}
diff --git a/Translate/utils/MessageIndexException.php b/Translate/utils/MessageIndexException.php
new file mode 100644
index 00000000..77916d1c
--- /dev/null
+++ b/Translate/utils/MessageIndexException.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * @file
+ * @author Niklas Laxstrom
+ * @license GPL-2.0-or-later
+ */
+
+/** @since 2020.05 */
+class MessageIndexException extends RuntimeException {
+}
diff --git a/Translate/utils/MessageIndexRebuildJob.php b/Translate/utils/MessageIndexRebuildJob.php
new file mode 100644
index 00000000..3fa2f434
--- /dev/null
+++ b/Translate/utils/MessageIndexRebuildJob.php
@@ -0,0 +1,83 @@
+<?php
+/**
+ * Contains class with job for rebuilding message index.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @copyright Copyright © 2011-2013, Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Extension\Translate\Jobs\GenericTranslateJob;
+use MediaWiki\MediaWikiServices;
+
+/**
+ * Job for rebuilding message index.
+ *
+ * @ingroup JobQueue
+ */
+class MessageIndexRebuildJob extends GenericTranslateJob {
+ /** @return self */
+ public static function newJob() {
+ $timestamp = microtime( true );
+ $job = new self( Title::newMainPage(), [ 'timestamp' => $timestamp ] );
+
+ return $job;
+ }
+
+ /**
+ * @param Title $title
+ * @param array $params
+ */
+ public function __construct( $title, $params = [] ) {
+ parent::__construct( __CLASS__, $title, $params );
+ $this->removeDuplicates = true;
+ }
+
+ public function run() {
+ // Make sure we have latest version of message groups from global cache.
+ // This should be pretty fast, just a few cache fetches with some post processing.
+ MessageGroups::singleton()->clearProcessCache();
+
+ // BC for existing jobs which may not have this parameter set
+ $timestamp = $this->getParams()['timestamp'] ?? microtime( true );
+
+ try {
+ MessageIndex::singleton()->rebuild( $timestamp );
+ } catch ( MessageIndexException $e ) {
+ // Currently there is just one type of exception: lock wait time exceeded.
+ // Assuming no bugs, this is a transient issue and retry will solve it.
+ $this->logWarning( $e->getMessage() );
+ // Try again later. See ::allowRetries
+ return false;
+ }
+
+ return true;
+ }
+
+ /** @inheritDoc */
+ public function allowRetries() {
+ // This is the default, but added for explicitness and clarity
+ return true;
+ }
+
+ /** @inheritDoc */
+ public function getDeduplicationInfo() {
+ $info = parent::getDeduplicationInfo();
+ // The timestamp is different for every job, so ignore it. The worst that can
+ // happen is that the front cache is not cleared until a future job is created.
+ // There is a check in MessageIndex to spawn a new job if timestamp is smaller
+ // than expected.
+ //
+ // Ideally we would take the latest timestamp, but it seems that the job queue
+ // just prevents insertion of duplicate jobs instead.
+ unset( $info['params']['timestamp'] );
+
+ return $info;
+ }
+
+ /** @deprecated Just push directly to the job queue */
+ public function insertIntoJobQueue(): void {
+ MediaWikiServices::getInstance()->getJobQueueGroup()->push( $this );
+ }
+}
diff --git a/Translate/utils/MessageUpdateJob.php b/Translate/utils/MessageUpdateJob.php
new file mode 100644
index 00000000..8249f40b
--- /dev/null
+++ b/Translate/utils/MessageUpdateJob.php
@@ -0,0 +1,346 @@
+<?php
+/**
+ * Job for updating translation pages.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @copyright Copyright © 2008-2013, Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Extension\Translate\Jobs\GenericTranslateJob;
+use MediaWiki\Extension\Translate\MessageGroupProcessing\RevTagStore;
+use MediaWiki\Extension\Translate\MessageProcessing\TranslateReplaceTitle;
+use MediaWiki\Extension\Translate\Services;
+use MediaWiki\Extension\Translate\SystemUsers\FuzzyBot;
+use MediaWiki\MediaWikiServices;
+
+/**
+ * Job for updating translation pages when translation or message definition changes.
+ *
+ * @ingroup JobQueue
+ */
+class MessageUpdateJob extends GenericTranslateJob {
+ /**
+ * Create a normal message update job without a rename process
+ * @param Title $target
+ * @param string $content
+ * @param string|false $fuzzy
+ * @return self
+ */
+ public static function newJob(
+ Title $target, string $content, $fuzzy = false
+ ): self {
+ $params = [
+ 'content' => $content,
+ 'fuzzy' => $fuzzy,
+ ];
+
+ $job = new self( $target, $params );
+
+ return $job;
+ }
+
+ /**
+ * Create a message update job containing a rename process
+ * @param Title $target
+ * @param string $targetStr
+ * @param string $replacement
+ * @param string|false $fuzzy
+ * @param string $content
+ * @param array $otherLangContents
+ * @return self
+ */
+ public static function newRenameJob(
+ Title $target,
+ string $targetStr,
+ string $replacement,
+ $fuzzy,
+ string $content,
+ array $otherLangContents = []
+ ): self {
+ $params = [
+ 'target' => $targetStr,
+ 'replacement' => $replacement,
+ 'fuzzy' => $fuzzy,
+ 'rename' => 'rename',
+ 'content' => $content,
+ 'otherLangs' => $otherLangContents
+ ];
+
+ $job = new self( $target, $params );
+
+ return $job;
+ }
+
+ /**
+ * @param Title $title
+ * @param array $params
+ */
+ public function __construct( $title, $params = [] ) {
+ parent::__construct( __CLASS__, $title, $params );
+ }
+
+ public function run() {
+ $params = $this->params;
+ $user = FuzzyBot::getUser();
+ $flags = EDIT_FORCE_BOT;
+ $isRename = $params['rename'] ?? false;
+ $isFuzzy = $params['fuzzy'] ?? false;
+ $otherLangs = $params['otherLangs'] ?? [];
+ $originalTitle = Title::newFromLinkTarget( $this->title->getTitleValue(), Title::NEW_CLONE );
+
+ if ( $isRename ) {
+ $this->title = $this->handleRename( $params['target'], $params['replacement'], $user );
+ if ( $this->title === null ) {
+ // There was a failure, return true, but don't proceed further.
+ $this->logWarning(
+ 'Rename process could not find the source title.',
+ [
+ 'replacement' => $params['replacement'],
+ 'target' => $params['target']
+ ]
+ );
+
+ $this->removeFromCache( $originalTitle );
+ return true;
+ }
+ }
+
+ $title = $this->title;
+ $wikiPage = MediaWikiServices::getInstance()->getWikiPageFactory()->newFromTitle( $title );
+ $summary = wfMessage( 'translate-manage-import-summary' )
+ ->inContentLanguage()->plain();
+ $content = ContentHandler::makeContent( $params['content'], $title );
+ $editStatus = $wikiPage->doUserEditContent(
+ $content,
+ $user,
+ $summary,
+ $flags
+ );
+ if ( !$editStatus->isOK() ) {
+ $this->logError(
+ 'Failed to update content for source message',
+ [
+ 'content' => $content,
+ 'errors' => $editStatus->getErrors()
+ ]
+ );
+ }
+
+ if ( $isRename ) {
+ // Update other language content if present.
+ $this->processTranslationChanges(
+ $otherLangs, $params['replacement'], $params['namespace'], $summary, $flags, $user
+ );
+ }
+
+ if ( $isFuzzy ) {
+ $this->handleFuzzy( $title );
+ }
+
+ $this->removeFromCache( $originalTitle );
+ return true;
+ }
+
+ /**
+ * Handles renames
+ * @param string $target
+ * @param string $replacement
+ * @param User $user
+ * @return Title|null
+ */
+ private function handleRename( $target, $replacement, User $user ) {
+ $newSourceTitle = null;
+
+ $sourceMessageHandle = new MessageHandle( $this->title );
+ $movableTitles = TranslateReplaceTitle::getTitlesForMove( $sourceMessageHandle, $replacement );
+
+ if ( $movableTitles === [] ) {
+ $this->logError(
+ 'No moveable titles found with target text.',
+ [
+ 'title' => $this->title->getPrefixedText(),
+ 'replacement' => $replacement,
+ 'target' => $target
+ ]
+ );
+ return null;
+ }
+
+ $renameSummary = wfMessage( 'translate-manage-import-rename-summary' )
+ ->inContentLanguage()->plain();
+
+ foreach ( $movableTitles as [ $sourceTitle, $replacementTitle ] ) {
+ $mv = MediaWikiServices::getInstance()
+ ->getMovePageFactory()
+ ->newMovePage( $sourceTitle, $replacementTitle );
+
+ $status = $mv->move( $user, $renameSummary, false );
+ if ( !$status->isOK() ) {
+ $this->logError(
+ 'Error moving message',
+ [
+ 'target' => $sourceTitle->getPrefixedText(),
+ 'replacement' => $replacementTitle->getPrefixedText(),
+ 'errors' => $status->getErrors()
+ ]
+ );
+ }
+
+ [ , $targetCode ] = TranslateUtils::figureMessage( $replacementTitle->getText() );
+ if ( !$newSourceTitle && $sourceMessageHandle->getCode() === $targetCode ) {
+ $newSourceTitle = $replacementTitle;
+ }
+ }
+
+ if ( $newSourceTitle ) {
+ return $newSourceTitle;
+ } else {
+ // This means that the old source Title was never moved
+ // which is not possible but handle it.
+ $this->logError(
+ 'Source title was not in the list of moveable titles.',
+ [ 'title' => $this->title->getPrefixedText() ]
+ );
+ }
+ }
+
+ /**
+ * Handles fuzzying. Message documentation and the source language are excluded from
+ * fuzzying. The source language is the identified via the $title parameter
+ * @param Title $title
+ */
+ private function handleFuzzy( Title $title ) {
+ global $wgTranslateDocumentationLanguageCode;
+ $handle = new MessageHandle( $title );
+
+ $languages = TranslateUtils::getLanguageNames( 'en' );
+
+ // Don't fuzzy the message documentation
+ unset( $languages[$wgTranslateDocumentationLanguageCode] );
+ $languages = array_keys( $languages );
+
+ $pages = [];
+ foreach ( $languages as $code ) {
+ $otherTitle = $handle->getTitleForLanguage( $code );
+ $pages[$otherTitle->getDBkey()] = true;
+ }
+
+ // Unset to ensure that the source language is not fuzzied
+ unset( $pages[$title->getDBkey()] );
+
+ if ( $pages === [] ) {
+ return;
+ }
+
+ $dbw = MediaWikiServices::getInstance()
+ ->getDBLoadBalancer()
+ ->getMaintenanceConnectionRef( DB_PRIMARY );
+ $fields = [ 'page_id', 'page_latest' ];
+ $conds = [ 'page_namespace' => $title->getNamespace() ];
+ $conds['page_title'] = array_keys( $pages );
+
+ $res = $dbw->select( 'page', $fields, $conds, __METHOD__ );
+ $inserts = [];
+ foreach ( $res as $row ) {
+ $inserts[] = [
+ 'rt_type' => RevTagStore::FUZZY_TAG,
+ 'rt_page' => $row->page_id,
+ 'rt_revision' => $row->page_latest,
+ ];
+ }
+
+ if ( $inserts === [] ) {
+ return;
+ }
+
+ $dbw->replace(
+ 'revtag',
+ [ [ 'rt_type', 'rt_page', 'rt_revision' ] ],
+ $inserts,
+ __METHOD__
+ );
+ }
+
+ /**
+ * Updates the translation unit pages in non-source languages.
+ * @param array $langChanges
+ * @param string $baseTitle
+ * @param int $groupNamespace
+ * @param string $summary
+ * @param int $flags
+ * @param User $user
+ */
+ private function processTranslationChanges(
+ array $langChanges, $baseTitle, $groupNamespace, $summary, $flags, User $user
+ ) {
+ $wikiPageFactory = MediaWikiServices::getInstance()->getWikiPageFactory();
+ foreach ( $langChanges as $code => $contentStr ) {
+ $titleStr = TranslateUtils::title( $baseTitle, $code, $groupNamespace );
+ $title = Title::newFromText( $titleStr, $groupNamespace );
+ $wikiPage = $wikiPageFactory->newFromTitle( $title );
+ $content = ContentHandler::makeContent( $contentStr, $title );
+ $status = $wikiPage->doUserEditContent(
+ $content,
+ $user,
+ $summary,
+ $flags
+ );
+ if ( !$status->isOK() ) {
+ $this->logError(
+ 'Failed to update content for non-source message',
+ [
+ 'title' => $title->getPrefixedText(),
+ 'errors' => $status->getErrors()
+ ]
+ );
+ }
+ }
+ }
+
+ private function removeFromCache( Title $title ): void {
+ $config = MediaWikiServices::getInstance()->getMainConfig();
+
+ if ( !$config->get( 'TranslateGroupSynchronizationCache' ) ) {
+ return;
+ }
+
+ $currentTitle = $title;
+ // Check if the current title, is equal to the title passed. This condition will be
+ // true incase of rename where the old title would have been renamed.
+ if ( $this->title && $this->title->getPrefixedDBkey() !== $title->getPrefixedDBkey() ) {
+ $currentTitle = $this->title;
+ }
+
+ $sourceMessageHandle = new MessageHandle( $currentTitle );
+ $groupIds = $sourceMessageHandle->getGroupIds();
+ if ( !$groupIds ) {
+ $this->logWarning(
+ "Could not find group Id for message title: {$currentTitle->getPrefixedDBkey()}",
+ $this->getParams()
+ );
+ return;
+ }
+
+ $groupId = $groupIds[0];
+ $group = MessageGroups::getGroup( $groupId );
+
+ if ( !$group instanceof FileBasedMessageGroup ) {
+ return;
+ }
+
+ $groupSyncCache = Services::getInstance()->getGroupSynchronizationCache();
+ $messageKey = $title->getPrefixedDBkey();
+
+ if ( $groupSyncCache->isMessageBeingProcessed( $groupId, $messageKey ) ) {
+ $groupSyncCache->removeMessages( $groupId, $messageKey );
+ $groupSyncCache->extendGroupExpiryTime( $groupId );
+ } else {
+ $this->logWarning(
+ "Did not find key: $messageKey; in group: $groupId in group sync cache",
+ $this->getParams()
+ );
+ }
+ }
+}
diff --git a/Translate/utils/PHPVariableLoader.php b/Translate/utils/PHPVariableLoader.php
new file mode 100644
index 00000000..e2e0753f
--- /dev/null
+++ b/Translate/utils/PHPVariableLoader.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Stuff for handling configuration files in PHP format.
+ * @file
+ * @author Niklas Laxström
+ * @copyright Copyright © 2010 Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * Stuff for handling configuration files in PHP format.
+ */
+class PHPVariableLoader {
+ /**
+ * Returns a global variable from PHP file by executing the file.
+ * @param string $_filename Path to the file.
+ * @param string $_variable Name of the variable.
+ * @return mixed|null The variable contents or null.
+ */
+ public static function loadVariableFromPHPFile( $_filename, $_variable ) {
+ if ( !file_exists( $_filename ) ) {
+ return null;
+ } else {
+ require $_filename;
+
+ return $$_variable ?? null;
+ }
+ }
+}
diff --git a/Translate/utils/TranslateLogFormatter.php b/Translate/utils/TranslateLogFormatter.php
new file mode 100644
index 00000000..892b58be
--- /dev/null
+++ b/Translate/utils/TranslateLogFormatter.php
@@ -0,0 +1,88 @@
+<?php
+/**
+ * Class for formatting Translate logs.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @copyright Copyright © 2013, Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * Class for formatting Translate logs.
+ */
+class TranslateLogFormatter extends LogFormatter {
+ public function getMessageParameters() {
+ $params = parent::getMessageParameters();
+
+ $type = $this->entry->getFullType();
+
+ if ( $type === 'translationreview/message' ) {
+ $targetPage = $this->makePageLink(
+ $this->entry->getTarget(),
+ [ 'oldid' => $params[3] ]
+ );
+
+ $params[2] = Message::rawParam( $targetPage );
+ } elseif ( $type === 'translationreview/group' ) {
+ /*
+ * - 3: language code
+ * - 4: label of the message group
+ * - 5: old state
+ * - 6: new state
+ */
+
+ $uiLanguage = $this->context->getLanguage();
+ $language = $params[3];
+
+ // @phan-suppress-next-line SecurityCheck-DoubleEscaped Mixed plaintext/html mode
+ $targetPage = $this->makePageLinkWithText(
+ $this->entry->getTarget(),
+ $params[4],
+ [ 'language' => $language ]
+ );
+
+ $params[2] = Message::rawParam( $targetPage );
+ $params[3] = TranslateUtils::getLanguageName( $language, $uiLanguage->getCode() );
+ $params[5] = $this->formatStateMessage( $params[5] );
+ $params[6] = $this->formatStateMessage( $params[6] );
+ } elseif ( $type === 'translatorsandbox/rejected' ) {
+ // No point linking to the user page which cannot have existed
+ $params[2] = $this->entry->getTarget()->getText();
+ } elseif ( $type === 'translatorsandbox/promoted' ) {
+ // Gender for the target
+ $params[3] = User::newFromId( $params[3] )->getName();
+ }
+
+ return $params;
+ }
+
+ protected function formatStateMessage( $value ) {
+ $message = $this->msg( "translate-workflow-state-$value" );
+
+ return $message->isBlank() ? $value : $message->text();
+ }
+
+ /**
+ * @param Title|null $title The page
+ * @param string|null $text
+ * @param array $parameters Query parameters
+ * @return string
+ * @return-taint onlysafefor_html
+ */
+ protected function makePageLinkWithText(
+ ?Title $title, $text, array $parameters = []
+ ) {
+ if ( !$this->plaintext ) {
+ $link = $this->getLinkRenderer()->makeLink( $title, $text, [], $parameters );
+ } else {
+ $target = '***';
+ if ( $title instanceof Title ) {
+ $target = $title->getPrefixedText();
+ }
+ $link = "[[$target|$text]]";
+ }
+
+ return $link;
+ }
+}
diff --git a/Translate/utils/TranslateMetadata.php b/Translate/utils/TranslateMetadata.php
new file mode 100644
index 00000000..96ddbe8e
--- /dev/null
+++ b/Translate/utils/TranslateMetadata.php
@@ -0,0 +1,251 @@
+<?php
+/**
+ * Contains class which offers functionality for reading and updating Translate group
+ * related metadata
+ *
+ * @file
+ * @author Niklas Laxström
+ * @author Santhosh Thottingal
+ * @copyright Copyright © 2012-2013, Niklas Laxström, Santhosh Thottingal
+ * @license GPL-2.0-or-later
+ */
+
+class TranslateMetadata {
+ /** @var array Map of (group => key => value) */
+ private static $cache = [];
+ /** @var array */
+ private static $priorityCache;
+
+ /**
+ * @param string[] $groups List of translate groups
+ * @param string $caller
+ */
+ public static function preloadGroups( array $groups, string $caller ) {
+ $missing = array_keys( array_diff_key( array_flip( $groups ), self::$cache ) );
+ if ( !$missing ) {
+ return;
+ }
+
+ $fname = __METHOD__ . " (for $caller)";
+
+ self::$cache += array_fill_keys( $missing, null ); // cache negatives
+
+ $dbr = TranslateUtils::getSafeReadDB();
+ $conds = count( $missing ) <= 500 ? [ 'tmd_group' => array_map( 'strval', $missing ) ] : [];
+ $res = $dbr->select(
+ 'translate_metadata',
+ [ 'tmd_group', 'tmd_key', 'tmd_value' ],
+ $conds,
+ $fname
+ );
+ foreach ( $res as $row ) {
+ self::$cache[$row->tmd_group][$row->tmd_key] = $row->tmd_value;
+ }
+ }
+
+ /**
+ * Get a metadata value for the given group and key.
+ * @param string $group The group name
+ * @param string $key Metadata key
+ * @return string|bool
+ */
+ public static function get( $group, $key ) {
+ self::preloadGroups( [ $group ], __METHOD__ );
+
+ return self::$cache[$group][$key] ?? false;
+ }
+
+ /**
+ * Get a metadata value for the given group and key.
+ * If it does not exist, return the default value.
+ * @param string $group
+ * @param string $key
+ * @param string $defaultValue
+ * @return string
+ */
+ public static function getWithDefaultValue(
+ string $group, string $key, string $defaultValue
+ ): string {
+ $value = self::get( $group, $key );
+ return $value === false ? $defaultValue : $value;
+ }
+
+ /**
+ * Set a metadata value for the given group and metadata key. Updates the
+ * value if already existing.
+ * @param string $group The group id
+ * @param string $key Metadata key
+ * @param string|false $value Metadata value, false deletes from cache
+ */
+ public static function set( $group, $key, $value ) {
+ $dbw = wfGetDB( DB_PRIMARY );
+ $data = [ 'tmd_group' => $group, 'tmd_key' => $key, 'tmd_value' => $value ];
+ if ( $value === false ) {
+ unset( $data['tmd_value'] );
+ $dbw->delete( 'translate_metadata', $data, __METHOD__ );
+ unset( self::$cache[$group][$key] );
+ } else {
+ $dbw->replace(
+ 'translate_metadata',
+ [ [ 'tmd_group', 'tmd_key' ] ],
+ $data,
+ __METHOD__
+ );
+ self::$cache[$group][$key] = $value;
+ }
+
+ self::$priorityCache = null;
+ }
+
+ /**
+ * Wrapper for getting subgroups.
+ * @param string $groupId
+ * @return string[]|null
+ * @since 2012-05-09
+ */
+ public static function getSubgroups( string $groupId ): ?array {
+ $groups = self::get( $groupId, 'subgroups' );
+ if ( is_string( $groups ) ) {
+ if ( strpos( $groups, '|' ) !== false ) {
+ $groups = explode( '|', $groups );
+ } else {
+ $groups = array_map( 'trim', explode( ',', $groups ) );
+ }
+
+ foreach ( $groups as $index => $id ) {
+ if ( trim( $id ) === '' ) {
+ unset( $groups[$index] );
+ }
+ }
+ } else {
+ $groups = null;
+ }
+
+ return $groups;
+ }
+
+ /**
+ * Wrapper for setting subgroups.
+ * @param string $groupId
+ * @param array $subgroupIds
+ * @since 2012-05-09
+ */
+ public static function setSubgroups( $groupId, $subgroupIds ) {
+ $subgroups = implode( '|', $subgroupIds );
+ self::set( $groupId, 'subgroups', $subgroups );
+ }
+
+ /**
+ * Wrapper for deleting one wiki aggregate group at once.
+ * @param string $groupId
+ * @since 2012-05-09
+ */
+ public static function deleteGroup( $groupId ) {
+ $dbw = wfGetDB( DB_PRIMARY );
+ $conds = [ 'tmd_group' => $groupId ];
+ $dbw->delete( 'translate_metadata', $conds, __METHOD__ );
+ self::$cache[$groupId] = null;
+ unset( self::$priorityCache[ $groupId ] );
+ }
+
+ public static function isExcluded( string $groupId, string $code ): bool {
+ if ( self::$priorityCache === null ) {
+ $db = TranslateUtils::getSafeReadDB();
+ $res = $db->select(
+ [
+ 'a' => 'translate_metadata',
+ 'b' => 'translate_metadata'
+ ],
+ [
+ 'group' => 'b.tmd_group',
+ 'langs' => 'b.tmd_value',
+ ],
+ [],
+ __METHOD__,
+ [],
+ [
+ 'b' => [
+ 'INNER JOIN',
+ [
+ 'a.tmd_group = b.tmd_group',
+ 'a.tmd_key' => 'priorityforce',
+ 'a.tmd_value' => 'on',
+ 'b.tmd_key' => 'prioritylangs',
+ ]
+ ]
+ ]
+ );
+
+ self::$priorityCache = [];
+ foreach ( $res as $row ) {
+ self::$priorityCache[$row->group] =
+ array_flip( explode( ',', $row->langs ) );
+ }
+ }
+
+ $isDiscouraged = MessageGroups::getPriority( $groupId ) === 'discouraged';
+ $hasLimitedLanguages = isset( self::$priorityCache[$groupId] );
+ $isLanguageIncluded = isset( self::$priorityCache[$groupId][$code] );
+
+ return $isDiscouraged || ( $hasLimitedLanguages && !$isLanguageIncluded );
+ }
+
+ /**
+ * Do a query optimized for page list in Special:PageTranslation
+ * @param string[] $groupIds
+ * @param string[] $keys Which metadata keys to load
+ * @return array<string,array<string,string>>
+ */
+ public static function loadBasicMetadataForTranslatablePages( array $groupIds, array $keys ): array {
+ $db = TranslateUtils::getSafeReadDB();
+ $res = $db->select(
+ 'translate_metadata',
+ [ 'tmd_group', 'tmd_key', 'tmd_value' ],
+ [
+ 'tmd_group' => $groupIds,
+ 'tmd_key' => $keys,
+ ],
+ __METHOD__
+ );
+
+ $ret = [];
+ foreach ( $res as $row ) {
+ $ret[$row->tmd_group][$row->tmd_key] = $row->tmd_value;
+ }
+
+ return $ret;
+ }
+
+ /**
+ * @param string $oldGroupId
+ * @param string $newGroupId
+ * @param string[] $metadataKeysToMove
+ * @return void
+ */
+ public static function moveMetadata(
+ string $oldGroupId,
+ string $newGroupId,
+ array $metadataKeysToMove
+ ): void {
+ self::preloadGroups( [ $oldGroupId, $newGroupId ], __METHOD__ );
+ foreach ( $metadataKeysToMove as $type ) {
+ $value = self::get( $oldGroupId, $type );
+ if ( $value !== false ) {
+ self::set( $oldGroupId, $type, false );
+ self::set( $newGroupId, $type, $value );
+ }
+ }
+ }
+
+ /**
+ * @param string $groupId
+ * @param string[] $metadataKeys
+ * @return void
+ */
+ public static function clearMetadata( string $groupId, array $metadataKeys ): void {
+ // remove the entries from metadata table.
+ foreach ( $metadataKeys as $type ) {
+ self::set( $groupId, $type, false );
+ }
+ }
+}
diff --git a/Translate/utils/TranslatePreferences.php b/Translate/utils/TranslatePreferences.php
new file mode 100644
index 00000000..f358640b
--- /dev/null
+++ b/Translate/utils/TranslatePreferences.php
@@ -0,0 +1,68 @@
+<?php
+/**
+ * Contains classes for addition of extension specific preference settings.
+ *
+ * @file
+ * @author Siebrand Mazeland
+ * @author Niklas Laxström
+ * @copyright Copyright © 2008-2010 Siebrand Mazeland, Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Extension\Translate\Utilities\HTMLJsSelectToInputField;
+use MediaWiki\Extension\Translate\Utilities\JsSelectToInput;
+use MediaWiki\MediaWikiServices;
+
+/**
+ * Class to add Translate specific preference settings.
+ */
+class TranslatePreferences {
+ /**
+ * Add 'translate-editlangs' preference.
+ * These are the languages also shown when translating.
+ *
+ * @param User $user
+ * @param array &$preferences
+ * @return bool true
+ */
+ public static function translationAssistLanguages( User $user, &$preferences ) {
+ // Get selector.
+ $select = self::languageSelector();
+ // Set target ID.
+ $select->setTargetId( 'mw-input-translate-editlangs' );
+ // Get available languages.
+ $languages = MediaWikiServices::getInstance()->getLanguageNameUtils()->getLanguageNames();
+
+ $preferences['translate-editlangs'] = [
+ 'class' => HTMLJsSelectToInputField::class,
+ // prefs-translate
+ 'section' => 'editing/translate',
+ 'label-message' => 'translate-pref-editassistlang',
+ 'help-message' => 'translate-pref-editassistlang-help',
+ 'select' => $select,
+ 'valid-values' => array_keys( $languages ),
+ 'name' => 'translate-editlangs',
+ ];
+
+ return true;
+ }
+
+ /**
+ * JavsScript selector for language codes.
+ * @return JsSelectToInput
+ */
+ protected static function languageSelector() {
+ $lang = RequestContext::getMain()->getLanguage();
+ $languages = MediaWikiServices::getInstance()->getLanguageNameUtils()->getLanguageNames( $lang->getCode() );
+ ksort( $languages );
+
+ $selector = new XmlSelect( false, 'mw-language-selector' );
+ foreach ( $languages as $code => $name ) {
+ $selector->addOption( "$code - $name", $code );
+ }
+
+ $jsSelect = new JsSelectToInput( $selector );
+
+ return $jsSelect;
+ }
+}
diff --git a/Translate/utils/TranslateRcFilter.php b/Translate/utils/TranslateRcFilter.php
new file mode 100644
index 00000000..7b804ee2
--- /dev/null
+++ b/Translate/utils/TranslateRcFilter.php
@@ -0,0 +1,252 @@
+<?php
+/**
+ * Contains class with filter to Special:RecentChanges to enable additional
+ * filtering.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @copyright Copyright © 2010, Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * Adds a new filter to Special:RecentChanges which makes it possible to filter
+ * translations away or show them only.
+ */
+class TranslateRcFilter {
+ /**
+ * Hooks ChangesListSpecialPageQuery. See the hook documentation for
+ * documentation of the function parameters.
+ *
+ * Appends SQL filter conditions into $conds.
+ * @param string $pageName
+ * @param array &$tables
+ * @param array &$fields
+ * @param array &$conds
+ * @param array &$query_options
+ * @param array &$join_conds
+ * @param FormOptions $opts
+ * @return bool true
+ */
+ public static function translationFilter( $pageName, &$tables, &$fields, &$conds,
+ &$query_options, &$join_conds, FormOptions $opts
+ ) {
+ global $wgTranslateRcFilterDefault;
+
+ if ( $pageName !== 'Recentchanges' || self::isStructuredFilterUiEnabled() ) {
+ return true;
+ }
+
+ $request = RequestContext::getMain()->getRequest();
+ $translations = $request->getVal( 'translations', $wgTranslateRcFilterDefault );
+ $opts->add( 'translations', $wgTranslateRcFilterDefault );
+ $opts->setValue( 'translations', $translations );
+
+ $dbr = wfGetDB( DB_REPLICA );
+
+ $namespaces = self::getTranslateNamespaces();
+
+ if ( $translations === 'only' ) {
+ $conds[] = 'rc_namespace IN (' . $dbr->makeList( $namespaces ) . ')';
+ $conds[] = 'rc_title like \'%%/%%\'';
+ } elseif ( $translations === 'filter' ) {
+ $conds[] = 'rc_namespace NOT IN (' . $dbr->makeList( $namespaces ) . ')';
+ } elseif ( $translations === 'site' ) {
+ $conds[] = 'rc_namespace IN (' . $dbr->makeList( $namespaces ) . ')';
+ $conds[] = 'rc_title not like \'%%/%%\'';
+ }
+
+ return true;
+ }
+
+ private static function getTranslateNamespaces() {
+ global $wgTranslateMessageNamespaces;
+ $namespaces = [];
+
+ foreach ( $wgTranslateMessageNamespaces as $index ) {
+ $namespaces[] = $index;
+ $namespaces[] = $index + 1; // Include Talk namespaces
+ }
+
+ return $namespaces;
+ }
+
+ /**
+ * Hooks SpecialRecentChangesPanel. See the hook documentation for
+ * documentation of the function parameters.
+ *
+ * Adds a HTMl selector into $items
+ * @param array &$items
+ * @param FormOptions $opts
+ * @return bool true
+ */
+ public static function translationFilterForm( &$items, $opts ) {
+ if ( self::isStructuredFilterUiEnabled() ) {
+ return true;
+ }
+
+ $opts->consumeValue( 'translations' );
+ $default = $opts->getValue( 'translations' );
+
+ $label = Xml::label(
+ wfMessage( 'translate-rc-translation-filter' )->text(),
+ 'mw-translation-filter'
+ );
+ $select = new XmlSelect( 'translations', 'mw-translation-filter', $default );
+ $select->addOption(
+ wfMessage( 'translate-rc-translation-filter-no' )->text(),
+ 'noaction'
+ );
+ $select->addOption( wfMessage( 'translate-rc-translation-filter-only' )->text(), 'only' );
+ $select->addOption(
+ wfMessage( 'translate-rc-translation-filter-filter' )->text(),
+ 'filter'
+ );
+ $select->addOption( wfMessage( 'translate-rc-translation-filter-site' )->text(), 'site' );
+
+ $items['translations'] = [ $label, $select->getHTML() ];
+
+ return true;
+ }
+
+ private static function isStructuredFilterUiEnabled() {
+ $context = RequestContext::getMain();
+
+ // This assumes usage only on RC page
+ $page = new SpecialRecentChanges();
+ $page->setContext( $context );
+
+ // isStructuredFilterUiEnabled used to be a protected method in older versions :(
+ return is_callable( [ $page, 'isStructuredFilterUiEnabled' ] ) &&
+ $page->isStructuredFilterUiEnabled();
+ }
+
+ /**
+ * Hooks ChangesListSpecialPageStructuredFilters. See the hook documentation for
+ * documentation of the function parameters.
+ *
+ * Adds translations filters to structured UI
+ * @param ChangesListSpecialPage $special
+ * @return bool true
+ */
+ public static function onChangesListSpecialPageStructuredFilters(
+ ChangesListSpecialPage $special
+ ) {
+ global $wgTranslateRcFilterDefault;
+ $defaultFilter = $wgTranslateRcFilterDefault !== 'noaction' ?
+ $wgTranslateRcFilterDefault :
+ ChangesListStringOptionsFilterGroup::NONE;
+
+ $translationsGroup = new ChangesListStringOptionsFilterGroup(
+ [
+ 'name' => 'translations',
+ 'title' => 'translate-rcfilters-translations',
+ 'priority' => -7,
+ 'default' => $defaultFilter,
+ 'isFullCoverage' => true,
+ 'filters' => [
+ [
+ 'name' => 'only',
+ 'label' => 'translate-rcfilters-translations-only-label',
+ 'description' => 'translate-rcfilters-translations-only-desc',
+ 'cssClassSuffix' => 'only',
+ 'isRowApplicableCallable' => function ( $ctx, $rc ) {
+ $namespaces = self::getTranslateNamespaces();
+
+ return in_array( $rc->getAttribute( 'rc_namespace' ), $namespaces ) &&
+ strpos( $rc->getAttribute( 'rc_title' ), '/' ) !== false;
+ }
+ ],
+ [
+ 'name' => 'site',
+ 'label' => 'translate-rcfilters-translations-site-label',
+ 'description' => 'translate-rcfilters-translations-site-desc',
+ 'cssClassSuffix' => 'site',
+ 'isRowApplicableCallable' => function ( $ctx, $rc ) {
+ $namespaces = self::getTranslateNamespaces();
+
+ return in_array( $rc->getAttribute( 'rc_namespace' ), $namespaces ) &&
+ strpos( $rc->getAttribute( 'rc_title' ), '/' ) === false;
+ }
+ ],
+ [
+ 'name' => 'filter',
+ 'label' => 'translate-rcfilters-translations-filter-label',
+ 'description' => 'translate-rcfilters-translations-filter-desc',
+ 'cssClassSuffix' => 'filter',
+ 'isRowApplicableCallable' => function ( $ctx, $rc ) {
+ $namespaces = self::getTranslateNamespaces();
+
+ return !in_array( $rc->getAttribute( 'rc_namespace' ), $namespaces );
+ }
+ ],
+ ],
+ 'queryCallable' => function ( $specialClassName, $ctx, $dbr, &$tables,
+ &$fields, &$conds, &$query_options, &$join_conds, $selectedValues
+ ) {
+ $fields = array_merge( $fields, [ 'rc_title', 'rc_namespace' ] );
+
+ $namespaces = self::getTranslateNamespaces();
+ $inNamespaceCond = 'rc_namespace IN (' .
+ $dbr->makeList( $namespaces ) . ')';
+ $notInNamespaceCond = 'rc_namespace NOT IN (' .
+ $dbr->makeList( $namespaces ) . ')';
+
+ $onlyCond = $dbr->makeList( [
+ $inNamespaceCond,
+ 'rc_title ' .
+ $dbr->buildLike( $dbr->anyString(), '/', $dbr->anyString() )
+ ], LIST_AND );
+ $siteCond = $dbr->makeList( [
+ $inNamespaceCond,
+ 'rc_title NOT' .
+ $dbr->buildLike( $dbr->anyString(), '/', $dbr->anyString() )
+ ], LIST_AND );
+
+ if ( count( $selectedValues ) === 3 ) {
+ // no filters
+ return;
+ }
+
+ if ( $selectedValues === [ 'filter', 'only' ] ) {
+ $conds[] = $dbr->makeList( [
+ $notInNamespaceCond,
+ $onlyCond
+ ], LIST_OR );
+ return;
+ }
+
+ if ( $selectedValues === [ 'filter', 'site' ] ) {
+ $conds[] = $dbr->makeList( [
+ $notInNamespaceCond,
+ $siteCond
+ ], LIST_OR );
+ return;
+ }
+
+ if ( $selectedValues === [ 'only', 'site' ] ) {
+ $conds[] = $inNamespaceCond;
+ return;
+ }
+
+ if ( $selectedValues === [ 'filter' ] ) {
+ $conds[] = $notInNamespaceCond;
+ return;
+ }
+
+ if ( $selectedValues === [ 'only' ] ) {
+ $conds[] = $onlyCond;
+ return;
+ }
+
+ if ( $selectedValues === [ 'site' ] ) {
+ $conds[] = $siteCond;
+ }
+ }
+ ]
+ );
+
+ $special->registerFilterGroup( $translationsGroup );
+ return true;
+ }
+}
diff --git a/Translate/utils/TranslateSandbox.php b/Translate/utils/TranslateSandbox.php
new file mode 100644
index 00000000..fed7df23
--- /dev/null
+++ b/Translate/utils/TranslateSandbox.php
@@ -0,0 +1,318 @@
+<?php
+/**
+ * Utilities for the sandbox feature of Translate.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Auth\AuthenticationRequest;
+use MediaWiki\Auth\AuthenticationResponse;
+use MediaWiki\Auth\AuthManager;
+use MediaWiki\Extension\Translate\SystemUsers\TranslateUserManager;
+use MediaWiki\Extension\Translate\TranslatorSandbox\TranslationStashActionApi;
+use MediaWiki\MediaWikiServices;
+use Wikimedia\ScopedCallback;
+
+/**
+ * Utility class for the sandbox feature of Translate. Do not try this yourself. This code makes a
+ * lot of assumptions about what happens to the user account.
+ */
+class TranslateSandbox {
+ /**
+ * Adds a new user without doing much validation.
+ *
+ * @param string $name User name.
+ * @param string $email Email address.
+ * @param string $password User provided password.
+ * @return User
+ * @throws MWException
+ */
+ public static function addUser( $name, $email, $password ) {
+ $user = User::newFromName( $name, 'creatable' );
+
+ if ( !$user ) {
+ throw new MWException( 'Invalid user name' );
+ }
+
+ $data = [
+ 'username' => $user->getName(),
+ 'password' => $password,
+ 'retype' => $password,
+ 'email' => $email,
+ 'realname' => '',
+ ];
+
+ $services = MediaWikiServices::getInstance();
+
+ $permissionManager = $services->getPermissionManager();
+ $creator = TranslateUserManager::getUser();
+ $guard = $permissionManager->addTemporaryUserRights( $creator, 'createaccount' );
+
+ $authManager = $services->getAuthManager();
+ $reqs = $authManager->getAuthenticationRequests( AuthManager::ACTION_CREATE );
+ $reqs = AuthenticationRequest::loadRequestsFromSubmission( $reqs, $data );
+ $res = $authManager->beginAccountCreation( $creator, $reqs, 'null:' );
+
+ ScopedCallback::consume( $guard );
+
+ switch ( $res->status ) {
+ case AuthenticationResponse::PASS:
+ break;
+ case AuthenticationResponse::FAIL:
+ // Unless things are misconfigured, this will handle errors such as username taken,
+ // invalid user name or too short password. The WebAPI is prechecking these to
+ // provide nicer error messages.
+ $reason = $res->message->inLanguage( 'en' )->useDatabase( false )->text();
+ throw new MWException( "Account creation failed: $reason" );
+ default:
+ // A provider requested further user input. Abort but clean up first if it was a
+ // secondary provider (in which case the user was created).
+ if ( $user->getId() ) {
+ self::deleteUser( $user, 'force' );
+ }
+
+ throw new MWException(
+ 'AuthManager does not support such simplified account creation'
+ );
+ }
+
+ // group-translate-sandboxed group-translate-sandboxed-member
+ $services->getUserGroupManager()->addUserToGroup( $user, 'translate-sandboxed' );
+
+ return $user;
+ }
+
+ /**
+ * Deletes a sandboxed user without doing much validation.
+ *
+ * @param User $user
+ * @param string $force If set to 'force' will skip the little validation we have.
+ * @throws MWException
+ */
+ public static function deleteUser( User $user, $force = '' ) {
+ $uid = $user->getId();
+ $actorId = $user->getActorId();
+
+ if ( $force !== 'force' && !self::isSandboxed( $user ) ) {
+ throw new MWException( 'Not a sandboxed user' );
+ }
+
+ // Delete from database
+ $dbw = wfGetDB( DB_PRIMARY );
+ $dbw->delete( 'user', [ 'user_id' => $uid ], __METHOD__ );
+ $dbw->delete( 'user_groups', [ 'ug_user' => $uid ], __METHOD__ );
+ $dbw->delete( 'user_properties', [ 'up_user' => $uid ], __METHOD__ );
+
+ MediaWikiServices::getInstance()->getActorStore()->deleteActor( $user, $dbw );
+
+ // Assume no joins are needed for logging or recentchanges
+ $dbw->delete( 'logging', [ 'log_actor' => $actorId ], __METHOD__ );
+ $dbw->delete( 'recentchanges', [ 'rc_actor' => $actorId ], __METHOD__ );
+
+ // Update the site stats
+ $statsUpdate = SiteStatsUpdate::factory( [ 'users' => -1 ] );
+ $statsUpdate->doUpdate();
+
+ // If someone tries to access still object still, they will get anon user
+ // data.
+ $user->clearInstanceCache( 'defaults' );
+
+ // Nobody should access the user by id anymore, but in case they do, purge
+ // the cache so they wont get stale data
+ $user->invalidateCache();
+ }
+
+ /**
+ * Get all sandboxed users.
+ * @return UserArray List of users.
+ */
+ public static function getUsers() {
+ $dbw = TranslateUtils::getSafeReadDB();
+ $userQuery = User::getQueryInfo();
+ $tables = array_merge( $userQuery['tables'], [ 'user_groups' ] );
+ $fields = $userQuery['fields'];
+ $conds = [
+ 'ug_group' => 'translate-sandboxed',
+ ];
+ $joins = [
+ 'user_groups' => [ 'JOIN', 'ug_user = user_id' ],
+ ] + $userQuery['joins'];
+
+ $res = $dbw->select( $tables, $fields, $conds, __METHOD__, [], $joins );
+
+ return UserArray::newFromResult( $res );
+ }
+
+ /**
+ * Removes the user from the sandbox.
+ * @param User $user
+ * @throws MWException
+ */
+ public static function promoteUser( User $user ) {
+ global $wgTranslateSandboxPromotedGroup;
+
+ if ( !self::isSandboxed( $user ) ) {
+ throw new MWException( 'Not a sandboxed user' );
+ }
+
+ $services = MediaWikiServices::getInstance();
+
+ $userGroupManager = $services->getUserGroupManager();
+ $userGroupManager->removeUserFromGroup( $user, 'translate-sandboxed' );
+
+ if ( $wgTranslateSandboxPromotedGroup ) {
+ $userGroupManager->addUserToGroup( $user, $wgTranslateSandboxPromotedGroup );
+ }
+
+ $userOptionsManager = $services->getUserOptionsManager();
+ $userOptionsManager->setOption( $user, 'translate-sandbox-reminders', '' );
+ $userOptionsManager->saveOptions( $user );
+ }
+
+ /**
+ * Sends a reminder to the user.
+ * @param User $sender
+ * @param User $target
+ * @param string $type 'reminder' or 'promotion'
+ * @throws MWException
+ * @since 2013.12
+ */
+ public static function sendEmail( User $sender, User $target, $type ) {
+ global $wgNoReplyAddress;
+
+ $userOptionsLookup = MediaWikiServices::getInstance()->getUserOptionsLookup();
+ $targetLang = $userOptionsLookup->getOption( $target, 'language' );
+
+ switch ( $type ) {
+ case 'reminder':
+ if ( !self::isSandboxed( $target ) ) {
+ throw new MWException( 'Not a sandboxed user' );
+ }
+
+ $subjectMsg = 'tsb-reminder-title-generic';
+ $bodyMsg = 'tsb-reminder-content-generic';
+ $targetSpecialPage = 'TranslationStash';
+
+ break;
+ case 'promotion':
+ $subjectMsg = 'tsb-email-promoted-subject';
+ $bodyMsg = 'tsb-email-promoted-body';
+ $targetSpecialPage = 'Translate';
+
+ break;
+ case 'rejection':
+ $subjectMsg = 'tsb-email-rejected-subject';
+ $bodyMsg = 'tsb-email-rejected-body';
+ $targetSpecialPage = 'TwnMainPage';
+
+ break;
+ default:
+ throw new MWException( "'$type' is an invalid type of translate sandbox email" );
+ }
+
+ $subject = wfMessage( $subjectMsg )->inLanguage( $targetLang )->text();
+ $body = wfMessage(
+ $bodyMsg,
+ $target->getName(),
+ SpecialPage::getTitleFor( $targetSpecialPage )->getCanonicalURL(),
+ $sender->getName()
+ )->inLanguage( $targetLang )->text();
+
+ $params = [
+ 'user' => $target->getId(),
+ 'to' => MailAddress::newFromUser( $target ),
+ 'from' => MailAddress::newFromUser( $sender ),
+ 'replyto' => new MailAddress( $wgNoReplyAddress ),
+ 'subj' => $subject,
+ 'body' => $body,
+ 'emailType' => $type,
+ ];
+
+ $services = MediaWikiServices::getInstance();
+ $userOptionsManager = $services->getUserOptionsManager();
+
+ $reminders = $userOptionsManager->getOption( $target, 'translate-sandbox-reminders' );
+ $reminders = $reminders ? explode( '|', $reminders ) : [];
+ $reminders[] = wfTimestamp();
+
+ $userOptionsManager->setOption( $target, 'translate-sandbox-reminders', implode( '|', $reminders ) );
+ $userOptionsManager->saveOptions( $target );
+
+ $services->getJobQueueGroup()->push( TranslateSandboxEmailJob::newJob( $params ) );
+ }
+
+ /**
+ * Shortcut for checking if given user is in the sandbox.
+ * @param User $user
+ * @return bool
+ * @since 2013.06
+ */
+ public static function isSandboxed( User $user ) {
+ $userGroupManager = MediaWikiServices::getInstance()->getUserGroupManager();
+ return in_array( 'translate-sandboxed', $userGroupManager->getUserGroups( $user ), true );
+ }
+
+ /** Hook: UserGetRights */
+ public static function enforcePermissions( User $user, array &$rights ): bool {
+ global $wgTranslateUseSandbox;
+
+ if ( !$wgTranslateUseSandbox ) {
+ return true;
+ }
+
+ if ( !self::isSandboxed( $user ) ) {
+ return true;
+ }
+
+ // right-translate-sandboxaction action-translate-sandboxaction
+ $rights = [
+ 'editmyoptions',
+ 'editmyprivateinfo',
+ 'read',
+ 'readapi',
+ 'translate-sandboxaction',
+ 'viewmyprivateinfo',
+ 'writeapi',
+ ];
+
+ // Do not let other hooks add more actions
+ return false;
+ }
+
+ /// Hook: onGetPreferences
+ public static function onGetPreferences( $user, &$preferences ) {
+ $preferences['translate-sandbox'] = $preferences['translate-sandbox-reminders'] =
+ [ 'type' => 'api' ];
+
+ return true;
+ }
+
+ /**
+ * Inclusion listing for certain API modules. See also enforcePermissions.
+ * Hook: ApiCheckCanExecute
+ * @param ApiBase $module
+ * @param User $user
+ * @param string &$message
+ * @return bool
+ */
+ public static function onApiCheckCanExecute( ApiBase $module, User $user, &$message ) {
+ $inclusionList = [
+ // Obviously this is needed to get out of the sandbox
+ TranslationStashActionApi::class,
+ // Used by UniversalLanguageSelector for example
+ 'ApiOptions'
+ ];
+
+ if ( self::isSandboxed( $user ) ) {
+ $class = get_class( $module );
+ if ( $module->isWriteMode() && !in_array( $class, $inclusionList, true ) ) {
+ $message = ApiMessage::create( 'apierror-writeapidenied' );
+ return false;
+ }
+ }
+
+ return true;
+ }
+}
diff --git a/Translate/utils/TranslateSandboxEmailJob.php b/Translate/utils/TranslateSandboxEmailJob.php
new file mode 100644
index 00000000..b426f9bd
--- /dev/null
+++ b/Translate/utils/TranslateSandboxEmailJob.php
@@ -0,0 +1,38 @@
+<?php
+
+use MediaWiki\MediaWikiServices;
+
+class TranslateSandboxEmailJob extends Job {
+
+ /**
+ * @param array $params
+ * @return self
+ */
+ public static function newJob( array $params ) {
+ return new self( Title::newMainPage(), $params );
+ }
+
+ /**
+ * @param Title $title
+ * @param array $params
+ */
+ public function __construct( $title, $params ) {
+ parent::__construct( __CLASS__, $title, $params );
+ }
+
+ public function run() {
+ $services = MediaWikiServices::getInstance();
+ $status = $services
+ ->getEmailer()
+ ->send(
+ [ $this->params['to'] ],
+ $this->params['from'],
+ $this->params['subj'],
+ $this->params['body'],
+ null,
+ [ 'replyTo' => $this->params['replyto'] ]
+ );
+
+ return $status->isOK();
+ }
+}
diff --git a/Translate/utils/TranslateToolbox.php b/Translate/utils/TranslateToolbox.php
new file mode 100644
index 00000000..77402211
--- /dev/null
+++ b/Translate/utils/TranslateToolbox.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Classes for adding extension specific toolbox menu items.
+ *
+ * @file
+ * @author Siebrand Mazeland
+ * @author Niklas Laxström
+ * @copyright Copyright © 2008-2010, Siebrand Mazeland, Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * Adds toolbox menu item to Special:Prefixindex to show all other
+ * available translations for a message. Only shown when it
+ * actually is a translatable/translated message.
+ */
+class TranslateToolbox {
+ /**
+ * @param Skin $skin
+ * @param array &$sidebar Array with sidebar items
+ *
+ * @return void
+ */
+ public static function toolboxAllTranslations( Skin $skin, array &$sidebar ): void {
+ $title = $skin->getTitle();
+ $handle = new MessageHandle( $title );
+
+ if ( !$handle->isValid() ) {
+ return;
+ }
+
+ $message = $title->getNsText() . ':' . $handle->getKey();
+ $url = $skin::makeSpecialUrl( 'Translations', [ 'message' => $message ] );
+
+ // Add the actual toolbox entry.
+ $sidebar['TOOLBOX'][ 'alltrans' ] = [
+ 'href' => $url,
+ 'id' => 't-alltrans',
+ 'msg' => 'translate-sidebar-alltrans',
+ ];
+ }
+}
diff --git a/Translate/utils/TranslateYaml.php b/Translate/utils/TranslateYaml.php
new file mode 100644
index 00000000..bad2e2ab
--- /dev/null
+++ b/Translate/utils/TranslateYaml.php
@@ -0,0 +1,186 @@
+<?php
+/**
+ * Contains wrapper class for interface to parse and generate YAML files.
+ *
+ * @file
+ * @author Ævar Arnfjörð Bjarmason
+ * @author Niklas Laxström
+ * @copyright Copyright © 2009-2013, Niklas Laxström, Ævar Arnfjörð Bjarmason
+ * @license GPL-2.0-or-later
+ */
+
+use MediaWiki\Shell\Shell;
+
+/**
+ * This class is a wrapper class to provide interface to parse
+ * and generate YAML files with syck or spyc backend.
+ */
+class TranslateYaml {
+ /**
+ * @param string $text
+ * @return array
+ * @throws MWException
+ */
+ public static function loadString( $text ) {
+ global $wgTranslateYamlLibrary;
+
+ switch ( $wgTranslateYamlLibrary ) {
+ case 'phpyaml':
+ // Harden: do not support unserializing objects.
+ $previousValue = ini_set( 'yaml.decode_php', false );
+ $ret = yaml_parse( $text );
+ ini_set( 'yaml.decode_php', $previousValue );
+ if ( $ret === false ) {
+ // Convert failures to exceptions
+ throw new InvalidArgumentException( 'Invalid Yaml string' );
+ }
+
+ return $ret;
+ case 'spyc':
+ $yaml = spyc_load( $text );
+
+ return self::fixSpycSpaces( $yaml );
+ case 'syck':
+ $yaml = self::syckLoad( $text );
+
+ return self::fixSyckBooleans( $yaml );
+ default:
+ throw new MWException( 'Unknown Yaml library' );
+ }
+ }
+
+ /**
+ * @param array &$yaml
+ * @return array
+ */
+ public static function fixSyckBooleans( &$yaml ) {
+ foreach ( $yaml as &$value ) {
+ if ( is_array( $value ) ) {
+ self::fixSyckBooleans( $value );
+ } elseif ( $value === 'yes' ) {
+ $value = true;
+ }
+ }
+
+ return $yaml;
+ }
+
+ /**
+ * @param array &$yaml
+ * @return array
+ */
+ public static function fixSpycSpaces( &$yaml ) {
+ foreach ( $yaml as $key => &$value ) {
+ if ( is_array( $value ) ) {
+ self::fixSpycSpaces( $value );
+ } elseif ( is_string( $value ) && $key === 'header' ) {
+ $value = preg_replace( '~^\*~m', ' *', $value ) . "\n";
+ }
+ }
+
+ return $yaml;
+ }
+
+ public static function load( $file ) {
+ $text = file_get_contents( $file );
+
+ return self::loadString( $text );
+ }
+
+ public static function dump( $text ) {
+ global $wgTranslateYamlLibrary;
+
+ switch ( $wgTranslateYamlLibrary ) {
+ case 'phpyaml':
+ return self::phpyamlDump( $text );
+ case 'spyc':
+ return Spyc::YAMLDump( $text );
+ case 'syck':
+ return self::syckDump( $text );
+ default:
+ throw new MWException( 'Unknown Yaml library' );
+ }
+ }
+
+ protected static function phpyamlDump( $data ) {
+ return yaml_emit( $data, YAML_UTF8_ENCODING );
+ }
+
+ protected static function syckLoad( $data ) {
+ # Make temporary file
+ $td = wfTempDir();
+ $tf = tempnam( $td, 'yaml-load-' );
+
+ # Write to file
+ file_put_contents( $tf, $data );
+
+ $cmd = "perl -MYAML::Syck=LoadFile -MPHP::Serialization=serialize -wle '" .
+ 'my $tf = q[' . $tf . '];' .
+ 'my $yaml = LoadFile($tf);' .
+ 'open my $fh, ">", "$tf.serialized" or die qq[Can not open "$tf.serialized"];' .
+ 'print $fh serialize($yaml);' .
+ 'close($fh);' .
+ "'";
+
+ self::runCommand( $cmd );
+
+ $serialized = file_get_contents( "$tf.serialized" );
+ $php_data = unserialize( $serialized );
+
+ unlink( $tf );
+ unlink( "$tf.serialized" );
+
+ return $php_data;
+ }
+
+ protected static function syckDump( $data ) {
+ # Make temporary file
+ $td = wfTempDir();
+ $tf = tempnam( $td, 'yaml-load-' );
+
+ # Write to file
+ $sdata = serialize( $data );
+ file_put_contents( $tf, $sdata );
+
+ $cmd = "perl -MYAML::Syck=DumpFile -MPHP::Serialization=unserialize -MFile::Slurp=slurp -we '" .
+ '$YAML::Syck::Headless = 1;' .
+ '$YAML::Syck::SortKeys = 1;' .
+ 'my $tf = q[' . $tf . '];' .
+ 'my $serialized = slurp($tf);' .
+ 'my $unserialized = unserialize($serialized);' .
+ 'my $unserialized_utf8 = deutf8($unserialized);' .
+ 'DumpFile(qq[$tf.yaml], $unserialized_utf8);' .
+ 'sub deutf8 {' .
+ 'if(ref($_[0]) eq "HASH") {' .
+ 'return { map { deutf8($_) } %{$_[0]} };' .
+ '} elsif(ref($_[0]) eq "ARRAY") {' .
+ 'return [ map { deutf8($_) } @{$_[0]} ];' .
+ '} else {' .
+ 'my $s = $_[0];' .
+ 'utf8::decode($s);' .
+ 'return $s;' .
+ '}' .
+ '}' .
+ "'";
+
+ self::runCommand( $cmd );
+ $yaml = file_get_contents( "$tf.yaml" );
+
+ unlink( $tf );
+ unlink( "$tf.yaml" );
+
+ return $yaml;
+ }
+
+ private static function runCommand( string $cmd ): void {
+ $result = Shell::command( $cmd )->execute();
+ $exitCode = $result->getExitCode();
+ $stdOutput = $result->getStdout();
+ $stdError = $result->getStderr();
+ if ( $exitCode !== 0 ) {
+ throw new MWException(
+ "The command '$cmd' died in execution with exit code '$exitCode': Output: $stdOutput \nError: $stdError"
+ );
+ }
+ }
+}
diff --git a/Translate/utils/TranslationStats.php b/Translate/utils/TranslationStats.php
new file mode 100644
index 00000000..8ec59075
--- /dev/null
+++ b/Translate/utils/TranslationStats.php
@@ -0,0 +1,61 @@
+<?php
+/**
+ * Contains class which offers functionality for statistics reporting.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @author Siebrand Mazeland
+ * @copyright Copyright © 2010-2013, Niklas Laxström, Siebrand Mazeland
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * Contains methods that provide statistics for message groups.
+ *
+ * @ingroup Stats
+ */
+class TranslationStats {
+ /**
+ * Returns translated percentage for message group in given
+ * languages
+ *
+ * @param string $group Unique key identifying the group
+ * @param string[] $languages List of language codes
+ * @param bool|int $threshold Minimum required percentage translated to
+ * return. Other given language codes will not be returned.
+ * @param bool $simple Return only codes or code/pecentage pairs
+ *
+ * @return (float|string)[] Array of key value pairs code (string)/percentage
+ * (float) or array of codes, depending on $simple
+ */
+ public static function getPercentageTranslated( $group, $languages, $threshold = false,
+ $simple = false
+ ) {
+ $stats = [];
+
+ $g = MessageGroups::singleton()->getGroup( $group );
+
+ $collection = $g->initCollection( 'en' );
+ foreach ( $languages as $code ) {
+ $collection->resetForNewLanguage( $code );
+ // Initialise messages
+ $collection->filter( 'ignored' );
+ $collection->filter( 'optional' );
+ // Store the count of real messages for later calculation.
+ $total = count( $collection );
+ $collection->filter( 'translated', false );
+ $translated = count( $collection );
+
+ $translatedPercentage = ( $translated * 100 ) / $total;
+ if ( $translatedPercentage >= $threshold ) {
+ if ( $simple ) {
+ $stats[] = $code;
+ } else {
+ $stats[$code] = $translatedPercentage;
+ }
+ }
+ }
+
+ return $stats;
+ }
+}
diff --git a/Translate/utils/lc.php b/Translate/utils/lc.php
new file mode 100644
index 00000000..a41f5898
--- /dev/null
+++ b/Translate/utils/lc.php
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * Helper function for adding namespace for message groups.
+ *
+ * It defines constants for the namespace (and talk namespace) and sets up
+ * restrictions and some other configuration.
+ * @param int $id Namespace number
+ * @param string $name Name of the namespace
+ * @param string|null $constant (optional) name of namespace constant, defaults to
+ * NS_ followed by upper case version of $name, e.g., NS_MEDIAWIKI
+ */
+function wfAddNamespace( $id, $name, $constant = null ) {
+ global $wgExtraNamespaces, $wgContentNamespaces, $wgTranslateMessageNamespaces,
+ $wgNamespaceProtection, $wgNamespacesWithSubpages, $wgNamespacesToBeSearchedDefault;
+
+ if ( $constant === null ) {
+ $constant = strtoupper( "NS_$name" );
+ }
+
+ define( $constant, $id );
+ define( $constant . '_TALK', $id + 1 );
+
+ $wgExtraNamespaces[$id] = $name;
+ $wgExtraNamespaces[$id + 1] = $name . '_talk';
+
+ $wgContentNamespaces[] = $id;
+ $wgTranslateMessageNamespaces[] = $id;
+
+ $wgNamespacesWithSubpages[$id] = true;
+ $wgNamespacesWithSubpages[$id + 1] = true;
+
+ $wgNamespaceProtection[$id] = [ 'translate' ];
+
+ $wgNamespacesToBeSearchedDefault[$id] = true;
+}